PVOL1BACKUP D%B1111001001 1Pe _vߋt& dR 5@V$d zt|xx| ҁr& 6L~7L e7x~~E҈C2S.  ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM ***  w 4  ť ť 0B < Aaw  ' UD$BA  &( U BQ b Е*  & & PHDR1RSX11MPBL58 00010001000100 00000 00000 000000DECFILE11A PPHDR2U0414404144 M 00 PPRSX11MPBL58RSX11MPBL58R#8<TBuWTkQ?r(^@rxrl^Arxl^Brl^Crl^Drl^Erl^Frl^Gr[qHr[qIr\KJr]KKr[qyL8xrl^M8l^N8[qO8[qyPt^^Qt^8^RM^SZg9;^TZg8^UZgd^VZg^WZg^JINQKqQPUFDOPzPXysdYOlysZOlyd[xX\kz?T]r8^ Ԁ__Mp:Ԁ`t:zr\KJr]KKr[qyL8xrl^M8l^N8[qO8[qyPt^^Qt^8^RM^SZg9;^TZg8^UZgd^VZg^WZg^JINQKqQPUFDOQzPPUFD ORzPPUFD OTzPa""_M"b""_Mc""]r8^ Ԁ__Mp:Ԁ`t:zr\KJr]KKr[qyL8xrl^M8l^N8[qO8[qyPt^^Qt^8^RM^SZg9;^TZg8^UZgd^VZg^WZg^JINQKqQPUFD OUzPPUFD OvzPPUFD Owz PPUFDOzPyddsddddddddddx0 dd ddddldd_ddeddmddaddddddf&dd,ddwdddduddddcddddddddv%dddddd)!dd"dd&Mdd&Qdd&Rdd&xdd &(dd &sddx'dd'dd(ddmR)ddw*?Tdd2ddo4dd8dd8%dd8(dd8[qddy:dd:dd:dd:ddbKddYMddMddMddkQdd~kQ_dpQddgQddQddQddkQddjDRddSddaTddh Xdd_?_rrys^Zl^sZl^___ ___ e_ a_PUFDOzP@r\KxQAr]KxQBr[qxQC8[qxQxel_0f_1Ol_2Ol_3 q_4r_5rl_6s_7v_8x_9x_:}_;~_<T_=_>_?_rrys^Zl^sZl^___ ___ e_ a_PUFDOz,PPUFDPz,P  :}} sz  KvssyzzyyyyKKyTsTsyssy s!sy"s#sy$ s% sy&s'sy(Ls)Lsy*s+sy,_-s.sy/Ms0Msy1LSs2LSsy3$qsy?$sy@$sA% yB% CsDsyE &[qF &[qyG vLH vL9IsQkQPUFDQz,PLdsymKsyKSsy;TsyTsyr[qysKywyyDE[qFG}H~KIvJKL[qM NOP_QeRmSaTa[qUV(W[qXY(Z[q[&\,],[q^_(`[qabcsefgh(ijk%lKsno(p[qqr(s[qt)!u)![qv"w&Mxx'yx'(zx'[q{'|(}((~([qR)w*?T22[q488(8[qy::::(:[q::[qbKbK(bK[qYMMM[qkQkQ(kQ[qoQQQQQQ%Q+QDRKSsS;TsaTTskQp&kQwkQ/kQDp:kQhLkQ`TkQxdkQgskQ kQ@kQ;skQ@ykQ09kQhkQKhkQ\kQ20 kQp:kQmhLkQfkQ^ykQ]~kQkQ^kQkQSGkQA'kQ `kQ_:kQZ8 kQqX kQ<!kQ8"kQ1kQ kQ4XRkQEgkQ pqkQykQokQkQe`kQ XkQykQfkQ?skQ$skQIHkQ"XHqkQ8yZkQNskQ_kQOskQ L!skQX""`kQL#"kQ"ZkQl#kQ# XkQc#wkQ #_kQ99skQny:kQRy:~kQ:kQuHskQ~,KskQbYMkQoMkQMskQMskQ$NskQPQkQRkQ4RskQRskQ6/SxkQTLSskQaXSHqkQ7SZkQ S`kQ;TdkQikQ9KkQ9kQlkQskQ zkQskQ̖skQyؖHqkQ skQskQ` kQsęskQ3ƙp:kQrЙHqkQtԙh~kQHTHqkQUdTskQjTkQ&THqkQC\XkQ\XxKkQdYskQ[kQ_ykQ0:dkQpekQPUFDwz PPUFDwz PPUFDwz PPUFDxz P^ FmkQ$qskQdYqwkQv kQfwkQYyykQzkQ)zkQz8kQz kQH}kQ! kQ#pkQ|#8;kQ}#}kQ$` kQ&dkQ)kQ)XkQ{*kQ,2kQ-kQ-8;kQ-`^kQ/0kQz/8;kQ2kQPUFDvz%PG}G}(DkQDkQD9ykQDjkQDkQD@,kQD:kQD:kQD:kQD:kQD:kQ!D:kQ%D:kQDhzkQ(D}kQ+ErkQEykQ,DEy_kQDEz_kQ.GEHSkQ5NEkQGiE.kQiE]kQiEhzkQoEhzkQrEkQsEkQsE'kQvEkQEhjkQEkQEL;kQ-FykQFkQF zkQFKkQAG@kQRG@kQGLkQG8^kQGp kQG}kQGkQG kQG8kQG@`kQG kQ-GkQ*KkQkQF "Sԙh~kQHTHqkQUdTskQjTkQ&THqkQC\XkQ\XxKkQdYskQ[kQ_ykQ0:dkQpekQPUFDz%PE DDEvGEQF F F`JxRG@kQGLkQG8^kQGp kQG}kQGkQG kQG8kQG@`kQG kQ-GkQ*KkQkQF "Sԙh~kQHTHqkQUdTskQjTkQ&THqkQC\XkQ\XxKkQdYskQ[kQ_ykQ0:dkQpekQPUFDOzP_Mp:DEvGEQF F F`JxRG@kQGLkQG8^kQGp kQG}kQGkQG kQG8kQG@`kQG kQ-GkQ*KkQkQF "Sԙh~kQHTHqkQUdTskQjTkQ&THqkQC\XkQ\XxKkQdYskQ[kQ_ykQ0:dkQpekQPUFD=pzP  p,e"_Mp:,UC;xHx hL(skQkQxkQ3@kQyxskQ hLkQęskQԙkQ""`w" zvX+u'Ԁy'Ԁy'Ԁy'Ԁ2XMԀfM+Ԁ"Ԁ.kQwqkQVqMkQ"wkQ:dwkQwqVqM"w:dwDjkQDkQD@,kQD:kQD:kQD:kQD:kQD:kQ!D:kQ%D:kQDhzkQ(D}kQ+ErkQEykQ,DEy_kQDEz_kQ.GEHSkQ5NEkQGiE.kQiE]kQiEhzkQoEhzkQrEkQsEkQsE'kQvEkQEhjkQPUFDzPz,d1KXwddwF wf'z,sQkQ#(Ԁ{QGwԀ{QrwԀy Ԁ y2 ԀD:kQ!D:kQ%D:kQDhzkQ(D}kQ+ErkQEykQ,DEy_kQDEz_kQ.GEHSkQ5NEkQGiE.kQiE]kQiEhzkQoEhzkQrEkQsEkQsE'kQvEkQEhjkQPHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADPPUFDNNzP.sz30APR8921481230APR89214812PUFDOOzP. CDF BuWTkQ30APR8921515630APR89215156 `.?z r(^30APR8921515730APR89215156l.@G4rxrl^30APR8921515830APR89215157u.AGVrxl^30APR8921515930APR89215158w'&.BWVV.rl^30APR8921520030APR89215159Uy.CY&rl^30APR8921520030APR89215200Oj.DYrl^30APR8921520130APR89215201k.EYrl^30APR8921520230APR89215201n.F^rl^30APR8921520230APR89215202+n.Gr[q30APR8921520330APR89215203:.H01r[q30APR8921520430APR89215203/m.Ir\K30APR8921520530APR89215204 %.J r]K30APR8921520530APR89215205+ 52.KzZr[qy30APR8921520630APR89215206J O4.LML8xrl^30APR8921520730APR89215207M [.MY8l^30APR8921520830APR89215207O .N()8[q30APR8921520930APR89215208'U  .Ob8[qy30APR8921520930APR89215209} .PTt^^30APR8921521030APR89215210 D.Qt^8^30APR8921521130APR89215210 .RM^30APR8921521230APR89215211 .SZg9;^30APR8921521230APR89215212 .TFZg8^30APR8921521330APR89215213 .UTZgd^30APR8921521430APR89215213 .VrZg^30APR8921521430APR89215214 .WrZg^30APR8921521530APR89215215  .JINQ12MAY8914143112MAY89141430 $.KqQ12MAY8914143212MAY89141432 Q8PUFDOPzP.XKysd30APR8921521730APR89215216 E.YKOlys30APR8921521730APR89215217 K.ZLtOlyd30APR8921521830APR89215218 9.[>:xX30APR8921521930APR89215219 .\@kz?T30APR8921522030APR89215220 !).]"Zr830APR8921522130APR89215221 c$.^B( Ԁ30APR8921522230APR89215222 v._B(_Mp:Ԁ30APR8921522330APR89215223 .`vwt:z30APR8921522930APR89215224u 6PUFDOQzPPUFD ORzPPUFD OTzP.aEF""_M"30APR8921523430APR89215231   D7.bab""_Mc""30APR8921523530APR89215235`ISPUFD OUzPPUFD OvzPPUFD Owz PPUFDOzP.y] dd30APR8921525330APR89215253  .s1dd30APR8921524930APR89215249 .;dd30APR8921532530APR89215325.Qjdd30APR8921533130APR89215330.<dd30APR8921532530APR89215324.9dd30APR8921535730APR89215357 .xKX0 dd30APR8921525330APR89215252.= dd30APR8921532030APR89215319 .Hdd30APR8921533030APR89215329.lRdd30APR8921524430APR89215244T.:_dd30APR8921535030APR89215349. 2edd30APR8921541130APR89215411 .Pmdd30APR8921534030APR89215340> .\Padd30APR8921540630APR89215405 .U dd30APR8921534130APR89215340 .Zdd30APR8921532130APR89215321.fJ&dd30APR8921524030APR89215240.T\,dd30APR8921540230APR89215401.wQdd30APR8921525230APR89215252#\.` dd30APR8921533330APR89215332 ).uPbdd30APR8921525130APR892152504.Wdd30APR8921541430APR89215413;(.c&dd30APR8921523830APR89215237Q.Bdd30APR8921534930APR89215349Sl.W dd30APR8921533730APR89215335 V6".Ndd30APR8921533230APR89215332a.v>,%dd30APR8921525130APR89215251hR.\<dd30APR8921533830APR89215337k%.X//dd30APR8921532130APR89215320.s5D.k )!dd30APR8921540530APR89215404 #.L"dd30APR8921534730APR89215347y&.R &Mdd30APR8921534330APR89215343Bx.X^&Qdd30APR8921534430APR89215343$.[ &Rdd30APR8921534530APR89215345.[ &xdd30APR8921534430APR89215344 P.IB &(dd30APR8921532630APR89215326L.S  &sdd30APR8921541530APR89215415 .\x'dd30APR8921533930APR89215339!:.I'dd30APR8921534630APR89215345 L).j(dd30APR8921540830APR89215408,.m1R)dd30APR8921524530APR89215244%.Inw*?Tdd30APR8921535130APR89215350/{.` r2dd30APR8921540030APR89215359 :.oI4dd30APR8921524630APR89215246&7.P 8dd30APR8921535630APR89215356 ,D.PL8%dd30APR8921540730APR892154078`.r8(dd30APR8921530330APR89215303NX.r8[qdd30APR8921530530APR89215305Oh.U zy:dd30APR8921534230APR89215341P@=.5:dd30APR8921535530APR89215355Y;.V":dd30APR8921540930APR89215408[kM.Mx:dd30APR8921532430APR89215323p6._dbKdd30APR8921533130APR89215331sKW.S.YMdd30APR8921532830APR89215328O.6.Mdd30APR8921530030APR89215300B.WMdd30APR8921541030APR892154103[.skQdd30APR8921541030APR89215409m.~XlkQ_d30APR8921525730APR89215257.pQ~Qdd30APR8921524730APR89215247S.g6$Qdd30APR8921524130APR892152409J.L bQdd30APR8921531830APR89215318 X.c dQdd30APR8921541330APR89215412?S.k&Qdd30APR8921524330APR89215243aM.jM.DRdd30APR8921524330APR89215242O.RSdd30APR8921532930APR89215329X.QjaTdd30APR8921541930APR89215419e.h<8 Xdd30APR8921524130APR89215241g.J \g.R jdd30APR8921535630APR89215355Es.TOldd30APR8921535830APR89215358N~.Ildd30APR8921532330APR89215322_h.2 qdd30APR8921541830APR89215417aNr.Xrdd30APR8921541630APR89215415c*.]sdd30APR8921535330APR89215353wP.avdd30APR8921532230APR89215322.t1wdd30APR8921525030APR89215249V{.nH xdd30APR8921524630APR89215245 g.6xdd30APR8921534830APR89215347?{.Uxdd30APR8921541830APR89215418{.Ixdd30APR8921531130APR89215311u.Ixdd30APR8921540030APR89215400w.M ydd30APR8921532830APR89215327.2ydd30APR8921535430APR892153547z.z<dzdd30APR8921525430APR89215254xz.;nzdd30APR8921531930APR89215319|.D}dd30APR8921532730APR892153261~.M ~dd30APR8921541430APR89215414{.\4~%dd30APR8921533430APR89215333.>@~dd30APR8921534830APR89215348ۂ.44dd30APR8921535230APR89215351.<Tdd30APR8921535330APR892153523.Kd|dd30APR8921535930APR89215358܌.e dd30APR8921534230APR89215342 p.Jrdd30APR8921540630APR89215406 +.{)\dd30APR8921525530APR89215254.q1dd30APR8921524830APR89215247>.Gjdd30APR8921540330APR892154037.Ixd30APR8921541730APR89215416PUFDOzP.; Y30APR8921552630APR89215526"{_.7 ^Z30APR8921552530APR89215524#].7 Z30APR8921552830APR89215528$&b.;Y30APR8921572030APR89215719%l.9Y30APR8921572230APR89215721&d.A^Z30APR8921571830APR89215718'kk.9bZ30APR8921572330APR89215723(pg.A Z30APR8921572530APR89215725)i.<8[q30APR8921552130APR89215521*d~.;Y30APR8921595730APR89215956+s.:^Z30APR8921595530APR89215954,Wr.:Z30APR8921595930APR89215959-w.;Y30APR8922010830APR89220107.c.:^Z30APR8922010630APR89220105/[b.:Z30APR8922010930APR892201090f.;Y30APR8921583030APR892158291u.:^Z30APR8921582730APR892158272{s.LZ30APR8921583230APR892158323o.?J<9Y30APR8922021730APR892202164Ä.:$<9^Z30APR8922021930APR892202185.:J<9Z30APR8922022130APR892202206_.dGr%30APR8921543530APR892154347.iKr\K30APR8921543730APR89215436:Ӷ.r9r]K30APR8921543730APR89215437;.ePr[q30APR8921543630APR89215435<.*tsY30APR8921562130APR89215620>.*s^Z30APR8921561930APR89215619?V.*sZ30APR8921562230APR89215622@.G* Yl^30APR8921552730APR89215527A.G* ^Zl^30APR8921552630APR89215525F6.GJ Zl^30APR8921552930APR89215528K.Y zYl^30APR8921572130APR89215720 PE.CYl^30APR8921572230APR89215722Z.C^Zl^30APR8921571930APR89215718_/.CbZl^30APR8921572430APR89215724d.C0Zl^30APR8921572630APR89215725j.;8[ql^30APR8921552230APR89215522p.AYl^30APR8921595830APR89215957q.A2^Zl^30APR8921595630APR89215955t.ABZl^30APR8922000030APR89220000wŧ.JYl^30APR8922010830APR89220108z .J^Zl^30APR8922010730APR89220106.J4Zl^30APR8922011030APR89220110.GYl^30APR8921583130APR89215830?.G^Zl^30APR8921582930APR89215828.GZl^30APR8921583330APR89215833 .WH<9Yl^30APR8922021830APR89220217.E<9^Zl^30APR8922022030APR89220219.N<9Zl^30APR8922022230APR89220221.}L$r\Kl^30APR8921550130APR89215501.Mr]Kl^30APR8921550230APR89215502.Lrl^l^30APR8921550630APR89215505(.|M(r[ql^30APR8921550030APR89215500,.G`sYl^30APR8921562130APR89215621.G`s^Zl^30APR8921562030APR89215619}.GsZl^30APR8921562330APR89215623.~~n_30APR8922033830APR89220325}<.@_30APR8922034130APR89220339U].00_30APR8922034630APR89220342/ipt.&&l _30APR8922035130APR89220348%;w._30APR8922035430APR89220352 ^.<<_30APR8922040330APR89220356;x. 11e_30APR8922042730APR89220405 0 ϖ. a_30APR8922044130APR89220429=}5. _30APR8922044430APR89220442p. %%J,_30APR8922044830APR89220445$1>}. ((_30APR8922045130APR89220449'V>.77R_30APR8922045730APR892204536~-.T]_30APR8922054230APR89220457.@@:p_30APR8922054730APR89220543?.11~_30APR8922055130APR8922054807._30APR8922060130APR89220552%.cc%_30APR8922060830APR89220603b.99_30APR8922061230APR892206098,.xx.jL_30APR8922064430APR89220613eweK.AAF"_30APR8922065030APR89220645@."_30APR8922070430APR89220651k.eeR&_30APR8922071630APR89220705d7.&_30APR8922074030APR89220718#;.2x'_30APR8922075430APR89220742.<<'_30APR8922080030APR89220755;x.jj(_30APR8922081330APR89220801i4. dw*?T_30APR8922081630APR89220815 .8Z_30APR8922083530APR89220818' i{.WWy:_30APR8922084530APR89220837V [. 88:_30APR8922085230APR892208477!.!N:_30APR8922090230APR89220853J!."&1KX_30APR8922090530APR89220904!.#FFbK_30APR8922091430APR89220907E!.$MMYM_30APR8922092330APR89220915L1"\.%66M_30APR8922093030APR892209255~".&kQ_30APR8922094430APR89220932"<.'44BQ_30APR8922101330APR89220946L#3L$m.({{fDR_30APR8922102430APR89221014z$~.)4SJ_30APR8922103330APR89221025$.*ffaT_30APR8922104430APR89221035e% .+8QXx_30APR8922104630APR89221045 %/.,__30APR8922110430APR89221048%>X.-"".3 q_30APR8922115230APR89221150(p.4r_30APR8922120830APR892211535(Ku.5--rl_30APR8922130430APR89221210()*,+%.6s_30APR8922131730APR89221305,e.7bbv_30APR8922132330APR89221318a,4.8((nx_30APR8922132830APR89221325'[-.9""x_30APR8922133130APR89221329!-.:v}_30APR8922133530APR89221332- .;GG~_30APR8922135230APR89221336-F.YS.<\T_30APR8922135430APR89221353/@.=55 _30APR8922135830APR892213554/.><<d_30APR8922141630APR89221400D/;D0yO.?!!_30APR8922141930APR89221417 0".zrry30APR8921552030APR892155200b PUFDOzP.@wr\KxQ30APR8922143130APR892214300.Awr]KxQ30APR8922143230APR892214310.Bw!!r[qxQ30APR8922143330APR89221432 0V.Cw8[qxQ30APR8922143430APR892214330PUFDOz,PPUFDPz,P. ,PGG@ :}}30APR8922241930APR89222418F0 f. ,sz12MAY8914200230APR89222420F1F20. ,!"30APR8922242230APR89222421 83. ,K30APR8922242230APR89222422Y3.,56v30APR8922242330APR892224234`3-.,s30APR8922242530APR892224243?.,zsy30APR8922242530APR892224254.,z30APR8922242630APR8922242664.1, LSs30APR8922245330APR892224534U.2,zLSsy30APR8922245430APR892224544}H.3, ,z,$qsy30APR8922250330APR892225025+`.?,z$sy30APR8922250330APR892225035#v.@, $s30APR8922250430APR89222504'5n.A,z% y30APR8922250530APR89222505F55.B, % 30APR8922250630APR89222505G5.C,s30APR8922250630APR89222506O5.D,z4sy30APR8922250730APR89222507T5.E,#$ &[q30APR8922250830APR89222508"U5A.F,|  &[qy30APR8922250930APR89222508 x5".G,N vL30APR8922251030APR892225095.H,  vL930APR8922251130APR892225105E.I,N&&VsQkQ30APR8922251230APR89222511%5>PUFDQz,P.,:L30APR8922180930APR892218095.d,zsy30APR8922151730APR892215165 .m,zKsy30APR8922152930APR892215295f.,zKSsy30APR8922163530APR892216355H.,z;Tsy30APR8922163930APR892216385L.,zTsy30APR8922164330APR892216435H.,zr[qy30APR8922171730APR892217175h.,z<sKy30APR8922180830APR89221807 5x.,zwy30APR8922172530APR892217245h.,z y30APR8922180430APR892218045.D,ab30APR8922143630APR89221435`5`.E,9:[q30APR8922143730APR892214368H67.F,%&30APR8922143830APR89221437$6.G,=>}30APR8922143930APR89221438<6I.H,)*~K30APR8922144030APR89221439(6.I,*+v30APR8922144130APR89221440) 7.J,-.30APR8922144230APR89221441,67V.K,30APR8922144330APR89221442c7S.L, [q30APR8922144330APR89221443u7.M,:; 30APR8922144430APR892214449}7.N, 30APR8922144530APR892214457.O,UV30APR8922144630APR89221446T7.P,"#_30APR8922144730APR89221447!+8ػ.Q,e30APR8922144930APR89221448M83.R,m30APR8922145030APR892214498.S,a30APR8922145230APR892214508 m.T,a[q30APR8922145330APR892214529å.U,yz30APR8922145530APR89221454xd: .V,ef(30APR8922145730APR89221456d:..W,fg[q30APR8922145830APR89221457eB;8z.X,:;30APR8922145930APR892214599; .Y,(30APR8922150130APR89221500;x.Z,[q30APR8922150230APR89221501;m%.[,OP&30APR8922150330APR89221503N<.\,./,30APR8922150530APR89221504-c<.],,[q30APR8922150630APR89221505<[(.^,)*30APR8922150730APR89221507(<._,(30APR8922150930APR89221508<..`,[q30APR8922151030APR89221509<..a,DE30APR8922151130APR89221511C<:.b,30APR8922151430APR89221512C=C>e.c,s30APR8922151630APR89221515>i.e,/030APR8922151930APR89221518.>I.f,30APR8922152030APR89221520?j.g,NO30APR8922152230APR89221521M)?.h,,-(30APR8922152330APR89221522+w?.i,2330APR8922152430APR892215231?K.j,VW30APR8922152630APR89221525U?.k,MN%30APR8922152730APR89221526L+@.l,Ks30APR8922152830APR89221528x@q&.n,CD30APR8922153130APR89221530B|@ .o,#$(30APR8922153230APR89221531"@.p,)*[q30APR8922153330APR89221533(@I.q,30APR8922153530APR89221534 A.r,(30APR8922153730APR89221536A.s,[q30APR8922153930APR89221537¤B.t,:;)!30APR8922154030APR892215399gC+.u,)![q30APR8922154130APR89221540C?.v,23"30APR8922154230APR892215411Cj.w,*+&M30APR8922154330APR89221542)CQ0.x,x'30APR8922154430APR89221543DC.y,GHx'(30APR8922154530APR89221545FD^-.z,bcx'[q30APR8922154730APR89221546aD.{,FG'30APR8922154830APR89221547EKE.|,]^(30APR8922154930APR89221548\E& .},IJ((30APR8922155030APR89221550HE-.~,JK([q30APR8922155230APR89221551I7Fx.,R)30APR8922155330APR89221553F., w*?T30APR8922155430APR89221554 F!.,GH230APR8922155630APR89221555FF0.,-.2[q30APR8922155730APR89221556,Fk.,bc430APR8922155930APR89221558aG3.,xy830APR8922160130APR89221559whGXJ.,bc8(30APR8922160230APR89221601aG%V.,de8[q30APR8922160430APR89221603cBHe.,:;y:30APR8922160530APR892216049H .,-.:30APR8922160630APR89221606,H.,yz:30APR8922160830APR89221607x IM.,UV:(30APR8922160930APR89221609TIT.,WX:[q30APR8922161130APR89221610VIҗ.,01:30APR8922161230APR89221611/2J.,:[q30APR8922161330APR89221612bJW.,RSbK30APR8922161430APR89221614QwJ6.,)*bK(30APR8922161530APR89221615(JG7.,34bK[q30APR8922161730APR892216162J^.,23YM30APR8922161830APR892216171%K-.,IJM30APR8922161930APR89221619HWK5.,M[q30APR8922162030APR89221620K s.,bckQ30APR8922162130APR89221621aK4L.,IJkQ(30APR8922162230APR89221622HL\.,IJkQ[q30APR8922162430APR89221623HhL .,!"oQ30APR8922162530APR89221624 L.,Q30APR8922162630APR89221625L .,Q30APR8922162730APR89221626Lt.,Q30APR8922162830APR89221628Mk.,Q30APR8922162930APR89221628M.,Q%30APR8922163030APR89221630M.,Q+30APR8922163130APR89221631MO.,Q30APR8922163230APR89221632M.,DR30APR8922163430APR89221633պM.,KSs30APR8922163430APR89221634Ni.,56S30APR8922163630APR892216364N*.,;Ts30APR8922163830APR89221637Nm.,WXaT30APR8922164130APR89221640VNN.,Ts30APR8922164230APR89221641$Oi.,9:.,xe[q30APR8922165030APR89221649<P.,./ f30APR8922165130APR89221651-?P 4., f[q30APR8922165330APR89221652mPk., f30APR8922165430APR89221653P.,*+g30APR8922165530APR89221655)P\5.,g[q30APR8922165730APR89221656P.,12Ol30APR8922165830APR892216570PC.,z{Ol30APR8922170030APR89221659yPO.,Olf30APR8922170130APR89221700sQs., Ol[q30APR8922170230APR89221702wQȚ.,  q30APR8922170330APR89221703 Q'.,r30APR8922170530APR89221704Qߴ.,78r 30APR8922170630APR892217066DR[.,]^r30APR8922170830APR89221708\{RI.,MNr30APR8922171030APR89221709LRG.,tur30APR8922171230APR89221711s%S.,23r30APR8922171330APR892217121Sd.,TUr<930APR8922171530APR89221714SS.,r[q30APR8922171630APR89221715T.,:;rs30APR8922171930APR8922171891TH.,s30APR8922172130APR89221720kT.,`as(30APR8922172230APR89221721_T̞.,w30APR8922172330APR89221723\Ug.,:;x30APR8922172630APR892217259_USY.,./x30APR8922172730APR89221727-UyO.,x30APR8922172830APR89221728Um1PDATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATAP0,:;r001001SYSTEMSYSTEM SYSTEM SY00Qz200001USER USER A.NEW SY00QJ00 DATADATADATADATADATADATADATADATADATADATA00,:;r00 ! "!TADATADATADATADATADATA.;C.;*****************************************************************b.;* *3.;* RSX-11M-PLUS distribution kit. *f.;* *.;* **.;* Version 4.2 Base level 58 *.;* *4.;* Created on 30-APR-89 at 21:48:14 *.;* *..;* Created by KITBUILD version 07.07 *.;* *4.;* This kit is labelled RSX11MPBL58 *.;* *C.;*****************************************************************U.; .ENABLE GLOBAL* .ENABLE SUBSTITUTION* .SETS $V30LV "K,"*****b.;* *3.;* RSX-11M-PLUS distribution kit. *f.;* *.;* **.;* Version 4.2 Base level 58 *.;* *4.;* Created on 30-APR-89 at 21:48:14 *.;* *..;* Created by KITBUILD version 07.07 *.;* *4.;* This kit is labelled RSX11MPBL58 *.;* *C.;*****************************************************************U .; Title: VERSION.CMD .;E< .; This file defines the system version number for BASTART. .;  .ENABLE GLOBAL .SETS $VERSN "4.2" .SETS $BLVL "58" *.;* **.;* Version 4.2 Base level 58 *.;* *4.;* Created on 30-APR-89 at 21:48:14 *.;* *..;* Created by KITBUILD version 07.07 *.;* *4.;* This kit is labelled RSX11MPBL58 *.;* *C.;*****************************************************************U<0Y+@8-;-bK-$[.l[.[/6848h04;h/4Kh0~5[1b5[05[1L 82L ;2L K2nr /3Rr /3r 03/ && ((8'L(K,M-$)}E8O: &O 6846;4>6K4*)6l)5()5/8N/9~ 0:t[6&[7X[8Nw8;@;:rK;<ύ؍N8<~;<K=r%  .Ct=:Ct=Ct>>8> ?)@v)?()?/@6/@ 0A8A";B:KBVΫϫ,2xnC{nBnCqg;qz8OD";OCKOD:#`ة+(+,+h{"z(/F~/F 0G[D~[E[EksztHtGztH48hI&;hHKhH2/I~2/I&2 0I[ R "!!Jj!!J!! J'!)K'!)KZ'!)K6!8Lh6!;L6!KL[!8M^[!;M8[!KNq!tNq!tNq!tNhs!8hO^s!;hO4s!KhO"" #)P00"$,:;r #)O #)Pt #8Q #;P #KQn#8R#;QL#KR #HSX#HS# IS#xUj#{U #U & &Q !&9!&Jt"& "&)"&)"&Hb"& I"&z/&&#/&)V/&9h/&Jh2&2& ^3&^*I& ^I&8TI&;TI&KT&P!&^^&bn&b!&: &{; (^(v(z\(U@(8U(V;,x 4P$ 4^ 4b 4b$9tm09tl~9tl:ksL;{ nKkK2M =M{^xQmxxQ8m xQmST8nT;n`TKn0TTzpTzq|T {qJW&'W)BYL^^8F^9^E^Jd^M^O^ ^x^P^*^^E`[E`[ E`[ zE`[ TE`[ E`[ N`z N`{ jN` { 6N` { N`{ N`< 8N`O 1ayndzqdzsd {sfZRfztlfzvf {v`\g\\g$\g(jzjykzkykxk xkxnk8wkwp,q8O q8{ q;{ qK|Pq8$q;qKq8dq; qK!q)}0!q)|!q)|"qS}"q }%q)%q)~%q)v8q)8q)8q)tIq8z\q,qqor/or/or 0or[Lor[For[`r)sx<Xs{< s<B;s8$;s;;sKrUs)NUs)Us)cs8*Pcs;*csK*sxUzs{U:sUss86stv9wx 9w{ L9w 9wKO:wP&:wb&Dwx<(Dw{<>Dw<aw8,aw;awKiwt0iwtViwt(rwrw*rw rw8hrw;hrwKhw)Lw)w)wx Lw{ w x/x/Dx 0x8hySy 4yyy Cy:Eyx |Ey{ 6Ey Ny8bNy;8NyKRyx Ry{ Ry xWy[Wy[TWy[xyx Xy{ y yx Zy{ y y)y) y)y8y;yKRyx y{ ny ,y)y)y)py}yxUy{UyUyaya`y b&y8hy;h8yKhyx#y{#y#V4z4z`4z"DzHDzHDz IZkz8kz;$kzK}x )*}{ )} )~/~/~ 0~[~[~[[X3c')Z')0')I8hI;h^IKhL:L8hL;hXLKhS80S;SKxSzSzRS {$S8S;SK|x d|{ | 2 $8bSb 58hn5;h5Kh@}>/d/: 0aa bx#n{#.#\,E0\tH\ Itla <w,"wtR6\a e^a ^ .BLKB NFILES*S.BFHD+B .IFF .BLKB NFILES*T .ENDC .PSECT PSECTL .ENDM FSRSZ$fY .MACRO FDBDF$ .MCALL FDBSZ$ FDBSZ$B ...PC1=.L .BLKB S.FDB .ENDM FDBDF$EY' .MACRO FDAT$A RTYP,RATT,RSIZ,CNTG,ALOC .MCALL FDOFF$,CBYTE$,CWORD$ FDOFF$ DEF$L, CBYTE$ ,F.RTYPA CBYTE$ ,F.RATTC CWORD$ ,F.RSIZD CWORD$ ,F.CNTG CWORD$ ,F.ALOCS .ENDM FDAT$AY .MACRO FDRC$A RACC,URBA,URBS, .MCALL FDOFF$,CBYTE$,CWORD$ FDOFF$ DEF$LF CBYTE$ ,F.RACCH CWORD$ ,F.URBD+2  CWORD$ ,F.URBD .ENDM FDRC$AY( .MACRO FDOP$A LUN,FNPT,DFNB,FACC,FACTRL .MCALL FDOFF$,CBYTE$,CWORD$ FDOFF$ DEF$L. CBYTE$ ,F.LUNT CWORD$ ,F.DSPTL CWORD$ ,F.DFNB CBYTE$ ,F.FACC  CWORD$ ,F.ACTLR .ENDM FDOP$ACY! .MACRO FDBF$A EFN,OVBS,MBCT,MBFG  .MCALL FDOFF$,CBYTE$,CWORD$ FDOFF$ DEF$L CBYTE$ ,F.EFNC CWORD$ ,F.OVBSD CBYTE$ ,F.MBCTO CBYTE$ ,F.MBFGC .ENDM FDBF$AOY, .MACRO FDBK$A BKAD,BKSZ,BKVB,BKEF,BKST,BKDN .MCALL FDOFF$,CBYTE$,CWORD$ FDOFF$ DEF$LF CWORD$ ,F.BKDS+2$ CWORD$ ,F.BKDS  CWORD$ ,F.BKVB+2U CBYTE$ ,F.BKEFP CWORD$ ,F.BKSTN CWORD$ ,F.BKDNC .ENDM FDBK$ACY+ .MACRO FDAT$R FDB,RTYP,RATT,RSIZ,CNTG,ALOCE .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDBW CMOV$B RTYP,F.RTYP CMOV$B RATT,F.RATT CMOV$W RSIZ,F.RSIZD CMOV$W CNTG,F.CNTGC CMOV$W ALOC,F.ALOCM .ENDM FDAT$RBY! .MACRO FDRC$R FDB,RACC,URBA,URBS, .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB$ CMOV$B RACC,F.RACCO CMOV$W URBA,F.URBD+2C CMOV$W URBS,F.URBD .ENDM FDRC$RFY, .MACRO FDOP$R FDB,LUN,FNPT,DFNB,FACC,FACTRL .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB CMOV$B LUN,F.LUNT CMOV$W FNPT,F.DSPT, CMOV$W DFNB,F.DFNBD CMOV$B FACC,F.FACCL CMOV$W FACTRL,F.ACTLP .ENDM FDOP$R$Y% .MACRO FDBF$R FDB,EFN,OVBS,MBCT,MBFGC .MCALL LDFDB$,CMOV$W,CMOV$B LDFDB$ FDB CMOV$B EFN,F.EFNR CMOV$W OVBS,F.OVBSA CMOV$B MBCT,F.MBCT$ CMOV$B MBFG,F.MBFGB .ENDM FDBF$R Y0 .MACRO FDBK$R FDB,BKAD,BKSZ,BKVB,00"<! "!TADATADATADATADATADATABKEF,BKST,BKDN# .MCALL LDFDB$,CMOV$B,CMOV$W,CMOV$2P LDFDB$ FDBP CMOV$W BKAD,F.BKDS+2C CMOV$W BKSZ,F.BKDSV CMOV$2 BKVB,F.BKVBO CMOV$B BKEF,F.BKEF$ CMOV$W BKST,F.BKST$ CMOV$W BKDN,F.BKDN$ .ENDM FDBK$R~Y .MACRO FDBSZ$ .IIF DF,S.FDB,.MEXIT .MCALL FDOFF$,DEF$L FDOFF$ DEF$NC DEF$L S.FDB .ENDM FDBSZ$BRY .MACRO FDOF$L .MCALL FDOFF$ FDOFF$ DEF$L .ENDM FDOF$LCY+ .MACRO NMBLK$ FNAME,FTYPE,VERS,DEVNAM,UNITD .MCALL RAD50$,CWORD$,NBOFF$ NBOFF$ DEF$LL .IIF NDF,...PC1,...PC1=0$ ...PC3=...PC1 ...PC1=.K .=...PC1+N.FNAM RAD50$ ,S.FNAM/2 .=...PC1+N.FTYP RAD50$ ,S.FTYP/2 CWORD$ ,N.FVERK .IF NB,DEVNAM .=...PC1+N.DVNM .WORD "DEVNAM .ENDC CWORD$ ,N.UNITI .=...PC1+S.FNB$ ...PC1=...PC3 .ENDM NMBLK$SRY .MACRO NBOF$L .MCALL NBOFF$ NBOFF$ DEF$LD .ENDM NBOF$LEY .MACRO LDFDB$ FDB .IIF B,FDB,.MEXIT .NTYPE PAR$$$,FDB .IIF EQ,PAR$$$,.MEXIT MOV FDB,R0 .ENDM LDFDB$Y .MACRO CMOV$W VAR,OFFSET. .IF IDN,<#0>,. CLR OFFSET(R0)A .MEXITM .ENDC .IIF NB,VAR, MOV VAR,OFFSET(R0) .ENDM CMOV$WVY .MACRO CMOV$B VAR,OFFSETM .IF IDN,<#0>,N CLRB OFFSET(R0) .MEXIT .ENDC! .IIF NB,VAR, MOVB VAR,OFFSET(R0)B .ENDM CMOV$BY .MACRO CMOV$2 VAR,OFFSETF .IIF B,VAR,.MEXIT MOV VAR,-(SP) MOV @(SP),OFFSET(R0)F ADD #2,(SP) MOV @(SP)+,OFFSET+2(R0) .ENDM CMOV$2RY .MACRO CBYTE$ VAR,OFFSET .IF NB,VAR ...PC2=.V .=...PC1+OFFSET .BYTE VAR .=...PC2R .ENDC .ENDM CBYTE$Y .MACRO CWORD$ VAR,OFFSETN .IF NB,VAR ...PC2=. .=...PC1+OFFSET .WORD VAR .=...PC2< .ENDC .ENDM CWORD$T"Y& .MACRO CSTRG$ VAR,OFFSET,MAXLG,FILL=0 .IF NB, .NCHR ...PC3, .IF GE MAXLG-...PC3F ...PC2=., .=...PC1+OFFSET .ASCII ^VAR^F .REPT MAXLG-...PC3 .BYTE FILLS .ENDR .=...PC2R .IFF .ERROR .ENDCB .ENDC .ENDM CSTRG$NZY .MACRO CGET$B OFFSET,VARV" .IIF NB MOVB OFFSET(R0),VAR .ENDMZY .MACRO CGET$W OFFSET,VARF! .IIF NB MOV OFFSET(R0),VARS .ENDMY .MACRO FCSBT$ GLOBL .MCALL DEFIN$ ...GBL=0R" .IIF IDN,,,...GBL=1 DEFIN$ FD.FTN,1 DEFIN$ FD.CR,2 DEFIN$ FD.PRN,4 DEFIN$ FD.BLK,10 DEFIN$ FD.RWM,1 DEFIN$ FD.RAN,2 DEFIN$ FD.PLC,4 DEFIN$ FD.INS,10L DEFIN$ FD.REC,1 DEFIN$ FD.CCL,2 DEFIN$ FD.TTY,4 DEFIN$ FD.DIR,10C DEFIN$ FD.SDI,20 DEFIN$ FD.SQD,40B DEFIN$ FD.ISP,2000B DEFIN$ FD.OSP,4000) DEFIN$ FD.PSE,10000 DEFIN$ FD.COM,20000 DEFIN$ FD.F11,40000 DEFIN$ FD.MNT,100000, DEFIN$ NB.VER,1 DEFIN$ NB.TYP,2 DEFIN$ NB.NAM,4 DEFIN$ NB.SVR,10. DEFIN$ NB.STP,20G DEFIN$ NB.SNM,40L DEFIN$ NB.DIR,100 DEFIN$ NB.DEV,200 DEFIN$ NB.SD1,400 DEFIN$ NB.SD2,1000F DEFIN$ NB.ANS,2000  DEFIN$ NB.WCH,4000P DEFIN$ NB.WLV,10000 DEFIN$ NB.SUP,20000 DEFIN$ R.FIX,1 DEFIN$ R.VAR,2 DEFIN$ R.SEQ,3C DEFIN$ R.STM,42 DEFIN$ FA.RD,1D DEFIN$ FA.WRT,2 DEFIN$ FA.EXT,4 DEFIN$ FA.CRE,10N DEFIN$ FA.TMP,20F DEFIN$ FA.SHR,40D DEFIN$ FA.APD,100 DEFIN$ FA.NSP,100 DEFIN$ FO.RD,FA.RD# DEFIN$ FO.WRT,FA.WRT!FA.EXT!FA.CRED# DEFIN$ FO.APD,FA.WRT!FA.EXT!FA.APD DEFIN$ FO.MFY,FA.WRTF DEFIN$ FO.UPD,FA.WRT!FA.EXT DEFIN$ FA.ENB,1000000 DEFIN$ FA.SEQ,40000 DEFIN$ FA.WCK,20000 DEFIN$ FA.POS,10000 DEFIN$ FA.RWD,40000 DEFIN$ FA.EXL,40000 DEFIN$ FA.LKL,2000D DEFIN$ FA.EXC,2000N DEFIN$ FA.DLK,1000. DEFIN$ CH.AND,1 DEFIN$ FD.RAH,1 DEFIN$ FD.WBH,2 DEFIN$ FL.AEX,1;E DEFIN$ FL.VCP,2 DEFIN$ FF.RWD,1 DEFIN$ FF.POE,2 DEFIN$ FF.NV,3N DEFIN$ FF.SPC,4 DEFIN$ FF.CHR,5 DEFIN$ FF.RWF,6 DEFIN$ FT.ANI,1 DEFIN$ FT.BBF,2 DEFIN$ FT.MBF,4 .MACRO FCSBT$ ARG .ENDM FCSBT$ .ENDM FCSBT$AfY .MACRO DEFIN$ SYM,VAL .IIF EQ,...GBL-1,.GLOBL SYM SYM=^O .ENDM DEFIN$NY .MACRO FDOFF$ OFFSETF .MCALL OFFSET00"D,:;r,DEF$I,NBOFF$E NBOFF$ OFFSET DEF$I 0 OFFSET F.RTYP,1 OFFSET F.RATT,1 OFFSET F.RSIZ,2 OFFSET F.HIBK,4 OFFSET F.EFBK,4 OFFSET F.FFBY,2 OFFSET S.FATT OFFSET F.RACC,1 OFFSET F.RCTL,1 OFFSET F.BKDS OFFSET F.URBD,4 OFFSET F.BKST OFFSET F.NRBD,2 OFFSET F.BKDN OFFSET ,2 OFFSET F.OVBS OFFSET F.NREC,2 OFFSET F.EOBB,2 OFFSET F.CNTG OFFSET F.RCNM,2 OFFSET F.STBK OFFSET ,2 OFFSET F.ALOC,2 OFFSET F.LUN,1M OFFSET F.FACC,1 OFFSET F.DSPT,2 OFFSET F.DFNB,2 OFFSET F.BKEF OFFSET F.EFN,1F OFFSET F.BKP1,1 OFFSET F.ERR,21 OFFSET F.MBCT,1 OFFSET F.MBC1,1 OFFSET F.MBFG,1 OFFSET F.BGBC,1 OFFSET F.VBSZ,2 OFFSET F.BBFS,2 OFFSET F.BKVB OFFSET F.VBN,41 OFFSET F.BDB,2 OFFSET F.EXT4 OFFSET F.SPDV,2 OFFSET F.FLG2 OFFSET F.SPUN,1 OFFSET F.CHR,1E OFFSET F.ACTL,2 OFFSET F.SEQN,2 OFFSET F.FNB,S.FNBN! .IIF IDN,,,.MEXITK .IF IDN,,C* .GLOBL F.FNAM,F.FTYP,F.FVER,F.DVNM,F.UNIT .ENDC F.FNAM=N.FNAM+F.FNB F.FTYP=N.FTYP+F.FNB F.FVER=N.FVER+F.FNB F.DVNM=N.DVNM+F.FNB F.UNIT=N.UNIT+F.FNB OFFSET S.FDB1 DEF$I 0 OFFSET FX.LEN,2 OFFSET FX.DMX,1 OFFSET FX.DLN,1 OFFSET FX.DIR,2 .MACRO FDOFF$ ARG .ENDM FDOFF$ .ENDM FDOFF$EY .MACRO BDOFF$ OFFSET2 .MCALL OFFSET,DEF$I DEF$I 0 OFFSET ,4 OFFSET B.VBN,4E OFFSET B.BBFS,2 OFFSET B.NXBD,2 OFFSET ,1 OFFSET B.BFST,1 OFFSET ,2 OFFSET S.BFHD! .IIF IDN,,,.MEXITD .MACRO BDOFF$ ARG .ENDM BDOFF$F .ENDM BDOFF$.vY .MACRO NBOFF$ OFFSET= .MCALL OFFSET,DEF$I,DEF$L DEF$I 0 OFFSET S.FNAM OFFSET S.FTYP OFFSET S.FNTY OFFSET S.FNBW OFFSET S.ANM1 OFFSET S.ANM2 S.FNAM=6F S.FTYP=2N S.ANM1=12.. S.ANM2=5. S.FNTY=/2  OFFSET N.FID,2. OFFSET N.ANM1,4 OFFSET N.FNAM,S.FNAM OFFSET N.FTYP,S.FTYPE OFFSET N.FVER,2 OFFSET S.NFEN DEF$L S.NFEN  OFFSET N.STAT,2 OFFSET N.NEXT,2 OFFSET N.ANM2 OFFSET N.DID,6I OFFSET N.DVNM,2 OFFSET N.UNIT,2 OFFSET S.FNBF DEF$L S.FNB S.FNBW=S.FNB/2B! .IIF IDN,,,.MEXITD .MACRO NBOFF$ ARG .ENDM NBOFF$F .ENDM NBOFF$FxY .MACRO FSROF$ OFFSET1! .MCALL OFFSET,DEF$I,DEF$L,DEFIN$Y ...GBL=0M# .IIF IDN,,,...GBL=1. DEF$I 0 OFFSET ,4 OFFSET A.BFSR,2 OFFSET A.EFSR,2 OFFSET A.OWUI,2 OFFSET A.FIPR,2 OFFSET A.DPB,24.O OFFSET A.IOST,4 OFFSET A.DFDR,26. OFFSET A.DFBC,2 OFFSET A.DFUI,2 OFFSET A.JUMP,4 OFFSET A.MODE,2 .IF DF L$$GCL .IF DF V$$ACP OFFSET A.EXDS,52. DEFIN$ S.EXDS,52. OFFSET A.LGBK,80. DEFIN$ S.LGBK,80. OFFSET A.PRS,34.. DEFIN$ S.PRS,34.M OFFSET A.FLAG,2 DEFIN$ AF.CCR,1 DEFIN$ AF.RLG,2 .IFFF OFFSET A.EXDS,12. DEFIN$ S.EXDS,12. OFFSET A.LGBK,40. DEFIN$ S.LGBK,40. OFFSET A.PRS,28.O DEFIN$ S.PRS,28.F .ENDC .IFFO OFFSET A.EXDS,12. DEFIN$ S.EXDS,12. .ENDC OFFSET S.FSR2 DEF$L S.FSR2  DEF$I 0 OFFSET A.F5SZ,2 OFFSET A.LDVL,2 OFFSET A.LDVA,2 OFFSET A.LDIL,2 OFFSET A.LDIA,2 .IF DF V$$ACP OFFSET A.OUBK,80. OFFSET A.LODV,6 OFFSET A.LODI,52. OFFSET A.LIDV,6 OFFSET A.LIDI,52. OFFSET A.INBK,80. DEFIN$ S.LDV,6G DEFIN$ S.LDI,52.1 .IFFN OFFSET A.OUBK,40. OFFSET A.LODV,6 OFFSET A.LODI,12. OFFSET A.LIDV,6 OFFSET A.LIDI,12. OFFSET A.INBK DEFIN$ S.LDV,6. DEFIN$ S.LDI,12.. .ENDC OFFSET S.FSR5 DEF$I 0 OFFSET ,16. OFFSET D.DFID,6 OFFSET D.DFDV,2 OFFSET D.DFUN,2! .IIF IDN,,,.MEXITE .MACRO FSROF$ ARG .ENDM FSROF$E .ENDM FSROF$FY .MACRO FDSOF$ OFFSET. .MCALL OFFSET,DEF$I,DEF$L DEF$I 0 OFFSET N.DEVD,4 OFFSET N.DIRD,4 OFFSET N.FNMD,4 OFFSET S.FIDS .IF IDN,,F DEF$L S.FIDS .MEXIT. .ENDC .MACRO FDSOF$ ARG .ENDM FDSOF$6 .ENDM FDSOF$IrY .MACRO DEF$G VAR,SIZD .MCALL DEF$L. .IIF NB,VAR,.GLOBL VAR DEF$L VAR,SIZ .ENDM DEF$GVY .MACRO DEF$N VAR,SIZF .MCALL DEF$L, DEF$L ,SIZE .ENDM DEF$NFY .MACRO DEF$I IVAL ...TPC=^O .ENDM D00"L! "!TADATADATADATADATADATAEF$IY .MACRO DEF$L SYM,SIZI .IF NB,SYMI SYM=^O<...TPC>D .ENDC .IF NB,SIZ ...TPC=^O<...TPC+SIZ> .ENDC .ENDM DEF$LY .MACRO RAD50$ STRING,MAXWRD ...PC2=.D .RAD50 /STRING/ .IF GT,<.-...PC2>-^O<2*MAXWRD>3 .ERROR ;STRING RAD50 - STRING TOO LONG, TRUNCATED  .=^O<...PC2+<2*MAXWRD>> .MEXIT .ENDC .REPT ^O/2>> .WORD 0 .ENDR .ENDM RAD50$F@Y .MACRO CALL ADR JSR PC,ADR .ENDM CALL.<Y .MACRO RETURN RTS PC .ENDM RETURN$>Y .MACRO CALLR ADRT JMP ADR .ENDM CALLRY .MACRO ABRT$C TSK,PSCT,ERRL .MCALL ABRT$,DIR$ .IF NDF $$$GLBR .PSECT $DPB$.,D$$$=.. .IFTF ABRT$ TSK .IFT. .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ABRT$C Y .MACRO ABRT$S NADR,ERRD .MCALL RFA$,DIR$C RFA$ NADR MOV (PC)+,-(SP) .BYTE 83.,3 DIR$ ,ERR .ENDM ABRT$SY .MACRO ABRT$ TSKR .MCALL R50$,OFF$L .IF NDF $$$GLB .BYTE 83.,3 R50$ TSKP .ENDC .IF NDF A.BTTN .NLIST OFF$R OFF$ A.BTTN,4 .LIST .ENDC .ENDM ABRT$vY& .MACRO ACHN$ MOD,TBMSK,LUN,FSBUF,FSSZ .MCALL OFF$,LNMOD$. .IF NDF $$$GLB$ LNMOD$F .BYTE 207.,5 .BYTE 6 .BYTE MOD .BYTE LUN .BYTE TBMSK .WORD FSBUF .WORD FSSZ .ENDC .IF NDF A.LFUNR6 .IRP X,<,,,,> OFF$ X3 .ENDM .IRP X,<,> OFF$ XA .ENDM .ENDC .ENDM ACHN$Y. .MACRO ACHN$C MOD,TBMSK,LUN,FSBUF,FSSZ,CS,ERR .MCALL ACHN$,DIR$ .IF NDF $$$GLBT .PSECT $DPB$.,D$$$=.N .IFTF ACHN$ MOD,TBMSK,LUN,FSBUF,FSSZ  .IFTS .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ACHN$C$Y+ .MACRO ACHN$S MOD,TBMSK,LUN,FSBUF,FSSZ,ERRN .MCALL DIR$,MOV$,MVB$,LNMOD$. LNMOD$ MOV$ FSSZ MOV$ FSBUFR MVB$ LUN,TBMSKU MVB$ #6,MOD MOV (PC)+,-(SP) .BYTE 207.,53 DIR$ ,ERR .ENDM ACHN$S2Y# .MACRO ALTP$C TTASK,NPRIO,PSCT,ERR .MCALL ALTP$,DIR$ .IF NDF $$$GLBT .PSECT $DPB$.,D$$$=.R .IFTF ALTP$ TTASK,NPRIO .IFTL .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ALTP$CKY .MACRO ALTP$S NAME,PRI,ERR$ .MCALL MOV$,RFA$,DIR$ MOV$ PRI RFA$ NAME MOV (PC)+,-(SP) .BYTE 9.,4B DIR$ ,ERR .ENDM ALTP$SMY .MACRO ALTP$ NAME,PRI .MCALL R50$,OFF$U .IF NDF $$$GLB6 .BYTE 9.,4C R50$ NAME .WORD PRI .ENDC .IF NDF A.LTTN$ .NLIST OFF$ OFF$ A.LTTN,4 OFF$ A.LTPR,2 .LIST .ENDC .ENDM ALTP$Y .MACRO ALUN$C LUN,DA,DU,CS,ERR .MCALL ALUN$,DIR$ .IF NDF $$$GLBS .PSECT $DPB$.,D$$$=.C .IFTF ALUN$ LUN,DA,DU .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ALUN$CIY .MACRO ALUN$S LUN,DA,DU,ERR .MCALL MOV$,DIR$E MOV$ DU MOV$ DA MOV$ LUN MOV (PC)+,-(SP) .BYTE 7,4 DIR$ ,ERR .ENDM ALUN$SFRY .MACRO ALUN$ LUN,DA,DUP .MCALL OFF$ .IF NDF $$$GLB. .BYTE 7,4 .WORD LUN .IF B  .WORD 0 .IFF .NCHR $$$T1,$$$$T2=. .ASCII /DA/ .=$$$T2+2L .ENDC .WORD DU. .ENDC .IF NDF A.LULUF .NLIST+ .IRP X,<,,,>D OFF$ XF .ENDM .LIST .ENDC .ENDM ALUN$Y .MACRO ASTX$C PSCT,ERR  .MCALL ASTX$,DIR$ .IF NDF $$$GLBR .PSECT $DPB$.,D$$$=.M .IFTF ASTX$ .IFTS .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ASTX$CY .MACRO ASTX$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 115.,1L DIR$F .IIF NB , JSR PC,ERR .ENDM ASTX$SAZY .MACRO ASTX$T .IF NDF $$$GLBO .BYTE 115.,1 .ENDC .ENDM ASTX$Y .MACRO ATRG$ RDB, .MCALL OFF$ .IF NDF $$$GLB .BYTE 57.,2 .WORD RDB .ENDC .IF NDF A.TRBAA OFF$X OFF$ A.TRBA,2 .ENDC .ENDM ATRG$Y .MACRO ATRG$C RDB,CS,ERRF .MCALL ATRG$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=.A .IFTF ATRG$ RDB .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ATRG$C.Y .MACRO ATRG$S RDB,ERR .MCALL DIR$,MOV$$ MOV$ RD00"T,:;rB MOV (PC)+,-(SP) .BYTE 57.,2 DIR$ ,ERR .ENDM ATRG$SY0 .MACRO CINT$C VEC,BASE,ISR,DSI,PSW,AST,PSCT,ERR .MCALL CINT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.N .IFTF CINT$ VEC,BASE,ISR,DSI,PSW,ASTC .IFTM .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM CINT$CY+ .MACRO CINT$S VEC,BASE,ISR,DSI,PSW,AST,ERR .MCALL RVP$,DIR$ RVP$ VEC,BASE,ISR,DSI,PSW,AST MOV (PC)+,-(SP) .BYTE 129.,7 DIR$ ,ERR .ENDM CINT$SRLY& .MACRO CINT$ VEC,BASE,ISR,DSI,PSW,AST .MCALL OFF$ .IF NDF $$$GLBM .BYTE 129.,7 .WORD VEC .WORD BASEC .WORD ISR .WORD DSI .WORD PSW .WORD AST .ENDC .IF NDF C.INVE OFF$  OFF$ C.INVE,2 OFF$ C.INBA,2 OFF$ C.INIS,2 OFF$ C.INDI,2 OFF$ C.INPS,2 OFF$ C.INAS,2 .ENDC .ENDM CINT$Y .MACRO CLEF$C EFN,CS,ERR, .MCALL CLEF$,DIR$ .IF NDF $$$GLBR .PSECT $DPB$.,D$$$=.I .IFTF CLEF$ EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CLEF$CY .MACRO CLEF$S EFN,ERR .MCALL MOV$,DIR$$ MOV$ EFN$ MOV (PC)+,-(SP) .BYTE 31.,2 DIR$ ,ERR .ENDM CLEF$SRY .MACRO CLEF$ EFN .MCALL OFF$ .IF NDF $$$GLB .BYTE 31.,2 .WORD EFN .ENDC .IF NDF C.LEEFO .NLISTI OFF$F OFF$ C.LEEF,2 .LIST .ENDC .ENDM CLEF$2Y, .MACRO CLON$ MOD,PRMLST,LNS,LNSSZ,ENS,ENSSZ .MCALL OFF$,LNMOD$R .IF NDF $$$GLBD LNMOD$ .BYTE 207.,7E .BYTE 11. .BYTE MOD $$$ARG = 0 .IRP SYM .BYTE SYM$$$ARG=$$$ARG+1A .ENDM .IIF LT 2-$$$ARG,.ERROR .IF GT 2-$$$ARG .REPT <2-$$$ARG>. .BYTE 0 .ENDR .ENDC .WORD LNS .WORD LNSSZ .WORD ENS .WORD ENSSZ .ENDC .IF NDF C.LFUN$A .IRP X,<,,,,,> OFF$ XO .ENDM* .IRP X,<,,> OFF$ X .ENDM .ENDC .ENDM CLON$Y4 .MACRO CLON$C MOD,PRMLST,LNS,LNSSZ,ENS,ENSSZ,CS,ERR .MCALL CLON$,DIR$ .IF NDF $$$GLBA .PSECT $DPB$.,D$$$=.> .IFTF' CLON$ MOD,,LNS,LNSSZ,ENS,ENSSZ2 .IFT, .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CLON$CEY1 .MACRO CLON$S MOD,PRMLST,LNS,LNSSZ,ENS,ENSSZ,ERRZ .MCALL DIR$,MOV$,MVB$,LNMOD$R LNMOD$L MOV$ ENSSZD MOV$ ENS, MOV$ LNSSZ, MOV$ LNS MVB$ PRMLST MVB$ #11.,MOD MOV (PC)+,-(SP) .BYTE 207.,7 DIR$ ,ERR .ENDM CLON$S.0Y, .MACRO CLOG$ MOD,PRMLST,LNS,LNSSZ,ENS,ENSSZ .MCALL OFF$,LNMOD$. .IF NDF $$$GLB LNMOD$$ .BYTE 207.,7  .BYTE 0 .BYTE MOD $$$ARG = 0 .IRP SYM .BYTE SYM$$$ARG=$$$ARG+1  .ENDM .IIF LT 2-$$$ARG,.ERROR .IF GT 2-$$$ARG .REPT <2-$$$ARG>L .BYTE 0 .ENDR .ENDC .WORD LNS .WORD LNSSZ .WORD ENS .WORD ENSSZ .ENDC .IF NDF C.LFUN A .IRP X,<,,,,,>( OFF$ X) .ENDM* .IRP X,<,,> OFF$ X .ENDM .ENDC .ENDM CLOG$Y4 .MACRO CLOG$C MOD,PRMLST,LNS,LNSSZ,ENS,ENSSZ,CS,ERR .MCALL CLOG$,DIR$ .IF NDF $$$GLBA .PSECT $DPB$.,D$$$=.> .IFTF' CLOG$ MOD,,LNS,LNSSZ,ENS,ENSSZ2 .IFT, .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CLOG$CEY1 .MACRO CLOG$S MOD,PRMLST,LNS,LNSSZ,ENS,ENSSZ,ERRZ .MCALL DIR$,MOV$,MVB$,LNMOD$R LNMOD$L MOV$ ENSSZD MOV$ ENS, MOV$ LNSSZ, MOV$ LNS( MVB$ PRMLST MVB$ #0,MOD MOV (PC)+,-(SP) .BYTE 207.,7> DIR$ ,ERR .ENDM CLOG$SY .MACRO CMKT$C EFN,AST,PSCT,ERRP .MCALL CMKT$,DIR$ .IF NDF $$$GLBC .PSECT $DPB$.,D$$$=.$ .IFTF CMKT$ EFN,AST .IFT> .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM CMKT$C.Y .MACRO CMKT$S EFN,AST,ERR .MCALL DIR$,RVP$ $$$T1=0 .IIF NB EFN $$$T1=1 .IIF NB AST $$$T1=1 .IF EQ $$$T1  MOV (PC)+,-(SP) .BYTE 27.,1 .IFF RVP$ EFN,ASTN MOV (PC)+,-(SP) .BYTE 27.,3 .ENDC DIR$ ,ERR .ENDM CMKT$S+>Y .MACRO CMKT$ EFN,ASTM .MCALL OFF$ .IF NDF $$$GLBA $$$T1=0 .IIF NB EFN $$$T1=1 .IIF NB AST $$$T1=1 .IF EQ $$$T1. .BYTE 27.,1 .IFF$ .BYTE 27.,3 .WORD EFN00"\! "!TADATADATADATADATADATA .WORD AST .ENDC .ENDC .IF NDF C.MKEF .NLISTK OFF$ OFF$ C.MKEF,2 OFF$ C.MKAE,2 .LIST .ENDC .ENDM CMKT$Y .MACRO CNCT$ TNAME,EFN,EAST,ESB .MCALL OFF$,R50$ .IF NDF $$$GLB .BYTE 143.,6. R50$ TNAMEF .WORD EFN .WORD EAST .WORD ESB .ENDC .IF NDF C.NCTNN6 .IRP X,<,,,,> OFF$ X$ .ENDM .ENDC .ENDM CNCT$Y( .MACRO CNCT$C TNAME,EFN,EAST,ESB,CS,ERR .MCALL CNCT$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=.N .IFTF CNCT$ TNAME,EFN,EAST,ESBS .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CNCT$CY% .MACRO CNCT$S TNAME,EFN,EAST,ESB,ERRA .MCALL DIR$,MOV$,RFA$,MVB$. MOV$ ESBL MOV$ EAST MOV$ EFN0 RFA$ TNAMEO MOV (PC)+,-(SP) .BYTE 143.,6 DIR$ ,ERR .ENDM CNCT$S.Y .MACRO CPCR$ NAME .MCALL R50$,OFF$F .IF NDF $$$GLBN .BYTE 205.,3$ R50$ NAME .ENDC .IF NDF C.PCNMA OFF$E OFF$ C.PCNM,2 .ENDC .ENDM CPCR$Y .MACRO CPCR$C NAME,CS,ERR .MCALL CPCR$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.E .IFTF CPCR$ NAMEC .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CPCR$CRY .MACRO CPCR$S NAME,ERRL .MCALL DIR$,MOV$,RFA$ RFA$ NAME MOV (PC)+,-(SP) .BYTE 205.,3, DIR$ ,ERR .ENDM CPCR$S$Y .MACRO CRAW$ WDBA .MCALL OFF$ .IF NDF $$$GLBF .BYTE 117.,2E .WORD WDB .ENDC .IF NDF C.RABAF OFF$A OFF$ C.RABA,2 .ENDC .ENDM CRAW$Y .MACRO CRAW$C WDB,CS,ERRM .MCALL CRAW$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.D .IFTF CRAW$ WDB .IFTM .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CRAW$CNY .MACRO CRAW$S WDB,ERR .MCALL DIR$,MOV$L MOV$ WDB, MOV (PC)+,-(SP) .BYTE 117.,2) DIR$ ,ERR .ENDM CRAW$SRY .MACRO CRGF$C GROUP,CS,ERRW .MCALL CRGF$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.W .IFTF CRGF$ GROUP .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CRGF$CY .MACRO CRGF$S GROUP,ERR .MCALL MOV$,DIR$F MOV$ GROUP MOV (PC)+,-(SP) .BYTE 157.,2 DIR$ ,ERR .ENDM CRGF$S Y .MACRO CRGF$ GROUP$ .MCALL OFF$ .IF NDF $$$GLBR .BYTE 157.,2. .WORD GROUP .ENDC .IF NDF C.RGRP+ .NLIST. OFF$7 OFF$ C.RGRP,2 .LIST .ENDC .ENDM CRGF$Y .MACRO CRRG$ RDB. .MCALL OFF$ .IF NDF $$$GLBL .BYTE 55.,2 .WORD RDB .ENDC .IF NDF C.RRBA OFF$ OFF$ C.RRBA,2 .ENDC .ENDM CRRG$Y .MACRO CRRG$C RDB,CS,ERRS .MCALL CRRG$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=. .IFTF CRRG$ RDB .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CRRG$CUY .MACRO CRRG$S RDB,ERR .MCALL DIR$,MOV$O MOV$ RDB MOV (PC)+,-(SP) .BYTE 55.,2 DIR$ ,ERR .ENDM CRRG$SY! .MACRO CRVT$ IAST,OAST,AAST,MLEN .MCALL OFF$ .IF NDF $$$GLB$ .BYTE 149.,5. .WORD IASTB .WORD OASTF .WORD AAST .WORD MLEN  .ENDC .IF NDF C.RVIAC6 .IRP X,<,,,,> OFF$ X, .ENDM .ENDC .ENDM CRVT$Y) .MACRO CRVT$C IAST,OAST,AAST,MLEN,CS,ERRD .MCALL CRVT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.  .IFTF CRVT$ IAST,OAST,AAST,MLEN .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CRVT$CNY& .MACRO CRVT$S IAST,OAST,AAST,MLEN,ERR .MCALL DIR$,MOV$$ MOV$ MLEN MOV$ AAST MOV$ OAST MOV$ IAST MOV (PC)+,-(SP) .BYTE 149.,5O DIR$ ,ERR .ENDM CRVT$SCY .MACRO CSRQ$C TT,RT,CS,ERR, .MCALL CSRQ$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=. .IFTF CSRQ$ TT,RT .IFT, .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM CSRQ$CFY .MACRO CSRQ$S TN,RN,ERR .MCALL RFA$,DIR$S RFA$ TN MOV (PC)+,-(SP) .BYTE 25.,3 DIR$ ,ERR .ENDM CSRQ$SY .MACRO CSRQ$ TT,RTT .MCALL R50$,OFF$C .IF NDF $$$GLBM .BYTE 25.,3 R50$ TT .ENDC .IF NDF C.SRTNV .NLISTS OFF$Y OFF$ C.SRTN,4 OFF$ C.SRRN,4 .LIST .ENDC .ENDM CSRQ$Y00"d,:;r .MACRO DECL$C EFN,PSCT,ERR. .MCALL DECL$,DIR$ .IF NDF $$$GLB= .PSECT $DPB$.,D$$$=. .IFTF DECL$ EFN .IFT$ .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM DECL$CAtY .MACRO DECL$S EFN,ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 35.,1 DIR$ ,ERR .ENDM DECL$S\Y .MACRO DECL$ EFN. .IF NDF $$$GLB .BYTE 35.,1 .ENDC .ENDM DECL$HY! .MACRO DLON$ MOD,TBNUM,LNS,LNSSZF .MCALL OFF$,LNMOD$R .IF NDF $$$GLBN LNMOD$M .BYTE 207.,5 .BYTE 12. .BYTE MOD .BYTE TBNUM .BYTE 0 .WORD LNS .WORD LNSSZ .ENDC .IF NDF D.LFUN=A .IRP X,<,,,,,>C OFF$ XD .ENDM .ENDC .ENDM DLON$Y) .MACRO DLON$C MOD,TBNUM,LNS,LNSSZ,CS,ERR. .MCALL DLON$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.  .IFTF DLON$ MOD,TBNUM,LNS,LNSSZ .IFTC .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM DLON$C,Y& .MACRO DLON$S MOD,TBNUM,LNS,LNSSZ,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$E LNMOD$Y MOV$ LNSSZE MOV$ LNSY MOV$ TBNUML MVB$ #12.,MOD MOV (PC)+,-(SP) .BYTE 207.,5 DIR$ ,ERR .ENDM DLON$SDFY! .MACRO DLOG$ MOD,TBNUM,LNS,LNSSZ. .MCALL OFF$,LNMOD$ .IF NDF $$$GLB. LNMOD$N .BYTE 207.,5S .BYTE 2 .BYTE MOD .BYTE TBNUM .BYTE 0 .WORD LNS .WORD LNSSZ .ENDC .IF NDF D.LFUNDA .IRP X,<,,,,,>M OFF$ X .ENDM .ENDC .ENDM DLOG$Y) .MACRO DLOG$C MOD,TBNUM,LNS,LNSSZ,CS,ERRL .MCALL DLOG$,DIR$ .IF NDF $$$GLBV .PSECT $DPB$.,D$$$=. .IFTF DLOG$ MOD,TBNUM,LNS,LNSSZ .IFTR .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM DLOG$COY& .MACRO DLOG$S MOD,TBNUM,LNS,LNSSZ,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$Y LNMOD$Y MOV$ LNSSZE MOV$ LNSY MOV$ TBNUML MVB$ #2,MOD MOV (PC)+,-(SP) .BYTE 207.,5R DIR$ ,ERR .ENDM DLOG$S,Y .MACRO DSAR$C PSCT,ERR .MCALL DSAR$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.C .IFTF DSAR$ .IFT, .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM DSAR$CDpY .MACRO DSAR$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 99.,1 DIR$ ,ERR .ENDM DSAR$SXY .MACRO DSAR$M .IF NDF $$$GLBZ .BYTE 99.,1 .ENDC .ENDM DSAR$Y .MACRO DSCP$C PSCT,ERR  .MCALL DSCP$,DIR$ .IF NDF $$$GLB) .PSECT $DPB$.,D$$$=.E .IFTF DSCP$ .IFT .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM DSCP$C,pY .MACRO DSCP$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 95.,1 DIR$ ,ERR .ENDM DSCP$SXY .MACRO DSCP$ .IF NDF $$$GLBR .BYTE 95.,1 .ENDC .ENDM DSCP$Y .MACRO DTRG$ RDB .MCALL OFF$ .IF NDF $$$GLBR .BYTE 59.,2 .WORD RDB .ENDC .IF NDF D.TRBAD OFF$ OFF$ D.TRBA,2 .ENDC .ENDM DTRG$Y .MACRO DTRG$C RDB,CS,ERRS .MCALL DTRG$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.R .IFTF DTRG$ RDB .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM DTRG$CLY .MACRO DTRG$S RDB,ERR .MCALL DIR$,MOV$C MOV$ RDB MOV (PC)+,-(SP) .BYTE 59.,2 DIR$ ,ERR .ENDM DTRG$SY .MACRO ELAW$ WDB .MCALL OFF$ .IF NDF $$$GLBF .BYTE 119.,2$ .WORD WDB .ENDC .IF NDF E.LABAC OFF$N OFF$ E.LABA,2 .ENDC .ENDM ELAW$Y .MACRO ELAW$C WDB,CS,ERR  .MCALL ELAW$,DIR$ .IF NDF $$$GLB$ .PSECT $DPB$.,D$$$=.C .IFTF ELAW$ WDB .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ELAW$CNY .MACRO ELAW$S WDB,ERR .MCALL DIR$,MOV$ MOV$ WDB$ MOV (PC)+,-(SP) .BYTE 119.,2S DIR$ ,ERR .ENDM ELAW$SRY .MACRO ELGF$C GROUP,CS,ERRW .MCALL ELGF$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.W .IFTF ELGF$ GROUP .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ELGF$CY .MACRO ELGF$S GROUP,ERR .MCALL MOV$,DIR$F MOV$ GROUP MOV (PC)+,-(SP) .BYTE 159.,2 DIR$ ,ERR .ENDM ELGF$S Y .MACRO ELGF$ GROUP$ .MCALL OFF$ .IF NDF $$$GLBL .BYTE 159.,2.00"l! "!TADATADATADATADATADATA .WORD GROUP .ENDC .IF NDF E.LGRP+ .NLIST. OFF$9 OFF$ E.LGRP,2 .LIST .ENDC .ENDM ELGF$Y .MACRO ELVT$ UNUM .MCALL OFF$ .IF NDF $$$GLBL .BYTE 151.,2B .WORD UNUM .ENDC .IF NDF E.LVNMF OFF$S OFF$ E.LVNM,2 .ENDC .ENDM ELVT$Y .MACRO ELVT$C UNUM,CS,ERR .MCALL ELVT$,DIR$ .IF NDF $$$GLBU .PSECT $DPB$.,D$$$=.Y .IFTF ELVT$ UNUMR .IFTM .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ELVT$C.Y .MACRO ELVT$S UNUM,ERR. .MCALL DIR$,MOV$N MOV$ UNUM MOV (PC)+,-(SP) .BYTE 151.,2 DIR$ ,ERR .ENDM ELVT$S.Y .MACRO EMST$ TNAME,STATUS .MCALL OFF$,R50$. .IF NDF $$$GLB. .BYTE 147.,4. R50$ TNAME. .WORD STATUSE .ENDC .IF NDF E.MSTNV OFF$. OFF$ E.MSTN,4 OFF$ E.MSST,2 .ENDC .ENDM EMST$Y" .MACRO EMST$C TNAME,STATUS,CS,ERR .MCALL EMST$,DIR$ .IF NDF $$$GLBU .PSECT $DPB$.,D$$$=. .IFTF EMST$ TNAME,STATUSM .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EMST$CLY .MACRO EMST$S TNAME,STATUS,ERR1 .MCALL DIR$,MOV$,RFA$ MOV$ STATUS RFA$ TNAME MOV (PC)+,-(SP) .BYTE 147.,4C DIR$ ,ERR .ENDM EMST$S$Y .MACRO ENAR$C PSCT,ERRS .MCALL ENAR$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.  .IFTF ENAR$ .IFTM .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ENAR$C,rY .MACRO ENAR$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 101.,1$ DIR$ ,ERR .ENDM ENAR$SSZY .MACRO ENAR$. .IF NDF $$$GLB .BYTE 101.,1. .ENDC .ENDM ENAR$Y .MACRO ENCP$C PSCT,ERRT .MCALL ENCP$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=. .IFTF ENCP$ .IFT .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM ENCP$C$pY .MACRO ENCP$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 97.,1 DIR$ ,ERR .ENDM ENCP$SNXY .MACRO ENCP$A .IF NDF $$$GLB. .BYTE 97.,1 .ENDC .ENDM ENCP$Y .MACRO EXIF$C EFN,CS,ERR .MCALL EXIF$,DIR$ .IF NDF $$$GLB$ .PSECT $DPB$.,D$$$=.N .IFTF EXIF$ EFN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXIF$C$Y .MACRO EXIF$S EFN,ERR .MCALL MOV$,DIR$ MOV$ EFNS MOV (PC)+,-(SP) .BYTE 53.,2 DIR$ ,ERR .ENDM EXIF$SY .MACRO EXIF$ EFNI .MCALL OFF$ .IF NDF $$$GLB. .BYTE 53.,2 .WORD EFN .ENDC .IF NDF E.XFEF. .NLISTP OFF$F OFF$ E.XFEF,2 .LIST .ENDC .ENDM EXIF$Y .MACRO EXIT$C PSCT,ERR, .MCALL EXIT$,DIR$ .IF NDF $$$GLB$ .PSECT $DPB$.,D$$$=.$ .IFTF EXIT$ .IFTN .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM EXIT$CEY .MACRO EXIT$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 51.,1 DIR$+ .IIF NB , CALL ERR .ENDM EXIT$SEXY .MACRO EXIT$  .IF NDF $$$GLBL .BYTE 51.,1 .ENDC .ENDM EXIT$Y .MACRO EXST$C STS,CS,ERRL .MCALL EXST$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF EXST$ STS .IFTC .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXST$C.Y .MACRO EXST$S STS,ERR .MCALL MOV$,DIR$,OFF$ MOV$ STS MOV (PC)+,-(SP) .BYTE 29.,2 DIR$ ,ERR .NLISTT$$$OST=05 .IRP X,<,,,>I OFF$ X> .ENDM .LIST .ENDM EXST$SY .MACRO EXST$ STSF .MCALL OFF$ .IF NDF $$$GLB .BYTE 29.,2 .WORD STS .ENDC .IF NDF E.XSTSC .NLIST. OFF$X OFF$ E.XSTS,2$$$OST=05 .IRP X,<,,,> OFF$ XS .ENDM .LIST .ENDC .ENDM EXST$Y .MACRO EXTK$C INC,CS,ERR .MCALL EXTK$,DIR$ .IF NDF $$$GLBM .PSECT $DPB$.,D$$$=.. .IFTF EXTK$ INC .IFT$ .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXTK$CEY .MACRO EXTK$S INC,ERR .MCALL MOV$,DIR$ CLR -(SP) MOV$ INC  MOV (PC)+,-(SP) .BYTE 89.,3 DIR$ ,ERR .ENDM EXTK$SSY .MACRO EXTK$ INC. .MCALL OFF$ .IF NDF $$$GLBT .BYTE 89.,3 .WORD INC .WORD 0 .ENDC .IF NDF E.XTINO .NLIST. OFF$. OFF$ E.XTIN,200"t,:;r .LIST .ENDC .ENDM EXTK$Y .MACRO FEAT$ FEAT .MCALL OFF$,FEADF$$ .IF NDF $$$GLBB .BYTE 177.,2. .WORD FEATI .ENDC .IF NDF F.EAF OFF$$ OFF$ F.EAF,2 .IF DF $$$GLB FEADF$ ,<=> .IFFA FEADF$S .ENDC .ENDC .ENDM FEAT$Y .MACRO FEAT$C FEAT,CS,ERR .MCALL FEAT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.  .IFTF FEAT$ FEATF .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY .MACRO FEAT$S FEAT,ERRO .MCALL MOV$,DIR$2 MOV$ FEAT MOV (PC)+,-(SP) .BYTE 177.,2. DIR$ ,ERR .ENDMY+ .MACRO FSS$ FSBUF,FSSZ,PRSBLK,PRSSZ,RESERVO .MCALL OFF$ .IF NDF $$$GLBF .IIF NB RESERV, .ERROR .BYTE 207.,7 .BYTE 5 .BYTE 0 .WORD 0 .WORD FSBUF .WORD FSSZA .WORD PRSBLK .WORD PRSSZ .ENDC .IF NDF F.RSV1LA .IRP X,<,,,,,>F OFF$ XF .ENDM .IRP X,<,>N OFF$ XM .ENDM .ENDC .ENDM FSS$EY3 .MACRO FSS$C FSBUF,FSSZ,PRSBLK,PRSSZ,RESERV,CS,ERRE .MCALL FSS$,DIR$R .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.B .IFTF$ FSS$ FSBUF,FSSZ,PRSBLK,PRSSZ,RESERV .IFT$ .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM FSS$CY0 .MACRO FSS$S FSBUF,FSSZ,PRSBLK,PRSSZ,RESERV,ERR .IIF NB RESERV, .ERRORC .MCALL DIR$,MOV$,MVB$ MOV$ PRSSZ, MOV$ PRSBLK MOV$ FSSZ MOV$ FSBUFL MOV$ #0 MVB$ #5,. MOV (PC)+,-(SP) .BYTE 207.,7, DIR$ ,ERR .ENDM FSS$SY* .MACRO GCCI$ CBUF,CBFL,IBUF,IBFL,ADDR,NCP .MCALL OFF$ .IF NDF $$$GLB. .BYTE 127.,7. .BYTE NCP .BYTE 0 .WORD ADDRD .WORD CBUFF .WORD CBFLU .WORD IBUF, .WORD IBFL .ENDC .IF NDF G.CCNC A .IRP X,<,,,,,>U OFF$ XS .ENDM OFF$ G.CCIL,2$$$OST=0K .IRP X,<,,,,,> OFF$ XU .ENDM$$$OST=0@ .IRP X,<,,,,> OFF$ X .ENDM .IRP X,<,> OFF$ XN .ENDM .IF DF $$$GLB# .GLOBL GC.CND,GC.CST,GC.CEX,GC.CCSP .ENDC GC.CND=200 GC.CST=002 GC.CEX=001 GC.CCS=000 .ENDC .ENDM GCCI$Y2 .MACRO GCCI$C CBUF,CBFL,IBUF,IBFL,ADDR,NCP,CS,ERR .MCALL GCCI$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.$ .IFTF# GCCI$ CBUF,CBFL,IBUF,IBFL,ADDR,NCPA .IFTC .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY/ .MACRO GCCI$S CBUF,CBFL,IBUF,IBFL,ADDR,NCP,ERR> .MCALL MOV$,MVB$,DIR$ MOV$ IBFL MOV$ IBUF MOV$ CBFL MOV$ CBUF MOV$ ADDR MVB$ NCP,#0 MOV (PC)+,-(SP) .BYTE 127.,7. DIR$ ,ERR .ENDMY# .MACRO GCII$ BUF,BUFL,CLI,DEV,UNITG .MCALL OFF$,R50$ .IF NDF $$$GLBC .BYTE 173.,7. .WORD BUF .WORD BUFLC R50$ CLII$$$T2=.N .ASCII /DEV/S .=$$$T2+2D .BYTE UNIT,0F .ENDC .IF NDF G.CIBFBA .IRP X,<,,,,,> OFF$ X .ENDM$$$OST=0@ .IRP X,<,,,,> OFF$ XM .ENDM! .IRP X,<,>R OFF$ XC .ENDM .ENDC .ENDM GCII$Y+ .MACRO GCII$C BUF,BUFL,CLI,DEV,UNIT,CS,ERRU .MCALL GCII$,DIR$ .IF NDF $$$GLB0 .PSECT $DPB$.,D .IFTF$$$=., GCII$ BUF,BUFL,CLI,DEV,UNIT .IFTL .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY( .MACRO GCII$S BUF,BUFL,CLI,DEV,UNIT,ERR .MCALL MOV$,MVB$,DIR$,RFA$V MVB$ UNIT,#0 MOV$ DEV RFA$ CLIO MOV$ BUFL MOV$ BUF4 MOV (PC)+,-(SP) .BYTE 173.,7. DIR$ ,ERR .ENDM GCII$SNFY! .MACRO GDIR$ MOD,ENS,ENSSZ,RSIZEN .MCALL OFF$,LNMOD$I .IF NDF $$$GLB LNMOD$R .BYTE 207.,6. .BYTE 4 .BYTE MOD .WORD 0 .WORD ENS .WORD ENSSZ .WORD RSIZE .ENDC .IF NDF G.DFUNGA .IRP X,<,,,,,>N OFF$ XM .ENDM .ENDC .ENDM GDIR$Y) .MACRO GDIR$C MOD,ENS,ENSSZ,RSIZE,CS,ERR .MCALL GDIR$,DIR$ .IF NDF $$$GLBO .PSECT $DPB$.,D$$$=. .IFTF GDIR$ MOD,ENS,ENSSZ,RSIZE .IFTR .PSECT CS DIR$ #$$$,ERR .ENDC00"|! "!TADATADATADATADATADATA .ENDM GDIR$COY& .MACRO GDIR$S MOD,ENS,ENSSZ,RSIZE,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$Y LNMOD$Y MOV$ RSIZED MOV$ ENSSZS MOV$ ENSS MOV$ #0 MVB$ #4,MOD MOV (PC)+,-(SP) .BYTE 207.,6D DIR$ ,ERR .ENDM GDIR$S>Y$ .MACRO GDVI$C LUN,BUFA,BUFL,CS,ERR .MCALL GDVI$,DIR$ .IF NDF $$$GLBD .PSECT $DPB$.,D$$$=.C .IFTF GDVI$ LUN,BUFA,BUFL .IFT$ .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GDVI$CD6Y .MACRO GDVI$S LUN,BUFA,BUFL,ERR .MCALL MOV$,DIR$,OFF$ MOV$ BUFL MOV$ BUFA MOV$ LUNM MOV (PC)+,-(SP) .BYTE 5,4 DIR$ ,ERR .IF NDF G.DVNAM .NLISTV$$$OST=0A .IRP X,<,,,,> OFF$ X7 .ENDM .LIST .ENDC .ENDM GDVI$SY .MACRO GDVI$ LUN,BUFA,BUFLR .MCALL OFF$ .IF NDF $$$GLB$ .BYTE 5,4 .WORD LUN .WORD BUFAF .WORD BUFLN .ENDC .IF NDF G.DVLUC .NLISTR+ .IRP X,<,,,> OFF$ X. .ENDM .IF NDF G.DVNAL$$$OST=0B .IRP X,<,,,,> OFF$ XY .ENDM .ENDC .LIST .ENDC .ENDM GDVI$pY- .MACRO GIN$C SFCN,P1,P2,P3,P4,P5,P6,P7,P8,P9, .MCALL GIN$,DIR$,GFN$,OFF$M .IF NDF $$$GLB .SAVE .PSECT $DPB$.,D$$$=. .IFTF GFN$U .NARG $$$N $$$I=$$$N$ .BYTE 169.,$$$N+1. .IRP $$$PRM, .IF EQ $$$I .MEXITD .IFF. $$$I=$$$I-1  .ENDC .WORD $$$PRM2 .ENDR .IF NDF G.INSF .NLIST.6 .IRP X,<,,,,> OFF$ X1 .ENDR* .IRP X,<,,> OFF$ X .ENDR* .IRP X,<,,> OFF$ X, .ENDR .ENDC .IFT, .RESTOREI DIR$ #$$$ .ENDC .ENDM GIN$C<Y- .MACRO GIN$S SFCN,P1,P2,P3,P4,P5,P6,P7,P8,P9 .MCALL MOV$,DIR$,OFF$,MVB$,GFN$ GFN$$ .NARG $$$N, $$$I=$$$N,$$$K=9.P. .IRP $$$PRM, .IF GT $$$I-$$$K$ MOV$ $$$PRM .ENDC $$$K=$$$K-1L .ENDR MOV (PC)+,-(SP) .BYTE 169.,$$$N+1 DIR$P .ENDM GIN$SY, .MACRO GIN$ SFCN,P1,P2,P3,P4,P5,P6,P7,P8,P9 .MCALL OFF$,GFN$< .IF NDF $$$GLB, GFN$P .NARG $$$N $$$I=$$$N .BYTE 169.,$$$N+1. .IRP $$$PRM, .IF EQ $$$I .MEXIT$ .IFFP $$$I=$$$I-1, .ENDC .WORD $$$PRMO .ENDR .ENDC .IF NDF G.INSF. .NLIST,6 .IRP X,<,,,,> OFF$ XS .ENDM* .IRP X,<,,> OFF$ X .ENDR* .IRP X,<,,> OFF$ XG .ENDR .ENDC .ENDM GIN$RY .MACRO GLUN$C LUN,BUFA,CS,ERR$ .MCALL GLUN$,DIR$ .IF NDF $$$GLBA .PSECT $DPB$.,D$$$=.Y .IFTF GLUN$ LUN,BUFAP .IFTN .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GLUN$C$LY .MACRO GLUN$S LUN,BUFA,ERR .MCALL MOV$,DIR$,OFF$ MOV$ BUFA MOV$ LUNR MOV (PC)+,-(SP) .BYTE 5,3 DIR$ ,ERR .IF NDF G.LUNAS .NLIST$$$OST=06 .IRP X,<,,,> OFF$ XP .ENDM$$$OST=1 .IRP X,<> OFF$ X. .ENDM .LIST .ENDC .ENDM GLUN$S.Y .MACRO GLUN$ LUN,BUFA .MCALL OFF$ .IF NDF $$$GLBS .BYTE 5,3 .WORD LUN .WORD BUFAL .ENDC .IF NDF G.LULU  .NLIST + .IRP X,<,,,> OFF$ XA .ENDM .IF NDF G.LUNA$$$OST=06 .IRP X,<,,,> OFF$ X3 .ENDM$$$OST=1 .IRP X,<> OFF$ X0 .ENDM .ENDC .LIST .ENDC .ENDM GLUN$Y .MACRO GMCR$C CS,ERR. .MCALL GMCR$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.U .IFTF GMCR$ .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GMCR$CLY .MACRO GMCR$D .MCALL OFF$ .IF NDF $$$GLB  .BYTE 127.,41. .BLKW 40. .ENDC .IF NDF G.MCRB .NLISTA OFF$M OFF$ G.MCRB,80. .LIST .ENDC .ENDM GMCR$Y .MACRO GMCX$ WVEC .MCALL OFF$ .IF NDF $$$GLBR .BYTE 113.,2> .WORD WVEC. .ENDC .IF NDF G.MCVAN OFF$N OFF$ G.MCVA,2 .ENDC .ENDM00",:;r GMCX$Y .MACRO GMCX$C WVEC,CS,ERR .MCALL GMCX$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.  .IFTF GMCX$ WVEC. .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GMCX$CCY .MACRO GMCX$S WVEC,ERR  .MCALL DIR$,MOV$C MOV$ WVEC MOV (PC)+,-(SP) .BYTE 113.,2. DIR$ ,ERR .ENDM GMCX$S.Y .MACRO GPRT$C PRT,BUF,CS,ERR .MCALL GPRT$,DIR$ .IF NDF $$$GLBE .PSECT $DPB$.,D$$$=.. .IFTF GPRT$ PRT,BUF .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GPRT$CY .MACRO GPRT$S PRT,BUF,ERR .MCALL MOV$,RFA$,DIR$,OFF$C MOV$ BUF RFA$ PRTF MOV (PC)+,-(SP) .BYTE 65.,4 DIR$ ,ERR .IF NDF G.PRPB .NLISTC$$$OST=0* .IRP X,<,,> OFF$ XM .ENDM .LIST .ENDC .ENDM GPRT$SYBY .MACRO GPRT$ PRT,BUF .MCALL OFF$,R50$A .IF NDF $$$GLBF .BYTE 65.,4 R50$ PRTI .WORD BUF .ENDC .IF NDF G.PRPND .NLIST OFF$ OFF$ G.PRPN,4 OFF$ G.PRBA,2 .IF NDF G.PRPBR$$$OST=0* .IRP X,<,,> OFF$ XB .ENDM .ENDC .LIST .ENDC .ENDM GPRT$HY .MACRO GREG$ RID,BUF6 .MCALL OFF$ .IF NDF $$$GLBP .BYTE 65.,4 .WORD 0,RID .WORD BUF .ENDC .IF NDF G.RGID> .NLISTM OFF$M OFF$ ,2 OFF$ G.RGID,2 OFF$ G.RGBA,2 .IF NDF G.RGRB $$$OST=0* .IRP X,<,,> OFF$ X. .ENDM .ENDC .LIST .ENDC .ENDM GREG$Y .MACRO GREG$C RID,BUF,CS,ERR. .MCALL GREG$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=., .IFTF GREG$ RID,BUF .IFTM .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GREG$CY .MACRO GREG$S RID,BUF,ERR .MCALL MOV$,DIR$,OFF$ MOV$ BUFD MOV$ RIDO CLR -(SP) MOV (PC)+,-(SP) .BYTE 65.,4 DIR$ ,ERR .IF NDF G.RGRBD .NLIST $$$OST=0* .IRP X,<,,> OFF$ XR .ENDM .LIST .ENDC .ENDM GREG$SNY .MACRO GSSW$C PSCT,ERR .MCALL GSSW$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=.F .IFTF GSSW$ .IFTD .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM GSSW$CCrY .MACRO GSSW$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 125.,1F DIR$ ,ERR .ENDM GSSW$S$ZY .MACRO GSSW$S .IF NDF $$$GLBS .BYTE 125.,14 .ENDC .ENDM GSSW$Y .MACRO GTIM$C BUFA,CS ERR .MCALL GTIM$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.. .IFTF GTIM$ BUFA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GTIM$CFVY .MACRO GTIM$S BUFA,ERRF .MCALL MOV$,DIR$,OFF$ MOV$ BUFA MOV (PC)+,-(SP) .BYTE 61.,2 DIR$ ,ERR .IF NDF G.TIYRR .NLISTE$$$OST=05 .IRP X,<,,,>. OFF$ X$ .ENDM5 .IRP X,<,,,>1 OFF$ X. .ENDM .LIST .ENDC .ENDM GTIM$S.tY .MACRO GTIM$ BUFA .MCALL OFF$ .IF NDF $$$GLBC .BYTE 61.,2 .WORD BUFA .ENDC .IF NDF G.TIBAS .NLISTD OFF$$ OFF$ G.TIBA,2 .IF NDF G.TIYR$$$OST=05 .IRP X,<,,,>M OFF$ X .ENDM5 .IRP X,<,,,>. OFF$ X$ .ENDM .ENDC .LIST .ENDC .ENDM GTIM$Y .MACRO GTSK$C BUFA,CS,ERR .MCALL GTSK$,DIR$ .IF NDF $$$GLBC .PSECT $DPB$.,D$$$=. .IFT GTSK$ BUFAM .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM GTSK$C$Y .MACRO GTSK$S BUFA,ERRF .MCALL MOV$,DIR$,OFF$ MOV$ BUFA MOV (PC)+,-(SP) .BYTE 63.,2 DIR$ ,ERR .IF NDF G.TSTN  .NLISTR$$$OST=0@ .IRP X,<,,,,> OFF$ X, .ENDM@ .IRP X,<,,,,> OFF$ X .ENDM OFF$ G.TSVL,2 OFF$ G.TSTS,2 OFF$ G.TSSY,2 OFF$ G.TSDU,2$$$OST=05 .IRP X,<,,,>. OFF$ X  .ENDM .LIST .ENDC .ENDM GTSK$S$Y .MACRO GTSK$ BUFA .MCALL OFF$ .IF NDF $$$GLB$ .BYTE 63.,2 .WORD BUFAS .ENDC .IF NDF G.TSBAE .NLISTN OFF$T OFF$ G.TSBA,200"! "!TADATADATADATADATADATA .IF NDF G.TSTN<$$$OST=0@ .IRP X,<,,,,> OFF$ X. .ENDM@ .IRP X,<,,,,> OFF$ XL .ENDM OFF$ G.TSVL,2 OFF$ G.TSTS,2 OFF$ G.TSSY,2 OFF$ G.TSDU,2$$$OST=05 .IRP X,<,,,>. OFF$ XN .ENDM .ENDC .LIST .ENDC .ENDM GTSK$^Y .MACRO IHAR$C PSCT,ERR .MCALL DSAR$C DSAR$C PSCT,ERR .ENDM IHAR$CBTY .MACRO IHAR$S ERR .MCALL DSAR$S DSAR$S ERR. .ENDM IHAR$S4HY .MACRO IHAR$> .MCALL DSAR$O DSAR$ .ENDM IHAR$Y .MACRO MAP$ WDB .MCALL OFF$ .IF NDF $$$GLBL .BYTE 121.,2 .WORD WDB .ENDC .IF NDF M.APBAY OFF$F OFF$ M.APBA,2 .ENDC .ENDM MAP$DY .MACRO MAP$C WDB,CS,ERR .MCALL MAP$,DIR$C .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF MAP$ WDBC .IFTR .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM MAP$CY .MACRO MAP$S WDB,ERR .MCALL DIR$,MOV$A MOV$ WDB. MOV (PC)+,-(SP) .BYTE 121.,2. DIR$ ,ERR .ENDM MAP$SY" .MACRO MRKT$C EF,TM,TU,AST,CS,ERR .MCALL MRKT$,DIR$ .IF NDF $$$GLBL .PSECT $DPB$.,D$$$=.W .IFTF MRKT$ EF,TM,TU,AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM MRKT$CY .MACRO MRKT$S EF,TM,TU,AST,ERR. .MCALL RVP$,DIR$S RVP$ EF,TM,TU,AST MOV (PC)+,-(SP) .BYTE 23.,5 DIR$ ,ERR .ENDM MRKT$S.Y .MACRO MRKT$ EFN,TM,TU,ASTA .MCALL OFF$ .IF NDF $$$GLBA .BYTE 23.,5 .WORD EFN .WORD TME .WORD TUD .WORD AST .ENDC .IF NDF M.KTEF .NLISTR6 .IRP X,<,,,,> OFF$ XL .ENDM .LIST .ENDC .ENDM MRKT$Y .MACRO MSDS$ MASK .MCALL OFF$ .IF NDF $$$GLBM .BYTE 201.,2. .WORD MASK. .ENDC .IF NDF M.SDMA, .IRP X,<,>S OFF$ XF .ENDM .ENDC .ENDM MSDS$Y .MACRO MSDS$C MASK,CS,ERR .MCALL MSDS$,DIR$ .IF NDF $$$GLB, .PSECT $DPBD$ D$$$=.N .IFTF MSDS$ MASK. .IFTO .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY .MACRO MSDS$S MASK,ERR, .MCALL MOV$,DIR$G MOV$ MASK MOV (PC)+,-(SP) .BYTE 201.,2. DIR$ ,ERR .ENDMY .MACRO MVTS$ ACTION,ADDR,VAL. .MCALL OFF$ .IF NDF $$$GLB. .BYTE 203.,4. .WORD ACTIONN .WORD ADDRM .WORD VAL .ENDC .IF NDF M.VTAC 6 .IRP X,<,,,,> OFF$ XC .ENDM $$$=05 .IRP X,<,,,>$ OFF$ XF .ENDM5 .IRP X,<,,,>. OFF$ X .ENDM .ENDC .ENDM MVTS$Y% .MACRO MVTS$C ACTION,ADDR,VAL,CS,ERR) .MCALL MVTS$,DIR$ .IF NDF $$$GLB .PSECT $DPBD$ D$$$=.  .IFTF MVTS$ ACTION,ADDR,VAL .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY" .MACRO MVTS$S ACTION,ADDR,VAL,ERR .MCALL MOV$,DIR$, MOV$ VAL2 MOV$ ADDR MOV$ ACTION MOV (PC)+,-(SP) .BYTE 203.,4. DIR$ ,ERR .ENDMYV .MACRO PFCS$ MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFNBK,DFNSZ,RSMSK .MCALL OFF$,LNMOD$ .IF NDF $$$GLB LNMOD$ .BYTE 207.,13.C .BYTE 8.R .BYTE MOD .BYTE LUN .BYTE TBMSK .WORD PRBUF .WORD PRSZ$ .WORD RSBUF .WORD RSSZA .WORD RSLEN .WORD PRSBLKC .WORD PRSSZ .WORD DFNBK .WORD DFNSZ .WORD RSMSK .ENDC .IF NDF F.LMODR6 .IRP X,<,,,,> OFF$ XN .ENDM5 .IRP X,<,,,> OFF$ X .ENDM5 .IRP X,<,,,>P OFF$ XK .ENDM .IRP X,<,>N OFF$ X .ENDM .ENDC .ENDM PFCS$HY^ .MACRO PFCS$C MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFNBK,DFNSZ,RSMSK,CS,ERR .MCALL PFCS$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=. .IFTFO PFCS$ MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFNBK,DFNSZ,RSMSKL .IFTO .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM PFCS$CRY[ .MA00",:;rCRO PFCS$S MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFNBK,DFNSZ,RSMSK,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$N LNMOD$ MOV$ RSMSKN MOV$ DFNSZC MOV$ DFNBK MOV$ PRSSZR MOV$ PRSBLK MOV$ RSLENF MOV$ RSSZ MOV$ RSBUFS MOV$ PRSZ MOV$ PRBUFS MVB$ LUN,TBMSK MVB$ #8.,MODF MOV (PC)+,-(SP) .BYTE 207.,13.= DIR$ ,ERR .ENDM PFCS$SKYU .MACRO PRMS$ MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFBUF,DFSZ,RSMSKN .MCALL OFF$,LNMOD$ .IF NDF $$$GLB. LNMOD$S .BYTE 207.,13.P .BYTE 7 .BYTE MOD .BYTE LUN .BYTE TBMSK .WORD PRBUF .WORD PRSZ$ .WORD RSBUF .WORD RSSZ .WORD RSLEN .WORD PRSBLK .WORD PRSSZ .WORD DFBUF .WORD DFSZ .WORD RSMSK .ENDC .IF NDF R.LFUN6 .IRP X,<,,,,> OFF$ X( .ENDM5 .IRP X,<,,,> OFF$ X .ENDM5 .IRP X,<,,,>K OFF$ XB .ENDM .IRP X,<,>F OFF$ XL .ENDM .ENDC .ENDM PRMS$FY] .MACRO PRMS$C MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFBUF,DFSZ,RSMSK,CS,ERRR .MCALL PRMS$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=. .IFTFN PRMS$ MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFBUF,DFSZ,RSMSK .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM PRMS$C.~YZ .MACRO PRMS$S MOD,TBMSK,LUN,PRBUF,PRSZ,RSBUF,RSSZ,RSLEN,PRSBLK,PRSSZ,DFBUF,DFSZ,RSMSK,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$, LNMOD$F MOV$ RSMSK MOV$ DFSZ MOV$ DFBUF MOV$ PRSSZ MOV$ PRSBLK MOV$ RSLENN MOV$ RSSZ MOV$ RSBUFL MOV$ PRSZ MOV$ PRBUFZ MVB$ LUN,TBMSK. MVB$ #7,MOD MOV (PC)+,-(SP) .BYTE 207.,13.. DIR$ ,ERR .ENDM PRMS$SMY6 .MACRO QIO$C FNC,LUN,EFN,PRI,IOST,AST,PRMLST,PSCT,ERR .MCALL QDPB$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=. .IFTF* QDPB$ 1,FNC,LUN,EFN,PRI,IOST,AST, .IFTS .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM QIO$CY1 .MACRO QIO$S FNC,LUN,EFN,PRI,IOST,AST,PRMLST,ERRU .MCALL QDPB$S/ QDPB$S 1,FNC,LUN,EFN,PRI,IOST,AST,,ERRS .ENDM QIO$SY, .MACRO QIO$ FNC,LUN,EFN,PRI,IOST,AST,PRMLST .MCALL QDPB$,* QDPB$ 1,FNC,LUN,EFN,PRI,IOST,AST, .ENDM QIO$RY7 .MACRO QIOW$C FNC,LUN,EFN,PRI,IOST,AST,PRMLST,PSCT,ERRN .MCALL QDPB$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.E .IFTF* QDPB$ 3,FNC,LUN,EFN,PRI,IOST,AST, .IFTE .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM QIOW$CIY2 .MACRO QIOW$S FNC,LUN,EFN,PRI,IOST,AST,PRMLST,ERR .MCALL QDPB$S/ QDPB$S 3,FNC,LUN,EFN,PRI,IOST,AST,,ERR .ENDM QIOW$S$Y- .MACRO QIOW$ FNC,LUN,EFN,PRI,IOST,AST,PRMLSTN .MCALL QDPB$S* QDPB$ 3,FNC,LUN,EFN,PRI,IOST,AST, .ENDM QIOW$vY6 .MACRO QDPB$S DIC,FNC,LUN,EFN,PRI,IOST,AST,PRMLST,ERR .MCALL RVP$,MVB$,DIR$ .NLIST$$$ARG=0 .IRP X,$$$ARG=$$$ARG+1M .ENDM .LIST .IF GT 6-$$$ARG .REPT <6-$$$ARG>. CLR -(SP) .ENDR .ENDC .IIF NB , RVP$ PRMLST RVP$ IOST,AST MVB$ EFN, RVP$ FNC,LUNP MOV (PC)+,-(SP) .BYTE DIC,12. DIR$ ,ERR .ENDM QDPB$S"Y1 .MACRO QDPB$ DIC,FNC,LUN,EFN,PRI,IOST,AST,PRMLSTC .MCALL OFF$ .IF NDF $$$GLBN .BYTE DIC,12. .WORD FNC .WORD LUN .BYTE EFN,0 .WORD IOSTB .WORD AST .NLISTI$$$ARG=0 .LIST .IRP X, .WORD X .NLIST$$$ARG=$$$ARG+1, .LIST .ENDM .IF GT 6-$$$ARG .REPT <6-$$$ARG>- .WORD 0 .ENDR .ENDC .ENDC .IF NDF Q.IOFNN .NLIST 6 .IRP X,<,,,,> OFF$ XU .ENDM( .IRP X,<,,> OFF$ XP .ENDM .LIST .ENDC .ENDM QDPB$Y .MACRO RCST$ TNAME,BUFL .MCALL OFF$,R50$$ .IF NDF $$$GLB1 .BYTE 139.,4 R50$ TNAME. .WORD BUF .ENDC .IF NDF R.CSTN OFF$I OFF$ R.CSTN,4 OFF$ R.CSBF,2 .ENDC .ENDM RCST$Y .MACRO RCST$C TNAME,BUF,CS,ERRA .MCALL RCST$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=.N .IF00"! "!TADATADATADATADATADATATF RCST$ TNAME,BUF .IFTQ .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RCST$CUY .MACRO RCST$S TNAME,BUF,ERR .MCALL DIR$,MOV$,RFA$ MOV$ BUFC RFA$ TNAME$ MOV (PC)+,-(SP) .BYTE 139.,4 DIR$ ,ERR .ENDM RCST$S0Y .MACRO RDAF$C BA,CS,ERR .MCALL RDAF$,DIR$ .IF NDF $$$GLBR .PSECT $DPB$.,D$$$=.S .IFTF RDAF$ BA2 .IFTC .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RDAF$CAY .MACRO RDAF$S BA,ERRN .MCALL MOV$,DIR$  MOV$ BA MOV (PC)+,-(SP) .BYTE 39.,2 DIR$ ,ERR .ENDM RDAF$S Y .MACRO RDAF$ BA .MCALL OFF$ .IF NDF $$$GLBT .BYTE 39.,2 .WORD BA$ .ENDC .IF NDF R.DABAR .NLIST$ OFF$( OFF$ R.DABA,2.E .LIST .ENDC .ENDM RDAF$Y" .MACRO RDBBK$ SIZ,NAM,PAR,STS,PRO .MCALL RDBDF$,R50$F RDBDF$L .WORD 0 .WORD SIZ R50$ NAMF R50$ PARB .WORD STS .WORD PRO .ENDM RDBBK$"Y .MACRO RDBDF$ GBL .MCALL .BLKW.,.BLK. .BLK. .BLKW. 1,R.GID,GBLV .BLKW. 1,R.GSIZ,GBL .BLKW. 2,R.GNAM,GBL .BLKW. 2,R.GPAR,GBL .BLKW. 1,R.GSTS,GBL .BLKW. 1,R.GPRO,GBL .BLKW. 0,R.GLGH,GBL .IF IDN ,1 .GLOBL RS.CRR,RS.UNM,RS.MDL,RS.NDL,RS.ATT,RS.NEXF# .GLOBL RS.DEL,RS.EXT,RS.WRT,RS.REDR .ENDCRS.CRR=^O<100000>ARS.UNM=^O<40000>RS.MDL=^O<200>RS.NDL=^O<100> RS.ATT=^O<40>. RS.NEX=^O<20>S RS.DEL=^O<10> RS.EXT=^O<4> RS.WRT=^O<2> RS.RED=^O<1> .MACRO RDBDF$ X .ENDM .ENDM RDBDF$$Y .MACRO RDEF$C EFN,CS,ERR, .MCALL RDEF$,DIR$ .IF NDF $$$GLBL .PSECT $DPB$.,D$$$=.  .IFTF RDEF$ EFN .IFTS .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RDEF$CY .MACRO RDEF$S EFN,ERR .MCALL MOV$,DIR$S MOV$ EFNF MOV (PC)+,-(SP) .BYTE 37.,2 DIR$ ,ERR .ENDM RDEF$S0Y .MACRO RDEF$ EFN0 .MCALL OFF$ .IF NDF $$$GLB0 .BYTE 37.,2 .WORD EFN .ENDC .IF NDF R.DEEFS .NLIST> OFF$D OFF$ R.DEEF,2.D .LIST .ENDC .ENDM RDEF$Y .MACRO RDXF$C BA,CS,ERR .MCALL RDXF$,DIR$ .IF NDF $$$GLBL .PSECT $DPB$.,D$$$=.= .IFTF RDXF$ BAE .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RDXF$C$Y .MACRO RDXF$S BA,ERRE .MCALL MOV$,DIR$R CLR -(SP) MOV$ BA MOV (PC)+,-(SP) .BYTE 39.,3.E DIR$ ,ERR .ENDM RDXF$SY .MACRO RDXF$ BA .MCALL OFF$ .IF NDF $$$GLBE .BYTE 39.,3.E .WORD BA .WORD 0 .ENDC .IF NDF R.DABA .NLISTE OFF$ OFF$ R.DABA,2.. .LIST .ENDC .ENDM RDXF$Y .MACRO RCVD$C TN,BA,CS,ERR. .MCALL RCVD$,DIR$ .IF NDF $$$GLB= .PSECT $DPB$.,D$$$=.. .IFTF RCVD$ TN,BA .IFTE .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RCVD$CRY .MACRO RCVD$S TN,BA,ERR .MCALL MOV$,DIR$, RFA$+ MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 75.,4 DIR$ ,ERR .ENDM RCVD$SDY .MACRO RCVD$ TN,BA .MCALL OFF$, R50$ .IF NDF $$$GLB .BYTE 75.,4 R50$ TN .WORD BA .ENDC .IF NDF R.VDTN .NLIST. .IRP X,<,,> OFF$ XR .ENDM .LIST .ENDC .ENDM RCVD$Y .MACRO RCVX$C TN,BA,CS,ERR. .MCALL RCVX$,DIR$ .IF NDF $$$GLBC .PSECT $DPB$.,D$$$=.N .IFTF RCVX$ TN,BA .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RCVX$C,Y .MACRO RCVX$S TN,BA,ERR .MCALL MOV$,DIR$, RFA$R MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 77.,4 DIR$ ,ERR .ENDM RCVX$S.Y .MACRO RCVX$ TN,BA .MCALL OFF$, R50$ .IF NDF $$$GLB .BYTE 77.,4 R50$ TN .WORD BAD .ENDC .IF NDF R.VXTN .NLIST. .IRP X,<,,> OFF$ XR .ENDM .LIST .ENDC .ENDM RCVX$Y? .MACRO RLON$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMODS .MCALL OFF$,LNMOD$R .IF NDF $$$GLBR LNMOD$ .BYTE 207.,10.. .BYTE 14. .BYTE MOD .WORD TBMSK .WORD LNS .WORD LNSSZ .WORD ENS .WORD ENSSZ .WORD RSIZE .WORD RTBMODM .WORD STATUS .ENDC .IF NDF R.LFUN A .IRP X,<,,,,,>N OFF$ XB .ENDM@ .IRP X,<,,,,> OFF$ X .ENDM .ENDC .ENDM RLON$YG .MACRO RLON$C MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,CS,ERR .MCALL RLON$,DIR$ .IF NDF $$$GLBR .PSECT $DPB$.,D$$$=.0 .IFTF8 RLON$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RLON$C.@YD .MACRO RLON$S MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$. LNMOD$R MOV$ STATUS MOV$ RTBMOD MOV$ RSIZEL MOV$ ENSSZS MOV$ ENS MOV$ LNSSZ. MOV$ LNSM MVB$ TBMSK,#0 MVB$ #14.,MOD MOV (PC)+,-(SP) .BYTE 207.,10., DIR$ ,ERR .ENDM RLON$SRY? .MACRO RLOG$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMODM .MCALL OFF$,LNMOD$N .IF NDF $$$GLBZ LNMOD$ .BYTE 207.,10.S .BYTE 10. .BYTE MOD .WORD TBMSK .WORD LNS .WORD LNSSZ .WORD ENS .WORD ENSSZ .WORD RSIZE .WORD RTBMODT .WORD STATUSL .ENDC .IF NDF R.LFUNA .IRP X,<,,,,,>M OFF$ X .ENDM@ .IRP X,<,,,,> OFF$ X2 .ENDM .ENDC .ENDM RLOG$YG .MACRO RLOG$C MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,CS,ERR .MCALL RLOG$,DIR$ .IF NDF $$$GLBZ .PSECT $DPB$.,D$$$=.0 .IFTF8 RLOG$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RLOG$C.@YD .MACRO RLOG$S MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$. LNMOD$R MOV$ STATUS MOV$ RTBMOD MOV$ RSIZEL MOV$ ENSSZS MOV$ ENS MOV$ LNSSZ. MOV$ LNSM MVB$ TBMSK,#0 MVB$ #10.,MOD MOV (PC)+,-(SP) .BYTE 207.,10., DIR$ ,ERR .ENDM RLOG$SRdY .MACRO RMAF$S ERR MOV (PC)+,-(SP) .BYTE 163.,1F DIR$ ,ERR .ENDM RMAF$S,YN .MACRO RPOI$ TNAME,PN,PR,UGC,UMC,PARENT,BUFADR,BUFLEN,SC,DNAM,UNIT,TASK,OCBAD .MCALL R50$,OFF$R .IF NDF $$$GLBK .BYTE 11.,16. R50$ TNAMES .BLKW 3 .BYTE UMC,UGC R50$ PARENT .WORD OCBAD .WORD BUFADRS .WORD BUFLEN .BYTE UNIT .BYTE SCS .IF NB DNAM$$$T2=.S .ASCII /DNAM/ .=$$$T2+2, .IFFB .WORD .ENDC R50$ TASK .ENDC .IF NDF R.POTK B .IRP X,<,,,,,> OFF$ X .ENDM@ .IRP X,<,,,,> OFF$ XN .ENDM OFF$ R.POTN,2 .IF DF $$$GLB .GLOBL RP.OEX,RP.OAL,RP.ONX .ENDC RP.OEX=200 RP.OAL=001 RP.ONX=002 .ENDC .ENDM RPOI$8YV .MACRO RPOI$C TNAME,PN,PR,UGC,UMC,PARENT,BUFADR,BUFLEN,SC,DNAM,UNIT,TASK,OCBAD,CS,ERR .MCALL RPOI$,DIR$ .IF NDF $$$GLB= .PSECT $DPB$.,D$$$=. .IFTFG RPOI$ TNAME,PN,PR,UGC,UMC,PARENT,BUFADR,BUFLEN,SC,DNAM,UNIT,TASK,OCBAD. .IFT, .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RPOI$C<fYS .MACRO RPOI$S TNAME,PN,PR,UGC,UMC,PARENT,BUFADR,BUFLEN,SC,DNAM,UNIT,TASK,OCBAD,ERRB .MCALL MVB$,MOV$,RFA$,DIR$X RFA$ TASK MOV$ DNAM MVB$ UNIT,SCX MOV$ BUFLEN MOV$ BUFADR MOV$ OCBAD RFA$ PARENT MVB$ UMC,UGCR CLR -(SP) CLR -(SP) CLR -(SP) RFA$ TNAMEC MOV (PC)+,-(SP) .BYTE 11.,16. DIR$ ,ERR .ENDM RPOI$SBY# .MACRO RQST$C TN,PN,PR,GC,P,CS,ERR, .MCALL RQST$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=.R .IFTF RQST$ TN,PN,PR,GC,P .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY .MACRO RQST$S TN,PN,PR,GC,P,ERR .MCALL MVB$,RFA$,DIR$ MVB$ P,GC CLR -(SP) RFA$N RFA$ TN MOV (PC)+,-(SP) .BYTE 11.,7 DIR$ ,ERR .ENDM RQST$SA*Y .MACRO RQST$ TN,PN,PR,GC,PC .MCALL R50$,OFF$M .IF NDF $$$GLBS .BYTE 11.,7 R50$ TN .WORD 0,0 .WORD 0 .BYTE P,GC .ENDC .IF NDF R.QSTNN .NLISTCA .IRP X,<,,,,,>= OFF$ XF .ENDM .LIST .ENDC .ENDM RQST$Y .MACRO RREF$ WDB .MCALL OFF$ .IF NDF $$$GLBS .BYTE 81.,2 .WORD WDB .ENDC .IF NDF R.REBA, OFF$R OFF$ R.REBA,2 .ENDC .ENDM RREF$Y00"! "!TADATADATADATADATADATA .MACRO RREF$C WDB,CS,ERRA .MCALL RREF$,DIR$ .IF NDF $$$GLBP .PSECT $DPB$.,D$$$=.O .IFTF RREF$ WDB .IFTY .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RREF$CGY .MACRO RREF$S WDB,ERR .MCALL DIR$,MOV$< MOV$ WDBR MOV (PC)+,-(SP) .BYTE 81.,2 DIR$ ,ERR .ENDM RREF$SY .MACRO RSUM$C TN,CS,ERR .MCALL RSUM$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.. .IFTF RSUM$ TN. .IFTR .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RSUM$C$Y .MACRO RSUM$S TN,ERR, .MCALL RFA$,DIR$, RFA$ TN MOV (PC)+,-(SP) .BYTE 47.,3 DIR$ ,ERR .ENDM RSUM$SY .MACRO RSUM$ TN .MCALL R50$,OFF$$ .IF NDF $$$GLB .BYTE 47.,3 R50$ TN .ENDC .IF NDF R.SUTNM .NLIST OFF$C OFF$ R.SUTN,4 .LIST .ENDC .ENDM RSUM$Y/ .MACRO RUN$C TN,PN,PR,UG,UP,SM,SU,RM,RU,CS,ERR$ .MCALL RUN$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.. .IFTF RUN$ TN,PN,PR,UG,UP,SM,SU,RM,RU .IFTN .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RUN$CY, .MACRO RUN$S TN,PN,PR,UG,UP,SM,SU,RM,RU,ERR .MCALL RVP$,MVB$,RFA$,DIR$ RVP$ SM,SU,RM,RU. MVB$ UP,UGN CLR -(SP) RFA$$ RFA$ TN MOV (PC)+,-(SP) .BYTE 17.,11. DIR$ ,ERR .ENDM RUN$SY& .MACRO RUN$ TN,PN,PR,GC,P,SM,SU,RM,RU .MCALL R50$,OFF$ .IF NDF $$$GLB  .BYTE 17.,11. R50$ TN .WORD 0,0 .WORD 0 .BYTE P,GCN .WORD SM .WORD SUB .WORD RM. .WORD RUR .ENDC .IF NDF R.UNTNR .NLISTFA .IRP X,<,,,,,> OFF$ XR .ENDM5 .IRP X,<,,,>D OFF$ XP .ENDM .LIST .ENDC .ENDM RUN$SY .MACRO SCAA$ AST) .MCALL OFF$ .IF NDF $$$GLB. .BYTE 173.,2. .WORD AST .ENDC .IF NDF S.CAAEC OFF$U OFF$ S.CAAE,2 .ENDC .ENDMY .MACRO SCAA$C AST,CS,ERRD .MCALL SCAA$,DIR$ .IF NDF $$$GLBS .PSECT $DPB$.,D$$$=.. .IFTF SCAA$ AST .IFTN .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SCAA$C4Y .MACRO SCAA$S AST,ERR .MCALL MOV$,DIR$ MOV$ AST2 MOV (PC)+,-(SP) .BYTE 173.,2. DIR$ ,ERR .ENDM SCAA$STY .MACRO SCAL$S SRAD,CRAD .MCALL DIR$,MOV$. MOV$ CRAD MOV$ SRAD MOV (PC)+,-(SP) .BYTE 155.,3 DIR$ ,ERR .ENDM SCAL$SOY .MACRO SCLI$ CLI,DEV,UNIT .MCALL R50$,OFF$C .IF NDF $$$GLB .BYTE 173.,5.$$$T2=.N .ASCII /DEV/S .=$$$T2+2D .BYTE UNIT,0F R50$ CLIT .ENDC .IF NDF S.CIDVR+ .IRP X,<,,,> OFF$ X. .ENDM .ENDC .ENDM SCLI$Y" .MACRO SCLI$C CLI,DEV,UNIT,CS,ERR .MCALL SCLI$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.S .IFTF SCLI$ CLI,DEV,UNIT. .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SCLI$CY .MACRO SCLI$S CLI,DEV,UNIT,ERRR .MCALL MOV$,RFA$,DIR$,MVB$ RFA$ CLI MVB$ UNIT,#0 MOV$ DEV3 MOV (PC)+,-(SP) .BYTE 173.,5. DIR$ ,ERR .ENDMY .MACRO SDAT$C TN,BA,EFN,CS,ERR, .MCALL SDAT$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF SDAT$ TN,BA,EFN .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SDAT$C$Y .MACRO SDAT$S TN,BA,EFN,ERR .MCALL MOV$,RFA$,DIR$ MOV$ EFN MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 71.,5 DIR$ ,ERR .ENDM SDAT$SCY .MACRO SDAT$ TN,BA,EFNI .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 71.,5 R50$ TN .WORD BAE .WORD EFN .ENDC .IF NDF S.DATN .NLIST+ .IRP X,<,,,>T OFF$ X. .ENDM .LIST .ENDC .ENDM SDAT$&Y .MACRO SDIR$ MOD,ENS,ENSSZS .MCALL OFF$,LNMOD$N .IF NDF $$$GLB$ LNMOD$ .BYTE 207.,5. .BYTE 3 .BYTE MOD .WORD 0 .WORD ENS .WORD ENSSZ .ENDC .IF NDF S.DFUNV6 .IRP X,<,,,,> OFF$ X .ENDM .ENDC .ENDM SDIR$Y# .MACRO SDIR$C MOD,ENS,ENSSZ,CS,ERR .MCALL SDIR$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=.L .IFTF SDIR$ MOD,ENS,ENSSZ .IFT, .PSECT CS00",:;r DIR$ #$$$,ERR .ENDC .ENDM SDIR$CNY .MACRO SDIR$S MOD,ENS,ENSSZ,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$F LNMOD$L MOV$ ENSSZ MOV$ ENS, MOV$ #0 MVB$ #3,MOD MOV (PC)+,-(SP) .BYTE 207.,5S DIR$ ,ERR .ENDM SDIR$SV4Y$ .MACRO SDRC$ TNAME,BUF,EFN,EAST,ESB .MCALL OFF$,R50$ .IF NDF $$$GLBI .BYTE 141.,7 R50$ TNAME .WORD BUF .WORD EFN .WORD EAST .WORD ESB .ENDC .IF NDF S.DRTN A .IRP X,<,,,,,> OFF$ X$ .ENDM .ENDC .ENDM SDRC$Y, .MACRO SDRC$C TNAME,BUF,EFN,EAST,ESB,CS,ERR .MCALL SDRC$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=.0 .IFTF SDRC$ TNAME,BUF,EFN,EAST,ESBE .IFTS .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SDRC$CAY) .MACRO SDRC$S TNAME,BUF,EFN,EAST,ESB,ERRF .MCALL DIR$,MOV$,RFA$,MVB$0 MOV$ ESB. MOV$ EAST MOV$ EFN. MOV$ BUF RFA$ TNAME. MOV (PC)+,-(SP) .BYTE 141.,7, DIR$ ,ERR .ENDM SDRC$SEY6 .MACRO SDRP$ TASK,BUFADR,BUFLEN,EFN,FLAG,PARENT,OCBAD .MCALL R50$,OFF$R .IF NDF $$$GLBF .BYTE 141.,9. R50$ TASK .WORD BUFADR. .BYTE EFN,FLAG. .IF NB BUFLEN .WORD BUFLEN .IFFT .WORD 13. .ENDC R50$ PARENT .WORD OCBAD .ENDC .IF NDF S.DRTKMA .IRP X,<,,,,,>R OFF$ XL .ENDM .IRP X,<,>  OFF$ XV .ENDM .IF DF $$$GLB .GLOBL SD.REX,SD.RAL,SD.RNX .ENDC SD.REX=200 SD.RAL=001 SD.RNX=002 .ENDC .ENDM SDRP$Y> .MACRO SDRP$C TASK,BUFADR,BUFLEN,EFN,FLAG,PARENT,OCBAD,CS,ERR .MCALL SDRP$,DIR$ .IF NDF $$$GLBO .PSECT $DPB$.,D$$$=.A .IFTF/ SDRP$ TASK,BUFADR,BUFLEN,EFN,FLAG,PARENT,OCBAD. .IFTR .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SDRP$CY; .MACRO SDRP$S TASK,BUFADR,BUFLEN,EFN,FLAG,PARENT,OCBAD,ERR. .MCALL MVB$,MOV$,RFA$,DIR$D MOV$ OCBADF RFA$ PARENT MOV$ BUFLEN MVB$ EFN,FLAG MOV$ BUFADR RFA$ TASK MOV (PC)+,-(SP) .BYTE 141.,9. DIR$ ,ERR .ENDM SDRP$SY .MACRO SETF$C EFN,CS,ERR, .MCALL SETF$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=.L .IFTF SETF$ EFN .IFTA .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SETF$C,Y .MACRO SETF$S EFN,ERR .MCALL MOV$,DIR$R MOV$ EFN MOV (PC)+,-(SP) .BYTE 33.,2 DIR$ ,ERR .ENDM SETF$SNY .MACRO SETF$ EFND .MCALL OFF$ .IF NDF $$$GLBT .BYTE 33.,2 .WORD EFN .ENDC .IF NDF S.ETEF  .NLISTV OFF$- OFF$ S.ETEF,2 .LIST .ENDC .ENDM SETF$Y .MACRO SFPA$C AST,CS,ERRR .MCALL SFPA$,DIR$ .IF NDF $$$GLBL .PSECT $DPB$.,D$$$=.= .IFTF SFPA$ AST .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SFPA$C$Y .MACRO SFPA$S AST,ERR .MCALL MOV$,DIR$R MOV$ ASTF MOV (PC)+,-(SP) .BYTE 111.,22 DIR$ ,ERR .ENDM SFPA$SNY .MACRO SFPA$ ASTD .MCALL OFF$ .IF NDF $$$GLBT .BYTE 111.,2 .WORD AST .ENDC .IF NDF S.FPAE .NLIST OFF$ OFF$ S.FPAE,2 .LIST .ENDC .ENDM SFPA$<Y .MACRO SMSG$ TGT,BUF,LEN,PRMLST .MCALL OFF$ .NLIST$ .IF NDF S.MTGTD OFF$3 .IRP X,<,,,>  OFF$ X .ENDM .IF DF $$$GLB .GLOBL SM.SER .ENDCSM.SER=1 .ENDC .IF NDF $$$GLBR$$$ARG=0 .IRP X,$$$ARG=$$$ARG+12 .ENDM .IF NB TGTS .IF IDN TGT SM.SER .IF LT,$$$ARG-4 $$$ARG=4L .ENDC .ENDC .ENDC .LIST .BYTE 171.,4+$$$ARG .BYTE TGT .BYTE 0 .WORD BUF .WORD LEN .IRP X,$$$ARG=$$$ARG-1M .WORD X .ENDM .REPT $$$ARG  .WORD .ENDR .ENDC .ENDMY( .MACRO SMSG$C TGT,BUF,LEN,PRMLST,CS,ERR .MCALL SMSG$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.  .IFTF SMSG$ TGT,BUF,LEN,R .IFTN .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY% .MACRO SMSG$S TGT,BUF,LEN,PRMLST,ERRT .MCALL MVB$,MOV$,RVP$,DIR$$$$$ARG=0$$$=0 .IRP X,$$$ARG=$$$ARG+1, .ENDM .IF NB TGT .IF IDN TGT #SM.SER .IF LT,$$$ARG-4 $$$=4-$$$ARG .REPT $$$00"! "!TADATADATADATADATADATA CLR -(SP) .ENDR .ENDC .ENDC .ENDC RVP$ PRMLST MOV$ LEN MOV$ BUF MVB$ TGTR MOV (PC)+,-(SP) .BYTE 171.,4+$$$ARG+$$$ DIR$ ,ERR .ENDM,Y .MACRO SNXC$ DEVICE,UNITS .MCALL OFF$ .IF NDF $$$GLBF .BYTE 127.,3. .IF B DEVICE .WORD 0 .IFF $$$T2=. .ASCII /DEVICE/ .=$$$T2+2 .ENDC .BYTE UNITL .BYTE 0 .ENDC .IF NDF S.NXDV$ .IRP X,<,,> OFF$ X. .ENDM .ENDC .ENDM SNXC$Y! .MACRO SNXC$C DEVICE,UNIT,CS,ERR$ .MCALL SNXC$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.V .IFTF SNXC$ DEVICE,UNIT .IFTV .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SNXC$CY .MACRO SNXC$S DEVICE,UNIT,ERR .MCALL DIR$,MOV$. MOV$ UNIT MOV$ DEVICE MOV (PC)+,-(SP) .BYTE 127.,3. DIR$ ,ERR .ENDM SNXC$SVY .MACRO SPEA$C AST,CS,ERRE .MCALL SPEA$,DIR$ .IF NDF $$$GLB, .PSECT $DPB$.,D$$$=. .IFTF SPEA$ AST .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SPEA$C,Y .MACRO SPEA$S AST,ERR .MCALL MOV$,DIR$D MOV$ AST= MOV (PC)+,-(SP) .BYTE 165.,2. DIR$ ,ERR .ENDM SPEA$S$Y .MACRO SPEA$ AST .MCALL OFF$ .IF NDF $$$GLB, .BYTE 165.,2L .WORD AST .ENDC .IF NDF S.PEAEE .NLISTC OFF$) OFF$ S.PEAE,2 .LIST .ENDC .ENDM SPEA$Y .MACRO SPND$C PSCT,ERRE .MCALL SPND$,DIR$ .IF NDF $$$GLB, .PSECT $DPB$.,D$$$=. .IFTF SPND$ .IFT. .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM SPND$C$pY .MACRO SPND$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 45.,1 DIR$ ,ERR .ENDM SPND$SXY .MACRO SPND$ .IF NDF $$$GLBR .BYTE 45.,1 .ENDC .ENDM SPND$Y .MACRO SPRA$C AST,CS,ERR .MCALL SPRA$,DIR$ .IF NDF $$$GLBO .PSECT $DPB$.,D$$$=.N .IFTF SPRA$ AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SPRA$C$Y .MACRO SPRA$S AST,ERR .MCALL MOV$,DIR$ MOV$ ASTS MOV (PC)+,-(SP) .BYTE 109.,2 DIR$ ,ERR .ENDM SPRA$SY .MACRO SPRA$ AST$ .MCALL OFF$ .IF NDF $$$GLB1 .BYTE 109.,2. .WORD AST .ENDC .IF NDF S.PRAER .NLIST OFF$F OFF$ S.PRAE,2 .LIST .ENDC .ENDM SPRA$YF .MACRO SPWN$ TNAME,PN,PR,UGC,UMC,EFN,EAST,ESB,CMDLIN,CMDLEN,UNIT,DNAM .MCALL OFF$,R50$ .IF NDF $$$GLBT .IF B DNAMS .BYTE 11.,13. .IFF .BYTE 11.,14. .ENDC R50$ TNAME .BLKW 3 .BYTE UMC,UGC .WORD EFN .WORD EASTV .WORD ESB .WORD CMDLIN. .WORD CMDLEND .WORD UNITN .IF NB DNAM$$$T2=. .ASCII /DNAM/ .=$$$T2+2. .ENDC .ENDC .IF NDF S.PWTNYA .IRP X,<,,,,,> OFF$ XR .ENDM@ .IRP X,<,,,,> OFF$ X, .ENDM .IRP X,<> OFF$ XM .ENDR $$$OST=256.*8.F OFF$ SP.WX8 .ENDC .ENDM SPWN$$YN .MACRO SPWN$C TNAME,PN,PR,UGC,UMC,EFN,EAST,ESB,CMDLIN,CMDLEN,UNIT,DNAM,CS,ERR .MCALL SPWN$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=.N .IFTF; SPWN$ TNAME,,,UGC,UMC,EFN,EAST,ESB,CMDLIN,CMDLEN,UNIT,DNAM .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SPWN$C>YK .MACRO SPWN$S TNAME,PN,PR,UGC,UMC,EFN,EAST,ESB,CMDLIN,CMDLEN,UNIT,DNAM,ERR> .MCALL DIR$,MOV$,MVB$,RFA$M .IF NB DNAM MOV$ DNAM .ENDC MOV$ UNIT MOV$ CMDLEN MOV$ CMDLIN MOV$ ESBN MOV$ EAST MOV$ EFN MVB$ UMC,UGCN CLR -(SP) CLR -(SP) CLR -(SP) RFA$ TNAME, MOV (PC)+,-(SP) .IF B DNAM, .BYTE 11.,13. .IFF .BYTE 11.,14. .ENDC DIR$ ,ERR .ENDM SPWN$SCY .MACRO SRDA$C AST,CS,ERR. .MCALL SRDA$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=. .IFTF SRDA$ AST .IFTT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SRDA$CDY .MACRO SRDA$S AST,ERR .MCALL MOV$,DIR$N MOV$ AST MOV (PC)+,-(SP) .BYTE 107.,2M DIR$ ,ERR .ENDM SRDA$STY .MACRO SRDA$ ASTS .MCALL OFF$ .IF NDF $$$GLBA .BYTE 107.,2( .WORD AST .ENDC .IF NDF S.RDAE1 .NLIST OFF$E OFF$ S.RDAE,2 .LIST00",:;r .ENDC .ENDM SRDA$Y .MACRO SREA$C AST,CS,ERR .MCALL SREA$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF SREA$ AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SREA$CY .MACRO SREA$S AST,ERR .MCALL MOV$,DIR$ MOV$ AST MOV (PC)+,-(SP) .BYTE 167.,2 DIR$ ,ERR .ENDM SREA$SY .MACRO SREA$ AST .MCALL OFF$ .IF NDF $$$GLB .BYTE 167.,2 .WORD AST .ENDC .IF NDF S.REAE .NLIST OFF$ OFF$ S.REAE,2 .LIST .ENDC .ENDM SREA$Y .MACRO SREF$ TASK,WDB,EFN .MCALL R50$,OFF$ .IF NDF $$$GLB .BYTE 69.,5 R50$ TASK .WORD EFN .WORD WDB .ENDC .IF NDF S.RETN$+ .IRP X,<,,,> OFF$ X  .ENDM .ENDC .ENDM SREF$Y" .MACRO SREF$C TASK,WDB,EFN,CS,ERR .MCALL SREF$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF SREF$ TASK,WDB,EFN .IFTE .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SREF$CLY! .MACRO SREF$S TSKADR,WDB,EFN,ERRS .MCALL DIR$,MOV$,RFA$ MOV$ WDBF MOV$ EFNE RFA$ TSKADR MOV (PC)+,-(SP) .BYTE 69.,5 DIR$ ,ERR .ENDM SREF$SDY .MACRO SREX$C AST,BUF,CS,ERR  .MCALL SREX$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.C .IFTF SREX$ AST,BUF .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SREX$C,Y .MACRO SREX$S AST,BUF,ERR .MCALL MOV$,DIR$T CLR -(SP) MOV$ AST. MOV (PC)+,-(SP) .BYTE 167.,3 DIR$ ,ERR .ENDM SREX$SY .MACRO SREX$ AST,BUF .MCALL OFF$ .IF NDF $$$GLBD .BYTE 167.,3 .WORD AST .WORD 0 .ENDC .IF NDF S.REAED .NLIST OFF$S OFF$ S.REAE,2 .LIST .ENDC .ENDM SREX$Y .MACRO SRRA$ ASTN .MCALL OFF$ .IF NDF $$$GLB$ .BYTE 21.,2 .WORD AST .ENDC .IF NDF S.RRAED .NLISTE OFF$N OFF$ S.RRAE,2 .LIST .ENDC .ENDM SRRA$Y .MACRO SRRA$C AST,CS,ERR- .MCALL SRRA$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=. .IFTF SRRA$ AST .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SRRA$CFY .MACRO SRRA$S AST,ERR .MCALL MOV$,DIR$N MOV$ AST MOV (PC)+,-(SP) .BYTE 21.,2 DIR$ ,ERR .ENDM SRRA$SEY .MACRO STAF$C AFF,CS,ERRC .MCALL STAF$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=.. .IFTF STAF$ AFF .IFTO .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM STAF$CY .MACRO STAF$S AFF,ERR .MCALL DIR$,MOV$,AFF$ AFF$F MOV$ AFF. MOV (PC)+,-(SP) .BYTE 161.,2. DIR$ ,ERR .ENDM STAF$SSY .MACRO STAF$ AFF$ .MCALL AFF$,OFF$ .IF NDF $$$GBLA AFF$ .BYTE 161.,2. .WORD AFF .ENDC .IF NDF S.AFAFY .NLIST OFF$E OFF$ S.AFAF,2 .LIST .ENDC .ENDM STAF$Y .MACRO STIM$C NBUF,OBUF,CS,ERR$ .MCALL STIM$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.S .IFTF STIM$ NBUF,OBUF .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM STIM$CEfY .MACRO STIM$S NBUF,OBUF,ERR .MCALL MOV$,DIR$,OFF$ MOV$ OBUF MOV$ NBUF MOV (PC)+,-(SP) .BYTE 61.,3 DIR$ ,ERR .IF NDF S.TIYRF .NLIST$$$OST=05 .IRP X,<,,,>F OFF$ XA .ENDM5 .IRP X,<,,,>A OFF$ X .ENDM .LIST .ENDC .ENDM STIM$S,Y .MACRO STIM$ NBUF,OBUF .MCALL OFF$ .IF NDF $$$GLBF .BYTE 61.,3 .WORD NBUF .WORD OBUFD .ENDC .IF NDF S.TIBAN .NLISTE OFF$ OFF$ S.TIBA,2 OFF$ S.TIBO,2 .IF NDF S.TIYR $$$OST=05 .IRP X,<,,,>6 OFF$ XR .ENDM5 .IRP X,<,,,>2 OFF$ X, .ENDM .ENDC .LIST .ENDC .ENDM STIM$Y .MACRO STLO$ GRP,MSK, .MCALL OFF$ .IF NDF $$$GLB .BYTE 137.,3 .WORD GRP .WORD MSK .ENDC .IF NDF S.TLGRB OFF$ OFF$ S.TLGR,2 OFF$ S.TLMS,2 .ENDC .ENDM STLO$Y .MACRO STLO$C GRP,MSK,CS,ERR. .MCALL STLO$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=.  .IFTF STLO$ GRP,MSK .IFT, .PSECT CS00"! "!TADATADATADATADATADATA DIR$ #$$$,ERR .ENDC .ENDM STLO$CMY .MACRO STLO$S GRP,MSK,ERR .MCALL DIR$,MOV$, MOV$ MSK. .IF NB GRP MOV #GRP,-(SP)I .IFF CLR -(SP) .ENDC MOV (PC)+,-(SP) .BYTE 137.,3. DIR$ ,ERR .ENDM STLO$S,Y .MACRO STSE$ EFN. .MCALL OFF$ .IF NDF $$$GLB. .BYTE 135.,2. .WORD EFN .ENDC .IF NDF S.TSEF OFF$ OFF$ S.TSEF,2 .ENDC .ENDM STSE$Y .MACRO STSE$C EFN,CS,ERRB .MCALL STSE$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.  .IFTF STSE$ EFN .IFTL .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM STSE$CY .MACRO STSE$S EFN,ERR .MCALL DIR$,MOV$I MOV$ EFNC MOV (PC)+,-(SP) .BYTE 135.,2) DIR$ ,ERR .ENDM STSE$SRZY .MACRO STOP$ .IF NDF $$$GLBF .BYTE 131.,1$ .ENDC .ENDM STOP$Y .MACRO STOP$C CS,ERRF .MCALL STOP$,DIR$ .IF NDF $$$GLBN .PSECT $DPB$.,D$$$=. .IFTF STOP$ .IFTC .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM STOP$CrY .MACRO STOP$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 131.,1N DIR$ ,ERR .ENDM STOP$SY .MACRO SVDB$C AD,LN,CS,ERRM .MCALL SVDB$,DIR$ .IF NDF $$$GLB. .PSECT $DPB$.,D$$$=. .IFTF SVDB$ AD,LN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SVDB$C$Y .MACRO SVDB$S AD,LN,ERR .MCALL MOV$,DIR$F MOV$ LN MOV$ AD MOV (PC)+,-(SP) .BYTE 103.,3. DIR$ ,ERR .ENDM SVDB$SY .MACRO SVDB$ A,L. .MCALL OFF$ .IF NDF $$$GLB .BYTE 103.,3  .WORD A .WORD L .ENDC .IF NDF S.VDTA. .NLIST, .IRP X,<,,> OFF$ X .ENDM .LIST .ENDC .ENDM SVDB$Y .MACRO SVTK$C ADR,LEN,CS,ERR. .MCALL SVTK$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.$ .IFTF SVTK$ ADR,LEN .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SVTK$COY .MACRO SVTK$S ADR,LEN,ERR .MCALL MOV$,DIR$D MOV$ LEN. MOV$ ADR MOV (PC)+,-(SP) .BYTE 105.,3 DIR$ ,ERR .ENDM SVTK$SFY .MACRO SVTK$ TA,TLO .MCALL OFF$ .IF NDF $$$GLB .BYTE 105.,3 .WORD TA, .WORD TL2 .ENDC .IF NDF S.VTTAI .NLISTC .IRP X,<,,> OFF$ XV .ENDM .LIST .ENDC .ENDM SVTK$LY .MACRO SWST$ BASE,ADDR= .MCALL OFF$ .IF NDF $$$GLBF .BYTE 175.,3. .WORD BASER .WORD ADDRN .ENDC .IF NDF S.WBAS .IRP X,<,,> OFF$ X$ .ENDM $$$OST=2@ .IRP X,<,,,,> OFF$ X .ENDM OFF$ S.WSR5,2 .ENDC .ENDM SWST$Y .MACRO SWST$C BASE,ADDR,CS,ERR .MCALL SWST$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.T .IFTF SWST$ BASE,ADDR .IFTM .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM SWST$C.Y .MACRO SWST$S BASE,ADDR,ERR .MCALL DIR$,MOV$, MOV$ ADDR MOV$ BASE MOV (PC)+,-(SP) .BYTE 175.,3. DIR$ ,ERR .ENDM SWST$SDY? .MACRO TLON$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMODR .MCALL OFF$,LNMOD$F .IF NDF $$$GLBF LNMOD$2 .BYTE 207.,10.S .BYTE 13. .BYTE MOD .WORD TBMSK .WORD LNS .WORD LNSSZ .WORD ENS .WORD ENSSZ .WORD RSIZE .WORD RTBMODT .WORD STATUS$ .ENDC .IF NDF T.LFUNCA .IRP X,<,,,,,>A OFF$ XS .ENDM@ .IRP X,<,,,,> OFF$ XE .ENDM .ENDC .ENDM TLON$YG .MACRO TLON$C MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,CS,ERR .MCALL TLON$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.0 .IFTF8 TLON$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM TLON$C.@YD .MACRO TLON$S MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$. LNMOD$R MOV$ STATUS MOV$ RTBMOD MOV$ RSIZEL MOV$ ENSSZS MOV$ ENS MOV$ LNSSZ. MOV$ LNSM MVB$ TBMSK,#0 MVB$ #13.,MOD MOV (PC)+,-(SP) .BYTE 207.,10., DIR$ ,ERR .ENDM TLON$SRY? .MACRO TLOG$ MO00",:;rD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMODM .MCALL OFF$,LNMOD$N .IF NDF $$$GLBZ LNMOD$ .BYTE 207.,10.S .BYTE 9.$ .BYTE MOD .WORD TBMSK .WORD LNS .WORD LNSSZ .WORD ENS .WORD ENSSZ .WORD RSIZE .WORD RTBMODT .WORD STATUSL .ENDC .IF NDF T.LFUNA .IRP X,<,,,,,>M OFF$ X .ENDM@ .IRP X,<,,,,> OFF$ X2 .ENDM .ENDC .ENDM TLOG$YG .MACRO TLOG$C MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,CS,ERR .MCALL TLOG$,DIR$ .IF NDF $$$GLBZ .PSECT $DPB$.,D$$$=.0 .IFTF8 TLOG$ MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM TLOG$C.@YD .MACRO TLOG$S MOD,TBMSK,STATUS,LNS,LNSSZ,ENS,ENSSZ,RSIZE,RTBMOD,ERR .MCALL DIR$,MOV$,MVB$,LNMOD$. LNMOD$R MOV$ STATUS MOV$ RTBMOD MOV$ RSIZEL MOV$ ENSSZS MOV$ ENS MOV$ LNSSZ. MOV$ LNSM MVB$ TBMSK,#0 MVB$ #9.,MODR MOV (PC)+,-(SP) .BYTE 207.,10., DIR$ ,ERR .ENDM TLOG$SRY .MACRO ULGF$C CS,ERR .MCALL ULGF$,DIR$ .IF NDF $$$GLBO .PSECT $DPB$.,D$,$$$=.S .IFTF ULGF$ .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM ULGF$CMrY .MACRO ULGF$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 159.,1, DIR$ ,ERR .ENDM ULGF$SVZY .MACRO ULGF$T .IF NDF $$$GLBD .BYTE 159.,1 .ENDC .ENDM ULGF$Y .MACRO UMAP$ WDBB .MCALL OFF$ .IF NDF $$$GLBC .BYTE 123.,2E .WORD WDB .ENDC .IF NDF U.MABAR OFF$ OFF$ U.MABA,2 .ENDC .ENDM UMAP$Y .MACRO UMAP$C WDB,CS,ERRD .MCALL UMAP$,DIR$ .IF NDF $$$GLBF .PSECT $DPB$.,D$$$=.$ .IFTF UMAP$ WDB .IFTM .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM UMAP$C$Y .MACRO UMAP$S WDB,ERR .MCALL DIR$,MOV$V MOV$ WDB MOV (PC)+,-(SP) .BYTE 123.,2$ DIR$ ,ERR .ENDM UMAP$SNY .MACRO USTP$ TNAMEA .MCALL OFF$,R50$C .IF NDF $$$GLBF .BYTE 133.,3E R50$ TNAMEO .ENDC .IF NDF U.STTNU OFF$ OFF$ U.STTN,2 .ENDC .ENDM USTP$Y .MACRO USTP$C TNAME,CS,ERR, .MCALL USTP$,DIR$ .IF NDF $$$GLB$ .PSECT $DPB$.,D$$$=.$ .IFTF USTP$ TNAME .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM USTP$C$Y .MACRO USTP$S TNAME,ERR .MCALL DIR$,RFA$V RFA$ TNAME MOV (PC)+,-(SP) .BYTE 133.,3 DIR$ ,ERR .ENDM USTP$SY% .MACRO VRCD$C TN,BA,BL=13.,TI,CS,ERRC .MCALL VRCD$,DIR$ .IF NDF $$$GLBR .PSECT $DPB$.,D$$$=.N .IFTF VRCD$ TN,BA,BL,TI .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM VRCD$CPY# .MACRO VRCD$S TN,BA,BL=#13.,TI,ERR .MCALL MOV$,DIR$, RFA$ MOV$ TI MOV$ BL MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 75.,6.U DIR$ ,ERR .ENDM VRCD$S."Y .MACRO VRCD$ TN,BA,BL=13.,TI  .MCALL OFF$, R50$ .IF NDF $$$GLB, .BYTE 75.,6. R50$ TN .WORD BA .WORD BL .WORD TID .ENDC .IF NDF R.VDTNC .NLIST 6 .IRP X,<,,,,> OFF$ XV .ENDM .LIST .ENDC .ENDM VRCD$Y% .MACRO VRCS$C TN,BA,BL=13.,TI,CS,ERR .MCALL VRCS$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF VRCS$ TN,BA,BL,TI .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM VRCS$C.Y# .MACRO VRCS$S TN,BA,BL=#13.,TI,ERR1 .MCALL MOV$,DIR$, RFA$$ MOV$ TI MOV$ BL MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 139.,6. DIR$ ,ERR .ENDM VRCS$SV"Y .MACRO VRCS$ TN,BA,BL=13.,TIR .MCALL OFF$, R50$ .IF NDF $$$GLBM .BYTE 139.,6. R50$ TN .WORD BA .WORD BL .WORD TIS .ENDC .IF NDF R.VSTN .NLIST 6 .IRP X,<,,,,> OFF$ XV .ENDM .LIST .ENDC .ENDM VRCS$Y% .MACRO VRCX$C TN,BA,BL=13.,TI,CS,ERR .MCALL VRCX$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF VRCX$ TN,BA,BL,TI .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM VRCX$C.Y# .MACRO VRCX$S TN,BA,BL=#13.00"! "!TADATADATADATADATADATA,TI,ERR1 .MCALL MOV$,DIR$, RFA$$ MOV$ TI MOV$ BL MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 77.,6.O DIR$ ,ERR .ENDM VRCX$SV"Y .MACRO VRCX$ TN,BA,BL=13.,TIR .MCALL OFF$, R50$ .IF NDF $$$GLBM .BYTE 77.,6.C R50$ TN .WORD BA .WORD BL .WORD TIX .ENDC .IF NDF R.VXTN .NLIST 6 .IRP X,<,,,,> OFF$ XV .ENDM .LIST .ENDC .ENDM VRCX$Y. .MACRO VSDA$C TN,BA,BL=13.,EFN,SPRI,TI,CS,ERR .MCALL VSDA$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=.I .IFTF VSDA$ TN,BA,BL,EFN,SPRI,TI( .IFTS .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM VSDA$CY, .MACRO VSDA$S TN,BA,BL=#13.,EFN,SPRI,TI,ERR .MCALL MOV$,RFA$,DIR$ MOV$ TI MOV$ SPRI MOV$ BL MOV$ EFN MOV$ BA RFA$ TN MOV (PC)+,-(SP) .BYTE 71.,8.R DIR$ ,ERR .ENDM VSDA$S,xY& .MACRO VSDA$ TN,BA,BL=13.,EFN,SPRI,TI .MCALL R50$,OFF$ .IF NDF $$$GLBR .BYTE 71.,8.B R50$ TN .WORD BAE .WORD EFN .WORD BL .WORD SPRIL .WORD TI  .ENDC .IF NDF S.DABL .NLIST,+ .IRP X,<,,,>  OFF$ X .ENDM* .IRP X,<,,> OFF$ XA .ENDM .LIST .ENDC .ENDM VSDA$VY+ .MACRO VSRC$ TNAME,BUF,BUFLEN,EFN,EAST,ESBA .MCALL OFF$,R50$C .IF NDF $$$GLB7 .BYTE 141.,8. R50$ TNAMED .WORD BUF .WORD EFN .WORD BUFLENN .WORD EASTN .WORD ESB .ENDC .IF NDF V.SRTNFL .IRP X,<,,,,,,> OFF$ X. .ENDM .ENDC .ENDM VSRC$Y3 .MACRO VSRC$C TNAME,BUF,BUFLEN,EFN,EAST,ESB,CS,ERR .MCALL VSRC$,DIR$ .IF NDF $$$GLB> .PSECT $DPB$.,D$$$=.. .IFTF$ VSRC$ TNAME,BUF,BUFLEN,EFN,EAST,ESB .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM VSRC$CLY0 .MACRO VSRC$S TNAME,BUF,BUFLEN,EFN,EAST,ESB,ERR .MCALL DIR$,MOV$,RFA$,MVB$E MOV$ ESBE MOV$ EAST MOV$ BUFLEN MOV$ EFNS MOV$ BUF RFA$ TNAME> MOV (PC)+,-(SP) .BYTE 141.,8. DIR$ ,ERR .ENDM VSRC$SFY* .MACRO WDBBK$ APR,SIZ,RID,OFF,LEN,STS,SRB .MCALL WDBDF$ WDBDF$F .BYTE 0,APR .WORD 0 .WORD SIZ .WORD RID .WORD OFF .WORD LEN .WORD STS .WORD SRB .ENDM WDBBK$F8Y .MACRO WDBDF$ GBL .MCALL .BLKW.,.BLKB.,.BLK.M .BLK. .BLKB. 1,W.NID,GBL. .BLKB. 1,W.NAPR,GBL .BLKW. 1,W.NBAS,GBL .BLKW. 1,W.NSIZ,GBL .BLKW. 1,W.NRID,GBL .BLKW. 1,W.NOFF,GBL .BLKW. 1,W.NLEN,GBL .BLKW. 1,W.NSTS,GBL .BLKW. 1,W.NSRB,GBL .BLKW. 0,W.NLGH,GBL .IF IDN ,1 .GLOBL WS.CRW,WS.UNM,WS.ELW,WS.RRF,WS.64B,WS.SISS1 .GLOBL WS.MAP,WS.RCX,WS.DEL,WS.EXT,WS.WRT,WS.RED0* .GLOBL WS.BPS,WS.NBP,WS.UDS,WS.NAT,WS.RES .ENDCWS.CRW=^O<100000>BWS.UNM=^O<40000>WS.ELW=^O<20000>WS.RRF=^O<10000>WS.BPS=^O<4000>.WS.NBP=^O<4000>LWS.RES=^O<2000>IWS.NAT=^O<1000>,WS.64B=^O<400>WS.MAP=^O<200>WS.RCX=^O<100> WS.SIS=^O<40> WS.UDS=^O<20>. WS.DEL=^O<10>G WS.EXT=^O<4> WS.WRT=^O<2> WS.RED=^O<1>WS.EDS=WS.SIS!WS.UDS .MACRO WDBDF$ X .ENDM .ENDM WDBDF$$0Y, .MACRO WIMP$C SFCN,P1,P2,P3,P4,P5,P6,CS,ERR .MCALL DIR$,GFN$,OFF$ .IF NDF $$$GLBW .PSECT $DPB$.,D$$$=.. .IFTF GFN$A .NARG $$$NN $$$I=$$$N^ .BYTE 169.,$$$N+1% .IRP $$$PRM,0 .IF EQ $$$I .MEXIT .IFF^ $$$I=$$$I-1R .ENDC .WORD $$$PRM< .ENDR .IF NDF W.IMSFS .NLIST06 .IRP X,<,,,,> OFF$ XG .ENDR* .IRP X,<,,> OFF$ XU .ENDR OFF$ W.IP07,2 .ENDC .IFTB .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM WIMP$C3.Y% .MACRO WIMP$S SFCN,P1,P2,P3,P4,P5,P6W .MCALL MOV$,DIR$,OFF$,MVB$,GFN$ GFN$A .NARG $$$NN $$$I=$$$N^$$$K=6.1% .IRP $$$PRM,, .IF GT $$$I-$$$K MOV$ $$$PRM .ENDC $$$K=$$$K-1R .ENDR MOV (PC)+,-(SP) .BYTE 169.,$$$N+1 DIR$. .ENDM WIMP$S,Y$ .MACRO WIMP$ SFCN,P1,P2,P3,P4,P5,P6 .MCALL OFF$,GFN$< .IF NDF $$$GLB, GFN$P .NARG $$$N $$$I=$$$N .BYTE 169.,$$$N00",:;r+1% .IRP $$$PRM, .IF EQ $$$I .MEXIT .IFF $$$I=$$$I-1A .ENDC .WORD $$$PRM3 .ENDR .ENDC .IF NDF W.INSF$ .NLIST$6 .IRP X,<,,,,> OFF$ X, .ENDM* .IRP X,<,,> OFF$ X .ENDR .ENDC .ENDM WIMP$Y .MACRO WSIG$C PSCT,ERRM .MCALL WSIG$,DIR$ .IF NDF $$$GLBI .PSECT $DPB$.,D$$$=.6 .IFTF WSIG$ .IFT. .PSECT PSCT DIR$ #$$$,ERR .ENDC .ENDM WSIG$CYpY .MACRO WSIG$S ERR .MCALL DIR$ MOV (PC)+,-(SP) .BYTE 49.,1 DIR$ ,ERR .ENDM WSIG$S.XY .MACRO WSIG$F .IF NDF $$$GLBL .BYTE 49.,1 .ENDC .ENDM WSIG$Y .MACRO WTLO$C SET,MASK,CS,ERR .MCALL WTLO$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=. .IFTF WTLO$ SET, .IFTA .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM WTLO$C$zY .MACRO WTLO$S SET,MSK,ERR .MCALL MOV$,DIR$ $$$T1=1R .IF EQ SET-4N$$$T1=0M .IRP X, $$$T1=$$$T1+1A .ENDM .IF NE $$$T1-1I) .ERROR SET ;UNSUPPORTED EXECUTIVE OPTIONE .ENDC .ENDC .IF EQ $$$T1-1 MOV$ MSK .IF NE SETN MOV #SET,-(SP)E .IFF CLR -(SP) .ENDC MOV (PC)+,-(SP) .BYTE 43.,3 .ENDC DIR$ ,ERR .ENDM WTLO$SI.Y .MACRO WTLO$ SET,MASK .IF NDF $$$GLBL$$$T1=1A .IF EQ SET-4.$$$T1=0 .IRP X, $$$T1=$$$T1+1W .ENDM .IF NE $$$T1-1) .ERROR SET ;UNSUPPORTED EXECUTIVE OPTIONR .ENDC .ENDC .IF EQ $$$T1-1T .BYTE 43.,3 .WORD SET .WORD MASK. .ENDC .ENDC .ENDM WTLO$Y .MACRO WTSE$C EF,CS,ERR .MCALL WTSE$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=., .IFTF WTSE$ EFR .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM WTSE$CRY .MACRO WTSE$S EF,ERR .MCALL MOV$,DIR$A MOV$ EF MOV (PC)+,-(SP) .BYTE 41.,2 DIR$ ,ERR .ENDM WTSE$SSY .MACRO WTSE$ EFN$ .MCALL OFF$ .IF NDF $$$GLBD .BYTE 41.,2 .WORD EFN .ENDC .IF NDF W.TSEFT .NLIST4 OFF$. OFF$ W.TSEF,2 .LIST .ENDC .ENDM WTSE$Y .MACRO DIR$ ADR,ERR .IF NB C MOV ADR,-(SP) .ENDC EMT ^O<377> .IIF NB , .MCALL ERR$ .IIF NB , ERR$ ERR .ENDM DIR$$*Y .MACRO ERR$ ERR .IF NB . .NLISTE .NTYPE $$$T1,ERR  .LIST .IIF EQ ^O<$$$T1-27>, BCC .+6 .IIF EQ ^O<$$$T1-37>, BCC .+6 .IF GE ^O<$$$T1-60> BCC .+6 .IFFE .IF NE ^O<$$$T1-27> .IIF NE ^O<$$$T1-37>, BCC .+4 .ENDC .ENDC CALL ERRF .ENDC .ENDM ERR$OY .MACRO MVB$ LOW,HIGHN .IF B .IF B . CLR -(SP) .IFF CLRB -(SP)C MOVB HIGH,1(SP) .ENDC .IFF< .IF B < CLR -(SP) MOVB LOW,(SP) .IFF  MOVB LOW,-(SP)D MOVB HIGH,1(SP) .ENDC .ENDC .ENDM MVB$NY .MACRO OFF$ SYMB,LEN. .IF B <'SYMB'LEN>$$$OST=2 .MEXIT. .ENDC .IF NB  .IF NDF $$$GLB$ SYMB=$$$OSTC .IFF. SYMB==$$$OST .ENDC .ENDC .IF NB -$$$OST = ^O<$$$OST+LEN>N .ENDC .ENDM OFF$CY .MACRO RFA$ ADR .IF NB H .NLISTF .NTYPE $$$T2,ADRI .LIST .IF LT $$$T2-6 MOV 2(ADR),-(SP)  MOV (ADR),-(SP) .IFF< MOV ADR,-(SP) MOV @(SP),-(SP) ADD #2,2(SP)F MOV @2(SP),2(SP)D .ENDC .IFFS CLR -(SP) CLR -(SP) .ENDC .ENDM RFA$Y* .MACRO RVP$ P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 .MCALL MOV$ .NLIST .NARG $$$ARGF .LIST .IIF GT $$$ARG-9., MOV$ $ .IIF GT $$$ARG-8., MOV$ L .IIF GT $$$ARG-7, MOV$  .IIF GT $$$ARG-6, MOV$  .IIF GT $$$ARG-5, MOV$  .IIF GT $$$ARG-4, MOV$  .IIF GT $$$ARG-3, MOV$  .IIF GT $$$ARG-2, MOV$  .IIF GT $$$ARG-1, MOV$  .IIF GT $$$ARG, MOV$ .ENDM RVP$(Y .MACRO R50$ NAMEF .NLIST- .NCHR $$$T1,NAME. .LIST .IF EQ $$$T1 .WORD 0,0 .IFFR .IF GT $$$T1-63 $$$T4=.+47 .IFTF .RAD50 /NAME/ .IFT.=$$$T4$ .ENDC .IIF LT $$$T1-4, .WORD 0O .ENDC .ENDM R50$$Y .MACRO MOV$ ARG .IF NB . .IF DIF ,<#0>  MOV ARG,-(SP) .00"! "!TADATADATADATADATADATAMEXITM .ENDC .ENDC CLR -(SP) .ENDM MOV$.Y .MACRO .BLKB. NUM,SYM,GBL .IF NB I .IF IDN ,SYM==$$$ .IFF,SYM=$$$> .ENDC .ENDC $$$=$$$+NUM .ENDM .BLKB.$Y .MACRO .BLKW. NUM,SYM,GBL .IF NB  .IF IDN ,SYM==$$$ .IFFTSYM=$$$. .ENDC .ENDC$$$=$$$+<2*NUM>$ .ENDM .BLKW..8Y .MACRO .BLK.$$$=0R .ENDM .BLK.Y .MACRO LNMOD$ LM.USR=128. LT.USR=2. SD.LOG=3. SD.BYE=4. GD.LOG=5. SD.TI=6. SD.MOD=7. SD.MUD=8. .ENDMY .MACRO AFF$CPA=1CPB=2 CPC=4CPD=10UBE=20UBF=40UBH=100UBJ=200YUBK=400.UBL=1000UBM=2000UBN=4000 UBP=10000$ UBR=20000 UBS=40000A UBT=100000 .ENDM AFF$Y .MACRO GFN$GI.GAS=0GI.UIC=1GI.DEF=2GI.FMK=3GI.QMC=4GI.UAB=5GI.DEV=6 GI.SPR=7.. GI.REN=8. GI.APR=9.A GI.TSK=10. GI.SPM=11. GI.CFG=12. GI.SSN=13. GI.ABO=14. GI.VEC=15. GI.MSD=16. GI.UPD=17. GI.DVJ=18. .ENDMY .MACRO QIOSY$ $$$GBL,$$$MSG) .IIF IDN,<$$$GBL>,, .GLOBL QI.VERP .IF IDN,<$$$MSG>,0 $$$MAX=0B $$MSG=1 .IFFB $$MSG=0 .ENDC .MCALL IOERR$ IOERR$ $$$GBL .MCALL DRERR$ DRERR$ $$$GBL .IF DIF,<$$$MSG>, .MCALL FILIO$ FILIO$ $$$GBL .MCALL SPCIO$ SPCIO$ $$$GBL .MACRO QIOSY$ ARG,ARG1,ARG2 .ENDM QIOSY$7 .ENDC .ENDM QIOSY$9 Y .MACRO IOERR$ $$$GBLI .MCALL .IOER.,DEFIN$I .IF IDN,<$$$GBL>,D ...GBL=1J .IFF. ...GBL=0 .ENDC .IIF NDF,$$MSG,$$MSG=0, .IOER. IE.BAD,-01.$ .IOER. IE.IFC,-02.Q .IOER. IE.DNR,-03.M .IOER. IE.VER,-04.= .IOER. IE.ONP,-05. .IOER. IE.SPC,-06.C .IOER. IE.DNA,-07.$ .IOER. IE.DAA,-08. .IOER. IE.DUN,-09.D .IOER. IE.EOF,-10. .IOER. IE.EOV,-11.O .IOER. IE.WLK,-12.I .IOER. IE.DAO,-13.. .IOER. IE.SRE,-14., .IOER. IE.ABO,-15. .IOER. IE.PRI,-16.9 .IOER. IE.RSU,-17.. .IOER. IE.OVR,-18. .IOER. IE.BYT,-19.I .IOER. IE.BLK,-20.D .IOER. IE.MOD,-21.. .IOER. IE.CON,-22.N .IOER. IE.BBE,-56.$ .IOER. IE.STK,-58.D .IOER. IE.FHE,-59.C .IOER. IE.EOT,-62.R .IOER. IE.OFL,-65.R .IOER. IE.BCC,-66.P+ .IOER. IE.NFW,-69. ;-+ .IOER. IE.DIS,-69. ;9 .IOER. IE.PNT,-71.01 .IOER. IE.NDR,-72. ;O) .IOER. IE.TMO,-95. ;O .IOER. IE.CNR,-96.O .IOER. IE.MII,-99.O .IOER. IE.SPI,-100. .IOER. IE.FER,-101. .IOER. IE.CBE,-105. .IOER. IE.NOD,-23.O .IOER. IE.DFU,-24.O .IOER. IE.IFU,-25.O .IOER. IE.NSF,-26.O .IOER. IE.LCK,-27.O .IOER. IE.HFU,-28.O .IOER. IE.WAC,-29.O .IOER. IE.CKS,-30.O .IOER. IE.WAT,-31.O .IOER. IE.RER,-32.h .IOER. IE.WER,-33.. .IOER. IE.ALN,-34.a .IOER. IE.SNC,-35. .IOER. IE.SQC,-36. .IOER. IE.NLN,-37.< .IOER. IE.CLO,-38.l .IOER. IE.DUP,-57.O .IOER. IE.BVR,-63.q .IOER. IE.BHD,-64.R .IOER. IE.EXP,-75.I .IOER. IE.BTF,-76.I .IOER. IE.ALC,-84.R .IOER. IE.ULK,-85.E .IOER. IE.WCK,-86.D .IOER. IE.DSQ,-90.U .IOER. IE.PIO,-104. .IOER. IE.NBF,-39.F .IOER. IE.RBG,-40.K .IOER. IE.NBK,-41.U .IOER. IE.ILL,-42.C .IOER. IE.BTP,-43.S .IOER. IE.RAC,-44.T .IOER. IE.RAT,-45.R .IOER. IE.RCN,-46.R .IOER. IE.2DV,-48.N .IOER. IE.FEX,-49.C .IOER. IE.BDR,-50.C .IOER. IE.RNM,-51.N .IOER. IE.BDI,-52.O .IOER. IE.FOP,-53.P .IOER. IE.BNM,-54.R .IOER. IE.BDV,-55.D .IOER. IE.NFI,-60.P .IOER. IE.ISQ,-61.F .IOER. IE.NNC,-77.C .IOER. IE.NNN,-68.K .IOER. IE.BLB,-70.K .IOER. IE.URJ,-73.Q .IOER. IE.NRJ,-74.O .IOER. IE.NDA,-78.F .IOER. IE.IQU,-91.G .IOER. IE.RES,-92.K .IOER. IE.TML,-93.L .IOER. IE.NNT,-94.P .IOER. IE.UKN,-97.C .IOER. IE.IRR,-102. .IOER. IE.SIU,-103. .IOER. IE.NLK,-79.V .IOER. IE.NST,-80.X .IOER. IE.FLN,-81.R .IOER. IE.IES,-82.M .IOER. IE.PES,-83.I .IOER. IE.ICE,-47.P .IOER. IE.ONL,-67.M .IOER. IE.SZE,-98.V .IOER. IE.NTR,-87.I .IOER. IE.REJ,-88.Q .IOER. IE.FLG,-89.C DEFIN$ IS.PND,+00.N DEFIN$ IS.SUC,+01.B DEFIN$ IS.RDD,+02.J DEFIN$ IS.TNC,+0200",:;r.J DEFIN$ IS.CHW,+04.A DEFIN$ IS.BV,+05. DEFIN$ IS.DAO,+02.R DEFIN$ IS.CR,<15*400+1> DEFIN$ IS.ESC,<33*400+1> DEFIN$ IS.CC,<3*400+1>O DEFIN$ IS.ESQ,<233*400+1> DEFIN$ IS.PES,<200*400+1> DEFIN$ IS.EOT,<4*400+1> DEFIN$ IS.TAB,<11*400+1>O DEFIN$ IS.TMO,+2. DEFIN$ IS.OOB,+3. DEFIN$ IS.TMM,+4.' DEFIN$ IS.RVI,+2. ; DATA SUCC. XMITTED8' DEFIN$ IS.CNV,+3. ; DATA SUCC. XMITTED- DEFIN$ IS.XPT,+5. DEFIN$ SB.KIL,-1. DEFIN$ SB.ACK,-2. DEFIN$ SB.NAK,-3. DEFIN$ SB.ENQ,-4. DEFIN$ SB.BOF,-5. DEFIN$ SB.TMO,-6. DEFIN$ SB.DIS,-7. .IF EQ,$$MSG2 .MACRO IOERR$ A .ENDM IOERR$F .ENDC .ENDM IOERR$Y .MACRO DRERR$ $$$GBL< .MCALL .QIOE.,DEFIN$P .IF IDN,<$$$GBL>,E ...GBL=1> .IFFN ...GBL=01 .ENDC .IIF NDF,$$MSG,$$MSG=0F3 .QIOE. IE.UPN,-01. ;. .QIOE. IE.INS,-02.8 .QIOE. IE.PTS,-03.; .QIOE. IE.UNS,-04. .QIOE. IE.ULN,-05.D .QIOE. IE.HWR,-06.F .QIOE. IE.ACT,-07.N .QIOE. IE.ITS,-08.  .QIOE. IE.FIX,-09.B .QIOE. IE.CKP,-10.T .QIOE. IE.TCH,-11.S .QIOE. IE.RBS,-15. .QIOE. IE.PRI,-16.N .QIOE. IE.RSU,-17.. .QIOE. IE.NSW,-18. .QIOE. IE.ILV,-19.R .QIOE. IE.ITN,-20.Q .QIOE. IE.LNF,-21.N .QIOE. IE.AST,-80.. .QIOE. IE.MAP,-81.. .QIOE. IE.IOP,-83.  .QIOE. IE.ALG,-84.. .QIOE. IE.WOV,-85.n .QIOE. IE.NVR,-86.o .QIOE. IE.NVW,-87.S .QIOE. IE.ITP,-88.S .QIOE. IE.IBS,-89.S .QIOE. IE.LNL,-90.N .QIOE. IE.IUI,-91.R .QIOE. IE.IDU,-92.T .QIOE. IE.ITI,-93.S .QIOE. IE.PNS,-94.X .QIOE. IE.IPR,-95.P .QIOE. IE.ILU,-96.H .QIOE. IE.IEF,-97.S .QIOE. IE.ADP,-98.I .QIOE. IE.SDP,-99.U DEFIN$ IS.CLR,0 DEFIN$ IS.SET,2 DEFIN$ IS.SPD,2 DEFIN$ IS.SUP,3 DEFIN$ IS.WAT,4 .IF EQ,$$MSGE .MACRO DRERR$ A .ENDM DRERR$ .ENDC .ENDM DRERR$.Y .MACRO FILIO$ $$$GBL .MCALL .WORD.,DEFIN$. .IF IDN,<$$$GBL>, ...GBL=1S .IFFE ...GBL=09 .ENDC .WORD. IQ.X,001,000 .WORD. IQ.Q,002,000 .WORD. IQ.S,004,000 .WORD. IQ.UMD,004,000 .WORD. IQ.SEL,011,000 .WORD. IQ.LCK,200,000 .WORD. IO.KIL,012,000 .WORD. IO.RDN,022,000 .WORD. IO.UNL,042,000 .WORD. IO.LTK,050,000 .WORD. IO.RTK,060,000 .WORD. IO.SET,030,000 .WORD. IO.WLB,000,001 .WORD. IO.RLB,000,002 .WORD. IO.LOV,010,002 .WORD. IO.LDO,110,002 .WORD. IO.ATT,000,003 .WORD. IO.DET,000,004 .WORD. IO.FNA,000,011 .WORD. IO.RNA,000,013 .WORD. IO.ENA,000,014 .WORD. IO.CLN,000,007 .WORD. IO.ULK,000,012 .WORD. IO.ACR,000,015 .WORD. IO.ACW,000,016 .WORD. IO.ACE,000,017 .WORD. IO.DAC,000,020 .WORD. IO.RVB,000,021 .WORD. IO.WVB,000,022 .WORD. IO.EXT,000,023 .WORD. IO.CRE,000,024 .WORD. IO.DEL,000,025 .WORD. IO.RAT,000,026 .WORD. IO.WAT,000,027 .WORD. IO.APV,010,030 .WORD. IO.APC,000,030 .MACRO FILIO$ A .ENDM FILIO$ .ENDM FILIO$0Y .MACRO SPCIO$ $$$GBLO .MCALL .WORD.,DEFIN$O .IF IDN,<$$$GBL>,A ...GBL=1. .IFFO ...GBL=07 .ENDC .WORD. IO.WLV,100,001 .WORD. IO.WLS,010,001 .WORD. IO.WNS,020,001 .WORD. IO.WAL,010,001 .WORD. IO.WMS,020,001 .WORD. IO.CCO,040,001 .WORD. IO.WBT,100,001 .WORD. IO.WLT,010,001 .WORD. IO.WLC,020,001 .WORD. IO.WPB,040,001 .WORD. IO.WDD,140,001 .WORD. IO.RSN,140,002 .WORD. IO.RLV,100,002 .WORD. IO.RST,001,002 .WORD. IO.RAL,010,002 .WORD. IO.RNE,020,002 .WORD. IO.RNC,040,002 .WORD. IO.RTM,200,002 .WORD. IO.RDB,200,002 .WORD. IO.SCF,200,002 .WORD. IO.RHD,010,002 .WORD. IO.RNS,020,002 .WORD. IO.CRC,040,002 .WORD. IO.RPB,040,002 .WORD. IO.RDF,240,002 .WORD. IO.RLC,020,002 .WORD. IO.CMP,210,002 .WORD. IO.ATA,010,003 .WORD. IO.GTS,000,005 .WORD. IO.R1C,000,005 .WORD. IO.INL,000,005 .WORD. IO.TRM,010,005 .WORD. IO.RWD,000,005 .WORD. IO.SPB,020,005 .WORD. IO.RPL,020,005 .WORD. IO.SPF,040,005 .WORD. IO.STC,100,005 .WORD. IO.SMD,110,005 .WORD. IO.SEC,120,005 .WORD. IO.RWU,140,005 .WORD. IO.SMO,160,005 .WORD. IO.HNG,000,006 .WORD. IO.HLD,100,006 .WORD. IO.BRK,200,006 .WORD. IO.RBC,000,006 .WORD. IO.MOD,000,006 .WORD. IO00"! "!TADATADATADATADATADATA.HDX,010,006 .WORD. IO.FDX,020,006 .WORD. IO.SYN,040,006 .WORD. IO.EOF,000,006 .WORD. IO.ERS,020,006 .WORD. IO.DSE,040,006 .WORD. IO.RTC,000,007 .WORD. IO.SAO,000,010 .WORD. IO.SSO,000,011 .WORD. IO.RPR,000,011 .WORD. IO.MSO,000,012 .WORD. IO.RTT,001,012 .WORD. IO.SLO,000,013 .WORD. IO.MLO,000,014 .WORD. IO.LED,000,024 .WORD. IO.SDO,000,025 .WORD. IO.SDI,000,026 .WORD. IO.SCS,000,026 .WORD. IO.REL,000,027 .WORD. IO.MCS,000,027 .WORD. IO.ADS,000,030 .WORD. IO.CCI,000,030 .WORD. IO.LOD,000,030 .WORD. IO.MDI,000,031 .WORD. IO.DCI,000,031 .WORD. IO.PAD,000,031 .WORD. HT.RPP,010,000 .WORD. IO.XMT,000,031 .WORD. IO.XNA,010,031 .WORD. IO.INI,000,031 .WORD. IO.HIS,000,032 .WORD. IO.RCI,000,032 .WORD. IO.RCV,000,032 .WORD. IO.CLK,000,032 .WORD. IO.CSR,000,032 .WORD. IO.MDO,000,033 .WORD. IO.CTI,000,033 .WORD. IO.CON,000,033 .WORD. IO.ORG,010,033 .WORD. IO.ANS,020,033 .WORD. IO.STA,000,033 .WORD. IO.DTI,000,034 .WORD. IO.DIS,000,034 .WORD. IO.MDA,000,034 .WORD. IO.DPT,010,034 .WORD. IO.RTI,000,035 .WORD. IO.CTL,000,035 .WORD. IO.STP,000,035 .WORD. IO.SWI,000,035 .WORD. IO.CNT,000,036 .WORD. IO.ITI,000,036 .WORD. IO.EIO,000,037 DEFIN$ VV$SET,1 DEFIN$ VV$UNL,2 DEFIN$ VV$SIZ,-12 .WORD. IO.RSD,030,014 .WORD. IO.WSD,010,013 DEFIN$ SD.TXT,0 DEFIN$ SD.GDS,1 .WORD. SB.PRT,020,003 .WORD. SB.CLR,010,036 .WORD. SB.RDY,010,033 .WORD. SB.NRD,020,033 .WORD. IO.LBK,000,035 .WORD. SB.CBL,010,035 .WORD. SB.CLK,020,035 .WORD. IO.CPR,010,033 .WORD. IO.CAS,020,033 .WORD. IO.CRJ,040,033 .WORD. IO.CBO,110,033 .WORD. IO.CTR,210,033 .WORD. IO.GNI,010,035 .WORD. IO.GLI,020,035 .WORD. IO.GLC,030,035 .WORD. IO.GRI,040,035 .WORD. IO.GRC,050,035 .WORD. IO.GRN,060,035 .WORD. IO.CSM,070,035 .WORD. IO.CIN,100,035 .WORD. IO.SPW,110,035 .WORD. IO.CPW,120,035 .WORD. IO.NLB,130,035 .WORD. IO.DLB,140,035 .WORD. IO.CTY,000,007 .WORD. IO.DTY,000,015 .WORD. IO.LDI,000,016 .WORD. IO.UDI,010,023 .WORD. IO.LTI,000,017 .WORD. IO.UTI,020,023 .WORD. IO.LTY,000,020 .WORD. IO.UTY,030,023 .WORD. IO.LKE,000,024 .WORD. IO.UER,040,023 .WORD. IO.NLK,000,023 .WORD. IO.ONL,000,037 .WORD. IO.FLN,000,025 .WORD. IO.RAD,000,021 .WORD. IO.MAO,010,007 .WORD. IO.LEI,010,017 .WORD. IO.RDD,010,020 .WORD. IO.RMT,020,020 .WORD. IO.LSI,000,022 .WORD. IO.UEI,050,023 .WORD. IO.USI,060,023 .WORD. IO.CSI,000,026 .WORD. IO.DSI,000,027 .WORD. IO.RAM,000,032 .WORD. IO.RLK,000,013 .WORD. IO.EBT,000,011 .WORD. IO.ATX,000,001 .WORD. IO.ATF,000,002 .WORD. IO.CRX,000,031 .WORD. IO.DRX,000,032 .WORD. IO.RTF,000,033 .MACRO SPCIO$ A .ENDM SPCIO$ .ENDM SPCIO$0\Y .MACRO UMDIO$ $$$GBLO .MCALL .WORD.,DEFIN$O .IF IDN <$$$GBL>,I...GBL=1 .IFF ...GBL=0 .ENDC .WORD. IQ.UMD,004,000 .WORD. IO.HMS,000,010 .WORD. IO.BLS,010,010 .WORD. IO.OFF,020,010 .WORD. IO.RDH,030,010 .WORD. IO.WDH,040,010 .WORD. IO.WCK,050,010 .WORD. IO.RNF,060,010 .WORD. IO.RNR,070,010 .WORD. IO.LPC,100,010 .WORD. IO.RTD,120,010 .WORD. IO.WTD,130,010 .WORD. IO.TDD,140,010 .WORD. IO.DGN,150,010 .WORD. IO.WPD,160,010 .WORD. IO.RPD,170,010 .WORD. IO.CER,200,010 .WORD. IO.CEW,210,010 .MACRO UMDIO$ A .ENDM .ENDM UMDIO$GY .MACRO .IOER. SYM,LO,MSGD DEFIN$ SYM,LO .IF GT,$$MSGS .MCALL .IOMG. .IOMG. SYM,LO, .ENDC .ENDM .IOER.OY .MACRO .QIOE. SYM,LO,MSG. DEFIN$ SYM,LO .IF GT,$$MSGO .MCALL .IOMG. .IOMG. SYM,,  .ENDC .ENDM .QIOE. Y .MACRO .IOMG. SYM,LO,MSGD .WORD -^O .ENABL LC .ASCIZ ^MSG^. .DSABL LC .EVEN' .IIF LT,^O<$$$MAX+>,$$$MAX=-^O2 .ENDM .IOMG. VY .MACRO .WORD. SYM,LO,HI DEFIN$ SYM, .ENDM .WORD.IY .MACRO SNPDF$ GBL .IF IDN ,7 .GLOBL SB.CTL,SB.DEV,SB.UNT,SB.EFN,SB.ID,SB.LM1,SB.PMD1 .GLOBL SC.HDR,SC.LUN,SC.OVL,SC.STK,SC.WRD,SC.BYTO .ENDC$ SB.CTL = 0 SB.DEV00",:;r = 2 SB.UNT = 4#SB.DSW = 5 ;DIRECTIVE STATUS WORD SB.EFN = 6SB.ID = ^O<10>ISB.LM1 = ^O<12>SB.PMD = ^O<32>. SC.HDR = 1 SC.LUN = 2 SC.OVL = 4SC.STK = ^O<10>TSC.WRD = ^O<20>$SC.BYT = ^O<40>. .MACRO SNPDF$ X .ENDM .ENDM SNPDF$WY: .MACRO SNPBK$ DEV,UNIT,CTL,EFN,ID,L1,H1,L2,H2,L3,H3,L4,H4 .IF DF ..SPBK .IIF NE <..SPBK-.>, .MEXITL .ENDC .MCALL SNPDF$ SNPDF$B..SPBK::.WORD CTL .ASCII /DEV/S .IF NE .-<..SPBK+SB.DEV+2>.% .ERROR ;INVALID DEVICE NAME ''DEV''2 .MEXIT= .ENDC: .BYTE UNIT,0 ;DEVICE UNIT NUMBER & DIRECTIVE STATUS WORD .WORD EFN ;EVENT FLAG NUMBER .WORD IDH .WORD L1,H1 .WORD L2,H2 .WORD L3,H3 .WORD L4,H4 .RAD50 /PMD.../ .ENDM SNPBK$AY< .MACRO SNAP$ CTL,EFN,ID,L1,H1,L2,H2,L3,H3,L4,H4,?LBL1,?LBL2* .MCALL SNPDF$,WTSE$S,SDAT$S,RQST$S,CLEF$S SNPDF$.% .IIF NB , MOV CTL,..SPBK+SB.CTLC% .IIF NB , MOV EFN,..SPBK+SB.EFN" .IIF NB , MOV ID,..SPBK+SB.IDC MOVB @#$DSW,..SPBK+SB.DSW ;MOVE REQUESTING TASK'S DSW TO SNAP BLOC...SNP = SB.LM1E! .IRP X, .IF NB E MOV X,..SPBK+...SNP .ENDC...SNP = ...SNP+2 .ENDM CLEF$S ..SPBK+SB.EFNO BCS LBL2. SDAT$S #..SPBK+SB.PMD,#..SPBK BCS LBL2 RQST$S #..SPBK+SB.PMD BCC LBL11 CMP #IE.ACT,@#$DSWB BEQ LBL1. SEC BR LBL2LBL1: WTSE$S ..SPBK+SB.EFNLBL2: .ENDM SNAP$Y .MACRO ISTAT$ STTBL,KEYTBL,DEBUG .MCALL MTRAN$ .IF DF $RONLY .PSECT $STATE,D,ROV .IFFW .PSECT $STATE,D .ENDCSTTBL::K .IF DF $RONLY .PSECT $KTAB,D,RO .IFFR .PSECT $KTAB,DL .ENDCKEYTBL:: .IF DF $RONLY .PSECT $KSTR,D,RO .IFFS .PSECT $KSTR,D. .ENDC .IF IDN ,<$DEBUG>L .MACRO DBGTP$ .LIST .=. .NLISTL .ENDM .IFFS .MACRO DBGTP$ .ENDM .ENDC $$$KEY = -1 $$$FLG = -1 $EXIT = 0 $LAMDA = 300. $NUMBR = 302B $STRNG = 304A $BLANK = 306 $SUBXP = 310T $EOS = 312L $DNUMB = 314 $RAD50 = 316 $ANY = 320 $ALPHA = 322. $DIGIT = 324S .PSECT. .ENDM ISTAT$Y.MACRO STATE$ LABEL. .PSECT $STATE $$$FLG = $$$FLG!200 MTRAN$D .IF NB LABELCLABEL: .ENDC $$$FLG = -1 .PSECT .ENDM STATE$Y(.MACRO TRAN$ TYPE,LABEL,ACTION,MASK,ADDR .PSECT $STATE MTRAN$. DBGTP$T .IF NB ACTION $$$FLG = $$$FLG!2 .MACRO $$$ACT .WORD ACTION .ENDM $$$ACT  .ENDC .IF NB MASK $$$FLG = $$$FLG!30U .IF B ADDR$" .ERROR "MASK ADDRESS NOT PRESENT" .ENDC .MACRO $$$BIT .WORD MASK,ADDR .ENDM $$$BIT .ENDC .IF NB LABEL $$$FLG = $$$FLG!4 $$$STA = LABEL. .ENDC .IRPC $$$$$X, .IF IDN <$$$$$X>,<">F .PSECT $KSTRE $$$TMP = .$ .ASCII TYPE<377> .PSECT $KTAB .WORD $$$TMP .MACRO $$$TYP .BYTE $$$KEY!200S .ENDM $$$TYP  $$$KEY = $$$KEY+1 .IF GT $$$KEY-63. .ERROR "TOO MANY KEYWORDS"R .ENDC .MEXITA .ENDC .IF IDN <$$$$$X>, $$$FLG = $$$FLG!1 .MACRO $$$EXT .WORD 0'TYPE. .ENDM $$$EXTR .MACRO $$$TYP .BYTE $SUBXPR .ENDM $$$TYPD .MEXITR .ENDC .MACRO $$$TYP .BYTE TYPEE .ENDM $$$TYP$ .MEXIT$ .ENDM .PSECT. .ENDM TRAN$$xY .MACRO MTRAN$" .PSECT $STATE .IF EQ $$$FLG+1 $$$FLG = 03 .MEXITS .ENDC $$$TYPD .BYTE $$$FLGR .IF NE $$$FLG&1 $$$EXTS .ENDC .IF NE $$$FLG&2 $$$ACT1 .ENDC .IF NE $$$FLG&10O $$$BITN .ENDC .IF NE $$$FLG&4 .WORD $$$STA. .IFF< .IF EQ $$$FLG&200 .ERROR "BAD DEFAULT TRANSITION" .ENDC .ENDC $$$FLG = 0. .ENDM MTRAN$TY .MACRO TTSYM$ $$$GBL .MCALL DEFIN$ ...GBL=0Y .IF IDN,<$$$GBL>,. ...GBL=1N .ENDC DEFIN$ TC.WID,1. DEFIN$ TC.LPP,2.M DEFIN$ TC.RSP,3.C DEFIN$ TC.XSP,4.$ DEFIN$ TC.STB,5.3 DEFIN$ TC.ISL,6. DEFIN$ TC.RAT,7.$ DEFIN$ TC.TTP,8.G DEFIN$ TC.SCR,9.C DEFIN$ TC.SCP,10. DEFIN$ TC.HFL,11. DEFIN$ TC.VFL,12. DEFIN$ TC.NL ,13. DEFIN$ TC.SFF,14. DEFIN$ TC.HFF,15. DEFIN$ TC.LVF,16. DEFIN$ TC.HHT,17. DEFIN$ TC.NST,18. DEFIN$ TC.BSP,19. DEFIN$ TC.ACR,20. DEFIN$ TC.SMR,21. DEFIN$ TC.SMP,22. DEFIN$ TC.SMO,23. DEFIN00" ! "!TADATADATADATADATADATA$ TC.CCF,24. DEFIN$ TC.ALT,25. DEFIN$ TC.IMG,26. DEFIN$ TC.NKB,27. DEFIN$ TC.NPR,28. DEFIN$ TC.ESQ,29. DEFIN$ TC.LCP,30. DEFIN$ TC.PAR,31. DEFIN$ TC.EPA,32. DEFIN$ TC.DLU,33. DEFIN$ TC.BLK,34. DEFIN$ TC.FRM,35. DEFIN$ TC.HLD,36. DEFIN$ TC.TAP,37. DEFIN$ TC.CEQ,38. DEFIN$ TC.NEC,39. DEFIN$ TC.SLV,40. DEFIN$ TC.PRI,41. DEFIN$ TC.UC0,42. DEFIN$ TC.UC1,43. DEFIN$ TC.UC2,44. DEFIN$ TC.UC3,45. DEFIN$ TC.UC4,46. DEFIN$ TC.UC5,47. DEFIN$ TC.UC6,48. DEFIN$ TC.UC7,49. DEFIN$ TC.UC8,50. DEFIN$ TC.UC9,51. DEFIN$ TC.FDX,52. DEFIN$ TC.BIN,53. DEFIN$ TC.REM,54. DEFIN$ TC.8BC,55. DEFIN$ TC.P8B,56. DEFIN$ TC.TBF,57. DEFIN$ TC.CTS,58. DEFIN$ TC.ANS,59. DEFIN$ TC.CSQ,60. DEFIN$ TC.CTC,61. DEFIN$ TC.ASP,62. DEFIN$ TC.ABD,63. DEFIN$ TC.TBS,64. DEFIN$ TC.TBM,65. DEFIN$ TC.NBR,66. DEFIN$ TC.ACD,67. DEFIN$ TC.ARC,68. DEFIN$ TC.TRN,69. DEFIN$ TC.XMM,70. DEFIN$ TC.FSZ,71. DEFIN$ XT.DLM,72. DEFIN$ XT.DMD,73. DEFIN$ XT.DTT,74. DEFIN$ XT.DIT,75. DEFIN$ XT.MTP,76. DEFIN$ XT.SDE,77. DEFIN$ XT.TAK,78. DEFIN$ XT.GOV,79. DEFIN$ XT.TSP,80. DEFIN$ XT.TTO,81. DEFIN$ TC.ANI,82. DEFIN$ TC.AVO,83. DEFIN$ TC.DEC,84. DEFIN$ TC.EDT,85. DEFIN$ TC.RGS,86. DEFIN$ TC.INT,87. DEFIN$ TC.TLC,88. DEFIN$ TC.SFC,89. DEFIN$ TC.HSY,90. DEFIN$ XT.TIM,91. DEFIN$ XT.CPD,92. DEFIN$ XT.VER,93. DEFIN$ XT.REV,94. DEFIN$ XT.THS,95. DEFIN$ TC.OOB,96. DEFIN$ TC.ICS,97. DEFIN$ TC.SSC,98. DEFIN$ TC.TMM,99. DEFIN$ TC.TSY,100.  DEFIN$ TC.MHU,101.T DEFIN$ TC.PTH,102.S DEFIN$ TC.PPT,103.K DEFIN$ TC.SXL,104.7 DEFIN$ TC.CLC,105.. DEFIN$ TC.CLN,106. DEFIN$ TC.QDP,107.D DEFIN$ TC.MAP,108.F DEFIN$ TC.MAX,109.N DEFIN$ SE.ICN,1.N DEFIN$ SE.FIX,2.N DEFIN$ SE.BIN,3.N DEFIN$ SE.VAL,4.N DEFIN$ SE.TER,5.N DEFIN$ SE.SPD,6.N DEFIN$ SE.SPL,7.N DEFIN$ SE.PAR,8.N DEFIN$ SE.LPR,9.N DEFIN$ SE.NSC,10. DEFIN$ SE.UPN,11. DEFIN$ SE.NIH,12.; DEFIN$ SE.ATA,13.  DEFIN$ SE.NAT,14. DEFIN$ SE.IAA,15. DEFIN$ SF.SSC, 2400!020 DEFIN$ SF.SMC, 2400!040 DEFIN$ SF.RDF, 2400!060 DEFIN$ SF.STT, 2400!100 DEFIN$ SF.STS, 2400!120 DEFIN$ SF.GSC, 2400!140 DEFIN$ SF.GMC, 2400!160 DEFIN$ SF.GAC, 2400!200 DEFIN$ SF.SAC, 2400!220 DEFIN$ SF.DEF, 010F DEFIN$ S.0 ,1.F DEFIN$ S.50 ,2.F DEFIN$ S.75 ,3.F DEFIN$ S.100 ,4.F DEFIN$ S.110 ,5.F DEFIN$ S.134 ,6.F DEFIN$ S.150 ,7.F DEFIN$ S.200 ,8.F DEFIN$ S.300 ,9.F DEFIN$ S.600 ,10. DEFIN$ S.1200,11. DEFIN$ S.1800,12. DEFIN$ S.2000,13. DEFIN$ S.2400,14. DEFIN$ S.3600,15. DEFIN$ S.4800,16. DEFIN$ S.7200,17. DEFIN$ S.9600,18. DEFIN$ S.EXTA,19. DEFIN$ S.EXTB,20. DEFIN$ S.19.2,21. DEFIN$ S.38.4,22. DEFIN$ T.UNK0,0.0 DEFIN$ T.AS33,1.C DEFIN$ T.KS33,2.  DEFIN$ T.AS35,3.N DEFIN$ T.L30S,4.N DEFIN$ T.L30P,5.N DEFIN$ T.LA36,6.N DEFIN$ T.VT05,7.N DEFIN$ T.VT50,8.N DEFIN$ T.VT52,9.N DEFIN$ T.VT55,10. DEFIN$ T.VT61,11. DEFIN$ T.L180,12. DEFIN$ T.V100,13. DEFIN$ T.L120,14. DEFIN$ T.SCR0,15. DEFIN$ T.LA12,16. DEFIN$ T.L100,17. DEFIN$ T.LA34,18. DEFIN$ T.LA38,19. DEFIN$ T.V101,20. DEFIN$ T.V102,21. DEFIN$ T.V105,22. DEFIN$ T.V125,23. DEFIN$ T.V131,24. DEFIN$ T.V132,25. DEFIN$ T.LA50,26. DEFIN$ T.LQP1,27. DEFIN$ T.LQP2,28. DEFIN$ T.BMP1,29. DEFIN$ T.V2XX,30. DEFIN$ T.LN03,31. DEFIN$ T.DTC1,32. DEFIN$ T.L210,33. DEFIN$ T.LQP3,34. DEFIN$ T.LA75,35. DEFIN$ T.L2XX,36. DEFIN$ T.LCG1,37. DEFIN$ T.USR0,128.  DEFIN$ T.USR1,T.USR0+10 DEFIN$ T.USR2,T.USR1+1 DEFIN$ T.USR3,T.USR2+1N DEFIN$ T.USR4,T.USR3+1A DEFIN$ XT.DIA,0 DEFIN$ XT.DTM,1 DEFIN$ XT.D20,2 DEFIN$ XT.OHS,3 DEFIN$ XT.VOI,0 DEFIN$ XT.SER,1 DEFIN$ XT.ENC,2 DEFIN$ XT.DTD,3 DEFIN$ XTM.NO,-12 DEFIN$ XTM.FS,0 DEFIN$ XTM.PS,1 DEFIN$ XTM.21,5 DEFIN$ XTM.M1,6 DEFIN$ XTM.M2,7 DEFIN$ XTM.US,10N DEFIN$ XTU.UI,0 DEFIN$ XTU.CD,2 DEFIN$ XTU.CL,4 DEFIN$ XTU.DR,6 DEFIN$ XTU.OF,8.. DEFIN$ XTU.ON,10. DEFIN$ XTU.RI,12. DEFIN$ XTU.TU,14. DEFIN$ XTU.TD,16. DEFIN$ XTC.DT,1 DEFIN$ XTC.EN00",:;r,2 DEFIN$ XTC.SE,4 DEFIN$ XTC.VO,10N DEFIN$ F1.ACR,000001D DEFIN$ F1.BTW,000002 DEFIN$ F1.BUF,000004N DEFIN$ F1.UIA,000010S DEFIN$ F1.CCO,000020 DEFIN$ F1.ESQ,000040N DEFIN$ F1.HLD,000100T DEFIN$ F1.LWC,0002001 DEFIN$ F1.RNE,000400F DEFIN$ F1.RPR,001000T DEFIN$ F1.RST,0020001 DEFIN$ F1.RUB,004000D DEFIN$ F1.SYN,010000  DEFIN$ F1.TRW,020000R DEFIN$ F1.UTB,040000 DEFIN$ F1.VBF,100000F DEFIN$ F2.SCH,000001  DEFIN$ F2.GCH,000002. DEFIN$ F2.DCH,0000041 DEFIN$ F2.DKL,000010F DEFIN$ F2.ALT,000020T DEFIN$ F2.SFF,000040R DEFIN$ F2.CUP,000100W DEFIN$ F2.FDX,000200F DEFIN$ F2.EIO,000400A DEFIN$ F2.NCT,001000O DEFIN$ TF.RST,001 DEFIN$ TF.BIN,002 DEFIN$ TF.RAL,010 DEFIN$ TF.RNE,020 DEFIN$ TF.XOF,100 DEFIN$ TF.TMO,200 DEFIN$ TF.RCU,001 DEFIN$ TF.WAL,010 DEFIN$ TF.WMS,020 DEFIN$ TF.CCO,040 DEFIN$ TF.WBT,100 DEFIN$ TF.SYN,200 DEFIN$ TF.XCC,001 DEFIN$ TF.NOT,002 DEFIN$ TF.AST,010 DEFIN$ TF.ESQ,020 DEFIN$ TF.UCH,TF.NOT1 DEFIN$ TF.WLB,001 DEFIN$ TF.RLB,002 DEFIN$ TF.WIR,200 DEFIN$ TF.RTT,400 DEFIN$ TF.RLU,1000F DEFIN$ TF.RPR,2000D DEFIN$ TF.RPT,4000 DEFIN$ TF.RES,10000 DEFIN$ TF.RNF,20000 DEFIN$ TF.TNE,40000 DEFIN$ TF.RDI,100000N .MACRO TTSYM$ NULL  .ENDM .ENDM TTSYM$TY .MACRO EXTM$C INC,MASK,CS,ERR .MCALL EXTM$,DIR$ .IF NDF $$$GLB .PSECT $DPB$.,D$$$=.N .IFTF EXTM$ INC,MASKX .IFT .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM EXTM$CEY .MACRO EXTM$S INC,MASK,ERR0 .MCALL MOV$,DIR$0 MOV$ MASK MOV$ INC MOV (PC)+,-(SP) .BYTE 89.,3 DIR$ ,ERR .ENDM EXTM$S0Y .MACRO EXTM$ INC,MASK .MCALL OFF$ .IF NDF $$$GLBF .BYTE 89.,3 .WORD INC .IF NB MASK .WORD MASKY .IFF  .WORD 0 .ENDC .ENDC .IF NDF E.XTIN .NLISTX OFF$C OFF$ E.XTIN,2 .LIST .ENDC .ENDM EXTM$Y .MACRO FHDOF$ GLOBALE .MCALL FHDO1$ ...GBL=0S .IF B,GLOBAL$ FHDO1$ DEF$L .IFFE .IF IDN,,. ...GBL=1S .ENDC FHDO1$ GLOBAL .ENDC .IF DIF,, .MACRO FHDOF$ ARG1Y .ENDM FHDOF$  .ENDC .ENDM FHDOF$Y .MACRO FHDO1$ OFFSET. .MCALL DEF$I,OFFSET,DEFIN$ DEF$I 0 OFFSET H.IDOF,1 OFFSET H.MPOF,1 OFFSET H.FNUM,2 OFFSET H.FSEQ,2 OFFSET H.FLEV,2 OFFSET H.FOWN OFFSET H.PROG,1 OFFSET H.PROJ,1 OFFSET H.FPRO,2 DEFIN$ FP.RDV,1 DEFIN$ FP.WRV,2 DEFIN$ FP.EXT,4 DEFIN$ FP.DEL,10F OFFSET H.FCHA OFFSET H.UCHA,1 DEFIN$ UC.CON,200 DEFIN$ UC.DLK,100 DEFIN$ UC.CNB,40L DEFIN$ UC.WCK,20D DEFIN$ UC.RCK,10 DEFIN$ UC.WBC,4 DEFIN$ UC.NIB,2 OFFSET H.SCHA,1 DEFIN$ SC.MDL,200 DEFIN$ SC.BAD,100 DEFIN$ SC.DIR,40  DEFIN$ SC.SPL,20 OFFSET H.UFAT,32. OFFSET S.HDHD DEF$I 0 OFFSET I.FNAM,6 OFFSET I.FTYP,2 OFFSET I.FVER,2 OFFSET I.RVNO,2 OFFSET I.RVDT,7 OFFSET I.RVTI,6 OFFSET I.CRDT,7 OFFSET I.CRTI,6 OFFSET I.EXDT,7 OFFSET ,1 OFFSET S.IDHD DEFIN$ I.DASZ,7 DEFIN$ I.TISZ,6 DEF$I 0 OFFSET M.ESQN,1 OFFSET M.ERVN,1 OFFSET M.EFNU,2 OFFSET M.EFSQ,2 OFFSET M.CTSZ,1 OFFSET M.LBSZ,1 OFFSET M.USE,1C OFFSET M.MAX,1. OFFSET M.RTRV OFFSET S.MPHD DEFIN$ H.CKSM,510.N .IF DIF,,L .MACRO FHDO1$ ARG13 .ENDM FHDO1$D .ENDC .ENDM FHDO1$.Y .MACRO HMBOF$ GLOBAL2 .MCALL HMBO1$ ...GBL=0 .IF B,GLOBALE HMBO1$ DEF$LF .IFFR .IF IDN,,F ...GBL=17 .ENDC HMBO1$ GLOBAL .ENDC .IF DIF,,I .MACRO HMBOF$ ARG1E .ENDM HMBOF$F .ENDC .ENDM HMBOF$.Y .MACRO HMBO1$ OFFSET1 .MCALL DEF$I,OFFSET,DEFIN$. DEF$I 0 OFFSET H.IBSZ,2 OFFSET H.IBLB,4 OFFSET H.FMAX,2 OFFSET H.SBCL,2 OFFSET H.DVTY,2 OFFSET H.VLEV,2 OFFSET H.VNAM,12. OFFSET ,4 OFFSET H.VOWN,2 OFFSET H.VPRO,2 OFFSET H.VCHA,2 DEFIN$ CH.SDI,400 OFFSET H.DFPR,2 OFFSET ,6 OFFSET H.WISZ,1 OFFSET H.FIEX,1 OFFSET H.LRUC,1 OFFSET H.REVD,7 OFFSET H.REVC,2 OFFSET ,2 OFFSET H.CHK1,2 OFFSET H.VDAT,14. OFFSET ,382.H OFFSET H.PKSR,4 OFFSET ,100""! "!TADATADATADATADATADATA2. OFFSET H.INDN,12. OFFSET H.INDO,12. OFFSET H.INDF,12. OFFSET ,2 OFFSET H.CHK2,2 .IF DIF,, .MACRO HMBO1$ ARG1F .ENDM HMBO1$O .ENDC .ENDM HMBO1$ Y .MACRO CSI$1 CSBLK,BUFF,LEN .GLOBL .CSI1F .MCALL CSI$,LDR0$ .IF NDF C.SIZEN CSI$I .ENDC LDR0$ CSBLK .IF NB  MOV BUFF,C.CMLD+2(R0) .ENDC .IF NB C MOV LEN,C.CMLD(R0) .ENDC JSR PC,.CSI1E .ENDMY .MACRO CSI$2 CSBLK,IO,SWTAB .GLOBL .CSI2K .MCALL CSI$,LDR0$ .IF NDF C.SIZE. CSI$E .ENDC LDR0$ CSBLK .IF NB  .IF IDN ,2 MOVB #CS.INP,(R0) .IFFN .IF IDN , MOVB #CS.OUT,(R0) .IFF.# .ERROR ;INCORRECT REQUEST TO .CSI2R .ENDC .ENDC .ENDC .IF NB . MOV SWTAB,C.SWAD(R0)N .ENDC JSR PC,.CSI2N .ENDMY# .MACRO CSI$4 CSBLK,IO,SWTAB,DSCBLKC .GLOBL .CSI4C .MCALL CSI$,LDR0$ .IF NDF C.SIZEP CSI$E .ENDC LDR0$ CSBLK .IF NB  .IF IDN ,. MOVB #CS.INP,(R0) .IFFL .IF IDN , MOVB #CS.OUT,(R0) .IFFK .ERROR  .ENDC .ENDC .ENDC .IF NB N MOV SWTAB,C.SWAD(R0)N .ENDC MOV R1,-(SP)C .IF NB  MOV DSCBLK,R1 .IFFQ CLR R1C .ENDC MOV R2,-(SP). MOV #.FSR5,R2 JSR PC,.CSI4T MOV (SP)+,R2 MOV (SP)+,R1, .ENDMVY, .MACRO CSI$SW SW,MK,MKW,CLR,NEGS,VALTAB,LNG .IF B,SWI .ERROR ;MISSING SWITCH NAME .IFFZ .EVEN .NCHR SIZ$$,SW$ .IF GT,SIZ$$-2I .IF B,LNG SIZ$$=2 .ENDC .ENDC CNT$$=0 .IRPC CHR$$$,SW CHR$$=''CHR$$$V CNT$$=CNT$$+1 .IF GE,>. .IF LE,>B CHR$$=CHR$$-^O40A .ENDC .ENDC .IF LE,CNT$$-SIZ$$N $$=0L .IF NB,LNGL .IF IDN,, .IF GT,CNT$$&1( .IF GE,CNT$$+1-SIZ$$J $$=^O200T .ENDC .IFF .IF LT,CNT$$-SIZ$$N $$=^O200 .ENDC .ENDC .IFFW .IF IDN,,T .IF EQ,CNT$$&1I .IF LT,CNT$$-SIZ$$I $$=^O200. .ENDC .ENDC .IFFZ- .ERROR ;ILLEGAL "LONG" OR "EXACT" SPECIFIER .ENDC .ENDC .ENDC .BYTE CHR$$!$$W .ENDC .ENDM .EVEN .ENDC .IF NB MK .WORD MK^ .IFF .WORD 0 .ENDC$$=0 .IF NB CLRR .IF IDN ,$$=1 .IFF$ .IF IDN , .IFFL .ERROR ;INVALID SET/CLEAR SPEC, .ENDC .ENDC .ENDC .WORD MKW+$$O$$=0 .IF NB NEGS .IF IDN ,$$=1 .IFF. .ERROR ;INVALID NEGATE SPEC .ENDC .ENDC .WORD VALTAB+$$ .ENDM4Y .MACRO CSI$ND .WORD 0 .ENDM$Y# .MACRO CSI$SV TYPE,ADDR,LEN,VALTAB. .IF NB VALTABVALTAB:$ .ENDC .IF NB TYPE .IF IDN ,K .BYTE 1 .IFFF .IF IDN , .BYTE 2 .IFFF .IF IDN , .BYTE 2 .IFF< .IF IDN ,  .BYTE 3 .IFFR .ERROR ;INVALID CONVERSION TYPE .ENDC .ENDC .ENDC .ENDC .IFFI .BYTE 1 .ENDC .IF NB LEN .BYTE LEN .IFFG .ERROR ;LENGTH MISSING .BYTE 0 .ENDC .IF NB ADDR .WORD ADDR. .IFFS .ERROR ;VALUE ADDRESS MISSING .WORD 0 .ENDC .ENDM|Y .MACRO LDR0$ ARG .IIF B,ARG,.MEXIT .NTYPE PAR$$$,ARG .IIF EQ,PAR$$$,.MEXIT MOV ARG,R0. .ENDMY .MACRO CSI$ GBL .IF IDN ,E.GLOBL C.TYPR,C.STAT,C.CMLD,C.DEVD,C.DIRD,C.FILD,C.SWAD,C.MKW1,C.MKW2OL.GLOBL C.SIZE,C.DSDS,CS.INP,CS.OUT,C.IDVL,C.IDVA,C.IDIL,C.IDIA,C.ODVL,C.EXPS7.GLOBL CS.NMF,CS.DIF,CS.DVF,CS.WLD,CS.MOR,CS.EQU,CS.LOG  .ENDC C.TYPR =0 C.STAT =1F C.CMLD =2. C.DEVD =6C.DIRD =^O<12>C.FILD =^O<16>C.SWAD =^O<22>C.MKW1 =^O<24>C.MKW2 =^O<26>C.IDVL =^O<30>C.IDVA =^O<32>C.IDIL =^O<34>C.IDIA =^O<36>C.ODVL =^O<40>C.EXPS =^O<60>RC.SIZE =^O<54>C.DSDS =C.DEVD CS.INP =1G CS.OUT =2N CS.NMF =1$ CS.DIF =2C CS.DVF =4TCS.WLD =^O<10>CS.MOR =^O<20>CS.EQU =^O<40>CS.LOG =^O<100>, .MACRO CSI$ X .ENDM CSI$. .ENDM CSI$.LY@ .MACRO GCMLB$ MAXD,PRMPT,UBUF,LUN,PDL,SIZE=80.,?PDL1,?DFNB,?BUF1 .MCALL FDBDF$,FDAT$A,FDOP$A,NMBLK$,FDBF$A,CBYTE$. FDBDF$1 FDAT$A 2= .IF NB = FDOP$A LUN,,DFNB2 .IFFK FDOP$A 1,,DFNBL .ENDC FDB00"$,:;rF$A ,,13% CBYTE$ ,F.RCTLD .MCALL GCMLD$ GCMLD$0 .BYTE 0 .IF LE " .BYTE GE.COM!GE.IND!GE.CLO!GE.SIZ .IFFS) .BYTE GE.COM!GE.IND!GE.CLO!GE.CON!GE.SIZR .ENDC .BLKW 4 .BYTE -1,MAXD .IF B .WORD PDL1. .IFFI .WORD PDL .ENDC .IF NB .WORD UBUF$ .IFFR .WORD BUF .ENDC$$$=.P .ASCII <15><12> .IF NB $ .ASCII /PRMPT>/ .IFFY .ASCII / >/ .ENDC.=$$$+6NDFNB: NMBLK$ CMI,CMD .WORD SIZEKG.LPDL=*<6+<5*2>> .IF B PDL1: .BLKB G.LPDL .ENDC .IF B CBUF: .BLKB SIZE+2. .ENDC .ENDM GCMLB$Z Y .MACRO GCML$ NAME,ADPR,LNPR .MCALL GCMLD$,LDR0$ GCMLD$ DEF$LN LDR0$ NAMEN .IF NB  MOV LNPR,G.PSDS(R0) .IIF B , .ERROR& .IIF NB , MOV ADPR,G.PSDS+2(R0) .ENDC .IIF B , CLR G.PSDS(R0) .GLOBL .GCML1 JSR PC,.GCML1 .ENDM GCML$rY .MACRO RCML$ NAME .MCALL LDR0$$ LDR0$ NAMEM .GLOBL .GCML2 JSR PC,.GCML2 .ENDM RCML$pY .MACRO CCML$ BLK. .MCALL LDR0$. LDR0$ BLK .GLOBL .GCML3 JSR PC,.GCML3 .ENDM CCML$Y .MACRO GCMLD$ GBL .IF NDF S.FDB .MCALL FDBSZ$ FDBSZ$E .ENDC .MCALL GCML$D GCML$D GBLM .MACRO GCMLD$ X .ENDM .ENDM GCMLD$RNY .MACRO GCML$D GBL .IF IDN ,7 .GLOBL G.ERR,G.MODE,G.PSDS,G.CMLD,G.RBUF,G.DPRM,G.SIZEM0 .GLOBL GE.COM,GE.IND,GE.CLO,GE.LC,GE.CON,GE.SIZ1 .GLOBL GE.IOR,GE.OPR,GE.BIF,GE.MDE,GE.EOF,GE.RBGG .ENDC G.ERR = S.FDBG.MODE = G.ERR+1G.PSDS = G.ERR+2G.CMLD = G.ERR+6G.RBUF = G.ERR+14. G.ISIZ = 16.G.DPRM = G.ERR+G.ISIZG.SIZE = G.DPRM+6+S.FNBL GE.COM = 1 GE.IND = 2 GE.CLO = 4 GE.LC = 10 GE.CON = 20C GE.SIZ = 40G GE.IOR = -1. GE.OPR = -2X GE.BIF = -3N GE.MDE = -4 GE.EOF = -10. GE.RBG = -40.G .MACRO GCML$D X .ENDM .ENDM GCML$D,Y. .MACRO PRINT$ FDB,ERR,?LBL,A,B,C,D,E,F,?LBL2 .MCALL CALL,CLOSE$,LDR0$,GLUN$S% LDR0$ FDB ;LOAD FDB ADDRESS INTO R0. TST F.BDB(R0) BEQ LBL MOV R1,-(SP)E MOV R2,-(SP)G MOV R3,-(SP)=/ MOV SP,R1 ;SAVE POINTER TO END OF SEND BUFFERM/ SUB #<8.*2>,SP ;ALLOCATE A GET LUN INFO BUFFERM MOV SP,R2 MOVB F.LUN(R0),R3 GLUN$S R3,R2N% MOV G.LUCW(R2),R3 ;SAVE CHAR. WORD 1O MOV R0,R2 ;COPY FDB ADDRESS=4 ADD #F.FNB+N.DID+6,R2 ;POINT TO END OF DIRECTORY ID$ MOV -(R2),-(R1) ; PUSH DIRECTORY ID MOV -(R2),-(R1) ; MOV -(R2),-(R1) ;/ ADD #N.FID+6-N.DID,R2 ;POINT TO END OF FILE IDL MOV -(R2),-(R1) ;PUSH FILE ID MOV -(R2),-(R1) ; MOV -(R2),-(R1) ;' CLRB -(R1) ;CLEAR LUN INFO FLAGS BYTEM@ ADD #N.FVER+2-N.FID,R2 ;POINT TO END OF FILENAME, TYPE, VERSION* MOV -(R2),-(SP) ;PUSH FILE VERSION NUMBER MOV -(R2),-(SP) ;PUSH FILE TYPE MOV -(R2),-(SP) ;PUSH FILENAMEW MOV -(R2),-(SP) ; MOV -(R2),-(SP) ;' MOV SP,R1 ;SET POINTER TO SEND BUFFERI CLOSE$ R0 ;CLOSE FILER BCS LBL2I: BIT #FD.REC!FD.OSP,R3 ;RECORD ORIENTED OR SPOOLED DEVICE? BNE LBL2 ;IF NE YESO MOV R0,R2 ;SAVE FDB ADDRESSR# MOV #^RPRT,R0 ;GET "PRT" IN RAD-50, CALL $DSPAT ;SEND DATA TO ...PRT OR PRT...$ MOV R0,F.ERR(R2) ;GET RETURN STATUS MOV R2,R0 ;RESTORE FDB ADDRESSLBL2: ROR R1 ;SAVE CARRY; ADD #<13.*2>,SP ;CLEAN STACK- ROL R1 ;RESTORE CARRYE MOV (SP)+,R3S MOV (SP)+,R2M MOV (SP)+,R1- .IF NB ERR- BCC LBL CALL ERR, .ENDCLBL: .ENDM PRINT$EY .MACRO COMDF$ DEF .NLIST# .IF IDN ,8.GLOBL B.OT,B.UN,B.RC,B.RN,B.RP,B.RU,B.NA,B.UA,B.MN,B.MX.GLOBL CT.IN,CT.CN,LB.N,LB.E.GLOBL NT.IN,NT.NS.GLOBL CR.UR,CR.NR,CR.MXD.GLOBL CR.N0,CR.N1,CR.N2,CR.N3,CR.N4,CR.N5,CR.N6,CR.N9,CR.N10,CR.N11.GLOBL CR.N7,CR.N8.GLOBL CR.DI,CR.DT,CR.DA".GLOBL IA.ISM,IA.ABO,IA.DIS,IA.NFW.GLOBL CN.IN,CN.OU,CN.UT,CN.NTB.GLOBL OB.TA,OB.FS,OB.SQ,OB.BO,OB.TC,OB.RD,OB.RA,OB.ND,OB.DD,OB.BM<.GLOBL OB.TH,OB.TB,OB.TI,OB.CR,OB.LP,OB.PR,OB.PP,OB.PL,OB.MT*.GLOBL OB.DT,OB.CS,OB.CP,OB.FH,OB.MH,OB.FL .ENDC B.OT = 0> B.UN = 1O B.RC = B.OT+2 B.RN = B.RC+2 B.RP = B.RN+4 B.RU = B.RP+4 B.NA = B.RU+4 B.UA = B.NA+2 B.MN = B.UA B.MX = B.MN+100",! "!TADATADATADATADATADATA0O NT.IN = 101 NT.NS = 1 CR.UR = 2 CR.NR = 3 CR.MX = 6 CR.N0 = 0. CR.N1 = 1O CR.N2 = 2T CR.N3 = 3L CR.N4 = 4O CR.N5 = 5W CR.N6 = 6N CR.N7 = 7C CR.N8 = 8. CR.N9 = 11 CR.N10 = 12O CR.N11 = 13D CR.DI = 4 CR.DT = 5 CR.DA = 6 LB.N=0O LB.E=2R CT.IN = 0 CT.CN = 1 IA.ABO = -5 IA.DIS = -7 IA.NFW = 177673 IA.ISM = 1 CN.IN = 1 CN.OU = 2 CN.UT = 4 CN.NT = 10 OB.TA = 0 OB.FS = 1 OB.SQ = 2 OB.BO = 3 OB.TC = 4 OB.RD = 5 OB.RA = 6 OB.ND = 7 OB.DD = 10S OB.BM = 11= OB.TH = 203 OB.TB = 21 OB.TI = 22 OB.CR = 23 OB.LP = 24 OB.PR = 25 OB.PP = 26 OB.PL = 27 OB.MT = 30 OB.DT = 31 OB.CS = 32 OB.CP = 33 OB.FH = 34O OB.MH = 351 OB.FL = 364 .MACRO COMDF$ A .ENDM .LIST .ENDMnY .MACRO EGCMI$ .MACRO GCMLD$ GLOB .ASECT  .=0G.MODE: .BLKW 2C GE.COM = 1. GE.IND = 2T GE.CLO = 4= GE.LC = 10 GE.CON = 20 GE.XXX = 40 GE.MUL = 100. GE.LIB = 200= GE.MCR = 400 GE.IEF = 1000 GE.RWD = 2000 GE.FOP = 4000 GE.RPR = 10000 GE.SDE = 20000O GE.SER = 40000P GE.SLB = 100000 ; G2.XXX = 1G.IMPS: .BLKB 1G.OVBC: .BLKB 1.G.FILE: .BLKW 1=G.ERR: .BLKB 1 GE.IOR = -1 GE.OPR = -2 GE.BIF = -3 GE.MDE = -4 GE.CMD = -5 GE.VRS = -6 GE.EOF = -10. GE.RBG = -40.G.CDEP: .BLKB 1LG.FUNC: .BLKB 1 G.MAXD: .BLKB 1BG.TERM: .BLKB 1 G.TIOS: .BLKB 1G.TIOP: .BLKW 1.G.PRMP: .BLKW 2 G.CMLD: .BLKW 20G.FRAG: .BLKW 2G.BUFF: .BLKW 2GG.DFPR: .BLKB 6.G.CSIB: .BLKW 1WG.PPTR: .BLKW 1 G.SWIT: .BLKW 1 G.LBMN: .BLKB 6 G.FQFN: .BLKW 1 G.DDIR: .BLKW 2 G.DEFT: .WORD ^RCMDG.ISIZ:B .ASECT. .=0G.SUSR: .BLKW 1 G.SDID: .BLKW 5.G.SVER: .BLKW 1 G.STYP: .BLKW 1G.SNAM: .BLKW 3.G.SFID: .BLKW 3 G.SRAT: .BLKB 16.G.SPOS: .BLKW 3GG.SBST: .BLKW 1DG.SRWP: .BLKW 3UG.PLFS:  .PSECTD .MACRO GCMLD$ X .ENDM .ENDMN .MACRO ECMLB$ FILE,LUN=1,MAXD=3,PRMP=< >,BFAD,BFSZ=80.,PDL,SWIT,?GF,?GB,?GS# .MCALL GCMLD$,CWORD$,CBYTE$,CSTRG$  .MCALL CSI$SW,CSI$SV,CSI$ND .IIF NDF FCS$$ FCS$$=1  GCMLD$ ...PC1=.. .BLKB G.ISIZ CBYTE$ ,G.IMPS , CWORD$ ,G.MODE CBYTE$ ,G.MAXDK CBYTE$ <15>,G.DFPR  CBYTE$ <12>,G.DFPR+1N CSTRG$ ,G.DFPR+2,3  CBYTE$ <-1>,G.CDEP CBYTE$ ,G.TIOST CWORD$ <0>,G.TIOP CWORD$ <0>,G.FQFN CBYTE$ <0>,G.OVBC .IF B  ...TMP = <*G.PLFS>,...PDL: .BLKB ...TMP CWORD$ <...PDL+...TMP>,G.PPTR .IFF. .ENDC .IF B TGB: .BLKB BFSZ+2 CWORD$ ,G.BUFF+2 .IFFD CWORD$ ,G.BUFF+2  .ENDC CWORD$ ,G.BUFF+0Y .IF B I...SWI: GCMSW$ ...PC1,GS CWORD$ <...SWI>,G.SWIT .IFF  CWORD$ ,G.SWIT  .ENDC .IF NB  CWORD$ ,G.FILEP .IFFD CWORD$ ,G.FILE> .IF DF FCS$$E* .MCALL FDBDF$,FDAT$A,FDOP$A,NMBLK$,FDBF$A GF: FDBDF$ FDAT$A 2  FDOP$A LUN,,...FNAD FDBF$A ,,1 % CBYTE$ ,F.RCTLP...FNA: NMBLK$ CMI,CMD .IFFR .IF DF RMS$$C .MCALL FAB$B,RAB$B,NAM$B GF: .WORD 1,...RAB .WORD 1,...FABD ...RAB: RAB$B> R$FAB ...FABN R$RAC RB$SEQS RAB$E ...FAB: FAB$BW F$DNA ...DNA+3S F$DNS 7 F$FNA ...FNA. F$FAC FB$GET. F$LCH LUN F$NAM ...NAM F$ORG FB$SEQN F$RAT 0 F$RFM FB$VARG FAB$E ...NAM: NAM$B N$ESS 34. NAM$E...DNA: .ASCII /SY:CMI.CMD/$...FNA: .ASCII /CMI/ .BLKB 29. .IFF$ .ERRORO .ENDC .ENDC .ENDC .ENDM6 .MACRO GCMLB$ MAXD=1,PRMP=< >,UBUF,LUN,PDL,SIZE=80. .MCALL ECMLB$$ ECMLB$ ,LUN,MAXD,PRMP,UBUF,SIZE,PDL .ENDM .MACRO GCMSW$ GCMB,?VAL .MCALL CSI$SW,CSI$SV,CSI$ND CSI$SW LB,GE.SLB,,SET,,VALR CSI$SW ER,GE.SER,,SET,NEG CSI$SW DE,GE.SDE,,CLEAR,NEG CSI$NDFVAL: CSI$SV ASCII,GCMB+G.LBMN,6. CSI$NDF .ENDM .MACRO GCML$ GCMB,PRAD,PRLN .MCALL GCMLD$,LDR0$ GCMLD$ DEF$LN LDR0$ GCMB  CLRB G.FUNC(R0) .IF NB  MOV PRLN,G.PRMP(R0) .IF B O .ERROR .IFF MOV PRAD,G.PRMP+2(R0) .ENDC .IFFR CLR G.PRMP(R0), .ENDC .GLOBL $GCMLC JSR PC,$GCMLL .ENDM .MACRO RCML$ 00"4,:;rGCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$LC LDR0$ GCMBI MOVB #1,G.FUNC(R0)B .GLOBL $GCMLA JSR PC,$GCMLG .ENDM .MACRO CCML$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$LS LDR0$ GCMBG MOVB #2,G.FUNC(R0). .GLOBL $GCMLC JSR PC,$GCMLP .ENDM .MACRO MCML$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L. LDR0$ GCMBF MOVB #3,G.FUNC(R0), .GLOBL $GCMLF JSR PC,$GCMLR .ENDM .MACRO FCML$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L( LDR0$ GCMB MOVB #4,G.FUNC(R0)P .GLOBL $GCMLM JSR PC,$GCML  .ENDM .MACRO LCML$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L1 LDR0$ GCMB MOVB #5,G.FUNC(R0)P .GLOBL $GCMLM JSR PC,$GCML  .ENDM .MACRO ECML$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L2 LDR0$ GCMB MOVB #6,G.FUNC(R0)P .GLOBL $GCMLM JSR PC,$GCML  .ENDM .MACRO DCML$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L3 LDR0$ GCMB MOVB #7,G.FUNC(R0)P .GLOBL $GCMLM JSR PC,$GCML  .ENDM .MACRO GCMM$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L4 LDR0$ GCMB MOV G.FILE(R0),R0 .GLOBL .MARKN JSR PC,.MARKL .ENDM .MACRO GCMP$ GCMB .MCALL GCMLD$,LDR0$ GCMLD$ DEF$L LDR0$ GCMBP MOV G.FILE(R0),R0 .GLOBL .POINT JSR PC,.POINT .ENDM, .MACRO CMSET$ GCMB,TSUB,TVFC,FQFN,TTMO,OVBC" .MCALL LDR0$,CMOV$B,CMOV$W,GCMLD$ GCMLD$ DEF$LP LDR0$ GCMBN CMOV$B TSUB,G.TIOSB CMOV$B TVFC,G.TIOP+1 CMOV$B TTMO,G.TIOP+0G CMOV$W FQFN,G.FQFN( CMOV$B OVBC,G.OVBC .ENDM+ .MACRO CMGET$ GCMB,TERM,FILE,FQFN,OVBC,ERRC" .MCALL LDR0$,CGET$B,CGET$W,GCMLD$ GCMLD$ DEF$LL LDR0$ GCMBL CGET$B G.TERM,TERMM CGET$W G.FILE,FILE  CGET$B G.ERR,ERR  CGET$W G.FQFN,FQFN  CGET$B G.OVBC,OVBC .ENDM .MACRO EGCMI$ .ENDM .ENDMVY .MACRO .PICOD NAME=PIC$IT .PSECT NAME RO,I,LCL,REL,CON0 .ENDMVY .MACRO .PCODE NAME=PUR$I .PSECT NAME RO,I,LCL,REL,CONV .ENDMVY .MACRO .IDATA NAME=IMP$DF .PSECT NAME RW,D,LCL,REL,CONN .ENDMVY .MACRO .PDATA NAME=PUR$DC .PSECT NAME RO,D,LCL,REL,CON .ENDMVY .MACRO .ODATA NAME=IMP$DO .PSECT NAME RW,D,LCL,REL,OVRR .ENDM0Y< .MACRO HLPDF$ FILLUN,TILUN,EFN,NAME,FDBIN,DSP,MODULE,FDBOUT$HFDB:: .WORD FDBIN .IF NB FDBOUT .WORD FDBOUTS .IFFE .WORD 0 .ENDC$HLUN1 == FILLUN$HLUN2 == TILUN $HEFN == EFN$HDSP:: .WORD DSPR$HMOD:: .RAD50 /MODULE/$HNAME::.ASCII /NAME/R .EVEN .ENDM HLPDF$.`Y! .MACRO OVAST$ SENSE,?LABL,?LABL2 MOV @#.NOVPT,-(SP)$ BEQ LABL  ADD #N.FAST,(SP) .IF IDN , BICB #^O200,@(SP)+M .IFF. .IF IDN , BISB #^O200,@(SP)+ .IFF.0 .ERROR ; PARAMETER MUST BE "ALLOW" OR "INHIBIT" .ENDC .ENDC BR LABL2ILABL:F INC (SP)+LABL2: .ENDM OVAST$Y .MACRO CSM$ SUPVR .IF IDN <(SP)+>, .WORD 007026R .IFF MOV SUPVR,-(SP) .WORD 007026: .ENDC .ENDM CSM$N Y .MACRO FEADF$,L,B .MCALL DEFIN$ .IF NB L'BL ...GBL=1  .IFFP ...GBL=0B .ENDC DEFIN$ FE$EXT,1 DEFIN$ FE$MUP,2 DEFIN$ FE$EXV,3 DEFIN$ FE$DRV,4 DEFIN$ FE$PLA,5 DEFIN$ FE$CAL,6 DEFIN$ FE$PKT,7 DEFIN$ FE$EXP,8.O DEFIN$ FE$LSI,9.B DEFIN$ FE$OFF,10. DEFIN$ FE$FDT,11. DEFIN$ FE$X25,12. DEFIN$ FE$DYM,13. DEFIN$ FE$CEX,14. DEFIN$ FE$MXT,15. DEFIN$ FE$NLG,16. DEFIN$ FE$DAS,17. DEFIN$ FE$LIB,18. DEFIN$ FE$MP,19.) DEFIN$ FE$EVT,20. DEFIN$ FE$ACN,21. DEFIN$ FE$SDW,22. DEFIN$ FE$POL,23. DEFIN$ FE$WND,24. DEFIN$ FE$DPR,25. DEFIN$ FE$IRR,26. DEFIN$ FE$GGF,27. DEFIN$ FE$RAS,28. DEFIN$ FE$AHR,29. DEFIN$ FE$RBN,30. DEFIN$ FE$SWP,31. DEFIN$ FE$STP,32. DEFIN$ FE$CRA,33. DEFIN$ FE$XCR,34. DEFIN$ FE$EIS,35. DEFIN$ FE$STM,36. DEFIN$ FE$UDS,37. DEFIN$ FE$PRO,38. DEFIN$ FE$XHR,39. DEFIN$ FE$AST,40. DEFIN$ FE$11S,41. DEFIN$ FE$CLI,42. DEFIN$ FE$TCM,43. DEFIN$ FE$PMN,44. DEFIN$ FE$WAT,45. DEFIN$ FE$RLK,46. DEFIN$ FE$SHF,47. DEFIN$ FE$CXD,49. DEFIN$ FE$XT,50.N DEFIN$ FE$ERL,51. DEFIN$ FE$PTY,52. DEFIN$ FE$DVN,53. DEFIN$ FE$LCD,54. DEFIN$ FE$NIM,55. DEFIN$ FE00"<! "!TADATADATADATADATADATA$CHE,56. DEFIN$ FE$LOG,57. DEFIN$ FE$NAM,58. DEFIN$ FE$FMP,59. DEFIN$ FE$DCL,60. DEFIN$ FE$DDS,61. DEFIN$ FE$ACD,62. DEFIN$ FE$NCT,63. DEFIN$ FE$LSD,64. DEFIN$ FE$PC3,65. DEFIN$ FE$DFB,66. DEFIN$ FE$RTB,67. DEFIN$ FE$ODB,68. DEFIN$ FE$XDJ,69. DEFIN$ FE$NSY,70. DEFIN$ FE$NCO,71. DEFIN$ FE$RTK,72. DEFIN$ FE$RDR,73. DEFIN$ FE$RLG,74. DEFIN$ FE$VTL,75. DEFIN$ HF$UBM,-1. DEFIN$ HF$EIS,-2. DEFIN$ HF$QB,-3.N DEFIN$ HF$DSP,-4. DEFIN$ HF$SWR,-5. DEFIN$ HF$KXJ,-6. DEFIN$ HF$RMT,-7. DEFIN$ HF$CIS,-8. DEFIN$ HF$FPP,-16.  DEFIN$ HF$NVR,-17.E DEFIN$ HF$INV,-18.D DEFIN$ HF$CLK,-19.D DEFIN$ HF$ITF,-20.6 DEFIN$ HF$PRO,-21.. DEFIN$ HF$BRG,-32. DEFIN$ T2$WFR,1 DEFIN$ T2$WFA,2 DEFIN$ T2$SPN,3 DEFIN$ T2$SPA,4 DEFIN$ T2$STP,5 DEFIN$ T2$STA,6 DEFIN$ T2$ABO,7 DEFIN$ T2$AFF,9.N DEFIN$ T2$SIO,10. DEFIN$ T2$SEF,12. DEFIN$ T2$REX,13. DEFIN$ T2$CHK,14. DEFIN$ T2$DST,15. DEFIN$ T2$AST,16. DEFIN$ T3$GFL,17. DEFIN$ T3$SWS,18. DEFIN$ T3$CMD,19. DEFIN$ T3$MPC,20. DEFIN$ T3$NET,21. DEFIN$ T3$ROV,22. DEFIN$ T3$CAL,23. DEFIN$ T3$NSD,24. DEFIN$ T3$RST,25. DEFIN$ T3$CLI,26. DEFIN$ T3$SLV,27. DEFIN$ T3$MCR,28. DEFIN$ T3$PRV,29. DEFIN$ T3$REM,30. DEFIN$ T3$PMD,31. DEFIN$ T3$ACP,32. DEFIN$ T4$SNC,33. DEFIN$ T4$DSP,34. DEFIN$ T4$PRV,35. DEFIN$ T4$PRO,36. DEFIN$ T4$LDD,37. DEFIN$ T4$MUT,38. DEFIN$ T4$CTC,39. DEFIN$ T4$FMP,40. DEFIN$ T4$DFB,41. .MACRO FEADF$ X,Y .ENDM FEADF$D .ENDM FEADF$.Y .MACRO LNBDF$,L,B,SYSDEFF .SAVE .ASECTD LT.SYS='B'02 LT.GRP='B'13 LT.USR='B'2F LT.TSK='B'3. LT.SES='B'4R LT.INV='B'6N LT.APP='B'5 LS.TRM='B'1V LS.PRV='B'2 LB.LOC='B'1D LB.LOG='B'22 IN.TSK='B'13 IN.SES='B'20 IN.GRP='B'4. IN.SYS='B'10.=0.O$STAT:'L' .BLKW 1O$FLAG:'L' .BLKW 1O$NODS:'L' .BLKW 1O$NODA:'L' .BLKW 1O$DEVS:'L' .BLKW 1O$DEVA:'L' .BLKW 1O$DIRS:'L' .BLKW 1O$DIRA:'L' .BLKW 1O$NAMS:'L' .BLKW 1O$NAMA:'L' .BLKW 1O$TYPS:'L' .BLKW 1O$TYPA:'L' .BLKW 1O$VERS:'L' .BLKW 1O$VERA:'L' .BLKW 1O$TRLS:'L' .BLKW 1O$TRLA:'L' .BLKW 1O$ACCS:'L' .BLKW 1O$ACCA:'L' .BLKW 1O$LTYP:'L' .BLKB 1 .BLKB 1' O$PLEN='B'.' SU$SUC ='B'1ER$NOD ='B'175550BER$DEV ='B'177100'ER$DIR ='B'177060ER$DNF ='B'177020SER$FNM ='B'176420TER$TYP ='B'174540GER$VER ='B'174460SER$ESS ='B'176640AER$XTR ='B'174340SER$BEQ ='B'177510AER$TRN ='B'174550SER$FTB ='B'176364AFS$NOD ='B'400FS$DEV ='B'200FS$DIR ='B'100FS$QUO ='B'2000. FS$NAM ='B'4 FS$TYP ='B'2 FS$VER ='B'1FS$WCH ='B'4000.FS$WDI ='B'1000' FS$WNA ='B'40A FS$WTY ='B'20$ FS$WVE ='B'101FS$NDF ='B'10000FS$DID ='B'20000 P.LNON ='B'0 P.LNAM ='B'1 P.LDEV ='B'2 P.LNOD ='B'3 .RESTORER .MACRO LNBDF$ X,Y,Z .ENDM .ENDMY .MACRO FHDL2$ GLOBALR .MCALL FHDO2$ ...GBL=0B .IF B,GLOBALS FHDO2$ DEF$LR .IFFB .IF IDN,,A ...GBL=1B .ENDC FHDO2$ GLOBAL .ENDC .IF DIF,,0 .MACRO FHDL2$ ARG1Q .ENDM FHDL2$S .ENDC .ENDM FHDL2$2Y .MACRO FHDO2$ OFFSET= .MCALL DEF$I,OFFSET,DEFIN$W DEF$I 0 OFFSET H.IDOF,1 OFFSET H.MPOF,1 OFFSET H.ACOF,1. OFFSET H.RSOF,1= OFFSET H.FSEG,2 OFFSET H.FLEV,2T OFFSET H.FNUM,2 OFFSET H.FSEQ,2 OFFSET H.FRVN,2 OFFSET H.EFNU,2 OFFSET H.EFSQ,2 OFFSET H.ERVN,2 OFFSET H.UFAT,32. OFFSET H.FCHA OFFSET H.UCHA OFFSET ,1 OFFSET H.SCHA OFFSET ,3 DEFIN$ UC.CON,200 DEFIN$ UC.DLK,100 DEFIN$ UC.CNB,40R DEFIN$ UC.WCK,20N DEFIN$ UC.RCK,10 DEFIN$ UC.WBK,4 DEFIN$ UC.NBK,2 DEFIN$ SC.SPL,20= DEFIN$ SC.DIR,40S DEFIN$ SC.BAD,100 DEFIN$ SC.MDL,200 OFFSET H.RPRO,2 OFFSET H.USE,1. OFFSET H.PRIV,1 OFFSET H.FOWN OFFSET H.PROG,2 OFFSET H.PROJ,2 OFFSET H.FPRO,2 DEFIN$ FP.RDV,1 DEFIN$ FP.WRV,2 DEFIN$ FP.EXE,4 DEFIN$ FP.DEL,10. OFFSET H.BFNU,2 OFFSET H.BFSQ,2 OFFSET H.BRVN,2 OFFSET H.SEMK,4 OFFSET S.HDHD F DEF$I 0 OFFSET I.FNAM,20. OFFSET I.RVNO,2 OFFSET I.CRDT,8. OFFSET I.RVDT,8. OFFSET I.EXDT,8. OFFSET I.BKDT,800"D,:;r.D OFFSET I.ULAB,80. OFFSET S.IDHD DEF$I 0 OFFSET S.MPHD DEFIN$ H.CKSM,510.  .IF DIF,,2 .MACRO FHDO2$ ARG1O .ENDM FHDO2$ .ENDC .ENDM FHDO2$ Y .MACRO HMBL2$ GLOBALO .MCALL HMBO2$ ...GBL=0N .IF B,GLOBALF HMBO2$ DEF$LD .IFFP .IF IDN,, ...GBL=1F .ENDC HMBO2$ GLOBAL .ENDC .IF DIF,,F .MACRO HMBL2$ ARG1. .ENDM HMBL2$E .ENDC .ENDM HMBL2$R$Y .MACRO HMBO2$ OFFSETT .MCALL DEF$I,OFFSET,DEFIN$F DEF$I 0 OFFSET H.HBLB,4 OFFSET H.AHLB,4 OFFSET H.IHLB,4 OFFSET H.VLEV,2 OFFSET H.SBCL,2 OFFSET H.HBVB,2 OFFSET H.AHVB,2 OFFSET H.IHVB,2 OFFSET H.IBVB,2 OFFSET H.IBLB,4 OFFSET H.FMAX,4 OFFSET H.IBSZ,2 OFFSET H.RSVF,2 OFFSET H.DVTY,2 OFFSET H.RVN,2 OFFSET H.NVOL,2 OFFSET H.VCHA,2 OFFSET H.VOWN,4 OFFSET H.VSMX,4 OFFSET H.VPRO,2 OFFSET H.DFPR,2 OFFSET H.DRPR,2 OFFSET H.CHK1,2 OFFSET H.VDAT,8. OFFSET H.WISZ,1 OFFSET H.LRUC,1 OFFSET H.FIEX,2 OFFSET ,384. OFFSET H.SRLN,4 OFFSET H.SNAM,12. OFFSET H.INDN,12. OFFSET H.INDO,12. OFFSET H.INDF,12. OFFSET ,2 OFFSET H.CHK2,2 .IF DIF,,O .MACRO HMBO2$ ARG1E .ENDM HMBO2$F .ENDC .ENDM HMBO2$.Y .MACRO SCBL2$ GLOBAL2 .MCALL SCBO2$ ...GBL=0 .IF B,GLOBALE SCBO2$ DEF$LF .IFFO .IF IDN,,F ...GBL=12 .ENDC SCBO2$ GLOBAL .ENDC .IF DIF,,F .MACRO SCBL2$ ARG1E .ENDM SCBL2$F .ENDC .ENDM SCBL2$.XY .MACRO SCBO2$ OFFSET .MCALL DEF$I,OFFSET,DEFIN$. DEF$I 0 OFFSET ,2 OFFSET C.SBCL,2 OFFSET C.VSIZ,4 OFFSET C.SECT,4 OFFSET C.TRAK,4 OFFSET C.CYLN,4 OFFSET C.STAT,2 DEFIN$ SC.TRN,1 OFFSET ,486.B OFFSET C.CKSM,2 .IF DIF,,2 .MACRO SCBO2$ ARG1. .ENDM SCBO2$G .ENDC .ENDM SCBO2$Y .MACRO BOM$C STS,FLG,CS,ERR .MCALL BOM$,DIR$B .IF NDF $$$GLBD .PSECT $DPB$.,D$$$=.A .IFTF BOM$ STS,FLGM .IFTF .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM BOM$CY .MACRO BOM$S STS,FLG,ERR. .MCALL MOV$,DIR$,OFF$ MOV$ FLGB MOV$ STSE MOV (PC)+,-(SP) .BYTE 211.,3F DIR$ ,ERR .ENDM BOM$S Y .MACRO BOM$ STS,FLG .MCALL OFF$ .IF NDF $$$GLBM .BYTE 211.,3F .WORD STS .IF NB FLGC .WORD FLG .IFFS .WORD 0 .ENDC .ENDC .IF NDF B.OMCD .NLISTA$$$OST=0 OFF$, OFF$ B.OMCD,2 OFF$ B.OMFL,2 .LIST .ENDC .ENDM BOM$DvY .MACRO BOMDF$ .NLIST. S.BUNK=-128. S.BFEI=0. S.BOVL=1.N S.BBIF=1. .LIST .ENDM BOMDF$ Y .MACRO TFEA$ FEAT .MCALL OFF$,FEADF$V .IF NDF $$$GLB+ .BYTE 209.,2. .WORD FEAT  .ENDC .IF NDF F.TEAF OFF$ OFF$ F.TEAF,2 .IF DF $$$GLB FEADF$ ,<=> .IFFL FEADF$E .ENDC .ENDC .ENDM TFEA$Y .MACRO TFEA$C FEAT,CS,ERR .MCALL TFEA$,DIR$ .IF NDF $$$GLBO .PSECT $DPB$.,D$$$=.D .IFTF TFEA$ FEAT. .IFT. .PSECT CS DIR$ #$$$,ERR .ENDC .ENDMY .MACRO TFEA$S FEAT,ERR .MCALL MOV$,DIR$F MOV$ FEAT MOV (PC)+,-(SP) .BYTE 209.,2. DIR$ ,ERR .ENDMY .MACRO RRST$ WDBL .MCALL OFF$ .IF NDF $$$GLB .BYTE 213.,2N .WORD WDB .ENDC .IF NDF R.RSBA. OFF$$ OFF$ R.RSBA,2 .ENDC .ENDM RRST$Y .MACRO RRST$C WDB,CS,ERR .MCALL RRST$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=.L .IFTF RRST$ WDB .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RRST$C$Y .MACRO RRST$S WDB,ERR .MCALL DIR$,MOV$, MOV$ WDBL MOV (PC)+,-(SP) .BYTE 213.,2C DIR$ ,ERR .ENDM RRST$SDIR$ ,ERR .ENDMY .MACRO RRST$ WDBL .MCALL OFF$ .IF NDF $$$GLB .BYTE 213.,2N .WORD WDB .ENDC .IF NDF R.RSBA. OFF$$ OFF$ R.RSBA,2 .ENDC .ENDM RRST$Y .MACRO RRST$C WDB,CS,ERR .MCALL RRST$,DIR$ .IF NDF $$$GLB  .PSECT $DPB$.,D$$$=.L .IFTF RRST$ WDB .IFTD .PSECT CS DIR$ #$$$,ERR .ENDC .ENDM RRST$C$Y .MACRO RRST$S WDB,ERR .MCALL DIR$,MOV$, MOV$ WD00#L! "!TADATADATADATADATADATA<0Y 24 I&"s{W|`LJGLgrG3|$4f},F }PF VN~r +~ (G .P %G 2&G (G PdG (G G :G /KG G WG `G XG iG tG qG |G (P ,G 8G 8G VNP SP i^G v^G wP yP \}P P .P 5P qP P e^G G G xsG pP G(GTGG,t`TtG0 }\0\Cp~_MfM%4+~})WP)WP))XP)XP)ZP)ZP, P,!P,R"P,(P,CMP,NP,SP,yP,\}P-DP-EP.P.P.P.P2P2.P2pP2P2P2P2ًP3^sP3sP:K_M>fM>{vy2+~d6&Gd&Gd(Gl(PlCMPlNPlSPl\}PtpP!!~'!%<6!}[!}q!Pq!y+"Y P+"P+"zP+"6P+"K"P+"'P+"(P+"YP+"P+"P+"ZP+"2P #n~#}#Oq##""P#wP# zP#P#P#.P#P#yP#yP#N&P#yP#v~P%G%G%G%r!G%#G% #G%#G%LG%ZG%kfG% qG%tG%wG%xG%G%CG%G<&kG<&DG<&%G<&G<&zG<&(G<&w*G<&:G<&H;G<&SG<&`G<&eG<&fG<&fG<&pG<&pG<&KqG<&%tG<&iwG<&lyG<&9G<&GI&}c&Pc&Pc&Pc&L Pc&Pc&Pc&Pc&Pc&Pc&Pc&;Pc&Pc&Pc&Pc&Pc&Pc&~Pc&Pc& Pc&"Pc&"Pc&#Pc&#Pc&#Pc&4&Pc&'Pc&,Pc&";Pc&|KPc&jLPc&_MPc&MPc&NPc&SPc&TPc&UPc&WPc&XPc& XPc&XPc&gYPc&ZPc&b^Pc&^Pc&dPc&ePc&ePc&fPc&dfPc&fPc&9gPc&pPc&pPc&2qPc&grPc&krPc&sPc&sPc&wwPc&xPc&yPc&yPc&hzPc&}Pc&Pc&Pc&Pc&Pc&Pc&Pc&RPc& Pc&#Pc&Pp&&G&ZG&]fG&tG&tG&CyG|' G|'G'dB'eB'G'IRG' qG'ąG'G((P(lP(zP(WP(&XP(YP(mP(P(ZP(@P(iP(P(P(5P(yG( G(QG\)zG\)G\) G\)KG)G))[MG) G)PG),G)nEG)sEG)EG)_GG)GG)2HG)4G)ZG)p )'G)TyG)G)0P)%G)'G)^G)PsG) G)G)%G)LG)WG)WG)G)ZG)8G)x)` )VP)P)(P)VNP)SP)CTP)VdP)[dP)jdP)fP)fP)gP)pP)nrP)sP)wP)yP)\}P)pG) G) G)w G)pG)KqG)G)%)5)G)t G)G)G)BxG)OzP)PzP)G)!G)dG)VgG)[}G)p )))XG)pG)G)Gt*Vt*Vt*Vt*GVt*I"Vt*3Vt*NVt*rVt*sVt*sVt*sVt*zVt*Vt*Vt*bVt*։V*4V*V*V*V* V*8&V*@,V* XV*@wV*wVT,KPT,PT,PT,P,,1,,VNP,Q,:d,Oq,u~,\,P-2.Q#0P#0P#0P#0P#09P#0DP#0LP#0MP#0vP#0P#0)P#04P#0P#0P#0TP#0UP#0P#0P#0xP#08P#08P#08P#08P#08P#08P#08P#08P#0:P#0k;P00#T,:;r#0;P#0;P$0!P$0R"P$0(P$0SP$0sP,0P,0P,0σP,02P,05P,0qP,0P-0P-01P00pP00qP00sP00sP00sP20,P20,P20,-P20.P20.P408P408P408P408P409P40Q:P40W:P40;;P40:<P40wP40uwP40wP40wP40xP40xP40CyP40NyP40RyP40yP40yP40yP40yP401zP40wV:KwV:iwV:owV:wV:wV:xV:xV:xV:ByV:FyV:WyV:yV:yV:yV:yV:azV:zV:}V:V:V:V:V:+V:|V:AV:iV:yV:V:V:$V:CV:dV:hV:V:V:V:V:V:ۑV:V:BV:DV:V:V:2V:V:1V:;KV;@jV;vV;wV;LV;V@;(~T;VT;8VT;VT;VT;VT;VT;7VT;!VT;;"VT;I"VT;`VT;dVT;4fVT;$qVT;sVT;wVT;DyVT; zVT;zVT;*}VT;VT;VT;3VT;VT;VlK[MPlK_MPKNfPNP{V?{0V?{pV?{V?{V?{pV?{NV?{@V@{0V@{NV@{NVA{0VA{VA{VB{NVC{VD{0VE{VE{VG{V}V}V}V}4V}yV}V} V}H V} V} V}kV}V}>V}V}V}V}V}V}V}V}V}V}!V}I"V}8&V}](V}(V}2V}2V}T3V}3V}5V}8V}O:V}:V}D;V}KV}MV}vNV}xQV}QV}RV}WV}KXV}:YV}`YV}ZV}ZV}`V}:dV}fV}fV}(gV}iV}jV}pV}UqV}qV}sV}HwV}JwV}wV}wV}xV}xV}xV}xV}yV}yV}zV}8}V}V}V}]}V}c}V}~V}V}V}V}0V}փV}׃V}؃V}كV}ڃV}ۃV}܃V}݃V}ރV}߃V}|V},V}V}V}V}@ ~L V ~ V ~GV ~I"V ~YV ~pV ~ qV ~)qV ~[qV ~brV ~urV ~rV ~rV ~sV ~sV ~sV ~sV ~zV ~V ~5V ~V ~V ~$V ~:V ~V ~ۑV ~{V ~^V_MbfMba |Va |VbSVd}Vk |Vl8 Vl Vl Vl Vl Vl+ VlVl!PlR"Pl(PlCMPlNPlSPlQ\VllVllVllVlsPlsPlyPl\}PlVlVlVlVlVlVlVsVuVYVuyVuyVuyVuyVuyVvӁVvVvVvVvVvVvVvVvVvV00#d,:;rvVvVvVP6PL P P P`qPwP7xPAyPNyPyPyPPPCPCPCPCPC,PCQPCSPC\XPC|ZPC fPCfPCUqPCrPCsPCxPCkzPkPkPkPk'PkKPkTPkfPkfPkxP'%z}~LdP.PSSvS|@XX wV BxV |Vi..`.`.. .8T.ō,.ōw.ȍ8 .ȍ.ȍ`.ʍ8T.ˍs.ˍH.}~``ÐHX@ԒPԒPԒPԒ7!PԒ#PԒxQPԒWPԒWPԒqPԒLqPԒ[qPԒVsPԒ;xPԒPԒ}PԒPԒRP:.P. P.8P.KP. LP.^P.qP.BxP.yP.yP4wP#V#֯V#V#V-V-'V-(V-?V-V-[V-V5|V5V5V5^V5fV5ٱV5$V55V5QVJN{NXNt!XN{8N]N:dXNBxXN\}XN XNK[(}a}abd;i5uii Ti(m pŜTspBsuD v9B \qL PwL xL zL L?S@SAS}\ ,l t,z 4u~ 8r= &BlE:1K1o1p1q1r1s1t1u1v1w4}6L 6xQ9`=Kr?y?BC\}C\D\ ^W*hp! :h!*h&Jh'L}s:2/KJP:=y?; ?Dv@ :tiw< vww,}} VԱ2&BԱ&BԱ(BձAձSDձWA^ֱfaBoC 4v0 0# 02XChD`;E42&B&B(BfaBe;EX*Ѳ:FZܲ""ܲ#Bܲ#Bܲ`ܲ)drܲGdrܲ@w@aK3a[M3aVN|aZb2bG3c2 6cIq cd?!4d)&< d;5@d e&6e&6eMeMeZe$3e?3f4vft:fy:gZg<ZghghghgZgg,gCZgRZgZghgZgZg}9i iFliWlZmlE:mo:dp# ph;p &pJ,<pK,=dpZpiw< pvwpw,ppy?py?py?q:Drkr@r"&.rSrwr,}8rrrC@lrs2s2 6s.2sk=ds}wDwDwtEwL Pwkw@lwwwxkFlxkFl00#l! "!TADATADATADATADATADATAW|`%PsR3|$4f},,d z } @~; f2; v2F }PK VN|r +~ ]c ] `b" Kq2 J+3xx{\ :$@VdXRy[M3w }\%S4v&e _M%4}1yDL@:h;4e"4@L_M>l'5n X5zz'5@zzPW6` ` v.yRXR[ S[ @SZ[ ASh'!%<0!# 6!}[!}! 6#y#'#LG#}#t!7#Oq# &(B &,G &@7 &oKN &pKP &yMF &zNv & &KK&`;&u"u'x9\'dB(jLS$(yR4(#>(D(9B((xQd,\,,h9,l t,z ,Oq,hy-2T.@K2d4r:;wYMaRK:SKq:dT:ZK~^ E`W :E`PZ*F`8JF`WLN`@Jb3ax}q3a~t3as64a` 6ai6al6ak*6a8d6a8h6a8f7aj9axl9ap69aoBa8"5d":dh;:dl;:diw< :dvw:dw:dw,dvep<ev=d$ep!eDfT=afZkf`;>kfKq?f; ?Dfv@ f]d\g\ghyVkzV q}" q_Md2qW@7q7qq@l7qsuIqAVqMA^\q8srr%@s@84sUs%s"&.tLtyB$t_3ukMN3u^(3u_3uIqB4u%!4u;;`4uH;5uZ~5up"5u%6u" j6ut:7u`"9uX>u>>uz>uT>u#>uu'>uU(>uT[>uN`>uIq00#t,:;r>uTq2>u!t>uAyj>u>u>u%?ud@u# @u`2BuW!Buq!PBu"BuCuzZDusEudGuv vqXvXuCvP9wKrw`rwdw7xsbx+yJAyNy {SyTy`Xy%y%y]Lyd,y@_MbChKqD!! &!p:Ld `}.`(}S|@Xh~DHE4YEwP}EXd (_FlaFZ9}w * 8B pB  0 B o`$s}2d?!:fNY 42l'4D  D"0NY 42n X4D  D"0Y 4ӭJz'4ӭDs.@ft:@  D"0d;h  D"Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z ds.| DEe    *1  ˕03 "   ˔Ӕ ʥ7ft: Y ZW D`@o@d?!@aVN@  D"04'h  D"8w *eB 8  oaVN"`0d?!Y R!  D  D"0le&he&hc2 h\s2 h.  D"p *) l0, *) $ )*)0,40,6 Y -Z#t! -De?@o@ft:@s}@  D"0H4h  D"Lw *f f ! fP ŀ)Bos}ft::e?Y mz &@ mD@`@:@}s@ձS@}@@@e;@h&@ձ@h'@ X@zձW@X@e@,l@,z@}@4@ 8r@֯}@'@ƭJ(>ƭD  D"0yuh vh yY 4R,h4Dph@d;@aVN@  D"0|g}h  D"* 5)%Eefffff f% EDD%][%><  1 aVNXd;^phY JRK Dq:@i@  D"0mlEh  D" Mwiq:Y :SKq D  D"0&moh  D"*  DP5R RRR Y RT DmlE@o@aVN@  D"0*lEh  D".w *eB 8  oaVN*mlE Y 4mJ:dh4mDs@d;@  D"0phh  D"e( 1  `((   >: 5s<w  w1  %,,:4  d;phY ΥBep ΥD @  D"08pJ,h  D"< 8   **$ Y ΥJev ΥD @  D"00pK,hskh&  D"4 8  ** Y ΥjDfT ΥD @pZ@o@r,}@f@  D"0D 8rh.:h  D"Hw ) * w46l0 o pZ,r,}0fvY >ƭZ(#>ƭD  D"0yyphyyY ΥZkf`; ΥD @d;@m @  D"0p  D"Z8Ae f"( UCɗ+e$&% 8sDsY Ra Dq:@i@o@  D"0Ѳ:h  D""w *D  woi q:Y @WJ#L@WDp &@s@  D"02eh  D"6&ff   'p &$sY z &, D)HN<&`H)H>[XH)^H<&%H WWH&CyH\)KH<&H(yH)nEHz)sEH<&KqHTH )EH( HL[;H&{PH`[8HHWH&{Hd6&H%kfH%ZH@d&Hz|'H qH'ąH |H)H#)H4)H%H PdH :H )_GH)LgrH)HWH)TyH$z'IRH&{ZHWzH@'H)H0)GH%wH@%xH [#H%CH )2HH4) H,)BxH) H-<&%tHz<&9H `H$)[MH &H %HB)pH<&pH<&pHWwH (H 2&H(d(HWwH i^H` v^HZzt!H)w H.)H)PH8)KqH,{hH4'HF xsH[YHtw(@w BwDwFwHw&-H 6lF8sY 4=J@4=D X@K@  D"0'h  D" 8eB   XK0Y vz &yvD  :(}h:`hh4fahxGP}h\h@Ѳ:hX:Zh:h}h @hPz=B@=F\JN:R 8rV@Z`;^Ѳ:X^wwwwwwwwwwwwwwwwwwwwwԱ2&Ա& Ա(ֱfa2&&( fa$y(?T,GP}0wBvF;VNJ,lN,zR4V֯}Z X^ձS"^wwwwwww22XlE K'ձW:syh^`;hԱ(hh`rhBiwh2 hb:hjvwh6hp!hyh*:_hwh:2Xh w:6  66,6^% N a Y vz(jLvD:(}@:`@@fa@`@:@}s@GP}@\@Ѳ:@:Z@ձS@z:@}@@@e;B F{H$9KH}xH$9;H%{!H:GH H}D;Hz:qH:H:qH,wfH:"qH:&qH:&H:$qH:.qH:(qH$9YH}H&$9 H$9YH:WHPz:a H$9YH,w{H ~sH:TqH:RH$9H}HU$9ZZH:H :H:t H:qH:H8:Hz$9CfH$9DfH ~H:H:H ~sH$9Z&H$9bH$9`&H ~H$9kH$9{H<H$9~ZH,wHz:q!H $9ZH$9ZH}`H`:-HA{0H $9ZH:x HvH;LH}4H ~sH:H:H wvHz:!H:-H:}H`}Hj$9[H$9'H$93H$9[H$9H$9H,wWH:H$91H$93gH:Hz:-H ~$H@:H5^HlH5fH :#"HuVYH}yHR}H;E{H?{pH$9rH$9&H}Hiz:brH:crH$9fHt*bH@:krH $9H:vrH@t*H5ٱH w+H:rH}pHk |H:rH :rH z:rH:rH0:2H:rH8:rH} HD$9BH5$HlH55H}8}H%$9g'H$9n'H<_Ht*zHz$9sH$9H$9H?{pH ~:H:[KHkZH}qHV?{Ht*GH$9'H$9H$9H$9H$9 Hz}V}H9}H H>:sH :sHx}]}HA}UqH6: sH:#H:sH }c}H@*@wH5QHw:dH:KH?{@Hz:KH$9H}H:} HS:3H@:{3H:|sH }H<:sH`:sH*wH }H=:sH:sH:sHz:sH0:sH ~HT;8H:sH:KHlH $9CH:KHH}!H :H$9VH$9XH ~ۑH:sHPz$9|H:4H:tHT;wH$9.H:-tH`:,dH:1H}|H :74HwHwH-[H}`YH :vH$9H$9H:n'Hzl+ H#$98H$9H:owHvӁH:H}HT:wHP:H:wHt*H }ZHz6a8>D @[xQ@[Kr@[}@[@[@o@[`@ Kr4ɪ2qhɪ3qhzɪ#qhɪ;rhɪJrhɪ3&hɪKrhɪ#&hɪ2&hɪ;'hɪK'hɪJ'h 4Twh4P t t tK0 Kr5R  J1 r- ;Dt-E U+UD, q   E "[}^[}d[}~[xQ4|5   D E E5$[xQ EWX 52 / & 4 &9 &9U3uE uUw [|5   uE uU5`AU & E& & E& De&fr[`` $̋"5 & & & & De&fH ̋E U6[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N 8Y >z6a8>Ds@[xQ@[@[`@ Kr4ɪ2qhɪ3qhɪJrhɪ3&hɪKrhɪ2&h:ɪK'hɪJ'h 4Bwh4 K0 Kr5G  ?r- 2Dt-E U"UD   E 5   D h[xQ|E E5[xQ EWO ,) &  4 &9U3uE uUw5  [|  uE uU5`AU & E& & E& De&f $̋"5`[`N & & & & De&fH ̋E U$[`ws KY >z6a8>D[`@ Kr4Fɪ3qhɪ3&hɪKrhɪK'h 4wh4K0 KrJ5 5 5 2  UE500#,:;r  E5@? & E& & E& De&f $̋"5 & & & & De&fH2[`r[`| ̋U TY >z6a>D @[xQ@[Kr@[}@[@[@o@[`@ Kr4~ɪ;rhɪJrhbɪKrhɪ;'hɪK'hɪJ'h 4wh4P t t tK0 Kr5;  31 r- $DUt-E D, q  E E Ӂ"[}Z[}`[}t[xQ|  E U &W2/ , & 4 &9 &9U3uE uU[t|.5`.U & E& & f&ËDef Ë )̋E U<[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N bY >z6a>Ds@[xQ@[@[`@ Kr4hɪJrhɪKrhɪK'hɪJ'h 4wh4 K0 Krl50  (r- DUt-E D  E E ܁^[xQ E U &W)& #  4 &9U3uE uU.5`.[b|U & E& & f&ËDef Ë )̋E U*[`ws KrY >j6a>D[`@ Kr4BɪKrhɪK'h 4lwh4K0 KrF5  5 2  UE   pE U 5@*& E& & f&ËDef Ë )̋U<[` Y tz9axtD @[Kr@[}@[@[@o@[`@ Kr4ɪ3qhɪ2qhɪ#qhZɪ;rhɪJrhɪKrh 4Twh4P t t tK0 Kr1 5  :5:UW' % ,  E5  [}<[\[}L|   E5 E  W5  ,E 0[ EWX 52 / & 4 &9 &9U3uE uUw [|5   uE uU5`AU & E& & E& De&fr[`` $̋"5 & & & & De&fH ̋E U6[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N .Y tz9atDs@[@[`@ Kr4ɪ3qhɪ2qhɪJrhɪKrh 4Bwh4 K0 Kr5  454UW!     E5    E8[<|5 E  W5  ,E  [ EWO ,) &  4 &9U3uE uUw5  [|  uE uU5`AU & E& & E& De&f $̋"5`[`N & & & & De&fH ̋E U$[`ws KY tj9atD[`@ Kr4>ɪ3qhɪKrh 4wh4K0 KrB5  5U00#! "!TADATADATADATADATADATA   E5@? & E& & E& De&f $̋"5 & & & & De&fH2[`r[`| ̋U ZY Tz3ax}TD @[Kr@[}@[@[@o@[`@ Kr4ɪ;rhɪJrhɪKrhB 4wh4P t t tK0 Kr1 5  *5*UW  ,   E5 E  [}<[\[},| Wˇ5  ,E [ E U &W2/ , & 4 &9 &9U3uE uU[t|.5`.U & E& & f&ËDef Ë )̋E U<[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N Y Tz3aTDs@[@[`@ Kr4ɪJrhɪKrh 4wh4 K0 Kr5  $5$UW      E5 E  W8[|[|ч5  ,E   E U &W)& #  4 &9U3uE uU.5`.[b|U & E& & f&ËDef Ë )̋E U*[`ws KjY Tb3a~TD[`@ Kr4>ɪKrh 4pwh4K0 KrB5  5U   tE U *5@*& E& & f&ËDef Ë )̋U@[`Y mj& mDs@s@; @c&gr@o@  D"0Xhfy:h   D"w ^B C DBe ?D1 'UBe(e$2eo sHc&grRsP| 4%[]%<>  1 >ߋ J(; FsFY Υj7qs ΥDs@ @xk@s@i@  D"0rChwh*  D" 8   *  4 6 BeeD&& \Е- Е-' Vw D  &pWtЕ. ce  Е:   B%  & G`ЕJЕAЕNЕFЕEЕBЕMЕi>:<XݪKAЕRЕAЕPЕRЕMЕAЕYЕJЕUЕNЕJЕUЕL00#,:;rЕAЕUЕGЕSЕEЕPЕOЕCЕTЕNЕOЕVЕDlЕEЕCY z.D:`@:Z@:@Aׁ  `)9H%EKQNdi%vhlAP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e & <:: ,: 6<( x:`j teЕ A %& eA Е A EA EЕ A A   $Е. : :_x *: 2[(}Ha}T@Qf[(}~[(}0 AЕ;    :ZY t0B t0D ke(0,@,hC,h ke(0e   Y XzNy XDNHQHHNBxH BxHQHN:dHBxHHN H  :\}hNt!ht!hN\}h\}ht!hY t02xxt0D "$CTh & @ @Y B*`Dܲ`@ ke(0sh ke( Sw ܲ`Y XJWXDܲ#@ܲGd@ ke(0<Wh ke(@ Av wܲGd>ܲ#Y B3DܲGd@ ke(03h ke( C &qFre @AE2cD! D2rܲGd|8 HY J4fDܲ#@ܲGd@ ke(0"4fh ke(& & CC w ܲGd$ܲ#zY t0B t0D ke(0 @,hC,h ke(eY JF Dܲ#@ܲGd@ ke(0.F h ke(2> qqqQѕwܲGd0ܲ#Y J;VNDܲ#@ܲGd@ ke(0F VNh ke( RRRwܲGdܲ#Y rr +Dܲ#@ ke(0D+h!!hh2+h xQh}h$r +h ke(H97; uwy{D& fW#v&wFܲ#Y Zbs;D ke(0V9phBYh@;(hv8h:h ke(Z L@W @@@ 8@ A Be   @  @ A@@K@P @Y ByXDܲ`@ ke(0,h ke( w ܲ`fY ~Z~Dܲ#@ܲGd@ ke(0.Qh,1hHwh ke(` e BBCC w qqq0 fqC Q IܲGd4ܲ#VܲGd4|w C Q Qqwܲ#ܲGd2ܲ#|Y z}Ds@ܲ#@ܲGd@L @$9΅@w@C,@ ke(00h}h ke( j  2@  e ' w  /*jܲGd"C,8w>L lܲ#ps |<   e$9΅Y HJTH00#! "!TADATADATADATADATADATADܲ#@ܲGd@ ke(0 `Th ke($ & w ܲGd"ܲ#Y XJXDs@ܲGd@ ke(0,Cph ke(0 & & &&&ܲGd,sY R%Dܲ#@ܲGd@C,@ ke(0%h ke("  w ܲGdC, ܲ#Y z}Ds@N@N]@ܲ#@ܲGd@ X@NBx@N{8@N{@$9΅@C,@ ke(0}h ke(   *e  f w  NܲGdC,N X$NBxDN{PN]ZN{8^fhܲ#lsrs~$9΅ | e Y XZ1yXDN@ݩ%@ ke(0XN]hN{8hN{h ke(\&&&f&f   ` % s*N.ݩ%Y JDܲ#@ܲGd@ ke(0{h ke( _w ܲGdܲ#,Y R` Ds@# z@$9@ ke(0s&   (w  *ܲGdC,$(*ܲ#.s4N8ݩ%Y R[!}Dܲ#@ܲGd@C,@ ke(02[!}h ke(6  2 w ܲGdC,4ܲ#Y J֯L Dܲ#@ܲGd@ ke(0q!yh ke( ew ܲGdܲ#Y J֯Dܲ#@ܲGd@ ke(0q!h ke( aw ܲGdܲ#2Y  > Q Q Q IwܲGd<ܲ#Y W &=e e@ B  $ݪK6d;Y ZD z@*@ \q@4u~@ ke(0<}h ke(@& %NBwA & fww z4u~2 \q>*Y tjf]tDs@G> @$9s@GVN@:$@:4F@ Rhke(0 &)00#! "!TADATADATADATADATADATA_& & &  & && && Ε 61& 1)ȋ& & & ,s.G> 2GVN6:$B$9sZG> nG> T|& & & & & & Ε 1 &  a@ G> GVN:4F6G>  Y ZsD,0z@ܲ#@ܲGd@)%@ ke(0Zgh ke(^&  & e mw&f&fe  s&ܲGd,0z)%,ܲ#B,0zF)%Y R q}Dܲ#@ܲGd@C,@ ke(02 q}h ke(6  2 w ܲGdC,4ܲ#Y BձDܲGd@ ke(0pIqh ke(t   _(  ?f'& f' ?E@@ a B 0e  ܲGdY RձDs@ܲGd@ ke(04Kq hKq^h ke(8KM & & &&& ܲGd4sY BsrDܲGd@ ke(0.srh ke(2 e@AB ܲGdY Rr%Dܲ#@ܲGd@C,@ ke(0r%h ke(  w ܲGdC,ܲ#"Y tJs@8tDܲ#@ܲGd@ ke(0s@8h ke(  eCBBaIBBJbCBB ɒɐBܲGd| & &  wܲ#Y J#DܲGd@ܲ@w@ ke(0Yqh ke(  wܲGdܲ@wY XRUs%XDܲ#@ܲGd@ ke(0(cs}hUs%h ke(,Q &wܲGd*ܲ#Y BձzDܲ`@ ke(0[qMh ke( /w ܲ`Y zxDlOpH)H)H)H)xH)p H)%H[ H)` H)p H)5H ke(0Y Z9wKDܲ#@E4d@ܲGd@C,@ ke(0(9wKh ke(,  wܲGdC, E4d*ܲ#Y zrwDs@ܲ#@ܲGd@L @$9΅@w@C,@ ke(0rwhrwh ke( p`  2@  e *  w  *pܲGd"C,8w>L rܲ#vs&|/<   e$9΅Y tJrwdtDܲ#@ܲGd@ ke(0drwdh ke(h e ICBBaI    B wܲGdfܲ#Y XR u~XDܲ#@ܲGd@ ke(0&,u~hwu~h ke(* =w =w ܲGdܲ# ܲGd(ܲ# Y XRx+XDܲ""@ܲ#@ܲGd@ ke(0vx+h ke(z W#0A %+B%&AB`B`D&  B~> ee Jb"b "╫w HܲGdpܲ#xܲ""Y J XDܲ#@ܲGd@ ke(0&wh ke(* GwܲGd(ܲ#Y RyDܲ#@ܲGd@C,@ ke(0$yh ke((  wܲGdC,&ܲ#00#,:;rY Ry Ds@ܲ#@ ke(0@Iqh0y}h ke(D B (W/ D  7 f& }w(sBܲ#Y zAyDs@ܲ#@ܲGd@L @$9΅@w@C,@ ke(0AyhAyh ke(      2@  e 9ܲGd"C,zw|2       w   /<  L Vܲ#Zs|$9΅ eDY rSyD5!@5 @ @@@ ke(0 Xhݩ%hwh< ke( ,#b3!  b3!a & > >265 : FX |Y Jy%Dܲ#@ܲGd@ ke(02y%h ke(6 @  EwܲGd4ܲ#Y Xb #XDܲ#@ܲGd@ ke(0Zg(0y@h.yhX:` Zg( e2w 7 Nw&f&fCDEe  > ܲGd X:`0ܲ#:ܲGd>X:`BX:`HNPܲ# dX:`(|   cs X:` Y J zDܲGd@ܲ@w@ ke(02sh ke(6 X eETETwܲGd4ܲ@wY J 4fDܲ#@ܲGd@ ke(0z4fh ke( -w ܲGdܲ#Y Ry%Dܲ#@ܲGd@C,@ ke(0y%h ke(   w ܲGdC,ܲ#Y Jy]Dܲ""@ܲ#@ ke(0Xy]h ke(\@$A E& & B ?E@  D Q w% Nܲ#Xܲ""Y JydDܲ#@ܲGd@ ke(0ydh ke( w ܲGdܲ#Y Ry@Dܲ#@ܲGd@C,@ ke(0y@h ke("  w ܲGdC, ܲ#Y XJT,XDܲ#@ܲGd@ ke(0'%h ke( w ܲGdܲ#Y XBLdXDܲ`@ ke(0Ldh ke( w ܲ`Y bSDܲ#@ܲGd@C,@ ke(0TShSvhSh  ke(XKM&     2 &wܲGd&C,Vܲ#Y XJ|@XDܲ#@ܲGd@ ke(0@|@h ke(D &  eq B C1GwܲGdBܲ#Y tztDs@ܲ#@ܲGd@L @$9΅@w@C,@ ke(0hh ke( x  2@  e .  w *xܲGd"C,8w>L zܲ#~s.| /<  e$$9΅^Y 뀻jjM뀻Dܲ""@ܲ#@$99@ ke(0`h&`hy`h y`h ke(& @EA:% NP& @5A E& B _"E@  D Q 5E,|w+00#! "!TADATADATADATADATADATAw E  ܲ#ܲ#$99(ܲ""Y BxDܲ#@ ke(0 ÐHXh ke(& 1w ܲ#~Y :*D ke(0*h ke()Y Jܲ#Ds@ ke(0ܲ#hܲ#h ke(sY Jܲ`Dܲ#@ܲGd@ ke(0ܲ`h ke( &w ܲGdܲ#Y Jܲ)dDܲ""@ ke(0Lܲ)dhܲGdh ke(PC & ` `Ba#   L Lܲ""Y Bܲ@wDܲ#@ ke(0(ܲ@wh ke(,CC    &w*ܲ#vY <:ܲ""<D ke(0ܲ""h ke(& >Y XzTy`XDNHQHHNBxH BxHQHN:dHBxHH N H  :\}h>Nt!h>t!hN\}h\}ht!h   >>> >|tld2Y tb!tD)@4@@W@<&e@)p@ 4@h 8w &&E  AHW )p)p<&e)"4&<&e().)p2)p$Y Xz!p:XD$9 @)Bx@)p@W@t<@ @)@)Ps@:@ @h Dw   . ʥ:W:t<) )Bx$ *)p<$9 >)PsY tz! &tD)@)Bx@$9~Z@)p@W@<&e@ @)@)Ps@t @)p@:@ 4h w    j2-  (@ep@ D  e  ` e RW $9~Z")Ps.:4<&e6):t <)B)BxJ)pP)pT b:F|     R#R- )Bx:& ,)pY B @~D  D"06ݪKhih  D":&  m  f A N  %NY |S:=|SD Cx0=h Cxf&f ` *  !נ נ  נננ"D נaנz E ѐEp(p| נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃00#,:;rȠ נ0נ7נ*נ,A oȠm k  tנ"A t  &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0`lנ9נAנZ נ_ נ:  Dנ"  0Y |RB@=|RDd@ Cx0@=h Cxf&f E^`  UQ  UQ ËUI U `e |ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRtpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  |dȀWC E Cs Ε f)& 6 l(*  E 'W " =lN  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 eY XB%PsXDs@ K0 ""h K$'1sY N@B:h;N@D  D"0@d;hm h  D"D&   `@ ` B   & A @    Y ΚXb9}ΚXDi(Pi Zi di .tՕ: @e e0e0UiY 0zܩu~0DݪM@ݪK@W@i@ab@ Zg`Zg(0ܩu~h:h::"h Zg`< Zg(w &fe&  w &ff=elC    5p  d  W"W`i00#! "!TADATADATADATADATADATAri|  A &@d &@ &m M M` M`5u  @ @ e@ M`u 5`2ii$i0i:ݪKFݪKRݪKfݪKBW @ `u  #;eu o eA eS S S B CeS S S A eS , ab HZg`PݪM ^Zg`fݪMxݪM0tS S B ee Zg`ݪMY ΚXBתZΚXD Zg`0תZhabh$ Zg`4JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECY X:i XD Zg(06i h Zg(:&f!  E D  E E C B Ί AY XzXDfH`fHH fHH p&H fHjzHxfHfHKH fH " 5H fH@ Y NBi(ND@ Zg(0ni(h Zg(r AUUUU    T T T T ee(e(e(e(T $)T T TU U U U  ~Y Xz#'XD)@:Z@)Ty@:@[Y@[Y@)@)Z@)W@)W@[<}@o@:Ա2&@[(}@)X@ Zg(0dh Zg(w EH  P A Е:%ʋ B   5Е" e pe d\o)))X":<)TyNԱ2&`)W[<} n)W[Y z[Y[Y  z|Е"A 2 A (A Е.A Е;A      HХ"Е" B)W[Y )W)W$)W0)<)ZB:ZN[(}vY tX:#}tXD Zg(0yh Zg(&3Y MN[[e D(e:(C(  5oNltT; z|@5*6 T @2ȋ eT5 N ) @   J 5 w DC u $g2gCXgbgCtgw  E  @e:(w5 CD>%  6  p + k5e d .gJgXgfgt^ [U5@ D( G uɥ;5<5-Ԩ  5@ u $9!*gR.g:gvg5 Fɥ@5ub , 5w E 5 @  @8jMAB *g:g<V`NKj$9!lAe @&PPP@C&5A  88Ue  28:sDѲ:HT; zP$9!\:hѲ:l:brxѲ:|8 "@0 *_%`AB w@ 8 T; z( N$9!Z$9!ngY :%%ȕp*f  D9x9x*@:=Hc&_MT$9pwVs\T;w^stux=tȕp* eBEETH EBe Z5    O 2e(5 @&B &@=DgT'Zgdz`B 2=2 D(:(@$8 &SY e2edE_$8$8$8lw $9!D}sJwRoVsZ (`Xh}s~Ա2&du46 D A(! ! (*A8 @&s eB<B7 pB!# Zp *pB   dw ɥ ɥ   ɥ ɥ ɥ@ɥ/ h' $9W" 8r4:"Y o*)TyH)PR$9!T)P`<&9b)h:t nѲ:r)Ps|ep& f P aAAf@pnp C֋ 8Ë7AB`f VT:GѲ:@)pD)pH L)PsP)PX:^Ѳ:b)Pf)Psn)pr)pa`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a`$9pl$9!t Bw@ ŀajTI& af n`V @e,w jj4`&<&9<&Kq<&D ()<)PsD)Psnolj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY <=X@=l e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCe###3X`v)W3 & w  jDl@ TeT5l@ @ L:)P$$9!&)Ps,28o>)PN 8rX)W\)Pt`|sd e  & @ & V An5jP a@@` > ~ @ 8 ( X)W)'}s2' q4)8h'zs. ePa-eP BAnB X/   @   RՀaePÕwePP6 -0P -0Pd-0Ph$9p p-0Pz-0P\)K@>Y XR4XD\s!s@ v4h U9qhdh(Zgh6 M@BCAf } f&  GRR@ 3   &$&~ Vs!s|& e% ~ԥ ~F` F` f&Pe e  @  veT  00# ! "!TADATADATADATADATADATA% % % %% % %@ABCD f @  f% % % % t '&f&f`%  > BBe   *uuuuFE@aaH~  r 6  < (  .   "    x  l l&f&D%% %% v  % %%l% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u d5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5\  n eY NBݪMND@ Zg(0TݪMh Zg(X @    e  T T T T H1CdT T L $)dL t dL d  FY X*ZKXD \Y j\DDs@c&~@T;@o@  D"0DhDh\Dh  D"% w &Ba +- ʥ# . U 0   b c&~T;s$o*|  `     JY QXR^QXDo@  D"0\h hdh  D"w  w & W+W- Ba. W#  B0  c  c S W %ec e`s oo<|  # 3  & ˥ Z ^C  Y XZ7aXD@S@?S@o@ N.D,hD,h ۩"S Rw w &e`` a  `e`P D 2o ?So@S ۩"S` ,۩"S :۩"S`Y tXzR:tXD<&`@<&Kq@`@[8@)P@[Z@)W@)p@s@BDRFHJHLxNPhRTVX| &- ae  $e  & & & & && & & & &)4  ^b: R &E@ U U @ P J .1 6 ( 00#,:;r 2  4t  AW A t  %& & & & & & & & & & & & & & & & & & & & tT:t v:  V4  X@ :tP A V @ HI @ :E wAW HAfW l H @ eB   n wL B f  B \   %ww x ^f <D |  U w 6 H L P@ U w  eC "@d U w| t wh t  @44Vt   B B   4 4 H   (B r 4m -c  :  t \%ww H     C    wL J w< K w, B  T w  w x X@ ~wY z4a` D?H"ɪKr@X@""@w@év~@ 46L h Ch C\}h9`hj1ohBh 6xQh=Krh1Kh4}h?yh ~, , t t t 4  ~, ""  "wɪKr X év~ ,  Y zBa8"D c[H [xQH[KrH[KH[}H[yH[L H [\}H[H [`H[oHzY t:ͫetD  ̅ ͫeh  ̅enY 0R 0DB,0zH*sH&5 H.sH([H, Y Zg(0?Th Zg`*ABDEFIMNOPQRSTUXYZ<>zv      " $  &" (&$ &~4& B( >*  l,  x. 0 2 4 6 8 :*: < Zg(w && D¥%  B&ХVA C e!  aebE  Е%*WB> :2 'LBCH    .MAIN. Zg(n 7 $& Lwf@> 07 ԋ_  7 j hz Zg`Zg` Zg`Zg`@y `^ Zg`$$ `^&Zg`&4:t 6Zg`@ :Zg`>FZg`JZg`XZg`j7 E L4  w7 " 2 $  h jZg`Zg`Zg`$Zg`2Zg`   J!     rZg` Zg`H Zg` $Zg`(4Zg`8P )pD)pH}V)p \Zg`d)ptP|Pbp  Zцw    T߇ B܇7ق&7 %n)p)p }P "Zg`$)p*)p.}4Zg`D)pJ)pPZg`fZg`pZg`tZg`i wVȥ ȥ ȥ*  ȥ$ȥ/ ̥/   7    . Zg`i P)p)p2Zg`dZg`zZ ¥ ¥ p R $  00#$,:;r~ P$ &)p*)Ty.)'2' q4)8' q:)><&e@) DZg`F)pL)pPhp! XZg` fZg`$n@ tZg` U N 1ȥ9C ʥ ʥ ҥ@w Vp @ Zg`P 8r Zg`"P&:DZg` rZg`V~=|L  \fdwȕ e 7 5j1-C 7 | Zg`Zg`fZg`d Zg`&@=4P8)W " @>    (zZg`Zg`Zg`Zg`Zg` Zg`(&Zg`DZg`J:LZg`@ PZg`>VZP `Zg`n` tZg`^( 4A Е.) ыѝѝɝwы@>4 t&R Zg`()Ps Zg`A: "Zg`)0M4M8MH:2JZg`@ NZg`>Y tR$ep!tDs@tCyH c&|KH6T,HkxH!)pH ,R"H L H0{mH`qH a9H"-DH)XHaKH #{8Hz)jdH 7{ HT,KHc&RH'(ZH0{H(lH tyH(zH@.8H,yH .Hc&H0{DHlSHzc&WH:#0H#0H4{*LH#0Hs,XH@#09H [t{8H3^sH)VHc&XHGc& XH?tBxH.yH (Hz)\}H-EH#{8HtsH3sH0{9H#0HtsH.{H)ZH #z zH.yH #0LHc&dHAkH'z-0H0{H0{Ht H#0DH0{Ht8Hs`XHn]H #0vH# zH0{nHl!H #0MH c&jLHz#""H#0H)VNHԒLqH4{MHԒ[qH-01H40wHn^HlyH(WH 3jHc&pH#0)H c&HKz#04H c&pH#{mHT,HԒqH@CkzHc&XH7Ԓ7!H c& H00#,! "!TADATADATADATADATADATA2uNEDH NY NE2>uU(NED©#H NY NE2>uTqNEDOH NY NE2>uu'NEDH NY NE2>u!tNEDuT[NEDH NY NE2>uAyNEDȫ H NY NE2>uIqNED H NY NE2>uNEDjuNEDpŜH NY NE2>u#NEDH NY NE2>uN`NED(XH NY NE2>uNEDJH NY NE2>uzNEDi5uH NY NE2>u%NE00#<! "!TADATADATADATADATADATADt!H :Y NEz3u^NED5 @@@ dhPhHh hHh Wh hRWh  h  @ &e6% 4% 4%04 f   w eF w 5 >RX5 fY N:7xsND5 @ $7sh (e6@a "H5 Y :,d D  D"0aZh  D" =p!Օ^VY ,bK VN ,Ds@s@o@f@  D"0aVNh;VNh  D"w BC "&0*7e "fSYqq1յ<pBՋ.p0po&s(|2* 0=E%0=w s&fY ΥZ  ΥD @f@  D"0ziWhrwh`i h  D"~46f %8 E D/D!D l0l8epl0pɥ.ɕ wx |f Y 4hrw4hDs@r"&@q:@w@i@o@f@  D"0`h  D"w *8I *=)98 eB &&  U **o"w8ihq:|e *Nlv ΋*.2  & #!)&ePe && >2i^s(e >E p* wq:"r"&&f Y %b& %D @q:@i@o@  D"0tch`rh  D"xw  )  fU %  BA `6p 4p`4 %60 4o $i6q:Y Zz Dq:@i@  D"0HeZhrShft:h   D"L   f >5>Eu    i:q:nY : & D  D"0h  D" rY lz, lDe&@py@r@r@pJ,@o@mo@s2 @f@  D"0d}h   D"w ) 8C 0* ) *w*   ep &o pJ, rNfbpyre&|p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8etE`l0  0 0/ &l0 `p l064p 4 p  , JNs2 x *` C#   D @)  6?0D)r:mo^Y lz,hy lDe&@r@pK,@o@mo@sk@s2 @f@  D"0\ h  D"w ) 8C * ) *w*  ep p  | o pK, rNf^e&|ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0t 0/ &l0 `p l064p 4 p  8 V *`:s2 p)w C#   D @)  600#D,:;r?0D)skr2moY =Z:dw =Ds.@D@o@  D"0pwh wh  D"w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w UojD|\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 54s.t@e*=U Ee& REe  ӥ" wV ˥"   ˥" (Ք     Օ Y zafZ Db@e&@e&@c@r@i @c2 @w@aK@  D"0pZh   D"=D `p46 f 64/=  @) 0  8w 46 ,i $e&0wNchblc2 zaK$|8 e*w re&Y Ӎz\g ӍD @e&@py@r@r@w@w@pJ,@o@mo@i@aZ@2r,}@f@  D"02}h  D"w n832cd& & & B  2OΕ   N Υ$Ε  2o pJ,|2Υ   v Ε f e * e*w@) mo>wTr,}` pf *0,   ) )% ȥ  = ȥ l 0l  pyr0e&> t ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ aZXi_ X= E8 el0  & 0 l0`p l064p 4 ep l)wbȥ%  ,  N w0  J B # f &,aZ:aZHr,}Pw\rvmoN `* w)0406 l0  $fY Ӎz\ghy ӍD @e&@r@w@w@pK,@o@mo@i@sk@aZ@r,}@*f@  D"0 h  D"w n832cd& & & B  2OΕ   N Υ$Ε  2o pK,|2Υ   v Ε f e * e*w@)0, mo>wTr,}` pf   ) )% ȥ  = ȥ l 0l  ȥ (re&& jaZtȥ- ȥe&=Ba@a e0b eȥe@ ] V=@i E8 el0  & 0 l0`p l064p 4 ep )wzlȥ%  ,  wL  JwB # f  `* &aZ"aZ,r,}4w@skZmo2w)0406 l0  fDY z7q Db@wt@rk@wL @iW@rw@bG@s2 @  D"0\rhrh   D"`e6p 4 8 81416   2s2 "b*iW@bGDrkNwL Vwt\rwY :\q D  D"0r,}h  D"> =00l&8el00#L! "!TADATADATADATADATADATA2 0 |*Y Js"& Ds@@  D"0Nr"&h  D"R82e& 0 0 0 80 B0 0 0 0)#0.s"Y (ZtL (Dxk@q:@i@  D"00rkhwkh  D"4 U8UMw wi&q:2xk~Y R$t_ Dw@aK@s2 @  D"0rh  D"&4&6= 64 wz%!64=5 2 6  l0 & Z46 s2 Fs2 `|64 :)0406 0 *0e6p 4 = aKPwY Jw Dw@f@  D"0BwL h  D"F B 00fep=& /e`pwwDfY 4Ψz4ΨDb@wt@rw@bG@wk@a[M@f@  D"0whwh  D" ..8em,0l0!D0e6p 4.) &f   bG`a[Mlwkprw|wt8|e) .  e6p 4 08*w,b6fY Rd DbG@w@aZ@  D"0Pwh  D"T)"(. = . B  E (.bGFaZJwY AWJdvAWD&s@s@  D"0p &h  D"eff NeP   #llD eJ Ԕ %:ԕ: sJst|f"& f&f& & Ε lle  lsY 4j:dvw4Ds@s@o@aVN@\D@  D"0pvwh vwh  D"w *D ]Xfe<5"ӕ_ S :ӕ: & "& Εo0s|4' *'**UqqC ӥ:  Ce   * sssX\DpaVNfY z:dw D&p &@s@[;@piw@pvw@pw@s@o@aVN@  D"06}sh p# h*s}h  D"eB  8 $&w *5<s1  U U@  f&" &aVN&o0sV[;jpw|p &|)'M'**%*%0 *&* *5ND    sssLaVN|aVNB<  EU   2pvw8piw>pwY ej &( eDs@  D"0yyph &hByy y y((  BBFF y rY >ƭB(>ƭD  D"0yuh yHY -Z0!# -Ds@s@;VN@  D"0eMheMh   D" e(&&& e"4 &fff& & "eW!  eW!eW sLs(|  p*ŋ;VNvY mj&`; mDs@s@; @c&gr@o@  D"0Xhfy:h   D"w SB C DBe ?D1 'UBe(e$200#T,:;reo sHc&grRs:| 4%[]%<>  1 >(; Y 4-R,l4-DeM@g}@o@  D"0,lh  D"w  wo eMg}Y 4-R,z4-DeM@g}@o@  D"0,zh  D"w wo eMg}tY Ze Ds@q:@i@f@  D"0cIqh  D"W=f& e %&&eH =&e0  U   E >  sXiH|>E5E=uf p  w s2q:FfY 4zE`W4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@ZaVN@f@@ft:@fy:@cIq@s}@  D"0hp!h  D"w  D 8"!#($ĥ ĥ w 0 o sfy:|*0 @Q$    0 40 60)) *<##   w,# w&* 0s}VaVNpft:=*ȥwl `p!2 EW!p0p22,2<'##Hs`stUfE @#U   P3)/ #( P) @#**fff &cIq>cIqXeZ~d?! &*wp. tB58e$8w2A&e 4p8q  eZ6sTs\l(#4=A#@)( *O*)@#0l @# 02ȕ8 *r~b00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & eDr,}bivq:d# eB&B B * eBe>  # #D #rSmlE r"&,i=0/H#@&0 # = e0   0@e 6=#02Xq:\/002# @#?@#040 6w/!0/ l0/!p!0 .Df=p0p2 Y 4zE`PZ4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@baVN@f@@ft:@fy:@cIq@s}@  D"0^Whh!h  D"w & w  D  8"!#($ĥ ĥ woos fy:|  0 *0 @Q$    0 40 60))  eB *<##   w@s}LaVNraVN,# w&* =*ȥwl `p!2 EW!p0p22,2ft:ds|st<'##UfE @#U   P3)/ #( P) @#BcIqZcIqteZ**fff  &*wp. tB58e$8w2A&e  d?!.eZRspsxl4p8q  (#4=A#@)( *O*)@#0l @# 02Fr돀ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ b`r,}~id& & e# eB&B B * eBe>  # # q:0rS8mlEb0 @0 &*0 @ & & e * eBe>  # # r,}"i6q:>r"&JilD #=0/H#@&0 # = e0   0@vq:e 6=#02/002# @#?@#040 6w/!0/ lbf0d0/!p!0 .=p0p2Y 4zF`W4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@RaVN@f@@ft:@fy:@cIq@  D"0h'h  D"w  D 8"!#($ĥ ĥ w 0 o sfy:|*0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!6aVNPft:2 EW!p0p22,2<'##UfE @#U (s@st  P3)/ #( P) @#**fff  &*wp. cIqcIq8eZ^d?!neZ tB58e$8w2A&e 4p8q  (#4=A#@s4s<l)( *O*)@#0l @# 02ȕ8 00ĥ݇Aĥ r^bĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B &$r,}BiVq:prSxmlE|r"&d* eBe>  # #D #=0/H#@&0  i# = e0   0@e 6=#02/002# @8q:n\#?@#040 6w/!0/ l0/!p!0 .=p0p2$fY >j=>D&p &@s@@s@$9pw@@=@ Cx0.=h Cx eeȵe ~ o DEP%5 eȵPe< &e  %$&*@=Fsrp &z$9pw|s|@A 55@558 eBeeeȵee&e :e4   QB4Y >j=>D&p &@s@@s@$9pw@@=@ Cx0.=h Cx eeȵe ~ o DEP%5 eȵPe< &00$d,:;r<0Y 2 M&hs{$W{LJGLgrG3|j4f|rF }F VN}Lr +} (G . %G 2&G (G PdG (G G :G /KG G WG `G XG iG tG qG |G ( ,G 8G 8G VN S i^G v^G w y \}  . 5 q  e^G G G xsG p G(GTGG,~`TtG0 0}0Cp8}_MfM%z+}}.)W)W))X)X)Z)Z, ,!,R",(,CM,N,S,y,\}-D-E....22.2p2222ً3^s3s:K0_MfM{y<2+}d6&Gd&Gd(Gl(lCMlNlSl\}tp!!}'!%6!}6[!}4q!q!y+"Y +"+"z+"6+"K"+"'+"(+"Y+"+"+"Z+"2 #n~0#}0#Oq<##""#w# z###.##y#y#N&#y#v~%G%G%G%r!G%#G% #G%#G%LG%ZG%kfG% qG%tG%wG%xG%G%CG%G<&kG<&DG<&%G<&G<&zG<&(G<&w*G<&:G<&H;G<&SG<&`G<&eG<&fG<&fG<&pG<&pG<&KqG<&%tG<&iwG<&lyG<&9G<&GI&}0c&c&c&c&L c&c&c&c&c&c&c&;c&c&c&c&c&c&~c&c& c&"c&"c&#c&#c&#c&4&c&'c&,c&";c&|Kc&jLc&_Mc&Mc&Nc&Sc&Tc&Uc&Wc&Xc& Xc&Xc&gYc&Zc&b^c&^c&dc&ec&ec&fc&dfc&fc&9gc&pc&pc&2qc&grc&krc&sc&sc&wwc&xc&yc&yc&hzc&}c&c&c&c&c&c&c&Rc& c&#c&p&8&G&ZG&]fG&tG&tG&CyG|' G|'G'd'e'G'IRG' qG'ąG'G( ((l(z(W(&X(Y(m((Z(@(i(((5(yG( G(QG\)zG\)G\) G\)KG)G)0)[MG) G)PG),G)nEG)sEG)EG)_GG)GG)2HG)4G)ZG)p 0)'G)TyG)G)0)%G)'G)^G)PsG) G)G)%G)LG)WG)WG)G)ZG)8G)x0)` 0)V))()VN)S)CT)Vd)[d)jd)f)f)g)p)nr)s)w)y)\})pG) G) G)w G)pG)KqG)G)%0)50)G)t G)G)G)BxG)Oz)Pz)G)!G)dG)VgG)[}G)p 0)0)0)XG)pG)G)Gt*VBt*VBt*VBt*GVBt*I"VBt*3VBt*NVBt*rVBt*sVBt*sVBt*sVBt*zVBt*VBt*VBt*bVBt*։VB*4VB*VB*VB*VB* VB*8&VB*@,VB* XVB*@wVB*wVBT,KT,T,T,,,1<,,VN,Q4,:d,Oq,u~,,-x.Q<#0#0#0#0#09#0D#0L#0M#0v#0#0)#04#0#0#0T#0U#0#0#0x#08#08#08#08#08#08#08#08#0:#0k;00$l! "!TADATADATADATADATADATA#0;#0;$0!$0R"$0($0S$0s,0,0,0σ,02,05,0q,0-0-0100p00q00s00s00s20,20,20,-20.20.40840840840840940Q:40W:40;;40:<40w40uw40w40w40x40x40Cy40Ny40Ry40y40y40y40y401z40wVB:KwVB:iwVB:owVB:wVB:wVB:xVB:xVB:xVB:ByVB:FyVB:WyVB:yVB:yVB:yVB:yVB:azVB:zVB:}VB:VB:VB:VB:VB:+VB:|VB:AVB:iVB:yVB:VB:VB:$VB:CVB:dVB:hVB:VB:VB:VB:VB:VB:ۑVB:VB:BVB:DVB:VB:VB:2VB:VB:1VB:;KVB;@jVB;vVB;wVB;LVB;VB@;(~T;VBT;8VBT;VBT;VBT;VBT;VBT;7VBT;!VBT;;"VBT;I"VBT;`VBT;dVBT;4fVBT;$qVBT;sVBT;wVBT;DyVBT; zVBT;zVBT;*}VBT;VBT;VBT;3VBT;VBT;VBlK[MlK_MK8NfN{VB?{0VB?{pVB?{VB?{VB?{pVB?{NVB?{@VB@{0VB@{NVB@{NVBA{0VBA{VBA{VBB{NVBC{VBD{0VBE{VBE{VBG{VB}VB}VB}VB}4VB}yVB}VB} VB}H VB} VB} VB}kVB}VB}>VB}VB}VB}VB}VB}VB}VB}VB}VB}VB}!VB}I"VB}8&VB}](VB}(VB}2VB}2VB}T3VB}3VB}5VB}8VB}O:VB}:VB}D;VB}KVB}MVB}vNVB}xQVB}QVB}RVB}WVB}KXVB}:YVB}`YVB}ZVB}ZVB}`VB}:dVB}fVB}fVB}(gVB}iVB}jVB}pVB}UqVB}qVB}sVB}HwVB}JwVB}wVB}wVB}xVB}xVB}xVB}xVB}yVB}yVB}zVB}8}VB}V}VB}]}VB}c}VB}~VB}VB}VB}VB}0VB}փVB}׃VB}؃VB}كVB}ڃVB}ۃVB}܃VB}݃VB}ރVB}߃VB}|VB},VB}VB}VB}VB}@0 ~L VB ~ VB ~GVB ~I"VB ~YVB ~pVB ~ qVB ~)qVB ~[qVB ~brVB ~urVB ~rVB ~rVB ~sVB ~sVB ~sVB ~sVB ~zVB ~VB ~5VB ~VB ~VB ~$VB ~:VB ~VB ~ۑVB ~{VB ~^VB_MfMa |VBa |VBbSVBd}VBk |VBl8 VBl VBl VBl VBl VBl+ VBlVBl!lR"l(lCMlNlSlQ\VBllVBllVBllVBlslslyl\}lVBlVBlVBlVBlVBlVBlVBsVBuVYVBuyVBuyVBuyVBuyVBuyVBvӁVBvVBvVBvVBvVBvVBvVBvVBvVBvVB00$|! "!TADATADATADATADATADATAvVBvVBvVB6L   `qw7xAyNyyyCCCCC,CQCSC\XC|ZC fCfCUqCrCsCxCkzkkkk'kKkTkfkfkx'%}}LdZ.SSvS|@8 wVB BxVB |VBitt`t`tt t8Ttō,tōwtȍ8 tȍtȍ`tʍ8TtˍstˍHt}~0`(`(ÐHXԒԒԒԒ7!Ԓ#ԒxQԒWԒWԒqԒLqԒ[qԒVsԒ;xԒԒ}ԒԒR:.. .8.K. L.^.q.Bx.y.y4w#VB#֯VB#VB#VB-VB-'VB-(VB-?VB-VB-[VB-VB5|VB5VB5VB5^VB5fVB5ٱVB5$VB55VB5QVBpsu v9B \q Pw x z ?S@SAS}. ,l,zv4u~ 8r= &lE:1KV1oV1p1q1r1s1t1u1v1w4}V6L V6xQV9`V=KrV?yV?VBVC\}VCV\D \f^W^hp!Rh!^h&h'}s*:2^/K^J^P^:=y?; ?Dv@ :iw< vww}^^}. Ա2&BԱ&BԱ(BձAձSDձWA^ֱfaBoC 4v0 ^0# ^0^2XChD `;E42&B&B(BfaBe;EX* Ѳ:FZܲ""(ܲ#ܲ#ܲ`ܲ)dܲGdܲ@waK3a[M3aVNfb2bG3c2 6cIqcd?!4d)&< d;5@dfe&6e&6eM4eM4eZe$3e?3f4vft:fy:gg<gggggg,gCgRggggg}9iFllmlE:mo:dp# *ph;p &>pJ,<pK,=dpZpiw< pvwpwppy?py?py?q:Drk r@r"& rSr,} r r rC@lr 6s2s2 6s.2sk=ds}*wDwDwtEwL wk w@lwBwjwBxkFlxkFl00$,:;rW{%Ps3|j4f|r,d z4 } @~; f2; v2F }K VNfr +} ]c ] `b" Kq2 J+3xx{ LZ$@dXRy[M3<w }%S4v&e _M%z}.1yDL@2:h;284e"4@L_Ml'5n X5zz'5@zzW6` V` `v@.xXR[ S[ @S[ AS'!%0!# 46!}6[!}4! 6#yb#'#L(#}X#t!7#Oq<# &( &,G &@7 &oKN  &pKP &yL &zM & &KJ&`;&thu'x9\'d(jLSj(yQz(#>((9B( (xQcX,.,,h9,l,zv,Oq,hy-xT.@JH2d4:;w:YMaRK:SKq:dT:ZK^fE`WRE`PZ^F`8F`WN`@J3ax}q"3a~s3ar|4a` V6ai6ak6ajp6a8d6a8h^6a8f&7a9axlD9ap|9anNBa8"5dh:dh;:dl;:diw< :dvw:dw*:dwdv>ep<ev=d$ep!eDfT=afZkf`;>kfKq?f; ?Dfv@ f]\g.\ghy kzVB q}h q_M2qW@7q 7qq@l7qsuIqAVqMA^\q srr%s@864sUs%s"& tL tyB$t_ 63ukM3u^n3u_3uIq4u%!,4u;;4uH; 5uZ5uph5u% 6u" 6ut:7u`"V9uX>u>uz>u>u#>uu'>uU(*>uT[b>uN`6>uIq00$! "!TADATADATADATADATADATA>uTqx>u!t>uAy>u>uL>u% ?ud<@u# @u`xBuW!Buq!Bu":BuCuzDusDEudGubv vqvXuCvP9wKrwrwd(wJ7xsx+yAyNy zSyTy`y%Fy%y]ydry@ _MChKqD!! &!p:LdZ `}t`(}6S|@h~DHE4YEw }EXBd j(_FlaFZ9}w * 8B pB  0 B o`$s}2d?!:fNY 42l'4D  D"0NY 42n X4D  D"0Y 4ӭJz'4ӭDs.@ft:@  D"0d;h  D"Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z ds.| DEe    *1  ˕03 "   ˔Ӕ ʥ7ft: Y ZW D`@o@d?!@aVN@  D"04'h  D"8w *eB 8  oaVN"`0d?!Y R!  D  D"0le&he&hc2 h\s2 h.  D"p *) l0, *) $ )*)0,40,6 Y -Z#t! -De?@o@ft:@s}@  D"0H4h  D"Lw *f f ! fP ŀ)Bos}ft::e?Y mz &@ mD@`@:@}s@ձS@}@@@e;@h&@ձ@h'@ X@zձW@X@e@,l@,z@}@4@ 8r@֯}@'@ƭJ(>ƭD  D"0yuh vh yY 4R,h4Dph@d;@aVN@  D"0|g}h  D"* 5)%Eefffff f% EDD%][%><  1 aVNXd;^phY JRK Dq:@i@  D"0mlEh  D" Mwiq:Y :SKq D  D"0&moh  D"*  DP5R RRR Y RT DmlE@o@aVN@  D"0*lEh  D".w *eB 8  oaVN*mlE Y 4mJ:dh4mDs@d;@  D"0phh  D"e( 1  `((   >: 5s<w  w1  %,,:4  d;phY ΥBep ΥD @  D"08pJ,h  D"< 8   **$ Y ΥJev ΥD @  D"00pK,hskh&  D"4 8  ** Y ΥjDfT ΥD @pZ@o@r,}@f@  D"0D 8rh.:h  D"Hw ) * w46l0 o pZ,r,}0fvY >ƭZ(#>ƭD  D"0yyphyyY ΥZkf`; ΥD @d;@m @  D"0p  D"Z8Ae f"( UCɗ+e$&% 8sDsY Ra Dq:@i@o@  D"0Ѳ:h  D""w *D  woi q:Y z &, D)HN<&`H)H>[XH)^H<&%H WWH&CyH\)KH<&H(yH)nEHz)sEH<&KqHTH )EH( HL[;H&{PH`[8HHWH&{Hd6&H%kfH%ZH@d&Hz|'H qH'ąH |H)H#)H4)H%H PdH :H )_GH)LgrH)HWH)TyH$z'IRH&{ZHWzH@'H)H0)GH%wH@%xH [#H%CH )2HH4) H,)BxH) H-<&%tHz<&9H `H$)[MH &H %HB)pH<&pH<&pHWwH (H 2&H(d(HWwH i^H` v^HZzt!H)w H.)H)PH8)KqH,{hH4'HF xsH[YHtw(@w BwDwFwHw&-H 6lF8sY 4=J@4=D X@K@  D"0'h  D" 8eB   XK0Y vz &yvD  :(}h:`hh4fahxGP}h\h@Ѳ:hX:Zh:h}h @hPz=B@=F\JN:R 8rV@Z`;^Ѳ:X^wwwwwwwwwwwwwwwwwwwwwԱ2&Ա& Ա(ֱfa2&&( fa$y(?T,GP}0wBvF;VNJ,lN,zR4V֯}Z X^ձS"^wwwwwww22XlE K'ձW:syh^`;hԱ(hh`rhBiwh2 hb:hjvwh6hp!hyh*:_hwh:2Xh w:6  66,6^% N a Y vz(jLvD:(}@:`@@fa@`@:@}s@GP}@\@Ѳ:@:Z@ձS@z:@}@@@e;B F{H$9KH}xH$9;H%{!H:GH H}D;Hz:qH:H:qH,wfH:"qH:&qH:&H:$qH:.qH:(qH$9YH}H&$9 H$9YH:WHPz:a H$9YH,w{H ~sH:TqH:RH$9H}HU$9ZZH:H :H:t H:qH:H8:Hz$9CfH$9DfH ~H:H:H ~sH$9Z&H$9bH$9`&H ~H$9kH$9{H<H$9~ZH,wHz:q!H $9ZH$9ZH}`H`:-HA{0H $9ZH:x HvH;LH}4H ~sH:H:H wvHz:!H:-H:}H`}Hj$9[H$9'H$93H$9[H$9H$9H,wWH:H$91H$93gH:Hz:-H ~$H@:H5^HlH5fH :#"HuVYH}yHR}H;E{H?{pH$9rH$9&H}Hiz:brH:crH$9fHt*bH@:krH $9H:vrH@t*H5ٱH w+H:rH}pHk |H:rH :rH z:rH:rH0:2H:rH8:rH} HD$9BH5$HlH55H}8}H%$9g'H$9n'H<_Ht*zHz$9sH$9H$9H?{pH ~:H:[KHkZH}qHV?{Ht*GH$9'H$9H$9H$9H$9 Hz}V}H9}H H>:sH :sHx}]}HA}UqH6: sH:#H:sH }c}H@*@wH5QHw:dH:KH?{@Hz:KH$9H}H:} HS:3H@:{3H:|sH }H<:sH`:sH*wH }H=:sH:sH:sHz:sH0:sH ~HT;8H:sH:KHlH $9CH:KHH}!H :H$9VH$9XH ~ۑH:sHPz$9|H:4H:tHT;wH$9.H:-tH`:,dH:1H}|H :74HwHwH-[H}`YH :vH$9H$9H:n'Hzl+ H#$98H$9H:owHvӁH:H}HT:wHP:H:wHt*H }ZHz6a8>D @[xQ@[Kr@[}@[@[@o@[`@ Kr4ɪ2qhɪ3qhzɪ#qhɪ;rhɪJrhɪ3&hɪKrhɪ#&hɪ2&hɪ;'hɪK'hɪJ'h 4Twh4P t t tK0 Kr5R  J1 r- ;Dt-E U+UD, q   E "[}^[}d[}~[xQ4|5   D E E5$[xQ EWX 52 / & 4 &9 &9U3uE uUw [|5   uE uU5`AU & E& & E& De&fr[`` $̋"5 & & & & De&fH ̋E U6[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N 8Y >z6a8>Ds@[xQ@[@[`@ Kr4ɪ2qhɪ3qhɪJrhɪ3&hɪKrhɪ2&h:ɪK'hɪJ'h 4Bwh4 K0 Kr5G  ?r- 2Dt-E U"UD   E 5   D h[xQ|E E5[xQ EWO ,) &  4 &9U3uE uUw5  [|  uE uU5`AU & E& & E& De&f $̋"5`[`N & & & & De&fH ̋E U$[`ws KY >z6a8>D[`@ Kr4Fɪ3qhɪ3&hɪKrhɪK'h 4wh4K0 KrJ5 5 5 2  UE5  E5@? & E& & E& De&f $̋"5 & & & & De&fH2[`r[`| ̋U00$! "!TADATADATADATADATADATA TY >z6a>D @[xQ@[Kr@[}@[@[@o@[`@ Kr4~ɪ;rhɪJrhbɪKrhɪ;'hɪK'hɪJ'h 4wh4P t t tK0 Kr5;  31 r- $DUt-E D, q  E E Ӂ"[}Z[}`[}t[xQ|  E U &W2/ , & 4 &9 &9U3uE uU[t|.5`.U & E& & f&ËDef Ë )̋E U<[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N bY >z6a>Ds@[xQ@[@[`@ Kr4hɪJrhɪKrhɪK'hɪJ'h 4wh4 K0 Krl50  (r- DUt-E D  E E ܁^[xQ E U &W)& #  4 &9U3uE uU.5`.[b|U & E& & f&ËDef Ë )̋E U*[`ws KrY >j6a>D[`@ Kr4BɪKrhɪK'h 4lwh4K0 KrF5  5 2  UE   pE U 5@*& E& & f&ËDef Ë )̋U<[` Y tz9axtD @[Kr@[}@[@[@o@[`@ Kr4ɪ3qhɪ2qhɪ#qhZɪ;rhɪJrhɪKrh 4Twh4P t t tK0 Kr1 5  :5:UW' % ,  E5  [}<[\[}L|   E5 E  W5  ,E 0[ EWX 52 / & 4 &9 &9U3uE uUw [|5   uE uU5`AU & E& & E& De&fr[`` $̋"5 & & & & De&fH ̋E U6[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N .Y tz9atDs@[@[`@ Kr4ɪ3qhɪ2qhɪJrhɪKrh 4Bwh4 K0 Kr5  454UW!     E5    E8[<|5 E  W5  ,E  [ EWO ,) &  4 &9U3uE uUw5  [|  uE uU5`AU & E& & E& De&f $̋"5`[`N & & & & De&fH ̋E U$[`ws KY tj9atD[`@ Kr4>ɪ3qhɪKrh 4wh4K0 KrB5  5U   E5@? & E& & E& De&f $̋"5 & & & & De&fH2[`r[`| ̋00$,:;rU ZY Tz3ax}TD @[Kr@[}@[@[@o@[`@ Kr4ɪ;rhɪJrhɪKrhB 4wh4P t t tK0 Kr1 5  *5*UW  ,   E5 E  [}<[\[},| Wˇ5  ,E [ E U &W2/ , & 4 &9 &9U3uE uU[t|.5`.U & E& & f&ËDef Ë )̋E U<[`T)aw 6  w  e 1 w 0" , 0o4[F[KrJ[}N Y Tz3aTDs@[@[`@ Kr4ɪJrhɪKrh 4wh4 K0 Kr5  $5$UW      E5 E  W8[|[|ч5  ,E   E U &W)& #  4 &9U3uE uU.5`.[b|U & E& & f&ËDef Ë )̋E U*[`ws KjY Tb3a~TD[`@ Kr4>ɪKrh 4pwh4K0 KrB5  5U   tE U *5@*& E& & f&ËDef Ë )̋U@[`Y mj& mDs@s@; @c&gr@o@  D"0Xhfy:h   D"w ^B C DBe ?D1 'UBe(e$2eo sHc&grRsP| 4%[]%<>  1 >ߋ J(; FsFY Υj7qs ΥDs@ @xk@s@i@  D"0rChwh*  D" 8   *  4 6 BeeD&& \Е- Е-' Vw D  &pWtЕ. ce  Е:   B%  & G`ЕJЕAЕNЕFЕEЕBЕMЕi>:<XݪKAЕRЕAЕPЕRЕMЕAЕYЕJЕUЕNЕJЕUЕLЕAЕUЕGЕSЕEЕPЕOЕCЕTЕNЕOЕVЕDlЕEЕCY z.D:`@:Z@:@Aׁ  `)9H%EKQNdi%vhlAP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e & <:: ,: 6<( x:`j teЕ A %& eA Е A EA EЕ A A   $Е. : :_x *: 2[(}Ha}T@Qf[(}~[(}0 AЕ;    :ZY t0B t0D ke(0,@,hC,h ke(0e   Y XzNy XDNHQHHNBxH BxHQHN:dHBxHHN H  :\}hNt!ht!hN\}h\}ht!hY t02xxt0D "$CTh & @ @Y B*`Dܲ`@ ke(0sh ke( Sw ܲ`Y XJWXDܲ#@ܲGd@ ke(0<Wh ke(@ Av wܲGd>ܲ#Y B3DܲGd@ ke(03h ke( C &qFre @AE2cD! D2rܲGd|8 HY J4fDܲ#@ܲGd@ ke(0"4fh ke(& & CC w ܲGd$ܲ#zY t0B t0D ke(0 @,hC,h ke(eY JF Dܲ#@ܲGd@ ke(0.F h ke(2> qqqQѕwܲGd0ܲ#Y J;VNDܲ#@ܲGd@ ke(0F VNh ke( RRRwܲGdܲ#Y rr +Dܲ#@ ke(0D+h!!hh2+h xQh}h$r +h ke(H97; uwy{D& fW#v&wFܲ#Y Zbs;D ke(0V9phBYh@;(hv8h:h ke(Z L@W @@@ 8@ A Be   @  @ A@@K@P @Y ByXDܲ`@ ke(0,h ke( w ܲ`fY ~Z~Dܲ#@ܲGd@ ke(0.Qh,1hHwh ke(` e BBCC w qqq0 fqC Q IܲGd4ܲ#VܲGd4|w C Q Qqwܲ#ܲGd2ܲ#|Y z}Ds@ܲ#@ܲGd@L @$9΅@w@C,@ ke(00h}h ke( j  2@  e ' w  /*jܲGd"C,8w>L lܲ#ps |<   e$9΅Y HJTHDܲ#@ܲGd@ ke(0 `Th ke($ & w ܲGd"ܲ#Y XJXDs@ܲGd00$,:;r@ ke(0,Cph ke(0 & & &&&ܲGd,sY R%Dܲ#@ܲGd@C,@ ke(0%h ke("  w ܲGdC, ܲ#Y z}Ds@N@N]@ܲ#@ܲGd@ X@NBx@N{8@N{@$9΅@C,@ ke(0}h ke(   *e  f w  NܲGdC,N X$NBxDN{PN]ZN{8^fhܲ#lsrs~$9΅ | e Y XZ1yXDN@ݩ%@ ke(0XN]hN{8hN{h ke(\&&&f&f   ` % s*N.ݩ%Y JDܲ#@ܲGd@ ke(0{h ke( _w ܲGdܲ#,Y R` Ds@# z@$9@ ke(0s&   (w  *ܲGdC,$(*ܲ#.s4N8ݩ%Y R[!}Dܲ#@ܲGd@C,@ ke(02[!}h ke(6  2 w ܲGdC,4ܲ#Y J֯L Dܲ#@ܲGd@ ke(0q!yh ke( ew ܲGdܲ#Y J֯Dܲ#@ܲGd@ ke(0q!h ke( aw ܲGdܲ#2Y  > Q Q Q IwܲGd<ܲ#Y W &=e e@ B  $ݪK6d;Y ZD z@*@ \q@4u~@ ke(0<}h ke(@& %NBwA & fww z4u~2 \q>*Y tjf]tDs@G> @$9s@GVN@:$@:4F@ Rhke(0 &)_& & &  & && && Ε 61& 1)ȋ& & & ,s.G> 2GVN6:$B$9sZG> nG> T|& & & & & & Ε00$,:;r 1 &  a@ G> GVN:4F6G>  Y ZsD,0z@ܲ#@ܲGd@)%@ ke(0Zgh ke(^&  & e mw&f&fe  s&ܲGd,0z)%,ܲ#B,0zF)%Y R q}Dܲ#@ܲGd@C,@ ke(02 q}h ke(6  2 w ܲGdC,4ܲ#Y BձDܲGd@ ke(0pIqh ke(t   _(  ?f'& f' ?E@@ a B 0e  ܲGdY RձDs@ܲGd@ ke(04Kq hKq^h ke(8KM & & &&& ܲGd4sY BsrDܲGd@ ke(0.srh ke(2 e@AB ܲGdY Rr%Dܲ#@ܲGd@C,@ ke(0r%h ke(  w ܲGdC,ܲ#"Y tJs@8tDܲ#@ܲGd@ ke(0s@8h ke(  eCBBaIBBJbCBB ɒɐBܲGd| & &  wܲ#Y J#DܲGd@ܲ@w@ ke(0Yqh ke(  wܲGdܲ@wY XRUs%XDܲ#@ܲGd@ ke(0(cs}hUs%h ke(,Q &wܲGd*ܲ#Y BձzDܲ`@ ke(0[qMh ke( /w ܲ`Y zxDlOpH)H)H)H)xH)p H)%H[ H)` H)p H)5H ke(0Y Z9wKDܲ#@E4d@ܲGd@C,@ ke(0(9wKh ke(,  wܲGdC, E4d*ܲ#Y zrwDs@ܲ#@ܲGd@L @$9΅@w@C,@ ke(0rwhrwh ke( p`  2@  e *  w  *pܲGd"C,8w>L rܲ#vs&|/<   e$9΅Y tJrwdtDܲ#@ܲGd@ ke(0drwdh ke(h e ICBBaI    B wܲGdfܲ#Y XR u~XDܲ#@ܲGd@ ke(0&,u~hwu~h ke(* =w =w ܲGdܲ# ܲGd(ܲ# Y XRx+XDܲ""@ܲ#@ܲGd@ ke(0vx+h ke(z W#0A %+B%&AB`B`D&  B~> ee Jb"b "╫w HܲGdpܲ#xܲ""Y J XDܲ#@ܲGd@ ke(0&wh ke(* GwܲGd(ܲ#Y RyDܲ#@ܲGd@C,@ ke(0$yh ke((  wܲGdC,&ܲ#Y Ry Ds@ܲ#@ ke(0@Iqh0y}h ke(D B (W/ D  7 f& 00$! "!TADATADATADATADATADATA}w(sBܲ#Y zAyDs@ܲ#@ܲGd@L @$9΅@w@C,@ ke(0AyhAyh ke(      2@  e 9ܲGd"C,zw|2       w   /<  L Vܲ#Zs|$9΅ eDY rSyD5!@5 @ @@@ ke(0 Xhݩ%hwh< ke( ,#b3!  b3!a & > >265 : FX |Y Jy%Dܲ#@ܲGd@ ke(02y%h ke(6 @  EwܲGd4ܲ#Y Xb #XDܲ#@ܲGd@ ke(0Zg(0y@h.yhX:` Zg( e2w 7 Nw&f&fCDEe  > ܲGd X:`0ܲ#:ܲGd>X:`BX:`HNPܲ# dX:`(|   cs X:` Y J zDܲGd@ܲ@w@ ke(02sh ke(6 X eETETwܲGd4ܲ@wY J 4fDܲ#@ܲGd@ ke(0z4fh ke( -w ܲGdܲ#Y Ry%Dܲ#@ܲGd@C,@ ke(0y%h ke(   w ܲGdC,ܲ#Y Jy]Dܲ""@ܲ#@ ke(0Xy]h ke(\@$A E& & B ?E@  D Q w% Nܲ#Xܲ""Y JydDܲ#@ܲGd@ ke(0ydh ke( w ܲGdܲ#Y Ry@Dܲ#@ܲGd@C,@ ke(0y@h ke("  w ܲGdC, ܲ#Y XJT,XDܲ#@ܲGd@ ke(0'%h ke( w ܲGdܲ#Y XBLdXDܲ`@ ke(0Ldh ke( w ܲ`Y bSDܲ#@ܲGd@C,@ ke(0TShSvhSh  ke(XKM&     2 &wܲGd&C,Vܲ#Y XJ|@XDܲ#@ܲGd@ ke(0@|@h ke(D &  eq B C1GwܲGdBܲ#Y tztDs@ܲ#@ܲGd@L @$9΅@w@C,@ ke(0hh ke( x  2@  e .  w *xܲGd"C,8w>L zܲ#~s.| /<  e$$9΅^Y 뀻jjM뀻Dܲ""@ܲ#@$99@ ke(0`h&`hy`h y`h ke(& @EA:% NP& @5A E& B _"E@  D Q 5E,|w+w E  ܲ#ܲ#$99(ܲ""Y BxDܲ#@ ke(0 ÐHXh ke(& 1w00$,:;r ܲ#~Y :*D ke(0*h ke()Y Jܲ#Ds@ ke(0ܲ#hܲ#h ke(sY Jܲ`Dܲ#@ܲGd@ ke(0ܲ`h ke( &w ܲGdܲ#Y Jܲ)dDܲ""@ ke(0Lܲ)dhܲGdh ke(PC & ` `Ba#   L Lܲ""Y Bܲ@wDܲ#@ ke(0(ܲ@wh ke(,CC    &w*ܲ#vY <:ܲ""<D ke(0ܲ""h ke(& >Y XzTy`XDNHQHHNBxH BxHQHN:dHBxHH N H  :\}h>Nt!h>t!hN\}h\}ht!h   >>> >|tld2Y tb!tD)@4@@W@<&e@)p@ 4@h 8w &&E  AHW )p)p<&e)"4&<&e().)p2)p$Y Xz!p:XD$9 @)Bx@)p@W@t<@ @)@)Ps@:@ @h Dw   . ʥ:W:t<) )Bx$ *)p<$9 >)PsY tz! &tD)@)Bx@$9~Z@)p@W@<&e@ @)@)Ps@t @)p@:@ 4h w    j2-  (@ep@ D  e  ` e RW $9~Z")Ps.:4<&e6):t <)B)BxJ)pP)pT b:F|     R#R- )Bx:& ,)pY B @~D  D"06ݪKhih  D":&  m  f A N  %NY |S:=|SD Cx0=h Cxf&f ` *  !נ נ  נננ"D נaנz E ѐEp(p| נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A t  &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ;00$ ! "!TADATADATADATADATADATA fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0`lנ9נAנZ נ_ נ:  Dנ"  0Y |RB@=|RDd@ Cx0@=h Cxf&f E^`  UQ  UQ ËUI U `e |ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRtpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  |dȀWC E Cs Ε f)& 6 l(*  E 'W " =lN  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 eY XB%PsXDs@ K0 ""h K$'1sY N@B:h;N@D  D"0@d;hm h  D"D&   `@ ` B   & A @    Y ΚXb9}ΚXDi(Pi Zi di .tՕ: @e e0e0UiY 0zܩu~0DݪM@ݪK@W@i@ab@ Zg`Zg(0ܩu~h:h::"h Zg`< Zg(w &fe&  w &ff=elC    5p  d  W"W`iri|  A &@d &@ &m M M` M`5u  @ @ e@ M`u 5`2ii$i0i:ݪKFݪKRݪKfݪ00$,:;rKBW @ `u  #;eu o eA eS S S B CeS S S A eS , ab HZg`PݪM ^Zg`fݪMxݪM0tS S B ee Zg`ݪMY ΚXBתZΚXD Zg`0תZhabh$ Zg`4JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECY X:i XD Zg(06i h Zg(:&f!  E D  E E C B Ί AY XzXDfH`fHH fHH p&H fHjzHxfHfHKH fH " 5H fH@ Y NBi(ND@ Zg(0ni(h Zg(r AUUUU    T T T T ee(e(e(e(T $)T T TU U U U  ~Y Xz#'XD)@:Z@)Ty@:@[Y@[Y@)@)Z@)W@)W@[<}@o@:Ա2&@[(}@)X@ Zg(0dh Zg(w EH  P A Е:%ʋ B   5Е" e pe d\o)))X":<)TyNԱ2&`)W[<} n)W[Y z[Y[Y  z|Е"A 2 A (A Е.A Е;A      HХ"Е" B)W[Y )W)W$)W0)<)ZB:ZN[(}vY tX:#}tXD Zg(0yh Zg(&3Y MN[[e D(e:(C(  5oNltT; z|@5*6 T @2ȋ eT5 N ) @   J 5 w DC u $g2gCXgbgCtgw  E  @e:(w5 CD>%  6  p + k5e d .gJgXgfgt^ [U5@ D( G uɥ;5<5-Ԩ  5@ u $9!*gR.g:gvg5 Fɥ@5ub , 5w E 5 @  @8jMAB *g:g<V`NKj$9!lAe @&PPP@C&5A  88Ue  28:sDѲ:HT; zP$9!\:hѲ:l:brxѲ:|8 "@0 *_%`AB w@ 8 T; z( N$9!Z$9!ngY :%%ȕp*f  D9x9x*@:=Hc&_MT$9pwVs\T;w^s00$! "!TADATADATADATADATADATAtux=tȕp* eBEETH EBe Z5    O 2e(5 @&B &@=DgT'Zgdz`B 2=2 D(:(@$8 &SY e2edE_$8$8$8lw $9!D}sJwRoVsZ (`Xh}s~Ա2&du46 D A(! ! (*A8 @&s eB<B7 pB!# Zp *pB   dw ɥ ɥ   ɥ ɥ ɥ@ɥ/ h' $9W" 8r4:"Y o*)TyH)PR$9!T)P`<&9b)h:t nѲ:r)Ps|ep& f P aAAf@pnp C֋ 8Ë7AB`f VT:GѲ:@)pD)pH L)PsP)PX:^Ѳ:b)Pf)Psn)pr)pa`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a`$9pl$9!t Bw@ ŀajTI& af n`V @e,w jj4`&<&9<&Kq<&D ()<)PsD)Psnolj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY <=X@=l e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCe###3X`v)W3 & w  jDl@ TeT5l@ @ L:)P$$9!&)Ps,28o>)PN 8rX)W\)Pt`|sd e  & @ & V An5jP a@@` > ~ @ 8 ( X)W)'}s2' q4)8h'zs. ePa-eP BAnB X/   @   RՀaePÕwePP6 -0P -0Pd-0Ph$9p p-0Pz-0P\)K@>Y XR4XD\s!s@ v4h U9qhdh(Zgh6 M@BCAf } f&  GRR@ 3   &$&~ Vs!s|& e% ~ԥ ~F` F` f&Pe e  @  veT  % % % %% % %@ABCD f @  f% % % % t '&f&f`%  > BBe  00$$,:;r *uuuuFE@aaH~  r 6  < (  .   "    x  l l&f&D%% %% v  % %%l% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u d5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5\  n eY NBݪMND@ Zg(0TݪMh Zg(X @    e  T T T T H1CdT T L $)dL t dL d  FY X*ZKXD \Y j\DDs@c&~@T;@o@  D"0DhDh\Dh  D"% w &Ba +- ʥ# . U 0   b c&~T;s$o*|  `     JY QXR^QXDo@  D"0\h hdh  D"w  w & W+W- Ba. W#  B0  c  c S W %ec e`s oo<|  # 3  & ˥ Z ^C  Y XZ7aXD@S@?S@o@ N.D,hD,h ۩"S Rw w &e`` a  `e`P D 2o ?So@S ۩"S` ,۩"S :۩"S`Y tXzR:tXD<&`@<&Kq@`@[8@)P@[Z@)W@)p@s@BDRFHJHLxNPhRTVX| &- ae  $e  & & & & && & & & &)4  ^b: R &E@ U U @ P J .1 6 (  2  4t  AW A t  %& & & & & & & & & & & & & & & & & & & & tT:t v: 00$,! "!TADATADATADATADATADATA V4  X@ :tP A V @ HI @ :E wAW HAfW l H @ eB   n wL B f  B \   %ww x ^f <D |  U w 6 H L P@ U w  eC "@d U w| t wh t  @44Vt   B B   4 4 H   (B r 4m -c  :  t \%ww H     C    wL J w< K w, B  T w  w x X@ ~wY z4a` D?H"ɪKr@X@""@w@év~@ 46L h Ch C\}h9`hj1ohBh 6xQh=Krh1Kh4}h?yh ~, , t t t 4  ~, ""  "wɪKr X év~ ,  Y zBa8"D c[H [xQH[KrH[KH[}H[yH[L H [\}H[H [`H[oHzY t:ͫetD  ̅ ͫeh  ̅enY 0R 0DB,0zH*sH&5 H.sH([H, Y Zg(0?Th Zg`*ABDEFIMNOPQRSTUXYZ<>zv      " $  &" (&$ &~4& B( >*  l,  x. 0 2 4 6 8 :*: < Zg(w && D¥%  B&ХVA C e!  aebE  Е%*WB> :2 'LBCH    .MAIN. Zg(n 7 $& Lwf@> 07 ԋ_  7 j hz Zg`Zg` Zg`Zg`@y `^ Zg`$$ `^&Zg`&4:t 6Zg`@ :Zg`>FZg`JZg`XZg`j7 E L4  w7 " 2 $  h jZg`Zg`Zg`$Zg`2Zg`   J!     rZg` Zg`H Zg` $Zg`(4Zg`8P )pD)pH}V)p \Zg`d)ptP|Pbp  Zцw    T߇ B܇7ق&7 %n)p)p }P "Zg`$)p*)p.}4Zg`D)pJ)pPZg`fZg`pZg`tZg`i wVȥ ȥ ȥ*  ȥ$ȥ/ ̥/   7    . Zg`i P)p)p2Zg`dZg`zZ ¥ ¥ p R $  ~ P$ &)p*)Ty.)'2' q4)8' q:)><&e@) DZg`F)pL)pPhp! XZg` fZg`$n@ tZg` U N 00$<! "!TADATADATADATADATADATA1ȥ9C ʥ ʥ ҥ@w Vp @ Zg`P 8r Zg`"P&:DZg` rZg`V~=|L  \fdwȕ e 7 5j1-C 7 | Zg`Zg`fZg`d Zg`&@=4P8)W " @>    (zZg`Zg`Zg`Zg`Zg` Zg`(&Zg`DZg`J:LZg`@ PZg`>VZP `Zg`n` tZg`^( 4A Е.) ыѝѝɝwы@>4 t&R Zg`()Ps Zg`A: "Zg`)0M4M8MH:2JZg`@ NZg`>Y tR$ep!tDs@tCyH c&|KH6T,HkxH!)pH ,R"H L H0{mH`qH a9H"-DH)XHaKH #{8Hz)jdH 7{ HT,KHc&RH'(ZH0{H(lH tyH(zH@.8H,yH .Hc&H0{DHlSHzc&WH:#0H#0H4{*LH#0Hs,XH@#09H [t{8H3^sH)VHc&XHGc& XH?tBxH.yH (Hz)\}H-EH#{8HtsH3sH0{9H#0HtsH.{H)ZH #z zH.yH #0LHc&dHAkH'z-0H0{H0{Ht H#0DH0{Ht8Hs`XHn]H #0vH# zH0{nHl!H #0MH c&jLHz#""H#0H)VNHԒLqH4{MHԒ[qH-01H40wHn^HlyH(WH 3jHc&pH#0)H c&HKz#04H c&pH#{mHT,HԒqH@CkzHc&XH7Ԓ7!H c& H2uNEDH NY NE2>uU(NED©#H NY NE2>uTqNEDOH NY NE2>uu'NEDH NY NE2>u!tNEDuT[NEDH NY NE2>uAyNEDȫ H NY NE2>uIqNED H NY NE2>uNEDjuNEDpŜH NY NE2>u#NEDH NY NE2>uN`NED(XH NY NE2>uNEDJH NY NE2>uzNEDi5uH NY NE2>u%NEDt!H :Y NEz3u^NED5 @@@ dhPhHh hHh Wh hRWh 00$T,:;r h  @ &e6% 4% 4%04 f   w eF w 5 >RX5 fY N:7xsND5 @ $7sh (e6@a "H5 Y AWJdvAWD&s@s@  D"0p &h  D"eff Ne(   #llD eJ Ԕ %:ԕ: sJst|f& f&f& & Ε lle  lsrY >ƭB(>ƭD  D"0yVuh yVvY -B0!# -D  D"0eMheMh  D" :Y mZ&`; mDs@; @o@  D"0Xhfy:h   D"w CB C DBe ?DBe(e$2e  %[]%<> o s| 1 >; Y 4-J,l4-Dg}@o@  D"0 ,lh  D"w  wo g}Y 4-J,z4-Dg}@o@  D"0,zh  D" w wo g}$Y 4Z:dvw4Do@aVN@\D@  D"0pvwh vwh  D"w *D !UqqC ӥ:  Ce   *o\\DtaVN|Y r:dw Dpiw@pvw@pw@o@aVN@  D"0<}sh p# h*s}h  D"@eB  8 $&w *   aVN&o0pvw6piwB=>D&@=@ Cx0=h Cx  @=NY 2,d D  D"0RY 'bK VN 'Ds@s@o@f@  D"0aVNh;VNh  D"w BC "&0*5e "fSYqq1յ<pBՋ.p0po&s$|2*E%0*w s"fNY Υ2  ΥD  D"0Y 4grw4gDs@r"&@q:@w@i@o@f@  D"0 `h  D"w *8I *=)98 eB &&  U **o"w8ihq:|e *Nlv ΋*.)  & #!)&ePe && 2i^s~q:p* wr"&fY %b& %D @q:@i@o@  D"04ch`rh  D"8w  )  U o $i4q:Y Ze Ds@q:@i@f@  D"0rcIqh  D"v0f& e %&&eH U   Ef p  ws8i`q:tfY00$\! "!TADATADATADATADATADATA Zz Dq:@i@  D"06eZhrShft:h   D":    f u    i(q:lY : & D  D"0h  D" Y gz, gDe&@py@r@r@pJ,@o@mo@f@  D"0}h  D"w ) 8C * ) *w*  ep p &o pJ, rNfbpyje&| ȥC  =  ȥ 0*ȥ = Eե^ Aȥ e@ v Ep |p  , J *` tr2tC#   D moY gr,hy gDe&@r@pK,@o@mo@sk@f@  D"0 h  D"w ) 8C * ) *w* ep p  ȥ o pK, rNfZe&|C  =  ȥ 0*ȥ = Eե^ Aȥ e@  Ep p  8 V *`)w jskpr.tC#   D mo Y 4zE`W4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@Rf@@ft:@fy:@cIq@s}@  D"0Fhp!h  D"w  D 8"!#($ĥ ĥ w  0 o sfy:|*0 @Q$    0 40 60))   wx#  wf&*w #( P) @#0s}Jft:\cIqveZ**fff  &*wF. J358e$8w22&e   d?!0eZTsrszt%p8q #( *O*)@#0l @# 02ȕ8 *r~b00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u # eB&Dr,}binq:lB B * eBe>  # #D #&0 rSmlEr"& ib#   0@e 6@#040 6w!p2"q:LfDY 4zE`PZ4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@baVN@f@@ft:@fy:@cIq@s}@  D"0b^Whh!h  D"w & w  D  8"!#($ĥ ĥ woos fy:| 0 *0 @Q$    0 40 60))  eB   wx#  wf&*w @s}LaVNfft:xcIq#( P) @#**fff  &*wF. J358e$8weZ  # #D q:$rS,m00$d,:;rlE0r"&q:hf,Y 4zF`84Db@s@r"&@r@q:@i@o@r,}@aVN@f@@fy:@"  D"0h&h  D"w  D 8"!#($ĥ ĥ w 0 o sfy:|*0 @Q$    0 40 60))eB &*   w. . ,358e$8w6aVNrs22&e %p8q #( *O*)@#0l @# 0sHr돀t2ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @  bbr,}u * eBe>  # #D #&0 iq:r"& ibl#   0@e 6@#040 6w!p2"q:LfY 4zF`W4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@RaVN@f@@ft:@fy:@cIq@  D"0Lh'h  D"w  D 8"!#($ĥ ĥ w 0 o sfy:|*0 @Q$    0 40 60))eB   wx#  wf&*w #( P) 6aVNPft:bcIq|eZ@#**fff  &*wF. J358e$8w22&e &d?!6eZZsxst%p8q #( *O*)@#0l @# 02ȕ0r돀8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u # bJr,}hitq:leB&B B * eBe>  # #D #&rSmlEr"&&ih0 #   0@e 6@#040 6w!p2(q:Rf.Y =Z:dw =Ds.@D@o@  D"0zpwh wh  D"w *  )Ĕ%.&%;D  5)5@DD ͥ*Ce a%wUX5@ o^D|5U U*U  5@XU@5 U*U  ʥ*%C!.D` *weC5U5  5 5@e s. t* Y jafZ De&@e&@r@c2 @w@aK@  D"0`pZh  D"d 6 p 4 0`p f 64 46 e*w & e&,w:c2 HaKNr\e&Y Ӎz\g ӍD @e&@py@r@r@w@w@pJ,@o@mo@r,}@f@"  D"0}h  D"w n832cd& & & B  2OΕ   N Υ$Ε  2o pJ,|2Υ   v Ε f e * e*w &mo>wTr,}` pf|py*0, @  ) ) ȥ ȥ l 0l  ȥ r*e&8 tȥ ȥ ee@ v00$l%r "!TADATADATADATADATADATA/ h( E ep ) w ȥ,  N w  J B # f  `* w)&r,}$w0rJmop tf"l0406 l0 Y Ӎz\ghy ӍD @e&@r@w@w@pK,@o@mo@sk@r,}@f@  D"0n h  D"w n832cd& & & B  2OΕ   N Υ$Ε  2o pK,|2Υ   v Ε f e * e*w0, &mo>wTr,}` pf|r<  ) ) ȥ ȥ l 0l  ȥ ćȥ e& tȥ ee@ r- d& E ep ) w ȥ,  w|r,}  JwB # f  `* w)0406 l0 wsk.moT XflY r7q Db@wt@rk@wL @bG@s2 @  D"0<rhrh  D"@e6p 4 8  &s2 "b*bG.rk2wL :wtY :\q D  D"0hr,}h  D"l. 00l  0 *Y Js"& Ds@@  D"0Nr"&h  D"R82e& 0 0 0 80 B0 0 0 0)#0.s"Y 'RtL 'Dq:@i@  D"0 rkhwkh  D"$ U4 6wi"q:fY R$t_ Dw@aK@s2 @  D"0rh  D"&4&6 64 wr%64 2 6  l0 & Z46 64 :s2 6s2 paKH|)0406 0 *0e6p 4 @wY Jw Dw@f@  D"0wL h  D"" Bfep`pww f(Y 4Χr4ΧDb@wt@bG@wk@a[M@f@  D"0`whwh  D"d ) !f  e) . e6p 4 08*w&bGa[M&wk2wtXbbfY Bd Dw@  D"0wh  D" ) . .w<0Y 3@*@1d=X"p8u:,l\,z &8^W hp! h! h&h'}sDvwcIq~eMeMfy:"p# Dp &pvws}D00%t,:;re ~0!#  &(8&`;"(:,l\,zE`W E`PZ F`8F`W:dvw:dwDdv=Y AWJdvAWD&s@s@  D"0p &h  D"eff Ne(   #llD eJ Ԕ %:ԕ: sJst|f& f&f& & Ε lle  lsY 4j:dvw4Ds@s@o@aVN@\D@  D"0pvwh vwh  D"w *D YTfe<ӕ_ S :ӕ: & "& Ε4'o0s|sx| *'**UqqC ӥ:  Ce   *ssP\DhaVNY z:dw D&p &@s@[;@piw@pvw@pw@o@aVN@  D"0}sh p# h*s}h  D"eB  8 $&w *<O1  U U@  f&" '&aVN&oJ[;^pwpp &|sj|)'* *%0*ND   EU   &ssBaVNZpvw`piwfpwY ej &( eDs@  D"0yyph &hByy y y((  BBFF y rY >ƭB(>ƭD  D"0yVuh yVvY -B0!# -D  D"0eMheMh  D" :Y mZ&`; mDs@; @o@  D"0Xhfy:h   D"w CB C DBe ?DBe(e$2e  %[]%<> o s| 1 >; Y 4-J,l4-Dg}@o@  D"0 ,lh  D"w  wo g}Y 4-J,z4-Dg}@o@  D"0,zh  D" w wo g}ZY Ze Ds@q:@i@f@  D"0cIqh  D"M=f& e %&&eH =&e0  U   E >  sXi4|>E=uf p  wq:2f:Y 4zE`W4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@Rf@@ft:@fy:@cIq@s}@  D"0Zhp!h  D"w  D 8"!#($ĥ ĥ w 0 o sfy:|*0 @Q$    0 40 60))  b w# w&* =*ȥw `p!20s}Jft: EW!p0p22,2 ̇#( P) @#**fff "s:cIqTeZzd?!t &*wd. hB58e$8w2A&e 4p800%|r "!TADATADATADATADATADATAq  (eZ2sPsX#4=A#@)( *O*)@#0l @# 02ȕ8 0&rzbl0ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u # eB&B @r,}^ijq:B * eBe>  # #D #=0/HrS mlEr"&id#@&0 # = e0   0@e 6=#02/002Hq:~# @#?@#040 6w/!0/ l0/!p!0 .=p0p24fxY 4zE`PZ4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@baVN@f@@ft:@fy:@cIq@s}@  D"0v^Whh!h  D"w & w  D  8"!#($ĥ ĥ woos fy:| 0 *0 @Q$    0 40 60))  eB  b w# w&* =*ȥ@s}LaVNfft:w `p!2 EW!p0p22,2 ̇#( P) @#>sVcIqpeZt**fff  &*wd. hB58e$8w2A&e  d?!*eZNslst4p8q  (#4=A#@)( *O*)@#0l @# 02ȕBr돀l8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ ub\r,}zi # eB&B B * eBe>  # #D   q: rS(mlE,r"&8id#=0/H#@&0 # = e0   0@e 6=dq:#02/002# @#?@#040 6w/!0/ l0/!p!0 Pf\.=p0p2Y 4zF`84Db@s@r"&@r@q:@i@o@r,}@aVN@f@@fy:@"  D"0h&h  D"w  D 8"!#($ĥ ĥ w 0 o sfy:|*0 @Q$    0 40 60))eB &*   wL . JB58e$8w6aVNrs2A&e 4p8q  (#4=A#@)( *O*)sfr돀t@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 >b0 @0 &*0 @ u * eBe>  # #D r,}"i.q:2r"&>il #=0/H#@&0 # = e0   0@e 6jq:=#02/002# @#?@#040 6w/!0/ l0/!Vf$dp!0 .=p0p2FY 4zF`W4Db@mlE@eZ@s@r"&@r@q:@i@o@d?!@rS@r,}@RaVN@f@@ft:@fy:@cIq@  D"0`h'h  D"w  D 8"!#($ĥ ĥ w 0 o 00%&:;rsfy:|*0 @Q$    0 40 60))eB  b w# w&* =*ȥw `p!6aVNPft:2 EW!p0p22,2 ̇#( P) @#**fff (s@cIqZeZt &*wd. hB58e$8w2A&e 4p8q  d?!eZ8sVs^(#4=A#@)( *O*)@#0l @# 02ȕ8 ,r돀l00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u # eBbFr,}dipq:&B B * eBe>  # #D #=0 rSmlEr"&"id/H#@&0 # = e0   0@e 6=#02/002Nq:# @#?@#040 6w/!0/ l0/!p!0 .=p0p:f\2Y >b=>D&p &@s@@$9pw@@=@ Cx0=h Cx eeȵe ~ d DE  eVȵ(e &e  %$@A 5 *@=\p &d$9pwfs|5@558 eBeeDeȵee&e e $  QB4.=p0p:f\2Y >b=>D&p &@s@@$9pw@@=@ Cx0=h Cx eeȵe ~ d DE  eVȵ(e &e  %$@A 5 *@=\p &d$9pwfs|5@<0Y $@-v"L3Љ6sBKBv#xx'e.`X.`0y: ty: y:x Te 60qX H0q8 >s88  ` ~HY Xb"LXD#@?T@{@©2@*@ Zg#0*kh Zg#.f  eE   *©2#Ԃ{?T:Y tXb3ЉtXD[ L@jS@d@N`r@ X:Zg#0B2zh Zg#F B` w` w wmf X:[ L X:X: X:&N`r*jS0X:4[ L8dR@?hu~P?h2Y zBvD?hk@?hu~@?h2@/d@?hT[@W@A-@A-@R@jD@?hBx@@*k@ Zg#0ZN`rh Zg#^w E   B ` p 7A @ae  ^W?hBxkA-,?hk0/d4A-6?hT[:A->R@?hu~P?h2TjDZjDY tX:#xxtXD Zg#0"h Zg#&e?E? & f Y<Y Xj'eXD?hk@?hu~@?hT[@A-@A-@R@ Zg#0Nh Zg#R  0 B ` TR RA-?hT[ ?hT[?hu~&A-:A-?hT[ @?hT[F?hkLRN?hu~Y Xz.`XD?hcM@j/d@?hk@?hu~@?hT[@W@A-@A-@@?hBx@3e@?hy@2©2@@ Zg#0~*h Zg#w f 4 & D -N   `   vW ©2A-?hT[ &?hT[,?hu~2?hcM:?hu~H3eJ?hyPj/dTA-\?hkh?hT[j?hT[n?hBxr©2v|DY Xz.`XD?hcM@j/d@@?hk@?hu~@?hT[@Cs:@©Bx@W@A-@A-@@Z@?hBx@3e@?hy@CQ@©2@@ Zg#0*h Zg#w f E  w`K`/ & D -N   vW ©2CQ$Cs:(.©Bx:A-?hT[ H?hT[N?hu~T?hcM\?hu~j3el?hyrj/dvA-~?hk(| `   ?hT[?hT[?hBx©2FY LRy:LDs@@ X:0Zg#0R68h X:A? Zg#VeE & m*  * * *bFX: X: s $X: *X:*6X:*>X:*HX:*&Y <0zy:<0D#@@$9@W@A-@A-@h'@R@?hBx@jTG@lE@©2@:[/d@k@ X:Zg#06;h X:# Zg#vw 7 7 7  W, 7 7 # %* 7 7 W A-A-R©2&[/d?hBx 0k4A-8?hBx ?hcM ?hcM&*03e2?hyXY 0z0qX0D#@?hk@?h2@e;@?T@@ձ@#h@jTG@{@ X: "Zg#0j/dh</dh 00&':;rX:#Zg# vp4e6( d> > p4e6( "B X: 0X:6ձBJX: ZX: rX:xe;J|7 w e)w 7   TX:?hkX:X:?h2 jTG2X:8X:B{#h F?TY 0z0q8 0D#@?hk@?h2@e;@?T@@ձ@#h@jTG@{@jG@jjH@2 X: Zg#0j/dhF/dh X:#Zg# p4e6( xH   H p4e6(J X: 0X:6ձ@jGFjGLTX: dX: |X:^| ,䇷  7 w e)w 7   he;jjHjjH"X:&?hk(X:,X:0?h24jTGFX:LX:V{#h Z?TY LXB>sLXD@ Zg#04h Zg#8B B  @`   B`.Y 0z` 0DVN@3eH Q?hcMH?hkH?hu~H?h2H?hT[H?hBxH?hyHX:j2hA-hA-hRhjTGh X:     &,,:VN>Y 0z8 0DVN@3eH Q?hcMH?hkH?hu~H?h2H?hT[H?hBxH?hyHX:xRhhA-hA-hRhjDh jTGhjGhjjHh X: &&::VN.Y Xj~XDGG@@jS@N`r@ Zg#0\=HhNcMhhB Zg#`   v  m ` @ 8N`r GGN`r jS6N`r:jSNN`rZN`r?hT[H?hBxH?hyHX:xRhhA-hA-hRhjDh jTGhjGhjjHh X: &&::VN.Y Xj~XDGG@@jS@N`r@ Zg#0\=HhNcMhhB Zg#`   <0X  , 1+"+"+"+"+".+"1+"y+"+"L +"r +"w +"Y +"K+"R+"n+"+"+"+"+"J+"+" +"+"+"B+"+"+"++"6+"+"+"+"z+" +"1+"6+"B+"+"0+"X+"!+"!+"!+"9"+"D"+"K"+"#+"#+"%+"%+"%+"`&+"&+"g'+"k'+"'+"'+"'+"'+"'+"(+"(+"(+"v8+"8+"99+"`:+"y:+":+";+"A;+"E+"E+"G+"G+"6K+"\K+"iK+"K+"K+"jL+"[M+"xQ+"R+"R+"T+"#T+"W+"W+"NX+"\X+"X+"Y+"Y+" Z+"N`+"`+"`+"e+"e+"kf+"f+"f+"p+"p+"p+"p+"Zq+"`q+"qq+"}q+"kr+"r+"r+"r+"r+" s+"fs+"ys+"s+"s+"s+"s+"s+"t+"w+"x+"Bx00'r "!TADATADATADATADATADATA+"y+"z+"z+"+"+"+"+"+"R+"Z+"+"<+"+"+"L+"*+"2%% % %k%n%D%%%]%%%%&%'%'%(%,%5%8%@%Q%R%NX%X%Y%kf%f%\g%Iq%Kq%Tq%t%'t%iw%w%ly%y%z% %%%%%ą%Ʌ%%s%%%((z(W(Y(Z(m((Z(@(i(((5WnWWzWWWYWmWWZW@WiWWW5a8a0MaMaMaMa@`a a8aGaGaGaGaHa0MaMa(dafa a`^aaapaxaaaa!a"a"a"a`'a8a;a#;aWaxZaaЉaa avaxayaaa" a> a? a8a:a:aLaWaWaxZa@`a  b?  bp  b  b0  b% b& b' b' b' b' bP2 b: b: bK b@` bePMe-P^i5ui{?i{Mi{_i|_l,x_pŜs`"axR~Z}}N"R~S~)^wl@XO.]\B\O.\aD,N,Nbh c©#,N©#,N©%d4©Ee©,`fz©qqgH©shp©wivé"CRé"RکG1کK?Dݩ[}1ݩ݁BݩPݩ-iXީiX,#j12gk<`"l"CR멀"RWCKqlbSZ?D("P,Pd.3(#m3o7w;hp4;8q=xt=hv=wd@Wm@Ym@.@`m@R~@S~@]f0 zezV4}ɪweTɪhɪh̪a 2ΪWTӪ8}|Ӫz%Ӫ3تWCުE|G@G@WCXC($(E$Sz(m$(XJBKE2IjOw OyR'JS`"S"GrS"T2USZU݁GUU>00':;rU- XRv q.O,NW...VWXRNO6ZX6w8%&''H'{(f(!(")(#+&,u'+U(+,1.v:2DT[+E`4:d5`\g5q<q<Iq9LKqTq+Uq5Vq6!t68Hwdw!w;.)x)6x2D7x@xAy+yy!y!y!;ą;v;9L`xmK&`"  %"%"VH%"W%"<:`TlT!T&T'TRTrTZToT+d&\8v~ëëKqȫ ȫ`TȫLq|˫eHV KILJV&-Zs"T2"PYT}<jY}<jYZGjRj<l l t!s WT) XT) VN @~!:h;!8rw jrx bry rz Dr{ *r| rz4s 1u!1uTK!1ucK"1uK"1uwL"1ux">1ul1un1uo1us3u"3u$3uG%3uK 3ukM%3uS&\3u^%"3u_'3uIq'H3u|qr3uIt$4u%!'4u;;(f4uH;(4ug5uZ(5up)(5u|q5u˖5u)5u$+5u%+5u>^6u" +6ut:,6uMq,N6uw-6uw.27u.7u`"17ub"17u2g19u29uf'29uS9uX2D=ul=u=u=u=u=u,=u<2=u==u'3t=uYH3?ud4?udJ@u# 5`@u~qJ@u`5Bu5TBu5BuW!5Buq!6Bu"68BuK6BuM8Bu9T8Bu;TBu=T9Buw9bBuwBuwZBuz}9Bu}9BuBuBu9LBu6:Bu+Bu:DBuTBu :Cu :Cuz;.Dus;EukYEud;vGu;Gub Gur Guc}<jHud[uE<[ukM=0[u`=[uq>b[u|q>\u%!>\u;;?_ud?D_u`"B_uwCRfu[CgudDhudE2huwGrhuhu`Gju[KlusHVmudImudJou~Ju'K8u#KukML800'r "!TADATADATADATADATADATAu`LuqLu|qMLu%!Mu;;Mu$N"ut:O.u`"PuwRuC^RudSzuwT2u`U>udV&ueHu[MVudMu'YufsYfuLy[uy\ukM\fu`]uq]u|q^>u%!^u;;_uN_uwaut:aDu2Xbu HB bpH%HpYMHp[MH@b&HavHpcMH zky:H%\gHk:HkJH bفH!k:H b4H%&H+"(HkH%'HaH8+"H`WYH bH,z(YH(HpYYH% H a؁H: bH@aH< bH0%Hp;YH b؁H.a(H> b(H2+"EHP+"xQHzbp HaPH@+"HbYH%'H@ bPH4(ZHbxH2p Hk4KHkH bpH bpqH%H%HzWnH bxH6%H bvHpYHb`Hk^KH bH<pWHpnHPplH%tHb`H b`H bH>z%'tH bHb`H bH8a8Hb`H bȂH:b`H%HkWH pH#z zH+"RH@k,Hk+dHz+"LHpٚH@bhH +"H+"H%(H%@H pwHaGH1aGH(p7[H aGH&%5H0(WHaH&zaH&b H axHaGH&a!H+"HaH(kHH8+"RHWiHW@Hbp HpH%ɅH +"HPzb`rH$+"JHpHa(dH%ąH b0 Ha@`H b@`HbHH&bIH+"GH@b[H+"H+"wH+"GH0zp`H bHa;H bxH+"BxH+"HaHH%QHa8H +"#THayHk<H+" H(Ha"Hz+"xHa"H a"H2+"THkyqH+"1H bӞH+".H bQ HP+"HpH b` Ha#;H %H b`rH6z%H!+"Hk%H+"v8H%H@WmHb H+"`H0+"yH+"N`HPa HB bpB<F Jj<Nt!2X Nzry ND@JE$@ݩ@@G@\@@G\@U@eP@i{@(E$@ 0ry  4wwwwwwwwwwwD @G(E$JE$G\i{eP"\&ݩ*U.2X Njrz NDDb@ݩ-@@G@\@G\@i{@(m$@  rz  $wwwwwww, @G(m$DbG\i{\"ݩ-X NRr{ ND-@@G@U-@e-P@ r{  wwww @Ge-PU--X NZr| NDJm$@@@G@,@=@ r|  wwwww  @G=,Jm$NX NE24sNED 4s NX NE2vqNED vq NX NE2:h;NED :h; NX NE2 @~NED  @~ X NR1uND 1u ldwhyh8yhyhR 1up  C A @   f A #  &  m 5 f eC NX NE21uTKNED 1uTK X NB1ucKNDV@ 1ucK h 1ucK VNX NE21uKNED 1uK NX NE21uwLNED 1uwL NX NE21uxNED 1ux X Qj3uQD5 @l @ @YT}@@ 3u 09h93h 3uCPU  ,, & 0 0   ,`w3  :5 | f %w C55  `0 VC 3 5  JYT}@ss   1 1 5 5 "` 0 1 1    L tt  &V  A  B,D00'r "!TADATADATADATADATADATA 5  5 A    YT}D 8 1 1 1   l `X Or3uOD;PM@@9@93@ 3u c_hc%h;OMh~;EMh$ 3u  55           &<9JV93p9~| w;PMX NEB3uGNED 3uG 4CzhӪzh 3uG8"& d  zX NE:3ukMNEDS~@ h  ,w S~:X NEz3u^NED5 @@@ dhPhHh hHh Wh hRWh  h  @ &e6% 4% 4%04 f   w eF w 5 >RX5 frX Or3uSOD 3uS C+dh|Cdh+dhfEHhEHhEHh EHhEHh 3uS @@ @ 9C@&e$e& Μ N<B>& 2mB>o  o "|j d `[ ]Ҭ V  Ue  5`昃`$EEˊˊE & ˤ!%   cc   9e  Pt  A>55,<lɥ fEÊ֥  PzX NE:3u_NEDS~@ &h  0w S~X NEJ3uIqNEDJ@S~@ h WTl  WTjjJ w S~zX NE:4u%!NEDS~@ h  Dw S~zX NE:4u;;NEDS~@ {h  4w S~X NEJ4uH;NEDS~@pŜ@ h WTd  WTbbpŜ $w S~X NEJ5uZNEDi5u@S~@ !h WTn  WTlli5u w S~X NEJ5upNEDi5u@S~@ "h WTn  WTlli5u w S~X Nz5uNDt!@5!@Kq@R'@DMw@Ӫ@ 5u˖ S~h WTt WTh XTz XTh YT ZTd)xh HT{{{{{{{{{  WTff R'n nt!DMwӪ XT  ZT  5u˖  WT ( ( 5u˖66. { { { {  XTTT`` 5u˖ 5u˖{  {   {  { 5u˖&f B * ͋'% ͥ!ͥE%,  D5  PB2    ZTl|%pċ5J J J @ EͥAA I&KqNX NE25u$NED 5u$ X NEJ5u%NEDS~@@ #h WTf  WTdd (w S~,X NEz6u" NED@S~@ȫ @@©#@00':;r  T[hu'h U(hAyhTqh WT^   WTRR ©#VV ZZȫ $P TX`dw"S~zX NE:6ut:NEDS~@ &h  Hw S~X Qz6uMqQDN@l @@.@@@x@L@ZX@Y@93@ 6uMq Vh*h ©#h ©#hOh 6uMqw 5 , L , L L *wPuLuNfV 0L5 @eL ,% @x,93HYB L@.|    `1! W-, A , LœE¥" t4 w  LnN r@.ub  e t 4 @eLW-, t 4  && 4l HTZXNX NE26uwNED 6uw NX NE26uwNED 6uw X REz7uREDs@&@\g@o@E`@,@&@@:d@@ 7u @"hhh 7uw 0 00 ppM $w`w \    .%w0"0o| ep" lp0  *" ` D `WaWz 0,\g:,wɥ;&ww%7   Hw ŀ&  Հt &^&` `^V `W-ŀ `w4wrw xo ɥ@0 p @ @  ^ 0 00lw&^&` `^w T-00 00000Uj0 0000% w  \" 0 U%  "o>&deE 4`0  (e)Ej0`0^ 0n5j ^h h :&X:dp|E`dU% e)0)f  2נ/נ נ   נ נ RՀC$szX NE:7u`"NEDS~@ ,h  8w S~>X OR7ub"ODɪh@9@ZX@ 7ub" ݩ[}h 7ub"  "` &&   f&& ע , , A` 9ZX@ɪh | & ɪhX OEB7u2gOED 7u2g dhکGh 7u2gh   eAm:CEeB@ & &  CR  &VPNX NE29uNED 9u NX NE29uf'NED 9uf' lX NE:9uXNED 6xhv:h X N:=u<ND =u< \̪a h =u<` +3 3@    NX NE2=u'NED =u' X NEz=uYHNEDs@DZ@7w@C29@ɪh@@S~@V@C8@ =uYH Ӫh =uYHdbD D/5% %%  S0Ԋ8cP @"s J C29|D%00'r "!TADATADATADATADATADATAb p w w5 tBh?lYjU@8C8>sD7w055   w@pK5˥t)) ‹5Up54DZrt5AɥAeu@A55U4 H  &fw^Vfɪhp@S~X NER?udNEDS~@(X@pŜ@ E`h WTj  WThh (XbbpŜ w S~zX NE:@u# NEDS~@ :dh  w S~zX NE:@u`NEDS~@ \gh  <w S~NX NE2BuNED Bu NX NE2BuNED Bu X NEJBuW!NEDi5u@S~@ Uqh WTn  WTlli5u w S~X NEJBuq!NEDi5u@S~@ Vqh WTn  WTlli5u  w S~X NEJBu"NEDS~@<@ !th WTZ  WTXX< \w S~X PjBuKPD5 @l @l @V@L@ BuK hZXh BuK#  0 µ1!0  5 55   e5& Y55 `l fl | T SP K  E > 5&@@   ) % e  C:LXV   r  &V p 0 p 0    5ztw     @  ppp 0 0 0  1 1 1 l &X PZBuMPD5 @@ɪh@ZX@ BuM |wh BuM (f& 1, 1, & 4 A`!  && &V 5 ɪh`ɪhfrZXNX NE2Bu9TNED Bu9T NX NE2Bu=TNED Bu=T NX NE2BuwNED Buw NX NE2Buz}NED Buz} NX NE2Bu}NED Bu} X NEZBuNEDj<@S~@ @ Iqhh WTb  WT^^ j<hlwS~6X NERBu6NED`T@@x@©#@ Bu6 WXتW|7  `   Vw<@3 44 4  8   m5 4 PCO pXw4 4 47eC<7*6 W9W^w0 ` C` ::t  2 7  )u`:NCA" &&   5w   wE5 .5 <A f "b <.w  . < 8 23 u u<ul<76 E   8& t:tm<5 5 5 555 5 5 &تW^q5 &5 (<5@  3(A@ 33u  d  J`. <3 u-<Q.u < <5.3 e t @4@84 wC4#3 ` f ꆖ @4 76 `Х^  7W̪a \ 8wwtX PEz_u`"PED5 @q@N@SZ@@.@@x@é"@"@کK@ _u`" Lݩ݁h]\h _u`"  3 6w]V!' 5 5 ͥIu @ 1" é"5 .SZ( 2@.xq#|A B&VP 853'3 & & &&Ef&5   EH55wE@ LNnکK r@.X3U@3  4 4 4EP  wV@xX OB_uwOD _uw .é"h"h _uw2Be2   4 X O00'r "!TADATADATADATADATADATArfu[ODW@ɪh@9@ZX@ fu[ $تWhWhWhXh fu[  e@ 4 t 4 0f&  & eV #5  r 2EN& 5(vW| B8 %`%1 &&  5  q8qm8 &9LZX0 q8t C `54ul4ɪhNX NE2gudNED gud @X PzhudPDتW@W@q@V@W@W@CP @y@̪a @ hud BKh  hud t, t,  :   1 `Cm: > 4 C:Cm@ 4w4 4  BlW.W4تW|2 B-@ v 6цBm :A7=60B`@@ e0b e0I@7C:C0BLy" &  pŠ5wF %B>C< T :7   6 w76 EB |تWt C2776   P < D OE& 5 0 "0 $0&s-`CP <s<5@u7BB:   m@m:55 5 5 555 hql 5 5 5 &5 (u 4B C4C#   ꆖ `` e @ w2 4̪a tW,"r $ &   "V:X O:huwOD huw S"h huw@u>u<5256758*A-<?A-<9¥e¥  )`T|e¥ B< Bm>   u:Am<p u@X Nrhu`NDBK@q@@.@USZ@@x@CO @S"@ hu` U݁h hu`4  S(wG0-"0-$0-& 44 4 ! + S"USZ "@.TCO zq<|efff@e w  EwBK  @.:@xX NZlusNDȫ`T@W@@x@ZX@ lus h lus@ZT O   ALA4  42$"2&' 1 Ɋ:ȫ`TZ| 8 4 &  5 4 uw$ZX0WX@xX ObmudODتW@W@W@W@̪a @ mud L Kh mud& & &4 4 4 1- 1-  B  W7  u-.8 ) m ::WlWrتW|I@0. 7 C:C0B"B : B>C< ,55  5 5 5&C4C#X.  f   u-.8W7w ̪a VWX NZmudND@.@@x@ K@S"@ mud Vh mudZ 5.5-@p7 !w 4 w%S"< K6 @@.X@xNX NE2ou~NED ou~ X QZu'QDl @@ɪh@9@ u' Th u'̥ q"q $e$q "f&   5 f   e v 89Hɪh|," ,$    ," ,$ p $p"$"    l v &V NX NE200':;ru#NED u# NX NE2ukMNED ukM xX PEju`PED@;OM@;EM@@x@" @93@ u` G\h u` B$  wA  ( f  )e l*t5 5 5  44 93" ;OM:6|4  4 w w(@x4;EMNX NE2uqNED uq NX NE2u|qNED u|q X PRu%!PDɪh@@x@X@ u%! fePh u%!j@5 N&]0N  m  4  LuLuNw6ɪhNXh@xX OBu;;ODc%@ u;; i{h u;; ( wc% X Qzu$QD5 @}@T@ɪh@X@j@Ӫz@X@ u$ }h u$̥ &$ &"& & & ,.6.  .( 66  5 \5 n}|5-6@eL 555 VL <$p"r U 4  e4  TPӪz^Xrj(  L t X ɪhX Tzut:TDdw@ɪh@@x@X@y@y@y@é"@("@X@93@ "ut: R@Xh>\h ut:5 N  5 2 &w 4 4 e t w& & B 5 ͥ9ͥIeA  é" ("@@x|@ A BW-25@  4t5 u 5&u( PwD,,(C@,  tu e@ C 2 r 4 &f %wB, _t mW-2ydwy(yVXj93nXxɪht2 5 ȵȵ-55 ȵȵ et w@ȵ ȵP f 4 U@LuLuNfLV L5 NE@4 4 5 5 5 5 &5 ( L`LXLX Rzu`"RD@X@ɪh@@x@j@멀"@93@̪a @ u`" \ݩh("h u`" w w m 0u.0 )A"` 5@ =멀"@Xɪhb̪a |u>C5   CA  4 4 e t W- 5 NLuLuN>̪a B93hE@w%LL 5 @L4 4 5 5 5 5 &5 ( 4   @xdjX PBuwPD uw xé"h멀"h uw|0W& 55Be,( * E    RR @LX SEzuC^SED}@@.@@Cz@4}@ɪh@YT}@9@ZX@ uC^ dXhjh@Xh& uC^&f(`@ ,",$wf&   LR   t  L4542p$2r"L4}Vɪh^Cz| #"-$4  %W-2 @LL4 L4  fwe 5 f} j@.p "`  W,  5 L W,  U  fLfN  NL 9(YT}H\bZXX NEzudNEDDZ@Cz@4}@ɪh@@x@V@@S~@9@ZX@ ud 00'r "!TADATADATADATADATADATA(E$h  ud*I )@`e( @ 9   %` 5  et 4"4$4 &<9L4}\ɪhdCzH|45"45 4  eLw ΋wbw "ZX.DZ6V>@xF@S~ X PBuwPD uw "hS"h uw 0W:@Ae,( * EQ    QQQ *A-<|A-<LX Pru`PD@X@ɪh@@x@j@S"@̪a @X@ u` Uh u` w4 4  W mѕ0Q<Q=0 )CmѐѐCB" B  S"(@X2ɪh~̪a |C<B> 4   4 4 e t L@uLuNw4 4 5 5 5 5 &5 (4 ̪a  X\@x  jX QbudQDɪh@@x@"@̪a @X@ ud h ud&]]Z0N S N mѕW0Q<Q=0 )CmѐѐCB"` ,"6ɪhb|B>C<  4 5 5 5 LuLuNwL5 5 5 ̪a ̪a 6XN@xX Szu[MSD5 @}@@Cz@4}@ɪh@YT}@9@ZX@Ӫz@ u[M ~8^hv h u[M& &2LwF8W8  `     wt  F9btɪhxCz|Lde@  LV85N`v ,,f -68C .024 r`r   "`&&  fLfN  && &(ɪh,Ӫz4JZXbZXp5 tt  4 &V , ,%,,  "2 2  2 2 w Q  w   vt + f 1 @ 5@@ @5@ @09l f1N1Ewn& & $ . &  f5  ewP 6" *(% $"e$s "3 &wb "` &&  "`}rd   YT}4}X SBu'SDɪh@ u' 6`Th u':& B  p p- ɪh*X ORufsODɪh@ݩ[}@̪a @ ufs H"sh ufs    tF 6Ce # ,7lѕ ѕ,2Ba.ݩ[}(ɪh|Ba r,,eѕeeCm: ,,̪a ` E m ev`e 5e.Ba z̪a t$ Bm`  ep0%Abe e  ̪a :̪a D̪a l̪a \BmC:  66`wB@ e   ̪a fX zJuLyzD@̪a @ uLy #eh uLyW8,W8   33 s.s0 eW8 ,B:m`| e wW8=,92Bal-&ѕѕQQCB p0,00':;r̪a l̪a 0,1 m), 0,`.Ba- B:m p0LlFV̪a Ftev eE¥ @@`pX P:uyPD uy #sh uy 4 X NEJukMNEDs@DZ@ ukM (Dbh ukM,   m@ w$s*DZX Pzu`PD@s@;OM@;EM@@@x@" @9@93@ u` ;_hG\h u`   w ?  l@ 4( AN &f 6 t%w,93" ;OM"" @s`|@xP|        l@  w 939&BsN;EMNX NE2uqNED uq NX NE2u|qNED u|q X Ozu%!OD0 @ë@@.@w@s`"@ɪh@@x@©%@ u%!  e-Ph u%! n&  w5 A@,   K  C.`,U@ ”Ee 1s`"0 ë @.N0 Vɪh|>& & Д 1  #.504  @0A.B> @m: 554  6wL©%zw4w@x X Oju;;ODs@c%@@9@93@ u;; Pi{hi|h u;;T  l@      Ü( w s"9349BRc%X OzuNOD5 @w@©,`@ZG@YT}@ëKq@@93@̪a @ uN l,xh  uN5 0 ; : .984   5 : 58U B@ "`B@-   ,w6©,`F93RzYT}|w p-x9#W-00A@  V x9 @Q0 A@B6`ZG^ëKqrëKqeõE`e& N e @,A6`B:` pf:` 6 d w B6J2ҵ  H̪a zt 0 4 fNfL %fLV Ee& &   t 5 6wX NEBuwNEDK@ uw  s`"h uw$5 5 5 ,25 4\w"KX OEzut:OED2g@©w@@.@©E@w@ީ@@x@©qq@w@93@ ut: |\h ut: +www @ 55w  4 wkw©w @.,©E& 0@.6©qq0 :@.L2gbީf93vw~@xX Ozu2XODG@G@w@ɪh@کG@8@ݩ[}@ u2X CWThlhC{Qhr  u2X5 84 595 - 9\  I' Q5KA@!Af9f:: 9 :9  8.Gh8| !g9$5 : 9 f&&  5K ņ%!*5 86 55w8@wVG A@ tt  B9- t t 5 :w "`4  5 "کG6ݩ[}FwTɪhdɪht5X OruB@ t 5 : ݩ[}.ɪh68tX Pzu=rPD0 @C+d@5 @w@ɪh@©,`@ZG@ëKq@@©s@93@ u=r $©Eh u=ru>@ @ h0 Ap `  Z u<U R84  2 (5 :  58 %U 0 BC+dZwb©,`r93|BB@ E<u> B@ - "` †wZ@- 9 95 w&5 $BZG U t@99A@B:` ʵ 5 <e& &2õE`e `& N e !ëKq93>ëKqt& & Ee ֵ$ u .u0  : wt 4 t%P eX93\©svɪh8%<4   fLV w ɪh&5 X PrurPD5 @,#@w@@ɪh@ZX@ݩ[}@ ur ©,`h ur&D4 4  Bm@.C@# UE;C@ @<’ <,#^5 x| 4-   t4      && 5fLV & ݩ[}ɪh>wF,#ZfZX(X NjuVsND0 @5 @w@ɪh@©s@93@ uVs h©qqh uVsl@ A B4tE@P 4    5 <fLV &*0 :w@93D©sNɪhT5 X SjufsSD0 @5 @w@ɪh@ZX@©%@ ufs &©sh ufsf@&  E `9J@m:ȵPD& & EeeҔ ȵ    &70 *©%|4  v&  - @eL4  0 e0wT5 jwt5 2&& @  fLV ZX(ɪhX NRu}sND0 @5 @Oy@ u}s L©wh u}sP@4 @0 5 354444w0 5 NOy>X Pzu`"PDKq@©w@@.@Ow@©E@w@4}@@x@©qq@`"@93@ "u`" ݩ-hީh\ u`" +@w &4w ww5545 5 5 %@ %d`"©w @..Ow( 2@.D©E> H@.N©qqH R@.Z| w 5@4  W-`  P4 w1Kq @.938wJ4}X@xwX NzuEND5 @@Cz@4}@ɪh@YT}@9@ZX@ uE ,#h uE   "`   %+%0   C@ % & 94YT}:4}JɪhNCzT5 H|    "`&& %` fLV .ZXX NJusNDުE@̪a @ us 2gh usBm:@@4 Ee4 e @EC% 00':;r>@t<@  ` 0̪a |ުEv|'t< 4  t t  t. t0 t24445 5 55B> ުEX NBuwND uw 0`"hwh uw4 55 596X OEZuOED2g@w@ɪh@̪a @ u Kqh uP 5@=  (4    A@ ɪh2gLw|uw̪a X {zuE{D3@8^@`T@@.@w@@e@ɪh@ɪh@ @CWT@ުE@b`@ݩ[}@̪a @ uE @Wh.h@Yh@`h3(#hxh uEA65 6  ,L6w,wBwE8 @@8A6 Bɪh832 <@.P8^J T@.j |w t 6      33 p6p8 w4  YC+ݩ[}ɪh*`Tbe f@.@    tt  0wE8 1 h@8A6 &t 6E1CWT08^" 4@.J `ݩ[}nɪht w564  5 6e&V B@    ,#ѐ+`T `x @.,wTw   ` , C@ E ,,-B mf m C:  p̪a *ުE<̪a z̪a Rl0ѐeBe. ,,ѐeBe2  ̪a J̪a NުEX ObuHOD@W@@Y@ȫLq@@`@x@ uH 3h uHB@ Ev .Ba ,` m62Ba ,,` m6 Bm:e6,m xRAm6u-:6  , f6,N &0  (GBt0%,, B:m ,, , #s&X |zu,x|D8^@ȫLq@`T@@.@w@@;h@˫e@ɪh@ @ުE@ëKq@Rݩ[}@̪a @ u,x JGhh;8hh h u,x5,"w 5 6ww 8 6B@ @0A. 'tF 6  B;h @.(8^" ,@.> \ݩ[}lɪh|w   &  56,D:lBm: $ ʵEe`eA@C E`T˫e~  @.A m  Bm: p.p0 u6  e"&&,A65 6 4 4 &V ̪a ëKqJwlt&:66`e  2 B:`  u-:6&@@ >ëKqZwmm  ɵCeeC` 6 v: mlBm0 |ȫLqla u-00' r "!TADATADATADATADATADATA:6 mm`BmC:- u-:6ѕќ&̪a hȫLqf@@ѕѕќm a DުEb̪a X ORuODɪh@ުE@̪a @ u =xh u6 EW6 @eAWe6@@5 v ~ɪh|66 6 6 6 6 66`C:`!$ 9 9˵eE `:ev:66l ˵˵˵mm m et@m:@f A mf>>m > >v`˵r˵@oe@@@%!8ުElmv` r19  CCeeu,B``(̪a vl ѕQ,5,6 r :5:B:m e e e m mw̪a X ORuODȫLq@#s@̪a @ u =hh u 9- Am:ewB,Am:u- CC eeweeB` ` p0vr̪a |6, w !!  9B@ 0 wm0 mZ#s  m A:`ѕeQ- e  QQBC ȫLqT̪a z̪a t 9mm mv 8$,% me m 8,v 8 ,8,. 9,  ,8,fX EzuED8^@ȫLq@`T@@.@w@#e@"s@ɪh@=x@ @CWT@=h@JZX@ݩ[}@̪a @s@ u Fh=h u5,ww,w.wf,5-  w,, x@0A.W8,@4A2 S=x @.=h @.,8^& 0@.D |ݩ[}|wt 6f,5- ,w`4   t G8wHɪh.`T6#e :@.RCWTlwx"s |@.>,p.p0 p2p4 ,`BmC:m @e  m e,,PȫLqtL5-W-LfLfN 4    4 5 6,&# ,  tt ,,w8ZXt4t2t0t. 4 u6  ,  wHw.Bm:e%8CWTHwTs> X@.6la ,4  u6  w4 L5-efLV B@ ѕ̪a .CWT@wbeQ- ,ѕѕ Ce QQCB <̪a ^̪a X N:uNqND uNq $0 h uNq(& 5@ \X ybuLyyD@W@@Y@ȫLq@@`@̪a @ uLy *eh uLyA:B,B mm ,, ,B mm B mm @,, ,Հ|,v C:B:`@,,  mm e0 r,?@,; s: R̪a , mm, , mm``0  wr@,9,5 TȫLq\@``@Yd@Wt`, mm, , mmC:`0 w A:`00':;re,VȫLqZ@`^@Yb@W  p0e B mm  p0lBm0 @`J̪a zȫLqle @,,  Al  p0mmlB`0    @W&@YbȫLqf@YF`A m u6.u8056 , B@ ̪a X REJu;;RED̪a @ u;; HȫLqhުEh u;;L b @@& e$cÒE eccBm>  B̪a X Rzu,FRD8^@,#@`T@@.@w@@ɪh@ @Ӫz@ݩ[}@ZX@̪a @" u,F Ӫ8h u,FC@f44 4  wt& 24w@C@5-wC@E8- %$,#^8^X b@.~ |Cu6.u80wC@E8- +C@  L"u.6u08wC@Ef885- 8<8^ @.2 V8^ Z@.x - wrC@œ @8A6 b & p- C@W-  u62u840ݩ[}>`Tt p6p8 1 0 e.Ba C@œ Š%EfÜ Êp5ŀɕ C<̪a @œ @0A. \ &C@ 0  p.p0  Ar.Tr0V A@q r2 rݩ[}0`Tl4    ` C@s2s454fLfN NLӪz&l4  && t wZX0ɪhX ORuLODɪh@ݩ[}@ uL 0GhGh uL4   t "ݩ[}0ɪhjX NEzudNEDs@Cz@4}@ɪh@V@@S~@9@ZX@ ud n(m$h ud4  &   5  bw %` 5 p  ,5 : #4     %` C@ D   wC@5 <u3<u4>9#B,ɪh8$w693:©%TYT}Z4}:`  ifEeֵB`e&  9T4  HC@  A%`%P88U B@ - "` Ȇw5 <p00'r "!TADATADATADATADATADATA- w©,`093LjZG2A@B:`9' )9 v@  h5 <9B:`ʵw"w( 7bDëKqpëKql9 6 t-< <@ <B6< ! < H4 f< <>4 t%P%Z93b©sT : 585 <u3<u4>U "`8   97z<4 %u .u&ɪh934FYT}L4}Tɪhd0fL L 0 fLV Ee& &   t A@B:c2õEwɪh$5 L`e `& N eH& & Ee ֵ$X OZuwOD0 @+d@ުE@EH@ uw S`"h uw@Du>u<*A-<[A-<U   ¥A-<@p-<\0 |< 9   9&  595 44 4 4 4 44  +d&EHHުE X SEzu`SED0 @5 @@@.@I@w@@h @ɪh@@x@ZG@CWT@b;8@Ӫ8@ëKq@=@@EH@S`"@C{Q@ u` zU-h u`5 4 w  t  %w ,w  4  09t wwf_ S`"CWT,w2h , 6@.DӪ8> H@.TC{Qr=l v@.|65 6 % 6 ,   w5@4@@ /p-<* 9$w ,H CWT*CWT4 8@.V0 dEHph  t@.w6 w/, w5@5 5 55 @ MӪ8  @.;8 @.( ,@.~5 t55wuLuN5 5 5 4 A4     t@4wu:61I @.JwTCWTbv@x9A 9=A@C:`˵1 A@ !  %`&4  t݇ ,5 XëKq`tZGl9ɪhX Ozu,`OD,#@w@@ɪh@x@ZX@Ӫz@̪a @ u,` `h u,`  p6p8 ee ѐ  C@Ü El Be. ѐ  m .x<̪a X̪a bxp̪a | p04 &  w,  r6 r8 AF  "`&&  ̪a >,#XӪzj|ZX4 fLfN bNL5 6C@s6s8  5 64 fLfN  NL,Fɪhnwt w*X NRueND0 @ɪh@ëKq@ ue Kh ue5 =7 3 -:p-:& B6`Ee & &   t u6:u6. 0 $ɪh8ëKq|0NX NE2ueNED ue X wZu[wDEH@EH@EH@EH@ u[ 8h u[59&& &l :U,:` 9wCm: "9wh:5: < s>59wB9|œE  e` D˵˵˵em <B@ ,W m emv` <N  8A@A E mv` ˵’ee`ef *EH2EHVtv` <  9 5,mwe00'$:;rE, EH(EHX OErulEOED0 @w@ɪh@l,x@ުE@EH@ݩ[}@ ulE ëh ulE C.`eE<<=>A@q-<G 9A A mf >5 <5 < ɪhJEHjުEj|4 u4 5 4  C45 4  t   &w"l,x(0 Hݩ[}VɪhdɪhX N:uGND uG ëKqh uGC:6`” A@µEe   A@ ˊפ ` El |`: X vEbuLyvEDG@ɪh@@@̪a @ uLy ˫eh uLytF 6    33 ,B:m`6 v: p: p0ɪhp̪a | ,1e B:`C:p: e&@@ʵ, p0 ,u-6: G^̪a "Am: Am6 GX Ozu8OD5 @@.@w@@©,`@3(#@ZG@@ u8 h u8 A@A 85 : "` 9pL5 N w,  &&A1©,`0`f @f 5 60 "= &@.@ D@.Lp-<* 9$w ,w0 w), w5@ j0 EH$h  (@.6Ӫ8( :@.F;88 J@.XJ \@.t@  uLuN A4 t 4 5 4 4  @wfE5,5L\wf@x-u,u:69? 9;A@ A@  !  %`&4  45 bëKqj~ZGlt ww9f 2lfu<u>A4  %p-,p-< >p-<ɪhR0 v 92A@L%% @@ Nt4u:.w 54u.:@m:e 6EHLë. P@.VX TzufsTDw@@4}@ɪh@ɪh@8@YT}@©%@ ufs `sh ufs  &4 ,}`   2"`. &B 1 t5 : 4 9 ɪh4©%^ɪhn8|   4 ^9lA:`eCe2 - -,8 5 B  YT}4}l U,4 e  4 5,E,LLu<u>fLV  w*hwVX PRuwPD0 @K@+d@ uw "h uw5 4\ lB  u>u<¥*A-<'A-<!  Kz0 >| ¥A-< p-< 4 (+dX NZuLNDw@4}@YT}@ݩ[}@ uL00',r "!TADATADATADATADATADATA tZGh uLxff f4  e4     "`  4  $wB4}Vݩ[}`wpYT}X NEzBu;TNED5 @ Bu;T UqhIqhd{h0&hDT[h\\gh8u'hThHhlzh !thXU(hLhhwhE`h,h4h(!h&h,Ayh`hąh<"h #h$*:dhVqhTqhPh@ Bu;T531/-+)'%#!   erfA|5 |yX SzudMSD5 @}@@Cz@4}@s@ɪh@YT}@9@ZX@Ӫz@ u[M ,h u[M@L& &2LwF8W8  `     wt J9fxɪh|Cz| Lde@  LV85N`v ,,g -68C .024 r`r   "`&&  fLfN  &&&,ɪh0Ӫz8NZXfZXt5 t t  4 & w, ,%,,  "2 2  2 2 &sw Q  w   vt + f 1 @ 5@@ @5@ 69l@ f1N1Ewl& & $ . &  l5  ewN 6" *(% $"e$s "3 &w` "` && }x$d "`   YT}4}vX EzuED8^@ȫLq@`T@@.@w@#e@s@"s@ɪh@=x@ @CWT@R=h@ZX@ݩ[}@̪a @s@ u Hh=h u5,ww,w.wf,5-  w,, z@0A.W8,@4A2 S=x @.=h @.,8^& 0@.D |ݩ[}|wt 6f,5- ,w`4   t G8wHɪh.`T6#e :@.RCWTlwx"s |@.>,p.p0 p2p4 ,`BmC:m @e  m e,,PȫLqtL5-W-LfLfN 4    4 5 6,&# ,  tt ,,w8ZXt4t2t0t. 4 u6  ,  wHw.Bm:e%8CWTHwTs> X@.6la ,4  u6  w4 L5-efL wB@ ѕ̪a .CWT@wbsdeQ- ,ѕѕ Ce QQCB >̪a `̪a X SEzulSED0 @5 @@.@I@w@@h @ɪh@@x@ZG@CWT@;8@ZӪ8@ëKq@@EH@S`"@@C{Q@ u` zU-h u`5 4 w  t  %w ,w  4  09t t wfN S`"CWT,w2h , 6@.DӪ8> H@.TC{Qv|65 6 % 6 ,  v 5@4@@ /p-<* 9$w ,7 CWT*CWT8V0 dEHph  t@.w6 w/, v 5@5 5 55 00'4:;r@ <Ӫ8  @.;8 @.,~5 t55wuLuN5 5 5 4 A4     t@4wu:61I @.JwTCWTbv@x 9A 9=A@C:`˵1 A@ !  %`&4  t݇ ,5 XëKq`tZGl9ɪhX Ozu8OD5 @@.@w@@s@©,`@3(#@ZG@@ u8 h  u8     85 : "` 9pL5 N w,  &1"©,`4@ZG\3(#V `@.t5 4|&A6 5 6 4 & w w2sfX UzudUD0 @5 @ë@@.@w@@h @ɪh@@x@"@ZG@;8@RӪ8@ëKq@EH@@EH@@ ud Z-h ud w u4t@m:e &@@u-,  95 4w6 & , w&  uLu"ɪhHEH|Nw 5 , 595!t wf65 6, v 5@4u<u>`f @f 5 0 &DLp-<* 9$w ,w0 w), v 5@ Y0 EH$h  (@.6Ӫ8( :@.F;88 J@.\t@  uLuN A4 t 4 5 4 4  @wfE5,5L\wf@x-u,u:69? 9;A@ A@  !  %`&4  45 bëKqj~ZGlt ww9f 2lfu<u>A4  %p-,p-< >p-<ɪhR0 v 92A@L%% @@ Nt4u:.w 54u.:@m:e 6EHLë. P@.X N:=u=ND =u< \̪u h =u<` +3 3@    XX N(z1unN(DS~@[@)x@[o@ @($HrQ@ 1uo :KqhxR~h ZT&  1uo>w & 7.*.e.J [[o)x.* [o&)x.([o0)x<)x. ZT"" 1uo 1uohX Nz3uKNDs@s@s@@:+@7x@@x@V@,Pd@ 3uK ^Dbh*DMwh* 3uK1   55@  ͥ#@>E5uu  < 5@[,Vrs|W& AɥNfv & fA5e&5 4Q4 ea  5  #z,Pdj5 55U  u  5 w 5u ":+&7xBsJsR@xX Nz3u|qNDl@:@DZ@ɪwe@R@@s@@x@V@!@Z@:@RCr @ΪW@&@r@,Pd@ 3u|q J$hJh 3u|qee&5EU@5 @% eE5 UpʥIʵ5 t $Uʥ 5|5 u"-e.Iaat EUb8bbbr' w@5 J G e2Cr llrΪWz,PdB   e4 U5Up6"PAHX*U‹UA!BU```00'<r "!TADATADATADATADATADATAtwUU Ke eB ʥe  Ї@ H5DZ`:hɪwer&G %`f 5 f  !&& & eP 5  8 !R,r2R:!D!V,Pdf:nɪwel5f  @5  t(( w 4 "4 &$ w`e ,rZ.RNsrVv@xPPH 8X Nj3uItNDDZ@7x@@x@V@:@,Pd@ 3uIt 8J|h 3uIt< &&e eLPuw w&,Pd:7x.DZ6V:@xX Shz4ugShD:p@@Cz@4}@ɪh@7x@@x@V@@S~@9@V@,Pd@" 4ug 8pŜh 4ug5 85 :5 <5 @CC  a # C ˥ C<  z33   A8 |  @ e 5,@ ͥw pwwww<3 Q4%&& f*V4@xB@S~ f&     & Q4    !  N`e ! & f N B,PdJ:pP7xt & %t"   v ` cQ$    $ & 0gB:  ^ Y :A<W" 1t F 1c5:ee B3e "43"lB Ί  c! ! Q4%8   &fA8   -5@ hV|T u8 %`6%    U9 4}DɪhHCzX Nz5u|qNDl@'@DZ@R@!@Z@y@o@ΪW@&@r@ 5u|q >i5uh 5u|q@`Bf@ΥY!T55W Υ5  A > ;`e Υ 1 % Υ &JRPlVΪWjrpZv&|Υ##e  APPH 8 5@f >:55&HJ1B2RlΪW,!2&6ZlXDZt, @%  : E͵L `Ӵӕ, J :؆*l,ʘ `BtΪWp585Υ  ` % 51 1 5BBl>ʥ]ʥ: N('.rl Nҕ. L&Bl.0Ҕ lȊ `Ewe  w @ ( CBojyZ a   e%/e.Ґqӥ0    eTX Qz5u>QD5 @}@T@@Cz@ɪh@@x@V@" @9@V@ZX@*Ӫz@ 5u> h 5u>E  u@!p@  &  >& xB  ʥ . BVJ" RV|B B <@   )@ e , 5 w @ :VNV\@x  t %` v . f  A85 8A:5 :   .  u8 2ɪh6Cz`nZXt   5E- 5f@6   N2   B2 6  5 9    @ < 6 6 Q66 6 00'D:;r6 v 5 D5 l `A-<u< "A< vu:  85>vm>  @   w 66 6f5   \6B  '5 >5@ B ^5 > @5@r> r@ /0$p0"r}@Tdd %@@ "* (A:@>  UUU3@BӪzRӪzfX NEJ9uSNED 9uS  ZTT VNhRrQhRX Oz=ulOD:@@.@7x@@x@©#@,Pd@ =ul ȫ`Thȫ h `Thh&  =ulG "Q5 ,,@  4  ,  LB&   wW-L0p©#j t@.P| uLuNw p H Wp&V @x ,Pd,:07xxX N(z=uN(D.@`"@[@Z@@R~@[o@ =u \WhL}hR~hXv~h>JHwhTvhPh hT.h6DqhHh]fh  =u`n flf ws$e$fL " . {"{^{`ww& .Z*[.[oZ`"^@R~X Nz?udNDl@:p@'@DZ@ɪwe@@@x@V@@S~@Z@ΪW@&@*,Pd@ ?ud (Xh ?udE@T5  9 6 3 . ' P& &e` 0e 2.l4ΪW:'@&DZR,Pdl:ppɪwe|  (@%  w !,8! U1(5E55e(5  B" $*DZ" e"J B) u IuI55 ,5 p%Ue&  Pt55  U  5wb U@E߁ w"V,@xN@S~l X Oz@u~qODs@5 @$99E*5z5 |51 w 5e JCœ 5œ  w\53 3 & h. U U@ UG3  >& Nf  * && @& & Nf8 ot 0Zwp V5D% A VwJ\w e   >w  & s$96M$9pw$9J5 VZnBA%&  ^% 5E     ,@ DAD`wU5 2wRBe,l  'SY !@ʥ_ e 0ε%wX ,@   .ҕ: B n  W1SΕ[ B C`Δ > Ef&Nf& "W<W>W[W]dCB`קקw ?ҕ[e zҕ, pҕ] * ͋ 5 D wѕ. B@Ⳑs$9pws$96MB15   r; ( F BU1 1 1  w58Be8bbbeJb*.ZDZ\b#1 AA ܃ BP5U ueLEew\h@B 0 %!w Twwקק@w E52@S~Zae6s8$9X NzBuwND5 @v~@$9΅@L@@.@Dq@s@]f@ Buw shzshjshshsh@haeh`"h DZhh7wh@.hC29h;PMhzZhdsh8ɪhhz@xh7xhɪhh Vhh<@S~hD@R~h" h.hVhC8hDZhl.ht,PdhJyh`  BuwveN*PU5D e0  S  ,rw ` @@ % %P! < :v~|f05E 505@u65Q M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTSEEuB 5 =/5 *@ %E tE E  M͊    ` ͊ udEE5 p U 5@\ .% - / ,3e"5550% @L @ R , %P EewuNLv]flp1 b5 E #  *  P P 1u *Dq6Dqdsn$9΅A  ) fL H@ D,  4     &45 ^h5 df D̥  w f 2 & 2r  4 5  8 <0w d& l   &ap aB#E   *   uD\5e`w eE< .f 2  , ,p l J.." a b!X SzBuSD5 @:2@:s@ɪh@7x@Y}@.@:+@,Pd@ Bu l h$*l h$4}h hh Bu jP PH  HP PH f  %5w  # :s>:2T7xlY}r.|5 ȥ ȋ5ȋ1 1 "#Հ && pp f N5 h,Pdx:+~7x'`0  0   &f 0 &V &jɪh&t  K&1 ɪh,PdX P@tzBuP@tD5 @}@l @$9|@@x@ @L@ Bu j%8 5`0+&! D7x$9~Z($9X2$9<$9BF$9fP$9.Z$9d$9n$9Zqx$9|u 0 P 0 & %  5U ,$9#:'":q!,:r6:J,PdN:e G 16 z,* M` 4 ʥ,  , 0<U: .% 0et  8`ee 08 6D Bʥ-  % 17ʥ* 1Y%V5 'hT;jszs|T;w eCʥ9@& 0c R  ʥ72& 0cV +  42% x`0. ,5%l5  ʥ*5   0  # # # % 8w  1ʥ* ʥ%dy%Z$@e.!%'  & e a  A ҥ*B 40 Jʥ*ʥ7  d˕ ʥ" ʥaʥz‹  C^6 BBd5; ' Ee0 TT;VslsnT;wV &  N #  e0 `IҐ `e   8(X PbEukYPD5 @7x@Y}@:+@,Pd@ EukY vLh EukYz 1  ̥ @ $ ! 1  ŀ f&& pp   5 Y}X,Pd\:+l7xX N(RGur N(D7x@:@,Pd@ Gur PYh Gur T& e &  eL5 N.,Pd6:@7xX vhzHudvhD5 @:p@$9@$9f@:#@$9@s@7x@:@.@,Pd@ Hud ~t!h Hud & &   &  w   ͥ+ ,-..(,Pd0:pP,Pd|.  .U.m. Up ]< 65  ΊUE A    6 R:#\5 t X6 6 ev 66   .4.m t  `0 4"4 $e$t 6 "4 &&e 00'\r "!TADATADATADATADATADATA 0 Dw&D& %%%,$,Pd.:DsV7xd$9fn$9x$9lpnX N(jhuN(DتW@5 @W@l @ɪh@̪a @ hu USZh hu 75 :  nq8 2 B"    2775 :B< Bm>(W4تW| <2 <C> > <נ+נ$ נ1ѕ נ0 :B>f<C4C#  | l̪a  . j555 5 5 5@u : u 4 .ѐ :ʋ  :: :C$t    5 l ɪh4X Pzju[KPD5 @}@l @@ɪh@9@.@ZX@ ju[K  Vh&WhNhOh  ju[KU C `5L H& && 5 r, r, ` ^ Eɪh| e(" eb `vl %  & ̥ 4 f f Q Ɋ  !5p,p, -f& & & C B ,.6.66  5555 B   H5 Z}t   &&  0 .   e q r,r,   Ê @eL  ZX>9FɪhL.  1 1 &V l ZXX NEzueNEDT@DZ@@J|@ɪh@9@ZX@Ӫz@@ ue JE$h  ueAAe@e@ BB& )`e %3@% .eRJ$    | B( & j 9 eLuw    Ȋet """$""0h &"(T8DZJ9RɪhzӪz$  && w ZX"J|X NzueNDs@}@DZ@@J|@ɪh@9@Ӫz@ZX@@ ue jJm$h ue4  `Ete  E 4 bAe:uAH `@ e| K(@AɥIBu u IEU Pul u ul K  w BB0A5E W ݂C˥w < ͇H&DZvst Ȝ `Ȝ Ȝ  Bʥ ppN0ȋ е%8М 4 "H "H!fN0#&ee& le U E"% J# w N`vcQ`dH#H -DDZ%#҇wN j e$ Im a Im C˥DœAFH Š ef%ef  e0d Js AR4rrr R  R ֜ 0f t=p t& C˥we045   =0΋K s (E&ŀ&f& fS  y e eV}\4Q4 6dJ d΋H<!b 8=$" P`H ` 3X 8 V> .0(0 0 A<pp w& AFN   &54(AF eLw   &&J|8ɪh<ӪzJdZXnDZT  Ȋ9 ɪh|X NEB=uNEDrQ@ =u  ZTT  ZTRRrQX Nz5u˖NDt!@5!@Kq@R~@R'@D00'd:;rMw@[@[L @Ӫ@xR~@ 5u˖ zS~h WTt WTh XT XTh YT ZTd)xh HT{{{{{{"{{{  WTff R'n nt!DMwӪ XT  ZT  5u˖  WT ( ( 5u˖666 { { { {  XT 5u˖TT`` 5u˖ 5u˖{  {   {  { 5u˖&f B%p  * ͋'% ͥ!ͥE%,  D5  PB   ZT|2 +%ppJ͵  ) ċ5J J J  v   @VKqKEQI@375J JD4 5@  4 J @ Eͥ ADR~JxR~tA   e@f&f 6 UJ F ^ !EJ s&ՀJ.  ZT 6 ZTT ZTJp[x[L | ZTJ*e Jc&ŀ ZTJ[$[L X NzBuwND5 @W@v~@Hw@$9΅@L@v@@.@Dq@s@]f@z Buw shshZshsh@h\aeh`"h DZh7wh@.hC29h;PMhZhzsh(ɪhh@xh7xhɪhhVhh,@S~h@R~h " h.hrVhC8h&DZhyhP".hd,Pdh:sh BuwveN*PU5D e0  S  ,rw@ ` u J AeLKUˊ#:v~|Q@ 6 P5.+ T (&05E 505@uB5 J HˋQ M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTtSEEuB 5 =/5 *@ %E E E  M͊    ` ͊ ugEE5 p U H  5@\ .% - / &,3e"55l50% @L @   %P Eewup1  5 E #  |LF]fvDq * j P PJ!  e.( 3  H 1u= (!Dq<Hw `sj$9΅ d  4 FHE} H A  )   Hs3(f A-fL* Dq6Dq:W\vnv~ H@ D,*SAe@``f A 4     &f 5 V`5 \D̥  w f 2 & 2r  4  5 8 <0w d& l   &ap aB#E   *   uD5Te`w eE< .f 2  , ,p l J a&. b!X OEJGub OED@@ Gub YT}hY}hV Gub @ BeE3   0 f   @ B fE 2 >@|  X N(z1ulN(DS~@1o@ XT@ WT@ N@)x@rQ@ 1uo KqhxR~h ZT` WT 1uo .w4 .C3 3  ,00'lr "!TADATADATADATADATADATA, UEs3w&&D1o)x.1o N4)x.61o:1oz)x&~)x&|1o ZTPP8 1uo8XX> 1uo>\\ WT XT WT X N(z1uoN(Dt!@@j<@J@i5u@S~@R'@@DMw@[@ȫ @ @z@@)x@Ӫ@[o@ @($HpŜ@<@(X@rQ@©#@O@ 1uo :zKqhxR~h ZT& WTtBu;T xUqhIqhd{h0&hDT[h\\gh8u'hThHhlh z!thXU(hLhhwhE`h,h4h(!h&h,Ayh`hąh<"h #h$:dh"VqhTqhPh@ 1uo>w & 7.*.e.J [[o)x.* [o&)x.([o0)x<)x. ZT"" 1uo 1uo WTP(Pv©#O  <ȫ  j<pŜR'(XJ i5u"t!$DMw&ӪBu;T|531/-+)'%#!   erwzS~X N(z1usN(Dy@S~@ XT@ WT@rQ@ 1uo KqhxR~h ZT` WT 1uow v y ZTZ Z$ 1uo WT XT WT X N(z=uN(Ds@.@ w @ | @ x @ { @ y @`"@$9΅@@R~@y@ z @z yh R~h@GhHwh=u Wh}h 8^hv~h hvhh8.hDqhh]fh =u5Lxn ff ea ENe LuHBw E Aaa &EC e.*Ec 6.$Z JyV6P pj | {XE" Qc  & &f& e  fuZe^`.e-..("f P#.(&eXw$ߥ(1& & & &   e[K [qr& & a9 e ڇ %($,$9΅.sFt N,%e% P   w$ D`"%  .w~wwpa ^ @ .=u~@R~=up< w B x H y N z T { Z | |     $$ ((  ,0<84Xt@D, H    X N(z=uN(D.@ w @ | @ x @ { @ y @`"@Z@@R~@y@ z @ zyh R~h@Gh=u WhZ}h 8^hTv~hTHwhj hvh^h4.hVDqhTh]fh =u5Lxn faAwENe LuH w aDE{X{.{^{` N,%0.$ $ZFyLF | Pw `"wjw=uj@R~wb      $$ ((  ,0<84@D,.=ub w  x  y  z  {  |  H   hX N(z=uN(Ds@.@ w @ | @ x @ { @ y @`"@$9΅@@R~@y@,Pd@z z @ yh R~h@GhHwh=u rWh}h 8^hv~h hvhh8.h"Dqhh]fh =u5Lxn ff ea E00't(v:;rNe LuH=w E Aaa &EC e.*Ee{X6.$Z JyV6P pj |E" Qc & &f& e  fu%e.e.(P(eXw$^P v$~`% N/,%e% PQ4& ߥ1 8PKQr 8&9 %솀w., D$9΅FsR,Pd|`"%  .w wwa ^ @ .=u @R~=u< w B x H y N z T { Z | |     $$ ((  ,0<84Xt@D, H    <0X 1&f{&{/{S{hgZM" T]VMMsssssrMqM0%)MC< dC8C29D0X]DZDZDbDqdDMwFo'MF'MFrMF20FdG?fMGEfMLyq0LUs0ad]awe]aeaf]ahMe>Bea>Be>Be>Bt[SMtS~dxR~]x_~d0Zs>Br;>B40<MM.6807w@R~@S~}[MdӪ:۪s,M۪.M[SM MfM($!\R'R|d0Rd>BRM>Bvd..]Wd[lMQmMnM.dKq!\w>B@xy fM`"T]V;]hijkl~dƫ80ƫ0ƫ0̫Mͫ[SM00(|r "!TADATADATADATADATADATA00(v:;r|#|8e|:eZ|vw #zx 1u,*1u.+$1u/,1u3/1u#1u!\1u%1u(3u|K3u[4ud4ue=u\H:>ur'0>uT(dB>u\(>B>ud(M@utqBu]Bu_4BuswButwahX Ď|#ĎL {4fC~w  ~@h"h@{80{&h{ShX Ď|8eĎL {Jw  5E5 ettCtt@@ii@{8F{/hX Ď|:eĎL {Jw5’6t @ vtB@A  6t@@P5 ii@{8F{00(r "!TADATADATADATADATADATAhghX ĎR|vĎD {0Fkh*hhjhih  {Jf f &f &ff  X NEzx NEDRd@r;@e@ea@e@e@@G@@s@ (x  ,wwwwwwwww8 @GRdeeea"e&r;*s X Nb3u|KNDs@s@@x@V@ 3uK ^DbhDMwh 3uKb  ͥ#@>E5uu  5 w 5uV:sBsJ@xRX NJ3u[NDm @ 3u[ RFdhs< 3u[f&f&6 ff I % % % %   Be !!!`  b\ |u 5 %  Ce |  ` %%# #$)fC  Ae@ Ct% . fU U \m ^U M U B eU M eU U M  D0% %D0% a aeJZ2L s@NAJBEFRAMRPAYAMNUJLUJGUAPESTCOVONCEDm<<X NEr=u\HNEDs@DZ@7w@C29@@S~@V@C8@ =uYH Ӫh =uYHdbD D/5% %%  S0Ԋ8cP @"sJ C29|D%b w w5 tBh?lLjU@055 *C80s67w  w@pK5˥t)) ‹5Up55&DZHt@A55U4 H &fw6VF@S~8X Oz@utqODz@s@5 @$9$98b5 dBAw ևB  u BEC`"  D ccє D ɔɥaɥzɥ y(. fۇ&e # 5efEB`F ~ . ӥ:  ӥ:@! $&5 \  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bUT " & N ӥ"   U5CM% E A5Q`C _C&  A &5 ˥A˥Z.˥a˥z(˥ ˥ ˥˥˥ ˥*˥% ˥$˥_  ˥0 ˥9 ˥7 U   "L ˋ00(v:;r˥ ˥ FX NzBuswND5 @v~@.@Dq@]f@ Buw shshshshshz.haeh`"hDZh7whC29hZh@xhVh>h@S~h@R~h" h:.h,Vh<"C8hDZhyh  BuwN*PU5D e0  S  ,rw ` @@ % %P! < 05.v~|E 505@u65Q M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTSEEuB 5 =/5 *@ %E E Et  M͊    ` ͊ uEE5 p U  Jwup 2Eh]f #  *&f D̥  w f 2 & 2rDqDq45 l  4  8 <0w d& l   &ap aB#E   *   uD5e`w eE< .f 2  , ,pL.@d l J a b!X N(z1uN(DRd@r;@@e@ea@F2@e@S~@e@68@[@@zƫ8@ XT@ WT@4@ƫ@Lyq@@ƫ@)x@tS~@LUs@[o@ @($HrQ@Js@R|d@ 1uo LKqh ZT` VT& WT 1uoP 5 5 & 7.<.e.P tS~"[*[o,)x.0<2[o8)x.:[oB)xN)x. ZT"" 1uo 1uo\\t$ WTt XT WTr VV  VT VT*tRde e eae4F2R|dƫLyqLUsƫ8 ƫ"68$&r;(sHX NEzw NEDR|d@@F2@68@@G@ƫ8@4@ƫ@Lyq@@ƫ@LUs@ 8w  <wwwwwwwwwwwwJ @G4F2R|dƫ"Lyq&LUs*ƫ8.ƫ2686X N(z1uN(DRd@r;@@e@ea@F2@e@S~@e@1o@[@@zƫ8@ XT@ WT@ƫ@Lyq@@ N@ƫ@)x@tS~@LUs@[o@rQ@s@68@J4@R|d@ 1uo Kqh ZT` VT& WT 1uo .* 5 54 .C3 3  ,, UE:1o)x.*1o N$tS~F)x.H1oL1oP|s3w&& & 7..e.Z)x&)x&1o"[*[o,)x.02[o8)x.:[oB)xN)x. ZT"" 1uo 1uoPPJ 1uoJXXP 1uoP\\  WT XT WT VV  VT VT*tRde e eae4F2R|dƫLyqLUsƫ8 ƫ"68$&r;(sX N(z1uN(Dt!@Rd@r;@@@e@ea@J@F2@e@i5u@S~@zR'@e@@68@DMw@[@@ƫ8@ȫ @ XT@ WT@4@ƫ@ @Lyq@z@@ƫ@@)x@tS~@Ӫ@LUs@[o@ @($HpŜ@<@(X@rQ@zs@©#@O@j<@R|d@ 1uo LKqh ZT` VT& WTBu;T xUqhIqhd{h0z&hDT[h\\gh8u'hTh00(r "!TADATADATADATADATADATAHhlh !thXU(hLhhwhE`h,h4h(!hZ&h,Ayh`hąh<"h #h$:dhVqhTqhPh@ 1uoP 5 5 & 7.<.e.P tS~"[*[o,)x.0<2[o8)x.:[oB)xN)x. ZT"" 1uo 1uo\\t$ WTt XT WTr VV  VT VT*|Rde e eae4F2R|dƫLyqLUsƫ8 ƫ"68$&r;(s WTP(Pv©#O  <ȫ  j<pŜR'(XJ i5u"t!$DMw&ӪBu;T|531/-+)'%#!   erwzS~&X N(z1uN(DRd@r;@@e@ea@y@F2@e@S~@e@68@[@z@ƫ8@ XT@ WT@4@ƫ@Lyq@@ƫ@)x@tS~@LUs@[o@rQ@s@BR|d@ 1uo VKqh ZT` VT& WT 1uoZ 5 5 & 7.<.e. v PytS~"[*[o,)x.0<2[o8)x.:[oB)xN)x. ZT"" 1uo 1uoZ ZL( 1uoL WT XT WT VV  VT VT*tRde e eae4F2R|dƫLyqLUsƫ8 ƫ"68$&r;(sVX N(z1u,N(DS~@lS~@1o@ XT@ WT@ N@)x@rQ@ 1uo Kqh ZT` VT& WT 1uo .> 5V .> 54 .C3 3  R1o)x.>1o N,1o.)x.2>41o8lS~Z)x.\1o`1o.|,, UEs3w&& $)x&()x&,1o ZTPP^ 1uo^XXd 1uod\\  WT XT WT VV   VTX N(z1u.N(DS~@lS~@1o@[@ XT@ WT@)x@[o@ @($HrQ@ 21uo Kqh ZT` VT& WT 1uo 5V .* 54 .C3 3  ,, UE: 1o)x.* 1o$lS~F)x.H1oL1oP|s3w&& & 7..e.Z)x&)x&1o"[*[o,)x.02[o8)x.:[oB)xN)x. ZT"" 1uo 1uoPPJ 1uoJXXP 1uoP\\t$ WTt XT WTr VV   VTX N(z1u/N(Dt!@@j<@J@i5u@S~@lS~@R'@@1o@DMw@[@zȫ @ XT@ WT@ @@@)x@Ӫ@[o@ @($HpŜ@<@(X@rQ@z©#@O@ 1uo Kqh ZT` VT& WTBu;T xUqhIqhd&hDT[h\\gh8u'hTzhHhl!thXh U(hLhhwhE`h,h4h(!h&h,Ayh`hąh<B"h #h$:dh{h0VqhTqhPh@ 1uo 5V .* 54 .C3 3  ,, UE: 1o)x.* 1o$lS~F)x.H1oL1oP|s3w&& & 7..e.Z)x&)x&1o"[*[o,)x.02[o8)x.:[oB)xN)x. ZT"" 1uo 1uoPPJ 1uoJXXP00(v:;r 1uoP\\t$ WTt XT WTr VV  VT WTP(Pv©#O  <ȫ  j<pŜR'(XJ i5u"t!$DMw&ӪBu;T|531/-+)'%#!   erwzS~0X N(z1u3N(Dy@S~@lS~@1o@ XT@ WT@)x@rQ@ 1uo Kqh ZT` VT& WT 1uo 5V .* 54 .C3 3  ,, UE:y1o)x.* 1o$lS~F)x.H1oL1o$|s3w&& v  )x&)x&1o ZTPPJ 1uoJX XP0 1uoP 1uo WT  XT WT VV   VTX K@Q>ur'K@QLz5 @ah@q@@<@f@awe@T@̫@ f@ @n@[l@۪.@Qm@ Gw@ BB %  JLf  B @ Հ @0 1  0 w@ h>frh|f  B @ Հ @0 1  f@ @f 1  w fhfvj @ e`e۪s, Q0 l6 6 6 Uv @ eah  8`e۪s,6 @l -w-  6 6 ̵96   a e6 Nah> \qaa a e !-tm&E& e f %   .q^{/8 `e etce5 wew l t B tm&E& @j~{/e N C    m   m6 / mtm&E& t Ѐm   ee ^{/0 Հ m e-> :   @mCm B !  mm  ~  C B`m  ew @ a ` afNla0iZq( F   a 6  B t v  W e  a ewCe" t 'qVq`je`&  en ` @tmfE& e t @  w@    ɵ   w f!Qm ${/Fixj :&c& &a @`": @`"" C`D$ @ @`"6x4q$ $ @`:  @`:@` @ >m(6  m666ma mzq2e  @`  ȋ @`"96B  ` `>  `"  UB @`"  ` B   66  E(>& &&(ewC6ofj* N`N` )m # m6a e m a  Dqdq>e w ɕ [@ N`e ,N` ]  ewh~j"   tEm 5ENUme ! f & 6 fE@E UP5@5 a ewB e@h @`e۪s, lf     % f5 La  "a "6  6 a ah Bqn |a00(r "!TADATADATADATADATADATA  @6av e a efA 2  fAqLq a ae a T e6v aa  qtqf ea ewABa 6a  @6       q iLq     &        U v6 6   ^ W      vvW    ve W   ve&  a  a  5 a  a a 5a a(qTqdqnV  a e5v e  a 5=6  @ Bt @ e qJq `6R W a aa a na ea  Ke! f  "q\qpq< fA N a Neae a  668q aa  ea eff@ @)@m&fe  N q8q4%w @  W-  fL w6 6 aa @+ '@" jhq6  a C) a  6v)6a vva 4 2@@m ,qLqbqv,      aa ewBAe4C`eVq`j*m&6-$-  e[l `m e f E-N f - 4 tme̫ a ` e̫ h*`3  e%w@ ɵ C`v6'D`N`ɵ Ӄo  Cm̫( *jn l6ɵ lv6 @ a& a& N t' eebed e0  e   e ( e& :4a& a& N a ez2 2qL{;   $ Gjjw & 6    r@ rd   Wt@ r Wpd@ r    tiWt Wpd@Wp @` me0H %wf(((@@^&_  Baʕ Djb W 36e Bm W   v` E  B`": W ~v6a W sB`:3 n@`TB` e6 6    mW XW UW:HW"Fm6 -:!6 amZ6-E U@ @`-Y3 nV-"6 mm e 8mJ  am B҂-%m Bae -wW    ":E U@  eWtEERrPew)@7C5 LR@ E  C6 ` 5 L L -jnTz۪s,@G?f@GEf@{/@j@i@h@G8,4hlF2hhƫhLyqh LUsh ƫ8h@ b*(D@ E6   L 5 L L %NT($x  ^   X 2*ƫh R|dh68h$h\L{;lX @Q>u\(@QL L{;p`P@0 p`P@0 p`XP@0 p`P00(v:;r|@0 p`P@0 p`P@0 p`P@0 0(XddPh@@@z5 @ah@f@q@@<@D0X@ad@T@;@Fd@̫@ @n@[l@|t( x @Hd GrwfBe6     @LE  `  ein`Etm e۪.l `Je̫  `r % f@ I,f 1  @`  A1 Հ @0 @0 w6 6 ̫  4ftj, @6 &` e@`e$۪s,( P2lf& & & &`E5  6e eah0 ~@`e۪s,| lv6eE! 66! 66   v- 6 ah w(5  6 6  ;  6   fla(aa &"~"a @,*,,e,e w@ 5=t"a@` ҁ-&E& e ~E&E&  q`{/ e U& EU& %\ ,tc&E& 6 t*a@`E{/\{/v& 6"]"eE EU E   ̵EU6  & %UE     {/a6 e etm6 e 5  w5  -Le&w uljn >  `5 @t> 6 m @tm&fE"m Et&E e|{hg !cȋ e   oet6 /a mm  Q < 2f0- v`@a> v  v`@a> J  b`      C`m > ew @ `> `> 6``@b  ` a` j^a e6 6t  D A   Db>    Db6   Db>    Db6  5 EUE - ew A  o6e I FjV@ a o " ! `6a e ma  qVqvq  me w A@&? < 9e N`tEa   (L tEB`mCmjNʜ D @&eWtEaH>   w >  e@  a,  :j^C` eeb & ea6  m]   e ,$ eb  f e "  L{;L  GL L @6      e w @&*>  t@`&E& e 2 66ij{/ 6ee 66 E66P t>P %f   f  D Ee wf@mBm W    Dee@mCm D  e ej  &  TLef   f  REe fA  wAFdvj*< C 6 6  e`e"۪s,X  eb mE5 L       q00(r "!TADATADATADATADATADATA& %  - 1    vah`  F<h< e vE a & e  q L5 L5LEvUa (<Z W-LW-L ef@6 veL a >,xa @E  AaNqjq  af a \ a ea >,[@E &Aa >qRqR af a  a ea >,"afeN a 4qHq  a eew@ a @   `ɋ  eq(iBqJa e wC &65 W-  pL w66E- 66-qj 66 @@6  a   afe&a <a 0qnqB5 (aB" a  v@@l6Aa@a-  gL <q65 Nv5 @b   a ua ew@Nqjqtj: ɵ  Bov6ɵ `5v5plv65  5vB6 @ aa& N z3 eeb e4 e e eT   e,    e e|  $eL " ,aa& N a e*5 N`v6 Cbv6  * 2q  a eqL{; $,4< Gw & 6   Bm0  e76% -`60   t Wt@` @` j8 Wpd p ` `L%w @:CD E!!  W-  !!  *jdTlD0X~D0X! !   ' $D@ E  W-& #  & w, T*D0XXT\;nTr;xad0@tE5    ALW  uNh uLx @h5  uL h)LAaW"g@E h@E 8@t @ e@`55  @NE  huNL ( =LAa@E  u u uH   @  P ` p @E e`5x z۪.@Qm@۪s,@G?f@GEf@{/@j@i@h@{hg@L{;whG8Rdhh u*J Z  n " V B x2eh0 ehv eh eahVr;h\sh.D X s@Q>ud(s@QL L{;$        ! "3    .    1 0  (   2\ ((  ) 8  v4()      * .3256 5     00(v:;r EA) ('1PH |?1[ $?1@ 0@` $`B 0 $Gt0 Dz $2/     ( h :   n    z5 @awe@T@T@x_~@@@Rd@4@R|d@ƫ@Lyq@LUs@ƫ8@ƫ@A        6 G(wKB`C E ej$@` e" l0@`2L $ )     ̋ e. (x_~6x_~ @`e leN dBb& " w@ e" ``Je $   e x_~i  @`e leN Bb& ef@W,TwB & NSRf e @   5 BiF5 2Հ$ ʕT2 wAB & NS& N D` 4Հ̕$ x_~,j05 ̕ T4 w@` @E ,Tɕ wA1@ & 2 T1 x_~h5 RhV5 w)v& 0 cfp    e$  wB E ] D! jBTRT 1 0 0&   1  0 5 L& LAa  51 e!   51 0 0e <a  |  sppp PL{;p0)p1(e   K / 5 L   L * a $L{;LTXT| !  5NUpN>!     $ 0 e  0x_~Nx_~ 5N5OUNT  5 N5OU N> ! 5!N5OU0N$ " A ̵W ̵ W ̵  @N   LewAthx5 ~B T@` ȕȕ ȕ w)v0 0 5 L5 N5 5  0 Lj4Na:Naea>  7@E (   &   @E P ,x_~fx_~|v,  &    tmE& e w,0 5 L5 N  5CeLex_~H{/*6`5v q  e  @`e   l N CeL5&   00(r "!TADATADATADATADATADATA  p&   & +   .x_~Xx_~tx_~,  @E ,e`E e   @`e  R l N & % f w  We  "x_~Bx_~8 a> 0   =eR  x_~(x_~J  @` WtmN&E& e &     L0 H  *{/@x_~~ @E ,@E 0$ e wf 0 0 LDa 5 N5 5 4Ca`e:x_~Dj@ m  t`&E& e      u   h,P>  ({/>x_~Lx_~Zx_~tx_~< 0 0 em   J eR  &x_~ ` Wt`N&E& e *  1 10    &  "{/%w eAAC!PjV5 !2Rr22 `` e !  !  !px_~ze@e@ea@F2@e@68@@r;@s@{/@j@i@h@L{;XFo'hzF'hrhhh:Frh}[hMhnͫ[Sht[ShRh[Sh6̫hN hnh fh[lh.P!!!!> 2  L{;NN0 PX R T( V` X Zp \     " T  Z  `  f  l  r  G>\  ` ( P ~* \ ($.  Ddh@ j۪.hQmh۪s,hG?fhGEfhRG8zahhqh <h hfh+^%)hBX NzBuNDs@5 @$9΅@Dq@ Bu >.hTadhawehafh*;hTh"ThxR~hnD0Xhp Bu P 4 P  1u(A  ) D̥  h5 s*$9΅Z5 |uu <#A0< 5 E # *A( w D j!55 RDq8 8"4 p  0 4 5   N" ; B  ,B D!5 4te ! D5e`w eE< .f .2  , ,pR l J 00(v:;ra b!&f 4X NzBuNDs@5 @W@l~@$9΅@@v@C< @Dq@ Bu .hJadhTawehafh;hjThvThpxR~hD0Xh Bu  4 PJ!  3  H  1u(! 4 -&C< BsL$9΅hDq|HE} H A  )   Hs3( Aw*SAe@``f D&DqW:vJl~Rt5 ̥  h5uu <#A0< 5 E # *A(lDqt w D j!55 8 8"4 p  0 4 5   N" ; B  ,B D!5 4e ! D5e`w eE< .f .2  , ll,p l J a b!&f X NzButwND5 @v~@.@Dq@]f@ Buw shsh`shshshz.hjaehF`"hDZh*7whC29hZh&@xh4Vhh2@S~h@R~hT" h.hxVh"C8hDZh.yhV BuwN*PU5D e0  S  ,rw ` u J AeLKUˊ#Q@.v~| 6 P5.+ T :&05E 505@uB5 J HˋQ M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTSEtEuB 5 =/5 *@ %E E E  M͊    ` ͊ uEE5 p U H   Jwup 2E #  *&f 8]fTDq`DqlD̥  w f 2 & 2r  4  8 5 <0w d& l   &ap aB#E   *   uD5e`w deE< .f 2  , ,p l J a b.!BX Nz4uND1o@ah@)x@ 4u VWhNl~h@tS~hh vhRC< h6.h8DqhJx_~h 4uZ%NS(5 *wmVYw&& " . {"{^{`&ah )xV&)x&,)x&01oX NE>uT(NEL L{;p`P@0 p`P@0 p`XP@0 p`P|@0 p`P@0 p`P@0 p`P@0 0(XddPh@@@|t( x @Hd GL D0Xad:5 @D0X@ad@L{;whG8ahhX Nz4uND @.@ @af@ah@xR~@ 44u rWhj@Gh\l~hdh:2vhnC< hd.hfDqhdx_~h" 4uv%N*  PS(5 FwaAENe w  u aDTE{V{.{^{`8$ah* $ @afF.TN 8ww   $(,0 $44u xR~  whG8ahh00)r "!TADATADATADATADATADATA<0Y)@`  Or U  Hz I|S:   T JR  C  3 Tz {M ! " !w* 2 #^5 %Jb; *G +\K -zK ZP=M vRK XaT f_ DT` ~zd 0d e 6tf rJq`t:w <x Wx ,My xMy3yz Jz} > Z@ jjTY .MACRO CUCDF$ X,Y .ASECT .= U.CW2+2U.ACUR:'X .BLKW 1U.NSYN:'X .BLKB 1U.NSYC:'X .BLKB 1 .= U.VCB+2U.PHDR:'X .BLKW 1U.RCHK:'X .BLKW 1 U.QSYN:'XU.RCAC:'X .BLKW 1U.RBUF:'X .BLKW 2U.RCNT:'X .BLKW 1U.SVC:'X .BLKW 1 U.TXCT:'XU.INTP:'X .BLKW 1U.SYNC:'X .BLKB 1U.MPN:'X .BLKB 1U.RFRK:'X .BLKW 1U.RFPC:'X .BLKW 1U.RFR5:'X .BLKW 1U.RFR4:'X .BLKW 1U.RFCT='Y U.TXCT+1 .PSECTU2.HDX='Y 100000U2.LIN='Y 40000U2.CTS='Y 20000U2.SWC='Y 10000U2.ONL='Y 4000U2.HPT='Y 1000U2.HRC='Y 400U2.RCV='Y 200U2.ACU='Y 100U2.MPT='Y 40U2.FTM='Y 20U2.SFL='Y 10U2.RFK='Y 4U2.SYC='Y 3U2.TXA='Y 2U2.SNC='Y 1 US.SYN='Y 1TU3.LOK='Y 100000U3.RPD='Y 400U3.RAC='Y 200U3.SND='Y 1 .MACRO CUCDF$ A,B .ENDM .ENDM4Y .MACRO CVCDF$ X,Y .ASECTK .= V.IFWI4V.CPRT:'X .BLKW 1TV.CLUN:'X .BLKB 1CV.CMPN:'X .BLKB 10V.CSTS:'X .BLKW 1V.CST1:'X .BLKB 12V.CNID:'X .BLKB 1OV.CUCB:'X .BLKW 1TV.CMPL:'X .BLKW 1'V.CNPN:'X .BLKW 1 V.CMBC:'X .BLKW 1 V.CRED:'X .BLKW 1 V.CNHD:'X .BLKW 10V.CTBL:'X .BLKW 1V.CRBL:'X .BLKW 12V.NXHD:'X .BLKW 1TV.CDBC:'X .BLKW 1CV.CIAD:'X .BLKW 1'V.CICT:'X .BLKW 10V.CSAD:'X .BLKW 10V.CSCT:'X .BLKW 1V.CMXI:'X .BLKW 1.V.CMXO:'X .BLKW 1.V.CTDH:'X .BLKW 1V.CTDT:'X .BLKW 1 V.CSTQ:'X .BLKW 2KV.CLMT:'X .BLKB 1TV.CTMA:'X .BLKB 1NV.CLMR:'X .BLKB 1NV.CRMA:'X .BLKB 1SV.CMCT:'X .BLKW 21V.CRPC:'X .BLKB 1DV.CRPL:'X .BLKB 1BV.CRTM:'X .BLKW 1LV.CREP:'X .BLKW 1NV.CBCC:'X .BLKW 1CV.CDCC:'X .BLKW 1DV.CURH:'X .BLKW 1DV.CDLE:'X .BLKW 1LV.COVR:'X .BLKW 1LV.CRST:'X .BLKW 1DV.CALF:'X .BLKW 1CV.CREA:'X .BLKB 1D .BLKB 1 .IF DF C$$ACUV.CTPN:'X .BLKB 12.K .ENDCV.CLEN:'X .BLKW 1. .PSECTB VS.SEL='Y 100000VS.FIN='Y 40000VS.REP='Y 20000VS.RTR='Y 10000VS.STK='Y 4000VS.STR='Y 2000VS.ACK='Y 1000VS.NAK='Y 400VS.MPT='Y 200VS.DIS='Y 200VS.CTL='Y 100VS.DAT='Y 40VS.SYN='Y 20VS.POL='Y 10VS.ONL='Y 4VS.BOO='Y 2VS.TRN='Y 1 .MACRO CVCDF$ A,B .ENDM .ENDM4 Y .MACRO F11DF$,L,B,SYSDEFA .ASECTK.=0V.TRCT:'L'.BLKW 1V.TYPE:'L'.BLKB 1$ VT.FOR='B' 0 VT.SL1='B' 1N VT.SL2='B' 2B VT.ANS='B' 10 VT.UNL='B' 11V.VCHA:'L'.BLKB 14 VC.SLK='B' 1 VC.HLK='B' 2' VC.DEA='B' 4K VC.PUB='B' 10& VC.DUP='B' 20 ; Duplicate volume name VC.SIL='B' 40 ; Silent modeV.LABL:'L'.BLKB 14V.PKSR:'L'.BLKW 2T V.SLEN:'L'V.IFWI:'L'.BLKW 1SV.FCB:'L'.BLKW 2V.IBLB:'L'.BLKB 1BV.IBSZ:'L'.BLKB 1N .BLKW 1V.FMAX:'L'.BLKW 1BV.WISZ:'L'.BLKB 1V.SBCL:'L'.BLKB 1AV.SBSZ:'L'.BLKW 1EV.SBLB:'L'.BLKB 1V.FIEX:'L'.BLKB 1 .BLKW 1V.VOWN:'L'.BLKW 1BV.VPRO:'L'.BLKW 1NV.FPRO:'L'.BLKW 1VV.FRBK:'L'.BLKB 1NV.LRUC:'L'.BLKB 1' .BLKW 1V.STS:'L'.BLKB 1 VS.IFW='B' 1V VS.BMW='B' 2VV.FFNU:'L'.BLKB 1UV.EXT:'L'.BLKW 1V.HBLB:'L'.BLKW 2.V.HBCS:'L'.BLKW 2 V.LGTH:'L' .ASECT .=0.M.LNK:'L'.BLKW00)v:;r 1M.TYPE:'L'.BLKB 1' MT.MLS='B' 1CM.ACC:'L'.BLKB 1M.DEV:'L'.BLKW 1M.TI:'L'.BLKW 1 M.LEN:'L'. .ASECTB.=0BF.LINK:'L'.BLKW 1F.FNUM:'L'.BLKW 1AF.FSEQ:'L'.BLKW 1E .BLKB 1F.FSQN:'L'.BLKB 1'F.FOWN:'L'.BLKW 11F.FPRO:'L'.BLKW 1BF.UCHA:'L'.BLKB 1NF.SCHA:'L'.BLKB 1VF.HDLB:'L'.BLKW 2NF.LBN:'L'.BLKW 2F.SIZE:'L'.BLKW 2:F.NACS:'L'.BLKB 1=F.NLCK:'L'.BLKB 1 S.STBK='B'.-F.LBN F.STAT:'L'F.NWAC:'L'.BLKB 1' .BLKB 1 FC.WAC='B' 100000 FC.DIR='B' 40000  FC.CEF='B' 20000L FC.FCO='B' 10000KF.DREF:'L'.BLKW 1CF.DRNM:'L'.BLKW 1F.FEXT:'L'.BLKW 1.F.FVBN:'L'.BLKW 2EF.LKL:'L'.BLKW 1F.WIN:'L'.BLKW 1 F.LGTH:'L' .ASECTK.=0 W.ACT:'L'B W.BLKS:'L'W.CTL:'L'.BLKW 1 WI.RDV='B' 400' WI.WRV='B' 1000 WI.EXT='B' 2000 WI.LCK='B' 4000 WI.DLK='B' 10000D WI.PND='B' 20000B WI.EXL='B' 40000E WI.WCK='B' 100000W.IOC:'L'.BLKB 1W.STS:'L'.BLKB 1 WS.MDL='B'1W.FCB:'L'.BLKW 1W.TCB:'L'.BLKW 1W.UCB:'L'.BLKW 1W.LKL:'L'.BLKW 1W.WIN:'L'.BLKW 1 .IF NB,SYSDEF .IF NDF,P$$WNDKW.VBN:'L'.BLKB 1 W.MAP:'L''W.WISZ:'L'.BLKB 1' .BLKW 1 W.RTRV:'L' W.SLEN='B'-4 .IFFLW.MAP:'L'.BLKW 1 W.SLEN:'L'.=0 ASSUME W.CTL,0. .BLKB 1W.USE:'L'.BLKB 1W.VBN:'L'.BLKB 1W.WISZ:'L'.BLKB 1= .BLKW 1 W.RTRV:'L' .ENDC .ENDC .ASECTW.=0=L.LNK:'L'.BLKW 1L.WI1:'L'.BLKW 1L.VB1:'L'.BLKB 1L.CNT:'L'.BLKB 1 .BLKW 1 L.LKSZ:'L' .PSECTB .MACRO F11DF$ X,Y,Z .ENDM F11DF$. .ENDM F11DF$p Y .MACRO CCBDF$ L,B,LST .IIF NB LST .LIST .SAVE .ASECTP.=-2C.URM:'L' .BLKW 1C.LNK:'L' .BLKW 1'C.RSV:'L' .BLKB 11C.BID:'L' .BLKB 1N C.XACP:'L'C.NSP:'L' .BLKW 11C.LIN:'L' .BLKB 1C.STA:'L' .BLKB 1.C.FNC:'L' .BLKB 1LC.MOD:'L' .BLKB 1BC.STS:'L' .BLKW 1 C.BUF1:'L'C.BUF:'L' .BLKW 2C C.CNT1:'L'C.CNT:'L' .BLKW 1: C.FLG1:'L'C.FLG:'L' .BLKW 1.C.BUF2:'L' .BLKW 2C.CNT2:'L' .BLKW 1C.FLG2:'L' .BLKW 1.$$$$.=.C.ADD:'L' .BLKW 3.C.PRO:'L' .BLKW 1M.=.$$$$.C.XPT:'L' .BLKB 1.C.XID:'L' .BLKB 1TC.X25:'L' .BLKB 1TC.XTC:'L' .BLKB 1C.XPLI:'L' .BLKW 1 C.XLEN:'L'CB.XLB='B' 000001:CB.CCB='B' 000002:CB.RDB='B' 000004PCB.SDB='B' 000010KCB.DLC='B' 000020KCB.DDM='B' 000040KCB.SLI='B' 000100KCC.LLC='B' 000200KCS.ENA='B' 000001KCS.CES='B' 000002.CS.STR='B' 000004.CS.CMP='B' 000200 CS.SHU='B' 000001'CS.HCR='B' 000001.CS.DEV='B' 0000022CS.ROV='B' 0000041CS.XUR='B' CS.ROV1CS.RNG='B' 000010LCS.ENB='B' 000020LCS.DIS='B' 000040.CS.ABO='B' 000100.CS.BUF='B' 000200TCS.DCR='B' 000400TCS.FTL='B' 001000CS.HFE='B' 0020001CS.MTL='B' 004000BCS.RSN='B' 010000BCS.TMO='B' 020000BCS.LST='B' 040000BCS.ERR='B' 100000CCS.SID='B' 000002MCE.RTE='B' 100376ICE.TMO='B' 100374CCE.MOP='B' 100372ACE.ERR='B' 100370SCE.DIS='B' 100366RCE.SRC='B' 100364PCE.ABO='B' 100362UCE.NTE='B' 100361RCE.LTO='B' 100356VCE.TME='B' 100354VCE.STP='B' 100352RCE.ILN='B' 100350GCE.DAO='B' 100346BCE.UNS='B' 100344SCS.SUC='B' 000001OCS.BRO='B' 000002FCS.DEF='B' 000004RCS.CHN='B' 000010LCF.CHN='B' 000001ECF.LIN='B' 000002LCF.EOM='B' 000004NCF.SOM='B' 000010OCF.HDR='B' 000020TCF.SYN='B' 000040RCF.TRN='B' 000100DCF.LB='B' 100000CP.HDL='B' 000007TCP.2FR='B' 000030MCP.DCF='B' 000040ECP.XCF='B' 000100DCP.PSI='B' 000200SCP.PS='B' 177400 FC.XME='B' 0 FC.RCE='B' 2 FC.KIL='B' 4 FC.CTL='B' 6 FC.TIM='B' 100 FC.XCP='B' 12' FC.RCP='B' 14N FC.KCP='B' 16E FC.CCP='B' 20B FC.PWR='B' 220 FC.MAN='B' 24' FC.MLD='B' 26O FC.PCT='B' 30SFS.RTN='B' 2*400FS.DVC='B' 2*400FS.CIB='B' 4*400FS.KIL='B' 0*400FS.CRA='B' 2*400FS.XKL='B' 4*400FS.AST='B' 0*400FS.INI='B' 0*400FS.STR='B' 2*400FS.STP='B' 4*400FS.TRM='B' 6*400FS.MNT='B' 10*400PFS.SET='B' 12*400PFS.GET='B' 14*400PFS.XON='B' 16*400PFS.XOF='B' 20*400PFS.RNG='B' 22*400XFS.ENB='B' 24*400'FS.DIS='B' 26*400CFS.MSN='B' 30*400'FS.STM='B' 0*400FS.LTM='B' 2*400FS.RET='B' 0*400FS.REA='B' 2*400FS.ZER='B' 4*400FS.REZ='B' 6*400FS.SFS='B' 10*400'FS.SFC='B' 12*4002FS.SFR='B' 14*400400)r "!TADATADATADATADATADATAFS.SPW='B' 100*400FS.LCL='B' 200*400FS.RST='B' 0*400FS.EXI='B' 2*400CM.LIN='B' 000000SCM.CIR='B' 000002SCM.FMT='B' 100000PCM.LOO='B' 000001'CM.HRD='B' 000002'CM.XLO='B' 000004'FS.HLT='B' 0*400FS.WLB='B' 2*400FS.RLB='B' 4*400 .RESTORE0 .IIF NB LST .NLISTX .ENDM CCBDF$*Y .MACRO SLTDF$ L,B,LST .SAVE .ASECT4.=-2 .IIF NB LST .LISTL.CVA:'B' .BLKW 1AL.FLG:'B' .BLKW 1'L.DDM:'B' .BLKB 1'L.DLC:'B' .BLKB 11L.DDS:'B' .BLKW 11L.DLM:'B' .BLKW 11L.DLS:'B' .BLKW 11L.CTL:'B' .BLKB 12L.UNT:'B' .BLKB 10L.NSTA:'B' .BLKB 1L.COST:'B' .BLKB 1L.KRBA:'B' .BLKW 1L.NMST:'B' .BLKB 1L.OWNR:'B' .BLKB 1 L.MPF:'B'' L.LEN='L'.LF.X2P='L'000000LF.BWT='L'000007LF.TIM='L'000010LF.MTP='L'000020LF.SER='L'000040LF.MDC='L'000100LF.PAC='L'000200LF.BRO='L'000400LF.LPB='L'001000LF.ENA='L'002000LF.MFL='L'004000LF.REA='L'010000LF.UNL='L'020000LF.RDY='L'040000LF.ACT='L'100000 LN.STA='L'17 LN.SUB='L'360 LN.ON='L'0 LN.OFF='L'1 LN.SER='L'2 LN.OAU='L'3T LN.OOP='L'42 LN.CLO='L'0B LN.OPE='L'1A LN.REF='L'2 LN.LOO='L'3L LN.LOA='L'4' LN.DUM='L'5. LN.TRI='L'6B .=0S.FLG:'B' .BLKB 1.S.COST:'B' .BLKB 1S.NMST:'B' .BLKB 1S.OWNR:'B' .BLKB 1 S.LEN:'B'0SF.ACT='L'000200SF.ENA='L'000100SF.UNL='L'000040SF.MFL='L'000040SF.PAC='L'000020SF.REA='L'000010SF.LPB='L'000004SF.SVC='L'000002SF.SER='L'000001 .RESTORE' .IIF NB LST .NLIST4 .ENDM SLTDF$'Y .MACRO PDVDF$ L,B,LST .RADIX 8O .SAVE .ASECT'.=0.IIF NB LST .LISTPZ.DSP:'B' .BLKW 1B .BLKW 1 .IF DF X$$MCBZ.QUE:'B' .BLKW 1N .ENDCZ.NAM:'B' .BLKW 1NZ.LLN:'B' .BLKB 1.Z.SCH:'B' .BLKB 1.Z.FLG:'B' .BLKW 1.Z.PCB:'B' .BLKW 1.Z.AVL:'B' .BLKW 1.Z.LEN='L' .-Z.DSP'Z.DAT:'B' .BLKW 10 Z.MAP:'B'LZF.X3P='L' 0ZF.DDM='L' 1ZF.DLC='L' 2ZF.LLC='L' 4ZF.MFL='L' 10ZF.KMX='L' 20ZF.MUX='L' 40ZF.LMC='L' 100ZF.TIM='L' 200ZF.MTM='L' 400ZF.COU='L'1000ZF.PSE='L'2000ZF.DIA='L'4000ZF.SLI='L'10000.ZF.MAN='L'20000=ZF.INI='L'40000LZF.DVP='L'100000ZS.ASN='L'100000ZS.BSY='L'140000.IIF NB LST .NLIST .RESTORE: .ENDM PDVDF$.Y .MACRO OPTDF$ L,B,LST .IIF NB LST .LIST CF.MDM='L'1. CF.DDM='L'2B CF.DYN='L'4= CF.EIS='L'10 CF.LOG='L'20 CF.TIM='L'400LCF.FRK='L'100000 .IIF NB LST .NLISTC .ENDM OPTDF$CY .MACRO SYNDF$ L,B,LST .IIF NB LST .LIST $SYNC='B' 226T $SYNCT='B' 8.M $PAD='B' 377 $PADSH='B' 2$PADKL='B' 10. .IIF NB LST .NLISTI .ENDM SYNDF$MPY .MACRO ABODF$,L,B S.CACT='B'-4.A S.CEXT='B'-2.S S.COAD='B'0. S.CSGF='B'2. S.CBPT='B'4. S.CIOT='B'6. S.CILI='B'8. S.CEMT='B'10.A S.CTRP='B'12.L S.CFLT='B'14.T S.CSST='B'16.' S.CAST='B'18.' S.CABO='B'20.= S.CLRF='B'22. S.CCRF='B'24.F S.IOMG='B'26.F S.PRTY='B'28. S.CPMD='B'30.L S.CELV='B'32.T S.CINS='B'34. S.CAFF='B'36. S.CCSM='B'38. S.COTL='B'40.I S.CTKN='B'42.2S.BUNK='B'-128.M S.BFEI='B'0. S.BOVL='B'1. S.BHI='B'1.1 S.BBIF='B'1. T.NDNR='B'0. T.NDSE='B'2 T.NCWF='B'4 T.NCRE='B'6B T.NDMO='B'8. T.NUER='B'10.E T.NLDN='B'12.O T.NLUP='B'14.F T.NCFI='B'16.' T.NUDE='B'18.' T.NMPE='B'20.. T.NKLF='B'22.A T.NAAF='B'24.L T.NTAF='B'26.T T.NDEB='B'28.' T.NRCT='B'30.' T.NWBL='B'32.= T.NVER='B'34. T.NIOS='B'36.F T.NIOR='B'38.F T.RECF='B'40. .MACRO ABODF$ X,Y .ENDM .ENDM`Y .MACRO CLKDF$,L,B' C.MRKT='B'0' C.SCHD='B'2N C.SSHT='B'4U C.SYST='B'6 C.SYTK='B'8. C.CSTP='B'10.. .ASECT1.=0BC.LNK:'L' .BLKW 1'C.RQT:'L' .BLKB 1.C.EFN:'L' .BLKB 1'C.TCB:'L' .BLKW 1C.TIM:'L' .BLKW 2L .=C.TIM+4C.AST:'L' .BLKW 1CC.SRC:'L' .BLKW 1'C.DST:'L' .BLKW 10 .BLKW 1 .=C.TIM+4.C.RSI:'L' .BLKW 2FC.UIC:'L' .BLKW 1'C.UAB:'L'.BLKW 1 .=C.TIM+4' .BLKW 2 .BLKW 1 .BLKW 1 .=C.TIM+4.C.SUB:'L' .BLKW 1FC.AR5:'L' .BLKW 1BC.URM:'L'.BLKW 1 .BLKW 1 C.LGTH='B'.C.NAM='B'C.EFNC.CTX='B'C.UIC .PSECTC .MACRO CLKDF$ X,Y .ENDM .ENDM Y .MACRO DCBDF$,L,B,SYSDEFB .ASECTL.=0KD.LNK:'L' .BLKW 1KD.00)v:;rUCB:'L' .BLKW 1KD.NAM:'L' .BLKW 1KD.UNIT:'L' .BLKB 1 .BLKB 1D.UCBL:'L' .BLKW 1D.DSP:'L' .BLKW 1BD.MSK:'L' .BLKW 1B .BLKW 1 .BLKW 1 .BLKW 1 .BLKW 1 .BLKW 1 .BLKW 1 .BLKW 1D.PCB:'L' .BLKW 1= .PSECT D.VDEB='B'-2 D.VCHK='B'-4 D.VNXC='B'-4 D.VTOU='B'-10 D.VTIN='B'-6 D.VINI='B'0R D.VCAN='B'2 D.VOUT='B'4G D.VPWF='B'6A D.VKRB='B'10 D.VUCB='B'12 .IF NB SYSDEF D.VINT='B'14 .ENDC .MACRO DCBDF$,X,Y,Z .ENDM .ENDMY .MACRO DEVDF$,L,B .MCALL DCBDF$ DCBDF$ , .MCALL UCBDF$ UCBDF$ ,L .MCALL SCBDF$ SCBDF$ ,1 .MCALL KRBDF$ KRBDF$ ,B .MCALL CTBDF$ CTBDF$ ,W .MCALL LCBDF$ LCBDF$ , .MACRO DEVDF$,X,Y .ENDM .ENDM Y .MACRO EPKDF$,L,B .ASECT. U.=01E$HLGH:'L' .BLKW 1E$HSBF:'L' .BLKW 1E$HSYS:'L' .BLKB 1E$HIDN:'L' .BLKB 1E$HSID:'L' .BLKB 4E$HCTX:'L' .BLKB 1E$HFLG:'L' .BLKB 1E$HENS:'L' .BLKW 1E$HERS:'L' .BLKW 1 E$HENC:'L'E$HTYC:'L' .BLKB 1E$HTYS:'L' .BLKB 1E$HTIM:'L' .BLKB 6E$HPTY:'L' .BLKB 1 .BLKB 1E$HURM:'L' .BLKW 1 .EVENB E$HLEN:'L' D SM.ERR ='B' 1 SM.HDR ='B' 1F SM.TSK ='B' 2C SM.DID ='B' 4 SM.DOP ='B' 10 SM.DAC ='B' 20  SM.DAT ='B' 40P SM.MBC ='B' 20000 SM.CMD ='B' 40000W SM.ZER ='B' 1000001 EH$FOR ='B' 2 ES.INI ='B' 1$ ES.DAT ='B' 2C ES.LIM ='B' 4G ES.LOG ='B' 10' . E$CCMD ='B' 1L E$SSTA ='B' 1T E$SSWI ='B' 2S E$SAPP ='B' 3' E$SBAC ='B' 4' E$SSHO ='B' 5 E$SCHL ='B' 6  E$CERR ='B' 2D E$SDVH ='B' 1 E$SDVS ='B' 2F E$STMO ='B' 3 E$SUNS ='B' 4 E$STMS ='B' 5 E$CDVI ='B' 3S E$SDVI ='B' 1S E$CDCI ='B' 4 E$SMOU ='B' 1 E$SDMO ='B' 2 E$SRES ='B' 3 E$SRCT ='B' 4 E$CMEM ='B' 5 E$SMEM ='B' 1 E$CSYS ='B' 6 E$SPWR ='B' 1  E$CCTL ='B' 7  E$STIM ='B' 1  E$SCRS ='B' 2  E$SLOA ='B' 3  E$SUNL ='B' 4  E$SHRC ='B' 5  E$SMES ='B' 6  E$CCPU ='B' 10  E$SINT ='B' 1 ; E$SINT ='B' 2  E$CSDE ='B' 11  E$SABO ='B' 1  EH$NOR ='B' 1  EH$STA ='B' 2  EH$CRS ='B' 3  EH$VIR ='B' 1  EH$EXT ='B' 2  EH$COU ='B' 4  EH$QBS ='B' 10 EH$LMR ='B' 20  .=0EE$TLGH:'L' .BLKW 1E$TTSK:'L' .BLKW 2E$TUIC:'L' .BLKW 1E$TTID:'L' .BLKB 2E$TTIU:'L' .BLKB 1E$TFLG:'L' .BLKB 1 .EVEN E$TLEN:'L' ET$PRV ='B' 1  ET$PRI ='B' 2   .=0EE$ILGH:'L' .BLKW 1E$ILDV:'L' .BLKW 1E$ILUN:'L' .BLKB 1E$IPCO:'L' .BLKB 1E$IPUN:'L' .BLKB 1E$IPSU:'L' .BLKB 1 .IF DF R$$MPL'E$IPDV:'L' .BLKW 1 .ENDC E$IFLG:'L' .BLKB 1 .BLKB 1IE$IVOL:'L' .BLKB 12.E$IPAK:'L' .BLKB 4 E$IDEV:'L'E$IDCL:'L' .BLKW 1E$IDTY:'L' .BLKW 2E$IOPR:'L' .BLKW 2E$IERS:'L' .BLKB 1E$IERH:'L' .BLKB 1 .IF DF R$$MPLWE$IBLK:'L' .BLKW 2E$ICYL:'L' .BLKW 2 .ENDCG .EVEN E$ILEN:'L' EI$SUB ='B' 1  .IF DF R$$MPL$ EI$NUX ='B' 2 .ENDC$ H.=0.E$OLGN:'L' .BLKW 1E$OTSK:'L' .BLKW 2E$OUIC:'L' .BLKW 1E$OTID:'L' .BLKB 2E$OTIU:'L' .BLKB 1 .BLKB 1IE$OFNC:'L' .BLKW 1E$OFLG:'L' .BLKB 1 .BLKB 1'E$OADD:'L' .BLKW 2E$OSIZ:'L' .BLKW 1E$ORTY:'L' .BLKB 1$ .BLKB 11 .EVEN E$OLEN:'L' EO$TRA ='B' 1 EO$DMA ='B' 2$ EO$EXT ='B' 4I EO$PIP ='B' 10' EO$IIO ='B' 20.=0DE$ALGH:'L' .BLKW 1 .=0UE$ALDV:'L' .BLKW 1E$ALUN:'L' .BLKB 1E$APCO:'L' .BLKB 1E$APUN:'L' .BLKB 1E$APSU:'L' .BLKB 1 .IF DF R$$MPLE$APDV:'L' .BLKW 1 .ENDC'E$ADFG:'L' .BLKB 1E$ATIU:'L' .BLKB 1E$ATSK:'L' .BLKW 2E$AUIC:'L' .BLKW 1E$ATID:'L' .BLKW 1E$AFNC:'L' .BLKW 1E$AFLG:'L' .BLKB 1 .BLKB 1BE$AADD:'L' .BLKW 2E$ASIZ:'L' .BLKW 1 .EVEN E$ALEN:'L' EA$SUB ='B' 1E .IF DF R$$MPL$ EA$NUX ='B' 2 .ENDC' EA$TRA ='B' 1O EA$DMA ='B' 2 EA$EXT ='00)r "!TADATADATADATADATADATAB' 4W EA$PIP ='B' 10 EA$IIO ='B' 20 .PSECT. EL.ICM ='B' 1 EL.SEF ='B' 2 EL.MOU ='B' 4 .MACRO EPKDF$ X,Y .ENDM .ENDMY .MACRO EVNDF$ L,B,LST .IIF NB LST .LIST .ASECT .=0E.VLNK:'L' .BLKW 1E.VSIZ:'L' .BLKB 1E.VTYP:'L' .BLKB 1E.VUCB:'L' .BLKW 1 ET.LOW='B'0' ET.QIO='B'0$ ET.BND='B'2W ET.UNB='B'4$ ET.BCP='B'6$ ET.REJ='B'10 ET.DIS='B'12 ET.DCP='B'14 ET.ICS='B'16 ET.OOB='B'20 ET.ONO='B'22 ET.PHO='B'24 ET.HI='B'24 .=E.VUCB+2'E.VBCT:'L' .BLKW 1E.VBND:'L' .BLKB 6 E.VBLN:'L' .=E.VUCB+2E.VAPR:'L' .BLKW 1E.VADR:'L' .BLKW 1E.VFLG:'L' .BLKW 1 .=E.VFLG+2X E.VSLN:'L' .=E.VFLG+2E.VOBM:'L' .BLKW 6E.VHDR:'L' .BLKW 2E.VTAB:'L' .BLKB 10. E.VOLN:'L' .=E.VFLG+2WE.VSWC:'L' .BLKW 1 E.VTLN:'L' EF.NCO='B'1. EF.NOI='B'2W EF.AST='B'10 EF.LCK='B'40 EF.QUE='B'100W EF.MDE='B'200 .=E.VUCB+2 E.VULN:'L' .=E.VUCB+22E.VRR:'L' .BLKW 1I E.VRLN:'L' .=E.VUCB+2TE.VRD:'L' .BLKW 1' E.VDLN:'L' .=E.VUCB+2V E.VDCL:'L' .PSECTL .IF NB LST .NLISTB.IFF .MACRO EVNDF$ .ENDM.ENDC' .ENDM EVNDF$AY .MACRO HDRDF$,L,B .ASECTX.=0SH.CSP:'L'.BLKW 1H.HDLN:'L'.BLKW 1WH.SMAP:'L'.BLKB 1WH.DMAP:'L'.BLKB 1BH.FMAP:'L'.BLKW 1.H.CUIC:'L'.BLKW 1'H.DUIC:'L'.BLKW 1'H.IPS:'L'.BLKW 1H.IPC:'L'.BLKW 1H.ISP:'L'.BLKW 1H.ODVA:'L'.BLKW 1WH.ODVL:'L'.BLKW 1.H.TKVA:'L'.BLKW 1'H.TKVL:'L'.BLKW 1.H.PFVA:'L'.BLKW 1.H.FPVA:'L'.BLKW 1+H.RCVA:'L'.BLKW 1 H.EFSV:'L'.BLKW 1EH.FPSA:'L'.BLKW 1'H.WND:'L'.BLKW 1H.DSW:'L'.BLKW 1H.FCS:'L'.BLKW 1H.FORT:'L'.BLKW 1.H.OVLY:'L'.BLKW 1H.VEXT:'L'.BLKW 1 H.SPRI:'L'.BLKB 1XH.NML:'L'.BLKB 1H.RRVA:'L'.BLKW 1BH.X25:'L'.BLKB 1 .BLKB 1 .BLKW 1H.LUTE:'L'.BLKW 1'H.GARD:'L'.BLKW 1'H.NLUN:'L'.BLKW 1'H.LUN:'L'.BLKW 2H.FPSL='B'25.*2L.=0WW.BPCB:'L'.BLKW 11W.BLVR:'L'.BLKW 1WW.BHVR:'L'.BLKW 1.W.BATT:'L'.BLKW 1'W.BSIZ:'L'.BLKW 1.W.BOFF:'L'.BLKW 1.W.BFPD:'L'.BLKB 1+W.BNPD:'L'.BLKB 1 W.BLPD:'L'.BLKW 1E W.BLGH:'L' WB.NBP='B'20 WB.BPS='B'40 .PSECT. .MACRO HDRDF$ X,Y .ENDM .ENDMp Y .MACRO HWDDF$,L,B,SYSDEF  .MACRO CRESET NAM,ADDR.$$$=0. .REPT 8.R CRENAM NAM,ADDR+<$$$*2>,\$$$1 $$$=$$$+1 .ENDR .ENDM .MACRO CRENAM NAM,ADDR,NK'NAM''N'==ADDR .ENDMMPCSR='B'1777462MPAR='B'172100PIRQ='B'177772PR0='B'0 PR1='B'40' PR4='B'200 PR5='B'240 PR6='B'300 PR7='B'340 PS='B'177776 SWR='B'177570F TPS='B'177564.KXCSRA='B'177520KXCSRD='B'177530KXJQIR='B'177532KXCSRF='B'177534KXCSRH='B'177536 .IF DF E$$EAE AC='B'177302 MQ='B'177304 SC='B'177310 .ENDC .IF NB BR CRESET KINAR,172340 CRESET KINDR,172300 CRESET KDSAR,172360 CRESET KDSDR,172320 CRESET SISAR,172240 CRESET SISDR,172200 CRESET SDSAR,172260 CRESET SDSDR,172220 CRESET UINAR,177640 CRESET UINDR,177600 CRESET UDSAR,177660 CRESET UDSDR,177620 .ENDC .IF NB SYSDEF .IF DF K$$DAS CRESET KISAR,172360 CRESET KISDR,172320 .IFF' CRESET KISAR,172340 CRESET KISDR,172300 .ENDC .IF DF U$$DAS CRESET UISAR,177660 CRESET UISDR,177620 .IFF3 CRESET UISAR,177640 CRESET UISDR,177600 .ENDC .ENDCUBMPR='B'1702003CMODE='B'140000,PMODE='B'30000CSMODE='B'40000EPSMODE='B'10000 SR0='B'1775727 SR3='B'172516DCPUERR='B'177766MEMERR='B'177744MEMCTL='B'177746N.KEY='B'1730547N.UPT='B'173064AN.DZA='B'173074 N.DWA='B'173104NN.DAY='B'173114FN.MON='B'173116N.YEA='B'1731203 FE.EXT='B'1I FE.MUP='B'2. FE.EXV='B'4 FE.DRV='B'10 FE.PLA='B'20 FE.CAL='B'40 FE.PKT='B'100S FE.EXP='B'200, FE.LSI='B'400 FE.OFF='B'1000FE.FDT='B'2000FE.X25='B'4000FE.DYM='B'10000FE.CEX='B'20000BFE.MXT='B'40000MFE.NLG='B'100000 F2.DAS='B'1 F2.LIB='B'20 F2.MP='B'4 F2.EVT='B'10 F2.ACN='B'20 F2.SDW='B'40 F2.POL='B'1006 F2.WND='B'2007 F2.DPR='B'4007F2.IRR='B'1000F2.GGF='B'2000F2.RAS='B'4000F2.AHR='B'10000=F2.RBN='B'20000=F2.SWP='B'40000=F2.STP='B'100000 F3.CRA='B'1E F3.XCR='B'2E F3.EIS='B'4E F3.STM='B'10 F3.UDS='B'20 F3.PRO='B'40 F3.XHR='B'1000)v:;r0P F3.AST='B'200E F3.11S='B'400LF3.CLI='B'1000F3.TCM='B'2000F3.PMN='B'4000F3.WAT='B'10000MF3.RLK='B'20000XF3.SHF='B'40000T F4.CXD='B'1E F4.XT='B'2 F4.ERL='B'4' F4.PTY='B'10 F4.DVN='B'20 F4.LCD='B'40 F4.NIM='B'100 F4.CHE='B'2002 F4.LOG='B'4002F4.NAM='B'1000F4.FMP='B'2000F4.DCL='B'4000F4.DDS='B'10000RF4.ACD='B'20000RF4.NCT='B'40000NF4.LSD='B'100000 F5.PRO='B'12 F5.DFB='B'20 F5.RTB='B'4E F5.ODB='B'10 F5.XDJ='B'20 F5.NSY='B'40 F5.NCO='B'100 F5.RTK='B'2003 F5.RDR='B'4003F5.RLG='B'1000F5.LDR='B'2000F5.VTL='B'4000 HF.UBM='B'1 HF.EIS='B'20 HF.QB='B'4 HF.DSP='B'10 HF.SWR='B'20 HF.KXJ='B'40 HF.RMT='B'100 HF.CIS='B'200EHF.FPP='B'100000 H2.NVR='B'1' H2.INV='B'2' H2.CLK='B'4' H2.ITF='B'10 H2.PRO='B'20H2.BRG='B'100000 SF.STD='B'1F SF.PGN='B'24MP.CRH='B'100000MP.PWF='B'40000AMP.RSM='B'20000NMP.NOP='B'10000L MP.STP='B'4MP.INT='B'7777 .MACRO HWDDF$ X,Y,Z .ENDM .ENDMY .MACRO ITBDF$ L,B,SYSDEF .IF DF A$$TRP .MCALL PKTDF$ PKTDF$' .ENDC .ASECT0 .=0X.LNK:'L' .BLKW 1MX.JSR:'L' JSR R5,@#0X.PSW:'L' .BLKB 1' .BLKB 1X.ISR:'L' .BLKW 1' X.FORK:'L' .BLKW 1 .BLKW 1 .BLKW 1 .BLKW 1 .IF DF M$$MGEX.REL:'L' .BLKW 1K .ENDCX.DSI:'L' .BLKW 1OX.TCB:'L' .BLKW 10 .IF NB SYSDEF .IF DF A$$TRP .BLKW 1X.AST:'L' .BLKB A.PRM0 .ENDCX.VEC:'L' .BLKW 1PX.VPC:'L' .BLKW 1' X.LEN:'L'T .ENDC .PSECT .MACRO ITBDF$ X,Y,Z .ENDM ITBDF$ .ENDM ITBDF$Y .MACRO KRBDF$,L,B,SYSDEFC .ASECT$.=177770K.PRM:'L' .BLKW 1K.PRI:'L' .BLKB 1KK.VCT:'L' .BLKB 1 K.CON:'L' .BLKB 1BK.IOC:'L' .BLKB 1.K.STS:'L' .BLKW 1.K.CSR:'L' .BLKW 1K.OFF:'L' .BLKW 1K.HPU:'L' .BLKB 1$ .BLKB 1K.OWN:'L' .BLKW 1NK.CRQ:'L' .BLKW 2 K.URM:'L' .BLKW 1 K.FRK:'L' .BLKW 1.=-20.KE.UMH:'L'.BLKW 2.KE.UMC:'L'.BLKW 10.=177776KE.RHB:'L'.BLKW 1KE.UCB:'L'.BLKW 1 .PSECTT KS.OFL='B'1S KS.MOF='B'2I KS.UOP='B'4 KS.MBC='B'10 KS.SDX='B'20 KS.POE='B'40 KS.UCB='B'100D KS.DIP='B'200 KS.PDF='B'4007KS.EXT='B'1000KS.SLO='B'2000 .ASECTK.=177762S.PRI:'L' .BLKB 1LS.VCT:'L' .BLKB 1LS.CON:'L' .BLKB 1L .BLKB 1 .BLKW 1S.CSR:'L' .BLKW 1L .BLKW 1 .BLKB 1 .BLKB 1S.OWN:'L' .BLKW 1L .ASECTN.=-4K1.CON:'L'.BLKB 1R .BLKB 1K1.STS:'L'.BLKW 1KK1.MAS:'L'.BLKW 1HK1.OWN:'L'.BLKW 1CK1.CRQ:'L'.BLKW 27 K1.UCB:'L' .PSECT .MACRO KRBDF$,X,Y,Z .ENDM .ENDM4Y .MACRO LBLDF$ L,B .ASECT0.=0SR$LNAM:'L'.BLKW 2'R$LSA:'L' .BLKW 1R$LHGV:'L'.BLKW 1PR$LMXV:'L'.BLKW 1'R$LLDZ:'L'.BLKW 10R$LMXZ:'L'.BLKW 17R$LOFF:'L'.BLKW 1 R$LWND:'L'.BLKW 1 R$LSEG:'L'.BLKW 1 R$LFLG:'L'.BLKW 1WR$LDAT:'L'.BLKW 3 R$LSIZ:'L'.BLKW 0BLD$ACC='B'100000LD$RSV='B'040000LD$CLS='B'020000LD$SUP='B'000010LD$REL='B'000004LD$TYP='B'000002.=0KL$BTSK:'L'.BLKW 2KL$BPAR:'L'.BLKW 2KL$BSA:'L' .BLKW 1.L$BHGV:'L'.BLKW 1DL$BMXV:'L'.BLKW 1.L$BLDZ:'L'.BLKW 1L$BMXZ:'L'.BLKW 1LL$BOFF:'L'.BLKW 1L$BWND:'L'.BLKB 1L$BSYS:'L'.BLKB 1L$BSEG:'L'.BLKW 1L$BFLG:'L'.BLKW 1L$BDAT:'L'.BLKW 3!L$BLIB:'L'.BLKW <7.*>+1 L$BPRI:'L'.BLKW 1 L$BXFR:'L'.BLKW 1 L$BEXT:'L'.BLKW 1 L$BSGL:'L'.BLKW 1 L$BHRB:'L'.BLKW 1 L$BBLK:'L'.BLKW 10L$BLUN:'L'.BLKW 1L$BROB:'L'.BLKW 1DL$BROL:'L'.BLKW 1RL$BRDL:'L'.BLKW 1PL$BHDB:'L'.BLKW 1$L$BDHV:'L'.BLKW 1$L$BDMV:'L'.BLKW 1$L$BDLZ:'L'.BLKW 1$L$BDMZ:'L'.BLKW 1$L$BAPR:'L'.BLKW 1$ .BLKW <512.-.>/2$L$BASG:'L'.BLKW 0$$LBXL='B'<8.*>.=772KL$BFL2:'L'.BLKW 1KL$BLRL:'L'.BLKW 1KL$AME:'L' .BLKW 1K; .IIF NE .-1000 .ERROR DEFINITIONS OVERLAP NEXT LABEL BLOCKLB$REV='B'000400TS$PIC='B'100000TS$NHD='B'040000TS$ACP='B'020000TS$PMD='B'010000TS$SLV='B'004000TS$NSD='B'002000TS$PRV='B'000400TS$CMP='B'000200TS$CHK='B'000100TS$RES='B'000040TS$IOP='B'000020TS$SUP='B'000010TS$XHR='B'000004TS$NXH='B'000002TS$NEW='B'000001T2$FMP='B'000002T2$CLI='B'000001 .PSECT. .MACRO LBLDF$ X,Y .ENDM .ENDM Y .MACRO PCBDF$ L,B,SYSDEFL .ASECTK00) r "!TADATADATADATADATADATA.=0P.LNK:'L'.BLKW 1 .BLKW 1P.NAM:'L'.BLKW 2P.SUB:'L'.BLKW 1P.MAIN:'L'.BLKW 1BP.REL:'L'.BLKW 1 P.BLKS:'L'P.SIZE:'L'.BLKW 10P.WAIT:'L'.BLKW 2 .BLKW 2P.STAT:'L'.BLKW 10P.ST2:'L' .BLKW 10 .BLKW 3P.HDLN:'L'.BLKB 1'P.IOC:'L' .BLKB 1'$$$=.P.RRM:'L'.BLKW 1 .IF NDF M$$PRO.=$$$' .ENDC .IF NB SYSDEF P.LGTH='B'.' .ENDC.=0WP.LNK:'L'.BLKW 1P.PRI:'L'.BLKB 1P.RMCT:'L'.BLKB 1.P.NAM:'L'.BLKW 2P.SUB:'L'.BLKW 1P.MAIN:'L'.BLKW 1P.REL:'L'.BLKW 1 P.BLKS:'L'P.SIZE:'L'.BLKW 1: .BLKW 1P.SWSZ:'L'.BLKW 1LP.DPCB:'L'.BLKW 1.P.TCB:'L'.BLKW 1P.STAT:'L'.BLKW 1.P.HDR:'L' .BLKW 1 .BLKW 1P.ATT:'L' .BLKW 2'P.HDLN:'L'.BLKB 1P.IOC:'L' .BLKB 1$$$=.LP.RRM:'L'.BLKW 1 .IF NDF M$$PROK.=$$$. .ENDC.=0 P.LNK:'L'.BLKW 1P.PRI:'L'.BLKB 1P.RMCT:'L'.BLKB 1P.NAM:'L'.BLKW 2P.SUB:'L'.BLKW 1P.MAIN:'L'.BLKW 1NP.REL:'L'.BLKW 1 P.BLKS:'L'P.SIZE:'L'.BLKW 1.P.CBDL:'L'.BLKW 1 P.CSBA:'L'P.SWSZ:'L'.BLKW 1KP.DPCB:'L'.BLKW 1WP.OWN:'L' .BLKW 1IP.STAT:'L'.BLKW 1LP.ST2:'L' .BLKW 1KP.PRO:'L' .BLKW 1KP.ATT:'L' .BLKW 2WP.HDLN:'L'.BLKB 1 P.IOC:'L' .BLKB 1 $$$=.LP.RRM:'L'.BLKW 1 .IF NDF M$$PRO'.=$$$ .ENDC .PSECT PS.OUT='B'100000PS.CKP='B'40000NPS.CKR='B'20000.PS.CHK='B'10000.PS.FXD='B'4000PS.CAF='B'2000PS.LIO='B'1000 PS.NSF='B'400. PS.COM='B'200L PS.LFR='B'100N PS.PER='B'40 PS.NWB='B'20 PS.DEL='B'10 PS.AST='B'4B PS.CSA='B'2LPR.UBT='B'100000PR.UBS='B'40000'PR.UBR='B'20000'PR.UBP='B'10000:PR.UBN='B'4000PR.UBM='B'2000PR.UBL='B'1000 PR.UBK='B'400 PR.UBJ='B'200: PR.UBH='B'100. PR.UBF='B'40 PR.UBE='B'20 PR.CPD='B'10 PR.CPC='B'4. PR.CPB='B'2N PR.CPA='B'1=P2.LMA='B'40000SP2.CPC='B'200000P2.CHE='B'100000P2.SEC='B'4000P2.PAR='B'2000P2.POL='B'1000 P2.CPU='B'400F P2.PIC='B'200O P2.RON='B'100F P2.DRV='B'40 P2.LDD='B'20 P2.APR='B'7 .ASECT'.=0SP.LNK:'L' .BLKW 1'P.UCB:'L' .BLKW 1P.LBN:'L' .BLKW 1T .BLKW 1P.SUB:'L' .BLKW 1P.MAIN:'L' .BLKW 1P.REL:'L' .BLKW 1UP.SIZE:'L' .BLKW 1 P.DLGH='B'.L.=00 .BLKW 4P.SUB:'L' .BLKW 1'P.MAIN:'L' .BLKW 1P.REL:'L' .BLKW 1UP.SIZE:'L' .BLKW 1.=0RP.FID1:'L' .BLKW 1P.UCB:'L' .BLKW 1P.LBN:'L' .BLKW 12 .BLKW 1P.IID='B' P.LBN0P.FID2:'L' .BLKW 1P.MAIN:'L'.BLKW 12P.REL:'L' .BLKW 1UP.FID3:'L' .BLKW 1 .ASECTR.=0'A.PCBL:'L'.BLKW 1A.PRI:'L'.BLKB 1A.IOC:'L'.BLKB 1A.TCB:'L'.BLKW 1A.TCBL:'L'.BLKW 1 A.STAT:'L'.BLKB 1 A.MPCT:'L'.BLKB 1A.PCB:'L'.BLKW 1 A.LGTH='B'.. .PSECT. AS.PRO='B'100U AS.SBP='B'20 AS.RBP='B'40 AS.DEL='B'10 AS.EXT='B'4U AS.WRT='B'2' AS.RED='B'1. .MACRO PCBDF$ X,Y,Z .ENDM .ENDM Y .MACRO PKTDF$,L,B,SYSDEF  .ASECT.=177774A.KSR5:'L' .BLKW 1A.DQSR:'L' .BLKW 1 .BLKW 1A.CBL:'L' .BLKW 1BA.BYT:'L' .BLKW 1BA.AST:'L' .BLKW 1.A.NPR:'L' .BLKW 1=A.PRM:'L' .BLKW 1 AS.FPA='B'1. AS.RCA='B'2: AS.RRA='B'3. AS.PEA='B'41 AS.REA='B'5B AS.PFA='B'6T AS.CAA='B'7 AF.XCC='B'1K AF.NOT='B'2L AF.OOB='B'4G AF.AST='B'10 AF.ESQ='B'20 AF.LCK='B'40 AF.QUE='B'100' AF.MDE='B'200' AB.NPV='B'1' AB.TYP='B'2' AB.CTC='B'4' A.PLGH='B'70 A.DUCB='B'10 A.DLGH='B'10. AK.BUF='B'200 AK.OCB='B'201L AK.GBI='B'202S AK.TBT='B'203 AK.DIO='B'204W AK.GGF='B'205.SF.PRV='B'100000SF.IN='B' 40000B.=0YG.LNK:'L'.BLKW 1G.GRP:'L'.BLKB 1G.STAT:'L'.BLKB 1G.CNT:'L'.BLKW 1G.EFLG:'L'.BLKW 2R G.LGTH='B'.R GS.DEL='B'1P PC.HIH='B'1R PC.LOW='B'2P PC.ALF='B'4C PC.XIT='B'200CPC.NRM='B'PC.HIH*400PC.ALM='B'PC.LOW*400 PF.INS='B'40 PF.LOG='B'100' PF.REQ='B'2000PF.ALL='B'177777.=0NO.LNK:'L'.BLKW 1O.MCRL:'L'.BLKW 1O.PTCB:'L'.BLKW 1BO.AST:'L'.BLKW 1O.EFN:'L'.BLKW 1O.ESB:'L'.BLKW 1O.STAT:'L'.BLKW 8. O.LGTH='B'. .ASECT'.=0I.LNK:'L' .BLKW 1PI.PRI:'L' .BLKB 1=I.EFN:'L' .BLKB 1.I.TCB:'L' .BLKW 1RI.LN2:'L' .BLKW 1TI.UCB:'L' .BLKW 1:I.FCN:'L' .BLKW 1'I.IOSB:'L' .BLKW 1 .BLKW 1 .BLKW 1I.AST:'L' .BLKW 1WI.PRM:'L' .BLKW 1C .BLKW 6 .BLKW 1IP.FAK ='B' 20IP.ABO ='B' 40IP.PND ='B' 100'IP.UMR ='B'200 I.00)v:;rATTL='B'.'I.AADA:'L' .BLKW 2 I.LGTH='B'..I.ATRL='B'6*8. .ASECT'.= 0I.XLNK:'L' .BLKW 1BI.XIOP:'L' .BLKW 1.I.XTCB:'L' .BLKW 1:I.XMOD:'L' .BLKW 2'I.XRBF:'L' .BLKW 2I.XRBL:'L' .BLKW 1NI.XTMO:'L' .BLKW 1:I.XPBF:'L' .BLKW 2LI.XPBL:'L' .BLKW 1 I.XPBV:'L' .BLKW 1BI.XTTB:'L' .BLKW 2KI.XTTL:'L' .BLKW 1 I.XDBF:'L' .BLKW 21I.XDBL:'L' .BLKW 1 I.XLEN='B'.K.=0C.PTCB:'L' .BLKW 1C.PNAM:'L' .BLKW 2C.PSTS:'L' .BLKW 1C.PDPL:'L' .BLKB 1C.PCPL:'L' .BLKB 1 C.PRMT:'L' CP.NUL='B'1A CP.MSG='B'2 CP.LGO='B'4 CP.DSB='B'10 CP.PRV='B'20 CP.SGL='B'40 CP.NIO='B'100I CP.RST='B'200. CP.EXT='B'400LCP.POL='B'1000CP.CTC='B'2000.=0'C.CLK:'L' .BLKW 1C.CTCB:'L' .BLKW 1C.CUCB:'L' .BLKW 1C.CCT:'L' .BLKW 1C.CSTS:'L' .BLKW 1 C.CMCD:'L'C.CSO:'L' .BLKW 1C.CTR:'L' .BLKB 1C.CBLK:'L' .BLKB 1 C.CTXT:'L' CC.MCR='B'1' CC.PRM='B'2 CC.EXT='B'4 CC.KIL='B'10 CC.CLI='B'20 CC.MSG='B'40 CC.TTD='B'100. CC.CTC='B'200' CM.INE='B'1. CM.IND='B'2B CM.CEN='B'3' CM.CDS='B'4A CM.ELM='B'5 CM.EXT='B'6 CM.LKT='B'70 CM.RMT='B'8. CM.MSG='B'9..=0NA.REL:'L' .BLKW 1'A.DIS:'L' .BLKW 10A.MAS:'L' .BLKW 2A.NUM:'L' .BLKB 1'A.FLEN:'L'.BLKB 11A.LIN:'L' .BLKW 11A.ACC:'L' .BLKB 11A.STA:'L' .BLKB 11 A.PLEN='B'...=A.LIN.A.IMAP:'L' .BLKW 1A.IBUF:'L' .BLKW 1A.ILEN:'L' .BLKW 1A.SMAP:'L' .BLKW 1A.SBUF:'L' .BLKW 1A.SLEN:'L' .BLKW 1A.IOS:'L' .BLKW 2C A.RES='B'. UA.ACC='B'1 UA.PRO='B'2. UA.ECH='B'40 UA.TYP='B'10 UA.SPE='B'20 UA.PUT='B'40 UA.CAL='B'100A UA.COM='B'200 UA.ALL='B'400MUA.TRN='B'1000UA.TRA='B'2000.=0.A.ACCE:'L' .BLKW 1A.DEQU:'L' .BLKW 1A.POWE:'L' .BLKW 1A.INPU:'L' .BLKW 1A.OUTP:'L' .BLKW 1A.CONN:'L' .BLKW 1A.DISC:'L' .BLKW 1A.RECE:'L' .BLKW 1A.PROC:'L' .BLKW 1A.TRAN:'L' .BLKW 1A.CALL:'L' .BLKW 1 AS.DLT='B'1. AS.DIS='B'2W .PSECTP .MACRO PKTDF$ X,Y,Z .ENDM .ENDM\Y .MACRO SCBDF$,L,B,SYSDEF. .IF NB SYSDEF .ASECT'.=0AS.LHD:'L' .BLKW 2' S.URM:'L'E .IF DF M$$PRO .BLKW 1 .ENDCS.FRK:'L' .BLKW 1 .BLKW 1 .BLKW 1 .BLKW 1 .IF DF L$$DRVS.KS5:'L' .BLKW 1. .ENDCS.PKT:'L' .BLKW 1S.CTM:'L' .BLKB 1S.ITM:'L' .BLKB 1S.STS:'L' .BLKB 1S.ST3:'L'.BLKB 1S.ST2:'L' .BLKW 11S.KRB:'L' .BLKW 11S.RCNT:'L'.BLKB 11S.ROFF:'L'.BLKB 11S.EMB:'L'.BLKW 1S.KTB:'L' .BLKW 1S .PSECTWS.PORT='B'S.EMB+2 S.PBIA='B'S.EMB+4MS.QST='B'S.EMB+6S.BSYU='B'S.EMB+10 .IFFB S2.EIP='B'1F S2.ENB='B'2. S2.LOG='B'4 S2.MAD='B'10 S2.LDS='B'40 S2.OPT='B'100P S2.CON='B'200. S2.OP1='B'400 S2.OP2='B'1000S2.ACT='B'2000S2.XHR='B'4000S2.KRQ='B'10000 S3.DRL='B'1N S3.NRL='B'2 S3.SIP='B'4T S3.ATN='B'10 S3.SLV='B'20 S3.SPA='B'40 S3.SPB='B'100. S3.OPT='B'200S3.SPU='B'S3.SPA!S3.SPB: KP.OFL='B'1 .ASECT'.=0 M.LNK:'L' .BLKW 1M.UMRA:'L' .BLKW 1M.UMRN:'L' .BLKW 1M.UMVL:'L' .BLKW 1M.UMVH:'L' .BLKB 1M.BFVH:'L' .BLKB 1M.BFVL:'L' .BLKW 1 M.LGTH='B'.F .ENDC .PSECT .MACRO SCBDF$,X,Y,Z .ENDM .ENDM Y .MACRO TCBDF$,L,B,SYSDEF0 .ASECT1.=00T.LNK:'L' .BLKW 1T.PRI:'L' .BLKB 1XT.IOC:'L' .BLKB 1'T.PCBV:'L' .BLKW 1T.NAM:'L' .BLKW 23T.RCVL:'L' .BLKW 2T.ASTL:'L' .BLKW 2T.EFLG:'L' .BLKW 2T.UCB:'L' .BLKW 1'T.TCBL:'L' .BLKW 1T.STAT:'L' .BLKW 1T.ST2:'L' .BLKW 1 T.ST3:'L' .BLKW 11T.DPRI:'L' .BLKB 1T.LBN:'L' .BLKB 31T.IID='B' T.LBN+11T.LDV:'L' .BLKW 11T.PCB:'L' .BLKW 11T.MXSZ:'L' .BLKW 1T.ACTL:'L' .BLKW 1T.ATT:'L' .BLKW 2RT.ST4:'L' .BLKW 1NT.HDLN:'L' .BLKB 1 .BLKB 1T.GGF:'L' .BLKB 1ST.TIO:'L' .BLKB 1=T.EFLM:'L' .BLKW 2T.TKSZ:'L' .BLKW 1$$$=.OT.OFF:'L' .BLKW 1C .BLKB 1T.SRCT:'L' .BLKB 1T.RRFL:'L' .BLKW 2 .IF NDF P$$LAS..=$$$ .ENDC .IF NB SYSDEF$$$=.BT.CTX:'L' .BLKW 1. .IF NDF N$$DIR'.=$$$1 .ENDC$$$=.KT.OCBH:'L' .BLKW 2T.RDCT:'L' .BLKW 1 .IF NDF P$$OFFB.=$$$ .ENDCT.SAST:'L' .BLKW 1$$$=. T.RRM:'L'.BLKW 1T.IRM:'L'.BLKW 1T.CPU:'L'.BLKB 1 .BLKB 1 .IF NDF M$$PROR.=$$$: .ENDC$$$=..T.ACN:'L'.BLKW 1 .IF NDF A$$CNTL.=$$00)r "!TADATADATADATADATADATA$  .ENDC$$$=.BT.ISIZ:'L'.BLKW 1. .IF NDF U$$DAS'.=$$$1 .ENDC T.LGTH='B'.B T.EXT='B'0 .IFF.TS.EXE='B'100000TS.RDN='B'400002TS.MSG='B'20000.TS.CIP='B'10000TS.RUN='B'4000TS.RSW='B'2000TS.STP='B'1000 TS.CKR='B'100= TS.BLC='B'37TS.BLK='B'177777T2.AST='B'100000T2.DST='B'40000NT2.CHK='B'20000T2.REX='B'10000'T2.SEF='B'4000T2.SIO='B'1000 T2.AFF='B'400. T2.HLT='B'200L T2.ABO='B'100B T2.STP='B'40 T2.STP='B'20 T2.SPN='B'10 T2.SPN='B'4. T2.WFR='B'2N T2.WFR='B'1=T3.ACP='B'100000T3.PMD='B'40000KT3.REM='B'20000$T3.PRV='B'10000NT3.MCR='B'4000T3.SLV='B'2000T3.CLI='B'1000 T3.RST='B'400' T3.NSD='B'200G T3.CAL='B'100C T3.ROV='B'40 T3.NET='B'20 T3.MPC='B'10 T3.CMD='B'4' T3.SWS='B'2' T3.GFL='B'1CT4.RIN='B'10000'T4.P0 ='B'4000T4.LRW='B'2000T4.LBW='B'1000 T4.DFB='B'4002 T4.FMP='B'200 T4.CTC='B'100 T4.MUT='B'40 T4.LDD='B'20 T4.PRO='B'10 T4.PRV='B'4' T4.DSP='B'2P T4.SNC='B'1PTR.UBT='B'100000TR.UBS='B'40000TR.UBR='B'20000WTR.UBP='B'10000'TR.UBN='B'4000TR.UBM='B'2000TR.UBL='B'1000 TR.UBK='B'400 TR.UBJ='B'200 TR.UBH='B'100 TR.UBF='B'40 TR.UBE='B'20 TR.CPD='B'10 TR.CPC='B'4' TR.CPB='B'2V TR.CPA='B'1T .ENDC .PSECT' .MACRO TCBDF$ X,Y,Z .ENDM .ENDMY .MACRO CTBDF$,L,B,SYSDEFL .ASECT0.=177756L.CLK:'L' .BLKW 8.L.ICB:'L' .BLKW 1L.LNK:'L' .BLKW 1ML.NAM:'L' .BLKW 1'L.DCB:'L' .BLKW 14L.NUM:'L' .BLKB 1'L.STS:'L' .BLKB 1L.KRB:'L' .BLKW 1R .PSECT0 LS.CLK='B'1' LS.MDC='B'2U LS.CBL='B'4 LS.CIN='B'10 LS.NET'B'=20 CI.CSR='B'-6 CI.KRB='B'-4 CI.PWF='B'-2 CI.INT='B'0U CI.DCB='B'2R .MACRO CTBDF$,X,Y,Z .ENDM .ENDMY .MACRO OLRDF$ $$$GBLT .MCALL .WORD.,DEFIN$A .IF IDN <$$$GBL>,....GBL=1 .IFF...GBL=0 .ENDC .MACRO FUNC NAME,SUBF,FUN,MASK6 .WORD. IO.'NAME,SUBF,FUN: FUNCA NAME, .ENDM .MACRO FUNCA NAME,MSK PARCT=0 DESCT=0 .IRP X,K .IIF IDN ,

PARCT=PARCT+1L .IIF IDN , DESCT=DESCT+1'2 .IIF GT .ERROR INVALID PARAMETER COUNT3 .IIF GT .ERROR INVALID DESCRIPTOR COUNTT .ENDR TEMP=+$( .WORD. IO$'NAME,<>,TEMP .ENDM .WORD. IO.MFC,000,001 .WORD. IO.RSC,000,002 .WORD. IO.WSC,000,006 FUNC ONL,001,006,. FUNC OFL,002,006,U FUNC MAI,003,006,' FUNC CAC,004,006,<> FUNC MEM,005,006,<> FUNC STN,006,006,P FUNC HRC,007,006,, FUNC ONE,010,006,  FUNC STA,011,006,D FUNC IF ,012,006, FUNC RLI,013,006,V FUNC RUL,014,006,T' FUNC MBO,015,006,N FUNC RSW,016,006,P FUNC WAT,017,006,A FUNC RAT,020,006,P' FUNC MBF,021,006, IO$MAX=21 DEFIN$ IS.HRG,6.0 .MACRO OLREM$ $$$VAL=-256..& .IOER. IE$DAL," .IOER. IE$DNL, .IOER. IE$PRM, .IOER. IE$SYN,,' .IOER. IE$AFE,TD .IOER. IE$TMU,( .IOER. IE$CAB,1 .IOER. IE$TRP,D+ .IOER. IE$ALG,23 .IOER. IE$TQU, # .IOER. IE$EPO,A$ .IOER. IE$EUO,* .IOER. IE$ECO,$ .IOER. IE$EPF,% .IOER. IE$EUF,x+ .IOER. IE$ECF,r< .IOER. IE$CFU,; .IOER. IE$CSR,RC .IOER. IE$SWF,b? .IOER. IE$ICE,e8 .IOER. IE$SCE,6 .IOER. IE$MDE,6 .IOER. IE$NFW,: .IOER. IE$CXT,* .IOER. IE$IDU,8 .IOER. IE$UNK,= .IOER. IE$SZE,nF .IOER. IE$POB,F .IOER. IE$NLB,C .IOER. IE$OMP,t= .IOER. IE$POC,v- .IOER. IE$DFE,i5 .IOER. IE$IDS,s= .IOER. IE$UOE,o .ENDM CO$ONL = 1R CO$OFL = 2o CO$UNK = 3e CO$ACC = 4e CO$ANY = 5E CO$MAI = 6C CO$MAX = 6 CD$STO = 2i CD$GOT = 4 CD$CON = 6 CD$MAX = 6. M$LOG = 1 M$INIT = 2N M$DEBG = 4n M$EXIT = 10 .ASECTP .=0C$DTYP: .BLKB 1a ET$HDR = 1 ET$END = 2s ET$DEV = 'AC$DECT: .BLKB 1tC$DVER: .BLKB 1 C$DSTD: .BLKB 1C$DMUB: .BLKB 1RC$DMCT: .BLKB 1a .EVENC$DFAC: .BLKW 2SC$DIDN: .BLKW 9.C$STD: .=0C$DTYP:C$DNAM: .BLKW 1RC$DPUN: .BLKB 1 C$DLUN: .BLKB 1nC$DSCT: .BLKB 1C$DEVT: .BLKB 1$C$DSTS: .BLKW 1 CS$ATR=1C CS$EXF=76 CS$SUB=100$ ;CS$XXX=200 CS$OFL=400$ CS$PDF=1000 CS$POR=2000 CS$MBD=4000 CS$UNK=10000G CS$ACC=20000 CS$MTD=40000n CS$DRV=100000C$DST2: .BLKW 1$ CS$PUN=20 CS$CRD=40 CS$PRC=100 CS$CTL=200 CS$DCL=3400 DC$UNI = 0V DC$CTL = 1 DC$MKU = 2 DC$MKC = 3B DC$SBU = 4T DC$SBC = 5. DC$CPU = 6 ;DC$XXX = 7C$DDAT: .BLKW 2TC$SME: .=C$SMEC$DKPO: .BLKW 1RC$SCT: .=C$SMEC$DCTN: .BLKW 1nC$DUPO: .BLKW 1C$SUN: .=C$SMEC$DCPO: .BLKW 1 C$SCP: .=C$SMEC$DCTN: .BLKW 10 .BLKW 4C$SMB: CP$OFL=400 CP$XXX=1000 CP$CUR=2000 CP$XXX=4000 CP$XXX=10000 CP$ACC=20000 CP$MTD=40000 CP$XXX=100000 .MACRO ATT NAME,SIZ $$$TMP=$$$TMP+1! DEFIN$ DA$'NAME,$$$TMP!<400*SIZ>C .ENDM $$$TMP=0V ATT CSR,2 ATT VEC,2 ATT UBR,2 ATT TYP,2 ATT VOL,12. ATT ERR,10$ ATT PRI,2 ATT MBP,6 ATT STE,2 ATT SAL,2 ATT DSN,2 ATT CSN,10  .ASECT: .=0C$MBAS: .BLKW 1KC$MINT: .BLKB 1K .BLKB 1C$MSIZ: .BLKW 1CC$MGRN: .BLKW 1CC$MDSC:S .PSECTN .MACRO OLRDF$ X .ENDM .MACRO ATT X .ENDM .ENDMY .MACRO DEVCD$ $$$GBL .MCALL DEFIN$ .IF IDN <$$$GBL>,0...GBL=1 .IFF ...GBL=0 .ENDC .MACRO DEV XN DEFIN$ D$'X,$$$TMP0 $$$TMP=$$$TMP+1 .ENDM $$$TMP = 0 DEV UDET DEV UKNO DEV RK03 DEV RK05. DEV RK5F1 DEV RX01I DEV RX02P DEV RL01E DEV RL02L DEV RP02N DEV RP03N DEV RP04C DEV RP05$ DEV RP06 DEV RP07 DEV RK06. DEV RK07S DEV RM02C DEV RM03B DEV RM05D DEV RM80C DEV RS03 DEV RS04. DEV RF11R DEV TK25. DEV TK50M DEV TU10 DEV TU16A DEV TU45$ DEV TU77C DEV TU78 DEV TS11$ DEV TSU0G DEV TSV01 DEV TU80. DEV TU81N DEV TM02 DEV TM03F DEV TM78$ DEV TU56M DEV TU58 DEV TU60$ DEV MSCPD DEV RA60D DEV RA80D DEV RA81D DEV RC25D DEV RD50D DEV RD51D DEV RX50D DEV ML11D DEV TERMD $$$TMP=370V DEV USR0V DEV USR1V DEV USR2V DEV USR3V DEV USR4V DEV USR5V DEV USR6V DEV USR7V .MACRO DEVCD$ .ENDM .MACRO DEV X0 .ENDM .ENDM Y .MACRO ACNDF$,L,B .ASECT.=0TB.LNK:'L'.BLKW 1B.TYP:'L'.BLKB 1B.LEN:'L'.BLKB 1B.TIM:'L'.BLKW 3 B.HID='B'.B.UID:'L'.BLKW 2B.ACN:'L'.BLKW 1B.TID:'L'.BLKB 1 .BLKB 1 B.HEND='B'.$$$HLN=.B.CPU:'L'.BLKW 2B.DIR:'L'.BLKW 2B.QIO:'L'.BLKW 2B.TAS:'L'.BLKW 2B.MEM:'L'.BLKW 3B.BEG:'L'.BLKW 3B.CPUL:'L'.BLKW 2MB.PNT:'L'.BLKW 1B.STM:'L'.BLKB 1$$$TLN=..=$$$TLNB.USE:'L'.BLKB 1B.ACT:'L'.BLKW 1B.UUIC:'L'.BLKW 1 B.UCB:'L'.BLKW 1B.LGO:'L'.BLKW 3B.ULNK:'L'.BLKW 1B.RNA:'L'.BLKW 3B.NAM:'L'.BLKB 14. .BLKB 1 .BLKB 1B.LDS:'L'.BLKB 10. B.ULEN='B'..$$$= <.+77>/100..=$$$TLNB.PRI:'L'.BLKB 1B.TNAM:'L'.BLKW 2.B.TCB:'L' .BLKW 1LB.TST3:'L'.BLKW 1E .BLKW 1B.CUIC:'L'.BLKW 1LB.PUIC:'L'.BLKW 1WB.CTXT:'L'.BLKW 22B.TCKP:'L'.BLKW 2B.OVLY:'L'.BLKW 2.B.EXST:'L'.BLKW 2P B.TLEN='B'.MB.TBLK='B'<.+77>/100.=$$$TLNB.SHDN:'L'00),r "!TADATADATADATADATADATA.BLKB 1$B.UHD:'L'.BLKW 1B.ULO:'L'.BLKW 1B.ULT:'L'.BLKW 2B.CKP:'L'.BLKW 2B.SHF:'L'.BLKW 2B.RND:'L'.BLKW 2B.FID:'L'.BLKW 3B.DVNM:'L'.BLKB 2.B.UNIT:'L'.BLKW 1B.EXTS:'L'.BLKW 1.B.LSCN:'L'.BLKW 3'B.SCNR:'L'.BLKW 1.B.DSCN:'L'.BLKW 1LB.STSP:'L'.BLKW 2'B.SYSM:'L'.BLKW 1 B.CKUS:'L'.BLKW 3'B.CKSP:'L'.BLKW 21B.CKAL:'L'.BLKW 1L B.SLEN='B'.BB.CPUT:'L'.BLKW 8.B.CTXP:'L'.BLKW 8.B.IDCT:'L'.BLKW 8.B.QIOC:'L'.BLKW 8.B.MIOC:'L'.BLKW 8.B.AIOC:'L'.BLKW 8.B.IPSN:'L'.BLKW 8.B.IPRC:'L'.BLKW 8.B.CKEX:'L'.BLKW 2LB.CFCL:'L'.BLKW 2.B.CFRK:'L'.BLKW 2LB.TLOD:'L'.BLKW 2WB.RLOD:'L'.BLKW 22 .BLKB 82.B.SSBL=.-B.SLEN'$$$= <.+77>/100' .= $$$HLN B.SSLN='B' . .= $$$HLNNB.CTLS:'L'.BLKW 3RB.CSRT:'L'.BLKW 1NB.CRSN:'L'.BLKB 60.' B.CLEN='B'.. .= $$$HLNKB.INAM:'L'.BLKB 14. B.IUIC:'L'.BLKB 6.B.IPSW:'L'.BLKB 6. B.ILEN='B'.' .= $$$HLN'B.DNAM:'L'.BLKW 1'B.DUNT:'L'.BLKB 1' B.DLEN='B'.. .BLKB 1B.DLBL:'L'.BLKW 6BB.DMST:'L'.BLKW 1BB.DUIC:'L'.BLKW 1BB.DVPR:'L'.BLKW 1BB.DACP:'L'.BLKW 2B B.MLEN='B'.L BM.SHR='B'1 BM.NOS='B'2K BM.SYS='B'4' BM.FOR='B'10 .= $$$HLNKB.TOLD:'L'.BLKB 6.B.TNEW:'L'.BLKB 6= B.TMLN='B'. .= $$$HLNB.PNAM:'L'.BLKW 3$B.PPGS:'L'.BLKW 1KB.PNFI:'L'.BLKW 1KB.PFRM:'L'.BLKB 1KB.PPRI:'L'.BLKB 1.B.PDEV:'L'.BLKW 1MB.PPUN:'L'.BLKB 1U B.PLEN='B'.. .= $$$HLN'B.RNAM:'L'.BLKW 3'B.RCDS:'L'.BLKW 1NB.RDEV:'L'.BLKW 1UB.RUNT:'L'.BLKB 1LB.RSOP:'L'.BLKB 1 B.RLEN='B'.K .= $$$HLNTB.LUIC:'L'.BLKW 1CB.LNAM:'L'.BLKB 14.' .BLKB 1 B.LLEN='B'.B.=$$$HLNB.OFID:'L'.BLKW 3'B.ODNM:'L'.BLKB 2B.OUNT:'L'.BLKW 1RB.NFID:'L'.BLKW 3B.NDNM:'L'.BLKB 2B.NUNT:'L'.BLKW 1B.OEXS:'L'.BLKW 1$B.NEXS:'L'.BLKW 1KB.OSCR:'L'.BLKW 1KB.NSCR:'L'.BLKW 1KB.ODSC:'L'.BLKW 1KB.NDSC:'L'.BLKW 1K B.RTLN='B'.' BT.SAB='B'1. BT.UAB='B'2 BT.TAB='B'3' BT.SS='B'11' BT.INV='B'12 BT.TIM='B'13 BT.ALL='B'14 BT.DEA='B'15 BT.MOU='B'16 BT.DMO='B'17 BT.PRT='B'20 BT.DIR='B'21 BT.VOL='B'22 BT.LOG='B'23 BT.CRH='B'24 BT.DST='B'25 BT.RTP='B'26 BT.INP='B'27 BS.ACT='B'200' BS.CRH='B'100D BS.LGO='B'40 BS.CO='B'40B BS.TML='B'20 BS.SIL='B'20 BS.ZER='B'10 BS.SCN='B'4'BF.DST='B'40000SBF.WRT='B'2000BF.SCN='B'1000 BF.SLR='B'400K BF.ERR='B'200' BF.STR='B'100C BF.LSS='B'40 BF.TRN='B'10 BF.XTK='B'4' BF.TSK='B'2' BF.XAC='B'1'B.MAXL='B'128.B.MINL='B'$$$HLN .PSECT' .MACRO ACNDF$ X,Y .ENDM .ENDMFY .MACRO ACTDF$,L,B .ASECT'.=0TA.GRP:'L' .BLKB 3'A.MBR:'L' .BLKB 3A.PSWD:'L' .BLKB 6A.LNM:'L' .BLKB 14.A.FNM:'L' .BLKB 12.'A.LDAT:'L' .BLKB 6A.NLOG:'L' .BLKB 2A.SYDV:'L' .BLKB 4A.ACN:'L' .BLKW 1A.CLI:'L' .BLKW 2 .BLKW 2DA.LPRV:'L' .BLKW 1A.SID:'L' .BLKW 1'A.DDS:'L' .BLKB 11. .BLKB 10A.FPRO:'L' .BLKW 1FA.RLVL:'L' .BLKW 1 AR.LVL='B'401'A.SALT:'L' .BLKW 1A.ENCT:'L' .BLKB 1 .BLKB 1IA.HPW:'L' .BLKW 4C .IF DF A$$LOG$A.TTY:'L' .BLKB 5MA.PRID:'L' .BLKB 1A.SECD:'L' .BLKB 1A.PRIT:'L' .BLKW 1A.SECT:'L' .BLKW 1 A.RLEN ='B' . .ENDC'A.LEN ='B' 128.L AL.SLV='B' 1 AL.DDS='B' 2 AL.SIL='B' 4 .IF DF A$$LOGL AL.AUT='B' 10 AL.BND='B' 20B AL.RMT='B' 40BAL.NET='B' 100AL.DIS='B' 200AL.PRI='B' 400AL.SEC='B' 1000: .ENDC  .PSECT: .ENDMY .MACRO SHDDF$,L,B,SYSDEFL PKTDF$L .ASECTL.=0'M.LNK:'L' .BLKW 1LM.LHD:'L' .BLKW 1LM.UCBS:'L'.BLKW 2.M.STS:'L' .BLKW 1 M.LBN:'L' .BLKB 1T .BLKB 1 .BLKW 1M.LGH=.1 .PSECT' MS.MDA'B'=1. MS.CHP'B'=2W .ASECTT.=0.ML.LNK:'L' .BLKW 1ML.LEN:'L' .BLKB 1ML.TYP:'L' .BLKB 1ML.DNC:'L' .BLKB 1 .BLKB 1ML.PRI:'L' .BLKW 1ML.PKT:'L' .BLKB I.LGTH2ML.LGH=. .PSECT MT.PKT'B'=10 I.R0'B'=I.PRM0I.R1'B'=I.PRM+2 .PSECT'ML.FID'B'=ML.PKT+I.IOSB:ML.FSEQ'B'=ML.PKT+I.IOSB+2ML.LBN'B'=ML.PKT+I.PRM+10ML.CNT'B'=ML.PKT+I.PRM+4ML.TCB'B'=ML.PKT+I.TCBML.SR0'B'=ML.PKT+I.R0'ML.SR1'B'=ML.PKT+I.R1BML.PR0'B'=ML.PKT+I.PRM+14ML.PR1'B'=ML.PKT+I.PRM+16G .MACRO SHDDF$,X,Y,Z .ENDM .ENDMY .MACRO MKDEF$ $$$GBL .MCALL .WORD.,DEFIN$T00)4v:;r .IF IDN <$$$GBL>,....GBL=1 .IFF ...GBL=0 .ENDC .WORD. IO.GRN 0,6.B .WORD. IO.SIZ 0,7.. .WORD. IO.ORG 0,9. .WORD. IO.INT 0,24. .WORD. IO.IIN 0,25. .WORD. IO.PRG 0,26. .WORD. IO.ERR 0,27. .WORD. IO.RSA 0,28. .WORD. IO.CST 0,29. .WORD. IO.MSK 0,30. .WORD. IO.CLM 0,31. .WORD. IO.SSI 1,7.' .WORD. IO.SOR 1,9.R .WORD. IO.SIN 1,24. .WORD. IO.SII 1,25. .WORD. IO.SMA 1,26. .WORD. IO.SER 1,27. .WORD. IO.SMK 1,30. .WORD. IO.CII 3,25. .WORD. IO.CMA 3,26. .WORD. IO.CER 3,27. IE.IDS=-25. IS.MAN=2 EPT=1 MS.SET=2. MS.CLR=4D .ENDMY .MACRO LCBDF$,L,B .ASECT9.=0.L.LNK:'L' .BLKW 1L.NAM:'L' .BLKW 1.L.UNIT:'L' .BLKB 1L.TYPE:'L' .BLKB 1L.UCB:'L' .BLKW 1AL.ASG:'L' .BLKW 1CL.LGTH='B'.-L.LNKO .PSECT. .MACRO LCBDF$,X,Y .ENDM .ENDMY .MACRO UCBDF$,L,B,TTDEF,SYSDEF. .ASECT .=177772 .IF NB SYSDEF .IF DF A$$CNT.=.-2R .ENDC .IF DF L$$GCL.=.-2. .ENDC.=.-22 .IF DF N$$DIR.=.-2. .ENDC U.UAB:'L'2 .IF DF A$$CNT .BLKW 1 .ENDC U.LOG:'L'= .IF DF L$$GCL. .BLKW 1 .ENDC U.FPRO:'L' .BLKW 1 U.CTX:'L'9 .IF DF N$$DIR .BLKW 1 .ENDC .ENDCU.MUP:'L' .BLKW 1LU.LUIC:'L' .BLKW 1U.OWN:'L' .BLKW 1KU.DCB:'L' .BLKW 1KU.RED:'L' .BLKW 1.U.CTL:'L' .BLKB 1AU.STS:'L' .BLKB 1NU.UNIT:'L' .BLKB 1U.ST2:'L' .BLKB 1CU.CW1:'L' .BLKW 1EU.CW2:'L' .BLKW 17U.CW3:'L' .BLKW 1U.CW4:'L' .BLKW 1-U.SCB:'L' .BLKW 1 U.ATT:'L' .BLKW 1NU.BUF:'L' .BLKW 1  .BLKW 1U.CNT:'L' .BLKW 1:U.UCBX='B'U.CNT+2TU.ACP='B'U.CNT+4U.VCB='B'U.CNT+6U.CBF='B'U.CNT+2U.UMB='B'U.CNT+10OU.PRM='B'U.CNT+12TU.ICSR='B'U.CNT+16U.SLT='B'U.CNT+20CU.SPRM='B'U.CNT+22U.UTIL='B'U.CNT+16 UU.SER ='B'1 UU.RCT ='B'2 UU.AVN ='B'4 UU.GUS ='B'10L UU.ONL ='B'20T UU.SPC ='B'40UU.ATN ='B'100UU.RDY ='B'200UU.ABO ='B'400 UU.SIO ='B'1000LUU.IOS ='B'2000:UU.BLK ='B'4000UU.KNO ='B'10000UU.SEL ='B'20000U.BPKT='B'U.CNT+20U.MEDI='B'U.BPKTU.UC2X='B'U.CNT+24U.SNUM='B'U.CNT+10U.FCDE='B'U.CNT+12U.KRB1='B'U.CNT+14.=0T .BLKW 9.BX.NAME:'L' .BLKW 2X.IOC:'L' .BLKW 2CX.ERSL:'L' .BLKB 1X.ERHL:'L' .BLKB 1X.ERSC:'L' .BLKB 1X.ERHC:'L' .BLKB 1X.WCNT:'L' .BLKW 2X.CYLC:'L' .BLKW 2X.CCYL:'L' .BLKW 1X.FCUR:'L' .BLKB 1 X.FLIM:'L'X.DSKD:'L' .BLKB 1X.DNAM:'L' .BLKW 1X.UNIT:'L' .BLKB 1X.CSTS:'L' .BLKB 1X.CPCB:'L' .BLKW 1X.CSBA:'L' .BLKW 1X.CCED:'L' .BLKW 2X.XDAT:'L' .BLKB 1X.XRDA:'L' .BLKB 1X.XDIR:'L' .BLKB 1X.XLOG:'L' .BLKB 1X.XOVR:'L' .BLKB 1X.CST2:'L' .BLKB 1 X.LGTH='B'.' X.DFFL='B'10. X.DFSL='B'8. X.DFHL='B'5. XC.ENA='B'200B XC.ACT='B'100' XC.DFR='B'040R XC.DIR='B'020 XC.OVR='B'010B XC.DAT='B'004. XC.LOG='B'002' XC.RDA='B'001Y X2.DEA='B'12XX.MAX='B'127. XX.DAT='B'5. XX.RDA='B'5. XX.DIR='B'1. XX.LOG='B'1. XX.OVR='B'4..=01X.MLUN:'L'.BLKW 11X.UNFL:'L'.BLKW 11 .BLKW 2X.UNTI:'L'.BLKW 4'X.MEDI:'L'.BLKW 2'X.SHUN:'L'.BLKW 1'X.SHST:'L'.BLKW 1'X.TRCK:'L'.BLKW 1'X.GRP:'L'.BLKW 1X.CYL:'L'.BLKW 1X.USVR:'L'.BLKB 1SX.UHVR:'L'.BLKB 1GX.RCTS:'L'.BLKW 1'X.RBNS:'L'.BLKB 1X.RCTC:'L'.BLKB 1AX.UNSZ:'L'.BLKW 2'X.VSER:'L'.BLKW 2R X.DUSZ='B'.2 .IF NB TTDEF1.=U.BUFT U.TAPR:'L'U.TUX:'L' .BLKW 1AU.TSTA:'L' .BLKW 4U.UIC:'L' .BLKW 1U.TFRQ:'L' .BLKW 1U.TFLK:'L' .BLKW 1U.TCHP:'L' .BLKB 1U.TCVP:'L' .BLKB 1U.TTYP:'L' .BLKB 1U.TMTI:'L' .BLKB 1U.TTAB:'L' .BLKW 1 .=.-2U.TECO:'L' .BLKB 1U.TBSZ:'L' .BLKB 1U.TLPP:'L' .BLKW 1U.TST5:'L' .BLKW 1U.TST6:'L' .BLKW 1U.TIXL:'L' .BLKW 1U.ACB:'L' .BLKW 1RU.AFLG:'L' .BLKW 1U.ADMA:'L' .BLKW 1U.LINS:'L' .BLKB 1U.CREN:'L' .BLKB 1U.SRVN:'L' .BLKW 1U.SESN:'L' .BLKB 1U.SLSZ:'L' .BLKB 1U.RSBB:'L' .BLKW 1U.RBHA:'L' .BLKW 1U.RSDV:'L' .BLKW 1U.TRLH:'L' .BLKW 1U.TRSC:'L' .BLKW 1U.CCBA:'L' .BLKW 1 UL.TRS='B'1' UL.TDA='B'2. UL.LST='B'4B UL.RDA='B'10 UL.ECH='B'20 UL.RSS='B'100 UL.LEN='B'200W LE.HIP='B'20 LE.TDC='B'40 LE.CIP='B'100. S1.RST='B'1P S1.ESC='B'2 S1.RSP='B'4L S1.PTH='B'10 S1.RNE='B'20 S1.TSY='B'40 S1.OBY='B'00)<r "!TADATADATADATADATADATA100B S1.IBY='B'200' S1.DPR='B'400DS1.DEC='B'1000S1.IBF='B'2000S1.DSI='B'4000S1.RES='B'10000'S1.RNF='B'20000'S1.TNE='B'40000ZS1.USI='B'100000 S2.RCU='B'11 S2.WRA='B'6. S2.WRB='B'2V S2.WAL='B'10 S2.BRQ='B'20 S2.SRQ='B'40 S2.ORQ='B'100C S2.IRQ='B'200 S2.FLF='B'400LS2.ELF='B'1000 S2.CR='B'2000AS2.OBF='B'4000S2.PCU='B'100000S2.BEL='B'20000WS2.CTO='B'40000ES2.CTS='B'100000 S3.ACR='B'1R S3.TAB='B'2E S3.CTC='B'4R S3.RAL='B'10 S3.NEC='B'20 S3.TSY='B'40 S3.8BC='B'100Y S3.FDX='B'200Y S3.MHE='B'400RS3.ICE='B'1000S3.TME='B'2000S3.PTH='B'4000S3.RES='B'10000'S3.PPT='B'20000'S3.RUB='B'40000' S4.HFL='B'7U S4.VFL='B'10 S4.HFF='B'20 S4.HHT='B'40 S4.DLO='B'1002 S4.HSY='B'200B S4.ANI='B'400QS4.AVO='B'1000S4.BLK='B'2000S4.DEC='B'4000S4.EDT='B'10000'S4.RGS='B'200000S4.SFC='B'400000S4.ABD='B'100000 S5.SW1='B'10 S5.TMM='B'2' S5.XOF='B'4C S5.XON='B'10 S5.HPC='B'14 S5.HPO='B'20 S5.OXF='B'40 S5.ITI='B'1003 S5.DEP='B'200T S5.DMA='B'400CS5.CLN='B'1000S5.RPO='B'2000S5.DWA='B'4000S5.VER='B'10000'S5.BCC='B'20000'S5.DAO='B'400000S5.ABP='B'100000 S6.LAT='B'1' S6.EIO='B'400LS6.RLU='B'1000S6.RDI='B'100000 .ENDC.=U.UNITU.OCNT:'L'.BLKB 1Y.=U.BUFU.RPKT:'L'.BLKW 1AU.WPKT:'L'.BLKW 1'U.IAST:'L'.BLKW 10U.OAST:'L'.BLKW 1'U.AAST:'L'.BLKW 1 .IF NB TTDEF0.IIF NE U.AAST+2-U.UIC .ERROR0 .ENDC .=U.AAST+4U.PTCB:'L'.BLKW 1' .=U.BUF+2'U.CTCB:'L' .BLKW 1U.COTQ:'L' .BLKW 2U.RED2:'L' .BLKW 1 .IF NB TTDEF' .=U.UIC+4NU.VUCB:'L'.BLKW 2'U.CPKT:'L'.BLKW 10U.LFLG:'L'.BLKW 1U.RAST:'L'.BLKW 25U.VNAM:'L'.BLKB 10 .ENDC .PSECTL DV.REC='B'1E DV.CCL='B'26 DV.TTY='B'4 DV.DIR='B'10 DV.SDI='B'20 DV.SQD='B'40 DV.MSD='B'100= DV.UMD='B'200' DV.MBC='B'400P DV.EXT='B'400DV.SWL='B'1000DV.ISP='B'2000DV.OSP='B'4000DV.PSE='B'10000NDV.COM='B'20000 DV.F11='B'40000RDV.MNT='B'100000U2.DH1='B'100000U2.DJ1='B'40000+U2.RMT='B'20000LU2.HFF='B'10000.U2.L8S='B'10000'U2.NEC='B'4000U2.CRT='B'2000U2.ESC='B'1000 U2.LOG='B'400T U2.SLV='B'200. U2.DZ1='B'100 U2.HLD='B'40 U2.AT.='B'20 U2.PRV='B'10 U2.L3S='B'4C U2.VT5='B'2' U2.LWC='B'1' UM.OVR='B'1' UM.CLI='B'36 UM.DSB='B'2000 UM.NBR='B'400UM.CNT='B'1000UM.CMD='B'2000UM.SER='B'4000UM.KIL='B'10000VU2.R04='B'100000U2.7CH='B'10000PU3.UPC='B'20000'U3.PAR='B'40000'U3.OPA='B'100000 U3.FDX='B'1M U3.DBF='B'2 U3.RPR='B'40 U4.CR='B'100 UC.ALG='B'200' UC.NPR='B'100F UC.QUE='B'40 UC.PWF='B'20 UC.ATT='B'10 UC.KIL='B'4' UC.LGH='B'3' US.BSY='B'200' US.MNT='B'100' US.FOR='B'40 US.MDM='B'20 US.PWF='B'10 US.ABO='B'1P US.MDE='B'2L US.WCK='B'10 US.SPU='B'2L US.VV='B'1 US.CRW='B'4M US.DSB='B'2M US.OIU='B'1 US.FRK='B'2 US.SHR='B'10 US.LAB='B'4' US.OFL='B'1' US.RED='B'2L US.PUB='B'42 US.UMD='B'10 US.PDF='B'20 US.MUN='B'40 US.TRN='B'100R US.SIO='B'200O UD.UNS='B'0 UD.200='B'1 UD.556='B'2 UD.800='B'3 UD.160='B'4 UD.625='B'5' UD.8K='B'6 .MACRO UCBDF$,X,Y,Z,A .ENDM .ENDMY .MACRO MTADF$,L,B .ASECT0.=0SV.TCNT:'L' .BLKW 1V.TYPE:'L' .BLKB 1V.VCHA:'L' .BLKB 1V.LABL:'L' .BLKB 12.V.NXT:'L' .BLKW 1SV.MVL:'L' .BLKW 11V.UVL:'L' .BLKW 1DV.ATL:'L' .BLKW 1'V.UCB:'L' .BLKW 1SV.RVOL:'L' .BLKB 1V.MOU:'L' .BLKB 1V.TCHR:'L' .BLKW 1V.SEQN:'L' .BLKW 1V.SECN:'L' .BLKW 1V.TPOS:'L' .BLKB 1V.PSTA:'L' .BLKB 1V.TIMO:'L' .BLKW 1V.STAT:'L' .BLKW 3V.TRTB:'L' .BLKB 1V.EFTV:'L' .BLKB 1V.BLKL:'L' .BLKW 1V.RECL:'L' .BLKW 1V.FNAM:'L' .BLKW 3V.FTYP:'L' .BLKW 1V.FVER:'L' .BLKW 1V.CDAT:'L' .BLKW 2V.EDAT:'L' .BLKW 2V.BLKC:'L' .BLKW 2V.RTYP:'L' .BLKB 1V.FATT:'L' .BLKB 1 .BLKB 30..V.WIND:'L' .BLKW 4.V.MST2:'L' .BLKW 1:V.FABY:'L' .BLKB 1L .BLKB 1V.ANSN:'L' .BLKB 17.V.BOFF:'L' .BLKB 1.V.DENS:'L' .BLKB 1.V.DRAT:'L' .BLKB 1.V.DBLK:'L' .BLKW 1.V.DREC:'L' .BLKW 1. S.VSCB='B'.' .PSECT1 .ASECT'.=0L W.CTL:'L'.BLKW 1L V.WINC='B'V.WIND+W.CTL .PSECT' .ASECT.=0L .IF DF R$$11MM.NXT:'L' .BLKW 1. .ENDCM.UIC:'L' .BLK00)Dv:;rW 1'M.CH:'L' .BLKW 1M.PROT:'L' .BLKW 1 .IF NDF R$$11MC .BLKW 22M.NXT:'L' .BLKW 11 .ENDCM.RVOL:'L' .BLKB 1M.STAT:'L' .BLKB 1M.VIDP:'L' .BLKW 1M.UCB:'L' .BLKW 1Y S.MVL='B'. .PSECTB .ASECT..=0'L.NXT:'L' .BLKW 1FL.VOL1:'L' .BLKB 1L.VOL2:'L' .BLKB 1L.VID1:'L' .BLKB 6L.VID2:'L' .BLKB 6 S.UVL='B'. .PSECT.VM.OLD ='B' 200.VM.BYP ='B' 100VM.ULB ='B' 40VM.FSC ='B' 20VM.EXC ='B' 10 V2.INI ='B' 1. V2.XH2 ='B' 2. V2.XH3 ='B' 4.V2.NH3 ='B' 10V2.OAC ='B' 20 VP.RM ='B' 2 VP.WM ='B' 4 VP.UCM ='B' 6. VP.SM ='B' 10FVP.MOU ='B' 20VP.RWD ='B' 40VP.VFY ='B' VP.RWDVP.POS ='B' 100 VP.TO='B'1LWI.RDV ='B' 400.WI.WRV ='B' 1000WI.EXT ='B' 2000WI.LCK ='B' 4000MS.VER ='B' 200: MS.RID ='B' 1. MS.NMO ='B' 21 MS.TMO ='B' 4LMS.EXP ='B' 10 MO.OVR ='B' 12 MO.UIC ='B' 2. MO.PRO ='B' 4CMO.160 ='B' 10 .ENDM^Y .MACRO UDADF$,L,B .ASECT.=0CP.CRF:'L'.BLKB 4P.UNIT:'L'.BLKB 2 P.SEQ:'L'.BLKB 2P.OPCD:'L'.BLKB 12 .BLKB 1P.MOD:'L'.BLKB 2P.BCNT:'L'.BLKB 4MP.BUFF:'L'.BLKB 12.1P.LBN:'L'.BLKB 4 .BLKB 16. P.END:'L'Y P.LENG='B'..=P.BCNTP.OTRF:'L'.BLKB 4L.=P.BCNT .BLKB 2P.UNFL:'L'.BLKB 2I .BLKB 12.P.DVPM:'L'.BLKB 40P.SHUN:'L'.BLKB 2P.CPSP:'L'.BLKB 2N.=P.BCNT .BLKB 2P.UNFL:'L'.BLKB 2 .BLKB 12. .BLKB 4P.FORM:'L'.BLKB 2OP.SPED:'L'.BLKB 2B.=P.BCNTP.RBN:'L'.BLKB 4.=P.BCNT .BLKB 4 .BLKB 12.P.FMTI:'L'.BLKB 4L.=P.BCNTP.RECC:'L'.BLKB 4EP.TMGC:'L'.BLKB 4D.=P.BCNTP.VRSN:'L'.BLKB 2:P.CNTF:'L'.BLKB 2'P.HTMO:'L'.BLKB 2' .BLKB 2P.TIME:'L'.BLKB 8.P.CNTP:'L'.BLKB 4: .=P.OPCD+1P.FLGS:'L'.BLKB 1.P.STS:'L'.BLKB 2 .=P.BCNT+16.P.FBBK:'L'.BLKB 4K.=P.BCNTP.OTRF:'L'.BLKB 4BP.CMST:'L'.BLKB 2B.=P.BCNTP.MLUN:'L'.BLKB 2=P.UNFL:'L'.BLKB 2. .BLKB 4P.UNTI:'L'.BLKB 8.P.MEDI:'L'.BLKB 4'P.SHUN:'L'.BLKB 2'P.SHST:'L'.BLKB 2P.TRCK:'L'.BLKB 2=P.GRP:'L'.BLKB 2P.CYL:'L'.BLKB 2P.USVR:'L'.BLKB 1CP.UHVR:'L'.BLKB 1 P.RCTS:'L'.BLKB 2 P.RBNS:'L'.BLKB 1NP.RCTC:'L'.BLKB 1F.=P.SHUNP.FORM:'L'.BLKB 2 P.SPED:'L'.BLKB 2EP.FMEM:'L'.BLKB 2P.=P.TRCKP.UNSZ:'L'.BLKB 4LP.VSER:'L'.BLKB 4T.=P.FMEMP.MXWR:'L'.BLKB 4.P.NREC:'L'.BLKB 2=.=P.BCNTP.VRSN:'L'.BLKB 2.P.CNTF:'L'.BLKB 2=P.CTMO:'L'.BLKB 2BP.CSVR:'L'.BLKB 1BP.CHVR:'L'.BLKB 1.P.CNTI:'L'.BLKB 8..=P.BCNTP.RCSK:'L'.BLKB 4BP.TMSK:'L'.BLKB 4B.=0L.CRF:'L'.BLKB 4L.UNIT:'L'.BLKB 22L.SEQ:'L'.BLKB 2L.FMT:'L'.BLKB 1L.FLGS:'L'.BLKB 1 L.EVNT:'L'.BLKB 2 L.CNTI:'L'.BLKB 8.L.CSVR:'L'.BLKB 1 L.CHVR:'L'.BLKB 1ML.MLUN:'L'.BLKB 2DL.UNTI:'L'.BLKB 8.L.USVR:'L'.BLKB 1RL.UHVR:'L'.BLKB 1  .BLKB 2L.VSER:'L'.BLKB 4M .BLKB 16. L.LENG='B'.. .=L.MLUN+2L.BADR:'L'.BLKB 4R .=L.UHVR+1L.LVL:'L'.BLKB 1L.RTRY:'L'.BLKB 1KL.VSER:'L'.BLKB 4KL.HDCD:'L'.BLKB 4KL.SDI:'L'.BLKB 12. .=L.UHVR+1L.SCYL:'L'.BLKB 2 .=L.UHVR+1L.FMTD:'L' .BLKB 2L.GPCT:'L' .BLKB 4L.FSVR:'L' .BLKB 1L.FHVR:'L' .BLKB 1.=L.FMTD .BLKB 10.KL.STI:'L' .BLKB 62..=P.MEDIP.POS:'L' .BLKB 4.=P.FORMP.TRBC:'L' .BLKB 4 .=0NR$VRSN:'L' .BLKW 2R$USTA:'L' .BLKW 1R$CNTI:'L' .BLKW 4R$CSVR:'L' .BLKB 1R$CHVR:'L' .BLKB 1R$UNTI:'L' .BLKW 4R$USVR:'L' .BLKB 1R$UHVR:'L' .BLKB 1R$MLUN:'L' .BLKW 1R$CRF:'L' .BLKW 2'R$SEQ:'L' .BLKW 1'R$OPCD:'L' .BLKW 1 R$MSIZ='B'.D .PSECTB OP.ABO='B'1. OP.ACC='B'16.B OP.AVL='B'8. OP.CCD='B'17.' OP.CMP='B'32.T OP.DAP='B'11.. OP.ERS='B'18.1 OP.FMT='B'47.L OP.FLU='B'19. OP.GCS='B'2. OP.GUS='B'3. OP.ONL='B'9. OP.RD='B'33. OP.REP='B'37.. OP.RPL='B'20.' OP.SCC='B'4. OP.SUC='B'10.' OP.WR='B'34. OP.WTM='B'36.1OP.END='B'128. OP.SEX='B'7. OP.AVA='B'64.H OP.DUP='B'65. OP.ACP='B'66.W OP.ERG='B'26MD.CSE='B'20000'MD.CMP='B'40000NMD.EXP='B'100000MD.ERR='B'10000$ MD.OBC='B'4 MD.REV='B'10 MD.RWD='B'2S MD.UNL='B'20MD.SCH='B'4000MD.SCL='B'2000MD.SEC='B'1000 MD.SER='B'400' MD.SSH='B'200T MD.WBN='B'100. MD.WBV='B'40 MD.SEQ='B'20 MD.DLE='B'200' MD.EXC='B'40 MD.IMM='B'100' MD.ALL='B'2' MD.SPD='B'13 MD.FEU='B'1' MD.V00)Lr "!TADATADATADATADATADATAOL='B'2' MD.NXU='B'1C MD.RIP='B'1C MD.IMF='B'2W MD.CWB='B'10 MD.SWP='B'4P MD.SHD='B'20 MD.PRI='B'1 EF.BBR='B'200 EF.BBU='B'100 EF.LOG='B'40 EF.SEX='B'20 EF.EOT='B'10 EF.PLS='B'4' CF.ATN='B'200P CF.MSC='B'100E CF.OTH='B'40 CF.THS='B'20CF.RPL='B'100000 CF.SHD='B'2U CF.576='B'1S UF.CMR='B'1D UF.CMW='B'2UF.RPL='B'100000UF.INA='B'40000S UF.RMV='B'200WUF.SCH='B'4000UF.SCL='B'2000 UF.WBN='B'100'UF.WPH='B'20000'UF.WPS='B'10000' UF.576='B'4' UF.VSS='B'40 UF.VSU='B'20 FM.CNT='B'0' FM.BAD='B'1C FM.DSK='B'2C FM.SDI='B'3W FM.RPL='B'11 FM.SDE='B'4P FM.TPE='B'50 FM.DEL='B'7 FM.FEL='B'10 FM.STI='B'6' LF.BBR='B'40 LF.RCT='B'20 LF.SUC='B'200' LF.CON='B'100' LF.SNR='B'10 ST.MSK='B'37 ST.SUB='B'40 ST.SUC='B'0' ST.CMD='B'1' ST.ABO='B'2S ST.OFL='B'35 ST.AVL='B'4C ST.MFE='B'5C ST.WPR='B'6R ST.CMP='B'7 ST.DAT='B'8. ST.HST='B'9. ST.CNT='B'10.' ST.DRV='B'11.' ST.DIA='B'31.' ST.BOT='B'15 ST.FMT='B'14 ST.LED='B'23 ST.POL='B'21 ST.RDT='B'20 ST.SEX='B'22 ST.TM ='B'16 ST.SUB='B'40 TF.800='B'1 TF.PE='B'2 TF.GCR='B'41 TF.BLK='B'10ST.NML='B'0*ST.SUB+ST.SUCST.SDI='B'1*ST.SUB+ST.SUC'ST.CON='B'2*ST.SUB+ST.SUC0ST.DUP='B'4*ST.SUB+ST.SUC'ST.ONL='B'8.*ST.SUB+ST.SUCST.SON='B'16.*ST.SUB+ST.SUC'ST.IPT='B'0*ST.SUB+ST.CMD'ST.UNK='B'0*ST.SUB+ST.OFL'ST.VOL='B'1*ST.SUB+ST.OFL'ST.IOP='B'2*ST.SUB+ST.OFL'ST.DPU='B'4.*ST.SUB+ST.OFLST.DIS='B'8.*ST.SUB+ST.OFLST.HWP='B'256.*ST.SUB+ST.WPRST.SWP='B'128.*ST.SUB+ST.WPRST.FER='B'0*ST.SUB+ST.DAT'ST.CTO='B'0*ST.SUB+ST.CNT'ST.FDC='B'1.*ST.SUB+ST.MFEST.FSH='B'2.*ST.SUB+ST.MFEST.FST='B'3.*ST.SUB+ST.MFEST.576='B'5.*ST.SUB+ST.MFEST.RCO='B'8.*ST.SUB+ST.MFEST.NRB='B'9.*ST.SUB+ST.MFEST.NMP='B'10.*ST.SUB+ST.MFEC ST.BBR='B'24ST.BBS='B'0*ST.SUB+ST.BBR'ST.BVO='B'1*ST.SUB+ST.BBR'ST.REF='B'2*ST.SUB+ST.BBR'ST.INR='B'3*ST.SUB+ST.BBR'ST.DAF='B'4*ST.SUB+ST.BBR'ST.NBA='B'5*ST.SUB+ST.BBR'ST.RCR='B'6*ST.SUB+ST.BBR'ST.FCT='B'6.*ST.SUB+ST.MFEST.FEC='B'7.*ST.SUB+ST.MFEST.ISH='B'2.*ST.SUB+ST.DATST.DST='B'3.*ST.SUB+ST.DATST.ECC='B'7.*ST.SUB+ST.DATEV.ISH='B'2.*ST.SUB+ST.DATEV.DST='B'3.*ST.SUB+ST.DATEV.ECC='B'7.*ST.SUB+ST.DATEV.EC1='B'8.*ST.SUB+ST.DATEV.EC2='B'9.*ST.SUB+ST.DATEV.EC3='B'10.*ST.SUB+ST.DATREV.EC4='B'11.*ST.SUB+ST.DAT.EV.EC5='B'12.*ST.SUB+ST.DATBEV.EC6='B'13.*ST.SUB+ST.DAT'EV.EC7='B'14.*ST.SUB+ST.DATEV.EC8='B'15.*ST.SUB+ST.DATTST.ODA='B'1.*ST.SUB+ST.HSTST.ODB='B'2.*ST.SUB+ST.HSTST.NXM='B'3.*ST.SUB+ST.HSTST.PAR='B'4.*ST.SUB+ST.HSTST.SDS='B'1.*ST.SUB+ST.CNTST.EDC='B'2.*ST.SUB+ST.CNTST.IDS='B'3.*ST.SUB+ST.CNTEV.SDS='B'1.*ST.SUB+ST.CNTEV.EDC='B'2.*ST.SUB+ST.CNTEV.IDS='B'3.*ST.SUB+ST.CNTST.SRT='B'1.*ST.SUB+ST.DRVST.SRI='B'2.*ST.SUB+ST.DRVST.POE='B'3.*ST.SUB+ST.DRVST.RDY='B'4.*ST.SUB+ST.DRVST.CLK='B'5.*ST.SUB+ST.DRVST.RSP='B'6.*ST.SUB+ST.DRVST.SUR='B'7.*ST.SUB+ST.DRVST.PSP='B'8.*ST.SUB+ST.DRVEV.SRT='B'1.*ST.SUB+ST.DRVEV.SRI='B'2.*ST.SUB+ST.DRVEV.POE='B'3.*ST.SUB+ST.DRVEV.RDY='B'4.*ST.SUB+ST.DRVEV.CLK='B'5.*ST.SUB+ST.DRVEV.RSP='B'6.*ST.SUB+ST.DRVEV.SUR='B'7.*ST.SUB+ST.DRVEV.PSP='B'8.*ST.SUB+ST.DRV MSCNT='B' 1E DISK='B' 2 DISKLT='B' 4 RSVD.0='B' 0.U HSC50 ='B' 1.T UDA50 ='B' 2.T RC25 ='B' 3.' VMS ='B' 4.V TU81 ='B' 5.S UDA5A ='B' 6.T RD.RX ='B' 7.U T1020 ='B' 8.K TK50 ='B' 9.TRUX50 ='B' 10.QDA50 ='B' 13.TK70 ='B' 14.RRD50 ='B' 16.RQDX3 ='B' 19. RA80 ='B' 1 RC25 ='B' 2 RCF25 ='B' 3 RA60 ='B' 4 RA81 ='B' 5 RD51 ='B' 6 RX50 ='B' 7 RD52 ='B' 10+ RD53 ='B' 11' RX33 ='B' 12D RA82 ='B' 13. RD31 ='B' 14 RD54 ='B' 15. RRD50 ='B' 16P RX31 ='B' 17+ RX32 ='B' 20B RX18 ='B' 2127; THEREFORE "DURA 80" IS ENCODED AS .WORD 022544,010120' .MACRO UDADF$ X,Y .ENDM .ENDMY .MACRO SPMDF$,L,B .MCALL SPMHK$ .MACRO $DFINI TYPE,INIVAL TYPE'VAL=INIVAL TYPE'MIN=INIVAL .ENDM $DFINI5 .MACRO $DFN TYPE,SYM,LEN TYPE'SYM=TYPE'VAL TYPE'VAL=TYPE'VAL+1 .IIF NB LEN TYPE'SYM'L=LEND .ENDM $DFN .MACRO $DFN2 TYPE,SYM TYPE'SYM=TYPE'VAL TYPE'VAL=TYPE'VAL00)Tv:;r+2 .ENDM $DFN2  .MACRO $DFEND TYPE1 TYPE'MAX=TYPE'VAL .ENDM $DFEND SPMHK$' .PSECT8 .MACRO SPMDF$ X,Y .ENDM .ENDM SPMDF$DRY .MACRO SPMHK$,L,B$ .ASECTN $DFINI H$,2 $DFN2 H$,CDRP $DFN2 H$,RTSK $DFN2 H$,XTSK $DFN2 H$,SCTX $DFN2 H$,LCTX $DFN2 H$,ACRG $DFN2 H$,USTP $DFN2 H$,QAST $DFN2 H$,EXTK $DFN2 H$,QPAR $DFN2 H$,QLDR $DFN2 H$,GLDR $DFN2 H$,FLDR $DFN2 H$,RLPR $DFN2 H$,QDRV $DFN2 H$,GPKT $DFN2 H$,IODN $DFN2 H$,IOFN $DFN2 H$,QAC1 $DFN2 H$,QAC2 $DFN2 H$,GACP $DFN2 H$,CRVT $DFN2 H$,ELVT $DFN2 H$,OVLY $DFN2 H$,SYEN $DFN2 H$,SYXT $DFN2 H$,EIDL $DFN2 H$,XIDL $DFN2 H$,USER $DFEND H$ .PSECT, .MACRO SPMHK$ X,Y .ENDM .ENDM SPMHK$Y .MACRO BGCK$A FAC,ERR,TYPE ...FLG = -1 .IF B TYPEC EMT 374 ...FLG=0$ .ENDC .IF IDN , EMT 375 BR .+6, ...FLG=02 .IFFR .IF IDN , EMT 374 ...FLG=0 .IFF .IF IDN , HALT$ ...FLG=0F .IFF$! .IF IDN ,2 ...FLG=1 .IFF& .IF IDN , ...FLG=2, .IFF .IF IDN , ...FLG=3$ .ENDC .ENDC .ENDC .ENDC .ENDCP .ENDC- .IIF LT ...FLG, .ERROR BGCK$A - UNKNOWN TYPEA .IIF LT ...FLG, .MEXIT .IF B FAC .ERROR  .MEXIT  .ENDC .IF B ERR .ERROR  .MEXIT .ENDC .IF EQ ...FLG .WORD FAC .WORD ERR .ENDC .IF GE ...FLG -1F MOV #FAC,@#$BCFAC MOV #ERR,@#$BCERR .ENDC .IF EQ ...FLG -1  .WORD MOV!0737,$BCPCF JMP @#$CRENTT .ENDC .IF EQ ...FLG-3 .WORD MOV!0737,$BCPC  JMP @#$CRAL2 .ENDC .ENDM BGCK$A Y .MACRO BGCK$R FAC,ERR,TYPE ...FLG=-1 .IF NB FAC .IF IDN , .IF NDF X$$DBTK .IF NDF R$$PRO ...FLG=0 .ENDCO .IFF ...FLG=0R .ENDC .IFF .IF NDF X$$DBT. .IF DF R$$PRON ...FLG=1 .IFF ...FLG=0 .ENDC. .IFF- ...FLG=03 .ENDC .ENDC .ENDC .IF EQ ...FLG MOV FAC,@#$BCFACB .ENDC .IF EQ ...FLG-1 MOV FAC,R0C .ENDC ...FLG=-1 .IF NB ERRG .IF IDN , .IF NDF X$$DBT  .IF NDF R$$PRO ...FLG=0 .ENDC .IFF  ...FLG=0 .ENDC .IFF .IF NDF X$$DBT  .IF DF R$$PRO  ...FLG=1 .IFF ...FLG=0 .ENDC .IFF  ...FLG=0 .ENDC .ENDC- .ENDC .IF EQ ...FLG MOV ERR,@#$BCERR .ENDC .IF EQ ...FLG-1 MOV ERR,R1C .ENDC ...FLG = -1 .IF DF R$$PRO .IF NDF X$$DBT .MCALL BTJMP$ BTJMP$R ...FLG=0F .ENDC  .ENDC .IF LT ...FLG ...FLG = -1 .IF B TYPE  EMT 374 ...FLG=0. .ENDC .IF IDN , EMT 375 ...FLG=0F .IFF$ .IF IDN , EMT 374 ...FLG=0 .IFF .IF IDN , HALTE ...FLG=0 .IFFL! .IF IDN ,N JMP @#$CRENTF ...FLG=1 .IFF& .IF IDN , ...FLG=2O .ENDC .ENDCT .ENDC .ENDC  .ENDC .ENDC- .IIF LT ...FLG, .ERROR BGCK$R - UNKNOWN TYPE .IIF LT ...FLG, .MEXIT. .ENDM BGCK$RC`Y .MACRO REBOT$ .MCALL BTJMP$ CLR R0 CLR R1D BTJMP$< .ENDM REBOT$4DY .MACRO BTJMP$ MOV @#$RBTAD,PC .ENDM BTJMP$ <Y .MACRO BCKDF$ L,B .ASECTTBE.ODD ='B' 000100BE.SGF ='B' 000102BE.BPT ='B' 000104BE.IOT ='B' 000106BE.ILI ='B' 000110BE.EMT ='B' 000112BE.TRP ='B' 000114BE.STK ='B' 000116BE.NPA ='B' 000200BE.SGN ='B' 000201BE.2FR ='B' 000202BE.ISR ='B' 000203BE.FHW ='B' 000204BE.CSR ='B' 000205BE.IDC ='B' 000206BE.ACP ='B' 000207BE.HSP ='B' 000210BE.NCT ='B' 000211BE.NPL ='B' 000300BE.DDA ='B' 000301BE.SIZ ='B' 000302BE.BAK ='B' 00030300)\r "!TADATADATADATADATADATABE.POV ='B' 000304BE.FSI ='B' 000305BE.GGF ='B' 000400BF.PKS ='B' 000100BF.TTD ='B' 000200BF.EXE ='B' 000300BF.XDT ='B' 000301BF.MP ='B' 000302 BE.NDS ='B' 100100= BE.NCK ='B' 100200B BE.URM ='B' 100300  BE.WTL ='B' 1004000 BE.UNO ='B' 1005002 BE.ILC ='B' 1006002 BE.LNS ='B' 100700 BE.OCP ='B' 101000E BE.MLK ='B' 101100I BE.NIN ='B' 101200P BE.UNP ='B' 101300=BF.POL ='B' 000303BF.ERR ='B' 000304BF.INT ='B' 000305BF.INI ='B' 000306BF.DVI ='B' 000307BF.PAR ='B' 000310BF.XIT ='B' 000311BF.QIO ='B' 000312BF.OPT ='B' 000313BF.ACC ='B' 000314BF.KAS ='B' 000315BF.DIR ='B' 000316BF.SAN ='B' 000317BF.UP ='B' 000400 BE.IN1 ='B' 100100  BE.SP1 ='B' 100200  BE.SP2 ='B' 100300  BE.FNF ='B' 100400 BF.PTS ='B' 100400 .PSECT0 .MACRO BCKDF$ X,Y .ENDM BCKDF$ .ENDM BCKDF$B"Y .MACRO CHEDF$,L,B VV$CHE='B'4' .SAVE .ASECTL.=0 H.CSTS:'L'.BLKB 1 H.IIOC:'L'.BLKB 1 H.PAVL:'L'.BLKW 3 H.PKTQ:'L'.BLKW 2 H.CMDH:'L'.BLKW 2 H.CEDH:'L'.BLKW 2 H.TMP1:'L'.BLKW 1 H.TMP2:'L'.BLKW 1 CS.REQ='B'000001CS.RUN='B'000002CS.DNF='B'000004CD.ERR='B'100000CD.DRV='B'040000CD.FIN='B'020000CD.WIP='B'010000CD.DFR='B'004000.=0 E.BNXT:'L'.BLKW 10E.BPRV:'L'.BLKW 10E.PHYA:'L'.BLKW 10E.SIZE:'L'.BLKB 1AE.ST2: 'L'.BLKB 1NE.ANXT:'L'.BLKW 1BE.APRV:'L'.BLKW 1E.LBNH:'L'.BLKW 1$ .BLKB 1 .BLKB 1E.LBNL:'L'.BLKW 1=E.LNXT:'L'.BLKW 1 E.LPRV:'L'.BLKW 1 E.IOPA:'L'E.ATTL:'L'.BLKW 1'E.PCNT:'L'.BLKB 1'E.STAT:'L'.BLKB 1'E.UCB: 'L'.BLKW 1'E.MBXC:'L'.BLKB 1' .BLKB 1 E.LGTH='B'.0 ES.DEL='B'200' ES.ERR='B'100' ES.RIP='B'040R ES.XIP='B'010D ES.WDF='B'004D ES.WIP='B'002.=0PA.ANXT:'L'.BLKW 1'A.IOPA:'L'.BLKW 1N A.LGTH='B'.0 ..=0'S.DAT:'L' .BLKW 2'S.RDA:'L' .BLKW 2'S.DIR:'L' .BLKW 2'S.LOG:'L' .BLKW 2'S.OVR:'L' .BLKW 2'$$$= ..=0.S.LNK:'L' .BLKW 1.S.UCB:'L' .BLKW 1.S.RTOT:'L' .BLKB $$$S.RHIT:'L' .BLKB $$$S.RLOD:'L' .BLKB $$$S.RLAP:'L' .BLKB $$$S.RBIG:'L' .BLKB $$$S.WTOT:'L' .BLKB $$$S.WHIT:'L' .BLKB $$$S.WLOD:'L' .BLKB $$$S.WLAP:'L' .BLKB $$$S.POL:'L' .BLKW 2'S.PSP:'L' .BLKW 24S.RLE:'L' .BLKW 2S.WDFR:'L' .BLKW 2 S.SIZE='B'.= DC$ENA='B'1' DC$DIS='B'2O DC$ACT='B'3N DC$DAC='B'40 DC$RCS='B'5. DC$SET='B'6 DC$CSB='B'7 DC$RSB='B'10DC$CRE='B'100000DC$PAR='B'40000 .RESTOREB .MACRO CHEDF$ Y,Z .ENDM .ENDMY .MACRO LNMDF$,L,B,SYSDEF$ .SAVE .ASECTB.=0L.NLNK:'L' .BLKW 1L.NTBL:'L' .BLKB 1L.NBLK:'L' .BLKB 1L.NSTS:'L' .BLKB 1L.NGRP:'L' .BLKB 1 L.NUCB:'L'L.NTCB:'L' .BLKW 1L.NLNS:'L' .BLKB 1L.NENS:'L' .BLKB 1 L.NNAM:'L' L.NHSZ='B'.L LT.SYS='B'0 LT.GRP='B'1. LT.USR='B'2E LT.TSK='B'3A LT.SES='B'4S LT.INV='B'6T LT.APP='B'5C LS.TRM='B'1S LS.PRV='B'2T LB.LOC='B'1B LB.LOG='B'2B IN.TSK='B'1E IN.SES='B'20 IN.GRP='B'4 IN.SYS='B'10.=0RC.REF:'L' .BLKB 1MC.DDSL:'L' .BLKB 1C.CUIC:'L' .BLKW 1 C.FIXL='B'.$ C.DDS:'L'..=0BO$STAT:'L' .BLKW 1O$FLAG:'L' .BLKW 1O$NODS:'L' .BLKW 1O$NODA:'L' .BLKW 1O$DEVS:'L' .BLKW 1O$DEVA:'L' .BLKW 1O$DIRS:'L' .BLKW 1O$DIRA:'L' .BLKW 1O$NAMS:'L' .BLKW 1O$NAMA:'L' .BLKW 1O$TYPS:'L' .BLKW 1O$TYPA:'L' .BLKW 1O$VERS:'L' .BLKW 1O$VERA:'L' .BLKW 1O$TRLS:'L' .BLKW 1O$TRLA:'L' .BLKW 1O$ACCS:'L' .BLKW 1O$ACCA:'L' .BLKW 1O$LTYP:'L' .BLKB 1 .BLKB 1G O$PLEN='B'.S SU$SUC ='B'1ER$NOD ='B'175550MER$DEV ='B'1771001ER$DIR ='B'1770601ER$FNM ='B'176420DER$TYP ='B'174540TER$VER ='B'174460GER$ESS ='B'176640SER$XTR ='B'174340AER$BEQ ='B'177510SER$TRN ='B'174550AER$FTB ='B'176364SFS$NOD ='B'400FS$DEV ='B'200FS$DIR ='B'100FS$QUO ='B'2000. FS$NAM ='B'4 FS$TYP ='B'2 FS$VER ='B'1FS$WCH ='B'4000.FS$WDI ='B'1000' FS$WNA ='B'40S FS$WTY ='B'20$ FS$WVE ='B'101FS$NDF ='B'10000 P.LNON ='B'0 P.LNAM ='B'1 P.LDEV ='B'2 P.LNOD ='B'3 .RESTORES .MACRO LNMDF$ X,Y,Z .ENDM .ENDM~Y .MACRO PRTDF$ L,B .ASECTB.=02P.RIDN:'L' .BLKW 1 PI.LVL='B'401P.ROFF:'L' .BLKW 1P.RSTA:'L' .BLKW 2P.RABO:'L'00)d*k:;r .BLKW 2P.RRES:'L' .BLKW 2P.RSTO:'L' .BLKW 2P.RMTI:'L' .BLKW 2P.RCPU:'L' .BLKW 2P.RUPU:'L' .BLKW 2P.RCON:'L' .BLKW 2P.RCOF:'L' .BLKW 2P.RUON:'L' .BLKW 2P.RUOF:'L' .BLKW 2P.RLPA:'L' .BLKW 2.=177774P.TTSN:'L' .BLKW 1P.TTDA:'L' .BLKW 1P.TTIN:'L' .BLKW 1P.TTCN:'L' .BLKW 1P.TTTM:'L' .BLKW 1P.TTPW:'L' .BLKW 1P.TTKR:'L' .BLKW 1P.TTUC:'L' .BLKW 1P.TTII:'L' .BLKW 1P.TTOI:'L' .BLKW 1P.TTFP:'L' .BLKW 1 .PSECTP .MACRO PRTDF$ .ENDM PRTDF$1 .ENDM PRTDF$L Y .MACRO CPRDF$,L,B,SYSDEF .ASECT'.=0WR$FLAG:'L'.BLKW 1W R$LEN:'L''R$OPC:'L' .BLKW 1'R$ADDR:'L'.BLKW 1' R$SIZE'B'= . .PSECT.RF$SYN'B'=100000RF$IMM'B'= 40000RI$XDR'B'=140003RI$XDW'B'=400027RI$XDA'B'=20004.RI$XDD'B'=120005RI$CRH'B'=100001RI$BLY'B'=60006NRI$RIN'B'=160007RI$CON'B'=10010.RI$SAV'B'=110011RI$TMO'B'=500121RI$SHU'B'=150013 .ASECTI.=0.H$LEN:'L' .BLKB 1.H$TKI:'L' .BLKB 1.H$TYPE:'L' .BLKB 1H$ICNT:'L'.BLKB 1MH$TCB:'L' .BLKW 1TH$TIUC:'L'.BLKW 1H$VUCB:'L' .BLKW 2H$BIAS:'L' .BLKW 1H$RET:'L' .BLKW 1BH$FLAG:'L'.BLKW 1H$LINK:'L'.BLKW 1H$STAT:'L'.BLKW 2 H$SIZE='B'. HF$SHR'B'=1S HF$AST'B'=2 HF$RSP'B'=40 HF$BLK'B'=10 HF$NRS'B'=20 HF$PVT'B'=100X HF$UNB'B'=200I HF$DSW'B'=400HF$EXP'B'=1000HF$SYS'B'=2000HF$DIR'B'=4000 P$BLEN='B'.B P$IID='B'. P$LUN='B'. P$TKI='B'. P$ALEN='B'.S P$DPB='B'. P$UIC='B'. P$LST='B'.P$NAM:'L' .BLKB 1:P$FLG:'L' .BLKB 1E P$APM='B'. P$IOP='B'. P$NLUN='B'.CP$LEN:'L' .BLKW 1I P$ASF='B'. P$ADDR='B'.'P$FUNC:'L'.BLKW 1'P$PARM:'L'.BLKW 1 P$BLK:'L' .BLKW 1' PF$TI='B'1 PF$NET='B'2  .PSECTT HT$TKN='B'1 HT$ADQ='B'2 HT$RUN='B'3 HT$DIR='B'4 HT$VMS='B'5 HT$PMT='B'6 HT$QIO='B'7 HT$PSB='B'10 HT$RMS='B'11 HT$HLS='B'12 HT$BYE='B'13 HT$GET='B'14 HT$SET='B'15 HT$AP0='B'16 HT$SNX='B'17 HT$CSB='B'20 HT$DSB='B'21 HT$DEA='B'22 HT$SYS='B'100. HT$ACS='B'101$ HT$CKR='B'102: HT$CKW='B'103$ HT$ILD='B'104E HT$LOV='B'105$ HT$BKR='B'106N HT$BKW='B'107L HT$INS='B'110S HT$REM='B'111' HT$GSI='B'112' HT$SSI='B'113M HT$VNS='B'114$ HT$DOG='B'115' HT$LBR='B'116F HT$ATW='B'117S HT$LBW='B'120' HT$FNS='B'121 HT$LST='B'122 HT$ABA='B'201T HT$RSX='B'202P HT$UCA='B'203O HT$DIS='B'204' HT$CTC='B'205' HT$P0R='B'2062 HT$P0W='B'207 HT$GRI='B'210T .ASECT5.=0AI$BUF:'L' .BLKW 1'I$LEN:'L' .BLKB 1TI$ID:'L' .BLKB 1' .PSECTS II$GDV='B'0T II$LGI='B'1 II$CLF='B'2: II$DPR='B'30 II$CPR='B'4' II$UNO='B'5' II$GTM='B'6R II$LOF='B'7B II$GDF='B'10 II$LNF='B'11 II$NOD='B'12 IF$SLI='B'11 IF$FRS='B'2' IF$NDF='B'4' IF$MCR='B'10 IF$NLG='B'20 IF$NSY='B'200A IF$IMP='B'400L AL$SWS='B'0T AL$BCK='B'1 AL$IMP='B'2 AL$XXD='B'40 AL$NVR='B'10 AL$NBL='B'20 SF$BLK='B'1S SF$BIA='B'2C SF$HDR='B'4T SF$AST='B'10 SF$RSP='B'20 SF$IRT='B'40 SF$DRF='B'100= SF$NRS='B'200B SF$DSW='B'400LSF$TCB='B'1000SN$TSK='B'SF$BLK!SF$HDR!SF$AST3SN$DIR='B'SF$BLK!SF$BIA!SF$HDR!SF$AST!SF$DRF!SF$DSWC,SN$IMP='B'SF$BLK!SF$BIA!SF$HDR!SF$AST!SF$DSWSN$QIO='B'SF$BIA!SF$HDR!SF$TCB%SN$PSR='B'SF$BLK!SF$HDR!SF$IRT!SF$TCB'SN$RSP='B'SF$RSP!SF$IRT'SN$NOT='B'SF$IRT!SF$NRSYSN$DET='B'SF$HDR!SF$IRT .PSECT' .MACRO CPRDF$ X,Y,Z .ENDM .ENDM='B'40 AL$NVR='B'10 AL$NBL='B'20 SF$BLK='B'1S SF$BIA='B'2C SF$HDR='B'4T SF$AST='B'10 SF$RSP='B'20 SF$IRT='B'40 SF$DRF='B'100= SF$NRS='B'200B SF$DSW='B'400LSF$TCB='B'1000SN$TSK='B'SF$BLK!SF$HDR!SF$AST3SN$DIR='B'SF$BLK!SF$BIA!SF$HDR!SF$AST!SF$DRF!SF$DSWC,SN$IMP='B'SF$BLK!SF$BIA!SF$HDR!SF$AST!SF$DSWSN$QIO='B'SF$BIA!SF$HDR!SF$TCB%SN$P<0Y V%@?.H00*lr "!TADATADATADATADATADATA&Z&&&LL &LI"&LK&LQ&LY&L`&Lm&L{&&w&,&,&:^&d}&; &;X:&;W&;[&;kz&;ę&T &T &T {&T &T #&T (&T d&T d&T f&T p&T p&T Iq&T Lq&T Qs&T w&T & 8& =& T[& y& `& ,& `& _& !& 8;& ;;& L& Jm& & K& & K& xQ& Z& 8^& A`& `& y& .& p:& 8 & d& f& H& p& & & K& L& ]a& q& r& r& & !& 8"& & K& xQ& (}& <}& & & p&d &d &d &d &d &d \!&d &&d '&d (&d ,&d 5&d 8&d #:&d ):&d :&d :&d J;&d CM&d +S&d X&d X&d 3X&d X&d Z&d Z&d H^&d d^&d nf&d w&d w&d Bx&d _y&d `y&d y&d &d &d &d &d &d & & z& & y& ""& #& y:& :& D& N& S& T`& :d& e& df& 3g& k& v& Fw& x& y& & & $& & & +& & |& +&'&Y&x&z&&&&'L&Fw&4x&&Z&,&&&z&& &:&:&_M&S&f&s&v&y&*}&u~&j&&&&:&X &&&[(&D&E&@G&G&H&K&Hg&Tg&\g&s&y&~&Ѐ&Ԁ&&&;&\K&K&LT&W&Fw&&&&& &3&8&t!&8&&K&W&f&g&g&&&p!&.&K&W&8Y&Fw&& &H!&|:&:&K&H&=&&#&&&Jw&&=&&#&&&Jw&&y&&](&K&W&yX&Z&+e&f&Vg&q&&:&:&s&&K&\M&W&W& X&(y&~&&&2&2&K&x&&&E&8 &k&&&8&H:&K&\M&.S&W&_X&_&z&&&2&8&K&;M&XM& N&X&w&&T&T&T#&T4F&TQ&T?T&Tf&T$&|&|&|""&|&&|8&iw&D&Dz&D:&DG&Dg&&s&&-!&#&t:&u:&L&?T&r&U""&\&\&\#&\'L&\?T&\X&\Z&\df&\f&\s&\w&e^&6&Yq&s&!u&!y&#k&#&#L&#Q&#y&#y&#y&#z}&#&#&#Ԁ&#&#&$&$&$y&%'&& <&,.&,8Y&-Lr&.H&0L&0&0W&0r&0y&0z}&20 &2`m&2(x&3&3p&3x&3&3L&3k&4&4H:&5&58&5r&&&&+&{&q!&:d& q&zs&w&D&%&z&#&w*&H;&Q&S&6/K&A6&D6p!&D6{:&J6`"&K6U<&K6<}&L6&L6;&L6(F&L6Ş&N6&c6&c63&c63&c6G&c6Q&c6@y&c6y&c6&d6(&d6xQ&d6Xz&d6&d6&e6(&f6&f6&f6 9&f6K&f6xQ&f6Q&f6Z&f6`&f6fa&f6f&f6f&f6g&f6qg&f6w&g6 &h6&i6b&i6&i6^&i6:&i6&X&i6.X&i6/X&i6xd&i6f&i6@y&l6s&l6p&l6e&m6^f&n6VN&n6 S&o6q&o6|&o6y&p6 &p6(&p6G&p6G&p6r&p6r&r61&r6"&r6"&r6s&s6 &s6&s6xQ&s6f&t61H&t6hL&>hs&Ah8&Ah@`&Dhp!&Dhy&Dhp&FhH&FhVN&Hh &Lh(F&Mh8&ah &bhL&ch, &chw&dh L&dhzd&fh8&fh9&fh9&hh&hh&ih8&ih8^&lh&lh&lhW&lh8Y&lhY&lhY&mh&nhH&oh&phq&phr&rh !&rhQ&rhr&shU<&sh<}&sh&sh&shҒ&th&uh&wh&i&i&iC&iU&i&iK&i M&i:d&ike&idf&ir&iw&qU:&qz&ry&r&&r&rq&rv&rx&r&r&r&r&r&t&t/K&tp!&txd&tU<&8w&Tw &Twz&TwQ&TwLy&sw. &sw/ &sw0 &sw1 &sw2 &sw3 &sw4 &sw5 &sw&sw&sw&sw&sw&sw&sw&sw&wL &w &wk&w&w&w2&w$;&wcZ&ws&wz}&wp:&w&e&wf&wy&;x. &;x/ &;x0 &;x1 &;x2 &;x3 &;x4 &;x5 &;x&;x&;x&;x&;x&;x&;x&;x&x&x+&x<&xl&xh&x""&x2&xQ&x&xZ& y& yz& yX:& yY& y g& yk& ys& y&y&y&#z z&jz&"{ &"{Q&&"{h3&"{zH H:GxHdh LHT#HT dH(YH(HԃH@#HH#T[H< NH"{IyH7WHz5HdOHԃH TSH@shҒHH2/Ip&Hz(HH8H0rH U H |RHz{sHFT|sH{&!Ha(H Kx3H8H{dHܙzH{H'H:H KHVH#g'H  HHyH KH#_MH#zHzZH#H&=H"xZHxQH H. HjHH$H H H@4xHH sHz#,xHH+eHWH FwH##"HKH yH@ ""H#H(,H (yH xH=HfHz#!H *}H|:HFwH# LHHHJwH*vHzHWH&H +Hu~H Hz'LH SHH HH@:HfHH # qH yH H#RH#[qH{"fHT"<Hz#H#9gHxhH{#ewH {#H#4H#8H 'H{#zH#H#u~H#H# HT"_MH#SHz#yH#:H{#H{#H#yHT"y:H#KH#H H#H#YMH MH# LH#azHxH@z{#RH#KH #u~H -Hx2H#H# H#H #|H{#yH#HT"uLH#s!Hx""H#KHz#H#H{#""H#xH YH#H#gH#RH#HxlH +Hy#KH#g'H y# LH#}~H z#}~H #H#H#H##"H& Hy#KH#KH0y#BxH#BxH#sH#&LH!H#dH#g'Hz#H#H,#VNH#l~H zH#R`H"y#l~H#g'H #kH( ZHy#HH#KH jHZHzy#H #3dHy#dH#dHxeH! H#VgH# LHy#VgHy#g'Hy#}~H Hd HL!xeH{"fHzhsH9hKHztp!HtHMh8HtxdH>hLHLh(FHD6p!H;5rH 3zHqU:H@>6/KHA6HFhHH9hwHrvH z;5H 3rH9hfHrH D6{:HK9ZH9f,H9H;5$:HD;5H;5HBwH@9H;5H9Hz;5HC;5zH;5nMHE;5H;5yHK;5{H:hLH ;[H;5H;5yH;5sH9.H<$=CQ.;-+*BEFGLNPSVWX!:&#? ,&,&&Zj <>@BDFHv,x&z,|&~&B",z(|$:D:h~",z  (| "$$&(:*,.0D2:468:h<>@7 p7  r77P7 \   L" DD T:  ,? 7 " 8hv7  7 & 6 7 B "7tm  2  w  ? w De w %6,Bhpx.eDl r w ׭ D B 5$ 4  t@  z%B l6BHRfB (f 8w ? D 7 f_ 7c  7Z7 X w ԇ  y;5w 82bp*7$  77w77%5 f   b/7* 7 b # Ba 8 , 8  & Lw 7R7Pw_F5B05 L  wB~  w   7m     77 wj  hz ~ 4b  $| B` :%dZ vw 700+ "!TADATADATADATADATADATA7TM7HU@E 7tz   p e 77Ɓ 0׭U >sfr7 ($ĝw)t!MC w7i   e0B7P pJflH l: j@ 7w>MPODcJ BE7IOILLsVsjEMTRFPzw 7 w   T  L  % R ,4X`hp&dhr,tv4xXz`|h~px p 43 8  N (  >  @ @   J 6  xvsb(f&f)w bd 4j w L^%4 < % ! &d$40^NPVdf%44 >7`$-  z@@@Pr@ @em 7X wRPw Z   @f   m77  ` `  07Eu` A "  A ы <>  ( &5  &% F) L:t T$9)\:pFR  7F)  w $ az $s0F>sd +f&%&%#$ h%  zU wH N, @ e0 2 @7^ >.ss"(6>DzR^nJ 7N 7 @7<&e N @ e0  wZ L   @ LZ NL P R T r |i3 e ee e @( `ADD  SUB  MOV  CMP  0BIT  @BIC  PBIS  BRBNE& & BEQ, , BGE2 2 BLT 8 8 BGT > > BLED D BPLJ J BMIP P BHIV V BLOSBHISBVSeh h BCCn n BCS t t  CLRz z F COM  INCP  DEC   NEG  F ADC  SBC  TST   ROR  F ROL  ASR  ASL  SXT  pMUL  rDIV  tASH  vASHCxXOR  ~SOB  EMT  JSR  SWABRTS  FJMP  BPTe  CLC  CLV   CLN  SEC" " SEVP( ( SEN. . SCC4 4 CCC: : NOP@ >@ ~p`>  <Vh@\h: > $<(V,h04\8h  qq0uqXuququququq@yqxdqqqq  2|qqqq    f&Bwpz KWt E@ Ktpe 4e0 &tt` *z > J@ ^ f)  a    xXt(pet @ 8  S  @ÝE 2Ý ( 2 Ft T ` j  3t8pe  ѕ,Ýt v Ý` ÝT Vѕ,J E tpe ѕ,  2 @ h z ^  єєєє &&f L$q   D!De    ѕ + : ~ ѕBѕ rnl r Zѕ & v5vѕ0 tEe0v V&  r 00+k:;re.e e ~&f &ѕ  D~ѕ( ѕ)  < X ѕ@ Ý r Ý`  | ѕ+ѕ#ѕ- & D ! !E7QN09t$v J~ %  6!   6!    D   !?t7Qf  +-'"A) N4 Ft0P pA h b Z TtP J F` Z   & , ff  P>&f @ #!-((- >( !U, D7& \)U0 ~ !  j 8U  ,+ U> F U&(  " )  P! tP: "5 u7Q&   U  ^ x --r 6 &7 5  ҋ⋗B* &h     EE  4 R V rz ~&d &f 0 $q ePf wB w$q &d b .,,e 8  .$ 09AZ ~׭<.   ׭,$8 z׭$A~ %$ %.@e.Wp(`~&7 "q  fHY z|:Ds@$9)@:t @2Hq:@i@    \~h\h}h}h BBBBBBBBB* (B*B,B.B0B2B4B6B8B(4( X\*X.\\\ggj01234567SWAMLHCQFXBGIVED}~\/'"% ^_@><$=CQ.;-+*BEFGLNPSVWX!:&#? ,&,&&Zj <>@BDFHv,x&z,|&~&B",z(|$:D:h~",z  (| "$$&(:*,.0D2:468:h<>@7 p7  r77P7 \   L" DD T:  ,? 7 " 8hv7  7 & 6 7 B "7tm  2  w  ? w De w %6,Bhpx.eDl r w ׭ D B 5$ 4  t@  z%B l6BHRfB (f 8w ? D 7 f_ 7c  7Z7 X w ԇ  y;5w 82bp*7$  77w77%5 f   b/7* 7 b # Ba 8 , 8  & Lw 7R7Pw_F5B05 L  wB~  w   7m     77 wj  hz ~ 4b  $| B` :%dZ vw 77TM7HU@E 7tz   p e 77Ɓ 0׭U >sfr7 ($ĝw)t!MC w7i   e0B7P pJflH l: j@ 7w>MPODcJ BE7IOIL00+ "!TADATADATADATADATADATALsVsjEMTRFPzw 7 w   T  L  % R ,4X`hp&dhr,tv4xXz`|h~px p 43 8  N (  >  @ @   J 6  xvsb(f&f)w bd 4j w L^%4 < % ! &d$40^NPVdf%44 >7`$-  z@@@Pr@ @em 7X wRPw Z   @f   m77  ` `  07Eu` A "  A ы <>  ( &5  &% F) L:t T$9)\:pFR  7F)  w $ az $s0F>sd +f&%&%#$ h%  zU wH N, @ e0 2 @7^ >.ss"(6>DzR^nJ 7N 7 @7<&e N @ e0  wZ L   @ LZ NL P R T r |i3 e ee e @( `ADD  SUB  MOV  CMP  0BIT  @BIC  PBIS  BRBNE& & BEQ, , BGE2 2 BLT 8 8 BGT > > BLED D BPLJ J BMIP P BHIV V BLOSBHISBVSeh h BCCn n BCS t t  CLRz z F COM  INCP  DEC   NEG  F ADC  SBC  TST   ROR  F ROL  ASR  ASL  SXT  pMUL  rDIV  tASH  vASHCxXOR  ~SOB  EMT  JSR  SWABRTS  FJMP  BPTe  CLC  CLV   CLN  SEC" " SEVP( ( SEN. . SCC4 4 CCC: : NOP@ >@ ~p`>  <Vh@\h: > $<(V,h04\8h  qq0uqXuququququq@yqxdqqqq  2|qqqq    f&Bwpz KWt E@ Ktpe 4e0 &tt` *z > J@ ^ f)  a    xXt(pet @ 8  S  @ÝE 2Ý ( 2 Ft T ` j  3t8pe  ѕ,Ýt v Ý` ÝT Vѕ,J E tpe ѕ,  2 @ h z ^  єєєє &&f L$q   D!De    ѕ + : ~ ѕBѕ rnl r Zѕ & v5vѕ0 tEe0v V&  r e.e e ~&f &ѕ  D~ѕ( ѕ)  < X ѕ@ Ý r Ý`  | ѕ+ѕ#ѕ- & D ! !E7QN09t$v J~ %  6!   6!    D   !?t7Qf  +-'00+k:;r"A) N4 Ft0P pA h b Z TtP J F` Z   & , ff  P>&f @ #!-((- >( !U, D7& \)U0 ~ !  j 8U  ,+ U> F U&(  " )  P! tP: "5 u7Q&   U  ^ x --r 6 &7 5  ҋ⋗B* &h     EE  4 R V rz ~&d &f 0 $q ePf wB w$q &d b .,,e 8  .$ 09AZ ~׭<.   ׭,$8 z׭$A~ %$ %.@e.Wp(`~&7 "q  f"Y zyDs@<&Kq@p@`@$9)@<&9@:t @2Hq @?S@:@i@z=@@=@' q@:@<&D@hp!@   \~h\h}h}hy ( BBBBBBBBB   & . J (B*B,B.B0B2B4B6B8Bprtv x z |& ~. (4( X\*X.\\\  mm=<&9<&Kq<&D ' > P    ' q ySY  ggDDDfDDDD01234567SWAMLHCQFXBGIVED}~\/'"% ^_@><$=CQ.;-+*BEFGLNPSVWX!:&#? ^ DDDfDDDD:<>@BDFtvxz|~B0<Ld2,8 B t 0Nb~0< L d2,8 "$ & (*B , .02t 4 6 8:0b@N T\7 7 \  N7J77"    "< DD T:  |? 7F N T\8hB7< 7 & X @7 :B 07    w  ? w 0De w ;%X,Bh0px;.eDlB  w ׭]DJ B 5$ 4  t@  %B znfB6BHRfB: ( w ?  7 _ 7  77 w Tԇ  y|w 2bTp|z7tld  7D7RwM7472%5$ f   h27z * 7 b 2& Ba  < 2   & P w 77w5z5 J 6`w`B~  w ] U:67Im0*&&  ,) T  77 6nT* wd  4b  $rl B` B% w 777UE 7| b  \ .eT7D7>9Ɓ 0׭'  Dsl"Uh`^7 0>$ĝw)t!MC w 7   e0B7Plr x t: r@ 7fw>4.(MP^[ODPc00+ "!TADATADATADATADATADATA .BE07/IO$IL Rs\s EMTR FPw 7P wF   \  T  %  R  j nxz|~    & .  p 43 8  N (  >  @ @   2   &  . ` xbjf&f)w   w  %.4 < %,s(2> \^drt ! %44 7`f-b @@@P@ @em8 7 w4 $* w   T @f   m77  ` `  n07E  T0  u` A A ы ~  j h\5  h%\XTLFZ:t b$9)j:~F ) HB, 7.F),^b d /VR *2s>FLsX^b h?Sz~=i~ $ȕ R 7 Hd& SYfp"# 7 N .STB FILE NAME IS: m&@=`6>' qDhp!  ^ @j d] w P$ az +f&%&%#$ %  "&PPsXs`ft|` (U w N,D @B e0 @;7  7 7 7&e N @ e0 L (D B0;q w>  * $ >@ e ee e @( `ADD$     4>>iJ J SUBP P MOVqV V CMP\ \ 0BITb b @BIC h h PBISnnBRBNEz zBEQ BGE& BLTf BGT BLE BPL BMI BHIBLOSBHISBVS BCC BCS   CLR F COM  INC  DECe  NEG` F ADC   SBC  TST  ROR F ROL  ASR    ASL  SXT pMUL rDIV" "tASH&((vASHCxXOR4 4~SOB: :EMT@ @JSRFFSWABRTSR RFJMPX XBPT^ ^CLCd dCLV j jCLNp pSECv vSEV| |SENe SCC` CCC  NOP>~pp>`  b@:p > $(,0b4844 qq0uqXuququququq@yqxdqqqq  2|qqqq >> (f&BwpKWtE Ktpeh 4e0 &tt` *>J^h)X  a  D J Xt(pe  8 <S@ : ÝE ÝX(D2JFT`@j:6 3t8pe p ѕ,Ýt vL VÝ`4 HÝT Vѕ,J E tpeJ ѕ,F2L@4hJzFR  єєєє &&f L$q   D!De /*f   R|:.7 @ D!wwD     ѕ+ : $ .ѕB:ѕ   ѕ & v5vѕ0 tEe0v &> r e.e d>&e ~&f 00+k:;r &ѕ  D~ѕ( dѕ)Y ѕ@ ÝJ r 6Ý6n0`  " ѕ+ѕ#ѕ- & D ! !E7QB09"$ v"J~ %  <!   6!    D   !?7Qf  +-'"A) N7 Ft0P vA n h ` ZtP P ` Z  &  , ff  P&f @ #!-((- >( !U, D7& \)U0 ~ !  j 8U  ,+ U F U&(  " )  J! tP 5 u7Q&   Ux  ^ xD -B-> VD&70 5 (ҋ⋗B* & 6 X  EE b6 L*(66:XVb^6bdfLhj&f 0 $q ePf( wbB wZX$q ,,eF( 8 ( .$ 09AZ ~׭.   ׭$׭A~(z B5 `  w@7l:ew07 ew  B5  `  f   w"w,@e %$ %..:<r@e.Wp(`~&7 "q  (fY VZt^sVDs@:t @:@ t^d \~h\ht^( t^00tZ|B (*,.0246ntpZr|tvx|4  *.  = gg|||||||01234567SWAMLHCQFXBGIRVED.|||||| |D=DTfx}~\/'"% ^_@><$=CQ.;-+*,BEFGKLNOPRSVWX^&Tfx  ~B~$$`jf~0jdp|6l~$$  `jf~0 j"d$p&(*,.02|4668:@"\L7 v7  0 x77P7 \ OD T:  B? 7 7 7 " \ L0\8& B  7  7   w  1 w 0De@ w ;% e0DlD" B$\0d@l;x0~D N w  5W 4 T @  Z r 4;t  83 @  D $T>X0^ #E = e0,  ~@ nb (0,r f^w ? :0 P (.R0bt07 ,_ &7+  7"7 hw Xԇ  &y~w7  !7(X6~p( 77w77%5 f     }`\7qmVPLL DB Q X 8 |X8, 767 4w  $b   B` % D _ & >   w 777UE   l f <eb7Rls7LGǁ 0f׭5.&Uvnl7 8L#ĝw)t!T fxTTE w7 f f e0B7  : @ PJDMP|00+ "!TADATADATADATADATADATAyODnc, JffjstszsBEN7MIOBIL:FP2 EM*TR"w 7n wd      t  l  % <R tZ|  N3 X  n H  ^ 8 @ "*"<&0t2Z4|68:<>@  <  <& t<f&fw ~ | w h 4sB<Xb|n 4TxT <xT % !   %4T4xf j&TxT&x(TRlTpxvf7`N-J @@@P@ @em  7 w~|w   X @f   lX|   m77  ` `  07E ` A A ы df |  P NB5  N8 @ H$0 7" ,:::t Tz )  w2E  w "T$ az +f&%0%%"BTt0zt $ d%T 0 (U  N,F @D e0 0 @;  Ne0, 7z 7 l7h T0(&F2DB; &e N @ e0  w , &   @f A N  % * , ., 0& 2 P Xl e ee e ^ @(F   ,B     8@Y Vгrt^8VгDs@:t @T(@:@T(@ }\~h\h|} X |}( }00bHjb |}(*,.0246 n|}b p|}H r|}j t|} v|} x|} ||} n x @(bHj DHv <|} >|}x @|} B|} D|} L|}b N|}H P|}j R|} T|} V|} X|} Z|}dDhHH=HggV01234567SWAMLHCQFXBGIRVEDNV |} |} |} |} |} |} |} |}ATfx}~\/'"% ^_@><$=CQ.;-+*,BDEFGIKLNOPRSUVWXZt&Tfx  "ztztt@^z |}z |}t |}z |}t |}t |} |} |} |} |}@ |}^ |} |} |} |}"6RLZdZ|pz |} |} |}6 |}R |}L |}Z |}d |} |} |}Z |}| |} |} |}p |}JbLX:*Z |}J |} |}b |}L |}X |} |} |}: |}* |}|}^7 @7  0 R767>7` R 6 OD 2 T: * Rz}@ }}}}} }0"}R(},}0}2}66}>>}RX}RZ? 72 d 74 X 7 & V  R 7 R  7 d R w,  n7 nz }}}2} }4(} .4V6} :}R@}R H}T}Z}b}R ~}n  De@y %"e0Dl  w  5W 4 T @  0Z "Z} }@ }y} (}0 .}8} B} T}T n}|}R ;t  3   D #E = e0,  @ NL (: },}Z} ^}j}Np}Lv}n06 T w ? 06 z7 _ x7  77 . H҇  y~ }0 } }6} T}  (}0,}.00+k:;r}66}B}J}N} V}X} j}8w7  !7 77w77%5 f  z} }}}"}*} :}<}P}T}X}\}`}l} ~}d " 7m     77 w z}}}}"}(}*}.}0}8}@} F}N}T}X} f f m  @ f  " f  B` T%/R}} }$},} >}J} \}h}|}     w8 D _ & >  w  7>77U@Z}} } } &} 2}j}>n}t}x}~}@ E@  @>  eB5 & 77 0f׭}}@}@}>"}(},}8}B:sF} V}\}`} n}fr}z}nU@>@7 f>7ĝ( @f&w-~} }@}>}@}"}(}2}>6}<}D}LT(P}@VT( Z}j}t!TTE w>7 f f e0B7 H D: B@ MPOD}} }T$}>(} ,}f 2}f<}D}\}`}d}j}p}x}~srnc BE7IOILFP EMTRw 7J wH  ~ s}s}} }(}0}8}@}H}L}R}^}Jf}Hl}6        % "R  J .3  V   F *} } }6 D}" H}X r 6 @ \@ R v N D FB<<f&fP j Jd6}D:}<}FsH}BL}P}< T}<b} h}Ptjv} ~}JTaAxa   TaAx  % ! :}} "}T *}x8} N}T V}xP  %&4T xa f 7`-J D@@@PF@ @emb } (}T,}  .} 4}x D}fN}R}V}X}Jh}Dr}Fp 7D wFHw    x@f   m77 z}}D}F}H}$}.}6} <}D} L}T}^}b}f}8 ` `  V0@7=E `   ы%0%7 75r}>}F} V}0X} ^}`}f} j}l}p}t}x}~}|  X5  5??5  %]  z } }}"}(}2}6}B}H}L}X} f} l}r}x} , f& ׭ 0w J4482 47H82) Dt} s2:t 4}4::<}4@}D}8 H}2^}4b}Hf}j}8 n}2|}D 4 DwlHE FE  $ az +& (%0%%"$ `%R }4}D}H$}F*}E 4}6}f} l}0 r}$ T 0 fU  N, @ e0 , @y P  Ne0, 700+, "!TADATADATADATADATADATAN 7 N7N&e R }T }0 }f } *} :}y@}PZ}Nh}Nl}N N @ e0  w  @f A N  % e ee e  >}@ d    ,B    } } (}Y XZXDs@ t2VNh ѱXhY8 h< <( t <^ @ZL 8-7>7 Z#@\%zt t@tZ tL t "t8&t.t2>4tC 8e . &) B  B B ( t Ft`sdtht B e0 ѕ ѕ t> \q gR^ PCPCPC PCPCPC PCPCPC PSPSPS DSDSDS R0R <>\2@R H<^S0R0 R1R1R1 R2R2R2 R3R3R3 R4R4R4 R5R5R5 SPSPSP TOSTOS >>> BREAK <<< 4t 8t4Js Vt]Ztbt Z R J D >C 8e . &) B  B B ( t Ft`sdtht B e0 ѕ ѕ t> \q gR^ PCPCPC PCPCPC PCPCPC PSPSPS DSDSDS <0W  ' >2 S0@ g0@ 0@; Bx0@00@P0@8T0@++^q+ +dkW.^qt9?9@;M>8>DXH8HKJKNt Xt .0) %RZJwx{(KXYqsOy*}d|&,&&)&&&<&,&.&3& N&N`&4d&f&\g&p&s&x&x&Fy&Ny&c& c&c&=c&c&%c&&c&b'c&d'c&'c&](c&(c&8c&>9c&X:c&y:c&:c&:c&vLc&Yc&{Zc&yc&r(s:( z(b (0('(T*(U*(V*(W*(v*(w*(x*(y*(z*({*(|*(}*(~*(*(*(:(pE(CG(DG(HG(^G(_G(`G(aG(bG(cG(dG(eG(fG(gG(Z(S[(T[(f(f(r(w(w(w(y(Ry(([()Bx)04)Xu-6)vu-6)wu-6)xu-6)yu-6)zu-6){u-6)|u-6)}u-6)u-6)u-6)u-6)u-6)u-6)u-6)u-6)u-6)u-6) v-6)Hv-6)W)S)p!)H)H)!)Bx))r) S;4S;S;S;S;""S;2S;3S;:S; NS; RS;YS;JwS;wyODOXJOH"}}}$}y:}vL}tN}Jw}='0@A> 0@Dp0@:Bx0@P0@>d0@>80@>r0@K<}0@Kօ0@L 0@Ls0@Ly0@@q.@r.r/rw.Ry/r1Ǝ116&6&<0@6&""-66&f/r6&w~.'v100,  "!TADATADATADATADATADATA6?W Pٳz6&PٳD @~<H5 @)!Hzc&X:HS;3H}y:H)sE@c&rHS;H~<Hc&:H(b H`@d@}H>P@zc&:H&fH"{<](H$<<H6&\gH)@}s@|H@&sH([H~r@&Hz&3H (rH# S@Nt H KXH$9OHYqHc&%H)04H<~H)P@c&YHS;JwH& NH c&&Hz8@ձ@c&Hh'@8Hc&=H)SHc&b'HsH$9.@$95:@xH~<HJzc&8H%H) H )HHOyH +Hc&>9HS;2HRy@&H` dN h l pP t x |P|$[O A|BCD*MPR,STQ~ $   |  $ (* , 0 4, 8T < @DHLTA|BCD*12#3456 ~7 89 ~0 ~8~  |   *# $(, 0  48 <@ D  H0 L  P8P ~@ ~0K1S3[4c5k6s8{9 ~H ~P ~X ~z   @  KS[ c$k(s,{0 4  8H <  @P D  HX L HdP ~ ~` ~ ~p ~1234 ~xz P      `     $p (  ,048< @  DxQ ~ ~ ~ ~ ~ ~ 78n     00,k:;r       $  ( ,  0 4 ^ [?61;#*'['1'2'4';G'821:~     " &*# . 2*6':'>'B'F'JGN' R V2 Z:"P2<R< l z 2    <    R  <   l n~ & t P` B ~  & t P `  w EuB 5 CeeO%UU A" wMe 5 =%* R$  ~\}R6|  85 :ue   0 0 0  5  |Aej~UU BeXPCeL eVe 0 BCe~U*   F  H xE@& J n N rBe$R~ D~  @\}   Pu u 5-5 6   P  0q q @, 1  @\}6 d\}0"N5H @A- 5 B5%B@mBAmBu   `  U  JE~ & 50" \}N \}H V\} l\}    0 0 w %UU444      4  & UU  : &w *\} 6\}Fw N\} Z\}&*0 6  & w  %@mB   $  (E~  w@0  ` Ce \}0 \}62`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E"% W @&  &D5@  $D  K se~ ~ e 4w W C B =5 .+s eAe3eO3ssqI6 S D4 .%56 9 (   ~fe &4~ 5 U5@  ƎeP ~  E  ҁ B~e• D`~ E5@  w\ KmB3@ƎeC-4 H w.B6 2% RR 8D~ (D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~L meI~ ~ 5!6̇U @E5`u- ^ F 0 0 RR  t   4 5@ & F2   rꆇe B` P : 2@ ZƎ  @ &B` 톇   ҋ  %UU u A 8˥*   Z\}DJ>0e L=  0  1 & > 0 0 n pL= x <   !  1@ *B8  5  h 0 0    0  0  C2 4 C@ pL=wX > !5C@  1e1 1  0z \}|| P Z > f Z   P   Z > f  ~ V~ W W C@& |L=@0e   $\}| P 0  0   J @2"e .5@    D 0 0   &  L=eH~ l     400, "!TADATADATADATADATADATA&@`   T 2 0  lw `ҔD~ "    .&@`  W  \}T2 z\}W r t w C`~ D~    eC~L=l b5@ &- B@ ;  r 5 : < w J 2 L=6 w   \}-@p C~ D-6L=66  h  wB@ʢ    1w ~lt Z w b f #N \B` e~ . C6#    e2  a~ 0 e    , 0 0 , r,  D4 V D-65@  5   E  C` R   l 0 0   w ” B  ~a z 5@0!0 :Aw Bz5  8DV , 5B~mB`B~  z~5>5  HƎ^Ǝzѥ ~eB'@ >~! N ` e  @ ~ 5@  \}1457 5+5õ@ ~ - 0 j ;BC Z m N õ< r f @   5 Ǝ (\}- 0\} ^\}<  zZ :  = BVfP DZ %!t-<%*%N  <%$" \}Z D\}ZLb*hN|$#t-<. C@%C@ &C@  wFe B ɥ. ы~APBV *^Ǝ|1 2 UE U@E122A& `1e2= & J   5$ f\}|$ \}$08@HPX`hpxz     0 8 @ H P X ` h p x "J         Z ɋQ$A5 l &5-5 'm![B< q~  V& JB< \}Z@q.xG Q~f:  t-<4Am< H5  5t-<5 B5@  %$6U wz گtگt)Xu,5  05  P @wR &گtگt)u<<wH گtگt)uFFw> گtگt)uPPw 5@  25@ &L=%5@ & |l <6 6w |گt گt)ubw F$5@  &5@ L=6 6 wb \گt گt  ) v,,,5@    w: &گt گt  )HvT,T5@   w &گtگt)vu|*| 5@  w $گtگt)wu&t-<  w گtگt)xuw B> <t-< e `  w B> <e `   >` . <  <  < 6@w@ گtگt)yuNN <E ~Bm< 5#5A< C~ f:  % V A<C~ D5 0 05 Ǝ&f: $  zUw گtگt)zu00,$k:;r`!~B-< U  1w2w3w4w5w7w:wƎ ƎB@rh<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   Bl@qw 5 Ue B` B`  ^Ef:fBAe*Bҥ ~ ^5%  nU Z ~\}ZH` j% BEAe 4 = w  Bگtگt){uw f:Ae$   | 5 0UC2 (EC@ w   5E5 <eh   U5<e`  B<w! zu :u ; Nw f: 5  4E  *f@ >\}!X2 f D~ XU   5 : &\} \}(A0C9lNX: 0  l   &| Am< U E5   4  eыAm> e$ wL&*Ǝ .\} vگtگt)|uB@B AZ az w :گtگt)}u~(~09  w "گtگt)u` f-+ +- . ɠ ~ 5Nm>V   w Ǝ Zگt گt  )u" "wr گt"گt"")uF   ~5 5  $w0Ǝ @گt$گt$$)u^^&w& گt&گt&&)uhhC2L=  5 f h ~  F5 : : uew %UUz  U@ t " PZ %$ 5 :&- *; j  H X: `" \} *\}Z28$ J\}-`w  d1 0 C    e0 e0 ;= u- @e5 5 fzRy@ A~  B       Bɋ W]W: mK (\}Ff1A%& ppe - *%%b'  1  vd:Bx >rPP0.)sE4)sE<)2HD)2HHձN`;\`dP j 0 0 :0:  1 Br JP` * 0 0 ff @  0 0 ppA1 , K<}  0 0  "  0  0  w ,AHCCHeEfD & pe ɇ Ƈ%FuJ `Dw E<>P8)sE<)sED)2HL)2HPձV`;v ) B ",e$FFJ% 4 xC-C`AleC ",e>8H>PX:Bx^:Bx%uDH UBE`JF R5H&   5   B5 F8TT>d\)Pf)pj @,e fe N,Nv v  1" HZ jDpn:s ~r zL ~L v|  << & & & & & f& Ε &f  8L L }V}$r @DpDwxb5 f8TW Pٳz6&fPٳDs@:G@='@$9Y@ ~@@$9΅@Dp@ 0rhRyh  w ѰB   f& & & & && f& Ε `  ,& & & & f& f& Ε.<='@DpD:G ~ x='|DpH| f& &  ׭W1 ":G ~ $s&$9΅,$9YW Pٳz6&<PٳD5!@='H<&%t@A> HDpH NT HPHLsH >dHz>rH SHL H :BxH>8HKօH gHLyHK<}H8>DXH8HKJKNt Xt .0) %RZJwx{(KXYqsOy*}d|&,&&)&&&<&,&.&3& N&N`&4d&f&\g&p&s&x00-4k:;r&x&Fy&Ny&c& c&c&=c&c&%c&&c&b'c&d'c&'c&](c&(c&8c&>9c&X:c&y:c&:c&:c&vLc&Yc&{Zc&yc&r(s:( z(b (0('(T*(U*(V*(W*(v*(w*(x*(y*(z*({*(|*(}*(~*(*(*(:(pE(CG(DG(HG(^G(_G(`G(aG(bG(cG(dG(eG(fG(gG(Z(S[(T[(f(f(r(w(w(w(y(Ry(([()Bx)04)Xu*z)vu*z)wu*z)xu*z)yu*z)zu*z){u*z)|u*z)}u*z)u*z)u*z)u*z)u*z)u*z)u*z)u*z)u*z)u*z) v*z)Hv*z)W)S)p!)H)H)!)Bx))r) S;4S;S;S;S;""S;2S;3S;:S; NS; RS;YS;JwS;wyODOXJOH"}}}$}y:}vL}tN}Jw}='-A> -Dp-:Bx-P->d->8->r-K<}-Kօ-L -Ls-Ly-@q+:@r+:r,w+:Ry,.BƎ.B.B6&6&<-6&""*z6&f,6&w~+:'v.B00-<2 "!TADATADATADATADATADATAz8W Pٳz6&PٳD @~<H5 @)!Hzc&X:HS;3H}y:H)sE@c&rHS;H~<Hc&:H(b H`@d@}H>P@zc&:H&fH"{<](H$<<H6&\gH)@}s@|H@&sH([H~r@&Hz&3H (rH# S@Nt H KXH$9OHYqHc&%H)04H<~H)P@c&YHS;JwH& NH c&&Hz8@ձ@c&Hh'@8Hc&=H)SHc&b'HsH$9.@xH~<HJc&8H%Hz) H $95:@)HHOyH +Hc&>9HS;2HRy@&H% RR DD~ 4D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m` ~ 8C~meI~ ~ 5!6̇U @E5`u- z Z 0 0 pp  t  ^ 4 5@ & F2   rꆇe B`  : 2@ ZƎ  @ B` 톇   ҋ  %UU u A j˥*   Z\}Dh>0e L=  0  <1 B > 0 0 n pL= x <  X !  1@ *B8  5  h 0 0    0  0  C2 4 C@ pL=wX  !5C@  1e1 1 x 0 \}00 x * Z  0  0  x *   VW W C@& L=@0e   $\} P 0  0  J @2"e 5@    D 0 0 4 4 &  L=eH~ l     &  C` H  w `ҔD~ :    & r b <w C`~ D~ b,    eC~L=l 5w  e~@~ w Jx  2 L=6 P00-L2 "!TADATADATADATADATADATA w ^ C~ D-6L=66  h  *wB,$ @ʢ    1w l w f #N \B` 0e~ 0Hj r C6#    e a~ 0 e    d 0 0  r  D4 V D-65@  5   E  C`  v  l 0 0 t t w ” B  ~a z 5@0!0 :Aw Bz 5  DV , 5B~mB`B~  z~575 ѥ HƎ^Ǝl ~eB#@ D~ e  @  ~ ( 5@  f @ 5   h& :  = BVfP 2& %!t-<%%  <%#" \}& B\}&J`fzdt-<. C@%hC@ &C@  wFe B ɥ. ы~APBV1 (h\Ǝ 2 UE U@E122A& `1e2= & J   5 d\}z\ \}$*H|z * H  |           " "J        "^^ & ɋQ$A5 l &5-5 'm![B< q~ | V& JB< \}&@q.G Q~f: V t-<4Am< 5  5t-<5 5@  %$V6U wR گtگt)Xuv,v5  05  P @w* &گtگt)uw  گtگt)uw گtگt)uw 5@  25@ &L=%5@ & 8l 6 6w |گt. گt)u0b0w $5@  5@ L=6 6 w: \گt گt  ) v,5@    w &گt گt  )Hv,5@   w &گtگt)vu* 5@  ^w $گtگt)wu&t-<  w گtگt)xu&&w B> <t-< e ` v w B> <e ` P  >`  <  < j < 6w گtگt)yu <E Bm< 5#5A< C~ f: \ % V A<C~ : D5 0 05 Ǝ&,f:  BUwz گtگt)zuNN`!~B-< v U  1w2w3w4w5w7w:wƎ ƎB@r<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   l@qFw 5 Ue B` B`  LEf:fBAe*Bҥ ~ ^5% 6U & ~\}&H j%H BEAe 4 = w H Bگtگt){uw f:Ae$  ` " < 5 0 UC2 00-Tk:;rEw   5E5 <e J UV5<e` * B<w Tu :u ; (w f: 5  E   D~U    ,\}F z\} 5 : \},(,AjC9NX88: j    8 &8| Am< U E,5   4  eыAm> e$ wL&*Ǝ .\}, vگtگt)|u|@| AZ az w :گtگt)}u(09  w "گtگt)u` f-+ +- . ɠ ~ 5Nm>V   w Ǝ Zگt گt  )u8"8 "wr گt"گt"")uVFV V  ~5 5  $w0Ǝ @گt$گt$$)u&w& گt&گt&&)uC2L=  r5 f L   F5 : uew %UUt  U@ P l& %* 5 :&# e de X: `w  d( \} $\}&,*2 D\}#r1 0 C    e0 e0 ;= u- @e5 5 f@ jRyA~z . B T      Bɋ W]W: mKɋ d \}z6f1A%& ppe - *%%b'  1  d:Bx >rPP0.)sE4)sE<)2HD)2HHձN`;\`dP j 0 0 d0d  1 Br ZP` * 0 0  P  0 0 A1 < K<}  0 0  2  0  0  w ,AHCCHeEfD & pe ɇ Ƈ%FuJ `Dw E<>P8)sE<)sED)2HL)2HPձV`;v4) B ",e$FFJ% 4 xC-C`AleC ",e>8H>PX:Bx^:Bx%uDH UBE`JF R5H&   5   B5 F8TT>d\)Pf)pj, @,e fe N,Nv v  1" XZ jDpn:s ~r zL ~L v|  << & & & & & f& Ε &f  8L L }V}$r @DpDwxb5 f8TW Pٳz6&fPٳDs@:G@='@$9Y@ ~@@$9΅@Dp@ 0rhRyh  w ѰB   f& & & & && f& Ε `  ,& & & & f& f& Ε.<='@DpD:G ~ x='|DpH| f& &  ׭W1 ":G ~ $s&$9΅,$9YW Pٳz6&<PٳD5!@='H<&%t@A> HDpH NT HPHLsH >dHz>rH SHL H :BxH>8HKօH gHLyHK<}H8>DXH8HKJKNt Xt .0) %RZJwx{(KXYqsOy*}d|&,&&)&&&<&,&.&3& N&N`&4d&f&\g&p&s&x&x&Fy&Ny&c& c&c&=c&c&%c&&c&b'c&d'c&'c&](c&(c&8c&>9c&X:c&y:c&:c&:c&vLc&Yc&{Zc&yc&r(s:( z(b (0('(T*(U*(V*(W*(v*(w*(x*(y*(z*({*(|*(}*(~*(*(*(:(pE(CG(DG(HG(^G(_G(`G(aG(bG(cG(dG(eG(fG(gG(Z(S[(T[00.dk:;r(f(f(r(w(w(w(y(Ry(([()Bx)04)Xu.)vu.)wu.)xu.)yu.)zu.){u.)|u.)}u.)u.)u.)u.)u.)u.)u.)u.)u.)u.) v.)Hv.)W)S)p!)H)H)!)Bx))r) S;4S;S;S;S;""S;2S;3S;:S; NS; RS;YS;JwS;wyODOXJOH"}}}$}y:}vL}tN}Jw}='1$A> 1$Dp1$:Bx1$1$>P1$>d1$>81$>r1$J1$K<}1$Kօ1$L 1$Ls1$Ly1$@q.@r.r0Vw.Ry0V2Ǝ226&6&<1$6&"".6&f0V6&w~.'v200.la "!TADATADATADATADATADATA@W Pٳz6&PٳD @~<H5 @z)!Hc&X:HS;3H}y:Hc&rHS;H~<Hc&:HIq@(b Hb&@~<`H>d@}H>P@zc&:H&fH"{<](H$<<H6&\gH|H@&sH([H~r@&H&3H (rH#z S@Nt H KXH+^qHS; NH c&vLH<<}HS; RH(H}H~OHYqHc&%H)04H<~Hc&YHS;JwH& NH c&&Hz8@c&H8Hc&=H)SHc&b'HsHz@J@(ZH)BxHc&'H&xH@zxH~<HJc&8H%H) H )HHOyH +Hc&>9HS;2HRy@&H bp @` dN h l pP t x |P|$[O A|BCD*MPR,STQ~ $   |  $ (* , 0 4, 8T < @DHLTA|BCD*12#3456 ~7 89 ~0 ~8~  |   *# $(, 0  48 <@ D  H00.tk:;r0 L  P8P ~@ ~0K1S3[4c5k6s8{9 ~H ~P ~X ~z   @  KS[ c$k(s,{0 4  8H <  @P D  HX L HdP ~ ~` ~ ~p ~1234 ~xz P      `     $p (  ,048< @  DxQ ~ ~ ~ ~ ~ ~ 78n            $  ( ,  0 4 ^ [?61;#*'['1'2'4';G'821:~     " &*# . 2*6':'>'B'F'JGN' R V2 Z:"P2R< l z 2        R  <   l n~ & t  B ~  & t    w EuB 5 CeeO%UU A" wMe T5 =%* R$  ~\}R6|  85 :ue   0 0 0  5  |Aej~UU BeXPCeL eVe 0 BCe~U*   F  H E@& J n N Be$R~ D~  @\}   Pu u 5-5 6   P  0q q @, 1  @\}6 d\}0"N5H @A- 5 B5%B@mBAmBu   `  U  JE~ & 50" \}N \}H V\} l\}    0 0 w Z%UU444      4  & UU  : &w *\} 6\}Fw N\} Z\}&*0 6  r wX d%@mB  R p h (E~ 4 w@0  ` Ce \}0 \}62`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E"% W @&  &D5@  $D  K se~ ~ e 4w W C B =5 .+s BeAe3eO3ssqI6 S D4 z%56 9 (   \~fe &4~ @5 U5@  ƎeP ~  E  ҁ B~e• D`~ E5@  w KmB3@ƎeC-4  wzB6 ~% RR D~ tD~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~L meI~ ~ 5!6̇U @E5`u- ^ F 0 0 RR  t   4 5@ & F2   rꆇe B` P : 2@ ZƎ  @ &B` 톇   ҋ  %UU u A 8˥*   Z\}DJ>0e L=  0  1 & > 0 0 n pL= x <   !  1@ *B8  5  h 0 0    0  0  C2 4 C@ pL=wX > !5C@  1e100.|a "!TADATADATADATADATADATA 1  0z \}|| P Z > f Z   P   Z > f  ~ V~ W W C@& |L=@0e   $\}| P 0  0   J @2"e .5@    D 0 0   &  L=eH~ l     4&@`   T 2 0  lw `ҔD~ "    .&@`  W  \}T2 z\}W r t w C`~ D~    eC~L=l b5@ &- B@ ;  r 5 : < w J 2 L=6 w   \}-@p C~ D-6L=66  h  wB@ʢ    1w ~lt Z w b f #N \B` e~ . C6#    e2  a~ 0 e    , 0 0 , r,  D4 V D-65@  5   E  C` R   l 0 0   w ” B  ~a z 5@0!0 :Aw Bz5  8DV , 5B~mB`B~  z~5>5  HƎ^Ǝzѥ ~eB'@ >~! N ` e  @ ~ 5@  \}1457 5+5õ@ ~ - 0 j ;BC Z m N õ< r f @   5 Ǝ (\}- 0\} ^\}<  zZ :  = BVfP DZ %!t-<%*%N  <%$" \}Z D\}ZLb*hN|$#t-<. C@%C@ &C@  wFe B ɥ. ы~APBV *^Ǝ|1 2 UE U@E122A& `1e2= & J   5$ f\}|$ \}$08@HPX`hpxz     0 8 @ H P X ` h p x "J         Z ɋQ$A5 l &5-5 'm![B< q~  V& JB< \}Z@q.xG Q~f:  t-<4Am< H5  5t-<5 B5@  %$6U wz گtگt)Xu,5  05  P @wR &گtگt)u<<wH گtگt)uFFw> گtگt)uPPw 5@  25@ &L=%5@ & |l <6 6w |گt گt)ubw F$5@  &5@ L=6 6 wb \گt گt  ) v,,,5@    w: &گt گt  )HvT,T5@   w &گtگt)vu|*| 5@  w $گtگt00.k:;r)wu&t-<  w گtگt)xuw B> <t-< e `  w B> <e `   >` . <  <  < 6@w@ گtگt)yuNN <E ~Bm< 5#5A< C~ f:  % V A<C~ D5 0 05 Ǝ&f: $  zUw گtگt)zu`!~B-< U  1w2w3w4w5w7w:wƎ ƎB@rh<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   Bl@qw 5 Ue B` B`  ^Ef:fBAe*Bҥ ~ ^5%  U Z ~\}ZH` j% BEAe 4 = w  Bگtگt){uw f:Ae$   | B5 0UC2 (EC@ w   5E5 <eh   U5<e`  B<w! zu :u ; Nw f: 5  4E  *f@ >\}!X2 f D~ XU   5 : &\} \}(A0C9lNX: 0  l   &| Am< U E5   4  eыAm> e$ wL&*Ǝ .\} vگtگt)|uB@B AZ az w :گtگt)}u~(~09  w "گtگt)u` f-+ +- . ɠ ~ 5Nm>V   w Ǝ Zگt گt  )u" "wr گt"گt"")uF   ~5 5  $w0Ǝ @گt$گt$$)u^^&w& گt&گt&&)uhhC2L=  5 f h ~ V F5 : : uew %UUz  U@ t " PZ %$ 5 :&- *; j  H X: `" \} *\}Z28$ J\}-`w  d1 0 C    e0 e0 ;= u- @e5 5 fzRyh@ A~  B    E p  (\}J+"iK b 0 0 @@ Br \  0 0 TTT55 f1A% & C **%%b'   1  6:Bx >rPP0HP N 0 0 0 p 1 Br P * 0 0    0 0 A1  K<}  0 0    0  0  w AHCCHeEA& fD  ~ԇ%FuJ `Dw E) ƇB ",>PZp>8te$FFJ% 4 C-C`AleC ",e%uDH UB,>P<:BxB:BxE`JF Q5H&   5   @,e ,&5 *8T8>db8T F 0" 0""   EF 0 JEJ@JeJF  @J J F F5 H   e  &  ^ƎtƎp0   b $B bf& EBa & & ̋•v ` 4\}\} !A[$%././0: B pE `4 U & NU E  KօKօ2Kօ\}.+"z+"+"' +"Z +"iK+"KӋ 0 0 H11 ff eA$ $$$$$3 F>aW axZ(b,a@`:E`D b J\}r>vb&|JVf e22 0 f e&&pd b@`& b$b(x,>2b&6a@`HT b^hJnb(xr bp vaGzaG~ bz*f& e< Iq bK<}W Pٳz6&""PٳD گt)Xuh)wuh)vuh)uh)uh)yuh )}uh2)|uh)xuh )zuh b){uh )uh)uhC)uhq)uh)uhY)uh) vh)uh)Hvh 0 گtNO HELP AVAILABLEALPHABETIC REQUIREDNUMERIC REQUIREDALPHANUMERIC REQUIREDSIGNED NUMERIC REQUIREDNON-DISPLAY6|ABLE CHARACTERFULL FIELD REQUIREDINPUT REQUIRED|W Pٳz6&w~PٳD:G@5 @wx@Ls@='@8T@ ~r@r@ ~@L @}V}@:s@BA> @Dp@ 0@qh:@rhwh &  & & & & & f& Ε   & & && && f& Ε <`r&='*Dp.:G ~ DL JrRLs\L fA> jDpn:s ~r zL ~L v|  << & & & & & f& Ε &f  8L L }V}$r @DpDwxb5 f8TW Pٳz6&fPٳDs@:G@='@$9Y@ ~@@$9΅@Dp@ 0rhRyh  w ѰB   f& & & & && f& Ε `  ,& & & & f& f& Ε.<='@DpD:G ~ x='|DpH| f& &  ׭W1 ":G ~ $s&$9΅,$9YW Pٳz6&<PٳD5!@='H)x@G]\@i{@A> H($@DpHDb@ NT Hz>PHLsH >dH>rH SHL H :BxH>8H>HJHKօH gHLyHK<}H .LIST;; DEFINE THE QIO FUNCTION CODES;IO.XTM='B'<31*400> ; TRANSMITIO.XRC='B'<32*400> ; RECEIVE!IO.XOP='B'<33*400> ; OPEN A LINEIO.XTR='B'<34*400> ; TERMINATE IO.XIN='B'<35*400> ; INITIALISEIO.XTL='B'<36*400> ; CONTROL%IO.XCH='B'<37*400> ; CHARACTERISTICS;; DEFINE SUBFUNCTION CODES;; IO.XTR SUBFUNCTIONS;'XF.STP='B'10 ; STOP ONLY, NO DEASSIGN6XF.STD='B'200 ; STOP & DISABLE, CLOSE LUN & DEASSIGN;; IO.XTL SUBFUNCTIONSA; XF.ON='B'0 ; TURN A LINE-ID ON#XF.OFF='B'10 ; TURN A LINE-ID OFFE#XF.REA='B'20 ; REASSIGN A LINE-IDT!XF.ASS='B'30 ; ASSIGN A LINE-IDO#XF.DEA='B'40 ; DEASSIGN A LINE-IDX;'; IO.XCH SUBFUNCTIONS;O,XF.SMC='B'0 ; SET MULTIPLE CHARACTERISTICS-XF.GMC='B'10 ; GET MULTIPLE CHARACTERISTICSE;T ; DEFINE COMPOUND FUNCTION CODES;&IO.XSP='B'IO.XTL!XF.OFF ; STOP A LINE&IO.XST='B'IO.XTL!XF.ON ; START A LINE"IO.XHG='B'IO.XTR ; HANG UP A LINE-IO.XCL='B'IO.XTR!XF.STP!XF.STD ; CLOSE A LINEF7IO.XSC='B'IO.XCH!XF.SMC ; SET MULTIPLE CHARACTERISTICSI7IO.XGC='B'IO.XCH!XF.GMC ; GET MULTIPLE CHARACTERISTICS';0'; DEFINE MAXIMUM DLC PROTOCOL OVERHEADSD;S2PRO$OV=0 ; NO LONGER NEEDED - DEFINED TO ZERO TO7CRC$OV=0 ; RESOLVE ANY REFERENCES TO THESE SYMBOLS;;T; DEFINE DEVICE TYPE CODES6; (RETURNED IN HIGH BYTE OF I/O STATUS WORD 1 ON OPEN);X,XV.OTH='B' 000000 ; 'OTHERS' - NON-ETHERNET&XV.BRO='B' 000001 ; BROADCAST CHANNEL .IIF NB .NLISTO .ENDM DLXDF$ST .MACRO DLXBUF,LABEL,SIZE; .MCALL DLXDF$ DLXDF$T .BLKB PRO$OV' .IF NB E .SETN EXTK EXTK+(DALTBL*12.) ! Add space for direct access label tblCF .SETN EXTK EXTK+((MXEXQT+1)*4) ! Add space for XQT exit status blocksE .SETN EXTK EXTK+((MXSUBR+1)*10) ! Add space for GOSUB nesting framesAE .SETN EXTK EXTK+((MXMAXD+1)*60) ! Add space for nested command filesnD .SETN EXTK EXTK+((MXMAXD-1)*32) ! Add space for file context blocksG .SETN EXTK EXTK+((MXSTRG+2)+(2*(MXSTRG+4))+(MXSTRG+0)) ! Add space forA!.; ! ...scratch bufs!, .SETN EXTK EXTK+EXTBUF ! Add space for FMSB .SETN EXTK EXTK+((3*6)+MXSTRG) ! Add space for other startup reqsB .SETN EXTK (EXTK+77)&177700 ! Round up to 32. word block boundary& .SETN EXTK EXTK/2 ! Convert to words.; Compute number of LUNs. .SETN LUNCTR 6.+DATFIL6.; Create ICMBLD.CMD.  .OPEN '$CL'ICM'$TYP1'BLD.CMD .DATA ;)4 .DATA ; TKB .CMD file for ICP variant "ICM'$TYP2'" .DATA ; '$COM''.IFF $FCSTK .DATA ; linking to '$RSLIB'o2 .DATA ; created by '$BLDID' at '' '- .ERROR ;EXPRESSIONS NOT EQUAL .ENDM l;; CALL SUBROUTINEC;: .MACRO CALL SUBR ARGC .IF IDN <$INTSV>, JSR R5,$INTSV .WORD ^C&PR7 .IFF* .IF IDN <$SAVNR>, JSR R5,$SAVNR .IFFo .IF IDN <$SWSTK>, EMT 376 .WORD ARG .IFFi JSR PC,SUBR .ENDC .ENDC .ENDC .ENDM;*!; CALL AND00I55U54f4A12 RETURN FROM SUBROUTINED;O .MACRO CALLR SUBR JMP SUBRC .ENDM;; CRASH SYSTEM;F .MACRO CRASHL IOT .ENDM; ; SUPERVISOR MODE SUPPORT MACROS;- .MACRO MFPD$ XE .IF DF S$$LIB!U$$DASM MFPD X .IFFS MFPI XC .ENDC .ENDM .MACRO MTPD$ XF .IF DF S$$LIB!U$$DASJ MTPD XT .IFFO MTPI X> .ENDC .ENDM;N*; DIRECTIVE REGISTER SAVE AND SET PRIORITY;I .MACRO DIRSV$ JSR R5,$DIRSV .ENDM;i; SET DIRECTIVE STATUS;N .MACRO DRSTS VALUE TRAP VALUER .ENDM;B;; INTERRUPT SAVE GENERATION MACRO FOR ERROR LOGGING DEVICES;R ) .MACRO INTSE$ DEV,PRI,NCTRLR,PSWSV,UCBSV $'DEV'INT::V .IF NDF LD$'DEV JSR R5,$INTSE .WORD ^C&PR7 .ENDC GTUCB$ UCBSV,NCTRLR,DEV+ MOV U.SCB(R5),R4 ;;;GET OWNERS SCB ADDRESSF .IF DF VC$'DEV'4 BIC #S2.ACT,S.VST2(R4) ;;;INDICATE I/O IS FINISHED RST21=.-2V* MOV S.VKRB(R4),R4 ;;;RETRIEVE KRB ADDRESS RKRB1=.-2J .IFFD3 BIC #S2.ACT,S.ST2(R4) ;;;INDICATE I/O IS FINISHEDA) MOV S.KRB(R4),R4 ;;;RETRIEVE KRB ADDRESSB .ENDC/ MOVB K.CON(R4),R4 ;;;RETRIEVE CONTROLLER INDEXI .ENDM ;A9; INTERRUPT SAVE GENERATION FOR NON-ERROR LOGGING DEVICESN;L) .MACRO INTSV$ DEV,PRI,NCTRLR,PSWSV,UCBSV. .IF NDF LD$'DEV JSR R5,$INTSV .WORD ^C&PR7 .ENDC GTUCB$ UCBSV,NCTRLR,DEV .ENDM;25; GENERATE CODE TO LOAD UCB ADDRESS INTO R5 -- CALLED-0; ONLY BY INTSE$, INTSV$, AND TTSET$ (IN TTDRV).;B .MACRO GTUCB$ UCBSV,NCTRLR,DEVR .IF NB / .IF GT NCTRLR-1 MOV UCBSV(R4),R5R .IFF MOV UCBSV,R5. .ENDC .IFFO .IF DF LD$'DEVE3 MOV 'DEV'CTB,R5 ;;;GET ADDRESS OF KRB TABLE IN CTBA# ADD R4,R5 ;;;ADD CONTROLLER INDEXE) MOV (R5),R5 ;;;GET KRB ADDRESS FROM CTB, .IFFC1 MOV $'DEV'CTB(R4),R5 ;;;GET KRB ADDRESS FROM CTBR .ENDC0 MOV K.OWN(R5),R5 ;;;RETRIEVE OWNERS UCB ADDRESS .ENDC .ENDM L  ;R5; GET I/O PACKET MACRO -- AUTOMATE UNIT DETERMINATIONT;$ N( .MACRO GTPKT$ DEV,NCTRLR,ADDR,UCBSV,SUC .IF DF VC$'DEV' CALL @GTPKT .IFFR CALL $GTPKT .ENDC .IF B U BCC 65535$N RETURNO65535$:  .IFFE BCS ADDR' .ENDC .IF B  $$$=0 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN ,

$$$=1 .IF B .IF EQ $$$/ MOV R5,S.OWN(R4)U .ENDC .ENDC .IFFO .IF GT NCTRLR-1 MOV R5,UCBSV(R3), .IFFB MOV R5,UCBSV  .ENDC .ENDC .ENDM F  L;G+; GENERATE THE DEVICE DISPATCH TABLE -- DDTR;R 1 .MACRO DDT$ DEV,NCTRLR,INY,INX,UCBSV,NEW,BUF,OPT> .IF NB  .WORD 'DEV'CHK$ .ENDC .IF NB > .WORD 'DEV'DEA  .IFFD .IF NB , .WORD 1 ;ENTRY SHOULD NOT BE USED - CRASH .ENDC .ENDC .ENABL LSB1 .IF B $'DEV'TBL::.WORD DEV'INI .IFFD$'DEV'TBL::.WORD DEV'INX .ENDC .WORD DEV'CAN .WORD DEV'OUT .IF B .WORD 65533$R .WORD 0 .WORD 65531$. .IFFM .WORD DEV'PWF .WORD DEV'KRB .WORD DEV'UCB .ENDC .IF DIF ,P .ASCII /DEV/D .IF B  .WORD $'DEV'INT .IFF, .IRP X,U .WORD $'DEV''XO .ENDM .ENDC .WORD 0 .IF DF LD$'DEVF'DEV'CTB: .WORD 0  .IFFD $$$=0 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IF EQ $$$N'DEV'CTB: .WORD $'DEV'CTBE .IFFO'DEV'CTB: .WORD $RHCTB .ENDC .ENDC .ENDC .IF DF LD$'DEVO$'DEV'TBE::.WORD 0 .ENDC .IF NB <UCBSV: .BLKW NCTRLR  .ENDC .IF B 65531$: BITB #UC.PWF,U.CTL(R5) BEQ 65532$O65533$: BCS 65532$ JMP DEV'PWF65532$: RETURN .ENDC .DSABL LSBR .ENDM;$; PROCESSOR STATUS READ/WRITE1;. .MACRO MFPS DST MOVB @#PS,DST .ENDM .MACRO MTPS SRC .IF IDN <#0>,. CLRB @#PS .IFF$ MOVB SRC,@#PS .ENDC .ENDM . E;$'; MULTIPROCESSOR LOCK AND UNLOCK MACROSD;C  R# .MACRO LOCK$ ADDR,TYPE,?LAB1,?LAB2F$$$=0' .IF IDN ,$$$=1C .IF DF M$$PRO00I555>57i:)* MOV #'ADDR,-(SP)T CALL $MLOCK .ENDC .ENDC $ .IF IDN ,$$$=16 .IF DF M$$PROLAB1: ASRB ADDRD BCC LAB13 CACHE$ BYPASS .IF DF L$$DBG .NTYPE TMP,ADDR .IF EQ TMP-67 TSTB ADDR+1 .IFF .IF EQ TMP&70-10M TSTB 1'ADDR .IFF .IF EQ TMP&70-60. TSTB 1+ADDR .IFFC1 .ERROR ;INCORRECT ADDRESSING MODE FOR LOCK BLOCK. .ENDC .ENDC .ENDC BMI LAB2  CRASHLAB2: .IF EQ TMP-67 MOVB $PROCN,ADDR+1L .IFFB .IF EQ TMP&70-10N MOVB $PROCN,1'ADDRC .IFFD .IF EQ TMP&70-60D MOVB $PROCN,1+ADDRK .IFFC+ .ERROR ;INCORRECT ADDRESSING MODE IN LOCK$ .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC4 .IIF EQ $$$ .ERROR ;NOT SPIN OR WAIT IN LOCK$ MACRO .ENDM T  .MACRO ULOCK$ ADDR,TYPE,?LAB1 .IF DF M$$PRO .IF IDN , MOV #'ADDR,-(SP) CALL $MULCK .ENDC .IF IDN , .IF DF L$$DBG .NTYPE TMP,ADDR .IF EQ TMP-67 CMPB $PROCN,ADDR+1E .IFF7 .IF EQ TMP&70-10+ CMPB $PROCN,1'ADDRM .IFFN .IF EQ TMP&70-60D CMPB $PROCN,1+ADDRM .IFFD, .ERROR ;INCORRECT ADDRESSING MODE IN ULOCK$ .ENDC .ENDC .ENDC BEQ LAB CRASHLAB: .IF EQ TMP-67 COMB ADDR+1 .IFF  .IF EQ TMP&70-10S COMB 1'ADDR .IFFM .IF EQ TMP&70-60 COMB 1+ADDR .IFF,, .ERROR ;INCORRECT ADDRESSING MODE IN ULOCK$ .ENDC .ENDC .ENDC .ENDC CACHE$ RESTOR MOVB #1,ADDR, .ENDC .ENDC .ENDM T  .MACRO LCKDF$ TYPE- .IF IDN , .BYTE 1 .BYTE -1& .ENDC .IF IDN , .BYTE 1 .BYTE -16 .BYTE 1 .BYTE -1D .WORD 0 .ENDC .ENDM T D%LK.SPN=2 ;LENGTH OF SPIN LOCK BLOCK&LK.WAT=10 ;LENGTH OF WAIT LOCK BLOCK - ; !; DEFINITIONS FOR CACHE OPERATION;M ' .IF DF P$$D70 & M$$PRO& 6$FLUSH=1*400 ;CACHE FLUSH OPERATION&BYPASS=2*400 ;CACHE BYPASS OPERATION . .ENDC C . C;C; MACRO FOR CACHE OPERATION;N  .MACRO CACHE$ ARG,ARG2. .IF DF P$$D70 & M$$PROI < .IF IDN ,. BIC #BYPASS,@$MPCSR+6 .ENDC W .IF IDN ,6 BIS #BYPASS,@$MPCSR+6 .ENDC . .IF IDN , BIS #FLUSH,@$MPCSR+6N .ENDC  .IF IDN ,F MOV @$MPCSR+6,-(SP) BIC #^C,(SP)  .IF DIF , BIC (SP),@$MPCSR+6M .IFF BIS #BYPASS,@$MPCSR+6 .ENDC .ENDC Y .IF IDN ,S BIC #BYPASS,@$MPCSR+6 BIS (SP)+,@$MPCSR+6 .ENDC  .ENDC .ENDM  A;A; SAVE NONVOLATILE REGISTERS;M .MACRO SAVNRI JSR R5,$SAVNR .ENDM;A; STATE SWITCHING MACRO;F .MACRO SWSTK$ ARG CALL $SWSTK,ARG .ENDM;'; TALLY A FIELD IN SYSTEM ACCOUNT BLOCK$;S .MACRO TALLY$ OFF,CND,PROCR .IF DF X$$ACC&A$$CNT&CNDS MOV R0,-(SP)S MOV #140002+OFF,R0R .IF IDN ,, CALL $ACINP .IFF ; IDN , CALL $ACINC .ENDC ; IDN ,N .ENDC ; DF X$$ACC&A$$CNT&CNDB .ENDM;R5; CPR SEND MACRO -- SEND A PACKET TO CPRAME OR CPRSYSN;A$ .MACRO CPSEN$ OPCODE,BUF,LEN,SHRBAS .MCALL MOV$ MOV$ SHRBAS MOV$ LENT MOV$ BUF MOV$ OPCODE .IF DF VC$CPR S CALL @CPSEN .IFF CALL $CPSEN .ENDC ;VC$CPR .ENDM .IIF NDF S$$YDF , .LISTCR .IF DF X$$ACC&A$$CNT&CNDS MOV R0,-(SP)S MOV #140002+OFF,R0R .IF IDN ,, CALL $ACINP .IFF ; IDN , CALL $ACINC .ENDC ; IDN ,N .ENDC ; DF X$$ACC&A$$CNT&CNDB .ENDM;R5; CPR SEND MACRO -- SEND A PACKET TO CPRAME OR CPRSYSN;A$ .MACRO CPSEN$ OPCODE,BUF,LEN,SHRBAS .MCALL MOV$ MOV$ SHRBAS MOV$ LENT MOV$ BUF MOV$ OPCODE .IF DF VC$CPR S CALL @C.;:.; CATCH ALL COMMAND FILE TO TAKE THE USER'S TYPED COMMAND5.; AND IF --NO PARAMETERS-- ARE SPECIFIED, ATTEMPT TO2 .; INSTALL A COPY FROM ..; .ENABLE SUBSTITUTION. .ENABLE QUIET.;8.; SEE IF A FILE OF THE SAME NAME EXISTS IN LB:.; .SETS TASK P1[1:3]' .TEST TASKl .IFF .GOTO SORRY. .SETS FILE "LB:"+"''"+"'TASK'"+".TSK" .TESTFILE 'FILE'A .IF = 1 .GOTO GOTONE.;.; TRY FULL NAME VERSION.; .TEST P1s .IF LT 9. .GOTO TSTu .DI005d5m555512SABLE QUIETT;L); 'p1' is not a valid command or filenameA; .EXIT 2 P.TST:R .SETS TASK P1. .SETS FILE "LB:"+"''"+"'TASK'"+".TSK" .TESTFILE 'FILE'T .IF <> 1 .GOTO SORRY.;4.; ATTEMPT TO INSTALL THAT TASK FOR USE BY THIS USER.;.GOTONE: .IFF .GOTO NOPRV  .TESTFILE TI: .TEST $ .SETS TTNUMS [3:-1] .SETN TTNUM 'TTNUMS'<( .SETS NAMET [1:1]+"'TTNUM%ZR2'" .DISABLE QUIET; .; Installing 'FILE' for you as TASK=...'NAMET';E  .ENABLE QUIET INS 'FILE'/TASK=...'NAMET' .IF <> 1 .GOTO NOINS5 .XQT 'NAMET' 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8' 'P9'+ REM ...'NAMET'E .WAIT 'NAMET'.;&.; NOW EXIT WITH THE TASKS EXIT STATUS.;  .EXIT ''Y I.;.; ERROR MESSAGES..;.NOPRV:  .DISABLE QUIETE .SETS P1 P1[1:3]<; %; Must be privileged to install tasks];. N .EXIT 2 S .NOINS: N .DISABLE QUIET] .SETS P1 P1[1:3]I; ; Unable to install 'P1';I  .EXIT 2 S.SORRY:  .DISABLE QUIETB .SETS P1 P1[1:3]L; %; Sorry, none of the following exist:N;S; 'P1' as an installed task'; SY:[LOGINUIC]'P1'.CMD+; LB:[LIBRARYUIC]'P1'.CMD'; SY:[LOGINUIC]CATCHALL.CMDT; LB:[LIBRARYUIC]'P1'.TSK ;.-; If 'P1' is a misspelling please retype it, ;; otherwise just press return.;S  .DISABLE DISPLAYu .ENABLE QUIET .ASKS ZZ > ; 'P1' should be?  .IF ZZ = "" .EXIT 2- 'ZZ' 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8' 'P9'nable to install 'P1';I  .EXIT 2 S.SORzy:~̀D 0H NHHyH "H XHpHp{H{H`|H HHzHH'H pH"ZH$2xxH&;F H(;F H*;TXuH,;TuH.;TuH0 H2YMH<|H;F3 Hz;F4 H^d2H^dKH4 H@HJ4HJ HJHJHJGHJVTHJYTHJ\THJ:dHJwHBJKwHJwHDJzHJHCTHF۪H۪H۪Hzy:~̀D 0H NHHyH "H XHpHp{H{H`|H HHzHH'H pH"ZH$2xxH&;F H(;F H*;TXuH,;TuH.;TuH0 H2uHXݪHXYMHYMH<|Hz;F3 H;F4 H^d2H^dKH4 H@HJ4HJ HJHJHJGHJVTHJYTHJ\THJ:dHJJwHJKwHJwHDJzHJHCTHF۪H۪H۪Hzy:~̀D 0H NHHyH "H XHpHp{H{H`|H HHzHH'H pH"ZH$2xxH&;F H(;F H*;TXuH,;TuH.;TuH0 H2YMH<|H;F3 Hz;F4 H^d2H^dKH4 H@HJ4HJ HJHJHJGHJVTHJYTHJ\THJ:dHJwHBJKwHJwHDJzHJHCTHF۪H۪H۪Hzy:~̀D 0H NHHyH "H XHpHp{H{H`|H HHzHH'H pH"ZH$2xxH&;F H(;F H*;TXuH,;TuH.;TuH0 H2uHݪHYMH57i:)*z=uN(Hw=ur @GhR~hHwhyh dwhyhyhyhh49hN93h`z;EMh;OMhc%h~c_hCzhӪzhC+dhCdhEHhLEHh:EHh@EHhNEHhF+dhJ|hzݩ[}h2کGhh8^h h.Dqh}h8]fhDhfvh$ Wh .hv~hh<̪a h zh ZXh wh " hVhshJshBshFsh8shh;PMh(C8hC29h^ DZhzDZhaehFZh,Pdh.h7wh`@.hb @R~hn@S~h@hɪhhHɪhhB.h7xhV@xh4zyh`"hn Vhsh4}hhH hJl hll hlLhYT}hTY}hVhWhNhzOh`ThC{QhCWThh"©%h©,`h©sh,#h0 hުEhȫLqhGh Gh<8hPzëKqhZGh$9΅I:sI:+I :I:2I[I,DbIDbIDbIDMwIG]\IG\IG\IzJIJ$IJE$IJm$IeOIePIe-PIi5uIi{Ii{Ii{IpŜIsI&I]\Iz\I\II©#Iݩ݁IݩIݩ-IӪII($I(E$I(m$I(XI,0zI*R'IzU݁IUIU-I IOIxQH6'H4HTzhPHKyH +{P}HHDHD~Hl){HcyHX(H^DHת3HF~H-HtH2H$zʫyH`eH:WHrH|dH*}H2{^H ߅H\qH:@H yHn(HLdr!HiTtHh;Hz)XH(e8HbE[(H2XHJGH HdCyHl8YHj}HdHEH DLH2HXe7H`kBMH=THzH\}HP\HdL H먃2HdӪH|ӪH~ąHKQHHDHʫH"ȫbTHHH|pHHzHdyH‹H(9LHrHt6HR3{H$~H1CTHPT.Hv5sHH@e H.keH:Hz3{(H&:^Hre Hz}H5sHdyH@HUTHW^HtO NHH<H`H0(HJ^Hzv:HȫTHvH*oH6EdHeH>G gH?!HeHSHSHHѫWH;F3 H먓HnzJHR""H2JYTHJ;dHFH.HTz}HZHJ4HJ:dH먺3HfʫIHZCjH:3H3HzHJVTHFsHJ\THHHHlh.H HjN~HѫWHHp7&HfTTHt^H eKyHzeTH*HeZHѫDLH~>`H0;F5 Hd4FH HlJbTHer H;F4 HMHr;F. HC H*rHvzrHx3RHZ7fHdrHlrH@rHnH2̫pEHp̫r!Hl̫xQ0055m555512H,HT=HHkZH9!NH*zl.H468HVxdH4H&rHpyfHDzH4:HHrHrHrhHirH0H$sH̫3RHz.sH ȩsH66sH";sH=sHcJXHRcTXHTO_Hr!mH ɫqH+3HN%{QHczdHVfH4HhzHnѫH*}H ; HJt H8sH$7HSHFrp H; H,{2HBHBߩ^(HJ HGHzLTHGHJHcLHPQ5HbTH{8HAyHGH.}H>JHM:HeĊH{Hd H"zʫTH dH$|rH|rHHJeH; HfH}H@dėH ̫Hf2{HqHrR~Hz"HzF~HʫL HXFHwHd^H&mrHPT`HH0{GHT[HdfH(h:H*HvwRH:DHzhHCxQH}H©FH; H}#H *}HxHFCEH|H<HdpHDHx̫SHdqHzLHʫHɪ+gHEkH HCHʫt H~H&H@=KHzdHD8Hr#HRF^HH"z{jeH̫bTH H:8rH4RX^H;hH{xeHXrHL:dH|KHV}HDrHVrHWEH(XEHzfHHtHH sHvH۪H۪H74FHH̫2HhyHJѫjHWrH۪Hz HW|qHDyHۉHz{neHⰀHVWqH1HTCH2aH*H HrH5 HBʫfH^z5wHPHwH0 H HEmH;H̫dHrH HDFH}HH,ɪnH\K HH z̫Hj/ H>. H<4 H@HHϫyH,bHHOqHpتYeH~HxD:HCTHDmHz;dH7FHz H;Hq'MH< H<v?THتHتH7FHDLyH~q(MH>تHd{H=_MHتHѫ,xHz HتHتeHJ HѫBxHتމH$u~HewMHJHSH,tHDmH|ϫH(뫽HʫWHNzdrH˪sHzeeHѫHiHeMHlZH:u~H#{H 髲HH{fH$(H5? H뫎Hz쩔HBH HϫH&iHHNHHتfHwH74HbeMHhH8hH""HFzH먫HȫOHxr(MHD=~HH"hHHwHuHͫdH$r'MHBhMHK(H@j{8HȫQH|zѫxHߩ0 H8JwMHȫPHzKqH>MHHR[MHȫ6H Hȫ6Hȫ6HsHriyHCHzȫ6H NHp4HZȫ6HJHȫ6Hh:H}eH ȫ6HHh:HiyH=&HuH=&H,zh:HAqHHd'HjHh:Hȫ6HdH>6}HXHK5HBMsHDȫ6HH ȫ6HzK Hȫn7H0uH4ȫ6H NHc7HZȫ6HȫG7Hȫ6HdHdHHq~ZHȫ 7H qZH8HzHȫ#7HZH~ȫ7HHDȫO7H.̫+gHt='H.=gHȫ6H5H='HȫF7HRB9HȫH7H z먗HbȫI7H"BxH&qzZHȫ6HLHȫN7H,̫g'Hnȫ6Hȫ$7Hv""Hȫ7H ȫ"7HgHnȫ!7HzR~H:dHتKH^3HR9Hȫ6HAHuH2+ HLeH̫sHvϫxdHxH0{CyHCHzϫdH* 3H>H.iBxH2seH~ϫpH|ݩWHȫ7H^&{8rH;FHȫ7HV;FHGRHȫ7Hf{AyHzȫ7HdxGHȫ7HXȫ7HbHȫ7H\2HxGHȫ7H`HLHHJwHHȫ7HZz""H2vHHhJKwHsH,HHPN^KHKyH@H8@wHHBAsHa'H:dHzT|HsHR,:HeHdvQHت5MHxHrHuLHdHPxH,xH0xHj7MHlHzYHDxH.L NH`H{Hhت4MHHHJwHD*}HjQH4lH,cHgH,CTHFHHHzs-gH.RR;HDrHHHFcHLCKH6HRSHcHNHRHT6HH?Htt!HzkMHN@tHHV6H\C^KH8HXH;HKdHZH6H4DmH*HJ6HZ6H^qZHzHmHtHQNHȫ'7Hȫ%7HȫL7H(ȫ6HȫK7H&ȫ&7HKH&0055557i:)*ȫ6HȫJ7H$ȫM7H*ȫ7Hh  YHDxH.L NH`H{Hhت4MHHHJwHD*}HjQH4lH,cHgH,CTHFHHHzs-gH.RR;HDrHHHFcHLCKH6HRSHcHNHRHT6HH?Htt!HzkMHN@tHHV6H\C^KH8HXH;HKdHZH6H4DmH*HJ6HZ6H^qZHzHmHtHQNHȫ'7Hȫ%7HȫL7H(ȫ6HȫK7H&ȫ&7HKH&zw0DH#KHe HiHݪKHYMH4|HHKHbhLHnhHHrh !H "ewHL:dH;H Hzy:tHD2xxHHyH HH}HʣdHg'HYMHf|HHiHݪKHʣ#KHf.y`'HzyHyHtyKHdyHKH^4W^HtS""HS%HSxdH4HÅHLHHv'MH~(MHzHr'MHz(MH|կHBxHpxHFCTHk Hxt:HwHа2gHаHt'H pEHn2Hz2hH2H{[;Hh{\;Hj\;HlHcsHRdFyH\k:HXk[;HVmfH]r0HNr9HPvHZx HTzzH,zKH\ĩ 8^H dH H H qH <}H H Hd@yH l8YHmxxH nHHpHzuHuHuXHvHv HvHvy:HvGHvC[HvaHvgHvv~HvmHvH *;Hz 3HH :2HsE3 H6F3 H6F4 H6FH6FH;F3 H;F4 H#I_H#I(sH#IyH&I8rH(IHgH)I8^Hz/Ip&H/IH0IqH0IrH3IH5IrH 6IHcOLHdOHiOHkOpHlO8YHnOHHnOHHsOHzU(H U(H U8YHUTHUTHUTHUTHfHfHah HbhLHch, HchwHdhzdHhhH"zhhHih8^H#lh8YHmhH nhHHohHphqHphrHrh !H rhQHrhrH$shU`H0CH2Cr HCy H4C HC H6C^KH8CxQHD:HDrHzDsH<DyHH/HH HH&H>HHHHHwHJ4HJt HJ;dHJÅH8JLH:K(H@K5HBzMsHDN~HN^KHP\HayHFbHHcL HJcLHPc7HZeHeHe Her HeH\eH^ze7H`e8HbeHeMHeeHeWwHdewHeKyHeHeZHisHfiTtHhl8YHjp'MHp(MHzqHlq'MH<q(MH>qZHrH@rHvrHxr'MHBr(MHDr!mH rR~HzrH|seH~vwRHv?THz*HyHHFKqHR~HhHrHsH.sH 6sH"8sH$;sH=sHBxH&WHz)XH(2XHT[HHxH,H8rH4VrHWrHXrHfHf005D5555512HfHݩWHߩ^(HzeH:|H<eH>KyH@쩔HBHDCTHF+ HL+3HN.`H4:HH5? H68HV6H6HZz6H6H\6H^6ԀH`6߀H74Hb7fHd7H7&Hf74FH7FH7FH7HJ H2gHzHRGHOqHpHąH߅Hɪ+gHتHتHتHتHتHت4MHت5MHتVNHzتYeHتeHتfHتHتHتމHZHHLHRF^HT|HTHiyHiyHktLHzkBMHkZHkeHn`HqzZHq~ZHqZHuHuHxGHxGHzTHzTHzTH{jeHz{neH{xeH{fH}H}#H |KH[MHeMHhMHQNHSHSHmHmHHzSH:dHfHHH@wH2H$4H&H.H0QH4}H>}H@}HHtzH HH &H&HBt'HL'H'HvHtHʫL HXʫt H~ʫIHZʫHʫ,H\zʫTH ʫWHNʫfH^ʫyH`ʫHbʫ׃HdʫH"̫Hf̫pEHp̫xQH̫SH̫dHr̫+gHt̫sHvͫdH$zϫH&ϫH(ϫyH, H髲Hz}H뫽HHhHPHRGHGH.GH:dHV}Hz}HwH0HxdHfHqH,tHuH2uH4xQH65H?tNHhPHh:Hh:H*h:Hh:HlZH: 3H>oMH<&HBt'HL'H'HvHtHʫL HXʫt H~ʫIHZʫHʫ,H\z|,t2 QY Ajb?TISYSYSYOVvXjvRdtXX)LB:[1,6]ACNTRN.SYS*Hjlpx|",0Djtv".`v~ڢ+wwwlwpw\0vf h5nf R x@m|\ȕ 8pVw,f5 f *DIAG* *WARN* *ERROR* *FATAL* I/ODSW???=Ԥ -- DE-ffEĥЕЕڤ  Е Е ?d (^ P Е.Е %  `-h7be~ A & & &  && & & Ε )Fe 00D55557i:)*"Z f&P&N&L&J&H&^&e\&e*+   F ߦp abneɋee R *$ ߥ PR >2ߊ5 ,ߊ5E4ߊ5?E45 @ e?Wt E54mpEfߥ)5^/ T?B Bm: _2v2 m d`5 6* *T .f~?~! ~4/U ( @U@m~tߥ.W0 2PR * *E@Dj6R&,(U  &zSY f   N f v~41& F b5bΥ: Υ ΥΥ/Υ   X~ ^  mЪ05$   Q3+ЪA  톃<" 2-BЪt"rr l v< 3 jW s: 3cVgD8bx˞^xʎɣ6᫾0TovϑO$l`rʖʶʲVǬUSystem command handling errorAccounting not supported in systemPrivilege violationAccounting not activeUndefined message number %D. at PC %P Directive error. $DSW=%P PC is just before %P FCS %3A error code = %B %Nfile: %2A%O:[%3A,%3A]%X ABDEFIMNOPQRSTUXYZ<>-1<HBnyzJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC<JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC w   ť ť 0B Aa & & @( f  e ee e w && D¥%  B&ХVA < C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf   & e 6& e /& e*AHŀ ȕ Е Е Е & e & e Е A %& eX A F Е A EA EЕ A A   $Е.  AЕ;    &f& v w ' UD$BA &( U BQ Е* w * D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   Bw &fe&  w &ff=elC    5p .  d     A &@d &@ &m M M` M`5u   @ @ e@ M`u 5`B3W @ `u  #;eu o eA ZeS S S B DCeS S S A 2eS S S B ee `@    e  T T T T H1CdT T L $)dL t dL d  '&1 ƻ: һl ޻Z h ܽ ؼ5ew , Bv     5Bwr 00D55555512DcX5  5 2  UE  XE U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&f  5 ߥ& *  + 23E Ew    Е-   0@A XW e`fÊ    E &ff 5%& w &Ba +- ʥ# . U 0   b   `     w eE D` bl lrw D  B eE"s    s-  Csl&   `@ ` B   & A @     ļƻļ һļ ޻ļT*ļ 1ļ\@ļƻAdE|&G|2I|>JTJ2Mp>VNp >bOpn>JQ,PbzS,bT,bnV2X2>Y| ^|l $SET SHOWSTARTSTOP ACCOUNTINGNOYESjz_Mܼ 5 pE ( D ' f rf dw*f  Tf! Ff" 8f# *f$  CRASH_REASON EXTEND_SIZEFILE POOL_RESERVE SCAN_RATESTATISTICS_SCANSYSTEM_STATISTICSTASK4^dPԿѥ/ d>8Ȣ ~  DE~U(,ɥ ѥ ֽ ѥ: X5VUNE@wwpww5*U"t8 ɥ ɥ  :707P@ ¥ ¥ t8 5U fU 8 5E 8E@85@U@ $UvEn5\ U@\5J5 LU: w5.wU"@ &¥ ¥ ¥M¥SwWp<wt8¥  5 wU  vw48CLEAN_UP MAINTENANCEOTHERREBOOTSCHEDULED_SHUTDOWNSHUTUPREASON FOR SHUTDOWN? Lѥ/5 2ѥ  *5(#B Hx 0PU7 wPw0w EXTEND_SIZEFILE SCAN_RATESTATISTICS_SCANTASK OPTIONS? 4Կlѥ c n6 ~7 HLɥ/ ѥ  IB Rd Oѥ:< ɥ ѥ 25@U@2e5@5 5jUbw5XEPw5UEwww DATATRIEVEDTR INFORMATIONTRANSACTION_FILE ATTRIBUTE? OUTPUT FILE? ѥ X BUɥ/ ѥ  JB  Bie 7[ɥ: b7JF7LB7N>7P>7R:7 &  !ѥ  B 07  ɥ wFw r7  5w 2 4 Tw z2 Bw 7 ɥ ѥ  00D55557i:)*@ɥ 7 nއ /:,+- 7 ɥ/ fD |2wfe ^S   P   `E   ~  x` Eew &ȋPw P&&fļ r.tt Z ܼŴ B ļ 0   &% &)f@ɥ ɥ ȕ   ɥ!ɥ "ɥ ɥaɥz P  6  ȕ   ,Е Illegal command or parameterCommand or parameter ambiguousSyntax errorTerminal I/O errorRepeated or contradictory parameterRequired parameter missingValue out of rangeSYSLOG not active2w5lw  wƼr 7 $lhfb^`\B><~8z4x6v2trW,UwT UwJW, Uw 2W"U\ZTff t "e \ |8 w:e fM ^fU P pp f ȕ ƨ$p (f N#  eBB 99 f p  ƨ&& 8#-&& FFf  8  RB Ee`%  D~% b  % N ƨ Pƨeq q"9q,4&& & 00  & & & & T& & N& Ε U)O  n<& ff& R& N& Ε ) *eq  f  Lf  Lf   f  r (ƨ  | Zf  F dError bit set. Cleanup before restart.Accounting not activeIllegal filenameCan't open transaction fileCan't write transaction fileCan't init new blocksCan't init new blocks. I/O error = %BCan't write attributes. I/O error = %BCan't write attributesCan't close transaction file | &| >4 T |w wwvw $0,0w 46  )0406 0 *0+1(e  %&p*w f( f)f  8   *   4 6 .e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = 0,0, f 톇,, w      .%  eB U5UU plp & NeՀ)* *) l0, *) $ )*)0,40,6 8Ae f"( UCɗ&+(e$&% **00D65555512@zZrN vH Tʚ;@B'd  ̼ ACCOUNTING DATA - 00-000-00 00:00:00CURRENT FILEUNKNOWN TRANSACTION TYPE: (5J J^ L^ P^TTT8VG\TYri FrsrȆ :rȒ 8Tȟ >rȭ Brȹr r  T8R ( < r6T r) r3 r>4C J UTY@Ra BRm6f| (ȆțrȰ.rȴ r r5@ DrHrLr PT Rh 4) <5,;NR6W H\`i r }Tȁȉǎ  6Ǖ$Rɜ (fǦ&^ȯ "ɽD 'L@4x fQxYz'  TfTT @@   T#R+ 5:TL\ <6ip*NJrȑrȚ@Ȳ@@@"r(@)@%^:^LT^d^v"~*TȎ ,TȜ &TȪ (Tȸ .T0T  T  fT& 1   &f< ge b5H fC ƨ /&  me  ы w 5 wf< ށ 5v ƨ 5fH w: B:77   v%7 f  | +̼ FCeJe ( ef  t n &ͼ ݜ ` BBle eC  Е= CCaBwB eBle eC  Е= fC DDa Ble jeC N Е= CCaД% ЕTCOД f Е:Ble eC  Е= fDDa H R Я Ble eC v Е= CAAa% % %AAE & %Е.e Bl .eC  Е= fAAaS f   w& fBe eC Е= Е[fNa Е,` Е] CweCa% B & T 5CB (efC 4 xe  ˋД &7̼`%PC&5H %  ':̼5F̼ f(̼ ̼e7wxCB > 0=ܿw,&fE&.@AC4   llC bA  e0> e  0 A@|Bl &ХTХI oХSХYХSqХT ХAХSХK Х=7 f wX wL. \) ,2%CO 5 Cmwd ,݇% /f& ؁wjf' ؁fO ؁wLmdd rw7 ()7 " p  m00D 65557i:)*7T ܇ -&2  5u u C0CC. C5 <@ԀSYz_M)!ƨ2NHpp f@ ց ȕ $# fA ց ױeBsssa(s s UB5&# 2  T\T`hm 6t.R{26 "rȍ &rș*rȪ.TȺ 0T @ I/O errorNo accounting data presentDevice specification errorTask not in memory or not activeIllegal file nameOpen errorw d(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$*tDR~Жі"і6іCXS]f"zєČũ=GTotal System StatisticsUser - Task - Accounting StartupInvalid LogonSystem Time ChangeDevice AllocationDevice DeallocationDevice MountDevice DismountPrint JobLogin - System Crash RecordDevice StatisticsReset Transaction ParametersCard Reader Spooling TransactionAccounting StartedAccounting StoppedShutdown CodeTrans File IDSeq NumDeviceStatistical Scan Rate (sec.)File Ext. SizeTime Of Last ScanScan Rate (sec)Total CPUZero CPU IntervalsTotal TasksTotal LogonsCurrent UsersCheckpointsSHF RunsDirectivesQIOSSession IDTI:AccountLogon UICLogged onLogged offBilling StoppedCPUTasks ActiveTasks RunDirectivesQIOsStatusSession IDTI:AccountCurrent UICProtection UICTask NameTask Initiation TimeTask Completion TimeCPUCPU TimelimitDirectivesQIOsTask PriorityTask Context LoadsTask CheckpointsDisk OverlaysExit StatusAbort CodeTask StatusT.ST3Accounting StartedTI:TimeNameUICOld TimeNew TimeSession IDTI:AccountTimeDeviceVol IDOwner UICACP NameVol Prot MaskStatusSession IDTI:AccountTimeJob NamePagesFiles PrintedPrinterFormsPrioritySession IDTI:AccountLogon UICTimeTime of Last ScanScan Rate (sec)Restart TimeReasonTime of Device StatisticsDeviceIO CountWords Transferred CountSoft Error LimitSoft Error CountHard Error LimitHard Error CountCylinders Crossed CountCurrent Fairness CountFairness Count LimitOld Trans File IDSeq NumOld Device NameNew Trans File IDSeq NumNew Device NameOld Scan RateNew Scan RateOld Ext. SizeNew Ext. SizeOld Statistical Scan RateNew Statistical Scan RateSession IDTI:AccountTime of JobJob NameCards ReadCard ReaderUFD TOTALVOLUME TOTALUSER IDTI:ACCOUNTTIMEDEVICEVOL IDUFDUFDS INCLUDEDBLOCKS USEDBLOCKS ALLOCATEDNUMBER OF FILESNUMBER UFDSEMPTY UFDSNUMBER ERRORSlptx|ЀЄЈЌАДЬаИМРФШ | &| >4 ޒ ު| ު ޶|00D65555512<(@@5 JLP^TV@\F:8>B 8(@<@@64 @B6~(@@.5 DHLPR4@@j @@ @  j 'L@4x  @~  "jj @@@<j@*    "( ) "*,.0&( @~ Sje& e F>52>ƨ> ,' \ e  ыw <wfN  ƨ j w B7  ~   vƼhP CCaB  Ef&C DDa e CCaД% ЕTCOДf   efDDa   e fAAaCE Cы%f% Pf@AAaS  @  @@eFPPP@~0ffNaЕ[ ` Е, Е]  7 dCCa% B& T 5fC4 l (  ` Д xjƼ X <Ƽ Ƽw<@ԀSYz_M)!ƨ2Njpp ,f@ ށ ȕ $# fA ^ށ |߱eBsssa(s s U 5#  @ j.2j"&*.0 I/O errorIllegal file nameOpen errorRȿ^: *| "&| >4  謁| 謁 | ѫC z_MdѫCSYSTEM TASKS rѫCw5w w "w7 X w7|5e wr75  hawVw XwTfff e D  fw 54$r VZLrf h( Hd N( . kƼU@ % f 5e P ? ? E@~ ؼ+)E@Zd  Rf ww e f $f f wf w ƨ Z f   J4pp f f l4ȕ P ƨ:$p f(h00D65557i:)*f & N#    eBB 99 f  | LB0:[1,6]SYSSCAN.TMP;1 SYSSCAN.TMP;2ENTER: VѫC * |$# F *qfI 4f 4- X$=B   ,($1  $ƨ L*fJ   $fK  r    *fL f  ?f9 L& & & $& & Ε & & & & <D& & Ε f: ߁ *  .Ó 1 *ƨ f5 ߁f >ƨ&& 8#-&& FFf >݁ \ޱ  RB Ee`%f  D~%f b N 6fŇ%f * ƨ tƨeq q"9q,4&& & 00  & & & & 0& & *& Ε U)O  n<& ff& .& *& Ε ) *eq  f  ہ(f  ہ(f  ہ f  ہAccounting already activeError spawning SYSLOGSYSLOG not installedError bit set. Cleanup before restart.Secondary pool allocation failureBad SYSLOG queueAccounting system not startedSYSLOG exit with status = %DCan't close transaction fileIllegal filenameCan't open transaction fileon scan file openCopying scan file to trans fileOn scan file closeOn scan file deleteEnter reason for the crash (Maximum 60. characters)Terminal I/O errorCannot write crash transactionCan't write transaction fileCan't init new blocksCan't init new blocks. I/O error = %BCan't write attributes. I/O error = %BCan't write attributes | &| >4 잼T 쪼| 춼|w * 8B pB  p0 B w www $0,0wl 446 Z )0406 0 * L f 0&* 2***eB  8 ( $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* v*5ND  F<  EU  " 0+1(e  %&p*w f( f)f f 8   * : T 4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = 0,0, f 톇,, w      .%  eB U5UU plp & NeՀ)* *) l0, *) $ )00D$65555512*)0,40,6 Mw*   f  >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  wV1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce ^   &*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` p*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@)7 w 5f  5f3 w j5 fU@ 5 ? ? Am~A LAmp E* *rA  5 Ez 5Am*A . PAm 6  " 2E@ &2  &  7  ʼԼwwAccounting did not crashAccounting had a fatal error, must be cleaned up n8e2 **8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F141612epl2l0pw (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  P1 >e6p 4 .8 81416  6 ~ 0 ..8em,0l0!D0e6p 4.) R&f &  e) .  e6p 4 08*wL0,0, f 톇,, w      .% 2 eB U5UU " plp & NeՀ)*,*1 U8UMw wV *) l0, *00D,65557i:)*) $ )*)0,40,6 ^B 00fep=& /e`pw=p!Օ^82e&( ۀ0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *w x )  fU %  BA `6p 4p`4 %60 446f %8 E D/D!D l0l8epl0pɥ.ɕ wf&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w Jp Vp |bw ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) N*<## |  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  P P3)/ 8#( P) @#**ff00D465555512f  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( " *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B vB  * eBe>  # #D #=0/H#@&0 # = e0   :0@e 6=#02/002# @#?@#040 6w^/!0/ l0/!p!0 .=p0p2   f J >5>Eu R  Mw4W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w f &* * 8n2 0z6 (҆6eB  8 $&w ^*(5<s1  U U@  f&" <)'&M'&&**%*%0 *&* 2*5ND  <  EU   &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w.1  %,,:4 f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  $DEe    *1  ˕03 "   ˔Ӕ ʥ7w ΁ %ҥ[֥< , (e  5 s  D wT(e( 1  `(( `  >: 5 eCe00D<65557i:)*w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce >   j*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` h*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e 4p8q  (#4=A#@)( r *O*)@#0l @# 02ȕ8 (00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ V& & de p* . eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w ) >8C 0* ) *wh*    ep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  , J *` 2C# n   D @)  6?0D)w & Pn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e X* e*wf@) *0,    ) ()% ȥ  = ȥ l 0l  Dȥ ,ȥ- 00DD6EH6555512ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ% & ,   N tw0  J DB # R f  `* VwF)0406 l0  DP5R RRR  8   **w   ~w  > ,,  *) n  =D & `p46 f 664/=  @) 0  8w 46 8 e*w &f D E/fC A ӃB f&  BeA @0 (@0 a@eA  B0 ӀAB  tӦf  JC @*)"(. = . B  E (.w *8I *=)98 eB &&  U **e *Nlv ΋*.2 Z & #!)&eP(e && >e >E p* $w)"(. t= . B  E X(.|,ZQY &[q$Y Az:TISYSYSYOVXzR~TISYSYSYOV(MHEX|X)LB:[1,6]ACNTRN.SYS*Hjlpx|",0Djtv".`v~+w w w^ wr w @f h5nf R @ml\ȕ Hpfw,f5 f *DIAG* *W00EL65557i:)*ARN* *ERROR* *FATAL* I/ODSW???= -- DE-f$fEĥЕЕ Е Е Ĥ?d d^ ZP Е.Е %  `-h7be~ A v$& & &  &$& & & Ε )Fe Z f&P&N&L&J&H  &^&e\&e*+ F ߦp abneɋee R *$ ߥ PR >2ߊ5 ,ߊ5E4ߊ5?E45 @ e?Wt E54mpEfߥ)5^/ T?B Bm: _2v2 m d`5 6* *T .f~?~! ~4/U ( @U@m~tߥ.W0 2PR * *E@Dj6R&,(U  6zSY N   6 f v41& F b5bΥ: Υ ΥΥ/Υ   X ^  m05$   Q3+A  톃<" 2-Bt"rr l v< 3 \W s:Cs&MRtÅ+Ϋ\y׷ eę >Q:4aUSystem command handling errorAccounting not supported in systemPrivilege violationAccounting not activeUndefined message number %D. at PC %P Directive error. $DSW=%P PC is just before %P FCS %3A error code = %B %Nfile: %2A%O:[%3A,%3A]%X &f& v  & & @( :f  e ee e '&1 l l l l l ¶ Ƶ lp l8 |l< t~ ll dlT \~ Tl Ll Dl <l 4l ,l $ص ~ l  d ~d `5ew , Bv     5Bw ^}~50  (r- DUt-E D  E E ܁Z~X00ET6H6555512&w E U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &ff &  m  f A N  % &[q &[q`lZZ Z~Z" ZlZ6 L L L ƵLصL굢&L.L6LFF $SET SHOWSTARTSTOP ACCOUNTINGNOYESpPz_Md 5 E  D ' f f wf  f! f" f# f$  CRASH_REASON EXTEND_SIZEFILE POOL_RESERVE SCAN_RATESTATISTICS_SCANSYSTEM_STATISTICSTASK츊ع\.ѥ/ d>Hآ   E~U(,ɥ ѥ ^ ѥ: 5VUNE@wwpww5*U"tH ɥ ɥ  J707P@ ¥ ¥ tH 5U fU H 5E HE@H*5@U@ $UE5\ U@5J5 U: w5.wU"@ ¥ ¥ ¥M¥SwWp<wtH¥  5 wU  vw4HCLEAN_UP MAINTENANCEOTHERREBOOTSCHEDULED_SHUTDOWNSHUTUPREASON FOR SHUTDOWN? Lѥ/5 2ѥ  *5(#BZ H 0PU7t lwPw0w EXTEND_SIZEFILE SCAN_RATESTATISTICS_SCANTASK OPTIONS? \.lѥ c nF ~7 Hxɥ/ ѥ  IB4 R Oѥ:< >ɥ ѥ 25@U@&e5@5X 5Uw\5Ew>5UEwww DATATRIEVEDTR INFORMATIONTRANSACTION_FILE ATTRIBUTE? OUTPUT FILE? ѥ X BUɥ/ ѥ  JB H Bie l7ɥ: b7J7L7N7P7R7 &  ѥ  B 07  ɥ wFw r7 B ,5wn 2 4 w 2 w7 ɥ ѥ  @ɥ 7 /:,+- 7 ɥ/ fD |2wfe ^S   P   `E   ~  x` Eew &^ȋPw .P&&fL r.tt Z d B L 0   &% &)f@ɥ ɥ ȕ   ɥ!ɥ "ɥ ɥaɥz P  6  ȕ   ,Е Illegal command or parameterCommand or parameter ambiguousSyntax errorTerminal I/O errorRepeated or contradictory parameterRequired parameter missingValue out of rangeSYSLOG not active00E\65557i:)*2w5w  $w$Nr J7 $lhfb^`\B><~8z4x6v2trW,UwT UwJW, Uw 2W"Uܶff t "e \  $we fM fU  L*pp f *ȕ ֨0$p (f N#  eBB 99 f   ֨&& 8#-&& FFf    RB Ee`%  D~% b  % ֻ ֨ ֨eq q"9q,4&& & 00  & & & & ܻ& & ֻ& Ε U)O  n<& ff& ڻ& ֻ& Ε ) *eq  Rf  6Իf  "Իf   f   ֨   vf   Error bit set. Cleanup before restart.Accounting not activeIllegal filenameCan't open transaction fileCan't write transaction fileCan't init new blocksCan't init new blocks. I/O error = %BCan't write attributes. I/O error = %BCan't write attributesCan't close transaction file@zZrN vH Tʚ;@B'd  T ACCOUNTING DATA - 00-000-00 00:00:00CURRENT FILEUNKNOWN TRANSACTION TYPE: (rRre5x J LP2^TVr\ F : 8' >5 BAJ U Z 2ei8q (r{ <r… r6   46  2@ B6 (rr#8.< J U5Z DhH{L P R 46ñ <6ýr2r rr  2 r200Ed6H6555512  $$ (.&7 "6E̼ 'L@4x fQxYz' L 2W[rchqw 2  2³ r½rr <r*2":K\m"~()2"2* ,$ &2 (@ .N0h  2r™  2   &f< ge b5 fC ֨ 2/&  me  ы w 5 wf< . L5v ֨ 5f w B:77  h v%7 f  | +T FCeJe ( ef  8 2 &U ݜ  BBle eC  Е= CCaBwB eBle eC  Е= fC DDa Ble jeC N Е= CCaД% ЕTCOД f DЕ:Ble eC  Е= fDDa  ȭȭ@  ~Ble eC v Е= CAAa% % %AAE & %ȭЕ.e Bl .eC  Е= fAAaS f   nwwȭ& fBe eC Е= Е[fNa Е,` Е] CweCa% B & T 5CB (efC 4  0=dw,&fE&.@AC   llC bA  e0> e  0 A@|Bl &ХTХI oХSХYХSqХT ХAХSХK Х=7 f wX wL \) ,%CO 5 CmLwd % /f& ,߁wf' ߁fO ߁wBmd r&wF7 ()7 "b   m7T -&  D5u u C0CC. C5 0<@ԀSYz_M)!֨2Nbpp f@ :݁ bȕ h$# fA ݁ &ޱeBsssa(s s UNT^5#  2r2 .2 " &!*2.B 0N Y I/O errorNo accounting data presentDevice specification errorTask not in memory or not activeIllegal file nameOpen errorw h(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA 6EAa$B b(8(Ƚ<ȽȽ64^ b(@B6(ȽȽ.5DHLPR4^Ƚ(Ƚ ȽȽ b(Ƚ(   'L@4x  b(Ƚ(" b(ȽȽȽ<Ƚ*("()("(*,.0&( b(Ƚ( Se& e Fƶ52ƶ֨ƶ \' \ e  ыw <wfN h ֨  w B7  B   vNhP CCaB  Ef&C DDa e CCaД% ЕTCOДf   efDDa Z  Pe fAAaCE Cы%f% PfȸAAaS  ȸ  \@eθPPP@~ffNaЕ[ ` 00Et6H6555512Е, Е]  7 dCCa% B& T 5fC4 0 (  ` Д xN <N NwR<@ԀSYz_M)!֨2Npp f@  ȕ $# vfA  eBsssa(s s Upv5# h b(Ƚ( .2"&*.0I/O errorIllegal file nameOpen error<JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw &fe&  w r&ff=elC    5p |  d j  \  A H&@d <&@ 0&m M M` M`5u  @ @ e@ M`u 5`BAW @ `u  #;eu o eA ZeS S S B DCeS S S A 2eS S S B ee @    e  T T T T H1CdT T L $)dL t dL d  ڸP&BRRRRr0v» ѫC z_MzdѫCSYSTEM TASKS rѫCw5w w w7 d Xw7|V5:e 4wr75  hawVw XwT@>8fff e D  fw5$r rr ( d ( kNVU@P % Lr 5,e 8P *? J? PE@ `+)E@d z 6w2w e f f f wNf xw> ֨ Z f  L j pp rf ȕ \֨¹$p (f N#  eBB 99 f f  LB0:[1,6]SYSSCAN.TMP;1 SYSSCAN.TMP;2ENTER: VѫC  $# R *qfI f, P- X=B   $,($1  ֨ L*fJ @ ^ $fK & r,   *fL   ?f9 & & & $& & Ε00E|6F6557i:)* & & & & <̼& & Ε f: n z*   1 ֨ f5  ֨&& 8#-&& FFf    RB Ee`%  D~% b  %  ֨ ֨eq q"9q,4&& & 00  & & & & & & & Ε U)O  n<& ff& & & Ε ) *eq  vf  Zf  Ff  2 :f  Accounting already activeError spawning SYSLOGSYSLOG not installedError bit set. Cleanup before restart.Secondary pool allocation failureBad SYSLOG queueAccounting system not startedSYSLOG exit with status = %DCan't close transaction fileIllegal filenameCan't open transaction fileon scan file openCopying scan file to trans fileOn scan file closeOn scan file deleteEnter reason for the crash (Maximum 60. characters)Terminal I/O errorCannot write crash transactionCan't write transaction fileCan't init new blocksCan't init new blocks. I/O error = %BCan't write attributes. I/O error = %BCan't write attributes)7 w 5f  5lf3 lw2 j5J fv|U@28 :5> ? R? XAmA Am E* *A  5 E 5AmA Am 6  E@ 2   l 7  R\ww Accounting did not crashAccounting had a fatal error, must be cleaned up|, QY &?TISYTISYTICL~̀V~00F6H6555512rD "'Bb ACD>P^@9v7vu;v, ^C 8E%TT r0 b v  \|7 7 vr l *ܯb  ` kf %tX # ` !7 ^b4e6  4X jZwbwpWtwj ~'BVn jѮ@mb4e6   6j7 pܨ  b'  R  3 A P * "НП  U   8 && Ε wpw nkLf7     *  3  A E  Z  r Cwx$! w\7z wB   7 ҥ D~ xܯ0  Zܯȕf  X & SY 77 : ܯw c-TT `7 wt7    ܯ 7 W w \ܯC~& & Ҧ̦f&  F̦e  & Vы& & &  f&& & & Ε 7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  r7r f@  &  5]U E0 :$&@E A  ̆  E vE c  @  . &f  T) X)  8  " .$ J  @̥ZḀ90     Unknown ATTACH directive errorACD is busy but was marked for deleteCould not create ACD regionUnexpected DTRG directive errorInvalid device specifiedError reading command lineACD already existsInvalid Logical NameCannot assign SY:Unknown CRAW directive errorACD region name conflictThat ACD is not installedACD task was not foundInsufficient system resourcesPrivilege ViolationError reading ACD into memoryLink was rejected by the terminal driverUnlink was rejected by the terminal driverSyntax errorw J(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA >EAa$ w  ť ť 0B Aaw 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp hC*8֋ n88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a00F66557i:)*)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 88 *zNw  8jDl@ 2TeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@&f& v INSTALLREMOVELINKUNLINKASSIGNASNUMBERTOBJQV]dgnꦢ,ꦼ޵֩ȁȁ ֵ4.ȁ$f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0 ^eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ | WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew *8I *=)98 N eB &&  U @**e *Nlv ΋*.2  & #!)&eP(e &&00F6H6555512 >e >E p* 6ww |( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# jw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  @ P3)/ (#( P) ~@#**fff  H&*wp. tB5(8e$8w2A&(e .4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & .e# eB&B B *  eBe>  # #D #=0/H#@&0 # = e0   T0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w  ^ 0,0w  lw pww&f 82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E  (.8Ae f"( UCɗ&+(e$&% &ff **(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &eB  8 $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* 6 *5ND   <  EU   w *D  ww ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  p  P3)/ X #( P) @#**fff , x&*wp. tB5(8e$8w2A&(e ^4p8q  (#4=A#@)( > *O*)@#0l @# 02ȕ8 P00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ P& & ^e# eB&B B  * eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w./!0/ l0/!p!0 .=p0p2w ) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 ^p  8 V *`)w:  C# " 00F66557i:)*  D @)  6?0D)w j(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  j 1 >w ) * w46l0141612epl2l0p *MwB   f  >5>Eu   e6p 4 8 X 81416 0 p   J * ^ f B&* D*> =00l&8el2 0 *w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=whw eE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  :U   E > >E(5E=uf p  ww  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  8   * .  4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 8e2 ..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 T08*w=p!Օ^*@<#8w /$ ,:T < U@% DD%][%><w(  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce he%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` H*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  8  **  DP5R RRR f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ =D  `p46 f 64/=  @) 0  8w 46 L8 e*wp ,*1 U8UMw$ w ,B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ ~wn0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 00F6G6555512De $ $ $ >z  NDEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w  )  fU %  BA `6p 4p`4 %60 4},tt Y l >TILBSYSYTIv<lvRMhOtTIDUDUDUTI|q( to continue, CTRL/Z for ACNT Options Menu : Disable login/logout messages? [Y/N]: No account records matched Default file protection ([SY,OW,GR,WO]): *** Account File Maintenance Utility ***%F%Y %3Z Multiuser Account File List Page %D%N%Y %3Z Multiuser Account File List Page %D This entry ? [Y/00G66557i:)*N]: Type or <=> to leave entry unchanged Account file modification is complete Account file is now sorted by UIC Account entry and directory have been created Account entry has been deleted Account entry and directory have been deleted WARNING -- Directory not created New Directory has been created ** Only the old UNENCRYPTED type passwords can be printed. ** ACNT -- Cannot be run from a non-privileged terminal ** Use SET PASSWORD to change your password ** Do you really want a blank password? [Y/N]: Do you really want a blank username? [Y/N]: Owner = [%3E,%3E] Login_defaults = %4E:%11EL_name = %14E F_name = %12E Password = %6EL_name = %14E F_name = %12E Password = %11EDef_CLI = %2R Session ID = %R Account # = %4<%D%4>Total_logins = %5<%M%5> Last_login = %I%Y %3Z%4ECharacteristics = %2ASlave %2ADef_dir_stringCharacteristics = %2ASlave %2ADef_dir_string %2ASilentNODef_ProtectionDef_Protection = [%I] NONone (ENCRYPTED) ACNT -- Syntax or command input error ACNT -- Cannot find account ACNT -- Account file error ACNT -- Invalid option ACNT -- Account already exists ACNT -- Account file full ACNT -- Invalid default device name ACNT -- Current entry not modified ACNT -- Workfile error ACNT -- Workfile- mark delete ACNT -- Workfile- open file ACNT -- Workfile- unspecified ACNT -- Workfile- page lock ACNT -- Workfile- page unlock ACNT -- IO error ACNT -- Workfile- page mark ACNT -- Workfile- dyn. mem. exhausted ACNT -- Workfile- IO err or ADDR past EOF ACNT -- Workfile- virtual storage exceeded ACNT -- Account file already exists ACNT -- Block number 000000,000000 is locked. Try again. ACNT -- Listing file errorQUFD PIP *.*;*/DEL/NM:[0,0].DIR;*/DEL/NMUFD CPRSX$VMSCPRSX$DEFCPRSX$LOGADELMSpvb   d `/ /+ ACCOUNT.DMPSY:?L p`J)? P~II5& 8X  NF|zr/0 Bu.e• =X• = w>& J/ ŭX U> J C 8 @r/ N%( / r/77 00 e p 0 7 :N ,  E U   J  r w.    6 6 > v r w0 V wH|@ B~|  &7 | D   R   F  * d  w g5c l 5tZ5lW R (5TJ X*[ K  d*S N*L%A P*I :*B - 5  ʋ L  %% w ww   wwwww$ww"5_ J J}  K 4, Je w<r/pN 0/  r//(` 4K J  pr/77 FJEwww^   wb w @ wDg * w8 wL  l7 H w'  ww.  w|5  E w w] "5ʋ 8 %% ,  wr &wh \w^ wT  00G66555512wJh H  =  w wZ#w l7  l  n     E@E@w7 %E  "EH5wN   U7 %      ևȥF R<h=7 D w^ u *"$# $9 wU~e@-p6 } P~ rh ( 7  t 4ej-f \ L L   B b ,-& E47  6 7 5Ej @5cU! 0k pV5R 5L5 D A5  5  @E 1%&fv f .  9 p A $+  j '  w, LI n ( * D wwww! n J & b ! L D3 < B: 0  U &w "wɋP ]&  L]|  jw 5%w7 8$s  #p b _ E "^A "Z  P , "K "  %jf` t"(wTRL H F f"DA \"%.& J" 4" 77wwww b _3 WP Th Q N K H E B U 4; .$+ ($ %B "b   P( 1Е, 1u    7 5E 2  z 5 .ы 7w >w4 tw&t 7  L׭RA34 <# -wEV5@P ׭(A, # Pw  N 0 0 ȋ UW [ <]> &!%Hx & )   w7ыw0wwp%ȥ=#`   ȥaȥ{  % JU@ N  5@' . Mb l 7X r  FUF&$z&N wE ^M\ F $$   ҕ0ҕ0  0.z h w~zt  5 U>R * })MyUF  =[]a|Е[ Е]W 7  f  |Uʥ[ ʥ<ʕ[Е[ $ʥ] ~%#ʥ>ʕ] b-`\% ,@ ] ȕ] zw  7 6  B  B ҕ   Z h ## &*    ҕ    0 MH    6`7 &R$5I ! e < B`ʕ  ¥  w  B`ʕ "%  wfAwZ<  =M3< lh"ZV B`ʕ  ¥ w w ¥ w   UE EM.  N UXEP EDM L N&Ћ 7ۀ7AM |0@< v-41-$  4hj۷g۷Z۷T R۷O۷B۷< Е AȥZ0ȥ7!!$$''-.09AZ__f&ȋ l'  ~  ȋ ȥN ȥY |@B~ | RЕ:]00G66557i:)*5  ]Е[| Е]: eee.5<Е[BeB~Е]Е Е Е e@Y 6 e eL5R EU5  Ee  R4R6R>J2 R,?  8 A(RA'RA&RA)RA*RA+R r 5<eR 5<eRC  5<eRr ,BL <  7 <      ѕR ѕW ѕE ѕD ѕ,RB~H7H4  ,.&7//035e eʋReނ et r/ B/ j10# v,br/&Br/ 0&BwH%biH4 <7 &  4T * ,Rf&/m  e  E ,5 et E  "et        w ww<5nw w^d wP7 N7 87 68U4H4  j Vw _/% $5ew ew 57- 7- Uet   "7 ,5pB p:K f; ET JDeE*7 7  $U wwvwx  wrwtwE U+ 5e5e e̋Dt&f : b7`^  l E URw. h=ftffN N NhN N NhN NhN NhN NhN N eP% fA Uwj  UwR x"E &/ &f LC~ UC~  ^D~cr/ ! !T !Ds// /[0,0]RSX11.SYSM@BC00G66555512Af } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~7   6  < (  .   "    x  l l&f&D%% %% v  % %%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5  n e(vttA~ Nw E p r B ` p 7A @ae  e?E? & f Y  <0 Br ` <Pw f nE<  jw`K`/< & D -N  D  `   w :w<      7 7 7  W,  7b 7XR ^#  %* 7 7    n ^ N pd<4e6(h< xH   HT pd<4e6(h< z! ,䇷 b Z7 w e@)w 7  ; B݇B B  @`   B`   v  m ` r@ f@eE r<&ܾzm r $JUrV^mwJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw Df A~A&"   @&fA EAa Aׇ   w  ť ť 0B Aaw && D¥%  B&ХVA C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e 6& e /& e*AHŀ ȕ Е Е Е & eN & e: Е A %& e A  Е A EA EЕ A bA   $Е. J AЕ;    &3&f& v f& w n D&& bЕ- eaePPPЕ-$w > D  &Е. ce , Е:   Bw ' UD$BA *&( U BQ Е*  & & @( f  e ee e f& ͥ`̋  @  % ff&QE eN w `NA`c<2. wՀ,ŀ(@ L @   HU@ (  u G   53 : ̋    t  6݇u    5 & 5  5  56   AAaf ΊP   @ P   6 w ̋ x00G66557i:)*e%G  @ Хȥ   AA wAf f`E  5 _Х*  BC  5 T   f : azE  + $& .! _0 7 9A  F Z5  ע ע  TI(SYSTEMOWNERGROUPWORLD $IJ[JJ,J,J,J](J&J&J,J )IFJI~JIJIJ=:R<JJW<JJE<JJC<JJD<JJ =:R<JW <JE@<JC@<JD<J =:R<JW<JE<JC<JD<J =:R<JW <JE@<JC@<JD<J '&15ew \, Bv     5Bw KMNNI-vnt D- E %     U EU 5  5U pt&K O*OFKNE U *5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E w eE D` bl lrw \  B eE"s    s-  Csl&f w h*8I *=)98  eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E lp* wlw L*eB 8 x Xw "( D x 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))  *<##   w,# Xw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) l@#**fff  6&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B V * eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w /!0/ l0/!p!0 .=p0p2w < ( D  8"!#($ĥ ĥ w 0 *0 @Q$ 00G66555512   0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff $  p &*wp. tB5(8e$8w2A&(e 64p8q  (#4=A#@)( 6 *O*)@#0l @# 02ȕ8 V 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B  *  eBe>  # #D #=0/H#@&0 # = e0   40@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2eB  8 $&w V*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  <  EU   w @ n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e J* e*wv@)0,    ) P)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a &e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  wL  Jw B # t f  `* wr)0406 l0 w * \ 0,0w  j w w,w(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w  $ $0,0w 46 n  $ )0406 0 *w *D z  w&  m  f A N  %82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(.  = . B  E | v (.8Ae f"( UCɗ&+(e$&% &ff ** Mww BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w>141612epl2l0p   f >5>Eu   e6p 4 h8 f 81416  2  ^ f p&* D*> =00l&8el2 0 *w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf Pp  wN(eff NeP   #llD &eJ Ԕ %:ԕ: 00G6H6557i:)*f"& f&f& & Ε lle  &*@<#8w $ /$ ,:T < U@% DD%][%><wZ  w1  %,,:4 w `*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce >   *w h*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` z*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  *) l0, *) $ )*)0,40,6 j..8em,0l0!D0e6p 4.) &f .  e) .  e6p 4 $08*wX 8  J**  DP5R RRR =p!Օ^ 8   *  4 6 *e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = 0,0, f 톇,, w D     .% eB U5UU plp & NeՀ)*&   `@ ` B   & A @    8e2 ,*1 4U8UMw@ w HB 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w H&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@},MM66 Y &[q Y | *00H66555512TILBSYSYTI<|RJKTIDUDUDUTIUVUБ 1)<@A Q|x Account Utility options are: Add Add an account to file Delete Delete an account file entry Examine Examine existing account List List account file Modify Modify account file Sort Sort account file CTRL/Z Terminate utility session Creating Account file -- LB:[0,0]RSX11.SYS Enter option: Enter account (group,member): Password (39 chars. or fewer): Default system device ( DDU ): First name (12 chars. or fewer): Last name (14 chars. or fewer): Enter maximum number of accounts: List on Terminal (default) or File (ACCOUNT.DMP) [T/F]: Delete UFD and files? [Y/N]: Print passwords (default no)? [Y/N]: All accounts (default no)? [Y/N]: Enter group number (N): Session ident ( 3 chars. or fewer): Account number (4 digits or fewer): Enter user CLI (default=DCL): Enter user CLI (default=MCR): Slave terminal? [Y/N]: Warning ** Device does not exist on current system. OK? [Y/N]: Default directory string ([group,member] or [name]) : Key to continue, CTRL/Z for ACNT Options Menu : Disable login/logout messages? [Y/N]: No account records matched Default file protection ([SY,OW,GR,WO]): *** Account File Maintenance Utility ***%F%Y %3Z Multiuser Account File List Page %D%N%Y %3Z Multiuser Account File List Page %D This entry ? [Y/N]: Type or <=> to leave entry unchanged Account file modification is complete Account file is now sorted by UIC Account entry and directory have been created Account entry has been deleted Account entry and directory have been deleted WARNING -- Directory not created New Directory has been created ** Only the old UNENCRYPTED type passwords can be printed. ** ACNT -- Cannot be run from a non-privileged terminal ** Use SET PASSWORD to change your password ** Do you really want a blank password? [Y/N]: Do you really want a blank username? [Y/N]: Owner = [%3E,%3E] Login_defaults = %4E:%11EL_name = %14E F_name = %12E Password = %6EL_name = %14E F_name = %12E Password = %11EDef_CLI = %2R Session ID = %R Account # = %4<%D%4>Total_logins = %5<%M%5> Last_login = %I%Y %3Z%4ECharacteristics = %2ASlave %2ADef_dir_stringCharacteristics = %2ASlave %2ADef_dir_string %2ASilentNODef_ProtectionDef_Protection = [%I] NONone (ENCRYPTED) ACNT -- Syntax or command input error ACNT -- Cannot find account ACNT -- Account file error ACNT -- Invalid option ACNT -- Account already exists ACNT -- Account file full ACNT -- Invalid default device name ACNT -- Current entry not modified ACNT -- Workfile error ACNT -- Workfile- mark delete ACNT -- Workfile- open file ACNT -- Workfile- unspecified ACNT -- Workfile- page lock ACNT -- Workfile- page unlock ACNT -- IO error ACNT -- Workfile- page mark ACNT -- Workfile- dyn. mem. exh00H66557i:)*austed ACNT -- Workfile- IO err or ADDR past EOF ACNT -- Workfile- virtual storage exceeded ACNT -- Account file already exists ACNT -- Block number 000000,000000 is locked. Try again. ACNT -- Listing file errorQUFD PIP *.*;*/DEL/NM:[0,0].DIR;*/DEL/NMUFD CPRSX$VMSCPRSX$DEFCPRSX$LOGADELMSr   t p/ /; 0ACCOUNT.DMPSY:?\ ppZ)O P~E|F5& HX  N6|z/0 Bu>e• 9X• 9 w>& Z/ ŭX U> J C 8 @/ 89%( / /77 00 e p 0 7 8 ,  E U   J  r w.    6 F > v r w8 V wH@ B~  &7  D   R   F  * d  w g5c l 5tZ5lW R (5TJ X*[ K  d*S N*L%A P*I :*B - 5  ,ʋ L  %% w ww   wwwww$ww"5_ 6 7  K 6 Je w</pN 0/  //(p B6 ^6  p/77 $6Ewww^   wb w @ wDg * w8 wL  l7 H w'  ww.  w5  E w w] "5,ʋ 8 %% <  wr &wh \w^ wT  wJh X  =  w wZ#w l7  l  n     E@E@w7 %E  "EH5w^    U7 5      ևȥF R<x=7 D w^ u *"$$# 3 wU~e@-p6  P~ x 3 7  t 4ej-f \ L L   B b ,-& E47  2 7 5Ej @5cU! 0k pV5R 5L5 D A5  5  @E 1%&fv f .  9 p A $+  j '  w, LI n ( * D wwww1 n J 6 b 1 L DC < BJ 0  U &w "wɋP ]&  L]  jw 5%w7 8$s  #p b o E "^A "Z  P , "K "  %jf` t"(wTRL H F f"DA \"%.& J" 4" 77wwww b& _C W` Tx Q N K H E B U 400H66555512;.4+ (4 %R "r   `( .Е, .    7 5E .  z 5 .ы 7w B.w(4 tw&(t 7  L׭RA34 . -wEV5@P ׭(A, - Pw  N J- @- ȋ UW [ <]> &!%Xx & )   w7ыw@wwp%ȥ=#`   ȥaȥ{  % ZU@ N  5@' . Mb l 7X r  FUF&$z&N w$E ^M\ F $$   ҕ0ҕ0  0. .+w~zt  5 U>b * })MyUF  =[]aЕ[ Е]W 7  f  |Uʥ[ ʥ<ʕ[Е[ $ʥ] ~%#ʥ>ʕ] b-`\% ,@ ] ȕ] zw  7 F  B  B ҕ   j h ## &:    ҕ   0 MH    6`7 &b$5$F ^ u < B`ʕ  ¥  w  B`ʕ '%  wfAwZ<  =M3< plh"ZV B`ʕ  ¥ w w ¥ w   UE EM.  N UXEP EDM L N&Ћ 7ۀ7AM |0@< -$1-  4hj۷g۷Z۷T R۷O۷B۷< Е AȥZ0ȥ7!!$$''-.09AZ__f&ȋ |'  ~  ȋ ȥN ȥY .@B~  RЕ:]5  ]Е[ Е]: eee.5<Е[BeB~Е]Е Е Е e@i 6 e eL5R EU5  Ee  R4R6R>J2 R,O  H A(RA'RA&RA)RA*RA+R r 5<eR 5<eRS  5<eR ,BL <  7 <  #    ѕR ѕW ѕE ѕD ѕ,RB~X7X4  ,.&7//035e eʋReނ et / B/ !0# !b/&B/ "BwH%biX4 <7 &  4T * ,Rf&/m  e  E ,5 et E  "et        w ww<5nw w^d wP7 N7 87 68U4X4  j Vw _/% $5ew ew 57- 7- Uet   "7 ,5pB p:K f; ET JDeE*7 7  $U wwvwx  wrwtwE U+ 5e5e e̋00H66557i:)*Dt&f : b7`^  l E URw. x=fffN N NhN N NhN NhN NhN NhN N eP% fA Uwj  UwR LE &/ &f \C~ eC~  nD~c/  T Ms// /[0,0]RSX11.SYSM@BCAf } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~7   6  < (  .   "    x  l l&f&D%% %% v  % %%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5  n e(`MA Nw E p r B ` p 7A @ae  e?E?00H76555512 & f Y  <0 Br ` <Pw f E<  jw`K`/< & D -N  D  `  @ w H w<      7 7 7  W,  7b 7XR ^# t %* 7 7    nr ^b NP pt<4e6(x< L xH    HT pt<4e6(x< ,䇷 b Z7 w e@)w 7  ; B݇B B  @`   B` 8  v  m ` r@ f@eE <&̾ to continue, CTRL/Z for ACNT Options Menu : Disable login/logout messages? [Y/N]: No account records matched Default file protection ([SY,OW,GR,WO]): *** Account File Maintenance Utility ***%F%Y %3Z Multiuser Account File List Page %D%N%Y %3Z Multiuser Account File List Page %D This entry ? [Y/N]: Type or <=> to leave entry unchanged Account file modification is complete Account file is now sorted by UIC Account entry and directory have been created Account entry has been deleted Account entry and directory have been deleted WARNING -- Directory not created New Directory has been created ** Only the old UNENCRYPTED type passwords can be printed. ** ACNT -- Cannot be run from a non-privileged terminal ** Use SET PASSWORD to change your password ** Do you really want a blank password? [Y/N]: Do you really want a blank username? [Y/N]: Owner = [%3E,%3E] Login_defaults = %4E:%11EL_name = %14E F_name = %12E Password = %6EL_name = %14E F_name = %12E Password = %11EDef_CLI = %2R Session ID = %R Account # = %4<%D%4>Total_logins = %5<%M%5> Last_login = %I%Y %3Z%4ECharacteristics = %2ASlave %2ADef_dir_stringCharacteristics = %2ASlave %2ADef_dir_string %2ASilentNODef_ProtectionDef_Protection = [%I] NONone (ENCRYPTED) 00I76555512ACNT -- Syntax or command input error ACNT -- Cannot find account ACNT -- Account file error ACNT -- Invalid option ACNT -- Account already exists ACNT -- Account file full ACNT -- Invalid default device name ACNT -- Current entry not modified ACNT -- Workfile error ACNT -- Workfile- mark delete ACNT -- Workfile- open file ACNT -- Workfile- unspecified ACNT -- Workfile- page lock ACNT -- Workfile- page unlock ACNT -- IO error ACNT -- Workfile- page mark ACNT -- Workfile- dyn. mem. exhausted ACNT -- Workfile- IO err or ADDR past EOF ACNT -- Workfile- virtual storage exceeded ACNT -- Account file already exists ACNT -- Block number 000000,000000 is locked. Try again. ACNT -- Listing file errorQUFD PIP *.*;*/DEL/NM:[0,0].DIR;*/DEL/NMUFD CPRSX$VMSCPRSX$DEFCPRSX$LOGADELMSr   t p/ /; 0ACCOUNT.DMPSY:?\ ppZ)O P~E|F5& HX  N6|z/0 Bu>e• 4X• 4 w>& Z/ ŭX U> J C 8 @/ 4%( / /77 00 e p 0 7 3 ,  E U   J  r w.    6 F > v r wv3 V wH@ B~  &7  D   R   F  * d  w g5c l 5tZ5lW R (5TJ X*[ K  d*S N*L%A P*I :*B - 5  ,ʋ L  %% w ww   wwwww$ww"5_ 1 1  K 1 Je w</pN 0/  //(p "1 >1  p/77 1Ewww^   wb w @ wDg * w8 wL  l7 H w'  ww.  w5  E w w] "5,ʋ 8 %% <  wr &wh \w^ wT  wJh X  =  w wZ#w l7  l  n     E@E@w7 %E  "EH5w^    U7 5      ևȥF R<x=7 D w^ u *"$$# j. wU~e@-p6  P~ x - 7  t 4ej-f \ L L   B b ,-& E47  - 7 5Ej @5cU! 0k pV5R 5L5 D A5  5  @E 1%&fv f .  9 p A $+  j '  w, LI n ( * D wwww1 n J 6 b 1 L DC < BJ 0  U 00I76557i:)* &w "wɋP ]&  L]  jw 5%w7 8$s  #p b o E "^A "Z  P , "K "  %jf` t"(wTRL H F f"DA \"%.& J" 4" 77wwww b& _C W` Tx Q N K H E B U 4;.4+ (4 %R "r   `( )Е, )    7 5E |)  z 5 .ы 7w ")w(4 tw&(t 7  L׭RA34 ( -wEV5@P ׭(A, ( Pw  N *( ( ȋ UW [ <]> &!%Xx & )   w7ыw@wwp%ȥ=#`   ȥaȥ{  % ZU@ N  5@' . Mb l 7X r  FUF&$z&N w$E ^M\ F $$   ҕ0ҕ0  0. &w~zt  5 U>b * })MyUF  =[]aЕ[ Е]W 7  f  |Uʥ[ ʥ<ʕ[Е[ $ʥ] ~%#ʥ>ʕ] b-`\% ,@ ] ȕ] zw  7 F  B  B ҕ   j h ## &:    ҕ   0 MH    6`7 &b$5$F ^ u < B`ʕ  ¥  w  B`ʕ n"%  wfAwZ<  =M3< plh"ZV B`ʕ  ¥ w w ¥ w   UE EM.  N UXEP EDM L N&Ћ 7ۀ7AM |0@< -$1-  4hj۷g۷Z۷T R۷O۷B۷< Е AȥZ0ȥ7!!$$''-.09AZ__f&ȋ |'  ~  ȋ ȥN ȥY .@B~  RЕ:]5  ]Е[ Е]: eee.5<Е[BeB~Е]Е Е Е e@i 6 e eL5R EU5  Ee  R4R6R>J2 R,O  H A(RA'RA&RA)RA*RA+R r 5<eR 5<eRS  5<eR ,BL <  7 <      ѕR ѕW ѕE ѕD ѕ,RB~X7X4  ,.&7//035e eʋReނ et / B/ 0# b/&B/ BwH%biX4 <7 &  4T * ,Rf&/m  e  E ,5 et E  "et     00I$76555512   w ww<5nw w^d wP7 N7 87 68U4X4  j Vw _/% $5ew ew 57- 7- Uet   "7 ,5pB p:K f; ET JDeE*7 7  $U wwvwx  wrwtwE U+ 5e5e e̋Dt&f : b7`^  l E URw. x=fffN N NhN N NhN NhN NhN NhN N eP% fA Uwj  UwR ,E &/ &f \C~ eC~  nD~c/  T Gs// /[0,0]RSX11.SYSM@BCAf } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~7   6  < (  .   "    x  l l&f&D%% %% v  % %%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeee00I,76557i:)*euuuu%&D   5  5  n e(NA Nw E p r B ` p 7A @ae  e?E? & f Y  <0 Br ` <Pw Pf E<  jw`K`/< & D -N  D  `   w w<      7 7 7  W,  7b 7XR ^# T %* 7 7    nr ^b NP pt<4e6(x< , xH    HT pt<4e6(x< h ,䇷 b Z7 w e@)w 7  ; B݇B B  @`   B` 8  v  m ` r@ f@eE <&̾HK&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &  m  f A N  %&ff  &[q &[qHN6N &r 6NZN[q}nN 6NHNE`WN"N"N|,???? Y .SYTISYSYTICLOV~~~Z#%|~File open failureFile read failureFile system failureFile close failureFile deletion failureFile write failure ACO -- Illegal command line SHOWSYSGENRK05RK05FRK06RK07RL01RL02DOUBLERP02RP03DSRS03DSRS03DSRS04DSRS04MMTU16MMTE16MMTU45DBRP04DBRP05DBRP06DRRM03DRRM02DRRM80DRRM05DRRPXXDRRP07MMTU16MMTE16MMTU45MMTU77MFTU78EMML11AEMML11BXXUNKNOWN  (08@HPX `"h(p)x*,AHI000023244453707A73838423-PLUSLSI-11/73KXJ11%NProcessor Type: 11/%I%NProcessor Type: %I%10SMemory Size: %M. Kw%2NOptions: Name Vector CSR Unit Type Remark Mixed MASSBUS devicesTM0200J<76557i:)*TM03TM78Priority %QFailed to interruptSector interleavedDual access%2E%E %P%6S%Q%21S%N%VS%I%N%29S%5<%I%Q%5>%2S%9<%I%9>%NQ_ 6 _  I a Floating Point Processor (FP11)%N Commercial Instruction Set (CIS)%N Extended Instruction Set (EIS)%N Floating Instruction Set (FIS)%N Extended (22-Bit) Addressing%N Switch Register (SWR)%N Display Register%N Cache Memory%N Line Frequency: 60 Hz%N KW11-P Programmable Clock%N Extended Arithmetic Element (EAE)%N Parity Memory%N KW11-W Watchdog Timer%Nq O O O O ( O O O .ENABLE GLOBAL.ENABLE SUBSTITUTIONS.SETS A "A".IFF $ACFDF .SETS A "$".SETS 'A'R$TPR "11/%I" ! Processor Type.SETS 'A'R$TPR "%I" ! Processor Type.SETN 'A'S$YSZ %5<%M.%5> ! Memory Size in K-word Blocks%I'A'F$LPP ! Floating Point Processor%I'A'F$LTP ! Floating Instruction Set%I'A'S$WRG ! Switch Register%I'A'P$D70 ! Cache Memory%I'A'L$50H ! Line Frequency F=60Hz T=50Hz%IAKW11P ! KW11-P Programmable ClockRH DK 4DM <DL 4DP 4DU $MU $CT MS DT DX DY DD LP$ MT* PP0 PR6 YL< YHB YMYVH YZN R$H11R$K11R$611R$L11R$P11R$UDAR$MYAT$A11T$U58T$C11R$X11R$X21T$S11L$P11T$M11P$P11P$R11D$L11D$H11D$V11D$Z11DBDRDSEMMM@.SETN 'A'%2A%A%M %Q.SETN 'A'%I %Q.SETN 'A'%2AA %Q%I'A'%2AB.SETN %I%2A%QA %Q.SETS %I%2A%QC "%A".SETS %I%2A%QD "%A".SETS %I%2A%QE "%I".SETN A%2A%A %Q%I'A'%2A%QB.SETN 'A'%2A%QF %Q.SETN 'A'%2A%QE %Q.SETN 'A'T$M03 %Q%I'A'RH1.SETF .SETT AB A'A' )r&&<SYSY7    w0 Q$E w   R # ” w~( %” v w( (8” \ w M” H wa” 8 5# F”  wP 5     ~~   ; e%235> %7A F5@P~ %F 54V%Fo ~  w~8 5 ~ X 5 5 5"C0 5 C05|f~ 8 ~ Z  P 7 7 7  -e7 5< \ p%YV5" B @   x de7\ w: | \  N7 @>e84U(~J J   5~???,RH U\UN D~ D( 5. >5 ŜE w 5n ` ~ ~.F b 25j g "4ew,($  %YHYMœ wf w 5"%YZ57 5 8%RHr $ b | |%YVx7 7 D74 H,RH""MF"MM %QU "DS5Ux 5UhQ~h  F~ D. 50EW A EW  5+t 5>b x H5E5? > ;%RH86ew.%DK7 7 ew 5  % 7   W hQ5 J5@G777 7 Few 45 ewl UR|J/  5 0 2 7,  @777 7 ; 7* w7N 7 777 7 ^  500JD767555512v57f|%YL r 7d Jw 5 #%DKH2D 4w*  5 |7 %RHNT 77 '5|57 `5@7w7N :e lta "|d TXs  &~ d @)  M” 3,DK 5w ,RH w,DM 5w,DL 5w,DYw,DP 5 w,DU,MUAf E  \ A A A A E : A A A A A E E  w e@P& ,e%YV E ~e5 ef7  )fŜ &f& "  "E $ &f, 5 ec  e 瀱 5   ~p Jx”  *+ 0f : T "e f&5,Ew7 4e E!E 57- 8T~&53Ewl7he E C~ e EE ,57- R~ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw 4 && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf 2 & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA  Е A EA EЕ A |A   $Е. d AЕ;     &f& v  w  ť ť 0B Aaw D&& bЕ- eaesPPPЕ-$w D  &Е. ce  Е:   Bw h' UD$BA &( U BQ Е*  & & @( f  e ee e '&1 () (- () () )H-5ew 0, Bv     5Bwb !#$5  5 2  UE (*! &%$r!(E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E w ~(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  l1 >w ww&f &  m  f A N  %f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff 0+1(e  %&p*w 00JL76557i:)*f( f)f &   `@ ` B   & A @    8Ae f"( UCɗ&+(e$&% ** )(()(( )((")()&)((w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) 6 *<##   w,# zw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff H X&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 ^00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ J& & he# eB&B B " ,*  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w /!0/ l0/!p!0 .=p0p2w *8I *=)98 v eB &&  U x**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* ww eE D` bl lrw   B eE"s    s-  Cslw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wd141612epl2l0pW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  wr " f \&* *   f  >5>Eu 4  Mw82e&( 40 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 @81416     neB  8 $&w *(5<s1  U U@  jf&" )'&M'&&**%*%0 *&* *5ND  <  EU   )"(. <= . B  E  b(.,*1 U8UMw& w .B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ TwD8e2 *) l0, *) $ )*)0,40,6 (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:00JT767555512T < U@% DD%][%><w  w,1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  ..8em,0l0!D0e6p 4.) &f Z " 0e) .  e6p 4 08*w>=p!Օ^(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w d&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@0,0, f 톇,, w $     .% eB U5UU plp & NeՀ)*w  0,0wz | , 8   * b : 4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 0,0, f 톇,, w      .% N eB U5UU N plp & NeՀ)*w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f $e &* e*w@)0,    $) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a Ze0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  ^wL : Jw@B # f  `* w)0406 l0 =p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  **>00J\7Kc7557i:)* =00l&8el2 0 *e6p 4 8 81416   6  ..8em,0l0!D0e6p 4.) &f Z he) .  e6p 4 08*w"141612epl2l0p,*1 U8UMw wV B 00fep=& /e`pwj46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 0,0, f 톇,, w      .% \ eB U5UU \ plp & NeՀ)*kz?TLBOPzLB $,I/O Error Code %D.QI/O Error Code %D.SY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA],U,t,l,,,,, B ) &(, ;,  %ׇ 8)7    )UfUh)&& ) RЕ ȕ-ȕ  b)   @,  b)Bb)O,Pe~5)E$ %& e eTUUP, % O,!e e\^$% 5R  R,eH~) -- p)) O,$*8) A, & & & & f$*& & & Ν.( )  % UO,8) 2b), Bb) &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w H\& LB&`  )  V111 D J  M >   $*U%    tM D  E e$*@P  & SY&  & SY& l 5 $*%   * D)L(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R |, AY F|00Kd767555512SYTIj|FhȾr*F$&)X(¡*O:z ¡|ơ ̡ ¡ ACS -- Command I/O errorACS -- Device not in systemACS -- Syntax errorACS -- Not FILES-11 deviceACS -- File I/O error ACS -- DPB errorACS -- No pool spaceACS -- Dynamic allocation of checkpoint space not supportedACS -- Privileged commandACS -- Checkpoint file already in use on deviceACS -- Checkpoint file now inactiveACS -- File not in useACS -- Illegal deviceBLKS=Ơ5 *wwwwwww5 Ƞ   2S:<6ه /u ͇ ʇw ņ"Ç(5@> Aq w7 fp      J 7   T ww lw5@k   ni <Tw  <  6 1 ,*2),:* ! w,)+&?#*p ,Е.Zxڢ $H_7<ы w0֡)_: @ :eB &B F     xBI7 `nZoj5AAFަ :UD&?"A1|v.& & ?wnw7 ć    & &.  ¥8¥9 w  ť ť 0B Aa&3t 5 ߥ& *  + 23E Ew p   Е-   0@A nW e`fÊ    E w *8I *=)98 ` eB &&  U R**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* Hww *f f x! fP ŀ)Bw F( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB (&*   wX . VB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 Z0 @0 &*0 @ "& & 0e *  eBe>  # #D #=0/H#@&0 # = e0   t0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=00Kl7c7557i:)*p0p2 8 !Հ)w*w&f &  m  f A N  %82e&( X0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E  (.8Ae f"( UCɗ&+(e$&% &ff **0,0, f 톇,, w      .% L eB U5UU < plp & NeՀ)*   f >5>Eu   eB  8 <$&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  Z<  EU   141612epl2l0pe6p 4 8 81416  b  <  > =00l&8el2 0 *w rBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww :eE D` bl lrw   B eE"s    s-  Cslw .(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  21 >8e2 ..8em,0l0!D0e6p 4.) B&f V  ,e) .  e6p 4 >08*w=p!Օ^(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w@1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    z*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ ,*1 U8UMw w0 B 00fep=& /e`pw`46f %8 E D/D!D l0l8epl0pɥ.ɕ w *) l0, *) $ )*)0,40,6 f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe   00Kt7Lu7555512 *1  ˕03 "   ˔Ӕ ʥ75%& w 8&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@|,00AY &[q$Y F SYTIzF"@xSYTI(0/HLȾ|r*F$&)X8ҡ*O:z ҡ֡ ܡ ҡ ACS -- Command I/O errorACS -- Device not in systemACS -- Syntax errorACS -- Not FILES-11 deviceACS -- File I/O error ACS -- DPB errorACS -- No pool spaceACS -- Dynamic allocation of checkpoint space not supportedACS -- Privileged commandACS -- Checkpoint file already in use on deviceACS -- Checkpoint file now inactiveACS -- File not in useACS -- Illegal deviceBLKS=֠5 *wwwwwww5 ؠ   2S:<6*ه / ͇ ʇw ņ2Ç85@> Aq w7 fp      J 7   T ww lw5@k   ni <Tw  < 6 1 *2),J* ! @w,);&O#* $Е.j 4Xo7<ы w0)_J  JeB &B V     xBI7 `nZoj5AAF :UD&?"A1|v.& & ?wnw7 ć    & .  ¥8¥9&f& v ('&1   | L || \ | |5ew Z, Bv     5Bw: "!">h-Vh D- E %     U EU 5  $5$UW       00L|7M}7557i:)*E5 E  W ч5  ,E jl`̧"&w E U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff  &[q &[q|j &r j[q} j|E`WVV| ,?o?o Y d;SYTISYTIr<0N:(p0<0|dr7 x7W7X7U7R7J7G7G7D hjdfG& & A!G?mEGE7 7E%%% 8f6wF7  %DYP 5|7ytG n%DFlV7 7 cw  Nc<w 6  -8e--$w   ZwZ.   77  L7 7 t  h  mVw J  < v ew   ': JЕ.# p v r  K\X 7 @B<f  %DBE   --   ݺ   A B e  Cd ' BAD>P(m۶I t x DMiB DMB DRD"" DRa 22@ (DR`  DR  ` DR DL((( DLP(( ???? $ 4 j #     78 ( "Vw% 5 Е.#wvp &z 7& 7"$ %<zv00M7u7555512 7 fb 0Е.w?uu r lje@ - -  %DBEwG    G &GfPНН `Е:Е PG R5 5 uЋ f%7G Pf Ej^b20 b N `%  E& 2wnn Cm wH& ,w"IGN!W@ B C e>7> B ~ 7>l z7>^7 Rw>f GW!I W# E->-|>  !K9j>h> \>P>N>eB !Kmw I ew  VV D@G 8 9 9 9  tn< e6w0 m*$wI &GIR%  GIRRRR% $ I% wAE @@` Ce@ 7LBN(S)= BAD -- Invalid block number - 00000000000BAD -- Duplicate block number - 00000000000Bad Block File not foundFailed to read Software Bad Sector File Volume label incorrectHome block not foundFailed to read BADBLK.SYS headerBAD -- Block already allocated LBN= 00000000000LBNS allocated to BADBLK.SYS= LBNS in bad block file= Allocation failure #\` nwJ ` & -2( &ww4, 7 $ % wTR  #   |r k c\Un@w7p:07@/-H   G%   lȋ  D ( J :87 ,&w67 I  A H Eew --3w 0&I :7f Dw & hwhwdLJ e T%i (7 j ( ȋ dM   H%w %4 I   Ie"I  3 7I7I  n wJ~zwpl 2:5G @: ~5wVG t -^1GTT  T B҂ `TT ewv$  DDhCdE3GG7pK .¥: K &  W"CK fNl fD`N % 7! 0n r% ^Ҕ  &@ 8 GЕ Е K1  A 2 r Е:    VG  %    0  a ff a Q % %ea e`q  ¥#Ћ ¥.Ћȋȥ ȥ ȥ:ȥ,Ћȥ ȥ ww Qew  $3 3﷋ - w`w  cW 22tTԝ2Ԋ2% 4 eH72  cW te%wp7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &f00M7}7557i:)*     8  " .$ B  8̥ZḀ90     w l' UD$BA ~&( U BQ Е* &3w 5 funhj uhdB$ 0jwaw< 8 v8w &  F*AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp @5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *w  8jDl@ TeBT85l@  @( D eB& "  & @# 6& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@LIOVRMANUPDRETRYLISTOVERRIDEMANUALUPDATEPATPATTERNALOALLOCATESILfimqu{҂V҂^j:r/" ( . 4 J " ( . 4 P P : : ^ z:=‚:†tf&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ z WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e*&9(.) 5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  00M7u7555512%&f &   `@ ` B   & A @    w @ *8I *=)98 X eB &&  U J **e *Nlv ΋*.2  & #!)&eP(e && >e >E p* @ w eB  8 h$&w  *(5<s1  U U@  f&" $ )'&M'&&**%*%0 *&* *5ND  <  EU N  b  : w *D ,  w@ w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB x  w,# Fw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  | P3)/ d#( P) Z@#**fff  $&*wp. tB5(8e$8w2A&(e j4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B *  eBe>  # #D #=0/H#@&0 # = e0   *0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w  R) h 8C * ) *w$*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p p  8 V *`)w  C# j   D @)  6?0D)w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >&ff w J) * w46l0w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 82e&( H0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E r (.8Ae f"( UCɗ&+(e$&% **(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w | /$ ,:T < U@% DD%][%><w:  w 1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    &*w *  ע"w00M7}7557i:)*f)Ĕ%.&%;D  5)5@DD ͥ*Ce z e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` Z *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wr141612epl2l0p $Mw<   f >5>Eu   e6p 4 8 X &81416    t T ^ f B&* D*> =00l&8el2 0 *w eE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w *) l0, *) $ )*)0,40,6 8  **  DP5R RRR f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ =D  `p46 f x64/=  @) 0  8wt 46 N8 e*w: 8e2 ..8em,0l0!D0e6p 4.) &f .  e) .  e6p 4 08*w=p!Օ^(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ 2w"w  )   fU %  BA `6p 4p`4 %60 40,0, f 톇,, w      .% * eB U5UU  plp & NeՀ)*00M7u755551200M7}7557i:)*00M7N7555512|, AY 2R TISYj0RʠFvPhTISY(aN0|0*,0Dt|Bʠ)szLB   8 BOO -- Syntax error BOO -- File not found BOO -- Invalid load device BOO -- File not contiguous BOO -- DPB error BOO -- Label block read error BOO -- Not a system image BOO -- No transfer address BOO -- Device not mounted BOO -- Privileged command BOO -- Device not in system BOO -- Device offline BOO -- Processor A is online &~x`0xv0 65      w&wwwwww w Hw2w.@Կ00N7}7557i:)*\%DZ%DWXT %DB%DR%EMRHt e w7\7^wOxOr @ w4wx@ 0 6%DY5   5  7v7:&mfPLwww wm&w w*ww5@ww e vw %0:  @e~eMe7 |< <ĝ%DKu5}]Pmh7 f57 Xl7P\ v%DU 6 &w`"w $7`  `w w`w 7`@B ~5Lߕ b ( %DU<  ݾ? ` _5P_D B~u,ʤtb F*@Ћ @w7ԣw<eE5 %H~5 UC~EN e tnU0N@fdEf \X\ZTB ׭YQU͕͋  5@@E͕5@͕e  u͋ 5DE͕  (׭C7;E41U(D D   ͕ zu p5 fކ B͵  e Fe0 (~ ĝ(͵% A @% A ``` ` <e׭aЋНWA HEU@7=7]5  7P7P6   vu n5 fԆ ҁ B@5 > D  > 5  5@ $ `e~ 5  ĝ1͵ A @5 LLUF% A ``` ` DK  r tP> h  7 ׭?7 EUe  u͋ _m_ 5 5DE5u6DP r2 r P `  7 ׭+#e-  u͋ _m_ 5 5AE͕ɖ͕ɖuDE&DLl   e@ PAEw   ہAE %   7  5 eE  7 ^E `% w H<`` ]RM͋wH v_m_ 5 E,U? 5 wDE2UM͋  AE?E? E E@E@ U Uu 5 wxDCM u%EMBE] ͋ 5 DEEp7Qlx00N77555512v p dwad׭e87:>79? u%G|5-C0DUDMBDBDBDBDR DR DRDR `DR"2@EM@EMA??% ~ !8"w ( r ErPB E7 HW͋5 U,]M͋A A 5 A A 5bbZ em C uw 6 ]MB~5 _m_ 5 5BCmvw~wuwrwjwX%EMT5 "C B-U2 8 5@ $7 DE5 w& Ca r& vԋ e@ v Wvecc%xxA t*ere: w`ebe p 0M LJL L~L R Hsы_  s@sse= s dY  #R  R s`s l_ ls   %i% % PAE7 A  Deaw7  7! t41& F b5LΥ: Υ ΥΥ/Υ   Xt ^  mƻ5$   Q3+ƻA  톃<" 2-Bƻ^"rr l v& 3 W s:    & .  x¥8¥9 1 07 EI q   P  l5 5 D N4 $w( C 3 0/  w~B3e$@ ȕ Tȕf j 8 ܇@<eB$C3 3  b*y*r*t*g*WY&f P*Q_<5w5B5DQ7"w~A1* 6u ݬ" e>Xjhdod5 X %F&fF U? e11"/& f& ? *Q1eDeB￿d& f& RR?Nwjwfwb4* LJw<:8wj$&  DTVZW ZDXүίDY >ư>̰DKb\f"DPF4vnvDLdTʳ γDUڸظָpY39ָtDMڸظָpY39ָtRHڸظָpY39ָt w ^  ť ť 0B 2Aa&3&f& v ('&15ew , Bv     5Bw f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ00N7}7557i:)* f eB  Dҁ CSĊ z WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4vuj-5P >D- E %     U EU 5  5U R h,ʇE U *5@*& E& & f&ËDef Ë )̋Uw T(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  B1 >eB  8 $&w *(5<s1  U U@  >f&" )'&M'&&**%*%0 *&* *5ND  <  EU   r   f  >5>Eu   &f w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff *@<#8w /$ ,:T < U@% DD%][%><wL  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce 0   &*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` l*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wb0+1(e  @%&p*w6 f( f)f 8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 00N7O75555125 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  0DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@** ,NN<  Y PVSYSYSYSYTICLSYOV^(1SYSYSYSYTICLSYOV(N<;O KKOl|d VT@7? $7 7 7 H x%w<$kEP5L'5DE} vb%< XW ttP>+%  V" %< P+%  < %<00O7}7557i:)* P+%  " %<h P77 p  d%<B 7 T   5Hpf& e%w - 6   66 6  5#f& e 7 J :5 '`( B~Xf& Je%UT % w&f `ȥ"ȥaȥzÀ N~  s sOl|GOl|Ol|  p $)  p&%  4 @BW R  F U D U&    u u  ¥ ¥    ȥ ȥ  ȋ   AZ     N0 |mL mL UX EJ5Bh< 5aB K%1%p3&fEe W e e7`nWp(w`f\ %1%  d)Us EpEj |0 '%I' exit status returned - %IWARNINGERRORSEVEREERRORenabling action in "ON" commandstopping user batch job  ,.wyw&ww5~ 5r h E `  ] ``  O  H5@$5U%@ E  0%09 5& \   5f %wtU swE %   F5 z5r 5f ` EaNwDE%F54B 5* 2 -0  - , &w7   0 RE|%&7 pd` Х$ ȥ!w "E@|F_C`˥-U@f`, Xf& $e%%f& e%5f& e% 7  2VT5\(& %0,.0,0     w  s @w!wjydw&}w,.]w09w_www!w"6ABDEFIMNOPQRSTUXYZ<>!,82^ijrJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw &(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w  ť ť 0B Aaw j&& D¥%  B&ХVA C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& elA f Е A vEA EЕ A 2A   $Е.  AЕ;     f& w lD&& bЕ- eaePPPЕ-$w <D  &Е. ce B Е:   <Bw ' UD$BA &( U BQ 4Е*  & & @( f  00O77555512e ee e   C A @   f A #  &  m 5 f eC w &, 7teCPU  ,, &. 0 0   ,`w3   f %w C55  l `0 VC 3 5  @ss   1 1 5 5 "` 0 1 1      &V  A  B,D 5  5 A     T 8 1 1 1   &f&/ B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J J @ EͥAA In flf wfs$e$,fL " . {"{^{`wwd +3 3@    #  .0 µ1!0  5 55   e5& Y5 T SP K  E > :5&@@   $) % e  C   r  &V p 0 p 0    5w     @  ppp 0 0 0  1 1 1 531/-+)'%#!   erwveN*PU5D e0  S  ,rw ` @@ % %P! < f05E 505@u65Q M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTSEEuB 5 =/5 *@ %E E E  M͊    ` ͊ udEE5 p U 5@\ .% - / ,3e"5550% @L P@ R , %P Eewup1 b5 E #  *  P P &1u A  ) fL .H@ D,  4  .   &f .D̥  w f 2 & 2r  4  8 <0w d& l   &ap aB#E   *   uD5e`w eE< .f 2  , ,p l J a b! jP PH  HP PH f ` %5w  #5 ȥ ȋ5ȋ1 1 ".#Հ && rpp  f '`0  0   &f 0 &V &  K&1 . 1  `̥ @ $ ! 1  ŀ f&& h pp  ,Dd'&1 /1 /H1 /1 /41 /01 /H1 /&1 /h1 /1 /1 /1 /1 /1 /1 /1 /X1 /5 ~/5 v/L7 n/X8 f08 ^08 V40> N@0A F@0A >d0E 6d0B .d0K &p0C p0FL p0A p0A |0J |0>J |000O7}7557i:)*B 0zG 0H 0r> 0b> 0X> 0D 0v@ 0? 0?5ew 4, Bv     5Bw^ 5  5 2  UE /& ((J(/E U 5@*& E& & f&ËDef Ë )̋U&f &  m  f A N  % 5 ߥ& *  + 23E Ew n   Е-   0@A lW e`fÊ    E &   `@ ` B   & A @    &ff ''''( (*(("((2(B(:(''''''''*B/%&b&&"+ 1//1p//1\//1 //1// 1//"1//#5/0#5//$5//&80(0&800)8x00,X>40/,X>@0(00.A\L040d02@I@0X02@I@0L02A 40p08A 40|0?A 40@0EX>0(040EX>000HC00KC$00OC00OX>00OX>00OX>00OX>00((((0((0((((((&/ Q|V3 HEL [%B%I%B]//%P====================================User Job - %2R%6STerminal VT%O: UIC = Х/? %u~/¥:¥=) ȥ( \1 f¥: \¥) 7 :^1 H¥. &p< mwBwD RRh, (@Х[`1 ¥,¥/5 ¥]5w׭-Ϫc ¥ ¥! ¥ ¥  .1F1g1d1f1R 1.1.11Z1 % U~sEh 5 UX% #wp( h1$ x1 , P1 .1 6h1$ * Lԇ 08 09f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ ȥ/  @wҡ  XZTVnwNwL 5lY Fw Xf& ,e%jf& e%Zf& e%LXf& e%<E ^ֱ  \ ^w `` F-rڨ -lڢ  7  w`F w 08 0800O77555512""wU  t7 T7N 7F%, U%w>w<۱E` Z 8 E BU%7 %, wpU%%E~%W j1&1, > "e  :W#_W#Y W#RW#Y W-_UϱE 08%3Z Batch job - %3R started on VT%O:- queue %2R does not exist- queue %2R marked for delete- error code returned by QMG = %Mw -J65w.7 7 7 xwwvwrwnw wzUx8 ~: j4 b. Z E,-JP A  8Е: eҕ[ҔB~ҕ] rҕ.ҕLҕOҕG-*ff e%$%wU *-ff Be%wlf& 2e%wH=w61 w0w,&"  1 11211 1 " %B:1%D U1s12 ?1 SP1 < 1864_M @e8; 5%  w 1 b5wv EUw\&=~7 ͇=d1 f 1 08 09f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w N55jw| 67 7 7 5zUrЇUlUdUR W7 B4-2jPA .Е:  Е[Д~Е]C eA Е.A Е;A j Jj,Mqq1 e Q Q ]ff $e%T*w4Xf& e%w  8և1 @08f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ %3Z Batch job - %3R completed on VT%O: A@f05b5Z) EJ1 7( dU" 5T1 z؇UL1 j؇E5 Uχ5 |  1 5%f& |e% ^E F1| ׇ=0.,1 pf \08 T09 5%w&ff5"-56 f%6p' Lw&ŝ\ť1 ť+ ŋ Е ť0Е Е 51 Nf%6r,sm*ť$ŋЕ 76ҥ  %ʥ  7 7 ť .ť  ť   t ť  d ^ Z V R     8 7 fʇ ` 6 6P܀~wF6>܅X$ %  V0800O7}7557i:)* 5`)wF5w &f&Xr 5` s 5  U P`5 t  Eaf A jȥ$U P h8v8 Q U 25 $"5@ 6 %e `P~Е 7` 5% % 3 @5`f5 ׁ :5t  |ȥ$U b ,ҡ ɋ(dYY@EA2Х/¥![‹Y * %(%Y%Y %dEA dwU@¥/U  ~¥: ¥=$EOD Х" %" ̆¥" LE hEAbɱ<@h8w!h8w l08 d08888888D9Z9f9l9x99%NBPR -- *DIAGFATAL*- (%2R)%Nw D\:e +W# f8 ۂ8 8 B 8 @|8f&  ·f (  UPȇ ѱ&)_&& & &  & && && Ε@ 61& 1)ȋ& & & & & & & & & Ε  1 &  a@  /1:;;.;<;S;i;; ; ; ; ;<F<]<<<<<=7= K=#x=$=%=&='=(=)">*:>Illegal error - severity code %P %P %P %PI/O errorBatch job %3R still in progressSpawn failureLog file close failureLog file output errorBatch file already openBatch file close failureBatch file deletion failureLabel %2R undefinedError during send to Queue ManagerIncorrect ESB address returned by spawned taskSyntax error - $JOB does not appear firstBatch file input errorInput request from incorrect virtual terminalOutput request from incorrect virtual terminalSyntax errorCannot spool log file %IUnable to create virtual terminalLog file directory not found - aborted batch job %3RLog file open errorCPU time limit exceeded, user job terminatedLogin privilege violationSystem I/O errorVirtual terminal I/O was abortedSystem errorVirtual terminal output too long for bufferSpecified maximum CPU time too largeJob was aborted via CLII/O error -- file not found<!5@xf7 7  <`< @ Xt#e!#v8J8L#Fe Iw7   ȋ(ȥ!%ȥ/#+  vr ¥, ¥!¥:¥/ D %w %{ & `bZw  ЇBw ww `w7 Їw7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &f<     8  " .$ B  8̥ZḀ90     $9&<І9:98<9ʆ9:9J<І99ʆ9w 8 w .& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 00O875555121  ( 55@  ͥ#@>E5uu  < 5@[W& AɥNfv & fA5e&5 4Q4 ea  5  #5 55U  u B D5 w 5u |Ce4 e e B  5U@5U: EߌPA5@  5 5 5 05 5  5 U Hȕ5UU & 5 0%#@  uՀ5 U@ ATU  0!. 'p#!¥ U B%) 5   B:Aee&5EU@5 @% eE5 UpʥIʵ5 t $Uʥ 55 u"-e.Iaat EUb8bbbr' w@5 :J G ^eB   e4 U5Up6"PAHX*U‹UA!BU```wUU Ke eB ʥe  PЇ@ f H5G %`f 5  f   !&& & ސeP 5  5f R : L@5 > t(( w 4 "4 &$ w`e PPH 8 \&&e eLPuwR vwdf  >%8 5`0+&! u  0   P 0 & d%  5U e G 16 z,* M` 4 ʥ,  , 0<U: .% 0e  8`ee 08 6D Bʥ-  % 17ʥ* 1Y%V&5 '& eCʥ9@& 0c R  ʥ72& 0cV +  42% x`0. ,5%5  ʥ*5   0  # # # % 8w p 1ʥ* ʥ%%Z$@e.!%'  & e a  A ҥ*B 40 Jʥ*ʥ7  ˕ ʥ" ʥaʥz‹  C^6 BBd&5; '& Ee0 &  N #  e0 `IҐ `e   8   ~55    L ~      R  w޷"& d  5 85 :5 <5 @CC  a # C ˥ C<  z33   A8 X @ e 5,@ "ͥw pwݡwww<3 Q4%&& f f&     & Q4    ! Dް N`e ! & f N  & %t"   v ` cQ$    $ & 0gB:  ^ Y :A<W" 1t F 1c5:ee B3e "43"B Ί  c! ! Q4%8   &fA8   -5@  u8 %`6%   00O 8}7557i:)*  UE@T5  9 6 3  . ' P& &e` R 0e   (@%  &w !,8! U1(5E55e(5  B" " e"J B) u IuI55 ,5 p%Ue&  55  U  5wb U@E߁ w~f  >%8 5`0+&! u  0   P 0 & %  5U e G 16 z,* M` 4 ʥ,  , 0<U: .% 0e  8`ee 08 6D Bʥ-  % 17ʥ* 1Y%V&5 '& eCʥ9@& 0c R  ʥ72& 0cV +  42% x`0. ,5%5  ʥ*5   0  # # # % 8w  1ʥ* ʥ%%Z$@e.!%'  & e a  A ҥ*B 40 Jʥ*ʥ7  ˕ ʥ" ʥaʥz‹  C^6 BBd&5; '& Ee0 &  N #  e0 `IҐ `e   8 ,whA W !  @  4 f %/ 5 4$ 4" 4&0- "0- $0-&w wpdbD D/5% %%  S0Ԋ8cP @"s JD%b p w, <w5 tBh?lYjU@055   wB@pK5˥t)) ‹5Up55AɥAeu@A55U4 H ު >&fwf51 e !`Be`@&  Ae G`5 ?  >9.E*551 w 5e JCœ 5œ  w\53 3 & U U@ UG3  >& Nf  * && @& & Nf8 o &0Zwp V5D% .A VwJ\w e   >w  nBA%&  ^% 5E     ,@ DAD`wU5 2wRBe,  'SY !@ʥ_ e 0ε%wX ,@   .ҕ: B n  W1SΕ[ B C`Δ > Ef&Nf& "W<W>W[W]CB`ק&ק&w ?ҕ[e zҕ, pҕ] * ͋ 5 D wѕ. B@ⳐB15   r; ( F BU1 1 1  wR58Be8bbbeJbb#1 AA ܃ BP5U ueLEew\h@B 0 %!w Twwק&ק&@w .E5BAw  ևB  u BEC`"  D ccє D ɔɥaɥzɥ ۇ&e # .5e˔E00O87555512e0  fEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  A &5 ˥A˥Z.˥a˥z(˥ ˥ ˥˥˥ ˥*˥% ˥$˥_  ˥0 ˥9 ˥7 U   ˋ˥ ˥  $ք& &   & հ w  Ղ ͥ+ ,-..  .U.m. Up. ]<  ΊUE A .   6  X6 6 ev 66 2 .4.m t  `0 4"4 $e$t "4 &&e Ӱ 0 Dw&D& ӌ%%%p  55    f      l 2 w޷"& d  @`Bf@ΥY!T55W Υ5  A > z;`e Υ x1 `% Υ lΥ##e  :APPH 8 0   *5@f >:55&HJ1B(ҔȊ 1E c0 1 p   ` %lEwf0F5%$&Bl, @%  : E͵L `Ӵӕ, J :؆*l,ʘ `Bp585Υ  ` % 51 1 5BBl>ʥ]ʥ: N Nҕ. L&Bl.0Ҕ lȊ 8`Ewe  w @ ( C a   e%/e.Ґqӥ0    ef  >%8 5`0+&! u  0   P 0 & %  5U e G 16 z,* M` 4 ʥ,  , 0<U: .% 0e  8`ee 08 6D Bʥ-  % 17ʥ* 1Y%V&5 '& eCʥ9@& 0c R  ʥ72& 0cV +  42% x`0. ,5%5  ʥ*5   0  # # # % 8w  1ʥ* ʥ%%Z$@e.!%'  & e a  A ҥ*B 40 Jʥ*ʥ7  ˕ ʥ" ʥaʥz‹  C^6 BBd&5; '& Ee0 &  N #  e0 `IҐ `e   85  1 r55pw J55!w|  e@ 4 t 4 0f&  & eV #5  r 2EN& f5( B8 ̓%`%1 && VѰ 5  q8qm8 & q8t C `54ul4U ^C `5L H& && 5 00O8}7557i:)*r, r, ` ^ E e(" eb `vl %  & ̥ 4 f f Q Ɋ  !5p,p, -f& & & C B ,.6..66  Ζ5555 B    ~ς && fϰ 0 . |  e q r,r,   Ê @eL  1 1 &V 50- "0- $0-&U?0B%7CBe&ҔҔҔҒr`b  # A  @ B@ f > ـ PeC P   uNJ!F A B C  0f @`@ C  @ C B B V A f@ ؁  ؁e@ C u&5(@4 w  e@ 4 t 4 0f&  & eV #5  r 2EN& f5( B8 F؃%`%1 && ۰ 5  q8qm8 & q8t C `54ul4U C `5L H& && 5 r, r, ` ^ E e(" eb `vl %  & ̥ 4 f f Q Ɋ  !5p,p, -f& & & C B ,.6..66  ~ٖ5555 B    ڂ && ٰ 0 .  B e q r,r,   Ê @eL  1 1 &V  @31  ^4 UB8 _3% C7 B" 27  `   Vw<@3 44 4  ~8   m5 4 w4 4 47eC<7*6 W9W^w0 ` C` ::  2 7  )u`:NCA" &&   5w   wE5 .5 <A f "b <.w  . < 8 23 u u<u<76 E  H 8& t:tm<5 5 5 H555 5 5 5 &5 (<5@  3(A@ 33u   J`. <3 u-<Q.u < <5.3 e t @4@84 wC4#3 "` f ꆖ @4 76 `Х^  7 8ww H B3. 6fwB]V!' 5 5 ͥIu @ A B&VP 853'3 & & &&Ef&5   EH55JwE@ 3U@3  4 4 4EP  wBe2   4  t, t,  :   $1 `Cm: > 4 C:Cm@ 4w4 4  Bl2 B-@ v 6цBm :A7=60B`@@ ^e0b e0I@7C:C0B" &  pŠ5wF %B>C< T :7   6 w76 EB f C2776   P < D OE& |5 0 "0 $0&s-<s<5@00O$8P+8555512u7BB:   m@m:55 5 5 555 5 5 5 &5 (u 4B C4C#   ꆖ `` e @ w2 "r $ &   @u>u<5256758*A-<?A-<9¥e¥  )`e¥ B< Bm>   u:Am<p u@ 75 :  Nnq8 2 B"    2775 :B< Bm> <2 <C> > <נ+נ$ נ1ѕ נ0 :B>f<C4C# \  |  . j555 5 5 5@u : u 4 .ѐ :ʋ  :: :C .  4  S(LwLG0-"0-$0-& 44 4 ! efff@e w  Ew>w 5 , L , N L L *jwJPuLuNfV 0L5 @eL ,    `1! W-, A , LœE¥" t4 <w   e t 4 @eLW-, t 4  && ܰG "Q5 ,,@  4  ,  LB&   HwW-L0 uLuNw0 p Е Е  ЕЕ @e7|  6w TCDEE C5RW,VTN %COGC,@5F8 55 5 .$&m? f6J.1   ȋW W  R Cl Aw w >% 7 7  7JT eN  & & &  *& Ν@ -Y1 %  & & +`^ TF X7!RA fH Е:y& & & & & & & & &   & & &  && & & Ε@ ) & ) w~ , )-Uw"ы& & &  f&& & & Ε )*w@  !&N eT  s   7fTXTR eT  + ,( &f3 & & & & V& & & Εp  Zت xĔ& & &  && & & Ε ĵ1& & & $,& & &  `Z& & & +LJ& & & Ε ))5wwt  WaWz r 6Е-d <Е-V Е P Е:F Е W Е0 ~ B``edPPPP Е N'n BRO>PBRO -- Command input errorBRO -- Privileged commandBRO -- Command syntax errorBRO -- Illegal device specified"BRO -- User not receiving messagesBRO -- Message failed to reach BRO -- Can't find  B(ALL:LOG:JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC 00P48+8555512BRO -- to FromH*0$&T w 6 ť ť 0B Aa&3&f& v w ,5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp `C*8֋ f88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ h ŀajTI& af* n*`V @e,w Pjjlj ɥ@@aujk,bp B5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ * DlljaCeH###33 & L8 *~w  8jDl@ FTeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ 00P<8}7557i:)*  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e% 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f w @ *8I , *=)98 eB &&  U **e *Nlv ΋*.2 .  & #!)&eP(e && >e >E p* w eB  8 $&w  *(5<s1  U U@  R f&" p )'&M'&&**%*%0 *&* *5ND  <  EU   w *D x  ww ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff $ p &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( 6 *O*)@#0l @# 02ȕ8 H 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ B& & Pe# eB&B B *  eBe>  # #D #=0/H#@&0 # = e0   v0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w  ) 8C * ) *wp*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w  C#   D @)  6?0D)w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >&ff w ) * * wd46l082e&( H0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( 00PD8+8555512f)f )"(. = . B  E & v (.8Ae f"( UCɗ&+(e$&% **(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w 0 /$ ,:T < U@% DD%][%><w  wR 1  %,,:4 w l*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce   &*w t*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce . e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D`  *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w `BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wr141612epl2l0p $Mw<   f >5>Eu   e6p 4 8 X 81416  N t (  ^ f B&* D*> =00l&8el2 0 *w eE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w *) l0, *) $ )*)0,40,6 8  **  DP5R RRR f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ =D \ `p46 f x64/=  @) 0  8wt 46 8 e*w: w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 8e2 ..8em,0l0!D0e6p 4.) &f .  e) .  e6p 4 08*w<=p!Օ^(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@,*1 4U8UMw@ w HB 00fep=& /e`pw46f %8 E 00PL8QM8557i:)*D/D!D l0l8epl0pɥ.ɕ ~wnw  ) ^ 4 fU D%  BA `6p 4p`4 %60 40,0, f 톇,, w      .% v eB U5UU f plp & NeՀ)*|e,Q Y F TITITISYLBCLOVpr?@ ppi 7 p7 7 7 7 R 7 7 D 7 < 7 : 7 : 7 7 4 7 6 7 4 7 2 7 0 7  95& D5 9a55 5 9R 9O 41 9J5r j9C5d5X5N 9 1 l90 0 :952  5v 7 Ub ɼ  .95 EUU5 5 ,5 7 U 7 ~7 7 |5 8 8w5 8 8& & 3x  200QT8+8555512UFDDECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXX=h?  7 BRU> # [000,000]BACKUP.SYS;1  ZXX  t        8  T00Q\8M8557i:)*%N%VA%VR on %VA%O:%VA%D%N [%3R] %X Tape %M Disk %M . Press "RETURN" when done%NFile ID %P LBN %T.%N%NFile ID %P,%P LBN %T.%N File ID %P%NFile ID %P,%P VBN %T.%N%NFile ID %P,%P "BRU -- *FATAL* -- BRU -- *WARNING* -- BRU - I/O error code w 7 P D7  54E 55 ZRTEt,>:%:"2"E .UU X7 D $ < 66e  66e 775 7w4 7   .& $  C R5 - pѕ"D ^w5 f 85 A 7 Ҝ7  ~ - \ ȕ]  e7 z xr4 .7 f l ` ^TT LFF  7 ,-JP Е Е 7| 7% 7 wD  % h 07 l7 l7 fw5w F %E 7 5b64$]"5  & & 5jД  D  ( . W   " WAɥZы  mfRʋ  ҋ% BOTBPIBRUEOTIDINDEXF.SYSIOMFDOPENRSXUFDVAXVBN,9^w~W`z}K# v_RuL`;,9^w~WJm9ahw~WJm9a)&pt!w:<% N t!w:<0 t %: \C^(}""` \C^K(KQox# v_RBx@}[MDv}[MDv`ԅ}[MDlr}[MD"h)""`YyHq&o~xw`}t qev_sp%e}&i'XmnL9v<I qZI9r<R qZI9r<W8 kM}X:""`8|X88? }WLH!8?}Ѕ`z;rz`uqE_sp{DvWoLYZa\gIv,{Dlr{DqE_spmy&mnL9XkLe \C^vat!^t!^UNEX"` H}`' X""`K"w:K""`K"w:N`:w:""`Iqv+_tK""`Iqv+a \C^v""`Iqv+ &""`Iqv+ &2! =rp_sp""`uL`;# #t!w:vK%K/ \C^K&Hl"Iq_sp&Hl"ZI9r&IIquqE_sp&I} uHZZ ^K&I!s!NJ"""`&I4K`H fwL&M 'K@&N`' X&N`z#"62p`[q8Z2l*"h)""`2""`e4B[MD"h)""`e4B[MDqE_sp,:Y Kw^z`)&ps:`L;!vi;)HmnL9vt:#&Hl"Iq_spt:#&WqE_spt:#vv,y:i~LQt99#"v8Wp`8;8}@:`8tvp`8:`vLT`fM+:`M sZL"K69#"_a\gUN@:" ""`:)e j)R:)!y;:)%:W@:)r}:)5OpMvQ1ZqQ`&Iv`ԅ4REplr4R""`R6x+_WST62K !^t:;_SZSZE~pWE} uH,]a w!@~Y \C^(}&FaY&8"' XY% mnL9|X8v +-LqY z2 & #yxfXZZ ^Exss:`L;!@~Q]:FQ%:vE`W_spa\gxxge!X[qj@5aYs:)h;?WL 2@e= 6]zp8"`Yf] y_w~Wpm}%:dF%:lvKq`?}U U7lw 7l 5H,5@@56$50 w  0 855w 0f wV*w v߸rߴn߰߇%N%N[%3R]%N%N%X5:56525 *-5 " 5 5 5570*f"eؤ57  N5.>D00 wp*%NTotal of %T. blocks in %M. files%N8xۀp׀l| x  %  e  * Hw Bf *   ! aW ef eM  ۺt 7 Lݨۇe _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM *** && d pW c fW  \5 n E 5ΉU & 7   wՇ  @ B     Rd   77~ lՇ& 4R 5@$4 vtۢێ۷4 J~& L Ӧ7 e 7E@۞ۀ5 EEP 5 E 6 5t7 7 7 R5 &&" E bx 4 4   \7 r    d  Eet b d  -- w5: $~  5r55 5 Z5 5@B 5 B D VNrtVX7 h7 f7 d >(J%8%cLcD0t7       r 7 &۾ ZLm؜ؼظؚ5b 0( <(T(f(x((($( '' (((,(     $ 2 4 F R ` n ~         !! "!2!F!T! ^! j!z!!! !!!!! "" "*"8"L"\"l"~""""" """ # ##(#8#P#h#|## #"###&$ $$ &$ 2$@$N$h$v$ $ $$$ $$$ $%%"8%@%Z%x%%%%%%%%%&&$&,& 8&H& h& &&& && &$ ' ','"N'^' h' t'' ''' '' 'ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw d&& D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A600Ql8M8557i:)*D Ћ  AP AЕ Bf & & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& ezA  Е A EA EЕ A ZA   $Е. B AЕ;      w p ť ť 0B Aaw >D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   "Bw ' UD$BA L&( U BQ Е*  & & @( f  e ee e '&1 jS8T vSe >E p*  w &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  * DEe    *1  ˕03 "   ˔Ӕ ʥ7*@<#8w  /$ ,:T < U@% DD%][%><w~  wh1  %,,:4 w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce pe%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` v*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `((   >: 5 eCeeB  8 T$&w $*<O1  U U@  f&" '&)'&&* *%0*ND   EU   w b*D YTf(e<ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *M=f(& e %&&eH =&e0  vU   E > >E=uf Vp  w00Qt8+8555512w (CB C DBe ?DBe(e$2e  %[]%<>  1 >(eff Ne(   #llD &eJ Ԕ %:ԕ: f& f&f& & Ε lle  &&  m  f A N  %5%& w &Ba +- ʥ# . U 0   b   `     f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w**   f h >5>Eu p  8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w" f( f)f 82e&( 40 0 0 80 B0 0 0 0)#0.)"(. = . B  E & v(. 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f w eE D` bl lrw   B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) &f h D e) .  e6p 4 f08*w<=p!Օ^&   `@ ` B   & A @    141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ 0w  U8UMw wL0,0, f 톇,, w      .%  eB U5UU  plp & NeՀ)* 8TjSS+8T8^SvS-8Tl^SS/8T^SjS1WSS1WTSSS>HqtSSHHqSSRWX4SSSmL$SSoLhSSqLSSt@S*Tt@ST@$TSSd$TTdTTPL^S7 H % 4e@J "", @ 5` 5T&N 54&\  E` e 5 5 Bw5@, $n j5!5    e1UH ֺ lE@ʺ  e  R$ R$ Ɖ T5 0H6 t$w85@> fw& dw  5ı5 tx 4 4  J7 *5v5l8 5L e-l eb R$ 55R$ Ɖ5԰  R S SJ S S S@ SP T֒ TF T T00Q|8M8557i:)*5  (Uֻ5U@z 5r U5XU@R 5U*7 & "55  ^ b f j E@LEDU > V5 ܲ|W5βW :5 )z 05 17 h7 f 5BL>H 2". 5 `e5VU`P E FE>7 U߉Ep `$ )75N )56 ) )׭  )׭ ׉5%5U`~ $E tEl7 HwhU¹pz߉E 5z;Ң   ܈  ۈ  EeL77-߇b 777̰7 ۇ SHq Sr S`v Sx S~ Sk S S ~SJ vS@ nS fTF ^T VT& NTt n bU hm   HP  %P% U 5< %  J%P<%UF 4%" "%UF 56  )W wxm S<5   5z1Nɪ@ L B" W,COW,NT e w!w`f 5 ew :6 ʰ&E < ư x:5̱5% / 5 )%HEZ%ADT!%UFJ |5 %UF4 %HE,%AD&   5V:5FR$* 52xW  W eWe xW\W 8e W "!  eW e :]  ȕ]  ew*%NVOL%M. %VA%A%VA%A%Y %3Z%N[%3R]%N%X HS @S@ 8S* 0S\ (T֒ T T T T& T4w 5 funhj ruhg 8B$  wa@aw, 8 T8w&  *AdBbAep$f   P aAAf@pnp ( C*8֋ 88*Ë/AB`f Pa `WaWz ajVu-nhw8ɥ;Ma+wנ$å0@j  a  0w@ ŀajTI& af* ^*`V @e,ɥ@Iaujk,bp 05f f݇ ȕf D@ ͇ 4eSY e,5 funhwe,aja`W- f`nwvuhnw@ Dllja!CeH###33@# & b 8 *YY 8jDl@ b TeBT85l@ (@( D eB&< D# @ An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@j aŀaj@! bd z= b]d d2 b]d N' b]d 8]   b]d    (U: @Bm~ʕ 7 jWWWWW|@Cw|4HOC%w\ W#  B0  e ff e U  %ee e`u W.   From: To: Initialize output disk [Y/N]: BRU>LBN(s)=^_NO^_YES /:,+-) 7 f wfe xS   j   `E    ` Eew W0WZW9WA &^ȋPwF&3&f& v  S8} S| S eeȵe ~ d DE  eVȵ(e &e , %&$@A 55@558 eBeeDeȵee&e e00Q8+8555512   QB4f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ *  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew ) 8C * ) *wP*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w( C#    D @)  6?0D)w D) * lw46l0w <( D l 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# Rw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  R߱ P3)/ :ߟ#( P) f@#**fff  0&*wp. tB5(8e$8w2A&(e v4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 T00ĥ݇AĥĊ  ȕ000 H0 @0 &*0 @ n& & |e# eB&B B | Ⱅ* ( eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w~/!0/ l0/!p!0 .=p0p2w v*D  ww X w N& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  *) l0, *) $ )*)0,40,6 e6p 4 8 681416   d 8  އ**  DP5R RRR =D `p46 f r߰64/=  f@) 0  8w 46 8 e*wR >00Q8M8557i:)* =00l&8el2 0 * Mw * f &* ݰ* B 00fep=& /e`pww  ) ܇ * fU :݅%  BA `6p 4p`4 %60 4}APPEND }BACKUP_SET&|NtBAD4|BUFFERS}sCOMPARED|tCREATEDf|DENSITY | DIRECTORY|DISPLAY|@ERRORS}EXCLUDE|EXTEND| HEADERS}IDENTIFICATIONV|tIMAGE |INITIALIZE|INVOLUME}LENGTH }@MAXIMUM}MOUNTED .}NEW_VERSION 8}NOINITIALIZE } NOPRESERVE B}@NOSUPERSEDE N}OUTVOLUMEX}tPOSITION v}sPROTECTION}tREVISED}REWIND}SILENT } SUPERSEDE |TAPE_LABEL}@UFD}sVERIFY} WINDOWS DOUBLEBUFFER @SINGLEBUFFER DOUBLEBUFFER @SINGLEBUFFERЁGROUPЁOWNERЁSYSTEMЁ WORLD BEGINNINGBLOCKENDMIDDLE AUTOMATICMANUALOVERRIDEAFTERBEFORERESTORESAVERWED / .; 89.[,]@2 2 *55U7 7 n\xj       ԇЇef*w5 wE  PwE n .wvrn7 j- f-؟[] U  EܙW @ W >W EW W ŌeW |W Z ȕ>H4D0<:860B,>$ w  Dz mtPPH^ X R L w t $5 & & E zE n5h `5Z\V  L @_5 , 1  5w<  `5  Œ$5  -֏=  ~55-f`~BU A5a U5| 5@p 5d5^u5N 5uuBR 5 &  ֋ Ћ̋U5 wܞ 7؞R  7ƞR NN7  Hz5 5U֖UΖ5nwz5`5\wf5RwZ5FwN׽f# wt p \ L7 Ԏf\ȕf D@ ׽_"ʊΊƊʊRCw N7-hb -vn׽7pB  ׽8t  PLĤĂ  TW. @ p wW; 7J7 č7 ܉5Ή5Ԍ5 Œ  rlh55 55؜W/ W W 7 F w>Hq   vwЁt \ wmf &U l\ȕf D@ 2 ׽wrml5܋Uԋ ڋ5@ʋU@‹ċE@5wBX  7 Z eAw5w X  @   jUENG5F[*X5 .Pz*X l7 ` 7 P751X w w &7⊇ 7؊ U |7 lj5ऊ X5X5!X &w5x  9 wx  s L  @ZW,w e4w8 wFX5AX Z 7X5UXUXX׽c fw`PCww Hf-8w"~7wzt  =r =j=bzȋnȊ -hXShTeN#=0aȋU 5&-q-F׭׭ >eܖНږȝҖ Ζ-̖MFU, $&5@̈5 Ĉ -MUE-MU U 00Q8+8555512E 7 Xq7 Rr7 Ln׽} nf- e`\W!Muu׽} ׽}I}}tP tW*t Z D% t FT W. W* @ u  W;  W*  v5J   J vr~ 5TnV7 4f>2T W( ހ 6W) ufW: w X u5ĆU   $w~ B0 1 . ,`*`(W.w N  wD B0    `W8 W9W- w   W0W9 J5n h  ttSӁ ԋˋ bf W( & W:HW:D &W-m Hppe eXUUUW-Q  EL dIED07te:UUW   e < (  & <W:  <  W) f 0Օ0 uUF Jft (W! U Jz`R& ȋ W:wTN5ƌy W* W]&UC t fW]5 5 f U =W,9 <MW,25 W* t V u%5: W] u00Ћ`W0 W9  u3 fw ˄(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$5ޞl15؞Z-(|-fDB9-^DM5-VDR1-NDU-< {->DZ%-6DW!-.--{׭{%׭{-{zUb-{׭{5 {{7 U&7 U7 7 75@77>\5&eeST &"5 5D\$7$T5 0𝆕,5"(-7- 5.e< P 5 킕-d Ԕ-z Ȕ57 v7 t 5 d7 b55|HD-U\ ,*   wW 7w΅ me5`emmwܜڜ5 ȜW cW  W-ܓГW-ғW-ȓW5wt n wLU w%wRwеԵ̵ȵµ e5\ e w%z '5>%Nڪ%NԪ-Ҫ-̪-ƪ - -5--- 77%5e 5@E@wd7ޭ5 777 ET|7 z7 t f؉w7e 7,|5u5 ͉55̉w55ω7 LUδ E7 ܳسڳԳֳ̳ ȳ 55x|  |5@twUd5` m nwv~tlbvdE@ XT. fbى.<&, "wx-  e5< %%z %e w5\ ETUF-5D545, e 55 5 U @-JJ@55 5~mвв5Ʋm²Fw @7   55@-JF505v %DAkE@f ±7 t7 | " feӉ00Q8+8555512w  5"., &fe|  55 ̉ ,5رωwb5ʱ͉5.5 5#fE ee&f R  ˁ5 hw @5N  N5@FwU6w5. w  " Dw-:fw| &55 5m5mܰ`w Z7 Ұ&"& 5 N45 <5,w ̯    a@ e &f    e@ e@ eew`Ԧw Φ7`ʦw ww E0.U$ )w 5@Ħ^XRRreE@4,U֯ U@ʯ5 v5p 5d 5ޮԮ ډ < ̮ Ʈz5 5 mfjw d5  T5L7 H (50 5ڦ5@&$$5  5 555 5 5Uޮ Eή "7x b`7 ޭ5w.̭wޭܭE 0U% ww5BE: ve lwbpUw&5 5w'w \ w dȇw'5 'w' ~'w'5 x5r 'w' ^'wR'5 w  w ȇ5> b' ,'5 (5"e ̇E e  50%ی%Ʉ? ~ 5 5 ̇w ` 555 5mܬܬ5ҬmάRw L7  fԫ Ы̫U̫ -j-b TR 5أyUUm5ew | 5@-55Ы %DA&eE@ w 0Ƈ&*f&&f( U55 t0 -b\X5y@5D5<ew Ɇق7 " -p-h5e|w vFB7  . w w 7 7 ҩ E `w e  ȩ)©Т5$5  Ω%ȩ f ` \v7 t7 j ƆӉ`w ć # @ۇHEADDATANw Z  55 5 5 5v e`e07 x5 TܨШn-ШʨjE !  F`` 0`H V *R7ᒨ7a 5@8ee~wmtn  55   22e55 ueef .f!3 T !5 3 Xf)%T  ا7 ҧTT  5\ 5 Tw ‡w ~7 ,U (   7 "Xwhee 5 5 5 25ԧ 0 `&  `e zB `¦*j ^C7 ğD7Af4d7 |tn7 X vӉ7 tji @& & & & f& & & Ε U  wewewE 7   w`e  & & & &  j& & & Ε -XP %w %NFile ID %P,%P LBN %T.%NRecovered $j Fk Fk Fkk Fk Fk  kk Fk k k kkLkTk8k6k zf )R k[] 5) w jlh^nz7 ȣޘ`7 ^֘XјwVrR|xx<t BF Ҽ 4"R5:U@ޣ@ r4 6w, & < 4]y" ` ]~w5lwbEX7 ^Z%7 e7 ( 5Ux5-5)# xUޞ*¥Dwp̉wj" 7*wHwJA PA :w2w. #5 "@# *¥ʖ7 ʖ7 Ė|UD¥nˉl& v  AfP  *  ŀ d\Uڝ =ww|wx 7*&*:8wawa7 7 7 fޕޥЕUT7 ʕ7 ĕ@5BN5:^ʕeʝO=5-V]|xzvjfLH :6 EȜʝ2 2 051wE57wJ wBxԔE"b5 UT5N=7  W D E E  t `w ؒeLUܛLP Ē 0-,$T% L-  8 m]w |)tel-h ^-Z“ & ew ޣ7 40 @n-cՉw 7 |x -dm\7 N햒HU֚ wa& ` -fx  f @ e\ee`  p H ܟ֟hw ڴ 7 ,x Ģ<87rX7 V7 l ^ V-rw. lw fx̉U6rnDjEܙB]@    7 5`%ؐАȐ5 -$  ~ xp7 7 ҞО7 ` MNRJN@D    =eB  w5w 6  0,"5 wJ5@옿v v r jhΏ\ʏXN5s5 ^5XUw @ 7 \\` ֐  E e  h 5N V5>X1 w w"e ffV\ ww e w ZꇷT7 J  Ă `%w.U 5 ffTrXV7V7S7Py:`L<6(݉7 $Eʂ5>7 775~' 0 $ 7ݑ 7`Бw ʑ5JƁ ^ 5$5 ~7 7 7 7 Etn`mZn 7 Z7 X pwJw .$hBh h  w. w(7 &w  E z `d $) A T  A @% A ``` ` w r We0,a  C`B W  R C`B H  C@w<  w!2Aapp&0 e   Ҍ ( $  p pm p mp  e -w w Ƅ(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ TSt LSN DS 5)%Eefffff f% EDD%][%><  1  f &* f* Mw00Q8M8557i:)* 7 ^5 5X{5 w5D{؂~5 5ze U jq q, UN7 |7 z{v^-~ fnFg< w@wP<602, ( $ =- 8  -  eW!cu 55P P  | -z| ^-tt!l Z 6D\ H $C7<782. 9z@pwDaAaef `&a   *x &xV$xx-w7 7 y^ 6Uv ~ e q q,   w~w wB w @Cmw w-:<-24 w@`   -lww ^y@pw* ||7 27 5ă&|EP5 , 5{Um%Y&2|E waЈw ʈ  5R  5@ НD>wa:w4{${ H7{-{* {"5{{{{{e{5؂&VQw 0-({6 7,w*5ewf{`{E B!WsSe<{e 4{w 朇5h3,x &`D 3 3 D  Kӊ KӊSez#a#cz$ ӊS `@ e zezw Be wz ! w 2KӊSpz HȊe Ha` H7ZzeTz %Y ܀w w z( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB  b w# w&* =*ȥw `p!2 EW!p0p2(2,2 һ̇#( P) @#**fff Z ȿ&*wd. hB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u # eB&B dB J* ̾ eBe>  # #D #=0/H#@&0 # = e0   F0@e 6=#02/002# @#?@#040 6w"/!0/ l0/!p!0 .=p0p2> =00l&8el2 0 *e6p 4 8 R 81416    P ƼB 00fep=& /e`pw *) l0, *) $ )*)0,40,6 Bn A%w>vwwN '5@؅#7 vw҅wX\ )6ƅ% wu7u\҆9e UH}7Z}7X}7 uHw 5t$2}uuuU}߉ w.5t  U|w^kqq7|5pt"z zua5Ht 5 @t5:twwh P6 5 Dw(5twB@7  B5sU l V-P׭|Ԅ%΄ƄdtmU00Q8+8555512{5s -s-s-s~5{"~ n dhPd f`sm%F9 04 %8E^{("sl"5r5rwi5rw\PփU{ >5ރ 5rrUrm5riErdw D`sJs5|r<5@z#5lr . wUzz"s߉*ss5 Fr ׭z7 z 7 z5@vzw` 8$%!7r wtUn z nntr7`pr5qw5 5|qU 5yP @ 5Lqy 5y   5.q%E|y5 qM5q E`yE Vy UNyU Fyw5p  0 5p5@ yy5pqnqUxyhq50p5pw H ) %`tUxpf t"5x qqxq5 ~x pUrxx) P @@ rE>x )  ꀈp"۾ -P(׭w%  hl UwhpPPw z%HDB%R1B4%R2B4%VOBK%L1BGoo5n -Bn>-Bn:-Bn6  )  )no x p )P \ v6B v w@5XnAR$ 6׭v   >P $%V1A"%F1AI   5m R$ n|nUuvvn5@mNR ׭u&  B z 4 r & dl~%Pf~%UF@T~mg  0~7mkP n j ~7mg%EO@z%F1|@%V1t@ 2  U@)P@$L@    }5t Et}|\$}|\5Pl5Ll Utt mml߉ 9t!5l   )}}}l` )|%7l5| U|tU@s| EsE%G5k$5| 5nk5s|7 (l`f| a )f|a w l5(k5"k 5@ jszsvsstdp`ND 54s5j5jc 5jww5j5j 7 4k7 2k7 (k7 &k &k6 5vj |jxjtj#  @Ҕ 19>P50jC5&j? 81  p/00vRRR@ P P\X 8 , N P  r  z-zP%z׭qz%z  Uq  dzjgeP Pe :z"eP leP b ^5h5h R$  .  5p( *e1$ |*1 %HD%R1v005Nh&D (%HD %R2& zxN fx V5g%5g5gxx )xx%EgtyljR$  )x#׭xx8hJh4hx%% 5Hg%og5@o 5(g5$gx9row x5 RoD =@ P5 *o :  6 '  r  n       L  H    5hf lP beP XF'U@n%,f7 7 7 7 @P$   E Fn )w 7f׉e Bwf7f7 f7 fVOL1BACKUPD%B1111001001 HDR1HDR2mmpfw nf5m PEmmmTfw Rf&fmm w`:fw 8fm 5me0mmfw f5@lm 5e5 e5ew<E EEu v5(mGU muvlrl mUm5lw. )Elu  e )U%wElU u N gUx%n`Elxukk lUrl5llw )EVl*u   )U%;E.lU u  "U%)5c5c-ddƇ-dd00Q8M8557i:)*5k5k7 k5 kNE kUkG7 Jd5fc5\cwnd,ddEFcUkU kkUzk E fkEbk aENkwU@Dk ܏E@:kwj s x۰iEDj/5>j 5 4j E(jU $j-EaU jr ,wj5jEiU iPiUi5iEi  Ui7 i5ja5fa'5i )Eir 4  w5i )EniBr  U@bi5a5aU Fi w%N5`I5!qPrq )q *-qP,%EOJ"(\r9qPqۚq )q -qP %EO4a*aamy aaa5hqqlj (`*5 <ww5 `!5`e`w `e`w ~`-x`z`-n`p` 5 h5h5@ hwlE&7 pU 5gw5g!%(&f$    щە$ wdUNf &5pg$%UF2%HE2ɉtf_oEfefE ew_f_҉Z%DA~2TEf ۅ  B!e777 wa7,_e7 ft_7 e _6_Ӊ7 z Jrت ؏& & & & f& & & Ε  E #eBae5Pfe0e0 w%(w $ 所5E5U5U 5Uy5]" )n \ %%wx^*^^dEe7 eLn>n8n ),nn0nف%NFile ID %P,%P LBN %T.%Njjmm0m5 e$mm0m_r|jX )mmmw(5dwwN5 dE d5@c5 cU c piNl5c  -Rij-Jir ) ) "i7\\[m &[*5hc(l L@l H lwlll $klkw5cwZwnkwk ) 00010001000100 00000 00000 000000DECFILE11A U0414404144 M 00 EOF1EOF2EOV1EOV2 SX SW ꒾Std ⒾSX ڒS|d ҒSz ʒS^ ’S<%NBackup file ID %P,%P LBN %T.%NRecovered ʒw s7 s5 H}w5t5t5t5t-ss-ssw-zs5|psnsts ls -4w.U |m$Rsw Ls&@ ts-lslsi&s$s  Ҧ w4q2q,q,q (q W!f>@= `%rADA DAr@rB >-pDAm m|r5Amrrw r9mpmpr5AApRe r rjrfrE^re C C` fe tws 8s -r-r-qe rw r-qq-qq7 q q qw ,s.2%q 5r5rds ^sXqdq҃%\q`q-*w$U z l0lo 6n,n2n(nwh5Dww*w@7k5nwj w~ww5n 5 n5nwww H kNo5n(5@v5v (Uvvkk߉lko5 Jn7 v5@vUvw UtvvHkDk߉<78k 5@Vv45 m0 kjk 5>v  j57n~ j57p~7~7~7`jw 5u>5 mv5~m 5tm  T5dm 5Xm   5Dm : E u ZjU vuw5mk5 m $  k k&l5l5@,ui5(uimUu$ui50l 5liiw ^iVmti5l35 t i5pl5bl%5\l Utzi5Hlī@}7 }7 }~} jdz}zt5@ft  U@Lt &kjj kE *t E t JAUttp?ht w^5k" E sjdjj`j :Fjۢj ^-? Es @Us5Bk R$ BhkUpssDh5@k 5 kF0h&hNR ׭Hs0jii i i i 5jg w~%UF>>%HE6>%AD0> 5pjUrrgip>ioo.i7 p LooooooooUp 6 E~poooM% e M%H %z 7hlh7 po7 RoJo 8feffff f w`f7 fҀf|f7 zfvfLdfH`f5xg4Pf0LfUo-o*P 5:gP 5g  UZo  E Foeew eE@o 7 :oc2v7 0vݨc*vcuwUo ppv nnnzcnvcnrcn n mmm e.f e  fcdd , 7 dd5Dn8^f HE 4n5 eU&n5ebbv t 5eEn]bFv b4mbbJubFu:u 5he4b$u7 "u,bu'btvD Z t Z t7 dd5 "escRdc Hd EXm :ULmVm8b 5d R$ ~aeUmma5@d 5d3aaNR cLcDc dc Z۔c P%UF7%HE7%AD7}d d Fcef@c :c 0c0cw`,c B4c0c7`,cw &cE ccccccbcbd7 bbBRUBACKUPVOL2tB5c fwTdw twt\ )6%sKwswsN+5Lc5Bc 54c5,c s\ s5@st9 s5@st9s7c5b5b\5b\e U k7 k7 |c7 zcH(s5j Ej0ss\@ss\w ,E j7 RaNa5@j  5Bb5@j  R 7 `a\a5b:5@lj6Ha`` : 4a 7 75 _     ```` %@ nU@iw dw P5a5a 5@ iiii5na"5haN`4`,` `5DakCOkNTk , i``__ P` N x w R$ w U,iU `ji_fi_7 ^iZi]n7 nݞnnn~nU``` R  P  XN 7_  @P 7`_ ^ mm@`  f  w__`_\e_-__ *pR  h 0`Qh`\Qd`XQ`` " U00Q8M8557i:)*g 8`D`:`F`0`<`   P P ^m(hmem^m^7 ^ ^7 ^]l]l _ ^^7^ef^^^^ wl l7l :l]l^^6^ʝ2^]]]]  Z]0gR](g7 fEfw B ` e ^ _ o]o] ^5fU@f5*^5$^f65^2 ^ \\\\\\ \\] & P!5 f7 D!\  \\\\ \|\\x\w D :^5~]  R  T\@\\<\ 8\w 2\7 2\.\5<]-e h\\d\\e \w \ XUlew ]]]]]7 d]fd7 dd ~Z b]`]n p nr]w Z[|[ v[f[[X[d[[`[[ l N[5 b\#} W,COW,NTe w!"[B`$  waZ[w T[w ~  Sz S4f SW Sf Sf 放Sp ޔSJv ֔Sx ΔS~ ƔS S< SHq S| S Sk Sr S`vc 5h[5^[5@cw5c0Uc ccZnZ jZY bb tcUZc5Tcw:EHc Y4Eaɞ`U2a5.aE&a x bUa7 a5 a^ZP.L.5X5` E`i w 5`E`i w5@`wE& -`WW cjW`WV -UF-HE-DA-y(5@`w54`%(&f$    щە$ wjUf &5_$%UF$+%HE+ɉtf,XoEfefE ew X^X҉Z%DA*TEf ۅ  B!e7v7v7r wal7WZ^7 r^tdW7 N^ wlWWӉ7 :jB2T: 6& & & & f& & & Ε  E &eBae5^ee w%UF(w $ 所5E5U5Uz 5rUjyTU Tw"gVRVd]E]7 ^%NFile ID %P,%P LBN %T.%NZ SX SW zStd rSX jS|dDiE c&Z 5c7 7 7 m5 lc-Qwz L6ZY &Z 7 p7 j YwF-YVU cYVFmD"HE"DA"UF,CO/,NT+ (U b,@y    e-7 7 U bwxwp".M  7 7 mW". e- -7 x-xnjYmhY\X`X X mXT-XXU b7 <87 0  &- '- # 00Q8R8555512 m m -7 - e & \XmVXW mW-WWU Ta |x trr5*aww"HE&"DAU a U aE`"%U`E `"UF#5`) w5 `E `5@`5 ` U ` -7 -7 fh5x`  w zm P  |u vw zw z    ` eeW 0W! Tw hz w4w,w Zz Sz S^ S<|m,Š Y TISYCOSYTICLTI~0FZ|TISYCOSYTICLTI( R0m|0ASN =/LOGINDMO /USERASN = ABO AT. BYE -- Syntax Error BYE -- User not logged in BYE -- Exiting BYE -- Error or timeout from spawn -- Connect time: hrs mins secs CPU time used: hrs mins secs Task total: XX-XXX-XX XX:XX DDNN: logged off XXXXXX Have a Good Morning Have a Good Afternoon Have a Good Evening Have a nice dayLogout user ;Zx0NJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\ ң A ң֣  (457:X'fgj o@LB:[1,2]SYSLOGOUT.CMD Q ) Q|,F *6H`ln*,.0DF@F"$&XL& eU,?b< \7 7 7 0 75@v,HT zrU1eХ/~"ȥNȥ-ȥH BȥS ,ȥX " o w 5@أ "U 5 E 7   5w> ( 7 7 && & & 5@ ,VT  r  p  ^^ \ tU F B   : PE S    CDC,3 5 ww̨ CmE5XmdO TI: ~ <A vCd B&Zm T>m" h 2 H  V 5 6 C   \V    JV   AW,VT mlRB5L5@z 00R8M8557i:)*f :=IW  W W 4 0 neɕ I Ѣ&P~ 7 P 5@  j &5 5@ 5E U 0 0 5mv?&j   d ~~ zu5@TQҤE 0 .0 00 20 4ȤYWt7f \?0  &  5! E?)& & & & & & & & & Ε 5@  ?,| ҤE ȤwV άl O!^I-E LA :5;57 : 6"  $)5 A f *  55@!!E #  & -*S1)Db(^F,8 ZP :P~Е Е[ J H Е,  8 Е]Е w fՋ w~xx-fR#1 & &->R1& + -&& &    ܡT~ l bыѝѝѝ7Tы wH-Q41& & + -NQ1)w& -Q1) 6Е- <Е- Е Е: Е W Е0 : B``ePPP<Z &1 .  آȥ ȥ   Nf F | f f T ' x^v -%|  A B* Ef : -J%| %| 56*@e( @e<  e< e< e em( ~Wpmx [ b a P h AB    A < 7@r<w p  ` ~ P nAe @衇 Ћ lh% ` ش    &5  2w2آ&& & & 0آBP~5*m d (     f | @ HH:MM:SS =  Е: Е: ȕ Ћ 7ȕ  & +&  )@)W Е0 wJ& lE (Е:& NM& & & & & & & & Ε w ' UD$BA ^&( U BQ Е*  & & @( Df  e ee e &3&f& v  5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E &   `@ ` B   & A @    w  whw  w^w  wVeB  8 $&w n*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  <  EU   &f    f X >5>Eu   &ff w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w(e00R8S8555512ff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w 6 /$ ,:T < U@% DD%][%><w  w$1  %,,:4 w r*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w z*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 0+1(e  @%&p*w f( f)f `8Ae f"( UCɗ&+(e$&% **(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  XDEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@|a,aa Y :SYTISYSYSYTIOV~Z#H$| 00S8M8557i:)*"!i   eAe]0^N 8 }l N & V 5 W#R ~w)wn^*>X"R%" e^f' CDA>PPYMMMSMTDY<DLT\d,dlt @ $  @l|R   P P t   NSYaSYsySYu~먫D~먓sq$CT$u~>MCCCKD8DFF~GRG gHCTH\}J JJg'JKJbTJwJyJzJÅJLMsP\eĊeirxxxvvyf a'2s N*}BxC ©Fݩ(ީz} NCT,K,K,M6}y\}zds-~˪s#HgAqAvrAyFsKQKZO_O`KOKO NRB9R9R,:RR;RSTTTTz}W|q@w24""^&"" &((uLkMdJ,t̫̫2̫r!̫pEѫO ѫ,xѫBxѫxѫhѫZfz}FxZLT5sӍYlh.+{p+{P}0{G3{3{l.uX+guL""%CTxd$(:DCCjCD:EO E&H HH:dHHH;JJJ(JGJ:dJwJLL NLcccJXcTXczdcyiiz}rr00S98555512rrr|CTKKs{GKkMwz}[((yz}t!xxxxDr©LEȩsߩ0   y z}T+ ,!1U1'1CT1T[14f78*}T..ӪӪӪת3تتlzت*}۪<} qsQ}~B !CCLFK L:dODLOȒRX^RF^R*}WWEWkrWrx@t!*}S\q̫` ̫g'̫sͫdϫxdϫdϫfϫpѫ4ѫDLѫjSSSSS2g*}Mt[q,tbTgr5hh Nh}v~oM 3HeHVNHpHHa;'yI;U#U]RUfShShyso^?SYh f| CDA -- Exiting due to illegal trap - Snapshot dump being attempted&.& heG& & & & e %&<)& & &  D& & & Ε T  w  %NCDA -- Error writing analysis file%N > > > > > LIST COUNT EXPIRED%6S%P %VPf&f& 7 f&ff&f7  0 ee m|  &f BE 5E E&  & ` EEm  D `D E& `z p&&f e*  f5<  h T >    D  W xT  p  ^ B50-84 &fX-    5 eeX f&f D f&flP D Ee0 L &fEB   CE" A Em ,%F CRASH DUMP ANALYZER V %Y %2Z PAGE %D%NCDA -- Analysis terminated after %D. pages%N > > > > > ANALYSIS TERMINATED AFTER %D. PAGESf  V 7 8|e*- ] . %4S%P > > > > > ADDRESS OUT OF RANGE&f5  V    e4 h  `ZeV^ . A  %NCDA -- Error reading crash dump%N%NCDA -- Device driver missing%Nmt |f 5 f% ŝpť ťť &  5 fw%NCDA -- Error reading file %X%N& 0 460 ~  R*eH &3'&1 %* P&, t&6, t&@0 t&4 'P7 'P7 'P7 'P7 'P7 'P7 '8 '7 '7 'N 'x9  (@;  (<< (> (? z$(9 r$(9 j$(9 b0(8 Z0(8 R<(*= JH(V? BT(t9 :`(8 2l(&9 *x(= "(88 (8 (8 (8 (7 (: ( J (9 %l25ew , Bv     5Bw 00S 9M8557i:)*#$5  5 2  UE % `$$|%E U 5@*& E& & f&ËDef Ë )̋Uw (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >&ff  (%(%|'+%%&/%%/%%/%%%l2%%l2t%% l2h%%!+L&%P&$ 1& &% 1&,&& 1&8&' 1 &D&( 1&&)+\&%t&+l.P&h&,l.xP&\&-+ &%&36t&&46pt&&5+D&%&6-&&7-p&&8+&%':x.8&&;x.&&.&'@.&&A+t'%4'CH.0'('DH.(''E+@'%X'F-4'L'G-x4'@'H+d'%%Ix,X'p'Kx,X'd'MP7'(MP7|''NP7|''OP7|''PP7|''QP7|''RP7|''SP7|''WP7|''cP7h'|' (kEH'(mEx''oP7h|'(sP7T|'$({P7 |'0(P7,|'<(P7 |'H(P7|'T(P7H |'`(P7|'l(P7|'x(P7 |'(P70|'(P7|'(P7|'(P7 |'(P7|'(P7D |'(P7"|'(ʐP7\|''PY%8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w: f( f)f  *) l0, *) $ )*)0,40,6 e6p 4 8 < 81416 v  6  141612epl2l0pw ww**8e2 46f %8 E D/D!D l0l8epl0pɥ.ɕ rwb U8UMw wv,*1 B 00fep=& /e`pw %/ z%/ r%/eB  8 $&w n*(5<s1  U U@  f&" V)'&M'&&**%*%0 *&* "*5ND  <  EU   w X*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce <   *5%& w B&Ba +- ʥ# . U 0   b   `     (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &00S98555512w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=whw *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@ %l2*@<#8w /$ ,:T < U@% DD%][%><w^  wR1  %,,:4 Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7(e( 1  `((   >: 5 eCe   f >5>Eu   &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w  %ҥ[֥< , (e  5 s  D w\00S9M8557i:)* & 1 z & 1 r &1 j,&$1 b8& 1 ZD& 1w v( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB 8  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ h#( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B vB  v* eBe>  # #D #=0/H#@&0 # = e0   :0@e 6=#02/002# @#?@#040 6w./!0/ l0/!p!0 .=p0p2   f J >5>Eu R  Mw4> =00l&8el2 0 *82e&( .0 0 0 80 B0 0 0 0)#0.w eE D` bl lrw \  B eE"s    s-  Csl&f w ZBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w f &* *W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w00S$98555512&|&  f&&  e#e|& f&&G& & & & && '&& 89f"e\e!e 8 5f 2* eA  \&l. zh&p.w *8I *=)98  eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E fp* w)"(. = . B  E (.=p!Օ^82e&( .0 0 0 80 B0 0 0 0)#0.w eE D` bl lrw \  B eE"s    s-  Csl&f  T..8em,0l0!D0e6p 4.) R&f ~ Z e) .  e6p 4 Z08*w0,0, f 톇,, w "     .% eB U5UU plp & NeՀ)*ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw  && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e\ & eHЕ A %& eA Е A EA $EЕ A A   $Е.  AЕ;     w 4' UD$BA &( U BQ |Е*  & & @( f  e ee e w D&& bЕ- eae3PPPЕ-$w fD  &Е. ce " Е:   bB w  ť ť 0B Aa &6 &6 &6 &6 5 ߥ& *  + 23E Ew r   Е-   0@A &W e`fÊ    E w : n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e N* e*w@)0,   V) `)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a He0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,   wL  JwB # f  `* w)0406 l0 8  L**  DP5R RRR  ..8em,00S,9M8557i:)*0l0!D0e6p 4.) |&f >  Xe) .  e6p 4 08*wT> =00l&8el2 0 *w 0,0w  &4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = &   `@ ` B   & A @    &  m  f A N  %&f =p!Օ^0,0, f 톇,, w      .% > eB U5UU . plp & NeՀ)* 8   *  x 4 6 "e6p 4&* &@- z&- r&B-w $0,0w: 46  )0406 0 *&4&6= z64 wz%!64=5 N2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = 0,0, f 톇,, w &     .% eB U5UU plp & NeՀ)* 8   * v  4 6 e6p 4&* &x. z&x. r&.w ) 8C 0* ) *wx*   Nep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 &p  ,00S498555512 J *` C# <   D @)  6?0D)  DP5R RRR  8   "**)  ...8em,0l0!D0e6p 4.) R&f X 4 re) .  e6p 4 408*wn0,0, f 톇,, w      .% eB U5UU t plp & NeՀ)* &. &. '.w $  w  ,,  * &f D E/fC A B f&  rBeA @0 (@0 na@eA  B0 VAB  @f  C @*&   `@ ` B   & A @    =D `p46 f 64/=  4@) 0  8w* 46 L8 e*w8 0,0, f 톇,, w      .% N eB U5UU > plp & NeՀ)*w < ) b  fU %  BA `6p 4p`4 %60 4)"(. = . B  E (. ..8em,0l0!D0e6p 4.) &f  e) .  e6p 4 08*w=p!Օ^> =00l&8el2 0 *00S<9M8557i:)* 'H. z'n. r('H.w ) 8C * ) *wx*  bep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 :p  8 V *`)w C#   D @)  6?0D) 8  Z**  DP5R RRR  @'- zL'- rL'v.=D `p46 f &64/=  @) 0  8w 46 x8 e*w( w ,) H* "w46l0w  ) D fU T%  BA `6p 4p`4 %60 4)"(. p= . B  E \(.=p!Օ^> =00l&8el2 0 *0,0, f 톇,, w      .%  eB U5UU plp & NeՀ)* N..8em,0l0!D0e6p 4.) &f x T e) .  e6p 4 T08*w5%& w &Ba +- ʥ# . U 0   b   `     00SD98555512f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0 (Ef&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e 00SL9M8557i:)* %NCDA -- Unknown get command line error%N%NCDA -- Command I/O error%N%NCDA -- Indirect file open failure%N%NCDA -- Indirect command syntax error%N%NCDA -- Maximum indirect file depth exceeded%N%VA%N* 0 b p f `ť(ť ťťťP7 z7 777&h&f8 UV w 5 funhj uhdB$ 0jwaw< 8 v8w &  @*AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp j5f fˇ ȕ V‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *l:@:w  8jDl@ XTeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ DP&, <% , 4&, ,'+ $4', d'x, p', 4',w (*D  w 0+1(e  @%&p*w f( f)f `8Ae f"( UCɗ&+(e$&% ** ACTIVE TASKS SYSTEM TASK DIRECTORY (PRIMARY POOL) SYSTEM TASK DIRECTORY (SECONDARY POOL)BT7d 7 .c7tR7V%88&̎7 ˦˲e%f8f8ˎ7 ˦˲˷e˖%5e5P7 e5b & D 7U8P7  X e̳  -EXE@ RDN MSG CIP RUN RSW STP@ CKR BLC AST@ DST -CHK REX SEF SIO AFF HLT@ ABO STP SPN WFR STPASPNAWFRA ACP@-PMD REM PRV MCR SLV CLI RST NSD@ CAL ROV NET MPC CMD SWS GFL FMP@ CTC MUT LDD PRO PRV DSP SNC%2S%2R%2S------%4STCB ADDRESS = %P%5SPAR = %2R%5SPCB ADDRESS = %P%4SLOAD ADDRESS = %P00%5SLOAD DEVICE = %6A LBN = %8A%4SLOAD ADDRESS = %P%5SLOAD DEVICE = %6A LBN = %8A%4SLOAD ADDRESS = %P%5SLOAD DE00ST98555512VICE = %6A TASK INDEX = %P IMAGE INDEX = %P%4SPRI = %D.%5SI/O COUNT = %D.%5SUIC = [%O,%O]%5STI = %6A%4SMAX SIZE = %P%5SEVENT FLAGS = <1-16> %P <17-32> %P%4SCOMMON PCB VECTOR%4ST.STAT:%2S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A%4A %4A %4A %4A %4A %4A %4A%4ST.ST2:%3S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A%4A %4A %4A %4A %4A %4A %4A%4SPRE-AST STATUS:%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4ST.ST3:%3S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4ST.ST4:%3S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4STCB DUMP:%6SRECEIVE QUEUE%6S-------------%6SRECEIVE BLOCK ADDRESS = %P TASK NAME = %2R%6SCOMMAND LINE INPUT BUFFER ADDRESS = %P UCB = %P%6SAST QUEUE%6S---------%6SAST BLOCK ADDRESS = %P A.CBL = %P%6SA.BYT = %P A.AST = %P A.NPR = %P%6SRECEIVE BY REFERENCE QUEUE%6S--------------------------%6SRRQ ADDRESS = %P SENDER TCB = %P%6SEVENT FLAG MASK = %P EVENT FLAG MASK ADDR = %P%6STASK = %2R%6SREGION ID OF RECEIVER = %P OFFSET IN PARTITION = %P%6SLENGTH TO MAP = %P ACCESS RIGHTS = %P%12S<<<<<>>>>>%6SMCR COMMAND BLOCKS%6S------------------%6SBUFFER ADDRESS = %P TCB = %P%6S%6A: %VA%6S%VA%6S > > > > > UNKNOWN AST TYPE%6SUNSOLICITED CHARACTER AST%6SFLOATING POINT AST%6SRECEIVE DATA AST%6SRECEIVE BY REFERENCE AST%6SPARITY ERROR AST%6SREQUESTED EXIT AST%6SPOWER FAIL AST%6SCLI COMMAND ARRIVAL AST%6SBUFFERED I/O AST%6SOFFSPRING TASK EXIT AST%6SSEGMENTED BUFFERED I/O COMPLETION AST%6STASK FORCE T-BIT TRAP AST%6SDELAYED I/O COMPLETION AST%6SGROUP GLOBAL RUN DOWN AST%6SEMIT STATUS AST%6SCOMPLETION AST FROM: QIO$, MRKT$, SPWN$, CNCT$, OR CINT$%6SSPECIFIED AST FROM: SFPA$, SRDA$, SRRA$, SPEA$, SREA$, OR SPFA$%6SEXIT EVENT FLAG (O.EFN) = %P%6SPARENT TASK NAME = %2R%6SMCR COMMAND LINE ADDRESS = %P%6SPARENT TASK HAS EXITED%6SOCB DUMP:%4S---------%4SOCB LIST: > > > > > REDIRECTED DEVICES FORM A LOOP FROM UCB AT %P.f&f" 7 e5UCe"Q$"~ "| e# e$WU e$KU  e$|U:: NH5 Ce&ee:  Ce&e5-e 6 $e e e$e `  Ce$ fe!C %2B%0>f&Ce  Ce  efwB B B P2;  :%: ƅCeCeCe&e5    e  ο Ce ; `Ce(Cee; :Ce ; E Ce8 < Ce$9 W< 5 5* n9 f< Ce9 J< Ce09 .M= =Dʂ CT5Dm XBB @e% e. %6 eŅe ZB e ezB eB eB Bećffe w7 5@Ce5r ==eDj:^ x3  Oee5>= à j6 z=  eE555>(e few3>@> wf:wepe.M> $7 `X= EË )%;%?%C%G%K%O%SwEU%Y%]%a%e%i w>@  ^@$u{@n@g@`@JY@R@xK@jDA(\=,AN6GA @/pA 2(A($!Ae A AB eeeu> Emw f*5\e@V>>e" Ir:Ee> ee00S\9M8557i:)*7?? eeE? ee? 5 t? f&fe7@ *@E ^ec̕ %̥  W!PPb%6<%2A%O:%4>NONE f&fp&& QL!eeCeCe jeC`EDL *e ffP  ff  C5 e ` NUL MSG LGO DSB PRV SGL@ NIO RST EXT POL CLI PARSER BLOCKS CLI TASK NAME %2R CPB ADDRESS = %P CLI NAME = %2R C.PSTS: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A CPB DUMP:e5a@ ]pMP27CKee 5UMeeMe2M <M  N ee `e`B e^eJ  jt&6,&  m  f A N  %MAINSUB TASK SYS RW COM RO COM DEVICE DRIVER SECPOOLCPU d[]<>!+()88J9a99 PARTITION INFORMATION%23SM E M O R Y M A PPARTITION PCB ADR BASE SIZE TYPE OCCUPIED BY--------- ------- ---- ---- ---- ----------- %2R%5S%P%5S%P00 %P00%4S%4A %7A %A%2R%A %8A %2R%5S%P%5S%P00 %P00%4S%4A %7A %A%2A:%A%6S%8A<--ERROR %23S%P00 %P00%5S %16S%P00 %P00 %16S00%P 00%P %16S00%P 00%P7e7e8]8 p7 jF%::4ʎ.*7 "ʦʲ7w 7 Xm  ^   F jw fvve h QFe%::&Ɏ7 xɦpɲ $% E 5Z`w e  w5dȷeȖ%x%;;Ȏ7 ȦȲ7*7  62e%;;&xȎrn7 dȦ\ȲPȷeLȖ%  9- 7!--  9 A7!  Ї 539 mjӐbAXbPA&AV=${7$e7  7 7 P .75@  e  e*e& 5@Ue77~7e777A9  9X7<_7>Ce  OUT@ CKP CKR-CHK FXD CAF LIO-NSF COM@ LFR PER NWB DEL AST@ LMA CPC CHE SEC PAR POL CPU PIC@ RON DRV APR NAME PCB ADR TYPE MAIN BASE SIZE P.OWN PRO PRI RMCT HDLN PIOC NAME PCB ADR TYPE MAIN BASE SIZE P.OWN PRO PRI RMCT HDLN PIOC ---- ------- ---- ---- ---- ---- ----- --- --- ---- ---- ----%3S%2R %P %4A %2R %P % %P %P %D. %D. %D. %D. N/A %5S%2A:%5S%P %4A %2R %P %P %P %P %D. %D. %D. %D.MAINSUB P.STAT: %P %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A P.ST2: %P %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A & f&~>  ? 5-7 >??1PC@7!5 %5 e>@5 56AL@rdb@7!\@ Pee><@BН$НН6Н1 >@ V  > A 4΂ e  7! ep efɄ ffP  ff  C5 e ` COMMON BLOCK DIRECTO00Sd98555512RY%6SCOMMON TASK IMAGE FILE PCB%8SPCB ADR P.UCB P.LBN P.REL%8S------- ----- ----- -----%8S%P%5S%P%2S%P,%P%2S%P%6SCHECKPOINT ALLOCATION PCB%8SPCB ADR P.SUB P.MAIN P.REL P.SIZE%8S------- ----- ------ ----- ------%8S%P%5S%P %P %P %P%:C ee6Ce5q5e5fe`Ce %SC :qCCCeeeCeC2C C)D8CCeeeeVDCe eƇ 'F (E#Lq@f%6SATTACHMENT DESCRIPTORS:%6SADDRESS PARTITION ATT TASK A.PCBL A.TCBL PRI IOC MAP COUNT%6S------- --------- -------- ------ ------ --- --- ---------%6S%P%5S%2R%6S%2R %P %P %D. %D.%6S%D.%6SA.STAT: %R %R %R %R %R %R %R %R&f>5weweweCt Ee2Ed` E7Fe   eeee 5@Ueeeee F pe&E FeHe%6SWAIT QUEUE:&feeCEeL2E  je AST@ DST -CHK SEF HLT@ ABO STP SPN WFR%7STASK TCB ADR TI T.PRI STATE BITS (T.ST2)%7S---- ------- -- ----- ------------------%6S%2R %P %6A %D. %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4ANFF&fe <eeF F %6<%2A%O:%4>NONE f&fV&& kG!eeCeCe VeC`E^G e  dt&6,&  m  f A N  %777[1,6]""`SY22 ERROR LOG BUFFERS%6SBUFFER ADDRESS = %P00 ENTRY TYPE CODE = %P%3SENTRY TYPE SUBCODE = %P%6STIME = %Y %3Z%12S<<<<<>>>>>%12S>>>>>UNABLE TO CREATE ERROR.TMP IN THE CURRENT DIRECTORY>>>>>%12S>>>>>Warning: ERROR.TMP cannot be created in [1,6]>>>>>%NCDA -- ERROR.TMP cannot be created in [1,6]%N5 500Sl9M8557i:)* P K9||9@ D D D D D D eD  : @O:eD  eEBaD CB eLЄ  f&feD eD  MEMORY DUMP. > > > > INCONSISTENCY IN DYNAMIC STORAGE%6S+ = NEXT WORD IS IN $PKAVL LIST $PKAVL = %P%6S- = NEXT WORD IS IN $PKAVL AND ALSO IN $CRAVL > > > > > $PKAVL LINK ERROR AT %P -- FWD PTR = %P SECONDARY POOL DUMP%25SS E C O N D A R Y P O O L%6SNUMBER OF FREE BYTES = %P00%6SFIRST FREE BYTE = %P00%6SLENGTH = %P00 BYTES%6SSTART ADDRESS = %P00%12SENDING ADDRESS = %P77< V<eJ~<|==e"˃ H7 F7 <0| %"7    $7    M= e5@d _$> :>e|Z>eP ^> T e- Pa>e" B B B B B B D D D D D D `D `e?  *P7&f  ^  Z7 e AP P z  r<R <& \7d7 T  J^7l \ Z7\ .X7PNNf&r<7 D B@ > > > > TASK '%2R' NOT IN MEMORY%4SWINDOW #%D -- TASK VIRTUAL LIMITS %P-%P%4S----------------------------------------------%NCDA -- Task '%2R' not in memory%N%6SPHYSICAL STARTING ADDRESS = %8A%6S------------------------------------%6S------------ THIS TASK HAS NO D-SPACE ---------------%6S > > > SPECIFIED VIRTUAL ADDRESS RANGE NOT IN WINDOW 7 57 U U b7eP7we w-- e&e5wbe7Fn77e5,77e9wV5be0577ee&Ce  Ce   7ep ebCe$w%e& Ce  FE`5w,Cewe Ce CeCe("5-- ^U@-- EH8s8 Vpn^ VmXB %8 B eB eD &f 88  ee we ɳ e8 8U 5 5U0w5@M97 %4S%8A %4P !%R %R %R %R!!%8E!%6S%P %4P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]fwd7 \&fVT7RwPEHE@7 R7 P7 NE,(& D j 2 < 7!w!7w  Ce  eeCeCeCeCeCe Ce eCe Cee 00S|9M8557i:)* KERNEL INSTRUCTION SPACE DUMP KERNEL DATA SPACE DUMP%6S%P %4P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]%12SVIRTUAL ADDRESS: %P PHYSICAL ADDRESS: %8A > > > > > INVALID ADDRESS RANGE WITH STANDARD MAPPING%NCDA -- Invalid address range with standard mappingp7l7|5l%5  % $8 eF\8fE5 B  L7 D 7 > Z 0 ,P7&fe AP P &  d X7P7R 7-7 f&P7X77 R$   3- Jt7 > > > > LOOP FOUND IN LINKED LIST IN POOL AT %P> > > > > CPRBUF REGION WAS NOT FOUND> > > > > CPRBUF REGION IS NOT IN MEMORY> > > > > CORRUPTION DETECTED IN CPRBUF> > > > > ITEM NOT IN PACKETz@U:xL skcZ@gr0123456789ABCDEF9PeRJ $D!J <!BCf&e Re 4e!&e Re e!eC=< c< w < eee@m   N n:  l  :  R  e?D E?ww~w|mvpn&: ^ ~  w< &eD &< F:eD  eD k: (̀w  -we`: EwĴw`: -χ7we+eeee J:;7; \eeeeeeO;g;; &< .; f& lw7m  f&eD 7!>w!: eD f&PP;^\mHB m@D 7!Jw!D*E$; F< f&<<CE=        27=;7h;8)<7; 88;8.>(9~>9> BSY@-MNT FOR MDM OFL-RED PUB UMD PDF SIO@ TRN MUN MNT@ F11 COM PSE OSP ISP SWL UMD@ MSD SQD SDI DIR TTY CCL REC DH1@ DJ1 RMT L8S NEC CRT ESC-LOG SLV@ DZ1 HLD AT. PRV L3S VT5 LWC-ALG@ NPR QUE PWF ATT KIL LGH RST ESC RSP PTH RNE TSY@ OBY IBY DPR DEC IBF DSI RES RNF@ TNE USI RCU WRA WRB WAL BRQ SRQ@ O00S98555512RQ IRQ FLF ELF CR OBF PCU BEL@ CTO CTS ACR TAB CTC RAL NEC TSY@ 8BC FDX MHE ICE TME PTH RES PPT@ RUB WCK SPU VV DEVICE INFORMATION %5A ----- UCB ADR DCB ADR SCB ADR REDIRECT ACP ATT OWNER LOGIN UIC ------- ------- ------- -------- --- --- ----- ---------%4S%P %P %P %6A %2R %2R %6A [%O,%O]%4S%P %P %P %6A %2R %2R %6A%4S%P %P %P %6A %2R %2R%4SU.STS: %4A %4A %4A %4A %4A %4A %4A %4A%4SU.ST2: %4A %4A %4A %4A %4A %4A %4A %4A%4SU.CW1: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.CW2: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.CTL: %4A %4A %4A %4A %4A %4A %4A %4A I/O REQUEST PACKETS: PACKET ADR REQUESTOR PRI EFN LUN FUNCTION CODE STATUS ---------- --------- --- --- --- ------------- ------ %P %2R %D. %D. %D. IO.%R%8S%7A %P %2R %D. %D. %4A IO.%R%8S%7A UNIT CONTROL BLOCK: UNIT CONTROL BLOCK EXTENSION: DEVICE CONTROL BLOCK: STATUS CONTROL BLOCK:%4S%P %P %P %6ACURRENTQUEUED %4SU.TSTA: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.TSTA+2: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.TSTA+4: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A > > > > > REDIRECT ERROR (U.RED=0)INPUT OUTPUT N/A 9*Z%nCnCĎ7 xĦpIJT7 CeE%TTUeCee  ?^P7wlETCeL55<U455&CeCeCe5 Ce5wC &:: :m:PCeCe J = Ce5>65  Ce Ce 5;Ce Ce :Ce5:  ? 7 ef5`7CeD %d75@9 A  e=Ce E p  7 t5@xCe7 bwV5Vn=5$5@ nË XCeY 5S5@xO=@ < ? 9Ceee ó e  eC  eC eC   \³  = :Ce5$=Ce& Cee%MTee E eȅm w%ewfZD5  C?  n J? xm: m* > Vdz'>xV7C Ce  pe t4dECe  *v T< o<< &fPCe CeCeCe5 E5Q?J=+Cee& ~e e e>V   =Ce n. C( feC%#eC%_e C e  %6<%2A%O:%4>NONE f&f.&& E!eeCeCe eC`EE־ e̾ ffP  ff  C5 e ` 4F.q"|(+N0swbrt  ' r q! +s2#p G@$spra  s s. @vrtBy Fy@yPw`-tpx!28& z1q&R H--- .(.0.8@6HWyPWXbY`{fIrF  ؙ t&6,&  m  f A N  %00S9M8557i:)*d TASK HEADERS %2R ------ ( OUT OF POOL ) %4SHEADER ADDRESS = %P%6STCB ADDRESS = %P%4SPS=%P%5SPC=%P%4SR0=%P R1=%P R2=%P R3=%P R4=%P R5=%P SP=%P%4SINITIAL PS = %P INITIAL PC = %P INITIAL SP = %P%4SHEADER SIZE = %D. NO. OF WINDOWS = %D. NO. OF LUNS = %D.%4SCURRENT UIC = [%O,%O] DEFAULT UIC = [%O,%O]%4SH.WND = %P H.GARD = %P H.VEXT = %P H.SPRI = %D.%4SDSW = %P H.FCS = %P H.FORT = %P H.OVLY = %P%10S INSTRUCTION SPACE%10S D A T A S P A C E%10S -------------------%4SHEADER:T7 4P7Wv%<<&dʎ^Z7 PʦHʲe8%::&ʎ 7 ʦʲʷeɖ%e5 e&e5wRR7wR( c7i7 e&(˦ e er7 ˳ 7 &Ce:%e %v Cee  7 Dѐ%Ce7 "Ce CeCe7 CeCe$Ce<*8 Ce  Ce  k8 Ce$Ce:Ce.Ce08 pCe&Ce(Ce*Ce,8e< e29N9 5e05 e39N9U ei9Ce %XCeτɳ ew %4SWINDOW BLOCKS:%5SPAR VIRT LIMITS ATT DESC WND SIZE OFFSET 1ST PDR NO. LAST PDR%5S--- ----------- -------- -------- ------ ------- --- --------%4S%2R %P %P %P %P %P %P %D %P%5SPAR VIRT LIMITS ATT DESC WND SIZE OFFSET%5S--- ----------- -------- -------- ------%4S%2R %P %P %P %P %Pfe$CvCr%e<e% <<:=h===Ce 2E`5>Ce  eeCeCeCeCeCe Ce eCe Cee ??@ @@/@%4SLOGICAL UNIT TABLE:%4S# DEV WINDOW W.CTL W.FCB F.FNUM F.FSEQ F.STAT NAC NLCK%4S- --- ------ ----- ----- ------ ------ ------ --- ----%4S%D %5A%P %P %P %P %P %P %D. %D.%4S%D %5A%P %P %P %P %P %P %D. %D.%4S%D %5A%P%4S%D %5A%P%4S%D %5A%P %P %P%4S%D %5A%P %P %P > > > > > ACP OUT OF MEMORY OR NOT IN EXECUTION%N > > > > > REDIRECTED DEVICES FORM A LOOP FROM UCB AT %P.fCe<9%?ef?_?Ce> P eE (%  A D@ 7 e &f>z&@Ce  Ce  efwx@ ~wdCeE%ICeµ`B-?T :>ee%.-'  >eeeeeXó  D  &e/e5'7 e<e&e5e mX3 3 e  < %6<%2A%O:%4>NONE f&f&& B!eeCeCe VeC`EB e  t&6,&  m  f A N  % CLOCK QUEUE%6SADDRESS = %P REQUEST TYPE = %D TCB = %P TASK = %2R%6SADDRESS = %P REQUEST TYPE = %D%6STIME REQUEST BECOMES DUE = %5Z%6SC.AST = %P C.SRC = %P C.DST = %P EVENT FLAG = %D.%6SC.RSI = %P%P C.UIC = %P%6SC.UIC = %P%6SC.SUB = %P C.AR5 = %P%12S<<<<<< INVALID REQUEST TYPE >>>>>>%12S<<<<<>>>>>7"8@8N8N8~ՃIP7 A8= FeP7ťťe X%ee^7  & 00S98555512 Ee f&f&:e jeB eA eA < eA < eP7 @҅f&f%ee eee % e8A  j8 х5 e8 ѱ&   `@ ` B   & A @    Q6^xwQS ]f@x CONTROLLER INFORMATION%4S%2A%4S--%6SCTB ADDRESS = %P L.DCB = %P%6SL.STS: %R %R %R %R %R %R %R %R%6SCONTROLLER TABLE BLOCK:%6SDEVICES INTERFACED BY THIS CONTROLLER:%6SCOMMON INTERRUPT ADDRESS = %P%8SDCB DEVICE NAME%8S--- -----------%6S%P%8S%2A%6SKRB ADDRESS = %P%6SK.STS: %R %R %R %R %R %R %R %R%6SCONTROLLER REQUEST BLOCK:%12S> > > > > LINK ERROR AT %P, FORWARD POINTER = %P%&7RPH|7 4,0(  \eC  Ce^77 Ce7 CeP7 7 j7Cee EC5ee4҇f8 Ce51Ce *CB8 c8z8 7,C) &e^8c8z8Ce e^8exхfCee =79C3 8 8eb7 8 8e eC` ee %5  8 бffP  ff  C5 e `Y<_<2dTASKSYSTEMGROUPFinalPrivileged = LOCAL LOGIN ASSIGN TABLE%5SLOGICAL PHYSICAL TYPE%5S------- -------- ----%6S%6<%2A%O:%4>%4S%6A%4SGLOBAL%6S%6<%2A%O:%4>%4S%6A%4S%6A%4STI - %6ASystem Logicals:%5S%5SBlock: %Q%5SBlock: %6<%Q%6>Status: (%VA)User Logicals:%3STerminal: %5AGroup Logicals:%3SGroup: %QTask Logicals:%3STask: %2R > > > > > LIST OF LOGICAL NAME BLOCKS FORMS A LOOP.5 5  y<5I<< &V;CF<F   x w`7&eD fEEe E eD & wh9 N\eD   h9v00S9M8557i:)*& x"k6 w& Y 77 =sE j< EE`  =ѝxs&=$9Y EP7  9Е,Е P 993= ̀= % %@& ӕ%ӕVӕA!Q =`s= QeS= K: eCee  Ce5 Ce 5Cm`f  Jb=BA  ˁm %e eC! e= : A77 e*- & =feC' B$&B` Z eJs= @BB@:  (= " &:ȋЭ1Н)d%6<%2A%O:%4>NONE f&ff&& [B!eeCeCe xeC`ENB 8e &f& v  Rt&6,&  m  f A N  %%6N [END OF ANALYSIS OUTPUT]%F%2N *** CDA STATISTICS:%6SERRORS DETECTED: %D.%6STOTAL PAGE FAULTS: %D.%6SSIZE OF CORE BUFFER: %D. WORDS (%D. PAGES)%6SELAPSED TIME: %3Z %VA%NCDA -- Errors detected: %D.%N5iU& & Y5]ed77@Lͷ 7 ~87 nJ7BPP7P7f=ABC ̂ ́ e e< e<P7e8NL85G5?T 89f"e\e!e  5f h2* eA T EL  506 & & & & & & & & & Ε &|&  f&&  e#e|& f&&G& & & & && '&& P&,%NCDA -- Command line syntax error%NCDA -- Illegal switch%NCDA -- No output file specified%N %VA%NCDA -- Analysis output must be directedto an explicit device or file%NCDA -- Output dump file name must be explicit%NCDA -- Crash dump must be input from an explicit device or file%VS/\%N%NCDA -- No input file specified%N%VA%N/\%N TA&A 8(5$6565`6  45  55@ .5 n# `77}8"8& 778 7 8;88 ,< 7 b7 b7 `7 t 2 5.Mt w5E$ʇ >ʇ 7  ʇ 0ˇ5(5$ w555     eE 7ɇw75`R7\ U l 5bU@X wwN7-P@ -H w67χχ5@p 1 1  W    w>556557 N7 L7 LDB w* w  w   w  w` d5R 5LP H@:ɇ 05 5  ɇ ɇ zɇ5Xtpɇ5Mb^ɇ C5?Jɇ 854$ɇ -5)|ɇ r"5lfȇ \5VPȇ F B·5( ww R7 E\R7 15B(R7 #0 , 0 0 \7 - - X7 w̥, X7 `-vpmj.\7 Z \7 `R7 %.7 & (w  wee7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c 00S98555512 @  . &f@     8  " .$ B  8̥ZḀ90     w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA bEAa$EXITLIMITLINESSPMEMSIZSTBALLCLICPBATLACTSTDTCBTALHDRDEVDCBSCBUCBPCBPARPOOLPOLSECPOLTISTDSTASADVTSKTASKDMPDUMPKISKDSKMRBLCLQCTLDECNETNETCACHECPRLOWHIGHSYS@@@@@@@@@@@@@@@@@@@@@@@@@@AA A AAAAA#A'A*A.A2A9A=ACAGAKAPA|9=FB, BțD9/AA-A9BBBA: BA†9A:†9A:†:AțD:/2BA>B:†(:Al:ȁD,r:FB/^Bʆr:<nBr:vB,FBʄD D DDDDDD@DDDDDDDDD 2DCCDDDDDD FD FD`DnD D|DDDDD@CD-CDENSCCICCTCCYCC=C:C:C:C:C:DD=D:DD=DD=D:D΂;:&DD‚;:†;D::DD‚<:†V S2P   $H &eHP70p |/, x)&  & & & & & & & & & Ε E@U nh7 pRTeH7 &+ %*00S9M8557i:)*%NCDA -- Symbol file %X has illegal format%N%NCDA -- Symbol %2R not defined in symbol file%N56 7 7  Q$%f7   F %J wT7  T7 D 88F8V8T8T8j8V8T8^7&X1-+-(̵ % $ #-@ % $%% `7\  7 %NCDA -- Error reading symbol file %X%N   B *eH8 77 & U P&, &+A VOLATILE REGISTERS AFTER CRASH: PS=%P SP(K)=%P SP(U)=%P AFTER CRASH: PS=%P SP(K)=%P SP(S)=%P SP(U)=%P BEFORE CRASH: PC=%P PS=%P R0=%P R1=%P R2=%P R3=%P R4=%P R5=%P MMR0=%P MMR1=%P MMR2=%P MMR3=%P%20SU S E R%29SU N I B U S M A P%5SI S P A C E%11SD S P A C E%16S%VS%D %8A%5SPDR%7SPAR%11SPDR%7SPAR%16S%VS%D %8A%14SS U P E R V I S O R%25S%VS%D %8A%18SK E R N E L%29S%VS%D %8A KERNEL STACK KERNEL STACK:> > > > > KERNEL PAR'S CLOBBERED%4S%P %P %P %P%14S%VS%D %8A%58S%VS%D %8A%4S%P %P %P %P%20SU S E R%5SI S P A C E%11SD S P A C E%5SPDR%7SPAR%11SPDR%7SPAR%14SS U P E R V I S O R%18SK E R N E L PROCESSOR %A %VA (FIRST PROCESSOR TO CRASH)<<<<>>>>%16SCPU ERR = %P%3SMEM SYS ERR = %P%3SCACHE CTL REG = %P5Fw>l%n| %T@l  ee %H`Է@~epehe`eX5wJ\7 R7% ­ $::eÝ m`ɋ%R7e\@: -\w 5q77 %   t:  7  7  #8e7 K8%x97  j $%^+ v9 v9 8 |v9 nv9 dv9 Z8 Pv9e9 e: ^  +9  99D (  w -5 0l |  %:99  hn8 ^8  0 ` &9%%L9 0 &f  %  C CE e) @%<%8%%$-x5-j %JÝN m 5  2%e&e" &2hn "z(4v:@FLRNT` &$`8xDJ LOWCORE ALPHABETIZED DUMP %2R% %7S%2R% %7S%2R% %7S%2R%f@r@~@@D@ H:?7  N@ .@ &@ @ `@ F  :?& x d^Ze TVXZQ>{>>>>? G?@o?????@;@ Z@@@@@@(ARA}A A@A B5B\B~BBB B@CACbC{CCCC D@@DcDDDDD 'E@PE~EEEF4FQF {F@FFF)GOGiGG G@GH%HHHiHHHH I@%IHI SYSTEM COMMON CRASH OCCURRED AT %3Z %Y CURRENT TASK = %2R TCB ADDRESS = %P CURRENT TASK = NULL TASK CURRENT TASKS%6SPROCESSOR %A: %2R TCB = %P%6SPROCESSOR %A: NULL TASK $SYSID = %4A $EXSIZ = %P $SYSIZ = %M./%MK $SYUIC = [%O,%O] $STKDP = %P $COMEF: <33-48> %P <49-64> %P $COMEF: <33-48> %P <49-64> %P SYSTEM NAME = %6A $NTUIC = [%O,%O] LOAD DEVICE = %2A%O LBN = %8A FILE SIZE = %D. SYSTEM HAS STANDARD EXECUTIVE ----------------------------- PRE-GENERATED DISTRIBUTION KIT SYSTEM FEATURE MASK (FIRST WORD) = %P SYSTEM FEATURE MASK (SECOND WORD) = %P SYSTEM FEATURE MASK (THIRD WORD) = %P SYSTEM FEATURE MASK (FOURTH WORD) = %P SYSTEM FEATURE MASK (FIFTH WORD) = %P SYSTEM HARDWARE FEATURE MASK (FIRST WORD) = %P%8SBIT SET%14SMEANING%8S-------%14S------- POOL STATISTICS POOL SIZE (BYTES) = %M. LARGEST FREE BLOCK (BYTES) = %M. TOTAL FREE BYTES = %M. NUMBER OF FRAGMENTS = %D. MINIMUM BLOCK SIZE (BYTES) = %D. POOL BITMAP (CONSTRUCTED FROM LINKED POOL, BLOCK FREE IF BIT SET): > > > > > POOL LINK ERROR AT %P -- FWD PTR = %P SIZE = %P%NCDA -- Pool link error found - continuing%N%10SEXT%8S22-BIT EXTENDED MEMORY SUPPORT%10SMUP%8SMULTI-USER PROTECTION SUPPORT%10SEXV%8S20K EXEC SUPPORTED%10SDRV%8SLOADABLE DRIVER SUPPORT%10SPLA%8SPLAS SUPPORT%10SCAL%8SDYNAMIC CHECKPOINT SPACE ALLOCATION%10SPKT%8SPREALLOCATION OF I/O PACKETS%10SEXP%8SEXTEND TASK DIRECTIVE SUPPORTED%10SLSI%8SPROCESSOR IS LSI-11%10SOFF%8SPARENT/OFFSPRING TASKING SUPPORTED%10SFDT%8SFULL DUPLEX TERMINAL DRIVER%10SX25%8SX.25 COMMUNICATIONS EXEC IS LOADED%10SDYM%8SDYNAMIC MEMORY ALLOCATION SUPPORTED%10SCEX%8SCOMMUNICATIONS EXEC IS LOADED%10SMXT%8SMCR EXIT AFTER EACH COMMAND%10SNLG%8SLOGINS DISABLED%10SDAS%8SKERNEL DATA SPACE SUPPORT%10SLIB%8SSUPERVISOR MODE LIBRARY SUPPORT%10SMP%9SMULTIPROCESSOR SUPPORT%10SEVT%8SEVENT TRACE FEATURE%10SACN%8SACCOUNTING SUPPORTED%10SSDW%8SSHADOW RECORDING SUPPORTED%10SPOL%8SSECONDARY POOL SUPPORTED%10SWND%8SSECONDARY POOL FILE WINDOWS SYSTEM%10SDPR%8SDIRECTIVE PARTITION SYSTEM%10SIRR%8SINSTALL, REQUEST, AND REMOVE TASK SUPPORT%10SGGF%8SGROUP GLOBAL EVENT FLAG SUPPORT%10SRAS%8SRECEIVE/SEND DATA PACKET SUPPORT%10SAHR%8SALTERNATE HEADER REFRESH AREAS SUPPORTED%10SRBN%8SROUND ROBIN SCHEDULING SUPPORTED%10SSWP%8SEXECUTIVE LEVEL DISK SWAPPING SUPPORTED%10SSTP%8SEVENT FLAG MASK IS IN THE TCB%10SCRA%8SSYSTEM SPONTANEOUSLY CRASHED%10SXCR%8SSYSTEM CRASHED FROM XDT%10SEIS%8SSYSTEM REQUIRES THE EXTENDED INSTRUCTION SET%10SSTM%8SSYSTEM HAS SET SYSTEM TIME DIRECTIVE%10SUDS%8SUSER DATA SPACE%10SPRO%8SPROTO TCBS OUT OF POOL%10SXHR%8SEXTERNAL HEADER SUPPORT%10SAST%8SSYSTEM HAS AST SUPPORT%10S11S%8SRSX-11S SYSTEM%10SCLI%8SMULTIPLE CLI SUPPORT%10STCM%8SSYSTEM HAS TTCOM SUPPORT%10SPMN%8SSYSTEM SUPPORTS POOL MONITORING%10SWAT%8SSYSTEM HAS WATCHDOG TIMER SUPPORT%10SRLK%8SSYSTEM SUPPORTS RMS RECORD LOCKING%10SSHF%8SSYSTEM SUPPORTS SHUFFLER%10SCXD%8SCOMM EXEC HAS BEEN DEALLOCATED%10SXT%9SSYSTEM IS AN XT SYSTEM%10SERL%8SSYSTEM SUPPORTS ERROR LOGGING%10SPTY%8SSYSTEM SUPPORTS PARITY MEMORY%10SDVN%8SSYSTEM SUPPORTS DECIMAL VERSIONS%10SLCD%8SSYSTEM SUPPORTS LOADABLE CRASH%10SNIM%8SSYSTEM SUPPORTS DELETED TASK IMAGES%10SCHE%8SSYSTEM SUPPORTS DISK DATA CACHING%10SLOG%8SSYSTEM SUPPORTS EXTENDED LOGICAL NAMES%10SNAM%8SSYSTEM SUPPORTS NAMED DIRECTORIES%10SFMP%8SSYSTEM SUPPORTS FAST MAP DIRECTIVE%10SDCL%8SDCL IS DEFAULT CLI%10SDDS%8SNAMED DIRECTORY MODE BY DEFAULT%10SACD%8SSYSTEM SUPPORTS ANCILLARY CONTROL DRIVERS%10SNCT%8SSYSTEM HAS NCT SUPPORT%10SLSD%8SSYSTEM HAS LUT SCAN DISABLED%10SPRO%8SSYSTEM SUPPORTS PROFESSIONAL 3XX SERIES%10SDFB%8SSYSTEM HAS DEFERRED BINDING%00S9M8557i:)*10SRTB%8SRUNTIME BINDING%10SODB%8SOVERRIDABLE DEFAULT TO USE DEFERRED BINDING%10SXDJ%8SXDT IS USING KXJ INTERFACE FOR I/O%10SNSY%8SNO LOCAL SYSTEM DISK%10SNCO%8SNO LOCAL CONSOLE%10SRTK%8SREMOTE TASK SERVICES%10SRDR%8SREMOTE DIRECTORY STORAGE%10SRLG%8SREMOTE LOGICAL SUPPORT%10SUBM%8SSYSTEM HAS UNIBUS MAPPING SUPPORT%10SEIS%8SSYSTEM HAS EXTENDED INSTRUCTION SET%10SQB%9SSYSTEM HAS A QBUS%10SDSP%8SHARDWARE SUPPORTS DATA SPACE%10SKXJ%8SPROCESSOR TYPE IS KXJ%10SRMT%8SREMOTE SERVICES REQUIRED%10SCIS%8SSYSTEM HAS COMMERCIAL INSTRUCTION SET%10SFPP%8SSYSTEM HAS ENHANCED FLOATING POINT PROCESSOR SUPPORT GROUP GLOBAL EVENT FLAGS GROUP NUMBER =%O ACCESS COUNT =%P GGEF DUMP:5w<NE5w866 ^ee eEe8e%-88 t#9 h b7D a a$9F9 ^ w!< ,¹PjewT E NŃ  b9 9%9e DZvtp2H$8,PX"@Pbj>.(d 4~0T*BNHj ,LFR^Xd@ b "zVP\&,<0:.fxrhDz^h r>lt6B<pZ|2ntJ*JVn|hn SYSTEM COMMON DUMP ADDR LABEL VALUE ADDR LABEL VALUE ADDR LABEL VALUE%P %2R %P%10S%P %2R %P%10S%P %2R %P%7S%2R %P%17S%2R %P%17S%2R %P%P %2R %P%10S%P %2R %P%7S%2R %P%17S%2R %P%P %2R %P%7S%2R %PFR"R{RdRRR ,&,8>28D>DJPJPV\bhn h"tntz ".:@FLRX ^djp|"(.4:@FLR X^$djp*0v|6<BHZfrx~  &,2$*06<BHNTZlrx>PV\bhntz SYSTEM COMMON ALPHABETIZED DUMP %2R% %7S%2R% %7S%2R% %7S%2R%T UU"U  rQ: E7bRP-V:Q 7 B-,0R -$RR - RR  e A &fȯ :0 w&fm-D<e e  j7^@`7Z@`7VPR-RLJDC @ eQ O RTʴ DRb J,U 0U 4U 8U T B  &R V e w w 00S98555512w w wW TD# DE!T5S   "  4S%BPw 1S%P Z`XlX}XX*X0X;XKX MULTIPROCESSOR TABLES%30SPROCESSOR%18SA%18SA%10SB%18SA%10SB%10SC%18SA%10SB%10SC%10SD%6S%2R%4S%P%6S%2R%4S%P%5S%P%6S%2R%4S%P%5S%P%5S%P%6S%2R%4S%P%5S%P%5S%P%5S%P XʲexX nt AWe\WD%J < AW &&  m  f A N  % CACHE INFORMATION DUMP OF CACHE REGION: %2R -----------------------------DEVICE: %2A%Q: DESCRIPTOR STARTING LOGICAL LENGTH PHYSICAL ADDRESS BLOCK NUMBER (DISK BLOCKS) ADDRESS %8A %8A %Q %P00> > > > > LOOP FOUND IN LINKED LIST IN POOL AT %P> > > > > CACHE REGION WAS NOT FOUND> > > > > CACHE REGION IS NOT IN MEMORY> > > > > REQUESTED PARTITION IS NOT A CACHE REGION> > > > > LOOP FOUND IN CACHE STATISTICS BLOCKS AT %P00> > > > > LOOP FOUND IN CACHE EXTENT DESCRIPTORS AT %8ANO DEVICES HAVE CACHING ASSOCIATED WITH THIS REGIONrP7e hdd77 J $D!N <!FCf&e e Be!*e e z-e!eCR8 w8 8 w 8 C9 w8 ee5e J7we N ,  :  E   D D D D D D f& ee0|9ee $eE`7777eA je2:`D jeD  , `D JeD   E`D eD  |9  9 f&f|9 eD eD D eD   8&  m  f A N  %00T9M8557i:)*|a,RRLY &[q$Y tSYTISYSYSYTIOVZ#$ ,!i   eAe]0n^ 8 }l ^ & "V 5 W#b ~w)wn:Nh2b %" e^v' CDA>PJMMMSMTDYv~.>6 FN@f^v~ & @Vb   P00T98555512 P    NSYaSYsySYu~먫D~먓sq$CT$u~>MCCCKD8DFF~GRG gHCTH\}J JJg'JKJbTJwJyJzJÅJLMsP\eĊeirxxxvvyf a'2s N*}BxC ©Fݩ(ީz} NCT,K,K,M6}y\}zds-~˪s#HgAqAvrAyFsKQKZO_O`KOKO NRB9R9R,:RR;RSTTTTz}W|q@w24""^&"" &((uLkMdJ,t̫̫2̫r!̫pEѫO ѫ,xѫBxѫxѫhѫZfz}FxZLT5sӍYlh.+{p+{P}0{G3{3{l.uX+guL""%CTxd$(:DCCjCD:EO E&H HH:dHHH;JJJ(JGJ:dJwJLL NLcccJXcTXczdcyiiz}rrrrr|CTKKs{GKkMwz}[((yz}t!xxxxDr©LEȩsߩ0   y z}T+ ,!1U1'1CT1T[14f78*}T..ӪӪӪת3تتlzت*}۪<} qsQ}~B !CCLFK L:dODLOȒRX^RF^R*}WWEWkrWrx@t!*}S\q̫` ̫g'̫sͫdϫxdϫdϫfϫpѫ4ѫDLѫjSSSSS2g*}Mt[q,tbTgr5hh Nh}v~oM 3HeHVNHpHHa;'yI;U#U]RUfShShyso^?SYx f| CDA -- Exiting due to illegal trap - Snapshot dump being attempted&.& xeG& & & & e %&<)& & &  D& & & Ε d  w  %NCDA -- Error writing analysis file%N > > > > > LIST COUNT EXPIRED%6S%P %VPf&f& 7 f&ff&f7  0 ee m|  &f BE 5E E&  & ` EEm  D `D E& Z p&&f e*  f5<  h d N    D  W xd  p  n B50-84 &fX-    5 eeX f&f D f&flP D Ee0 L &fEB   CE" A Em ,%F CRASH DUMP ANALYZER V %Y %2Z PAGE %D%NCDA -- Analysis terminated after %D. pages%N > > > > > ANALYSIS TERMINATED AFTER %D. PAGESf   P 7 8|e*- m > %4S%P > > > > > ADDRESS OUT OF RANGE&f5  V    eD h  `ZeV^ . A  %NCDA -- Error reading crash dump%00T9M8557i:)*N%NCDA -- Device driver missing%Nmt |f 5 f% ŝpť ťť &  5 fw%NCDA -- Error reading file %X%N& 0 460 x  t*eH '&1 J& 8&| J& 8& 8&0 8& 8&T &( &( &( |&( t&( l&( d&) \J&, T8&X LJ& D8&$ <8&L 48&8 ,8&< $8&H 'R) '<) '? "'+ X', X'- j'b0 j'1 |'*+ |'+ |'+ '* '6* '. '0 '* 8& 'V* '* 'j/ |J&t t () l(<* d8&@ \8&D TJ&4 L0(* D8& <B() 4T(F) ,8& $f(6, x(; (+5ew , Bv     5Bw T#$50  (r- DUt-E D  E E ܁&&%$$&&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff  &[q &[q`8&&&&& &&J&&&( &&8&&&( (n&\&(&n&(&(&(&&&(&&&(&&&(&&&(&&&(&&&(&'&(&"'&*(h4'&X'&2@7H"'F'&4@7p"'4'&6(h&j'&:(T&|'&B( &'&H(,&'&J( &'&O(&'&X(@ &'&_(H&'&a(&'&d( & (&j(&(&l(&0(&t(&B(&v(&T(&w(&f(&x(D &x(&~("&(&(\&&&J\&(&& 00T98555512 %NCDA -- Unknown get command line error%N%NCDA -- Command I/O error%N%NCDA -- Indirect file open failure%N%NCDA -- Indirect command syntax error%N%NCDA -- Maximum indirect file depth exceeded%N%VA%N* 0 b p f `ť(ť ťťť( ) )E)n)&h&f) U w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp ~5f fˇ ȕ j‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ ^DlljaCeH###33 & 8 *++w  8jDl@ lTeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@00T9M8557i:)* ACTIVE TASKS SYSTEM TASK DIRECTORY (PRIMARY POOL) SYSTEM TASK DIRECTORY (SECONDARY POOL)(Nd 7 (:t\(V%**&ڎ7 xڦpڲe`%))NڎHD7 >ڦ6ڲ*ڷe&ږ%5e5( e5 r&  )RU(  X e0۳  -EXE@ RDN MSG CIP RUN RSW STP@ CKR BLC AST@ DST -CHK REX SEF SIO AFF HLT@ ABO STP SPN WFR STPASPNAWFRA ACP@-PMD REM PRV MCR SLV CLI RST NSD@ CAL ROV NET MPC CMD SWS GFL FMP@ CTC MUT LDD PRO PRV DSP SNC%2S%2R%2S------%4STCB ADDRESS = %P%5SPAR = %2R%5SPCB ADDRESS = %P%4SLOAD ADDRESS = %P00%5SLOAD DEVICE = %6A LBN = %8A%4SLOAD ADDRESS = %P%5SLOAD DEVICE = %6A LBN = %8A%4SLOAD ADDRESS = %P%5SLOAD DEVICE = %6A TASK INDEX = %P IMAGE INDEX = %P%4SPRI = %D.%5SI/O COUNT = %D.%5SUIC = [%O,%O]%5STI = %6A%4SMAX SIZE = %P%5SEVENT FLAGS = <1-16> %P <17-32> %P%4SCOMMON PCB VECTOR%4ST.STAT:%2S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A%4A %4A %4A %4A %4A %4A %4A%4ST.ST2:%3S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A%4A %4A %4A %4A %4A %4A %4A%4SPRE-AST STATUS:%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4ST.ST3:%3S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4ST.ST4:%3S%P%2S%4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4STCB DUMP:%6SRECEIVE QUEUE%6S-------------%6SRECEIVE BLOCK ADDRESS = %P TASK NAME = %2R%6SCOMMAND LINE INPUT BUFFER ADDRESS = %P UCB = %P%6SAST QUEUE%6S---------%6SAST BLOCK ADDRESS = %P A.CBL = %P%6SA.BYT = %P A.AST = %P A.NPR = %P%6SRECEIVE BY REFERENCE QUEUE%6S--------------------------%6SRRQ ADDRESS = %P SENDER TCB = %P%6SEVENT FLAG MASK = %P EVENT FLAG MASK ADDR = %P%6STASK = %2R%6SREGION ID OF RECEIVER = %P OFFSET IN PARTITION = %P%6SLENGTH TO MAP = %P ACCESS RIGHTS = %P%12S<<<<<>>>>>%6SMCR COMMAND BLOCKS%6S------------------%6SBUFFER ADDRESS = %P TCB = %P%6S%6A: %VA%6S%VA%6S > > > > > UNKNOWN AST TYPE%6SUNSOLICITED CHARACTER AST%6SFLOATING POINT AST%6SRECEIVE DATA AST%6SRECEIVE BY REFERENCE AST%6SPARITY ERROR AST%6SREQUESTED EXIT AST%6SPOWER FAIL AST%6SCLI COMMAND ARRIVAL AST%6SBUFFERED I/O AST%6SOFFSPRING TASK EXIT AST%6SSEGMENTED BUFFERED I/O COMPLETION AST%6STASK FORCE T-BIT TRAP AST%6SDELAYED I/O COMPLETION AST%6SGROUP GLOBAL RUN DOWN AST%6SEMIT STATUS AST%6SCOMPLETION AST FROM: QIO$, MRKT$, SPWN$, CNCT$, OR CINT$%6SSPECIFIED AST FROM: SFPA$, SRDA$, SRRA$, SPEA$, SREA$, OR SPFA$%6SEXIT EVENT FLAG (O.EFN) = %P%6SPARENT TASK NAME = %2R%6SMCR COMMAND LINE ADDRESS = %P%6SPARENT TASK HAS EXITED%6SOCB DUMP:%4S---------%4SOCB LIST: > > > > > REDIRECTED DEVICES FORM A LOOP FROM UCB AT %P.f&f" 7 e5UCe"Q$"~ "| e# e$WU e$KU  e$|U ,, H5Ј Ce&ee,  Ce&e5-e Ϸ $e eϳ e$e `  Ce$ fe!C %B%>f&Ce  Ce  efw~4 źNB JB P,  N,%p, `ՅCeCeCe&e5  x  e  V Ce - Ce(CeeB- Ce y- E Cet* - Ce* - f5 5* * f/. HCe + J. ,Ce0l+ .. &/؂ C5Dm q4d4 @e%~ e % eӅe 3 xe00T98555512 e4 \e4 Fe=4 2W4eӇffe w7 5@zCe5r8 3/D/e+^ x3  Oee5>/ ҃ j6 zU/  eE555(e few// w+wepe/ 7 `X= EË )%;%?%C%G%K%O%SwEU%Y%]%a%e%i w1  1$u2n2g-2`I2JY]2Rs2xK2jD2(\=2N62 @/2 2(3($!33e P3 c33 &eee/ Emw f5\e@V'0E0eσ I+Eec0 ee00 \ee0 >ee1 5 31 f&fe1 1E ^es̕ %̥  W!PPr%6<%2A%O:%4>NONE f&f&& =!eeCeCe beC`E= e ff`  ff  C5 e ` NUL MSG LGO DSB PRV SGL@ NIO RST EXT POL CLI PARSER BLOCKS CLI TASK NAME %2R CPB ADDRESS = %P CLI NAME = %2R C.PSTS: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A CPB DUMP:e5a ]>7CKee 5U ?ee"?e> <G? ? ee `e`B eeJ  &  m  f A N  %MAINSUB TASK SYS RW COM RO COM DEVICE DRIVER SECPOOLCPU d[]<>!+()-*_**** PARTITION INFORMATION%23SM E M O R Y M A PPARTITION PCB ADR BASE SIZE TYPE OCCUPIED BY--------- ------- ---- ---- ---- ----------- %2R%5S%P%5S%P00 %P00%4S%4A %7A %A%2R%A %8A %2R%5S%P%5S%P00 %P00%4S%4A %7A %A%2A:%A%6S%8A<--ERROR %23S%P00 %P00%5S %16S%P00 %P00 %16S00%P 00%P %16S00%P 00%Pl)e>)e2)) "`) jd%,,؎7 ئزL)w  ) Xm  ^   F jw fvve h QFe&%,,&؎ 7 ئײ $% E 5z`w e  w5dz׷evז%j%,,X׎RN7 Fצ>ײL)* )  62e%,,&׎7 ֲַ֦e֖%  *- 7!-- * A7!  އ 5^*t mAbA&A.${P)$eT)  R) V) P .Z)5@  e  e*e& 5@UeZ)X)~X)e\)J)^)A*  *( .(:.(:.(:.(.). ).).).7!$5* 5U-  (7!( 7! )5)+5')$(5)5 (5U - (5@~(  "&f/Ce  OUT@ CKP CKR-CHK FXD CAF LIO-NSF COM@ LFR PER NWB DEL AST@ LMA CPC CHE SEC PAR POL CPU PIC@ RON DRV APR NAME PCB A00T9M8557i:)*DR TYPE MAIN BASE SIZE P.OWN PRO PRI RMCT HDLN PIOC NAME PCB ADR TYPE MAIN BASE SIZE P.OWN PRO PRI RMCT HDLN PIOC ---- ------- ---- ---- ---- ---- ----- --- --- ---- ---- ----%3S%2R %P %4A %2R %P % %P %P %D. %D. %D. %D. N/A %5S%2A:%5S%P %4A %2R %P %P %P %P %D. %D. %D. %D.MAINSUB P.STAT: %P %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A P.ST2: %P %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A & f&0  1 5-7 0t11P17!5 %5 e(025 56AL 2rdbN27!\R2 Pee><@BН$НН6Н1 N,0V2 V  02 "܂ e  7! e eׄ ff`  ff  C5 e ` COMMON BLOCK DIRECTORY%6SCOMMON TASK IMAGE FILE PCB%8SPCB ADR P.UCB P.LBN P.REL%8S------- ----- ----- -----%8S%P%5S%P%2S%P,%P%2S%P%6SCHECKPOINT ALLOCATION PCB%8SPCB ADR P.SUB P.MAIN P.REL P.SIZE%8S------- ----- ------ ----- ------%8S%P%5S%P %P %P %P%RL4 e&e4e5q5e5fe`Ce %4 4$5CeeeCeO52g5 x554Ceeee5Ce eՇ 4'^8 F'R7#Lq@f%6SATTACHMENT DESCRIPTORS:%6SADDRESS PARTITION ATT TASK A.PCBL A.TCBL PRI IOC MAP COUNT%6S------- --------- -------- ------ ------ --- --- ---------%6S%P%5S%2R%6S%2R %P %P %D. %D.%6S%D.%6SA.STAT: %R %R %R %R %R %R %R %R&f5weweweCt X7e2@7d` s77e   eeee 5@Ueeeee  8 e&B7 :8ee%6SWAIT QUEUE:&feeCB7e2@7  je AST@ DST -CHK SEF HLT@ ABO STP SPN WFR%7STASK TCB ADR TI T.PRI STATE BITS (T.ST2)%7S---- ------- -- ----- ------------------%6S%2R %P %6A %D. %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A78&fe <ee7 F8 %6<%2A%O:%4>NONE f&f&& 8!eeCeCe NeC`E8 e| &  m  f A N  %00T:85555128)J)D)[1,6]""`SY22 ERROR LOG BUFFERS%6SBUFFER ADDRESS = %P00 ENTRY TYPE CODE = %P%3SENTRY TYPE SUBCODE = %P%6STIME = %Y %3Z%12S<<<<<>>>>>%12S>>>>>UNABLE TO CREATE ERROR.TMP IN THE CURRENT DIRECTORY>>>>>%12S>>>>>Warning: ERROR.TMP cannot be created in [1,6]>>>>>%NCDA -- ERROR.TMP cannot be created in [1,6]%N5< 56 .P( Kx+||v+@ D D D D D D eD  + @+eD  eEBaD CB eބ  f&feD eD  MEMORY DUMP-%   %4S%8A %4P !%R %R %R %R!!%8E!%6S%P %4P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]fwd7 \&fVT7RwPEHE@7 R7 P7 NE,(& D j 2 . 7!w!7w  .f. eD ..7 R$   7 7  &ff NJeDB@ Pp p . D.% ,& Tg. J w`. rew  7 * + -  POOL DUMP%27SS Y S T E M P O O L%6S* = NEXT WORD ALLOCATED FIRST FREE BLOCK ($CRAVL) = %P%4S%P %2A%P %2A%P %2A%P %2A%P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]%6S > > > > > INCONSISTENCY IN DYNAMIC STORAGE%6S+ = NEXT WORD IS IN $PKAVL LIST $PKAVL = %P%6S- = NEXT WORD IS IN $PKAVL AND ALSO IN $CRAVL > > > > > $PKAVL LINK ERROR AT %P -- FWD PTR = %P SECONDARY POOL DUMP%25SS E C O N D A R Y P O O L%6SNUMBER OF FREE BYTES = %P00%6SFIRST FREE BYTE = %P00%6SLENGTH = %P00 BYTES%6SSTART ADDRESS = %P00%12SENDING ADDRESS = %P77.. .e:.&/G/e0ڃ H7 F7 <l0 %"7 00T :M8557i:)*   $7    P. F  e5@d _/n /ex/deP 0 e-,&$ Pa10e B B B B B B D D D D D D `D `e?  *(&f  ^  ( e AP P z  - R }.& (( T  J(l \ (\ .(PNNf& -7 D B@ > > > > TASK '%2R' NOT IN MEMORY%4SWINDOW #%D -- TASK VIRTUAL LIMITS %P-%P%4S----------------------------------------------%NCDA -- Task '%2R' not in memory%N%6SPHYSICAL STARTING ADDRESS = %8A%6S------------------------------------%6S------------ THIS TASK HAS NO D-SPACE ---------------%6S > > > SPECIFIED VIRTUAL ADDRESS RANGE NOT IN WINDOW 7 57 U U (`e\Zz(we w-*-" e&e5wbe7F( )e5,#)[)e~*wV5e05?)[)eFe&Ce z Ce b  w)e eCe$w%e& Ce  FE`5w,Cewe Ce CeCe5-- ^U@-- E)) pn^ VmXB % B eB eD &f Q*t*  eve we׳ eL) -*U 5 5U0w5@*7 %4S%8A %4P !%R %R %R %R!!%8E!%6S%P %4P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]fwd7 \&fVT7RwPEHE@7 R7 P7 NE,(& D j 2 R. 7!w!7w  R.fZ. eD R.Z.7 R$   7 7  &ff NJeDB@ Pp pl. .% ,& .  w`Z. rew  7 %4SWINDOW BLOCKS:%5SPAR VIRT LIMITS ATT DESC WND SIZE OFFSET 1ST00T:8555512 PDR NO. LAST PDR%5S--- ----------- -------- -------- ------ ------- --- --------%4S%2R %P %P %P %P %P %P %D %P%5SPAR VIRT LIMITS ATT DESC WND SIZE OFFSET%5S--- ----------- -------- -------- ------%4S%2R %P %P %P %P %Pfe$CvCr%e0e,%* 0081f111Ce 2E`5>Ce  eeCeCeCeCeCe Ce eCe Cee  KERNEL INSTRUCTION SPACE DUMP KERNEL DATA SPACE DUMP%6S%P %4P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]%12SVIRTUAL ADDRESS: %P PHYSICAL ADDRESS: %8A > > > > > INVALID ADDRESS RANGE WITH STANDARD MAPPING%NCDA -- Invalid address range with standard mapping(vv|p~|)ZZ5||FXV%5 % ) e)fE5 B  L7 D 7 >  0 ,(&fe AP P &  d ((R 1)-7 f&((7 R$   3- tS) !f( R ((RS (1)eX (7 "&f e\w)ePff`  ff  C5 e `%4S%8A %4P !%R %R %R %R!!%8E!%6S%P %4P !%R %R %R %R!!%8E!%23S[ABOVE LINE REPEATED %D. TIMES]fwd7 \&fVT7RwPEHE@7 R7 P7 NE,(& D j 2 >) 7!w!7w  >)fF) eD >)F)7 R$   7 7  &ff NJeDB@ Pp pX) |)% ,& )  w`F) rew  7 CPR INFORMATIONRSX TO VMS RINGS:VMS TO RSX RINGS:PACKETS IN RSX-CONTROLLED AREA: FLAGS: %P %R %R %R %R %R %R %R %R ADDRESS: %P00, LENGTH: %Q MEMORY AT %P00 IS FREE FOR %Q00 BYTES. PACKET AT %P00 OCCUPIES %Q00 BYTES. LENGTH INDEX TYPE ITEMS TCB TI UCB VMS UCB ------ ------ ------ ------ ------ ------ -------- %Q %Q %Q %Q %P %P %8A RETURN APR NET STATUS ------ ------ ------ ------ ------ %P %P %Q %P %P FLAGS: %P %R %R %R %R %R %R %R %R ITEM OFFSET: %Q, LENGTH: %Q, ID CODE: %Q ITEM BUFFER BEGINS AT %Q:> > > > > LOOP FOUND IN LINKED LIST IN POOL AT %P> > > > > CPRBUF REGION WAS NOT FOUND> > > > > CPRBUF REGION IS NOT IN MEMORY> > > > > CORRUPTION DETECTED IN CPRBUF> > > > > ITEM NOT IN PACKETz@U:xL skcZ@gr0123456789ABCDEF\x+eJ $D!J <!BCf&e Re 4e!&e Re e!eC- - w- eee@m   N n+ h l  X+ N R  >e?D E?ww~w|mvn+  ^   w. &eD &b. +eD eD + ۀwv  -bweT`,00T:M8557i:)* pEw:Ӵw`8, V -χ7we+eeee J],,, eeeeee,,- &b. .%- |f& lw7m  f&eD 7!>w!: eD f&PPK-^\mB mD 7!Jw!DEw- F<. f&b.Z.CE䜎.        2),2),"*-d)- )f-N*/*0+V0 BSY@-MNT FOR MDM OFL-RED PUB UMD PDF SIO@ TRN MUN MNT@ F11 COM PSE OSP ISP SWL UMD@ MSD SQD SDI DIR TTY CCL REC DH1@ DJ1 RMT L8S NEC CRT ESC-LOG SLV@ DZ1 HLD AT. PRV L3S VT5 LWC-ALG@ NPR QUE PWF ATT KIL LGH RST ESC RSP PTH RNE TSY@ OBY IBY DPR DEC IBF DSI RES RNF@ TNE USI RCU WRA WRB WAL BRQ SRQ@ ORQ IRQ FLF ELF CR OBF PCU BEL@ CTO CTS ACR TAB CTC RAL NEC TSY@ 8BC FDX MHE ICE TME PTH RES PPT@ RUB WCK SPU VV DEVICE INFORMATION %5A ----- UCB ADR DCB ADR SCB ADR REDIRECT ACP ATT OWNER LOGIN UIC ------- ------- ------- -------- --- --- ----- ---------%4S%P %P %P %6A %2R %2R %6A [%O,%O]%4S%P %P %P %6A %2R %2R %6A%4S%P %P %P %6A %2R %2R%4SU.STS: %4A %4A %4A %4A %4A %4A %4A %4A%4SU.ST2: %4A %4A %4A %4A %4A %4A %4A %4A%4SU.CW1: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.CW2: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.CTL: %4A %4A %4A %4A %4A %4A %4A %4A I/O REQUEST PACKETS: PACKET ADR REQUESTOR PRI EFN LUN FUNCTION CODE STATUS ---------- --------- --- --- --- ------------- ------ %P %2R %D. %D. %D. IO.%R%8S%7A %P %2R %D. %D. %4A IO.%R%8S%7A UNIT CONTROL BLOCK: UNIT CONTROL BLOCK EXTENSION: DEVICE CONTROL BLOCK: STATUS CONTROL BLOCK:%4S%P %P %P %6ACURRENTQUEUED %4SU.TSTA: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.TSTA+2: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A%4SU.TSTA+4: %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A %4A > > > > > REDIRECT ERROR (U.RED=0)INPUT OUTPUT N/A +$%44ӎ 7 ӦҲ( CeE%TTUeCee  ?^(wlETCeL55<U45\5&CeCeCe5 Ce5wC &++ @++PCeCe J / Ce5/65  Ce Ce 5,Ce Ce C,Ce5v,  x0 7 ehf5(CeD %(5@n+ A &  e/Ce E D  7 t5@xCe7 bwV5Vn1/50$5@( ы XCeY 5S5@O1/ < ? 9Ceee ѳ e  eC  eC eC   0ѳ  U/ Ce5$q/Ce& Cee%MT0ee E p efׅm w%ewf55  0  n 0 xm m/ Vdz/x(C Ce  pe 4ϋECe  *v f- \-E. &fPCe CeCeCe5 E50.+Cee&:Ϸ ~e e"ϳ e>V  .Ce n. C( feC%#00T$:8555512eC%_e Cα e  %6<%2A%O:%4>NONE f&f&& 7!eeCeCe eC`E7^ eT ff`  ff  C5 e ` 4F.q"|(+N0swbrt  ' r q! +s2#p G@$spra  s s. @vrtBy Fy@yPw`-tpx!28& z1q&R H--- .(.0.8@6HWyPWXbY`{fI7  ؙ&  m  f A N  %d TASK HEADERS %2R ------ ( OUT OF POOL ) %4SHEADER ADDRESS = %P%6STCB ADDRESS = %P%4SPS=%P%5SPC=%P%4SR0=%P R1=%P R2=%P R3=%P R4=%P R5=%P SP=%P%4SINITIAL PS = %P INITIAL PC = %P INITIAL SP = %P%4SHEADER SIZE = %D. NO. OF WINDOWS = %D. NO. OF LUNS = %D.%4SCURRENT UIC = [%O,%O] DEFAULT UIC = [%O,%O]%4SH.WND = %P H.GARD = %P H.VEXT = %P H.SPRI = %D.%4SDSW = %P H.FCS = %P H.FORT = %P H.OVLY = %P%10S INSTRUCTION SPACE%10S D A T A S P A C E%10S -------------------%4SHEADER:((W%..&؎7 ئزe%++؎7 ئزطeؖ%e5 e&e5wR(wR( (( ne&٦ e e(ٳ  ) ,&Ce:%e % Cee  7) ߐ%CeH) Ce CeCe{) CeCe$Ce<) VCe  Ce  ) ,Ce$Ce:Ce.Ce0'* Ce&Ce(Ce*Ce,d*e e** 5 e05 e**U er*Ce %XCeNބ׳ ew %4SWINDOW BLOCKS:%5SPAR VIRT LIMITS ATT DESC WND SIZE OFFSET 1ST PDR NO. LAST PDR%5S--- ----------- -------- -------- ------ ------- --- --------%4S%2R %P %P %P %P %P %P %D %P%5SPAR VIRT LIMITS ATT DESC WND SIZE OFFSET%5S--- ----------- -------- -------- ------%4S%2R %P %P %P %P %Pfe$CvCr%e.e% *.v...$/X/Ce 2E`5>Ce  eeCeCeCeCeCe Ce eCe Cee -1[11111%4SLOGICAL UNIT TABLE:%4S# DEV WINDOW W.CTL W.FCB F.FNUM F.FSEQ F.STAT NAC NLCK%4S- --- ------ ----- ----- ------ ------ ------ --- ----%4S%D %5A%P %P %P %P %P %P %D. %D.%4S%D %5A%P %P %P %P %P %P %D. %D.%4S%D %5A%P%4S%D %5A%P%4S%D %5A%P %P %P%4S%D %5A%P %P %P > > > > > ACP OUT OF MEMORY OR NOT IN EXECUTION%N > > > > > REDIRECTED DEVICES FORM A LOOP FROM UCB AT %P.fCe<9%0e00Ce> P eE (%  A 1 7 e &f|0z&@Ce  Ce  efw2 сwdCeE%ICeµ`B-? :0ee%.-T'"  x0eeeeeѳ    &e/e5'7 e<e&e5e mXh3 3 e  < %6<%2A%O:%4>NONE f&fv&& [4!eeCeCe NeC`EN4 e 00T,:M8557i:)*&  m  f A N  % CLOCK QUEUE%6SADDRESS = %P REQUEST TYPE = %D TCB = %P TASK = %2R%6SADDRESS = %P REQUEST TYPE = %D%6STIME REQUEST BECOMES DUE = %5Z%6SC.AST = %P C.SRC = %P C.DST = %P EVENT FLAG = %D.%6SC.RSI = %P%P C.UIC = %P%6SC.UIC = %P%6SC.SUB = %P C.AR5 = %P%12S<<<<<< INVALID REQUEST TYPE >>>>>>%12S<<<<<>>>>>l)))))I(. AJ*= eP%)ťťe X%ee(  ~ &  Ee` f&f&e eB eA &eA < eA < ePBJ) f&f%ee eee % eL*A h b) X5 e:* 0Q6^xwQS ]f@x CONTROLLER INFORMATION%4S%2A%4S--%6SCTB ADDRESS = %P L.DCB = %P%6SL.STS: %R %R %R %R %R %R %R %R%6SCONTROLLER TABLE BLOCK:%6SDEVICES INTERFACED BY THIS CONTROLLER:%6SCOMMON INTERRUPT ADDRESS = %P%8SDCB DEVICE NAME%8S--- -----------%6S%P%8S%2A%6SKRB ADDRESS = %P%6SK.STS: %R %R %R %R %R %R %R %R%6SCONTROLLER REQUEST BLOCK:%12S> > > > > LINK ERROR AT %P, FORWARD POINTER = %P%&)PH ) 4,0(  \eRC  CeXn1)8) "Ce>) Ce( b) )Cee EC5eef) Ce51Ce *C) z)* ),C) &efn*)*Ce e2n*efCee =)9C3 %* e( 9* \*e eC` een %5  Ty* J߱ff`  ff  C5 e `--200T4:8555512dTASKSYSTEMGROUPFinalPrivileged = LOCAL LOGIN ASSIGN TABLE%5SLOGICAL PHYSICAL TYPE%5S------- -------- ----%6S%6<%2A%O:%4>%4S%6A%4SGLOBAL%6S%6<%2A%O:%4>%4S%6A%4S%6A%4STI - %6ASystem Logicals:%5S%5SBlock: %Q%5SBlock: %6<%Q%6>Status: (%VA)User Logicals:%3STerminal: %5AGroup Logicals:%3SGroup: %QTask Logicals:%3STask: %2R > > > > > LIST OF LOGICAL NAME BLOCKS FORMS A LOOP.5 5 .5@I.-. ;C--e CeCe CeJ.-‹-Pi.Ce -Ce (.  hV0   x w(&eD fEEe E eD & w* N\eD   *v& x"k6 w& Y 77 .sE - EE`  .ѝxs.$0+Y E(  0+Е,Е P 0+0+. ڀ4/ % %@& ӕ%ӕVӕA!Q .`s. Qe2. (K0, eCee  Ce5 Ce 5Cmf  J.2  فm %e peC! ed/ Z(2,  377 e*- & '/eC' B$3` Z e. 3@6,   / " &6,ȋЭ1Н)d%6<%2A%O:%4>NONE f&f&& 3!eeCeCe peC`E3 e &f& v &  m  f A N  %%6N [END OF ANALYSIS OUTPUT]%F%2N *** CDA STATISTICS:%6SERRORS DETECTED: %D.%6STOTAL PAGE FAULTS: %D.%6SSIZE OF CORE BUFFER: %D. WORDS (%D. PAGES)%6SELAPSED TIME: %3Z %VA%NCDA -- Errors detected: %D.%N5DiU<& & Y5,]e`( )۷ J%) )7 =)PPW)(f=ABC ڂ ځ e e< e<P)e)5jG5b?d 89f"e\e!e N 5f |2* eA d E $ 50 F& & & & & & & & & Ε %NCDA -- Command line syntax error%NCDA -- Illegal switch%NCDA -- No output file specified%N %VA%NCDA -- Analysis output must be directedto an explicit device or file%NCDA -- Output dump file name must be explicit%NCDA -- Crash dump must be input from an explicit device or file%VS/\%N%NCDA -- No input file specified%N%VA%N/\%N 2 &63 8(56565`6  45  55@z .5l # (E)*6*&  )#) * L))).* , <7 7 7 7 ~z 2| 5M w5E؇ >؇ 7 ؇ 0.ڇ5l(5d$ w5T5L5D     eE 7.؇w75` (\ U  5U@ wwN7-P@ -H w67އzއ5@p 1 1  W  N F w>5d5^65T5L7 7 7 00T<:M8557i:)* w w w  w  w` d5 5P^ HZ@N:L؇ 05 5, ( ؇ ؇ ؇5Xׇ5Mׇ C5?ׇ 854ׇ -5)|ׇ r"5lfׇ \5VPpׇ F BJ݇5 ww ( E\( 15B(( #0 , 0 0 ( - - ( w̥, ( `-vpmj.( Z ( `( %.7 `& (wN  wBee7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &f1     8  " .$ B  8̥ZḀ90     w F(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$EXITLIMITLINESSPMEMSIZSTBALLCLICPBATLACTSTDTCBTALHDRDEVDCBSCBUCBPCBPARPOOLPOLSECPOLTISTDSTASADVTSKTASKDMPDUMPKISKDSKMRBLCLQCTLDECNETNETCACHECPRLOWHIGHSYS22!2'2*2125292=2A2E2I2M2Q2U2Y2]2a2e2i2m2q2v2z2222222222222222222222+= 3, 3ț6N+ /\3:3-z3^+ 333  T3 :3T3†n+T3:†|+T3:†+T3ț6+ /3:33 :†+:3+ȁ6,+3/3ʆ+T. 3+3,3ʄ 6  6  6 6 6 6 6 6@ 6 6 6 6 6 6 6 6 6 5,545555 655 5 555  66 6 6 6 6@5 6-t5 DENS<5T5ID5T5TL5T5YT5T5=\5:\5:,n5R,n5X,n5`, 6 6 =5:5 6V/ 6 6=5:5΂,:5 6‚(-:†\- 6:5 6‚-:†- 6:‚-:‚-:5 6†- 6:‚-:†. 6:‚.:†0. 6:†F. 6,3/3ʄh.[.N6ȃ6~...x6;.6:>6.6[.N6.l6l6.Z6Ά.`6,‚.]/.l6;6.x66/6;66̂/6/6$(6_(6&  m  f A N  %&f  %NCDA -- Failed to extend page buffer - %D. pages available%N%NCDA -- Failed to assign LUN to input device %VA%N%NCDA -- Failed to open input file %X%N%NCDA -- Failed to open output file %X%N5UUa& & Y & fY L) w` 8)&= E 7 Lڷ5@X?()  )  07 @ U 7ff7 ɥDY 7 5d eB$& Z # ^Uw5# "( eB$& [# U5 H1  "(8)eB$& 6# 0,( e p 0 5&$ eB$& j# n  ))eH 00TD:8555512%NCDA -- Premature end of dump input - %X being zero-filled%N%NCDA -- Transfer complete - %VA may be unloaded%N%NCDA -- Error writing dump file %X Error = %D. DSW = %D.%N5z  VP%??B!B   `c X e # 0p YV `SP   $ &eH(0p p/r, )f&  && & & & & & & & & Ε E@lU f) pRdTeHI) %NCDA -- Symbol file %X has illegal format%N%NCDA -- Symbol %2R not defined in symbol file%N5 7 7 Q$%v7   F %J w(  ( D ))))))))(&X1-+-(̵ % $ #-@ %$%%$  (l  ) %NCDA -- Error reading symbol file %X%N  $ J *eHP* 77 & UA VOLATILE REGISTERS AFTER CRASH: PS=%P SP(K)=%P SP(U)=%P AFTER CRASH: PS=%P SP(K)=%P SP(S)=%P SP(U)=%P BEFORE CRASH: PC=%P PS=%P R0=%P R1=%P R2=%P R3=%P R4=%P R5=%P MMR0=%P MMR1=%P MMR2=%P MMR3=%P%20SU S E R%29SU N I B U S M A P%5SI S P A C E%11SD S P A C E%16S%VS%D %8A%5SPDR%7SPAR%11SPDR%7SPAR%16S%VS%D %8A%14SS U P E R V I S O R%25S%VS%D %8A%18SK E R N E L%29S%VS%D %8A KERNEL STACK KERNEL STACK:> > > > > KERNEL PAR'S CLOBBERED%4S%P %P %P %P%14S%VS%D %8A%58S%VS%D %8A%4S%P %P %P %P%20SU S E R%5SI S P A C E%11SD S P A C E%5SPDR%7SPAR%11SPDR%7SPAR%14SS U P E R V I S O R%18SK E R N E L PROCESSOR %A %VA (FIRST PROCESSOR TO CRASH)<<<<>>>>%16SCPU ERR = %P%3SMEM SYS ERR = %P%3SCACHE CTL REG = %P5w>|T%F v n%\X|  ee %` @feeee5wJ( P(%­ ++eÝ mP؋%NH(e+ -w* 50(%) %   + l  \) R  {) 4 )e7 )%)+7  $%+ * * N* |* n* d* Zt* P*eq+ ev+ l  N* **\   wZ -5 |L   %5+W+  h) ^&*  0 ` & +%b%* 0 &f  %  C CE e) @%<%8%%$-x5X-j %ÝN m 5*  2%e&e"06Bx~2&,8DJPV\b^dp "$64pHTZ LOWCORE ALPHABETIZED DUMP %2R% %7S%2R% %7S%2R% %7S%2R%11221Z H07  N2 .$2 &*2 02 1  0& x d^Ze TVXZ %P <49-64> %P $COMEF: <33-48> %P <49-64> %P SYSTEM NAME = %6A $NTUIC = [%O,%O] LOAD DEVICE = %2A%O LBN = %8A FILE SIZE = %D. SYSTEM HAS STANDARD EXECUTIVE ----------------------------- PRE-GENERATED DISTRIBUTION KIT SYSTEM FEATURE MASK (FIRST WORD) = %P SYSTEM FEATURE MASK (SECOND WORD) = %P SYSTEM FEATURE MASK (THIRD WORD) = %P SYSTEM FEATURE MASK (FOURTH WORD) = %P SYSTEM FEATURE MASK (FIFTH WORD) = %P SYSTEM HARDWARE FEATURE MASK (FIRST WORD) = %P%8SBIT SET%14SMEANING%8S-------%14S------- POOL STATISTICS POOL SIZE (BYTES) = %M. LARGEST FREE BLOCK (BYTES) = %M. TOTAL FREE BYTES = %M. NUMBER OF FRAGMENTS = %D. MINIMUM BLOCK SIZE (BYTES) = %D. POOL BITMAP (CONSTRUCTED FROM LINKED POOL, BLOCK FREE IF BIT SET): > > > > > POOL LINK ERROR AT %P -- FWD PTR = %P SIZE = %P%NCDA -- Pool link error found - continuing%N%10SEXT%8S22-BIT EXTENDED MEMORY SUPPORT%10SMUP%8SMULTI-USER PROTECTION SUPPORT%10SEXV%8S20K EXEC SUPPORTED%10SDRV%8SLOADABLE DRIVER SUPPORT%10SPLA%8SPLAS SUPPORT%10SCAL%8SDYNAMIC CHECKPOINT SPACE ALLOCATION%10SPKT%8SPREALLOCATION OF I/O PACKETS%10SEXP%8SEXTEND TASK DIRECTIVE SUPPORTED%10SLSI%8SPROCESSOR IS LSI-11%10SOFF%8SPARENT/OFFSPRING TASKING SUPPORTED%10SFDT%8SFULL DUPLEX TERMINAL DRIVER%10SX25%8SX.25 COMMUNICATIONS EXEC IS LOADED%10SDYM%8SDYNAMIC MEMORY ALLOCATION SUPPORTED%10SCEX%8SCOMMUNICATIONS EXEC IS LOADED%10SMXT%8SMCR EXIT AFTER EACH COMMAND%10SNLG%8SLOGINS DISABLED%10SDAS%8SKERNEL DATA SPACE SUPPORT%10SLIB%8SSUPERVISOR MODE LIBRARY SUPPORT%10SMP%9SMULTIPROCESSOR SUPPORT%10SEVT%8SEVENT TRACE FEATURE%10SACN%8SACCOUNTING SUPPORTED%10SSDW%8SSHADOW RECORDING SUPPORTED%10SPOL%8SSECONDARY POOL SUPPORTED%10SWND%8SSECONDARY POOL FILE WINDOWS SYSTEM%10SDPR%8SDIRECTIVE PARTITION SYSTEM%10SIRR%8SINSTALL, REQUEST, AND REMOVE TASK SUPPORT%10SGGF%8SGROUP GLOBAL EVENT FLAG SUPPORT%10SRAS%8SRECEIVE/SEND DATA PACKET SUPPORT%10SAHR%8SALTERNATE HEADER REFRESH AREAS SUPPORTED%10SRBN%8SROUND ROBIN SCHEDULING SUPPORTED%10SSWP%8SEXECUTIVE LEVEL DISK SWAPPING SUPPORTED%10SSTP%8SEVENT FLAG MASK IS IN THE TCB%10SCRA%8SSYSTEM SPONTANEOUSLY CRASHED%10SXCR%8SSYSTEM CRASHED FROM XDT%10SEIS%8SSYSTEM REQUIRES THE EXTENDED INSTRUCTION SET%10SSTM%8SSYSTEM HAS SET SYSTEM TIME DIRECTIVE%10SUDS%8SUSER DATA SPACE%10SPRO%8SPROTO TCBS OUT OF POOL%10SXHR%8SEXTERNAL HEADER SUPPORT%10SAST%8SSYSTEM HAS AST SUPPORT%10S11S%8SRSX-11S SYSTEM%10SCLI%8SMULTIPLE CLI SUPPORT%10STCM%8SSYSTEM HAS TTCOM SUPPORT%10SPMN%8SSYSTEM SUPPORTS POOL MONITORING%10SWAT%8SSYSTEM HAS WATCHDOG TIMER SUPPORT%10SRLK%8SSYSTEM SUPPORTS RMS RECORD LOCKING%10SSHF%8SSYSTEM SUPPORTS SHUFFLER%10SCXD%8SCOMM EXEC HAS BEEN DEALLOCATED%10SXT%9SSYSTEM IS AN XT SYSTEM%10SERL%8SSYSTEM SUPPORTS ERROR LOGGING%10SPTY%8SSYSTEM SUPPORTS PARITY MEMORY%10SDVN%8SSYSTEM SUPPORTS DECIMAL VERSIONS%10SLCD%8SSYSTEM SUPPORTS LOADABLE CRASH%10SNIM%8SSYSTEM SUPPORTS DELETED TASK IMAGES%10SCHE%8SSYSTEM SUPPORTS DISK DATA CACHING%10SLOG%8SSYSTEM SUPPORTS EXTENDED LOGICAL NAMES%10SNAM%8SSYSTEM SUPPORTS NAMED DIRECTORIES%10SFMP%8SSYSTEM SUPPORTS FAST MAP DIRECTIVE%10SDCL%8SDCL IS DEFAULT CLI%10SDDS%8SNAMED DIRECTORY MODE BY DEFAULT%10SACD%8SSYSTEM SUPPORTS ANCILLARY CONTROL DRIVERS%10SNCT%8SSYSTEM HAS NCT SUPPORT%10SLSD%8SSYSTEM HAS LUT SCAN DISABLED%10SPRO%8SSYSTEM SUPPORTS PROFESSIONAL 3XX SERIES%10SDFB%8SSYSTEM HAS DEFERRED BINDING%00TT:855551210SRTB%8SRUNTIME BINDING%10SODB%8SOVERRIDABLE DEFAULT TO USE DEFERRED BINDING%10SXDJ%8SXDT IS USING KXJ INTERFACE FOR I/O%10SNSY%8SNO LOCAL SYSTEM DISK%10SNCO%8SNO LOCAL CONSOLE%10SRTK%8SREMOTE TASK SERVICES%10SRDR%8SREMOTE DIRECTORY STORAGE%10SRLG%8SREMOTE LOGICAL SUPPORT%10SUBM%8SSYSTEM HAS UNIBUS MAPPING SUPPORT%10SEIS%8SSYSTEM HAS EXTENDED INSTRUCTION SET%10SQB%9SSYSTEM HAS A QBUS%10SDSP%8SHARDWARE SUPPORTS DATA SPACE%10SKXJ%8SPROCESSOR TYPE IS KXJ%10SRMT%8SREMOTE SERVICES REQUIRED%10SCIS%8SSYSTEM HAS COMMERCIAL INSTRUCTION SET%10SFPP%8SSYSTEM HAS ENHANCED FLOATING POINT PROCESSOR SUPPORT GROUP GLOBAL EVENT FLAGS GROUP NUMBER =%O ACCESS COUNT =%P GGEF DUMP:5pw<E5Bw,* ee eEe<*e$%(-X** #*  (pD a :a** ^ w! JPew4p E Ӄ  * `a+%`/+de 2P wd҃  + P@ewEEe e+ +%H%@$,, nZ, ( ej, `,) ^eF, <l) :e", ) e, r) e$- * 5; ( eC5?;e eC- 7 7 7 7 ~  w 5we` `pw-k i=xfv ~aw!x^T \ˎ   R  @5jB<- "- - v - hʐ .eV(. ʄ e % eem. e. U-k-5 DeDeZ; ;e Ceˇ%8S%VPf& |  B  @  @ @f&  `E L\@  % & `E <@lFHNT&j.BX4H<`h2,P`rzN>8t0D@ d:R^Xz(0<*.(\Vbnht Pr 2 f`l6<*L@&,J>vx$T"*nxN|FRL jB~$Z:Zf~x~ SYSTEM COMMON DUMP ADDR LABEL VALUE ADDR LABEL VALUE ADDR LABEL VALUE%P %2R %P%10S%P %2R %P%10S%P %2R %P%7S%2R %P%17S%2R %P%17S%2R %P%P %2R %P%10S%P %2R %P%7S%2R %P%17S%2R %P%P %2R %P%7S%2R %PCCDC!DD$$**0<6<HNBHTNTZ`Z`flrx~x2&~, &,2>JPV\bhn tz&,28>DJPV\b h"(.n4tz:@FLRXjv   "$*0(6.<B4:@FLRX^dj|N`flrx~ SYSTEM COMMON ALPHABETIZED DUMP %2R% %7S%2R% %7S%2R% %7S%2R%FFFF  rDC E7b0DP-V~:YC F7 B-,0>D -$8D@D - 4DBD  e A &fP :0 w&fm-ɠɘe e  j7^@`7Z@`7VPR-RLJDC @ eDC A ,D^FR DNDb JF F F F F  &ND V e w w 00T\:M8557i:)*w w wW \FD# DE!\F5S   "  4S%BPw1S%P .jIIJJIIII MULTIPROCESSOR TABLES%30SPROCESSOR%18SA%18SA%10SB%18SA%10SB%10SC%18SA%10SB%10SC%10SD%6S%2R%4S%P%6S%2R%4S%P%5S%P%6S%2R%4S%P%5S%P%5S%P%6S%2R%4S%P%5S%P%5S%P%5S%P IReI  AIejID%  AxI &  m  f A N  % CACHE INFORMATION DUMP OF CACHE REGION: %2R -----------------------------DEVICE: %2A%Q: DESCRIPTOR STARTING LOGICAL LENGTH PHYSICAL ADDRESS BLOCK NUMBER (DISK BLOCKS) ADDRESS %8A %8A %Q %P00> > > > > LOOP FOUND IN LINKED LIST IN POOL AT %P> > > > > CACHE REGION WAS NOT FOUND> > > > > CACHE REGION IS NOT IN MEMORY> > > > > REQUESTED PARTITION IS NOT A CACHE REGION> > > > > LOOP FOUND IN CACHE STATISTICS BLOCKS AT %P00> > > > > LOOP FOUND IN CACHE EXTENT DESCRIPTORS AT %8ANO DEVICES HAVE CACHING ASSOCIATED WITH THIS REGION(ve$( ) \J $D!N <!FCf&e 6e ,Be!*e e -e!eC) ) '* w) * w [* ee5e J7we N ,  :  E   D D D D D D f& ee0+Dee $eE`7 ))9)g)eA je2:`D jeD  , `D JeD   E`D eD  +N * f&f+0 eD eD D eD  )&  m  f A N  %00Ud:8555512|,?|?| Y 2B  zTITISYSYSYTISYSYOVXB j0'f( TITIDUDUDUTIDUDUDU?|p)X|XwV  a@`AB S  & ew  5AEA5 ef f ^  RN H@ewv5’ @  B@A  @@P5e w<) @N   Ԁ )% ! a E`   v    % d  R  @  .     f @w   w  5B`  w2/      5@         @!   &  ~ f   3f f &f &ff 8| & & @( v#f  e ee e .f, @fef w` ew  @fef w`ewef 6 e      wD  B 5 - 5(@7ldfh(d"ZV R D & 5Af@ "* 7 w  N   @m 7  .7    rz z r f`ff 4T V 7 V N 8 0 7 (( 7  Nf w e w  5  `˵c5˵ x@ @*   \w %58 @`1 f $ N V 8   f-00Ul:M8557i:)* 2 t^  5L   >5. :5" 65 25  5 "~p &    e7 .5  & "  D  %5 7 "   Z   0% wlf@m 7 @eE& j  >w`  p`wBv   C`D # - ` - ` - ` - ` - ` ` ` ` ` - ` - ` ` ` - ` %f 0 -x ~ $p  N L f`& < e  e  o4 2 e 7 f 5 # eEe f& w    `  e  e ߾ eEm 7 X  b- 1| z  & `& b e  eh b eEmV 7R e  oB @ e 7 f eEe L5 f& w `     ` e  w` w-x| heb eE f \` ` @  ef f e` 7 -R d $J  . , f`&  e  e  o e 7 f 5)eEef w` H0 0 e w> e xe m~`~ex reEmf7b8b-R.D& `&  e  e  e eEm7e 7 f d5~(eEef tw`~xv` 0 e f> rze m`H7 :7 h $ vza?   P LD@@e fe?E?@m" & f 6Y w` X @    W  W W | de R   `wl f v C W!W! mDm  D!  -m W!p  ,%w    %w eEm" 7  b m 7 - 0 $   w w А ` -  w R  R eEB K  `wl w l wf X  a >>!ZJ"l!x!!!!\O!RRR' f RPT>fz"L Z" R"r" !j"  ERLCFLError at line '&1 24: *4h; "4; 4; 4< 4= 4"= 4\= 4> 4? 4A 4zD 4F 42M 4P55ew r , Bv     5Bwr #/'$(5  5 2  UE  4"" ~($("4E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&f w f 2) 8C * ) *w`*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)wb C# f  00U|:M8557i:)* D @)  6?0D)w  n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e b* e*wf@)0,    ) @)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,   wL  JwZB # f f  `* rwb)0406 l0 *) l0, *) $ )*)0,40,6 e6p 4 8  81416 * : `   8  d**&ff   DP5R RRR ** ..8em,0l0!D0e6p 4.) 8&f 6  e) .  e6p 4 08*w<=p!Օ^> =00l&8el2 0 *141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ vwf8e2 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f P545P5>44;P5=444Z4s|44[4sT44\4s44]P5444^5l45f544jt54jt5(5mt545qt5@5ut55w 85m&&  X6e"-  C P e   e f6   f6   w &5 funhj uhdB$ 0jwaw< 8 v8w &  z2*AdBbAep& f  N2 P aAAf@pnp C*8֋ 288*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ $ŀajTI& af* n*`V @e,w Jjjlj ɥ@@aujk,bp 5f fˇ ȕ T ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ "DlljaCeH###33 & 08 *77w  8jDl@ /TeBT85l@ >"@( D H#eB& ( & @# #& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ D"w\ˀ    7 8DM  (  )7*ۖ%:ߎ w߷eB$& <'e*aɋw <"wɋ& 00U:8555512@   f\ 1 4@5 (7 rہ4  <B<:7 @7 87 67 .7 $ۇwɂ m 7 ߀ :w ޷7 ހ ]7޷޷޷޷އw Ԝ\Ԝ]^ ԕ:;& *@&f& VH J ~L t  ԕ.N \  ԕ;P Je7݇wȀ @   B  * 1 7 هf   `p  fЕ Е f& Pee`wZ ,HHD@@f e( wǀ    A @ )*B`ʋ @ f)ʋ ·fw7 O  Z LOOOOOOOOOOOO& 8 e87 H0 0 7 dغ( ,ײ מ 7 7 7 7 HDHB RRR7 ef faP Je 6 7 #&f*P p 7~wz5\Tff e wFeBf   v @ = , \@7 ޣ @wݷw *̇w6Cm5Cm݂  f ( ~ > f >~ wve G @ 0 9 A Z _ a z . : ;ރ [   jW] "   PW" , =  0˷@f5$ "P @  4 6׭/   55~%%wf`!5 SW aW z@ ##W ' ! ʓ'W W  !   f˕  f~؇wvfp؀`   f  6P  E f&ff& e 醦 w A eff  W. N  5j ֦֤W= W  ! pW0!W9 ! B0  t`%aW' @ CА '!W'@ &f ^eWTWF& ,  wef  W   w @ 0 9  A Z _  d wPNJW   B@fa a P& P e  ea a& & Ɓe $G 7`w S 7`w e  e& aa : TefO e  *& aa  >fP e  eeef p     f PP l3 K Pe$f @5 , a a & P e  e  e5 .5 5M &  aa f =&P Be *ze@e Ef@b  `  6e>f 8 6e e ew e /b7 TP `N  @eE@`C \P Ne  Xe    w e7 w5b7 jP   Z@e:6-2D@ "`87`4 .eEm"7&  v Be eE` f j%Ѕ   7!7̀  70p0 I w\X de eE`@  & w8Ё 5 2 dP (N TdP   m   .dP e  l d b 1 1 D mee ҃ f x E@`ew`5F3dP jNH dP X H m0  pdP 2 `dP "e  f   %ɐ 1 C m΀@`w 5w-|Ά7 P00U:M8557i:)*   Xw!`wdP nAaN b  vvaB eE` wdfP &`  @ P Ƽ eE`ePC (  ƼdP  D dP Q N` ^Q W   QQ jH  N`  B  N` f   Vf e &N` 4  &  f e b \w Pw: @ 8 w5l7 8T   S (  N X ޻ F N ndP 0N ^ 7 &PT   hT  $ tT ޺  XT º  @ 8T  к  T R  U f  -R:U @R j  dU Ѐ  B U    lU ֹ Z  Fef e6"e@lO hO #O-: 19SY:.CNFSY:.SYMSY:.ICFSY:.LSTCFL>Option>/OPLITERALB.PRSX-11 CFL-16 V2.00PageGroup Symbol    Offset Uses Group Symbols" Group Literals Type Length ValueNUMERICSTRINGASCIIRSXTIMVMSTIMPOINTERLOGICALPPPPPPP 'FalseTrue+ Group Allocation type Count Size (bytes): Named Literals (these do not take up space in the module) Literal name descriptors  Literal data descriptors  Module Header Module header  Module Symbol Table Group name descriptors  Symbol name descriptors  Module Procedure Area Procedure Descriptors  Statement Block headers  Statement Descriptors " Statement Extension Descriptors Expressions Expression Headers  Operators and Function Calls  Symbol References  Literal Data Data Areas Variable Data  Table Data  Symbol Declaration Descriptors Conditional Descriptors  BIT and FIELD type Symbols  Data Symbols  Symbol Names Qȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %00U:8555512W *Հ W <W [W >W ] v(* 6 ew *8I j *=)98 L eB &&  U >؉**e *Nlv ΋*.2  & #!)&eP(e && >e >E ׆p* $ ww r(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>   1 >w ( D D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# 2 w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  $  P3)/ #( P) F @#**fff h   &*wp. tB5(8e$8w2A&(e  4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B  * F eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2eB  8 $&w *(5<s1  U U@  f&"  )'&M'&&**%*%0 *&* *5ND  <  EU  Z  w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce r   v*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w www *$0,0w 46  *)0406 0 *82e&( j0 0 0 80 B0 0 0 0)#0.)"(. = . B  E (.f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w @*D $  w8w " l) * w:46l0 Mw   f >5>Eu ʁ  f &* *w hBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww JeE D` bl lrw   B eE"s    s-  CslW=f(& e %&&00U:M8557i:)*eH =&e0  U   E > >E(5E=uf p  w(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w Z /$ ,:T < U@% DD%][%><w  w 1  %,,:4 5%& w x&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@ 8   * 6 4 6 e6p 4&*&4&6= (64 wz%!64=5 2 6  l0 & Z46 ð64 :)0406 0 *0e6p 4 = =D `p46 f 64/=  @) 0  8wv ,46 8 0e*w w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7w N )  fU 0%  BA `6p 4p`4 %60 4f)aa& & Ձ ?N  Lw fW  ׭^ 5(7 R%5!7 :: f@X ( F LBX N  %~ew   d   lDX j zeP& hΎD  e ؇ ,,**C   4 { l:?w* V y <u߸ "k e " 9|FBlx ɕ 1  0M ɕ- ɕ$ ɕɕɕ @`w@  1 ɕwe  Ԏwɕ ɕ@`ȕȕɕɕ ɕ > w> Rebɕ ?? ɕ ɕwɕ 1 Nwwɕɕ 1 CS 8  wxɕ  *1 wzɕ w* X^ɕ Bwqɕ w  +ɕɕɕɕ ɕ! p dɕ" w8l 2w .J& w4$qtS < ܇ R  7 900U:8555512 dX t d  *X V r: * wXX v D?8 f>Rw7 7 ݾ Շ7 ۇ7 ۇ54  XU  w * !   $wwP-T wwy  w|yw~wL|wd|ڇ z $0!"   dY#""\ ·t& j ew wb&  *W N d 4)& pr/ )l ڰ ھ{ &  <4e X57 ڇ ч5| 5pD 5`f& ` # D t5L d 6  $Ne Җ%% , &'(5T @  v f( fe N p zp 3e DY& e <v0$ef@S Z t @ N GlYB$ $ &$fZ  N؎ N 0 ee  Ueև  V   W  ևwhāw 5@B  eeeb&  - ˎ& NrNb і%    `װ efՁ wE 05z ˖%0 wjׅW!  - -RՀ 7LEFl400 &p055 .  NN P5e ҁ @ E N e 5 h!! j walԖ%f5b< ( HD : L Z" 5 . \N ^ %w5nՂ   0 @ lY lY >@` lYȕȕȕ@` lYȕ ȕ ȕȕ(ȕ@` lYȕȕȕȕPȕ  LJ-Ԩ5  ć2ч*ч"ччч ччf5 B pıNe :Ȗ%wʼ-f @ ааw w·f-  hv, Tetw^m^XwXmRR@ l@ZBew w` ej͊ (&  N -n i &U j Q N( 81Ee "7 7 9e 2e N ϰ / e " N^e sNebD| ޺1a @ ebN 1v&& rf|bE -b PIE -0$ h00U:M8557i:)* %, , @^mTE @ 4 4 v `ew   D!&&f& re ew m/ efN`& ,e   wj  @ eQ&fE ضe W  @6h eQ&f6hE& e W @7 m W AW Z-7e vh 7|h 7h 7h 7R7 D7 F7 7 4 w)     ^ ~ 5wR6 7Q7 -1  BrY AtY 2F[ 2b]  F[ m~_ ܶc 5 -x n5 @$g &,Q e 6@ eg&fE& e Nn6c  J7 H7 4@ oc  1qQ @ eh&fE& 2e Ɔw-5 ؽ%f)aa Xj7 7 R @m7N Jew5x27 7 7 -`  5- N B  lh ' @ m? ] B  ,      -   eQ&柺E& e -\*7 H! ܦn ܥn @ ,Q&m&me& e w B R D@ W aW z p,Q  > B  B`7"0%W0.W9+- -W'  -tׯ'" p,Q $ FLUSHKEEP4S:SCOMMANDERRORINPUTOUTPUTREPORTUSERJSRSXS^SfSnSCLEARDELETEFIRSTLOADMOVENEXTPREVIOUSRESETSSS S S S S SCND$IF CND$SELECTCNV$BCD CNV$BINARY CNV$DECIMAL CNV$DECIMAL_PCNV$HEX CNV$MACHINE CNV$OCTAL CNV$RAD50 CNV$RSX_TIME CNV$STRING CNV$VMS_TIMECOD$BCD COD$BINARY COD$DECIMALCOD$HEX COD$MACHINE COD$OCTAL COD$RSX_TIME COD$VMS_TIMECOM$AND COM$HARDWARE COM$LONGWORD COM$NEGATECOM$NULL CTL$CLOSECTL$EOFCTL$FILE_STATUS CTL$INPUTCTL$OPEN CTL$STATUSLOK$BYTE LOK$LENGTH LOK$LONGWORDLOK$WORD PKT$IDENT PKT$MODULE RPT$COMMAND RPT$IDENTRPT$LINE_REMAINING RPT$LINE_SKIPRPT$PAGE_CURRENTRPT$PAGE_DEFAULTRPT$PAGE_REMAINING RPT$PAGE_SIZE RPT$STATUSSTR$CHARSTR$FILE STR$LENGTH STR$MATCHSTR$PAD STR$PARSE STR$QUOTE STR$REMAINING STR$SEARCH STR$TRAIL STR$UPCASETIM$RSX_CURRENT TIM$RSX_DATE TIM$RSX_NULL TIM$RSX_VMSTIM$VMS_CURRENT TIM$VMS_DATE TIM$VMS_MINUS TIM$VMS_NULL TIM$VMS_PLUS TIM$VMS_RSX USR$STRINGSSS T!T"T#(T$0T%OQ\dntvz|"-/?OQS]eoz|4RdvS %,8L '7GYa,MZ^c %,8L %,8LP %,8Ls%,$).=CJPShnrx,,\Nn4Rdv!-/4:?OQ]dovz|,>\$).=CJPShnrx$).=CJPShnrx$).=CJPShnrx,[nt,>\P,P;x,S%,wS'7GYa$).=CJPShnrx,,,,$).=CJPShnrxnt, -/:>OQS\eoz|Chr, , %,8L,fsuy{$.=CJPShnrx %,8LC !,/i, %,8Lg, ,i4Rd4Rd!-/:?OQS]eoz|,,P !,/i !,/i  %,8Lx3 fsuy{ !,/i  ,/>\fisuy{$P %,9L&6FX^`m~ %,9L#-2\ $*.=CJPShnrx $*.=CJPShnrx$+.=CKPShnrx,[nt,>\P,P<x,S%,wS(7IYb$+.=CKPShnrx,,,,$+.=CKPShnrxnt,#-2\fisuy{ $P !"$%&)*.1567<?@DEGHIJKLMNPQRTUWXY[\]_`bcdfghjkmnpqstvwyz|}     !"$,./67:;<=?@ABCDEFGHIJKLMNOPQTUYZ]abilnrstvwxyz{}   !"#$%&'()-79:ABEFGHJKLMNOPQRSTUYZ^afghmqrvwyz{|}~      "$%&'()+,-./0123456789;<=>?@ABCDEGHIJKLM似+( 3&)024#,.:%*567;19-!"'$8/DCTUUUUba쮮EEEEFEEEEEFEE\\\\\\\\\]\\pqNORSSSVVVVVVVVVVWVVVVVVVVVWVVVVVVVVWVVVVVWVVVVo}~ GHJKJXY[Zcdcmmnfef ==rrrrrr`_iiiiiiiiijiih@BAILMMttttttvvvvvvlkuuuuuuyz|y{ywwxwwwxxxwxxxxҩ^_ZUײվZs  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^p_ZG"Z?/?<#]uABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_$_|_namenumeric-literalstring-literal444Zf\fffffffffffffffffffffffffffffffffffffffffffffffffffff;(),.=[]:+-|*/><%#DOTOIFOFBYEQNEGTGELTLEOR_|_END$IFSETPUTGETNOTBITHEXBCDANDXORMODnameCALLTHENCASEFILEFINDLISTFLAGELSEBYTEWORDFILLNULLTRUEBEGINWHILEUNTIL$THEN$ELSEWRITELEAVETABLECRASHNAMEDASCIIVALUEFIELDOCTALRAD50WIDT00U:M8557i:)*HMATCHSHIFTFALSECOUNTMODULEPACKETFORMATRETURNEND_IFSELECTSEARCHENABLESIGNALDECODESTRINGBINARYLENGTHLITERAL$END_IFDECLAREPOINTERMESSAGELOGICALDECIMALMACHINECONTEXTEND_CASEEXTERNALEND_FILEEND_LISTREPEATEDRESERVEDLONGWORDQUADWORDRSX_TIMEVMS_TIME PROCEDURE SUBPACKET INCREMENT DECREMENT COROUTINE END_TABLE END_MODULE END_PACKET END_SELECT END_DECODE PARAMETERS END_DECLARE WRITE_GROUP BEGIN_TABLE SIGNAL_STOP WRITE_PACKET RSX_LONGWORD DYNAMIC_TABLEstring-literalnumeric-literaliiiiiiiiiiiiiiiiiiijjj jjjjj j$j(j,j0j6jlHlRl\lflplzllllllllllllmmm*m8mFmTmbmpmmm,:N[dnty}   #%*+++06>?BDFJOOSSX]bddflptwz|             "$&(**,.022468::<>@BDDGGGGGIMRRRSSTVWXXXY[[[]___acccccfffffffiitג =°†yuuȔȔPPɤně.Rdv{ssfцg$3Ȥnwنٛ۲ țʷʷɞ .: Rd=ݨ:  :  Ƹ肙͍̄̄̄̄̄̄̄̊ 44s x44s p4s h44s `5Dv X(5t P45Ly H@5tw    lt `1     8f ܟN& `e tt  e&       8f&& ew‘ ,Ee0 9e Ҁ e0 9e %     >  &&,Z<` ܳ5t Գ45y ̳45yw:  lZt \<BCw ڡ 42- 6 @`eBwܫa ȟ     Be&& ` 4e0  l^t   F Hf ڞf& e  (. 5Dv 45u 45yw)@  lt `V ʡ ġ C @6 t1/5 $1     | @D C  QP  R f 6e  ,& $   %ABCDEFHJKLMNPRSTUV 4f E5 &! V& T 7 ` " V5 NN Hӎ Unimplemented error message-F- 45 5500U:8555512 CSYNTAXERR, Syntax error. PRSSTKOVR, Parse stack overflow.%PARSEREOF, Premature EOF encountered..NOQUOTE, String literal missing closing quote.$ILLCHAR, Illegal character in input.>RESINVPRT, Print expression list not allowed on RESERVED data.@RESBITILL, A BIT or FIELD data item cannot be declared RESERVED.;BITNOPREC, A BIT or FIELD must have a preceeding data item.CBITNOTVAR, A BIT or FIELD not allowed on variable length data item.DNUMFILLCH, A print fill character string must contain one character.ANULLOPERA, Internal - Null suffix operand on non-suffix operator.*INVFUNCT, Invalid function name specified.@INTFUNMIS, Internal - Function code missing from operator stack.3MODATTRIN, Invalid module attribute name specified.:FLUSHINV, FLUSH attribute not allowed with KEEP attribute. KEEPINV, 4TABLEBIG, TABLE element has too many literal values.4TABLESMAL, TABLE element has too few literal values.2BYTERAD50, A BYTE data item cannot print in RAD50.=INVNUMSIZ, Internal - A numeric variable has an invalid size.RADINVRAD, Invalid radix character specified in radix literal.7PROSTKOVR, Compiler internal production stack overflow.CINTPROUND, Internal - Compiler internal production stack underflow.BINTWRONGP, Internal - Wrong production popped internal production.9BITNUMINV, BIT number outside the the declared data item.@FIELDBITI, FIELD starting bit is outside the declared data item.0FIELDSMAL, FIELD width must be at least one bit.7FIELDBIG, FIELD exceeds size of the declared data item.8WRITEDES, WRITE-class statement has invalid destination.CSYMNOTLIT, Specified LITERAL symbol name not part of LITERAL group.HSYMNOTCOM, A variable is not valid in a compiletime constant expression.HVARLITGRP, A variable name cannot have the same group name as a LITERAL.?OPRNOTCOM, Operator in CTCE cannot be evaluated at compiletime.HFUNNOTCOM, Function call not allowed in compiletime constant expression.:FUNWRONGC, Incorrect number of arguments in function call.V>>>?h???.@l@@@A^AAA*B^BBBBC:CjCC00U:M8557i:)* ~<COPRINVLOG, Attempt to perform logical operation on an invalid type.#CONWRONGT, Cannot concatenate type.;SUBEXTBIG, Substring extraction end element exceeds string.9NUMINVOPR, Invalid numeric double-operand operation code.#DIVZERO, Attempt to divide by zero.$MODZERO, Attempt to modulus by zero.%OPRNOTIMP, Operation not implemented.'RELINVCOD, Invalid relational operator.:BITFLDSIZ, Bit or field too large in extraction operation.8ASCIIBIG, ASCII literal quoted string too long for type.;BITTOOHIG, Bit number too large for specified storage unit.8RAD50BYTE, Cannot convert a byte using RAD50 conversion..BADDIGIT, Invalid numeric digit in conversion.>INVRADCNV, Internal error - Invalid radix code for conversion.-VALUETYPE, Value in expression is wrong type.,VALUESIZE, Value in expression is too large.3HEAPOVERF, Heap too small to hold value. Overflow. VALSTKOVR, Value stack overflow.:FUNWRONGA, Incorrect number of arguments in function call.HFUNFIELDS, Invalid conversion code argument to time conversion function.8FUNSTRSIZ, Output string from string function too large.DFUNQUOODD, Quote string in STR$QUOTE function must have even length.;FUNINVPOI, Invalid string pointer value in string function.DFUNNOTCHA, Argument to STR$CHAR is not in valid range for character.FILERREAD, File read error.FILERWRIT, File write error.FFILINVCOD, Internal error - invalid file code for specified operation..FILINTOPN, Internal error - file already open.FILERCLOS, File close error.:FILERSPAN, Records in file are not allowed to span blocks.4MEMINIFAI, Memory allocation initialization failure.CMEMALLFAI, Memory allocation failure - insufficient virtual memory.506T66667:7b7778N8~8889N9p9990:v:::;2;z;;;<:<w$@hy 7X   lvyt Η  eNPT-N7 H*C>5L  f  & L%&tyf& eRwZ - 7,e@hy hy He0#9e ~ z v rn@7je@dw^ whyNm>  ֏e7600w ly@T Ff Ɲ f& ePy&  a ܋ R@ !\ e `&&E ^f a ef * f ew a-d ^- Nm? ;&( T / D!0!9"!A!Z@!a!z`!$ !.!  a %    ewʍ y&  a Pa$&6   -v    +  l 0e ( !0!90 !A!Z7v l ꓄ МD 5 @P P P H  ʝf ewȌ  l     0W l j& @`% . &2f@ l{ 1 \& \* @ W  f > f f z  f ff J w    ̝m  T`f ewl  a& ֝ rvA`f f&& f& ew & -` 6 0 `  @!L 5f @%f e m&E&  ew`2{&  a $     00U:8555512     m"'  a@`Em$@ m*&fE& e :e &a ew-      l4{55  5`  f wX   &af   , ,,"  e ! $B` D` D  ҋ  D ыR     l<{D f       f ew^)W W W zz f 6  GlH{@A P@A P@A P@A H@  @TTTR@BDQBDQBDQBBQ  6 v       Z W R Obu u u lu u lu l  - <Lz ʛ,@- @ D 4.- @ MDC Z  f 䙖%  N&&N e$ Lewrzf M u u u -# ff je w  VC J  S    BJJJJJJRBXXXXXX` "(&2`$bw4f  nB m  `B l{B` ɵW e<QBaCa 5  r@< Da @ D @ D E& NUe& NU D a"K `@#  { $ew@ fC` 5 5  (5 5 5 f 4@e # -  @  0  :    5!Jפ-G`!B{Ba JȢe | |&A#{B eפ-  ll d 5WW d5!!ע פ: F5<! ע פ:  (5< fפ  f  0W   n@`%w0f= P eff 111f 4ewaf j (E{ eKkW"  aD{ E{ N  eQʐN  mm Jʵ : @`C{ Ð r2 aa a  < 2< 2e  f   | e p  : \ \ Nw af  Bai*Cava>  5 ~ K J    D ew     Tf   `ѕ- ae|ѕ-ѕ1ѕ9 4 ѕ  ѕ: ѕ: e e/ѐe:w &  蚄wڊ   M u @ A -#  w   @M u u u @ A B - #  wzf   E D @ A s     u&@eH p p eH p eH cQ<[y1OJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw4  l"x x N65 ̗awf ta 6  C   S   8 П ʟ  v``W  0f N&f`  et n \  D  `; (D ,   N`f& e 7B 2 " МB`  &f e    Bԗ a z %ew:)00U:V:557i:)*& & - Xv6v`  ܕ  6v6v` 2  E`D`  D!"6  # D!     ֜He wP     @C`B` 6   $ - . 0 ; A Z _ a zۃ [ פ] " פ" @  &% 28R r <4P5|,?]?]Yu Y PPY &[q Y 2 \PTITISYSYSYTISYSYOVXjll XX Z 00V:8555512   !0 <    ,@'` RPT>0 < 0 < 0 < P 0 < Lkl  Fh , ,!,=<T|=TT>T?,@lHLULUOUSUWU< 80 <  #w 85m&&  X6e"-  C P e   e f6   f6    & & @( rf  e ee e w t5 funhj uhdB$ 0jwaw< 8 v8w 00V::557i:)*&  Z*AdBbAep& f  . P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ *ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *nw Z 8jDl@ TeBT85l@ T@( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ wǀ     7 DM < 0   < 0  7*z%: nwhfeB$& e*aɋw. tw"ɋ& @   f 1 4@5 07   <<7 7 7 7 7 wł m 7  :w |z7 v ]7fb`\XVw`$ Ԝ\Ԝ]^ <ԕ:;& T@&f& H NJ DL :  ԕ.N "  ԕ;P e7wĀ  @   B  * 1 :z7 4f.   `p  $$f$Е Е f& ee$w  e wÀ     A @ *B`ʋ @ ʋ LJf$wjb7 hd^  b: T11 1111& 8 de87 VH0 \0 ^7 @ f >~ we&  G @ 0 9 A Z _ a z . : ;ރ [   rW] "   XW" , =  8ķ@f5Z$ F1   4 ׭2/   55%%w~`!5 SW aW z@ ##W ' ! Ó'W W  !   ˕   w*`     Z1  E f&f& Ze 醦 wʾ Aef  W. N  5 ,,**W= W  ! xW0!W9 ! B0  (`%aW' @ CА '!W'@ &f feWTWF& 4   w|re  W   w @ 0 9  A Z _  l wW   J@fa a P& *1 e  ea a& & e $G :7`6w0* S 7`w e  e& aa : \ef"1 e  2& aa  >f:1 e  ebeef  h 8 X ,  f T`1n1   t1- w ~00V:8555512$$ e$f @5, a a & *1 e  e  e5F .5< 5*M &  aa f =&21 Be *e@e E*@b  h  >ef 8 6e e ewe /b7 x1 `N  @eE@`C 1 Ne ڹ `e    w^ e7 w57 1    e-@ `7` ߴeEm7&  v Be eE` f j%`݅   7!D>7:tڀ  7d\0p0 I> w de eE`@   w܁ 52 Ƹ1 0N \1   mx   61 e  t l b( 1 1 D& m$ee ҃ f , E@`ew531 rN 1 `  m  x1 : h1 *e  f >  %ɐ 1 C< m:ۀ@`wj 5w- 7 .1  " w!w1 vAaN j  vvaB eE` wd1 .` $ @ "2 ε eE`e2C (  ε1 Ƶ D 1 &2 N` f&2 W  .2(2 rH  N`   N` n x ^f e &N` <  & 2 f e b dw Xw: H @ w657 $\5   4 (  N `  N N\ v1 8N^ f 7 t5   5 \ , |5   `5 ʳJ  H @5  س ( 6   86 n  t-lݰ^6 H\ r ³ 6 $.݀  J 6 < 4 $ t6 ޲"L   Nef e6"e@-: 19SY:.CNFSY:.SYMSY:.ICFSY:.LSTCFL>Option>/OPLITERAL$R1RSX-11 CFL-16 V2.00PageGroup Symbol    Offset Uses Group Symbols" Group Literals Type Length ValueNUMERICSTRINGASCIIRSXTIMVMSTIMPOINTERLOGICAL1111111 'FalseTrue+ Group Allocation type Count Size (bytes): Named Literals (these do not take up space in the module) Literal name descriptors  Literal data descriptors  Module Header Module header  Module Symbol Table Group name descriptors  Symbol name descriptors  Module Procedure Area Procedure Descriptors  Statement Block headers  Statement Descriptors " Statement Extension Descriptors Expressions Expression Headers  Operators and Function Calls  Symbol References  Literal Data Data Areas Variable Data  Table Data  Symbol Declaration Descriptors Conditional Descriptors  BIT and FIELD type Symbols  Data Symbols  Symbol Names 42`2222223*3F3^3x3333 3 3 4 .4@4L4 `4p44444Allocation Information:Additional Statistics: Total Module Size (bytes) % Total Module Allocated Size (bytes)  Total Source Lines $ Number of constant folds performed ) Maximum literal value heap size (bytes) $ Number of heap garbage collections ) Maximum literal value heap used (bytes)  Maximum value stack entries ! Maximum operator stack entries Maximum compile stack entries U Y ~(Z vZ&  m  f A N  %48, \ TXL8<H00V::557i:)*f)aa& & j́ ?N 4 wN W  ׭ 5|(7 %5n!7  F9  jb ,9 N4  j %4~ewD 8  d   l 9  e& Ȏ 8  e χ C   4 b{ lR?NwJ 6 8yn0 uT k e " 9|Bl ɕ z1  0M ɕ- ɕ$ ɕɕɕ @`w@  1 ɕwe f ̎wɕ ɕ@`ȕȕɕɕ ɕ > w> RBeb6nɕ ?? ɕ ɕwɕ 1 Nwwɕɕ 1 C4 8 wxɕ p *1 wzɕ Z>w 8^ɕ "wZqɕ w  +ɕɕɕɕ ɕ! p dɕ" w8 z2wz^ & bwqP4 < , R  7 9 DX     X V  ~ wXX v \?X F>Rw7 P7 N8 ͇:7 87 0,5"4 j XU  w  ! t  $wwP-T "wwy  w|yw~wL|wd z $0!"   dY#""\ jƇ&  ew wb&  8 N d )& tpr/j)l Z X{ & JD<6 22e 857 . ɇ5 5D 5f& ` # D T5L D 6 t $Ne ʖ%% , &'(54T  ^v v fX(. f8e ^N    p 0e $:& e ȼ0$ef4 Z t  Gl:$ $ $fz fB ZN.P pN 0G  ,&e$e  Ue  V   W  ww 5@B  eeeb&  -0 Ž& NNb ɖ% `   @D㰝 ef,2 w,E&" >05 –%0 wW!  - - 7Eߒ r|p0D5p5f .~ .N 05B.e ҁ R@ E N e00V;8555512 5 !!  waߖ%f5<  D  L ހ fpH5t  %wJ5@n,   0 @ l: l: >@` l:ȕȕȕ@` l:ȕ ȕ ȕȕ(ȕ@` l:ȕȕȕȕPȕ  -5L  e- v*0 7 7߇- B/* - &߈0 7 z7t߇-l /\*  X/P* ־-@5p  d7 be"   Lx2?. eއw<- zޗ  # p  * v 5\ 8 */*  %e|އwƹ-r /b) R qqB l  L  0 E@  l: & ΐ )& ΐ )& ΐ ) & ΐ )& ΐ )%  r5d 6 ( )%ez݇wҸ5t 7!. eEf `@  %Fw^W  D W    |W WW BW LW Q W V 6A  l: ܇܇܇x܇p܇h܇`܇f5 һ  PNe %wV-Dڪ 2.@ ܰDܰw wڇf-"  Hv, 4ewm۶wm۰@ l;eww`eئ&  rN -fn ʺi U J Q `N 1E8e 7 >7 @9"e 2eF N ʾڰ / ںe ֿ"  Ne seb j1a @~ebt <1v\&P& rfBb8E - zIE -$ H| %, f, mPE @ 4 *  @ew  0 D!&$&f& e ew> ~N/ efN`& e   w  @ e&fE de W  @I e&fIE& 2e W @7 ~N W AW Z-7e RI 7XI 7^I 7pI 7n7 `7 b7 7 P w>) 8   0 z ~ 5 wR6 77 -1  BN: AP: 2"< 2>>  "< mZ@ ܒD 5 - n5 @H &*. e R@ eG&fE& 0e NO6 c  *7 d7 4@ Pc  1fR @ eH&fE& e Ɔw-5 %f)aa X7 7 n @m7j few5N7 :7 7 -:|  5-(j ^  lI  @ ~N?: 4] B  (,      -  e&E& ve -x*.7 d! ܂O ܁O @ .&~N&~Ne& e w2 B n$ `\ W aW z p. <Z ή " B`7>08%W0.W9+- -W'  -ׯ'> p. ,$ tFLUSHKEEP44COMMANDERRORINPUTOUTPUTREPORTUSER&4.444:4B4J4CLEARDELETEFIRSTLOADMOVENEXTPREVIOUSRESETj4p4x4 ~4 4 4 4 4CND$IF CND$SELECTCNV$BCD CNV$BINARY CNV$DECIMAL CNV$DECIMAL_PCNV$HEX CNV$MACHINE CNV$OCTAL CNV$RAD50 CNV$RSX_TIME CNV$STRING CNV$VMS_TIMECOD$BCD COD$BINARY COD$DECIMALCOD$HEX COD$MACHINE COD$OCTAL COD$RSX_TIME COD$VMS_TIMECOM$AND COM$HARDWARE COM$LONGWORD COM$NEGATECOM$NULL CTL$CLOSECTL$EOFCTL$FILE_STATUS CTL$INPUTCTL$OPEN CTL$STATUSL00V ;:557i:)*OK$BYTE LOK$LENGTH LOK$LONGWORDLOK$WORD PKT$IDENT PKT$MODULE RPT$COMMAND RPT$IDENTRPT$LINE_REMAINING RPT$LINE_SKIPRPT$PAGE_CURRENTRPT$PAGE_DEFAULTRPT$PAGE_REMAINING RPT$PAGE_SIZE RPT$STATUSSTR$CHARSTR$FILE STR$LENGTH STR$MATCHSTR$PAD STR$PARSE STR$QUOTE STR$REMAINING STR$SEARCH STR$TRAIL STR$UPCASETIM$RSX_CURRENT TIM$RSX_DATE TIM$RSX_NULL TIM$RSX_VMSTIM$VMS_CURRENT TIM$VMS_DATE TIM$VMS_MINUS TIM$VMS_NULL TIM$VMS_PLUS TIM$VMS_RSX USR$STRING444 4!4"4#5$ 5%5&"5',5(:5)F5*T50\51h52t53|545556575@5A5B5C5D5P5Q5R 6S6T6U*6`46a@6bN6cX6pb6qn6z6666666667 77"7*747>7L7X7b7n7~7777777777  LRXrx $hHN. *444r 6<@(T\d "HRNj&.h F 2<FL2V`jp (0<FLRX^d60jpv60|6060606".28``2zH R X ^ d ~ V2.00 (Ht8L   (4 "**2:4BHVh~DPdp ()*+,4<DJPTUVixz !"$&)*,/25:LMNOPQbdeuxz{~ %,8L&5DX^`j~ %,8L!-/:?OQS]eoz|,,N %,8L %,8L %,8L,8L,8L8L,, -/4:>OQ\dntvz|"-/?OQS]eoz|4RdvS %,8L '7GYa,MZ^c %,8L %,8LP %,8Ls%,$).=CJPShnrx,,\Nn4Rdv!-/4:?OQ]dovz|,>\$).=CJPShnrx$).=CJPShnrx$).=CJPShnrx,[nt,>\P,P;x,S%,wS'7GYa$).=CJPShnrx,,,,$).=CJPShnrxnt, -/:>OQS\eoz|Chr, , %,8L,fsuy{$.=CJPShnrx %,8LC !,/i, %,8Lg, ,i4Rd4Rd!-/:?OQS]eoz|,,P !,/i !,/i  %,8Lx3 fsuy{ !,/i  ,/>\fisuy{$P %,9L&6FX^`m~ %,9L#-2\ $*.=CJPShnrx $*.=CJPShnrx$+.=CKPShnrx,[nt,>\P,P<x,S%,wS(7IYb$+.=CKPShnrx,,,,$+.=CKPShnrxnt,#-2\fisuy{ $P !"$%&)*.1567<?@DEGHIJKLMNPQRTUWXY[\]_`bcdfghjkmnpqstvwyz|}     !"$,./67:;<=?@ABCDEFGHIJKLMNOPQTUYZ]abilnrstvwxyz{}   !"#$%&'()-79:ABEFGHJKLMNOPQRSTUYZ^afghmqrvwyz{|}~      "$%&'()+,-./0123456789;<=>?@ABCDEGHIJKLM似+( 3&)024#,.:%*567;19-!"'$8/DCTUUUUba쮮EEEEFEEEEEFEE\\\\\\\\\]\\pqNORSSSVVVVVVVVVVWVVVVVVVVVWVVVVVVVVWVVVVVWVVVVo}~00V;8555512 GHJKJXY[Zcdcmmnfef ==rrrrrr`_iiiiiiiiijiih@BAILMMttttttvvvvvvlkuuuuuuyz|y{ywwxwwwxxxwxxxxҩ^_ZUײվZs  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^p_ZG"Z?/?<#]uABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_$_|_namenumeric-literalstring-literal444Zf\fffffffffffffffffffffffffffffffffffffffffffffffffffff;(),.=[]:+-|*/><%#DOTOIFOFBYEQNEGTGELTLEOR_|_END$IFSETPUTGETNOTBITHEXBCDANDXORMODnameCALLTHENCASEFILEFINDLISTFLAGELSEBYTEWORDFILLNULLTRUEBEGINWHILEUNTIL$THEN$ELSEWRITELEAVETABLECRASHNAMEDASCIIVALUEFIELDOCTALRAD50WIDTHMATCHSHIFTFALSECOUNTMODULEPACKETFORMATRETURNEND_IFSELECTSEARCHENABLESIGNALDECODESTRINGBINARYLENGTHLITERAL$END_IFDECLAREPOINTERMESSAGELOGICALDECIMALMACHINECONTEXTEND_CASEEXTERNALEND_FILEEND_LISTREPEATEDRESERVEDLONGWORDQUADWORDRSX_TIMEVMS_TIME PROCEDURE SUBPACKET INCREMENT DECREMENT COROUTINE END_TABLE END_MODULE END_PACKET END_SELECT END_DECODE PARAMETERS END_DECLARE WRITE_GROUP BEGIN_TABLE SIGNAL_STOP WRITE_PACKET RSX_LONGWORD DYNAMIC_TABLEstring-literalnumeric-literalJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKK KKKK$K*K0K6KLFLNLVL^LfLnLvL~LLLLLLLLLLLLLLLMMM$M.M8MBMLMVM`MjMtMMMMMMMMMMMMNN"N0N>NLN\NlN,:N[dnty}   #%*+++06>?BDFJOOSSX]bddflptwz|             "$&(**,.022468::<>@BDDGGGGGIMRRRSSTVWXXXY[[[]___acccccfffffffiitג =°†yuuȔȔPPɤně.Rdv{ssfцg$3Ȥnwنٛ۲ țʷʷɞ .: Rd=ݨ:  :  Ƹ肙͍̄̄̄̄̄̄̄̊ T T T T .W U z(Z rUw(    l^U J1     8f ƙN& `e U|U  e&   ̒  l  "f&& ewX Ee0 9e Ҁ e0 9e %     (  &&,Z<` U Y Z00V;:557i:)*w6  l6U F<BCw| ě 42-  @`eBwDa     Be&& ` e0  l:U   F Hf Ęf& e  (. 0.W (V YwF)@  lT JV  C @6 T1/5 1    l f @D C  QP  < f e  &   %ABCDEFHJKLMNPRSTUV 4f E &! V& T 7  @ 8N 2͎ Unimplemented error message-F-   $SYNTAXERR, Syntax error. PRSSTKOVR, Parse stack overflow.%PARSEREOF, Premature EOF encountered..NOQUOTE, String literal missing closing quote.$ILLCHAR, Illegal character in input.>RESINVPRT, Print expression list not allowed on RESERVED data.@RESBITILL, A BIT or FIELD data item cannot be declared RESERVED.;BITNOPREC, A BIT or FIELD must have a preceeding data item.CBITNOTVAR, A BIT or FIELD not allowed on variable length data item.DNUMFILLCH, A print fill character string must contain one character.ANULLOPERA, Internal - Null suffix operand on non-suffix operator.*INVFUNCT, Invalid function name specified.@INTFUNMIS, Internal - Function code missing from operator stack.3MODATTRIN, Invalid module attribute name specified.:FLUSHINV, FLUSH attribute not allowed with KEEP attribute. KEEPINV, 4TABLEBIG, TABLE element has too many literal values.4TABLESMAL, TABLE element has too few literal values.2BYTERAD50, A BYTE data item cannot print in RAD50.=INVNUMSIZ, Internal - A numeric variable has an invalid size.RADINVRAD, Invalid radix character specified in radix literal.7PROSTKOVR, Compiler internal production stack overflow.CINTPROUND, Internal - Compiler internal production stack underflow.BINTWRONGP, Internal - Wrong production popped internal production.9BITNUMINV, BIT number outside the the declared data item.@FIELDBITI, FIELD starting bit is outside the declared data item.0FIELDSMAL, FIELD width must be at least one bit.7FIELDBIG, FIELD exceeds size of the declared data item.8WRITEDES, WRITE-class statement has invalid destination.CSYMNOTLIT, Specified LITERAL symbol name not part of LITERAL group.HSYMNOTCOM, A variable is not valid in a compiletime constant expression.HVARLITGRP, A variable name cannot have the same group name as a LITERAL.?OPRNOTCOM, Operator in CTCE cannot be evaluated at compiletime.HFUNNOTCOM, Function call not allowed in compiletime con00V$;8555512stant expression.:FUNWRONGC, Incorrect number of arguments in function call. 6x(^LNLL2lD !H!!!!:"|""#:#`####$F$v$ ZCOPRINVLOG, Attempt to perform logical operation on an invalid type.#CONWRONGT, Cannot concatenate type.;SUBEXTBIG, Substring extraction end element exceeds string.9NUMINVOPR, Invalid numeric double-operand operation code.#DIVZERO, Attempt to divide by zero.$MODZERO, Attempt to modulus by zero.%OPRNOTIMP, Operation not implemented.'RELINVCOD, Invalid relational operator.:BITFLDSIZ, Bit or field too large in extraction operation.8ASCIIBIG, ASCII literal quoted string too long for type.;BITTOOHIG, Bit number too large for specified storage unit.8RAD50BYTE, Cannot convert a byte using RAD50 conversion..BADDIGIT, Invalid numeric digit in conversion.>INVRADCNV, Internal error - Invalid radix code for conversion.-VALUETYPE, Value in expression is wrong type.,VALUESIZE, Value in expression is too large.3HEAPOVERF, Heap too small to hold value. Overflow. VALSTKOVR, Value stack overflow.:FUNWRONGA, Incorrect number of arguments in function call.HFUNFIELDS, Invalid conversion code argument to time conversion function.8FUNSTRSIZ, Output string from string function too large.DFUNQUOODD, Quote string in STR$QUOTE function must have even length.;FUNINVPOI, Invalid string pointer value in string function.DFUNNOTCHA, Argument to STR$CHAR is not in valid range for character.FILERREAD, File read error.FILERWRIT, File write error.FFILINVCOD, Internal error - invalid file code for specified operation..FILINTOPN, Internal error - file already open.FILERCLOS, File close error.:FILERSPAN, Records in file are not allowed to span blocks.4MEMINIFAI, Memory allocation initialization failure.CMEMALLFAI, Memory allocation failure - insufficient virtual memory. 0l>z*Z*L RVw@U 7X   lRZt   eNP-7 *Cz5L  f Θ  & ԋ%B<&PZf& eRw -  Ҝ7,e@U U $e0#9e    @7e@w wFUmz  Ve7rllw l`Z@T "f  f& eP^Z& 00V,;:557i:)* a d R@ !\ ďe `&&E f a ef * f ew0 a-d :- *m? ;&( ܉ / D!0!9"!A!Z@!a!z`!$ !.!  a %    ewR pZ&  a ؆a$&6   -v    +  l e ( !0!90 !A!Z7v l ƍ D — 5 @P P P H  f ewP  l p     0W l F& @`% . &2 f@ l[ 1 6& \*  W  f > f f z  f ff J w, ̙   m  .`f ew t a&  LvA`f `f&& f& @ew& -`   `  @!L r 5f @%f e m&E&  vew\&  a |$          m"'  a@`Em$@ m*&fE& he e &a Ȗew-  ؗ җ   l\55  5`  f \ wފ `  &af   , ,,"  e ! B` D` D  ҋ  D ыR     l\D @       f dew䉦)W W W UU f 6  Gl$\@A P@A P@A P@A H@  @TTTR@BDQBDQBDQBBQ  6 v       Z W R Obu u u lu u lu l  - <LU ,@- @ h D 4.- @ DMDC 4  f %  N&&N e$ &ewUf ʒM u u u -# ff De w 0C $  S   BJJJJJJRBXXXXXX` "(&2`$b 0$7wʍf  XB m `B l\B` ɵW e<QBaCa 5  \@<  ҕ5 ~ K J    D ew     >f   `ѕ- ae\ѕ-ѕ1ѕ9 4 ѕ  ѕ: ѕ: e e/ѐe:w Ҕ& ܔ Ҕwp   M u @ A -#  wH   @M u u u @ A B - #  wf   E D @ A s     u&@eH p p eH p eH cQ<[y1OJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECwʍ  lX Αx 865 awf ta 6  C ԗ  S   8    v``W  f N&f` x et n F  .  `; D    N`f& e 7B 2  B`  &f e    Bԗ a z %ewЋ)& & - Bv6v`  Ə  v6v`   E`D`  D!"6  # D!     He w   |  @C`B` 6   $ - . 0 ; A Z _ a zۃ [ פ] " פ" @  % 28R r fwV  a@`AB S  & ew  5AEA5 ef f ^  RN H@ewv5’ @  B@A  @@P5e w<) @N   Ԁ )% ! a E`   v    % d  R  @  .     f @w   w  5B`  w2/      5@         @!   &  ~ f   3f f &f &ff ]f% @f%e w`%ew~ l% @f\%e dw`P%ewHB%e 6 ne,%        w   B 5 - 5(@7$$$$$$$ $^ ~ $ 5Ab$@ * 7 B$w> B  N < 6  2 @m, 7 "  . $7 $   # f#f$ 7   8## 7 # 7 # N$ w#e w   5  `˵>#c5˵ x@ l @*   \#w" %58# @`1  $ ^ ""  "   l"-f" t&!65& $  5& 5& 5& 5& 5|& ~ &  8  e7 !5x     D  %5@ 7 : j  \  Z  N  %00V<;WB;557i:)* wf@m87 2@eE& j  >w` \p`^w  C`D # -v`p-p`j-h`b-b`\-\`V`T R`L`J`H-F`@->`8`6 4`.-,`&%f-$ f`&  e  e  oe 7 Zf 5J#xeEe~f& wrnRLJ` Re FHeB <eEm07,b-1& `&  e  e eEm7e  oe 7 dfeEe L5Df& w`zzvVPN` e VNw`Pwx-"F| "e" eEf \``@  efe7 -$ f`&  e  e  oe 7 <f 5,)XeEeXf wJF0*(` j*H0 0 e wB> e e me eEm7vb-.& `&  e  e  e ߈eEm|7xe 7 f d5((eEeHf tw:`2` 60 e f> e mH7 7   "a?    e fe?E?@m & f @6Y Vw`| @    W  W W | de   `w f v C W!W! mDm  D!  -m W!p  ,%wH    %w0 eEm7 f b m7 J-p $^ZZ w RwLА `D-@@88w 2r    eEB K  `ww w a 0 < 0 < 0 < fF>^PV 00WL;B;557i:)*0 < Lkl 4Ҝ &[q &[q`   l !=6T?H@l6ZH6HLPV~lLPVllOPVllSPVllWPVl~l 0 <  #`w̫ 85m&&  X6e"-  C P e   e f6   f6    & & @( rf  e ee e w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  v P aAAf@pnp C*8֋ 688*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ ̶DlljaCeH###33 & .8 *^2w ʸ 8jDl@ TeBT85l@ 4@( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ wL    V 7 DM < 0  < 0  7*%: weB$& fe*aɋwj Tw^ɋ& @   f 1 4@5 l7 4  <<7 7 7 7 7 w꤂ m 7  :w 7  ]7w$ Ԝ\Ԝ]^ ԕ:;X&R 4@&00WT;8555512f& FH NJ DL :  ԕ.N "  ԕ;P e7Vwأ  @   B  * 1 v7 pfj   `p  $$f$Е Е f& @ee$"w    e wޢ     A @ *B`ʋ @ ֱʋ Ҧf`w7 ^ P v b1d11g1i1k1m& 8 e87 H0 \0 ^7 &|x~( pt `` P7 P7 `7 f"P"L7 J $7 ef  a2 e tj 7 p#&f2 ( 7@w<580(f& e we& & & f   @ = , @& 7  ww nw&Cm5Cm  f ( ~ > f >~ wŸ8e&  G @ 0 9 A Z _ a z . : ;ރ [   W] "   W" , =  t@f5$  2   4 ׭n/   55Z%%w`!5 SW aW z@ ##W ' ! ֢'W W  !   ˕  F@wf2`     2 X E f&f& e 醦 w Aef  W. N  Ф5, hhffW= ȡW  ! W0!W9 ! B0  d`%aW' @ CА '!W'@ &f eWTWF& p   P we  W   ڠwJ @ 0 9  A Z _   w W   @fa a P& 1 e  :ea a& & \e $G v7`rwlf S V7`RwLF e  e& aa : ef1 e  n& aa  >f1 e  (eeef   8 ,  @f $222   .82- \w $$ @e$f @5, a a & 1 e  e  e5 .5x 5fM &  aa f =&1 Be *H7 jn2 ؕ ^ Vw!"wL2 AaN  , $vvaB eE` wdN2 j` ` @ 2 eE`e2C (  L2  D .L2 2 N` 2 Δ W  00W\;B;557i:)*22 H  N` ʟ  N`  x f *e &N` x  & 2 \f e b w w:  | wr5.7 ` 6 Γ T L5 (  0N  "  N\ L2 tN^  7 86 V ܓ ԓP6 > h n6 " L 6  4  |6   d \6 ƒ  @6  ؒ ( -ܰ"7    L7 `j܀   ֒l7 @x p ` 7 " J : ef e6"e@-: 19SY:.CNFSY:.SYMSY:.ICFSY:.LSTCFL>Option>/OPLITERALP%2RSX-11 CFL-16 V2.00PageGroup Symbol    Offset Uses Group Symbols" Group Literals Type Length ValueNUMERICSTRINGASCIIRSXTIMVMSTIMPOINTERLOGICAL2222222 'FalseTrue+ Group Allocation type Count Size (bytes): Named Literals (these do not take up space in the module) Literal name descriptors  Literal data descriptors  Module Header Module header  Module Symbol Table Group name descriptors  Symbol name descriptors  Module Procedure Area Procedure Descriptors  Statement Block headers  Statement Descriptors " Statement Extension Descriptors Expressions Expression Headers  Operators and Function Calls  Symbol References  Literal Data Data Areas Variable Data  Table Data  Symbol Declaration Descriptors Conditional Descriptors  BIT and FIELD type Symbols  Data Symbols  Symbol Names 2$3`3|333333 4"4<4X4r44 4 4 4 455 $545T5p555Allocation Information:Additional Statistics: Total Module Size (bytes) % Total Module Allocated Size (bytes)  Total Source Lines $ Number of constant folds performed ) Maximum literal value heap size (bytes) $ Number of heap garbage collections ) Maximum literal value heap used (bytes)  Maximum value stack entries ! Maximum operator stack entries Maximum compile stack entries ~^V ݢZ ݢZ ݢ[&  m  f A N  %f)aa& &  ?N 4 w W  ׭ 5(7 %5!7  9 D  h9 *N4  %4~ew t  d *& "B l9  e& 0 8  إe . C   4 { l?w r tyl XZuR >k e D" 9|Bl ɕ 1  0M ɕ- ɕ$ ɕɕɕ 8@`w@  1 ɕwe < 쫎wɕ ɕ@`ȕȕɕɕ ɕ > w> R~ebrɕ ?? ɕ ɕwɕ00Wd;8555512 1 Nwwɕɕ 1 Cd5 8 : wxɕ  *1 wzɕ zw t^ɕ ^wqɕ :w  +ɕɕɕɕ ɕ! p dɕ" ʩw8 2w J& wq5 < Ĩ h R  (7 49 X F   FX V    wXX v ? >Rw7 7 tX v7 t7 lh5^4 B XU  w  !   $wwP-@T ¦^.wwy  w|yw~wL|wd z $0!"   dY#:""\ &  ew Ĭwb&  8 N d P)& pr/)l , X{ & xr 22e t5*7 j 訇5 5 D ¤5Df& `  # D 52L 6 J $Ne %% , &'(5pT ( \ " v f(j fZte NH   BNp 0:e `L;&  e 0$ef4 Z t \  GlR;$ $ 2$f ~ Nj NZ 0G  Thbe`e  UeR  V   W  .w0w 5@B  eeeb&  -l & NNb Ψ%    |Ⱍ Vefhn whEb^ z05> %0 wJW!  - -߀ 7E p055 . jN l5~je ҁ @ E 8N \8e 5 !!  waߖ%f5< D D 6 L "ݼ 5  xN z %w5|nh   0 @ lV; lf; >@` lr;ȕȕȕ@` l~;ȕ ȕ ȕȕ(ȕ@` l;ȕȕȕȕPȕ  -X5  Xe-, *0 7 7߇- ~/* - bވ0 7 7އ- ./*  X/* -|5  d7 e^   Ln?j e:އwx-0  ޗ  #4 p  * 5&\ t */* : %e݇w- 4/) $ 55B l  2  0 E@  l; & ΐ )& ΐ )& ΐ ) & ΐ )& ΐ )%  5$d r (@ )%e܇w5t 27!j eEf @  %8.wXRW  D W    W WW BW LW Q W V rA  l; Zۇۇۇۇۇۇۇf5V   Ne V%w-٪ Кnj@ PJ۰>۰w Dw>هf-4"00Wl;B;557i:)*  $v, pewmwm@ l;eww`eئ&  N -Rn i BU Q N T1Ete >7 z7 |9^e (2Pe 2N 0ڰ / e "H Ne seb 1a @eb x1v&&$ rf~btE - RIBE -$   %, , \mE @ 4 2f  |ew֓  l D!&`&f& :e ewz BO/ efN`& e   w2  @ e&fE e W  @I e&fIE& ne W @7 BO W AW Z-7e J 7J 7"J 74J 7n7 `7 b7 7 P wz) 8   0 z ~ 5 wR6 77 -1  B; A; 2< 2?  < mA VE 5 - n5 @H &* e R@ eH&fE& le NVP6 c  f7 d7 4@ HQc  1*S @ eI&fE& e Ɔw-5 %f)aa X7 7 n @m7j fewX5N7 :7 7 -:|  5-(j ^  lDJ  @ BO?: 4] B  (, (     -  e&E& e -x*.7 d! FP EP @ &BO&BOe& e w2 B n$ `\ W aW z p <Z " B`7>08%W0.W9+- -W'  -ׯ'> p ,$ FLUSHKEEP44COMMANDERRORINPUTOUTPUTREPORTUSER444455CLEARDELETEFIRSTLOADMOVENEXTPREVIOUSRESET.545<5 B5 H5 N5 T5 ^5CND$IF CND$SELECTCNV$BCD CNV$BINARY CNV$DECIMAL CNV$DECIMAL_PCNV$HEX CNV$MACHINE CNV$OCTAL CNV$RAD50 CNV$RSX_TIME CNV$STRING CNV$VMS_TIMECOD$BCD COD$BINARY COD$DECIMALCOD$HEX COD$MACHINE COD$OCTAL COD$RSX_TIME COD$VMS_TIMECOM$AND COM$HARDWARE COM$LONGWORD COM$NEGATECOM$NULL CTL$CLOSECTL$EOFCTL$FILE_STATUS CTL$INPUTCTL$OPEN CTL$STATUSLOK$BYTE LOK$LENGTH LOK$LONGWORDLOK$WORD PKT$IDENT PKT$MODULE RPT$COMMAND RPT$IDENTRPT$LINE_REMAINING RPT$LINE_SKIPRPT$PAGE_CURRENTRPT$PAGE_DEFAULTRPT$PAGE_REMAINING RPT$PAGE_SIZE RPT$STATUSSTR$CHARSTR$FILE STR$LENGTH STR$MATCHSTR$PAD STR$PARSE STR$QUOTE STR$REMAINING STR$SEARCH STR$TRAIL STR$UPCASETIM$RSX_CURRENT TIM$RSX_DATE TIM$RSX_NULL TIM$RSX_VMSTIM$VMS_CURRENT TIM$VMS_DATE TIM$VMS_MINUS TIM$VMS_NULL TIM$VMS_PLUS TIM$VMS_RSX USR$STRING555 5!5"5#5$5%5&5'5(5) 6*60 61,62863@64L65V66d67r6@z6A6B6C6D6P6Q6R6S6T6U6`6a7b7c7p&7q27>7H7\7j7|77777777777888&828B8P8^8j8z888888  LRXrx $hHN. *444r 6<@(T\d "HRNj&.h F 2<FL2V`jp (0<FLRX^d60jpv60|6060606".28``2zH R X ^ d ~ V2.00 (Ht8L   (4 "**2:4BHVh~DPdp ()*+,4<DJPTUVixz !"$&)*,/25:LMNOPQbdeuxz{~ %,8L&500Wt;8555512DX^`j~ %,8L!-/:?OQS]eoz|,,N %,8L %,8L %,8L,8L,8L8L,, -/4:>OQ\dntvz|"-/?OQS]eoz|4RdvS %,8L '7GYa,MZ^c %,8L %,8LP %,8Ls%,$).=CJPShnrx,,\Nn4Rdv!-/4:?OQ]dovz|,>\$).=CJPShnrx$).=CJPShnrx$).=CJPShnrx,[nt,>\P,P;x,S%,wS'7GYa$).=CJPShnrx,,,,$).=CJPShnrxnt, -/:>OQS\eoz|Chr, , %,8L,fsuy{$.=CJPShnrx %,8LC !,/i, %,8Lg, ,i4Rd4Rd!-/:?OQS]eoz|,,P !,/i !,/i  %,8Lx3 fsuy{ !,/i  ,/>\fisuy{$P %,9L&6FX^`m~ %,9L#-2\ $*.=CJPShnrx $*.=CJPShnrx$+.=CKPShnrx,[nt,>\P,P<x,S%,wS(7IYb$+.=CKPShnrx,,,,$+.=CKPShnrxnt,#-2\fisuy{ $P !"$%&)*.1567<?@DEGHIJKLMNPQRTUWXY[\]_`bcdfghjkmnpqstvwyz|}     !"$,./67:;<=?@ABCDEFGHIJKLMNOPQTUYZ]abilnrstvwxyz{}   !"#$%&'()-79:ABEFGHJKLMNOPQRSTUYZ^afghmqrvwyz{|}~      "$%&'()+,-./0123456789;<=>?@ABCDEGHIJKLM似+( 3&)024#,.:%*567;19-!"'$8/DCTUUUUba쮮EEEEFEEEEEFEE\\\\\\\\\]\\pqNORSSSVVVVVVVVVVWVVVVVVVVVWVVVVVVVVWVVVVVWVVVVo}~ GHJKJXY[Zcdcmmnfef ==rrrrrr`_iiiiiiiiijiih@BAILMMttttttvvvvvvlkuuuuuuyz|y{ywwxwwwxxxwxxxxҩ^_ZUײվZs  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^p_ZG"Z?/?<#]uABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_$_|_namenumeric-literalstring-literal444Zf\fffffffffffffffffffffffffffffffffffffffffffffffffffff;(),.=[]:+-|*/><%#DOTOIFOFBYEQNEGTGELTLEOR_|_END$IFSETPUTGETNOTBITHEXBCDANDXORMODnameCALLTHENCASEFILEFINDLISTFLAGELSEBYTEWORDFILLNULLTRUEBEGINWHILEUNTIL$THEN$ELSEWRITELEAVETABLECRASHNAMEDASCIIVALUEFIELDOCTALRAD50WIDT00W|;B;557i:)*HMATCHSHIFTFALSECOUNTMODULEPACKETFORMATRETURNEND_IFSELECTSEARCHENABLESIGNALDECODESTRINGBINARYLENGTHLITERAL$END_IFDECLAREPOINTERMESSAGELOGICALDECIMALMACHINECONTEXTEND_CASEEXTERNALEND_FILEEND_LISTREPEATEDRESERVEDLONGWORDQUADWORDRSX_TIMEVMS_TIME PROCEDURE SUBPACKET INCREMENT DECREMENT COROUTINE END_TABLE END_MODULE END_PACKET END_SELECT END_DECODE PARAMETERS END_DECLARE WRITE_GROUP BEGIN_TABLE SIGNAL_STOP WRITE_PACKET RSX_LONGWORD DYNAMIC_TABLEstring-literalnumeric-literalDKXK\K`KdKhKlKpKtKxK|KKKKKKKKKKKKKKKKKKKKKKKKKKKKKLL LLLL$L*L0L6L?BDFJOOSSX]bddflptwz|             "$&(**,.022468::<>@BDDGGGGGIMRRRSSTVWXXXY[[[]___acccccfffffffiitג =°†yuuȔȔPPɤně.Rdv{ssfцg$3Ȥnwنٛ۲ țʷʷɞ .: Rd=ݨ:  :  Ƹ肙͍̄̄̄̄̄̄̄̊ T T U $T ~W `V Z PVwdn    l"V r1     8f yN& `e HV@V  e&   r  z  ^zf&& ewm RyEe0 9e Ҁ e0 9e %   y  dq  &&,Z<` B~^V :Z 2[wrn޸  lU r<BCw { 42- \r @`eBwa x     Be&& ` Zye0  lU q  F Hf xf& e  (. l~W dDW \Zwn)@  lU rV z z C @6 z U1/5 Jr1    z z @D C  QP  xz f \ye  Rz& Jx  ,y %ABCDEFHJKLMNPRSTUV 4f EN &! V& T 7  |j tN n Unimplemented error message-F- H Z00W;8555512 p%SYNTAXERR, Syntax error. PRSSTKOVR, Parse stack overflow.%PARSEREOF, Premature EOF encountered..NOQUOTE, String literal missing closing quote.$ILLCHAR, Illegal character in input.>RESINVPRT, Print expression list not allowed on RESERVED data.@RESBITILL, A BIT or FIELD data item cannot be declared RESERVED.;BITNOPREC, A BIT or FIELD must have a preceeding data item.CBITNOTVAR, A BIT or FIELD not allowed on variable length data item.DNUMFILLCH, A print fill character string must contain one character.ANULLOPERA, Internal - Null suffix operand on non-suffix operator.*INVFUNCT, Invalid function name specified.@INTFUNMIS, Internal - Function code missing from operator stack.3MODATTRIN, Invalid module attribute name specified.:FLUSHINV, FLUSH attribute not allowed with KEEP attribute. KEEPINV, 4TABLEBIG, TABLE element has too many literal values.4TABLESMAL, TABLE element has too few literal values.2BYTERAD50, A BYTE data item cannot print in RAD50.=INVNUMSIZ, Internal - A numeric variable has an invalid size.RADINVRAD, Invalid radix character specified in radix literal.7PROSTKOVR, Compiler internal production stack overflow.CINTPROUND, Internal - Compiler internal production stack underflow.BINTWRONGP, Internal - Wrong production popped internal production.9BITNUMINV, BIT number outside the the declared data item.@FIELDBITI, FIELD starting bit is outside the declared data item.0FIELDSMAL, FIELD width must be at least one bit.7FIELDBIG, FIELD exceeds size of the declared data item.8WRITEDES, WRITE-class statement has invalid destination.CSYMNOTLIT, Specified LITERAL symbol name not part of LITERAL group.HSYMNOTCOM, A variable is not valid in a compiletime constant expression.HVARLITGRP, A variable name cannot have the same group name as a LITERAL.?OPRNOTCOM, Operator in CTCE cannot be evaluated at compiletime.HFUNNOTCOM, Function call not allowed in compiletime constant expression.:FUNWRONGC, Incorrect number of arguments in function call.INVRADCNV, Internal error - Invalid radix code for conversion.-VALUETYPE, Value in expression is wrong type.,VALUESIZE, Value in expression is too large.3HEAPOVERF, Heap too small to hold value. Overflow. VALSTKOVR, Value stack overflow.:FUNWRONGA, Incorrect number of arguments in function call.HFUNFIELDS, Invalid conversion code argument to time conversion function.8FUNSTRSIZ, Output string from string function too large.DFUNQUOODD, Quote string in STR$QUOTE function must have even length.;FUNINVPOI, Invalid string pointer value in string function.DFUNNOTCHA, Argument to STR$CHAR is not in valid range for character.FILERREAD, File read error.FILERWRIT, File write error.FFILINVCOD, Internal error - invalid file code for specified operation..FILINTOPN, Internal error - file already open.FILERCLOS, File close error.:FILERSPAN, Records in file are not allowed to span blocks.4MEMINIFAI, Memory allocation initialization failure.CMEMALLFAI, Memory allocation failure - insufficient virtual memory.0j>x^LRJhwl@RV w7X   l[t p  eNP-7 *Cz5L  f x  & k%B<&[f& heRwl -  rz7,e@RV yRV `ye0#9e    @7e@w wkRVmz  Ve7rllwTk l$[@T ^of v f& geP"[&  a g R@ !\ oe `&&E "hf a 4vef * f ewlj a-d vn- fnm? ;&( i / D!0!9"!A!Z@!a!z`!$ !.!  a %    "uewi 4[&  a fa$&6   -v    +  l Hme ( !0!90 !A!Z7v l m uD v 5 @P P P H  vf 0tewh  l l     0W l l& Tg@`% . &2 DPf@ l\ 1 ry& \* Vy W  f > pf f z  f ff J whl y x  vm  jp`f wew.l x a& v vvA`f wf&& f& |hewk& -` Lx Fx 0v`  @!L o 5f @%f e m&E& Hh vew"k\&  a g$00W;8555512          m"'  a@`Em$@ m*&fE& ge ge &a vewRj-  w w   l\55  5`  f u wj v  &af t t , ,,"  e ! :tB` .tD` D  ҋ  D ыR     l\D |m       f tew i)W W W PVXV sf s6  Gl\@A P@A P@A P@A H@  @TTTR@BDQBDQBDQBBQ  6 v       Z W R Obu u u lu u lu l  - <LPV t,@- @ h D 4u4.- @ DMDC pu  f r%  N&&N e$ bkew4gPVf rM u u u -# 0uff re wf lqC `q  S   0r BJJJJJJRBXXXXXX` "(&2`$b l7wmf w xB m k `B l`]B` ɵW e<QBaCa 5  y@< xkDa hk@ D @ D E& NUe& NU D a"K `@#  ^] $ewl vC` 5 5  (5 5 5 f Zw@e # -  @  0  :    5!Jפ-G`!B]Ba JȢe] ]&A#y]B eפ-  ll d 5WW d5!!ע פ: F5<! ע פ:  (5< fפ  f  0W   @i@`%wjf= uP eff t111f Zuewiaf t NuE^] eKkW"  aDZ] EZ] N h eQʐN h mm Jʵ : @`Cy] Ð r2 aa va Bv < dh2< ^h2e  f  s] te p  : \ \ NwRh taf s sBai*Cava>  u5 ~ K J    D ewg     zrf :s  `ѕ- ae]ѕ-ѕ1ѕ9 4 ѕ  ѕ: ѕ: e e/ѐe:wf t& t twf   M u @ A -#  wf   @M u u u @ A B - #  wLff   E D @ A s     u&@eH p p eH p eH cQ<[y1OJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECwm  lY qx ty65 pawf ta 6w6  wC w  S   w8 x x &y vv``W  Vpf wN&f` h jet n x  jv  `; NvD Rx  :v N`f& e 8w7B 2 Hx uB`  &f ve u v  Bԗ a z %ew k)00W;B;557i:)*& & - ~uv6v`  o  \uv6v` Xw  @uE`D`  n D!"6  # D!     uHe w"j v  t  @C`B` 6   $ - . 0 ; A Z _ a zۃ [ פ] " פ" @  Lu% 28R r wV  a@`AB S  & ew  5AEA5 ef f ^  RN H@ewv5’ @  B@A  @@P5e w<) @N   Ԁ )% ! a E`   v    % d  R  @  .     f @w   w  5B`  w2/      5@         @!   &  ~ f   3f f &f &ff ]fE @fEe w`Eew~ lE @f\Ee dw`PEewHBEe 6 e,E        w   B 5 - 5(@7DDDDDDD D^ ~; D 5AbD@ * 7 BDw> B@ N <@6@ 2@@m,@7 "@ . D7 D@  C?? ?fCf$ ??7 ? ? 8CC ?7 C? 7 C N$ wC??e w   5  `˵>Cc5˵ x@ @*   \CwB %58C @`1  $ ^ BB 9 B   lB-fB X tFA6>5F $> t 5F p 5F l 5F h 5F 5|F X ~ &  8  e7 A5x@ >  > D  %5@@7 :@ j>  \>  Z   V % wf@m8=7 2=@eE& j  >w`= \p`^w<  C`D # -v?`p?-p?`j?-h?`b?-b?`\?-\?`V?`T? R?`L?`J?`H?-F?`@?->?`8?`6? 4?`.?-,?`&?%f>?=->>$> >>f`&  e  e  o>>e 7 Z=f 5J=#x>eEe~>f& wr>n>R>L>J>` R>e F>H>eB> <>eEm0>7,><>b->1==>& `&  e  e= =eEm=7=e  o==e 7 d<f=eEe L5D<=f& w=`z=z=v=V=P=N=` e V=N=w`P=wx-BF:| BeB eE=f \`=`=@  ef< < ::e m:H7 :7 ;  "7a? 2  7 7777e fe?E?@m7 & f @6Y V2w`|7 ?@    00W;X;555512W  W W | de?  ?? `w f v C W!W! mDm  D!  -m W!p  ,%wH    %w0 eEm>7 f5 b m>7 J5-p> $^>Z>Z> w R>wL>А `D>-@>@>8>8>w 2>r5 >  > eEB K  `w=w =w== a  differences found No differences found/ TI &% NSY  x  kQSYSY 8  D 4 1r  2\   X z5 -- Illegal switch or switch value -- Open failure on output file -- Illegal /LI value -- Command syntax error &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( Pf  e ee e &f& v '&1    6! N ~N vN nf0* fr0* ^rD0 Vr0 Nr1 Fr0 >H"5ew r, Bv     5Bw  eeȵe ~ zo DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB400X;;5555125  5 2  UE  0JE U 5@*& E& & f&ËDef Ë )̋Uw eE D` bl lrw \  B eE"s    s-  Csl&f &  m  f A N  %(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &&ff  Z| 6`'*`' B%DN( ,0*f,0*P Zr20*H Zff&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! 00X;B;557i:)*D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w |& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C eB  8 &$&w ,*(5<s1  U U@  Rf&" )'&M'&&**%*%0 *&* t*5ND  D<  EU   w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w*@<#8w X /$ ,:T < U@% DD%][%><w  wt1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce Pe%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` 0*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ **(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@   f >5>Eu   0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&%  j' ( *r'w 4( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB @  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ h#( P) .@#**fff  &*w00X;;555512p. tB5(8e$8w2A&(e x4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 60 @0 &*0 @ J& & fe# eB&B B , *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( L0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *w l(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ e6p 4 .8 D81416   J . r8e2 46f %8 E D/D!D l0l8epl0pɥ.ɕ wr U8UMw wV *) l0, *) $ )*)0,40,6 ,*1 XB 00fep=& /e`pww L ,) 8C * ) *w&*  Lep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 $p  8 V *`)w\ C#    D @)  6?0D)w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f 8e :* He*w,@)0,    8) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a 8e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  rwL N JwTB # f  `* 8w()0406 l0 **=p!Օ^ *) l0, *) $ )*)0,00X;B;557i:)*40,6  DP5R RRR  8  0**> =00l&8el2 0 *e6p 4 8 81416   6  ..8em,0l0!D0e6p 4.) &f Z he) .  e6p 4 08*wz141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf ` & eB6& e./& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA Е A EA EЕ A A   $Е.  AЕ; 2    w ' UD$BA &( U BQ Е*  w j ť ť 0B ^Aaw 8D&& bЕ- eae?PPPЕ-$w D  &Е. ce  Е:   B 5 ߥ& *  + 23E Ew p   Е-   0@A nW e`fÊ    E &   `@ ` B   & A @    &|&  f&&  e#e|& f&&G& & & & && '&& 89f"e\e!e 6 5f 2* eA &3w >*8I *=)98 8 eB &&  U ***e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w**8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( h0 0 0 80 B0 0 0 0)#0.)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) ^&f00X;;555512 (  e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w FU8UMwR w0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*w 5 funhj uhdB$ 0jwaw< 8 v8w &  |*AdBbAep& f  P P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp j5f fˇ ȕ V‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *++w  8jDl@ TeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ N   6 `'  H"w f) Z* w446l0w *D   wB**=D : `p46 f 64/=  D@) 0  8wn 46 8 pe*wv > =00l&8el2 0 *0+1(e  @%&p*w f( f)f x8Ae f"( UCɗ&+(e$&% 141612epl2l0p *) l0, *) $ )*)0,40,6 w  ) j ( fU %  BA `6p 4p`4 %60 4e6p 4 88 481416 4    b46f %8 E D/D!D l0l8epl0pɥ.ɕ @w0)"(. = . B  E  h(.0,0, f 톇,, w :     .% D eB U5UU plp & NeՀ)*,*1 U8UMw$ wh ,B 00fep=& /e`pw8e2 ..8em,0l0!D0e6p 4.) F&f   e) .  e6p 4 08*w=p!Օ^00X;Y;557i:)*w 7 *\  r  \ Ar  5Df  \ r 0D qBCr r &   r vŝ\\ X&r N D P r 3  5|r  2  2 w 5B!\ 23 p  2  \ T3 @5I\  Е-& r  A  \ Е, A   PЕ, Е,Е/Е;L Д/ @f  r  2  ww @ 61w  @ B*w:@B 21 1ap1 6 5 5 W  x5p h2 |dh2XwLe`  3 V3. w|؃3au qss   55*; 55 ve  h2 W,4  3 lV3" w 4 DV4" w-@ 5 ve   W,p v  P" d!w N  (" 00Y;;557i:)* differences found No differences found/ TI8R&% NSY888VkQSYSY t p1T2  + -- Illegal switch or switch value -- Open failure on output file -- Illegal /LI value -- Command syntax error************************************************** -- Too many differences for available core -- Error reading input file #1 -- Error reading input file #2 %1A) %2A%Q:%VA%X -- Open failure on input file #1 -- Open failure on input file #2 -- Error writing output file &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w 5 funhj uhdB$ 0jwaw< 8 v8w &  8*AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w .jjlj ɥ@@aujk,bp Z5f fˇ ȕ ~‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *tw  8jDl@ TeBT85l@ @( D HeB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ & & @( f  e ee e &f& v ('&15ew , Bv     5BwR 00Y;Z;555512*y'z()-~:+ D- E %     U EU 5  5U <+ x*"*)E U *5@*& E& & f&ËDef Ë )̋U&ff &  m  f A N  % p, 80|X$L<H($|,?(?(wY &[q$Y @TITISYSYTIOV00Z;;557i:)*0V.00  f  4 W# 0 Q & . *  \  l 0 0 0  l p 7 f& & A&f?A`e  P!" 0 b `Aw f hfp n -   x p` BJ  ʕ=ZTD ` : ( f : w4  wH T ȕFf .  n 6 fn % ww 6eB feBzw $&< H # D  D f " 6 w   f   w d ` 5E5 E5pE~7 x pEf  5Vc 2 &4 2 ^l  K <bɥ= <8f  8 5  D ( w  Bf  wf *wBL CB CO DI FF LI LN MB SL TB@ VB SP Z  \ 07P CMP> differences found No differences found/ TI & &% NSY     * kQSYSY H  T D 1 ( 2l   h ,( -- Illegal switch or switch value -- Open failure on output file -- Illegal /LI value -- Command syntax error &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( @f  e ee e '&1 8 8p 8, 8 &8 & &0 &| &X &$ 8 &L &< &H \ & z n r 8( j & b 8$ Z n# R nF$ J nl% B nf$5ew H, Bv     5Bw 00Z<;555512-.50  (r- DUt-E D  E E ܁ L&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&  m  f A N  %&ff  &[q &[q`& 8 & \JJlJnJ J\Jw 45 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w Xjjlj 00Z <;557i:)*ɥ@@aujk,bp 5f fˇ ȕ 6‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ ZDlljaCeH###33 & 8 *rFw  8jDl@ @TeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@w 7 *l    l A  5f  l  0D qBCr r &   r vŝl X& N D P r 3  5  2  2 w 5!l 2 ' p  2  l T ' @5Il  Е-& r  A l Е, A  Е, Е,Е/Е;\ Д/ @f    2  ww @ 61w  @ *w:@B 21 1ap1 6 5v 5n W  x5pP % |d%XwLe`  B<' f<'. 4w3au qss   55; 55 ve  % W,D  j' fj'" w` j' f'" \w8-@ #4:^gtw zZ&`w nZ& & &f&  ¥%   %B&ХVA B C 2~  A  Е%V P~Е Bf RY~.:.74#1Hŀ ȕ ~ `Е ~Ћ~ Е Е ~.Е A N  ~ .A HB~Е ~Е A .BA   "Е. B AЕ; BX~   A ,BEA  NBE 6L  - 7 &fwlh 7 `7^b @+s `,MceLG] m"@  D~, H N  7 f@   &  5]U E 6&@E A | Ɇ  E n@RPC~=85 @  . &f  *X .X  6   .$  ~ ̥ZḀ90     ~kz?TLBOPzLB  T șAh ?h  00[<;557i:)*R'r CON>PdTIXSY`&& NSY I/O Error Code %D.QI/O Error Code %D. 4.00 ++6+++6+6+p+d+j+(,H+B+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+6+H1N1T1331F33334222*23.262>222z322*32d@z@@@@@@ A-AHAkA~AAAAAABGBzBBBBCGCaCCCC"DUDDDDD+E%N%R -- Unimplelmented command%N -- %VA%N%N%R -- Command Syntax Error%N -- %VA%N%N%R -- Unable to assign command LUN%N%N%R -- No reconfiguration driver is available%N --- Output to HRC is suppressed---%N%N%R -- Maximum INDIRECT command file depth exceeded%N -- %VA%N%N%R -- Bad INDIRECT command file specification%N -- %VA%N%N%R -- Open error on input command file%N -- %VA%N FILE=%2A%B:%X, %I%N%N%R -- Input error on input command file%N -- %VA%N FILE=%2A%B:%X,%I%N %N%R -- Unknown command error%N -- %VA%N %N%R -- Illegal command%N -- %VA%I%VA%N %N%R -- Illegal keyword%N -- %VA%I%VA%N %N%R -- Internal consistancy error%N%VP %N%R -- Command list is empty. Nothing to print%N%N%R -- Command Syntax error%N -- %VA%I%VA%N%N%R -- This command is illegal in immediate mode%N%N%R -- Command execution error. %N%I%N%N%R -- Unknown device or invalid device specification%NCODE= %P (=%D)%N%N%R -- Internal core pool is exhausted%N%N%R -- No device name matches select string "%I"%N%N%R -- Initalization error%N%I%N%N%N%R -- File open error%N FILE=%2A%B:%X%N %I%N%N%R -- CONFIGURE Version %I%NTask built: %Y %5Z%N%N No HRC version information available%N%NHRC -- HRC Version %B.%B%NTask built: %Y %5Z%N%N%N%R -- Configuration Control Command Task%2NImplemented commands:%2N ONLINE %N ONLINE MEMORY %N ONLINE ALL%N OFFLINE %N OFFLINE MEMORY %N OFFLINE ALL%N SET =%N BUILD%N CLEAR%N DISPLAY [
; .RAD50 ;rH; Note that this subroutine assumes that the named process exists in the5; system and does not check if the process is loaded.i;-, .IIF NDF K$$DAS OFS=6 ; Stack offset for R5- .IIF DF K$$DAS OFS=10 ; Stack offset for R5T1$CALLX::MOV $CMPDV,-(SP) ; Save current PDV indexB0 MOV KISAR5,-(SP) ; and current process mapping .IF DF K$$DAS, MOV KINAR5,-(SP) ; Save instruction mapping .ENDC ; DF K$$DAS6 MOV (R5)+,-(SP) ; Save destination subroutine address& SAVRG ; Get 2 free registers) MOV $PDVTA,R1 ; Point to PDV index tablen10$:' MOV (R1)+,R2 ; Get pointer to next PDVo BEQ 10$ ; Ignore zero entriesi) CMP Z.NAM(R2),(R5) ; Do we have a match?e BNE 10$ ; If NE, noD$ TST (R5)+ ; Skip over process name- MOV (R2),KISAR5 ; Map to destination processB .IF DF K$$DAS- MOV (R2),KINAR5 ; Also map instruction spaceD .ENDC ; DF K$$DAS- TST -(R1) ; Back up PDV index table pointer" SUB $PDVTA,R1 ; Compute PDV index MOV R1,$CMPDV ; and save it12 MOV OFS+4(SP),R2 ; Swap old R5 and return address MOV R5,OFS+4(SP) ; ... MOV R2,R5 ; ...o# RESRG ; Restore registerse# CALL @(SP)+ ; Call the subroutineo .IF DF K$$DAS/ MOV (SP)+,KINAR5 ; Restore instruction mapping  .ENDC ; DF K$$DAS+ MOV (SP)+,KISAR5 ; Restore process mappingF- MOV (SP)+,$CMPDV ; Restore current PDV indext RETURND .. .SBTTL $CEACC - Access Block in Extended Pool8 .SBTTL $CECAC - Access Block in Alternate Extended Pool;+); **-$CEACC-ACCESS BLOCK IN EXTENDED POOL 3; **-$CECAC-ACCESS BLOCK IN ALTERNATE EXTENDED POOL ;.?; This subroutine maps to a block in extended single word pool,<; and returns a virtual address to access the block. If theB; $CECAC entry is called, the Extended Pool must already be mapped ; via APR6.R; ; Inputs:c); 2(SP) = Address of block to be accessedu8; KISAR6 mapped to alternate Extended Pool Base ($CECAC); ; OUTPUTS:); 2(SP) = VIRTUAL ADDRESS OF MAPPED BLOCKr;e; Note: ?; KISAR6 always mapped into Extended Pool on exit even if block- ; is in DSR.;-7$CEACC::MOV $XBIAS,KISAR6 ; Map to base address of poolc6$CECAC::BIT #1,2(SP) ; Is the block in Extended Pool ?- BEQ 100$ ; If EQ, no - already mapped to itC SAVRG ; Else, save R0" MOV 4(SP),R0 ; Copy block address+ BIC #177701,4(SP) ; Return virtual addressb. BIS #140000,4(SP) ; ... mapped through KISAR6 .IF DF R$$EIS ASH #-6,R0 .IFF ; DF R$$EISP .REPT 6( ROR R0 ; Convert address to block bias .ENDR .ENDC ; DF R$$EIS' BIC #176000,R0 ; Clear extraneous bitsi+ ADD R0,KISAR6 ; ... update to proper block  RESRG ; Restore R0C100$:I RETURN ; Return to the caller * .SBTTL $PDVID - Process Name to PDV Index;+(; **- $PDVID - PROCESS NAME TO PDV INDEX;SG; This subroutine maps a process name (up to three characters in RAD50); into a PDV index..;m ; Inputs:g; R2 = Process name (RAD50)A;# ; Outputs:; R2 = PDV Index;-'$PDVID::SAVRG ; Save registersi1 MOV $PDVTA,R0 ; Get address of PDV address table 6 MOV $PDVNM,-(SP) ; Get total number of PDVs in system10$:" MOV (R0)+,R1 ; Get address of PDV/ BEQ 15$ ; Process not loaded - go to next oneB, CMP Z.NAM(R1),R2 ; Does process name match?$ BEQ 20$ ; Yes - go calculate index15$:, DEC (SP) ; Decrement count - done looping? BNE 10$ ; If NE, no0 SEC ; Yes - no match BR 25$ ; Return with C-bit set20$:7 MOV R0,R2 ; Get current position in PDV address tableR3 SUB $PDVTA,R2 ; Subtract starting address of tabled# TST -(R2) ; Get PROCESS pdv indexN25$:3 INC (SP)+ ; Clean up stack and don't change C-bit0# RESRG ; Restore registers  RETURN ; Return g" .SBTTL $CEMUL00B5`v:`TADATADATADATADATADATADATADATADATA - Unsigned Multiply;+ ; **- $CEMUL - UNSIGNED MULTIPLY; K; This subroutine performs unsigned multiplication where the result is lessEJ; than 16 bits. It is included here so that we can conditionalise the code; for extended instruction set.n;oF; Note that it is the callers responsibility to ensure that the result; will fit in 16 bits.;e ; Inputs:d; R0 = MultiplierC; R1 = Multiplicanda;a ; Outputs:; R0 = Corrupted; R1 = Low 16 bits of result;-$CEMUL:: .IF DF R$$EIS$ MUL R0,R1 ; Perform multiplication RETURN- .IFF ; DF R$$EIS ) CALLR $MUL ; Call exec multiply routinep .ENDC ; DF R$$EIS l" .SBTTL $CEDIV - Unsigned Division;+ ; **- $CEDIV - UNSIGNED DIVISION; L; This subroutine performs unsigned division where the results are less thanI; 16 bits. it is included here so that we can conditionalise the code foru; extended instruction set.1;ML; Note that it is the callers responsibility to ensure that the results will; fit in 16 bits.F; ; Inputs:L; R0 = Dividend ; R1 = Divisor;T ; Outputs:; R0 = QuotientC; R1 = Remainder;-$CEDIV:: .IF DF R$$EIS MOV R1,-(SP) ; Save divisor MOV R0,R1 ; Set up dividend CLR R0 ; Clear high order word$ DIV (SP)+,R0 ; Perform the division RETURNe .IFF ; DF R$$EIS ' CALLR $DIV ; Call exec divide routineh .ENDC ; DF R$$EIS e .IF DF M$$PRO- .SBTTL $MPLCK - Multi-Processor Lock Routinet;+(; **-$MPLCK-MULTI-PROCESSOR LOCK ROUTINE; F; This routine will perform a spin lock on the Comm Exec Lock ($CRESL)E; and then co-call the caller. On return it will unlock the Comm ExecCD; lock and return. Note that we perform the lock operation ourselves0; so that we can correctly manipulate the cache.;-'$MPLCK::ASRB $CRESL ; Spin on the lock$ BCC $MPLCK ; until we have access. CACHE$ FLUSH ; Flush the cache of stale data' CALL @(SP)+ ; Co-call the caller backo MOVB #1,$CRESL ; Reset the lock RETURNR S3 .SBTTL $MPSAV - Bypass Cache with Save and Restorep;+.; **-$MPSAV-BYPASS CACHE WITH SAVE AND RESTORE;aB; This routine will save the current state of the cache and bypass@; it before co-calling the caller. On return it will restore the; initial state of the cache.h;-2$MPSAV::CACHE$ SAVE ; Save current state of cache" CALL @2(SP) ; Co-call the caller( MOV (SP)+,2(SP) ; Overwrite return link# CACHE$ UNSAVE ; Restore the cachel RETURN .ENDC ; DF M$$PRO-$CEXND:: ; For release of CEX space to DSR.p .ENDC ; DF M$$NET .ENDrep;+.; **-$MPSA .TITLE CODRV  .IDENT /03.00/O; C; COPYRIGHT (c) 1988 BY ); DIGITAL EQUIPMENT CORPORATION, MAYNARD (; MASSACHUSETTS. ALL RIGHTS RESERVED.; X6; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY6; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE6; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE6; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER6; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE6; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO6; AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.; 6; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO6; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED6; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.; 6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR6; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS; NOT SUPPLIED BY DIGITAL.; T;E; STEVE RUZICH 03-SEP-80;R; CONSOLE DRIVER;O;E$; MODIFIED FOR RSX-11M-PLUS V4.1 BY:;T; ; L. KOGAN 20JAN-88 03.00 ; ,; LK732 -- SAVE R1,R2 BEFORE CALLING $IOFIN; ; MACRO CALLSF;A* .MCALL ABODF$,HWDDF$,PKTDF$,TCBDF$,UCBDF$# ABODF$ ; DEFINE TASK ABORT CODESC% HWDDF$ ; DEFINE HARDWARE REGISTERSA% PKTDF$ ; DEFINE I/O PACKET OFFSETSA- TCBDF$ ; DEFINE TASK CONTROL BLOCK OFFSETS UCBDF$ ; DEFINE UCB OFFSETS;T; DRIVER DISPATCH TABLEB;I DDT$ CO,1,NONE V;+#; **-COINI-CONSOLE DRIVER INITIATOR;C; EXAMINE FUNCTION CODE. IO.WLB PACKETS ARE QUEUED TO COT'S PACKET ?; QUEUE. THE TE00v=`VD`NRMINAL DRIVER IS REQUESTED TO PROCESS ALL ELSE.A; ; INPUTS: R5 = UCB ADDRESSH; R4 = SCB ADDRESSC; R1 = I/O PACKET ADDRESS; ;-CCOINI: CMPB I.FCN+1(R1),#IO.WLB/400 ; WRITE LOGICAL BLOCK FUNCTION?P BNE 10$ ; NO - QUEUE TO TTDRV6 TST U.CTCB(R5) ; YES- COT WILL PUT ITS TCB ADDR HERE* ; IF IT IS ACTIVE, ZERO ON EXIT.1 BEQ 10$ ; ZERO? - SOMEONE MUST HAVE REDIRECTEDE, ; CO: TO ITSELF - QUEUE PACKET TO TTDRV" MOV R5,R0 ; NON-ZERO - CONTINUE4 ADD #U.COTQ,R0 ; ADDRESS OF COT'S I/O PACKET QUEUE, CALL $QINSP ; INSERT IN QUEUE BY PRIORITY3 MOV U.CTCB(R5),R0 ; COT'S TCB ADDRESS FOR REQUESTT CALLR $EXRQN ; START COTC?10$: MOV #IE.OFL&377,R0 ; IF ERROR, RETURN DEVICE OFFLINE CODE1: MOV U.RED2(R5),R2 ; IS THERE A DEFAULT CONSOLE TERMINAL?2 BEQ 20$ ; NO - FINISH I/O, RETURNING ERROR CODE' MOV R2,R5 ; YES- SET UP TERMINAL UCBO9 MOV R2,I.UCB(R1) ; I/O PACKET NEEDS THE RIGHT UCB, TOO.E0 CALLR $DRQRQ ; QUEUE REQUEST TO THIS TERMINAL,20$: MOV R1,R3 ; PACKET ADDRESS FOR $IOFIN CLR R1 ; NO BYTES TRANSFERED. CALLR $IOFIN ; FINISH I/O ,;+!; **-COCAN-CANCEL I/O ENTRY POINTC;R0; OUTSTANDING I/O PACKETS MAY BE SEVERAL PLACES:F; 1) IN COT'S UCB I/O PACKET QUEUE: DEQUEUE AND FINISH THESE PACKETS.I; 2) CURRENTLY BEING PROCESSED BY COT: ASSUME A QUICK FINISH AND IGNORE. 6; 3) BEING PROCESSED BY TTDRV: CALL $IOKIL FOR TTDRV. ;CI; THE LAST STEP HAS THE SIDE EFFECT OF KILLING ALL TERMINAL I/O FROM THE U2; TASK, NOT JUST I/O WHICH CODRV FIELDED TO TTDRV.; ; INPUTS: R5 = UCB ADDRESSS; R4 = SCB ADDRESS$; R1 = TCB ADDRESS;;-COCAN:0 MOV #IE.ABO&377,R0 ; SET FINAL STATUS TO ABORT3 MOV R5,R2 ; GET ADDRESS OF PACKET QUEUE LISTHEADK ADD #U.COTQ,R2 ;;FB; THE FOLLOWING CODE WAS MODIFIED FROM $IOKIL PROCESSING IN IOSUB.G; IT APPEARS THAT THE TCB ADDRESS WILL BE RETURNED AS WORD 2 OF IOSTAT.F;T10$: MOV R2,R3 ; COPY IT020$: MOV R3,R4 ; SAVE ADDRESS OF CURRENT ENTRY* MOV (R4),R3 ; GET ADDRESS OF NEXT ENTRY BEQ 40$ ; IF EQ END OF LIST/ CMP R1,I.TCB(R3) ; REQUEST FOR CURRENT TASK?  BNE 20$ ; IF NE NO MOV (R3),(R4) ; CLOSE UP LIST; BNE 30$ ; IF NE NO NEW LAST( MOV R4,2(R2) ; SET ADDRESS OF NEW LAST30$: MOV R1,-(SP) ; SAVE R1 MOV R2,-(SP) ; SAVE R2# CALL $IOFIN ; FINISH I/O REQUESTO MOV (SP)+,R2 ; RESTORE R2C MOV (SP)+,R1 ; RESTORE R1  BR 10$ ; GO AGAIN>40$: MOV U.RED2(R5),R5 ; IS THERE A DEFAULT CONSOLE TERMINAL? BEQ EXIT ; NO - CONTINUE 3 JMP $IOKIL ; YES- KILL ANY I/O WHICH CODRV MIGHTO ; HAVE GIVEN TO TTDRV.;+ ; **-COOUT - TIMEOUT ENTRY POINT;?; COT SETS S.CTM, THE CURRENT TIMEOUT COUNT, WHEN IT CONTAINS ATA; PARTIALLY FILLED LOGFILE BUFFER. WHEN THE COUNT EXPIRES, CODRVVC; INFORMS COT THAT IT IS TIME TO FLUSH THIS BUFFER TO THE LOGFILE. ;V; INPUTS: R5 = UCB ADDRESS(; R4 = SCB ADDRESS ;B;-.COOUT: MOV U.CTCB(R5),R0 ; COT TCB, IF ACTIVE( BEQ EXIT ; EQ = INACTIVE - DO NOTHING2 CALLR $EXRQN ; REQUEST COT WITH NO QUE ENTRY - ) ; THIS IS A CUE TO FLUSH THE BUFFER.TEXIT: ; COMMON EXITT,COPWF: RETURN ; ENTRY POINT FOR POWERFAIL .ENDNTIMEOUT COUNT, WHEN IT CONTAINS ATA; PARTIALLY FILLED LOGFILE BUFFER. WHEN THE COUNT EXPIRES, CODRVVC; INFORMS COT THAT IT IS TIME TO FLUSH THIS BUFFER TO THE LOGFILE. ;V; INPUTS: R5 = UCB ADDRESS(; R4 = SCB ADDRESS ;B;-.COOUT: MOV U.CTCB(R5),R0 ; COT TCB, IF ACTIVE( BEQ EXIT ; EQ = INACTIVE - DO NOTHING2 CALLR $EXRQN ; REQUEST COT WITH NO QUE ENTRY - .TITLE CORAL .IDENT /10.09/;2; COPYRIGHT (c) 1982, 1983, 1984, 1985, 1987, 1988#; BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; D. N. CUTLER 3-AUG-73;; MODIFIED BY:;; H. HUANG 28-JUN-83 10.00;1; HH175 -- ADD EXTENDIBLE SECONDARY POOL SUPPORT;; J. W. BERZLE 07-SEP-83 10.01;2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES00VE`:`TADATADATADATADATADATADATADATADATA;.; J. W. BERZLE 11-JUN-84 10.02;0; JWB085 -- DEALLOCATE CONTEXT BLOCK IF PRESENT#; WHEN DEALLOCATING CLOCK BLOCK; ; C. A. SILVER 12-MAR-85 10.03;F(; CAS019 -- ADD AUXILARY SPM HOOKPOINTS; ; C. B. PUTNAM 09-MAY-85 10.04;E-; CBP204 -- ADD POOL FRAGMENT VALIDITY CHECKU;R ; B. S. MCCARTHY 24-JUN-85 10.05; '; CAS019 -- REFORMAT SPM HOOK COMMENTS ; ; P. K. M. WEISS 13-OCT-86 10.06;/; PKW118 -- ADD $ALSC1 AND $DESC1 ENTRY POINTS-;D ; P. K. M. WEISS 10-NOV-87 10.07;.;; PKW142 - RETURN CC WHEN LISTHEAD BELOW $POLHD FOR $ALSC1 ;T; P. K. M. WEISS 2-FEB-88 10.08D;L=; PKW150 - CALL $CPRCV IF $CPPOL IS SET ON POOL DEALLOCATION ;S ; P. K. M. WEISS 29-NOV-88 10.09; 3; PKW168 - $SAVAL IS *NOT* AN EXEC ROUTINE, CRETIND;O!; CORE BUFFER ALLOCATION ROUTINES.; ; MACRO LIBRARY CALLS5;  .MCALL CLKDF$,PKTDF$,BGCK$A3 CLKDF$ ;DEFINE CLOCK QUEUE CONTROL BLOCK OFFSETS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;+ ; **-$ALOCB-ALLOCATE CORE BUFFER2; **-$ALOC1-ALLOCATE CORE BUFFER (ALTERNATE ENTRY); H; THIS ROUTINE IS CALLED TO ALLOCATE AN EXEC CORE BUFFER. THE ALLOCATIONF; ALGORITHM IS FIRST FIT AND BLOCKS ARE ALLOCATED IN MULTIPLES OF FOUR; BYTES.;. ; INPUTS:P;6>; R0=ADDRESS OF CORE ALLOCATION LISTHEAD-2 IF ENTRY AT $ALOC1.2; R1=SIZE OF THE CORE BUFFER TO ALLOCATE IN BYTES.; ; OUTPUTS:;P>; C=1 IF INSUFFICIENT CORE IS AVAILABLE TO ALLOCATE THE BLOCK. ; C=0 IF THE BLOCK IS ALLOCATED.%; R0=ADDRESS OF THE ALLOCATED BLOCK. ; R1=LENGTH OF BLOCK ALLOCATED ;- .ENABL LSBN7$ALOCB::MOV #$CRAVL-2,R0 ;POINT TO ALLOCATION MASK WORDR .IF DF Q$$OPT% ADD (R0),R1 ;ROUND TO NEXT BOUNDARY  BIC (R0)+,R1 ;M# BEQ 5$ ;IF EQ ZERO LENGTH REQUESTU( CMP R1,#I.LGTH ;REQUEST SIZE OF PACKET? BNE 5$ ;IF NE NO2 MOV #$PKAVL,R2 ;POINT TO PACKET AVAILABLE POINTER% MOV (R2),R0 ;PICK UP PACKET POINTERF BEQ 4$ ;IF EQ THERE IS NONE - MOV (R0),(R2)+ ;UNLINK PACKET FROM LIFO LISTL;+; ** W A R N I N G **T;A; SPM HOOKPOINT NUMBER 77.;O); DO NOT CHANGE THE INSTRUCTION FOLLOWINGO; LABEL WITHOUT CHECKING SPM;-+$SPH77==. ;SPM CHANGES THE INSTRUCTION AT( ;THE LOCATION OF THIS LABEL, DEC (R2) ;INDICATE ONE PACKET LESS IN LIST RETURN ;R84$: MOV #$CRAVL-2,R0 ;POINT BACK TO ALLOCATION MASK WORD .ENDC,$ALOC1::ADD (R0),R1 ;ROUND TO NEXT BOUNDARY BIC (R0)+,R1 ;CLEAR EXCESS#5$: SEC ;ASSUME ZERO LENGTH BLOCK($ BEQ 35$ ;IF EQ ZERO LENGTH REQUEST .IF DF P$$CTL' MOV R0,-(SP) ;SAVE ADDRESS OF LISTHEAD. .ENDC.10$: MOV R0,R2 ;SAVE ADDRESS OF CURRENT BLOCK( MOV (R2),R0 ;GET ADDRESS OF NEXT BLOCK A S .IF DF R$$DER ( BEQ 40$ ;IF EQ END OF CHAINE ;D1 ;THE FOLLOWING CODE CHECKS TO SEE IF THE POOL , ;...FRAGMENT IS OF VALID SIZE. IT CAN BE2 ;...NEITHER ODD NOR AN ODD MULTIPLE OF 2 BYTES ; # BIT #3,2(R0) ;FRAGMENT SIZE VALID?R BNE 50$ ;IF NE, NO M .IFFL T BEQ 30$ ;IF EQ END OF CHAIN  G .ENDC  . CMP 2(R0),R1 ;BLOCK BIG ENOUGH? BLO 10$ ;IF LO NO.$ BEQ 20$ ;IF EQ BLOCK IS EXACT SIZE( TST (R0)+ ;POINT TO SIZE OF FREE BLOCK' SUB R1,(R0) ;CALCULATE SIZE REMAINING$$ ADD R0,R1 ;POINT TO NEW FREE BLOCK MOV (R0),(R1) ;COPY SIZEI MOV -(R0),-(R1) ;COPY LINKP+ MOV R1,(R0) ;STORE LINK TO NEW FREE BLOCKA" SUB R0,R1 ;RESTORE SIZE OF BLOCK120$: MOV (R0),(R2) ;UPDATE LINK TO NEW FREE BLOCKN 30$: ;D .IF DF P$$CTL4 BIT #^C<$CRAVL>,(SP)+ ;ALLOCATION FROM EXEC'S POOL?, BNE 35$ ;IF NE NO, SKIP POOL SIZE TRACKING, ROR (R0) ;ALLOCATION FAILURE? (SAVE C-BIT) BPL 32$ ;IF PL NOE/ MOV #PC.ALF!,R2 ;SET LOW POOL MASKR' BR 33$ ;REPORT THE ALLOCATION FAILURER632$: SUB R1,$PRISZ ;SUBTRACT FROM TOTAL FREE POOL SIZE;+; ** W A R N I N G **L;P; SPM HOOKPOINT NUMBER 76.;N); DO NOT CHANGE THE INSTRUCTION FOLLOWINGF; LABEL WITHOUT CHECKING SPM;-+$SPH76==. ;SPM CHANGES THE INSTRUCTION AT$ ;THE LOCATION OF THIS LABELL6 CMP @#$PRISZ,@#$PRILL ;DID WE CROSS LOWER POOL LIMIT?$ BHIS 34$ ;IF HIS NO, ALLOCATION OK7 MOV #00VM`D`NPC.LOW!,R2 ;SET UP LOW POOL CONDITIONF,33$: CALL $PLTRQ ;REQUEST POOL MONITOR TASK%34$: ASL (R0) ;RECOVER THE CARRY BITS .ENDC35$: RETURN ;DONE  E O .IF DF R$$DER A 40$: ;* .IF DF P$$CTL INC (SP)+ ;CLEAN STACK .ENDC% DEC R0 ;RETURN A VALUE OF MINUS ONEU RETURN ;MC50$: BGCK$A BF.POL,BE.FSI,FATAL ;ALLOCATION - FRAGMENT SIZE INVALID  T .ENDC  C .DSABL LSB#;++; **-$ALCLK-ALLOCATE CLOCK QUEUE CORE BLOCK;;HJ; THIS ROUTINE IS CALLED TO ALLOCATE A CORE BLOCK FOR A CLOCK QUEUE ENTRY.; ; INPUTS:P;Q; NONE.T;O ; OUTPUTS:;A; IF INSUFFICIENT CORE IS AVAILABLE TO ALLOCATE THE BLOCK, THEN AD>; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED. ELSE THE ADDRESS OF6; THE ALLOCATED BLOCK IS RETURNED TO THE CALLER IN R0.;- .ENABL LSBN5$ALCLK::MOV #C.LGTH,R1 ;PICK UP LENGTH OF CLOCK BLOCKL BR 10$ ;;+-; **-$DECLK-DEALLOCATE CLOCK QUEUE CORE BLOCK#N; **-$DCLKA-DEALLOCATE CLOCK QUEUE BLOCK THAT MAY HAVE ACCOUNTING REQUIREMENTS;TG; THIS ROUTINE IS CALLED TO DEALLOCATE A CORE BLOCK THAT WAS BEING USEDO; FOR A CLOCK QUEUE ENTRY.;I ; INPUTS: ;E1; R0=ADDRESS OF THE CORE BLOCK TO BE DEALLOCATED.E;V ; OUTPUTS:;R2; THE CLOCK QUEUE ENTRY CORE BLOCK IS DEALLOCATED.;-$DCLKA::  T .IF DF A$$CNT -. CMPB #C.SCHD,C.RQT(R0) ;PERIODIC TASK REQUEST BEQ 2$ ;IF EQ YESC1 CMPB #C.SSHT,C.RQT(R0) ;SINGLE SHOT TASK REQUESTQ BNE $DECLK ;IF NE NO 2$: MOV C.UAB(R0),R1 ;LOCATE UAB BEQ $DECLK ;IF EQ, NO UABU' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING  MOV R1,KISAR6 ;MAP UABH) DECB @#B.USE+140000 ;DECREMENT USE COUNTR$ BNE 4$ ;IF NE, UAB IS STILL ACTIVE MOV R0,-(SP) ;SAVE R0, BICB #BS.ACT,@#B.STM+140000 ;DEACTIVATE UAB" CALL $QACNT ;QUEUE UAB TO SYSLOG( MOV (SP)+,R0 ;RESTORE CLQ BLOCK ADDRESS.4$: MOV (SP)+,KISAR6 ;RESTORE ORIGINAL MAPPING T .ENDC ; E$DECLK::( .IF DF N$$DIR ;NAMED DIRECTORY SUPPORT/ CMPB #C.SCHD,C.RQT(R0) ;PERIODIC TASK REQUEST?; BEQ 5$ ;IF EQ, YES2 CMPB #C.SSHT,C.RQT(R0) ;SINGLE SHOT TASK REQUEST? BNE 7$ ;IF NE, NOA-5$: TSTB C.NAM(R0) ;IS THERE A CONTEXT BLOCK?S BEQ 7$ ;IF EQ, NOF, MOV C.CTX(R0),R1 ;GET CONTEXT BLOCK POINTER BEQ 7$ ;BR IF EQ, NONE EXISTS;' CALL $DLCTX ;DEALLOCATE CONTEXT BLOCKT7$: ;REFERENCE LABELR .ENDC ; DF N$$DIR. MOV #C.LGTH,R1 ;PICK UP LENGTH OF CLOCK BLOCK BR $DEACB ;;+3; **-$ALPKT-ALLOCATE SEND OR I/O REQUEST CORE BLOCKT;C; THIS ROUTINE IS CALLED TO ALLOCATE A CORE BLOCK FOR A SEND OR I/OS; REQUEST QUEUE ENTRY.;S ; INPUTS:T; ; NONE.;E ; OUTPUTS:;AA; IF INSUFFICIENT CORE IS AVAILABLE TO ALLOCATE THE BLOCK, THEN AN>; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED. ELSE THE ADDRESS OF6; THE ALLOCATED BLOCK IS RETURNED TO THE CALLER IN R0.;-0$ALPKT::MOV #I.LGTH,R1 ;SET LENGTH OF I/O PACKET,10$: CALL $ALOCB ;ATTEMPT TO ALLOCATE BLOCK BCC 80$ ;IF CC SUCCESSFULL! DRSTS D.RS1 ;ALLOCATION FAILURER;+5; **-$DEPKT-DEALLOCATE SEND OR I/O REQUEST CORE BLOCKC;OG; THIS ROUTINE IS CALLED TO DEALLOCATE A CORE BLOCK THAT WAS BEING USEDE(; FOR A SEND OR I/O REQUEST QUEUE ENTRY.;V ; INPUTS:A;C1; R0=ADDRESS OF THE CORE BLOCK TO BE DEALLOCATED.1;S ; OUTPUTS:; @; THE SEND OR I/O REQUEST QUEUE ENTRY CORE BLOCK IS DEALLOCATED.;-0$DEPKT::MOV #I.LGTH,R1 ;SET LENGTH OF I/O PACKET;+"; **-$DEACB-DEALLOCATE CORE BUFFER4; **-$DEAC1-DEALLOCATE CORE BUFFER (ALTERNATE ENTRY);LH; THIS ROUTINE IS CALLED TO DEALLOCATE AN EXEC CORE BUFFER. THE BLOCK ISD; INSERTED INTO THE FREE BLOCK CHAIN BY CORE ADDRESS. IF AN ADJACENTF; BLOCK IS CURRENTLY FREE, THEN THE TWO BLOCKS ARE MERGED AND INSERTED; IN THE FREE BLOCK CHAIN.;O ; INPUTS:A;C2; R0=ADDRESS OF THE CORE BUFFER TO BE DEALLOCATED.4; R1=SIZE OF THE CORE BUFFER TO DEALLOCATE IN BYTES.>; R3=ADDRESS OF CORE ALLOCATION LISTHEAD-2 IF ENTRY AT $DEAC1.;O ; OUTPUTS:;R;; THE CORE BLOCK IS MERGED INTO THE FREE CORE CHAIN BY CORE ?; ADDRESS AND IS AGCOMERATED IF NECESSARY WITH ADJACENT BLOCKS.C;-7$DEACB::MOV #$CRAVL-2,R3 ;POINT TO ALLOCATION MASK00VU`:`TADATADATADATADATADATADATADATADATA WORDA .IF DF Q$$OPT% ADD (R3),R1 ;ROUND TO NEXT BOUNDARYE BIC (R3)+,R1 ;T$ BEQ 80$ ;IF EQ NO BLOCK TO RELEASE, CMP R1,#I.LGTH ;LENGTH EQUAL TO I/O PACKET? BNE 30$ ;IF NE NO 7 MOV #$PKMAX,R2 ;PNT TO MAX # OF PACKETS TO PREALLOCATEA* CMPB (R2),-(R2) ;MAX NUMBER PREALLOCATED? BLOS 30$ ;IF LOS YES;+; ** W A R N I N G **I;E; SPM HOOKPOINT NUMBER 75.;Y); DO NOT CHANGE THE INSTRUCTION FOLLOWINGE; LABEL WITHOUT CHECKING SPM;-+$SPH75==. ;SPM CHANGES THE INSTRUCTION AT  ;THE LOCATION OF THIS LABEL' INC (R2) ;INDICATE ONE MORE AVAILABLEC+ MOV -(R2),(R0) ;LINK PACKET INTO LIFO LISTL MOV R0,(R2) ;L RETURN ;Q .ENDC ;Q$$OPT,$DEAC1::ADD (R3),R1 ;ROUND TO NEXT BOUNDARY BIC (R3)+,R1 ;CLEAR EXCESSA$ BEQ 80$ ;IF EQ NO BLOCK TO RELEASE30$: ;REF LABELC.IIF DF R$$DER!P$$CTL!C$$RTK MOV R3,-(SP) ;SAVE ADDRESS OF LISTHEAD.40$: MOV R3,R2 ;SAVE ADDRESS OF CURRENT BLOCK( MOV (R2),R3 ;GET ADDRESS OF NEXT BLOCK BEQ 50$ ;IF EQ END OF CHAINN CMP R0,R3 ;BLOCK GO HERE?I BHIS 40$ ;IF HIS NO;)50$: MOV R3,(R0) ;ASSUME NO AGLOMERATION0 .IF DF P$$CTL/ CMP #$CRAVL,(SP) ;DEALLOCATION OF EXEC'S POOL?N' BNE 53$ ;IF NE NO, SKIP POOL TRACKINGN;+; ** W A R N I N G **3;R; SPM HOOKPOINT NUMBER 74.; ); DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;-+$SPH74==. ;SPM CHANGES THE INSTRUCTION ATV ;THE LOCATION OF THIS LABELB* ADD R1,@#$PRISZ ;COUNT SIZE IN POOL TOTAL 53$: ;  .ENDC ; DF P$$CTL- MOV R0,-(SP) ;CALCULATE ADDRESS OF NEW BLOCKN ADD R1,(SP) ;R .IF DF R$$DER' BCS 110$ ;IF CS, ILLEGAL DEALLOCATIONL3 CMP 2(SP),#$CRAVL ;DEALLOCATION IN EXECUTIVE POOL?E BNE 55$ ;IF NE NON2 CMP R0,#$POOL ;DEALLOCATION BEFORE FRONT OF LIST? BLO 120$ ;IF LOW, YESC0 CMP (SP),$EXSIZ ;DEALLOCATION PAST END OF POOL? BHI 130$ ;IF HIGH, YES55$: ;REFERENCE LABEL .IFTF ;R$$DER& CMP R3,(SP)+ ;EQUAL TO NEXT IN CHAIN? .IFT ;R$$DERE' BLO 90$ ;IF LO, DEALLOCATION OVERLAPS$ .IFTF ;R$$DER BNE 60$ ;IF NE NOO1 MOV (R3)+,(R0) ;MOVE LINK WORD TO BLOCK RELEASED ADD (R3),R1 ;MERGE TWO BLOCKSC160$: MOV R2,-(SP) ;SAVE ADDRESS OF PREVIOUS BLOCKV% MOV R0,(R2)+ ;ASSUME NO AGLOMERATION,/ ADD (R2),(SP) ;CALCULATE ADDRESS OF NEXT BLOCK1- CMP R0,(SP)+ ;EQUAL TO BLOCK BEING RELEASED?I .IFT ;R$$DERO BHIS 65$ ;IF HIS, NO OVERLAP7 CMP (SP),#$CRAVL ;DEALLOCATION IN EXECUTIVE CORE POOL?E0 BEQ 100$ ;IF EQ YES (ELSE NOT SURE OF OVERLAP)65$: ;REF LABEL .ENDC ;R$$DER BNE 70$ ;IF NE NO6 ADD (R2),R1 ;MERGE TWO BLOCKSM1 MOV (R0),-(R2) ;MOVE LINK WORD TO PREVIOUS BLOCKR% MOV R2,R0 ;SET NEW ADDRESS OF BLOCK -70$: MOV R1,2(R0) ;SET SIZE OF BLOCK RELEASEDM .IF DF P$$CTL0 CMP #$CRAVL,(SP) ;ALLOCATION IN EXEC CORE POOL?- BNE 75$ ;IF NE NO, SKIP DEALLOCATION CHECKS2 CMP $PRISZ,$PRIHL ;DID WE CROSS UPPER POOL LIMIT? BLOS 75$ ;IF LOS NOL8 MOV #PC.HIH!,R2 ;SET UP HIGH POOL CONDITION TST (SP)+ ;CLEAN STACK' BR $PLTRQ ;REQUEST POOL RECOVERY TASKB75$: .ENDC ;P$$CTL .IF DF C$$RTK, CMP #$CRAVL,(SP)+ ;ALLOCATION IN CORE POOL? BNE 80$ ;NOPE, EXITR: TST $CPPOL ;CPRSX COMMUNICATION DRIVER WAITING FOR POOL? BEQ 80$ ;NOPE, EXIT* CALL $CPRCV ;LET CPR DRIVER USE THE POOL .IFF ;C$$RTKP-.IIF DF P$$CTL!R$$DER TST (SP)+ ;CLEAN STACKK .ENDC ;C$$RTK80$: RETURN ;U .IF DF R$$DER$90$: TST R3 ;INSERT AT END OF LIST? BEQ 60$ ;IF EQ YES, OK5100$: BGCK$A BF.POL,BE.DDA,FATAL ;DOUBLE DEALLOCATIONR7110$: BGCK$A BF.POL,BE.SIZ,FATAL ;SIZE OF BLOCK INVALIDD>120$: BGCK$A BF.POL,BE.BAK,FATAL ;DEALLOCATED BLOCK BELOW POOL6130$: BGCK$A BF.POL,BE.POV,FATAL ;OVERLAPS END OF POOL .ENDC ;R$$DER .DSABL LSBP;+%; **-$PLTRQ-REQUEST POOL MONITOR TASKH;O;; THIS ROUTINE IS USED TO REQUEST THE EXECUTION OF THE POOLAC; MONITOR TASK, IF INSTALLED. THE FORMAT OF THE POOL TASK/EXECUTIVE0$; COMMUNICATIONS WORD IS AS FOLLOWS:;6:; $POLST CONTAINS CONDITION BITS INDICATING THE CUMULATIVE6; HISTORY OF THE POOL'S CONDITION SIN00V]`D`NCE THE LAST TIME6; THAT THE POOL MONITOR TASK CLEARED THEM. THESE BITS4; ARE SET BY THIS ROUTINE AND MAY BE CLEARED BY THE5; POOL MONITOR TASK. NOTE THAT MORE THAN ONE BIT MAYB'; BE SET IN THIS BYTE AT ANY ONE TIME.N@; $POLST+1 CONTAINS INHIBIT BITS INDICATING WHAT POOL CONDITIONS9; THE POOL MONITOR TASK IS CURRENTLY AWARE OF. A BIT SET :; IN THIS BYTE INDICATES TO THIS ROUTINE A POOL CONDITION6; THAT DOES NOT REQUIRE EXECUTION OF THE POOL MONITOR7; TASK. THESE BITS ARE ONLY MODIFIED BY THE POOL TASK. 5; GENERALLY, THERE IS NEVER MORE THAN ONE BIT SET IN ; THIS BYTE AT ANY GIVEN TIME.A;M=; THE CALLER OF THIS ROUTINE PROVIDES A BIT MASK INDICATING A A; POOL CONDITION THAT IT WISHES TO MAKE KNOWN TO THE POOL MONITORCD; TASK. THE GENERAL FORM OF THIS BIT MASK IS #>,A; WHERE 'XXX' DENOTES WHICH OF THE EIGHT POTENTIAL CONDITIONS THEE@; USER WISHES TO MAKE KNOWN TO THE POOL MONITOR TASK (BY STORINGB; THE PC.XXX BIT IN THE LOW BYTE OF $POLST). THE FOLLOWING ACTIONS ; CAN OCCUR:; =; 1) IF THE SPECIFIED LOW BYTE MASK BIT IS ALREADY SET IN THEY?; LOW BYTE OF $POLST, THEN THIS INDICATES THAT THIS ROUTINE HAS ?; BEEN CALLED MULTIPLE TIMES FOR THE SAME POOL CONDITION BEFORE >; THE POOL TASK COULD EXECUTE AND CLEAR THE BIT. IN THIS CASE,; THE ROUTINE RETURNS.;0=; 2) IF THE BIT IS NOT ALREADY SET IN THE LOW BYTE OF $POLST,I>; THEN THIS INDICATES THAT THE POOL PROGRAM MIGHT NOT BE AWARE>; OF THIS POOL CONDITION AND A SECOND CHECK MUST BE MADE USING>; THE HIGH BYTE OF $POLST. IF THE SPECIFIED HIGH BYTE MASK BIT8; IS ALREADY SET IN THE HIGH BYTE, THEN THE POOL TASK IS@; CURRENTLY AWARE OF THE CONDITION AND DOES NOT WISH TO EXECUTE.A; IF THE BIT IS NOT SET IN THE HIGH BYTE, THEN THE POOL CONDITIONC=; IS A NEW ONE AND THE POOL MONITOR TASK IS REQUESTED TO RUN.0; G; THIS INTERFACE IS FLEXIBLE ENOUGH TO ALLOW OTHER INTERFACE PROTOCOLS: ;I?; - ONE INHIBIT BIT ($POLST+1) COULD BE DEFINED TO 'COVER' MOREN=; THAN ONE CONDITION BIT ($POLST+0). FOR INSTANCE, $PLTRQ CANF@; BE CALLED WITH R2=403, WHERE THERE ARE TWO CONDITION BITS SET,.; BUT ONLY ONE INHIBIT BIT SPECIFIED FOR BOTH.;W=; - THERE NEED NOT BE A MIRROR-IMAGE RELATIONSHIP BETWEEN THET=; INHIBIT BITS AND THE CONDITION BITS. FOR VARYING CONDITIONSN@; AND STATES, VARIOUS COMBINATIONS OF THESE BITS CAN BE ENCODED.;T?; - NO INHIBIT BIT NEED BE SPECIFIED AT ALL. IN THIS CASE, EVENI@; IF THE POOL MONITOR TASK HAD SET THE CORRESPONDING INHIBIT BIT=; IN $POLST+1 FOR THE CONDITION ABOUT TO BE REPORTED, LEAVINGF?; THE HIGH BYTE OF R2 CLEAR WILL FORCE THE POOL MONITOR TASK TO,8; EXECUTE FOR THAT CONDITION REPORTED IN THE LOW BYTE OF=; R2 (UNLESS, OF COURSE, THAT BIT IS ALREADY SET IN $POLST+0,N<; INDICATING A MULTIPLE REQUEST). FOR INSTANCE, IF $PLTRQ IS<; CALLED WITH R2=1, THE POOL TASK MAY EXECUTE AND SET $POLST;; TO 400, THE INHIBIT BIT FOR POOL CONDITION '1'. IF $PLTRQS=; WERE THEN CALLED AGAIN WITH R2=1, THE POOL TASK WOULD AGAINI>; BE CALLED BECAUSE R2 DID NOT HAVE THE INHIBIT BIT SPECIFIED.8; THIS OPERATION FORCES THE POOL TASK TO RESPOND ANYWAY.;OC; THE REASON FOR SUCH FLEXIBILITY IS TO GENERALIZE THE INTERFACE TO F; BE USEFUL FOR A VARIETY OF CHORES. THE INTERFACE NEED NOT BE LIMITED; TO POOL STATUS REPORTING. ; ; INPUTS:F;L<; R2=POOL CONDITION BIT MASK (PC.XXX OR'ED WITH PC.XXX*400).;L ; OUTPUTS:;H;; IF NO BITS IN THE LOW BYTE OF R2 ARE SET IN $POLST AND NO ;; BITS IN THE HIGH BYTE OF R2 ARE SET IN $POLST+1, THEN THEE8; POOL TASK IS REQUESTED WITH THE REASON FOR THE REQUEST?; (PC.XXX) STORED IN THE LOW BYTE OF $POLST. OTHERWISE, RETURN.E;N; R0,R1 AND R3 ARE PRESERVED.E;- .ENABL LSBA$PLTRQ:: .IF DF P$$CTL6 BITB R2,$POLST ;ALREADY REQUESTED FOR THIS CONDITION?- BNE 20$ ;IF NE YES, AVOID MULTIPLE REQUESTS 0 BISB R2,$POLST ;INDICATE CURRENT POOL CONDITION' CLRB R2 ;CHECK POOL TASK INHIBIT BITSS5 BIT R2,$POLST ;REQUEST POOL TASK FOR THIS CONDITION?S1 BNE 20$ ;IF NE NO, TASK AWARE OF POOL CONDITIONH MOV R0,-(SP) ;SAVE R0, MOV $PTTCB,R0 ;POOL MONITOR TASK 00Ve`:`TADATADATADATADATADATADATADATADATAINSTALLED?% BEQ 10$ ;IF EQ NO, CAN'T REQUEST ITH MOV R1,-(SP) ;SAVE R1 MOV R3,-(SP) ;SAVE R3, CALL $EXRQN ;REQUEST THE POOL MONITOR TASK MOV (SP)+,R3 ;RESTORE R3A MOV (SP)+,R1 ;RESTORE R1T10$: MOV (SP)+,R0 ;RESTORE R0I20$: .ENDC ; DF P$$CTL RETURN ;D .DSABL LSBO;+4; **-$ALSEC-ALLOCATE CORE BUFFER FROM SECONDARY POOL=; **-$ALSC1-ALLOCATE 32 WORD BLOCKS OF POOL - ALTERNATE ENTRY ; ;NJ; THIS ROUTINE IS CALLED TO ALLOCATE A BLOCK FROM THE SECONDARY POOL. THEA; ALLOCATION ALGORITHM IS FIRST FIT (SAME AS $ALOCB). BLOCKS AREJ; ALLOCATED IN UNITS OF 32 WORDS, AND A BLOCK WILL ALWAYS START ON A 32 WD*; BOUNDRY TO FACILITATE MAPPING THE BLOCK.;M ; INPUTS: ;S5; R1=SIZE OF THE BUFFER TO ALLOCATE IN 32 WORD BLOCKS;0; R2=ADDRESS OF POOL LISTHEAD IF ENTRY AT $ALSC1;$ ; OUTPUTS:;C=; C=1 IF INSUFFICIENT CORE IS AVAILABLE TO ALLOCATE THE BLOCKO ; R0=-1 ;L&; C=0 IF THE ALLOCATION WAS SUCCESSFUL.; R0=ADDRESS OF BLOCK (TO BE USED IN AN APR)2; R1=SIZE OF BLOCK JUST ALLOCATED IN 32 WD UNITS;S"; R3, R4, R5 PRESERVED ACROSS CALL;U;- $ALSEC::  L .IF DF P$$OOL RE .IIF DF C$$SC1 MOV #$POLHD,R2 ;PUT $POLHD WHERE ROUTINE LOOKS FOR IT $ALSC1:: .ENABL LSBF  SAVNR ;SAVE R4, R5B, .IF DF C$$SC1 ;IF ALTERNATE SECONDARY POOL A MOV R3,-(SP) ;AND R3C MOV R2,R3 ;MOVE THE LISTHEAD .ENDC ;C$$SC1* MOV #-1,R0 ;ASSUME REQUESTED LENGTH IS 03 MOV #KISAR6,R4 ;POINT TO APR USED FOR POOL MAPPINGE% MOV (R4),-(SP) ;SAVE CURRENT MAPPINGJ5 MOV #140000,R2 ;VIRTUAL ADDRESS OF MAPPED POOL BLOCKD0 CLR R5 ;PREVIOUS BLOCK IN LIST IS THE LISTHEAD TST R1 ;IS LENGTH ZERO?C SEC ;ASSUME IT IS BEQ 50$ ;IF EQ YES< .IIF DF C$$SC1 MOV (R3),(R4) ;MAP FIRST FREE BLOCK IN POOL> .IIF NDF C$$SC1 MOV $POLHD,(R4) ;MAP FIRST FREE BLOCK IN POOL BR 20$R110$: MOV (R4),R5 ;SAVE CURRENT BLOCK AS PREVIOUSS! MOV (R2),(R4) ;MAP TO NEXT BLOCKD!20$: BEQ 50$ ;IF EQ, END OF LISTT# CMP 2(R2),R1 ;IS BLOCK BIG ENOUGH?( BLO 10$ ;IF LO NON BEQ 30$ ;IF EQ YES, EXACT FITU. MOV (R2)+,-(SP) ;SAVE LINK TO NEXT POOL BLOCK MOV (R2),-(SP) ;SAVE SIZE' SUB R1,(SP) ;CALCULATE REMAINING SIZE 0 ADD R1,(R4) ;MAP TO REMAINING PORTION OF BLOCK8 MOV (SP)+,(R2) ;GET REMAINING SIZE OF UNALLOCATED BLOCK* MOV (SP),-(R2) ;INSERT LINK TO NEXT BLOCK% MOV (R4),(SP) ;SAVE ADDRESS OF BLOCK,0 SUB R1,(R4) ;MAP BACK TO BLOCK TO BE ALLOCATED* MOV (SP)+,(R2) ;SAVE POINTER TO NEW BLOCK-30$: MOV (R4),R0 ;ADDRESS OF ALLOCATED BLOCKU .IFDF C$$SC1I( CMP R3,#$POLHD ;IS THIS SECONDARY POOL?# CLC ;MAKE SURE CARRY STAYS CLEARO+ BNE 35$ ;NO, LEAVE TOTAL FREE SPACE ALONE, .ENDC ;C$$SC19 SUB R1,$SECFR ;SUBTRACT AMOUNT ALLOCATED FROM TOTAL FREEK335$: MOV (R2),-(SP) ;GET ADDRESS OF NEXT FREE BLOCKB$ MOV R5,(R4) ;MAP TO PREVIOUS BLOCK0 BEQ 40$ ;IF EQ, PREVIOUS BLOCK IS THE LISTHEAD) MOV (SP)+,(R2) ;UNLINK ALLOCATED SECTIONL BR 50$M40$:: .IIF DF C$$SC1 MOV (SP)+,(R3) ;UNLINK ALLOCATED SECTION; .IIF NDF C$$SC1 MOV (SP)+,$POLHD ;UNLINK ALLOCATED SECTIONI450$: MOV (SP)+,(R4) ;RESTORE ORIGINAL KISAR6 MAPPING= .IIF DF C$$SC1 MOV (SP)+,R3 ;RESTORE ORIGINAL CONTENTS OF R3; 60$: RETURNB ,;+F; **-$ALSPK-ALLOCATE A RECEIVE BY REFERENCE PACKET FROM SECONDARY POOL5; **-$ALVPK-ALLOCATE A PACKET FROM THE SECONDARY POOLV;S<; THIS ROUTINE IS CALLED TO ALLOCATE A SECONDARY POOL BLOCK.%; THE PACKET IS MAPPED THROUGH APR 5.; ; INPUTS:;I2; R1=SIZE OF BLOCK IN UNITS OF 32. WORDS ($ALVPK).; ; OUTPUTS:;1$; C=0 IF A BLOCK HAS BEEN ALLOCATED.1; R0=120000 (THE PACKET IS MAPPED THROUGH APR5).A&; KISAR5 IS SET UP TO MAP THE PACKET.>; C=1 IF INSUFFICIENT CORE IS AVAILABLE TO ALLOCATE THE BLOCK.); DIRECTIVE STATUS OF D.RS1 IS RETURNED.T;O;- D5$ALSPK::MOV #/100,R1 ;GET SIZE TO ALLOCATEA&$ALVBK::CALL $ALSEC ;ALLOCATE A BLOCK# BCS 65$ ;IF CS ALLOCATION FAILURE + MOV R0,KISAR5 ;MAP THE PACKET THROUGH APR5N2 MOV #120000,R0 ;POINT TO FIRST WORD OF THE PACKET RETURN ;RETURN WITH C=0%65$: DRSTS D.RS1 ;ALLOCATION FAILURE. 00Vm`D`N;+D; **-$DESPK-DEALLOCATE RECEIVE BY REFERENCE PACKET TO SECONDARY POOL;TD; THIS ROUTINE IS CALLED TO DEALLOCATE A RECEIVE BY REFERENCE PACKET; TO THE SECONDARY POOL.;D ; INPUTS:U;D;; R0=ADDRESS OF PACKET TO BE DEALLOCATED. THIS MUST BE THEA<; APR VALUE TO MAP THE FIRST 32. WORD SEGMENT OF THE BLOCK.;S ; OUTPUTS:;L; NONE.V;,;- ; .IFTF K$DESPK:: R .IFTV 20 MOV #/100,R1 ;GET SIZE TO DEALLOCATE ;+3; **-$DESEC-DEALLOCATE CORE BLOCK IN SECONDARY POOL;; **-$DESC1-DEALLOCATE 32-WORD CORE BLOCK INTO PRIVATE POOL ;OH; THIS ROUTINE IS CALLED TO DEALLOCATE A SECONDARY POOL BLOCK. THE BLOCKH; IS INSERTED INTO THE FREE BLOCK CHAIN BY CORE ADDRESS. IF AN ADJACENT:; BLOCK IS CURRENTLY FREE, THEN THE TWO BLOCKS ARE MERGED.;A ; INPUTS: ; ?; R0=ADDRESS OF CORE BLOCK TO BE DEALLOCATED. THIS MUST BE THE:; APR VALUE TO MAP THE FIRST 32 WORD SEGMENT OF THE BLOCK,; R1=SIZE OF THE BLOCK IN UNITS OF 32 WORDS.0; R2=ADDRESS OF POOL LISTHEAD IF ENTRY AT $DESC1;$ ; OUTPUTS:;E>; THE CORE BLOCK IS MERGED INTO THE FREE CORE CHAIN BY ADDRESS2; AND MERGED WITH ANY BORDERING BLOCKS IF POSSIBLE; ; R3, R4, R5 PRESERVED;L;- I .IFTF D$DESEC::? .IIF DF C$$SC1 MOV #$POLHD,R2 ;PUT $POLHD ADDRESS WHERE NEEDEDM$DESC1::  .IFT   TST R1 ;IS LENGTH ZERO BEQ 140$ ;IF EQ YEST SAVNR ;SAVE R4, R5R MOV R3,-(SP) ;SAVE R3; .IIF DF C$$SC1 MOV R2,-(SP) ;PUT THE LISTHEAD ON THE STACK  3 .IF NDF X$$SECD, .IF DF C$$SC1 ;IF ALTERNATE SECONDARY POOL/ CMP (SP),#$POLHD ;IS THIS REAL SECONDARY POOL?R4 BNE 69$ ;NO, DON'T CHECK FOR IT BEING IN PARTITION .ENDC ;C$$SC1 MOV $PLPAR,R3 ;LOCATE PARTITION+ MOV P.REL(R3),R4 ;GET ITS STARTING ADDRESS * CMP R4,R0 ;DOES BLOCK START IN PARTITION BHI 160$ ;IF HIGH, NO 0 ADD P.SIZE(R3),R4 ;GET TOP ADDRESS IN PARTITION T .IFTF% ADD R1,R0 ;GET TOP ADDRESS OF BLOCK+ BCS 150$ ;CS- OVERFLOW....BAD DEALLOC LEND .IFTT( CMP R4,R0 ;DOES BLOCK END IN PARTITION BLO 170$ ;IF LOW, NO .ENDC C* SUB R1,R0 ;RESTORE BASE ADDRESS OF BLOCKI69$: .IIF DF C$$SC1 MOV @(SP),R3 ;GET THE ADDRESS OF THE FIRST FREE BLOCKG .IIF NDF C$$SC1 MOV $POLHD,R3 ;GET THE ADDRESS OF THE FIRST FREE BLOCKR- MOV #140000,R4 ;GET VIRTUAL ADDRESS OF BLOCK* MOV #KISAR6,R5 ;POINT TO MAPPING REGISTER% MOV (R5),-(SP) ;SAVE CURRENT MAPPINGF3 CLR -(SP) ;WORD FOR STORING TOP OF PREVIOUS BLOCK01 CLR R2 ;INITIAL PREV. BLOCK IN LIST IS LISTHEADC&70$: MOV R3,(R5) ;MAP NEXT FREE BLOCK BEQ 95$ ;IF EQ, END OF LISTC/ CMP R0,R3 ;DOES BLOCK GO BEFORE CURRENT BLOCK BLO 80$ ;IF LO YES BEQ 180$3+ MOV R3,(SP) ;GET ADDRESS OF CURRENT BLOCK.* ADD 2(R4),(SP) ;CALCULATE ITS TOP ADDRESS0 MOV R3,R2 ;STORE ADDRESS AS THE PREVIOUS BLOCK/ MOV (R4),R3 ;POINT TO NEXT BLOCK IN FREE LISTT BR 70$ ;580$: ADD R1,R0 ;GET TOP ADDRESS IN DEALLOCATED BLOCK-3 CMP R0,R3 ;CAN IT BE COMBINED WITH THE NEXT BLOCKR BNE 90$ ;IF NE NOC. MOV (R4)+,-(SP) ;SAVE LINK TO NEXT FREE BLOCK MOV (R4),-(SP) ;SAVE LENGTH2 SUB R1,R0 ;FIND START OF BLOCK BEING DEALLOCATED MOV R0,(R5) ;MAP IT$, MOV R1,(R4) ;INSERT TO LENGTH OF THE BLOCK) ADD (SP)+,(R4) ;ADD LENGTH OF NEXT BLOCKC) MOV (SP)+,-(R4) ;LINK TO NEXT FREE BLOCKE BR 100$890$: BHI 180$ ;IF HIGH, DEALLOCATED BLOCK OVERLAPS NEXT2 SUB R1,R0 ;GET BASE ADDRESS OF DEALLOCATED BLOCK.95$: MOV R0,(R5) ;MAP BLOCK BEING DEALLOCATED5 MOV R3,(R4) ;INSERT LINK TO NEXT BLOCK IN FREE LISTC MOV R1,2(R4) ;INSERT LENGTH;100$: CMP (SP)+,R0 ;CAN BLOCK BE MERGED WITH PREVIOUS BLOCK  BNE 110$ ;IF NE NO. MOV (R4)+,-(SP) ;SAVE LINK TO NEXT FREE BLOCK MOV (R4),-(SP) ;AND LENGTHT. MOV R2,(R5) ;MAP PREVIOUS BLOCK IN FREE LIST4 ADD (SP)+,(R4) ;ADD LENGTH TO WHAT IS ALREADY THERE$ MOV (SP)+,-(R4) ;LINK TO NEXT BLOCK BR 130$5110$: BHI 180$ ;IF HI, BLOCK OVERLAPS PREVIOUS BLOCKC! MOV R2,(R5) ;MAP PREVIOUS BLOCKB, BNE 120$ ;IF NE, THERE IS A PREVIOUS BLOCKF .IIF DF C$$SC1 MOV 2(SP),R4 ;USE THE LIST HEAD AS THE PREVIOUS BLOCKH .IIF NDF C$$SC1 MOV #$POLHD,R4 ;USE00Vu`w`TADATADATADATADATADATADATADATADATA THE LIST HEAD AS THE PREVIOUS BLOCK;120$: MOV R0,(R4) ;LINK BLOCK BEING DEALLOCATED INTO CHAIN 130$:N .IF DF C$$SC1; CMP 2(SP),#$POLHD ;WAS THIS A SECONDARY POOL DEALLOCATION?T BNE 135$ ;NO, JUST CONTINUEV .ENDC ;C$$SC14 ADD R1,$SECFR ;ADD AMOUNT DEALLOCATED TO TOTAL FREE.135$: MOV (SP)+,(R5) ;RESTORE ORIGINAL MAPPING- .IIF DF C$$SC1 TST (SP)+ ;POP $POLHD ADDRESSO MOV (SP)+,R3 ;RESTORE R3 140$: RETURN7150$: BGCK$A BF.POL,BE.SIZ,FATAL ;SIZE OF BLOCK INVALID1>160$: BGCK$A BF.POL,BE.BAK,FATAL ;DEALLOCATED BLOCK BELOW POOL6170$: BGCK$A BF.POL,BE.POV,FATAL ;OVERLAPS END OF POOL5180$: BGCK$A BF.POL,BE.DDA,FATAL ;DOUBLE DEALLOCATIONS S .DSABL LSB  L .ENDC  E .ENDO, JUST CONTINUEV .ENDC ;C$$SC14 ADD R1,$SECFR ;ADD AMOUNT DEALLOCATED TO TOTAL FREE.135$: MOV (SP)+,(R5) ;RESTORE ORIGINAL MAPPING- .IIF DF C$$SC1 TST (SP)+ ;POP $POLHD ADDRESSO MOV (SP)+,R3 ;RESTORE R3 140$: RETURN7150$: BGCK$A BF.POL,BE.SIZ,FATAL ;SIZE OF BLOCK INVALID1>160$: BGCK$A BF.PO .IIF NDF S$$YDF , .NLIST .TITLE RSXMCc .IDENT /11.30/t;s"; COPYRIGHT (c) 1976, 1985 BY(; DIGITAL EQUIPMENT CORPORATION, MAYNARD'; MASSACHUSETTS. ALL RIGHTS RESERVED.b;TA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED A; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSEeA; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THISsA; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED ORtA; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO ANDF2; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.; A; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTAA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R; Version: 11.30; Date: 08-AUG-86 10:19:15 ;I; C; The following symbols represent options for which the conditionalOD; code has been removed from the Executive. The symbols are definedB; here only for the use of privileged tasks, common utilities, and; user written tasks.I;AA$$CHK=0 ; Address checkingA$$CPS=0 ; ACP support A$$NSI=0 ; ANSI magtape support,A$$PRI=0 ; Alter Priority directive (ALTP$)A$$TRP=0 ; AST support !C$$CKP=0 ; Checkpointing supportU$D$$ISK=0 ; Nonresident task support/D$$SHF=0 ; Automatic dynamic memory compactionoD$$WCK=0 ; Writecheck support)D$$YNC=0 ; Dynamic checkpoint allocatione-D$$YNM=0 ; Dynamic memory allocation supportd#;E$$PER=0 ; Log parity error trapsi(F$$LVL=1 ; File structure level support7G$$DVI=0 ; Get device info directive supported (GDVI$)C6G$$TPP=0 ; Get Partition Parameters directive (GPRT$)1G$$TTK=0 ; Get Task Parameters directive (GTSK$)P0I$$RAR=0 ; Install, request, and remove on exitI$$RDN=0 ; I/O rundownd-L$$ASG=0 ; Logical device assignment support #L$$DRV=0 ; Loadable driver supportc*L$$LDR=0 ; Task loader as a separate task#M$$FCS=0 ; FCS/File system supporto%M$$MGE=0 ; Memory management supportgBM$$MUP=0 ; Multi-user protection - requires T$$BTW,T$$RNE,T$$RST,; ; and P$$OFF 1P$$GMX=0 ; Get mapping context - requires P$$LASt.P$$LAS=0 ; Program logical address extensions,P$$OFF=0 ; Parent/Offspring tasking supportP$$OOL=0 ; Secondary pool+P$$P45=0 ; Rotating pattern in data lightsG7P$$SRF=0 ; Send/Receive by reference - requires P$$LASd'R$$DSP=0 ; Executive level dispatchinga#R$$EXV=0 ; Extend Executive to 20KC#R$$SND=0 ; Receive/Send directivese6T$$KMG=0 ; Task termination/device not ready messages; L; The following symbols are statically defined for all RSX-11M-PLUS systems.; They should not be changed.;L C$$INT=0 ; Connect to interrupt6C$$PCR=0 ; Checkpoint Common Region directive (CPCR$)!D$$IAG=0 ; User mode diagnostics0);E$$DVC=0 ; Device error logging supportF";E$$LOG=0 ; Error logging support-;E$$NSI=0 ; Nonsense interrupt error loggingp)E$$XPR=0 ; Extend Task directive (E00}`D`NXTK$)0+G$$GEF=0 ; Group global event flag supportK2H$$FME=16. ; Number of fast map extension entries.H$$FMS=4 ; Size of a fast map extension entry:H$$FMX=2 ; Size of a fast map extension in 32-word blocks*L$$NAM=0 ; Named directory support in DCL3M$$CRB=84. ; Number of characters in an MCR buffer)"M$$CRX=0 ; External MCR functionsM$$OVR=0 ; Overlayed MCR (M$$XLN=256. ; Total length of MCR lines#N$$DIR=0 ; Named directory supporte0;O$$LAP=0 ; Overlapped device operation support3P$$MAX=256. ; Maximum size of send/receive packetsuP$$MON=0 ; SPM-11 support(;P$$RFL=0 ; Power fail recovery support#R$$CON=0 ; Reconfiguration support:R$$EIS=0 ; EIS instructions - required for DECNET support/R$$FEA=0 ; Test Feature Mask directive (FEAT$)B0R$$GIN=0 ; General Information directive (GIN$);R$$LKL=1 ; RMS record lockingR$$MPL=0 ; RSX-11M-PLUS systemN5R$$11M=0 ; RSX-11M system (as opposed to 11D or IAS)i$;S$$ECC=0 ; Shared Exec ECC support&S$$MAP=0 ; SMAP$ and MVTS$ directives#;S$$OPT=0 ; Disk seek optimizationk)U$$UMD=0 ; User mode diagnostics support 1U$$UMR=0 ; UMR support (as separate from M$$EXT)g;tG; The following symbols are for terminal driver options that are always#; included in RSX-11M-PLUS systems.v;F4T$$BTW=0 ; Breakthrough write - required for M$$MUP!T$$CCA=0 ; Unsolicited input AST"T$$CON=0 ; Serial console supportT$$CTR=0 ; Control-RtT$$CUP=0 ; Cursor positioningT$$EIO=0 ; Extended I/OT$$ESC=0 ; Escape sequences(T$$GMC=0 ; Get terminal characteristics'T$$GTS=0 ; Get terminal driver supportiT$$LTH=0 ; LAT supportR0T$$LWC=0 ; Settable case conversion (lowercase)(T$$OVL=0 ; Overlaid driver (uses TTEXT)%T$$RED=0 ; Hard read error detectiond3T$$RNE=0 ; Read with no echo - required for M$$MUPrT$$RPR=0 ; Read after promptP>T$$RST=0 ; Read with special terminator - required for M$$MUPT$$RUB=0 ; CRT rubout(T$$SMC=0 ; Set terminal characteristics,T$$TSA=0 ; Network Command terminal supportT$$USP=0 ; User-written ports;cJ; The following symbols define the first free UMR for use by user drivers.N; If the system includes DH11 or DHU11 terminal controllers, these symbols are; redefined later in this file.a;r2N$$UMR=5*4. ; Number of statically allocated UMRs*U$$MRN=170224 ; Address of first free UMR@U$$MHI=0 ; High 2 bits of 18 bit UNIBUS address in bits 4 and 55U$$MLO=120000 ; Low 16 bits of 18 bit UNIBUS addressn;cL; The following symbols are for options which are always included by SYSGEN.J; A knowledgeable user could alter these symbols at his own risk to tailor ; his system.r;-C$$ORE=512. ; Size of dynamic storage region -;E$$ICM=0 ; ERRLOG: inhibit console messagese-;E$$MOU=0 ; ERRLOG: log mounts and dismountss-;E$$SEF=0 ; ERRLOG: use special file formatse4F$$NIM=0 ; Deleted disk image of fixed task support0G$$TSS=0 ; Get Sense Switches directive (GSSW$)&N$$MOV=33. ; Size of BLXIO move table(P$$CTL=0 ; Pool monitoring task support.Q$$OPT=5 ; Number of pre-allocate I/O packetsAR$$IIC=0 ; Internal I/O completion - required for T$$TSA, D$$CHE=S$$HFC=30. ; Minimum time interval between shuffler requestso+S$$WRG=0 ; Console switch register presenta*S$$WST=0 ; Switch State directive (SWST$)7;S2.NRD=20000 ; Enable new power recovery for DM/DB/DR;NK; The following symbols are the initial values for system tuning parametersh; that are reset in SYSVMR.3; BR$$NDC=6 ; Round robin sched: Clock ticks per scheduling interval@R$$NDL=1 ; Round robin sched: Lowest priority class to considerDR$$NDH=150. ; Round robin sched: Highest priority class to consider/S$$WPC=30. ; Clock ticks per swapping intervalWS$$WPR=5 ; Swapping priority $P$$HIL=1600. ; PMT: High pool limit"P$$LOL=600. ; PMT: Low pool limitDP$$FRS=200. ; PMT: Lowest permissible size of largest pool fragment2P$$BPR=51. ; PMT: Pool base priority task control;tE; The following symbols are those that are generated by the "Choosingp4; Executive options" questions answered by the user.;w; )R$00`w`TADATADATADATADATADATADATADATADATA$TPR="73 ; Processor type (for NETGEN)R#S$$EXC=0 ; Full-functionality Execa%K$$DAS=0 ; Kernel data space supportk#U$$DAS=0 ; User data space support D$$PAR=0 ; Directive partitions#X$$HDR=0 ; External header support; L$$GCL=0 ; Logical name support+S$$LIB=0 ; Supervisor-mode library supportoF$$MAP=0 ; Fast map facilityP&I$$CSZ=80. ; ICB pool size (in words)3M$$NET=1400.+31. ; DECnet support - requires S$$WSThS$$NM1="CP ; System namep S$$NM2="R ;s S$$NM3=" ;e;S$$HDW=0 ; Shadow recordingr0;D$$CHE=0 ; Disk data caching - requires R$$IIC(A$$CNT=0 ; Accounting - requires P$$OOL-;Q$$MGR=0 ; Queue Manager included at SYSGENr#A$$CLI=16. ; Alternate CLI support C$$CTC=0 ; CTRL/C abort support0P$$WND=0 ; Secondary pool FCP - requires P$$OOL#F$$DVN=0 ; Decimal version numbersM$V$$TRM=0 ; Virtual terminal support+V$$TLD=120. ; Default VT: unit buffer size.+V$$TLM=184. ; Maximum VT: unit buffer size"GT$$ACD=0 ; Ancillary control driver support in TTDRV - requires T$$EIOe+T$$UTO=30. ; Time-out on unsolicited inputq)T$$COM=0 ; Separate terminal buffer pooli%;X$$DBT=0 ; Executive debugging tooli-R$$DER=0 ; CORAL deallocation error checking /;C$$RSH=177564 ; Crash notification device CSRD;C$$CDA=2 ; Crash dumps on DK/C$$RUN=0 ; Logical unit number of crash device5S$$YSZ=256.*32. ; Size of phys. memory in 32W blocksf#M$$EXT=0 ; Extended memory support4 P$$D70=0 ; 11/70 parity support,F$$LPP=0 ; Floating point processor supportH$$RTZ=60. ; Line frequency'K$$CSR=177546 ; Line clock CSR addressu'K$$CNT=177546 ; Count register addresspK$$TPS=60. ; Ticks per secondK$$LDC=1 ; Load count value$K$$IEN=115 ; Interrupt enable value;7G; The following symbols are defined for all RSX-11M-PLUS systems except$&; pregennerated non I/D-space systems.;c!P$$RTY=0 ; Parity memory support.;mE; The following symbols are those that are generated by the "Choosing1;; Peripheral Configuration" questions answered by the user.o;(R$$UDA=1. ; MSCP-class disk controllersLD$DU=0 ; Loadable DUDRVDU$C0=4 ; DUA command ringseDU$R0=4 ; DUA response rings;LD$CO=0 ; Loadable CODRV&D$$L11=1 ; DL11/DLV11 line interfacesLD$TT=0 ; Loadable TTDRVN$$LDV=1 ; Null deviceoLD$NL=0 ; Loadable NLDRVLD$VT=0 ; Loadable VTDRVLD$RD=0 ; Loadable RDDRVLD$XX=0 ; Loadable XXDRVLD$KX=0 ; Loadable KXDRV+V$$CTR=500 ; Address of highest vector + 4s;1G; This macro provides the linkage between the last CTB in SYSTB and theAH; first CTB in the user-supplied resident data bases. Invoke this macroD; in the first resident data base's CTB just before the L.LNK field.;e .MACRO CTB1"$CTB1:: ; First user-supplied CTB .ENDM;o?; *************** START OF CPR SPECIFIC CONDITIONALS **********V;D?; THIS SECTION CONTAINS CONDITIONAL SYMBOLS DEFINED FOR THE CPR ; SYSTEM ONLY.;KK$$TP0=175000 ; TPR03C$$RSH=K$$TP0 ; CRASH NOTIFICATION CSR (NOT USED)s'C$$CDA=20 ; CRASH ON KXJ IS SUPPORTEDa C$$RMT=0 ; REMOTE HOST SUPPORT"C$$KXJ=0 ; KXJ PROCESSOR SUPPORT$C$$XDJ=0 ; XDT ON KXJ IS SUPPORTEDC$$DFB=0 ; DEFERRED BINDINGuC$$RTB=0 ; RUN TIME BINDING-C$$ODB=0 ; CANNOT OVERRIDE DEFERRED BINDINGB!C$$RTK=0 ; REMOTE TASK SERVICESR!C$$NSY=0 ; NO LOCAL SYSTEM DISK*C$$NCO=0 ; NO LOCAL CONSOLEA%C$$RDR=0 ; REMOTE DIRECTORY STORAGE C$$RLG=0 ; REMOTE LOGICALS.C$$SC1=0 ; ALTERNATE SECONDARY POOL ROUTINES"C$$LDR=0 ; REMOTE LOADER/OVERLAY)R$$CPR=0 ; MAKE SYSTEM NAME VAX-CPR/RSX0+G$$DVI=0 ; SUPPORT FOR THE GDVI DIRECTIVEO;S?; *************** END OF CPR SPECIFIC CONDITIONALS ************F;E;I;N ; EXEC MACROS;;N;M/; ASSUME MACRO FOR CHECKING SYMBOL DEPENDENCIES ;D B .MACRO ASSUME A,B=0..IIF NE - .ERROR ;EXPRESSIONS NOT EQUAL .ENDM 0;;; CALL SUBROUTINE;R .MACRO CALL SUBR ARG  .IF IDN <$INTSV>, JSR R5,$INTSV .WORD ^C&PR7 .IFFA .IF IDN <$SAVNR>, JSR R5,$SAVNR .IFFL .IF IDN <$SWSTK>, EMT 376 .WORD ARG .IFF0 JSR PC,SUBR00`D`N .ENDC .ENDC .ENDC .ENDM;*!; CALL AND RETURN FROM SUBROUTINEO;S .MACRO CALLR SUBR JMP SUBRC .ENDM;; CRASH SYSTEM;F .MACRO CRASHL IOT .ENDM; ; SUPERVISOR MODE SUPPORT MACROS;- .MACRO MFPD$ XE .IF DF S$$LIB!U$$DASM MFPD X .IFFS MFPI X .ENDC .ENDM .MACRO MTPD$ XF .IF DF S$$LIB!U$$DASJ MTPD XT .IFFO MTPI X> .ENDC .ENDM;N*; DIRECTIVE REGISTER SAVE AND SET PRIORITY;I .MACRO DIRSV$ JSR R5,$DIRSV .ENDM;0; SET DIRECTIVE STATUS;N .MACRO DRSTS VALUE TRAP VALUER .ENDM;B;; INTERRUPT SAVE GENERATION MACRO FOR ERROR LOGGING DEVICES;R ) .MACRO INTSE$ DEV,PRI,NCTRLR,PSWSV,UCBSV $'DEV'INT::V .IF NDF LD$'DEV JSR R5,$INTSE .WORD ^C&PR7 .ENDC GTUCB$ UCBSV,NCTRLR,DEV+ MOV U.SCB(R5),R4 ;;;GET OWNERS SCB ADDRESSF .IF DF VC$'DEV'4 BIC #S2.ACT,S.VST2(R4) ;;;INDICATE I/O IS FINISHED RST21=.-2V* MOV S.VKRB(R4),R4 ;;;RETRIEVE KRB ADDRESS RKRB1=.-2J .IFFD3 BIC #S2.ACT,S.ST2(R4) ;;;INDICATE I/O IS FINISHEDA) MOV S.KRB(R4),R4 ;;;RETRIEVE KRB ADDRESSB .ENDC/ MOVB K.CON(R4),R4 ;;;RETRIEVE CONTROLLER INDEXI .ENDM ;A9; INTERRUPT SAVE GENERATION FOR NON-ERROR LOGGING DEVICESN;L) .MACRO INTSV$ DEV,PRI,NCTRLR,PSWSV,UCBSV. .IF NDF LD$'DEV JSR R5,$INTSV .WORD ^C&PR7 .ENDC GTUCB$ UCBSV,NCTRLR,DEV .ENDM;25; GENERATE CODE TO LOAD UCB ADDRESS INTO R5 -- CALLED-0; ONLY BY INTSE$, INTSV$, AND TTSET$ (IN TTDRV).;B .MACRO GTUCB$ UCBSV,NCTRLR,DEVR .IF NB / .IF GT NCTRLR-1 MOV UCBSV(R4),R5R .IFF MOV UCBSV,R5. .ENDC .IFFO .IF DF LD$'DEVE3 MOV 'DEV'CTB,R5 ;;;GET ADDRESS OF KRB TABLE IN CTBA# ADD R4,R5 ;;;ADD CONTROLLER INDEXE) MOV (R5),R5 ;;;GET KRB ADDRESS FROM CTB, .IFFC1 MOV $'DEV'CTB(R4),R5 ;;;GET KRB ADDRESS FROM CTBR .ENDC0 MOV K.OWN(R5),R5 ;;;RETRIEVE OWNERS UCB ADDRESS .ENDC .ENDM L  ;R5; GET I/O PACKET MACRO -- AUTOMATE UNIT DETERMINATIONT;$ N( .MACRO GTPKT$ DEV,NCTRLR,ADDR,UCBSV,SUC .IF DF VC$'DEV' CALL @GTPKT .IFFR CALL $GTPKT .ENDC .IF B U BCC 65535$N RETURNO65535$:  .IFFE BCS ADDR' .ENDC .IF B  $$$=0 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN ,
$$$=1 .IF B .IF EQ $$$/ MOV R5,S.OWN(R4)U .ENDC .ENDC .IFFO .IF GT NCTRLR-1 MOV R5,UCBSV(R3), .IFFB MOV R5,UCBSV  .ENDC .ENDC .ENDM F  L;G+; GENERATE THE DEVICE DISPATCH TABLE -- DDTR;R 1 .MACRO DDT$ DEV,NCTRLR,INY,INX,UCBSV,NEW,BUF,OPT> .IF NB  .WORD 'DEV'CHK$ .ENDC .IF NB > .WORD 'DEV'DEA  .IFFD .IF NB , .WORD 1 ;ENTRY SHOULD NOT BE USED - CRASH .ENDC .ENDC .ENABL LSB1 .IF B $'DEV'TBL::.WORD DEV'INI .IFFD$'DEV'TBL::.WORD DEV'INX .ENDC .WORD DEV'CAN .WORD DEV'OUT .IF B .WORD 65533$R .WORD 0 .WORD 65531$. .IFFM .WORD DEV'PWF .WORD DEV'KRB .WORD DEV'UCB .ENDC .IF DIF ,P .ASCII /DEV/D .IF B  .WORD $'DEV'INT .IFF, .IRP X,U .WORD $'DEV''XO .ENDM .ENDC .WORD 0 .IF DF LD$'DEVF'DEV'CTB: .WORD 0  .IFFD $$$=0 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IIF IDN , $$$=1 .IF EQ $$$N'DEV'CTB: .WORD $'DEV'CTBE .IFFO'DEV'CTB: .WORD $RHCTB .ENDC .ENDC .ENDC .IF DF LD$'DEVO$'DEV'TBE::.WORD 0 .ENDC .IF NB <UCBSV: .BLKW NCTRLR  .ENDC .IF B 65531$: BITB #UC.PWF,U.CTL(R5) BEQ 65532$O65533$: BCS 65532$ JMP DEV'PWF65532$: RETURN .ENDC .DSABL LSBR .ENDM;$; PROCESSOR STATUS READ/WRITE1;. .MACRO MFPS DST MOVB @#PS,DST .ENDM .MACRO MTPS SRC .IF IDN <#0>,. CLRB @#PS .IFF$ MOVB SRC,@#PS .ENDC .ENDM . E;$'; MULTIPROCESSOR LOCK AND UNLOCK MACROSD;C  R# .MACRO LOCK$ ADDR,TYPE,?LAB1,?LAB2F$$$=0'00``TADATADATADATADATADATADATADATADATA .IF IDN ,$$$=1C .IF DF M$$PRO MOV #'ADDR,-(SP)T CALL $MLOCK .ENDC .ENDC $ .IF IDN ,$$$=16 .IF DF M$$PROLAB1: ASRB ADDRD BCC LAB13 CACHE$ BYPASS .IF DF L$$DBG .NTYPE TMP,ADDR .IF EQ TMP-67 TSTB ADDR+1 .IFF .IF EQ TMP&70-10M TSTB 1'ADDR .IFF .IF EQ TMP&70-60. TSTB 1+ADDR .IFFC1 .ERROR ;INCORRECT ADDRESSING MODE FOR LOCK BLOCK. .ENDC .ENDC .ENDC BMI LAB2  CRASHLAB2: .IF EQ TMP-67 MOVB $PROCN,ADDR+1L .IFFB .IF EQ TMP&70-10N MOVB $PROCN,1'ADDRC .IFFD .IF EQ TMP&70-60D MOVB $PROCN,1+ADDRK .IFFC+ .ERROR ;INCORRECT ADDRESSING MODE IN LOCK$ .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC4 .IIF EQ $$$ .ERROR ;NOT SPIN OR WAIT IN LOCK$ MACRO .ENDM T  .MACRO ULOCK$ ADDR,TYPE,?LAB1 .IF DF M$$PRO .IF IDN , MOV #'ADDR,-(SP) CALL $MULCK .ENDC .IF IDN , .IF DF L$$DBG .NTYPE TMP,ADDR .IF EQ TMP-67 CMPB $PROCN,ADDR+1E .IFF7 .IF EQ TMP&70-10+ CMPB $PROCN,1'ADDRM .IFFN .IF EQ TMP&70-60D CMPB $PROCN,1+ADDRM .IFFD, .ERROR ;INCORRECT ADDRESSING MODE IN ULOCK$ .ENDC .ENDC .ENDC BEQ LAB CRASHLAB: .IF EQ TMP-67 COMB ADDR+1 .IFF  .IF EQ TMP&70-10S COMB 1'ADDR .IFFM .IF EQ TMP&70-60 COMB 1+ADDR .IFF,, .ERROR ;INCORRECT ADDRESSING MODE IN ULOCK$ .ENDC .ENDC .ENDC .ENDC CACHE$ RESTOR MOVB #1,ADDR, .ENDC .ENDC .ENDM T  .MACRO LCKDF$ TYPE- .IF IDN , .BYTE 1 .BYTE -1& .ENDC .IF IDN , .BYTE 1 .BYTE -16 .BYTE 1 .BYTE -1D .WORD 0 .ENDC .ENDM T D%LK.SPN=2 ;LENGTH OF SPIN LOCK BLOCK&LK.WAT=10 ;LENGTH OF WAIT LOCK BLOCK - ; !; DEFINITIONS FOR CACHE OPERATION;M ' .IF DF P$$D70 & M$$PRO& 6$FLUSH=1*400 ;CACHE FLUSH OPERATION&BYPASS=2*400 ;CACHE BYPASS OPERATION . .ENDC C . C;C; MACRO FOR CACHE OPERATION;N  .MACRO CACHE$ ARG,ARG2. .IF DF P$$D70 & M$$PROI < .IF IDN ,. BIC #BYPASS,@$MPCSR+6 .ENDC W .IF IDN ,6 BIS #BYPASS,@$MPCSR+6 .ENDC . .IF IDN , BIS #FLUSH,@$MPCSR+6N .ENDC  .IF IDN ,F MOV @$MPCSR+6,-(SP) BIC #^C,(SP)  .IF DIF , BIC (SP),@$MPCSR+6M .IFF BIS #BYPASS,@$MPCSR+6 .ENDC .ENDC Y .IF IDN ,S BIC #BYPASS,@$MPCSR+6 BIS (SP)+,@$MPCSR+6 .ENDC  .ENDC .ENDM  A;A; SAVE NONVOLATILE REGISTERS;M .MACRO SAVNRI JSR R5,$SAVNR .ENDM;A; STATE SWITCHING MACRO;F .MACRO SWSTK$ ARG CALL $SWSTK,ARG .ENDM;'; TALLY A FIELD IN SYSTEM ACCOUNT BLOCK$;S .MACRO TALLY$ OFF,CND,PROCR .IF DF X$$ACC&A$$CNT&CNDS MOV R0,-(SP)S MOV #140002+OFF,R0R .IF IDN ,, CALL $ACINP .IFF ; IDN , CALL $ACINC .ENDC ; IDN ,N .ENDC ; DF X$$ACC&A$$CNT&CNDB .ENDM;R5; CPR SEND MACRO -- SEND A PACKET TO CPRAME OR CPRSYSN;A$ .MACRO CPSEN$ OPCODE,BUF,LEN,SHRBAS .MCALL MOV$ MOV$ SHRBAS MOV$ LENT MOV$ BUF MOV$ OPCODE .IF DF VC$CPR S CALL @CPSEN .IFF CALL $CPSEN .ENDC ;VC$CPR .ENDM .IIF NDF S$$YDF , .LISTCR .IF DF X$$ACC&A$$CNT&CNDS MOV R0,-(SP)S MOV #140002+OFF,R0R .IF IDN ,, CALL $ACINP .IFF ; IDN , CALL $ACINC .ENDC ; IDN ,N .ENDC ; DF X$$ACC&A$$CNT&CNDB .ENDM;R5; CPR SEND MACRO -- SEND A PACKET TO CPRAME OR CPRSYSN;A$ .MACRO CPSEN$ OPCODE,BUF,LEN,SHRBAS .MCALL MOV$ MOV$ SHRBAS MOV$ LENT MOV$  .IIF NDF L$$CDA .TITLE CRASH .IIF DF DL$$CD .TITLE DLCRSH( .IIF DF DU$$CD .TITLE DUCRSH$ .IIF DF MS$$CD .TITLE MSCRSHL .IIF DF MU$$CD .TITLE MUCRSHD .IIF DF MM$$CD .TITLE MMCRSHP .IDENT /06.02/ N;;5; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATIONP; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;P;I; P. J. BEZEREDI 24-OCT-77;A$; MODIFIED FOR RSX-11M-PLUS V200`D`N.0 BY:;D; P. J. BEZEREDI; B. S. MCCARTHY; R. T. PERRON ; C. SESTOKAS ;$$; MODIFIED FOR RSX-11M-PLUS V2.1 BY:;T; P. J. BEZEREDI ; T. LEKAS; B. S. MCCARTHY; J. M. LAWLER ; C. SESTOKAS; S. M. THOMAS;+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:M; ; J. W. BERZLE; G. N. LARSEN; J. M. LAWLER; B. S. MCCARTHY; M. PETTENGILL; C. SESTOKAS; J. G. WEHNER; P. K. M. WEISS;H$; MODIFIED FOR RSX-11M-PLUS V4.0 BY:; ; C. SESTOKAS- ; K. L. NOEL;D; MODIFIED BY:;2; J. W. BERZLE 28-JAN-88 06.00;S6; JWB226 -- ADD SUPPORT FOR LOADABLE MM: CRASH DRIVER;F;R$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;I; A. V. HUDED 25-AUG-88 06.02;.8; AVH0003 --- ADD 2044KW UPPER LIMIT FOR MEMORY DUMP TO.; AVH0002 --- DL:, DU: AND MU: CRASH DRIVERS; ;; CRASH DUMP ROUTINES ;L;; MACRO LIBRARY CALLS ;E# .MCALL HWDDF$,BTJMP$,UDADF$,BGCK$AE .MCALL CPRDF$ UDADF$H HWDDF$I CPRDF$X;P; LOCAL MACROS;  .MACRO PUSH ARG SUB #2,SP MOV ARG,(SP): .ENDM PUSH ;2*; C$$CDA = 0 LOADABLE CRASH DRIVER SUPPORT+; C$$CDA = N RESIDENT CRASH DRIVER SUPPORT I; B; WHEN RESIDENT CRASH DRIVER SUPPORT IS SELECTED, THIS MODULE WILL@; INCLUDE THE EXECUTIVE CRASH CODE ALONG WITH A SPECIFIC DRIVER.;-B; WHEN LOADABLE CRASH DRIVER SUPPORT IS SELECTED, THIS MODULE WILLB; ONLY INCLUDE THE EXECUTIVE CRASH CODE. THIS MODULE IS ASSEMBLED=; ONCE FOR EACH LOADABLE CRASH DRIVER AFTER THE EXECUTIVE IS A=; ASSEMBLED. WHEN THIS MODULE IS BEING ASSEMBLED FOR A CRASHN<; DRIVER THE FOLLOWING CONDITIONALS ARE DEFINED IN A PREFIX ; FILE:=(; C$$CDA=0 LOADABLE CRASH DRIVER SUPPORT1; L$$CDA=0 LOADABLE CRASH DRIVERS TO BE ASSEMBLEDS#; XX$$CD=0 XX CRASH DRIVER SELECTED  .IF DF C$$CDA .IIF GT,C$$CDA R$CRSH = 0 .ENDC, .IF DF, L$$CDA ;IF ASSEMBLING CRASH DRIVER* .NLIST CND ;DON'T LIST EXEC CRASH MODULE .IFF ; DF L$$CDAA .PAGE .IF DF C$$CDA;+%; **-$CRASH-SYSTEM CRASH DUMP ROUTINES7; **-$PANIC-SYSTEM CRASH DUMP ROUTINE (REF. ENTRY ONLY) ;RB; THIS ROUTINE IS ENTERED VIA A JUMP WHENEVER A FATAL SYSTEM ERROR; (IOT) IS DETECTED.;A?; THIS ROUTINE PERFORMS A MEMORY DUMP THAT CAN BE DIRECTED TO A <; DISK OR TAPE. ONCE THE DUMP IS FINISHED THE SYSTEM MAY BE); RE-BOOTED OR ANOTHER DUMP MAY BE TAKEN.A; IF ENTRY IS AT $CRALT, IT IS ASSUMED THAT THE MEMORY MANAGEMENT' ; REGISTERS ARE PROPERLY SET UP.;F ; INPUTS:.;E; KERNEL STACK; ; OUTPUTS:;-<; A CORE IMAGE OF THE SYSTEM IS DUMPED ONTO THE DUMP DEVICE.;- ;+ Y0;**-$TRINT-GENERAL TRAP INTERCEPTION ROUTINE ; D; THIS ENTRY POINT ADDRESS MAY BE PLACED IN ANY VECTOR TO ALLOW THE /; SETTING OF THE C BIT AND AN RTI EXECUTED. E ;- U H$TRINT:: ;REFERENCE LABEL R1TRP04: BIS #1,2(SP) ;SET CARRY ON TRAPS THROUGH 4S RTI ;RETURN .IFTF ;C$$CDA .IF DF M$$PRO;R=; NOTE: THIS CODE ONLY WORKS PROPERLY FOR UP TO 4 PROCESSORS.2; MODIFICATIONS WILL HAVE TO BE MADE TO HANDLE THE; DEC HARDWARE ALPHABET.; -$CRAL1::MOV #$STACK-4,SP ;POINT TO PS PC PAIR 3 MOV #$CRMS5,R1 ;GET ADDRESS OF MESSAGE TO BE TYPEDC$ MOV R4,R3 ;COPY PROCESSOR BIT MASK BR WRMSG ;#$CRAL2::ADD #6,SP ;CLEAN THE STACK 3 MOV #$CRMS4,R1 ;GET ADDRESS OF MESSAGE TO BE TYPED MOV R5,R3 ;COPY PROCESSOR MASK9WRMSG: CALL $DISAN ;DISABLE SANITY TIMERS (ALL OF THEM) A' CLR R0 ;INITIALIZE PROCESSOR NUMBER D%10$: CLC ;CLEAR CARRY FOR ROTATE S! ROR R3 ;ROTATE R3 RIGHT ONE BITO BCS 30$ ;IF CS TYPE MESSAGEA BEQ 50$ ;IF EQ DONE A1 BR 40$ ;INCREMENT PROCESSOR NUMBER AND GO AGAINC%30$: MOV R0,R2 ;CALCULATE CPU LETTERY ADD #'A,R2 ; MOVB R2,$CRCPU ;I& MOV R1,-(SP) ;SAVE ADDRESS OF MESSAGE CALL TYPE ;TYPE MESSAGEC* MOV #$CRCPU,R1 ;GET ADDRESS OF CPU LETTER" CALL TYPE ;TYPE PROCESSOR LETTER) MOV (SP)+,R1 ;RESTORE ADDRESS OF MESSAGE(&40$: INC R0 ;ADVANCE PROCESSOR NUMBER BR 10$ ;GO AGAIN50$: ;REFERNCE LABELO .IF DF D$$DXD' CLR $DXDRL ;INDICATE DON'T JMP TO DXDS .ENDC ; DF D$$DXD$ BR $CRASH ;G00``TADATADATADATADATADATADATADATADATAO DO THE CRASH .ENDC ;M$$PRO .PAGE;GA; THIS ROUTINE IS ENTERED FROM THE DIRECTIVE DISPATCHER IF AN EMT >; IS DONE AT SYSTEM STATE. THE PC PRIOR TO THE TRAP IS SAVED.; :; IF WE GOT HERE DUE TO A BUGCHECK (EMT 374 OR 375) AND IFC; THE FACILITY ERROR CODE AT $BCFAC IS ZERO THEN THE NEXT TWO WORDSEF; IN THE I-STREAM AFTER THE EMT INSTRUCTION ARE THE FACILITY AND ERROR>; CODES. THESE CODES WILL BE STORED AND A CRASH WILL BE DONE.F; THIS ROUTINE IS ALSO CALLED WHEN AN IOT HAS OCCURED IN SYSTEM STATE.B; THIS IS USUALLY AS A RESULT OF AN OLD STYLE CRASH. IN THIS CASE>; THE FACILITY AND ERROR CODES WILL HAVE BEEN SETTUP BY SSTSR.D; THIS IS ALSO CALLED FOR A TRAP OR NON BUGCHECK EMT IN SYSTEM STATE?; IN THIS CASE THE FACILITY AND ERROR CODES ARE FILLED IN AND AC; CRASH IS DONE.;N.$CREMT::MOV (SP),$BCPC ;SAVE THE PRE-CRASH PC1 TST $BCFAC ;HAVE THE CODES BEEN SAVED ALREADY?S BNE $CRENT ;NE YES - GO CRASH+ MOV (SP),-(SP) ;DUPLICATE PC ON THE STACK 1 SUB #2,(SP) ;POINT AT THE TRAP/EMT INSTRUCTION " MFPI @(SP) ;GET THE INSTRUCTION& BIC #1,(SP) ;GET READY FOR THE TEST1 CMP (PC)+,(SP) ;IS THIS EMT 374/375 (BUGCHECK)?S EMT 374& BEQ 20$ ;IF EQ YES - SAVE THE CODES6 BGCK$A BF.INT,BE.EMT,INTERNAL ;ASSUME EMT INSTRUCTION, CMPB #&377,1(SP) ;EMT INSTRUCTION? BEQ 10$ ;IF EQ YES - GO CRASH0 BGCK$A BF.INT,BE.TRP,INTERNAL ;TRAP INSTRUCTION&10$: CMP (SP)+,(SP)+ ;CLEAN THE STACK BR $CRENT ;GO CRASH!20$: TST (SP)+ ;CLEAN THE STACKS* ADD #2,(SP) ;POINT TO THE FACILITY CODE$ MFPI @(SP) ;GET THE FACILITY CODE MOV (SP)+,$BCFAC ;STORE IT* ADD #2,(SP) ;GET THE ERROR CODE ADDRESS% MFPI @(SP)+ ;GET THE FACILITY CODE$ MOV (SP)+,$BCERR ;STORE IT;B .PAGE=; IF CDA SUPPORT IS INCLUDED IN THE SYSTEM THIS ENTRY WILL DO3?; A CRASH DUMP. IF CDA SUPPORT IS NOT INCLUDED AND THIS IS NOTC@; A P/OS SYSTEM A HALT WILL BE DONE. IF THERE IS NO CDA SUPPORT?; AND THIS IS A P/OS SYSTEM R0 AND R1 WILL BE SETTUP AND A JUMPAB; INTO THE BOOT ROM WILL BE DONE TO DISPLAY THE FACILITY AND ERROR; CODES.;F$CRENT::$PANIC:: ;REFERENCE LABELT$CRASH:: .IFF ;C$$CDAR .IF DF R$$PRO% MOV $BCFAC,R0 ;GET THE FACILITY CODEM" MOV $BCERR,R1 ;GET THE ERROR CODE( BTJMP$ ;HAVE THE ROM SHOW THE MESSAGE .IFF ;R$$PROI(60$: HALT ;WE DON'T HAVE CRASH SO HALT BR 60$ ;OH NO YOU DON'T! .ENDC ;R$$PRO .IFT ;C$$CDA.7 MOV #TRP04,@#4 ;SET UP TO SET CARRY ON TRAPS THROUGH 4A .IF DF M$$PRO& BIS #4,SR3 ;ENABLE KERNEL DATA SPACE' BIS #1,SR0 ;TURN ON MEMORY MANAGEMENT " ;THIS TRANSFERS CONTROL TO THE( ;CRASH ROUTINE IN THE PRIVATE MEMORY ;FOR THIS PROCESSORM .ENDC. MOV (SP)+,$CRUPC ;SAVE USER PC FROM THE STACK. MOV (SP)+,$CRUST ;SAVE USER PS FROM THE STACK<$CRALT:: ;ALTERNATE ENTRY POINT USED BY 'X' COMMAND TO XDT 0 O .IF DF M$$PRO P F3 CALL $DISAN ;DISABLE SANITY TIMERS (ALL OF THEM) O O .ENDC R .IF DF D$$DXD) MOV KINAR5,$DXDK5 ;SAVE APR 5 FOR DXD N" MOV $DXDRL,KINAR5 ;MAP TO DXD % BEQ CRSH ;IF EQ DXD NOT INSTALLED V( JMP @$DXDEP ;JUMP TO DXD ENTRY POINT 1$DXDRT::MOV $DXDK5,KINAR5 ;RESTORE KERNEL APR5 S$ RTT ;RETURN FROM WHENCE WE CAME 8CRSH: MOV $DXDK5,KINAR5 ;RESTORE MAPPING FOR THE CRASH  .ENDC ; DF D$$DXD7 MOV #TRP04,@#4 ;SET UP TO SET CARRY ON TRAPS THROUGH 4L .IF DF M$$PRO! CACHE$ BYPASS ;BYPASS THE CACHE  .ENDC .PAGE?; DUMP ALL VOLATILE PROCESSOR REGISTERS TO CRASH STACK ($CRSST)R2 TSTB $CRDMP ;HAVE REGISTERS ALREADY BEEN DUMPED? BEQ 5$ ;NO IF EQ JMP 70$ ; 5$: MOV PS,$CRSST ;STORE FULL PS; MOV #PMODE!PR7,PS ;LOCK OUT INTERRUPTS, PREVIOUS MODE USERS MOV SP,$CRSST-2 ;;;SAVE SPW0 MOV $CRUPC,$CRSST-4 ;;;SAVE PC BEFORE IOT CRASH0 MOV $CRUST,$CRSST-6 ;;;SAVE PS BEFORE IOT CRASH/ MOV #$CRSST-6,SP ;;;RESET SP TO INTERNAL STACKL MFPI SP ;;;SAVE USER'S SPE .IF DF S$$LIB1 MOV #PSMODE!PR7,PS ;;;SET PREVIOUS MODE TO SUPER  .ENDC MFPI SP ;;;GET S00`D`NUPER SPT( PUSH CPUERR ;;;SAVE CPU ERROR REGISTER+ NOP ;;;THIS INSTRUCTION MUST BE HERE FOR ) ;;;THE 11/60. UNLESS THE APPROPRIATE#& ;;;ECO HAS BEEN APPLIED, ACCESSING" ;;;THE CPU ERROR REGISTER WILL! ;;;CAUSE THE NEXT INSTRUCTIONA ;;;TO BE SKIPPED2 PUSH MEMERR ;;;SAVE MEMORY SYSTEM ERROR REGISTER- PUSH MEMCTL ;;;SAVE MEMORY CONTROL REGISTERL$ MOV R0,-(SP) ;;;SAVE REGISTER SET 1 MOV R1,-(SP) ;;;V MOV R2,-(SP) ;;;S MOV R3,-(SP) ;;;  MOV R4,-(SP) ;;; MOV R5,-(SP) ;;;S. PUSH SR0 ;;;SAVE MEMORY MANAGEMENT REGISTERS PUSH SR0+2 ;;; PUSH SR0+4 ;;; PUSH SR3 ;;;# BIC #40,SR3 ;;;DISABLE UNIBUS MAPT3 MOV #UINDR0,R0 ;;;SETUP TO SAVE FIRST SET OF APRS E MOV #32.,R1 ;;; 10$: PUSH (R0) ;;;SAVE APRU ADD #2,R0 ;;;MOVE TO NEXT ONES( SOB R1,10$ ;;;LOOP UNTIL ALL ARE SAVED4 MOV #SISDR0,R0 ;;;SETUP TO SAVE SECOND SET OF APR'S MOV #64.,R1 ;;;V20$: PUSH (R0) ;;;SAVE APRP ADD #2,R0 ;;;MOVE TO NEXT ONER( SOB R1,20$ ;;;LOOP UNTIL ALL ARE SAVED* MOV #UBMPR,R0 ;;;GET ADDRESS OF FIRST UMR( MOV #62.,R1 ;;;NUMBER OF UMR'S TO SAVE30$: PUSH (R0) ;;;SAVE A UMR# ADD #2,R0 ;;;MOVE TO NEXT ONEM( SOB R1,30$ ;;;LOOP UNTIL ALL ARE SAVED4 INCB $CRDMP ;;;PROCESSOR REGISTERS HAVE BEEN SAVED .PAGE;D8; AT THIS POINT, THE FORMAT OF THE CRASH STACK (STARTING!; FROM THE BOTTOM, IS AS FOLLOWS:T;T#; OFFSET REGISTER NAME ADDRESS,$; ------ ------------- -------;A:; - - - - - - UNIBUS MAPPING REGISTERS - - - - - - ;A6; $CRSST-540 UNIBUS MAP REGISTER 31 (HIGH HALF) 1703665; $CRSST-536 UNIBUS MAP REGISTER 31 (LOW HALF) 170364 ; ... ...6; $CRSST-350 UNIBUS MAP REGISTER 1 (HIGH HALF) 1702025; $CRSST-346 UNIBUS MAP REGISTER 1 (LOW HALF) 170200S;S=; - - - - - - MEMORY MANAGEMENT REGISTERS - - - - - - T;C7; $CRSST-344 KERNEL DATA SPACE ADDRESS REG. 7 172376 ; ... ...7; $CRSST-326 KERNEL DATA SPACE ADDRESS REG. 0 172360 7; $CRSST-324 KERNEL INST SPACE ADDRESS REG. 7 172356R ; ... ...7; $CRSST-306 KERNEL INST SPACE ADDRESS REG. 0 17234077; $CRSST-304 KERNEL DATA SPACE DESCRIPTOR REG. 7 1723366 ; ... ...7; $CRSST-266 KERNEL DATA SPACE DESCRIPTOR REG. 0 17232027; $CRSST-264 KERNEL INST SPACE DESCRIPTOR REG. 7 172316 ; ... ...7; $CRSST-246 KERNEL INST SPACE DESCRIPTOR REG. 0 172300C7; $CRSST-244 SUPER DATA SPACE ADDRESS REG. 7 172276 ; ... ...7; $CRSST-226 SUPER DATA SPACE ADDRESS REG. 0 172260 7; $CRSST-224 SUPER INST SPACE ADDRESS REG. 7 172256R ; ... ...7; $CRSST-206 SUPER INST SPACE ADDRESS REG. 0 17224077; $CRSST-204 SUPER DATA SPACE DESCRIPTOR REG. 7 1722366 ; ... ...7; $CRSST-166 SUPER DATA SPACE DESCRIPTOR REG. 0 17222027; $CRSST-164 SUPER INST SPACE DESCRIPTOR REG. 7 172216 ; ... ...7; $CRSST-146 SUPER INST SPACE DESCRIPTOR REG. 0 172200C7; $CRSST-144 USER DATA SPACE ADDRESS REG. 7 177676 ; ... ...7; $CRSST-126 USER DATA SPACE ADDRESS REG. 0 177660 7; $CRSST-124 USER INST SPACE ADDRESS REG. 7 177656R ; ... ...7; $CRSST-106 USER INST SPACE ADDRESS REG. 0 17764077; $CRSST-104 USER DATA SPACE DESCRIPTOR REG. 7 1776366 ; ... ...7; $CRSST-066 USER DATA SPACE DESCRIPTOR REG. 0 17762027; $CRSST-064 USER INST SPACE DESCRIPTOR REG. 7 177616 ; ... ...7; $CRSST-046 USER INST SPACE DESCRIPTOR REG. 0 177600C .PAGE#; OFFSET REGISTER NAME ADDRESS.#; ------ ------------- -------U; ?; - - - - - - MEMORY MANAGEMENT CONTROL REGISTERS - - - - - - S;E!; $CRSST-044 SR3 (MMR3) 172516.!; $CRSST-042 SR2 (MMR2) 177576A!; $CRSST-040 SR1 (MMR1) 1775741!; $CRSST-036 SR0 (MMR0) 177572.;19; - - - - - - USERS GENERAL REGISTERS - - - - - - O;E; $CRSST-034 USER R5 ; ... ...; $CRSST-022 USER R0;.@; - - - - - - MEMORY CONTROL/ERROR REGISTERS - - - - - - ;.-; $CRSST-020 MEMORY CONTROL REGISTER 177746 1; $CRSST-016 MEMORY SYSTEM ERROR REGISTER 177744 (; $CRSST-014 CPU ERROR REGISTER 177766;G?; - - - - - - STACK POINTERS, CRASH CONTEXT - - - - - - C;T%; $CRSST-012 S00``TADATADATADATADATADATADATADATADATAUPERVISOR STACK POINTER0; $CRSST-010 USER STACK POINTER0; $CRSST-006 PS PRIOR TO CRASH; $CRSST-004 PC PRIOR TO CRASH ; $CRSST-002 SP AT TIME OF CRASH; $CRSST PS AFTER CRASH. .PAGE%; SET UP SYSTEM TO PERFORM CRASH DUMP- .IF DF M$$PRO+ MOVB $PROC2,R0 ;;;GET PROCESSOR NUMBER * 2  .IFFE1 CLR R0 ;;;USE PROC 0 ON SINGLE PROCESSOR SYSTEMG .IFTF6 INC $CRFLG(R0) ;;;INDICATE (TO OTHER PROCESSORS) THAT) ;;;THIS PROCESSOR HAS DUMPED ITS REGST .IFF- .IF DF K$$DAS( BIS #4,SR3 ;;;ENABLE KERNEL DATA SPACE .ENDC( BIS #1,SR0 ;;;MAKE SURE MEM MGMT IS ON .IFTR6 TSTB $CRFPR ;;;IS THIS THE FIRST PROCESSOR TO CRASH? BGE 31$ ;;;IF GE NO+ MOVB $PROCN,$CRFPR ;;;SAVE ID OF PROCESSOR .IF NE M$$PRO-1- MOV $URMST,R1 ;;;DETERMINE ONLINE PROCESSORSF BIC $CPMSK,R1 ;;;( BIC $CPBIT,R1 ;;;EXCLUDE THIS PROCESSOR* MOV #MP.CRH,R2 ;;;GET CRASH FUNCTION CODE1 CALL $IIFNX ;;;NOTIFY OTHER PROCESSORS TO CRASHD1 CACHE$ BYPASS ;;;SET THE CACHE BYPASS BIT AGAIN# .IFTF%31$: CALL $IIOPN ;;;OPEN UP THE IISTB .IFT  .ENDC ; NE M$$PRO-1 .IFTF ; DF M$$PRO;F>; IF WE'RE HERE DUE TO A BUGCHECK, OUTPUT THE BUGCHECK MESSAGE;* .IF NE C$$CDA-20 ; NOT CRASH TRHOUGH KXJ' TST $BCFAC ;;;BUGCHECK FACILITY SET ?; BEQ 315$ ;;;IF EQ NO) MOV #$BCMSG,R0 ;;;POINT TO FIRST MESSAGE;# MOV $BCPC,R3 ;;;GET PC OF BUGCHECKH CALL OCTSTR ;;;OUTPUT MESSAGEC* MOV $BCFAC,R3 ;;;GET FACILITY OF BUGCHECK CALL OCTSTR ;;;OUTPUT MESSAGEC, MOV $BCERR,R3 ;;;GET ERROR CODE OF BUGCHECK CALL OCTSTR ;;;OUTPUT MESSAGE. CALL TYPE ;;;OUTPUT TRAILER315$: ;;;REFERENCE LABEL  .ENDC ; NE C$$CDA-20B .IFT ; DF M$$PROU .IF NE M$$PRO-10 MOV #$CRMS2,R1 ;;;INDICATE REGS HAVE BEEN SAVED CALL TYPE ;;;TYPE THE MESSAGE;. MOV $CRKRB,R1 ;;;GET CRASH DEVICE KRB ADDRESS. BEQ 35$ ;;;IF EQ ASSUME PROCESSOR HAS ACCESS= BIT K.URM(R1),@$CPURM ;;;DOES THIS PROC HAVE ACCESS TO DISK?; BNE 35$ ;;;YES IF NE32$: JMP $CRSHT ;;;HALT(35$: ASRB $CRLCK ;;;LOCK THE CRASH LOCK# BCC 32$ ;;;HALT IF LOCK IS LOCKED 7 MOV #$CRMS1,R1 ;;;PROC IS WAITING FOR OTHERS TO FINISHE CALL TYPE ;;;TYPE THE MESSAGE2540$: MOV #,R0 ;;;GET NUMBER OF PROCESSORSC750$: BIT $BTMSK(R0),$URMST ;;;IS THIS PROCESSOR ONLINE?T BEQ 55$ ;;;NO IF EQ$6 TST $CRFLG(R0) ;;;HAS PROCESSOR DUMPED ITS REGISTERS?1 BEQ 40$ ;;;IF EQ NO, WAIT FOR ALL PROCS TO DUMPC'55$: SUB #2,R0 ;;;CHECK NEXT PROCESSORK BGE 50$ ;;;GO AGAIN  .ENDC .ENDC270$: MOV #PR7,PS ;;;MAKE SURE WE'RE AT PRIORITY 7. .IF EQ, C$$CDA ;LOADABLE CRASH DRIVER SUPPORT, BIS #60,@#SR3 ;;; TURN ON MEMORY MANAGEMENT8 MOV @#$CRPAR,@#KINAR5 ;;; RELATIVE ADDRESS OF CRASH PAR .IF DF K$$DAS+ MOV @#$CRPAR,@#KDSAR5 ;;; MAP D SPACE ALSOS .ENDC ;DF K$$DAS$ BNE 80$ ;;; CRASH DRIVER IS LOADED' MOV #$CRMS7,R1 ;;; MOVE IN THE MESSAGE  CALL TYPE ;;; TYPE IT OUTC75$: HALT ;;; AND STOP BR 75$ ;;; STOP !S,80$: JMP @120000 ;;; JMP TO CRASH PARTITION .ENDC ; EQ, C$$CDA, .ENDC ; DF C$$CDA  .ENDC ; DF L$$CDA# .IF DF, C$$CDA ;CRASH DUMP SUPPORTO& .IF EQ C$$CDA-20 ; CRASH THROUGH KXJ+PBNH== 0 ; SET UP TO IGNORE THIS IN LOWCR PBNL== 0 1 MOV $CSFSV,@#KXCSRF ;;; SET ALL OF MEMORY SHAREDM MOV $CSHSV,@#KXCSRH ;;; ...2 MOV $KXPTR,R0 ;;; GET ADDRESS OF KXJ DRIVER'S DCB( MOV D.UCB(R0),R0 ;;; GET ADDRESS OF UCB( MOV U.SCB(R0),R0 ;;; GET ADDRESS OF SCB( MOV S.KRB(R0),R0 ;;; GET ADDRESS OF KRB& MOV K.CSR(R0),R0 ;;; GET TPR0 ADDRESS2 MOV #RI$CRH,4(R0) ;;; SET CRASH NOTIFICATION CODE. MOV $KXVC1,R1 ;;; GET ADDRESS OF FIRST VECTOR, ADD #4,R1 ;;; GET ADDRESS OF SECOND VECTOR5 MOV R1,@#KXJQIR ;;; NOTIFY HOST THROUGH VECTOR 2=,90$: HALT ;;; HALT TO LET HOST COPY MEMORY BR 90$ ;;; DON'T CONTINUE .IFF ; EQ C$$CDA-20<; THE FOLLOWING CODE SHOULD BE ASSEMBLED INTO EXECUTIVE WHEN<; RESIDENT CRASH DUMP DRIVER SUPPORT IS INCLUDED. IT SHOULD=; BE INCLUDED IN THE CRASH DRIVER WHEN LOADABLE CRASH SUPPORT;; IS SELECTED.6 .IF DF, L$$CDA!R$CRSH ;00`D`NRESIDENT CRASH OR CRASH DRIVER;C ; TYPE MESSAGE AND WAIT FOR USER;AGAIN: .IF DF, L$$CDA # MOV CRMS0,R1 ;;; TYPE USER MESSAGE; .IFF & MOV #$CRMS0,R1 ;;; USER CRASH MESSAGE .ENDC ; DF L$$CDA Y CALL TYPE ;;;O HALT ;;;WAIT FOR THE USER JMP DUMP ;;;GO DUMP MEMORY .IFTF ; DF L$$CDA!R$CRSHT;+5; **-OCTSTR-OUTPUT AN ASCIZ STRING, THEN OCTAL NUMBERI*; **-OCTOUT-OUTPUT OCTAL NUMBER TO CONSOLE;N ; INPUTS:R&; R0=ADDRESS OF ASCIZ STRING IF OCTSTR; (RETURNED UPDATED)T; R3=BINARY VALUE TO OUTPUT;-,OCTSTR: MOV R0,R1 ;;;COPY ADDRESS OF STRING CALL TYPE ;;;OUTPUT IT$ MOV R1,R0 ;;;UPDATE OUTPUT POINTER .IF DF, L$$CDA ; GL003C5OCTOUT: MOV BCBUF,R1 ;;;POINT TO SCRATCH AREA ; GL003 .IFF ; DF L$$CDA ; GL003/OCTOUT: MOV #$BCBUF,R1 ;;;POINT TO SCRATCH AREAC .ENDC ; DF L$$CDA ; GL003 MOV #6,R2 ;;;SET LOOP COUNTERN10$: MOV R3,R4 ;;;COPY RESIDUEN4 BIC #177770,R4 ;;;STRIP OFF ALL BUT LAST OCT. DIGIT* ADD #60,R4 ;;;MAKE IT AN ASCII CHARACTER% MOVB R4,-(R1) ;;;STORE THE CHARACTERC, ROR R3 ;;;SHIFT RESIDUE ONE RIGHT (WE KNOW% ;;;C IS CLEAR FROM THE ADD ABOVE)U. ASR R3 ;;;SHIFT TWO (C MAY NOT BE CLEAR, BUT ;;;NOW WE KNOW SIGN BIT IS ASR R3 ;;;SHIFT THREE) SOB R2,10$ ;;;LOOP UNTIL SIX CHARACTERSO( ;;;FALL THROUGH TO TYPE ROUTINE WITH" ;;;R1 POINTING TO SCRATCH AREA;+; **-TYPE-TYPE AN ASCIZ MESSAGER;4 ; INPUTS:E; R1=ADDRESS OF TEXT STRINGR;-7TYPE: MOV #C$$RSH,R5 ;;;GET CSR ADDRESS OF PRINT DEVICEI#10$: MOVB (R1)+,R2 ;;;GET CHARACTERH! BEQ 40$ ;;;IF EQ END OF MESSAGEI CALL 30$ ;;;PRINT CHARACTERC1 CMPB #15,R2 ;;;CARRIAGE RETURN (OR LINE FEED) ?W BLT 10$ ;;;IF LT NOT EITHER ' CLR R2 ;;;OUTPUT SOME FILL CHARACTERSH" MOV #5,R4 ;;;FIVE WILL BE ENOUGH20$: CALL 30$ ;;;OUTPUT A FILLH SOB R4,20$ ;;;LOOP UNTIL DONE; BR 10$ ;;;LOOP#30$: TSTB (R5) ;;;IS DEVICE READY?I BPL 30$ ;;;IF PL NOS! MOVB R2,2(R5) ;;;PRINT CHARACTER-40$: RETURN ;;;S .IFT ; DF L$$CDA!R$CRSH;+,; **-CKSUM-VERIFY CHECKSUM OF DEVICE ADDRESS;42; THIS ROUTINE WILL VERIFY THAT THE DEVICE ADDRESS&; HAS NOT BEEN CORRUPTED BY THE CRASH.;- .IF DF, L$$CDA ; GL0036CKSUM: MOV @CRSBN,-(SP) ;;;GET HIGH ORDER BITS ; GL003. ADD @CRSB2,(SP) ;;;ADD LOW ORDER BITS ; GL0031 CMP (SP)+,@CRSCS ;;;COMPARE WITH CHECKSUM; GL003L .IFF ; DF L$$CDA ; GL003:0CKSUM: MOV @#$CRSBN,-(SP) ;;;GET HIGH ORDER BITS* ADD @#$CRSBN+2,(SP) ;;;ADD LOW ORDER BITS, CMP (SP)+,@#$CRSCS ;;;COMPARE WITH CHECKSUM .ENDC ; DF L$$CDA ; GL003 BEQ 10$ ;;;IF EQ OK4 HALT ;;;WAIT FOR USER BR CKSUM ;;;TRY AGAINS10$: RETURN ;;;R;+; **-DUMP-DUMP THE SYSTEM IMAGEL;D>; THIS ROUTINE IS USED TO DUMP THE SYSTEM IMAGE ONTO THE CRASHA; DUMP MEDIA. WHEN THE DUMP IS FINISHED THE SYSTEM MAY BE EITHERR); RE-BOOTED OR ANOTHER DUMP MAY BE TAKEN.F; ; INPUTS: ; NONE.;U ; OUTUTS:R; IMAGE DUMPED.H;-!DUMP: ;;;DUMP IMAGE ONTO MEDIAD( .IF DF, L$$CDA ; LOADABLE CRASH DRIVER6 MOV @CRKRB,R0 ;;; GET DUMP DEVICE KRB ADDRESS ; GL003+ BNE 5$ ;;; IF NE GET CSR FROM KRB ; GL003B6 MOV CRCSR,R0 ;;; GET ADDRESS OF WORD WITH CSR ADDRESS35$: MOV (R0),R0 ;;; GET CSR OF DUMP DEVICE ; GL003D+ ;;; (K.CSR IS GUARANTEED TO BE 0);GL003U+ MOV @CRSUN,R3 ;;; GET UNIT NUMBER ; GL003E .IFF ; DF L$$CDA ; GL003 / MOV @#$CRKRB,R0 ;;;GET DUMP DEVICE KRB ADDRESSO" BNE 5$ ;;;IF NE GET CSR FROM KRB7 MOV #$CRCSR,R0 ;;;GET ADDRESS OF WORD WITH CSR ADDRESSL*5$: MOV (R0),R0 ;;;GET CSR OF DUMP DEVICE$ ;;;(K.CSR IS GUARANTEED TO BE 0)# MOV @#$CRSUN,R3 ;;;GET UNIT NUMBERO .ENDC ; DF L$$CDA ; GL003-DUMP1: ;;;DUMMY LABEL SO DUMP ROUTINES CAN ' ;;;USE ANY LOCAL LABEL THEY WANT TO0 ;;;USE .IFTF ; DF L$$CDA!R$CRSHL .IF EQ C$$CDA-1;T; DT;R>; THIS ROUTINE DUMPS ALL OF PHYSICAL MEMORY UP TO A MAXIMUM OF ; 124K WORDS;R*PBNH== 0 ;;;HIGH ORDER TC11 BLOCK NUMBER)PBNL== 1 ;;;LOW ORDER TC11 BLOCK NUMBER 3 CALL CKSUM ;;;CHECK BLOCK NUMBER AGAINST CHECKSUME SWAB R3 ;;;P00``TADATADATADATADATADATADATADATADATAOSITION UNIT BITSB MOV R3,R1 ;;;COPY3, BIS #4003,R1 ;;;SET FOR READ LBN IN REVERSE MOV R1,(R0) ;;;START THE TAPES(10$: BIT #100200,(R0) ;;;ERROR OR READY? BEQ 10$ ;;;IF EQ NO & BPL DUMP ;;;IF PL MOVE UNTIL ENDZONE%20$: MOV R3,R1 ;;;RETRIEVE UNIT BITSR& BIS #3,R1 ;;;SET TO READ LBN FORWARD MOV R1,(R0) ;;;START THE TAPEW(30$: BIT #100200,(R0) ;;;ERROR OR READY?" BMI DUMP ;;;IF MI ERROR, RESTART BEQ 30$ ;;;IF EQ WAIT4 SUB @#$CRSBN+2,6(R0);;;ARE WE AT THE BLOCK WE WANT? BNE 20$ ;;;IF NE NON- CLR 2(R0) ;;;SET WRITE ALL OF MEMORY (UP TO;, CLR 4(R0) ;;;TO 124K) IN 64K WORD SEGMENTS! MOV R3,R1 ;;;RETRIEVE UNIT BITS() BIS #15,R1 ;;;SET TO WRITE DATA FORWARDN! MOV R1,(R0) ;;;WRITE ALL MEMORYE50$: CLR 2(R0) ;;;KEEP WRITINGV TST (R0) ;;;ANY ERRORS?; BPL 50$ ;;;IF PL NOD' BIT #400,-2(R0) ;;;NONEXISTENT MEMORY?B BEQ WERR ;;;IF EQ NO, RETRYD BIS #1,R3 ;;;SET TO STOP TAPES MOV R3,(R0) ;;;STOP TAPE BR $CRSHT ;;;SUCCESS, FINISH .ENDC .IF EQ C$$CDA-2;;; DK;;; IF THE EXECUTIVE DOES NOT SUPPORT 22-BIT ADDRESSING, THIS;9; ROUTINE DUMPS ALL OF PHYSICAL MEMORY UP TO A MAXIMUM OFT ; 124K WORDS.5; ;; IF THE EXECUTIVE SUPPORTS 22-BIT ADDRESSING, THIS ROUTINEM<; DUMPS ALL OF PHYSICAL MEMORY UP A MAXIMUM OF APPROXIMATELY.; 1.2 MEGAWORDS OF MEMORY (FILLS UP THE RK05).;O*PBNH== 0 ;;;HIGH ORDER RK11 DISK ADDRESS)PBNL== 1 ;;;LOW ORDER RK11 DISK ADDRESSV3 CALL CKSUM ;;;CHECK DISK ADDRESS AGAINST CHECKSUM# ASH #13.,R3 ;;;POSITION UNIT BITS' MOV #401,(R0) ;;;RESET RK11 CONTROLLERU/ BIS @#$CRSBN+2,R3 ;;;SET STARTING DISK ADDRESSL! MOV R3,6(R0) ;;;SET DISK ADDRESSM% CLR @#UBMPR ;;;INITIALIZE FIRST UMRU CLR @#UBMPR+2 ;;;...D6 BIS #60,@#SR3 ;;;ENABLE 22-BIT MAPPING AND UNIBUS MAP0 ;;;(KERNEL D HAS BEEN CONDITIONALLY ENABLED)%40$: MOV 6(R0),R3 ;;;GET DISK ADDRESS=/ BIC #160017,R3 ;;;EXTRACT CYLINDER AND SURFACE;. CMP #14420,R3 ;;;ABOUT TO WRITE CYLINDER THAT! ;;;CANNOT ORDINARILY BE READ?U' BEQ $CRSHT ;;;IF EQ YES, STOP WRITING* CLR 4(R0) ;;;INITIALIZE TRANSFER ADDRESS0 MOV #-6000,2(R0) ;;;WRITE 3K WORDS (1 CYLINDER)! MOV #403,(R0) ;;;START THE WRITEC(45$: BIT #100200,(R0) ;;;ERROR OR READY? BEQ 45$ ;;;IF EQ NOS BMI 50$ ;;;IF MI ERROR4 ADD #14000,@#UBMPR ;;;POINT TO NEXT 3K WORD SEGMENT ADC @#UBMPR+2 ;;;...0( BR 40$ ;;;GO AGAIN UNTIL END OF MEMORY,50$: BIT #2000,-2(R0) ;;;NONEXISTENT MEMORY? BNE $CRSHT ;;;YES IF NE HALT .ENDC .IF EQ C$$CDA-3;I; MT;U<; THIS ROUTINE DUMPS ALL OF PHYSICAL MEMORY (UP TO A MAXIMUM9; OF 124K WORDS) IN 512 BYTE RECORDS AT 800 BPI (9-TRACK)D;1+PBNH== 0 ;;;BLOCK NUMBER IGNORED FOR TM11PBNL== 0 ;;;& SWAB R3 ;;;POSITION UNIT SELECT BITS+ BIS #60001,R3 ;;;MERGE DENSITY AND GO BITS, MOV R3,R2 ;;;COPYE# BIS #16,R2 ;;;SET REWIND FUNCTION;! MOV R2,(R0) ;;;START THE REWINDD(10$: BIT #100200,(R0) ;;;ERROR OR READY? BMI WERR ;;;IF MI ERROR, RETRY BEQ 10$ ;;;IF EQ NO CLR (R0) ;;;CLEAR MTC REGISTER( CLR 4(R0) ;;;START TO WRITE ALL MEMORY MOV R3,R2 ;;;RETRIEVE MTC BITS& BIS #4,R2 ;;;SET WRITE DATA FUNCTION BIC #1,R2 ;;;CLEAR GO BIT;" MOV R2,(R0) ;;;LOAD MTC REGISTER130$: MOV #500,R1 ;;;WAIT FOR TAPE TO SETTLE DOWNI35$: DEC R1 ;;;WAIT BNE 35$ ;;;IF NE LOOP,* MOV #-512.,2(R0) ;;;SET 512. BYTE RECORDS BIS #1,(R0) ;;;START THE WRITE(40$: BIT #100200,(R0) ;;;ERROR OR READY? BEQ 40$ ;;;IF EQ NOI! BPL 30$ ;;;IF PL WRITE FINISHED1$ TSTB -2(R0) ;;;NONEXISTENT MEMORY? BPL WERR ;;;IF PL NO, RETRYA MOV R3,R2 ;;;RETRIEVE MTC BITS$ BIS #10000,R2 ;;;SET CLEAR FUNCTION MOV R2,(R0) ;;;LOAD FUNCTION50$: TSTB (R0) ;;;READY?V BPL 50$ ;;;IF PL NOE% BIS #6,R3 ;;;SET WRITE EOF FUNCTIONA! MOV R3,(R0) ;;;DO THE WRITE EOF;60$: TSTB (R0) ;;;READY?O BPL 60$ ;;;IF PL NO; CLR (R0) ;;;CLEAR MTC REGISTER$ BR $CRSHT ;;;SUCCESSFUL COMPLETION .ENDC .IIF EQ C$$CDA-4 CDA$MM=0 .IF DF CDA$MM!MM$$CD ;I; MM;17; THIS ROUTINE DUMPS ALL OF PHYSICAL MEMORY IN 512 BYTEP; RECORDS AT 800 BPI; ,PBNH00`D`N== 0 ;;;BLOCK NUMBER IGNORED FOR TJU16PBNL== 0 ;;;% BIS (PC)+,R3 ;;;SET MODE AND DENSITY)6$TDNSY::.WORD 1300 ;;;DEFAULT TO 800 BPI, NORMAL MODE .IF DF L$$CDA+ MOV @CRSFM,R2 ;;;RETRIEVE FORMATTER NUMBERT .IFF ; DF L$$CDAB- MOV @#$CRSFM,R2 ;;;RETRIEVE FORMATTER NUMBERI .ENDC ; DF L$$CDA& CALL 120$ ;;;SELECT FORMATTER/UNIT 0 MOV 26(R0),R4 ;;;RETRIEVE DEVICE TYPE REGISTER + BIT #40000,R4 ;;;IS THIS A MASSBUS TAPE? H BEQ 10$ ;;;IF EQ NO , BIT #10000,10(R0) ;;;NON EXISTENT DRIVE?  BNE WERR ;;;IF NE, YES. L$ BIT #50,R4 ;;;TM02/3 FORMATTER?  BNE 20$ ;;;IF NE YES  .IF DF L$$CDA'10$: MOV CRMS6,R1 ;;;NO, ILLEGAL DEVICE .IFF ; DF L$$CDAE)10$: MOV #$CRMS6,R1 ;;;NO, ILLEGAL DEVICEB .ENDC ; DF L$$CDA- BR WERR1 ;;;PRINT OUT MESSAGE AND TRY AGAINA-20$: BIT #2000,R4 ;;;IS SLAVE UNIT PRESENT? V BEQ WERR ;;;IF EQ NO  .IF DF L$$CDA# CLR @CRBAE ;;;INITIALIZE BAE FLAGE .IFF ; DF L$$CDA $ CLR @#$CRBAE ;;;INITIALIZE BAE FLAG .ENDC ; DF L$$CDA# MOV R0,R4 ;;;;COPY CSR ADDRESS 2 ADD #26,R4 ;;;ADD OFFSET TO DRIVE TYPE REGISTER 130$: ADD #2,R4 ;;; R4 > REGISTER (11/24 PROBLEM)G% TST (R4) ;;; DEVICE REGISTER THERE?: BCC 30$ ;;;IF CC IT EXISTS V. SUB #34,R4 ;;;SUB # OF DEVICE REGISTERS + 2  SUB R0,R4 ;;; + BNE 40$ ;;;IF NE IT'S AN RH70 CONTROLLER E .IF DF L$$CDA( COM @CRBAE ;;;IT'S NOT, RESET BAE FLAG .IFF ; DF L$$CDAE) COM @#$CRBAE ;;;IT'S NOT, RESET BAE FLAGR .ENDC ; DF L$$CDA1 CLR @#UBMPR ;;;AND INITIALIZE FIRST UNIBUS ... R* CLR @#UBMPR+2 ;;;;... MAPPING REGISTERS ;40$: BIS #60,@#SR3 ;;;ENABLE 22 BIT MAPPING AND UNIBUS MAP 46 MOV #<4*4>,R5 ;;;NUMBER OF 512 BYTE RECORDS/4K BLOCK & CALL 120$ ;;;SELECT FORMATTER/UNIT + MOV #7,(R0) ;;;START THE TAPE REWINDING , MOV #40000,R1 ;;;PAUSE;*50$: SOB R1,50$ ;;;LOOP FOR DELAY TIME 960$: BIT #20000,12(R0) ;;;POSITIONING STILL IN PROGRESS?  BNE 60$ ;;;IF NE YES ! TSTB 12(R0) ;;;DRIVE READY? . BPL 60$ ;;;IF PL NO U* MOV #60,(R0) ;;;LOAD THE WRITE FUNCTION ) CLR 4(R0) ;;;SET TO WRITE ALL OF MEMORY*70$: MOV #-256.,2(R0) ;;;SET WORD COUNT ' MOV #-512.,6(R0) ;;;SET FRAME COUNT R- BIS #1,(R0) ;;;START TO WRITE ALL OF MEMORYS%80$: TSTB 12(R0) ;;;DRIVE READY? ; BPL 80$ ;;;IF PL NO ,# DEC R5 ;;;DECREMENT BLOCK COUNT R# BNE 100$ ;;;IF NE USE SAME UMR : .IF DF L$$CDA* TST @CRBAE ;;;IS THE BAE REGISTER THERE? .IFF ; DF L$$CDAT+ TST @#$CRBAE ;;;IS THE BAE REGISTER THERE?I .ENDC ; DF L$$CDA BEQ 90$ ;;;IF EQ YES = ADD #<1024.*4*2>,@#UBMPR ;;;NO, POINT UMR TO NEXT 4K OF MEM6$ ADC @#UBMPR+2 ;;;DOUBLE WORD ADD # CLR 4(R0) ;;;RESET BUS ADDRESS S090$: MOV #<4*4>,R5 ;;;RESET TO # BLOCKS PER 4K )100$: BIT #40000,(R0) ;;;TRANSFER ERRORS?  BEQ 70$ ;;;IF EQ NO ;+ BIT #4000,10(R0) ;;;NONEXISTENT MEMORY? N BEQ WERR ;;;IF EQ NO & CALL 130$ ;;;SELECT FORMATTER/UNIT % MOV #27,(R0) ;;;WRITE EOF ON TAPE -110$: TSTB 12(R0) ;;;IS TAPE DRIVE READY?  BPL 110$ ;;;IF PL NO ) CLR (R0) ;;;CLEAR CONTROLLER REGISTER B$ BR $CRSHT ;;;SUCCESSFUL COMPLETION.120$: BIS #40,10(R0) ;;;RESET RH CONTROLLER % MOV R2,10(R0) ;;;SELECT FORMATTER V! MOV R3,32(R0) ;;;SELECT UNIT 0130$: TSTB 12(R0) ;;;IS THE TAPE DRIVE READY?  BPL 130$ ;;;IF PL NO  RETURN ;;;EXIT  .ENDC ; DF CDA$$MM!MM$$CD# .IIF EQ C$$CDA-5 CDA$DB=0 ;;; N$ .IIF EQ C$$CDA-11 CDA$DR=0 ;;; $ .IF DF CDA$DB!CDA$DR V ;B; DB AND DR ; >; THE LOCAL SYMBOLS REFERENCED ABOVE, CDA$DB AND CDA$DR, ARE ;; USED WITHING THE FOLLOWING COMMON CODE DRIVER BELOW TO M<; DIFFERENTIATE BETWEEN RP04/5/6 AND RM02/3/5 TYPE DRIVES. ; +; THIS ROUTINE DUMPS ALL OF PHYSICAL MEMORY?;&PBNH== 0 ;;;DEFAULT CYLINDER ADDRESS.PBNL== 1 ;;;DEFAULT TRACK AND SECTOR ADDRESS3 CALL CKSUM ;;;CHECK DISK ADDRESS AGAINST CHECKSUMC) MOV #40,10(R0) ;;;RESET RH CONTROLLER F" MOVB R3,10(R0) ;;;SELECT UNIT 000``TADATADATADATADATADATADATADATADATA MOV 26(R0),R4 ;;;RETRIEVE DEVICE TYPE REGISTER + BIT #40000,R4 ;;;IS THIS A MASSBUS DISK? A BNE 5$ ;;;IF NE NO * BIC #^C<777>,R4 ;;;CLR EXTRANEOUS BITS + BIT #20,R4 ;;;IS IT A DISK OF INTEREST? Y BEQ 5$ ;;;IF EQ NO + CMP #25,R4 ;;;IS IT RP04/5/6 OR RM02/3?  BHIS 10$ ;;;IF HIS YES  CMP #27,R4 ;;;IS IT RM05? A BEQ 10$ ;;;IF EQ YES +5$: MOV #$CRMS6,R1 ;;;NO, ILLEGAL DEVICE T) BR WERR1 ;;;PRINT MESSAGE AND TRY AGAINT(10$: CLR @#$CRBAE ;;;INITIALIZE BAE FLAG# MOV R0,R4 ;;;;COPY CSR ADDRESS C2 ADD #26,R4 ;;;ADD OFFSET TO DRIVE TYPE REGISTER =20$: ADD #2,R4 ;;; R4 > register (11/24 and 11/84 problem). X TST (R4) ;;; Device reg there? BCC 20$ ;;;IF CC IT EXISTS Q. SUB #50,R4 ;;;SUB # OF DEVICE REGISTERS + 2  SUB R0,R4 ;;; + BNE 30$ ;;;IF NE IT'S AN RH70 CONTROLLER S) COM @#$CRBAE ;;;IT'S NOT, RESET BAE FLAG1 CLR @#UBMPR ;;;AND INITIALIZE FIRST UNIBUS ... E* CLR @#UBMPR+2 ;;;;... MAPPING REGISTERS ;30$: BIS #60,@#SR3 ;;;ENABLE 22 BIT MAPPING AND UNIBUS MAP A# MOV #40,10(R0) ;;;CLEAR CONTROLLERT MOVB R3,10(R0) ;;;SELECT UNIT& MOV #23,(R0) ;;;DO A PACK ACKNOWLEDGE' MOV @#$CRSBN,34(R0) ;;;SELECT CYLINDERe, MOV @#$CRSBN+2,6(R0);;;SET SECTOR AND TRACK" CLR 4(R0) ;;;ZERO BUFFER ADDRESS' MOV #14000,32(R0) ;;;SET 16-BIT FORMAT 740$: MOV #-<256.*4*4>,2(R0) ;;;WORD COUNT = 4K WORDS 0 MOVB #61,(R0) ;;;START TO WRITE ALL OF MEMORY 050$: MOV #10,-(SP) ;;; Stack - delay loop count.651$: BIS -(SP),(SP)+ ;;; Delay for 11/84 (DR) problem. DEC (SP) ;;; End of delay?* BNE 51$ ;;; IF NE, No - delay some more. TST (SP)+ ;;; Maintain stack. ' BIT #100200,(R0) ;;;READY OR ERROR? 4 BEQ 50$ ;;;IF EQ NEITHER @, TST @#$CRBAE ;;;;IS THE BAE REGISTER THERE? BEQ 60$ ;;;IF EQ YES = ADD #<1024.*4*2>,@#UBMPR ;;;NO, POINT UMR TO NEXT 4K OF MEM4$ ADC @#UBMPR+2 ;;;DOUBLE WORD ADD # CLR 4(R0) ;;;RESET BUS ADDRESS O'60$: BIT #40000,(R0) ;;;TRANSFER ERROR?- BEQ 40$ ;;;IF EQ NO S0 BIT #4000,10(R0) ;;;NONEXISTENT MEMORY ERROR? ) BNE $CRSHT ;;;IF NE YES, ELSE I/O ERRORF .ENDC .IF EQ C$$CDA-6;+; DM;a;; IF THE EXECUTIVE DOES NOT SUPPORT 22-BIT ADDRESSING, THIS$9; ROUTINE DUMPS ALL OF PHYSICAL MEMORY UP TO A MAXIMUM OFE ; 124K WORDS.6; ;; IF THE EXECUTIVE SUPPORTS 22-BIT ADDRESSING, THIS ROUTINE ; DUMPS ALL OF PHYSICAL MEMORY.2;;:; NOTE THAT THE STANDARD METHOD OF DUMPING ALL OF PHYSICAL:; MEMORY (DUMPING UNTIL THE CONTROLLER DETECTS NONEXISTENTB; MEMORY) DOES NOT WORK, BECAUSE THE RK611 WRITES AN UNCORRECTABLE@; ECC ERROR IN THE LAST SECTOR IT WRITES UNDER THOSE CONDITIONS.;++PBNH== 0 ;;;RK06 DEFAULT CYLINDER ADDRESSR.PBNL== 1 ;;;DEFAULT SECTOR AND TRACK ADDRESS3 MOV #TRP04,@#114 ;;;POSITION TRAP CATCHER FOR NON-! ;;;EXISTENT MEMORY TRAPS WHENB% ;;;SIZE REGISTER > SIZE OF MEMORYL3 CALL CKSUM ;;;CHECK BLOCK NUMBER AGAINST CHECKSUMM# CLR R2 ;;;ASSUME DRIVE IS AN RK06E, MOV #40,10(R0) ;;;CLEAR THE RK611 SUBSYSTEM! MOV R3,10(R0) ;;;SELECT THE UNITB* MOV #1,(R0) ;;;SELECT THE DRIVE FUNCTION10$: TSTB (R0) ;;;READY?R BPL 10$ ;;;IF PL NOC$ BIT #400,12(R0) ;;;IF THIS AN RK07?# BEQ 20$ ;;;IF EQ NO, IT'S AN RK06; BIS #2000,R2 ;;;SET RK07 BITE020$: MOV #40,10(R0) ;;;CLEAR THE RK611 SUBSYSTEM! MOV R3,10(R0) ;;;SELECT THE UNITA" MOV R2,R1 ;;;COPY DRIVE TYPE BIT) BIS #3,R1 ;;;GET PACK ACK FUNCTION CODEU& MOV R1,(R0) ;;;DO A PACK ACKNOWLEDGE30$: TSTB (R0) ;;;READY?# BPL 30$ ;;;IF PL NOR" MOV 12(R0),R1 ;;;GET DRIVE STATUS COM R1 ;;;COMPLEMENT% BIT #100301,R1 ;;;DRIVE READY TO GO?:! BNE WERR ;;;IF NE NO, TRY AGAIN;% MOV @#$CRSBN,20(R0) ;;;LOAD CYLINDER ) MOV @#$CRSBN+2,6(R0);;;LOAD SECTOR/TRACK0" BIS #23,R2 ;;;SET WRITE FUNCTION% CLR @#UBMPR ;;;INITIALIZE FIRST UMRS CLR @#UBMPR+2 ;;;...)6 BIS #60,@#SR3 ;;;ENABLE 22-BIT MAPPING AND UNIBUS MAP0 ;;;(KERNEL D HAS BEEN CONDITIONALLY ENABLED)* MOV #140000,R5 ;;;SET TO MAP THROUGH APR6/ CLR @#KISAR6 ;;;POINT AT FIRST BYTE OF 4K WORD1 MOV #77406,@#KISDR6 ;;;SEGMENTM350$: CLR 4(R0) ;;;START AT BE00`D`NGINNING OF MEMORY ...  ;;;... OR UNIBUS MAP0 MOV #-2000,2(R0) ;;;WRITE 1K WORDS PER TRANSFER BIS R2,(R0) ;;;START WRITING(60$: BIT #100200,(R0) ;;;READY OR ERROR? BEQ 60$ ;;;IF EQ NEITHER BMI WERR ;;;IF MI ERRORR4 ADD #4000,@#UBMPR ;;;POINT TO NEXT 1K WORD BOUNDARY ADC @#UBMPR+2 ;;;0 ADD #40,@#KISAR6 ;;;POINT AT FIRST WORD OF NEXT ;;;TRANSFER ; CMP #170000,@#KISAR6 ;;;IS IT ABOVE HIGHEST POSSIBLE WORD?Y BEQ $CRSHT ;;;IF EQ YES,. TST (R5) ;;;DOES FIRST WORD OF NEXT TRANSFER ;;;EXIST?M BCC 50$ ;;;IF CC YES BR $CRSHT ;;;DONE2 .ENDC .IIF EQ C$$CDA-7 CDA$DL=0 R .IF DF CDA$DL!DL$$CD!H$$GEN;0; DL;;C; IF THE EXECUTIVE DOES NOT SUPPORT 22-BIT ADDRESSING, THIS ROUTINEO=; DUMPS ALL OF PHYSICAL MEMORY UP TO A MAXIMUM OF 124K WORDS.@;M;; IF THE EXECUTIVE SUPPORTS 22-BIT ADDRESSING, THIS ROUTINE ; DUMPS ALL OF PHYSICAL MEMORY.S; :; NOTE THAT THE STANDARD METHOD OF DUMPING ALL OF PHYSICAL>; MEMORY (DUMP MEMORY UNTIL THE CONTROLLER DETECTS NONEXISTENTB; MEMORY) DOES NOT WORK ON A Q-BUS CPU WHERE SOME MEMORY IS UNUSEDC; BECAUSE IT "OVERLAPS" THE I/O PAGE. FOR EXAMPLE, A 124K WORD CPU0?; WITH FOUR 32K WORD MEMORY BOARDS. UNDER THOSE CIRCUMSTANCES,NA; BECAUSE THE RL01/02 CONTROLLER DOES NOT ASSERT THE Q-BUS SIGNAL >; DECLARING AN I/O PAGE ADDRESS TO BE AN I/O PAGE ADDRESS, THE(; MEMORY WILL ANSWER I/O PAGE ADDRESSES.;Y" .IF NE C$$CDA ;IF RESIDENT CRASHPBNH== 0 ;;;NOT USED/PBNL== 2 ;;;RL01/02 CYLINDER,TRACK AND SECTORC .ENDC ; EQ C$$CDA;O&; **** IMPORTANT - PLEASE NOTE ****;YB; WITH LOADABLE CRASH DUMP SUPPORT, PBNL AND PBNH ARE DEFINED WITH=; GLOBAL DEFINITIONS IN THE BUILD FILE FOR EACH DRIVER. ANY CC; MODIFICATIONS MADE HERE TO PBNL OR PBNH MUST BE ALSO MADE IN THE Q; CORRESPONDING BUILD FILE.I;P .IF DF H$$GEN .IF DF, L$$CDA ; GL003DLDU: INCB CRDEV ; GL003E% CMPB #'L,@CRDEV ;;;IS THIS THE RL11?T .IFF ; DF L$$CDA;,DLDU: CMPB #'L,$CRDEV+1 ;;;IS THIS THE RL11? .ENDC ; DF L$$CDA BEQ RL11 ;;;IF EQ YESI$ ;;;ONLY DL/DU FOR P$$GEN SYSTEMS( JMP MSCPDV ;;;GO TO MSCP CRASH ROUTINE .ENDC*RL11: CALL CKSUM ;;;CHECKSUM DISK ADDRESS .IF DF, L$$CDA ; GL003+ CLR @CRBAE ;;;INITIALIZE BAE FLAG ; GL003B .IFF ; DF L$$CDA ; GL003S CLR @#$CRBAEE .ENDC ; DF L$$CDA ; GL003, BIS #60,(R0) ;;;SET EXTENDED ADDRESS BITS # CLR 10(R0) ;;;CLEAR RLBAE BITS I( BCS 2$ ;;;IF CS RLBAE DOES NOT EXIST ( BIT #60,(R0) ;;;DID ADDRESS BITS SET  BEQ 3$ ;;;IF EQ YES B .IF DF, L$$CDA ; GL003-2$: COM @CRBAE ;;;NO, RESET BAE FLAG ; GL003; .IFF ; DF L$$CDA ; GL003.&2$: COM @#$CRBAE ;;;NO, RESET BAE FLAG .ENDC ; DF L$$CDA ; GL0031 CLR @#UBMPR ;;;AND INITIALIZE FIRST UNIBUS ... 0* CLR @#UBMPR+2 ;;;;... MAPPING REGISTERS :3$: BIS #60,@#SR3 ;;;ENABLE 22 BIT MAPPING AND UNIBUS MAP : MOV #<2044.*4>,-(SP) ;;;NUMBER OF BLOCKS IN 2044K WORDS 0 MOV #<4*4>,R5 ;;;NUMBER OF BLOCKS PER 4K WORDS * SWAB R3 ;;;MOVE UNIT NUMBER TO HIGH BYTE& BIS #4,R3 ;;;SET GET STATUS FUNCTION+ MOV #13,4(R0) ;;;SET CODES TO CLEAR DRIVERF% MOV R3,(R0) ;;;EXECUTE THE FUNCTION0(10$: BIT #100200,(R0) ;;;READY OR ERROR? BEQ 10$ ;;;IF EQ NEITHER! BMI WERRX ;;;IF MINUS I/O ERRORL. ADD #4,R3 ;;;CONVERT TO READ HEADER FUNCTION .IF DF, L$$CDA ; GL0035 MOV @CRSB2,R4 ;;; SAVE STARTING DISK ADDRESS ; GL003# .IFF ; DF L$$CDA ; GL003 0 MOV @#$CRSBN+2,R4 ;;;SAVE STARTING DISK ADDRESS .ENDC ; DF L$$CDA ; GL0031 CLR 2(R0) ;;;SET BUFFER ADDRESS FOR FIRST WRITET 15$: MOV R3,(R0) ;;;READ HEADER'20$: BIT #100200,(R0) ;;;DONE OR ERROR?, BEQ 20$ ;;;IF EQ NEITHER! BMI WERRX ;;;IF MINUS I/O ERRORO' MOV 6(R0),R1 ;;;GET HEADER INFORMATIONI( MOV R4,R2 ;;;COPY DESIRED DISK ADDRESS XOR R1,R2 ;;;FORM A DIFFERENCE" BIC #77,R2 ;;;IGNORE SECTOR BITS# BEQ 40$ ;;;IF EQ NO SEEK REQUIREDD( MOV R4,R2 ;;;COPY DESIRED DISK ADDRESS) BIC #177,R1 ;;;ISOLATE CYLINDER ADDRESSI1 BIC #177,R2 ;;;ISOLATE CYLINDER ADDRESS DESIREDR+ SUB R2,R1 ;;;SUBTRACT DESIRE00``TADATADATADATADATADATADATADATADATAD FROM ACTUAL5% BHIS 25$ ;;;IF HIS ACTUAL >=DESIREDT- NEG R1 ;;;ACTUAL < DESIRED, MAKE POS. DIFF.I2 BIS #4,R1 ;;;SET SIGN FOR MOVE TO CENTER OF DISK25$: INC R1 ;;;SET MARKER BIT& BIT #100,R4 ;;;WHICH HEAD DO WE WANT BEQ 30$ ;;;IF EQ IT'S HEAD 0 BIS #20,R1 ;;;SET HEAD 1)30$: MOV R1,4(R0) ;;;LOAD DIFFERENCE WORDE' SUB #2,R3 ;;;CONVERT TO SEEK FUNCTION  MOV R3,(R0) ;;;START THE SEEKO(35$: BIT #100200,(R0) ;;;READY OR ERROR? BEQ 35$ ;;;IF EQ NEITHER BMI WERRX ;;;IF MI I/O ERROR.40$: MOV R4,4(R0) ;;;LOAD DESIRED DISK ADDRESS. MOV #-256.,6(R0) ;;;LOAD ONE BLOCK WORD COUNT$ BIC #17,R3 ;;;REMOVE FUNCTION BITS" BIS #12,R3 ;;;SET WRITE FUNCTION MOV R3,(R0) ;;;START THE WRITE(45$: BIT #100200,(R0) ;;;ERROR OR READY? BEQ 45$ ;;;IF EQ NEITHER BMI 70$ ;;;IF MI ERROR. DEC (SP) ;;;DUMPED MAXIMUM AMOUNT OF MEMORY? BEQ 72$ ;;;IF EQ YES! DEC R5 ;;;DECREMENT BLOCK COUNTE BNE 60$ ;;;IF NE USE SAME UMRY .IF DF, L$$CDA ; GL0032 TST @CRBAE ;;;IS THE BAE REGISTER THERE? ; GL003 .IFF ; DF L$$CDA ; GL003A3 TST @#$CRBAE ;;;IS THE BAE REGISTER THERE? ; GL003 .ENDC ; DF L$$CDA ; GL003 BEQ 50$ ;;;IF EQ YES = ADD #<1024.*4*2>,@#UBMPR ;;;NO, POINT UMR TO NEXT 4K OF MEM0$ ADC @#UBMPR+2 ;;;DOUBLE WORD ADD # CLR 2(R0) ;;;RESET BUS ADDRESS R450$: MOV #<4*4>,R5 ;;;NUMBER OF BLOCKS PER 4K WORDS 60$: MOV (R0),R3 ;;;GET CSR1 BIC #^C<1460>,R3 ;;;ISOLATE UNIT AND EX MEM BITSS" ADD #2,R4 ;;;MOVE TO NEXT SECTOR MOV R4,R1 ;;;COPY DISK ADDRESS& BIC #^C<77>,R1 ;;;GET THE SECTOR BITS CMP #50,R1 ;;;OVERRUN COMING?  BNE 40$ ;;;IF NE NO " BIS #77,R4 ;;;INCREMENT TRACK... INC R4 ;;;...SET SECTOR TO 0( BIS #10,R3 ;;;SET READ HEADER FUNCTION BR 15$ ;;;AND GO AGAIN+70$: BIT #20000,(R0) ;;;NONEXISTENT MEMORY?) BEQ WERRX ;;;IF EQ I/O ERROR"72$: TST (SP)+ ;;;CLEAN THE STACK .IF NDF H$$GENV BR $CRSHT ;;;DUMP DONE .IFFR JMP $CRSHT ;;;DUMP DONEB .IFTF$WERRX: TST (SP)+ ;;;CLEAN THE STACK .IFFP! JMP WERR ;;;GO TO ERROR HANDLERT .ENDC .ENDC ; DF CDA$DL!H$$GEN!DL$$CD .IF EQ C$$CDA-10N;B; DD;;<; THIS ROUTINE DUMPS ALL OF PHYSICAL MEMORY UP TO A LIMIT OF ; 124K WORDS;H-PBNH== 0 ;;;NOT USED BY TU58 TAPE CARTRIDGET#PBNL== 1 ;;;STARTING BLOCK NUMBERD; THIS CODE INTERFACES WITH A TU58 VIA A DL11 ASYNCHRONOUS INTERFACE. CALL CKSUM ;;;CHECKSUM STARTING BLOCK NUMBER5 MOV #TRP04,@#114 ;;;POSITION NONEXISTENT MEMORY TRAPT* ;;;CATCHER FOR CPU'S WHERE MEMORY SIZE ;;;REGISTER > SIZE OF MEMORY1 CLR @#KISAR6 ;;;WANT TO POINT TO PHYSICAL MEMORY$ MOV #77406,@#KISDR6 ;;;THROUGH APR6; INITIALIZE TU58A% CLR -(SP) ;;;RESERVE SPACE ON STACK ! MOV R3,-(SP) ;;;SAVE UNIT NUMBER  BIS #1,4(R0) ;;;SEND BREAK" MOV #6,R2 ;;;SET TO SEND 6 NULLS5$: CLRB 6(R0) ;;;SEND A NULL CALL XWAIT ;;; SOB R2,5$ ;;;LOOPE CLR 4(R0) ;;;CLEAR BREAK# TST 2(R0) ;;;DUMP RECEIVER BUFFER# MOVB #4,6(R0) ;;;SEND INITE CALL XWAIT ;;;WAIT# MOVB #4,6(R0) ;;;SEND ANOTHER INIT  CALL XWAIT ;;;WAIT#10$: TSTB (R0) ;;;RECEIVED A BYTE?T BPL 10$ ;;;IF PL NOM' CMPB #20,2(R0) ;;;RECEIVED A CONTINUE?N BNE 35$ ;;;IF NE NO, I/O ERROR; SEND COMMAND PACKETM0 MOV @#$CRSBN+2,R2 ;;;SAVE STARTING TU58 ADDRESS715$: MOV #140000,R1 ;;;INITIALIZE POINTER TO FIRST BYTE6 ;;;MAPPED BY APR6C# MOVB #2,6(R0) ;;;SEND COMMAND FLAG CALL XWAIT ;;;WAIT1 MOVB #12,6(R0) ;;;SEND COMMAND PACKET BYTE COUNT49 MOV #<12*400+2>,R4 ;;;INITIALIZE COMMAND PACKET CHECKSUM; CALL XWAIT ;;;WAIT$ MOVB #3,6(R0) ;;;SEND WRITE OP CODE CALL XWAIT ;;;WAIT) CLRB 6(R0) ;;;SEND A NULL MODIFIER BYTER/ MOV #3,R5 ;;;UPDATE PACKET CHECKSUM FOR THOSEE! CALL CKSM ;;;TWO BYTES AND WAITM$ MOVB (SP),6(R0) ;;;SEND UNIT NUMBER* MOV #4,R3 ;;;SET COUNTER TO SEND 4 NULLS& ;;;(SWITCHES, LOW BYTE OF SEQUENCE$ ;;;NUMBER, HIGH BYTE OF SEQUENCE& ;;;NUMBER, LOW BYTE OF BYTE COUNT)!20$: CALL XWAIT ;;;WAIT FOR DL11O CLR 6(R0) ;;;SEND A NULL SOB R3,20$ ;;;LOOP1 MOV (SP),R5 ;;;UPDATE PACKET CHECKSUM FOR FI00`D`NRST)+ CALL CKSM ;;;FOUR OF THOSE BYTES AND WAIT5 MOVB #<1024.*2/400>,6(R0) ;;;SEND HIGH ORDER BYTE OF ' ;;;NUMBER OF BYTES TO TRANSFERL0 MOV #<1024.*2>,R5 ;;;UPDATE PACKET CHECKSUM FOR0 CALL CKSM ;;;TRANSFER BYTE COUNT AND THEN WAIT- MOV R2,R3 ;;;COPY TU58 LOGICAL BLOCK NUMBERU( MOVB R3,6(R0) ;;;SEND LOW ORDER BYTE OF ;;;LOGICAL BLOCK NUMBERB SWAB R3 ;;;: CALL XWAIT ;;;WAIT FOR DL11) MOVB R3,6(R0) ;;;SEND HIGH ORDER BYTE OF; ;;;LOGICAL BLOCK NUMBER ) MOV R2,R5 ;;;UPDATE PACKET CHECKSUM FORF, CALL CKSM ;;;LOGICAL BLOCK NUMBER AND WAIT1 MOVB R4,6(R0) ;;;SEND LOW ORDER BYTE OF CHECKSUM; SWAB R4 ;;;  CALL XWAIT ;;;WAIT FOR DL1152 MOVB R4,6(R0) ;;;SEND HIGH ORDER BYTE OF CHECKSUM0; SEND PROMISED DATA TO TU58 IN 128 BYTE PACKETS8 MOV #<1024.*2/128.>,2(SP) ;;;NUMBER OF 128 BYTE PACKETS# ;;;PER 1K WORDS OF MEMORY(30$: TSTB (R0) ;;;RECEIVED A CHARACTER? BPL 30$ ;;;IF PL NO;' CMPB #20,2(R0) ;;;RECEIVED A CONTINUE?B%35$: BNE DEND ;;;IF NE NO, I/O ERRORK/ MOV #<128./2>,R3 ;;;NUMBER OF WORDS PER PACKETM CALL XWAIT ;;;WAIT FOR DL11;/ MOVB #1,6(R0) ;;;SEND DATA PACKET COMMAND FLAG CALL XWAIT ;;;WAIT FOR DL112 MOVB #128.,6(R0) ;;;SEND NUMBER OF DATA BYTES PER ;;;DATA PACKET8 MOV #<128.*400+1>,R4 ;;;INITIALIZE DATA PACKET CHECKSUM CALL XWAIT ;;;WAIT FOR DL11S340$: MOV (R1),R5 ;;;WILL USE DATA WORD IN CHECKSUM)1 MOVB (R1)+,6(R0) ;;;SEND FIRST BYTE OF DATA WORD CALL XWAIT ;;;WAIT FOR DL11O% MOVB (R1)+,6(R0) ;;;SEND SECOND BYTE/- CALL CKSM ;;;FACTOR DATA WORD INTO CHECKSUMP ;;;AND THEN WAIT1 SOB R3,40$ ;;;LOOP FOR EACH DATA WORD OF PACKETA1 MOVB R4,6(R0) ;;;SEND LOW ORDER BYTE OF CHECKSUM SWAB R4 ;;;0 CALL XWAIT ;;;WAIT FOR DL11P2 MOVB R4,6(R0) ;;;SEND HIGH ORDER BYTE OF CHECKSUM% DEC 2(SP) ;;;DECREMENT PACKET COUNTI& BNE 30$ ;;;IF NE SEND ANOTHER PACKET(; CLEAR OUT END PACKET MESSAGE FROM TU581 MOV #14.,R3 ;;;NUMBER OF BYTES IN AN END PACKETI(50$: TSTB (R0) ;;;RECEIVED A CHARACTER? BPL 50$ ;;;IF PL NOL TST 2(R0) ;;;DUMP CHARARACTERC SOB R3,50$ ;;;LOOP1 CMP #<7600-40>,@#KISAR6 ;;;HAVE SENT 124K WORDS?F BNE 70$ ;;;IF NE NO;'60$: CMP (SP)+,(SP)+ ;;;CLEAN OFF STACK4 BR $CRSHT ;;;SUCCESS270$: TST (R1) ;;;DOES NEXT MEMORY LOCATION EXIST?) BCS 60$ ;;;IF CS NO (NONEXISTENT MEMORYC% ;;;TRAP CATCHER CAUGHT REFERENCE)T/ ADD #4,R2 ;;;UPDATE TU58 LOGICAL BLOCK NUMBER . ADD #40,@#KISAR6 ;;;POINT AT NEXT 1K WORDS OF ;;;PHYSICAL MEMORY$ JMP 15$ ;;;REPEAT 1K WORD TRANSFER.CKSM: ADD R5,R4 ;;;ADD 2ND WORD TO FIRST WITH) ADC R4 ;;;END AROUND TREATMENT OF C-BITA*XWAIT: TSTB 4(R0) ;;;DL11 TRANSMIT READY? BPL XWAIT ;;;IF PL NOP RETURN ;;;A&DEND: CMP (SP)+,(SP)+ ;;;RESTORE STACK .ENDC .IIF EQ, C$$CDA-12 CDA$MS=08 .IF DF CDA$MS!MS$$CD ;LOADABLE OR RESIDENT CRASH DRIVER; ; MS;R;; IF THE EXECUTIVE DOES NOT SUPPORT 22-BIT ADDRESSING, THISD:; ROUTINE DUMPS ALL OF PHYSICAL MEMORY (UP TO A MAXIMUM OF-; 124K WORDS) IN 512 BYTE BLOCKS AT 1600 BPI.;M;; IF THE EXECUTIVE SUPPORTS 22-BIT ADDRESSING, THIS ROUTINER>; DUMPS ALL OF PHYSICAL MEMORY IN 512 BYTE BLOCKS AT 1600 BPI.;?" .IF NE C$$CDA ;IF RESIDENT CRASH+PBNH== 0 ;;;BLOCK NUMBER IGNORED FOR TS11.PBNL== 0 ;;; .ENDC ; EQ C$$CDA;F&; **** IMPORTANT - PLEASE NOTE ****;SB; WITH LOADABLE CRASH DUMP SUPPORT, PBNL AND PBNH ARE DEFINED WITH=; GLOBAL DEFINITIONS IN THE BUILD FILE FOR EACH DRIVER. ANY (C; MODIFICATIONS MADE HERE TO PBNL OR PBNH MUST BE ALSO MADE IN THE M; CORRESPONDING BUILD FILE. ;B .IF DF, L$$CDAT ADD #12,MSCR10 MOV MSCR1,R5 ;;; ADDRESS OF COMMAND PACKET MUST .IFF ; DF L$$CDA ; GL003 7 MOV #<$MSCR1+12>,R5 ;;; ADDRESS OF COMMAND PACKET MUSTT .ENDC ; DF L$$CDA ; GL003+ BIC #3,R5 ;;;BE ON A DOUBLE WORD BOUNDARYS3 MOV #8.,-(R5) ;;;LENGTH OF COMMAND PACKET IN BYTES - CLR -(R5) ;;;UPPER 2 BITS OF COMMAND PACKETT ;;;ADDRESS .IF DF, L$$CDAV& MOV MSCR2,-(R5) ;;; LOW ORDER 16 BITS .IFF ; DF L$$CDAL( MOV #$MSCR2,-00``TADATADATADATADATADATADATADATADATA(R5) ;;; LOW ORDER 16 BITS .ENDC ; DF L$$CDA5 MOV #100004,-(R5) ;;;WANT TO "WRITE CHARACTERISTICS"C. MOV R5,R4 ;;;COPY POINTER TO COMMAND PACKET.% ;;;IF R4.EQ.R5, MS: BEING SET UP. . MOV R0,R1 ;;;FORM POINTER TO STATUS REGISTER TST -(R1) ;;; 1 CALL 200$ ;;;ISSUE COMMAND, WAIT FOR SUBSYSTEM,;# ;;;READY, AND HANDLE ANY ERRORSC2 MOV #142010,(R5) ;;;REWIND AND CLEAR VOLUME CHECK% CALL 200$ ;;;ISSUE COMMAND AND WAITC# MOV #100005,(R5)+ ;;;WANT TO WRITEF4 MOV #20000,(R5) ;;;ASSUME DATA TRANSFER VIA UMR #1. .IF DF, L$$CDA ; GL003 BIT #HF.UBM,@HFMSK ;;;UMPs ?W .IFF ; DF L$$CDA ; GL003R BIT #HF.UBM,@#$HFMSK ;;;UMPs ?C .ENDC ; DF L$$CDA ; GL003* BNE 10$ ;;;IF NE, YES. DT TRFR - UMR #1./ CLR (R5) ;;;Q BUS - NO UMR'S; START FROM @ 0.;*10$: TST (R5)+ ;;;R5 > CMD PKT, 3RD WORD.! CLR (R5)+ ;;;CLR HI ORD @ BITS.V. MOV #512.,(R5) ;;;512 BYTE PER DATA TRANSFER.% CLR @#UBMPR+4 ;;;INITIALIZE UMR #1 -. CLR @#UBMPR+6 ;;; USED TO MAP DATA TRANSFERS.7 BIS #60,@#SR3 ;;;ENABLE 22 BIT MAPPING AND UNIBUS MAP.$/ MOV #<1920./4>,R3 ;;;R3 - MAX # OF 4KW BLOCKS.;40$: MOV #<4*4>,R2 ;;;R2 - #512 BYTE RECORDS/4KW MEM BLOCK.C!50$: MOV #9.,R5 ;;;RETRY COUNT+1B# CALL 200$ ;;;ISSUE WRITE AND WAIT#. ADD #512.,2(R4) ;;;BUMP START ADDRESS OF DATA ADC 4(R4) ;;;5- SOB R2,50$ ;;;LOOP UNTIL REACH RECORD LIMITC ;;; (OR UNTIL ERROR IN 200$)8 ADD #<1024.*4*2>,@#UBMPR+4 ;;;BUMP ADDRESS OF UMR 1 BY " ADC @#UBMPR+6 ;;;4K WORDS  .IF DF, L$$CDA ; GL003, BIT #HF.UBM,@HFMSK ;;;USING UMR'S? ; GL003 .IFF ; DF L$$CDA ; GL003;% BIT #HF.UBM,@#$HFMSK ;;;USING UMR'S?4 .ENDC ; DF L$$CDA ; GL003 BEQ 60$ ;;;IF EQ, NO.V) MOV #20000,2(R4) ;;;DT TRF PER UMR #1 @.I'60$: DEC R3 ;;;WROTE MAX # 4KW BLOCKS?; BNE 40$ ;;;IF NE, NO.A;CA; NOTE THAT THE FOLLOWING BRANCH IS NEVER TAKEN IF 180$ IS FALLEN;@; INTO (R5 IS NEVER EQUAL TO R4, BECAUSE R5 IS A RETRY COUNT AND:; R4 IS AN ADDRESS, UNLESS 180$ IS BRANCHED TO FROM BELOW);D,180$: CMP R4,R5 ;;; MS: DEVICE BEING SETUP?# BEQ 280$ ;;;IF EQ YES, ERROR EXITD1 MOV #100011,(R4) ;;;WANT TO FORMAT (WRITE A TAPE4 ;;;MARK) MOV R4,(R1) ;;;ISSUE COMMAND$190$: TSTB (R0) ;;;SUBSYSTEM READY? BPL 190$ ;;;IF PL NO' JMP $CRSHT ;;; SUCCESSFUL TERMINATIONE(200$: MOV R3,-(SP) ;;;SAVE BLOCK COUNTER#210$: MOV R4,(R1) ;;;ISSUE COMMAND0$225$: TSTB (R0) ;;;SUBSYSTEM READY? BPL 225$ ;;;IF PL NO MOV (R0),R3 ;;;GET STATUSA BMI 250$ ;;;IF MI ERRORC& MOV (SP)+,R3 ;;;RESTORE BLOCK COUNTER/ BIC #1000,(R4) ;;;MAKE SURE "WRITE DATA RETRY"E ;;;BIT IS CLEARM RETURN ;;;  .IF DF, L$$CDA ; GL003250$: ADD #6,MSCR3 ; GL003, BIT #1,@MSCR3 ;;;END OF TAPE SEEN? ; GL003 .IFF ; DF L$$CDA ; GL003 ,250$: BIT #1,@#$MSCR3+6 ;;;END OF TAPE SEEN? .ENDC ; DF L$$CDA ; GL003 BNE 180$ ;;;IF NE YES1$ BIT #4000,R3 ;;;NONEXISTENT MEMORY? BNE 180$ ;;;IF NE YESL+ BIC #^C<16>,R3 ;;;ISOLATE TERMINATION CODEU+ CMP #12,R3 ;;;RECOVERABLE ERROR (TAPE HAS  ;;;NOT MOVED)? BEQ 270$ ;;;IF EQ YESM+ CMP #10,R3 ;;;RECOVERABLE ERROR (TAPE HASL ;;;MOVED ONE RECORD)?! BNE 280$ ;;;IF NE NO, I/O ERRORD4 BIS #1000,(R4) ;;;CHANGE COMMAND TO "SPACE REVERSE, ;;;ERASE, WRITE DATA"$'270$: DEC R5 ;;;EXHAUSTED RETRY COUNT?; BNE 210$ ;;;IF NE NO*280$: TST (SP)+ ;;;DISCARD RETURN ADDRESS .ENDC ; DF CDA$MS!MS$$CDX8 .IIF EQ C$$CDA-13 .ERROR C$$CDA ;DX CRASH NOT SUPPORTED8 .IIF EQ C$$CDA-14 .ERROR C$$CDA ;DY CRASH NOT SUPPORTED8 .IIF EQ C$$CDA-15 .ERROR C$$CDA ;MF CRASH NOT SUPPORTED .IIF EQ C$$CDA-16 CDA$DU=0T .IF DF CDA$DU!H$$GEN!DU$$CD;B; DU;;>; THIS ROUTINE DUMPS ALL OF MEMORY ONTO A REMOVABLE MEDIA MSCP?; TYPE DEVICE. CURRENTLY THE VALID DEVICES ARE RA60, RC25, ANDD; RX50.U;;" .IF NE C$$CDA ;IF RESIDENT CRASH'PBNH== 0 ;;;STARTING BLOCK NUMBER ... PBNL== 1 ;;;... .ENDC ; EQ C$$CDA;$&; **** IMPORTANT - PLEASE NOTE ****;$B; WITH LOADABLE CRASH DUMP SUPPORT, PBNL AND PBNH ARE DEFINED WITH=; GLOBAL DEFINITIONS IN TH00`D`NE BUILD FILE FOR EACH DRIVER. ANY AC; MODIFICATIONS MADE HERE TO PBNL OR PBNH MUST BE ALSO MADE IN THE U; CORRESPONDING BUILD FILE. ;E,MSCPDV: CALL CKSUM ;;;CHECKSUM DISK ADDRESS;I; AT THIS TIME:0;C; R0=CSR ADDRESS; R3=UNIT NUMBER#; CONTROLLER IS IN AN UNKNOWN STATE=;  .IF EQ,C$$CDA ; LOADABLE CRASHL% CLR RELOC ;;;CLEAR RELOCATION WORDS$ CLR RELOC+2 .ENDC ; EQ C$$CDA *5 MOV #$DUCSH,R2 ;;;GET ADDRESS OF INTIALIZATION TABLE . MOV (R2)+,R4 ;;;GET ADDRESS OF COMMAND PACKET/ MOV (R2)+,R5 ;;;GET ADDRESS OF RESPONSE PACKET : MOVB R3,P.UNIT(R4) ;;;STORE UNIT NUMBER IN COMMAND PACKET* CLR R3 ;;;ASSUME EXTENDED MEMORY SUPPORT! MOV #4000,R1 ;;;SETUP FOR STEP 1I* MOV R1,(R0)+ ;;;INITIALIZE PORT INTERFACE(10$: TST (R0) ;;;ANY CONTROLLER ERRORS? BPL 12$ ;;;IF PL NOE JMP WERR ;;;ERROR ROUTINE112$: BIT R1,(R0) ;;;IS CONTROLLER AT RIGHT STEP?2 BEQ 10$ ;;;IF EQ NO, WAITM' CMP #4000,R1 ;;;DID WE JUST DO STEP 1?T BNE 15$ ;;;IF NE NOR .IF EQ,C$$CDA ; LOADABLE CRASH ;(; FIGURE RELOCATION WORD:EC; - IF 22 BIT ADDRESSING, THEN THE RELOCATION BIAS WILL BE ADDED TOA8; THE VIRTUAL ADDRESS TO GIVE A 22 BIT PHYSICAL ADDRESSE; - IF NOT, THE RELOCATION BIAS WILL BE USED AS THE UMR VALUE AND THE.; PHYSICAL ADDRESS WILL BE MAPPED USING UMR 5; , MOV @KISA5,RELOC ;;;ADDRESS OF CODE ; GL003 .REPT 6 ASL RELOC ;;;CHANGE TO 22 BITP ROL RELOC+2 .ENDR CLR 4(R2) ;;;CLEAR HIGH WORD% MOV #RINGS,2(R2) ;;;ADDRESS OF RINGSN6 BIT #1000,(R0) ;;;CONTROLLER SUPPORT EXTENDED MEMORY?$ BEQ 13$ ;;; EQ, NO - MUST USE UMRS- SUB #120000,RELOC ;;;SUBTRACT VIRTUAL 120000A/ SBC RELOC+2 ;;;TO MAKE ADDR RELOCATION EASIERL. ADD RELOC,2(R2) ;;;ADD RELOCATION (LOW WORD) ADC 4(R2) ;;;ADD THE CARRY0 ADD RELOC+2,4(R2) ;;;ADD RELOCATION (HIGH WORD)( BR 15$ ;;;BRANCH AROUND UMR SETUP CODE213$: MOV RELOC,@#UBMPR+24;;;SET UP UMR 5 ; GL003" MOV RELOC+2,@#UBMPR+26 ; GL003 COM R3 ;;;SET UMR FLAG .ENDC ; EQ C$$CDA .IF NE,C$$CDA ; RESIDENT CRASH6 BIT #1000,(R0) ;;;CONTROLLER SUPPORT EXTENDED MEMORY? BNE 15$ ;;;IF EQ YES COM R3 ;;;NO, SET UMR FLAG .ENDC ; NE C$$CDA 315$: MOV (R2)+,(R0) ;;;SEND STEP WORD TO CONTROLLER; ASL R1 ;;;MOVE STEP BIT BPL 10$ ;;;IF PL KEEP STEPINGD- MOV (R2)+,R2 ;;;GET ADDRESS OF RESPONSE RINGB .IF EQ, C$$CDA ; LOADABLE CRASH# TST R3 ;;;EXTENDED MEMORY SUPPORTU$ BNE 17$ ;;;NE, NO - MUST USE UMR'S$ MOV R5,(R2) ;;;RESET RESPONSE RING- ADD RELOC,(R2)+ ;;;ADD RELOCATION (LOW WORD)I+ MOV RELOC+2,(R2) ;;;RELOCATION (HIGH WORD)U ADC (R2)+ ;;;ADD THE CARRY# MOV R4,(R2) ;;;RESET COMMAND RING - ADD RELOC,(R2)+ ;;;ADD RELOCATION (LOW WORD)2+ MOV RELOC+2,(R2) ;;;RELOCATION (HIGH WORD)L ADC (R2) ;;;ADD THE CARRY1% CMP -(R2),-(R2) ;;;DECREMENT 2 WORDSR BR 18$ ;;;BRANCH AROUND RESETS .ENDC ; EQ C$$CDA(17$: MOV R5,(R2)+ ;;;RESET RESPONSE RING# MOV R4,2(R2) ;;;RESET COMMAND RINGT018$: CALL RSET ;;;RESET OWNERSHIP WORDS IN RING;D; CONTROLLER IS NOW INITIALIZEDO&; NEXT, PUT CONTROLLER AND UNIT ONLINE;H; R0=CSR ADDRESS +2+; R1=100000 ("OWN")M,; R2=ADDRESS OF SECOND WORD OF RESPONSE RING; R3=EXTENDED MEMORY FLAGO; R4=COMMAND PACKET ADDRESS;; R5=RESPONSE PACKET ADDRESS;26 MOVB #OP.ONL,P.OPCD(R4) ;;;LOAD ONLINE FUNCTION CODE' CLR P.BCNT(R4) ;;;NO WORD COUNT NEEDED# CALL IO ;;;DO THE ONLINE FUNCTION): MOVB #OP.GUS,P.OPCD(R4) ;;;LOAD GET UNIT STATUS FUNCTION CALL IO ;;;DO THE GET STATUS< BIT #UF.RMV,P.UNFL(R5) ;;;IS THIS A REMOVEABLE MEDIA UNIT? BNE 20$ ;;;IF NE YES# .IF DF, L$$CDA ;;; LOADABLE CRASH MOV CRMS6,R1 ;;; ILLEGAL DEVICE .IFF ; DF L$$CDAO! MOV #$CRMS6,R1 ;;;ILLEGAL DEVICE .ENDC ; DF L$$CDA) BR WERR1 ;;;PRINT MESSAGE AND TRY AGAINV=20$: MOVB #OP.WR,P.OPCD(R4) ;;;LOAD WRITE DATA FUNCTION CODE(2 MOV #<512.*4*4>,P.BCNT(R4) ;;;BYTE COUNT FOR 4KW$ .IF DF, L$$CDA ;;; LOADABLE CRASH* MOV @CRSB2,P.LBN(R4) ;;; SET STARTING LBN MOV @CRSBN,P.LBN+2(R4) ;;; ...V .IFF ; DF L$$CDAI. MOV @#$CRSBN+2,P.LBN(R4) ;;; SET STARTING LBN00a`TADATADATADATADATADATADATADATADATA! MOV @#$CRSBN,P.LBN+2(R4) ;;; ...R .ENDC ; DF L$$CDA& CLR P.BUFF(R4) ;;;START AT PHYSICAL 0 CLR P.BUFF+2(R4) ;;;.... CLR R1 ;;;Init counter for every 4KW written( BIS #60,@#SR3 ;;;ENABLE 22-BIT AND UMRS* TST R3 ;;;EXTENDED ADDRESSING SUPPORTED? BEQ 30$ ;;;IF EQ YES CLR @#UBMPR+4 ;;;NO, USE UMRS CLR @#UBMPR+6 ;;;... 8 MOV #20000,P.BUFF(R4) ;;;SET BUFFER ADDRESS THRU UMR 1;G7; ALL INITIAL VALUES ARE SETUP. NOW TRANSFER THE DATA.D;"30$: CALL IO ;;;WRITE 4KW TO DISK* INC R1 ;;; # of 4KW count <== count + 1 9 CMP #511.,R1 ;;; Wrote MAX memory (511.*4KW = 2044KW) ? H% BEQ $CRSHT ;;; If EQ, yes all done R1 ADD #<4*4>,P.LBN(R4);;;MOVE TO NEXT STARTING LBN0 ADC P.LBN+2(R4) ;;;...N& TST R3 ;;;EXTENDED MEMORY SUPPORTED? BEQ 40$ ;;;IF EQ YES0 ADD P.BCNT(R4),@#UBMPR+4 ;;;UPDATE UMR ADDRESS ADC @#UBMPR+6 ;;;...# BR 30$ ;;;KEEP WRITING840$: ADD P.BCNT(R4),P.BUFF(R4) ;;;UPDATE BUFFER ADDRESS ADC P.BUFF+2(R4) ;;;... BR 30$ ;;;; =; DO THE I/O AND CHECK FOR ERRORS. THE ONLY VALID ERRORS ARE *; NON-EXISTANT MEMORY AND INVALID COMMAND.;4 .ENABL LSB?4IO: TST -2(R0) ;;;FORCE CONTROLLER TO LOOK AT RINGS*10$: TST (R0) ;;;CONTROLLER STILL ONLINE? BMI 20$ ;;;IF MI, NO.T. TST (R2) ;;;CONTROLLER SEND BACK A RESPONSE?1 BMI 10$ ;;;IF MI NO, IT STILL "OWNS" THE PACKETU TST P.STS(R5) ;;;ANY ERRORS?. BNE 20$ ;;;IF NE YES1RSET: BIS #100000,(R2) ;;;SET OWN FLAG INTO RINGSF BIS #100000,4(R2) ;;;...4 RETURN ;;;0 20$: TST (SP)+ ;;;CLEANUP STACK/ CMP #ST.NXM,P.STS(R5) ;;;NON-EXISTANT MEMORY?X# BEQ $CRSHT ;;;IF EQ YES, ALL DONE44 CMPB #ST.CMD,P.STS(R5) ;;;DID WE OVERRUN THE DISK?# BEQ $CRSHT ;;;IF EQ YES, ALL DONET! ;;;NO, FATAL ERROR, FALL THRUI .DSABL LSBT .ENDC ; DF CDA$DU!H$$GEN!DU$$CD .PAGE .IIF EQ, C$$CDA-17 CDA$MU=08 .IF DF CDA$MU!MU$$CD ;LOADABLE OR RESIDENT CRASH DRIVER; ; MU;SG; IF 22-BIT ADDRESSING IS NOT SUPPORTED, THEN THIS ROUTINE DUMPS ALL ;B; OF PHYSICAL MEMORY (TO A MAX OF 124K WORDS) IN 512 BYTE BLOCKS.;P?; IF 22-BIT ADDRESSING IS SUPPORTED, THEN THIS ROUTINE DUMPS L-; ALL OF PHYSICAL MEMORY IN 512 BYTE BLOCKS.R;T" .IF NE C$$CDA ;IF RESIDENT CRASH1PBNH== 0 ;;;BLOCK NUMBER IGNORED FOR MU: DEVICE PBNL== 0 ;;; .ENDC ; NE C$$CDA; RESTRICTION:;Q@; WITH LOADABLE CRASH DUMP SUPPORT, PBNL .AND. PBNH ARE DEFINED ?; WITH GLOBAL DEFINITIONS IN THE BUILD FILE FOR EACH DRIVER. P;E@; ANY MODIFICATIONS MADE HERE TO PBNL OR PBNH MUST BE ALSO MADE #; IN THE CORRESPONDING BUILD FILE.;7; R0 - CSR, R3 = UNIT NUMBER, CNTRL IN AN UNKNOWN STATEM .IF EQ C$$CDA ; LOADABLE CRASH& CLR RELOC ;;; Clear relocation words CLR RELOC+2 .ENDC ; EQ C$$CDA1 MOV #$MUCSH,R2 ;;; R2 > MU: Initialization table% MOV (R2)+,R4 ;;; R4 > Command packet& MOV (R2)+,R5 ;;; R5 > Response packet6 MOVB R3,P.UNIT(R4) ;;; Command packet <-- Unit number' CLR R3 ;;; R3 - IF EQ, THEN 22 bit @.E( MOV #4000,R1 ;;; R1 - setup for Step 1./ MOV R1,(R0)+ ;;; Initialize the MU: controller %10$: TST (R0) ;;; Controller errors?I BPL 12$ ;;; IF PL, No.& JMP WERR ;;; Else - indicate error.112$: BIT R1,(R0) ;;; Controller at correct step?R& BEQ 10$ ;;; IF EQ, No - Wait for it.' CMP #4000,R1 ;;; Just complete Step 1? BNE 15$ ;;; IF NE, No. .PAGE .IF EQ C$$CDA ; LOADABLE CRASH; Setup relocation words:(; >; If 22 bit @, THEN the relocation bias will be added to the(; virtual @ to give a 22 bit physical @.;rB; If not, THEN the relocation bias will be used as the UMR value0; and the physical @ will be mapped using UMR 5./ MOV @KISA5,RELOC ;;; > MU: crash code. ; GL0032 .REPT 6 ASL RELOC ;;; Convert to c ROL RELOC+2 ;;; 22 bit @.N .ENDR$ CLR 4(R2) ;;; Clear high (@) word ) MOV #RINGS,2(R2) ;;; and setup Rings @.E4 BIT #1000,(R0) ;;; MU: controller in 22 bit @ mode?# BEQ 13$ ;;; IF EQ, NO - use UMRS. ; Setup 22 bit RING @.' SUB #120000,RELOC ;;; Subtract APR #5 2' SBC RELOC+2 ;;; virtual @ (120000).e) ADD RELOC,2(R2) ;;; RELOC,+2 > physical l00 aD`N ADC 4(R2) ;;; 22 bit @ $ ADD RELOC+2,4(R2) ;;; of Rings.% BR 15$ ;;; 22 bit @ of Rings setup..; Setup Rings @ via UMR #5. (13$: MOV RELOC,@#UBMPR+24 ;;; Use UMR #5( MOV RELOC+2,@#UBMPR+26 ;;; for Rings @.* COM R3 ;;; R3 - IF NEQ, THEN using UMRs. .ENDC ; EQ C$$CDA .IF NE,C$$CDA ; RESIDENT CRASH4 BIT #1000,(R0) ;;; MU: controller in 22 bit @ mode? BNE 15$ ;;; IF NEQ, No.S* COM R3 ;;; R3 - IF NEQ, THEN using UMRs. .ENDC ; NE C$$CDA:15$: MOV (R2)+,(R0) ;;; Next Init step word to controller.) ASL R1 ;;; Prepare for next Init phase.& BPL 10$ ;;; IF PL, more Init phases.% MOV (R2)+,R2 ;;; R2 > Response ring.V .PAGE .IF EQ C$$CDA ; LOADABLE CRASH TST R3 ;;; 22 bit @ mode?.# BNE 17$ ;;; IF NE, No - use UMRs.g; 22 bit @ modeE MOV R5,(R2) ;;; Update D ADD RELOC,(R2)+ ;;; > to 0! MOV RELOC+2,(R2) ;;; Response t ADC (R2)+ ;;; ring. MOV R4,(R2) ;;; Update  ADD RELOC,(R2)+ ;;; > to . MOV RELOC+2,(R2) ;;; Command2 ADC (R2) ;;; ring.p CMP -(R2),-(R2) ;;; R2 > RSP+2; BR 18$ ;;; and cont.a .ENDC ; EQ C$$CDA ; Use UMRs017$: MOV R5,(R2)+ ;;; Update > to Response ring., MOV R4,2(R2) ;;; Update > to Response ring.*18$: CALL RSET ;;; Controller owns rings.+ MOV #401,-2(R4) ;;; Setup virt ckt/credit.V9; Controller initialized - put controller and unit onlineL;2!; R0 > Device SA register (CSR+2) ; R1 = 100000 ("OWN" mask) ; R2 > RSP+2 A); R3 IF EQ - 22 BIT @, ELSE NE - UMRs.2+; R4 > Command packet R5 > Response packetC;-"; Clear the command packet fields.) MOV R4,R1 ;;; R1 > Command packet area. 5 MOV -4(R4),-(SP) ;;; Stack has size of CMD PKT area.(117$: CLR (R1)+ ;;; Clear CMD PKT area.. SUB #2,(SP) ;;; At the end of CMD PKT area? ) BNE 117$ ;;; IF NE, No - keep clearing.V# TST (SP)+ ;;; Maintain the stack.n#; Setup controller characteristics.D= MOVB #OP.SCC,P.OPCD(R4) ;;; Setup CONTROLLER characteristicsR3 MOV #0,P.CNTF(R4) ;;; for no extraneous messages.  CALL IO ;;; Issue request.; ONLINE the controller.* MOVB #OP.ONL,P.OPCD(R4) ;;; Setup ONLINE # CLR P.BCNT(R4) ;;; function code.( CALL IO ;;; Issue request.;Rewind the unit2 MOVB #OP.REP,P.OPCD(R4) ;;; Setup to Reposition -0 MOV #MD.CSE!MD.RWD,P.MOD(R4) ;;; Rewind to BOT. CALL IO ;;; Issue request.'; Write 512. byte memory areas to tape. ; MOVB #OP.WR,P.OPCD(R4) ;;; Setup WRITE DATA function code,;/ MOV #512.,P.BCNT(R4) ;;; 512. byte count andN3 MOV #MD.CSE,P.MOD(R4) ;;; no serious exceptions.; CLR (R4) ;;; CMD Ref <-- 0.c' CLR P.BUFF(R4) ;;; Assume 22 bit @ andS, CLR P.BUFF+2(R4) ;;; start at physical 0.1 BIS #60,@#SR3 ;;; Enable 22-bit @ mode and UMRS.t TST R3 ;;; 22 bit @ mode?; BEQ 20$ ;;; IF EQ, Yes.V& CLR @#UBMPR+4 ;;; Initialize UMR #1 -/ CLR @#UBMPR+6 ;;; used to map data transfers.b:19$: MOV #20000,P.BUFF(R4) ;;; Data transfer per UMR #1 @.<20$: MOV #<4*4>,R1 ;;; R1-#512 byte records/4KW mem block."25$: INC (R4) ;;; CMD Ref <-- +1.); Cmd PKT setup - write 512. byte record.4)30$: CALL IO ;;; Write 512. byte record. 4 CMP #<2044.*4>,(R4) ;;; Wrote max allowed memory ? , BEQ WTMK ;;; If EQ yes, write TMK, & done & ADD #512.,P.BUFF(R4) ;;; > next 512. & ADC P.BUFF+2(R4) ;;; byte of memory.1 SOB R1,25$ ;;; Keep writing until 4KW boundary.6 TST R3 ;;; 22 bit @ mode?e BEQ 20$ ;;; IF EQ, Yes.F1 ADD #<1024.*4*2>,@#UBMPR+4 ;;; Increment UMR #1 4 ADC @#UBMPR+6 ;;; by 4KW.d) BR 19$ ;;; Write next 4KW memory block.fH; Start I/O and check for errors - only valid error is non-existing mem.'; All other errors are unrecoverable.) .ENABL LSBx4IO: MOV #60,-4(R5) ;;; Response packet - max lenght.4 TST -2(R0) ;;; Start I/O - Controller polls rings.)10$: TST (R0) ;;; Controller yet ONLINE?R BPL 15$ ;;; IF PL, OK.& TST (SP)+ ;;; Else - maintain stack,( MOV #SAMSG,R1 ;;; R1 > SA error message BR WERR1 ;;; and issue it./15$: TST (R2) ;;; Controller yet own RSP ring?9 BMI 10$ ;;; IF MI, Yes.y MOV P.STS(R5),-(SP) ;;; Isolate BIC #^C<37>,(SP) ;;; end code.00awaTADATADATADATADATADATADATADATADATA TST (SP)+ ;;; Success?0 BNE 20$ ;;; IF NE, No -error, can't handle it.-RSET: BIS #100000,(R2) ;;; Controller 'OWNS' .# BIS #100000,4(R2) ;;; the rings.l RETURN #20$: TST (SP)+ ;;; Maintain stack.e/ CMP #ST.NXM,P.STS(R5) ;;; Non-existing memory? . BEQ WTMK ;;; IF EQ, Yes - write TMK and end.. CMP #ST.HST,P.STS(R5) ;;; Max allowed memory?. BEQ WTMK ;;; IF EQ, Yes - write TMK and end.5 MOV #PSTMSG,R1 ;;; Else - R1 > P.STS error message.S/; Write a TMK and complete Crash to MU: device.T8WTMK: CMPB #OP.WTM,P.OPCD(R4) ;;; Already tried to WTMK?, BEQ WERR1 ;;; IF EQ, Yes - then end crash., MOVB #OP.WTM,P.OPCD(R4) ;;; Write a TMK and3 MOV #MD.CSE,P.MOD(R4) ;;; no serious exceptions.s* CALL RSET ;;; Controller owns the rings. CALL IO ;;; Issue request.& CMP #PSTMSG,R1 ;;; Had a P.STS error?, BEQ WERR1 ;;; IF EQ, Yes - then end crash. BR $CRSHT ;;; All done. .DSABL LSBM .ENDC ; DF CDA$MU!MU$$CD> .PAGE .IFT ; DF L$$CDA!R$CRSH;+E; WHEN AN ERROR IS DETECTED BY A CRASH ROUTINE, CONTROL IS TRANSFERED E; HERE EITHER BY A JUMP, BR, OR BY SIMPLY FALLING THRU TO THIS SIMPLE.; ERROR HANDLER.;- .IF DF, L$$CDAD)WERR: MOV CRMS3,R1 ;;; INDICATE I/O ERROR .IFF ; DF L$$CDAo*WERR: MOV #$CRMS3,R1 ;;;INDICATE I/O ERROR .ENDC ; DF L$$CDA%WERR1: CALL TYPE ;;;TYPE OUT MESSAGEF JMP AGAIN ;;;WAIT FOR THE USER;+E; AFTER THE DUMP HAS SUCCESSFULLY COMPLETED, THE CRASH ROUTINE SHOULDE; BRANCH TO HERE SO THAT THE PROCESSOR MAY BE HALTED AND ANOTHER DUMPH ; BE TAKEN.T;-$CRSHT: HALT ;;;WAIT FOR USERJ , .IF DF L$$CDA JMP @CRALTT .IFF ;DF L$$CDA JMP @#$CRALT .ENDC ;DF L$$CDA .PAGE* .IF DF DU$$CD!MU$$CD ; DU/MU CRASH DRIVER#; CRASH DATA BASE FOR DU/MU DEVICES;I; RESTRICTION - any changes to this table must ALSO BE MADE IN LOWCR.MAC.G8; For Resident crash - this is in exec CRASH module area8; and for loadable CRASH, it's in the DU/MU crash area.; COMMAND AND RESPONSE PACKETS .WORD 60 ; Packet length - 48.3 .WORD 1 ; Virtual circuit and credit/debit field.'CMDPKT: .WORD 1 ; Command packet area. .REPT 23. .WORD 0 ; initially - 0s. .ENDR .BLKW 2 ; Envelope.D*RSPPKT: .BLKW 24. ; Response packet area.; COMMAND RINGSI .BLKW 2RINGS:+RSP: .WORD RSPPKT ; Response packet ring -E/ .WORD 100000 ; Packet "owned" by controller.i*CMD: .WORD CMDPKT ; Command packet ring -/ .WORD 100000 ; Packet "owned" by controller.; INITIALIZATION TABLE$DUCSH::%$MUCSH::.WORD CMDPKT ; > CMD packet.  .WORD RSPPKT ; > RSP packet.7 .WORD 100000 ; STEP 1 - lenght of rings,IE,Int vec/4.E .WORD RINGS ; 2 - lo ord , .WORD 0 ; 3 - and hi ord @ of Rings. .WORD 1 ; 4.  .WORD RSP ; > Response ringI#RELOC: .WORD 0,0 ;RELOCATION WORDS; .ENDC ; DF DU$$CD!MU$$CD.' .IF DF CDA$MU!MU$$CD ; MU CRASH DRIVERrP.NDCD = P.OPCDK .NLIST BEXc;SAMSG: .ASCIZ <15><12><12>!CRASH -- I/O [SA] DEVICE ERROR;!?PSTMSG: .ASCIZ <15><12><12>!CRASH -- I/O (P.STS) DEVICE ERROR;! .LIST BEX .ENDC ; DF CDA$MU!MU$$CDe .PAGE .IF DF H$$GEN, .IIF EQ C$$CDA-7, PBNL==2 ;DEFAULT TO RL11 .ENDC .ENDC ; DF L$$CDA!R$CRSH  .ENDC ; EQ C$$CDA-20 .ENDC ;C$$CDA .ENDD RSP ; > Response ringI#RELOC: .WORD 0,0 ;RELOCATION WORDS; .ENDC ; DF DU$$CD!MU$$CD.' .IF DF CDA$MU!MU$$CD ; MU CRASH DRIVERrP.NDCD = P.OPCDK .NLIST BEXc;SAMSG: .ASCIZ <15><12><12>!CRASH -- I/O [SA] DEVICE ERROR;!?PSTMSG: .ASCIZ <15><12><12>!CRASH -- I/O (P.ST .TITLE CRDRV .IDENT /09.00/C;46; COPYRIGHT (C) 1983 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;R<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;R; D. N. CUTLER 3-MAR-74C;R; MODIFIED FOR M-PLUS V2.0 BY:;R ; A. GROUPEB ; P. J. CARR;B; MODIFIED BY:;R; P. J. CARR 10-FEB-82 08.01; $; PJC044 -- CORRECT DETACH FUNCTION;I; P. J. CARR 8-APR-82 08.02;B3; PJC050 -- CHECK FOR CARD DO00waD`NNE CONDITION IN CRINTD; ; P. J. CARR 2-JUN-82 08.03 ;34; PJC057 -- CORRECT PROCESSING OF PICK CHECK ERRORS;.; P. J. CARR 16-AUG-82 08.04;D6; PJC062 -- CORRECT FOR LAST CARD BEFORE HOPPER ERROR; BEING READ AS BLANKS; E; D. MAILLOUX 28-MAR-82 08.057;/; DMM053 -- CORRECT USE OF ALLOCATED AST BLOCKP;;.$; CR11 CARD READER CONTROLLER DRIVER; ; MACRO LIBRARY CALLS ; # .MCALL ABODF$,HWDDF$,PKTDF$,UCBDF$" ABODF$ ;DEFINE TASK ABORT CODES% HWDDF$ ;DEFINE HARDWARE REGISTERSN$ PKTDF$ ;DEFINE I/O PACKET OFFSETS UCBDF$ ;DEFINE UCB OFFSETST;E; EQUATED SYMBOLS ;O ASTSIZ= 16. ;SIZE OF AST BLOCK)STKSIZ= 14. ;SIZE OF STACK IN AST BLOCKF;O; CR11 DEVICE REGISTER OFFSETS;N.CRCS= 0 ;CARD READER CONTROL STATUS REGISTER"CRDB= 2 ;CARD READER DATA BUFFER;L%; CARD READER CONTROL STATUS REGISTERL; ERR= 100000 ;COMBINED ERROR CRDONE= 40000 ;CARD DONE#HOPERR= 20000 ;HOPPER CHECK ERRORAMTNERR= 10000 ;MOTION ERRORNTIMERR= 4000 ;TIMING ERROR#TRONL= 2000 ;TRANSITION TO ONLINEFBUSY= 1000 ;BUSY(READY= 400 ;ONLINE, READY TO READ (=0),DONE= 200 ;COLUMN OF DATA IS READY IN CRDBIE= 100 ;INTERRUPT ENABLEREAD= 1 ;READ $TIMERR= 4000 ;TIMING ERROR (U.CW2)#; CARD READER CONTROL BLOCK OFFSETS2;C0STRBF=U.CNT+2 ;STARTING ADDRESS OF DATA BUFFER/CURBF=U.CNT+4 ;CURRENT ADDRESS IN DATA BUFFERR0EOFCL=U.CNT+6 ;NUMBER OF COLUMNS FOR VALID EOF2EOFCT=U.CNT+7 ;NUMBER OF EOF PUNCHES ENCOUNTERED(CCOLC=U.CNT+10 ;CURRENT COLUMN COUNTER-CCOL1=U.CNT+12 ;CONTENTS OF CARD COLUMN ONE;=; SPECIAL CARD PUNCH PATTERNS=;-CREOF=7417 ;END OF FILE (12-11-0-1-6-7-8-9) +CR026=4242 ;TRANSLATE 026 CODE (12-2-4-8)/CR029=5252 ;TRANSLATE 029 CODE (12-0-2-4-6-8)A;O ; LOCAL DATA ; ; 029 TRANSLATION TABLEN;DTB029: .BYTE 40 ;SPACE= .BYTE 61 ;1E .BYTE 62 ;2A .BYTE 63 ;3C .BYTE 64 ;4M .BYTE 65 ;5F .BYTE 66 ;6O .BYTE 67 ;7N .BYTE 70 ;8N .BYTE 40 ;EMPTYC .BYTE 72 ;:; .BYTE 43 ;#C .BYTE 100 ;@ .BYTE 47 ;'N .BYTE 75 ;=M .BYTE 42 ;" .BYTE 71 ;9N .BYTE 60 ;0 .BYTE 57 ;/  .BYTE 123 ;S .BYTE 124 ;T .BYTE 125 ;U .BYTE 126 ;V .BYTE 127 ;W .BYTE 130 ;X .BYTE 131 ;Y .BYTE 40 ;EMPTY .BYTE 134 ;\ .BYTE 54 ;, .BYTE 45 ;%O .BYTE 137 ; .BYTE 76 ;> .BYTE 77 ;?E .BYTE 132 ;Z .BYTE 55 ;-E .BYTE 112 ;J .BYTE 113 ;K .BYTE 114 ;L .BYTE 115 ;M .BYTE 116 ;N .BYTE 117 ;O .BYTE 120 ;P .BYTE 121 ;Q .BYTE 40 ;EMPTYE .BYTE 135 ;] .BYTE 44 ;$E .BYTE 52 ;*E .BYTE 51 ;)E .BYTE 73 ;;E .BYTE 136 ;^ .BYTE 122 ;R .BYTE 46 ;&E .BYTE 101 ;A .BYTE 102 ;B .BYTE 103 ;C .BYTE 104 ;D .BYTE 105 ;E .BYTE 106 ;F .BYTE 107 ;G .BYTE 110 ;H .BYTE 40 ;EMPTYE .BYTE 133 ;[ .BYTE 56 ;.E .BYTE 74 ;E .BYTE 46 ;&E .BYTE 122 ;R .BYTE 53 ;+E .BYTE 101 ;A .BYTE 102 ;B .BYTE 103 ;C .BYTE 104 ;D .BYTE 105 ;E .BYTE 106 ;F .BYTE 107 ;G .BYTE 110 ;H .BYTE 40 ;EMPTYE .BY00w%aaTADATADATADATADATADATADATADATADATATE 77 ;?E .BYTE 56 ;.E .BYTE 51 ;)E .BYTE 135 ;] .BYTE 74 ;; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.; ; INPUTS:C;I:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;N ; OUTPUTS:;QE; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAIT-RE; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-T; ATION IS INITIATED. ;- .ENABL LSBN%CRINI: GTPKT$ CR,C$$R11,CRPWF,UCBSV,T .;S1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:Q;E'; R1=ADDRESS OF THE I/O REQUEST PACKET. -; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.A; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK. :; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;E(; CARD READER I/O REQUEST PACKET FORMAT:;R"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTER TASK.G@; WD. 03 -- POINTER TO THE SECOND WORD IN REQUESTER TASK HEADER.J; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTER TASK HEADER (UCB).'; WD. 05 -- I/O FUNCTION CODE (IO.RLB).E0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.D; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT +140000).3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.*; WD. 12 -- RELOCATION BIAS OF I/O BUFFER.+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.E-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.N; WD. 15 -- NOT USED.K; WD. 16 -- NOT USED.O; WD. 17 -- NOT USED. ; WD. 20 -- NOT USED.H;E+ CLR STRBF(R5) ;ASSUME ALLOCATION FAILURE )1 CALL CRATT ;IS IT AN ATTACH OR DETACH FUNCTION?. BCS 160$ ;IF CS YESN/ MOV #80.,R0 ;ASSUME ASCII OR PACKED HOLLERITHS9 MOVB I.FCN(R1),U.CW2(R5) ;SAVE SUBFUNCTION MODIFIER BITS * BPL 10$ ;IF PL ASCII OR PACKED HOLLERITH) ASL R0 ;BINARY READ REQUIRES 160. BYTES .10$: MOV R0,R1 ;SET LENGTH OF BUFFER REQUIRED# CALL $ALOCB ;ALLOCATE DATA BUFFERR% BCS 90$ ;IF CS, NO BUFFER AVAILABLE-/ MOV R0,STRBF(R5) ;SAVE STARTING BUFFER ADDRESS 1 BICB #US.ABO,U.STS(R5) ;CLEAR ABORT REQUEST FLAG ;R; INITIATE CARD READ; 120$: MOV R5,R3 ;CALCULATE ADDRESS OF CARD READERN ADD #STRBF,R3 ;CONTROL BLOCKR4 MOV (R3)+,(R3)+ ;SET CURRENT ADDRESS IN DATA BUFFER0 MOVB #1,(R3) ;ASSUME ASCII OR PACKET HOLLERITH TSTB U.CW2(R5) ;BINARY READ?I BPL 30$ ;IF PL NO0- MOVB #8.,(R3) ;SET EOF COUNT FOR BINARY READ -30$: MOVB (R3)+,(R3)+ ;SET EOF COLUMN COUNTER% CLR (R3) ;CLEAR CARD COLUMN COUNTER. MOV S.CSR(R4),R2 ;GET CARD READER CSR ADDRESS BIT #READY,(R2)+ ;READY?C BNE CROUT ;IF NE NO 3 MOVB S.ITM(R4),S.CTM(R4) ;SET DEVICE TIMEOUT COUNTC1 MOV (R2),R0 ;READ DATA BUFFER CLEAR DONE IF SETO( MOV #,-(R2) ;START CARD MOTION;RK; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUSES.K; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDITIONO3; THAT COULD EXIST IN RESTARTING THE I/O OPERATION. ;N CRPWF: ; ;A"; CALL US BACK AFTER DEQUEUING AST;RCRCUB:: RETURN ;;E); CARD READ ERROR DURING A READ OPERATION ; 5CRERR: MOV #T.NCRE,R0 ;SET FOR HARDWARE ERROR MESSAGEN BR 50$ ;; A; DEVICE TIMEOUT RESULTS IN A NOT READY MESSAGE BEING PUT OUT AT CD; A SYSGEN SPECIFIED INTERVAL. TIMEOUTS ARE CAUSED BY POWERFAILURE (; AND CARD READER FAULT CONDITIONS. ; CROUT: ;;; 1 CLR @S.CSR(R400w-aD`N) ;;;DISABLE CARD READER INTERRUPT E MTPS #0 ;;;ALLOW INTERRUPTS  .IF DF,T$$KMG.40$: MOV #T.NDNR,R0 ;SET FOR NOT READY MESSAGE .IFTF-50$: BITB #US.ABO,U.STS(R5) ;ABORT REQUESTED?O BNE 120$ ;IF NE YES. .IFTS% BIT #TIMERR,U.CW2(R5) ;TIMING ERROR?; BEQ 60$ ;IF EQ NOO4 BIT #READY,@S.CSR(R4) ;OPERATOR PUT READER OFFLINE? BEQ 70$ ;IF EQ NOI. BIC #TIMERR,U.CW2(R5) ;CLEAR TIMING ERROR BIT .IFTF960$: BIT #READY,@S.CSR(R4) ;CARD READER ONLINE AND READY?  BEQ 20$ ;IF EQ YES270$: MOVB #1,S.CTM(R4) ;SET TIMEOUT FOR ONE SECOND .IFTT' DECB S.STS(R4) ;TIME TO PRINT MESSAGE?R BNE CRPWF ;IF NE NOM7 MOVB #C$$RTO,S.STS(R4) ;SET TO OUTPUT NEXT MESSAGE IN Q ;C$$RTO SECONDS N/ BNE 80$ ;IF NE, CR NOT READY MESSAGES ENABLEDG6 INCB S.STS(R4) ;CR NOT READY MESSAGES NOT WANTED, SO BR CRPWF ;REBUSY CONTROLLER "80$: CALLR $DVMSG ;OUTPUT MESSAGE .IFFA BR CRPWFR .ENDC B;#; NO BUFFER SPACE AVAILABLE ;I790$: MOV #IE.NOD&377,R0 ;SET NO BUFFER AVAILABLE STATUS) BR 160$ ; ;N(; NO EOF YET AND NO MORE CARDS IN HOPPER; 7100$: MOV #!IS.SUC,R0 ;NO CARDS LEFT/NO EOFT TST U.CW3(R5) ;ATTACH FOR AST?  BEQ 160$ ;IF EQ NO) BIS #IE,@S.CSR(R4) ;SET INTERRUPT ENABLES BR 160$ ;G;CC; JUST HAD EOF AND NO MORE CARDS IN HOPPER (FOR USE WITH ATTACH FORY; UNSOLICITED AST FUNCTION)V; C110$: MOV #!,R0 ;NO CARDS LEFT/JUST HAD EOF ) BIS #IE,@S.CSR(R4) ;SET INTERRUPT ENABLE#% INCB EOFCT(R5) ;FAKE NOT END OF FILES BR 160$ ;6; ; ABORT REQUESTEDT;D5120$: MOV #IE.ABO&377,R0 ;SET TRANSFER ABORTED STATUSS BR 160$ ;A;E; UNRECOVERABLE ERRORR;;1130$: MOV #IE.VER&377,R0 ;SET UNRECOVERABLE ERROR. BR 160$ ;I;U; DEVICE NOT READY ERROR;C4140$: MOV #IE.DNR&377,R0 ;SET DEVICE NOT READY ERROR BR 160$ ;Y;N ; END OF FILEU;I0150$: MOV #IE.EOF&377,R0 ;SET END OF FILE STATUS+160$: CLR R1 ;CLEAR SECOND I/O STATUS WORD( JMP 320$ ;;+2; **-$CRINT-CR11 CARD READER CONTROLLER INTERRUPTS;-$CRINT:: ;;;REF LABELE< INTSV$ CR,PR6,C$$R11,,UCBSV ;;;GENERATE INTERRUPT SAVE CODE MOV R3,-(SP) ;;;SAVE R3' MOV U.SCB(R5),R4 ;;;GET ADDRESS OF SCBE' MOV S.CSR(R4),R3 ;;;GET ADDRESS OF CSR6* BIT #176000,(R3)+ ;;;EXCEPTION CONDITION? BNE 170$ ;;;IF NE YES0 JMP 350$ ;;;7170$: MOV -(R3),R4 ;;;SAVE CARD READER INTERRUPT STATUS5+ CLR (R3) ;;;DISABLE CARD READER INTERRUPTS MOV (SP)+,R3 ;;;RESTORE R3 ' CALL $FORK ;;;CREATE A SYSTEM PROCESS* MOV R4,R0 ;COPY STATUS WORDL% MOV U.SCB(R5),R4 ;GET ADDRESS OF SCB  TSTB EOFCT(R5) ;END OF FILE?U BNE 190$ ;IF NE NO TST U.CW3(R5) ;ATTACH FOR AST?S BEQ 180$ ;IF EQ NO BIT #HOPERR,R0 ;HOPERR ERROR?- BNE 110$ ;IF NE - EOF, AST AND HOPPER ERROR0=180$: BR 150$ ;EOF AND EITHER AST AND/OR HOPPER ERROR OR NOTP*190$: BIT #TRONL,R0 ;TRANSITION TO ONLINE? BNE 200$ ;IF NE YES5 BIT #CRDONE,R0 ;CARD DONE?R BNE 240$ ;IF NE YES( BIT #HOPERR,R0 ;HOPERR ERROR?. BNE 100$ ;IF NE, NO EOF YET AND HOPPER ERROR! BR 230$ ;CHECK FOR OTHER ERRORS /200$: BITB #US.BSY,U.STS(R5) ;READ IN PROGRESS?E BNE 60$ ;IF NE YES0210$: MOV U.CW3(R5),R1 ;GET ADDRESS OF AST BLOCK' BEQ 130$ ;IF EQ, THERE IS NONE, ERROR9 MOV A.PRM(R1),R0 ;GET TCB ADDRESS OF TASK TO RECEIVE AST0! CALLR $QASTT ;QUEUE AST TO TASKR220$: JMP CRERR ;230$: ;REF LABELS .IF DF,T$$KMG BIT #MTNERR,R0 ;MOTION ERROR? BNE 220$ ;IF NE YES2 BIT #TIMERR,R0 ;TIMING ERROR? BEQ 240$ ;IF EQ NO JMP 40$ ;, .IFFE BIT #MTNERR,R0 ;MOTION ERRORE BNE 220$ ;IF NE YES0 BIT #TIMERR,R0 ;TIMING ERRORD BEQ 240$ ;IF EQ NO) BIS #TIMERR,U.CW2(R5) ;SHOW TIMING ERROR BR 220$ ;  .ENDC'240$: MOV #80.*2,R0 ;ASSUME BINARY READA MOVB U.CW2(R5),R1 ;BINARY READ? BMI 250$ ;IF MI YESL$ MOVB CCOLC(R5),R0 ;USE COLUMN COUNT TSTB R1 ;PACKED HOLLERITH? BNE 250$ ;IF NE YESG4 CMP #CR026,CCOL1(R5) ;026 TRANSLATION CONTROL CARD? BEQ 400$ ;IF EQ YEST4 CMP #CR029,CCOL1(R5) ;029 TRANSLATION CONTROL CARD? BEQ 410$ ;IF EQ YES 00w5aaTADATADATADATADATADATADATADATADATA& MOV #TB029,R1 ;ASSUME 029 TRANSLATION) BITB #US.MDE,U.STS(R5) ;029 TRANSLATION?; BNE 250$ ;IF NE YESU' MOV #TB026,R1 ;SET FOR 026 TRANSLATION ;250$: MOV STRBF(R5),R2 ;GET STARTING ADDRESS OF DATA BUFFERV5 MOV U.CNT(R5),-(SP) ;GET NUMBER OF BYTES TO TRANSFERM3260$: MOVB (R2)+,R3 ;GET NEXT BYTE FROM DATA BUFFER 5 BIT #300,U.CW2(R5) ;BINARY OR PACKED HOLLERITH READ?5 BNE 300$ ;IF NE YESR! MOV #104,R4 ;ASSUME RPG SPECIALC CMPB R3,#240 ;RPG SPECIAL? BEQ 290$ ;IF EQ YESB" INC R4 ;INCREMENT CHARACTER CODE CMPB R3,#140 ;RPG SPECIAL? BEQ 290$ ;IF EQ YES9% MOVB R3,R4 ;SIGN EXTEND PACKED CODE) BPL 270$ ;IF PL, ZONE 12 IS NOT PUNCHED5' ADD #340,R4 ;ADJUST FOR ZONE 12 PUNCHS% MOV R4,R3 ;COPY FOR ZONE COUNT DOWN;2270$: SUB #40,R3 ;DECREMENT COUNT OF ZONE PUNCHES BMI 280$ ;IF MI DONE. SUB #17,R4 ;SUBTRACT 21 AND STRIP ZONE PUNCH BR 270$ ;E'280$: CMP R4,#105 ;INDEX WITHIN RANGE?4 BLOS 290$ ;IF LOS YESC CLR R4 ;FORCE A BLANK?5290$: ADD R1,R4 ;CALCULATE ADDRESS OF TRANSLATE CODE ) MOVB (R4),R3 ;GET TRANSLATED ASCII CODE02300$: MOV R3,-(SP) ;SET BYTE TO PUT IN USER BUFFER& CALL $PTBYT ;PUT BYTE IN USER BUFFER* DEC (SP) ;ANY MORE SPACE IN USER BUFFER? BLE 310$ ;IF LE NO$ DEC R0 ;ANY MORE BYTES TO PROCESS? BGT 260$ ;IF GT YES /310$: MOV U.CNT(R5),R1 ;GET SIZE OF USER BUFFER 3 SUB (SP)+,R1 ;CALCULATE NUMBER OF BYTES TRANSFERED$5 MOV #IS.SUC&377,R0 ;SET SUCCESSFUL COMPLETION STATUSO(320$: CALL $IODON ;FINISH I/O OPERATION3 MOV STRBF(R5),R0 ;GET ADDRESS OF BUFFER TO RELEASE  BEQ 340$ ;IF EQ, NO BUFFER4 MOV #80.,R1 ;ASSUME ASCII OR PACKED HOLLERITH READ+ TSTB U.CW2(R5) ;ASCII OR PACKED HOLLERITH? BPL 330$ ;IF PL YESA$ ASL R1 ;SET FOR BINARY READ BUFFER*330$: CALL $DEACB ;DEALLOCATE DATA BUFFER340$: JMP CRINI ;GO AGAIN;.; STORE DATA IN CARD BUFFERB;E-350$: MOV (R3)+,R4 ;;;READ BINARY CARD COLUMNS+ MOV (R3),R3 ;;;READ PACKED HOLLERITH DATAO2 MOVB CCOLC(R5),-(SP) ;;;GET CURRENT COLUMN NUMBER# BNE 360$ ;;;IF NE, NOT COLUMN ONES. MOV R4,CCOL1(R5) ;;;SAVE CARD COLUMN ONE DATA/360$: CMPB (SP)+,EOFCL(R5) ;;;PAST EOF COLUMNS?R BHIS 370$ ;;;IF HIS YESA$ CMP R4,#CREOF ;;;END OF FILE PUNCH? BNE 370$ ;;;IF NE NO( DECB EOFCT(R5) ;;;DECREMENT EOF COUNTER<370$: CMPB CCOLC(R5),#80. ;;;80. COLUMNS READ (BUFFER FULL)?/ BEQ 390$ ;;;IF EQ YES -- DO NOT EXCEED BUFFERR* INCB CCOLC(R5) ;;;INCREMENT COLUMN NUMBER7 MOVB R3,@CURBF(R5) ;;;ASSUME ASCII OR PACKED HOLLERITHP- TSTB U.CW2(R5) ;;;ASCII OR PACKED HOLLERITH?F BPL 380$ ;;;IF PL YESV' MOV R4,@CURBF(R5) ;;;STORE BINARY DATAA/ INC CURBF(R5) ;;;UPDATE CURRENT BUFFER ADDRESSR4380$: INC CURBF(R5) ;;;UPDATE CURRENT BUFFER ADDRESS 390$: MOV (SP)+,R3 ;;;RESTORE R3 RETURN ;;;EXIT INTERRUPTE;F; SET 026 TRANSLATION MODE;#8400$: BICB #US.MDE,U.STS(R5) ;CLEAR 029 TRANSLATION FLAG BR 420$ ; ;D; SET 029 TRANSLATION MODE;C6410$: BISB #US.MDE,U.STS(R5) ;SET 029 TRANSLATION FLAG!420$: JMP 20$ ;READ ANOTHER CARD5;A0; **-CRATT-CARD READER CHECK FOR ATTACH FUNCTION; ; OUTPUT:R;R*; C=0 FUNCTION WAS NOT AN ATTACH OR DETACH&; C=1 FUNCTION WAS AN ATTACH OR DETACH;U9CRATT: CMPB #,I.FCN+1(R1) ;ATTACH FUNCTION?; BNE 480$ ;IF NE NO4 BITB #TF.AST,I.FCN(R1) ;ATTACH FOR UNSOLICITED AST? BEQ 495$ ;IF EQ NO8430$: TST I.PRM(R1) ;CHECK FOR NON-SPECIFIED AST ADDRESS BEQ 470$ ;IF EQ YES, ERROR& MOV R1,-(SP) ;SAVE I/O PACKET ADDRESS2 MOV #ASTSIZ.,R1 ;SET LENGTH OF AST BLOCK IN BYTES, CALL $ALOCB ;ALLOCATE CORE BLOCK FROM POOL BCC 440$ ;IF CC OK TST (SP)+ ;CLEAN STACK2 MOV #IE.NOD&377,R0 ;SET BUFFER ALLOCATION FAILURE BR 500$ ;O1440$: MOV R0,U.CW3(R5) ;COPY ADDRESS OF AST BLOCK(( MOVB #1,EOFCT(R5) ;FAKE NOT END OF FILE) MOV (SP)+,R1 ;RESTORE I/O PACKET ADDRESSO# MOV KISAR5,(R0)+ ;MAPPING (A.KSR5)31 MOV #CRCUB,(R0)+ ;WHERE TO CALL US BACK (A.DQSR)E, MOV R0,U.CW3(R5) ;COPY ADDRESS OF AST BLOCK( TST (R0)+ ;SKIP PAST LINK WORD (A.LNK), CLR (R0)+ ;LENGTH OF CONTROL BLOCK (A.CBL)7 MOV #STKSIZ.,(R0)+ ;ALLOCATE 14 BYTES ON STACK (A00w=a@aN.BYT)K) MOV I.PRM(R1),(R0)+ ;AST ADDRESS (A.AST)7- CLR (R0)+ ;NUMBER OF AST PARAMETERS (A.NPR)O0 MOV I.TCB(R1),(R0) ;TCB ADDRESS OF TASK (A.PRM)0 BIT #READY,@S.CSR(R4) ;READER READY AND ONLINE? BNE 450$ ;IF NE NO CALL 210$ ;QUEUE AST NOW( BR 495$ ;SKIP SETTING INTERRUPT ENABLE.450$: BIS #IE,@S.CSR(R4) ;SET INTERRUPT ENABLE BR 495$ ; <470$: MOV #IE.SPC&377,R0 ;SET ILLEGAL AST ADDRESS ERROR CODE BR 500$ ; 8480$: CMPB #,I.FCN+1(R1) ;DETACH FUNCTION? BEQ 490$ ;IF EQ YES . CLC ;SHOW FUNCTION WAS NOT ATTACH OR DETACH RETURN ;01490$: MOV U.CW3(R5),R0 ;GET ADDRESS OF AST BLOCK?R BEQ 495$ ;IF EQ NONE< CMP -(R0),-(R0) ;POINT TO BEGINNING OF ALLOCATED CORE BLOCK) MOV #ASTSIZ.,R1 ;SET LENGTH OF AST BLOCKA$ CALL $DEACB ;DEALLOCATE CORE BLOCK+ BIC #IE,@S.CSR(R4) ;CLEAR INTERRUPT ENABLEE. CLR U.CW3(R5) ;SHOW NO ATTACH FOR AST ANYMORE8495$: MOV #IS.SUC&377,R0 ;SET SUCCESSFUL COMPLETION CODE2500$: SEC ;SHOW FUNCTION WAS AN ATTACH OR DETACH RETURN ; .DSABL LSB; C; CANCEL I/O OPERATION-FORCE I/O TO COMPLETE IS DEVICE IS NOT READYW;54CRCAN: CMP R1,I.TCB(R0) ;;;REQUEST FOR CURRENT TASK? BNE 10$ ;;;IF NE NON< BISB #US.ABO,U.STS(R5) ;;;SET FOR ABORT IF DEVICE NOT READY10$: RETURN ;;;A .ENDDEACB ;DEALLOCATE CORE BLOCK+ BIC #IE,@S.CSR(R4) ;CLEAR INTERRUPT ENABLEE. CLR U.CW3(R5) ;SHOW NO ATTACH FOR AST ANYMORE8495$: MOV #IS.SUC&377,R0 ;SET SUCCESSFUL COMPLETION CODE2500$: SEC ;SHOW FUNCTION WAS AN ATTACH OR DETACH RETURN ; .DSABL LSB .TITLE CTDRV .IDENT /08/;; COPYRIGHT (C) 1974, 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 08;; D. N. CUTLER 13-MAR-74;; PREVIOUSLY MODIFIED BY:;; P. J. BEZEREDI; D. N. CUTLER; C. A. D'ELIA ; B. LYONS;; MODIFIED BY:;; P. J. BEZEREDI 05-JUL-78;9; PB079 -- INSURE R2 CONTAINS CSR ADDRESS BEFORE LOGGING ; AN ERROR.T;; P. J. BEZEREDI 18-JUL-78;H7; PB081 -- EXPAND I/O ACTIVITY IMFORMATION REPORTED ATD; TIME OF AN ERROR.F;R&; TA11 TAPE CASSETTE CONTROLLER DRIVER; @; NOTE: THIS IS A MINIMAL DRIVER AND CONTAINS NO ERROR RECOVERY.;; MACRO LIBRARY CALLS ;N .MCALL HWDDF$,PKTDF$ $ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS; ; ERROR PROCESSING CONTROL TABLE;.2ERRTB: .BYTE IE.DNR&377,1000/400 ;DEVICE NOT READY/ .BYTE IE.WLK&377,10000/400 ;DRIVE WRITE LOCKED( .BYTE IE.EOT&377,20000/400 ;END OF TAPE' .BYTE IE.EOF&377,4000/400 ;END OF FILEO( .BYTE IE.DAO&377,2000/400 ;DATA OVERRUN( .BYTE IE.VER&377,377 ;BLOCK CHECK ERROR; ; LEGAL FUNCTION DISPATCH TABLEA; (LGFCN: .WORD IO.RLB ;READ LOGICAL BLOCK .BYTE 105,10. ;W .WORD RDBLK ;D# .WORD IO.WLB ;WRITE LOGICAL BLOCKT .BYTE 103,10. ;A .WORD WRBLK ; ! .WORD IO.EOF ;WRITE END OF FILE .BYTE 101,10. ;I .WORD WREOF ;0 .WORD IO.RWD ;REWIND .BYTE 117,34. ;/ .WORD WREOF ;L .WORD IO.SPB ;SPACE BLOCK0 .BYTE 115,128. ; .WORD SPCBK ;, .WORD IO.SPF ;SPACE FILE .BYTE 113,128. ;4 .WORD SPCBK ;;E; DRIVER DISPATCH TABLEE;E( DDT$ CT,T$$A11 ;GENERATE DISPATCH TABLE;+2; **-CTINI-TA11 TAPE CASSETTE CONTROLLER INITIATOR;1H; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUEG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THE1H; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN AH; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER IH; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER>; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.;I ; INPUTS:E;:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;H ; OUTPUTS:;NB; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAB; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OP; ATION IS INITIATED.E;- .ENABL LSBS=CTINI: GTPKT$ CT,T$$A11,00EaaTADATADATADATADATADATADATADATADATACTPWF ;GET NEXT I/O PACKET TO PROCESS.; 1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:E;T'; R1=ADDRESS OF THE I/O REQUEST PACKET.R-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.I; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.E:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;ID; TA11 TAPE CASSETTE FUNCTION INDEPENDENT I/O REQUEST PACKET FORMAT:;E"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.T@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.B; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTOR TASK HEADEB; WD. 05 -- I/O FUNCTION CODE (IO. RLB 1 IO.RWD/IO.SPB/IO.SPF/IO.E0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.B; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140003; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.U; - MOV #LGFCN,R3 ;POINT TO LEGAL FUNCTION TABLE + MOV #6,R0 ;SET NUMBER OF ENTRIES IN TABLE-.10$: CMP I.FCN(R1),(R3)+ ;FUNCTION CODE MATCH? BEQ 20$ ;IF EQ YES+ CMP (R3)+,(R3)+ ;POINT TO NEXT TABLE ENTRYK! DEC R0 ;ANY MORE TABLE ENTRIES?D BGT 10$ ;IF GT YES0 MOV #IE.IFC&377,R0 ;SET ILLEGAL FUNCTION STATUS BR 50$ ;FINISH IN COMMON CODEO;N; FUNCTION CODE MATCH FOUND ; ,20$: SWAB R2 ;SWAP UNIT NUMBER TO LEFT BYTE- BISB (R3)+,R2 ;MERGE FUNCTION CODE WITH UNITT( MOVB (R3)+,S.ITM(R4) ;SPACING FUNCTION? BPL 30$ ;IF PL NOO;L/; SPACING FUNCTION DEPENDENT I/O PACKET FORMAT:;:@; WD. 12 -- SPACING COUNT (POSITIVE=FORWARD, NEGATIVE=BACKWARD).; WD. 13 -- NOT USED. ; WD. 14 -- NOT USED.D; WD. 15 -- NOT USED.E; WD. 16 -- NOT USED. ; WD. 17 -- NOT USED.7; WD. 20 -- NOT USED.O;T5 BISB #S3.SIP,S.ST3(R4) ;SET POSITIONING IN PROGRESSC= MOV U.BUF(R5),I.PRM+4(R1) ;MOVE SPACING COUNT TO COMMON PLAC < MOV U.BUF(R5),U.CNT(R5) ;MOVE SPACING COUNT TO COMMON PLACE$ BEQ 40$ ;IF EQ NO SPACING REQUIRED BPL 30$ ;IF PL SPACE FORWARD) NEG U.CNT(R5) ;CONVERT TO POSITIVE COUNT:+ NEG I.PRM+4(R1) ;CONVERT TO POSITIVE COUNT,( SUB #4,R2 ;CONVERT TO REVERSE FUNCTION; :; READ/WRITE LOGICAL FUNCTION DEPENDENT I/O PACKET FORMAT:;S+; WD. 12 -- RELOCATION BIAS OF DATA BUFFER. ; WD. 13 -- DATA BUFFER ADDRESS.-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.R; WD. 15 -- NOT USED.A; WD. 16 -- NOT USED.A; WD. 17 -- NOT USED.T; WD. 20 -- NOT USED.T; H; NO FUNCTION DEPENDENT PARAMETERS ARE REQUIRED FOR REWIND AND WRITE EOF;R?30$: MOVB S.ITM(R4),S.CTM(R4) ;SET CURRENT DEVICE TIMEOUT COUNT;2 MOV (R3),U.CW2(R5) ;SET INITIAL INTERRUPT ADDRESS( CALL $BMSET ;SET I/O ACTIVE IN BIT MAP% MOV R2,@S.CSR(R4) ;INITIATE FUNCTION:;8; CANCEL I/O OPERATION IS A NOP FOR TA11 TAPE CASSETTES.;ACTCAN: ;REF LABEL; H; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUH; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDIT3; THAT COULD EXIST IN RESTARTING THE I/O OPERATION.I;ECTPWF: RETURN ;.;4; NO SPACING REQUIREDT;V940$: MOV #IS.SUC&377,R0 ;SET SUCCESSFUL COMPLETION STATUST50$: BR 110$ ;B;+4; **-$CTINT-TA11 TAPE CASSETTE CONTROLLER INTERRUPTS;-5 INTSE$ CT,PR6,T$$A11 ;;;GENERATE INTERRUPT SAVE CODET MOV R3,-(SP) ;;;SAVE R3' MOV U.SCB(R5),R4 ;;;GET ADDRESS OF SCBN> MOVB S.ITM(R4),S.CTM(R4) ;;;RESET CURRENT DEVICE TIMEOUT COUN' MOV S.CSR(R4),R3 ;;;GET ADDRESS OF CSR $ BIT #200,(R3)+ ;;;TRANSFER REQUEST? BNE 60$ ;;;IF NE YES, MOV -2(R3),U.CW3(R5) ;;;SAVE CURRENT STATUS.60$: CALL @U.CW2(R5) ;;;CALL INTERRUPT ROUTINE. BIS #S2.ACT,S.ST2(R4) ;;;SET I/O ACTIVE FLAG5 MOV (SP)+,U.CW2(R5) ;;;SAVE INTERRUPT RETURN ADDRESSR MOV (SP)+,R3 ;;;RESTORE R3E# JMP $INTXT ;;;EXIT FROM INTERRUPT ;C#; SPACING FUNCTION (FILE AND BLOCK)U;BSPCBK: BMI 70$ ;;;IF MI ERROR) DEC U.CNT(R5) ;;;DECREMENT SPACING COUNTV BLE 70$ ;;;IF LE DONEC& INC -(R3) ;;;INITIATE NEXT OPERATION- CALL @(SP)+ ;;;SET INTERRUPT RETURN ADDRESS  BR SPCBK ;;;GO AGAIN)70$: CLR00MaRaN -(R3) ;;;CLEAR INTERRUPT ENABLEC' TST (SP)+ ;;;REMOVE RETURN FROM STACK2 MOV (SP)+,R3 ;;;RESTORE R3T' CALL $FORK ;;;CREATE A SYSTEM PROCESST# MOV U.CW3(R5),R1 ;GET FINAL STATUS  BPL 90$ ;IF PL SUCCESS. BICB #^C<7*2>,R1 ;CLEAR ALL BUT FUNCTION CODE, CMPB #5*2,R1 ;FORWARD OR REVERSE FUNCTION? BLE 100$ ;IF LE FORWARDR5 BIC #120777,R1 ;CLEAR ERROR, BOT, UNIT, AND FUNCTIONC BEQ 40$ ;IF EQ NO ERRORS BR 100$ ;ANALYZE ERROR;S; READ LOGICAL FUNCTIONS; RDBLK: BMI WREOF ;;;IF MI ERROR& DEC U.CNT(R5) ;;;DECREMENT BYTE COUNT" BLT 80$ ;;;IF LT NO MORE TO READ/ MOV (R3),-(SP) ;;;READ BYTE FROM DATA REGISTERE( CALL $PTBYT ;;;PUT BYTE IN USER BUFFER- CALL @(SP)+ ;;;SET INTERRUPT RETURN ADDRESS  BR RDBLK ;;;GO AGAIN;N; WRITE LOGICAL FUNCTION;O WRBLK: BMI WREOF ;;;IF MI ERROR& DEC U.CNT(R5) ;;;DECREMENT BYTE COUNT# BLT 80$ ;;;IF LT NO MORE TO WRITEB* CALL $GTBYT ;;;GET BYTE FROM USER BUFFER1 MOVB (SP)+,(R3) ;;;WRITE BYTE INTO DATA REGISTER:- CALL @(SP)+ ;;;SET INTERRUPT RETURN ADDRESSE BR WRBLK ;;;GO AGAIN'80$: INC U.CNT(R5) ;;;ADJUST BYTE COUNT,- BIS #20,-(R3) ;;;INITIATE LAST BYTE SEQUENCEP- CALL @(SP)+ ;;;SET INTERRUPT RETURN ADDRESS ;T(; REWIND AND WRITE END OF FILE FUNCTIONS;A+WREOF: CLR -(R3) ;;;CLEAR INTERRUPT ENABLEL' TST (SP)+ ;;;REMOVE RETURN FROM STACKR MOV (SP)+,R3 ;;;RESTORE R3B' CALL $FORK ;;;CREATE A SYSTEM PROCESS <90$: MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL COMPLETION STATUS# MOV U.CW3(R5),R1 ;GET FINAL STATUSP BPL 110$ ;IF PL SUCCESS +100$: SWAB R1 ;SWAP ERROR BITS TO LOW BYTEC2 MOV #ERRTB,R2 ;GET ADDRESS OF ERROR CONTROL TABLE,105$: CLR R0 ;PICKUP NEXT ERROR STATUS CODE BISB (R2)+,R0 ; BITB (R2)+,R1 ;ERROR BIT SET? BEQ 105$ ;IF EQ NO. BITB #26,R1 ;WRITE LOCK, TIMING OR OFF-LINE? BEQ 110$ ;IF EQ NO' MOV S.CSR(R4),R2 ;RETREIVE CSR ADDRESS  CALL $DVERR ;LOG DEVICE ERRORR BR 110$ ;FINISH I/O;MH; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING TERMINATED. TIMEF; USUALLY CAUSED BY POWERFAILURE BUT ALSO MAY BE THE RESULT OF A HARD-; WARE FAILURE.T;)CTOUT: CALL $DTOER ;;;LOG DEVICE TIMEOUTT6110$: MOV S.PKT(R4),R1 ;RETRIEVE ADDRESS OF I/O PACKET7 BICB #S3.SIP,S.ST3(R4) ;RESET POSITIONING IN PROGRESS;- MOV I.PRM+4(R1),R1 ;GET ORIGINAL COUNT VALUEO+ SUB U.CNT(R5),R1 ;SUBTRACT COUNT REMAINING)2 MOV #401,R2 ;SET CURRENT AND FINAL RETRY COUNT=1# CALL $IODON ;FINISH I/O OPERATIONM JMP CTINI ;GO AGAINL .DSABL LSBR .ENDTION BEING TERMINATED. TIMEF; USUALLY CAUSED BY POWERF .TITLE CVRTM .IDENT /02/ ;; ; COPYRIGHT (C) 1974, 1976, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;.A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED$9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.M;R ; VERSION 02;I; D. N. CUTLER 12-AUG-73;,; PREVIOUSLY MODIFIED BY:;V; D. N. CUTLER;E; MODIFIED BY:;R;+; **-$CVRTM-CONVERT TIME;;C; THIS ROUTINE IS CALLED TO CONVERT A TIME INTERVAL-TIME UNITS PAIRR; TO A CLOCK TICKS COUNT.P; ; INPUTS:T;.; R3=ADDRESS OF TIME INTERVAL-TIME UNITS PAIR.;9 ; OUTPUTS:;Q7; IF AN ILLEGAL TIME INTERVAL (GREATER THAN 15 BITS) OR ;; ILLEGAL TIME UNITS (ZERO OR GREATER THAN 4) IS SPECIFIED,E;; THEN A DIRECTIVE STATUS OF 'D.RS93' IS RETURNED. ELSE THEO<; TICKS COUNT IS RETURNED WITH THE HIGH ORDER PART IN R0 AND=; THE LOW ORDER PART IN R1. R3 IS ADVANCED BY 4 THUS POINTINGT); PAST THE TIME INTERVAL-TIME UNITS PAIR.D;-'$CVRTM::MOV (R3)+,R1 ;GET TIME INTERVAL & BMI 70$ ;IF MI ILLEGAL TIME INTERVAL MOV (R3)+,R0 ;GET TIME UNITSR DEC R0 ;BACK OFF BY ONE  CMP R0,#3 ;LEGAL UNITS?A BHI 70$ ;IF HI NOT# ASL R0 ;CONVERT TO DISPATCH INDEXU ADD R0,PC ;DISPATCHH10$: BR 50$ ;1=TICKS  BR 30$ ;2=SECONDSU BR 20$ ;3=MINUTESR MOV #60.,R0 ;4=HOURS( CALL $MUL ;CALCULATE NUMBER OF MINUTES TST R0 ;OVERFLOW 16 BITS?A BNE 70$ ;IF NE YES120$: CMP R1,#1440. ;MORE THAN ONE DAY OF MINUTES?M BHI 70$ ;IF HI YES( MOV #30.,R0 ;MULTIPLY BY 60. SECONDS/2- CALL $MUL ;PRODUCT C00Ua=VaTADATADATADATADATADATADATADATADATAANNOT OVERFLOW 16 BITS.3# MOV $TKPS,R0 ;GET TICKS PER SECONDK ASL R0 ;MULTIPLY BY 2 BR 40$ ;'30$: MOV $TKPS,R0 ;GET TICKS PER SECONDR&40$: CALL $MUL ;CALCULATE TICKS COUNT"50$: MOV R0,R2 ;TICKS COUNT ZERO? BIS R1,R2 ; BNE 60$ ;IF NE NO INC R1 ;MAKE TICKS COUNT 160$: RETURN ;N(70$: DRSTS D.RS93 ;SET DIRECTIVE STATUS .ENDE 70$ ;IF NE YES120$: CMP R1,#1440. ;MORE THAN ONE DAY OF MINUTES?M BHI 70$ ;IF HI YES( MOV #30.,R0 ;MULTIPLY BY 60. SECONDS/2- CALL $MUL ;PRODUCT C .TITLE DBDRVF .IDENT /16.10/2;I<; COPYRIGHT (c) 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;M<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; P. J. BEZEREDI 19-SEP-79;S; MODIFIED FOR M-PLUS V2.0 BY:;; R. T. PERRON; P. J. BEZEREDI ; T. LEKAS; ; MODIFIED BY:; ; P. J. CARR 9-JUN-82 16.01N;T'; PJC052 -- CORRECT SEEK OPTIMIZATION. ; ; P. J. CARR 27-AUG-82 16.02;R:; PJC063 -- COUNT EACH DIFFERENT OFFSET AS 1 RETRY DURING; OFFSET RECOVERY.;N; P. J. CARR 27-AUG-82 16.03;R9; PJC064 -- DON'T LOG MULTIPLE ERRORS DURING MULTI-BLOCKM,; TRANSFERS THAT USE THE DBRTRY PATHWAY.;H; P. J. CARR 27-AUG-82 16.04;.:; PJC065 -- CORRECT HARD ECC RECOVERY ON THE LAST PARTIAL&; BLOCK OF A MULTI-BLOCK TRANSFER.;L; P. J. CARR 27-AUG-82 16.05;.:; PJC066 -- LOG THE UNSUCCESSFUL RECALIBRATE AFTER A SEEK; FAILURE.;.; P. J. CARR 27-AUG-82 16.06;P9; PJC067 -- CORRECT THE BRANCH IN THE DATA LATE RECOVERY ; ROUTINE.;; J. GALLANT 2-MAR-83 16.07.;8; JG0049 -- FIX THE CASE WHERE DTE AND DCK ARE COMBINED;M; J. GALLANT 7-MAR-83 16.08E;R6; JG0041 -- FIX SO THAT A FMT AND OTHER I/O CAN OCCUR,; TOGETHER WITH OVERLAP SEEKS TURNED ON.2; MAKE RECALIBRATE A SEEK FUNCTION RATHER THAN!; A DATA TRANSFER FUNCTION. ;P; L. KOGAN 17-APR-84 16.09;E/; LK001 -- ENTER NON-EXISTENT DRIVE ERROR INTOJ; ERROR LOG FILE6;P; B. S. MCCARTHY 6-AUG-85 16.10 ;T/; BM368 -- ADD CONDITIONAL SKIP OF FIRST DRIVEG!; NOT READY ERROR FOR POWERFAIL4;--; RH11/RH70-RP04/05/06 OVERLAPPED SEEK DRIVERM;  .MCALL HWDDF$,PKTDF$E$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS; ,; DEVICE REGISTER AND STATUS BIT DEFINITIONS;A%RPCS1=0 ;CONTROL STATUS REGISTER 1TIE=100 ;INTERRUPT ENABLEKTRE=40000 ;TRANSFER ERRORL*MCPE=20000 ;MASSBUS CONTROL PARITY ERROR#DVA=4000 ;DRIVE AVAILABLE TO PORTCRPWC=2 ;WORD COUNT REGISTER"RPBA=4 ;BUFFER ADDRESS REGISTER(RPDA=6 ;DESIRED TRACK/SECTOR REGISTER%RPCS2=10 ;CONTROL STATUS REGISTER 2EDLT=100000 ;DATA LATE ERRORPWCE=40000 ;WRITE CHECK ERROR UPE=20000 ;UNIBUS PARITY ERROR#NED=10000 ;NONEXISTENT DISK ERRORS$NEM=4000 ;NONEXISTENT MEMORY ERRORPGE=2000 ;PROGRAMMING ERRORS!MXF=1000 ;MISSED TRANSFER ERRORL%MDPE=400 ;MASSBUS DATA PARITY ERROR2!RPDS=12 ;DRIVE STATUS REGISTERERR=40000 ;ERROR SUMMARY BIT$PIP=20000 ;POSITIONING IN PROGRESSMOL=10000 ;MEDIUM ONLINEWRL=4000 ;WRITE LOCKED DRIVE$PGM=1000 ;PROGRAMMABLE PORT SELECT!DPR=400 ;DRIVE PRESENT ON PORT DRY=200 ;DRIVE READY0VV=100 ;VOLUME VALID"RPER1=14 ;ERROR SUMMARY REGISTERDCK=100000 ;DATA CHECK ERRORUNS=40000 ;DRIVE UNSAFEO!OPI=20000 ;OPERATION INCOMPLETERDTE=10000 ;DRIVE TIMING ERROR WLE=4000 ;WRITE LOCK ERROR IAE=2000 ;INVALID DISK ADDRESSAOE=1000 ;ADDRESS OVERFLOWHCRC=400 ;HEADER CRC ERROR HCE=200 ;HEADER COMPARE ERRORECH=100 ;ECC HARD ERRORWCF=40 ;WRITE CLOCK FAILUREFER=20 ;FORMAT ERRORP#CPE=10 ;CONTROL BUS PARITY ERROR !RMR=4 ;REGISTER MODIFY REFUSEDILR=2 ;ILLEGAL REGISTERILF=1 ;ILLEGAL FUNCTION&RPAS=16 ;ATTENTION SUMMARY REGISTER RPDBR=22 ;DATA BUFFER REGISTERRPDT=26 ;DRIVE TYPE REGISTER=!RPOF=32 ;DRIVE OFFSET REGISTER0 FMT22=10000 ;FORMAT (1=16 BIT)ECI=4000 ;ECC INHIBIT0"HCI=2000 ;HEADER COMPARE I00=]aRaNNHIBIT%RPDC=34 ;DESIREDED CYLINDER NUMBERA#RPCC=36 ;CURRENT CYLINDER NUMBERRPER2=40 ;ERROR REGISTER 2!RPEC1=44 ;ECC POSITION REGISTER RPEC2=46 ;ECC PATTERN REGISTER;;; LOCAL EQUATED SYMBOLS;=,XCT=1 ;FUNCTION HAS BEEN EXECUTED (1=YES)'ERL=2 ;ERROR HAS BEEN LOGGED (1=YES)T)IHC=4 ;INHIBIT HEADER COMPARES (1=YES)2%ADR=10 ;ADDRESS BITS SETUP (1=YES) 'SEL=20 ;PORT SELECT WAIT (1=WAITING) !OFA=100 ;OFFSET ACTIVE (1=YES) (RETRY=8. ;CONTROLLER ERROR RETRY COUNT; ; LOCAL DATA;E.DELTA: .WORD 3 ;ROTATIONAL OPTIMIZATION DELTA;E=; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLER NUMBER)S; 7RTTBL: .BLKW R$$JP1 ;RETRY COUNT FOR CURRENT OPERATIONY5OFFAD: .BLKW R$$JP1 ;ADDRESS OF CURRENT OFFSET VALUEEBPRMSV: .BLKW R$$JP1*5 ;PARAMETER SAVE AREA FOR ERROR RECOVERY AND  ;WRITE CHECK&SAVWC: .BLKW R$$JP1 ;SAVED WORD COUNT=DLTWC: .BLKW R$$JP1 ;SAVED WORD COUNT FOR DATA LATE RECOVERYT.$DBOPT::.REPT R$$JP1 ;SEEK OPTIMIZATION TABLE/ .WORD 1 ;0=IMPLIED SEEK; 1=ALWAYS SEEK FIRSTD .ENDR;A ; OFFSET POSITIONING VALUE TABLE;L%OFFTB: .WORD 0 ;RETURN TO CENTERLINEE .WORD FMT22!20 ;+400: .WORD FMT22!220 ;-400 .WORD FMT22!40 ;+800O .WORD FMT22!240 ;-800 .WORD FMT22!60 ;+1200 .WORD FMT22!260 ;-1200R .WORD 0 ;RETURN TO CENTERLINEE;R; DIAGNOSTIC FUNCTION TABLEK;A$FUNTBL: .BYTE 107, IO.HMS!IQ.UMD&377 .BYTE 105, IO.BLS!IQ.UMD&377C .BYTE 115, IO.OFF!IQ.UMD&377D%FUNTB0: .BYTE 173, IO.RDH!IQ.UMD&377T .BYTE 163, IO.WDH!IQ.UMD&377; .BYTE 151, IO.WCK!IQ.UMD&377FUNTBE:F;P; DRIVER DISPATCH TABLEL;2 DDT$ DB,R$$JP1,,,,,,OPT ;GENERATE DISPATCH TABLE;+>; **-DBINI-RH11/RH70-RP04/05/06 DISK PACK CONTROLLER INITIATOR;0E; THIS IS THE DRIVER ENTRY POINT FROM THE QUEUE I/O DIRECTIVE WHEH ANTE; I/O REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TOBF; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED UNIT IS NOTF; BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSEG; A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT SUCCEEDS,VE; THEN THE NEXT I/O OPERATION IS INITIATED AND A RETURN TO THE CALLERT; IS EXECUTED.;I ; INPUTS:0;06; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIALIZED.;R ; OUTPUTS:;TA; IF THE SPECIFIED UNIT IS NOT BUSY AND AN I/O REQUEST IS WAITING A; TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-O; ATION IS INITIATED.E;-7DBINI: GTPKT$ DB,R$$JP1 ;GET NEXT I/O PACKET TO PROCESSE;E1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:I;X'; R1=ADDRESS OF THE I/O REQUEST PACKET.V-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.D; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.A6; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIALIZED.;P;; RH11/RH70-RP04/05/06 DISK PACK I/O REQUEST PACKET FORMAT:E;I"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.X@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.5; WD. 04 -- FIRST LUN WORD IN REQUESTORS TASK HEADER.A; WD. 05 -- I/O FUNCTION CODE.0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.=; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT + 140000).-3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.A; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER.V+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.T-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED. <; WD. 15 -- DIAGNOSTIC SUPPLIMENTAL PARAMETER ELSE NOT USED.8; WD. 16 -- BITS <0:7> = HIGH LBN, BITS <8:15> NOT USED.#; WD. 17 -- LOW LBN OF I/O REQUEST.R.; WD. 20 -- RELOCATION BIAS OF REGISTER BLOCK.;; WD. 21 -- REGISTER BLOCK ADDRESS (DISPLACEMENT + 140000).E;(# CLRB U.CW2+1(R5) ;RESET UNIT FLAGSI$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 10$ ;IF CS WE FAILED TST R0 ;TRANSFER FUNCTION? BMI DBRQC ;IF MI YES) JMP DBVV ;PROCESS VOLUME VALID FUNCTION-10$: CALL $IODON ;FINISH I/OR BR DBINI ;GET NEXT REQUEST00=eaVaTADATADATADATADATADATADATADATADATA;L*; REQUEST CONTROLLER FOR PROPER OPERATION.;I0DBRQC: MOV S.KRB(R4),R1 ;GET CURRENT KRB ADDRESS5 BIT #KS.POE,K.STS(R1) ;PARALLEL OPERATIONS ENABLED?B BEQ DBRQC1 ;IF EQ NO. MOV S.PKT(R4),R3 ;RETRIEVE I/O PACKET ADDRESS) BITB #IQ.Q,I.FCN(R3) ; EXPRESS REQUEST ?T BNE DBRQC1 ; IF NE YES. BITB #IQ.UMD,I.FCN(R3) ; DIAGNOSTIC REQUEST ? BNE 20$ ; IF NE YESR- MOVB K.CON(R1),R3 ;RETREIVE CONTROLLER INDEX;# TST $DBOPT(R3) ;WHICH SEEK METHOD?C" BNE 10$ ;IF NE ALWAYS SEEK FIRST3 BIT #KS.DIP,K.STS(R1) ;DATA TRANSFER IN PROGRESS?E+ BEQ DBRQC1 ;IF EQ NO, START DATA TRANSFERT210$: BISB #S3.SIP,S.ST3(R4) ;SET SEEK IN PROGRESS6 CALL $RQCNC ;REQUEST CONTROLLER FOR CONTROL FUNCTION BR DBINIO ;T320$: MOV #FUNTBL,R0 ; GET ADDRESS OF FUNCTION TABLER)25$: TSTB (R0)+ ; BYPASS CONTROLLER CODEB- CMPB (R0)+,I.FCN(R3) ; FUNCTION CODE MATCH ?B BEQ 30$ ; IF EQ YESM CMP #FUNTB0,R0 ; END OF TABLE ? BNE 25$ ; IF NE NO+ BR DBRQC1 ; YES, NORMAL TRANSFER FUNCTIONA.30$: TSTB -(R0) ; POINT BACK TO FUNCTION CODE, MOVB -(R0),U.BUF(R5) ; LOAD CONTROLLER CODE BR 10$ ; TREAT AS A SEEK;DBRQC1: BICB #S3.SIP,S.ST3(R4) ;SET SEEK ALREADY COMPLETED 3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER ;0 ; **-DBUBMP-SETUP UNIBUS ADDRESS;N>; THIS SECTION OF CODE WILL DETERMINE IF THE UNIBUS ADDRESS IS@; ALREADY IN THE FORMAT FOR THE MASSBUS CONTROLLER OR THE UNIBUS<; MAP FOR 22-BIT PROCESSORS WITHOUT RH CONTROLLERS. IT WILLA; ALSO CONVERT THE I/O FUNCTION CODE TO IT'S HARDWARE EQUIVALENT.C;O>; NOTE: AT THIS POINT THE REQUESTING UNIT MUST BE THE OWNER OF%; THE CONTROLLER FOR A DATA TRANSFER.#;S.DBUBMP: MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESS2 BITB #ADR,U.CW2+1(R5);ADDRESS BITS ALREADY SETUP? BNE DBINIO ;IF NE YESS/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?N BEQ 10$ ;IF EQ NOS: BIT #KS.MBC,K.STS(R1) ;YES, IS THIS A 22-BIT CONTROLLER? BNE 20$ ;IF NE YES' CALL $STMAP ;SETUP UNIBUS MAP ADDRESS 210$: ASL U.BUF(R5) ;SHIFT BITS <4:5> TO BITS <8:9> ASL U.BUF(R5) ;...T ASL U.BUF(R5) ;...I ASL U.BUF(R5) ;...G/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?A BEQ 20$ ;IF EQ NO% CALL $MPUBM ;MAP UNIBUS TO TRANSFERB:20$: BISB #ADR,U.CW2+1(R5);INDICATE ADDRESS SETUP COMPLETE;B3; CONVERT I/O FUNCTION CODE TO HARDWARE EQUIVALENT.D;S. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS4 CMPB #IO.HMS/256.,I.FCN+1(R1) ;DIGNOSTIC FUNCTION? BNE 40$ ;IF NE NOL. MOV #FUNTBL,R0 ;GET ADDRESS OF FUNCTION TABLE830$: MOVB (R0)+,U.BUF(R5) ;LOAD CONTROLLER FUNCTION CODE. CMPB (R0)+,I.FCN(R1) ;IS IT THE CORRECT CODE? BEQ 60$ ;IF EQ YES' CMP #FUNTBE,R0 ;END OF FUNCTION TABLE?I BNE 30$ ;IF NE NOM040$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION2 MOVB #171,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTION7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?T$ BHIS 50$ ;IF HIS FUNCTION IS LEGAL( MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS, MOVB U.UNIT(R5),RPCS2(R2) ;SELECT THE UNIT JMP DBFIN1 ;FINISH I/O50$: BEQ 60$ ;IF EQ YES0 MOVB #161,U.BUF(R5) ;SET WRITE LOGICAL FUNCTION+60$: MOV S.KRB(R4),R3 ;RETRIEVE KRB ADDRESS6- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXN! MUL #5,R3 ;SETUP INDEX INTO ...:" ADD #PRMSV,R3 ;... PARAMETER AREA& MOV U.BUF(R5),(R3)+ ;SAVE PARAMETERS MOV U.BUF+2(R5),(R3)+ ;... MOV U.CNT(R5),(R3)+ ;... MOV I.PRM+10(R1),(R3)+ ;...  MOV I.PRM+12(R1),(R3)+ ;...V;R%; **-DBINIO-INITIATE AN I/O OPERATION.;TE; THIS ROUTINE WILL INITIATE EITHER A SEEK OR THE DATA TRANSFER OPER-$6; ATION DEPENDING ON HOW THE CONTROLLER WAS REQUESTED.;I ; INPUTS:V;K; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB.;E*DBINIO: MOV @S.KRB(R4),R2 ;GET CSR ADDRESS) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSE( MOVB U.UNIT(R5),RPCS2(R2) ;SELECT UNIT;S9; DETERMINE IF DRIVE'S PORT IS SEIZED BY THIS CONTROLLER.;V' MTPS #PR5 ;EXECUTE AT DEVICE PRIORITY(+ CLR RPDS(R2) ;;;ATTEMPT TO SEIZE THE DRIVEA* BIT #DPR,RPDS(R2) ;;;DID THE DRIVE SEIZE? BNE 5$ ;;;IF NE YES 2 BISB #SEL,U.CW2+1(R5);;;SET PORT SELECT WAIT FLAG/ MOVB S.ITM(R4),S.CTM(R4) ;;;SET 00=maRaNTIMEOUT COUNT$ CLR S.FRK+2(R4) ;;;ALLOW INTERRUPTS& MOVB #IE,(R2) ;;;RE-ENABLE INTERRUPTS MTPS #0 ;;;ALLOW INTERRUPTSP* CALLR $RLCN ;RELEASE CONTROLLER AND EXIT;T1; CHECK IF THE HEADS ARE ON THE CORRECT CYLINDER.I;S*5$: MOVB #111,(R2) ;;;CLEAR SELECTED DRIVE0 BITB #S3.SIP,S.ST3(R4) ;;;ARE WE DOING A SEEK? BEQ 10$ ;;;IF EQ NO 1 BITB #IQ.UMD,I.FCN(R1) ;;; DIAGNOSTIC FUNCTION ?Z BNE 20$ ;;; IF NE YES2 CMP RPCC(R2),I.PRM+10(R1) ;;;DO WE NEED TO SEEK? BNE 20$ ;;;IF NE YES MTPS #0 ;ENABLE INTERRUPTS# JMP DBRQC1 ;GO REQUEST CONTROLLERM; .; LOAD CONTROLLER REGISTERS FOR DATA TRANSFER.;W210$: ADD #RPCS2,R2 ;;;POINT TO SECOND CSR REGISTER7 MOV I.PRM+12(R1),-(R2) ;;;INSERT TRACK/SECTOR ADDRESSR0 MOV U.BUF+2(R5),-(R2) ;;;INSERT BUFFER ADDRESS: MOV U.CNT(R5),-(R2) ;;;INSERT NUMBER OF BYTES TO TRANSFER# ROR (R2) ;;;CONVERT TO WORD COUNT1& NEG (R2) ;;;MAKE NEGATIVE WORD COUNT" TST -(R2) ;;;POINT BACK TO RPCS1'20$: MOV #FMT22,R3 ;;;FORCE 16-BIT MODE 8 CMP #IO.OFF!IQ.UMD,I.FCN(R1) ;;;DIAG. OFFSET FUNCTION? BNE 30$ ;;;IF NE NO. BIS I.PRM+6(R1),R3 ;;;YES, MERGE OFFSET VALUE430$: BITB #IHC,U.CW2+1(R5);;;INHIBIT HEADER COMPARE? BEQ 40$ ;;;IF EQ NO,+ BIS #HCI,R3 ;;;SET HEADER COMPARE INHIBITU+40$: MOV R3,RPOF(R2) ;;;SET OFFSET REGISTERM;U'; CHECK FOR DRIVE NOT READY CONDITIONS.T;R- MOV #IE.DNR&377,R0 ;;;ASSUME DRIVE NOT READYN; MOV I.PRM+10(R1),RPDC(R2) ;;;SET DESIRED CYLINDER ADDRESSC, MOV RPDS(R2),R3 ;;;GET CURRENT DRIVE STATUS COM R3 ;;;COMPLEMENT STATUSC, BIT #MOL!DRY,R3 ;;;DRIVE READY AND ON LINE? BNE 50$ ;;;IF NE NO6$ BIT #UNS,RPER1(R2) ;;;DRIVE UNSAFE? BEQ 70$ ;;;IF EQ NO)!50$: MTPS #0 ;;;ALLOW INTERRUPTS$/ BITB #US.SPU,U.STS(R5) ;IS DRIVE SPINNING UP?R BEQ 55$ ;IF EQ NOR5 BITB #US.VV,U.STS(R5);WAS VOLUME PREVIOUSLY MOUNTED?V BEQ 52$ ;;; IF EQ NO( BR DBPWF0 ;YES, WAIT FOR IT TO SPIN UP52$: JMP DBPWF1 ;;;355$: BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC OPERATION?M BEQ 60$ ;IF EQ NO + JMP DBDIAG ;PASS REGISTERS AND FINISH I/OS60$: ;REFERENCE LABEL .IF DF S2.NRD6 BIT #S2.NRD,S.ST2(R4) ;IS THIS FIRST DRIVE NOT READY?! BNE 61$ ;IF NE NO, GO LOG ERROR)6 BIS #S2.NRD,S.ST2(R4) ;INDICATE FIRST DRIVE NOT READY JMP DBPWF1 ;GO DO A RETRYR761$: BIC #S2.NRD,S.ST2(R4) ;CLEAR FIRST DRIVE NOT READY  .ENDC ; DF S2.NRD( CALL $DVERR ;LOG DRIVE NOT READY ERROR65$: JMP DBFIN1 ;FINISH I/O,70$: BIT #VV,R3 ;;;DID VOLUME VALID CHANGE?1 BEQ 75$ ;;;IF EQ NO (NOTE REVERSE STATUS OF VV)D0 BITB #US.SPU,U.STS(R5) ;;;DID WE JUST SPIN UP? BEQ 50$ ;;;IF EQ NO * MOVB #123,(R2) ;;;YES, RESET VOLUME VALID2 BISB #US.VV,U.STS(R5);;;SET SOFTWARE VOLUME VALID375$: BIT #S2.MAD,S.ST2(R4) ;;;MULTI-ACCESS DEVICE?T BEQ 90$ ;;;IF EQ NOO. CMP S.KRB(R4),S.KTB(R4) ;;;IS THIS PORT 'A'? BNE 80$ ;;;IF NE NO/ BICB #S3.SPA,S.ST3(R4) ;;;YES, SHOW IT SPUN UPN BR 85$ ;;;380$: BICB #S3.SPB,S.ST3(R4) ;;;IT MUST BE PORT 'B'I385$: BITB #S3.SPU,S.ST3(R4) ;;;BOTH PORTS SPUN UP?E BNE 95$ ;;;IF NE NOB; $; PREPARE TO START AN I/O OPERATION.;?790$: BICB #US.SPU,U.STS(R5) ;;;RESET DRIVE SPINNING UPO+95$: CLR S.FRK+2(R4) ;;;INIT FORK INTERLOCKW/ MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNTM- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVEC5 BISB #XCT,U.CW2+1(R5);;;SHOW FUNCTION BEING EXECUTED 0 BITB #S3.SIP,S.ST3(R4) ;;;SHOULD WE DO A SEEK? BEQ 105$ ;;;IF EQ NO;; START EXPLICIT SEEK.; 1 BITB #IQ.UMD,I.FCN(R1) ;;; DIAGNOSTIC FUNCTION ?4 BEQ 99$ ;;; IF EQ NO/ MOVB U.BUF(R5),(R2) ;;; LOAD POSITION FUNCTIONT BR 101$ ;;;O,99$: MOVB U.PRM(R5),R3 ;;; GET SECTORS/TRACK CLR -(SP) ;;;CLEAR A WORDS6 MOVB I.PRM+12(R1),(SP) ;;;GET DESIRED SECTOR ADDRESS, SUB DELTA,(SP) ;;;SUBTRACT ROTATIONAL DELTA% BPL 100$ ;;;IF PL ADJUSTMENT WAS OKX/ ADD R3,(SP) ;;;CORRECT ADJUSTMENT IF NEGATIVEB;100$: MOVB I.PRM+13(R1),1(SP) ;;;SET DESIRED TRACK ADDRESS;9 MOV (SP)+,RPDA(R2) ;;;LOAD ADJUSTED TRACK/SECTOR ADDRESSC+ MOVB #131,(R2) ;;;LOAD THE SEARCH FUNCTION;#101$: MTPS #0 ;;; ALLOW INTERRUPTSL( BR DBPWF3 ;RELEASE CONTROLLER 00=uaVaTADATADATADATADATADATADATADATADATAAND EXIT;M; START DATA TRANSFER.;C1105$: MOV S.KRB(R4),R3 ;;;GET CURRENT KRB ADDRESSR7 BIT #IQ.UMD,I.FCN(R1) ;;;IS IT A DIAGNOSTIC FUNCTION?( BEQ 106$ ;;;IF EQ NO2 CMPB U.BUF(R5),#140 ;;;IS IT A UMD SEEK FUNCTION? BLO 107$ ;;;IF LO YESJ=106$: BIS #KS.DIP,K.STS(R3) ;;;SET DATA TRANSFER IN PROGRESSI1 BIT #FE.EXT,$FMASK ;;;22-BIT ADDRESSING ENABLED?U BEQ 110$ ;;;IF EQ NO7 BIT #KS.MBC,K.STS(R3) ;;;IS THIS A 22-BIT CONTROLLER?T BEQ 110$ ;;;IF EQ NO MOV R3,R1 ;;;COPY KRB ADDRESSL' ADD K.OFF(R3),R1 ;;;POINT TO UCB TABLE+ MOV KE.RHB(R1),R1 ;;;RETREIVE RHBAE OFFSET ' ADD R2,R1 ;;;FORM AN I/O PAGE ADDRESST2 MOVB U.BUF+1(R5),(R1);;;SET MEMORY EXTENSION BITS+107$: MOVB U.BUF(R5),(R2) ;;;START FUNCTIONO BR 120$ ;;;;*110$: MOV U.BUF(R5),(R2) ;;;START FUNCTION 120$: MTPS #0 ;ALLOW INTERRUPTS;#<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.; %DBCAN: RETURN ;;;NOP FOR RP04/05/062;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVEP?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANYA; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESS ; THE UNIT IS ALREADY READY.;-3DBPWF: TSTB S.STS(R4) ;IS THIS UNIT CURRENTLY BUSY?O BEQ DBPWF2 ;IF EQ NO9DBPWF0: MOVB #15.,S.STS(R4) ;WAIT A MAXIMUM OF ONE MINUTER6DBPWF1: MOVB S.ITM(R4),S.CTM(R4) ;4 SECONDS AT A TIME5DBPWF2: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UPH1DBPWF3: CALLR $RLCN ;RELEASE CONTROLLER AND EXITO;+5; **-$DBINT-RH11/RH70-RP04/05/06 DISK PACK CONTROLLERO; INTERRUPT HANDLERE;- .ENABL LSBN3$DBINT::BR DBFRK ;;;ENTRY POINT FOR DATA TRANSFERSD+ TST S.FRK+2(R4) ;;;ARE INTERRUPTS ALLOWED?." BNE DBCAN ;;;IF NE NO, IGNORE IT' CALL $FORK ;;;CREATE A SYSTEM PROCESSF8DBFRK: BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT? BEQ 5$ ;IF EQ NO- BICB #SEL,U.CW2+1(R5);RESET PORT SELECT FLAGB, MOV U.SCB(R5),R4 ;YES, RETREIVE SCB ADDRESS. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS JMP DBRQC ;GO TRY AGAINN65$: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXS# MOV @S.KRB(R4),R2 ;GET CSR ADDRESS.( MOVB U.UNIT(R5),RPCS2(R2) ;SELECT UNIT# TSTB S.STS(R4) ;IS THIS UNIT BUSY? BNE 10$ ;IF NE YES' MTPS #PR5 ;EXECUTE AT DEVICE PRIORITY5( CLR S.FRK+2(R4) ;;;RESET FORK INTERLOCK/ MOV #TRE!11,(R2) ;;;CLEAR CONTROLLER AND DRIVEI: BISB #S3.DRL,S.ST3(R4) ;;;SHOW DUAL ACCESS UNIT RELEASED MOVB #113,(R2) ;;;RELEASE DRIVE MTPS #0 ;;;ALLOW INTERRUPTSL BR DBPWF3 ;RELEASE CONTROLLERR;R@; INTERRUPT WAS FROM A BUSY UNIT. IF WE JUST DID A SEEK WE WILLA; GO AND START THE DATA TRANSFER OPERATION. IF THE DATA TRANSFERC>; TERMINATED, DETERMINE WHY. IF WE ARE SPINNING UP, RETRY THE ; OPERATION.;110$: BITB #US.SPU,U.STS(R5) ;ARE WE SPINNING UP?K BEQ 15$ ;IF EQ NOI- BIT #S2.MAD,S.ST2(R4) ;MULTI-ACCESS DEVICE?  BEQ 12$ ;IF EQ NO., CMP S.KRB(R4),S.KTB(R4) ;IS THIS PORT 'A'? BNE 14$ ;IF NE NO;2 BITB #S3.SPA,S.ST3(R4) ;IS PORT 'A' SPINNING UP? BEQ 15$ ;IF EQ NOR%12$: CALLR 100$ ;RETRY THE OPERATION 614$: BITB #S3.SPB,S.ST3(R4) ;IS PORT 'B' SPINNING UP? BNE 12$ ;IF NE YES715$: BIT #S2.EIP,S.ST2(R4) ;ERROR ALREADY IN PROGRESS?  BNE 20$ ;IF NE YES& CALL DBPRM ;SET INITIAL RETRY VALUES.20$: MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS/ MOV #IS.SUC&377,R0 ; ASSUME SUCESSFUL TRANSFERC1 BITB #S3.SIP,S.ST3(R4) ; DID WE JUST DO A SEEK ?S BEQ 30$ ;IF EQ NOR0 BICB #S3.SIP,S.ST3(R4) ;CLEAR SEEK IN PROGRESS8 BITB #IQ.UMD,I.FCN(R1) ; DIAGNOSTIC FUNCTION EXECUTED ? BNE DBDIAG ; IF NE YES/ BIT #ERR,RPDS(R2) ;ANY ERRORS DURING THE SEEK?B BEQ 100$ ;IF EQ NO! CALL $DVERR ;LOG THE SEEK ERRORS! DECB RTTBL(R3) ;COUNT THIS RETRY " CALL DBERL ;FINISH ERROR LOGGING125$: MOV #TRE!11,(R2) ;CLEAR CONTROLLER AND DRIVE ' MOV #107,R1 ;SET RECALIBRATE FUNCTIONR. CALLR DBFUNC ;ISSUE THE RECALIBRATE AND EXIT00=}aRaN;(G; INTERRUPT WAS DUE TO A DATA TRANSFER OPERATION OR DIAGNOSTIC FUNCTION(; <30$: BITB #IQ.UMD,I.FCN(R1) ; DIAGNOSTIC FUNCTION EXECUTED ? BNE DBDIAG ;IF NE YESE$ BIT #60,(R2) ;POSITIONING FUNCTION? BEQ 80$ ;IF EQ YES BIT #TRE!MCPE,(R2) ;ANY ERRORS? BEQ 70$ ;IF EQ NOE. MOV RPWC(R2),R0 ;GET NEGATIVE WORDS REMAINING( MOV R0,SAVWC(R3) ;SAVE IT FOR LATER USE" CLR DLTWC(R3) ;ZERO DLT FLAG WORD TST RPCS2(R2) ;DATA LATE ERROR? BPL 35$ ;IF PL NOC: MOV R0,DLTWC(R3) ;YES, SAVE REAL NEGATIVE WORDS REMAINING* BNE 35$ ;IF NE WE HAD A PARTIAL TRANSFER8 MOV #-1,DLTWC(R3) ;DLT ON LAST WORD, FAKE A PARTIAL XFR'35$: ASL R0 ;CONVERT TO NEGATIVE BYTES;6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED* SUB #512.,R0 ;SUBTRACT OUT BLOCK IN ERROR) BLE 40$ ;IF LE NO GOOD BYTES TRANSFERED01 BITB #ERL,U.CW2+1(R5);ERROR ALREADY IN PROGRESS?S BEQ 40$ ;IF EQ NO;R:; WE GOT AN ERROR BUT SOME GOOD DATA WAS TRANSFERED. THIS6; INDICATES THAT WE RECOVERED FROM THE PREVIOUS ERROR.;A" CALL DBERL ;FINISH ERROR LOGGING#40$: CALL $DVERR ;LOG DEVICE ERRORM, BISB #ERL,U.CW2+1(R5);SET ERROR LOGGED FLAG, MOV #IE.WLK&377,R0 ;ASSUME WRITE LOCK ERROR& BIT #WLE,RPER1(R2) ;WRITE LOCK ERROR? BNE 60$ ;IF NE YES/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERROR4' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?T BNE 60$ ;IF NE YES% TST DLTWC(R3) ;REAL DATA LATE ERROR?  BNE 110$ ;IF NE YES 1 MOV RPER1(R2),R1 ;GET CONTENTS OF ERROR REGISTERN. BIT #UNS!IAE!AOE!RMR!ILR!ILF,R1 ;HARD ERROR? BNE 60$ ;IF NE YES$ BIT #NED!NEM,RPCS2(R2) ;HARD ERROR? BNE 60$ ;IF NE YES$ BIT #HCE,R1 ;HEADER COMPARE ERROR?& BNE 25$ ;IF NE YES, DO A RECALIBRATE8 BIT #WCE!UPE!PGE!MXF!MDPE,RPCS2(R2) ;CONTROLLER ERROR?( BNE DBRTRY ;IF NE YES, RETRY OPERATION! JMP DBECC ;CHECK FOR ECC ERRORS.7DBDIAG: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKT" CALL DBCLR ;CLEAR SELECTED DRIVE60$: JMP DBFIN ;FINISH I/OR+70$: JMP DBWCHK ;GO TEST FOR A WRITE CHECK;T ; PROCESS POSITIONING OPERATION.;R380$: MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERRORH. BIT #ERR,RPDS(R2) ;ERRORS DURING POSITIONING? BEQ 85$ ;IF EQ NO? CALL $DVERR ;LOG IT " CLR R1 ;SHOW NO BYTES TRANSFERED JMP DBFIN1 ;FINISH I/O(85$: BIT #10,(R2) ;RECALIBRATE FUNCTION? BNE 95$ ;IF NE NOE190$: BIT #PIP,RPDS(R2) ;IS THE RECAL REALLY DONE?A BNE 90$ ;IF NE NO, LOOP FOR IT# BR DBRTRY ;NOW RETRY THE FUNCTION0295$: CMP #OFFTB+16,OFFAD(R3) ;FINAL OFFSET TRIED? BEQ 60$ ;IF EQ YES'100$: CALL DBCLR ;CLEAR SELECTED DRIVE' CALLR DBUBMP ;RETRY ORIGINAL FUNCTIONA;R>; THE TRANSFER WAS STOPPED DUE TO A DATA LATE ERROR CONDITION.>; WE WILL NOW BACKUP THE WORD COUNT, BUS ADDRESS AND CYLINDER/?; TRACK/SECTOR ADDRESS BY ONE BLOCK AND RETRY THE TRANSFER FROMF>; THIS POINT. THIS IS DONE TO PREVENT THE DATA LATE CONDITION(; FROM RECURRING DUE TO A LONG TRANSFER.; 0110$: DECB RTTBL(R3) ;RETRY DATA LATE CONDITION? BLE 60$ ;IF LE NO)4 MOV DLTWC(R3),R0 ;GET REAL NEGATIVE WORDS REMAINING# ASL R0 ;CONVERT TO NEGATIVE BYTESL6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED- BIC #777,R0 ;GET BLOCKS ACTUALLY TRANSFEREDO0 CALL DBCALC ;BACKUP TO START OF BLOCK IN ERROR( TST U.CNT(R5) ;DLT ERROR ON LAST BLOCK? BNE 100$ ;IF NE NO0 ADD R0,U.CNT(R5) ;YES, BACKUP BYTES TO TRANSFER BR 100$ ;RESTART THE TRANSFER .DSABL LSBI;+@; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING REPEATEDC; UNLESS THE OPERATION WAS DIAGNOSTIC. TIMEOUTS ARE USUALLY CAUSEDEC; BY POWERFAILURE BUT MAY ALSO BE THE RESULT OF A HARDWARE FAILURE.);- .ENABL LSBS7DBOUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?T BEQ 15$ ;;;IF EQ NOC/ BIT #S2.MAD,S.ST2(R4) ;;;MULTI-ACCESS DEVICE?R BEQ 10$ ;;;IF EQ NOL. CMP S.KRB(R4),S.KTB(R4) ;;;IS THIS PORT 'A'?) BNE 5$ ;;;IF NE NO, IT MUST BE PORT 'B'S4 BITB #S3.SPA,S.ST3(R4) ;;;IS PORT 'A' SPINNING UP? BNE 10$ ;;;IF NE YES( BR 15$ ;;;TIMEOUT FOR NORMAL OPERATION75$: BITB #S3.SPB,S.ST3(R4) ;;;IS PORT 'B' SPINNING UP?  BEQ 15$ ;;;IF EQ NO 110$: DECB S.STS(R4) ;;;HAVE WE WAITED 00=aVaTADATADATADATADATADATADATADATADATAENOUGH YET?. BEQ 15$ ;;;IF EQ YES MTPS #0 ;;;ALLOW INTERRUPTSS. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS JMP DBRQC ;RETRY OPERATION,15$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY MTPS #0 ;;;ALLOW INTERRUPTS?) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSS3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER?) MOV S.KRB(R4),R2 ;GET CURRENT KRB ADDRSSU- MOVB K.CON(R2),R3 ;RETREIVE CONTROLLER INDEXR MOV (R2),R2 ;GET CSR ADDRESS: MOVB U.UNIT(R5),RPCS2(R2) ;SELECT UNIT FOR ERROR LOGGING! CALL $DVTMO ;LOG DEVICE TIMEOUTQ;S>; NOTE: THE FOLLOWING SIX INSTRUCTIONS (AND THE SUBROUTINE) DO4; NOT CHANGE THE C-BIT SETTING RETURNED FROM $DVTMO.;C2 BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT?) BNE DBFIN1 ;IF NE YES, WE DIDN'T GET ITO0 BITB #S3.SIP,S.ST3(R4) ;TIMEOUT DURING A SEEK? BEQ 20$ ;IF EQ NO$ CALL DBPRM ;RESET RETRY PARAMETERS;20$: BICB #S3.SIP,S.ST3(R4) ;ASSUME DATA TRANSFER FUNCTION2- BCS DBDIAG ;IF CS TIMEOUT DURING DIAGNOSTICR4 BITB #US.SPU,U.STS(R5) ;WAS THE DRIVE SPINNING UP? BEQ DBRTRY ;IF EQ NO- MOV #IE.DNR&377,R0 ;YES, SET DRIVE NOT READYU BR DBFIN ;FINISH I/O0DBRTRY: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS< BICB #ERL,U.CW2+1(R5) ;CAN'T CLOSE ERRORS RETRIED FROM BEG' BIT #WCE,RPCS2(R2) ;WRITE CHECK ERROR?. BEQ 25$ ;IF EQ NOU/ MOV #IE.WCK&377,R0 ;YES, SET WRITE CHECK ERRORR+25$: BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?, BNE DBFIN ;IF NE YES DECB RTTBL(R3) ;RETRY FUNCTION? BGT 40$ ;IF GT YES BR DBFIN ;FINISH I/O;.!; TEST FOR WRITE CHECK OPERATION.?;BCDBWCHK: BITB #IO.WLC&377,I.FCN(R1) ;WRITE FOLLOWED BY WRITE CHECK? BNE 30$ ;IF NE YES5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED BY MCR?C BEQ DBFIN ;IF EQ NON330$: CMPB #171,U.BUF(R5) ;WAS LAST FUNCTION A READ?  BEQ DBFIN ;IF EQ YES0 CMPB #161,U.BUF(R5) ;WAS LAST FUNCTION A WRITE? BNE DBFIN ;IF NE NO:0 MOV #RETRY,RTTBL(R3) ;REINITIALIZE RETRY COUNT" MUL #5,R3 ;CREATE INDEX INTO ...' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAB* MOV (R3)+,U.BUF(R5) ;RESTORE PARAMETERS  MOV (R3)+,U.BUF+2(R5) ;... MOV (R3)+,U.CNT(R5) ;... MOV (R3)+,I.PRM+10(R1) ;...B MOV (R3)+,I.PRM+12(R1) ;...C. MOVB #151,U.BUF(R5) ;SET WRITE CHECK FUNCTION*40$: CALL DBCLR ;CLEAR THE SELECTED DRIVE/ CALLR DBUBMP ;START THE WRITE CHECK OPERATIONY .DSABL LSB1;F; **-DBFIN-FINISH I/O OPERATION;EB; THIS ROUTINE WILL SET THE ACTUAL BYTES TRANSFERED PARAMETER, THEA; ERROR LOGGING RETRY COUNTS AND CALL $IODON. THE SELECTED DRIVE <; IS RELEASED, IF REQUESTED, AND THE CONTROLLER IS RELEASED.;+ ; INPUTS:);.; R0=SUCCESS/ERROR CODE ; R2=ADDRESS OF CONTROLER CSR;; R4=ADDRESS OF THE SCB(; R5=ADDRESS OF THE UCBB;R/DBFIN: MOV S.PKT(R4),R3 ;GET I/O PACKET ADDRESSA1 MOV RPWC(R2),R1 ;GET WORDS REMAINING TO TRANSFERT+ ASL R1 ;CONVERT TO BYTES LEFT TO TRANSFERD8 ADD I.PRM+4(R3),R1 ;CALCULATE BYTES ACTUALLY TRANSFERED.DBFIN1: CALL DBCLR1 ;CLEAR THE SELECTED DRIVE( MOV #TRE,(R2) ;NOW CLEAR THE CONTROLLER- BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT FLAG,* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS;)); CHECK FOR ATTENTIONS AND RELEASE DRIVE.S; +10$: TSTB RPAS(R2) ;ANY ATTENTIONS PENDING?5 BEQ 20$ ;IF EQ NO4 BISB #IE,(R2) ;YES, FORCE CALL TO INTERRUPT HANDLER BR 10$ ;TRY AGAINE:20$: BITB #S3.NRL,S.ST3(R4) ;SHOULD WE RELEASE THE DRIVE? BEQ 30$ ;IF EQ YES- MOVB #IE,(R2) ;NO, JUST RE-ENABLE INTERRUPTSF BR 40$ ;<30$: BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED" MOVB #113,(R2) ;RELEASE THE DRIVE140$: MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEX / MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTO4 BITB #XCT,U.CW2+1(R5);HAS A FUNCTION BEEN EXECUTED? BNE 50$ ;IF NE YES' MOV #RETRY,R2 ;SET MAXIMUM RETRY COUNTF350$: BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNT5 BICB #S3.SIP,S.ST3(R4) ;RESET SEEK IN PROGRESS FLAGV+DBFIN2: CALL $RLCN ;RELEASE THE CONTROLLER # CALL $IODON ;FINISH I/O OPERATION;! JMP DBINI ;PROCESS NEXT REQUESTW;C!; **-DBECC-ATTEMPT ECC CORRECTION ;LD; THIS ROUTINE IS ENTERED IF A DATA ERROR IS DETECTED. IF THE E00=aRaNRRORG; IS CORRECTABLE, THE EXECUTIVE ECC ROUTINE IS CALLED AND THE OPERATIONSE; IS RESTARTED FROM WHERE THE CONTROLLER STOPPED. IF OFFSET RECOVERYA; IS REQUIRED, WE WILL DO IT.E;* ; INPUTS:R;S; R1=CONTENTS OF RPER1; R2=ADDRESS OF CONTROLLER CSR; .DBECC: BIT #DCK!DTE!HCRC,R1;CORRECTABLE ERROR? BEQ DBRTRY ;IF EQ NO/ CMPB #171,U.BUF(R5) ;IS THIS A READ OPERATION?N BNE DBRTRY ;IF NE NO4 MOV SAVWC(R3),R0 ;GET NEGATIVE # OF WORDS REMAINING ASL R0 ;CONVERT TO BYTES6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED. BEQ DBOFF ;IF EQ NONE TRANSFERED, TRY OFFSET( BIS RPER2(R2),R1 ;.OR. ERROR REGISTER 2% CMP #DCK,R1 ;ONLY DATA CHECK ERROR?,! BNE DBOFF ;IF NE NO, TRY OFFSETS7 MOV SAVWC(R3),-(SP) ;PUT REMAINING WORD COUNT ON STACK) MOV RPEC1(R2),R1 ;GET ECC ERROR POSITIONL- MOV RPEC2(R2),R3 ;GET ECC CORRECTION PATTERNB' MOV (SP)+,R2 ;GET REMAINING WORD COUNTD CALL $ECCOR ;DO ECC CORRECTION" CALL DBCLR ;CLEAR SELECTED DRIVE/ CALL DBPRM0 ;RESET OFFSET RECOVERY PARAMETERSC( CALL DBCALC ;RE-CALCULATE DISK ADDRESS5 MOV #IS.SUC&377,R0 ;ASSUME NO MORE WORDS TO TRANSFER)+ TST U.CNT(R5) ;ANY MORE WORDS TO TRANSFER?L BEQ DBFIN ;IF EQ NOB+DBREST: CALLR DBINIO ;RESTART THE TRANSFERR;)"; **-DBOFF-ATTEMPT OFFSET RECOVERY;M=; THIS ROUTINE IS CALLED WHENEVER WE NEED TO OFFSET THE HEADST@; SOME DISTANCE FROM TRACK CENTERLINE TO PROPERLY READ THE DATA.;C ; INPUTS: ; 6; R0=NUMBER OF BYTES ACTUALLY TRANSFERED TO THIS POINT;B5DBOFF: BITB #OFA,U.CW2+1(R5) ;OFFSET ALREADY ACTIVE?R BNE 5$ ;IF NE YESE" DECB RTTBL(R3) ;ANY RETRIES LEFT? BGT 5$ ;IF GT YES), MOV #IE.VER&377,R0 ;SET UNRECOVERABLE ERROR JMP DBFIN ;FINISH I/O$5$: TST R0 ; ANYTHING TRANSFERRED ? BEQ 20$ ; NO0 BIT #ECH!DTE,RPER1(R2); HARD ECC OR DTE ERROR ? BEQ 15$ ; NO* DEC R0 ;BACK UP TO THE PREVIOUS BLOCK...) ; OR CURRENT IF NOT ON BLOCK BOUNDARY ) BIC #777,R0 ; FORCE TO A BLOCK BOUNDARYM! ; Z-BIT SET BY BIC IF R0 IS 0  BEQ 20$ ;IF EQ NOF;B@; THE TRANSFER ENDED IN AN ECC HARD ERROR BUT THERE WERE SECTORSE; TRANSFERED THAT CONTAINED GOOD DATA. SINCE THE ECC HARD ERROR COULDVA; HAVE BEEN CAUSED BY A CYLINDER CROSSING, THE GOOD DATA IS SAVEDS6; AND THE TRANSFER IS RETRIED FROM THE POINT OF ERROR.;T15$: (/ CALL DBPRM0 ;RESET OFFSET RECOVERY PARAMETERSC' CALL DBCALC ;CALCULATE NEW PARAMETERS $ TST U.CNT(R5) ;ERROR ON LAST BLOCK? BNE 20$ ;IF NE NOO0 ADD R0,U.CNT(R5) ;YES, BACKUP BYTES TO TRANSFER020$: BITB #OFA,U.CW2+1(R5) ;OFFSET MODE ACTIVE? BNE 30$ ;IF NE YES3 CALL DBPRM0 ;NO, RESET OFFSET RECOVERY PARAMETERST* BISB #OFA,U.CW2+1(R5) ;SET OFFSET ACTIVE#25$: MOV #117,R1 ;SET RTC FUNCTIONR( MOV #FMT22,R0 ;SET OFFSET VALUE TO ZERO BR 50$ ;; A; NO GOOD DATA WAS TRANSFERED - CHECK IF OFFSET SHOULD BE CHANGEDO;E=30$: BIT #DTE!ECH,RPER1(R2) ;DRIVE TIMING OR HARD ECC ERROR?  BNE 40$ ;IF NE YES6 BISB #IHC,U.CW2+1(R5);SET HEADER COMPARE INHIBIT FLAG%40$: DECB RTTBL+1(R3) ;CHANGE OFFSET?B BGT DBREST ;IF GT NO- DECB RTTBL(R3) ;COUNT EACH OFFSET AS A RETRY ( ADD #2,OFFAD(R3) ;UPDATE OFFSET POINTER) MOV @OFFAD(R3),R0 ;GET NEXT OFFSET VALUEC% BEQ 25$ ;IF EQ RETURN TO CENTERLINEO" MOV #115,R1 ;SET OFFSET FUNCTION. MOVB #2,RTTBL+1(R3) ;SET RECOVERY RETRY COUNT( BIT #2,RPDT(R2) ;IS THIS DRIVE AN RP04? BEQ 50$ ;IF EQ YES0 ASRB R0 ;NO, IT'S AN RP06 SO ADJUST OFFSET ...- BIC #100,R0 ;... VALUE AND SIGN ACCORDINGLYT150$: MOV #TRE!11,(R2) ;CLEAR CONTROLLER AND DRIVE ( MOV R0,RPOF(R2) ;LOAD NEXT OFFSET VALUE3 BICB #IHC,U.CW2+1(R5);CLEAR HEADER COMPARE INHIBIT#6DBFUNC: MOVB S.ITM(R4),S.CTM(R4) ;RESET TIMEOUT COUNT! MTPS #PR5 ;;;DISABLE INTERRUPTSI( CLR S.FRK+2(R4) ;;;RESET FORK INTERLOCK- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVE * MOVB R1,(R2) ;;;INITIATE OFFSET FUNCTION MTPS #0 ;ENABLE INTERRUPTS RETURN ;A;06; **-DBERL-FINISH ERROR LOGGING FOR MID-TRANSFER ERROR;.@; THIS ROUTINE IS CALLED TO FINISH OFF THE ERROR LOGGING PROCESS8; DURING MID-TRANSFER IF WE HAVE SUCCESSFULLY RECOVERED.;C ; INPUTS:2;R; R300=aVaTADATADATADATADATADATADATADATADATA=CONTROLLER INDEX ;I#DBERL: MOV R2,-(SP) ;SAVE REGISTERS  MOV R1,-(SP) ;U/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTK/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNT2, MOV #IS.SUC&377,R0 ;RECOVERY WAS SUCCESSFUL+ CALL $FNERL ;FINISH ERROR LOGGING PROCESS MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 ;R( ;FALL THRU AND RESET RECOVERY PARMS.;R#; SET RECOVERY AND RETRY PARAMETERSR;L3DBPRM: MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNTS?DBPRM0: MOVB #16.,RTTBL+1(R3) ;SET FOR 16. TIMES AT CENTERLINE7DBPRM1: MOV #OFFTB,OFFAD(R3) ;SET OFFSET TABLE POINTER1 BICB #OFA,U.CW2+1(R5) ;RESET OFFSET ACTIVE FLAGB RETURN ;.;M*; **-DBCALC-CALCULATE UPDATED DISK ADDRESS; ?; THIS ROUTINE WILL CALCULATE THE NEW DISK AND BUFFER ADDRESSESC3; BASED ON THE NUMBER OF BYTES ACTUALLY TRANSFERED. ; ; INPUTS:H;A ; R0=BLOCKS ACTUALLY TRANSFERED.; ; OUTPUTS:;T; R0=UNCHANGED IF U.CNT(R5)=0V#; I.PRM+10(R1)=NEW CYLINDER ADDRESSO'; I.PRM+12(R1)=NEW TRACK SECTOR ADDRESS ; <DBCALC: SUB R0,U.CNT(R5) ;REDUCE BYTES REMAINING TO TRANSFER BEQ 30$ ;IF EQ NO BYTES LEFT3 ADD R0,U.BUF+2(R5) ;UPDATE STARTING BUFFER ADDRESS0 ADCB U.BUF+1(R5) ;AND THE MEMORY EXTENSION BITS2 BIT #FE.EXT,$FMASK ;IS 22-BIT ADDRESSING ENABLED? BEQ 5$ ;IF EQ NO' MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESSN: BIT #KS.MBC,K.STS(R1) ;IS THIS A 22-BIT MASSSBUS DEVICE? BNE 5$ ;IF NE YEST& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESSR ADCB -(R1) ;... 15$: MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESST1 SWAB R0 ;CALCULATE NUMBER OF SECTORS TRANSFERED ASR R0 ;1 ADD I.PRM+12(R1),R0 ;UPDATE TRACK/SECTOR ADDRESSC# TST -(SP) ;GET A WORKING REGISTERO110$: CLR (SP) ;CLR THE WORKING REGISTER FOR LOOPN$ CMPB U.PRM(R5),R0 ;SECTOR OVERFLOW? BHI 20$ ;IF HI NO ( MOVB U.PRM(R5),(SP) ;COPY SECTORS/TRACK1 SUB (SP),R0 ;SUBTRACT A TRACKS WORTH OF SECTORSA ADD #1*256.,R0 ;ADD IN A TRACKA+ MOV U.PRM(R5),(SP) ;GET TRACKS AND SECTORSR) CLRB (SP) ;ISOLATE ONLY TRACKS/CYLINDER; CMP (SP),R0 ;TRACK OVERFLOW? BHI 10$ ;IF HI NOM& SUB (SP),R0 ;NORMALIZE TRACK ADDRESS* INC I.PRM+10(R1) ;UPDATE CYLINDER ADDRESS BR 10$ ;:20$: MOV R0,I.PRM+12(R1) ;SET UPDATED TRACK/SECTOR ADDRESS TST (SP)+ ;PRUNE STACK30$: RETURN ;0;T(; **-DBVV-PROCESS VOLUME VALID FUNCTIONS;RB; HERE WE WILL PROCESS VOLUME VALID FUNCTIONS. IF THE FUNCTION ISC; RESET VOLUME VALID WWE WILL FORCE AN UNLOAD OF THE DRIVE. IF THE B; FUNCTION IS SET VOLUME VALID, WE WILL SET THE HARDWARE "VV" BIT.A; IF THE FUNCTION IS A VOLUME VALID NOP, WE WILL SIZE THE DISK BY06; PASSING THE CONTROLLER REGISTERS BACK TO THE CALLER.;D ; INPUTS:; ; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB/;T8DBVV: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER- MOV #IS.SUC&377,R0 ;SET SUCCESSFUL OPERATION( MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS, MOVB U.UNIT(R5),RPCS2(R2) ;SELECT THE UNIT. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS MOVB #111,(R2) ;CLEAR THE DRIVE* BIT #NED,RPCS2(R2) ;DOES THE DRIVE EXIST? BEQ 5$ ;IF EQ YES ! TST I.PRM+2(R1) ;SIZE THE DISK ?0 BMI 4$ ;IF MINUS THEN YESG CALL $DVERR ;LOG THE ERROR4$: ;REFFERENCE LABEL2 MOVB #TRE/256.,RPCS1+1(R2) ;CLEAR THE CONTROLLER( MOV #IE.SZE&377,R0 ;UNABLE TO SIZE UNIT) BICB #US.VV,U.STS(R5);RESET VOLUME VALIDE JMP DBFIN2 ;EXIT#5$: TST I.PRM+2(R1) ;SIZE THE DISK?S BPL 10$ ;IF PL NOC2 CALL $CRPAS ;PASS CONTROLLER REGISTERS TO CALLER BR 15$ ;010$: BIT #VV$SET,I.PRM+2(R1) ;SET VOLUME VALID? BEQ 30$ ;IF EQ NOH7 MOV RPDS(R2),R1 ;GET CONTENTS OF DRIVE STATUS REGISTERI COM R1 ;TOGGLE THEM ) BIT #MOL!DRY,R1 ;DRIVE READY AND ONLINE?E BNE 20$ ;IF NE NOR( MOVB #23,(R2) ;ISSUE PACK ACK TO SET VV15$: JMP DBFIN1 ;EXIT320$: MOV #IE.DNR&377,R0 ;DRIVE NOT READY ERROR CODEU) BICB #US.VV,U.STS(R5);RESET VOLUME VALID; BR 15$ ;EXIT030$: BIT #VV$UNL,I.PRM+2(R1) ;UNLOAD THE DRIVE? BEQ 15$ ;IF EQ NOO+ BIT #PIP,RPDS(R2) ;IS THE DRIVE IN MOTION?:- BNE 15$ ;IF NE YES, IT'S PROBABLY UNLOADINGB% MOVB #300=a#aN,(R2) ;ISSUE UNLOAD FUNCTIONE BR 15$ ;;V$; **-DBCLR-CLEAR DRIVE OR SUB-SYSTEM?; **-DBCLR1-ALTERNATE ENTRY TO CLEAR DRIVE W/O INTERRUPT ENABLEE;RC; ISSUE A DRIVE CLEAR FUNCTION UNLESS THE SELECTED DRIVE/CONTROLLER0'; IS HUNG, THEN ISSUE SUB-SYSTEM CLEAR.R;C ; INPUTS: ;.; R2=CSR ADDRESS; R5=UCB ADDRESS;5 ; OUTPUTS:;B; SELECTED DRIVE IS CLEAREDA;H .ENABL LSB1+DBCLR: TSTB (R2) ;IS THE CONTROLLER READY?I BPL 10$ ;IF PL NO1 BIT #1,(R2) ;IS GO BIT SET?N BNE 10$ ;IF NE YES& MOVB #111,(R2) ;NO, ISSUE DRIVE CLEAR RETURN ;AND EXITR,DBCLR1: TSTB (R2) ;IS THE CONTROLLER READY? BPL 10$ ;IF PL NOO BIT #1,(R2) ;IS GO BIT SET?  BNE 10$ ;IF NE YES% MOVB #11,(R2) ;NO, ISSUE DRIVE CLEAR RETURN ;AND EXIT ;Y; NOTE:R;@; THE FOLLOWING INSTRUCTION WILL CAUSE ALL I/O ON OTHER UNITS TOD; ABORT. THIS IS OK BECAUSE THE TIMEOUT FACILITY SHOULD CATCH THEM.;R.10$: BIS #40,RPCS2(R2) ;ISSUE SUB-SYSTEM CLEAR0 MOVB U.UNIT(R5),RPCS2(R2) ;RE-SELECT THE DRIVE RETURN ;AND EXIT2 .DSABL LSBD;+'; **-DBCHK-VALIDATE AND CONVERT THE LBN(; 9; THIS ROUTINE IS CALLED FROM $DRQRQ TO DO LBN PROCESSINGR9; FOR DEVICES WHICH SUPPORT QUEUE OPTIMIZATION. IF BLKC2;9; DETECTS AN ERROR IT WILL RETURN TO THE CORRECT PLACE INR; $DRQRQ AFTER CALLING $IOALT.;I ; INPUTS:L;O; R1=I/O PACKET ADDRESSR; R5=UCB ADDRESS;E ; OUTPUTS:;C4; IF THE CHECKS SUCCEEDS, THEN THE LBN IN THE PACKET=; IS REPLACED BY THE CYLINDER/TRACK/SECTOR. R1 IS PRESERVED.T;E:; IF THE CHECKS FAILS, THEN $IOALT IS ENTERED WITH A FINAL8; STATUS OF IE.BLK AND A RETURN TO THE CORRECT PLACE IN ; $DRQRQ IS EXECUTED.N;O;S<; NOTE: ALL FUNCTIONS PUT INTO THE DRIVER QUEUE ARRIVE HERE.3; THESE INCLUDE IO.ATT, IO.DET, AND ACP FUNCTIONS.P;-;DBCHK: MOV I.FCN(R1),-(SP) ;PUT THE FUNCTION ONTO THE STACKI& CMPB #IO.ATT/256.,1(SP) ;IS IT ATTACH% BEQ 15$ ;IF EQ YES - LEAVE IT ALONEE' CMPB #IO.DET/256.,1(SP) ;IS IT DETACHA% BEQ 15$ ;IF EQ YES - LEAVE IT ALONES) BIC #7,(SP) ;CLEAR THE SUBFUNCTION BITSE- CMP #IO.STC,(SP) ;IS IT SET CHARACTERISTICS?E% BEQ 15$ ;IF EQ YES - LEAVE IT ALONEI TST (SP)+ ;CLEAN THE STACK) CALL $BLKC2 ;CHECK LOGICAL BLOCK NUMBERI+ CALL $CVLBN ;CONVERT LOGICAL BLOCK NUMBERT3 MOV R2,I.PRM+10(R3) ;SAVE DESIRED CYLINDER ADDRESSN" SWAB R1 ;SWAP TRACK TO HIGH BYTE$ BIS R1,R0 ;MERGE TRACK WITH SECTOR; MOV R0,I.PRM+12(R3) ;SAVE DESIRED TRACK AND SECTOR ADDRESSO' MOV R3,R1 ;RESTORE THE PACKET ADDRESS 10$: RETURN ;EXIT 15$: TST (SP)+ ;CLEAN THE STACK BR 10$ ;AND EXIT .END(SP) ;IS IT SET CHARACTERISTICS?E% BEQ 15$ ;IF EQ YES - LEAVE IT ALONEI TST (SP)+ ;CLEAN THE STACK) CALL $BLKC2 ;CHECK LOGICAL BLOCK NUMBERI+ CALL $CVLBN ;CONVERT LOGICAL BLOCK NUMBERT3 MOV R2,I.PRM+10(R3) ;SAVE DESIRED CYLINDER ADDRESSN" SWAB R1 ;SWAP TRACK TO HIGH BYTE$ BIS R1,R0 ;MERGE TRACK WITH SECTOR; MOV R0,I.PRM+12(R3) ;SAVE DESIRED TRACK AND SECTOR ADDRESSO' MOV R3,R1 ;RESTORE THE PACKET ADDRESS 10$: RETURN ;EXIT 15$: TST (SP)+ ;CLEAN THE S .TITLE DCCHE - $CACHE ENTRY .IF DF D$$CHE .IDENT /01.01/e;6; Copyright (c) 1985 by DIGITAL EQUIPMENT CORPORATION.; All rights reserved.;; Original author:; John Gemignani;.; Modified by:;M; D. P. Rabahy 06-Mar-85 01.01%; General clean up and documentatione;eI; This module contains the various entry points into the cache code. TheeO; executive transfers control to the cache via entry point $CACHE, from routineBL; $DRQRQ in module DRSUB. (Note that other entry paths are possible when the;; cache uses the fork list and the internal I/O mechanism.)y;hO; Entry point $XPLOA is called by the LOAD utility to load the cache code as annL; EXP. Likewise, entry point $XPUNL is called by UNLOAD to remove the cacheP; code. This requires special handling, since you must guarantee that the cacheP; is not being used. A recommended way to do this is to check the cache contextP; fields of the UCBX for all disks on the system. If the appropriate cache bitsM; are NOT on, then the c00#aaTADATADATADATADATADATADATADATADATAode has no partitions in the system which are active.t;aG; Note that the EXP hookpoints ($XPLOA and $XPUNL) are called in APR6. yL; Therefore, position-independent code is required, with absolute referencesN; corrected by subtracting 20000 from the target addresses. The cache code isP; built for APR5 (120000->137777), and the subtraction of the 020000 will change;; the 140000-157777 references to the proper address range.l;s .MCALL PCBDF$* PCBDF$ ;Define partition control block - .SBTTL $CACHE - Main entry point from $DRQRQh; 4; The presence of the packet is guaranteed (driver5; kick-starts will bypass the dispatching routine).t0; The UCB and SCB are accessible via R5 and R46; respectively. The caller's mapping has been saved4; on the stack above the return address to $DRQRQ.;0$CACHE::( CALLR $DCDSP ;Invoke cache dispatcher e- .SBTTL Executive external partition routinesa, .SBTTL + $XPLOA - "LOAD /EXP=" entry point.;e;; This routine (module, and whole EXP for that matter) is <; mapped in APR6 (140000->157777). The stack contains the=; return address to LOAD, and the address above that is thet>; PCB address of the partition which LOAD created and copied>; us into. LUN 1 is assigned to the issuer's console (TI:).;; We are NOT in system state. Status is returned via the$(; C-bit: CC is success, CS is failure.; $XPLOA:: TST @#$DRCHE ;Already loaded?B BNE 10$ ;Yes if NEX( MOV 2(SP),R0 ;Else get our PCB address3 MOV P.REL(R0),@#$DRCHE ;And tell the exec about iti TST (PC)+ ;Return success!10$: SEC ;Else error if loadede RETURN ;Back to LOAD b. .SBTTL + $XPUNL - "UNLOAD /EXP=" entry point.;w;; This routine (module, and whole EXP for that matter) is <; mapped in APR6 (140000->157777). The stack contains the7; return address to UNLOAD. LUN 1 is assigned to the 8; issuer's console (TI:). We are NOT in system state.:; Status is returned via the C-bit: CC is success, CS is ; failure.;PA; NOTE: This existing code does not check for the presence of anyn:; existing active cache partitions. Therefore, removal of7; the cache code during normal operation can (and will)o;; crash the system (as soon as something takes up the spacet&; the cache code previously occupied).;7$XPUNL::+ CLR @#$DRCHE ;Wipe out APR bias to unloadD RETURN ;And return with CC .ENDC ; .IF DF D$$CHE .END NOT in system state.:; Status is returned via the C-bit: CC is success, CS is ; failure.;PA; NOTE: Th" .TITLE DCCTL - Control Operations .IF DF D$$CHE .IDENT /03.01/a;v5; Copyright (c) 1988 by DIGITAL EQUIPMENT CORPORATIONd; All rights reserved.;; Original author:; John Gemignani;;; Modified by:;N; J. Kauffman 29-Mar-88 03.01.%; JRK338 Add support for write loads;G;.L; This module contains the code to perform the cache operations required for"; QIOs with IO.STC function codes.;R .MCALL PCBDF$ PCBDF$2 .PSECT DC$CTL, RO, I 1& .SBTTL $DCSTC - Operations dispatcher;I ; Passed: ; UCBX mapped in APR6F;; X.CSTS := Unit's cache status (i.e. selected operations)I; ; R1 -> I/O packet; I.PRM+2 := Operation code ; R5 -> UCBa#; SP -> Address of return in $DRQRQi;b ; Returned:K; All registers preserved ;K/;;; Otherwise N/A - control is passed to $DRQRQm;l ; Action:t;c; Notes::; QIOs which are NOT transfer functions do not have I.PRMs7; adjusted for the address doublewords. Therefore, allC;; parameters will be in the same cells within I.PRM as theyD; are issued (hence the Px definitions in DCPRE should not be used).;.$DCSTC:: MESAG$ STCMSG,1/ TST I.PRM+2(R1) ; Is this a "size" operation?  BPL 10$ ; If PL, no" RETURN ; Give it to the driver10$:7 MOV #$QOPDN, (SP) ; Change return address, see $DRQRQo7 CMP #VV$CHE, I.PRM+2(R1) ; A cache directed operation?s BEQ LOCAL ; If EQ, yes 9 BITB #XC.ACT, APR6.BASE+X.CSTS ; Is this device caching?r BEQ 20$ ; If EQ, noa;eE; Performance might be enhanced at this po00aaNint by making an additionalc!; verification. The choices are:d;t:; 1) checking US.VV inline and attempting to track changesG; 2) duplicating the I/O packet and checking the status during internal;; I/O completionr;; 3) creating and calling a new entry point in MDSUB/$VOLVDR;=; I recommend choice 3 as the easy to implement and maintain.Q;C0 CALL CHEPUR ; Purge the cache for this device .IFDF CHEDFRi( BCC 15$ ; If CC, all extents are gone. CALL ELMCED ; Go eliminate the deferred CED, BCS BACKUP ; CS -> failure causing backup1 BVS 15$ ; VS -> no deferreds found. Deactivatet0 RETURN ; Let I/O completion deactivate cache15$: .ENDC ;CHEDFR% CALL CHEDAC ; Deactivate the cachel20$:9; BIT #VV$SET, I.PRM+2(R1) ; Is this a "clear" operation?V; BEQ 30$ ; If EQ, yes;3I; "Set" operations will activate the cache if auto-activation is selectedc;f8; BITB #XC.ENA, APR6.BASE+X.CSTS ; Automatic activation?(; BEQ 30$ ; If EQ, no, pass to driver;n&; CALL CHEDUP ; Duplicate the packet1; BCS 30$ ; If CS, lacking pool, don't activatee;r ; Context:; R0 -> Duplicated I/O packetO;mF; Prepare packet for queueing to driver, with internal I/O completion.;t8; MOV KINAR5, I.IOSB+2(R1) ; Setup internal I/O mapping?; MOV #, I.IOSB+4(R1) ; Mark the internal I/O addresst+; MOV R0, I.IOSB(R1) ; Point at duplicateo;30$:l) CALLR $DRQRQ ; Queue it to the driverS .IFDF CHEDFRv(CLRUP: TST (SP)+ ; Pop return to IOFIN;BACKUP: CALLR $BCKUP ; Back up the user PC to reissue I/O  .ENDC ;CHEDFR ,5 .SBTTL + STCIIO - Internal I/O completion for VV$SETO;c ; Passed: ; R3 -> I/O packet completingd(; I.IOSB -> Corresponding cache packet+; I.PRM+P3, P4 := Driver completion statusI ; Returned: %;;; N/A - control is passed in $IOFINe;t ; Action:dE; If the VV$SET request is used to auto-activate the disk caching forRB; the device then in order to validate that the medium is present,@; we must know the results of the VV$SET operation. To do this,>; the above code duplicates the user's packet, and adjusts the=; return status to cause us to be notified. The field I.IOSB/<; in the internal packet points us back to the original user:; request. When we obtain the status of the operation, we?; will attempt to activate the cache if the result was success.e;; The internal packet is deallocated, and the original userR9; packet is completed ($IOFIN) with the internal packet's ; status. ;m;STCIIO:9; MOV I.PRM+P3(R3), R0 ; Get the driver completion statusv; MOV I.PRM+P4(R3), R1;s<; MOV I.IOSB(R3),-(SP) ;Save the original I/O packet address+; CALL CHEDEP ;Delete the internal packet 3; MOV (SP)+,R3 ;Reload the original packet address.;h'; TSTB R0 ;Was the VV$SET successful? .; BMI 10$ ;No if MI; leave cache deactivated;u3; CALL CHEACT ;Else activate the cache for deviced;10$:h4; CALLR $IOFIN ;Complete original request and exit # .SBTTL + LOCAL - VV$CHE processingS;I ; Passed:.; R1 -> I/O packet; I.TCB -> TCB of issuing task -; T.ST3 := T3.PRV indicates privileged task);a ; Returned:a%;;; N/A - control is passed to $IOFIND;t ; Action:n;pLOCAL: MESAG$ CHEMSG,2, MOV I.TCB(R1), R0 ; Get the TCB of issuer BNE 5$ ; If EQ, got it BPT ; Sanity checkf5$:l2 BIT #T3.PRV, T.ST3(R0) ; Is the task privileged? BNE 10$ ; If NE, yes, accept3 MOV #, I.PRM(R1) ; Setup return statust BR 20$ ; Return status10$:, CALL SUBFUN ; Go process the subfunction;I:; Common local I/O completion occurs here. Offset I.PRM+0;; will contain the primary status, and I.PRM+2 will containe'; the secondary status (or byte count).M;G120$: MOV R1, R3 ; Establish context for $IOFIN IOFIN:) MOV I.PRM(R3), R0 ; Set primary statust- MOV I.PRM+2(R3), R1 ; Set secondary statush+ CALL $IOFIN ; And complete this requestc RETURNM #, .SBTTL SUBFUN - Cache-specific Subfunctions;B ; Passed:R; R1 -> I/O packet; I.PRM+4 := Subfunction code;b ; Re00aaTADATADATADATADATADATADATADATADATAturned:;o ; Action:I5; This routine will process the various subfunctions:a;t%; 1. DC$ENA - Enable cache processingt&; 2. DC$DIS - Disable cache processing'; 3. DC$ACT - Activate cache processingh); 4. DC$DAC - Deactivate cache processing)#; 5. DC$RCS - Read cache parametersP"; 6. DC$SCS - Set cache parameters%; 7. DC$CSB - Clear statistics bufferi$; 8. DC$RSB - Read statistics buffer;-; Notes:9; The first two words of the parameter list are trash forI5; the VV$CHE subfunction of IO.STC. They are used toi=; return the status to the calling routine (which will handlet=; the call to $IOFIN for us). I.PRM+0 is the primary status, <; and I.PRM+2 is the secondary status. The dispatching code?; will initialize the words as and zero, respectively.e;rASUBFUN: MOV #, I.PRM(R1) ; Set the default I/O statust% CLR I.PRM+2(R1) ; Clear count worda5 MOV I.PRM+4(R1), R0 ; Get the subfunction code (P3)e! CMP R0, #DC$ENA ; Enable cache?  BLO FUNBAD ; Bad parm if LO BEQ FUNENA ; Yes if EQt# CMP R0, #DC$ACT ; Activate cache?  BLO FUNDIS ; Disable if LOF BEQ FUNACT ; Activate if EQ% CMP R0, #DC$RCS ; Read cache parms?a BLO FUNDAC ; Deactivate if LO BEQ FUNRCS ; Read parms if EQ' CMP R0, #DC$CSB ; Clear stats buffer?  BLO FUNSET ; Set if LO); BEQ FUNCSB ; Clear if EQ& CMP R0, #DC$RSB ; Read stats buffer?+ BNE FUNBAD ; If NE, bad parameters error - JMP FUNRSB ; Go read the statistics buffer ;FUNBAD: MOV #, I.PRM(R1) ; Set "bad parameters"FUNEXT: RETURN  .SBTTL + DC$ENA - Enable Cache ;a8; This function is simple, since it does not require any8; form of validation. It is merely used to set a status; bit.;NDFUNENA: BISB #XC.ENA, APR6.BASE+X.CSTS ; Set autoactivation on MOUnt BR FUNEXT$ .SBTTL + DC$DIS - Disable the cache;Q8; This function is simple, since it does not require any:; form of validation. It is merely used to clear a status; bit.;bFFUNDIS: BICB #XC.ENA, APR6.BASE+X.CSTS ; Clear autoactivation on MOUnt BR FUNEXT?FUNPRI: MOV #,I.PRM(R1) ; Set "privilege violation"m+ BR FUNEXT ; Proceed to common exit point  i# .SBTTL + DC$DAC - Deactivate cachet;s8; This function requires the cache to be flushed and all8; operations to be released to the driver. The "active":; bit is cleared to indicate that the cache will no longer; perform I/O for the user.o;aCFUNDAC: BITB #XC.ACT, APR6.BASE+X.CSTS ; Is cache currently active?I& BEQ FUNEXT ; If EQ, no, just return .IFDF CHEDFRU> BITB #X2.DEA,APR6.BASE+X.CST2; Is the Cache being deactivated4 BNE BACKUP ; Go back up this I/O until purge done .IFTF ;CHEDFR, CALL CHEPUR ; Purge cache of nodefer CEDs .IFT ;CHEDFRe, BCS 20$ ; If CS, a deferred extent exists .IFTF ;CHEDFR510$: CALLR CHEDAC ; Deallocate the cache and returnh .IFT ;CHEDFRo220$: CALL ELMCED ; Go eliminate the deferred CED0 BCS CLRUP ; Pop return to IOFIN and backup PC2 BVS 10$ ; If VS, no deferreds at all, go $IOFIN4 MOV (SP),(SP)+ ; Remove return to IOFIN from stack RETURNg .ENDC ;CHEDFR! .SBTTL + DC$ACT - Activate cache ;g ; Passed:.; UCBX mapped in APR6H;R ; R5 -> UCBc;o ; Action:E;; This function will activate cache for a device which does 9; not have caching currently activated for it. Note thate<; this operation can be used to "bypass" the "autoactivation9; on mount" bit (XC.ENA=1). In other words, if the cache :; is disabled for a device, DC$ACT can turn caching on for9; the device regardless of the setting of XC.ENA. DC$ACTr;; will not change the setting of XC.ENA either. Therefore,t:; a disk with autoactivation disabled will remain that way; independent of DC$ACT.; B; NOTE: This code checks the cache status initially, and no matter>; how it is set, will set the "cache active" bit. (Therefore,=; the first 2 lines are nonsense, but are included should onei6; decide to do something spectacular after I've gone.); @FUNACT: BITB #XC.ACT, APR6.BAS00aaNE+X.CSTS ; Cache already activate?' BNE 10$ ; If NE, yes - don't bother 2 CALL CHEACT ;Activate the cache for this device- BCS FUNPRI ;Privilege violation if failurel(10$: BR FUNEXT ;Proceed to common exit ( .SBTTL + DC$RCS - Read cache parameters;t<; This function will return the current setting of the cache4; in the second status word of the I/O status block.; @FUNRCS: MOVB APR6.BASE+X.CSTS, I.PRM+2(R1) ; Set the status bits BR FUNEXT' .SBTTL + DC$SET - Set cache parameters+;S ; Passed:a; UCBX mapped in APR61B; X.CSTS := XC.ACT indicates unit is active (in terms of caching)2; X.CPCB -> PCB of region unit is caching through;n; R1 -> I/O packet; I.PRM+6 := Set parameters "; I.PRM+10 -> Cache partition PCB; I.PRM+12 -> Extent limits;o ; Returned: ; R1 -> I/O packet!; I.PRM, +2 := Completion statuss;r ; Action:OH; This function will set the lower cache status bits of the X.CSTS byte.;uD; The high bit of the word indicates that the partition PCB has been@; passed in parameter 5 and which should be plugged into X.CPCB.;i; Note:(C; To enable/disable and activate/deactivate cache use correspondingu; subfunction codes.;tFUNSET: MESAG$ SETMSG,3m+ MOV I.PRM+6(R1), R0 ; Get the status bitsINVALID= INVALID=^Cr* BIT #INVALID, R0 ; Invalid bits in here?- BNE FUNBAD ; Return "bad parameters" error .IFDF CHEDFRh7 BITB #XC.DFR,R0 ; Is deferred writes on in new valuesi# BEQ 15$ ; If EQ, no, don't worryg0 BITB #XC.DAT,R0 ; Is virtual turned on as well# BEQ FUNBAD ; If EQ, no, disallowo15$: .IFTF ;CHEDFRB MOV I.PRM+10(R1), R0 ; Get address of requested cache PCB ;DPR015 ;DPR015I? BITB #XC.ACT, APR6.BASE+X.CSTS ; Is current PCB address bound? " BNE 19$ ; If NE, yes ;DPR015 ;DPR015R. MOV R0, APR6.BASE+X.CPCB ; Load into the UCBX BR 20$ ;DPR01519$: ;DPR0152 BIT #DC$PAR, R0 ; User specify a partition name?* BEQ 20$ ; If EQ, no, don't look for one> CMP R0, APR6.BASE+X.CPCB ; Do they match each other? ;DPR015$ BNE FUNPRI ; If NE, no ;DPR01520$: .IFT ;CHEDFR(< MOVB APR6.BASE+X.CSTS,-(SP) ; Save the old parameter values .IFTF ;CHEDFR6 MOV R1, -(SP) ; Save the I/O packet address ;DPR020D MOV I.PRM+12(R1), R0 ; Get virtual address of extent limits ;DPR0205 MOV #5, R1 ; Length of extent limit table ;DPR0205) CALL $ACHKB ; Address check ;DPR020 # BCC 21$ ; If CC, okay ;DPR020Q ;DPR020 5 MOV (SP)+, R1 ; Restore I/O packet address ;DPR020e .IFT ;CHEDFRr3 TST (SP)+ ; Eliminate the saved parameter values .IFTF ;CHEDFR: BR FUNBAD ; Otherwise part not in virtual space ;DPR02021$: ;DPR020V8 CALL $RELOC ; Calculate parameters for $BLXIO ;DPR020; ;DPR020; Context: ;DPR020<; R1 := Physical addess of table in 32-word blocks ;DPR020.; R2 := Offset of table, bias APR6 ;DPR020; ;DPR0205 MOV #5, R0 ; Length of extent limit table ;DPR020 3 SUB #20000, R2 ; Change into APR5 offset ;DPR020C4 MOV KISAR6, R3 ; Physical address of UCBX ;DPR020G MOV #APR6.BASE+X.XDAT, R4 ; Offset of table in UCBX, bais APR6 ;DPR020l CALL $BLXIO ;DPR020 5 MOV (SP)+, R1 ; Restore I/O packet address ;DPR020X;;; Note: 6; DC$PAR bit is ignored by following byte instruction.;c; BICB #VALID, APR6.BASE+X.CSTS ; Clear original status bitst9 BISB I.PRM+6(R1), APR6.BASE+X.CSTS ; Set new status bits# .IFT ;CHEDFRo9 BITB #XC.DFR,(SP)+ ; See if defers were on in old setupo& BEQ FUNEXT ; If EQ, no, continue on@ BITB #XC.DFR,APR6.BASE+X.CSTS; Are they turned off in new setup& BNE FUNEXT ; If NE, no, continue on> BITB #X2.DEA,APR6.BASE+X.CST2; Are deferred CEDs being purged5 BNE FUNEXT ; If NE, yes, don't need to start againi$ CALL ELMCED ; Purge deferred CEDs BCC 30$ ; If CC, successful- BVC 40$ ; If VS, allocation failure, crashR, BPT ; Failure here will cause co00aaTADATADATADATADATADATADATADATADATArruption130$: BVS 40$ ; If VS, no deferreds at all, exiti3 TST (SP)+ ; Return to $QOPDN. DFRIOC will handle, .ENDC ;CHEDFR 40$: RETURNP B) .SBTTL + DC$RSB - Read statistics bufferp;B ; Passed: ; UCBX mapped in APR6n;B; R1 -> I/O packet,; I.PRM+6 -> User buffer (virtual address)"; I.PRM+10 -> Size of user buffer;t ; Returned:C; ; Action:P5; This function will return the contents of the cacheC8; statistics buffer for a particular device. The caller3; must pass the address and length of his buffer inS8; parameters 5 and 6 (respectively). The user's context7; is currently loaded, and $ACHCK is called to validateP6; the buffer. The buffer could be any size smaller or6; equal to the stats buffer. It should NOT be allowed1; to be larger, since this will allow him to readI6; either the rest of secondary pool, or off the end of6; secondary pool (into a task, common, or non-existent8; memory). Nonexistent memory (odd addresses) in kernel; mode spells instant doom.r; 7; $BLXIO will be used to teleport the stats buffer fromc&; secondary pool to the user's buffer.;y>; NOTE: $ACHCK is used instead of $CKBFx because the operation7; will be completed immediately (while the user remainsb6; loaded). $RELOC is called to create the context for; $BLXIO (address doubleword).;h:FUNRSB: TST APR6.BASE+X.CSBA ;Statistics buffer available?, BEQ FUNPRI ;No buffer if EQ; return error) MOV R1,-(SP) ;Save the packet's address)5 MOV I.PRM+6(R1),R0 ;Load the user's virtual addressl4 MOV I.PRM+10(R1),R1 ;Load the user's buffer length/ CALL $ACHCK ;Address check loaded user spaceK- BCC 5$ ;Address check failed, return errorn$ MOV (SP)+,R1 ;Get packet's address& JMP FUNBAD ;Return "bad parameters"5$:l1 CALL $RELOC ;Now create the address doublewordb, MOV R1, R3 ;Prepare parameters for $BLXIO MOV R2, R4e) MOV (SP),R1 ;Get back packet's address 5 MOV I.PRM+10(R1),R0 ;Get the count of bytes to moves0 CMP R0,#S.SIZE ;User want more than available?# BLOS 10$ ; If LOS, no, accept it $ MOV #S.SIZE,R0 ;Else enforce limit10$:+ MOV R0,I.PRM+2(R1) ;Return the byte countd8 MOV APR6.BASE+X.CSBA,R1 ;Get statistics buffer APR bias) MOV #APR5.BASE,R2 ;Set the displacementp. CALL $BLXIO ;Transfer the statistics buffer& MOV (SP)+,R1 ;Packet's address to R1% JMP FUNEXT ;Proceed to common exit* .SBTTL + DC$CSB - Clear statistics buffer;V*; This function maps the statistics buffer#; (if any) and fills it with nulls. ;e6; The statistics buffer is allocated in secondary pool2; and is a single 32-word block of 16 doublewords.;R3; NOTE: Access to the UCBX is lost by this routine!B4; There is currently no reason to save (reload) this-; address since the UCBX is no longer needed.n;rFUNCSB:i<; MOV APR6.BASE+X.CSBA,KISAR6 ;Map statistics buffer in APR6.; BEQ 20$ ;Ooops, statistics buffer not here;B$; MOV #APR6.BASE,R0 ;Point R0 to it,; MOV #S.SIZE/4,R3 ;Count of cells to clear';10$: CLR (R0)+ ;Clear out first wordt$; CLR (R0)+ ;Clear out second word#; SOB R3, 10$ ;More to clear out?l; );20$: BR FUNEXT ;Proceed to common exith C .SBTTL Partition routines; .SBTTL + VALPCB - Validate a partition given a PCB addressr; ; Passed:C; R0 -> PCB to validate; ; Returned:O; CC: PCB is valid; CS: PCB is not valid;r0VALPCB: MOV R1,-(SP) ; Work register (main PCB)( MOV R2,-(SP) ; Work register (sub PCB)# MOV #$PARHD,R1 ; Get PCB listheade)10$: MOV (R1),R1 ; Get a main partitionf BEQ 40$ ; End of list if EQ2 MOV R1,R2 ; Use R2 to run through subpartitions-20$: MOV P.SUB(R2),R2 ; Get the next sub PCBh BEQ 10$ ; Isn't one if EQ CMP R0,R2 ; Does this match?a% BNE 20$ ; If NE, no - try next ones6 BIT #PS.COM, P.STAT(R2) ; Is this a common partition? BEQ 40$ ; If EQ, no2 BIT #P2.CHE,P.ST2(R2) ;Is this a cache partition?1 BEQ 40$ ;No if EQ; don't activate caching then). TST (PC)+ ; Match in PCB address, return CC!40$: SEC ; No match, return CS 00aaN MOV (SP)+,R2o MOV (SP)+,R1 RETURN  U .SBTTL Cache control routines0 .SBTTL + CHEDAC - Deactivate cache for a device;B ; Passed:I; UCBX mapped in APR6R;2 ; Action:h8; This routine will deactivate caching for a device with:; caching activated. Deactivation involves the marking of7; the UCBX accordingly, and the "detaching" of the UCBX <; from the cache partition (The resident mapped count in the8; PCB [P.RMCT] is used by the cacher as the mechanism to$; lock down cache data partitions.).;+6CHEDAC: BICB #XC.ACT, APR6.BASE+X.CSTS ; Deactivate it- MESAG$ DEAMSG,25.,20,<<14,#140000+X.DNAM,4>> < MOV APR6.BASE+X.CPCB, R0 ; Get the PCB address of cache par- DECB P.RMCT(R0) ; Detach from the partitiona. BNE 5$ ; If NE, other devices still caching8 BIC #P2.LMA, P.ST2(R0) ; Otherwise this is the last one5$:c% MOV R1, -(SP) ; Save packet addressr7 MOV APR6.BASE+X.CSBA, R1 ; Get cache statistics bufferi BEQ 10$ ; None if EQh1 ADD #P.CSBA, R0 ; Calculate address of listhead CALL $GTSPK BCC 6$ ; If CC, sanity checka BPT6$:' TST (R0)+ ; Is list empty? ;DPR015A BNE 7$ ; If NE, no ;DPR0155 CLR (R0) ; P.DPCB must be null when REMing ;DPR015)7$: ;DPR015+ MOV R1, R0 ; Prepare parameter to $DESECi8SECSIZE= /100 ; Size of CSB in secpol blocks. MOV #SECSIZE, R1 ; Set size for deallocation1 CALL $DESEC ; Deallocate secondary pool buffers2 CLR APR6.BASE+X.CSBA ; Initialize the CSB pointer,10$: MOV (SP)+, R1 ; Pop I/O packet address RETURNC . .SBTTL + CHEACT - Activate cache for a device;; ; Passed:p; UCBX mapped in APR6 ; ; Returned:;; R0 := Contents lost.;B ; Action:l9; This routine will attempt to activate the cache for the <; device. If the UCBX specifies a PCB, it will be validated#; if it is valid then the map countE>; of the partition (P.RMCT) will be incremented, and the cache; activated for the device.;R9CHEACT: BITB #XC.ACT,APR6.BASE+X.CSTS ;Already activated?(* BNE 30$ ;Yes if NE; don't do this again- MOV APR6.BASE+X.CPCB,R0 ;Get the PCB addressi- BEQ 30$ ;None present if EQ; can't startup& CALL VALPCB ;Validate the partition* BCS 30$ ;Failed if CS; skip the startup- MESAG$ ACTMSG,26.,20,<<14,#140000+X.DNAM,4>>X. INCB P.RMCT(R0) ;Attach us to this partition8 BIS #P2.LMA, P.ST2(R0) ; Don't let partition be removed0 MOV R0, R3 ;Save PCB address in safe register# MOV R1,-(SP) ;Save packet addressR! MOV #SECSIZE,R1 ;Set size in R1' CALL $ALSEC ;Allocate secondary pooln BCS 25$ ;Couldn't if CS;e ; Context:; R0 -> Newly allocated blockt; A MOV R0,APR6.BASE+X.CSBA ;Set the cache statistics buffer address3: MOV #</2>,R1 ;Size for initialization to zeroes% MOV KISAR6,-(SP) ;Save UCBX mappingM# MOV R0,KISAR6 ;Map the new buffer' MOV #APR6.BASE,R0 ;Set up its addresst'23$: CLR (R0)+ ;Initialize the buffer  SOB R1, 23$ ;loop* MOV R3, R0 ;Prepare parameter to $QSPIF4 ADD #P.CSBA, R0 ;Calculate the stat block listhead+ MOV KISAR6, R1 ;Point at new block to add - CALL $QSPIF ;Add it to the end of the listc+ MOV R5, APR6.BASE+S.UCB ;Point back to UCB ' MOV (SP)+,KISAR6 ;Reload UCBX mappingE25$:- MOV (SP)+,R1 ;Get back saved packet addressS .IFDF CHEDFRe@ BICB #X2.DEA,APR6.BASE+X.CST2; Indicate no cache purge going on .ENDC ;CHEDFRD BISB #XC.ACT,APR6.BASE+X.CSTS ;Cache is now activated and PCB bound&30$: RETURN ;All done in validation F+ .SBTTL + CHEPUR - Purge cache for a device ;t ; Passed:K ; R5 -> UCBo; ; Returned:t; All registers preserved ); CC: All extents successfully eliminated.4; CS: At least one deferred extent was found in list;dA; This routine will delete the cache partition of all extents forS; the specified device. ;.M; NOTE: Extents with I/O in progress will be deleted when during internal I/OS ; completion.B;+A; NOTE: This routine is always entered with mapping into the UCBX 7; in APR6. It requires access to both the UCBX and ther;; partit00aaTADATADATADATADATADATADATADATADATAion's pool area. The UCBX should be restored prior ; to exit.;r4CHEPUR: CLR -(SP) ; Clear the deferred extent flag- MESAG$ PURMSG,27.,20,<<14,#140000+X.DNAM,4>>i@ MOV APR6.BASE+X.CCED, R0 ; Get the first extent in the LBN list) BEQ 60$ ; If EQ, there are none at allE( CALL MAPPAR ; Map the cache partition30$: .IFDF CHEDFR - SEC ; Assume this will be deferred extent 4 BITB #ES.WDF,E.STAT(R0) ; Is this a deferred extent BEQ 40$ ; If EQ, no/ ROL (SP) ; Indicate a deferred extent exists ' BR 50$ ; Skip the delete of this onee .ENDC ;CHEDFR&40$: CALL FRECED ; Eliminate the CED550$: MOV E.LNXT(R0),R0 ; Get next extent in LBN listM1 BNE 30$ ; If NE, got another - keep on loopingh CALL MAPUCB ; Remap the UCBXr460$: ROR (SP)+ ; Pop the deferred extent indicator RETURN .PAGE% .SBTTL WRITE DEFERRED I/O OPERATIONSl5 .SBTTL + ELMCED - Write data in deferred CED to disks;dM; ELMCED - Routine to initiate first deferred extent to disk for deactivationt;i ; Inputs:0; R1 - I/O packet addressi; R5 - UCB address of device ; Outputs::; CC - I/O packet queued to driver to write data in extent9; VC - Deferred extent found and original I/O bound overe>; VS - No deferreds found, original I/O can be sent to $IOFIN?; CS - Original I/O should be backed up due to no primary pool .7; for duplicate I/O packet allocation, because purge W6; already in effect, or deferred CEDs exist but are 1; being written out as part of age list dropoffa,; VC - Error due to deferred still existing'; VS - Allocation error for I/O packet ;p;:I; This routine assumes that it is being called to eliminate all deferred rI; CEDs for this device. A single internal I/O packet is created and the rK; first deferred CED is written to disk with an I/O completion routine that G; finds the next in line and issues a write for that CED. This processrJ; continues to look for other deferred CEDs that are not in the process ofD; being written out until no more are found. During this time, the O; "defers being purged" bit X2.DEA is set to indicate the process is in effect.sK; During this time, no write operations are allowed if any CED overlaps theiN; region and reads are allowed for virtual operations even if that support wasK; turned off. Setting X2.DEA may be from a "SET characteristics" operation eL; or from a total deactivation request. In either case, this routine should J; only be activated once. Any further requests should simply return since J; the first invocation will cause the final desired action and a parallel H; operation with a new I/O packet will set up a race condition to clear K; X2.DEA in the final I/O completion routine. This could leave a deferred lF; CED in the process of being written out with the bit cleared. If a J; read request came through in that case, it could go to the disk instead K; the correct extent. If a deferred extent is found and a duplicate packetaL; allocated, the original I/O packet address is bound over to the completionK; routine for the final deallocation of the cache and the completion of thenJ; original I/O. If this routine returns with a CS or a CC/VS combination,<; the original I/O should be handled in the appropriate way.; .IFDF CHEDFReELMCED: 2 MOV KISAR6,-(SP) ; Save mapping register to UCBX+ MOV R5,-(SP) ; Save original UCB address s' MOV R1,-(SP) ; Save R1 across routineeD BITB #X2.DEA,APR6.BASE+X.CST2; See if deferred purge already active. BEQ 30$ ; If EQ, no, go look for a deferred*10$: SEC ; Assume I/O must be backed up(20$: MOV (SP)+,R1 ; Restore original R11 MOV (SP)+,R5 ; Restore the original UCB address , MOV (SP)+,KISAR6 ; Restore mapping to UCBX RETURNdD30$: MOV APR6.BASE+X.CCED, R0 ; Get the first extent in the LBN list) BEQ 55$ ; If EQ, no extents to processR/ CLR -(SP) ; Save flag for unusable deferreds(( CALL MAPPAR ; Map the cache partition:40$: BITB #ES.WDF,E.STAT(R0) ; See if this one is deferred BEQ 50$ ; If EQ, no< BITB #ES.WI00aaNP,E.STAT(R0) ; Is the extent already in progress BEQ 60$ ; If EQ, no, use it, MOV R0,(SP) ; Store CED for flag purposes/50$: MOV E.LNXT(R0),R0 ; Point to the next ones% BNE 40$ ; Go back and check it outM/ TST (SP)+ ; See if any transition deferreds ) BNE 10$ ; If NE, there, cause a backups(55$: MOV (SP)+,R1 ; Restore original R11 MOV (SP)+,R5 ; Restore the original UCB addressp, MOV (SP)+,KISAR6 ; Restore mapping to UCBX CLC ; Indicate no deferreds SEV ;  RETURN.260$: TST (SP)+ ; Get rid of excess stack context7 MOV E.UCB(R0),R5 ; Get UCB address from CED for writer0 CALL $CRDFR ; Allocate and fill in I/O packet& BCS 70$ ; If CS, allocation failureA MOV KINAR5,I.IOSB+2(R1) ; Set up internal I/O completion addressB MOV #DFRIOC!1,I.IOSB+4(R1) ;a7 BISB #ES.WIP,E.STAT(R0) ; Indicate a write-in-progressV9 INCB E.PCNT(R0) ; Tie down extent to prevent going awayK8 MOV (SP),I.AADA+2(R1) ; Put original I/O packet in fakeC MESAG$ DFRMSG,28.,,<,>e .IF DF CHESAN, CALL .CKSAN ; See if sanity buffers match .ENDC0 CALL $DRQRQ ; Initiate the I/O for the extent$ MOV (SP)+,R1 ; Restore original R11 MOV (SP)+,R5 ; Restore the original UCB addresst, MOV (SP)+,KISAR6 ; Restore mapping to UCBXD BISB #X2.DEA,APR6.BASE+X.CST2; Indicate starting to purge deferreds CLC ; Indicate no deferredst RETURNa(70$: MOV (SP)+,R1 ; Restore original R11 MOV (SP)+,R5 ; Restore the original UCB addressT, MOV (SP)+,KISAR6 ; Restore mapping to UCBX% SEV ; Indicate allocation failurei RETURNs= .SBTTL + DFRIOC - I/O completion routine for deferred extente;K; DFRIOC - Routine to complete processing after a deferred extent has been ; written to disk(;+ ; Inputs:R; R3 - I/O packet addressS;XDFRIOC:6. MOV I.UCB(R3),R5 ; Get UCB address of device+ MOV I.AADA(R3),R0 ; Point to affected CEDa+ CALL MAPPAR ; Map to the cache partitionMC MESAG$ DFRCOM,29.,,<,>R: BICB #ES.WIP,E.STAT(R0) ; Clear the write-in-progress bit= BICB #ES.WDF,E.STAT(R0) ; Indicate extent no longer deferrede4 DECB E.PCNT(R0) ; Untie the extent for elimination0 MOV E.LNXT(R0),-(SP) ; Save pointer to next CED6 CALL FRECED ; Delete the CED if not tied down still( MOV (SP)+,R0 ; Get address of next CED 10$: BEQ 30$ ; If EQ, all done> BITB #ES.WDF,E.STAT(R0) ; Is it deferred or waiting for other BNE 20$ 115$: MOV E.LNXT(R0),R0 ; Get address of next CED,# BR 10$ ; Go back to check it out.20$: ;8 BITB #ES.WIP,E.STAT(R0) ; Is this already being written BNE 15$ ; If NE, yes, skip itC MESAG$ DFRMSG,28.,,<,>(3 MOV R0,I.AADA(R3) ; Keep pointer to CED in packet;1 INCB E.PCNT(R0) ; Tie down the CED for writeoutR9 MOV E.LBNL(R0),I.PRM+P5(R3) ; Get LSP of LBN to write too0 BISB E.LBNL-1(R0),I.PRM+P4(R3) ; Get MSP of LBN5 MOVB E.SIZE(R0),R2 ; Get size of transfer in blockse$ ASH #9.,R2 ; Turn that into bytes6 MOV R2,I.PRM+P2(R3) ; Put byte value into I/O packet) MOV R3,R4 ; Save address of I/O packet + MOV #APR6.BASE,R2 ; Get APR6 displacement<5 MOV E.PHYA(R0),R1 ; Get APR bias of start of bufferV6 CALL $MPPHY ; Map to physical address if NPR device/ MOV R1,I.PRM+P1.1(R4) ; Move MSP to I/O packetM/ MOV R2,I.PRM+P1.2(R4) ; Move LSP to I/O packeti, MOV R4,R1 ; Restore pointer to I/O packet .IF DF CHESAN CALL .CKSAN .ENDC1 CALLR $DRQRQ ; Initiate the I/O for the extentn>30$: MOV I.AADA+2(R3),-(SP) ; Save original I/O packet address3 CALL CHEDEP ; Deallocate the internal I/O packetP CALL MAPUCB ; Map the UCBXm; BICB #X2.DEA,APR6.BASE+X.CST2; Indicate done purging cache5 MOV (SP),R3 ; Get back original I/O packet address7 MOV I.PRM+4(R3),R3 ; Get function code for this purge,/ CMP #DC$SET,R3 ; Was it due to a SET function,3 BEQ 40$ ; If EQ, yes, skip deactivation of cacheN% CALL CHEDAC ; Deallocate the cacheR,40$: MOV (SP)+,R3 ; G00aaTADATADATADATADATADATADATADATADATAet original I/O packet6 CALLR IOFIN ; Go get status codes and return packet .ENDC ;CHEDFR ; .IF DF CHEDBG ;Debugging aidse2 .SBTTL *** DEBUG *** Module contains data stringsSTCMSG: .ASCIZ <15><12>"IO.STC"gCHEMSG: .ASCIZ " - VV$CHE"SETMSG: .ASCIZ " - DC$SET"HATTMSG: .ASCIZ <15><12>"DCM -- [DCCTL] PURGE FAILURE - CED ATTACHED"<15>>DFRMSG: .ASCIZ <15><12>" - Deferred extent written to disk"=DFRCOM: .ASCIZ <15><12>"Deferred extent I/O write completion"h0DEAMSG: .ASCIZ <15><12>"Cache being deactivated".ACTMSG: .ASCIZ <15><12>"Cache being activated"+PURMSG: .ASCIZ <15><12>"Cache being purged"H .EVEN .ENDC ; .IF DF CHEDBG .ENDC ; .IF DF D$$CHE .ENDa stringsSTCMSG: .ASCIZ <15><12>"IO.STC"gCHEMSG: .ASCIZ " - VV$CHE"SETMSG: .ASCIZ " - DC$SET"HATTMSG: .ASCIZ <15><12>"DCM -- [DCCTL] PURGE FAILURE - CED ATTACHED"<15>>DFRMSG: .ASCIZ <15><12>" - Deferred extent written to disk"=DFRCOM: .ASCIZ <15><12>"Deferred extent I/O write completion"h0DEAMSG: .ASCIZ <15><12>"Cache ! .TITLE DCDBG - Debug Subroutines> .IDENT /02.01/n .MCALL HWDDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS;a5; Copyright (c) 1988 by DIGITAL EQUIPMENT CORPORATIONl; All rights reserved.;B; Modified by:;r; J. Kauffman 29-Mar-88 02.01s;; JRK338 Break up debugging features into two conditionals ;a;dI; This module contains various routines to support information dumping inn; disk data caching.;o .PSECT DC$SUB,RO,Is .IF DF CHEDMP!CHEDBG.;+E; $SAVE - Routine to save the general registers around the debugging e ; operations;-$SAVE::C MOV R1,-(SP)D MOV 2(SP),R1A MOV R0,2(SP)S MOV R2,-(SP)h MOV R3,-(SP)I MOV R4,-(SP) MOV R5,-(SP) MOV R1,-(SP)r RETURN;+I; $RSTOR - Routine to restore the general registers around the debugging f ; operations;-$RSTOR:: MOV (SP)+,R0h MOV (SP)+,R5i MOV (SP)+,R4i MOV (SP)+,R3i MOV (SP)+,R2i MOV (SP)+,R1d MOV R0,-(SP)o MOV 2(SP),R0B MOV (SP)+,(SP)  RETURNE .ENDC ; CHEDMP!CHEDBG .IF DF CHEDMP;+N; $PTMSG - Routine to put out a message to the debugging logger. This routineD; saves all registers. The default size of 20. words of pool will be ; allocated.;( ; Inputs:RJ; R1 - Size of pool to be allocated, does not include additional 20. words; R2 - Opcode valueg;-$PTMSG::; ADD #<10.*2>,R1 ; Set up default size of allocation bufferR2 CALL $ALOC ; Allocate and pass the block of data RETURN(;+I; $ALOC - Routine to allocate a chunk of primary pool for data dumping toFB; a processing/display task, insert chunk in the listhead, and put&; an eight word timestamp in the data.;iC; The following locations temporarily hold the following data until(.; locations in the Executive can be allocated:?; $SHERR - TCB address of processing task to deallocate blocks-; and print messages to filet<; $SHLIM - Listhead pointer for secondary pool blocks to be4; processed. If zero, nothing to do. The location5; just beyond $SHLIM is also used as the listhead.d1; $SHLOS - Storage value for output line pointern;nE; If these locations are used as is, Shadow recording cannot be used.hC; SHE... MUST be removed or the system will lose pool very rapidly.o;i ; Inputs:EG; R1 - Size of primary pool block to be allocated. This number must be =; at least 10. words to accomodate the forward pointer, size >; word and eight words of time stamp but must be smaller than; 256.rB; R2 - Byte Operation code to be placed in upper byte of size word ; Outputs: ; CC:$<; R0 - Pointer to first location past the included timestamp ; CS:a1; No block was allocated, R0,R1 are indeterminate ;.J; The first word of the primary pool block contains the forward pointer inL; the listhead. The second word contains the length of the block to be usedJ; when the block is deallocated. Subsequent data in the block will become; error location dependent. ;u#; R2 - R5 are saved across the callB;-$ALOC:: - TST $SHERR ;Is the file debugging turned on  SEC ;Assume not turned on! BEQ00aaN 50$ ;If EQ, no, simply exitn4 CMP #<10.*2>,R1 ;See if there is a big enough space SEC ;Assume failure2 BHI 50$ ;If HI, not enough space to do timestamp& MOV R2,-(SP) ;Save R2 across the call/ CALL $ALOCB ;Allocate a chunk of primary poolh3 BCS 45$ ;If CS, not able to allocate, skip action 5 MOV R0,-(SP) ;Zero the block out before copying datai MOV R1,-(SP) ;5$: CLRB (R0)+ ; SOB R1,5$ ;B MOV (SP)+,R1 ;T MOV (SP)+,R0t- MOV R1,2(R0) ;Put in the length of the blockt3 MOVB (SP),3(R0) ;Put in operation code on top byte#0 MOV R0,R1 ;Copy address of block for insertion8 MOV #$SHLIM,R0 ;Address of listhead to be inserted into9 CALL $QINSF ;Insert entry into processing task listheadL0 MOV R1,-(SP) ;Save address of block across call2 MOV $SHERR,R0 ;Get TCB address of processing task* CALL $EXRQU ;Request the processing task3 MOV (SP)+,R0 ;Set up address of primary pool blockR! ADD #4,R0 ;Point past size wordP/ MOV #$TTNS-14,R2 ;Point to current time vectorl:10$: MOV (R2)+,(R0)+ ;Insert time parameter in task buffer# CMP R2,#$TTNS ;Any more to insert?r BLOS 10$ ;If LOS, yesR& MOV $TKPS,(R0)+ ;Set ticks per second CLC ;Indicate success45$: MOV (SP)+,R2 ;Restore R2h7 MOV R0,$SHLOS ;Store the pointer position of the blockM* MOV 4(SP),R5 ;Restore registers for $COPY MOV 6(SP),R4 ;U MOV 10(SP),R3 ; MOV 12(SP),R2 ; MOV 14(SP),R1 ; MOV 16(SP),R0 ; 50$: RETURN;+M; $COPY - Routine to put a series of parameters into the previously allocatedF; primary pool block. This routine also places the starting address ofD; the block of data into the primary pool packet. This size must beC; be reflected in the total SIZE attribute of the MESAG$ macro, buts1; not in the individual size values inside the <>n; ; Inputs:6; $SHLOS - Pointer to next word of free space in block7; 2(SP) - Size in bytes of data to be moved into block.;&; 4(SP) - Address of data to be dumped;CJ; Due to the nature of the CS from $PTMSG and nothing but MOV instructionsK; between the routine calls, the BCS at the start of this routine cannot be L; moved without destroying random locations in memory if $PTMSG/$ALOC fails.;-$COPY:: / BCS 30$ ;If CS, $PTMSG failed for some reasonn( MOV R0,-(SP) ;Save R0,R1,R2 across call MOV R1,-(SP) ; MOV R2,-(SP) ;r/ MOV 10(SP),R1 ;Get address of data to be movedi) MOV 12(SP),R2 ;Get byte size to transfer;3 MOV $SHLOS,R0 ;Get address of block to transfer too* INC R2 ;Round up to even number of bytes1 BIC #177401,R2 ; also get rid of data type code, ASR R2 ;Turn into wordsi! BEQ 20$ ;If none, skip transferu7 MOV R1,(R0)+ ;Move in the starting address of the dataa< MOVB R2,(R0)+ ;Put number of words and type code in packet  MOVB 13(SP),(R0)+ ;310$: MOV (R1)+,(R0)+ ;Move rest of data into packet, SOB R2,10$ ;820$: MOV R0,$SHLOS ;Update the pointer to next free byte MOV (SP)+,R2 ;Restore registers MOV (SP)+,R1 ;d MOV (SP)+,R0 ; , CLC ;Make sure next pass makes it through030$: MOV (SP)+,2(SP) ;Gimmick the return address8 MOV (SP),(SP)+ ;Pop off size value and retain carry bit RETURNt .ENDC ; CHEDMP, .PAGE .IF DF CHEDBG;dL; TTMSG - ROUTINE TO DUMP SINGLE CHARACTER DATA OUT TO THE CONSOLE TERMINAL;.TTMSG:: MOV R0,-(SP) ;SAVE R0 FOR LATER MOV R1,-(SP) ;SAVE R1 FOR LATER- MOV 6(SP),R1 ;PICK UP ADDRESS OF OUTPUT TEXTi! MTPS #PR7 ;LOCK OUT INTERRRUPTSR8 MOV KISAR5,-(SP) ;SAVE CONTEXT OF POSSIBLE DATA MAPPING/ MOV KINAR5,KISAR5 ;MAP THE TEXT FOR THE OUTPUT:+10$: MOVB (R1)+,R0 ;GET NEXT BYTE TO OUTPUT BEQ 30$ ;IF EQ DONEf* MOVB R0,TPS+2 ;LOAD BYTE IN OUTPUT BUFFER20$: TSTB TPS ;PRINTER BUSY?F$ BCS 30$ ;IF CS NO CONSOLE TERMINAL BPL 20$ ;IF PL YES BR 10$ ;GO AGAIN!30$: MTPS #0 ;RESTORE INTERRUPTS,+ MOV (SP)+,KISAR5 ;RESTORE ORIGINAL MAPPING  MOV (SP)+,R1 ;RESTORE R1  MOV (SP)+,R0 ;RESTORE R0T7 MOV (SP)+,(SP) ;COPY RETURN ADDRESS OVER INPUT ADDRESSP RETURNO .ENDC ; CHEDBGA .IF DF CHESAN;+L; .CRSAN - ROUTINE TO CREATE A DATA BLOCK CONTAINING THE DEVICE UCB ADDRESS,F; 00aaTADATADATADATADATADATADATADATADATASTARTING LBN, AND SIZE OF THE REQUEST BEING SET UP. THIS BLOCK WILLD; BE HUNG OFF THE CED WHEN IT IS DECLARED DEFERRED. WHEN THE CED ISD; EVENTUALLY WRITTEN TO DISK, A CORRESPONDING ROUTINE WILL VALIDATE E; AGAINST THESE PARAMETERS, DELETE THE BLOCK, AND CRASH IF THEY DON'TR; MATCH.; ; INPUTS:+&; R1 - I/O PACKET FOR INCOMING REQUEST*; I.PRM+P4(P5) -> STARTING LBN OF REQUEST ; R4 - POINTER TO ASSOCIATED CED; R5 - UCB ADDRESS OF DEVICE;A; ALL REGISTERS ARE PRESERVEDD;-.CRSAN::# TST E.MBXC(R4) ;ALREADY ALLOCATED ! BNE 30$ ;IF NE, YES, SKIP THISI2 MOV R5,-(SP) ;SAVE ALL REGISTERS ACROSS THE CALL MOV R4,-(SP) ; MOV R3,-(SP) ; MOV R2,-(SP) ; MOV R0,-(SP) ; MOV R1,-(SP) ;4 CALL $ALPKT ;ALLOCATE A PACKET THE SIZE OF AN I/O BCC 10$ ;IF CC, SUCCESSFUL & CLR R0 ;INDICATE NO BLOCK TO ASSIGN BR 20$ ;JOIN COMMON CODE 210$: MOV 12(SP),(R0) ;MOVE UCB ADDRESS INTO BLOCK+ MOV (SP),R1 ;GET BACK I/O PACKET ADDRESS 1 MOV I.PRM+P5(R1),2(R0) ;GET LSP OF LBN IN PACKETM$ CLR 4(R0) ;INITIALIZE BYTE OF MSP( BISB I.PRM+P4(R1),4(R0) ;GET MSP OF LBN+20$: MOV 10(SP),R4 ;RESTORE ADDRESS OF CED,4 MOV R0,E.MBXC(R4) ;INITIALIZE POINTER TO NEW BLOCK! MOV (SP)+,R1 ;RESTORE REGISTERSA MOV (SP)+,R0 ; MOV (SP)+,R2 ; MOV (SP)+,R3 ; MOV (SP)+,R4 ; MOV (SP)+,R5 ; 30$: RETURNO;+H; .CKSAN - ROUTINE TO VALIDATE THE PARAMETERS STORED IN THE SANITY BLOCKD; CONNECTED TO THE CED OF A DEFERRED WRITE AT THE TIME IT WAS MARKED ; DEFERRED. ;T ; INPUTS: %; R0 - CED ADDRESS OF DEFERRED EXTENTT#; R1 - I/O PACKET OF INTERNAL WRITEE*; R5 - UCB ADDRESS OF DEVICE GETTING WRITE;E; ALL REGISTERS ARE PRESERVED ;-.CKSAN::" MOV R5,-(SP) ;SAVE ALL REGISTERS MOV R4,-(SP) ; MOV R3,-(SP) ; MOV R2,-(SP) ; MOV R1,-(SP) ; MOV R0,-(SP) ;. MOV E.MBXC(R0),R4 ;GET POINTER TO DATA BLOCK! BEQ 20$ ;IF EQ, ASSUME CORRECTT- CLR E.MBXC(R0) ;CLEAR POINTER TO DATA BLOCKT! CMP R5,(R4) ;DO THE UCBS MATCHI BNE 10$ ;IF NE, NO, ERROR6 CMP 2(R4),I.PRM+P5(R1) ;DOES THE LSP OF THE LBN MATCH BNE 10$ ;IF NE, NO, ERROR. CMPB 4(R4),I.PRM+P4(R1) ;MSP OF THE LBN MATCH BEQ 20$ ;IF NE, NO, ERROR10$: BPT ;CRASH THE SYSTEMR*20$: MOV R4,R0 ;ELIMINATE THE DATA BLOCK CALL $DEPKT ;) MOV (SP)+,R0 ;RESTORE ALL THE REGISTERSV MOV (SP)+,R1 ; MOV (SP)+,R2 ; MOV (SP)+,R3 ; MOV (SP)+,R4 ; MOV (SP)+,R5 ; RETURNC;+I; .CKUCB - ROUTINE TO MAKE SURE R5 GOING INTO $DRQRQ MATCHES THE VALUE INB; THE I/O PACKET;E ; INPUTS:2); R1 - I/O PACKET ADDRESS GOING TO DRIVERM7; R5 - UCB ADDRESS BEING GIVEN TO DRIVER CALL AT $DRQRQR;-.CKUCB::0 CMP I.UCB(R1),R5 ;DOES THE UCB ADDRESSES MATCH BEQ 10$ ;IF EQ, YES BPT ;STOP THINGS HERE 10$: RETURNK;+K; .CKIOP - ROUTINE TO VALIDATE THE ORIGINAL AND DUPLICATE I/O PACKETS BEINGM*; USED TO WRITE CACHE DATA OUT TO THE DISK; ; INPUTS:P-; R1 - I/O PACKET ABOUT TO BE GIVEN TO DRIVERT/; R5 - UCB ADDRESS OF DEVICE PACKET IS GOING TOE;-.CKIOP::* MOV R0,-(SP) ;SAVE REGISTERS ACROSS CALL MOV R1,-(SP) ; MOV R4,-(SP) ;2 MOV KISAR5,-(SP) ;SAVE MAPPING REGISTERS AS WELL MOV KISAR6,-(SP) ;1 MOV I.AADA(R1),R4 ;POINT TO ORIGINAL I/O PACKETF3 CALL .CKUCB ;SEE IF THE DUPLICATE MATCHES R5 UCB: CMP I.UCB(R1),I.UCB(R4) ;SEE IF I/O PACKETS AGREE ON UCBS BNE 50$ ;IF NE, CRASHF CMPB I.PRM+P4(R1),I.PRM+P4(R4) ;DO THE STARTING LBNS AGREE IN PACKETS BNE 50$ ;IF NE, NO CRASHT CMP I.PRM+P5(R1),I.PRM+P5(R4) ; BNE 50$ ;? MOV I.PRM+P6.1(R4),R4 ;GET CED ADDRESS ASSOCIATED WITH REQUESTV' CALL MAPPAR ;MAP THE CACHE PARTITIONRA CMPB I.PRM+P4(R1),E.LBNL-1(R4) ;IS THE LBN WITHIN THE CED VALUESV BLO 50$ ;IF LO,NO, CRASHG" BHI 10$ ;IF HI, YES, DEFINITELY6 CMP I.PRM+P5(R1),E.LBNL(R4) ;DOES THE LOWER VALUE FIT BLO 50$ ;IF LO, NOS710$: MOV I.PRM+P2(R1),R0 ;GET SIZE OF REQUEST IN BYTESR! ADD #777,R0 ;CONVERT TO BLOCKSN ROR R0 ;C SWAB R0 ; BIC #177400,R0 ;0 DEC R0 ;DECREMENT COUNT BY ONE FOR COMPARISON; MOV I.PRM+P5(R1),-(SP) ;CALCULATE HIGHEST LBN IN CE00a$aND RANGES MOV I.PRM+P4(R1),-(SP) ; & ADD R0,2(SP) ;ADD IN SIZE OF REQUEST' ADC (SP) ;ADD THE CARRY IF NECESSARYE6 CMPB (SP)+,E.LBNH+2(R4) ;IS THE LBN WITHIN HIGH RANGE BHI 50$ ;IF HI, NOM BLO 60$ ;IF LO, YES CMP (SP)+,E.LBNH(R4) ;O BLO 70$ ;IF LO, EVERYTHING OK50$: BPT ;CRASH HERER460$: TST (SP)+ ;POP THE EXTRA WORD FROM COMPARISON170$: MOV (SP)+,KISAR6 ;RESTORE MAPPING REGISTERSC MOV (SP)+,KISAR5 ;+ MOV (SP)+,R4 ;RESTORE THE SAVED REGISTERSP MOV (SP)+,R1 ; MOV (SP)+,R0 ; RETURNI .ENDC ;CHESAN .END,2(SP) ;ADD IN SIZE OF REQUEST' ADC (SP) ;ADD THE CARRY IF NECESSARYE6 CMPB (SP)+,E.LBNH+2(R4) ;IS THE LBN WITHIN HIGH RANGE BHI 50$ ;IF HI, NOM BLO 60$ ;IF LO, YES CMP (SP)+,E.LBNH(R4) ;O BLO 70$ ;IF LO, EVERYTHING OK50$: BPT ;CRASH HERER460$: TST (SP)+ ;POP THE EXTRA WORD FROM COMPARISON170$: MOV (SP)+,KISAR6 ;RESTORE MAPPING REGISTERSC MOV (SP)+,KISAR5 ;+ MOV (SP)+,R4 ;RESTORE THE SAVED REGISTERSP MOV (SP)+,R1 ; MOV (SP)+ .TITLE DCDSP - CACHE DISPATCHER .IF DF D$$CHE .IDENT /01.01/N; 6; Copyright (c) 1985 by DIGITAL EQUIPMENT CORPORATION.; All rights reserved.;D; Original author:; John Gemignani;; Modified by:;P; D. P. Rabahy 06-Mar-85 01.01%; General clean up and documentation ;bI; This module contains the code which dispatches incoming I/O operations.R;R .PSECT DC$DSP, RO, I  n1 .SBTTL + DCDSP - DATA CACHE OPERATION DISPATCHER;;v ; Passed:e; R1 -> I/O packet ; R5 -> UCBL;C ; Returned: ; R0 contents lost;R>;;; N/A - control is passed to the appropriate phase-I routine;I ; Action:N4; This routine is used to dispatch the I/O packet to6; the appropriate action routines. The UCBX is mapped3; before beginning processing, in order to make theo8; context handy, and to verify that the UCBX is present.7; (Disk UCBs without UCBXs are either offline, or don'tO7; have one due to a lack of secondary pool, and as suchE; cannot support data caching.)a;t7; Function codes are checked in the order in which they6; occur most. The low three bits of the function code6; (lowest three bits of the modifier byte) are assumed8; to not be useable, as far as dispatching is concerned.; 9; All I/O functions except IO.STC require the cache to bem:; activated in order for dispatching (since IO.STC is used; to activate the cache).t;B$DCDSP::0 MOV U.UCBX(R5), KISAR6 ; Map the UCBX into APR60 BEQ 10$ ; None present if EQ, no caching here+ MOV I.FCN(R1), R0 ; Get the function coded5 BIC #BYPASS, R0 ; Remove any modifier (bypass) bitsr% CMP #IO.STC, R0 ; Control function?h BEQ 60$ ; Yes if EQ= BITB #XC.ACT, APR6.BASE+X.CSTS ; Cache active for this unit? * BEQ 10$ ; No if EQ, pass to the driver+ CMP #IO.RVB, R0 ; Read virtual operation?o BNE 30$ ; If NE, sanity check BPT30$:) CMP #IO.LOV, R0 ; Load I-space overlay?V BEQ 50$ ; Yes if EQ+ CMP #IO.RLB, R0 ; Read logical operation?  BEQ 20$ ; Yes if EQ, CMP #IO.WVB, R0 ; Write virtual operation? BNE 45$ ; If NE, sanity check BPT45$:, CMP #IO.WLB, R0 ; Write logical operation? BEQ 40$ ; Yes if EQ) CMP #IO.LDO, R0 ; Load D-space overlay?h BEQ 50$ ; Yes if EQ+10$: RETURN ; Pass request to the driver620$: BIT #BYPASS, I.FCN(R1) ; Should read be bypassed? BNE 10$ ; If NE, yesT$ CALLR $DCR1 ; Invoke read phase I)40$: CALLR $DCW1 ; Invoke write phase I#150$: CALLR $DCOV1 ; Invoke load overlay phase IY,60$: CALLR $DCSTC ; Invoke control routine .ENDC ; .IF DF D$$CHE .ENDity check BPT45$:, CMP #IO.WLB, R0 ; Write logical operation? BEQ 40$ ; Yes if EQ) CMP #IO.LDO, R0 ; Load D-space overlay?h BEQ 50$ ; Yes if EQ+10$: RETURN ; Pass request to the driver620$: BIT #BYPASS, I.FCN(R1) ; Should read be bypassed? BNE 10$ ; If NE, yesT$ CALLR $DCR1 ; Invoke read phase I)40$: CALLR $DCW1 ; Invoke write phase I#150$: CALLR $DCOV1 ; Invoke load overlay phase IY,60$: CALLR $DCSTC ; Invoke control routi00baTADATADATADATADATADATADATADATADATA; 6; Copyright (c) 1986 by Digital Equipment Corporation.; All rights reserved.;G4; This software is furnished under a license and may0; be used and copied only in accordance with the5; terms of such license and with the inclusion of theP5; above copyright notice. This software or any other1; copies thereof may not be provided or otherwiseC2; made available to any other person. No title to5; or ownership of the software is hereby transferred.A;S0; The information in this software is subject to3; change without notice and should not be construed.3; as a commitment by Digital Equipment Corporation.i;d2; Digital assumes no responsibility for the use or2; reliability of its software on equipment that is; not supplied by Digital.;b; $; Modified for RSX-11M-PLUS V4.0 by:;t; Eric Postpischil 20-Jun-86+; edp033 -- Add support for large extents.t;n*; Modified for RSX11M-PLUS version 4.2 by:; ; J. Kauffman 26-Sep-88*; JRK346 -- Conditionalize debugging code;a; #; Prefix file for disk data cachingn;h5; Note that the data mapping is different for I/D andu2; non-I/D systems. In order to offer maximal data7; space for the [larger] I/D systems, kernel data spacen7; will be used to map the cache partition header. This 4; provides up to 16KB of cache data structures which:; should be more than adequate. However, special handling; is provided for local data.S=; For non-ID systems, only APR6 is used to map the partition.n9; This sets a limit of 8KB on the data structures. Underk;; normal use, this would place a virtual limit on the cache /; date buffer to about 512KB, since there woulde6; be data structure allocation shortages on partitions; in excess of 512KB.l; #; NOTES ON ADDRESSING RESTRICTIONS:r;T;; Note that the cache code itself cannot rely on local data <; within the cacher module itself. On non-I/D systems, only:; APR6 can be used to reference the partition's pool area.#; This limits the pool size to 4KW.s:; On I/D systems, D-space is used to reference 8KW in both; APR5 and APR6.;a2; The UCB extension (UCBX) is mapped in APR6, as a;; convention. It is usually mapped only in the dispatchingn=; code, and may be dynamically (temporarily) mapped to accessN;; the cells used to maintain the device-specific listheads.s; :; The cache statistics buffer is also only mapped in APR6.:; It is also dynamically (temporarily) mapped by the macro<; USTAT$ (Update STATistics), in the various pieces of code.;s?; The actual cache buffers themselves are never directly mappedP<; during operation, although the executive subroutine $BLXIO!; will map them to transfer data.y;p ; CHEDBG = 0 ; CHESAN = 0 ; CHEDMP = 0 CHEDFR = 00 CHESTS = 0 ;Define to enable cache statistics;d ; Macro callse;v# .MCALL CHEDF$ ;Cache definitionsa/ .MCALL FILIO$ ;File oriented I/O definitions.$ .MCALL PKTDF$ ;Packet definitions1 .MCALL QIOSY$ ;QI/O error and code definitions)$ .MCALL UCBDF$ ;UCB[X] definitions CHEDF$u FILIO$b PKTDF$e QIOSY$r UCBDF$i;t; Macro definitionso;a#; USTAT$ - Update Statistics Buffern;B .MACRO USTAT$ OFFSETo, .IF DF CHESTS ; Cache statistics enabled? MOV #OFFSET, -(SP)F CALL $USTAT TST (SP)+ .ENDC ; .IFDF CHESTSs .ENDM USTAT$r;a2; MESAG$ - Display a message at the system console;  .MACRO COPY$ SIZE,ADDRESS,CODEi .IF DF CHEDMP .IF B CODEk MOV #SIZE,-(SP) .IFFI MOV #>,-(SP)i .ENDC MOV ADDRESS,-(SP) CALL $COPYt .ENDC ; DF CHEDMP .ENDM& .MACRO MESAG$ TEXT,OPCODE,SIZE,PRMLST .IF DF CHEDBG!CHEDMP$ CALL $SAVEt .ENDC ; DF CHEDBG!CHEDMP  .IF DF CHEDBG .IF NB TEXT MOV #TEXT,-(SP) CALL .TTMSG .ENDC .ENDC ; DF CHEDBG .IF DF CHEDMP .IF NB OPCODE .IF NB SIZE MOV #SIZE,R1r .ENDC .IF B SIZEl CLR R1a .ENDC MOV #OPCODE,R2 CALL $PTMSG .IF NB SIZE .IRP X, COPY$ X .ENDM .ENDC .ENDC ; NB OPCODE .ENDC ; DF CHEDMP .IF DF CHEDBG!CHEDMPM CALL $RSTOR .ENDC ; DF CHEDBG!CHEDMPD .ENDM MESAG$M;00 b[bN; Offset definitions in I.PRM,;L! P1 = 0 ;Parameter 1 (I.PRM+0)S P1.1 = 0 ;D P1.2 = 2 ; ! P2 = 4 ;Parameter 2 (I.PRM+4)V! P3 = 6 ;Parameter 3 (I.PRM+6)# P4 = 10 ;Parameter 4 (I.PRM+10).# P5 = 12 ;Parameter 5 (I.PRM+12)E# P6 = 14 ;Parameter 6 (I.PRM+14) P6.1 = 14 ;[UQ.UMD] P6.2 = 16 ;[UQ.UMD];E=; Symbols used internally as "base values" for APR relocationE;.6 APR5.BASE = 120000 ;Base address for APR5 references6 APR6.BASE = 140000 ;Base address for APR6 references, .IF DF K$$DAS ;Kernel I/D space supported, APRD.BASE = APR5.BASE ;Data begins in APR5 .IFF ;K$$DAS6 APRD.BASE = APR6.BASE ;Non-I/D systems begin in APR6 .ENDC; ; Macro status bits0;=; BYPASS: All modifiers in the function code to indicate that(); the operation is to be cache bypassed. ; <; EXBUSY: All bits which mark the extent as "busy" or locked-; pending the completion of another process.e;d;sC BYPASS = ;<1!2!4=7> If set, request is "bypassed"eD EXBUSY = ;<> If set, extent in use or locked;A); Definitions for large extent transfers.;R>MAXTR = 17700 ; size of largest permissible transfer, in bytes:MAXTRB = 177 ; size of largest transfer, in 64-byte blocksction code to indicate that(); the operation is to be cache bypassed. ; <; EXBUSY: All bits which mark the extent as "busy" or locked-; pending the completion of another process.e;d;sC BYPASS = ;<1!2!4=7> If set, request is "bypassed$ .TITLE DCQUE - DC Queue Maintenance .IFDF D$$CHEE .IDENT /1.01/ .PSECT DC$QUE,RO,I);A; Modified By:;D; J. Kauffman 17-Feb-87 1.01>; JRK330 - Convert E.UCBX to E.UCB for deferred write support;  E* .SBTTL QINLBN - Insert CED into LBN queue;E;; This routine will use the two temporary cells, H.TMP1 and :; H.TMP2 to place the specified CED into the ascending LBN:; queue for a device. The two temporaries are supplied by>; SEARCH (DCSUB), and are retained in order to position within?; the LBN list only once, thereby increasing cache performance.0; ; Passed:C.; R0 -> CED to be inserted into the LBN queue.;7 ; Returned:; All registers preservedt;. ; Processing:d;i; CASE TMP1 TMP2.); ----------------------------- ---- ----E&; I. No elements in queue EQ 0 EQ 0(; II. Becomes first in queue EQ 0 NE 0'; III. Becomes last in queue NE 0 EQ 0'; IV. Inserted within queue NE 0 NE 0s); ----------------------------- ---- ---- ;a; The following is performed:n; ; IF TMP1=0o ; IF TMP2=0b; { ;Case I.r; CURR.PREV <- 0; CURR.NEXT <- 0; X.CCED <- CURR; X.CCED+2 <- CURRi; }s; ELSE 0>g; { ;Case II.; CURR.PREV <- 0; CURR.NEXT <- TMP2; TMP2.PREV <- CURRe; X.CCED <- CURR ; }q; ELSE 0>. ; IF TMP2=0i; { ;Case III.V; CURR.PREV <- TMP1E; CURR.NEXT <- 0; TMP1.NEXT <- CURR ; X.CCED+2 <- CURRr; }; ELSE 0>F; { ;Case IV.; CURR.PREV <- TMP1 ; TMP1.NEXT <- CURR0; CURR.NEXT <- TMP2; TMP2.PREV <- CURRi; }s; END 0; END e;.QINLBN::& MOV R1,-(SP) ;Obtain a work register- MOV APRD.BASE+H.TMP1,R1 ;Beginning of queue?  BNE 20$ ;No if NE& MOV APRD.BASE+H.TMP2,R1 ;Empty queue? BNE 10$ ;No if NE CLR E.LPRV(R0) ;CURR.PREV <- 0 CLR E.LNXT(R0) ;CURR.NEXT <- 0* MOV KISAR6,-(SP) ;Save partition mapping- MOV U.UCBX(R5),KISAR6 ;Map the UCB extension * MOV R0,APR6.BASE+X.CCED ;X.CCED <- CURR, MOV R0,APR6.BASE+X.CCED+2 ;X.CCED+2 <- CURR- MOV (SP)+,KISAR6 ;Restore partition mapping0 BR 40$ ;And exit$10$: CLR E.LPRV(R0) ;CURR.PREV <- 0& MOV R1,E.LNXT(R0) ;CURR.NEXT <- TMP2& MOV R0,E.LPRV(R1) ;TMP2.PREV <- CURR* MOV KISAR6,-(SP) ;Save partition mapping- MOV U.UCBX(R5),KISAR6 ;Map the UCB extensionR* MOV R0,APR6.BASE+X.CCED ;X.CCED <- CURR' MOV (SP)+,KISAR6 ;Remap the partit00[baTADATADATADATADATADATADATADATADATAionp BR 40$ ;And exit,(20$: TST APRD.BASE+H.TMP2 ;End of queue? BNE 30$ ;No if NE& MOV R1,E.LPRV(R0) ;CURR.PREV <- TMP1 CLR E.LNXT(R0) ;CURR.NEXT <- 0& MOV R0,E.LNXT(R1) ;TMP1.NEXT <- CURR* MOV KISAR6,-(SP) ;Save partition mapping- MOV U.UCBX(R5),KISAR6 ;Map the UCB extensionV- MOV R0,APR6.BASE+X.CCED+2 ;X.CCED+2 <- CURRR' MOV (SP)+,KISAR6 ;Remap the partitionU BR 40$ ;And exith*30$: MOV R1,E.LPRV(R0) ;CURR.PREV <- TMP1& MOV R0,E.LNXT(R1) ;TMP1.NEXT <- CURR" MOV APRD.BASE+H.TMP2,R1 ;Get TMP2& MOV R1,E.LNXT(R0) ;CURR.NEXT <- TMP2& MOV R0,E.LPRV(R1) ;TMP2.PREV <- CURR$40$: MOV (SP)+,R1 ;Restore saved R1 RETURN; R* .SBTTL QRMLBN - Remove CED from LBN queue;U ; Passed:K; R0 -> CED to removei;n ; Returned:V; All registers preserved ; ; Processing:V;,; CASE .PREV .NEXTC+; ----------------------------- ----- ----- (; I. Only element in queue EQ 0 EQ 0); II. First element in queue EQ 0 NE 0R(; III. Last element in queue NE 0 EQ 0'; IV. Element within queue NE 0 NE 0T+; ----------------------------- ----- ----- ;P; IF CURR.PREV=0; IF CURR.NEXT=0; {a; X.CCED <- 0; X.CCED+2 <- 0; }N; ELSE 0>; {o; X.CCED <- CURR.NEXT; NEXT.PREV <- 0; }c; END ; ELSE 0>; IF CURR.NEXT=0; { ; X.CCED+2 <- CURR.PREV; PREV.NEXT <- 0; }i; ELSE 0>; {m; PREV.NEXT <- CURR.NEXT; NEXT.PREV <- CURR.PREV; }-; END ; END ;.QRMLBN::# MOV R1,-(SP) ;Get a work register.. MOV E.LPRV(R0),R1 ;Is this the first extent? BNE 20$ ;No if NE* MOV E.LNXT(R0),R1 ;Is this the last one? BNE 10$ ;No if NE. MOV KISAR6,-(SP) ;Save the partition mapping. MOV E.UCB(R0),R1 ;Get pointer to UCB address$ MOV U.UCBX(R1),KISAR6 ;Map the UCBX$ CLR APR6.BASE+X.CCED ;X.CCED <- 0& CLR APR6.BASE+X.CCED+2 ;X.CCED+2 <- 0& MOV (SP)+,KISAR6 ;Remap te partition BR 40$ ;And exit 10$: MOV E.LNXT(R0),R1 ;Get NEXTP. MOV KISAR6,-(SP) ;Save the partition mapping3 MOV R0,-(SP) ;Save the CED address across mappinge0 MOV E.UCB(R0),R0 ;Get the UCB address from CED$ MOV U.UCBX(R0),KISAR6 ;Map the UCBX' MOV (SP)+,R0 ;Restore the CED addressp. MOV R1,APR6.BASE+X.CCED ;X.CCED <- CURR.NEXT& MOV (SP)+,KISAR6 ;Remap te partition CLR E.LPRV(R1) ;NEXT.PREV <- 0 BR 40$ ;And exitC20$:# MOV E.LNXT(R0),R1 ;Last in queue?( BNE 30$ ;No if NE MOV E.LPRV(R0),R1 ;A. MOV KISAR6,-(SP) ;Save the partition mapping3 MOV R0,-(SP) ;Save the CED address across mappingR0 MOV E.UCB(R0),R0 ;Get the UCB address from CED$ MOV U.UCBX(R0),KISAR6 ;Map the UCBX' MOV (SP)+,R0 ;Restore the CED address 1 MOV R1,APR6.BASE+X.CCED+2 ;X.CCED+2 <- CURR.PREVV& MOV (SP)+,KISAR6 ;Remap te partition CLR E.LNXT(R1) ;PREV.NEXT <- 0 BR 40$ ;And exit(30$: MOV E.LPRV(R0),R1 ;Get PREVe2 MOV E.LNXT(R0),E.LNXT(R1) ;PREV.NEXT <- CURR.NEXT MOV E.LNXT(R0),R1 ;Get NEXT(2 MOV E.LPRV(R0),E.LPRV(R1) ;NEXT.PREV <- CURR.PREV40$: MOV (SP)+,R1 ;Restore saved R1 RETURN ;And all done U- .SBTTL QUPAGE - Move CED to end of age queueU;B ; Passed:6; R0 -> CED to updateP;R ; Returned:h; All registers preserved6;SQUPAGE::$ CALL QRMAGE ; Remove it from list& CALL QADAGE ; Add it at end of list RETURNV X* .SBTTL QRMAGE - Remove CED from age queue;( ; Passed:t#; R0 -> CED to remove from age listR;N ; Returned:E; All registers preservedt;X ; Processing:(;,; CASE .PREV .NEXT-,; ------------------------------ ----- -----+; I. Element is only in queue EQ 0 EQ 0U,; II. Element is first in queue EQ 0 NE 0+; III. Element is last in queue NE 0 EQ 0d*; IV. Element is within queue NE 0 NE 0,; ------------------------------ ----- -----;A; IF CURR.PREV=0; IF CURR.NEXT=0; {B; H.CEDH <- 0; H.CEDH+2 <- 0; } ; ELSE 0>; {N; H.00[b"bNCEDH <- CURR.NEXT; NEXT.PREV <- 0; },; ELSE 0>; IF CURR.NEXT=0; {-; PREV.NEXT <- 0; H.CEDH+2 <- CURR.PREV; }I; ELSE 0>; {E; NEXT.PREV <- CURR.PREV; PREV.NEXT <- CURR.NEXT; }n; END ; END ;-QRMAGE::# MOV R1,-(SP) ;Get a work registerE$ MOV E.APRV(R0),R1 ;First in queue? BNE 20$ ;No if NE# MOV E.ANXT(R0),R1 ;Only in queue? BNE 10$ ;No if NE. CLR APRD.BASE+H.CEDH ;Initialize the pointers CLR APRD.BASE+H.CEDH+2> BR 40$F10$:( MOV R1,APRD.BASE+H.CEDH ;H.CEDH <- NEXT CLR E.APRV(R1) ;NEXT.PREV <- 0 BR 40$ 20$:# MOV E.ANXT(R0),R1 ;Last in queue?  BNE 30$ ;No if NE MOV E.APRV(R0),R1 ;Get PREV CLR E.ANXT(R1) ;PREV.NEXT <- 0) MOV R1,APRD.BASE+H.CEDH+2 ;H.CEDH+2 <- 0V BR 40$ 30$:2 MOV E.APRV(R0),E.APRV(R1) ;NEXT.PREV <- CURR.PREV MOV E.APRV(R0),R1 ;Get PREVM2 MOV E.ANXT(R0),E.ANXT(R1) ;PREV.NEXT <- CURR.NEXT40$: MOV (SP)+,R1 ;Restore saved R1 RETURNn s6 .SBTTL QADAGE - Add a CED at the end of the age queue;S ; Passed:.; R0 -> CED to append to list;;T ; Returned:B; All registers preserved0;1 ; Processing:e;; CASE H.CEDH H.CEDH+2V/; ----------------------------- ------ --------V(; I. No elements in queue EQ 0 EQ 0*; II. First element in queue EQ 0 NE 0); III. Last element in queue NE 0 EQ 0E(; IV. Element within queue NE 0 NE 0/; ----------------------------- ------ --------P;R; CURR.NEXT <- 0; IF H.CEDH+2=0; { ; H.CEDH <- CURR ; H.CEDH+2 <- CURR; CURR.PREV <- 0; }p; ELSE 0>u; {; CURR.PREV <- H.CEDH+21; PREV.NEXT <- CURRA; H.CEDH+2 <- CURR ; }-; END -;-QADAGE::# MOV R1,-(SP) ;Get a work register CLR E.ANXT(R0) ;CURR.NEXT <- 0) MOV APRD.BASE+H.CEDH+2,R1 ;Is list null?E BNE 10$ ;No if NE< MOV R0,APRD.BASE+H.CEDH ;This extent becomes first and last$ MOV R0,APRD.BASE+H.CEDH+2 ;in queue- CLR E.APRV(R0) ;Indicate no previous eitherC BR 20$ ;And exit 10$:* MOV R1,E.APRV(R0) ;CURR.PREV <- H.CEDH+2& MOV R0,E.ANXT(R1) ;PREV.NEXT <- CURR, MOV R0,APRD.BASE+H.CEDH+2 ;H.CEDH+2 <- CURR20$: MOV (SP)+,R1 ;Restore saved R1 RETURN .ENDC ; .IFDF D$$CHEP .END a work register CLR E.ANXT(R0) ;CURR.NEXT <- 0) MOV APRD.BASE+H.CEDH+2,R1 ;Is list null?E BNE 10$ ;No if NE< MOV R0,APRD.BASE+H.CEDH ;This extent becomes first and last$ .TITLE DCROP - Read operations  .IDENT /02.01/T; 5; Copyright (c) 1988 by Digital Equipment CorporationC; All rights reserved.;; Written by: John Gemignani;T+; Modified for RSX-11M-Plus version 2.1 by:D;N; D. P. Rabahy;N+; Modified for RSX-11M-PLUS version 4.0 by:E;I ; J. KauffmanC; Eric Postpischil; D. P. Rabahy;V+; Modified for RSX-11M-PLUS version 4.2 by:;L; J. Kauffman 27-JUL-88 02.01:; JRK346 Handle low pool conditions for deferred overlaps;R;R; M; This module contains the code which preforms cache read operations. An I/Oc'; proceeds through the following steps:;lB; 1) Phase I - if the cache partition can fulfill the request then); proceed to step 1.1 otherwise step 1.2.; 1.1) Reserve involved extentsX$; A) Increment the pending count(s)"; B) Attach to those being loaded:; B.1) If NONE are being loaded call DCRUN which invokes; phase II (i.e. step 3)0:; B.2) Otherwise IOC (i.e. step 2) will call DCRUN after; the driver completesdI; 1.2) If a cache load is NOT appropriate, pass the request to the drivercB; A) If it IS, allocate the necessary data structures (i.e. cache4; extent, duplicate I/O packet and attachment), if5; lacking any pool resource pass the request to thex ; driverB; B) Prepare the driver packet (everything must be ready for IOC,); it may run before phase I completes!)R$; C) Pass the request to the driver; D) Prepare the cache packet; E) Queue it to the cacheN; 2) Driver I/O completion@00%baTADATADATADATADATADATADATADATADATA; A) If a driver error is indicated then mark all cache packets; pending with CD.ERRf5; B) Call DCRUN to request the cache (i.e. phase II)c ; 3) Phase II (; A) If a driver error is NOT indicated*; A.1) Then transfer the data via $BLXIO2; A.2) Otherwise delete all the extents involved6; B) Passing the driver completion status call $IOFIN;- .IF DF D$$CHE .PSECT DC$ROP, RO, Ie t .SBTTL READ PHASE I! .SBTTL + $DCR1 - Read operations  .SBTTL + $DCOV1 - Load overlay ;p ; Passed:A; UCBX mapped in APR6i;; X.CSTS := Unit's cache status (i.e. selected operations)f; 7; $CXDBL := Zero indicates context switching is enabled);a; R1 -> I/O packet5; I.EFN := Sign bit indicates virtual operatione$; I.TCB -> TCB of issuing task-; T.ST3 := T3.ACP indicates task is an ACPh); I.PRM+P4, P5 := Requested starting LBN ; R5 -> UCBC; ; Returned:R; R0 := contents lost ;DE;;; Otherwise N/A - control is passed to either DCRUN, LOAD or $DRQRQv;a ; Action:aI; Determine if the cache partition can fulfill the request. If so, queuecH; the packet to the cache and call phase II otherwise proceed with LOAD.;); Future enhancements:D; Handle the case where multiple extents contain the requested data.;>C; Overlay I/O can be detected by function code. The code IO.LDO or8; IO.LOV (Load I or D-space overlay) is passed in I.FCN.;A; Handle the case where an extent partially overlaps the request.o;sF; There are a number of strategies for handling partial overlaps. The*; following one comes from John Gemignani.;IH; If one extent does not fully map the request, then three possibilitiesG; must be considered. The extent overlaps the user's request in one ofe ; three ways:n=; 1) The extent fulfills the high end of the user's request.t3; Therefore, if possible, load the low end of the-; user's request.s?; 2) The extent fulfills the middle of the user's request, andr5; two I/O operations would be necessary to load thei4; cache. In this situation, the request should be5; rejected, since this operation is self defeating.n<; 3) The extent fulfills the low end of the user's request.;; Therefore, if possible, load the high end of the user'se ; request.;; Notes:B; ACP requests which are issued in order to handle the file systemH; (F11) are issued with context switching enabled (i.e. $CXDBL is zero).F; Requests on behalf of a task for disk extent crossings (i.e. mappingF; failures) are issued with context switching disabled (i.e. $CXDBL is ; non-zero). ;9QUICK: RETURN ; See exec routine $DRQRQ in module DRSUB3$DCR1::t;lM; Determine the operation, check if caching allowed and initialize statisticsh; context accordingly.; * TSTB I.EFN(R1) ; Is this a virtual read? BMI 20$ ; If MI, yesa- MOV I.TCB(R1), R0 ; Get the requestor's TCBt BNE 5$ ; If NE, got it  BPT ; Sanity check5$:o& BIT #T3.ACP, T.ST3(R0) ; From an ACP? BEQ 10$ ; If EQ, no;rO; The following code determines if context switching is disabled since I/O fromI; the F11 ACP when it is is I/O issued on behalf of a user task due to anl); extent crossing (i.e. mapping failure).n;l, TSTB $CXDBL ; Context switching disabled?- BNE 20$ ; If NE, yes, treat as virtual I/Or: BITB #XC.DIR, APR6.BASE+X.CSTS ; Cache ACP/RLB this unit? BEQ QUICK ; If EQ, noB< MOV #APR6.BASE+S.DIR, -(SP) ; Otherwise init stats context BR COMMON=10$: BITB #XC.LOG, APR6.BASE+X.CSTS ; Cache IO.RLB this unit?  BEQ QUICK ; If EQ, nos< MOV #APR6.BASE+S.LOG, -(SP) ; Otherwise init stats context BR COMMON20$: .IFDF CHEDFRt? BITB #X2.DEA,APR6.BASE+X.CST2 ; Are defers in process of flushT' BNE 30$ ; If NE, yes, must continue .ENDC ;CHEDFR8 BITB #XC.DAT,APR6.BASE+X.CSTS ; Cache IO.RVB this unit? BEQ QUICK ; If EQ, noi30$:< MOV #APR6.BASE+S.DAT, -(SP) ; Otherwise init stats context BR COMMON$DCOV1::= BITB #XC.OVR, APR6.BASE+X.CSTS ; Cache IO.LOV/LDO this unit?O BEQ QUICK ; If EQ, noK< MOV #APR6.BASE+S.00-b"bNOVR, -(SP) ; Otherwise init stats context ; BR COMMONeCOMMON:O MESAG$ RMSG,14.' USTAT$ S.RTOT ; Increment read totalS8 MOV #$QOPDN, 2(SP) ; Change return address, see $DRQRQ2 CALL SEARCH ; Find the first overlapping extent BCC 5$ ; If CC, found one. JMP LOAD ; CS, None found - attempt to load5$:#;6 ; Context: ; Cache partition mapped in APR6;t'; R0 -> CED of first overlapping extentR:; R2 := Highest LBN requested Least significant part (LSP):; R3 := " " " Most " " (MSP) ; R4 := Number of LBNs requested;O0; Check if overlapping extent fully maps request; ; Note:8; Don't forget that the extent highest LBN is stored +1.;C6 CALL $TSEND ; See if possible request is all in CED( BCS OVRLAP ; If CS, it is overlapping6 CMPB I.PRM+P4(R1), E.LBNL-1(R0) ; Does it completely? BHI 30$ ; If HI, yes BLO OVRLAP ; If LO, no6 CMP I.PRM+P5(R1), E.LBNL(R0) ; Double word comparison BLO OVRLAP ; If LO, no30$:A MESAG$ HMSG,16.,,<,> 2 CLR I.PRM+P3(R1) ; Init status and pending count8 BITB #ES.RIP, E.STAT(R0) ; Is this extent being loaded?0 BEQ 40$ ; If EQ, no, packet can be used as is2 CALL ATTCED ; Attach, IOC will request phase II4 BCS POOL ; If CS, lacking cache private sec. pool8 BICB #CS.REQ, APRD.BASE+H.CSTS ; Don't request phase II BR 50$ -40$: INCB E.PCNT(R0) ; Lock the extent downb@ BISB #CS.REQ, APRD.BASE+H.CSTS ; Packet ready, request phase II950$: USTAT$ S.RHIT ; Now we're sure, increment read hitR3 TST (SP)+ ; Remove statistics context from stackT9 MOV R0, I.PRM+P6(R1) ; Plug target CED address in packet$? MOV #APRD.BASE+H.PKTQ, R0 ; Packet wait queue listhead addressc. CALL $QINSP ; Insert packet into wait queue3 CALLR DCRUN ; Invoke phase II if packet is readyR;A(; Handle rejections and error conditions;POOL: MESAG$ KMSG1,18.A MOV #APR6.BASE, (SP) ; Errors are not counted in context ;DPR024a> USTAT$ S.PSP ; Lacking cache private secondary pool ;DPR0243 TST (SP)+ ; Remove statistics context from stackc, CALLR $DRQRQ ; Pass request to the driverOVRLAP: .IFDF CHEDFRp$ CALL MAPUCB ; Map the device UCBX; M; See if this device supports write defers. If not, immediately send request;; to the device driver since there are no deferred extents.a;eM; If defers were just turned off, the cache may be in the process of flushing,L; them. Since the XC.DFR bit will have been turned off, but there may stillH; be deferred extents in the cache, we can't just turn off the deferred K; lookup code. So, as long as X2.DEA is turned on, the XC.DFR bit does not.H; indicate the state of deferred lookup support. No more defers will beJ; allowed, but until the CEDs are eliminated, they will be used for reads.; < BITB #X2.DEA,X.CST2+140000 ; Are defers in process of flush( BNE 3$ ; If NE, yes, must continue on= BITB #XC.DFR,X.CSTS+140000 ; Does this device support defers / BEQ 100$ ; If EQ, no, send request to drivere3$:e( CALL MAPPAR ; Map the cache partition3 CLR -(SP) ; Set up default duplicate I/O addresss7 MOV I.PRM+P5(R1),-(SP) ; Set up LBN of range to searche; P; Start by seeing if the first overlapping extent is deferred. If it is, createM; a duplicate I/O packet and create the first of a possible set of attachmentrK; blocks that will point to any of the CEDs in the range of the current I/OTM; that will need to be copied to the user buffer after the completion of the ,; I/O from disk to user.;75$: BITB #ES.WDF,E.STAT(R0) ; Is this a deferred extent), BNE 20$ ; If NE, yes, process this extent010$: CALL $TSEND ; See if this CED is the last BCC 15$ ; If CC, it isf;eI; The last CED processed did not completedly fill the I/O request range. J; Starting with the top of that CED, the search for another CED will begin; using a modified size value.;e5 MOV (SP),R2 ; Restore start LBN of range to searche8 MOV E.LBNL(R0),R3 ; Get offset from range to CED start S005baTADATADATADATADATADATADATADATADATAUB R2,R3 ; .5 SUB R3,R4 ; Decrement that count from total blockse1 MOVB E.SIZE(R0),R3 ; Set up new size for searcht SUB R3,R4 ;7 MOV E.LBNH(R0),R2 ; Reset the start LBN for next CED . MOV R2,(SP) ; Save start LBN for next round CLR R3 ;  BISB E.LBNH+2(R0),R3 ; 1 CALL $FDCED ; Search for the next deferred CEDn( BCC 5$ ; Go back and process this one; H; No more CEDs are to be processed. The only way we know if one of themG; was deferred is by the duplicate I/O packet address on the stack. IfBM; is zero, bump the partial overlap count and let the driver fill the requestuH; back to the user. If there is a duplicate, the MBXIOC will handle theK; transfer of the deferred extents to the user buffer before completing theR ; user I/O. ;B015$: TST (SP)+ ; Eliminate the LBN range value1 TST (SP)+ ; Check duplicate I/O packet address . BEQ 100$ ; If EQ, partial overlap condition, BR 110$ ; Multi-Block transfer will occur;eN; At this point, it is known that there is at least one deferred CED that mustM; be transferred at the completion of the I/O from the disk. A duplicate I/OsM; packet is created to hold the information from the original I/O packet thateO; gets changed when it is changed into an internal I/O with a completion returnTK; within the data caching code. This extra packet is also used to hold thepK; listhead for all CEDs that are tied down waiting for the I/O to complete.M;i20$:6 MOV R4,-(SP) ; Save the range size across processing& MOV R0,R4 ; Save the extent address/ TST 4(SP) ; Skip duplication if already done BNE 40$ ;) CALL CHEDUP ; Duplicate the I/O packeto& BCC 30$ ; If CS, unable to allocate; P; It isn't possible to allocate the space for the extra I/O packet. The currentN; scheme is to get out of the situation by backing up the user's PC to reissue$; the I/O after a significant event.;a525$: ADD #10,SP ;Back up the stack pointer to $QOPDN:4 CALLR $BCKUP ; Back up the user PC to reissue the' ; I/O after a significant events;K; The duplicate I/O packet has been successfully allocated. The address ifPO; it will be stored in 4(SP) to indicate on successive passes that the previousiM; code path won't have to be duplicated. The original I/O packet address wilc5; also be stored in the duplicate for easy reference.s;s030$: MOV R0,4(SP) ; Store the duplicate address= MOV R1,I.PRM+P6.2(R0) ; Store address of original I/O in dup9 CLR I.PRM+P6.1(R0) ; Initialize listhead to attachments;6 MOV R0,I.AADA(R1) ; Point to dup. packet in originalA MOV KINAR5,I.IOSB+2(R1) ; Turn original packet into internal I/OwD MOV #MBXIOC!1,I.IOSB+4(R1) ; and return to MBXIOC for completion+ ; The OR'd 1 indicates internal I/O.;hN; Now create an attachment block for the discovered CED. This attachment willM; contain a forward pointer to the next attachment, a pointer to the CED that+P; is tied down to prevent its elimination before the contents can be transferred(; to the user buffer, and a status word.;)640$: CALL CREATT ; Allocate a block of data for this BCC 50$ ; If CC, successful;iG; At this point we don't have enough cache pool to allocate one or moreoG; attachment blocks for the CEDs that must be tied down across the diskaI; request. To try to get more pool, the last CED in the age list will be F; eliminated. If it is busy or must be written to disk because it is H; deferred, this code must undo all of its previous work (deallocate theI; earlier attachment blocks -if any, deallocate the duplicate I/O packet)lJ; and then back up the original I/O packet through the standard mechanism.;o&; 4(SP) - Duplicate I/O packet address"; R1 - Original I/O packet address5; R4 - CED that was to be tied down in this operations;. MOV APRD.BASE+H.CEDH,R0 ; Get CED in age list. BEQ 49$ ; If there are none, system trouble1 MOV R4,-(SP) ; Save the CED address across call * CALL FRECED ; Eliminate CED in age list1 MOV (SP)+,R4 ; Restore the original CED addresso0 BCC 400=b"bN0$ ; If CC, successful, retry allocation5 MOV 4(SP),R0 ; Restore duplicate I/O packet addresss= MOV I.PRM+P6.1(R0),R3 ; Point to first attachment descriptor,43$: BEQ 45$ ; If EQ, none left to process' MOV (R3),-(SP) ; Save forward pointero1 MOV A.IOPA(R3),R4 ; Get pointer to affected CEDi8 DECB E.PCNT(R4) ; Undo the tie-down for this operation6 CALL .DEPAD ; Deallocate this attachment descriptor( MOV (SP)+,R3 ; Restore forward pointer, BR 43$ ; Go back to check this attachment?45$: MOV I.AADA(R0),I.AADA(R1) ; Restore all saved values from ;B MOV I.IOSB+2(R0),I.IOSB+2(R1); duplicate I/O packet to original MOV I.IOSB+4(R0),I.IOSB+4(R1);2 MOV R0,R3 ; Get address of duplicate I/O packet& CALL CHEDEP ; Deallocate the packet+ BR 25$ ; Back-up the original I/O packetE%49$: BPT ; Shouldn't happen, crashw; H; A deferred extent has been found within the range of the current read J; request. It will be tied down to prevent its elimination while the readL; is posted to the device for the old data. The CED will also be pointed to@; by the allocated attachment block which will be filled in here;M50$: SC MESAG$ DFRATT,30.,,<,>a: INCB E.PCNT(R4) ; Tie down extent to prevent elimination9 MOV R4,A.IOPA(R0) ; Put CED address in attachment blockn% MOV R4,-(SP) ; Save the CED address 6 MOV 6(SP),R4 ; Restore the duplicate I/O packet addr< MOV I.PRM+P6.1(R4),(R0) ; Place the current packet in front: MOV R0,I.PRM+P6.1(R4) ; of listhead in duplicate packet;lL; Processing for this CED is complete. Now check to see if this is the lastM; deferred extent in the range of the I/O request. If so, queue the originalGO; I/O packet to the driver to copy the old data to the user buffer and wait for,4; its completion before transferring the extent data;R( MOV (SP)+,R0 ; Restore the CED address' MOV (SP)+,R4 ; Restore the range size * BR 10$ ; Go back and look for more CEDs;tL; At this point the I/O packet is either the untouched original that will beH; completed by the driver back to the user or will be a packet with the I; forward pointers to the duplicate I/O packet and the attachments to theeN; deferred extents. If the driver is completing the I/O for good, the partial&; overlap system value is incremented.;f .ENDC ;CHEDFR100$: MESAG$ MMSG,15. 7 USTAT$ S.RLAP ; Cache missed because partial overlapr8110$: TST (SP)+ ; Eliminate the excess statistics data, CALLR $DRQRQ ; Pass request to the driver;+L; $TSEND - routine to determine if the end of the selected CED is beyond the#; range of a requested I/O packet.e;t ; Inputs:c(; R0 - CED known to overlap range of I/O;; R2,R3 - MSP,LSP of the highest block of I/O request ranger ; Outputs:2; CC - CED extends beyond the end of the I/O range/; CS - CED end is enclosed within the I/O range ;-$TSEND::: CMPB R3,E.LBNH+2(R0) ; Might the extent map the request? BLO 10$ ; If LO, yesc BHI 20$ ; If HI, no, CMP R2,E.LBNH(R0) ; Double word comparison BHIS 20$ ; If HIS, no610$: TST (PC)+ ; Indicate extent is beyond I/O range420$: SEC ; Indicate end of extent is within range RETURN ;+H; $FDCED - routine to determine if any other existing extents after the B; currently selected one are within the range of the requested I/O;- ; Inputs: +; R0 - CED address of last processed extent0; R2,R3 - LBN starting address of range to check5; R4 - size of region left to check (in 32 wd blocks) ; ; Outputs:8; CC: R0 - CED address of extent in range of I/O request=; R2,R3 - LBN address of top of CED discovered to overlapS"; CS - No further involved extents;- .IFDF CHEDFR $FDCED::( SEC ; Assume no more CEDs to process8 MOV E.LNXT(R0),R0 ; Get address of next extent in line' BEQ 100$ ; If EQ, no more to process6 MOV R2,-(SP) ; Save starting address of LBN to check MOV R3,-(SP) ;& DEC R4 ; Temporarily normalize size4 ADD R4,2(SP) ; Get address of top block of request' ADC (SP) ; Do00EbaTADATADATADATADATADATADATADATADATAuble word computation ! INC R4 ; Restore size variable : CMPB R3,E.LBNH+2(R0) ; Might the extent map the request? BHI $FDCED ; If HI, not BLO 20$ ; If LO, yes, CMP R2,E.LBNH(R0) ; Double word comparison BHIS $FDCED ; If HIS, noe=20$: CMPB (SP),E.LBNL-1(R0) ; Does this extent truly overlap?t BHI 30$ ; If HI, yes  BLO 50$ ; If LO, no/ CMP 2(SP), E.LBNL(R0) ; Double word comparisone BLO 50$ ; If LO, no630$: TST (PC)+ ; Indicate another CED found in range)50$: SEC ; Indicate no more CEDs foundC260$: MOV (SP)+,R3 ; Restore high LBN of found CED MOV (SP)+,R2 ; 100$: RETURN .ENDC ;CHEDFR / .SBTTL + LOAD - Prepare to load a cache extent,;B ; Passed:o ; Cache partition mapped in APR6; H.TMP2 -> Next CED by LBN-; E.LBNL, -1 := Starting LBN of this extentp;; (SP) := Statistics context;$; R1 -> I/O packet1; I.EFN := Sign bit indicates virtual operation5; I.FNC := Function:); I.PRM+P4, P5 := Requested starting LBNn; I.TCB -> Requestor's TCB,; T.ST3 := T3.ACP indicates task is an ACP"; R4 := Number of blocks requested; R5 -> UCB addressN+; U.UCBX -> Secondary pool address of UCBXa6; X.CSTS := Unit's cache status, selected operations"; X.XDAT := Virtual extent limit%; X.XRDA := Read ahead extent limiti"; X.XOVR := Overlay extent limit"; X.XLOG := Logical extent limit$; X.XDIR := Directory extent limit; 3; $CXDBL := Indicates context switching disabledP8; $DCCEL := Length of extent used to map this request1; $DCCEB, +2 := LBN of first block of this extent;4 ; Returned: 5;;; N/A - control is passed to either CLOAD or $DRQRQc;a ; Action:rE; The appropriate extent limit is checked. If the request is too big ; it is passed to the driver.t; >; Virtual requests are then increased to the read ahead limit.;l; Future enhancements:I; If a virtual request is made to a block which is the last one within anIF; extent, we have the option of loading data from the next extent with8; the hope that the user will happen to request it soon.; 2; $DCNEL - Length of extent following current one-; $DCNEB - LBN of first block of this extentn;0LOAD: MESAG$ LMSG,17.,,<>6 MOV KISAR6, -(SP) ; Save the cache partition mapping5 MOV U.UCBX(R5), KISAR6 ; Map to the UCBX temporarily .IFDF CHEDFRu> BITB #X2.DEA,APR6.BASE+X.CST2; Is the cache being deactivated2 BNE DEACT ; If NE, yes, don't allow cache loads .ENDC ;CHEDFR$ TSTB I.EFN(R1) ; Virtual function?, BPL 40$ ; If PL, no, logical of some formF CMPB R4, APR6.BASE+X.XDAT ; Is the requested size acceptable? ;DPR0266 BLOS 10$ ; If LOS, yes, attempt to increase ;DPR026/ JMP TOOBIG ; Else fail the request ;DPR026)10$: ;DPR026i;nM; If the requested size is within the virtual I/O limit an attempt is made toFK; increase it through to the end of the disk extent described by $DCCEB andA ; $DCCEL.E;eA BITB #XC.RDA, APR6.BASE+X.CSTS ; Is read ahead selected? ;DPR026V# BEQ CLOAD ; If EQ, no ;DPR026 ; N; Calculate the number of disk blocks, starting from the requested one, to theA; end of the extent. An implied carry is allowable in this case.0;, MOV I.PRM+P5(R1), R2 ; Get user's LBN (LSP)4 SUB $DCCEB+2, R2 ; Subtract base mapping of extent, SUB R2, $DCCEL ; Subtract from extent size8 CMP $DCCEL, R4 ; Is the end of the disk extent higher?5 BEQ CLOAD ; If EQ, no, can't increase size ;DPR026." BHI 15$ ; If HI, yes ;DPR026! BPT ; Sanity check ;DPR026 15$: ;DPR026( MOV $DCCEL, R4 ; Use the extent's size! CLR R3 ; Prepare to load byte.t& BISB APR6.BASE+X.XRDA,R3 ; Load byte.4 CMP R4, R3 ; Is the new size acceptable? ;DPR026 BLOS 20$ ; If LOS, yes1 MOV R3,R4 ; Otherwise impose read-ahead limit.t20$:;,M; If necessary the increased request size is reduced to avoid overlapping thes; next cache extent.;O8 MOV (SP), KISAR6 ; Restore the cache partition mapping9 MOV APRD.BASE+H.TMP2, R0 ; Get CED of next extent by LBN 4 BEQ00Mb"bN CLOAD ; If EQ, isn't one, don't check overlap2 MOVB I.PRM+P4(R1), R3 ; Get fresh copy of LBN MSP1 MOV I.PRM+P5(R1), R2 ; Get fresh copy of LBN LSP 6 ADD R4, R2 ; Recalculate high LBN based on new size ADC R3+ CMPB R3, E.LBNL-1(R0) ; Overlap on buffer?m BLO CLOAD ; If LO, no BHI 30$ ; If HI, yest- CMP R2, E.LBNL(R0) ; Double word comparisone BLO CLOAD ; If LO, no;PK; There is overlap here. We must shrink the size of the request down. The O; best thing to do here is to subtract the extent's base LBN from the request'slL; high LBN. The resulting number indicates how much the buffer size must beE; adjusted to prevent overlap. Again, an implied carry is allowable.s;o,30$: SUB E.LBNL(R0), R2 ; Subtract from LSP+ SUB R2, R4 ; Backup the necessary blocks  BR CLOAD ; Load the cache;PM; Determine exactly what type of logical I/O and enforce corresponding limit.r;s740$: MOVB APR6.BASE+X.XOVR, R3 ; Assume it's an overlayw0 CMP I.FCN(R1), #IO.RLB ; Is assumption correct? BNE 50$ ; If NE, yes 6 MOVB APR6.BASE+X.XLOG, R3 ; Assume it's a logical I/O- MOV I.TCB(R1), R2 ; Get the requestor's TCBt; BNE 45$ ; If NE, got it ; BPT ; Sanity checke;45$:& BIT #T3.ACP, T.ST3(R2) ; From an ACP? BEQ 50$ ; If EQ, no1 MOVB APR6.BASE+X.XDIR, R3 ; Assume it's Files-11c' TSTB $CXDBL ; Is assumption correct?l BEQ 50$ ; If EQ, yesr7 MOVB APR6.BASE+X.XDAT, R3 ; Turns out it's ACP virtuals50$:- CMPB R4,R3 ; Is requested size acceptable?m BLOS CLOAD ; If LOS, yesI .IFDF CHEDFRV* BR TOOBIG ; Increment the failure tally .ENABL LSBBDEACT: MESAG$ DEAMSG,31.8 MOV (SP)+,KISAR6 ; Restore the cache partition mapping BR 10$4 .ENDC ;CHEDFRTOOBIG: MESAG$ KMSG2,19.9 MOV (SP)+, KISAR6 ; Restore the cache partition mappingm% USTAT$ S.RBIG ; Request is too bigs; BR 10$10$:3 TST (SP)+ ; Remove statistics context from stackT, CALLR $DRQRQ ; Pass request to the driver .DSABL LSB  r .SBTTL + CLOAD - Cache load; ; Passed:f*; (SP) := Cache partition physical address; 2(SP) := Statistics context;.; R1 -> I/O packet); I.PRM+P4, P5 := Requested starting LBNs ; R4 := Number of blocks to load; ; Returned:C%;;; N/A - control is passed to $DRQRQM;( ; Action:6E; Allocate the necessary data structures. If any resource is lacking !; pass the request to the driver.+;;G; Prepare the packet going to the driver being sure everything is ready 4; for IOC since it may run before phase I completes.;d?CLOAD: MOV (SP)+, KISAR6 ; Restore the cache partition mapping(# CALL GETBUF ; Get a cache buffer / BCS FAIL ; If CS, lacking cache private pool ;s ; Context:%; R0 -> CED of newly allocated extentC; R1 -> I/O packet;p6 MOV R0, R3 ; Put the CED address in a safe register) CALL CHEDUP ; Duplicate the I/O packetk0 BCS POOL1 ; If CS, lacking primary pool space;r ; Context:4; R0 -> Duplicated I/O packet to be queued to driver1; R1 -> Original I/O packet to be queued to cache.; R3 -> New CED(;+ XOR R0, R3 ; Swap R0 and R3) XOR R3, R0 ; Ready parameter to ATTCEDc XOR R0, R3 ; Complete swapC1 CLR E.ATTL(R0) ; Initialize the attachment list00 CLRB E.PCNT(R0) ; Initialize the pending count .IF DF CHESAN. CLR E.MBXC(R0) ; Initialize the sanity block .ENDC ;CHESAN; CLR I.PRM+P3(R1) ; Initialize attachment count and statuso+ CALL ATTCED ; Attach the I/O and the CEDI BCC 10$ ; If CC, OK. JMP POOL2 ; Lacking Cache private Sec. Pool10$:6 USTAT$ S.RLOD ; Now we're sure, increment read load3 TST (SP)+ ; Remove statistics context from stackR;R; Prepare the driver packet.;(& MOV R0, -(SP) ; Save the CED address& MOV R1, -(SP) ; cache packet address$ MOV R4, -(SP) ; and requested size9 MOV KINAR5, I.IOSB+2(R3) ; Setup internal I/O completionCB MOV #, I.IOSB+4(R3) ; Address must be in APR5!, note bit-00 MOV E.PHYA(R0), R1 ; Buffer address doubleword MOV #140000, R2 ; In APR6i6 CALL $MPPHY ; Map to physical address if 00UbaTADATADATADATADATADATADATADATADATANPR device= MOV R1, I.PRM+P1.1(R3) ; Set the most significant part (MSP)s= MOV R2, I.PRM+P1.2(R3) ; Set the least " " (LSP)) MOV R3, R1 ; Ready parameter to $DRQRQR;-@; R4 currently contains the length expressed in 512-byte blocks.;& ASH #11,R4 ; Convert to byte count.1 MOV R4, I.PRM+P2(R1) ; Setup the buffer's lengthd0 MOV R0, I.AADA(R1) ; Point to CED being loaded. CLRB I.EFN(R1) ; Make into a logical I/O ???;2; Note:R#; Everything must be ready for IOC!a;e4 MOVB #ES.RIP, E.STAT(R0) ; Flag as read-in-progress= MOV KISAR6, -(SP) ; Save APR6 because DUDRV uses it ;DPR022s6 MOV R5, -(SP) ; Save address of UCB, driver clobbers CALL $DRQRQ ; Send to drivery MOV (SP)+, R5 ; Restore UCBi= MOV (SP)+, KISAR6 ; Restore mapping to cache region ;DPR022, MOV (SP)+, R4 ; Restore the requested size& MOV (SP)+, R1 ; cache packet address! MOV (SP)+, R0 ; and CED address;;k ; Context:"; R0 -> CED of extent being loaded; R1 -> Cache packet*; R4 := size of request in 512-byte blocks; #; Complete the setup of the new CED); 5 MOVB I.PRM+P4(R1), R3 ; Get MSP of the requested LBN)4 MOVB R3, E.LBNL-1(R0) ; Setup the extent LBN (MSP)% MOV I.PRM+P5(R1), E.LBNL(R0) ; (LSP)e: MOV I.PRM+P5(R1), E.LBNH(R0) ; Setup the high LBN as well: ADD R4, E.LBNH(R0) ; Add the length to obtain high block ADC R3 1 MOVB R3, E.LBNH+2(R0) ; Setup the high LBN (MSP)E1 CALL QADAGE ; Insert the CED into the age listn+ CALL QINLBN ; and into the unit LBN listo;e3; Prepare the cache packet for queueing to phase II ; 1 MOV R0, I.PRM+P6(R1) ; Point cache packet to CEDh4 MOV #APRD.BASE+H.PKTQ, R0 ; Get address of listhead- CALL $QINSP ; Queue the packet by priority & RETURN ; IOC will request phase II;e; Handle rejections and errors;, .ENABL LSB;FAIL: MESAG$ KMSG3,20.A MOV #APR6.BASE, (SP) ; Errors are not counted in context ;DPR024 5 USTAT$ S.PSP ; Lacking cache extent space ;DPR024l BR 10$LPOOL1:;;O; Should the situation occur where buffer space exists within the cache, BUT noeI; pool exists for an I/O packet, the allocated space within the partitionB@; should be deallocated and the request forwarded to the driver.;p MESAG$ KMSG4,21.A MOV #APR6.BASE, (SP) ; Errors are not counted in context ;DPR024n0 USTAT$ S.POL ; Lacking primary pool ;DPR024+ MOV R3, R0 ; Prepare parameter to FREBUFd CALL FREBUF ; Free up the CED BR 10$kPOOL2:;xH; There is not enough pool available for an attachment. Back out of the<; current predicament and forward the request to the driver.;  MESAG$ KMSG1,18.tA MOV #APR6.BASE, (SP) ; Errors are not counted in context ;DPR024n5 USTAT$ S.PSP ; Lacking cache private pool ;DPR024G CALL FREBUF ; Free up the CED XOR R1, R3 ; Swap R1 and R3+ XOR R3, R1 ; Prepare parameter to $DRQRQ + XOR R1, R3 ; Prepare parameter to CHEDEP 4 CALL CHEDEP ; Deallocate the duplicate I/O packet; BR 10$10$:3 TST (SP)+ ; Remove statistics context from stack , CALLR $DRQRQ ; Pass request to the driver .DSABL LSBu .PAGE, .SBTTL MULTI-EXTENT TRANSFER I/O COMPLETION2 .SBTTL + MBXIOC - Internal I/O completion routine;n ; Passed:.; R3 -> Driver packetr; I.UCB -> UCB ; I.PRM+P3, P4 := Driver status; I.AADA -> Cache packet; .IFDF CHEDFR MBXIOC: - MESAG$ MBXMSG,39.,,<>e( MOV I.UCB(R3),R5 ; Get the UCB address) MOV R3,R1 ; Copy address of I/O packetT4 CALL ADJBUF ; Adjust user buffer to $BLXIO format1 MOV I.AADA(R3),R3 ; Get address of cache packet ;u ; Passed:.; R3 -> Cache packet:; I.PRM+P4 := Requested LBN most significant part (MSP);; I.PRM+P5 := Requested LBN least significant part (LSP)B-; I.PRM+P6.1 -> CED of first involved extent,; I.PRM+P3, P4 := Driver completion status; K; Get back the pointer to the duplicate I/O packet with the saved arguments)J; from the original. Copy these values back to the original packet to beH; sent to the user and deallocate the pool for the dup00]b"bNlicated I/O packet;d6 MOV I.IOSB+2(R3),I.IOSB+2(R1) ; Restore original IOSB MOV I.IOSB+4(R3),I.IOSB+4(R1)7 MOV I.AADA(R3), I.AADA(R1) ; Restore original I.AADAd? MOV I.PRM+P4(R3),I.PRM+P4(R1) ; Restore the MSP and LSP of the 8 MOV I.PRM+P5(R3),I.PRM+P5(R1) ; starting LBN address@ MOV I.PRM+P6.1(R3), R0 ; Get address of first involved extent6 CALL CHEDEP ; Deallocate packet from primary pool;sK; Go into a loop getting the addresses of the involved extents to be copiedlN; into the user buffer now that the disk copy of the data is completed. TheseJ; addresses are taken from the attachment blocks hanging off the duplicateO; I/O packet. The CEDs are individual processed to restore the blocking countsLP; and copy the data to the user task. Then the attachment block is deallocated.;(2 MOV R0,R3 ; Copy the first CED address involved+ BNE 5$ ; If NEQ, there is one to processm* BPT ; There had better be at least one+5$: CALL MAPPAR ; Map the Cache partition/ MOV R1,R5 ; Duplicate the I/O packet addresst=10$: MOV A.IOPA(R3),R0 ; Get the CED address for this attachc/ MOV (R3),-(SP) ; Save the next packet addressk0 CALL .DEPAD ; Deallocate the attachment block8 BISB #ES.XIP,E.STAT(R0) ; Indicate transfer in progress;TO; First determine the address of the LBN immediately following the I/O request.dG; This will be used in the determination of the size and buffer offsetsh;  MOV I.PRM+P5(R5),-(SP) ;? MOVB I.PRM+P4(R5),R4 ; Get address of first LBN after requestp MOV R4,-(SP) ;4 MOV I.PRM+P2(R5),R4 ; Get the request size (bytes) ADD #777,R4 ; Round upM' ROR R4 ; Bring carry in as high bit.r- SWAB R4 ; Finish right shift of nine bits.t' BIC #177400,R4 ; Clear unwanted bits.t0 ADD R4,2(SP) ; Calculate highest LBN requested ADC (SP) ; Carry if necessary;iI; Now the range of the I/O packet is determined by the I.PRM+P4/P5 start aJ; address and the (SP)/2(SP) pair while the CED range is determined by the; E.LBNL/-1 and E.LBNH/+1 pair.e;s+ CLR R1 ; Initialize the CED offset value 9 MOV I.PRM+P2(R5),R2 ; Get the total size of the requestR# CLR R3 ; Initialize front offsetSD CMPB E.LBNL-1(R0),I.PRM+P4(R5) ; See if there is an offset in front* BHI 20$ ; If HI, there is, determine it BLO 30$ ; If LO, there isn't 6 CMP E.LBNL(R0),I.PRM+P5(R5) ; Double precision check 1 BHI 20$ ; If HI, there is an offset to computed BEQ 30$ ; If EQ, no offset > MOV I.PRM+P5(R5),R1 ; Compute the offset into the CED buffer SUB E.LBNL(R0),R1 ; % BR 30$ ; Go on to compute the sizeV620$: MOV E.LBNL(R0),R3 ; Determine front sided offset SUB I.PRM+P5(R5),R3 ;o, ASH #9.,R3 ; Turn block number into bytes830$: SUB R3,R2 ; R2 now contains modified size request' CLR R3 ; Initialize back side offsetr6 CMPB (SP),E.LBNH+2(R0) ; Is there a back sided offset BLO 50$ ; If LO, no BHI 40$ ; If HI, yes 3 CMP 2(SP),E.LBNH(R0) ; Check with double precisionM* BLOS 50$ ; If LOS, no offset to compute440$: MOV 2(SP),R3 ; Get high address of I/O request8 SUB E.LBNH(R0),R3 ; Turn it into the back sided offset, ASH #9.,R3 ; Turn block number into bytes650$: SUB R3,R2 ; R2 contains transfer size in blocks* CLR R3 ; Get default user buffer offset? CMPB E.LBNL-1(R0),I.PRM+P4(R5) ; Is there a user buffer offset0 BLO 70$ ; If LO, no BHI 60$ ; If HI, yes : CMP E.LBNL(R0),I.PRM+P5(R5) ; Check with double precision+ BLOS 70$ ; If LOS, no user buffer offsetL560$: MOV E.LBNL(R0),R3 ; Get high LBN address of CED 7 SUB I.PRM+P5(R5),R3 ; Turn R3 into user buffer offseto;eN; The result of the previous code was to determine the relative offsets of theN; starting addresses of the APR biases of the user buffer determined by ADJBUFN; and the CED LBN (E.LBNL). These values will be passed to EBLXIO to copy the,; data into the user buffer from the extent.;C570$: MOV (SP)+,(SP)+ ; Pop the excess data off stackn/ ASH #3,R1 ; Turn user offset into 32 wd bias. ASH #3,R3 ; Turn CED offs00ebaTADATADATADATADATADATADATADATADATAet into 32 wd bias8 ADD I.PRM(R5),R3 ; Get bias into user buffer for start1 ADD E.PHYA(R0),R1 ; Get bias into CED for starto% MOV R0,-(SP) ; Save the CED address, MOV R2,R0 ; Get size to transfer in bytes: MOV #APR5.BASE,R2 ; Get source displacement in APR5 form< MOV I.PRM+2(R5),R4 ; Get destination displacement from I/O; *; Transfer data from extent to user buffer;(- CALL EBLXIO ; Transfer data to user bufferA$ MOV (SP)+,R0 ; Restore CED address, CALL QUPAGE ; Move CED to end of age list; BICB #ES.XIP,E.STAT(R0) ; Indicate no transfer in progresss4 DECB E.PCNT(R0) ; Unlock extent for this operation/ BNE 80$ ; If NE, that's all that can be doneR;03; See if this extent has been waiting to be deleted2; > BITB #ES.DEL,E.STAT(R0) ; Been declared available for delete? BEQ 80$ ; If EQ, no, finished+ MESAG$ MBX1,32.,,<>r0 MOV R5,-(SP) ; FRECED requires that R5 contain: MOV I.UCB(R5),R5 ; the address of the UCB for request1 CALL FRECED ; Try to write the CED out to disk)/ MOV (SP)+,R5 ; Restore the I/O packet addressT;)<; See if there are any more CEDs to be processed in the list; 780$: MOV (SP)+,R3 ; See if any more packets to processa! BEQ 100$ ; If EQ, there aren't. JMP 10$ ; If NE, there area;lL; All transfers are complete. Finish up the I/O passing the packet back to ; the user.R;>B100$: BICB #CS.REQ,APRD.BASE+H.CSTS; Indicate no need for Phase II. MOV R5,R3 ; Use driver packet to finish I/O2 MOV I.UCB(R3),R5 ; Set up UCB address for device4 MOV I.PRM+P3(R3),R0 ; Get driver completion status5 MOV I.PRM+P2(R3),R1 ; along with the size of read ) CALL $IOFIN ; Complete the I/O processo CALLR DCRUN .ENDC ;CHEDFR $ .SBTTL READ INTERNAL I/O COMPLETION2 .SBTTL + IOC - Cache load internal I/O completion;n ; Passed:I; R3 -> I/O packet completing; I.UCB -> UCB ;DPR026S ; I.PRM+P3, P4 := Driver status.; I.AADA -> CED of extent loaded by this I/O&; E.STAT := Extent status (ES.RIP); See also routine DECIO;M ; Returned:3$;;; N/A - control is passed to DCRUN;V ; Actions:;; This routine saves the I/O status, signals I/O completionl;; to all I/O packets waiting via the attachments list, setsB<; error disposition (and passes error code) if the operation5; did not complete successfully, and propagates cachek5; execution if necessary (any I/O packets are ready).M;,IOC:3 MOV I.UCB(R3), R5 ; Get the UCB address ;DPR026h$ CALL MAPPAR ; Map cache partition* MOV I.AADA(R3), R2 ; Get the CED address? BITB #ES.RIP, E.STAT(R2) ; Is extent mark as read-in-progress? BNE 5$ ; If NE, sanity checku BPT5$:IC MESAG$ IOCMSG,22.,,<,>,6 BICB #ES.RIP, E.STAT(R2) ; No longer read-in-progress9 MOVB I.PRM+P3(R3), R0 ; Get the driver completion statusa# TSTB R0 ; Is an error indicated?/ BPL 10$ ; If PL, no MESAG$ EMSG,23.B MOV #APR6.BASE, -(SP) ; Errors are not counted in context ;DPR024> USTAT$ S.RLE ; Read error attempting to load region ;DPR024; TST (SP)+ ; Remove statistics context from stack ;DPR024B BISB #ES.DEL, E.STAT(R2) ; Mark extent for delete during phase II710$: CALL DECIO ; Decrement I/O counts and set CS.REQ.* CALL CHEDEP ; Deallocate the I/O packet CALLR DCRUN R1 .SBTTL + DECIO - Cache completion and scheduling0;; ; Passed:r ; Cache partition mapped in APR6;; R0 := I/O status ; R2 -> CED of the extent loaded; E.ATTL -> First attachment4; A.ANXT -> Next attachment4; A.IOPA -> Cache I/O packet stalled for this CED ; I.PRM+P3 := Pending count;2 ; Returned:E; All registers preservedt; ; Actions:7; Decrement pending I/O counts in attached packets, ands3; modify disposition if an error has been returned./;a-; All attachment descriptors are deallocated. ;p@; If any pending I/O count reaches zero, then CS.REQ will be set; in the cache status.;tDECIO: MOV R1, -(SP) MOV R3, -(SP)< BICB #CS.REQ, APRD.BASE+H.CSTS ; Assume00mb"bN NO request phase II,10$: MOV E.ATTL(R2), R3 ; Get an attachment BEQ 40$ ; End of list if EQ2 MOV A.IOPA(R3), R1 ; Get the I/O packet address2 DECB I.PRM+P3(R1) ; Decrement the pending count" BNE 20$ ; If NE, still stalled6 BISB #CS.REQ, APRD.BASE+H.CSTS ; Assumption was wrong20$:# TSTB R0 ; Is an error indicated?f0 BPL 30$ ; If PL, no, don't change disposition? BIS #CD.ERR, I.PRM+P3(R1) ; Else signal that it goes to $IOFINV30$:7 MOV (R3), E.ATTL(R2) ; Unlink the entry before it goess- CALL .DEPAD ; And deallocate the PAD block - BR 10$ ; Then try to signal another packetM40$: MOV (SP)+, R3 MOV (SP)+, R1 RETURNs D .SBTTL READ PHASE IIc- .SBTTL + $DCRII - Data caching read phase IIs;l ; Passed:B ; Cache partition mapped in APR6;p; R1 -> Cache packet"; I.PRM+P3 := Status (set by IOC)+; I.PRM+P6 -> CED of first extent involvedi ; R5 -> UCBD;R ; Returned:)E;;; N/A - control is passed to either XFER or DCRUN (for next packet)n;k ; Action:b7; Should an internal I/O result in an error, the extentl7; will be marked as in error. All I/O packets attached06; to that extent at the time of I/O completion will be5; marked with a disposition of CD.ERR. These packetsa6; are passed to the phase II routines by DCRUN without6; further processing. Therefore, they must be handled; here. ;P7; Basically, this involves detaching this I/O operation5; from any extents it owns, and allowing them to passR8; to FRECED for deallocation, if possible. In addition,5; the failed request is passed directly to the driver ; for final processing.I;p$DCRII::4 BIT #CD.ERR, I.PRM+P3(R1) ; Driver error indicated?1 BEQ XFER ; If EQ, no, proceed to transfer datah+ CALL DETCED ; Detach any outstanding I/Oi* MOV I.UCB(R1),R5 ; Get UCB for this I/O.= MOV KISAR6, -(SP) ; Save APR6 because DUDRV uses it ;DPR022i6 MOV R5, -(SP) ; Save address of UCB, driver clobbers. CALL $DRQRQ ; Pass the packet to the driver MOV (SP)+, R5 ; Restore UCBi= MOV (SP)+, KISAR6 ; Restore mapping to cache region ;DPR022t. CALLR DCRUN ; Then check for another packet B .SBTTL + XFER - Transfer data;r ; Passed:e ; Cache partition mapped in APR6;t; R1 -> Cache packet+; I.PRM+P6 -> CED of first extent involvedM;I ; Returned:;6;;; N/A - control is passed to DCRUN (for next packet);a ; Action:s8; Phase II is used to perform the actual read transfers.; ; Future enhancements::; Handle the case of multiple extents mapping the request.I; If this transfer routine is found to place too much of a load on kernelL>; mode, then code to $FORK can be inserted between data moves.;a; Note:a>; Disk devices enforce word alignment, and since cache extents6; are also word aligned, data transfers are fast using5; the executive's $BLXIO routine. (A single 256 wordR7; disk block takes approximately 600us on a PDP-11/70.)t;e9; Parameter 3 of the user's I/O packet is used as the sum:; of bytes moved. ;m; The stack is used as follows:s9; 2(SP) - "Current" - Size of the "blocks" * 512 (bytes)f8; 0(SP) - "blocks" - Size in LBNs of blocks to be moved;d; The algorithm is as follows:;5; 1. Adjust the user's buffer. NPR devices will havee2; real 22-bit addresses in I.PRM+0 and I.PRM+2.1; $BLXIO expects to see an address doubleword.i;e1; 2. Initialize the count of bytes moved to zero.o; ("moved");e2; 3. Determine the amount of data available in the4; initial extent by subtracting the high LBN from6; the user's request LBN. This gives the number of2; blocks to move ("blocks"). In bytes, this is3; multipled by 512 ("current"). If "current" isl0; larger than the request (I.PRM+P2), then P2; will replace "current".;a4; 4. The buffer's starting APR address is the user's/; block number less the LBNL (starting LBN).z3; This number multiplied by 8 is used as the APR4; bias of the starting address (since all buffers5; in cache are APR aligned, the virtual address is; only 120000 or 1400ubaTADATADATADATADATADATADATADATADATA0000).;s0; 5. Setup and call $BLXIO to transfer the data.; 6; 6. Add the blocks transferred "blocks" to the user's4; starting LBN (P4/P5). Add the number of blocks3; "blocks" times 8 to the user's buffer APR biasT1; to advance it to the next receiving address. 6; Add the bytes moved "transfer" to the total bytes; moved "moved".8; 7; 7. Replace the original CED pointer in the I/O packete6; to reflect the next CED that may possibly need to9; be processed. Unlock the current CED by decrementinga'; the pending packet count (E.PCNT).;.6; 8. Subtract the amount moved "moved" from the user's6; byte count (P2). If this number reaches zero (or5; less), then the cache operation is complete. If $; not, then we go back to step 3.; XFER:A& MOV I.PRM+P6(R1),R0 ;Get CED address: BISB #ES.XIP,E.STAT(R0) ;Indicate transfer is in progress, CALL ADJBUF ;Adjust user's buffer address- MOV R1,R5 ;Reference I/O packet through R5b3 CLR I.PRM+P3(R5) ;Initialize count of bytes moved 1 MOV E.LBNH(R0),R2 ;Get LSP of extent high LBN+1r3 SUB I.PRM+P5(R5),R2 ;Subtract LSP of user requestt;o; Note: 4; We ignore the highest bits here, since this CED is4; definitely connected with this request, and we are3; allowed to borrow from the most significant bits. 2; Our result is a single precision count of blocks; which are transferrable.; ) MOV R2, R3 ; Duplicate the block countM( ASH #9., R3 ; Convert to a byte bount1 CMP I.PRM+P2(R5),R3 ;User ask to transfer less?e BHIS 20$ ;No if HIS> MOV I.PRM+P2(R5),R3 ;Else replace extent by user buffer size20$:& MOV I.PRM+P6(R5),R0 ;Get CED address. MOV R3,-(SP) ;Save the size of bytes to move4 MOV R2,-(SP) ;Save the count of blocks being moved, MOV I.PRM+P5(R5),R1 ;Get user's base block4 SUB E.LBNL(R0),R1 ;Subtract extent base for offset) ASH #3, R1 ;Make it an APR bias offset 7 ADD E.PHYA(R0),R1 ;Now R1 is APR bias of cache buffert$ MOV R0,-(SP) ;Save the CED address" MOV 4(SP),R0 ;Get the byte count. MOV #APR5.BASE,R2 ;Setup source displacement, MOV I.PRM(R5),R3 ;Get destination APR bias2 MOV I.PRM+2(R5),R4 ;Get destination displacement# CALL EBLXIO ; Transfer the data.,( MOV (SP)+,R0 ;Get back the CED address% MOV (SP)+,R1 ;Get the blocks copieda. ADD R1,I.PRM+P5(R5) ;Adjust the starting LBN& ADC I.PRM+P4(R5) ;(double precision), ASH #3, R1 ;Blocks becomes 32-word blocks* ADD R1,I.PRM(R5) ;Relocate user's buffer6 MOV E.LNXT(R0),I.PRM+P6(R5) ;Point packet to next CED+ CALL QUPAGE ;Move CED to end of age listp8 BICB #ES.XIP,E.STAT(R0) ;Transfer operation is complete2 DECB E.PCNT(R0) ;Unlock this CED for this packet/ BNE 25$ ; If NE, more pending - don't delete ? BITB #ES.DEL, E.STAT(R0) ; Is this extent marked for deletion?( BEQ 25$ ; If EQ, no - don't delete it CALL FRECED25$:5 ADD (SP),I.PRM+P3(R5) ;Add bytes teleported to totale9 SUB (SP)+,I.PRM+P2(R5) ;Subtract moved from request sizer( BHI 20$ ;Go do another extent if more;tD; Request is now complete. P3 is the total of the bytes transferredG; for this request. It must be placed in R1 (R0 will indicate success) (; and the packet is forwarded to $IOFIN.; " MOV R5,R3 ;Setup $IOFIN context1 MOV I.UCB(R3),R5 ;R5 -> Disk UCB for completione3 MOV I.PRM+P3(R3),R1 ;Set the count of bytes moved' MOV #,R0 ;Indicate success) CALL $IOFIN ;Complete the I/O+ CALLR DCRUN ; R5 already pointing to UCBq t .IF DF CHEDBG ;Debugging text* .SBTTL *** DEBUG *** Module contains dataRMSG: .ASCIZ <15><12>"READ - "&MMSG: .ASCIZ "MISSED: PARTIAL OVERLAP"HMSG: .ASCIZ "HIT"LMSG: .ASCIZ "LOAD"e,KMSG1: .ASCIZ " - REJECTED: NO POOL FOR PAD"$KMSG2: .ASCIZ " - REJECTED: TOO BIG"-KMSG3: .ASCIZ " - REJECTED: NOT ENOUGH CACHE"l=KMSG4: .ASCIZ " - REJECTED: NO POOL FOR DUPLICATE I/O PACKET"M#IOCMSG: .ASCIZ <15><12>"IOC - READ"EMSG: .ASCIZ " - ERROR"t.MBXMSG: .ASCIZ <15><12>"Multi-extent transfer"@MBX1: .ASCIZ <15><12>" - Deferred extent00}bQ~bN moved to user buffer"7DEAMSG: .ASCIZ " - Rejected: Cache being deactivated"MJDFRATT: .ASCIZ <15><12>"Deferred extent attached for Multi-block transfer" .EVEN .ENDC ; .IF DF CHEDBG .ENDC ; .IF DF D$$CHE .END - REJECTED: TOO BIG"-KMSG3: .ASCIZ " - REJECTED: NOT ENOUGH CACHE"l=KMSG4: .ASCIZ " - REJECTED: NO POOL FOR DUPLICATE I/O PACKET"M#IOCMSG: .ASCIZ <15><12>"IOC - READ"EMSG: .ASCIZ " - ERROR"t.MBXMSG: .ASCIZ <15><12>"Multi-extent transfer"@MBX1: .ASCIZ <15><12>" - Deferred extent .TITLE DCRUN - Run the cache  .IF DF D$$CHE .IDENT /01.01/;T6; Copyright (c) 1985 by DIGITAL EQUIPMENT CORPORATION.; All rights reserved.;H; Original author:; John Gemignani; ; Modified by:;R; D. P. Rabahy 06-Mar-85 01.018; Change CALLRs into straight CALLs followed by RETURNs;IO; This module contains the code which dequeues a cache packet and dispatches it &; to the appropriate phase II routine.;  .PSECT DC$RUN,RO,I  ., .SBTTL DCRUN - Start Phase II Cache Process;3 ; Passed:C ; Cache partition mapped in APR6;+; R5 -> UCB of device to run the cache for. ;I ; Returned: ;P<; This routine is used to start up a Phase II cache process.%; RETURNing to our caller will do the :; proper thing. Our caller is of no concern to us; we are>; "the system" (or hope that we are) when we reach this point.;c:; Module DCRUN is responsible for obtaining a unit of work;; from the packet queue and, depending upon the dispositionT8; bits, either start the I/O, dispatch it to the driver,; or terminate it in error.6;;; If an internal I/O has resulted in an error, then routined:; DCIOC will have set CD.ERR in P3. These packets must be:; handled differently for reads and writes. They are also*; forwarded to the driver upon completion.;e<; All function codes must be dispatched, similar to the code; which can be found in DCDSP.;l(; This code will execute a fork prior to7; entering the Phase II selection and dispatching code.s7; This is performed to allow any outstanding fork-levelt3; processes to execute prior to or between Phase IIr7; runs. If the fork list is empty, then control passes F; immediately to the dispatching code. Also, if there is insufficient4; system pool for a fork block to be allocated, then3; it will execute immediately as well. It is hopeda0; that should system pool be exhausted, that the4; completion of a cache-retained I/O packet (and its4; subsuquent deallocation) may aid in relieving this ; situtation. ;fDCRUN::a6 BITB #CS.RUN, APRD.BASE+H.CSTS ; Is phase II running? BNE FORK ; If NE, yesI< BITB #CS.REQ, APRD.BASE+H.CSTS ; Requested to run phase II? BNE 3$ ; If NE, yesc RETURN.3$:o> BISB #CS.RUN, APRD.BASE+H.CSTS ; Indicate phase II is running7FORK: MOV #<6.*2>,R1 ;Attempt to allocate a fork blockt CALL $ALOCB ;From system pool. BCS 10$ ;If CS, MAJOR PROBLEM: resume cache;- ; Context:"; R0 -> Newly allocated pool block;t+ CLR (R0) ;URM=0; any processor can do it ( ADD #14,R0 ;Advance past 6-word block1 MOV KINAR5,-(R0) ;Establish the mapping context 4 CLR -(R0) ;R4 is trash as far as we are concerned& MOV R0,R4 ;Setup for call to $FORK12 CALL $FORK1 ;Queue the fork block and hibernate;i ; Context:; R3 -> Fork block ; R5 -> UCB,; * MOV R3,R0 ;Obtain base address of block& SUB #4,R0 ;(currently at PC offset)' MOV #<6.*2>,R1 ;Setup fork block sizet& CALL $DEACB ;Free up the fork block10$:;R; Start Phase II Cache Process;o)NOFORK: CALL MAPPAR ; Map the partitiono3 MOV #APRD.BASE+H.PKTQ,R0 ; Address of packet queue410$: MOV (R0),R1 ; Get a packet - Assume I.LNK = 0 BEQ 70$ ; If EQ, end of queue+ TSTB I.PRM+P3(R1) ; Is this packet ready?b BEQ 20$ ; Yes if EQ* MOV R1,R0 ; Else try to get another one BR 10$ ; from the queue020$: MOV (R1),(R0) ; Remove this from the queue" BNE 30$ ; Not last packet if NE7 MOV R0,APRD.BASE+H.PKTQ+2 ; Else update "last" pointert30$:; ; Note:P@; Packets with a driver error indi00Qb'bbDATADATADATADATADATADATADATAcated are not terminated here.6; Instead, they are passed to the appropriate phase II"; routines for further processing.;K- MOV I.FCN(R1),R0 ;Get the I/O function code ( BIC #BYPASS,R0 ;Remove the bypass bits% CMP R0,#IO.RVB ;Read virtual block?s+ BEQ 80$ ;Yes if EQ; RVB and RLB are samee CMP R0,#IO.LOV ;Load overlay?o BEQ 80$ ;Yes if EQ; dispatch & CMP R0,#IO.WVB ;Write virtual block?, BEQ 100$ ;Yes if EQ; WVB and WLB are same' CMP R0,#IO.LDO ;Load d-space overlay?o BEQ 80$ ;Yes if EQ; dispatchr% CMP R0,#IO.RLB ;Read logical block?r BEQ 80$ ;Yes if EQ; dispatchf& CMP R0,#IO.WLB ;Write logical block? BEQ 100$ ;Yes if EQ; dispatch MESAG$ FCNERR,0 BPT ; Sanity checkD70$: BICB #CS.RUN, APRD.BASE+H.CSTS ; Indicate that we have quiesced( RETURN ; And return for exec to run(80$: CALL $DCRII ;Invoke read Phase II RETURNV*100$: CALL $DCWII ;Invoke write Phase II RETURNn L .IF DF CHEDBG* .SBTTL *** DEBUG *** Module contains data .ENABL LCFFCNERR: .ASCIZ <15><12>"DCM (CRASH) -- Phase II Dispatching Error"<15> .EVEN .ENDC ; .IF DF CHEDEF .ENDC ; .IF DF D$$CHE .ENDBEQ 100$ ;Yes if EQ; dispatch MESAG$ FCNERR,0 BPT ; Sanity checkD70$: BICB #CS.RUN, APRD.BASE+H.CSTS ; Indicate that we have quiesced( RETURN ; And return for exec to run(80$: CALL $DCRII ;Invoke read Phase II RETURNV*100$: CALL $DCWII ;Invoke write Phase II RETURNn L .IF DF CHEDBG* .SBTTL *** DEBUG *** Module contains data .TITLE DCSTAT .IF DF D$$CHE .IDENT /01.00/A;Z6; Copyright (c) 1985 by DIGITAL EQUIPMENT CORPORATION.; All rights reserved.;H; Original author:; D. P. Rabahy 06-Mar-85 01.00;C .PSECT CODE, I, ROt . .SBTTL $USTAT - Update cache statistics block;, ; Passed:H"; SP+2 -> Offset to be incremented9; SP+4 -> Operation context (i.e. address in stat. block)D ; R5 -> UCBe;a ; Returned:R; All registers preserved ;I ; Action: ;s$USTAT::' MOV KISAR6, -(SP) ; Save APR6 mappingU/ MOV U.UCBX(R5), KISAR6 ; Map the UCB extension3 BEQ 10$ ; If EQ, there isn't one, skip incrementT9 MOV APR6.BASE+X.CSBA, KISAR6 ; Map the statistics buffer $ BEQ 10$ ; If EQ, there isn't one7 MOV R0, -(SP) ; Save a register while working with ito;L; Calculate the offset to be incremented. Don't forget about the stuff just; pushed onto the stack.;k MOV 6(SP), R0 ; Get the offset% ADD 10(SP), R0 ; Add in the contexti. ADD #1, (R0)+ ; Update the appropriate field ADC (R0) ; Double words MOV (SP)+, R010$: MOV (SP)+, KISAR6 RETURN  .ENDC ; IF DF D$$CHE  .ENDntT9 MOV APR6.BASE+X.CSBA, KISAR6 ; Map the statistics buffer $ BEQ 10$ ; If EQ, there isn't one7 MOV R0, -(SP) ; Save a register while working with ito;L; Calculate the offset to be incremented. Don't forget about the stuff just; pushed onto the stack.;k MOV 6(SP), R0 ; Get the offset% ADD 10(SP), R0 ; Add in the contexti. ADD #1, (R0)+ ; Update the appropriate field ADC (R0 .TITLE DCSUB - SubroutinesR .IF DF D$$CHE .IDENT /02.02/I;M6; Copyright (c) 1986 by DIGITAL EQUIPMENT CORPORATION.;L; All rights reserved.;B; Original author:; John Gemignani;D; Modified by:;R+; D. Carroll / J. Kauffman 14-Jun-88 02.01S;; JRK345 -- Make ...LDR owner TCB for internal I/O packetsD;R+; D. Carroll / J. Kauffman 20-Mar-89 02.02S;; JRK351 -- Be sure to deallocate ML node on defer backups+;CE; This module contains various routines to support disk data caching.;I .MCALL HDRDF$ .MCALL SHDDF$& HDRDF$ ; Define the Header offsets SHDDF$6 .PSECT DC$SUB,RO,IO R8 .SBTTL SEARCH - Search for the first overlapping extent; ; Passed:a; R1 -> User's I/O packet;. ; UCBX mappeda;m ; Returned: C; R2 := LSB (Least Significant Part) of the highest requested block#; R3 := MSP (Most Significant Part)-(; R4 := Length of the transfer in blocks;e$; CC: R0 -> First overlapping extent&; CS: Indicates no overlapping extentsB; H.TMP1 -> CED pri00b~bNor to request (zero denotes beginning of list)9; H.TMP2 -> CED after request (zero denotes end of list)S;R; Cache partition mapped;aSEARCH::0 MOV APR6.BASE+X.CCED, R0 ; Get the first extent( CALL MAPPAR ; Map the cache partition1 MOVB I.PRM+P4(R1), R3 ; Get MSP of requested LBNo MOV I.PRM+P5(R1), R2 ; and LSP ) MOV R2, -(SP) ; Put a copy on the stacke MOV R3, -(SP)4 MOV I.PRM+P2(R1), R4 ; Get the request size (bytes) ADD #777, R4 ; Round upp' ROR R4 ; Bring carry in as high bit.e- SWAB R4 ; Finish right shift of nine bits.P' BIC #177400,R4 ; Clear unwanted bits.o( DEC R4 ; Backup one block temporarily1 ADD R4, 2(SP) ; Calculate highest LBN requestedx ADC (SP) ; Carry if necessary* INC R4 ; Restore to full size requested9 CLR APRD.BASE+H.TMP1 ; Assume prior is beginning of listM- TST R0 ; Is the LBN list completely empty?, BEQ 51$ ; If EQ, yes1>10$: BITB #, E.STAT(R0) ; Is this extent valid? BEQ 15$ ; If EQ, yesn; I; A deferred CED that is marked for delete can not be ignored as a normal I; one could. It must be checked to see if the user PC must be backed up.D;,- BITB #ES.WDF,E.STAT(R0) ; Is CED a deferred?C' BEQ 20$ ; If EQ, no, ignore this CED ;e5; Don't forget that the extent high LBN is stored +1. ;u15$:3 CMPB R3, E.LBNH+2(R0) ; Might this extent overlap?s) BHI 20$ ; If HI, no, check next extente BLO 30$ ; If LO, yesE- CMP R2, E.LBNH(R0) ; Double word comparisonQ BLO 30$ ; If LO, yes120$: MOV R0, APRD.BASE+H.TMP1 ; Set prior pointer & MOV E.LNXT(R0), R0 ; Get next extent BNE 10$ BR 50$e>30$: CMPB (SP), E.LBNL-1(R0) ; Does this extent truly overlap? BHI 40$ ; If HI, yesB BLO 50$ ; If LO, no/ CMP 2(SP), E.LBNL(R0) ; Double word comparisont BLO 50$ ; If LO, no$40$: CLC ; Indicate overlap found BR 60$x50$:251$: MOV R0, APRD.BASE+H.TMP2 ; Set after pointer SEC ; Indicate no overlap,60$: MOV (SP)+, R3 MOV (SP)+, R2 RETURN  I .SBTTL Attachment RoutinesR .SBTTL + ATTCED - Attach a CED ;M ; Passed:0; R0 -> CED to attacht; R1 -> I/O packet to attach; ; Returned:1; All registers preservedl;v5; This routine will attach a CED to an I/O packet foro; I/O completion.L;)ATTCED:: MOV R0, -(SP) MOV R2, -(SP), MOV R0, R2 ; CREATT returns R0 -> new PAD0 CALL CREATT ; Create an attachment descriptor* BCS 10$ ;No pool if CS; return an error) MOV R1,A.IOPA(R0) ; Point to I/O packet22 MOV E.ATTL(R2),(R0) ; Link to start of ATTL list" MOV R0,E.ATTL(R2) ; Now attached) INCB I.PRM+P3(R1) ; Indicate attachment/+ INCB E.PCNT(R2) ; Lock CED down once moree10$: MOV (SP)+,R2v MOV (SP)+,R0e RETURNh C6 .SBTTL + DETCED - Detach extents involved with an I/O; ; Passed:S; R1 -> I/O packet; P6 -> First extent involved; ; Returned:; All registers preserveda;c ; Action:i=; A "lock" is simply an increment of an extent pending count.O;R@; This routine removes the lock placed by phase-I on all extentsE; involved in the I/O request by, naturally, decrementing the pending ; count.;c@; The highest LBN involved is calculated by adding the requestedB; size to the starting LBN. It is then compared to low LBN of the-; next extent to determine if it is involved. ;-A; If any extent pending count reaches zero a check is made and ifl>; the extent was marked for deletion by DCIOC (I/O completion)>; because a driver error was detected then it will be deleted.;t; Note:l/; A request size of zero could crash this code. ; F; If phase-I determines to cache a request through the cache partitionF; it must guarantee that if multiple extents are involved they will be; contiguous to one another.;dDETCED::$ MOV R0, -(SP) ; Get work registers MOV R2, -(SP) MOV R3, -(SP);t$; Calculate the highest LBN involved; 5 MOV I.PRM+P2(R1),R3 ; Get the request size in bytesC BPL 10$ ; If PL, sanity check BPT10$: ADD #777, R3 ; Round upb. ASH #-9., R3 ; Convert it into a blo00bbbDATADATADATADATADATADATADATAck count1 DEC R3 ; It's easier then decrementing the LBNe5 ADD I.PRM+P5(R1), R3 ; Add in LSP of request to sizes/ MOV I.PRM+P4(R1), R2 ; Get MSP of user request  ADC R2 ; Carry into MSP- MOV I.PRM+P6(R1), R0 ; Get first CED addresse/20$: DECB E.PCNT(R0) ; Decrement pending countt1 BGT 30$ ; If GT, more pending - leave it aloneP BEQ 25$ ; If EQ, sanity check BPT25$:3 BITB #ES.DEL, E.STAT(R0) ; Should this be deleted?#/ BEQ 30$ ; If EQ, no - advance to next extent " CALL FRECED ; Delete the extent& ; If CS, extent busy - no problem<30$: MOV E.LNXT(R0), R0 ; Get address of next extent by LBN2 BEQ 40$ ; If EQ, end of LBN list - must be done1 CMPB R2, E.LBNL-1(R0) ; Is this extent involved?E BHI 20$ ; If HI, yes.- BLO 40$ ; If LO, no - end of attached list - CMP R3, E.LBNL(R0) ; Double word comparison2 BHIS 20$ ; If HIS, yes,40$: MOV (SP)+, R3 ; Restore work registers MOV (SP)+, R2 MOV (SP)+, R0 RETURNa n .SBTTL Mapping Routines/ .SBTTL + MAP - Map I[/D] space unconditionallye;bA; MAPPAR- Establish cache partition mapping, based upon executivee>; features. This will map the non-I/D exec to the partition=; via APR6, and for I/D systems, both APR5 and APR6 will be$9; used. Mapping context is not saved, and this routinel>; should only be used for code executing from the FORK list.; MAPPAR::' .IFDF K$$DAS ; Kernel I/D executive?r .IFTF ; K$$DASP MOV R0,-(SP) ; Save a register7 MOV U.UCBX(R5),KISAR6 ; Map UCB extension through APR6p3 MOV APR6.BASE+X.CPCB,R0 ; Get address of cache PCBa- MOV P.REL(R0),KISAR6 ; Map partition in APR6t .IFT ; K$$DAS+ MOV KISAR6,KISAR5 ; I/D systems allow 8KWP* ADD #200,KISAR6 ; Always map accordingly .IFTF ; K$$DAS  MOV (SP)+,R0 ; Restore statust RETURN ; Back to caller  .ENDC ; K$$DASe i0 .SBTTL + MAPUCB - Map the UCB extension in APR6; ; MAPUCB - Map the UCB extension;$ ; Passed:V; R5 -> UCB of requestor ; Returned:B(; CS: If no UCBX is present for this UCB&; CC: Mapping is established and valid;s8; NOTE: If there is no UCBX then APR6 references will be0; able to touch the vectors (and any part of the-; executive living within the same zip code).s;pMAPUCB::/ MOV U.UCBX(R5),KISAR6 ;Map UCB's UCBX in APR 6e& BEQ 10$ ;None if EQ; must return CS& TST (PC)+ ;Clear C-bit and skip SEC&10$: SEC ;Else BR to 10$ will set C RETURN ;And back to caller * .SBTTL Buffer address conversion routines= .SBTTL + ADJBUF - Convert NPR buffer addresses to doubleword ;e ; ADJBUF - Adjust buffer address;t ; Passed:U; R1 -> I/O packet to adjust ; R5 -> UCB ;c ; Returned: ; Nil.;r9; This routine will replace the 22-bit buffer address forp6; UC.NPR devices with an address doubleword for use by"; the $BLXIO (block move) routine.;rADJBUF::' BITB #UC.NPR,U.CTL(R5) ;Is device NPR?S+ BEQ 10$ ;No if EQ; leave address "as is";& MOV R2,-(SP) ;Get two work registers MOV R3,-(SP) ;2 MOV I.PRM+P1.1(R1),R2 ;Get the MSB of the address2 MOV I.PRM+P1.2(R1),R3 ;Get the LSB of the address .IFNDF M$$EXT ;18-bit systemk( ASH #4,R2 ;Shift <21:20> into <17:16> .IFF ;M$$EXT& SWAB R2 ;Shift <31:24> into <23:16> .ENDC ; M$$EXT6 BIC #^C<77>,I.PRM+P1.2(R1) ;Remove all but low 6 bits8 BIS #APR6.BASE,I.PRM+P1.2(R1) ;Create APR6 displacement" ROL R3 ;Shift out <15> from LSB ROL R2 ;And pick up in MSB " ROL R3 ;Shift out <14> from LSB ROL R2 ;And pick up in MSB;( SWAB R3 ;Shift <13:6> into low 8 bits$ SWAB R2 ;Shift <21:14> into place' BISB R3,R2 ;Set <13:6> into APR biasE' MOV R2,I.PRM+P1.1(R1) ;Create APR bias ' MOV (SP)+,R3 ;Restore saved registersA MOV (SP)+,R2 ;10$: RETURN ; All set X .SBTTL INTERNAL I/O SUPPORT' .SBTTL + CHEDUP - Duplicate I/O packet6;S:; CHEDUP - Allocate new packet and duplicate passed packet;t2; This routine is used to duplicate the I/O packet6; passed in R1. All fields are copied, and the result8; is returned in R0. If the packe00b~bNt cannot be allocated,; CS will be returned.;eCHEDUP:: MOV R1,-(SP)6 MOV R2,-(SP)E7 MOV #I.LGTH,R1 ; Allocate an I/O packet from primary  CALL $ALOCB ; pool space BCS 20$ ; Error if CS. MOV 2(SP),R1 ; Get original packet's address1 MOV #,R2 ; Packet size in words in R2D* MOV R0,-(SP) ; Save new packet's address010$: MOV (R1)+,(R0)+ ; Copy the packet's fields4 SOB R2, 10$ ; into the new packet, until all done" MOV (SP)+,R0 ; Restore registers20$: MOV (SP)+,R2n MOV (SP)+,R1, RETURNl e$ .SBTTL + CHEDEP - Delete I/O packet;; CHEDEP - Delete packet;H=; This routine deletes the I/O packet whose address is in R3. ;; No status is returned, and if the packet is bogus, BUGCHKt&; will give an unfortunate indication.;>CHEDEP:: MOV R0,-(SP) ; Save registers, MOV R1,-(SP)e MOV R2,-(SP)e/ MOV R3,R0 ; Load packet's address for $DEPKTs CALL $DEPKT ; Dispose of it% MOV (SP)+,R2 ; And reload registersR MOV (SP)+,R1s MOV (SP)+,R0P RETURNM ( .SBTTL BUFFER MANAGEMENTB/ .SBTTL + GETBUF - Allocate a buffer from cacheD;t ; Passed:H; R1 -> User's I/O packete*; R4 := length required in 512-byte blocks; R5 -> UCB of request devicea;t ; Returned:G; CC: R0 -> Available CEDu; CS: No CED available;P<; Attempts to allocate space can be provided through various ; algorithms.R;0,; The first algorithm attempts to reuse free<; space as quickly as possible, by searching the extent list:; for "holes" of unused bufferspace. (Note that all holes<; will be block increments.) If a search of the extent list;; fails to find any free space, then the oldest item in thee:; extent age list will be deallocated. Another attempt to=; allocate space will be tried. A failure at this point willD#; cause the request to be bypassed.e;aGETBUF::. CALL GETFRE ;Attempt to allocate free space BCC 10$ ;Space found, use ite, MOV APRD.BASE+H.CEDH,R0 ;Get oldest in list BEQ 20$ ; If EQ, end-of-listl% CALL FRECED ;Deallocate the extentl, BCS 20$ ; If CS, extent is currently busy; ; Update H.TMP1 & H.TMP2;o5 CMP R0, APRD.BASE+H.TMP1 ; Freed CED before by LBN?x$ BNE 4$ ; If NE, no; don't update! MOV E.LPRV(R0), APRD.BASE+H.TMP1w# BR 5$ ; No need to check H.TMP2t4$:D4 CMP R0, APRD.BASE+H.TMP2 ; Freed CED after by LBN?$ BNE 5$ ; If NE, no; don't update! MOV E.LNXT(R0), APRD.BASE+H.TMP2u5$:e1 CALL GETFRE ;Another attempt to get free spaceB BCS 20$ ;Still no space if CS10$:. TST (PC)+ ;Return CC to indicate free space20$:, SEC ;Return CS to indicate no free space RETURN 2 .SBTTL + GETFRE - Allocate free space in CED list; ; Passed:;; R1 -> User's I/O packetM(; R4 := Number of 256-word blocks needed; R5 -> UCB of request device$; ; Returned:.0; CS indicates either no buffer space available,0; or that a CED to describe that space cannot; be allocated; CC:E.; R0 -> New CED to be completed, with space; allocated.;a;R2,R3 insignificant;R4,R5 preserved;i"; To obtain the address and length8; of any free space (between allocations), the following; algorithm is used:;sA; size = ADDRESSOF(ced[n+1]) - ADDRESSOF(ced[n]) - SIZEOF(ced[n]):;u+; base = ADDRESSOF(ced[n]) + SIZEOF(ced[n])f;q=; Special handling is required for the first and last CEDs in ;; the list. The first one is treated as the [n+1] element,a;; with the base of the data buffer portion of the partitionm;; being the address of the [n] element (SIZEOF(n) is zero).;,:; The last element is treated as the [n] element, with the:; address of the end being the base of the data portion of+; the partition plus the size of same area.);A5; This routine will scan the CED list for free space.S3; Free space is the unallocated portion between thei5; allocated extents. The entire list must be checked ; in order to find it.;sGETFRE:]+ MOV R1,-(SP) ;Save the I/O packet addressr. MOV APRD.BASE+H.CMDH,R0 ;Address of first CED10$:; Assume E.BNXT = 0 for source/ M00bbbDATADATADATADATADATADATADATAOV (R0), R1 ;Address of next physical extente$ BEQ 30$ ;End of extent list if EQ CLR R2 ; Prepare to get byte.= BISB E.SIZE(R0),R2 ; Get size of extent in 512-byte blocks.i# ASH #3,R2 ; Convert to APR bias.a: ADD E.PHYA(R0),R2 ;Add base for possible free space addr2 MOV E.PHYA(R1),R3 ;Get the address of the "next". SUB R2,R3 ;Subtract free address for length+ BNE 20$ ;Free space available - check itV.15$: MOV R1,R0 ;Else advance in the CED list BR 10$ ;And look for space20$:6 ASH #-3,R3 ; Convert to 512-byte blocks to compare.- CMP R3,R4 ; Is this free space big enough?o+ BLO 15$ ;Too small if LO; keep searchingf;t ; Context:; ; R0 -> Low CED of free spacet; R1 -> High CED of free space&; R2 := Physical address of free space; R3 := Length of free space&; R4 := Length of requested free space; R5 -> UCB of disk device;h; The following must be done:b;-'; 1. A CED allocated for the new extentn1; 2. The new CED linked into the physical address3; list, positioned between the R0-> and R1-> CED >; 3. The new CED placed at the end of the age list (BY CALLER)2; 4. The new CED inserted at the appropriate point ; in the LBN list (BY CALLER);t MOV R0,R3 ;Free up R0 for use CALL CRECED ;Create a CED now. BCS 40$ ; If CS, none are available for use* MOV R2,E.PHYA(R0) ;Establish our address( MOVB R4,E.SIZE(R0) ;Establish our size#; Assume E.BNXT = 0 for destinationn$ MOV R0, (R3) ;Point previous to us) MOV R3,E.BPRV(R0) ;Point us to previouso% MOV R0,E.BPRV(R1) ;Point next to us.#; Assume E.BNXT = 0 for destination MOV R1, (R0) ;Point us to next7 MOV R5,E.UCB(R0) ;Plug in owning device's UCB addresst# TST (PC)+ ;Return CC for success 30$:$ SEC ;Indicate no space available40$: MOV (SP)+,R1 ;Restore saved R1 RETURN M7 .SBTTL + FRECED - Unlink and deallocate a cache extent(; ; Alternate entry:; FREBUF - Deallocate a buffer;o ; Passed:,; R0 -> CED to be deallocatedM; R5 -> UCB Address of devicep;i ; Returned:,; CC: CED is deleted&; CS: CED is marked for deletion later;o; All registers preserveds; 6; Prior to deallocation, the CED must be removed from:;r; 1. The age list; 2. The LBN list; 3. The address list;tF; NOTE: If the extent is "busy" or "locked down" it will be marked for!; deletion during I/O completion.e;oFRECED::0 BITB #EXBUSY, E.STAT(R0) ;Extent in transition?- BNE 100$ ; If NE, yes, don't deallocate ito .IFDF CHEDFR6 BITB #ES.WDF,E.STAT(R0) ; Is deferred write supported BEQ 50$ ; If EQ, no: BITB #ES.ERR,E.STAT(R0) ; Is there an error with this CED BEQ 20$ ; If EQ, no BPT ; Yes, can't allow this:320$: CALL $ELDFR ; Write out this deferred extent 1 BCS 110$ ; If space failure, don't mark deleter" BR 100$ ; Mark for delete later .ENDC ;CHEDFR450$: TSTB E.PCNT(R0) ; Pending requests for extent? BNE 100$ ; If NE, yes- MESAG$ CEDKIL,33.,,<>* CALL QRMAGE ; Remove from the age queue* CALL QRMLBN ; Remove from the LBN queue' BR FREBUF ; Proceed to deallocate ith100$:e- MESAG$ CEDDFR,34.,,<>T3 BISB #ES.DEL, E.STAT(R0) ; Mark for deletion lateri" SEC ; Indicates extent is busy110$:  RETURNf;uO; This alternate entry should only be called if the CED was never inserted into0; the age and LBN lists.; FREBUF:: MOV R1, -(SP)+ MOV E.BPRV(R0), R1 ;Point to previous CEDG3; Assume E.BNXT = 0 for both source and destinationr3 MOV (R0), (R1) ;Point previous around to our nextN; Assume E.BNXT = 0 for source! MOV (R0), R1 ;Point to next CEDE= MOV E.BPRV(R0),E.BPRV(R1) ;Point next around to our previous0 CALL DELCED ; Delete the CEDC MOV (SP)+, R1 CLC ; Indicates successf RETURNh .PAGE% .SBTTL WRITE DEFERRED I/O OPERATIONS 5 .SBTTL + $ELDFR - Write data in deferred CED to disk;A; $ELDFR - Routine to write out specified deferred extent to disk ;G ; Inputs:E*; R0 - CED with data to be written to disk00b~bN; R5 - UCB address of device ; Outputs::; CC - I/O packet queued to driver to write data in extent0; CS - No primary pool for I/O packet allocation; .IFDF CHEDFRo$ELDFR::' MOV R0,-(SP) ; Save R0 across routineV' MOV R1,-(SP) ; Save R1 across routine' MOV R2,-(SP) ; Save R2 across routineI' MOV R3,-(SP) ; Save R3 across routined' MOV R4,-(SP) ; Save R4 across routineR' MOV R5,-(SP) ; Save R5 across routined1 MOV E.UCB(R0),R5 ; Get new UCB address from CEDa0 CALL $CRDFR ; Allocate and fill in I/O packet& BCS 50$ ; If CS, allocation failureA MOV KINAR5,I.IOSB+2(R1) ; Set up internal I/O completion addresse MOV #DFRIOC!1,I.IOSB+4(R1) ;o7 BISB #ES.WIP,E.STAT(R0) ; Indicate a write-in-progressV9 INCB E.PCNT(R0) ; Tie down extent to prevent going away C MESAG$ DFRMSG,35.,,<,>( .IF DF CHESAN/ CALL .CKSAN ; See if sanity block is correctn .ENDC ;CHESAN. MOV R5,-(SP) ; Save R5 across call for DUDRV0 CALL $DRQRQ ; Initiate the I/O for the extent MOV (SP)+,R5 ; Restore R5e( CALL MAPPAR ; Map the cache partition CLC ; Indicate success,50$: MOV (SP)+,R5 ; Restore the UCB address$ MOV (SP)+,R4 ; Restore original R4$ MOV (SP)+,R3 ; Restore original R3$ MOV (SP)+,R2 ; Restore original R2$ MOV (SP)+,R1 ; Restore original R1$ MOV (SP)+,R0 ; Restore CED address RETURNC> .SBTTL + $CRDFR - Create internal I/O packet for deferred CED;VF; $CRKPT - Routine to allocate/fill deferred write internal I/O packet;/ ; Inputs:x'; R0 - CED with data to written to disk ; R5 - UCB address of device i ; Outputs:; CC:a3; R1 - I/O packet allocated and partially filledd; CS:M&; Allocation failure for I/O packet;P$CRDFR::& MOV R0,-(SP) ; Save the CED address ' MOV #I.LGTH,R1 ; Get size to allocateo$ CALL $ALOCB ; Allocate I/O packet& BCS 50$ ; If CS, allocation failure;-K; First clear the packet and then fill in necessary data for call to drivera;f( MOV R0,-(SP) ; Save I/O packet address(10$: CLRB (R0)+ ; Clear out the packet SOB R1,10$ ;5/ MOV (SP)+,R1 ; Restore packet address into R1 4 MOV $LDRPT,R0 ; Take priority of ...LDR for packet BISB T.PRI(R0),I.PRI(R1) ;o5 MOV R0,I.TCB(R1) ; Also make it the owning task TCBE1 MOV R5,I.UCB(R1) ; Put in UCB address of deviceo< MOV #IO.WLB,I.FCN(R1) ; Make this a logical write operation( MOV (SP),R0 ; Restore the CED address3 MOV R0,I.AADA(R1) ; Keep pointer to CED in packeta9 MOV E.LBNL(R0),I.PRM+P5(R1) ; Get LSP of LBN to write to)0 BISB E.LBNL-1(R0),I.PRM+P4(R1) ; Get MSP of LBN5 MOVB E.SIZE(R0),R2 ; Get size of transfer in blocksP$ ASH #9.,R2 ; Turn that into bytes6 MOV R2,I.PRM+P2(R1) ; Put byte value into I/O packet) MOV R1,R4 ; Save address of I/O packet,+ MOV #APR6.BASE,R2 ; Get APR6 displacementM5 MOV E.PHYA(R0),R1 ; Get APR bias of start of bufferi6 CALL $MPPHY ; Map to physical address if NPR device/ MOV R1,I.PRM+P1.1(R4) ; Move MSP to I/O packetM/ MOV R2,I.PRM+P1.2(R4) ; Move LSP to I/O packeti, MOV R4,R1 ; Restore pointer to I/O packet CLC ; Indicate success(50$: MOV (SP)+,R0 ; Restore CED address RETURN = .SBTTL + DFRIOC - I/O completion routine for deferred extent ; K; DFRIOC - Routine to complete processing after a deferred extent has been e; written to diskM;M ; Inputs:0; R3 - I/O packet addressr;fDFRIOC:. MOV I.UCB(R3),R5 ; Get UCB address of device+ MOV I.AADA(R3),R0 ; Point to affected CEDI; MOVB I.PRM+P3(R3),-(SP) ; Get the error status from driver) TSTB (SP)+ ; See if there was an errort BPL 10$ ; If PL, no error6 BISB #ES.ERR,E.STAT(R0) ; Set the error status in CEDG10$: MESAG$ DFRCOM,29.,,<,>F& CALL CHEDEP ; Delete the I/O packet+ CALL MAPPAR ; Map to the cache partitions: BICB #ES.WIP,E.STAT(R0) ; Clear the write-in-progress bit= BICB #ES.WDF,E.STAT(R0) ; Indicate extent no longer deferred34 DECB E.PCNT(R0) ; Untie the extent for elimination00bbbDATADATADATADATADATADATADATA6 CALL FRECED ; Delete the CED if not tied down still RETURNw+ .SBTTL + BACKUP I/O PC FOR DEFERRED WRITES ;.I; $BCKUP - Routine to undo the system operations involved in the creationGB; of an I/O packet on the way to the driver and backup the user PC; ; Inputs:k0; R1 - I/O packet to be backed up and eliminated;B ; Outputs:; R5 - UCB address of device;r$BCKUP::- MESAG$ IOBCKP,36.,,<> 3 MOV I.UCB(R1),R5 ; Get the associated UCB addressf .IF DF S$$HDW( MOV R1,R3 ; Get pointer to I/O packet4 CALL $SHFND ; Find the ML node for packet, if any) BCS 10$ ; If CS, none to be eliminatedt2 CALL $DLNK ; Get rid of ML node for this packet;(; Deallocate the ML node for this packet;n, MOV R1,-(SP) ; Save the I/O packet address' MOV R4,R0 ; Copy the ML node address6 MOVB ML.LEN(R0),R1 ; Get size (ML.LGH) to deallocate' CALL $DEACB ; Deallocate the ML nodeH/ MOV (SP)+,R1 ; Restore the I/O packet addresse .ENDC-10$: MOV R1,R3 ; Restore I/O packet addresst4 MOV I.TCB(R1),R0 ; Get TCB address of issuing task* DECB T.IOC(R0) ; Decrement the I/O count9 BIC #T2.WFR,T.ST2(R0) ; Clear WFR state if EFN specifiedi. CMP R0,$TKTCB ; Is issuing task still mapped% BNE 20$ ; If NE, no, go out to HDR/4 SUB #2,$UMPC ; Back up the user PC on Kernel stack2 MFPI SP ; Must also back up user SP to get back3 SUB #2,(SP) ; the pointer to the DPB or first M MTPI SP ; value if $S formc5 CALL $TKWSE ; Make current task wait for sig eventO BR 40$ ; Continue420$: MOV T.PCB(R0),R2 ; Get task region pcb address .IF DF X$$HDR5 MOV P.HDR(R2),-(SP) ; Get virtual address of headera# BNE 30$ ; If NE, resident header / MOV P.REL(R2),KISAR6 ; Map to external header 2 MOV #140000,(SP) ; Set virtual address of header230$: MOV (SP)+,R2 ; Get virtual address of header .IFF ; DF X$$HDR* MOV P.HDR(R2),R2 ; Get address of header .ENDC ; DF X$$HDR1 SUB #2,(R2) ; Point back to DPB or first valuek1 MOV H.GARD(R2),R2 ; Point to the HDR Guard wordM& SUB #2,-16(R2) ; Back up the user PC- CALL $SETCR ; Reschedule task to try again),40$: TSTB I.EFN(R3) ; Virtual I/O function? BPL 60$ ; If PL no * BICB #200,I.EFN(R3) ; Clear virtual flag0 BIT #1,I.LN2(R3) ; Header locked down for acp? BNE 50$ ; If NE, no7 MOV I.TCB(R3),R0 ; I/O packet is connected to the TCBD4 MOV T.ATT(R0),R0 ; The TCB is connected to the ADB SUB #A.TCBL,R0 ; Find the foot" CALL $DECIO ; Unlock the header50$: ; Reference label- CALL $DCWIO ; Decrement window I/O if any,c ; unlock block locks.:60$: MOVB I.EFN(R3),R0 ; Get EFN number specified, if any7 MOV I.TCB(R3),R5 ; Get TCB address for EFN conversion23 CALL $CEFI ; Set the bit and clear group globals 7; CALL $ELGBL ; Unlock the group globals if necessaryM I* CALL $DECAL ; Deallocate all I/O counts* CALL CHEDEP ; Deallocate the I/O packet RETURNt .ENDC ;CHEDFR R) .SBTTL STRUCTURE ALLOCATION/DEALLOCATION # .SBTTL + CRECED - Create CED blockl;C ; Passed: ; Nothingt;n ; Returned:y; R0 -> Newly allocated CED.;0CRECED: MOV R1,-(SP)' MOV #E.LGTH,R1 ; Set size to allocateT1 CALL .ALOCB ; Call internal allocation routineC MOV (SP)+,R1  RETURNn# .SBTTL + DELCED - Delete CED block ;n ; Passed:o!; R0 -> The CED to be deallocated ;C ; Returned:c; All registers preservedH;PDELCED: MOV R1,-(SP)) MOV #E.LGTH,R1 ; Set size to deallocateB3 CALL .DEACB ; Call internal deallocation routineC MOV (SP)+,R1l RETURN a> .SBTTL + CREATT - Create a packet attachment descriptor (PAD); ; Passed: ; Nothing); ; Returns:; R0 -> Newly allocated PAD;LCREATT::MOV R1,-(SP)( MOV #A.LGTH,R1 ;Set length to allocate! CALL .ALOCB ;Request the spacet MOV (SP)+,R1 RETURNo3 .SBTTL + .DEPAD - Deallocate attachment descriptor;l ; Passed:8; R3 -> PAD to deallocate (must already be disconnected);t ; Returned:; All registers preservedl;n.DEPAD:: MOV R0, -(SP)00b~bN MOV R1, -(SP) MOV R3, R02 MOV #A.LGTH, R1 ;Length of attachment descriptor! CALL .DEACB ;Release the blocko MOV (SP)+, R1 MOV (SP)+, R0 RETURNa " .SBTTL MEMORY ALLOCATION ROUTINES* .SBTTL + .ALOCB - Internal hook to $ALOCB;A ; Passed:u; R1 := Requested size;+ ; Returned:o4; R1 := Size rounded up according to blocking factor); If CC then successfully allocated blockt; R0 -> Newly allocated block ; If CS then no memory available;r<; This routine will allocate memory from the cache partition=; using the system memory allocation routine $ALOCB in CORAL.C@; Entry point $ALOC1 is called with the internal header address.;R.ALOCB: MOV R2,-(SP); MOV #APRD.BASE+H.PAVL,R0 ; R0 -> Internal pool list headerA/ CALL $ALOC1 ; Attempt to allocate the memory MOV (SP)+,R21 RETURNr* .SBTTL + .DEACB - Internal hook to $DEACB;h ; Passed:u; R0 -> Block to be deallocatedw; R1 := Length of blockC;h ; Returned:a; All registers preservede;l=; This routine will deallocate memory in the cache partition,m?; or into system pool depending upon the address. This enablesi<; the cacher to allocate space from primary pool in cases of); extreme emergency (not currently used). ;e.DEACB: MOV R0,-(SP) MOV R2,-(SP) MOV R3,-(SP)l0 CMP R0,#APR5.BASE ; System pool or cache pool? BLO 10$ ; System pool if LO; MOV #APRD.BASE+H.PAVL,R3 ; R3 -> Internal pool list header11 CALL $DEAC1 ; Attempt to deallocate the memoryt BR 20$ ; Go to common exiti10$:- CALL $DEACB ; Deallocate it to system pool 20$: MOV (SP)+,R3e MOV (SP)+,R2e MOV (SP)+,R0  RETURN! .SBTTL EBLXIO -- BLXIO Extensionr;r?; This routine performs the same operation as $BLXIO, except iteC; extends the amount that may be transferred from under 4K bytes toR<; 65535 bytes. Forks are performed between calls to $BLXIO.; ;; Input:;B&; R0 number of bytes to be transferred!; R1 starting APR bias for sourcet=; R2 starting offset for source (must be less than 100 octal)&; R3 starting APR bias for destinationB; R4 starting offset for destination (must be less than 100 octal)9; On a multiprocessor system, we have the executive lock.e;r;m ; Output:o;a; R0-R4 alteredx; R5 preserved; 5 .IFDF M$$PRO ; Is multiprocessor support required?t-FRKSIZ = 14 ; Yes, fork block is six words.  .IFFo-FRKSIZ = 12 ; No, fork block is five words.b .ENDC* .IFDF K$$DAS ; Are we using data space?4REGSIZ = 4 ; The cache region APRs take two words. .IFF03REGSIZ = 2 ; The cache region APR takes one word.4 .ENDCEBLXIO::5 .IFDF M$$PRO ; Is multiprocessor support required?l7 ULOCK$ $EXECL,WAIT ; Yes, release the executive lock. .ENDC MOV R5,-(SP) ; Save register.e$ CLR R5 ; Flag no block allocated.- MOV R0,-(SP) ; Save count of bytes to move.,6 MOV #MAXTR,R0 ; Get maximum size of single transfer.2 SUB R0,(SP) ; Subtract bytes to be transferred., BCC 210$ ; There are enough; do transfer.6 ADD (SP),R0 ; The maximum is too much, adjust size.& CLR (SP) ; Zero bytes will be left.210$:C CALL $BLXIO ; Transfer data.m TST (SP) ; Are we done? BEQ 255$ ; Yes, leave.;/ MOV KISAR6,-(SP) ; Save APR for cache region.,* .IFDF K$$DAS ; Are we using data space?6 MOV KISAR5,-(SP) ; Save second APR for cache region. .ENDC MOV R4,-(SP) ; Save register.u MOV R3,-(SP) ; Save register.R MOV R2,-(SP) ; Save register.r MOV R1,-(SP) ; Save register.r< MOV #$STACK-22+FRKSIZ,R1 ; Get location where we want SP to% ; be, plus space for fork block.t. SUB SP,R1 ; Figure size of block needed for( ; for fork block plus everything on( ; the stack below the task context.5 .IFDF M$$PRO ; Is multiprocessor support required?r5 LOCK$ $EXECL,WAIT ; Yes, obtain the executive lock.d .ENDC* CALL $ALOCB ; Get space for fork block.% BCC 215$ ; There is space; use it.i5 .IFDF M$$PRO ; Is multiprocessor support required? 7 ULOCK$ $EXECL,WAIT ; Yes, release the executive lock.i .ENDC" MOV (SP)+,R1 ; Res00bbbDATADATADATADATADATADATADATAtore register." MOV (SP)+,R2 ; Restore register." MOV (SP)+,R3 ; Restore register." MOV (SP)+,R4 ; Restore register.* .IFDF K$$DAS ; Are we using data space?1 CMP (SP)+,(SP)+ ; We don't need the saved APRs.d .IFFC+ TST (SP)+ ; We don't need the saved APR.o .ENDC% BR 240$ ; Go do the next transfer.r215$:. MOV R0,R4 ; Copy pointer.(217$: ; Copy stack to fork block and% ; adjust R4 for input to $QFORK.L2 MOV (SP)+,(R4)+ ; Copy stack word to fork block.* CMP SP,#$STACK-22 ; Is stack copied yet? BNE 217$ ; No, keep going.V5 .IFDF M$$PRO ; Is multiprocessor support required?e+ CLR (R4)+ ; We can run on any processor.t .ENDC7 MOV #237$,2(R4) ; Record PC to be restored by system.F4 MOV R4,4(R4) ; Record R5 to be restored by system.4 MOV R0,6(R4) ; Record R4 to be restored by system.: MOV KINAR5,10(R4) ; Record APR to be restored by system. BR 230$ ; Go do fork.-220$: ; Come back after another transfer.s$ TST R5 ; Do we have a fork block?* BEQ 240$ ; No, go do the next transfer.- MOV 6(R5),R0 ; Point to beginning of block.r! MOV R1,(R0)+ ; Record register.4! MOV R2,(R0)+ ; Record register.t! MOV R3,(R0)+ ; Record register.d! MOV R4,(R0)+ ; Record register.V8 MOV (SP)+,REGSIZ(R0) ; Record remaining length (it goes$ ; above the saved APR or APRs).) MOV R5,R4 ; Pass fork block to $QFORK. 5 .IFDF M$$PRO ; Is multiprocessor support required?$5 LOCK$ $EXECL,WAIT ; Yes, obtain the executive lock.  .ENDC230$:r) CLR (R4) ; We'll be last in the queue.t JMP $QFORK ; Fork. /237$: ; This label is where the system will; ; return to.5 .IFDF M$$PRO ; Is multiprocessor support required?c7 ULOCK$ $EXECL,WAIT ; Yes, release the executive lock.( .ENDC* MOV R4,R0 ; Switch to another register." MOV (R0)+,R1 ; Restore register." MOV (R0)+,R2 ; Restore register." MOV (R0)+,R3 ; Restore register." MOV (R0)+,R4 ; Restore register.* .IFDF K$$DAS ; Are we using data space?. MOV (R0)+,KISAR5 ; Restore cache region APR. .ENDC. MOV (R0)+,KISAR6 ; Restore cache region APR.- MOV (R0)+,-(SP) ; Restore length remaining.r 240$: ; Do another transfer.6 MOV #MAXTR,R0 ; Get maximum size of single transfer.0 SUB R0,R4 ; Decrease pointer by maximum size.0 ADD #MAXTRB,R3 ; Increase APR by maximum size.0 SUB R0,R2 ; Decrease pointer by maximum size.0 ADD #MAXTRB,R1 ; Increase APR by maximum size.2 SUB R0,(SP) ; Subtract bytes to be transferred., BCC 250$ ; There are enough; do transfer.6 ADD (SP),R0 ; The maximum is too much, adjust size.& CLR (SP) ; Zero bytes will be left.250$:  CALL $BLXIO ; Transfer data.  TST (SP) ; Are we done?/ BNE 220$ ; No, do another fork and transfer.255$:42 TST (SP)+ ; Get count (now zero) off the stack.5 .IFDF M$$PRO ; Is multiprocessor support required?c5 LOCK$ $EXECL,WAIT ; Yes, obtain the executive lock.e .ENDC) TST R5 ; Did we allocate a fork block? $ BEQ 290$ ; No, skip deallocation.3 MOV 6(R5),R0 ; Get beginning of block for $DEACB.e MOV R5,R4 ; Copy pointer.) ADD #12,R5 ; Point after end of block..2 SUB R0,R5 ; Compute length of block for $DEACB. MOV R5,R1 ; Copy length. ; SUB #12+REGSIZ+FRKSIZ,R5 ; Subtract size of fork block and " ; values not needed on stack. ASR R5 ; Convert to words.r5 .IFDF M$$PRO ; Is multiprocessor support required?o) TST -(R4) ; Move past Unibus run mask.  .ENDC260$:c3 MOV -(R4),-(SP) ; Copy saved value back to stack.o% SOB R5,260$ ; Continue until done.l CALL $DEACB ; Release space.p290$:." MOV (SP)+,R5 ; Restore register. RETURNS .PAGE .IFDF CHEDBGt* .SBTTL *** DEBUG *** Module contains data;DFRMSG: .ASCIZ <15><12>" - Deferred extent written to disk"cEIOBCKP: .ASCIZ <15><12>" - I/O Operation reissued via user PC backup"s<CEDKIL: .ASCIZ <15><12>" - CED eliminated from Cache Region"3CEDDFR: .ASCIZ <15><12>" - CED marked for deletion"$=DFRCOM: .ASCIZ <15><12>"Deferred extent I/O write completion"R .ENDC ;DF CHEDBGn .ENDC00bbN ; D$$CHEL .ENDB ; Release space.p290$:." MOV (SP)+,R5 ; Restore register. RETURNS .PAGE .IFDF CHEDBGt* .SBTTL *** DEBUG *** Module contains data;DFRMSG: .ASCIZ <15><12>" - Deferred extent written to disk"cEIOBCKP: .ASCIZ <15><12>" - I/O Operation reissued via user PC backup"s<CEDKIL: .ASCIZ <15><12>" - CED eliminated from Cache Region"3CEDDFR: .ASCIZ <15><12>" - CED marked for deletion"$=DFRCOM: .ASCIZ <15><12>"Deferred extent I/O write completion"R .ENDC ;DF CHEDBGn .ENDC .TITLE DCWOP - Write operations .IF DF D$$CHE .IDENT /02.00/;M6; Copyright (c) 1988 by Digital Equipment Corporation.; All rights reserved.;;; Modified by:;N; J. Kauffman 10-DEC-87 02.00?; JRK338 -- Add support for write loads for deferred requestsE;;M; J; This module contains the code to process cache write operations. An I/O'; proceeds through the following steps:t; ; 1) Phase-IB; A) The cache partition is searched for all overlapping extents.>; B) These involved extents are "locked down" (i.e. E.PCNT is;; incremented) so that they will not be deleted until thea; operation is completed.l?; C) The I/O packet is duplicated with one being queued to the-&; driver and the other to the cache.A; D) If either primary pool and cache private secondary pool arei9; lacking then all involved extents are deleted and ther; I/O queued to the driver.eC; 2) Depending on a number of factors either phase-II or driver I/O ; completion will run next.; 2.1) Phase-IIn@; A) DCRUN dequeues the cache packet passing it to this module.B; B) If an error is already indicated for the driver I/O then the; cache update is skipped.4; C) The cache partition is updated from user task.; 2.2) Driver I/O completion'; A) Output debugging info to console.a; 3) Finish I/O <; A) If an error is indicated then all involved extents are ; deleted.&; B) The extra packet is deallocated./; C) $IOFIN is called using the driver packet.l;- .MCALL F11DF$( F11DF$ ; Define window block offsets .PSECT DC$WOP, RO, I  s .SBTTL WRITE PHASE-Ir" .SBTTL + $DCW1 - Write operations; ; Passed:e ; UCBX mappeda;i; R1 -> I/O packet*; I.EFN := Indicates if I/O is virtual%; I.TCB -> TCB of requesting tasku0; T.ST3 := T3.ACP indicates I/O is from an ACP'; I.PRM+P2 := Size of request in bytes ; R5 -> UCBn;a ; Returned:e2;;; N/A - Control passed to either DCRUN or $DRQRQ;N ; Action:u9; If a search of the cache results in failure to identify;4; the first matching extent, then the request can go; directly to the driver.-;B; Otherwise all extents involved will be acted upon no matter what9; behaviour attributes have been selected for the device.v;uG; If exactly one extent maps the request then it will be "locked down", D; the driver invoked and phase-II requested. Otherwise all involved1; extents will be deleted and the driver invoked. ;h; Possible enhancements:C; Serialize asynchronous I/O by checking if the extent is currentlyH; being loaded (i.e. ES.RIP set in E.STAT) and attaching it to cause the5; write request to stall pending the load completion.t;u7; It may be possible to improve performance by handlingc0; the case where multiple extents map a request.;sB; Eventually a write-deferred ability for temporary files could be ; considered.u;eB; Allocate duplicate I/O packet from cache private secondary pool.;v; Notes:9; I/O operations which specify the bypass bits must still 7; update the cache, for the benefit of other non-bypass.;; readers. Keep in mind that IQ.UMD (user-mode diagnostic) ;; requests use parameter 6 to specify the diagnostic bufferb9; address. Therefore, the cache can only use parameter 3w; if it really has to.; $DCW1::;L; Determine the operation and initialize the statistics context accordingly.;u* TSTB I.EFN(R1) ; Is this really virtual? BMI 20$ ; If MI, yeso- MOV I.TCB(R1), R2 ; Get the requestor's TCBt; BNE 5$ ; If NE, got it; BPT ; Sanity checkh00bbbDATADATADATADATADATADATADATA;5$:& BIT #T3.ACP, T.ST3(R2) ; From an ACP? BEQ 10$ ; If EQ, no; MOV #APR6.BASE+S.DIR, -(SP) ; Count as directory operationh BR COMMON=10$: MOV #APR6.BASE+S.LOG, -(SP) ; Count as logical operation BR COMMON20$:9 MOV #APR6.BASE+S.DAT, -(SP) ; Count as virtual operationn ; BR COMMONsCOMMON:  MESAG$ WMSG,5( USTAT$ S.WTOT ; Increment write total;iN; The return address is now adjusted so as to prevent an in-line "return" fromK; continuing to the driver. See the routine $DRQRQ in the executive module ; [11,10]DRSUB.a;C: MOV #$QOPDN, 2(SP) ; Don't forget about context on stack0 CALL SEARCH ; Locate first overlapping extent BCC 10$ ; If CC, found oneu; J; This section checks to see if the I/O request is virtual and it is for aO; temporary file. If so, we know it would be deferred if space were available.IE; We create a CED for the size of the request to guarantee the defer. ;v5 CALL MAPUCB ; Map the UCB extension for the devicer S .IFDF CHEDFR$> BITB #X2.DEA,APR6.BASE+X.CST2; Are defers in process of flush% BNE 5$ ; If NE, yes, must continuen? BITB #XC.DFR,APR6.BASE+X.CSTS; Does this device support defers1- BEQ 5$ ; If EQ, no, send request to driverc .IFTF ;CHEDFR$ TSTB I.EFN(R1) ; Virtual function? BPL 5$ ; If PL, no, skip load .IFT ;CHEDFRe= BIT #WS.MDL,$DCSTS ; Is the I/O request from temporary file BEQ 5$ ; If EQ, no, skip load .ENDC ;CHEDFR; O; At this point we know the request would be deferred. Try to allocate a cache61; buffer and initialize it for the later transfer5; 6; R4 -> Size of request in blocks (gotten from SEARCH);S. CALL MAPPAR ; Map the cache partition again# CALL GETBUF ; Get a cache buffer" BCS 5$ ; If CS, none, skip load1 CLR E.ATTL(R0) ; Initialize the attachment list6 CLR E.PCNT(R0) ; Initialize pending count and status .IF DF CHESAN. CLR E.MBXC(R0) ; Initialize the sanity block .ENDC ;CHESAN;t=; Initialize size of new CED from parameters in the I/O Blockt; 5 MOVB I.PRM+P4(R1),R3 ; Get MSP of the requested LBNe3 MOVB R3,E.LBNL-1(R0) ; Setup the extent LBN (MSP)m$ MOV I.PRM+P5(R1),E.LBNL(R0) ; (LSP)9 MOV I.PRM+P5(R1),E.LBNH(R0) ; Setup the high LBN as well9 ADD R4,E.LBNH(R0) ; Add the length to obtain high blockI$ ADC R3 ; Including the carry-over1 MOVB R3,E.LBNH+2(R0) ; Setup the high LBN (MSP);F?; Now insert the initialized CED into the device and age queues.;C1 CALL QADAGE ; Insert the CED into the age lista+ CALL QINLBN ; and into the unit LBN listR;RJ; Update the statistics block to indicate another write load has occurred.C; Also, send message to indicate load occurrence for debugging code,;B USTAT$ S.WLOD+ MESAG$ LMSG,17.,,<> / BR 37$ ; Join common code that will fill thed$ ; CED with the deferred data; L; Since the data can't be loaded for some reason, simply send the I/O packet; to the driver.;5$: MESAG$ MMSG,6;3 TST (SP)+ ; Remove statistics context from stacka .IF DF CHESAN CALL .CKUCB .ENDC ;CHESAN3 CALLR $DRQRQ ; Give the I/O packet to the driver10$: .IFDF CHEDFR 6 CALL MAPUCB ; See if the cache is being deactivated BITB #X2.DEA,APR6.BASE+X.CST2; # BEQ 12$ ; If EQ, no, continue ono1 MESAG$ DEAMSG,37. ; Indicate deactivation errorh0 JMP CLRUP ; Force I/O to come back when clear112$: CALL MAPPAR ; Map the cache partition back  .ENDC ;CHEDFR? MESAG$ HMSG,7,,<,> ;c ; Context:; Cache partition mapped;. ; R0 -> First overlapping extentC; R2 := Least Significant Part (LSP) of the highest requested blockA#; R3 := Most Significant Part (MSP)a#; R4 := Length of request in blocksS; 7 BIT #777, I.PRM+P2(R1) ; Is a partial block indicated?3 BEQ 15$ ; If EQ, no/ TST (SP)+ ; Remove excess context from stackh, CALL DELETE ; Delete all involved extents .IFDF CHEDFR0 BCS BACKUP ; If CS, at least one CED deferred .ENDC ;CHEDFR3 CALLR $DRQRQ ; 00bbNGive the I/O packet to the driverd15$:;-; Notes:5; Don't forget that the extent high LBN is stored +1.o;h= CMPB R3, E.LBNH+2(R0) ; Might this extent fully map request?a BLO 20$ ; If LO, yess BHI REJECT ; If HI, no,- CMP R2, E.LBNH(R0) ; Double word comparison BHIS REJECT ; If HIS, noT20$:; CMPB I.PRM+P4(R1), E.LBNL-1(R0) ; Does this truely map it?t BHI 30$ ; If HI, yes BLO REJECT ; If LO, no6 CMP I.PRM+P5(R1), E.LBNL(R0) ; Double word comparison BLO REJECT ; If LO, no30$: .IFDF CHEDFRd; BITB #ES.WIP,E.STAT(R0) ; Is this extent being written outg* BNE CLRUP ; If NE, yes, back up user PC .ENDC ;CHEDFR37$:2 MOV R0, R4 ; Put CED address in a save register. CALL CHEDUP ; Create a duplicate I/O packet% BCS POOL2 ; If CS, not enough pool;; ; Context:; R0 -> Duplicated I/O packet1;)*; Prepare I/O packet for queueing to cache;HC MOV #CD.WIP, I.PRM+P3(R0) ; Initialize attachment count and statuso;e;; Serialize I/O to protect against asynchronous cache loadsE;d9; BITB #ES.RIP, E.STAT(R4) ; Is this extent being loaded? ; BEQ 35$ ; If EQ, noE;eM; If an extent is being loaded then DCIOC will request phase-II. It would bea; a waste to request it now.;C9; BICB #CS.REQ, APRD.BASE+H.CSTS ; Don't request phase-IIu;p; MOV R0, -(SP)x; MOV R1, -(SP)c'; MOV R0, R1 ; Load ATTCED parameterst ; MOV R4, R08; CALL ATTCED ; Attach to the extent - outstanding I/O; MOV (SP)+, R1s; MOV (SP)+, R0i&; BCS POOL1 ; If CS, not enough pool; BR 40$;E;35$: 0 INCB E.PCNT(R4) ; Otherwise just lock it down2 BISB #CS.REQ, APRD.BASE+H.CSTS ; Request phase-II;40$:n;oM; Save the address of the first CED so phase-II doesn't have to search again.o; MOV R4, I.PRM+P6.1(R0)B0 MOV R1, I.PRM+P6.2(R0) ; Point to driver packet;(I; All adjustments to the driver I/O packet must be restore before calling ; $IOFIN.A;E; MOV R0, I.AADA(R1) ; Point driver packet to correspondings ; cache packet A MOV KINAR5, I.IOSB+2(R1) ; Load APR bias and address of internal.> MOV #IOC!1, I.IOSB+4(R1) ; I/O completion routine, note bit-02 MOV R0, -(SP) ; Preserve address of cache packet; MOV KISAR6, -(SP) ; Save mapping to cache region ;DPR026a;oM; If this request is recognized as coming from a temporary file, the write totM; the disk is deferred and the cache packet is set up to indicate to phase II ?; to ignore the setup from the supposedly completed disk I/O. o;s .IFDF CHEDFR;5 TSTB I.EFN(R1) ; See if this is a virtual operation ( BPL 45$ ; If PL, no, skip defer check, CALL MAPUCB ; Map the UCBX for the deviceA BITB #XC.DFR,APR6.BASE+X.CSTS; Is deferred write support allowed-# BEQ 45$ ; If EQ, no, skip checks 9 BIT #WS.MDL,$DCSTS ; Is this request from a "temp" filea% BEQ 45$ ; If EQ, no, write to diski= MOV #APR6.BASE,-(SP) ; Get base context for statistics blocke* USTAT$ S.WDFR ; Update statistics block- TST (SP)+ ; Release excess statistics infoB MESAG$ IODFR,38.,,<,>? BIC #CD.WIP,I.PRM+P3(R0) ; Force DONE to not wait for disk I/Oh? BIS #CD.DFR,I.PRM+P3(R0) ; Indicate to Phase II to ignore diskr- MOV (SP),KISAR6 ; Remap the Cache partition9 BISB #ES.WDF,E.STAT(R4) ; Indicate this CED now deferreda .IF DF CHESAN3 CALL .CRSAN ; Create a sanity block if necessarya .ENDC ;CHESAN BR 50$ ; Skip write to disk45$: .IF DF CHESAN CALL .CKIOP .ENDC ;CHESAN .ENDC ;CHEDFR6 MOV R5, -(SP) ; Save address of UCB, driver clobbers CALL $DRQRQ ; Issue disk I/OM MOV (SP)+, R5 ; Restore UCBt50$: MOV (SP)+,KISAR6D4 MOV (SP)+, R1 ; Note restore to different register& USTAT$ S.WHIT ; Increment write hit3 TST (SP)+ ; Remove statistics context from stackD6 MOV #APRD.BASE+H.PKTQ, R0 ; Get cache packet listhead# CALL $QINSP ; Insert by priorityN CALLR DCRUN; L; Backup the User PC to handle conditions where the I/O cannot be issued due7; to deferred extents being written to disk ahead of it 00bbbDATADATADATADATADATADATADATA;, .IFDF CHEDFRsCLRUP:* TST (SP)+ ; Pop extra context off stackBACKUP: 0 CALLR $BCKUP ; Back up the user PC and return .ENDC ;CHEDFR;r+; Handle low pool and rejection conditions.w;e .ENABL LSBPREJECT: MESAG$ RMSG,10.c2 USTAT$ S.WLAP ; Increment partial overlap count BR 20$p;POOL1: MESAG$ PMSG1B; MOV #APR6.BASE, (SP) ; Errors are not counted in context ;DPR0246; USTAT$ S.PSP ; Increment lacking private sec. pool; ; MOV R3, -(SP) ; Save MSPt&; MOV R0, R3 ; Load CHEDEP parameter ; CALL CHEDEPT; MOV (SP)+, R3 ; Restore MSP;s; BR 10$POOL2: MESAG$ PMSG2,9.A MOV #APR6.BASE, (SP) ; Errors are not counted in context ;DPR024o8 USTAT$ S.POL ; Increment lacking primary pool ;DPR024'10$: MOV R4, R0 ; Restore CED addresst20$:/ TST (SP)+ ; Remove excess context from stack, CALL DELETE ; Delete all involved extents .IFDF CHEDFR00 BCS BACKUP ; If CS, at least one CED deferred .ENDC ;CHEDFR .IF DF CHESAN CALL .CKUCB .ENDC ;CHESAN3 CALLR $DRQRQ ; Give the I/O packet to the driverM .DSABL LSB$ / .SBTTL + DELETE - Deletes all involved extentsr;s ; Passed:u; Cache partition mapped;T&; R0 -> CED of first overlaping extent-; R2 := High LBN Least significant part (LSP) ,; R3 := High LBN Most significant part (MSP); R5 := UCB address;L ; Returned:D; All registers preserved-; CC - All extents were able to be eliminatede:; CS - At least one of the extents could not be eliminated;LDELETE:' CLR -(SP) ; Initialize status returne'10$: CALL FRECED ; Delete this extent .IFDF CHEDFR ) BCC 20$ ; IF CC, extent was eliminated; BITB #ES.WDF,E.STAT(R0) ; See if failure due to deferrmento3 BEQ 20$ ; If EQ, no, don't worry about this casep) ROL (SP) ; Roll CS into (SP) for latern20$: .ENDC ;CHEDFR1 MOV E.LNXT(R0), R0 ; Get the next extent by LBNr BEQ 30$ ; If EQ, end of liste> CMPB R3, E.LBNL-1(R0) ; Does this extent overlap the request? BHI 10$ ; If HI, yes BLO 30$ ; If LO, no- CMP R2, E.LBNL(R0) ; Double word comparison  BHIS 10$ ; If HIS, yesF*30$: ROR (SP)+ ; Get stored carry status RETURNT E .SBTTL WRITE PHASE-II, .SBTTL + $DCWII - Phase-II Write Processing; ; Passed:o; Cache partition mapped;P; R1 -> Cache packet&; I.PRM+P1 := Source buffer address; I.PRM+P2 := Byte countn8; I.PRM+P3 -> Internal cache status and pending count;; I.PRM+P5 := Requested LBN least significant part (LSP)-; I.PRM+P6.1 -> CED of first extent involvedo; I.PRM+P6.2 -> Driver packet ; R5 -> UCBo; ; Returned: #;;; N/A - control is passed to DONEt;o ; Action:tA; If a driver error is indicated then call DONE to finish the I/Oe'; otherwise update the cache partition.a; ; Future enhancement: ; Handle multiple extentsM; $DCWII:: MESAG$ W2MSG,11. 7 BIT #CD.ERR, I.PRM+P3(R1) ; Is driver error indicated?  BEQ 5$ ; If EQ, not MESAG$ EMSG,13. BR 10$d5$:l;t%; Prepare input parameters to $BLXIO: ; R0 := Byte count (I.PRM+P2)o; R1 := Source APR5 bias ; R2 := Source APR5 displacement; R3 := Destination APR6 biase.; R4 := Destination APR6 displacement (140000);i+ MOV R1, -(SP) ; Save cache packet address  MOV I.PRM+P2(R1), R0e5 CALL ADJBUF ; Converts to doubleword if device NPRl9 MOV I.PRM+P1.2(R1), R2 ; Load R1 later to avoid conflictR SUB #20000, R2I> MOV I.PRM+P6.1(R1), R4 ; Get address of first extent involved;L; The destination APR bias is the extent bias offset by the number of blocks:; between the requested LBN and the low LBN of the extent.;p0 MOV I.PRM+P5(R1), R3 ; Get LSP of requested LBN5 SUB E.LBNL(R4), R3 ; Safe to assume carry availableS) ASH #3, R3 ; Convert to 32-word blocksP ADD E.PHYA(R4), R3L MOV I.PRM+P1.1(R1), R1u MOV #APR6.BASE, R4# CALL EBLXIO ; Transfer the data.e. MOV (SP)+, R1 ; Restore cache packet address10$:> MOV I.PRM+P6.1(R1), R0 ; Get address of first involved extent# DECB E.PCNT(R0) ; "Unlock" extentf! MOV R1, R3 ; Parame00bbNter to DONEe CALL DONE RETURNn h .SBTTL WRITE I/O COMPLETION/ .SBTTL + IOC - Internal I/O completion routine;B ; Passed:,; R3 -> Driver packeta!; I.UCB -> UCB ;DPR026v ; I.PRM+P3, P4 := Driver status; I.AADA -> Cache packet;R ; Returned:P#;;; N/A - control is passed to DONEe;h ; Action:6; Output console messages for debugging purposes only.;IIOC:, TSTB I.PRM+P3(R3) ; Is an error indicated? BPL 10$ ; If PL, no MESAG$ EMSG,13.10$:3 MOV I.UCB(R3), R5 ; Get the UCB address ;DPR026h2 MOV I.AADA(R3), R3 ; Get address of cache packet+ MESAG$ IMSG,12.,,<> CALL DONE RETURN  U' .SBTTL + DONE - Common completion code,; ; Passed:t; R3 -> Cache packet; I.PRM+P2 := Byte countd&; I.PRM+P3 := Internal cache status:; I.PRM+P4 := Requested LBN most significant part (MSP);; I.PRM+P5 := Requested LBN least significant part (LSP)n-; I.PRM+P6.1 -> CED of first involved extentG; I.PRM+P6.2 -> Driver packet,; I.PRM+P3, P4 := Driver completion status ; R5 -> UCBt;d ; Return:h6;;; N/A - If both are done control is passed to $IOFIN+;;; otherwise completed fork level routine-;m ; Action:iD; If both the driver and the cache are completed then deallocate the4; cache packet from primary pool and finish the I/O.;PA; If an error is indicated then all involved extents are deleted.R;e; Future enhancement:a; Handle multiple extents.;><DONE: BIT #CD.WIP, I.PRM+P3(R3) ; Are both updates complete? BNE 10$ ; If NE, no6 MOV I.PRM+P6.2(R3), R4 ; Get address of driver packet .IFDF CHEDFR 4 BIT #CD.DFR,I.PRM+P3(R3) ; Is this a deferred write BEQ 3$ ; If EQ, no;K; This is a deferred write which has just completed. Since no disk I/O hastK; occurred, no status has been returned and must be faked back to the user.s;d; MOV #IS.SUC&377,R0 ; Fake success status back to user I/Oe: MOV I.PRM+P2(R3),R1 ; Put in number of transferred bytes# BR 7$ ; Skip disk I/O processingc3$:t .ENDC ;CHEDFR2 TSTB I.PRM+P3(R4) ; Is a driver error indicated? BPL 5$ ; If PL, noF;E&; Prepare input parameters for DELETE:; Map cache partitionB;3$; R0 -> CED of first extent involved1; R2 := Highest LBN, least significant part (LSP) 1; R3 := " " , most " " (MSP)n;u CALL MAPPAR> MOV I.PRM+P6.1(R3), R0 ; Get address of first involved extent; ; Calculate highest LBNP;35 MOV R3, R1 ; Put cache packet address in save reg.S4 MOV I.PRM+P2(R3), R2 ; Get the request size (bytes) ADD #777, R2 ; Round up , ASH #-9., R2 ; Convert to number of blocks DEC R2 7 ADD I.PRM+P5(R3), R2 ; Calculate highest LBN requested 1 MOVB I.PRM+P4(R3), R3 ; Get MSP of requested LBN  ADC R3 ; Carry if necessary CALL DELETE, MOV R1, R3 ; Restore cache packet address5$:A4 MOV I.PRM+P3(R4), R0 ; Get driver completion status MOV I.PRM+P4(R4), R1 ;c; Restore driver packetM;R7$:  MOV I.IOSB+2(R3), I.IOSB+2(R4)a MOV I.IOSB+4(R3), I.IOSB+4(R4)  MOV I.AADA(R3), I.AADA(R4)4 CALL CHEDEP ; Deallocate packet from primary pool/ MOV R4, R3 ; Use driver packet to finish I/O CALL $IOFIN RETURN 10$:5 BIC #CD.WIP, I.PRM+P3(R3) ; Indicate one is complete  RETURN  a .IFDF CHEDBG ; Debugging aid* .SBTTL *** DEBUG *** Module contains dataWMSG: .ASCIZ <15><12>"WRITE - "eMMSG: .ASCIZ "MISS"tHMSG: .ASCIZ "HIT"LMSG: .ASCIZ "LOAD"r>PMSG1: .ASCIZ " - REJECTED: NOT ENOUGH PRIVATE SECONDARY POOL"4PMSG2: .ASCIZ " - REJECTED: NOT ENOUGH PRIMARY POOL"5RMSG: .ASCIZ " - REJECTED: OVERLAPS MULTIPLE EXTENTS"m?DEAMSG: .ASCIZ <15><12>" - Rejected: cache being deactivated"LGIODFR: .ASCIZ <15><12>" - I/O disk operation deferred; cache updated"m(W2MSG: .ASCIZ <15><12>"PHASE II - WRITE""IMSG: .ASCIZ <15><12>"WRITE - IOC"EMSG: .ASCIZ " - ERROR"A .EVEN .ENDC ; .IFDF CHEDBG  .ENDC ; .IFDF D$$CHEC .END"LMSG: .ASCIZ "LOAD"r>PMSG1: .ASCIZ " - REJECTED: NOT ENOUGH PRIVATE SECONDARY POOL"4PMSG2: .ASCIZ " - REJECTED: 00MbbbDATADATADATADATADATADATADATA .TITLE DDDRV  .IDENT /03.02/T; B; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;O;; M. B. GROSSMAN 10/15/78L; ; P. J. CARR ; J. GALLANT;C; MODIFIED BY: 15-AUG-86 3.02 E; E6; G. MARIGOWDA GM001 -- CONVERT TO USE EXEC VECTORING; ;R; TU58 TAPE CARTRIDGE DRIVER;T?; THIS DRIVER INTERFACES WITH THE TU58 VIA A DL11 AT 9600 BAUD.N@; COMMANDS, DATA AND DEVICE STATUS ARE FORMATTED INTO STRUCTURED=; PACKETS OF BYTES IN ACCORDANCE WITH RADIAL SERIAL PROTOCOL.S;R; MACRO LIBRARY CALLSA;M# .MCALL HWDDF$,PKTDF$,QIOSY$,SCBDF$D QIOSY$  SCBDF$ ,,SYSDEF$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;C; EQUATED SYMBOLS5;GRTRY= 2 ;RETRY COUNT/DDNUM= 6 ;NUMBER OF REGISTERS TO LOG ON ERROR;%; TU58 RADIAL SERIAL PROTOCOL SYMBOLS ;S; INSTRUCTION SETW; READ= 2 ;READ INSTRUCTIONAWRITE= 3 ;WRITE INSTRUCTIONC2POSIT= 5 ;POISITION INSTRUCTION -USER MODE DIAG.1DIAG= 7 ;DIAGONOSE INSTRUCTION -USER MODE DIAG.2TYPU58= 12 ;OPCODE TO CHECK FOR OLD OR NEW TU58;I; FLAGSF;DATA= 1 ;DATA FLAGCNTL= 2 ;CONTROL FLAGAINIT= 4 ;INITIALIZE FLAGCONT= 20 ;CONTINUE FLAGEND= 2 ;END FLAG;; DL11 INTERFACE OFFSET SYMBOLS=; +DDRCS= 0 ;RECEIVE CONTROL STATUS REGISTER #DDRBF= 2 ;RECEIVE BUFFER REGISTER/DDXCS= 4 ;TRANSMITTER CONTROL STATUS REGISTERU'DDXBF= 6 ;TRANSMITTER BUFFER REGISTERO;=; DL11 BIT ASSIGNMENTS; RDONE= 200 ;RECEIVER DONED%RIE= 100 ;RECEIVER INTERRUPT ENABLE"ERR= 100000 ;RECEIVER DATA ERRORTRDY= 200 ;TRANSMITTER READY(TIE= 100 ;TRANSMITTER INTERRUPT ENABLEBRK= 1 ;TRANSMIT BREAK; ; LOCAL BIT ASSIGNMENTS;A0FLCTL = 10 ;FLOW CONTROL BIT IN SWITCH BYTE OF ;COMMAND PACKET (BIT 3)ENTU58 = 1 ;NEW TU58 MICROCODED"CHKDON = 2 ;TU58 TYPE CHECK DONE&TU58C = 10 ;TU58 IS SENDING CONTINUE-TRNACK = 20 ;TRANSMITTING THE ACK CHARACTERE; ; LOCAL DATA;S;WORD1: .BLKW T$$U58 ;STORAGE FOR LAST THREE WORDS THAT AREV+WORD2: .BLKW T$$U58 ;TO GO IN ERROR PACKET WORD3: .BLKW T$$U58 ;;A; MAKE GTPKT$ A LOCAL MACROR; ( .MACRO GTPKT$ DEV,NCTRLR,ADDR,UCBSV,SUC CALL @GTPKT .IF B G BCC 65535$L RETURN 65535$:N .IFFT BCS ADDRB .ENDC .IF B  $$$=0 .IF B .IF EQ $$$  MOV R5,S.OWN(R4)= .ENDC .ENDC .IFFO .IF GT NCTRLR-1 MOV R5,UCBSV(R3)T .IFFR MOV R5,UCBSVA .ENDC .ENDC .ENDM;$; EXECUTIVE ENTRY POINT VECTOR TABLE; /EXEVEC: .WORD 0 ;FLAG FOR VECTOR NOT YET FILLEDL ALOCB: .WORD $ALOCB BLKCK: .WORD $BLKCK DEACB: .WORD $DEACB DTOER: .WORD $DTOER DVERR: .WORD $DVERR ERRSQ: .WORD $ERRSQ FORK: .WORD $FORK. GTBYT: .WORD $GTBYT GTPKT: .WORD $GTPKT IODON: .WORD $IODON PTBYT: .WORD $PTBYT VOLVD: .WORD $VOLVD ; KISR6: .WORD KISAR6 ; EXEVCL=<<<.-EXEVEC>/2>-1> ;;DRIVER DISPATCH TABLE;C1 DDT$ DD,T$$U58,,,,NEW ;2 INT. ENTRY PTS.;; PROGRAM SEQUENCE CONTROL;E7; PROGRAM FLOW IS CONTROLLED BY A POINTER TO A TABLE OFT9; ADDRESSES. THIS SEQUENCE CREATES AND DECODES THE RADIALA4; SERIAL PACKET INFORMATION. THE ACTUAL USER DATA IS9; TRANSFERRED WITHIN THE INTERRUPT SERVICE ROUTINE (ISR). 7; THIS METHOD PERMITS US TO WAIT FOR INTERRUPTS WITHOUT;; HAVING TO PRESERVE ANY PROCESSOR REGISTERS (INCLUDING THE 7; STACK). REPETITIVE SECTIONS OF CODE CAN BE EXECUTED AT9; NUMBER OF TIMES WITHOUT LOOP COUNTERS. THIS METHOD ALSO 7; DECREASES PROGRAM SIZE BY ALLOWING US TO USE BRANCHESW; RATHER THAN JSR'S.;E9; THE POINTER (LOCATION RADD) IS INCREMENTED VIA THE CODEC9; IN RTBK (RETURN BACK). RTBK THEN SHIFTS CONTROL TO THE S=; ADDRESS POINTED TO BY RADD. RTBK IS CALLED BY RMSG/SMSG OR (:; THE INTERRUPT SERVICE ROUTINE WHENEVER THE DL11 IS READY2; TO PERFORM THE NEXT NON-DATA TRANSFER OPERATION.;LA; THE MODIFIED RADIAL SERIAL PROTOCOL ALGORITHM IS THE FOLLOWING:T; =; ISSUE A CO00MbbNMMAND TO THE TU58 WITH THE OPCODE 12 AND THE FLOWRA; CONTROL BIT SET. RECEIVE THE FIRST BYTE OF THE TU58'S RESPONSE.SB; IF IT'S A '1', IT IS AN OLD TU58. THE '1' IS THE FLAG FOR A DATAD; PACKET. IF THE RESPONSE IS A '2', IT IS A NEW TU58. THE '2' IS THEB; FLAG FOR AN END PACKET. FLUSH THE REST OF THE TU58'S RESPONSE BYC; SENDING THE TU58 AN INIT COMMAND. THE MEMORY LOCATION FLGTYP WILL B; HAVE BIT 0 SET FOR THE NEW TU58 AND BIT 0 WILL BE CLEARED FOR AN ; OLD TU58. ;TC; THE COMMAND PACKET THAT AUTOCONFIGURES THE TU58 LOOKS AS FOLLOWS:A;T; BYTE BYTE CONTENTS ; ---- ---------------T; 0 FLAG - 2E; 1 BYTE COUNT 12 ; 2 OPCODE 12; 3 MODIFIER 0A ; 4 UNIT #4; 5 SWITCHES 10 (FLOW CONTROL BIT SET - BIT 3); 6 SEQUENCE # 0A; 7 SEQUENCE # 0 ; 8 BYTE COUNT 0; 9 BYTE COUNT 0N; 10 BLOCK # 0L; 11 BLOCK # 0 ; 12 CHECK SUM-LOWE; 13 CHECK SUM-HIGH;B;L; CTAB- COMMAND PACKET SEQUENCE ; ;; CONE IS THE ADDRESS RETURNED TO WHEN THE DL11 IS READY TOA:; SEND THE FIRST BYTE OF THE 14. BYTE COMMAND PACKET. CTWO<; IS THE ADDRESS RETURNED TO WHEN READY FOR THE SECOND BYTE,=; ETC. CFIF IS EXECUTED AFTER ALL BYTES IN THE COMMAND PACKET ; ARE SENT. ; ;CTAB: .WORD CHALF,CONE,CTWO,CTHR,CFOUA,CFOUB,CFIV,CSIX,CSEV. .WORD CEIG,CNIN,CTEN,CELE,CTWE,CTHI,CFOR,CFIF;0; ITAB- INITIALIZATION SEQUENCE ; NITAB: .WORD IONE,ITWOA,ITWOB,ITWOC,ITWOD,ITWOE,ITHR,IFOU,IFIV,ISIX ;INIT. SEQ.;Q; TTAB- TRANSMIT DATA SEQUENCE;E/TTAB: .WORD TONE,TTWO,TTHR,TFOU,TFOUA,TFIV,TSIXF;T; RTAB- RECEIVE DATA SEQUENCEA;TFRTAB: .WORD RONE,RTWO,RTHR,RFOU ;INCOMING (READ) DATA PACKET ADDRESSES;."; ETAB- END PACKET DECODE SEQUENCE;E?ETAB: .WORD EONE,ETWO,ETHR,EFOU,EFIV,ESIX,ESEV ;READ END PACKETT/ .WORD EEIG,ENIN,ETEN,EELE,ETWE,ETHI ;FROM TU58C;,"; TYPTAB - DETERMINE TYPE OF TU58 ;N>TYPTAB: .WORD CONE,CTWO,TYPTHR,CFOUB,CFIV,TYPSIX,TYPSEV,TYPSEV3 .WORD TYPSEV,TYPSEV,TYPSEV,TYPSEV,CTHI,CFOR,TYPFIFB> .WORD TYPSXT,TYPSXT,TYPSXT,TYPSXT,TYPSXT,TYPSXT,TYPSXT,TYPSXT0 .WORD TYPSXT,TYPSXT,TYPSXT,TYPSXT,TYPSXT,TYPSVT;T>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);E"RDAT: .BLKW T$$U58 ;RECEIVED DATA+RADD: .BLKW T$$U58 ;RETURN ADDRESS POINTER,(DBUF: .BLKW T$$U58 ;DL11 BUFFER ADDRESS/CKSM1: .BLKW T$$U58 ;CHECKSUM STORAGE-1ST WORDY" ;ALSO TEMPORARY DRIVER STORAGE/CKSM2: .BLKW T$$U58 ;CHECKSUM STORAGE-2ND WORDT" ;ALSO TEMPORARY DRIVER STORAGE(FLAG: .BLKW T$$U58 ;LOW BYTE-BYTE COUNT ;HIGH BYTE-SEND/REC. FLAG,-WCNT: .BLKW T$$U58 ;BYTES LEFT TO BE WRITTENX! ;ALSO USED FOR RETURN ADDRESSO ;DURING IOPKT SUBROUTINE- ;ALSO USED FOR INITIALIZATION RETRY COUNT8)FLGTYP: .BLKW T$$U58 ;BIT 0 - 0 OLD TU58R ; 1 NEW TU58, ;BIT 1 - 0 NOT COMPLETED TU58 TYPE CHECK" ; 1 COMPLETED TU58 TYPE CHECK( ;BIT 3 - 0 TU58 NOT SENDING CONTINUE' ; - 1 TU58 IS SENDING CONTINUEE, ;BIT 4 - 0 NOT TRANSMITTING THE ACK CHAR( ; - 1 TRANSMITTING THE ACK CHAR;+); **-DDINI- TU58 TAPE CARTRIDGE INITIATORU; >; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN ANB; I/O REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION<; TO PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED@; CONTROLLER IS NOT BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE?; NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER IS EXECUTED. IFN@; THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPERATION8; IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.; ; INPUT:; ;; R5 = ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATEDI;N ; OUTPUT:T;Q<; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST:; IS WAITING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED5; AND THE DRIVER INITIATES THE REQUESTED I/O FUNCTION ;- .ENABL LSBE1DDINI: GTPKT$ DD ;GET NEXT I/O PACKET TO PROCESSE;R1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT: ;E'; R1=ADDRESS OF THE I/O REQUEST PACKET.A; R2=PHYSICAL UNIT NUMBER.; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CON00McbbDATADATADATADATADATADATADATATROL BLOCK.S:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;6; TU58 TAPE CARTRIDGE DRIVE I/O REQUEST PACKET FORMAT:;Q"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.D=; WD. 03 -- POINTER TO 2ND LUN WORD IN REQUESTOR TASK HEADER.L>; WD. 04 -- CONTENTS OF 1ST LUN WORD IN REQUESTOR TASK HEADER.>; WD. 05 -- I/O FUNCTION CODE (IO.RLB, IO.WLB, IO.DGN, IO.BLS)0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.$; WD. 10 -- I/O STATUS BLOCK ADDRESS2; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE*; WD. 12 -- RELOCATION BIAS OF DATA BUFFER*; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER'; WD. 14 -- NUMBER OF BYTES TO TRANSFERD; WD. 15 -- NOT USED5; WD. 16 -- LOW BYTE MUST BE ZERO, HIGH BYTE NOT USED ,; WD. 17 -- LOGICAL OR PHYSICAL BLOCK NUMBER; WD. 20 -- NOT USED;C; DRIVE USUAGE OF UCBL;I); U.CW2+1 --- STORES DRIVER'S RETRY COUNT ;I;+3; THE TU58 UTILIZES RADIAL SERIAL PROTOCOL. ALL I/OU5; COMMANDS ARE INITIATED BY SENDING A COMMAND MESSAGE15; PACKET CONSISTING OF 14. BYTES OF INFORMATION. DATA 3; IS THEN TRANSFERRED TO THE UNIT (WRITE) OR TO THED6; USER'S BUFFER (READ) IN MESSAGE PACKETS OF UP TO 1285; BYTES EACH. TERMINATION OF AN OPERATION BY THE TU58 2; IS SIGNALED BY THE UNIT'S SENDING AN END MESSAGE3; PACKET WHICH CONTAINS INFORMATION CONCERNING THE R; SUCCESS OF THE TRANSFER.;-;-;T* MOVB #RTRY,U.CW2+1(R5) ;STORE RETRY COUNT$ CALL @VOLVD ;VALIDATE VOLUME VALID BCC 10$ ;IF CC SUCCESS5$: JMP XIT ;EXIT 10$: TST R0 ;TRANSFER FUNCTION? BPL 5$ ;IF PL NO2 MOV S.CSR(R4),DBUF(R3) ;STORE DL11 BUFFER ADDRESS/ MOV R3,R4 ;R4 IS USED FOR CONTROLLER INDEXINGE CALL @BLKCK ;CHECK PARAMETERSE. ADD #DDXBF,DBUF(R4) ;SAVE DL11 XMITTER BUFFER; ; SEND COMMAND PACKET';E:RINI: MOV #TYPTAB-2,RADD(R4); POINT TO WORD PRIOR TO TABLE/ CLR FLAG(R4) ;SET FLAG FOR TRANSMIT INTERRUPTS-9 CLR FLGTYP(R4) ;CLEAR FLAG TYPE WORD,DEFAULT IS OLD TU58L BR 145$ ;PREPARE TO SEND BYTE19RINI1: MOV #CTAB-2,RADD(R4) ;POINT TO WORD PRIOR TO TABLEF? BIC #TU58C!TRNACK,FLGTYP(R4); CLEAR ACK AND TU58 CONTINUE FLAGD/ CLR FLAG(R4) ;SET FLAG FOR TRANSMIT INTERRUPTSO BR 145$ ;PREPARE TO SEND BYTE ;E; SEND COMMAND PACKET.;,*CHALF: BITB #NTU58,FLGTYP(R4) ; NEW TU58 ? BNE 15$ ; YES. JMP RTBK ; NO - DON'T SEND INITIAL CONTINUE?15$: MOVB #CONT,@DBUF(R4) ; SEND CONTINUE TO ASSURE A RESPONSE-! BR 145$ ; PREPARE TO SEND BYTEW2CONE: MOVB #CNTL,@DBUF(R4) ;SEND COMMAND FLAG BYTE BR 145$ ;PREPARE TO SEND BYTE4)CTWO: MOV #10.,@DBUF(R4) ;SEND BYTE COUNT81 MOVB #10.,CKSM1+1(R4) ;CREATE CHECKSUM WORD FROMA' MOVB #CNTL,CKSM1(R4) ; FIRST TWO BYTESI BR 145$.CTHR: CALL IOPKT ;STORE I/O PKT ADDRESS IN R1;AD; POSITION AND DIAGNOSE FUNCTIONS ARE USER MODE DIAGNOSTIC FUNCTIONS;Y9 CMP #IO.DGN!IQ.UMD,I.FCN(R1) ;TU58 INTERNAL DIAGNOSTICS?V BNE 40$ ;IF NE NOS/ MOV #DIAG,CKSM2(R4) ;CREATE NEXT CHECKSUM WORDP. MOVB #DIAG,@DBUF(R4) ;SEND DIAGNOSTIC OP CODE BR 140$ ;CONTINUE OPERATION4540$: CMP #IO.BLS!IQ.UMD,I.FCN(R1) ;POSITION FUNCTION?E BNE 60$ ;IF NE NO 0 MOV #POSIT,CKSM2(R4) ;CREATE NEXT CHECKSUM WORD$ MOVB #POSIT,@DBUF(R4) ;SEND OP CODE BR 140$ ;CONTINUEI760$: CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL BLOCK?A BNE 72$ ; IF NO NER/ MOV #READ,CKSM2(R4) ;CREATE NEXT CHECKSUM WORDM' MOVB #READ,@DBUF(R4) ;SEND READ OPCODE BR 110$ ;CONTINUE872$: CMPB #IO.WLB/256.,I.FCN+1(R1); WRITE LOGICAL BLOCK? BEQ 100$ ;IF EQ YESG MOV (SP)+,R1 ;RESTORE R1C3 CALL @FORK ;ENSURE PRIORITY=0 AND REGISTERS SAVED * MOV #IE.IFC&377,R0 ;ILLEGAL FUNCTION CODE- CLR CKSM2(R4) ;CLEAR BYTES TRANSFERRED COUNTD JMP IOCMP ;EXITF5100$: MOV #WRITE,CKSM2(R4) ;CREATE NEXT CHECKSUM WORD.) MOVB #WRITE,@DBUF(R4) ;SEND WRITE OPCODE.110$: BITB #US.WCK,U.STS(R5) ;WRITE CHECK SET? BNE 141$H- CMPB #20,I.FCN(R1) ;IS WLC OR RLC REQUESTED?O BNE 140$ ;IF NE NO BR 141$;C<; SEND A MODIFIER BYTE OF ONE FOR WRITECHECKS AND READCHECKS;F00M cbN+CFOUA: MOVB #1,CKSM2+1(R4) ;ALTER CHECKSUM F! MOVB #1,@DBUF(R4) ;SEND MODIFIERR/ ADD #2,RADD(R4) ;SKIP OVER NEXT RETURN ADDRESSO BR 160$ ;CONTINUEL4140$: ADD #2,RADD(R4) ;SKIP OVER NEXT RETURN ADDRESS141$: MOV (SP)+,R1 ;RESTORE R1< MOV CKSM2(R4),WORD1(R4) ;STORE OP CODE AND COMMAND MODIFIER145$: JMP SMSG;K3; SEND A MODIFIER BYTE OF ZERO FOR READS AND WRITES.;($CFOUB: CLRB @DBUF(R4) ;SEND MODIFIER'160$: CALL CHKPT ;CHECKSUM CALCULATIOND BR 145$,CFIV: MOVB U.UNIT(R5),@DBUF(R4) ;SEND UNIT # MOVB U.UNIT(R5),CKSM2(R4) BR 145$(CSIX: BITB #NTU58,FLGTYP(R4) ;OLD TU58 ? BEQ 162$ ;YES;; MOVB #FLCTL,@DBUF(R4); SET FLOW CONTROL BIT IN SWITCH WORDD0 MOVB #FLCTL,CKSM2+1(R4); KEEP TRACK OF CHECKSUM BR 160$ ;1162$: CLRB @DBUF(R4) ; SEND 0R CLRB CKSM2+1(R4)D BR 160$CSEV:I)CEIG: CLRB @DBUF(R4) ;SEND TWO ZERO BYTES  BR 145$1CNIN: CALL IOPKT ;STORE I/O PACKET ADDRESS IN R1 # ADD #I.PRM,R1 ;POINT TO PARAMETERSE, MOV (R1)+,U.BUF(R5) ;INSERT RELOCATION BIAS- MOV (R1)+,U.BUF+2(R5) ;INSERT BUFFER ADDRESSC$ MOV (R1),CKSM2(R4) ;CREATE CHECKSUM) MOVB (R1),@DBUF(R4) ;SEND LOW BYTE COUNTM BR 141$;B; NOTE:E;L>; THE TU58 REQUIRES THAT THE NUMBER OF BYTES TO BE TRANSFERRED?; BE EVEN AND THAT THE STARTING ADDRESS OF THE DATA TRANSFER BEC; ON A WORD BOUNDARY.6;CTWE: ;SEND HIGH BLOCK NO.6CTEN: MOVB CKSM2+1(R4),@DBUF(R4) ;SEND HIGH BYTE COUNT BR 160$.CELE: CALL IOPKT ;STORE I/O PKT ADDRESS IN R10 MOVB I.PRM+12(R1),@DBUF(R4) ;SEND LOW BLOCK NO. MOV I.PRM+12(R1),CKSM2(R4)E BR 141$1CTHI: MOVB CKSM1(R4),@DBUF(R4) ;SEND LOW CHECKSUMV BR 145$4CFOR: MOVB CKSM1+1(R4),@DBUF(R4) ;SEND HIGH CHECKSUM;5; AFTER THE COMMAND PACKET IS SENT THE TU58 RESPONDS.S2; ITS RESPONSE DEPENDS ON THE OPERATION REQUESTED.6; A CONTINUE IS SENT IN RESPONSE TO A WRITE, THE FIRST3; DATA PACKET IS SENT IN RESPONSE TO A READ, AND ANF3; END PACKET IS SENT IN RESPONSE TO A DIAGNOSTIC ORT6; POSITION COMMAND. ALSO AN END PACKET MAY BE RECEIVED1; ON A FAILURE TO READ THE FIRST RECORD PROPERLY.4;:; DETERMINE THE APPROPRIATE INITIAL RESPONSE FROM THE TU58+; AND RECEIVE THE FIRST BYTE FROM THE TU58.;;D& INCB FLAG+1(R4) ;SET FLAG FOR RECEIVE. SUB #DDXBF-DDRBF,DBUF(R4) ;SET RECEIVE BUFFER* BR 25$ ;READ THE RESPONSE BYTE FROM TU58.CFIF: CALL IOPKT ;STORE I/O PKT ADDRESS IN R1+ CMPB #IO.DGN/256.,I.FCN+1(R1) ;DIAGNOSTIC?A BEQ 170$ ;IF EQ YEST) JMP DPACK ;ELSE DATA PACKET OR CONTINUEO170$: MOV (SP)+,R1 ;RESTORE R1# BR ENDP ;DO END PACKET PROCESSING ;D; DETERMINE TU58 TYPE COMMAND; 8TYPTHR: MOV #TYPU58,CKSM2(R4); CREATE NEXT CHECKSUM WORD. MOVB #TYPU58,@DBUF(R4); SEND TU58 TYPE OPCODE JMP 145$ ;PREPARE TO SEND BYTEBTYPSIX: MOVB #FLCTL,@DBUF(R4); SET FLOW CONTROL BIT IN SWITCH BYTE) MOVB #FLCTL,CKSM2+1(R4); CREATE CHECKSUMI JMP 160$ ; CREATE CHECKSUM9TYPSEV: CLRB @DBUF(R4) ; NOT IMPORTANT FOR COMMAND PACKET0! JMP 145$ ; PREPARE TO SEND BYTE >TYPFIF: CMPB RDAT(R4),#END ;NEW TU58? (WILL RETURN END PACKET) BNE 200$ ;NO: BIS #NTU58!CHKDON!TRNACK,FLGTYP(R4); SET FLAG TO NEW TU58 BR 206$ ; FLUSH END PACKET4200$: CMPB RDAT(R4),#DATA ; DATA PACKET - OLD TU58 ?$ BEQ 204$ ; YES - FLUSH DATA PACKET JMP NTRY ; RETRY9204$: BIS #CHKDON,FLGTYP(R4); TU58 TYPE CHECK IS COMPLETEE, JMP NTRY1 ;FLUSH DATA PACKET BY DOING INIT<206$: ADD #DDXBF-DDRBF,DBUF(R4); POINT TO TRANSMITTER BUFFER JMP SMSG ; SEND A CONTINUE4TYPSXT: JMP RMSG ; FLUSH THE REST OF THE END PACKET>TYPSVT: ADD #DDXBF-DDRBF,DBUF(R4); POINT TO TRANSMITTER BUFFER! JMP RINI1 ; NEW TU58 - USE MRSPE;L:; RECEIVE AND MANIPULATE THE TU58'S END PACKET INFORMATION;48ENDP: MOV #ETAB-2,RADD(R4) ;POINT TO END PACKET SEQUENCE) CMPB RDAT(R4),#CNTL ;COMMAND/END PACKET?I BR 24$,;TA; AT EONE WE SHOULD HAVE RECEIVED THE BYTE COUNT OF AN END PACKETT; WHICH IS ALWAYS EQUAL TO 10.;R)EONE: CMPB RDAT(R4),#10. ;BYTE COUNT=10.?J24$: BEQ 25$ ;IF EQ YES JMP NTRY ;25$: JMP RMSG ;READ A BYTE -ETWO: CMPB RDAT(R4),#100 ;OP CODE=END PACKET?P BR 24$R1ETHR: MOVB RDAT(R4),CKSM1(R4) ;STORE SUCCESS CODEE00McbbDATADATADATADATADATADATADATA MOVB RDAT(R4),WORD2(R4) ; BR 25$ ;2EFOU: MOVB RDAT(R4),WORD2+1(R4) ;STORE UNIT SELECTEFIV: ;DUMP BYTESESIX:U ESEV: BR 25$@EEIG: MOVB RDAT(R4),CKSM2(R4) ;STORE BYTE TRANSFERRED COUNT -LOW MOVB RDAT(R4),WORD3(R4) ; BR 25$NCENIN: MOVB RDAT(R4),CKSM2+1(R4) ;STORE BYTE TRANSFERRED COUNT -HIGH, MOVB RDAT(R4),WORD3+1(R4) ;ETEN: EELE:YETWE: BR 25$ ;DUMP BYTESR8ETHI: CALL @FORK ;ENSURE PRIORITY=0 AND REGISTERS SAVED# MOV #IS.SUC&377,R0 ;ASSUME SUCCESS4 TSTB CKSM1(R4) ;SUCCESSFUL?' BGT ERRPT ;IF GT YES, BUT HAD RETRIES;$ BEQ ENDOP ;IF EQ, COMPLETE SUCCESS, MOV #IE.DNR&377,R0 ;ASSUME DEVICE NOT READY- CMPB CKSM1(R4),#-9. ;CARTRIDGE NOT IN PLACE?O BEQ ERRPT ;IF EQ YES( MOV #IE.WLK&377,R0 ;ASSUME WRITE-LOCKED$ CMPB CKSM1(R4),#-11. ;WRITE-LOCKED? BEQ ERRPT ;IF EQ YES, MOV #IE.FHE,R0 ;ASSUME FATAL HARDWARE ERROR% CMPB CKSM1(R4),#-33. ;MOTOR STOPPED? BEQ ERRPT ;IF EQ YES/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERROR7%ERRPT: CALL LOGERR ;LOG DEVICE ERRORS BR ENDOP ;;+; **-LOGERR-LOG DEVICE ERROR; **-LOGTMO-LOG DEVICE TIMEOUT;S;EB; ALLOCATE A CORE BLOCK, FILL IT WITH THE APPROPRIATE INFORMATION,?; CALL THE EXECUTIVE ERROR LOGGING ROUTINE, DEALLOCATE THE COREK'; BLOCK, AND RETURN BACK TO THE CALLER.(; ;; IF FOR ANY REASON THE CORE BLOCK CANNOT BE ALLOCATED THEN 8; THE EXECUTIVE ERROR LOGGING ROUTINE WILL NOT BE CALLED;; AND THE ERROR SEQUENCE NUMBER WILL BE UPDATED TO INDICATEM); THAT A MISSED ERROR CONDITION OCCURRED. ;-&LOGERR: MOV R0,-(SP) ;SAVE STATUS CODE% MOV DVERR,-(SP) ;TO LOG DEVICE ERROR BR 70$ ;&LOGTMO: MOV R0,-(SP) ;SAVE STATUS CODE' MOV DTOER,-(SP) ;TO LOG DEVICE TIMEOUT 170$: MOV #DDNUM*2,R1 ;NUMBER OF BYTES TO ALLOCATEE$ CALL @ALOCB ;ALLOCATE A CORE BLOCK$ BCC 80$ ;IF CC BLOCK WAS ALLOCATED4 TST (SP)+ ; POP CO-ROUTINE ADDRESS THAT WAS PUT ON/ INC @ERRSQ ;INDICATE A MISSED ERROR CONDITION  BR 90$ ;END I/O ROUTINEE)80$: MOV R0,R1 ;COPY CORE BUFFER POINTERS& MOV DBUF(R4),R3 ;STORE BUFFER ADDRESS TST -(R3) ;POINT TO DL11 CSR8 MOV (R3)+,(R1)+ ;MOVE DL11 RECEIVE CSR INTO CORE BUFFER( MOV (R3)+,(R1)+ ;...DL11 RECEIVE BUFFER* MOV (R3)+,(R1)+ ;... DL11 TRANSMITTER CSR1 MOV WORD1(R4),(R1)+ ;OPCODE AND COMMAND MODIFIER 2 MOV WORD2(R4),(R1)+ ;SUCCESS CODE AND UNIT SELECT7 MOV WORD3(R4),(R1) ;BYTE COUNT LOW AND BYTE COUNT HIGHA" MOV R4,R3 ;SAVE CONTROLLER INDEX" MOV U.SCB(R5),R4 ;GET SCB ADDRESS) MOV R0,R2 ;SET WITH CORE BUFFER POINTERO) CALL @(SP)+ ;CALL ERROR LOGGING ROUTINE ( MOV R2,R0 ;RESTORE CORE BUFFER POINTER% MOV R3,R4 ;RESTORE CONTROLLER INDEXV3 MOV #DDNUM*2,R1 ;GET NUMBER OF BYTES TO DEALLOCATEE$ CALL @DEACB ;DEALLOCATE CORE BLOCK*90$: MOV (SP)+,R0 ;RESTORE I/O STATUS CODE RETURNMENDOP: CALL IOPKTW+ CMPB #IO.DGN/256.,I.FCN+1(R1) ;DIAGNOSTIC? BNE 95$ ;IF NE NOB4 MOV I.PRM+14(R1),@KISR6 ;SET BUFFER RELOCATION BIAS1 MOV I.PRM+16(R1),R0 ;GET REGISTER BUFFER ADDRESSS1 MOV DBUF(R4),R3 ;GET DL11 RECEIVE BUFFER ADDRESS & TST -(R3) ;POINT TO REC. CSR ADDRESS5 MOV (R3)+,(R0)+ ;MOV REC. CSR CONTENTS TO USER BUFF.S( MOV (R3)+,(R0)+ ;MOV REC. BUFF CONTENTS) MOV (R3)+,(R0)+ ;MOV TRANS. CSR CONTENTSD* MOV (R3)+,(R0)+ ;MOV TRANS. BUFF CONTENTS- MOV CKSM1(R4),(R0) ;MOV TU58 END PACKET INFO:0 MOV #IS.SUC&377,R0 ;STORE I/O COMPLETION STATUS95$: TST (SP)+ ;RESTORE STACK;V/; COMMON EXIT CODE-ALL OPERATIONS COMPLETE HERE;V7IOCMP: MOV CKSM2(R4),R1 ;PICKUP BYTES TRANSFERRED COUNT(1XIT: MOVB U.CW2+1(R5),R2 ;STORE FINAL RETRY COUNT)/ BIS #RTRY*^D<256>,R2 ;MERGE INTIAL RETRY COUNTO CALL @IODON JMP DDINI ;NEXT I/O PACKET .DSABL LSB ;.B; WE ENTER HERE WHEN AN UNEXPECTED AND UNDESIRED BYTE IS RECEIVED.?; THE TU58 IS REINITIALIZED AND IF THE RETRY COUNT IS => 0, THE A; I/O FUNCTION IS STARTED OVER. OTHERWISE, AN ERROR IS LOGGED AND; THE OPERATION IS ABORTED.K;V .ENABL LSBI-NTRY: DECB U.CW2+1(R5) ;DECREMENT RETRY COUNT:=NTRY1: ADD #DDXBF-DDRBF,DBUF(R4); POINT TO TRANSMITTER BUFFER.;+;; TINIT TRIES TO REINITIALIZE THE TU58. IT WILL ATTEMPT THER:; INITIALIZATION ROUTINE OF 00McbNSENDING BREAK, CLEARING BREAK,/; SENDING TWO INIT'S, AND RECEIVING A CONTINUE. ;XATINIT: CLR FLAG(R4) ;SET FOR TRANSMIT WITH NO USER DATA TRANSFER 0 MOV #ITAB-2,RADD(R4) ;POINT TO INITIALIZE TABLE BR 50$ ;WAIT R;T;; NULL TIMING CHARACTERS ARE SENT AT IONE AND ITWO TO ALLOWK>; ENOUGH TIME FOR THE BREAK BIT TO CAUSE A FRAMING ERROR. THIS3; SIGNALS THE TU58 TO STOP TRANSMITTING AND LISTEN.I;R0IONE: MOV DBUF(R4),CKSM1(R4) ;TEMP. STORE BUFFER* SUB #DDXBF-DDXCS,CKSM1(R4) ;POINT TO XCSR( BIS #BRK,@CKSM1(R4) ;SEND BREAK TO TU58ITWOA: ;SEND TIMING NULLSITWOB:ITWOC:ITWOD:(ITWOE: CLRB @DBUF(R4) ;SEND ANOTHER NULL50$: JMP SMSG ;WAIT;8; ITHR AND IFOU WILL CLEAR THE BREAK CONDITION AND ISSUE<; TWO INITIALIZE COMMANDS TO THE TU58. (THE FIRST IS IGNORED; BY THE CONTROLLER).T; &ITHR: BIC #BRK,@CKSM1(R4) ;CLEAR BREAK5 SUB #DDXCS-DDRBF,CKSM1(R4) ;TEMP. STORE REC. BUFFERI# TSTB @CKSM1(R4) ;DUMP REC. BUFFERR.IFOU: MOVB #INIT,@DBUF(R4) ;SEND ANOTHER INIT. BR 50$ ;WAIT R;B:; A CHARACTER IS RECEIVED AT ISIX. IF IT IS A CONTINUE, WE+; HAVE SUCCESSFULLY INITIALIZED THE DEVICE. ;U4IFIV: SUB #DDXBF-DDRBF,DBUF(R4) ;POINT TO REC. BUFF.& INCB FLAG+1(R4) ;SET FLAG FOR RECEIVE7 BISB #TU58C,FLGTYP(R4) ; TU58 MUST SEND A CONTINUE NOWH JMP RMSG ;WAIT.ISIX: ADD #DDXBF-DDRBF,DBUF(R4) ;POINT TO XBUFA BICB #TU58C,FLGTYP(R4) ; TU58 CONTINUE ALREADY SENT - CLEAR FLAG. TSTB U.CW2+1(R5) ;RETRY?  BGT 60$ ;IF GT YES3 CALL @FORK ;ENSURE PRIORITY=0 AND REGISTERS SAVED MOV #IE.FHE&377,R0 ;FATAL ERROR) CLR CKSM2(R4) ;CLEAR BYTE TRANSFER COUNTA# MOV #200,CKSM1(R4) ;SET ERROR CODEE0 SUB #DDXBF-DDRBF,DBUF(R4) ;POINT TO REC. BUFFER JMP ERRPT ;ERROR LOG AND EXIT '60$: BITB #NTU58,FLGTYP(R4); NEW TU58 ?  BNE 62$ ;YES5 BITB #CHKDON,FLGTYP(R4); COMPLETED TU58 TYPE CHECK ?R$ BNE 62$ ;YES - IT MUST BE OLD TU58' JMP RINI ;DETERMINE TU58 TYPE - RETRYT,62$: JMP RINI1 ;SEND COMMAND PACKET - RETRY;6<; HERE DATA PACKETS SENT BY THE TU58 ARE READ. THE NUMBER OF<; DATA BYTES IN THE PACKET IS RECEIVED AT RONE. IT IS STORED<; IN LOCATION FLAG AND THE CHECKSUM IS INITIALIZED. THE DATA;; IS TRANSFERRED WITHIN THE INTERRUPT SERVICE ROUTINE WHERE ;; THE CHECKSUM IS ALSO VERIFIED. THE FIRST BYTE OF THE NEXT ;; PACKET IS RECEIVED AT RFOU AND IF IT IS A DATA FLAG, THISP; CODE IS ENTERED AGAIN.;I+DPACK: CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ?8" BNE 102$ ;IF NE NO -IT'S A WRITE MOV (SP)+,R1 ;RESTORE R16'RFOU: CMPB RDAT(R4),#DATA ;DATA PACKET?E BEQ 96$ ;IF EQ YES 94$: JMP ENDP )96$: MOVB #DATA,CKSM1(R4) ;START CHECKSUMD* MOV #RTAB-2,RADD(R4) ;POINT TO READ TABLE BR 100$ ;READ A BYTE.RONE: MOVB RDAT(R4),FLAG(R4) ;STORE BYTE COUNT= MOVB RDAT(R4),CKSM1+1(R4) ;STORE HIGH BYTE OF FIRST CHECKSUME100$: JMP RMSG; 2; AT THIS POINT WE SEND A DATA PACKET TO THE TU58.8; THE DATA FLAG BYTE IS SENT AT TONE. THE NUMBER OF DATA4; BYTES IN THIS PACKET IS SENT AT TTWO. DATA IS THEN:; TRANSFERRED ALONG WITH THE CHECKSUM WITHIN THE INTERRUPT9; SERVICE ROUTINE. RETURN TO THIS SEGMENT IS MADE AT TFIVT6; AND THE FIRST BYTE OF THE NEXT PACKET IS RECEIVED AT3; TSIX, IF IT IS A CONTINUE ANOTHER PACKET IS SENT.R6; WHEN THE TU-58 HAS RECEIVED ALL THE DATA IT SENDS AN9; END PACKET FLAG INSTEAD OF A CONTINUE (THIS ALSO OCCURS4; IF THE TU58 ENCOUNTERS AN ERROR WRITING THE DATA).; 4102$: MOV I.PRM+4(R1),WCNT(R4) ;DUPLICATE BYTE COUNT MOV (SP)+,R1 ;RESTORE R1 FTSIX: BICB #TU58C,FLGTYP(R4) ; TU58 ALREADY SENT CONTINUE - CLEAR FLAG& CMPB RDAT(R4),#CONT ; CONTINUE FLAG ? BNE 94$ ;IF NE NOM6 MOV #TTAB-2,RADD(R4) ;POINT TO TRANSMIT (WRITE) TABLE# CLRB FLAG+1(R4) ;SET TRANSMIT FLAGI/ ADD #DDXBF-DDRBF,DBUF(R4) ;SET TRANSMIT BUFFERS% BR 130$ ;PREPARE TO SEND FIRST BYTEN*TONE: MOVB #DATA,@DBUF(R4) ;SEND FLAG BYTE% MOVB #DATA,CKSM1(R4) ;START CHECKSUM - CMP #128.,WCNT(R4) ;MORE THAN 1 PACKET LEFT?( BLO 120$ ;IF L0 YES =125$: MOVB WCNT(R4),CKSM1+1(R4) ;CREATE HIGH BYTE OF CHECKSUMP) CLRB WCNT(R4) ;ZERO REMAINING BYTE COUNTL BR 130$:120$: MOVB #128.,CKSM1+1(R4) ;CREATE HIGH BYTE OF CHEC00M%cbbDATADATADATADATADATADATADATAKSUM, SUB #128.,WCNT(R4) ;ADJUST REMAINING COUNT130$: JMP SMSG1TTWO: MOVB CKSM1+1(R4),@DBUF(R4) ;SEND BYTE COUNTR2 MOVB CKSM1+1(R4),FLAG(R4) ;SET UP FLAG BYTE COUNT BR 130$'TFIV: INCB FLAG+1(R4) ;SET RECEIVE BYTE . SUB #DDXBF-DDRBF,DBUF(R4) ;SET RECEIVE BUFFER= BISB #TU58C,FLGTYP(R4) ;TU58 CAN SEND CONTINUE FOR MORE DATA  BR 100$ ;READ A BYTE .DSABL LSB ;E%; IOPKT PUTS I/O PACKET ADDRESS IN R1R;; ; OUTPUT:I;B; R1 = I/O PACKET ADDRESS ;; (SP) = FORMER CONTENTS OF R1 TO BE RESTORED BY THE CALLER2;W.IOPKT: MOV (SP)+,WCNT(R4) ;SAVE RETURN ADDRESS MOV R1,-(SP) ;PRESERVE R1 MOV R4,-(SP) ;PRESERVE R4" MOV U.SCB(R5),R4 ;GET SCB ADDRESS& MOV S.PKT(R4),R1 ;GET I/O PKT ADDRESS MOV (SP)+,R4 ;RESTORE R4S3 JMP @WCNT(R4) ;NOTE R1 WILL BE RESTORED BY PROGRAMT;C>; RTBK (RETURN BACK) INCREMENTS THE RETURN ADDRESS POINTER AND; THEN JUMPS THERE.S;-RTBK: ADD #2,RADD(R4) ;POINT TO NEXT LOCATION= MOV @RADD(R4),-(SP) ;MOVE RETURN ADDRESS LOCATION ONTO STACKT( JMP @(SP)+ ;RETURN TO ADDRESS IN TABLE;9; THIS ROUTINE IS JUMPED TO IN ORDER TO SEND INFORMATION.P>; THE MAIN PROGRAM CONTINUES VIA THE INTERRUPT SERVICE ROUTINE@; CODE (SPT), UNLESS WRITE DATA IS TO BE TRANSFERRED (DATA COUNT; FLAG = NON-ZERO).P;C .ENABL LSBR-SMSG: SUB #DDXBF-DDXCS,DBUF(R4) ;POINT TO CSRU* BIT #TRDY,@DBUF(R4) ;IS TRANSMITTER READY BEQ 20$0SREC: ADD #DDXBF-DDXCS,DBUF(R4) ;POINT TO BUFFER# BITB #NTU58,FLGTYP(R4); NEW TU58 ?- BEQ 16$ ;NOR7 BITB #TRNACK,FLGTYP(R4) ; ACK CHAR FOR NEW TU58 MRSP ?D BEQ 16$ ; NO0 MOVB #CONT,@DBUF(R4) ;MUST BE READING FROM TU58) ;ACK TU58 THAT CHAR HAS BEEN RECEIVEDV3 BICB #TRNACK,FLGTYP(R4); COMPLETED THE ACKNOWLEDGES& JMP RPT1 ;PROCESS THE CHAR JUST READ16$: TSTB FLAG(R4) ;BYTE COUNT 0 BEQ RTBK ;IF EQ YESX" JMP SPT ;GO TO SEND DATA ROUTINE.20$: BIS #S2.ACT,S.ST2(R4) ;SET I/O ACTIVE BIT- BIS #TIE,@DBUF(R4) ;SET TRANS. INTER. ENABLEU$ MOV U.SCB(R5),R4 ;STORE SCB ADDRESS& MOVB S.ITM(R4),S.CTM(R4) ;SET TIMEOUT RETURNA .DSABL LSBE;U?; THIS ROUTINE IS JUMPED TO IN ORDER TO RECEIVE INFORMATION VIAG>; THE DL11. IF RECEIVER DONE IS SET, THEN A RETURN TO THE MAIN?; PROGRAM IS INITIATED VIA THE INTERRUPT SERVICE ROUTINE (RPT). =; IF THE DL11 DONE BIT IS CLEAR, A RETURN IS EXECUTED AND THEB>; INTERRUPT SERVICE ROUTINE WILL RETURN CONTROL TO THE PROGRAM:; WHEN THE DONE BIT IS SET AND WHEN ALL READ DATA HAS BEEN#; TRANSFERRED TO THE USER'S BUFFER.); .ENABL LSBD-RMSG: SUB #DDRBF-DDRCS,DBUF(R4) ;POINT TO CSRR" BIT #RDONE,@DBUF(R4) ;BYTE READY? BEQ 20$ ;IF EQ NOO)RREC: JMP RPT ;IF YES ENTER READ ROUTINE120$: BIS #S2.ACT,S.ST2(R4) ;. BIS #RIE,@DBUF(R4) ;SET REC. INTERRUPT ENABLE& MOV U.SCB(R5),R4 ;RESTORE SCB ADDRESS! MOVB #40.,S.CTM(R4) ;SET TIMEOUTA RETURNS .DSABL LSB ;B; CHKPT CREATES A CHECKSUM;I; INPUT:;T; CKSM2(R4) = WORD TO BE ADDED; CKSM1(R4) = OLD CHECKSUM;D ; OUTPUT:E;; CKSM1(R4) = NEW CHECKSUM;F-CHKPT: ADD CKSM2(R4),CKSM1(R4) ;ADD TWO WORDSD ADC CKSM1(R4) ;ADD CARRYT ;FALL THROUGH TO RETURN?;B; END LOCAL ROUTINES; ;+; DDCAN-CANCEL I/O ENTRY POINT2; CANCEL I/O IS A NOP FOR FILE STRUCTURED DEVICES.;- DDCAN: RETURN ;+,; **-DDKRB-CONTROLLER ONLINE/OFFLINE ROUTINE;4&DDKRB: BCS 20$ ;IF CS OFFLINE REQUEST TST EXEVEC ;IF DONE ALREADY  BNE 20$ ;SKIP THIS MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) ;SAVE R3 MOV KINAR6,-(SP) ;SAVE KINAR6. MOV @#112,R0 ;GET ADDRESS OF TABLE OF ENTRIES: MOV (R0),R0 ;GET ADDRESS OF APR BIAS (1ST WORD IN TABLE)1 MOV (R0),KINAR6 ;MAP COMMON THROUGH I-SPACE APR6A MOV #EXEVEC,R3 ;POINT TO VECTOR) MOV #EXEVCL,R2 ;SPECIFY LENGTH OF VECTOR $ CALL @#140004 ;TRANSLATE THE VECTOR! MOV (SP)+,KINAR6 ;RESTORE KINAR6  MOV (SP)+,R3 ;RESTORE R3 MOV (SP)+,R2 ;RESTORE R2I 20$: RETURNT;+3; POWERFAIL REQUIRES NO OPERATION. REINITIALIZATION(=; OF THE TU58 WILL OCCUR DURING NORMAL OPERATION IF REQUIRED.I;- DDPWF: RETURN ;+&; **-DDUCB-UNIT ONLINE/OFFLINE ROUTINE;- DDUCB: RETURNP;+*; **-$DDINT TU58 INTERRUPT SERVICE ROUTINE;M'; 00M-cbNINTERRUPTS ARE ISSUED WHEN EITHER THE %; RECEIVE OR TRANSMIT CSR'S INTERRUPTI#; ENABLE IS SET BY ROUTINES RMSG OR;$; SMSG. THEY INDICATE THAT THE DL-11$; HAS RECEIVED A BYTE OF INFORMATION%; OR CAN ACCEPT A BYTE OF INFORMATION0; FOR TRANSMITTING. ;- .ENABL LSBS$DDOUT:: ;;;2 INT. ENTRY PTS6 INTSE$ DD,PR4,T$$U58 ;;;SAVE REGISTERS & SET PRIORITY- BIC #,@DBUF(R4) ;;;CLEAR INTERRUPTSU MOV R1,-(SP) ;;;SAVE R1$ MOV U.SCB(R5),R1 ;;;GET SCB ADDRESS CLRB S.CTM(R1) ;;;CLEAR TIMEOUT MOV (SP)+,R1 ;;;RESTORE R1H;E8; FLAG+1 IS SET FOR A TRANSMIT OPERATION AND CLEARED FOR9; A RECEIVE OPERATION. FLAG IS CHECKED TO DETERMINE IF WET; HAVE DATA TO TRANSFER.;T& TSTB FLAG+1(R4) ;;;RECEIVE INTERRUPT? BEQ 3$ ;IF EQUAL NO ; BIT #TRNACK,FLGTYP(R4); IN PROCESS OF ACKNOWLEDGING CHAR ?P) BEQ RPT ;NO -- JUST A RECEIVE INTERRUPT 4 ADD #DDXBF-DDXCS,DBUF(R4); POINT TO TRANSMIT BUFFER1 MOVB #CONT,@DBUF(R4) ;ACK THE CHAR THAT WAS READR3 BICB #TRNACK,FLGTYP(R4); COMPLETED THE ACKNOWLEDGET0 JMP RPT1 ; CONTINUE WITH THE RECEIVE INTERRUPT3$: - ADD #DDXBF-DDXCS,DBUF(R4) ;;;POINT TO BUFFERV' TSTB FLAG(R4) ;;;TRANSMIT DATA PACKET?  BNE SPT ;;;IF NE YES5$: JMP RTBK ;;;ELSE RETURN;;?; SPT IS THE CODE USED TO SEND USER DATA TO THE TU58. A RUNNING4>; CHECKSUM IS KEPT AND IS SENT AS THE LAST TWO CHARACTERS OF A@; DATA PACKET (TTHR,TFOU). AFTER ALL DATA HAS BEEN SENT, CONTROL ; IS PASSED TO THE MAIN PROGRAM.;E2SPT: CALL @GTBYT ;;;PUT USER'S DATA BYTE ON STACK3 BITB #1,FLAG(R4) ;;;CHECK FOR EVEN OR ODD BYTE NO.E+ BNE 20$ ;;;IF NE ODD,THEREFORE HIGH ORDERB ;;;BYTE IN CHECKSUMV5 MOVB (SP)+,CKSM2(R4) ;;;SAVE LOW ORDER CHECKSUM BYTE;* MOVB CKSM2(R4),@DBUF(R4) ;;;TRANSMIT BYTE BR 30$S<20$: MOVB (SP)+,CKSM2+1(R4) ;;;SAVE HIGH ORDER CHECKSUM BYTE, MOVB CKSM2+1(R4),@DBUF(R4) ;;;TRANSMIT BYTE! CALL CHKPT ;;;GENERATE CHECKSUMF*30$: DECB FLAG(R4) ;;;DECREMENT DATA COUNT 35$: JMP SMSGT>TTHR: MOVB CKSM1(R4),@DBUF(R4) ;;;SEND LOW ORDER CHECKSUM BYTE BR 35$8TFOU: MOVB CKSM1+1(R4),@DBUF(R4) ;;;SEND HIGH ORDER BYTE BR 35$I)TFOUA: BITB #NTU58,FLGTYP(R4); NEW TU58 ?  BNE 39$ ; YESV138$: JMP RTBK ; NO - CONTINUE NOT NEEDED FOR RSPH39$: MOVB #CONT,@DBUF(R4) ; SEND CONTINUE AFTER TRANSMITTING DATA PACKET BR 35$ ;; 9; RPT CHECKS FOR AN ERROR CONDITION IN THE DL11'S RECEIVEA:; BUFFER. IF DATA IS TO BE RECEIVED THIS ROUTINE TRANSFERS8; THE CHARACTER IN THE USER'S BUFFER AND KEEPS A RUNNING;; CHECKSUM. AFTER ALL DATA IS RECEIVED, THE FINAL TWO BYTES>; OF THE PACKET ARE PRESENT AT RTWO AND RTHR AND IF THEY EQUAL=; THE CHECKSUM, THEN CONTROL IS RETURNED TO THE MAIN PROGRAM.E;1RPT: ADD #DDRBF-DDRCS,DBUF(R4) ;;;POINT TO BUFFER/ MOV @DBUF(R4),RDAT(R4) ;;;STORE RECEIVED INFO.R BPL 80$ ;;;IF PL NO ERROR540$: JMP NTRY ;;;ATTEMPT RETRYO'80$: BITB #NTU58,FLGTYP(R4); NEW TU58 ?F2 BEQ RPT2 ;NO-DO NOT HAVE TO ACKNOWLEDGE THE DATA@ BITB #TU58C,FLGTYP(R4) ; DATA COULD BE A CONTINUE IF FLAG SET ? BEQ 82$ ; NO - MUST ACK IT* CMPB RDAT(R4),#CONT ; IS DATA A CONTINE ?5 BEQ RPT2 ; YES - THE CONTINUE IS FROM TU58 - NO ACKC682$: BIS #TRNACK,FLGTYP(R4); YES - MUST ACKNOWLEDGE IT4 ADD #DDXBF-DDRBF,DBUF(R4); POINT TO TRANSMIT BUFFER/ JMP SMSG ;NEW TU58-ACKNOWLEDGE CHAR JUST READ8RPT1: SUB #DDXBF-DDRBF,DBUF(R4); POINT TO RECEIVE BUFFER&RPT2: TSTB FLAG(R4) ;;;DATA TO RECEIVE BEQ 5$ ;;;IF EQ NO) MOVB RDAT(R4),-(SP) ;;;PUT DATA ON STACK , CALL @PTBYT ;;;PUT DATA INTO USER'S BUFFER4 BITB #1,FLAG(R4) ;;;ODD OR EVEN BYTE (FOR CHECKSUM)1 BNE 90$ ;;;IF NE ODD (HIGH ORDER CHECKSUM BYTE)-3 MOVB RDAT(R4),CKSM2(R4) ;;;LOW ORDER CHECKSUM BYTEK BR 100$:90$: MOVB RDAT(R4),CKSM2+1(R4) ;;;HIGH ORDER CHECKSUM BYTE CALL CHKPTI+100$: DECB FLAG(R4) ;;;DECREMENT DATA COUNTA BR 160$;RTWO: MOVB RDAT(R4),CKSM2(R4) ;;;RECEIVE LOW ORDER CHECKSUM BR 160$6RTHR: MOVB RDAT(R4),CKSM2+1(R4) ;;;RECEIVE HIGH ORDER 2 CMP CKSM1(R4),CKSM2(R4) ;;;ARE CHECKSUMS CORRECT? BNE 40$1160$: JMP RMSG ;;;READ FIRST BYTE OF NEXT PACKET .DSABL LSBR;+:; TIMEOUT IS ENTERED WHEN THE DL11 DOES NO00M5c7cbDATADATADATADATADATADATADATAT RESPOND WITHIN9; A CERTAIN PRESET TIME TO THE SUBROUTINES SMSG AND RMSG05; SETTING INTERRUPT ENABLE AND ISSUING A RETURN. THISU3; INDICATES A HARDWARE FAILURE OF THE DL11 OR TU58.T;-DDOUT:3 BIC #,@DBUF(R3) ;;;CLEAR INTERRUPT ENABLEL" MOV R3,R4 ;COPY CONTROLLER INDEX$ TSTB FLAG+1(R4) ; RECEIVE TIMEOUT ? BNE 2$ ; YES61$: SUB #DDXBF-DDXCS,DBUF(R4); POINT TO RECEIVE BUFFER BR 6$ ; 32$: BIT #TRNACK,FLGTYP(R4);IN PROCESS OF ACK CHAR ?R& BEQ 4$ ; NO - JUST A RECEIVE TIMEOUT0 BIC #TRNACK,FLGTYP(R4);CLEAR MUST ACK CHAR FLAG BR 1$ ;R64$: ADD #DDRBF-DDRCS,DBUF(R4); POINT TO RECEIVE BUFFER$6$: CALL LOGTMO ; LOG TIMEOUT ERROR# MOV R4,R3 ; COPY CONTROLLER INDEXT7 ADD #DDXBF-DDRBF,DBUF(R4); POINT TO TRANSMITTER BUFFERT( DECB U.CW2+1(R5) ;DECREMENT RETRY COUNT! BLE 10$ ;IF LE, NO RETRIES LEFTO JMP TINIT ;RE-INIT AND RETRY010$: CLR CKSM2(R3) ;CLEAR BYTE TRANSFERRED COUNT" MOV #IE.TMO&377,R0 ;TIMEOUT ERROR JMP ENDOP .ENDR& BEQ 4$ ; NO - JUST A RECEIVE TIMEOUT0 BIC # .TITLE DKDRV .IDENT /09/;; COPYRIGHT (C) 1974, 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 09;; D. N. CUTLER 19-OCT-73;; PREVIOUSLY MODIFIED BY:;; P. J. BEZEREDI; D. N. CUTLER; C. A. D'ELIA;; MODIFIED BY:;; P. J. BEZEREDI 14-DEC-77;6; PB050 -- REMOVE UNNEEDED CONDITIONALS FOR RSX-11M+.;; P. J. BEZEREDI 21-AUG-78;6; PB083 -- ADDITION OF SOFTWARE VOLUME VALID SUPPORT.; ; P. J. BEZEREDI 06-OCT-78; 1; PB089 -- MAKE USE OF EXTENDED INSTRUCTION SET.C;E;D; RK11 CARTRIDGE DISK DRIVER;N; MACRO LIBRARY CALLSR;O .MCALL HWDDF$,PKTDF$E$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;J; EQUATED SYMBOLS ;LRETRY=8. ;ERROR RETRY COUNTD; ; LOCAL DATA;E>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);1<RTTBL: .BLKW R$$K11 ;ERROR RETRY COUNT AND DRIVE RESET FLAG;A; DIAGNOSTIC FUNCTION TABLE;.!FUNTBL: .WORD IO.HMS!IQ.UMD, 05159 .WORD IO.BLS!IQ.UMD, 0511!FUNTB0: .WORD IO.RDH!IQ.UMD, 2505R .WORD IO.WDH!IQ.UMD, 2503 .WORD IO.WCK!IQ.UMD, 0507FUNTBE:$;E; DRIVER DISPATCH TABLEA;R( DDT$ DK,R$$K11 ;GENERATE DISPATCH TABLE;+3; **-DKINI-RK11 CARTRIDGE DISK CONTROLLER INITIATOR ;NH; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUEG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THE H; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN AH; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER IH; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER>; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.;P ; INPUTS:;+:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;H ; OUTPUTS:;NB; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAB; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OP; ATION IS INITIATED.E;- .ENABL LSBS=DKINI: GTPKT$ DK,R$$K11,DKCAN ;GET NEXT I/O PACKET TO PROCESS.; 1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:E;T'; R1=ADDRESS OF THE I/O REQUEST PACKET.R-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.I; R3=CONTROLLER INDEX.(; R4=ADDRESS OF THE STATUS CONTROL BLOCK:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;E0; RK11 CARTRIDGE DISK I/O REQUEST PACKET FORMAT:;A"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.A@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.B; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTOR TASK HEADE1; WD. 05 -- I/O FUNCTION CODE (IO.RLB OR IO.WLB).I0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.B; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140003; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE00=cbN ROUTINE.A; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER.S+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.3-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.K; WD. 15 -- NOT USED.O9; WD. 16 -- LOW BYTE MUST BE ZERO AND HIGH BYTE NOT USED. 0; WD. 17 -- LOGICAL BLOCK NUMBER OF I/O REQUEST.A; WD. 20 -- RELOCATION BIAS OF DIAGNOSTIC REG. ADRS ELSE NOT USEDN<; WD. 21 -- DIAGNOSTIC REG. BLK ADRS (REAL OR DISPL.+140000);(= MOV #RETRY&377,RTTBL(R3) ;CLEAR POSITIONING AND SET RETRIESS$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 8$ ;IF CS WE FAILED) TST R0 ;TRANSFER FUNCTION? BMI 1$ ;IF MI YES/ TST I.PRM+2(R1) ;SIZE THE DISK? BPL 8$ ;IF PL NO# ASH #13.,R2 ;POSITION UNIT NUMBER ' MOV S.CSR(R4),R0 ;RETREIVE CSR ADDRESS  MOV R2,6(R0) ;SELECT THE DRIVEL MOV R0,R2 ;COPY CSR ADDRESSD# JMP 130$ ;PASS REGISTERS AND EXIT 1$: ;REF LABELU .IF DF M$$EXT, CALL $STMAP ;SET UP UNIBUS MAPPING ADDRESS .ENDC8 CMPB #IO.HMS/^D<256>,I.FCN+1(R1) ;DIAGNOSTIC FUNCTION? BNE 5$ ;IF NE NO. MOV #FUNTBL,R0 ;GET ADDRESS OF FUNCTION TABLE-2$: CMP (R0)+,I.FCN(R1) ;FUNCTION CODE MATCH? BEQ 3$ ;IF EQ YESE# TST (R0)+ ;BYPASS CONTROLLER CODE#' CMP #FUNTBE,R0 ;END OF FUNCTION TABLE?R BEQ 5$ ;IF EQ YES  BR 2$ ;TRY AGAIN)3$: CMP R0,#FUNTB0 ;POSITIONING FUNCTION?S BHI 4$ ;IF HI NO6 INCB RTTBL+1(R3) ;YES, INDICATE POSITIONING OPERATION44$: BIS (R0),U.BUF(R5) ;SET CONTROLLER FUNCTION BITS BR 10$ ;GO CHECK BLOCK NUMBERM/5$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTIONE1 BIS #505,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTIONC6 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?% BHIS 9$ ;IF HIS FUNCTION IS ILLEGALB8$: JMP 120$ ;EXIT#,9$: BEQ 10$ ;IF EQ FUNCTION IS READ LOGICAL4 SUB #2,U.BUF(R5) ;CONVERT TO WRITE LOGICAL FUNCTION-10$: CALL $BLKCK ;CHECK LOGICAL BLOCK NUMBERO+ CALL $CVLBN ;CONVERT LOGICAL BLOCK NUMBERG TST R1 ;WHICH SURFACE? BEQ 15$ ;IF EQ SURFACE 0 BIS #20,R0 ;SET SURFACE 1 BITO-15$: MOVB U.UNIT(R5),R1 ;RETREIVE UNIT NUMBERG( ASH #13.,R1 ;POSITION UNIT SELECT BITS% ASH #5,R2 ;POSITION CYLINDER NUMBER51 BIS R1,R2 ;MERGE UNIT BITS WITH CYLINDER NUMBERI( BIS R0,R2 ;MERGE TRK/SEC WITH CYLINDER0 MOV R2,I.PRM+10(R3) ;SAVE STARTING DISK ADDRESS;S; INITIATE I/O OPERATION;R30$: ;REF LABEL .IF DF M$$EXT% CALL $MPUBM ;MAP UNIBUS TO TRANSFER  .ENDC% MOV S.CSR(R4),R2 ;GET ADDRESS OF CSRC9 MOV S.PKT(R4),R1 ;RETRIEVE ADDRESS OF I/O REQUEST PACKET ; MOVB S.ITM(R4),S.CTM(R4) ;SET CURRENT DEVICE TIMEOUT COUNT3+ ADD #6,R2 ;POINT TO DISK ADDRESS REGISTER , MOV I.PRM+10(R1),(R2) ;INSERT DISK ADDRESS. MOV U.BUF+2(R5),-(R2) ;INSERT BUFFER ADDRESS8 MOV U.CNT(R5),-(R2) ;INSERT NUMBER OF BYTES TO TRANSFER! ROR (R2) ;CONVERT TO WORD COUNTE$ NEG (R2) ;MAKE NEGATIVE WORD COUNT TST -(R2) ;POINT BACK TO CSR+ MOV #IE.DNR&377,R0 ;ASSUME DRIVE NOT READY TSTB -4(R2) ;IS DRIVE READY? BMI 31$ ;IF MI YES/ BITB #US.SPU,U.STS(R5) ;IS DRIVE SPINNING UP?M BNE 35$ ;IF NE YES/ BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC OPERATION?  BNE 51$ ;IF NE YES# CALL $DVERR ;LOG DEVICE NOT READYI JMP 110$ ;FINISH UPV531$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE SPINNING UPR( CALL $BMSET ;SET I/O ACTIVE BIT IN MAP+ MOV U.BUF(R5),(R2) ;;;LOAD FUNCTION AND GO(;;<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;E#DKCAN: RETURN ;;;NOP FOR THE RK11T;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVES?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANY1A; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESS ; THE UNIT IS ALREADY READY.;-3DKPWF: TSTB S.STS(R4) ;IS THE DRIVE CURRENTLY BUSY?I BEQ 36$ ;IF EQ NO 0 MOVB #3,S.STS(R4) ;WAIT A MAXIMUM OF 45 SECONDS.35$: MOVB #15.,S.CTM(R4) ;15 SECONDS AT A TIME236$: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UP RETURNT;+*; **-$DKINT-RK11 DISK CONTROLLER INTERUPTS;-8 INTSE$ DK00EckLcbDATADATADATADATADATADATADATA,PR5,R$$K11 ;;;SAVE REGISTERS AND SET PRIORITY- TSTB RTTBL+1(R4) ;;;DRIVE RESET IN PROGRESS?E BEQ 50$ ;;;IF EQ NO & MOV R4,-(SP) ;;;SAVE CONTROLLER INDEX' MOV U.SCB(R5),R4 ;;;GET ADDRESS OF SCBD) MOV @S.CSR(R4),R4 ;;;GET CONTENTS OF CSRV$ BMI 40$ ;;;IF MI DRIVE RESET ERROR' BIT #20000,R4 ;;;DRIVE RESET COMPLETE?  BNE 40$ ;;;IF NE YES TST (SP)+ ;;;CLEAN STACK RETURN ;;;S-40$: MOV (SP)+,R4 ;;;RESTORE CONTROLLER INDEXT+50$: CALL $FORK ;;;CREATE A SYSTEM PROCESSI" MOV R4,R3 ;COPY CONTROLLER INDEX% MOV U.SCB(R5),R4 ;GET ADDRESS OF SCBT% MOV S.CSR(R4),R2 ;GET ADDRESS OF CSRE/ MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERV) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESST7 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION EXECUTED?S51$: BNE 130$ ;IF NE YESE TST (R2) ;ANY ERRORS?, BPL 65$ ;IF PL NOP CALL $DVERR ;LOG DEVICE ERRORT* MOV -2(R2),R1 ;SAVE ERROR STATUS REGISTER-53$: MOV S.PKT(R4),R0 ;GET I/O PACKET ADDRESS0& BITB #IQ.X,I.FCN(R0) ;INHIBIT RETRIES BNE 80$ ;IF NE YES" DECB RTTBL(R3) ;ANY MORE RETRIES? BLE 80$ ;IF LE NO MOV #1,(R2) ;CLEAR CONTROLLER 9 CLRB RTTBL+1(R3) ;CLEAR POSSIBLE DRIVE RESET IN PROGRESSV*55$: BIT #110000,R1 ;DRIVE RESET REQUIRED? BEQ 70$ ;IF EQ NO;560$: MOVB #1,RTTBL+1(R3) ;SET DRIVE RESET IN PROGRESSE. MOVB S.ITM(R4),S.CTM(R4) ;RESET TIMEOUT COUNT, MOV S.PKT(R4),R1 ;GET ADDRESS OF I/O PACKET0 MOV I.PRM+10(R1),6(R2) ;SET PROPER DRIVE NUMBER MOV #515,(R2) ;RESET DRIVES RETURN ;./65$: ASRB RTTBL+1(R3) ;DRIVE RESET IN PROGRESS?S BCC 75$ ;IF CC NOY70$: JMP 30$ ;RETRY FUNCTIONE975$: BITB #IO.WLC&377,I.FCN(R1) ;WRITE WITH WRITE CHECK?E BNE 76$ ;IF NE YES- BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED?T BEQ 110$ ;IF EQ NO076$: MOV U.BUF(R5),R1 ;GET CURRENT FUNCTION CODE- BIT #1*2,R1 ;WRITE OR WRITE CHECK FUNCTION?S BEQ 110$ ;IF EQ NO- BIS #2*2,U.BUF(R5) ;SET WRITE CHECK FUNCTIONI* BIT #2*2,R1 ;WAS FUNCTION A WRITE CHECK? BNE 110$ ;IF NE YESR4 MOV #RETRY&377,RTTBL(R3) ;REINITIALIZE RETRY COUNT% BR 70$ ;START WRITE CHECK OPERATION0080$: MOV #IE.WLK&377,R0 ;ASSUME WRITE LOCK ERROR! BIT #20000,R1 ;WRITE LOCK ERROR?K BNE 110$ ;IF NE YESS- MOV #IE.WCK&377,R0 ;ASSUME WRITE CHECK ERRORT ASR R1 ;GOOD ASSUMPTION?# BCS 110$ ;IF CS WRITE CHECK ERRORO, MOV #IE.VER&377,R0 ;SET UNRECOVERABLE ERROR.110$: MOV 2(R2),R1 ;GET WORDS LEFT TO TRANSFER+ ASL R1 ;CONVERT TO BYTES LEFT TO TRANSFER 6 ADD U.CNT(R5),R1 ;CALCULATE BYTES ACTUALLY TRANSFERED MOV #1,(R2) ;CLEAR CONTROLLERA2120$: MOVB S.CON(R4),R3 ;RETREIVE CONTROLLER INDEX/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTK/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNT1# CALL $IODON ;FINISH I/O OPERATION ! JMP DKINI ;PROCESS NEXT REQUEST ;DE; DEVICE TIMEOUT RESULTS IN A CONTROL AND DRIVE RESET FOLLOWED BY THE C; I/O OPERATION BEING REPEATED UNLESS THE OPERATION WAS DIAGNOSTIC.FA; TIMEOUTS ARE USUALLY CAUSED BY POWERFAILURE BUT MAY ALSO BE THE ; RESULT OF A HARDWARE FAILURE.R;7DKOUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?R BEQ 125$ ;;;IF EQ NO- DECB S.STS(R4) ;;;HAVE WE WAITED ENOUGH YET?N BEQ 125$ ;;;IF EQ YESM MTPS #0 ;;;ALLOW INTERRUPTSL JMP 30$ ;N-125$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSYE3 BICB #US.SPU,U.STS(R5) ;;;RESET DRIVE SPINNING UPN# CALL $DTOER ;;;LOG DEVICE TIMEOUT 0 BCC 140$ ;IF CC TIMEOUT DURING NORMAL FUNCTION5130$: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKL) BR 110$ ;DIAGNOSTIC PROCESSING COMPLETED)140$: MOV #110000,R1 ;SET FOR DRIVE RESET. BR 53$ ; .DSABL LSBN .END BEQ 1 .TITLE DLDRVI .IDENT /07.03/ ;$2; COPYRIGHT (C) 1982, 1983, 1984, 1985, 1986, 1988#; BY DIGITAL EQUIPMENT CORPORATION.T; ALL RIGHTS RESERVED.;8<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;;; PREVIOUSLY MODIFIED BY:D;M; P. J. BEZEREDI; R. T. PERRON ; P. J. CARR; D. R. DONCHING ; J. GALLANT; G. MARIGOWDA; +; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY:S;E#; PAUL K. M. WEISS 16-DEC-1987 7.02O00kMcbN;@; PKW146 - SET KS.DIP SO $IODON WON'T DEALLOCATE UMRS ON ATTACH; ; MARC J. NOEL 22-APR-1988 7.03;E@; MJN015 - CLEAR KS.DIP BEFORE SETTING UP THE CONTROLLER INDEX;S; RL11/RL01 DISK DRIVERE;D;Y.MCALL HWDDF$,PKTDF$,QIOSY$ $ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS QIOSY$J;E; EQUATED SYMBOLSR;,RETRY= ^D<8> ;CONTROLLER ERROR RETRY COUNT3RLCNT= ^D<7> ;NUMBER OF REGISTERS TO LOG ON ERRORO*RLBPT= ^D<512*20> ;BYTES PER RL01 SURFACE)RLSPU= ^D<15> ;TIME FOR RL01 TO SPIN UPD;W; RL11 DEVICE REGISTER OFFSETS;"RLCS= 0 ;CONTROL STATUS REGISTERRLBA= 2 ;BUS ADDRESS REGISTERE RLDA= 4 ;DISK ADDRESS REGISTER!RLMP= 6 ;MULTI-PURPOSE REGISTERY+RLBAE= 10 ;BUS ADDRESS EXTENSION REGISTERF; ; RLCS BIT ASSIGNMENTS; ERR= 100000 ;COMPOSITE ERRORDE= 040000 ;DRIVE ERRORL"NXM= 020000 ;NON-EXISTANT MEMORYDLT= 010000 ;DATA LATEHNF= 010000 ;HEADER NOT FOUNDGDCK= 004000 ;DATA CHECK ERRORY HCRC= 004000 ;HEADER CRC ERROR#OPI= 002000 ;OPERATION INCOMPLETE &A17= 000040 ;EXTENDED ADDRESS BIT 17&A16= 000020 ;EXTENDED ADDRESS BIT 16DS0= 000400 ;DRIVE SELECT 0 DS1= 001000 ;DRIVE SELECT 1 DRDY= 1 ;DRIVE READYWCHK= 2 ;WRITE CHECK FUNCTIONTWRITE= 2 ;WRITE OFFSET$GSTS= 4 ;GET DRIVE STATUS FUNCTIONSEEK= 6 ;SEEK FUNCTION RDH= 10 ;READ HEADERS FUNCTIONREAD= 14 ;READ DATA FUNCTIONIE= 100 ;INTERRUPT ENABLE CRDY= 200 ;CONTROLLER READY ;D; RLDA STATUS CODESC;0MRK= 1 ;MARKER BITSTS= 2 ;GET STATUS BITSN= 4 ;SIGN BIT FOR SEEKRST= 10 ;DRIVE RESET BIT(HS= 20 ;HEAD SELECT BIT FOR DIFFERENCE,REV= 200!MRK ;REVERSE SEEK DIFFERENCE WORD;E!; RLMP GET STATUS BIT ASSIGNMENTS;KWDE= 100000 ;WRITE DATA ERRORT!CHE= 040000 ;CURRENT HEAD ERRORT WLS= 020000 ;WRITE LOCK STATUS"SKTO= 010000 ;SEEK TIMEOUT ERRORSPD= 004000 ;SPEED ERRORWGE= 002000 ;WRITE GATE ERRORRVC= 001000 ;VOLUME CHECK!DSE= 000400 ;DRIVE SELECT ERROR DT= 000200 ;DRIVE TYPE!HSS= 000100 ;HEAD SELECT STATUSNCO= 000040 ;COVER OPENHH= 000020 ;HEADS HOMEBH= 000010 ;BRUSHES HOME.SLM= 000005 ;DRIVE IN SEEK-LINEAR MODE STATE;E; DRIVE STATUS FLAGS;S%RVSK= 200 ;REVERSE SEEK IN PROGRESS 0SDWN= 100 ;DRIVE ERROR SETTLE DOWN IN PROGRESS;T ; LOCAL DATA;W; CONTROLLER IMPURE DATA TABLES;,; THESE ARE INDEXED BY THE CONTROLLER NUMBER;G7RTTBL: .BLKW R$$L11 ;RETRY COUNT FOR CURRENT OPERATIONK:PRMSV: .BLKW R$$L11*6 ;PARAMETER SAVE AREA FOR WRITE CHECK VC$DL = 00; $; EXECUTIVE ENTRY POINT VECTOR TABLE;E0EXEVEC: .WORD 0 ; FLAG FOR VECTOR NOT YET FILLEDALOCB: .WORD $ALOCB BLKC2: .WORD $BLKC2 BMSET: .WORD $BMSETVCVLBN: .WORD $CVLBNVDEACB: .WORD $DEACBEDTOER: .WORD $DTOER DVERR: .WORD $DVERRTERRSQ: .WORD $ERRSQFORK: .WORD $FORKFMASK: .WORD $FMASKRGTPKT: .WORD $GTPKTSIODON: .WORD $IODONCMPUBM: .WORD $MPUBMRLCN: .WORD $RLCN RQCND: .WORD $RQCNDRSTMAP: .WORD $STMAP:SGFIN: .WORD $SGFINMVOLVD: .WORD $VOLVDI;CKISR6: .WORD KISAR6;XSCTM: .WORD S.CTM SITM: .WORD S.ITMSKRB: .WORD S.KRBLSOWN: .WORD S.OWNESPKT: .WORD S.PKT.SSTS: .WORD S.STS:SST2: .WORD S.ST2E;.EXEVCL=<<<.-EXEVEC>/2>-1>$;B S.VCTM = -1O S.VITM = -1T S.VKRB = -1T S.COWN = -1. S.VPKT = -1 S.VSTS = -1$ S.VST2 = -1 ;R; SCB REFERENCE PATCH TABLE;T :SCBPAT: .WORD CTM1,SCTMO .WORD CTM2,SCTM .WORD CTM3,SCTM .WORD CTM4,SCTM .WORD ITM1,SITM .WORD ITM2,SITM .WORD ITM3,SITM .WORD RKRB1,SKRB. .WORD KRB1,SKRB .WORD KRB2,SKRB .WORD KRB3,SKRB .WORD KRB4,SKRB .WORD KRB5,SKRB .WORD KRB6,SKRB .WORD KRB7,SKRB .WORD KRB10,SKRBS .WORD KRB11,SKRBS .WORD KRB12,SKRB. .WORD KRB13,SKRBC .WORD KRB14,SKRBM .WORD PKT1,SPKT .WORD PKT2,SPKT .WORD PKT3,SPKT .WORD PKT4,SPKT .WORD PKT5,SPKT .WORD PKT6,SPKT .WORD PKT7,SPKT .WORD STS1,SSTS .WORD STS2,SSTS .WORD STS3,SSTS .WORD STS4,SSTS .WORD RST21,SST2O" .WORD 0 ;END OF THE TABLE;I;,;DRIVER DISPATCH TABLE;.5 DDT$ DL,R$$L11,NEW=00kUcLcbDATADATADATADATADATADATADATAY,OPT=Y ;GENERATE DISPATCH TABLEO;+.; **-DLINI-RL11/RL01 DISK CONTROLLER INITIATOR;KB; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/OA; REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TOPE; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED CONTROLLERPG; IS NOT BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST.SB; ELSE A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPTD; IS SUCCESSFUL, THEN THE NEXT I/O OPERATION IS INITIATED. A RETURN!; TO THE CALLER IS THEN EXECUTED.;+ ; INPUTS:I8; R5= ADRS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;N ; OUTPUTS:?; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST ISE?; WAITING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THEF-; DRIVER INITIATES THE REQUESTED I/O FUNCTIONS;-7DLINI: GTPKT$ DL,R$$L11 ;GET NEXT I/O PACKET TO PROCESSQ;T1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:T;D$; R1= ADRS OF THE I/O REQUEST PACKET1; R2= PHYSICAL UNIT NUMBER OF THE REQUESTED DRIVEO; R3= CONTROLLER INDEX,; R4= ADRS OF THE STATUS CONTROL BLOCK (SCB)2; R5= ADRS OF THE UCB OF THE DRIVE TO BE INITIATED;F6; RL11/RL01 DISK CONTROLLER I/O REQUEST PACKET FORMAT:;E!; WD. 00 -- I/O QUEUE THREAD WORDH/; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERS1; WD. 02 -- ADRS OF THE TCB OF THE REQUESTOR TASKR<; WD. 03 -- POINTER TO 2ND LUN WORD IN REQUESTOR TASK HEADER1; WD. 04 -- CONTENTS OF FIRST LUN WORD (UCB ADRS) ; WD. 05 -- I/O FUNCTION CODEH,; WD. 06 -- VIRTUAL ADRS OF I/O STATUS BLOCK/; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCKN;; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT +140000)I/; WD. 11 -- VIRTUAL ADRS OF AST SERVICE ROUTINES1; WD. 12 -- MEMORY EXTENSION BITS OF I/O TRANSFERW'; WD. 13 -- BUFFER ADRS OF I/O TRANSFER ,; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED; WD. 15 -- NOT USED.D;; WD. 16 -- LOW BYTE MUST BE ZERO AND HIGH BYTE IS NOT USEDD9; WD. 17 -- LOW PART OF LOGICAL BLK NUMBER OF I/O REQUEST A; WD. 20 -- RELOCATION BIAS OF DIAGNOSTIC REG. BLK. ELSE NOT USED C; WD. 21 -- DIAGN. REG. BLOCK ADDRESS (DISPL.+140000) ELSE NOT USEDS;O&; DRIVER USAGE OF WORDS IN I/O PACKET:+; I.PRM+6 (WD. 15) - EXTENDED ADDRESS BITS8; I.PRM+10 (WD. 16) - CYLINDER # OR DESIRED DISK ADDRESSA; I.PRM+12 (WD. 17) - SECTOR/SURFACE # OR BYTES REMAINING TO XFERB;R+ CALL @RQCND ;REQUEST ACCESS TO CONTROLLERO* MOV S.VPKT(R4),R1 ;GET I/O PACKET ADDRESSPKT1=.-2# MOV S.VKRB(R4),R3 ;GET KRB ADDRESSOKRB1=.-2D BIS #KS.DIP,K.STS(R3) ;MARK CONTROLLER AS DATA TRANSFER IN PROGRESS- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXL- MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNT + CALL DLVV ;PROCESS VOLUME VALID FUNCTIONSX, BIT #FE.EXT,@FMASK ;IS THIS A 22-BIT SYSTEM BEQ 15$ ;IF EQ NOI. BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? BEQ 10$ ;IF EQ NO / MOVB U.BUF+1(R5),R0 ;GET EXTENDED ADDRESS BITSC( MOV R0,I.PRM+6(R1) ;SAVE THEM FOR LATER( ASH #4,R0 ;PUT THEM IN THE RIGHT PLACE( BIC #^C<60>,R0 ;JUST GET THE LOW 2 BITS MOV R0,U.BUF(R5) ;SAVE THEM BR 15$ ;110$: CALL @STMAP ;SETUP UNIBUS MAPPING REGISTERSL# CALL @MPUBM ;MAP UNIBUS TO MEMORY .15$: MOV S.VPKT(R4),R1 ;GET I/O PACKET ADDRESSPKT2=.-2. MOVB U.UNIT(R5),U.BUF+1(R5) ;SET UNIT NUMBER, MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION6 BIS #READ!IE,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTION+ CMPB #IO.RLB/^D<256>,I.FCN+1(R1) ;REALLY?C$ BHIS 20$ ;IF HIS FUNCTION IS LEGAL" CALLR DLFIN ;FUNCTION IS ILLEGAL'20$: BEQ 25$ ;IF EQ FUNCTION IS A READ 9 SUB #WRITE,U.BUF(R5) ;CONVERT TO WRITE LOGICAL FUNCTIONC525$: MOV I.PRM+12(R1),R0 ;RETRIEVE SECTOR AND SURFACEU. MOV I.PRM+10(R1),R2 ;RETRIEVE CYLINDER NUMBER ASH #7,R2 ;PUT IT IN POSITION., BIS R0,R2 ;MERGE IN THE SECTOR AND SURFACE/ MOV R2,I.PRM+10(R1) ;SAVE DESIRED DISK ADDRESSN& BIC #^C<77>,R0 ;ISOLATE SECTOR NUMBER9 MOV U.CNT(R5),I.PRM+12(R1) ;ASSUME ONLY ONE XFER NEEDEDY( MOV #^D<40>,R2 ;SET SECTORS PER SURFACE. SUB R0,R2 ;CALCULATE SECTORS LEFT ON SURFACE$ SWAB R2 ;GET BYTES LEFT ON SURFACE5 CMP U.CNT(R5),R2 ;ARE ADDITIONAL TRANSFER00k]cbNS REQUIRED?: BLOS 30$ ;IF LOS NOE4 MOV R2,U.CNT(R5) ;SET BYTE COUNT FOR FIRST TRANSFER'30$: MOV S.VKRB(R4),R3 ;GET KRB ADDRESS KRB2=.-2- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXE3 MUL #6,R3 ;FORM AN INDEX INTO PARAMETER SAVE AREAB# ADD #PRMSV,R3 ;POINT TO THIS ENTRY- MOV U.BUF(R5),(R3)+ ;SAVE INITIAL PARAMETERSF MOV U.BUF+2(R5),(R3)+ ;... MOV U.CNT(R5),(R3)+ ;...B MOV I.PRM+10(R1),(R3)+ ;...  MOV I.PRM+12(R1),(R3)+ ;...S MOV I.PRM+6(R1),(R3)+ ;...;+*; THIS SECTION WILL INITIATE THE OPERATION;-0DLINIO: MOV @S.VKRB(R4),R2 ;RETREIVE CSR ADDRESSKRB3=.-2- MOV S.VPKT(R4),R3 ;GET ADDRESS OF I/O PACKETPKT3=.-2$ CLRB U.CW2+1(R5) ;CLEAR DRIVE FLAGS5 BITB #US.VV,U.STS(R5) ;IS SOFTWARE VOLUME VALID SET?E BEQ 5$ ;IF EQ NO CALL DLGST ;GET DRIVE STATUS BR 6$ ;SKIP RESETI+5$: CALL DLRST ;RESET DRIVE AND GET STATUS.(6$: MOV RLMP(R2),R1 ;GET THE STATUS INFO+ BIC #WLS!DT!HSS,R1 ;REMOVE IRRELEVANT BITS $ BIT #DRDY,(R2) ;IS THE DRIVE READY? BEQ 20$ ;IF EQ NOW4 BITB #US.VV,U.STS(R5);IS SOFTWARE VOLUME VALID SET? BEQ 10$ ;IF EQ NOA" BIT #VC,R1 ;IS VOLUME CHECK SET?, BNE 20$ ;IF NE ERROR OR POWERFAIL RECOVERY4 CALL DLRST ;CLEAR ANY OTHER DRIVE ERROR CONDITIONS% MOV RLMP(R2),R1 ;GET THE STATUS INFO5+ BIC #WLS!DT!HSS,R1 ;REMOVE IRRELEVANT BITS$ BIT #DRDY,(R2) ;IS THE DRIVE READY? BEQ 20$ ;IF EQ NOS410$: CMP #HH!BH!SLM,R1 ;HEADS, BRUSHES AND STATE OK? BEQ 35$ ;IF EQ YES720$: BITB #US.SPU,U.STS(R5) ;IS THE DRIVE SPINNING UP?/ BNE DLPWF1 ;IF NE YES, WAIT FOR IT TO SPIN UPO( CALL DLDVER ;LOG DRIVE NOT READY ERROR.25$: MOV #IE.DNR&377,R0 ;SET RETURN ERROR CODE CALLR DLFIN ;EXIT FATALI$30$: CALL DLRST ;RESET DRIVE ERRORS435$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE SPINNING UP4 MOV I.PRM+10(R3),R0 ;RETREIVE STARTING DISK ADDRESS( CALL DLDIFF ;CALCULATE DIFFERENCE WORD*DLGO: BEQ 40$ ;IF EQ NO SEEK IS NECESSARY) MOV #SEEK,R1 ;GET CODE FOR SEEK FUNCTION  CALL DLXCT ;EXECUTE THE SEEK. BMI DLEROR ;IF MI ERROR DURING SEEK FUNCTION240$: MOVB S.VITM(R4),S.VCTM(R4) ;SET TIMEOUT COUNTITM1=.-4CTM1=.-2. BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? BEQ 45$ ;IF EQ NON7 MOV I.PRM+6(R3),RLBAE(R2) ;LOAD EXTENDED ADDRESS BITS: 45$: ADD #RLMP,R2 ;POINT TO RLMP! MOV U.CNT(R5),R1 ;GET BYTE COUNT0 ROR R1 ;MAKE IT A WORD COUNT NEG R1 ;ALSO NEGATIVEE MOV R1,(R2) ;LOAD WORD COUNT4 MOV I.PRM+10(R3),-(R2) ;LOAD STARTING DISK ADDRESS* MOV U.BUF+2(R5),-(R2) ;LOAD BUS ADDRESS( CALL @BMSET ;SET I/O ACTIVE BIT IN MAP, MOV U.BUF(R5),-(R2) ;;;LOAD FUNCTION AND GO;+<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;-DLCAN: RETURN ;;;NOP FOR RL11N;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVER?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANY A; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESSS; THE UNIT IS ALREADY READY.;-3DLPWF: BCS DLCAN ;IGNORE CONTROLLER POWERFAIL CALLC) TSTB S.VSTS(R4) ;IS DRIVE CURRENTLY BUSYESTS1=.-2 BEQ DLPWF2 ;IF EQ NO7 MOVB #4,S.VSTS(R4) ;ALLOW FOR A FULL MINUTE TO SPIN UPVSTS2=.-26DLPWF1: MOVB #RLSPU,S.VCTM(R4);EXTEND TIMEOUT FOR UNITCTM2=.-25DLPWF2: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UPA RETURN ;L;+%; **-$DLINT-RL11/RL01 DISK CONTROLLERH&; INTERRUPT AND ERROR SERVICE ROUTINES;-8 INTSE$ DL,PR5,R$$L11 ;;;SAVE REGISTERS AND SET PRIORITY( CALL @FORK ;;;CREATE A SYSTEM PROCESS' MOV U.SCB(R5),R4 ;RETRIEVE SCB ADDRESS3 BITB #RVSK,U.CW2+1(R5) ;REVERSE SEEK IN PROGRESS? BEQ 5$ ;! JMP DLIO1 ;IF NE YESL5 5$: MOV @S.VKRB(R4),R2 ;RETRIEVE CSR ADDRESSCKRB4=.-20 MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL OPERATION/ MOV S.VPKT(R4),R3 ;RETRIEVE I/O PACKET ADDRESSLPKT4=.-2# MOV (R2),R1 ;GET CONTENTS OF RLCS% BMI DLEROR ;IF MI AN ERROR OCCURRED8 SUB U.CNT(R5),I.PRM+12(R3) ;GET BYTES LEFT TO TRANSFER BEQ DLPASS ;IF EQ NONE LEFTY9 MOV I.PRM+12(R300kecLcbDATADATADATADATADATADATADATA),U.CNT(R5) ;ASSUME LAST TRANSFER COMINGT5 CMP I.PRM+12(R3),#RLBPT ;IS THIS THE LAST TRANSFER?  BLOS 10$ ;IF LOS YES3 MOV #RLBPT,U.CNT(R5);TRANSFER A WHOLE TRACKS WORTH(/10$: BIC #CRDY,R1 ;CLEAR CRDY TO START FUNCTIONS9 MOV R1,U.BUF(R5) ;SAVE CURRENT FUNCTION AND ADDRESS BITS34 MOV RLBA(R2),U.BUF+2(R5) ;SAVE CURRENT BUS ADDRESS. BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? BEQ 20$ ;IF EQ NOB7 MOV RLBAE(R2),I.PRM+6(R3) ;SAVE EXTENDED ADDRESS BITSQ220$: MOV I.PRM+10(R3),R0 ;GET INITIAL DISK ADDRESS MOV R0,R1 ;COPY DISK ADDRESS- BIS #77,R0 ;UPDATE CYLINDER AND SURFACE ... & INC R0 ;... LEAVING SECTOR BITS ZERO+ MOV R0,I.PRM+10(R3) ;SAVE NEW DISK ADDRESST0 CALL DLDIF0 ;CALCULATE MID-TRANSFER DIFFERENCE! CALLR DLGO ;GO DO THE OPERATION )DLEROR: BIT #DRDY,R1 ;IS THE DRIVE READY?U BEQ 25$ ;IF NE YES& MOV RLMP(R2),R1 ;GET THE STATUS INFO, BIC #WLS!DT!HSS,R1 ;REMOVE IRRELEVANT BITS0 CMP #HH!BH!SLM,R1 ;HEADS, BRUSHES AND STATE OK? BEQ DLERR ;YES, THEN DO RETRYE925$: MOVB S.VITM(R4),S.VCTM(R4);WAIT FOR DRIVE TO QUIESCESITM2=.-4CTM3=.-26 MOVB #SDWN,U.CW2+1(R5) ;FLAG SETTLE DOWN IN PROGRESS RETURN ;R.DLERR: MOV (R2),R1 ;RETRIEVE CONTENTS OF RLCS. BITB #IQ.UMD,I.FCN(R3) ;DIAGNOSTIC FUNCTION?* BNE DLPASS ;IF NE YES, GO PASS REGISTERS! MOV R1,-(SP) ;SAVE RLCS CONTENTS2 CALL DLDVER ;LOG DEVICE ERROR ( MOV (SP),R1 ;RETRIEVE CONTENTS OF RLCS+ MOV #IE.BBE&377,R0 ;ASSUME BAD BLOCK ERROR; COM (SP) ;TOGGLE THE BITS& BIT #HCRC!OPI,(SP)+ ;BAD BLOCK ERROR? BEQ DLFIN ;IF EQ YES/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERROR# BIT #NXM,R1 ;NON-EXISTANT MEMORY?  BNE DLFIN ;IF NE YES BIT #DE,R1 ;DRIVE PROBLEMS?R BEQ 50$ ;IF EQ NOL/ CALL DLGST ;EXECUTE GET DRIVE STATUS FUNCTION?% BIT #WGE,RLMP(R2) ;WRITE GATE ERROR?S BEQ DLFIN ;IF EQ NOV. BIT #WLS,RLMP(R2) ;IS THE DRIVE WRITE LOCKED? BEQ DLRTY ;IF EQ NOI. MOV #IE.WLK&377,R0 ;SET WRITE LOCK ERROR CODE BR DLFIN ;-50$: BIT #10,U.BUF(R5) ;WRITE CHECK FUNCTION?O BNE DLRTY ;IF NE NOO$ BIT #OPI,R1 ;OPERATION INCOMPLETE? BNE DLRTY ;IF NE YES! BIT #DCK,R1 ;WRITE CHECK ERROR?E BEQ DLRTY ;IF EQ NOD4 MOV #IE.WCK&377,R0 ;YES, SET WRITE CHECK ERROR CODE5DLRTY: MOV S.VPKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESSSPKT5=.-2' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES? BNE DLFIN ;IF NE YES( MOV S.VKRB(R4),R3 ;RETRIEVE KRB ADDRESSKRB5=.-2( MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX' DECB RTTBL(R3) ;ANY MORE RETRIES LEFT?0 BLE DLFIN ;IF LE NOR%DLIO: CALL DLRST ;RESET DRIVE ERRORSE*DLIO1: JMP DLINIO ;RETRY ENTIRE OPERATION5DLPASS: BITB #IQ.UMD,I.FCN(R3) ;DIAGNOSTIC FUNCTION?E BEQ 10$ ;IF EQ NON3 MOV I.PRM+14(R3),@KISR6;SET BUFFER RELOCATION BIASO1 MOV I.PRM+16(R3),R3 ;GET REGISTER BUFFER ADDRESSD) CALL REGPAS ;MOVE REGISTERS INTO BUFFERH BR DLFIN ;EXIT910$: BITB #IO.WLC&377,I.FCN(R3) ;WRITE WITH WRITE CHECK?E BNE 20$ ;IF NE YES. BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED? BEQ DLFIN ;IF EQ NOT020$: MOV U.BUF(R5),R1 ;GET CURRENT FUNCTION CODE- BIT #WCHK,R1 ;WRITE OR WRITE CHECK FUNCTION?I BEQ DLFIN ;IF EQ NO ' BIT #10,R1 ;WAS FUNCTION WRITE CHECK?I BEQ DLFIN ;IF EQ YES# MOV S.VKRB(R4),R1 ;GET KRB ADDRESSEKRB6=.-2- MOVB K.CON(R1),R1 ;RETRIEVE CONTROLLER INDEXF' MOV #RETRY,RTTBL(R1);RESET RETRY COUNTR3 MUL #6,R1 ;FORM AN INDEX INTO PARAMETER SAVE AREA7 ADD #PRMSV,R1 ;...I1 MOV (R1)+,U.BUF(R5) ;RESTORE STARTING PARAMETERSC MOV (R1)+,U.BUF+2(R5) ;... MOV (R1)+,U.CNT(R5) ;...T MOV (R1)+,I.PRM+10(R3) ;...R MOV (R1)+,I.PRM+12(R3) ;...R MOV (R1)+,I.PRM+6(R3) ;...3 BIC #10,U.BUF(R5) ;CONVERT TO WRITE CHECK FUNCTIONI BR DLIO ;START THE WRITE CHECK3DLFIN: MOV S.VPKT(R4),R2 ;GET ADDRESS OF I/O PACKETPKT6=.-2, MOV I.PRM+4(R2),R1 ;GET TOTAL TRANSFER SIZE0 SUB I.PRM+12(R2),R1 ;CALCULATE BYTES TRANSFERED# MOV S.VKRB(R4),R3 ;GET KRB ADDRESSKRB7=.-2* BIC #KS.DIP,K.STS(R3) ;DATA TRANSFER OVER- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEX.) MOVB RTTBL(R3),R2 ;GET FINAL RETRY COUNTP3 BIS #RETRY*^D<256>,R2 ;MERGE STARTING RETRY COUNTV$ CALL 00kmcbN@RLCN ;RELEASE THE CONTROLLER# CALL @IODON ;FINISH I/O OPERATIONO! JMP DLINI ;PROCESS NEXT REQUESTK;+$; **-DLOUT-RL11/RL01 DISK CONTROLLER; DEVICE TIMEOUT ROUTINE;I9; DEVICE TIMEOUT RESULTS IN THE OPERATION BEING REPEATED.1=; TIMEOUTS ARE USUALLY CAUSED BY A POWER FAILURE BUT MAY ALSOS*; BE THE RESULT OF A HARDWARE MALFUNCTION.;-7DLOUT: MOV S.VPKT(R4),R3 ;;;RETRIEVE I/O PACKET ADDRESSMPKT7=.-21 BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?, BEQ 20$ ;;;IF EQ NOR0 DECB S.VSTS(R4) ;;;HAVE WE WAITED A MINUTE YET?STS3=.-2 BNE 10$ ;;;IF NE NOO) INCB S.VSTS(R4) ;;;LEAVE CONTROLLER BUSYSTS4=.-2 BR 30$ ;;;LOG DEVICE TIMEOUT!10$: MTPS #0 ;;;ALLOW INTERRUPTST! BR DLIO ;RETRY ENTIRE OPERATIONN720$: BITB #SDWN,U.CW2+1(R5) ;;;IS DRIVE SETTLING DOWN?I BEQ 30$ ;;;IF EQ NOE! MTPS #0 ;;;YES, ALLOW INTERUPTSO JMP DLERR ;PROCESS THE ERROR!30$: MTPS #0 ;;;ALLOW INTERRUPTS. BITB #IQ.UMD,I.FCN(R3) ;DIAGNOSTIC FUNCTION?* BNE DLPASS ;IF NE YES, GO PASS REGISTERS! CALL DLDTER ;LOG DEVICE TIMEOUTT) MOV #IE.DNR&377,R0 ;SET DEVICE NOT READYI JMP DLRTY ;RETRY OPERATION;+0; **-DLXCT,DLGST,DLRST-RL11/RL01 DISK CONTROLLER; FUNCTION EXECUTION ROUTINEST;B5; THIS ROUTINE WILL EXECUTE A GET DRIVE STATUS OR ANY+9; NON-INTERRUPTABLE FUNCTION AND WAIT FOR ITS COMPLETION.;P ; INPUTS:S; R1 = FUNCTION CODE; R2 = CSR ADDRESS; R5 = UCB ADDRESS; ; OUTPUTS: ; R1 = CONTENTS OF RLCS (TESTED); FUNCTION EXECUTED?;-<DLRST: MOV #RST!STS!MRK,RLDA(R2) ;SET MESSAGE CODES IN RLDA& CALL DLDST ;DO THE DRIVE RESET FIRST8DLGST: MOV #STS!MRK,RLDA(R2) ;SET MESSAGE CODES IN RLDA,DLDST: MOV #GSTS,R1 ;SET GET STATUS FUNCTION'DLXCT: MOV R1,-(SP) ;SAVE FUNCTION CODES/ MOVB U.UNIT(R5),1(SP);MERGE CURRENT DRIVE BITS MOV (SP)+,(R2) ;LOAD RLCS410$: BIT #ERR!CRDY,(R2) ;FUNCTION COMPLETE OR ERROR? BEQ 10$ ;IF EQ NO=, MOV (R2),R1 ;SAVE RLCS AND TEST FOR ERRORS RETURN ;N;+%; **-DLDIFF-RL11/RL01 DISK CONTROLLER(; CYLINDER ADDRESS DIFFERENCE CALCULATOR;M<; THIS SUBROUTINE CALCULATES THE DIFFERENCE WORD USED IN THE@; SEEK OPERATION. IF A HEADER CANNOT BE READ AFTER 16. RETRIES,A; AN ERROR WILL BE LOGGED AND A ONE CYLINDER REVERSE SEEK WILL BEC=; ISSUED. THE SEEK IS FOLLOWED BY A READ HEADERS TO CAUSE ANM ; INTERRUPT.;A ; INPUTS::; R0 = DESIRED DISK ADDRESS ;P ; OUTPUTS:; R1 = DIFFERENCE WORD$; RLDA = LOADED WITH DIFFERENCE WORD; IF EQ NO SEEK IS NECESSARY;-7DLDIFF: MOV #RETRY*2,-(SP) ;SET READ HEADER RETRY COUNTE110$: MOV #RDH,R1 ;CODE FOR READ HEADERS FUNCTIONT" CALL DLXCT ;EXECUTE THE FUNCTION% BPL 20$ ;IF PL FUNCTION EXECUTED OKA DEC (SP) ;ANY RETRIES LEFT?R BGT 10$ ;IF GT YES8 CMP (SP)+,(SP)+ ;REMOVE RETRY COUNT AND CALLERS ADDRESS CALL DLDVER ;LOG HEADER ERRORU CALL DLRST ;RESET DRIVE 5 MOV #REV,RLDA(R2) ;LOAD REVERSE SEEK DIFFERENCE WORD) MOV #SEEK,R1 ;GET CODE FOR SEEK FUNCTIONH. MOV #IE.VER&377,R0 ;ASSUME THE SEEK WILL FAIL CALL DLXCT ;EXECUTE THE SEEK BMI DLFIN ;IF MI WE FAILED/ BIC #^C,R1 ;GET ONLY UNIT SELECT BITSO+ BIS #IE!RDH,R1 ;LOAD CODES FOR READ HEADER2; MOVB #RVSK,U.CW2+1(R5) ;INDICATE REVERSE SEEK IN PROGRESST7 MOVB S.VITM(R4),S.VCTM(R4) ;SET DEVICE TIMEOUT COUNTERCITM3=.-4CTM4=.-2# MOV R1,(R2) ;LOAD FUNCTION AND GOU! RETURN ;WAIT FOR THE INTERRUPT##20$: TST (SP)+ ;REMOVE RETRY COUNTR& MOV RLMP(R2),R1 ;RETREIVE HEADER WORD)DLDIF0: BIC #77,R0 ;MASK OUT SECTOR BITS  BIC #77,R1 ;...% CMP R0,R1 ;DO WE NEED TO DO A SEEK?F BEQ 40$ ;IF EQ NO( MOV R0,-(SP) ;SAVE DESIRED DISK ADDRESS' BIC #^C<100>,(SP) ;ISOLATE SURFACE BITE( ASR (SP) ;PUT INTO THE PROPER POSITION ASR (SP) ;... ! BIC #100,R0 ;REMOVE SURFACE BITT BIC #100,R1 ;...) SUB R0,R1 ;SUBTRACT DESIRED FROM ACTUAL,%; BEQ 30$ ;IF EQ ONLY CHANGE SURFACE $ BCC 30$ ;IF CC ACTUAL .GE. DESIRED4 NEG R1 ;ACTUAL < DESIRED, MAKE POSITIVE DIFFERENCE1 BIS #SN,R1 ;SET SIGN FOR MOVE TO CENTER OF DISKT30$: INC R1 ;SET MARKER BIT# BIS (SP)+,R1 ;MERGE IN SURFACE BITQ& MOV R1,RLDA(R2) ;LOAD DIFFERENCE WO00kucLcbDATADATADATADATADATADATADATARD40$: RETURN ;S;+%; **-DLDXXX-RL11/RL01 DISK CONTROLLERR; ERROR LOGGING ROUTINES;OB; THIS ROUTINE IS CALLED WHENEVER A DEVICE ERROR OR DEVICE TIMEOUTD; OCCURS. A CORE BLOCK THE SIZE OF THE REGISTER BUFFER IS ALLOCATEDB; AND THE UNIBUS REGISTERS ALONG WITH THE DRIVE STATUS INFORMATIONB; ARE TRANSFERED INTO THE CORE BLOCK AND THE APPROPRIATE EXECUTIVE>; ERROR LOGGING ROUTINE IS CALLED. FINALLY, THE CORE BLOCK IS<; DEALLOCATED AND THE CSR AND CONTROLLER INDEX ARE RESTORED.;F?; IF FOR ANY REASON THE CORE BLOCK CANNOT BE ALLOCATED THEN THEKB; EXECUTIVE ERROR LOGGING ROUTINE WILL NOT BE CALLED AND THE ERRORA; SEQUENCE NUMBER WILL BE UPDATED TO INDICATE THAT A MISSED ERROR ; CONDITION OCCURRED.R;F ; INPUTS:C; R2 = CSR ADDRESS; R4 = SCB ADDRESS; ; OUTPUTS:; R0, R1 ARE DESTROYED; R3 = CONTROLLER INDEXB;- .ENABL LSBR6DLDVER: MOV DVERR,-(SP) ;ADDRESS OF EXEC ERROR ROUTINE BR 10$ ;8DLDTER: MOV DTOER,-(SP) ;ADDRESS OF EXEC TIMEOUT ROUTINE610$: MOV #RLCNT*2,R1 ; GET NUMBER OF BYTES TO ALLOCATE$ CALL @ALOCB ;ALLOCATE A CORE BLOCK$ BCC 20$ ;IF CC BLOCK WAS ALLOCATED/ INC @ERRSQ ;INDICATE A MISSED ERROR CONDITIONP: CMP (SP)+,DTOER ;ALLOCATION FAILURE, TIMEOUT IN PROGRESS? BNE 30$ ;IF NE NO ) MOV @S.VKRB(R4),R2 ;RETRIEVE CSR ADDRESS KRB10=.-2 ' BIC #IE,(R2) ;;;CLEAR INTERRUPT ENABLEN MTPS #0 ;;;ALLOW INTERRUPTSR/ BR 30$ ;DON'T LOG ERROR IF ALLOCATION FAILURE*20$: MOV R0,R3 ;SET POINTER TO CORE BLOCK$ MOV @S.VKRB(R4),R2 ;GET CSR ADDRESS KRB11=.-2G- CALL REGPAS ;MOVE REGISTERS INTO CORE BLOCKA$ MOV R0,R2 ;COPY CORE BLOCK ADDRESS. CALL @(SP)+ ;CALL EXEC ERROR LOGGING ROUTINE) MOV R2,R0 ;GET BACK CORE BLOCK ADDDRESSL3 MOV #RLCNT*2,R1 ;GET NUMBER OF BYTES TO DEALLOCATE ( CALL @DEACB ;DEALLOCATE THE CORE BLOCK'30$: MOV S.VKRB(R4),R3 ;GET KRB ADDRESSE KRB12=.-2T# MOV (R3),R2 ;RETRIEVE CSR ADDRESST- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXL RETURN: .DSABL LSBS;+@; MOVE THE CONTROLLER/DRIVE REGISTERS INTO THE SPECIFIED BUFFER.; ; INPUTS:S; R2 = CSR ADDRESS; R3 = BUFFER ADDRESS,;-!REGPAS: MOV (R2),(R3)+ ;MOVE RLCS+ MOV RLBA(R2),(R3)+ ;MOVE RLBA MOV RLDA(R2),(R3)+ ;MOVE RLDA MOV RLMP(R2),(R3)+ ;MOVE RLMP CLR (R3)+ ;ASSUME NO RLBAE. BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? BEQ 10$ ;IF EQ NO, MOV RLBAE(R2),-2(R3);MOVE RLBAE$10$: CLR (R3)+ ;EXTRA WORD IS BLANK/ CALL DLGST ;EXECUTE GET DRIVE STATUS FUNCTIONR% MOV RLMP(R2),(R3) ;SAVE DRIVE STATUSC RETURN ;V;+(; **-DLVV-PROCESS VOLUME VALID FUNCTIONS;S;; THIS ROUTINE WILL VALIDATE VOLUME VALID AND HANDLE DEVICE -; SPECIFIC VOLUME VALID AND SIZING FUNCTIONS. ;V ; INPUTS:V; R1 = I/O PACKET ADDRESS; R4 = SCB ADDRESS; R5 = UCB ADDRESS; ; OUTPUTS:6; IF THIS IS A TRANSFER FUNCTION ONLY R0 IS DESTROYED.7; IF THIS IS A VOLUME VALID FUNCTION, THE PROPER ACTION:6; IS TAKEN AND CONTROL IS TRANSFERED DIRECTLY TO THE; PROPER PLACE IN THE DRIVER.R;-)DLVV: CALL @VOLVD ;VALIDATE VOLUME VALID BCS 20$ ;IF CS WE FAILED& TST R0 ;IS THIS A TRANSFER FUNCTION? BMI 40$ ;IF MI YES$ MOV @S.VKRB(R4),R2 ;GET CSR ADDRESS KRB13=.-2 $ MOV R1,R3 ;COPY I/O PACKET ADDRESS( CALL DLRST ;RESET DRIVE AND GET STATUS TST I.PRM+2(R3) ;SIZE THE DISK? BPL 10$ ;IF PL NOT TST (SP)+ ;REMOVE RETURN. MOV #IE.SZE&377,R0 ;ASSUME NON-EXISTANT DRIVE# MOV (R2),R1 ;GET CONTENTS OF RLCSD. BIC #^C,R1 ;GET RID OF UNWANTED BITS' CMP #ERR!OPI,R1 ;DOES THE DRIVE EXIST?L BEQ 30$ ;IF EQ NOL( MOV #IS.SUC&377,R0 ;YES, ASSUME SUCCESS' CALLR DLPASS ;PASS REGISTERS AND EXITI010$: BIT #VV$SET,I.PRM+2(R3) ;SET VOLUME VALID? BEQ 25$ ;IF EQ NOV, MOV RLMP(R2),R1 ;GET THE STATUS INFORMATION$ BIT #DRDY,(R2) ;IS THE DRIVE READY? BEQ 15$ ;IF EQ NOS+ BIC #WLS!DT!HSS,R1 ;REMOVE IRRELEVANT BITS 0 CMP #HH!BH!SLM,R1 ;HEADS, BRUSHES AND STATE OK? BEQ 25$ ;IF EQ YES,15$: MOV #IE.DNR&377,R0 ;SET DRIVE NOT READY720$: BICB #US.VV,U.STS(R5) ;CLEAR SOFTWARE VOLUME VALIDE25$: TST (SP)+ ;REMOVE RETURN30$: CALLR DLFIN ;FINISH UP40$: RETURN 00k}cbN ;D;+'; **-DLCHK-VALIDATE AND CONVERT THE LBNS;I9; THIS ROUTINE IS CALLED FROM $DRQRQ TO DO LBN PROCESSINGR9; FOR DEVICES WHICH SUPPORT QUEUE OPTIMIZATION. IF BLKC2 9; DETECTS AN ERROR IT WILL RETURN TO THE CORRECT PLACE IN ; $DRQRQ AFTER CALLING $IOALT.;B ; INPUTS:E; R1 = I/O PACKET ADDRESS; R4 = SCB ADDRESS; R5 = UCB ADDRESS;R ; OUTPUTS:7; IF THE CHECKS SUCCEED, THEN THE LBN IN THE I/O PACKETL4; IS REPLACED BY THE DISK ADDRESS. R1 IS PRESERVED.;F8; IF THE CHECKS FAIL, THE $IOALT IS ENTERED WITH A FINAL7; STATUS OF IE.BLK AND A RETURN TO THE CORRECT PLACE IN ; $DRQRQ IS EXECUTED.S;R; R0, R2, AND R3 ARE DESTROYED.U;P<; NOTE: ALL FUNCTIONS PUT INTO THE DRIVER QUEUE ARRIVE HERE.=; THESE FUNCTIONS INCLUDE, IO.ATT, IO.DET, AND ACP FUNCTIONS.U;-9DLCHK: CMPB #IO.ATT/256.,I.FCN+1(R1) ;IS THIS AN ATTACH?D$ BEQ 30$ ;IF EQ YES, LEAVE IT ALONE2 CMPB #IO.DET/256.,I.FCN+1(R1) ;IS THIS A DETACH?$ BEQ 30$ ;IF EQ YES, LEAVE IT ALONE' MOV I.FCN(R1),-(SP) ;GET FUNCTION CODET$ BIC #7,(SP) ;REMOVE QUALIFIER BITS0 CMP #IO.STC,(SP)+ ;IS IT A SET CHARACTERISTICS?$ BEQ 30$ ;IF EQ YES, LEAVE IT ALONE4 MOV I.PRM+12(R1),R0 ;RETRIEVE STARTING BLOCK NUMBER+ MOV R1,R3 ;ASSUME PHYSICAL BLOCK FUNCTIONI6 BITB #IO.WPB&377,I.FCN(R1) ;PHYSICAL BLOCK FUNCTION? BNE 20$ ;IF NE YES) CALL @BLKC2 ;CHECK LOGICAL BLOCK NUMBERQ0 CMPB #IO.WLB/256.,I.FCN+1(R3) ;WRITE FUNCTION? BNE 10$ ;IF NE NOH8 BITB #IO.WLT&377,I.FCN(R3) ;WRITE LAST TRACK FUNCTION? BNE 10$ ;IF NE YES/ MOV R0,I.PRM+6(R3) ;SAVE STARTING BLOCK NUMBERS, ADD #20.,(R1) ;ADD 1 TRACKS WORTH OF BLOCKS$ MOV R3,R1 ;COPY I/O PACKET ADDRESS) CALL @BLKC2 ;CHECK LOGICAL BLOCK NUMBERN; MOV I.PRM+6(R3),R0 ;RESTORE ORIGINAL STARTING BLOCK NUMBER'10$: ASL R0 ;CONVERT BLOCKS TO SECTORSO20$: CLR R2 ;NO HIGH BITS* CALL @CVLBN ;CONVERT LBN TO DISK ADDRESS! ASH #6,R1 ;POSITION SURFACE BITR& BIS R1,R0 ;MERGE SURFACE WITH SECTOR5 MOV R0,I.PRM+12(R3) ;SAVE SECTOR AND SURFACE ADDRESST4 MOV R2,I.PRM+10(R3) ;SAVE STARTING CYLINDER ADDRESS$ MOV R3,R1 ;COPY I/O PACKET ADDRESS30$: RETURN ;R;+,; **-DLKRB-CONTROLLER ONLINE/OFFLINE ROUTINE;L;; THIS ROUTINE WILL HANDLE RECONFIGURATION CALLS FOR ONLINERB; CONTROLLER AND OFFLINE CONTROLLER FOR THE RL11, RLV11 AND RLV12.; C; FOR ONLINE, IT WILL DETERMINE IF THE RLBAE REGISTER EXISTS AND IFI@; SO, IT WILL INSURE THAT THE ADDRESS BITS ARE REPLICATED IN THE; CSR.;T&; FOR OFFLINE, KS.EXT WILL BE CLEARED.; ; INPUTS: ; R2 = KRB ADDRESS; R3 = CTB ADDRESS; C=1 IF OFFLINE REQUEST; C=0 IF ONLINE REQUESTT;D ; OUTPUTS:8; FOR ONLINE, KS.EXT WILL BE SET IF THE CONTROLLER HAS A; VALID RLBAE.!; FOR OFFLINE, KS.EXT IS CLEARED.N;-.DLKRB: BIC #KS.EXT,K.STS(R2) ;ASSUME NO RLBAE BCS 20$ ;IF CS OFFLINE REQUEST TST EXEVEC ;IF DONE ALREADYM BNE 2$ ;SKIP THISS MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) ;SAVE R3 MOV KINAR6,-(SP) ;SAVE KINAR6. MOV @#112,R0 ;GET ADDRESS OF TABLE OF ENTRIES: MOV (R0),R0 ;GET ADDRESS OF APR BIAS (1ST WORD IN TABLE)1 MOV (R0),KINAR6 ;MAP COMMON THROUGH I-SPACE APR6U MOV #EXEVEC,R3 ;POINT TO VECTOR) MOV #EXEVCL,R2 ;SPECIFY LENGTH OF VECTORA$ CALL @#140004 ;TRANSLATE THE VECTOR MOV (SP)+,KINAR6 ;RESTOR KINAR6 MOV (SP)+,R3 ;RESTORE R3O MOV (SP)+,R2 ;RESTORE R2F( MOV #SCBPAT,R0 ;GET PATCH TABLE ADDRESS#1$: MOV (R0)+,R1 ;MOVE TABLE ENTRY P BEQ 2$ ;IF EQ END OF THE TABLE' MOV @(R0)+,(R1) ;IF NEQ START TO PATCH1 BR 1$ ;COMPLETE IT 02$: BIT #FE.EXT,@FMASK ;IS THIS A 22-BIT SYSTEM? BEQ 20$ ;IF EQ NOL- CALL @SGFIN ;TURN NXM'S INTO SET CARRY BITSE# MOV (R2),R4 ;RETREIVE CSR ADDRESST- BIS #A16!A17,(R4) ;SET EXTENDED ADDRESS BITS CLR RLBAE(R4) ;CLEAR RLBAE BITS% BCS 10$ ;IF CS RLBAE DOES NOT EXISTM/ BIT #A16!A17,(R4) ;DID THE ADDRESS BITS CLEAR?R BNE 10$ ;IF NE NOG/ BIS #KS.EXT,K.STS(R2) ;YES, SET RLBAE PRESENTB0 ADD K.OFF(R2),R2 ;CALCULATE OFFSET TO UCB TABLE4 MOV #RLBAE,KE.RHB(R2) ;SET BAE OFFSET IN DATA BASE*10$: BIC #A16!A17,(R4) ;RESET ADDRESS BITS20$: RETURN ;Q;+&; **-DLUCB-UNI00kcc*cDATADATADATADATADATADATADATAT ONLINE/OFFLINE ROUTINE;S;; THIS ROUTINE WILL HANDLE RECONFIGURATION CALLS FOR ONLINE11; UNIT AND OFFLINE UNIT FOR RL01 AND RL02 DRIVES.R;;=; FOR ONLINE, IF KS.EXT IS SET THEN DV.EXT IS ALSO SET. THIS#;; IS DONE TO ELIMINATE UNNECESSARY CODE TO RETREIVE THE KRBN ; ADDRESS.;T!; FOR OFFLINE, DV.EXT IS CLEARED.B;A ; INPUTS:); R3 = CONTROLLER INDEXU; R4 = SCB ADDRESS; R5 = UCB ADDRESS; C=1 IF ONLINE REQUEST0; C=0 IF OFFLINE REQUEST;D ; OUTPUTS:3; FOR ONLINE, DV.EXT IS SET IN THE UCB IF KS.EXT ISE; SET IN THE KRB.S!; FOR OFFLINE, DV.EXT IS CLEARED.N;-.DLUCB: BIC #DV.EXT,U.CW1(R5) ;ASSUME NO RLBAE BCS 10$ ;IF CS OFFLINE REQUEST# MOV S.VKRB(R4),R2 ;GET KRB ADDRESSO KRB14=.-2#. BIT #KS.EXT,K.STS(R2) ;DOES THE RLBAE EXIST? BEQ 10$ ;IF EQ NOR, BIS #DV.EXT,U.CW1(R5) ;YES, SET BIT IN UCB10$: RETURN ;  .ENDRLER INDEXU; R4 = SCB ADDRESS; R5 = UCB ADDRESS; C=1 IF ONLINE REQUEST0; C=0 IF OFFLINE REQUEST;D ; OUTPUTS:3; FOR ONLINE, DV.EXT IS SET IN THE U;?; DLPRE.MAC - PREFIX FILE FOR BUILDING DL LOADABLE CRASH DRIVERO;p; Created 11-JAN-88O;*C$$CDA=0 ; LOADABLE CRASH DRIVER SUPPORT3L$$CDA=0 ; LOADABLE CRASH DRIVERS TO BE ASSEMBLEDDL$$CD=0 ; CRASH DRIVER IS DLRIVERS TO BE ASSEMBLEDDL$$CD=0 ; CRASH DRIVER IS DU .TITLE DLTBLV .IDENT /01.05/;N7; COPYRIGHT (c) 1984 BY DIGITAL EQUIPMENT CORPORATION.R; ALL RIGHTS RESERVED.;R<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; B. S. MCCARTHY 5-MAY-84 ; ;P; MODIFIED BY:; ; J. R. KAUFFMAN 1-MAY-84 01.01;N5; JRK298 -- ADD ENHANCED DEFINITIONS TO DRLOG TABLES;.; T. LEKAS 11-JULY-84 01.02; %; TL301 -- ADD PARSE/MERGE FUNCTIONS ;K ; J. R. KAUFFMAN 1-MAY-85 01.04;B<; JRK303 -- ADD TABLE NUMBER HASHING FOR P/OS COMPATIBILITY;P!; J. R. KAUFFMAN 24-MAY-85 01.05S;E7; JRK307 -- ADD ADDITIONAL LOGICAL DIRECTIVES FOR P/OSM;B); LOGICAL NAME DIRECTIVES DISPATCH TABLES ; A; THIS MODULE WAS SEPARATED FORM QITBL TO FACILITATE PLACEMENT INO); THE FOURTH DIRECTIVE COMMON WITH DRLOG.0;1 .PAGE A .IF DF L$$GCL: .MCALL LNMDF$ ;DEFINE LOGICAL NAME SUBFUNCTION FLAG BITS LNMDF$  .ENDC ;DF L$$GCLI% .MACRO LNSFN ADDR,DPBSIZ,DIRCOM,COND .IF NB COND .IF DF COND .WORD ADDR .BYTE DPBSIZI .BYTE DIRCOM  .IFFN .BLKW 2 .ENDC ;DF CONDJ .IFFA .BLKW 2 .ENDC ;NB CONDS .ENDM .PAGE;+<; SUBFUNCTION DISPATCH TABLE FOR THE LOGICAL NAME DIRECTIVES;- .IF DF L$$GCL;$LSTLG::.WORD 0 ;STORAGE WORD FOR LAST LNB IN LOOKUP CHAINL@$LTBUF::.BLKB 8. ;STORAGE BUFFER FOR DEVICE MNEMONIC AND BINARY) ; UNIT CONVERSION TO AND FROM ASCII<$LGBUF::.BLKW 12. ;STORAGE AREA FOR CREATE DESCRIPTOR BLOCK;+4; LOGICAL NAME OFFSET TABLE FOR TRANSLATION ATTEMPTS;-!$LTMSK::.BYTE LT.TSK ;TASK TABLE.3 .BYTE LT.USR ;USER TABLE (FOR P/OS COMPATIBILITY)N .BYTE LT.SES ;SESSION TABLE .BYTE LT.GRP ;GROUP TABLEB .BYTE LT.SYS ;SYSTEM TABLE$MSKBT::.BYTE 1  .BYTE 2 .BYTE 20R .BYTE 4 .BYTE 10R .BYTE 40N .BYTE 100 .BYTE 200$TRANL::.BYTE LT.SYS .BYTE LT.GRPE+ .BYTE 4 ;LT.USR (FOR P/OS) COMPATIBILITYA .BYTE LT.TSK* .BYTE 2 ;LT.SES - RSX LOCAL/LOGIN TABLE .EVEN .ENDC ;DF L$$GCLO;+E; SUBFUNCTION TABLE FOR ALL DIRECTIVE ROUTINES ACCESSED THROUGH DRLOG ;- .IF DF L$$GCL!N$$DIR;$LNSFT::1 LNSFN $LNFCL,7,3,L$$GCL ;CLOG$ - P/OS COMPATIBLEA6 LNSFN $LNFTL,9.,3,L$$GCL ;TLOG$ - OLD P/OS COMPATIBLE1 LNSFN $LNDEL,5,3,L$$GCL ;DLOG$ - P/OS COMPATIBLE LNSFN $LNFSD,5,3,N$$DIR ;SDIR$ LNSFN $LNFGD,6.,3,N$$DIR ;GDIR$ LNSFN $LNFSS,7.,4,L$$GCL ;FSS$Y LNSFN $LNCHN,5.,4,L$$GCL ;ACHN$! LNSFN $LNRMS,13.,4,L$$GCL ;PRMS$;! LNSFN $LNFCS,13.,4,L$$GCL ;PFCS$V7 LNSFN $LN00*c@ccFTL,10.,3,L$$GCL ;TLOG$ - NEW P/OS COMPATIBLEL3 LNSFN $LNFTL,10.,3,L$$GCL ;RLOG$ - P/OS COMPATIBLE. LNSFN $LNFCL,7,3,L$$GCL ;CLON$ LNSFN $LNDEL,5,3,L$$GCL ;DLON$ ! LNSFN $LNFTL,10.,3,L$$GCL ;TLON$3! LNSFN $LNFTL,10.,3,L$$GCL ;RLON$EC$LNFHI==<<.-$LNSFT>/4.>-1. ;DEFINE HIGHEST LOGICAL NAME SUBFUNCTION, .ENDC ;DF N$$DIR!L$$GCL I .END$ LNSFN $LNFSS,7.,4,L$$GCL ;FSS$Y LNSFN $LNCHN,5.,4,L$$GCL ;ACHN$! LNSFN $LNRMS,13.,4,L$$GCL ;PRMS$;! LNSFN $LNFCS,13.,4,L$$GCL ;PFCS$V7 LNSFN $LNC; PREFIX FILE USED DURING UPDATE TO DEFINE DL: CONTROLLER SYMBOLSR$$L11=1 .TITLE DMDRV .IDENT /15.00/;O3; COPYRIGHT (C) 1983, 1984, 1985, 1986, 1987, 1988 R"; BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;D<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;:; PREVIOUSLY MODIFIED BY:O;Q<; P. J. BEZEREDI ; B. S. MCCARTHY; G. MARIGOWDA; $; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;J!; M. W. ZAHAREE 28-MAR-88 15.00RB; MWZ003 DATA IN SILO AFTER DATA LATE DECLARED DURING WRITE CAUSES,; OPERATION TO BE RESTARTED IN WRONG BLOCK.;E;P;T;R-; RK611-RK06/RK07 OVERLAPPED SEEK DISK DRIVERF;R .MCALL HWDDF$,PKTDF$C$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;S; EQUATED SYMBOLSY;D)RETRY= 8. ;CONTROLLER ERROR RETRY COUNT (OFFTRY= 2 ;OFFSET POSITION RETRY COUNT1RMCNT= 22. ;NUMBER OF REGISTERS TO LOG ON ERRORX)RCL= 1 ;RECALIBRATE IN PROGRESS (1=YES)-$OFS= 2 ;OFFSET IN PROGRESS (1=YES)0XCT= 4 ;FUNCTION EXECUTION IN PROGRESS (1=YES)!OFM= 10 ;IN OFFSET MODE (1=YES)L%ADR= 40 ;ADDRESS BITS SETUP (1=YES) ;A; RK611 DEVICE REGISTER OFFSETSC; %RKCS1= 0 ;CONTROL STATUS REGISTER 1ERKWC= 2 ;WORD COUNTDRKBA= 4 ;BUS ADDRESSRKDA= 6 ;DISK ADDRESSY&RKCS2= 10 ;CONTROL STATUS REGISTER 2RKDS= 12 ;DRIVE STATUSRKER= 14 ;ERROR REGISTER%RKOF= 16 ;OFFSET/ATTENTION REGISTERGRKDC= 20 ;DESIRED CYLINDERRKDB= 24 ;DATA BUFFER#RKMR1= 26 ;MAINTENANCE REGISTER 1RKECPS= 30 ;ECC POSITIONRKECPT= 32 ;ECC PATTERN1#RKMR2= 34 ;MAINTENANCE REGISTER 2 #RKMR3= 36 ;MAINTENANCE REGISTER 3;1; RKCS1 BIT ASSIGNMENTSC; "SD= 1 ;SELECT DRIVE & GET STATUSWRT= 2 ;WRITE OFFSETACK= 3 ;PACK ACKNOWLEDGEDC= 5 ;DRIVE CLEARUNL= 7 ;UNLOAD HEADSIE= 100 ;INTERRUPT ENABLE2RDY= 200 ;CONTROLLER READY!HMS= 113 ;IE + RECALIBRATE + GOAOFF= 115 ;IE + OFFSET + GOBLS= 117 ;IE + SEEK + GOREAD= 121 ;IE + READ + GO !RDH= 125 ;IE + READ HEADER + GO0"WDH= 127 ;IE + WRITE HEADER + GO!WCK= 131 ;IE + WRITE CHECK + GOR1CERR= 100000 ;CONTROLLER ERROR/CONTROLLER CLEARDI= 040000 ;DRIVE INTERRUPT 1DCPAR= 020000 ;DRIVE TO CONTROLLER PARITY ERRORR!CTO= 004000 ;CONTROLLER TIMEOUTD$CDT= 002000 ;CONTROLLER DRIVE TYPE;H; RKCS2 BIT ASSIGNMENTST;ADLT= 100000 ;DATA LATE WCE= 040000 ;WRITE CHECK ERRORUPE= 020000 ;UNIBUS PARITY NED= 010000 ;NON EXISTANT DISK"NEM= 004000 ;NON EXISTANT MEMORY PGE= 002000 ;PROGRAMMING ERROR$MDS= 001000 ;MULTIPLE DRIVE SELECTUFE= 000400 ;UNIT FIELD ERROR/OR= 000200 ;OUTPUT READY (SILO CONTAINS DATA)/SCLR= 000040 ;RESET CONTROLLER AND ALL DRIVES 0RLS= 000010 ;RELEASE PORT ;R; RKDS BIT ASSIGNMENTS; SVAL= 100000 ;STATUS VALID&PIP= 020000 ;POSITIONING IN PROGRESSDDT= 000400 ;DISK DRIVE TYPEDRDY= 000200 ;DRIVE READY0VV= 000100 ;VOLUME VALIDDRA= 000001 ;DRIVE AVAILABLE; ; RKER BIT ASSIGNMENTS00cc*cDATADATADATADATADATADATADATA;=DCK= 100000 ;DATA CHECK ERROR0UNS= 040000 ;DRIVE UNSAFET#OPI= 020000 ;OPERATION INCOMPLETER!DTE= 010000 ;DRIVE TIMING ERRORAWLE= 004000 ;WRITE LOCK ERROR $IDAE= 002000 ;INVALID DISK ADDRESS COE= 001000 ;CYLINDER OVERFLOW HVRC= 000400 ;HEADER VRC ERRORBSE= 000200 ;BAD SECTOR ERRORL$ECH= 000100 ;ERROR CORRECTION HARDDTYE= 000040 ;DISK TYPE ERRORYFMTE= 000020 ;FORMAT ERROR1CDPAR= 000010 ;CONTROLLER TO DRIVE PARITY ERRORE&NXF= 000004 ;NON-EXECUTABLE FUNCTIONSKI= 000002 ;SEEK INCOMPLETEILF= 000001 ;ILLEGAL FUNCTIONS; ; LOCAL DATA;E; CONTROLLER IMPURE DATA TABLES ,; THESE ARE INDEXED BY THE CONTROLLER NUMBER;R7RTTBL: .BLKW R$$611 ;RETRY COUNT FOR CURRENT OPERATIONC3OFFRTY: .BLKW R$$611 ;OFFSET RECOVERY RETRY COUNTSS;RGBLK: .BLKW R$$611*RMCNT ;CONTROLLER REGISTER STORAGE AREAO5OFFAD: .BLKW R$$611 ;ADDRESS OF CURRENT OFFSET VALUE =PRMSV: .BLKW R$$611*5 ;PARAMETER SAVE ARE FOR ERROR RECOVERY O ;AND WRITE CHECK FUNCTIONL.$DMOPT::.REPT R$$611 ;SEEK OPTIMIZATION TABLE/ .WORD 1 ;0=IMPLIED SEEK; 1=ALWAYS SEEK FIRST .ENDR O7SILOA: .BLKW R$$611 ;TABLE OF CURRENT SILO ADJUSTMENTSL;U; DIAGNOSTIC FUNCTION TABLE1;;$FUNTBL: .BYTE HMS, IO.HMS!IQ.UMD&377 .BYTE BLS, IO.BLS!IQ.UMD&377E .BYTE OFF, IO.OFF!IQ.UMD&377R .BYTE RDH, IO.RDH!IQ.UMD&377R .BYTE WDH, IO.WDH!IQ.UMD&377$ .BYTE WCK, IO.WCK!IQ.UMD&377 FUNTBE:R;.; OFFSET POSITIONING DATAV;R"OFFTB: ;POSITIONING VALUE TABLE! .BYTE 000 ;RETURN TO CENTERLINE6 .BYTE 020 ; +400 .BYTE 220 ; -400 .BYTE 040 ; +800 .BYTE 240 ; -800 .BYTE 060 ; +1200. .BYTE 260 ; -1200F(OFFTBE: .BYTE 000 ;RETURN TO CENTERLINE;F;DRIVER DISPATCH TABLE;L2 DDT$ DM,R$$611,,,,,,OPT ;GENERATE DISPATCH TABLE;+>; **-DMINI-RK611-RK06/RK07 DISK CARTRIDGE CONTROLLER INITIATOR;E; THIS IS THE DRIVER ENTRY POINT FROM THE QUEUE I/O DIRECTIVE WHEN ANRE; I/O REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TOTF; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED UNIT IS NOTF; BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSEG; A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT SUCCEEDS,IE; THEN THE NEXT I/O OPERATION IS INITIATED AND A RETURN TO THE CALLERT; IS EXECUTED.;I ; INPUTS:0;K6; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIALIZED.;R ; OUTPUTS:;TA; IF THE SPECIFIED UNIT IS NOT BUSY AND AN I/O REQUEST IS WAITING A; TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-O; ATION IS INITIATED.E;-7DMINI: GTPKT$ DM,R$$611 ;GET NEXT I/O PACKET TO PROCESSE;T1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:R; '; R1=ADDRESS OF THE I/O REQUEST PACKET.S-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.A; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.56; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIALIZED.;U;; RK611-RK06/RK07 DISK CARTRIDGE I/O REQUEST PACKET FORMAT:Q;T!; WD. 00 -- I/O QUEUE THREAD WORDE/; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERT4; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK<; WD. 03 -- POINTER TO 2ND LUN WORD IN REQUESTOR TASK HEADER4; WD. 04 -- CONTENTS OF FIRST LUN WORD (UCB ADDRESS); WD. 05 -- I/O FUNCTION CODEN/; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCKN/; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK<; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT + 140000)2; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE1; WD. 12 -- MEMORY EXTENSION BITS OF I/O TRANSFERD*; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER,; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED;; WD. 15 -- DIAGNOSTIC SUPPLIMENTAL PARAMETER ELSE NOT USEDS7; WD. 16 -- BITS <0:7> = HIGH LBN, BITS <8:15> NOT USEDR"; WD. 17 -- LOW LBN OF I/O REQUEST8; WD. 20 -- RELOCATION BIAS OF DIAGNOSTIC REGISTER BLOCK:; WD. 21 -- DIAGNOSTIC REGISTER BLOCK ADDRESS DISPLACEMENT;T# CLRB U.CW2+1(R5) ;RESET UNIT FLAGS)$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 10$ ;IF CS WE FAILED TST R0 ;TRANSFER FUNCTION? BMI DMRQC ;IF MI YES) JMP DMVV ;PROCESS VOLU00cccME VALID FUNCTIONU10$: JMP DMDONE ;EXIT;R); REQUEST CONTROLLER FOR PROPER OPERATIONA;E0DMRQC: MOV S.KRB(R4),R1 ;GET CURRENT KRB ADDRESS5 BIT #KS.POE,K.STS(R1) ;PARALLEL OPERATIONS ENABLED?Q BEQ DMRQC1 ;IF EQ NO. MOV S.PKT(R4),R3 ;RETRIEVE I/O PACKET ADDRESS= BITB #IQ.UMD!IQ.Q,I.FCN(R3) ;DIAGNOSTIC OR EXPRESS REQUEST?  BNE DMRQC1 ;IF NE YESL- MOVB K.CON(R1),R3 ;RETREIVE CONTROLLER INDEXS# TST $DMOPT(R3) ;WHICH SEEK METHOD?N" BNE 10$ ;IF NE ALWAYS SEEK FIRST3 BIT #KS.DIP,K.STS(R1) ;DATA TRANSFER IN PROGRESS?J+ BEQ DMRQC1 ;IF EQ NO, START DATA TRANSFERR210$: BISB #S3.SIP,S.ST3(R4) ;SET SEEK IN PROGRESS6 CALL $RQCNC ;REQUEST CONTROLLER FOR CONTROL FUNCTION BR DMINIO ;INITIATE THE SEEK;DMRQC1: BICB #S3.SIP,S.ST3(R4) ;SET SEEK ALREADY COMPLETED3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFERR;T ; **-DMUBMP-SETUP UNIBUS ADDRESS;.>; THIS SECTION OF CODE WILL DETERMINE IF THE UNIBUS ADDRESS IS@; ALREADY IN THE FORMAT FOR THE UNIBUS MAP ON 22-BIT PROCESSORS.=; IT WILL ALSO CONVERT THE I/O FUNCTION CODE TO IT'S HARDWARET ; EQUIVALENT.E;>; NOTE: AT THIS POINT THE REQUESTING UNIT MUST BE THE OWNER OF%; THE CONTROLLER FOR A DATA TRANSFER.I;9DMUBMP: BITB #ADR,U.CW2+1(R5);ADDRESS BITS ALREADY SETUP?) BNE DMINIO ;IF NE YESE. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS5 CMP #IO.RDH!IQ.UMD,I.FCN(R1) ;READ HEADER FUNCTION?' BEQ 10$ ;IF EQ YES, NO NEED FOR UMR'ST' CALL $STMAP ;SETUP UNIBUS MAP ADDRESSR210$: ASL U.BUF(R5) ;POSITION MEMORY EXTENSION BITS ASL U.BUF(R5) ;...I ASL U.BUF(R5) ;...T ASL U.BUF(R5) ;...A5 CMP #IO.RDH!IQ.UMD,I.FCN(R1) ;READ HEADER FUNCTION?U' BEQ 20$ ;IF EQ YES, NO NEED FOR UMR'SA% CALL $MPUBM ;MAP UNIBUS TO TRANSFERD:20$: BISB #ADR,U.CW2+1(R5);INDICATE ADDRESS SETUP COMPLETE; 3; CONVERT I/O FUNCTION CODE TO HARDWARE EQUIVALENT.;P. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS5 CMPB #IO.HMS/256.,I.FCN+1(R1) ;DIAGNOSTIC FUNCTION?M BNE 40$ ;IF NE NO . MOV #FUNTBL,R0 ;GET ADDRESS OF FUNCTION TABLE830$: MOVB (R0)+,U.BUF(R5) ;LOAD CONTROLLER FUNCTION CODE. CMPB (R0)+,I.FCN(R1) ;IS IT THE CORRECT CODE? BEQ 60$ ;IF EQ YES' CMP #FUNTBE,R0 ;END OF FUNCTION TABLE?  BNE 30$ ;IF NE NO 040$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION+ MOVB #READ,U.BUF(R5) ;ASSUME READ FUNCTIONV7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?S& BHIS 50$ ;IF HIS FUNCTION IS ILLEGAL( MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS CALL DMSDC ;SELECT THE DRIVE JMP DMFIN1 ;FINISH I/O50$: BEQ 60$ ;IF EQ YES. ADD #WRT,U.BUF(R5) ;CONVERT TO WRITE FUNCTION+60$: MOV S.KRB(R4),R3 ;RETRIEVE KRB ADDRESSC- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXE$ MUL #5,R3 ;SETUP AN INDEX INTO ...' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAS' MOV U.BUF(R5),(R3)+ ;SAVE PARAMETERS 5 MOV U.BUF+2(R5),(R3)+ ;... MOV U.CNT(R5),(R3)+ ;... MOV I.PRM+10(R1),(R3)+ ;...  MOV I.PRM+12(R1),(R3)+ ;...L;V%; **-DMINIO-INITIATE AN I/O OPERATIONC; ?; THIS ROUTINE WILL INITIATE EITHER A SEEK OR THE DATA TRANSFER :; OPERATION DEPENDING ON HOW THE CONTROLLER WAS REQUESTED.;: ; INPUTS:R;R; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB.;C;DMINIO: BICB #RCL!OFS,U.CW2+1(R5) ;RESET POSITIONING FLAGSR# MOV @S.KRB(R4),R2 ;GET CSR ADDRESSV. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS% MOV #CERR,(R2) ;CLEAR THE CONTROLLER+& MOVB U.UNIT(R5),R0 ;FETCH UNIT NUMBER# MOV R0,RKCS2(R2) ;SELECT THE DRIVE;*9; DETERMINE IF DRIVE'S PORT IS SEIZED BY THIS CONTROLLER. ;T' CALL DMSD ;ATTEMPT TO SEIZE THE DRIVE+ BIT #DRA,RKDS(R2) ;DID WE SEIZE THE DRIVE?A BNE 10$ ;IF NE YES( CALL DMCLR ;CLEAR THE CONTROLLER ERROR3 MOV #IE.DNR&377,R0 ;SET DRIVE NOT READY ERROR CODEW BR 40$ ;AND GO AWAYN; 1; CHECK IF THE HEADS ARE ON THE CORRECT CYLINDER.S;T-10$: CALL DMCLER ;CLEAR CONTROLLER AND DRIVER. BITB #S3.SIP,S.ST3(R4) ;ARE WE DOING A SEEK? BEQ 20$ ;IF EQ NO* CALL DMCYL ;GET CURRENT CYLINDER ADDRESS) CMP I.PRM+10(R3),R0 ;DO WE NEED TO SEEK? - BNE 30$ ;IF NE YES, BYPASS CONTROLLER SETUP # MOV #IE,(R2) ;RE-ENABLE INTER00cc*cDATADATADATADATADATADATADATARUPTSE# JMP DMRQC1 ;GO REQUEST CONTROLLERY;.; LOAD CONTROLLER REGISTERS FOR DATA TRANSFER.;D"20$: ADD #RKCS2,R2 ;POINT TO RKCS26 MOV I.PRM+12(R3),-(R2) ;SET TRACK AND SECTOR ADDRESS1 MOV U.BUF+2(R5),-(R2) ;SET USER BUFFER ADDRESSR+ MOV U.CNT(R5),-(R2) ;SET BYTES TO TRANSFER,' ROR (R2) ;MAKE THAT WORDS TO TRANSFER$) NEG (R2) ;MAKE IT A NEGATIVE WORD COUNTI TST -(R2) ;POINT TO CSR(;,'; CHECK FOR DRIVE NOT READY CONDITIONS.E;S30$: CALL DMDC ;CLEAR DRIVE3 MOV #IE.DNR&377,R0 ;ASSUME SELECTED UNIT NOT READYR1 MOV I.PRM+10(R3),RKDC(R2) ;SET CYLINDER ADDRESS * MOV RKDS(R2),R1 ;GET CURRENT DRIVE STATUS COM R1 ;COMPLEMENT STATUS(% BIT #SVAL!DRDY!DRA,R1 ;DRIVE READY?S BNE 40$ ;IF NE NOR! BIT #UNS,RKER(R2) ;DRIVE UNSAFE?V BEQ 60$ ;IF EQ NO 340$: BITB #US.SPU,U.STS(R5) ;IS DRIVE SPINNING UP?A BEQ 45$ ;IF EQ NOA9 BITB #US.VV,U.STS(R5);WAS THE VOLUME PREVIOUSLY MOUNTED?, BEQ DMPWF1 ;IF EQ NO( BR DMPWF0 ;YES, WAIT FOR IT TO SPIN UP(45$: MOV R3,R1 ;COPY I/O PACKET ADDRESS1 CALL DMDINT ;TRY FOR DIAGNOSTIC DRIVE NOT READY  BCS 50$ ;IF CS IT WASM .IF DF S2.NRD6 BIT #S2.NRD,S.ST2(R4) ;IS THIS FIRST DRIVE NOT READY?! BNE 47$ ;IF NE NO, GO LOG ERROR6 BIS #S2.NRD,S.ST2(R4) ;INDICATE FIRST DRIVE NOT READY JMP DMPWF1 ;GO DO A RETRYB747$: BIC #S2.NRD,S.ST2(R4) ;CLEAR FIRST DRIVE NOT READY  .ENDC ; DF S2.NRD( CALL DMLERR ;LOG DRIVE NOT READY ERROR50$: JMP DMFIN ;FINISH I/O*60$: BIT #VV,R1 ;DID VOLUME VALID CHANGE?/ BEQ 65$ ;IF EQ NO (NOTE REVERSE STATUS OF VV)I. BITB #US.SPU,U.STS(R5) ;DID WE JUST SPIN UP? BEQ 40$ ;IF EQ NO, MOV #ACK,R0 ;GET PACK ACKNOWLEDGE FUNCTION CALL DMGO ;SET VVE0 BISB #US.VV,U.STS(R5);SET SOFTWARE VOLUME VALID165$: BIT #S2.MAD,S.ST2(R4) ;MULTI ACCESS DEVICE?P BEQ 80$ ;IF EQ NOR, CMP S.KRB(R4),S.KTB(R4) ;IS THIS PORT 'A'? BNE 70$ ;IF NE NON. BICB #S3.SPA,S.ST3(R4) ;YES, SHOW IT SPUN UP BR 75$ ;170$: BICB #S3.SPB,S.ST3(R4) ;IT MUST BE PORT 'B' 175$: BITB #S3.SPU,S.ST3(R4) ;BOTH PORTS SPUN UP?E BNE 85$ ;IF NE NOB580$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE SPINNING UP 285$: BITB #S3.SIP,S.ST3(R4) ;SHOULD WE DO A SEEK? BEQ 90$ ;IF EQ NOT;E; START EXPLICIT SEEK.;T% MOV #BLS,R0 ;GET SEEK FUNCTION CODED CALL DMXFR ;START THE SEEK( BR DMPWF3 ;RELEASE CONTROLLER AND EXIT;K; START DATA TRANSFER.;990$: CMPB U.BUF(R5),#BLS ;IS THIS A POSITIONING FUNCTION?T BHI DMDIP ;IF HI NO02 BISB #RCL!OFS,U.CW2+1(R5) ;SET POSITIONING FLAGS0 CMP #IO.OFF!IQ.UMD,I.FCN(R3) ;OFFSET FUNCTION? BNE DMDIP ;IF NE NO01 MOV I.PRM+6(R3),RKOF(R2) ;YES, SET OFFSET VALUE :DMDIP: MOV U.BUF(R5),R0 ;GET FUNCTION CODE AND MEMORY BITS0DMDIP1: MTPS #PR5 ;;;EXECUTE AT DEVICE PRIORITY$ MOV S.KRB(R4),R3 ;;;GET KRB ADDRESS7 BIT #IQ.UMD,I.FCN(R1) ;;;IS IT A DIAGNOSTIC FUNCTION?L BEQ DMDIP2 ;;;IF EQ NO2 CMPB U.BUF(R5),#BLS ;;;IS IT A UMD SEEK FUNCTION? BLOS DMXFR ;;;IF LOS YES?DMDIP2: BIS #KS.DIP,K.STS(R3) ;;;SET DATA TRANSFER IN PROGRESSI'DMXFR: MTPS #PR5 ;;;DISABLE INTERRUPTS;' CLR S.FRK+2(R4) ;;;INIT FORK INTERLOCK- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVEU5 BISB #XCT,U.CW2+1(R5) ;;;SHOW FUNCTION HAS EXECUTEDR/ MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNTR, CALL DMXCT ;;;SET CDT,LOAD FUNCTION AND GO MTPS #0 ;ALLOW INTERRUPTS ;+<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;-$DMCAN: RETURN ;;;NOP FOR THE RK611;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVE)?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANYNA; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESSC; THE UNIT IS ALREADY READY.;-)DMPWF: MOV @S.KRB(R4),R2 ;GET CSR ADDRESS" CALL DMCLR ;CLEAR THE CONTROLLER) TSTB S.STS(R4) ;IS DRIVE CURRENTLY BUSY?R BEQ DMPWF2 ;IF EQ NO9DMPWF0: MOVB #15.,S.STS(R4) ;WAIT A MAXIMUM OF ONE MINUTEI6DMPWF1: MOVB S.ITM(R4),S.CTM(R4) ;4 SECONDS AT A TIME5DMPWF2: BISB #US.SPU,U.STS00ccc(R5) ;SET UNIT SPINNING UP 5DMPWF3: CALLR $RLCN ;RELEASE CONTROLLER IF NECESSARYU;+5; **-$DMINT-RK611-RK06/RK07 DISK CARTRIDGE CONTROLLERA&; INTERRUPT AND ERROR SERVICE ROUTINES; ; HARD ERRORS ---> $IODON&; SOFT ERRORS ---> RETRY LAST FUNCTION9; DATA ERRORS ---> RETRY FUNCTION AND CORRECT IF POSSIBLEI;- .ENABL LSBU3$DMINT::BR DMFRK ;;;ENTRY POINT FOR DATA TRANSFERS(* TST S.FRK+2(R4) ;;;UNSOLICITED INTERRUPT? BEQ 5$ ;;;IF EQ NO, MOV @S.KRB(R4),-(SP);;;RETREIVE CSR ADDRESS) BIC #IE!CERR,(SP)+ ;;;DISABLE INTERRUPTS RETURN ;;;E*5$: CALL $FORK ;;;CREATE A SYSTEM PROCESS9DMFRK: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFERR* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXS# MOV @S.KRB(R4),R2 ;GET CSR ADDRESSF' MOVB U.UNIT(R5),R0 ;GET UNIT TO SELECT." MOV R0,RKCS2(R2) ;SELECT THE UNIT# TSTB S.STS(R4) ;IS THIS UNIT BUSY?F BNE 10$ ;IF NE YES CALL DMSDC ;SELECT THE DRIVE$ CALL DMDC ;CLEAR DRIVE (DROPS ATA), BIS #RLS,RKCS2(R2) ;SET TO RELEASE THE PORT CALL DMSD ;RELEASE THE PORTA8 BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED& CLR S.FRK+2(R4) ;RESET FORK INTERLOCK# MOV #IE,(R2) ;RE-ENABLE INTERRUPTSD( BR DMPWF3 ;RELEASE CONTROLLER AND EXIT; @; INTERRUPT WAS FROM A BUSY UNIT. IF WE JUST DID A SEEK WE WILLA; GO AND START THE DATA TRANSFER OPERATION. IF THE DATA TRANSFERT>; TERMINATED, DETERMINE WHY. IF WE ARE SPINNING UP, RETRY THE ; OPERATION.;110$: BITB #US.SPU,U.STS(R5) ;ARE WE SPINNING UP?S BEQ 15$ ;IF EQ NO - BIT #S2.MAD,S.ST2(R4) ;MULTI-ACCESS DEVICE?  BEQ DMREST ;IF EQ NO, CMP S.KRB(R4),S.KTB(R4) ;IS THIS PORT 'A'? BNE 14$ ;IF NE NO2 BITB #S3.SPA,S.ST3(R4) ;IS PORT 'A' SPINNING UP? BNE DMREST ;IF NE YEST BR 15$ ;614$: BITB #S3.SPB,S.ST3(R4) ;IS PORT 'B' SPINNING UP? BNE DMREST ;IF NE YEST215$: MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS3 BIT #S2.EIP,S.ST2(R4) ;ERROR ALREADY IN PROGRESS?T BNE 20$ ;IF NE YES4 CALL DMPRM ;RESET RETRY AND OFFSET RECOVERY VALUES420$: BITB #S3.SIP,S.ST3(R4) ;DID WE JUST DO A SEEK? BEQ 30$ ;IF EQ NOR0 BICB #S3.SIP,S.ST3(R4) ;CLEAR SEEK IN PROGRESS' TST (R2) ;ANY ERRORS DURING THE SEEK?S BPL 70$ ;IF PL NOP) CALL DMSDC ;ISSUE SELECT DRIVE FUNCTIONE! CALL DMLERR ;LOG THE SEEK ERROR.( MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS! DECB RTTBL(R3) ;COUNT THIS RETRYR" CALL DMERL ;FINISH ERROR LOGGING* CALLR DMRCAL ;ISSUE RECALIBRATE FUNCTION;E; VALID INTERRUPT.;Y330$: MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERU+ CALL DMDINT ;PROCESS DIAGNOSTIC INTERRUPT / BCS 100$ ;IF CS INTERRUPT PROCESSING COMPLETE.2 BITB #RCL!OFS,U.CW2+1(R5) ;POSITIONING FUNCTION? BNE 40$ ;IF NE YES;B1; INTERRUPT WAS DUE TO A DATA TRANSFER OPERATION.E;N TST (R2) ;ANY ERRORS?G* BMI 35$ ;IF MI YES, FORGET STATUS UPDATE+ TST RKDS(R2) ;IS THE CURRENT STATUS VALID?E BMI 35$ ;IF MI YES) CALL DMSDC ;ISSUE SELECT DRIVE FUNCTIONE35$: TST (R2) ;ANY ERRORS?I BPL DMWCHK ;IF PL NO( CALL DMLERR ;YES, LOG THE DEVICE ERROR1 MOV RKER(R2),R1 ;COPY CONTENTS OF ERROR REGISTER, MOV #IE.WLK&377,R0 ;ASSUME WRITE LOCK ERROR BIT #WLE,R1 ;WRITE LOCK ERROR? BNE 50$ ;IF NE YES+ MOV #IE.BBE&377,R0 ;ASSUME BAD BLOCK ERROR  BIT #BSE,R1 ;BAD BLOCK ERROR?N BNE 50$ ;IF NE YES/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERROR9 BIT #UNS!DTE!IDAE!COE!DTYE!FMTE!NXF!ILF,R1 ;HARD ERROR?  BNE 50$ ;IF NE YES5 BIT #UPE!NED!NEM!PGE!MDS!UFE,RKCS2(R2) ;HARD ERROR?S BNE 50$ ;IF NE YES, FINISH UP & JMP DMSOFT ;TRY FOR SOFT/DATA ERRORS;E;2; PROCESS POSITIONING OPERATIONS;(40$: MOVB U.CW2+1(R5),R0 ;GET UNIT FLAGS COM R0 ;TOGGLE THEMI3 BIT #OFM!RCL,R0 ;IN OFFSET MODE AND DOING A RECAL?7 BNE 45$ ;IF NE NO CLR R0 ;GET READY FOR THE BISB1 BISB RTTBL+1(R3),R0 ;RETREIVE ERROR/SUCCESS CODEA( BICB #OFM!RCL,U.CW2+1(R5) ;CLEAR FLAGS CALLR DMFIN1 ;NOW SAY GOOD-BYE345$: MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERRORG& TST (R2) ;ERRORS DURING POSITIONING? BPL 60$ ;IF PL NOI( CLR RKWC(R2) ;SHOW ALL BYTES TRANSFERED00cc*cDATADATADATADATADATADATADATA50$: JMP DMFIN ;FINISH I/OI060$: BITB #RCL,U.CW2+1(R5);RECALIBRATE FUNCTION? BEQ 65$ ;IF EQ NO * JMP DMRTRY ;YES, RETRY PREVIOUS FUNCTION.65$: BICB #OFS,U.CW2+1(R5) ;RESET OFFSET FLAG, CMP #OFFTBE,OFFAD(R3) ;FINAL OFFSET TRIED? BEQ 50$ ;IF EQ YES;S; RESTART THE I/O OPERATIONU;2/DMREST: MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESSD570$: JMP DMUBMP ;SETUP UNIBUS MAP AND RETRY FUNCTIONO; ; TEST FOR WRITE CHECK OPERATION;?0DMWCHK: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS; BITB #IO.WLC&377,I.FCN(R1) ;WRITE FOLLOWED BY WRITE CHECK?U BNE 80$ ;IF NE YES5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED BY MCR?T BEQ 100$ ;IF EQ NO480$: CMPB #READ,U.BUF(R5) ;WAS LAST FUNCTION A READ? BEQ 100$ ;IF EQ YESL6 CMPB #READ+WRT,U.BUF(R5) ;WAS LAST FUNCTION A WRITE? BNE 100$ ;IF NE NO CALL DMPRM ;RESET RETRY COUNT # MUL #5,R3 ;FORM AN INDEX INTO ... ' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAT) MOV (R3)+,U.BUF(R5) ;RESTORE PARAMETERS  MOV (R3)+,U.BUF+2(R5) ;... MOV (R3)+,U.CNT(R5) ;... MOV (R3)+,I.PRM+10(R1) ;...E MOV (R3)+,I.PRM+12(R1) ;.... MOVB #WCK,U.BUF(R5) ;SET WRITE CHECK FUNCTION( BR DMREST ;START WRITE CHECK OPERATION8100$: CLR U.CNT(R5) ;NO ERRORS, SET ALL BYTES TRANSFERED BR DMFIN1 ;FINISH I/OU .DSABL LSBA;+@; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING REPEATEDC; UNLESS THE OPERATION WAS DIAGNOSTIC. TIMEOUTS ARE USUALLY CAUSEDE<; BY POWER FAILURE BUT MAY ALSO BE THE RESULT OF NO RESPONSE; FROM THE HARDWARE.;-7DMOUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?E BEQ 15$ ;;;IF EQ NO1/ BIT #S2.MAD,S.ST2(R4) ;;;MULTI-ACCESS DEVICE?U BEQ 10$ ;;;IF EQ NOA. CMP S.KRB(R4),S.KTB(R4) ;;;IS THIS PORT 'A'?) BNE 5$ ;;;IF NE NO, IT MUST BE PORT 'B'M4 BITB #S3.SPA,S.ST3(R4) ;;;IS PORT 'A' SPINNING UP? BNE 10$ ;;;IF NE YES' BR 15$ ;;;TIMEOUT FOR NORMAL FUNCTIONO75$: BITB #S3.SPB,S.ST3(R4) ;;;IS PORT 'B' SPINNING UP? & BEQ 15$ ;;;IF EQ NO, NORMAL FUNCTION110$: DECB S.STS(R4) ;;;HAVE WE WAITED ENOUGH YET?U BEQ 15$ ;;;IF EQ YES MTPS #0 ;;;ALLOW INTERRUPTSB/ JMP DMRQC ;REQUEST CONTROLLER AND RESTART I/OM,15$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY+ MOV S.PKT(R4),R1 ;;;GET I/O PACKET ADDRESS) MOV (R2),I.PRM+6(R1);;;SAVE CSR CONTENTS MTPS #0 ;;;ALLOW INTERRUPTSP3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER 4 MOV #IE.DNR&377,R0 ;GET DEVICE NOT READY ERROR CODE) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS11 MOV I.PRM+6(R1),$DVSAV ;SAVE SAVED CSR CONTENTS4* MOV S.KRB(R4),R2 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R2),R3 ;RETREIVE CONTROLLER INDEXJ MOV (R2),R2 ;GET CSR ADDRESS' MOVB U.UNIT(R5),R1 ;GET UNIT TO SELECTL" MOV R1,RKCS2(R2) ;SELECT THE UNIT) CALL DMSDC ;ISSUE SELECT DRIVE FUNCTION./ MOV S.PKT(R4),R1 ;PUT BACK THE I/O PKT ADDRESSW* CALL DMDINT ;TEST FOR DIAGNOSTIC TIMEOUT BCS DMFIN ;IF CS IT WASV! CALL DMLTMO ;LOG DEVICE TIMEOUTD0 BITB #S3.SIP,S.ST3(R4) ;TIMEOUT DURING A SEEK? BEQ 20$ ;IF EQ NOR4 CALL DMPRM ;RESET RETRY AND OFFSET RECOVERY VALUES;20$: BICB #S3.SIP,S.ST3(R4) ;ASSUME DATA TRANSFER FUNCTIONR- BICB #OFM,U.CW2+1(R5);CLEAR OFFSET MODE FLAGM8 BITB #RCL!OFS,U.CW2+1(R5) ;TIMEOUT DURING POSITIONING? BNE DMFIN ;IF NE YES4 BITB #US.SPU,U.STS(R5) ;WAS THE DRIVE SPINNING UP? BEQ DMRTRY ;IF EQ NO- MOV #IE.DNR&377,R0 ;YES, SET DRIVE NOT READYM BR DMFIN ;AND EXIT;I%; CHECK FOR RETRY OF CURRENT FUNCTIONU;0DMRTRY: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?  BNE DMFIN ;IF NE YES DECB RTTBL(R3) ;RETRY FUNCTION? BLE DMFIN ;IF LE NOF! JMP DMREST ;YES, RETRY FUNCTION);R; **-DMFIN-FINISH I/O OPERATIONS;CB; THIS ROUTINE WILL SET THE ACTUAL BYTES TRANSFERED PARAMETER, THEA; ERROR LOGGING RETRY COUNTS AND CALL $IODON. THE SELECTED DRIVEE<; IS RELEASED, IF REQUESTED, AND THE CONTROLLER IS RELEASED.;; ; INPUTS:I; ; R0=SUCCESS/ERROR CODET0; R2=ADDRESS OF CONTROLLER CSR OR REGISTER BLOCK; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCBI; /DMFIN: MOV RKWC(R2),R1 ;GET RESIDUAL WORD COUNTN ASL00ccc R1 ;CONVERT TO BYTE COUNTJ- NEG R1 ;CONVERT TO POSITIVE BYTES REMAININGF:DMFIN0: MOV R1,U.CNT(R5) ;SAVE BYTES REMAINING TO TRANSFER/DMFIN1: MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESSG CALL DMDC ;CLEAR DRIVE.DMFIN3: MOV S.KRB(R4),R3 ;RETREIVE KRB ADDRESS- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEX& BITB #OFM,U.CW2+1(R5);IN OFFSET MODE? BEQ 5$ ;IF EQ NO- MOVB R0,RTTBL+1(R3) ;SAVE ERROR/SUCCESS CODE ! BR DMRCAL ;NOW DO A RECALIBRATE95$: BITB #S3.NRL,S.ST3(R4) ;SHOULD WE RELEASE THE DRIVE?L BNE 15$ ; IF NE NO- BIT #DRA,RKDS(R2) ;HAVE WE SEIZED THE DRIVE?A BEQ 10$ ;IF EQ NO1% BIS #RLS,RKCS2(R2) ;RELEASE THE PORTN2 CALL DMSD ;ISSUE SELECT FUNCTION TO RELEASE PORT<10$: BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED515$: MOV #IE,(R2) ;RE-DISPATCH IF DRIVE INTERRUPT SET / MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTB6 BITB #XCT,U.CW2+1(R5) ;HAS A FUNCTION BEEN EXECUTED? BNE 20$ ;IF NE YES' MOV #RETRY,R2 ;SET MAXIMUM RETRY COUNTS320$: BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNT 5 BICB #S3.SIP,S.ST3(R4) ;RESET SEEK IN PROGRESS FLAGA CALL $RLCN ;RELEASE CONTROLLER0DMDONE: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS1 MOV I.PRM+4(R1),R1 ;GET ACTUAL BYTES TO TRANSFER.6 SUB U.CNT(R5),R1 ;CALCULATE BYTES ACTUALLY TRANSFERED/ CLR S.FRK+2(R4) ;CLEAR THE FORK INTERLOCK FLAGT+ MOV @S.KRB(R4),-(SP) ;GET THE CSR ADDRESST! MOV #IE,(SP)+ ;ENABLE INTERRUPTS # CALL $IODON ;FINISH I/O OPERATION! JMP DMINI ;PROCESS NEXT REQUESTO;6; **-DMSOFT-TEST FOR SOFT RECOVERABLE ERROR CONDITIONS; ; INPUTS:T;4; R0=IE.VER&377 ; R1=CONTENTS OF RKERR; R2=ADDRESS OF CSRL;.DMSOFT: BIT #WCE,RKCS2(R2) ;WRITE CHECK ERROR? BEQ 10$ ;IF EQ NOG/ MOV #IE.WCK&377,R0 ;SET WRITE CHECK ERROR CODEC+ BR DMRTRY ;AND ATTEMPT TO RETRY OPERATIONK$10$: TST RKCS2(R2) ;DATA LATE ERROR? BMI DMDLT ;IF MI YES9 BIT #DCPAR!CTO,(R2) ;CONTROLLER TIMEOUT OR PARITY ERROR? BNE DMRTRY ;IF NE YES 1 BIT #CDPAR,R1 ;CONTROLLER TO DRIVE PARITY ERROR? BNE DMRTRY ;IF NE YESF* BIT #OPI!SKI,R1 ;DRIVE POSITIONING ERROR? BEQ DMECC ;IF EQ NO ( MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS) CALL DMCLER ;CLEAR CONTROLLER AND DRIVET;H; DO A RECALIBRATE OPERATION;.DMRCAL: MOV #HMS,R0 ;SET RECALIBRATE FUNCTION4 BISB #RCL,U.CW2+1(R5);INDICATE RECALIBRATE FUNCTION% CALLR DMDIP1 ;ISSUE THE RECALIBRATED;I!; **-DMECC-ATTEMPT ECC CORRECTIONT;LD; THIS ROUTINE IS ENTERED IF A DATA ERROR IS DETECTED. IF THE ERRORG; IS CORRECTABLE, THE EXECUTIVE ECC ROUTINE IS CALLED AND THE OPERATION!E; IS RESTARTED FROM WHERE THE CONTROLLER STOPPED. IF OFFSET RECOVERY4; IS REQUIRED, WE WILL DO IT.L;M ; INPUTS:R;N; R1=CONTENTS OF RKER; R2=ADDRESS OF CONTROLLER CSR;M6DMECC: CMPB #READ,U.BUF(R5) ;IS THIS A READ OPERATION? BNE DMRTRY ;IF NE NO. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS' BITB #IQ.X,I.FCN(R3) ;INHIBIT RETRIES?R BNE DMFIN ;IF NE YES' MOV S.KRB(R4),R3 ;RETREIVE KRB ADDRESSE- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXV" DECB RTTBL(R3) ;RE-READ THE DATA?* BLE 10$ ;IF LE NO, DO THE ECC CORRECTION) CALLR DMREST ;YES, RESTART THE TRANSFERQ,10$: MOVB #RETRY,RTTBL(R3);RESET RETRY COUNT3 MOV RKWC(R2),R0 ;GET NEGATIVE # OF WORDS REMAINING ASL R0 ;CONVERT TO BYTES6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED. BEQ DMOFF ;IF EQ NONE TRANSFERED, TRY OFFSET2 BIC #^C,R1 ;ISOLATE IMPORTANT BITS% CMP #DCK,R1 ;ONLY DATA CHECK ERROR?E! BNE DMOFF ;IF NE NO, TRY OFFSET3* MOV RKECPS(R2),R1 ;GET ECC ERROR POSITION. MOV RKECPT(R2),R3 ;GET ECC CORRECTION PATTERN* MOV RKWC(R2),R2 ;GET REMAINING WORD COUNT$ CALL $ECCOR ;DO THE ECC CORRECTION/ CALL DMPRM0 ;RESET OFFSET RECOVERY PARAMETERSE( CALL DMCALC ;RE-CALCULATE DISK ADDRESS5 MOV #IS.SUC&377,R0 ;ASSUME NO MORE WORDS TO TRANSFERA+ TST U.CNT(R5) ;ANY MORE WORDS TO TRANSFER?F BNE 20$ ;IF NE YES CALLR DMFIN ;NO, FINISH I/O ,20$: MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS) CALL DMCLER ;CLEAR CONTROLLER AND DRIVE3" CALL DMERL ;FINISH ERROR LOGGING7 MOV U.BUF+2(R5),RKBA(R2) ;SET 00cc*cDATADATADATADATADATADATADATAPREVIOUS BUFFER ADDRESS: MOV I.PRM+10(R1),RKDC(R2) ;SET PREVIOUS CYLINDER ADDRESS6 MOV I.PRM+12(R1),RKDA(R2) ;SET PREVIOUS DISK ADDRESS( CALLR DMDIP ;RESTART THE DATA TRANSFER;K; **-DMDLT-DATA LATE RECOVERYA;MI; THIS ROUTINE IS ENTERED IF A DATA LATE ERROR IS DETECTED. WE WILL NOW H; BACKUP THE WORD COUNT, BUS ADDRESS AND CYLINDER/TRACK/SECTOR ADDDRESS H; BY ONE BLOCK AND RETRY THE TRANSFER FROM THIS POINT. THIS IS DONE TO H; PREVENT THE DATA LATE CONDITION FROM RECURRING DUE TO A LONG TRANSFER.;E ; INPUTS:;V; R0=IE.VER&377C; R1=CONTENTS OF RKERI"; R2=ADDRESS OF REGISTER SAVE AREA;)4DMDLT: MOV S.PKT(R4),R3 ;RETRIEVE I/O PACKET ADDRESS& BITB #IQ.X,I.FCN(R3) ;INHIBIT RETRIES BEQ 20$ ;IF EQ NOH#10$: JMP DMFIN ;YES, FINISH UP I/OE+20$: MOV S.KRB(R4),R3 ;RETRIEVE KRB ADDRESSE- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXT" DECB RTTBL(R3) ;ANY RETRIES LEFT? BLE 10$ ;IF LE NOTH; FOR WRITE OPERATIONS, RKWC NEEDS TO BE ADJUSTED BY THE NUMBER OF WORDS; FOUND IN THE SILO.. MOV RKWC(R2),R0 ;GET NEGATIVE WORDS REMAINING2 CMPB #READ+WRT,U.BUF(R5) ; LAST FUNCTION A WRITE?- BNE 30$ ;IF NE, NO- NO ADJUSTMENT NECESSARYA) DEC R0 ;RKWC STILL OFF BY ONE SOMETIMEST7 SUB SILOA(R3),R0 ;ADJUST BY NUMBER OF WORDS FOUND WHENI+ ;ERROR WAS LOGGED (SEE DMLERR & REGPAS)R/; FINALLY, CALCULATE WHERE TO RESTART OPERATION '30$: ASL R0 ;CONVERT TO NEGATIVE BYTES6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED+ BGE 35$ ;OUT OF BOUNDS DUE TO ADJUSTMENT?N& CLR R0 ;OK, THEN NO BYTES TRANSFERED135$: BIC #777,R0 ;GET BLOCKS ACTUALLY TRANSFERED 0 CALL DMCALC ;BACKUP TO START OF BLOCK IN ERROR& TST U.CNT(R5) ;LAST BLOCK TRANSFERED? BNE 40$ ;IF NE NOE, ADD R0,U.CNT(R5) ;YES, NORMALIZE BYTE COUNT240$: MOV #IE.VER&377,R0 ;ASSUME NO FURTHER RETRIES' JMP DMREST ;RESTART THE I/O OPERATION ;R"; **-DMOFF-ATTEMPT OFFSET RECOVERY;O=; THIS ROUTINE IS CALLED WHENEVER WE NEED TO OFFSET THE HEADSR@; SOME DISTANCE FROM TRACK CENTERLINE TO PROPERLY READ THE DATA.;K ; INPUTS:Y; 6; R0=NUMBER OF BYTES ACTUALLY TRANSFERED TO THIS POINT; R3=CONTROLLER INDEX ;C)DMOFF: DECB OFFRTY(R3) ;ANY RETRIES LEFT?) BGT 10$ ;IF GT YES/5$: MOV #IE.VER&377,R0 ;SET UNRECOVERABLE ERROR  CALLR DMFIN ;FINISH I/OM,10$: MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS& TST R0 ;ANY GOOD SECTORS TRANSFERED? BEQ 40$ ;IF EQ NOT;T@; THE TRANSFER ENDED IN AN ECC HARD ERROR BUT THERE WERE SECTORS@; TRANSFERED THAT CONTAINED GOOD DATA. SINCE THE ECC HARD ERRORA; COULD HAVE BEEN CAUSED BY A CYLINDER CROSSING, THE GOOD DATA ISL<; SAVED AND THE TRANSFER IS RETRIED FROM THE POINT OF ERROR.;D, BIT #ECH,RKER(R2) ;WAS IT A HARD ECC ERROR? BEQ 15$ ;IF EQ NOI1 SUB #512.,R0 ;BACK UP TO START OF BLOCK IN ERRORN,15$: CALL DMCALC ;RE-CALCULATE DISK ADDRESS2 TST U.CNT(R5) ;ANY BYTES REMAIN TO BE TRANSFERED? BNE 20$ ;IF NE YES0 ADD R0,U.CNT(R5) ;NO, NORMALIZE BYTES REMAINING520$: CALL DMPRM1 ;RESET OFFSET TABLE ADDRESS POINTERD BR 50$I; ;; NO GOOD DATA WAS TRANSFERED SO CHECK TO SEE IF THE OFFSETO*; FROM TRACK CENTERLINE SHOULD BE CHANGED.;F&40$: DECB OFFRTY+1(R3) ;CHANGE OFFSET? BLE 45$ ;IF LE YES# JMP DMINIO ;RESTART THE OPERATION 945$: MOVB #OFFTRY,OFFRTY+1(R3) ;SET RECOVERY RETRY COUNTO)50$: INC OFFAD(R3) ;UPDATE OFFSET POINTERD( MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS+ CMP #OFFTBE,OFFAD(R3) ;ALL OFFSETS TRIED?, BLT 5$ ;IF YES RETURN ERRORR* MOVB @OFFAD(R3),R0 ;GET NEXT OFFSET VALUE, BNE 60$ ;IF NE NOT RETURNING TO CENTERLINE8 MOVB #RETRY*2,OFFRTY+1(R3) ;TRY 16 TIMES AT CENTERLINE-60$: CALL DMCLER ;CLEAR CONTROLLER AND DRIVED% BIC #^C<377>,R0 ;ISOLATE OFFSET BITS4( MOV R0,RKOF(R2) ;LOAD NEXT OFFSET VALUE" MOV #OFF,R0 ;SET OFFSET FUNCTION5 BISB #OFS!OFM,U.CW2+1(R5) ;INDICATE OFFSET FUNCTION;' CALLR DMDIP1 ;EXECUTE OFFSET FUNCTION2;R&; RESET THE OFFSET RECOVERY PARAMETERS;A3DMPRM: MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNTV?DMPRM0: MOVB #1,OFFRTY+1(R3) ;SET INITIAL RECOVERY COUNT TO ONER> MOVB #RETRY*2+OFFTRY*7+16.,OFFRTY(R3)00ccc ;SET TOTAL RETRY COUNT ;FOR OFFSET RECOVERY9DMPRM1: MOV #OFFTB-1,OFFAD(R3) ;SET OFFSET TABLE POINTERF RETURN ;M;K6; **-DMERL-FINISH ERROR LOGGING FOR MID TRANSFER ERROR;U@; THIS ROUTINE IS CALLED TO FINISH OFF THE ERROR LOGGING PROCESS8; DURING MID-TRANSFER IF WE HAVE SUCCESSFULLY RECOVERED.;S ; INPUTS: ;A; R3=CONTROLLER INDEXV;E#DMERL: MOV R2,-(SP) ;SAVE REGISTERS MOV R1,-(SP) ;.../ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTV/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTT, MOV #IS.SUC&377,R0 ;RECOVERY WAS SUCCESSFUL+ CALL $FNERL ;FINISH ERROR LOGGING PROCESSO MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 ;.... BR DMPRM ;RESET RECOVERY PARAMETERS AND EXIT;A5; **-DMCALC-CALCULATE UPDATED DISK AND BUFFER ADDRESSM;T?; THIS ROUTINE WILL CALCULATE THE NEW DISK AND BUFFER ADDRESSES 3; BASED ON THE NUMBER OF BYTES ACTUALLY TRANSFERED. ;I ; INPUTS:V;,; R0=BYTES ACTUALLY TRANSFERED; ; OUTPUTS:;R; R0=UNCHANGED IF U.CNT(R5)=0M#; I.PRM+10(R1)=NEW CYLINDER ADDRESSS'; I.PRM+12(R1)=NEW TRACK/SECTOR ADDRESS (; U.BUF+1(R5)=NEW ADDRESS EXTENSION BITS; U.BUF+2(R5)=NEW BUS ADDRESS;V<DMCALC: SUB R0,U.CNT(R5) ;REDUCE BYTES REMAINING TO TRANSFER BEQ 30$ ;IF EQ NONE LEFT3 ADD R0,U.BUF+2(R5) ;UPDATE STARTING BUFFER ADDRESSE6 ADCB U.BUF+1(R5) ;PROPAGATE CARRY INTO EXTENSION BITS' MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESSF& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESS0 ADCB -(R1) ;...()5$: SWAB R0 ;CALCULATE THE NUMBER OF ...S ASR R0 ;... SECTORS TRANSFERED) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSO1 ADD I.PRM+12(R1),R0 ;UPDATE TRACK/SECTOR ADDRESSC$10$: CMPB #22.,R0 ;SECTOR OVERFLOW? BHI 20$ ;IF HI NOQ' SUB #22.,R0 ;NORMALIZE SECTOR ADDRESS5 ADD #400,R0 ;ADD IN A TRACKS CMP #3*400,R0 ;TRACK OVERFLOW?C BHI 10$ ;IF HI NOI' SUB #3*400,R0 ;NORMALIZE TRACK ADDRESSS* INC I.PRM+10(R1) ;UPDATE CYLINDER ADDRESS BR 10$ ;;20$: MOV R0,I.PRM+12(R1) ;SAVE UPDATED TRACK/SECTOR ADDRESSR30$: RETURN ; ;O(; **-DMVV-PROCESS VOLUME VALID FUNCTIONS;VB; HERE WE WILL PROCESS VOLUME VALID FUNCTIONS. IF THE FUNCTION ISB; RESET VOLUME VALID WE WILL FORCE AN UNLOAD OF THE DRIVE. IF THEB; FUNCTION IS SET VOLUME VALID, WE WILL SET THE HARDWARE "VV" BIT.A; IF THE FUNCTION IS A VOLUME VALID NOP, WE WILL SIZE THE DISK BYI6; PASSING THE CONTROLLER REGISTERS BACK TO THE CALLER.;P8DMVV: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER( MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS. CALL DMCLR ;CLEAR CONTROLLER AND SELECT UNIT CALL DMSDC ;SELECT THE DRIVE CALL DMDC ;CLEAR THE DRIVE. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS TST I.PRM+2(R1) ;SIZE THE DISK? BPL 10$ ;IF PL NOE* BIT #NED,RKCS2(R2) ;DOES THE DRIVE EXIST? BEQ 5$ ;IF EQ YESI" CALL DMCLR ;CLEAR THE CONTROLLER* MOV #IE.SZE&377,R0 ;UNABLE TO SIZE DEVICE) BICB #US.VV,U.STS(R5);RESET VOLUME VALIDE CALLR DMFIN3 ;EXIT55$: CALL DMRPAS ;PASS CONTROLLER REGISTERS TO CALLERR BR 30$ ;010$: BIT #VV$SET,I.PRM+2(R1) ;SET VOLUME VALID? BEQ 40$ ;IF EQ NOL7 MOV RKDS(R2),R1 ;GET CONTENTS OF DRIVE STATUS REGISTER COM R1 ;TOGGLE THEME0 BIT #SVAL!DRDY!DRA,R1 ;DRIVE READY AND ONLINE? BEQ 15$ ;IF EQ YES( MOV #IE.DNR&377,R0 ;SET DRIVE NOT READY) BICB #US.VV,U.STS(R5);RESET VOLUME VALID BR 35$ ;-15$: MOV #ACK,R0 ;GET PACK ACK FUNCTION CODE #20$: CALL DMGO ;ISSUE THE FUNCTIONV030$: MOV #IS.SUC&377,R0 ;SET SUCCESSFUL FUNCTION35$: CALLR DMFIN1 ;AND EXIT040$: BIT #VV$UNL,I.PRM+2(R1) ;UNLOAD THE HEADS? BEQ 30$ ;IF EQ NO?, BIT #PIP,RKDS(R2) ;POSITIONING IN PROGRESS?- BNE 30$ ;IF NE YES, IT'S PROBABLY UNLOADINGO- MOV #UNL,R0 ;GET UNLOAD HEADS FUNCTION CODEY BR 20$ ;;+<; INITIATE A CONTROLLER/DRIVE CLEAR OR SELECT DRIVE FUNCTION"; AND WAIT FOR THE SERIAL MESSAGE.;7; NOTE: THE TIMING LOOP AT 20$ IS TO ALLOW TIME FOR THE 7; SERIAL MESSAGE TO BE SENT TO THE DRIVE AND THE STATUS34; TO BE RECEIVED BY THE RK611. AVERAGE TIME = 15US.;- .ENABL LSB#%DMCLER: CALL DMCLR ;CLEAR CONTROLLE00cc*cDATADATADATADATADATADATADATAR!DMDC: MOV R0,-(SP) ;SAVE REGISTERS& MOV #DC,R0 ;GET CODE FOR DRIVE CLEAR BR 10$ ;3DMSDC: CLR RKDC(R2) ;CLEAR DESIRED CYLINDER ADDRESS DMSD: MOV R0,-(SP) ;' MOV #SD,R0 ;GET CODE FOR SELECT DRIVEE#10$: CALL DMGO ;ISSUE THE FUNCTIONN MOV (SP)+,R0 ;T RETURN DMGO: CALL DMXCT ;LOAD RKCS1G020$: TSTB (R2) ;WAIT FOR THE SERIAL MESSAGE ... BPL 20$ ;... TO DO ITS THING RETURN ;3'DMCLR: MOV #CERR,(R2) ;CLEAR CONTROLLER 0 MOVB U.UNIT(R5),-(SP) ;GET CURRENT UNIT NUMBER( MOV (SP)+,RKCS2(R2) ;RE-SELECT THE UNIT RETURNS/DMXCT: CMP #815.,U.PRM+2(R5) ;IS THIS AN RK07?  BNE 30$ ;IF NE NOD1 BIS #CDT,R0 ;YES, SET CONTROLLER DRIVE TYPE BIT0'30$: MOV R0,(R2) ;EXECUTE THE FUNCTIONC RETURN ;:0DMCYL: MOV #2,RKMR1(R2) ;SET MESSAGE SELECT CODE( CALL DMSD ;SELECT DRIVE TO GET MESSAGE' MOV RKMR3(R2),R0 ;GET MESSAGE CONTENTSS, ASH #-4,R0 ;RIGHT JUSTIFY CYLINDER ADDRESS3 BIC #^C<1777>,R0 ;ISOLATE CURRENT CYLINDER ADDRESSM RETURN ;) .DSABL LSBC;+5; **-DMLXXX-RK611-RK06/RK07 DISK CARTRIDGE CONTROLLER; ERROR LOGGING ROUTINES;PB; THIS ROUTINE IS CALLED WHENEVER A DEVICE ERROR OR DEVICE TIMEOUT:; OCCURS. A CORE BLOCK THE SIZE OF THE REGISTER BUFFER ISB; ALLOCATED AND THE REGISTERS (INCLUDING THE SIX EXTRA MAINTENANCE<; REGISTERS) ARE TRANSFERED INTO THE CORE BLOCK AND THEN THEB; APPROPRIATE EXECUTIVE ERROR LOGGING ROUTINE IS CALLED. THE COREA; BLOCK ADDRESS IS THEN USED AS A PSEUDO REGISTER BASE ADDRESS BYC; THE ERROR HANDLING ROUTINES. BEFORE THE NEXT FUNCTION IS ISSUED,R(; THE REAL CSR ADDRESS MUST BE RESTORED.;<; NOTE: IF ENTRY IS THE RESULT OF A DEVICE TIMEOUT THEN THIS>; ROUTINE IS EXECUTED AT THE RK611 DEVICE PRIORITY LEVEL (PR5)1; UNTIL THE EXEC ERROR LOGGING ROUTINE IS CALLED.S;E ; INPUTS:N; R2 = CSR ADDRESSE; R4 = SCB ADDRESSC; ; OUTPUTS:%; R2 = ADDRESS OF REGISTER SAVE AREAO; R4 = SCB ADDRESSE; "; R0,R3 ARE PRESERVED ACROSS CALL;- .ENABL LSBS;DMLTMO: MOV #$DVTMO,R1 ;;;GET ADDRESS OF OVERLAPPED TIMEOUTT BR 10$ ;;;;DMLERR: MOV #$DVERR,R1 ;GET ADDRESS OF DEVICE ERROR ROUTINE!10$: MOV R3,-(SP) ;SAVE REGISTERS  MOV R0,-(SP) ;...& MOV R1,-(SP) ;SAVE CO-ROUTINE ADDRESS* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXU& MUL #RMCNT,R3 ;FORM AN INDEX INTO ...' ADD #RGBLK,R3 ;... REGISTER BLOCK AREA " MOV R3,R0 ;COPY REGISTER ADDRESS" MOV R0,-(SP) ;SAVE THIS FOR LATER' CALL REGPAS ;FILL AREA WITH REGISTERS - MOV (SP)+,R2 ;RETRIEVE REGISTER AREA ADDRESSE. CALL @(SP)+ ;CALL EXEC ERROR LOGGING ROUTINE MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R3 ;... RETURN ; .DSABL LSBP;+5; **-DMRPAS-RK611-RK06/RK07 DISK CARTRIDGE CONTROLLER)"; CONTROLLER REGISTER PASS ROUTINE;O;; THIS ROUTINE WILL TRANSFER THE CONTENTS OF THE CONTROLLER ;; REGISTERS (INCLUDING THE SIX EXTRA MAINTENANCE REGISTERS)V%; INTO A PREVIOUSLY ALLOCATED BUFFER.,;P ; INPUTS:S; R0 = BUFFER ADDRESSS; R1 = I/O PACKET ADDRESS ; R2 = CSR ADDRESS; R4 = SCB ADDRESS; R5 = UCB ADDRESS ; OUTPUTS:; R2 = CSR ADDRESS; R3 = DESTROYED;-<DMRPAS: MOV I.PRM+14(R1),KISAR6 ;SET BUFFER RELOCATION BIAS1 MOV I.PRM+16(R1),R0 ;GET REGISTER BUFFER ADDRESSE:REGPAS: MOV #RKMR2/2,R3 ;NUMBER OF MAJOR REGISTERS TO PASS MOV R2,-(SP) ;SAVE CSR ADDRESST+10$: MOV (R2)+,(R0)+ ;TRANSFER THE REGISTERT+ SOB R3,10$ ;LOOP UNTIL ALL ARE TRANSFEREDA" MOV (SP)+,R2 ;RESTORE CSR ADDRESS! MOV R0,R3 ;SAVE BUFFER POSITION-; DETERMINE NUMBER OF WORDS CONTAINED IN SILO ' MOV S.KRB(R4),R0 ;RETRIEVE KRB ADDRESSP, MOVB K.CON(R0),R0 ;PICK UP CONTROLLER INDEX$ CLR SILOA(R0) ;ASSUME NO ADJUSTMENT. BIT #OR,RKCS2-RKMR2(R3) ; WAS DATA AVAILABLE?* BEQ 17$ ;IF EQ- NO ADJUSTMENT WAS NEEDED) INC SILOA(R0) ;COUNT RKDB ALREADY STOREDS812$: BIT #OR,RKCS2(R2) ;CHECK REAL CSR FOR ANY REMAINING BEQ 17$ ;IF EQ, NO- SILO EMPTY TST RKDB(R2) ;POP ANOTHER WORDA) INC SILOA(R0) ;COUNT RKDB ALREADY STOREDR BR 12$ ;UNTIL EMPTY!)17$: CALL DMCLR ;CLEAR CONTROLLER ERRORS * CALL DMCYL ;GET CURRENT CYLINDER ADDRESS7 MOV R0,RK00cccDC-RKMR2(R3) ;STORE CURRENT CYLINDER ADDRESSC# MOV R3,R0 ;RESTORE BUFFER POINTERB CLR R3 ;CLEAR COUNT;"20$: CALL DMCLR ;CLEAR CONTROLLER. MOV R3,RKMR1(R2) ;SELECT DRIVE SERIAL MESSAGE/ CALL DMSD ;SELECT DRIVE TO GET PROPER MESSAGE;* MOV RKMR2(R2),(R0)+ ;SAVE CONTENTS OF MR2* MOV RKMR3(R2),(R0)+ ;SAVE CONTENTS OF MR3. INC R3 ;INCREMENT DRIVE SERIAL MESSAGE COUNT$ CMP R3,#4 ;DONE FOUR MESSAGES YET? BNE 20$ ;NO, LOOP 3 CALLR DMCLER ;CLEAR CONTROLLER AND DRIVE AND EXITR;+5; **-DMDINT-RK611-RK06/RK07 DISK CARTRIDGE CONTROLLERS; DIAGNOSTIC INTERRUPT HANDLER;N?; THIS SUBROUTINE HANDLES INTERUPTS FROM DIAGNOSTIC OPERATIONS.:; IF THE FUNCTION WAS DIAGNOSTIC THEN THE DEVICE REGISTERSE; ARE PASSED BACK TO THE DIAGNOSTIC TASK, THE CONTROLLER (VIA DMRPAS)T;; AND THE DRIVE ARE CLEARED AND THE I/O STATUS IS RETURNED. ;N ; INPUTS:V; R0 = I/O STATUS CODE; R1 = ADDRESS OF I/O PACKET; R2 = ADDRESS OF CSRL; R4 = ADDRESS OF SCBL; R5 = ADDRESS OF UCBE;D ; OUTPUTS:2; R1 = I/O PACKET ADDRESS (IF DIAGNOSTIC FUNCTION); R2 = ADDRESS OF CSRT; R4 = ADDRESS OF SCBH1; C = 1 IF INTERRUPT WAS FROM DIAGNOSTIC FUNCTIONR;O!; R0,R3 ARE PRESERVED ACROSS CALLT;-.DMDINT: CLC ;ASSUME NOT DIAGNOSTIC INTERRUPT. BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION? BEQ 30$ ;IF EQ NO, EXIT  MOV R3,-(SP) ;SAVE REGISTER$ MOV R1,R3 ;COPY I/O PACKET ADDRESS+ MOV R0,-(SP) ;SAVE CURRENT I/O STATUS CODED+ TSTB R0 ;WAS THIS A SUCCESSFUL INTERRUPT?A( BMI 20$ ;IF MI JUST PASS THE REGISTERS- CMP #IO.RDH!IQ.UMD,I.FCN(R3) ;READ HEADERS?= BNE 20$ ;NO, PROCESS NORMALS' CLR R0 ;CLEAR BYTE OFFSET INTO BUFFERI( CALL $RELOP ;RELOCATE PHYSICAL ADDRESS/ MOV RKDB(R2),(R1)+ ;TRANSFER FIRST HEADER WORD 0 MOV RKDB(R2),(R1)+ ;TRANSFER SECOND HEADER WORD/ MOV RKDB(R2),(R1)+ ;TRANSFER THIRD HEADER WORDM"20$: CALL DMSDC ;SELECT THE DRIVE$ MOV R3,R1 ;SAVE I/O PACKET ADDRESS, CALL DMRPAS ;PASS THE CONTROLLER REGISTERS' SEC ;SET DIAGNOSTIC INTERRUPT RETURNI& MOV (SP)+,R0 ;RESTORE I/O STATUS CODE' MOV (SP)+,R3 ;RESTORE CONTROLLER INDEXS 30$: RETURN ;+'; **-DMCKB-VALIDATE AND CONVERT THE LBNE;N9; THIS ROUTINE IS CALLED FROM $DRQRQ TO DO LBN PROCESSINGR9; FOR DEVICES WHICH SUPPORT QUEUE OPTIMIZATION. IF BLKC2R9; DETECTS AN ERROR IT WILL RETURN TO THE CORRECT PLACE INS; $DRQRQ AFTER CALLING $IOALT.;M ; INPUTS:T;E; R1=I/O PACKET ADDRESS ; R5=UCB ADDRESS;C ; OUTPUTS:;S4; IF THE CHECKS SUCCEEDS, THEN THE LBN IN THE PACKET=; IS REPLACED BY THE CYLINDER/TRACK/SECTOR. R1 IS PRESERVED.P;R:; IF THE CHECKS FAILS, THEN $IOALT IS ENTERED WITH A FINAL8; STATUS OF IE.BLK AND A RETURN TO THE CORRECT PLACE IN ; $DRQRQ IS EXECUTED.N;O;S<; NOTE: ALL FUNCTIONS PUT INTO THE DRIVER QUEUE ARRIVE HERE.3; THESE INCLUDE IO.ATT, IO.DET, AND ACP FUNCTIONS.P;-;DMCHK: MOV I.FCN(R1),-(SP) ;PUT THE FUNCTION ONTO THE STACKI& CMPB #IO.ATT/256.,1(SP) ;IS IT ATTACH% BEQ 35$ ;IF EQ YES - LEAVE IT ALONEE' CMPB #IO.DET/256.,1(SP) ;IS IT DETACHA% BEQ 35$ ;IF EQ YES - LEAVE IT ALONES) BIC #7,(SP) ;CLEAR THE SUBFUNCTION BITSE- CMP #IO.STC,(SP) ;IS IT SET CHARACTERISTICS?E% BEQ 35$ ;IF EQ YES - LEAVE IT ALONEI TST (SP)+ ;CLEAN THE STACK) CALL $BLKC2 ;CHECK LOGICAL BLOCK NUMBERI0 CMPB #IO.WLB/256.,I.FCN+1(R3) ;WRITE FUNCTION? BNE 20$ ;IF NE NOO8 BITB #IO.WLT&377,I.FCN(R3) ;OK TO WRITE ON LAST TRACK? BNE 20$ ;IF NE YES/ MOV R0,I.PRM+6(R3) ;SAVE STARTING BLOCK NUMBERQ5 ADD #22.,I.PRM+12(R3) ;ADD 1 TRACK'S WORTH OF BLOCKST0 MOV R3,R1 ;RESTORE PACKET ADDRESS FOR THE CALL3 CALL $BLKC2 ;CHECK IF WRITE ON LAST TRACK OF DISKS; MOV I.PRM+6(R3),R0 ;RESTORE ORIGINAL STARTING BLOCK NUMBERL/20$: CALL $CVLBN ;CONVERT LOGICAL BLOCK NUMBERL3 MOV R2,I.PRM+10(R3) ;SAVE DESIRED CYLINDER ADDRESS/" SWAB R1 ;SWAP TRACK TO HIGH BYTE$ BIS R1,R0 ;MERGE TRACK WITH SECTOR; MOV R0,I.PRM+12(R3) ;SAVE DESIRED TRACK AND SECTOR ADDRESSS' MOV R3,R1 ;RESTORE THE PACKET ADDRESSK30$: RETURN ;EXIT. 35$: TST (SP)+ ;CLEAN THE STACK BR 30$ ;AND EXIT .ENDEACKET ADDRESS FOR THE CA00cc*cDATADATADATADATADATADATADATA .TITLE DPDRV .IDENT /08/; ; COPYRIGHT (C) 1974, 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 08;; D. N. CUTLER 9-FEB-74;; PREVIOUSLY MODIFIED BY:;; P. J. BEZEREDI; D. N. CUTLER; C. A. D'ELIA;; MODIFIED BY:;;; P. J. BEZEREDI 14-DEC-77;6; PB050 -- REMOVE UNNEEDED CONDITIONALS FOR RSX-11M+.;; P. J. BEZEREDI 21-AUG-78; 6; PB083 -- ADDITION OF SOFTWARE VOLUME VALID SUPPORT.;I; P. J. BEZEREDI 01-FEB-79;S8; PB097 -- ISSUE RECALIBRATE IF HEADER NOT FOUND ERROR.;O&; RP11-C/E DISK PACK CONTROLLER DRIVER;H; MACRO LIBRARY CALLSN; .MCALL HWDDF$,PKTDF$ $ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;.; EQUATED SYMBOLS ;LRETRY=8. ;ERROR RETRY COUNT ; ; LOCAL DATA;7>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER); <RTTBL: .BLKW R$$P11 ;ERROR RETRY COUNT AND POSITIONING FLAG;A ; DIAGNOSTIC FUNCTION CODE TABLE;-"FUNTBL: .WORD IO.HMS!IQ.UMD, 20015 .WORD IO.BLS!IQ.UMD, 20011O .WORD IO.RDH!IQ.UMD, 14105C .WORD IO.WDH!IQ.UMD, 14103  .WORD IO.WCK!IQ.UMD, 00107 FUNTBE:T;H; DRIVER DISPATCH TABLER;S( DDT$ DP,R$$P11 ;GENERATE DISPATCH TABLE;+2; **-DPINI-RP11-C/E DISK PACK CONTROLLER INITIATOR; H; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUEG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THENH; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN AH; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER IH; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER>; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.;I ; INPUTS:E;:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;H ; OUTPUTS:;NB; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAB; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OP; ATION IS INITIATED.E;- .ENABL LSBS5DPINI: GTPKT$ R$$P11 ;GET NEXT I/O PACKET TO PROCESS ;S1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:E;Q'; R1=ADDRESS OF THE I/O REQUEST PACKET. -; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB. ; R3=CONTROLLER INDEX.); R3=ADDRESS OF THE STATUS CONTROL BLOCK.C:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;T:; RP11-C/E DISK PACK CONTROLLER I/O REQUEST PACKET FORMAT:; "; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK. @; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.B; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTOR TASK HEADE1; WD. 05 -- I/O FUNCTION CODE (IO.RLB OR IO.WLB).R0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.B; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140003; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.A; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER.S+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.3-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.K; WD. 15 -- NOT USED.O9; WD. 16 -- LOW BYTE MUST BE ZERO AND HIGH BYTE NOT USED. 0; WD. 17 -- LOGICAL BLOCK NUMBER OF I/O REQUEST.A; WD. 20 -- RELOCATION BIAS OF DIAGNOSTIC REG. ADRS ELSE NOT USEDN<; WD. 21 -- DIAGNOSTIC REG. BLK ADRS (REAL OR DISPL.+140000);(< MOV #RETRY&377,RTTBL(R3) ;CLEAR RECAL FLAG AND SET RETRIES$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 8$ ;IF CS WE FAILED  TST R0 ;TRANSFER FUNCTION? BMI 1$ ;IF MI YES TST I.PRM+2(R1) ;SIZE THE DISK? BPL 8$ ;IF PL NO, MOVB R2,U.BUF+1(R5) ;STUFF UNIT SELECT BITS' MOV S.CSR(R4),R2 ;RETREIVE CSR ADDRESSS- CALL 200$ ;ABORT CONTROLLER AND SELECT UNITE# JMP 105$ ;PASS REGISTERS AND EXITF1$: ;REF LABELR .IF DF M$$EXT, CALL $STMAP ;SET UP UNIBUS MAPPING ADDRESS .ENDC) MOVB R2,U.BUF+1(R5) ;INSERT DRIVE NUMBER 00ccc8 CMPB #IO.HMS/^D<256>,I.FCN+1(R1) ;DIAGNOSTIC FUNCTION? BNE 5$ ;IF NE NO. MOV #FUNTBL,R0 ;GET ADDRESS OF FUNCTION TABLE-3$: CMP (R0)+,I.FCN(R1) ;FUNCTION CODE MATCH? BEQ 4$ ;IF EQ YESM# TST (R0)+ ;BYPASS CONTROLLER CODE ' CMP #FUNTBE,R0 ;END OF FUNCTION TABLE?R BEQ 5$ ;IF EQ YESO BR 3$ ;TRY AGAIN44$: BIS (R0),U.BUF(R5) ;SET CONTROLLER FUNCTION BITS' BR 10$ ;GO CHECK LOGICAL BLOCK NUMBERL/5$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTIONC1 BIS #105,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTIONC6 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?# BHIS 9$ ;IF HIS FUNCTION IS LEGALG"8$: JMP 100$ ;FUNCTION IS ILLEGAL%9$: BEQ 10$ ;IF EQ FUNCTION WAS READ4 SUB #2,U.BUF(R5) ;CONVERT TO WRITE LOGICAL FUNCTION-10$: CALL $BLKCK ;CHECK LOGICAL BLOCK NUMBERR+ CALL $CVLBN ;CONVERT LOGICAL BLOCK NUMBER$3 MOV R2,I.PRM+10(R3) ;SAVE DESIRED CYLINDER ADDRESSB" SWAB R1 ;SWAP TRACK TO HIGH BYTE$ BIS R1,R0 ;MERGE TRACK WITH SECTOR3 MOV R0,I.PRM+12(R3) ;SAVE TRACK AND SECTOR ADDRESSC;N; INITIATE I/O OPERATION;F30$: ;REF LABEL .IF DF M$$EXT% CALL $MPUBM ;MAP UNIBUS TO TRANSFER$ .ENDC% MOV S.CSR(R4),R2 ;GET ADDRESS OF CSRW9 MOV S.PKT(R4),R1 ;RETRIEVE ADDRESS OF I/O REQUEST PACKETI; MOVB S.ITM(R4),S.CTM(R4) ;SET CURRENT DEVICE TIMEOUT COUNTL- CALL 200$ ;ABORT CONTROLLER AND SELECT UNITR, ADD #10,R2 ;POINT TO DISK ADDRESS REGISTER8 MOV I.PRM+12(R1),(R2) ;INSERT TRACK AND SECTOR ADDRESS1 MOV I.PRM+10(R1),-(R2) ;INSERT CYLINDER ADDRESSC. MOV U.BUF+2(R5),-(R2) ;INSERT BUFFER ADDRESS8 MOV U.CNT(R5),-(R2) ;INSERT NUMBER OF BYTES TO TRANSFER! ROR (R2) ;CONVERT TO WORD COUNTC$ NEG (R2) ;MAKE NEGATIVE WORD COUNT TST -(R2) ;POINT BACK TO CSR+ MOV #IE.DNR&377,R0 ;ASSUME DRIVE NOT READYT8 MOV -4(R2),-(SP) ;GET CONTENTS OF DRIVE STATUS REGISTER COM (SP) ;COMPLEMENT STATUSE, BIT #140000,(SP)+ ;DRIVE READY AND ON-LINE? BEQ 31$ ;IF EQ YES/ BITB #US.SPU,U.STS(R5) ;IS DRIVE SPINNING UP?V BNE 35$ ;IF NE YES- BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC REQUEST?) BNE 39$ ;IF NE YES) CALL $DVERR ;LOG DEVICE NOT READY ERRORB JMP 90$ ;FINISH I/O(531$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE SPINNING UP : CMPB #IO.RDH!IQ.UMD&377,I.FCN(R1) ;READ HEADER FUNCTION? BEQ 33$ ;IF EQ YES; CMPB #IO.WDH!IQ.UMD&377,I.FCN(R1) ;WRITE HEADER FUNCTION?T BNE 34$ ;IF NE NOE833$: BIT #360,10(R2) ;SYNCHRONIZE THE SECTOR COUNTER ...2 BNE 33$ ;... ON THE NEXT INDEX PULSE IN CASE ...1 BIT #360,10(R2) ;... A UNIT OTHER THAN 0 WAS ...I. BNE 33$ ;... SELECTED FOR HEADER OPERATIONS.,34$: CALL $BMSET ;SET I/O ACTIVE IN BIT MAP* MOVB U.BUF(R5),(R2) ;LOAD FUNCTION AND GO;.<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;7DPCAN: RETURN ;;;NOP FOR RP11;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVED?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANYAA; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESSB; THE UNIT IS ALREADY READY.;-/DPPWF: TSTB S.STS(R4) ;IS DRIVE CURRENTLY BUSY?  BEQ 36$ ;IF EQ NOI0 MOVB #5,S.STS(R4) ;WAIT A MAXIMUM OF 75 SECONDS.35$: MOVB #15.,S.CTM(R4) ;15 SECONDS AT A TIME236$: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UP RETURNE;+4; **-$DPINT-RP11-C/E DISK PACK CONTROLLER INTERRUPTS;-8 INTSE$ DP,PR5,R$$P11 ;;;SAVE REGISTERS AND SET PRIORITY' MOV U.SCB(R5),R4 ;;;GET ADDRESS OF SCBT' MOV S.CSR(R4),R4 ;;;GET ADDRESS OF CSR * BIC #20100,(R4) ;;;CLEAR INTERRUPT ENABLE4 MOVB #377,-4(R4) ;;;CLEAR ATTENTION SUMMARY BITS ON/ CLRB -4(R4) ;;;BOTH OLD AND ECO'D CONTROLLERSV' CALL $FORK ;;;CREATE A SYSTEM PROCESSN MOV R4,R2 ;COPY ADDRESS OF CSR* MOV U.SCB(R5),R4 ;RETRIEVE ADDRESS OF SCB- MOVB S.CON(R4),R3 ;RETRIEVE CONTROLLER INDEX*) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSR/ MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERR7 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION EXECUTED?C39$: BNE 105$ ;IF NE YEST) ASRB RTTBL+1(R3) ;H00cccDATADATADATADATADATADATADATAOME SEEK IN PROGRESS?  BCS 59$ ;IF CS YES TST (R2) ;ANY ERRORS?T BPL 50$ ;IF PL NON CALL $DVERR ;LOG DEVICE ERRORC+40$: BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?S BNE 60$ ;IF NE YES" DECB RTTBL(R3) ;ANY MORE RETRIES? BLE 60$ ;IF LE NOR% BIT #1371,-2(R2) ;RECOVERABLE ERROR?E BEQ 60$ ;IF EQ NOM BIT #14000,-4(R2) ;SKI OR HNF?D BEQ 46$ ;IF EQ NO3845$: MOVB #1,RTTBL+1(R3) ;SET HOME SEEK IN PROGRESS FLAG5 MOVB S.ITM(R4),S.CTM(R4) ;RESET DEVICE TIMEOUT COUNTN- CALL 200$ ;ABORT CONTROLLER AND SELECT UNITS- BIS #20015,(R2) ;INITIATE HOME SEEK FUNCTIONS RETURN ; %46$: JMP 30$ ;RETRY ENTIRE OPERATIONR@50$: BITB #IO.WLC&377,I.FCN(R1) ;WRITE FOLLOWED BY WRITE CHECK? BNE 51$ ;IF NE YES5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED BY MCR?( BEQ 90$ ;IF EQ NOR)51$: MOVB U.BUF(R5),R1 ;GET LAST FUNCTION)- BIT #1*2,R1 ;WRITE OR WRITE CHECK FUNCTION?  BEQ 90$ ;IF EQ NOO- BIS #2*2,U.BUF(R5) ;SET WRITE CHECK FUNCTION(/ BIT #2*2,R1 ;WAS LAST FUNCTION A WRITE CHECK?O BNE 90$ ;IF NE YES. MOV #RETRY,RTTBL(R3);REINITIALIZE RETRY COUNT% BR 46$ ;START WRITE CHECK OPERATIONR%59$: TST (R2) ;HOME SEEK SUCCESSFUL?L BPL 46$ ;IF PL YES260$: MOV #IE.WLK&377,R0 ;ASSUME DRIVE WRITE LOCKED. MOV -2(R2),R1 ;GET CONTENTS OF ERROR REGISTER! BMI 90$ ;IF MI WRITE LOCK ERRORV- MOV #IE.WCK&377,R0 ;ASSUME WRITE CHECK ERROR1 BIT #10,R1 ;WRITE CHECK ERROR? BNE 90$ ;IF NE YES( MOV #IE.VER&377,R0 ;UNRECOVERABLE ERROR290$: MOV 2(R2),R1 ;GET WORDS REMAINING TO TRANSFER+ ASL R1 ;CONVERT TO BYTES LEFT TO TRANSFER(6 ADD U.CNT(R5),R1 ;CALCULATE BYTES ACTUALLY TRANSFERED! CALL 200$ ;ABORT THE CONTROLLERE2100$: MOVB S.CON(R4),R3 ;RETREIVE CONTROLLER INDEX/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNT(/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNT # CALL $IODON ;FINISH I/O OPERATIONK! JMP DPINI ;PROCESS NEXT REQUEST;#E; DEVICE TIMEOUT RESULTS IN A HOME SEEK FOLLOWED BY THE I/O OPERATIONUC; BEING REPEATED UNLESS THE OPERATION WAS DIAGNOSTIC. TIMEOUTS ARER@; USUALLY CAUSED BY POWERFAILURE BUT MAY ALSO BE THE RESULT OF A; HARDWARE FAILURE.A; 7DPOUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?S BEQ 104$ ;;;IF EQ NO- DECB S.STS(R4) ;;;HAVE WE WAITED ENOUGH YET?R BEQ 104$ ;;;IF EQ YESE MTPS #0 ;;;ALLOW INTERRUPTSR BR 46$ ;RETRY ENTIRE OPERATION-104$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY3 BICB #US.SPU,U.STS(R5) ;;;RESET DRIVE SPINNING UPW# CALL $DTOER ;;;LOG DEVICE TIMEOUTE0 BCC 110$ ;IF CC TIMEOUT DURING NORMAL FUNCTION5105$: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKE( BR 90$ ;DIAGNOSTIC PROCESSING COMPLETE5110$: MOVB U.UNIT(R5),1(R2) ;SET CURRENT UNIT NUMBER ) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS4' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?4 BNE 90$ ;IF NE YES" DECB RTTBL(R3) ;ANY RETRIES LEFT? BLE 90$ ;IF LE NOI BR 45$ ;;+?; THIS ROUTINE WILL ABORT THE CONTROLLER AND SELECT THE CURRENTE>; UNIT. A DELAY IS INITIATED BETWEEN EACH CONTROLLER ABORT TO<; ALLOW THE HARDWARE TIME TO SETTLE DOWN ON FAST PROCESSORS.;-(200$: MOV #1,(R2) ;ABORT THE CONTROLLER- BICB -(SP),(SP)+ ;GIVE THE HARDWARE TIME ...U% BICB -(SP),(SP)+ ;... TO SETTLE DOWN 3 MOV #1,(R2) ;CLEAR ANY ERRORS CAUSED BY THE ABORTI- BICB -(SP),(SP)+ ;GIVE THE HARDWARE TIME ... % BICB -(SP),(SP)+ ;... TO SETTLE DOWNF) MOVB U.BUF+1(R5),1(R2) ;SELECT THE UNIT RETURN ;E .DSABL LSB  .ENDR AND SELECT THE CURRENTE>; UNIT. A DELAY IS INITIATED BETWEEN EACH CONTROLLER ABORT TO<; ALLOW THE HARDWARE TIME TO SETTLE DOWN ON FAST PROCESSORS. .TITLE DQDRV .IDENT /04.07/ ;5; COPYRIGHT (C) 1981 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; VERSION 04.07;; P. J. BEZEREDI 01-NOV-77;; PREVIOUSLY MODIFIED BY:;; P. J. BEZEREDI;; MODIFIED BY:;; P. J. BEZEREDI 06-DEC-79;4; PB144 -- RETURN IE.BBE IF MANUFACTURER BAD HEADER; IS DETECTED.;; R. T. PERRON 100ccc2-DEC-79;Q/; RP026 -- CORRECT MULTI-CONTROLLER OPERATION.9;B; R. T. PERRON 16-OCT-80;O2; RP040 -- CORRECT SEEK ERROR RECOVERY ALGORITHM.;I; P. J. BEZEREDI 18-MAR-81; -; PB228 -- ADD SUPPORT FOR RLV12 CONTROLLER.E; ; P. J. BEZEREDI 08-APR-81; 4; PB232 -- RESTORE SCB ADDRESS AFTER CALL TO $FORK.;Y; P. J. BEZEREDI 09-APR-81;E;; PB235 -- ADDITION OF REQUEST QUEUE OPTIMIZATION SUPPORT.;P; P. J. BEZEREDI 06-MAY-81;C3; PB242 -- ADD SUPPORT FOR RTEM AND CLEANUP A BIT.N;-; RL11/RL01 DISK DRIVERO;C;U.MCALL HWDDF$,PKTDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS; ;****************.; ; EQUATED SYMBOLS;,RETRY= ^D<8> ;CONTROLLER ERROR RETRY COUNT;RLCNT= ^D<7> ;NUMBER OF REGISTERS TO LOG ON ERROR ; PB228 2RLBPT= ^D<512*20> ;BYTES PER RL01 SURFACE ;**-1)RLSPU= ^D<15> ;TIME FOR RL01 TO SPIN UPSLD$DQ=0P;I;****************P; ; RL11 DEVICE REGISTER OFFSETS;2"RLCS= 0 ;CONTROL STATUS REGISTERRLBA= 2 ;BUS ADDRESS REGISTERD RLDA= 4 ;DISK ADDRESS REGISTER!RLMP= 6 ;MULTI-PURPOSE REGISTERS4RLBAE= 10 ;BUS ADDRESS EXTENSION REGISTER ; PB228;*;****************A; ; RLCS BIT ASSIGNMENTS; ERR= 100000 ;COMPOSITE ERRORDE= 040000 ;DRIVE ERRORE"NXM= 020000 ;NON-EXISTANT MEMORYDLT= 010000 ;DATA LATEHNF= 010000 ;HEADER NOT FOUND<DCK= 004000 ;DATA CHECK ERROR HCRC= 004000 ;HEADER CRC ERROR#OPI= 002000 ;OPERATION INCOMPLETE2/A17= 000040 ;EXTENDED ADDRESS BIT 17 ; PB228B/A16= 000020 ;EXTENDED ADDRESS BIT 16 ; PB228IDRDY= 1 ;DRIVE READYWCHK= 2 ;WRITE CHECK FUNCTIONSWRITE= 2 ;WRITE OFFSET$GSTS= 4 ;GET DRIVE STATUS FUNCTIONSEEK= 6 ;SEEK FUNCTION RDH= 10 ;READ HEADERS FUNCTIONREAD= 14 ;READ DATA FUNCTIONIE= 100 ;INTERRUPT ENABLEOCRDY= 200 ;CONTROLLER READYN;0;**************** ;N; RLDA STATUS CODEST;HMRK= 1 ;MARKER BITSTS= 2 ;GET STATUS BITSN= 4 ;SIGN BIT FOR SEEKRST= 10 ;DRIVE RESET BIT(HS= 20 ;HEAD SELECT BIT FOR DIFFERENCE,REV= 200!MRK ;REVERSE SEEK DIFFERENCE WORD;D;**************** ;W!; RLMP GET STATUS BIT ASSIGNMENTSR; WDE= 100000 ;WRITE DATA ERRORU!CHE= 040000 ;CURRENT HEAD ERRORN WLS= 020000 ;WRITE LOCK STATUS"SKTO= 010000 ;SEEK TIMEOUT ERRORSPD= 004000 ;SPEED ERRORWGE= 002000 ;WRITE GATE ERROR0VC= 001000 ;VOLUME CHECK!DSE= 000400 ;DRIVE SELECT ERRORADT= 000200 ;DRIVE TYPE!HSS= 000100 ;HEAD SELECT STATUSKCO= 000040 ;COVER OPENHH= 000020 ;HEADS HOMEBH= 000010 ;BRUSHES HOME.SLM= 000005 ;DRIVE IN SEEK-LINEAR MODE STATE;*;****************P;T ; LOCAL DATA;N; CONTROLLER IMPURE DATA TABLESD,; THESE ARE INDEXED BY THE CONTROLLER NUMBER;L7RTTBL: .BLKW R$$L11 ;RETRY COUNT FOR CURRENT OPERATIONOBPRMSV: .BLKW R$$L11*6 ;PARAMETER SAVE AREA FOR WRITE CHECK ; PB228; ;**-1;;****************0;0;DRIVER DISPATCH TABLE;T> DDT$ DQ,R$$L11,NEW=Y,OPT=Y ;GENERATE DISPATCH TABLE ; PB228;0;****************H;0;+.; **-DLINI-RL11/RL01 DISK CONTROLLER INITIATOR;0B; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/OA; REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TOEE; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED CONTROLLER G; IS NOT BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST.CB; ELSE A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPTD; IS SUCCESSFUL, THEN THE NEXT I/O OPERATION IS INITIATED. A RETURN!; TO THE CALLER IS THEN EXECUTED.0;+ ; INPUTS:I8; R5= ADRS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;N ; OUTPUTS:?; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST ISE?; WAITING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THEF-; DRIVER INITIATES THE REQUESTED I/O FUNCTIONS;- DQINI: NOP NOP NOP CALL $GTPKT BCC X NOP RETURNTX: NOP;A1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:A;M$; R1= ADRS OF THE I/O REQUEST PACKET1; R2= PHYSICAL UNIT NUMBER OF THE REQUESTED DRIVE ; R3= CONTROLLER INDEX,; R4= ADRS O00dccDATADATADATADATADATADATADATAF THE STATUS CONTROL BLOCK (SCB)2; R5= ADRS OF THE UCB OF THE DRIVE TO BE INITIATED;I6; RL11/RL01 DISK CONTROLLER I/O REQUEST PACKET FORMAT:; !; WD. 00 -- I/O QUEUE THREAD WORDS/; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERT1; WD. 02 -- ADRS OF THE TCB OF THE REQUESTOR TASK <; WD. 03 -- POINTER TO 2ND LUN WORD IN REQUESTOR TASK HEADER1; WD. 04 -- CONTENTS OF FIRST LUN WORD (UCB ADRS) ; WD. 05 -- I/O FUNCTION CODEH,; WD. 06 -- VIRTUAL ADRS OF I/O STATUS BLOCK/; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCKN;; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT +140000)I/; WD. 11 -- VIRTUAL ADRS OF AST SERVICE ROUTINES1; WD. 12 -- MEMORY EXTENSION BITS OF I/O TRANSFERW'; WD. 13 -- BUFFER ADRS OF I/O TRANSFER ,; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED; WD. 15 -- NOT USED.D;; WD. 16 -- LOW BYTE MUST BE ZERO AND HIGH BYTE IS NOT USEDD9; WD. 17 -- LOW PART OF LOGICAL BLK NUMBER OF I/O REQUEST A; WD. 20 -- RELOCATION BIAS OF DIAGNOSTIC REG. BLK. ELSE NOT USED C; WD. 21 -- DIAGN. REG. BLOCK ADDRESS (DISPL.+140000) ELSE NOT USEDS;O&; DRIVER USAGE OF WORDS IN I/O PACKET:5; I.PRM+6 (WD. 15) - EXTENDED ADDRESS BITS ; PB228-A; I.PRM+10 (WD. 16) - CYLINDER # OR DESIRED DISK ADDRESS ; PB235FI; I.PRM+12 (WD. 17) - SECTOR/SURFACE # OR BYTES REMAINING TO XFER ; PB235O; ;**-364 CALL $RQCND ;REQUEST ACCESS TO CONTROLLER ; PB2353 MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS ; PB235S, MOV S.KRB(R4),R3 ;GET KRB ADDRESS ; PB2426 MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEX ; PB2426 MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNT ; PB2424 CALL DLVV ;PROCESS VOLUME VALID FUNCTIONS ; PB2426 BIT #FE.EXT,$FMASK ;IS THIS A 22-BIT SYSTEM? ; PB228 BEQ 15$ ;IF EQ NO ; PB2287 BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? ; PB228  BEQ 10$ ;IF EQ NO ; PB2288 MOVB U.BUF+1(R5),R0 ;GET EXTENDED ADDRESS BITS ; PB2282 MOV R0,I.PRM+6(R1) ;SAVE THEM FOR LATER ; PB2281 ASH #4,R0 ;PUT THEM IN THE RIGHT PLACE ; PB228;1 BIC #^C<60>,R0 ;JUST GET THE LOW 2 BITS ; PB228E' MOV R0,U.BUF(R5) ;SAVE THEM ; PB228T BR 15$ ; ; PB228:10$: CALL $STMAP ;SETUP UNIBUS MAPPING REGISTERS ; PB228;15$: MOVB U.UNIT(R5),U.BUF+1(R5) ;SET UNIT NUMBER ; PB228 4 MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION ;**-226 BIS #READ!IE,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTION+ CMPB #IO.RLB/^D<256>,I.FCN+1(R1) ;REALLY?B- BHIS 20$ ;IF HIS FUNCTION IS LEGAL ; PB242R, CALLR DLFIN ;FUNCTION IS ILLEGAL ; PB242020$: BEQ 25$ ;IF EQ FUNCTION IS A READ ; PB242? SUB #WRITE,U.BUF(R5) ;CONVERT TO WRITE LOGICAL FUNCTION ;**-3T>25$: MOV I.PRM+12(R1),R0 ;RETRIEVE SECTOR AND SURFACE ; PB2357 MOV I.PRM+10(R1),R2 ;RETRIEVE CYLINDER NUMBER ; PB235S) ASH #7,R2 ;PUT IT IN POSITION ; PB235R4 BIS R0,R2 ;MERGE IN THE SECTOR AND SURFACE ; PB2358 MOV R2,I.PRM+10(R1) ;SAVE DESIRED DISK ADDRESS ; PB2350 BIC #^C<77>,R0 ;ISOLATE SECTOR NUMBER ; PB235A MOV U.CNT(R5),I.PRM+12(R1) ;ASSUME ONLY ONE XFER NEEDED ; PB23521 MOV #^D<40>,R2 ;SET SECTORS PER SURFACE ; PB2356 SUB R0,R2 ;CALCULATE SECTORS LEFT ON SURFACE ; PB235- SWAB R2 ;GET BYTES LEFT ON SURFACE ; PB235C= CMP U.CNT(R5),R2 ;ARE ADDITIONAL TRANSFERS REQUIRED? ; PB235E BLOS 30$ ;IF LOS NO ; PB235< MOV R2,U.CNT(R5) ;SET BYTE COUNT FOR FIRST TRANSFER ; PB228030$: MOV S.KRB(R4),R3 ;GET KRB ADDRESS ; PB2356 MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEX ; PB235; MUL #6,R3 ;FORM AN INDEX INTO PARAMETER SAVE AREA ; PB235O- ADD #PRMSV,R3 ;POINT TO THIS ENTRY ; PB235S6 MOV U.BUF(R5),(R3)+ ;SAVE INITIAL PARAMETERS ; PB235( MOV U.BUF+2(R5),(R3)+ ;... ; PB235% MOV U.CNT(R5),(R3)+ ;... ; PB235( MOV I.PRM+10(R1),(R3)+ ;... ; PB235( MOV I.PRM+12(R1),(R3)+ ;... ; PB235( MOV I.PRM+6(R1),(R3)+ ;... ; PB228 ;**-37R;+*; THIS SECTION WILL INITIATE THE OPERATION;-=DLINIO: BIT #FE.EXT,$FMASK ;IS THIS A 22-BIT SYSTEM? ; PB2282 BEQ 5$ ;IF EQ NO ; PB228I7 BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? ; PB228O BNE 5$ ;IF NE YES ; PB228/ CALL $MPUBM ;MAP UNIBUS TO TRANSFER ; PB228M500 dcc5$: MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS ; PB228(4 MOV S.PKT(R4),R3 ;GET ADDRESS OF I/O PACKET ;**-11. CLRB U.CW2+1(R5) ;CLEAR DRIVE FLAGS ; PB242( CALL DLGST ;GET DRIVE STATUS ; PB242- MOV RLMP(R2),R1 ;GET THE STATUS INFO ;**-4 + BIC #WLS!DT!HSS,R1 ;REMOVE IRRELEVANT BITS.$ BIT #DRDY,(R2) ;IS THE DRIVE READY? BEQ 20$ ;IF EQ NO ; PB242= BITB #US.VV,U.STS(R5);IS SOFTWARE VOLUME VALID SET? ; PB2422 BEQ 10$ ;IF EQ NO ; PB242, BIT #VC,R1 ;IS VOLUME CHECK SET? ; PB242% BNE 25$ ;IF NE YES, ERROR ; PB242 *10$: BIC #VC,R1 ;IGNORE VC BIT ; PB2427 CMP #HH!BH!SLM,R1 ;HEADS, BRUSHES AND STATE OK? ;**-1R BEQ 30$ ;IF EQ YES ; PB242S@20$: BITB #US.SPU,U.STS(R5) ;IS THE DRIVE SPINNING UP? ; PB2427 BNE DLPWF1 ;IF NE YES, WAIT FOR IT TO SPIN UP ; PB242./ CALL DLDVER ;LOG DRIVE NOT READY ERROR ;**-3 825$: MOV #IE.DNR&377,R0 ;SET RETURN ERROR CODE ; PB242$ CALLR DLFIN ;EXIT FATAL ; PB242>30$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE SPINNING UP ; PB242* CALL DLRST ;RESET DRIVE ERRORS ; PB242; MOV I.PRM+10(R3),R0 ;RETREIVE STARTING DISK ADDRESS ;**-31( CALL DLDIFF ;CALCULATE DIFFERENCE WORD3DLGO: BEQ 40$ ;IF EQ NO SEEK IS NECESSARY ; PB242T0 MOV #SEEK,R1 ;GET CODE FOR SEEK FUNCTION ;**-1 CALL DLXCT ;EXECUTE THE SEEK6 BMI DLEROR ;IF MI ERROR DURING SEEK FUNCTION ; PB242;40$: MOVB S.ITM(R4),S.CTM(R4) ;SET TIMEOUT COUNT ; PB228 7 BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? ; PB228  BEQ 45$ ;IF EQ NO ; PB228? MOV I.PRM+6(R3),RLBAE(R2) ;LOAD EXTENDED ADDRESS BITS ; PB228+45$: ADD #RLMP,R2 ;POINT TO RLMP ; PB228A, MOV U.CNT(R5),R1 ;GET BYTE COUNT ; PB228& ROR R1 ;MAKE IT A WORD COUNT ;**-3 NEG R1 ;ALSO NEGATIVE MOV R1,(R2) ;LOAD WORD COUNT4 MOV I.PRM+10(R3),-(R2) ;LOAD STARTING DISK ADDRESS* MOV U.BUF+2(R5),-(R2) ;LOAD BUS ADDRESS( CALL $BMSET ;SET I/O ACTIVE BIT IN MAP, MOV U.BUF(R5),-(R2) ;;;LOAD FUNCTION AND GO;+<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;-DQCAN: RETURN ;;;NOP FOR RL11X;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVER?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANY A; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESSS; THE UNIT IS ALREADY READY.;-/DQPWF: TSTB S.STS(R4) ;IS DRIVE CURRENTLY BUSY? ! BEQ DLPWF2 ;IF EQ NO ; PB242I< MOVB #4,S.STS(R4) ;ALLOW FOR A FULL MINUTE TO SPIN UP ;**-1>DLPWF1: MOVB #RLSPU,S.CTM(R4);EXTEND TIMEOUT FOR UNIT ; PB242>DLPWF2: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UP ; PB242 RETURN ; ;**-2 ;+%; **-$DLINT-RL11/RL01 DISK CONTROLLER &; INTERRUPT AND ERROR SERVICE ROUTINES;-8 INTSE$ DQ,PR5,R$$L11 ;;;SAVE REGISTERS AND SET PRIORITY' CALL $FORK ;;;CREATE A SYSTEM PROCESSI1 MOV U.SCB(R5),R4 ;RETRIEVE SCB ADDRESS ; PB232R5 TSTB U.CW2+1(R5) ;REVERSE SEEK IN PROGRESS? ; PB242I" BMI DLINIO ;IF MI YES ; PB2422 MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS ; PB2357 MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL OPERATION ;**-5S. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS# MOV (R2),R1 ;GET CONTENTS OF RLCSN. BMI DLEROR ;IF MI AN ERROR OCCURRED ; PB228@ SUB U.CNT(R5),I.PRM+12(R3) ;GET BYTES LEFT TO TRANSFER ; PB228' BEQ DLPASS ;IF EQ NONE LEFT ; PB228AA MOV I.PRM+12(R3),U.CNT(R5) ;ASSUME LAST TRANSFER COMING ; PB228R= CMP I.PRM+12(R3),#RLBPT ;IS THIS THE LAST TRANSFER? ; PB228D! BLOS 10$ ;IF LOS YES ; PB228@< MOV #RLBPT,U.CNT(R5);TRANSFER A WHOLE TRACKS WORTH ; PB228810$: BIC #CRDY,R1 ;CLEAR CRDY TO START FUNCTION ; PB228? MOV R1,U.BUF(R5) ;SAVE CURRENT FUNCTION AND ADDRESS BITS ;**-8C4 MOV RLBA(R2),U.BUF+2(R5) ;SAVE CURRENT BUS ADDRESS7 BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? ; PB228P BEQ 20$ ;IF EQ NO ; PB228? MOV RLBAE(R2),I.PRM+6(R3) ;SAVE EXTENDED ADDRESS BITS ; PB228R;20$: MOV I.PRM+10(R3),R0 ;GET INITIAL DISK ADDRESS ; PB228 & MOV R0,R1 ;COPY DISK ADDRESS ;**-1- BIS #77,R0 ;UPDATE C00dccDATADATADATADATADATADATADATAYLINDER AND SURFACE ...A& INC R0 ;... LEAVING SECTOR BITS ZERO+ MOV R0,I.PRM+10(R3) ;SAVE NEW DISK ADDRESS80 CALL DLDIF0 ;CALCULATE MID-TRANSFER DIFFERENCE+ CALLR DLGO ;GO DO THE OPERATION ; PB242; ; PB2423DLEROR: BIT #DRDY,R1 ;IS THE DRIVE READY? ; PB242?! BNE DLERR ;IF NE YES ; PB242;> MOVB S.ITM(R4),S.CTM(R4) ;WAIT FOR DRIVE TO QUIESCE ; PB242; MOVB #1,U.CW2+1(R5) ;FLAG SETTLE DOWN IN PROGRESS ; PB242  RETURN ; ;**-6C7DLERR: MOV (R2),R1 ;RETRIEVE CONTENTS OF RLCS ; PB242 5 BITB #IQ.UMD,I.FCN(R3) ;DIAGNOSTIC FUNCTION? ;**-1M3 BNE DLPASS ;IF NE YES, GO PASS REGISTERS ; PB242I) MOV R1,-(SP) ;SAVE RLCS CONTENTS ;**-1L CALL DLDVER ;LOG DEVICE ERROR 1 MOV (SP),R1 ;RETRIEVE CONTENTS OF RLCS ; PB144T5 MOV #IE.BBE&377,R0 ;ASSUME BAD BLOCK ERROR ; PB144 % COM (SP) ;TOGGLE THE BITS ; PB144T0 BIT #HCRC!OPI,(SP)+ ;BAD BLOCK ERROR? ; PB144! BEQ DLFIN ;IF EQ YES ; PB144 6 MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERROR ;**-1# BIT #NXM,R1 ;NON-EXISTANT MEMORY?B! BNE DLFIN ;IF NE YES ; PB242F% BIT #DE,R1 ;DRIVE PROBLEMS? ;**-1E BEQ 50$ ;IF EQ NO ; PB2425 CALL DLGST ;EXECUTE GET DRIVE STATUS FUNCTION ;**-1R% BIT #WGE,RLMP(R2) ;WRITE GATE ERROR?T BEQ DLFIN ;IF EQ NO ; PB2425 BIT #WLS,RLMP(R2) ;IS THE DRIVE WRITE LOCKED? ;**-1 BEQ DLRTY ;IF EQ NO ; PB2425 MOV #IE.WLK&377,R0 ;SET WRITE LOCK ERROR CODE ;**-1 BR DLFIN ; ; PB242750$: BIT #10,U.BUF(R5) ;WRITE CHECK FUNCTION? ; PB242 BNE DLRTY ;IF NE NO ; PB242, BIT #OPI,R1 ;OPERATION INCOMPLETE? ;**-3! BNE DLRTY ;IF NE YES ; PB242*) BIT #DCK,R1 ;WRITE CHECK ERROR? ;**-1 BEQ DLRTY ;IF EQ NO ; PB242: MOV #IE.WCK&377,R0 ;YES, SET WRITE CHECK ERROR CODE ;**-1=DLRTY: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS ; PB242W/ BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES? ;**-1P! BNE DLFIN ;IF NE YES ; PB242E1 MOV S.KRB(R4),R3 ;RETRIEVE KRB ADDRESS ; PB2422 MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX ; PB242/ DECB RTTBL(R3) ;ANY MORE RETRIES LEFT? ;**-1, BLE DLFIN ;IF LE NO ; PB242/DLIO: CALL DLRST ;RESET DRIVE ERRORS ; PB2421. JMP DLINIO ;RETRY ENTIRE OPERATION ; PB242 ;**-2>DLPASS: BITB #IQ.UMD,I.FCN(R3) ;DIAGNOSTIC FUNCTION? ; PB242 BEQ 10$ ;IF EQ NO ; PB242; MOV I.PRM+14(R3),KISAR6 ;SET BUFFER RELOCATION BIAS ;**-2R1 MOV I.PRM+16(R3),R3 ;GET REGISTER BUFFER ADDRESSE) CALL REGPAS ;MOVE REGISTERS INTO BUFFER  BR DLFIN ;EXIT ; PB242B10$: BITB #IO.WLC&377,I.FCN(R3) ;WRITE WITH WRITE CHECK? ; PB242 BNE 20$ ;IF NE YES ; PB242N5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED? ;**-3 BEQ DLFIN ;IF EQ NO ; PB242920$: MOV U.BUF(R5),R1 ;GET CURRENT FUNCTION CODE ; PB242I4 BIT #WCHK,R1 ;WRITE OR WRITE CHECK FUNCTION? ;**-2 BEQ DLFIN ;IF EQ NO ; PB242. BIT #10,R1 ;WAS FUNCTION WRITE CHECK? ;**-1! BEQ DLFIN ;IF EQ YES ; PB242B, MOV S.KRB(R4),R1 ;GET KRB ADDRESS ; PB2356 MOVB K.CON(R1),R1 ;RETRIEVE CONTROLLER INDEX ; PB235/ MOV #RETRY,RTTBL(R1);RESET RETRY COUNT ;**-2P; MUL #6,R1 ;FORM AN INDEX INTO PARAMETER SAVE AREA ; RP0265 ADD #PRMSV,R1 ;... ;**-1 1 MOV (R1)+,U.BUF(R5) ;RESTORE STARTING PARAMETERSR MOV (R1)+,U.BUF+2(R5) ;... MOV (R1)+,U.CNT(R5) ;...  MOV (R1)+,I.PRM+10(R3) ;...  MOV (R1)+,I.PRM+12(R3) ;... ( MOV (R1)+,I.PRM+6(R3) ;... ; PB228* BR DLIO ;START THE WRITE CHECK ; PB242 ; PB242;DLFIN: MOV S.PKT(R4),R2 ;GET ADDRESS OF I/O PACKET ; PB242E3 MOV I.PRM+4(R2),R1 ;GET TOTAL TRANSFER SIZE ;**-4E9 SUB I.PRM+12(R2),R1 ;CALCULATE BYTES TRANSFERED ; PB228A, MOV S.KRB(R4),R3 ;GET KRB ADDRESS ; PB2356 MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEX ; PB2351 MOVB RTTBL(R3),R2 ;GET FINAL RETRY COUNT ;**-2U3 BIS #RETRY*^D<256>,R2 ;MERGE STARTING RETRY COUNT(. CALL $RLCN ;RELEASE THE CONTROLLER ; PB235# CALL $IODON ;FINISH I/O OPERATIONT! JMP DQINI ;PROCESS NEXT REQUEST;;+$; **-DLOUT-RL11/RL01 DISK CONTROLLER; DEVICE TIMEOUT ROUTINE;V9; DEVICE TIMEOUT RESULTS IN THE OPERATION BEING REPEATED.M=; TIMEOU00dccTS ARE USUALLY CAUSED BY A POWER FAILURE BUT MAY ALSO)*; BE THE RESULT OF A HARDWARE MALFUNCTION.;-6DQOUT: MOV S.PKT(R4),R3 ;;;RETREIVE I/O PACKET ADDRESS1 BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?6 BEQ 20$ ;;;IF EQ NO ; PB2426 DECB S.STS(R4) ;;;HAVE WE WAITED A MINUTE YET? ;**-1 BNE 10$ ;;;IF NE NO ; PB242/ INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY ;**-1T( BR 30$ ;;;LOG DEVICE TIMEOUT ; PB242+10$: MTPS #0 ;;;ALLOW INTERRUPTS ; PB242H+ BR DLIO ;RETRY ENTIRE OPERATION ; PB242U920$: ASRB U.CW2+1(R5) ;;;IS DRIVE SETTLING DOWN? ; PB242S BNE 30$ ;;;IF NE NO ; PB242) MTPS #0 ;;;YES, ALLOW INTERUPTS ;**-5 ( JMP DLERR ;PROCESS THE ERROR ; PB242+30$: MTPS #0 ;;;ALLOW INTERRUPTS ; PB242N5 BITB #IQ.UMD,I.FCN(R3) ;DIAGNOSTIC FUNCTION? ;**-2E3 BNE DLPASS ;IF NE YES, GO PASS REGISTERS ; PB242 ) CALL DLDTER ;LOG DEVICE TIMEOUT ;**-11 MOV #IE.DNR&377,R0 ;SET DEVICE NOT READY ;**-1 & JMP DLRTY ;RETRY OPERATION ; PB242 ;**-6;+0; **-DLXCT,DLGST,DLRST-RL11/RL01 DISK CONTROLLER; FUNCTION EXECUTION ROUTINES;E5; THIS ROUTINE WILL EXECUTE A GET DRIVE STATUS OR ANYN9; NON-INTERRUPTABLE FUNCTION AND WAIT FOR ITS COMPLETION.;: ; INPUTS:;; R1 = FUNCTION CODE; R2 = CSR ADDRESS; R5 = UCB ADDRESS;C ; OUTPUTS: ; R1 = CONTENTS OF RLCS (TESTED); FUNCTION EXECUTEDB;-<DLRST: MOV #RST!STS!MRK,RLDA(R2) ;SET MESSAGE CODES IN RLDA/ CALL DLDST ;DO THE DRIVE RESET FIRST ; PB242T?DLGST: MOV #STS!MRK,RLDA(R2) ;SET MESSAGE CODES IN RLDA ;**-1T5DLDST: MOV #GSTS,R1 ;SET GET STATUS FUNCTION ; PB242E/DLXCT: MOV R1,-(SP) ;SAVE FUNCTION CODE ;**-1T/ MOVB U.UNIT(R5),1(SP);MERGE CURRENT DRIVE BITSI MOV (SP)+,(R2) ;LOAD RLCS;10$: BIT #100200,(R2) ;FUNCTION COMPLETE OR ERROR? ; PB242U BEQ 10$ ;IF EQ NO ; PB2423 MOV (R2),R1 ;SAVE RLCS AND TEST FOR ERRORS ;**-2- RETURN ;V;+%; **-DLDIFF-RL11/RL01 DISK CONTROLLER (; CYLINDER ADDRESS DIFFERENCE CALCULATOR; <; THIS SUBROUTINE CALCULATES THE DIFFERENCE WORD USED IN THE@; SEEK OPERATION. IF A HEADER CANNOT BE READ AFTER 16. RETRIES,A; AN ERROR WILL BE LOGGED AND A ONE CYLINDER REVERSE SEEK WILL BER=; ISSUED. THE SEEK IS FOLLOWED BY A READ HEADERS TO CAUSE AN ; INTERRUPT.;( ; INPUTS:O; R0 = DESIRED DISK ADDRESSU; ;**-1Q ; OUTPUTS:; R1 = DIFFERENCE WORD$; RLDA = LOADED WITH DIFFERENCE WORD&; IF EQ NO SEEK IS NECESSARY ;**-1;-7DLDIFF: MOV #RETRY*2,-(SP) ;SET READ HEADER RETRY COUNT :10$: MOV #RDH,R1 ;CODE FOR READ HEADERS FUNCTION ; PB242* CALL DLXCT ;EXECUTE THE FUNCTION ;**-1. BPL 20$ ;IF PL FUNCTION EXECUTED OK ; PB242% DEC (SP) ;ANY RETRIES LEFT? ;**-1R BGT 10$ ;IF GT YES ; PB242 > CMP (SP)+,(SP)+ ;REMOVE RETRY COUNT AND CALLERS ADDRESS ;**-1 CALL DLDVER ;LOG HEADER ERROR  CALL DLRST ;RESET DRIVE15 MOV #REV,RLDA(R2) ;LOAD REVERSE SEEK DIFFERENCE WORDD) MOV #SEEK,R1 ;GET CODE FOR SEEK FUNCTION-7 MOV #IE.VER&377,R0 ;ASSUME THE SEEK WILL FAIL ; PB242N CALL DLXCT ;EXECUTE THE SEEK& BMI DLFIN ;IF MI WE FAILED ; PB242- BIC #377,R1 ;CLEAR OUT FUNCTION BITS ;**-1I+ BIS #IE!RDH,R1 ;LOAD CODES FOR READ HEADER @ MOVB #200,U.CW2+1(R5);INDICATE REVERSE SEEK IN PROGRESS ; PB242< MOVB S.ITM(R4),S.CTM(R4) ;SET DEVICE TIMEOUT COUNTER ;**-1# MOV R1,(R2) ;LOAD FUNCTION AND GOL! RETURN ;WAIT FOR THE INTERRUPTL-20$: TST (SP)+ ;REMOVE RETRY COUNT ; PB242V. MOV RLMP(R2),R1 ;RETREIVE HEADER WORD ;**-13DLDIF0: BIC #77,R0 ;MASK OUT SECTOR BITS ; PB228L BIC #77,R1 ;... ;**-2B% CMP R0,R1 ;DO WE NEED TO DO A SEEK?B BEQ 40$ ;IF EQ NO ; PB242/ MOV R0,-(SP) ;SAVE DESIRED DISK ADDRESS ;**-1D' BIC #^C<100>,(SP) ;ISOLATE SURFACE BIT ( ASR (SP) ;PUT INTO THE PROPER POSITION ASR (SP) ;... ! BIC #100,R0 ;REMOVE SURFACE BIT BIC #100,R1 ;...) SUB R0,R1 ;SUBTRACT DESIRED FROM ACTUALN.; BEQ 30$ ;IF EQ ONLY CHANGE SURFACE ; PB242- BCC 30$ ;IF CC ACTUAL .GE. DESIRED ; PB242D6 NEG R1 ;ACTUAL < DESIRED, MAKE POSITIVE DIFFERE;**-21 BIS #SN,R1 ;SET SIGN FOR MOVE TO CENTER OF DISKD'30$: I00%dccDATADATADATADATADATADATADATANC R1 ;SET MARKER BIT ; PB242Q+ BIS (SP)+,R1 ;MERGE IN SURFACE BIT ;**-1I& MOV R1,RLDA(R2) ;LOAD DIFFERENCE WORD40$: RETURN ; ; PB242P ;**-2;+%; **-DLDXXX-RL11/RL01 DISK CONTROLLER,; ERROR LOGGING ROUTINES;CB; THIS ROUTINE IS CALLED WHENEVER A DEVICE ERROR OR DEVICE TIMEOUTD; OCCURS. A CORE BLOCK THE SIZE OF THE REGISTER BUFFER IS ALLOCATEDB; AND THE UNIBUS REGISTERS ALONG WITH THE DRIVE STATUS INFORMATIONB; ARE TRANSFERED INTO THE CORE BLOCK AND THE APPROPRIATE EXECUTIVE>; ERROR LOGGING ROUTINE IS CALLED. FINALLY, THE CORE BLOCK IS<; DEALLOCATED AND THE CSR AND CONTROLLER INDEX ARE RESTORED.; ?; IF FOR ANY REASON THE CORE BLOCK CANNOT BE ALLOCATED THEN THEKB; EXECUTIVE ERROR LOGGING ROUTINE WILL NOT BE CALLED AND THE ERRORA; SEQUENCE NUMBER WILL BE UPDATED TO INDICATE THAT A MISSED ERROR ; CONDITION OCCURRED.R;F ; INPUTS:C; R2 = CSR ADDRESS; R4 = SCB ADDRESS; ; OUTPUTS:#; R0, R1 ARE DESTROYED ; PB242T"; R3 = CONTROLLER INDEX ;**-1;- .ENABL LSB ; PB242NADLDVER: MOV #$DVERR,-(SP) ;ADDRESS OF EXEC ERROR ROUTINE ; PB242  BR 10$ ; ; PB242BDLDTER: MOV #$DTOER,-(SP) ;ADDRESS OF EXEC TIMEOUT ROUTINE ; PB24210$: TST (SP)+ ; PB242 BR 30$ ; PB242N9 MOV #RLCNT*2,R1 ;GET NUMBER OF BYTES TO ALLOCATE ; PB242E, CALL $ALOCB ;ALLOCATE A CORE BLOCK ;**-6- BCC 20$ ;IF CC BLOCK WAS ALLOCATED ; PB242S5 INC $ERRSQ ;INDICATE A MISSED ERROR CONDITION ;**-1R< CMP (SP)+,#$DTOER ;ALLOCATION FAILURE, TIMEOUT IN PROGRESS? BNE 30$ ;IF NE NO ; PB2354 MOV @S.KRB(R4),R2 ;;;RETRIEVE CSR ADDRESS ; PB2350 BIC #IE,(R2) ;;;CLEAR INTERRUPT ENABLE ; PB235% MTPS #0 ;;;ALLOW INTERRUPTS ;**-2I7 BR 30$ ;DON'T LOG ERROR IF ALLOCATION FAILURE ; PB242 320$: MOV R0,R3 ;SET POINTER TO CORE BLOCK ; PB242C2 MOV @S.KRB(R4),R2 ;GET REAL CSR ADDRESS ; PB2354 CALL REGPAS ;MOVE REGISTERS INTO CORE BLOCK ;**-3$ MOV R0,R2 ;COPY CORE BLOCK ADDRESS. CALL @(SP)+ ;CALL EXEC ERROR LOGGING ROUTINE) MOV R2,R0 ;GET BACK CORE BLOCK ADDDRESS 3 MOV #RLCNT*2,R1 ;GET NUMBER OF BYTES TO DEALLOCATEC( CALL $DEACB ;DEALLOCATE THE CORE BLOCK030$: MOV S.KRB(R4),R3 ;GET KRB ADDRESS ; PB235- MOV (R3),R2 ;RETRIEVE CSR ADDRESS ; PB235F6 MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEX ; PB235 RETURN ;**-3 .DSABL LSB ; PB242E;+@; MOVE THE CONTROLLER/DRIVE REGISTERS INTO THE SPECIFIED BUFFER.; ; INPUTS:V; R2 = CSR ADDRESS; R3 = BUFFER ADDRESSP;-!REGPAS: MOV (R2),(R3)+ ;MOVE RLCSV MOV RLBA(R2),(R3)+ ;MOVE RLBA MOV RLDA(R2),(R3)+ ;MOVE RLDA MOV RLMP(R2),(R3)+ ;MOVE RLMP& CLR (R3)+ ;ASSUME NO RLBAE ; PB2287 BIT #DV.EXT,U.CW1(R5) ;DOES THE RLBAE EXIST? ; PB2283 BEQ 10$ ;IF EQ NO ; PB228+ MOV RLBAE(R2),-2(R3);MOVE RLBAE ; PB228E.10$: CLR (R3)+ ;EXTRA WORD IS BLANK ; PB2287 CALL DLGST ;EXECUTE GET DRIVE STATUS FUNCTION ; PB228I- MOV RLMP(R2),(R3) ;SAVE DRIVE STATUS ;**-1V RETURN ;A ; PB242;+ ; PB2423; **-DLVV-PROCESS VOLUME VALID FUNCTIONS ; PB242); ; PB242RD; THIS ROUTINE WILL VALIDATE VOLUME VALID AND HANDLE DEVICE ; PB2428; SPECIFIC VOLUME VALID AND SIZING FUNCTIONS. ; PB242; ; PB242 ; INPUTS: ; PB242&; R1 = I/O PACKET ADDRESS ; PB242; R4 = SCB ADDRESS ; PB242+; R5 = UCB ADDRESS ; PB242; ; PB242T; OUTPUTS: ; PB242 ?; IF THIS IS A TRANSFER FUNCTION ONLY R0 IS DESTROYED. ; PB242 @; IF THIS IS A VOLUME VALID FUNCTION, THE PROPER ACTION ; PB242?; IS TAKEN AND CONTROL IS TRANSFERED DIRECTLY TO THE ; PB242E+; PROPER PLACE IN THE DRIVER. ; PB242 ;- ; PB242 ; PB2423DLVV: CALL $VOLVD ;VALIDATE VOLUME VALID ; PB242N$ BCS 20$ ;IF CS WE FAILED ; PB242/ TST R0 ;IS THIS A TRANSFER FUNCTION? ; PB242  BMI 30$ ;IF MI YES ; PB242 2 MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS ; PB242- MOV R1,R3 ;COPY I/O PACKET ADDRESS ; PB242 1 CALL DLRST ;RESET DRIVE AND GET STATUS ; PB242U+ TST I.PRM+2(R3) ;SIZE THE DISK? ; PB242K BPL 10$ ;IF PL NO 00-dcc ; PB242% TST (SP)+ ;REMOVE RETURN ; PB242E0 CALLR DLPASS ;PASS REGISTERS AND EXIT ; PB242:10$: BIT #VV$SET,I.PRM+2(R3) ;SET VOLUME VALID? ; PB242 BEQ 25$ ;IF EQ NO ; PB2425 MOV RLMP(R2),R1 ;GET THE STATUS INFORMATION ; PB242?. BIT #DRDY,(R2) ;IS THE DRIVE READY? ; PB242 BEQ 20$ ;IF EQ NO ; PB2425 BIC #WLS!DT!HSS,R1 ;REMOVE IRRELEVANT BITS ; PB242 9 CMP #HH!BH!SLM,R1 ;HEADS, BRUSHES AND STATE OK? ; PB242U BEQ 25$ ;IF EQ YES ; PB242??20$: BICB #US.VV,U.STS(R5);CLEAR SOFTWARE VOLUME VALID ; PB242 2 MOV #IE.DNR&377,R0 ;SET DRIVE NOT READY ; PB242)25$: TST (SP)+ ;REMOVE RETURN ; PB242R# CALLR DLFIN ;FINISH UP ; PB242Q30$: RETURN ; ; PB242M ; PB235;+ ; PB2353; **-DLCHK-VALIDATE AND CONVERT THE LBN ; PB235 ; ; PB235 B; THIS ROUTINE IS CALLED FROM $DRQRQ TO DO LBN PROCESSING ; PB235B; FOR DEVICES WHICH SUPPORT QUEUE OPTIMIZATION. IF BLKC2 ; PB235B; DETECTS AN ERROR IT WILL RETURN TO THE CORRECT PLACE IN ; PB235+; $DRQRQ AFTER CALLING $IOALT. ; PB235R; ; PB235N; INPUTS: ; PB235&; R1 = I/O PACKET ADDRESS ; PB235; R4 = SCB ADDRESS ; PB235Q; R5 = UCB ADDRESS ; PB235 ; ; PB235 ; OUTPUTS: ; PB235V@; IF THE CHECKS SUCCEED, THEN THE LBN IN THE I/O PACKET ; PB235=; IS REPLACED BY THE DISK ADDRESS. R1 IS PRESERVED. ; PB235; ; PB235 A; IF THE CHECKS FAIL, THE $IOALT IS ENTERED WITH A FINAL ; PB235I@; STATUS OF IE.BLK AND A RETURN TO THE CORRECT PLACE IN ; PB235"; $DRQRQ IS EXECUTED. ; PB235; ; PB235S+; R0, R2, AND R3 ARE DESTROYED. ; PB235 ; ; PB235SE; NOTE: ALL FUNCTIONS PUT INTO THE DRIVER QUEUE ARRIVE HERE. ; PB235 E; THESE FUNCTIONS INCLUDE, IO.ATT, IO.DET, AND ACP FUNCTIONS. ; PB235B;- ; PB235 ; PB235 ; PB2357DQCHK: CALL $LEKAS ;CHECK FOR AN ACP FUNCTION ; PB235/ BCS 30$ ;IF CS IT IS, LEAVE IT ALONE ; PB235A< CMPB #IO.ATT/256.,I.FCN+1(R1) ;IS THIS AN ATTACH? ; PB235- BEQ 30$ ;IF EQ YES, LEAVE IT ALONE ; PB235 ; CMPB #IO.DET/256.,I.FCN+1(R1) ;IS THIS A DETACH? ; PB235 - BEQ 30$ ;IF EQ YES, LEAVE IT ALONE ; PB235U1 MOV I.FCN(R1),-(SP) ;GET FUNCTION CODE ; PB235B. BIC #7,(SP) ;REMOVE QUALIFIER BITS ; PB2359 CMP #IO.STC,(SP)+ ;IS IT A SET CHARACTERISTICS? ; PB235;- BEQ 30$ ;IF EQ YES, LEAVE IT ALONE ; PB235C= MOV I.PRM+12(R1),R0 ;RETRIEVE STARTING BLOCK NUMBER ; PB235V> BITB #IO.WPB&377,I.FCN(R1) ;PHYSICAL BLOCK FUNCTION? ; PB235 BNE 20$ ;IF NE YES ; PB235 2 CALL $BLKC2 ;CHECK LOGICAL BLOCK NUMBER ; PB2359 CMPB #IO.WLB/256.,I.FCN+1(R3) ;WRITE FUNCTION? ; PB235Q BNE 10$ ;IF NE NO ; PB235@ BITB #IO.WLT&377,I.FCN(R3) ;WRITE LAST TRACK FUNCTION? ; PB235 BNE 10$ ;IF NE YES ; PB2358 MOV R0,I.PRM+6(R3) ;SAVE STARTING BLOCK NUMBER ; PB2355 ADD #20.,(R1) ;ADD 1 TRACKS WORTH OF BLOCKS ; PB235I- MOV R3,R1 ;COPY I/O PACKET ADDRESS ; PB235 2 CALL $BLKC2 ;CHECK LOGICAL BLOCK NUMBER ; PB235C MOV I.PRM+6(R3),R0 ;RESTORE ORIGINAL STARTING BLOCK NUMBER ; PB235 010$: ASL R0 ;CONVERT BLOCKS TO SECTORS ; PB235;20$: MOV S.PKT(R4),R3 ;RETRIEVE I/O PACKET ADDRESS ; PB235 ! CLR R2 ;NO HIGH BITS ; PB235,3 CALL $CVLBN ;CONVERT LBN TO DISK ADDRESS ; PB2351+ ASH #6,R1 ;POSITION SURFACE BIT ; PB2353/ BIS R1,R0 ;MERGE SURFACE WITH SECTOR ; PB235,= MOV R0,I.PRM+12(R3) ;SAVE SECTOR AND SURFACE ADDRESS ; PB235 = MOV R2,I.PRM+10(R3) ;SAVE STARTING CYLINDER ADDRESS ; PB235K- MOV R3,R1 ;COPY I/O PACKET ADDRESS ; PB235O30$: RETURN ; ; PB235  ; PB228;+ ; PB2287; **-DLKRB-CONTROLLER ONLINE/OFFLINE ROUTINE ; PB228 ; ; PB228BD; THIS ROUTINE WILL HANDLE RECONFIGURATION CALLS FOR ONLINE ; PB228J; CONTROLLER AND OFFLINE CONTROLLER FOR THE RL11, RLV11 AND RLV12. ; PB228; ; PB228AK; FOR ONLINE, IT WILL DETERMINE IF THE RLBAE REGISTER EXISTS AND IF ; PB228SH; SO, IT WILL INSURE THAT THE ADDRESS BITS ARE REPLICATED IN THE ; PB228; CSR. ; PB228; ; PB228B2; FOR OF005d>:dcDATADATADATADATADATADATADATAFLINE, KS.EXT WILL BE CLEARED. ; PB228; ; PB2288; INPUTS: ; PB228; R2 = KRB ADDRESS ; PB228; R3 = CTB ADDRESS ; PB228E%; C=1 IF OFFLINE REQUEST ; PB228O$; C=0 IF ONLINE REQUEST ; PB228; ; PB228H; OUTPUTS: ; PB228PA; FOR ONLINE, KS.EXT WILL BE SET IF THE CONTROLLER HAS A ; PB228B; VALID RLBAE. ; PB228-; FOR OFFLINE, KS.EXT IS CLEARED. ; PB228S;- ; PB228 ; PB2288DQKRB: BIC #KS.EXT,K.STS(R2) ;ASSUME NO RLBAE ; PB228* BCS 20$ ;IF CS OFFLINE REQUEST ; PB2286 BIT #FE.EXT,$FMASK ;IS THIS A 22-BIT SYSTEM? ; PB228 BEQ 20$ ;IF EQ NO ; PB2286 CALL $SGFIN ;TURN NXM'S INTO SET CARRY BITS ; PB228- MOV (R2),R4 ;RETREIVE CSR ADDRESS ; PB228 6 BIS #A16!A17,(R4) ;SET EXTENDED ADDRESS BITS ; PB228* CLR RLBAE(R4) ;CLEAR RLBAE BITS ; PB228. BCS 10$ ;IF CS RLBAE DOES NOT EXIST ; PB2288 BIT #A16!A17,(R4) ;DID THE ADDRESS BITS CLEAR? ; PB228 BNE 10$ ;IF NE NO ; PB2288 BIS #KS.EXT,K.STS(R2) ;YES, SET RLBAE PRESENT ; PB228410$: BIC #A16!A17,(R4) ;RESET ADDRESS BITS ; PB22820$: RETURN ; ; PB228B ; PB228;+ ; PB2282; **-DLUCB-UNIT ONLINE/OFFLINE ROUTINE ; PB228; ; PB228 D; THIS ROUTINE WILL HANDLE RECONFIGURATION CALLS FOR ONLINE ; PB228;; UNIT AND OFFLINE UNIT FOR RL01 AND RL02 DRIVES. ; PB228$; ; PB228 F; FOR ONLINE, IF KS.EXT IS SET THEN DV.EXT IS ALSO SET. THIS ; PB228D; IS DONE TO ELIMINATE UNNECESSARY CODE TO RETREIVE THE KRB ; PB228; ADDRESS. ; PB2280; ; PB228)-; FOR OFFLINE, DV.EXT IS CLEARED. ; PB228 ; ; PB228 ; INPUTS: ; PB228$; R3 = CONTROLLER INDEX ; PB228; R4 = SCB ADDRESS ; PB228B; R5 = UCB ADDRESS ; PB228R$; C=1 IF ONLINE REQUEST ; PB228%; C=0 IF OFFLINE REQUEST ; PB228D; ; PB228B; OUTPUTS: ; PB228 <; FOR ONLINE, DV.EXT IS SET IN THE UCB IF KS.EXT IS ; PB228; SET IN THE KRB. ; PB228N-; FOR OFFLINE, DV.EXT IS CLEARED. ; PB228D;- ; PB228 ; PB2288DQUCB: BIC #DV.EXT,U.CW1(R5) ;ASSUME NO RLBAE ; PB228* BCS 10$ ;IF CS OFFLINE REQUEST ; PB2281 MOV S.KRB(R4),R2 ;RETREIVE KRB ADDRESS ; PB228E7 BIT #KS.EXT,K.STS(R2) ;DOES THE RLBAE EXIST? ; PB228  BEQ 10$ ;IF EQ NO ; PB2286 BIS #DV.EXT,U.CW1(R5) ;YES, SET BIT IN UCB ; PB22810$: RETURN ; ; PB228  ;**-1 .ENDISET IN THE UCB IF KS.EXT IS ; PB228; SET IN THE KRB. ; PB228N-; FOR OFFLINE, DV.EXT IS CLEARED .TITLE DRABOT .IDENT /04.01/E N; ;V; COPYRIGHT (c) 1981 BY(; DIGITAL EQUIPMENT CORPORATION, MAYNARD'; MASSACHUSETTS. ALL RIGHTS RESERVED. ;$ ; COPYRIGHT (C) 1974, 1976, 1979;.A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USEDA; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSEHA; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THISKA; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OREA; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND 1; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERED.I;AA; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTEA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R;T; D. N. CUTLER 11-SEP-73; ;A; PREVIOUSLY MODIFIED BY:M;N; T. M. MARTIN; MODIFIED BY:;E ; B. S. MCCARTHY 16-OCT-84 04.01;T&; BM319 -- ADDITION OF BOM$ DIRECTIVE;S; MACRO LIBRARY CALLSA;  .MCALL ABODF$" ABODF$ ;DEFINE TASK ABORT CODES;+; **-$DRABO-ABORT TASK;OE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TERMINATE THE EXECUTION OF A; SPECIFIED TASK.E;O ; DPB FORMAT: ; "; WD. 00 -- DIC(83.),DPB SIZE(3.).$; WD. 01 -- FIRST HALF OF TASK NAME.%; WD. 02 -- SECOND HALF OF TASK NAME.1;E ; INPUTS:A; 1; R0=ADDRESS OF THE TCB OF THE TASK TO TERMINATE.I>; R1=ADDRESS OF THE TASK STATUS WO00>=dCdcRD OF THE TASK TO TERMINATE.9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.T/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;E5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; -; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.I&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.U;; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF THE SPECIFIED; TASK IS NOT ACTIVE.S;-*$DRABO::TST (R1)+ ;SPECIFIED TASK ACTIVE? BMI 10$ ;IF MI NOO+ TSTB (R1) ;TASK ALREADY BEING TERMINATED?  BMI 10$ ;IF MI YES) CLR R2 ;INIT SUB-CODE (AB.TYP!AB.NPV=0)N0 BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED?% BNE 5$ ;IF NE YES, SUB-CODE CORRECTA, INC R2 ;SET NONPRIV ABORT ATTEMPT (AB.NPV)05$: MOV R0,R1 ;SET TCB ADDRESS OF TASK TO ABORT% MOV #S.CABO,R0 ;SET REASON FOR ABORTE CALLR $ABTSK ;ABORT TASK'10$: DRSTS D.RS7 ;SET DIRECTIVE STATUSC;+5; **-$DRBOM-SIMULATE BREAKPOINT OR ABORT WITH MESSAGEP;F2; THIS DIRECTIVE HAS ONE OF TWO POSSIBLE OUTCOMES:;S>; 1) THE DIRECTIVE HAS REQUESTED A BREAKPOINT IF POSSIBLE.C; IF THE CURRENT TASK HAS A SST VECTOR SPECIFIED FOR S.CBPT,PE; A SST OCCURS AS IF A BPT HAD BEEN EXECUTED. THIS IS PROVIDEDIE; FOR COMPATIBILITY WITH TASKS WHICH PREVIOUSLY TRAPPED SYSTEMO7; GENERATED BPTS, SUCH AS LOAD OVERLAY FAILURES. ;BA; 2) THE TASK DIDN'T REQUEST A BREAKPOINT, OR THERE IS NO SSTOB; VECTOR FOR BPT. THE TASK IS ABORTED, AND TKTN IS PASSED AC; MESSAGE CODE FOR THE FAILURE (SEE ABODF$ FOR DEFINITIONS).EA; IF THE DIRECTIVE SPECIFIES AN UNKNOWN ERROR CODE, S.BUNKS,; (UNKNOWN BOM$ ERROR) IS SUBSTITUTED;O ; DPB FORMAT:P;A#; WD. 00 -- DIC(211.),DPB SIZE(3.). ; WD. 01 -- ABORT CODE3; WD. 02 -- FLAGS WORD (BIT 0 SET = TRY BREAKPOINT) ;N ; INPUTS:,;C9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.R+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.N,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R ; OUTPUTS:;O9; EITHER A BREAKPOINT IS SIMULATED OR THE TASK IS ABORTEDK;-.$DRBOM::MOV (R3)+,R1 ;GET SPECIFIED ABORT CODE. MOV #S.BUNK,R0 ;ASSUME INVALID CODE SPECIFIED CMP #S.BHI,R1 ;IS CODE VALID' BLO 10$ ;IF LO NO, USE S.BUNK INSTEAD  INC R1 ;ADJUST CODE UP BY ONE  ADD R1,R0 ;AND BIAS BY S.BUNKS*10$: BIT #S.BBIF,(R3) ;BREAKPOINT DESIRED? BNE 20$ ;IF NE YES CALLR $ABCTK ;GO ABORT TASK4120$: MOV R0,$TEMP0 ;INDICATE ABORT CODE FOR SSTSRA& MOV #S.CBPT,2(SP) ;SET SST ABORT CODE+ MOV #2*2,(SP) ;AND LENGTH AS IF BREAKPOINTS0 MOV R4,R5 ;PUT HEADER ADDRESS IN CORRECT PLACE, CALLR $CNBPT ;ISSUE CONDITIONAL BREAKPOINT .ENDASSUME INVALID CODE SPECIFIED CMP #S.BHI,R1 ;IS CODE VALID' BLO 10$ ;IF LO NO, USE S.BUNK INSTEAD  INC R1 ;ADJUST CODE UP BY ONE  ADD R1,R0 ;AND BIAS BY S.BUNKS*10$: BIT #S.BBIF,(R3) ;BREAKPOINT DESIRED? BNE 20$ ;IF NE YES CALLR $ABCTK ;GO ABORT TASK4120$: MOV .TITLE DRAFFI .IDENT /01/ N; ; COPYRIGHT (C) 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.E;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED 9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;A ; VERSION 01;P; J. E. PROVINO 18-JUL-781; ;+ ; **-$DRSAF-SPECIFY CPU AFFINITY;N9; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ADD CPU AFFINITYA; TO THE CURRENT TASK.;M ; DPB FORMAT:S;R#; WD. 00 -- DIC(161.),DPB SIZE(2.).R; WD. 01 -- AFFINITY MASKI; ; INPUTS:D; 2; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK ; R3=POINTER TO WD. 1 IN THE DPB/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.C,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;A5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK);-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.-&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.U6; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THE TASK1; HAS AN INSTALLED AFFINITY OR IF THE SPECIFIED-; AFFI00EdIdcDATADATADATADATADATADATADATANITY IS INVALID.;-   .IF DF M$$PRO D .ENABL LSBO;$DRSAF::BIT #T2.AFF,(R2) ;WAS TASK INSTALLED WITH AFFINITY?S BNE 10$ ;YES IF NE( MOV T.RRM(R5),R0 ;GET REQUIRED RUN MASK% BIS (R3),R0 ;ADD SPECIFIED AFFINITYE, CALL $TSTAM ;IS TASK'S NEW AFFINITY VALID? BCS 10$ ;NO IF CSU- MOV R0,T.RRM(R5) ;SET AFFINITY IN TASK'S TCB+1 MOV T.PCB(R5),R0 ;GET ADDRESS OF TASK REGION PCB 4 BIS (R3),P.RRM(R0) ;SAVE DIRECTIVE RELATED AFFINITY6 CALL $SETRT ;FORCE TASK TO RUN ON REQUIRED PROCESSOR CLC ;SUCCESSI RETURN910$: DRSTS D.RS8 ;DIRECTIVE INCONSISTANT WITH TASK STATEF R;+; **-DRRAF-REMOVE AFFINITY;YC; THIS DIRECTIVE REMOVES AFFINITY WHICH WAS PREVIOUSLY SPECIFIED BYB; THE DRAAF DIRECTIVE.;A ; DPB FORMAT: ;T#; WD. 0 -- DIC. (163.),DBP SIZE(2.)B;1 ; INPUTS:C;8; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK; R3=ADDRESS OF THE DBP + 2R.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASKO;N5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK):;S-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.T&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED6; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF TASK WAS; INSTALLED WITH AFFINITY;- D<$DRRMA::BIT #T2.AFF,(R2) ;WAS TASK INSTALLED WITH AFFINITY? BNE 10$ ;YES IF NE1 MOV T.PCB(R5),R0 ;GET ADDRESS OF TASK REGION PCB . CLR P.RRM(R0) ;CLR DIRECTIVE RELATED AFFINITY* CALL $SETAP ;RECALCULATE TASK'S AFFINITY CLC ;SUCCESSP RETURNE .DSABL LSBA P .ENDC T A .ENDS-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.T&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED6; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF TASK WAS; INSTALLED WITH AFFINITY;- D<$DRRMA::BIT #T2.AFF,(R2) ;WAS TASK INSTALLED WITH AFFINITY? BNE 10$ ;YES IF NE1 MOV T.PCB(R5),R0 ;GET ADDRESS OF TASK REGION PCB . CLR P.RRM(R0) ;CLR DIRECTIVE RELATED AFFINITY* CALL $SETAP ;RECALCULATE TASK'S AFFINITY CLC ;SUCCESSP RETURNE .DSAB .TITLE DRASG. .IDENT /11.12/ ;6; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;N; ; PREVIOUSLY MODIFIED BY:H;; J. R. KAUFFMAN ; K. L. NOEL; J. W. BERZLE;+; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY:P; ; K. L. NOEL;6+; MODIFIED FOR RSX-11M-PLUS VERSION 4.2 BY: ; !; ERIC POSTPISCHIL 6-JUL-88 11.08 8; EDP067 -- SEND DEASSIGN NOTICE TO VMS AFTER ASSIGNING; LOCAL DEVICE.8; "; ERIC POSTPISCHIL 13-JUL-88 11.09>; EDP068 -- CORRECT REGISTER USED IN TEST FOR GENERIC DEVICE.;E!; PAUL K. M. WEISS 7-OCT-88 11.10I?; PKW164 -- SEND HTN FOR ACHN PACKET WITH VMS TERMINAL NAME SOY2; THAT VMS HAS AN RSXNAME TO ASSIGN THE DEVICE;."; PAUL K. M. WEISS 26-OCT-88 11.11>; PKW165 -- SEND TI: FOR ACHN IF THIS IS TI: - EVEN IF U.VNAM<; IS 0, WHICH IT IS FOR BATCH. ALSO MAKE U.VNAM 8 BYTES;0; KAREN L. NOEL 1-NOV-88 11.12T@; KLN113 -- CLEAR $CPPKT BEFORE CPSEN$ SO I/O KILL WON'T TRY TO2; USE IT WHILE DIRECTIVE IS EXECUTING REMOTELY; MACRO LIBRARY CALLSC;V .MCALL TCBDF$, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS .MCALL UCBDF$ H UCBDF$ ,,1 & .IF DF C$$RTK ;REMOTE TASK SUPPORT .MCALL CPRDF$ CPRDF$ ;I ; LOCAL DATA;1)IMPFLG: .WORD 0 ;IF = 1 CALLED AT IMPASG .LUNNUM: .WORD 0 ;LUN NUMBER FOR IMPLICIT ALUN'OLDUCB: .WORD 0 ;FORMER UCB ASSIGNMENT  .ENDC ; C$$RTKV; ; LOCAL SYMBOLS ;C#MAP6 = 140000 ;ADDRESS TO MAP APR6 !AS$DIC = 7 ;DIC FOR ASSIGN LUNR.AS$SIZ = 4 ;SIZE OF DPB FOR ASSIGN LUN(AC$DIC = 207. ;DIC FOR ASSIGN CHANNEL -AC$SIZ = 5 ;SIZE OF DPB FOR ASSIGN CHANNEL ,AC$SUB = 6 ;SUBFUNCTION FOR ASSIGN CHANNEL 'VNAMSZ = 8. ;SIZE OF VMS TERMINAL NAME;+; **-$DRASG-ASSIGN LUN;MB; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ASSIGN A DEVICE UNIT TO A; LOGICAL UNIT NUMBER (LUN).;R ; DPB FORMAT:B;S!; WD. 00 -- DIC(7.),DP00MdCdcB SIZE(4.). ; WD. 01 -- LUN TO BE ASSIGNED. *; WD. 02 -- NAME OF DEVICE TO BE ASSIGNED.1; WD. 03 -- UNIT NUMBER OF DEVICE TO BE ASSIGNED. ;I ; INPUTS:D;=9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. #; R3=ADDRESS OF THE LUN IN THE DPB.B/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.O,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;L5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;E-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.R&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED. 5; DIRECTIVE STATUS OF 'D.RS90' IS RETURNED IF A FILEG2; IS OPEN OR UNIT ATTACHED ON THE SPECIFIED LUN.5; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF DEVICEU; AND/OR UNIT IS INVALID.;-;E; PACKET FORMAT FOR REMOTE ALUNA;E; +---------------------------+A; | |T; | HEADER |(; | |T; +---------------------------+I ; | |Y; | ALUN DPB |S ; | |S; +---------------------------+ ; | PTR TO 2ND WORD IN LUN |F; +---------------------------+; ; FORMER UCB ADDRESS ;H; +---------------------------+A; | SAVED KISAR6 |V; +---------------------------+; | SAVED IMPFLG |E; +---------------------------+-;-;+#; **-$IMAS1-IMPLICIT LUN ASSIGNMENT ;F; THIS ROUTINE DOES AN IMPLICIT ALUN FOR THE DIRECTIVE WHICH CALLED IT;-H; IF SYSTEM SUPPORTS REMOTE TASK SERVICES, A CALL TO CPRAME WILL BE MADEI; TO FIND THE LUN ASSIGNMENT. NO ATTEMPT IS MADE TO SAVE THE CONTEXT OFI; THE ORIGINAL DIRECTIVE. THE PC OF THE USER TASK IS BACKED UP OVER THE-2; THE TRAP SO THE DIRECTIVE WILL BE ISSUED AGAIN.; ; INPUTS:-;--; R1 - POINTER TO 2ND LUN WORD OF TASK HEADER +; R3 - POINTER TO THE LUN NUMBER IN THE DPB; ; OUTPUTS:;LG; THE LUT ENTRY IS FILLED IN WITH THE UCB OF THE DEVICE. IF THE DEVICERB; IS NOT FOUND THE DIRECTIVE STATUS OF 'D.RS92' IS RETURNED ; ;-+$DRASG::CALL $MPLUN ;MAP LUN TO DEVICE UCBS! TST (R1) ;FILE ACCESSED ON LUN?E BEQ 10$ ;IF EQ NOT( DRSTS D.RS90 ;RETURN WITH ERROR STATUS 10$: ;C" .IF DF C$$RTB ; RUN TIME BINDING( CLR IMPFLG ;INDICATE NOT IMPLICIT ALUN BR RTK ;JOIN COMMON CODE$IMAS1::2 MOV #1,IMPFLG ;INDICATE THIS WAS AN IMPLICIT CALL CLR R0 ;NO FORMER UCB ADDRESS  RTK: S* MOV R0,OLDUCB ;SAVE FORMER UCB ASSIGNMENT MOV -2(R3),R2 ;GET LUN NUMBER% .IF DF C$$RTK ;REMOTE TASK SUPPORTR5 BIT #F5.RTK,$FMSK5 ;ARE WE USING REMOTE TASK SUPPORTC BNE 10$ ;IF NE YES( JMP 160$ ;DO NON REMOTE LUN ASSIGNMENT;S"; GET A REQUEST PACKET FROM CPRBUF;:-10$: MOV R1,R4 ;SAVE POINTER TO 2ND LUN WORD MOV R2,LUNNUM ;SAVE LUN NUMBERI MOV R3,R5 ;SAVE POINTER TO DPB( MOV #1,R1 ;SET FOR 1 BLOCK FROM CPRBUF9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT START% CALL $CPALO ;GET BUFFER FROM CPRBUF ) MOV KISAR6,-(SP) ; SAVE CURRENT MAPPING.B MOV R0,KISAR6 ; MAP PACKET. MOV #IS.SUC,MAP6+H$STAT/ ; MARK PACKET WITH SUCCESS SO THAT IMPLICITB2 ; ASSIGNMENTS TO OV: APPEAR SUCCESSFUL EVEN% ; THOUGH THEY NEVER GO TO VMS.O$ MOV (SP)+,KISAR6 ; RESTORE MAPPING.;E7; GET DEVICE AND UNIT NUMBER BEFORE WE UNMAP THE HEADERVJ; - FOR IMPLICIT ALUN, THE DEVICE AND UNIT NUMBER IS IN THE LUT EXTENSIONG; OFFSET INTO LUT IS THE SAME AS IN THE HEADER LUT. THE ADDRESS OF TP; THE PROTO LUN IS GOTTEN BY SUBTRACTING H.LUN+140000 FROM THE ADDRESS OF THED; 2ND LUN WORD THEN ADDING THE BASE ADDRESS OF THE LUT EXTENSION.H; - FOR REGULAR REMOTE ALUN, THE DEVICE AND UNIT NUMBER ARE GOTTEN FROM ; THE DPB;Y TST IMPFLG ;IMPLICIT ALUN+ BEQ 30$ ;IF EQ NOP( MOV R4,R1 ;GET ADDRESS OF 2ND LUN WORD4 SUB #H.LUN+2+MAP6,R1 ;GET OFFSET INTO LUT EXTENSION) ADD MAP6+H.LUTE,R1 ;ADD EXTENSION OFFSETN MOV (R1)+,R2 ;GET DEVICE NAME BEQ 20$ ;IF EQ, UNASSIGNED LUN MOV (R1),R3 ;GET UNIT NUMBER;TA; SPECIAL CASE OV - IF THIS IS AN IMPLICIT CALL, DON'T LET CPRAMEN; TRY TO TRANSLATE THE LOGICALS;  CMP #"OV,R2 ;IS THIS OV?00UdIdcDATADATADATADATADATADATADATA BNE 40$ ;IF NE NO 3 MOV R0,$CPPKT ;SET ADDRESS OF PACKET TO DEALLOCATEB & MOV $TKTCB,R5 ;GET CURRENT TASK'S TCB& MOV T.LDV(R5),R1 ;GET LOAD DEVICE UCB JMP 260$ ;JOIN COMMON CODE020$: DRSTS D.RS5 ;RETURN WITH ERROR CODE IE.ULN&30$: MOV (R5),R2 ;GET DEVICE FROM DPB MOV 2(R5),R3 ; AND UNIT NUMBERQ;N%; FILL IN THE HEADER AND THE ALUN DPBU;R240$: MOV KISAR6,-(SP) ;SAVE MAPPING TO TASK HEADER MOV R0,KISAR6 ;MAP PACKET+ MOV #MAP6,R1 ;GET ADDRESS OF PACKET HEADER * MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUST CLRB H$ICNT(R1) ;NO ITEMS! ADD #P$DPB,R1 ;POINT TO DPB AREA$ MOVB #AS$DIC,(R1)+ ;DIC MOVB #AS$SIZ,(R1)+ ;SIZEG" MOV LUNNUM,(R1)+ ;COPY LUN NUMBER MOV R2,(R1)+ ;DEVICE NAME MOV R3,(R1)+ ;UNIT NUMBER;E'; FILL IN THE COMMON EXTRA STORAGE AREAM;B6 ADD #6,R1 ;SKIP 6 BYTES FOR COMPATIBILITY WITH ACHN$: MOV R4,(R1)+ ;SAVE POINTER TO 2ND LUN WORD IN TASK HEADER* MOV OLDUCB,(R1)+ ;SAVE OLD UCB ADDRESS ( MOV (SP)+,(R1)+ ;SAVE MAPPING TO HEADER;EI; IF THIS IS AN IMPLICIT ALUN, SET SN$IMP SO DRFIN WILL NOT BE CALLED YET;D" MOV #SN$DIR,R2 ;SET DIRETIVE FLAG MOV IMPFLG,(R1) ;IMPLICIT ALUNI BEQ 50$ ;IF EQ NOT IMPLICIT)" MOV #SN$IMP,R2 ;SET IMPLICIT FLAG*50$: SUB #140000,R1 ;GET SIZE OF PACKET ;I; SEND PACKET TO THE DRIVERE;E60$:< CLR $CPPKT ; MAKE SURE NO ONE USES PACKET WHILE WE'RE GONE/ CPSEN$ R2,KISAR6,R1 ; SEND REQUEST TO HOST AMEE ; <; MAP PACKET AND RETRIEVE IMPFLG AND POINTER INTO THE HEADER;I MOV R0,KISAR6 ;MAP PACKET' MOV #MAP6,R5 ;GET ADDRESS OF HEADER W ADD #P$DPB,R5 ;POINT TO DPB ) MOV R0,$CPPKT ;SAVE ADDRESS OF PACKET R% MOV 2(R5),$CPLUN ;SAVE LUN NUMBER T& CMPB #AC$DIC,(R5) ;IS THIS ACHN$?  BNE 70$ ;IF NE NO R3 MOV 4(R5),$CPLUN ;LUN NUMBER IS IN DIFFERENT PLACEI) MOV 30(R5),R4 ;SO IS THE SECOND LUN WORD  BR 71$ ;COMMON CODEE470$: MOV 16(R5),R4 ;GET ADDRESS OF SECOND LUN WORD 171$: MOV 20(R5),OLDUCB ;RESTORE OLD UCB ADDRESS A* MOV 24(R5),IMPFLG ;GET SAVED FLAG WORD ; ; CHECK STATUS RETURNEDD>; - IF SUCCESS, LOOK FOR DEVICE NAME AS A GENERIC DEVICE TYPEF; - IF FAILURE AND DEVICE NAME IS HT, DO AN ASSIGN CHANNEL DIRECTIVE P; - IF FAILURE AND DEVICE NAME IS NON ZERO, LOOK FOR LOCAL DEVICES OF THAT NAME5; - IF DEVICE NAME IS ZERO, RETURN WITH ERROR STATUS;;I) MOV 4(R5),R2 ;GET RETURNED DEVICE NAME D MOV 6(R5),R0 ; AND UNIT NUMBERS! CMPB #AC$DIC,(R5) ;IS THIS ACHN?( BNE 75$ ;IF NE NOL/ MOV 6(R5),R2 ;DEVICE NAME AND UNIT NUMBER ARE L$ MOV 10(R5),R0 ; IN DIFFERENT PLACES75$:# TST R2 ;WAS DEVICE NAME RETURNED?E BEQ 130$ ;IF EQ ERROR / CMP #IS.SUC,MAP6+H$STAT ;WAS SUCCESS RETURNED?N BEQ 100$ ;IF EQ YES ; ; CHECK FOR HTn: N ; ' CMP #"HT,R2 ;IS DEVICE A TERMINAL? E2 BNE 150$ ;IF NE NO, LOOK IN LOCAL DEVICE TABLES ! CALL GETUCB ;GET UCB ADDRESS 6 BCC 90$ ;IF CC, OKAY &80$: JMP 189$ ;IF NOT THERE, ERROR 90$: L0 BIT #U2.LOG,U.CW2(R1) ;IS TERMINAL LOGGED IN? BNE 80$ ;IF NE, NO - REJECT ( JMP 370$ ;SEND ASSIGN CHANNEL PACKET ; %; HOST SUCCESSFULLY ASSIGNED LUN + ; 2100$: CMPB #AC$DIC,(R5) ;IS THIS ASSIGN CHANNEL?  BNE 110$ ;IF NE NO 3 MOV 26(R5),R1 ;USE UCB ADDRESS FIGURED OUT BEFORE E4 MOV 22(R5),KISAR6 ;RESTORE MAPPING TO TASK HEADER  BR 120$ ;JOIN COMMON CODE 110$: 4 MOV 22(R5),KISAR6 ;RESTORE MAPPING TO TASK HEADER # MOV #377,R0 ;LOOK FOR UNIT 377 U& CALL GETUCB ;LOOK FOR GENERIC UCB " BCS 80$ ;IF CS, DEVICE NOT THERE120$: ; ; PREPARE TO JOIN COMMON CODEE;U: MOV OLDUCB,-(SP) ;PUT OLD ASSIGNMENT UCB ADDRESS ON STACK JMP 230$ ;JOIN COMON CODEB130$:;$ .IF DF C$$RTK ;REMOTE TASK SUPPORT/ CALL RMTERR ;DEALLOCATE PACKET IF REMOTE TASK( .ENDC" DRSTS D.RS5 ;RETURN ERROR IE.ULN150$:$;J!; GET INFO SET UP FOR COMMON CODE;V% MOV 22(R5),KISAR6 ;MAP TASK HEADER # MOV R4,R1 ;PTR INTO TASK HEADER T* MOV $TKTCB,R5 ;CURRENT TASK'S TCB ADDRESS; ,; GET OLD ASSIGNMENT00]dCdc UCB ADDRESS FROM HEADER; # MOV OLDUCB,-(SP) ;SAVE UCB ADDRESSM BR 180$ ;JOIN COMMON CODE 160$:A .ENDC ;C$$RTKR TST IMPFLG ;IMPLICIT ALUN? BEQ 170$ ;IF EQ NO;F2; GET DEVICE AND UNIT NUMBER FROM HEADER EXTENSION;C( MOV R1,R4 ;GET ADDRESS OF 2ND LUN WORD4 SUB #H.LUN+2+MAP6,R1 ;GET OFFSET INTO LUT EXTENSION) ADD MAP6+H.LUTE,R1 ;ADD EXTENSION OFFSETI MOV (R1)+,R2 ;GET DEVICE NAME MOV (R1),R0 ;GET UNIT NUMBER;V; SET UP OLD UCB ADDRESS;B$ CLR -(SP) ;NO PREVIOUS UCB ADDRESS;DD; SPECIAL CASE OV - IF OV IS IN LUN EXTENSION, DON'T DO LOGICAL NAME; TRANSLATION;  CMP #"OV,R2 ;IS THIS OV? BNE 180$ ;IF EQ NO MOV $TKTCB,R5 ;GET TASK'S TCB& MOV T.LDV(R5),R1 ;GET LOAD DEVICE TCB JMP 240$ ;JOIN COMMON CODE170$:D .ENDC ;C$$RTB" MOV R0,-(SP) ;SAVE ADDRESS OF UCB, MOV R1,R4 ;SAVE ADDRESS OF SECOND LUN WORD! MOV (R3)+,R2 ;GET NAME OF DEVICET MOVB (R3),R0 ;GET UNIT NUMBERU180$:$ .IF DF C$$RTK ;REMOTE TASK SUPPORT" BIT #F5.RTK,$FMSK5 ;REMOTE TASKS? BNE 220$ ;IF NE YESO .ENDC ;C$$RTK .IF DF M$$MUP# BIT #T3.SLV,T.ST3(R5) ;SLAVE TASK?,2 BNE 220$ ;IF NE YES, BYPASS LOGICAL DEVICE TABLE .ENDC .IF DF L$$GCL- MOV T.UCB(R5),R1 ;GET THE CURRENT TASK'S TI:C6 CALL $GTUSR ;RESOLVE RAW UCB AND SET USER HASH TABLE9 MOV #$LNTDR,-(SP) ;RESOLVE ANY LOGICAL NAME TRANSLATIONS 5 CALL $MPDC3 ;USE ROUTINE IN FOURTH DIRECTIVE COMMON / BCC 220$ ;IF CC, SUCCESSFULLY MATCHED LOGICALR2 TST R3 ;SEE IF ERROR OCCURRED OR NO MATCH AT ALL BEQ 190$ ;IF EQ VALID MATCH .IFF$ BR 190$ ;DO OLD LOGICALS .IFTF188$:  TST (SP)+ ;CLEAN STACK189$: $ .IF DF C$$RTK ;REMOTE TASK SUPPORT/ CALL RMTERR ;DEALLOCATE PACKET IF REMOTE TASKG .ENDC! DRSTS D.RS92 ;RETURN WITH ERRORS190$:U1 MOV #$LOGHD,R3 ;POINT TO LOGICAL ASSIGNMENT LISTV-200$: MOV (R3),R3 ;GET ADDRESS OF NEXT ENTRY  BEQ 220$ ;IF EQ END OF LISTE) TSTB L.TYPE(R3) ;SYSTEM WIDE ASSIGNMENT?A BEQ 210$ ;IF EQ YES / CMP L.UCB(R3),T.UCB(R5) ;TI UCB ADDRESS MATCH?1 BNE 200$ ;IF NE NO*210$: CMP R2,L.NAM(R3) ;DEVICE NAME MATCH? BNE 200$ ;IF NE NO' CMPB R0,L.UNIT(R3) ;UNIT NUMBER MATCH?R BNE 200$ ;IF NE NO- MOV L.ASG(R3),R1 ;GET ASSIGNMENT UCB ADDRESST BR 230$ ;FINISH IN COMMON CODE .ENDC ;L$$GCL220$: ( CALL GETUCB ;GET CORRECT UCB ADDRESS  BCS 188$ ;IF CS ERROR D X' .IF DF C$$RTK ;REMOTE TASK SUPPORT " BIT #F5.RTK,$FMSK5 ;REMOTE TASKS? BEQ 230$ ;IF EQ NO ;@; IF THIS IS A PSEUDO DEVICE OTHER THAN TI:, FAIL THE ASSIGNMENT;O0 BIT #DV.PSE,U.CW1(R1) ;IS THIS A PSEUDO DEVICE? BEQ 225$ ;NO, CONTINUE CMP #"TI,D.NAM(R3) ;IS IT TI?# BNE 188$ ;NO, FAIL THE ASSIGNMENT)225$:T ; ; TEST FOR GENERIC DEVICEN; @ CMP (R1),$XXLOW ;IS THIS A GENERIC DEVICE? HIGHER THAN LOW DCB? BLO 230$ ;IF LO NO ) CMP (R1),$XXHGH ;LOWER THAN HIGH DCB? % BLOS 188$ ;IF LOS, IT IS GENERIC 5 .ENDC ;C$$RTK K230$: ;REFERENCE LABEL I D .IF DF V$$TRM" MOV (R1),R3 ;POINT TO DEVICE DCB6 CMP D.NAM(R3),#"VT ;IS THE DEVICE A VIRTUAL TERMINAL? BNE 240$ ;IF NE NO/ CMP U.PTCB(R1),R5 ;IS ISSUING TASK THE PARENT?E BEQ 240$ ;IF EQ NO0 CMP R1,T.UCB(R5) ;IS ISSUING TASK AN OFFSPRING? BNE 188$ ;IF NE NO .ENDC0240$: MOV (SP)+,R3 ;WAS LUN PREVIOUSLY ASSIGNED? BEQ 260$ ;IF EQ NO1 CMP R5,U.ATT(R3) ;UNIT ATTACHED TO CURRENT TASK?N BNE 250$ ;IF NE NO. MOV R1,-(SP) ;SAVE NEW ASSIGNMENT UCB ADDRESS MOV R1,R0 ;COPY UCB ADDRESS.& CALL $MPLND ;MAP TO REAL UCB ADDRESS2 MOV (SP)+,R1 ;RETRIEVE NEW ASSIGNMENT UCB ADDRESS. CMP R0,R3 ;NEW ASSIGNMENT TO SAME FINAL UCB? BNE 320$ ;IF NE NO1250$: MOV R3,R5 ;COPY OLD ASSIGNMENT UCB ADDRESSC: MOV #$IOKIL,-(SP) ;SET TO KILL I/O ON PREVIOUS ASSIGNMENT BR 261$260$:$: MOV #NULL,-(SP) ; PUT ADDRESS ON STACK TO KEEP IT A KNOWN/ ; LENGTH. THIS SHOULD BE THE ADDRESS OFN" ; ANY "RTS PC" INSTRUCTION.261$:P& MOV R1,-2(R4) ;ASSIGN LUN TO NEW UNIT .IF DF C$$RTK ;REMOTE TASKS00edIdcDATADATADATADATADATADATADATA ; <; DECIDE IF WE REALLY WANT TO DEALLOCATE THE CPRBUF PACKET ; " BIT #F5.RTK,$FMSK5 ;REMOTE TASKS? BEQ 300$ ;IF EQ NO;NB; WE HAVE SUCCESSFULLY ASSIGNED A LOCAL DEVICE. NOW WE NOTIFY THED; VMS SYSTEM THAT IT CAN DEASSIGN WHATEVER PREVIOUS ASSIGNMENT THERE; WAS FOR THIS LUN.A;E MOV (R1),R0 ; GET DCB." CMP #"TI,D.NAM(R0) ; IS THIS TI:?5 BEQ 266$ ; YES, LEAVE IT ALONE; VMS HAS IT ALREADY.) MOV KISAR6,-(SP) ; SAVE CURRENT MAPPING.N MOV $CPPKT,KISAR6 ; MAP PACKET.8 TST MAP6+H$STAT ; DID VMS SUCCESSFULLY ASSIGN A DEVICE?! BGT 265$ ; YES, LEAVE IT THERE.T, ; OTHERWISE, WE'RE GOING TO DEASSIGN THE ; PREVIOUS DEVICE.C MOVB #HT$DEA,MAP6+H$TYPEE ; INDICATE DEASSIGN PACKET.Y0 MOV #MAP6+P$LUN,R0 ; GET ADDRESS OF PARAMETERS.+ MOV $CPLUN,(R0)+ ; PASS LUN TO DEALLOCATE.1 MOV R1,(R0)+ ; SAVE REGISTER. MOV R2,(R0)+ ; SAVE REGISTER. MOV R3,(R0)+ ; SAVE REGISTER. MOV R4,(R0)+ ; SAVE REGISTER. MOV R5,(R0)+ ; SAVE REGISTER.1 MOV IMPFLG,(R0)+ ; SAVE IMPLICIT DIRECTIVE FLAG.V$ MOV (SP)+,(R0)+ ; SAVE SAVED APR 6.' MOV (SP)+,(R0)+ ; SAVE RETURN ADDRESS.E8 SUB #MAP6,R0 ; COMPUTE LENGTH OF PACKET WITH SAVE AREA.5 CLR $CPPKT ; MAKE SURE NO ONE ELSE USES OUR PACKET. . CPSEN$ #SF$BIA!SF$HDR!SF$AST!SF$BLK,KISAR6,R0 ; SEND PACKET. MOV R0,KISAR6 ; MAP PACKET.4 MOV R0,$CPPKT ; RESTORE RECORD OF PACKET'S ADDRESS. MOV #MAP6+P$LUN+2,R0R ; POINT TO SAVE AREA.M! MOV (R0)+,R1 ; RESTORE REGISTER.R! MOV (R0)+,R2 ; RESTORE REGISTER.L! MOV (R0)+,R3 ; RESTORE REGISTER.L! MOV (R0)+,R4 ; RESTORE REGISTER. ! MOV (R0)+,R5 ; RESTORE REGISTER.U4 MOV (R0)+,IMPFLG ; RESTORE IMPLICIT DIRECTIVE FLAG.* MOV 2(R0),-(SP) ; RESTORE RETURN ADDRESS.+ MOV (R0),-(SP) ; RESTORE MAPPING TO STACK.I265$:R- MOV (SP)+,KISAR6 ; RESTORE PREVIOUS MAPPING.M266$:I/ CMP #$IOKIL,(SP) ;HAS I/O KILL BEEN REQUESTED?R( BNE 280$ ;IF NE NO - DEALLOCATE PACKET ; 6; CHECK IF THE NEW ASSIGNED DEVICE IS A GENERIC ONE ; + CMP (R1),$XXLOW ;IS NEW DEVICE GENERIC? T BLO 270$ ;IF LO NO + CMP (R1),$XXHGH ;IS NEW DEVICE GENERIC? T- BLOS 280$ ;IF LOS - YES, DEALLOCATE PACKET L ; ; NEW DEVICE IS LOCAL, S6; CHECK IF THE OLD ASSIGNED DEVICE IS A GENERIC ONE ; 270$: - CMP (R5),$XXLOW ;IS THIS A GENERIC DEVICE? * BLO 280$ ;IF LO NO - DEALLOCATE PACKET - CMP (R5),$XXHGH ;IS THIS A GENERIC DEVICE? 2 BLOS 290$ ;IF LOS YES - DON'T DEALLOCATE PACKET 280$: % MOV $CPPKT,R0 ;GET ADDRESS OF PACKETV CALL $CPDEA ;DEALLOCATE IT NOW. CLR $CPPKT ;INDICATE WE ARE DONE WITH PACKET290$:;O@; IF THIS IS A REMOTE SYSTEM, THE KX DRIVER SET THE ERROR STATUS;I1 MOV #IS.SUC,-(SP) ;OVERRIDE CPRSYS' ERROR STATUSE MTPD$ @#H.DSW ; - BIC #1,$UMPS ;MAKE SURE CARRY BIT IS CLEAR ;300$:  .ENDC ; C$$RTK! .IF DF C$$RTB ;RUN TIME BINDING ;KF; WE SHOULDN'T NEED A RUN TIME CONDITIONAL HERE, BECAUSE IF RTB IS NOT-; SUPPORTED, IMPFLG WILL NEVER GET SET ANYWAY ;M TST IMPFLG ;IMPLICIT ALUNP BEQ 310$ ;IF EQ NO% SUB #2,$UMPC ;BACK UP THE USER'S PCE" MOV #$STACK-22,SP ;DON'T DO DRFIN310$:I .ENDC ; C$$RTBT RETURN ;E(320$: MOV R1,-(SP) ;SAVE NEW UCB POINTER .IF DF X$$HDR' MOV $SAHPT,R1 ;GET TASK HEADER ADDRESS# .IFFM' MOV $HEADR,R1 ;GET TASK HEADER ADDRESSN .ENDC, ADD #H.NLUN,R1 ;POINT TO THE NUMBER OF LUNS MOV (R1),-(SP) ;PICK UP COUNT6330$: CMP (R1)+,(R1)+ ;ADVANCE TO NEXT UCB POINTER + 2* CMP R1,R4 ;SAME LUN AS BEING REASSIGNED? BEQ 340$ ;IF EQ YESQ' MOV -2(R1),R0 ;GET THIS LUN ASSIGNMENTU# BEQ 340$ ;IF EQ, LUN NOT ASSIGNED;. CALL $MPLND ;FOLLOW ANY REDIRECT; HANDLE TI:3 CMP R0,R3 ;LUN ASSIGNED TO SAME DEV AS REASS LUN? BNE 340$ ;NO, BRANCH TST (SP)+ ;REMOVE COUNT % MOV (SP)+,R1 ;GET NEW LUN ASSIGNMENTE+ BR 250$ ;IF EQ YES, ATTACH CAN BE IGNOREDL"340$: DEC (SP) ;POINT TO NEXT LUN BGT 330$ ;TRY AGAINP CMP (SP)+,(SP)+ ;CLEAN STACKA350$:T$ .IF DF C$$RTK ;REMOTE TASK SUPPORT TST (SP)+ ;CLEAN STACK/ CALL RMTERR ;DEALLOCATE PACKET I00md/tdcF REMOTE TASKH .ENDC ;C$$RTK&360$: DRSTS D.RS90 ;LUN LOCKED IN USE$ .IF DF C$$RTK ;REMOTE TASK SUPPORT ; "; SEND ASSIGN CHANNEL PACKET ; 5; INPUT: R1 - UCB ADDRES OF UNIT TO ASSIGN LUN TO M%; R5 - POINTER TO DPB IN PACKET B ; 370$:  MOVB #AC$DIC,(R5)+ ;DIC  MOVB #AC$SIZ,(R5)+ ;SIZ ;$ MOVB #AC$SUB,(R5)+ ;SUBFUNCTION  CLRB (R5)+ ;MODIFIER " MOVB $CPLUN,(R5)+ ;LUN NUMBER  CLRB (R5)+ ;TBMASK + MOV #H$SIZE+32,(R5)+ ;POINTER TO BUFFER ;# CLR (R5)+ ;MAKE IT A LONG WORD C# MOV #VNAMSZ,(R5)+ ;SIZE OF BUFFER MOV #"HT,(R5)+ ;RSX DEVICE NAME9 MOV (R5),12(R5) ;MOVE THE POINTER TO THE SECOND LUN WORDD CLRB (R5)+ ;MOVE UP ONE BYTE- MOVB U.UNIT(R1),(R5)+ ;STORE THE DEVICE UNIT * ADD #6,R5 ;POINT TO UCB ADDRESS FIELD MOV R1,(R5)+ ;STORE UCB ADDRESS1 TST (R5)+ ;SKIP PAST POINTER TO SECOND LUN WORDR# CMP R1,140000+H$TIUC ;IS THIS TI:?(' BNE 371$ ;NOPE, USE VMS TERMINAL NAMEK+ MOV #3,-20(R5) ;CHANGE SIZE TO SIZE OF TI:F CLR -16(R5) ;CLEAR OUT HT NAME CLR -14(R5) ;AND UNIT(% MOV #"TI,(R5)+ ;MOVE TI: INTO STRING  MOVB #':,(R5)+ BR 373$ ;SEND IT OFF371$:T+ ADD #U.VNAM,R1 ;POINT TO VMS TERMINAL NAMEE$ MOV (R1)+,(R5)+ ;COPY TERMINAL NAME BNE 372$ ;IF THERE, CONTINUE JMP 189$ ;EXIT WITH ERRORL%372$: MOV (R1)+,(R5)+ ;ALL FOUR WORDS MOV (R1)+,(R5)+ ;...P MOV (R1)+,(R5)+ ;...R373$:P* MOV #SN$IMP,R2 ;SEND PACKET IMPLICITLY & MOV #H$SIZE+42,R1 ;GET SIZE OF PACKET JMP 60$ ;SEND THE PACKET ;; RMTERR - REMOTE ERROR CODE;*; - CHECK IF REMOTE TASKS ARE SUPPORTED); - IF PACKET ALLOCATED, DEALLOCATE IT G; - IF IMPLICIT ALUN, ERROR CODE ALREADY SET, DON'T RETURN TO CALLER;VRMTERR:5, BIT #F5.RTK,$FMSK5 ;REMOTE TASKS SUPPORTED? BEQ 20$ ;IF EQ NO; MOV $CPPKT,R0 ;GET PACKET BIASR' BEQ 10$ ;IF NONE, DON'T DEALLOCATE IT. CALL $CPDEA ;DEALLOCATE PACKET) CLR $CPPKT ;INDICATE PACKET DEALLOCATED10$:( TST IMPFLG ;WAS THIS AN IMPLICIT ALUN? BNE 20$ ;IF EQ NO 9 TST (SP)+ ;DON'T RETURN TO CALLER, KXDRV HAS SET STATUSE20$: S RETURN ;T .ENDC ;C$$RTK ; :; GETUCB - ROUTINE TO FIND CORRECT UCB IN SYSTEM TABLES ; ; INPUT: R2 - DEVICE NAME ; R0 - UNIT NUMBER ; ; OUTPUT: R1 - UCB ADDRESS ; R3 - DCB ADDRESS ; GETUCB: 1 MOV #$DEVHD,R3 ;POINT TO PHYSICAL DEVICE TABLES C,10$: MOV (R3),R3 ;GET ADDRESS OF NEXT DCB ! BEQ 20$ ;IF EQ END OF TABLES T( CMP R2,D.NAM(R3) ;DEVICE NAME MATCH?  BNE 10$ ;IF NE NO K S? CMPB R0,D.UNIT(R3) ;UNIT GREATER THAN OR EQUAL TO LOW BOUNDRY?  BLO 10$ ;IF LO NO C? CMPB R0,D.UNIT+1(R3) ;UNIT LESS THAN OR EQUAL TO HIGH BOUNDRY?N BHI 10$ ;IF HI NO N4 SUB D.UNIT(R3),R0 ;CALCULATE RELATIVE UNIT NUMBER % BIC #177400,R0 ;CLEAR EXCESS BITS / MOV D.UCBL(R3),R1 ;GET LENGTH OF UCB IN BYTES ' CALL $MUL ;CALCULATE NUMBER OF BYTES 3, ADD D.UCB(R3),R1 ;CALCULATE ADDRESS OF UCB   RETURN ;RETURN SUCCESS 20$: SEC 12NULL: ; THIS RETURN DOUBLES AS A RETURN FOR THE. ; PRECEDING CODE AND A LABEL FOR A NULL ; ROUTINE.C RETURN ;RETURN FAILURE  .END OR EQUAL TO HIGH BOUNDRY?N BHI 10$ ;IF HI NO N4 SUB D.UNIT(R3),R0 ;CALCULATE RELATIVE UNIT NUMBER % BIC #177400,R0 ;CLEAR EXCESS BITS / MOV D.UCBL(R3),R1 ;GET LENGTH OF UCB IN BYTES ' CALL $MUL ;CALCULATE NUMBER OF BYTES 3, ADD D.UCB(R3),R1 ;CALCULATE ADDRESS OF UCB   RETURN ;RETURN .TITLE DRATX$ .IDENT /09.03/F ;$,; COPYRIGHT (C) 1974, 1978, 1979, 1980, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.A;-A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDO9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.M;C; VERSION 08.04.;D; D. N. CUTLER 31-AUG-73;,+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:N;;; J. M. LAWLER; T. M. MARTIN; B. S. MCCARTHY; ; MODIFIED BY:;P ; B. S. MCCARTHY 30-MAY-84 09.01;0*; BM309 -- REMOVE REF00/udIdcDATADATADATADATADATADATADATAERENCES TO $HEADR TO; STREAMLINE CODE$; ; B. S. MCCARTHY 15-JUN-84 09.02; !; BM309 -- CORRECT TYPO IN ABOVEO;M ; B. S. MCCARTHY 16-OCT-84 09.03;S'; BM321 -- ANOTHER CORRECTION TO ABOVEE;E; MACRO LIBRARY CALLSR;C# .MCALL ABODF$,HDRDF$,HWDDF$,TCBDF$" ABODF$ ;DEFINE TASK ABORT CODES% HDRDF$ ;DEFINE TASK HEADER OFFSETSP$ HWDDF$ ;DEFINE HARDWARE REGISTERS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+; **-$DRATX-AST SERVICE EXIT;-F; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TERMINATE THE EXECUTION OF ANH; ASYNCHRONOUS SYSTEM TRAP SERVICE ROUTINE. IF ANOTHER AST IS QUEUED ANDD; AST'S ARE NOT DISABLED, THEN THE NEXT AST IS EFFECTED IMMEDIATELY.; ; DPB FORMAT:B;E#; WD. 00 -- DIC(115.),DPB SIZE(1.)..;L&; AT ISSUANCE THE TASK STACK CONTAINS:;D.; 14(SP)=EVENT FLAG MASK WORD FOR FLAGS 1.-16./; 12(SP)=EVENT FLAG MASK WORD FOR FLAGS 17.-32.E/; 10(SP)=EVENT FLAG MASK WORD FOR FLAGS 33.-48./; 06(SP)=EVENT FLAG MASK WORD FOR FLAGS 49.-64.R; 04(SP)=PRE AST TASK PS. ; 02(SP)=PRE AST TASK PC.O,; 00(SP)=PRE AST TASK DIRECTIVE STATUS WORD.; ; INPUTS:A;I9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.S+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.E/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.I,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;E:; OUTPUTS: (DIRECTIVE STATUS AND PS WORD RETURNED TO TASK);R-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.W1; DIRECTIVE STATUS OF PRE AST STATE IS RETURNED.R; C=1 IF DIRECTIVE IS REJECTED.E<; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE DIRECTIVE1; WAS NOT EXECUTED FROM AN AST SERVICE ROUTINE.2;D?; NOTE: IF AN ADDRESS CHECK FAILURE OCCURS WHILE REMOVING ARGU-O6; MENTS FROM THE TASK STACK, THEN THE ISSUING TASK IS ; ABORTED.R;- 54$DRATX::MOV (R2),-(SP) ;DIRECTIVE EXECUTED FROM AST? BPL 10$ ;IF PL NOA> BIC #^C*2>>,(SP) ;ISOLATE BITS* BIC (SP),(R2) ;CLEAR AST IN PROGRESS FLAG- ASR (SP) ;SET UP TASK'S CURRENT STATUS BITS ' BISB (SP)+,(R2) ;RESTORE PRE AST STATE0' BIT #T2.STP,(R2) ;WAS TASK STOPPED? O BEQ 5$ ;IF EQ NO$ MOV T.PCB(R5),R0 ;POINT TO TASK PCB( CALL $NXTSK ;REALLOCATE TASK PARTITION$5$: MFPI SP ;GET USER STACK POINTER% MOV (SP)+,R0 ;RETRIEVE STACK POINTERD ADD #2,R0 ;STEP OVER DPB WORDR- MOV #7*2,R1 ;SET NUMBER OF BYTES TO CHECK $- CALL $ACHCK ;ADDRESS CHECK TASK STACK WORDS2& BCS 20$ ;IF CS ADDRESS CHECK FAILURE .IF DF X$$HDR4 MOV H.EFSV(R4),-(SP) ;SAVE WAITFOR MASK FROM HEADER .IFTF* CALL $RELOM ;RELOCATE AND MAP TASK STACK .IFT 0 MOV (R0)+,4(SP) ;SET DIRECTIVE STATUS TO RETURN R .IFFP0 MOV (R0)+,2(SP) ;SET DIRECTIVE STATUS TO RETURN .ENDC& MOV #$UMPC,R3 ;POINT TO SAVED USER PC$ MOV (R0)+,(R3)+ ;RESTORE PRE AST PC# MOV (R0)+,(R3) ;RESTORE PRE AST PS,0 MOV (R0)+,T.EFLM(R5) ;RESTORE WAITFOR MASK WORD) MFPI SP ;RETRIEVE CURRENT STACK POINTER$ I S .IF DF S$$LIB U- BIS #PMODE,PS ;ASSUME RETURNING TO USER MODES; BIS #CSMODE!PSMODE,(R3) ;FORCE RETURN PS TO AT LEAST SUPERC! BMI 9$ ;IF MI RETURN PS IS USER) TSTB $SUPFL ;TASK USE SUPERVISOR MODE ?  BNE 9$ ;IF NE YES, OKV .ENDC ; DF S$$LIB V5 BIS #CMODE!PMODE,(R3) ;MAKE SURE BOTH MODES ARE USER &9$: ADD #16,(SP) ;ADJUST STACK POINTER MTPI SP ;WRITE IT BACK* BIC #PR7,(R3) ;MAKE SURE PRIORITY IS ZERO 5 .IF DF X$$HDR5 MOV (SP)+,T.EFLM+2(R5) ;RESTORE WAITFOR MASK ADDRESS* MOV $SAHDB,KISAR6 ;RESTORE HEADER MAPPING .IFFT: MOV H.EFSV(R4),T.EFLM+2(R5) ;RESTORE WAITFOR MASK ADDRESS O .ENDC3 CALLR $SETRT ;FORCE A REDISPATCHING OF PROCESSOR P(10$: DRSTS D.RS80 ;SET DIRECTIVE STATUS&20$: MOV #S.CAST,R0 ;SET AST ABORT " CALLR $ABCTK ;ABORT CURRENT TASK S .ENDER &9$: ADD #16,(SP) ;ADJUST STACK POINTER MTPI SP ;WRITE IT BACK* BIC #PR7,(R3) ;MAKE SURE PRIORITY IS ZERO 5 .IF DF X$$HDR5 MOV (SP)+,T.EFLM+2(R5) ;RESTORE WAITFOR MASK ADDRESS* MOV $SAHDB,KISAR6 ;RESTORE HEADER MAPPING .IFFT: MOV H.EFSV(R4),T.EFLM+2(R5) ;RESTORE WAITFOR MASK ADDRESS O .ENDC00D}dtdc .TITLE DRCIN .IDENT /5.00/;5; COPYRIGHT (C) 1985 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; P. WANNHEDEN 24-MAY-77;); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:;; B. S. MCCARTHY;+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:;; B. S. MCCARTHY;; MODIFIED BY:;; J. W. BERZLE 17-OCT-85 5.00;(; JWB167 - USE $QRMVA INSTEAD OF $QRMVT;R;; MACRO LIBRARY CALLS ;Y H# .MCALL HWDDF$,TCBDF$,PCBDF$,ITBDF$R% HWDDF$ ; DEFINE HARDWARE REGISTERSH TCBDF$ ; DEFINE TCB OFFSETS PCBDF$ ; DEFINE PCB OFFSETS ITBDF$ ; DEFINE ITB OFFSETS E;+!; **-$DRCIN-CONNECT TO INTERRUPT.N;-F; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CONNECT A SPECIFIED INTERRUPTG; VECTOR TO AN INTERRUPT SERVICE ROUTINE (ISR) IN THE TASK'S OWN SPACE,T;; OR TO DISCONNECT A PREVIOUSLY CONNECTED INTERRUPT VECTOR.; F; IF THE FUNCTION "CONNECT" IS REQUESTED, THE OPERATION IS AS FOLLOWS:C; A BLOCK OF DYNAMIC MEMORY IS ALLOCATED AND SET UP AS AN INTERRUPTW@; TRANSFER BLOCK (ITB). THE ITB IS LINKED TO THE ITB LIST OF THE?; TASK WITH LISTHEAD (SINGLE WORD) IN P.DPCB OF THE TASK'S PCB.-7; CHECKPOINTING AND SHUFFLING IS DISABLED FOR THE TASK.E?; THE VECTOR IS SET UP TO POINT TO THE OFFSET X.JSR IN THE ITB,T@; WHICH CONTAINS A SUBROUTINE CALL TO THE SPECIAL INTERRUPT SAVE; ROUTINE $INTSC.N;E=; IF THE FUNCTION "DISCONNECT" IS REQUESTED, THE OPERATION IST=; ESSENTIALLY THE REVERSE OF WHAT IS DESCRIBED FOR "CONNECT".S;L3; *************************************************(,; * NOTE - THE DISCONNECT FUNCTION, WHEN **; * DISCONNECTING THE LAST VECTOR (OR *,; * ONLY), CLEARS THE CHECKPOINT-DISABLE *0; * BIT (PS.CHK) AND NO-SHUFFLE-BIT (PS.NSF) */; * REGARDLESS OF WHAT THE STATE WAS BEFORE *T/; * VECTORS WERE CONNECTED OR ANY CHANGE IN *A,; * STATE WHILE VECTORS WERE CONNECTED. * ; * *; * EXCEPTIONS: *E-; * 1. IF THE TASK IS NOT CHECKPOINTABLE, * ; * PS.CHK IS NOT CLEARED. *.; * 2. IF THE TASK IS MARKED FOR ABORT FOR *3; * MEMORY PARITY ERROR, PS.NSF IS NOT CLEARED. *H3; ************************************************* ;N ; DPB FORMAT: ;C#; WD. 00 -- DIC(129.),DPB SIZE(7.).A%; WD. 01 -- INTERRUPT VECTOR ADDRESS.A/; WD. 02 -- BASE ADDRESS FOR MAPPING OF ISR ANDT'; ENABLE/DISABLE-INTERRUPT ROUTINES. D; WD. 03 -- ADDRESS OF INTERRUPT SERVICE ROUTINE. IF ZERO, DIRECTIVE<; IS "DISCONNECT FROM INTERRUPTS" AND REMAINING ARGUMENTS; ARE IGNORED.L8; WD. 04 -- ADDRESS OF ENABLE/DISABLE-INTERRUPT ROUTINE.0; WD. 05 -- (LOW BYTE) LOW BYTE OF PSW TO BE SET; BEFORE CALLING ISR.#; WD. 06 -- ADDRESS OF AST ROUTINE.;P ; INPUTS:;9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=POINTER TO WD. 01 IN DPBA/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.I,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;F6; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK).;S; IF SUCCESSFUL COMPLETION:R; CC-C 0; DIRECTIVE STATUS:N; +16; BEFORE RETURN, THE ENABLE/DISABLE-INTERRUPTS ROUTINE:; (IF SPECIFIED) IS CALLED IN KERNEL MODE WITH CC-C CLEAR.; ; IF DIRECTIVE IS REJECTED:R; CC-C 1; DIRECTIVE STATUS:U7; D.RS1 AN ITB COULD NOT BE ALLOCATED (NO POOL SPACE).R/; D.RS8 THE FUNCTION REQUESTED IS "DISCONNECT"A,; AND THE TASK IS NOT OWNER OF THE VECTOR.); D.RS16 ISSUING TASK IS NOT PRIVILEGED.1; D.RS17 THE SPECIFIED VECTOR IS ALREADY IN USE. 8; D.RS19 THE SPECIFIED VECTOR IS ILLEGAL (LOWER THAN 606; OR HIGHER THAN HIGHEST VECTOR SPECIFIED AT SYSGEN,; OR NOT A MULTIPLE OF 4).8; D.RS81 ISR OR ENABLE/DISABLE-INTERRUPT ROUTINE IS NOT1; WITHIN 4K WORDS FROM (BASE ADDRESS & 177700). ;- U .IF DF C$$INT O .ENABL LSBL T$DRCIN::, BIT #T3.PRV,T.ST3(R5) ; IS TASK PRIVILEGED? BEQ 95$ ; N - ILLEGAL, JUMPK   .IF DF M$$PRO .B BIT $CPBIT,T.RRM(R5) ;DOES TASK HAVE AFFINITY FOR THIS PROCESSOR? BEQ 100$ ;NO IF EQ E .ENDC 1 H"00DdIdcDATADATADATADATADATADATADATA MOV (R3)+,R4 ; GET VECTOR ADDRESS BIT #3,R4 ; MULTIPLE OF 4?$ BNE 60$ ; N - ILLEGAL VECTOR, JUMP CMP R4,#60 ; VECTOR IN RANGE?R BLO 60$ ; N - JUMP CMP R4,#V$$CTRT BHIS 60$ ; N - JUMP4 MOV (R3)+,R0 ; GET BASE ADDRESS" MOV (R3)+,-(SP) ; GET ISR ADDRESS# BEQ 40$ ; ZERO - DISCONNECT, JUMPV;S; DIRECTIVE IS "CONNECT"; .IF DF E$$LOG&E$$NSIJ CMP @R4,#$NS0 ; VECTOR IN USE?B BLO 70$ ; Y - ILLEGAL, JUMPH CMP @R4,#$NS7 BHI 70$ ; Y - ILLEGAL, JUMPO .IFF ; DF E$$LOG&E$$NSI" CMP @R4,#$NONSI ; VECTOR IN USE ? BNE 70$ ; Y - ILLEGAL, JUMPE .ENDC ; DF E$$LOG&E$$NSIU1 BIC #77,R0 ; CLEAR LOWER 6 BITS IN BASE ADDRESS  P .IF DF U$$DAS) CALL $RELUI ; RELOCATE TO APR 6 ADDRESSE .IFF ; DF U$$DAS) CALL $RELOC ; RELOCATE TO APR 6 ADDRESSO .ENDC ; DF U$$DAS* SUB #20000,R2 ; RELOCATE TO APR 5 ADDRESS BCS 90$ ; OUT OF RANGE - JUMPV4 SUB R0,@SP ; GET DISPLACEMENT FROM "BASE" TO "ISR" CMP @SP,#20000 ; .GT. 4K WORDS? BHIS 90$ ; Y - ILLEGAL, JUMP4 MOV (R3)+,-(SP) ; GET ENB./DIS.INT. ROUTINE ADDRESS" BEQ 10$ ; NO SUCH ROUTINE - JUMP) SUB R0,@SP ; GET DISPLACEMENT FROM BASE6 BCS 90$ ; OUT OF RANGE - JUMPD CMP @SP,#20000 ; .GT. 4K WORDS? BHIS 90$ ; Y - ILLEGAL, JUMP# ADD R2,@SP ; MAKE APR 5 ADDRESSESE10$: ADD R2,2(SP) MOV R1,-(SP) ; SAVE APR 5 VALUE) MOV #X.LEN,R1 ; GET SIZE OF ITB IN BYTES  U .IF DF K$$DAS  MOV #$ICAVL-2,R0D. CALL $ALOC1 ; ALLOCATE ITB FROM ICB/ITB POOL  .IFF  D CALL $ALOCB ; ALLOCATE AN ITBP M .ENDC S BCS 80$ ; FAILURE - JUMP" MOV T.PCB(R5),R1 ; GET TASK'S PCB/ ADD #P.STAT,R1 ; POINT TO STATUS WORD (P.STAT)B* BIT #PS.CHK,@R1 ; CHECKPOINTING DISABLED? BNE 20$ ; Y - JUMP BIS #PS.CHK,@R1 ; N - DO IT0 CLR P.DPCB-P.STAT(R1) ; INITIALIZE ITB LISTHEAD(20$: BIS #PS.NSF,@R1 ; DISABLE SHUFFLING ASSUME P.DPCB,P.STAT-4; TST -(R1)< MOV -(R1),@R0 ; ADD ITB TO FRONT OF ITB LIST IN PCB (X.LNK) MOV R0,@R1 ( TST (R0)+ ; STEP PAST LINK WORD IN ITB( MOV R0,R1 ; SAVE INTERRUPT ENTRY POINT, MOV #4537,(R0)+ ; "JSR R5,@#$INTSC" (X.JSR) MOV #$INTSC,(R0)+ ; (X.JSR+2), MOV (R3)+,@R0 ; PSW AND UNUSED BYTE (X.PSW), ADD #X.REL-X.PSW,R0 ; POINT TO X.REL IN ITB, MOV (SP)+,(R0)+ ; STORE APR 5 VALUE (X.REL)> MOV (SP)+,(R0)+ ; STORE ENB./DIS.INT. ROUTINE ADDRESS (X.DSI)) MOV R5,(R0)+ ; STORE TCB ADDRESS (X.TCB) : MOV (SP)+,X.ISR-(R0) ; STORE ISR ADDRESS (X.ISR); CLR X.FORK+2-(R0) ; CLEAR FORK PC WORD (X.FORK+2)T7 MOV #$DQAC,(R0)+ ; STORE ADDRESS OF ROUTINE TO DEQUEUET ; AST BLOCK QUEUED BY $QASTC- TST (R0)+ ; STEP PAST AST QUEUE THREAD WORDS( MOV PC,(R0)+ ; SET NON-ZERO TO INDICATE ; AST BLOCK FREE (A.CBL)< MOV #7*2+2,(R0)+ ; NUMBER OF WORDS TO ALLOCATE ON AST STACK ; (A.BYT)($ MOV @R3,(R0)+ ; AST ADDRESS (A.AST)4 MOV #1,(R0)+ ; NUMBER OF AST PARAMETERS = 1 (A.NPR)6 MOV R4,(R0)+ ; AST PARAMETER = VECTOR ADDRESS (X.VEC)& MOV @R4,@R0 ; SAVE VECTOR PC (X.VPC)) MOV R1,@R4 ; SET VECTOR TO POINT TO ITBD4 TST -(R1) ; BACK UP TO START OF ITB AND CLEAR CC-C0 CALLR $CLEDR ;CALL USER ENABLE/DISABLE ROUTINE ; R1 = POINTER TO ITB$ ; CC-C = 0 TO ENABLE INTERRUPTS,$ ; = 1 TO DISABLE INTERRUPTS;*;,; DIRECTIVE IS "DISCONNECT"L;T%40$: MOV @R4,R1 ; GET PC FROM VECTOR3) SUB #X.JSR,R1 ; GET START OF ITB (X.LNK)  MOV T.PCB(R5),R0 ; GET PCB11 BIT #PS.CHK,P.STAT(R0) ; CHECKPOINTING DISABLED?D( BEQ 100$ ; N - TASK HAS NO ITB'S, JUMP2 CALL $DISIN ; DISABLE INTERRUPTS, DEALLOCATE THE ; ITB ETCETERA7 BCS 100$ ; ERROR (TASK IS NOT OWNER OF VECTOR) - JUMPL DRSTS +1 ; EXIT WITH SUCCESS #60$: DRSTS D.RS19 ; ILLEGAL VECTORT*70$: DRSTS D.RS17 ; VECTOR ALREADY IN USE!80$: DRSTS D.RS1 ; NO POOL SPACE =90$: DRSTS D.RS81 ; ISR OR ENB./DIS.INT. ROUTINE ADDRESS NOTS0 ; WITHIN RANGE (BASE&177700, BASE&177700+4K)(95$: DRSTS D.RS16 ; PRIVILEGE VIOLATION=100$: DRSTS D.RS8 ; DISCONNECT - TASK IS NOT OWNER OF VECTORB; ;P;+(; **-$DISIN-DISCONNECT INTERRUPT VECTOR.;T; INPUT:; R1 POINTER TO ITB0; R5 POINTER TO TASK TCB00Dddc; ; OUTPUT:- ; IF SUCCESS:+; CC-C 0); THE FOLLOWING OPERATIONS ARE PERFORMED:G2; 1. THE ITB IS REMOVED FROM THE ITB LIST STARTING!; IN P.DPCB OF THE TASK'S PCB.C9; 2. IF A USER ROUTINE TO DISABLE INTERRUPTS WAS SUPPLIEDS=; WHEN THE VECTOR WAS CONNECTED TO, THAT ROUTINE IS CALLEDD"; IN KERNEL MODE WITH CC-C SET.F; 3. VECTOR PC IS RESTORED TO POINT TO THE NONSENSE INTERRUPT ROUTINE.:; 4. IF THE FORK BLOCK OF THE ITB IS IN THE FORK QUEUE, IT; IS REMOVED.B; 5. IF THE AST BLOCK OF THE ITB IS IN THE AST QUEUE FOR THE TASK,; IT IS REMOVED.P7; 6. IF THIS WAS THE ONLY VECTOR CONNECTED TO THE TASK,E>; AND THE TASK IS CHECKPOINTABLE, CHECKPOINTING IS ENABLED.@; ALSO, UNLESS THE TASK IS MARKED FOR ABORT FOR MEMORY PARITY!; ERROR, SHUFFLING IS ENABLED.N%; 7. FINALLY, THE ITB IS DEALLOCATED.C; ); IF ERROR (TASK IS NOT OWNER OF VECTOR):O; CC-C 1; ; REGISTERS ALTERED: R0,R1,R2,R3;-;K; "$DISIN::MOV T.PCB(R5),R0 ; GET PCB0 ADD #P.DPCB,R0 ; POINT TO ITB LISTHEAD (P.DPCB)/ MOV 2(R0),-(SP) ; SAVE WORD FOLLOWING LISTHEADV$ CALL $QRMVA ; REMOVE FROM ITB LIST2 MOV (SP)+,2(R0) ; RESTORE WORD FOLLOWING LISTHEAD. BCS 130$ ; ITB NOT IN LIST - EXIT WITH ERROR, MOV R0,-(SP) ; SAVE POINTER TO ITB LISTHEAD SEC6 CALL $CLEDR ;CALL USER ROUTINE TO DISABLE INTERRUPTS ; WITH CC-C SETC- MOV X.VPC(R1),@X.VEC(R1) ; RESTORE VECTOR PCO, ADD #X.FORK,R1 ; POINT AT FORK BLOCK IN ITB# MOV #$FRKHD,R0 ; GET FORK LISTHEAD, MTPS #PR7 ; DISABLE INTERRUPTS6 CALL $QRMVA ;;; REMOVE FROM FORK LIST IF IT IS THERE MTPS #0 ;;; ENABLE INTERRUPTSM1 ADD #X.AST-X.FORK,R1 ; POINT AT AST BLOCK IN ITBO MOV R5,R0' ADD #T.ASTL,R0 ; GET AST LIST LISTHEADI3 CALL $QRMVA ; REMOVE FROM AST LIST IF IT IS THERE $ SUB #X.AST,R1 ; RESTORE ITB POINTER# MOV R1,R0 ; GET ITB POINTER IN R0/ MOV (SP)+,R1 ; RESTORE POINTER TO ITB LISTHEAD ! TST (R1)+ ; ITB LIST NOW EMPTY?  BNE 120$ ; N - JUMPN ASSUME P.STAT,P.DPCB+4E TST (R1)+ ; POINT TO P.STAT 2 MOV T.ST2(R5),R2 ; Y - GET STATUS WORD 2 FROM TCB& BIT #T2.CHK,R2 ; TASK CHECKPOINTABLE? BNE 105$ ; N - JUMP#' BIC #PS.CHK,@R1 ; ENABLE CHECKPOINTINGT105$: ASSUME T2.ABO,100S" ROLB R2 ; TASK MARKED FOR ABORT? BPL 110$ ; N - JUMP < CMP T.EFLG(R5),#S.PRTY ; Y - IS REASON MEMORY PARITY ERROR?& BEQ 120$ ; Y - DON'T MAKE SHUFFLABLE(110$: BIC #PS.NSF,@R1 ; ENABLE SHUFFLING'120$: MOV #X.LEN,R1 ; GET LENGTH OF ITB  B .IF DF K$$DAS N MOV #$ICAVL-2,R3D, CALL $DEAC1 ; DEALLOCATE FROM ICB/ITB POOL 2 .IFF   CALL $DEACB ; DEALLOCATE ITB # .ENDC  CLC ; SUCCESS 130$: RETURN N .DSABL LSBC S .ENDC E L .ENDPOINTINGT105$: ASSUME T2.ABO,100S" ROLB R2 ; TASK MARKED FOR ABORT? BPL 110$ ; N - JUMP < CMP T.EFLG(R5),#S.PRTY ; Y - IS REASON MEMORY PARITY ERROR?& BEQ 120$ ; Y - DON'T MAKE SHUFFLABLE(110$: BIC #PS.NSF,@R1 ; ENABLE SHUFFLING'120$: MOV #X.LEN,R1 ; GET LENGTH OF ITB  B .IF DF K$$DAS N MOV #$ICAVL-2,R3D, CALL $DEAC1 ; DEALLOCATE FROM ICB/ITB POOL 2 .IFF   CALL $DEACB .TITLE DRCLI; .IDENT /01.03/ N;;6; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY6; BE USED OR COPIED ONLY IN ACCORDANCE WITH THE TERMS; OF SUCH LICENSE.; 6; COPYRIGHT (c) 1981 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;O; VERSION 01.01L;T; M. S. FOX 20-APR-81 ;$;M; MODIFIED BY:;D; M. S. FOX 23-SEP-81D;E3; MF225 -- FIX CP.RST CHECKS, AND DO NOT ALLOW CLI 1; TO BE SET IF TTY IS LOGGED OFF, AND CP.LGO=0M; ; K. L. NOEL 13-MAY-88 ;I?; KLN101 -- SEND PROMPT INFORMATION OVER TO PARENT AME FOR CPRA; ; K. L. NOEL 07-OCT-88 N;A/; KLN109 -- ALLOW CLI TO DO IT'S OWN PROMPTINGT;H;+G; **-$DRCLI-SET CLI / GET CLI INFO / DECLARE CMD ARRIVAL AST DIRECTIVESO;R:; THIS MODULE CONTAINS THE GET CLI INFORMATION AND SET CLI:; DIRECTIVES. IT ALSO GETS CALLED BY DRDSP FOR THE DECLARE:; COMMAND ARRIVAL AST DIRECTIVE, BUT IMMEDIATEDLY JUMPS TO<; THE $CAAST ENTRY POINT OF THE DRPUT MODULE FOR PROCESSING.; ; INPUTS:O;1?; R2=ADDRESS OF THE 00dIdcDATADATADATADATADATADATADATASECOND TASK STATUS WORD OF THE CURRENT TASKN*; R3=ADDRESS OF THE SECOND WORD IN THE DPB.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASK ;O;- .IF DF A$$CLI .IF DF M$$CLI/ .ERROR ;CANNOT DEFINE BOTH M$$CLI AND A$$CLID .ENDC ;M$$CLI .MCALL PKTDF$,UCBDF$  PKTDF$ ;DEFINE CPB OFFSETSM UCBDF$ ;DEFINE UCB OFFSETSI1 ASSUME UM.CLI,36 ;BITS TO INDICATE TERMINALS CLI ; ASSUME C.PTCB,0 ;TCB ADDRESS MUST BE AT OFFSET ZERO OF CPBS#$DRCLI::MOVB -(R3),R0 ;GET DPB SIZEC% CMPB #5,(R3)+ ;IS IT SET CLI (SCLI$)D. BEQ SCLI ;IF EQ YES, PROCESS SCLI$ DIRECTIVE3 CMPB #2,R0 ;IS IT DECLARE CMD ARRIVAL AST (SCAA$)E BNE 10$ ;IF NE NO.( JMP $CAAST ;PROCESS DIRECTIVE IN DRPUT310$: CMPB #7,R0 ;IS IT GET CLI INFORMATION (GCII$);$ BEQ GCII ;IF EQ YES, PROCESS GCII$ DRSTS D.RS99 ;ILLEGAL DPB SIZE;+; **-SCLI- SET A TERMINAL'S CLIC;3;; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SET THE CLI OF THER?; CURRENT TASK'S TI: TERMINAL (OR SPECIFIED TERMINAL) TO BE THED@; SPECIFIED CLI. SYSTEM MESSAGES INFORMING BOTH THE PREVIOUS ANDB; NEW CLIS OF THE CHANGE ARE SENT TO THE CLIS IF THEY DESIRE THEM.; ; DPB FORMAT:B;1"; WD. 00 -- DIC(173.),DPB SIZE(5.)>; WD. 01 -- ASCII NAME OF THE TERMINAL WHOSE CLI SHOULD BE SET); WD. 02 -- OCTAL UNIT NUMBER OF TERMINALG7; WD. 03 -- FIRST HALF OF RAD50 NAME OF THE DESIRED CLIS<; WD. 04 -- SECOND HALF OF THE RAD50 NAME OF THE DESIRED CLI;O5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;C-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.S&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.E2; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF THE; LENGTH IS ILLEGAL 2; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IS THE#; ISSUING TASK IS NOT PRIVILEGED. 1; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF AN-5; NON-EXISTANT OR NON-TERMINAL DEVICE IS SPECIFIED.4;; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF THE SPECIFIEDU; CLI DOES NOT EXIST.A6; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF THERE IS; INSUFFICIENT POOL SPACE.1; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THEI/; TERMINAL IS LOGGED OFF, AND CP.LGO IS CLEARR;R;-@SCLI: BIT #T3.PRV!T3.CLI,T.ST3(R5) ;CAN TASK USE THIS DIRECTIVE? BEQ 40$ ;IF EQ NOS MOV (R3)+,R0 ;GET DEVICE NAME BNE 10$ ;IF NE, GOT ONES) MOV T.UCB(R5),R0 ;GET CURRENT TASK'S TI: # TST (R3)+ ;SKIP UNIT NUMBER FIELD BR 20$ ;"10$: MOV (R3)+,R1 ;GET UNIT NUMBER' MOV R3,-(SP) ;SAVE POINTER TO CLI NAMED% CALL $CVDVN ;CONVERT TO UCB ADDRESSI' BCS 50$ ;IF CS, DEVICE DOES NOT EXIST MOV R2,R0 ;COPY UCB ADDRESSI$ CALL $MPLND ;FOLLOW REDIRECT CHAIN, BIT #DV.TTY,U.CW1(R0) ;IS DEVICE A TERMINAL BEQ 50$ ;IF EQ NOT' MOV (SP)+,R3 ;POINT TO CLI NAME IN CPBB20$:% .IF DF C$$RMT ; REMOTE TASK SUPPORT 4 BIT #F5.RTK,$FMSK5 ; REMOTE TASK SUPPORT TURNED ON? BEQ 25$ ; IF EQ NO: CLR $CPPKT ;MAKE SURE NO PACKET ADDRESS IS LEFT IN THERE* CMP T.UCB(R5),R0 ;IS REQUEST FOR OWN CLI? BNE 25$ ;IF NE NO MOV R0,R4 ;SAVE UCB ADDRESSR% MOV R3,R5 ;SAVE POINTER TO CLI NAME ( MOV #1,R1 ;ALLOCATE A PACKET OF SIZE 1= MOV #AL$BCK!AL$IMP,R0 ;BLOCK TASK AND DO IMPLICIT TASK STARTD CALL $CPALO ;ALLOCATE PACKET/ MOV R0,$CPPKT ;STORE PACKET ADDRESS FOR $STCLI: MOV R4,R0 ;RESTORE UCB ADDRESS( MOV R5,R3 ;RESTORE POINTER TO CLI NAME$ MOV $TKTCB,R5 ;GET TCB ADDRESS BACK25$: .ENDC ;C$$RMT% CALL $STCLI ;SET THE TERMINAL'S CLIE BCC 60$ ;IF CC, SUCCESSE TST R0 ;IDENTIFY ERROR BEQ 40$ ;IF EQ, PRIV VIOLATION BPL 30$ ;IF PL, NO POOL DRSTS D.RS2 ;CLI NOT IN SYSTEM!30$: DEC R0 ;ALLOCATION FAILURE? BNE 35$ ;IF NE YES3 DRSTS D.RS8 ;TERMINAL NOT LOGGED IN, CP.LGO CLEARA%35$: DRSTS D.RS1 ;ALLOCATION FAILURE;'40$: DRSTS D.RS16 ;PRIVILEGE VIOLATION,,50$: DRSTS D.RS92 ;ILLEGAL DEVICE SPECIFIED60$: RETURN ;SUCCESS;+'; **-GCII-GET CLI INFORMATION DIRECTIVEC;$E; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A BUFFER IN THE CURRENTSC; TASK SPACE WITH INFORMATION ABOUT HIS OWN OR A SPECIFIED CLI00ddc. THE3@; ISSUING TASK MUST BE PRIVILEGED TO GET INFORMATION ABOUT A CLI@; WHICH IS NOT THE CLI OF ITS TI: TERMINAL. IF THE BUFFER IS NOT=; LONG ENOUGH TO CONTAIN ALL THE DATA, IT IS FILLED FROM LEFTO<; TO RIGHT WITH AS MUCH DATA AS WILL FIT. NO INDICATION WILL@; BE GIVEN TO THE TASK THAT ITS BUFFER IS TOO SHORT. THIS ALLOWSE; NEW DATA ITEMS TO BE RETURNED BY FUTURE VERSIONS OF THIS DIRECTIVE,C?; SINCE OLD TASKS WILL CONTINUE TO WORK. THEY JUST WILL NOT SEE ; THE NEW DATA. ; ; DPB FORMAT:I;C"; WD. 00 -- DIC(173.),DPB SIZE(7).5; WD. 01 -- ADDRESS OF BUFFER IN CURRENT TASK'S SPACET'; WD. 02 -- LENGTH OF THE TASK'S BUFFER 7; WD. 03 -- FIRST HALF OF NAME OF CLI TO RETURN DATA ONE8; WD. 04 -- SECOND HALF OF NAME OF CLI TO RETURN DATA ON;; WD. 05 -- ASCII NAME OF TERMINAL WHOSE CLI SHOULD BE USEDO); WD. 06 -- OCTAL UNIT NUMBER OF TERMINALE;T5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)L;A-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.E&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.I2; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF THE; DPB LENGTH IS INVALID.9; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE BUFFER 1; IS NOT ENTIRELY WITHIN THE USER'S TASK SPACE.N7; DIRECTIVE STATUS OF 'D.RS81' IS RETURNED IF BOTH THEE/; NAMES OF THE CLI AND TERMINAL ARE SUPPLIED.A1; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF THEV!; SPECIFIED CLI DOES NOT EXIST.2; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF THE'; SPECIFIED DEVICE IS NOT A TERMINAL. 9; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF A NON-PRIVS/; TASK ATTEMPTS TO GET INFO ON A CLI WHICH IS.; NOT ASSOCIATED WITH ITS TI: ;R;-;FF; THE FORMAT OF THE INFORMATION BUFFER IN THE TASK'S ADDRESS SPACE IS:;I+; +---------------------------------------+E; ! NAME OF CLI !I; ! (2 WORDS) !U+; !---------------------------------------!E; ! CLI STATUS WORD FROM CPB !+; !---------------------------------------!.!; ! NAME OF TASK SERVING AS CLI !F; ! (2 WORDS) ! +; !---------------------------------------!S; ! TERMINAL'S U.CW2 !+; !---------------------------------------!I; ! TERMINAL'S PROTECTION UIC !I+; !---------------------------------------!T; ! TERMINAL'S CURRENT UIC !S+; !---------------------------------------!- ; ! !-; ! DEFAULT PROMPT STRING !!; ! (1 BYTE LENGTH, FOLLOWED BY !-; ! 31. BYTES STRING) !+; +---------------------------------------+-;-;-)GCII: MOV (R3)+,R0 ;GET ADDRESS OF BUFFERI# MOV (R3)+,R1 ;GET LENGTH OF BUFFER- MOV R1,-(SP) ;SAVE LENGTH MOV R0,-(SP) ;SAVE ADDRESSU# CALL $ACHKW ;ADDRESS CHECK BUFFER-% MOV R5,R2 ;COPY CURRENT TCB ADDRESST. MOV T.UCB(R5),R5 ;POINT TO CURRENT TASK'S TI:$ TST (R3) ;WAS A CLI NAME SPECIFIED BEQ 10$ ;IF EQ NO-% TST 4(R3) ;WAS A TERMINAL SPECIFIED BNE 100$ ;IF NE YESN% CALL $FNCLI ;FIND THE SPECIFIED CLI-% BCS 110$ ;IF CS, CLI DOES NOT EXIST-9 MOV U.MUP(R5),R3 ;GET WORD CONTAINING TI:S CLI INDICATOR,- BIC #^CUM.CLI,R3 ;ISOLATE CLI INDICATOR BITSL" CMP R3,R1 ;LOOKING AT TI:S CLI?? BEQ 200$ ;IF EQ YES  BR 30$ ;REQUIRE PRIVILEGE /10$: CMP (R3)+,(R3)+ ;SKIP OVER CLI NAME IN DPB  MOV (R3)+,R0 ;GET DEVICE NAME BEQ 20$ ;IF EQ NOK MOV (R3)+,R1 ;GET UNIT NUMBER* CALL $CVDVN ;CONVERT NAME TO UCB ADDRESS( BCS 120$ ;IF CS, DEVICE DOES NOT EXIST MOV R2,R0 ;COPY UCB ADDRESSN$ CALL $MPLND ;FOLLOW REDIRECT CHAIN' MOV R0,R5 ;PUT UCB ADDRESS BACK IN R5 , BIT #DV.TTY,U.CW1(R5) ;IS DEVICE A TERMINAL BEQ 120$ ;IF EQ NO120$: MOV U.MUP(R5),R4 ;GET CLI INDICATOR FROM UCBC BIC #^CUM.CLI,R4 ;ISOLATE ITB$ MOV $CPTBL(R4),R4 ;POINT TO THE CPB, MOV $TKTCB,R2 ;GET TCB ADDR OF CURRENT TASK0 CMP T.UCB(R2),R5 ;LOOKING AT CURRENT TASK'S TI:, BEQ 200$ ;IF EQ YES, DO NOT NEED PRIVILEGED30$: BIT #T3.PRV!T3.CLI,T.ST3(R2) ;IS CURRENT TASK PRIVILEGED OR CLI BNE 200$ ;IF NE YESD;S# DRSTS D.RS16 ;PRIVILEGE VIOLATIONA9100$: DRSTS D.RS81 ;CANNOT SPECIFY BOTH TERMINAL AND CLIU&110$: DRSTS D.RS2 ;CLI DOES NOT EXIST-120$: DRSTS D.RS92 ;ILLEGAL DEVICE SPECIFIEDD;T.00dIdcDATADATADATADATADATADATADATA200$: MOV (SP)+,R0 ;GET ADDRESS OF USER BUFFER) CALL $RELOC ;RELOCATE USERS INFO BUFFERK( MOV R1,KISAR6 ;MAP BUFFER IN TASK SPACE# MOV (SP)+,R3 ;GET LENGTH OF BUFFERK ASR R3 ;CONVERT TO WORD COUNT . SUB #2,R3 ;SPACE LEFT IN BUFFER FOR CLI NAME BLT 230$ ;IF LT NO) MOV C.PNAM(R4),(R2)+ ;PUT NAME IN BUFFER$ MOV C.PNAM+2(R4),(R2)+ ;SECOND HALF- DEC R3 ;SPACE IN BUFFER FOR CPB STATUS WORDR BLT 230$ ;IF LT NO2 MOV C.PSTS(R4),(R2) ;COPY STATUS WORD INTO BUFFER/ SUB #2,R3 ;SPACE LEFT IN BUFFER FOR TASK NAME, BLT 230$ ;IF LT NO! MOV (R4),R0 ;POINT TO CLI'S TCBS, BIT #CP.POL,(R2)+ ;IS TCB IN SECONDARY POOL BEQ 210$ ;IF EQ NO MOV R0,KISAR6 ;MAP TCBE MOV #140000,R0 ;POINT TO IT9210$: MOV T.NAM+2(R0),-(SP) ;GET SECOND HALF OF TASK NAMET MOV T.NAM(R0),-(SP) ;FIRST HALF. MOV R1,KISAR6 ;RESTORE MAPPING OF USER BUFFER. MOV (SP)+,(R2)+ ;PUT TASK NAME IN USER BUFFER MOV (SP)+,(R2)+ ;3 DEC R3 ;SPACE LEFT IN BUFFER FOR TERMINAL'S U.CW2  BLT 230$ ;IF LT NO, MOV U.CW2(R5),(R2)+ ;COPY U.CW2 INTO BUFFER$ DEC R3 ;SPACE FOR PROTECTION UIC?? BLT 230$ ;IF LT NO* MOV U.LUIC(R5),(R2)+ ;COPY PROTECTION UIC DEC R3 ;SPACE FOR CURRENT UICA BLT 230$ ;IF LT NO& MOV U.UIC(R5),(R2)+ ;COPY CURRENT UIC1 SUB #16.,R3 ;ENOUGH ROOM LEFT FOR PROMPT STRINGM BLT 230$ ;IF LT NO CLR R5 ;1 BISB C.PDPL(R4),R5 ;GET LENGTH OF DEFAULT PROMPT2- DEC R5 ;DO NOT RETURN ZERO AT END OF PROMPT2$ MOVB R5,(R2)+ ;PUT LENGTH IN BUFFER# BEQ 230$ ;IF EQ, NO PROMPT STRINGL) ADD #C.PRMT,R4 ;POINT TO START OF STRING &220$: MOVB (R4)+,(R2)+ ;COPY CHARACTER SOB R5,220$230$: RETURN ;SUCCESS(;++; **-$STCLI-ROUTINE TO SET A TERMINAL'S CLIU=; **-$STCL1-ROUTINE TO SET A TERMINAL'S CLI (ALTERNATE ENTRY)R;TB; THIS ROUTINE SETS THE CLI OF THE SPECIFIED TERMINAL FOR BOTH THEA; SCLI$ DIRECTIVE AND MCR. IF EITHER THE PREVIOUS OR NEW CLI HAVEPD; THE CP.MSG BIT SET IN THEIR CPB'S, A MESSAGE PACKET IS CREATED ANDI; PASSED TO THEM TO INFORM THEM OF THE CHANGE. NOTE THAT IF AN ALLOCATIONRE; FAILURE OCCURS WHEN ACTIVATING THE NEW CLI AFTER QUEUEING A MESSAGESD; TO IT, THE ERROR IS IGNORED SINCE IT WOULD BE IMPOSSIBLE TO UNWINDE; ACTIONS WHICH MAY HAVE ALREADY BEEN COMPLETED, SUCH AS DEACTIVATINGRG; THE PREVIOUS CLI AFTER A CALL TO $EXRQN. THE ONLY DRAWBACK TO THIS ISOC; THAT THE NEW CLI WILL NOT GET THE MESSAGE IMMEDIATELY. THE BUFFERCG; WILL BE LINKED IN ITS QUEUE, BUT THE CLI WILL NOT RECEIVE IT UNTIL ITDB; GETS ACTIVATED AT A FUTURE POINT BY A COMMAND ARRIVAL OR ANOTHER; SYSTEM MESSAGE.L; ; INPUTS: ;I#; R0=UCB ADDRESS OF TERMINAL TO SETE5; R3=POINTER TO THE NAME OF THE NEW CLI ($STCLI ONLY) 5; R1=OFFSET TO POINTER TO CPB IN $CPTBL ($STCL1 ONLY)B); R4=CPB ADDRESS OF NEW CLI ($STCL1 ONLY) ;V ; OUTPUTS:;A; C=1 CLI COULD NOT BE SET(; R0=2 IF AN ALLOCATION FAILURE OCCURED:; R0=1 IF THE TERMINAL IS LOGGED OFF, AND CP.LGO IS CLEAR8; R0=0 IF THE CP.RST BIT IS SET, AND A TASK OTHER THAN1; THE CLI IS ATTEMPTING TO SET A TERMINAL TO IT "; R0=-1 IF THE CLI DOES NOT EXIST@; C=0 THE CLI WAS SUCCESSFULLY SET UP FOR THE SPECIFIED TERMINAL;I; ALL REGISTERS ARE MODIFIED;$;-;Y5MSGLEN=/100 ;LENGTH OF MESSAGE PACKETSY; .IF NDF D$$PAR ,$STCLI::CALL $FNCLI ;FIND THE SPECIFIED CLI .ENDC ;D$$PAR.$STCL1::MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING5 MOV #-1,-(SP) ;SET EXIT STATUS WORD FOR THIS ROUTINE$ BCS 40$ ;IF CS, CLI DOES NOT EXIST* INC (SP) ;SET EXIT STATUS TO RETURN R0=02 MOV U.MUP(R0),R3 ;GET WORD CONTAINING CURRENT CLI# BIC #^CUM.CLI,R3 ;ISOLATE CLI BITSF# MOV $CPTBL(R3),R3 ;GET CPB ADDRESSL6 MOV C.PSTS(R3),$TEMP0 ;SAVE CURRENT CLI'S STATUS WORD< BIT #CP.RST,$TEMP0 ;DOES CURRENT CLI HAVE RESTRICTED ACCESS BEQ 3$ ;IF EQ NO3 CMP $TKTCB,(R3) ;IS OLD CLI ISSUING THIS DIRECTIVEP BNE 80$ ;IF NE NOI;3$: BIT #CP.RST,C.PSTS(R4) ;IS ACCESS TO NEW CLI RESTRICTEDA BEQ 5$ ;IF EQ NO3 CMP $TKTCB,(R4) ;IS NEW CLI ISSUING THIS DIRECTIVEP BNE 80$ ;IF NE NOO-5$: INC (SP) ;SET EXIT STATUS TO RETURN R0=1I- BIT #U2.LOG,U.CW2(R0) ;IS TERMINA00ddcL LOGGED ONI BEQ 7$ ;IF EQ YES3B BIT #CP.LGO,C.PSTS(R4) ;DOES CLI ACCEPT CMDS FROM LOGGED OFF TTYS BEQ 80$ ;IF EQ NOR-7$: INC (SP) ;SET EXIT STATUS TO RETURN R0=2E/ MOV R1,-(SP) ;SAVE OFFSET TO NEW CLI IN $CPTBLC MOV R0,-(SP) ;SAVE UCB ADDRESS8' CLR R5 ;ASSUME NO MESSAGE FOR NEW CLI)4 BIT #CP.MSG,C.PSTS(R4) ;DOES NEW CLI WANT A MESSAGE BEQ 10$ ;IF EQ NOS& MOV #MSGLEN,R1 ;GET LENGTH OF MESSAGE! CALL $ALSEC ;ALLOCATE A MESSAGEE BCS 70$ ;IF CS, NO POOL MOV R0,R5 ;SAVE BUFFER ADDRESS MOV R4,$TEMP1 ;SAVE CPB ADDRESS810$: BIT #CP.MSG,$TEMP0 ;DOES CURRENT CLI WANT A MESSAGE BEQ 25$ ;IF EQ NO # MOV #MSGLEN,R1 ;GET MESSAGE LENGTHT( CALL $ALSEC ;ALLOCATE A MESSAGE BUFFER BCS 60$ ;IF CS, NO POOLC MOV R0,R1 ;COPY BUFFER ADDRESS MOV (SP),R2 ;GET UCB ADDRESS' MOV R3,R4 ;GET ADDRESS OF CURRENT CPB # CALL STMSG ;SET UP MESSAGE BUFFER 1 MOV #CM.RMT,@#C.CMCD+140000 ;INSERT MESSAGE CODEL" MOV R1,-(SP) ;SAVE BUFFER ADDRESS+ CALL $QCPKT ;QUEUE BUFFER AND REQUEST CLIF BCC 20$ ;IF CC, OK$ BNE 50$ ;IF NE, ALLOCATION FAILURE;$E; AFTER THIS POINT, COMLETE ERROR RECOVERY IS IMPOSSIBLE, BECAUSE THELF; TASK MAY JUST HAVE BEEN ACTIVATED INSTEAD OF BEING MERELY UNSTOPPED.;6220$: TST (SP)+ ;DON'T NEED BUFFER ADDRESS ANYMORE-25$: MOV R5,R1 ;POINT TO MESSAGE FOR NEW CLI ( BEQ 30$ ;IF EQ, NO MESSAGE FOR NEW CLI MOV $TEMP1,R4 ;POINT TO NEW CPB MOV (SP),R2 ;GET UCB ADDRESS CALL STMSG ;SET UP MESSAGE+ CALL $QCPKT ;QUEUE MESSAGE AND REQUEST IT  ;DO NOT CHECK ERROR RETURNSC.30$: MOV (SP)+,R0 ;GET UCB ADDRESS OF TERMINAL. MOV (SP)+,R1 ;GET OFFSET TO NEW CLI IN $CPTBL1 MTPS #PR7 ;;;PREVENT TTDRV FROM ANSWERING PHONEC" ;;;WHEN CLI SETTING IS INVALIDB BIC #UM.CLI!UM.DSB,U.MUP(R0) ;;;CLEAR OUT PREVIOUS CLI INDICATION BIS R1,U.MUP(R0) ;;;SET NEW CLI MTPS #0 ;ALLOW INTERRUPTSO CLC ;SUCCESSC"40$: MOV (SP)+,R0 ;SET EXIT STATUS+ MOV (SP)+,KISAR6 ;RESTORE ORIGINAL MAPPING $ .IF DF C$$RMT ;REMOTE TASK SUPPORT3 BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT TURNED ON?C BEQ 45$ ;IF EQ NOG# TST $CPPKT ;WAS PACKET ALLOCATED?R BEQ 45$ ;IF EQ NOC( CALL SNDCLI ;SEND PACKET WITH PROMPTS 45$: .ENDC ; C$$RMT  RETURN ;ALL DONES;V; ERROR CLEANUP CODE;,F; ERROR WHILE ACTIVATING CURRENT CLI, SO UNLINK AND DEALLOCATE MESSAGE;C/50$: MOV #$CLICQ,R0 ;POINT TO CLI COMMAND QUEUEC* MOV (SP)+,R1 ;POINT TO BUFFER JUST QUEUED4 CALL $GTSPK ;REMOVE MESSAGE JUST INSERTED IN QUEUE$ MOV R1,R0 ;COPY POINTER TO MESSAGE MOV #MSGLEN,R1 ;GET ITS LENGTHR CALL $DESEC ;DEALLOCATE IT;-; DEALLOCATE MESSAGE FOR NEW CLI IF IT EXISTS ; ,60$: MOV R5,R0 ;POINT TO BUFFER FOR NEW CLI$ BEQ 70$ ;IF EQ, IT DIDN'T WANT ONE MOV #MSGLEN,R1 ;SET LENGTHL, CALL $DESEC ;DEALLOCATE BUFFER FOR NEW CLI!70$: CMP (SP)+,(SP)+ ;CLEAN STACKM80$:$ .IF DF C$$RMT ;REMOTE TASK SUPPORT3 BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT TURNED ON?U BEQ 90$ ;IF EQ NOR, MOV $CPPKT,R0 ;GET ADDRESS OF CPRBUF PACKET BEQ 90$ ;IF EQ NONEA CALL $CPDEA ;DON'T NEED IT CLR $CPPKT ;90$: .ENDC ; C$$RMT SEC ;SET ERROR STATUS BR 40$ ;GO TO COMMON EXIT CODE; ); LOCAL ROUTINE TO SET UP MESSAGE BUFFERS ; ; INPUTS:A; R1=ADDRESS OF MESSAGE BUFFER; R2=ADDRESS OF TERMINAL UCB-; R4=ADDRESS OF CPB OF CLI TO RECEIVE MESSAGEA;T ; OUTPUTS:;F=; THE MESSAGE BUFFER IN SEC POOL IS FILLED IN AND LEFT MAPPED ;K ; REGISTERS R1, R4, R5 PRESERVED;Q(STMSG: MOV R1,-(SP) ;SAVE BUFFER ADDRESS MOV R1,KISAR6 ;MAP BUFFER" MOV #140002,R3 ;POINT INTO BUFFER< MOV $MCRPT,(R3)+ ;ALL MESSAGES GO THRU DISPATCHER ON M-PLUS! MOV R2,(R3)+ ;INSERT UCB ADDRESS  MOV #4,(R3)+ ;CHARACTER COUNT- MOV #CC.CLI!CC.MSG,(R3)+ ;INSERT STATUS BITSD6 MOV #CM.LKT,(R3)+ ;ASSUME MESSAGE IS GOING TO NEW CLI9 MOV #+33,(R3)+ ;INSERT LENGTH AND TERMINATOR: MOV R2,R1 ;COPY UCB ADDR MOV (R1),R2 ;POINT TO DCBE* TST (R2)+ ;POINT TO ADDRESS OF FIRST UCB+ SUB (R2)+,R1 ;CALC RELATIVE ADDRESS OF UCBA" MOV (R2)+,(R3)+ ;COPY DEVICE NAME, MOV (R2)+,(R3) ;GET LOW UNIT NUMBER00ddcDATADATADATADATADATADATADATA FOR DCB MOV (R2),R2 ;GET LENGTH OF UCB CLR R0 ;SET UP R0,R13 DIV R2,R0 ;CALC RELATIVE UNIT NUMBER FOR THIS DCBR' ADD R0,(R3)+ ;CALC LOGICAL UNIT NUMBER , CLRB -1(R3) ;CLEAR STUFF LEFT IN HIGH BYTE% MOV R4,(R3) ;PUT CPB ADDR IN BUFFER0% MOV (SP)+,R1 ;RESTORE BUFFER ADDRESSO RETURN ;1;C%; SNDCLI - SEND CLI PROMPTS TO CPRCLIC;,; INPUT: $CPPKT - ADDRESS OF CPRBUF PACKET+; R0 - EXIT STATUS (PRESERVED IN R0)M;($ .IF DF C$$RMT ;REMOTE TASK SUPPORTSNDCLI:G;L; FILL IN HEADER OF PACKET;2) MOV KISAR6,-(SP) ; SAVE CURRENT MAPPINGR' MOV $CPPKT,KISAR6 ; MAP CPRBUF PACKETB$ CLR $CPPKT ; INDICATE PACKET USED, MOV #140000,R1 ; POINT TO HEADER OF PACKET0 MOVB #HT$SET,H$TYPE(R1) ; SET TYPE OF SET_INFO MOVB #2,H$ICNT(R1) ; TWO ITEMS ADD #H$SIZE,R1 ; POINT TO ITEM; ; FILL IN DEFAULT PROMPT ITEMR;C MOVB #II$DPR,I$ID(R1) ; SET ID CLR R2 ; ASSUME NO PROMPT6 BIT #CP.NUL,C.PSTS(R4) ; CLI DOES IT'S OWN PROMPTING? BNE 2$ ; IF NE YESC3 MOVB C.PDPL(R4),R2 ; SET LENGTH OF DEFAULT PROMPT, BEQ 2$S" ADD #1,R2 ; INCLUDE LENGTH BYTE2$: MOVB R2,I$LEN(R1) / MOV R1,I$BUF(R1) ; CALCULATE OFFSET TO PROMPT45 SUB #140000-12,I$BUF(R1) ; PROMPT COMES AFTER ITEMSY! ADD #4,R1 ; POINT TO NEXT ITEMV;2; FILL IN ^C PROMPT ITEM;D MOVB #II$CPR,I$ID(R1) ; SET ID CLR R3 ; ASSUME NO PROMPT6 BIT #CP.NUL,C.PSTS(R4) ; CLI DOES IT'S OWN PROMPTING? BNE 3$ ; IF NE YESN5 MOVB C.PCPL(R4),R3 ; SET LENGTH OF CONTROL C PROMPT  BEQ 3$ " ADD #1,R3 ; INCLUDE LENGTH BYTE3$: MOVB R3,I$LEN(R1)B/ MOV R1,I$BUF(R1) ; CALCULATE OFFSET TO PROMPTO. ADD R2,I$BUF(R1) ; SKIP OVER DEFAULT PROMPT% SUB #140000-6,I$BUF(R1) ; SKIP ITEMU* ADD #4,R1 ; POINT TO STORAGE FOR STATUS; ; SAVE EXIT STATUS; MOV R0,(R1)+ ;;P3; DON'T COPY PROMPTS IF CLI DOES IT'S OWN PROMPTING ; 6 BIT #CP.NUL,C.PSTS(R4) ; CLI DOES IT'S OWN PROMPTING? BNE 25$ ; IF NE YES; ; COPY DEFAULT PROMPTC;R3 MOVB C.PDPL(R4),R2 ; GET LENGTH OF DEFAULT PROMPTA BEQ 15$$ MOV R4,R3 ; GET ADDRESS OF PROMPT ADD #C.PRMT,R3 ( MOVB R2,(R1)+ ; PUT LENGTH INTO BUFFER)10$: MOVB (R3)+,(R1)+ ; COPY A CHARACTERM SOB R2,10$ ; UNTIL DONE; ; COPY CONTROL C PROMPT;;I15$:/ MOVB C.PCPL(R4),R2 ; GET LENGTH OF ^C PROMPTM BEQ 25$( MOVB R2,(R1)+ ; PUT LENGTH INTO BUFFER)20$: MOVB (R3)+,(R1)+ ; COPY A CHARACTERT SOB R2,20$ ; UNTIL DONE 25$: B! MOV KISAR6,R0 ; GET PACKET BIASF$ MOV (SP)+,KISAR6 ; RESTORE MAPPING& SUB #140000,R1 ; GET SIZE OF REQUEST MOV #SN$IMP,R5 ; GET SEND FLAG. BIC #SF$DSW,R5 ; THIS MAY NOT BE A DIRECTIVE;G ; SEND PACKET;:) CPSEN$ R5,R0,R1 ; SEND PACKET TO CPRCLIB;,; GET EXIT STATUS BACK;O! MOV KISAR6,-(SP) ; SAVE MAPPINGO MOV R0,KISAR6 ; MAP PACKET% MOV 140000+H$SIZE+10,R5 ; GET STATUS+$ MOV (SP)+,KISAR6 ; RESTORE MAPPING;); DEALLOCATE PACKETR;E" CALL $CPDEA ; DEALLOCATE PACKET;:; RETURN WITH STATUS;  MOV R5,R0 ; RETURN ; .ENDC ;C$$RMT .ENDC ;A$$CLI .ENDSIZE OF REQUEST MOV #SN$I .TITLE DRCMTT .IDENT /5.1/N K;N6; COPYRIGHT (c) 1983 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;M<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;I; MODIFIED FOR VERSION 2.1 BY:;C; J. R. KAUFFMAN 17-OCT-82 5.1N;W/; JRK263 -- MOVE MORE CODE TO DIRECTIVE COMMOND;C; 3; CANCEL MARK TIME AND SCHEDULE REQUESTS DIRECTIVESA;N; MACRO LIBRARY CALLSA;  .MCALL CLKDF$3 CLKDF$ ;DEFINE CLOCK QUEUE CONTROL BLOCK OFFSETSN;+%; **-$DRCMT-CANCEL MARK TIME REQUESTSI3; **-$DRCMS-CANCEL SELECTIVE MARK TIME REQUESTS S;FF; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CANCEL ALL MARK TIME REQUESTSG; (DPB SIZE=1) OR ALL REQUESTS WITH MATCHING EVENT FLAG OR AST ADDRESS 1; (DPB SIZE=3). N ; ; DPB FORMAT.K; ,; WD. 00 -- DIC(27.),DPB SIZE(1. OR 3.). $; WD. 01 -- MATCHING EFN NUMBER %; WD. 02 -- MATCHING AST ADDRESS A ; ; INPUTS:D;9; R2=ADDRESS OF TH00ddgdE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF WD. 00 + 2. 2; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; ;; NOTE: $DRCMT IS ALSO CALLED FROM THE EXIT DIRECTIVE AND S/; ONLY REQUIRES R5 TO BE LOADED ON ENTRANCE. D;S5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;-$; C=0 WITH A DIRECTIVE STATUS OF +1.;- .ENABL LSBE%$DRCMS::CMPB -(R3),#1 ;DPB SIZE=1 T/ BEQ $DRCMT ;IF EQ YES, CANCEL ALL MARK TIMES A CMPB (R3)+,#3 ;DPB SIZE=3 & BNE 5$ ;IF NE NO, INVALID DPB SIZE ' MOV (R3)+,R1 ;PICK UP SPECIFIED EFN R. MOV (R3),R2 ;PICK UP SPECIFIED AST ADDRESS  CLR R4 ;SET MARK TIME CODE E, CALLR $CLRSM ;CANCEL SELECTED MARK TIMES .$DRCMT::CLR R4 ;SET TYPE OF REQUEST TO REMOVE, CALLR $CLRMV ;REMOVE ALL REMAINING ENTRIES&5$: DRSTS D.RS99 ;INVALID DPB SIZE  .ENDIVE STATUS OF +1.;- .ENABL LSBE%$DRCMS::CMPB -(R3),#1 ;DPB SIZE=1 T/ BEQ $DRCMT ;IF EQ YES, CANCEL ALL MARK TIMES A CMPB (R3) .TITLE DRCPCC .IDENT /03.00/0 ;[; COPYRIGHT (C) 1984/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.F;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDO9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.H;S1; ORIGINALLY PART OF DRREG, ADDED BY T. M. MARTIN;TB; SPLIT INTO SEPARATE MODULE BY B. S. MCCARTHY AS PART OF CREATING?; THIRD DIRECTIVE COMMON WITH PLAS DIRECTIVES (BM292) 28-NOV-83;+;$; **-$DRCPC-CHECKPOINT COMMON REGION;3; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CHECKPOINT08; A NAMED STATIC COMMON REGION. THE ISSUING TASK MUST BE;; PRIVILEGED AND ATTACHED TO THE COMMON BUT NOT NECESSARILYR9; MAPPED. ANY TASK WHICH IS MAPPED TO THE COMMON WHICH IS 8; BEING CHECKPOINTED IS BLOCKED UNTIL THE CHECKPOINT HAS ; COMPLETED.;T ; DPB FORMAT:T; %; WD. 00 -- DIC (205.), DPB SIZE (6.)A.; WD. 01 -- FIRST WORD OF RAD50 PARTITION NAME/; WD. 02 -- SECOND WORD OF RAD50 PARTITION NAME&;(soon) WD. 03 -- SPECIFIED EVENT FLAG2;(soon) WD. 04 -- ADDRESS OF I/O STATUS DOUBLEWORD-;(soon) WD. 05 -- ADDRESS OF USER AST ROUTINEU; ; INPUTS:E; ; R3=ADDRESS OF WD. 00 + 2.E.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; ; OUTPUTS:; ; DIRECTIVE STATUS;P .IF DF, C$$PCRE8$DRCPC::BIT #T3.PRV,T.ST3(R5) ;IS THE ISSUER PRIVILEGED?" BEQ 25$ ;IF EQ NO, RETURN ERROR& MOV T.ATT(R5),R0 ;POINT TO FIRST ADB110$: MOV A.PCB-A.TCBL(R0),R1 ;PICK UP PCB ADDRESSC) CMP P.NAM(R1),(R3) ;IS THIS THE REGION?  BNE 20$ ;IF NE NO CMP P.NAM+2(R1),2(R3) ;REALLY?U BEQ 30$ ;IF EQ, FOUND ITS 20$: MOV (R0),R0 ;GET NEXT ADB BNE 10$ ;TRY NEXT ATTACHMENT & DRSTS D.RS94 ;RETURN ERROR 'IE.PNS'*25$: DRSTS D.RS16 ;RETURN ERROR 'IE.PRV')26$: DRSTS D.RS8 ;RETURN ERROR 'IE.ITS'"30$: MOV R1,R4 ;SAVE PCB ADDRESS* ADD #P.STAT,R1 ;POINT TO PCB STATUS WORD9 BIT #PS.CKP!PS.CHK,(R1) ;PARTITION NON CHECKPOINTABLE OR:! ;HAS CHECKPOINT IN PROGRESS?C# BNE 26$ ;IF NE YES, RETURN ERRORT$ BIT #PS.COM,(R1)+ ;IS IT A COMMON? BEQ 26$ ;IF EQ NO- BIT #P2.CPC,(R1) ;CPCR ALREADY IN PROGRESS?: BNE 26$ ;IF NE YEST! MOV R4,R1 ;RESTORE PCB ADDRESSN, TST P.DPCB(R1) ;IS REGION A STATIC COMMON? BEQ 26$ ;IF EQ NO1 BIS #P2.CPC,P.ST2(R1) ;INDICATE CPCR IN PROGRESSR2 CALLR $ICHKP ;AND INITIATE CHECKPOINT OF REGION .ENDC ; DF C$$CPR .ENDUS WORD9 BIT #PS.CKP!PS.CHK,(R1) ;PARTITION NON CHECKPOINTABLE OR:! ;HAS CHECKPOINT IN PROGRESS?C# BNE 26$ ;IF NE YES, RETURN ERRORT$ BIT #PS.C .TITLE DRCRV  .IDENT /04.01/>; D; COPYRIGHT (c) 1982, 1983, 1985 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; MODIFIED FOR M-PLUS V2.0 BY:; ; J. M. LAWLER; T. M. MARTIN; D. R. DONCHIN*+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:;F; J. R. KAUFFMAN;P+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY: ; ; B. S. MCCARTHY; L. B. MCCULLEY00gddcDATADATADATADATADATADATADATA; +; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY:I; ; K. L. NOEL 13-NOV-87 V4.00; #; KLN069 -- ADD VT SUPPORT FOR CPRR;R; K. L. NOEL 11-FEB-88 V4.01;I=; KLN090 -- ALLOCATE THE CORRECT SIZE PIECE OF POOL FOR DATAD3; STRUCTURES AND SET UP HEADER FOR HT$DSB PACKETF;ME; THIS MODULE CONTAINS THE DIRECTIVE ROUTINES AND PRIMARY SUBROUTINES 1; WHICH PROVIDE PARENT-OFFSPRING TASKING SUPPORT..; ; MACRO LIBRARY CALLSD;R1 .MCALL ABODF$,DCBDF$,HDRDF$,TCBDF$,UCBDF$,CPRDF$ .  ABODF$ ;DEFINE ABORT CODESX. DCBDF$ ;DEFINE DEVICE CONTROL BLOCK SYMBOLS% HDRDF$ ;DEFINE TASK HEADER SYMBOLSU, TCBDF$ ;DEFINE TASK CONTROL BLOCK SYMBOLS9 UCBDF$ ,,TTDEF,SYSDEF ;DEFINE UNIT CONTROL BLOCK SYMBOLSL1 CPRDF$ ;DEFINE CPR PACKETS OFFSETS AND SYMBOLST;P; LOCAL SYMBOL DEFINITIONS;I T"D$LGTH=D.PCB+2 ;LENGTH OF VT DCB& .IF DF C$$RTK ;REMOTE SYSTEM SUPPORT)U$LGTH=U.VNAM+10-U.UAB ;LENGTH OF VT UCB  .IFF(U$LGTH=U.PTCB+2-U.UAB ;LENGTH OF VT UCB .ENDC ;REMOTE SYSTEM SUPPORT $MAP6=140000 ;FIRST ADDRESS OF APR6 E;+(; **-$DRCRV-CREATE VIRTUAL TERMINAL UNIT;KB; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CREATE A VIRTUAL TERMINAL-; UNIT AND RETURN THE UNIT NUMBER IN THE DSW.Y;L ; DPB FORMAT:D;N#; WD. 00 -- DIC(149.),DPB SIZE(5.).&; WD. 01 -- INPUT AST ROUTINE ADDRESS.'; WD. 02 -- OUTPUT AST ROUTINE ADDRESS.D'; WD. 03 -- ATTACH AST ROUTINE ADDRESS.U*; WD. 04 -- MAXIMUM ALLOWED BUFFER LENGTH.;G ; INPUTS:-;A@; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.:; R3=ADDRESS OF THE MAXIMUM BUFFER LENGTH WORD IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.T,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;D5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;N-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.17; NUMBER OF CREATED VIRTUAL TERMINAL UNIT IS RETURNED.U; C=1 IF DIRECTIVE IS REJECTED.H;; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF AN ALLOCATIONN; FAILURE OCCURS.9; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THE VIRTUALE"; TERMINAL DRIVER IS NOT LOADED.;- L .IF DF V$$TRM P9$DRCRV::TST $VTDCB+D.DSP ;VIRTUAL TERMINAL DRIVER LOADED?A BNE 1$ ;IF NE YEST JMP 100$ ;REPORT ERROR1$::$ .IF DF C$$RTK ;REMOTE TASK SUPPORT, BIT #F5.RTK,$FMSK5 ;REMOTE TASKS TURNED ON? BEQ 10$ ;IF EQ NO ( MOV #1,R1 ;SET FOR 1 BLOCK FROM CPRBUF9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT STARTF MOV R3,R5 ;SAVE R3% CALL $CPALO ;GET BUFFER FROM CPRBUF MOV R5,R3 ;RESTORE R3S MOV $TKTCB,R5 ; AND R5T MOV R0,-(SP) ;SAVE BUFFER BIASL10$: .IFTF ;C$$RTK4 MOV #D$LGTH+U$LGTH,R1 ;PICK UP SIZE OF VT DATA BASE$ CALL $ALOCB ;ALLOCATE VT DATA BASE BCC 15$ ;IF CC OKAYE .IFT ;C$$RTK , BIT #F5.RTK,$FMSK5 ;REMOTE TASKS TURNED ON? BEQ 14$ ;IF EQ NOU TST (SP)+ ;POP STACK14$: .ENDC ;C$$RTK JMP 90$ ;ALLOCATION FAILUREV15$: MOV R0,R1 ;SAVE POINTER TO DCB, MOV #$VTDCB,R2 ;POINT TO DATA BASE FOR VT0:/20$: MOV (R2)+,(R0)+ ;COPY WORD OF VT DATA BASES. CMP R2,#$VTDCB+D$LGTH+U$LGTH ;DONE WITH COPY? BLO 20$ ;IF LO NO1 SUB #U$LGTH+U.UAB,R0 ;POINT BACK TO START OF UCBK) MOV R0,D.UCB(R1) ;SET UCB POINTER IN DCBL- MOV R1,(R0) ;SET DCB POINTER IN UCB (U.DCB).5 MOV R0,U.RED(R0) ;SET UP REDIRECTION POINTER (U.RED)D3 BIT #T3.PRV,T.ST3(R5) ;IS ISSUING TASK PRIVILEGED?4 BEQ 30$ ;IF EQ NO8 BIS #U2.PRV,U.CW2(R0) ;MAKE VIRTUAL TERMINAL PRIVILEGED630$: ADD #U.IAST,R0 ;POINT TO PARENT INPUT AST ADDRESS  : .IF DF S$$LIB O. MOV (R3)+,R2 ;GET SPECIFIED INPUT AST ADDRESS( CALL $CALTA ;CALCULATE CORRECT ADDRESS- MOV R2,(R0)+ ;SET INPUT AST ADDRESS (U.IAST)T/ MOV (R3)+,R2 ;GET SPECIFIED OUTPUT AST ADDRESSC( CALL $CALTA ;CALCULATE CORRECT ADDRESS. MOV R2,(R0)+ ;SET OUTPUT AST ADDRESS (U.OAST)/ MOV (R3)+,R2 ;GET SPECIFIED ATTACH AST ADDRESSI( CALL $CALTA ;CALCULATE CORRECT ADDRESS. MOV R2,(R0)+ ;SET ATTACH AST ADDRESS (U.AAST) V .IFF :0 MOV (R3)+,(R0)+ ;SET INPUT AST ADDRESS (U.IAST)1 MOV (R3)+,(R0)+ ;SET OUTPUT AST ADDRESS (U.OAST)E1 MOV (R3)+,(R0)+ ;SET ATTACH A00gddgdST ADDRESS (U.AAST)C E .ENDC  V5 MOV H.DUIC(R4),(R0)+ ;INITIALIZE DEFAULT UIC (U.UIC)R. MOV R5,(R0) ;SET PARENT TCB ADDRESS (U.PTCB). MOV (R3),R2 ;PICK UP SPECIFIED BUFFER LENGTH" BEQ 40$ ;IF EQ STAY WITH DEFAULT- MOV R2,U.CW4-U.PTCB(R0) ;STORE BUFFER LENGTHC& CMP R2,#V$$TLM ;GREATER THAN MAXIMUM? BLOS 40$ ;IF LOS NOC= BIS #U3.DBF,U.CW3-U.PTCB(R0) ;DISABLE INTERMEDIATE BUFFERINGN*40$: MOV #$VTDCB,R0 ;POINT TO DCB FOR VT0:-60$: MOV R0,R2 ;COPY POINTER TO PREVIOUS DCB0 MOV (R0),R0 ;POINT TO NEXT DCB7 ADD #401,D.UNIT(R1) ;ADVANCE LOW AND HIGH UNIT NUMBERS 8 CMP D.NAM(R0),#"VT ;IS NEXT DCB FOR A VIRTUAL TERMINAL? BNE 70$ ;IF NE NO,< CMP D.UNIT(R1),D.UNIT(R0) ;IS IT THE NEXT CONSECUTIVE UNIT? BEQ 60$ ;IF EQ YES70$: .IF DF C$$RTK, BIT #F5.RTK,$FMSK5 ;REMOTE TASKS TURNED ON? BEQ 80$ ;IF EQ NOF( MOV D.UCB(R1),R5 ;GET UCB ADDRESS IN R5; MOVB D.UNIT(R1),U.UNIT(R5) ;GIVE VT A PHYSICAL UNIT NUMBERC+ CALL $CPCON ;DO CROSS INDEX WITH CPDRIVERP) CMPB #IE.IDU,$SCERR ;WAS THERE AN ERROR?D BNE 74$ ;IF NE NOR MOV (SP)+,R0 ;GET BUFFER BIAS#72$: MOV R1,-(SP) ;SAVE DCB ADDRESSB CALL $CPDEA ;DEALLOCATE PACKET& MOV (SP)+,R0 ;GET ADDRESS OF DCB BACK5 MOV #D$LGTH+U$LGTH,R1 ;GET LENGTH OF POOL ALLOCATIONS% CALL $DEACB ;DEALLOCATE DCB AND UCB$ JMP 90$ ;REPORT ERRORD74$:' CLRB U.OCNT(R5) ;CLEAR OFFSPRING COUNT  MOV (SP)+,KISAR6 ;MAP PACKET.$ MOV #MAP6,R3 ;GET ADDRESS OF HEADER3 MOVB #HT$CSB,H$TYPE(R3) ;CREATE SUBPROCESS REQUESTD CLRB H$ICNT(R3) ;NO ITEMS( ADD #H$SIZE,R3 ;POINT TO PARAMETER AREA CLR (R3) ;GET UNIT NUMBERE& MOVB D.UNIT(R1),(R3) ;GET UNIT NUMBER9 ADD $RMTTT,(R3) ;ADD IN OFFSET OF NUMBER OF HT TERMINALSA DEC (R3)+ ;VT0: IS JUST PROTOU MOV R0,(R3)+ ;SAVE R0 MOV R1,(R3)+ ; AND R1 MOV R2,(R3) ; AND R2 CPSEN$ #SN$DIR,KISAR6,#H$SIZE+2 MOV R0,KISAR6 ;MAP PACKET& MOV #MAP6+P$DPB,R3 ;POINT TO DPB AREA( ADD #2,R3 ;POINT TO EXTRA STORAGE AREA" MOV (R3)+,R0 ;GET SAVED REGISTERS MOV (R3)+,R1 ;S MOV (R3)+,R2 ;R/ CMP #IS.SUC,MAP6+H$STAT ;WAS SUCCESS RETURNED?R BEQ 75$ ;IF EQ YES MOV KISAR6,R0 ;GET BUFFER BIAS  JMP 72$75$:' MOV D.UCB(R1),R3 ;GET VT'S UCB ADDRESSE< MOV U.VUCB(R3),H$VUCB+MAP6 ;STORE VMS UCB ADDRESS IN PACKET3 MOV U.VUCB+2(R3),H$VUCB+2+MAP6 ; FOR HT$DSB PACKET). MOV R3,H$TIUC+MAP6 ;STORE RSX UCB ADDRESS TOO# CLR H$FLAG+MAP6 ;INDICATE NO FLAGSA' CLR H$RET+MAP6 ; AND NO RETURN ADDRESS3B MOV KISAR6,U.RAST(R3) ;STORE PACKET BIAS IN UCB FOR HT$DSB PACKET, MOV $TKTCB,R5 ;GET TASK'S TCB ADDRESS AGAIN80$: .ENDC ;C$$RTK( MOV R0,(R1) ;LINK NEW UNIT TO THIS ONE, MOV R1,(R2) ;LINK PREVIOUS UNIT TO NEW ONE6 MOVB D.UNIT(R1),2(SP) ;SET UNIT NUMBER IN STATUS WORD;+; ** W A R N I N G **U;A; SPM HOOKPOINT NUMBER 23.;(); DO NOT CHANGE THE INSTRUCTION FOLLOWINGV; LABEL WITHOUT CHECKING SPM;-+$SPH23==. ;SPM CHANGES THE INSTRUCTION AT ;THE LOCATION OF THIS LABELD' INC T.RDCT(R5) ;INC TASK RUNDOWN COUNTT RETURN ;$%90$: DRSTS D.RS1 ;ALLOCATION FAILURET6100$: DRSTS D.RS6 ;VIRTUAL TERMINAL DRIVER NOT LOADED N;++; **-$DRELV-ELIMINATE VIRTUAL TERMINAL UNITO;U@; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ELIMINATE THE SPECIFIED; VIRTUAL TERMINAL UNIT.;* ; DPB FORMAT:O;O#; WD. 00 -- DIC(151.),DPB SIZE(2.).H); WD. 01 -- VIRTUAL TERMINAL UNIT NUMBER.H;I ; INPUTS:;S@; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.<; R3=ADDRESS OF THE VIRTUAL TERMINAL UNIT NUMBER IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.R,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;O5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)L;I-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.O(; DIRECTIVE STATUS OF '+1' IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.7; DIRECTIVE STATUS OF 'D.RS92' RETURNED IF THE ISSUING -; TASK DID NOT CREATE THE SPECIFIED VIRTUAL2; TERMINAL UNIT.;- .ENABL LSBF;$DRELV::MOV #$VTDCB,R0 ;POINT TO FIRST VIRTUAL TERMINAL DCB 610$: CMPB D.UNIT(R0),(R3) ;IS THIS THE SPECIFIED UNIT? BEQ 30$ ;IF EQ YES1 MOV (R0),R000gddcDATADATADATADATADATADATADATA ;POINT TO NEXT VIRTUAL TERMINAL DCB:2 CMP D.NAM(R0),#"VT ;IS IT A VIRTUAL TERMINAL DCB? BEQ 10$ ;IF EQ YES120$: DRSTS D.RS92 ;INVALID VIRTUAL TERMINAL UNIT 430$: MOV D.UCB(R0),R0 ;POINT TO VIRTUAL TERMINAL UCB/ CMP U.PTCB(R0),R5 ;IS ISSUING TASK THE PARENT?  BNE 20$ ;IF NE NO, ILLEGAL C;++; **-$ELMVT-ELIMINATE VIRTUAL TERMINAL UNITB;SE; THIS ROUTINE ELIMINATES THE SPECIFIED VIRTUAL TERMINAL UNIT CREATEDC; BY THE CURRENT TASK.;S ; INPUTS:I;U6; R0=UCB ADDRESS OF VIRTUAL TERMINAL UNIT TO ELIMINATE;R ; OUTPUTS:;C=; ANY LUNS WHICH THE CURRENT TASK HAS ASSIGNED TO THE VIRTUAL$?; TERMINAL UNIT ARE DEASSIGNED. IF THERE ARE ANY ACTIVE TASK'S?; WHOSE TI: IS THE VIRTUAL TERMINAL UNIT BEING ELIMINATED, THEY(>; ARE ABORTED. AT THIS POINT AN ATTEMPT IS MADE TO ALLOCATE A?; COMMAND LINE TO MCR TO PERFORM ANY NECESSARY CLEANUP REQUIREDH?; BY THE VIRTUAL TERMINAL. IF THE COMMAND LINE CANNOT BE ALLO-C?; CATED, THE CURRENT TASK IS FORCED INTO A WAIT FOR SIGNIFICANT A; EVENT. (THE PC IS BACKED UP IN CASE THIS IS A ELVT$ DIRECTIVE.W@; IF THE TASK IS EXITING, THE PC DOESN'T MATTER.) WHEN THE COM-B; MAND LINE IS SUCCESSFULLY QUEUED, THE UNIT IS MARKED FOR DEALLO-=; CATION AND THE CURRENT TASK'S RUNDOWN COUNT IS DECREMENTED..@; SINCE A COMMAND LINE IS ALWAYS QUEUED, $DEAVT CANNOT BE CALLED; IMMEDIATELY.;- C$ELMVT::SAVNR ;SAVE R4 AND R5E MOV R0,R5 ;SAVE UCB ADDRESSA3 CALL $CVTLN ;CLEAR OUT VIRTUAL TERMINAL LUN WORDSS- TSTB U.OCNT(R0) ;ANY OFFSPRING STILL ACTIVE? # BEQ 85$ ;IF EQ NO, ELIMINATE UNITA;VE; AT THIS POINT THE STD IS SEARCHED FOR ANY ACTIVE TASKS WHOSE TI: IS D; THE VIRTUAL TERMINAL BEING ELIMINATED. THE STD IS SCANNED INSTEADH; OF THE ATL TO FIND ANY TASKS WHICH ARE IN THE PROCESS OF BEING LOADED,7; THUS TS.EXE IS CLEAR BUT THEY ARE NOT YET IN THE ATL.A;D0 MOV $TSKHD,R1 ;POINT TO FIRST TASK IN TASK LIST>70$: MOV T.TCBL(R1),-(SP) ;PUSH POINTER TO NEXT INSTALLED TASK* BEQ 80$ ;IF EQ CURRENT TASK IS NULL TASK TST T.STAT(R1) ;TASK ACTIVE?E BMI 80$ ;IF MI NON* CMP T.UCB(R1),R5 ;OFFSPRING OF THIS UNIT? BNE 80$ ;IF NE NON4 BIT #T3.PRV!T3.SLV,T.ST3(R1) ;NO ABORT BECAUSE TASK ;PRIVILEGED OR SLAVE?S BNE 80$ ;IF NE YES' TSTB T.ST2(R1) ;TASK ALREADY EXITTING?  BMI 80$ ;IF MI YES$ MOV #S.CELV,R0 ;SET TKTN ABORT CODE CALL $ABTSK ;ABORT THE TASKV/80$: MOV (SP)+,R1 ;RESTORE POINTER TO NEXT TASK: BNE 70$ ;IF NE THERE IS ONEN/85$: CLR U.PTCB(R5) ;MARK UNIT FOR DEALLOCATIONE0 MOV $TKTCB,R3 ;PICK UP CURRENT TASK TCB ADDRESS, DEC T.RDCT(R3) ;REDUCE TASK'S RUNDOWN COUNT# CLR R1 ;SET STATUS TO REQUEST BYE  MOV R5,R2 ;SET UCB ADDRESS" CALL $QCNTP ;QUEUE A BYE COMMAND$ BEQ 90$ ;IF CC-Z SET THEN NO ERROR5 SUB #2,$UMPC ;BACKUP USER PC TO RE-EXECUTE DIRECTIVEI2 CALLR $TKWSE ;FORCE TASK INTO WAIT FOR SIG EVENT/90$: MOV U.RPKT(R5),R0 ;GET INPUT (READ) PACKET+- BIS U.WPKT(R5),R0 ;GET OUTPUT (WRITE) PACKETI! BNE 160$ ;IF NE I/O IN PROGRESS(3 BICB #US.BSY,U.STS(R5) ;MAKE SURE UNIT IS NOT BUSYK, CALLR $IOKIL ;INSURE PROPAGATION OF DRIVER D;+,; **-$DEAVT-DEALLOCATE VIRTUAL TERMINAL UNIT;UB; THIS ROUTINE UNLINKS THE SPECIFIED VIRTUAL TERMINAL UNIT CONTROL4; BLOCKS FROM THE DEVICE LISTS AND DEALLOCATES THEM.;P ; INPUTS:S;P7; R0=ADDRESS OF VIRTUAL TERMINAL UNIT UCB TO DEALLOCATET;A ; OUTPUTS:;T8; THE VIRTUAL TERMINAL UNIT IS UNLINKED AND DEALLOCATED.;- 5;$DEAVT::MOV (R0),R0 ;POINT TO VIRTUAL TERMINAL DCB (U.DCB)O S;+; ** W A R N I N G ** ;K; SPM HOOKPOINT NUMBER 24.;R); DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;-+$SPH24==. ;SPM CHANGES THE INSTRUCTION ATS ;THE LOCATION OF THIS LABELN4 MOV #$VTDCB,R1 ;POINT TO FIRST VIRTUAL TERMINAL DCB(100$: CMP (R1),R0 ;NEXT UNIT SPECIFIED? BEQ 110$ ;IF EQ YES 1 MOV (R1),R1 ;POINT TO NEXT VIRTUAL TERMINAL DCBE BR 100$ ;S110$: MOV (R0),(R1) ;UNLINK DCB5 .IF DF C$$RTK ;REMOTE TASKSV U, BIT #F5.RTK,$FMSK5 ;REMOTE TASKS TURNED ON? BEQ 115$ ;IF EQ NO% MOV D.UCB(R0),R3 ;GET ADDRESS OF UCB " MOV U.RAS00gdddT(R3),KISAR6 ;MAP PACKET/ CLR U.RAST(R3) ;GET RID OF REFERENCE TO PACKETG MOV #MAP6,R3 ;POINT TO PACKET0 MOVB #HT$DSB,H$TYPE(R3) ;DELETE SUBPROCESS TYPE MOV R0,R5 ;SAVE R0 CPSEN$ #SF$IRT,KISAR6,#H$SIZE MOV R5,R0 ;RESTORE R0 115$:  .ENDC ;C$$RTK. MOV #D$LGTH+U$LGTH,R1 ;SET SIZE TO DEALLOCATE* CALLR $DEACB ;DEALLOCATE DATA STRUCTURES D;+,; **-$CVTLN-CLEAR VIRTUAL TERMINAL LUN WORDS;MD; THIS ROUTINE IS CALLED TO CLEAR (DEASSIGN) ANY LUN ENTRIES FOR THEA; CURRENT TASK WHICH POINT TO THE SPECIFIED VIRTUAL TERMINAL UCB. ;T ; INPUTS:E;C!; R0=VIRTUAL TERMINAL UCB ADDRESST;A ; OUTPUTS:;$; R0 AND R3 ARE PRESERVED.;- Y$CVTLN:: .IF DF X$$HDR, MOV KISAR6,-(SP) ;SAVE CURRENT APR6 MAPPING/ MOV $SAHDB,KISAR6 ;MAP NONRESIDENT TASK HEADERH .ENDC ; DF X$$HDR" MOV $SAHPT,R1 ;GET HEADER ADDRESS7 ADD #H.NLUN,R1 ;POINT TO NUMBER OF LUNS WORD IN HEADERM% MOV (R1)+,R2 ;PICK UP NUMBER OF LUNSA120$: DEC R2 ;ANY MORE LUNS?N BLT 150$ ;IF LT NO0 CMP (R1),R0 ;LUN ASSIGNED TO ELIMINATING UNIT? BNE 130$ ;IF NE NO CLR (R1) ;DEASSIGN LUN(130$: CMP (R1)+,(R1)+ ;POINT TO NEXT LUN BR 120$ ;R150$: ;REFERENCE LABELN .IF DF X$$HDR' MOV (SP)+,KISAR6 ;RESTORE APR6 MAPPINGM .ENDC160$: RETURN ; O .ENDC A H .END .ENDC ; DF X$$HDR" MOV $SAHPT,R1 ;GET HEADER ADDRESS7 ADD #H.NLUN,R1 ;POINT TO NUMBER OF LUNS WORD IN HEADERM% MOV (R1)+,R2 ;PICK UP NUMBER OF LUNSA120$: DEC R2 ;ANY MORE LUNS?N BLT 150$ ;IF LT NO0 CMP (R1),R0 ;LUN .TITLE DRDARI .IDENT /04/ F; ; COPYRIGHT (C) 1974, 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.P;5A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDA9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.E; ; VERSION 04;O; D. N. CUTLER 30-AUG-73;O; PREVIOUSLY MODIFIED BY:D;.; T. J. MILLER;U; MODIFIED BY:;N; T. J. MILLER 14-AUG-77; ;; TM099 -- REMOVE UNEEDED CONDITIONALIZATION FOR RSX-11M+. ;F+; DISABLE/ENABLE AST RECOGNITION DIRECTIVESL;R; MACRO LIBRARY CALLS; .MCALL TCBDF$, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+#; **-$DRDAR-DISABLE AST RECOGNITIONF;IL; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO DISABLE RECOGNITION OF ASYNCHRONOUSK; SYSTEM TRAPS FOR THE ISSUING TASK. FURTHER AST'S ARE QUEUED AS THEY OCCUR7; AND WILL BE EFFECTED WHEN AST RECOGNITION IS ENABLED.I;D ; DPB FORMAT:J;I"; WD. 00 -- DIC(99.),DPB SIZE(1.).;U ; INPUTS:I;N9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.I+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.L,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;O5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;B-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.F&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE REJECTED.8; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST RECOG-; NITION IS ALREADY DISABLED.9;- . .ENABL LSBS;$DRDAR::BIT #T2.DST,(R2) ;AST RECOGNITION ALREADY DISABLED?A BNE 10$ ;IF NE YES* BIS #T2.DST,(R2) ;DISABLE AST RECOGNITION( RETURN ;RETURN DIRECTIVE STATUS OF +1;+"; **-$DREAR-ENABLE AST RECOGNITION; G; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO RECOGNIZE ASYNCHORONOUS SYSTEMIJ; TRAPS FOR THE ISSUING TASK. AST'S THAT HAVE BEEN QUEUED WHILE AST RECOG-/; NITION WAS DISABLED ARE EFFECTED IMMEDIATELY.';S ; DPB FORMAT:I;S#; WD. 00 -- DIC(101.),DPB SIZE(1.).L;9 ; INPUTS: ;.9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.L+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.#/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.R,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;N5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)E;S-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.I8; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST RECOG-; NITION IS NOT DISABLED..;-3$DREAR::BIT #T2.DST,(R2) ;AST RECOGNITION DISABLED?A BEQ 10$ ;IF EQ NO ) BIC #T2.DST,(R2) ;ENABLE AST RECOGNIT00ddcDATADATADATADATADATADATADATAIONR2 CALLR $SETRT ;FORCE A REDISPATCHING OF PROCESSOR'10$: DRSTS D.RS8 ;SET DIRECTIVE STATUSF .DSABL LSBT  .END: (DIRECTIVE STATUS AND PS RETURNED TO TASK)E;S-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.I8; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST RECOG-; NITION IS NOT DISABLED..;-3$DREAR::BIT #T2.DST,(R2) ;AST RECOGNITION DISABLED?A BEQ 10$ ;IF EQ NO ) BIC #T2.DST,(R2) ;ENABLE AST RECOGNIT .TITLE DRDCPE .IDENT /05/ I;T ; COPYRIGHT (C) 1974, 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDR9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.+;S ; VERSION 05; ; D. N. CUTLER 5-SEP-73I; ; PREVIOUSLY MODIFIED BY:'; ; T. J. MILLER;O; MODIFIED BY:;O; T. J. MILLER 6-JUN-77R;I7; TM088 -- CLEAR CHECKPOINT PCB WORD ON DISABLE CHECK- ; POINTING.2;T; T. J. MILLER 14-AUG-77;.;; TM099 -- REMOVE UNEEDED CONDITIONALIZATION FOR RSX-11M+.8;9; T. J. MILLER 7-FEB-78O;R); TM122 -- DISABLE CHECKPOINTING IN PCB. ;F); DISABLE/ENABLE CHECKPOINTING DIRECTIVESE;; MACRO LIBRARY CALLSC;I .MCALL TCBDF$, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+!; **-$DRDCP-DISABLE CHECKPOINTING ;'F; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO DISABLE THE CHECKPOINTABILITY; OF THE ISSUING TASK.;P ; DPB FORMAT:N;S"; WD. 00 -- DIC(95.),DPB SIZE(1.).;J ; INPUTS:-;-9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.S+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.I,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R6; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK).;A-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.A&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.T;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF CHECKPOINTINGT); IS ALREADY DISABLED FOR ISSUING TASK.:; DIRECTIVE STATUS OF 'D.RS10' IS RETURNED IF THE ISSUING; TASK IS NOT CHECKPOINTABLE.O;- .ENABL LSB .$DRDCP::BIT #T2.CHK,(R2) ;TASK CHECKPOINTABLE? BNE 20$ ;IF NE NOH$ MOV T.PCB(R5),R0 ;POINT TO TASK PCB8 BIT #PS.CHK,P.STAT(R0) ;CHECKPOINTING ALREADY DISABLED? BNE 30$ ;IF NE YES. BIS #PS.CHK,P.STAT(R0) ;DISABLE CHECKPOINTING  .IF DF C$$INT ' CLR P.DPCB(R0) ;CLEAR DISK PCB ADDRESSI  .ENDC ,10$: RETURN ;RETURN DIRECTIVE STATUS OF +1(20$: DRSTS D.RS10 ;SET DIRECTIVE STATUS;+ ; **-$DRECP-ENABLE CHECKPOINTING;:E; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ENABLE THE CHECKPOINTABILITYB; OF THE ISSUING TASK.; ; DPB FORMAT:S;("; WD. 00 -- DIC(97.),DPB SIZE(1.).;B ; INPUTS: ;Y9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. +; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)S;R-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.N&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.H;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF CHECKPOINTINGT; IS ALREADY ENABLED.7;-1$DRECP::BIT #T2.CHK,(R2) ;IS TASK CHECKPOINTABLE?  BNE 30$ ;IF NE NOH$ MOV T.PCB(R5),R0 ;POINT TO TASK PCB0 BIT #PS.CHK,P.STAT(R0) ;CHECKPOINTING DISABLED? BEQ 30$ ;IF EQ YES  5 .IF DF C$$INT 1 TST P.DPCB(R0) ;IS TASK CONNECTED TO INTERRUPTS?T' BNE 30$ ;IF NE YES, CANNOT ENABLE CKPF R .ENDC U S- BIC #PS.CHK,P.STAT(R0) ;ENABLE CHECKPOINTINGS/ CALLR $NXTSK ;REASSIGN PARTITION IF NECESSARYD'30$: DRSTS D.RS8 ;SET DIRECTIVE STATUS .DSABL LSBT R .ENDABLED.7;-1$DRECP::BIT #T2.CHK,(R2) ;IS TASK CHECKPOINTABLE?  BNE 30$ ;IF NE NOH$ MOV T.PCB(R5),R0 ;POINT TO TASK PCB0 BIT #PS.CHK,P.STAT(R0) ;CHECKPOINTING DISABLED? BEQ 30$ ;IF EQ YES  5 .IF DF C$$INT 1 TST P.DPCB(R0) ;IS TASK CONNECTED TO 00;ddd .TITLE DRDRV  .IDENT /14.03/T; 6; COPYRIGHT (C) 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;D<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;.; P. J. BEZEREDI 19-SEP-79;O$; MODIFIED FOR RSX-11M-PLUS V2.1 BY:; ; P.J. BEZEREDIR ; P.J. CARRS ; J. GALLANT;U; MODIFIED BY:; ; C. SESTOKAS 22-FEB-84 14.01 ; 0; CS001 -- HCRC ERROR RECOVERY - R1 NOT SETUP (; IN DROFF ROUTINE MODIFIES LOWCORE.;; L. KOGAN 17-APR-84 14.02;I9; LK001 -- CORRECT THE PROBLEM WITH ENTERING MEANINGLESSS ; ENTRIES INTO ERROR LOG FILE;R; B. S. MCCARTHY 6-AUG-85 14.03 ;D/; BM368 -- ADD CONDITIONAL SKIP OF FIRST DRIVEF!; NOT READY ERROR FOR POWERFAILI;-;-;;; RH11/RH70-RM02/RM03/RM05/RM80/RP07 OVERLAPPED SEEK DRIVERR;  .MCALL HWDDF$,PKTDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;O,; DEVICE REGISTER AND STATUS BIT DEFINITIONS;E%RMCS1=0 ;CONTROL STATUS REGISTER 1-IE=100 ;INTERRUPT ENABLECTRE=40000 ;TRANSFER ERRORE*MCPE=20000 ;MASSBUS CONTROL PARITY ERROR#DVA=4000 ;DRIVE AVAILABLE TO PORT RMWC=2 ;WORD COUNT REGISTER"RMBA=4 ;BUFFER ADDRESS REGISTER(RMDA=6 ;DESIRED TRACK/SECTOR REGISTER%RMCS2=10 ;CONTROL STATUS REGISTER 2KDLT=100000 ;DATA LATE ERRORTWCE=40000 ;WRITE CHECK ERROR UPE=20000 ;UNIBUS PARITY ERROR#NED=10000 ;NONEXISTENT DISK ERRORE$NEM=4000 ;NONEXISTENT MEMORY ERRORPGE=2000 ;PROGRAMMING ERRORE!MXF=1000 ;MISSED TRANSFER ERRORC%MDPE=400 ;MASSBUS DATA PARITY ERROR0!RMDS=12 ;DRIVE STATUS REGISTERVERR=40000 ;ERROR SUMMARY BIT$PIP=20000 ;POSITIONING IN PROGRESSMOL=10000 ;MEDIUM ONLINEWRL=4000 ;WRITE LOCKED DRIVE$PGM=1000 ;PROGRAMMABLE PORT SELECT!DPR=400 ;DRIVE PRESENT ON PORT DRY=200 ;DRIVE READY0VV=100 ;VOLUME VALIDOM=1 ;OFFSET MODE ACTIVER"RMER1=14 ;ERROR SUMMARY REGISTERDCK=100000 ;DATA CHECK ERRORUNS=40000 ;DRIVE UNSAFEN!OPI=20000 ;OPERATION INCOMPLETEEDTE=10000 ;DRIVE TIMING ERRORAWLE=4000 ;WRITE LOCK ERROR IAE=2000 ;INVALID DISK ADDRESSAOE=1000 ;ADDRESS OVERFLOWHCRC=400 ;HEADER CRC ERROR HCE=200 ;HEADER COMPARE ERRORECH=100 ;ECC HARD ERRORWCF=40 ;WRITE CLOCK FAILUREFER=20 ;FORMAT ERRORR#PAR=10 ;CONTROL BUS PARITY ERRORD!RMR=4 ;REGISTER MODIFY REFUSED ILR=2 ;ILLEGAL REGISTERILF=1 ;ILLEGAL FUNCTION&RMAS=16 ;ATTENTION SUMMARY REGISTER RMDBR=22 ;DATA BUFFER REGISTER RMMR=24 ;MAINTENANCE REGISTERRMDT=26 ;DRIVE TYPE REGISTER0!RMOF=32 ;DRIVE OFFSET REGISTERNCMOD=100000 ;COMMAND MODIFIERR"MTD=40000 ;MOVE TRACK DESCRIPTOR FMT16=10000 ;FORMAT (1=16 BIT)ECI=4000 ;ECC INHIBITA"HCI=2000 ;HEADER COMPARE INHIBIT&SSEI=1000 ;SKIP SECTOR ERROR INHIBIT%RMDC=34 ;DESIREDED CYLINDER NUMBERI#RMCC=36 ;CURRENT CYLINDER NUMBERARMER2=42 ;ERROR REGISTER 2BSE=100000 ;BAD SECTOR ERROR"SKI=40000 ;SEEK INCOMPLERE ERROR"IVC=10000 ;INVALID COMMAND ERROR&LSC=4000 ;LOSS OF SECTOR CLOCK ERROR#LBC=2000 ;LOSS OF BIT CLOCK ERRORGDVC=200 ;DEVICE CHECK ERRORSSE=40 ;SKIP SECTOR ERROR$DPE=10 ;MASSBUS DATA PARITY ERROR!RMEC1=44 ;ECC POSITION REGISTERA RMEC2=46 ;ECC PATTERN REGISTER;S; LOCAL EQUATED SYMBOLSR;I,XCT=1 ;FUNCTION HAS BEEN EXECUTED (1=YES)'ERL=2 ;ERROR HAS BEEN LOGGED (1=YES)%ADR=10 ;ADDRESS BITS SETUP (1=YES)0'SEL=20 ;PORT SELECT WAIT (1=WAITING)EOFA=100 ;OFFSET ACTIVE FLAG(RETRY=8. ;CONTROLLER ERROR RETRY COUNT;T ; LOCAL DATA;B.DELTA: .WORD 3 ;ROTATIONAL OPTIMIZATION DELTA;C=; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLER NUMBER)T;A7RTTBL: .BLKW R$$M11 ;RETRY COUNT FOR CURRENT OPERATION 5OFFAD: .BLKW R$$M11 ;ADDRESS OF CURRENT OFFSET VALUE0DGTBL: .BLKW R$$M11 ;DIAGNOSTIC PARAMETER TABLE=PRMSV: .BLKW R$$M11*5 ;PARAMETER SAVE AREA FOR ERROR RECOVERYB ;AND WRITE CHECK&SAVWC: .BLKW R$$M11 ;SAVED WORD00;ddcDATADATADATADATADATADATADATA COUNT=DLTWC: .BLKW R$$M11 ;SAVED WORD COUNT FOR DATA LATE RECOVERYT.$DROPT::.REPT R$$M11 ;SEEK OPTIMIZATION TABLE/ .WORD 1 ;0=IMPLIED SEEK; 1=ALWAYS SEEK FIRSTO .ENDR;A ; OFFSET POSITIONING VALUE TABLE;R"OFFTB: .WORD FMT16!0 ;PLUS OFFSET .WORD FMT16!200 ;MINUS OFFSET .WORD 0 ;$;;; DIAGNOSTIC FUNCTION TABLEU;$FUNTBL: .BYTE 107, IO.HMS!IQ.UMD&377 .BYTE 105, IO.BLS!IQ.UMD&377  .BYTE 115, IO.OFF!IQ.UMD&377R$FUNTB: .BYTE 135, IO.DGN!IQ.UMD&377 .BYTE 151, IO.WCK!IQ.UMD&377T$FUNTB1: .BYTE 171, IO.RPD!IQ.UMD&377 .BYTE 161, IO.WPD!IQ.UMD&377O .BYTE 171, IO.CER!IQ.UMD&377A .BYTE 161, IO.CEW!IQ.UMD&377D$FUNTB2: .BYTE 173, IO.RDH!IQ.UMD&377 .BYTE 163, IO.WDH!IQ.UMD&377E .BYTE 175, IO.RTD!IQ.UMD&3776 .BYTE 165, IO.WTD!IQ.UMD&3772$FUNTB3: .BYTE 165, IO.TDD!IQ.UMD&377FUNTBE:T;N; DRIVER DISPATCH TABLEL;B2 DDT$ DR,R$$M11,,,,,,OPT ;GENERATE DISPATCH TABLE;+7; **-DRINI-RH11/RH70-RM02/RM03/RM05/RM80/RP07 DISK PACK!; CONTROLLER INITIATOR;WE; THIS IS THE DRIVER ENTRY POINT FROM THE QUEUE I/O DIRECTIVE WHEH ANDE; I/O REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO&F; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED UNIT IS NOTF; BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSEG; A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT SUCCEEDS,LE; THEN THE NEXT I/O OPERATION IS INITIATED AND A RETURN TO THE CALLERD; IS EXECUTED.;/ ; INPUTS:M;R6; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIALIZED.;R ; OUTPUTS:;TA; IF THE SPECIFIED UNIT IS NOT BUSY AND AN I/O REQUEST IS WAITING A; TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-O; ATION IS INITIATED.E;-7DRINI: GTPKT$ DR,R$$M11 ;GET NEXT I/O PACKET TO PROCESSE;E1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:I;X'; R1=ADDRESS OF THE I/O REQUEST PACKET.L-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.D; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.A6; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIALIZED.;P=; RH11/RH70-RM02/03/RP07 DISK PACK I/O REQUEST PACKET FORMAT:T; "; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK. @; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.5; WD. 04 -- FIRST LUN WORD IN REQUESTORS TASK HEADER.K; WD. 05 -- I/O FUNCTION CODE.0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.=; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT + 140000).M3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.A; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER.V+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.T-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED. <; WD. 15 -- DIAGNOSTIC SUPPLIMENTAL PARAMETER ELSE NOT USED.8; WD. 16 -- BITS <0:7> = HIGH LBN, BITS <8:15> NOT USED.#; WD. 17 -- LOW LBN OF I/O REQUEST.R.; WD. 20 -- RELOCATION BIAS OF REGISTER BLOCK.;; WD. 21 -- REGISTER BLOCK ADDRESS (DISPLACEMENT + 140000).E;(# CLRB U.CW2+1(R5) ;RESET UNIT FLAGSI$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 10$ ;IF CS WE FAILED TST R0 ;TRANSFER FUNCTION? BMI DRRQC ;IF MI YES) JMP DRVV ;PROCESS VOLUME VALID FUNCTION-10$: CALL $IODON ;FINISH I/OR" BR DRINI ;TRY FOR ANOTHER PACKET;A*; REQUEST CONTROLLER FOR PROPER OPERATION.;:0DRRQC: MOV S.KRB(R4),R1 ;GET CURRENT KRB ADDRESS5 BIT #KS.POE,K.STS(R1) ;PARALLEL OPERATIONS ENABLED?F BEQ DRRQC1 ;IF EQ NO. MOV S.PKT(R4),R3 ;RETRIEVE I/O PACKET ADDRESS* BITB #IQ.Q,I.FCN(R3) ; EXPRESS FUNCTION ? BNE DRRQC1 ; IF NE YES. BITB #IQ.UMD,I.FCN(R3) ; DIAGNOSTIC REQUEST ? BNE 20$ ; IF NE YEST- MOVB K.CON(R1),R3 ;RETREIVE CONTROLLER INDEXS# TST $DROPT(R3) ;WHICH SEEK METHOD?I" BNE 10$ ;IF NE ALWAYS SEEK FIRST3 BIT #KS.DIP,K.STS(R1) ;DATA TRANSFER IN PROGRESS?E+ BEQ DRRQC1 ;IF EQ NO, START DATA TRANSFERT210$: BISB #S3.SIP,S.ST3(R4) ;SET SEEK IN PROGRESS6 CALL $RQCNC ;REQUEST CONTROLLER FOR CONTROL FUNCTION JMP DRINIO ; INITIATE I/OK320$: MOV00;ddd #FUNTBL,R0 ; GET ADDRESS OF FUNCTION TABLE?)25$: TSTB (R0)+ ; BYPASS CONTROLLER CODE.+ CMPB (R0)+,I.FCN(R3) ; FUNCTION CODE MATCHF BEQ 30$ ; IF EQ YES1" CMP #FUNTB,R0 ; AT END OF TABLE ? BNE 25$ ; IF NE NO, BR DRRQC1 ; YES - NORMAL TRANSFER FUNCTION.30$: TSTB -(R0) ; POINT BACK TO FUNCTION CODE, MOVB -(R0),U.BUF(R5) ; LOAD CONTROLLER CODE BR 10$ ; TREAT AS A SEEK ;DRRQC1: BICB #S3.SIP,S.ST3(R4) ;SET SEEK ALREADY COMPLETEDL3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFERK;: ; **-DRUBMP-SETUP UNIBUS ADDRESS;T>; THIS SECTION OF CODE WILL DETERMINE IF THE UNIBUS ADDRESS IS@; ALREADY IN THE FORMAT FOR THE MASSBUS CONTROLLER OR THE UNIBUS<; MAP FOR 22-BIT PROCESSORS WITHOUT RH CONTROLLERS. IT WILLA; ALSO CONVERT THE I/O FUNCTION CODE TO IT'S HARDWARE EQUIVALENT. ;F>; NOTE: AT THIS POINT THE REQUESTING UNIT MUST BE THE OWNER OF%; THE CONTROLLER FOR A DATA TRANSFER.#;S.DRUBMP: MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESS2 BITB #ADR,U.CW2+1(R5);ADDRESS BITS ALREADY SETUP? BNE DRINIO ;IF NE YESS/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?N BEQ 10$ ;IF EQ NOS: BIT #KS.MBC,K.STS(R1) ;YES, IS THIS A 22-BIT CONTROLLER? BNE 20$ ;IF NE YES' CALL $STMAP ;SETUP UNIBUS MAP ADDRESS 210$: ASL U.BUF(R5) ;SHIFT BITS <4:5> TO BITS <8:9> ASL U.BUF(R5) ;...T ASL U.BUF(R5) ;...I ASL U.BUF(R5) ;...G/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?A BEQ 20$ ;IF EQ NO% CALL $MPUBM ;MAP UNIBUS TO TRANSFERB:20$: BISB #ADR,U.CW2+1(R5);INDICATE ADDRESS SETUP COMPLETE* MOV S.KRB(R4),R0 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R0),R0 ;RETRIEVE CONTROLLER INDEX . MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS7 MOV I.PRM+6(R1),DGTBL(R0) ;SAVE DIAGNOSTIC PARAMETERSS. MOV #OM,I.PRM+6(R1) ;SET OFFSET MODE INACTIVE; 3; CONVERT I/O FUNCTION CODE TO HARDWARE EQUIVALENT.U;F4 CMPB #IO.HMS/256.,I.FCN+1(R1) ;DIGNOSTIC FUNCTION? BNE 40$ ;IF NE NOA* CALL DRFUN ;TEST FOR DIAGNOSTIC FUNCTION BCC 25$ ;IF CC NOE6 BIS #SSEI,I.PRM+6(R1) ;SET SKIP SECTOR ERROR INHIBIT225$: MOV #FUNTBL,R0 ;GET ADDRESS OF FUNCTION TABLE830$: MOVB (R0)+,U.BUF(R5) ;LOAD CONTROLLER FUNCTION CODE. CMPB (R0)+,I.FCN(R1) ;IS IT THE CORRECT CODE? BEQ 35$ ;IF EQ YES' CMP #FUNTBE,R0 ;END OF FUNCTION TABLE?6 BNE 30$ ;IF NE NO % MOV #IE.IFC&377,R0 ;ILLEGAL FUNCTIOND BR 45$ ;FINISH I/O435$: CMPB #10,U.CW2(R5) ;TEST HI LBN, IS IT AN RP07? BNE 60$ ;IF NE NOI) CMP #FUNTB2,R0 ;IS IT A HEADER FUNCTION?  BLO 60$ ;IF LO NOI/ CMP #FUNTB3,R0 ;IS TRACK DESCRIPTOR DISPLACED?R BNE 60$ ;IF FM NOM3 BIS #MTD,I.PRM+6(R1);SET MOVE TRACK DESCRIPTOR BITV BR 60$ ;040$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION2 MOVB #171,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTION7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION? $ BHIS 50$ ;IF HIS FUNCTION IS LEGAL,45$: MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS, MOVB U.UNIT(R5),RMCS2(R2) ;SELECT THE UNIT JMP DRFIN1 ;FINISH I/O'50$: BEQ 60$ ;IF EQ FUNCTION IS A READO0 MOVB #161,U.BUF(R5) ;SET WRITE LOGICAL FUNCTION+60$: MOV S.KRB(R4),R3 ;RETRIEVE KRB ADDRESS#- MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEX$ MUL #5,R3 ;SETUP AN INDEX INTO ...' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAR& MOV U.BUF(R5),(R3)+ ;SAVE PARAMETERS MOV U.BUF+2(R5),(R3)+ ;... MOV U.CNT(R5),(R3)+ ;... MOV I.PRM+10(R1),(R3)+ ;... MOV I.PRM+12(R1),(R3)+ ;...E;A%; **-DRINIO-INITIATE AN I/O OPERATIONL; E; THIS ROUTINE WILL INITIATE EITHER A SEEK OR THE DATA TRANSFER OPER-R6; ATION DEPENDING ON HOW THE CONTROLLER WAS REQUESTED.;: ; INPUTS:R;R; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB.;C*DRINIO: MOV @S.KRB(R4),R2 ;GET CSR ADDRESS) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSE( MOVB U.UNIT(R5),RMCS2(R2) ;SELECT UNIT;S9; DETERMINE IF DRIVE'S PORT IS SEIZED BY THIS CONTROLLER.;V' MTPS #PR5 ;EXECUTE AT DEVICE PRIORITY(+ CLR RMDS(R2) ;;;ATTEMPT TO SEIZE THE DRIVEA* BIT #DPR,RMDS(R2) ;;;DID THE DRIVE SEIZE? BNE 5$ ;;;IF NE YES 2 BISB #SEL,U.CW2+1(R5);;;SET PORT SELECT WAIT FLAG/ MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNT$ CLR S.FRK+2(R00;edcDATADATADATADATADATADATADATA4) ;;;ALLOW INTERRUPTS& MOVB #IE,(R2) ;;;RE-ENABLE INTERRUPTS MTPS #0 ;;;ALLOW INTERRUPTSP* CALLR $RLCN ;RELEASE CONTROLLER AND EXIT;T1; CHECK IF THE HEADS ARE ON THE CORRECT CYLINDER.I;S*5$: MOVB #111,(R2) ;;;CLEAR SELECTED DRIVE0 BITB #S3.SIP,S.ST3(R4) ;;;ARE WE DOING A SEEK? BEQ 10$ ;;;IF EQ NO 1 BITB #IQ.UMD,I.FCN(R1) ;;; DIAGNOSTIC FUNCTION ?Z BNE 20$ ;;; IF NE YES . BIT #40,RMDT(R2) ;;;IS THIS AN RM02/03/05/80?& BEQ 20$ ;;;IF EQ YES, IT HAS NO RMCC2 CMP RMCC(R2),I.PRM+10(R1) ;;;DO WE NEED TO SEEK? BNE 20$ ;;;IF NE YES MTPS #0 ;ALLOW INTERRUPTS;# JMP DRRQC1 ;GO REQUEST CONTROLLERL;E.; LOAD CONTROLLER REGISTERS FOR DATA TRANSFER.;O210$: ADD #RMCS2,R2 ;;;POINT TO SECOND CSR REGISTER7 MOV I.PRM+12(R1),-(R2) ;;;INSERT TRACK/SECTOR ADDRESSD0 MOV U.BUF+2(R5),-(R2) ;;;INSERT BUFFER ADDRESS: MOV U.CNT(R5),-(R2) ;;;INSERT NUMBER OF BYTES TO TRANSFER# ROR (R2) ;;;CONVERT TO WORD COUNT & NEG (R2) ;;;MAKE NEGATIVE WORD COUNT" TST -(R2) ;;;POINT BACK TO RMCS15 CMP #IO.DGN!IQ.UMD,I.FCN(R1) ;;;DIAGNOSE MICROCODE? BNE 20$ ;;;IF NE NOU, MOV S.KRB(R4),R0 ;;;GET CURRENT KRB ADDRESS0 MOVB K.CON(R0),R0 ;;;RETRIEVE CONTROLLER NUMBER3 MOV DGTBL(R0),RMMR(R2) ;;;SET DIAGNOSE PARAMETERSR;M'; CHECK FOR DRIVE NOT READY CONDITIONS.C; 120$: MOV #IE.DNR&377,R0 ;;;ASSUME DRIVE NOT READYA; MOV I.PRM+10(R1),RMDC(R2) ;;;SET DESIRED CYLINDER ADDRESSN, MOV RMDS(R2),R3 ;;;GET CURRENT DRIVE STATUS COM R3 ;;;COMPLEMENT STATUSC, BIT #MOL!DRY,R3 ;;;DRIVE READY AND ON LINE? BNE 30$ ;;;IF NE NO1$ BIT #UNS,RMER1(R2) ;;;DRIVE UNSAFE? BEQ 70$ ;;;IF EQ NOB!30$: MTPS #0 ;;;ALLOW INTERRUPTS/ BITB #US.SPU,U.STS(R5) ;IS DRIVE SPINNING UP? BEQ 50$ ;IF EQ NO25 BITB #US.VV,U.STS(R5);WAS VOLUME PREVIOUSLY MOUNTED?O BEQ 35$ ;IF EQ NO) JMP DRPWF0 ;YES, WAIT FOR IT TO SPIN UP &35$: JMP DRPWF1 ;WAIT JUST 15 SECONDS350$: BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC OPERATION?; BEQ 60$ ;IF EQ NOT+ JMP DRDIAG ;PASS REGISTERS AND FINISH I/O!60$: ;REFERENCE LABEL .IF DF S2.NRD6 BIT #S2.NRD,S.ST2(R4) ;IS THIS FIRST DRIVE NOT READY?! BNE 61$ ;IF NE NO, GO LOG ERROR;6 BIS #S2.NRD,S.ST2(R4) ;INDICATE FIRST DRIVE NOT READY JMP DRPWF1 ;GO DO A RETRYQ761$: BIC #S2.NRD,S.ST2(R4) ;CLEAR FIRST DRIVE NOT READYD .ENDC ; DF S2.NRD( CALL $DVERR ;LOG DRIVE NOT READY ERROR JMP DRFIN1 ;FINISH I/O370$: BIT #VV,R3 ;;;DID VOLUME VALID STATUS CHANGE?O1 BEQ 75$ ;;;IF EQ NO (NOTE REVERSE STATUS OF VV) 0 BITB #US.SPU,U.STS(R5) ;;;DID WE JUST SPIN UP? BEQ 30$ ;;;IF EQ NON* MOVB #123,(R2) ;;;YES, RESET VOLUME VALID2 BISB #US.VV,U.STS(R5);;;SET SOFTWARE VOLUME VALID375$: BIT #S2.MAD,S.ST2(R4) ;;;MULTI-ACCESS DEVICE?A BEQ 90$ ;;;IF EQ NO . CMP S.KRB(R4),S.KTB(R4) ;;;IS THIS PORT 'A'? BNE 80$ ;;;IF NE NO.0 BICB #S3.SPA,S.ST3(R4) ;;;YES, SHOW IT SPUN UP BR 85$ ;;;380$: BICB #S3.SPB,S.ST3(R4) ;;;IT MUST BE PORT 'B'E385$: BITB #S3.SPU,S.ST3(R4) ;;;BOTH PORTS SPUN UP?E BNE 95$ ;;;IF NE NOB; $; PREPARE TO START AN I/O OPERATION.;?790$: BICB #US.SPU,U.STS(R5) ;;;RESET DRIVE SPINNING UPO+95$: CLR S.FRK+2(R4) ;;;INIT FORK INTERLOCKW/ MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNTM- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVEC5 BISB #XCT,U.CW2+1(R5);;;SHOW FUNCTION BEING EXECUTED 0 BITB #S3.SIP,S.ST3(R4) ;;;SHOULD WE DO A SEEK? BEQ 105$ ;;;IF EQ NO;; START EXPLICIT SEEK.; 1 BITB #IQ.UMD,I.FCN(R1) ;;; DIAGNOSTIC FUNCTION ?4 BEQ 99$ ;;; IF EQ NO2 MOVB U.BUF(R5),(R2) ;;; LOAD POSITIONING FUNCTION BR 101$ ;;;.,99$: MOVB U.PRM(R5),R3 ;;; GET SECTORS/TRACK CLR -(SP) ;;;CLEAR A WORDF6 MOVB I.PRM+12(R1),(SP) ;;;GET DESIRED SECTOR ADDRESS, SUB DELTA,(SP) ;;;SUBTRACT ROTATIONAL DELTA% BPL 100$ ;;;IF PL ADJUSTMENT WAS OKT/ ADD R3,(SP) ;;;CORRECT ADJUSTMENT IF NEGATIVET;100$: MOVB I.PRM+13(R1),1(SP) ;;;SET DESIRED TRACK ADDRESSF9 MOV (SP)+,RMDA(R2) ;;;LOAD ADJUSTED TRACK/SECTOR ADDRESS(+ MOVB #131,(R2) ;;;LOAD THE SEARCH FUNCTION #101$: MTPS #0 ;;; ALLOW INTERRUPTSA( BR DRPWF3 ;RELEASE CONTROLLER AND EXIT;M; START DATA00; edd TRANSFER.;C(105$: MOV #FMT16,-(SP) ;;;GET FORMAT BIT# BIT #40,RMDT(R5) ;;;IS IT AN RP07?E BNE 106$ ;;;IF NE YESL* BIT #OM,I.PRM+6(R1) ;;;WAS OFFSET ACTIVE? BNE 106$ ;;;IF NE NO, MOVB #115,(R2) ;;;YES, LOAD OFFSET FUNCTION0106$: BIS I.PRM+6(R1),(SP);;;SET OTHER RMOF BITS/ MOV (SP)+,RMOF(R2) ;;;LOAD THE OFFSET REGISTERL, MOV S.KRB(R4),R3 ;;;GET CURRENT KRB ADDRESS7 BIT #IQ.UMD,I.FCN(R1) ;;;IS IT A DIAGNOSTIC FUNCTION?L BEQ 107$ ;;;IF EQ NO2 CMPB U.BUF(R5),#140 ;;;IS IT A UMD SEEK FUNCTION? BLO 108$ ;;;IF LO YESF=107$: BIS #KS.DIP,K.STS(R3) ;;;SET DATA TRANSFER IN PROGRESS71 BIT #FE.EXT,$FMASK ;;;22-BIT ADDRESSING ENABLED?; BEQ 110$ ;;;IF EQ NO7 BIT #KS.MBC,K.STS(R3) ;;;IS THIS A 22-BIT CONTROLLER?  BEQ 110$ ;;;IF EQ NO MOV R3,R1 ;;;COPY KRB ADDRESSS' ADD K.OFF(R3),R1 ;;;POINT TO UCB TABLER+ MOV KE.RHB(R1),R1 ;;;RETREIVE RHBAE OFFSETB' ADD R2,R1 ;;;FORM AN I/O PAGE ADDRESST2 MOVB U.BUF+1(R5),(R1);;;SET MEMORY EXTENSION BITS+108$: MOVB U.BUF(R5),(R2) ;;;START FUNCTIONO BR 120$ ;;;;*110$: MOV U.BUF(R5),(R2) ;;;START FUNCTION 120$: MTPS #0 ;ALLOW INTERRUPTS;#<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.; 1DRCAN: RETURN ;NOP FOR RM02/RM03/RM05/RM80/RP07O;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVET?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANYUA; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESS5; THE UNIT IS ALREADY READY.;-3DRPWF: TSTB S.STS(R4) ;IS THIS UNIT CURRENTLY BUSY?I BEQ DRPWF2 ;IF EQ NO9DRPWF0: MOVB #15.,S.STS(R4) ;WAIT A MAXIMUM OF ONE MINUTE/6DRPWF1: MOVB S.ITM(R4),S.CTM(R4) ;4 SECONDS AT A TIME5DRPWF2: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UPH1DRPWF3: CALLR $RLCN ;RELEASE CONTROLLER AND EXITO;+C; **-$DRINT-RH11/RH70-RM02/RM03/RM05/RM80/RP07 DISK PACK CONTROLLER.; INTERRUPT HANDLERT;- .ENABL LSBL3$DRINT::BR DRFRK ;;;ENTRY POINT FOR DATA TRANSFERSS+ TST S.FRK+2(R4) ;;;ARE INTERRUPTS ALLOWED?: BNE DRCAN ;;;IF NE NOU' CALL $FORK ;;;CREATE A SYSTEM PROCESS 6DRFRK: BITB #SEL,U.CW2+1(R5) ;WAITING FOR PORT SELECT BEQ 5$ ;IF EQ NO2 BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT WAIT FLAG, MOV U.SCB(R5),R4 ;YES, RETREIVE SCB ADDRESS. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS JMP DRRQC ;GO TRY AGAIN165$: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXS# MOV @S.KRB(R4),R2 ;GET CSR ADDRESSA( MOVB U.UNIT(R5),RMCS2(R2) ;SELECT UNIT# TSTB S.STS(R4) ;IS THIS UNIT BUSY?R BNE 10$ ;IF NE YES MTPS #PR5 ;DISABLE INTERRUPTSB/ MOV #TRE!11,(R2) ;;;CLEAR CONTROLLER AND DRIVER: BISB #S3.DRL,S.ST3(R4) ;;;SHOW DUAL ACCESS UNIT RELEASED$ MOVB #113,(R2) ;;;RELEASE THE DRIVE( CLR S.FRK+2(R4) ;;;RESET FORK INTERLOCK MTPS #0 ;;;ALLOW INTERRUPTST BR DRPWF3 ;RELEASE CONTROLLERK;R@; INTERRUPT WAS FROM A BUSY UNIT. IF WE JUST DID A SEEK WE WILLA; GO AND START THE DATA TRANSFER OPERATION. IF THE DATA TRANSFER)>; TERMINATED, DETERMINE WHY. IF WE ARE SPINNING UP, RETRY THE ; OPERATION.;Y110$: BITB #US.SPU,U.STS(R5) ;ARE WE SPINNING UP?( BEQ 15$ ;IF EQ NOE- BIT #S2.MAD,S.ST2(R4) ;MULTI-ACCESS DEVICE?D BEQ 12$ ;IF EQ NOS, CMP S.KRB(R4),S.KTB(R4) ;IS THIS PORT 'A'? BNE 14$ ;IF NE NO 2 BITB #S3.SPA,S.ST3(R4) ;IS PORT 'A' SPINNING UP? BEQ 15$ ;IF EQ NOR%12$: CALLR 100$ ;RETRY THE OPERATION 614$: BITB #S3.SPB,S.ST3(R4) ;IS PORT 'B' SPINNING UP? BNE 12$ ;IF NE YES715$: BIT #S2.EIP,S.ST2(R4) ;ERROR ALREADY IN PROGRESS?  BNE 20$ ;IF NE YES& CALL DRPRM ;SET INITIAL RETRY VALUES.20$: MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS/ MOV #IS.SUC&377,R0 ; ASSUME SUCESSFUL TRANSFERC/ BITB #S3.SIP,S.ST3(R4) ; DID WE JUST DO A SEEK) BEQ 30$ ; IF EQ NO0 BICB #S3.SIP,S.ST3(R4) ; CLEAR SEEK IN PROGRESS/ BITB #IQ.UMD,I.FCN(R1) ; DIAGNOSTIC FUNCTION ?Q BEQ 22$ ; IF EQ NO JMP DRDIAG ; IF NE YES122$: BIT00;edcDATADATADATADATADATADATADATA #ERR,RMDS(R2) ; ANY ERRORS DURING SEEK ?? BEQ 12$ ;IF EQ NOS! CALL $DVERR ;LOG THE SEEK ERRORR! DECB RTTBL(R3) ;COUNT THIS RETRYI" CALL DRERL ;FINISH ERROR LOGGING#25$: MTPS #PR5 ;DISABLE INTERRUPTS / MOV #TRE!11,(R2) ;;;CLEAR CONTROLLER AND DRIVEU/ MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNT ( CLR S.FRK+2(R4) ;;;RESET FORK INTERLOCK- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVEG( MOVB #107,(R2) ;;;START THE RECALIBRATE MTPS #0 ;ALLOW INTERRUPTSE RETURN ;D; 5; INTERRUPT WAS DUE TO A DATA TRANSFER OPERATION OR AG; DIAGNOSTIC FUNCTION ;NC30$: BIT #HCRC!HCE,RMER1(R2) ; HEADER CRC OR HEADER COMPARE ERROR ?E BNE 36$ ;IF NE YES' BIT #SSE,RMER2(R2) ;SKIP SECTOR ERROR?B BEQ 36$ ;IF EQ NO#6 BIS #SSEI,I.PRM+6(R1) ;SET SKIP SECTOR ERROR INHIBIT) CALL DRCLR ;CLEAR SELECTED DRIVE ERRORSS( MOV RMOF(R2),-(SP) ;GET OFFSET REGISTER6 BIS I.PRM+6(R1),(SP) ;SET REMAINING BITS IN REGISTER0 MOV (SP)+,RMOF(R2) ;RE-LOAD THE OFFSET REGISTER. MOV RMWC(R2),R0 ;GET NEGATIVE WORDS REMAINING* BNE 32$ ;IF NE WE HAD A PARTIAL TRANSFER% MOV #-1,R0 ;FAKE A PARTIAL TRANSFERE*32$: ASL R0 ;CONVERT IT TO NEGATIVE BYTES6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED- BIC #777,R0 ;GET BLOCKS ACTUALLY TRANSFEREDP* CALL DRFUN ;TEST FOR DIAGNOSTIC FUNCTION BCC 33$ ;IF CC NOE' CMPB #14.,U.PRM+1(R5) ;IS IT AN RM80?G BNE 33$ ;IF NE NOB! INC U.PRM(R5) ;INC SECTORS/TRACK 433$: CALL DRCALC ;BACKUP TO START OF BLOCK IN ERROR& TST U.CNT(R5) ;LAST BLOCK TRANSFERED? BNE 34$ ;IF NE NO, ADD R0,U.CNT(R5) ;YES, NORMALIZE BYTE COUNT.34$: CALL DRFUN ;TEST FOR DIAGNOSTIC FUNCTION BCC 35$ ;IF CC NOA' CMPB #14.,U.PRM+1(R5) ;IS IT AN RM80?B BNE 35$ ;IF NE NOR" DECB U.PRM(R5) ;DEC SECTORS/TRACK BR 12$ ;RESTART FUNCTION535$: INCB I.PRM+12(R1) ;INC TO NEXT SEQUENTIAL SECTORC BR 12$ ;RESTART FUNCTION736$: BIT #SSEI,RMOF(R2) ;SKIP SECTOR ERROR INHIBIT SET?T BNE 37$ ;IF NE YES8 BIC #SSEI,I.PRM+6(R1) ;RESET SKIP SECTOR ERROR INHIBIT.37$: CALL DRFUN ;IS IT DIAGNOSTIC FUNCTION? BCS DRDIAG ;IF CS YESO(38$: BIT #70,(R2) ;RECALIBRATE FUNCTION? BEQ 80$ ;IF EQ YES BIT #TRE!MCPE,(R2) ;ANY ERRORS? BEQ 70$ ;IF EQ NOT. MOV RMWC(R2),R0 ;GET NEGATIVE WORDS REMAINING( MOV R0,SAVWC(R3) ;SAVE IT FOR LATER USE& CLR DLTWC(R3) ;ZERO SAVED DLT WC FLAG TST RMCS2(R2) ;DATA LATE ERROR? BPL 39$ ;IF PL NO:: MOV R0,DLTWC(R3) ;YES, SAVE REAL NEGATIVE WORDS REMAINING* BNE 39$ ;IF NE WE HAD A PARTIAL TRANSFER8 MOV #-1,DLTWC(R3) ;DLT ON LAST WORD, FAKE A PARTIAL XFR'39$: ASL R0 ;CONVERT TO NEGATIVE BYTESE6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED* SUB #512.,R0 ;SUBTRACT OUT BLOCK IN ERROR) BLE 40$ ;IF LE NO GOOD BYTES TRANSFEREDE1 BITB #ERL,U.CW2+1(R5);ERROR ALREADY IN PROGRESS?  BEQ 40$ ;IF EQ NOR;T:; WE GOT AN ERROR BUT SOME GOOD DATA WAS TRANSFERED. THIS6; INDICATES THAT WE RECOVERED FROM THE PREVIOUS ERROR.;A;E<; NOW LOG THE CURRENT ERROR AND DETERMINE WHAT TYPE OF ERROR1; WE HAD. ERRORS ARE BASICLY HARD, SOFT OR DATA.P;I" CALL DRERL ;FINISH ERROR LOGGING#40$: CALL $DVERR ;LOG DEVICE ERRORU, BISB #ERL,U.CW2+1(R5);SET ERROR LOGGED FLAG, MOV #IE.WLK&377,R0 ;ASSUME WRITE LOCK ERROR& BIT #WLE,RMER1(R2) ;WRITE LOCK ERROR? BNE 60$ ;IF NE YES/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERRORG' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?E BNE 60$ ;IF NE YES% TST DLTWC(R3) ;REAL DATA LATE ERROR?R BNE 110$ ;IF NE YES 1 BIT #IVC!LSC!LBC!DVC!DPE,RMER2(R2) ;HARD ERROR? BNE 60$ ;IF NE YES1 MOV RMER1(R2),R1 ;GET CONTENTS OF ERROR REGISTERI. BIT #UNS!IAE!AOE!RMR!ILR!ILF,R1 ;HARD ERROR? BNE 60$ ;IF NE YES$ BIT #NED!NEM,RMCS2(R2) ;HARD ERROR? BNE 60$ ;IF NE YES% BIT #SKI,RMER2(R2) ;SEEK INCOMPLETE?W BNE 55$ ;IF NE YES BIT #HCRC,R1 ;HEADER CRC ERROR? BNE 50$ ;IF NE YES$ BIT #HCE,R1 ;HEADER COMPARE ERROR? BNE 55$ ;IF NE NO6 BIT #FER,R1 ;FORMAT ERROR? BNE 60$ ;IF NE YES8 BIT #WCE!UPE!PGE!MXF!MDPE,RMCS2(R2) ;CONTROLLER ERROR? BNE DRRTRY ;IF NE YESE+ MOV #IE.BBE&377,R0 ;ASSUME BAD BLOCK ERRORE% BIT #BSE,RMER2(R200;edd) ;BAD BLOCK ERROR?O BNE 60$ ;IF NE YES0 MOV #IE.VER&377,R0 ; ASSUME UNRECOVERABLE ERROR%50$: JMP DRECC ;CHECK FOR ECC ERRORSS'55$: JMP 25$ ;TRY RECALIBRATE FUNCTION7DRDIAG: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKB" CALL DRCLR ;CLEAR SELECTED DRIVE60$: JMP DRFIN ;FINISH I/O$*70$: BR DRWCHK ;GO TEST FOR A WRITE CHECK;E ; PROCESS POSITIONING OPERATION.;X380$: MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERRORF. BIT #ERR,RMDS(R2) ;ERRORS DURING POSITIONING? BEQ DRRTRY ;IF EQ NO CALL $DVERR ;LOG IT" CLR R1 ;SHOW NO BYTES TRANSFERED JMP DRFIN1 ;FINISH I/O'100$: CALL DRCLR ;CLEAR SELECTED DRIVEE' CALLR DRUBMP ;RETRY ORIGINAL FUNCTIONN;>; THE TRANSFER WAS STOPPED DUE TO A DATA LATE ERROR CONDITION.>; WE WILL NOW BACKUP THE WORD COUNT, BUS ADDRESS AND CYLINDER/?; TRACK/SECTOR ADDRESS BY ONE BLOCK AND RETRY THE TRANSFER FROMN>; THIS POINT. THIS IS DONE TO PREVENT THE DATA LATE CONDITION(; FROM RECURRING DUE TO A LONG TRANSFER.;I0110$: DECB RTTBL(R3) ;RETRY DATA LATE CONDITION? BLE 60$ ;IF LE NON4 MOV DLTWC(R3),R0 ;GET REAL NEGATIVE WORDS REMAINING# ASL R0 ;CONVERT TO NEGATIVE BYTESL6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED- BIC #777,R0 ;GET BLOCKS ACTUALLY TRANSFEREDO0 CALL DRCALC ;BACKUP TO START OF BLOCK IN ERROR3 TST U.CNT(R5) ;DLT ERROR ON LAST BLOCK TRANSFERED?  BNE 100$ ;IF NE NO, ADD R0,U.CNT(R5) ;YES, NORMALIZE BYTE COUNT BR 100$ ;RESTART THE TRANSFERR .DSABL LSBT;+@; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING REPEATEDC; UNLESS THE OPERATION WAS DIAGNOSTIC. TIMEOUTS ARE USUALLY CAUSEDRC; BY POWERFAILURE BUT MAY ALSO BE THE RESULT OF A HARDWARE FAILURE.L;- .ENABL LSBL7DROUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP?E BEQ 15$ ;;;IF EQ NOU/ BIT #S2.MAD,S.ST2(R4) ;;;MULTI-ACCESS DEVICE?  BEQ 10$ ;;;IF EQ NON. CMP S.KRB(R4),S.KTB(R4) ;;;IS THIS PORT 'A'?) BNE 5$ ;;;IF NE NO, IT MUST BE PORT 'B'S4 BITB #S3.SPA,S.ST3(R4) ;;;IS PORT 'A' SPINNING UP? BNE 10$ ;;;IF NE YES' BR 15$ ;;;TIMEOUT FOR NORMAL FUNCTIONO75$: BITB #S3.SPB,S.ST3(R4) ;;;IS PORT 'B' SPINNING UP? & BEQ 15$ ;;;IF EQ NO, NORMAL FUNCTION110$: DECB S.STS(R4) ;;;HAVE WE WAITED ENOUGH YET?U BEQ 15$ ;;;IF EQ YES MTPS #0 ;;;ALLOW INTERRUPTSB. MOV S.PKT(R4),R3 ;RETREIVE I/O PACKET ADDRESS JMP DRRQC ;RETRY OPERATION,15$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY MTPS #0 ;;;ALLOW INTERRUPTSF3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER ) MOV S.KRB(R4),R2 ;GET CURRENT KRB ADDRSSI- MOVB K.CON(R2),R3 ;RETREIVE CONTROLLER INDEXO MOV (R2),R2 ;GET CSR ADDRESS: MOVB U.UNIT(R5),RMCS2(R2) ;SELECT UNIT FOR ERROR LOGGING! CALL $DVTMO ;LOG DEVICE TIMEOUTV;E>; NOTE: THE FOLLOWING SIX INSTRUCTIONS (AND THE SUBROUTINE) DO4; NOT CHANGE THE C-BIT SETTING RETURNED FROM $DVTMO.;E2 BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT?) BNE DRFIN1 ;IF NE YES, WE DIDN'T GET ITA0 BITB #S3.SIP,S.ST3(R4) ;TIMEOUT DURING A SEEK? BEQ 20$ ;IF EQ NO$ CALL DRPRM ;RESET RETRY PARAMETERS;20$: BICB #S3.SIP,S.ST3(R4) ;ASSUME DATA TRANSFER FUNCTION2- BCS DRDIAG ;IF CS TIMEOUT DURING DIAGNOSTICR4 BITB #US.SPU,U.STS(R5) ;WAS THE DRIVE SPINNING UP? BEQ DRRTRY ;IF EQ NO- MOV #IE.DNR&377,R0 ;YES, SET DRIVE NOT READYU BR DRFIN ;FINISH I/O0DRRTRY: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS< BICB #ERL,U.CW2+1(R5) ;CAN'T CLOSE ERRORS RETRIED FROM BEG' BIT #WCE,RMCS2(R2) ;WRITE CHECK ERROR?. BEQ 25$ ;IF EQ NOU/ MOV #IE.WCK&377,R0 ;YES, SET WRITE CHECK ERRORR+25$: BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?, BNE DRFIN ;IF NE YES DECB RTTBL(R3) ;RETRY FUNCTION? BGT 40$ ;IF GT YES BR DRFIN ;FINISH I/O;.!; TEST FOR WRITE CHECK OPERATION.?;BCDRWCHK: BITB #IO.WLC&377,I.FCN(R1) ;WRITE FOLLOWED BY WRITE CHECK? BNE 30$ ;IF NE YES5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED BY MCR?C BEQ DRFIN ;IF EQ NON330$: CMPB #171,U.BUF(R5) ;WAS LAST FUNCTION A READ?  BEQ DRFIN ;IF EQ YES0 CMPB #161,U.BUF(R5) ;WAS LAST FUNCTION A WRITE? BNE DRFIN ;IF NE NO:0 MOV #RETRY,RTTBL(R3) ;REINITIALIZE RET00;%edcDATADATADATADATADATADATADATARY COUNT" MUL #5,R3 ;SET UP INDEX INTO ...' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAR) MOV (R3)+,U.BUF(R5) ;RESTORE PARAMETERSK MOV (R3)+,U.BUF+2(R5) ;... MOV (R3)+,U.CNT(R5) ;... MOV (R3)+,I.PRM+10(R1) ;...B MOV (R3)+,I.PRM+12(R1) ;...C. MOVB #151,U.BUF(R5) ;SET WRITE CHECK FUNCTION&40$: CALL DRCLR ;CLEAR SELECTED DRIVE/ CALLR DRUBMP ;START THE WRITE CHECK OPERATION .DSABL LSB ;U; **-DRFIN-FINISH I/O OPERATIONT;B; THIS ROUTINE WILL SET THE ACTUAL BYTES TRANSFERED PARAMETER, THEA; ERROR LOGGING RETRY COUNTS AND CALL $IODON. THE SELECTED DRIVEE<; IS RELEASED, IF REQUESTED, AND THE CONTROLLER IS RELEASED.;( ; INPUTS:2;); R0=SUCCESS/ERROR CODER; R2=ADDRESS OF CONTROLER CSR1; R4=ADDRESS OF THE SCBM; R5=ADDRESS OF THE UCB1;B/DRFIN: MOV S.PKT(R4),R3 ;GET I/O PACKET ADDRESS;1 MOV RMWC(R2),R1 ;GET WORDS REMAINING TO TRANSFERT+ ASL R1 ;CONVERT TO BYTES LEFT TO TRANSFERD8 ADD I.PRM+4(R3),R1 ;CALCULATE BYTES ACTUALLY TRANSFERED*DRFIN1: CALL DRCLR1 ;CLEAR SELECTED DRIVE( MOV #TRE,(R2) ;NOW CLEAR THE CONTROLLER2 BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT WAIT FLAG* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS;2); CHECK FOR ATTENTIONS AND RELEASE DRIVE.S; +10$: TSTB RMAS(R2) ;ANY ATTENTIONS PENDING?5 BEQ 20$ ;IF EQ NO0 BISB #IE,(R2) ;RE-DISPATCH TO INTERRUPT HANDLER BR 10$ ;TRY AGAIN1:20$: BITB #S3.NRL,S.ST3(R4) ;SHOULD WE RELEASE THE DRIVE? BEQ 30$ ;IF EQ YES$ MOVB #IE,(R2) ;RE-ENABLE INTERRUPTS BR 40$ ;<30$: BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED7 MOVB #113,(R2) ;RE-ENABLE INTERRUPTS AND RELEASE DRIVEE140$: MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXR/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTR4 BITB #XCT,U.CW2+1(R5);HAS A FUNCTION BEEN EXECUTED? BNE 50$ ;IF NE YES' MOV #RETRY,R2 ;SET MAXIMUM RETRY COUNTO350$: BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTS5 BICB #S3.SIP,S.ST3(R4) ;RESET SEEK IN PROGRESS FLAG$'DRFIN2: CALL $RLCN ;RELEASE CONTROLLERN# CALL $IODON ;FINISH I/O OPERATIONR! JMP DRINI ;PROCESS NEXT REQUEST ;D!; **-DRECC-ATTEMPT ECC CORRECTIONU; D; THIS ROUTINE IS ENTERED IF A DATA ERROR IS DETECTED. IF THE ERRORG; IS CORRECTABLE, THE EXECUTIVE ECC ROUTINE IS CALLED AND THE OPERATION)E; IS RESTARTED FROM WHERE THE CONTROLLER STOPPED. IF OFFSET RECOVERYE; IS REQUIRED, WE WILL DO IT.S;E ; INPUTS: ;R; R1=CONTENTS OF RMER1; R2=ADDRESS OF CONTROLLER CSR; .DRECC: BIT #DCK!DTE!HCRC,R1;CORRECTABLE ERROR? BEQ DRRTRY ;IF EQ NO/ CMPB #171,U.BUF(R5) ;IS THIS A READ OPERATION?N BNE DRRTRY ;IF NE NO4 MOV SAVWC(R3),R0 ;GET NEGATIVE # OF WORDS REMAINING ASL R0 ;CONVERT TO BYTES6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED# BEQ DROFF ;IF EQ NONE, TRY OFFSETT( BIS RMER2(R2),R1 ;.OR. ERROR REGISTER 2% CMP #DCK,R1 ;ONLY DATA CHECK ERROR?S! BNE DROFF ;IF NE NO, TRY OFFSETN7 MOV SAVWC(R3),-(SP) ;PUT REMAINING WORD COUNT ON STACKO, MOV RMEC1(R2),R1 ;GET ECC POSITION REGISTER- MOV RMEC2(R2),R3 ;GET ECC CORRECTION PATTERN ' MOV (SP)+,R2 ;GET REMAINING WORD COUNTN CALL $ECCOR ;DO ECC CORRECTION) CALL DRCLR ;CLEAR SELECTED DRIVE ERRORSG/ CALL DRPRM0 ;RESET OFFSET RECOVERY PARAMETERSC( CALL DRCALC ;RE-CALCULATE DISK ADDRESS5 MOV #IS.SUC&377,R0 ;ASSUME NO MORE WORDS TO TRANSFER + TST U.CNT(R5) ;ANY MORE WORDS TO TRANSFER?E BEQ DRFIN ;IF EQ NO +DRREST: CALLR DRINIO ;RESTART THE TRANSFER;;A"; **-DROFF-ATTEMPT OFFSET RECOVERY;R=; THIS ROUTINE IS CALLED WHENEVER WE NEED TO OFFSET THE HEADSR@; SOME DISTANCE FROM TRACK CENTERLINE TO PROPERLY READ THE DATA.;C ; INPUTS: ;R6; R0=NUMBER OF BYTES ACTUALLY TRANSFERED TO THIS POINT;R5DROFF: BITB #OFA,U.CW2+1(R5) ;OFFSET ALREADY ACTIVE?R BNE 5$ ;IF NE YESE" DECB RTTBL(R3) ;ANY RETRIES LEFT? BGT 5$ ;IF GT YES , MOV #IE.VER&377,R0 ;SET UNRECOVERABLE ERROR JMP DRFIN ;FINISH I/O15$: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESSA TST R0 ;ANYTHING TRANSFERRED?E BEQ 20$ ; NO0 BIT #ECH!DTE,RMER1(R2); HARD ECC OR DTE ERROR ? BEQ 15$ ; NO* DEC R0 ;BACK UP TO THE PREVIOUS BLOCK...00;-edd ; IF ON A BLOCK BOUNDARY) BIC #777,R0 ; FORCE TO A BLOCK BOUNDARY ! ; Z-BIT SET BY BIC IF R0 IS 0U BEQ 20$ ;IF EQ NOL;D@; THE TRANSFER ENDED IN AN ECC HARD ERROR BUT THERE WERE SECTORSE; TRANSFERED THAT CONTAINED GOOD DATA. SINCE THE ECC HARD ERROR COULDA; HAVE BEEN CAUSED BY A CYLINDER CROSSING, THE GOOD DATA IS SAVED 6; AND THE TRANSFER IS RETRIED FROM THE POINT OF ERROR.;O15$:/ CALL DRPRM0 ;RESET OFFSET RECOVERY PARAMETERSQ' CALL DRCALC ;CALCULATE NEW PARAMETERSI& TST U.CNT(R5) ;LAST BLOCK TRANSFERED? BNE 20$ ;IF NE NOO, ADD R0,U.CNT(R5) ;YES, NORMALIZE BYTE COUNT320$: BITB #OFA,U.CW2+1(R5) ;OFFSET ALREADY ACTIVE?F BNE 30$ ;IF NE YES0 CALL DRPRM10 ;RESET OFFSET RECOVERY PARAMETERS. BIS #OM,I.PRM+6(R1) ;SET OFFSET MODE INACTIVE& MOVB #117,(R2) ;RETURN TO CENTER LINE! BR DRREST ;RESTART THE TRANSFER ; A; NO GOOD DATA WAS TRANSFERED - CHECK IF OFFSET SHOULD BE CHANGEDR;0=30$: BIT #DTE!ECH,RMER1(R2) ;DRIVE TIMING OR HARD ECC ERROR?N BNE 40$ ;IF NE YES( CMP OFFAD(R3),#OFFTB;AT OFFSET ALREADY? BLO 40$ ;IF LO NO,5 BIS #HCI,I.PRM+6(R1);YES, SET HEADER COMPARE INHIBITC%40$: DECB RTTBL+1(R3) ;CHANGE OFFSET?E BGT DRREST ;IF GT NO- DECB RTTBL(R3) ;COUNT EACH OFFSET AS A RETRYS! BIT #40,RMDT(R5) ;IS IT AN RP07?N BNE DRREST ;IF NE YESR( ADD #2,OFFAD(R3) ;UPDATE OFFSET POINTER. CMP #OFFTB+4,OFFAD(R3) ;END OF OFFSET TABLE? BEQ DRREST ;IF EQ YESD3 MOV @OFFAD(R3),I.PRM+6(R1) ;GET NEXT OFFSET VALUE , MOVB #2,RTTBL+1(R3) ;SET OFFSET RETRY COUNT! BR DRREST ;RESTART THE TRANSFER ;D6; **-DRERL-FINISH ERROR LOGGING FOR MID-TRANSFER ERROR;A@; THIS ROUTINE IS CALLED TO FINISH OFF THE ERROR LOGGING PROCESS8; DURING MID-TRANSFER IF WE HAVE SUCCESSFULLY RECOVERED.;E ; INPUTS:#;R; R3=CONTROLLER INDEXN;B#DRERL: MOV R2,-(SP) ;SAVE REGISTERS3 MOV R1,-(SP) ;P/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTA/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNT., MOV #IS.SUC&377,R0 ;RECOVERY WAS SUCCESSFUL+ CALL $FNERL ;FINISH ERROR LOGGING PROCESST MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 ;R( ;FALL THRU AND RESET RECOVERY PARMS.;R#; SET RECOVERY AND RETRY PARAMETERSR;L3DRPRM: MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNTS7DRPRM0: MOVB #16,RTTBL+1(R3) ;SET OFFSET RECOVERY COUNTE9DRPRM1: MOV #OFFTB-2,OFFAD(R3) ;SET OFFSET TABLE POINTERP1 BICB #OFA,U.CW2+1(R5) ;CLEAR OFFSET ACTIVE FLAGN RETURN ;R;.*; **-DRCALC-CALCULATE UPDATED DISK ADDRESS;3?; THIS ROUTINE WILL CALCULATE THE NEW DISK AND BUFFER ADDRESSESN3; BASED ON THE NUMBER OF BYTES ACTUALLY TRANSFERED.P;R ; INPUTS:F; ; R0=BLOCKS ACTUALLY TRANSFERED.; ; OUTPUTS:;A; R0=UNCHANGED IF U.CNT(R5)=0R#; I.PRM+10(R1)=NEW CYLINDER ADDRESSE'; I.PRM+12(R1)=NEW TRACK SECTOR ADDRESS;; <DRCALC: SUB R0,U.CNT(R5) ;REDUCE BYTES REMAINING TO TRANSFER BEQ 30$ ;IF EQ NONE LEFT3 ADD R0,U.BUF+2(R5) ;UPDATE STARTING BUFFER ADDRESS 0 ADCB U.BUF+1(R5) ;AND THE MEMORY EXTENSION BITS2 BIT #FE.EXT,$FMASK ;IS 22-BIT ADDRESSING ENABLED? BEQ 5$ ;IF EQ NO' MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESS 9 BIT #KS.MBC,K.STS(R1) ;IS THIS A 22-BIT MASSBUS DEVICE?S BNE 5$ ;IF NE YES:& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESS+ ADCB -(R1) ;...C15$: MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESSE1 SWAB R0 ;CALCULATE NUMBER OF SECTORS TRANSFERED ASR R0 ;1 ADD I.PRM+12(R1),R0 ;UPDATE TRACK/SECTOR ADDRESSC# TST -(SP) ;GET A WORKING REGISTERO510$: CLR (SP) ;CLR THE WORKING REGISTER FOR THE LOOPE$ CMPB U.PRM(R5),R0 ;SECTOR OVERFLOW? BHI 20$ ;IF HI NOR( MOVB U.PRM(R5),(SP) ;COPY SECTORS/TRACK1 SUB (SP),R0 ;SUBTRACT A TRACKS WORTH OF SECTORSK ADD #1*256.,R0 ;ADD IN A TRACK+ MOV U.PRM(R5),(SP) ;GET TRACKS AND SECTORSA) CLRB (SP) ;ISOLATE ONLY TRACKS/CYLINDERR CMP (SP),R0 ;TRACK OVERFLOW? BHI 10$ ;IF HI NO & SUB (SP),R0 ;NORMALIZE TRACK ADDRESS* INC I.PRM+10(R1) ;UPDATE CYLINDER ADDRESS BR 10$ ;:20$: MOV R0,I.PRM+12(R1) ;SET UPDATED TRACK/SECTOR ADDRESS TST (SP)+ ;PRUNE STACK30$: RETURN ;0;T00;5edcDATADATADATADATADATADATADATA(; **-DRVV-PROCESS VOLUME VALID FUNCTIONS;RB; HERE WE WILL PROCESS VOLUME VALID FUNCTIONS. IF THE FUNCTION ISD; SET VOLUME VALID WE WILL SET THE HARDWARE VOLUME "VV" BIT. IF THEC; FUNCTION IS CLEAR VOLUME VALID WE WILL DO NOTHING AS THE HARDWAREE; CANNOT SPIN THE DRIVE DOWN. IF THE FUNCTION IS A VOLUME VALID NOP,RC; WE WILL SIZE THE DISK BY PASSING THE CONTROLLER REGISTERS BACK TO ; THE CALLER.V;, ; INPUTS:);E; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCBS;K8DRVV: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER- MOV #IS.SUC&377,R0 ;SET SUCCESSFUL OPERATION ( MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS, MOVB U.UNIT(R5),RMCS2(R2) ;SELECT THE UNIT. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS" CALL DRCLR ;CLEAR SELECTED DRIVE* BIT #NED,RMCS2(R2) ;DOES THE DRIVE EXIST? BEQ 5$ ;IF EQ YESN" TST I.PRM+2(R1) ; SIZE THE DISK ? BMI 4$ ; IF MINUS THEN YES CALL $DVERR ;LOG THE ERROR4$: ; REFFERENCE LABELS2 MOVB #TRE/256.,RMCS1+1(R2) ;CLEAR THE CONTROLLER( MOV #IE.SZE&377,R0 ;UNABLE TO SIZE UNIT) BICB #US.VV,U.STS(R5);RESET VOLUME VALIDU JMP DRFIN2 ;EXIT#5$: TST I.PRM+2(R1) ;SIZE THE DISK?M BPL 10$ ;IF PL NOR2 CALL $CRPAS ;PASS CONTROLLER REGISTERS TO CALLER BR 15$ ;010$: BIT #VV$SET,I.PRM+2(R1) ;SET VOLUME VALID? BEQ 15$ ;IF EQ NO + MOV RMDS(R2),R1 ;GET DRIVE STATUS REGISTERM COM R1 ;TOGGLE THE BITSB0 BIT #MOL!DRY,R1 ;IS THE DRIVE READY AND ONLINE? BNE 20$ ;IF NE NOE( MOVB #23,(R2) ;ISSUE PACK ACK TO SET VV15$: JMP DRFIN1 ;EXIT320$: MOV #IE.DNR&377,R0 ;DRIVE NOT READY ERROR CODEV) BICB #US.VV,U.STS(R5);RESET VOLUME VALID  BR 15$ ;EXIT;+$; **-DRCLR-CLEAR DRIVE OR SUB-SYSTEM?; **-DRCLR1-ALTERNATE ENTRY TO CLEAR DRIVE W/O INTERRUPT ENABLE5;;C; ISSUE A DRIVE CLEAR FUNCTION UNLESS THE SELECTED DRIVE/CONTROLLERN'; IS HUNG, THEN ISSUE SUB-SYSTEM CLEAR.G;E ; INPUTS: ;O; R2=CSR ADDRESS; R5=UCB ADDRESS;E ; OUTPUTS:;D; SELECTED DRIVE IS CLEAREDE;M .ENABL LSBS+DRCLR: TSTB (R2) ;IS THE CONTROLLER READY?T BPL 10$ ;IF PL NO7 BIT #1,(R2) ;IS GO BIT SET?V BNE 10$ ;IF NE YES& MOVB #111,(R2) ;NO, ISSUE DRIVE CLEAR RETURN ;AND EXITR,DRCLR1: TSTB (R2) ;IS THE CONTROLLER READY? BPL 10$ ;IF PL NOO BIT #1,(R2) ;IS GO BIT SET?  BNE 10$ ;IF NE YES% MOVB #11,(R2) ;NO, ISSUE DRIVE CLEAR RETURN ;AND EXIT ;Y; NOTE:R;@; THE FOLLOWING INSTRUCTION WILL CAUSE ALL I/O ON OTHER UNITS TOD; ABORT. THIS IS OK BECAUSE THE TIMEOUT FACILITY SHOULD CATCH THEM.;R.10$: BIS #40,RMCS2(R2) ;ISSUE SUB-SYSTEM CLEAR0 MOVB U.UNIT(R5),RMCS2(R2) ;RE-SELECT THE DRIVE RETURN ;AND EXIT2 .DSABL LSBD;C.; **-DRFUN-PROCESS DIAGNOSTIC FUNCTION TESTING;T=; DETERMINE IF THE SPECIFIED FUNCTION IS A DIAGNOSTIC OR NOT.O#; TWO EXCEPTIONS: IO.CER AND IO.CEWV;1 ; INPUTS: ; R1=ADDRESS OF I/O PACKET;A ; OUTPUTS:+; C/S=DIAGNOSTIC FUNCTION (EXCEPT AS NOTED) ; C/C=NORMAL FUNCTIONT; BDRFUN: CMPB #IO.CER!IQ.UMD&377,I.FCN(R1) ;IS IT READ CE CYLINDER? BEQ 10$ ;IF EQ YES= CMPB #IO.CEW!IQ.UMD&377,I.FCN(R1) ;IS IT WRITE CE CYLINDER?2 BEQ 10$ ;IF EQ YES5 BIT #IQ.UMD,I.FCN(R1) ;IS IT A DIAGNOSTIC FUNCTION?F BEQ 10$ ;IF EQ NO  SEC ;YES, SET CARRY RETURN ;EXITS10$: CLC ;NO, CLEAR CARRYS RETURN ;EXITW;+'; **-DRCHK-VALIDATE AND CONVERT THE LBN;19; THIS ROUTINE IS CALLED FROM $DRQRQ TO DO LBN PROCESSINGN9; FOR DEVICES WHICH SUPPORT QUEUE OPTIMIZATION. IF BLKC2U9; DETECTS AN ERROR IT WILL RETURN TO THE CORRECT PLACE INE; $DRQRQ AFTER CALLING $IOALT.;. ; INPUTS:3;I; R1=I/O PACKET ADDRESS ; R5=UCB ADDRESS; ; OUTPUTS:;T4; IF THE CHECKS SUCCEEDS, THEN THE LBN IN THE PACKET=; IS REPLACED BY THE CYLINDER/TRACK/SECTOR. R1 IS PRESERVED.0;C:; IF THE CHECKS FAILS, THEN $IOALT IS ENTERED WITH A FINAL8; STATUS OF IE.BLK AND A RETURN TO THE CORRECT PLACE IN ; $DRQRQ IS EXECUTED.N;O;S<; NOTE: ALL FUNCTIONS PUT INTO THE DRIVER QUEUE ARRIVE HERE.3; THESE INCLUDE IO.ATT, IO.DET, AND ACP FUNCTIONS.P;-;DRCHK: MOV I.FCN(R1),-(SP) ;PUT THE FUNCTION ONTO THE ST00;=eAedACKI) BIC #7,(SP) ;CLEAR THE SUBFUNCTION BITS & CMPB #IO.ATT/256.,1(SP) ;IS IT ATTACH% BEQ 55$ ;IF EQ YES - LEAVE IT ALONEE' CMPB #IO.DET/256.,1(SP) ;IS IT DETACHE% BEQ 55$ ;IF EQ YES - LEAVE IT ALONEE- CMP #IO.STC,(SP) ;IS IT SET CHARACTERISTICS?E% BEQ 55$ ;IF EQ YES - LEAVE IT ALONEI TST (SP)+ ;CLEAN THE STACK5 BIT #IQ.UMD,I.FCN(R1) ;IS IT A DIAGNOSTIC FUNCTION?R BNE 30$ ;IF NE YES) CALL $BLKC2 ;CHECK LOGICAL BLOCK NUMBER-0 CMPB #IO.WLB/256.,I.FCN+1(R3) ;WRITE FUNCTION? BNE 40$ ;IF NE NO#8 BITB #IO.WLT&377,I.FCN(R3) ;WRITE LAST TRACK FUNCTION? BNE 40$ ;IF NE YES CLR R0 ;GET READY FOR THE BISB% BISB U.PRM(R5),R0 ;GET SECTORS/TRACKT4 ADD R0,I.PRM+12(R3) ;INCREMENT BLOCK # BY ONE TRACK! ADCB I.PRM+10(R3) ;AND THE CARRYS. MOV R3,R1 ;RESTORE PACKET ADDRESS FOR $BLKC21 CALL $BLKC2 ;SEE IF WRITE IS TO BAD SECTOR FILEI CLR R1 ;GET READY FOR THE BISB% BISB U.PRM(R5),R1 ;GET SECTORS/TRACKK% SUB R1,R0 ;CORRECT THE BLOCK NUMBER5$ SBCB R2 ;AND THE HIGH BLOCK NUMBER BR 40$ ;CONTINUE+30$: MOV R1,R3 ;COPY POINTER TO I/O PACKETN. ADD #I.PRM+11,R1 ;POINT PAST HIGH PART OF LBN CLRB (R1)+ ;CLEAR EXCESS BYTE0" MOV (R1),R0 ;GET LOW PART OF LBN# MOV -(R1),R2 ;GET HIGH PART OF LBNK+ MOV R3,R1 ;RESTORE THE I/O PACKET POINTER,* CALL DRFUN ;TEST FOR DIAGNOSTIC FUNCTION BCC 40$ ;IF CC NOT' CMPB #14.,U.PRM+1(R5) ;IS IT AN RM80?E BNE 40$ ;IF NE NOS" INCB U.PRM(R5) ;INC SECTORS/TRACK/40$: CALL $CVLBN ;CONVERT LOGICAL BLOCK NUMBER 3 MOV R2,I.PRM+10(R3) ;SAVE DESIRED CYLINDER ADDRESS:" SWAB R1 ;SWAP TRACK TO HIGH BYTE$ BIS R1,R0 ;MERGE TRACK WITH SECTOR; MOV R0,I.PRM+12(R3) ;SAVE DESIRED TRACK AND SECTOR ADDRESS0( MOV R3,R1 ;RETRIEVE I/O PACKET ADDRESS* CALL DRFUN ;TEST FOR DIAGNOSTIC FUNCTION BCC 50$ ;IF CC NO' CMPB #14.,U.PRM+1(R5) ;IS IT AN RM80?N BNE 50$ ;IF NE NOT" DECB U.PRM(R5) ;DEC SECTORS/TRACK50$: RETURN ;EXIT 55$: TST (SP)+ ;CLEAN THE STACK BR 50$ ;AND EXIT .ENDCONVERT LOGICAL BLOCK NUMBER 3 MOV R2,I.PRM+10(R3) ;SAVE D .TITLE DRDSPC .IDENT /15.01/K;R5; COPYRIGHT (C) 1988 BY DIGITAL EQUIPMENT CORPORATIONE; ALL RIGHTS RESERVED.;S<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;1; D. N. CUTLER 12-AUG-73;); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:C; +; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:T;B; J. R. KAUFFMAN; J. M. LAWLER ; T. LEKASR; B. S. MCCARTHY;T+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:M;K; B. S. MCCARTHY; L. B. MCCULLEY;.$; MODIFIED FOR RSX-11M-PLUS V4.0 BY:; ; B. S. MCCARTHY;E$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;W ; B. S. MCCARTHY 27-JUL-88 15.01;M-; BM410 -- CORRECT STACK USAGE IN ERROR PATH ; ; DIRECTIVE DISPATCHER;; MACRO LIBRARY CALLS3;# .MCALL HDRDF$,HWDDF$,TCBDF$,WDBDF$  C % HDRDF$ ;DEFINE TASK HEADER OFFSETS.$ HWDDF$ ;DEFINE HARDWARE REGISTERS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS/ WDBDF$ ;DEFINE USER WINDOW DEF BLOCK OFFSETS;.H; DEFINE SIZE OF LARGEST DPB TO BE COPIED INTO EXEC. ANY CHANGES TO THIS?; ASSIGNMENT MUST BE REFLECTED IN THE DPB BUFFER SIZE IN SYSCM.W; % DPBMAX = 16. ;RPOI IS 16 WORDS LONG4;+; **-$TRTRP-TRAP TRAPN;RH; THIS ROUTINE IS TRAPPED TO WHEN A TRAP INSTRUCTION IS EXECUTED. IF THEF; STACK DEPTH IS ZERO, THEN A DIRECTIVE STATUS IS TO BE RETURNED. ELSE=; CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE.F; ; INPUTS:L;O+; 2(SP)=PS WORD PUSHED BY TRAP INSTRUCTION. +; 0(SP)=PC WORD PUSHED BY TRAP INSTRUCTION.D;T ; OUTPUTS:;OB; IF THE STACK DEPTH IS ZERO, THEN A DIRECTIVE STATUS IS RETURNED.B; ELSE CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE.;- .ENABL LSB- .IF NDF D$$PARH($TRTRP::TST $STKDP ;;;STACK DEPTH ZERO? BNE $EMTRP ;;;IF NE NO4 MOV (SP)+,R0 ;;;GET ADDRESS + 2 OF TRAP INSTRUCTION( MFPI -(R0) ;;;PICK UP TRAP INSTRUCTION .IFF ; NDF D$$PAR2$TRTR1:: ;REFERENCE LABEL FOR DRSUB TRAP HANDLER .ENDC ; NDF D$$PARI+ MOVB (SP)+,R0 ;;;RE00EedcDATADATADATADATADATADATADATATRIEVE DIRECTIVE STATUSD6 MOV (SP),PS ;;;RESTORE TRAP PS FOR CORRECT PREV MODE- MOV #$STACK-22,SP ;RELOAD EXEC STACK POINTERL$ MOV R0,-(SP) ;SAVE DIRECTIVE STATUS BPL 1$ ;IF PL OKAY AS IS S( INC @$USRPS ;SET CARRY IN USER PS WORD .IF DF G$$GEF* JMP 60$ ;IF ERROR SKIP GGEF COUNT UPDATE .ENDC ; DF G$$GEF&1$: JMP 59$ ;GO UPDATE GGEF USE COUNT R;+; **-$EMTRP-EMT TRAP;H; THIS ROUTINE IS TRAPPED TO WHEN AN EMT INSTRUCTION IS EXECUTED. IF THEC; STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED. ELSE A TEST IS;D; MADE TO SEE IF THE EMT INSTRUCTION HAD A CODE OF 377. IF NOT, THENF; CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE. ELSE THE$; APPROPRIATE DIRECTIVE IS EXECUTED.;I ; INPUTS:O;*; 2(SP)=PS WORD PUSHED BY EMT INSTRUCTION.*; 0(SP)=PC WORD PUSHED BY EMT INSTRUCTION.; ; OUTPUTS:;D@; IF THE STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED. ELSEE; CONTROL IS GIVEN TO THE EMT/TRAP SST ROUTINE OR A DIRECTIVE ROUTINE 1; DEPENDENT ON WHETHER THE EMT HAD A CODE OF 377.E;-;T>; DETERMINE IF LEGITIMATE ENTRY FROM USER STATE. IF NOT, CRASH;T .IF NDF D$$PARS0$EMTRP::TST $STKDP ;;;ARE WE AT STACK DEPTH +1? BGT 2$ ;;;IF GT YESI! JMP $CREMT ;;;ELSE CRASH SYSTEMO;@; DETERMINE IF ENTRY WAS VIA EMT 377. IF NOT PROCESS NON-RSX EMT;B/2$: DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITYS .IFF ; NDF D$$PAR2$EMTR1:: ;REFERENCE LABEL FOR DRSUB TRAP HANDLER .IF DF K$$DAS1 MOV $DRAPR,KDSAR5 ;MAP COMMON IN I-SPACE AS WELLH .ENDC ; DF K$$DAS .ENDC ; NDF D$$PARE MOV #$UMPC,R3 ;POINT TO USER PC( MOV (R3)+,R5 ;GET ADDRESS OF EMT PLUS 2# MFPI -(R5) ;GET DIRECTIVE WORD ! CMP #104377,(SP) ;DIRECTIVE EMT?G BEQ 3$ ;IF EQ YES L$ JMP 80$ ;HANDLE NON-RSX EMT TRAP ;Y:; PUSH ASSUMED SUCCESFUL STATUS. DIRECTIVE PROCESSORS MAY:;;6; RETURN, IN WHICH CASE THE +1 IS THE DIRECTIVE STATUS=; OVERWRITE THE +1 AND RETURN, IN WHICH CASE THE NEW VALUE ISD ; THE STATUSV=; ISSUE A TRAP INSTRUCTION, IN WHICH CASE THE LOW BYTE OF THE$; TRAP IS THE RETURNED STATUS;V23$: MOV #1,(SP) ;SET SUCCESSFUL DIRECTIVE STATUS  S; 9; IN ACCOUNTING SYSTEMS, CHARGE THE TASK WITH A DIRECTIVE3;(  .IF DF A$$CNT B, MOV $TKTCB,R0 ;POINT TO TCB OF CURRENT TASK/ MOV T.ACN(R0),R0 ;LOCATE ITS ACCOUNTING BLOCKSU BEQ 5$ ;IF EQ, NO ACCOUNTING3 MOV #B.DIR,R1 ;GET OFFSET TO DIRECTIVE COUNT FIELDT( CALL $ADAT1 ;INCREMENT DIRECTIVE COUNT5$: ; W .ENDC  T;S5; POINT TO AND INITIALIZE DRDSP SCRATCH AREA IN DRTBLO;Y5 MOV #$USRPS,R5 ;POINT TO DISPATCH TABLE SCRATCH AREA & MOV R3,(R5)+ ;SAVE ADDRESS OF USER PS, BIC (SP),(R3)+ ;CLEAR CARRY IN USER PS WORD CLR (R5) ;INDICATE NO BYTES ;.E; BEGIN VALIDATION OF DPB. GET TOP WORD OF STACK, CHECK TO SEE IF THEA:; DPB IS ON THE STACK (ODD) OR POINTED TO BY STACK (EVEN).;CH; BETWEEN THE LABELS $DRLM1 AND $DRLM2, AN SST IN THE EXEC IS TREATED ASI; NON-FATAL AND IS CONVERTED TO A DIRECTIVE STATUS RETURN OF IE.ADP. THISOI; WAY WE CAN JUST ACCESS THE DPB WITHOUT THE EXPENSE OF ADDRESS CHECKING. ;P$ MFPI SP ;GET USER STACK POINTER  MOV (SP)+,R3 ;F3$DRLM1:: ;START OF AREA OF ALLOWED TRAPS IN SSTSRD- ;(BREAKPOINTS IN THIS AREA WILL NOT WORK)A/ MFPD$ (R3)+ ;GET FIRST WORD ON USER STACK ANDS! ;ADVANCE PAST IF DPB ON STACKO BIT #1,(SP) ;DPB ON STACK? BNE 10$ ;IF NE YES ;EF; DPB IS POINTED TO BY TOP OF STACK. SET $BTRMV TO 2 INDICATING REMOVEI; ONLY ADDRESS FROM STACK. REPLACE TOP WORD ON KERNEL STACK (DPB ADDRESS)S; WITH FIRST WORD OF DPB.E;P/ MOV #2,(R5) ;INDICATE DPB POINTED TO BY STACKE! MOV (SP)+,R3 ;SET ADDRESS OF DPBF1 MFPD$ (R3)+ ;GET FIRST WORD OF DPB AND POINT TOS ;SECONDA;I:; PICK UP FIRST DPB WORD FROM STACK, EXTRACT DIC, DPB SIZE; )10$: MOV (SP),R1 ;PICK UP FIRST DPB WORDB; G; INITIALIZE FLAG WHICH INDICATES DPB VALID/INVALID. IF THIS IS A VALIDSH; DIRECTIVE, WE WILL REPLACE THIS FLAG WITH THE ADDRESS OF THE DIRECTIVE; PROCESSING ROUTINE LATER.W; * CLR (SP) ;ASSUME ILLEGAL DIC OR DPB WORD MOV R1,00MeAedR4 ;COPY FIRST DPB WORD CLR R0 ; BISB R1,R0 ;EXTRACT DIC BYTE! CLRB R4 ;CLEAR LOW BYTE OF COPY($ SWAB R4 ;SWAP DPB SIZE TO LOW BYTE" BMI 346$ ;IF MI ILLEGAL DPB SIZE, ASL R4 ;CONVERT TO BYTES TO REMOVE AT EXIT TST (R5)+ ;DPB ON STACK ?  BNE 15$ ;IF NE NO + MOV R4,-2(R5) ;SET BYTES TO REMOVE ON EXIT/,15$: MOV R1,(R5)+ ;SAVE FIRST WORD IN $DICSV;L; WE NOW HAVE:;WB; R0 = DIRECTIVE IDENTIFICATION CODE (DIC) ZERO PADDED TO 16 BITS.?; R1 = DPB SIZE IN BYTES (NUMBER OF BYTES TO REMOVE FROM STACK)S+; R3 = VIRTUAL ADDRESS OF FIRST WORD IN DPB ; @; $DICSV = FIRST WORD OF DPB (SAVED COPY SO THAT COMMON ROUTINES/; CAN DETERMINE WHICH DIRECTIVE WAS EXECUTED);L; -; INITIALIZE GROUP GLOBAL EVENT FLAG POINTERS+;D .IF DF G$$GEF8 MOV #$GEFPT+2,$GEFPT ;INIT GRP GLOBAL USE COUNT POINTER7 MOV #$GEFPT+2,$GFTCB ;INIT GRP GLOBAL USER TCB POINTER  .ENDC ; DF G$$GEF;RD; VALIDATE DIC AND CONVERT TO POINTER INTO TABLE OF TWO WORD ENTRIES; FOR DIRECTIVES.R;  ASR R0 ;DIVIDE CODE BY 2 BCC 357$ ;IF CC ILLEGAL DICS% CMP R0,#HI$DIC ;IS DIC OUT OF RANGE?R BHI 357$ ;IF HI YES ( ASL R0 ;CONVERT TO DOUBLE WORD INDEX 2 ADD #$DSTAB+1,R0 ;POINT TO COMPLEMENT OF DPB SIZE;PE; GET NEGATIVE OFFSET INTO MOVE TABLE FROM DIRECTIVE TABLE. THIS USESE1; THE LEFTOVER BYTE AND SAVES A FEW INSTRUCTIONS.T;$* MOVB (R0),R2 ;GET COMPLEMENT OF LENGTH*4;NG; VALIDATE THAT EITHER DPB SIZE MATCHES THAT SHOWN IN THE TABLE OR THAT ?; THE DIRECTIVE CODE WILL VERIFY THE SIZE (SIZE IN TABLE = 0 ).Y; CMPB R4,-(R0) ;DPB SIZE MATCH ? BEQ 34$ ;IF EQ YES & CMP (PC)+,R1 ;IS IT GMCR$ DIRECTIVE ? .BYTE 127.,41. ;DIC, DPB SIZE ? BEQ 34$ ;IF EQ YES4 TSTB (R0) ;DEFER CHECKING FOR VARIABLE LENGTH DPB?+346$: BNE 357$ ;IF NE NO, ILLEGAL DPB SIZEH MOV R4,R2 ;COPY SIZE IN BYTES ASL R2 ;CONVERT TO DOUBLEWORDS9 CMP #DPBMAX*4,R2 ;DPB SIZE BIGGER THAN TRANSFER VECTOR ?A' BLO 357$ ;IF LO YES, ILLEGAL DPB SIZEH NEG R2 ;CREATE JUMP INDEXT; E; REPLACE ZERO FLAG ON STACK WITH ADDRESS OF PROCESSING ROUTINE. THISP5; INDICATES TO THE CODE BELOW THAT THE DPB WAS VALID. ; :34$: MOV TB$SIZ(R0),(SP) ;GET ADDRESS OF DIRECTIVE ROUTINE BEQ 357$ ;IF EQ ILLEGAL DICD4 MOV 2*TB$SIZ(R0),R4 ;GET PROCESSING MASK FLAGS BYTE;I=; PROCESS " A C H K D B " FLAG - ADDRESS CHECK AND MAP 8 WORDA; PLAS DEFINITION BLOCK.;CE; FOR PLAS DIRECTIVES, WE TAKE THE ONE PARAMETER OUT OF THE DPB. THISFB; PARAMETER IS THE ADDRESS OF AN 8 WORD STRUCTURE (RDB OR WDB). WEE; VALIDATE READ/WRITE ACCESS TO THE BLOCK AND PASS THIS BLOCK, RATHERI4; THAN THE DPB, TO THE DIRECTIVE PROCESSING ROUTINE.;::; ON SYSTEMS SUPPORTING EXTERNAL TASK HEADERS, THE WDB/RDB7; IS COPIED INTO THE EXECUTIVE INTERMEDIATE BUFFER AREAC;; (STARTING ADDRESS $DICSV) SO THAT KERNEL APR6 CAN BE USEDAB; EXCLUSIVELY TO MAP THE ISSUING TASK HEADER. SINCE THE DIRECTIVE=; PROCESSING ROUTINES WILL NOT BE MANIPULATING THE USERS COPYIB; OF THE WDB/RDB, IT WILL BE NECESSARY TO RETURN ANY OUTPUT FIELDSA; OF THE WDB/RDB AT THE COMPLETION OF DIRECTIVE PROCESSING ALONG RB; WITH THE NORMAL DSW RETURN CODE. THE WORD CONTAINING THE NUMBER@; OF BYTES TO ADD TO THE USERS SP AT THE COMPLETION OF DIRECTIVE@; PROCESSING ($BTRMV) IS NEGATED TO INDICATE THAT THE ADDITIONAL@; OUTPUT FIELDS OF THE WDB/RDB MUST BE WRITTEN TO THE USER TASK.;E .IF DF P$$LAS S R& BPL 345$ ;IF PL NOT A PLAS DIRECTIVEF; PUSH ADDRESS OF INTERMEDIATE LINKAGE FOR DISPATCHER FOR INTERMEDIATEE; CALL TO THIRD DIRECTIVE COMMON (NOTE THAT FOR THIS CASE, DRTBL DOESV%; NOT HAVE THE ADDRESS SHIFTED RIGHT. 3 MOV #$DRCL3,-(SP) ;PUSH ADDRESS OF LINKAGE ROUTINEB1 MFPD$ (R3) ;PICK UP POINTER TO DEFINITION BLOCKC MOV (SP)+,R3 ;G. MFPD$ (R3) ;READ/WRITE ACCESS TO FIRST WORD? MTPD$ (R3) ;/ MFPD$ 16(R3) ;READ/WRITE ACCESS TO LAST WORD?T MTPD$ 16(R3) ; .IF DF X$$HDR9 NEG $BTRMV ;INDICATE ADDITIONAL OUTPUT FIELDS TO RETURND .ENDC ; DF X$$HDR" MOV #16.,R2 ;SET SIZE FOR $RELCD+ CALL $RELCD ;RELOCATE/MAP PLAS DEF. BLOCK  .IF00UedcDATADATADATADATADATADATADATA DF X$$HDR- MOV R3,(R5)+ ;SAVE KERNEL VA OF USER WDB/RDB1 MOV KISAR6,(R5)+ ;SAVE KERNEL MAPPING TO WDB/RDBN  .REPT K2 MOV (R3)+,(R5)+ ;COPY USER WDB/RDB TO EXEC BUFFER $ .ENDR D, MOV #$DICSV+6,R3 ;POINT TO INTERNAL RDB/WDB. MOV $SAHDB,KISAR6 ;MAP TO CURRENT TASK HEADER .ENDC ; DF X$$HDR, BIC #WS.CRW!WS.UNM!WS.ELW!WS.RRF,W.NSTS(R3). MOV $TKTCB,R5 ;POINT TO TASK TCB FOR ROUTINES$ JMP 51$ ;JOIN COMMON DISPATCH CODE .ENDC ; DF P$$LAS F345$: ;REFERENCE LABEL;MD; HERE WE SPECIAL CASE THE GMCR$ DIRECTIVE AND ADDRESS CHECK THE DPBE; SINCE THE MFPD$ CHECKS WON'T WORK FOR DPB'S GREATER THAN 32. WORDS.;;Y+ CMP (PC)+,R1 ;MCR COMMAND LINE DIRECTIVE ? .BYTE 127.,41. ;DIC, DPB SIZE BNE 35$ ;IF NE NOA+ SUB #2,R3 ;POINT BACK TO BEGINNING OF DPBN+ ;(CAN'T USE TST, R3 NOT KERNEL ADDRESS)W) MOV #41.*2,R1 ;SET SIZE TO ADDRESS CHECKO5 CALL $ACHKP ;ADDRESS CHECK AND MAP BLOCK READ/WRITE 0 TST (R3)+ ;ADVANCE PASTFIRST WORD (TST OK NOW) BR 355$ ; ;EF; HERE WE "ADDRESS CHECK" THE DPB BY COPYING IT TO AN INTERNAL BUFFER.A; THIS IS FASTER THAN A REAL ADDRESS CHECK AND ELIMINATES SEVERAL.; MAPPING PROBLEMS.C;R-35$: JMP $DRLM2(R2) ;JUMP INTO TABLE OF MOVES1 .REPT DPBMAX) MFPD$ (R3)+ ;GET ONE WORD FROM USER DPB ( MOV (SP)+,(R5)+ ;AND PUT IT IN OUR COPY .ENDR;AD; THERE MUST BE EXACTLY TWO WORDS BETWEEN THE END OF THE MOVE VECTOR; AND THE LABEL $DRLM2.K;A( MOV #$DICSV+2,R3 ;POINT TO INTERNAL DPB; <; THIS IS THE END OF THE CODE WHICH IS PROTECTED FROM TRAPS.; .$DRLM2:: ;END OF AREA OF A ALLOWED TRAPS AND ;NO BREAKPOINTS.;SH; MAP THE CURRENT TASK HEADER IF EXTERNAL HEADER SUPPORT. IT WILL ETIHERG; STAY MAPPED THROUGH THE DIRECTIVE, OR BE REMAPPED TO SEC. POOL TCB IFE; THE DIRECTIVE CAN USE THEM.+;5 .IF DF X$$HDR. MOV $SAHDB,KISAR6 ;MAP TO CURRENT TASK HEADER .ENDC ; DF X$$HDR;FA; SET UP R5 TO POINT TO CURRENT TASK'S TCB FOR DIRECTIVE ROUTINESP;T355$: ;REFERENCE LABELS.357$: MOV $TKTCB,R5 ;POINT TO CURRENT TASK TCB;PE; SEE IF DIRECTIVE WAS LEGAL. IF NOT, SKIP FLAGS INTERPRETATION CODE.I;.# TST (SP) ;LEGAL DIC AND DPB SIZE?F BNE 37$ ;IF NE, YEST JMP 90$ ;IF EQ, ILLEGALP37$: ;REFERENCE LABEL; 7; BEGIN TO SET UP PARAMETERS FOR DISPATCHING TO ROUTINE ;M,; R5 = TCB ADDRESS OF TASK ISSUING DIRECTIVE;A SWAB R4 ;REARRANGE FLAGS TST R4 ;TEST FLAGS BEQ 50$ ;IF EQ NO OPTION CODEN$ BMI 40$ ;IF MI TASK ORIENTED FLAGS;=; PROCESS " C E F N C L " FLAG - CONVERT EVENT FLAG NUMBER TON; ADDRESS/BIT MASK PAIRC;EC; IF THE DIRECTIVE REQUIRES EVENT FLAG LOOKUP OR PROCESSING, DO SO.;;A- ROR R4 ;INCREMENT USE COUNT IF GRP GLOBAL ?P2 BCS 38$ ;IF CS DON'T INCREMENT GRP GBL USE COUNT3 CALL $CEFNG ;CONVERT EFN AND LOCK IF GROUP GLOBALT BR 39$ ;JOIN COMMON CODE38$: ;REF LABEL' CALL $CEFN ;CONVERT EVENT FLAG NUMBERT0 BIC #1,R1 ;CLR GROUP GLOBAL 2ND MASK INDICATOR)39$: BCC 50$ ;IF CC EVENT FLAG SPECIFIED; =; PROCESS " C E F N M T " FLAG - EVENT FLAG MUST BE SPECIFIED ;  ROR R4 ;EVENT FLAG REQUIRED ?T BCC 50$ ;IF CC NO, OKN;L#; REQUIRED EVENT FLAG NOT SPECIFIED;R$ DRSTS D.RS97 ;SET DIRECTIVE STATUS; ;; PROCESS " S R S T C L " FLAG - CALL $SRSTD TO LOOK UP TCB ;F; G; NOW PROCESS TASK LOOKUP OPTIONS. THE BEQ BELOW TAKES CARE OF BOTH THE D; CASE WHERE NO $SRSTD CALL IS SPECIFIED, AND THE CASE WHERE WE JUST"; FINISHED PROCESSING EVENT FLAGS.;:>; NOTE: ******************************************************; B; THIS SECTION SHOULD EVENTUALLY CALL $SRMUT EVEN IF $SRXXX FAILS.;E;TH; PROCESS " S E C T C B " FLAG - CALL $SRPRO TO LOOK UP TCB IN SECONDARY ; OR PRIMARY POOL TASK LISTS;/40$: ASLB R4 ;TASK ALLOW SECONDARY POOL TCBS ?T BPL 405$ ;IF PL NO CALL $SRPRO ;LOOK UP TASK NAME BCS 402$ ;IF CS TASK NOT FOUND$ BIT #1,R0 ;TCB IN SECONDARY POOL ? BEQ 401$ ;IF EQ NO DEC R0 ;POINT BACK TO APR BIAS& MOV (R0),KISAR6 ;MAP TCB THROUGH APR6 MOV #140000,R0 ;POINT TO TCB*+401$: CMP (R3)+,(R3)+ ;P00]eAedOINT PAST TASK NAMEN;L>; PROCESS " C R E T C B " FLAG - DIRECTIVE MAY CREATE TCB FROM; MULTI-USER TASK TCB.;O' ASLB R4 ;CAN DIRECTIVE CREATE A TCB ?P) BPL 43$ ;IF PL NO, DO MULTI-USER CHECKSO" BR 46$ ;ELSE YES, SKIP MU CHECKS;F?; $SRPRO OR $SRSTD COULD NOT FIND THE PROTOTYPE. SEE IF WE NEEDN1; TO SUBSTITUTE XXXTNN AND DO SO OR RETURN STATUSQ;1,402$: ASLB R4 ;CAN DIRECTIVE CREATE A TCB ?' BMI 110$ ;IF MI YES, PROTO MUST EXISTM2403$: CMP (R3),#^R... ;TASK NAME FOLLOW MULTI-USER ;CONVENTION ? (...XXX)& BNE 110$ ;IF NE NO, PROTO MUST EXIST- MOV 2(R3),R1 ;SET FIRST HALF OF MU TASK NAMEC' MOV T.UCB(R5),R0 ;SET TERM UCB ADDRESS ( CMP (R3)+,(R3)+ ;ADVANCE PAST TASK NAME# MOV R3,-(SP) ;AND SAVE DPB POINTER # CALL $SRMUT ;LOOK FOR MU TASK TCBN" MOV (SP)+,R3 ;RESTORE DPB POINTER BCC 46$ ;IF CC MU TASK FOUND BR 110$ ;ELSE ERROR ;0C; PROCESS " D F C T S K " FLAG - TASK NAME DEFAULTS TO CURRENT TASKO;M3405$: ASLB R4 ;TASK NAME DEFAULT TO CURRENT TASK ?U BPL 41$ ;IF PL NO ' MOV R5,R0 ;PICK UP CURRENT TASK TCB U TST (R3) ;TASK NAME SPECIFIED? BEQ 42$ ;IF EQ NO M-41$: CALL $SRSTD ;SEARCH STD FOR TASK NAME 3$ BCS 403$ ;IF CS TASK NOT IN SYSTEM/42$: CMP (R3)+,(R3)+ ;ADVANCE PAST TASK NAME L; F; IF SPECIFIED TASK IS A MULTI-USER (...XXX) TASK, LOOK FOR LOCAL COPY;AC43$: CMP T.NAM(R0),#^R... ;DOES NAME FOLLOW MULTI-USER CONVENTION ?L BNE 46$ ;IF NE NO O" MOV R0,-(SP) ;SAVE TCB POINTER " MOV R3,-(SP) ;SAVE DPB POINTER < MOV T.NAM+2(R0),R1 ;PICK UP FIRST WORD OF COPY'S TASK NAME 8 MOV T.UCB(R5),R0 ;PICK UP TI: UCB FOR NAME CALCULATION 2 CALL $SRMUT ;SEARCH STD FOR MULTIUSER TASK COPY % MOV (SP)+,R3 ;RESTORE DPB POINTER T BCC 45$ ;IF CC COPY FOUND - MOV (SP),R0 ;RESTORE ORIGINAL TCB ADDRESS S 45$: TST (SP)+ ;CLEAN STACK 46$: ;REF LABEL ;PF; PROCESS " M U P C H K " FLAG - PERFORM MULTI-USER PROTECTION CHECKS.; 0 ASLB R4 ;PERFORM MULTI-USER PROTECTION CHECK ? BPL 49$ ;IF PL NO N2 BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED?  BNE 49$ ;IF NE YES 3 BIT #T3.SLV,T.ST3(R0) ;TARGET TASK A SLAVE TASK? L" BNE 120$ ;IF NE YES, DON'T ALLOW= CMP T.UCB(R5),T.UCB(R0) ;CURRENT AND TARGET TASK UCBS MATCH?I BNE 120$ ;IF NE NO;(4; SET UP PARAMETERS FOR DIRECTIVE PROCESSING ROUTINE; $49$: MOV R0,R1 ;COPY TCB ADDRESS , ADD #T.STAT,R1 ;POINT TO TASK STATUS WORD 50$: ;REFERENCE LABEL .IF DF D$$PAR1 ASL (SP) ;DIRECTIVE IN FIRST OR SECOND COMMON ?  BCC 51$ ;IF CC ITS IN FIRSTS3 MOV #$DRCL2,-(SP) ;PUSH ADDRESS OF LINKAGE ROUTINEY .ENDC ; DF D$$PAR751$: MOV R5,R2 ;SET POINTER TO SECOND TASK STATUS WORDE ADD #T.ST2,R2 ;;+; ** W A R N I N G **R; ; SPM HOOKPOINT NUMBER 01.;B); DO NOT CHANGE THE INSTRUCTION FOLLOWING ; LABEL WITHOUT CHECKING SPM;-+$SPH01==. ;SPM CHANGES THE INSTRUCTION AT# ;THE LOCATION OF THIS LABELO. MOV @#$SAHPT,R4 ;POINT TO CURRENT TASK HEADER;(6; CALL DIRECTIVE ROUTINE WITH THE FOLLOWING ARGUMENTS:; ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.3; R3=ADDRESS OF THE NEXT WORD IN THE DIRECTIVE DPB.R@; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.; R1=DEPENDENT ON DIRECTIVE.; R0=DEPENDENT ON DIRECTIVE.;)55$: CALL @(SP)+ ;CALL DIRECTIVE ROUTINE=  .IF DF D$$PAR4$DRFIN:: ;REFERENCE LABEL FOR COMMON LINK ROUTINES .ENDC ; DF D$$PAR;RA; INCREMENT GROUP GLOBAL USE COUNTS (OR SCRATCH WORD IF DIRECIVESN; DON'T USE GROUP GLOBALS);O59$: ;REFERENCE LABEL .IF DF G$$GEF/ INC @$GEFPT ;INCREMENT GROUP GLOBAL USE COUNTO1 INCB @$GFTCB ;INC GRP GLOBAL USE COUNT FOR TASKO .ENDC ; DF G$$GEF;R'; WRITE DIRECTIVE STATUS BACK INTO TASK ;E.60$: MTPD$ @#H.DSW ;SET DIRECTIVE STATUS WORD; D; IF THE NUMBER OF BYTES TO REMOVE FROM USER STACK IS NEGATIVE, THENE; WE HAVE JUST PROCESSED A PLAS DIRECTIVE. WE MUST RETURN THE OUTPUTNE; FIELDS TO THE USER TASK (RDB/WDB) FROM THE INTERMEDIATE BUFFER AREA ; ; OUTPUT FIELD00eejecDATADATADATADATADATADATADATAS IN WDB/RDB;F6; W.NID W.NBAS W.NRID W.NLEN W.NOFF W.NSTS6; R.GID R.GSIZ R.GSTS;L E .IF DF X$$HDR. TST $BTRMV ;JUST FINISHED A PLAS DIRECTIVE ? BPL 65$ ;IF PLUS, NO NEG $BTRMV ;YES, TURN OFF FLAG4 MOV #$DICSV+2,R0 ;POINT TO INTERMEDIATE EXEC BUFFER+ MOV (R0)+,R1 ;RESTORE KERNEL VA OF WDB/RDB $ MOV (R0)+,KISAR6 ;MAP USERS WDB/RDB MOV (R0)+,(R1)+ ;W.NID R.GIDT MOV (R0)+,(R1)+ ;W.NBAS R.GSIZE& CMP (R0)+,(R1)+ ;W.NSIZ R.GNAM (SKIP) MOV (R0)+,(R1)+ ;W.NRID R.GNAM  MOV (R0)+,(R1)+ ;W.NOFF R.GPARF MOV (R0)+,(R1)+ ;W.NLEN R.GPAR  MOV (R0)+,(R1)+ ;W.NSTS R.GSTS65$: ;REFERENCE LABEL .ENDC ; DF X$$HDR; H; GET USER STACK POINTER AND UPDATE TO REMOVE DPB OR ADDRESS OF DPB FROM ; THE STACK.;2$ MFPI SP ;GET USER STACK POINTER . ADD $BTRMV,(SP) ;REMOVE BYTES FROM USER STACK% MTPI SP ;RESTORE USER STACK POINTER;VH; END OF DIRECTIVE PROCESSING, GO BACK TO SYSTEM ENTRANCE/EXIT ROUTINES.;+ RETURN ;EXIT FROM TRAP 0 .;D; EMT/TRAP SST ROUTINE TRANSFERF;G80$: ;REFERENCE LABEL .IF DF X$$HDR/ MOV $SAHPT,R5 ;GET ADDR OF CURRENT TASK HEADERL0 MOV $SAHDB,KISAR6 ;MAP NON RESIDENT TASK HEADER .IFFU/ MOV $HEADR,R5 ;GET ADDR OF CURRENT TASK HEADERT .ENDC ;X$$HDR4 MOV H.WND(R5),R5 ;POINT TO NUMBER OF WINDOW BLOCKS / TST W.BLVR+2(R5) ;CURRENT TASK MAPPED TO EXEC?C BEQ 85$ ;IF EQ NO , CMP (SP),#104376 ;IS THIS A CALL TO $SWSTK? BNE 85$ ;IF NE NO $ JMP $SWSTK ;PROCESS CALL TO $SWSTK#85$: JMP $EMSST ;PROCESS SST FAULTS;; ILLEGAL DIRECTIVEN;L(90$: DRSTS D.RS99 ;SET DIRECTIVE STATUS;R*; REQUIRED EVENT FLAG NUMBER NOT SPECIFIED;A)100$: DRSTS D.RS97 ;SET DIRECTIVE STATUS$;,1; SPECIFIED TASK NAME NOT FOUND IN TASK DIRECTORYH;(110$: DRSTS D.RS2 ;SET DIRECTIVE STATUS;O; PRIVILEGE VIOLATION ;R .IF DF M$$MUP)120$: DRSTS D.RS16 ;SET DIRECTIVE STATUS7 .ENDC ; ; ALLOCATION FAILURE ;  .IF DF R$$DSP C +130$: DRSTS D.RS1 ;SET DIRECTIVE STATUS S  .ENDC .DSABL LSBB .ENDECIFIED;A)100$: DRSTS D.RS97 ;SET DIRECTIVE STATUS$;,1; SPECIFIED TASK NAME NOT FOUND IN TASK DIRECTORYH;(110$: DRSTS D.RS2 ;SET DIRECTIVE STATUS;O; PRIVILEGE VIOLATION ;R .IF DF M$$MUP)120$: DRSTS D.RS16 ;SET DIRECTIVE STATUS7 .ENDC ; ; ALLOCATION FAILURE ; .TITLE DREIFN .IDENT /17.01/a;p; COPYRIGHT (C) 1988"; BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;2; D. N. CUTLER 13-SEP-73;i;s+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:D; ; J. W. BERZLE; J. R. KAUFFMAN; J. M. LAWLER; B. S. MCCARTHY; L. B. MCCULLEY; $; MODIFIED FOR RSX-11M-PLUS V4.0 BY:; ; B. S. MCCARTHY; L. M. ZIEGLER ; K. L. NOEL;R$; MODIFIED FOR RSX-11M-PLUS V4.1 BY:;C ; K. L. NOELG; P. K. M. WEISS; Eric Postpischil; L. B. McCulley;H; MODIFIED BY:;I"; P. K. M. WEISS 19-JUL-1988 17.00; 8; PKW160 - USE -1 ONLY FOR MARKING DISABLED CPRSX TASKS; ; L. M. PETERSON 12-OCT-88 17.01;A; LMP122 -- PREVENT TASKS ABORTED BY ^C FROM ISSUING SNCMD LATER $; (DRGIN WILL DO IT WITH CC.TTD);C; EXIT DIRECTIVESU;Y; MACRO LIBRARY CALLSX;M1 .MCALL ABODF$,HDRDF$,PCBDF$,PKTDF$,TCBDF$,BGCK$A .MCALL CPRDF$  CPRDF$D R" ABODF$ ;DEFINE TASK ABORT CODES% HDRDF$ ;DEFINE TASK HEADER OFFSETSs1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS.$ PKTDF$ ;DEFINE I/O PACKET OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS T S .IF DF A$$CNT S .MCALL ACNDF$* ACNDF$ ;DEFINE ACCOUNTING BLOCK OFFSETS C .ENDC N .IF DF L$$GCL .MCALL LNMDF$ LNMDF$C .ENDC ;D; LOCAL SYMBOL DEFINITIONR; 0CLRMSK=T2.AST!T2.DST!T2.SEF!T2.HLT!T2.ABO!T2.REX?CLRMSK=CLRMSK!<<00meAedT2.STP!T2.SPN!T2.WFR>*2>!T2.STP!T2.SPN!T2.WFR MAP6=140000 ;APR 6;+; **-$DREIF-EXIT IFF;TG; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TERMINATE THE EXECUTION OF THE A; ISSUING TASK IF, AND ONLY IF, AN INDICATED EVENT FLAG IS CLEAR.T;S ; DPB FORMAT:T;S"; WD. 00 -- DIC(53.),DPB SIZE(2.).?; WD. 01 -- EVENT FLAG NUMBER OF EVENT FLAG THAT MUST BE CLEAR.L;N ; INPUTS:M;C; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS.M9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.!+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.F/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.T,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;O5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;L-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. <; DIRECTIVE STATUS OF 'D.RS22' IS RETURNED IF THE SPECIFIED; EVENT FLAG IS SET.; C=1 IF DIRECTIVE IS REJECTED.9; DIRECTIVE STATUS OF 'D.RS97' IF NO OR AN INVALID EVENTF; FLAG NUMBER IS SPECIFIED.S;- .ENABL LSB  .IF NDF D$$PAR!'$DREIF::BIT R0,(R1) ;EVENT FLAG CLEAR?2 BEQ $DREXT ;IF EQ YESE$ DRSTS D.RS22 ;SET DIRECTIVE STATUS;+; **-$DREXT-EXIT;TG; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TERMINATE THE EXECUTION OF THE ; ISSUING TASK.I;U ; DPB FORMAT:L;D"; WD. 00 -- DIC(51.),DPB SIZE(1.).;R ; INPUTS:T;S9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;=; NOTE: THIS DIRECTIVE IS ALSO CALLED FROM THE DISPATCHER AND 7; THEREFORE ONLY REQUIRES R5 TO BE LOADED ON ENTRANCE.R;-=; PRIVILEGED TASKS WHICH DESIRE TO CALL $DREXT DIRECTLYE=; SHOULD SWITCH TO SYSTEM STATE AND IMMEDIATELY CALL $DREXT .; WITHOUT CALLING ANY OTHER EXEC SUBROUTINES./; THIS IS BECAUSE OF POSSIBLE SIDE EFFECTS OF ); OTHER EXEC ROUTINES (SUCH AS $TSKRP). R;N0; BECAUSE MANY PRIVILEGED TASKS CALL $DREXT, WE3; WILL UNCONDITIONALLY MAP THE TASK HEADER SO THATT1; THIS CODE DOES NOT HAVE TO BE ADDED ELSEWHERE.M;E;S5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D; @; NO STATUS IS RETURNED TO THE ISSUING TASK SINCE THIS DIRECTIVE; TERMINATES ITS EXECUTION.H;-$DREXT:: ;REFERENCE LABEL  .IF DF X$$HDR+ MOV $SAHDB,KISAR6 ;MAP CURRENT TASK HEADERO .ENDC ; DF X$$HDR  .IF DF P$$OFF A ' BIT #T3.ACP,T.ST3(R5) ;IS TASK AN ACP?L BNE $DREX1 ;IF NE YESO5 MOV #EX$SUC,T.EFLG+2(R5) ;SET SUCCESSFUL EXIT STATUSD>$DREX2::MOV #S.CEXT,T.EFLG(R5) ;SET SUCCESS CODE IN ABORT CODE  .ENDC $DREX1:: .IFF ; NDF D$$PAR,$DREX3:: ;REFERENCE LABEL FOR STUB ROUTINE ;IN DRSUBT .IF DF K$$DAS9 MOV KINAR5,KDSAR5 ;REMAP IN D SPACE (IN CASE CALLED FROM; ;SCHEDULER)H .ENDC ; DF K$$DAS .ENDC ; NDF D$$PAR. .IF DF, G$$GEF* BIT #T2.AST,T.ST2(R5) ;TASK IN AST STATE? BEQ 56$ ;IF EQ NOF. BIT #T2.WFR*2,T.ST2(R5) ;WAS TASK IN AST WFR? BEQ 56$ ;IF EQ NOE/ MOV H.EFSV(R4),R3 ;GET EVENT FLAG MASK ADDRESSB0 CALL $DEAGF ;DEACCESS GROUP GLOBAL EVENT FLAGS56$:* MOV $SAHPT,R4 ;GET ADDRESS OF TASK HEADER. CALL $UNLCK ;UNLOCK GROUP GLOBAL EVENT FLAGS! BCS 57$ ;IF CS ALREADY UNLOCKEDK) CALL $ELIM ;ELIMINATE THEM IF NECESSARYL'57$: MOV $TKTCB,R5 ;RESTORE TCB POINTER  .ENDC ; DF G$$GEF( CALL $DRCMT ;CANCEL MARK TIME REQUESTS T S .IF DF D$$MND 2 CMP $TKTCB,$DITCB ;IS DIAMOND WATCHING THIS TASK? BNE 101$ ;IF NE NO' BIC #1,@$DICSR ;RESET DIAMOND REGISTER, CLR $DITCB ;CLEAR TCB ADDRESS101$: ;REFERENCE SYMBOL L .ENDC  .IF DF C$$INT T $ MOV T.PCB(R5),R4 ;POINT TO TASK PCB; BIT #PS.CHK,P.STAT(R4) ;DOES TASK POSSIBLY HAVE ANY ITB'S?L BEQ 2$ ;IF EQ NO /1$: MOV P.DPCB(R4),R1 ;PICK UP NEXT ITB POINTER. BEQ 2$ ;IF EQ NONE LEFT  .IF DF D$$PAR3 MOV #$DISIN,-(SP) ;PUSH ADDRESS OF DISABLE ROUTINE,, CALL $MPDC2 ;CALL THROUGH INDIRECT ROUTINE .IFF ; DF D$$PAR#00uejecDATADATADATADATADATADATADATA, CALL $DISIN ;DISCONNECT INTERRUPT VECTOR  .ENDC ; DF D$$PAR BR 1$ ; 2$: ;REF LABEL  .ENDC  .IF DF M$$PRO V' CLR T.RRM(R5) ;REMOVE ALL CPU AFFINITYS K .ENDC  E A P .IF DF D$$PAR B/ MOV $DRAPR,KINAR5 ;MAP THE DIRECTIVE PARTITIONR P .ENDC  + CALL $RLMCB ;RELEASE MCR COMMAND BUFFER D. CMP R5,$LSTLK ;TASK OWN MCR DATA BASE LOCK?  BNE 3$ ;IF NE NO ' CLR $LSTLK ;CLEAR OWNER TCB ADDRESS .3$: BIS #T2.HLT,T.ST2(R5) ;SET TO HALT TASK + CLRB $CXDBL ;CLEAR CONTEXT DISABLE FLAG B6 MOV T.SAST(R5),R0 ;GET ADDRESS OF SPECIFIED AST BLOCK BEQ 5$ ;IF EQ LIST IS EMPTY : MOV R0,@T.ASTL+2(R5) ;MOVE SPECIFIED AST LIST TO AST LIST34$: MOV R0,R1 ;COPY ADDRESS OF SPECIFIED AST BLOCK,( MOV (R0),R0 ;GET ADDRESS OF NEXT BLOCK* BNE 4$ ;IF NE THERE ARE MORE IN THE LIST# MOV R1,T.ASTL+2(R5) ;SET LIST TAILK) CLR T.SAST(R5) ;ASTS NO LONGER SPECIFIED !5$: JSR R5,MTQUE ;EMPTY AST QUEUEC, .WORD T.ASTL ;OFFSET TO AST QUEUE LISTHEAD/ .WORD $DEACB ;ADDRESS OF DEALLOCATION ROUTINEB5 BIT #T3.NSD!T3.ACP,T.ST3(R5) ;FLUSH RECEIVE QUEUE? D BNE 7$ ;IF NE NO F .IF DF P$$OOL ! CALL MTRCVL ;EMPTY RECEIVE LISTE S .IFFT S" JSR R5,MTQUE ;EMPTY RECEIVE QUEUE0 .WORD T.RCVL ;OFFSET TO RECEIVE QUEUE LISTHEAD/ .WORD $DEPKT ;ADDRESS OF DEALLOCATION ROUTINEI H .ENDC V ,7$: ;REF LABELI C .IF DF X$$HDR/ MOV $SAHPT,R4 ;GET CURRENT TASK HEADER ADDRESSS .IFF/ MOV $HEADR,R4 ;GET CURRENT TASK HEADER ADDRESSD .ENDC .IF DF P$$LAS T #( BIT #T3.REM,T.ST3(R5) ;REMOVE ON EXIT ?4 BNE 71$ ;IF NE, YES - $REMOV WILL HANDLE THIS CASE MOV R5,R0 ;COPY TCB ADDRESSE. CALL $CLSRF ;REMOVE IT FROM ALL RREF PACKETS71$: ;REFERENCE LABEL/ JSR R5,MTQUE ;EMPTY RECEIVE BY REFERENCE QUEUER1 .WORD T.RRFL ;OFFSET TO RECEIVE BY REF LISTHEAD$/ .WORD $DEPKT ;ADDRESS OF DEALLOCATION ROUTINEM .ENDC<8$: MOV #SCNLN,-(SP) ;SET ADDRESS OF LUT SCANNING CO-ROUTINE% TSTB T.IOC(R5) ;ANY I/O OUTSTANDING?N BNE 9$ ;IF NE YESS3 TSTB T.TIO(R5) ;TASK HAVE OUTSTANDING BUFFERED I/OO BEQ 30$ ;IF EQ NO E9$: .IF DF C$$RTK ;IF REMOTE TASK 0 BIT #F5.RTK,$FMSK5 ;ARE REMOTE TASKS BEING USED BEQ 99$ ;IF EQ NOE;B; ALLOCATE A PACKET FOR THE GENERIC DRIVER TO USE TO KILL I/O WITH;U CLR $CPPKT ;ASSUME NO PACKET+ CLR $CPLUN ;INDICATE ALL I/O TO BE KILLEDS0 TSTB T.LBN(R5) ;TASK HAD ANY CONTACT WITH HOST?/ BEQ 99$ ;IF EQ NO, NO NEED TO ALLOCATE CPRBUFE? MOV #AL$SWS,R0 ;INDICATE THAT WE ARE CALLING FROM SYSTEM STATET MOV #1,R1 ;GET JUST ONE BLOCKG CALL $CPALO ;ALLOCATE A PACKET( BCC 92$ ;IF CC - ALLOCATION SUCCEEDED  CLR R0 ;INDICATE NO PACKET:92$: MOV R0,$CPPKT ;SAVE PACKET ADDRESS FOR GENERIC DRIVER .ENDC ;C$$RTK 99$:5 BIT #T2.ABO,T.ST2(R5) ;TASK ALREADY MARKED FOR ABORTS BNE 10$ ;IF NE YES% MOV #S.IOMG,R0 ;SET REASON FOR ABORT! CALL $ABCTK ;ABORT CURRENT TASKTA10$: MOV (SP),-(SP) ;DUPLICATE ADDRESS OF LUT SCANNING CO-ROUTINE(20$: CALL @(SP)+ ;GET NEXT ASSIGNED LUN* BCS 30$ ;IF CS END OF LOGICAL UNIT TABLE0 CALL $IOKIL ;KILL I/O ON UNIT FOR CURRENT TASK BR 20$ ;GO AGAIN30$: .IF DF C$$RTK R1 BIT #F5.RTK,$FMSK5 ;ARE REMOTE TASKS BEING USED?C BEQ 35$ ;IF EQ NOI, MOV $CPPKT,R0 ;GET ADDRESS OF CPRBUF PACKET. BEQ 35$ ;IF NONE, IT WAS ALREADY DEALLOCATED+ CALL $CPDEA ;OTHERWISE, DEALLOCATE IT NOW  .ENDC ;C$$RTK35$:$ CALL @(SP)+ ;GET NEXT ASSIGNED LUN+ BCS 100$ ;IF CS END OF LOGICAL UNIT TABLEO .IF DF M$$NET&T$$LTH + CALL LTPRE ;TELL LAT PROCESS IF NECESSARY  .ENDC ; DF M$$NET&T$$LTHK5 CMP $TKTCB,U.ATT(R5) ;UNIT ATTACHED TO CURRENT TASK?N BNE 40$ ;IF NE NOK( MOV #IO.DET,R4 ;SET DETACH I/O FUNCTION BR 50$ ;%40$: MOV (R1),R2 ;FILE OPEN ON UNIT?, BEQ 30$ ;IF EQ NOR% ASR R2 ;ACCESS OR DEACCESS PENDING?A BCS 30$ ;IF CS YES7 ASL R2 ;RESTORE WINDOW BLOCK ADDRESS (INTERLOCK CLRD)R' BIT $WCFLG,U.CW1(R5) ;DEVICE FILES-11?D$ BEQ 45$ ;IF EQ NO, ALWAYS DEACCESS6 TSTB W.IOC(R2) ;I/O I00}eAedN PROGRESS THROUGH WINDOW BLOCK?$ BNE 30$ ;IF NE YES, DON'T DEACCESS/45$: MOV #IO.CLN,R4 ;SET CLOSE LUN I/O FUNCTIONU!50$: CMP (SP)+,(SP)+ ;CLEAN STACKE. MOV R1,-(SP) ;SAVE ADDRESS OF SECOND LUN WORD+ MOV #I.LGTH,R1 ;SET LENGTH OF BLOCK NEEDEDL" CALL $ALOCB ;ALLOCATE I/O PACKET2 MOV (SP)+,R3 ;RETRIEVE ADDRESS OF SECOND LUN WORD& BCS TKWSE ;IF CS NO CORE AVAILABLE ) MOV R0,R1 ;COPY ADDRESS OF I/O PACKET ,! TST (R0)+ ;POINT TO SECOND WORD42 MOV $TKTCB,R2 ;GET ADDRESS OF TCB OF CURRENT TASK0 MOVB T.IOC(R2),-(SP) ;SAVE CURRENT I/O COUNT 0 INCB T.IOC(R2) ;INCREMENT OUTSTANDING I/O COUNT+ MOVB T.PRI(R2),(R0)+ ;SET REQUEST PRIORITY;% CLRB (R0)+ ;CLEAR EVENT FLAG NUMBERS. MOV R2,(R0)+ ;INSERT CURRENT TASK TCB ADDRESS0 MOV R3,(R0)+ ;INSERT ADDRESS OF SECOND LUN WORD! MOV R5,(R0)+ ;INSERT UCB ADDRESSS' MOV R4,(R0)+ ;INSERT I/O FUNCTION CODEN> MOV #/2,-(SP) ; WORDS REMAINING IN I/O PACKET/55$: CLR (R0)+ ; CLEAR REMAINDER OF I/O PACKET2 DEC (SP) ; DONE? BNE 55$ ; IF NE NO* MOV #$DRQRQ,(SP) ; ASSUME QUEUE TO DRIVER) CMP #IO.CLN,R4 ; CLOSE LUN I/O FUNCTION?O BNE 70$ ; IF NE NO" MOV (R3),R4 ; GET WINDOW ADDRESS INC (R3) ; INTERLOCK LUN0 MOV U.VCB(R5),R3 ; GET VCB ADDRESS, REALLY ONE? BEQ 60$ ; IF EQ NO/ INC (R3) ; INCREMENT VOLUME TRANSACTION COUNTI) BIT #DV.F11,U.CW1(R5) ; FILES-11 DEVICE?/ BEQ 60$ ; IF EQ NO, INCB W.IOC(R4) ; INCREMENT WINDOW I/O COUNT /;+; ** W A R N I N G ** ;A; SPM HOOKPOINT NUMBER 21.;C); DO NOT CHANGE THE INSTRUCTION FOLLOWING#; LABEL WITHOUT CHECKING SPM;-+$SPH21==. ;SPM CHANGES THE INSTRUCTION AT ;THE LOCATION OF THIS LABEL4 MOV U.ACP(R5),R0 ; SET ACP TCB;) MOV #$EXRQP,(SP) ; QUEUE DIRECTLY TO ACP /60$: BISB #200,I.EFN(R1) ; SET VIRTUAL I/O FLAG(3 MOV T.ATT(R2),R3 ; GET FIRST ATTACHMENT DESCRIPTORF) INCB A.IOC-A.TCBL(R3) ; LOCK DOWN HEADER 3 MOV A.PCB-A.TCBL(R3),R3 ; POINT TO TASK REGION PCBU2 INCB P.IOC(R3) ; LOCK REGION BY INC'ING I/O COUNT70$: .IF DF C$$RTK1 BIT #F5.RTK,$FMSK5 ;ARE REMOTE TASKS BEING USED?H BEQ 72$ ;IF EQ NO+ CMP (R5),$XXLOW ;IS THIS A GENERIC DEVICE? BLO 72$ ;IF LO NOT! CMP (R5),$XXHGH ;GENERIC DEVICE?E BHI 72$ ;IF HI NOR< INC I.FCN(R1) ;SET BIT TO TELL XX DRIVER WE ARE COMING FROM ; DREIFO72$: .ENDC ;C$$RTKR ) CALL @(SP)+ ;QUEUE THE PACKET SOMEWHEREO .IF DF X$$HDR$ MOV $SAHDB,KISAR6 ; RESTORE MAPPING .ENDC2 MOV $TKTCB,R5 ;GET ADDRESS OF TCB OF CURRENT TASK2 CMPB T.IOC(R5),(SP)+ ;REQUEST ALREADY FINISHED?  BHI 80$ ;IF HI NO JMP 8$ ;680$: MOV T.ASTL(R5),R0 ;GET ADDRESS OF FIRST AST BLOCK BEQ 85$ ;IF EQ THERE IS NONE TSTB A.CBL(R0) ;KERNEL AST ?E2 BMI TKWSE ;IF MI YES, RUNDOWN BIT MIGHT DEADLOCK885$: BIS #TS.RDN,T.STAT(R5) ;SET I/O RUNDOWN IN PROGRESS/TKWSE: CALLR $TKWSE ;WAITFOR SIGNIFICANT EVENTE0100$: TSTB T.IOC(R5) ;ANY I/O STILL OUTSTANDING? BNE 80$ ;IF NE YES3 TSTB T.TIO(R5) ;TASK HAVE OUTSTANDING BUFFERED I/OF BNE 80$ ;IF NE YES .DSABL LSB5+RNDWN: ;PARENT/OFFSPRING-RELATED RUNDOWN$ .IF DF C$$RTK2 BIT #F5.RTK,$FMSK5 ; ARE REMOTE TASKS BEING USED?$ BEQ 16$ ; NO, SKIP DETACH SUPPORT.1 ; THE AME WILL AUTOMATICALLY PERFORM DETACHESI0 ; IN ITS OWN DATA STRUCTURES WHEN IT SEES. ; TASK TERMINATION. WE SUPPORT THIS BY+ ; DELETING THE ACBS ON THE RSX SIDE.E3 MOV #SCNLN,-(SP) ; SET UP LUN-SCANNING CO-ROUTINE.B10$:$ CALL @(SP)+ ; GET NEXT ACTIVE LUN.' BCS 16$ ; THERE IS NONE; WE ARE DONE.I MOV R5,R3 ; COPY UCB ADDRESS.  MOV (R3),R0 ; GET DCB ADDRESS$% CMP D.NAM(R0),#"HT ; IS THIS AN HT?  BEQ 11$ ; IF EQ YESG% CMP D.NAM(R0),#"NS ; IS THIS AN NS?P% BNE 10$ ; IF NE NO, NO U.RAST FIELDP11$:% ADD #U.RAST,R3 ; POINT TO ACB QUEUE.R0 MOV R3,R0 ; COPY POINTER; KEEP HEADER POINTER.12$: MOV R0,R2 ; COPY POINTER.N MOV (R2),R0 ; GET NEXT ACB.M* BEQ 10$ ; THERE IS NONE; GO TO NEXT LUN.7 CMP A.PRM+14(R0),$TKTCB ; IS ACB FOR TERMINATING TASK?1 BNE 12$ ; NO, CHECK NEXT ACB.I5 MOV (R0),(R2) ; MAKE PREVIOUS ACB POINT TO NEXT ACB. 5 BNE 13$ ; TH00ejecDATADATADATADATADATADATADATAERE IS A NEXT ACB, SO LEAVE TAIL ALONE.B: MOV R2,2(R3) ; SET TAIL POINTER TO POINT TO NEW LAST ACB.13$:) MOVB A.PRM+4(R0),R1 ; GET LENGTH OF ACB.A+ CMP -(R0),-(R0) ; BACK UP TO START OF ACB.,# CALL $DEACB ; DEALLOCATE THE ACB.E8 BR 10$ ; PROCESS NEXT LUN (ONE ACB PER LUN IS ENOUGH).16$: .ENDC ; C$$RTK  .IF DF P$$OFF1 MOV $TSKHD,R0 ;POINT TO FIRST INSTALLED TASK TCB 620$: TST T.RDCT(R5) ;ANY RUNDOWN OPERATIONS REMAINING? BEQ 60$ ;IF EQ NOR: MOV T.TCBL(R0),-(SP) ;SAVE POINTER TO NEXT INSTALLED TASK* BEQ 30$ ;IF EQ CURRENT TASK IS NULL TASK+ ADD #T.OCBH,R0 ;POINT TO OCB QUEUE OF TASK3.25$: MOV (R0),R0 ;POINT TO NEXT ENTRY IN LIST BEQ 30$ ;IF EQ THERE IS NONE/ CMP O.PTCB(R0),R5 ;IS EXITING TASK THE PARENT?E BNE 25$ ;IF NE NON( DEC T.RDCT(R5) ;DECREMENT RUNDOWN COUNT1 CLR O.PTCB(R0) ;INDICATE PARENT TASK HAS EXITTED, .IF DF G$$GEF. CMP O.EFN(R0),#64. ;GROUP GLOBAL EVENT FLAG ? BLOS 25$ ;IF LOS NON MOV R0,-(SP) ;SAVE OCB POINTERT( MOV O.EFN(R0),R0 ;GET EVENT FLAG NUMBER. CALL $CEFI ;CONVERT TO MASK AND MASK ADDRESS) MOV R1,R3 ;COPY EVENT FLAG MASK ADDRESSF0 CALL $DEAGF ;DEACCESS GROUP GLOBAL EVENT FLAGS" MOV (SP)+,R0 ;RESTORE OCB POINTER .ENDC ; DF G$$GEF# BR 25$ ;TRY TO REMOVE ANY MORE )30$: MOV (SP)+,R0 ;RESTORE TCB ADDRESS O BNE 20$ ;IF NE NO  .IF DF V$$TRM $ 5 MOV $VTDCB,R1 ;POINT TO SECOND VIRTUAL TERMINAL UCB ;840$: TST T.RDCT(R5) ;ANY OUTSTANDING CREATED VT: UNITS?  BEQ 60$ ;IF EQ NO B4 CMP D.NAM(R1),#"VT ;STILL GOING THROUGH VT UNITS?  BEQ 45$ ;IF EQ YES 0 RETURN ;ELSE $ALOCB FAILURE IN $ELMVT - WAIT /45$: MOV (R1),-(SP) ;SAVE ADDRESS OF NEXT DCB R2 MOV D.UCB(R1),R0 ;POINT TO VIRTUAL TERMINAL UCB ; CMP U.PTCB(R0),R5 ;WAS THIS UNIT CREATED BY EXITING TASK? 2 BNE 50$ ;IF NE NO + CALL $ELMVT ;MARK UNIT FOR DEALLOCATION '50$: MOV (SP)+,R1 ;POINT TO NEXT DCB I BR 40$ ; B  .ENDC  .ENDC 560$: ADD #T.ST2,R5 ;POINT TO SECOND TASK STATUS WORD 4, BIT #T2.ABO,(R5) ;TASK MARKED FOR ABORT?  BEQ 110$ ;IF EQ NO8 MOV $TKNPT,R0 ;GET TERMINATION NOTIFICATION TCB ADDRESS .IF DF R$$PRO@ .IIF NDF P$$OFF, .ERROR ;P/OS REQUIRES PARENT OFFSPRING SUPPORT( BNE 2000$ ;IF NE TKTN IS IN THE SYSTEM) TST T.OCBH-T.ST2(R5);TASK HAVE A PARENT?T/ BNE 110$ ;IF NE YES - OK, GO ON WITH THE EXITA BGCK$A BF.XIT,BE.NPA,FATAL ;A SYSTEM TASK (ONE WITHOUT A PARENT) $ ;ABORTED WITH NO TKTN - BUGCHECK .IFF ;R$$PROT+ BEQ 110$ ;IF EQ TKTN IS NOT IN THE SYSTEM# .ENDC ;R$$PROE2000$: CMP $TKTCB,R0 ;TERMINATION NOTIFICATION TASK BEING TERMINATED?O BEQ 103$ ;IF EQ YESE? CMPB #S.CTKN,T.EFLG-T.ST2(R5) ;PREVENT TKTN FROM BEING CALLED?A BNE 101$ ;IF NE, NOB BIC #T3.MCR!T3.CMD,T.ST3-T.ST2(R5) ;DON'T ISSUE PROMPT OR SNCMD  BR 110$ ;CONTINUE PROCESSING101$: 1 BIS #TS.MSG,-(R5) ;SET ABORT MESSAGE IN PROGRESSA4 CALL $EXRQN ;REQUEST TERMINATION NOTIFICATION TASK) CALLR $TKWSE ;WAITFOR SIGNIFICANT EVENTT-103$: MOV $ACTHD,R0 ;GET ADDRESS OF FIRST TCB#7107$: BIC #TS.MSG,T.STAT(R0) ;CLEAR WAITING FOR MESSAGEO. BIC #T2.ABO,T.ST2(R0) ;CLEAR MARKED FOR ABORT+ MOV T.ACTL(R0),R0 ;GET ADDRESS OF NEXT TCBR TST T.ACTL(R0) ;NULL TASK?A BNE 107$ ;IF NE MORE TO GO+110$: BIS #TS.EXE,-(R5) ;DEACTIVATE TASK ; BIC #TS.CKR!TS.CIP!TS.MSG!TS.RUN,(R5)+ ; CLEAR STATUS BITSS BIC #CLRMSK,(R5)+ ;= MOVB T.DPRI-T.ST3(R5),T.PRI-T.ST3(R5) ;RESTORE TASK PRIORITYT .IF DF L$$GCL' MOV R5,R0 ;GET POINTER TO CURRENT TCB0 SUB #T.ST3,R0 ;IN R0 9 MOV #LT.TSK,R1 ;INDICATE THAT DELETING ALL TASK LOGICALSA7 MOV #$LDELX,-(SP) ;JMP TO DELETE ROUTINE IN 4TH DIRCOMF0 CALL $MPDC3 ;MAP THE COMMON AND JMP TO ROUTINE .ENDC* MOV T.PCB-T.ST3(R5),R0 ;POINT TO TASK PCB T O .IF DF M$$PRO ,B CLR T.RRM-T.ST3(R5) ;ASSUME TASK WAS NOT INSTALLLED WITH AFFINITY? BIT #T2.AFF,T.ST2-T.ST3(R5) ;WAS TASK INSTALLED WITH AFFINITY?) BEQ 115$ ;NO IF EQ: MOV P.RRM(R0),T.RRM-T.ST3(R5) ;RESTORE INSTALLE00eAedD AFFINITY R .ENDC  03115$: BIT #PS.FXD,P.STAT(R0) ;TASK FIXED IN MEMORY?H BNE 130$ ;IF NE YESGC120$: BIS #PS.COM,P.STAT(R0) ;CONVERT TASK REGION TO UNNAMED COMMONL CLR P.ST2(R0) ; CLR P.NAM(R0) ; CLR P.NAM+2(R0) ;, MOV P.MAIN(R0),-(SP) ;SAVE MAIN PCB POINTER0 MOV R5,-(SP) ;SAVE ADDRESS OF THIRD STATUS WORD8125$: MOV (SP),R5 ;PICK UP ADDRESS OF THIRD STATUS WORD< MOV T.ATT-T.ST3(R5),R5 ;POINT TO NEXT ATTACHMENT DESCRIPTOR BEQ 126$ ;IF EQ THERE IS NONEM8 SUB #A.TCBL,R5 ;POINT TO START OF ATTACHMENT DESCRIPTOR( MOV A.TCB(R5),R0 ;POINT TO ATTACHED TCB MOV A.PCB(R5),R1 ;POINT TO PCBE! TSTB A.MPCT(R5) ;IS TASK MAPPED?O BEQ 1257$ ;NO IF EQN+ CLRB P.PRI(R1) ;INITIALIZE REGION PRIORITY) MOV R1,R2 ;COPY PCB ADDRESSM( ADD #P.ATT,R2 ;POINT TO ATTACHMENT LIST31251$: MOV (R2),R2 ;GET NEXT ATTACHMENT DESCRIPTORO BEQ 1252$ ;IF EQ END OF LIST( TSTB A.MPCT-A.PCBL(R2) ;IS TASK MAPPED? BEQ 1251$ ;IF EQ NON) MOV A.TCB-A.PCBL(R2),R3 ;GET TCB ADDRESSN6 ADD #T.ST3,R3 ;CALCULATE ADDRESS OF THIRD STATUS WORD$ CMP R3,(SP) ;SAME AS CURRENT TASK? BEQ 1251$ ;IF EQ YES1 CMPB T.PRI-T.ST3(R3),P.PRI(R1) ;HIGHER PRIORITY?D BLO 1251$ ;IF LO NOE- MOVB T.PRI-T.ST3(R3),P.PRI(R1) ;SET PRIORITY)5 INCB P.PRI(R1) ;PRIO OF COMMON IS ONE MORE THAN TASK  BR 1251$ ;GO AGAIN71252$: CLRB A.MPCT(R5) ;CLEAR MAPPING COUNT INTO REGION1 $ I .IF DF M$$PRO T+ CALL $RESBP ;RESET BYPASS AS APPROPRRIATE1 $ .ENDC N M CALL $DEARG ;DEACCESS REGION&1257$: CALL $DETRG ;DETACH THE REGION BR 125$ ;S8126$: MOV (SP)+,R5 ;RESTORE ADDRESS OF THIRD STATUS WORD7 TST T.STAT-T.ST3(R5) ;TASK REACTIVATED DURING $DXXRG ?R# ;HAPPENS WHEN $NXTSK IS CALLEDV% ;FROM $DXXRG WHEN TKTN EXITS ANDT% ;A CHECKPOINT ALLOCATION FAILUREO ;CAUSES TKTN TO RUN AGAIN) BPL 127$ ;IF PL YES, DON'T MODIFY T.PCBP1 MOV (SP),T.PCB-T.ST3(R5) ;RESET TASK PCB ADDRESS/127$: TST (SP)+ ;REMOVE PCB ADDRESS FROM STACK& BIT #T3.RST,(R5) ;RESTRICTED TASK? / BNE 130$ ;IF NE YES, DO NOT DEALLOCATE HEADERB .IF DF X$$HDR. TSTB T.HDLN-T.ST3(R5) ;RESIDENT TASK HEADER ?, BNE 130$ ;IF NE, NO. NOTHING TO DEALLOCATE .ENDC) MOV R4,R0 ;SET ADDRESS OF TASK HEADER 1 MOV H.HDLN(R0),R1 ;GET LENGTH OF HEADER IN BYTESI CALL $DEACB ;DEALLOCATE HEADER130$: ;+; ** W A R N I N G **F; ; SPM HOOKPOINT NUMBER 03.;(); DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;-+$SPH03==. ;SPM CHANGES THE INSTRUCTION AT  ;THE LOCATION OF THIS LABELD, MOV @#$TKTCB,R0 ;GET ADDRESS OF CURRENT TCB . N .IF DF N$$DIR$ MOV T.CTX(R0),R1 ;GET CONTEXT BLOCK# BEQ 133$ ;IF EQ, NO CONTEXT BLOCK' CALL $DLCTX ;DEALLOCATE CONTEXT BLOCK ! CLR T.CTX(R0) ;CLEAR CTX POINTER 133$: ;REFERENCE POINTERB .ENDC ; DF N$$DIR $ .IF DF A$$CNT N- CLR T.EFLM(R0) ;ASSUME NO TIME LIMIT ON TASK CLR T.EFLM+2(R0) ;N, TST T.ACN(R0) ;IS THERE AN ACCOUNTING BLOCK BEQ 160$ ;IF EQ NO MOV R0,R4 ;SAVE TCB ADDRESSA1 TSTB $BILNG ;IS CPU TIME CURRENTLY BEING BILLEDC BNE 135$ ;IF NE NO6 CALL $CPUTM ;CALCULATE LAST SEGMENT OF CPU TIME USED7135$: MOV T.ACN(R4),R1 ;GET ADDRESS OF ACCOUNTING BLOCK' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING $ MOV R1,KISAR6 ;MAP ACCOUNTING BLOCK+ CMPB #BT.TAB,@#B.TYP+140000 ;IS THIS A TAB$ BNE 140$ ;IF NE NO. MOV @#B.PNT+140000,-(SP) ;SAVE POINTER TO UAB; MOV @#B.CPUL+140000,T.EFLM(R4) ;PUT TIME LIMIT BACK IN TCBO% MOV @#B.CPUL+2+140000,T.EFLM+2(R4) ;V8 BITB #BS.TML,@#B.STM+140000 ;IS TAB FOR TIME LIMIT ONLY BEQ 137$ ;IF EQ NO MOV R1,R0 ;GET TAB ADDRESS MOV #B.TBLK,R1 ;SIZE OF TAB CALL $DESEC ;DEALLOCATE TABC BR 138$ ; >137$: MOV T.EFLG+2(R4),@#B.EXST+140000 ;PUT EXIT STATUS IN TAB9 MOVB T.EFLG(R4),R0 ;GET TKTN ABORT CODE WITH SIGN EXTEND,5 MOV R0,@#B.EXST+2+140000 ;PUT TKTN ABORT CODE IN TABM, BICB #BS.ACT,@#B.STM+140000 ;DEACTIVATE TAB# CALL $QACNT ;OUTPUT TAB TO SYSLOGT!138$: MOV (SP)+,R1 ;POINT TO UAB U MOV R1,KISAR6 ;MAP UABV5140$: DEC @#B.ACT+140000 ;DECREMENT ACTIVE TASK COUNTN0 DECB @#B.USE+140000 ;00ejecDATADATADATADATADATADATADATADECREMENT USE COUNT OF UAB# BGT 150$ ;IF GT, UAB STILL ACTIVEC, BICB #BS.ACT,@#B.STM+140000 ;DEACTIVATE UAB# CALL $QACNT ;OUTPUT UAB TO SYSLOG;0150$: MOV (SP)+,KISAR6 ;RESTORE ORIGINAL MAPPING MOV R4,R0 ;RESTORE TCB ADDRESS- CLR T.ACN(R0) ;ZERO ACCOUNTING BLOCK POINTERI160$: C .ENDC # T? BIC #T4.CTC,T.ST4-T.ST3(R5) ;CLEAR THE ^C ABORT PROCESSING BIT3. CALL $ACTRM ;REMOVE TCB FROM THE ATL QUEUE 0 BIT #T3.MCR,(R5) ;MCR EXTERNAL FUNCTION TASK?  BEQ 175$ ;IF EQ NO+ MOV T.UCB-T.ST3(R5),R1 ;GET TI UCB ADDRESS-170$: MOV U.RED(R1),R1 ;FOLLOW REDIRECT CHAIN.( CMP U.RED(R1),R1 ;IS DEVICE REDIRECTED? BNE 170$ ;IF NE YESS+ BIT #DV.TTY,U.CW1(R1) ;IS IT A TTY DEVICE?N BEQ 175$ ;IF EQ NO( MOV T.UCB-T.ST3(R5),R2 ;GET UCB ADDRESS' MOV #CC.EXT,R1 ;ISSUE TASK EXIT PROMPT0 BIT #T3.CMD,(R5) ;IS TASK EXECUTING CLI COMMAND BEQ 173$ ;IF EQ NO0 BIS #CC.TTD,R1 ;FORCE $SNCMD TO BE CALLED LATER/173$: CALL $QCNTP ;ISSUE PROMPT REQUEST TO MCRT BR 177$ ;15175$: BIT #T3.CMD,(R5) ;IS TASK EXECUTING CLI COMMANDR BEQ 180$ ;IF EQ NO( MOV T.UCB-T.ST3(R5),R0 ;GET UCB ADDRESS8 CALL $SNCMD ;TELL TTDRV TO SEND NEXT COMMAND TO MCR...0177$: BIC #T3.MCR!T3.CMD,(R5) ;CLEAR STATUS BITS180$: ;REFERENCE LABEL  .IF DF P$$OFF S / MOV R5,R0 ;COPY POINTER TO THIRD STATUS WORD I4 ADD #T.OCBH-T.ST3,R0 ;POINT TO OCB QUEUE LISTHEAD ! CALL $QRMVF ;REMOVE NEXT OCB A" BCS 190$ ;IF CS THERE IS NONE 6 MOV T.EFLG+2-T.ST3(R5),R0 ;PICK UP SAVED EXIT STATUS . MOVB T.EFLG-T.ST3(R5),R2 ;GET TKTN ABORT CODE, CALL $QUEXT ;QUEUE EXIT STATUS TO PARENT  BR 180$ ;GO AGAIN E190$: ;REFERENCE LABEL  .ENDC .IF DF C$$RTK ;IF REMOTE TASK 0 BIT #F5.RTK,$FMSK5 ;ARE REMOTE TASKS BEING USED BEQ 199$ ;IF EQ NO;0/; SEND TASK TERMINATION REQUST TO REMOTE SYSTEMC;T$ MOV $TKTCB,R5 ;GET CURRENT TASK TCB8 CMPB T.LBN(R5),$RMTSK ;IS THIS ONE OF THE STATIC TASKS?( BLOS 198$ ;IF LOS YES, DON'T TERMINATE% CMPB #-1,T.LBN(R5) ;TASK'S AME GONE?F& BEQ 198$ ;YES, DON'T TRY TERMINATION7 TSTB T.LBN(R5) ;DID THE AME EVER KNOW ABOUT THIS TASK? 7 BEQ 197$ ;NO, DON'T TERMINATE, BUT DISABLE TASK INDEX MOV #AL$SWS,R0 ;SET FLAG AS SWS$ MOV #1,R1 ;ONLY NEED ONE 32W BLOCK) MOV R2,-(SP) ;SAVE A COUPLE OF REGISTERSE MOV R3,-(SP)D CALL $CPALO ;ALLOCATE A BLOCK BCC 196$ ;CC = OKAY KEEP GOING, ADD #4,SP ;CLR OFF STACK - DONT NEED REG'S JMP TKWSE ;RETRY LATER.?,196$: MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING" MOV R0,KISAR6 ;MAP REQUEST PACKET3 MOVB #HT$TKN,H$TYPE+MAP6 ;TYPE IS TASK TERMINATION5" MOV (SP)+,KISAR6 ;RESTORE MAPPING MOV R4,-(SP)7 MOV R5,-(SP)E8 CPSEN$ #SN$DET,R0,#H$SIZE ;SEND PKT AS DETACHED REQUEST* MOV (SP)+,R5 ;RESTORE ALL SAVED REGISTERS MOV (SP)+,R4P MOV (SP)+,R3E MOV (SP)+,R2@197$: MOVB #-1,T.LBN(R5) ;SIGNAL TASK HAS NO AME OR IS DISABLED3198$: ADD #T.ST3,R5 ;RESTORE R5 BACK TO STATUS WORDE199$:S .ENDC ;C$$RTK .IF DF V$$TRM&P$$OFF 6 CALL $TICLR ;CLEAR OUT POSSIBLE TI:=VTNN: ASSIGNMENT .ENDC1 BIT #T3.REM,(R5) ;REMOVE TASK AT EXIT? (T.ST3) O BEQ 300$ ;IF EQ NO/ MOV R5,R0 ;COPY POINTER TO THIRD STATUS WORD ( SUB #T.ST3,R0 ;POINT TO START OF TCB ( CALL $REMOV ;REMOVE TASK FROM SYSTEM  .IF DF C$$RTK ;IF REMOTE TASKM0 BIT #F5.RTK,$FMSK5 ;ARE REMOTE TASKS BEING USED BEQ 300$ ;IF EQ NO> BIT #T4.RIN,T.ST4-T.ST3(R5) ;WAS THIS TASK REMOTLY INSTALLED? BEQ 300$ ;IF EQ NO;C%; SEND REMOVE REQUST TO REMOTE SYSTEMC; MOV #AL$SWS,R0 ;SET FLAG AS SWS$ MOV #1,R1 ;ONLY NEED ONE 32W BLOCK) MOV R2,-(SP) ;SAVE A COUPLE OF REGISTERSB MOV R3,-(SP)  CALL $CPALO ;ALLOCATE A BLOCKT BCC 200$ ;CC = OKAY KEEP GOING, ADD #4,SP ;CLR OFF STACK - DONT NEED REG'S JMP TKWSE ;RETRY LATER..200$:$' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGM" MOV R0,KISAR6 ;MAP REQUEST PACKET) MOVB #HT$REM,H$TYPE+MAP6 ;TYPE IS REMOVE32 MOV T.LBN+1-T.ST3(R5),P$IID+MAP6 ;GET IMAGE INDEX" CLR P$IID+2+MAP6 ;CLEAR NEXT WORD" MOV (SP)+,KISAR6 ;RESTORE MAPPING MOV R4,-(SP)S MOV R00eAed5,-(SP) : CPSEN$ #SN$DET,R0,#H$SIZE+4 ;SEND PKT AS DETACHED REQUEST* MOV (SP)+,R5 ;RESTORE ALL SAVED REGISTERS MOV (SP)+,R4 MOV (SP)+,R3= MOV (SP)+,R2G .ENDC ;C$$RTK300$:A .IF DF X$$HDR1 CLR $SAHPT ;DO NOT SAVE CONTEXT OF CURRENT TASK, .IFFV1 CLR $HEADR ;DO NOT SAVE CONTEXT OF CURRENT TASKT M .ENDC" CLR $TKTCB ;SHOW NO CURRENT TASK L 1 .IF DF M$$PRO P) CLR @$TKPTR ;SAME HERE FOR COMMON TABLER X .ENDC V P+ CALLR $DRDSE ;DECLARE SIGNIFICANT EVENT M ;C; SUBROUTINE TO EMPTY QUEUEE;P H R .IF DF K$$DAS R<MTQUE: BIC #PMODE,PS ;SET PREVIOUS MODE TO KERNEL FOR PARAMS* MFPI (R5)+ ;GET OFFSET TO QUEUE LISTHEAD MOV (SP)+,R4 ;10$: ;REF LABEL V .IFFX F1MTQUE: MOV (R5)+,R4 ;GET OFFSET TO QUEUE LISTHEADV*10$: TST (R5)+ ;ADVANCE TO RETURN ADDRESS $ .IFTF W&13$: MOV (SP),R0 ;PICK UP TCB ADDRESS$ ADD R4,R0 ;POINT TO QUEUE LISTHEAD) CALL $QRMVF ;REMOVE AN ENTRY FROM QUEUES BCS 40$ ;IF CS NO ENTRIES LEFT/ MOV R1,R0 ;SET ADDRESS OF BLOCK TO DEALLOCATE CMP R4,#T.ASTL ;AST?  BNE 20$ ;IF NE NOC4 MOVB 2(R0),R1 ;SET LENGTH OF BLOCK (FOR AST'S ONLY). BGT 20$ ;IF GT LENGTH SPECIFIED (AST'S ONLY) BMI 30$ ;0- TST 2(R0) ;IS IT UNSOLICITED CHARACTER AST?5( BNE 18$ ;IF NE NO IT'S A SPECIFIED AST MOV R4,-(SP) ;SAVE R4 MOV R5,-(SP) ;SAVE R55 CMP -(R0),-(R0) ;POINT TO KISAR5 VALUE OF DEALL SUBR,+ MOV (R0)+,-(SP) ;GET MAPPING OF SUBROUTINER3 MOV (R0)+,-(SP) ;GET ADDRESS OF DEALLOCATE ROUTINEE( CALL $MPPRO ;CALL DEALLOCATION ROUTINE MOV (SP)+,R5 ;RESTORE R5A MOV (SP)+,R4 ;RESTORE R4E BR 13$ ;GO AGAIN118$: MOV #C.LGTH,R1 ;SET SIZE OF BLOCK TO RELEASEI8 CMPB 3(R0),#AS.PEA ;IS THIS A PARITY AST CONTROL BLOCK? BNE 20$ ;IF NE NOD$ MOV #A.PLGH,R1 ;GET LENGTH OF BLOCK+20$: CMP R4,#T.RRFL ;PROCESSING RREF QUEUE? BNE 23$ ;IF NE NO5' MOV 2(R0),R1 ;GET SENDER'S TCB ADDRESS / BEQ 23$ ;IF EQ NO EVENT FLAG RUNDOWN POSSIBLES' CMP $TKTCB,R1 ;CHECK IF SENDER IS SELF & BEQ 23$ ;IF EQ YES, DEALLOCATE BLOCK; MOV #AK.GGF,A.CBL(R0) ;CONVERT TO KERNAL AST CONTROL BLOCKP, ADD #T.ASTL,R1 ;POINT TO SENDER'S AST QUEUE4 MOV (R1),(R0) ;ESTABLISH PACKET'S POSITION IN QUEUE$ BNE 21$ ;IF NE QUEUE WAS NOT EMPTY% MOV R0,2(R1) ;ESTABLISH END OF QUEUE#/21$: MOV R0,(R1) ;ESTABLISH BEGINNING OF QUEUEF BR 13$ ;DEALLOCATE NEXT PACKET23$: .IFT ;K$$DASR. MFPI (R5) ;PUSH DEALLOCATION ROUTINE ADDRESS CALL @(SP)+ ;CALL ROUTINEL .IFF ;K$$DAS1$ CALL @-(R5) ;DEALLOCATE CORE BLOCK .IFTF ;K$$DAS BR 10$ ;GO AGAIN30$: ;REFERENCE LABEL < BGCK$A BF.XIT,BE.SGN,FATAL ;NO KERNEL ASTS SHOULD EXIST NOW40$: ;REF LABEL A .IFTA T/ TST (R5)+ ;ADVANCE R5 TO EQUAL RETURN ADDRESSN- BIS #PMODE,PS ;RESTORE PREVIOUS MODE TO USER# 1 .ENDC R  RTS R5 ;RETURN TO CALLER ; ; EMPTY THE RECEIVE LIST.T9; IN A SYSTEM SUPPORTING SECONDARY POOL, THE RECEIVE LISTR:; CONTAINS DATA PACKETS ALLOCATED FROM THE SECONDARY POOL.; C  .IF DF P$$OOL 8MTRCVL: MOV KISAR6,-(SP) ;SAVE KERNEL MAPPING REGISTER 5 MOV R5,R4 ;COPY TCB ADDRESS & ADD #T.RCVL,R4 ;POINT TO RECEIVE LIST&10$: MOV R4,R0 ;GET LIST HEAD ADDRESS3 CALL $QSPRF ;REMOVE THE NEXT PACKET FROM THE LISTR BCS 100$ ;IF CS DONE .IF DF V$$TRM' MOV R1,-(SP) ;SAVE PACKET ADDRESS BIASE MOV R1,KISAR6 ;MAP PACKET' MOV @#140002,-(SP) ;GET SIZE OF PACKETP- BIT #T3.SLV,T.ST3(R5) ;IS THIS A SLAVE TASK?T& BEQ 50$ ;IF EQ NO RUN DOWN NECESSARY. MOV (SP),R1 ;CALCULATE ADDRESS OF UCB IN PKT! ASL R1 ;CONVERT OFFSET TO BYTES * MOV 140004(R1),R0 ;GET UCB ADDRESS IN PKT MOV @R0,R1 ;GET DCB ADDRESST" CMP D.NAM(R1),#"VT ;IS THIS A VT? BNE 50$ ;IF NE NOC. DECB U.OCNT(R0) ;DECREMENT VT OFFSPRING COUNT' BNE 50$ ;IF NE THERE'S MORE OFFSPRINGT* TST U.PTCB(R0) ;HAS THE PARENT GONE AWAY? BNE 50$ ;IF NE NOA .IF DF D$$PAR .IF NDF K$$DASS1 MOV 4(SP),KISAR6 ;REMAP APR6 TO ORIGINAL MAPPINGV ;WHICH MUST SHARE KISAR5 .ENDC .ENDC, CALL $DEAVT ;DEALLOCATE VT DATA STRUCTURES&50$: MOV (SP)+,R1 ;R00ehecDATADATADATADATADATADATADATAESTORE PACKET SIZE- MOV (SP)+,R0 ;RESTORE ADDRESS BIAS OF PACKET@ .IF DF D$$PAR .IF NDF K$$DASM MOV R0,KISAR6 ;REMAP PACKET .ENDC .ENDC .IFFT4 MOV R1,R0 ;COPY PACKET ADDRESS FOR DEALLOC ROUTINE. MOV R1,KISAR6 ;MAP TO THE PACKET THROUGH APR5' MOV @#140002,R1 ;CALCULATE PACKET SIZE .ENDC ;V$$TRM .IF DF N$$DIR V1 BIT #T3.SLV,T.ST3(R5) ;IS RECEIVER A SLAVE TASK? + BEQ 80$ ;IF EQ, NO - NO CONTEXT BLOCK PTR MOV R1,-(SP) ;SAVE SIZE ASL R1 ;CONVERT TO BYTES- MOV 140014(R1),R1 ;GET CONTEXT BLOCK POINTERR BEQ 70$ ;IF EQ, NONE# CALL $DLCTX ;DELETE CONTEXT BLOCK$70$: MOV (SP)+,R1 ;RESTORE SIZEK+80$: ADD #<7.+37>,R1 ;INCLUDE CONTROL WORDS  .IFFK' ADD #<6.+37>,R1 ;INCLUDE CONTROL WORDSA .ENDC ;DF N$$DIR ' ASH #-5,R1 ;CONVERT TO 32. WORD UNITSA$ CALL $DESEC ;DEALLOCATE THE PACKET BR 10$ ;GO AGAIN2100$: MOV (SP)+,KISAR6 ;RESTORE MAPPING REGISTER 5 RETURN ;O N .ENDC L ; '; CO-ROUTINE TO SCAN LOGICAL UNIT TABLET; ((SCNLN: MOV (SP),R3 ;SAVE RETURN ADDRESS CLR (SP) ;START AT LUN ZERO 310$: MOV $TKTCB,R5 ;GET ADDRESS OF CURRENT TASK TCBZ .IF DF X$$HDR' MOV $SAHPT,R4 ;GET CURRENT TASK HEADER MOV $SAHDB,KISAR6 ;MAP IT .IFFD' MOV $HEADR,R4 ;GET CURRENT TASK HEADERO .ENDC&20$: MOV (SP),R1 ;GET NEXT LUN NUMBER INC (SP) ;INCREMENT LUN NUMBER! CMP H.NLUN(R4),(SP) ;END OF LUT?N BLO 30$ ;IF LO YES, CALL $MPLNE ;MAP LUN NUMBER TO UCB ADDRESS* BCS 20$ ;IF CS NO DEVICE ASSIGNED TO LUN0 BIT #DV.ISP!DV.OSP,U.CW1(R2) ;SPOOLED DEVICE?  BEQ 25$ ;IF EQ NO Z( CMP U.ATT(R2),R5 ;SPOOLER TASK EXIT?  BEQ 25$ ;IF EQ YES . MOV R0,R2 ;ELSE USE INTERMEDIATE DEVICE UCB % CLC ;INSURE C - CLEAR FOR RETURN F-25$: MOV R2,R5 ;SET UCB ADDRESS FOR RETURN $ CALL (R3) ;CALL THE CALLER BACK & MOV (SP)+,R3 ;RETRIEVE RETURN ADDRESS BR 10$ ;GO AGAIN%30$: MOV R3,(SP) ;SET RETURN ADDRESSO RETURN ;M L;+5; ** - LTPRE - CALL LAT PROCESS FOR EXIT NOTIFICATIONE;OF; THIS ROUTINE NOTIFIES THE LAT PROCESS WHEN AN EXITING TASK HAS A LUNO; ASSIGNED TO A LAT APPLICATIONS TERMINAL SO THAT A DISCONNECT MAY BE PERFORMEDV;, ; INPUTS:S; R5 = UCB ADDRESS;C ; OUTPUTS:$; LAT PROCESS NOTIFIED IF NECESSARY.;- .IF DF M$$NET&T$$LTHR(LTPRE: MOV U.DCB(R5),R0 ;GET DCB ADDRESS) CMP #"TT,D.NAM(R0) ;IS IT A TT TERMINAL?S BNE 10$ ;IF NE NO2 BIT #S6.LAT,U.TST6(R5) ;LAT APPLICATION TERMINAL? BEQ 10$ ;IF EQ NOL! MOV U.SCB(R5),R4 ;R4-SCB ADDRESST MOV S.KRB+2(R4),-(SP) ;BIAS, MOV $LTEEP,-(SP) ;VIRT ADDR = LAT PROC EXIT ;ENTRY POINT) CALL $MPPRO ;MAPS AND CALLS LAT PROCESSI ;RESTORES SP 10$: RETURN .ENDC ; DF M$$NET&T$$LTHS;+5; **-$RLMCB-RELEASE COMMAND BUFFERS QUEUED FOR A TASK.;D ; INPUTS:$;R?; R5=ADDRESS OF TCB OF THE TASK WHOSE BUFFERS SHOULD BE DELETED ; ; OUTPUTS:;L-; ALL COMMAND LINES FOR THE TASK ARE RELEASED(; ;-.$RLMCB::MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING/10$: CALL $SCMDQ ;FIND A COMMAND FOR THIS TASKR BCS 30$ ;IF CS, NO MOREE MOV R0,R1 ;COPY ADDRESSO" MOV #$CLICQ,R0 ;POINT TO LISTHEAD CALL $GTSPK ;UNLINK IT MOV R1,KISAR6 ;MAP BLOCK0< BIT #CC.TTD,@#C.CSTS+140000 ;DID COMMAND ORIGINATE IN TTDRV BEQ 20$ ;IF EQ NOR( MOV @#C.CUCB+140000,R0 ;GET UCB ADDRESS. CALL $SNCMD ;TELL TTDRV TO SEND NEXT COMMAND20$: MOV KISAR6,R0 ;GET ADDRESS" MOVB C.CBLK+140000,R1 ;GET LENGTH CALL $DESEC ;DEALLOCATE IT BR 10$ ;CHECK FOR ANY MORE&30$: MOV (SP)+,KISAR6 ;RESTORE MAPPING DUN: RETURNH .END B .TITLE DREXP .IDENT /05.04/ ;;5; COPYRIGHT (C) 1987 BY DIGITAL EQUIPMENT CORPORATION %; MAYNARD, MASS. ALL RIGHTS RESERVED.;F<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;;; T. J. MILLER 8-JUL-76 ;C); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:S; ; M. S. FOXE; J. M. LAWLER; B. S. MCCARTHY; +; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:B;D; J. R. KAUFFMAN; J. M. LAWLER; L. B. MCCULLEY;D+; MODI00heAedFIED FOR RSX-11M-PLUS VERSION 4.0 BY:;; ; B. S. MCCARTHY; +; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY:S;A; B. S. MCCARTHY 4-NOV-87 05.04S;W7; BM404 -- ADD SUPPORT FOR D SPACE OVERMAP CHECK FIELDP; ; MACRO LIBRARY CALLS ; # .MCALL HWDDF$,HDRDF$,PCBDF$,TCBDF$L" HWDDF$ ;DEFINE HARDWARE OFFSETS% HDRDF$ ;DEFINE TASK HEADER OFFSETSO1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSD, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS A M;+; **-$DREXP-EXTEND PARTITION;DD; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EXTEND THE PARTITION OF THE3; ISSUING TASK BY A POSITIVE OR NEGATIVE INCREMENT.;. ; DPB FORMAT:N;8"; WD. 00 -- DIC(89.),DPB SIZE(3.).; WD. 01 -- EXTEND INCREMENT.L; WD. 02 -- RESERVED. ;L ; INPUTS:.;L@; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.0; R3=ADDRESS OF THE EXTEND INCREMENT IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.F,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)I;R-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.(; DIRECTIVE STATUS OF '+1' IS RETURNED.;E; C=1 IF DIRECTIVE IS REJECTED. 9; DIRECTIVE STATUS OF 'D.RS8' IF TASK NOT IN SYSTEM CON-E1; TROLLED PARTITION, TASK IS NOT CHECKPOINTABLE 1; AND SPECIFIED POSITIVE INCREMENT, OR TASK HASR2; PREALLOCATED CHECKPOINT SPACE AND IS EXTENDING ; GREATER THAN INSTALLED SIZE.9; DIRECTIVE STATUS OF 'D.RS88' IF SPECIFIED INCREMENT ISR ; INVALID.;- .IF DF E$$XPR A N .IF DF D$$PAR$DRXP1:: .IFF ; DF D$$PARY$DREXP:: .ENDC ; DF D$$PAR .IF DF U$$DAS!S$$LIB 4 MOV H.SMAP(R4),-(SP) ;KEEP A COPY OF SUPER AND USER ;MAPPING MASKS  .ENDC ; DF U$$DAS!S$$LIBT=; FIRST DETERMINE THAT THE TASK HAS NO I/O IN PROGRESS TO ITSE1; TASK REGION, AND DISALLOW DIRECTIVE IF IT DOES.C4 MOV T.ATT(R5),R0 ;POINT TO ATT DESC FOR TASK REGION> TSTB A.IOC-A.TCBL(R0) ;DOES TASK HAVE I/O THROUGH THIS DESCR? BEQ 5$ ;IF EQ NO DRSTS D.RS83 ;IO IN PROGRESS?; NEXT CHECK FOR OTHER TASKS HAVING AN ATTACHMENT DESCRIPTOR TO.@; THE ISSUING TASKS TASK REGION. IF THEY DO, WE CAN'T UPDATE THE&; WINDOW SO WE DISALLOW THE DIRECTIVE.'5$: MOV T.PCB(R5),R0 ;POINT TO TASK PCBI0 TST @P.ATT(R0) ;ARE THERE OTHER TASKS ATTACHED? BEQ 7$ ;IF EQ NO( DRSTS D.RS17 ;OTHER TASKS ARE ATTACHEDA; CALCULATE POTENTIAL NEW SIZE OF TASK REGION BASED ON P.SWSZ ANDTA; THE INCREMENT IN THE DPB, DEFAULTING TO T.MXSZ IF THE INCREMENT5; WAS NOT SPECIFIED.97$: MOV T.MXSZ(R5),R1 ;ASSUME RETURNING TO INSTALLED SIZE * MOV (R3),R3 ;PICK UP SPECIFIED INCREMENT* BEQ 10$ ;IF EQ DEFAULT TO INSTALLED SIZE& ADD P.SWSZ(R0),R3 ;CALCULATE NEW SIZE MOV R3,R1 ;COPY NEW SIZE=; VERIFY THAT THE NEW SIZE IS LEGAL BY CHECKING FOR EXCEEDINGT>; $MXEXT AND IF TASK HAS ALLOCATED CHECKPOINT SPACE IS THE NEW; SIZE TOO BIG.T-10$: CMP R1,P.SWSZ(R0) ;TASK INCREASING SIZE?S BLO 30$ ;IF LOS NO1 CMP R1,$MXEXT ;INCREASING PAST CURRENT MAXIMUM? 5 BHI 45$ ;IF HI YES 4 BIT #PS.CHK!PS.FXD,P.STAT(R0) ;TASK CHECKPOINTABLE? BEQ 20$ ;IF EQ YES* DRSTS D.RS10 ;TASK IS NOT CHECKPOINTABLE>20$: BIT #T3.CAL,2(R2) ;TASK HAVE CHECKPOINT SPACE ALLOCATED?  BEQ 30$ ;IF EQ NO ; CMP R1,T.MXSZ(R5) ;EXTENDING TO LARGER THAN INSTALLED SIZEX BLOS 30$ ;IF LOS NOI DRSTS D.RS18 ;YES, ILLEGAL<; CALCULATE NEW SIZE FROM VIRTUAL ZERO AND VALIDATE THAT THE!; HEADER STILL FITS IN THE REGIONI 30$: ;P .IF DF P$$LAS( MOV R1,-(SP) ;SAVE NEW TASK REGION SIZE0 SUB T.OFF(R5),R1 ;NORMALIZE TO TASK REGION ZERO .ENDC ; DF P$$LAS. MOV R1,-(SP) ;COPY NEW SIZE FROM VIRTUAL ZERO" SWAB (SP) ;CONVERT SIZE TO BYTES RORB (SP) ;I ROR (SP) ; ROR (SP) ; .IF DF P$$LAS( CMP R1,#200 ;NEW SIZE GREATER THAN 4K? BHI 35$ ;IF HI YES .ENDC8 CMP (SP),H.HDLN(R4) ;NEW TASK SIZE SMALLER THAN HEADER? BLO 45$ ;IF LO YESB; CHECK THROUGH THE WINDOWS FOR ONE WHICH OVERLAPS THE NEW SIZE OF&; THE TASK WINDOW 0 (OR 1 IF I/D TASK)735$: MOV H.WND(R4),R4 ;POINT TO NUMBER OF WI00heecDATADATADATADATADATADATADATANDOW BLOCKSK .IF DF U$$DAS- TST $DICSV+4 ;WAS AN OVERLAP MASK SPECIFIED?F BEQ 359$ ;IF EQ NO * BIT #T3.ROV,T.ST3(R5) ;RESIDENT OVERLAID?2 BNE 359$ ;IF NE YES, DON'T NEED TO CHECK OVERLAP0 MOVB W.BFPD+2(R4),R3 ;GET PDR ADDRESS (I SPACE)& SUB #UISDR0,R3 ;ADJUST TO OFFSET ZERO< BIT #T4.DSP,T.ST4(R5) ;TASK BUILD WITH SEPARATE I/D SPACE ?2 BEQ 355$ ;IF EQ NO, RETURN WITH ALL OVERMAP MASK- MOVB W.BFPD+W.BLGH+2(R4),R3 ;GET PDR ADDRESS & SUB #UDSDR0,R3 ;ADJUST TO OFFSET ZERO$355$: ASR R3 ;CONVERT TO BYTE INDEX$ MOVB R1,R2 ;GET NEW SIZE OF WINDOW, ADD #177,R2 ;ROUND UP TO NEXT APR BOUNDARY' ASH #-7,R2 ;CONVERT TO NUMBER OF APRSL& ADD R3,R2 ;FORM ENDING PDR NUMBER +1. MOVB $BCMSK-1(R2),R2 ;GET MASK UP TO LAST APR/ BICB $BCMSK-1(R3),R2 ;GET MASK UP TO FIRST APRF BIT R2,$DICSV+4 ;ANY OVERLAP?$ BNE 90$ ;IF NE YES, ILLEGAL EXTEND359$:3 .ENDC ;DF U$$DASN. MOV (R4)+,R2 ;PICK UP NUMBER OF WINDOW BLOCKS. TST (R4)+ ;POINT TO TASK LOW VIRTUAL ADDRESS .IF DF U$$DAS6 BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH SEPARATE I/D ? BEQ 36$ ;IF EQ NO71 ADD #W.BLGH,R4 ;YES, POINT TO WINDOW 1 - D SPACE; DEC R2 ;ADJUST WINDOW COUNTD 36$: ;R .ENDC ; DF U$$DAS .IF DF P$$LAS5 BIT #T3.ROV,T.ST3(R5) ;TASK HAVE RESIDENT OVERLAYS ?M- BNE 42$ ;IF NE YES, KEEP WINDOW ZERO INTACTR .ENDC ; DF P$$LAS/ MOV (R4),R3 ;PICK UP TASK LOW VIRTUAL ADDRESS ASL R3 ;CONVERT TO 32W BLOCKSF ROL R3 ; ROLB R3 ;+ SWAB R3 ;A4 ADD R1,R3 ;CALC HIGH VIRTUAL ADDRESS IN 32W BLOCKS CMP R3,#2000 ;LEGAL SIZE? BHIS 45$ ;IF HIS NO3537$: ADD (R4),(SP) ;CALCULATE NEW TOP VIRTUAL ADDRESS '40$: DEC R2 ;MORE WINDOW BLOCKS TO GO?D BLE 50$ ;IF LE NOC5 ADD #W.BLGH,R4 ;POINT TO LOW VIRTUAL ADDRESS OF NEXTR+ TST W.BSIZ-W.BLVR(R4) ;ESTABLISHED WINDOW?  BEQ 40$ ;IF EQ NOO E .IF DF U$$DAS< BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH SEPARATE I/D SPACE ? BEQ 41$ ;IF EQ NO 5 BITB #20,W.BFPD-W.BLVR(R4) ;IS THIS D SPACE WINDOW ? BEQ 40$ ;IF EQ NO, DON'T CHECK41$: ;REFERENCE LABEL .ENDC ; DF U$$DAS I .IF DF P$$LAS A CMP W.BPCB-W.BLVR(R4),R0 ;WINDOW MAPPED TO TASK REGION? (W.BPCB)  BEQ 42$ ;IF EQ YES .IF DF S$$LIB+ TSTB W.BFPD-W.BLVR(R4) ;SUPERVISOR WINDOW?A BPL 40$ ;IF PL YES .ENDC ; DF S$$LIB# BR 44$ ;CHECK FOR ADDRESS OVERLAPN842$: MOV 2(R4),R3 ;PICK UP HIGH VIRTUAL ADDRESS (W.BHVR)* SUB (R4),R3 ;CALCULATE LENGTH OF MAP - 1! INC R3 ;CALCULATE LENGTH OF MAP4' ASH #-6,R3 ;CONVERT TO 32 WORD BLOCKSI BIC #176000,R3 ;K: ADD W.BOFF-W.BLVR(R4),R3 ;CALCULATE LAST 32W BLOCK MAPPED3 CMP 2(SP),R3 ;REDUCING SIZE CONFLICT WITH WINDOW ?D BLO 90$ ;IF LO YES744$: BIT #T3.ROV,T.ST3(R5) ;IS TASK RESIDENT OVERLAID ?F2 BNE 40$ ;IF NE YES, UNCHANGED VIRTUAL ADDRESSING S .ENDC ; ( CMP (SP),(R4) ;VIRTUAL ADDRESS OVERLAP? BLOS 40$ ;IF LOS NO 45$: BR 90$ ;ILLEGAL SIZE 50$: TST (SP)+ ;CLEAN STACK 6; CHECK TO SEE IF TASK REGION CAN BE EXTENDED IN PLACE .IF DF P$$LAS+ MOV (SP)+,R1 ;RESTORE NEW TASK REGION SIZEF .ENDC ; DF P$$LAS/ MOV P.MAIN(R0),R2 ;POINT TO MAIN PARTITION PCB 0 CMP R1,P.SIZE(R2) ;MAIN PARTITION LARGE ENOUGH? BHI 90$ ;IF HI NOS4 MOV R1,P.SWSZ(R0) ;SET SWAP SIZE FOR TASK PARTITION, CLR R4 ;INITIALIZE END OF HOLE CALCULATION6 MOV P.SUB(R0),R3 ;POINT TO NEXT SUBPAR AFTER TASK PAR BNE 60$ ;IF NE THERE IS ONE ) MOV R2,R3 ;ELSE POINT TO MAIN PARTITIONS) ADD P.SIZE(R3),R4 ;CALCULATE END OF HOLEA60$: ADD P.REL(R3),R4 ;1 MOV P.REL(R0),R3 ;CALCULATE END OF DESIRED SPACE ADD R1,R3 ;' CMP R3,R4 ;WILL EXTEND WORK IN PLACE?; BLOS 70$ ;IF LOS YESD; TASK REGION COULD NOT BE EXTENDED IN PLACE - ATTEMPT TO CHECKPOINT.; SO THAT WE CAN BRING TASK IN AT ITS NEW SIZE! CALL $SETRT ;FORCE RESCHEDULINGO$ MOV T.PCB(R5),R1 ;POINT TO TASK PCB .IF DF A$$CNT: BIS #BF.XTK,$ACNFE ;SET FLAG SO CHECKPOINT IS NOT COUNTED .ENDC ;A$$CNT& CALL $ICHKP ;INITIATE THE CHECKPOINT* MOV T.PCB(R5),R0 ;POINT TO TASK PCB AGAIN6 BIT #PS.CKP,P.STAT(R0) ;WAS THE CHECKPOINT INITIATED? BEQ 600heAed5$ ;IF EQ NOW1 TALLY$ B.CKEX,XA$$CP ;COUNT AN EXTEND CHECKPOINT .IF DF U$$DAS!S$$LIBE* TST (SP)+ ;CLEAN MAPPING WORDS OFF STACK .ENDC ; DF U$$DAS!S$$LIBA RETURN ;); DIRECTIVE RETURN FOR INVALID INCREMENT P/90$: DRSTS D.RS84 ;INVALID INCREMENT SPECIFIEDB" ;(PLACED HERE TO KEEP BRANCHES ;ALIVE)C>; ATTEMPTING TO CHECKPOINT TASK REGION FAILED. RESET SWAP SIZE; AND RETURN DIRECTIVE STATUSA/65$: MOV P.SIZE(R0),P.SWSZ(R0) ;RESET SWAP SIZEK4 DRSTS D.RS1 ;POOL OR CHECKPOINT FILE ALLOC FAILURE?; IF THE TASK REGION IS DECREASING IN SIZE, CALL $NXTSK ON EXITA; FROM THIS DIRECTIVE TO INSURE REALLOCATION OF NEWLY FREED SPACE$-70$: CMP R1,P.SIZE(R0) ;DECREASING TASK SIZE?V BHIS 71$ ;IF HIS NO0 .IF DF U$$DAS!S$$LIB # MOV (SP),-(SP) ;COPY MAPPING MASKS . MOV #$NXTSK,2(SP) ;INSURE THAT PARTITION WILL ;BE REALLOCATEDE .IFF ; DF U$$DAS!S$$LIB8 MOV #$NXTSK,-(SP) ;INSURE PARTITION WILL BE REALLOCATED .ENDC ; DF U$$DAS!S$$LIBS?; IF THE TASK HAS I/O IN PROGRESS TO OTHER THAN THE TASK REGIONN;; SET THE MAPPING CHANGE BIT. THIS COMPENSATES FOR POSSIBLEE!; UNMAPPING OF I/O STATUS BLOCKS.L8 TSTB T.IOC(R5) ;DOES TASK HAVE I/O? (MUST BE IN COMMON) BEQ 71$ ;IF EQ NOH5 BIS #T3.MPC,T.ST3(R5) ;SET MAPPING BIT DUE TO SHRINKP71$:;+; ** W A R N I N G **S;;; SPM HOOKPOINT NUMBER 10.; ); DO NOT CHANGE THE INSTRUCTION FOLLOWINGB; LABEL WITHOUT CHECKING SPM;-+$SPH10==. ;SPM CHANGES THE INSTRUCTION ATS ;THE LOCATION OF THIS LABEL ( MOV R1,P.SIZE(R0) ;EXTEND TASK IN PLACEA; IF THE TASK WAS BUILT WITH RESIDENT OVERLAYS, WE DO NOT ATTEMPTA3; TO CHANGE THE MAPPING OF ANY OF THE TASKS WINDOWS  .IF DF P$$LAS4 BIT #T3.ROV,T.ST3(R5) ;TASK HAVE RESIDENT OVERLAYS?+ BNE 80$ ;IF NE YES, DO NOT CHANGE MAPPING .ENDC;; SET UP TO UNMAP CURRENT TASK WINDOW (0, OR 1 IF I/D TASK)A" MOV $SAHPT,R1 ;GET HEADER ADDRESS3 MOV H.WND(R1),R1 ;POINT TO NUMBER OF WINDOW BLOCKSS .IF DF U$$DAS1 BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH I/D SPACEE BEQ 73$ ;IF EQ NOP/ ADD #W.BLGH,R1 ;YES, POINT TO WINDOW 1 INSTEADV .ENDC ; DF U$$DAS473$: MOVB W.BFPD+2(R1),R3 ;PICK UP FIRST PDR ADDRESS7; LOOP TO UNMAP CURRENT CONTEXT OF TASK WINDOW (0 OR 1)E74$: CLR (R3)+ ;UNMAP NEXT PDRY  .IF DF U$$DAS& CMP #UDSDR0+2,R3 ;DATA SPACE WINDOW ? BLOS 7405$ ;IF LOS YES6 BITB $BTMSK-UINDR0-2(R3),1(SP) ;USER D SPACE MAPPED ? BNE 741$ ;IF NE NO, CLR UDSDR0-UINDR0-2(R3) ;UNMAP USER D SPACE .ENDC P .IF DF S$$LIB I8 BITB $BTMSK-2-UINDR0-2(R3),(SP) ;SUPER D SPACE MAPPED ? BNE 741$ ;IF NE NO0 CLR SDSDR0-UINDR0-2(R3) ;UNMAP SUPER DATA SPACE 2 .ENDC C .IF DF U$$DAS# BR 741$ ;SKIP D SPACE WINDOW CODE A7405$: BICB $BTMSK-UDSDR0-2(R3),1(SP) ;INDICATE USER D NOT MAPPED8 BITB $BTMSK-2-UDSDR0-2(R3),(SP) ;SUPER D SPACE MAPPED ? BNE 741$ ;IF NE NO0 CLR SDSDR0-UDSDR0-2(R3) ;UNMAP SUPER DATA SPACE .ENDC ; DF U$$DAS 3741$: DECB W.BNPD+2(R1) ;ANY MORE APRS TO PROCESS ?. BNE 74$ ;IF NE YES=; SETUP NEW WINDOW AND PREPARE TO REMAP APRS INTO NEW CONTEXT<; IF THIS IS A USER I/D SYSTEM, WE MUST RE-ESTABLISH POINTER6; TO WINDOW 0 SINCE $MAPTK WILL RE-ADJUST THE POINTER. .IF DF U$$DAS- MOV $SAHPT,R1 ;GET ADDRESS OF CURRENT HEADERI3 MOV H.WND(R1),R1 ;POINT TO NUMBER OF WINDOW BLOCKS3 .ENDC ; DF U$$DAS& CALL $MAPTK ;MAP TASK ADDRESS WINDOW- MOV P.REL(R0),R3 ;CALCULATE FIRST APR OFFSETC .IF DF P$$LAS ADD W.BOFF-W.BLPD(R1),R3 ;R .ENDC% MOV (R1),R2 ;PICK UP LAST PDR IMAGE ' MOVB -(R1),R4 ;PICK UP NUMBER OF PDR'S ) MOVB -(R1),R1 ;PICK UP FIRST PDR ADDRESSM1; LOOP TO SET UP APRS FOR NEW TASK WINDOW CONTEXTM,75$: MOV R3,UINAR0-UINDR0(R1) ;LOAD NEXT PAR# MOVB R2,(R1)+ ;SET ACCESS NEXT PDRC# MOVB #177,(R1)+ ;SET SIZE NEXT PDRI .IF DF U$$DAS& CMP #UDSDR0+2,R1 ;DATA SPACE WINDOW ? BLOS 755$ ;IF LOS YESS6 BITB $BTMSK-UINDR0-2(R1),1(SP) ;USER D SPACE MAPPED ? BNE 76$ ;IF NE NO, MOV R3,UDSAR0-UINDR0-2(R1) ;LOAD USER D PAR0 MOV -2(R1),UDSDR0-UIN00heKecDATADATADATADATADATADATADATADR0-2(R1) ;LOAD USER D PDR .ENDC ; DF U$$DAS D .IF DF S$$LIB 12 BITB $BTMSK-2-UINDR0-2(R1),(SP) ;SUPER D MAPPED ? BNE 76$ ;IF NE NO - MOV R3,SDSAR0-UINDR0-2(R1) ;LOAD SUPER D PAR 1 MOV -2(R1),SDSDR0-UINDR0-2(R1) ;LOAD SUPER D PDRV 1 .IF DF U$$DAS" BR 76$ ;SKIP D SPACE WINDOW CODE=755$: BISB $BTMSK-UDSDR0-2(R1),1(SP) ;INDICATE D SPACE MAPPEDT8 BITB $BTMSK-2-UDSDR0-2(R1),(SP) ;SUPER D SPACE MAPPED ? BNE 76$ ;IF NE NOR- MOV R3,SDSAR0-UDSDR0-2(R1) ;LOAD SUPER D PAR(1 MOV -2(R1),SDSDR0-UDSDR0-2(R1) ;LOAD SUPER D PDR; .ENDC ; DF U$$DAS L .IFTF ; DF S$$LIB#76$: ADD #200,R3 ;ADVANCE APR BASEB DEC R4 ;MORE TO GO?V BNE 75$ ;IF NE YES MOV R2,-(R1) ;SET LAST PDR( , .IF DF U$$DAS! BIT #20,R1 ;DATA SPACE WINDOW ?$ BNE 78$ ;IF NE YES. BITB $BTMSK-UINDR0(R1),1(SP) ;USER D MAPPED ? BNE 80$ ;IF NE NOD. MOV R2,UDSDR0-UINDR0(R1) ;SET LAST USER D PDR .ENDC ; DF U$$DAS .IFT ; DF S$$LIBN 0 BITB $BTMSK-2-UINDR0(R1),(SP) ;SUPER D MAPPED ? BNE 80$ ;IF NE NOR/ MOV R2,SDSDR0-UINDR0(R1) ;SET LAST SUPER D PDR L .ENDC ; .IF DF U$$DAS% BR 80$ ;SKIP DATA SPACE WINDOW CODE ;78$: BITB $BTMSK-2-UDSDR0(R1),(SP) ;SUPER DATA SPACE MAPPED  BNE 80$ ;IF NE NO$/ MOV R2,SDSDR0-UDSDR0(R1) ;SET LAST SUPER D PDR7 .ENDC ; DF U$$DAS M'; CLEANUP STACK AND EXIT FROM DIRECTIVE8 I80$: ;REFERENCE LABEL .IF DF U$$DAS$ MOV $SAHPT,R1 ;POINT TO TASK HEADER4 MOV (SP)+,H.SMAP(R1) ;RESTORE D SPACE MAP IN HEADER .IFF ; DF U$$DASE .IF DF S$$LIB& TST (SP)+ ;CLEAN MAP BYTES OFF STACK .ENDC ; DF S$$LIB .ENDC ; DF U$$DAS RETURN ;D .ENDC .END78$: BITB $BTMSK-2-UDSDR0(R1),(SP) ;SUPER DATA SPACE MAPPED  BNE 80$ ;IF NE NO$/ MOV R2,SDSDR0-UDSDR0(R1) ;SET LAST SUPER D PDR7 .ENDC ; DF U$$DAS M'; CLEANUP STACK AND EXIT FROM DIRECTIVE8 I80$: ;REFERENCE LABEL .IF DF U$$DAS$ MOV $SAHPT,R1 ;POINT TO TASK HEADER4 MOV (SP)+,H.SMAP(R1) ;RESTORE D SPACE MAP IN HEADER .IFF ; DF U$$DASE .TITLE DRFEAT .IDENT /01.03/o;c; COPYRIGHT (c) 1986 BY C(; DIGITAL EQUIPMENT CORPORATION, MAYNARD'; MASSACHUSETTS. ALL RIGHTS RESERVED.e;iA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USEDiA; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSEoA; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THISpA; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OReA; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND1; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERED.;cA; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTAA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R; T. M. MARTIN 16-JUL-82;A$; MODIFIED FOR RSX-11M-PLUS V3.0 BY:;T; B. S. MCCARTHY;T-; MODIFIED FOR RSX-11M-PLUS V3.0 UPDATE B BY:O;T; B. S. MCCARTHY 9-JUL-86 01.02F;R$; BM371 - FIX MAJOR MINDSET PROBLEM;M ; B. S. MCCARTHY 28-JUL-86 01.03;O-; BM372 - FIX MINOR MINDSET PROBLEM IN BM371N;U;+'; **-$DRFEA-TEST FEATURE MASK DIRECTIVE ;PC; THIS DIRECTIVE WILL TEST FOR THE PRESENCE OF A SPECIFIED FEATURE.A;I ; DPB FORMAT:O;A ; WD 00. -- DIC=177 , DPB SIZE=2; WD 01. -- FEATURE TO TESTA;N ; INPUTS:;2; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK!; R3=POINTER TO WORD 1 IN THE DPBP.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASKT;O ; OUTPUTS:;S.; C=0 IF DIRECTIVE WAS SUCCESSFULLY COMPLETED.9; DIRECTIVE STATUS OF IS.SET 'D.RS22' IS RETURNED IF THEA*; CORRESPONDING FEATURE MASK BIT IS SET.9; DIRECTIVE STATUS OF IS.CLR 'D.RS00' IS RETURNED IF THEP.; CORRESPONDING FEATURE MASK BIT IS NOT SET.; 3; IF A FEATURE VALUE IS SPECIFIED FOR WHICH THEREA4; IS NO FEATURE MASK WORD IS.CLR IS RETURNED WHICH5; PRESUMABLY WOULD INDICATE THAT THE SUPPORT IS NOTO ; PRESENT.;-00Ke\ed .IF DF R$$FEA$DRFEA::3 MOV #$FMASK,R0 ;ASSUME TEST ON SYSTEM FEATURE MASKI, ;WORDS AS OPPOSED TO THE HARWARE FEATURE ;MASK WORDS.& MOV (R3),R1 ;GET FEATURE TO TEST FOR2 MOV #$FMEND-$FMASK,R3 ;GET # OF SYSTEM MASK WORDS# TST R1 ;WAS IT A HARWARE FEATURE?P1 BPL 10$ ;IF PL NOT A HARDWARE FEATURE MASK TEST 5 MOV #$HFMSK,R0 ;POINT TO HARDWARE FEATURE MASK WORDS4 MOV #$HFEND-$HFMSK,R3 ;GET # OF HARDWARE MASK WORDS. NEG R1 ;NEGATE SPECIFIED FEATURE TO TEST FOR.10$: DEC R1 ;NORMALIZE BIT VALUE TO BASE OF 0/ MOV R1,R2 ;SAVE FOR OFFSET COMPUTATIONS LATERA5 BIC #^C<17>,R1 ;MASK OFF ALL BUT BIT IDENTIFIER BITSE% ASL R1 ;CONVERT IT TO A WORD OFFSETF' MOV $BTMSK(R1),R1 ;GET BIT TO TEST FOR34 ASH #-4,R2 ;COMPUTE OFFSET TO FEATURE WORD TO TEST ASL R2 ;( CMP R2,R3 ;BEYOND LIMIT OF MASK WORDS?0 BHI 40$ ;IF HI YES, ASSUME SUPPORT NOT PRESENT1 ADD R2,R0 ;FORM ADDRESS OF FEATURE WORD TO TESTH! BIT R1,(R0) ;IS FEATURE PRESENTE BEQ 40$ ;IF EQ, NO DRSTS D.RS22 ;RETURN IS.SETZ!40$: DRSTS D.RS00 ;RETURN IS.CLR2 .ENDC ;R$$FEA;+'; **-$DRTFE-TEST TASK FEATURE DIRECTIVE ; H; THIS DIRECTIVE WILL TEST FOR THE PRESENCE OF A SPECIFIED TASK FEATURE.;(F; (AT THE MOMENT, THIS DIRECTIVE CAN ONLY CHECK BITS IN T.STS -> T.ST4C; OF THE TCB. THE DIRECTIVE COULD BE EXPANDED TO CHECK OTHER BINARYIH; TASK FEATURES, SUCH AS PRESENCE OR ABSENCE OF A PARTICULARS AST, ETC.);A ; DPB FORMAT:S; ; WD 00. -- DIC=209., DPB SIZE=2; WD 01. -- FEATURE TO TESTS;R ; INPUTS:N;.2; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK!; R3=POINTER TO WORD 1 IN THE DPB .; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASKR; ; OUTPUTS:;O.; C=0 IF DIRECTIVE WAS SUCCESSFULLY COMPLETED.9; DIRECTIVE STATUS OF IS.SET 'D.RS22' IS RETURNED IF THEO*; CORRESPONDING FEATURE MASK BIT IS SET.9; DIRECTIVE STATUS OF IS.CLR 'D.RS00' IS RETURNED IF THEP.; CORRESPONDING FEATURE MASK BIT IS NOT SET.; 3; IF A FEATURE VALUE IS SPECIFIED FOR WHICH THEREA4; IS NO FEATURE MASK WORD IS.CLR IS RETURNED WHICH5; PRESUMABLY WOULD INDICATE THAT THE SUPPORT IS NOTO ; PRESENT.;- .IF DF R$$FEA-$DRTFE::MOV (R3),R1 ;GET FEATURE TO TEST FOR.10$: DEC R1 ;NORMALIZE BIT VALUE TO BASE OF 0/ MOV R1,R0 ;SAVE FOR OFFSET COMPUTATIONS LATERD5 BIC #^C<17>,R1 ;MASK OFF ALL BUT BIT IDENTIFIER BITS % ASL R1 ;CONVERT IT TO A WORD OFFSET ' MOV $BTMSK(R1),R1 ;GET BIT TO TEST FORR4 ASH #-4,R0 ;COMPUTE OFFSET TO FEATURE WORD TO TEST ASL R0 ;4 CMP R0,#T.ST3-T.ST2 ;BEYOND FIRST THREE MASK WORDS?& BLOS 35$ ;IF LOS NO, OFFSET OK AS IS0 CMP R0,#T.ST3+2-T.ST2 ;BEYOND FOURTH MASK WORD?0 BHI 40$ ;IF HI YES, ASSUME SUPPORT NOT PRESENT4 ADD #T.ST4-,R0 ;ADJUST TO SECOND MASK WORD535$: ADD R0,R2 ;FORM ADDRESS OF FEATURE WORD TO TESTA! BIT R1,(R2) ;IS FEATURE PRESENT  BEQ 40$ ;IF EQ, NO DRSTS D.RS22 ;RETURN IS.SETO!40$: DRSTS D.RS00 ;RETURN IS.CLR  .ENDC ;R$$FEA .ENDR ;COMPUTE OFFSET TO FEATURE WORD TO TEST ASL R0 ;4 CMP R0,#T.S .TITLE DRGCLS .IDENT /06.04/D A6; COPYRIGHT (C) 1985 BY DIGITAL EQUIPMENT CORPORATION,%; MAYNARD, MASS. ALL RIGHTS RESERVED.A;+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:;T; J. W. BERZLE; J. R. KAUFFMAN;B+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:E;P ; B. S. MCCARTHY 5-MAR-87 06.04;D,; BM385 -- ADD $DRGC1 LABEL FOR MOVEMENT TO#; VECTOR COMMON. ALSO MOVE $RLMCB ; to DREIF;E;+; **-$DRGCL-GET COMMAND LINE;L ; INPUTS: ;D9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK./; R3=ADDRESS OF THE 80. BYTE BUFFER IN THE DPB.I/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.R,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; ;-  .MCALL PKTDF$,TCBDF$.  .IF DF N$$DIR .MCALL LNMDF$' LNMDF$ ;DEFINE CONTEXT BLOCK OFFSETST .ENDC ;DF N$$DIRD( PKTDF$ ;DEFINE COMMAND BUFFER OFFSETS TCBDF$ ;TCB OFFSETS6 .IIF GE </100>-200 .ERROR ;LENGTH TOO LONG .IF DF D$$PAR$DRGC1:: .IFF ; DF D$$PARK$DRGCL::00\eecDATADATADATADATADATADATADATA .ENDC ; DF D$$PAR MOVB -(R3),R0 ;GET DPB SIZE CMPB (R3)+,#41. ;IS IT GMCR$S BEQ GMCR ;IF EQ YESU CMPB R0,#3 ;IS IT SNXC$O BEQ SNXC ;IF EQ YEST .IF DF A$$CLI CMPB R0,#7 ;IS IT GCCI$F BEQ GCCI ;IF EQ YES .ENDC ;A$$CLI DRSTS D.RS99 ;ILLEGAL DPB SIZE;+; **-GMCR$ DIRECTIVE;P<; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TRANSFER A 1 TO 80.>; BYTE COMMAND LINE TO THE LAST MCR FUNCTION TASK REQUESTED BY; THE MCR DISPATCHER.G;: ; DPB FORMAT:D;A$; WD. 00 -- DIC(127.),DPB SIZE(41.).*; WD. 01 -- FIRST WORD OF 80. BYTE BUFFER.; .I; .; . ); WD. 50 -- LAST WORD OF 80. BYTE BUFFER.B;S5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)S; -; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.I;; DIRECTIVE STATUS EQUAL TO THE LENGTH OF THE COMMAND LINEC; IN BYTES IS RETURNED.I; C=1 IF DIRECTIVE IS REJECTED. :; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE ISSUING0; TASK IS NOT THE LAST TASK THAT WAS REQUESTED; BY THE MCR DISPATCHER.;.;-5GMCR: CALL $SCMDQ ;SEARCH COMMAND QUEUE FOR A PACKET  BCC 30$ ;IF CC, FOUND ONE &20$: DRSTS D.RS80 ;NO COMMAND PRESENT-30$: MOV R3,R4 ;SET DESTINATION DISPLACEMENTN( MOV KISAR6,R3 ;SET DESTINATION APR BIAS MOV R0,KISAR6 ;MAP COMMANDR7 BIT #CC.CLI,C.CSTS+140000 ;IS COMMAND INTENDED FOR CLI  BNE 20$ ;IF NE YES% MOV R0,-(SP) ;SAVE ADDRESS OF BUFFER MOV R0,R1 ;SET SOURCE APR BIAS) MOVB C.CBLK+140000,R5 ;GET SIZE OF BLOCK  SWAB R5 ;PUT IN HIGH BYTE; BISB C.CTR+140000,R5 ;GET TERMINATOR CHARACTER IN LOW BYTEE; MOV C.CSO+140000,-(SP) ;GET OFFSET TO START RETURNING FROM 8 MOV C.CCT+140000,R0 ;GET NUMBER OF CHARACTERS IN BUFFER, CMP #79.,R0 ;CAN ENTIRE BUFFER BE RETURNED BHIS 50$ ;IF HIS YES3 CLR 2(SP) ;DO NOT DEALLOCATE BUFFER AFTER COPYING+1 MOV #78.,R0 ;SET NUMBER OF CHARACTERS TO RETURN : ADD R0,C.CSO+140000 ;SET TO STARTING OFFSET FOR NEXT TIME@ SUB R0,C.CCT+140000 ;REMOVE THESE FROM CHARACTERS PRESENT COUNT@50$: MOV #C.CTXT+120000,R2 ;DISPLACEMENT OF START OF SOURCE TEXT1 ADD (SP)+,R2 ;POINT TO FIRST CHARACTER TO RETURNG .IF NDF D$$PARR, ADD R0,4(SP) ;SET CHARACTER COUNT +1 IN DSW .IFF ; NDF D$$PARR- ADD R0,10(SP) ;SET CHARACTER COUNT +1 IN DSWB .IFTF ; NDF D$$PARC TST R0 ;IS THERE ANY TEXTF BEQ 55$ ;IF EQ NOM, CALL $BLXIO ;COPY CHARACTERS INTO USER DPB)55$: MOV R3,KISAR6 ;MAP DESTINATION AGAINF4 MOVB #15,R3 ;ASSUME CONTINUATION MUST BE INDICATED0 MOVB #'-,(R4)+ ;HYPHEN FOR ASSUMED CONTINUATION* MOV (SP)+,R1 ;GET ADDRESS OF SOURCE BLOCK' BEQ 60$ ;IF EQ, THERE IS CONTINUATIONE .IFT ; NDF D$$PAR3 DEC 2(SP) ;ADJUST DSW TO ELIM INITIAL VALUE OF +1D .IFF ; NDF D$$PAR3 DEC 6(SP) ;ADJUST DSW TO ELIM INITIAL VALUE OF +1 .ENDC ; NDF D$$PAR1 DEC R4 ;SET TO OVERWRITE HYPHEN WITH TERMINATORM( MOV #$CLICQ,R0 ;POINT TO QUEUE LISTHEAD CALL $GTSPK ;DEQUEUE PACKETE MOV R1,R0 ;COPY PACKET ADDRESS! MOVB R5,R3 ;GET REAL TERMINATORD( SWAB R5 ;GET SIZE OF BLOCK IN LOW BYTE MOVB R5,R1 ;GET SIZE OF BLOCKE CALL $DESEC ;DEALLOCATE IT,60$: MOVB R3,(R4) ;PUT TERMINATOR IN BUFFER RETURN ;ALL DONE ;+; **-SNXC$ DIRECTIVE;UA; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CALL THE TERMINAL DRIVERN>; TO HAVE IT SEND THE NEXT COMMAND FROM THE SPECIFIED TERMINALD; TO THE CLI DISPATCHER FOR EXECUTION. THE NEED FOR THIS ARISES WHENA; THE TERMINAL IS IN SERIAL COMMAND EXECUTION MODE. NORMALLY, THESJ; NEXT COMMAND WILL BE CALLED FOR BY DREIF FOR WHEN A TASK WITH T3.CMD SETG; EXITS. IF THE TASK PROCESSING THE COMMAND WILL NOT EXIT HOWEVER, THISMF; DIRECTIVE PROVIDES A WAY FOR IT TO SIGNAL TO THE SYSTEM THAT COMMANDB; EXECUTION IS COMPLETE, AND THE NEXT COMMAND CAN BE SENT FROM THE%; TYPEAHEAD BUFFER INSIDE THE DRIVER. <; IF THE TASK ISSUING THE DIRECTIVE IS SET TO PROMPT ON EXITB; HOWEVER, A TASK EXIT PROMPT WILL BE QUEUED UP INSTEAD OF CALLING?; THE DRIVER. THE DRIVER WILL GET CALLED BY MCR... AFTER IT HASA<; PROCESSED THE TASK EXIT PROMPT, OR BY A RE-ISSUANCE OF THE>; SNXC$ DIRECTIVE BY THE CLI IF THE CLI IS00\eed RECEIVING TASK EXIT@; PROMPT REQUESTS. THIS SCHEME CORRECTLY SYNCHRONIZES THE PROMPT4; REQUESTS AND COMMAND LINES ON THE USER'S TERMINAL.;O ; DPB FORMAT:N;R"; WD. 00 -- DIC(127.),DPB SIZE(3.):; WD. 01 -- ASCII NAME OF TERMINAL TO REQUEST COMMAND FROM); WD. 02 -- OCTAL UNIT NUMBER OF TERMINAL ;L5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)V;W-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.S&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.Y2; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF THE; LENGTH IS ILLEGAL.2; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE-; SPECIFIED TERMINAL IS NOT THE TASK'S TI:,O,; AND THE TASK IS NOT PRIVILEGED OR A CLI.2; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF THE5; SPECIFIED DEVICE DOES NOT EXIST, OR IS NOT A TTY.L; ;-3SNXC: MOV (R3)+,R0 ;GET NAME OF DEVICE IF SPECIFIED & BEQ 10$ ;IF EQ, DEVICE NOT SPECIFIED MOV (R3),R1 ;GET UNIT NUMBER1 CALL $CVDVN ;CONVERT DEVICE NAME TO UCB ADDRESSD' BCS 40$ ;IF CS, DEVICE DOES NOT EXISTF MOV R2,R0 ;COPY UCB ADDRESS # CALL $MPLND ;FOLLOW ANY REDIRECTSR, BIT #DV.TTY,U.CW1(R0) ;IS DEVICE A TERMINAL BEQ 40$ ;IF EQ NO @ BIT #T3.PRV!T3.CLI,T.ST3(R5) ;IS ISSUING TASK PRIVILEGED OR CLI BNE 20$ ;IF NE YES/ CMP T.UCB(R5),R0 ;DID TASK SPECIFY ITS OWN TI:A BEQ 20$ ;IF EQ YES# DRSTS D.RS16 ;PRIVILEGE VIOLATION 010$: MOV T.UCB(R5),R0 ;DEFAULT UCB TO TASK'S TI:"20$: ADD #T.ST3,R5 ;POINT TO T.ST3+ BIT #T3.MCR,(R5) ;WILL TASK PROMPT ON EXITS BEQ 50$ ;IF EQ NO % MOV #CC.EXT,R1 ;SET TASK EXIT PROMPTP4 BIT #T3.CMD,(R5) ;IS TASK PART OF CMD FROM TERMINAL BEQ 30$ ;IF EQ NO)3 BIS #CC.TTD,R1 ;FORCE CALL OF $SNCMD AT SOME POINT3!30$: MOV R0,R2 ;COPY UCB ADDRESSA- CALL $QCNTP ;QUEUE TASK EXIT PROMPT REQUESTP BR 60$ ;,40$: DRSTS D.RS92 ;ILLEGAL DEVICE SPECIFIED750$: BIT #T3.CMD,(R5) ;IS TASK PART OF CLI CMD FROM TTYB BEQ 70$ ;IF EQ NOT' CALL $SNCMD ;HAVE TTDRV SEND NEXT CMDO160$: BIC #T3.MCR!T3.CMD,(R5) ;DON'T DO THIS AGAINS70$: RETURN ;THE END;+; **-GCCI$ DIRECTIVE;PG; THIS DIRECTIVE IS USED BY A CLI TASK TO GET A COMMAND LINE. IT CANNOTIG; BE ISSUED BY A NON-CLI TASK. IT OFFERS SUCH CAPABILITIES AS RETURNINGRF; A SPECIFIC COMMAND, IDENTIFYING THE COMMAND'S PARENT TASK, LEAVING AK; COMMAND QUEUED AFTER RETREIVAL FOR RETREIVAL AGAIN BY A FUTURE DIRECTIVE,CK; AND RETURNING INFORMATION ABOUT THE TERMINAL THE COMMAND ORIGINATED FROM.D;HC; THE FORMAT OF THE COMMAND BUFFER SET UP IN THE CLI TASK SPACE IS: ;I+; +---------------------------------------+D#; ! ASCII DEV NAME OF ISSUING TTY !D+; !---------------------------------------!O+; ! NUM OF CHAR RETURNED ! OCTAL UNIT NUM.!S+; !---------------------------------------!C; ! COMMAND SIZE !+; !---------------------------------------! ; ! STATUS ! TERMINATOR !+; !---------------------------------------!E ; ! !O; ! COMMAND TEXT IN ASCII ! ; ! !I+; +---------------------------------------+N;U;R@; THE FORMAT OF THE INFORMATION BUFFER IN THE CLI TASK SPACE IS:;-+; +---------------------------------------+ ; ! U.CW2 OF ISSUING TERMINAL !-+; !---------------------------------------!!"; ! NAME OF PARENT TASK (IF ANY) !; ! (2 WORDS) !-+; !---------------------------------------!- ; ! ADDRESS OF OCB FROM PARENT !+; !---------------------------------------!-#; ! LOGIN UIC OF ISSUING TERMINAL !O+; !---------------------------------------! %; ! CURRENT UIC OF ISSUING TERMINAL !-+; !---------------------------------------!U"; ! ADDR OF CMD. IF NOT DEQUEUED !+; +---------------------------------------+; K; EXTRA FIELDS CAN BE ADDED TO THE END OFF THIS BUFFER IF REQUIRED, BECAUSE E; THE TASK SUPPLIES BOTH THE ADDR AND LENGTH OF ITS TASK BUFFER. ONLY-F; THAT MUCH DATA IS COPIED BACK TO THE TASK. THE TASK BUFFER IS FILLEDB; FROM THE FRONT WITH THE FIELDS IN THE ABOVE ORDER. IF THE BUFFERC; IS NOT LONG ENOUGH TO HOLD ALL OF THE DATA, THE FIELDS THAT WOULDFE; NOT FIT ARE NOT SUPPLIED, BUT NO INDICATION OF THIS DATA TRUNCATION J; IS GIVEN TO 00\eecDATADATADATADATADATADATADATATHE TASK. THUS IF MORE FIELDS ARE ADDED IN A FUTURE RELEASE,F; OLD TASKS WOULD STILL WORK SINCE THEY WILL GET EXACTLY WHAT THEY GOT/; BEFORE, THEY JUST WOULD NOT GET THE NEW DATA. ;G!; DPB FORMAT FOR GCCI$ DIRECITVE:T;C#; WD. 00 -- DIC(127.),DPB SIZE(7.).E:; WD. 01 -- NO COMMAND PRESENT ACTION, HIGH BYTE RESERVED..; WD. 02 -- ADDRESS OF COMMAND TO BE RETURNED.2; WD. 03 -- ADDRESS OF COMMAND BUFFER INSIDE TASK.,; WD. 04 -- LENGTH OF TASK'S COMMAND BUFFER.;; WD. 05 -- ADDRESS OF OPTIONAL INFORMATION BUFFER IN TASK.O0; WD. 06 -- LENGTH OF TASK'S INFORMATION BUFFER.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)G;-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. 6; DIRECTIVE STATUS OF +1 IS RETURNED IF A COMMAND HAS); BEEN SUCCESSFULLY RETURNED TO THE CLIC9; DIRECTIVE STATUS OF 'D.RS00' IS RETURNED IF NO COMMANDR0; IS QUEUED FOR THE CLI, AND THE CLI INDICATED2; THAT IT WANTED TO BE STOPPED. THE CLI WILL GET&; THIS STATUS AFTER IT IS UNSTOPPED.; C=1 IF DIRECTIVE IS REJECTED.U9; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF AN ILLEGALF; DPB SIZE IS SPECIFIED.5; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF EITHERC.; BUFFER OR THE DPB ARE NOT ENTIRELY WITHING; THE TASK'S ADDRESS SPACE.M/; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF L5; A GCCI$ WITH STOP ON NO COMMAND OPTION WAS ISSUEDO; FROM AST STATE:; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE ISSUING; TASK IS NOT A CLIL7; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED FROM A GCCI$R3; DIRECTIVE IF THERE IS NO COMMAND QUEUED FOR THE 1; CLI, AND THE TASK WANTED AN ERROR RETURNED INE; THIS CASE.2; DIRECTIVE STATUS OF 'D.RS17' IS RETURNED IF THE+; ISSUING CLI TASK ATTEMPTED TO RECEIVE AH,; COMMAND FROM A TERMINAL WITH A DIFFERENT/; PROTECTION UIC FROM THE CLI'S CURRENT GROUPO2; AND THE CLI HAD AN ACTIVE GROUP GLOBAL CONTEXT; FOR THE FORMER GROUP.';S; ;- ASSUME CC.EXT,4 ASSUME CC.PRM,2 .IF DF A$$CLI*GCCI: BIT #T3.CLI,T.ST3(R5) ;IS TASK A CLI BNE 100$ ;IF NE NO$ DRSTS D.RS16 ;SET DIRECTIVE STATUS)100$: MOV (R3)+,-(SP) ;SAVE NO CMD ACTIOND# TST T.ST2(R5) ;TASK AT AST STATE??A BPL 103$ ;IF PL NO5 BIT #2,(SP) ;IS STOP ON NO COMMAND OPTION SPECIFIED  BEQ 103$ ;IF EQ NO$ DRSTS D.RS80 ;SET DIRECTIVE STATUS)103$: MOV (R3)+,R4 ;SAVE DESIRED CMD ADDR % MOV (R3)+,R0 ;GET CMD BUFFER ADDRESSC$ BNE 110$ ;IF NE, THERE IS A BUFFER)105$: DRSTS D.RS98 ;SET DIRECTIVE STATUSM110$: MOV (R3)+,R1 ;GET LENGTH) CMP #11,R1 ;IS IT ABOVE MINIMUM LENGTH0 BHI 105$ ;IF HI NO. MOV R1,$TEMP0 ;SAVE LENGTH OF TASK CMD BUFFER. MOV R0,-(SP) ;SAVE ADDRESS OF TASK CMD BUFFER+ CALL $ACHKW ;ADDRESS CHECK COMMAND BUFFER,& MOV (R3)+,R0 ;GET INFO BUFFER ADDRESS BEQ 120$ ;IF EQ, NO BUFFER% MOV (R3),R1 ;GET INFO BUFFER LENGTH0! BMI 105$ ;IF MI, ILLEGAL LENGTHA( CALL $ACHKW ;ADDRESS CHECK INFO BUFFER9120$: MOV $CLICQ,R0 ;GET ADDRESS OF FIRST PACKET IT QUEUE8! BEQ 131$ ;IF EQ, QUEUE IS EMPTY /130$: CALL $SRCQ1 ;FIND A COMMAND FOR THIS CLII BCC 140$ ;IF CC, FOUND ONE; ; NO COMMAND EXISTS FOR THIS CLI;S131$: TST (SP)+ ;CLEAN STACKV& MOV (SP)+,R0 ;GET DESIRED ACTION CODE BEQ 135$ ;IF EQ, RETURN ERROR, ASR R0 ;FORCE TASK TO EXIT?? BCS 133$ ;IF CS YESF ASR R0 ;FORCE TASK TO STOP??" BCC 135$ ;IF CC NO, RETURN ERROR CALL $STPCT ;STOP THE TASK DRSTS D.RS00 ;SET IS.CLR)133$: JMP $DREXT ;FORCE THE TASK TO EXIT '135$: DRSTS D.RS8 ;SET ERROR CONDITION,;E; CAN THIS PACKET BE USEDR; 140$: MOV R0,KISAR6 ;MAP PACKETB# CMP R4,R0 ;IS IT THE DESIRED ONE?C BEQ 150$ ;IF EQ YESC TST R4 ;TAKE ANY ONE?; BEQ 150$ ;IF EQ YES+,145$: MOV @#140000,R0 ;POINT TO NEXT IN LIST BR 130$ ;RESTART SEARCH;<150$: BIT #CC.CLI,@#C.CSTS+140000 ;IS THIS COMMAND FOR A CLI BEQ 145$ ;IF EQ NO( MOV @#C.CUCB+140000,R4 ;GET UCB ADDRESS" MOV R0,-(SP) ;SAVE PACKET ADDRESS6 BIT #CC.MSG,@#C.CSTS+140000 ;IS THIS A SYSTEM MESSAGE BNE 190$ ;IF NE YESR .IF DF X$$HDR MOV $SAHDB,KISAR6 ;MAP HEADER% MOV $SAHPT,R0 ;GET ADDRESS OF HEADER, .00\eedIFF ;X$$HDRS% MOV $HEADR,R0 ;GET ADDRESS OF HEADERR .ENDC ;X$$XDR* ADD #H.CUIC,R0 ;POINT TO PROTECTION GROUP7 TSTB T.GGF(R5) ;TASK HAVE ACTIVE GOUPT GLOBAL CONTEXT?  BEQ 152$ ;IF EQ NO# CMPB U.LUIC(R4),1(R0) ;SAME GROUP?Q BEQ 152$ ;IF EQ YES@# DRSTS D.RS17 ;RETURN IE.RSU ERRORM152$: ( .IF DF N$$DIR ;NAMED DIRECTORY SUPPORT, MOV T.CTX(R5),R1 ;GET CURRENT CONTEXT BLOCK BEQ 153$ ;NONE# CALL $DLCTX ;DELETE CONTEXT BLOCK6 A .ENDC ;DF N$$DIRP*153$: MOV T.OCBH(R5),R1 ;POINT TO OCB LIST BR 155$ ;D%154$: MOV (R1),R1 ;POINT TO NEXT OCB;'155$: BEQ 156$ ;IF EQ, END OF OCB LISTT2 CMP O.MCRL(R1),(SP) ;IS THIS OCB FOR THIS COMMAND BNE 154$ ;IF NE NO .IF DF N$$DIR A MOV O.STAT+10(R1),T.CTX(R5) ;PUT CONTEXT BLOCK FROM OCB INTO TCBD .ENDC ;DF N$$DIR . MOV O.STAT+4(R1),(R0) ;SET NEW PROTECTION UIC' MOV (R0)+,-(SP) ;SAVE PROTECTION UICC+ MOV O.STAT+6(R1),(R0) ;SET NEW DEFAULT UIC * BIS (R0)+,(SP)+ ;EITHER UIC SPECIFIED ?# BNE 158$ ;IF NE YES, LEAVE THEMT' CMP -(R0),-(R0) ;BACK UP UIC POINTERR BR 157$ ;X156$: .IF DF N$$DIR > MOV U.CTX(R4),T.CTX(R5) ;PUT CONTEXT BLOCK FROM TERM INTO TCB C .ENDC ;DF N$$DIR;2157$: MOV U.LUIC(R4),(R0)+ ;SET NEW PROTECTION UIC) MOV U.UIC(R4),(R0)+ ;SET NEW DEFAULT UICD158$:  .IF DF N$$DIR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGC( MOV T.CTX(R5),KISAR6 ;MAP CONTEXT BLOCK BEQ 1585$ ;IF EQ, NONE- INCB C.REF+140000 ;INCREMENT REFERENCE COUNTR(1585$: MOV (SP)+,KISAR6 ;RESTORE MAPPING .ENDC ;DF N$$DIRR7159$: MOV -2(R3),R0 ;GET ADDR OF INFO BUFFER IF PRESENTI! BEQ 190$ ;IF EQ, NO INFO BUFFERX CALL $RELOC ;RELOCATE ADDRESS 2 MOV R1,KISAR6 ;MAP INFO BUFFER IN USER TASK SPACE# MOV (R3),R3 ;GET LENGTH OF BUFFERM;U(; FILL INFORMATION BUFFER IN TASK SPACE;;$ ASR R3 ;CONVERT TO WORD COUNT,% BCS 105$ ;IF CS, LENGTH IS NOT EVENX) BEQ 190$ ;IF EQ, BUFFER HAS LENGTH ZERO  MOV U.CW2(R4),(R2)+ ;GET U.CW2;2 SUB #3,R3 ;ARE THERE 3 WORDS LEFT IN INFO BUFFER BLT 190$ ;IF LT NO% MOV T.OCBH(R5),R1 ;POINT TO OCB LIST BR 164$ ;I%160$: MOV (R1),R1 ;POINT TO NEXT OCBE(164$: BEQ 170$ ;IF EQ, END OF OCB LIST 2 CMP O.MCRL(R1),(SP) ;IS THIS OCB FOR THIS COMMAND BNE 160$ ;IF NE NO5 MOV O.STAT(R1),(R2)+ ;COPY FIRST HALF OF PARENT NAMEE8 MOV O.STAT+2(R1),(R2)+ ;COPY SECOND HALF OF PARENT NAME DEC R3 ;ANOTHER WORD IN BUFFER BLT 190$ ;IF LT NO MOV R1,(R2)+ ;SAVE OCB ADDRESSC DEC R3 ;ROOM LEFT IN BUFFER? BLT 190$ ;IF LT, NOS+ MOV O.STAT+4(R1),(R2) ;COPY PROTECTION UICM" MOV (R2)+,R0 ;SAVE PROTECTION UIC DEC R3 ;ROOM LEFT IN BUFFER? BLT 190$ ;IF LT, NO( MOV O.STAT+6(R1),(R2) ;COPY DEFAULT UIC$ BIS (R2)+,R0 ;EITHER UIC SPECIFIED?! BNE 185$ ;IF NE YES, LEAVE THEM ADD #2,R3 ;RESTORE LENGTHI- CMP -(R2),-(R2) ;BACK UP INFO BUFFER POINTER) BR 180$ ;D)170$: CLR (R2)+ ;CLEAR PARENT NAME FIELDD CLR (R2)+ ;T DEC R3 ;ANOTHER WORD IN BUFFER BLT 190$ ;IF LT NO$ CLR (R2)+ ;CLEAR OCB ADDRESS FIELD%180$: DEC R3 ;ANOTHER WORD IN BUFFERO BLT 190$ ;IF LT NO% MOV U.LUIC(R4),(R2)+ ;COPY LOGIN UICR DEC R3 ;ROOM LEFT IN BUFFER1 BLT 190$ ;IF LT NO+ MOV U.UIC(R4),(R2)+ ;COPY CURRENT UIC CODE2"185$: DEC R3 ;ROOM LEFT IN BUFFER BLT 190$ ;IF LT NO0 CLR (R2) ;ASSUME DO NOT SUPPLY COMMAND ADDRESS' TSTB 4(SP) ;IS COMMAND TO BE DEQUEUED8 BPL 190$ ;IF PL YES 0 MOV (SP),(R2) ;SUPPLY ADDRESS OF COMMAND BUFFER;;/; COPY COMMAND FROM POOL INTO THE TASK'S BUFFERR;2F190$: BIC #T3.MCR!T3.CMD,T.ST3(R5) ;ASSUME NO PROMPT OR SERIAL CMD EXE- MOV (SP)+,R5 ;COPY POINTER TO BUFFER IN POOL ' MOV R5,KISAR6 ;MAP COMMAND IN SEC POOL1, MOV (SP),R0 ;GET ADDRESS OF BUFFER IN TASK ASSUME C.CSO,C.CMCD: MOV @#C.CSO+140000,(SP) ;SAVE START OFFSET OR MSG NUMBER3 MOVB @#C.CTR+140000,-(SP) ;SAVE COMMAND TERMINATOR(, MOV @#C.CSTS+140000,-(SP) ;SAVE STATUS WORD0 MOV @#C.CCT+140000,-(SP) ;SAVE CHARACTER COUNT& CALL $RELOC ;RELOCATE BUFFER ADDRESS) MOV R1,KISAR6 ;MAP USER'S COMMAND BUFFER. MOV R1,R3 ;SAVE APR BIAS, BIT #CC.MSG,2(SP) ;IS THIS A MESSAGE PA00\e2ecDATADATADATADATADATADATADATACKET BNE 200$ ;IF NE YESN MOV R4,R1 ;COPY UCB ADDRESSM MOV (R4),R0 ;POINT TO DCB0* TST (R0)+ ;POINT TO ADDRESS OF FIRST UCB+ SUB (R0)+,R1 ;CALC RELATIVE ADDRESS OF UCBV" MOV (R0)+,(R2)+ ;COPY DEVICE NAME, MOV (R0)+,(R2) ;GET LOW UNIT NUMBER FOR DCB MOV R2,-(SP) ;SAVE R2 MOV (R0),R2 ;GET LENGTH OF UCB CLR R0 ;SET UP R0,R1 PAIRT& DIV R2,R0 ;CALC RELATIVE UNIT NUMBER MOV (SP)+,R2 ;RESTORE R2A3 ADD R0,(R2)+ ;CALC LOGICAL UNIT NUMBER IN LOW BYTE- INC (SP) ;INCREASE CHAR COUNT TO INCLUDE CRB- MOV #1,-(SP) ;REMEMBER TO DECREMENT IT LATERR BR 210$ ;4*200$: CLR (R2)+ ;ZERO TO INDICATE MESSAGE, MOV 6(SP),(R2)+ ;PUT MESSAGE CODE IN BUFFER0 CLR 6(SP) ;ZERO FOR LATER CODE THAT USES C.CSO1 CLR 10(SP) ;FORCE MESSAGE BUFFER TO BE DEQUEUEDB. CLR -(SP) ;DO NOT HAVE TO CORRECT CHAR COUNT.210$: MOV 2(SP),R1 ;GET NUMBER OF CHARS IN CMD+ MOV $TEMP0,R0 ;GET LENGTH OF TASK'S BUFFERR. SUB #10,R0 ;CALC SPACE AVAILABLE FOR COMMAND+ CLR -(SP) ;ASSUME LENGTHS WILL BE CORRECTA2 CMP R0,R1 ;COMPARE SIZE OF TASK AND POOL BUFFERS' BLO 220$ ;IF LO, USE TASK BUFFER SIZEL! MOV R1,R0 ;USE POOL BUFFER SIZE% BIT #CC.MSG,6(SP) ;IS THIS A MESSAGEU2 BNE 220$ ;IF NE YES, DO NOT DECREMENT ANY COUNTS5 MOV #400,(SP) ;HAVE TO DECREMENT COUNT IN UPPER BYTE5220$: MOVB R0,-1(R2) ;PUT ACTUAL COUNT IN TASK BUFFERO, SUB (SP)+,-2(R2) ;CORRECT ACTUAL CHAR COUNT- MOV R1,(R2) ;PUT BUFFER SIZE IN TASK BUFFER02 SUB (SP)+,(R2)+ ;CORRECT SIZE OF ORIGINAL COMMAND TST (SP)+ ;POP C.CCT OFF STACK MOV (SP)+,R1 ;GET STATUS BITSC BIC #^C,R1 ;ISOLATE STATUS BITS TO BE PASSED, ASH #7,R1 ;SHIFT INTO POSITION4 BISB (SP)+,R1 ;PUT TERMINATOR CHARACTER IN POSITION9 MOV R1,(R2)+ ;PUT TERMINATOR AND STATUS BITS IN USER BUFR TST R0 ;ANY CHARACTERS TO COPY BEQ 240$ ;IF EQ NO MOV R5,R1 ;SET SOURCE APR BIAS MOV R2,R4 ;DESTINATION DISPR/ MOV #C.CTXT+120000,R2 ;SET SOURCE DISPLACEMENTF+ ADD (SP),R2 ;POINT TO START OF VALID TEXTN. CALL $BLXIO ;COPY COMMAND INTO TASK'S BUFFER&240$: MOV R5,KISAR6 ;MAP COMMAND AGAIN# TST (SP)+ ;CLEAN C.CSO FROM STACKU6 BIT #CC.MSG,@#C.CSTS+140000 ;IS THIS A SYSTEM MESSAGE BNE 260$ ;IF NE YESM( MOV $TKTCB,R3 ;CURRENT TASK TCB ADDRESS% TST @#C.CCT+140000 ;ANY TEXT PRESENTE BEQ 250$ ;IF EQ NO/ CMPB #33,@#C.CTR+140000 ;TERMINATED BY ESCAPE?, BEQ 250$ ;IF EQ YESS, BIS #T3.MCR,T.ST3(R3) ;FORCE PROMPT ON EXIT=250$: BIT #CC.TTD,@#C.CSTS+140000 ;DID CMD ORIGINATE IN TTDRVT BEQ 260$ ;IF EQ NO> BIS #T3.CMD,T.ST3(R3) ;PROPOGATE SERIAL CMD EXECUTION ON EXIT.260$: TSTB (SP)+ ;LEAVE COMMAND PACKET QUEUE? BMI DUN ;IF MI YES% MOV R5,R1 ;GET CMD ADDR IN SEC POOLS" MOV #$CLICQ,R0 ;POINT TO LISTHEAD CALL $GTSPK ;DEQUEUE PACKETE MOV R1,R0 ;COPY PACKET ADDRESS. MOVB @#C.CBLK+140000,R1 ;GET LENGTH OF PACKET. CALLR $DESEC ;DEALLOCATE AND RETURN TO DRDSP DUN: RETURNS .ENDC ;A$$CLI .ENDROMPT ON EXIT=250$: BIT #CC.TTD,@#C.CSTS+140000 ;DID CMD ORIGINATE IN TTDRVT BEQ 260$ ;IF EQ NO> BIS #T3.CMD,T.ST3(R3) ;PROPOGATE SERIAL CMD EXECU .TITLE DRGEF .IDENT /04.01/V E;M,; COPYRIGHT (C) 1974, 1978, 1979, 1980, 1983/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.T; A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDO9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; J. E. PROVINO 21-SEP-78B;#+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:B;6; B. S. MCCARTHY L; T. M. MARTIN ,;); MODIFIED BY:;I; J. M. LAWLER 29-JUN-83 04.00;Y:; JL162 -- FINISH CONDITIONALIZATION OF GROUP GLOBAL EFNS;I; J. W. BERZLE 07-SEP-83 04.01;M2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES;A;Q; MACRO LIBRARY CALLSY;D .MCALL BGCK$A;++; **-$DRCRE-CREATE GROUP GLOBAL EVENT FLAGSL;EB; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CREATE GROUP GLOBAL EVENTB; FLAGS FOR A SPECIFIED GROUP. IF THE SPECIFIED GROUP MATCHES THEF; TASK'S OWN GROUP, THE EVENT FLAG USE COUNT IS INCREMENTED, EFFECTINGB; A "LOCK" OPERATION FOR THE FLAGS SUCH THAT PREMATURE ELIMINATION8; OF THE FLAGS BY A TASK WHICH002eed SHARES THEM IS PREVENTED.;-D; IF THE EVENT FLAG GROUP ALREADY EXISTS, THE SPECIFIED GROUP IS THEF; SAME AS THE TASK'S OWN GROUP, AND THE EVENT FLAGS ARE UNLOCKED, THIS;; DIRECTIVE WILL LOCK THE EVENT FLAGS FOR THE ISSUING TASK.T;S;E ; DPB FORMAT:U;L#; WD. 00 -- DIC(157.),DPB SIZE(2.).R; WD. 01 -- GROUP NUMBER;M ; INPUTS:;A2; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK ; R3=POINTER TO WD. 1 IN THE DPB/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;V5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)H;P-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.G&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.V5; DIRECTIVE STATUS OF 'D.RS1' IF ALLOCATION FAILURE.U6; DIRECTIVE STATUS OF 'D.RS16' IF NON-PRIVILEGED TASK5; ATTEMPTS TO CREATE EVENT FLAGS FOR ANOTHER GROUP.D;; DIRECTIVE STATUS OF 'D.RS17' IS RETURNED IF GROUP GLOBALB; EVENT FLAGS ALREADY EXIST.7; DIRECTIVE STATUS OF 'D.RS91' IS RETURNED IF GROUP IST ; INVALID.;- .IF DF, G$$GEFT .ENABL LSBN+$DRCRE::CALL 300$ ;DO FLAGS ALREADY EXIST?S BCC 40$ ;IF CC FOUND MOV R0,-(SP) ;SAVE R05 MOV #G.LGTH,R1 ;GET LENGTH OF GROUP GLOBAL CNTRL BLKI$ MOV R2,R3 ;COPY TASKS GROUP NUMBER6 CALL $ALOCB ;ALLOCATE A BLOCK FOR GROUP GLOBAL FLAGS# BCS 70$ ;IF CS ALLOCATION FAILUREF5 MOV @(SP),(R0) ;POINT NEW BLOCK TO REMAINDER OF LIST7( MOV R0,@(SP)+ ;LINK NEW BLOCK INTO LIST- TST (R0)+ ;POINT PAST LINK WORD (G.LNK).. MOVB R4,(R0)+ ;STORE GROUP NUMBER (G.GRP), CLRB (R0)+ ;CLEAR STATUS BYTE (G.STAT)/ CLR (R0)+ ;INITIALIZE ACCESS COUNT (G.CNT)I6 CMP R3,R4 ;ARE THESE FLAGS FOR THE TASK'S OWN GROUP?% BNE 20$ ;IF NE NO, DO NOT LOCK THEMV2 INC -2(R0) ;LOCK FLAGS BY INCREMENTING USE COUNT8 BIS #T3.GFL,(R5) ;AND MAKE A NOTE OF THIS IN TASK'S TCB8 INCB T.GGF-T.ST3(R5) ;AND INCREMENT TASK'S ACCESS COUNT420$: CLR (R0)+ ;CLR FIRST EVENT FLAG WORD (G.EFLG)1 CLR (R0) ;CLR SECOND EVENT FLAG WORD (G.EGLG+2)30$: RETURN ;T-40$: CLRB G.STAT(R1) ;CLEAR MARKED FOR DELETEA CMP R2,R4 ;TASK'S OWN GROUP?$ BNE 110$ ;IF NE NO DON'T LOCK THEM" BIT #T3.GFL,(R5) ;ALREADY LOCKED? BNE 110$ ;IF NE YESU8 BIS #T3.GFL,(R5) ;MARK TCB AS HAVING LOCKED EVENT FLAGS2 INC G.CNT(R1) ;LOCK THE EVENT FLACK CONTROL BLOCK6 INCB T.GGF-T.ST3(R5) ;RECORD ACCESS FOR SLAVE TASKING' BR 110$ ;INDICATE FLAGS ALREADY EXISTU ;+-; **-DRELE-ELIMINATE GROUP GLOBAL EVENT FLAGS);CA; THE ELIMINATE GROUP GLOBAL EVENT FLAGS DIRECTIVE ELIMINATES THEC; GROUP GLOBAL EVENT FLAGS FOR THE SPECIFIED GROUP. IF THE ISSUINGW@; TASK HAD LOCKED THE EVENT FLAGS VIA A PREVIOUSLY ISSUED CREATEA; GROUP GLOBAL EVENT FLAGS DIRECTIVE, THEY WILL ALSO BE UNLOCKED.C;SA; THE UNLOCK GROUP GLOBAL EVENT FLAGS DIRECTIVE UNLOCKS THE EVENTN%; FLAGS FOR THE ISSUING TASK'S GROUP.R;C;SA; DPB FORMAT FOR THE ELIMINATE GROUP GLOBAL EVENT FLAG DIRECTIVE:+; #; WD. 0 -- DIC. (159.),DBP SIZE(2.) ; WD. 1 -- GROUP NUMBERT;R>; DPB FORMAT FOR THE UNLOCK GROUP GLOBAL EVENT FLAG DIRECTIVE:;E#; WD. 0 -- DIC. (159.),DPB SIZE(1.) ; ; INPUTS: ;K8; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK; R3=ADDRESS OF THE DBP + 2D.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASKN;K5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)C;S-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.V&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED=; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF NON-PRIVILEGEDE7; TASK ATTEMPTS TO ELIMINATE FLAGS FOR ANOTHER GROUP.(9; DIRECTIVE STATUS OF 'D.RS17' IS RETURNED IF EVENT FLAGO'; BLOCK IS ALREADY MARKED FOR DELETE.H=; DIRECTIVE STATUS OF 'D.RS91' IS RETURNED IF THE SPECIFIED 5); EVENT FLAG GROUP IS GREATER THAN 377.K<; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF THE SPECIFIED$; EVENT FLAG GROUP DOES NOT EXIST.;- V#$DRELE::MOVB -(R3),R0 ;GET DPB SIZEE0 CMPB (R3)+,#2 ;IS THIS THE ELIMINATE DIRECTIVE? BEQ 50$ ;IF EQ YES' ASR R0 ;IS THIS THE UNLO002f fcDATADATADATADATADATADATADATACK DIRECTIVE?M& BNE 120$ ;IF NE NO, ILLEGAL DPB SIZE0 CALL $UNLCK ;ATTEMPT TO UNLOCK THE EVENT FLAGS" BCS 110$ ;IF CS ALREADY UNLOCKED7$ELIM:: BNE 45$ ;IF NE G.CNT<>0, DON'T ELIMINATE FLAGST) TSTB G.STAT(R1) ;MARKED FOR ELIMINATION?O) BNE 65$ ;IF NE YES, ELIMINATE THE FLAGSU45$: RETURN ;R250$: CALL 300$ ;LOOK FOR THE SPECIFIED EVENT FLAG! BCS 100$ ;IF CS FLAGS NOT FOUNDR* CMP R2,R4 ;ELIMINATING TASK'S OWN GROUP?& BNE 60$ ;IF NE NO, DON'T UNLOCK THEM. BIT #T3.GFL,(R5) ;ARE THE EVENT FLAGS LOCKED? BEQ 60$ ;IF EQ NO 8 BISB #GS.DEL,G.STAT(R1) ;MARK THE FLAGS FOR ELIMINATION# CALL 200$ ;UNLOCK THE EVENT FLAGSD. BEQ 65$ ;IF EQ, G.CNT=0, ELIMINATE THE FLAGS RETURNN060$: TSTB G.STAT(R1) ;ALREADY MARKED FOR DELETE? BNE 110$ ;IF NE YESS$ INCB G.STAT(R1) ;MARK IT FOR DELETE! TST G.CNT(R1) ;STILL BEING USED?P/ BNE 210$ ;IF NE YES, DON'T ELIMINATE THEM YETO&65$: CALLR $ELGEF ;ELIMINATE THEM NOW%70$: DRSTS D.RS1 ;ALLOCATION FAILUREL!80$: DRSTS D.RS91 ;INVALID GROUPE'90$: DRSTS D.RS16 ;PRIVILEGE VIOLATION $100$: DRSTS D.RS97 ;GROUP NOT FOUNDE110$: DRSTS D.RS17 ;FLAGS ALREADY EXIST OR ALREADY MARKED FOR DELETEI%120$: DRSTS D.RS99 ;ILLEGAL DPB SIZET:200$: BIC #T3.GFL,(R5) ;MARK TCB AS NOT HAVING EFNS LOCKED4 DECB T.GGF-T.ST3(R5) ;DECREMENT TASK'S ACCESS COUNT- DEC G.CNT(R1) ;DECREMENT THE FLAGS USE COUNT0 210$: RETURN6300$: ADD #T.ST3,R5 ;POINT TO THIRD STATUS WORD OF TCB. MOVB H.CUIC+1(R4),R2 ;GET TASK'S GROUP NUMBER) MOV (R3),R4 ;GET SPECIFIED GROUP NUMBERD# BNE 310$ ;IF NE ONE WAS SPECIFIED0$ MOV R2,R4 ;ASSUME TASK'S OWN GROUP BR 325$ ;JOIN COMMON CODEA:310$: BIT #T3.PRV,(R5) ;TASK ALLOWED TO SPECIFY ANY GROUP? BNE 320$ ;IF NE YES02 CMPB R4,R2 ;ATTEMPTING TO SPECIFY ANOTHER GROUP? BNE 90$ ;IF NE YES'320$: CMP R4,#377 ;LEGAL GROUP NUMBER?C BHI 80$ ;IF HI NO 6325$: CALLR $SRGEF ;TRY TO FIND THE GROUP'S CNTRL BLK;+;T?; THIS ROUTINE WILL UNLOCK THE GROUP GLOBAL EVENT FLAGS FOR THEU<; TASK'S GROUP IF THE TASK HAS THEM LOCKED FROM A PREVIOUSLY2; ISSUED CREATE GROUP GLOBAL EVENT FLAG DIRECTIVE.;S ; INPUTS:; ); R4=ADDRESS OF THE CURRENT TASK'S HEADER,&; R5=ADDRESS OF THE CURRENT TASK'S TCB;B ; OUTPUTS:; 6; C=1 IF THE EVENT FLAGS FOR THE TASK'S GROUP WERE NOT; LOCKED BY THE TASK4; C=0 IF THE EVENT FLAGS WERE SUCCESSFULLY UNLOCKED.;I!; R4 IS DESTROYED BY THIS ROUTINEI; R5 = R5+T.ST3T;B;-:$UNLCK::ADD #T.ST3,R5 ;POINT TO THE THIRD TASK STATUS WORD6 BIT #T3.GFL,(R5) ;ARE THE TASKS GROUP GLOBALS LOCKED? BEQ 400$ ;IF EQ NO, MOVB H.CUIC+1(R4),R4 ;GET TASK'S GROUP CODE, CALL $SRGEF ;FIND THE EVENT FLAG CNTRL BLK/ BCC 200$ ;JOIN COMMON CODE WITH THE DIRECTIVE = BGCK$A BF.DIR,BE.GGF,FATAL ;TASK LOCKED TO NONEXISTANT FLAGSE*400$: SEC ;TASK NOT LOCKED TO EVENT FLAG RETURN ;E .DSABL LSBW .ENDC ; DF G$$GEF . .END R4 IS DESTROYED BY THIS ROUTINEI; R5 = R5+T.ST3T;B;-:$UNLCK::ADD #T.ST3,R5 ;POINT TO THE THIRD TASK STATUS WORD6 BIT #T3.GFL,(R5) ;ARE THE TASKS GROUP GLOBALS LOCKED? BEQ 4 .TITLE DRGIND .IDENT /06.05/R ;T7; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;R>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED@ ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;E ; PREVIOUSLY MODIFIED BY:  ;A ; JIM KAUFFMAN; ERIC POSTPISCHIL; K. L. NOEL;A;S-; MODIFIED FOR RSX-11M-PLUS VERSION 4.2 BY:R;A; K. L. NOEL 14-JUN-88 06.00E;0 ; KLN104 -- Transport SET UIC; ; R. D. HANEY 15-AUG-88 06.01;<; RDH166 -- Check for IE.PRI return from remote in GI.DEF;#; L. M. PETERSON 12-OCT-88 06.02H;F@; LMP122 -- SET CC.TTD FOR MCR PROMPT REQUEST (TO FORCE SNCMD; WHEN IN SERIAL MODE) ;F#!; B. S. MCCARTHY 30-NOV-88 06.03M"; ,#; BM418 -- ADD PASSAGE OF $FMSK5 TO SFFMK$;L"%; B. S. MCCARTHY 8-DEC-88 06.03&; 6'; BM418 -- PUT BACK PASSAGE OF SYSTEM NAME IN SFFMK8(; AND ADD PASSAGE OF $FMSK5 TO SFFMK (ALL IN0)00 fed; ALL, THAT 30-NOV CORRECTION WASN'T)*; TERRIBLY GOOD NOW, WAS IT?)e+;i,; K. L. NOEL 22-DEC-88 06.04N-;OC.; KLN118 -- Fix GI.DEV subfunction to set success for local devs(/;R/; K. L. NOEL 5-FEB-89 06.05/;)6/; KLN125 -- Fix KLN118 to work with non-CPR systems:/; (.COR reconstructed by LBM to propogate when master 7/; pack zeroed for CPR v1.0 before M-PLUS v4.2 ship)A0; 123;N4; LOCAL DATA5; :6 GBLMSK = 7 ;SEARCH INHIBIT MASK TO ONLY SYSTEM LOGICALS97 USRMSK = 15 ;SEARCH INHIBIT MASK TO ONLY USER LOGICALSO)8 MAP6 = 140000 ;OFFSET TO START OF APR6D9:;0;; MACRO LIBRARY CALLSF<;.'= .IF DF C$$RMT ; REMOTE TASK SUPPORTd>? .MCALL CPRDF$ @ CPRDF$-AB .ENDC ; C$$RMTNC .PAGED;1+E; DEFINE SUBFUNCTION DISPATCH TABLE ENTRYeF;r(G; SFDIR FLAGS,DPBSIZ,BUFSIZ,ADDR,CONDH;a I; WHERE:J; CK; FLAGS= SF.IN SET IF THE SUBFUNCTION RETURNS SYSTEM INFORMATION.-L; SF.PRV IF THE SUBFUNCTION IS PRIVILEGED.S1M; (BITS 15-13 IN THE FIRST WORD OF THE ENTRY). N; DPBSIZ=DPB SIZE IN WORDS. 0O; (BITS 12-8 IN THE FIRST WORD OF THE ENTRY).8P; BUFSIZ=SIZE OF THE MINIMUM BUFFER REQUIRED IN WORDS./Q; (BITS 7-0 IN THE FIRST WORD OF THE ENTRY).4R; ADDR=ADDRESS OF ROUTINE TO PERFORM THE FUNCTION. S; (SECOND WORD OF THE ENTRY).:T; COND=EXPRESSION ON WHICH DIRECTIVE IS CONDITIONALIZED.4U; DEFAULT OF $SFTBL IS USED FOR CONVENIENCE (I.E.V; UNCONDITIONAL).W;SX4Y .MACRO SFDIR FLAGS,DPBSIZ,BUFSIZ,ADDR,COND=$SFTBLZ[\ .IF DF COND]%^ .WORD FLAGS!! _ .WORD ADDR `a .IFFWb c .WORD 0 d .WORD 0ef .ENDCghi .ENDMjk .PAGElm;+En; SUBFUNCTION DISPATCH TABLE FOR THE GET/SET INFORMATION DIRECTIVE. o;-pqHr$SFTBL::SFDIR SF.PRV!SF.IN, 8., 6.,$SFGAS ;000.-GET ASSIGNMENT INFO@s SFDIR SF.IN, 4., 5.,$SFUIC ;001.-GET SYSUIC, LIBUIC,8t SFDIR 0, 3., 0.,$SFDEF ;002.-SET DEFAULT UICCu SFDIR SF.IN, 4., 9.,$SFFMK ;003.-GET FEATURE MASK WORDSD?v SFDIR 0, 4., 2.,$SFQMC ;004.-QUEUE MCR COMMAND LINE.w SFDIR 0, 6., ,$SFUAB,A$$CNT%x ;005.-GET USER ACCOUNT BLKCy SFDIR SF.IN, 6., 1.,$SFDEV ;006.-GET DEVICE INFORMATIONC;z SFDIR 0, 3., 0.,$SFSPR ;007.-SET TASK PRIVILEGEF9{ SFDIR 0, 4., 0.,$SFREN ;008.-CHANGE TASK NAME :| SFDIR SF.IN, 4.,97.,$SFAPR ;009.-READ ALL APRSC} SFDIR SF.IN, 6., 2.,$SFFTK ;010.-FIND AND GET TASK INFOF9~ SFDIR 0, 10.,0,$SFPMN ;011.-SET PMON PARMS 8 SFDIR 0, 4., 1.,$SFCFG ;012.-GET CONFIG. TAB8 SFDIR 0, 4., 3.,$SFSSN ;013.-GET SYS. SERIAL8 SFDIR 0, 4., 2.,$SFABO ;014.-ABORT ALL TASKS> SFDIR SF.IN, 4., 2.,$SFVEC ;015.-TRANSLATE VECTORD SFDIR 0, 0., 0., 0,NEVER ;016.-GET MASS STORAGE (P/OS)8 SFDIR SF.IN, 4., 5.,$SFUPD ;017.-UPDATE UICS> SFDIR SF.IN, 6., 1.,$SFDEV ;018.-SON OF GET DEVICE ; INFORMATION$SFHI==<.-$SFTBL/4-1> ;++; **-$DRGIN-GENERAL INFORMATION DIRECTIVEF; B; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO PERFORM THE SUBFUNCTION; INDICATED IN THE DPB. ?; THE FUNCTIONS CAN EITHER SET PARAMETERS OR GET INFORMATION. ;2D;*****************************************************************;;8; CAUTION! THIS DIRECTIVE IS INTENDED FOR USE ONLY BY3; DEC SOFTWARE. THERE IS NO GUARANTEE THAT THIS.1; DIRECTIVE WILL BE IN FUTURE RELEASES OR THAT;%; THE FORMAT WILL REMAIN THE SAME.1;D;*****************************************************************;I; DPB FORMAT:S; +; WD. 00 -- DIC(169.),DPB SIZE(VARIABLE).T*; WD. 01 -- SUBFUNCTION CODE (LOW BYTE).+; WD. 02 -- PARAMETER 1 (BUFFER ADDRESS).*1; WD. 03 -- PARAMETER 2 (BUFFER SIZE IN WORDS).*6; WD. N -- PARAMETER N (MAX DPB SIZE IS 32. WORDS).;U ; INPUTS:;C5; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK.C#; R3=POINTER TO WD. 1 IN THE DPB.A100f fcDATADATADATADATADATADATADATA; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK..; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;*7; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;6/; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.O(; DIRECTIVE STATUS OF +1 IS RETURNED.!; C=1 IF DIRECTIVE IS REJECTED.-9; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF THE TASKE/; HAS SPECIFIED AN INVALID SUBFUNCTION CODEU!; OR THE DPB SIZE IS INVALID.D9; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE USERT"; BUFFER FAILS ADDRESS CHECKS.4; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE7; SUBFUNCTION REQUIRES PRIVILEGE AND THE REQUESTINGA; TASK IS NOT PRIVILEGED.;=?; NOTE: IF A USER BUFFER IS SPECIFIED, THE SERVICE ROUTINE IS ;; ENTERED WITH R3 POINTING TO THE BUFFER AND R4 POINTINGD; TO WORD 4 OF THE DPB.;T;; IF NO USER BUFFER IS SPECIFIED, THE SERVICE ROUTINE ISN3; ENTERED WITH R3 POINTING TO WORD 2 OF THE DPB.C;S;- .IF DF D$$PAR $DRGN1:: .IFF ; DF D$$PAR. $DRGIN:: .ENDC ; DF D$$PAR% MOV (R3)+,R4 ;GET SUBFUNCTION CODEI$ CMP R4,#$SFHI ;CODE WITHIN RANGE? BHI 90$ ;IF HI NO0 ASH #2,R4 ;CONVERT CODE TO DOUBLE WORD INDEX. ADD #$SFTBL,R4 ;POINT TO PROPER TABLE ENTRY2 MOV (R4)+,R1 ;GET FLAGS AND MINIMUM BUFFER SIZE& BEQ 90$ ;IF EQ INVALID SUBFUNCTION .IF DF R$$PRO .IFF ;R$$PROE+ BPL 10$ ;IF PL NO PRIVILEGE IS REQUIRED2 BIT #T3.PRV,T.ST3(R5) ;CURRENT TASK PRIVILEGED?* BEQ 80$ ;IF EQ NO, PRIVILEGE VIOLATION .IFTF ;R$$PRO 10$: MOV R1,R2 ;COPY DPB SIZE SWAB R2 ;MOVE IT TO LOW BYTE( BIC #^C<37>,R2 ;CLEAR IRRELEVANT BITS& CMPB R2,$DICSV+1 ;CORRECT DPB SIZE? BNE 90$ ;IF NE NOR. MOV (R4),-(SP) ;GET SERVICE ROUTINE ADDRESS# BIC #177400,R1 ;KEEP BUFFER SIZE& BEQ 30$ ;IF EQ NO BUFFER SPECIFIED( MOV (R3)+,R0 ;GET USER BUFFER ADDRESS- CMP (R3),R1 ;IS USER BUFFER LARGE ENOUGH? BLO 90$ ;IF LO NOR6 MOV (R3),-(SP) ;SAVE NUMBER OF WORDS IN USER BUFFER: SUB R1,(SP) ;CALCULATE # OF EXTRA WORDS IN USER BUFFER: MOV (R3)+,R1 ;GET SIZE OF USER BUFFER FOR ADDRESS CHECK! ASL R1 ;CONVERT SIZE TO BYTES MOV -(R4),R2 ;GET FLAGS MOV R3,R4 ;COPY DPB ADDRESS3 MOV R0,R3 ;COPY USER BUFFER ADDR FOR ADDR CHECKC/ BIT #SF.IN,R2 ;IS THIS A READ ONLY FUNCTION?Q BEQ 20$ ;IF EQ YES4 CALL $ACHKP ;ADDRESS CHECK BUFFER FOR R/W ACCESS BR 25$ ;720$: CALL $ACHRO ;ADDRESS CHECK BUFFER FOR RO ACCESS(+ BCS 70$ ;IF CS ADDRESS CHECK HAS FAILEDS( CALL $RELOC ;RELOCATE BUFFER ADDRESS( MOV R1,KISAR6 ;MAP TO THE USER BUFFER/ MOV R2,R3 ;REDEFINE PARAMETER BLOCK ADDRESSR=25$: MOV (SP)+,R2 ;GET NUMBER OF EXTRA WORDS IN USER BUFFERP930$: CALLR @(SP)+ ;DISPATCH TO THE APPROPRIATE ROUTINED*70$: DRSTS D.RS98 ;SET DIRECTIVE STATUS .IFF ;R$$PROQ)80$: DRSTS D.RS16 ;PRIVILEGE VIOLATIONK .IFTF ;R$$PRO090$: ;REF. LABLE FOR ERROR RETURN OF IE.SDP .IFT ;R$$PRO3$SFGAS:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OSC3$SFUIC:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OST3$SFDEF:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OSC3 $SFFMK:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OSW3 $SFQMC:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OST3 $SFDEV:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OS 3 $SFSPR:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OSS3 $SFREN:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OSO3$SFAPR:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OSP3$SFFTK:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OST3$SFABO:: ;REF. LABEL TO NOP SUBFUNCTION ON P/OST .IFTF ;R$$PRO .IF NDF P$$MON. $SFPMN:: .ENDC ;P$$MON .IF NDF P$$3XXT5$SFCFG:: ;REF. LABEL TO NOP SUBFUNCTION ON M-PLUS 5$SFSSN:: ;REF. LABEL TO NOP SUBFUNCTION ON M-PLUSO .ENDC ; DF P$$3XX4  DRSTS D.RS99 ;INVALID SUBFUNCTION CODE OR BUFFER!" .IFF ;R$$PRO #$%;+%&; **-SFGAS-GET ASSIGNED DEVICE NAME ';UI(; THIS SUBFUNCTION SEARCHES THE ASSIGNMENT LIST 00fedFOR A SPECIFIED LOGICALM); NAME AND RETURNS THE NAME OF THE PHYSICAL DEVICE TO WHICH IT IS ASSIGNED.*;N+; DPB FORMAT:,;N%-; WD. 00 -- DIC(169.),DPB SIZE(8.).F/.; WD. 01 -- SUB FUNCTION CODE (0) (LOW BYTE).T$/; WD. 02 -- OUTPUT BUFFER ADDRESS.,0; WD. 03 -- OUTPUT BUFFER SIZE (IN WORDS)."1; WD. 04 -- LOGICAL DEVICE NAME.$2; WD. 05 -- LOGICAL DEVICE NUMBER.F3; WD. 06 -- TI NAME FOR WHICH THIS ASSIGNMENT HOLDS. (0 FOR GLOBAL).4; WD. 07 -- TI DEVICE NUMBER.C<5; (IF HIGH BIT OF UNIT NUMBER IS SET, GET LOGIN ASSIGN)6;R7; BUFFER FORMAT:8;A&9; WD. 00 -- NAME OF ASSIGNED DEVICE.<:; WD. 01 -- UNIT NUMBER OF ASSIGNED DEVICE AND FLAGS BYTE.0;; WD. 02 -- FIRST DEVICE CHARACTERISTICS WORD.1<; WD. 03 -- SECOND DEVICE CHARACTERISTICS WORD.30=; WD. 04 -- THIRD DEVICE CHARACTERISTICS WORD.2>; WD. 05. -- FOURTH DEVICE CHARACTERISTICS WORD.?;. @; INPUTS:-A;N,B; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.1C; R3=ADDRESS OF THE LOGICAL NAME IN THE BUFFER.F$D; R4=ADDRESS OF WD. 04 IN THE DPB.1E; R5=ADDRESS OF THE TCB OF THE REQUESTING TASK.DF;-7G; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)AH;E,I; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED.(J; DIRECTIVE STATUS OF +1 IS RETURNED.!K; C=1 IF DIRECTIVE IS REJECTED.D2L; DIRECTIVE STATUS OF 'D.RS5' IS RETURNED IF NO7M; ASSIGNMENT EXISTS FOR THE SPECIFIED LOGICAL NAME..:N; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF SPECIFIEDO; DEVICE IS NOT A TERMINAL.I;P; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF REQUESTING.Q; TASK IS NOT PRIVILEGED.TR;QS;-T U$SFGAS::V0W .IF DF L$$GCL ;EXTENDED LOGICAL NAME SUPPORTX@Y MOV #GBLMSK,$TONYL ;INITIALIZE SEARCH ONLY TO SYSTEM LOGICALSZ[ .IFTF ;DF L$$GCL.\)] MOV R3,-(SP) ;SAVE USER BUFFER ADDRESSC0^ CLR R2 ;ASSUME NO TERMINAL SPECIFIED, UCB=0"_ MOV 4(R4),R0 ;GET TERMINAL NAME(` BEQ 10$ ;IF EQ DON'T LOOK FOR TI UCB%a MOV 6(R4),R1 ;GET TI DEVICE NUMBERE9b BIC #177400,R1 ;STRIP OFF HIGH BYTE (LOGIN/LOCAL FLAG) 5c CALL $CVDVN ;CONVERT DEVICE NAME TO A UCB ADDRESSD#d BCS 70$ ;IF CS DEVICE NOT FOUND+e BIT #DV.TTY,U.CW1(R2) ;IS IT A TERMINAL?Tf BEQ 70$ ;IF EQ NOOgh10$:(i .IF DF C$$RTK ;REMOTE DEVICE SUPPORTj0k BIT #F5.RTK,$FMSK5 ;REMOTE DEVICE SUPPORT ON?l BEQ 17$ ;IF EQ NO2m;SLn; FOR REMOTE HOST SYSTEMS, WE DO NOT ALLOW GET ASSIGNED DEVICE FOR A LOCALIo; LOGICAL NAME WHERE THE TI IS NOT OUR OWN. THIS IS BECAUSE THE CPRAMEHp; SERVICING THE REQUEST DOES NOT HAVE ACCESS TO ANOTHER AME'S LOGICALSq;E(r TST R2 ;WAS THERE A TI UCB SPECIFIEDs BEQ 15$ ;IF EQ NOO$t CMP R2,T.UCB(R5) ;IS THIS OUR TI?u BNE 70$ ;IF NE NO$v; (w; GIN$ DIRECTIVE MUST BE DONE REMOTELYx;E+y15$: MOV R4,R3 ;PUT ADDRESS OF DPB IN R3T"z SUB #4,R3 ;AND POINT TO WORD 2#{ CLR R2 ;INDICATE NO UCB ADDRESSY|(} JMP $RTINF ;JOIN COMMON CODE IN GLUN~ .ENDC ;C$$RTK%17$: TST R2 ;WAS TI UCB SPECIFIED?B1 BEQ 20$ ;IF EQ NO, LOOK FOR GLOBAL ASSIGNMENTN .IFF ;DF L$$GCL=20$: MOV #$LOGHD,R1 ;GET ADDRESS OF LOGICAL ASSIGNMENT HEAD.30$: MOV (R1),R1 ;GET NEXT ASSIGNMENT BLOCK BEQ 80$ ;IF EQ END OF LIST. TST R0 ;SEARCHING FOR A GLOBAL ASSIGNMENT? BNE 40$ ;IF NE NO,& TSTB L.TYPE(R1) ;GLOBAL ASSIGNMENT? BNE 30$ ;IF NE NOD BR 50$ ;SKIP UCB CHECK.40$: CMP L.UCB(R1),R2 ;TI UCB ADDRESS MATCH? BNE 30$ ;IF NE NOC. TSTB 7(R4) ;LOOKING FOR LOGIN ASSIGNMENT ? BPL 50$ ;IF PL NOQ4 CMPB #-1,L.TYPE(R1) ;IS THIS A LOGIN ASSIGNMENT ? BNE 30$ ;IF NE NOG-50$: CMP L.NAM(R1),(R4) ;DEVICE NAME MATCH? BNE 30$ ;IF NE NOT, CMPB L.UNIT(R1),2(R4) ;UNIT NUMBER MATCH? BNE 30$ ;IF NE NOE( MOVB 7(R4),R2 ;SAVE LOGIN ASSIGN FLAG/ MOV L.ASG(R1),R4 ;GET ASSIGNMENT UCB ADDRESSM' TST R0 ;LOOKING FOR GLOBAL ASSIGN ?;& BEQ 65$ ;IF EQ YES - USE UCB AS IS. TST R2 ;WAS IT A LOGIN ASSIGNMENT LOOKUP ?, BPL 65$ ;IF PL NO, USE "RAW" UCB ADDRESS .IFT ;DF L$$GCL5 BIT #U2.LOG,U.CW2(R2) ;IS THIS TERMINAL LOGGE00%f fcDATADATADATADATADATADATADATAD ON?B- BNE 80$ ;IF NE, NO, THERE ARE NO LOGICALSD& MOV R2,R1 ;GET COPY OF UCB ADDRESS3 CALL $GTUSR ;SET UP THE USER HASH TABLE ADDRESSB@ MOV #USRMSK,$TONYL ;INITIALIZE TO INHIBIT ALL BUT USER TABLES9 MOVB #LB.LOG,R3 ;SET UP THE LOGIN MOD VALUE BY DEFAULTO- TSTB 7(R4) ;SEE IF THIS IS A LOGIN LOOKUPY6 BMI 25$ ;IF MI, IT IS, KEEP THE INITIALIZED VALUES520$: CLR R3 ;ZERO MOD VALUE TO PICK UP ANY LOGICALS(25$: MOV (R4),R2 ;GET DEVICE MNEMONIC  MOV 2(R4),R0 ;GET UNIT NUMBER2 MOV R4,-(SP) ;SAVE THE DPB ADDRESS ACROSS CALLS) MOV #$LNTSL,-(SP) ;CALL LOOKUP ROUTINES* CALL $MPDC3 ;IN THIRD DIRECTIVE COMMON. BCC 30$ ;IF CC, SUCCESSFUL LOOKUP IN TABLE- TST R3 ;SEE IF THERE REALLY WAS A LOGICAL33 BEQ 80$ ;IF EQ, NO LOGICAL ASSOCIATED WITH NAME4+ MOV (SP)+,R4 ;RESTORE THE BUFFER ADDRESS$6 BR 70$ ;TRANSLATION OCCURRED TO BAD DEVICE OR LOOP+30$: MOV (SP)+,R4 ;RESTORE ADDRESS TO DPB: MOV R2,(R4) ;PUT EQUIVALENCE NAME MNEMONIC BACK IN DPB) MOV R0,2(R4) ;SAME FOR THE UNIT NUMBERP- MOV $DEVHD,R2 ;GET ADDRESS OF DEVICE TABLEA/35$: CMP (R4),D.NAM(R2) ;IS THIS THE DEVICE ?E BEQ 45$ ;YES.40$: MOV D.LNK(R2),R2 ;NO, POINT TO NEXT DCB BNE 35$ ;GOT ONE! BR 70$ ;END OF DEVICES, ERRORI$45$: MOV 2(R4),R5 ;GET UNIT NUMBER+ CMPB R5,D.UNIT(R2) ;IS UNIT ON THIS DCB?$ BLO 40$ ;NON CMPB R5,D.UNIT+1(R2) ;MAYBE BHI 40$ ;NO!! CLR R3 ;GET FIRST UNIT NUMBER BISB D.UNIT(R2),R3 ;V* MOV D.UCB(R2),R1 ;GET FIRST UCB ADDRESS+ SUB R3,R5 ;COMPUTE RELATIVE UNIT NUMBERH BEQ 55$ ;FOUND ITV/50$: ADD D.UCBL(R2),R1 ;NO, POINT TO NEXT UCBE DEC R5 ;FOUND IT YET?S BNE 50$ ;NO, LOOPR,55$: MOVB 7(R4),-(SP) ;SAVE THE LOGIN FLAG, MOV R1,R4 ;GET A COPY OF THE UCB ADDRESS9 TSTB (SP)+ ;SEE IF THIS WAS A LOGIN ASSIGNMENT LOOKUPT/ BPL 65$ ;IF PL, NO, LEAVE UCB ADDRESS AS ISI .ENDC ;DF L$$GCL$.60$: CMP U.RED(R4),R4 ;END OF REDIRECT CHAIN  BEQ 65$ ;IF EQ YES, FINISHED& MOV U.RED(R4),R4 ;POINT TO NEXT UCB BR 60$ ;AND GO AGAIN65$: ;REFERENCE LABEL0 MOV (SP)+,R3 ;RESTORE THE USER BUFFER ADDRESS6 CALLR $GLINF ;CONTINUE THROUGH GET LUN INFORMATION$70$: DRSTS D.RS92 ;INVALID DEVICE*80$: DRSTS D.RS5 ;NO DEVICE IS ASSIGNED;+L; **-$SFUIC-GET SYSUIC, LIBUIC, CURRENT UIC, PROTECTION UIC, AND LOGIN UIC; A; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO RETURN THE SYSTEM UIC,U@; THE LIBRARY UIC, AND THE TASK'S CURRENT AND PROTECTION UICS,G; AND TI LOGIN UIC. IF SPACE IS AVAILABLE, TRANSFER OTHER UIC AND CLI5; INFORMATION.;; DPB FORMAT:R;E%; WD. 00 -- DIC(169.),DPB SIZE(4.).N.; WD. 01 -- SUBFUNCTION CODE (1) (LOW BYTE).; WD. 02 -- BUFFER ADDRESS.%; WD. 03 -- BUFFER SIZE (IN WORDS).N;; BUFFER FORMAT:; ; WD. 00 -- SYSTEM UIC.,; WD. 01 -- LIBRARY UIC.-; WD. 02 -- H.DUIC FOR THE REQUESTING TASK.E-; WD. 03 -- H.CUIC FOR THE REQUESTING TASK.I; WD. 04 -- LOGIN UIC.;R ; INPUTS:,; ,; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.(; R3=ADDRESS OF WD. 00. OF THE BUFFER.*; R5=TCB ADDRESS OF THE REQUESTING TASK.;6 ; OUTPUTS:;?; THE USER'S BUFFER IS FILLED WITH THE REQUESTED INFORMATION.F;D;-:$SFUIC::MOV $SYUIC,(R3)+ ;MOVE SYSTEM UIC TO USER BUFFER% MOV $LBUIC,(R3)+ ;MOVE LIBRARY UIC .IF DF X$$HDR% CLR -(SP) ;RESERVE SPACE ON STACK  CLR -(SP) ;30 MOV KISAR6,-(SP) ;SAVE MAPPING TO USER BUFFER2 MOV $SAHDB,KISAR6 ;MAP NON RESIDENT TASK HEADER4 MOV $SAHPT,R4 ;GET HEADER ADDRESS OF CURRENT TASK) MOV H.DUIC(R4),2(SP) ;SAVE DEFAULT UIC )  MOV H.CUIC(R4),4(SP) ;SAVE CURRENT UIC$  MOV (SP)+,KISAR6 ;RESTORE MAPPING$  MOV (SP)+,(R3)+ ;COPY CURRENT UIC5  MOV (SP)+,(R3)+ ;AND PROTECTION UIC TO USER BUFFERO  .IFF4 MOV $HEADR,R4 ;GET HEADER ADDRESS OF CURRENT TASK9 MOV H.DUIC(R4),(R3)+ ;MOVE CURRENT UIC TO USER BUFFER)< MOV H.CUIC(R4),(R3)+ ;MOVE PROTECTION UIC TO USER BUFFER .ENDC ;X$$HDR MOV T.UCB(R5),R1 ;GET00-fed TI UCB; .IF DF A$$CNT .IF DF D$$PAR- MOV KISAR6,-(SP) ;SAVE USER BUFFER MAPPING .  MOV T.ACN(R5),R0 ;POINT TO ACCOUNTING BLOCK!! BEQ 5$ ;IF EQ THERE ISN'T ONEC"3$: MOV R0,KISAR6 ;MAP IT+-# MOV @#B.PNT+140000,R0 ;POINT TO NEXT BLOCKF-$ CMPB #BT.UAB,@#B.TYP+140000 ;IS THIS A UAB % BNE 3$ ;IF NE NO1& MOV @#B.UUIC+140000,R0 ;GET LOGIN UIC FROM UAB ' BR 6$ ;(&(5$: MOV U.LUIC(R1),R0 ;GET LOGIN UIC3)6$: MOV (SP)+,KISAR6 ;RESTORE USER BUFFER MAPPING)0* MOV R0,(R3)+ ;RETURN LOGIN UIC TO USER BUFFER+, .IFF ;D$$PAR-2. MOV T.ACN(R5),R0 ;LOCATE FIRST ACCOUNTING BLOCK#/ BEQ 10$ ;IF EQ, THERE ISN'T ONEO)07$: MOV R0,KISAR5 ;MAP ACCOUNTING BLOCK$-1 MOV @#B.PNT+120000,R0 ;POINT TO NEXT BLOCK,-2 CMPB #BT.UAB,@#B.TYP+120000 ;IS THIS A UABY3 BNE 7$ ;IF NE NO94 MOV @#B.UUIC+120000,(R3)+ ;GET LOGIN UIC FROM THE UABG5 BR 20$ ;GO MOVE MORE DATA3610$: MOV U.LUIC(R1),(R3)+ ;GET LOGIN UIC FROM UCB)789 .ENDC ;D$$PAR:;<= .IFF ; DF A$$CNTT>/? MOV U.LUIC(R1),(R3)+ ;GET LOGIN UIC FROM UCB@A .ENDC ; DF A$$CNTBCDEF;BGG; IN ORDER TO OBTAIN THE REMAINING DATA, THE USER MUST HAVE ALLOCATEDUH; AT LEAST A 32. WORD BUFFER.0I;;BJ20$: SUB #<32.-5.>,R2 ;IS THERE ROOM FOR THE NEXT BLOCK OF DATA?K BMI 110$ ;IF MI NO0L MOV U.UIC(R1),(R3)+ ;PUT CURRENT TERMINAL UIC1M MOV U.MUP(R1),R1 ;PICK UP INDEX TO COB POINTERV)N BIC #^C,R1 ;AND ONLY THE INDEX(O MOV $CPTBL(R1),R1 ;GET POINTER TO CPB'P MOV (R1),R2 ;GET TCB ADDRESS OF CLIR0Q MOV @#KISAR6,-(SP) ;SAVE CURRENT APR6 MAPPING1R BIT #CP.POL,C.PSTS(R1) ;TCB IN SECONDARY POOL?TS BEQ 40$ ;IF EQ NOUT MOV R2,KISAR6 ;MAP TCB"U MOV #140000,R2 ;AND POINT TO IT)V40$: MOV T.NAM(R2),R1 ;GET CLI TASKNAMERW MOV T.NAM+2(R2),R2 ;+X MOV (SP)+,@#KISAR6 ;RESTORE APR6 MAPPING+7Y MOV R1,(R3)+ ;AND COPY CLI TASKNAME INTO USER BUFFERIZ MOV R2,(R3)+ ;V'[ MOV #$SYSNM,R1 ;POINT TO SYSTEM NAMEE8\ MOV (R1)+,(R3)+ ;SHUFFLE THE 6-CHARACTER NAME TO USER] MOV (R1)+,(R3)+ ;...L^ MOV (R1)+,(R3)+ ;... +_ MOV $NTUIC,(R3)+ ;SUPPLY THE NETWORK UICP6` MOV $SYSIZ,(R3)+ ;AND SYSTEM SIZE IN 32 WORD BLOCKSab .IF DF A$$CNTc#d MOV #9.,-(SP) ;MAX LENGTH OF DDST-e MOV KISAR6,-(SP) ;SAVE USER BUFFER MAPPING.f MOV T.ACN(R5),R1 ;POINT TO ACCOUNTING BLOCK"g BEQ 70$ ;IF EQ THERE ISN'T ONEh50$: MOV R1,KISAR6 ;MAP IT-i MOV @#B.PNT+140000,R1 ;POINT TO NEXT BLOCKM-j CMPB #BT.UAB,@#B.TYP+140000 ;IS THIS A UAB;k BNE 50$ ;IF NE NO 5l MOVB @#B.LDS+140000,R0 ;GET LENGTH OF DDS FROM UAB3m BEQ 70$ ;IF EQ, NO DDS'n SUB R0,2(SP) ;SUBTRACT LENGTH OF DDS,.o MOV #B.LDS+120000,R2 ;ADDRESS OF DDS IN UAB'p MOV R3,R4 ;DISPLACEMENT INTO BUFFER )q MOV (SP),R3 ;USER BUFFER MAPPING BIASSr INC R0 ;COPY SIZE BYTE ALSOR"s MOV KISAR6,R1 ;RESTORE UAB BIAS9t CALL $BLXIO ;COPY DDS FROM ACCOUNTING BLOCK TO BUFFER $u MOV (SP)+,KISAR6 ;RESTORE MAPPING v BR 80$ ;(w70$: MOV (SP)+,KISAR6 ;RESTORE MAPPING,x CLRB (R3)+ ;RETURN LENGTH TO USER BUFFER(y MOV R3,R4 ;MOVE BUFFER POINTER TO R4,z80$: TST (SP) ;IS THERE NEED TO ZERO FILL${ BEQ 100$ ;NO, DDS WAS MAX LENGTH3|90$: CLRB (R4)+ ;ZERO OUT REMAINING BUFFER SPACEC'} DEC (SP) ;LENGTH REMAINING ON STACK ~ BNE 90$ ;LOOP UNTIL DONE100$: TST (SP)+ ;CLEAN STACKK .ENDC ;A$$CNTI110$: RETURN;+"; **-$SFDEF-SET TASK DEFAULT UIC;(F; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SET THE DEFAULT UIC FOR THEI; REQUESTING TASK. IF THE TASK IS NON-PRIVILEGED, ONLY THE DEFAULT UICMK; IS CHANGED. IF THE TASK IS PRIVILEGED, BOTH THE DEAFULT AND PROTECTIONQ; UICS ARE MODIFIED.;H; DPB FORMAT:);E%; WD. 00 -- DIC(169.),DPB SIZE(3.).(.; WD. 01 -- SUBFUNCTION CODE (2) (LOW BYTE).; WD. 02 -- DEFAULT UIC.; ; INPUTS:K;); R3=ADDRESS OF DEFAULT UIC IN THE DPB.'; R5=TCB ADDRESS OF THE CURRENT TASK.; ; OUTPUTS:;I3; THE DEAFULT UIC IS SET FOR THE REQUESTING TASK.;U;-7$SFDEF::TSTB T.G005f fcDATADATADATADATADATADATADATAGF(R5) ;IS THER A GGF CONTEXT ACTIVE? BEQ 5$ ;IF EQ, NO % DRSTS D.RS17 ;RETURN IE.RSU ERRORD%5$: MOV (R3),R1 ;GET SPECIFIED UIC" BEQ 100$ ;IF EQ UIC IS INVALID& .IF DF C$$RMT ;REMOTE TASK SUPPORT5 BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT TURNED ON?I BEQ 40$ ;IF EQ, NO;$; GET A REQUEST PACKET FROM CPRBUF; MOV R3,R5 ;SAVE DPB POINTER ! MOV #1,R1 ;ALLOCATE ONE BLOCKH; MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT START$ CALL $CPALO ;ALLOCATE THE BUFFER;O; FILL IN PACKET;  MOV R0,KISAR6 ;MAP PACKET& MOV #MAP6,R1 ;GET ADDRESS OF PACKET- MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUEST  CLRB H$ICNT(R1) ;NO ITEMS# ADD #P$DPB,R1 ;POINT TO DPB AREA#+ MOV -4(R5),(R1)+ ;COPY FIRST WORD OF DPBI% MOV -2(R5),(R1)+ ;COPY SECOND WORD  MOV (R5),(R1)+ ;AND THIRD;; SEND PACKETV; # SUB #MAP6,R1 ;GET SIZE OF PACKET  CPSEN$ #SN$DIR,KISAR6,R1$;0; GET RESULTS ;P MOV R0,KISAR6 ;MAP PACKET- MOV #MAP6,R3 ;POINT TO BEGINNING OF PACKET* CMP #IS.SUC,H$STAT(R3) ;DID IT SUCCEED? BEQ 20$ ;IF EQ YESK5 CMP #IE.PRI,H$STAT(R3) ;FAIL BECAUSE NO PRIVILEGE?C BEQ 20$ ;YESE. CALLR $CPDEA ;DEALLOCATE PACKET AND RETURN20$:; 0; DEALLOCATE PACKET AND SET UP FOR COMMON CODE;O- MOV H$STAT(R3),-(SP) ;SAVE RETURNED STATUS ADD #P$DPB,R3 ;POINT TO DPB MOV 4(R3),-(SP) ;SAVE UIC" CALL $CPDEA ;DEALLOCATE PACKET MOV (SP)+,R1 ;GET UIC! MOV $TKTCB,R5 ;GET TCB ADDRESSA40$: .ENDC ; C$$RMTF .IF DF X$$HDR% MOV $SAHDB,KISAR6 ;MAP TASK HEADER ) MOV $SAHPT,R2 ;GET TASK HEADER ADDRESSF .IFF ; DF X$$HDRC) MOV $HEADR,R2 ;GET TASK HEADER ADDRESSO .ENDC ; DF X$$HDR% MOV R1,H.DUIC(R2) ;SET DEFAULT UICR& .IF DF C$$RMT ;REMOTE TASK SUPPORT5 BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT TURNED ON?M BEQ 45$ ;IF EQ, NO9 CMP #IE.PRI,(SP)+ ;REMOTE HAVE INSUFFICIENT PRIVILEGE?U' BNE 45$ ;NO, CONTINUE TO SET H.CUIC1 MOV #IS.SUC,-(SP) ;PUT SUCCESS STATUS ON STACK# BIC #1,$UMPS ;CLEAR USER'S CARRY 7 MTPD$ @#H.DSW ;PUT SUCCESS IN DIRECTIVE STATUS WORD  BR 50$ ;AND EXIT45$: .ENDC ; DF C$$RMT* BIT #T3.PRV,T.ST3(R5) ;TASK PRIVILEGED? BEQ 50$ ;IF EQ NOE* MOV R1,H.CUIC(R2) ;SET PROTECTION UIC 50$: RETURN"100$: DRSTS D.RS91 ;INVALID UIC;+ ; **-$SFSPR-SET TASK PRIVILEGE;E; THIS DIRECTIVE REQUEST THE SET/CLEAR OF THE TASK PRIVILEGE BIT INNE; THE TCB. THE PRIVILEGE BIT MAY BE CLEARED IN ANY STATE BUT MAY BE *; SET ONLY IF IT WAS PREVIOUSLY CLEARED.;M; DPB FORMAT:T;E$; WD. 00 -- DIC(169.),DPB SIZE(3.)"; WD. 01 -- SUBFUNCTION CODE (7)(; WD. 02 -- NEW PRIVILEGE FLAG (BIT 0);I ; INPUT:;$&; R3=ADDRESS OF PRIVILGE FLAG IN DPB"; R5=TCB ADDRESS OF CURRENT TASK; ; OUTPUT:  ;LE ; THE T3.PRV BIT IS SET OR CLEARED. THE PREVIOUS STATE OF T3.PRV ISE ; SAVED IN T4.PRV.O ;-1$SFSPR::MOV T.ST3(R5),R2 ;GET CURRENT PRIVILEGEM0 BIC #^C,R2 ;AND ISOLATE PRIVILEGE BIT+ BEQ 30$ ;IF EQ NOT CURRENTLY PRIVILEGEDP0 BIS #T4.PRV,T.ST4(R5) ;COPY PRIVILEGED STATE+ BEQ 30$ ;IF EQ NOT CURRENTLY PRIVILEGED % TST (R3) ;SET OR CLEAR PRIVILEGE?) BNE 40$ ;IF NE SETTING PRIVILEGED BITV$ BIC R2,T.ST3(R5) ;CLEAR PRIVILEGE  RETURN ;)30$: TST (R3) ;SET OR CLEAR PRIVILEGE? + BEQ 50$ ;IF EQ CLEARING. THIS IS A NOPI140$: BIT #T4.PRV,T.ST4(R5) ;WAS IT PRIVILEGED? 1 BEQ 60$ ;IF EQ NO, CAN'T MAKE SELF PRIVILEGED.- BIS #T3.PRV,T.ST3(R5) ;MAKE IT PRIVILEGED 50$: RETURN ;Y&60$: DRSTS D.RS16 ; PRIVILEGE ERROR !;+"; **-$SFREN-RENAME TASKI#;NF$; THIS DIRECTIVE RENAMES THE ISSUING TASK TO THE SUPPLIED TASK NAME.%; &; DPB FORMAT:I';E$(; WD. 00 -- DIC(169.),DPB SIZE(3.)"); WD. 01 -- SUBFUNCTION CODE (7)*; WD. 02-03 -- NEW TASK NAME+; ,; INPUT:-;C&.; R3=ADDRESS OF NEW TASK NAME IN DPB"/; R5=TCB ADDRESS OF CURRENT TASK0;B 1; OU00=fedTPUT:Q2;C@3; THE NEW NAME IS CHECKED FOR UNIQUENESS AND IF NOT FOUND, THE,4; ISSUING TASK IS RENAMED TO THE NEW NAME.5;-6C7$SFREN::CMP #^R...,(R3) ;DON'T ALLOW RENAME TO A DOT-DOT-DOT FORMR8 BEQ 10$ ;IF EQ ILLEGAL NAMEO<9 CALL $SRPRO ;SEARCH PROTOTYPE TCB AND TCB LISTS FOR NAME$: BCC 10$ ;IF CC NAME FOUND, ERROR8; MOV (R3),T.NAM+0(R5);ESTABLISH NEW NAME FOR THIS TASK< MOV 2(R3),T.NAM+2(R5) ;... = RETURNO7>10$: DRSTS D.RS17 ;NAME ALREADY IN USE(IE.RSU ERROR)K?@A;+JB; **-$SFFMK-GET FEATURE MASK WORDS, BASE LEVEL, VERSION, AND SYSTEM TYPEC;HD; THIS DIRECTIVE RETURNS THE FEATURE MASK WORDS TO THE REUESTING TASK.E; F; DPB FORMAT:MG;A%H; WD. 00 -- DIC(169.),DPB SIZE(4.).I.I; WD. 01 -- SUBFUNCTION CODE (3) (LOW BYTE).J; WD. 02 -- BUFFER ADDRESS.B#K; WD. 03 -- BUFFER SIZE IN WORDS.ML;3M; BUFFER FORMAT:N;E&O; WD. 00 -- FIRST FEATURE MASK WORD.'P; WD. 01 -- SECOND FEATURE MASK WORD.R&Q; WD. 02 -- THIRD FEATURE MASK WORD.'R; WD. 03 -- FOURTH FEATURE MASK WORD. )S; WD. 04 -- HARDWARE FEATURE MASK WORD. %T; WD. 05 - 06 -- SYSTEM BASE LEVEL.T"U; WD. 07 - 10 -- SYSTEM VERSION.:V; WD. 11 - 16 -- SYSTEM TYPE (RETURNED ONLY IF BUFFER IS#W; AT LEAST 15. WORDS LONG)F<X; WD. 11 - 17 -- FIFTH FEATURE MASK WORD (RETURNED ONLY IF.Y; BUFFER IS AT LEAST 16. WORDS LONG)Z;R [; INPUTS:E\; ,]; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.(^; R3=ADDRESS OF WD. 00. OF THE BUFFER.'_; R5=TCB ADDRESS OF THE CURRENT TASK.-`;R a; OUTPUTS:b;D.c; THE INFORMATION IS RETURNED TO THE CALLER.d;De;-f5g$SFFMK::MOV #$FMASK,R0 ;GET ADDRESS OF FEATURE MASKO0h MOV (R0)+,(R3)+ ;MOVE FIRST FEATURE MASK WORD1i MOV (R0)+,(R3)+ ;MOVE SECOND FEATURE MASK WORD0j MOV (R0)+,(R3)+ ;MOVE THIRD FEATURE MASK WORD1k MOV (R0)+,(R3)+ ;MOVE FOURTH FEATURE MASK WORDS4l MOV $HFMSK,(R3)+ ;MOVE HARDWARE FEATURE MASK WORD3m MOV $SYSID,(R3)+ ;MOVE BASE LEVEL TO USER BUFFERFn MOV $SYSID+2,(R3)+ ;A7o MOV $VERSN,(R3)+ ;MOVE SYSTEM VERSION TO USER BUFFERp MOV $VERSN+2,(R3)+ ;Rq;ORr; SYSTEM TYPE IS RETURNED ONLY IF THERE ARE AT LEAST 6 EXTRA WORDS IN THE BUFFERs;M&t SUB #6,R2 ;AT LEAST 6 EXTRA WORDS?u BMI 10$ ;NO, RETURN NOWE)v MOV #$SYTYP,R0 ;ADDRESS OF SYSTEM TYPE3w MOV #6,R1 ;WORD COUNT 6x5$: MOV (R0)+,(R3)+ ;MOVE SYSTEM TYPE TO USER BUFFERy SOB R1,5$ ;ALL SIX BYTES"z DEC R2 ;AT LEAST 1 EXTRA WORD?{ BMI 10$ ;NO, RETURN NOW ;| MOV $FMSK5,(R3)+ ;MOVE FIFTH FEATURE MASK TO USER BUFFERM}10$: RETURN ;T~;+$; **-$SFQMC-QUEUE MCR COMMAND LINE;MF; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO QUEUE A COMMAND LINE TO THE$; TASK'S COMMAND LINE INTERPRETER.;D; DPB FORMAT:;T%; WD. 00 -- DIC(169.),DPB SIZE(4.). (; WD. 01 -- CODE FOR SFQMC (LOW BYTE).; WD. 02 -- BUFFER ADDRESS.T%; WD. 03 -- BUFFER SIZE (IN WORDS).A;X; BUFFER FORMAT:;A-; WD. 00 THRU N -- COMMAND LINE CHARACTERS.;V ; INPUTS: ; ,; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.%; R3=ADDRESS OF USER BUFFER WD. 00.U#; R5=TCB ADDRESS OF CURRENT TASK.D;I ; OUTPUTS:;S0; C=0 IF THE DIRECTIVE SUCCESSFULLY COMPLETED.(; DIRECTIVE STATUS OF +1 IS RETURNED.!; C=1 IF DIRECTIVE IS REJECTED.,5; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF THERE..; IS INSUFFICIENT DYNAMIC MEMORY AVAILABLE.;R;- $SFQMC:: .IF DF V$$TRM  MOV T.UCB(R5),R1 ;GET TI: UCB MOV U.DCB(R1),R0 ;GET DCB0 CMP D.NAM(R0),#"VT ;IS TI A VIRTUAL TERMINAL? BNE 5$ ;IF NE NO0 TST U.PTCB(R1) ;IS VT MARKED FOR ELIMINATION? BEQ 90$ ;IF EQ YES .ENDC95$: MOV #M$$CRB,R1 ;GET SIZE OF MCR COMMAND LINE BUFFERA" CALL $ALOCB ;ALLOCATE A BUFFER& BCS 100$ ;IF CS ALLOCATION FAILURE" MOV R0,R1 ;COPY BUFFER ADDRESS- TST (R0)+ ;POINT TO UCB ADDRESS IN BUFFERL* MOV T.UCB(R5),(R0)+ ;SET TI UCB ADDRESS# MOV #M$$CRB-4,R2 ;SET LOOP COUNT 310$: MOVB (R3)+,(R0) ;MOVE COMMAND TO POOL BUFFERN" CMPB (R0),#15 ;CARRIAGE RETUR00Ef fcDATADATADATADATADATADATADATAN? BEQ 50$ ;IF EQ YES CMPB (R0)+,#33 ;ESCAPE? BEQ 50$ ;IF EQ YES3 SOB R2,10$ ;CONTINUE MOVING COMMAND TO THE POOLO2 MOVB #33,-(R0) ;TERMINATE BUFFER WITH AN ESCAPE750$: CALLR $QMCRL ;QUEUE THE COMMAND LINE TO THE CLIL=90$: DRSTS D.RS92 ;VIRTUAL TERMINAL MARKED FOR ELIMINATION0(100$: DRSTS D.RS1 ;ALLOCATION FAILURE;+$; **-$SFUAB-GET USER ACCOUNT BLOCK;BA; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO MOVE THE CONTENTS OF AL(; USER ACCOUNT BLOCK TO A USER BUFFER.;; DPB FORMAT:Y;$; WD. 00 -- DIC(169.),DPB SIZE(6.).; WD. 01 -- SUBFUNCTION CODE (5) (LOW BYTE).; WD. 02 -- BUFFER ADDRESS.(%; WD. 03 -- BUFFER SIZE (IN WORDS).0; WD. 04 -- TERMINAL NAME (0 FOR CALLER'S TI).; WD. 05 -- TERMINAL NUMBER.;E ; INPUTS: ;L,; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.%; R3=ADDRESS OF USER BUFFER WD. 00.R%; R4=POINTER TO WORD 04 OF THE DPB.E'; R5=TCB ADDRESS OF THE CURRENT TASK.S;L ; OUTPUTS:;B0; C=0 IF THE DIRECTIVE SUCCESSFULLY COMPLETED.(; DIRECTIVE STATUS OF +1 IS RETURNED.%; C=1 IF THE DIRECTIVE IS REJECTED. 0; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF0; A NON-PRIVILEGED USER SPECIFIES A TERMINAL.0; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF.; THE SPECIFIED DEVICE IS NOT A TERMINAL OR'; IF THERE IS NO UAB FOR THE DEVICE.3;E;- .IF DF A$$CNT9$SFUAB::MOV T.UCB(R5),R2 ;ASSUME TERMINAL NOT SPECIFIEDN* MOV T.ST3(R5),R1 ;GET THIRD STATUS WORD' MOV R3,R5 ;COPY USER BUFFER ADDRESS/ MOV (R4)+,R0 ;GET TERMINAL NAME FROM THE DPB  BEQ 10$ ;IF EQ NOT SPECIFIED$ BIT #T3.PRV,R1 ;TASK PRIVILEGED? BEQ 80$ ;IF EQ NOI$ MOV (R4),R1 ;GET TERMINAL NUMBER  CALL $CVDVN ;GET UCB ADDRESS# BCS 90$ ;IF CS DEVICE NOT FOUNDC/ BIT #DV.TTY,U.CW1(R2) ;IS DEVICE A TERMINAL?O BEQ 90$ ;IF EQ NO$ CMP $COPT,R2 ;IS UCB EQUAL TO CO? BNE 10$ ;IF NE NO, .IF DF D$$PAR, MOV $SYUAB,R1 ;PICK UP BIAS TO SYSTEM UAB  BR 15$ ;,10$: MOV U.UAB(R2),R1 ;PICK UP BIAS TO UAB&15$: BEQ 90$ ;IF EQ THERE IS NO UAB- MOV #B.ULEN,R0 ;SET COUNT OF WORDS TO MOVEV- MOV #120000,R2 ;DISPLACEMENT (APR5) TO UAB) MOV KISAR6,R3 ;GET USER BUFFER MAPPINGL5 MOV R5,R4 ;GET DISPLACEMENT TO USER BUFFER (APR6)O( CALL $BLXIO ;MOVE UAB TO USER BUFFER .IFF ;D$$PARB+ MOV $SYUAB,KISAR5 ;MAP TO THE SYSTEM UAB  BR 15$ ;610$: MOV U.UAB(R2),KISAR5 ;MAP THE UAB THROUGH APR 6& 15$: BEQ 90$ ;IF EQ THERE IS NO UAB/  MOV #B.ULEN/2,R0 ;SET COUNT OF WORDS TO MOVEU%  MOV #120000,R1 ;SET SOURCE ADDRESSU/ 20$: MOV (R1)+,(R5)+ ;COPY UAB TO USER BUFFERV  SOB R0,20$ ;LOOP UNTIL DONE  .ENDC ;D$$PAR  RETURN ;R)80$: DRSTS D.RS16 ;PRIVILEGE VIOLATIONC.90$: DRSTS D.RS92 ;INVALID DEVICE SPECIFIED .ENDC ;A$$CNT;+$; **-$SFDEV-GET DEVICE INFORMATION;T;S-; THE GET DEVICE INFORMATION GIN DIRECTIVE:S;M?; THIS GIN SUBFUNCTION RETURNS INFORMATION ABOUT A PARTICULAR;; DEVICE. THE DEVICE ON WHICH INFORMATION IS RETURNED, IS0C ; DETERMINED BY FIRST PERFORMING A LOGICAL ASSIGNMENT IF REQUIREDB?!; AND THE FOLLOWING ANY REDIRECTS. DEVICE ASSIGNMENTS WILL BE?"; CHECKED IF THE HIGH BIT IN THE FLAGS BYTE IS CLEAR, ELSE NO0#; CHECK IS MADE.$; ?%; ONLY THE FIRST WORD OF THE BUFFER IS REQUIRED TO BE PRESENTE<&; (IE: A BUFFER SIZE OF 1 WORD). ADDITIONAL INFORMATION IS9'; RETURNED ONLY IF THERE IS ROOM IN THE BUFFER AND THATR(; INFORMATION IS AVAILABLE.A); *; INPUTS: +;E-,; R2 = EXTRA WDS. AVAILABLE IN USER BUFFERE7-; R3 = POINTER TO USER BUFFER (MAPPED THROUGH APR 6)E$.; R4 = POINTER TO "G.IDNM" IN DPB$/; R5 = CURRENT TASK'S TCB ADDRESS0; 1;E2; 3; DPB FORMAT:B4;SC5; +-----------------------------+-------------------------------+F6; | DPBLEN=6. | DIC=169. |C7; +-----------------------------+-------------------------------+#8; | GIN SUBFUNCTION CODE (6) | C9; +-------------------------------------------------------00Mfed------+S:; | BUFFER ADDRESS |.C;; +-----------------------------+-------------------------------+T <; | BUFFER SIZE (WORDS!!) |C=; +-----------------------------+-------------------------------+>; | ASCII DEVICE NAME |C?; +-----------------------------+-------------------------------+$@; | FLAGS | DEVICE UNIT NUMBER |CA; +-----------------------------+-------------------------------+ B;UC;-DE;(%F; DPB OFFSETS AND FLAG DEFINITIONS:-G;-H)IG.INSF=2 ; LOCATION OF SUBFUNCTION CODEA'JG.IDNM=10 ;TWO BYTE ASCII DEVICE NAME-%KG.IDUN=12 ;LOGICAL UNIT NUMBER BYTETLG.IDFG=13 ;FLAGS BYTESMN;OGI.NAS=200 ;FLAG INDICATING NOT TO FOLLOW ANY ASSIGNMENTS-PQ;R; S; USER BUFFER FORMAT:T;-U;-EV; +-------------------------------+-------------------------------+ EW; | U | A | A | C | U | U | W | U | O | U | U | U | U | A | A | W |-EX; | N | T | L | O | S | S | A | N | F | S | S | S | S | T | L | A |FEY; | L | T | L | N | . | . | S | I | F | . | . | . | . | T | L | S |DEZ; | O | C | O | T | U | P | | T | L | M | F | M | L | A | O | |TE[; | A | H | C | R | M | U | R | | I | N | O | D | A | C | C | A | E\; | D | 2 | 2 | | D | B | E | O | N | T | R | M | B | H | A | S |E]; | E | U | U | O | | | D | F | E | | | | | E | T | N |-E^; | D | S | S | F | | | C | L | | | | | | D | E | D | E_; | | | | L | | | T | | | | | | | | D | | E`; +-------------------------------+-------------------------------+ a; | |b; | U.CW1 |c; | |Ed; +-------------------------------+-------------------------------+ e; | |f; | U.PRM |g; | |Eh; +---------------------------------------------------------------+ i; | |j; | U.PRM+2 |k; | |El; +---------------------------------------------------------------+ m; | |n; | ASCII DEVICE NAME |-o; | |Ep; +-------------------------------+-------------------------------+ q; | | | 4r; | L.TYPE if "WAS ASND" | DEVICE LOGICAL UNIT |0s; | L.NTBL - EXTENDED LOG | NUMBER |Et; +---------------------------------------------------------------+-u; | |5v; |--- ATTACHEE'S RAD50 TASKNAME ---|Rw; | ( IF ATTACHED ) |Ex; +---------------------------------------------------------------+3y; | ASCII TERMINAL DEVICE NAME OF ALLOCATOR | (z; |--- ( IF ALLOCATED ) ---|.{; | LOGICAL UNIT NUMBER OF ALLOCATOR |E|; +---------------------------------------------------------------+}; | |'~; |--- RAD50 ACP NAME ---|-; | ( IF MOUNTED ) |-E; +---------------------------------------------------------------+ ; | | | #; |--- -+- ---| ; | | |-#; |--- -+- ---|-; | | |#; |--- -+- ---|L; | VOLUME LABEL |L#; |--- -+- ---|C; | | |L#; |--- -+- ---|-; | | |-E; +---------------------------------------------------------------+ ; ;-; '; OFFSET AND STATUS WORD DEFINITIONS:-;-1G.IDEV=0 ;GENERAL DEVICE STATUS WORD (REQUIRED) 2 ;NOTE THAT REQUIRED WORDS ARE NOT REFLECTED IN6 ;THE "EXTRA WORD COUNT" PASSED TO THIS SUBFUNCTION ;BY DRGIN.%G.ICW1=2 ;U.CW1 FROM DEVICE'S UCB-%G.IPR1=4 ;U.PRM FROM DEVICE'S UCB %G.IPR2=6 ;U.PRM+2 FROM DEVICE'S UCB 'G.IDNM=10 ;RESOLVED ASCII DEVICE NAME (G.IUNM=12 ;RESOLVED DEVICE UNIT NUMBER0G.ILTP=13 ;TYPE OF LOGICAL ASSIGNMENT FOLLOWED;G.IATT=14 ;RAD50 TASK NAME OF ATTACHER IF DEVICE ATTACHEDFAG.IALL=20 ;ASCII TERMINAL NAME OF ALLOCATOR IF DEVICE ALLOCATEDR*G.IACP=24 ;NAME OF ACP IF DEVICE MOUNTED4G.IVOL=30 ;VOLUME NAME IF NOT MOUNTED AS ANSI TAPE+G.IVID=G.IVOL ;VOLUME SET ID IF ANSI TAPE.)G.ITLB=G.IVID+6 ;VOLUME ID IF ANSI TAPE %G.IEND=G00Uf fcDATADATADATADATADATADATADATA.IVOL+14;END OF USER BUFFER+;V$; 'G.IDEV' STATUS WORD DEFINITION:;I<GI.ASN=000001 ;A LOGICAL ASSIGNMENT WAS FOLLOWED (1=YES)+GI.ALL=000002 ;DEVICE ALLOCATED (1=YES)1*GI.ATT=000004 ;DEVICE ATTACHED (1=YES)0GI.LAB=000010 ;UNIT HAS LABELED TAPE (1=YES)*GI.MDM=000020 ;(US.MDM) UNIT IS MARKED$ ; FOR DISMOUNT (1=YES)6GI.FOR=000040 ;(US.FOR) UNIT IS MOUNTED AS FOREIGN ; VOLUME (1=YES)3GI.MNT=000100 ;(US.MNT) UNIT IS MOUNTED (0=YES)G-GI.OFL=000200 ;UNIT OR CONTROLLER OFFLINEI0GI.UOF=000400 ;(US.OFL) UNIT OFFLINE (1=YES)GI.RED=001000L9GI.PUB=002000 ;(US.PUB) UNIT IS PUBLIC DEVICE (1=YES) -GI.UMD=004000 ;(US.UMD) UNIT ATTACHED FORT# ; DIAGNOSTICS (1=YES)I&GI.COF=010000 ;DEVICE'S CONTROLLER ; WAS OFFLINE (1=YES).GI.ALU=020000 ;DEVICE WAS ALLOCATED BY THE ; ISSUER'S TI: (1=YES)8GI.ATU=040000 ;DEVICE WAS ATTACHED BY ISSUER (1=YES)5GI.UNL=100000 ;DEVICE'S DRIVER NOT LOADED (1=YES)0; .; DEFINE UCB AND MAGTAPE DEFINITIONS LOCALLY;N .MCALL MTADF$,UCBDF$R+ MTADF$ ;DEFINE MAGTAPE DATA STRUCTURESI& UCBDF$ ;DEFINE UCB DATA STRUCTURE;(:; SINCE MANY OF THE STATUS BITS ARE DIRECTLY COPIED FROM=; U.STS AND U.ST2 OF THE UCB, WE MUST ASSUME THE FOLLOWING:L;1 ASSUME GI.MDM,US.MDM  ASSUME GI.FOR,US.FORT ASSUME GI.MNT,US.MNT: ASSUME GI.UOF, ASSUME GI.PUB, ASSUME GI.UMD,;R=; THE FOLLOWING BITS IN THE STATUS WORD ARE NOT COPIED FROMN@; U.STS AND U.ST2 OF THE DEVICE'S UCB. THEREFORE THE FOLLOWING2; BIT MASK IS USED TO CLEAR OUT THE UNUSED BITS.;SGCLRMSK=GI.UNL!GI.ATU!GI.ALU!GI.RED!GI.OFL!GI.ATT!GI.ALL!GI.ASN!GI.LAB;.:; THE FOLLOWING SECTION OF THIS GIN FUNCTION ATTEMPTS=; TO LOCATE THE CORRECT UCB ADDRESS OF THE DEVICE SPECIFIEDU;; IN THE DPB. INITIALLY, A SEARCH IS MADE TO DETERMINE IFP;; A LOGICAL ASSIGNMENT IS IN EFFECT FOR THE ISSUING TASK.WA; THE LOGICAL ASSIGNMENT MAY BE SYSTEM WIDE (GLOBAL), LOGIN, ORTC; LOCAL TO THE TI: OF THE TASK AS SPECIFIED BY THE "L.TYPE" FIELDT@; IN THE LOGICAL ASSIGNMENT BLOCK. IF THE TASK HAS THE "SLAVE"@; ATTRIBUTE OR IF THE "GI.NAS" FLAG HAS BEEN SET, THEN LOGICAL$; ASSIGNMENTS WILL NOT BE CHECKED.;OB; THIS CODE TO FIND THE UCB OF THE SPECIFIED DEVICE IS SHARED BY2; THE SON OF GET DEVICE INFORMATION SUBFUNCTION.;T $SFDEV::& MOV R2,-(SP) ;SAVE EXTRA WORD COUNT/ CLR -(SP) ;INITIALIZE SCRATCH WORD IN WHICHB) ;THE 'GI.RED' AND 'GI.ASN' IS SAVEDA0 CLR $TEMP0 ;INITIALIZE SCRATCH WORD IN WHICH ;WE WILL SAVE L.TYPE* MOV R3,R1 ;COPY POINTER TO USER BUFFER(10$: CLR (R1)+ ;CLEAR OUT USER BUFFER' DEC R2 ; NOTE THAT USER BUFFER SIZEE$ BPL 10$ ; IS EXTRA WD. COUNT + 13 MOV (R4)+,R1 ;GET DEVICE NAME (TWO ASCII CHARS.)A1 MOV (R4),R0 ;GET UNIT NUMBER (LOW ORDER BYTE)N' ;AND FLAGS BYTE (HIGH ORDER BYTE)(- .IF NDF C$$RMT ;IF NO REMOTE TASK SUPPORTZ2 MOV G.INSF-G.IUNM(R4),R4 ; GET SUBFUNCTION WORD5 TST R0 ; RESET CONDITION CODES FOR LATER ;KLN125N .IFF 6 BIT #F5.RTK,$FMSK5 ; REMOTE TASK SUPPORT TURNED ON? BNE 11$ ; IF NE, YES2 MOV G.INSF-G.IUNM(R4),R4 ; GET SUBFUNCTION WORD  TST R0 ;" JMP 44$ ; JOIN NON REMOTE CODE711$: ADD #4,SP ; CLEAN STACK, WILL BE RETURNED LATERM;4$; GET A REQUEST PACKET FROM CPRBUF;/ SUB #12,R4 ; POINT BACK TO BEGINNING OF DPBF$ MOV 6(R4),R1 ; GET SIZE OF BUFFER+ CMP R1,#44 ; IS IT LARGER THAN MAXIMUM?F BLE 12$ ; IF LE, OKAYR!  MOV #22,R1 ; SET LENGTH TO 22N-  MOV #22,6(R4) ; SET LENGTH IN DPB ALSO (?)  12$:  ASL R1 ; * 2OA  ADD #H$SIZE+14+4,R1 ; ADD SIZE OF HEADER, DPB AND STORAGE AREAF- ADD #77,R1 ; ROUND TO NEAREST 32 WD BLOCKN ASH #-6,R1 ;$ MOV R2,R5 ; SAVE EXTA WORD COUNT< MOV #AL$BCK!AL$IMP,R0 ; BLOCK THE TASK, DO IMPLICIT START% CALL $CPALO ; ALLOCATE THE BUFFERG;G; FILL IN PACKET; 00]fed MOV R0,KISAR6 ; MAP PACKET,' MOV #MAP6,R1 ; GET ADDRESS OF PACKETE. MOVB #HT$DIR,H$TYPE(R1) ; DIRECTIVE REQUEST CLRB H$ICNT(R1) ; NO ITEMST$ ADD #P$DPB,R1 ; POINT TO DPB AREA- MOV R1,R3 ; SAVE ADDRESS OF DPB IN PACKETZ( CLR R0 ; MAKE SURE HIGH BYTE IS ZERO+ MOVB 1(R4),R0 ; GET SIZE OF DPB IN WORDS#$20$: MOV (R4)+,(R1)+ ; COPY A WORD  SOB R0,20$ ; LOOP UNTIL DONE!0" MOV 4(R3),(R1)+ ; SAVE ADDRESS OF USER BUFFER'# MOV R5,(R1)+ ; SAVE EXTRA WORD COUNT -$ MOV R1,4(R3) ; PUT OFFSET TO BUFFER IN DPB&% SUB #MAP6,4(R3) ; MAKE IT AN OFFSET$& MOV 6(R3),R0 ; GET SIZE OF BUFFER' ASL R0 ; IN BYTES"( ADD R0,R1 ; GET SIZE OF PACKET) SUB #MAP6,R1 ; IN BYTES,*; +; SEND PACKET TO AME,;Z- CPSEN$ #SN$DIR,KISAR6,R1H.;Y/; GET ADDRESS OF USER BUFFER0;Z1 MOV R0,KISAR6 ; MAP PACKET($2 MOV #MAP6+P$DPB,R3 ; POINT TO DPB-3 MOV 14(R3),R0 ; GET ADDRESS OF USER BUFFERS.4 CALL $RELOC ; GET BIAS AND OFFSET IN R1,R25;T6; GET RESULTS7;R.8 MOV #MAP6,R4 ; POINT TO BEGINNING OF PACKET+9 CMP #IS.SUC,H$STAT(R4) ; DID IT SUCCEED?R: BEQ 30$ ; IF EQ YES+; CMP #IE.IDU,H$STAT(R4) ; INVALID DEVICE?E1< BEQ 25$ ; IF EQ, SETUP TO CHECK LOCAL DEVICES "= MOV KISAR6,R0 ; GET PACKET BIAS/> CALLR $CPDEA ; DEALLOCATE PACKET AND RETURN ?;R0@; ILLEGAL DEVICE RETURNED, CHECK LOCAL DEVICES&A; R1,R2 - BIAS OFFSET OF USER BUFFER"B; R3 - POINTER TO DPB IN PACKETC;LD25$:&E MOV 2(R3),R4 ; GET SUBFUNCTION WORD9F CLR $TEMP0 ; MAKE SURE $TEMP0 HASN'T BEEN MUCKED WITHG*G MOV 16(R3),-(SP) ; GET EXTRA WORD COUNT%H CLR -(SP) ; GET BACK SCRATCH WORD*I MOV R1,-(SP) ; SAVE BIAS OF USER BUFFER%J MOV R2,-(SP) ; SAVE BUFFER ADDRESSO&K MOV 10(R3),-(SP) ; SAVE DEVICE NAME&L MOV 12(R3),-(SP) ; AND UNIT NUMBER"M MOV KISAR6,R0 ; GET PACKET BIAS#N CALL $CPDEA ; DEALLOCATE PACKETS!O MOV (SP)+,R0 ; GET UNIT NUMBERU"P MOV (SP)+,R1 ; AND DEVICE NAME$Q MOV (SP)+,R3 ; GET BUFFER ADDRESS%R MOV (SP)+,KISAR6 ; MAP USER BUFFERM S TST R0 ;T JMP 44$ ; JOIN COMMON CODEU;(7V; SUCCESS RETURNED, COPY INFORMATION INTO USER BUFFERK&W; R1,R2 - BIAS OFFSET OF USER BUFFER"X; R3 - POINTER TO DPB IN PACKETY;EZ30$:$[ MOV 6(R3),R0 ; GET SIZE OF BUFFER\ ASL R0 ; IN BYTES3F];WE COULD CHECK THAT THE BUFFER IS AT LEAST 12 BYTES, BUT WHY BOTHERI^; IF THE WORD HAPPENS TO BE $I OR $O WE'RE JUST MUCKING OUR OWN BUFFERP"_ CMP #"$I,30(R3) ; IS DEVICE $I?` BEQ 31$ ; IF EQ YESS"a CMP #"$O,30(R3) ; IS DEVICE $O?b BNE 33$ ; IF NE NO.c31$: MOV $TKTCB,R5 ; GET TCB ADDRESS OF TASK!d MOV T.UCB(R5),R5 ; GET TI: UCBB!e MOV U.DCB(R5),R4 ; GET TI: DCBU%f MOV D.NAM(R4),30(R3) ; CHANGE NAME @g MOVB U.UNIT(R5),32(R3) ; GET UNIT NUMBER FROM UCB (ASSUME HT)%h CMP #"VT,D.NAM(R4) ; IS THIS A VT?T&i BNE 33$ ; IF NE, U.UNIT IS CORRECT4j MOVB D.UNIT(R4),32(R3) ; IF VT, D.UNIT IS CORRECTk33$:-l MOV 4(R3),-(SP) ; BIAS OF BUFFER IN PACKET 'm MOV R1,R3 ; GET BIAS OF DESTINATIONCn MOV R2,R4 ; AND OFFSET?"o MOV KISAR6,R1 ; GET SOURCE BIASp MOV (SP)+,R2 ; AND OFFSET (q ADD #120000,R2 ; MAKE IT AN APR5 BIAS-r CALL $BLXIO ; COPY INFO INTO USER BUFFERMs"t MOV KISAR6,R0 ; GET PACKET BIAS/u CALLR $CPDEA ; DEALLOCATE PACKET AND RETURNHv;!w; COMMON CODE WITH LOCAL GI.DEVTx;By; AT THIS POINT:z; R1 - DEVICE NAME {; R0 - UNIT NUMBER1|; R3 - ADDRESS OF USER BUFFER (MAPPED IN APR6)B(}; R4 - WORD CONTAINING SUBFUNTION CODE~; 2(SP) - EXTRA WORD COUNTV; (SP) - SCRATCH WORD44$: .ENDC ; C$$RMT < ASSUME GI.NAS, 200 ;ASSUME THAT THE "INHIBIT ASSIGNMENTS" ;FLAG IS THE SIGN BITL, ASSUME G.IDFG, G.IDUN+1 ;IN THE HIGH BYTE' BMI 57$ ;IF MI, INHIBIT ASSIGNMENTS ; BIT #T3.SLV,T.ST3(R5) ;IS THE ISSUING TASK A SLAVE TASK?L* BNE 57$ ;IF NE, YES..AVOID ASSIGNMENTS .IF DF L$$GCL: MOV R3,-(SP) ;SAVE THE BUFFER ADDRESS ACROSS PROCESSING3 MOV R1,-(SP) ;SAVE THE DEVICE MNEMONIC FOR LATER6 MOV T.UCB(R5),R1 ;GET THE UCB ADDRESS FOR THIS TASK800ef fcDATADATADATADATADATADATADATA CALL $GTUSR ;GET THE USER LOGICAL HASH TABLE ADDRESS, MOV (SP)+,R2 ;RESTORE THE DEVICE MNEMONIC/ CALL $LNTD1 ;DO RECURSIVE LOOKUP FOR DEVICEE% BCC 45$ ;IF CC, SUCCESSFUL LOOKUPI& TST R3 ;SEE IF NO LOGICAL OR ERROR8 BNE 40$ ;IF NE, BAD LOGICAL OR RECURSION LIMIT ERROR BR 50$ ;NO LOGICAL EXISTS745$: MOV KISAR6,-(SP) ;SAVE APR6 MAPPING FOR A MOMENTE MOV R3,KISAR6 ;MAP THE LNB,G MOVB MAP6+L.NTBL,$TEMP0 ;SAVE THE TABLE NUMBER FOR THE OUTPUT BUFFERU) MOV (SP)+,KISAR6 ;RESTORE APR6 MAPPINGG2 INC 2(SP) ;INDICATE AN ASSIGNMENT WAS FOLLOWED* BR 55$ ;GO FIND UCB IN PHYSICAL TABLES .IFF ;DF L$$GCL7 MOV #$LOGHD,R2 ;GET LOGICAL ASSIGNMENT LIST LISTHEADT;20$: MOV (R2),R2 ;POINT TO NEXT LOGICAL ASSIGNMENT BLOCKI BEQ 50$ ;IF EQ, END OF LISTB7 MOVB L.TYPE(R2),$TEMP0 ;IS THIS A GLOBAL ASSIGNMENT? ) ;SAVE TYPE TO RETURN TO USER LATER.6$ ;(NOTE, L.TYPE MUST BE USED IN+ ;CONJUNCTION WITH THE "GI.ATT" STATUSF* ;BIT SINCE L.TYPE IS ZERO FOR GLOBAL ;ASSIGNMENTS.)* BEQ 30$ ;IF EQ YES, DO NOT CHECK L.UCB< CMP L.UCB(R2),T.UCB(R5) ;VALID ASSIGNMENT FOR TASK'S TI:? BNE 20$ ;IF NE NOT+30$: CMP R1,L.NAM(R2) ;DEVICE NAME MATCH?V BNE 20$ ;IF NE NOT) CMPB R0,L.UNIT(R2) ;UNIT NUMBER MATCH?  BNE 20$ ;IF NE NOV/ MOV L.ASG(R2),R1 ;GET ASSIGNMENT UCB ADDRESS  ASSUME GI.ASN,11 INC (SP) ;INDICATE AN ASSIGNMENT WAS FOLLOWED + BR 70$ ;GO FINISH RESOLVING DEVICE NAMEU .IFTF ;DF L$$GCLP40$:' .IF DF C$$RMT ; REMOTE TASK SUPPORT$6 BIT #F5.RTK,$FMSK5 ; REMOTE TASK SUPPORT TURNED ON? BEQ 48$ ; IF EQ NO3 RETURN ; KX DRIVER HAS ALREADY RETURNED STATUS248$: .ENDC. DRSTS D.RS92 ; RETURN INVALID DEVICE ERROR;BA; AT THIS POINT, WE MUST CHECK THE SYSTEM DEVICE TABLES FOR THEMD; A DEVICE WITH THE NAME SPECIFIED IN THE DPB SINCE FOR ONE REASONA; OR ANOTHER THE SCAN OF THE LOGICAL ASSIGNMENTS CAME UP EMPTY.ND; A CALL TO $CVDVN WILL NOT FUNCTION CORRECTLY AT THIS POINT SINCE5; PSEUDO DEVICES ARE IGNORED BY THE $SCDVT ROUTINE. ;R850$: CLR $TEMP0 ;INIT WORD CONTAINING ASSIGNMENT TYPE+ ;SINCE WE EITHER COULDN'T FIND ONE OR.55$: .IFT ;DF L$$GCL8 MOV R2,R1 ;RESTORE DEVICE MNEMONIC FOR PHYSICAL SCAN2 MOV (SP)+,R3 ;RESTORE THE OUTPUT BUFFER ADDRESS .ENDC ;DF L$$GCLI'57$: MOV #$DEVHD,R2 ;GET DCB LISTHEADA% ;(PHYSICAL SYSTEM DEVICE TABLE)N!60$: MOV (R2),R2 ;GET NEXT DCBC+ BEQ 40$ ;IF EQ, DEVICE IS NOT IN SYSTEMT' CMP R1,D.NAM(R2) ;DEVICE NAME MATCH?  BNE 60$ ;IF NE NO> CMPB R0,D.UNIT(R2) ;IS THIS THE DCB FOR THE SPECIFIED UNIT? BLO 60$ ;IF LO NOR  CMPB R0,D.UNIT+1(R2) ;REALLY? BHI 60$ ;IF HI NO5 SUB D.UNIT(R2),R0 ;CONVERT TO RELATIVE UNIT NUMBER) BIC #177400,R0 ;CLEAR MUNGED HIGH BYTEA0 MOV D.UCBL(R2),R1 ;GET LENGTH OF UCB IN BYTES/ CALL $MUL ;CALCULATE OFFSET FOR DESIRED UCBS- ADD D.UCB(R2),R1 ;CALCUALTE ADDRESS OF UCBX;CG; AT THIS POINT, WE'VE FOUND A RAW UCB. THAT IS TO SAY, THE REDIRECTSCF; HAVE NOT BEEN FOLLOWED AND THE VIRTUAL TERMINAL CHECK HAS NOT BEENC; PERFORMED. ONLY THE PARENT OR OFFSPRING TASK OF A GIVEN VT UNITUD; MAY RETRIEVE INFO ON THE UNIT SINCE THEIR EXISTENCE IS ACCOUNTED; FOR IN THE VT USE COUNT.;C; CURRENTLY:; R1 = RAW UCB ADDRESSV ; R3 = POINTER TO USER BUFFER4; R5 = TCB ADDRESS OF ISSUING TASK (ALSO CURRENT); 2(SP) = EXTRA WORD COUNTU ; (SP) = SCRATCH STATUS WORD; 70$: .IF DF V$$TRM9 ASSUME U.DCB,0 ;ASSUME THAT THE FIRST WORD OF THE UCBV  ;IS THE POINTER TO THE DCB$ MOV (R1),R2 ;POINT TO UNIT'S DCB8 CMP D.NAM(R2),#"VT ;IS THE DEVICE A VIRTUAL TERMINAL? BNE 80$ ;IF NE NOX1 CMP U.PTCB(R1),R5 ;IS ISSUING TASK THE PARENT? BEQ 80$ ;IF EQ YES2 CMP R1,T.UCB(R5) ;IS ISSUING TASK AN OFFSPRING?# BNE 40$ ;IF NE NO, RETURN ERRORI .ENDC ;V$$TRM'80$: MOV R1,R0 ;COPY RAW UCB ADDRESSH( CALL $MPLND ;MAP00mfed TO REAL UCB ADDRESS# CMP R1,R0 ;WAS UNIT REDIRECTED?S  BEQ 90$ ;IF EQ, NO1  BIS #GI.RED,(SP) ;REMEMBER UNIT WAS REDIRECTEDM  90$: ;TM; THE GET DEVICE INFORMATION AND SON OF GET DEVICE INFORMATION SUBFUNCTIONSE; DIVERGE AT THIS POINT.;11 CMPB #6,R4 ; IS IT "GET DEVICE INFORMATION"?  BEQ 91$ ; YES, CONTINUE. - JMP $SFDVJ ; NO, USE THE JUNIOR VERSION.N91$:;O<; NOW THAT WE HAVE A "REAL" UCB ADDRESS, THE DEVICE STATUSB; RETURNED IN "G.IDEV" IS DETERMINED. ALONG THE WAY, THE USER'SD; VARIABLE LENGTH BUFFER IS FILLED IN WHEN NEEDED AND IF POSSIBLE.;R4 MOVB U.STS(R0),(R3)+ ; PLACE U.STS IN USER BUFFER MOVB U.ST2(R0),R1 ;, MOVB R1,(R3)+ ;PLACE U.ST2 IN USER BUFFER- BIC #CLRMSK,-(R3) ;CLEAR OUT UNNEEDED BITS6( SWAB R1 ;MOV US.OFL INTO HIGH BIT OF ROR R1 ;LOW ORDER BYTE*  BIC #^C<200>,R1 ;CLEAR ALL BUT 'GI.OFL',! BIS R1,(R3) ;'OR' IN UNIT OFFLINE STATUS7" BIS (SP)+,(R3) ;'OR' IN ASSIGNMENT AND REDIRECT INFOI*# MOV (SP)+,R4 ;RETRIEVE EXTRA WORD COUNT.$ MOV U.CW1(R0),R1 ;GET U.CW1 FOR USER BUFFER.% MOV R1,-(SP) ;AND SAVE IT AS WELL FOR LATER*& MOV R5,-(SP) ;SAVE ISSUER'S TCB ADDRESS.' MOV R3,R5 ;COPY TOP OF USER BUFFER ADDRESS/( TST (R3)+ ;POINT TO START OF OPTIONAL WORDSN() CALL XMIT ;COPY U.CW1 TO USER BUFFER$* MOV U.PRM(R0),R1 ;DITTO FOR U.PRM+ CALL XMIT ;0(, MOV U.PRM+2(R0),R1 ;DITTO FOR U.PRM+2- CALL XMIT ; *. MOV R0,R1 ;RETURN 'TARGET' DEVICE NAME/100$: CALL DNFILL ;20 BCS 110$ ;IF CS, NO USER BUFFER ROOM TO RETURN1 ;L.TYPE INFO-2 MOVB $TEMP0,-1(R3) ;RETURN ASSIGNMENT INFOS-3110$: MOV U.ATT(R0),R1 ;IS DEVICE ATTACHED? 4 BEQ 120$ ;IF EQ NO 5 BIS #GI.ATT,(R5) ;TELL ISSUER26 CMP R1,(SP) ;IS IT THE ISSUER WHO IS ATTACHED?"7 BNE 120$ ; NO, DO NOT SET BIT./8 BIS #GI.ATU,(R5) ;RETURN THIS STATUS AS WELLP29120$: CALL TNFILL ;RETURN TASK NAME OF ATTACHEE!: MOV (SP)+,R2 ;GET ISSUER'S TCBV); MOV U.OWN(R0),R1 ;IS DEVICE ALLOCATED?$< BEQ 130$ ;IF EQ NO"= BIS #GI.ALL,(R5) ;RETURN STATUS3> CMP T.UCB(R2),R1 ;IS ALLOCATOR THE ISSUER'S TI:?R? BNE 130$ ;IF NE NO/@ BIS #GI.ALU,(R5) ;RETURN THIS STATUS AS WELL5A130$: CALL DNFILL ;RETURN DEVICE NAME OF ALLOCATOR"B MOV U.SCB(R0),R1 ;VIA THE SCB..)C MOV S.KRB(R1),R1 ;GET THE DEVICE'S KRBE0D BEQ 140$ ;IF EQ, CANN'T DETERMINE CONTROLLERE ;STATUS.:F BIT #KS.OFL!KS.PDF,K.STS(R1) ;IS THE CONTROLLER OFFLINEG ;OR PDF?H BEQ 140$ ;IF EQ NO%I BIS #GI.OFL!GI.COF,(R5) ;TELL USERF1J140$: MOV U.DCB(R0),R1 ;CHECK IF DRIVER LOADED?TK TST D.DSP(R1) ;LOADED?HL BNE 150$ ;IF NE YES1"M BIS #GI.UNL,(R5) ;RETURN STATUS)N BR 190$ ;NOTHING MORE TO RETURN..EXITD)O150$: COM (SP) ;COMPLEMENT SAVED U.CW1>P BIT #DV.MNT!DV.MSD,(SP) ;MASS STORAGE AND MOUNTABLE DEVICE?Q BNE 190$ ;IF NE NO*R BITB #US.MNT,U.STS(R0) ;DEVICE MOUNTED?S BNE 190$ ;IF NE NO#T MOV U.VCB(R0),R2 ;GET DEVICE VCBR2U BEQ 190$ ;BAIL OUT..CAN'T TOUCH U.ACP TILL VCB V ;SET UP.+W MOV U.ACP(R0),R1 ;GET TCB ADDRESS OF ACP14X CALL TNFILL ;SO ACP NAME CAN BE RETURNED TO USER6Y BIT #DV.SQD,(SP) ;IS DEVICE AN ANSI LABLED MAGTAPE?5Z BNE 155$ ;IF NE NO (COPY OF U.CW1 IS COMPLEMENTED5[ ;ON STACK))\ BITB #US.LAB,U.STS(R0) ;IS IT "LABLED",] BEQ 155$ ;IF EQ NO"^ BIS #GI.LAB,(R5) ;RETURN STATUSD_155$: CMP R4,#/2 ;USER BUFFER BIG ENOUGH FOR LABLE?` BLT 190$ ;IF LT NO!a ADD #V.LABL,R2 ;POINT TO LABLEL1b MOV (R2)+,(R3)+ ;COPY FIRST SIX BYTES OF LABLEc MOV (R2)+,(R3)+ ;d MOV (R2)+,(R3)+ ;.e BIT #GI.LAB,(R5) ;IS IT A LABLED ANSI TAPE?f BEQ 180$ ;IF EQ NO;g MOV V.MVL(R0),R1 ;POINT TO FIRST MOUNTED VOL. LIST ENTRY(5h BEQ 180$ ;IF EQ THERE ISN'T ONE,JUST RETURN LABELT;i160$: CMP M.UCB(R1),R0 ;DEVICE UCB MATCH WITH THIS ENTRY?j BEQ 170$ ;IF EQ YESR(k MOV M.NXT(R1),R1 ;GET NEXT LIST ENTRYl BNE 160$ ;CONTINUE SCAN 3m BR 180$ ;ELSE AT END OF LIST..JUST RETURN LABLEI0n170$: MOV R1,R2 ;COMPUTE ADDRESS OF VOLUME IDo ADD #M.VIDP,R2 ;V6p180$: MOV (R2)+,(R3)+ 00uf fcDATADATADATADATADATADATADATA;FINISH RETURNING VOLUME LABLE q MOV (R2)+,(R3)+ ;OR VOLUME IDr MOV (R2)+,(R3)+ ;s190$: TST (SP)+ ;CLEAN STACK t#u .IF DF C$$RMT ; IF REMOTE TASKSFv&w BIC #1,$UMPS ; CLEAR USER CARRY BIT2x MOV #IS.SUC,-(SP) ; PUT SUCCESS STATUS ON STACK7y MTPD$ @#H.DSW ; PUT STATUS IN DIRECTIVE STATUS WORDNz{ .ENDC ; C$$RMT1|} RETURN ;ALL DONE..RETURNE~ .ENABLE LSB/TNFILL: TST R1 ;WAS A TCB ADDRESS SPECIFIED?F) BEQ 20$ ;IF EQ NO..GO ADJUST POINTERSO1 MOV T.NAM+2(R1),-(SP) ;GET SECOND HALF OF NAMEV# MOV T.NAM(R1),R1 ;AND FIRST HALF2  BR 10$ ; DNFILL:S( TST R1 ;WAS A UCB ADDRESS SPECIFIED?( BEQ 20$ ;IF EQ NO.GO ADJUST POINTERS MOV U.DCB(R1),R2 ;GET DCB TST (R2)+ ;SKIP LINK WORDU6 SUB (R2)+,R1 ;CALCULATE OFFSET INTO CONTIGUOUS UCBS# MOV (R2)+,-(SP) ;GET DEVICE NAME/ MOV (R2)+,-(SP) ;GET LOW LOGICAL UNIT NUMBERE MOV (R2)+,R2 ;GET UCB SIZE /5$: SUB R2,R1 ;DETERMINE LOGICAL UNIT NUMBERQ  BMI 6$ ; INC (SP) ;  BR 5$ ;)#6$: MOV 2(SP),R1 ;GET DEVICE NAMEM! MOV (SP)+,(SP) ;CLEAN UP STACK7 BIC #^C<377>,(SP) ;CLEAR OUT HIGH ORDER GARBAGE BYTEC010$: CALL XMIT ;FILL IN A WORD IN USER BUFFER MOV (SP)+,R1 ;GET NEXT WORDXMIT: CLC ;ASSUME SUCCESS' DEC R4 ;ENOUGH ROOM IN USER BUFFER?I BMI 40$ ;IF MI NO++ MOV R1,(R3)+ ;RETURN WORD TO USER BUFFER; BR 30$ ;EXIT GRACEFULLY$20$: SUB #2,R4 ;ADJUST WORD COUNT- BMI 40$ ;IF MI WE'RE AT THE END OF BUFFERB ADD #4,R3 ;ADJUST POINTER !30$: TST (PC)+ ;RETURN SUCCESSI!40$: SEC ;RETURN ERROR STATUSU  RETURN ;C  .DSABL LSBA;++; **-$SFDVJ-SON OF GET DEVICE INFORMATIONE;F?; THIS GIN SUBFUNCTION RETURNS INFORMATION ABOUT A PARTICULAR?; DEVICE. THE DPB AND METHOD OF DETERMINING THE DEVICE TO BE+8; EXAMINED ARE IDENTICAL TO THE GET DEVICE INFORMATIONA; SUBFUNCTION, EXCEPT THAT THE SUBFUNCTION IS 18 RATHER THAN 6.$; 9; THE CURRENT MINIMUM AND MAXIMUM BUFFER LENGTH IS ONE.E;?; INPUT AT THIS POINT (AFTER COMMON PROCESSING IN $SFDEV) IS:U;%; R1 -- UCB OF DEVICE TO BE CHECKED"; R3 -- POINTER TO USER'S BUFFER'; R5 -- POINTER TO ISSUING TASK'S TCBH<; STACK -- TWO UNNEEDED WORDS ARE ON THE STACK (ALONG WITH3; THE RETURN ADDRESS AND REMAINING INFORMATION).C;B!; OUTPUT IN THE USER BUFFER IS:H; ; FIRST WORD:N<; NEGATIVE -- CODE INDICATING WHY DEVICE CANNOT CURRENTLY&; BE ACCESSED AS A MOUNTED DEVICE.>; NON-NEGATIVE -- BITS DESCRIBING ACCESS TO MOUNTED DEVICE:-; BITS 0 TO 3: WHICH TYPES OF ACCESS ARE,; PROHIBITED (R, W, E, D, LOW TO HIGH),; BIT 4: DEVICE IS PUBLIC, ,; BIT 5: DEVICE IS ALLOCATED TO ISSUER,$; BIT 6: DEVICE IS FOREIGN, AND,; BIT 7: THE FOREIGN DEVICE HAS AN ACP.2; NOTE THAT BITS 4 AND 5 OFF TOGETHER INDICATE2; THE DEVICE IS MOUNTED BY THE ISSUER, BUT NOT; ALLOCATED OR PUBLIC.;-; DEFINE PROTECTION BITS.SR = 000001 ; READW = 000002 ; WRITE C = 000004 ; CREATED = 000010 ; DELETE; DEFINE OTHER BITS.&GJ.PUB = 000020 ; DEVICE IS PUBLIC.3GJ.ALL = 000040 ; DEVICE IS PRIVATE (ALLOCATED).'GJ.FOR = 000100 ; DEVICE IS FOREIGN.E,GJ.ACP = 000200 ; FOREIGN DEVICE HAS ACP.; DEFINE OTHER CODES.I?GJ.NMM = -1 ; DEVICE IS NOT BOTH MASS-STORAGE AND MOUNTABLE.E2GJ.NMO = -2 ; DEVICE IS NOT MOUNTED FOR ISSUER. $SFDVJ:E/ MOV R0,R1 ; PUT UCB IN PREFERRED REGISTER.S7 CMP (SP)+,(SP)+ ; POP UNNEEDED BITS AND WORD COUNT.06 MOV U.CW1(R1),R0 ; GET FIRST CHARACTERISTICS WORD.$ COM R0 ; REVERSE SENSE OF BITS.8 BIT #DV.MNT!DV.MSD,R0 ; IS IT NOT MASS STORAGE OR NOT ; MOUNTABLE?0  BNE 90$ ; YES, RETURN CODE.2 BITB #US.MNT,U.STS(R1) ; IS DEVICE NOT MOUNTED?' BNE 95$ ; YES, THERE IS NO ACCESS.T< MOV #GJ.PUB,(R3) ; ASSUME PUBLIC UNTIL PROVEN OTHERWISE.- BITB #US.PUB,U.ST2(R1) ; IS DEVICE PUBLIC?V. BNE 20$ ; YES, SKIP REST OF MOUNT CHECKS.= MOV #GJ.ALL,(R3) ; ASSUME PRIVATE UNTIL PR00}fedOVEN OTHERWISE.C4 MOV T.UCB(R5),R0 ; GET ISSUER'S TI: UCB ADDRESS.5 CMP U.OWN(R1),R0 ; DOES ISSUER HAVE IT ALLOCATED?;+ BEQ 20$ ; YES, IT IS MOUNTED FOR USER.T( TST U.OWN(R1) ; IS DEVICE ALLOCATED?3 BNE 95$ ; YES, DEVICE IS NOT MOUNTED FOR USER.( CLR (R3) ; IT MUST BE SEMI-PRIVATE.0 BIT #T3.PRV,T.ST3(R5) ; IS ISSUER PRIVILEGED?+ BNE 20$ ; YES, IT IS MOUNTED FOR USER.C- MOV #$MOULS,R2 ; GET START OF MOUNT LIST.U10$:" MOV (R2),R2 ; GET NEXT ENTRY.. BEQ 95$ ; DEVICE IS NOT MOUNTED FOR USER.3 CMPB #MT.MLS,M.TYPE(R2) ; CORRECT TYPE OF ENTRY?)! BNE 10$ ; NO, GO ON TO NEXT.D; CMP M.DEV(R2),R1 ; IS IT THE DEVICE WE ARE LOOKING FOR?N BNE 10$ ; NO, GO ON.?3 CMP M.TI(R2),R0 ; IS THIS ENTRY FOR OUR ISSUER? BNE 10$ ; NO, GO ON.E$; DEVICE IS MOUNTED FOR THIS USER.20$:6 BITB #US.FOR,U.STS(R1) ; IS DEVICE MOUNTED FOREIGN?+ BEQ 100$ ; NO, HANDLE FILES-11 DEVICE.O0 BIS #GJ.FOR,(R3) ; YES, REPORT THAT TO USER.$ TST U.ACP(R1) ; IS THERE AN ACP? BEQ 80$ ; NO, LEAVE..( BIS #GJ.ACP,(R3) ; YES, REPORT THAT.80$:  BR 99$ ; RETURN WITH STATUS90$:8 MOV #GJ.NMM,(R3) ; INDICATE DEVICE IS NOT MOUNTABLE.  BR 99$ ; RETURN WITH STATUS 95$:9  MOV #GJ.NMO,(R3) ; INDICATE DEVICE IS NOT MOUNTED FOR 99$:$  .IF DF C$$RMT ; IF REMOTE TASKS ' BIC #1,$UMPS ; CLEAR USER CARRY BITO3 MOV #IS.SUC,-(SP) ; PUT SUCCESS STATUS ON STACK8 MTPD$ @#H.DSW ; PUT STATUS IN DIRECTIVE STATUS WORD .ENDC ; C$$RMT  ; USER.  RETURNA100$:B0 BIT #T3.PRV,T.ST3(R5) ; IS ISSUER PRIVILEGED?1 BNE 190$ ; YES, THEY CAN DO ALMOST ANYTHING.M  MOV KISAR6,-(SP) ; SAVE APR.# MOV $SAHDB,KISAR6 ; MAP HEADER.T* MOV $SAHPT,R2 ; GET ADDRESS OF HEADER.( MOV H.DUIC(R2),R0 ; GET DEFAULT UIC.5 MOV H.CUIC(R2),R2 ; GET CURRENT (PROTECTION) UIC.;# MOV (SP)+,KISAR6 ; RESTORE APR.C) CLR -(SP) ; ASSUME NO SYSTEM ACCESS.M5 CMP R2,#10*400+377 ; IS ISSUER IN A SYSTEM GROUP?3  BHI 120$ ; NO, DO NOT GIVE THEM SYSTEM ACCESS.0#! INC (SP) ; FLAG SYSTEM ACCESS.S"120$:I<# MOV U.VCB(R1),R4 ; GET LOCATION OF VOLUME CONTROL BLOCK.8$ BIT #FE.MUP,$FMASK ; IS THIS A MULTI-USER PROTECTION% ; SYSTEM?%& BEQ 140$ ; NO, SKIP USER CHECKS.9' CMP T.UCB(R5),U.OWN(R1) ; DOES ISSUER OWN THIS DEVICE?2-( BEQ 130$ ; YES, GIVE THEM SYSTEM ACCESS.+) TST (SP) ; SYSTEM GROUP?R-* BNE 140$ ; YES, SKIP VOLUME OWNER CHECK.,5+ CMP T.UCB(R5),V.VOWN(R4) ; DOES ISSUER OWN VOLUME?0/, BNE 140$ ; NO, DO NOT GRANT SYSTEM ACCESS.C-130$: .. INC (SP) ; THIS ISSUER HAS SYSTEM ACCESS.!/ MOV R0,R2 ; USE DEFAULT UIC.O0140$:1 SWAB R2 ; REFORMAT UIC.)2 MOV V.VOWN(R4),R0 ; GET VOLUME OWNER.?.3 MOV V.VPRO(R4),R4 ; GET VOLUME PROTECTION.4 SWAB R0 ; REFORMAT UIC.#5 COM R4 ; CHANGE SENSE OF BITS. 16 TSTB (SP)+ ; DOES ISSUER HAVE SYSTEM ACCESS?Y17 BNE 150$ ; YES, DO NOT REFUSE SYSTEM ACCESS.R28 CMPB R2,#10 ; DOES ISSUER HAVE SYSTEM ACCESS?29 BLOS 150$ ; YES, DO NOT REFUSE SYSTEM ACCESS.5: BIC #R!W!C!D,R4 ; ELIMINATE SYSTEM ACCESS RIGHTS.Y;150$:S!< CMP R2,R0 ; IS ISSUER OWNER?C0= BEQ 160$ ; YES, DO NOT REFUSE OWNER ACCESS.8> BIC #*20,R4 ; ELIMINATE OWNER ACCESS RIGHTS.?160$:O-@ CMPB R0,R2 ; IS ISSUER IN OWNER'S GROUP?0A BEQ 170$ ; YES, DO NOT REFUSE GROUP ACCESS.9B BIC #*400,R4 ; ELIMINATE GROUP ACCESS RIGHTS.,C170$:E'D MOV R4,-(SP) ; COPY REMAINING BITS.D,E SWAB (SP) ; MOVE HIGH BYTE TO LOW BYTE.,F BIS R4,(SP) ; MERGE HIGH AND LOW BYTES.G MOV (SP),R4 ; COPY RESULT.C-H ASR R4 ; MOVE HIGH NYBBLE TO LOW NYBBLE.U I ASR R4 ;B J ASR R4 ;, K ASR R4 ;O.L BIS (SP)+,R4 ; MERGE HIGH AND LOW NYBBLES.%M COM R4 ; RESTORE ORIGINAL SENSE.P5N BIC #^C,R4 ; GET RID OF EXTRANEOUS BITS. O BR 200$P190$:G%Q CLR R4 ; GIVE ISSUER EVERYTHING.;R200$:E/S BIT #DV.SWL,U.CW1(R1) ; DEVICE WRITE-LOCKED? %T BEQ 210$ ; NO, LEAVE BITS ALONE. 0U BIS #W!C!D,R400f fcDATADATADATADATADATADATADATA ; ONLY READ ACCESS IS ALLOWED.V210$:G0W BIS R4,(R3) ; PASS DENIED ACCESSES TO USER.!X JMP 99$ ; RETURN WITH STATUS YZ[\;+]; **-$SFAPR-GET TASK APRS^;RE_; THIS SUBFUNCTION FILLS A 97. WORD BUFFER WITH THE CONTENTS OF THEEG`; PARS/PDRS FOR ALL THE SPACES. THE FIRST WORD INDICATES WHICH OF THEI#a; SUBSEQUENT WORDS ARE FILLED IN. b;Ic; SPACE WORD 0. BIT(d; ----------------------- -----------e;-,f; KERNEL I SPACE PAR'S (UNCONDITIONAL),g; KERNEL I SPACE PDR'S (UNCONDITIONAL)%h; KERNEL D SPACE PAR'S (000001)S%i; KERNEL D SPACE PDR'S (000001) ,j; USER I SPACE PAR'S (UNCONDITIONAL),k; USER I SPACE PDR'S (UNCONDITIONAL)%l; USER D SPACE PAR'S (000002) %m; USER D SPACE PDR'S (000002) %n; SUPER I SPACE PAR'S (000004)I%o; SUPER I SPACE PDR'S (000004)L%p; SUPER D SPACE PAR'S (000004)T%q; SUPER D SPACE PDR'S (000004)-r;s; DPB FORMAT: t;E$u; WD. 00 -- DIC(169.),DPB SIZE(4.)"v; WD. 01 -- SUBFUNCTION CODE (9)w; WD. 02 -- BUFFER ADDRESS"x; WD. 03 -- BUFFER SIZE IN WORDSy;0 z; INPUTS:R{; +|; R3=ADDRESS OF FIRST WORD OF USER BUFFER "}; R5=TCB ADDRESS OF CURRENT TASK~; ; OUTPUTS:;(&; THE BUFFER IS FILLED WITH THE APRS;-  MASK = 0  .IIF DF K$$DAS, MASK=MASK!1 .IIF DF U$$DAS, MASK=MASK!2 .IIF DF S$$LIB, MASK=MASK!4:$SFAPR::MOV #MASK,(R3)+ ;INSERT MASK OF WHAT WILL FOLLOW) MOV #$APRTB,R0 ;GET TABLE OF ADDRESSES )10$: MOV (R0)+,R1 ;GET NEXT APR ADDRESS) BEQ 20$ ;IF EQ END OF LIST# MOV (R1)+,(R3)+ ;MOVE A REGISTER# MOV (R1)+,(R3)+ ;MOVE A REGISTERS# MOV (R1)+,(R3)+ ;MOVE A REGISTER5# MOV (R1)+,(R3)+ ;MOVE A REGISTER# MOV (R1)+,(R3)+ ;MOVE A REGISTERI# MOV (R1)+,(R3)+ ;MOVE A REGISTER # MOV (R1)+,(R3)+ ;MOVE A REGISTER# MOV (R1)+,(R3)+ ;MOVE A REGISTERI BR 10$ ;GO AGAIN20$: RETURN ;O;++; **-SFFTK-FIND TASK AND RETURN TASK INFO#;B9; THIS GIN FUNCTION RETURNS INFORMATION ON A TASK WHICH D; MAY HAVE ITS TCB IN SECONDARY OR PRIMARY POOL. GIVEN A TASKNAME,D; THIS GIN FUNCTION WILL ATTEMPT TO FIND A TASK AS DESCRIBED BELOW; IN THE $SRTTK ROUTINE.;(F; THE INFORMATION IS RETURNED TO A USER BUFFER HAVING A MINIMUM SIZED; OF TWO WORDS AND A MAXIMUM SIZE OF SIX WORDS. THIS FUNCTION WILLI; RETURN AS MUCH OF THE FOLLOWING INFORMATION AS THE USER BUFFER'S SIZE; ALLOWS FOR.S;F;A; DPB FORMAT:K;#; +---------------+N; | 6. | 169. |T; +---------------+; |SUBFUNCTION=10.|E; +---------------+.; | BUFFER ADDRESS| ; +---------------+A; | BUFFER WDSIZE |S; +---------------+N; | |; +- TASKNAME -+H; | |; +---------------+E;F; USER BUFFER FORMAT:;F; +---------------+ |S ; | | |9; +- TASKNAME -+ | THE FIRST TWO WORDS ARE REQUIRED.N ; | | |; +---------------+ |Z; | T.STAT |; +---------------+ ; | T.ST2 |; +---------------+; | T.ST3 |T; +---------------+; | T.ST4 |N; +---------------+-; | |; +- P.NAM -+; | |; +---------------+R;-3$SFFTK::MOV R3,-(SP) ;SAVE ADDRESS OF USER BUFFER & MOV R2,-(SP) ;SAVE EXTRA WORD COUNT' MOV R4,R3 ;COPY POINTER TO TASKNAME  CALL $SRTTK ;SEARCH FOR TCB% BCS 30$ ;IF CS TASK NOT INSTALLEDO, MOV KISAR6,-(SP) ;SAVE OLD KISAR6 MAPPING( BIT #1,R0 ;IS TCB IN SECONDARY POOL? BEQ 5$ ;IF EQ NO DEC R0 ;RESET FLAG MOV (R0),KISAR6 ;MAP TO TCB MOV #140000,R0 ;POINT AT IT65$: MOV #$TNAME,R1 ;POINT TO TEMP LOCATIONS IN SYSCM$ ADD #T.NAM,R0 ;POINT TO TASK NAME: MOV (R0)+,(R1)+ ;COPY TASKNAME INTO TEMPORARY LOCATIONS MOV (R0)+,(R1)+ ;, ADD #T.STAT-,R0 ;POINT TO T.STAT MOV (R0)+,(R1)+ ;COPY T.STATK MOV (R0)+,(R1)+ ;COPY T.ST2 MOV (R0),(R1) ;COPY T.ST3% MOV T.ST4-T.ST3(R0),R2 ;COPY T.ST4I% MOV T.PCB-T.ST3(R0),R4 ;COPY T.PCBP9 MOV (SP)+,KISAR6 ;RESTORE APR6 MAPPING ( USER BUFFER )() MOV (SP)+,R00fed5 ;RESTORE EXTRA WORD COUNTP/ MOV (SP)+,R3 ;RESTORE POINTER TO USER BUFFERO& MOV #$TNAME,R1 ;POINT TO SAVED INFO  MOV (R1)+,(R3)+ ;RETURN T.NAM MOV (R1)+,(R3)+ DEC R5 ;ROOM FOR MORE? BMI 20$ ;IF MI NO#! MOV (R1)+,(R3)+ ;RETURN T.STATT DEC R5 ;ROOM FOR MORE? BMI 20$ ;IF MI NO1 MOV (R1)+,(R3)+ ;COPY T.ST2 DEC R5 ;ROOM FOR MORE? BMI 20$ ;IF MI NOI MOV (R1)+,(R3)+ ;COPY T.ST3 DEC R5 ;ROOM FOR MORE? BMI 20$ ;IF MI NO  MOV R2,(R3)+ ;COPY T.ST4+- CMP R5,#2 ;TWO MORE WORDS LEFT FOR P.NAM?  BLT 20$ ;IF LT NOR" MOV P.NAM(R4),(R3)+ ;COPY P.NAM MOV P.NAM+2(R4),(R3)+ 20$: RETURNT530$: DRSTS D.RS2 ;RETURN DIRECTIVE ERROR OF IE.INS;+J; **-$SRTTK-SEARCH FOR PROTOTYPE OR NON-PROTOTYPE OR MULTI-USER TASK TCB;II; THIS ROUTINE SEARCHES FOR A TCB WHICH IS ASSOCIATED WITH THE TASKNAME?; AS FOLLOWS: ;I@; IF THE TASKNAME IS OF THE FORM "...XXX" THEN A CHECK IS MADEB; FOR THE MULTI-USER TASKNAME "XXXTNN" WHERE NN IS DERIVED FROMB; THE UCB ADDRESS PASSED IN R0. IF NOT FOUND THEN THE PROTOTYPE; IS SEARCHED FOR.A; IF THE TASKNAME IS OF THE FORM "XXX$$$" THEN A SEARCH IS MADE =; ONLY FOR THE PROTOTYPE AS A DIFFERENT FORM OF MULTI-USERPA; TASKNAME EXISTS FOR DECNET PROTOTYPES SINCE THIS NAME IS NOTU"; DERIVED FROM THE UCB ADDRESS.A; IF THE TASKNAME IS OF NEITHER OF THE ABOVE FORMS, A SEARCH OFN=; PRIMARY POOL IS MADE FOR A NON-PROTOTYPE TCB BEARING THEM ; TASKNAME SPECIFIED.B ; IF THIS TASKNAME COULD NOT BE FOUND AND IT IS LIMITED TO THREEB ; CHARACTERS THEN AN ADDITIONAL SEARCH IS MADE FOR A MULTI-USER ; TASK OR PROTOTYPE.$ ;N ; INPUTS:M;*; R3=ADDRESS OF TASK NAME TO SEARCH FOR.;F ; OUTPUTS:;T;; C=1 IF TASK NAME OR THE PERMUTATIONS COULD NOT BE FOUND"; C=0 IF SPECIFIED TASK IS FOUND!; R3=ADDRESS OF TASKNAME FOUNDF(; (COULD BE DIFFERENT FROM INPUT)(; R0=ADDRESS OF TCB IN POOL (IF EVEN).; R0=ADDRESS OF KISAR5 BIAS OF TCB (IF ODD); ASSUMPTIONS:; B; A MULTI-USER TASK NAME WILL BE DERIVED FROM THE UCB ADDRESS OFB; THE TI: OF THE CURRENT TASK. IF THIS IS INAPPROPRIATE, USE THE>; ALTERNATE ENTRY POINT $SRTSK AND SUPPLY THE CORRECT TI UCB; ADDRESS IN R0. ;-! "$SRTTK::$# MOV $TKTCB,R0 ;GET CURRENT TASK'S$$ MOV T.UCB(R0),R0 ;TI: UCB ADDRESS %$SRTSK::(& CMP (R3)+,#^R... ;RSX PROTOTYPE NAME?' BNE 50$ ;IF NE NOU4( TST (R3) ;DOES 2ND HALF NAME HAVE NAME OF PROTO?) BEQ 50$ ;IF EQ NOO'* MOV (R3),R1 ;PICK UP PROTOTYPE NAME/+10$: CALL $SRMUT ;SEARCH FOR MULTI-USER TASK 0, BCC 90$ ;IF CC FOUND IT AS "XXXTnn"..SUCCESS9- MOV (R3)+,(R3) ;TRY FOR PROTYPE..FORM NAME FROM $TNAME ". MOV #^R...,-(R3) ;INTO "...XXX"6/20$: CALL $SRPRO ;SEARCH SECONDARY AND PRIMARY POOL)0 BR 90$ ;ALL THAT CAN BE DONE HAS BEENR8150$: CMP (R3),#^R$$$ ;2ND HALF OF NAME INDICATE DECNET2 ;OR SPECIAL PROTOTYPE?3 BNE 60$ ;IF NE NO;.4 MOV -(R3),R1 ;DOES DECNET PROTO HAVE A NAME+5 ;ALSO POINT TO BEGINNING OF TASK NAMEO16 BEQ 70$ ;IF EQ NO NOT DECNET PROTOTYPE JUST AS7 ;"$$$" TASK$8 BR 20$ ;GO FIND IT;960$: MOV -(R3),R1 ;POINT TO BEGINNING OF TASKNAME AND GET -: ;FIRST HALF OF NAME FOR LATER IF NEEDED"0;70$: MOV R0,R2 ;SAVE POSSIBLE TI: UCB POINTER6< CALL $SRSTD ;SEARCH PRIMARY POOL FOR NON-PROTOTYPE-= BCC 90$ ;IF CC FOUND IT .. RETURN SUCCESSE"> MOV R2,R0 ;RESTORE UCB ADDRESS ? TST 2(R3) ;3 CHAR NAME ONLY?0@ BEQ 10$ ;IF EQ YES TREAT IT AS THE NAME OF AA ;PROTOTYPE-B80$: SEC ;COULDN'T FIND IT RETURN FAILURETC90$: RETURN ;ALL DONE"DEF .IFTF ; DF R$$PROGH .IF DF P$$3XXIJ;+,K; **-$SFCFG-GET SYSTEM CONFIGURATION TABLEL;L9M; THIS DIRECTIVE RETURNS THE SYSTEM CONFIGURATION TABLES<N; TO A USER BUFFER, TURNING IT UPSIDE DOWN IN THE PROCESS!AO; THE TABLE IS VARIABLE LENGTH LOCATED AT THE HIGHEST AVAILABLEMEP; ADDRESS OF MEMORY DOWNWARDS. THE BYTE DESCRIBING THE SIZE OF THISQBQ; TABLE IS AT THE HIGHEST ADDRESS. THIS DIRECTIV00f fcDATADATADATADATADATADATADATAE WILL RETURN AS8R; MUCH OF THE TABLE THAT WILL FIT IN THE USER'S BUFFERS;DT; DPB FORMAT:.U;;#V; WD 00 -- DIC(169.),DPB SIZE(4.)#W; WD 01 -- SUBFUNCTION CODE (12.)UX; WD 02 -- BUFFER ADDRESSD!Y; WD 03 -- BUFFER SIZE IN WORDSRZ; [; INPUTS:O\;E(]; R2 =NUMBER OF WORDS IN USER BUFFER-1 ^; R3 =APR6 USER BUFFER ADDRESS_;H `; OUPUTS:Ha;H6b; THE USER'S BUFFER IS FILLED WITH THE REUESTED INFO4c; THE DSW CONTAINS THE NUMBER OF WORDS TRANSFERREDd;-e f$SFCFG::g INC R2 ;CORRECT WORD COUNT0h BIT #H2.BRG,$HFMSK+2 ;IS THIS A PROFESSIONAL?i BNE NOTPRO ;IF NE NO2j MOV #$PARHD,R0 ;PICK UP MAIN PARTITION LISTHEAD,k10$: MOV (R0),R0 ;GET NEXT MAIN PARTITION*l BEQ NOTPRO ;IF EQ COULDN'T FIND CNFTBL(m CMP P.NAM(R0),#^RCNF ;IS THIS CNFTBL?n BNE 10$ ;IF NE NOF o CMP P.NAM+2(R0),#^RTBL ;MAYBEp BNE 10$ ;IF NE NO TRY NEXT*q MOV P.REL(R0),R1 ;GET BASE OF PARTITION'r MOV P.SIZE(R0),R0 ;GET SIZE OF TABLEE)s ASH #5,R0 ;CONVERT TO NUMBER OF WORDS:4t CMP R0,R2 ;USER EXPECT MORE THAN WE CAN DELIVER?u BHIS 20$ ;IF HIS NOA4v MOV R0,R2 ;SET WORD CNT TO CNFTBL PARTITION SIZE*w20$: ASL R0 ;CONVERT WD COUNT TO OFFSET"x ADD #120000,R0 ;ADD KISAR5 BIAS=y CMP R0,#140000-64. ;COULD WE BLOW AWAY BIAS TO USER BUFFERIz BLOS 30$ ;IF LOS NO$*{ DRSTS D.RS99 ;RETURN ERROR OF 'IE.SDP'7|30$: MOV R2,2(SP) ;RETURN NUMBER OF WORDS TRANSFERREDG+} CALLR $FLIPM ;EXIT TO FLIP MOVE ROUTINEE1~NOTPRO: DRSTS D.RS92 ;RETURN ERROR OF 'IE.IDU'OIDROM=173600 $SFSSN::/ BIT #H2.BRG,$HFMSK+2 ;IS THIS A PROFESSIONALN BNE NOTPRO ;IF NE NO( MOV #IDROM,R0 ;GET ADDRESS OF ID PROM4 MOV #6,R1 ;SET UP LOOP COUNT TO TRANSFER 6 BYTES CLR R2 ;CLEAR VALIDITY FLAG-)10$: MOVB (R0),(R3)+ ;GET A BYTE OF SSNI5 BIS (R0),R2 ;'OR' WITH FLAG TO DETECT A 0 IDVALUER( ADD #2,R0 ;POINT TO NEXT BYTE OF SSN SOB R1,10$ ;LOOP TILL DONE TST R2 ;SSN ALL ZEROS?6 BEQ NOTPRO ;IF EQ YES, IT COULDN'T HAVE BEEN A PRO RETURN ;RETURN SUCCESS= .ENDC ; DF P$$3XX .IFF ; DF R$$PROP;+H; **-$SFABO - ABORT ALL TASKS CURRENTLY ACTIVE ON A SPECIFIED TERMINAL;#M; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ABORT ALL TASKS THAT ARE CURRENTLY/; ACTIVE ON THE TERMINAL SPECIFIED IN THE DPBS;,; DPB FORMAT:A;D%; WD. 00 -- DIC(169.),DPB SIZE(4.).T.; WD. 01 -- SUBFUNCTION CODE (1) (LOW BYTE).; WD. 02 -- BUFFER ADDRESS.?%; WD. 03 -- BUFFER SIZE (IN WORDS).T; ; BUFFER FORMAT:;R+; WD. 00 -- TERMINAL DEVICE NAME IN ASCII&; WD. 01 -- OCTAL NUMBER OF TERMINAL;F ; INPUTS:L;K,; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.(; R3=ADDRESS OF WD. 00. OF THE BUFFER.*; R5=TCB ADDRESS OF THE REQUESTING TASK.;IJ; THIS ROUTINE WILL TRY TO ABORT ALL TASKS CURRENTLY RUNNING OR ABOUT TOJ; RUN ON A TERMINAL SPECIFIED BY THE ASCII NAME AND OCTAL UNIT NUMBER INJ; THE BUFFER POINTED TO BY R3 IF THAT TASK HAS T3.MCR SET (IE. INITIATEDO; BY MCR AT SOME POINT. ALL OFFSPRING TASKS WILL ALSO BE ABORTED IF THEY CANK; BE TRACED BACK TO THE EARLIEST PARENT TASK THAT HAS T3.MCR SET (IE. THEEM; OFFSPRING DOES NOT NEED TO HAVE IT SET TO BE ABORTED). A PROMPT PACKET IS K; ISSUED FOR THE TERMINAL BECAUSE T3.MCR WILL BE CLEARED IN DREIF FOR ALLOI; TASKS THAT ARE ABORTED HERE. SLAVED TASKS AND THOSE NOT MATCHING THE L; SPECIFIED TI: WILL NOT BE ABORTED EVEN THOUGH THEY MAY HAVE PARENTS THATM; WILL BE. PRIVILEGED TASKS WILL BE ABORTED IF THE TERMINAL IS PRIVILEGED.IP; IF IT IS NOT, A PRIVILEGED TASK WILL BE ABORTED ONLY IF IT HAS AN SREX STYLE>; ABORT AST. TKTN WILL NOT BE CALLED FOR THE TASKS ABORTED.;OK; AN INITIAL PASS IS MADE TO SET T4.CTC FOR ANY TASK THAT HAS T3.MCR SET, J; DOES NOT HAVE A PARENT, AND MATCHES THE SPECIFIED TI:. THAT TASK WILLM; ALSO TRY TO BE ABORTED. IF ANY TASKS ARE FOUND IN THIS INITIAL PASS THAT I; HAVE T4.CTC SET, ANOTHER PASS IS MADE THROUGH THE STD. THIS TIME THESM; PARENTS OFF ALL TASKS ARE CHECKED TO SEE IF THEY00fed HAVE T4.CTC SET. IF SO,GH; THE ORIGINAL (OFFSPRING) TASK ALSO HAS T4.CTC SET AND IS TRIED TO BEM; ABORTED. IF ANY OF THESE TASKS ARE FOUND, ANOTHER PASS THROUGH THE STD ISOI; DONE. EVENTUALLY NO TASKS WILL BE FOUND AND PROCESSING IS COMPLETED. L; THIS SCHEME ONLY REQUIRES 1 PASS IF NO TASKS CAN BE ABORTED; IT REQUIRESL; A MINIMUM OF 2 PASSES IF ANY TASKS MUST BE ABORTED AND MAY REQUIRE UP TOJ; N PASSES WHERE N IS THE LONGEST LINKAGE OF ANY RELATIONSHIP CHAIN THAT"; DOESN'T WRAP AROUND ON ITSELF.; B; (IS A PASS TO CLEAR T4.CTC FOR ANY TASK NOT ABORTED REQUIRED?);- .MCALL ABODF$  ABODF$T $SFABO:: .IF DF A$$CLI&C$$CTCE; BIT #T3.PRV!T3.CLI,T.ST3(R5) ;IS TASK PRIVILEGED OR CLI?S BNE 10$ ;IF NE, YESH% DRSTS D.RS16 ;PRIVILEGE VIOLATIONS-10$: MOV (R3)+,R0 ;GET ASCII NAME OF DEVICEF& MOV (R3),R1 ;GET OCTAL UNIT NUMBER3 CALL $CVDVN ;CONVERT DEVICE NAME TO UCB ADDRESSG BCC 20$ ;IF CC, SUCCESSFUL$15$: DRSTS D.RS92 ;INVALID DEVICE620$: BIT #DV.TTY,U.CW1(R2);IS THIS DEVICE A TERMINAL BEQ 15$ ;IF EQ, NO4 MOV R2,-(SP) ;SAVE UCB ADDRESS ACROSS PROMPT CALLB MOV #CC.EXT!CC.TTD,R1 ;ISSUE TASK EXIT PROMPT (AND FORCE SNCMD)025$: CALL $QCNTP ;ISSUE PROMPT REQUEST TO MCR$ MOV (SP)+,R3 ;RESTORE UCB ADDRESS;TN; FIRST PASS TO LOOK FOR TASKS WITH MATCHING TI:, T3.MCR SET, AND NOT SLAVED; 2 CLR $DICSV ;CLEAR FLAG WORD FOR PROCESSED TASK- MOV $TSKHD,R1 ;GET POINTER TO START OF STD:=30$: MOV T.TCBL(R1),-(SP);STORE POINTER TO NEXT TASK IN STD % BEQ 40$ ;IF EQ, THIS IS NULL TASK ! TST T.STAT(R1) ;IS TASK ACTIVED BMI 40$ ;IF MI, NO, IGNORE, BIT #T3.CLI,T.ST3(R1);IS THIS A CLI TASK?& BNE 40$ ;IF NE, YES, SKIP THIS ONE8 CMP R3,T.UCB(R1) ;DOES THE TASK MATCH THE UCB ADDRESS BNE 40$ ;IF NE, NO, IGNORE- BIT #T3.SLV,T.ST3(R1);IS THIS TASK SLAVED?  BNE 40$ ;IF NE, YES, IGNORE;9 BIT #T3.MCR,T.ST3(R1);IS TASK ACTIVATED FROM TERMINAL?O' BEQ 40$ ;IF EQ, NO, IGNORE THIS ONE(> INC $DICSV ;INDICATE THAT WE'VE FOUND A TASK TO BE ABORTED< BIS #T4.CTC,T.ST4(R1);INDICATE THAT ANY OFFSPRING MUST GO* CALL ABORT ;ABORT THE TASK IF POSSIBLE*40$: MOV (SP)+,R1 ;RESTORE STD LINK WORD5 BNE 30$ ;IF NE, THERE ARE MORE TASKS IN THIS PASS 1 TST $DICSV ;CHECK IF ANY TASKS WERE PROCESSED 0 BEQ 100$ ;IF EQ, NO, SKIP ANY FURTHER PASSES;K; NEXT SET OF PASSES WILL GET THE OFFSPRING OF THE TASKS RECOGNIZED ABOVEF;E350$: CLR $DICSV ;RESTORE THE TASK PROCESSED FLAG- MOV $TSKHD,R1 ;GET POINTER TO START OF STDT=55$: MOV T.TCBL(R1),-(SP);STORE POINTER TO NEXT TASK IN STDI% BEQ 80$ ;IF EQ, THIS IS NULL TASKA! TST T.STAT(R1) ;IS TASK ACTIVE  BMI 80$ ;IF MI, NO, IGNORE, BIT #T3.CLI,T.ST3(R1);IS THIS A CLI TASK?& BNE 80$ ;IF NE, YES, SKIP THIS ONE2 BIT #T4.CTC,T.ST4(R1);IS TASK ALREADY PROCESSED BNE 80$ ;IF NE, YES, IGNORE 8 MOV T.OCBH(R1),R4 ;GET POINTER TO LISTHEAD OF PARENTS; BEQ 80$ ;IF EQ, ALREADY PROCESSED IN FIRST PASS, IGNOREA 60$: MOV O.PTCB(R4),R5 ;GET NEXT PARENT TCB ADDRESS IN OCB LIST(- BEQ 70$ ;IF EQ, PARENT HAS EXITED, IGNORE5 BIT #T4.CTC,T.ST4(R5) ;CHECK IF PARENT HAS BIT SET ) BEQ 70$ ;IF EQ, NO, GO ON TO NEXT OCBG2 INC $DICSV ;INDICATE A TASK HAS BEEN PROCESSED= BIS #T4.CTC,T.ST4(R1) ;INDICATE THIS TASK IS PART OF CHAIN)& BR 75$ ;GO TRY TO ABORT IT AS WELL) 70$: MOV (R4),R4 ;GET NEXT OCB ADDRESS;" BNE 60$ ;IF NE, THERE ARE MORE7 BR 80$ ;NO PARENT HAS T4.CTC SET, GO ON TO NEXT TCBR? 75$: CMP R3,T.UCB(R1) ;DOES THIS TASK MATCH THE SPECIFIED TI:L6 BNE 80$ ;IF NE, NO, DON'T ABORT, BUT MARK AS CHAIN( BIT #T3.SLV,T.ST3(R1);CHECK IF SLAVED8 BNE 80$ ;IF NE, IT IS, DON'T ABORT BUT MARK AS CHAIN% CALL ABORT ;TRY TO ABORT THE TASKP8 80$: MOV (SP)+,R1 ;RESTORE THE POINTER TO THE NEXT TCB+ BNE 55$ ;IF NE, NO MORE TO DO THIS PASST2 TST $DICSV ;CHECK IF ANOTHER PASS IS NECESSARY BNE 50$ ;IF NE, YESR 100$:E  .IFTF ;A$$CLI&C$$CTC4  RETURN   .IFT ;A00f fcDATADATADATADATADATADATADATA$$CLI&C$$CTC ! ; 4" ; SUBROUTINE TO ATTEMPT TO ABORT A PARTICULAR TASK # ; INPUTS:O*$ ; R1 - TCB ADDRESS OF TASK TO BE ABORTED% ; R3 - UCB OF TI:L& ;3' ABORT: MOV R3,-(SP) ;SAVE THE TI: UCB ACROSS CALLA#( TSTB T.ST2(R1) ;IS TASK EXITING?T) BMI 20$ ;IF MI, NO, IGNORE:* MOV #AB.CTC,R2 ;SET UP THE DEFAULT SECONDARY ABORT CODE8+ BIT #U2.PRV,U.CW2(R3) ;IS ISSUING TERMINAL PRIVILEGED0, BNE 10$ ;IF NE, YES, ANY TASK MAY BE ABORTED@- BIS #AB.NPV,R2 ;INDICATE TERM NONPRIV IN SECONDARY ABORT CODE9. BIT #T3.PRV,T.ST3(R1);IS TASK TO BE ABORTED PRIVILEGEDU0/ BEQ 10$ ;IF EQ, NO, CAN BE ABORTED BY ANYONE-0 MOV R1,-(SP) ;SAVE THE CURRENT TCB POINTER ,1 MOV R1,R5 ;COPY THE TCB ADDRESS FOR CALL:2 MOV #AS.REA,R4 ;GET EXIT AST CODE TO SEARCH IN LIST FOR+3 CALL $SRAST ;SEARCH FOR AST IN TCB LIST (4 MOV (SP)+,R1 ;RESTORE THE TCB ADDRESS45 BCS 20$ ;IF CS, NO AST AND TASK CAN'T BE ABORTED*6 TSTB A.NPR(R0) ;SEE IF THIS IS SREX AST.7 BNE 10$ ;IF NE, IT IS, TASK MAY BE ABORTED98 BIT #T2.REX,T.ST2(R1);SEE IF ABORT AST BEING PROCESSEDT.9 BEQ 20$ ;IF EQ, NO, TASK CANNOT BE ABORTED@: 10$: MOV #S.CTKN,R0 ;TELL DREIF THAT TKTN SHOULD NOT BE CALLED+; CALL $ABTSK ;ABORT TASK SPECIFIED BY R14< 20$: MOV (SP)+,R3 ;RESTORE THE TI: UCB ACROSS CALL = RETURNL> ? .ENDC ;A$$CLI&C$$CTCT@ A .ENDC ;R$$PROB C D ;+0E ; **-$SFPMN-SET PERFORMANCE MONITOR PARAMETERSF ;'=G ; THIS DIRECTIVE PASSES USER PARAMETERS P1 TO P8 IN THE DPBEAH ; TO THE PERFORMANCE MONITOR USING THE SPM HOOKPOINT MECHANISM.S@I ; SPM HOOKPOINTS ARE TURNED ON AND OFF ON THE FLY BY REPLACINGIJ ; TWO INSTRUCTION WORDS WITH AN INSTRUCTION TO TRANSFER CONTROL TO SPM.AK ;L ; DPB FORMAT:AM ;T%N ; WD. 00 -- DIC(169.),DPB SIZE(10.)R0O ; WD. 01 -- SUBFUNCTION CODE (11.) (LOW BYTE).P ; WD. 02 -- PARAMETER #1Q ; WD. 03 -- PARAMETER #2R ; WD. 04 -- PARAMETER #3S ; WD. 05 -- PARAMETER #4T ; WD. 06 -- PARAMETER #5U ; WD. 07 -- PARAMETER #6V ; WD. 08.-- PARAMETER #7W ; WD. 09.-- PARAMETER #8X ;H Y ; INPUTS:AZ ;S#[ ; R3=ADDRESS OF WD. 02 IN THE DPBD&\ ; R5=TCB ADDRESS OF THE CURRENT TASK] ;T ^ ; OUTPUTS:_ ;N@` ; THE 8. DPB PARAMETERS ARE PASSED TO THE PERFORMANCE MONITOR.a ; b ;-c d e .IF DF P$$MON.f g ;+h ; ** W A R N I N G **(i ;(j ; SPM HOOKPOINT NUMBER 34.k ; +l ; DO NOT CHANGE THE INSTRUCTION FOLLOWING m ; LABEL WITHOUT CHECKING SPMn ;-o -p $SPH34==. ;SPM CHANGES THE INSTRUCTION ATE!q ;THE LOCATION OF THIS LABELr s $SFPMN::t NOPu NOP v RETURN ;w .ENDCx y ;+/z ; **-$SFUPD-UPDATE UICS AND DEFAULT DIRECTORY #{ ; ALTERNATE ENTRY POINT TO $SFUICN| ; H} ; THIS DIRECTIVE TAKES THE DEFAULT UIC AND THE PROTECTION UIC FROM THEM~ ; UCB OF THE TERMINAL (U.UIC AND U.LUIC) AND COPIES THEM INTO THE HEADER OFOM ; THE TASK (H.DUIC AND H.CUIC RESPECTIVELY). IT SETS THE DEFAULT DIRECTORYEK ; OF THE TASK TO BE THE SAME AS THE DEFAULT DIRECTORY OF THE TERMINAL, IFA( ; DIFFERENT. IT THEN JUMPS TO $SFUIC. ;S ; DPB FORMAT:  ;% ; WD. 00 -- DIC(169.),DPB SIZE(4.). 0 ; WD. 01 -- SUBFUNCTION CODE (17.) (LOW BYTE). ; WD. 02 -- BUFFER ADDRESS.N% ; WD. 03 -- BUFFER SIZE (IN WORDS).F ;U ; BUFFER FORMAT: ; ' ; DESCRIBED (AND FILLED IN) IN $SFUICA ;L ; INPUTS:E ;M1 ; R2 - NUMBER OF EXTRA WORDS IN THE USER BUFFERI( ; R3 - ADDRESS OF WD. 00 IN THE BUFFER/ ; R5 - ADDRESS OF THE TCB OF THE CURRENT TASKA ;I ; OUTPUTS: ;I> ; THE UICS IN THE HEADER OF THE REQUESTING TASK ARE UPDATED.M ; THE DEFAULT DIRECTORY STRING FOR THE TASK IS SET TO THAT OF THE TERMINAL.T ;O ;7 ;- .MCALL LNMDF$ LNMDF$R $SFUPD:: .IF DF X$$HDR ( MOV KISAR6,-(SP) ;SAVE BUFFER MAPPING% MOV $SAHDB,KISAR6 ;MAP TASK HEADERF) MOV $SAHPT,R0 ;GET TASK HEADER ADDRESSM  .IFF ;DF X$$HDR ) MOV $HEADR,R0 ;GET TASK HEADER ADDRESSH  .IFTF ; DF X$$HDR ! MOV T.UCB(R5),R1 ;GET TI: UCB: MOV U.UIC(R1),H.DUIC(R0) ;MOVE DEFAULT UIC INTO HEADER= MOV U.LUIC(R1),H.CUIC(R0) ;MO00fmfdVE PROTECTION UIC INTO HEADERE  .IFT ;DF X$$HDR , MOV (SP)+,KISAR6 ;RESTORE BUFFER MAPPING  .ENDC ;DF X$$HDRD " ; RESET DEFAULT DIRECTORY STRING = CMP T.CTX(R5),U.CTX(R1) ;IS TERMINAL CONTEXT SAME AS TASK?$ BEQ 10$ ;IF EQ, INDICATE SUCCESS) MOV T.CTX(R5),R1 ;GET TERMINAL CONTEXTE- CALL $DLCTX ;DELETE TASKS CURRENT CONTEXT;& MOV T.UCB(R5),R1 ;GET TI: UCB AGAIN@ MOV U.CTX(R1),T.CTX(R5) ;SET TASK CONTEXT TO TERMINAL CONTEXT BEQ 10$ ;IF EQ, DONE! MOV KISAR6,-(SP) ;SAVE MAPPINGH* MOV U.CTX(R1),KISAR6 ;MAP CONTEXT BLOCK/ INCB C.REF+140000 ;INCREMENT REFERENCE COUNTC$ MOV (SP)+,KISAR6 ;RESTORE MAPPING , 10$: JMP $SFUIC ;FILL IN BUFFER WITH INFO   .END SAME AS TASK?$ BEQ 10$ ;IF EQ, INDICATE SUCCESS) MOV T.CTX(R5),R1 ;GET TERMINAL CONTEXTE- CALL $DLCTX ;DELETE TASKS CURRENT CONTEXT;& MOV T.UCB(R5),R1 ;GET TI: UCB AGAIN@ MOV U.CTX(R1),T.CTX(R5) ;SET TASK CONTEXT TO TERMINAL CONTEXT BEQ 10$ ;IF EQ, DONE! MOV KIS .TITLE DRGLIP .IDENT /10.05/M I;V-; COPYRIGHT (c) 1974,1978,1979,1986,1987,1988;/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.E;DA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED,9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.B;5 ; VERSION 08;M; D. N. CUTLER 18-SEP-73;2; PREVIOUSLY MODIFIED BY:X;; D. N. CUTLER; T. J. MILLER; T. J. MILLER; J. E. PROVINOC ; K. L. NOEL; B. S. MCCARTHY;5; MODIFIED BY:;R; K. L. NOEL 31-DEC-87 10.00;.@; KLN081 -- SET/CLR PRIV BIT IN CHAR. WORD 2 FOR REMOTE SYSTEMS;,; K. L. NOEL 6-JAN-88 10.01A;Q9; KLN082 -- RETURN ERROR STATUS -5 WHEN LUN NOT ASSIGNEDS;R; K. L. NOEL 11-JAN-88 10.02;L?; KLN084 -- SHRINK MODULE TO MAKE IT FIT INTO DIRECTIVE COMMONN;B; K. L. NOEL 02-FEB-88 10.03;UC; KLN089 -- SEND ONLY 7 WORD OF BUFFER SPACE IF USER REQUESTS MORE ;J; K. L. NOEL 22-MAR-88 10.04; <; KLN096 -- RETURN HTn: FOR DEVICE NAME INSTEAD OF $I OR $O;$; R. D. HANEY 27-APR-88 10.05 14602;8%; RDH152 -- RESTORE R5 = TCB ADDRESSO;E;E; MACRO LIBRARY CALLSO;6 .MCALL HWDDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS& .IF DF C$$RMT ;REMOTE TASK SUPPORT .MCALL CPRDF$ CPRDF$8 .ENDC ; C$$RMT ;A; LOCAL SYMBOLSR;I MAP5 = 120000 MAP6 = 140000-4GL$BUF = 4. ;SIZE OF LOCAL BUFFER STORAGE FOR GLUN$!GL$SIZ = 3. ;DPB SIZE FOR GLUN$J GD$SIZ = 4. ;DPB SIZE FOR GDVI$5GN$SIZ = 8. ;DPB SIZE FOR GIN$ (GET ASSIGNED DEVICE)I;+; **-$DRGLI-GET LUN INFORMATION ;6D; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A SIX WORD BUFFER WITHH; INFORMATION ABOUT A DEVICE THAT IS ASSIGNED TO A SPECIFIED LUN. IF RE-J; QUESTS TO THE DEVICE HAVE BEEN RE-DIRECTED, THEN THE INFORMATION RETURN-&; ED PERTAINS TO THE RE-DIRECT DEVICE.;1 ; DPB FORMAT:1;0!; WD. 00 -- DIC(5.),DPB SIZE(3.).F*; WD. 01 -- LUN TO RETURN INFORMATION FOR.); WD. 02 -- ADDRESS OF A SIX WORD BUFFER.V;; BUFFER FORMAT:;E$; WD. 00 -- NAME OF ASSIGNED DEVICE.:; WD. 01 -- UNIT NUMBER OF ASSIGNED DEVICE AND FLAGS BYTE..; WD. 02 -- FIRST DEVICE CHARACTERISTICS WORD./; WD. 03 -- SECOND DEVICE CHARACTERISTICS WORD. .; WD. 04 -- THIRD DEVICE CHARACTERISTICS WORD./; WD. 05 -- FOURTH DEVICE CHARACTERISTICS WORD.T;- ; INPUTS:A; 9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.-#; R3=ADDRESS OF THE LUN IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.S,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;E5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)T;M-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.2&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.E7; DIRECTIVE STATUS OF 'D.RS5' IS RETURNED IF NO DEVICEW%; IS ASSIGNED TO THE SPECIFIED LUN.E;- .ENABL LSB .IF DF D$$PAR$DRGL1:: .IFF ; DF D$$PARD$DRGLI:: .ENDC ; DF D$$PARK;IF GDVI SUPPORT IS INCLUDED, DPB VALIDATION OF THE SIZE FIELD HAS NOT BEEN5!;DONE AT THIS POINT. DO IT HERE.T .IF EQ G$$DVI3 CMPB #GL$SIZ,-1(R3) ;IS SIZE CONSISTENT WITH GLUN?= BEQ 900mf fcDATADATADATADATADATADATADATA8$ ;IF EQ YES F3 CMPB #GD$SIZ,-1(R3) ;IS SIZE CONSISTENT WITH GDVI?E BEQ 98$ ;IF EQ YES! DRSTS D.RS99 ;DPB INVALID ERRORF .ENDC ;EQ G$$DVII O)98$: CALL $MPLUN ;MAP LUN TO UCB ADDRESSL BCC 105$ ;IF CC DEVICE FOUND .IF DF C$$RTB& BIT #F5.RTB,$FMSK5 ;RUN TIME BINDING? BEQ 99$ ;IF EQ NO JMP $IMASG ;DO IMPLICIT ALUN .ENDC ;C$$RTB)99$: DRSTS D.RS5 ;RETURN ERROR STATUS -5N105$: ;E?; THIS ENTRY POINT IS FOR GIN$ SUBFUNCTION GET ASSIGNED DEVICE T&; AT THIS POINT: R3 = WD 02 OF THE DPB*; R2 = UCB ADDRESS OF DEVICE OR 0 (GIN$);D$RTINF:: MOV R3,-(SP) ;SAVE DPB ADDRESS ) MOV R2,R4 ;SAVE ADDRESS OF DEVICE UCB & MOV #6*2,R1 ;SET LENGTH OF BUFFER # CMPB #GL$SIZ,-3(R3) ;IS THIS GLUN?D BEQ 110$ ;IF EQ YESB, MOV 2(R3),R1 ;GET LENGTH OF BUFFER FROM DPB)110$: MOV (R3),R3 ;GET ADDRESS OF BUFFERN# CALL $ACHKP ;ADDRESS CHECK BUFFERR" MOV (SP)+,R5 ;RESTORE DPB ADDRESS$ .IF DF C$$RTK ;REMOTE TASK SUPPORT( BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT BNE 130$ ;IF NE YESD#120$: JMP 2$ ;JOIN NON REMOTE CODE 130$:D;R3; IF THIS IS GIN$, THERE IS NO UCB ADDRESS TO CHECK ;V" CMPB #GN$SIZ,-3(R5) ;IS THIS GIN$ BEQ 140$ ;IF EQ YESF; 8; CHECK FOR GENERIC DEVICE TYPE BEFORE SENDING TO CPRAME;E MOV (R4),R1 ;GET DCB ADDRESS. CMP R1,$XXLOW ;IS DCB LOWER THAN LOWER BOUND?" BLO 120$ ;IF LO YES, NOT GENERIC/ CMP R1,$XXHGH ;IS DCB HIGHER THAN UPPER BOUND?S$ BHI 120$ ;IF HIGH YES, NOT GENERIC;"; GET A REQUEST PACKET FROM CPRBUF;OF; NOTE: IF SIZE OF REQUEST PACKET OR DPB OF GLUN, GDVI OR GIN$ IS EVERG; MADE LARGER, THE NUMBER OF BLOCK TO ALLOCATE MAY NEED TO BE INCREASED ;$1140$: MOV #1,R1 ;ASSUME ONLY ONE BLOCK IS NEEDED 9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT START% CALL $CPALO ;GET BUFFER FROM CPRBUFP;,; FILL IN REQUEST PACKET O;  MOV R0,KISAR6 ;MAP PACKET$ MOV #MAP6,R1 ;GET ADDRESS OF HEADER+ MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUESTG CLRB H$ICNT(R1) ;NO ITEMS! ADD #P$DPB,R1 ;POINT TO DPB AREA;O; COPY DPB INTO REQUEST PACKET;B" CMPB #GL$SIZ,-3(R5) ;IS THIS GLUN BEQ 150$ ;IF EQ YESF- CMP #7,2(R5) ;IS BUFFER LARGER THAN 7 WORDS?$ BGE 150$ ;IF GE, NOU: MOV #7,2(R5) ;FORCE BUFFER SIZE OF 7 WORDS FOR AME'S SAKE150$:K0 MOV R5,R3 ;COPY POINTER TO USER BUFFER ADDRESS& SUB #4,R3 ;POINT TO BEGINNING OF DPB MOVB 1(R3),R2 ;GET SIZE OF DPBT"160$: MOV (R3)+,(R1)+ ;COPY A WORD SOB R2,160$ ;LOOP UNTIL DONE;T4; CHANGE ADDRESS IN DPB TO OFFSET FROM TOP OF HEADER;; MOVB -3(R5),R2 ;GET SIZE OF DPB ASL R2 ;IN BYTESC ADD #,R2 ;ADD SIZE OF HEADER AND EXTRA STORAGE AREAP* MOV R2,MAP6+H$SIZE+4 ;STORE OFFSET IN DPB;E5; STORE REAL ADDRESS OF USER BUFFER IN REQUEST PACKET ;O- MOV (R5),(R1)+ ;STORE ADDRESS OF USER BUFFERO MOV R4,(R1) ;STORE UCB ADDRESS;3; SEND REQUEST TO CPRAME;. SUB #,R1 ;GET SIZE OF REQUEST PACKET CPSEN$ #SN$DIR,R0,R1S;R; GET RESPONSE PACKETE;T" MOV R0,-(SP) ;SAVE PACKET ADDRESS MOV R0,KISAR6 ;MAP PACKET;3; CHECK STATUSM; - IF ERROR OCCURED AND THIS IS GIN$, CHECK DEVICE NAME FIELD FOR TRANSLATEDE; DEVICE NAMEP;M/ CMP #IS.SUC,MAP6+H$STAT ;WAS SUCCESS RETURNED?T BNE 200$ ;IF NE NO;B!; TRANSFER BUFFERS INTO USER AREA(;,' MOVB MAP6+H$SIZE+1,R0 ;GET SIZE OF DPBV ASL R0 ;IN BYTES7 ADD #,R0 ;POINT TO ADDRESS OF USER BUFFER- CMP #"$I,4(R0) ; IS DEVICE $I?T BEQ 165$ ; IF EQ YES CMP #"$O,4(R0) ; IS DEVICE $O? BNE 166$ ; IF NE NOK-165$: MOV $TKTCB,R5 ; GET TCB ADDRESS OF TASKH MOV T.UCB(R5),R5 ; GET TI: UCBA MOV U.DCB(R5),R4 ; GET TI: DCBE" MOV D.NAM(R4),4(R0) ; CHANGE NAME= MOVB U.UNIT(R5),6(R0) ; GET UNIT NUMBER FROM UCB (ASSUME HT)E# CMP #"VT,D.NAM(R4) ; IS THIS A VT?E% BNE 166$ ; IF NE, U.UNIT IS CORRECTZ1 MOVB D.UNIT(R4),6(R0) ; IF VT, D.UNIT IS CORRECT#166$:$) CMPB MAP6+H$SIZE+1,#GN$SIZ ;IS THIS GIN$% BEQ 170$ ;IF EQ YES, DON'T HAVE UCB1 MOV 2(R0),R4 ;GET UCB ADDRESS- CMPB U.UNIT(R4),#377 ;IS THIS A GENERIC UCB?$2 BEQ 170$ ;IF EQ YES, PRV BIT IS NOT VALID IN U00mffdCB' BIT #U2.PRV,U.CW2(R4) ;IS PRIV BIT SETR BEQ 170$ ;IF EQ NO0 BIS #U2.PRV,GL$BUF+6(R0) ;SET PRV BIT IN BUFFER170$:G) MOV (R0),R0 ;GET ADDRESS OF USER BUFFER#, CALL $RELOC ;GET BIAS AND OFFSET OF BUFFER' MOV R1,R3 ;SET UP DEST BIAS FOR BLXIO)% MOV R2,R4 ;SET UP DEST DISPLACEMENT$* MOV (SP),R1 ;SET UP SOURCE BIAS FOR APR58 MOV #<6*2>,R0 ;GET SIZE OF BUFFER ASSUMING THIS IS GLUN' MOVB MAP6+H$SIZE+1,R2 ;GET SIZE OF DPBI CMPB #GL$SIZ,R2 ;IS THIS GLUN?  BEQ 180$ ;IF EQ YES 2 MOV MAP6+H$SIZE+6,R0 ;GET SIZE OF BUFFER FROM DPB ASL R0 ; IN BYTESF'180$: ASL R2 ;GET SIZE OF DPB IN BYTESV6 ADD #,R2 ;SET SOURCE DISPLACEMENT2190$: CALL $BLXIO ;RETURN EQUIVALENCE NAME STRING# MOV (SP)+,R0 ;GET BUFFER BIAS BACKO" BR 210$ ;GO TO DEALLOCATE BUFFER;L; CPRAME HAS RETURNED AN ERRORG; - IF THIS IS GIN$, CHECK DEVICE NAME FIELD FOR TRANSLATED DEVICE NAME ;N200$: # MOV (SP)+,R0 ;GET BUFFER BIAS BACKC) CMPB #GN$SIZ,MAP6+H$SIZE+1 ;IS THIS GIN?F BNE 210$ ;IF NE NO8 CMP #IE.ULN,MAP6+H$STAT ;CAN WE RECOVER FROM THIS ERROR BNE 210$ ;IF NE NO- MOV MAP6+H$SIZE+10,R4 ;DEVICE NAME RETURNED?> BNE 250$ ;IF NE YESE&210$: CALLR $CPDEA ;DEALLOCATE BUFFER245$:T3 RETURN ;JUST RETURN SINCE KXDRV SET ERROR IN DSW 250$:A6 MOV MAP6+H$SIZE+,-(SP) ;SAVE BUFFER ADDRESS' MOV MAP6+H$SIZE+12,R5 ;GET UNIT NUMBERF CALL $CPDEA ;DEALLOCATE BUFFER; I; CPRAME HAS RETURN A TRANSLATED LOGICAL DEVICE NAME, LOOK FOR IT IN OUR H; TABLES;E MOV R4,R0 ;GET DEVICE NAME MOV R5,R1 ;AND UNIT NUMBER CALL $CVDVN ;GET UCB ADDRESS% MOV (SP)+,R3 ;RESTORE BUFFER ADDRESSN BCS 245$ ;IF CS ERROR ;N(; MAKE SURE THIS IS NOT A GENERIC DEVICE;F% MOV R2,R4 ;MOVE UCB ADDRESS INTO R4N) CMP (R2),$XXLOW ;LOWER THAN LOWER BOUND?M BLO 2$ ;IF LO YES,) CMP (R2),$XXHGH ;HIGHER THAN HIGH BOUND?E BHI 2$ ;IF HI YESE' RETURN ;RETURN WITH ERROR STATUS SET  .ENDC ;C$$RTK 2$: $GLINF::& MOV (R4),R2 ;GET BACK POINTER TO DCB3$:* TST (R2)+ ;POINT TO ADDRESS OF FIRST UCB MOV R4,R0 ;COPY ADDRESS OF UCB0 SUB (R2)+,R0 ;CALCULATE RELATIVE ADDRESS OF UCB, MOV (R2)+,(R3)+ ;INSERT GENERIC DEVICE NAME0 MOV (R2)+,(R3) ;PICK UP LOW UNIT NUMBER FOR DCB! MOV (R2)+,R1 ;PICK UP UCB LENGTH(+ CALL $DIV ;CALCULATE RELATIVE UNIT NUMBER , ADD R0,(R3)+ ;CALCULATE LOGICAL UNIT NUMBER( MOVB #200,-(R3) ;ASSUME RESIDENT DRIVER TST (R2) ;DRIVER RESIDENT?  BNE 5$ ;IF NE YES0 CLRB (R3) ;ELSE INDICATE DRIVER IS NONRESIDENT5$: INC R3 ;ADVANCE POINTER T3 ADD #U.CW1,R4 ;POINT TO FIRST CHARACTERISTICS WORDU5 MOV (R4)+,(R3)+ ;INSERT DEVICE CHARACTERISTICS WORDSM MOV (R4)+,(R3)+ ; MOV (R4)+,(R3)+ ; MOV (R4),(R3) ; & MOV $TKTCB,R5 ;RESTORE R5=TCB ADDRESS= BIT #DV.ISP!DV.OSP,U.CW1-U.CW4(R4) ;IS IT A SPOOLED DEVICE? N BEQ 9$ ;IF EQ NO = CMP U.ATT-U.CW4(R4),R5 ;IS ISSUING TASK THE DESPOOLER TASK? D BEQ 9$ ;IF EQ YES, DONE = MOV U.RED-U.CW4(R4),R0 ;PICK UP ADDRESS OF INTERMEDIATE UCB E< MOV U.CW4(R0),(R3) ;RETURN BUFFER SIZE OF INTERMEDIATE DEV 4 TST -(R3) ;THIRD CHARACTERISTICS WORD IS UNDEFINED6 MOV (R4),-(R3) ;RETURN BUFFER SIZE OF SPOOLED DEVICE 6 BIC #^C,-(R3) ;CLR ALL BUT SPOOL BITS 9 BIS U.CW1(R0),(R3) ;RETURN INTERMEDIATE CHARACTERISTICS ,-9$: RETURN ;RETURN DIRECTIVE STATUS OF +1 Q*10$: DRSTS D.RS5 ;SET DIRECTIVE STATUS  .ENDNG TASK THE DESPOOLER TASK? D BEQ 9$ ;IF EQ YES, DONE = MOV U.RED-U.CW4(R4),R0 ;PICK UP ADDRESS OF INTERMEDIATE UCB E< MOV U.CW4(R0),(R3) ;RETURN BUFFER SIZE OF INTERME .TITLE DRGPPD .IDENT /08.00/I ;D; COPYRIGHT (C) 1988/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.P;OA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED)9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;4; VERSION 07.06B;S; D. N. CUTLER 3-JAN-74.;<); MODIFIED FOR RSX-11M-PLUS VERSION 1 BY:E;O; T. J. MILLER; J. E. PROVINOR; +; MODIFIED FOR RSX-11M-PLUS VERSION 2.0 BY: ;A; J. M. LAWLER; T. M. MARTIN;X+; MODIFIED FOR RSX-11M-PLUS VERSION 00f fcDATADATADATADATADATADATADATA4.1 BY:L;R ; B. S. MCCARTHY 13-APR-88 08.00;Y6; BM410 -- CHANGE GPP TO CALL SRMAI FOLLOWED BY SRNAM;A; MACRO LIBRARY CALLSR;S .MCALL PCBDF$,TCBDF$,HDRDF$% HDRDF$ ;DEFINE TASK HEADER OFFSETSC1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS7, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+$; **-$DRGPP-GET PARTITION PARAMETERS;JF; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A THREE WORD BUFFER WITH; PARTITION PARAMETERS.;. ; DPB FORMAT:;O"; WD. 00 -- DIC(65.),DPB SIZE(4.).2; WD. 01 -- FIRST HALF OF OPTIONAL PARTITION NAME.3; WD. 02 -- SECOND HALF OF OPTIONAL PARTITION NAME.A+; WD. 03 -- ADDRESS OF A THREE WORD BUFFER.$;B; BUFFER FORMAT:; 4; WD. 00 -- BASE ADDRESS OF PARTITION IN 32W BLOCKS.,; WD. 01 -- SIZE OF PARTITION IN 32W BLOCKS.!; WD. 02 -- PARTITION FLAGS WORD.;* ; INPUTS: ;T9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. .; R3=ADDRESS OF THE PARTITION NAME IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.I,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;P5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)O; -; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.E9; DIRECTIVE STATUS EQUAL TO THE STARTING VIRTUAL ADDRESSA+; OF THE SPECIFIED PARTITION IS RETURNED.-; C=1 IF DIRECTIVE IS REJECTED..7; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF SPECIFIED; PARTITION IS NOT IN SYSTEM.O;O8; IF THE PARTITION IS A TASK REGION, THE EXTERNAL HEADER5; IS NOT INCLUDED IN THE PARTITION PARAMETERS BECAUSEA; IT IS NOT MAPPED BY THE TASK.T;C;- P$DRGPP:: ;REFERENCE LABELS D .IF DF P$$LAS .IF DF U$$DAS R- MOV T.ST4(R5),-(SP) ;SAVE I/D TASK INDICATORS .ENDC ; DF U$$DAS3 MOV H.WND(R4),-(SP) ;SAVE POINTER TO WINDOW BLOCKSE& TST (R3)+ ;PARTITION NAME SPECIFIED? BNE 10$ ;IF NE YES# CALL $SRATT ;SEARCH FOR REGION ID& MOV A.PCB(R5),R2 ;PICK UP PCB ADDRESS BR 30$ ;610$: TST -(R3) ;POINT TO FIRST WORD OF PARTITION NAME E .IFFE R% TST (R3) ;PARTITION NAME SPECIFIED?  BNE 5$ ;IF NE YES& MOV T.PCB(R5),R4 ;GET TASK REGION PCB3 TST (R3)+ ;POINT TO SECOND WORD OF PARTITION NAME BR 40$ ; ) .ENDC E DC; JUST FOR THE RECORD: GPRT$ SHOULD, ACCORDING TO THE DOCUMENTATIONED; AND ACCORDING TO RSX-11M'S BEHAVIOR, LOOK ONLY AT MAIN PARTITIONS.C; THIS WOULDN'T MATTER EXCEPT FOR THE CHANGE TO PLSUB/DRREG TO MAKEBA; IT POSSIBLE TO CREATE A REGION GEN IN PARTITION GEN. THE CHANGE @; MAKES SRNAM NOT LOOK AT MAIN PARTITIONS, SO GRTP$ DOESN'T LOOKB; AT MAINS AFTER THAT CHANGE. SIMPLY CHANGING THE $SRNAM CALL HEREB; TO A $SRMAI MEANS THAT GPRT$ DIRECTIVES FOR NAMED REGIONS, WHICHA; USED TO WORK, WON'T ANY MORE. THIS PROBABLY ISN'T SO HOT, SO WELB; CALL $SRMAI AND $SRNAM. BUT, DOING IT IN THE ORDER IT USED TO BE?; DONE IN ISN'T ATTRACTIVE EITHER, SINCE TKB WOULD FIND THE GENPB; REGION WITH A GPRT$ INSTEAD OF THE GEN MAIN PARTITION, AND MIGHTB; NOT BUILD SOME TASKS CORRECTLY AS A RESULT. SO, WE LOOK AT MAINS?; FIRST, AND THEN NAMED COMMONS. APPLICATIONS WHICH DEPENDED ONN@; GETTING THE NAME OF A REGION WHICH DUPLICATES A MAIN PARTITION; WILL NOT SURVIVE THIS CHANGE.N15$: CALL $SRMAI ;SEARCH FOR NAMED MAIN PARTITIONL& BCC 20$ ;IF CC NAMED PARTITION FOUND) CALL $SRNAM ;SEARCH FOR NAMED PARTITIOND& BCC 20$ ;IF CC NAMED PARTITION FOUND% DRSTS D.RS2 ;INVALID PARTITION NAMEI 20$: TST (R3)+ ;ADVANCE POINTER!30$: MOV R2,R4 ;COPY PCB POINTERU .IF DF P$$LASE/ MOV (SP)+,R1 ;RESTORE POINTER TO WINDOW BLOCKSD( TST (R1)+ ;ADVANCE POINTER TO WINDOW 0 D .IFTF ; DF P$$LAS .IF DF U$$DAS! CLR 4(SP) ;SET DIRECTIVE STATUS  L .IFF ; DF U$$DASH! CLR 2(SP) ;SET DIRECTIVE STATUSR .ENDC ; DF U$$DAS .IFT ; DF P$$LASD .IF DF U$$DAS4 BIT #T4.DSP,(SP)+ ;USER TASK HAVE D SPACE ENABLED ? BEQ 35$ ;IF EQ, NO+ ADD #W.BLGH,R1 ;YES, WINDOW 1 MAPS D SPACE035$: ;REFERENCE LABEL .ENDC ; DF U$$DAS ASSUME W.BPCB ASSUME W.BLVR-24 CMP (R1)+,R4 ;TARGET PARTITION TASK REGION (W.BPCB)+ BNE 40$ ;IF NOT, RETURN '0' STARTING ADD00f^f]fR.7 MOV (R1),2(SP) ;STARTING ADDRESS (W.BLVR) FROM WIN 0/1I .ENDC ; DF P$$LAS/40$: MOV 2(R3),R3 ;GET ADDRESS OF 3 WORD BUFFER& MOV #3*2,R1 ;SET LENGTH OF BUFFER # CALL $ACHKP ;ADDRESS CHECK BUFFERD .IF DF X$$HDR; MOVB P.HDLN(R4),R1 ;GET LENGTH OF EXTERNAL HEADER (IF ANY) < MOV P.REL(R4),(R3) ;CALCULATE STARTING ADDRESS OF PARTITION1 ADD R1,(R3)+ ;EXCLUDING POSSIBLE EXTERNAL HEADER2 .IFF ; DF X$$HDRR 3 MOV P.REL(R4),(R3)+ ;GET BASE ADDRESS OF PARTITIONT .IFT ; DF X$$HDR.. MOV P.SIZE(R4),(R3) ;INSERT SIZE OF PARTITION( SUB R1,(R3)+ ;MINUS ANY EXTERNAL HEADER .IFF ; DF X$$HDRD/ MOV P.SIZE(R4),(R3)+ ;INSERT SIZE OF PARTITIONF .ENDC ; DF X$$HDR1 CLR (R3) ;INSERT CODE FOR SYSTEM CONTROLLED PAR 60$: RETURN N R .ENDDER (IF ANY) < MOV P.REL(R4),(R3) ;CALCULATE STARTING ADDRESS OF PARTITION1 ADD R1,(R3)+ ;EXCLUDING POSSIBLE EXTERNAL HEADER2 .IFF ; DF X$$HDRR 3 MOV P.REL(R4),(R3)+ ;GET BASE ADDRESS OF PARTITIONT .IFT ; DF X$$HD .TITLE DRGSSV .IDENT /04.01/C T;A&; COPYRIGHT (C) 1974, 1976, 1979, 1987/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.(;+A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED 9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; ; VERSION 04;T; D. N. CUTLER 31-AUG-73; ; PREVIOUSLY MODIFIED BY:D;T; D. N. CUTLER; J. E. PROVINO ; ;$; MODIFIED FOR RSX-11M-PLUS V4.0 BY:;S; L. B. MCCULLEY 23-MAR-87 4.01);07; LBM050 - SUPPORT PROCESSORS WITHOUT SWITCH REGISTERSV;.;N;0; MACRO LIBRARY CALLSI;  .MCALL HWDDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS;+; **-$DRGSS-GET SENSE SWITCHES; J; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO STORE THE CONTENTS OF THE CONSOLE>; SWITCH REGISTER IN THE ISSUING TASK'S DIRECTIVE STATUS WORD.;U ; DPB FORMAT:;#; WD. 00 -- DIC(125.),DPB SIZE(1.).N;U ; INPUTS:E;R9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. +; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK..,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;W5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)$;S:; C=0 WITH A DIRECTIVE STATUS EQUAL TO THE CONTENTS OF THE; CONSOLE SWITCH REGISTER.T;- .IF DF G$$TSS$DRGSS::8 BIT #HF.SWR,$HFMSK ; HARDWARE SWITCH REGISTER PRESENT?$ BEQ 1$ ; NO, DON'T TRY TO READ IT0 MOV SWR,$SWR ; YES, READ IT INTO SYSCM STORAGE-1$: MOV $SWR,2(SP) ; RETURN VALUE FROM SYSCMS RETURNA .ENDC .END /; R4=ADDRESS OF THE HEADER O .TITLE DRGTK6 .IDENT /06.00/L;EL; COPYRIGHT (c) 1982, 1983, 1984, AND 1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;I<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; VERSION 05.05E;O; D. N. CUTLER 27-MAR-74;:;T; PREVIOUSLY MODIFIED BY:.;R; T. J. MILLER; P. J. BEZEREDI; J. M. LAWLER; T. M. MARTIN ; T. LEKAS;Q;0E; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 UPDATE F (OR VERSION 4.0) BY:L;R; ERIC POSTPISCHIL 9-MAR-87 >; 06.00 edp050 -- CORRECT MOVEMENT OF T.PRI FROM WORD TO BYTE%; AS INDICATED BY HANS PILMEYER.;H;S;W; MACRO LIBRARY CALLSA;C .MCALL HDRDF$,PCBDF$,TCBDF$% HDRDF$ ;DEFINE TASK HEADER OFFSETSS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSL, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+; **-$DRGTK-GET TASK PARAMETERSI; H; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A SIXTEEN WORD BUFFER WITH; TASK PARAMETERS.;F ; DPB FORMAT:0;Y"; WD. 00 -- DIC(63.),DPB SIZE(2.).-; WD. 01 -- ADDRESS OF A SIXTEEN WORD BUFFER.F; ; BUFFER FORMAT:;A.; WD. 00 -- FIRST HALF OF ISSUING TASK'S NAME./; WD. 01 -- SECOND HALF OF ISSUING TASK'S NAME.C0; WD. 02 -- FIRST HALF OF TASK'S PARTITION NAME.1; WD. 03 -- SECOND HALF OF TASK'S PARTITION NAME.B>; WD. 04 -- FIRST HALF OF REQUESTER TASK NAME (NOT SUPPORTED).?; WD. 05 -- SECOND HALF OF REQUESTER TASK NAME (NOT SUPPORTED).L; WD. 06 -- TASK PRIORITY.; WD. 07 -- CURRENT TASK UIC. $; WD00]f fcDATADATADATADATADATADATADATA. 10 -- NUMBER OF LOGICAL UNITS.; WD. 11 -- PROCESSOR INDICATORF+; WD. 12 -- STD FLAGS WORD (NOT SUPPORTED).:-; WD. 13 -- ADDRESS OF TASK SST VECTOR TABLE.N3; WD. 14 -- SIZE OF TASK SST VECTOR TABLE IN WORDS.C"; WD. 15 -- SIZE OF TASK IN BYTES./; WD. 16 -- SYSTEM ID CODE (6 FOR RSX-11M+). %; WD. 17 -- PROTECTION UIC WORD. F ; ; INPUTS: ;T9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E3; R3=ADDRESS OF THE SIXTEEN WORD BUFFER IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.O,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; A; NOTE THAT IF THE REQUESTING TASK HAS A NON RESIDENT TASK HEADERT=; WE WILL ENTER AT $DRGTK WITH THE TASK HEADER MAPPED THROUGHL=; KERNEL APR 6. HOWEVER, WE ALSO NEED TO MAP THE USER BUFFERY<; AREA WITH APR 6. THEREFORE, WE WILL SAVE NECESSARY HEADER?; INFORMATION IN THE INTERNAL DPB SAVE AREA (WE NO LONGER NEED K*; THE DPB) BEFORE MAPPING THE USER BUFFER.;S5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)O;H$; C=0 WITH A DIRECTIVE STATUS OF +1.;- C4$DRGTK::MOV (R3),R3 ;GET ADDRESS OF 16. WORD BUFFER .IF DF X$$HDRR1 MOV #$DICSV+2,R0 ;USE INTERNAL DPB FOR SAVE AREAT T .IF DF M$$MUP' MOV H.DUIC(R4),(R0)+ ;SAVE DEFAULT UICS .IFF % MOV H.CUIC(R4),(R0)+ ;OR CURRENT UIC  .ENDC* MOV H.NLUN(R4),(R0)+ ;SAVE NUMBER OF LUNS0 MOV H.TKVA(R4),(R0)+ ;SAVE TASK SST VECTOR ADDR0 MOV H.TKVL(R4),(R0) ;SAVE LENGTH OF SST VECTOR ASR (R0)+ ;IN TERMS OF WORDS3 MOV H.WND(R4),R1 ;POINT TO NUMBER OF WINDOW BLOCKSA .IF DF U$$DAS5 BIT #T4.DSP,T.ST4(R5) ;TASK HAVE I/D SPACE ENABLED ?U BEQ 10$ ;IF EQ, NO6 ADD #W.BLGH,R1 ;YES, POINT TO WINDOW 1 (D SPACE ROOT)10$: ;REFERENCE LABEL .ENDC ; DF U$$DAS4 MOV W.BHVR+2(R1),(R0) ;CALCULATE TASK SIZE IN BYTES SUB W.BLVR+2(R1),(R0) ; M INC (R0)+ ;R) MOV H.CUIC(R4),(R0) ;SAVE PROTECTION UICR .ENDC/ MOV #16.*2,R1 ;SET LENGTH OF BUFFER IN BYTES E, CALL $ACHKP ;ADDRESS CHECK PARAMETER BLOCK, MOV T.NAM(R5),(R3)+ ;INSERT NAME OF TASK  MOV T.NAM+2(R5),(R3)+ ;* MOV T.PCB(R5),R0 ;GET ADDRESS OF TASK PCB. MOV P.NAM(R0),(R3)+ ;INSERT NAME OF PARTITION MOV P.NAM+2(R0),(R3)+ ;0 CMP (R3)+,(R3)+ ;POINT TO TASK PRIORITY ADDRESS- MOVB T.PRI(R5),(R3)+ ; INSERT TASK PRIORITY.; CLRB (R3)+ ; CLEAR HIGH BYTE.B .IF DF X$$HDR/ MOV #$DICSV+2,R4 ;ADDRESS OF SAVED HEADER INFOE MOV (R4)+,(R3)+ ;INSERT UIC*( MOV (R4)+,(R3)+ ;INSERT NUMBER OF LUNS( MOV $PRMOD,(R3)+ ;INSERT PROCESSOR TYPE- TST (R3)+ ;POINT TO TASK SST VECTOR ADDRESS2 MOV (R4)+,(R3)+ ;INSERT TASK SST VECTOR ADDRESS 6 MOV (R4)+,(R3)+ ;INSERT LENGTH OF SST VECTOR IN WORDS% MOV (R4)+,(R3)+ ;TASK SIZE IN BYTESP .IF DF R$$PRO! MOV #11,(R3)+ ;SET CODE FOR P/OSR .IFF ;R$$PROE T$ MOV #6,(R3)+ ;SET CODE FOR RSX-11M+ .ENDC ;R$$PRO" MOV (R4),(R3) ;SET PROTECTION UIC .IFFA .IF DF M$$MUP) MOV H.DUIC(R4),(R3)+ ;INSERT DEFAULT UIC3 .IFFR) MOV H.CUIC(R4),(R3)+ ;INSERT CURRENT UICR .ENDC, MOV H.NLUN(R4),(R3)+ ;INSERT NUMBER OF LUNS( MOV $PRMOD,(R3)+ ;INSERT PROCESSOR TYPE- TST (R3)+ ;POINT TO TASK SST VECTOR ADDRESSS5 MOV H.TKVA(R4),(R3)+ ;INSERT TASK SST VECTOR ADDRESSP: MOV H.TKVL(R4),(R3) ;INSERT LENGTH OF SST VECTOR IN WORDS' ASR (R3)+ ;CONVERT TO LENGTH IN WORDSD3 MOV H.WND(R4),R1 ;POINT TO NUMBER OF WINDOW BLOCKSE .IF DF U$$DAS5 BIT #T4.DSP,T.ST4(R5) ;TASK HAVE I/D SPACE ENABLED ?S BEQ 20$ ;IF EQ, NO6 ADD #W.BLGH,R1 ;YES, POINT TO WINDOW 1 (D SPACE ROOT)20$: ;REFERENCE LABEL .ENDC ; DF U$$DAS4 MOV W.BHVR+2(R1),(R3) ;CALCULATE TASK SIZE IN BYTES SUB W.BLVR+2(R1),(R3) ; INC (R3)+ ; .IF DF R$$PRO! MOV #11,(R3)+ ;SET CODE FOR P/OSP .IFF ;R$$PRO, )' MOV #6,(R3)+ ;SET CODE FOR RSX-11M+ A .ENDC ;R$$PRO+ MOV H.CUIC(R4),(R3) ;SET PROTECTION UIC T .ENDC RETURN ; D .ENDBIT #T4.DSP,T.ST4(R5) ;TASK HAVE I/D SPACE ENABLED ?S BEQ 20$ ;IF EQ, NO6 ADD #W.BLGH,R1 ;YES, POINT TO WINDOW 1 (D SPACE ROOT)20$: ;REFERENCE LABEL .ENDC ; DF U$$D00ff]f .TITLE DRGTPC .IDENT /09.00/ ;SI; COPYRIGHT (c) 1982, 1983, 1984, 1989 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;C; D. N. CUTLER 30-AUG-73;R); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:T; ; T. M. MARTIN;.$; MODIFIED FOR RSX-11M-PLUS V2.1 BY:;W; B. S. MCCARTHY ; T. LEKASE;W$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;I ; J. C. FRANZINI 8-JUN-88 09.00;/; JCF326 -- FIX SYSTEM TIME CHANGE TRANSACTION ;4;+1; **-$DRGTP-GET TIME PARAMETERS / SET SYSTEM TIMER;RG; THE GET TIME DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A SPECIFIED EIGHT /; WORD BUFFER WITH THE CURRENT TIME PARAMETERS.C;IB; THE SET SYSTEM TIME DIRECTIVE INSTRUCTS THE SYSTEM TO OPTIONALLYE; FILL A SPECIFIED EIGHT WORD BUFFER WITH THE CURRENT TIME PARAMETERS2?; AND TO RESET THE SYSTEM TIME USING A SPECIFIED TIME AND DATE.R;1;P/; DPB FORMAT FOR GET TIME PARAMETERS DIRECTIVE:0;"; WD. 00 -- DIC(61.),DPB SIZE(2.).,; WD. 01 -- ADDRESS OF AN EIGHT WORD BUFFER.;R+; DPB FORMAT FOR SET SYSTEM TIME DIRECTIVE:E;R"; WD. 00 -- DIC(61.),DPB SIZE(3.).;; WD. 01 -- ADDRESS OF AN EIGHT WORD NEW TIME SPECIFICATIONE=; WD. 02 -- ADDRESS OF AN EIGHT WORD OUTPUT BUFFER (OLD TIME)M; ;I; BUFFER FORMAT:;I; WD. 00 -- YEAR SINCE 1900.; WD. 01 -- MONTH OF YEAR.; WD. 02 -- DAY OF MONTH.I; WD. 03 -- HOUR OF DAY.; WD. 04 -- MINUTE OF HOUR.M; WD. 05 -- SECOND OF MINUTE.C; WD. 06 -- TICK OF SECOND.1; WD. 07 -- TICKS PER SECOND.D;S ; INPUTS:H;O9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E+; R3=ADDRESS OF THE SECOND WORD IN THE DPB.D/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.C,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;U5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;0-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED..&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.E8; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF BUFFER IS,; OUTSIDE OF ISSUING TASK'S ADDRESS SPACE.;-; $DRGTP:: MOVB -(R3),R4 ;GET DPB LENGTH. CMPB (R3)+,#2 ;GET TIME PARAMETERS DIRECTIVE? .IF DF R$$PRO! BNE 4$ ;IF NE NO - TRY SET TIMER2 BIT #H2.ITF,$HFMSK+2 ;IS THE DATA VALID FROM THE ;HARDWARE DATE/TIME CLOCK?0 BNE 40$ ;IF NE NO - RETURN INVALID TIME FORMAT& BR 5$ ;THE TIME IS VALID - RETURN IT .IFF ;R$$PROI BEQ 5$ ;IF EQ YESR .ENDC ;R$$PRO+4$: CMPB R4,#3 ;SET SYSTEM TIME DIRECTIVE?.$ BNE 41$ ;IF NE, ILLEGAL DPB LENGTH( BIT #T3.PRV,T.ST3(R5) ;TASK PRIVILEGED? BNE 3$ ;IF NE YES ( DRSTS D.RS16 ;ELSE PRIVILEGE VIOLATION23$: MOV (R3)+,R5 ;COPY VIRTUAL ADDRESS OF NEW TIME25$: MOV (R3)+,R3 ;GET PREVIOUS TIME BUFFER ADDRESS0 BNE 7$ ;IF NE, THERE IS A PREVIOUS TIME BUFFER BIT #1,R4 ;IS THIS A SET TIME?1 BNE 15$ ;IF NE YES, OLD TIME BUFFER IS OPTIONAL 17$: MOV #8.*2,R1 ;SET LENGTH OF BUFFER IN BYTES ;- CALL $ACHKP ;ADDRESS CHECK PARAMETER BUFFER 1 MOV #$TTNS-14,R1 ;POINT TO CURRENT TIME VECTOR E:10$: MOV (R1)+,(R3)+ ;INSERT TIME PARAMETER IN TASK BUFFER# CMP R1,#$TTNS ;ANY MORE TO INSERT?L BLOS 10$ ;IF LOS YES% MOV $TKPS,(R3) ;SET TICKS PER SECONDO(15$: ROR R4 ;SET SYSTEM TIME DIRECTIVE?$ BCC 90$ ;IF CC NO, GETTIM FINISHED( MOV R5,R3 ;GET NEW TIME BUFFER ADDRESS, MOV #8.*2,R1 ;SET LENGTH OF NEW TIME BUFFER4 CALL $ACHKP ;ADDRESS CHACK AND MAP NEW TIME BUFFER. MOV #$TTNS+2,R1 ;POINT TO CURRENT TIME VECTOR)20$: MOV -(R1),-(SP) ;COPY TIME PARAMETER4 CMP R1,#$TTNS-14 ;MORE TO COPY? BHI 20$ ;IF HI YES, CLR R2 ;INITIALIZE FEBRUARY DPM ADJUSTMENT, MOV SP,R5 ;POINT TO CURRENT YEAR PARAMETER. MOV #$TKPS-14,R1 ;POINT TO TIME LIMITS VECTOR CALL 100$ ;VALIDATE YEAR BIT #3,R0 ;LEAP YEAR?$ BNE 25$ ;IF NE NOI INC R2 ;SET FEB CONSTANT25$: U CALL 100$ ;VALIDATE MONTHS, BLOS 40$ ;IF C=1 OR Z=1 THEN INVALID MONTH DEC R0 ;NORMALIZE TO ZERO " BNE 27$ ;IF NE, THEN NOT JANUARY2 ADD #12.,R0 ;ELSE ADJUST TABLE INDEX FOR JANUARY27$: CMP R0,#1 ;FEBRUARY?00f fcDATADATADATADATADATADATADATA BEQ 28$ ;IF EQ, YES2' CLR R2 ;ELSE CLEAR ANY DPM ADJUSTMENTU<28$: MOVB $DYPMN-1(R0),R4 ;GET NUMBER OF DAYS FOR THIS MONTH% ADD R4,R2 ;CALCULATE DAYS-PER-MONTHM CALL 100$ ;VALIDATE DAYL" BEQ 40$ ;IF Z=1 THEN ILLEGAL DAY DEC R2 ;NORMALIZE REFERENCE 3 CMPB R2,R0 ;DAY SPECIFIED HIGHER THAN CALC'D DPM?T% MOV #4,R4 ;VALIDATE HR,MIN,SEC,TICKL30$: CALL 100$ ;; SOB R4,30$ ;- BCS 40$ ;IF CS, THEN INVALID TICK OF SECOND21 MOV (R3),R0 ;GET GRANULARITY (TICKS PER SECOND)P: CMP -(R1),R0 ;CORRECT TICK PER SECONDS ON CURRENT SYSTEM? BEQ 50$ ;IF EQ YES$ CMP R0,#-1 ;DEFAULTED GRANULARITY? BEQ 50$ ;IF EQ YES*40$: DRSTS D.RS93 ;INVALID TIME PARAMETER&41$: DRSTS D.RS99 ;INVALID DPB LENGTH50$: INC R2 ;CORRECT DPMD. MOV R2,$TKPS-10 ;UPDATE NEW DAYS/MONTH LIMIT .IF DF A$$CNT' MOV R5,R3 ;COPY TOP OF STACK POINTERM( SUB #3,R3 ;ADJUST POINTER TO NEW TIME! TST $SABPT ;ACCOUNTING ACTIVE?L BEQ 70$ ;IF EQ NO+ MOV #$TKPS+2,R4 ;POINT TO OLD TIME VECTORD8 MOV #/64.,R1 ;SET NUMBER OF BLKS TO ALLOCATE3 CALL $ALACC ;ALLOCATE ACCOUNTING TRANSACTION BLKR% BCS 70$ ;IF CS, ALLOCATION FAILURED& MOV R0,KISAR6 ;MAP TRANSACTION BLOCKK MOV #+BT.TIM,140000+B.TYP ;FILL IN TRANSACTION TYPE AND LENGTHP: MOV #140000+B.TNEW+6,R2 ;INIT OFFSET INTO OLD TIME VECTOR8 MOV #140000+B.TOLD,R1 ;INIT OFFSET INTO NEW TIME VECTOR;60$: MOVB -(R3),-(R2) ;PLACE NEW TIME INTO TRANSACTION BLKQ7 MOVB (R4)+,(R1)+ ;PLACE OLD TIME INTO TRANSACTION BLKC# CMPB -(R3),(R4)+ ;ADJUST POINTERSU+ CMP R3,SP ;MORE TIME PARAMETERS TO MOVE?O BHI 60$ ;IF NE YEST/ MOV R0,R1 ;COPY TRANSACTION BLK MAPPING BIAS, CALL $QACNT ;QUEUE ACCOUNTING TRANSACTION .ENDC ;A$$CNT70$: ;REFERENCE LABEL .IF DF E$$LOG SEC ;ASSUME NO ERROR LOG PKTN1 BIT #ES.LOG,$ERFLA ;IS ERROR LOGGING TURNED ON?, BEQ 75$ ;IF EQ NO0 MOV #E$CCTL+<400*E$STIM>,R0 ;GET THE ENTRY CODE0 MOV #12.,R1 ;DATA SUBPACKET IS 12. BYTES LONG8 MOV #SM.HDR!SM.TSK!SM.DAT,R2 ;GET INFORMATION TO RECORD# MOV SP,R3 ;SET UP R3 TO POINT ATM ;ANYTHING THE CORRECT DATA ;SUBPACKET CONTENTS WILL BE ;FILLED IN LATER.1 MOV $TKTCB,R4 ;GET THE CURRENT TASK TCB ADDRESS! CALL $CRPKT ;CREATE THE PACKETN .IFTF ; DF E$$LOG675$: MOV #$TTNS-14,R4 ;POINT PAST CURRENT TIME VECTOR' MOV #6,R5 ;MOV 6 WDS OF NEW TIME VEC780$: ;REFERENCE LABEL .IFT ; DF E$$LOGE BCS 85$ ;IF CS NO ERRLOG PKT& MOVB (SP),(R1)+ ;FILL IN DATA PACKET .IFTF ; DF E$$LOG-85$: MOV (SP)+,(R4)+ ;SET NEW TIME PARAMETERP SOB R5,80$ ;VECTOR IN PLACE, MOV (SP)+,(R4)+ ;RETURN NEW TICK_OF_SECOND .IFT ; DF E$$LOGI BCS 90$ ;IF CS, NO ERRLOG PKT CALL $QUPKT ;ELSE QUEUE ITL .ENDC ; DF E$$LOG .IF DF R$$PRO- BIC #H2.ITF,$HFMSK+2 ;THE TIME IS NOW VALIDT3 BIT #H2.CLK,$HFMSK+2 ;TIME OF DAY CLOCK PRESENT ?T BEQ 90$ ;IF EQ NOF) CALL $SETCK ;SET TIME IN THE CLOCK CHIP8 .ENDC ; DF R$$PRO 90$: RETURN(;+A; THIS ROUTINE VALIDATES THE TIME PARAMETERS. IF THE C-BIT IS SET+H; UPON ENTRY, IT IS ASSUMED THAT AN INVALID TIME PARAMETER WAS DETECTED.K; IF THE USER PARAMETER, POINTED TO BY R3, IS EQUAL TO -1, THE VALUE OF THERF; CURRENT TIME VECTOR IS USED. ONLY THE UPPER LIMIT IS CHECKED BY THISF; ROUTINE BY COMPARING THE INPUT TIME PARAMETER WITH THE CORRESPONDINGD; LIMIT IN THE $TKPS VECTOR. IF THIS CHECK FAILS THE C BIT IS SET ONF; RETURN. IN ANY CASE, THE NEW TIME PARAMETER IS MOVED INTO THE VECTOR; ADDRESSED BY R5.;V1100$: BCS 40$ ;IF CS, ILLEGAL TIME PARAMETER HASP ;ALREADY BEEN DETECTED.A" MOVB (R3),R0 ;GET TIME PARAMETER! BPL 110$ ;IF PL, SO FAR SO GOODD5 CMP R0,#-1 ;OTHERWISE, IS IT A DEFAULTED PARAMETER? 2 BNE 40$ ;IF NE NO, NEGATIVE VALUES ARE NOT VALID. ;TIME PARAMETERS. NOTE THAT THE HIGH LIMIT. ;FOR THE YEAR PARAMETER CORRESPONDS TO THE/ ;YEAR 2128. THIS SEEMINGLY RESTRICTIVE HIGHE/ ;LIMIT PREVENTS USERS FROM SPECIFYING THEIRE. ;YEAR PARAMETER BASED ON ZERO, RATHER THAN ;THE YEAR 1900. 8 MOV (R5),R0 ;USE CURRENT TIME 00fffVECTOR TO SUPPLY DEFAULT7110$: TST (R3)+ ;ADJUST POINTER TO NEXT TIME PARAMETER;3 CMP (R1)+,R0 ;SET C BIT FOR OUT_OF_RANGE PARAMETERT BNE 120$D SEC:120$: MOV R0,(R5)+ ;MOVE NEW TIME PARAMETER TO TIME VECTOR ;ON STACK. RETURNE H .ENDLIT. ;FOR THE YEAR PARAMETER CORRESPONDS TO THE/ ;YEAR 2128. THIS SEEMINGLY RESTRICTIVE HIGHE/ ;LIMIT PREVENTS USERS FROM SPECIFYING THEIRE. ;YEAR PARAMETER BASED ON ZERO, RATHER THAN ;THE YEAR 1900. 8 MOV (R5),R0 ;USE CURRENT TIME .TITLE DRLOG  .IDENT /04.03/,; 6; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;R<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; J. R. KAUFFMAN; J. W. BERZLE ; T. LEKAS;N; MODIFIED BY:;:; J. R. KAUFFMAN ; K. L. NOEL; D. P. RABAHY;1$; MODIFIED FOR RSX-11M-PLUS V4.1 BY:;T; PAUL K. M. WEISS ; R. D. HANEY:; J. R. KAUFFMAN; B. S. MCCARTHY;:$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;D; K. L. NOEL 12-MAY-88 04.003; KLN100 -- KEEP TRACK OF DIRECTORY IN RSX FOR CPRH;R; R. D. HANEY 04-AUG-88 04.01S<; RDH165 -- DO SDIR$ PARAMETER CHECKS BEFORE SENDING PACKET;C; K. L. NOEL 28-NOV-88 04.028; KLN116 -- SAVE $TEMP0 BEFORE CPSEN$ AND RESTORE AFTER;; K. L. NOEL 22-DEC-88 04.03-; KLN120 -- IMPLEMENT SD.MUD FOR SET DEFAULT ;I;+"; ++$DRLOG-LOGICAL NAME DIRECTIVES;K;; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CREATE, DELETE, ORY@; TRANSLATE A LOGICAL NAME, SETUP A DEFAULT DIRECTORY STRING, OR?; GET A DEFAULT DIRECTORY STRING BY MEANS OF THE FOLLOWING FIVE; SUBFUNCTIONS: ;A; CLOG$ ( SUBFUNCTION 0 ) ;RG; THE CREATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEM TO2O; CREATE A RELATIONSHIP BETWEEN A SPECIFIED LOGICAL NAME STRING AND A SPECIFIEDEM; EQUIVALENCE NAME STRING. IF THE LOGICAL NAME STRING ALREADY EXISTS, THE NEWL(; DEFINITION WILL SUPERCEDE THE OLD ONE.;I); CREATE LOGICAL NAME (CLOG$) DPB FORMAT:;R#; WD. 00 -- DIC(207.),DPB SIZE (7.)L%; WD. 01 -- SUBFUNCTION CODE (0),MODE ; WD. 02 -- TABLE NUMBER,STATUSF*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERL.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFER ;C;E; TLOG$ ( SUBFUNCTION 1 )P;FG; THE TRANSLATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEMSF; TO SEARCH FOR THE SPECIFIED LOGICAL NAME IN THE LOGICAL NAME LOGICALH; NAME TABLES AND RETURN THE EQUIVALENCE NAME STRING TO A USER SPECIFIED ; BUFFER.U;NL; THE TBMASK IS AN INHIBIT BITMASK SO THAT THE USER MAY SPECIFY WHICH TABLESJ; ARE NOT TO BE SEARCHED. SHOULD THE EQUIVALENCE NAME BUFFER BE TOO SMALL,L; THIS DIRECTIVE WILL RETURN AS MUCH OF THE STRING AS POSSIBLE. THE RETURNEDN; STRING LENGTH IS ALWAYS THE BYTE COUNT OF THE EQUIVALENCE NAME STRING RATHER<; THAN THE NUMBER OF CHARACTERS RETURNED TO THE USER BUFFER.;FL; ******************************** NOTE ************************************E; THIS VERSION OF THE TLOG$ DPB IS FOR P/OS COMPATIBILITY ONLY.I?; THE CURRENT DPB FORMAT IS UNDER THE SUBFUNCTION CODE 9. L; **************************************************************************;D,; TRANSLATE LOGICAL NAME (TLOG$) DPB FORMAT:;S#; WD. 00 -- DIC(207.),DPB SIZE (9.)S%; WD. 01 -- SUBFUNCTION CODE (1),MODEC2; WD. 02 -- TBMASK,RESERVED BYTE (RECURSION COUNT)*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFER*.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFERNC; WD. 07 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAME <; WD. 08 -- ADDRESS OF WORD TO RECEIVE TABLE NUMBER AND MODE;*;*; DLOG$ ( SUBFUNCTION 2 )I; M; THE DELETE LOGICAL NAME DIRECTIVE SUBFUNCTION REMOVES THE SPECIFIED LOGICAL H; NAME FROM THE LOGICAL NAME TABLE SPECIFIED. IF THE LOGICAL NAME IS NOTB; SPECIFIED, ALL LOGICAL NAMES IN THE SPECIFIED TABLE ARE REMOVED.;O); DELETE LOGICAL NAME (DLOG$) DPB FORMAT:E;V#; WD. 00 -00f fcDATADATADATADATADATADATADATA- DIC(207.),DPB SIZE (5.)O%; WD. 01 -- SUBFUNCTION CODE (2),MODE ; WD. 02 -- TABLE NUMBER, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFER;; SDIR$ ( SUBFUNCTION 3 ) ;O; THE SETUP DEFAULT DIRECTORY STRING DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEM H; TO CREATE A DEFAULT DIRECTORY STRING ON A USER BASIS. THIS STRING IS AN; SPECIAL CASE SINCE THERE IS NO LOGICAL STRING PER SE AND ONLY AN EQUIVALENCE; NAME STRING EXISTS. ; &; SET DEFAULT DIRECTORY STRING (SDIR$);E#; WD. 00 -- DIC(207.),DPB SIZE (5.)(%; WD. 01 -- SUBFUNCTION CODE (3),MODET,; WD. 02 -- RESERVED FOR FUTURE EXPANSIONISM.; WD. 03 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 04 -- SIZE OF EQUIVALENCE NAME BUFFER ;A; GDIR$ ( SUBFUNCTION 4 )E;BM; THE GET DEFAULT DIRECTORY STRING DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEMRN; TO RETRIEVE THE DEFAULT DIRECTORY STRING FOR THE CURRENT USER. THE STRING ISL; RETURNED TO THE SPECIFIED USER BUFFER ALONG WITH THE LENGTH OF THE STRING.;I2; GET DEFAULT DIRECTORY STRING (GDIR$) DPB FORMAT:; #; WD. 00 -- DIC(207.),DPB SIZE (6.)%; WD. 01 -- SUBFUNCTION CODE (4),MODEO); WD. 02 -- RESERVED FOR FUTURE EXPANSIONM#; WD. 03 -- EQUIVALENCE NAME BUFFERE+; WD. 04 -- SIZE OF EQUIVALENCE NAME BUFFER C; WD. 05 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAMES;C;TE; THE FOLLOWING SUBFUNCTIONS ARE DISPATCHED FROM HERE BUT THE CODE ISU; IN THE MODULE DRPFN.MAC.;T; FSS$ ( SUBFUNCTION 5 );N/; FILE SPECIFICATION SCANNER (FSS$) DPB FORMAT:L;I#; WD. 00 -- DIC(207.),DPB SIZE (7.) *; WD. 01 -- SUBFUNCTION CODE (5), RESERVED; WD. 02 -- RESERVED5; WD. 03 -- ADDRESS OF DIRECTORY SPECIFICATION BUFFERM2; WD. 04 -- SIZE OF DIRECTORY SPECIFICATION BUFFER"; WD. 05 -- ADDRESS OF PARSE BLOCK*; WD. 06 -- SIZE OF PARSE BLOCK (IN BYTES);T<; THE PARSE BLOCK WILL ZEROED AND FILLED IN WITH DESCRIPTORS<; FOR EACH FIELD PRESENT OF NODE, ACCESS, DEVICE, DIRECTORY,;; FILENAME, TYPE, AND VERSION, PLUS THE TRAILING PORTION OFS?; THE STRING IF ANY. THE FLAGS WORD WILL BE HAVE A BIT SET FOR.:; EACH OF THE COMPONENTS PRESENT IN THE FORMAT FOR THE RMS ; NAM BLOCK.;3; IN MORE DETAIL.C;Y<; NODE: THE NODE INCLUDES ALL NODES IF POOR MAN'S ROUTING IS8; IS BEING USED. THE INITIAL NODE NAME IS TERMINATED7; BY THE ACCESS CONTROL STRING ADDRESS, EVEN IF THERE 8; IS NONE. (IN THIS CASE THE ACCESS CONTROL LENGTH IS ; ZERO.);O; FS$NOD IS SET IF PRESENT.;I>; ACCESS THE ACCESS CONTROL STRING IS THE ENTIRE QUOTED STRINGC; CONTROL: TERMINATED BY DOUBLE COLON. AS NOTED ABOVE, THE ADDRESS /; OF THE ACCESS CONTROL SERVES A DUAL PURPOSE.;A@; DEVICE: THE DEVICE IS THE STRING TERMINATED BY A SINGLE COLON.;O; FS$DEV IS SET IF PRESENT. ;S?; DIRECTORY:THE DIRECTORY IS THE STRING BOUNDED BY EITHER [] ORC2; <> AND INCLUDES A RATHER LOOSELY CHECKED SET OF:; CHARACTERS VALID IN A DIRECTORY SPECIFICATION INCLUDING<; WILDCARDS, HIERARCHIES, ETC. THE SYNTAX OF THE DIRECTORY5; MUST BE CHECKED FOR VALIDITY IN THE CONTEXT OF THET*; OPERATION, FOR EXAMPLE, NETWORK ACCESS.; 6; FS$DIR IS SET IF PRESENT. IN ADDITION, IF WILDCARDS;; ARE FOUND, FS$WDI IS ALSO SET. (WILDCARDS ARE "%", "*",N ; AND "...".; A; FILENAME: THE FILENAME IS THE STRING TERMINATED BY ".", ";", ORR%; THE END OF THE FILE SPECIFICATION. ;L7; FS$NAM IS SET IF PRESENT. IN ADDITION, IF WILDCARDS 9; ARE FOUND, FS$WNA IS ALSO SET. (WILDCARDS ARE "%" ANDR; "*".);T.; IF FS$QUO IS SET, THE FILE SPECIFICATION IS8; A QUOTED STRING. THIS IS EITHER A "FOREIGN" FILESPEC5; IF BEING PASSED TO ANOTHER SYSTEM (EG. VIA DAP) ORI4; AN ANSI FILESPEC. THE THE CASE OF THE ANSI FILE,8; A VERSION IS ALLOWED, BUT NO TYPE FIELD. IN THE CASE8; OF A NETWORK OPERATION, IT'S AMBIGUOUS, BUT A VERSION5; WILL BE ALLOWED BUT NOT DEFAULTED. (ACTUALLY THIS$5; DOESN'T RELATE TO FSS BUT THIS SEEMS TO BE AS GOODA!; A PLACE TO MENTION IT AS ANY.)D;D<; TYPE: THE TYPE IS THE STRING TERMINATED BY A "." OR ";" OR7; THE END OF THE FILE SPECIFI00fffCATION. A LEADING "." ISR!; ALWAYS INCLUDED IN THE STRING.T;N7; FS$TYP IS SET IF PRESENT. IN ADDITION, IF WILDCARDS 9; ARE FOUND, FS$WTY IS ALSO SET. (WILDCARDS ARE "%" AND ; "*".);I6; IF THE FILENAME IS A QUOTED STRING, THEN THIS FIELD; MUST BE NULL.; >; VERSION: THE VERSION IS THE FIELD INCLUDING A LEADING "." OR7; ";" TERMINATED BY THE END OF THE STRING. THE STRINGT7; IS LIMITED TO AN OPTIONAL LEADING "-" AND THE DIGITSI#; ZERO TO NINE, OR A "*" WILDCARD.O;H8; FS$VER IS SET IF PRESENT. IN ADDITION, IF A WILDCARD ; IS FOUND, FS$WVE IS ALSO SET.;SC; TRAILING: THE UNPARSED PORTION OF THE INITIAL STRING IS THAT PARTL4; OF THE INPUT THAT WAS SUCCESSFULLY AND COMPLETELY4; PARSED. IF AN ERROR IS DETECTED IN THE DIRECTORY7; SPECIFICATION, FOR EXAMPLE, THE TRAILING STRING WILLL1; INCLUDE THE ERRONEOUS DIRECTORY SPECIFICATION.D; 5; THIS SHOULD ALLOW THE USED OF FSS$ IN COMMAND LINEL;; PARSING. ANY CHARACTER NOT PART OF A FILE SPECIFICATIOND5; TERMINATES THE SCAN AND RESULTS IN ALL INFORMATION "; OBTAINED SO FAR TO BE RETURNED.;E5; THE FIELD TRAILING_ADDR SHOULD ALWAYS BE FILLED IN 3; EVEN WHEN THE LENGTH IS ZERO. THIS IS DIFFERENTS2; FROM THE NORM, BUT IS AN EXCEPTION FOR MUCH THE"; SAME REASON AS FOR ACCESS_ADDR.;N@; THE PARSE BLOCK CAN BE TRUNCATED BY THE USER IF NOT ALL FIELDSC; ARE DESIRED, ALTHOUGH THE ORGANIZATION ISN'T WELL SETUP FOR THAT. A; THE DIRECTIVE CAN ALSO BE ENHANCED BY ADDING FIELDS ON THE END.C;C; ACHN$ ( SUBFUNCTION 6 )N;D$; ASSIGN CHANNEL (ACHN$) DPB FORMAT:; #; WD. 00 -- DIC(207.),DPB SIZE (5.)E); WD. 01 -- SUBFUNCTION CODE (6),RESERVED ; WD. 02 -- LUN, TABLE MASKZ); WD. 03 -- ADDRESS OF FILE SPECIFICATION &; WD. 04 -- SIZE OF FILE SPECIFICATION;E7; ASSIGN CHANNEL DOES ALL OF THE PROCESSING OF THE FILEU:; SPECIFICATION THAT IS REQUIRED TO FIND THE ACTUAL DEVICE/; NAME AND THEN ASSIGNS THE LUN TO THAT DEVICE. ; ;E; PRMS$ ( SUBFUNCTION 7 ) ;I#; PARSE FOR RMS (PRMS$) DPB FORMAT: ;U$; WD. 00 -- DIC(207.),DPB SIZE (12.)%; WD. 01 -- SUBFUNCTION CODE (7), LUN( ; WD. 02 -- TABLE MASK, RESERVED%; WD. 03 -- ADDRESS OF PRIMARY STRING2"; WD. 04 -- SIZE OF PRIMARY STRING.; WD. 05 -- ADDRESS OF RESULTANT STRING BUFFER+; WD. 06 -- SIZE OF RESULTANT STRING BUFFERE<; WD. 07 -- ADDRESS OF WORD TO RECEIVE RESULTANT STRING SIZE"; WD. 08 -- ADDRESS OF PARSE BLOCK; WD. 09 -- SIZE OF PARSE BLOCKO%; WD. 10 -- ADDRESS OF DEFAULT STRINGF"; WD. 11 -- SIZE OF DEFAULT STRING;$;######## ADD DESCRIPTION; ;(; PFCS$ ( SUBFUNCTION 8 )1; #; PARSE FOR FCS (PFCS$) DPB FORMAT:-;A$; WD. 00 -- DIC(207.),DPB SIZE (12.)%; WD. 01 -- SUBFUNCTION CODE (8), LUNO ; WD. 02 -- TABLE MASK, RESERVED%; WD. 03 -- ADDRESS OF PRIMARY STRING6"; WD. 04 -- SIZE OF PRIMARY STRING.; WD. 05 -- ADDRESS OF RESULTANT STRING BUFFER+; WD. 06 -- SIZE OF RESULTANT STRING BUFFERB<; WD. 07 -- ADDRESS OF WORD TO RECEIVE RESULTANT STRING SIZE"; WD. 08 -- ADDRESS OF PARSE BLOCK; WD. 09 -- SIZE OF PARSE BLOCKA); WD. 10 -- ADDRESS OF DEFAULT NAME BLOCKT&; WD. 11 -- SIZE OF DEFAULT NAME BLOCK;O;######## ADD DESCRIPTION;. ; INPUTS:(;)8; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK*; R3=ADDRESS OF THE SECOND WORD IN THE DPB.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASKF;;D; TLOG$ ( SUBFUNCTION 9 )I;BJ; THE TRANSLATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEM TOH; SEARCH FOR THE SPECIFIED LOGICAL NAME IN THE LOGICAL NAME LOGICAL NAMEK; TABLES AND RETURN THE EQUIVALENCE NAME STRING TO A USER SPECIFIED BUFFER.L; THE TBMASK IS AN INHIBIT BITMASK SO THAT THE USER MAY SPECIFY WHICH TABLESJ; ARE NOT TO BE SEARCHED. SHOULD THE EQUIVALENCE NAME BUFFER BE TOO SMALL,L; THIS DIRECTIVE WILL RETURN AS MUCH OF THE STRING AS POSSIBLE. THE RETURNEDN; STRING LENGTH IS ALWAYS THE BYTE COUNT OF THE EQUIVALENCE NAME STRING RATHER<; THAN THE NUMBER OF CHARACTERS RETURNED TO THE USER BUFFER.;E,; TRANSLATE LOGICAL NAME (TLOG$) DPB FORMAT:;A$; WD. 00g fcDATADATADATADATADATADATADATA00 -- DIC(207.),DPB SIZE (10.)%; WD. 01 -- SUBFUNCTION CODE (1),MODEU; WD. 02 -- TBMASK, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERH.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFERTC; WD. 07 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAMEU<; WD. 08 -- ADDRESS OF WORD TO RECEIVE TABLE NUMBER AND MODE@; WD. 09 -- ADDRESS OF WORD TO RECEIVE STATUS FROM LOGICAL BLOCK;E;L; RLOG$ ( SUBFUNCTION 10. )-;IJ; THE RECURSIVE TRANSLATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THEM; SYSTEM TO SEARCH FOR THE SPECIFIED LOGICAL NAME IN THE LOGICAL NAME LOGICAL J; NAME TABLES AND RETRANSLATE THE EQUIVALENCE NAME STRING FURTHER UNTIL NOJ; MORE EQUIVALENCE NAMES MAY BE FOUND. AT THAT TIME THE FINAL EQUIVALENCE.; NAME IS RETURNED TO A USER SPECIFIED BUFFER.L; THE TBMASK IS AN INHIBIT BITMASK SO THAT THE USER MAY SPECIFY WHICH TABLESJ; ARE NOT TO BE SEARCHED. SHOULD THE EQUIVALENCE NAME BUFFER BE TOO SMALL,L; THIS DIRECTIVE WILL RETURN AS MUCH OF THE STRING AS POSSIBLE. THE RETURNEDN; STRING LENGTH IS ALWAYS THE BYTE COUNT OF THE EQUIVALENCE NAME STRING RATHER<; THAN THE NUMBER OF CHARACTERS RETURNED TO THE USER BUFFER.;E6; RECURSIVE TRANSLATE LOGICAL NAME (RLOG$) DPB FORMAT:; $; WD. 00 -- DIC(207.),DPB SIZE (10.)%; WD. 01 -- SUBFUNCTION CODE (9),MODE ; WD. 02 -- TBMASK, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERE.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFEROC; WD. 07 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAME <; WD. 08 -- ADDRESS OF WORD TO RECEIVE TABLE NUMBER AND MODE@; WD. 09 -- ADDRESS OF WORD TO RECEIVE STATUS FROM LOGICAL BLOCK;E;L; CLON$ ( SUBFUNCTION 11. )-;IG; THE CREATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEM TO-O; CREATE A RELATIONSHIP BETWEEN A SPECIFIED LOGICAL NAME STRING AND A SPECIFIED M; EQUIVALENCE NAME STRING. IF THE LOGICAL NAME STRING ALREADY EXISTS, THE NEW-(; DEFINITION WILL SUPERSEDE THE OLD ONE.;-); CREATE LOGICAL NAME (CLON$) DPB FORMAT:E;Q#; WD. 00 -- DIC(207.),DPB SIZE (7.)R'; WD. 01 -- SUBFUNCTION CODE (11.),MODE ; WD. 02 -- TABLE NUMBER,STATUSS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERG.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFERP;F; ; DLON$ ( SUBFUNCTION 12. )F; M; THE DELETE LOGICAL NAME DIRECTIVE SUBFUNCTION REMOVES THE SPECIFIED LOGICAL-H; NAME FROM THE LOGICAL NAME TABLE SPECIFIED. IF THE LOGICAL NAME IS NOTB; SPECIFIED, ALL LOGICAL NAMES IN THE SPECIFIED TABLE ARE REMOVED.; ); DELETE LOGICAL NAME (DLON$) DPB FORMAT:A; #; WD. 00 -- DIC(207.),DPB SIZE (5.)F'; WD. 01 -- SUBFUNCTION CODE (12.),MODE ; WD. 02 -- TABLE NUMBER, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFER;;L; TLON$ ( SUBFUNCTION 13. );HJ; THE TRANSLATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THE SYSTEM TOH; SEARCH FOR THE SPECIFIED LOGICAL NAME IN THE LOGICAL NAME LOGICAL NAMEK; TABLES AND RETURN THE EQUIVALENCE NAME STRING TO A USER SPECIFIED BUFFER.EL; THE TBMASK IS AN INHIBIT BITMASK SO THAT THE USER MAY SPECIFY WHICH TABLESJ; ARE NOT TO BE SEARCHED. SHOULD THE EQUIVALENCE NAME BUFFER BE TOO SMALL,L; THIS DIRECTIVE WILL RETURN AS MUCH OF THE STRING AS POSSIBLE. THE RETURNEDN; STRING LENGTH IS ALWAYS THE BYTE COUNT OF THE EQUIVALENCE NAME STRING RATHER<; THAN THE NUMBER OF CHARACTERS RETURNED TO THE USER BUFFER.;E,; TRANSLATE LOGICAL NAME (TLON$) DPB FORMAT:;A$; WD. 00 -- DIC(207.),DPB SIZE (10.)'; WD. 01 -- SUBFUNCTION CODE (13.),MODEF; WD. 02 -- TBMASK, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERU.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFERIC; WD. 07 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAMET<; WD. 08 -- ADDRESS OF WORD TO RECEIVE TABLE NUMBER 00 gffAND MODE@; WD. 09 -- ADDRESS OF WORD TO RECEIVE STATUS FROM LOGICAL BLOCK;(;N; RLON$ ( SUBFUNCTION 14. ) ;(J; THE RECURSIVE TRANSLATE LOGICAL NAME DIRECTIVE SUBFUNCTION INSTRUCTS THEM; SYSTEM TO SEARCH FOR THE SPECIFIED LOGICAL NAME IN THE LOGICAL NAME LOGICAL J; NAME TABLES AND RETRANSLATE THE EQUIVALENCE NAME STRING FURTHER UNTIL NOJ; MORE EQUIVALENCE NAMES MAY BE FOUND. AT THAT TIME THE FINAL EQUIVALENCE.; NAME IS RETURNED TO A USER SPECIFIED BUFFER.L; THE TBMASK IS AN INHIBIT BITMASK SO THAT THE USER MAY SPECIFY WHICH TABLESJ; ARE NOT TO BE SEARCHED. SHOULD THE EQUIVALENCE NAME BUFFER BE TOO SMALL,L; THIS DIRECTIVE WILL RETURN AS MUCH OF THE STRING AS POSSIBLE. THE RETURNEDN; STRING LENGTH IS ALWAYS THE BYTE COUNT OF THE EQUIVALENCE NAME STRING RATHER<; THAN THE NUMBER OF CHARACTERS RETURNED TO THE USER BUFFER.;E6; RECURSIVE TRANSLATE LOGICAL NAME (RLON$) DPB FORMAT:; $; WD. 00 -- DIC(207.),DPB SIZE (10.)'; WD. 01 -- SUBFUNCTION CODE (14.),MODEH; WD. 02 -- TBMASK, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERU.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFERSC; WD. 07 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAMEQ<; WD. 08 -- ADDRESS OF WORD TO RECEIVE TABLE NUMBER AND MODE@; WD. 09 -- ADDRESS OF WORD TO RECEIVE STATUS FROM LOGICAL BLOCK;( .IF DF L$$GCL!N$$DIRD .MCALL LNMDF$,LNMOD$E LNMDF$D1 LNMOD$ ;DEFINE ADDITIONAL LOGICAL NAME OFFSETSB MAP5=120000 MAP6=140000? LN$SIZ = 255. ;MAXIMUM SIZE OF LOGICAL AND EQUIVALENCE BUFFERS6 H$$HNM = 32. ;NUMBER OF HASH CELLS IN EACH HASH TABLE6 T$BLNM == 4 ;HIGHEST VALID LOGICAL NAME TABLE NUMBER; M$XLOG = 10. ;MAXIMUM RECURSION NUMBER FOR LOGICAL LOOKUPS-9 P$SSIZ = 9. ;DPB SIZE OF P/OS COMPATIBLE TLOG$ DIRECTIVE99 D$COM4 = 4 ;INDICATOR VALUE FOR THE 4TH DIRECTIVE COMMON(1 R$LOG = 10. ;SUBFUNCTION CODE FOR RLOG OPERATIOND1 R$LON = 14. ;SUBFUNCTION CODE FOR RLON OPERATIONL0 R$XBAS = 11. ;SUBFUNCTIONS BELOW THIS ARE XLOG$ GD$SIZ = 14 ;SIZE OF GDIR DPB7 GD$BUF = 4 ;SIZE OF EXTRA CPRBUF STORAGE AREA FOR GDIRF SD$SIZ = 12 ;SIZE OF SDIR DPB CL$SIZ = 16 ;SIZE OF CLOG DPB DL$SIZ = 12 ;SIZE OF DLOG DPB TL$SIZ = 24 ;SIZE OF TLOG DPB- .SBTTL ENTRY POINT FOR ALL ROUTINES IN DRLOG/;C;AO; REVERIFY DPB ADDRESS GIVEN THAT THE POINTER GOING INTO THE ROUTINES NO LONGER(%; POINTS PAST THE FUNCTION CODE WORD.O;P;T$DRLG1::( .IF DF C$$RLG ;IF REMOTE LOGICAL NAMES. CMPB #145.,-2(R3) ;WAS THIS AN ELP DIRECTIVE?7 BNE 5$ ;NOPE, IT WAS A REGULAR LOGICAL NAME DIRECTIVEF' MOV #$LNELP,-(SP) ;GET ELP ENTRY POINT$( BR 20$ ;AND GO OFF TO DO THE DIRECTIVE5$:O .ENDC ;C$$RLG. MOVB (R3),R0 ;GET THE FUNCTION CODE FROM DPB! CMPB R0,#$LNFHI ;IS IT TOO HIGH?  BHI 10$ ;IF HI, YES3 ASL R0 ;GET OFFSET INTO TABLE BY MULTIPLYING BY 4 ASL R0 ;* ADD #$LNSFT,R0 ;POINT INTO FUNCTION TABLE? MOV (R0)+,-(SP) ;GET THE COMPLETION ROUTINE ADDRESS FROM TABLEL. CMPB (R0)+,$DICSV+1 ;DOES THE DPB SIZE MATCH? BNE 10$ ;IF NE, NO .IF DF L$$GCL+ MOV $TKTCB,R1 ;GET THE CURRENT TCB ADDRESS-2 MOV T.UCB(R1),R1 ;GET THE CURRENT TI: OF THE TASK9 CALL $GTUSR ;SET UP THE USER LOGICAL HASH TABLE ADDRESSE .ENDC ;DF L$$GCLR> CMPB #D$COM4,(R0)+ ;DOES THIS FUNCTION LIVE IN ANOTHER DIRCOM# BEQ 20$ ;IF EQ, YES, SWITCH TO ITM) CALLR @(SP)+ ;PROCESS THE FUNCTION TYPER?10$: DRSTS D.RS99 ;RETURN DIRECTIVE STATUS -- DPB SIZE INVALIDNA20$: CALL $MPDC4 ;CALL THE ROUTINE IN THE OTHER DIRECTIVE COMMON 0 RETURN ;RETURN BACK TO DISPATCHER SUCCESFULLY .PAGE9 .SBTTL ACROB - ROUTINE TO VALIDATE USER BUFFER ADDRESSEST .ENABL LSB:;+;AM; THESE ROUTINES ADDRESS CHECK AND CALCULATE THE BIAS AND DISPLACEMENT (APR6)$; OF A SPECIFIED USER BUFFER.E;H ; INPUTS: /; R3 = THE ADDRESS OF THE TWO WORDS IN THE DPBI3; CONTAINING THE USER VIRTUAL ADDRESS AND THER&; BYTE COUNT SIZE OF THAT BUFFER;U;- ; OUTPUTS:;I(; R0 = THE BYTECOUNT OF THE USER BUFFER#; R1 = THE BIAS OF THE USER BUF00g fcDATADATADATADATADATADATADATAFERR0; R2 = THE APR6 DISPLACEMENT OF THE USER BUFFER ; R3 = R3+4; R4 = UNCHANGEDL;TH; AN ERROR CONDITION IN THIS ROUTINE CAUSES AN IMMEDIATE DIRECTIVE ERROR4; TRAP PREVENTING ANY RETURN TO THE CALLING ROUTINE.;-1ACROB: MOV #$ACHKB,-(SP) ;ADDRESS CHECK BUFFER RW ! BR 10$ ;GO TO COMMON PROCESSING 1ACRIB: MOV #$ACHRO,-(SP) ;ADDRESS CHECK BUFFER RON510$: MOV (R3)+,R0 ;GET THE ADDRESS OF THE USER BUFFER BEQ 20$ ;IF EQ, THERE IS NONEO! MOV (R3)+,R1 ;GET SIZE OF BUFFER # BEQ 30$ ;IF EQ, IT IS NONEXISTENT CMP R1,#LN$SIZ ;IS IT TOO LARGE BHI 30$ ;IF HI, YES ( CALL @(SP)+ ;CALL THE CHECKING ROUTINE# BCS 20$ ;IF CS, BUFFER IS INVALIDC8 CALL $RELOC ;SET UP THE APR BIAS AND OFFSET FOR BUFFER) MOV -2(R3),R0 ;SET UP THE SIZE OF BUFFERR RETURN '20$: DRSTS D.RS98 ;ADDRESS CHECK ERRORN'30$: DRSTS D.RS89 ;INVALID BUFFER SIZEC .DSABL LSB0 .ENDC ; DF L$$GCL!N$$DIRE .PAGE0 .SBTTL $LNFCL - LOGICAL NAME CREATION DIRECTIVE .IF DF L$$GCL .ENABL LSB ;+0; $LNFCL - ENTRY POINT FOR LOGICAL NAME CREATION;TJ; THIS ROUTINE IS ENTERED FROM THE DRLOG DISPATCH AREA WITH R3 POINTING TO; THE FOLLOWING DPB VALUES: ;A%; WD. 01 -- SUBFUNCTION CODE (0),MODES; WD. 02 -- TABLE NUMBER,STATUS3*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERN.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFER.;E$LNFCL::' .IF DF C$$RLG ; REMOTE LOGICAL SUPPORT .MCALL CPRDF$ CPRDF$ 1 BIT #F5.RLG,$FMSK5 ;ARE WE USING REMOTE LOGICAL?A BEQ 9$ ;IF EQ NO;E"; GET A REQUEST PACKET FROM CPRBUF;A& MOV 6(R3),R1 ;GET SIZE OF USER BUFFER BEQ 1$ ;NULL NOT ALLOWED! CMP R1,#LN$SIZ ;IS SIZE TOO BIG?- BLOS 2$ ;IF LOS NO/1$: DRSTS D.RS89 ;RETURN ILLEGAL BUFFER LENGTHD2$:-3 CMP 12(R3),#LN$SIZ ;IS EQUIVALENCE STRING TOO BIG?F BHI 1$ ;IF HI YESF6 ADD 12(R3),R1 ;INCLUDE ENOUGH SPACE FOR EQUIV. STRING2 ADD #,R1 ;ADD SIZE OF HEADER & DPB3 MOV R1,R4 ;SAVE SIZE OF REQUEST PACKET FOR CPSEN$ 0 ADD #77,R1 ;ROUND R1 TO NEAREST 32. WORD BLOCK ASH #-6,R1 ; MOV R3,R5 ;SAVE DPB POINTER)9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT START% CALL $CPALO ;GET BUFFER FROM CPRBUFO;$; FILL IN REQUEST PACKET;9# MOV R4,-(SP) ;SAVE SIZE OF REQUEST- MOV R0,-(SP) ;SAVE PACKET BIASE MOV R0,KISAR6 ;MAP PACKET$ MOV #MAP6,R1 ;GET ADDRESS OF HEADER;U; LOAD HEADER AREA;I+ MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUESTE CLRB H$ICNT(R1) ;NO ITEMS; ; LOAD PARAMETER AREAF;C! ADD #P$DPB,R1 ;POINT TO DPB AREAE$ MOV -2(R5),(R1)+ ;COPY DIC AND SIZE3 MOV (R5),(R1)+ ;COPY SUBFUNCTION CODE AND MODIFIER0' MOV 2(R5),(R1)+ ;TABLE NUMBER & STATUSL; MOV #,(R1)+ ;ADDRESS OF LOGICAL NAME BUFFERT& MOV 6(R5),(R1)+ ;SIZE OF LOGICAL NAMED MOV #,(R1) ;CALCULATE ADDRESS OF EQUIV STRING BUFFER/ ADD 6(R5),(R1)+ ;SKIP OVER LOGICAL NAME BUFFERE- MOV 12(R5),(R1)+ ;SIZE OF EQUIVALENCE STRING ;U; COPY LOGICAL NAME INTO PACKET;% MOV 4(R5),R0 ;USER ADDRESS OF BUFFER,/ MOV 6(R5),R1 ;SIZE OF BUFFER FOR ADDRESS CHECKI CALL $ACHKB ;CHECK ADDRESS BCS 8$ ;IS CS ERRORD/ CALL $RELOC ;GET SOURCE BIAS AND DISPLACEMENTL; ; R1 := BIAS; R2 -> APR6 DISPLACEMENTO;AA SUB #MAP6-MAP5,R2 ;MAKE SOURCE DISPLACEMENT AN APR5 DISPLACEMENTS MOV (SP),R3 ;GET DEST BIAS4 MOV #,R4 ;GET DEST DISPLACEMENT# MOV 6(R5),R0 ;GET SIZE OF TRANSFER,0 CALL $BLXIO ;TRANSFER LOGICAL NAME INTO BUFFER;L%; COPY EQUIVALENCE STRING INTO PACKETU; & MOV 10(R5),R0 ;USER ADDRESS OF BUFFER0 MOV 12(R5),R1 ;SIZE OF BUFFER FOR ADDRESS CHECK CALL $ACHKB ;CHECK ADDRESS BCS 8$ ;IS CS ERRORT/ CALL $RELOC ;GET SOURCE BIAS AND DISPLACEMENT A SUB #MAP6-MAP5,R2 ;MAKE SOURCE DISPLACEMENT AN APR5 DISPLACEMENTE MOV (SP),R3 ;GET DEST BIAS: MOV #,R4 ;CALCULATE DEST DISPLACEMENT, ADD 6(R5),R4 ;SKIP OVER LOGICAL NAME BUFFER$ MOV 12(R5),R0 ;GET SIZE OF TRANSFER6 CALL $BLXIO ;TRANSFER EQUIVALENCE STRING INTO BUFFER# MOV (SP)+00gff,R0 ;GET PACKET BIAS BACKA% MOV (SP)+,R4 ;GET PACKET LENGTH BACKO- CPSEN$ #SN$DIR,R0,R4 ;SEND REQUEST TO CPRAMEA( CALLR $CPDEA ;RELEASE THE CPRBUF SPACE; ; HANDLE ERRORSA;D!8$: MOV (SP)+,R0 ;GET PACKET BIAS; TST (SP)+ ;CLEAN OFF STACK CALL $CPDEA ;DEALLOCATE BUFFER DRSTS D.RS98 ;ADDRESS ERRORE9$:I .ENDC ; C$$RLGD5 MOV #$LGBUF,R4 ;GET POINTER TO START OF STORAGE AREA 5 MOV (R3)+,-(SP) ;STORE THE SUBFUNCTION CODE AND MODEX6 MOVB (R3),(SP) ;MOVE THE TABLE NUMBER TO STORAGE AREA- CMPB #T$BLNM,(SP) ;IS THE TABLE NUMBER VALIDT BLO 50$ ;IF LO, NO, EXIT; G; VERIFY THE DPB ARGUMENTS AND SET UP A DESCRIPTOR BLOCK TO PASS TO THEB:; ACTION ROUTINE THAT ACTUALLY CREATES AND PLACES THE LNB.;T4 MOV (SP)+,(R4)+ ;MOVE IN THE TABLE AND BLOCK NUMBER( MOV $TKTCB,R2 ;GET THE CURRENT TASK TCB. MOV T.UCB(R2),R5 ;GET THE CURRENT TI: ADDRESS5 TSTB (R3) ;SEE IF THIS IS A SYSTEM LOGICAL CREATION) BNE 10$ ;IF NE, NO/ BIT #T3.PRV,T.ST3(R2); IS THE TASK PRIVILEGED? * BEQ 60$ ;IF EQ, NO, DON'T ALLOW CREATION/10$: CMPB #LT.TSK,(R3) ;IS THIS A TASK CREATION ( BEQ 20$ ;IF EQ, YES, LEAVE TCB ADDRESS+ MOV R5,R2 ;GET UCB ADDRESS INSTEAD OF TCBC720$: CMPB #LT.GRP,(R3) ;IS THIS A GROUP TABLE CREATION?T- BNE 30$ ;IF NE, NO, LEAVE GROUP ENTRY BLANK = CALL GTUIC ;GET THE CURRENT TASKS PROTECTION UIC GROUP CODE): MOVB R1,(R3) ;FILL IN THE GROUP CODE FROM PROTECTION UIC130$: SWAB (R3) ;SWITCH THE STATUS AND GROUP BYTE9 MOV (R3)+,(R4)+ ;MOVE THE STATUS AND GROUP TO DESCRIPTOR 3 MOV R2,(R4)+ ;MOVE TCB/UCB ADDRESS INTO DESCRIPTORR0 CALL ACRIB ;VALIDATE IT IN THE USER TASK IMAGE0 CALL PSCNV ;CONVERT TO P/OS STYLE IF NECESSARY BCS 80$ ;IF CS, INVALID DEVICE3 MOV R0,(R4)+ ;MOVE IN THE SIZE OF THE LOGICAL NAMEI1 MOV R1,(R4)+ ;MOVE IN THE APR BIAS OF THE BUFFERE9 MOV R2,(R4)+ ;MOVE IN THE KISAR6 BIASED OFFSET OF BUFFER36 CALL ACRIB ;VALIDATE EQUIVALENCE NAME BUFFER ADDRESS7 MOV R0,(R4)+ ;MOVE IN THE SIZE OF THE EQUIVALENCE NAME41 MOV R1,(R4)+ ;MOVE IN THE APR BIAS OF THE BUFFERR9 MOV R2,(R4)+ ;MOVE IN THE KISAR6 BIASED OFFSET OF BUFFER 9 MOV #$LGBUF,R5 ;POINT TO START OF DESCRIPTOR BLOCK AGAIN ;OI; AT THIS POINT A DESCRIPTOR BLOCK WITH ALL VALIDATED PARAMETERS HAS BEEN >; CREATED AND POINTED TO BY R5. THIS BLOCK HAS THE STRUCTURE:;A1; ----------------------------------------------- 1; | BLOCK NUMBER | TABLE NUMBER |U1; -----------------------------------------------N1; | GROUP NUMBER | STATUS BYTE |M1; -----------------------------------------------M1; | TCB / UCB ADDRESS |L1; -----------------------------------------------1; | SIZE OF LOGICAL NAME IN BUFFER |A1; ----------------------------------------------- 1; | 32 WD APR ADDRESS OF START OF LOGICAL |-1; ----------------------------------------------- 1; | APR6 BIASED OFFSET TO START OF LOGICAL |-1; ----------------------------------------------- 1; | SIZE OF EQUIVALENCE NAME IN BUFFER |-1; ----------------------------------------------- 1; | 32 WD APR ADDRESS OF START OF EQUIVALENCE |-1; ----------------------------------------------- 1; | APR6 BIASED OFFSET TO START OF EQUIVALENCE|-1; ----------------------------------------------- ; 5 CALL $CRLOG ;CREATE AND INSERT A LOGICAL NAME BLOCK-7 BCS 70$ ;IF C BIT SET, AN ALLOCATION FAILURE OCCURREDO2 TST R1 ;CHECK FOR SUPERCESSION OF PREVIOUS ENTRY% BNE 40$ ;IF NE, WE HAD SUPERCESSIONI# RETURN ;OTHERWISE, SIMPLY RETURN ;-940$: DRSTS D.RSP3 ;RETURN A STATUS OF LOGICAL SUPERCEDED (50$: DRSTS D.RS20 ;INVALID TABLE NUMBER'60$: DRSTS D.RS16 ;PRIVILEGE VIOLATION-470$: DRSTS D.RS1 ;SECONDARY POOL ALLOCATION FAILURE280$: DRSTS D.RS92 ;IE.IDU - INVALID DEVICE STATUS .PAGE0 .SBTTL $LNDEL - LOGICAL NAME DELETION DIRECTIVE;+0; $LNDEL - ENTRY POINT FOR LOGICAL NAME DELETION;OM; THE ROUTINE IS ENTERED FROM THE DRLOG DISPATCH AREA WITH R3 POINTING TO THE ; FOLLOWING DPB ENTRIES:; %; WD. 01 -- SUBFUNCTION CODE (2),MODED ; WD. 02 -- TABLE NU00%g fcDATADATADATADATADATADATADATAMBER, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFERV;G;-$LNDEL::' .IF DF C$$RLG ; REMOTE LOGICAL SUPPORTN1 BIT #F5.RLG,$FMSK5 ;ARE WE USING REMOTE LOGICAL?  BNE 100$ ;IF NE YEST% JMP 109$ ;PERFORM NORMAL PROCESSINGI100$:+; "; GET A REQUEST PACKET FROM CPRBUF;E& MOV 6(R3),R1 ;GET SIZE OF USER BUFFER! CMP R1,#LN$SIZ ;IS IT TOO LARGE?O BLOS 105$ ;IF LO OR SAME NO # DRSTS D.RS89 ;INVALID BUFFER SIZE 105$:)2 ADD #,R1 ;ADD SIZE OF HEADER & DPB3 MOV R1,R4 ;SAVE SIZE OF REQUEST PACKET FOR CPSEN$ 0 ADD #77,R1 ;ROUND R1 TO NEAREST 32. WORD BLOCK ASH #-6,R1 ;9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT STARTE MOV R3,R5 ;SAVE DPB POINTERE% CALL $CPALO ;GET BUFFER FROM CPRBUFN;+; FILL IN REQUEST PACKET AND SEND TO CPRAMEF;E# MOV R4,-(SP) ;SAVE SIZE OF REQUESTF MOV R0,-(SP) ;SAVE PACKET BIASR MOV R0,KISAR6 ;MAP PACKET$ MOV #MAP6,R1 ;GET ADDRESS OF HEADER+ MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUESTI CLRB H$ICNT(R1) ;NO ITEMS! ADD #P$DPB,R1 ;POINT TO DPB AREAC$ MOV -2(R5),(R1)+ ;COPY DIC AND SIZE3 MOV (R5),(R1)+ ;COPY SUBFUNCTION CODE AND MODIFIERM# MOV 2(R5),(R1)+ ;COPY TABLE NUMBERR! TST 4(R5) ;DELETE ALL LOGICALS?C BNE 106$ ;NO. CLR (R1)+ ;NO ADDRESS OF LOGICAL NAME BUFFER CLR (R1)+" BR 108$ ;DON'T COPY LOGICAL NAME106$: ; MOV #,(R1)+ ;ADDRESS OF LOGICAL NAME BUFFER;- MOV 6(R5),(R1)+ ;SIZE OF LOGICAL NAME BUFFERR;; COPY LOGICAL NAME INTO PACKETV;E% MOV 4(R5),R0 ;USER ADDRESS OF BUFFERA/ MOV 6(R5),R1 ;SIZE OF BUFFER FOR ADDRESS CHECK) CALL $ACHKB ;CHECK ADDRESS BCS 8$ ;IS CS ERRORO/ CALL $RELOC ;GET SOURCE BIAS AND DISPLACEMENTN;E ; R1 := BIAS; R2 -> APR6 DISPLACEMENT;EA SUB #MAP6-MAP5,R2 ;MAKE SOURCE DISPLACEMENT AN APR5 DISPLACEMENT1 MOV (SP),R3 ;GET DEST BIAS4 MOV #,R4 ;GET DEST DISPLACEMENT# MOV 6(R5),R0 ;GET SIZE OF TRANSFER(0 CALL $BLXIO ;TRANSFER LOGICAL NAME INTO BUFFER108$:M# MOV (SP)+,R0 ;GET PACKET BIAS BACKE% MOV (SP)+,R4 ;GET PACKET LENGTH BACKZ- CPSEN$ #SN$DIR,R0,R4 ;SEND REQUEST TO CPRAMEE! CALLR $CPDEA ;DEALLOCATE BUFFER109$:R .ENDC ; C$$RLG ;SL; CREATE A DESCRIPTOR BLOCK TO SEARCH THE APPROPRIATE TABLE FOR ALL LOGICALSJ; OR FOR A SPECIFIC ONE. THE DESCRIPTOR IS A FOUR WORD BLOCK BEGINNING ATK; LOCATION $TEMP0 IN SYSCM AND CONTAINS THE APR BIAS AND OFFSET AND SIZE OF)J; A SPECIFIC LOGICAL (OR ZEROES IF ALL) AND THE UCB ADDRESS TO MATCH (TCB,; IF TASK LOGICAL DELETE).;C= MOV #$TONYL,R5 ;GET ADDRESS OF DESCRIPTOR BLOCK TO BE FILLEDN4 MOV (R3)+,-(SP) ;STORE THE MODE VALUE FOR LATER USE; 3; GET THE APPROPRIATE UCB (OR TCB, IF TASK LOGICAL) ;A MOV $TKTCB,R2 ;GET TASK TCB6 MOV T.UCB(R2),R4 ;GET THE ASSOCIATED TI: FOR THE TASK- CMPB #T$BLNM,(R3) ;IS THE TABLE NUMBER VALID  BLO 50$ ;IF LO, NO, EXIT* TSTB (R3) ;IS THIS A SYSTEM TABLE DELETE BNE 110$ ;IF NE, NO C BIT #T3.PRV,T.ST3(R2); IS THE TASK PRIVILEGED TO DELETE SYSTEM LOG,3 BEQ 60$ ;IF EQ, NO, EXIT WITH PRIVILEGE VIOLATIONT4110$: CMPB #LT.TSK,(R3) ;IS THIS A TASK TABLE DELETE. BEQ 120$ ;IF EQ, YES, KEEP TCB IN DESCRIPTOR MOV R4,R2 ;GET UCB ADDRESS8120$: MOV R2,-(R5) ;MOVE TCB/UCB ADDRESS INTO DESCRIPTOR;VH; PICK UP THE APPROPRIATE TABLE NUMBER AND BLOCK IDENTIFIER FROM THE DPB;E> MOVB (R3)+,(SP) ;MOVE THE TABLE NUMBER INTO STORAGE WITH MODE= MOV (SP)+,-(R5) ;GET THE TABLE AND BLOCK NUMBER FROM STORAGEP0 INC R3 ;POINT TO THE BUFFER ADDRESS IN THE DPB; H; CHECK FOR A SPECIFIC LOGICAL DELETION OR AN ENTIRE TABLE BY LOOKING AT); THE BUFFER ADDRESS FOR THE LOGICAL NAMEQ;0( TST (R3) ;CHECK FOR A SPECIFIC LOGICAL BNE 130$ ;IF NE, THERE IS ONE ; D; ALL LOGICALS ARE TO BE DELETED. LEAVE THE BUFFER DESCRIPTORS ZERO;I# CLR -(R5) ;CLEAR THE LOGICAL SIZE - CLR -(R5) ;CLEAR THE APR BIAS TO THE BUFFERB+ CLR -(R5) ;CLEAR THE OFFSET TO THE STRING- BR 140$ ;JOIN COMMON CODE ;BK; A SPECIFIC LOGICAL IS GIVEN. VALIDATE THE USER BUFFER AND SIZE AND PLACEC; THEM IN THE DESCRI00-gffPTOR BLOCK. ;A8130$: CALL ACRIB ;ADDRESS CHECK THE USER LOGICAL BUFFER0 CALL PSCNV ;CONVERT TO P/OS STYLE IF NECESSARY! BCS 170$ ;IF CS, INVALID DEVICEE6 MOV R2,-(R5) ;FILL IN APR6 OFFSET TO START OF LOGICAL) MOV R1,-(R5) ;FILL IN APR BIAS OF BUFFER / MOV R0,-(R5) ;FILL IN BYTE COUNT IN DESCRIPTORA;BI; CHECK THE DESCRIPTOR FOR COMPLETE OR SPECIFIC DELETE. IF SPECIFIC, THE F; LOGICAL MUST BE HASHED, SEARCHED FOR IN THE TABLE, AND THEN DELETED.J; IF THIS IS A COMPLETE DELETE, CALL $LNDAL TO ELIMINATE EVERYTHING IN THE ; HASH TABLE.E;C:140$: MOV R5,R0 ;SET UP DESCRIPTOR ADDRESS FOR PROCESSING6 CALL $DELOG ;DELETE THE APPROPRIATE LOGICAL OR TABLE( BCC 150$ ;IF CC, SUCCESSFUL COMPLETION8 TST R3 ;CHECK WHETHER NOT FOUND OR PRIVILEGE VIOLATION2 BNE 60$ ;IF NE, PRIVILEGE VIOLATION ON FOUND LNB# BR 160$ ;IF EQ, LOGICAL NOT FOUND 150$: RETURN+160$: DRSTS D.RS21 ;LOGICAL NAME NOT FOUNDH3170$: DRSTS D.RS92 ;IE.IDU - INVALID DEVICE STATUSF .DSABL LSBL .PAGE3 .SBTTL $LNFTL - LOGICAL NAME TRANSLATION DIRECTIVEH;+B; $LNFTL - ENTRY POINT FOR LOGICAL NAME DIRECTIVE TRANSLATION CODE;-K; THIS DIRECTIVE SEARCHES EACH OF THE HIERARCHICAL TABLES FOR THE SPECIFIEDSL; LOGICAL UNLESS AN INHIBIT MASK BIT IS SET TO PREVENT THAT TABLE FROM BEING ; LOOKED AT.;VM; THE ROUTINE IS ENTERED FROM THE DRLOG DISPATCH AREA WITH R3 POINTING TO THEN; FOLLOWING DPB ENTRIES:;C%; WD. 01 -- SUBFUNCTION CODE (1),MODE ; WD. 02 -- TBMASK, STATUS*; WD. 03 -- ADDRESS OF LOGICAL NAME BUFFER'; WD. 04 -- SIZE OF LOGICAL NAME BUFFER.; WD. 05 -- ADDRESS OF EQUIVALENCE NAME BUFFER+; WD. 06 -- SIZE OF EQUIVALENCE NAME BUFFERSC; WD. 07 -- ADDRESS OF WORD TO RECEIVE SIZE OF RETURNED EQUIV. NAME <; WD. 08 -- ADDRESS OF WORD TO RECEIVE TABLE NUMBER AND MODE;GJ; THE FOLLOWING WORD IS NOT PRESENT IF THIS ROUTINE IS ENTERED VIA A TLOG$; DIRECTIVE FROM A P/OS SYSTEM.N;P@; WD. 09 -- ADDRESS OF WORD TO RECEIVE STATUS FROM LOGICAL BLOCK;B$LNFTL::' .IF DF C$$RLG ; REMOTE LOGICAL SUPPORTF1 BIT #F5.RLG,$FMSK5 ;ARE WE USING REMOTE LOGICAL?5 BNE 1$ ;IF NE YESL$ JMP 11$ ;PERFORM NORMAL PROCESSING1$:A;C"; GET A REQUEST PACKET FROM CPRBUF;W' MOV 6(R3),R1 ;GET SIZE OF LOGICAL NAMEM BEQ 2$ ;IF ZERO ERRORF! CMP R1,#LN$SIZ ;IS IT TOO LARGE?E BLOS 3$ ;IF LO OR SAME NO &2$: DRSTS D.RS89 ;INVALID BUFFER SIZE3$:T3 CMP 12(R3),#LN$SIZ ;IS EQUIVALENCE STRING TOO BIG?- BHI 2$ ;IF HI YESR6 ADD 12(R3),R1 ;INCLUDE ENOUGH SPACE FOR EQUIV. STRING;$1; INCREASE ALLOCATION TO ALLOW FOR THE FOLLOWING;K; H$SIZE HEADERE ; TL$SIZ DPB ; 10 TASK DESTINATION ADDRESSES;; EQUIV STRING BUFFERG; RETURNED SIZE ; TABLE # & MODE; LOGICAL STATUS BITS ; 6 RETURNED PARAMETERSM; RETURNED SIZE ; TABLE # & MODE; LOGICAL STATUS BITS;OTMP = H$SIZE+TL$SIZ+10+6 ADD #TMP,R13 MOV R1,R4 ;SAVE SIZE OF REQUEST PACKET FOR CPSEN$ 0 ADD #77,R1 ;ROUND R1 TO NEAREST 32. WORD BLOCK ASH #-6,R1 ;9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT STARTL MOV R3,R5 ;SAVE DPB POINTERI% CALL $CPALO ;GET BUFFER FROM CPRBUF ;T+; FILL IN REQUEST PACKET AND SEND TO CPRAMEB;E# MOV R4,-(SP) ;SAVE SIZE OF REQUEST  MOV R0,-(SP) ;SAVE PACKET BIAS  MOV R0,KISAR6 ;MAP PACKET$ MOV #MAP6,R1 ;GET ADDRESS OF HEADER+ MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUEST0 CLRB H$ICNT(R1) ;NO ITEMS; ; FILL IN DPBE;S! ADD #P$DPB,R1 ;POINT TO DPB AREA;$ MOV -2(R5),(R1)+ ;COPY DIC AND SIZE3 MOV (R5),(R1)+ ;COPY SUBFUNCTION CODE AND MODIFIER * MOV 2(R5),(R1)+ ;COPY TABLE MASK & STATUS/ MOV #TMP,(R1)+ ;ADDRESS OF LOGICAL NAME BUFFER- MOV 6(R5),(R1)+ ;SIZE OF LOGICAL NAME BUFFERE5 MOV #TMP,(R1) ;CALCULATE ADDRESS OF EQUIV STRING BUFV/ ADD 6(R5),(R1)+ ;SKIP OVER LOGICAL NAME BUFFERV- MOV 12(R5),(R1)+ ;SIZE OF EQUIVALENCE STRINGI2 MOV #TMP-6,(R1)+ ;ADDRESS OF RETURNED SIZE BUFFER3 MOV #TMP-4,(R1)+ ;ADDRESS OF TABLE # & MODE BUFFER 8 MOV #TMP-2,(R1)+ ;ADDRESS OF LOGICAL STATUS BITS BUFFER;,E; FILL IN TASK ADDRESSES (TO BE USED AFTER CPRAME COMPLETES FUNCTION)E;S9 M005g fcDATADATADATADATADATADATADATAOV 10(R5),(R1)+ ;STORE TASK ADDRESS OF EQUIV STRING BUFE: MOV 14(R5),(R1)+ ;STORE TASK ADDRESS OF RETURNED SIZE BUF7 MOV 16(R5),(R1)+ ;STORE TASK ADDRESS OF TABLE # & MODER; MOV 20(R5),(R1) ;STORE TASK ADDRESS OF LOGICAL STATUS BITSS; ; COPY LOGICAL NAME INTO PACKETM;,% MOV 4(R5),R0 ;USER ADDRESS OF BUFFER/ MOV 6(R5),R1 ;SIZE OF BUFFER FOR ADDRESS CHECKE CALL $ACHKB ;CHECK ADDRESS BCS 10$ ;IS CS ERROR/ CALL $RELOC ;GET SOURCE BIAS AND DISPLACEMENTT;C ; R1 := BIAS; R2 -> APR6 DISPLACEMENT5;RA SUB #MAP6-MAP5,R2 ;MAKE SOURCE DISPLACEMENT AN APR5 DISPLACEMENTO MOV (SP),R3 ;GET DEST BIAS( MOV #MAP6+TMP,R4 ;GET DEST DISPLACEMENT# MOV 6(R5),R0 ;GET SIZE OF TRANSFERR0 CALL $BLXIO ;TRANSFER LOGICAL NAME INTO BUFFER# MOV (SP)+,R0 ;GET PACKET BIAS BACK% MOV (SP)+,R4 ;GET PACKET LENGTH BACK- CPSEN$ #SN$DIR,R0,R4 ;SEND REQUEST TO CPRAME;L; GET RESPONSE PACKETS;B MOV R0,-(SP) ;SAVE PACKET BIASL MOV R0,KISAR6 ;MAP PACKET/ CMP #IS.SUC,MAP6+H$STAT ;WAS SUCCESS RETURNED?M BEQ 4$ ;IF EQ YESM5 CMP #IE.RBS,MAP6+H$STAT ;WAS IT JUST A SIZE PROBLEM? BNE 5$ ;IF NE FATAL ERROR4$:#DPB = MAP6+P$DPBTASK = DPB+TL$SIZMTEMP = TASK+10;Z!; TRANSFER EQUIV STRING INTO TASKS; + MOV TASK,R0 ;TASK ADDRESS OF EQUIV STRINGT' MOV DPB+14,R1 ;SIZE OF BUFFER FROM DPBC CALL $ACHKB ;DO ADDRESS CHECKI BCS 9$ ;IF CS ERRORO, CALL $RELOC ;GET BIAS AND OFFSET OF BUFFER;( ; R1 := BIAS; R2 -> APR6 DISPLACEMENTA;A' MOV R1,R3 ;SET UP DEST BIAS FOR BLXIOC% MOV R2,R4 ;SET UP DEST DISPLACEMENTC* MOV (SP),R1 ;SET UP SOURCE BIAS FOR APR5- MOV #MAP5+TMP,R2 ;SET UP SOURCE DISPLACEMENTP* ADD DPB+10,R2 ;SKIP OVER LOGICAL NAME BUF MOV TEMP,R0 ;GET RETURNED SIZE- CALL $BLXIO ;RETURN EQUIVALENCE NAME STRINGF;U"; TRANSFER OTHER BUFFERS INTO TASK;F) MOV #TASK+2,R3 ;ADDRESS OF OTHER BUFFERSC# MOV TEMP,R4 ;SIZE OF EQUIV STRINGL CALL 6$ ;MOVE TO TASKO MOV TEMP+2,R4 ;TABLE # & MODE CALL 6$ ;MOVE TO TASK# MOV TEMP+4,R4 ;LOGICAL STATUS BITSC CALL 6$ ;MOVE TO TASKT S&5$: MOV (SP)+,R0 ;GET BUFFER BIAS BACK! CALLR $CPDEA ;DEALLOCATE BUFFERS;UJ; ROUTINE TO VERIFY THE EXISTENCE OF AN OPTIONAL WORD, ADDRESS CHECK IT IFI; IT IS THERE, AND PLACE THE VALUE IN R4 IN THE LOCATION SPECIFIED IN THEU; NEXT WORD IN THE DPB (R3).;A.6$: MOV (R3)+,R0 ;SEE IF NEXT ENTRY IS DEFINED BEQ 8$ ;IF EQ, NO, EXITF- MOV #7$,-(SP) ;SPECIFY $SGFIN RETURN ADDRESST CALL $SGFIN ;INHIBIT TRAPS- MOV R4,-(SP) ;GET VALUE TO PLACE IN LOCATION & MTPD (R0) ;PLACE VALUE INTO LOCATION RETURN ;RETURN FROM $SGFINR7$: % ;CARRY-BIT INDICATES STATUS [TBS]S 8$: RETURN; ; HANDLE ERRORSS;C&9$: MOV (SP)+,R0 ;GET BUFFER BIAS BACK CALL $CPDEA ;DEALLOCATE BUFFER# DRSTS D.RS98 ;ADDRESS CHECK ERRORI"10$: MOV (SP)+,R0 ;GET PACKET BIAS TST (SP)+ ;CLEAN OFF STACK CALL $CPDEA ;DEALLOCATE BUFFER DRSTS D.RS98 ;ADDRESS ERROR)11$: .ENDC ; C$$RLG ;SJ; A DESCRIPTOR BLOCK IS SET UP TO PASS TO THE TABLE LOOKUP ROUTINES. THISM; BLOCK GETS THE MODIFIER VALUE FROM THE DPB DIRECTLY. THE USER LOGICAL NAME$N; BUFFER IS ADDRESS CHECKED (FOR READ-ONLY ACCESS) AND THE APR BIAS AND OFFSETN; TO THE START OF THE LOGICAL STRING IS PLACED IN THE DESCRIPTOR. THE SIZE OFJ; THE INDICATED STRING IS ALSO PLACED IN THE BLOCK. R0 WILL POINT TO THIS+; BLOCK ACROSS ALL CALLS IN THIS DIRECTIVE.L;T0 MOV #$TONYL,R5 ;GET POINTER TO DESCRIPTOR BLOCK7 MOV $TKTCB,-(R5) ;GET THE CURRENT TCB FOR FIRST LOOKUPA# MOV (R5),R0 ;SAVE THE TCB ADDRESSS9 MOV (R3)+,-(R5) ;MOVE THE MODIFIER INTO DESCRIPTOR BLOCKH= MOV (R3)+,$TONYL ;STORE THE TABLE INHIBIT MASK FOR LATER USEY. BIT #1,$TONYL ;SEE IF TASK TABLE IS INHIBITED0 BEQ 12$ ;IF EQ, NO, KEEP TCB ADDRESS IN PACKET: MOV T.UCB(R0),2(R5) ;MOVE THE UCB ADDRESS INTO THE PACKET;E,; ADDRESS CHECK THE USER LOGICAL NAME BUFFER;L<12$: CALL ACRIB ;ADDRESS CHECK THE USER LOGICAL NAME BUFFER0 CALL PSCNV ;CONVERT TO P/OS STYLE IF NECESSARY! BCS 120$ ;IF CS, INVALID DEVICE56 MOV R3,-(SP) ;STORE THE CURRENT DPB POINTER FOR LAT00=gffER5 MOV R2,-(R5) ;GET THE APR6 OFFSET TO START OF STRINGO1 MOV R1,-(R5) ;GET THE APR BIAS TO LOGICAL STRINGT= MOV R0,-(R5) ;GET THE SIZE OF THE LOGICAL NAME IN DESCRIPTORP) MOV R5,R0 ;POINT R0 TO DESCRIPTOR START);O=; CALL THE ROUTINE TO DO THE LOOKUP IN THE APPROPRIATE TABLESR;G8 CMPB #R$LOG,$DICSV+2 ;IS THIS REALLY AN RLOG$ DIRECTIVE1 BEQ 20$ ;IF EQ, YES, SEARCH RECURSIVELY FOR LNBP8 CMPB #R$LON,$DICSV+2 ;IS THIS REALLY AN RLOG$ DIRECTIVE1 BEQ 20$ ;IF EQ, YES, SEARCH RECURSIVELY FOR LNBL;RH; FOR A TLOG$ DIRECTIVE, ONLY LOOK FOR THE SPECIFIED LOGICAL NAME IN THE'; TOP LEVELS OF THE LOGICAL NAME TABLESR;(9 CALL $TBSRC ;SEARCH ALL HIERARCHICAL TABLES FOR LOGICALR( BCS 100$ ;IF CS, NO LOGICAL NAME FOUND BR 40$ ;JOIN COMMON CODE BELOW;NJ; FOR AN RLOG$ DIRECTIVE, LOOK THROUGH THE LOGICAL NAME TABLES RECURSIVELYE; FOR THE FINAL EQUIVALENCE NAME. ANY SPECIFIED INHIBIT MASK WILL BER+; PROPAGATED THROUGH ALL RECURSIVE LOOKUPS.I;820$: CLR R3 ;CALL ITERATIVE ROUTINE IN EXACT MATCH MODE0 CALL $LGRCS ;RECURSIVELY LOOK FOR LOGICAL NAME* BCS 100$ ;IF CS, RECURSIVE LIMIT WAS HIT" MOV $LSTLG,R3 ;GET POINTER TO LNB# BEQ 100$ ;IF EQ, THERE WASN'T ONE ;IM; NOW THAT THE LOGICAL NAME HAS BEEN FOUND, THE APR BIAS TO THE LNB IS STOREDWK; FOR LATER USE AND THE USER EQUIVALENCE NAME BUFFER IS ADDRESSED CHECK FOREK; READ/WRITE ACCESS. IF IS VALID, THE SOURCE AND DESTINATION REGISTERS ARE L; SET UP FOR A $BLXIO CALL TO PLACE THE EQUIVALENCE NAME IN THE USER BUFFER.;I840$: MOV R3,$TONYL ;STORE THE LNB APR BIAS FOR LATER USE/ MOV (SP)+,R3 ;RESTORE THE POINTER INTO THE DPBT: CALL ACROB ;ADDRESS CHECK RW THE USER EQUIVALENCE BUFFER1 MOV R3,-(SP) ;STORE THE POINTER TO THE DPB AGAINN3 MOV R1,R3 ;SET UP DESTINATION APR BIAS FOR $BLXIOW5 MOV R2,R4 ;SET UP APR6 OFFSET VALUE FOR DESTINATIONI% MOV $TONYL,KISAR6 ;MAP THE FOUND LNBC;.M; THE NUMBER OF BYTES TO PASS THROUGH $BLXIO IS DETERMINED BY THE SIZE OF THE I; USER BUFFER. IF IT IS LARGE ENOUGH TO HOLD THE ENTIRE STRING, THE SIZENO; GIVEN IN THE LOGICAL BLOCK WILL BE PASSED. IF THE BUFFER ISN'T LARGE ENOUGH, O; ONLY AS MUCH AS IT CAN HOLD WILL BE PASSED. IN EITHER CASE, THE VALUE PASSEDPJ; IN THE USER SIZE WORD (RSIZE) WILL BE THE ACTUAL SIZE OF THE EQUIVALENCE; STRING;IB CMPB MAP6+L.NENS,R0 ;SEE IF THE EQUIVALENCE SIZE IS > BUFFER SIZE5 BHIS 50$ ;IT IS, ONLY RETURN USER BUFFER SIZE WORTHE CLR R0 ;REMOVE OLD VALUE< BISB MAP6+L.NENS,R0 ;IT ISN'T, ONLY RETURN EQUIVALENCE SIZE750$: CLR R2 ;INITIALIZE THE POINTER TO THE EQUIVALENCET' BISB MAP6+L.NLNS,R2 ;STRING FOR $BLXIOB ADD #MAP5+L.NNAM,R2 ;: MOV KISAR6,R1 ;GET THE APR BIAS TO START OF SOURCE STRING;S/; INITIATE THE DATA MOVEMENT TO THE USER BUFFERI; 9 CALL $BLXIO ;MOVE THE EQUIVALENCE STRING TO USER BUFFERC; K; THE REMAINDER OF THE WORK TO DO IS FILLING IN THE USER OPTIONAL WORDS FORIK; THE SIZE OF THE FOUND EQUIVALENCE STRING, THE TABLE NUMBER AND MOD OF THE6A; FOUND LNB, AND THE STATUS BITS TAKEN FROM IT. IF A WORD IS NOTNI; DEFINED, THAT PARTICULAR DATA WILL NOT BE PASSED BACK TO THE USER TASK.$;I& MOV (SP)+,R3 ;RESTORE THE DPB POINTER;;,; PASS BACK THE EQUIVALENCE NAME STRING SIZE; 6 CLR R4 ;GET VALUE FOR THE EQUIVALENCE NAME SIZE WORD BISB MAP6+L.NENS,R4 ;% CALL 90$ ;PLACE IT IN THE USER WORDH;E:; PASS BACK THE TABLE NUMBER AND MOD OF FOUND LOGICAL NAME; @ MOV MAP6+L.NTBL,R4 ;GET VALUE FOR USER WORD FOR TABLE # AND MOD% CALL 90$ ;PLACE IT IN THE USER WORDS;UI; PASS BACK THE STATUS BITS FOUND FOR THE LOGICAL NAME. THIS OPERATION ISI<; ELIMINATED IF THE DIRECTIVE WAS ISSUED FROM A P/OS SYSTEM.;O4 CMPB #P$SSIZ,$DICSV+1;IS THE DPB FROM A P/OS SYSTEM1 BEQ 95$ ;IF EQ, YES, SKIP THE STATUS WORD CHECKI' CLR R4 ;GET VALUE FOR THE STATUS WORD4 BISB MAP6+L.NSTS,R4 ;;+J; ROUTINE TO VERIFY THE EXISTENCE OF AN OPTIONAL WORD, ADDRESS CHECK IT IFI; IT IS THERE, AND PLACE THE VALUE IN R4 IN THE LOCATION SPECIFIED IN THE ; NEXT WORD IN THE DPB (R3).;-/90$: MOV (R3)+,R0 ;SEE IF NEXT ENTRY IS DEFINEDI BEQ 95$ ;IF 00Eg fcDATADATADATADATADATADATADATAEQ, NO, EXIT, MOV #2,R1 ;SET UP SIZE OF BUFFER TO VERIFY: CALL $ACHCK ;ADDRESS CHECK THE BUFFER RW (WORD BOUNDARY)/ BCS 110$ ;IF CS, ADDRESS CHECK ERROR OCCURREDT- MOV R4,-(SP) ;GET VALUE TO PLACE IN LOCATION ' MTPD$ (R0) ;PLACE VALUE INTO LOCATION 95$: RETURN +100$: DRSTS D.RS21 ;LOGICAL NAME NOT FOUNDD2110$: DRSTS D.RS98 ;ADDRESS CHECK ERROR ON BUFFER3120$: DRSTS D.RS92 ;IE.IDU - INVALID DEVICE STATUS  .PAGE;+L; $CRLOG - ROUTINE TO TAKE A PREVIOUSLY VERIFIED LOGICAL NAME CREATION BLOCKO; AND CREATE AND INSERT AN LNB INTO THE APPROPRIATE TABLE FOR THAT LOGICAL.KM; ANY PREVIOUS LOGICAL WITH THE SAME NAME WILL BE DELETED AND SUPERCEDED.TK; SUPERCESSION WILL BE INDICATED BY SETTING THE V BIT COMING OUT OF THEN; ROUTINE.;R ; INPUTS:0I; R5 - POINTER TO THE DESCRIPTOR BLOCK CONTAINING DATA FOR LOGICAL CREATEE; WITH THE FORMAT:2; 2; -----------------------------------------------2; | BLOCK NUMBER | TABLE NUMBER |2; -----------------------------------------------2; | GROUP NUMBER | STATUS BYTE |2; -----------------------------------------------2; | TCB / UCB ADDRESS |2; -----------------------------------------------2; | SIZE OF LOGICAL NAME IN BUFFER |2; -----------------------------------------------2; | 32 WD APR ADDRESS OF START OF LOGICAL |2; -----------------------------------------------2; | APR6 BIASED OFFSET TO START OF LOGICAL |2; -----------------------------------------------2; | SIZE OF EQUIVALENCE NAME IN BUFFER |2; -----------------------------------------------2; | 32 WD APR ADDRESS OF START OF EQUIVALENCE |2; -----------------------------------------------2; | APR6 BIASED OFFSET TO START OF EQUIVALENCE|2; -----------------------------------------------;2 ; OUTPUTS:#; CC - LNB WAS SUCCESSFULLY CREATED-3; R1 = 0 IF NO SUPERCESSION OF PREVIOUS ASSIGNMENTP5; R1 <> 0 IF SUPERCESSION OF PREVIOUS ENTRY OCCURRED-3; CS - A SECONDARY POOL ALLOCATION FAILURE OCCURREDE;VG; R5 IS PRESERVED ACROSS THE CALL; HOWEVER THE DATA IN THE BLOCK IS NOT-%; KISAR6 IS DESTROYED BY THIS ROUTINET; G; CALLER MUST HAVE VALIDATED ALL ENTRIES IN THE DESCRIPTOR BLOCK BEFORE|H; CALLING THIS ROUTINE. CALLER MUST ALSO HAVE VERIFIED THAT THE TASK IS6; PRIVILEGED IF THIS IS TO BE A SYSTEM TABLE CREATION.;CG; A ZERO VALUE IN THE BLOCK NUMBER VARIABLE HAS NO MEANING. THE LOWESTF; VALID NUMBER IS 1 (LB.LOC). IT WILL BE PLACED IN THE LNB BY DEFAULTG; IF A ZERO VALUE IS SEEN. THIS HELPS THE COMPATIBILITY ISSUE WITH POSL;-$CRLOG::; G; CHECK FOR A ZERO VALUE IN THE BLOCK PARAMETER. IF THERE IS ONE, TURNR,; IT INTO A DEFAULT CREATION VALUE (LB.LOC).;R* TSTB 1(R5) ;CHECK FOR A ZERO BLOCK VALUE) BNE 5$ ;IF NE, SOMETHING ELSE WAS GIVENS; MOVB #LB.LOC,1(R5) ;MOVE IN THE DEFAULT VALUE FOR CREATION; D; CREATE THE LOGICAL NAME BLOCK AND FILL IN THE APPROPRIATE ENTRIES.;A,5$: MOVB (R5),R3 ;GET TABLE NUMBER FROM LNB! CALL $TBTRL ;MAP THE HASH TABLEA) BCS 70$ ;IF CS, THERE WAS NO HASH TABLEI3 MOV #L.NHSZ+77,R1 ;GET SIZE OF STATIC PIECE OF LNBO8 ADD 6(R5),R1 ;ADD THE SIZE OF THE PROPOSED LOGICAL NAME= ADD 14(R5),R1 ;ADD THE SIZE OF THE PROPOSED EQUIVALENCE NAMEH* ASH #-6,R1 ;TURN BYTES INTO 32 WD BLOCKS9 CALL $ALSEC ;ALLOCATE A PIECE OF SECONDARY POOL FOR LNBE# BCS 70$ ;IF CS, ALLOCATION FAILEDR! MOV R0,KISAR6 ;MAP THE NEW BLOCKL> MOV #MAP6+L.NTBL,R4 ;SET UP OFFSET VALUE FOR THE TABLE NUMBER6 MOV R5,-(SP) ;SAVE THE BUFFER POINTER ACROSS THE CALL6 MOV (R5)+,(R4)+ ;MOVE BLOCK AND TABLE NUMBER INTO LNB7 MOV (R5)+,(R4)+ ;MOVE STATUS AND GROUP NUMBER INTO LNBT2 MOV (R5)+,(R4)+ ;MOVE TCB OR UCB ADDRESS INTO LNB' MOV (R5)+,R0 ;GET SIZE OF LOGICAL NAMEE;MB; TRANSFER THE LOGICAL NAME STRING FROM THE USER BUFFER TO THE LNB; # MOV R0,(R4)+ ;MOVE IT INTO THE LNBB2 MOV (R5)+,R1 ;GET APR BIAS OF LOGICAL NAME BUFFER2 MOV (R5)+,R2 ;GET OFFSET TO START OF LOGICAL NAME6 SUB #MAP6-MAP5,R2 ;TURN IT INTO AN APR5-BIASED 00MgffOFFSET, MOV KISAR6,R3 ;GET THE DESTINATION APR BIAS3 CALL $BLXIO ;TRANSFER THE LOGICAL NAME TO THE LNB(;+F; TRANSFER THE EQUIVALENCE NAME STRING FROM THE USER BUFFER TO THE LNB; 5 MOV (R5)+,R0 ;GET THE SIZE OF THE EQUIVALENCE STRINGM> MOVB R0,MAP6+L.NENS ;MOVE IN THE SIZE OF THE EQUIVALENCE NAME7 MOV (R5)+,R1 ;GET APR BIAS FOR EQUIVALENCE NAME BUFFERV MOV (R5)+,R2 ;GET APR OFFSETC6 SUB #MAP6-MAP5,R2 ;TURN IT INTO AN APR5 BIASED OFFSET- CALL $BLXIO ;MOVE EQUIVALENCE NAME INTO LNB ;5K; SET UP A MINIATURE DESCRIPTOR BLOCK TO PASS TO THE LOOKUP ROUTINES TO SEETJ; IF THIS LOGICAL IS A SUPERCESSION OF A CURRENTLY EXISTING LOGICAL. THISL; MINI DESCRIPTOR BLOCK IS POINTED TO BY R0 AND CONTAINS, IN ORDER - EACH TOK; A WORD, THE SIZE OF THE LOGICAL, THE MEMORY APR BIAS TO THE STRING BLOCK, M; THE APR6-BIASED OFFSET TO THE START OF THE LOGICAL, THE TABLE/BLOCK NUMBER,G; AND THE APPROPRIATE TCB/UCB.;;+ MOV R5,R0 ;GET POINTER TO MINI DESCRIPTORX SUB #14,R0 ;5 MOV -6(R0),6(R0) ;MOVE TABLE NUMBER AND BLOCK NUMBERO( MOV -2(R0),10(R0) ;MOVE TCB/UCB ADDRESS;T>; NOW UPPER CASE ALL ALPHABETIC CHARACTERS IN THE LOGICAL NAME;A< MOV #MAP6+L.NNAM,R3 ;GET POINTER TO THE START OF THE STRING1 CLR R2 ;GET THE NUMBER OF CHARACTERS TO PROCESS  BISB MAP6+L.NLNS,R2 ;810$: CALL $CVBUC ;UPPER CASE THE CHARACTER IF NECESSARY1 MOVB R5,-1(R3) ;MOVE THE VALUE BACK INTO THE LNB ( SOB R2,10$ ;GO BACK IF MORE TO PROCESS; O; SEARCH THE APPROPRIATE TABLE FOR A CURRENTLY EXISTING LNB WITH THE SAME NAME.UK; IF FOUND, DELETE THAT ENTRY, ENTER THE NEW ONE, AND EXIT WITH A STATUS OFP; LOGICAL SUPERCEDED. ;R CALL $LNHSH ;HASH THE ENTRY. CLR -(SP) ;INITIALIZE SUPERCESSION INDICATOR; MOV KISAR6,-(SP) ;STORE THE LNB ADDRESS ACROSS THE LOOKUPS 5 CALL $LNTBS ;SEARCH THE TABLES FOR THE LOGICAL NAME 0 BCS 20$ ;IF CS, A PREVIOUS ENTRY WAS NOT FOUND; G; A LOGICAL WAS FOUND IN THE TABLE. FLAG THE SUPERCESSION BY MAKING R1 "; NONZERO AND REMOVE THE OLD ENTRY;E, MOV R3,2(SP) ;MOVE IN THE OLD ENTRY ADDRESS! CALL $LNELM ;REMOVE THE OLD LNBN;O&; INSERT THE NEW ENTRY INTO THE TABLES;U.20$: MOV (SP)+,R0 ;RESTORE THE NEW LNB ADDRESS;C; AT THIS POINT:<; R0 - 32 WD ADDRESS OF NEW LNB TO BE INSERTED INTO POSITION; R1 - HASH TABLE WORD OFFSETL?; R3 - 32 WD ADDRESS OF LNB TO BE BEHIND THE LNB TO BE INSERTED G; R4 - 32 WD ADDRESS OF LNB TO BE AHEAD OF NEW LNB IN LIST (=0 IF NONE)E;F ; OUTPUTS:B; CC = 0 -> LNB IS INSERTED INTO LIST AND ALL LINKAGES ARE UPDATED<; CC = 1 -> INSERTION FAILED FROM INVALID HASH TABLE ADDRESS;H MOV R0,KISAR6 ;MAP THE NEW LNBE@ MOV R3,MAP6+L.NLNK ;SET THE LINKAGES FOR THE LNB BEHIND THE NEW9 MOVB MAP6+L.NTBL,R3 ;GET THE TABLE NUMBER FOR THIS ENTRYN$ MOV R4,KISAR6 ;MAP THE PREVIOUS LNB BNE 30$ ;IF NE, THERE IS ONE! CALL $TBTRL ;MAP THE HASH TABLET" BCS 50$ ;IF CS, THERE WASN'T ONE' ADD #MAP6,R1 ;SET POINTER TO HASH CELL ! MOV R0,(R1) ;PUT IN FIRST ENTRY BR 40$ ;230$: MOV R0,MAP6+L.NLNK ;INSERT POINTER TO NEW LNB40$: CLC ;INDICATE SUCCESS050$: MOV (SP)+,R1 ;RESTORE THE SUPERCESSION FLAG3 MOV (SP)+,R5 ;RESTORE THE DESCRIPTOR BLOCK ADDRESSL 70$: RETURNH .PAGE;+I; $DELOG - ROUTINE TO DELETE AN EXPLICIT LOGICAL NAME OR A COMPLETE TABLE,;A ; INPUTS: E; R0 - POINTER TO A DESCRIPTOR BLOCK DESCRIBING LOGICAL TO BE DELETEDS; WITH THE FORMAT:I%; WD 1 - BYTE COUNT OF LOGICAL NAMES.; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME5; WD 3 - APR BIASED OFFSET TO START OF LOGICAL NAMER,; WD 4 - TABLE # TO BE SEARCHED (LOW BYTE)(; BLOCK TYPE NUMBER (HIGH BYTE)9; WD 5 - MATCHING TCB OR UCB DEPENDING ON TYPE OF TABLED;SJ; IF AN ENTIRE TABLE IS TO BE DELETED, THE FIRST 3 WORDS OF THE DESCRIPTOR; BLOCK ARE ZERO.L; ; OUTPUTS:;N%; CC - SUCCESSFUL DELETION OF LOGICALB@; CS : R3 = 0 -> LOGICAL NOT FOUND IF SPECIFIC LOGICAL REQUESTED?; R3 <> 0 -> PRIVILEGE VIOLATION IF SPECIFIC LOGICAL REQUESTEDS;-$DELOG::+ TSTB 7(R0) ;CHECK FOR ZERO BLOCK MODIFIERG! BNE 10$ ;IF NE, THERE ISN'T ONEE? MOVB #LB.LOC,7(R0) ;A Z00Ug fcDATADATADATADATADATADATADATAERO MODIFIER IMPLIES LOCAL MODE DEFAULT 010$: TST (R0) ;SEE IF THIS IS A SPECIFIC DELETE8 BNE 20$ ;IF EQ, IT ISN'T, DELETE ALL MATCHING LOGICALS;3; TOTAL LOGICAL DELETE; / CALLR $LNDAL ;ELIMINATE ALL LOGICALS AND EXITE;U; SPECIFIC LOGICAL DELETES;R,20$: CALL $LNHSH ;IT IS SPECIFIC, HASH NAME3 CALL $LNTBS ;FIND THE NAME IN THE SPECIFIED TABLEI, BCC 40$ ;IF CC, FOUND LNB, CHECK PRIVILEGE# CLR R3 ;INDICATE NO LOGICAL FOUNDG SEC ;INDICATE FAILURE 30$: RETURNM040$: MOV R3,KISAR6 ;MAP THE LNB FOUND WITH MATCH/ CALL PRVTST ;CHECK TASK PRIVILEGE AGAINST LNBE/ BCS 30$ ;IF CS, TASK CANNOT ELIMINATE LOGICALA .PAGE;+3; $LNELM - ROUTINE TO ELMINATE AN ALREADY FOUND LNB;;M ; INPUTS:O/; R0 - POINTER TO LOGICAL NAME DESCRIPTOR BLOCK; BLOCK CONTAINS:%; WD 1 - BYTE COUNT OF LOGICAL NAMET.; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME5; WD 3 - APR BIASED OFFSET TO START OF LOGICAL NAMEI,; WD 4 - TABLE # TO BE SEARCHED (LOW BYTE)(; BLOCK TYPE NUMBER (HIGH BYTE)9; WD 5 - MATCHING TCB OR UCB DEPENDING ON TYPE OF TABLEG@; R1 - WORD OFFSET FROM START OF HASH TABLE TO CORRECT HASH CELL1; R3 - 32 WD BLOCK ADDRESS OF LNB TO BE ELMINATEDL=; R4 - PREVIOUS LNB 32 WD ADDRESS IN LIST (=0 IF NONE BEFORE)E;S ; OUTPUT:C; ; CC = 0NE; R3 - 32 WD BLOCK ADDRESS OF LNB AFTER THE ONE ELMINATED (0 IF NONE)A=; R4 - PREVIOUS LNB 32 WD ADDRESS IN LIST (=0 IF NONE BEFORE)F;G ; CC = 1!; R3 AND R4 ARE THE SAME AS INPUTL;+$LNELM::2 MOV R4,-(SP) ;SAVE THE PREVIOUS ENTRY ACROSS CALL/ MOV R1,-(SP) ;SAVE THE HASH OFFSET ACROSS CALL-4 MOV R3,-(SP) ;SAVE THE LNB ADDRESS TO BE ELIMINATED MOV R3,KISAR6 ;MAP THE LNBE< MOV MAP6+L.NLNK,R3 ;GET THE FORWARD LINK IN THE CURRENT LNB$ MOV R4,KISAR6 ;MAP THE PREVIOUS LNB BNE 20$ ;IF NE, THERE IS ONE! CALL $MPHSH ;MAP THE HASH TABLE  BCC 10$ ;CC -> SUCCESS MOV (SP)+,R3 ;RESTORE R3 4 BR 40$ ;RESTORE THE REST OF THE REGISTERS AND EXIT&10$: ADD #MAP6,R1 ;GET ADDRESS OF CELL) MOV R3,(R1) ;RESET THE FORWARD LINKAGESS BR 30$ ;F20$: MOV R3,MAP6+L.NLNK ;RESET THE LINKAGES IF THERE IS A PREVIOUS LNB:30$: MOV (SP)+,R0 ;RESTORE POINTER TO LNB TO BE ELIMINATED& MOV R0,KISAR6 ;MAP IT IN KERNEL APR 6B MOV MAP6+L.NLNS,R1 ;GET THE LENGTH OF THE LOGICAL NAME IN THE LNB3 MOVB R1,R2 ;SCREEN OUT THE VARIOUS VALUES AND ADDT& BIC #177400,R2 ;GET LOGICAL NAME SIZE1 SWAB R1 ;PUT EQUIVALENCE NAME IN LOW BYTE OF R1 & BIC #177400,R1 ;GET LOGICAL NAME SIZE* ADD R2,R1 ;GET FULL SIZE OF BOTH BUFFERS1 ADD #L.NHSZ+77,R1 ;GET FULL SIZE OF LNB IN BYTESV$ ASH #-6,R1 ;TURN BYTES INTO BLOCKS* CALL $DESEC ;DEALLOCATE THE PREVIOUS LNB CLC ;INDICATE SUCCESS/40$: MOV (SP)+,R1 ;RESTORE THE HASH CELL OFFSETA) MOV (SP)+,R4 ;RESTORE THE PREVIOUS ENTRYF RETURNC .PAGE;+4; -- $LNTDR -- TRANSLATE RSX DEVICE FORM RECURSIVELYJ; -- $LNTSL -- TRANSLATE RSX DEVICE FORM RECURSIVELY WITH SPECIFIC INHIBIT; MASK AND MODIFIER VALUE4;RO; THIS ROUTINE WILL RECURSIVELY SEARCH THE LOGICAL NAME TABLES FOR DEVICE NAME.ZK; THE DEVICE MNEMONIC AND UNIT NUMBER ARE MERGED INTO AN INTERNAL STRING TOJ; USE AS THE BASE LOGICAL FOR THE LOOKUPS. AS A LOGICAL IS FOUND FOR EACHG; LEVEL, IT IS CHECKED TO SEE IF IT IS TERMINAL. IF SO, LOOKUPS CEASE,EL; OTHERWISE A NEW SET OF LOOKUPS ARE PERFORMED FOR THE LATEST LOGICAL. ONCEL; THE BOTTOM LEVEL LOGICAL IS FOUND, THE DEVICE MNEMONIC AND UNIT NUMBER (IN1; BINARY) ARE RESTORED TO R2 AND R0 RESPECTIVELY.H;RI; $LNTSL IS IDENTICAL TO $LNTDR WITH THE ADDITION OF AN EXPLICIT MODIFIER I; VALUE THAT MUST MATCH THE VALUE IN THE LNB AND AN INHIBIT MASKWORD THATI; INDICATES THE LOGICAL TABLES THAT CANNOT BE SEARCHED. THIS MASKWORD IS,; IN EFFECT IN ALL LOOKUP LEVELS AND TABLES.; ; INPUTS:U;C1; R0 = THE BINARY UNIT NUMBER OF THE DEVICE SPECM-; R2 = THE ASCII MNEMONIC OF THE DEVICE SPECL!; $LNTSL SPECIFIC PARAMETERS:N/; R3 = SPECIFIC MODIFIER VALUE TO MATCH IN LNBD=; $TONYL = SPECIFIC INHIBIT MASKWORD USED ACROSS ALL LOOKUPSD;I ; OUTPUTS:; C=0, ;L;; R0 = THE BINARY U00]gffNIT NUMBER OF THE RESULTANT DEVICE SPECA=; R2 = THE ASCII DEVICE MNEMONIC OF THE RESULTANT DEV. SPEC.A5; R3 = APR BIAS OF MATCHING LNB SECONDARY POOL BLOCKN;L/; C=1 INVALID TRANSLATION ON EXISTING LOGICAL ; /; R3 = 0 IF NO MATCH WAS FOUND FOR DEVICE NAMER>; = N IF A MATCH WAS FOUND BUT DID NOT TRANSLATE TO DEVICE; OR RECURSION LIMIT WAS HITM;FL; IF AN ERROR CONDITION OCCURS (VS, CS) R0 AND R2 ARE PRESERVED ACROSS THEL; CALL. R1,R3 ARE DESTROYED BY THIS ROUTINE. R4,R5,KISAR6 ARE PRESERVED.; ;-$LNTDR::' CLR R3 ;INITIALIZE THE MODIFIER VALUE . CLR $TONYL ;INITIALIZE THE INHIBIT MASK WORD$LNTSL::SAVNR ;SAVE R4 AND R5C0 MOV KISAR6,-(SP) ;SAVE THE OLD DATA MAPPING APR# MOV R0,-(SP) ;SAVE THE UNIT NUMBER ' MOV R2,-(SP) ;SAVE THE DEVICE MNEMONICT1 MOV R3,-(SP) ;SAVE THE MODIFIER VALUE TO BE USEDO;EN; MOVE THE DEVICE NAME MNEMONIC AND ASCIIZED UNIT NUMBER INTO A SCRATCH BUFFER'; FOR THE INITIAL LOOKUP IN THE TABLES.3;E? MOV #$LTBUF,R3 ;POINT TO SCRATCH BUFFER TO BUILD DEVICE STRING0 MOV R2,(R3)+ ;MOVE IN THE ASCII DEVICE MNEMONIC< CALL $DCBTA ;TURN THE OCTAL UNIT NUMBER TO ASCII IN BUFFER; K; INITIALIZE THE INTERNAL LOGICAL NAME DESCRIPTOR BLOCK TO BE PASSED AROUND,; DURING THE VARIOUS LOOKUPS.M;R, SUB #$LTBUF,R3 ;GET THE STRING LENGTH IN R39 MOV #$TONYL,R0 ;CREATE THE LOGICAL NAME DESCRIPTOR BLOCKV+ MOV $TKTCB,R2 ;GET THE CURRENT TCB ADDRESST* BIT #1,(R0) ;IS THE TASK TABLE INHIBITED% BEQ 5$ ;IF EQ, NO, KEEP TCB ADDRESSP. MOV T.UCB(R2),R2 ;GET THE UCB ADDRESS INSTEAD15$: MOV R2,-(R0) ;MOVE IN THE APPROPRIATE ADDRESSC- CLR -(R0) ;CLEAR THE TABLE AND BLOCK NUMBERI; BISB (SP)+,1(R0) ;GET AN EXPLICIT MODIFIER VALUE IF IS ONEP= MOV #$LTBUF+20000,-(R0) ;MOVE APR6 BIASED ADDRESS INTO BLOCK< MOV KISAR5,-(R0) ;TURN THE ADDRESS INTO APR BIAS AND OFFSET< MOV R3,-(R0) ;MOVE THE LENGTH OF THE STRING INTO DESCRIPTOR;ED; ENTER A LOOP OF LOOKUPS FOR EACH NEWLY FOUND LOGICAL IN THE CHAIN.I; A POINTER TO THE LATEST FOUND LNB IS KEPT FOR USE AFTER ALL LOOKUPS AREDG; COMPLETED. LOOKUPS TERMINATE AS SOON AS A LOGICAL ISN'T FOUND, OR IFRG; THE LATEST HAS THE TERMINAL ATTRIBUTE OR BEGINS WITH AN _. THIS LOOPTI; WILL BE EXECUTED A MAXIMUM OF M$XLOG TIMES BEFORE AN ERROR IS RETURNED.EI; THIS IS TO PREVENT AN INFINITE LOOP IN ASSIGNMENTS AND ALSO TO PUT SOMET;; KIND OF RESTRICTION ON USAGE OF SYSTEM STATE LOOKUP TIME.R;EG; A NONZERO VALUE IN R3 INDICATES THAT THE LOGICAL LOOKUP IS TO BE DONE G; IN FILES-11 MODE - THIS MEANS THAT THE SUBSEQUENT EQUIVALENCE NAME ISE; SEARCHED UP TO, BUT NOT INCLUDING, THE COLON. IF ONE IS NOT FOUND,RF; THE ENTIRE STRING IS USED FOR THE NEXT ROUND. OTHERWISE, EVERYTHING; BEFORE THE COLON IS USED.M;O5 CALL $LGRCS ;LOOK UP THE DEVICE LOGICAL RECURSIVELY 2 BCS 10$ ;IF CS, RECURSION LIMIT FAILURE OCCURRED;PJ; NOW THAT THE CHAIN HAS BEEN WALKED DOWN COMPLETELY, RESTORE THE LAST LNBJ; FOUND AND PARTIALLY VERIFY THAT THE EQUIVALENCE NAME IS A VALID PHYSICALH; DEVICE NAME. IF IT IS, R0 AND R2 ARE RESTORED WITH THE DEVICE MNEMONIC; AND BINARY UNIT NUMBER.L;N8 CALL DVVFY ;VALIDATE THE RESULTING LOGICAL AS A DEVICE) BCS 10$ ;IF CS, THE LOGICAL WAS INVALIDR8 CMP (SP)+,(SP)+ ;ELIMINATE THE OLD VALUES FOR R0 AND R2 BR 20$ ;EXIT SUCCESSFULLYU210$: MOV (SP)+,R2 ;RESTORE THE OLD DEVICE MNEMONIC* MOV (SP)+,R0 ;RESTORE THE OLD UNIT NUMBER SEC/20$: MOV (SP)+,KISAR6 ;RESTORE ANY OLD MAPPINGSN: MOV $LSTLG,R3 ;SET INDICATION OF WHETHER A MATCH OCCURRED RETURNE;+,; -- $RTRL1 -- TRANSLATE LOGICAL RECURSIVELY;NL; THIS ROUTINE WILL RECURSIVELY SEARCH THE LOGICAL NAME TABLES FOR A LOGICALN; AS A LOGICAL IS FOUND AT EACH LEVEL, IT IS CHECKED TO SEE IF IT IS TERMINAL.L; IF SO, LOOKUPS CEASE, OTHERWISE A NEW SET OF LOOKUPS ARE PERFORMED FOR THEN; LATEST LOGICAL. ONCE THE BOTTOM LEVEL LOGICAL IS FOUND, THE DEVICE MNEMONICE; AND UNIT NUMBER (IN BINARY) ARE RESTORED TO R2 AND R0 RESPECTIVELY.$;L ; INPUTS:N;A;; R0 = POINTER TO A USER BUFFER ADDRESS CONTAINING LOGICAL$!; R2 = SIZE OF LOGICAL IN00eg fcDATADATADATADATADATADATADATA BUFFERE; ; OUTPUTS:; C=0,L;E;; R0 = THE BINARY UNIT NUMBER OF THE RESULTANT DEVICE SPECA=; R2 = THE ASCII DEVICE MNEMONIC OF THE RESULTANT DEV. SPEC.T5; R3 = APR BIAS OF MATCHING LNB SECONDARY POOL BLOCKF;O/; C=1 INVALID TRANSLATION ON EXISTING LOGICALC;H/; R3 = 0 IF NO MATCH WAS FOUND FOR DEVICE NAMEN>; = N IF A MATCH WAS FOUND BUT DID NOT TRANSLATE TO DEVICE; OR RECURSION LIMIT WAS HIT ; L; IF AN ERROR CONDITION OCCURS (VS, CS) R0 AND R2 ARE PRESERVED ACROSS THEL; CALL. R1,R3 ARE DESTROYED BY THIS ROUTINE. R4,R5,KISAR6 ARE PRESERVED.; ;-$RTRL1:: SAVNR ;SAVE R4 AND R5; MOV KISAR6,-(SP) ;STORE THE PREVIOUS KERNEL DATA 6 MAPPINGS. MOV R2,-(SP) ;SAVE LOGICAL SIZE FOR LATER USE; H; CREATE THE LOGICAL DESCRIPTOR BLOCK FOR USE ACROSS THE RECURSIVE CALLS; 2 MOV #$TONYL,R3 ;POINT TO BOTTOM OF THE DESCRIPTOR: MOV $TKTCB,-(R3) ;PUT IN THE TCB ADDRESS FOR CURRENT TASK- CLR -(R3) ;CLEAR THE TABLE AND MODE NUMBERSS7 CLR $TONYL ;INDICATE ROUTINE SHOULD SEARCH ALL TABLESE; CALL $RELOC ;TURN USER BUFFER ADDRESS INTO OFFSET AND APR2 MOV R2,-(R3) ;MOVE THE OFFSET INTO THE DESCRIPTOR7 MOV R1,-(R3) ;MOVE THE APR6 OFFSET INTO THE DESCRIPTORR& MOV (SP)+,-(R3) ;GET THE LOGICAL SIZE' MOV R3,R0 ;POINT R0 AT THE DESCRIPTORC, ; AND INDICATES FILES-11 MODE OF $LGRCS;TD; ENTER A LOOP OF LOOKUPS FOR EACH NEWLY FOUND LOGICAL IN THE CHAIN.I; A POINTER TO THE LATEST FOUND LNB IS KEPT FOR USE AFTER ALL LOOKUPS AREBG; COMPLETED. LOOKUPS TERMINATE AS SOON AS A LOGICAL ISN'T FOUND, OR IFLG; THE LATEST HAS THE TERMINAL ATTRIBUTE OR BEGINS WITH AN _. THIS LOOPHI; WILL BE EXECUTED A MAXIMUM OF M$XLOG TIMES BEFORE AN ERROR IS RETURNED.DI; THIS IS TO PREVENT AN INFINITE LOOP IN ASSIGNMENTS AND ALSO TO PUT SOMET;; KIND OF RESTRICTION ON USAGE OF SYSTEM STATE LOOKUP TIME.S;T5 CALL $LGRCS ;LOOK UP THE DEVICE LOGICAL RECURSIVELYL2 BCS 10$ ;IF CS, RECURSION LIMIT FAILURE OCCURRED;KJ; NOW THAT THE CHAIN HAS BEEN WALKED DOWN COMPLETELY, RESTORE THE LAST LNBJ; FOUND AND PARTIALLY VERIFY THAT THE EQUIVALENCE NAME IS A VALID PHYSICALH; DEVICE NAME. IF IT IS, R0 AND R2 ARE RESTORED WITH THE DEVICE MNEMONIC; AND BINARY UNIT NUMBER.N;D8 CALL DVVFY ;VALIDATE THE RESULTING LOGICAL AS A DEVICE>10$: MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING AND KEEP CARRY RETURN ;+9; $LGRCS - ROUTINE TO SCAN THE LOGICAL TABLES RECURSIVELYS;$ ; INPUTS:E<; R0 - POINTER TO DESCRIPTOR BLOCK OF FIRST LOGICAL IN CHAIN"; $TONYL - TABLE INHIBIT MASK WORD0; R3 - FILES-11 MODE PROCESSING FLAG (>0 -> YES);Q ; OUTPUTS::; CC - SEARCH MAY OR MAY NOT HAVE RESULTED IN AN LNB MATCH@; $LSTLG - SECONDARY POOL ADDRESS OF FINAL LNB (=0 IF NO MATCH)2; CS - RECURSION LIMIT WAS HIT (DEFINED BY M$XLOG);ED; ENTER A LOOP OF LOOKUPS FOR EACH NEWLY FOUND LOGICAL IN THE CHAIN.;T; NOT PRESERVED: KISAR6, R3I; A POINTER TO THE LATEST FOUND LNB IS KEPT FOR USE AFTER ALL LOOKUPS ARETG; COMPLETED. LOOKUPS TERMINATE AS SOON AS A LOGICAL ISN'T FOUND, OR IFTG; THE LATEST HAS THE TERMINAL ATTRIBUTE OR BEGINS WITH AN _. THIS LOOPTI; WILL BE EXECUTED A MAXIMUM OF M$XLOG TIMES BEFORE AN ERROR IS RETURNED. I; THIS IS TO PREVENT AN INFINITE LOOP IN ASSIGNMENTS AND ALSO TO PUT SOMET;; KIND OF RESTRICTION ON USAGE OF SYSTEM STATE LOOKUP TIME.O;AF; IN FILES-11 PROCESSING MODE, THIS ROUTINE WILL SEARCH FOR A COLON INF; THE LOGICAL AND ONLY USE THE BEFORE IT. THIS HAPPENS IN ALL PASSES.?; IF NO COLON IS FOUND, THE ENTIRE STRING IS USED IN EACH CASE.U;-$LGRCS::, MOV R3,-(SP) ;SAVE THE MODE PROCESSING FLAG, CLR $LSTLG ;CLEAR THE ULTIMATE LNB POINTER@ MOV #M$XLOG,-(SP) ;PUT THE MAXIMUM RECURSION LIMIT ON THE STACK/10$: DEC (SP) ;SEE IF ANOTHER ROUND IS ALLOWED 2 BGE 13$ ;IF LT, NO, RECURSION ERROR HAS OCCURRED- SEC ;INDICATE FAILURE FROM RECURSION LIMITS= MOV (SP)+,(SP)+ ;MAXIMUM RECURSION LIMIT, MAINTAIN CARRY SETA% BR 40$ ;RETURN WITH RECURSION ERRORP113$: TST 2(SP) ;IS THIS FILES-11 PROCESSING MODEI, BEQ 15$ ;IF EQ, NO, USE EXACT MATCH ALWAYS8 CALL LGTSET ;YES00mgff, DO COLON SEARCH AND RESET DESCRIPTOR=15$: CALL $TBSRC ;LOOK FOR LOGICAL IN ALL APPROPRIATE TABLESH# BCS 30$ ;IF CS, LOGICAL NOT FOUNDK3 MOV R3,$LSTLG ;SAVE THE CURRENT LINK FOR LATER USEB9 MOV R3,KISAR6 ;MAP THE LNB TO RESET THE DESCRIPTOR BLOCKN/ BIT #LS.TRM,MAP6+L.NSTS ;IS THIS LNB TERMINAL?(# BNE 30$ ;IF NE, YES, STOP LOOKUPSI8 CLR R2 ;INITIALIZE POINTER TO START OF EQUIVALENCE STR8 BISB MAP6+L.NLNS,R2 ;GET THE LENGTH OF THE LOGICAL NAME3 ADD #MAP6+L.NNAM,R2 ;POINT TO THE START OF THE ENSS0 CMPB #'_,(R2) ;IS THIS TERMINAL IN THE OLD WAY?# BEQ 30$ ;IF EQ, YES, STOP LOOKUPSO;20$: CLR (R0) ;INITIALIZE THE NEW LENGTH IN THE DESCRIPTOR,) BISB MAP6+L.NENS,(R0);GET THE NEW LENGTHB2 MOV R2,4(R0) ;MOVE THE NEW OFFSET INTO DESCRIPTOR/ MOV R3,2(R0) ;MOVE IN THE NEW APR BIAS AS WELLE2 BIT #1,$TONYL ;SEE IF THE TASK TABLE IS INHIBITED* BNE 10$ ;IF NE, IT IS, SKIP TCB RECOVERY? MOV $TKTCB,10(R0) ;RESTORE THE TCB POINTER FOR NEXT LOOKUP SETE" BR 10$ ;GO BACK FOR ANOTHER LOOP>30$: CLR (SP)+ ;CLEAR THE RECURSION LIMIT VALUE OFF THE STACK CLR (SP)+ ; AND CLEAR CARRY 40$: RETURN: .ENABL LSBI;+K; DVVFY - ROUTINE TO VERIFY THAT THE LOGICAL DESCRIBED BY $LSTLG IS A VALIDMD; FORM OF AN RSX PHYSICAL DEVICE. ONLY THE FORMAT OF THE LOGICAL IS9; VERIFIED - ACTUAL EXISTENCE OF THE DEVICE IS IRRELEVANTS;A ; INPUTS:B;; $LSTLG - CONTAINS SECONDARY POOL ADDRESS OF LNB TO VERIFY, ; OUTPUTS:B; CC - LOGICAL IN $LSTLG SUCCESSFUL PASSED FORM TEST OF RSX DEVICE7; CS - NO LOGICAL IN $LSTLG OR LOGICAL FAILED FORM TESTE;F.; R0,R1,R2,R3,R5 ARE DESTROYED BY THIS ROUTINE;RN; THIS CODE WILL IGNORE ANY LEADING TERMINAL CHARACTERS (_) IN THE EQUIVALENCE+; STRING BEFORE BEGINNING THE VERIFICATION.R;-DVVFY:( MOV $LSTLG,KISAR6 ;MAP THE ULTIMATE LNB5 BEQ 50$ ;IF EQ, ONE WAS NOT FOUND, INDICATE FAILUREV* CLR R5 ;INITIALIZE A STRING LENGTH VALUE. BISB MAP6+L.NENS,R5 ;GET THE LENGTH TO VERIFY9 MOVB MAP6+L.NLNS,R1 ;POINT R1 TO THE START OF THE STRING : ADD #MAP6+L.NNAM,R1 ;POINT TO START OF EQUIVALENCE STRING65$: CMPB #'_,(R1)+ ;CHECK FOR LEADING FINAL INDICATORS BNE 10$ ;IF NE, NO MORE THERE 1 DEC R5 ;DECREMENT THE REMAINING NUMBER TO CHECKN BEQ 50$ ;IF EQ, INVALID DEVICE% BR 5$ ;GO BACK FOR ANOTHER TO CHECK,*10$: DEC R1 ;BACK UP TO INCLUDE DELIMITERDEVCHK: $ CLR R0 ;INITIALIZE THE UNIT NUMBER/ MOVB (R1)+,R2 ;GET FIRST CHARACTER IN MNEMONICN+ DEC R5 ;SEE IF THIS IS THE LAST CHARACTERL% BEQ 50$ ;IF EQ, YES, INVALID DEVICES- CALL CHRCHK ;IS THIS CHARACTER ALPHANUMERIC # BCS 50$ ;IF CS, ERROR IN THE NAME+* SWAB R2 ;GET SECOND HALF OF THE TASKNAME CLRB R2 ;O BISB (R1)+,R2 ; CALL CHRCHK ;IS IT VALID BCS 50$ ;IF CS, IT WAS BAD7 SWAB R2 ;REVERSE THE LETTERS BACK TO CORRECT POSITIONH DEC R5 ;IS IS A ZERO VALUE6 BNE 30$ ;IF NE, THERE IS MORE ON THE STRING TO CHECK20$: CLC ;INDICATE SUCCESS BR 60$ ;EXIT; L; VALIDATE THAT THE REST OF THE STRING IS A VALID OCTAL NUMBER OR A TRAILING; COLON.;D:30$: MOVB (R1)+,R3 ;GET THE FIRST CHARACTER OF UNIT NUMBER0 CMPB R3,#'0 ;IS THIS A VALID NUMERIC CHARACTER BLO 40$ ;IF LO, NO2 CMPB R3,#'7 ;IS IT STILL VALID ON THE HIGH SIDE? BHI 40$ ;IF HI, NO1 SUB #60,R3 ;TURN THE NUMBER INTO A BINARY VALUES/ ASH #3,R0 ;MULTIPLY EVERYTHING UP TO NOW BY 8O" ADD R3,R0 ;ADD IN THE NEW NUMBER) DEC R5 ;ANY MORE CHARACTERS TO PROCESS?I BNE 30$ ;IF NE, YES;% CMP #377,R0 ;IS THIS A VALID NUMBERH BHI 20$ ;IF LO, DEFINITELY NOT BR 50$ ;INDICATE ERROR)40$: CMPB R3,#': ;SEE IF THIS IS A COLONE+ BEQ 20$ ;IF EQ, IT IS, VALID STRING FOUNDL50$: SEC 60$: RETURNB .DSABL LSBO;+E; CHRCHK - ROUTINE TO VALIDATE THE ALPHA STATE OF THE DEVICE MNEMONICS;# ; INPUTS:N; R2 - CHARACTER TO BE VERIFIED;-4CHRCHK: BICB #40,R2 ;CONVERT CHARACTER TO UPPERCASE$ CMPB #'A,R2 ;IS THIS BELOW THE SET BHI 10$ ;IF HI, YESP$ CMPB #'Z,R2 ;IS THIS ABOVE THE SET BLO 10$ ;IF LO, YESL CLC ;INDICATE SUCCESS BR 20$ ;EXIT10$: SEC ;INDICATE FAILURE20$: RETURN ; ;+G; PSCNV - ROUTINE TO00ug fcDATADATADATADATADATADATADATA TRANSLATE THE LOGICAL NAME SPECIFIED IN ONE OF THECC; P/OS COMPATIBLE DIRECTIVES INTO A FORM RECOGNIZED BY RSX EXTENDEDE; LOGICAL SUPPORT.; ; INPUTS:O/; R0 - SIZE OF THE LOGICAL NAME TO BE PROCESSEDF,; R1 - 32 WD APR BIAS TO GET TO LOGICAL NAME6; R2 - KISAR6 VIRTUAL ADDRESS OF START OF LOGICAL NAME;I ; OUTPUTS:H; CS -> CONVERSION RESULTED IN INVALID LOGICAL NAME: R0 IS ZERO OR -17; CC -> CONVERSION RESULTED IN NONZERO LOGICAL NAME:E/; R0 - SIZE OF THE LOGICAL NAME TO BE PROCESSEDN,; R1 - 32 WD APR BIAS TO GET TO LOGICAL NAME@; R2 - KISAR6 VIRTUAL ADDRESS OF START OF PROCESSED LOGICAL NAME;XH; THIS ROUTINE RECOGNIZES THAT IT WAS CALLED BY A TLOG$, RLOG$, CLOG$ ORE; DLOG$ DIRECTIVE AND PROCESSES THE LOGICAL NAME IN TWO WAYS. IF THE G; LOGICAL ENDS IN ONE OR TWO COLONS, THEY ARE STRIPPED OFF OF THE NAME. F; FOLLOWING THAT, THE STRING IS CHECKED TO SEE IF IT IS OF THE FORM OFE; AN RSX PHYSICAL DEVICE NAME (IE. DDNNN). IF SO, THE STRING IS ZEROTK; COMPRESSED. IF IT ISN'T, THE ORIGINAL STRING IS USED, MINUS THE STRIPPEDE ; COLONS.S;-PSCNV:: CMPB #R$XBAS,$DICSV+2;IS THIS ONE OF THE XLOG$ DIRECTIVES' BLOS 10$ ;IF LOS, NO, SKIP PROCESSINGG, TST R0 ;SEE IF THIS IS A FULL TABLE DELETE7 BNE 20$ ;IF NE, IT ISN'T, CONTINUE ON WITH PROCESSINGN*10$: CLC ;INDICATE SUCCESSFUL COMPLETION RETURN ;EM; AT THIS POINT WE KNOW THIS IS A XLOG$ DIRECTIVE AND THAT THERE IS A NONZERONK; LENGTH OF STRING TO PROCESS. IF, AFTER STRIPPING 1-2 COLONS, THERE ISN'TSK; ANY STRING LEFT, WE SET THE CARRY TO INDICATE AN INVALID INPUT STRING. R0SM; WILL BE INVALID AT THAT POINT AS WELL. ANY OTHER CONDITIONS WILL LEAVE THE E; CARRY CLEAR TO INDICATE A SUCCESSFUL OPERATION AND VALID REGISTERS.L;E"20$: SAVNR ;SAVE REGISTERS R4,R5/ MOV KISAR6,-(SP) ;SAVE THE DATA REGISTER VALUES' MOV R3,-(SP) ;SAVE THE OTHER REGISTERST MOV R2,-(SP) ;  MOV R1,-(SP) ;I) ADD R2,R0 ;POINT TO END OF LOGICAL NAMEG$ MOV R1,KISAR6 ;MAP THE LOGICAL NAME) CMPB #':,-(R0) ;IS THIS A DEVICE OR NODEI BNE 30$ ;IF NE, NO CMPB #':,-(R0) ;IS THIS A NODES BEQ 40$ ;IF EQ, YESN&30$: INC R0 ;POINT BACK TO TERMINATOR%40$: SUB R2,R0 ;GET LENGTH OF STRINGA+ MOV R0,-(SP) ;GET THE NEW LENGTH OF STRINGD BLE 60$ ;IF LE, INVALID STRING MOV R0,R5 ;GET SIZE IN R5R+ MOV R2,R1 ;GET POINTER TO START OF STRINGR6 CALL DEVCHK ;SEE IF STRING MATCHES RSX PHYSICAL FORM/ BCS 50$ ;IF CS, NO, USE STRING WITHOUT COLONSC( TST R5 ;ANY LEFTOVER JUNK AFTER DEVICE& BNE 50$ ;IF NE,YES, SKIP COMPRESSION- MOV #$LTBUF,R3 ;POINT TO NEW PHYSICAL STRING & MOV R2,(R3)+ ;MOVE IN DEVICE MNEMONIC+ CALL $DCBTA ;TURN OCTAL NUMBER INTO ASCII:% MOV R3,R0 ;INITIALIZE SIZE REGISTERV0 SUB #$LTBUF,R0 ;GET ACTUAL SIZE OF LOGICAL NAME= MOV #$LTBUF+20000,R2;GET VIRTUAL ADDRESS OF NEW LOGICAL NAME,' MOV KISAR5,R1 ;GET 32WD APR BIAS VALUEL& ADD #6,SP ;CLEAR STACK OF OLD VALUES& CLC ;INDICATE SUCCESSFUL COMPLETION BR 70$ ;050$: TST (PC)+ ;CLEAR CARRY TO INDICATE SUCCESS60$: SEC ;INDICATE FAILURE& MOV (SP)+,R0 ;RESTORE SIZE OF LOGICAL/ MOV (SP)+,R1 ;RESTORE 32WD APR BIAS TO LOGICAL 1 MOV (SP)+,R2 ;RESTORE VIRTUAL ADDRESS OF LOGICALI70$: MOV (SP)+,R3 ;RESTORE R3E+ MOV (SP)+,KISAR6 ;RESTORE ORIGINAL MAPPINGO RETURN ;+C;LGTSET - ROUTINE TO SCAN A LOGICAL NAME DEFINED BY A DESCRIPTOR TOK>; DETERMINE IF IT HAS A COLON IN IT. IF SO, THE LENGTH OF THE9; LOGICAL IS REDUCED TO INCLUDE THE STRING UP TO, BUT NOT ; INCLUDING, THE COLON.R;R ; INPUTS:A$; R0 - POINTER TO LOGICAL DESCRIPTOR ; OUTPUTS:.; R0 - UPDATED LENGTH OF LOGICAL IN DESCRIPTOR;-LGTSET:P SAVNR ;SAVE R4,R53 MOV 2(R0),KISAR6 ;MAP THE LOGICAL NAME WITH KISAR6:; MOV 4(R0),R4 ;GET THE VIRTUAL ADDRESS OF THE LOGICAL STARTA4 MOV (R0),R5 ;GET THE CURRENT LENGTH OF THE LOGICAL210$: CMPB #':,(R4)+ ;IS THE NEXT CHARACTER A COLON BEQ 20$ ;IF EQ, YESN1 DEC R5 ;DECREMENT THE COUNT OF CHARS TO PROCESSD! BNE 10$ ;IF NE, MORE TO PROCESSO420$: SUB R5,(R0) ;RESET LENGTH OF LOGICAL TO LOOKUP RETURN ;+I; $MPHSH - ROUTINE TO MAP THE APPROPRI00}gffATE HASH TABLE THROUGH KISAR6 FOR AG ; SPECIFIED LOGICAL TABLE NUMBER;R ; INPUTS:M4; 6(R0) - CONTAINS A BYTE VALUE FOR THE TABLE NUMBER ; OUTPUT:A:; CC -> SUCCESSFUL MAPPING OF HASH TABLE ADDRESS IN KISAR6:; CS -> NO HASH TABLE WAS AVAILABLE FOR GIVEN TABLE NUMBER;-$MPHSH::& MOV R3,-(SP) ;SAVE R3 ACROSS THE CALL$ MOVB 6(R0),R3 ;GET THE TABLE NUMBER2 CALL $TBTRL ;TRANSLATE TABNUM AND MAP HASH TABLE0 MOV (SP)+,R3 ;RESTORE R3 AND MAINTAIN CARRY BIT RETURN ;+K; $TBTRL - ROUTINE TO TRANSLATE THE LOGICAL TABLE NUMBER INTO AN HASH TABLEE3; OFFSET AND THEN MAP THE HASH TABLE THROUGH KISAR6T;S ; INPUTS:U; R3 - TABLE NUMBERR ; OUTPUTS:; CC - SUCCESS:F3; KISAR6 - CONTAINS MAPPING TO START OF HASH TABLEO$; CS - NO HASH TABLE VALUE AVAILABLE; "; R3, KISAR6 ARE DESTROYED BY CALL;VD; THIS ROUTINE TAKES THE SPECIFIED LOGICAL TABLE NUMBER AND TURNS ITF; INTO A WORD OFFSET INTO THE HIERARCHY TABLE IN SYSCM. THE HIERARCHYG; TABLE CONTAINS THE SECONDARY POOL POINTERS TO EACH OF THE HASH TABLESOF; IN AN ORDERED, PRECEDENCE-DERIVED SEQUENCE. SINCE THE TABLE NUMBERSE; NO LONGER HAVE ANY PRETENSE OF PRECEDENCE ORDERING, IT IS NECESSARYE; TO HASH THE VALUES INTO THE CORRECT WORD OFFSET. FROM THIS OFFSET,B; THE APR BIAS OF THE HASH TABLE IS PLACED INTO KISAR6 SO THAT ANYB; 140000-140100 KERNEL DATA REFERENCES WILL ACCESS THE HASH TABLE.;-$TBTRL::4 CMP #T$BLNM,R3 ;SEE IF THIS IS A VALID TABLE NUMBER" BLO 10$ ;IF LO, NO, RETURN ERROR8 MOVB $TRANL(R3),R3 ;HASH TABLE NUMBER TO CORRECT OFFSET+ ASL R3 ;TURN INTO WORD OFFSET AND KEEP CC 9 MOV $LOGTB(R3),KISAR6 ;MAP THE HASH TABLE THROUGH KISAR6P BNE 20$ ;IF NE, THERE WAS ONER10$: SEC ;FAILURE INDICATORH 20$: RETURND .PAGE;+I; $LDELX - ROUTINE TO DELETE EVERY LOGICAL IN A GIVEN TABLE REGARDLESS OFH8; THE BLOCK MODIFIER SPECIFIED. THIS ROUTINE IS USED BY9; DREIF TO ELIMINATE A TASK AND BY BYE TO LOGOFF A USER.S; ; INPUTS:L3; R0 - POINTER TO TCB OR UCB TO DELETE LOGICALS FORT2; R1 - TABLE CODE INDICATING WHICH TABLE TO DELETE;R;-$LDELX::? MOV R0,$TEMP0+10 ;PUT THE TCB/UCB ADDRESS INTO A PARTIAL DESC.T9 MOV #$TEMP0,R0 ;SET UP THE DESCRIPTOR ADDRESS FOR $LNDAL 5 MOV R1,6(R0) ;PUT THE TABLE NUMBER IN THE DESCRIPTORE3 ; THIS STATEMENT ALSO FORCES A ZERO IN 7(R0). 0 ; THIS CAUSES $LNDAL TO SKIP BOTH THE MODE- ; AND THE PRIVILEGE CHECKS. THIS IS TO * ; PREVENT LOSS OF BLOCKS IN RUNDOWN.;+I; $LNDAL - ROUTINE TO DELETE ALL LOGICALS IN A GIVEN TABLE THAT MATCH THEN+; BLOCK TYPE MODIFIER SPECIFIED IN THE DPBE;: ; INPUTS:,C; R0 - POINTER TO A LOGICAL NAME DESCRIPTOR BLOCK WITH NO SPECIFIED0; LOGICAL NAMEE ; OUTPUTS:; CC - ALWAYS INDICATE SUCCESS;TH; A ZERO VALUE IN THE BLOCK BYTE - 7(R0) - FORCES A SKIP AROUND BOTH THE$; MODE AND THE LNB PRIVILEGE CHECKS.;-$LNDAL:: SAVNR ;SAVE R4 AND R50 CLR -(SP) ;SET UP INITIAL VALUE FOR HASH TABLE! CALL $MPHSH ;MAP THE HASH TABLE% BCS 50$ ;IF CS, NO HASH TABLE ENTRYL- MOV KISAR6,(SP) ;SAVE THE HASH TABLE MAPPINGP4 CLR R1 ;INITIALIZE TO THE FIRST HASH CELL IN TABLE510$: CLR R4 ;INITIALIZE PREVIOUS LNB ADDRESS IN LISTP$ MOV (SP),KISAR6 ;MAP THE HASH TABLE2 MOV MAP6(R1),R3 ;GET FIRST ENTRY IN THE CELL LIST1 BEQ 40$ ;IF EQ, THERE ARE NONE, GO TO NEXT CELLO$20$: MOV R3,KISAR6 ;MAP THE NEXT LNB6 CALL $LNTST ;CHECK TO SEE IF ENTRY MATCHES CRITERION BCC 30$ ;IF CC, IT DOES <23$: MOV R3,R4 ;IT DOESN'T, SET POINTERS AND GET NEXT ENTRY/25$: MOV MAP6+L.NLNK,R3 ;GET NEXT ENTRY ADDRESSA4 BEQ 40$ ;IF EQ, THERE ARE NO MORE, GO TO NEXT CELL& BR 20$ ;GO BACK AND CHECK THIS ENTRY230$: TSTB 7(R0) ;SEE IF THIS IS A GENERIC COMPARE8 BEQ 35$ ;IF EQ, IT IS, IGNORE BLOCK NUMBER COMPARISONS4 CMPB MAP6+L.NBLK,7(R0);SEE IF THE BLOCK TYPES MATCH" BNE 23$ ;IF NE, NO, DON'T DELETE1 CALL PRVTST ;CHECK FOR TASK PRIVILEGE TO DELETE - BCS 23$ ;IF CS, TASK DOESN'T, SKIP THIS ONET035$: MOV R4,-(SP) ;SAVE THE PREVIOUS LNB POINTER4 MOV R0,-(SP) ;SAVE THE STORAGE AREA ACROSS THE CALL" CALL $LNELM ;ELMINATE THIS ENTRY/ M00g fcDATADATADATADATADATADATADATAOV (SP)+,R0 ;RESTORE THE STORAGE AREA ADDRESSC+ MOV (SP)+,R4 ;RESTORE THE PREVIOUS POINTER ; MOV R4,KISAR6 ;MAP THE PREVIOUS TO GET THE FORWARD POINTER + BNE 25$ ;GO BACK AND CHECK THE NEXT ENTRY(- BR 10$ ;START AT THE HASH CELL IF NECESSARY /40$: ADD #2,R1 ;BUMP THE HASH CELL OFFSET WORDS+ CMP R1,#<*2>;SEE IF END OF CELLSK BLOS 10$ ;IF LOS, NO, DO MOREV750$: CLR (SP)+ ;POP THE HASH TABLE LOCATION AND SET CCS RETURNT .PAGE;+H; $TBSRC - ROUTINE TO DO HIERARCHICAL LOOKUPS IN THE APPROPRIATE LOGICALA; NAME TABLES. THIS ROUTINE MUST BE PASSED A LOGICAL DESCRIPTOREA; BLOCK AND AN INHIBIT MASK WORD IN $TONYL. SEARCH WILL BEGIN ATB>; THE TASK TABLE LEVEL, AND PROCEED SEQUENTIALLY TO THE SYSTEMB; LEVEL. IT IS UP TO THE CALLER TO MAKE SURE THAT THE INITIAL TCBF; OR UCB IS SET UP CORRECTLY IF ONE OF THE TABLES ARE TO BE INHIBITED.; ; INPUTS:V;0:; R0 - POINTER TO CURRENT DESCRIPTOR BLOCK WHICH CONTAINS:%; WD 1 - BYTE COUNT OF LOGICAL NAMET.; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME5; WD 3 - APR BIASED OFFSET TO START OF LOGICAL NAMEG,; WD 4 - TABLE # TO BE SEARCHED (LOW BYTE)(; BLOCK TYPE NUMBER (HIGH BYTE)9; WD 5 - MATCHING TCB OR UCB DEPENDING ON TYPE OF TABLEMH; $TONYL - CONTAINS THE INHIBIT MASK WORD WHERE A SET BIT INDICATES THAT1; THAT THE TABLE IS TO BE SKIPPED IN THE LOOKUP.O; ; OUTPUTS:;; CC = 01; R3 - APR BIAS ADDRESS OF START OF MATCHING LNBI;C; CC = 1; R3,R4 INDETERMINATE;-$TBSRC::; J; THE LOGICAL NAME IS NOW HASHED TO GET THE CELL OFFSET THAT WILL BE VALIDK; ACROSS ALL TABLE LOOKUPS. THEN A LOOP IS ENTERED TO CHECK EACH TABLE FOR I; LOOKUP VALIDITY. IF IT IS VALID, THE TCB (IF A TASK TABLE LOOKUP) OR AOJ; UCB ADDRESS IS PLACED IN THE DESCRIPTOR BLOCK, AND THE APPROPRIATE TABLE#; IS SEARCHED FOR THE LOGICAL NAME.T;E7 CALL $LNHSH ;HASH THE LOGICAL NAME TO GET CELL OFFSET ) CLR R2 ;INITIALIZE THE TABLE OFFSET BIT ;II; INITIALLY CHECK FOR A TASK LOGICAL TABLE LOOKUP. IT IS ASSUMED AT THISAJ; POINT THAT THE DESCRIPTOR CONTAINS THE CORRECT TCB. IF THE LOOKUP FAILSI; FOR THE TASK TABLE, THE TCB IS USED TO GET THE APPROPRIATE UCB ADDRESS.DJ; THE UCB IS THEN PRESUMED TO BE IN THE DESCRIPTOR FOR ALL OTHER SEARCHES.;P( CALL 50$ ;CHECK THE TASK LOGICAL TABLE' BCC 40$ ;IF CC, THE LOGICAL WAS FOUNDI2 BVS 30$ ;IF VS, TABLE INHIBITED, DON'T TOUCH TCB7 MOV 10(R0),R5 ;GET THE TCB ADDRESS FROM THE DESCRIPTORE2 MOV T.UCB(R5),10(R0);AND PUT THE UCB ADDRESS BACK- BR 30$ ;GO ON FOR THE OTHER TYPES OF LOOKUPT;EI; THE FOLLOWING LOOKUPS ARE ONLY FOR THE USER, GROUP, AND SYSTEM LOOKUPS.TO; FOR THE USER AND GROUP LOOKUPS, IT IS ASSUMED THAT THE CORRECT UCB IS ALREADYS; IN THE DESCRIPTOR BLOCKR;R?20$: CALL 50$ ;VERIFY ONE OF THE USER, GROUP, OR SYSTEM TABLESE' BCC 40$ ;IF CC, THE LOGICAL WAS FOUNDI 30$: INC R2 ;BUMP TO NEXT TABLE# CMP #T$BLNM,R2 ;ALL TABLES CHECKEDE BHIS 20$ ;IF HIS, NO, CONTINUE,35$: SEC ;INDICATE FAILURE TO FIND A MATCH 40$: RETURNB;0J; ROUTINE TO DETERMINE IF THIS TABLE IS VALID AND IF THE LOGICAL IS WITHIN ; THE TABLEE;GE50$: BITB $MSKBT(R2),$TONYL ;SEE IF SEARCH OF THIS TABLE IS INHIBITEDU% SEV ;INITIALIZE TO TABLE INHIBITED 1 BNE 35$ ;IF EQ, IT IS, CONTINUE WITH NEXT TABLEY; CLRB 6(R0) ;SET TABLE NUMBER TO BE SEARCHED IN DESCRIPTOR  BISB $LTMSK(R2),6(R0);0 .PAGE;+D; $LNTBS - ROUTINE TO FIND A LOGICAL NAME STRING IN A SPECIFIC TABLE;O ; INPUTS:/; R0 - POINTER TO LOGICAL NAME DESCRIPTOR BLOCK:; BLOCK CONTAINS:%; WD 1 - BYTE COUNT OF LOGICAL NAME .; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME5; WD 3 - APR BIASED OFFSET TO START OF LOGICAL NAMEE,; WD 4 - TABLE # TO BE SEARCHED (LOW BYTE)(; BLOCK TYPE NUMBER (HIGH BYTE)9; WD 5 - MATCHING TCB OR UCB DEPENDING ON TYPE OF TABLEA/; R1 - WORD OFFSET TO BE USED TO FIND HASH CELL;. ; OUTPUTS:,; CC = 0 -> SUCCESSFUL MATCH OF LOGICAL NAME*; R3 = MATCHING LNB (32 WD BLOCK ADDRESS)2; R4 = PREVIOUS LNB IN LIST (32 WD BLOCK ADDRESS); CC = 1 -> UNSUCCESSFUL MATCH9; 00gff R3 = LOGICAL FITS BELOW THIS LNB (32 WD BLOCK ADDRESS)I9; R4 = LOGICAL FITS ABOVE THIS LNB (32 WD BLOCK ADDRESS)N;E$; R0,R1 IS PRESERVED ACROSS THE CALL;+$LNTBS::( MOV R1,-(SP) ;SAVE THE HASH CELL OFFSET; MOV KISAR6,-(SP) ;SAVE THE CURRENT VALUE OF KERNEL D APR 6W! CALL $MPHSH ;MAP THE HASH TABLEC) BCS 30$ ;IF CS, NO HASH TABLE AVAILABLEL% CLR R4 ;INITIALIZE PREVIOUS POINTERG: ADD #MAP6,R1 ;ADD A KISAR6 OFFSET TO THE HASH TABLE ENTRY( SEC ;ASSUME THAT THERE ARE NO ENTRIES2 MOV (R1),R3 ;GET THE APR BIAS OF THE FIRST ENTRY BEQ 30$ ;IF NO ENTRY EXITI&10$: MOV R3,KISAR6 ;MAP THE NEXT ENTRY? CMPB (R0),MAP6+L.NLNS;ARE THE LENGTHS OF THE ENTRIES THE SAME?+ BLO 30$ ;IF LO, NO - LOGICAL BELONGS HEREV( BEQ 20$ ;IF EQ, MAYBE, CONTINUE CHECKS,15$: MOV R3,R4 ;UPDATE THE PREVIOUS POINTER SEC ;ASSUME NO MORE ENTRIES, MOV MAP6+L.NLNK,R3 ;GET THE NEXT ENTRY BIAS- BEQ 30$ ;IF EQ, NO MORE, ENTRY BELONGS HERET* BR 10$ ;GO BACK AND CHECK THE NEXT ENTRY920$: CALL $LNTST ;CHECK THE TABLE PARAMETERS FOR A MATCHE0 BCS 15$ ;IF CS, THEY DIDN'T MATCH, GET ANOTHER7 CALL $CMPST ;CONDITIONS MATCH, SEE IF LOGICAL IS SAMEA8 BCS 30$ ;IF CS, THEY DON'T - ENTRY BELONGS HERE THOUGH# TST R1 ;IF R1 = 0 THIS IS A MATCH$$ BNE 15$ ;IF NE, TRY THE NEXT ENTRY. TSTB 7(R0) ;SEE IF THIS IS A GENERIC COMPARE4 BEQ 30$ ;IF EQ, IT IS, DON'T COMPARE BLOCK NUMBERSD CMPB 7(R0),MAP6+L.NBLK ;LOGICAL IS CORRECT, IS BLOCK TYPE THE SAME?, BHI 15$ ;IF HI, NO, GO BACK FOR NEXT ENTRY* ;IF LO, CS IS SET - ENTRY BELONGS HERE# ;IF EQ, CC IS CLEAR AND SUCCESS'-30$: MOV (SP)+,KISAR6 ;RESTORE KERNEL MAPPING + MOV (SP)+,R1 ;RESTORE THE HASH CELL OFFSET  RETURND .PAGE;+H; $LNHSH - ROUTINE TO TURN A LOGICAL NAME STRING INTO A WORD OFFSET INTO(; A TO-BE-DETERMINED LOGICAL HASH TABLE; ; INPUTS:C/; R0 - POINTER TO LOGICAL NAME DESCRIPTOR BLOCKB; BLOCK CONTAINS:%; WD 1 - BYTE COUNT OF LOGICAL NAMEI.; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME5; WD 3 - APR BIASED OFFSET TO START OF LOGICAL NAMEO ; OUTPUTS:; R0 - SAME AS INPUT@; R1 - WORD OFFSET FROM START OF HASH TABLE TO CORRECT HASH CELL;PI; ALL CHARACTERS IN THE ASCII RANGE WITHIN THE LOGICAL ARE UPCASED BEFORER ; PROCESSING.A;GH; *************************** TAKE NOTE ********************************;T+; THIS ROUTINE MUST NOT BE CHANGED WITHOUTA/; THE CORRESPONDING CHANGE TO THE SAME ROUTINE 1; IN [70,10]ASNOV.MAC FOR VMR. ANY CHANGES MADED0; HERE AND NOT THERE WILL CAUSE AN INABILITY TO+; FIND AND DELETE LOGICALS CREATED BY VMR.T;H; **********************************************************************;+$LNHSH::% CLR R1 ;INITIALIZE THE OFFSET VALUEI. MOV KISAR6,-(SP) ;SAVE CURRENT KISAR6 MAPPING, MOV R0,-(SP) ;SAVE DESCRIPTOR BLOCK ADDRESS# MOV R2,-(SP) ;SAVE THE INCOMING R2# MOV R3,-(SP) ;SAVE THE INCOMING R3E5 MOV (R0)+,R2 ;GET THE NUMBER OF BYTES IN THE LOGICALT BEQ 20$ ;NONE TO BE PROCESSEDV- MOV (R0)+,KISAR6 ;MAP THE BLOCK TO BE HASHEDI4 MOV (R0)+,R3 ;GET THE OFFSET TO THE FIRST CHARACTER710$: CALL $CVBUC ;GET THE NEXT CHARACTER IN UPPER CASE*8 ADD R5,R1 ;SUM THE UPCASED CHARACTER VALUES OF LOGICAL+ SOB R2,10$ ;ALL THE VALUES OF THE LOGICALR MOV R1,R0 ;SQUARE THE VALUEP CALL $MUL ;(; ASH #-5.,R1 ;SHIFT VALUE TO GET WORD OFFSET RANGE OF 0-31N5 BIC #177701,R1 ;BY TAKING THE MIDDLE 6 BITS OF VALUE(20$: MOV (SP)+,R3 ;RESTORE R3S MOV (SP)+,R2 ;RESTORE R2 3 MOV (SP)+,R0 ;RESTORE THE DESCRIPTOR BLOCK ADDRESSO) MOV (SP)+,KISAR6 ;RESTORE KERNEL MAPPINGF RETURNE .PAGE;+N; $LNTST - ROUTINE TO MATCH THE TABLE PARAMETERS OF A DESCRIPTOR BLOCK AGAINST; AN LNB IN THE LISTE;F ; INPUTS:S/; R0 - POINTER TO LOGICAL NAME DESCRIPTOR BLOCKR; BLOCK CONTAINS:%; WD 1 - BYTE COUNT OF LOGICAL NAMEI.; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME5; WD 3 - APR BIASED OFFSET TO START OF LOGICAL NAME:,; WD 4 - TABLE # TO BE SEARCHED (LOW BYTE)(; BLOCK TYPE NUMBER (HIGH BYTE)9; WD 5 - MATCHING TCB OR UCB DEPENDING ON TYPE OF TABLEP6; R3 - APR BIAS TO THE00g fcDATADATADATADATADATADATADATA START OF AN LNB IN A TABLE LIST; F; KISAR6 MUST MAP THE LNB CURRENTLY IN R3 WHEN THIS ROUTINE IS INVOKED; ; OUTPUTS:7; CC = 0 -> TABLE TYPES AND UCB/TCB/GROUP NUMBERS MATCHB/; CC = 1 -> ENTRIES DO NOT MATCH IN SOME REGARDN;I;-$LNTST::" MOV R1,-(SP) ;SAVE THE CURRENT R1) MOV 6(R0),R1 ;GET THE TABLE NUMBER IN R1C? CMPB #LT.TSK,R1 ;IS THE DESCRIPTOR ENTRY IN THE THE TASK TABLE % BNE 20$ ;IF NE, NO, CONTINUE CHECKS5710$: CMP MAP6+L.NTCB,10(R0);DO THE TCB/UCB VALUES MATCH-( BEQ 40$ ;IF EQ, YES, EXIT SUCCESSFULLY( BR 30$ ;IF NE, NO, EXIT UNSUCCESSFULLY320$: CMPB #LT.SES,R1 ;IS THIS A SESSION TABLE CHECKT BEQ 10$ ;IF EQ, YESY- CMPB #LT.GRP,R1 ;IS THIS A GROUP TABLE CHECK-0 BNE 40$ ;IF NE, NO, IT IS A SYSTEM TABLE CHECK; CALL GTUIC ;GET THE PROTECTION UIC GROUP CODE FROM $TKTCBG@ CMPB MAP6+L.NGRP,R1 ;CHECK THE GROUP AGAINST THE PROTECTION UIC# BEQ 40$ ;IF EQ, THEY ARE THE SAME 30$: SEC40$: MOV (SP)+,R1 ;RESTORE R1P RETURN1 .PAGE;+C; $DCBTA - ROUTINE TO TURN A BINARY VALUE INTO AN ASCII TEXT STRING ;F ; INPUTS:I); R0 - NUMBER TO BE TRANSLATED INTO ASCIIT3; R3 - POINTER TO BUFFER TO STORE TRANSLATED NUMBERC; ; OUTPUTS:$; R3 - POINTS PAST THE NUMBER STRING;IH; THIS ROUTINE WILL NOT TRANSLATE A ZERO UNIT NUMBER INTO AN ASCII DIGIT;O;-3$DCBTA::BIC #177400,R0 ;PREVENT SIGN PROPAG. IN ASH ! ;(0,R1 ;ADD SIZE OF HEADER,DPB,BUFFEREDN ;STORAGE AREAV ; AND RETURNED SIZE BUFFER3 MOV R1,R4 ;SAVE SIZE OF REQUEST PACKET FOR CPSEN$ 0 ADD #77,R1 ;ROUND R1 TO NEAREST 32. WORD BLOCK ASH #-6,R1 ;9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT START0 MOV R3,R5 ;SAVE DPB POINTERG% CALL $CPALO ;GET BUFFER FROM CPRBUF;;Z+; FILL IN REQUEST PACKET AND SEND TO CPRAMER;P MOV R0,KISAR6 ;MAP PACKET$ MOV #MAP6,R1 ;GET ADDRESS OF HEADER+ MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUEST, CLRB H$ICNT(R1) ;NO ITEMS! ADD #P$DPB,R1 ;POINT TO DPB AREA$ MOV -2(R5),(R1)+ ;COPY DIC AND SIZE3 MOV (R5),(R1)+ ;COPY SUBFUNCTION CODE AND MODIFIER# CLR (R1)+ ;RESERVED WORDB MOV #,(R1)+ ;ADDRESS OF DEFAULT DIRECTORY ;BUFFER 2 MOV 6(R5),(R1)+ ;SIZE OF DEFAULT DIRECTORY BUFFER, CLR (R1)+ ;ASSUME NO RETURN SIZE REQUESTED$ TST 10(R5) ;SIZE BUFFER SPECIFIED? BEQ 110$ ;IF EQ NO? MOV #,-(R1) ;ADDRESS OF USER SIZE BUFFER) TST (R1)+ ;POINT TO NEXT WORDT8110$: MOV 4(R5),(R1)+ ;STORE ADDRESS OF DIRECTORY BUFFER: MOV 10(R5),(R1) ;STORE ADDRESS OF USER SIZE BUFFER (OR 0)- CPSEN$ #SN$DIR,R0,R4 ;SEND REQUEST TO CPRAMEO;; GET RESPONSE PACKET AND+!; TRANSFER BUFFERS INTO USER AREAO;" MOV R0,-(SP) ;SAVE PACKET ADDRESS MOV R0,KISAR6 ;MAP PACKET/ CMP #IS.SUC,MAP6+H$STAT ;WAS SUCCESS RETURNED? BEQ 125$ ;IF EQ YESE5 CMP #IE.RBS,MAP6+H$STAT ;WAS IS JUST A SIZE PROBLEM?Z BNE 200$ ;IF NE FATAL ERROR 7125$: MOV MAP6+H$SIZE+GD$SIZ,R0 ;ADDRESS OF USER BUFFER / MOV MAP6+H$SIZE+10,R1 ;SIZE OF BUFFER FROM DPBM CALL $ACHKB ;DO ADDRESS CHECKU BCS 240$ ;IF CS ERROR, CALL $RELOC ;GET BIAS AND OFFSET OF BUFFER' MOV R1,R3 ;SET UP DEST BIAS FOR BLXIOF% MOV R2,R4 ;SET UP DEST DISPLACEMENT,* MOV (SP),R1 ;SET UP SOURCE BIAS FOR APR5B MOV #,R2 ;SET UP SOURCE DISPLACEMENT) MOV MAP6+H$SIZE+10,R0 ;GET SIZE FROM DPB;& TST MAP6+H$SIZE+12 ;WAS SIZE RETURNED BEQ 130$ ;IF EQ NO MOV R0,-(SP) ;SAVE BUFFER SIZEA4 MOV MAP6+H$SIZE00g fcDATADATADATADATADATADATADATA+GD$SIZ+GD$BUF,R5 ;GET RETURNED SIZE# SUB R5,(SP)+ ;WILL THE STRING FIT?  BMI 130$ ;IF MI NO MOV R5,R0 ;USE RETURNED SIZE2130$: CALL $BLXIO ;RETURN EQUIVALENCE NAME STRING' TST MAP6+H$SIZE+12 ;WAS SIZE RETURNED?U BEQ 200$ ;IF EQ NO/ MOV #200$,-(SP) ;SPECIFY $SGFIN RETURN ADDRESS# CALL $SGFIN ;INHIBIT TRAPS7 MOV MAP6+H$SIZE+GD$SIZ+GD$BUF,-(SP) ;GET RETURNED SIZEE8 MOV MAP6+H$SIZE+GD$SIZ+2,R3 ;GET ADDRESS OF USER BUFFER MTPD (R3) ;RETURN IT TO USER RETURN ;RETURN FROM $SGFINP(200$: MOV (SP)+,R0 ;GET BUFFER BIAS BACK! CALLR $CPDEA ;DEALLOCATE BUFFERF(240$: MOV (SP)+,R0 ;GET BUFFER BIAS BACK CALL $CPDEA ;DEALLOCATE BUFFER# DRSTS D.RS98 ;ADDRESS CHECK ERRORT  .ENDC ; C$$RDR ,10$: ADD #4,R3 ;POINT TO WD 3 OF THE DPB - CALL ACROB ;CALCULATE BIAS AND DISPLACEMENT MOV R3,$TEMP0 ;SAVE DPB POINTER& MOV R0,-(SP) ;SAVE SIZE OF DDS BUFFER) MOV R1,R3 ;SET UP BUFFER BIAS FOR BLXIOM MOV R2,R4 ;SET UP DISPLACEMENT) MOV R5,R1 ;SET UP BIAS OF CONTEXT BLOCK, MOV R5,KISAR6 ;MAP CTX BLOCKR CLR R5 ;) BISB C.DDSL+MAP6,R5 ;GET THE DDS LENGTHU( SUB R5,(SP) ;WILL THE NAME STRING FIT?, BMI 20$ ;IF HI NO (USE ENTIRE USER BUFFER)+ MOVB C.DDSL+MAP6,R0 ;ADJUST AMOUNT TO COPY 2 MOV #C.DDS+MAP5,R2 ;SET UP DISPLACEMENT OF STRING020$: CALL $BLXIO ;RETURN EQUIVALENCE NAME STING% MOV $TEMP0,R3 ;GET SAVED DPB POINTERP. TST (R3) ;WAS AN ADDRESS SPECIFIED TO RETURN/ ;THE LENGTH (BYTE COUNT) OF THE EQUIVALENCEA ;NAME STRING INTO? BEQ 30$ ;IF EQ NOL. MOV #30$,-(SP) ;SPECIFY $SGFIN RETURN ADDRESS CALL $SGFIN ;INHIBIT TRAPS$ CLR -(SP) ;CLEAR LOCATION ON STACK' BISB C.DDSL+MAP6,(SP) ;GET SIZE OF ENSU MTPD @(R3) ;RETURN IT TO USERD RETURN0930$: MOV (SP)+,R0 ;GET SIZE DIFERENCE BETWEEN USER BUFFERA ;AND STRING+ BPL 40$ ;IF PL ENTIRE STRING WAS RETURNEDI; DRSTS D.RS15 ;RETURN DIRECTIVE STATUS--'BUFFER TOO SMALL'N 40$: RETURNI .PAGE ;+;N7; $LNFSD -- SET UP DEFAULT DIRECTORY STRING SUBFUNCTIONT;?; THIS SUBFUNCTION SETS UP A SPECIFIC DEFAULT DIRECTORY STRING.EA; IF SD.LOG IS SPECIFIED, THE DDS IN THE CONTEXT BLOCK POINTED TOAA; BY THE USER TI: UCB WILL BE MODIFIED. IF THE MODIFIER IS ZERO,IC; THE DDS IN THE CONTEXT BLOCK POINTED TO BY THE ISSUING TASK'S TCBSD; WILL BE MODIFIED. IF SD.BYE IS SPECIFIED, THE USERS CONTEXT BLOCK; WILL BE DELETED.;E ; INPUTS:I; R3 = ADDRESS OF DPB+2A1; R5 = THE ADDRESS OF THE TCB OF THE CURRENT TASKL;D; AFTER CALL TO ACROB:%; R0 = SIZE OF USER BUFFER (IN BYTES)B; R1 = BIAS OF USER BUFFER'; R2 = APR6 DISPLACEMENT TO USER BUFFERS;E;I ; OUTPUTS:6; THE DEFAULT DIRECTORY STRING IS CREATED OR SUPERSEDS5; THE EXISTING STRING. IF A NULL STRING IS SPECIFIED, 5; (I.E. NO BUFFER ADDRESS SPECIFIED IN THE DIRECTIVE)C<; THEN THE DEFAULT DIRECTORY STRING FOR THE ISSUING TERMINAL ; IS DELETED.I;B;E;-$LNFSD::! CLR $TEMP0 ;ASSUME NO CTX BLOCK 6 CMPB #SD.MOD,1(R3) ;IS THIS A TASK MODIFY REQUEST?  BEQ 1000$ ;IF EQ YES7 CMPB #SD.MUD,1(R3) ;IS THIS A TERMINAL MUDIFY REQUEST?  BNE 4$ ;IF NE NO,CONTINUE T' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING % MOV T.UCB(R5),R1 ;GET TI UCB ADDRESSS5 MOV U.CTX(R1),-(SP) ;SAVE UCB'S DDS ADDRESS (IF ANY)E BR 1010$ ;ENTER COMMON CODER1000$:+ MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING D3 MOV T.CTX(R5),-(SP) ;GET TASK DDS ADDRESS (IF ANY)D1010$:# MOV #2,R0 ;PRETEND 2 CHAR DDS U+ MOV #"[],R1 ;PRETEND IT'S NONAMED MODE S# MOV (SP)+,KISAR6 ;GET DDS ADDRESS$+ BEQ 2$ ;IF EQ NO CONTEXT, NONAMED MODE T+ MOVB MAP6+C.DDSL,R0 ;GET LENGTH OF DDS C MOV MAP6+C.DDS,R1 ;GET DDS )2$: MOV (SP)+,KISAR6 ;RESTORE MAPPING T CMP #2,R0 ;LENGTH 2? R" BNE 3$ ;IF NE NO, KEEP GOING  CMP #"[],R1 ;STRING="[]" C" BNE 3$ ;IF NE NO, KEEP GOING , .IF DF C$$RDR ;REMOTE DIRECTORY SUPPORT 1 BIT #F5.RDR,$FMSK5 ;USING REMOTE DIRECTORIES? U& BEQ 25$ ;NO. JUST EXIT AT THIS TIME MOV 6(R3),R1 ;GET DDS LENGTH & BEQ 185$ ;IF EQ ILLEGAL SIZE FOR DDS. CMP #11.,R1 ;MAX L00gffENGTH OF DDS BUFFER IS 11. BGE 199$ ;OK, CONTINUE BR 185$ ;BUFFER TOO LONG25$: .ENDC ;C$$RDR " DRSTS D.RS00 ;RETURN IS.CLR 3$:  ASSUME SD.MOD,7 ASSUME SD.MUD,8.1= BICB #SD.MOD,1(R3) ;CLEAR THE SD.MOD BITS IN THE SUBFUNCTION 0 ;CODE. THIS SHOULD LEAVE 0 IF SD.MOD, SD.MUD ;(NOT ZERO) IF SD.MUD.4 BEQ 4$ ;IF EQ WAS SD.MOD, 0 IS CORRECT REPLACEMENT/ MOVB #SD.LOG,1(R3) ;COMMUTE SD.MUD INTO SD.LOGT 4$: ;# CMPB #SD.TI,1(R3) ;SD.TI MODIFIER?,( BEQ 150$ ;YES. GO CLEAR BUFFER LENGTH% CMPB #SD.BYE,1(R3) ;SD.BYE MODIFIER?  BNE 160$ ;NO' MOV T.UCB(R5),R0 ;GET TI:UCB ADDRESSU& BIT #DV.PSE,U.CW1(R0) ;PSEUDO DEVICE? BNE 165$ ;YES. NOT ALLOWED150$:S! CLR R1 ;NO DDS LENGTH IN SD.BYEI BR 198$ ;CONTINUE 160$:. MOV 6(R3),R1 ;GET DDS LENGTH & BEQ 185$ ;IF EQ ILLEGAL SIZE FOR DDS% CMPB #SD.LOG,1(R3) ;SD.LOG MODIFIER?P BNE 170$ ;NO' MOV T.UCB(R5),R0 ;GET TI:UCB ADDRESST& BIT #DV.PSE,U.CW1(R0) ;PSEUDO DEVICE? BEQ 180$ ;NO. CONTINUEE165$:C' DRSTS D.RS21 ;RETURN - NAME NOT FOUNDS170$:O TSTB 1(R3) ;TEST MODIFIERV1 BEQ 180$ ;IT IS ZERO. OTHERWISE ERROR BECAUSE U) ; HAS NOT BEEN SD.TI, SD.BYE, SD.LOG. DRSTS D.RS99 ;INVALID MODIFIER180$:L. CMP #11.,R1 ;MAX LENGTH OF DDS BUFFER IS 11. BGE 190$ ;OK, CONTINUE*185$: DRSTS D.RS89 ;INVALID BUFFER LENGTH190$:  MOV R1,-(SP) ;SAVE DDS LENGTH! MOV R3,-(SP) ;SAVE DPB+2 POINTER ' ADD #4,R3 ;POINT TO WORD 3 OF THE DPB1- CALL ACROB ;CALCULATE BIAS AND DISPLACEMENTU3 SUB #MAP6-MAP5,R2 ;MAKE BIAS APR5 RATHER THAN APR6! CALL $CRCTX ;CREATE A CTX BLOCKV BCC 195$ ;SUCCESSE) DRSTS D.RS1 ;FAILED TO CREATE. NO POOLN195$: & MOV R3,$TEMP0 ;SAVE CTX BLOCK POINTER$ MOV (SP)+,R3 ;RESTORE DPB+2 POINTER! MOV (SP)+,R1 ;RESTORE DDS LENGTH198$:0) .IF DF C$$RDR ; REMOTE DIRECTORY SUPPORTL; BIT #F5.RDR,$FMSK5 ;ARE WE USING REMOTE DIRECTORY STORAGE?V BNE 199$ ;IF NE YES JMP 1$ ;JUST DO LOCAL SDIR 199$: ; L"; GET A REQUEST PACKET FROM CPRBUF;M9 CMP R1,#LN$SIZ ;IS SIZE TOO BIG? NOTE CPRSX WILL ALLOW E- ; 255 BUT RSX WILL ONLY ALLOW 11 FOR NOWD BHI 185$ ;IF HI YES.A ADD #,R1 ;ADD SIZE OF HEADER,DPB,EXTRA STORAGE P5 MOV R1,R4 ;SAVE SIZE OF REQUEST PACKET FOR CPSEN$ S0 ADD #77,R1 ;ROUND R1 TO NEAREST 32. WORD BLOCK ASH #-6,R1 ; MOV R3,R5 ;SAVE DPB POINTERE9 MOV #AL$BCK!AL$IMP,R0 ;BLOCK THE TASK, DO IMPLICIT START1% CALL $CPALO ;GET BUFFER FROM CPRBUF $ MOV R5,R3 ;RESTORE DPB POINTER ;T; FILL IN REQUEST PACKET;$# MOV R4,-(SP) ;SAVE SIZE OF REQUESTL MOV R0,-(SP) ;SAVE PACKET BIAS  MOV R0,KISAR6 ;MAP PACKET$ MOV #MAP6,R1 ;GET ADDRESS OF HEADER+ MOVB #HT$DIR,H$TYPE(R1) ;DIRECTIVE REQUESTE CLRB H$ICNT(R1) ;NO ITEMS! ADD #P$DPB,R1 ;POINT TO DPB AREAD$ MOV -2(R5),(R1)+ ;COPY DIC AND SIZE4 MOV (R5)+,(R1)+ ;COPY SUBFUNCTION CODE AND MODIFIER MOV (R5)+,(R1)+ ;RESERVED WORDH> MOV #,(R1)+ ;ADDRESS OF DEFAULT DIR BUFFER ) MOV (R5)+,R0 ;USER ADDRESS OF BUFFER T3 MOV (R5),(R1)+ ;SIZE OF DEFAULT DIRECTORY BUFFER I) MOV R0,(R1)+ ;ADDRESS OF USER BUFFER B MOV R3,(R1) ;DPB POINTER # MOV $TEMP0,2(R1) ;SAVE CTX POINTER! CMPB #SD.BYE,1(R3) ;SD.BYE?  BEQ 220$ ;IF EQ YES CMPB #SD.TI,1(R3) ;SD.TI?  BEQ 220$ ;IF EQ YES 1 MOV (R5),R1 ;SIZE OF BUFFER FOR ADDRESS CHECK C! CALL $ACHKB ;CHECK ADDRESS ( BCS 300$ ;IS CS ERRORV/ CALL $RELOC ;GET SOURCE BIAS AND DISPLACEMENT A SUB #MAP6-MAP5,R2 ;MAKE SOURCE DISPLACEMENT AN APR5 DISPLACEMENT) MOV (SP),R3 ;GET DEST BIAS8 MOV #,R4 ;GET DEST DISPLACEMENT / MOV MAP6+P$DPB+10,R0 ;GET SIZE OF TRANSFER S2 CALL $BLXIO ;TRANSFER DIRECTORY SPEC INTO BUFFER, CMP #2,MAP6+P$DPB+10 ;COULD THIS BE []?  BNE 220$ ;IF NE NO - CMP #"[],MAP6+H$SIZE+SD$SIZ+6 ;IS IT []?  BNE 220$ ;IF NE NO . ADD #2,2(SP) ;INCLUDE EXTRA WORD IN PACKET # MOV $TKTCB,R5 ;GET TCB ADDRESS S& MOV T.UCB(R5),R5 ;GET UCB ADDRESS 4 MOV U.LUIC(R5),MAP6+H$SIZ00g fcDATADATADATADATADATADATADATAE+SD$SIZ+10 ;STORE UIC 220$: # MOV (SP)+,R0 ;GET PACKET BIAS BACK$% MOV (SP)+,R4 ;GET PACKET LENGTH BACKV- CPSEN$ #SN$DIR,R0,R4 ;SEND REQUEST TO CPRAMEL MOV R0,KISAR6 ;MAP PACKET I5 MOV MAP6+P$DPB+SD$SIZ+4,$TEMP0 ;GET CTX POINTER BACK ( TST MAP6+H$STAT ;IS STATUS SUCCESS?  BMI 400$ ;IF MI, ERROR & MOV #MAP6+P$DPB,R1 ;POINT TO DPB . MOV SD$SIZ+2(R1),R3 ;GET DPB POINTER BACK > MOV SD$SIZ(R1),6(R1) ;PUT ADDRESS OF USER BUFFER BACK IN DPB ! MOV R3,R5 ;COPY DPB POINTER D+ SUB #2,R5 ;BACK UP TO BEGINNING OF DPB . MOV #SD$SIZ/2,R2 ;GET SIZE OF DPB IN WORDS 250$: $ MOV (R1)+,(R5)+ ;COPY DPB BACK " SOB R2,250$ ;LOOP UNTIL DONE # MOV R3,-(SP) ;SAVE DPB POINTER X$ CALL $CPDEA ;DEALLOCATE PACKET & MOV (SP)+,R3 ;RESTORE DPB POINTER ( MOV $TKTCB,R5 ;GET TASK TCB ADDRESS . CMPB 1(R3),#SD.MOD ;IS THIS SD.MOD OR SD.MUD?; VERY IMPORTANT NOTE.(; D; THE FOLLOWING BRANCH DEPENDS ON THE FACT THAT SD.MUD > SD.MOD, ANDC; THAT SD.ANYTHING_ELSE ISN'T. IF ANOTHER SD. IS ADDED, THIS BRANCHR; LOGIC MUST BE CHANGED. BLT 1$ ;IF NE NO V. RETURN ;MAKE SURE WE STAY IN NONAMED MODE +300$: MOV $TEMP0,R1 ;POINT TO ALLOCATED CTX  BEQ 310$ ;NONE WAS ALLOCATED CALL $DLCTX ;DELETE IT#310$: MOV (SP)+,R0 ;GET PACKET BIASV TST (SP)+ ;CLEAN OFF STACK CALL $CPDEA ;DEALLOCATE BUFFER DRSTS D.RS98 ;ADDRESS ERROR 400$: / MOV $TEMP0,R1 ;POSSIBLY POINT TO ALLOCATED CTXA BEQ 410$ ;NONE WAS ALLOCATED+ CALL $DLCTX ;IT WAS ALLOCATED. DELETE ITD410$:B/ CALLR $CPDEA ;DEALLOCATE PACKET AND RETURN N1$:  .ENDC ; C$$RDRM# TSTB 1(R3) ;CHECK MODIFIER IN DPB  BEQ 30$ ;USE CTX FROM TCB ( CMPB #SD.TI,1(R3) ;WAS SD.TI SPECIFIED? BNE 10$ ;IF NE, NO6 MOV T.CTX(R5),-(SP) ;GET TASK'S CONTEXT BLOCK POINTER MOV T.UCB(R5),R1 ;GET TI: UCB8 CMP U.CTX(R1),(SP)+ ;IS TERMINAL CONTEXT SAME AS TASK? BNE 5$ ;IF NE, MORE WORK TO DO RETURN ;RETURN WITH SUCCESS5$:T' MOV T.CTX(R5),R1 ;GET TERMINAL CONTEXT + CALL $DLCTX ;DELETE TASKS CURRENT CONTEXTB$ MOV T.UCB(R5),R1 ;GET TI: UCB AGAIN> MOV U.CTX(R1),T.CTX(R5) ;SET TASK CONTEXT TO TERMINAL CONTEXT BEQ 65$ ;IF EQ, DONE MOV KISAR6,-(SP) ;SAVE MAPPINGR( MOV U.CTX(R1),KISAR6 ;MAP CONTEXT BLOCK- INCB C.REF+140000 ;INCREMENT REFERENCE COUNTB" MOV (SP)+,KISAR6 ;RESTORE MAPPING" BR 65$ ;INDICATE NAME SUPERCEDED*10$: MOV T.UCB(R5),R5 ;GET TI: UCB ADDRESS;,3; IF SD.BYE, DELETE CONTEXT BLOCK AND RETURN STATUST;M& CMPB #SD.BYE,1(R3) ;SD.BYE SPECIFIED?( BNE 30$ ;IF NE, NO. MUST BE AN SD.LOG0 MOV U.CTX(R5),R1 ;GET USER CONTEXT BLOCK (BIAS)# CALL $DLCTX ;DEALLOCATE CTX BLOCK * CLR U.CTX(R5) ;ZERO CONTEXT BLOCK POINTER % .IF DF C$$RDR ;REMOTE DIRECTORY R = BIT #F5.RDR,$FMSK5 ;ARE WE USING REMOTE DIRECTORY STORAGE? ( BEQ 15$ *14$: RETURN ;DSW ALREADY SET BY KXDRV 15$:  .ENDC ;C$$RDR 2 DRSTS D.RSP3 ;RETURN STATUS OF 'NAME SUPERSEDED'30$:% MOV R3,R2 ;MOVE DPB+2 POINTER TO R2. MOV $TEMP0,R3 ;PREVIOUSLY ALLOCATED CTX BLOCK* CMPB #SD.LOG,1(R2) ;WAS SD.LOG SPECIFIED? BNE 40$ ;IF NE, NO5 MOV U.CTX(R5),R1 ;GET CONTEXT BLOCK POINTER FROM UCBT BEQ 60$ ;IF EQ, NO CURRENT CTX! CALL $DLCTX ;DELETE OLD CONTEXTB# BR 60$ ;UPDATE CTX POINTER IN UCBE940$: MOV T.CTX(R5),R1 ;GET CONTEXT BLOCK POINTER FROM TCBW BEQ 50$ ;IF EQ, NO CURRENT CTX! CALL $DLCTX ;DELETE OLD CONTEXT 150$: MOV R3,T.CTX(R5) ;PUT NEW CTX POINTER IN TCBR % .IF DF C$$RDR ;REMOTE DIRECTORY = BIT #F5.RDR,$FMSK5 ;ARE WE USING REMOTE DIRECTORY STORAGE? S BEQ 55$ & RETURN ;DSW ALREADY SET BY KXDRV 55$:  .ENDC ;C$$RDR , DRSTS D.RSP3 ;STATUS OF 'NAMED SUPERCEDED'160$: MOV R3,U.CTX(R5) ;PUT NEW CTX POINTER IN UCBM MOV KISAR6,-(SP) ;SAVE MAPPINGK! MOV R3,KISAR6 ;MAP CONTEXT BLOCKQ1 MOV #C.DDS+140001,R0 ;POINT TO FIRST CHAR OF DDS  MOV R5,-(SP) ;SAVE UCB ADDRESSC5 CALL CNTB ;CONVERT DDS TO BINARY EQUIV, IF POS00ggfSIBLE " MOV (SP)+,R5 ;RESTORE UCB ADDRESS" MOV (SP)+,KISAR6 ;RESTORE MAPPING! BCC 62$ ;IF CC, CONVERSION DONE ; MOV U.LUIC(R5),U.UIC(R5) ;SET DEFAULT UIC = PROTECTION UICN BR 65$ ;<62$: MOV R1,U.UIC(R5) ;SET DEFAULT UIC = BINARY EQUIV OF DDS65$: % .IF DF C$$RDR ;REMOTE DIRECTORY M = BIT #F5.RDR,$FMSK5 ;ARE WE USING REMOTE DIRECTORY STORAGE? V BEQ 68$ & RETURN ;DSW ALREADY SET BY KXDRV 68$:  .ENDC ;C$$RDR . DRSTS D.RSP3 ;STATUS OF 'NAME SUPERCEDED' ;6; CNTB - CONVERT A NAMED DIRECTORY TO A BINARY WORD IF#; IN THE FORM OF [G,M] OR [GGGMMM](; ; INPUTS: R0 = BUFFER POINTER;#; OUTPUTS: IF CC, R1 = BINARY WORDT3; IF CS, INDICATES NAMED DIRECTORY NOT CONVERTED.;DCNTB: % CLR -(SP) ; USE STACK FOR FLAG WORDT( MOV #3,R4 ; NUMBER OF CHARS TO CONVERT" CLR R1 ; CLEAR ACCUMULATED VALUE MOVB #',,R2 ; STOP ON A COMMAR CALL 100$ ; CONVERT. BCS 20$ ; BR IF INVALID  MOV R1,R3 ; STORE RESULT BEQ 20$ ; IF EQ, INVALID( MOV #3,R4 ; NUMBER OF CHARS TO CONVERT" CLR R1 ; CLEAR ACCUMULATED VALUE% CMPB #',,(R0) ; POINTING TO A COMMA?U BNE 10$ ; IF NE, NOR TSTB (R0)+ ; SKIP THE COMMAI INC (SP) ; INDICATE COMMA SEEN%10$: MOVB #'],R2 ; STOP ON A BRACKETN CALL 100$ ; CONVERT  BCS 20$ ; BR IF INVALID#' SWAB R3 ; PUT GROUP CODE IN HIGH BYTER BIS R3,R1 ; PUT INTO RESULTM BEQ 20$ ; IF EQ, INVALID! CMPB #'],(R0)+ ; ENDING BRACKET?$ BNE 20$ ; IF NE, ERROR TST (SP) ; DID WE SEE A COMMA? BNE 15$ ; IF NE, YES# TST R4 ; VERIFY WE PARSED 3 CHARSR BNE 20$ ; IF NE, - ERROR/15$: TST (SP)+ ; CLEAN STACK, INDICATE SUCCESS1# BR 30$ ; RETURN TO CALLER WITH CC 20$: TST (SP)+ ; CLEAN STACKT) SEC ; INDICATE DIRECTORY NOT CONVERTED $30$: RETURN ; AND RETURN TO CALLER#100$: MOVB (R0)+,R5 ; GET NEXT CHARR( CMPB R2,R5 ; IS THIS ENDING CHARACTER? BEQ 115$ ; BR IF YES& SUB #'0,R5 ; SUBTRACT CHARACTER BIAS BMI 120$ ; IF MI, ILLEGAL CHAR" CMPB R5,#8. ; CHECK AGAINST BASE" BHIS 120$ ; IF HIS, ILLEGAL CHAR" MUL #8.,R1 ; MULT RESULT BY BASE ADD R5,R1 ; ACCUMULATE RESULTP SOB R4,100$ ; GO AGAIN-110$: CMP #377,R1 ; NUMBER GREATER THAN 377?  RETURN ; RETURN TO ABOVEC115$: TSTB -(R0) ; BACK UPR$ CMP #3,R4 ; DID WE PARSE ANYTHING? BNE 110$ ; IF NE, YES - OK*120$: SEC ; INVALID CHARACTER TO CONVERT RETURN ; RETURN TO ABOVEB .ENDC ;DF N$$DIRS .END ; SUBTRACT CHARACTER BIAS BMI 120$ ; IF MI, ILLEGAL CHAR" CMPB R5,#8. ; CH .TITLE DRMAP$ .IDENT /05.07/E;R6; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;E<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;T); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:R; ; B. S. MCCARTHY; J. M. LAWLER;++; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:M; ; J. R. KAUFFMAN;;+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:A;C; B. S. MCCARTHY;R*; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY; J. W. BERZLE; J. R. KAUFFMAN; B. S. MCCARTHY;A+; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY:E;; B. S. MCCARTHY;S+; MODIFIED FOR RSX-11M-PLUS VERSION 4.2 BY: ;C ; B. S. MCCARTHY 30-NOV-88 05.07;M3; BM417 -- FIX CALCULATION IN FAST MAP CALCULATIONE;O .PAGE; &; **-CSM DISPATCHER-DISPATCH CSM ENTRY; D; THIS MODULE IS MAPPED AT SUPERVISOR MODE VIRTUAL ZERO ON DETECTINGG; THE PRESENCE OF THE FIRST SUPERVISOR MODE WINDOW IN A CONTEXT SWITCH.OF; THIS ALLOWS TASKS TO HAVE SUPER MODE LIBRARIES AT ARBITRARY STARTING*; ADDRESSES, DESPITE THE OPERATION OF CSM.;P$; * * * N O T E W E L L * * *;YF; THIS CODE MUST BE AT VIRTUAL 0 IN SUPERVISOR MODE. SINCE WE JUST MAPH; THIS COMMON AS 32WORDS RO IN SYSXT, THIS CODE MUST BE AT THE BEGINNING; OF THIS COMMON. ;C4; THE ENTRY VECTOR TO SUPERVISOR MODE IS AS FOLLOWS:;P; MOV #COMPLETION-ROUTINE,-(SP)R; CSM #ROUTINE;HC; NOTE: IMMEDIATE MODE EMULATION OF THE CSM INSTRUCTION IS REQUIRED; IN THE EXECUTIVE.00g fcDATADATADATADATADATADATADATA;VC; THE CSM INSTRUCTION TRANSFERS CONTROL TO THE ADDRESS CONTAINED INEH; SUPERVISOR MODE VIRTUAL 10. AT THIS POINT THE STACK IS THE FOLLOWING:; ; (SP) ROUTINE ADDRESS); 2(SP) PC (PAST END OF TRANSFER VECTOR)M(; 4(SP) PS WITH CONDITION CODES CLEARED#; 6(SP) COMPLETION-ROUTINE ADDRESSN; 10(SP) RETURN ADDRESSR; >; A ROUTINE ADDRESS OF 0 IS SPECIAL CASED TO SUPPORT RETURN TOE; SUPERVISOR MODE FROM A USER MODE DEBUGGING AID (ODT). IN THIS CASEN; STACK IS THE FOLLOWING:I;H ; (SP) ZEROV$; 2(SP) PC FROM CSM TO BE DISCARDED$; 4(SP) PS FROM CSM TO BE DISCARDED+; 6(SP) SUPER MODE PC SUPPLIED BY DEBUGGERS+; 10(SP) SUPER MODE PS SUPPLIED BY DEBUGGERA;E .IF DF S$$LIB .ENABL LSBS8; BASE ADDRESS USED FOR RELATIVE ADDRESSES WITHIN MODULEBASE:LA; DEBUGGER RETURN TO SUPER MODE ENTRY. MUST START AT VIRTUAL ZEROR. CMP (SP)+,(SP)+ ;CLEAN OFF PS AND PC FROM CSM;VC; THIS ENTRY POINT PERFORMS THE NECESSARY STACK MANAGEMENT TO ALLOWC;; AN RTI FROM SUPER MODE TO EITHER SUPER MODE OR USER MODE.M ; THE IS AS REQUIRED FOR AN RTI:;M; (SP) SUPER MODE PCS; 2(SP) SUPER MODE PSE$ TST 2(SP) ;RETURNING TO USER MODE? BR 70$ ;JOIN COMMON CODEE; CSM TRANSFER ADDRESS, THIS WORD MUST BE AT VIRTUAL 10 IN SUPER MODES( .WORD CSMSVR-BASE ;CSM DISPATCHER ENTRY; DISPATCH CSM ENTRYBCSMSVR: MOV 6(SP),2(SP) ;SET COMPLETION ROUTINE ADDRESS FOR RETURN4 JMP @(SP)+ ;TRANSFER TO SUPER MODE LIBRARY ROUTINE$; EXIT DISPATCHER FOR ODT AND $SRTI:70$: BPL 80$ ;IF PL YES3 MOV #6,-(SP) ;NUMBER OF BYTES FOR (SP), PS, AND PC ( ADD SP,(SP) ;COMPUTE CLEAN STACK VALUE( MTPI SP ;SET UP PREVIOUS STACK POINTER.80$: RTT ;RETURN TO PREVIOUS MODE AND CALLER .DSABL LSBE .ENDC ; DF S$$LIB .PAGE;1K; THE FOLLOWING DIRECTIVES RECEIVE AS INPUT POINTERS TO A WINDOW DEFINITIONMJ; BLOCK, WHICH SERVES AS A COMMUNICATION AREA BETWEEN THE ISSUING TASK AND>; THE EXECUTIVE. THE FORMAT OF THE WINDOW DEFINITION BLOCK IS:;S4; -------------------------------------------------; W.NID ! ! !M!; W.NAPR ! BASE APR ! WINDOW ID ! ; ! ! !4; !-----------------------------------------------! ; ! !R*; W.NBAS ! VIRTUAL BASE ADDRESS (BYTES) ! ; ! !B4; !-----------------------------------------------! ; ! !S&; W.NSIZ ! WINDOW SIZE (32W BLOCKS) ! ; ! ! 4; !-----------------------------------------------! ; ! !K; W.NRID ! REGION ID !F ; ! !W4; !-----------------------------------------------! ; ! !--; W.NOFF ! OFFSET IN PARTITION (32W BLOCKS) !! ; ! !I4; !-----------------------------------------------! ; ! !-(; W.NLEN ! LENGTH TO MAP (32W BLOCKS) ! ; ! !S4; !-----------------------------------------------! ; ! !-; W.NSTS ! STATUS WORD ! ; ! !O4; !-----------------------------------------------! ; ! !--; W.NSRB ! SEND/RECEIVE BUFFER ADDR (BYTES) !! ; ! ! 4; -------------------------------------------------;-; MACRO LIBRARY CALLS ; .IF DF P$$LAS# .MCALL HDRDF$,PCBDF$,TCBDF$,WDBDF$I1 HDRDF$ ;DEFINE HEADER AND WINDOW BLOCK OFFSETS-2 PCBDF$ ;DEFINE PCB AND ATTACHMENT DESCR OFFSETS TCBDF$ ;DEFINE TCB OFFSETS-1 WDBDF$ ;DEFINE WINDOW DEFINITION BLOCK OFFSETS  .PAGE;+!; **-$DRCRW-CREATE ADDRESS WINDOWO; J; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ALLOCATE AN ADDRESS WINDOW IN THEG; HEADER OF THE ISSUING TASK, UNMAPPING AND ELIMINATING ANY OVERLAPPING-A; ADDRESS WINDOWS OF THE SAME TYPE, AND OPTIONALLY TO MAP THE NEW ; WINDOW.L; ; DPB FORMAT:$;B"; WD. 00 -- DIC(117.),DPB SIZE(2.).; WD. 01 -- ADDRESS OF WINDOW DEFINITION BLOCK;N ; INPUTS:T;H9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ,; R3=ADDRESS OF THE WINDOW DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 2; INPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:; W.NAPR=BASE APR OF REGION.N); W.NSIZ=DESIRED SIZE OF ADDRESS WINDOW.MA; W.NRID=ID OF REGION TO MAP OR 0 FOR TAS00ggfK REGION (IF WS.MAP=1).T4; W.NOFF=OFFSET WITHIN REGION TO MAP (IF WS.MAP=1).A; W.NLEN=LENGTH TO MAP OR 0 TO DEFAULT TO SMALLER OF WINDOW SIZEE,; OR SIZE LEFT IN PARTITION (IF WS.MAP=1).; W.NSTS=CONTROL INFORMATION.1; WS.SIS=1 IF WINDOW IS TO BE IN SUPER I SPACE. $; WS.MAP=1 IF MAPPING IS TO OCCUR.6; WS.WRT=1 IF MAPPING IS TO OCCUR WITH WRITE ACCESS.;F5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)W;I-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.D&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.W5; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THE THE 0; DIRECTIVE FAILS IN THE MAPPING STAGE BECAUSE.; THE SPECIFIED REGION HAS INCURRED A PARITY ; ERROR.<; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE SPECIFIED*; ACCESS IS DENIED IN THE MAPPING STAGE.>; DIRECTIVE STATUS OF 'D.RS84' IS RETURNED IF AN INVALID APR-1; WINDOW SIZE COMBINATION IS SPECIFIED OR IF AN9; INVALID REGION OFFSET-LENGTH COMBINATION IS SPECIFIEDC; IN THE MAPPING STAGE.E;; DIRECTIVE STATUS OF 'D.RS85' IS RETURNED IF THERE ARE NO'; AVAILABLE WINDOW BLOCKS.@; DIRECTIVE STATUS OF 'D.RS86' IS RETURNED IF AN INVALID REGION); ID IS SPECIFIED IN THE MAPPING STAGE..; 3; OUTPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:I; W.NID=ASSIGNED WINDOW ID.); W.NBAS=VIRTUAL BASE ADDRESS OF WINDOW.'!; W.NLEN=LENGTH ACTUALLY MAPPED.P6; W.NSTS=INDICATION OF ANY CHANGES IN MAPPING STATUS.8; WS.CRW=1 IF ADDRESS WINDOW SUCCESSFULLY ESTABLISHED.4; WS.ELW=1 IF ANY ADDRESS WINDOWS WERE ELIMINATED.2; WS.UNM=1 IF ANY ADDRESS WINDOWS WERE UNMAPPED.;D9; NOTE: ON SYSTEMS SUPPORTING EXTERNAL TASK HEADERS, THE A3; DIRECTIVE DISPATCHER COPIES THE USER WDB INTO ANS4; INTERMEDIATE BUFFER AREA. ON EXIT, THE DIRECTIVE1; DISPATCHER WILL WRITE ANY OUTPUT FIELDS TO THE=; USER BUFFER. S; ;-1$DRCRW::MOV R4,-(SP) ;SAVE ADDRESS OF TASK HEADERN3 MOV H.WND(R4),R4 ;POINT TO NUMBER OF WINDOW BLOCKSW. MOV (R4)+,R1 ;PICK UP NUMBER OF WINDOW BLOCKS .IF DF U$$DAS+ MOV R1,-(SP) ;SAVE NUMBER OF WINDOW BLOCKS1 .ENDC ; DF U$$DAS6 MOV (R3)+,R2 ;PICK UP APR NUMBER IN HIGH BYTE (W.NID) CLRB R2 ;CLEAR OUT LOW BYTEC" CMP R2,#7*256. ;LEGAL APR NUMBER? BLOS 3$ ; IF LOS YES JMP 40$ ;.3$:E/ ASR R2 ;CONVERT TO BASE ADDRESS IN 32W BLOCKSO2 MOV R2,(R3) ;STORE VIRTUAL BASE ADDRESS (W.NBAS)% ASR (R3) ;CONVERT TO BYTES (W.NBAS)A ASR (R3) ; SWAB (R3)+ ;% MOV R2,-(SP) ;CALCULATE HIGH ADDRESSV ADD (R3),(SP) ;(W.NSIZ) BCS 40$ ;IF CS ILLEGAL SIZED# CMP (SP),#2000 ;LEGAL TOP ADDRESS?I BHI 40$ ;IF HI NOC% MOV R1,-(SP) ;SAVE NUMBER OF WINDOWSA .IF DF U$$DAS2 BIT #T4.DSP,T.ST4(R5) ;TASK USE USER DATA SPACE ?$ BEQ 5$ ;IF EQ NO, ONLY WINDOW ZERO ;CAN'T BE OVERLAPPED% DEC (SP) ;YES IT DOES, WINDOWS ZEROS ;AND ONE ARE OFF LIMITS) .ENDC ; DF U$$DAS-5$: CMP -(R3),-(R3) ;POINT TO START OF WINDOW. ;BLOCK (W.NBAS) (W.NID)R1 MOV #WS.EDS,R0 ;GET NECESSARY BITS FOR SELECTIOND, BIC W.NSTS(R3),R0 ;ALL BITS SET IN W.NSTS ? BNE 10$ ;IF NE NO, LEAVE ALONE .IF DF U$$DAS6 BIC #WS.SIS,W.NSTS(R3) ;ALWAYS CLEAR SUPER I SINCE IT ;WAS JUST A FLAG BIT.< BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH SEPARATE I/D SPACE ?- BNE 10$ ;IF NE YES, LEAVE WINDOW IN D SPACE(> BIC #WS.UDS,W.NSTS(R3) ;CLEAR USER DATA SPACE FOR I ONLY TASK .IFF ; DF U$$DAS: BIC #WS.EDS,W.NSTS(R3) ;ALWAYS LOOKS LIKE IT DEFAULTED TO" ;I SPACE ON NON I/D SYSTEMS .ENDC ; DF U$$DAS?10$: TST W.BSIZ(R4) ;POINTING TO AN ESTABLISHED ADDRESS WINDOW?  BEQ 20$ ;IF EQ NOE  F .IF DF S$$LIB #< BIT #WS.SIS,W.NSTS(R3) ;CREATING SUPERVISOR I SPACE WINDOW? BEQ 14$ ;IF EQ NOT7 TSTB W.BFPD(R4) ;LOOKING AT SUPERVISOR I SPACE WINDOW? BMI 30$ ;IF MI NO BR 15$ ; .IFTF ; DF S$$LIB14$: ;REFERENCE LABEL .IF DF U$$DAS7 BIT #WS.UDS,W.NSTS(R3) ;CREATING USER D SPACE WINDOW ?A BEQ 141$ ;IF EQ NO5 BIT #20,W.BFPD(R4) ;LOOKING AT USER D SPACE WINDOW ?C BEQ 30$ ;IF EQ NOT BR 15$ ;YESP141$: ;REFERENCE LABELD .ENDC00g fcDATADATADATADATADATADATADATA ; DF U$$DAS .IFT ; DF S$$LIBF .IF DF U$$DAS7 CMPB #216,W.BFPD(R4) ;LOOKING AT USER I SPACE WINDOW ?N BLT 30$ ;IF LT NOQ .IFF ; DF U$$DAS)3 TSTB W.BFPD(R4) ;LOOKING AT SUPER I SPACE WINDOW ?  BPL 30$ ;IF PL YES .ENDC ; DF U$$DAS  .IFTF E315$: MOV W.BLVR(R4),R0 ;PICK UP LOW VIRTUAL ADDRESSC SWAB R0 ;CONVERT TO 32W BLOCKS ASL R0 ; ASL R0 ;0 CMP 2(SP),R0 ;POSSIBLE VIRTUAL ADDRESS OVERLAP? BLOS 30$ ;IF LOS NO* ADD W.BSIZ(R4),R0 ;CALCULATE HIGH ADDRESS% CMP R2,R0 ;VIRTUAL ADDRESS OVERLAP?I BHIS 30$ ;IF HIS NO .IF DF U$$DAS( TST (SP) ;ALREADY ESTABLISHED WINDOW ?! BEQ 17$ ;IF EQ YES, ALLOW UNMAPA .IFTF ; DF U$$DAS. CMP R1,(SP) ;OVERLAPPING WINDOW ZERO (OR ONE ;IF I/D TASK ?)D .IFT ; DF U$$DASF) BHIS 40$ ;IF HIS YES, DON'T ALLOW UNMAPT .IFF ; DF U$$DAS0' BEQ 40$ ;IF EQ YES, DON'T ALLOW UNMAPR .ENDC ; DF U$$DAS17$: ;REFERENCE LABEL% CALL ELAW ;ELIMINATE ADDRESS WINDOWI.20$: TST (SP) ;HAS A WINDOW BEEN ESTABLISHED? BEQ 30$ ;IF EQ YES? CMP (R3)+,(R3)+ ;POINT TO WINDOW SIZE IN BLOCK (W.NID)(W.NBAS)D> MOV (R3),W.BSIZ(R4) ;STORE SIZE, ESTABLISHING WINDOW (W.NSIZ)7 MOV -(R3),W.BLVR(R4) ;SET LOW VIRTUAL ADDRESS (W.NBAS)O1 MOVB -(R3),R0 ;PICK UP FIRST APR NUMBER (W.NAPR)F+ ASL R0 ;CONVERT APR NUMBER TO WORD OFFSETT  .IFT  U; BIT #WS.SIS,W.NSTS-W.NAPR(R3) ;CREATING SUPERVISOR WINDOW?; BNE 25$ ;IF NE YES F .ENDC L .IF DF U$$DAS9 BIT #WS.UDS,W.NSTS-W.NAPR(R3) ;CREATING D SPACE WINDOW ?A BEQ 23$ ;IF EQ NOI+ ADD #UDSDR0,R0 ;POINT TO FIRST D SPACE PDRI BR 25$ ;ENTER COMMON CODE .ENDC ; DF U$$DAS/23$: ADD #UINDR0,R0 ;POINT TO FIRST I SPACE PDR).25$: MOVB R0,W.BFPD(R4) ;SET FIRST PDR ADDRESS .IF DF M$$PRO!C$$CBPI2 CLR W.BLPD(R4) ;INITIALIZE CACHE BITS IN LAST PDR4 BIT #WS.NBP,W.NSTS-W.NAPR(R3) ;OK TO BYPASS CACHE ?, BEQ 27$ ;IF EQ YES, LEAVE CACHE BITS ALONE: BIS #WB.NBP,W.BLPD(R4) ;REMEMEBER NOT TO BYPASS THE CACHE27$: ;REFERENCE LABEL .ENDC ; DF M$$PRO!C$$CBPB .IF DF U$$DAS2 MOVB 4(SP),-(R3) ;PICK UP TOTAL NUMBER OF WINDOWS ;(W.NID) .IFF ; DF U$$DASD1 MOVB (SP),-(R3) ;PICK UP TOTAL NUMBER OF WINDOWSC ;(W.NID) .ENDC ; DF U$$DAS, SUB R1,(R3) ;SET ADDRESS WINDOW ID (W.NID)0 CLR (SP) ;INDICATE WINDOW HAS BEEN ESTABLISHED/30$: ADD #W.BLGH,R4 ;POINT TO NEXT WINDOW BLOCKC DEC R1 ;MORE WINDOW BLOCKS?V BGT 10$ ;IF GT YES/ TST (SP)+ ;WAS AN ADDRESS WINDOW ESTABLISHED?E BNE 50$ ;IF NE NOR .IF DF U$$DAS1 CMP (SP)+,(SP)+ ;POP CALCULATED HIGH ADDRESS ANDP ;SAVED NUMBER OF WINDOWS .IFF ; DF U$$DASI( TST (SP)+ ;POP CALCULATED HIGH ADDRESS .ENDC ; DF U$$DAS* MOV (SP)+,R4 ;RESTORE TASK HEADER ADDRESS< BIS #WS.CRW,W.NSTS(R3) ;INDICATE ADDRESS WINDOW WAS CREATED0 BIT #WS.MAP,W.NSTS(R3) ;IS WINDOW TO BE MAPPED?) BNE $DRMAP ;MAP ADDRESS WINDOW AND EXITR RETURN ;O#40$: DRSTS D.RS84 ;ALIGNMENT ERRORT(50$: DRSTS D.RS85 ;NO AVAILABLE WINDOWS .PAGE;+$; **-$DRELW-ELIMINATE ADDRESS WINDOW;PH; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ELIMINATE THE SPECIFIED ADDRESS*; WINDOW, UNMAPPING IT FIRST IF NECESSARY.;A ; DPB FORMAT:S;"; WD. 00 -- DIC(119.),DPB SIZE(2.).; WD. 01 -- ADDRESS OF WINDOW DEFINITION BLOCK;( ; INPUTS:T;D9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.W,; R3=ADDRESS OF THE WINDOW DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.L,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;W2; INPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:+; W.NID=ID OF ADDRESS WINDOW TO ELIMINATE.E;O5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)T;R-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.O9; DIRECTIVE STATUS OF 'D.RS87' IS RETURNED IF AN INVALIDD!; ADDRESS WINDOW WAS SPECIFIED.S; 3; OUTPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:D6; W.NSTS=INDICATION OF ANY CHANGES IN MAPPING STATUS.7; WS.ELW=1 IF ADDRESS WINDOW SUCCESSFULLY ELIMINATED.O0; WS.UNM=1 IF THE ADDR00ggfESS WINDOW WAS UNMAPPED.;-<$DRELW::CALL $SRWND ;SEARCH FOR AND VERIFY SPECIFIED WINDOW&ELAW: CALL $UNMAP ;UNMAP IF NECESSARY, BCC 10$ ;IF CC UNMAPPING WAS NOT PERFORMED7 BIS #WS.UNM,W.NSTS(R3) ;INDICATE A WINDOW WAS UNMAPPEDA:10$: CLR W.BSIZ(R4) ;INDICATE ADDRESS WINDOW IS ELIMINATED; BIS #WS.ELW,W.NSTS(R3) ;INDICATE ADDRESS WINDOW ELIMINATEDI RETURN ;D .PAGE;+ ; **-$DRMAP-MAP WINDOW TO REGION;SB; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO MAP THE SPECIFIED ADDRESSF; WINDOW TO AN OFFSET IN THE SPECIFIED REGION, UNMAPPING IF NECESSARY.;; ; DPB FORMAT:V;F"; WD. 00 -- DIC(121.),DPB SIZE(2.).; WD. 01 -- ADDRESS OF WINDOW DEFINITION BLOCK;W ; INPUTS:O;D9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.,; R3=ADDRESS OF THE WINDOW DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;+2; INPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:; W.NID=ID OF WINDOW TO MAP.P@; W.NRID=ID OF REGION TO MAP TO OR 0 TO DEFAULT TO TASK REGION.); W.NOFF=OFFSET WITHIN REGION TO MAP TO.M<; W.NLEN=LENGTH TO MAP OR 0 TO DEFAULT TO SMALLER OF WINDOW#; SIZE OR SIZE LEFT IN PARTITION. ; W.NSTS=CONTROL INFORMATION.(; WS.WRT=1 IF WRITE ACCESS IS DESIRED.;35; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)O;H-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED. 9; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THE DESIRED '; REGION HAS INCURRED A PARITY ERROR.R:; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE DESIRED#; ACCESS TO THE REGION IS DENIED.A9; DIRECTIVE STATUS OF 'D.RS84' IS RETURNED IF AN INVALIDN0; REGION OFFSET-SIZE COMBINATION IS SPECIFIED.9; DIRECTIVE STATUS OF 'D.RS86' IS RETURNED IF AN INVALIDE; REGION ID IS SPECIFIED.F9; DIRECTIVE STATUS OF 'D.RS87' IS RETURNED IF AN INVALID #; ADDRESS WINDOW ID IS SPECIFIED.E; 3; OUTPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:D!; W.NLEN=LENGTH ACTUALLY MAPPED.C6; W.NSTS=INDICATION OF ANY CHANGES IN MAPPING STATUS..; WS.UNM=1 IF THE WINDOW WAS UNMAPPED FIRST.;NF; THIS DIRECTIVE FIRST BUILDS AN IMAGE OF A MAPPED WINDOW BLOCK ON THEH; STACK. THEN IF NO ERRORS ARE ENCOUNTERED, THE CORRESPONDING WINDOW IS:; UNMAPPED, IF NECESSARY, AND SET UP FROM THE STACK IMAGE.;-$DRMAP::=; FOR EITHER USER D OR SUPER LIBRARY SYSTEMS, WE PUSH THE TWODA; MAPPING MASKS (H.DMAP,H.SMAP) ONTO THE STACK FOR USE DURING APRBB; UPDATE. H.DMAP MUST BE RE-WRITTEN TO THE HEADER AFTER THE UPDATE; SINCE IT MAY HAVE CHANGED. .IF DF S$$LIB!U$$DAS ; ASSUME H.SMAP+1,H.DMAP ;H.SMAP,H.DMAP MUST BE IN SAME WORDN8 MOV H.SMAP(R4),-(SP) ;GET SUPER/USER D MASKS ONTO STACK .ENDC ; DF S$$LIB!U$$DASE. CALL $SRWND ;SEARCH FOR AND VALIDATE ADDRESS ;WINDOW ID- ADD #W.NRID,R3 ;POINT TO SPECIFIED REGION IDI8 CALL $SRATT ;SEARCH FOR MATCHING ATTACHMENT DESCRIPTOR( MOV A.PCB(R5),R2 ;POINT TO ATTACHED PCB: CMP $TKTCB,$FXRPT ;IS THIS THE PARITY ERROR RECOVER TASK? BEQ 5$ ;IF EQ YESH& BIT #PS.PER,P.STAT(R2) ;PARITY ERROR? BEQ 5$ ;IF EQ NO JMP 90$ ;M85$: BIT #WS.RES,W.NSTS-W.NRID(R3) ;MAP ONLY IF RESIDENT? BEQ 10$ ;NO IF EQG8 BIT #PS.CKP!PS.CKR!PS.OUT,P.STAT(R2) ;REGION IN MEMORY? BEQ 10$ ;IF EQ YES JMP 100$ ;+10$: MOV R2,-(SP) ;SET PCB ADDRESS (W.BPCB)R8 MOV W.BLVR(R4),-(SP) ;COPY LOW VIRTUAL ADDRESS (W.BLVR)% TST (R3)+ ;POINT TO OFFSET (W.NRID)M .IF NDF X$$HDRI0 MOV (R3)+,R0 ;PICK UP SPECIFIED OFFSET (W.NOFF) .IFF ; NDF X$$HDR= MOVB P.HDLN(R2),R0 ;PICK UP LENGTH OF EXTERNAL HEADER (OR 0)?3 ADD (R3)+,R0 ;CALCULATE REAL OFFSET INTO PARTITION. ;(ADD IN W.NOFF)0 BCS 35$ ;IF CS THE OFFSET WRAPPED AROUND. THIS+ ;MAY CAUSE A MAP INTO THE EXTERNAL HDR,?) ;SO IT IS TREATED ALWAYS AS AN ERROR,M ;REGARDLESS OF FINAL OFFSET. .ENDC ; NDF X$$HDR(% CMP R0,P.SIZE(R2) ;WITHIN PARTITION?T BHIS 35$ ;IF HIS NOS- MOV (R3),R1 ;PICK UP LENGTH TO MAP (W.NLEN)R" BNE 20$ ;IF NE ONE WAS SPECIFIED6 MOV P.SIZE(R2),R1 ;CALCULATE SIZE TO 00g fcDATADATADATADATADATADATADATAEND OF PARTITION SUB R0,R1 ;AB CMP R1,W.BSIZ(R4) ;SIZE TO END GREATER THAN WINDOW SIZE? (W.BSIZ) BLOS 20$ ;IF LOS NO)3 MOV W.BSIZ(R4),R1 ;DEFAULT TO WINDOW SIZE (W.BSIZ) /20$: MOV R1,(R3)+ ;PASS BACK SIZE USED (W.NLEN)S6 MOV R1,-(SP) ;CALCULATE HIGH VIRTUAL ADDRESS (W.BHVR) SWAB (SP) ;MULTIPLY BY 64F RORB (SP) ;P ROR (SP) ; ROR (SP) ;* DEC (SP) ;POINT TO LAST ADDRESSABLE BYTE ADD 2(SP),(SP) ;O; MOV R5,-(SP) ;STORE ADDR OF ATTACHMENT DESCRIPTOR (W.BATT)Z0 MOV W.BSIZ(R4),-(SP) ;COPY WINDOW SIZE (W.BSIZ)# CMP R1,(SP) ;LEGAL SIZE? (W.BSIZ)T BHI 35$ ;IF HI NON .IF DF X$$HDR' MOV R0,-(SP) ;COPY THE OFFSET (W.NOFF)14 CLR R5 ;SUBTRACT THE HEADER LENGTH FROM THE OFFSET0 MOVB P.HDLN(R2),R5 ;FOR CORRECT ALIGNMENT CHECK8 SUB R5,(SP) ;SUB THE HEADER LENGTH FOR ALIGNMENT CHECK! BIT #7,(SP)+ ;64-BYTE ALIGNMENT?  .IFF ; DF X$$HDRC BIT #7,R0 ;64-BYTE ALIGNMENT?Y .IFTF ; DF X$$HDR BEQ 30$ ;IF EQ NOA3 BIT #WS.64B,(R3) ;64-BYTE ALIGNMENT BEING ALLOWED?4 BEQ 35$ ;IF EQ NOS .IFT ; DF X$$HDR,30$: MOV 2(SP),R5 ;RESTORE R5I/ MOV R0,-(SP) ;SET OFFSET IN PARTITION (W.BOFF)P .IFF ; DF X$$HDR.330$: MOV R0,-(SP) ;SET OFFSET IN PARTITION (W.BOFF)F .ENDC ; DF X$$HDR0 ADD R1,R0 ;POINT PAST LAST 32W BLOCK MAPPED TO% CMP R0,P.SIZE(R2) ;WITHIN PARTITION? BLOS 37$ ;IF LOS YES35$: JMP 70$ ;F;37$: MOV W.BFPD(R4),-(SP) ; SAVE FIRST PDR ADDRESS (W.BFPD);5 BITB #AS.RED!AS.WRT,A.STAT(R5) ;READ ACCESS ALLOWED?6 BEQ 38$ ;IF NE NOG .IF DF M$$PRO!C$$CBPQ7 MOV W.BLPD(R4),-(SP) ;GET PREVIOUS STATE OF CACHE BITSI6 BIC #^C,(SP) ;CLEAR ALL BUT THE NO BYPASS BIT7 BIS #77402,(SP) ;SET FOR READ ACCESS, 4K SIZE (W.BLPD)I .IFF ; DF M$$PRO!C$$CBP8 MOV #77402,-(SP) ;SET FOR READ ACCESS, 4K SIZE (W.BLPD) .ENDC ; DF M$$PRO!C$$CBPP1 BIT #WS.WRT,(R3) ;WRITE ACCESS DESIRED? (W.NSTS) BEQ 40$ ;IF EQ NO(/ BITB #AS.WRT,A.STAT(R5) ;WRITE ACCESS ALLOWED?. BNE 39$ ;IF NE YES38$: JMP 80$ ;W39$: ;REFERENCE LABEL .IF DF M$$PRO!C$$CBPB* BIS #4,(SP) ;CHANGE ACCESS TO READ/WRITE .IFF ; DF M$$PRO!C$$CBP.7 MOV #77406,(SP) ;SET FOR 4K READ/WRITE ACCESS (W.BLPD)) .ENDC ; DF M$$PRO!C$$CBPE40$: ;REF SYMBOLF $ ! .IF DF M$$PRO!C$$CBP( ; BIT #WS.BPS,(R3) ;SHOULD ACCESSES ALWAYS BYPASS THE CACHE?C BEQ 401$ ;IF EQ NO7 BIS #WB.BPS!100000,(SP) ;SET UP TO ALWAYS BYPASS CACHEN .IF DF M$$PRO BR 43$ ; .IFTF ; DF M$$PRO401$:  .IFT ; DF M$$PRO83 BIT #WB.NBP,(SP) ;NOT BYPASSING CACHE THIS WINDOW?B' BNE 43$ ;IF NE YES, SKIP BYPASS TESTSD41$: MOV R1,-(SP) ;SAVE R1" MOV A.PCB(R5),R1 ;GET PCB ADDRESS/ CALL $GTMCT ;DETERMINE NUMBER OF MAPPED TASKS$ TST R2 ;IS BYPASS NECESSARY? BEQ 42$ ;NO IF EQ ) BIS #100000,2(SP) ;SET BYPASS BIT IN PDRL$42$: MOV R1,R2 ;RESTORE PCB ADDRESS MOV (SP)+,R1 ;RESTORE R1# .ENDC ; DF M$$PRO P .ENDC ; DF M$$PRO!C$$CBP F ,43$: CALL $UNMAP ;UNMAP WINDOW IF NECESSARY& BCC 45$ ;IF CC WINDOW WAS NOT MAPPED: BIS #WS.UNM,(R3) ;INDICATE A WINDOW WAS UNMAPPED (W.NSTS)G; SINCE THE UNMAP MAY HAVE CAUSED THE USER-D MAPPING TO CHANGE, WE MUSTGF; UPDATE THE COPY OF H.SMAP ON THE STACK FROM THE CHANGED VALUE IN THE ; HEADER.  .IF DF S$$LIB!U$$DAS  .IF DF X$$HDR* MOV $SAHPT,R0 ;GET POINTER TO TASK HEADER .IFF ; DF X$$HDRA* MOV $HEADR,R0 ;GET POINTER TO TASK HEADER .ENDC ; DF X$$HDR@ MOV H.SMAP(R0),W.BLGH(SP) ; UPDATE THE STORED MAPPING FLAG WORD .ENDC ; DF S$$LIB!U$$DASO+45$: MOVB W.BFPD(R4),R0 ;POINT TO FIRST PDR  D W .IF DF S$$LIB ) BMI 46$ ;IF MI USER WINDOW. ADD #SISDR0,R0 ;POINT TO FIRST SUPERVISOR PDR0 TSTB $SUPFL ;IS THIS FIRST SUPER MODE WINDOW ? BNE 455$ ;IF NE YES  MOV R0,-(SP) ;SAVE REGISTERS  MOV R1,-(SP) ;R% CALL $LSUP1 ;MAP SUPERVISOR D SPACE MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R0 ; 6455$: INCB $SUPFL ;INDICATE ADDITIONAL SUPER I WINDOW ( .IFTF S546$: MOV P.REL(R2),R2 ;CALCULATE OFFSET FOR FIRST PDR  ADD 4(SP),R2 ;(W.BOFF)V+ CLRB 3(SP) ;INIT NUMBER OF PDR'S (W.BNPD)00ggf.50$: INCB 3(SP) ;INC NUMBER OF PDR'S (W.BNPD)* MOV R2,UISAR0-UISDR0(R0) ;SET UP USER APR% MOV (SP),(R0)+ ;SET UP NEXT USER PDRR D .IFTW H; FIRST CHECK FOR A SUPERVISOR WINDOW. IF IT IS SUPERVISOR, THEN WE MUSTD; CHECK THE SUPERVISOR MAPPING MASK, AND POSSIBLY UPDATE THE SUPER D ; PAR/PDR./ CMP R0,#UINDR0+2 ;USER SPACE (I OR D) WINDOW ?E. BHIS 52$ ;IF HIS YES, GO DO USER SPACE TESTS> BITB $BTMSK-2-SISDR0-2(R0),W.BLGH(SP) ;SUPER I/D OVERMAPPED ? BEQ 55$ ;IF EQ NOE/ MOV R2,SDSAR0-SISDR0-2(R0) ;UPDATE SUPER D PARR1 MOV (SP),SDSDR0-SISDR0-2(R0) ;UPDATE SUPER D PDRU BR 55$ ;GO DO NEXT PAR/PDR52$: ;REFERENCE LABEL .IFTF ; DF S$$LIBE; CHECK FOR USER I OR USER D WINDOW. IF A USER I WINDOW, CHECK TO SEE F; IF BOTH SPACES MUST BE UPDATED. IF NOT, UPDATE IS DONE. IF SO, CHECKD; TO SEE IF THIS APR IS USED FOR AN EXPLICIT D WINDOW. IF SO, UPDATE'; IS DONE. IF NOT UPDATE USER D PAR/PDRM .IF DF U$$DAS+ CMP R0,#UDSDR0+2 ;USER DATA SPACE WINDOW ?I) BHIS 53$ ;IF HIS YES, GO UPDATE D SPACET9 BITB $BTMSK-UINDR0-2(R0),W.BLGH+1(SP) ;D SPACE MAPPED BY  ;OTHER WINDOW ?$ BNE 55$ ;IF NE YES, UPDATE IS DONE. MOV R2,UDSAR0-UINDR0-2(R0) ;UPDATE USER D PAR0 MOV (SP),UDSDR0-UINDR0-2(R0) ;UPDATE USER D PDR .ENDC ; DF U$$DAS<; WE HAVE JUST UPDATED A USER D PAR/PDR. CHECK TO SEE IF THED; CORRESPONDING SUPER D SPACE PAR/PDR IS CURRENTLY MAPPED INTO USERD6; OR SUPER I SPACE. IF USER D, UPDATE SUPER D PAR/PDR. .IFT ; DF S$$LIBS9 BITB $BTMSK-2-UINDR0-2(R0),W.BLGH(SP) ;SUPER D MAPPED TOB ;USER D THIS APR ?L# BNE 55$ ;IF NE NO, UPDATE IS DONE;/ MOV R2,SDSAR0-UINDR0-2(R0) ;UPDATE SUPER D PARO1 MOV (SP),SDSDR0-UINDR0-2(R0) ;UPDATE SUPER D PDR .ENDC ; DF S$$LIB .IF DF U$$DAS$ BR 55$ ;BRANCH AROUND D SPACE CODE .IFTF ; DF U$$DAS53$: ;REFERENCE LABEL .IFT ; DF U$$DAS @; SET BIT IN H.DMAP PROTOTYPE INDICATING THAT THIS APR IS IN USE!; FOR AN EXPLICIT D SPACE WINDOW./> BISB $BTMSK-UDSDR0-2(R0),W.BLGH+1(SP) ;INDICATE USER D WINDOW ;USES THIS APRA; CHECK TO SEE IF USER D AND SUPER D ARE OVERMAPPED FOR THIS APR.V+; IF THEY ARE, THEN UPDATE SUPER D PAR/PDR. .IF DF S$$LIB< BITB $BTMSK-2-UDSDR0-2(R0),W.BLGH(SP) ;SUPER D/USER D OVER- ;MAPPED FOR THIS APR ?O# BNE 55$ ;IF NE NO, UPDATE IS DONES/ MOV R2,SDSAR0-UDSDR0-2(R0) ;UPDATE SUPER D PAR 1 MOV (SP),SDSDR0-UDSDR0-2(R0) ;UPDATE SUPER D PDRH .ENDC ; DF S$$LIB .ENDC ; DF U$$DAS .IF DF S$$LIB M .IFTF (%55$: ADD #200,R2 ;ADVANCE APR OFFSETW SUB #200,R1 ;DONE YET? BGT 50$ ;IF GT NOS D D .IF DF M$$PRO!C$$CBP  * ADD #177,R1 ;CALCULATE VALUE OF LAST APR$ SWAB R1 ;PLACE IT IN THE HIGH BYTE! BIC #77400,(SP) ;INITIALIZE SIZE;# BIS R1,(SP) ;SET SIZE OF LAST PDRF MOV (SP),-(R0) ;SET LAST PDRE , .IFF ; DF M$$PRO!C$$CBPD 0) SWAB R1 ;SHIFT UNUSED SIZE TO HIGH BYTEP CLRB R1 ;CLEAR LOW BYTET) ADD R1,(SP) ;CALCULATE SIZE IN LAST PDRN ADD R1,-(R0) ;SET LAST PDRL  .ENDC ; DF M$$PRO!C$$CBP0 2 A N .IFTO EH; FIRST CHECK FOR A SUPERVISOR WINDOW. IF IT IS SUPERVISOR, THEN WE MUSTD; CHECK THE SUPERVISOR MAPPING MASK, AND POSSIBLY UPDATE THE SUPER D ; PAR/PDR.- CMP R0,#UINDR0 ;USER SPACE (I OR D) WINDOW ?B. BHIS 56$ ;IF HIS YES, GO DO USER SPACE TESTS< BITB $BTMSK-2-SISDR0(R0),W.BLGH(SP) ;SUPER I/D OVERMAPPED ? BEQ 59$ ;IF EQ NOE .IF DF M$$PRO!C$$CBP / MOV (SP),SDSDR0-SISDR0(R0) ;UPDATE SUPER D PDRL .IFF ; DF M$$PRO!C$$CBPL- ADD R1,SDSDR0-SISDR0(R0) ;UPDATE SUPER D PDR .ENDC ; DF M$$PRO!C$$CBPC BR 59$ ;UPDATE IS DONE56$: ;REFERENCE LABEL .IFTF ; DF S$$LIBE; CHECK FOR USER I OR USER D WINDOW. IF A USER I WINDOW, CHECK TO SEEPF; IF BOTH SPACES MUST BE UPDATED. IF NOT, UPDATE IS DONE. IF SO, CHECKD; TO SEE IF THIS APR IS USED FOR AN EXPLICIT D WINDOW. IF SO, UPDATE'; IS DONE. IF NOT UPDATE USER D PAR/PDRD .IF DF U$$DAS) CMP R0,#UDSDR0 ;USER DATA SPACE WINDOW ? ) BHIS 57$ ;IF HIS YES, GO UPDATE D SPACER$ TST W.BLGH(SP) ;UPDATE ALL SPACES ? BNE 59$ ;IF NE N00g fcDATADATADATADATADATADATADATAOP7 BITB $BTMSK-UINDR0(R0),W.BLGH+1(SP) ;D SPACE MAPPED BYE ;OTHER WINDOW ?$ BNE 59$ ;IF NE YES, UPDATE IS DONE .IF DF M$$PRO!C$$CBP,. MOV (SP),UDSDR0-UINDR0(R0) ;UPDATE USER D PDR .IFF ; DF M$$PRO!C$$CBP,, ADD R1,UDSDR0-UINDR0(R0) ;UPDATE USER D PDR .ENDC ; DF M$$PRO!C$$CBP .ENDC ; DF U$$DAS<; WE HAVE JUST UPDATED A USER D PAR/PDR. CHECK TO SEE IF THED; CORRESPONDING SUPER D SPACE PAR/PDR IS CURRENTLY MAPPED INTO USERD6; OR SUPER I SPACE. IF USER D, UPDATE SUPER D PAR/PDR. .IFT ; DF S$$LIB,7 BITB $BTMSK-2-UINDR0(R0),W.BLGH(SP) ;SUPER D MAPPED TOB ;USER D THIS APR ?I# BNE 59$ ;IF NE NO, UPDATE IS DONEM .IF DF M$$PRO!C$$CBP / MOV (SP),SDSDR0-UINDR0(R0) ;UPDATE SUPER D PDR .IFF ; DF M$$PRO!C$$CBPD- ADD R1,SDSDR0-UINDR0(R0) ;UPDATE SUPER D PDR. .ENDC ; DF M$$PRO!C$$CBP  .ENDC ; DF S$$LIB .IF DF U$$DAS$ BR 59$ ;BRANCH AROUND D SPACE CODE .IFTF ; DF U$$DAS57$: ;REFERENCE LABEL .IFT ; DF U$$DAS,A; CHECK TO SEE IF USER D AND SUPER D ARE OVERMAPPED FOR THIS APR.R+; IF THEY ARE, THEN UPDATE SUPER D PAR/PDR.; .IF DF S$$LIB: BITB $BTMSK-2-UDSDR0(R0),W.BLGH(SP) ;SUPER D/USER D OVER- ;MAPPED FOR THIS APR ?0# BNE 59$ ;IF NE NO, UPDATE IS DONE  .IF DF M$$PRO!C$$CBP,/ MOV (SP),SDSDR0-UDSDR0(R0) ;UPDATE SUPER D PDRD .IFF ; DF M$$PRO!C$$CBPD- ADD R1,SDSDR0-UDSDR0(R0) ;UPDATE SUPER D PDRO .ENDC ; DF M$$PRO!C$$CBPD .ENDC ; DF S$$LIB .ENDC ; DF U$$DAS F $-59$: MOV R4,R3 ;COPY POINTER TO WINDOW BLOCKE/ ADD #W.BLGH,R3 ;POINT PAST END OF WINDOW BLOCKP@60$: MOV (SP)+,-(R3) ;COPY IMAGE OF WINDOW BLOCK INTO REAL BLOCK CMP R3,R4 ;DONE YET? BHI 60$ ;IF HI NO;G; IF THIS IS A USER D OR SUPER LIB SYSTEM, THEN THERE IS A FLAG WORD ONPH; THE STACK. IF SUPER LIB SYSTEM ONLY, WE CAN DISCARD THIS WORD. IF USERH; D, THEN THE HIGH BYTE OF THIS WORD MUST BE RE-WRITTEN TO H.DMAP IN THEG; TASK HEADER. IN ADDITION, USER D SYSTEMS HAVE AN OVERMAP DEFAULT FLAGF'; WHICH MUST BE REMOVED FROM THE STACK.N .IF NDF U$$DAS. .IF DF S$$LIB TST (SP)+ ;CLEAN OFF FLAG WORD .ENDC ; DF S$$LIB .IFF ; NDF U$$DAS O .IF DF X$$HDR* MOV $SAHPT,R0 ;GET ADDRESS OF TASK HEADER .IFF * MOV $HEADR,R0 ;GET ADDRESS OF TASK HEADER O .ENDC9 MOV (SP)+,H.SMAP(R0) ;UPDATE SUPER/USER D MASK IN HEADER  .ENDC ; DF U$$DAS0 MOV $TKTCB,R0 ;PICK UP CURRENT TASK TCB ADDRESS* MOV W.BPCB(R4),R1 ;PICK UP PCB OF MAPPING S V .IF DF M$$PRO T8 CALL $SETBP ;SET UP OTHER RUNNING MAPPED TASK (IF ANY) U .ENDC . D8 TSTB A.MPCT(R5) ;IS THIS FIRST MAP THROUGH ATTACHMENT ?& BNE 65$ ;IF NE NO, DON'T CALL $ACCRG/ MOV #$ACCRG,-(SP) ;FORCE RETURN THROUGH $ACCRGS865$: INCB A.MPCT(R5) ;INCREMENT MAPPING THROUGH THIS ADB .IF DF X$$HDR&F$$MAPM* CALL $STFMC ;SETUP FAST MAP IF NECESSARY .ENDC ; DF X$$HDR&F$$MAPD% RETURN ;BACK TO CALLER (OR $ACCRG)K570$: DRSTS D.RS84 ;INVALID OFFSET-LENGTH COMBINATIONG380$: DRSTS D.RS16 ;DESIRED ACCESS TO REGION DENIEDT:90$: DRSTS D.RS6 ;REGION HAD LOAD FAILURE OR PARITY ERROR*100$: DRSTS D.RS8 ;REGION IS NON RESIDENT .PAGE;+ ; **-$DRUNM-UNMAP ADDRESS WINDOW;MD; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO UNMAP THE SPECIFIED ADDRESS ; WINDOW.A;N ; DPB FORMAT:A;"; WD. 00 -- DIC(123.),DPB SIZE(2.).; WD. 01 -- ADDRESS OF WINDOW DEFINITION BLOCK;$ ; INPUTS:D;9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.;,; R3=ADDRESS OF THE WINDOW DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R2; INPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:; W.NID=ID OF WINDOW TO UNMAP. ;D:; OUTPUTS: (DIRECTIVE STATUS AND PS WORD RETURNED TO TASK);I-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.I;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THE SPECIFIEDU; ADDRESS WINDOW NOT MAPPED.9; DIRECTIVE STATUS OF 'D.RS87' IS RETURNED IF AN INVALID #; ADDRESS WINDOW ID IS SPE00ggfCIFIED.5;D3; OUTPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:L6; W.NSTS=INDICATION OF ANY CHANGES IN MAPPING STATUS.5; WS.UNM=1 IF THE WINDOW WAS SUCCESSFULLY UNMAPPED.P;-5$DRUNM::CALL $SRWND ;SEARCH FOR AND VERIFY WINDOW IDL! CALL $UNMAP ;UNMAP IF NECESSARY & BCC 10$ ;IF CC WINDOW WAS NOT MAPPED= BIS #WS.UNM,W.NSTS(R3) ;INDICATE ADDRESS WINDOW WAS UNMAPPED RETURN ; 010$: DRSTS D.RS8 ;ADDRESS WINDOW WAS NOT MAPPED;+; DRSRF HAS MOVED.;A%; ITS FORWARDING ADDRESS IS DRSRF.MACD;:; THIS IS DUE TO THE ADDITION OF A SEPARATE COMMON FOR THE; PLAS DIRECTIVES.;N>; YOU MAY BE WONDERING WHY DRRRF IS STILL HERE. ALL DIRECTIVES@; WHICH USE A PLAS DEFINITION BLOCK WHICH IS RELOCATED BY DRDSP ?; MUST BE IN THE SAME DIRECTIVE COMMON, SINCE THE RELOCATION OFI?; THE RDB/WDB TRIGGERS MAPPING THE PLAS COMMON. DRSRF RELOCATESRA; THE BLOCK ITSELF AND THEREFORE CAN'T BE INCLUDED IN THE COMMON.W;- .PAGE;+ ; **-$DRRRF-RECEIVE BY REFERENCE;AD; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO DEQUEUE THE NEXT RECEIVE BYG; REFERENCE PACKET IN THE RECEIVE QUEUE, OPTIONALLY EXITING IF THERE ISW; NOT ONE THERE.; ; DPB FORMAT: ;E!; WD. 00 -- DIC(81.),DPB SIZE(2.)O.; WD. 01 -- ADDRESS OF WINDOW DEFINITION BLOCK;T ; INPUTS:E;V9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.M,; R3=ADDRESS OF THE WINDOW DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 2; INPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:; W.NSTS=CONTROL INFORMATION.3; WS.MAP=1 IF RECEIVED REFERENCE IS TO BE MAPPED.L5; WS.RCX=1 IF TASK EXIT DESIRED IF NO PACKET FOUND.MA; W.NSRB=OPTIONAL ADDRESS OF 10 WORD BUFFER FOR ADDITIONAL INFO.F;N5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)O;H-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.A&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED. 1; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THEE0; DIRECTIVE FAILS IN THE MAPPING STAGE BECAUSE.; THE SPECIFIED REGION HAS INCURRED A PARITY ; ERROR.9; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THERE IS NOA,; RECEIVE BY REFERENCE ENTRY IN THE QUEUE.:; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE ADDRESS&; CHECK OF THE RECEIVE BUFFER FAILS.;U3; OUTPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:Y6; W.NRID=ASSIGNED REGION ID OF THE REFERENCED REGION./; W.NOFF=OFFSET WORD SPECIFIED BY SENDER TASK.U/; W.NLEN=LENGTH WORD SPECIFIED BY SENDER TASK.A/; W.NSTS=STATUS WORD SPECIFIED BY SENDER TASK.E*; WS.RED=1 IF ATTACHED WITH READ ACCESS.+; WS.WRT=1 IF ATTACHED WITH WRITE ACCESS. ,; WS.EXT=1 IF ATTACHED WITH EXTEND ACCESS.,; WS.DEL=1 IF ATTACHED WITH DELETE ACCESS.'; WS.RRF=1 IF RECEIVE WAS SUCCESSFUL.T;-($DRRRF::MOV KISAR6,-(SP) ;SAVE APR6 BIAS3 MOV R3,-(SP) ;SAVE WINDOW DEFINITION BLOCK POINTERD7 MOV T.RRFL(R5),R2 ;PICK UP FIRST RECEIVE BY REF PACKETR BEQ 60$ ;IF EQ THERE IS NONE CLR -(SP) ;INIT EFN ADDRESSY CLR -(SP) ;INIT EFN MASK4 TST (R2)+ ;POINT TO RECEIVER TCB ADDRESS IN PACKET" MOV (R2)+,R0 ;PICK UP TCB ADDRESS BEQ 20$ ;IF EQ NONE SPECIFIEDS6 DECB T.SRCT(R0) ;DECREMENT SENDER'S OUTSTANDING SREFS$ MOV (R2),(SP) ;SET REAL EFN MASK & MOV 2(R2),2(SP) ;SET REAL EFN ADDRESS&20$: MOV R0,-(SP) ;SAVE TCB ADDRESS & CMP (R2)+,(R2)+ ;SKIP TO REGION ID 6 ADD #W.NRID,R3 ;POINT TO REGION ID WORD IN DEF BLOCK ! MOV (R2)+,(R3)+ ;STORE REGION ID$ MOV (R2)+,(R3)+ ;STORE OFFSET MOV (R2)+,(R3)+ ;STORE LENGTH BIS (R2)+,(R3)+ ;STORE ACCESS; MOV (R3),R3 ;PICK UP VIRTUAL ADDR OF EXTENDED INFO BUFFER , BEQ 40$ ;IF EQ THERE ONE WAS NOT SPECIFIED) MOV #10.*2,R1 ;SET SIZE TO ADDRESS CHECKT MOV R2,-(SP) ;SAVE R2' CALL $ACHKP ;ADDRESS CHECK THE BUFFER2 MOV (SP)+,R2 ;RESTORE R25 MOV -14(R2),(R3)+ ;STORE THE TASK NAME IN THE BUFFER+ MOV -12(R2),(R3)+ ;+ MOV -16(R2),R0 ;PICK UP SENDER TCB ADDRESS  BEQ 25$ ;IF EQ THERE IS NONE* MOV T.NAM+2(R0),-(R3) ;SET REAL TASK NAME MOV T.NAM(R0),-(R3) ;& CMP (R3)+,(R3)+ ;POINT PAST TASK NAME125$: MOV #8.,R0 00h fcDATADATADATADATADATADATADATA ;SET LOOP COUNT FOR REST OF INFO -30$: MOV (R2)+,(R3)+ ;MOVE REST OF EXTRA INFOT DEC R0 ;DONE YET?* BGT 30$ ;IF GT NOR140$: MOV R5,R3 ;SAVE RECEIVER TASK TCB ADDRESS A0 MOV (SP)+,R5 ;RETRIEVE SENDER TASK TCB ADDRESS ) MOV (SP)+,R0 ;RETRIEVE EVENT FLAG MASK 0 MOV (SP)+,R1 ;RETRIEVE EVENT FLAG WORD ADDRESS " BEQ 50$ ;IF EQ NO FLAG TO SET 1 CALL $SETMG ;SET EFN AND UNLOCK IF GROUP GLOBAL)'50$: MOV R3,R5 ;RESTORE TCB ADDRESS )4 MOV R5,R0 ;POINT TO RECEIVE BY REFERENCE LISTHEAD  ADD #T.RRFL,R0 ; & CALL $QRMVF ;REMOVE PROCESSED PACKET# MOV R1,R0 ;COPY POINTER TO PACKETO CALL $DEPKT ;DEALLOCATE PACKET0 MOV (SP)+,R3 ;RESTORE WINDOW DEFINITION POINTER+ MOV (SP)+,KISAR6 ;RESTORE KERNAL APR6 BIASSA BIS #WS.RRF,W.NSTS(R3) ;INDICATE SUCCESSFUL RECEIVE BY REFERENCEI, BIT #WS.MAP,W.NSTS(R3) ;WINDOW MAP DESIRED? BEQ 80$ ;IF EQ NOC CALLR $DRMAP ;MAP WINDOW>60$: CMPB #213.,$DICSV ;IS THIS RECEIVE BY REFERENCE OR STOP? BNE 61$ ;IF NE NO  CMP (SP)+,(SP)+ ;CLEAN STACK JMP $STPCT ;GO STOP TASK461$: BIT #WS.RCX,W.NSTS(R3) ;DOES TASK WISH TO EXIT? BEQ 70$ ;IF EQ NOC CMP (SP)+,(SP)+ ;CLEAN STACK JMP $DREXT ;PERFORM TASK EXITI)70$: DRSTS D.RS8 ;NO REFERENCES IN QUEUEK80$: RETURN ; .PAGE;+-; **-$DRFMP-FAST REMAP OF TASK ADDRESS WINDOWE;C=; THIS DIRECTIVE IS INVOKED TO PERFORM A FAST REMAP OF A TASK =; ADDRESS WINDOW. THIS IS NOT A DIRECTIVE PER SE (REQUIRES NO >; DPB), BUT IS INVOKED BY LOADING USER REGISTERS AND EXECUTING; AN IOT INSTRUCTION.;J:; TASKS BUILT TO MAKE USE OF THE FAST MAP FACILITY HAVE AN<; ADDITIONAL DATA AREA APPENDED TO THEIR HEADERS. THE FORMAT.; OF THIS BLOCK IS DOCUMENTED IN $STFMP BELOW.;D ; INPUTS: ; ; R0 = FAST MAP ID; R1 = NEW MAP OFFSETA; ; OUTPUTS:;-; R0 = COMPLETION STATUS; +1 = SUCCESSD; IE.ALG = INVALID OFFSET;A; NOTES:;F4; R0 -> R3 ARE DESTROYED DURING FAST MAP PROCESSING.;E;; FAST MAP TAKES PLACE AT PR7, KERNEL MODE, STACK DEPTH +1.E;AE; FAST MAP WITH WINDOW LENGTH CHANGE TAKES PLACE AT PR0, KERNEL MODE,T>; STACK DEPTH 0 (LOOKS LIKE INTERRUPT STATE FOR A PR0 DEVICE).;EI; ALTHOUGH SUPERVISOR MODE WINDOWS CAN'T YET BE FAST MAPPED, THE COMMENTSE; IN THIS MODULE INCLUDE INFORMATION RELATIVE TO THAT IMPLEMENTATION.T;F; BLKMUL IS SET TO 2 IF SYSTEM HAS BOTH USER D AND SUPER MODE SUPPORT,D; 1 OTHERWISE. THIS IS BECAUSE THE OFFSET INTO JUMP TABLE FIELD MUST-; BE BIGGER THAN 255. IF THE SYSTEM HAS BOTH.R;- .IF DF X$$HDR&F$$MAPA .IF DF U$$DAS&S$$LIBL BLKMUL = 1K BLKDIV = 2R .IFF ; DF U$$DAS & S$$LIB BLKMUL = 2 BLKDIV = 1T .ENDC ; DF U$$DAS & S$$LIBH;+"$DRFMP::NOP ;;;* * * DEBUG * * *2 MOV $SAHDB,KISAR6 ;;;MAP CURRENT USER TASK HEADER2 BIC #77607,R0 ;;;VALIDATE USER'S FAST MAP POINTER" ;;;(FORCE POINTER TO BE VALID)- ;;;(ALSO, TEST HIGH BIT TO SEE IF WINDOW T" ;;;LENGTH CHANGE WAS DESIRED.)( BMI 20$ ;;;IF MI LENGTH CHANGE DESIRED/ ADD $FMAPP,R0 ;;;GET POINTER TO FAST MAP AREAA% CMP R1,(R0)+ ;;;PAST MAXIMUM OFFSET?  BHIS 10$ ;;;IF HI YES & MOV (R0)+,R2 ;;;GET ADDRESS OF W.BOFF5 MOV R1,(R2) ;;;STORE NEW OFFSET FIELD (LESS P.HDLN)F/ ADD @(R0)+,R1 ;;;ADD IN P.REL OF PCB TO OFFSET;5 MOVB (R0)+,R3 ;;;GET P.HDLN VALUE AND EXPAND TO WORDE/ ADD R3,R1 ;;;FORM REAL ADDRESS OF MAPPED AREAO. ADD R3,(R2)+ ;;;ADJUST OFFSET IN WINDOW BLOCK! MOVB (R2)+,R2 ;;;GET APR ADDRESSD5 ADD #UISAR0-UISDR0,R2 ;;;POINT TO PAR INSTEAD OF PARD& MOVB (R0),R0 ;;;GET JUMP TABLE VALUE .IF DF U$$DAS & S$$LIB ASL R0 ;;;SHIFT INDEX TO WORDS .ENDC ; DF U$$DAS & S$$LIBA( MOV #200,R3 ;;;SET OFFSET BETWEEN PARS' CALL FMPW1(R0) ;;;AND DISPATCH INTO IT)! MOV #1,R0 ;;;SET SUCCESS STATUS; RTT ;;;AND RETURN%10$: MOV #D.RS8,R0 ;;;INDICATE IE.ITSD RTT ;;;RETURN TO USER TASK ; ERROR EXITS FOR LENGTH CHANGES%11$: MOV #D.RS8,R0 ;;;INDICATE IE.ITS2# JMP $INTX1 ;;;RETURN TO USER TASKS&12$: MOV #D.RS84,R0 ;;;INDICATE IE.ALG# JMP $INTX1 ;;;RETURN TO USER TASKE .PAGE;+ ; FAST MAP WITH CHANGE IN LE00 hgfNGTH;-20$: ;;;REFERENCE LABEL1; SAVE SOME REGISTERS AND DROP PROCESSOR PRIORITY  MOV R5,-(SP) ;;;SAVE R5 MOV R4,-(SP) ;;;AND R4V$ DEC $STKDP ;;;SHOW ENTRY TO SYSTEM MTPS #0 ;;;ALLOW INTERRUPTSS$ NOP ;;; * * * D E B U G * * *7; CALCULATE ADDRESS OF FAST MAP HEADER BLOCK AND SET UP1 ; REGISTERS./ ADD #100002,R0 ;REMOVE LENGTH CHANGE INDICATORS ;AND SKIP MAX OFFSET FIELD0 ADD $FMAPP,R0 ;SET UP POINTER TO FAST MAP BLOCK+ MOV (R0)+,R4 ;R4 -> W.BOFF IN WINDOW BLOCKI# BEQ 11$ ;IF EQ, WINDOW NOT MAPPEDL! MOV (R0)+,R5 ;R5 -> P.REL IN PCBR, MOVB (R0)+,R3 ;GET P.HDLN FOR PARTITION AND ;SIGN EXTEND* ADD R3,R1 ;ADJUST OFFSET FIELD BY P.HDLNB; CALCULATE LENGTH TO MAP AND TEST IF LEGAL. IF NOT, RETURN IE.ITS TST R2 ;LENGTH SPECIFIEDS* BEQ 30$ ;IF EQ NO, CALCULATE LENGTH MOV R2,R3 ;COPY LENGTHG ADD R1,R3 ;ADD IN OFFSETI( BCS 11$ ;IF CS ADD WRAPPED AROUND( CMP R3,P.SIZE-P.REL(R5) ;LENGTH LEGAL? BLOS 40$ ;IF LOS YESI BR 11$ ;IF HI NOW130$: MOV P.SIZE-P.REL(R5),R2 ;GET PARTITION SIZEV1 SUB R1,R2 ;SUBTRACT OFFSET TO CALC. LENGTH - BCS 11$ ;IF CS SUBTRACT WRAPPED AROUNDD( CMP R2,W.BSIZ-W.BOFF(R4) ;LENGTH LEGAL? BLOS 40$ ;IF LOS YESS1 MOV W.BSIZ-W.BOFF(R4),R2 ;SUBSTITUTE WINDOW SIZE #; CALCULATE NEW END VIRTUAL ADDRESS3240$: MOV R1,(R4) ;SET NEW W.BOFF FIELD VALUE6 ADD (R5),R1 ;CONVERT OFFSET TO PHYSICAL ADDRESS. MOV R0,R5 ;SAVE POINTER TO OFFSET VALUE- MOV R2,R3 ;COPY LENGTH IN 32 WD BLOCKSV" ASH #6,R3 ;CONVERT TO BYTES, DEC R3 ;BACK OFF TO LAST BYTE ADDRESS5 ADD W.BLVR-W.BOFF(R4),R3 ;ADD IN LOW VIRTUAL ADDRESSO;; SAVE VALUES NEEDED IN PAR UPDATE CODE OR RETURNED TO USER - MOV R2,-(SP) ;SAVE NEW LENGTH OF WINDOWT- MOV R1,-(SP) ;SAVE PHYSICAL MAP ADDRESSD8 CMP R3,W.BHVR-W.BOFF(R4) ;SIZE OF WINDOW CHANGE AT ALL? BEQ 100$ ;IF EQ NOV7 MOV R3,W.BHVR-W.BOFF(R4) ;TO FORM HIGH VIRTUAL ADDRESSI; CALCULATE NEW NUMBER OF PDRS% MOV R2,R3 ;COPY SIZE OF WINDOW#" ADD #177,R3 ;ROUND UP BY 4K, ASH #-7,R3 ;CONVERT TO NUMBER OF PDRS- MOV R3,-(SP) ;SAVE FOR LAST PDR ADDRESSO ;CALCULATION LATERA3 CMPB R3,W.BNPD-W.BOFF(R4) ;NUMBER OF PDRS CHANGE ? + BEQ 80$ ;IF EQ NO, NO NEED TO UPDATE $ ;OFFSET OR CLEAR/RESET PDRS2 MOVB W.BNPD-W.BOFF(R4),R2 ;GET OLD NUMBER OF PDRS3 MOVB R3,W.BNPD-W.BOFF(R4) ;SET NEW NUMBER OFR PDRS46; CALCULATE NEW OFFSET FIELD FOR FAST MAP WINDOW BLOCK3 SUB R2,R3 ;FORM DIFFERENCE IN NUMBER OF PDRSD!; HANDLE SIMPLEST CASES (1,3,4,7)# .IF DF U$$DAS!S$$LIBU4 CMPB #</BLKDIV>,(R0) ;IS THIS A CASE 1 BHI 50$ ;IF HI YES  .IFTF ; DF U$$DAS ! S$$LIBR' ASL R3 ;MULTIPLY DIFFERENCE BY 2  .IF EQ BLKMUL-2 ASL R3 ;BY 4F .ENDC ; EQ BLKMUL-2 .IFT ; DF U$$DAS ! S$$LIB BR 70$ ;AND UPDATE 50$:<; HANDLE CASE 2 (ALSO HANDLES CASE 6) IN I/D & SUPER SYSTEMS .IF DF U$$DAS&S$$LIBD4 CMPB #</BLKDIV>,(R0) ;IS THIS A CASE 2 BHI 60$ ;IF HI NO/ MUL #,R3 ;CALCULATE DIFFERENCE BR 70$ ;AND UPDATEV .ENDC ; DF U$$DAS&S$$LIBI60$::; HANDLE CASE 5 (ALSO CASE 2 IN SUPER, NO D-SPACE SYSTEMS)/ MUL #,R3 ;CALCULATE DIFFERENCE .ENDC ; DF U$$DAS ! S$$LIB;70$:# MOV R3,-(SP) ;SAVE FOR UPDATEB; CLEAR ALL PDRS FOR OLD WINDOW % CLR R3 ;NO OFFSET BETWEEN PDRSD( MOVB W.BFPD-W.BOFF(R4),R2 ;POINT TO PDR1 MOV (R2),-(SP) ;SAVE A PDR FOR ACCESS VALUEA% CLR R1 ;VALUE TO STORE IS ZEROB% MOVB (R0),R0 ;GET OFFSET VALUE .IF DF U$$DAS&S$$LIBT$ ASL R0 ;CONVERT TO BYTE INDEX .ENDC ; DF U$$DAS&S$$LIBE CALL FMPW1(R0) ;CLEAR PDRS; SET ALL PDRS FOR NEW WINDOWA .IF DF U$$DAS&S$$LIB;0 MOVB (R5),R0 ;RETRIEVE OFFSET FIELD AGAIN .IFTF ; DF U$$DAS & S$$LIB ! MOV (SP)+,R1 ;GET PDR VALUE ' SUB (SP)+,R0 ;ADJUST OFFSET FIELDB$ BIS #77400,R1 ;FORCE 4K ACCESS/00h fcDATADATADATADATADATADATADATA MOVB R0,(R5) ;STORE UPDATED OFFSET VALUE 3 MOVB W.BFPD-W.BOFF(R4),R2 ;GET PDR ADDRESS (AGAIN)T .IFT ; DF U$$DAS & S$$LIBS# ASL R0 ;ADJUST TO WORD VALUEY .ENDC ; DF U$$DAS & S$$LIBS+ CALL FMPW1(R0) ;SET PDRS TO NEW VALUE !; SETUP LAST PDR TO CORRECT VALUED,80$: MOV 4(SP),R2 ;RETRIEVE WINDOW SIZE% DEC R2 ;BACK OFF TO LAST BLOCKD& BIC #177600,R2 ;ISOLATE PLF BITS( BNE 85$ ;IF NE NOT MULTIPLE OF 4K' TST (SP)+ ;REMOVE NUMBER OF PDRS  BR 95$ ;AND CONTINUES285$: SWAB R2 ;PUT IN RIGHT PLACE IN REGISTER1 MOVB W.BFPD-W.BOFF(R4),R3 ;GET FIRST PDR ADDRESS&( MOV (R3),R1 ;FETCH VALUE OF A PDR- BIC #77400,R1 ;CLEAR PLF FROM SAVED PDR # BIS R2,R1 ;AND MERGE NEW PLF $ DEC (SP) ;BACK OFF BY ONE PDR- ASL (SP) ;MULTIPLY NUMBER OF PDRS BY 2E) ADD (SP)+,R3 ;FORM LAST PDR ADDRESSB .IF DF S$$LIB!U$$DAST4 CMPB #</BLKDIV>,(R5) ;IS THIS A CASE 1 BLOS 90$ ;IF HI YES%; UPDATE LAST PDR FOR A CASE 2 WINDOW .IF DF U$$DAS4 CMPB #</BLKDIV>,(R5) ;IS THIS A CASE 2 BHI 84$ ;IF HI NO1 MOV R1,UDSAR0-UINAR0(R3) ;;;FILL IN LAST PDR (D)# BR 90$ ;AND CONTINUE #; UPDATE LAST PDR FOR CASE 6 WINDOW 84$:4 CMPB #</BLKDIV>,(R5) ;IS THIS A CASE 6 BHI 86$ ;IF HI NOB1 MOV R1,SDSAR0-UDSAR0(R3) ;;;FILL IN LAST PDR (D) BR 100$ ;AND UPDATE86$: .ENDC ; DF U$$DAS#; UPDATE LAST PDR FOR CASE 5 WINDOW 7 MOV R1,SDSAR0-UINAR0(R3) ;;;FILL IN LAST PDR (SUPER D). .IF DF U$$DAS6 MOV R1,UDSAR0-UINAR0(R3) ;;;FILL IN LAST PDR (USER D) .ENDC ; DF U$$DAS .ENDC ; DF U$$DAS ! S$$LIB (90$: MOV R1,(R3) ;FILL IN LAST PDRE95$: MOV R1,W.BLPD-W.BOFF(R4) ;SAVE VALUE OF LAST PDR IN WINDOW BLOCK1%; DISPATCH TO REGULAR PAR UPDATE CODE66100$: MOV #200,R3 ;SET OFFSET BETWEEN PARS TO 4K8 MOVB W.BFPD-W.BOFF(R4),R2 ;GET FIRST PDR ADDRESS AGAIN.6 ADD #UINAR0-UINDR0,R2 ;POINT TO PAR INSTEAD OF PDR9 MOV (SP)+,R1 ;GET BACK VALUE OF START (THIS RIGHT?)F+ MOVB (R5),R0 ;GET OFFSET VALUE AGAINL .IF DF U$$DAS&S$$LIB# ASL R0 ;ADJUST TO BYTE INDEXS .ENDC ; DF U$$DAS & S$$LIB  $ CALL FMPW1(R0) ;GO ADJUST PARS0 MOV (SP)+,R2 ;SET LENGTH TO RETURN TO USER' MOV #1,R0 ;SET IS.SUC FOR RETURND$ JMP $INTX1 ;GO RETURN TO USER .ENDC ; DF X$$HDR & F$$MAP. .PAGE;+3; **-$STFMP-SETUP FAST MAP BLOCK FOR ADDRESS WINDOWRC; **-$STFMC-SETUP FAST MAP BLOCK FOR ADDRESS WINDOW (CONDITIONALLY)L;OA; THESE ROUTINES SETS OR RE-SETS THE FAST MAP BLOCK IN THE HEADERL@; EXTENSION CORRESPONDING TO A WINDOW IN THE NORMAL HEADER AREA.;@; $STFMC IS CALLED FROM DRMAP TO EXAMINE WHETHER OR NOT A WINDOWD; REQUIRES FAST MAP UPDATE AND TO RE-FILL THE POINTERS IF NECESSARY.;; ; INPUTS:F;R(; R4=ADDRESS OF WINDOW TO BE FAST MAPPED; ; OUTPUTS:;$; R2,R3 ARE MODIFIED ($STFMC) ; R0,R2,R3 ARE MODIFIE ($STFMP)R;D@; THE FORMAT OF A FAST MAP HEADER EXTENSION BLOCK IS AS FOLLOWS:;N3; +-----------------------------------------------+E#; | MAXIMUM 32WD BLOCK OFFSET | 0E3; +-----------------------------------------------+A*; | POINTER TO W.BOFF IN WINDOW BLOCK | 23; +-----------------------------------------------+P!; | POINTER TO P.REL IN PCB | 4 3; +-----------------------+-----------------------+W8; 7 | DISPATCH OFFSET INTO | COPY OF P.HDLN FOR | 6.; | FMPW1 UPDATE VECTOR | TARGET PARTITION |3; +-----------------------------------------------+ ;- .IF DF X$$HDR&F$$MAP- .ENABL LSB-0$STFMC::TST $FMAPP ;TASK HAVE FAST MAP ENABLED? BEQ 10$ ;IF EQ NO, NO UPDATE+ TSTB W.BFPD(R4) ;IS IT A USER MODE WINDOW?E BPL 10$ ;IF PL NO, NO UPDATE MOV R0,-(SP) ;SAVE A REGISTER- MOVB W.BFPD(R4),R0 ;GET ADDRESS OF FIRST PDR  ASL R0 ;CONVERT TO QUAD WORD ASL R0 ;INDEX-) BIC #177607,R0 ;GET RID OF ALL BUT INDEXN, ADD $FMAPP,R0 ;GET ADDRESS OF FAST MAP AREA) CALL 20$ ;GO ADJUST FAST MAP PARAMETERS-"5$: MOV (SP)+,R0 ;RESTORE REGISTER 10$: RETURN. $STF00hgfMP:: ;&; CALCULATE ADDRESS OF FAST MAP WINDOW- MOVB W.BFPD(R4),R0 ;GET ADDRESS OF FIRST PDRN ASL R0 ;CONVERT TO QUAD WORD ASL R0 ;INDEX ) BIC #177607,R0 ;GET RID OF ALL BUT INDEXM, ADD $FMAPP,R0 ;GET ADDRESS OF FAST MAP AREA&; CALCULATE MAXIMUM OFFSET INTO REGION5 ASSUME W.BPCB,0 ;W.BPCB MUST BE FIRST WORD OF WINDOWG"20$: MOV (R4),R2 ;GET PCB ADDRESS, MOV P.SIZE(R2),(R0) ;SAVE SIZE OF PARTITION4 SUB W.BSIZ(R4),(R0) ;MAX OFFSET IS LESS WINDOW SIZE2 MOVB P.HDLN(R2),R3 ;CONVERT HEADER LENGTH TO WORD1 SUB R3,(R0) ;MAX OFFSET IS ALSO WITHOUT HDR LENR1 INC (R0)+ ;THE MAX OFF FIELD IS KEPT +1 SO THAT ' ;A VAL. OF ZERO CAN MEAN "UNMAPPED"6*; SET UP POINTER TO W.BOFF IN WINDOW BLOCK% MOV R4,(R0) ;INIT POINTER TO W.BOFFC6 ADD #W.BOFF,(R0)+ ;AND POINT TO CORRECT WORD IN BLOCK ; SET UP POINTER TO P.REL IN PCB, MOV R2,(R0) ;SET ADDRESS OF PCB INTO BLOCK% ADD #P.REL,(R0)+ ;AND POINT TO P.RELW&; COPY PARTITIONS EXTERNAL HEADER SIZE9 MOVB P.HDLN(R2),(R0)+ ;SET SIZE OF PARTITION'S EXT. HDR.B .PAGE;+-; NOW CALCULATE OFFSET INTO APR UPDATE TABLE. ); THERE ARE SEVEN CASES TO BE CONSIDERED. ;V+; SUPER MODE MAPPED SUPER MODE NOT MAPPEDP;T:; I-SPACE WINDOW (1) UPDATE I ONLY (4) UPDATE SUPER I ONLY; (WITH OVERLAPPINGO; D-SPACE WINDOW(S))C;E8; I-SPACE WINDOW (2) UPDATE I+D (5) UPDATE I,D, SUPER D; (NO OVERLAP);D8; D-SPACE WINDOW (3) UPDATE D-ONLY (6) UPDATE D, SUPER D;W+; SUPER I WINDOW N/A (7) SUPER I ONLY;V9; SYSTEMS WITH USER I/D AND NO SUPERVISOR MODE HAVE CASESA; (1), (2), AND (3) ONLY.S;I=; SYSTEMS WITH NO USER I/D BUT SUPER MODE HAVE CASE (1) AND AD; SUBSET OF CASE 5.E;-4; IN MULTI-CASE SYSTEMS, ASSUME IT'S THE SIMPLE CASE .IF DF U$$DAS!S$$LIBE/ CLR -(SP) ;ASSUME NO EXTRA OFFSET INTO VECTOR)/ MOV #BLK1SZ*BLKMUL,-(SP) ;ASSUME CASE 1 LENGTHT .ENDC ; DF U$$DAS!S$$LIB)%; CHECK FOR SUPERVISOR I-SPACE WINDOW( .IF DF S$$LIB0; TSTB W.BFPD(R4) ;IS IT A SUPER I-SPACE WINDOW?; BEQ 50$ ;IF EQ YESE .ENDC ; DF S$$LIB; CHECK FOR USER D-SPACE WINDOW  .IF DF U$$DAS1 BITB #20,W.BFPD(R4) ;IS IT A USER D-SPACE WINDOW  BEQ 30$ ;IF EQ NOA;; IF USER D-SPACE WINDOW, CHECK FOR SUPERVISOR MODE WINDOWSA .IF DF S$$LIB* TSTB $SUPFL ;ANY SUPERVISOR MODE WINDOWS BEQ 50$ ;IF EQ NOV= MOV #</BLKDIV>,2(SP) ;SET PARAMETERS FOR CASE 6D MOV #BLK6SZ*BLKMUL,(SP) ;S .ENDC ; DF S$$LIB BR 50$ ;TO COMMON CODE .ENDC ; DF U$$DAS5; CHECK USER I WINDOW FOR OVERLAPPING D-SPACE WINDOWS$ 30$: ;C .IF DF U$$DAS$ MOVB W.BFPD(R4),R3 ;GET PDR ADDRESS& SUB #UINDR0,R3 ;ADJUST TO OFFSET ZERO ASR R3 ;CONVERT TO BYTE INDEXE' MOVB W.BNPD(R4),R2 ;GET NUMBER OF PDRSD& ADD R3,R2 ;FORM ENDING PDR NUMBER +1. MOVB $BCMSK-1(R2),R2 ;GET MASK UP TO LAST APR/ BICB $BCMSK-1(R3),R2 ;GET MASK UP TO FIRST APR  MOV $SAHPT,R3 ;POINT TO HEADER6! BITB R2,H.DMAP(R3) ;ANY OVERLAP?D# BNE 50$ ;IF NE YES, UPDATE I ONLY .ENDC ; DF U$$DAS(; USER I-SPACE WITH NO OVERLAP D WINDOWS .IF DF S$$LIB" TSTB $SUPFL ;SUPER MODE WINDOWS? BEQ 40$ ;IF EQ NOA= MOV #</BLKDIV>,2(SP) ;SET PARAMETERS FOR CASE 5  MOV #BLK5SZ*BLKMUL,(SP) ;R BR 50$ ;TO COMMON CODE D .ENDC ; DF S$$LIB40$: .IF DF U$$DAS= MOV #</BLKDIV>,2(SP) ;SET PARAMETERS FOR CASE 6T MOV #BLK2SZ*BLKMUL,(SP) ;P 3 .ENDC ; DF U$$DAS-50$: MOVB W.BNPD(R4),R3 ;FETCH NUMBER OF PDRS  .IF DF U$$DAS!S$$LIB& MUL (SP)+,R3 ;CONVERT TO N WORD INDEX+ ADD (SP)+,R3 ;ADD IN ANY ADDITIONAL OFFSETT .IFF ; DF U$$DAS!S$$LIB ASL R3 ;CONVERT TO WORD INDEX$ ASL R3 ;CONVERT TO TWO WORD INDEX .ENDC ; DF U$$DAS!S$$LIBZ NEG R3 ;MAKE IT NEGATIVE MOVB R3,(R0)+ ;SET JUMP INDEX RETURN ;DONE. .DSABL LSB .ENDC ; DF X$$HDR&F$$MAP2 .PAGE;+C; FAST MAP APR UPDATE TABLES. THERE ARE FOUR SETS OF UPDATE CODE TO$; COVER THE SEVEN CASES.;- .IF DF F$$MAP&X$$HDR;+G; CASE 5 - UPDATE SUPER AND USER DATA SPACE AND PAR POINTED TO BY FAST R8; MAP W00%hS+hcDATADATADATADATADATADATADATAINDOW BLOCK (THIS WILL ALWAYS BE USER I-SPACE);- .IF DF S$$LIB .REPT 74 MOV R1,SDSAR0-UINAR0(R2) ;;;FILL IN SUPER D PAR/PDR .IF DF U$$DAS3 MOV R1,UDSAR0-UINAR0(R2) ;;;FILL IN USER D PAR/PDRI .ENDC ; DF U$$DAS, MOV R1,(R2)+ ;;;FILL IN USER I PAR/PDR& ADD R3,R1 ;;;AND ADVANCE BY 4KW .ENDR .IF DF U$$DAS BLK5SZ = 6$ .IFF ; DF U$$DASA BLK5SZ = 4F .ENDC ; DF U$$DAS $$$ = . . = . + < BLK5SZ * 2 >D(FMPW5: ;;;POINT TO END OF BLOCKS . = $$$9 MOV R1,SDSAR0-UINAR0(R2) ;;;FILL IN LAST SUPER D PAR/PDR$ .IF DF U$$DAS8 MOV R1,UDSAR0-UINAR0(R2) ;;;FILL IN LAST USER D PAR/PDR .ENDC ; DF U$$DAS1 MOV R1,(R2) ;;;FILL IN LAST USER I PAR/PDRN RETURN ;;;AND GO BACK .ENDC ; DF S$$LIB;+H; CASE 6 - UPDATE SUPER DATA SPACE AND PAR POINTED TO BY FAST MAP WINDOW-; BLOCK (THIS WILL ALWAYS BE USER D-SPACE)F;- .IF DF U$$DAS&S$$LIB$ .REPT 74 MOV R1,SDSAR0-UDSAR0(R2) ;;;FILL IN SUPER D PAR/PDR, MOV R1,(R2)+ ;;;FILL IN USER D PAR/PDR& ADD R3,R1 ;;;AND ADVANCE BY 4KW .ENDR BLK6SZ = 40 $$$ = . . = . + < BLK6SZ * 2 >R(FMPW6: ;;;POINT TO END OF BLOCKS . = $$$9 MOV R1,SDSAR0-UDSAR0(R2) ;;;FILL IN LAST SUPER D PAR/PDR1 MOV R1,(R2) ;;;FILL IN LAST USER U PAR/PDRE RETURN ;;;AND GO BACK  .ENDC ; DF U$$DAS & S$$LIB(;+G; CASE 2 - UPDATE USER DATA SPACE AND PAR POINTED TO BY FAST MAP WINDOW-; BLOCK (THIS WILL ALWAYS BE USER I SPACE)R;- .IF DF U$$DAS .REPT 73 MOV R1,UDSAR0-UINAR0(R2) ;;;FILL IN USER D PAR/PDRW, MOV R1,(R2)+ ;;;FILL IN USER I PAR/PDR& ADD R3,R1 ;;;AND ADVANCE BY 4KW .ENDR BLK2SZ = 4= $$$ = . . = . + < BLK2SZ * 2 >F(FMPW2: ;;;POINT TO END OF BLOCKS . = $$$8 MOV R1,UDSAR0-UINAR0(R2) ;;;FILL IN LAST USER D PAR/PDR1 MOV R1,(R2) ;;;FILL IN LAST USER I PAR/PDRU RETURN ;;;AND GO BACK .IFF ; DF U$$DASW0FMPW2: ;;;MAKE SURE THIS LABEL IS ALWAYS& ;;;DEFINED SO THAT THE OFFSET/ ;;;ADJUST CODE CAN COMPARE AGAINST IT.D .ENDC ; DF U$$DAS;+9; CASES 1, 3, 4, AND 7. UPDATE JUST THE APR POINTED TO BYW; THE FAST MAP WINDOW.;- .REPT 7% MOV R1,(R2)+ ;;;FILL IN PAR/PDR;& ADD R3,R1 ;;;AND ADVANCE BY 4KW .ENDR BLK1SZ = 2; $$$ = . . = . + < BLK1SZ * 2 >,(FMPW1: ;;;POINT TO END OF BLOCKS . = $$$ * MOV R1,(R2) ;;;FILL IN LAST PAR/PDR RETURN ;;;AND GO BACK .ENDC ; DF F$$MAP & X$$HDRE  .ENDC .END ;;;ADJUST CODE CAN COMPARE AGAINST IT.D .ENDC ; DF U$$DAS;+9; CASES 1, 3, 4, AND 7. UPDATE JUST THE APR POINTED TO BYW; THE FAST MAP WINDOW.;- .REPT 7% MOV R1,(R2)+ ;;;FILL IN PAR/PDR;& ADD R3,R1 ;;;AND ADVANCE BY 4KW .ENDR BLK1SZ = 2; $$$ = . . = . + < BLK1SZ * 2 >,(FMPW1: ;;;POINT TO END OF BLOCKS . = $$$ * MOV R1,(R2) ;;;FILL IN LAST PAR/PDR RETURN ;;;AND GO BACK .ENDC ; DF F$$MAP & X$$HDRE .TITLE DRMKT .IDENT /08.00/A;; COPYRIGHT (C) 1987 BYN; DIGITAL EQUIPMENT CORPORATIONO; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;1; D. N. CUTLER 5-SEP-73S;D; PREVIOUSLY MODIFIED BY:C;<; B. S. MCCARTHY; J. W. BERZLE; C. B. PETROVIC; J. R. KAUFFMAN;D; MODIFIED BY:;.; J. W. BERZLE 6-NOV-86 08.00I;Q+; JWB186 -- SAVE UIC AROUND CALL TO $CRCTXC;; MARK TIME AND RUN DIRECTIVES;D; MACRO LIBRARY CALLSY;H .MCALL CLKDF$ I .IF DF N$$DIRP .MCALL LNMDF$' LNMDF$ ;DEFINE CONTEXT BLOCK OFFSETSI D .ENDC ;DF N$$DIRD3 CLKDF$ ;DEFINE CLOCK QUEUE CONTROL BLOCK OFFSETSE;+; **-$DRMKT-MARK TIME.; I; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO DECLARE A SIGNIFICANT EVENT AT A.$; SPECIFIED INTERVAL FROM INSSUANCE.;F ; DPB FORMAT:I;D"; WD. 00 -- DIC(23.),DPB SIZE(5.).6; WD. 01 -- EVENT FLAG NUMBER OF EVENT FLAG TO BE SET.$; WD. 02 -- TI00S-hgfME INTERVAL MAGNITUDE. ; WD. 03 -- TIME INTERVAL UNITS.$; WD. 04 -- AST ENTRY POINT ADDRESS.;CC; IF AN EVENT FLAG IS SPECIFIED, THEN IT IS CLEARED AT ISSUANCE ANDF+; SET AT THE TIME OF THE SIGNIFICANT EVENT.T; ?; IF AN AST ENTRY POINT IS SPECIFIED, THEN AN ASYNCHRONOUS TRAPE>; WILL OCCUR AT THE TIME OF THE SIGNIFICANT EVENT. PS, PC, THE<; DIRECTIVE STATUS WORD, AND THE SPECIFIED EVENT FLAG NUMBER:; ARE PUSHED ONTO THE TASK STACK WHEN THE AST IS EFFECTED.;F ; INPUTS: ;B; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS.I9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.C*; R3=ADDRESS OF THE THIRD WORD IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.T,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;N:; OUTPUTS: (DIRECTIVE STATUS AND PS WORD RETURNED TO TASK); -; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.I&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.T:; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF INSUFFICIENT4; CORE IS AVAILABLE TO ALLOCATE CLOCK QUEUE ENTRY.;- .ENABL LSBE0$DRMKT::MOV -2(R3),-(SP) ;SAVE EVENT FLAG NUMBER+ MOV R1,-(SP) ;SAVE EVENT FLAG MASK ADDRESS 2 BIC #1,R1 ;CLR GRP GLOBAL EFN 2ND WORD INDICATOR BIC R0,(R1) ;CLEAR EVENT FLAGT! MOV R0,R4 ;SAVE EVENT FLAG MASKT* CALL $CVRTM ;CONVERT TIME TO CLOCK TICKS+ MOV R0,-(SP) ;SAVE HIGH ORDER PART OF TIME * MOV R1,-(SP) ;SAVE LOW ORDER PART OF TIME# MOV R4,-(SP) ;SAVE EVENT FLAG MASKI' CLR R4 ;SET TYPE OF CLOCK QUEUE ENTRYF E  .IF DF S$$LIB L* MOV (R3),R2 ;GET AST ENTRY POINT ADDRESS0 CALL $CALTA ;CALCULATE PROPER ADDRESS TO STORE+ MOV R2,-(SP) ;SAVE AST ENTRY POINT ADDRESS  R .IFFB #- MOV (R3),-(SP) ;SAVE AST ENTRY POINT ADDRESSB R .ENDC E E T .IF DF A$$CNT 3 CALL $ALCLK ;ALLOCATE A CLOCK QUEUE CONTROL BLOCKO BR 25$ ; M .IFF( BR 20$ ; R .ENDC M ;+; **-$DRRUN-RUN TASK;AE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO GENERATE A CLOCK QUEUE ENTRY @; TO CAUSE A TASK TO BE REQUESTED AT A SPECIFIED DELTA TIME FROM=; ISSUANCE AND TO OPTIONALLY REPEAT THE REQUEST PERIODICALLY.S;O ; DPB FORMAT:,;P$; WD. 00 -- DIC(17.),DPB SIZE (11.).$; WD. 01 -- FIRST HALF OF TASK NAME.%; WD. 02 -- SECOND HALF OF TASK NAME.E=; WD. 03 -- PARTITION NAME-NOT SUPPORTED BUT MUST BE PRESENT. =; WD. 04 -- PARTITION NAME-NOT SUPPORTED BUT MUST BE PRESENT.N?; WD. 05 -- REQUEST PRIORITY-NOT SUPPORTED BUT MUST BE PRESENT.R; WD. 06 -- REQUEST UIC.!; WD. 07 -- DELTA TIME MAGNITUDE.A; WD. 10 -- DELTA TIME UNITS.I*; WD. 11 -- RESCHEDULE INTERVAL MAGNITUDE.&; WD. 12 -- RESCHEDULE INTERVAL UNITS.;O ; INPUTS:M;,5; R0=ADDRESS OF THE TCB OF THE OF THE TASK TO BE RUN. ;; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO BE RUN.E9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E.; R3=ADDRESS OF THE PARTITION NAME IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.I,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;-5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;0-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.I&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.M:; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF INSUFFICIENT4; CORE IS AVAILABLE TO ALLOCATE CLOCK QUEUE ENTRY.;; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF AN ATTEMPT IS 3; MADE TO ACTIVATE A TASK WHOSE NAME BEGINS WITH .-; "..." (IF EXECUTIVE-LEVEL DISPATCHING). K9; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF A NONPRI- P2; VILEGED TASK SPECIFIES ANOTHER UIC (IF MULTI- ; USER PROTECTION). C ; ;- MAP6=140000$DRRUN:: ; T  .IF DF R$$DSP R 7 CMP T.NAM(R0),#^R... ;MULTI-USER TASK NAME SPECIFIED? I BEQ 40$ ;IF EQ YES, ILLEGAL  .ENDC - MOV R0,R5 ;SAVE TCB ADDRESS OF TASK TO RUN * ADD #6,R3 ;POINT TO REQUEST UIC IN DPB ! CLR -(SP) ;SET DUMMY EFN NUMBERE .IF DF M$$MUP$ MOV (R3)+,R1 ;PICK UP SPECIFIED UIC MOV R3,-(SP) ;SAVE R32 CALL $UISET ;ESTABLISH DEFAULT AND00S5hA;hcDATADATADATADATADATADATADATA CURRENT UIC'S MOV (SP)+,R3 ;RESTORE R3D/ BCS 30$ ;IF CS NONPRV TASK SPECIFIED DIFF UIC  MOV R1,-(SP) ;SAVE CURRENT UICT .IFF#$ MOV (R3)+,-(SP) ;SAVE SPECIFIED UIC .ENDC0 CALL $CVRTM ;CONVERT DELTA TIME TO CLOCK TICKS+ MOV R0,-(SP) ;SAVE HIGH ORDER PART OF TIME * MOV R1,-(SP) ;SAVE LOW ORDER PART OF TIME+ MOV #C.SSHT,R4 ;ASSUME SINGLE SHOT REQUESTM1 MOV (R3)+,R0 ;ANY RESCHEDULE INTERNAL SPECIFIED?  BEQ 10$ ;IF EQ NOC3 CMP -(R3),-(R4) ;ADJUST DPB ADDRESS AND ENTRY TYPEF9 CALL $CVRTM ;CONVERT RESCHEDULE INTERNAL TO CLOCK TICKS$/10$: MOV R0,-(SP) ;SAVE HIGH ORDER PART OF TIME,* MOV R1,-(SP) ;SAVE LOW ORDER PART OF TIME720$: CALL $ALCLK ;ALLOCATE A CLOCK QUEUE CONTROL BLOCKM C E .IF DF A$$CNT O' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGP) MOV $TKTCB,R1 ;LOCATE CURRENT TASK'S TCB + MOV T.ACN(R1),KISAR6 ;MAP ACCOUNTING BLOCKS% BEQ 24$ ;IF EQ, NO ACCOUNTING BLOCKD-22$: CMPB #BT.UAB,@#B.TYP+140000 ;IS IT A UAB BEQ 23$ ;IF EQ YES5 MOV @#B.PNT+140000,KISAR6 ;MAP NEXT ACCOUNTING BLOCKR BR 22$ ;-23$: INCB @#B.USE+140000 ;INCREMENT USE COUNT 724$: MOV KISAR6,C.UAB(R0) ;PUT UAB ADDRESS IN CLQ BLOCKA+ MOV (SP)+,KISAR6 ;RESTORE ORIGINAL MAPPINGC25$: ;MERGE POINT C .ENDC D $8 MOV (SP)+,C.RSI(R0) ;INSERT AST ADDRESS/LOW PART OF RSI8 MOV (SP)+,C.RSI+2(R0) ;INSERT EFN MASK/HIGH PART OF RSI. MOV (SP)+,R2 ;RETRIEVE DELTA TIME TICKS COUNT MOV (SP)+,R1 ; .IF NDF N$$DIR# MOV (SP)+,C.UIC(R0) ;INSERT UIC I .IFF ;NDF N$$DIRP$ TST R4 ;IS THIS MARKTIME DIRECTIVE BNE 26$ ;IF NE, NO- MOV (SP)+,C.UIC(R0) ;INSERT EFN MASK ADDRESS: BR 29$ ;BR AROUND $26$: MOV (SP)+,R3 ;GET UIC OFF STACK MOV R1,-(SP) ;SAVE R1 MOV $TKTCB,R1 ;GET TI: UCBE% MOV T.CTX(R1),R1 ;GET CONTEXT BLOCK C BNE 28$ ;IF NE, THERE IS ONE* MOV R0,-(SP) ;SAVE POINTER TO CLOCK BLOCK, CLR R0 ;INDICATE NO DDS FOR CREATE CONTEXT MOV R3,-(SP) ;SAVE UICU( MOV R2,-(SP) ;SAVE LOW ORDER TIME VALUE# CALL $CRCTX ;CREATE CONTEXT BLOCKI$ BCS 50$ ;IF CS, ALLOCATION FAILURE+ MOV (SP)+,R2 ;RESTORE LOW ORDER TIME VALUE MOV R3,R1 ;PUT CTX INTO R1 MOV (SP)+,R3 ;RESTORE UIC* MOV (SP)+,R0 ;RESTORE CLOCK BLOCK POINTER:28$: MOV R1,C.CTX(R0) ;PUT CONTEXT BLOCK INTO CLOCK BLOCK' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGB! MOV R1,KISAR6 ;MAP CONTEXT BLOCKR+ INCB C.REF+MAP6 ;INCREMENT REFERENCE COUNT / MOV R3,C.CUIC+MAP6 ;PUT UIC INTO CONTEXT BLOCKP" MOV (SP)+,KISAR6 ;RESTORE MAPPING MOV (SP)+,R1 ;RESTORE R1C3 BIS #100000,R4 ;INDICATE SCHEDULE REQUEST WITH DDSA29$: .ENDC ;DF N$$DIR + MOVB (SP)+,C.EFN(R0) ;INSERT EFN/ZERO BYTET% CALLR $CLINS ;INSERT IN CLOCK QUEUE .IF DF M$$MUP'30$: DRSTS D.RS16 ;PRIVILEGE VIOLATION0 .ENDC .IF DF R$$DSP K 340$: DRSTS D.RS7 ;MULTI-USER TASK NAME SPECIFIED O  .ENDC  E .IF DF N$$DIR%50$: DRSTS D.RS1 ;ALLOCATION FAILURE  .ENDC ;DF N$$DIRS .DSABL LSB( .ENDRESTORE R1C3 BIS #100000,R4 ;INDICATE SCHEDULE REQUEST WITH DDSA29$: .ENDC ;DF .IF DF L$$GCL .NLIST .ENABL LC .NLIST BIN,LOC .LIST X; Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 1C; 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (1),; 0001 0 %TITLE 'Logical Name Directives'); 0002 0 MODULE DRPFN (IDENT = 'X1.10'; 0003 0 ) =; 0004 1 BEGIN,; 0005 1 ! COPYRIGHT (c) 1985,1986 BYA; 0006 1 ! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; 0007 1 !T; 0008 1 ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDT; 0009 1 ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THET; 0010 1 ! INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERT; 0011 1 ! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANYT; 0012 1 ! OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY; 0013 1 ! TRANSFERRED. ; 0014 1 !RT; 0015 1 ! THE INFORMATION IN THIS SOFTWARE IS SUBJ00A=hgfECT TO CHANGE WITHOUT NOTICET; 0016 1 ! AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT; 0017 1 ! CORPORATION. ; 0018 1 ! T; 0019 1 ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITSE; 0020 1 ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.L ; 0021 1 ; 0022 1 !++E; 0023 1 ! FACILITY:N&; 0024 1 ! RSX-11M-PLUS executive ; 0025 1 !N; 0026 1 ! ABSTRACT:M; 0027 1 ! Provide the directives that support the use of logical names,O<; 0028 1 ! particularly in relation to file operations. ; 0029 1 !T; 0030 1 ! ENVIRONMENT:Q; 0031 1 ! Kernel Mode, priority 0, called by directive dispatcher, residentH>; 0032 1 ! in directive common, overmapped I and D spaces ; 0033 1 !T; 0034 1 ! AUTHORs:; 0035 1 ! Tony Lekas"; 0036 1 ! Michael Pettengill ; 0037 1 !1); 0038 1 ! CREATION DATE: 16-JUN-1984 ; 0039 1 !+; 0040 1 ! MODIFIED FOR M-PLUS V 3.0 BY:u ; 0041 1 !f ; 0042 1 ! Paul K. M. Weiss ; 0043 1 ! ; 0044 1 ! Modified by: ; 0045 1 !T.; 0046 1 ! Paul K. M. Weiss 8-Apr-1986 1.09 ; 0047 1 !r3; 0048 1 ! PKW111 - Don't crash on a parse of _ L; 0049 1 ! PKW112 - Don't remove all zeros from version # in FCS defaultG; 0050 1 ! Don't return version # of -1 in FCS default as 177777  t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 2 H;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (1) ; 0051 1 !3.; 0052 1 ! Paul K. M. Weiss 8-Aug-1986 1.10 ; 0053 1 ! H; 0054 1 ! PKW117 - Don't clear FS$QUO when a node is separated for #; 0055 1 ! logical expansion0; 0056 1 !-- ; 0057 1 ; 0058 1 !e; 0059 1 ! INCLUDE FILES: ; 0060 1 !'!; 0061 1 LIBRARY 'BLI:RSX11M';a ; 0062 1 LIBRARY 'BLI:FCS11'; a];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 3AH;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (2) ; 0063 1 !l; 0064 1 ! MACROS: ; 0065 1 ! ; 0066 1 MACRO ; 0067 1 !a/; 0068 1 ! Set directive status and exit ; 0069 1 !a); M 0070 1 ERROR_EXIT (error_code) = ; M 0071 1 BEGIN; M 0072 1 LINKAGE#; M 0073 1 error_trap = TRAP;B0; M 0074 1 error_trap (error_code AND %o'377'); 0075 1 END %;e ; 0076 1 ; 0077 1 MACRO1; 0078 1 !4A; 0079 1 ! Move a character string. Advance the pointers.E; 0080 1 !0'; M 0081 1 ch$move (len, ip, op) =A; M 0082 1 BEGIN ; M 0083 1 ; M 0084 1 MAP&; M 0085 1 ip : REF VECTOR [,BYTE],&; M 0086 1 op : REF VECTOR [,BYTE]; ; M 0087 1 ; M 0088 1 IF len NEQU 0; M 0089 1 THEN (; M 0090 1 DECR i FROM len TO 1 DO; M 0091 1 BEGIN4; M 0092 1 op [0] = .ip [0];o; M 0093 1 op = op [1];; M 0094 1 ip = ip [1];; M 0095 1 END; ; M 0096 1 ; 0097 1 END; %; ; 0098 1 ; 0099 1 LITERAL 4; 0100 1 debug_version = 1; ! Variant type ; 0101 1 ; 0102 1 MACRO ; 0103 1 ! E; 0104 1 ! No /VARIANT switch produces the production version.RH; 0105 1 ! /VARIANT produces the debug version with global stuff.; 0106 1 ! "; M 0107 1 global_for_debug =@; 0108 1 %IF %VARIANT EQLU debug_version %THEN GLOBAL %FI %,0; M 0109 1 global_for_debug_own_otherwise =I; 0110 1 %IF %VARIANT EQLU debug_version %THEN GLOBAL %ELSE OWN %FI%, -; M 0111 1 external_debug_forward_else = O; 0112 1 %IF %VARIANT EQLU debug_version %THEN EXTERNAL %ELSE FORWARD %FI%, ; M 0113 1 find_something =,; M 0114 1 %IF %VARIANT EQLU debug_version; M 0115 1 %THEN; M 0116 1 find_test f];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 4gH;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (2); M 0117 1 %ELSE!; M 0118 1 find_equivalenc00AEh;hcDATADATADATADATADATADATADATAeG; 0119 1 %FI%; ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 5HH;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (3) ; 0120 1 !N; 0121 1 ! LINKAGES ; 0122 1 !N; 0123 1 LINKAGEnj; 0124 1 $LNxxx_l = JSR (REGISTER = 3, REGISTER = 4, REGISTER = 5) : NOPRESERVE (0, 1, 2, 3, 4, 5),^; 0125 1 common_parse_l = JSR (REGISTER = 3, REGISTER = 4, REGISTER = 5, REGISTER = 0),T; 0126 1 sec_spec_convert_l = JSR (REGISTER = 3, REGISTER = 4; REGISTER = 3),D; 0127 1 return_ie_xxx_l = JSR : PRESERVE (0, 1, 2, 3, 4, 5),i; 0128 1 lun_assign_l = JSR (REGISTER = 3, REGISTER = 4, REGISTER = 5, REGISTER = 0, REGISTER = 1,II; 0129 1 REGISTER = 2; REGISTER = 1) : NOPRESERVE (0, 1, 2, 3, 4, 5),Rb; 0130 1 find_equivalence_l = JSR (REGISTER = 1, REGISTER = 2; REGISTER = 1, REGISTER = 2),U; 0131 1 fss_l = JSR (REGISTER = 4, REGISTER = 5; REGISTER = 4, REGISTER = 5), 7; 0132 1 expand_filespec_l = JSR (REGISTER = 3),EF; 0133 1 separate_logical_l = JSR (REGISTER = 3, REGISTER = 4),3; 0134 1 ch$classify_l = JSR (REGISTER = 1),To; 0135 1 ch$copy_l = JSR (REGISTER = 1, REGISTER = 2, REGISTER = 3; REGISTER = 3) : NOPRESERVE (0, 1, 2)E; 0136 1 PRESERVE (4, 5), I; 0137 1 save_parse_l = JSR (REGISTER = 1) : NOPRESERVE (0, 1, 2),=`; 0138 1 RAD50_to_ASCII_l = JSR (REGISTER = 1, REGISTER = 2, REGISTER = 3; REGISTER = 2); ; 0139 1 ; 0140 1 !a ; 0141 1 ! TABLE OF CONTENTS: ; 0142 1 ! ; 0143 1 FORWARD ROUTINE(Y; 0144 1 $LNFSS : $LNxxx_l NOVALUE, ! File Specification Scan, called from DRLOG5P; 0145 1 $LNCHN : $LNxxx_l NOVALUE, ! Assign channel, called from DRLOGR; 0146 1 $LNRMS : $LNxxx_l NOVALUE, ! RMS format parse, called from DRLOGR; 0147 1 $LNFCS : $LNxxx_l NOVALUE, ! FCS format parse, called from DRLOG_; 0148 1 common_parse : common_parse_l NOVALUE, ! Parse code common to RMS and FCS parse1V; 0149 1 fss : fss_l NOVALUE, ! Utility routine to parse a file specification`; 0150 1 expand_filespec : expand_filespec_l, ! Expand a file specification with logicalsF; 0151 1 ch$classify : ch$classify_l, ! Classify the characterS; 0152 1 ch$copy : ch$copy_l NOVALUE, ! Copy, upcase, and compress a string ]; 0153 1 convert_parse : NOVALUE, ! Convert addresses in parse block to user virtualpL; 0154 1 merge, ! Merge primary and secondary file specificationsO; 0155 1 save_parse : save_parse_l NOVALUE, ! Save and zero parse blocknS; 0156 1 RAD50_to_ASCII : RAD50_to_ASCII_l NOVALUE; ! Convert RAD50 to ASCIIw ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 6 H;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (4)/; 0157 1 EXTERNAL_DEBUG_FORWARD_ELSE ROUTINEaZ; 0158 1 find_equivalence : find_equivalence_l; ! Find equivalence for logical name ; 0159 1 ; 0160 1 ! ; 0161 1 ! EQUATED SYMBOLS: ; 0162 1 !,; 0163 1 LITERALs; 0164 1 true = 1,A; 0165 1 false = 0,; 0166 1 valid = 1,; 0167 1 success = 1,; 0168 1 terminal = 3,6; 0169 1 error = 0,-; 0170 1 bad_node = -1176, ! ER$NOD .; 0171 1 bad_device = -448, ! ER$DEVD; 0172 1 bad_directory = -464, ! ER$DIRD; 0173 1 bad_filename = -752, ! ER$FNMD; 0174 1 bad_char = -1824, ! ER$XTRD; 0175 1 bad_logical = -184, ! ER$BEQD; 0176 1 bad_recursive = -1688, ! ER$TRND; 0177 1 bad_size = -780; ! ER$FTB ; 0178 1 ; 0179 1 LITERAL!>; 0180 1 apr5_v = %o'120000', ! APR 5 virtual address>; 0181 1 apr6_v = %o'140000'; ! APR 6 virtual address ; 0182 1 *; 0183 1 LITERAL ! Character types7; 0184 1 00AMhgfch_other = 0, ! All other characters ,; 0185 1 ch_lower = 1, ! Lowercase); 0186 1 ch_space = 2, ! SpacesB.; 0187 1 ch_oct = 3, ! Octal Number.; 0188 1 ch_alpha = 4, ! Alphabetic (; 0189 1 ch_comma = 5, ! Comma(; 0190 1 ch_colon = 6, ! Colon1; 0191 1 ch_quote = 7, ! "Double" quoteu<; 0192 1 ch_dir = 8, ! Matching directory bracket=; 0193 1 ch_wild = 9, ! Wildcards, star and percentr'; 0194 1 ch_dash = 10, ! Dash!%; 0195 1 ch_dot = 11, ! Dot 0; 0196 1 ch_dollar = 12, ! Dollar sign.; 0197 1 ch_under = 13, ! Underscore4; 0198 1 ch_8and9 = 14, ! Non octal digitsA; 0199 1 ch_misc = 15, ! Miscellaneous valid characters0?; 0200 1 ch_valid = 2, ! Minimum valid character type 8; 0201 1 ch_max = 15; ! Maximum character type ; 0202 1 ; 0203 1 !1D; 0204 1 ! These are from FSS$BT in RMSMAC.MLB. They are defined!; 0205 1 ! here for convience.1 ; 0206 1 !t; 0207 1 LITERAL ; 0208 1 FS$VER = %o'1',D; 0209 1 FS$TYP = %o'2',d; 0210 1 FS$NAM = %o'4',8 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 7dH;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (4) ; 0211 1 FS$WVE = %o'10', ; 0212 1 FS$WTY = %o'20', ; 0213 1 FS$WNA = %o'40',!; 0214 1 FS$DIR = %o'100',.!; 0215 1 FS$DEV = %o'200', !; 0216 1 FS$NOD = %o'400', "; 0217 1 FS$WDI = %o'1000',"; 0218 1 FS$QUO = %o'2000',"; 0219 1 FS$WCH = %o'4000',#; 0220 1 FS$NDF = %o'10000';a ; 0221 1 ; 0222 1 LITERAL:C; 0223 1 logical_type_none = 0, ! Values for parse_block_f8A; 0224 1 logical_type_filename = 1, ! field logical_type (; 0225 1 logical_type_device = 2,&; 0226 1 logical_type_node = 3; ; 0227 1 ; 0228 1 FIELD0; 0229 1 parse_block_f ='; 0230 1 SET?; 0231 1 fss_status = [0, 0, 16, 0], ! Status of operation 1; 0232 1 flags = [1, 0, 16, 0], ! Flag wordWF; 0233 1 node_len = [2, 0, 16, 0], ! Length of node specificationH; 0234 1 node_addr = [3, 0, 16, 0], ! Address of node specificationJ; 0235 1 device_len = [4, 0, 16, 0], ! Length of device specificationL; 0236 1 device_addr = [5, 0, 16, 0], ! Address of device specificationO; 0237 1 directory_len = [6, 0, 16, 0], ! Length of filename specification Q; 0238 1 directory_addr = [7, 0, 16, 0], ! Address of filename specification N; 0239 1 filename_len = [8, 0, 16, 0], ! Length of filename specificationP; 0240 1 filename_addr = [9, 0, 16, 0], ! Address of filename specificationG; 0241 1 type_len = [10, 0, 16, 0], ! Length of type specification I; 0242 1 type_addr = [11, 0, 16, 0], ! Address of type specification M; 0243 1 version_len = [12, 0, 16, 0], ! Length of version specification O; 0244 1 version_addr = [13, 0, 16, 0], ! Address of version specification,H; 0245 1 trailing_len = [14, 0, 16, 0], ! Length of trailing stringJ; 0246 1 trailing_addr = [15, 0, 16, 0], ! Address of trailing stringK; 0247 1 access_len = [16, 0, 16, 0], ! Length of access specification1M; 0248 1 access_addr = [17, 0, 16, 0], ! Address of access specification,J; 0249 1 logical_type = [18, 0, 8, 0], ! First element which could be; 0250 1 ! a logical ; 0251 1 ! 0 - None ; 0252 1 ! 1 - Filename; 0253 1 ! 2 - Device; 0254 1 ! 3 - Node7; 0255 1 reserved_field = [18, 8, 8, 0] ! Reserved ; 0256 1 ; 0257 1 TES; ; 0258 1 ; 0259 1 FIELD &; 0260 1 logical_descriptor_f =; 0261 1 SETE; 0262 1 length = [0, 0, 16, 0], ! Logical name length in bytesfJ; 0263 1 address_base = [1, 0, 16, 0], ! 32 word block offset of baseV; 0264 1 address_disp_apr6 = [2, 0, 16, 0], ! APR6 displacment of the logical name 2];DRPFN00AUh;hcDATADATADATADATADATADATADATA Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 82H;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (4)H; 0265 1 table_number = [3, 0, 8, 0], ! Table number to be searched<; 0266 1 block_type = [3, 8, 8, 0], ! Block type number[; 0267 1 matching_tcb_ucb = [4, 0, 16, 0] ! Matching UCB or TCB depending on table typel; 0268 1 TES; ; 0269 1 ; 0270 1 LITERAL,J; 0271 1 file_spec_size = 255, ! Maximum file specification size E; 0272 1 logical_size = 255, ! Maximum size of one logical H; 0273 1 parse_block_size = 19, ! Parse work area size in words[; 0274 1 logical_descriptor_size = 5, ! Logical name descriptor block size in wordsb<; 0275 1 iteration_max = 10; ! Max iteration count ; 0276 1 ; 0277 1 !0-; 0278 1 ! OWN STORAGE (GLOBAL for DEBUG):l ; 0279 1 !T*; 0280 1 GLOBAL_FOR_DEBUG_OWN_OTHERWISE5; 0281 1 must_have_device, ! Flag for ACHN$eE; 0282 1 cannot_have_node, ! Node is illegal except for RMS <; 0283 1 terminal_logical_flag, ! Flag for terminalF; 0284 1 do_directory_defaulting, ! Directory defaulting flag#; 0285 1 saved_inhibit_mask,iI; 0286 1 init_logical_descriptor : BLOCK [logical_descriptor_size]L; 0287 1 FIELD (logical_descriptor_f), ! Logical name descriptor blockJ; 0288 1 scr_pb : BLOCK[parse_block_size] ! Scratch buffer for fss(; 0289 1 FIELD (parse_block_f), !O; 0290 1 pri_pb : BLOCK [parse_block_size] ! Primary file specification 5; 0291 1 FIELD (parse_block_f), ! parse block2M; 0292 1 merged : REF VECTOR [, BYTE], ! Merged specification buffer O; 0293 1 primary : REF VECTOR [, BYTE], ! Primary specification bufferdd; 0294 1 secondary : VECTOR [file_spec_size, BYTE], ! Work area for secondary input to mergeD; 0295 1 work_1 : VECTOR [file_spec_size, BYTE], ! Work areaC; 0296 1 work_2 : VECTOR [file_spec_size, BYTE]; ! Work areaO ; 0297 1 ; 0298 1 !a"; 0299 1 ! EXTERNAL REFERENCES: ; 0300 1 !l; 0301 1 EXTERNAL2; 0302 1 $SAHDB, ! Saved header mappingM; 0303 1 KISAR5, ! Kernel APR 5 actual data space mapping register,M; 0304 1 KISAR6, ! Kernel APR 6 actual data space mapping registere>; 0305 1 $TONYL, ! Temporary storage for directives:; 0306 1 H_DUIC, ! Default UIC offset in header:; 0307 1 T_UCB, ! TI: UCB address offset in TCB;; 0308 1 T_CTX, ! Task dds context block addressEB; 0309 1 D_UCB, ! Address of the first UCB for this DCB9; 0310 1 D_UCBL, ! Length of UCBs for this DCBA5; 0311 1 D_UNIT, ! Lowest unit on this DCBe5; 0312 1 D_NAM, ! Device name for this DCBa?; 0313 1 U_CTX, ! Terminal dds context block addressr<; 0314 1 U_DCB, ! Address of the DCB for this UCB;; 0315 1 U_CW1, ! UCB first characteristics worda<; 0316 1 DV_REC, ! Record oriented device (U.CW1)=; 0317 1 DV_SDI, ! Single directory device (U.CW1)h7; 0318 1 DV_SQD, ! Sequential device (U.CW1)e h];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 9 H;X1.10 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (4)3; 0319 1 DV_PSE, ! Pseudo device (U.CW1) ;; 0320 1 $FMSK4, ! 4th feature mask word address 9; 0321 1 F4_DVN; ! Decimal version number flagC ; 0322 1 ; 0323 1 LINKAGEWv; 0324 1 $ACHxx_l = JSR (REGISTER = 0, REGISTER = 1; REGISTER = 2) : CLEARSTACK VALUECBIT PRESERVE (0, 3, 4, 5); 0325 1 NOPRESERVE (1, 2),rt; 0326 1 $BLXIO_l = JSR (REGISTER = 0, REGISTER = 1, REGISTER = 2, REGISTER = 3, REGISTER = 4) : PRESERVE (5)(; 0327 1 NOPRESERVE (0, 1, 2, 3, 4),Y; 0328 1 $MPLUN_l = JSR (REGISTER = 3, REGISTER = 4, REGISTER = 5; REGISTER = 2) :rJ; 0329 1 CLEARSTACK VALUECBIT NOPRESERVE00A]hgf (0, 1, 2, 3) PRESERVE (4, 5),Y; 0330 1 $MPLND_l = JSR (REGISTER = 0, REGISTER = 5; REGISTER = 0, REGISTER = 2) : J; 0331 1 CLEARSTACK VALUECBIT NOPRESERVE (0, 2) PRESERVE (1, 3, 4, 5),a; 0332 1 $RELOC_l = JSR (REGISTER = 0; REGISTER = 1, REGISTER = 2) : PRESERVE (0, 3, 4, 5)R; 0333 1 NOPRESERVE (1, 2),)X; 0334 1 $RELOM_l = JSR (REGISTER = 0) : PRESERVE (3, 4, 5) NOPRESERVE (0, 1, 2),S; 0335 1 $TBSRC_l = JSR (REGISTER = 0; REGISTER = 3) : CLEARSTACK VALUECBIT,St; 0336 1 $DCBTA_l = JSR (REGISTER = 0, REGISTER = 3; REGISTER = 3) : PRESERVE (2, 4, 5) NOPRESERVE (0, 1, 3)"; 0337 1 CLEARSTACK VALUECBIT; ; 0338 1 ; 0339 1 EXTERNAL ROUTINEM; 0340 1 $ACHKB : $ACHxx_l, ! Address check byte aligned read/write L; 0341 1 $ACHRO : $ACHxx_l, ! Address check byte aligned read only6; 0342 1 $BLXIO : $BLXIO_l, ! Block transferI; 0343 1 $MPLUN : $MPLUN_l, ! Map logical unit number to device ?; 0344 1 $MPLND : $MPLND_l, ! Follow unit redirectionRD; 0345 1 $RELOC : $RELOC_l, ! Relocate user buffer addressD; 0346 1 $RELOM : $RELOM_l, ! Relocate and map user bufferE; 0347 1 TBSRC_BLI : $TBSRC_l, ! Search logical name tables Q; 0348 1 DCBTA_BLI : $DCBTA_l, ! Binary to octal ASCII routine in DRLOGeH; 0349 1 lun_assign : lun_assign_l; ! Routine to assign the LUN ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 10De;X1.10 File Specification Scan Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (5)r6; 0350 1 %SBTTL 'File Specification Scan Directive' ; 0351 1 W; 0352 1 GLOBAL ROUTINE $LNFSS (dpb_ptr, header_addr, tcb_addr) : $LNxxx_l NOVALUE = ; 0353 1 ; 0354 1 !++! ; 0355 1 !l%; 0356 1 ! FUNCTIONAL DESCRIPTION: ; 0357 1 !lH; 0358 1 ! This routine is called by DRLOG if the FSS subfunction was; 0359 1 ! specified. ; 0360 1 !s ; 0361 1 ! FORMAL PARAMETERS: ; 0362 1 !a; 0363 1 ! dpb_ptr-4; 0364 1 ! Address of the second word of the dpb ; 0365 1 ! ; 0366 1 ! IMPLICIT INPUTS: ; 0367 1 ! ; 0368 1 ! the dpb B; 0369 1 ! The Directive Parameter Block provides all the user*; 0370 1 ! supplied calling parameters ; 0371 1 ! ; 0372 1 ! IMPLICIT OUTPUTS:N ; 0373 1 ! J; 0374 1 ! The directive is performed or an error indicating the reason; 0375 1 ! is returned. ; 0376 1 !; 0377 1 !--M ; 0378 1 ; 0379 2 BEGIN3; 0380 2 ! N; 0381 2 ! The File Specification Scanner DPB has the following format:; 0382 2 ! word contents ; 0383 2 ! ---- --------9/; 0384 2 ! 0 Directive code, DPB length *; 0385 2 ! 1 Subfunction, reserved; 0386 2 ! 2 Reserved39; 0387 2 ! 3 Address of file specification bufferh6; 0388 2 ! 4 Size of file specification buffer+; 0389 2 ! 5 Address of parse block3; 0390 2 ! 6 Size of parse block (in bytes)I; 0391 2 ! L; 0392 2 ! The parse block will zeroed and filled in with descriptorsL; 0393 2 ! for each field present of node, access, device, directory,K; 0394 2 ! filename, type, and version, plus the trailing portion ofnO; 0395 2 ! the string if any. The flags word will be have a bit set forsJ; 0396 2 ! each of the components present in the format for the RMS; 0397 2 ! NAM block.; 0398 2 ! !; 0399 2 ! In more detail.o; 0400 2 ! L; 0401 2 ! NODE: The node includes all nodes if poor man's routing isH; 0402 2 ! is being used. The initial node name is terminatedF; 0403 2 ! by the access control string address, even if there ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 11ee;X1.10 File Specification Scan Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (5)AG; 0404 2 ! is none. (In this case the a00Aeh;hcDATADATADATADATADATADATADATAccess control length is ; 0405 2 ! zero.) ; 0406 2 !u,; 0407 2 ! FS$NOD is set if present.; 0408 2 !iN; 0409 2 ! ACCESS The access control string is the entire quoted stringS; 0410 2 ! CONTROL: terminated by double colon. As noted above, the address-?; 0411 2 ! of the access control serves a dual purpose.e; 0412 2 ! P; 0413 2 ! DEVICE: The device is the string terminated by a single colon.; 0414 2 ! ,; 0415 2 ! FS$DEV is set if present.; 0416 2 !zO; 0417 2 ! DIRECTORY:The directory is the string bounded by either [] or8B; 0418 2 ! <> and includes a rather loosely checked set ofJ; 0419 2 ! characters valid in a directory specification includingL; 0420 2 ! wildcards, hierarchies, etc. The syntax of the directoryE; 0421 2 ! must be checked for validity in the context of the :; 0422 2 ! operation, for example, network access.; 0423 2 !5F; 0424 2 ! FS$DIR is set if present. In addition, if wildcardsK; 0425 2 ! are found, FS$WDI is also set. (Wildcards are "%", "*", ; 0426 2 ! and "...".e; 0427 2 !eQ; 0428 2 ! FILENAME: The filename is the string terminated by ".", ";", or 5; 0429 2 ! the end of the file specification.a; 0430 2 !G; 0431 2 ! FS$NAM is set if present. In addition, if wildcards I; 0432 2 ! are found, FS$WNA is also set. (Wildcards are "%" and5; 0433 2 ! "*".); 0434 2 !.>; 0435 2 ! If FS$QUO is set, the file specification isH; 0436 2 ! a quoted string. This is either a "foreign" filespecE; 0437 2 ! if being passed to another system (eg. via DAP) oriD; 0438 2 ! an ANSI filespec. The the case of the ANSI file,H; 0439 2 ! a version is allowed, but no type field. In the caseH; 0440 2 ! of a network operation, it's ambiguous, but a versionE; 0441 2 ! will be allowed but not defaulted. (Actually this4E; 0442 2 ! doesn't relate to FSS but this seems to be as goodo1; 0443 2 ! a place to mention it as any.)e; 0444 2 !iL; 0445 2 ! TYPE: The type is the string terminated by a "." or ";" orG; 0446 2 ! the end of the file specification. A leading "." is 1; 0447 2 ! always included in the string.f; 0448 2 !G; 0449 2 ! FS$TYP is set if present. In addition, if wildcardsI; 0450 2 ! are found, FS$WTY is also set. (Wildcards are "%" and ; 0451 2 ! "*".); 0452 2 ! F; 0453 2 ! If the filename is a quoted string, then this field ; 0454 2 ! must be null.; 0455 2 !eN; 0456 2 ! VERSION: The version is the field including a leading "." orG; 0457 2 ! ";" terminated by the end of the string. The stringd ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 12 e;X1.10 File Specification Scan Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (5) G; 0458 2 ! is limited to an optional leading "-" and the digitsd3; 0459 2 ! zero to nine, or a "*" wildcard.n; 0460 2 ! H; 0461 2 ! FS$VER is set if present. In addition, if a wildcard0; 0462 2 ! is found, FS$WVE is also set.; 0463 2 !gS; 0464 2 ! TRAILING: The unparsed portion of the initial string is that partiD; 0465 2 ! of the input that was successfully and completelyD; 0466 2 ! parsed. If an error is detected in the directoryG; 0467 2 ! specification, for example, the trailing string will A; 0468 2 ! include the erroneous directory specification. ; 0469 2 ! E; 0470 2 ! This should allow the used of FSS$ in command line K; 0471 2 ! parsing. Any character not part of a file specificationIE; 0472 2 ! terminates the scan and results in all information 2; 0473 2 ! obtained so far to be returned.; 0474 2 ! 00AmhgfE; 0475 2 ! The field trailing_addr should always be filled in C; 0476 2 ! even when the length is zero. This is different B; 0477 2 ! from the norm, but is an exception for much the2; 0478 2 ! same reason as for access_addr.; 0479 2 !aP; 0480 2 ! The parse block can be truncated by the user if not all fieldsS; 0481 2 ! are desired, although the organization isn't well setup for that.3Q; 0482 2 ! The directive can also be enhanced by adding fields on the end.T@; 0483 2 ! Does this code return an error...it shouldn't.; 0484 2 !lQ; 0485 2 ! As coded, the parse block is zeroed and then filled in with theeO; 0486 2 ! data from the specified string. This block is then relocated B; 0487 2 ! to the user string virtual address and returned.; 0488 2 !l ; 0489 2 ; 0490 2 MAPa@; 0491 2 dpb_ptr : REF VECTOR; ! Treat the DPB as a vector ; 0492 2 ; 0493 2 LOCALc; 0494 2 status,'; 0495 2 b_len, ! Buffer lengtho); 0496 2 b_addr, ! Buffer address4+; 0497 2 b_mapping, ! Buffer mappinga3; 0498 2 p : REF VECTOR; ! Temporary pointer ; 0499 2 =; 0500 2 b_addr = .dpb_ptr [2]; ! Get buffer address;; 0501 2 IF .b_addr EQLU 0 THEN ERROR_EXIT (IE_ADP);r;; 0502 2 b_len = .dpb_ptr [3]; ! Get buffer lengthU; 0503 2 IF .b_len EQLU 0 OR .b_len GTRU 1024*8 - 64 THEN ERROR_EXIT (IE_IBS);3 ; 0504 2 ; 0505 2 !uQ; 0506 2 ! Address check, relocate, and map the user buffer. No operationrO; 0507 2 ! will unmap the user buffer for the duration. The user string H; 0508 2 ! is then parsed and the output parse block is returned.; 0509 2 !d]; 0510 2 IF $ACHRO (.b_addr, .b_len) THEN ERROR_EXIT (IE_ADP); ! Check for read accessd ; 0511 2  e];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 13Ie;X1.10 File Specification Scan Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (5) 9; 0512 2 p = $RELOM (.b_addr); ! Map user buffer ?; 0513 2 fss (.p, .b_len); ! Parse file specificationtb; 0514 2 convert_parse (scr_pb, .p, .b_addr); ! Convert parse block addresses to user mode ; 0515 2 =; 0516 2 b_addr = .dpb_ptr [4]; ! Get buffer address ;; 0517 2 IF .b_addr EQLU 0 THEN ERROR_EXIT (IE_ADP);1;; 0518 2 b_len = .dpb_ptr [5]; ! Get buffer lengthi:; 0519 2 IF .b_len EQLU 0 THEN ERROR_EXIT (IE_IBS); ; 0520 2 ; 0521 2 !2L; 0522 2 ! Address check and relocate the user buffer. Then copy the$; 0523 2 ! parse block to it.; 0524 2 !oc; 0525 2 IF $ACHKB (.b_addr, .b_len) THEN ERROR_EXIT (IE_ADP); ! Check for read/write access5 ; 0526 2 J; 0527 2 $RELOC (.b_addr; b_mapping, b_addr); ! Relocte user bufferk; 0528 2 $BLXIO (MINU (parse_block_size*2, .b_len), .kisar5, scr_pb, .b_mapping, .b_addr); ! Move itF; 0529 2 RETURN; 0530 1 END; .NLIST .LIST BIN,LOC .LIST .IFTF ;L$$GCL% .TITLE DRPFN Logical Name Directivese .IDENT /X1.10/5 .IFT ;L$$GCL  .PSECT $OWN$, D MUST.HAVE.DEVICE:  .BLKW 1CANNOT.HAVE.NODE:  .BLKW 1TERMINAL.LOGICAL.FLAG: .BLKW 1DO.DIRECTORY.DEFAULTING: .BLKW 1SAVED.INHIBIT.MASK:d .BLKW 1INIT.LOGICAL.DESCRIPTOR: .BLKW 5SCR.PB: .BLKW 23PRI.PB: .BLKW 23MERGED: .BLKW 1lPRIMARY:.BLKW 1_ SECONDARY: .BLKB 377 .EVENWORK.1: .BLKB 377  .EVENWORK.2: .BLKB 377N& .GLOBL $SAHDB, KISAR5, KISAR6, $TONYL+ .GLOBL H.DUIC, T.UCB, T.CTX, D.UCB, D.UCBLr i];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 14We;X1.10 File Specification Scan Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (5)* .GLOBL D.UNIT, D.NAM, U.CTX, U.DCB, U.CW1& .GLOBL DV.REC, DV.SDI, DV.SQD, DV.PSE& .GLOBL $FMSK4, F4.DVN, $ACHKB, $ACHRO& .GLOBL $BLXIO, $MPLUN, $MPLND, $REL00Auh;hcDATADATADATADATADATADATADATAOC0 .GLOBL $RELOM, TBSRC.BLI, DCBTA.BLI, LUN.ASSIGN0 .SBTTL $LNFSS File Specification Scan Directive .PSECT $CODE$, RO  .NLISTU .ENABL LSBP .LIST$LNFSS::TST -(SP) ; 03526- MOV 4(R3),-(SP) ; *(DPB.PTR),B.ADDR 0500W BNE 1$ ; 0501a TRAP 236i/1$: MOV 6(R3),2(SP) ; *(DPB.PTR),B.LEN 0502D BEQ 2$ ; 0503. CMP 2(SP),#17700 ; B.LEN,*C BLOS 3$ 2$: TRAP 247%3$: MOV (SP),R0 ; B.ADDR,* 05104 MOV 2(SP),R1 ; B.LEN,*. JSR PC,$ACHRO BHIS 4$ TRAP 236%4$: MOV (SP),R0 ; B.ADDR,* 0512U JSR PC,$RELOM MOV R0,R1 ; *,Pc MOV R1,R4 ; P,* 0513 MOV 2(SP),R5 ; B.LEN,*U JSR PC,FSSP MOV #SCR.PB,-(SP) ; 0514  MOV R1,-(SP) ; P,*S MOV 4(SP),-(SP) ; B.ADDR,*W JSR PC,CONVERT.PARSEa. MOV 10(R3),6(SP) ; *(DPB.PTR),B.ADDR 0516 BNE 5$ ; 0517 TRAP 236015$: MOV 12(R3),10(SP) ; *(DPB.PTR),B.LEN 0518R BNE 6$ ; 0519 TRAP 247,%6$: MOV 6(SP),R0 ; B.ADDR,* 0525 MOV 10(SP),R1 ; B.LEN,* JSR PC,$ACHKB BHIS 7$ TRAP 236,%7$: MOV 6(SP),R0 ; B.ADDR,* 0527  JSR PC,$RELOC MOV R1,R3 MOV R2,6(SP)V" MOV 10(SP),R0 ; B.LEN,* 0528 CMP R0,#46B S];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 15ae;X1.10 File Specification Scan Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (5)( BLOS 8$ MOV #46,R0 8$: MOV KISAR5,R1; MOV #SCR.PB,R2  MOV 6(SP),R4 ; B.ADDR,* JSR PC,$BLXIO ADD #12,SP ; 0352* RTS PC,7; Routine Size: 80 words, Routine Base: $CODE$ + 0000 .; Maximum stack depth per invocation: 7 words .NLISTV .DSABL LSB; .NLIST BIN,LOC .LIST S];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 16a];X1.10 Assign Channel Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (6)5-; 0531 1 %SBTTL 'Assign Channel Directive'5 ; 0532 1 W; 0533 1 GLOBAL ROUTINE $LNCHN (dpb_ptr, header_addr, tcb_addr) : $LNxxx_l NOVALUE =, ; 0534 1 ; 0535 1 !++R ; 0536 1 !C%; 0537 1 ! FUNCTIONAL DESCRIPTION: ; 0538 1 !wH; 0539 1 ! This routine is called by DRLOG if the CHN subfunction was; 0540 1 ! specified. ; 0541 1 !8C; 0542 1 ! Assign channel does all of the processing of the filerF; 0543 1 ! specification that is required to find the actual device;; 0544 1 ! name and then assigns the LUN to that device. ; 0545 1 !B ; 0546 1 ! FORMAL PARAMETERS: ; 0547 1 !); 0548 1 ! dpb_ptr4; 0549 1 ! Address of the second word of the dpb ; 0550 1 !N; 0551 1 ! IMPLICIT INPUTS: ; 0552 1 ! ; 0553 1 ! the dpbbB; 0554 1 ! The Directive Parameter Block provides all the user*; 0555 1 ! supplied calling parameters ; 0556 1 !e0; 0557 1 ! Assign Channel (ACHN$) DPB Format: ; 0558 1 !t/; 0559 1 ! WD. 00 -- DIC(207.),DPB Size (5.)t5; 0560 1 ! WD. 01 -- Subfunction code (6),Reserved '; 0561 1 ! WD. 02 -- LUN, Table mask 5; 0562 1 ! WD. 03 -- Address of file specification 2; 0563 1 ! WD. 04 -- Size of file specification ; 0564 1 !I; 0565 1 ! IMPLICIT OUTPUTS: ; 0566 1 ! J; 0567 1 ! The directive is performed or an error indicating the reason; 0568 1 ! is returned. ; 0569 1 ! ; 0570 1 !-- ; 0571 1 ; 0572 2 BEGIN; 0573 2 ! B; 0574 2 ! This directive uses the same code as the RMS and@; 0575 2 ! FCS format parse routines. It only passes the!; 0576 2 ! primary string.d; 0577 2 !f ; 0578 2 ; 0579 2 MAPi@; 0580 2 dpb_ptr : REF VECTOR; ! Treat the DPB as a vector ; 0581 2 ; 0582 2 OWN B; 0583 2 temp_dpb : VECTOR [12]; ! Temp dpb for common parse ; 0584 2  t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 17 ];X1.10 Assign Channel Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (6)o; 0585 2 LOCALo'; 0586 2 temp_dpb_ptr : REF VECTOR; 00A}hgf ; 0587 2 ; 0588 2 ! P; 0589 2 ! Define the routine to convert the users default string and putT; 0590 2 ! it into the secondary string. For ACHN there isn't one so we just!; 0591 2 ! put a blank in. ; 0592 2 !PN; 0593 2 ROUTINE achn_convert (b_addr, b_len; p) : sec_spec_convert_l =; 0594 3 BEGINi3; 0595 3 secondary [0] = %C' '; ! No filespecC); 0596 3 RETURN valid; ! Return ok ; 0597 2 END; .NLISTp .LIST BIN,LOC .LIST .PSECT $OWN$, D  .EVEN TEMP.DPB: .BLKW 14t- .SBTTL ACHN.CONVERT Assign Channel Directivep .PSECT $CODE$, RO  .NLIST .ENABL LSBi .LIST ACHN.CONVERT:' MOVB #40,SECONDARY ; 0595 MOV #1,R0 ; 0594 RTS PC ; 0593 6; Routine Size: 6 words, Routine Base: $CODE$ + 0240.; Maximum stack depth per invocation: 0 words .NLISTy .DSABL LSB  .NLIST BIN,LOC .LIST ; 0598 2 ; 0599 2 ! ); 0600 2 ! Initialize the fake dpbC; 0601 2 !C@; 0602 2 temp_dpb_ptr = temp_dpb [0]; ! Init the pointer ; 0603 2 M; 0604 2 temp_dpb_ptr [0] = .dpb_ptr [0]; ! Modifier for common parseNH; 0605 2 temp_dpb_ptr = temp_dpb_ptr [1]; ! Advance the pointers.; 0606 2 dpb_ptr = dpb_ptr [1]; ! ... ; 0607 2 Q; 0608 2 temp_dpb_ptr [0] = .dpb_ptr [0]; ! LUN and mask for common parse  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 18t];X1.10 Assign Channel Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (6)tH; 0609 2 temp_dpb_ptr = temp_dpb_ptr [1]; ! Advance the pointers.; 0610 2 dpb_ptr = dpb_ptr [1]; ! ... ; 0611 2 V; 0612 2 temp_dpb_ptr [0] = .dpb_ptr [0]; ! File spec address for common parseH; 0613 2 temp_dpb_ptr = temp_dpb_ptr [1]; ! Advance the pointers.; 0614 2 dpb_ptr = dpb_ptr [1]; ! ... ; 0615 2 U; 0616 2 temp_dpb_ptr [0] = .dpb_ptr [0]; ! File spec length for common parseeH; 0617 2 temp_dpb_ptr = temp_dpb_ptr [1]; ! Advance the pointers.; 0618 2 dpb_ptr = dpb_ptr [1]; ! ... ; 0619 2 ; 0620 2 ! ); 0621 2 ! Zero the unused fields. ; 0622 2 !e%; 0623 2 DECR i FROM 8 TO 1 DOs; 0624 3 BEGIN5; 0625 3 temp_dpb_ptr [0] = 0; ! Zero the field1C; 0626 3 temp_dpb_ptr = temp_dpb_ptr [1]; ! Advance the pointer!; 0627 2 END; ; 0628 2 ; 0629 2 !=; 0630 2 ! Do the parse; 0631 2 !eS; 0632 2 do_directory_defaulting = false; ! No directory defaulting for ACHN H; 0633 2 must_have_device = true; ! Must have a device for ACHN$I; 0634 2 cannot_have_node = true; ! Node specification is illegal O; 0635 2 common_parse (temp_dpb, .header_addr, .tcb_addr, achn_convert); ; 0636 2 RETURN;6; 0637 1 END; .NLISTp .LIST BIN,LOC .LIST' .SBTTL $LNCHN Assign Channel Directive  .NLIST .ENABL LSB6 .LIST2$LNCHN::MOV #TEMP.DPB,R0 ; *,TEMP.DPB.PTR 06020 MOV (R3)+,(R0)+ ; DPB.PTR,TEMP.DPB.PTR 06040 MOV (R3)+,(R0)+ ; DPB.PTR,TEMP.DPB.PTR 06080 MOV (R3)+,(R0)+ ; DPB.PTR,TEMP.DPB.PTR 06120 MOV (R3)+,(R0)+ ; DPB.PTR,TEMP.DPB.PTR 0616 MOV #10,R1 ; *,I 0623 '1$: CLR (R0)+ ; TEMP.DPB.PTR 0625r SOB R1,1$ ; I,* 0623( CLR DO.DIRECTORY.DEFAULTING ; 0632$ MOV #1,MUST.HAVE.DEVICE ; 0633$ MOV #1,CANNOT.HAVE.NODE ; 0634 MOV #TEMP.DPB,R3 ; 0635 MOV #ACHN.CONVERT,R0M JSR PC,COMMON.PARSE RTS PC ; 0533+7; Routine Size: 25 words, Routine Base: $CODE$ + 0254; B];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 19;];X1.10 Assign Channel Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (6) -; Maximum stack depth per invocation: 1 wordE .NLISTA .DSABL LSB  .NLIST BIN,LOCT .LIST ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 20E_;X1.00Ah;hcDATADATADATADATADATADATADATA10 RMS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (7) /; 0638 1 %SBTTL 'RMS Format Parse Directive' ; 0639 1 W; 0640 1 GLOBAL ROUTINE $LNRMS (dpb_ptr, header_addr, tcb_addr) : $LNxxx_l NOVALUE =u ; 0641 1 ; 0642 1 !++P ; 0643 1 !2%; 0644 1 ! FUNCTIONAL DESCRIPTION:o ; 0645 1 !EH; 0646 1 ! This routine is called by DRLOG if the RMS subfunction was; 0647 1 ! specified. ; 0648 1 ! ; 0649 1 ! FORMAL PARAMETERS: ; 0650 1 !M; 0651 1 ! dpb_ptre4; 0652 1 ! Address of the second word of the dpb ; 0653 1 ! ; 0654 1 ! IMPLICIT INPUTS: ; 0655 1 ! ; 0656 1 ! the dpb B; 0657 1 ! The Directive Parameter Block provides all the user*; 0658 1 ! supplied calling parameters ; 0659 1 ! ; 0660 1 ! IMPLICIT OUTPUTS:N ; 0661 1 ! J; 0662 1 ! The directive is performed or an error indicating the reason; 0663 1 ! is returned. ; 0664 1 !; 0665 1 !--M ; 0666 1 ; 0667 2 BEGIN6; 0668 2 ! D; 0669 2 ! The RMS format parse DPB has the following format:; 0670 2 ! word contents ; 0671 2 ! ---- -------- /; 0672 2 ! 0 Directive code, DPB lengtho*; 0673 2 ! 1 Subfunction, Modifier$; 0674 2 ! 2 LUN, Table maskE; 0675 2 ! 3 Address of the primary file specification buffertK; 0676 2 ! 4 Size of the primary file specification buffer in bytes.G; 0677 2 ! 5 Address of the resultant file specification bufferM; 0678 2 ! 6 Size of the resultant file specification buffer in bytesgK; 0679 2 ! 7 Address of a word to receive the resultant string size/; 0680 2 ! 8 Address of the parse block5; 0681 2 ! 9 Size of the parse block in bytes E; 0682 2 ! 10 Address of the default file specification bufferiK; 0683 2 ! 11 Size of the default file specification buffer in bytesf; 0684 2 !yS; 0685 2 ! The basic operation of the FCS and RMS format parse6S; 0686 2 ! subfunctions is the same. The only difference consists of S; 0687 2 ! differences in the formats of the input and output parameters.8S; 0688 2 ! Both formats exists in order to minimize the amount of code thatG; 0689 2 ! must be added to the RMS and FCS access methods code. ; 0690 2 !S3; 0691 2 ! The follow operations occur:f ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 21 _;X1.10 RMS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (7) ; 0692 2 !n6; 0693 2 ! 1. First process the input strings:; 0694 2 ! S; 0695 2 ! 1. The primary string is copied, compressed, and upcased A; 0696 2 ! from the users buffer to a work buffer. ; 0697 2 ! @; 0698 2 ! 2. The resulting string is parsed. (FSS); 0699 2 !-;; 0700 2 ! 3. The resulting string is Expanded..; 0701 2 !eS; 0702 2 ! 4. The resulting value for logical type, (none, filename, 2; 0703 2 ! device, node), is saved.; 0704 2 !6S; 0705 2 ! 5. The secondary string is copied, compressed, and upcasedaS; 0706 2 ! from the users buffer to a work buffer. This is somewhat L; 0707 2 ! more involved for the FCS format of the directive.; 0708 2 ! @; 0709 2 ! 6. The resulting string is parsed. (FSS); 0710 2 !Q; 0711 2 ! 7. The processed primary and secondary strings are merged. ; 0712 2 ! V; 0713 2 ! 8. If the resulting value for logical type is greater than theS; 0714 2 ! saved value for the processed primary string then expande,; 0715 2 ! the merged string.; 0716 2 ! S; 0717 2 ! 9. If a node specification is present then we are all done. 3; 0718 2 ! Return t00Ahgfhe output values.d; 0719 2 ! ; 0720 2 ! 3; 0721 2 ! 2. Now do the device defaulting:t; 0722 2 !K; 0723 2 ! 3. The previous merged string is now the primary string.c; 0724 2 !tS; 0725 2 ! 4. Save the flags word from the parse block. The flags returnednS; 0726 2 ! indicate what was supplied from the input strings, not what 9; 0727 2 ! is supplied by the system defaults.a; 0728 2 ! -; 0729 2 ! 5. If the LUN is assigned:d; 0730 2 ! S; 0731 2 ! 1. Build a secondary string containing the device 5; 0732 2 ! specification from the LUN.i; 0733 2 !rS; 0734 2 ! 2. Also indicate that the LUN must not be assigned at therS; 0735 2 ! end of the directive. Reassigning the LUN will result ino1; 0736 2 ! an IO.KIL being issued. ; 0737 2 !eS; 0738 2 ! 3. Merge the primary and the secondary strings. Do notdS; 0739 2 ! expand the merged string. We know that we have a reali&; 0740 2 ! device name.; 0741 2 !o; 0742 2 ! 1; 0743 2 ! 6. If the LUN is not assigned:d; 0744 2 !m;; 0745 2 ! 1. Put SY: in the secondary string.  t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 22s_;X1.10 RMS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (7)n; 0746 2 !7B; 0747 2 ! 2. Merge the primary and secondary strings.; 0748 2 !03; 0749 2 ! 3. Expand the merged string. ; 0750 2 ! ; 0751 2 ! S; 0752 2 ! 7. If a node specification is present then we are all done.i/; 0753 2 ! Return the output values.e; 0754 2 !uK; 0755 2 ! 8. The previous merged string is now the primary string.r; 0756 2 !uS; 0757 2 ! 9. If there is a non null, ([], <>), directory specification in7S; 0758 2 ! the primary string then go on to assign the LUN if7"; 0759 2 ! appropriate.; 0760 2 !0,; 0761 2 ! 10. Directory defaulting:; 0762 2 !pT; 0763 2 ! 1. If there is a non null default directory string then putP; 0764 2 ! the default directory string in the secondary string.; 0765 2 !rT; 0766 2 ! 2. Otherwise build a directory specification in theA; 0767 2 ! secondary string from the default UIC. ; 0768 2 !oT; 0769 2 ! 3. Merge the primary and secondary strings and make the5; 0770 2 ! result the primary string. ; 0771 2 ! ; 0772 2 ! T; 0773 2 ! 11. If there is a LUN assigment and if that LUN assigment wasT; 0774 2 ! used as the default device then do not assign the LUN.T; 0775 2 ! Otherwise use the device portion of the primary string to&; 0776 2 ! assign the LUN.; 0777 2 !7T; 0778 2 ! 12. Return the primary string to the expanded string buffer.T; 0779 2 ! Return the parse block for the primary string with the saved9; 0780 2 ! flags to the users parse block.a; 0781 2 !i ; 0782 2 ! 13. All done.; 0783 2 !u ; 0784 2 ; 0785 2 !eP; 0786 2 ! Define the routine to convert the users default string and putS; 0787 2 ! it into the secondary string. For RMS we just copy, compress and ; 0788 2 ! upcase it.; 0789 2 !tT; 0790 2 ROUTINE rms_convert (b_addr, b_len; p) : sec_spec_convert_l NOVALUE=; 0791 3 BEGINnD; 0792 3 IF .b_len GTRU file_spec_size THEN ERROR_EXIT (IE_IBS);9; 0793 3 ch$copy (.b_len, .b_addr, secondary [0]; p);.; 0794 2 END; .NLIST  .LIST BIN,LOC .LIST. .SBTTL RMS.CONVERT RMS Format Parse Directive s];DRPFN Logical Name Directives 00Ah;hcDATADATADATADATADATADATADATA 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 23p_;X1.10 RMS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (7)o .NLISTd .ENABL LSB: .LIST RMS.CONVERT: JSR R1,$SAVE2 ; 0790n MOV R3,R2 ; *,B.ADDR! CMP R4,#377 ; B.LEN,* 0792( BLOS 1$ TRAP 247 "1$: MOV R4,R1 ; B.LEN,* 0793 MOV #SECONDARY,R3 JSR PC,CH$COPYL RTS PC ; 0790.7; Routine Size: 13 words, Routine Base: $CODE$ + 0336.; Maximum stack depth per invocation: 5 words .NLISTA .DSABL LSB  .NLIST BIN,LOC  .LIST ; 0795 2 ; 0796 2 !-; 0797 2 ! Do the parse; 0798 2 ! Q; 0799 2 do_directory_defaulting = true; ! Do directory defaulting for RMSQ; 0800 2 must_have_device = false; ! Don't need explicit device for $PRMSF; 0801 2 cannot_have_node = false; ! RMS likes nodes just fineN; 0802 2 common_parse (.dpb_ptr, .header_addr, .tcb_addr, rms_convert);; 0803 1 END; .NLIST  .LIST BIN,LOC .LIST) .SBTTL $LNRMS RMS Format Parse Directive. .NLIST .ENABL LSB .LIST1$LNRMS::MOV #1,DO.DIRECTORY.DEFAULTING ; 07998! CLR MUST.HAVE.DEVICE ; 0800c! CLR CANNOT.HAVE.NODE ; 0801o! MOV #RMS.CONVERT,R0 ; 0802  JSR PC,COMMON.PARSE RTS PC ; 0640x7; Routine Size: 12 words, Routine Base: $CODE$ + 0370=-; Maximum stack depth per invocation: 1 word  .NLISTm .DSABL LSBb .NLIST BIN,LOCr .LIST s];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 24s_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (8)/; 0804 1 %SBTTL 'FCS Format Parse Directive'E ; 0805 1 W; 0806 1 GLOBAL ROUTINE $LNFCS (dpb_ptr, header_addr, tcb_addr) : $LNxxx_l NOVALUE = ; 0807 1 ; 0808 1 !++i ; 0809 1 !$%; 0810 1 ! FUNCTIONAL DESCRIPTION:o ; 0811 1 ! H; 0812 1 ! This routine is called by DRLOG if the FCS subfunction was; 0813 1 ! specified. ; 0814 1 ! ; 0815 1 ! FORMAL PARAMETERS: ; 0816 1 !C; 0817 1 ! dpb_ptre4; 0818 1 ! Address of the second word of the dpb ; 0819 1 ! ; 0820 1 ! IMPLICIT INPUTS: ; 0821 1 ! ; 0822 1 ! the dpb B; 0823 1 ! The Directive Parameter Block provides all the user*; 0824 1 ! supplied calling parameters ; 0825 1 ! ; 0826 1 ! IMPLICIT OUTPUTS:N ; 0827 1 ! J; 0828 1 ! The directive is performed or an error indicating the reason; 0829 1 ! is returned. ; 0830 1 !; 0831 1 !--M ; 0832 1 ; 0833 2 BEGIN8; 0834 2 ! D; 0835 2 ! The FCS format parse DPB has the following format:; 0836 2 ! word contents ; 0837 2 ! ---- -------- /; 0838 2 ! 0 Directive code, DPB lengtho*; 0839 2 ! 1 Subfunction, Modifier$; 0840 2 ! 2 LUN, Table maskE; 0841 2 ! 3 Address of the primary file specification buffertK; 0842 2 ! 4 Size of the primary file specification buffer in bytes.G; 0843 2 ! 5 Address of the resultant file specification bufferM; 0844 2 ! 6 Size of the resultant file specification buffer in bytesgK; 0845 2 ! 7 Address of a word to receive the resultant string size/; 0846 2 ! 8 Address of the parse block5; 0847 2 ! 9 Size of the parse block in bytes 6; 0848 2 ! 10 Address of the default name block3; 0849 2 ! 11 Size of the default name block ; 0850 2 !eS; 0851 2 ! The basic operation of the FCS and RMS format parseuS; 0852 2 ! subfunctions is the same. The only difference consists ofcS; 0853 2 ! differences in the formats of the input and output parameters.uS; 0854 2 ! Both formats exists in order to minimize the amount of code that G; 0855 2 ! must be added to the RMS and FCS access methods code.h; 0856 2 !k/; 0857 2 ! See $LNRMS for a discription.l ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 B00Ahgfliss-16 V4.1-582 Page 25m_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (8); 0858 2 !f n];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 26s_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (9)F; 0859 2 !eP; 0860 2 ! Define the routine to convert the users default string and put/; 0861 2 ! it into the secondary string.1; 0862 2 !4U; 0863 2 ROUTINE fcs_convert (b_addr, b_len; p) : sec_spec_convert_l NOVALUE =U; 0864 3 BEGIN2; 0865 3 MACRO ; 0866 3 ; 0867 3 !L; 0868 3 ! Insert a character into a string. Increment the pointer.; 0869 3 !$; M 0870 3 ch$insert (value) =; M 0871 3 BEGINN; M 0872 3 p [0] = value;; M 0873 3 p = p [1];; M 0874 3 ENDt; 0875 3 %; ; 0876 3 ; 0877 3 MAP); 0878 3 p : REF VECTOR [ ,BYTE]; ; 0879 3 ; 0880 3 BIND-; 0881 3 name_block = .b_addr : NAM$;e ; 0882 3 ; 0883 3 !/; 0884 3 ! It should be the full name block ; 0885 3 !@; 0886 3 IF .b_len NEQU nam$size*2 THEN ERROR_EXIT (IE_IBS);3; 0887 3 p = secondary [0]; ! Init the pointer ; 0888 3 ; 0889 3 !D; 0890 3 ! Move the device name and unit number into the string.; 0891 3 !+; 0892 3 IF .name_block [N_DVNM] NEQU 0 ; 0893 3 THEN ; 0894 4 BEGIN ; 0895 4 ; 0896 4 !; 0897 4 ! Do the name; 0898 4 !N; 0899 4 ch$insert (.(name_block [N_DVNM])<0,8>); ! Get the first charO; 0900 4 ch$insert (.(name_block [N_DVNM])<8,8>); ! Get the second charI ; 0901 4 ; 0902 4 !6; 0903 4 ! Do the unit number zero suppressed.; 0904 4 !O; 0905 4 DCBTA_BLI (.name_block [N_UNIT], .p; p); ! Get the unit number ; 0906 4 ; 0907 4 !(; 0908 4 ! Insert the trailing :; 0909 4 !#; 0910 4 ch$insert (%C':'); ; 0911 3 END; ; 0912 3  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 27(_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (9) ; 0913 3 !.; 0914 3 ! Fill in the file name and type.; 0915 3 !); 0916 3 ! Check for ANSII format FNB ; 0917 3 !%; 0918 3 IF .name_block [NB__ANS]; 0919 3 THENI; 0920 4 BEGIN; 0921 4 LOCALG; 0922 4 file_p : REF VECTOR [,BYTE]; ! Pointer to ANSII file specP ; 0923 4 ; 0924 4 !+; 0925 4 ! Process ANSII format FNB ; 0926 4 !); 0927 4 ! Move the file name in.:; 0928 4 !9; 0929 4 ch$insert (%C'"'); ! The opening quoteF ; 0930 4 ; 0931 4 !/; 0932 4 ! Get the first 12 characters.a; 0933 4 !B; 0934 4 file_p = .name_block [N_ANM1]; ! Init the pointer'; 0935 4 DECR i FROM 0 TO 11 DOL$; 0936 4 IF .file_p [.i] NEQU 0; 0937 4 THEN?; 0938 5 ch$insert (.file_p [.i]) ! Move the character ; 0939 4 ELSE; 0940 4 EXITLOOP;!; 0941 4 !-; 0942 4 ! Get the next 6 characters. ; 0943 4 !B; 0944 4 file_p = .name_block [N_ANM2]; ! Init the pointer&; 0945 4 DECR i FROM 0 TO 5 DO$; 0946 4 IF .file_p [.i] NEQU 0; 0947 4 THEN?; 0948 5 ch$insert (.file_p [.i]) ! Move the character ; 0949 4 ELSE; 0950 4 EXITLOOP; :; 0951 4 ch$insert (%C'"'); ! The trailing quote; 0952 4 END; 0953 3 ELSE9; 0954 4 BEGIN; 0955 4 !/; 0956 4 ! Process non ANSII format FNB ; 0957 4 !O; 0958 4 ! Convert the filename from RAD50 and move it into the string.r; 0959 4 !Y; 0960 5 IF (.name_block [N_FNAM] NEQU 0) AND (.(name_block [N_FNAM] + 2) NEQU 0) ; 0961 4 THENp=; 0962 4 RAD50_to_ASC00Ah;hcDATADATADATADATADATADATADATAII (9, .p, name_block [N_FNAM]; p); ; 0963 4 /; 0964 4 IF .name_block [N_FTYP] NEQU 0i; 0965 4 THEN ; 0966 5 BEGIN  S];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 28 _;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (9)iE; 0967 5 ch$insert (%C'.'); ! Insert the . between name and type0; 0968 5 !cL; 0969 5 ! Convert the filename from RAD50 and move it into the string.; 0970 5 !c=; 0971 5 RAD50_to_ASCII (3, .p, name_block [N_FTYP]; p); ; 0972 4 END;; 0973 3 END; ; 0974 3 ; 0975 3 !*; 0976 3 ! Fill in the version number.; 0977 3 !+; 0978 3 IF .name_block [N_FVER] NEQU 0m; 0979 3 THEN ; 0980 4 BEGIN; 0981 4 LOCAL5; 0982 4 t : VECTOR [2], ! Temporary for divider-; 0983 4 temp_digits : VECTOR [6, BYTE],c1; 0984 4 temp_string_p : REF VECTOR [,BYTE],n; 0985 4 base,r; 0986 4 char;c ; 0987 4 <; 0988 4 ch$insert (%C';'); ! Insert the ; to start; 0989 4 !J; 0990 4 ! Convert the number. Put it backwards into temp_string.; 0991 4 !; 0992 4 t [1] = 0;_.; 0993 4 t [0] = .name_block [N_FVER];1; 0994 4 temp_string_p = temp_digits [0];2H; 0995 4 base = (IF (.$FMSK4 AND F4_DVN) NEQU 0 THEN 10 ELSE 8); ; 0996 4 8; 0997 4 IF (.t [0] GTRU 32767) THEN !PKW112!; 0998 5 BEGIN !PKW112 >; 0999 5 ch$insert (%C'-'); !Put in a - sign !PKW112/; 1000 5 t [0] = 0 -.t [0] !PKW1120 ; 1001 4 END; !PKW112; 1002 4 &; 1003 4 DECR i FROM 6 TO 1 DO; 1004 5 BEGIN=; 1005 5 BUILTINt; 1006 5 EDIV;R ; 1007 5 1; 1008 5 EDIV (base, t, t [0], char); !-2 0; 1009 5 temp_string_p [0] = .char + %C'0';0; 1010 5 temp_string_p = temp_string_p [1];; 1011 4 END; !-1 ; 1012 4 T; 1013 4 temp_string_p = temp_string_p [0] - 1; !Back up to last char PKW112!; 1014 4 ! !PKW112.M; 1015 4 ! Remove any leading zeros. (They're trailing zeros !PKW112 /; 1016 4 ! in temp_string) !PKW112=!; 1017 4 ! !PKW112 ; 1018 4 !PKW112A; 1019 4 WHILE .temp_string_p [0] EQLU %C'0' DO !PKW112e>; 1020 4 temp_string_p = temp_string_p [0] - 1; !PKW112 p];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 29m_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (9) ; 1021 4 ; 1022 4 !I; 1023 4 ! Move the string from temp_string where it is backwardsW@; 1024 4 ! to the secondary string in the correct order.; 1025 4 !D; 1026 4 DECR i FROM temp_string_p [0] TO temp_digits [0] DO; 1027 5 BEGINr$; 1028 5 ch$insert(.(.i)<0,8>);; 1029 4 END;; 1030 3 END;8; 1031 2 END; .NLIST  .LIST BIN,LOC .LIST. .SBTTL FCS.CONVERT FCS Format Parse Directive .NLISTD .ENABL LSBI .LIST FCS.CONVERT: MOV R1,-(SP) ; 0863 MOV R2,-(SP)! MOV R4,-(SP)g MOV R5,-(SP)n SUB #14,SP  MOV R3,R5 ; *,B.ADDR CMP R4,#36 ; B.LEN,* 0886 BEQ 1$ TRAP 247 &1$: MOV #SECONDARY,R4 ; *,P 0887 MOV #32,R0 ; 0892e ADD R5,R0 ; B.ADDR,* TST (R0)r BEQ 2$8! MOVB (R0),(R4)+ ; *,P 08990" MOVB 1(R0),(R4)+ ; *,P 0900& MOV 34(R5),R0 ; *(B.ADDR),* 0905 MOV R4,R3 ; P,*. JSR PC,DCBTA.BLIC MOV R3,R4 MOVB #72,(R4)+ ; *,P 0910,2$: BIT #2000,20(R5) ; *,*(B.ADDR) 0918 BEQ 3$M MOVB #42,(R4)+ ; *,P 0929* MOV 24(R5),R0 ; *(B.ADDR),FILE.P 0944 MOVB #42,(R4)+ ; *,P 0951 BR 5$ ; 09183$: MOV #6,R3 ; 0960  ADD R5,R3 ; B.ADDR,* TST (R3)  BEQ 4$A TST 10(R5) ; *(B.ADDR) BEQ 4$B MOV #11,R1 ; 0962; P];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-1100Ahgf Bliss-16 V4.1-582 Page 30,_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (9)R MOV R4,R2 ; P,*9 JSR PC,RAD50.TO.ASCII MOV R2,R44$: MOV #14,R3 ; 0964 ADD R5,R3 ; B.ADDR,* TST (R3)R BEQ 5$, MOVB #56,(R4)+ ; *,P 0967 MOV #3,R1 ; 0971 MOV R4,R2 ; P,*. JSR PC,RAD50.TO.ASCII MOV R2,R4)5$: MOV 16(R5),R0 ; *(B.ADDR),* 0978  BEQ 13$ MOVB #73,(R4)+ ; *,P 0988 CLR 12(SP) ; T+2 0992  MOV R0,10(SP) ; *,T 0993 & MOV #2,R2 ; *,TEMP.STRING.P 0994) ADD SP,R2 ; TEMP.DIGITS,TEMP.STRING.PD BIT $FMSK4,#F4.DVN ; 0995 BEQ 6$ MOV #12,(SP) ; *,BASE BR 7$6$: MOV #10,(SP) ; *,BASE4&7$: CMP 10(SP),#77777 ; T,* 0997 BLOS 8$ MOVB #55,(R4)+ ; *,P 0999 NEG 10(SP) ; T 1000V8$: MOV #6,R3 ; *,I 1003O"9$: MOV 10(SP),R1 ; T,* 1008 MOV 12(SP),R0 ; T,* DIV (SP),R0 ; BASE,* MOV R0,10(SP) ; *,T MOV R1,R5 ; *,CHAR MOV R5,R0 ; CHAR,* 1009 ADD #60,R0#" MOVB R0,(R2)+ ; *,TEMP.STRING.P SOB R3,9$ ; I,* 1003.10$: CMPB -(R2),#60 ; TEMP.STRING.P,* 1019 BEQ 10$ ; 1020 MOV #2,R0 ; 1026 ADD SP,R0 ; TEMP.DIGITS,*0 BR 12$7%11$: MOVB (R2),(R4)+ ; I,P 1028, DEC R2 ; I 1026N12$: CMP R2,R0 ; I,*V BGE 11$ 13$: MOV R4,R3 ; P,* 0863 ADD #14,SP MOV (SP)+,R5M MOV (SP)+,R4; MOV (SP)+,R2, MOV (SP)+,R1 RTS PC0 )];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 31 _;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (9)8; Routine Size: 130 words, Routine Base: $CODE$ + 0420/; Maximum stack depth per invocation: 14 words+ .NLIST .DSABL LSBC .NLIST BIN,LOC2 .LIST ,];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 32P_;X1.10 FCS Format Parse Directive 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (10)9; 1032 2 !i; 1033 2 ! Do the parse; 1034 2 !rO; 1035 2 ! FCS handles directory defaulting. This directive should not. ; 1036 2 !w0; 1037 2 do_directory_defaulting = false;Q; 1038 2 must_have_device = false; ! Don't need explicit device for $PFCSTE; 1039 2 cannot_have_node = true; ! FCS don't like them nodes1N; 1040 2 common_parse (.dpb_ptr, .header_addr, .tcb_addr, fcs_convert);; 1041 1 END; .NLISTD .LIST BIN,LOC .LIST) .SBTTL $LNFCS FCS Format Parse Directiver .NLIST0 .ENABL LSB .LIST/$LNFCS::CLR DO.DIRECTORY.DEFAULTING ; 1037 ! CLR MUST.HAVE.DEVICE ; 1038 $ MOV #1,CANNOT.HAVE.NODE ; 1039! MOV #FCS.CONVERT,R0 ; 1040  JSR PC,COMMON.PARSE RTS PC ; 0806c7; Routine Size: 12 words, Routine Base: $CODE$ + 1024u-; Maximum stack depth per invocation: 1 word  .NLISTp .DSABL LSBr .NLIST BIN,LOCt .LIST n];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 33sW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (11)1&; 1042 1 %SBTTL 'Common Parse Code' ; 1043 1 U; 1044 1 ROUTINE common_parse (dpb_ptr, header_addr, tcb_addr, sec_spec_convert) :P(; 1045 1 common_parse_l NOVALUE = ; 1046 1 ; 1047 1 !++2 ; 1048 1 !t%; 1049 1 ! FUNCTIONAL DESCRIPTION:L ; 1050 1 !SL; 1051 1 ! This routine is called by $LNRMS, $LNFCS, and $LNCHN to do theO; 1052 1 ! parse operation. See those routines for information on the parse ; 1053 1 ! operation. ; 1054 1 !N; 1055 1 !--1; 1056 2 BEGINS; 1057 2 MAPd@; 1058 2 dpb_ptr : REF VECTOR; ! Treat the DPB as a vector ; 1059 2 ; 1060 2 BIND\; 1061 2 dpb_ptr_b = dpb_ptr : REF VECTOR [, BYTE]; ! Treat the DPB as a vector of bytes ; 1062 2 ; 1063 2 LOCALL; 1064 2 status,'; 1065 2 b_len, ! Buffer lengthS); 1066 2 b_addr, ! Buffer addr00Ah;hcDATADATADATADATADATADATADATAess +; 1067 2 b_mapping, ! Buffer mappingf=; 1068 2 pri_logical_type, ! Saved primary logical typeN;; 1069 2 flags_for_user, ! Flags word to be returned,; 1070 2 do_assign_lun, ! Assign flag5; 1071 2 res_length, ! Resultant string lengthE; 1072 2 assign_lun_error, ! Deferred error from LUN assignment 2; 1073 2 ucb, ! Address of the UCB for LUND; 1074 2 merge_directory_flag, ! Merge hierarchial directories3; 1075 2 p : REF VECTOR; ! Temporary pointer7 ; 1076 2 ; 1077 2 LABEL ; 1078 2 process_file_specs,; 1079 2 assign_lun,; 1080 2 merge_directories; ; 1081 2 ; 1082 2 process_file_specs :; 1083 3 BEGIN ; 1084 3 !rP; 1085 3 ! Initialize the logical descriptor block for later logical nameW; 1086 3 ! translations. The length and offset address will be filled in later.0; 1087 3 !o9; 1088 3 init_logical_descriptor [block_type] = 0;:R; 1089 3 init_logical_descriptor [table_number] = .dpb_ptr_b [1]; ! aka modq; 1090 3 init_logical_descriptor [address_base] = .KISAR5; ! Logical names will be in the directive commonca; 1091 3 init_logical_descriptor [matching_tcb_ucb] = .tcb_addr; ! For user table searchescN; 1092 3 saved_inhibit_mask = .dpb_ptr_b [3]; ! Settup the inhibit mask ; 1093 3 G; 1094 3 do_assign_lun = true; ! Init to enable LUN assignment ;; 1095 3 assign_lun_error = 0; ! LUN assignment ok  t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 34sW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (11)0:; 1096 3 merged = work_1 [0]; ! Initialize merged>; 1097 3 primary = work_2 [0]; ! Initialize secondaryE; 1098 3 save_parse (scr_pb); ! Init the scratch parse block E; 1099 3 save_parse (pri_pb); ! Init the primary parse block5 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 35-W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (12)-; 1100 3 !U2; 1101 3 ! Settup the users primary string.; 1102 3 ! E; 1103 3 b_addr = .dpb_ptr [2]; ! Get primary string addressi;; 1104 3 b_len = .dpb_ptr [3]; ! Get string lengthh ; 1105 3 ; 1106 3 IF .b_len NEQU 0; 1107 3 THEN; 1108 4 BEGIN ; 1109 4 ; 1110 4 LOCAL>; 1111 4 trailing_length; ! Returned length from fss ; 1112 4 8; 1113 4 IF .b_addr EQLU 0 THEN ERROR_EXIT (IE_ADP); ; 1114 4 D; 1115 4 IF .b_len GTRU file_spec_size THEN ERROR_EXIT (IE_IBS); ; 1116 4 ; 1117 4 !J; 1118 4 ! Address check, relocate, map, copy, compress, upcase, parse-; 1119 4 ! and expand the primary string. ; 1120 4 !Z; 1121 4 IF $ACHRO (.b_addr, .b_len) THEN ERROR_EXIT (IE_ADP); ! Check for read access ; 1122 4 :; 1123 4 b_addr = $RELOM (.b_addr); ! Map user buffer ; 1124 4 D; 1125 4 primary [0] = %C' '; ! Init it in case string is null<; 1126 4 ch$copy (.b_len, .b_addr, primary [0]; b_addr);H; 1127 4 fss (primary [0], .b_addr - primary [0];, trailing_length);'; 1128 4 IF .trailing_length NEQU 0m; 1129 4 THENe; 1130 5 BEGINM; 1131 5 save_parse (pri_pb); ! Move scr_pb to primaryeL; 1132 5 pri_pb [fss_status] = bad_char; ! Settup the error codeD; 1133 5 LEAVE process_file_specs; ! And return it; 1134 4 END;' ; 1135 4 ; 1136 4 END; 1137 3 ELSE; 1138 4 BEGIN1; 1139 4 primary [0] = %C' '; ! No filespecr?; 1140 4 fss (primary [0], 1); ! Parse file specification ; 1141 3 END;Q ; 1142 3 ?; 1143 3 save_parse (pri_pb); ! Move scr_pb to primaryp ; 1144 3 \; 1145 3 pri_logical_type = .pri_pb [logical_type]; ! Save the logical type for merge ; 1146 3 o; 1147 3 IF expand_filesp00Ahgfec (.dpb_ptr) NEQU success THEN LEAVE process_file_specs; ! Expand any logicals ; 1148 3 A; 1149 3 IF .pri_pb [logical_type] GTRU .pri_logical_type [a; 1150 3 THEN pri_logical_type = .pri_pb [logical_type]; ! Save the logical type for merge ; 1151 3  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 36 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (13); 1152 3 !74; 1153 3 ! Settup the users secondary string.; 1154 3 !eU; 1155 3 ! First validate the users buffer. Then call the appropriate routine ,; 1156 3 ! to perform the conversion.; 1157 3 ! G; 1158 3 b_addr = .dpb_ptr [9]; ! Get secondary string address<; 1159 3 b_len = .dpb_ptr [10]; ! Get string length ; 1160 3 ; 1161 3 IF .b_len NEQU 0; 1162 3 THEN; 1163 4 BEGIN ; 1164 4 ; 1165 4 LOCAL>; 1166 4 trailing_length; ! Returned length from fss ; 1167 4 8; 1168 4 IF .b_addr EQLU 0 THEN ERROR_EXIT (IE_ADP); ; 1169 4 ; 1170 4 !N; 1171 4 ! Address check, relocate, map, copy, compress, upcase, and parse$; 1172 4 ! the secondary string.; 1173 4 ! ; 1174 4 Z; 1175 4 IF $ACHRO (.b_addr, .b_len) THEN ERROR_EXIT (IE_ADP); ! Check for read access ; 1176 4 ;; 1177 4 b_addr = $RELOM (.b_addr); ! Map user buffer ; 1178 4 M; 1179 4 sec_spec_convert_l (.sec_spec_convert, .b_addr, .b_len; b_addr);sL; 1180 4 fss (secondary [0], .b_addr - secondary [0];, trailing_length);'; 1181 4 IF .trailing_length NEQU 0A; 1182 4 THENa; 1183 5 BEGIN ; 1184 5 ; 1185 5 !4; 1186 5 ! Settup the bad string for return.; 1187 5 !U; 1188 5 primary = secondary [0]; ! The primary string is returned M; 1189 5 save_parse (pri_pb); ! Move scr_pb to primary1L; 1190 5 pri_pb [fss_status] = bad_char; ! Settup the error codeD; 1191 5 LEAVE process_file_specs; ! And return it; 1192 4 END;a ; 1193 4 ; 1194 4 END; 1195 3 ELSE; 1196 4 BEGIN3; 1197 4 secondary [0] = %C' '; ! No filespechA; 1198 4 fss (secondary [0], 1); ! Parse file specificationa; 1199 3 END;  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 37!W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (14)h; 1200 3 !1R; 1201 3 ! If the primary string either before or after expansion containedQ; 1202 3 ! a node or device then don't merge in a node or device from the 7#; 1203 3 ! secondary string.l; 1204 3 ! ?; 1205 3 IF .pri_logical_type GTRU logical_type_filename ; 1206 3 THEN; 1207 4 BEGIN#; 1208 4 scr_pb [node_len] = 0;i$; 1209 4 scr_pb [node_addr] = 0;%; 1210 4 scr_pb [device_len] = 0;0&; 1211 4 scr_pb [device_addr] = 0;; 1212 3 END; ; 1213 3 ; 1214 3 !aS; 1215 3 ! Merge the users primary and secondary strings. Expand the resultiN; 1216 3 ! if a new logical could be present from the secondary string.; 1217 3 ! G; 1218 3 IF merge () NEQU success THEN LEAVE process_file_specs; ; 1219 3 @; 1220 3 IF .pri_pb [logical_type] GTRU .pri_logical_type; 1221 3 THEN ; 1222 3 V; 1223 3 IF expand_filespec (.dpb_ptr) NEQU success THEN LEAVE process_file_specs; ; 1224 3 N; 1225 3 flags_for_user = .pri_pb [flags]; ! Save flags to be returned ; 1226 3 ; 1227 3 !rQ; 1228 3 ! If there is a node spec we are all done here. Return the parsen/; 1229 3 ! block and string to the user.(; 1230 3 ! L; 1231 3 IF .pri_pb [node_addr] NEQU 0 THEN LEAVE process_file_specs; e];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 38.W;X1.10 Common Parse Code 8-Au00Ah;hcDATADATADATADATADATADATADATAg-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (15)_; 1232 3 !lL; 1233 3 ! If the user did not provide a device apply the appropriate; 1234 3 ! defaults.s; 1235 3 ! /; 1236 3 IF .pri_pb [device_addr] EQLU 0 ; 1237 3 THEN; 1238 4 BEGIN; 1239 4 !.D; 1240 4 ! The assign channel directive will not allow deviceE; 1241 4 ! defaulting. The device must be explicitly present.2; 1242 4 !.>; 1243 4 IF .must_have_device THEN ERROR_EXIT (IE_IDU);\; 1244 4 IF (.dpb_ptr [11] AND (FS$NDF OR FS$DEV)) EQLU 0 !Do we want to do defaults?; 1245 4 THEN; 1246 5 BEGIN ; 1247 5 A; 1248 5 KISAR6 = .$SAHDB; ! Make sure task header is mapped H; 1249 5 IF NOT $MPLUN (dpb_ptr_b [2], .header_addr, .tcb_addr; ucb); 1250 5 THENs; 1251 6 BEGIN; 1252 6 !;; 1253 6 ! The device name will be merged in later.y; 1254 6 !A; 1255 6 do_assign_lun = false; ! Don't reassign the LUNE; 1256 6 END; 1257 5 ELSE ; 1258 6 BEGIN; 1259 6 !O; 1260 6 ! The LUN is not assigned, use the string SY: for the default. N; 1261 6 ! Put the default string in the secondary string and parse itN; 1262 6 ! in order to settup the scratch parse block. Next merge theK; 1263 6 ! default string with the primary string. Next expand anye?; 1264 6 ! logical names that may have been introduced.n; 1265 6 !; 1266 6 MACRO ; 1267 6 ; 1268 6 ! I; 1269 6 ! Insert a character into a string. Increment the pointer.L; 1270 6 !d!; M 1271 6 ch$insert (value) =t; M 1272 6 BEGINt&; M 1273 6 dev_ptr [0] = value;(; M 1274 6 dev_ptr = dev_ptr [1];; M 1275 6 ENDc; 1276 6 %; ; 1277 6 ; 1278 6 REGISTERnJ; 1279 6 dev_ptr : REF VECTOR [, BYTE]; ! Pointer into the dev string ; 1280 6 =; 1281 6 dev_ptr = secondary [0]; ! Init the pointerO#; 1282 6 ch$insert (%C'S'); #; 1283 6 ch$insert (%C'Y'); #; 1284 6 ch$insert (%C':'); (; 1285 6 fss (secondary [0], 3); ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 39 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (15) H; 1286 6 IF merge () NEQU success THEN LEAVE process_file_specs;Z; 1287 6 IF expand_filespec (.dpb_ptr) NEQU success THEN LEAVE process_file_specs;; 1288 6 !R; 1289 6 ! If there is a node spec we are all done here. Return the parse0; 1290 6 ! block and string to the user.; 1291 6 !M; 1292 6 IF .pri_pb [node_addr] NEQU 0 THEN LEAVE process_file_specs; ; 1293 5 END;C; 1294 4 END;1; 1295 3 END;S P];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 40cW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (16)p; 1296 3 ! Q; 1297 3 ! Assign the LUN if appropriate. The LUN will not be assigned ifrQ; 1298 3 ! the current LUN assignment is being used as the device default. ; 1299 3 !n; 1300 3 assign_lun :; 1301 4 BEGIN ; 1302 4 U; 1303 5 IF .do_assign_lun AND ((.dpb_ptr [11] AND (FS$NDF OR FS$DEV)) EQLU 0)-; 1304 4 THEN; 1305 5 BEGIN; 1306 5 MACRO ; 1307 5 ; 1308 5 !P; 1309 5 ! NEXT_CHAR sets the next character and returns true if success; 1310 5 !; M 1311 5 next_char =; M 1312 5 BEGINi(; M 1313 5 char = .(.unit_ptr)<0, 8>;'; M 1314 5 unit_ptr = .unit_ptr + 1;t; M 1315 5 .char NEQU %C':'; 1316 5 END %; ; 1317 5 ; 1318 5 ROUTINEf; 1319 5 ie_idu_return : return_ie_xxx_l = ERROR_EXIT (IE_IDU), ! Routine for assign_lun_error .NLIST  .LIST BIN,LOC .LIST' .SBTTL IE.IDU.RETURN Common Parse Code  .NLIST3 .ENABL LS00AhgfBN .LISTIE.IDU.RETURN: MOV R0,-(SP) ; 1319 TRAP 244 MOV (SP)+,R0! RTS PC16; Routine Size: 4 words, Routine Base: $CODE$ + 1054.; Maximum stack depth per invocation: 3 words .NLISTt .DSABL LSB  .NLIST BIN,LOC  .LISTf; 1320 5 ie_ilu_return : return_ie_xxx_l = ERROR_EXIT (IE_ILU); ! Routine for assign_lun_error .NLISTR .LIST BIN,LOC .LIST' .SBTTL IE.ILU.RETURN Common Parse CodeN .NLISTI .ENABL LSB  I];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 41 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (16)  .LISTIE.ILU.RETURN: MOV R0,-(SP) ; 1320 TRAP 240. MOV (SP)+,R0  RTS PCL6; Routine Size: 4 words, Routine Base: $CODE$ + 1064.; Maximum stack depth per invocation: 3 words .NLISTi .DSABL LSB .NLIST BIN,LOCB .LIST ; 1321 5 ; 1322 5 LOCALI; 1323 5 unit_number, ! Unit number for device to be assigned to B; 1324 5 unit_ptr, ! Pointer into the unit number string;; 1325 5 char; ! Current character in unit numberN ; 1326 5 ; 1327 5 !8; 1328 5 ! Check the length. It must be at least 3.; 1329 5 !/; 1330 5 IF .pri_pb [device_len] LSSU 3e; 1331 5 THENi; 1332 6 BEGINnL; 1333 6 assign_lun_error = ie_idu_return; ! The error will be reported.; 1334 6 LEAVE assign_lun; ! at the end; 1335 5 END;; 1336 5 !(; 1337 5 ! Calculate the unit number; 1338 5 !5; 1339 5 unit_number = 0; ! Init the unit number E; 1340 5 unit_ptr = .pri_pb [device_addr] + 2; ! Init the pointer ; 1341 5 ; 1342 5 !$; 1343 5 ! Loop thru the digits.; 1344 5 !; 1345 5 WHILE next_char DOe; 1346 6 BEGIN ; 1347 6 ; 1348 6 !C; 1349 6 ! Check the character. It must be an octal digit. ; 1350 6 !<; 1351 7 IF (.char LSSU %C'0') OR (.char GTRU %C'7'); 1352 6 THENe; 1353 7 BEGIN L; 1354 7 assign_lun_error = ie_idu_return; ! The error will be reported.; 1355 7 LEAVE assign_lun; ! at the end; 1356 6 END; ; 1357 6 Q; 1358 6 unit_number = .unit_number * 8 + (.char - %C'0'); ! Add this onen; 1359 5 END;  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 42 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (16)R ; 1360 5 ; 1361 5 !R; 1362 5 ! Give the LUN assignment routine the LUN number, the header address,C; 1363 5 ! the TCB address, the two letters of the device name, >; 1364 5 ! the unit number, and the terminal logical flag.; 1365 5 !S; 1366 5 ! The routine will assign the LUN if possible and return the directiverR; 1367 5 ! error code if any. Any error will be signaled later, after as muchE; 1368 5 ! information as possible has been returned to the user.(; 1369 5 !K; 1370 5 ! If the terminal logical flag was set by the last expand thennM; 1371 5 ! lun_assign will just look for the device in the system tables.tO; 1372 5 ! If the logical was not terminal then the device translation thatJ; 1373 5 ! is normally done for the assign LUN directive will be done.; 1374 5 !A; 1375 5 KISAR6 = .$SAHDB; ! Make sure task header is mappeda; 1376 5 assign_lun_error =8D; 1377 6 (IF .dpb_ptr_b [2] NEQU 0 ! Defer error for LUN of zero; 1378 6 THEN ,; 1379 6 lun_assign ( dpb_ptr_b [2],; 1380 6 .header_addr, ; 1381 6 .tcb_addr,'; 1382 6 ..pri_pb [device_addr],; 1383 6 .unit_number,a'; 1384 6 .terminal_logical_flag;n; 1385 6 ucb); 1386 6 ELSEo ; 1387 5 ie_ilu_return);; 1388 4 END; "; 1389 3 END; ! assign_lun a];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 432W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRP00Ah;hcDATADATADATADATADATADATADATAFN.BLI;502 (17) ; 1390 3 !3U; 1391 3 ! At this point the LUN is assigned. Either we are using the currentaQ; 1392 3 ! assignment as the device default or the LUN was assigned above. ; 1393 3 !A; 1394 3 ! The only exception is if the assign LUN failed.E; 1395 3 ! O; 1396 3 ! Here we will generate a device name and unit number and merge Q; 1397 3 ! it into the primary string. First we will call $MPLND to track:W; 1398 3 ! down an redirections. No point in doing any of this for ACHN becauset,; 1399 3 ! we do not return a string.; 1400 3 !C; 1401 3 IF .must_have_device THEN LEAVE process_file_specs;iZ; 1402 5 IF (.assign_lun_error EQLU 0) AND ((.dpb_ptr [11] AND (FS$NDF OR FS$DEV)) ; 1403 3 EQLU 0) THEN; 1404 4 BEGIN; 1405 4 LOCAL4; 1406 4 dcb, ! Address of the DCB for LUNC; 1407 4 unit_number, ! Unit number for device on this LUN:K; 1408 4 redirected_ucb; ! We need the real UCB and the redirectedA*; 1409 4 ! UCB for spooled devices ; 1410 4 ; 1411 4 REGISTER M; 1412 4 dev_ptr : REF VECTOR [, BYTE]; ! Pointer into the dev string ; 1413 4 ; 1414 4 MACRO ; 1415 4 ; 1416 4 !L; 1417 4 ! Insert a character into a string. Increment the pointer.; 1418 4 !$; M 1419 4 ch$insert (value) =; M 1420 4 BEGIN_"; M 1421 4 dev_ptr [0] = value;$; M 1422 4 dev_ptr = dev_ptr [1];; M 1423 4 ENDh; 1424 4 %; ; 1425 4 9; 1426 4 dev_ptr = secondary [0]; ! Init the pointer ; 1427 4 ; 1428 4 !I; 1429 4 ! Now get the correct UCB address. Follow any redirections, 5; 1430 4 ! and get both UCBs for spooled devices. ; 1431 4 !;; 1432 4 $MPLND (.ucb, .tcb_addr; redirected_ucb, ucb);o ; 1433 4 ; 1434 4 !J; 1435 4 ! While we have the ucb address a check will be made. If theI; 1436 4 ! device is unit record, sequential or single directory thenH; 1437 4 ! directory defaulting will not be done because a directory; 1438 4 ! is not required. ; 1439 4 !T; 1440 4 IF (.(.redirected_ucb + U_CW1) AND (DV_REC OR DV_SDI OR DV_SQD)) NEQU 0; 1441 4 THENs1; 1442 4 do_directory_defaulting = false; ; 1443 4  c];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 44uW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (17)l:; 1444 4 dcb = .(.ucb + U_DCB); ! Get the DCB address ; 1445 4 ; 1446 4 !0; 1447 4 ! Calculate the logical unit number; 1448 4 !i; 1449 5 unit_number = ((.ucb - .(.dcb + D_UCB)) / .(.dcb + D_UCBL)) ! Relative UCB addr / UCB length2I; 1450 4 + .(.dcb + D_UNIT) <0,8>; ! Plus lowest unit on this DCBa ; 1451 4 @; 1452 4 ch$insert (%C'_'); ! Terminal logical from the LUNC; 1453 4 ch$insert (.(.dcb + D_NAM)); ! Fill in the device nameN-; 1454 4 ch$insert (.(.dcb + D_NAM + 1));c ; 1455 4 ; 1456 4 !D; 1457 4 ! Generate the ASCII device number from the unit number; 1458 4 ! zero suppressed. ; 1459 4 !9; 1460 4 DCBTA_BLI (.unit_number, .dev_ptr; dev_ptr);l ; 1461 4 ; 1462 4 !$; 1463 4 ! Insert the trailing :; 1464 4 !; 1465 4 ch$insert (%C':'); ; 1466 4 ; 1467 4 !:; 1468 4 ! Parse the device spec and merge it into the; 1469 4 ! primary string.; 1470 4 !;; 1471 4 fss (secondary [0], .dev_ptr - secondary [0]); ; 1472 4 ; 1473 4 !I; 1474 4 ! Kill the primary device info so that the new device string !; 1475 4 ! will be merged in.4; 1476 4 !%; 1477 4 pri_pb [device_len] = 0; &; 1478 4 pri_pb [device_addr] = 0;D; 1479 4 IF merge () NEQU success THEN LEAVE process_file_specs;; 1480 3 END; ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 45sW;X1.10 Common Parse Code 8-Aug-1986 100Ahgf4:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (18) ; 1481 3 ! M; 1482 3 ! If the user did not provide a directory or if the directoryN; 1483 3 ! was null apply the appropriate defaults unless the directoryN; 1484 3 ! defaulting flag is set off for the FCS format parse. If theK; 1485 3 ! user provided a directory with a leading . or - then thisi?; 1486 3 ! directory will be merged in with the default.5; 1487 3 !XL; 1488 4 merge_directory_flag = ((.pri_pb [directory_len] GEQU 3) ANDD; 1489 5 ((.(.pri_pb [directory_addr] + 1)<0,8> EQLU %C'.') ORC; 1490 3 (.(.pri_pb [directory_addr] + 1)<0,8> EQLU %C'-')));a ; 1491 3 0; 1492 3 IF .do_directory_defaulting AND A; 1493 3 ((.dpb_ptr [11] AND (FS$NDF OR FS$DIR)) EQLU 0) AND:; 1494 4 ((.pri_pb [directory_addr] EQLU 0) OR4; 1495 4 (.pri_pb [directory_len] EQLU 2) OR'; 1496 4 .merge_directory_flag) ; 1497 3 THEN; 1498 4 BEGIN ; 1499 4 ; 1500 4 !H; 1501 4 ! Try to get the default directory string. Put it intoH; 1502 4 ! the secondary string. It will be returned terminated.; 1503 4 ! by a blank. Then parse it.; 1504 4 !; 1505 4 FIELD ; 1506 4 dds_context_f =; 1507 4 SET4>; 1508 4 reference_count= [0, 0, 8, 0], ! Reference countG; 1509 4 dds_length = [0, 8, 8, 0], ! Length of the default stringrH; 1510 4 dds_uic = [1, 0, 16, 0], ! UIC for clock block propagationF; 1511 4 default_string = [2, 0, 16, 0] ! Start of default string; 1512 4 TES; ; 1513 4 ; 1514 4 LITERALG; 1515 4 dds_context_size = 2; ! Size of the fixed part of thee.; 1516 4 ! DDS context block in words ; 1517 4 ; 1518 4 BIND =; 1519 4 dds_context = apr6_v : BLOCK [dds_context_size]!R; 1520 4 FIELD (dds_context_f); ! Default directory context block address ; 1521 4 ; 1522 4 LOCAL>; 1523 4 trailing_length, ! Returned length from fss ; 1524 4 default_length,I; 1525 4 p : REF VECTOR [,BYTE]; ! Pointer into secondary stringL ; 1526 4 ; 1527 4 !R; 1528 4 ! Map the default directory string context block. If there is a taskO; 1529 4 ! context block use that one. If not, use the one hung off of theBP; 1530 4 ! terminal if it is present. If there is neither then return a DDS; 1531 4 ! of blank.; 1532 4 !<; 1533 7 IF (KISAR6 = ( IF (.(.tcb_addr + T_CTX) NEQU 0); 1534 6 THEN ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 46yW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (18)o'; 1535 7 .(.tcb_addr + T_CTX) ; 1536 6 ELSEeJ; 1537 7 (IF (.(.(.tcb_addr + T_UCB) + U_CW1) AND DV_PSE) EQLU 0; 1538 7 THEN /; 1539 8 .(.(.tcb_addr + T_UCB) + U_CTX)l; 1540 7 ELSE ; 1541 7 0); 1542 6 ); 1543 4 ) NEQU 0 ; 1544 4 ; 1545 4 THENa; 1546 5 BEGIN ; 1547 5 ; 1548 5 !a; 1549 5 ! Here we have the context block mapped. Copy, compress, and upcase the default5L; 1550 5 ! directory string. Checking of the string is done by fss.; 1551 5 !<; 1552 5 default_length = .dds_context [dds_length];[; 1553 5 ch$copy (.default_length, dds_context [default_string], secondary [0]; p);; 1554 5 END; 1555 4 ELSE$; 1556 4 default_length = 0; ; 1557 4 ; 1558 4 !(; 1559 4 ! Parse the default string.; 1560 4 !D; 1561 4 fss (secondary [0], .default_length;, trailing_length);'; 1562 4 IF .trailing_length NEQU 0d; 1563 4 THENh; 1564 5 BEGIN ; 1565 5 ; 1566 5 !4; 1567 5 ! Settup the bad string for return.; 1568 5 !J; 1569 5 primary = secondary [0]; ! The primary string is returned>; 1570 5 save_parse (pri_pb); 00Ah;hcDATADATADATADATADATADATADATA! Move scr_pb to primaryI; 1571 5 pri_pb [fss_status] = bad_char; ! Settup the error codee:; 1572 5 LEAVE process_file_specs; ! And return it; 1573 4 END;, a];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 47BW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (19)r; 1574 4 !8; 1575 4 ! Is there a valid non null default string?; 1576 4 !4; 1577 4 IF (.scr_pb [directory_addr] EQLU 0) OR1; 1578 4 (.scr_pb [directory_len] EQLU 2) ORuI; 1579 5 ((.scr_pb [flags] AND (FS$NAM OR FS$TYP OR FS$VER)) NEQU 0)l; 1580 4 THENr; 1581 5 BEGIN ; 1582 5 ; 1583 5 !1; 1584 5 ! Generate the UIC format string1; 1585 5 !; 1586 5 MACRO ; 1587 5 ; 1588 5 !SI; 1589 5 ! Insert a character into a string. Increment the pointer. ; 1590 5 !d!; M 1591 5 ch$insert (value) = ; M 1592 5 BEGINe&; M 1593 5 dir_ptr [0] = value;(; M 1594 5 dir_ptr = dir_ptr [1];; M 1595 5 ENDs; 1596 5 %; ; 1597 5 ; 1598 5 LOCALJ; 1599 5 dir_ptr : REF VECTOR [, BYTE]; ! Pointer into the dir string ; 1600 5 ; 1601 5 BIND1I; 1602 5 uic_group = .header_addr + H_DUIC + 1 : BYTE, ! Default UICS7; 1603 5 uic_owner = .header_addr + H_DUIC : BYTE;e ; 1604 5 F; 1605 5 KISAR6 = .$SAHDB; ! Make sure task header is mapped4; 1606 5 dir_ptr = secondary [0]; ! Init it<; 1607 5 ch$insert (%C'['); ! Put in the opening [ ; 1608 5 ; 1609 5 !M; 1610 5 ! Fill in the group zero suppressed. Include the zero if iti); 1611 5 ! is the only character. ; 1612 5 !+; 1613 5 IF .uic_group <6,2> NEQU 0I; 1614 5 THEN ; 1615 6 BEGINi3; 1616 6 ch$insert (.uic_group <6,2> + %C'0'); 3; 1617 6 ch$insert (.uic_group <3,3> + %C'0');s; 1618 6 END; 1619 5 ELSErS; 1620 5 IF .uic_group <3,3> NEQU 0 THEN ch$insert (.uic_group <3,3> + %C'0');i6; 1621 5 ch$insert (.uic_group <0,3> + %C'0'); ; 1622 5 8; 1623 5 ch$insert (%C','); ! Insert the comma. ; 1624 5 ; 1625 5 !?; 1626 5 ! Fill in the group and owner zero suppressed.I; 1627 5 ! ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 48iW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (19) +; 1628 5 IF .uic_owner <6,2> NEQU 0.; 1629 5 THEN); 1630 6 BEGINc3; 1631 6 ch$insert (.uic_owner <6,2> + %C'0'); 3; 1632 6 ch$insert (.uic_owner <3,3> + %C'0');.; 1633 6 END ; 1634 5 ELSE6S; 1635 5 IF .uic_owner <3,3> NEQU 0 THEN ch$insert (.uic_owner <3,3> + %C'0');P6; 1636 5 ch$insert (.uic_owner <0,3> + %C'0'); ; 1637 5 ; 1638 5 !?; 1639 5 ! Finish up the directory string and parse it.D; 1640 5 !;; 1641 5 ch$insert (%C']'); ! Put in the trailing ]9 ; 1642 5 ; 1643 5 !A; 1644 5 ! Parse the default UIC format directory string. ; 1645 5 !?; 1646 5 fss (secondary [0], .dir_ptr - secondary [0]);6<; 1647 4 END; ! Create UIC format directory string w];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 49 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (20)0; 1648 4 !K; 1649 4 ! If the user supplied directory string contains a leading E; 1650 4 ! . or - merge it with the default directory string.g; 1651 4 !); 1652 4 IF .merge_directory_flagi; 1653 4 THEN6; 1654 5 BEGIND3; 1655 5 status = ! Set the status from merge !; 1656 5 merge_directories :9; 1657 6 BEGINi ; 1658 6 ; 1659 6 LOCAL0*; 1660 6 bracket : UNSIGNED BYTE,4; 1661 6 default_dir : REF VE00AhgfCTOR [, BYTE],1; 1662 6 user_dir : REF VECTOR [, BYTE];e ; 1663 6 ; 1664 6 ! B; 1665 6 ! The user directory pointer is initialized to pointA; 1666 6 ! to the beginning of the directory string providedi>; 1667 6 ! by the user. The default directory pointer is>; 1668 6 ! initialized to point to the end of the default!; 1669 6 ! directory string. ; 1670 6 !96; 1671 6 user_dir = .pri_pb [directory_addr] + 1;8; 1672 6 default_dir = .scr_pb [trailing_addr] - 2; ; 1673 6 ; 1674 6 !VB; 1675 6 ! Save the trailing bracket from the default string.?; 1676 6 ! This will be used to close the merged directory ; 1677 6 ! string.i; 1678 6 !o<; 1679 6 bracket = .(.scr_pb [trailing_addr] - 1)<0,8>; ; 1680 6 ; 1681 6 !a<; 1682 6 ! Loop thru any '-' requests and backup in the"; 1683 6 ! default directory.; 1684 6 !d/; 1685 6 WHILE .user_dir [0] EQLU %C'-' DO ; 1686 7 BEGINa*; 1687 7 user_dir = user_dir [1]; ; 1688 7 ; 1689 7 !l#; 1690 7 ! '.' is bad here; 1691 7 !w0; 1692 7 IF .default_dir [0] EQLU %C'.'; 1693 7 THENV; 1694 7 LEAVE merge_directories WITH pri_pb [fss_status] = bad_directory;; 1695 7 ! =; 1696 7 ! Backup one level in the default string if !; 1697 7 ! there is one. ; 1698 7 !5; 1699 7 WHILE 1 DO; 1700 8 BEGIN ; 1701 8  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 50 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (20)'; 1702 8 !5; 1703 8 ! Check for no more default directory. ; 1704 8 !?; 1705 8 IF default_dir [0] EQLA .scr_pb [directory_addr]k; 1706 8 THENe; 1707 8 EXITLOOP; ; 1708 8 -; 1709 8 IF .default_dir [0] EQLU %C'.' ; 1710 8 THEN0; 1711 9 BEGINF; 1712 9 default_dir = default_dir [-1]; ! Back over the '.'*; 1713 9 EXITLOOP; ! And exit; 1714 9 END; 1715 8 ELSECG; 1716 8 default_dir = default_dir [-1]; ! Backup a characterf ; 1717 8 ; 1718 7 END; ,; 1719 6 END; ! End of hyphen loop ; 1720 6 ; 1721 6 !k#; 1722 6 ! '.' is bad here too ; 1723 6 ! ,; 1724 6 IF .default_dir [0] EQLU %C'.'; 1725 6 THENR; 1726 6 LEAVE merge_directories WITH pri_pb [fss_status] = bad_directory; ; 1727 6 ; 1728 6 ! =; 1729 6 ! Check for remaining default directory string.D; 1730 6 !E>; 1731 6 IF default_dir [0] EQLA .scr_pb [directory_addr]; 1732 6 THEN; 1733 7 BEGINE ; 1734 7 ; 1735 7 ! @; 1736 7 ! Here we are out of default directory string.@; 1737 7 ! Eat a leading '.' in the users string unlessE; 1738 7 ! it is part of '...'. '..' will also be accepted.cC; 1739 7 ! That case will be caught in the access methods.7; 1740 7 ! -; 1741 7 IF .user_dir [0] EQLU %C'.'i; 1742 7 THEN; 1743 8 BEGIN ; 1744 8 ; 1745 8 !%; 1746 8 ! Skip the leading '.' ; 1747 8 !'; 1748 8 user_dir = user_dir [1];6 ; 1749 8 ; 1750 8 !@; 1751 8 ! If the next character is a '.' also then backup2; 1752 8 ! to include the previous dot also.; 1753 8 !*; 1754 8 IF .user_dir [0] EQLU %C'.'; 1755 8 THEN  g];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 51iW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (20) ,; 1756 8 user_dir = user_dir [-1]; ; 1757 8 ;; 1758 7 END; ! End of leading '.' in user directory ; 1759 7 ; 1760 7 !rJ; 1761 7 ! If the users directory spec is gone too, we must setup2; 1762 7 ! the MFD as the directory s00Ah;hcDATADATADATADATADATADATADATApec.; 1763 7 !5_; 1764 8 IF user_dir [0] EQLA (.pri_pb [directory_addr] + .pri_pb [directory_len] - 1)2; 1765 7 THEN; 1766 8 BEGIN:; 1767 8 DECR i FROM 5 TO 0 DO ! Move the MFD name; 1768 9 BEGING; 1769 9 default_dir = default_dir [1]; ! Advance the pointer C; 1770 9 default_dir [0] = %C'0'; ! Insert the character ; 1771 8 END;r; 1772 7 END;o9; 1773 7 END ! End of out of default directoryo; 1774 6 ELSE; 1775 7 BEGIN ; 1776 7 ; 1777 7 !dD; 1778 7 ! Here we have some default directory string left.A; 1779 7 ! Make sure that the users directory spec has avB; 1780 7 ! leading '.' unless it is null. If it does notG; 1781 7 ! then append a '.' at the end of the default string.t; 1782 7 !I_; 1783 8 IF user_dir [0] NEQA (.pri_pb [directory_addr] + .pri_pb [directory_len] - 1)n; 1784 7 THEN*; 1785 7 IF .user_dir [0] NEQU %C'.'; 1786 7 THEN ; 1787 8 BEGINC; 1788 8 default_dir = default_dir [1]; ! Advance pointer ;; 1789 8 default_dir [0] = %C'.'; ! Append the . ; 1790 7 END;e ; 1791 7 =; 1792 6 END; ! End of default directory remaining ; 1793 6 ; 1794 6 ! F; 1795 6 ! Now merge the remaining user string with the remaining); 1796 6 ! default directory string.r; 1797 6 ! a; 1798 6 WHILE user_dir [0] NEQA (.pri_pb [directory_addr] + .pri_pb [directory_len] - 1) DO ; 1799 7 BEGIN 0; 1800 7 default_dir = default_dir [1];2; 1801 7 default_dir [0] = .user_dir [0];*; 1802 7 user_dir = user_dir [1];; 1803 6 END; ; 1804 6 ; 1805 6 !i1; 1806 6 ! Include the closing character and-; 1807 6 ! parse the new default string.r; 1808 6 !i,; 1809 6 default_dir = default_dir [1]; ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 52rW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (20)i); 1810 6 default_dir [0] = .bracket;ud; 1811 6 fss (secondary [0], default_dir [0] - .scr_pb [directory_addr] + 1; ,trailing_length); ; 1812 6 ; 1813 6 !lA; 1814 6 ! Check the merged directory and return the status.l; 1815 6 !8+; 1816 6 LEAVE merge_directories WITH l,; 1817 6 IF .trailing_length NEQU 0; 1818 6 THEN@; 1819 6 pri_pb [fss_status] = bad_directory ! Error code; 1820 6 ELSE4; 1821 6 success; ! Return the status ; 1822 6 (; 1823 5 END; ! merge_directories ; 1824 5 ; 1825 5 !sC; 1826 5 ! Check the status and return any errors to the user.3; 1827 5 !4%; 1828 5 IF .status NEQU successr; 1829 5 THEN; 1830 6 BEGIN6 ; 1831 6 ; 1832 6 !l5; 1833 6 ! Settup the bad string for return.8; 1834 6 !8L; 1835 6 primary = secondary [0]; ! The primary string is returned@; 1836 6 save_parse (pri_pb); ! Move scr_pb to primaryH; 1837 6 pri_pb [fss_status] = .status; ! Settup the error code<; 1838 6 LEAVE process_file_specs; ! And return it; 1839 5 END;/; 1840 4 END; ! IF .merge_directory_flag ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 53 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (21)e; 1841 4 !G; 1842 4 ! Merge the default directory into the primary string.sI; 1843 4 ! First zero the length and address for the directory in :; 1844 4 ! the primary string in case it was null.; 1845 4 !,; 1846 4 pri_pb [directory_len] = 0;-; 1847 4 pri_pb [directory_addr] = 0;a; 1848 4 merge();6,; 1849 3 END; ! Add default directory ];DRPFN Logical Name Directives 00Ahgf 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 54 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (22); 1850 3 !rK; 1851 3 ! Remove any portions of the resultant string that the userpM; 1852 3 ! doesn't want. This functionality is used by RMS-11 if some H; 1853 3 ! portion of the file spec is provided in the NAM Block.; 1854 3 !); 1855 4 BEGIN ; 1856 4 ; 1857 4 LOCAL ; 1858 4 do_merge; ; 1859 4 G; 1860 4 secondary [0] = %C' '; ! Set up secondary with a blankd!; 1861 4 do_merge = false;C4; 1862 4 IF (.dpb_ptr [11] AND FS$NOD) NEQU 0; 1863 4 THEN; 1864 5 BEGIN$; 1865 5 pri_pb [node_addr] = 0;#; 1866 5 pri_pb [node_len] = 0;c; 1867 5 do_merge = true;s; 1868 4 END; 4; 1869 4 IF (.dpb_ptr [11] AND FS$DEV) NEQU 0; 1870 4 THEN; 1871 5 BEGIN&; 1872 5 pri_pb [device_addr] = 0;%; 1873 5 pri_pb [device_len] = 0; ; 1874 5 do_merge = true;0; 1875 4 END;p ; 1876 4 R; 1877 4 ! Neither FCS nor RMS likes the underscore returned on the device..; 1878 4 ! If it's there, strip it off.; 1879 4 !5;; 1880 4 IF .(.pri_pb [device_addr])<0,8> EQLU %C'_'=; 1881 4 THEN; 1882 5 BEGIN>; 1883 5 pri_pb [device_addr] = .pri_pb [device_addr] + 1;<; 1884 5 pri_pb [device_len] = .pri_pb [device_len] - 1;; 1885 5 do_merge = true;8; 1886 4 END;c ; 1887 4 4; 1888 4 IF (.dpb_ptr [11] AND FS$DIR) NEQU 0; 1889 4 THEN; 1890 5 BEGIN); 1891 5 pri_pb [directory_addr] = 0;e(; 1892 5 pri_pb [directory_len] = 0;; 1893 5 do_merge = true; ; 1894 4 END; 4; 1895 4 IF (.dpb_ptr [11] AND FS$NAM) NEQU 0; 1896 4 THEN; 1897 5 BEGIN(; 1898 5 pri_pb [filename_addr] = 0;'; 1899 5 pri_pb [filename_len] = 0;_; 1900 5 do_merge = true;;; 1901 4 END;e; 1902 4 !8J; 1903 4 ! Include a . in the primary string if the primary string  0];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 552W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (22) H; 1904 4 ! does not have a type in it, we are doing defaults, and2; 1905 4 ! directory defaulting is enabled.; 1906 4 !p4; 1907 4 IF (.dpb_ptr [11] AND FS$TYP) NEQU 0; 1908 4 THEN; 1909 5 BEGIN$; 1910 5 pri_pb [type_addr] = 0;#; 1911 5 pri_pb [type_len] = 0;n; 1912 5 do_merge = true;r; 1913 5 END; 1914 4 ELSEN; 1915 4 IF .do_directory_defaulting AND (.dpb_ptr [11] AND FS$NDF) EQLU 0; 1916 4 THEN ; 1917 5 BEGINB; 1918 5 secondary [0] = %C'.'; ! Include the "." for RMS!; 1919 5 do_merge = true;e; 1920 4 END; ; 1921 4 4; 1922 4 IF (.dpb_ptr [11] AND FS$VER) NEQU 0; 1923 4 THEN; 1924 5 BEGIN'; 1925 5 pri_pb [version_addr] = 0;&; 1926 5 pri_pb [version_len] = 0;; 1927 5 do_merge = true; ; 1928 4 END; !; 1929 4 IF .do_merge THENd; 1930 5 BEGIN@; 1931 5 fss (secondary [0], 1); ! Parse file specification,; 1932 5 merge (); ! And do the merge; 1933 4 END;c; 1934 3 END;,; 1935 2 END; ! process_file_specs ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 56HW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (23)r; 1936 2 !9H; 1937 2 ! Return the expanded string and the primary parse block3; 1938 2 ! with the saved flags to the user.r; 1939 2 ! ; 1940 2 !L; 1941 2 ! First return the strings length if the buffer is provided.R; 1942 2 ! Don't do any of this for ACHN, because we don't return a string. ; 1943 2 (; 1944 2 IF NOT .must_have_device; 1945 2 THEN; 1946 3 BEGIND; 1947 00Ai;hcDATADATADATADATADATADATADATA3 b_addr = .dpb_ptr [6]; ! Get resultant length address@; 1948 3 IF .pri_pb [trailing_addr] NEQU 0 ! Get the length; 1949 3 THENo\; 1950 3 res_length = .pri_pb [trailing_addr] - primary [0] + .pri_pb [trailing_len]; 1951 3 ELSE ; 1952 3 res_length = 0; ; 1953 3 ; 1954 3 IF .b_addr NEQU 0; 1955 3 THENs; 1956 4 BEGIN_; 1957 4 IF $ACHKB (.b_addr, 2) THEN ERROR_EXIT (IE_ADP); ! Check for read/write accessN:; 1958 4 p = $RELOM (.b_addr); ! Map user buffer9; 1959 4 .p = .res_length; ! Fill in the lengtha; 1960 3 END; ; 1961 3 ; 1962 3 !N; 1963 3 ! RMS requires that the version number delimiter be a ; and not aO; 1964 3 ! . in the resultant string. It uses this for some later parsing.9; 1965 3 !X; 1966 3 IF .pri_pb [version_len] NEQU 0 THEN (.pri_pb [version_addr])<0,8> = %C';'; ; 1967 3 ; 1968 3 !=; 1969 3 ! Then return as much of the string as possible,p; 1970 3 !=; 1971 3 b_addr = .dpb_ptr [4]; ! Get resultant address!;; 1972 3 b_len = .dpb_ptr [5]; ! Get resultant length9C; 1973 3 $RELOC (.b_addr; b_mapping, p); ! Relocte user buffereh; 1974 3 convert_parse (pri_pb, primary [0], .b_addr); ! Convert parse block addresses to user mode ; 1975 3 ; 1976 3 IF .b_len NEQU 0l; 1977 3 THENr; 1978 4 BEGIN ; 1979 4 <; 1980 4 IF .b_addr EQLU 0 THEN ERROR_EXIT (IE_ADP); ; 1981 4 ; 1982 4 !<; 1983 4 ! Address check the user buffer. Then copy the(; 1984 4 ! resultant string into it.; 1985 4 !d; 1986 4 IF $ACHKB (.b_addr, .b_len) THEN ERROR_EXIT (IE_ADP); ! Check for read/write access ; 1987 4 v; 1988 4 IF .res_length NEQU 0 THEN $BLXIO (MINU (.res_length, .b_len), .kisar5, primary [0], .b_mapping, .p); ; 1989 4  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 57XW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (23) ; 1990 4 ! Move itr; 1991 3 END;o .];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 58kW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)(; 1992 3 !_D; 1993 3 ! Now return as much of the parse block as possible,; 1994 3 !cK; 1995 3 pri_pb [flags] = .flags_for_user; ! Save flags to be returned t; 1996 4 IF .cannot_have_node AND (.pri_pb [node_addr] NEQU 0) ! If a node is illegal, put status in parse block8; 1997 3 THEN pri_pb [fss_status] = bad_logical;?; 1998 3 b_addr = .dpb_ptr [7]; ! Get parse block address =; 1999 3 b_len = .dpb_ptr [8]; ! Get parse block lengthP ; 2000 3 ; 2001 3 IF .b_len NEQU 09; 2002 3 THENu; 2003 4 BEGIN ; 2004 4 <; 2005 4 IF .b_addr EQLU 0 THEN ERROR_EXIT (IE_ADP); ; 2006 4 ; 2007 4 !I; 2008 4 ! Address check and relocate the user buffer. Then copy the #; 2009 4 ! parse block into it. ; 2010 4 !d; 2011 4 IF $ACHKB (.b_addr, .b_len) THEN ERROR_EXIT (IE_ADP); ! Check for read/write access ; 2012 4 K; 2013 4 $RELOC (.b_addr; b_mapping, b_addr); ! Relocte user buffer0l; 2014 4 $BLXIO (MINU (parse_block_size*2, .b_len), .kisar5, pri_pb, .b_mapping, .b_addr); ! Move it; 2015 3 END;T; 2016 2 END;A; 2017 2 !Y; 2018 2 ! The LUN assignment may have returned an error. If it did the signalingU; 2019 2 ! of that error was deferred so that more information about the errord0; 2020 2 ! could be returned to the user.; 2021 2 ! 6; 2022 2 ! If there was an error signal it now.; 2023 2 ! U; 2024 2 IF .assign_lun_error NEQU 0 THEN return_ie_xxx_l (.assign_lun_error);pN; 2025 2 IF .pri_pb [fss_status] NEQU success THEN ERROR_EXIT (IE_LNF); ; 2026 2 ; 2027 2 RETURN;h; 2028 1 END; .NLISTn .LIST BIN00A igf,LOC .LISTDDS.CONTEXT= -40000 & .SBTTL COMMON.PARSE Common Parse Code .NLISTt .ENABL LSB  .LIST COMMON.PARSE:  JSR R1,$SAVE5 ; 1044e SUB #24,SP  MOV R0,20(SP) MOV R5,12(SP) MOV R4,10(SP) i];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 59xW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)_ MOV R3,14(SP)* CLRB INIT.LOGICAL.DESCRIPTOR+7 ; 1088 MOV R3,R0 ; 1089% MOVB 1(R0),INIT.LOGICAL.DESCRIPTOR+6 / MOV KISAR5,INIT.LOGICAL.DESCRIPTOR+2; 1090 - MOV R5,INIT.LOGICAL.DESCRIPTOR+10 ; 1091R) MOVB 3(R0),SAVED.INHIBIT.MASK ; 10924 CLRB SAVED.INHIBIT.MASK+1) MOV #1,16(SP) ; *,DO.ASSIGN.LUN 1094a& CLR 6(SP) ; ASSIGN.LUN.ERRO 1095 MOV #WORK.1,MERGED ; 1096! MOV #WORK.2,PRIMARY ; 1097  MOV #SCR.PB,R1 ; 1098 JSR PC,SAVE.PARSE MOV #PRI.PB,R1 ; 1099 JSR PC,SAVE.PARSE MOV 14(SP),R0 ; 1103R MOV 4(R0),4(SP) ; *,B.ADDR,$ MOV 6(R0),2(SP) ; *,B.LEN 1104 BEQ 4$ ; 1106O TST 4(SP) ; B.ADDR 1113 BNE 1$R TRAP 236 &1$: CMP 2(SP),#377 ; B.LEN,* 1115 BLOS 2$ TRAP 247A%2$: MOV 4(SP),R0 ; B.ADDR,* 1121* MOV 2(SP),R1 ; B.LEN,*R JSR PC,$ACHRO BHIS 3$ TRAP 236M%3$: MOV 4(SP),R0 ; B.ADDR,* 1123O JSR PC,$RELOM MOV R0,4(SP) ; *,B.ADDR MOVB #40,@PRIMARY ; 1125! MOV 2(SP),R1 ; B.LEN,* 1126P MOV R0,R2 ; B.ADDR,* MOV PRIMARY,R3 JSR PC,CH$COPY MOV R3,4(SP)M MOV R3,R0 ; B.ADDR,* 1127 SUB PRIMARY,R0  MOV PRIMARY,R4) MOV R0,R5 JSR PC,FSSE# TST R5 ; TRAILING.LENGTH 1128  BEQ 5$* JMP 38$ ; 1131"4$: MOVB #40,@PRIMARY ; 1139 MOV PRIMARY,R4 ; 1140 MOV #1,R5 JSR PC,FSS5$: MOV #PRI.PB,R1 ; 1143P JSR PC,SAVE.PARSE 2];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 60 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)R' CLR 22(SP) ; PRI.LOGICAL.TYP 1145+ MOVB PRI.PB+44,22(SP) ; *,PRI.LOGICAL.TYP5 MOV 14(SP),R3 ; 1147T JSR PC,EXPAND.FILESPECB CMP R0,#1 BNE 13$ CLR R0 ; 1149@ BISB PRI.PB+44,R0$ CMP R0,22(SP) ; *,PRI.LOGICAL.TYP BLOS 6$' CLR 22(SP) ; PRI.LOGICAL.TYP 1150P+ MOVB PRI.PB+44,22(SP) ; *,PRI.LOGICAL.TYPe6$: MOV 14(SP),R0 ; 1158 MOV 22(R0),4(SP) ; *,B.ADDR% MOV 24(R0),2(SP) ; *,B.LEN 1159  BEQ 9$ ; 1161R TST 4(SP) ; B.ADDR 1168 BNE 7$C TRAP 236 %7$: MOV 4(SP),R0 ; B.ADDR,* 1175B MOV 2(SP),R1 ; B.LEN,*. JSR PC,$ACHRO BHIS 8$ TRAP 236J%8$: MOV 4(SP),R0 ; B.ADDR,* 1177E JSR PC,$RELOM MOV R0,4(SP) ; *,B.ADDR MOV R0,R3 ; B.ADDR,* 1179 MOV 2(SP),R4 ; B.LEN,*( JSR PC,@20(SP)C MOV R3,4(SP) MOV R3,R0 ; B.ADDR,* 1180 SUB #SECONDARY,R0 MOV #SECONDARY,R4 MOV R0,R5 JSR PC,FSS # TST R5 ; TRAILING.LENGTH 1181E BEQ 10$ JMP 37$ ; 1188#9$: MOVB #40,SECONDARY ; 1197E MOV #SECONDARY,R4 ; 11980 MOV #1,R5 JSR PC,FSSM/10$: CMP 22(SP),#1 ; PRI.LOGICAL.TYP,* 1205$ BLOS 11$J CLR SCR.PB+4 ; 1208 CLR SCR.PB+6 ; 1209 CLR SCR.PB+10 ; 1210 CLR SCR.PB+12 ; 1211111$: JSR PC,MERGE ; 1218 CMP R0,#1 BNE 16$ CLR R0 ; 1220  BISB PRI.PB+44,R0 S];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 611W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)D$ CMP R0,22(SP) ; *,PRI.LOGICAL.TYP BLOS 12$: MOV 14(SP),R3 ; 1223L JSR PC,EXPAND.FILESPECJ CMP R0,#1 BNE 16$412$: MOV PRI.PB+2,22(SP) ; *,FLAGS.FOR.USER 1225 TST PRI.PB+6 ; 1231 13$: BNE 16$ TST PRI.PB+12 ; 12368 BNE 17$$ BIT #1,MUST.HAVE.DEVICE ; 1243 BEQ 14$ TRAP 244S14$: MOV 14(SP),R0 ; 1244  BIT #10200,26(R0) BNE 17$ MOV $SAHDB,KISAR6 ; 1248 MOV R0,R3 ; 1249 ADD #2,R3 MOV 10(SP),R4 MOV 12(SP),R500Ai;hcDATADATADATADATADATADATADATA JSR PC,$MPLUN ROL (SP)R MOV R2,20(SP) ROR (SP)T BCS 15$& CLR 16(SP) ; DO.ASSIGN.LUN 1255 BR 17$ ; 1249C,15$: MOV #SECONDARY,R0 ; *,DEV.PTR 1281& MOVB #123,(R0)+ ; *,DEV.PTR 1282& MOVB #131,(R0)+ ; *,DEV.PTR 1283% MOVB #72,(R0)+ ; *,DEV.PTR 1284U MOV #SECONDARY,R4 ; 12851 MOV #3,R5 JSR PC,FSS1 JSR PC,MERGE ; 1286 CMP R0,#1 BNE 16$ MOV 14(SP),R3 ; 1287  JSR PC,EXPAND.FILESPEC CMP R0,#1 BNE 16$ TST PRI.PB+6 ; 1292 16$: BEQ 17$ JMP 73$-17$: BIT #1,16(SP) ; *,DO.ASSIGN.LUN 1303R BEQ 23$ MOV 14(SP),R0 BIT #10200,26(R0) BNE 23$ CMP PRI.PB+10,#3 ; 1330 BLO 19$ ; 1333 CLR R1 ; UNIT.NUMBER 1339 V];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 62 W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)( MOV PRI.PB+12,R2 ; *,UNIT.PTR 1340 ADD #2,R2 ; *,UNIT.PTR18$: CLR R3 ; CHAR 1345 BISB (R2)+,R3 ; UNIT.PTR,CHAR CMP R3,#72 ; CHAR,*N BEQ 21$ CMP R3,#60 ; CHAR,* 1351T BLO 19$ CMP R3,#67 ; CHAR,*P BLOS 20$ 919$: MOV #IE.IDU.RETURN,6(SP) ; *,ASSIGN.LUN.ERRO 1354  BR 23$ ; 1353i)20$: MOV R1,R0 ; UNIT.NUMBER,* 1358 ASH #3,R0 ADD R3,R0 ; CHAR,* MOV R0,R1 ; *,UNIT.NUMBER  SUB #60,R1 ; *,UNIT.NUMBER BR 18$ ; 1345(#21$: MOV $SAHDB,KISAR6 ; 1375P MOV #2,R0 ; 1377 ADD 14(SP),R0 MOV R0,R3 TSTB (R3) BEQ 22$ MOV 10(SP),R4 ; 1379 MOV 12(SP),R5 MOV @PRI.PB+12,R0 MOV TERMINAL.LOGICAL.FLAG,R2T JSR PC,LUN.ASSIGN# MOV R0,6(SP) ; *,ASSIGN.LUN.ERROV MOV R1,20(SP) BR 23$ ; 1377R222$: MOV #IE.ILU.RETURN,6(SP) ; *,ASSIGN.LUN.ERRO(23$: BIT #1,MUST.HAVE.DEVICE ; 1401 BEQ 24$ JMP 89$*24$: TST 6(SP) ; ASSIGN.LUN.ERRO 1402 BNE 26$ MOV 14(SP),R0 BIT #10200,26(R0) BNE 26$( MOV #SECONDARY,R3 ; *,DEV.PTR 1426! MOV 20(SP),R0 ; UCB,* 1432, MOV 12(SP),R5 JSR PC,$MPLND MOV R2,20(SP) MOV #DV.REC,R1 ; 1440 BIS #DV.SDI,R1V BIS #DV.SQD,R1.) BIT U.CW1(R0),R1 ; *(REDIRECTED.UCB),*  BEQ 25$( CLR DO.DIRECTORY.DEFAULTING ; 1442%25$: MOV 20(SP),R0 ; UCB,* 1444P MOV U.DCB(R0),R2 ; *(UCB),DCB U];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 63EW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)4& SUB D.UCB(R2),R0 ; *(DCB),* 1449 MOV R0,R1 SXT R0, DIV D.UCBL(R2),R0 ; *(DCB),*R CLR R1 ; 1450S BISB D.UNIT(R2),R1 ; *(DCB),* ADD R1,R0& MOVB #137,(R3)+ ; *,DEV.PTR 1452/ MOVB D.NAM(R2),(R3)+ ; *(DCB),DEV.PTR 1453V0 MOVB D.NAM+1(R2),(R3)+ ; *(DCB),DEV.PTR 1454 JSR PC,DCBTA.BLI ; 1460% MOVB #72,(R3)+ ; *,DEV.PTR 14658 SUB #SECONDARY,R3 ; 1471P MOV #SECONDARY,R4 MOV R3,R5 JSR PC,FSS- CLR PRI.PB+10 ; 1477P CLR PRI.PB+12 ; 1478B JSR PC,MERGE ; 1479 CMP R0,#1 BNE 39$26$: CLR R3 ; 1488  CMP PRI.PB+14,#3R BLO 27$ INC R3B"27$: MOV PRI.PB+16,R0 ; 1489 CLR R2M CMPB 1(R0),#56; BNE 28$ INC R228$: CLR R1 ; 1490( CMPB 1(R0),#555 BNE 29$ INC R1229$: BIS R2,R1 ; 1489+ MOV R1,16(SP) ; *,MERGE.DIRECTORY 1488, MOV R3,R0 COM R0 $ BIC R0,16(SP) ; *,MERGE.DIRECTORY* BIT #1,DO.DIRECTORY.DEFAULTING ; 1492 BEQ 30$ MOV 14(SP),R0 ; 1493R BIT #10100,26(R0) BEQ 31$ 30$: JMP 63$31$: TST PRI.PB+16 ; 14946 BEQ 32$ CMP PRI.PB+14,#2 ; 1495 BEQ 32$+ BIT #1,16(SP) ; *,MERGE.DIRECTORY 14964 BEQ 30$32$: MOV 12(SP),R1 ; 1533I MOV T.CTX(R1),R0  BNE 34$ (];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 64EW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)O MOV T.UCB(R1),R0 ; 1537 BIT U.CW1(R0),#DV.PSE BNE 33$ MOV U.CTX(R0),R06 BR 34$Q 33$: CLR R0P34$: MOV R0,KISAR6 ; 1533100Aigf BEQ 35$ ; 1543" CLR R5 ; DEFAULT.LENGTH 1552& BISB @#140001,R5 ; *,DEFAULT.LENGTH' MOV R5,R1 ; DEFAULT.LENGTH,* 15531 MOV #-37774,R2R MOV #SECONDARY,R3 JSR PC,CH$COPY  BR 36$ ; 1533u&35$: CLR R5 ; DEFAULT.LENGTH 1556#36$: MOV #SECONDARY,R4 ; 1561C JSR PC,FSS- MOV R5,20(SP) BEQ 40$ ; 1562'37$: MOV #SECONDARY,PRIMARY ; 1569 38$: MOV #PRI.PB,R1 ; 1570 JSR PC,SAVE.PARSE MOV #-3440,PRI.PB ; 1571:39$: JMP 73$ ; 156440$: TST SCR.PB+16 ; 1577  BEQ 41$ CMP SCR.PB+14,#2 ; 1578 BEQ 41$ BIT #7,SCR.PB+2 ; 1579  BEQ 48$"41$: MOV #H.DUIC+1,R1 ; 1602 ADD 10(SP),R1 MOV R1,R0 MOV #H.DUIC,R2 ; 1603 ADD 10(SP),R2 MOV R2,R1 MOV $SAHDB,KISAR6 ; 1605,( MOV #SECONDARY,R5 ; *,DIR.PTR 1606& MOVB #133,(R5)+ ; *,DIR.PTR 1607 BITB #300,(R0) ; 1613 BEQ 42$ MOVB (R0),R2 ; 1616R ASH #-6,R2E BIC #177774,R2. ADD #60,R27 MOVB R2,(R5)+ ; *,DIR.PTR BR 43$ ; 1617;42$: BITB #70,(R0) ; 1620+ BEQ 44$43$: MOVB (R0),R2 ASH #-3,R2B BIC #177770,R2 ADD #60,R2: V];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 65PW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)6 MOVB R2,(R5)+ ; *,DIR.PTR44$: MOVB (R0),R2 ; 1621  BIC #177770,R2 ADD #60,R2  MOVB R2,(R5)+ ; *,DIR.PTR% MOVB #54,(R5)+ ; *,DIR.PTR 16232 BITB #300,(R1) ; 1628 BEQ 45$ MOVB (R1),R0 ; 1631 ASH #-6,R0Q BIC #177774,R0R ADD #60,R0# MOVB R0,(R5)+ ; *,DIR.PTR BR 46$ ; 1632o45$: BITB #70,(R1) ; 16359 BEQ 47$46$: MOVB (R1),R04 ASH #-3,R0g BIC #177770,R0o ADD #60,R0d MOVB R0,(R5)+ ; *,DIR.PTR47$: MOVB (R1),R0 ; 16366 BIC #177770,R0+ ADD #60,R0R MOVB R0,(R5)+ ; *,DIR.PTR& MOVB #135,(R5)+ ; *,DIR.PTR 1641 SUB #SECONDARY,R5 ; 1646  MOV #SECONDARY,R4 JSR PC,FSS/48$: BIT #1,16(SP) ; *,MERGE.DIRECTORY 1652) BEQ 62$( MOV PRI.PB+16,R2 ; *,USER.DIR 1671 INC R2 ; USER.DIR(+ MOV SCR.PB+36,R5 ; *,DEFAULT.DIR 16725 SUB #2,R5 ; *,DEFAULT.DIR MOV SCR.PB+36,R1 ; 1679 MOVB -1(R1),R0 ; *,BRACKETA MOV SCR.PB+16,R4 ; 1705)49$: CMPB (R2),#55 ; USER.DIR,* 1685 BNE 52$ INC R2 ; USER.DIR 1687(( CMPB (R5),#56 ; DEFAULT.DIR,* 1692 BEQ 59$ ; 1694)50$: CMP R5,R4 ; DEFAULT.DIR,* 1705, BEQ 49$ ; 1707( CMPB (R5),#56 ; DEFAULT.DIR,* 1709 BNE 51$ DEC R5 ; DEFAULT.DIR 1712 BR 49$ ; 1711U$51$: DEC R5 ; DEFAULT.DIR 1716 BR 50$ ; 1699#,52$: CMPB (R5),#56 ; DEFAULT.DIR,* 1724 BEQ 59$ ; 1726 MOV PRI.PB+16,R1 ; 1764 R];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 661W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)  ADD PRI.PB+14,R10 DEC R14% CMP R5,R4 ; DEFAULT.DIR,* 1731F BNE 55$% CMPB (R2),#56 ; USER.DIR,* 1741T BNE 53$ INC R2 ; USER.DIR 1748:% CMPB (R2),#56 ; USER.DIR,* 17540 BNE 53$ DEC R2 ; USER.DIR 1756D&53$: CMP R2,R1 ; USER.DIR,* 1764 BNE 57$ MOV #6,R3 ; *,I 1767$54$: INC R5 ; DEFAULT.DIR 1769( MOVB #60,(R5) ; *,DEFAULT.DIR 1770 SOB R3,54$ ; I,* 1767n BR 56$ ; 17319&55$: CMP R2,R1 ; USER.DIR,* 1783 BEQ 58$% CMPB (R2),#56 ; USER.DIR,* 1785R BEQ 56$ INC R5 ; DEFAULT.DIR 1788( MOVB #56,(R5) ; *,DEFAULT.DIR 1789&56$: CMP R2,R1 ; USER.DIR,* 1798 BEQ 58$$57$: INC R5 ; DEFAULT.DIR 18000 MOVB (R2)+,(R5) ; USER.DIR,DEFAULT.DIR 1801 BR 56$ ; 1798$58$: INC R5 ; DEFAULT.DIR 1809- MOVB R0,(R5) ; BRACKET,DEFAULT.DIR 18106 SUB R4,R5 ; 1811 INC R5S MOV #SECONDARY,R4 JSR PC,FSS  MOV R5,20(SP) BEQ 60$ ; 181759$: MOV #-720,R3 ; 1819 MOV R3,PRI.PB BR 61$ ; 1817B60$: MOV #1,00A%i;hcDATADATADATADATADATADATADATAR3$61$: CMP R3,#1 ; STATUS,* 1828 BEQ 62$# MOV #SECONDARY,PRIMARY ; 1835  MOV #PRI.PB,R1 ; 1836 JSR PC,SAVE.PARSE# MOV R3,PRI.PB ; STATUS,* 1837  BR 73$ ; 1830 62$: CLR PRI.PB+14 ; 18468 CLR PRI.PB+16 ; 1847  JSR PC,MERGE ; 1848$63$: MOVB #40,SECONDARY ; 1860 CLR R0 ; DO.MERGE 1861E MOV 14(SP),R2 ; 1862V MOV 26(R2),R1 $];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 67VW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)3 BIT #400,R1 BEQ 64$ CLR PRI.PB+6 ; 1865 CLR PRI.PB+4 ; 1866" MOV #1,R0 ; *,DO.MERGE 186764$: TSTB R1 ; 1869 BPL 65$ CLR PRI.PB+12 ; 1872P CLR PRI.PB+10 ; 1873V" MOV #1,R0 ; *,DO.MERGE 1874&65$: CMPB @PRI.PB+12,#137 ; 1880 BNE 66$ INC PRI.PB+12 ; 1883P DEC PRI.PB+10 ; 1884 " MOV #1,R0 ; *,DO.MERGE 188566$: BIT #100,R1 ; 1888 BEQ 67$ CLR PRI.PB+16 ; 18918 CLR PRI.PB+14 ; 1892B" MOV #1,R0 ; *,DO.MERGE 189367$: BIT #4,R1 ; 1895 BEQ 68$ CLR PRI.PB+22 ; 18980 CLR PRI.PB+20 ; 1899:" MOV #1,R0 ; *,DO.MERGE 190068$: BIT #2,R1 ; 1907 BEQ 69$ CLR PRI.PB+26 ; 1910  CLR PRI.PB+24 ; 1911C BR 70$ ; 1912 .69$: BIT #1,DO.DIRECTORY.DEFAULTING ; 1915 BEQ 71$ BIT #10000,R1 BNE 71$ MOVB #56,SECONDARY ; 1918&70$: MOV #1,R0 ; *,DO.MERGE 191971$: ROR R1 ; 19228 BCC 72$ CLR PRI.PB+32 ; 1925, CLR PRI.PB+30 ; 19267" MOV #1,R0 ; *,DO.MERGE 1927!72$: ROR R0 ; DO.MERGE 1929R BCC 73$ MOV #SECONDARY,R4 ; 1931, MOV #1,R5 JSR PC,FSST JSR PC,MERGE ; 1932(73$: BIT #1,MUST.HAVE.DEVICE ; 1944 BEQ 74$ JMP 89$74$: MOV 14(SP),R0 ; 1947T MOV 14(R0),4(SP) ; *,B.ADDR MOV PRI.PB+36,R0 ; 1948 BEQ 75$ M];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 682W;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)  SUB PRIMARY,R0 ; 1950 ADD PRI.PB+34,R02 MOV R0,R3 ; *,RES.LENGTH BR 76$ ; 1948##75$: CLR R3 ; RES.LENGTH 1952 "76$: TST 4(SP) ; B.ADDR 1954 BEQ 78$" MOV 4(SP),R0 ; B.ADDR,* 1957 MOV #2,R1 JSR PC,$ACHKB BHIS 77$P TRAP 236D&77$: MOV 4(SP),R0 ; B.ADDR,* 1958 JSR PC,$RELOM MOV R0,R4 ; *,Pi& MOV R3,(R4) ; RES.LENGTH,P 195978$: TST PRI.PB+30 ; 19660 BEQ 79$ MOVB #73,@PRI.PB+3279$: MOV 14(SP),R0 ; 1971P MOV 10(R0),4(SP) ; *,B.ADDR% MOV 12(R0),2(SP) ; *,B.LEN 1972M" MOV 4(SP),R0 ; B.ADDR,* 1973 JSR PC,$RELOC MOV R1,R5 MOV R2,R4 MOV #PRI.PB,-(SP) ; 1974  MOV PRIMARY,-(SP) MOV 10(SP),-(SP) ; B.ADDR,* JSR PC,CONVERT.PARSEJ TST 10(SP) ; B.LEN 19763 BEQ 83$ TST 12(SP) ; B.ADDR 1980 BNE 80$ TRAP 236R'80$: MOV 12(SP),R0 ; B.ADDR,* 1986G MOV 10(SP),R1 ; B.LEN,* JSR PC,$ACHKB BHIS 81$$ TRAP 236,#81$: TST R3 ; RES.LENGTH 1988  BEQ 83$ MOV R3,R0 ; RES.LENGTH,* CMP R0,10(SP) ; *,B.LEN BLOS 82$ MOV 10(SP),R0 ; B.LEN,*82$: MOV KISAR5,R1 MOV PRIMARY,R2M MOV R5,R3 ; B.MAPPING,*  JSR PC,$BLXIO483$: MOV 30(SP),PRI.PB+2 ; FLAGS.FOR.USER,* 1995$ BIT #1,CANNOT.HAVE.NODE ; 1996 BEQ 84$ TST PRI.PB+6 T];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 69MW;X1.10 Common Parse Code 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (24)N BEQ 84$ MOV #-270,PRI.PB ; 199784$: MOV 22(SP),R0 ; 1998L MOV 16(R0),12(SP) ; *,B.ADDR;& MOV 20(R0),10(SP) ; *,B.LEN 1999 BEQ 88$ ; 2001 TST 12(SP) ; B.ADDR 2005: BNE 85$ TRAP 236 '85$: MOV 12(SP),R0 ; B.ADDR,* 2011T MOV 10(SP),R1 ; B.LEN,* JSR PC,$ACHKB BHIS 86$D TRAP 236a'86$: MOV 12(SP),R0 ; B.ADDR,* 2013  JSR PC,$RELOC MOV R1,R500A-igf MOV R2,12(SP)" MOV 10(SP),R0 ; B.LEN,* 2014 CMP R0,#46X BLOS 87$P MOV #46,R0587$: MOV KISAR5,R1 MOV #PRI.PB,R2P MOV R5,R3 ; B.MAPPING,*P MOV 12(SP),R4 ; B.ADDR,*0 JSR PC,$BLXIO88$: ADD #6,SP ; 1946*89$: TST 6(SP) ; ASSIGN.LUN.ERRO 2024 BEQ 90$$ JSR PC,@6(SP) ; *,ASSIGN.LUN.ERRO90$: CMP PRI.PB,#1 ; 2025D BEQ 91$ TRAP 353(91$: ADD #24,SP ; 1044H RTS PC 9; Routine Size: 1005 words, Routine Base: $CODE$ + 1074J/; Maximum stack depth per invocation: 21 words( .NLIST; .DSABL LSB0 .NLIST BIN,LOC .LIST V];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 70;^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25).; 2029 1 %SBTTL 'Expand file specification'; 2030 1 GLOBAL_FOR_DEBUGC; 2031 1 ROUTINE expand_filespec (dpb_ptr) : expand_filespec_l = ; 2032 1 ; 2033 1 !++, ; 2034 1 ! %; 2035 1 ! FUNCTIONAL DESCRIPTION:e ; 2036 1 !2I; 2037 1 ! This routine expands a file specification by merging in the H; 2038 1 ! translations of any logicals present in the initial input.J; 2039 1 ! The string must be in the primary buffer. It must be parsedN; 2040 1 ! already. The output is in the primary buffer and in the primary; 2041 1 ! parse block. ; 2042 1 ! .; 2043 1 ! The following algorithm is used:; 2044 1 ! O; 2045 1 ! 1) Separate a potential logical from the string, and put it in a eK; 2046 1 ! buffer. If there is no potential logical, return success.mU; 2047 1 ! The primary buffer and parse block will always contain file elements.5; 2048 1 ! that we know are not to be expanded.r ; 2049 1 !a7; 2050 1 ! 2) Repeat until we run out of iterations:y ; 2051 1 !t'; 2052 1 ! 2.1) Expand the logical U; 2053 1 ! 2.2) If a logical was found, copy the expand buffer to the secondary M; 2054 1 ! buffer. If not, copy the unexpanded logical to the secondary.6D; 2055 1 ! Set the terminal logical flag if status was terminal.); 2056 1 ! 2.3) Parse the secondary.sS; 2057 1 ! 2.4) If the status of the expand was success, separate the logicalb<; 2058 1 ! from the rest of the string in the secondary.T; 2059 1 ! 2.5) If there is anything in the secondary buffer, merge it with the; 2060 1 ! primary.oS; 2061 1 ! 2.6) If the status of both the expand and the separate was success,f2; 2062 1 ! go again; otherwise return success. ; 2063 1 ! M; 2064 1 ! 3.0) If we got here, too many iterations, return bad recursive.r; 2065 1 ! ; 2066 1 ! ; 2067 1 ! IMPLICIT INPUTS: ; 2068 1 !,R; 2069 1 ! The file specification parsed in the primary buffer and parse block. ; 2070 1 ! +; 2071 1 ! The translation inhibit mask.b ; 2072 1 ! ; 2073 1 !--0 ; 2074 1 ; 2075 2 BEGIN ; 2076 2 ; 2077 2 MAPeB; 2078 2 dpb_ptr : REF VECTOR; ! Treat the DPB as a vector ; 2079 2 ; 2080 2 LOCAL .; 2081 2 eqv_ptr : REF VECTOR [, BYTE],; 2082 2 eqv_len, i];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 719^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25); 2083 2 status,n; 2084 2 mstatus; ; 2085 2 ; 2086 2 OWN 8; 2087 2 log_hold : VECTOR [ logical_size, BYTE],; 2088 2 log_len; ; 2089 2 T; 2090 2 ROUTINE separate_logical ( dpb_ptr, parse_block ) : separate_logical_l = ; 2091 2 ; 2092 2 !++ ; 2093 2 !%; 2094 2 ! FUNCTIONAL DESCRIPTION: ; 2095 2 !8P; 2096 2 ! This routine strips off the element of the string that could be a M; 2097 2 ! logical and puts it in a special buffer to be used for logical tS; 2098 2 ! expansion. It takes the parse block of the string to be processed asoQ; 2099 2 ! input. It returns success if an element has been removed from the 0F; 2100 2 ! string, 00A5iA;icDATADATADATADATADATADATADATAand failure if the string has not been modified. ; 2101 2 ! ; 2102 2 !--+ ; 2103 2 ; 2104 3 BEGINC ; 2105 3 ; 2106 3 MAP8;; 2107 3 parse_block : REF BLOCK FIELD (parse_block_f),rC; 2108 3 dpb_ptr : REF VECTOR; ! Treat the DPB as a vectorb ; 2109 3 W; 2110 3 ! Strip off the logical and put it in log_hold, with the length in log_len.p ; 2111 3 _; 2112 3 CASE .parse_block [logical_type] from logical_type_none TO logical_type_node OF ; 2113 3 SET ; 2114 3 "; 2115 3 [logical_type_node] :5; 2116 3 IF (.dpb_ptr [11] AND FS$NOD) EQLU 0E; 2117 3 THEN ; 2118 4 BEGIN ; 2119 4 !oE; 2120 4 ! A node specification is present - it may be a logicalV; 2121 4 !ha; 2122 4 ch$copy (.parse_block [node_len], .parse_block [node_addr], log_hold [0]; log_len);t*; 2123 4 parse_block [node_addr] = 0;); 2124 4 parse_block [node_len] = 0;f,; 2125 4 parse_block [access_addr] = 0;+; 2126 4 parse_block [access_len] = 0; P; 2127 4 parse_block [flags] = .parse_block [flags] AND NOT FS$NOD; !PKW117; 2128 4 END ; 2129 3 ELSE; 2130 3 RETURN error; ; 2131 3 $; 2132 3 [logical_type_device] :5; 2133 3 IF (.dpb_ptr [11] AND FS$DEV) EQLU 0_; 2134 3 THENe; 2135 4 BEGINo; 2136 4 !e t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 721^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25)G; 2137 4 ! A device specification is present - it may be a logical ; 2138 4 ! e; 2139 4 ch$copy (.parse_block [device_len], .parse_block [device_addr], log_hold [0]; log_len);,; 2140 4 parse_block [device_addr] = 0;+; 2141 4 parse_block [device_len] = 0; H; 2142 4 parse_block [flags] = .parse_block [flags] AND NOT FS$DEV;; 2143 4 END1; 2144 3 ELSEP; 2145 3 RETURN error; ; 2146 3 &; 2147 3 [logical_type_filename] :5; 2148 3 IF (.dpb_ptr [11] AND FS$NAM) EQLU 0i; 2149 3 THENm; 2150 4 BEGIN ; 2151 4 ! T; 2152 4 ! A standalone filename specification is present - it may be a logical; 2153 4 ! i; 2154 4 ch$copy (.parse_block [filename_len], .parse_block [filename_addr], log_hold [0]; log_len);_.; 2155 4 parse_block [filename_addr] = 0;-; 2156 4 parse_block [filename_len] = 0;PT; 2157 4 parse_block [flags] = .parse_block [flags] AND NOT (FS$NAM OR FS$WNA);; 2158 4 END ; 2159 3 ELSEA; 2160 3 RETURN error;T ; 2161 3 "; 2162 3 [logical_type_none] :; 2163 3 RETURN error;; 2164 3 TES;p ; 2165 3 /; 2166 3 log_len = .log_len - log_hold [0];h; 2167 3 RETURN success; ; 2168 3 0; 2169 2 END; ! Routine separate_logical .NLIST  .LIST BIN,LOC .LIST .PSECT $OWN$, D LOG.HOLD: .BLKB 377 .EVENLOG.LEN:.BLKW 1a2 .SBTTL SEPARATE.LOGICAL Expand file specification .PSECT $CODE$, RO  .NLIST .ENABL LSB  .LISTSEPARATE.LOGICAL:U JSR R1,$SAVE3 ; 2090  CLR R0 ; 2112n ]];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 73o^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25)$ BISB 44(R4),R0 ; *(PARSE.BLOCK),* ASL R0.# ADD P.AAA(R0),PC ; Case dispatchO,2$: BIT #400,26(R3) ; *,*(DPB.PTR) 2116 BNE 6$ ) MOV 4(R4),R1 ; *(PARSE.BLOCK),* 2122" MOV 6(R4),R2 ; *(PARSE.BLOCK),* MOV #LOG.HOLD,R3 JSR PC,CH$COPYU MOV R3,LOG.LEN % CLR 6(R4) ; *(PARSE.BLOCK) 2123]% CLR 4(R4) ; *(PARSE.BLOCK) 2124-& CLR 42(R4) ; *(PARSE.BLOCK) 2125& CLR 40(R4) ; *(PARSE.BLOCK) 2126+ BIC #400,2(R4) ; *,*(PARSE.BLOCK) 2127E BR 5$ ; 2116'3$: TSTB 26(R3) ; *(DPB.PTR) 2133) BMI 6$R* MOV 10(R4),R1 ; *(PARSE.BLOCK),* 2139# MOV 12(R4),R2 ; *(PARSE.BLOCK),*  MOV #LOG.HOLD,R3V JSR PC,CH$COP00A=igfYA MOV R3,LOG.LEN2& CLR 12(R4) ; *(PARSE.BLOCK) 2140& CLR 10(R4) ; *(PARSE.BLOCK) 2141+ BIC #200,2(R4) ; *,*(PARSE.BLOCK) 2142) BR 5$ ; 2133*4$: BIT #4,26(R3) ; *,*(DPB.PTR) 2148 BNE 6$B* MOV 20(R4),R1 ; *(PARSE.BLOCK),* 2154# MOV 22(R4),R2 ; *(PARSE.BLOCK),*S MOV #LOG.HOLD,R3B JSR PC,CH$COPY6 MOV R3,LOG.LEN & CLR 22(R4) ; *(PARSE.BLOCK) 2155& CLR 20(R4) ; *(PARSE.BLOCK) 2156* BIC #44,2(R4) ; *,*(PARSE.BLOCK) 2157%5$: SUB #LOG.HOLD,LOG.LEN ; 2166, MOV #1,R0 ; 2104 RTS PCB6$: CLR R0 ; 2090 RTS PCR7; Routine Size: 84 words, Routine Base: $CODE$ + 50264.; Maximum stack depth per invocation: 5 words .PSECT $PLIT$, RO , D 6P.AAA: ; CASE Table for SEPARATE.LOGICA+0014 21121$: .WORD 224 ; [6$]M .WORD 136 ; [4$] .WORD 64 ; [3$], .WORD 0 ; [2$] ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 74B^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25) .NLIST .DSABL LSBR .NLIST BIN,LOCe .LIST ; 2170 2 K; 2171 2 terminal_logical_flag = false; ! Init the flag to not terminal h; 2172 2 status = separate_logical ( .dpb_ptr, pri_pb ); ! Strip off the logical in the initial input(; 2173 2 IF .status EQLU success THEN ; 2174 2 !2Q; 2175 2 ! For no more than the maximum interation count, translate and merge,1; 2176 2 ! if possible ; 2177 2 !c; 2178 3 BEGIN11; 2179 3 DECR i FROM iteration_max TO 1 DO; 2180 4 BEGINSI; 2181 4 ! I assume that the status returned will be success, error,l4; 2182 4 ! or the successful status of terminal; 2183 4 !sS; 2184 4 status = find_equivalence (log_hold [0], .log_len; eqv_ptr, eqv_len); (; 2185 4 IF .status EQLU error THENJ; 2186 4 ch$copy (.log_len, log_hold [0], secondary [0]; eqv_ptr); 2187 4 ELSE; 2188 5 BEGINlG; 2189 5 ch$copy (.eqv_len, .eqv_ptr, secondary [0]; eqv_ptr);t/; 2190 5 IF .status EQLU terminal THEN1,; 2191 5 terminal_logical_flag = true;; 2192 4 END;N; 2193 4 fss (secondary [0], .eqv_ptr - secondary [0]; eqv_ptr, eqv_len); ; 2194 4 IF .eqv_len NEQU 0; 2195 4 THEN; 2196 5 BEGIN ; 2197 5 ; 2198 5 !N5; 2199 5 ! Settup the bad string for return.c; 2200 5 !; 2201 5 merge();Q; 2202 5 RETURN pri_pb [fss_status] = bad_char; ! Settup the error code_; 2203 5 ; 2204 4 END;*; 2205 4 IF .status EQLU success THENA; 2206 4 status = separate_logical ( .dpb_ptr, scr_pb );yu; 2207 4 IF (.scr_pb [node_len] NEQU 0) OR (.scr_pb [device_len] NEQU 0) OR (.scr_pb [directory_len] NEQU 0) OR u; 2208 4 (.scr_pb [filename_len] NEQU 0) OR (.scr_pb [type_len] NEQU 0) OR (.scr_pb [version_len] NEQU 0) OR V; 2209 4 (.scr_pb [trailing_len] NEQU 0) OR (.scr_pb [access_len] NEQU 0) THEN; 2210 5 BEGINd!; 2211 5 mstatus = merge(); S; 2212 5 IF .mstatus NEQU success THEN RETURN pri_pb [fss_status] = .mstatus;p; 2213 4 END;:; 2214 4 IF .status NEQU success THEN RETURN success;; 2215 3 END; ; 2216 3 !  r];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 75n^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25)V; 2217 3 ! If we got here, then the number of iterations exceeded iteration_max; 2218 3 !2O; 2219 3 RETURN pri_pb [fss_status] = bad_recursive; ! Return error code ; 2220 3 END; 2221 2 ELSE; 2222 2 RETURN success;u; 2223 1 END; .NLISTD .LIST BIN,LOC .LIST1 .SBTTL EXPAND.FILESPEC Expand file specification: .PSECT $CODE$, RO  .NLIST .ENABL LSBX .LISTEXPAND.FILESPEC: JSR R1,$SAVE5 ; 2031[ SUB #14,SPR MOV R3,12(SP)& CLR TERMINAL.LOGICAL.FLAG ; 2100AEi;icDATADATADATADATADATADATADATA71 MOV #PRI.PB,R4 ; 2172 JSR PC,SEPARATE.LOGICAL MOV R0,10(SP) ; *,STATUS9 CMP R0,#1 ; STATUS,* 2173 BNE 9$c MOV #12,6(SP) ; *,I 2179 !1$: MOV #LOG.HOLD,R1 ; 2184 MOV LOG.LEN,R2E JSR PC,FIND.EQUIVALENCE MOV R0,10(SP) ; *,STATUSL MOV R1,2(SP). MOV R2,(SP) TST R0 ; STATUS 2185t BNE 2$S MOV LOG.LEN,R1 ; 2186 MOV #LOG.HOLD,R2T MOV #SECONDARY,R3 JSR PC,CH$COPY; MOV R3,2(SP)B BR 3$ ; 2185&2$: MOV (SP),R1 ; EQV.LEN,* 2189 MOV 2(SP),R2 ; EQV.PTR,*1 MOV #SECONDARY,R3 JSR PC,CH$COPY, MOV R3,2(SP)A# CMP 10(SP),#3 ; STATUS,* 21903 BNE 3$c( MOV #1,TERMINAL.LOGICAL.FLAG ; 2191&3$: MOV 2(SP),R1 ; EQV.PTR,* 2193 SUB #SECONDARY,R1 MOV #SECONDARY,R4 MOV R1,R5 S];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 76 ^;X1.10 Expand file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (25) JSR PC,FSS MOV R4,2(SP); MOV R5,(SP) BEQ 4$ ; 2194  JSR PC,MERGE ; 2201 MOV #-3440,R0 ; 2202, BR 8$&4$: CMP 10(SP),#1 ; STATUS,* 2205 BNE 5$M MOV 12(SP),R3 ; 2206  MOV #SCR.PB,R4  JSR PC,SEPARATE.LOGICAL MOV R0,10(SP) ; *,STATUSV5$: TST SCR.PB+4 ; 2207 BNE 6$o TST SCR.PB+10 BNE 6$  TST SCR.PB+14 BNE 6$1 TST SCR.PB+20 ; 22087 BNE 6$0 TST SCR.PB+24 BNE 6$o TST SCR.PB+30 BNE 6$[ TST SCR.PB+34 ; 22090 BNE 6$ TST SCR.PB+40 BEQ 7$P6$: JSR PC,MERGE ; 2211  MOV R0,4(SP) ; *,MSTATUS ! CMP R0,#1 ; MSTATUS,* 2212, BNE 8$&7$: CMP 10(SP),#1 ; STATUS,* 2214 BNE 9$ DEC 6(SP) ; I 2179 BNE 1$C MOV #-3230,R0 ; 2219G8$: MOV R0,PRI.PB) BR 10$ ; 2222 9$: MOV #1,R0 10$: ADD #14,SP ; 20310 RTS PC 8; Routine Size: 138 words, Routine Base: $CODE$ + 5276/; Maximum stack depth per invocation: 13 words .NLIST .DSABL LSB4 .NLIST BIN,LOCB .LIST ; 2224 1 Q P];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 771^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26).; 2225 1 %SBTTL 'Merge file specifications'; 2226 1 GLOBAL_FOR_DEBUG; 2227 1 ROUTINE merge =S ; 2228 1 ; 2229 1 !++ ; 2230 1 !1%; 2231 1 ! FUNCTIONAL DESCRIPTION: ; 2232 1 ! L; 2233 1 ! Merge the primary and secondary file specifications. For eachN; 2234 1 ! component of the file specification, copy the piece found in theL; 2235 1 ! primary if present, or copy the piece from the secondary. TheL; 2236 1 ! result is put in merged. At the end the primary string is theE; 2237 1 ! merged result and the primary parse block is filled in.2 ; 2238 1 !eM; 2239 1 ! The handling of a file specification containing a quoted stringLP; 2240 1 ! is slightly different. A quoted string name in the primary stringS; 2241 1 ! inhibits the inclusion of both the filename and type, and the versionh(; 2242 1 ! if a node name is present. ; 2243 1 !r; 2244 1 ! IMPLICIT INPUTS: ; 2245 1 !2'; 2246 1 ! Buffers and parse blocks.e ; 2247 1 !s; 2248 1 ! IMPLICIT OUTPUTS:d ; 2249 1 ! 1; 2250 1 ! The primary parse block is updated. ; 2251 1 !h; 2252 1 !--i ; 2253 1 ; 2254 2 BEGINt ; 2255 2 ; 2256 2 !sR; 2257 2 ! A node spec followed by a quoted string with nothing else should notT; 2258 2 ! have anything merged into it other than a node name on the local node. ; 2259 2 !so; 2260 3 IF ((.pri_pb [flags] AND (FS$VER OR FS$TYP OR FS$NAM OR FS$DIR OR FS$DEV OR FS$NOD OR FS$QUO)) EQLU 7; 2261 3 (FS$NOD OR FS$QUO OR FS$NAM OR FS$TYP)) ; 2262 3 ; 2263 2 OR ; 2264 2 ; 2265 2 !2N; 2266 2 ! If the primary string has has anything other than a node and theN; 2267 2 ! secondary string is a node name followed by a quoted string thenN; 2268 2 ! everything in the secondary string except for the 00AMigfnode should be; 2269 2 ! gotten rid of. ; 2270 2 !0 ; 2271 2 c; 2272 2 ((.pri_pb [flags] AND (FS$DIR OR FS$NAM OR FS$TYP OR FS$VER OR FS$QUO)) NEQU 0) AND m; 2273 3 ((.scr_pb [flags] AND (FS$VER OR FS$TYP OR FS$NAM OR FS$DIR OR FS$DEV OR FS$NOD OR FS$QUO)) EQLU8; 2274 3 (FS$NOD OR FS$QUO OR FS$NAM OR FS$TYP)); 2275 2 THEN; 2276 3 BEGINd); 2277 3 scr_pb [device_addr] = 0;t(; 2278 3 scr_pb [device_len] = 0; h];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 78^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26),; 2279 3 scr_pb [directory_addr] = 0;+; 2280 3 scr_pb [directory_len] = 0;O+; 2281 3 scr_pb [filename_addr] = 0;4*; 2282 3 scr_pb [filename_len] = 0;'; 2283 3 scr_pb [type_addr] = 0;E&; 2284 3 scr_pb [type_len] = 0;*; 2285 3 scr_pb [version_addr] = 0;); 2286 3 scr_pb [version_len] = 0; @; 2287 3 IF .scr_pb [logical_type] NEQU logical_type_node; 2288 3 THEN7; 2289 3 scr_pb [logical_type] = logical_type_none;.; 2290 2 END; ; 2291 2 ; 2292 2 !dP; 2293 2 ! Copy the lengths and pointers into the primary parse block for allS; 2294 2 ! parts of the file specification to be used. In the process, form thebP; 2295 2 ! updated status mask. We are only going to set bits in the status. ; 2296 2 ! (; 2297 2 IF .pri_pb [node_len] EQLU 0; 2298 2 THEN ; 2299 2 B; 2300 2 IF (pri_pb [node_len] = .scr_pb [node_len]) NEQU 0; 2301 2 THEN; 2302 3 BEGIN8; 2303 3 pri_pb [flags] = .pri_pb [flags] OR FS$NOD;6; 2304 3 pri_pb [node_addr] = .scr_pb [node_addr];8; 2305 3 pri_pb [access_len] = .scr_pb [access_len];:; 2306 3 pri_pb [access_addr] = .scr_pb [access_addr];; 2307 2 END;e ; 2308 2 *; 2309 2 IF .pri_pb [device_len] EQLU 0; 2310 2 THEN ; 2311 2 F; 2312 2 IF (pri_pb [device_len] = .scr_pb [device_len]) NEQU 0; 2313 2 THEN; 2314 3 BEGIN8; 2315 3 pri_pb [flags] = .pri_pb [flags] OR FS$DEV;:; 2316 3 pri_pb [device_addr] = .scr_pb [device_addr];; 2317 2 END;n ; 2318 2 -; 2319 2 IF .pri_pb [directory_len] EQLU 0_; 2320 2 THEN ; 2321 2 L; 2322 2 IF (pri_pb [directory_len] = .scr_pb [directory_len]) NEQU 0; 2323 2 THEN; 2324 3 BEGINZ; 2325 3 pri_pb [flags] = .pri_pb [flags] OR (.scr_pb [flags] AND (FS$DIR OR FS$WDI));@; 2326 3 pri_pb [directory_addr] = .scr_pb [directory_addr];; 2327 2 END;i ; 2328 2 G; 2329 2 IF ((.pri_pb [flags] OR .scr_pb [flags]) AND FS$QUO) EQLU 0d; 2330 2 THEN; 2331 3 BEGIN8 ; 2332 3  ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 79[^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26); 2333 3 !s?; 2334 3 ! Here because neither string contains a quotedC; 2335 3 ! filespec. Handle the filename, type, and version #; 2336 3 ! in the usual way.9; 2337 3 !l0; 2338 3 IF .pri_pb [filename_len] EQLU 0; 2339 3 THEN ; 2340 3 G; 2341 3 IF (pri_pb [filename_len] = .scr_pb [filename_len]) NEQU 01; 2342 3 THEN4; 2343 4 BEGIN^; 2344 4 pri_pb [flags] = .pri_pb [flags] OR (.scr_pb [flags] AND (FS$NAM OR FS$WNA));B; 2345 4 pri_pb [filename_addr] = .scr_pb [filename_addr];; 2346 3 END;3 ; 2347 3 ,; 2348 3 IF .pri_pb [type_len] EQLU 0; 2349 3 THEN ; 2350 3 ?; 2351 3 IF (pri_pb [type_len] = .scr_pb [type_len]) NEQU 0n; 2352 3 THEN ; 2353 4 BEGIN^; 2354 4 pri_pb [flags] = .pri_pb [flags] OR (.scr_pb [flags] AND (FS$TYP OR FS$WTY));:; 2355 4 pri_pb [type_addr] = .scr_pb [type_addr];; 2356 3 END;p ; 2357 3 /; 2358 3 IF .pri_pb [version_len] EQLU 0l; 2359 3 THEN ; 2360 3 E; 00AUi;icDATADATADATADATADATADATADATA 2361 3 IF (pri_pb [version_len] = .scr_pb [version_len]) NEQU 0y; 2362 3 THEN ; 2363 4 BEGIN^; 2364 4 pri_pb [flags] = .pri_pb [flags] OR (.scr_pb [flags] AND (FS$VER OR FS$WVE));@; 2365 4 pri_pb [version_addr] = .scr_pb [version_addr];; 2366 3 END;s ; 2367 3 ; 2368 3 END5; 2369 2 ELSE; 2370 3 BEGINp ; 2371 3 ; 2372 3 !S; 2373 3 ! We are here because one or the other (or both) of the primary andP; 2374 3 ! secondary strings contain a quoted file specification. If theS; 2375 3 ! primary string contains either a filename or type then don't copyiA; 2376 3 ! either the filename or type from the secondary. R; 2377 3 ! If addition, if the primary includes a node name and the primaryX; 2378 3 ! has a filename, then don't copy the version number from the secondary.; 2379 3 ! N; 2380 3 IF .pri_pb [filename_len] EQLU 0 AND .pri_pb [type_len] EQLU 0; 2381 3 THEN; 2382 4 BEGIN ; 2383 4 ; 2384 4 !E; 2385 4 ! We are here because the primary string has no filenamemF; 2386 4 ! or type and the secondary string has a quoted filename. r];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 80p^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26)E; 2387 4 ! In this case the merged string will contain the quotedD+; 2388 4 ! filespec from the secondary.H; 2389 4 !L; 2390 4 pri_pb [flags] = .pri_pb [flags] OR FS$NAM OR FS$QUO OR FS$TYP;<; 2391 4 pri_pb [filename_len] = .scr_pb [filename_len];>; 2392 4 pri_pb [filename_addr] = .scr_pb [filename_addr];; 2393 3 END;- ; 2394 3 ; 2395 3 ! K; 2396 3 ! If the primary string has no version the version from the:E; 2397 3 ! secondary string will be merged in if there is one. ; 2398 3 !iM; 2399 3 IF .pri_pb [node_len] EQLU 0 AND .pri_pb [version_len] EQLU 0 ; 2400 3 THENE; 2401 3 IF (pri_pb [version_len] = .scr_pb [version_len]) NEQU 0 ; 2402 3 THEN_; 2403 4 BEGIN^; 2404 4 pri_pb [flags] = .pri_pb [flags] OR (.scr_pb [flags] AND (FS$VER OR FS$WVE));@; 2405 4 pri_pb [version_addr] = .scr_pb [version_addr];; 2406 3 END;v ; 2407 3 ; 2408 2 END; ; 2409 2 ; 2410 3 BEGINn ; 2411 3 ; 2412 3 ! @; 2413 3 ! Copy each of the substrings into the output bufferA; 2414 3 ! and update the pointers to point to the new buffer.p ; 2415 3 ! ; 2416 3 LOCALlI; 2417 3 pri_pb_p : REF VECTOR, ! Pointer to primary parse blockp*; 2418 3 status, ! Merge status; 2419 3 current_len,; 2420 3 total_len,; 2421 3 temp;b ; 2422 3 ; 2423 3 REGISTER; 2424 3 o_ptr; ; 2425 3 ; 2426 3 total_len = 0;; 2427 3 status = 1; &; 2428 3 pri_pb [trailing_len] = 0;'; 2429 3 pri_pb [trailing_addr] = 0; +; 2430 3 pri_pb_p = pri_pb [fss_status];t; 2431 3 o_ptr = merged [0]; ; 2432 3 ); 2433 3 INCRU i FROM 0 TO 5*2 BY 2 DOO; 2434 4 BEGINrB; 2435 4 current_len = .pri_pb_p [.i + 2]; ! Get the length6; 2436 4 total_len = .total_len + .current_len; ; 2437 4 1; 2438 4 IF .total_len GTRU file_spec_size ; 2439 4 THEN; 2440 5 BEGIN e];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 81r^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26) ; 2441 5 ; 2442 5 !G; 2443 5 ! Copy as much as will fit, then update the parse block torH; 2444 5 ! reflect the actual amount returned. I'm not sure if thisB; 2445 5 ! exactly the best way of dealing with the problem...;; 2446 5 ! How do you determine the real length needed? C; 2447 5 ! Here's how.... We will initialize the length of theAG; 2448 5 ! trailing string to 0 and on completion st00A]igfore the address B; 2449 5 ! of the next character following. This will make itC; 2450 5 ! easy to determine the length of the expanded string; G; 2451 5 ! just subtract the buffer beginning from [trailing_addr].rE; 2452 5 ! For the cases where the buffer overflows, we'll updateiB; 2453 5 ! the length to include the amount that wouldn't fit.; 2454 5 !c; 2455 5 pri_pb [trailing_addr] = merged [0] + file_spec_size; ! Get address of one past bufferg_; 2456 5 pri_pb [trailing_len] = .total_len - file_spec_size; ! Set to the amount attempted ; 2457 5 a; 2458 5 IF (current_len = .current_len - .pri_pb [trailing_len]) LSS 0 THEN current_len = 0;t ; 2459 5 (; 2460 5 ! Can't be less than 07; 2461 5 status = bad_size; ! Set eventual statusi; 2462 4 END;e ; 2463 4 ; 2464 5 BEGINu ; 2465 5 ; 2466 5 LOCAL ; 2467 5 i_ptr;d ; 2468 5 B; 2469 5 i_ptr = .pri_pb_p [.i + 2 + 1]; ! Get the addressZ; 2470 5 IF .i_ptr NEQA 0 THEN pri_pb_p [.i + 2 + 1] = .o_ptr; ! Update the addressG; 2471 5 ch$move (.current_len, i_ptr, o_ptr); ! Move the stringe; 2472 4 END; ; 2473 4 ; 2474 3 END; ! INCR ; 2475 3 ; 2476 3 !1Q; 2477 3 ! If the trailing length is non zero leave the trailing address aloneT; 2478 3 ! because it has been settup by an overflow condition. Otherwise settup#; 2479 3 ! the trailing address.p ; 2480 3 ! c; 2481 3 IF .pri_pb [trailing_len] EQLU 0 THEN pri_pb [trailing_addr] = merged [0] + .total_len;a ; 2482 3 ; 2483 3 ! ;; 2484 3 ! Settup the access control string information. ; 2485 3 !N*; 2486 3 IF .pri_pb [access_len] NEQU 0; 2487 3 THENk; 2488 3 pri_pb [access_addr] = .pri_pb [node_addr] + .pri_pb [node_len] - .pri_pb [access_len] - 2;8 ; 2489 3 ; 2490 3 !tC; 2491 3 ! Update the logical type. Make it the max of the two.i ; 2492 3 !Z; 2493 3 pri_pb [logical_type] = maxu (.pri_pb [logical_type], .scr_pb [logical_type]);*; 2494 3 pri_pb [fss_status] = .status; 3];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 82 ^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26)E; 2495 3 temp = merged [0]; ! Switch primary and merged buffers9!; 2496 3 merged = primary [0]; ; 2497 3 primary = .temp;; 2498 3 RETURN .status; ; 2499 2 END;; 2500 1 END; .NLIST  .LIST BIN,LOC .LIST' .SBTTL MERGE Merge file specifications  .NLIST[ .ENABL LSB  .LIST!MERGE: JSR R1,$SAVE5 ; 2227e CMP -(SP),-(SP) MOV PRI.PB+2,R0 ; 22602 BIC #175070,R0X CMP R0,#2406e BEQ 1$a BIT #2107,PRI.PB+2 ; 2272 BEQ 2$R MOV SCR.PB+2,R0 ; 22734 BIC #175070,R0e CMP R0,#2406t BNE 2$y1$: CLR SCR.PB+12 ; 2277 CLR SCR.PB+10 ; 2278  CLR SCR.PB+16 ; 2279  CLR SCR.PB+14 ; 2280  CLR SCR.PB+22 ; 2281; CLR SCR.PB+20 ; 2282. CLR SCR.PB+26 ; 2283i CLR SCR.PB+24 ; 2284 CLR SCR.PB+32 ; 2285J CLR SCR.PB+30 ; 2286C CMPB SCR.PB+44,#3 ; 2287  BEQ 2$6 CLRB SCR.PB+44 ; 22892$: TST PRI.PB+4 ; 2297I BNE 3$ " MOV SCR.PB+4,PRI.PB+4 ; 2300 BEQ 3$2 BIS #400,PRI.PB+2 ; 23032" MOV SCR.PB+6,PRI.PB+6 ; 2304$ MOV SCR.PB+40,PRI.PB+40 ; 2305$ MOV SCR.PB+42,PRI.PB+42 ; 23063$: TST PRI.PB+10 ; 2309 BNE 4$ $ MOV SCR.PB+10,PRI.PB+10 ; 2312 BEQ 4$R BIS #200,PRI.PB+2 ; 2315R$ MOV SCR.PB+12,PRI.PB+12 ; 23164$: TST PRI.PB+14 ; 2319 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 83B^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26) BNE 5$$ MOV SCR.PB+14,PRI.PB+14 ; 2322 BEQ 5$+ MOV SCR.PB+2,R0 ; 2325S BIC #176677,R02 BIS R0,PRI.PB+2$ MOV SCR.PB+16,PRI.PB+16 ; 2326!5$: MOV PRI.PB+20,R0 ; 23300Aei;icDATADATADATADATADATADATADATA82 MOV PRI.PB+2,R1 ; 2329  BIS SCR.PB+2,R1 BIT #2000,R1P BNE 7$  TST R0 ; 23381 BNE 6$ $ MOV SCR.PB+20,PRI.PB+20 ; 2341 BEQ 6$- MOV SCR.PB+2,R0 ; 23441 BIC #177733,R0g BIS R0,PRI.PB+2$ MOV SCR.PB+22,PRI.PB+22 ; 23456$: TST PRI.PB+24 ; 2348 BNE 9$ $ MOV SCR.PB+24,PRI.PB+24 ; 2351 BEQ 9$  MOV SCR.PB+2,R0 ; 2354, BIC #177755,R0 BIS R0,PRI.PB+2$ MOV SCR.PB+26,PRI.PB+26 ; 2355 BR 9$ ; 23587$: TST R0 ; 2380 BNE 8$V TST PRI.PB+24 BNE 8$ BIS #2006,PRI.PB+2 ; 2390$ MOV SCR.PB+20,PRI.PB+20 ; 2391$ MOV SCR.PB+22,PRI.PB+22 ; 23928$: TST PRI.PB+4 ; 2399, BNE 10$9$: TST PRI.PB+303 BNE 10$$ MOV SCR.PB+30,PRI.PB+30 ; 2401 BEQ 10$ MOV SCR.PB+2,R0 ; 24043 BIC #177766,R0V BIS R0,PRI.PB+2$ MOV SCR.PB+32,PRI.PB+32 ; 2405"10$: CLR R4 ; TOTAL.LEN 2426" MOV #1,(SP) ; *,STATUS 2427 CLR PRI.PB+34 ; 2428  CLR PRI.PB+36 ; 2429 ) MOV #PRI.PB,2(SP) ; *,PRI.PB.P 2430 " MOV MERGED,R0 ; *,O.PTR 2431 CLR R5 ; I 2433 11$: MOV R5,R1 ; I,* 2435 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 84+^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26) ASL R1V ADD 2(SP),R1 ; PRI.PB.P,* MOV 4(R1),R3 ; *,CURRENT.LEN , ADD R3,R4 ; CURRENT.LEN,TOTAL.LEN 2436% CMP R4,#377 ; TOTAL.LEN,* 24386 BLOS 13$2! MOV MERGED,PRI.PB+36 ; 2455. ADD #377,PRI.PB+36E) MOV R4,PRI.PB+34 ; TOTAL.LEN,* 2456  SUB #377,PRI.PB+341+ SUB PRI.PB+34,R3 ; *,CURRENT.LEN 2458D BPL 12$ CLR R3 ; CURRENT.LEN)12$: MOV #-1414,(SP) ; *,STATUS 24610 13$: MOV R5,R1 ; I,* 2469 ASL R14 ADD 2(SP),R1 ; PRI.PB.P,* MOV 6(R1),R2 ; *,I.PTR BEQ 14$ ; 2470 MOV R0,6(R1) ; O.PTR,*U$14$: TST R3 ; CURRENT.LEN 2471 BEQ 16$ MOV R3,R1 ; CURRENT.LEN,IA BLE 16$%15$: MOVB (R2)+,(R0)+ ; I.PTR,O.PTR3 SOB R1,15$ ; I,* 16$: ADD #2,R5 ; *,I 2433 CMP R5,#12 ; I,* BLOS 11$7 TST PRI.PB+34 ; 2481R BNE 17$! MOV R4,PRI.PB+36 ; TOTAL.LEN,*R ADD MERGED,PRI.PB+36:"17$: MOV PRI.PB+40,R1 ; 2486 BEQ 18$ MOV PRI.PB+6,R2 ; 2488L ADD PRI.PB+4,R2 SUB R1,R2 MOV R2,PRI.PB+42  SUB #2,PRI.PB+42118$: CLR R1 ; 2493( BISB PRI.PB+44,R1 CLR R0  BISB SCR.PB+44,R0 CMP R1,R0 BHIS 19$, CLR R1U BISB SCR.PB+44,R119$: MOVB R1,PRI.PB+44% MOV (SP),PRI.PB ; STATUS,* 2494*! MOV MERGED,R1 ; *,TEMP 2495 MOV PRIMARY,MERGED ; 2496" MOV R1,PRIMARY ; TEMP,* 2497" MOV (SP)+,R0 ; STATUS,* 2254 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 852^;X1.10 Merge file specifications 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (26) TST (SP)+ ; 2227 RTS PC8; Routine Size: 275 words, Routine Base: $CODE$ + 5722.; Maximum stack depth per invocation: 9 words .NLIST; .DSABL LSB2 .NLIST BIN,LOC, .LIST ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 86 ];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (27)4-; 2501 1 %SBTTL 'Parse file specification'a; 2502 1 GLOBAL_FOR_DEBUGA; 2503 1 ROUTINE fss (ptr_p, len_p; ptr, len) : fss_l NOVALUE=R ; 2504 1 ; 2505 1 !++w ; 2506 1 !a%; 2507 1 ! FUNCTIONAL DESCRIPTION:t ; 2508 1 !nM; 2509 1 ! Scan the input string for a valid file specification. On exit,oN; 2510 1 ! either it has scanned the entire string, the scan was terminatedJ; 2511 1 ! by something that may or may not be a valid terminator, or a*; 2512 1 ! syntax error was discovered. ; 2513 1 !sO; 2514 1 ! Spaces are not allowed in the file specification for two reasons;_P; 2515 1 ! any reasonable external use for this routine will be in a DCL likeO; 2516 1 ! command language or similar where spaces a00Amigfre parameter delimiterstO; 2517 1 ! or it is being used to perform a parse merge. In this case, somecO; 2518 1 ! preprocessing has almost certainly been done; in the case of this 5; 2519 1 ! module, the string has been compressed. ; 2520 1 !w ; 2521 1 ! FORMAL PARAMETERS: ; 2522 1 !c; 2523 1 ! ptr_p *; 2524 1 ! address of the input string ; 2525 1 ! ; 2526 1 ! len_ps#; 2527 1 ! length of the stringi ; 2528 1 ! ; 2529 1 ! IMPLICIT OUTPUTS:r ; 2530 1 !r3; 2531 1 ! The scratch parse block is filled in. ; 2532 1 !r; 2533 1 !--s ; 2534 1 ; 2535 2 BEGINo ; 2536 2 ; 2537 2 MACRO ; 2538 2 ; 2539 2 !5O; 2540 2 ! NEXT_CHAR sets the next character and returns true if successO; 2541 2 ! ; M 2542 2 next_char =t; M 2543 2 BEGIN); M 2544 2 char = .(.ptr)<0, 8, 1>; ; M 2545 2 ptr = .ptr + 1;#; M 2546 2 .ptr LEQA .end_ptr ; 2547 2 END %;O ; 2548 2 ; 2549 2 REGISTER4; 2550 2 char; ! Character being examined ; 2551 2 ; 2552 2 LOCAL ,; 2553 2 status, ! Routine statusQ; 2554 2 backup_ptr, ! Restart point if current state fails to transitn ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 875];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (27)3; 2555 2 end_ptr; ! End of input pointerE ; 2556 2 ; 2557 2 LABEL ; 2558 2 main_scan,; 2559 2 filename_scan,; 2560 2 node_scan; ; 2561 2 B; 2562 2 save_parse (scr_pb); ! Init the scratch parse block; 2563 2 ptr = .ptr_p;r$; 2564 2 end_ptr = .ptr + .len_p; ; 2565 2 ; 2566 2 main_scan :9; 2567 3 BEGINB s];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 88S];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (28) ; 2568 3 node_scan :55; 2569 4 BEGIN ! Process a node specification ; 2570 4 ; 2571 4 ! -; 2572 4 ! Process all node specifications ; 2573 4 !hR; 2574 4 ! No errors are returned by this section. We don't really have enoughM; 2575 4 ! information, with the possible exception of unterminated accesseJ; 2576 4 ! control string. We'll pick that up later as a bad filename. ; 2577 4 !iP; 2578 4 ! While the node specification will include all node specifications,Q; 2579 4 ! the access control string will only include the first quoted string O; 2580 4 ! plus colons, or if no access control, just the colons. This will5Q; 2581 4 ! be used to merge any node logical name translation, which of coursev;; 2582 4 ! is only performed on the first specification.i ; 2583 4 !t; 2584 4 LOCAL6; 2585 4 node_count;p ; 2586 4 ; 2587 4 node_count = 0;5; 2588 4 backup_ptr = .ptr; ; 2589 4 ; 2590 4 WHILE 1 DO; 2591 5 BEGIN ; 2592 5 ; 2593 5 LOCAL ; 2594 5 access_ptr; ; 2595 5 ; 2596 5 !lM; 2597 5 ! If there are no more characters backup to the start of this M; 2598 5 ! substring and exit this loop; its not a node specification. ; 2599 5 !e"; 2600 5 access_ptr = .ptr; ; 2601 5 ; 2602 6 IF NOT next_char; 2603 5 THEN; 2604 6 BEGIN; 2605 6 ptr = .backup_ptr;p; 2606 6 EXITLOOP;; 2607 5 END;L ; 2608 5 <; 2609 5 CASE ch$classify (.char) FROM 0 TO ch_max OF; 2610 5 SET ; 2611 5 J; 2612 5 [ch_alpha, ch_dollar, ch_under, ch_lower, ch_oct, ch_8and9] : ; 2613 5 ; 2614 5 !O; 2615 5 ! The character is valid in a node name, do the next character ; 2616 5 !; 2617 5 ; ; 2618 5 ; 2619 5 [ch_colon] :F ; 2620 5 ; 2621 5 ! ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 89L];X1.10 Parse file specificati00Aui;icDATADATADATADATADATADATADATAon 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (28)G; 2622 5 ! A node specification is terminated by double colons;,7; 2623 5 ! is the next character also a colon ? ; 2624 5 !; 2625 6 BEGIN ; 2626 6 !; 2627 7 IF NOT next_char ; 2628 6 THEN ; 2629 7 BEGINc ; 2630 7 ptr = .backup_ptr;; 2631 7 EXITLOOP;i; 2632 6 END; ; 2633 6 $; 2634 6 IF .char NEQU %C':'; 2635 6 THENs; 2636 7 BEGIN ; 2637 7 ptr = .backup_ptr;; 2638 7 EXITLOOP;; 2639 6 END; ; 2640 6 ; 2641 6 !K; 2642 6 ! We have parsed a node specification; save this knowledge P; 2643 6 ! but let's not get carried away and lose the knowledge we haveT; 2644 6 ! about the first one we found if poor man's routing is being used.; 2645 6 !&; 2646 6 IF .node_count EQLU 0; 2647 6 THEN ; 2648 7 BEGIN'/; 2649 7 scr_pb [node_addr] = .backup_ptr; 5; 2650 7 scr_pb [node_len] = .ptr - .backup_ptr;1; 2651 7 scr_pb [access_addr] = .access_ptr; ;; 2652 7 scr_pb [access_len] = .ptr - .access_ptr - 2;a9; 2653 7 scr_pb [flags] = .scr_pb [flags] OR FS$NOD;r8; 2654 7 scr_pb [logical_type] = logical_type_node;; 2655 7 ENDo; 2656 6 ELSE'=; 2657 6 scr_pb [node_len] = .ptr - .scr_pb [node_addr];I ; 2658 6 #; 2659 6 backup_ptr = .ptr;6.; 2660 6 node_count = .node_count + 1;; 2661 5 END;6 ; 2662 5 ; 2663 5 [ch_quote] :p ; 2664 5 ; 2665 5 !A; 2666 5 ! Must be the start of an access control string.-; 2667 5 !; 2668 6 BEGIN ; 2669 6 ; 2670 6 LOCAL; 2671 6 state; ; 2672 6 <; 2673 6 ptr = .ptr - 1; ! backup pointer to quoteM; 2674 6 access_ptr = .ptr; ! Save address of access control string ; 2675 6  b];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 90 ];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (28) ; 2676 6 !?; 2677 6 ! Can't be a node specification if null string; 2678 6 !8; 2679 6 IF .ptr EQLU .backup_ptr THEN EXITLOOP; ; 2680 6 :; 2681 6 state = 0; ! Initial state is unquoted ; 2682 6 ; 2683 6 WHILE 1 DOe; 2684 7 BEGIN ; 2685 7 ; 2686 7 ! C; 2687 7 ! Get the next character. If none then exit this loopP*; 2688 7 ! and determine quote level.; 2689 7 !8; 2690 8 IF NOT next_char; 2691 7 THEN; 2692 8 BEGIN ; 2693 8 ; 2694 8 !nM; 2695 8 ! If we ran out of input, then its not a node specification ; 2696 8 !6$; 2697 8 ptr = .backup_ptr;"; 2698 8 LEAVE node_scan;; 2699 7 END; ; 2700 7 !; 2701 7 IF .char EQLU %C'"'; 2702 7 THEN$; 2703 7 state = NOT .state; 2704 7 ELSE ; 2705 7 1; 2706 7 IF .state EQLU 0 THEN EXITLOOP; ; 2707 7 ; 2708 6 END; ; 2709 6 ; 2710 6 !P; 2711 6 ! The access control string must be terminated by double colons; 2712 6 !$; 2713 6 IF .char NEQU %C':'; 2714 6 THEN ; 2715 7 BEGIN_ ; 2716 7 ptr = .backup_ptr;; 2717 7 EXITLOOP; ; 2718 6 END; ; 2719 6 !; 2720 7 IF NOT next_char ; 2721 6 THEN ; 2722 7 BEGIN ; 2723 7 ptr = .backup_ptr;; 2724 7 EXITLOOP; ; 2725 6 END; ; 2726 6 $; 2727 6 IF .char NEQU %C':'; 2728 6 THEN ; 2729 7 BEGINc ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 91a];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (28) ; 2730 7 ptr = .backup_ptr;; 2731 7 EXITLOOP; ; 2732 6 END; ; 2733 6 ; 2734 6 !K; 2735 6 ! We have par00A}igfsed a node specification; save this knowledgeOP; 2736 6 ! but let's not get carried away and lose the knowledge we haveT; 2737 6 ! about the first one we found if poor man's routing is being used.; 2738 6 !&; 2739 6 IF .node_count EQLU 0; 2740 6 THENa; 2741 7 BEGIN:/; 2742 7 scr_pb [node_addr] = .backup_ptr; 5; 2743 7 scr_pb [node_len] = .ptr - .backup_ptr; 1; 2744 7 scr_pb [access_addr] = .access_ptr; ;; 2745 7 scr_pb [access_len] = .ptr - .access_ptr - 2;a9; 2746 7 scr_pb [flags] = .scr_pb [flags] OR FS$NOD;r8; 2747 7 scr_pb [logical_type] = logical_type_node;; 2748 7 ENDo; 2749 6 ELSE'=; 2750 6 scr_pb [node_len] = .ptr - .scr_pb [node_addr];I ; 2751 6 #; 2752 6 backup_ptr = .ptr;7.; 2753 6 node_count = .node_count + 1;8; 2754 5 END; ! Process access control string ; 2755 5 ; 2756 5 [INRANGE] : ; 2757 5 ; 2758 5 !I; 2759 5 ! Either an invalid character has been encountered or webI; 2760 5 ! aren't processing a node specification. Backup to the >; 2761 5 ! beginning of the string and exit this loop.; 2762 5 !; 2763 6 BEGIN#; 2764 6 ptr = .backup_ptr; ; 2765 6 EXITLOOP;; 2766 5 END; ; 2767 5 TES;_ ; 2768 5 ; 2769 4 END; ; 2770 4 4; 2771 3 END; ! Process a node specification7; 2772 4 BEGIN ! Process a device specification! t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 92d];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (29). ; 2773 4 ! Y; 2774 4 ! Attempt to process a device specification. The next character has not been;<; 2775 4 ! fetched at the beginning nor end of the block. ; 2776 4 !NW; 2777 4 ! No errors are detected in this scan. If we don't find what we're looking W; 2778 4 ! for, its most likely because we're not looking at a device specification.6T; 2779 4 ! If we don't like what we see, we just backup to the start and go on to; 2780 4 ! the next section.D ; 2781 4 !5; 2782 4 backup_ptr = .ptr; ; 2783 4 ; 2784 4 WHILE 1 DO; 2785 5 BEGINt ; 2786 5 ; 2787 5 !5M; 2788 5 ! If there are no more characters backup to the start of this /; 2789 5 ! substring and exit this loop.o; 2790 5 ! ; 2791 6 IF NOT next_char; 2792 5 THEN; 2793 6 BEGIN; 2794 6 ptr = .backup_ptr; ; 2795 6 EXITLOOP;; 2796 5 END;a ; 2797 5 <; 2798 5 CASE ch$classify (.char) FROM 0 TO ch_max OF; 2799 5 SET ; 2800 5 J; 2801 5 [ch_alpha, ch_dollar, ch_under, ch_lower, ch_oct, ch_8and9] : ; 2802 5 ; 2803 5 !Q; 2804 5 ! The character is valid in a device name, do the next character ; 2805 5 !; 2806 5 ; ; 2807 5 ; 2808 5 [ch_colon] :N ; 2809 5 ; 2810 5 !E; 2811 5 ! This is the terminating character of a device nameI; 2812 5 !; 2813 6 BEGIN ; 2814 6 -; 2815 6 IF .ptr - .backup_ptr GTRU 1 ; 2816 6 THEN0; 2817 7 BEGINh ; 2818 7 ; 2819 7 !_K; 2820 7 ! We've got a valid device specification, save this knowledge ; 2821 7 !i1; 2822 7 scr_pb [device_addr] = .backup_ptr; 7; 2823 7 scr_pb [device_len] = .ptr - .backup_ptr; 9; 2824 7 scr_pb [flags] = .scr_pb [flags] OR FS$DEV;1 ; 2825 7 >; 2826 7 IF .scr_pb [logical_type] eqlu logical_type_none !];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 936];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (29) ; 2827 7 then>; 2828 7 scr_pb [logical_type] = logical_type_device; ; 2829 7 ; 2830 7 END ; 2831 6 ELSE[ ; 2832 6 ; 2833 6 !r=; 2834 6 ! Not long enough, backup and le00Ai;icDATADATADATADATADATADATADATAt it fail later; 2835 6 ! ; 2836 6 ptr = .backup_ptr; ; 2837 6 ; 2838 6 EXITLOOP;; 2839 5 END; ; 2840 5 ; 2841 5 [INRANGE] : ; 2842 5 ; 2843 5 !I; 2844 5 ! Either an invalid character has been encountered or we(K; 2845 5 ! aren't processing a device specification. Backup to the_>; 2846 5 ! beginning of the string and exit this loop.; 2847 5 !; 2848 6 BEGIN#; 2849 6 ptr = .backup_ptr;n; 2850 6 EXITLOOP;; 2851 5 END; ; 2852 5 TES;; ; 2853 5 ; 2854 4 END; ; 2855 4 6; 2856 3 END; ! Process a device specification5; 2857 4 BEGIN ! Process a file specificationE e];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 94c];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (30). ; 2858 4 ! 0; 2859 4 ! Process a directory specification. ; 2860 4 !W; 2861 4 ! We are immediately able to determine if we have a directory specification O; 2862 4 ! at this point; the current character must be either a '<' or '['.aM; 2863 4 ! If we don't find the matching bracket, we will report an error.aG; 2864 4 ! Likewise if we don't like some of the characters scanned.g ; 2865 4 ! :; 2866 5 BEGIN ! Process a directory specification ; 2867 5 ; 2868 5 !:; 2869 5 ! Attempt to process a directory specification ; 2870 5 ! ; 2871 5 ; 2872 5 LOCALa; 2873 5 bracket; ; 2874 5 V; 2875 5 backup_ptr = .ptr; ! Save start of this part of string for error return ; 2876 5 2; 2877 5 IF NOT next_char THEN LEAVE main_scan; ; 2878 5 ; 2879 5 bracket = 0; ; 2880 5 ; 2881 5 SELECT .char OFh; 2882 5 SET ; 2883 5 ; 2884 5 [%C'['] :o ; 2885 5 ; 2886 5 !D; 2887 5 ! Standard directory brackets, set terminating bracket.; 2888 5 !; 2889 5 bracket = %C']'; ; 2890 5 ; 2891 5 [%C'<'] :r ; 2892 5 ; 2893 5 !;; 2894 5 ! Alternate brackets, set terminating bracket. ; 2895 5 !; 2896 5 bracket = %C'>';N; 2897 5 TES; ; 2898 5 ; 2899 5 IF .bracket NEQU 0; 2900 5 THEN;; 2901 6 BEGIN ! Process directory specification8 ; 2902 6 ; 2903 6 LOCAL ; 2904 6 state; ; 2905 6 ; 2906 6 state = 0; ; 2907 6 "; 2908 7 IF NOT (WHILE 1 DO8; 2909 8 BEGIN ! Scan directory specification ; 2910 8 ; 2911 8 ! 3];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 95 ];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (30)9E; 2912 8 ! Get the next character, if none then right bracketD; 2913 8 ! missing, terminate scan with an error indication.; 2914 8 !7; 2915 8 IF NOT next_char THEN LEAVE main_scan; ; 2916 8 =; 2917 8 CASE ch$classify (.char) FROM 0 TO ch_max OF ; 2918 8 SET3 ; 2919 8 T; 2920 8 [ch_alpha, ch_dollar, ch_under, ch_lower, ch_oct, ch_8and9, ch_dash] : ; 2921 8 ; 2922 8 !-A; 2923 8 ! These characters are valid in the new format.2; 2924 8 !x; 2925 8 ;o ; 2926 8 ; 2927 8 [ch_dot] : ; 2928 8 ; 2929 8 !e0; 2930 8 ! Check for ... which is wild.; 2931 8 ! ; 2932 8 =; 2933 9 IF next_char ! Is there another character?r; 2934 8 THEN/; 2935 8 IF .char EQLU %C'.' ! Is it a .?c; 2936 8 THENh3; 2937 9 IF next_char ! Is there a third?9; 2938 8 THEN 1; 2939 8 IF .char EQLU %C'.' ! Is it a .?i; 2940 8 THEN>; 2941 8 scr_pb [flags] = .scr_pb [flags] OR FS$WDI; 2942 8 ELSE?; 2943 8 LEAVE main_scan ! .. invalid, no directoryc; 2944 8 ELSE 9; 2945 8 LEAVE main_scan ! We are looking at00Aigf junkt; 2946 8 ELSEr@; 2947 8 ptr = .ptr - 1 ! . followed by something else; 2948 8 ELSE9; 2949 8 LEAVE main_scan; ! We are looking at junkd ; 2950 8 ; 2951 8 [ch_wild] : ; 2952 8 ; 2953 8 !.+; 2954 8 ! Indicate wild directory ; 2955 8 !_=; 2956 8 scr_pb [flags] = .scr_pb [flags] OR FS$WDI; ; 2957 8 ; 2958 8 [ch_dir] : ; 2959 8 ; 2960 8 ! Q; 2961 8 ! End of directory specification, exit loop if matching bracket9; 2962 8 !tQ; 2963 8 IF .char EQLU .bracket THEN EXITLOOP valid ELSE EXITLOOP error;m ; 2964 8 ; 2965 8 [INRANGE] :  0];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 96a];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (30) ; 2966 8 ; 2967 8 ! F; 2968 8 ! Invalid character encountered, terminate scan withE; 2969 8 ! an error indication. We will rescan to determine <; 2970 8 ! if the specification is in the UIC form.; 2971 8 !P!; 2972 8 EXITLOOP error; ; 2973 8 TES; ; 2974 8 7; 2975 8 END ! Scan directory specification ; 2976 7 ); 2977 6 THEN; 2978 7 BEGIN#; 2979 7 ptr = .backup_ptr + 1;P ; 2980 7 C; 2981 7 WHILE 1 DO ! Process group,member format directoryn; 2982 8 BEGIN ; 2983 8 7; 2984 8 IF NOT next_char THEN LEAVE main_scan;w ; 2985 8 =; 2986 8 CASE ch$classify (.char) FROM 0 TO ch_max OFU; 2987 8 SET ; 2988 8 "; 2989 8 [ch_oct, ch_8and9] : ; 2990 8 ; 2991 8 ! $; 2992 8 ! Digits are valid; 2993 8 !9; 2994 8 ;7 ; 2995 8 ; 2996 8 [ch_wild] :9 ; 2997 8 ; 2998 8 !9+; 2999 8 ! Indicate wild directory ; 3000 8 !i=; 3001 8 scr_pb [flags] = .scr_pb [flags] OR FS$WDI; ; 3002 8 ; 3003 8 [ch_comma] : ; 3004 8 ; 3005 8 ! K; 3006 8 ! Group-member separator encountered. Only one is legal. E; 3007 8 ! Set flag indicating that a comma was encountered. ; 3008 8 !iF; 3009 8 IF (state = NOT .state) EQLU 0 THEN LEAVE main_scan; ; 3010 8 ; 3011 8 [ch_dir] : ; 3012 8 ; 3013 8 ! >; 3014 8 ! End of directory specification, exit loop.; 3015 8 !=; 3016 9 BEGINI ; 3017 9 O; 3018 9 IF .char NEQU .bracket OR .state EQLU 0 THEN LEAVE main_scan; ; 3019 9  r];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 97m];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (30)E; 3020 9 EXITLOOP; ; 3021 8 END; ; 3022 8 ; 3023 8 [INRANGE] : ; 3024 8 ; 3025 8 !sN; 3026 8 ! Invalid character encountered, exit the loop with an error; 3027 8 ! "; 3028 8 LEAVE main_scan;; 3029 8 TES; ; 3030 8 G; 3031 8 END ! Process group,member directory specificationA; 3032 6 END;5 ; 3033 6 ; 3034 6 !iP; 3035 6 ! We have located a directory specification, save this knowledge; 3036 6 !X6; 3037 6 scr_pb [directory_addr] = .backup_ptr;<; 3038 6 scr_pb [directory_len] = .ptr - .backup_ptr;;; 3039 6 scr_pb [flags] = .scr_pb [flags] OR FS$DIR;tW; 3040 6 backup_ptr = .ptr; ! Save start of remaining string for error return:; 3041 5 END; ! Process directory specification ; 3042 5 0; 3043 4 END; ! Process a directory spec 0];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 98];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (31)_; 3044 4 filename_scan :c); 3045 5 BEGIN ! Process filename. ; 3046 5 !O:; 3047 5 ! Attempt to p00Ai;icDATADATADATADATADATADATADATArocess a filename specification. ; 3048 5 ! ?; 3049 5 ! We will first attempt to process a quoted string.c ; 3050 5 !iO; 3051 5 ! If we don't find a quoted string, then we will attempt to processo*; 3052 5 ! a normal file specification. ; 3053 5 !1; 3054 5 LOCAL ; 3055 5 state; ; 3056 5 ; 3057 5 state = 0; ; 3058 5 ; 3059 5 !59; 3060 5 ! Attempt to process a funny filename (ANSI). ; 3061 5 !fG; 3062 5 ptr = .backup_ptr; ! Backup to start of remaining stringc ; 3063 5 ; 3064 5 WHILE 1 DO; 3065 6 BEGINp ; 3066 6 ; 3067 6 ! L; 3068 6 ! Get the next character. If none then the command is valid.; 3069 6 ! /; 3070 6 IF NOT next_char THEN EXITLOOP;3 ; 3071 6 #; 3072 6 IF .char EQLU %C'"'; 3073 6 THEN; 3074 6 state = NOT .state ; 3075 6 ELSE,; 3076 6 IF .state EQLU 0 THEN EXITLOOP;; 3077 5 END; ; 3078 5 4; 3079 5 state = -1; ! Initialize state again:; 3080 5 ptr = .ptr - 1; ! Backup to next character ; 3081 5 $; 3082 5 IF .ptr NEQU .backup_ptr; 3083 5 THEN; 3084 6 BEGINn ; 3085 6 ; 3086 6 ! S; 3087 6 ! We actually have a quoted file specification, save this knowledge ; 3088 6 !C5; 3089 6 scr_pb [filename_addr] = .backup_ptr;t;; 3090 6 scr_pb [filename_len] = .ptr - .backup_ptr;NO; 3091 6 scr_pb [flags] = .scr_pb [flags] OR FS$QUO OR FS$NAM OR FS$TYP;t; 3092 6 END ; 3093 5 ELSE5; 3094 6 BEGIN ! Process a normal filename ; 3095 6 ; 3096 6 WHILE 1 DO4; 3097 7 BEGIN ! Scan filename specification 6];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 99 ];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (31)c ; 3098 7 ,; 3099 7 IF NOT next_char THEN EXITLOOP; ; 3100 7 9; 3101 7 CASE ch$classify (.char) FROM 0 TO ch_max OF ; 3102 7 SET ; 3103 7 N; 3104 7 [ch_alpha, ch_dollar, ch_under, ch_lower, ch_oct, ch_8and9] : ; 3105 7 ; 3106 7 ! C; 3107 7 ! Valid character encountered, process next character ; 3108 7 !:; 3109 7 ; ; 3110 7 ; 3111 7 !09; 3112 7 ! Note that a wildcard has been encounteredC; 3113 7 !I; 3114 7 [ch_wild] : ; 3115 7 ; 3116 7 !N9; 3117 7 ! Note that a wildcard has been encounteredh; 3118 7 !m1; 3119 7 scr_pb [flags] = .scr_pb [flags] OR4; 3120 8 BEGINh5; 3121 8 IF .state LSS 0 THEN FS$WNA ELSE FS$WTY1; 3122 7 END; ; 3123 7 ; 3124 7 [ch_dot] :n ; 3125 7 ; 3126 7 !:; 3127 7 ! The first dot is the type field delimiter,8; 3128 7 ! the second is the new version delimiter..; 3129 7 ! Exit if the version delimiter.; 3130 7 !1,; 3131 7 IF (state = .state + 1) EQLU 0; 3132 7 THEN; 3133 8 BEGIN1L; 3134 8 IF (scr_pb [filename_len] = .ptr - 1 - .backup_ptr) NEQU 0; 3135 8 THEN; 3136 9 BEGIN4; 3137 9 scr_pb [filename_addr] = .backup_ptr;:; 3138 9 scr_pb [flags] = .scr_pb [flags] OR FS$NAM;; 3139 8 END;i(; 3140 8 backup_ptr = .ptr - 1;; 3141 8 ENDi; 3142 7 ELSE; 3143 7 EXITLOOP;t ; 3144 7 ; 3145 7 [INRANGE] : ; 3146 7 ; 3147 7 !a<; 3148 7 ! Any other character is not valid in the file>; 3149 7 ! name or type fields. Exit loop to the version ; 3150 7 ! processing scan.; 3151 7 !  G];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 100p];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (31) ; 3152 7 EXITLOOP; ; 3153 7 TES; ; 3154 7 3; 3155 6 END; ! Scan filename specification ; 3156 6 =; 3157 6 ptr = .ptr - 1; ! Backup to next characteri 00Aigf; 3158 6 ; 3159 6 IF .state LSS 0l; 3160 6 THEN; 3161 7 BEGIN ; 3162 7 C; 3163 7 IF (scr_pb [filename_len] = .ptr - .backup_ptr) NEQU 0:; 3164 7 THEN1; 3165 8 BEGIN6; 3166 8 scr_pb [filename_addr] = .backup_ptr;<; 3167 8 scr_pb [flags] = .scr_pb [flags] OR FS$NAM;; 3168 7 END; ; 3169 7 ; 3170 7 END; 3171 6 ELSE; 3172 7 BEGIN.; 3173 7 scr_pb [type_addr] = .backup_ptr;4; 3174 7 scr_pb [type_len] = .ptr - .backup_ptr;8; 3175 7 scr_pb [flags] = .scr_pb [flags] OR FS$TYP;; 3176 6 END; ; 3177 6 4; 3178 5 END; ! Process a normal filename ; 3179 5 %; 3180 4 END; ! filename_scan ; 3181 4 backup_ptr = .ptr; ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 101E];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (32)r2; 3182 4 IF NOT next_char THEN LEAVE main_scan; ; 3183 4 ; 3184 4 SELECTONEU .char OFr; 3185 4 SET ; 3186 4 ; 3187 4 [%C'.', %C';'] : ; 3188 4 ; 3189 4 !%; 3190 4 ! Process version number ; 3191 4 !; 3192 5 BEGIN ; 3193 5 ; 3194 5 LOCAL; 3195 5 state; ; 3196 5 P; 3197 5 state = 0; ! State is the character count or wildcard flag if -1 ; 3198 5 ; 3199 5 WHILE 1 DO ; 3200 6 BEGIN ; 3201 6 ; 3202 6 !C; 3203 6 ! Get next character. If none command line valid.N; 3204 6 !0; 3205 6 IF NOT next_char THEN EXITLOOP; ; 3206 6 $; 3207 6 SELECTONEU .char OF; 3208 6 SETi ; 3209 6 ; 3210 6 [%C'0' TO %C'9'] : ; 3211 6 ; 3212 6 ! H; 3213 6 ! If number then continue skipping over version number; 3214 6 ! F; 3215 6 IF (state = .state + 1) EQLU 0 THEN LEAVE main_scan; ; 3216 6 ; 3217 6 [%C'-'] : ; 3218 6 ; 3219 6 !xO; 3220 6 ! Minus sign only valid if first character of version number.I; 3221 6 !E; 3222 7 BEGIN ; 3223 7 8; 3224 7 IF .state NEQU 0 THEN LEAVE main_scan; ; 3225 7 %; 3226 7 state = .state + 1;2; 3227 6 END; ; 3228 6 ; 3229 6 [%C'*'] :i ; 3230 6 ; 3231 6 ! W; 3232 6 ! Wildcard version number. Must be only character in version number.6; 3233 6 !%; 3234 7 BEGIN ; 3235 7  x];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 102 ];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (32) 8; 3236 7 IF .state NEQU 0 THEN LEAVE main_scan; ; 3237 7 %; 3238 7 state = NOT .state; ; 3239 6 END; ; 3240 6 ; 3241 6 [OTHERWISE] : ; 3242 6 ; 3243 6 !b=; 3244 6 ! Non-digit encountered, exit version scan. ; 3245 6 !; 3246 6 EXITLOOP;i; 3247 6 TES; ; 3248 6 ; 3249 5 END;1 ; 3250 5 :; 3251 5 ptr = .ptr - 1; ! Backup to next character ; 3252 5 ; 3253 5 !F; 3254 5 ! We just processed a version number, save this knowledge; 3255 5 ! ; 3256 5 M; 3257 5 IF .state LSS 0 THEN scr_pb [flags] = .scr_pb [flags] OR FS$WVE; ; 3258 5 8; 3259 5 scr_pb [flags] = .scr_pb [flags] OR FS$VER;1; 3260 5 scr_pb [version_addr] = .backup_ptr;27; 3261 5 scr_pb [version_len] = .ptr - .backup_ptr; >; 3262 5 backup_ptr = .ptr; ! Include the version number; 3263 4 END; ; 3264 4 ; 3265 4 [OTHERWISE] : ; 3266 4 ; 3267 4 !(; 3268 4 ! Return the last character; 3269 4 !; 3270 5 BEGIN:; 3271 5 ptr = .ptr - 1; ! Backup to next character; 3272 4 END;]; 3273 4 TES8 ; 3274 4 6; 3275 3 END; ! Process filename specification!; 3276 2 END; ! main_scank p];DRPFN Logical Name Directives 8-Aug-198600Ai;icDATADATADATADATADATADATADATA 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 103 ];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33) T; 3277 2 scr_pb [trailing_addr] = ptr = .backup_ptr; ! Always fill in the address_; 3278 2 scr_pb [trailing_len] = len = .end_ptr - .ptr; ! of the traling string even if nullD ; 3279 2 q; 3280 2 IF (.scr_pb [flags] NEQU 0) AND (.scr_pb [flags] AND NOT FS$NAM) EQLU 0 ! If a standalone filename isk6; 3281 2 THEN ! present it could be a logical>; 3282 2 scr_pb [logical_type] = logical_type_filename; ; 3283 2 (; 3284 2 scr_pb [fss_status] = valid;; 3285 1 END; .NLIST  .LIST BIN,LOC .LIST$ .SBTTL FSS Parse file specification .NLISTa .ENABL LSB2 .LISTFSS: JSR R1,$SAVE3 ; 2503p TST -(SP) MOV #SCR.PB,R1 ; 2562 JSR PC,SAVE.PARSE% MOV R5,R3 ; LEN.P,END.PTR 25640 ADD R4,R3 ; PTR,END.PTRT! CLR (SP) ; NODE.COUNT 2587i% MOV R4,R2 ; PTR,BACKUP.PTR 2588e(1$: MOV R4,R5 ; PTR,ACCESS.PTR 2600# MOVB (R4)+,R1 ; PTR,CHAR 2602e CMP R4,R3 ; PTR,END.PTR  BHI 9$ ; 2605t JSR PC,CH$CLASSIFY ; 2609 ASL R0.# ADD P.AAB(R0),PC ; Case dispatcha3$: DEC R4 ; PTR 2673% MOV R4,R5 ; PTR,ACCESS.PTR 2674S% CMP R4,R2 ; PTR,BACKUP.PTR 2679C BEQ 10$ CLR R0 ; STATE 2681E&4$: MOVB (R4)+,R1 ; PTR,CHAR 2690 CMP R4,R3 ; PTR,END.PTRT BHI 9$ ; 2697O CMP R1,#42 ; CHAR,* 2701, BNE 5$R COM R0 ; STATE 2703P BR 4$ ; 27015$: TST R0 ; STATE 2706 BNE 4$P CMP R1,#72 ; CHAR,* 2713  BNE 9$ ; 2716,&6$: MOVB (R4)+,R1 ; PTR,CHAR 2720 CMP R4,R3 ; PTR,END.PTRc BHI 9$ ; 2723  CMP R1,#72 ; CHAR,* 2727E BNE 9$ ; 2730,! TST (SP) ; NODE.COUNT 2739Q $];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 104.];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33)  BNE 7$ ) MOV R2,SCR.PB+6 ; BACKUP.PTR,* 2742 # MOV R4,SCR.PB+4 ; PTR,* 2743,! SUB R2,SCR.PB+4 ; BACKUP.PTR,** MOV R5,SCR.PB+42 ; ACCESS.PTR,* 2744 MOV R4,R0 ; PTR,* 2745 SUB R5,R0 ; ACCESS.PTR,* MOV R0,SCR.PB+40E SUB #2,SCR.PB+402 BIS #400,SCR.PB+2 ; 2746  MOVB #3,SCR.PB+44 ; 2747D BR 8$ ; 2739&7$: MOV R4,SCR.PB+4 ; PTR,* 2750 SUB SCR.PB+6,SCR.PB+4(8$: MOV R4,R2 ; PTR,BACKUP.PTR 2752! INC (SP) ; NODE.COUNT 2753( BR 1$ ; 2609(9$: MOV R2,R4 ; BACKUP.PTR,PTR 2764)10$: MOV R4,R2 ; PTR,BACKUP.PTR 2782,'11$: MOVB (R4)+,R1 ; PTR,CHAR 2791B CMP R4,R3 ; PTR,END.PTR BHI 14$ ; 2794 JSR PC,CH$CLASSIFY ; 2798 ASL R0R# ADD P.AAC(R0),PC ; Case dispatchS"13$: MOV R4,R0 ; PTR,* 2815 SUB R2,R0 ; BACKUP.PTR,* CMP R0,#1 BLOS 14$ * MOV R2,SCR.PB+12 ; BACKUP.PTR,* 2822 MOV R0,SCR.PB+10 ; 2823 BIS #200,SCR.PB+2 ; 2824P TSTB SCR.PB+44 ; 2826 BNE 15$ MOVB #2,SCR.PB+44 ; 2828U BR 15$ ; 2815M)14$: MOV R2,R4 ; BACKUP.PTR,PTR 2849M)15$: MOV R4,R2 ; PTR,BACKUP.PTR 2875,# MOVB (R4)+,R1 ; PTR,CHAR 2877  CMP R4,R3 ; PTR,END.PTR  BHI 30$ CLR R5 ; BRACKET 2879 CMP R1,#133 ; CHAR,* 2884 BNE 16$# MOV #135,R5 ; *,BRACKET 2889R#16$: CMP R1,#74 ; CHAR,* 2891C BNE 17$" MOV #76,R5 ; *,BRACKET 2896 17$: TST R5 ; BRACKET 2899 BEQ 32$ CLR (SP) ; STATE 2906 '18$: MOVB (R4)+,R1 ; PTR,CHAR 2915  CMP R4,R3 ; PTR,END.PTR1 BHI 30$ R];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 105;];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33)R JSR PC,CH$CLASSIFY ; 2917 ASL R03# ADD P.AAD(R0),PC ; Case dispatchP'20$: MOVB (R4)+,R1 ; PTR,CHAR 2933M CMP R4,R3 ; PTR,END.PTR8 BHI 30$ CMP R1,#56 ; CHAR,* 29353 BNE 21$# MOVB (R4)+,R1 ; PTR,CHAR 29300Aigf7R CMP R4,R3 ; PTR,END.PTR BHI 30$ CMP R1,#56 ; CHAR,* 2939 BNE 30$ BR 22$ ; 2941 21$: DEC R4 ; PTR 2947i BR 18$ ; 2933 $22$: BIS #1000,SCR.PB+2 ; 2956 BR 18$ ; 2917 (23$: CMP R1,R5 ; CHAR,BRACKET 2963 BEQ 31$)24$: MOV R2,R4 ; BACKUP.PTR,PTR 2979D INC R4 ; PTR'25$: MOVB (R4)+,R1 ; PTR,CHAR 2984  CMP R4,R3 ; PTR,END.PTR, BHI 46$ JSR PC,CH$CLASSIFY ; 2986 ASL R0# ADD P.AAE(R0),PC ; Case dispatch $27$: BIS #1000,SCR.PB+2 ; 3001 BR 25$ ; 2986 !28$: COM (SP) ; STATE 3009  BNE 25$ BR 49$(29$: CMP R1,R5 ; CHAR,BRACKET 3018 30$: BNE 51$ TST (SP) ; STATE BEQ 49$.31$: MOV R2,SCR.PB+16 ; BACKUP.PTR,* 3037$ MOV R4,SCR.PB+14 ; PTR,* 3038" SUB R2,SCR.PB+14 ; BACKUP.PTR,* BIS #100,SCR.PB+2 ; 3039R% MOV R4,R2 ; PTR,BACKUP.PTR 3040332$: CLR R5 ; STATE 3057R% MOV R2,R4 ; BACKUP.PTR,PTR 3062'33$: MOVB (R4)+,R1 ; PTR,CHAR 3070: CMP R4,R3 ; PTR,END.PTR0 BHI 35$ CMP R1,#42 ; CHAR,* 3072  BNE 34$ COM R5 ; STATE 3074 BR 33$ ; 3072R34$: TST R5 ; STATE 3076T BNE 33$$35$: MOV #-1,R5 ; *,STATE 3079 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 106R];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33)S DEC R4 ; PTR 3080 % CMP R4,R2 ; PTR,BACKUP.PTR 3082) BEQ 36$* MOV R2,SCR.PB+22 ; BACKUP.PTR,* 3089$ MOV R4,SCR.PB+20 ; PTR,* 3090" SUB R2,SCR.PB+20 ; BACKUP.PTR,* BIS #2006,SCR.PB+2 ; 3091 BR 45$ ; 3082A'36$: MOVB (R4)+,R1 ; PTR,CHAR 3099  CMP R4,R3 ; PTR,END.PTRN BHI 43$ JSR PC,CH$CLASSIFY ; 3101 ASL R0-# ADD P.AAF(R0),PC ; Case dispatchX38$: TST R5 ; STATE 3121  BGE 39$ MOV #40,R0 ; 3120N BR 40$I39$: MOV #20,R0C!40$: BIS R0,SCR.PB+2 ; 3119  BR 36$ ; 3101841$: INC R5 ; STATE 3131  BNE 43$ MOV R4,R0 ; PTR,* 3134 SUB R2,R0 ; BACKUP.PTR,* MOV R0,SCR.PB+20P DEC SCR.PB+20 BEQ 42$* MOV R2,SCR.PB+22 ; BACKUP.PTR,* 3137 BIS #4,SCR.PB+2 ; 31389)42$: MOV R4,R2 ; PTR,BACKUP.PTR 3140 DEC R2 ; BACKUP.PTR  BR 36$ ; 3131P43$: DEC R4 ; PTR 3157 MOV R4,R0 ; PTR,* 3163 SUB R2,R0 ; BACKUP.PTR,* TST R5 ; STATE 3159# BGE 44$ MOV R0,SCR.PB+20 ; 3163 BEQ 45$* MOV R2,SCR.PB+22 ; BACKUP.PTR,* 3166 BIS #4,SCR.PB+2 ; 3167  BR 45$ ; 3159,.44$: MOV R2,SCR.PB+26 ; BACKUP.PTR,* 3173 MOV R0,SCR.PB+24 ; 3174 BIS #2,SCR.PB+2 ; 3175)45$: MOV R4,R2 ; PTR,BACKUP.PTR 3181,# MOVB (R4)+,R1 ; PTR,CHAR 3182R CMP R4,R3 ; PTR,END.PTR  BHI 55$ CMP R1,#56 ; CHAR,* 3187 BEQ 47$ CMP R1,#73 ; CHAR,*S 46$: BNE 55$ K];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 107V];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33)47$: CLR R0 ; STATE 3197R'48$: MOVB (R4)+,R1 ; PTR,CHAR 32054 CMP R4,R3 ; PTR,END.PTR7 BHI 53$ CMP R1,#60 ; CHAR,* 32108 BLO 50$ CMP R1,#71 ; CHAR,*3 BHI 50$ INC R0 ; STATE 3215I BNE 48$ 49$: BR 55$C#50$: CMP R1,#55 ; CHAR,* 3217  BNE 52$ TST R0 ; STATE 3224 51$: BNE 55$ INC R0 ; STATE 32268 BR 48$ ; 32071#52$: CMP R1,#52 ; CHAR,* 3229e BNE 53$ TST R0 ; STATE 3236R BNE 55$ COM R0 ; STATE 3238 BR 48$ ; 3207 53$: DEC R4 ; PTR 3251; TST R0 ; STATE 32573 BGE 54$ BIS #10,SCR.PB+2!54$: BIS #1,SCR.PB+2 ; 3259B* MOV R2,SCR.PB+32 ; BACKUP.PTR,* 3260$ MOV R4,SCR.PB+30 ; PTR,* 3261" SUB R2,SCR.PB+30 ; BACKUP.PTR,*% MOV R4,R2 ; PTR,BACKUP.PTR 3262;)55$: MOV R2,R4 ; BACKUP.PTR,PTR 3277;" MOV R2,SCR.PB+36 ; BACKUP.PTR,*# MOV R3,R5 ; END.PTR,LEN 32783 SUB R4,R5 ; PT00Ai;icDATADATADATADATADATADATADATAR,LEN  MOV R5,SCR.PB+34 ; LEN,* MOV SCR.PB+2,R0 ; 3280B BEQ 56$ BIT #-5,R03 BNE 56$ MOVB #1,SCR.PB+44 ; 3282S56$: MOV #1,SCR.PB ; 32840 TST (SP)+ ; 2503 RTS PC;8; Routine Size: 341 words, Routine Base: $CODE$ + 6770.; Maximum stack depth per invocation: 6 words .PSECT $PLIT$, RO , D +P.AAB: ; CASE Table for FSS+0044 2609 2$: .WORD 160 ; [9$] V];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 108];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33) .WORD -22 ; [1$] .WORD 160 ; [9$] .WORD -22 ; [1$] .WORD -22 ; [1$] .WORD 160 ; [9$] .WORD 44 ; [6$]  .WORD 0 ; [3$] .WORD 160 ; [9$] .WORD 160 ; [9$] .WORD 160 ; [9$] .WORD 160 ; [9$] .WORD -22 ; [1$] .WORD -22 ; [1$] .WORD -22 ; [1$] .WORD 160 ; [9$]+P.AAC: ; CASE Table for FSS+0250 2798 12$: .WORD 46 ; [14$] .WORD -20 ; [11$]a .WORD 46 ; [14$] .WORD -20 ; [11$]  .WORD -20 ; [11$]N .WORD 46 ; [14$] .WORD 0 ; [13$]O .WORD 46 ; [14$] .WORD 46 ; [14$] .WORD 46 ; [14$] .WORD 46 ; [14$] .WORD 46 ; [14$] .WORD -20 ; [11$]1 .WORD -20 ; [11$]0 .WORD -20 ; [11$]  .WORD 46 ; [14$]+P.AAD: ; CASE Table for FSS+0404 2917 19$: .WORD 52 ; [24$] .WORD -20 ; [18$] .WORD 52 ; [24$] .WORD -20 ; [18$]  .WORD -20 ; [18$]4 .WORD 52 ; [24$] .WORD 52 ; [24$] .WORD 52 ; [24$] .WORD 46 ; [23$] .WORD 36 ; [22$] .WORD -20 ; [18$]  .WORD 0 ; [20$]; .WORD -20 ; [18$][ .WORD -20 ; [18$]4 .WORD -20 ; [18$]] .WORD 52 ; [24$]+P.AAE: ; CASE Table for FSS+0502 2986026$: .WORD 472 ; [55$]. D];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 109D];X1.10 Parse file specification 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (33)5 .WORD 472 ; [55$]  .WORD 472 ; [55$]; .WORD -20 ; [25$][ .WORD 472 ; [55$]2 .WORD 10 ; [28$] .WORD 472 ; [55$]$ .WORD 472 ; [55$]$ .WORD 16 ; [29$] .WORD 0 ; [27$]  .WORD 472 ; [55$][ .WORD 472 ; [55$]A .WORD 472 ; [55$]2 .WORD 472 ; [55$]  .WORD -20 ; [25$]o .WORD 472 ; [55$] +P.AAF: ; CASE Table for FSS+0662 3101 37$: .WORD 66 ; [43$] .WORD -20 ; [36$]  .WORD 66 ; [43$] .WORD -20 ; [36$]B .WORD -20 ; [36$]4 .WORD 66 ; [43$] .WORD 66 ; [43$] .WORD 66 ; [43$] .WORD 66 ; [43$] .WORD 0 ; [38$] .WORD 66 ; [43$] .WORD 24 ; [41$] .WORD -20 ; [36$]] .WORD -20 ; [36$] .WORD -20 ; [36$] .WORD 66 ; [43$] .NLIST2 .DSABL LSB .NLIST BIN,LOC5 .LIST 0];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 110DX;X1.10 Classify character 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (34)'; 3286 1 %SBTTL 'Classify character'.; 3287 1 GLOBAL_FOR_DEBUG8; 3288 1 ROUTINE ch$classify (char) : ch$classify_l = ; 3289 1 ; 3290 1 !++ ; 3291 1 !D%; 3292 1 ! FUNCTIONAL DESCRIPTION: ; 3293 1 ! I; 3294 1 ! Classify the character into one of the types of interest to$; 3295 1 ! the parseing routines. ; 3296 1 !- ; 3297 1 ! FORMAL PARAMETERS: ; 3298 1 !g0; 3299 1 ! char - Character to be classified. ; 3300 1 !O; 3301 1 ! ROUTINE VALUE:; 3302 1 ! COMPLETION CODES:c ; 3303 1 ! 7; 3304 1 ! The character classification is returned. ; 3305 1 !s; 3306 1 !--9 ; 3307 1 ; 3308 2 BEGIN ; 3309 2 ; 3310 2 LITERALR; 3311 2 ctb = %C'"', ; 3312 2 cte = %C'z' + 1; ; 3313 2 ; 3314 2 OWNtF; 3315 2 char_types : VECTOR [cte - ctb, BYTE, SIGNED] PRESET (; 3316 2 ! "alpha"s $; 3317 2 [%C'A'-ctb] = ch_alpha,$; 3318 2 [%C'B'-ctb] = ch_alpha,$; 3319 2 [%C'C'-ctb] = ch_00Aigfalpha,$; 3320 2 [%C'D'-ctb] = ch_alpha,$; 3321 2 [%C'E'-ctb] = ch_alpha,$; 3322 2 [%C'F'-ctb] = ch_alpha,$; 3323 2 [%C'G'-ctb] = ch_alpha,$; 3324 2 [%C'H'-ctb] = ch_alpha,$; 3325 2 [%C'I'-ctb] = ch_alpha,$; 3326 2 [%C'J'-ctb] = ch_alpha,$; 3327 2 [%C'K'-ctb] = ch_alpha,$; 3328 2 [%C'L'-ctb] = ch_alpha,$; 3329 2 [%C'M'-ctb] = ch_alpha,$; 3330 2 [%C'N'-ctb] = ch_alpha,$; 3331 2 [%C'O'-ctb] = ch_alpha,$; 3332 2 [%C'P'-ctb] = ch_alpha,$; 3333 2 [%C'Q'-ctb] = ch_alpha,$; 3334 2 [%C'R'-ctb] = ch_alpha,$; 3335 2 [%C'S'-ctb] = ch_alpha,$; 3336 2 [%C'T'-ctb] = ch_alpha,$; 3337 2 [%C'U'-ctb] = ch_alpha,$; 3338 2 [%C'V'-ctb] = ch_alpha,$; 3339 2 [%C'W'-ctb] = ch_alpha, t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 111 X;X1.10 Classify character 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (34)$; 3340 2 [%C'X'-ctb] = ch_alpha,$; 3341 2 [%C'Y'-ctb] = ch_alpha,$; 3342 2 [%C'Z'-ctb] = ch_alpha, ; 3343 2 $; 3344 2 [%C'a'-ctb] = ch_lower,$; 3345 2 [%C'b'-ctb] = ch_lower,$; 3346 2 [%C'c'-ctb] = ch_lower,$; 3347 2 [%C'd'-ctb] = ch_lower,$; 3348 2 [%C'e'-ctb] = ch_lower,$; 3349 2 [%C'f'-ctb] = ch_lower,$; 3350 2 [%C'g'-ctb] = ch_lower,$; 3351 2 [%C'h'-ctb] = ch_lower,$; 3352 2 [%C'i'-ctb] = ch_lower,$; 3353 2 [%C'j'-ctb] = ch_lower,$; 3354 2 [%C'k'-ctb] = ch_lower,$; 3355 2 [%C'l'-ctb] = ch_lower,$; 3356 2 [%C'm'-ctb] = ch_lower,$; 3357 2 [%C'n'-ctb] = ch_lower,$; 3358 2 [%C'o'-ctb] = ch_lower,$; 3359 2 [%C'p'-ctb] = ch_lower,$; 3360 2 [%C'q'-ctb] = ch_lower,$; 3361 2 [%C'r'-ctb] = ch_lower,$; 3362 2 [%C's'-ctb] = ch_lower,$; 3363 2 [%C't'-ctb] = ch_lower,$; 3364 2 [%C'u'-ctb] = ch_lower,$; 3365 2 [%C'v'-ctb] = ch_lower,$; 3366 2 [%C'w'-ctb] = ch_lower,$; 3367 2 [%C'x'-ctb] = ch_lower,$; 3368 2 [%C'y'-ctb] = ch_lower,$; 3369 2 [%C'z'-ctb] = ch_lower,; 3370 2 ! numbers"; 3371 2 [%C'0'-ctb] = ch_oct,"; 3372 2 [%C'1'-ctb] = ch_oct,"; 3373 2 [%C'2'-ctb] = ch_oct,"; 3374 2 [%C'3'-ctb] = ch_oct,"; 3375 2 [%C'4'-ctb] = ch_oct,"; 3376 2 [%C'5'-ctb] = ch_oct,"; 3377 2 [%C'6'-ctb] = ch_oct,"; 3378 2 [%C'7'-ctb] = ch_oct,$; 3379 2 [%C'8'-ctb] = ch_8and9,$; 3380 2 [%C'9'-ctb] = ch_8and9,!; 3381 2 ! special characters]%; 3382 2 [%C'$'-ctb] = ch_dollar,=$; 3383 2 [%C'_'-ctb] = ch_under,"; 3384 2 [%C'.'-ctb] = ch_dot,$; 3385 2 [%C','-ctb] = ch_comma,$; 3386 2 [%C':'-ctb] = ch_colon,#; 3387 2 [%C'-'-ctb] = ch_dash,3$; 3388 2 [%C'"'-ctb] = ch_quote,#; 3389 2 [%C'*'-ctb] = ch_wild, #; 3390 2 [%C'%'-ctb] = ch_wild, #; 3391 2 [%C';'-ctb] = ch_misc,[#; 3392 2 [%C'['-ctb] = ch_misc,C"; 3393 2 [%C']'-ctb] = ch_dir, 9];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 112X;X1.10 Classify character 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (34)#; 3394 2 [%C'<'-ctb] = ch_misc,:$; 3395 2 [%C'>'-ctb] = ch_dir ); ; 3396 2 ; 3397 2 BUILTINC; 3398 2 R0; ; 3399 2 ; 3400 2 R0 = .char - ctb;0 ; 3401 2 !; 3402 2 IF .R0 GEQU cte - ctb-; 3403 2 THEN; 3404 3 BEGIN] ; 3405 3 "; 3406 3 SELECTONE .char OF; 3407 3 SET ; 3408 3 ; 3409 3 [0, 9, %C' '] :!; 3410 3 RETURN ch_space; ; 3411 3 ; 3412 3 [OTHERWISE] :!; 3413 3 RETURN ch_other;.; 3414 3 TES; ; 3415 3 ; 3416 2 END; ; 3417 2 %; 3418 2 RETURN .char_types [.R0]; ; 3419 1 END; .NLIST  .LIST BIN,LOC .LIST .PSECT $OWN$, D - CHAR.TYPES:4 .BYTE 7 .BYTE 0 .BYTE 14 .BYTE 11 .BYTE 0 .BYTE 0 .BYTE 0 .BYTE 0 .BYTE 11  .BYTE 0 .BYTE 5 .BYTE 12c .BYTE 13  .BYTE 0 .BYTE 3 .BYTE 3 .BYTE 3 .BYTE 3 .BYTE 3 .BYTE 3 .BYTE 3 h];DRPFN Logical Name Direc00Ai;icDATADATADATADATADATADATADATAtives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 1134X;X1.10 Classify character 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (34) .BYTE 3 .BYTE 16 .BYTE 16S .BYTE 6 .BYTE 17. .BYTE 17. .BYTE 0 .BYTE 10H .BYTE 0 .BYTE 0 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 4 .BYTE 17  .BYTE 0 .BYTE 105 .BYTE 0 .BYTE 15. .BYTE 0 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 114.X;X1.10 Classify character 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (34) .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1 .BYTE 1& .SBTTL CH$CLASSIFY Classify character .PSECT $CODE$, RO  .NLISTE .ENABL LSB .LIST CH$CLASSIFY: MOV R1,-(SP) ; 3288 MOV R1,R0 ; CHAR,R0 3400Y SUB #42,R0 ; *,R0a CMP R0,#131 ; R0,* 34021 BLO 4$A TST R1 ; CHAR 3409 BEQ 1$ CMP R1,#11 ; CHAR,*r BEQ 1$g CMP R1,#40 ; CHAR,*E BNE 2$R1$: MOV #2,R1 ; 3406 BR 3$ 2$: CLR R13$: MOV R1,R0 ; 3404 BR 5$-4$: MOVB CHAR.TYPES(R0),R0 ; *(R0),* 3418E5$: MOV (SP)+,R1 ; 3288B RTS PCA8; Routine Size: 25 words, Routine Base: $CODE$ + 10242.; Maximum stack depth per invocation: 2 words .NLIST .DSABL LSB, .NLIST BIN,LOC  .LIST 2];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 115r;X1.10 Copy, upcase, and compress a string and return 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (35)L; 3420 1 %SBTTL 'Copy, upcase, and compress a string and return a status'; 3421 1 GLOBAL_FOR_DEBUGR; 3422 1 ROUTINE ch$copy (len, in_ptr, out_ptr_p; out_ptr) : ch$copy_l NOVALUE= ; 3423 1 ; 3424 1 !++o ; 3425 1 !s%; 3426 1 ! FUNCTIONAL DESCRIPTION:O ; 3427 1 !J; 3428 1 ! The input string is copyed to the output string. During the:; 3429 1 ! copy operation it is upcased and compressed. ; 3430 1 !u ; 3431 1 ! FORMAL PARAMETERS: ; 3432 1 !./; 3433 1 ! len - Length of the input string ,; 3434 1 ! in_ptr - Input buffer pointer/; 3435 1 ! out_ptr_p - Output buffer pointerh ; 3436 1 !pE; 3437 1 ! out_ptr - Points to end of string in the output buffer ; 3438 1 ! ; 3439 1 !-- ; 3440 1 ; 3441 2 BEGIN4 ; 3442 2 ; 3443 2 MAPu5; 3444 2 in_ptr : REF VECTOR [, BYTE, SIGNED], 6; 3445 2 out_ptr : REF VECTOR [, BYTE, SIGNED]; ; 3446 2 ; 3447 2 LOCALO:; 3448 2 state, ! Quote state, zero is unquoted; 3449 2 char; ; 3450 2 F; 3451 2 out_ptr = .out_ptr_p; ! Discard the input parameter now4; 3452 2 state = 0; ! Quote state to unquoted ; 3453 2 ); 3454 2 INCRU i FROM 0 TO .len - 1 DO ; 3455 3 BEGIN $; 3456 3 char = .in_ptr [.i]; ; 3457 3 ; 3458 3 IF .state EQLU 0; 3459 3 THEN; 3460 4 BEGIN ; 3461 4 9; 3462 4 CASE ch$classify (.char) FROM 0 TO ch_max OFO; 3463 4 SET ; 3464 4 ; 3465 4 [ch_other] : ; 3466 4 ; 3467 4 ! ?; 3468 4 ! Characters other than the valid set that aren'tm(; 3469 4 ! quoted won't be upcased.; 3470 4 !t; 3471 5 BEGIN "; 3472 5 out_ptr [0] = .char;$; 3473 5 out_ptr = out_ptr [1]; ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 116 r;X1.10 Copy, upcase, and compress a string and return 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (35); 3474 4 END; ; 3475 4 ; 3476 4 [ch_quote] : ; 3477 5 BEGIN ; 3478 5 ; 3400Aigf79 5 !i?; 3480 5 ! If quote, change the state and output character ; 3481 5 ! !; 3482 5 state = NOT .state;_"; 3483 5 out_ptr [0] = .char;$; 3484 5 out_ptr = out_ptr [1];; 3485 4 END; ; 3486 4 ; 3487 4 [ch_lower] :2 ; 3488 4 ; 3489 4 !p(; 3490 4 ! Upcase lowercase letters; 3491 4 !2; 3492 5 BEGINR*; 3493 5 char = .char AND NOT %O'40';"; 3494 5 out_ptr [0] = .char;$; 3495 5 out_ptr = out_ptr [1];; 3496 4 END; ; 3497 4 ; 3498 4 [ch_space] :a ; 3499 4 ; 3500 4 ! ; 3501 4 ! Remove spacesO; 3502 4 !4; 3503 4 ; ; 3504 4 ; 3505 4 [INRANGE] : ; 3506 4 ; 3507 4 !6'; 3508 4 ! Output valid characters ; 3509 4 !9; 3510 5 BEGIN "; 3511 5 out_ptr [0] = .char;$; 3512 5 out_ptr = out_ptr [1];; 3513 4 END;; 3514 4 TES; ; 3515 4 ; 3516 4 END; 3517 3 ELSE; 3518 4 BEGIN ; 3519 4 ; 3520 4 !2; 3521 4 ! If quoted, output it no matter what; 3522 4 !9; 3523 4 IF .char EQLU %C'"' THEN state = NOT .state; ; 3524 4 !; 3525 4 out_ptr [0] = .char;#; 3526 4 out_ptr = out_ptr [1];5; 3527 3 END;l c];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 1172r;X1.10 Copy, upcase, and compress a string and return 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (35) ; 3528 3 ; 3529 2 END; ; 3530 2 ; 3531 2 !5?; 3532 2 ! Allow unbalanced quoted strings if there is room. ; 3533 2 !a; 3534 2 IF .state NEQU 0; 3535 2 THEN1; 3536 2 IF (.len + 1) LEQU file_spec_size ; 3537 2 THEN; 3538 3 BEGIN!; 3539 3 out_ptr [0] = %C'"';c#; 3540 3 out_ptr = out_ptr [1];B; 3541 2 END; ; 3542 1 END; .NLISTp .LIST BIN,LOC .LIST? .SBTTL CH$COPY Copy, upcase, and compress a string and return 0 .NLIST .ENABL LSB .LIST!CH$COPY:MOV R4,-(SP) ; 34221 MOV R5,-(SP)2 TST -(SP) MOV R2,-(SP)e MOV R1,2(SP)e CLR R5 ; STATE 3452 MOV R1,-(SP) ; 3454 DEC (SP)  CLR R4 ; I BR 8$1$: MOV R4,R2 ; I,* 3456 ADD 2(SP),R2  MOVB (R2),R1 ; *,CHAR TST R5 ; STATE 3458' BNE 4$ JSR PC,CH$CLASSIFY ; 3462 ASL R0 # ADD P.AAG(R0),PC ; Case dispatch"3$: BIC #40,R1 ; *,CHAR 3493 BR 6$ ; 3494"4$: CMP R1,#42 ; CHAR,* 3523 BNE 6$.5$: COM R5 ; STATEC*6$: MOVB R1,(R3)+ ; CHAR,OUT.PTR 35257$: INC R4 ; I 34548$: CMP R4,(SP) ; I,* BLOS 1$ TST R5 ; STATE 3534  BEQ 9$4 MOV 4(SP),R1 ; 3536 INC R1 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 118 r;X1.10 Copy, upcase, and compress a string and return 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (35) CMP R1,#377 BHI 9$$% MOVB #42,(R3)+ ; *,OUT.PTR 3539R9$: ADD #6,SP ; 3422 MOV (SP)+,R5 MOV (SP)+,R4) RTS PCR8; Routine Size: 48 words, Routine Base: $CODE$ + 10324.; Maximum stack depth per invocation: 7 words .PSECT $PLIT$, RO , D /P.AAG: ; CASE Table for CH$COPY+0050 3462i2$: .WORD 16 ; [6$] .WORD 0 ; [3$] .WORD 20 ; [7$]  .WORD 16 ; [6$]e .WORD 16 ; [6$]n .WORD 16 ; [6$]1 .WORD 16 ; [6$]R .WORD 14 ; [5$]0 .WORD 16 ; [6$]7 .WORD 16 ; [6$], .WORD 16 ; [6$]  .WORD 16 ; [6$]  .WORD 16 ; [6$]( .WORD 16 ; [6$]R .WORD 16 ; [6$]t .WORD 16 ; [6$]R .NLIST: .DSABL LSB3 .NLIST BIN,LOCc .LIST o];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 1193r;X1.10 Convert parse block from kernel virtual to user 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (36)L; 3543 1 %SBTTL 'Convert parse block from kernel virtual to user virtual'; 3544 1 GLOBAL_FOR_DEBUGQ; 3545 1 ROUTINE convert_parse (parse_block, k_virtual, u_virtual) 00Ai;icDATADATADATADATADATADATADATA: NOVALUE =$ ; 3546 1 ; 3547 1 !++D ; 3548 1 !%; 3549 1 ! FUNCTIONAL DESCRIPTION:O ; 3550 1 !D; 3551 1 ! Convert parse block address fields from kernel virtual; 3552 1 ! to user virtual. ; 3553 1 !a ; 3554 1 ! FORMAL PARAMETERS: ; 3555 1 ! 6; 3556 1 ! parse_block - Address of the parse block?; 3557 1 ! k_virtual - Address of string in executive buffertH; 3558 1 ! u_virtual - Address of corresponding string in user buffer ; 3559 1 !t; 3560 1 !-- ; 3561 1 ; 3562 2 BEGIN7 ; 3563 2 ; 3564 2 MAP5>; 3565 2 parse_block : REF BLOCK FIELD (parse_block_f); ; 3566 2 ; 3567 2 LOCALs; 3568 2 p : REF VECTOR; ; 3569 2 (; 3570 2 p = parse_block [node_addr]; ; 3571 2 6; 3572 2 WHILE .p LEQA parse_block [access_addr] DO; 3573 3 BEGIN7 ; 3574 3 O; 3575 3 IF .p [0] NEQU 0 THEN p [0] = .p [0] - .k_virtual + .u_virtual;c ; 3576 3 ; 3577 3 p = p [2];; 3578 2 END; ; 3579 2 ; 3580 1 END; .NLIST  .LIST BIN,LOC .LISTE .SBTTL CONVERT.PARSE Convert parse block from kernel virtual to user  .PSECT $CODE$, RO  .NLIST .ENABL LSB  .LISTCONVERT.PARSE: JSR R1,$SAVE2 ; 3545l( MOV 14(SP),R1 ; PARSE.BLOCK,P 3570 ADD #6,R1 ; *,P_( MOV 14(SP),R2 ; PARSE.BLOCK,* 3572 ADD #42,R24 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 120 r;X1.10 Convert parse block from kernel virtual to user 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (36)1$: CMP R1,R2 ; P,* BHI 3$a TST (R1) ; P 3575a BEQ 2$  MOV (R1),R0 ; P,* SUB 12(SP),R0 ; K.VIRTUAL,* ADD 10(SP),R0 ; U.VIRTUAL,* MOV R0,(R1) ; *,P(2$: ADD #4,R1 ; *,P 3577 BR 1$ ; 35723$: RTS PC ; 35458; Routine Size: 24 words, Routine Base: $CODE$ + 10464.; Maximum stack depth per invocation: 4 words .NLIST .DSABL LSBX .NLIST BIN,LOCs .LIST r];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 121 a;X1.10 Save parse block and zero it 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (37);1; 3581 1 %SBTTL 'Save parse block and zero it',; 3582 1 GLOBAL_FOR_DEBUGA; 3583 1 ROUTINE save_parse (out_ptr) : save_parse_l NOVALUE = ; 3584 1 ; 3585 1 !++u ; 3586 1 !D%; 3587 1 ! FUNCTIONAL DESCRIPTION:n ; 3588 1 !rM; 3589 1 ! Copy the parse block to a specified save area and then zero it.aM; 3590 1 ! The operation is done in such a manner that it can be zeroed byX2; 3591 1 ! specifying the output as the scr_pb. ; 3592 1 !C ; 3593 1 ! FORMAL PARAMETERS: ; 3594 1 !L:; 3595 1 ! out_ptr - Address of the output parse block ; 3596 1 ! ; 3597 1 ! IMPLICIT OUTPUTS:v ; 3598 1 !U"; 3599 1 ! Scratch parse block. ; 3600 1 !D; 3601 1 !--U ; 3602 1 ; 3603 2 BEGIN ; 3604 2 ; 3605 2 LOCALe$; 3606 2 in_ptr : REF VECTOR; ; 3607 2 ; 3608 2 MAP %; 3609 2 out_ptr : REF VECTOR; ; 3610 2 ; 3611 2 in_ptr = scr_pb; ; 3612 2 0; 3613 2 DECR i FROM parse_block_size TO 1 DO; 3614 3 BEGIN4*; 3615 3 out_ptr [0] = .in_ptr [0];&; 3616 3 out_ptr = out_ptr [1];; 3617 3 in_ptr [0] = 0;$; 3618 3 in_ptr = in_ptr [1];; 3619 2 END; ; 3620 2 ; 3621 1 END; .NLIST  .LIST BIN,LOC .LIST/ .SBTTL SAVE.PARSE Save parse block and zero it: .NLISTO .ENABL LSB  .LIST SAVE.PARSE:$ MOV #SCR.PB,R2 ; *,IN.PTR 3611 MOV #23,R0 ; *,I 3613p,1$: MOV (R2),(R1)+ ; IN.PTR,OUT.PTR 3615 CLR (R2)+ ; IN.PTR 3617 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 122ta;X1.10 Save parse block and zero it 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (37); SOB R0,1$ ; I,* 3613 RTS PC ; 3583L7; Routine Size: 8 words, Routine Base: $CODE$ + 10544i.; Maximum stack de00Aigfpth per invocation: 0 words .NLISTC .DSABL LSB, .NLIST BIN,LOCM .LIST *];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 123];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38),; 3622 1 %SBTTL 'Find Equivalence String'q; 3623 1 ROUTINE find_something (logical_addr, logical_len ; equiv_addr, equiv_len) : find_equivalence_l =t ; 3624 1 ; 3625 1 !++e ; 3626 1 !4%; 3627 1 ! FUNCTIONAL DESCRIPTION:n ; 3628 1 !LM; 3629 1 ! Find the equivalence string for the input logical name. ReturncS; 3630 1 ! status. If the input logical name starts with an '_' then return theu=; 3631 1 ! string less the '_' and the status of terminal.N ; 3632 1 ! ; 3633 1 ! FORMAL PARAMETERS: ; 3634 1 ! 9; 3635 1 ! logical_addr - Address of the logical name_?; 3636 1 ! logical_len - Length of the logical name in bytes ; 3637 1 !+<; 3638 1 ! equiv_addr - Address of the equivalence string:; 3639 1 ! equiv_len - Length of the equivalence string ; 3640 1 !a; 3641 1 ! ROUTINE VALUE: ; 3642 1 !h); 3643 1 ! success, terminal, or errorn ; 3644 1 ! ; 3645 1 !--g ; 3646 1 ; 3647 2 BEGIN ; 3648 2 ; 3649 2 !:; 3650 2 ! Define the LNB fields used in this routine.; 3651 2 !; 3652 2 FIELD; 3653 2 lnb_f =; 3654 2 SEToB; 3655 2 logical_link = [0, 0, 16, 0], ! Link to the next lnbB; 3656 2 logical_table = [1, 0, 8, 0], ! Logical table numberD; 3657 2 logical_type = [1, 8, 8, 0], ! Logical name block typeB; 3658 2 logical_status = [2, 0, 8, 0], ! Logical name statusH; 3659 2 terminal_logical = [2, 0, 1, 0],! Set for terminal logicalI; 3660 2 creator_group_number = [2, 8, 8, 0], ! Creator group numbero?; 3661 2 creator_ucb = [3, 0, 16, 0], ! Creator UCB (user)f?; 3662 2 creator_tcb = [3, 0, 16, 0], ! Creator TCB (task)]K; 3663 2 logical_length = [4, 0, 8, 0], ! Logical name length in bytesaO; 3664 2 equivalence_length = [4, 8, 8, 0], ! 32 word block offset of baseyH; 3665 2 logical_name_start = [5, 0, 16, 0] ! Start of logical name; 3666 2 TES; ; 3667 2 ; 3668 2 LITERAL@; 3669 2 lnb_size = 5; ! Size of the fixed part of the ; 3670 2 ! LNB in words ; 3671 2 ; 3672 2 LOCALE; 3673 2 logical_descriptor : BLOCK [logical_descriptor_size]eL; 3674 2 FIELD (logical_descriptor_f), ! Logical name descriptor block<; 3675 2 lnb_base, ! Base physical address of LNB ,];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 124o];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38) F; 3676 2 lookup_len; ! The length that we actually look up ; 3677 2 ; 3678 2 OWN8; 3679 2 log_buf : VECTOR [ logical_size, BYTE]; ; 3680 2 ; 3681 2 BIND g; 3682 2 lnb = apr6_v : BLOCK [lnb_size] FIELD (lnb_f); ! Logical name descriptor block addressd ; 3683 2 ; 3684 2 LABEL; 3685 2 zero_compress;:; 3686 2 !K; 3687 2 ! Check for an underscore. If there is one return the logical1L; 3688 2 ! name less the underscore as the equivalence string along with&; 3689 2 ! the status of terminal.; 3690 2 !#; 3691 2 IF .logical_len GEQU 1l; 3692 2 THENo; 3693 3 BEGIN4; 3694 3 IF .(.logical_addr)<0,8> EQLU %C'_'8; 3695 3 THEN IF .logical_len EQLU 1 !PKW111+; 3696 3 THEN RETURN error !PKW1114 ; 3697 3 ELSE !PKW111; 3698 4 BEGIN0; 3699 4 equiv_addr = .logical_addr + 1;.; 3700 4 equiv_len = .logical_len - 1;!; 3701 4 RETURN terminal;v; 3702 3 END;h ; 3703 3 D; 3704 3 ! Unfortunately it is possible to call this routineE; 3705 3 ! specifying that a lun is not to be assigned. That F; 3706 3 ! means that the zero com00Ai;icDATADATADATADATADATADATADATApression method of assigningC; 3707 3 ! the lun and then doing a GLUN won't always work.H; 3708 3 ! So we have to do the zero compression by hand. GACK.H; 3709 3 ! We also need to strip off any colons before we do theL; 3710 3 ! lookup. Note that zero compression is only done if thereB; 3711 3 ! is exactly one colon on the end of the logical. ; 3712 3 P; 3713 3 ch$copy (.logical_len, .logical_addr, log_buf [0]; lookup_len);8; 3714 3 lookup_len = .lookup_len - log_buf [0];9; 3715 3 IF .log_buf [.lookup_len - 1] EQLU %C':'o; 3716 3 THEN!; 3717 4 BEGIN +; 3718 4 lookup_len = .lookup_len - 1; T; 3719 4 IF .log_buf [.lookup_len - 1] EQLU %C':' ! If two colons it's a node/; 3720 4 THEN lookup_len = .lookup_len - 1e; 3721 4 ELSE ; 3722 4 zero_compress:; 3723 5 BEGIN2; 3724 5 MACRO$; 3725 5 !N; 3726 5 ! NEXT_CHAR gets the next character and returns true if success; 3727 5 !; M 3728 5 next_char =; M 3729 5 BEGIN L];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 125-];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38) '; M 3730 5 char = .(.ptr)<0, 8, 1>;e; M 3731 5 ptr = .ptr + 1;!; M 3732 5 .ptr LEQA .end_ptr ; 3733 5 END %; ; 3734 5 ; 3735 5 REGISTER; 3736 5 char; ; 3737 5 ; 3738 5 LOCALf; 3739 5 ptr, ; 3740 5 end_ptr,_; 3741 5 zero_count,; 3742 5 status,; 3743 5 i;- ; 3744 5 7; 3745 5 ptr = log_buf [0]; ! Start of scanE/; 3746 5 end_ptr = .ptr + .lookup_len;U ; 3747 5 g; 3748 5 IF NOT next_char THEN LEAVE zero_compress; ! The first two characters must be letters /; 3749 5 status = ch$classify (.char); H; 3750 6 IF (.status NEQU ch_alpha) AND (.status NEQU ch_lower)+; 3751 5 THEN LEAVE zero_compress;rg; 3752 5 IF NOT next_char THEN LEAVE zero_compress; ! The first two characters must be letters /; 3753 5 status = ch$classify (.char); H; 3754 6 IF (.status NEQU ch_alpha) AND (.status NEQU ch_lower)+; 3755 5 THEN LEAVE zero_compress;E!; 3756 5 zero_count = 0;t<; 3757 5 WHILE next_char DO ! Now look for zeros#; 3758 5 IF .char EQLU %C'0' .; 3759 5 THEN zero_count = .zero_count+1; 3760 5 ELSE EXITLOOP;LX; 3761 5 IF .zero_count EQLU 0 THEN LEAVE zero_compress; ! If none, then leave.P; 3762 5 IF .ptr GTRU .end_ptr THEN ! If no following characters,:; 3763 6 BEGIN ! Then just lop off the zeros6; 3764 6 lookup_len = .lookup_len - .zero_count;#; 3765 6 LEAVE zero_compress;t; 3766 5 END; 5; 3767 5 DO ! Now look for octal digits82; 3768 5 IF ch$classify (.char) NEQU ch_oct ?; 3769 5 THEN LEAVE zero_compress ! Anything else, exit1"; 3770 5 WHILE next_char;A; 3771 5 ptr = log_buf [2]; ! Now chop out the zeros.6; 3772 5 end_ptr = log_buf [2] + .zero_count;9; 3773 5 lookup_len = .lookup_len - .zero_count;r7; 3774 5 DECR i FROM (.lookup_len - 2) TO 0 DO;; 3775 6 BEGIN6; 3776 6 (.ptr)<0, 8, 1> = .(.end_ptr)<0, 8, 1>;; 3777 6 ptr = .ptr + 1;&; 3778 6 end_ptr = .end_ptr + 1;; 3779 5 END; ; 3780 4 END;; 3781 3 END; ; 3782 3 ; 3783 3 ! ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 126 ];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38)oC; 3784 3 ! Settup the input logical name length and address D; 3785 3 ! in the logical descriptor block. Then attempt toE; 3786 3 ! do the translation. The block_type, table_number, H; 3787 3 ! address_base, matching_tcb_ucb fields and $TONYL 00Aigfwere0; 3788 3 ! settup during initialization.; 3789 3 ! ; 3790 3 ;; 3791 3 logical_descriptor [length] = .lookup_len;uZ; 3792 3 logical_descriptor [address_disp_apr6] = log_buf [0] + (apr6_v - apr5_v);I; 3793 3 $TONYL = .saved_inhibit_mask; ! Settup the inhibit mask Y; 3794 3 logical_descriptor [block_type] = .init_logical_descriptor [block_type];.]; 3795 3 logical_descriptor [table_number] = .init_logical_descriptor [table_number];$]; 3796 3 logical_descriptor [address_base] = .init_logical_descriptor [address_base];e; 3797 3 logical_descriptor [matching_tcb_ucb] = .init_logical_descriptor [matching_tcb_ucb];e ; 3798 3 O; 3799 3 IF TBSRC_BLI (logical_descriptor; lnb_base) THEN RETURN error;; ; 3800 3 C; 3801 3 KISAR6 = .lnb_base; ! Map the logical name blocknK; 3802 3 equiv_len = .lnb [equivalence_length]; ! Return the lengthb ; 3803 3 ; 3804 3 !T; 3805 3 ! The equivalence string follows the logical name string in the lnb; 3806 3 !O; 3807 3 equiv_addr = lnb [logical_name_start] + .lnb [logical_length];l ; 3808 3 ; 3809 3 !,; 3810 3 ! Return terminal if it is.; 3811 3 !N; 3812 3 RETURN IF .lnb [terminal_logical] THEN terminal ELSE success; ; 3813 3 ; 3814 3 END; 3815 2 ELSEv8; 3816 2 RETURN error; ! No logical comming in7; 3817 1 END; ! End of routine find_equivalenceu .NLISTs .LIST BIN,LOC .LIST .PSECT $OWN$, D  .EVENLOG.BUF:.BLKB 3777LNB= -400000 .SBTTL FIND.EQUIVALENCE Find Equivalence String .PSECT $CODE$, RO  .NLIST .ENABL LSB  .LISTFIND.EQUIVALENCE:. ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 127;];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38)  MOV R3,-(SP) ; 3623 MOV R4,-(SP)n MOV R5,-(SP)n SUB #16,SPu MOV R2,R4 ; *,LOGICAL.LENI MOV R1,R0 ; *,LOGICAL.ADDR TST R4 ; LOGICAL.LEN 3691 BNE 1$0 JMP 15$,1$: CMPB (R0),#137 ; LOGICAL.ADDR,* 3694 BNE 4$ % CMP R4,#1 ; LOGICAL.LEN,* 3695 BNE 2$I CLR R1 ; 3698D BR 3$)2$: MOV #1,(SP) ; *,EQUIV.ADDR 36991) ADD R0,(SP) ; LOGICAL.ADDR,EQUIV.ADDRX. MOV R4,2(SP) ; LOGICAL.LEN,EQUIV.LEN 3700 DEC 2(SP) ; EQUIV.LENP MOV #3,R1 ; 36983$: MOV R1,R0 ; 3695, BR 14$M(4$: MOV R4,R1 ; LOGICAL.LEN,* 3713 MOV R0,R2 ; LOGICAL.ADDR,* MOV #LOG.BUF,R3 JSR PC,CH$COPYC) SUB #LOG.BUF,R3 ; *,LOOKUP.LEN 3714B1 CMPB LOG.BUF-1(R3),#72 ; *(LOOKUP.LEN),* 3715P BNE 12$ DEC R3 ; LOOKUP.LEN 3718I1 CMPB LOG.BUF-1(R3),#72 ; *(LOOKUP.LEN),* 3719  BNE 5$V DEC R3 ; LOOKUP.LEN 3720  BR 12$ ; 3719X&5$: MOV #LOG.BUF,R2 ; *,PTR 3745) MOV R3,R5 ; LOOKUP.LEN,END.PTR 3746# ADD R2,R5 ; PTR,END.PTR1# MOVB (R2)+,R1 ; PTR,CHAR 3748  CMP R2,R5 ; PTR,END.PTR7 BHI 12$ JSR PC,CH$CLASSIFY ; 3749 CMP R0,#4 ; STATUS,* 3750 BEQ 6$3 CMP R0,#1 ; STATUS,* BNE 12$ ; 3751&6$: MOVB (R2)+,R1 ; PTR,CHAR 3752 CMP R2,R5 ; PTR,END.PTR1 BHI 12$ JSR PC,CH$CLASSIFY ; 3753 CMP R0,#4 ; STATUS,* 3754 BEQ 7$E CMP R0,#1 ; STATUS,* BNE 12$ ; 3755"7$: CLR R4 ; ZERO.COUNT 3756 ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 128 ];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38)T&8$: MOVB (R2)+,R1 ; PTR,CHAR 3757 CMP R2,R5 ; PTR,END.PTR1 BHI 9$B CMP R1,#60 ; CHAR,* 3758C BNE 9$  INC R4 ; ZERO.COUNT 3759P BR 8$ ; 3758"9$: TST R4 ; ZERO.COUNT 3761 BEQ 12$# CMP R2,R5 ; PTR,END.PTR 3762$ BLOS 10$7, SUB R4,R3 ; ZERO.COUNT,LOOKUP.LEN 3764 BR 12$ ; 3763c$10$: JSR PC,CH$CLASSIFY ; 3768 CMP R0,#3 BNE 12$ ; 3769# MOVB 00Ai;icDATADATADATADATADATADATADATA(R2)+,R1 ; PTR,CHAR 3770- CMP R2,R5 ; PTR,END.PTRP BLOS 10$I% MOV #LOG.BUF+2,R2 ; *,PTR 3771,) MOV R4,R5 ; ZERO.COUNT,END.PTR 3772! ADD R2,R5 ; LOG.BUF+2,END.PTR , SUB R4,R3 ; ZERO.COUNT,LOOKUP.LEN 3773$ MOV R3,R0 ; LOOKUP.LEN,I 3774 SUB #2,R0 ; *,I7 BLT 12$-11$: MOVB (R5)+,(R2)+ ; END.PTR,PTR 3776  DEC R0 ; I 3774O BGE 11$612$: MOV R3,4(SP) ; LOOKUP.LEN,LOGICAL.DESCRIP 37918 MOV #LOG.BUF+20000,10(SP) ; *,LOGICAL.DESCRIP+4 3792) MOV SAVED.INHIBIT.MASK,$TONYL ; 3793RB MOVB INIT.LOGICAL.DESCRIPTOR+7,13(SP); *,LOGICAL.DESCRIP+6 3794B MOVB INIT.LOGICAL.DESCRIPTOR+6,12(SP); *,LOGICAL.DESCRIP+6 3795A MOV INIT.LOGICAL.DESCRIPTOR+2,6(SP) ; *,LOGICAL.DESCRIP+2 3796M) MOV INIT.LOGICAL.DESCRIPTOR+10,14(SP) ; ,# ; *,LOGICAL.DESCRIP+10 3797) MOV #4,R0 ; 3799! ADD SP,R0 ; LOGICAL.DESCRIP,*B JSR PC,TBSRC.BLI, BLO 15$% MOV R3,KISAR6 ; LNB.BASE,* 3801#! CLR 2(SP) ; EQUIV.LEN 3802E$ MOVB @#140011,2(SP) ; *,EQUIV.LEN! CLR (SP) ; EQUIV.ADDR 3807G$ MOVB @#140010,(SP) ; *,EQUIV.ADDR! SUB #37766,(SP) ; *,EQUIV.ADDRD BIT #1,@#140004 ; 3812E BEQ 13$ MOV #3,R0 BR 16$A13$: MOV #1,R014$: BR 16$ ; 3816 15$: CLR R0 ; 3623E I];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 129 ];X1.10 Find Equivalence String 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (38)C!16$: MOV 2(SP),R2 ; EQUIV.LEN,*V MOV (SP)+,R1 ; EQUIV.ADDR,* ADD #14,SP MOV (SP)+,R5 MOV (SP)+,R4# MOV (SP)+,R3  RTS PCD9; Routine Size: 168 words, Routine Base: $CODE$ + 10564 /; Maximum stack depth per invocation: 13 wordsV .NLIST4 .DSABL LSB; .NLIST BIN,LOCC .LIST 3];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 130P\;X1.10 Convert RAD50 to ASCII 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (39)+; 3818 1 %SBTTL 'Convert RAD50 to ASCII'Vz; 3819 1 ROUTINE RAD50_to_ASCII (ascii_len, ascii_addr, rad50_addr; return_ascii_addr) : RAD50_to_ASCII_l NOVALUE = ; 3820 1 ; 3821 1 !++E ; 3822 1 !a%; 3823 1 ! FUNCTIONAL DESCRIPTION:o ; 3824 1 !K; 3825 1 ! Convert a RAD50 string to ASCII. Trailing blanks suppressed.e ; 3826 1 !6; 3827 1 !--B; 3828 2 BEGINg; 3829 2 MAPr-; 3830 2 ascii_addr : REF VECTOR [,BYTE],O4; 3831 2 return_ascii_addr : REF VECTOR [,BYTE],%; 3832 2 rad50_addr : REF VECTOR; ; 3833 2 ; 3834 2 LOCALa4; 3835 2 t : VECTOR [2], ! Temporary for divide; 3836 2 char,; 3837 2 control; ; 3838 2 3; 3839 2 return_ascii_addr = ascii_addr [0];8 ; 3840 2 ; 3841 2 ! 3; 3842 2 ! Move the string to output buffer.; 3843 2 ! 2; 3844 2 control = 0; ! Initialize control ; 3845 2 .; 3846 2 DECR i FROM .ascii_len TO 1 DO; 3847 3 BEGIN; 3848 3 BUILTIN; 3849 3 EDIV; ; 3850 3 ; 3851 3 IF .control EQL 0; 3852 3 THEN8; 3853 4 BEGIN; 3854 4 t [1] = 0;8); 3855 4 t [0] = .rad50_addr [0];8-; 3856 4 rad50_addr = rad50_addr [1];i!; 3857 4 control = 40*40;1; 3858 3 END; ; 3859 3 0; 3860 3 IF .t [0] GTRU (39*40 + 39)*40 + 39; 3861 3 THENo; 3862 3 char = '?'; 3863 3 ELSE8; 3864 4 BEGIN0; 3865 4 EDIV (control, t, char, t [0]); ; 3866 4 $; 3867 4 SELECTONEU .char OF; 3868 4 SETl ; 3869 4 ; 3870 4 [0] :3; 3871 4 EXITLOOP;  t];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 131r\;X1.10 Convert RAD50 to ASCII 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (39) ; 3872 4 ; 3873 4 [1 TO 26] :8+; 3874 4 char = .char + %C'A' - 1; ; 3875 4 ; 3876 4 [27] :,; 3877 4 char = .char + %C'$' - 27; ; 3878 4 ; 3879 4 [28] :,; 3880 4 ch00Aigfar = .char + %C'.' - 28; ; 3881 4 ; 3882 4 [29] :,; 3883 4 char = .char + %C'?' - 29; ; 3884 4 ; 3885 4 [OTHERWISE] : ,; 3886 4 char = .char + %C'0' - 30;; 3887 4 TES;; 3888 3 END;0 ; 3889 3 +; 3890 3 return_ascii_addr [0] = .char;7; 3891 3 return_ascii_addr = return_ascii_addr [1];r#; 3892 3 control = .control/40;6; 3893 2 END; ! DECR ; 3894 2 ); 3895 1 END; ! RAD50_to_ASCII  .NLIST  .LIST BIN,LOC .LIST- .SBTTL RAD50.TO.ASCII Convert RAD50 to ASCII2 .NLIST .ENABL LSB  .LISTRAD50.TO.ASCII:; MOV R1,-(SP) ; 3819 MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP)r CMP -(SP),-(SP) CLR R5 ; CONTROL 3844% MOV R1,-(SP) ; ASCII.LEN,I 3846r BLE 8$i1$: TST R5 ; CONTROL 3851  BNE 2$s CLR 4(SP) ; T+2 3854) MOV (R3)+,2(SP) ; RAD50.ADDR,T 3855# MOV #3100,R5 ; *,CONTROL 38574&2$: CMP 2(SP),#174777 ; T,* 3860 BLOS 3$ MOV #77,R4 ; *,CHAR 3862 BR 7$ ; 3860!3$: MOV 2(SP),R1 ; T,* 3865  MOV 4(SP),R0 ; T,* DIV R5,R0 ; CONTROL,*( MOV R0,R4 ; *,CHAR (];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 132(\;X1.10 Convert RAD50 to ASCII 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (39) MOV R1,2(SP) ; *,T( TST R4 ; CHAR 3870 BEQ 8$ ; 3871  CMP R4,#32 ; CHAR,* 3873( BHI 4$7 ADD #100,R4 ; *,CHAR 3874 BR 7$ ; 3867"4$: CMP R4,#33 ; CHAR,* 3876 BNE 5$1 ADD #11,R4 ; *,CHAR 3877  BR 7$ ; 3867"5$: CMP R4,#34 ; CHAR,* 3879 BEQ 6$ ; 3880  CMP R4,#35 ; CHAR,* 3882: BNE 6$- ADD #42,R4 ; *,CHAR 3883( BR 7$ ; 3867"6$: ADD #22,R4 ; *,CHAR 388617$: MOVB R4,(R2)+ ; CHAR,RETURN.ASCII.AD 3890P! MOV R5,R1 ; CONTROL,* 38928 SXT R08 DIV #50,R07 MOV R0,R5 ; *,CONTROL  DEC (SP) ; I 38460 BNE 1$ 8$: ADD #6,SP ; 3819 MOV (SP)+,R5 MOV (SP)+,R4R MOV (SP)+,R3E MOV (SP)+,R1R RTS PCC8; Routine Size: 71 words, Routine Base: $CODE$ + 11304/; Maximum stack depth per invocation: 11 words  .NLIST .DSABL LSBE .NLIST BIN,LOC  .LIST ; 3896 1 (; 3897 1 END ! End of module ; 3898 1 ; 3899 0 ELUDOM .NLISTR .LIST BIN,LOC .LIST; OTS external references .GLOBL $SAVE5, $SAVE3, $SAVE2 .PSECT $OWN$, D ( ];DRPFN Logical Name Directives 8-Aug-1986 14:08:19 VAX-11 Bliss-16 V4.1-582 Page 133(\;X1.10 Convert RAD50 to ASCII 8-Aug-1986 14:08:02 [RSX_SOURCES.DRPFN]DRPFN.BLI;502 (39) .EVEN; PSECT SUMMARYo;i!; Psect Name Words ; AttributesS1; $OWN$ 747 ; RW , D , LCL, REL, CON 2; $CODE$ 2473 ; RO , I , LCL, REL, CON2; $PLIT$ 100 ; RO , D , LCL, REL, CON; Library Statistics;L9; -------- Symbols -------- Pages ProcessingD9; File Total Loaded Percent Mapped Time1;i\; SYS$COMMON:[SYSLIB]RSX11M.L16;1 1500 5 0 96 00:00.2[; SYS$COMMON:[SYSLIB]FCS11.L16;1 396 32 8 42 00:00.2i; COMMAND QUALIFIERS7; BLISS/PDP/MACH=(ASS,NOBIN)/NOOBJ/LIST=DRPFN.MAC DRPFN #; Size: 2473 code + 848 data words ; Run Time: 01:39.8; Elapsed Time: 02:38.6; Lines/CPU Min: 2345; Lexemes/CPU-Min: 19712; Memory Used: 567 pages; Compilation Complete e .SBTTL Assign the LUN; B; This routine is called to assign the LUN. This is a duplication;; of the code in DRASG. DRASG should be moved into the 4th 3; directive common so that this code may be common.i;;#; R3=ADDRESS OF THE LUN IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.R,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; R0=Device name; R1=Unit number; R2=Terminal logical flag;:?; Outputs: The address of a routine to call to return status iso; returned in R0;e&; Directive s00Aj;icDATADATADATADATADATADATADATAtatus of +1 is returned.;e5; Directive status of 'D.RS90' is returned if a file 2; is open or unit attached on the specified LUN.5; Directive status of 'D.RS92' is returned if devicem; and/or unit is invalid. ;- .PSECTEDNAME: .BLKW 1UNITN: .BLKW 1TFLAG: .BLKW 1 TUCB: .BLKW 1D LUN.ASSIGN:  MOV R0,DNAME ; Save inputsc MOV R1,UNITNi MOV R2,TFLAGT% CALL $MPLUN ; Map LUN to device UCBa" TST (R1) ; File accessed on LUN? BNE 40$ ; If ne yese# MOV R0,-(SP) ; Save address of UCB+- MOV R1,R4 ; Save address of second LUN wordS" MOV DNAME,R2 ; Get name of device MOVB UNITN,R0 ; Get unit number .IF DF M$$MUP$ BIT #T3.SLV,T.ST3(R5) ; Slave task?2 BNE 17$ ; If ne yes, bypass logical device table .ENDC TST TFLAG ;L1 BNE 17$ ; Terminal logical name. don't do more  ; translations. MOV T.UCB(R5),R1 ; Get the current task's ti: CALL $GTUSR: MOV #$LNTDR,-(SP) ; Resolve any logical name translations5 CALL $MPDC3 ; Use routine in third directive common / BCC 17$ ; If CC, successfully matched logicalr3 TST R3 ; See if error occurred or no match at all0) BNE 50$ ; If ne, invalid match occurredT2 MOV #$LOGHD,R3 ; Point to logical assignment list-13$: MOV (R3),R3 ; Get address of next entryT BEQ 17$ ; If eq end of listl* TSTB L.TYPE(R3) ; System wide assignment? BEQ 15$ ; If eq yes)1 CMP L.UCB(R3),T.UCB(R5) ; TI: UCB address match?V BNE 13$ ; If ne no*15$: CMP R2,L.NAM(R3) ; Device name match? BNE 13$ ; If ne no( CMPB R0,L.UNIT(R3) ; Unit number match? BNE 13$ ; If ne no. MOV L.ASG(R3),R1 ; Get assignment UCB address BR 25$ ; Finish in common code517$: MOV #$DEVHD,R3 ; Point to physical device tablesg+20$: MOV (R3),R3 ; Get address of next DCB  BEQ 50$ ; If eq end of tables & CMP R2,D.NAM(R3) ; Device name match? BNE 20$ ; If ne noA CMPB R0,D.UNIT(R3) ; Unit greater than or equal to low boundary?e BLO 20$ ; If lo noA CMPB R0,D.UNIT+1(R3) ; Unit less than or equal to high boundary?  BHI 20$ ; If hi no3 SUB D.UNIT(R3),R0 ; Calculate relative unit numberM# BIC #177400,R0 ; Clear excess bitsa/ MOV D.UCBL(R3),R1 ; Get length of UCB in bytesM' CALL $MUL ; Calculate number of bytest, ADD D.UCB(R3),R1 ; Calculate address of UCB25$: ; Ref labelf .IF DF V$$TRM# MOV (R1),R3 ; Point to device DCB7 CMP D.NAM(R3),#"VT ; Is the device a virtual terminal?t BNE 26$ ; If ne no0 CMP U.PTCB(R1),R5 ; Is issuing task the parent? BEQ 26$ ; If eq no1 CMP R1,T.UCB(R5) ; Is issuing task an offspring?S BNE 50$ ; If ne no .ENDC026$: MOV (SP)+,R3 ; Was LUN previously assigned? BEQ 30$ ; If EQ no2 CMP R5,U.ATT(R3) ; Unit attached to current task? BNE 27$ ; If NE no/ MOV R1,-(SP) ; Save new assignment UCB address: MOV R1,R0 ; Copy UCB address' CALL $MPLND ; Map to real UCB addressC3 MOV (SP)+,R1 ; Retrieve new assignment UCB addressm/ CMP R0,R3 ; New assignment to same final UCB?; BNE 35$ ; If NE no127$: MOV R3,R5 ; Copy old assignment UCB addresss& MOV R1,-(R4) ; Assign LUN to new unit. MOV R1,TUCB ; Save the UCB address to return CALL $IOKIL" CLR R0 ; No bad status to return& MOV TUCB,R1 ; Return the UCB address31$: RETURN ;f*30$: MOV R1,-(R4) ; Assign LUN to new unit BR 31$s(35$: MOV R1,-(SP) ; Save new UCB pointer .IF DF X$$HDR( MOV $SAHPT,R1 ; Get task header address .IFFn( MOV $HEADR,R1 ; Get task header address .ENDC- ADD #H.NLUN,R1 ; Point to the number of LUNs  MOV (R1),-(SP) ; Pick up counts637$: CMP (R1)+,(R1)+ ; Advance to next UCB pointer + 2+ CMP R1,R4 ; Same LUN as being reassigned?I BEQ 39$ ; If eq yesa( MOV -2(R1),R0 ; Get this LUN assignment# BEQ 39$ ; If eq, LUN not assigned/ CALL $MPLND ; Follow any redirect; handle ti:s4 CMP R0,R3 ; LUN assigned to same dev as reass LUN? BNE 39$ ; No, branch TST (SP)+ ; Remove count& MOV (SP)+,R1 ; Get new LUN assignment+ BR 27$ ; If eq yes, attach can be ignored "39$: DEC (SP) ; Point to next LUN BGT 37$ ; Try againn CMP (SP)+,(SP)+ ; Clean s00A j jftack)40$: MOV #RS90,R0 ; Status return routinee RETURNe50$: TST (SP)+ ; Clean stacke% MOV #RS92,R0 ; Status return routines RETURN*RS90: DRSTS D.RS90 ; Set directive status*RS92: DRSTS D.RS92 ; Set directive status P8 .SBTTL Registers save and restore routines for BLISS-16; B; Register save and restore routines used by BLISS generated code.;i .PSECT BL$COD,RO,I,LCL,CON  $SAVE2:g MOV R2,-(SP)C MOV R1,-(SP)t MOV 4(SP),R1T JSR PC,@(SP)+ BR RE2($SAVE3:; MOV R2,-(SP) MOV R3,-(SP)R MOV R1,-(SP)r MOV 6(SP),R1T JSR PC,@(SP)+ BR RE3 $SAVE4:e MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP)R MOV R1,-(SP)T MOV 8.(SP),R1 JSR PC,@(SP)+ BR RE4R$SAVE5: MOV R2,-(SP) MOV R3,-(SP)B MOV R4,-(SP)a MOV R5,-(SP)r MOV R1,-(SP)S MOV 10.(SP),R1t JSR PC,@(SP)+ MOV (SP)+,R5eRE4: MOV (SP)+,R4dRE3: MOV (SP)+,R3 RE2: MOV (SP)+,R2 MOV (SP)+,R1g RTS PC, A .SBTTL Stub routines to call routines in other directive commons; .PSECT(;+C; $DCBTA - Routine to turn a binary value into an ASCII text stringE; ; Inputs:); R0 - Number to be translated into ASCIIP3; R3 - Pointer to buffer to store translated numberB;E ; Outputs:$; R3 - Points past the number string;RH; This routine will not translate a zero unit number into an ASCII digit;M;- DCBTA.BLI:, BIC #177400,R0 ;PREVENT SIGN PROPAG. IN ASH! ;(0; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;K; D. N. CUTLER 6-SEPT-73;); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:S;R; P. J. BEZEREDI ; M. S. FOX.; T. M. MARTIN;-; MODIFIED BY:; ; B. S. MCCARTHY 23-MAY-82 11.01;E4; BM255 -- ADD P$$RFL, P$$RTY CONDITIONALS FOR P/OS;(:; SPECIFY FLOATING POINT, POWERFAIL, AND RECEIVE AST TRAPS;9; MACRO LIBRARY CALLSU;E# .MCALL HWDDF$,HDRDF$,TCBDF$,PKTDF$.% HWDDF$ ;DEFINE HARDWARE BIT VALUESR PKTDF$ ;DEFINE AST CODES % HDRDF$ ;DEFINE TASK HEADER OFFSETSE, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+$; **-$DRPER-SPECIFY PARITY ERROR AST; H; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT PARITY ERROR8; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK.; ; DPB FORMAT:C;I#; WD. 00 -- DIC(165.),DPB SIZE(2.).I,; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO.; ; INPUTS:R;A9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. +; R3=ADDRESS OF THE AST ADDRESS IN THE DPB.N/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.T,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;C*; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED.&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED..8; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED00 j;icDATADATADATADATADATADATADATA IF AST'S ARE ; ALREADY NOT DESIRED.9; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE O#; WAS ISSUED FROM AN AST ROUTINE. ;- .ENABL LSBO .IF DF P$$RTY E<$DRPER::MOV #AS.PEA,R4 ;GET CODE FOR PARITY ERROR CONTRL BLK- MOV #21.,-(SP) ;SET NUMBER OF AST PARAMETERS 2 MOV #28.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE5 MOV #,-(SP) ;SET CODE FOR CONTROL BLOCKR BR 10$ ;FINISH IN COMMON CODE .ENDC ; DF P$$RTY T;+'; **-$DRREX-SPECIFIY REQUESTED EXIT ASTN;ID; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT REQ EXIT8; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK.G; WHEN THE AST OCCURS, IT BECOMES DESPECIFIED FOR NON PRIVILEGED TASKS.EB; NON PRIVILEGED TASKS MAY NOT RESPECIFY THIS AST AFTER IT OCCURS.; ; DPB FORMAT:R;#; WD. 00 -- DIC(167.),DPB SIZE(2.).S,; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO.; ; INPUTS: ;C9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.+; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.O,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)C;,*; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED.&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED..8; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ; ALREADY NOT DESIRED.9; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE O#; WAS ISSUED FROM AN AST ROUTINE. ;- $DRREX::3 BIT #T2.REX,T.ST2(R5) ;ABORT AST ALREADY EFFECTED?  BEQ 5$ ;IF EQ NO0 BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED?. BNE 50$ ;IF NE YES, TASK AT AST OR DST STATE0 BR 60$ ;NON-PRIV TASK, CAN'T REISSUE DIRECTIVE,5$: CLR -(SP) ;SET NUMBER OF AST PARAMETERS1 MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATEI! MOVB -(R3),R4 ;GET DPB SIZE BYTE  CMPB (R3)+,#2 ;SREA?  BEQ 7$ ;IF EQ, YES CMPB R4,#3 ;SREX?0 BNE 9$ ;IF NE NO7 ADD #2.*2,(SP) ;ADJUST NUMBER OF BYTES TO ALLOCATE AND- MOV #2,2(SP) ;NUMBER OF PARAMS FOR SREX FORME87$: MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK( MOV #AS.REA,R4 ;SET TYPE FOR ABORT AST  BR 10$ ;FINISH IN COMMON CODE%9$: DRSTS D.RS99 ;ILLEGAL DPB LENGTHR E;+(; **-$CAAST-COMMAND ARRIVAL AST FOR CLIS;C; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT COMMANDE:; ARRIVAL ASTS ARE DESIRED OR NOT DESIRED FOR THE CLI TASKC; THAT ISSUED THE DIRECTIVE. THIS ROUTINE IS ENTERED WHEN THE DRCLI ; MODULE DETECTS THIS DIRECTIVE.;V ; DPB FORMAT:E;F#; WD. 01 -- DIC(173.),DPB SIZE (2.)R+; WD. 02 -- AST ENTRY POINT ADDRESS OR ZEROM;# ; INPUTS:S;T8; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK*; R3=ADDRESS OF THE AST ADDRESS IN THE DPB.; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK+; R5=ADDRESS OF THE TCB OF THE CURRENT TASKT; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;I*; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED.%; DIRECTIVE STATUS OF +1 IS RETURNED ; C=1 IF DIRECTIVE IS REJECTED7; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S AREP; ALREADY NOT DESIRED.8; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE#; WAS ISSUED FROM AN AST ROUTINE.H8; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF DIRECTIVE,; WAS ISSUED BY A TASK WHICH IS NOT A CLI.3; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF THERE1; IS INSUFFICIENT POOL TO ALLOCATE AN AST BLOCKK6; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF THE DPB; SIZE IS ILLEGAL.;R;- .IF DF A$$CLI4$CAAST::BIT #T3.CLI,T.ST3(R5) ;IS CURRENT TASK A CLI BEQ 80$ ;IF EQ NO- MOV #AS.CAA,R4 ;SET TYPE FOR CMD ARRIVAL ASTF+ MOV #1,-(SP) ;SET NUMBER OF AST PARAMETERSS1 MOV #8.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE'8 MOV #,-(SP) ;PUSH TYPE FOR CMD ARRIVAL AST BR 10$ ;FINISH IN COMMON CODEE .ENDC ;A$$CLI;+0; **-$DRFEX-SPECIFY FLOATING POINT EXCEPTION AST;EJ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT FLOATING POINT8; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK.;. ; DPB FORMAT:I;U#; WD. 00 -- DIC(111.),DPB SI00 jjfZE(2.).,; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO.; ; INPUTS:P;S9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.O+; R3=ADDRESS OF THE AST ADDRESS IN THE DPB.P/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.H,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)R;I*; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED.&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED..?; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ALREADY ; NOT DESIRED.<; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE WAS; ISSUED FROM AN AST ROUTINE.N;- .IF DF F$$LPP T:$DRFEX::TST H.FPSA(R4) ;IS TASK BUILT WITH FLOATING POINT? BEQ 60$ ;IF EQ NOC ASSUME HF.FPP,100000R* TST $HFMSK ;DOES THE FPP HARDWARE EXIST? BMI 60$ ;IF MI NO ; MOV #AS.FPA,R4 ;GET CODE FOR FLOATING POINT CONTROL BLOCK ++ MOV #2,-(SP) ;SET NUMBER OF AST PARAMETERSD1 MOV #9.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATES5 MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK  BR 10$ ;FINISH IN COMMON CODEI .ENDC;+&; **-$DRPUT-SPECIFY POWER RECOVERY AST;$J; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT POWER RECOVERY8; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK.;T ; DPB FORMAT:S;E#; WD. 00 -- DIC(109.),DPB SIZE(2.).I,; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO.;T ; INPUTS:O;+9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.-+; R3=ADDRESS OF THE AST ADDRESS IN THE DPB.#/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;+5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)R;I-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.O&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.T?; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ALREADY ; NOT DESIRED.<; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE WAS; ISSUED FROM AN AST ROUTINE.A;- E .IF DF P$$RFL=$DRPUT::MOV #AS.PFA,R4 ;GET CODE FOR POWERFAIL CONTROL BLOCK ) CLR -(SP) ;SET NUMBER OF AST PARAMETERSS1 MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATED5 MOV #,-(SP) ;SET CODE FOR CONTROL BLOCKL BR 10$ ;FINISH IN COMMON CODE  .ENDC ; DF P$$RFL ;+ E,; **-$DRRRA-SPECIFY RECEIVE BY REFERENCE AST;DC; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT RECEIVESE; BY REFERENCE AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK.; ; DPB FORMAT:D;$"; WD. 00 -- DIC(21.),DPB SIZE(2.).,; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO.;S ; INPUTS:F;T9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.C+; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)E;S1; C=0 IF THE DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.#; C=1 IF THE DIRECTIVE IS REJECTED.P7; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ; ALREADY NOT DESIRED.8; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE#; WAS ISSUED FROM AN AST ROUTINE. ;- .IF DF P$$LAS N A$DRRRA::MOV #AS.RRA,R4 ;GET CODE FOR RECEIVE BY REF CONTROL BLOCKH) CLR -(SP) ;SET NUMBER OF AST PARAMETERS(1 MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE=5 MOV #,-(SP) ;SET CODE FOR CONTROL BLOCKC BR 10$ ;FINISH IN COMMON CODE  .ENDC;+; **-$DRRCV-SPECIFY RECEIVE ASTA; C; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT RECEIVER8; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK.;S ; DPB FORMAT:T;U#; WD. 00 -- DIC(107.),DPB SIZE(2.).N,; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO.;R ; INPUTS: ; 9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.+; R3=ADDRESS OF THE AST ADDRESS IN THE DPB.C/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.T,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;.5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)H00 %j_*jcDATADATADATADATADATADATADATA;D1; C=0 IF THE DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.#; C=1 IF THE DIRECTIVE IS REJECTED. ?; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ALREADYS; NOT DESIRED.<; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE WAS; ISSUED FROM AN AST ROUTINE. ;- H:$DRRCV::MOV #AS.RCA,R4 ;GET CODE FOR RECEIVE CONTROL BLOCK) CLR -(SP) ;SET NUMBER OF AST PARAMETERSF1 MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATES5 MOV #,-(SP) ;SET CODE FOR CONTROL BLOCKIA10$: BIT #T2.AST!T2.DST,(R2) ;ISSUED FROM AST OR AST'S DISABLED?  BNE 50$ ;IF NE YES  E .IF DF S$$LIB E MOV (R3),R2 ;GET AST ADDRESS" BEQ 30$ ;IF EQ AST'S NOT DESIRED. CALL $CALTA ;CALCULATE TRAP ADDRESS TO STORE MOV R2,R3 ;SAVE TRAP ADDRESS N .IFFU E MOV (R3),R3 ;GET AST ADDRESS" BEQ 30$ ;IF EQ AST'S NOT DESIRED L .ENDC R7 CALL $SRAST ;SEARCH FOR A SPECIFIED AST CONTROL BLOCK; BCC 20$ ;IF CC, ALREADY SET UP% MOV #C.LGTH,R1 ;GET SIZE TO ALLOCATE 0 CMP R4,#AS.PEA ;PARITY ERROR AST CONTROL BLOCK? BNE 15$ ;IF NE NOD8 MOV #A.PLGH,R1 ;ALLOCATE A BIGGER PACKET FOR PARAMETERS-15$: CALL $ALOCB ;ALLOCATE AST CONTROL BLOCKI# BCS 70$ ;IF CS ALLOCATION FAILURE / MOV $TKTCB,R1 ;GET TCB ADDRESS OF CURRENT TASKV< MOV T.SAST(R1),(R0) ;LINK NEW AST CONTROL BLOCK IN THE LIST MOV R0,T.SAST(R1) ;/20$: MOV R0,R1 ;COPY AST CONTROL BLOCK ADDRESSA- TST (R1)+ ;POINT TO LENGTH OF CONTROL BLOCK$5 MOV (SP)+,(R1)+ ;SET OFFSET TO CONTROL BLOCK ADDRESSA1 MOV (SP)+,(R1)+ ;SET NUMBER OF BYTES TO ALLOCATE # MOV R3,(R1)+ ;SET AST TRAP ADDRESS.5 MOV (SP)+,(R1) ;SET NUMBER OF PARAMETERS TO TRANSFERC BR 40$ ;TAKE COMMON EXIT=30$: CALL $SRAST ;SEARCH FOR A SPECIFIED AST CONTROL BLOCK ,+ BCS 60$ ;IF CS, AST'S ALREADY NOT DESIREDS. CMP R4,#AS.REA ;IS THIS A REQUESTED EXIT AST? BNE 35$ ;IF NE NOR6 BIC #T2.REX,T.ST2(R5) ;CLEAR REQUESTED EXIT AST FLAG 635$: MOV (R0),(R1) ;REMOVE CONTROL BLOCK FROM THE LIST2 MOV #C.LGTH,R1 ;GET LENGTH OF BLOCK TO DEALLOCATE0 CMP R4,#AS.PEA ;PARITY ERROR AST CONTROL BLOCK? BNE 37$ ;IF NE NOT MOV #A.PLGH,R1 ;GET PACKET SIZE/37$: CALL $DEACB ;DEALLOCATE AST CONTROL BLOCKE-40$: DRSTS +1 ;RETURN DIRECTIVE STATUS OF +1P(50$: DRSTS D.RS80 ;SET DIRECTIVE STATUS'60$: DRSTS D.RS8 ;SET DIRECTIVE STATUS,'70$: DRSTS D.RS1 ;SET DIRECTIVE STATUSB .IF DF A$$CLI(80$: DRSTS D.RS16 ;SET DIRECTIVE STATUS .ENDC .DSABL LSB  .ENDNTROL BLOCK FROM THE LIST2 MOV #C.LGTH,R1 ;GET LENGTH OF BLOCK T .TITLE DRQIO .IDENT /15.05/N;D6; COPYRIGHT (c) 1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;X<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;I; D. N. CUTLER 8-OCT-73O; +; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:+;P; J. R. KAUFFMAN; J. M. LAWLER ; T. LEKASA; B. S. MCCARTHY;5+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:N; ; H. HUANG ; S. C. ADAMS ; S. M. THOMAS; J. W. BERZLE; B. S. MCCARTHY; L. B. MCCULLEY; ; MODIFIED BY:;B; K. L. NOEL 06-JAN-87 V15.00; ); KLN032 -- ADD IMPLICIT LUN ASSIGNMENTSS;R; K. L. NOEL 05-MAR-87 V15.01B;S,; KLN036 -- ADD SUPPORT FOR REMOTE OVERLAYS; ; K. L. NOEL 11-MAR-87 V15.02U;R<; KLN038 -- BYPASS CHECKS FOR NON-MOUNTED MOUNTABLE DEVICES; ON REMOTE SYSTEMS.; ; K. L. NOEL 6-APR-87 V15.03;C-; KLN040 -- FIX IMPLICIT ALUN CALL TO A JUMP ; ; K. L. NOEL 16-JUN-87 V15.04D; :; KLN054 -- ALLOCATE CPRBUF PACKET FOR KILL I/O FUNCTIONS;U"; ERIC POSTPISCHIL 20-JUL-87 15.05=; edp057 -- REMOVE CORRECT NUMBER OF ITEMS FROM KERNEL STACKI ; WHEN BACKING UP TASK'S PC.;V; MACRO LIBRARY CALLS-;D8 .MCALL F11DF$,HWDDF$,PKTDF$,SHDDF$,TCBDF$,PCBDF$,UCBDF$ .MCALL BGCK$A .MCALL CPRDF$ S0 F11DF$ ;DEFINE FILES-11 CONTROL BLOCK OFFSETS$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS* SHDDF$ ;DEFINE SHADOW RECORDING OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS00_-jjf1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSH, UCBDF$ ;DEFINE UNIT CONTROL BLOCK OFFSETS) CPRDF$ ;DEFINE COPROCESSOR DEFINITIONS ;N; LOCAL SYMBOLSS;. MAP6 = 140000;+; **-$DRQIO-QUEUE I/O REQUESTF'; **-$DRQIW-QUEUE I/O REQUEST AND WAIT.C; C; THESE DIRECTIVES INSTRUCT THE SYSTEM TO PLACE AN I/O REQUEST IN AOC; QUEUE OF PRIORITY ORDERED REQUESTS FOR A DEVICE-UNIT SPECIFIED BYAB; A LOGICAL UNIT NUMBER. IN ADDITION, IF THE DIRECTIVE IS QIO ANDH; WAIT AND AN EVENT FLAG IS SPECIFIED, THE TASK IS PUT INTO A WAIT STATE; FOR THE SPECIFIED EVENT FLAG.N;C ; DPB FORMAT:F;S%; WD. 00 -- DIC(1./3.),DPB SIZE(12.).I; WD. 01 -- I/O FUNCTION CODE. ; WD. 02 -- LUN AND UNUSED BYTE.A; WD. 03 -- EVENT FLAG NUMBER AND PRIORITY (PRIORITY IS IGNORED).(; WD. 04 -- ADDRESS OF I/O STATUS BLOCK.+; WD. 05 -- ADDRESS OF AST SERVICE ROUTINE.T; WD. 06 -- PARAMETER 1.; WD. 07 -- PARAMETER 2.; WD. 10 -- PARAMETER 3.; WD. 11 -- PARAMETER 4.; WD. 12 -- PARAMETER 5.; WD. 13 -- PARAMETER 6.;T ; INPUTS:P;I9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.P1; R3=ADDRESS OF THE I/O FUNCTION CODE IN THE DPB.)/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.U,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)S;F-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.S&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.D7; DIRECTIVE STATUS OF 'D.RS5' IS RETURNED IF SPECIFIED-; LUN IS NOT ASSIGNED.;- .ENABL LSB/$DRQIO::MOV (R3)+,-(SP) ;SAVE I/O FUNCTION CODEO% CALL $MPLUN ;MAP LUN TO UCB ADDRESSO BCC 10$ ;IF CC LUN ASSIGNEDD/ .IF DF C$$DFB&C$$RTB ;RUN TIME BINDING OF LUNSK3 BIT #T4.DFB,T.ST4(R5) ;TASK HAVE DEFERRED BINDING?  BEQ 5$ ;IF EQ NO T5 BIT #F5.RTB,$FMSK5 ;SYSTEM SUPPORT RUN TIME BINDING?  BEQ 5$ ;IF EQ NO0 TST (SP)+ ;REMOVE I/O FUNCTION CODE FROM STACK JMP $IMASG ;DO IMPLICIT ALUN .ENDC ;C$$DFB&C$$RTB '5$: DRSTS D.RS5 ;SET DIRECTIVE STATUS G10$: # .IF DF R$$AMD ;AUTOMOUNT/DISMOUNT , CMP $VERTK,R5 ;QIO FROM VERIFICATION TASK ?. BEQ 14$ ;IF EQ, YES - BREAKTHROUGH STALL I/O ASSUME US.SIO,200) TSTB U.ST2(R2) ;STALL I/O IN PROGRESS ?4' BMI 13$ ;IF MI, YES - DON'T QUEUE I/OG  .ENDC ; DF R$$AMD# BIT #1,(R1) ;OPERATION PENDING ?  BEQ 14$ ;IF EQ NOB13$:9 ADD #12,SP ; REMOVE FUNCTION, RETURN AND +1 FROM STACK.A0135$: SUB #2,$UMPC ;BACKUP TASK PC TO RE-EXECUTE) CALLR $TKWSE ;WAITFOR SIGNIFICANT EVENTE14$:$ .IF DF C$$RTK ;REMOTE TASK SUPPORT, BIT #F5.RTK,$FMSK5 ;REMOTE TASKS TURNED ON? BEQ 145$ ;IF EQ NO+ CMPB 1(SP),#IO.KIL/256. ;IS THIS I/O KILL? BNE 145$ ;IF NE NO/ CMP (R2),$XXLOW ;IS I/O KILL FOR A GENERIC UCB  BLO 145$ ;IF LO, NOU/ CMP (R2),$XXHGH ;IS I/O KILL FOR A GENERIC UCBO BHI 145$ ;IF HI, NOB MOV R3,-(SP) ;SAVE R3 MOV R0,-(SP) ; AND R0 MOV R1,-(SP) ; AND R1* MOV #AL$SWS,R0 ;CALL IS FROM SYSTEM STATE" MOV #1,R1 ;ONE BLOCK TO ALLOCATE CALL $CPALO ;GET PACKET4" BCC 143$ ;IF CC, ALLOCATION OKAY* ADD #14,SP ;GET RID OF JUNK ON THE STACK" BR 135$ ;GO TO BACK UP USER'S PC+143$: MOV R0,$CPPKT ;SAVE ADDRESS OF PACKET1 MOV (SP)+,R1 ;RESTORE R1, MOV (SP)+,R0 ; AND R0 MOV (SP)+,R3 ; AND R3 CLR $CPLUN ;6 MOVB -2(R3),$CPLUN ;STORE LUN NUMBER TO KILL I/O ON .ENDC ;C$$RTK145$: . BIT #DV.ISP!DV.OSP,U.CW1(R2) ;SPOOLED DEVICE? BEQ 16$ ;IF EQ NO#1 CMP U.ATT(R2),R5 ;IS ISSUING TASK THE DESPOOLER?O) BEQ 155$ ;IF EQ YES, I/O TO REAL DEVICEC1 BITB #US.MNT,U.STS(R2) ;SPOOLED DEVICE MOUNTED ?42 BNE 15$ ;IF NE NO (US.MNT IS DEVICE NOT MOUNTED)2 CMP U.ACP(R2),R5 ;ISSUING TASK THE DEVICE'S ACP ?) BEQ 155$ ;IF EQ YES, I/O TO REAL DEVICEB15$: CMPB 1(SP),#IO.WLB/256. ;WRITE LOGICAL FUNCTION NOT BY DSPLR? BNE 16$ ;IF NE NOS# DRSTS D.RS16 ;PRIVILEGE VIOLATIONN2155$: MOV R2,R0 ;DIRECT I/O TO ACTUAL SPOOLED DEV"16$: MOV (R0),R2 ;GET DCB ADDRESS' TST D.DSP(R2) ;IS THE DRIVER RESIDENT?D BNE 17$ ;IF NE YES# DRSTS D.RS6 ;SET DIRECTIVE STATUST&17$: MOV R0,-(SP) ;S00_5j*jcDATADATADATADATADATADATADATAAVE POINTER TO UCB. MOV R1,-(SP) ;SAVE POINTER TO SECOND LUN WORD( MOVB (R3),-(SP) ;SAVE EVENT FLAG NUMBER( CALL $CEFNG ;CONVERT EVENT FLAG NUMBER. BIC #1,R1 ;CLR GRP GLOBAL 2ND WORD INDICATOR) BIC R0,(R1) ;CLEAR SPECIFIED EVENT FLAG6 MOV R3,-(SP) ;SAVE ADDRESS OF I/O STATUS BLOCK ADDRES6 MOV (R3),R0 ;GET ADDRESS OF I/O STATUS BLOCK ADDRESS1 BEQ $DQLM2 ;IF EQ NO I/O STATUS BLOCK SPECIFIED;)$DQLM1::CLR -(SP) ;ZERO I/O STATUS BLOCKY MTPD$ (R0)+ ; CLR -(SP) ;S MTPD$ (R0) ;,$DQLM2::CALL $ALPKT ;ALLOCATE AN I/O PACKET .IF DF A$$CNT" MOV R0,-(SP) ;SAVE PACKET ADDRESS3 MOV T.ACN(R5),R0 ;LOCATE ACCOUNTING BLOCKS OF TASKU' BEQ 20$ ;IF EQ, NO ACCOUNTING ON TASKD) MOV #B.QIO,R1 ;OFFSET TO QIO COUNT FIELDE" CALL $ADAT1 ;INCREMENT QIO COUNT/20$: MOV (SP)+,R0 ;RESTORE PACKET ADDRESS TO R0A .ENDC? TALLY$ B.QIOC,XA$$IO,CPU ;COUNT AN I/O INITIATION FOR THIS CPUP .IF DF S$$HDW8 MOV #DV.DIR!DV.F11,R3 ;SEE IF DEVICE SUPPORTS SHADOWING; >; THE FOLLOWING INSTRUCTION DEPENDS ON THE UCB ADDRESS FOR THE$; CURRENT UCB BEING AT OFFSET 6(SP).;V MOV 6(SP),R1 ;GET UCB ADDRESS$ BIC U.CW1(R1),R3 ;ARE ALL BITS SET? BNE 23$ ;IF NE NO -- EXITN, BIT #DV.SQD,U.CW1(R1) ;COULD IT BE MAGTAPE? BNE 23$ ;IF NE YES -- EXIT" MOV U.UMB(R1),R1 ;GET UMB ADDRESS BEQ 23$ ;IF EQ NO UMBO;C; THE REPLACEMENT CONTROL TASK MUST BE SPECIAL CASED FOR SHADOWING.IC; IT IS THE ONLY TASK THAT MAY READ OR WRITE EITHER THE PRIMARY OR P;; THE SECONDARY DEVICE WITHOUT ITS FUNCTION BEING SHADOWED.T;U( CMP $RCTPT,R5 ;IS THIS I/O FROM RCT...? BEQ 23$ ;IF EQ YES# CMP 6(SP),M.UCBS(R1) ;PRIMARY UCB?C BEQ 21$ ;IF EQ YES$ CALL $DEPKT ;DEALLOCATE I/O PACKET# DRSTS D.RS16 ;PRIVILEGE VIOLATIONA;?A; DEVICE SUPPORTS SHADOW RECORDING AT THIS TIME. ALLOCATE THE ML(; NODE AND LINK IT IN THE LIST AT M.LHD.;M521$: BIT #MS.MDA,M.STS(R1) ;CAN WE ALLOCATE NEW ONES?  BNE 23$ ;IF NE NOH& MOV R0,-(SP) ;SAVE CURRENT I/O PACKET MOV R1,-(SP) ;SAVE UMB ADDRESSO& MOV #ML.LGH,R1 ;SET LENGTH OF ML NODE CALL $ALOCB ;GET PACKET  BCC 22$ ;IF CC GOT SPACE;S=; NOT ENOUGH SPACE FOR THE ML NODE IN THE SYSTEM POOL. SEEMSC=; A SHAME TO KILL THE I/O AFTER GETTING THE FIRST PACKET, ANDI=; NOT THE SECOND. MAYBE THE FINAL ANSWER IS TO LET THE FIRST.=; GO THRU AND ONLY CONSIDER IT A PROBLEM IF IT WAS A WRITE ORM>; A READ THAT FAILED. FROM THE STATISTICS, IT WOULD SEEM THAT<; THIS WOULD COVER THE VAST MAJORITY OF THE CASES (I.E. MOST; QIO FUNCTIONS ARE READS).;VC; FOR THE TIME BEING, IF WE CAN'T GET THE RESOURCES NOW, FORGET IT.2;  TST (SP)+ ;REMOVE UMB ADDRESSH% MOV (SP)+,R0 ;GET I/O PACKET ADDRESSO$ CALL $DEPKT ;DEALLOCATE I/O PACKET! DRSTS D.RS1 ;ALLOCATION FAILUREI%22$: MOV R0,R1 ;COPY ML NODE ADDRESSE CLR (R0)+ ;CLEAR LINK WORD' MOVB #ML.LGH,(R0)+ ;ML.LEN SET LENGTHW% MOVB #MT.PKT,(R0)+ ;ML.TYP SET TYPEF) CLR (R0)+ ;ML.DNC/UNUSED SET DONE COUNTH8 MOV 2(SP),(R0)+ ;ML.PRI SET PRIMARY I/O PACKET ADDRESS MOV (SP)+,R0 ;GET UMB ADDRESS4 MOV M.LHD(R0),(R1) ;LINK NEW NODE TO PREVIOUS FIRST- MOV R1,M.LHD(R0) ;POINT LISTHEAD TO NEW NODE & MOV (SP)+,R0 ;GET OLD I/O PACKET BACK23$: ;REFERENCE LABEL .ENDC .IF DF R$$LKL5 CLR I.PRM+16(R0) ;INITIALLY CLEAR LOCK ENTRY POINTER  .ENDC9 ADD #I.AADA,R0 ;POINT TO ATTACHEMENT DESCRIPTOR POINTERSL0 MOV R0,$ATTPT ;SAVE POINTER FOR $CKBFX ROUTINES% CLR (R0)+ ;CLEAR FIRST ATT DESC PTRH CLR (R0) ;SECOND4 SUB #I.AADA+2,R0 ;POINT BACK TO START OF I/O PACKET, INCB T.IOC(R5) ;INCREMENT I/O REQUEST COUNT6 MOV (SP)+,R3 ;RETRIEVE ADDRESS OF I/O STATUS BLOCK AD+ CMPB -10(R3),#3 ;IS FUNCTION QIO AND WAIT?P BNE 25$ ;IF NE NOR" MOV R0,-(SP) ;SAVE PACKET ADDRESS) MOVB 2(SP),R0 ;PICK UP EVENT FLAG NUMBERC BEQ 24$ ;IF EQ NONE SPECIFIEDC. CALL $CEFI ;CONVERT FLAG TO MASK AND ADDRESS% CALL $DRWFS ;PUT TASK IN WAIT STATEP .IF DF G$$GEF7 INC @$GEFPT ;KEEP GRP GLOBALS AROUND FOR WAITFOR TEST . INCB @$GFTCB ;INC GRP GBL USE COUNT FOR TASK .ENDC ; DF G$$GEF)24$: MOV (SP)+,R0 00_=jjf;RESTORE PACKET ADDRESS($25$: MOV R0,R4 ;COPY PACKET ADDRESS+ TST (R4)+ ;POINT TO SECOND WORD IN PACKET 7 MOVB T.PRI(R5),(R4)+ ;PRIORITY IS THAT OF ISSUING TASKK+ MOVB (SP)+,(R4)+ ;INSERT EVENT FLAG NUMBERG! MOV R5,(R4)+ ;INSERT TCB ADDRESSC3 MOV (SP)+,(R4)+ ;INSERT POINTER TO SECOND LUN WORDS# MOV (SP)+,R5 ;RETRIEVE UCB ADDRESST! MOV R5,(R4)+ ;INSERT UCB ADDRESST) MOV (SP)+,(R4) ;INSERT I/O FUNCTION CODE 3 CLR -(SP) ;SET FLAG TO QUEUE TO DRIVER (NE 0=ACP).) MOV R0,-(SP) ;SAVE ADDRESS OF I/O PACKETO4 CLR -(SP) ;CLEAR ADDRESS OF SECONDARY CONTROL BLOC" MOV SP,$TEMP0 ;MARK STACK ADDRESS( MOV (R4)+,-(SP) ;SAVE I/O FUNCTION CODE. CLR R1 ;ASSUME NO I/O STATUS BLOCK SPECIFIED. CLR R2 ;ASSUME NO I/O STATUS BLOCK SPECIFIED. MOV (R3)+,R0 ;GET ADDRESS OF I/O STATUS BLOCK BEQ 30$ ;IF EQ NONE SPECIFIEDR0 CALL $RELOC ;RELOCATE I/O STATUS BLOCK ADDRESS:30$: MOV R0,(R4)+ ;INSERT VIRTUAL ADDRESS OF I/O STATUS BL% MOV R1,(R4)+ ;INSERT RELOCATION BIASE* MOV R2,(R4)+ ;INSERT DISPLACEMENT ADDRESS .IF DF S$$LIB. MOV (R3)+,R2 ;GET AST SERVICE ROUTINE ADDRESS) CALL $CALTA ;CALCULATE ADDRESS TO STORES' MOV R2,(R4)+ ;STORE PROPER AST ADDRESSU .IFF 4 MOV (R3)+,(R4)+ ;INSERT AST SERVICE ROUTINE ADDRESS .ENDC) MOV (SP),R2 ;RETRIEVE I/O FUNCTION CODEB CLRB R2 ;CLEAR MODIFIER FLAGSF- SWAB R2 ;SWAP FUNCTION CODE INTO RIGHT BYTEA BNE 33$ ;IF NOT ZERO - OKS JMP FCKIL ;KILL I/O FUNCTION33$: ;REFERENCE LABEL .IF DF M$$MUP) TST U.CW1(R5) ;IS THIS MOUNTABLE DEVICE?2 BMI 35$ ;BRANCH IF YES -- ACCESS VALIDATED LATER' MOV U.OWN(R5),R0 ;IS THE DEVICE OWNED?A BEQ 35$ ;IF EQ NOV/ BITB #US.PUB,U.ST2(R5) ;PUBLIC ACCESS ALLOWED? BNE 35$ ;IF NE YES+ MOV $TKTCB,R1 ;POINT TO CURRENT TASK'S TCB0 CMP T.UCB(R1),R0 ;DEVICE OWNED BY CURRENT TASK? BEQ 35$ ;IF EQ YES0 BIT #T3.PRV,T.ST3(R1) ;CURRENT TASK PRIVILEGED? BNE 35$ ;IF NE YES% JMP IEPRI ;ELSE PRIVILEGE VIOLATIONI35$: ;ACCESS ALLOWEDB .ENDC& CMP R2,#31. ;FUNCTION CODE IN RANGE? BHI $IEIFC ;IF HI NO( MOV (R5),R1 ;GET ADDRESS OF DEVICE DCB3 ADD #D.MSK,R1 ;ASSUME FUNCTION CODE IN 0-15. RANGE # CMP R2,#15. ;0-15. FUNCTION CODE?P BLOS 40$ ;IF LOS YES& ADD #10,R1 ;POINT TO SECOND MASK SET# SUB #16.,R2 ;REDUCE FUNCTION CODEB#40$: ASL R2 ;CONVERT TO WORD INDEX?* MOV $BTMSK(R2),R2 ;GET FUNCTION MASK WORD( BIT R2,(R1)+ ;IS THIS A LEGAL FUNCTION? BEQ $IEIFC ;IF EQ NO< BITB #US.OFL!US.PDF,U.ST2(R5) ;DEV. OFFLINE OR PRIV. DIAG.?* BEQ 45$ ;IF EQ NO -- GO AHEAD AND USE IT/ BITB #US.OFL,U.ST2(R5) ;IS UNIT REALLY OFFLINES BEQ 42$ ;IF EQ NO# JMP IEOFL ;UNIT IS OFFLINE442$: MOV $TKTCB,-(SP) ;CHECK TO SEE IF TASK IS PRIV.- ADD #T.ST3,(SP) ;POINT TO STATUS WORD IN TCBO0 BIT #T3.PRV,@(SP)+ ;IS CURRENT TASK PRIVILEGED? BNE 452$ ;IF NE YESV JMP IEOFL ;OFFLINE ERROR452$:,. BIT #IQ.UMD,(SP) ;IS THI DIAGNOSTIC FUNCTION? BNE 453$ ;IF NE YESB JMP IEOFL ;OFFLINE ERROR453$:!645$: BIT R2,(R1)+ ;IS THIS FUNCTION A CONTROL FUNCTION BEQ 454$ ;IF EQ NO JMP FCCTL ;CONTROL FUNCTIONT454$:I" BIT R2,(R1)+ ;IS FUNCTION NOP'ED? BNE ISSUC ;IF NE YES! TST U.CW1(R5) ;MOUNTABLE DEVICE?P BPL 80$ ;IF PL NOS3 MOVB U.STS(R5),R0 ;GET STATUS BYTE FOR TESTS BELOW  .IF DF R$$AMD BIT R2,(R1) ;ACP FUNCTION ?E BEQ 46$ ;IF EQ NO * CMP #IO.APV,(SP) ;MOUNT OR DISMOUNT QIO ?% BEQ 48$ ;IF EQ YES, DOESN'T HAVE TOT ;BE MOUNTED; .ENDC ; R$$AMDO=46$: BITB #US.MNT!US.FOR,R0 ;VOLUME MOUNTED AND NOT FOREIGN ? ' BNE 60$ ;IF NE NOT MOUNTED OR FOREIGNJ BIT R2,(R1) ;ACP FUNCTION? BEQ 70$ ;IF EQ NO .48$: MOVB 1(SP),R2 ;RETRIEVE I/O FUNCTION CODE+ SUB #10,R2 ;NORMALIZE FOR POLISH DISPATCHI$ BLT 50$ ;IF LT TABLE INCONSISTANCY ASL R2 ;CONVERT TO WORD INDEXD3 MOV R5,-(SP) ;SAVE UCB ADDRESS FOR POLISH ROUTINES MOV R5,R0 ;P8 MOV I.LN2-I.PRM(R4),R1 ;SAVE ADDRESS OF SECOND LUN WORD" MOV R1,-(SP) ;FOR POLISH ROUTINES0 MOV $FCDSP(R2),R5 ;GET ADDRESS OF POLISH VECTOR$ JMP @(R5)+ ;EXECUTE POLISH ROUTINE;B; REGISTERS AT POLISH DISPATCH;G ; R0 - UCB; R1 -00_Ej*jcDATADATADATADATADATADATADATA ADDRESS 2ND LUN WORD$; R2 - NORMALIZED FCTN CODE,6; R3 - POINTER TO PARAMETERS, INITIALLY -> PARAMETER 12; R4 - POINTER INTO I/O PACKET, INITIALLY -> I.PRM;N; SP-> 2ND LUN WORD ADDRESS ; UCB ADDRESS; FUNCTION CODE0; $TEMP0->SECONDARY CONTROL BLOCK ADDRESS (OR 0); I/O PACKET ADDRESS ; QUEUE FLAG (0=DRIVER; NE=ACP);(K; TASK HEADER IS ASSUMED TO BE MAPPED FOR ALL OF THE THREADED CODE ROUTINESJ;@; &; DEVICE TABLE MASK WORD INCONSISTANCY;TE50$: BGCK$A BF.QIO,BE.IDC,FATAL ;DEVICE TABLE MASK WORD INCONSISTANCYR;E*; DEVICE NOT MOUNTED OR MOUNTED AS FOREIGN;T<60$: BITB #US.MNT,R0 ;DEVICE NOT MOUNTED OR MOUNTED FOREIGN?$ BEQ 65$ ;BRANCH IF MOUNTED FOREIGN;K; ON REMOTE SYSTEMS, IF DEVICE IS ONE OF OUR GENERIC TYPES, THEY WILL NEVERO ; BE MOUNTED; BYPASS ALL CHECKS HERE; % .IF DF C$$RMT ;REMOTE HOST SUPPORTS S BIT #HF.RMT,$HFMSK ;TURNED ON?T BEQ 63$ ;IF EQ NOJ* CMP (R5),$XXLOW ;DCB LOWER THAN GENERICS? BLO 63$ ;IF LO YES' CMP (R5),$XXHGH ;HIGHER THAN GENERICS?W" BLOS FCTRN ;IF LOS NO, ALLOW I/O63$: .ENDC ;C$$RMT; DEVICE NOT MOUNTED; ALLOW TRANSFER FUNCTION IF(; THE LOADR TASK IS DOING LOGICAL I/O IN+; VIRGIN SYSTEMS WITH THE DISK NOT MOUNTED.,; ; ACP FUNCTIONS ARE ILLEGALT;S" BITB #US.VV,R0 ;VOLUME VALID SET? BEQ 75$ ;IF EQ NOE BIT R2,(R1) ;ACP FUNCTION? BNE 75$ ;IF NE YES BR FCTRN ;ALLOW TRANSFER;B; MOUNTED FOREIGN#; CHECK VOLUME MOUNTED TO THIS USERN; IF ACP FUNCTION:; ERROR IF NO ACP%; INCREMENT VOLUME TRANSACTION COUNTC.; COPY PARAMETERS 1-6 (NO POLISH IF FOREIGN).; QUEUE TO ACP UNLESS UC.QUE ALSO SET (U.CTL); IF TRANSFER FUNCTION:K6; ADDRESS CHECK AND RELOCATE BUFFER ADDRESS IN PARM 1,; MAP ADDRESS TO 18/22 BIT PHYSICAL ADDRESS; COPY PARAMETERS 2-6; QUEUE TO DRIVER;Q 65$: ;Q .IF DF M$$MUP/ CALL CXMOU ;CHECK VOLUME MOUNTED BY THIS USER; BCS 75$ ;ERROR .ENDC BIT R2,(R1) ;ACP FUNCTION? BEQ FCTRN ;NOT ACP-TRANSFERN$ TST U.ACP(R5) ;MOUNTED WITH AN ACP? BEQ 75$ ;IF EQ NO % INC 6(SP) ;SET FLAG TO QUEUE TO ACPI MOV U.VCB(R5),R1 ;GET VCB ADDRN BEQ FCXOP ;BR IF NO VCB) INC (R1) ;INCR VOL TRANS COUNT! BR FCXOP ;INSERT PARAMETERS 1-6E;AF; FUNCTION IS AN ILLEGAL FUNCTION-DECLARE ILLEGAL FUNCTION CODE STATUS;0$IEIFC::MOV #IE.IFC&377,R4 ;SET ILLEGAL FUNCTION JMP IECMN;;5; DEVICE MOUNTED AND NOT FOREIGN BUT NOT ACP FUNCTION;N-70$: CMP #IO.LOV,(SP) ;LOAD OVERLAY FUNCTION?N BEQ FCLOV ;IF EQ YES1 CMP #IO.LDO,(SP) ;LOAD D-SPACE OVERLAY FUNCTION?  BEQ FCLOV ;IF EQ YES2 MOV $TKTCB,R0 ;GET ADDRESS OF TCB OF CURRENT TASK( BIT #T3.PRV,T.ST3(R0) ;TASK PRIVILEGED?( BEQ 75$ ;IF EQ NO, PRIVILEGE VIOLATION .IF NDF R$$PROA? CMPB #IO.WLB/400,1(SP) ;IS IT A WRITE LOGICAL BLOCK FUNCTION ?T" BNE FCTRN ;IF NE NO, OK TO ISSUE/ BITB #US.LAB,U.STS(R5) ;ANSI MAGTAPE MOUNTED ?I# BNE FCTRN ;IF NE YES, OK TO ISSUEP1 MOV 6(R3),-(SP) ;SAVE FIRST HALF OF BLOCK NUMBERA% BIS 10(R3),(SP)+ ;BOTH HALVES ZERO ?C .ENDC ; DF R$$PRO) BNE FCTRN ;IF NE NOT LBN 0, OK TO ISSUEQ( CMP $RCTPT,R0 ;IS THE CURRENT TASK RCT?- BEQ FCTRN ;IF EQ, YES, ALLOW WRITE TO LBN 0I$75$: JMP IEPRI ;PRIVILEGE VIOLATION;O; INTERMEDIATE TO FCKILA;)76$: BR FCKIL ;BRANCH TO HANDLE KILL I/OL;K; DEVICE IS NOT MOUNTABLEI;E 80$: BIT R2,(R1) ;ACP FUNCTION? BEQ FCTRN ;IF EQ NON;IH; FUNCTION IS A FILE STRUCTURE FUNCTION FOR A NONFILE STRUCTURED DEVICE.H; INITION THIS MUST BE A READ OR WRITE VIRUTAL SINCE ALL OTHER FUNCTIONSH; HAVE BEEN EITHER ILLEGAL OR NOP'ED. MAP FUNCTION TO IT LOGICAL COUNTER;R> MOV #IO.WLB,I.FCN-I.PRM(R4) ;ASSUME FUNCTION IS WRITE VIRTUAL0 CMPB #IO.WVB/400,1(SP) ;WRITE VIRTUAL FUNCTION? BEQ FCTRN ;IF EQ YES@ MOV #IO.RLB,I.FCN-I.PRM(R4) ;SET FUNCTION TO READ LOGICAL BLOCK' BR FCTRN ;GO TRANSLATE BUFFER ADDRESSF .DSABL LSBQ;N@; FUNCTION IS A TRANSFER FUNCTION-ADDRESS CHECK AND MAP TRANSFER;FFCLOV: ;REFERENCE LABEL .IF DF U$$DAS!A$$CNTW2 CALL FACHL ;ADDRESS CHECK LOAD OVERLAY IN 00_MjjfUSER I BR FCTR1 ;ENTER COMMON CODEC .ENDC ; DF U$$DAS!A$$CNTR)FCTRN: CALL FACHK ;PERFORM ADDRESS CHECKT2FCTR1: CALL $MPPHY ;MAP TO 18/22 BIT PHYS ADDRESS2 CALL FCXR1 ;INSERT RELOC DISP & BIAS; & PARM 2-6 BR FCXTR ;;)B; FUNCTION IS A KILL I/O FUNCTION-FLUSH I/O QUEUE OF TASK REQUESTS;D.FCKIL: MOV (SP),$TEMP2 ;SAVE I/O FUNCTION CODE CALL $IOKL2 ;FLUSH I/O QUEUE;ND; FUNCTION IS A NOP'ED FUNCTION-DECLARE SUCCESSFUL COMPLETION STATUS;L9ISSUC: MOV #IS.SUC&377,R4 ;SET SUCCESSFUL COMPLETION CODENIECM1: JMP IECOM ;.;;; SPECIFIED DEVICE IS OFFLINEL;A4IEOFL: MOV #IE.OFL&377,R4 ;SET DEVICE OFFLINE STATUS BR IECM1 ;;A;S6; FUNCTION IS A CONTROL FUNCTION-COPY REMAINDER OF DPB;C'FCCTL: TST U.CW1(R5) ;MOUNTABLE DEVICE?T BPL 10$ ;IF PL NOF) MOV $TKTCB,R0 ;POINT TO CURRENT TASK TCB2@ BITB #US.MNT!US.FOR,U.STS(R5) ;DEVICE MOUNTED AND NOT FOREIGN ? BNE 5$ ;IF NE NO& BITB #US.LAB,U.STS(R5);ANSI MAGTAPE ? BEQ 6$ ;IF EQ NO44$: BIT #T3.PRV,T.ST3(R0) ;ISSUING TASK PRIVILEGED ?% BNE 10$ ;IF NE YES - ISSUE FUNCTION )45$: JMP IEPRI ;NO - PRIVILEGE VIOLATIONL5$: ;REFERENCE LABELN;T7; IF THE EXEC HANDLES VV VS CTL FUNCTIONS, IT GOES HEREC;N%6$: TST U.OWN(R5) ;DEVICE ALLOCATED ?T BEQ 10$ ;IF EQ NO 9 CMP U.OWN(R5),T.UCB(R0) ;DEVICE ALLOCATED TO THIS USER ?R% BNE 4$ ;IF NE NO, CHECK PRIVILEGED.S10$: ;REFERENCE SYMBOLN)FCXOP: CALL FCXP1 ;INSERT PARAMETERS 1-6.FCXTR: ;REFERENCE SYMBOL2 BITB #IQ.UMD,(SP) ;IS THIS A DIAGNOSTIC FUNCTION? BEQ 10$ ;IF EQ NO8 BIT #DV.UMD,U.CW1(R5) ;DOES DEVICE SUPPORT DIAGNOSTICS? BEQ 10$ ;IF EQ NOO5 CMPB 1(SP),#IO.ATT/256. ;IS THIS AN ATTACH FUNCTION? % BEQ 10$ ;IF EQ YES, SKIP RELOCATION4 CMPB 1(SP),#IO.DET/256. ;IS THIS A DETACH FUNCTION? BEQ 10$ ;IF EQ YES< BITB #US.UMD,U.ST2(R5) ;IS DEVICE ATTACHED FOR DIAGNOSTICS?* BEQ IEPRI ;IF EQ NO, PRIVILEGE VIOLATION. MOV (R4),R0 ;PICK UP REGISTER BUFFER ADDRESS" MOV #40.*2,R1 ;PICK UP MAX LENGTH/ CALL $CKBFW ;CHECK AND LOCK DIAGNOSTIC BUFFER' BCS IESPC ;IF CS ADDRESS CHECK FAILEDR' CALL $RELOC ;RELOCATE REGISTER BUFFERQ MOV R1,(R4)+ ;STORE KISAR6 BIAS! MOV R2,(R4) ;STORE DISPLACEMENTN(10$: MOV (SP)+,R1 ;RESTORE FUNCTION CODE0 CMP #IO.LOV,R1 ;IS THIS AN I-SPACE LOAD OVERLAY BEQ 15$ ;IF EQ YES/ CMP #IO.LDO,R1 ;IS THIS A D-SPACE LOAD OVERLAY  BNE FCXIT ;IN NE NOI15$:" TST U.CW1(R5) ;MOUNTABLE DEVICE? BPL FCXIT ;IF PL NOS2 MOV $TKTCB,R3 ;GET ADDRESS OF TCB OF CURRENT TASK ' .IF DF C$$RTK ;IF REMOTE TASK SUPPORTB4 BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT TURNED ON? BEQ 20$ ;IF EQ NOI" MOV T.LDV(R3),R0 ;GET UCB ADDRESS( CALL @#$MPLND ;FOLLOW REDIRECT POINTERS1 CMP (R0),$XXLOW ;IS THIS ONE OF OUR GENERIC DCBS# BLO 20$ ;IF LO NO $ CMP (R0),$XXHGH ;CHECK FOR TOO HIGH! BHI 20$ ;IF HIGHER, NOT GENERICS3 BR FCXIT ;BYPASS MOUNTED CHECK AND LBN CONVERSIONU20$:  .ENDC ; C$$RTK4 BIT #T4.LDD,T.ST4(R3) ;WAS LOAD DEVICE DISMOUNTED ?" BNE IEPRI ;IF NE YES, REJECT I/O;KF; IF THIS IS A FIXED TASK WITHOUT A TASK IMAGE SAVE SET T.LBN TO ZERO.G; NO LEGIT TASK SHOULD HAVE A ZERO T.LBN BECAUSE BLOCK ZERO IS RESERVEDCB; FOR THE BOOT BLOCK. SUCH A TASK (FIXED WITH NO IMAGE) SHOULD NOT%; PERFORM DISK OVERLAY LOAD REQUESTS.O;  .IF DF F$$NIM( MOVB T.LBN(R3),R0 ;GET HIGH BYTE OF LBN9 BIS T.LBN+1(R3),R0 ;MERGE IN LOW BYTE, TEST FOR ALL ZERON" BEQ IEPRI ;IF EQ YES, REJECT I/O .ENDC ; DF F$$NIM1 MOV T.LDV(R3),R0 ;GET UCB ADDRESS OF LOAD DEVICEE;+; ** W A R N I N G **T; ; SPM HOOKPOINT NUMBER 25.;I); DO NOT CHANGE THE INSTRUCTION FOLLOWINGS; LABEL WITHOUT CHECKING SPM;-+$SPH25==. ;SPM CHANGES THE INSTRUCTION AT  ;THE LOCATION OF THIS LABEL ) CALL @#$MPLND ;MAP TO ACTUAL UCB ADDRESSS1 CMP R0,R5 ;LOAD DEVICE UCB MATCH SPECIFIED UCB?E BNE IEOVR ;IF NE NOS L7 ADD T.LBN+1(R3),-(R4) ;ADD IN LOW PART OF TASK LOGICALI ADC -(R4) ;BLOCK NUMBERO; MOVB T.LBN(R3),R0 ;GET HIGH BYTE OF TASK LOGICAL BLOCK NUMO .IF NDF U$$DAS ADD R0,(R4) ;ADD IN HIGH PARTO00_Uj*jcDATADATADATADATADATADATADATA .IFF ; NDF U$$DAS ADD R0,(R4)+ ;ADD IN HIGH PARTO( SUB T.ISIZ(R3),(R4) ;ADJUST TO START OF SBC -(R4) ;REAL D-SPACES .ENDC ; NDF U$$DAS FCXIT: TST (SP)+ ;CLEAN STACK- MOV (SP)+,R1 ;RETRIEVE ADDRESS OF I/O PACKETP TST (SP)+ ;QUEUE TO DRIVER# BEQ DRQRQ ;IF EQ YES, IF NE Q ACPN/ BITB #UC.QUE,U.CTL(R5) ;IF SET QUEUE TO DRIVERF! BNE DRQRQ ;EVEN IF ACP FUNCTIONN;+; ** W A R N I N G **;; ; SPM HOOKPOINT NUMBER 20.; ); DO NOT CHANGE THE INSTRUCTION FOLLOWINGA; LABEL WITHOUT CHECKING SPM;-+$SPH20==. ;SPM CHANGES THE INSTRUCTION ATT ;THE LOCATION OF THIS LABELF MOV U.ACP(R5),R0 ;P S .IF DF R$$AMD; E; IF THE VOLUME IS NOT MOUNTED OR MOUNTED FOREIGN, THEN U.ACP POINTERIA; IS STILL ZERO. FOR THESE CASES, QUEUE IO.APV TO THE DEFAULT ACPF; * BNE 10$ ;IF NE DEVICE ALREADY HAS AN ACP0 MOV $ACPTK,R0 ;GET DEFAULT FILES-11 ACP POINTER10$: .ENDC ; DF R$$AMD) CALLR $EXRQP ;INSURE FILE SYSTEM ACTIVEC; 4; DESCRIPTION OF QUEUING AND INTERLOCKING INTERFACES; FOR MOUNTABLE DEVICESM;A:; I. NOT MOUNTED - ALLOW XFER FCTNS IF 'VOLUME VALID' SET/; (NEEDED FOR STARTUP). ACP FCTNS ARE ILLEGAL. (; ADDRESS CHECK & MAP BUFFER ADDRESS IN; PARAMETER 1.; QUEUE TO DRIVER.I;Z ; II. MOUNTEDC7; A. ALL CASES - IF 'UC.QUE' SET IN 'U.CTL' THEN QUEUE -; TO DRIVER. (NECESSARY TO SUPPORT EXISTINGE(; DRIVERS THAT ARE REALLY LIKE ACP'S).;C; B. MOUNTED FOREIGN$(; 1. XFER FCTN - ADDRESS CHECK AND MAP(; BUFFER ADDRESS IN PARAMETER 1. COPY%; PARAMETERS 2-6. QUEUE TO DRIVER.A2; 2. ACP FCTN - ERROR IF NO ACP. COPY PARAMETERS'; 1-6. NO POLISH ROUTINE PROCESSING.T(; INCREMENT VOLUME TRANSACTION COUNT.; QUEUE TO ACP.;A; C. MOUNTED NOT FOREIGNV/; 1. XFER FCTN - EITHER OVERLAY OR PRIVILEGEDC$; TASK I/O. ADDRESS CHECK AND MAP(; BUFFER ADDRESS IN PARAMETER 1. COPY%; PARAMETERS 2-6. QUEUE TO DRIVER.S3; 2. DECNET ACP - I/O FUNCTION CODES ARE DISJOINTD,; FROM FILES ACPS' FUNCTION CODES. POLISH*; ROUTINE PROCESSING. QUEUED TO DRIVER; BECAUSE 'UC.QUE' SET.,; 3. ANSI MAGTAPE (MTAACP) - SAME FUNCTION(; CODES AS DISK FILE ACP (F11ACP) BUT(; NOT ALL ARE ALLOWED. POLISH ROUTINE); PROCESSING. ALL OPERATIONS QUEUED TO -; MTAACP. NO BLOCK LOCKING. ACCESS/DEACCES); INTERLOCK BUT NO WINDOW TURN PENDINGB,; COUNT BECAUSE EVERYTHING QUEUED TO ACP.); INCREMENT VOLUME TRANSCACTION COUNT. 2; 4. FILES-11 DISK ACP (F11ACP) - POLISH ROUTINE-; PROCESSING. TABLE BELOW DESCRIBES QUEUINP-; AND INTERLOCKING. LEGEND: A=QUEUE TO ACPQ(; D=QUEUE TO DRIVER; I=INTERLOCK LUN;+; P=INCREMENT WINDOW TURN PENDING COUNT.1*; VOLUME TRANSACTION COUNT INCREMENTED.-; SEE COMMENT LOCATED NEAR CKRAC AND CKWACT+; FOR DESCRIPTION OF WINDOW TURN PENDINGC; COUNT ALGORITHM.T; DRQRQ: ;REFERENCE LABEL; 2; CHECK SOFTWARE WRITE LOCK BEFORE GOING TO $DRQRQ; - BIT #DV.MSD,U.CW1(R5) ;MASS STORAGE DEVICE?( BEQ 20$ ;IF EQ NOI/ BIT #DV.SWL,U.CW1(R5) ;SOFTWARE WRITE LOCKED?P BEQ 20$ ;IF EQ NON7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?E BEQ 20$ ;IF EQ YES8 CMPB #IO.WLB/256.,I.FCN+1(R1) ;WRITE LOGICAL FUNCTION? BEQ IEWLK ;IF EQ YES* MOV #$WLKTB,R4 ;POINT TO TABLE (IN QITBL)% MOV I.FCN(R1),R0 ;GET FUNCTION CODESE! BIC #7,R0 ;GET RID OF MODIFIERS-10$: CMP (R4)+,R0 ;IS THIS THE FUNCTION CODE?A BEQ IEWLK ;IF EQ YES TST (R4) ;END OF TABLE?M BNE 10$ ;IF NE NOT20$: JMP $DRQRQ ;QUEUE I/O REQUESTB; &; WRITE ATTEMPTED TO WRITE LOCKED UNIT; /IEWLK: MOV #IE.WLK&377,R4 ;SET WRITE LOCK ERRORR BR IECMN ; A;U@; ILLEGAL BUFFER ADDRESS SPECIFIED-DECLARE ILLEGAL BUFFER STATUS;E.I2SPC: CLR -(R4) ;ERASE LAST ATTRIBUTE NUMBER2IESPC: MOV #IE.SPC&377,R4 ;SET ILLEGAL BUFFER CODEIECOM: BR IECMN ;;G; ILLEGAL LOAD OVERLAY UCB-DECLARE ILLEGAL LOAD OVERLAY FUNCTION STATUSO;O8IEOVR: MOV #IE.OVR&377,R4 ;SET ILLEGAL LOAD OVERLAY CODE BR IECMN ;;9; ILLEGAL BYTE COUNT OR ALIGNMENT-DECLARE ODD BYTE STATUSE;O.IEBYT: MOV #IE.B00_]jjfYT&377,R4 ;SET ODD BYTE STATUS BR IECMN ;;O:; NO BUFFER SPACE AVAILABLE-SET NO BUFFER AVAILABLE STATUS;A7IENOD: MOV #IE.NOD&377,R4 ;SET NO BUFFER AVAILABLE CODES BR IECMN ;;(; BAD PARAMETER-SET BAD PARAMETER STATUS; 1IEBAD: MOV #IE.BAD&377,R4 ;SET BAD PARAMETER CODEY BR IECMN ;;L4; PRIVILEGE VIOLATION-SET PRIVILEGE VIOLATION STATUS;37IEPRI: MOV #IE.PRI&377,R4 ;SET PRIVILEGE VIOLATION CODE BR IECMN ;;O?; FILE ALREADY ACCESSED ON LUN-SET FILE ALREADY ACCESSED STATSU7; 9IEALN: MOV #IE.ALN&377,R4 ;SET FILE ALREADY ACCESSED CODEV BR IECMN ;;E5; NO FILE ACCESSED ON LUN-SET NO FILE ACCESSED STATUST; 6IENLN: MOV #IE.NLN&377,R4 ;SET NO FILE ACCESSED STATUS .IF DF,R$$LKL BR IECOM ;;:2; EXPLICIT UNLOCK PERFORMED OR BLOCK LOCKING ERROR; STATUS IN R0;VIELCK: MOV R0,R4 ;STATUS IN R0T .ENDC;; COMMON ERROR EXIT3;R)IECMN: MOV $TEMP0,SP ;RESET STACK POINTER;6 MOV (SP)+,R0 ;RETRIEVE ADDRESS OF SECONDARY CONTROL B BEQ 10$ ;IF EQ NONE1 CALL $DEATR ;DEALLOCATE SECONDARY CONTROL BLOCKD10$: .IF DF C$$RTK ;REMOTE TASKS , BIT #F5.RTK,$FMSK5 ;REMOTE TASKS TURNED ON? BEQ 20$ ;IF EQ NON( MOV (SP),R3 ;GET ADDRESS OF I/O PACKET1 CMPB I.FCN+1(R3),#IO.KIL/256. ;IS THIS I/O KILL?  BNE 20$ ;IF NE NOC% MOV $CPPKT,R0 ;GET ADDRESS OF PACKET: BEQ 20$ ;IF EQ, NONE CALL $CPDEA ;DEALLOCATE IT .ENDC ;C$$RTK20$: M! MOV R4,R0 ;SET FINAL I/O STATUS& CLR R1 ;CLEAR SECOND I/O STATUS WORD- MOV (SP)+,R3 ;RETRIEVE ADDRESS OF I/O PACKETD TST (SP)+ ;CLEAN STACK' MOV I.UCB(R3),R5 ;RETRIEVE UCB ADDRESSR( CALLR $IOFIN ;FINISH OFF I/O OPERATION;K; BUILD AN I/O PACKET ; 3$BDPKT::INC 12(SP) ;QUEUE PACKET TO ACP NOT DRIVERP* MOV #2*2,R1 ;SET LENGTH OF FILE ID BLOCK+ CALL OPPRM ;INSERT OPTIONAL FILE ID BLOCK / BEQ ATRBK ;IF EQ NO PARAMETER BLOCK SPECIFIED ;A; BUILD ATTRIBUTE POINTER BLOCKK;0=ATRBK: MOV (R3)+,(R4)+ ;ATTRIBUTE DESCRIPTOR BLOCK SPECIFIED?I BEQ MOVE3 ;IF EQ NOP, MOV R3,-(SP) ;SAVE ADDRESS OF NEXT DPB WORD6 MOV #I.ATRL,R1 ;SET LENGTH OF SECONDARY CONTROL BLOCK/ CALL $ALOCB ;ALLOCATE SECONDARY CONTROL BLOCK' BCS IENOD ;IF CS NO STORAGE AVAILABLE:8 MOV R0,@$TEMP0 ;SAVE ADDRESS OF SECONDARY CONTROL BLOCK+ CLR (R0) ;INITIALIZE NUMBER OF ATTRIBUTES;' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGK6 MOV -(R4),R3 ;RETRIEVE ADDRESS OF ATTRIBUTE DESCRIPTO5 MOV R0,(R4)+ ;SET POINTER TO SECONDARY CONTROL BLOCKT6 MOV R4,-(SP) ;SAVE ADDRESS OF NEXT WORD IN I/O PACKET3 MOV R0,R4 ;SET ADDRESS OF FIRST ATTRIBUTE POINTERM6 MOV #6,-(SP) ;SET MAXIMUM NUMBER OF ATTRIBUTE POINTER810$: MOV R3,R0 ;SET ADDRESS OF NEXT ATTRIBUTE DESCRIPTO- MOV #4,R1 ;SET SIZE OF ATTRIBUTE DESCRIPTOR 1 CALL $ACHCK ;ADDRESS CHECK ATTRIBUTE DESCRIPTOR ( BCS IESPC ;IF CS ADDRESS CHECK FAILURE4 CALL $RELOM ;RELOCATE AND MAP ATTRIBUTE DESCRIPTOR/ ADD #4,R3 ;POINT TO NEXT ATTRIBUTE DESCRIPTOR)* MOVB (R0)+,(R4)+ ;INSERT ATTRIBUTE NUMBER2 BEQ 20$ ;IF EQ END OF ATTRIBUTE DESCRIPTOR BLOCK( CLR R1 ;PICKUP SIZE OF ATTRIBUTE BLOCK BISB (R0)+,R1 ;0 MOVB R1,(R4)+ ;INSERT LENGTH OF ATTRIBUTE BLOCK BNE 15$ ;IF NE LENGTH OKAY) MOV #256.*2,R1 ;SET LENGTH FOR ZERO CASE 115$: MOV (R0),R0 ;GET ADDRESS OF ATTRIBUTE BLOCKA .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGS" MOV 6(SP),KISAR6 ;MAP TASK HEADER .ENDC* CALL IOBUF ;ADDR CHECK AND INC I/O COUNT .IF DF X$$HDR5 MOV (SP)+,KISAR6 ;RESTORE MAPPING TO ATTRIBUTE BLOCKQ $ .ENDC( BCS I2SPC ;IF CS ADDRESS CHECK FAILURE4 MOV R1,(R4)+ ;SAVE ADDRESS OF ATTACHMENT DESCRIPTOR/ CALL $RELOC ;RELOCATE ATTRIBUTE BLOCK ADDRESSB% MOV R1,(R4)+ ;INSERT RELOCATION BIAS2- MOV R2,(R4)+ ;INSERT ATTRIBUTE BLOCK ADDRESS0, DEC (SP) ;ANY MORE SPACE IN POINTER BLOCK? BGT 10$ ;IF GT YES20$: TST (SP)+ ;CLEAN STACK6 MOV (SP)+,R4 ;RETRIEVE ADDRESS OF NEXT WORD IN I/O PA* MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING3 MOV (SP)+,R3 ;RETRIEVE ADDRESS OF NEXT WORD IN DPBR; 6; MOVE EXTEND AND ACCESS CONTROL WORDS INTO I/O PACKET;U3MOVE3: M00_ej*jcDATADATADATADATADATADATADATAOV (R3)+,(R4)+ ;INSERT EXTEND CONTROL WORDSR MOV (R3)+,(R4)+ ;, MOV (R3)+,(R4)+ ;INSERT ACCESS CONTROL WORD;R ; INSERT OPTIONAL FILENAME BLOCK;S2FILNM: MOV #13.*2,R1 ;SET LENGTH OF FILENAME BLOCK, CALL OPPRM ;INSERT OPTIONAL FILENAME BLOCK, BEQ 10$ ;IF EQ NO FILENAME BLOCK SPECIFIED10$: JMP @(R5)+ ;;D"; INTERPRET REQUIRED BLOCK ADDRESS;C .ENABL LSB.RQPRM: MOV SP,R2 ;SET REQUIRED PARAMETER FLAG BR 10$ ;;E"; INTERPRET OPTIONAL BLOCK ADDRESS;/-OPPRM: CLR R2 ;CLEAR REQUIRED PARAMETER FLAGT/10$: MOV (R3)+,R0 ;GET ADDRESS OF CONTROL BLOCK+ BEQ 20$ ;IF EQ NONE SPECIFIEDD) CALL $CKBFW ;CHECK AND LOCK USER BUFFERS$ BCC 15$ ;IF CC, ADDRESS CHECK OKAY( JMP IESPC ;OTHERWISE FINISH WITH ERROR&15$: MOV R1,-(SP) ;SAVE ATT DESCR ADDR& CALL $RELOC ;RELOCATE BUFFER ADDRESS% MOV R1,(R4)+ ;INSERT RELOCATION BIASK# MOV R2,(R4)+ ;INSERT BLOCK ADDRESSM% MOV (SP)+,R1 ;RESTORE ATT DESCR ADDR BR 30$ ;&20$: MOV R2,(R4)+ ;PARAMETER REQUIRED? BEQ 25$ ;IF EQ NO ( JMP IEBAD ;OTHERWISE FINISH WITH ERROR"25$: CLR (R4)+ ;CLEAR SECOND WORD30$: RETURN ;I .DSABL LSBC;D:; FILL DISCONNECT PARAMETER BUFFER AND INTERLOCK LUN USAGE;  .IF DF M$$NET .ENABL LSBH;$CKDIS::MOV (R3)+,(R4)+ ;COPY FIRST PARAMETER TO I/O PACKETD BR 10$ ;FINISH IN COMMON CODER;E ; CHECK CONNECT PARAMETER BUFFER;B0$CKPRM::CALL FCXP1 ;COPY PARAMETERS (UNTOUCHED) JMP @(R5)+ ; $CKHDR:: ; .IF DF X$$HDR" MOV U.SCB(R0),R2 ;GET SCB ADDRESS> BIT #S2.XHR,S.ST2(R2) ;COMM PRODUCT SUPPORT EXTERNAL HEADERS? BNE 20$ ;IF NE YES) CMP #120000,R1 ;HEADER RESIDENT IN POOL?D BHIS 20$ ;IF HIS YES' JMP IEBAD ;RETURN BAD PARAMETER ERROR .ENDC $CKCON:: ;/2$: MOV 2(R3),R1 ;GET LENGTH OF BUFFER IN BYTESE BNE 5$ ;IF NE NON ZERO LENGTHI JMP IESPC ;ZERO LENGTH*5$: CALL RQPRM ;INSERT REQUIRED PARAMETER#10$: CALL FCXP2 ;INSERT PARAMETERSN20$: JMP @(R5)+ ; .DSABL LSBR .ENDC; &; CHECK FOR VOLUME MARKED FOR DISMOUNT;S .ENABL LSBS;$CKDMO::BITB #US.MDM,U.STS(R0) ;VOLUME MARKED FOR DISMOUNT?I BNE 15$ ;IF NE YES JMP @(R5)+ ;;I#; CHECK VOLUME MOUNTED BY THIS USERP;B .IF DF M$$MUP$CKMOU:: ;REFERENCE LABEL  .IF DF R$$AMD0 CMP #IO.APV,4(SP) ;MOUNT/DISMOUNT I/O REQUEST ?( BEQ 2$ ;IF EQ YES - BYPASS MOUNT CHECK .ENDC ; DF R$$AMD MOV R5,-(SP) ;SAVE R5 MOV 4(SP),R5 ;GET UCB ADDRESS- CALL CXMOU ;IS DEVICE MOUNTED BY THIS USER?C BCS 15$ ;IF CS NO  MOV (SP)+,R5 ;RESTORE REGISTER2$: JMP @(R5)+ ;O;B2; SUBROUTINE TO SEARCH MOUNT LIST TO SEE IF VOLUME; REALLY MOUNTED BY THIS USER ;#CXMOU: MOV R1,-(SP) ;SAVE REGISTERSE MOV R2,-(SP) ;F' BITB #US.PUB,U.ST2(R5) ;PUBLIC DEVICE?E BNE 8$ ;PUBLIC DEVICE OK# MOV $TKTCB,R1 ;IS TASK PRIVILEGED?Q BIT #T3.PRV,T.ST3(R1) BNE 8$ ;PRIVILEGED TASK OK. MOV T.UCB(R1),R1 ;GET USER TI: UCB ADDR AS ID MOV #$MOULS,R2 ;GET MOUNT LIST 5$: SEC ;ASSUME FAIL# MOV (R2),R2 ;GET MOUNT LIST ENTRY BEQ 9$ ;NONE=DONE=FAIL. CMPB #MT.MLS,M.TYPE(R2) ;RIGHT TYPE OF ENTRY? BNE 5$ ;BR NOT MOUNT ENTRY# CMP M.DEV(R2),R5 ;SAME DEVICE UCB?  BNE 5$ ;BR DIFFERENT DEVICEV" CMP M.TI(R2),R1 ;SAME USER AS TI? BNE 5$ ;BR DIFFERENT USERE8$: CLC ;SUCCESS#9$: MOV (SP)+,R2 ;RESTORE REGISTERS  MOV (SP)+,R1 ;T RETURNT .ENDC;R@; CHECK FOR READ ACCESS PRIVILEGES AND EXIT TO TRANSFER FUNCTION;V1$CKRAC::MOV #WI.RDV,R2 ;SET READ ACCESS MASK WORDL BR 10$ ;;GA; CHECK FOR WRITE ACCESS PRIVILEGES AND EXIT TO TRANSFER FUNCTIONE;)2$CKWAC::MOV #WI.WRV,R2 ;SET WRITE ACCESS MASK WORD-10$: BIT R2,@(R1)+ ;DESIRED ACCESS PERMITTED?; BNE 20$ ;IF NE YES$15$: JMP IEPRI ;PRIVILEGE VIOLATION;54; ADDRESS CHECK & INSERT RELOC BIAS, DISP & PARM 2-6;) 20$: MOV R0,R5 ;GET UCB ADDRESS# CALL FACHK ;PERFORM ADDRESS CHECK CALL FCXR1 ;INSERT PARAMETERSL .IF DF,M$$NET) CMPB #IO.WVB/400,5(SP) ;DECNET FUNCTION?2 BGE CKLCK ;IF GE NOW" MOV U.SCB(R5),R0 ;GET SCB ADDRESS5 BIT #S2.XHR,S.ST2(R0) ;NEW I.LN2 HANDLING SUPPORTED00_mjjf? BNE 50$ ;IF NE YES$ MOV $TKTCB,R0 ;GET TASK TCB ADDRESS; MOV T.ATT(R0),R0 ;GET TASK PARTITION ATTACHMENT DESCRIPTORE8 INCB A.IOC-A.TCBL(R0) ;LOCK DOWN THE HEADER FOR THE I/O4 MOV A.PCB-A.TCBL(R0),R0 ;GET ADDRESS OF TASK REGION( INCB P.IOC(R0) ;BUMP REGION'S I/O COUNT* MOV 10(SP),R0 ;GET THE I/O PACKET ADDRESS BR 55$ ;JOIN COMMON CODE .ENDC;."; DO RMS BUCKET LOCKING PROCESSING;C+CKLCK: BITB #US.LAB,U.STS(R5) ;ANSI MAGTAPEA BNE 30$ ;IF NE YES& MOV 10(SP),R1 ;GET ADDRESS I/O PACKET .IF DF,R$$LKL& CALL $LCKPR ;PERFORM LOCK PROCESSING% BCC 22$ ;CS IF ERROR OR UNLOCK DONE JMP IELCK ;R22$: ;REFERENCE LABEL .ENDC CALL $MPPKT ;MAP VBN TO LBNV BCS 30$ ;MAP FAILURE TST R0 ;ALL BLOCKS MAPPED??  BEQ 40$ ;IF EQ YES30$: INC 12(SP) ;QUEUE TO ACP(40$: MOV @(SP),R0 ;GET ADDRESS OF WINDOW( INCB W.IOC(R0) ;ADJUST WINDOW I/O COUNT*50$: MOV 10(SP),R0 ;GET I/O PACKET ADDRESS8 MOV @I.LN2(R0),I.LN2(R0) ;CHANGE I.LN2 TO IMAGE OF LUT2 INC I.LN2(R0) ;FLAG IT AS SUCH=55$: BISB #200,I.EFN(R0) ;FLAG PACKET AS VIRTUAL I/O FUNCTION2 TST (SP)+ ;CLEAN STACK% MOV (SP)+,R5 ;RESTORE TO UCB ADDRESSN TST (SP)+ ;CLEAN STACKCKJXT: JMP FCXIT ; .DSABL LSB$;P(; CHECK FOR FILE ALREADY ACCESSED ON LUN;Q($CKALN::TST (R1) ;FILE ACCESSED ON LUN? BEQ CKJR5 ;IF EQ NO  JMP IEALN ;ERROR;I ; CHECK FOR FILE ACCESSED ON LUN;T($CKNLN::TST (R1) ;FILE ACCESSED ON LUN? BNE CKJR5 ;IF NE YES JMP IENLN ;ERROR;E:; SET UP REGISTERS FOR UNLOCK AND EXIT TO CONTROL FUNCTION;N .IF DF R$$LKL;$UNLXT::TST (R4)+ ;SKIP FIRST WORD OF "ADDRESS DOUBLEWORD"  MOV R0,R5 ;SETUP UCB POINTER CALL FCXP1 ;COPY PARAMETERSF BR CKLCK ; .ENDC; ; SET ACCESS/DEACCESS INTERLOCKN;N9$CKRLK::INC @(SP) ;SET ACCESS/DEACCESS PENDING INTERLOCK ;Q; EXIT POLISH TO FUNCTION EXIT;H5$CKXIT::TST (SP)+ ;REMOVE ADDRESS OF SECOND LUN WORDL# MOV (SP)+,R5 ;RETRIEVE UCB ADDRESSE TST (SP)+ ;ADJUST STACK PTR MOV U.VCB(R5),R1 ;GET VCB ADDR  BEQ CKJXT ;BR IF NO VCBN# INC (R1) ;INCR VOLUME TRANS COUNTR BR CKJXT ;EXIT POLISH"0$CKPKT::MOV #$FCPKT,R5 ;JOIN COMMON ACP REQUESTSCKJR5: JMP @(R5)+ ;;T9; INCREMENT WINDOW I/O COUNT FOR MOUNTED FILES-11 DEVICES ;E*$CKIWN::MOV @(SP),R0 ;GET CONTENTS OF LUT2) BIC #1,R0 ;CLEAR LUN INTERLOCK, WINDOW?L BEQ 10$ ;IF EQ NO& INCB W.IOC(R0) ;BUMP WINDOW I/O COUNT10$: JMP @(R5)+ ;;V+; LOCK HEADER IN MEMORY DURING ACP FUNCTION ;J3$CKLHD::MOV $TKTCB,R0 ;GET CURRENT TASK TCB ADDRESSC, MOV T.ATT(R0),R0 ;GET ATTACHMENT DESCRIPTOR6 INCB A.IOC-A.TCBL(R0) ;BUMP I/O COUNT FOR TASK REGION4 MOV A.PCB-A.TCBL(R0),R0 ;GET ADDRESS OF TASK REGION( INCB P.IOC(R0) ;BUMP REGION'S I/O COUNT) MOV 10(SP),R0 ;GET ADDRESS OF I/O PACKETO; BISB #200,I.EFN(R0) ;FLAG REQUEST AS A VIRTUAL I/O REQUESTR JMP @(R5)+ ;;$0; SUBROUTINES TO COPY PARAMETERS INTO I/O PACKET; ; INPUTS:R; FCXR1 - R1 RELOCATION BIASM; R2 DISPLACEMENT BIAS; R3 PARAMETER PTR; R4 I/O PACKET PTRS%; COPIES R1, R2, AND PARAMETERS 2-6A;C; FCXP2 - R3, R4I; COPIES PARAMETERS 2-6I;C; FCXP1 - R3, R4N; COPIES PARAMETERS 2-6;; ; OUTPUTS: R3, R4 UPDATED PTR'SO;0+FCXR1: MOV R1,(R4)+ ;INSERT RELOCATION BIAS ' MOV R2,(R4)+ ;INSERT DISPLACEMENT BIASR BR FCXP2 ;COPY PARAMETRS 2-6*FCXP1: MOV (R3)+,(R4)+ ;INSERT PARAMETER 1*FCXP2: MOV (R3)+,(R4)+ ;INSERT PARAMETER 2$ MOV (R3)+,(R4)+ ;INSERT PARAMETER 3$ MOV (R3)+,(R4)+ ;INSERT PARAMETER 4$ MOV (R3)+,(R4)+ ;INSERT PARAMETER 5# MOV (R3)+,(R4) ;INSERT PARAMETER 6  RETURN;X6; SUBROUTINE TO PERFORM ADDRESS CHECK AND MAP TRANSFER;,FACHL: .IF DF A$$CNT, MOV KISAR6,-(SP) ;SAVE CURRENT EXEC MAPPING/ MOV $TKTCB,R0 ;GET TCB ADDRESS OF CURRENT TASKM2 MOV T.ACN(R0),KISAR6 ;MAP TO TAB (OR OTHER BLOCK) BEQ 10$ ;IF EQ NO BLOCKM- CMPB #BT.TAB,@#B.TYP+140000 ;IS THIS A TAB ?( BNE 10$ ;IF NE NOR* ADD #1,@#B.OVLY+2+140000 ;INCREMENT COUNT! ADC @#B.OVLY+140000 ;SECOND HALFT/10$: MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING(00_ujZyjcDATADATADATADATADATADATADATA .ENDC ; DF A$$CNT .IF DF U$$DAS< CMP I.FCN-I.PRM(R4),#IO.LDO ;IS THIS A D-SPACE LOAD OVERLAY BEQ FACHK ;IF EQ YES6 MOV #$RELUI,-(SP) ;PUSH ADDRESS OF RELOCATION ROUTINE6 MOV #$CKBFI,-(SP) ;AND ADDRESS OF ADDR. CHECK ROUTINE BR FACH1 ;ENTER COMMON CODE  .IFTF ; DF U$$DASFACHK: ;REFERENCE LABEL .IFT ; DF U$$DAS 6 MOV #$RELOC,-(SP) ;PUSH ADDRESS OF RELOCATION ROUTINE .ENDC ; DF U$$DAS6 MOV #$CKBFR,-(SP) ;AND ADDRESS OF ADDR. CHECK ROUTINE4 CMPB I.FCN+1-I.PRM(R4),#IO.WLB/400 ;WRITE LOGICAL ? BEQ FACH1 ;IF EQ YES N4 CMPB I.FCN+1-I.PRM(R4),#IO.WVB/400 ;WRITE VIRTUAL ? BEQ FACH1 ;IF EQ YES. MOV #$CKBFB,(SP) ;SET READ/WRITE BUFFER CHECK/FACH1: MOV (R3)+,R0 ;GET ADDRESS OF USER BUFFERE$ MOVB U.CTL(R5),R1 ;GET CONTROL BYTE' BPL 10$ ;IF PL BYTE ALIGNMENT ALLOWEDF$ BIT #1,R0 ;IS BUFFER BYTE ALIGNED?$ BNE 30$ ;IF NE YES-ALIGNMENT ERROR910$: BIC #^C,R1 ;CLEAR ALL BUT LENGTH MODULO BITS)0 BIT R1,(R3) ;DOES LENGTH HAVE CORRECT MODULUS?$ BNE 30$ ;IF NE NO-ALIGNMENT EERROR, MOV (R3),R1 ;GET LENGTH OF BUFFER IN BYTES BEQ 40$ ;IF EQ ILLEGAL BUFFERL,15$: CALL @(SP)+ ;ADDRESS CHECK USER BUFFER% BCS 40$ ;IF CS ADDRESS CHECK FAILEDV .IF DF U$$DAS CALLR @(SP)+ ;RELOCATE BUFFER( .IFF ; DF U$$DASY, CALLR $RELOC ;RELOCATE USER BUFFER ADDRESS .ENDC ; DF U$$DAS30$: JMP IEBYT ; '40$: JMP IESPC ;ILLEGAL BUFFER ADDRESSU;RG; ADDRESS CHECK I/O BUFFER AND INCREMENT COUNT IN ATTACHMENT DESCRIPTORR; .ENABL LSB3)IOBUF: CALL $ACHCK ;ADDRESS CHECK BUFFER1# BCS 10$ ;IF CS ADDR CHECK FAILUREQ3IOBF2: MOV (R2),R1 ;POINT TO PCB OF BUFER (W.BPCB)D/ INCB P.IOC(R1) ;INDICATE I/O THROUGH PARTITIONC6 MOV W.BATT(R2),R1 ;POINT TO ATTACHMENT DESC OF BUFFER$ INCB A.IOC(R1) ;INCREMENT I/O COUNT10$: RETURN ;O .DSABL LSBF .ENDS .ENDC ; DF U$$DAS30$: JMP IEBYT ; '40$: JMP IESPC ;ILLEGAL BUFFER ADDRESSU;RG; ADDRESS CHECK I/O BUFFER AND INCREMENT COUNT IN ATTACHMENT DESCRIPTORR; .ENABL LSB3 .TITLE DRRASA .IDENT /10.01/X;K7; COPYRIGHT (C) 1989 BY DIGITAL EQUIPMENT CORPORATION ; ALL RIGHTS RESERVED(1; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;LC; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED ; ; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.X ;  ;  ; D. N. CUTLER 4-SEP-73N ;T; PREVIOUSLY MODIFIED BY:T;U; T. M. MARTIN; B. S. MCCARTHYE ; M. S. FOXT; J. M. LAWLER;B-; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:A;; J. W. BERZLE; J. R. KAUFFMAN; B. S. MCCARTHY;M&; MODIFIED FOR RSX-11M-PLUS V4.0 BY:;; B. S. MCCARTHY;R&; MODIFIED FOR RSX-11M-PLUS V4.3 BY:;R!; G. N. LARSEN 26-JAN-89 10.01M;L?; GNL104 -- CORRECT STATUS CHECKING FOR PROTO-TCBS IN $DRSNDC;X%; &; RECEIVE AND SEND DIRECTIVESN';T(; MACRO LIBRARY CALLS );*+ .MCALL HDRDF$,TCBDF$B,- .IF DF N$$DIR./ .MCALL LNMDF$0)1 LNMDF$ ;DEFINE CONTEXT BLOCK OFFSETSO23 .ENDC ;DF N$$DIRW4'5 HDRDF$ ;DEFINE TASK HEADER OFFSETST.6 TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS78;+E9; **-$DRREC-(VARIABLE LENGTH) RECEIVE DATA AND RECEIVE DATA OR EXIT4:; **-$DRRCS-(VARIABLE LENGTH) RECEIVE DATA OR STOP;;EI<; THESE DIRECTIVES INSTRUCT THE SYSTEM TO DEQUEUE A DATA BLOCK FROM THEEK=; ISSUING TASK'S RECEIVE QUEUE. IF THE DIRECTIVE IS RECEIVE DATA OR EXIT,BJ>; THEN A TASK EXIT WILL BE EFFECTED IF NO DATA IS QUEUED. IF THE DIREC-J?; TIVE IS RECEIVE OR STOP, THEN THE ISSUING TASK WILL BE SUSPENDED IF NO@; DATA IS QUEUED.TA; B; DPB FORMAT:NC;B8D; WD. 00 -- DIC(75., 77., OR 139.),DPB SIZE(4. OR 6.).?E; WD. 01 -- FIRST HALF OF SENDER TASK NAME OR 0 FOR ANY TASK.G.F; WD. 02 -- SECOND HALF OF SENDER TASK NAME.(G; WD. 03 -- ADDRESS OF RECEIVE BUFFER.AH; WD. 04 -- NUMBER OF WORDS TO RECEIVE (VARIABLE RECEIVE ONLY).EI;E J; INPUTS: K;B;L; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. -M; R3=ADDRESS OF THE SECO00Z}jjfND WORD IN THE DPB.E1N; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.A.O; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.P;07Q; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)1R;I/S; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.<T; DIRECTIVE STATUS OF +1 IS RETURNED IF DATA IS RECEIVED.;U; DIRECTIVE STATUS OF 'D.RS22' IS RETURNED IF NO DATA ISR"V; RECEIVED ON RECEIVE OR STOP.!W; C=1 IF DIRECTIVE IS REJECTED.E7X; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF NO DATAA2Y; IS QUEUED IN TASK'S RECEIVE QUEUE ON RECEIVE Z; DATA.D<[; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE ISSUING4\; TASK IS AT AST STATE AND ISSUED THE RECEIVE OR]; STOP DIRECTIVE.4^; DIRECTIVE STATUS OF 'D.RS17' IS RETURNED IF THE-_; ISSUING TASK IS A SLAVE TASK AND HAS AN ,`; ACTIVE GROUP GLOBAL EVENT FLAG CONTEXT-a; AND THE NEXT RECEIVE PACKET WILL CHANGE b; THE TASK'S GROUP NUMBER.c;E;d; THE FORMAT OF A FIXED LENGTH SEND PACKET IS AS FOLLOWS:Ie;D'f; WD. 00 -- RECEIVE QUEUE LINK WORD.U.g; WD. 01 -- FIRST WORD OF SENDER TASK NAME./h; WD. 02 -- SECOND WORD OF SENDER TASK NAME. 4i; WD. 03 THRU 15. -- CONTENTS OF THE SEND BUFFER..j; WD. 16. -- TI UCB ADDRESS OF SENDER TASK.k; WD. 17. -- CURRENT UIC 2l; WD. 18. -- FIRST WORD OF TARGET MU TASK NAME.3m; WD. 19. -- SECOND WORD OF TARGET MU TASK NAME.TAn; WD. 20. -- CONTEXT BLOCK POINTER (IF NAME DIRECTORY SUPPORT)o;H>p; THE FORMAT OF A VARIABLE LENGTH SEND PACKET IS AS FOLLOWS:q;.4r; WD. 00 -- RECEIVE BY REFERENCE QUEUE LINK WORD.<s; WD. 01 -- NUMBER DATA WORDS + 2 (FOR SENDER TASK NAME)..t; WD. 02 -- FIRST WORD OF SENDER TASK NAME./u; WD. 03 -- SECOND WORD OF SENDER TASK NAME.E,v; WD. 04 THRU N -- DATA WORDS TO BE SENT..w; WD. N+1 -- TI UCB ADDRESS OF SENDER TASK.x; WD. N+2 -- CURRENT UICD2y; WD. N+3 -- FIRST WORD OF TARGET MU TASK NAME.3z; WD. N+4 -- SECOND WORD OF TARGET MU TASK NAME.A{; WD. N+5 -- CONTEXT BLOCK POINTER (IF NAME DIRECTORY SUPPORT).|; >}; NOTE: FOR SYSTEMS WITH SECONDARY POOL SUPPORT, ALL PACKETS)~; FOR SENDS AND RECEIVES ARE ALLOCATEDE6; FROM THE SECONDARY POOL AND THE FIXED LENGTH SEND1; BECOMES A VARIABLE LENGTH SEND OF LENGTH 13.W; ;-;A-; * * * * * N O T E W E L L * * * * *D;O>; THESE ROUTINES CURRENTLY WORK ONLY BECAUSE THEY ARE IN THE<; ROOT OF THE EXEC AND APPEAR TO BE IN THE FIRST DIRECTIVE>; COMMON. IF THEY ARE EVER MOVED, IN ADDITION TO THE CHANGES<; TO MAPPING NECESSARY, IT WILL BE NECESSARY TO CHANGE THE<; CODE WHICH STUFFS THE NEW DSW ON THE STACK TO ACCOMODATE9; THE DIFFERING STACK FORMATS ON SYSTEMS WITH DIRECTIVEX ; COMMONS.;  .ENABL LSBG160$: DRSTS D.RS89 ;INVALID RECEIVE BUFFER SIZE &70$: DRSTS D.RS99 ;INVALID DPB SIZE/$DRRCS::TST (R2) ;ISSUING TASK AT AST STATE?R BPL $DRREC ;IF PL NO. DRSTS D.RS80 ;ISSUING TASK IS AT AST STATE%$DRREC::CLR -(SP) ;INIT ERROR CODED6 MOV #15.,R1 ;ASSUME THIS IS A FIXED LENGTH RECEIVE* MOV R1,-(SP) ;SAVE NUMBER OF DATA WORDS ASL R1 ;CONVERT TO BYTES .IF DF X$$HDR; MOVB H.CUIC+1(R4),-(SP) ;SAVE GRP CODE - HEADER UNMAPPED. .IFF$ MOV R4,-(SP) ;SAVE HEADER ADDRESS .ENDC7 MOV (R3)+,-(SP) ;SAVE FIRST HALF OF SENDER TASK NAME8 MOV (R3)+,-(SP) ;SAVE SECOND HALF OF SENDER TASK NAME+ CMPB $DICSV+1,#4. ;FIXED LENGTH RECEIVE?A BEQ 102$ ;IF EQ YESR. CMPB $DICSV+1,#6. ;VARIABLE LENGTH RECEIVE? BNE 70$ ;IF NE NOE$ MOV 2(R3),R1 ;GET SIZE TO RECEIVE' BEQ 60$ ;IF EQ ERROR - ILLEGAL SIZER CMP R1,#P$$MAX ;VALID SIZER BHI 60$ ;IF HI NOR3 ADD #2,R1 ;TWO EXTRA WORDS FOR SENDER TASK NAMEF- MOV R1,6(SP) ;SAVE THE SIZE TO RECEIVE + 2! ASL R1 ;CONVERT SIZE TO BYTES;3102$: MOV (R3),R3 ;GET ADDRESS OF RECEIVE BUFFERS- CALL $ACHKP ;ADDRESS CHECK RECEIVE BUFFERP- MOV R3,R4 ;SAVE ADDRESS OF RECEIVE BUFFER16 MOV (SP)+,R3 ;RETRIEVE 2ND HALF OF SENDER TASK NAME8 MOV (SP)+,R2 ;RETRIEVE FIRST HALF OF SENDER TAS00ZjyjcDATADATADATADATADATADATADATAK NAME MOV R5,R0 ;COPY TCB ADDRESSE( ADD #T.RCVL,R0 ;POINT TO RECEIVE LIST6 CALL $GTRPK ;GET RECEIVE DATA PACKET AND MAP TO IT BCS 20$ ;IF CS THERE IS NONE4 MOV (SP)+,R2 ;GET SAVED GROUP CODE/HEADER ADDRESS5 BIT #T3.SLV,T.ST3(R5) ;ISSUING TASK A SLAVE TASK ?  BEQ 105$ ;IF EQ NO: TSTB T.GGF(R5) ;TASK HAVE ACTIVE GROUP GLOBAL CONTEXT ? BEQ 105$ ;IF EQ NO1 MOV @#120002,R3 ;GET LENGTH OF DATA +2 (WORDS)O ASL R3 ;CONVERT TO BYTES .IF DF X$$HDR. CMPB R2,120007(R3) ;WILL UIC GROUP CHANGE ? .IFFD8 CMPB H.CUIC+1(R2),120007(R3) ;WILL UIC GROUP CHANGE ? .ENDC BEQ 105$ ;IF EQ NO: DRSTS D.RS17 ;SLAVE TASK HAS GRP GLOBAL CONTEXT ACTIVE.105$: CALL $GTSPK ;DEQUEUE SPECIFIED PACKET4 MOV #120002,R1 ;POINT TO THE NUMBER OF WORDS SENT0 CMP (SP),(R1) ;BUFFER SMALLER THAN DATA SENT? BEQ 2$ ;IF EQ NO BLO 201$ ;IF LO YES;/ MOV (R1),(SP) ;KEEP THE NUMBER OF WORDS SENTR BR 2$ ;4201$: INC 2(SP) ;INDICATE DATA HAS BEEN TRUNCATED2$: ;REFERENCE SYMBOL3 BIT #T3.SLV,T.ST3(R5) ;IS RECEIVER A SLAVE TASK?U BEQ 5$ ;IF EQ NO .IF DF V$$TRM; D; IF TI OF THE RECEIVER IS A VT, DECREMENT THE VT OFFSPRING COUNT,D; DEALLOCATE THE VT IF REQUIRED, AND CLEAR ANY LUNS WHICH MAY HAVE.; BEEN ASSIGNED TO THE SLAVE TASK'S TI (VT).C; NOTE -- COUNT IS DECREMENTED WHEN CHANGING THE TI AWAY FROM THE @; CURRENT VT. FOR THIS REASON, THE VT OFFSPRING COUNT IS NOTC; DECREMENTED IF A RECEIVE DATA IS ISSUED AND THE QUEUE IS EMPTY.E;C$ MOV R1,-(SP) ;SAVE PACKET ADDRESS1 CALL $TICLR ;DECREMENT VT OFFSPRING COUNT AND ;CLEAR OUT LUNS' MOV (SP)+,R1 ;RESTORE PACKET ADDRESSE .ENDC" MOV R1,R0 ;COPY PACKET ADDRESS1 MOV (R1),R3 ;GET NUMBER OF DATA WORDS SENT +2N ASL R3 ;CONVERT TO BYTES6 ADD R3,R0 ;POINT TO SENDER'S TI UCB ADDRESS IN PKT TST (R0)+ ; 2 MOV (R0)+,T.UCB(R5) ;SET TI ADDRESS OF RECEIVER .IF DF X$$HDR- MOV #KISAR6,R3 ;GET ADDRESS OF KERNEL APR6 5 MOV (R3),-(SP) ;SAVE CURRENT MAPPING (USER BUFFER)* MOV $SAHDB,(R3) ;MAP NONRESIDENT HEADER$ MOV $SAHPT,R2 ;GET HEADER ADDRESS3 MOV (R0),H.CUIC(R2) ;SET CURRENT UIC OF RECEIVER1 MOV (R0),H.DUIC(R2) ;SET DEFAULT UIC OF SENDER 1 MOV (SP)+,(R3) ;RESTORE MAPPING TO USER BUFFERV .IFF) MOV $HEADR,R2 ;GET TASK HEADER ADDRESS 3 MOV (R0),H.CUIC(R2) ;SET CURRENT UIC OF RECEIVER;3 MOV (R0),H.DUIC(R2) ;SET DEFAULT UIC OF RECEIVER .ENDC .IF DF N$$DIR   MOV R1,-(SP) ;SAVE R1.  MOV T.CTX(R5),R1 ;GET CURRENT CONTEXT BLOCK  BEQ 3$ ;IF EQ, NONED-  CALL $DLCTX ;DELETE CURRENT CONTEXT BLOCKV83$: MOV 6(R0),T.CTX(R5) ;GET CONTEXT BLOCK FROM PACKET MOV (SP)+,R1 ;RESTORE R1  .ENDC ;DF N$$DIR(5$: ;REFERENCE SYMBOL( TST (R1)+ ;POINT TO SENDER TASK NAME, MOV (SP)+,R2 ;GET NUMBER OF WORDS TO MOVE- CMPB $DICSV+1,#6 ;VARIABLE LENGTH RECEIVE?. BNE 10$ ;IF NE NOI7 MOV R2,4(SP) ;RETURN IN DSW NUMBER OF WORDS RECEIVED610$: MOV (R1)+,(R4)+ ;MOVE DATA BLOCK TO TASK BUFFER# DEC R2 ;ANY MORE WORDS TO MOVE?, BNE 10$ ;IF NE YES' MOV KISAR5,R0 ;GET ADDRESS OF PACKET , MOV @#120002,R1 ;GET NUMBER OF WORDS SENT .IF DF N$$DIR 8! ADD #<7.+37>,R1 ;INCLUDE CONTROL WORDS IN PACKET SIZE"# .IFF($8% ADD #<6.+37>,R1 ;INCLUDE CONTROL WORDS IN PACKET SIZE&' .ENDC ;DF N$$DIR ()) ASH #-5,R1 ;CONVERT TO 32. WORD UNITS16* CALL $DESEC ;DEALLOCATE RECEIVE PACKET TO SEC POOL1+ TST (SP)+ ;CLEAN THE STACK AND TEST FOR ERROR *, BNE 45$ ;IF NE DATA HAS BEEN TRUNCATED-. .IF DF D$$PAR/0 .IF NDF K$$DASV112 MOV $DRAPR,KINAR5 ;REMAP DISPATCHER IN I SPACE;34 .ENDC ;NDF K$$DAS56 .ENDC ;DF D$$PAR7 8 RETURN ;;920$: ;REFERENCE LABEL: .IF DF X$$HDR;< TST (SP)+ ;CLEAN STACK'= MOV $SAHPT,R4 ;GET ADDRESS OF HEADER$> MOV $SAHDB,KISAR6 ;AND MAP HEADER?@ .IFF3A(B MOV (SP)+,R4 ;RETRIEVE HEADER ADDRESSC .ENDCDE C00ZjjfMP (SP)+,(SP)+ ;CLEAN STACKT4F CMPB $DICSV,#77. ;RECEIVE DATA OR EXIT DIRECTIVE?G BNE 30$ ;IF NE NOH JMP $DREXT ;EXIT TASKF4I30$: CMPB $DICSV,#139. ;RECEIVE OR STOP DIRECTIVE?J BNE 40$ ;IF NE NO."K CALL $STPCT ;STOP CURRENT TASKL DRSTS D.RS22 ;RETURN IS.SET:)M40$: DRSTS D.RS8 ;NO PACKET TO RECEIVE=N45$: DRSTS D.RS15 ;RECEIVE BUFFER TOO SMALL DATA TRUNCATEDAOPQ;+R; **-$DRSND-SEND DATADS;KT; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO QUEUE A THIRTEEN WORD DATA BLOCKP(U; IN A SPECIFIED TASK'S RECEIVE QUEUE.V; W; DPB FORMAT:EX;I*Y; WD. 00 -- DIC(71.),DPB SIZE(5. OR 8.)./Z; WD. 01 -- FIRST HALF OF RECEIVER TASK NAME.V0[; WD. 02 -- SECOND HALF OF RECEIVER TASK NAME.2\; WD. 03 -- ADDRESS OF THIRTEEN WORD DATA BLOCK.+]; WD. 04 -- EVENT FLAG NUMBER (OPTIONAL).TB^; WD. 05 -- NUMBER OF WORDS TO SEND (VARIABLE LENGTH SEND ONLY)._;A `; INPUTS:+a; /b; R0=ADDRESS OF THE TCB OF THE RECEIVER TASK.S<c; R1=ADDRESS OF THE TASK STATUS WORD OF THE RECEIVER TASK.;d; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.4e; R3=ADDRESS OF THE DATA BLOCK ADDRESS IN THE DPB.1f; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. .g; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.h;-7i; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)Nj;G/k; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.D(l; DIRECTIVE STATUS OF +1 IS RETURNED.!m; C=1 IF DIRECTIVE IS REJECTED.E<n; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF INSUFFICIENT0o; CORE IS AVAILABLE TO QUEUE THE DATA BLOCK.8p; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF RECEIVER-q; TASK IS AN ANCILLARY CONTROL PROCESSOR.r;A@s; NOTE: FOR SYSTEMS WITH SECONDARY POOL SUPPORT, ALL SENDS AND<t; RECEIVES USE PACKETS ALLOCATED FROM THE SECONDARY POOL.u;P4v; ON SYSTEMS SUPPORTING NON RESIDENT TASK HEADERS5w; AND PROTOTYPE TCBS, KISAR6 MAY MAP THE PROTOTYPER6x; TCB IN POOL UPON ENTRY. THEREFORE, DO NOT ASSUME$y; THAT THE TASK HEADER IS MAPPED.z;F{;-|*}270$: DRSTS D.RS2 ;SET DIRECTIVE STATUS2~360$: DRSTS D.RS89 ;INVALID RECEIVE BUFFER SIZE'370$: DRSTS D.RS99 ;INVALID DPB SIZER$DRSND:: ;; BIT #T3.ACP!T3.NSD,T.ST3(R0) ;SENDS ALLOWED TO RECEIVER?S BNE 270$ ;IF NE, NOA> MOV T.ST3(R0),-(SP) ;SAVE 3RD STATUS WORD OF TCB ; GNL1042 MOV R0,-(SP) ;SAVE TCB ADDRESS OF RECEIVER TASK3 MOV #13.,R1 ;ASSUME THIS IS A FIXED LENGTH SEND - MOV R1,-(SP) ;SAVE NUMBER OF WORDS TO SEND  ASL R1 ;CONVERT TO BYTES+ MOVB 2(R3),-(SP) ;SAVE EVENT FLAG NUMBER 2 CMPB $DICSV+1,#5. ;FIXED LENGTH SEND DIRECTIVE? BEQ 210$ ;IF EQ YES / CMPB $DICSV+1,#7. ;SEND REQUEST AND CONNECT?  BEQ 210$ ;IF EQ YES, BLO 370$ ;IF LO, ERROR6 CMPB $DICSV+1,#9. ;IS IT SOME FORM OF VARIABLE SEND BHI 370$ ;IF HI NO, ERRORC% BNE 205$ ;IF NE, IT MUST BE VALID $ CMPB $DICSV,#71. ;IS THIS A VSDA$) BEQ 370$ ;IF EQ YES, ILLEGAL DPB SIZE205$: ;REFERENCE LABEL , MOV 4(R3),R1 ;GET NUMBER OF WORDS TO SEND  BEQ 360$ ;IF EQ ILLEGAL SIZE CMP R1,#P$$MAX ;VALID SIZE? BHI 360$ ;IF HI NO4 MOV R1,2(SP) ;SAVE THE NUMBER OF WORDS TO BE SENT ASL R1 ;CONVERT TO BYTES0210$: MOV (R3),R3 ;GET ADDRESS OF DATA BUFFER BIT #1,R3 ;ODD ADDRESS?I  BNE 275$ ;IF NE, YES - ERROR' MOV R3,R0 ;MOV BUFFER ADDR FOR CALL;* CALL $ACHRO ;ADDRESS CHECK DATA BUFFER BCS 275$ ;IF CS, ERROR% CALL $RELOC ;RELOCATE USER BUFFER0$ MOV R1,KISAR6 ;MAP TO USER BUFFER- MOV R2,R3 ;SUBSTITUTE NEW VITRUAL ADDRESS;5 MOVB (SP)+,R0 ;RETRIEVE OPTIONAL EVENT FLAG NUMBERB" CALL $SETF ;SET THE EVENT FLAG, MOV (SP),R1 ;GET NUMBER OF WORDS TO SEND .IF DF N$$DIR8 ADD #<9.+37>,R1 ;INCLUDE CONTROL WORDS IN PACKET SIZE .IFFS8 ADD #<8.+37>,R1 ;INCLUDE CONTROL WORDS IN PACKET SIZE .ENDC ;DF N$$DIR ) ASH #-5,R1 ;CONVERT TO 32. WORD UNITS " CALL $ALSEC ;ALLOCATE A PACKET& BCS 265$ ;IF CS ALLOCATION FAILURE* CLR -(SP) ;RESERVE A WORD ON THE STACK" MOV 2(SP),(SP) ;COPY WORD COUNT& M00ZjqjcDATADATADATADATADATADATADATAOV KISAR5,2(SP) ;SAVE KERNEL APR 5. MOV R0,KISAR5 ;MAP THE PACKET THROUGH APR 55 MOV #120002,R0 ;POINT TO SECOND WORD OF THE PACKETR5 MOV (SP),(R0) ;SAVE NUMBER OF DATA WORDS IN PACKETE5 ADD #2,(R0) ;TWO EXTRA WORDS FOR SENDER TASK NAMEO+ TST (R0)+ ;POINT TO TASK NAME IN PACKETN> MOV T.NAM(R5),(R0)+ ;INSERT SENDER TASK NAME IN SEND PACKET MOV T.NAM+2(R5),(R0)+ ; MOV (SP)+,R2 ;SET LOOP COUNTI1240$: MOV (R3)+,(R0)+ ;MOVE DATA TO SEND PACKET# DEC R2 ;ANY MORE WORDS TO MOVE?M BNE 240$ ;IF NE YESN .IF DF V$$TRM4 MOV T.UCB(R5),R1 ;GET ADDRESS OF TI UCB OF SENDER% MOV @R1,R2 ;DETERMINE DCB ADDRESSV0 CMP D.NAM(R2),#"VT ;IS IT A VIRTUAL TERMINAL? BNE 245$ ;IF NE NO; MOV 4(SP),R2 ;GET TCB ADDRESS OF RECEIVER TASK ; GNL104N8 BIT #T3.SLV,R2 ;IS RCVR TASK A SLAVE TASK? ; GNL104  BEQ 245$ ;IF EQ NO ;**-20 INCB U.OCNT(R1) ;INCREMENT VT OFFSPRING COUNT/245$: MOV R1,(R0)+ ;SET UCB ADDRESS IN PACKET .IFF;1 MOV T.UCB(R5),(R0)+ ;SET UCB ADDRESS IN PACKET .ENDC .IF DF X$$HDR2 MOV $SAHDB,KISAR6 ;MAP NON RESIDENT TASK HEADER4 MOV $SAHPT,R4 ;GET ADDRESS OF CURRENT TASK HEADER .ENDC5 MOV H.CUIC(R4),(R0)+ ;SET CURRENT (PROTECTION) UICV .IF DF R$$DSP< MOV $TNAME,(R0)+ ;STORE FIRST WORD OF TARGET MU TASK NAME( MOV $TNAME+2,(R0)+ ;STORE SECOND WORD .ENDC .IF DF N$$DIR; MOV 4(SP),R2 ;GET TCB ADDRESS OF RECEIVER TASK ; GNL104V8 BIT #T3.SLV,R2 ;IS RCVR TASK A SLAVE TASK? ; GNL104! BEQ 250$ ;IF EQ, NO ;**-2M4 MOV T.CTX(R5),(R0) ;PUT CONTEXT BLOCK INTO PACKET BEQ 250$ ;IF EQ, NONEC) MOV KISAR5,-(SP) ;SAVE CURRENT MAPPING% MOV (R0),KISAR5 ;MAP CONTEXT BLOCK(/ INCB C.REF+120000 ;INCREMENT REFERENCE COUNT$ MOV (SP)+,KISAR5 ;RESTORE MAPPING250$: ;REFERENCE LABEL$ .ENDC ;DF N$$DIRN3 MOV 2(SP),R0 ;GET ADDRESS OF RECEIVER TASK'S TCBS( ADD #T.RCVL,R0 ;POINT TO RECEIVE LIST' MOV KISAR5,R1 ;GET ADDRESS OF PACKET 4 MOV $PTCPT,KISAR6 ;REMAP TCB IF IN SECONDARY POOL2 CALL $QSPIF ;INSERT PACKET IN THE RECEIVE LIST) MOV (SP)+,KISAR5 ;RESTORE KERNEL APR 5V0 MOV #AS.RCA,R4 ;GET CODE FOR RECEIVE DATA AST3 MOV (SP)+,R5 ;RETRIEVE RECEIVER TASK TCB ADDRESSR1 TST (SP)+ ;REMOVE 3RD STATUS WORD ; GNL104E$ CALL $DASTT ;DECLARE RECEIVE AST- CALLR $DRDSE ;DECLARE A SIGNIFICANT EVENT (265$: DRSTS D.RS1 ;ALLOCATION FAILURE+275$: DRSTS D.RS98 ;SET DIRECTIVE STATUSK  .DSABL LSBS;+&; **-$GTRPK-GET RECEIVE DATA PACKET. ;OF ; THIS ROUTINE IS CALLED TO DEQUEUE A SPECIFIED PACKET FROM A QUEUE. ;K ; INPUTS:E ;E; R2=FIRST WORD OF TASK NAME.C ; R3=SECOND WORD OF TASK NAME.; R0=LIST HEAD ADDRESS.T;C ; OUTPUTS:;(3; C=0 IF AN ENTRY HAS BEEN REMOVED FROM THE LIST.D; KISAR5 MAPS THE ENTRY."; C=1 IF THE ENTRY IS NOT FOUND.;N;-+$GTRPK::MOV R0,R1 ;COPY LISTHEAD ADDRESSR%10$: SEC ;ASSUME PACKET NOT FOUND* MOV (R1),R1 ;GET ADDRESS OF NEXT ENTRY BEQ 100$ ;IF EQ END OF LISTH, MOV R1,KISAR5 ;MAP THE ENTRY THROUGH APR5  TST R2 ;TASK NAME SPECIFIED?+  BEQ 20$ ;IF EQ NO, DEQUEUE FIRST PACKET,! MOV #120000,R1 ;POINT TO PACKET LINK WORD5" CMP @#120004,R2 ;MATCH ON FIRST WORD OF TASK NAME? # BNE 10$ ;IF NE NOF6$ CMP @#120006,R3 ;MATCH ON SECOND WORD OF TASK NAME?% BNE 10$ ;IF NE NO.$& MOV KISAR5,R1 ;GET PACKET ADDRESS'20$: ;REFERENCE LABEL(100$: RETURN ;)* .ENDND* .TITLE DRREG6 .IDENT /02.10/D T;H; COPYRIGHT (C) 1988/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.0;OA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.L;Q; T. J. MILLER 12-MAR-76; ); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:D;S; J. M. LAWLER; B. S. MCCARTHY; T. M. MARTIN $;C+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY: ;; J. M. LAWLER; B. S. MCCARTHY; +; MODIFIED FOR RSX-11M-PLUS VERSION 4.00qjjf1 BY:I; ; B. S. MCCARTHY 1-APR-88 02.10;O.; BM409 -- CALL $SRMAI INSTEAD OF $SRNAM WHEN&; LOOKING UP MAIN PARTITION IN CRRG$;F .PAGE;DL; THE FOLLOWING DIRECTIVES RECEIVE AS INPUT A POINTER TO A REGION DEFINITIONI; BLOCK WHICH SERVES AS A COMMUNICATION AREA BETWEEN THE ISSUING TASK ANDPG; THE EXECUTIVE. THE REGION DEFINITION BLOCK HAS THE FOLLOWING FORMAT:$;C4; ------------------------------------------------- ; ! !; R.GID ! REGION ID ! ; ! !X4; !-----------------------------------------------! ; ! !O); R.GSIZ ! SIZE OF REGION (32W BLOCKS) ! ; ! !K4; !-----------------------------------------------! ; ! !E ; ! !E ; ! !O%; R.GNAM ! NAME OF REGION (RAD50) !H ; ! ! ; ! !O ; ! !N4; !-----------------------------------------------! ; ! !C ; ! !L ; ! !$1; R.GPAR ! REGION'S MAIN PARTITION NAME (RAD50) !- ; ! ! ; ! !I ; ! ! 4; !-----------------------------------------------! ; ! !-!; R.GSTS ! REGION STATUS WORD ! ; ! !W4; !-----------------------------------------------! ; ! !-(; R.GPRO ! PROTECTION CODE OF REGION ! ; ! !4; -------------------------------------------------;!  .IF DF P$$LAS ;-; MACRO LIBRARY CALLS-;-# .MCALL HDRDF$,PCBDF$,RDBDF$,TCBDF$ 1 HDRDF$ ;DEFINE HEADER AND WINDOW BLOCK OFFSETSI7 PCBDF$ ;DEFINE PCB AND ATTACHMENT DESCRIPTOR OFFSETS 1 RDBDF$ ;DEFINE REGION DEFINITION BLOCK OFFSETS- TCBDF$ ;DEFINE TCB OFFSETS!;+; **-$DRCRR-CREATE REGION ;WG; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CREATE A REGION AND OPTIONALLY.; ATTACH TO IT. ;E ; DPB FORMAT:;!!; WD. 00 -- DIC(55.),DPB SIZE(2.)-.; WD. 01 -- ADDRESS OF REGION DEFINITION BLOCK;S ; INPUTS: ;R9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ,; R3=ADDRESS OF THE REGION DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.R,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;O2; INPUT FIELDS IN THE REGION DEFINITION BLOCK ARE:#; R.GSIZ=SIZE OF REGION TO CREATE. 4; R.GNAM=NAME OF REGION TO CREATE OR 0 FOR NO NAME.>; R.GPAR=NAME OF SYSTEM PARTITION IN WHICH TO ALLOCATE REGION+; OR 0 FOR MAIN SYSTEM PARTITION OF TASK.D; R.GSTS=CONTROL INFORMATION.4; RS.NDL=1 IF REGION SHOULD NOT BE DELETED ON LAST ; DETACH.2; RS.ATT=1 IF CREATED REGION SHOULD BE ATTACHED.1; RS.RED=1 IF READ ACCESS IS DESIRED ON ATTACH.A2; RS.WRT=1 IF WRITE ACCESS IS DESIRED ON ATTACH.3; RS.EXT=1 IF EXTEND ACCESS IS DESIRED ON ATTACH.:3; RS.DEL=1 IF DELETE ACCESS IS DESIRED ON ATTACH.E;; R.GPRO=PROTECTION CODE FOR REGION [DEWR,DEWR,DEWR,DEWR].T;P5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;T-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.M&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED..>; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF A PCB OR ATTACH-+; MENT DESCRIPTOR COULD NOT BE ALLOCATED. ;; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THE DIRECTIVEI4; FAILS IN THE ATTACHMENT STAGE BECAUSE THE REGION ; HAS INCURRED A PARITY ERROR.:; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE DESIRED-; ACCESS IS DENIED IN THE ATTACHMENT STAGE. <; DIRECTIVE STATUS OF 'D.RS84' IS RETURNED IF THE SPECIFIED4; PARTITION IN WHICH THE REGION IS TO BE ALLOCATED4; DOES NOT EXIST, OR IF NO PARTITION NAME HAS BEEN; SPECIFIED AND RS.ATT=0.R;T3; OUTPUT FIELDS IN THE REGION DEFINITION BLOCK ARE: '; R.GID=ASSIGNED REGION ID (RS.ATT=1).I+; R.GSTS=DIRECTIVE COMPLETION INFORMATION. #; RS.CRR=1 IF REGION WAS CREATED.U;D7; NOTE: ON SYSTEMS SUPPORTING EXTERNAL HEADERS, THE RDBR0; IS COPIED TO AN EXECUTIVE BUFFER SO THAT APR62; CAN BE USED TO MAP THE TASK HEADER EXCLUSIVELY.1; THIS MEANS THAT ANY OUTPUT FIELDS ARE RETURNEDT2; TO THE USER TASK FROM THE DIRECTIVE DISPATCHER.; 2; ALSO, WHEN RETURNING REGION SIZE FROM AN ATTACH4; EXCLUDE THE SIZE OF THE NON RESIDENT TASK HEADER.;A;- .ENABL LSBG?$DRCRR::ADD #R.GPAR,R3 ;PNT TO N00qjjcDATADATADATADATADATADATADATAAME OF PAR IN WHICH TO ALLOCATEA9 MOV T.PCB(R5),R2 ;ASSUME ALLOCATING IN TASK'S PARTITION N/ MOV P.MAIN(R2),R2 ;POINT TO MAIN PARTITION PCB % TST (R3) ;PARTITION NAME SPECIFIED?A BEQ 5$ ;IF EQ NO/ CALL $SRMAI ;SEARCH FOR NAMED PARTITION'S PCBE) BCS 90$ ;IF CS, PARTITION NOT IN SYSTEM + CMP R2,P.MAIN(R2) ;IS IT A MAIN PARTITION?E BNE 90$ ;IF NE NO  U N .IF DF M$$EXT A) CMP P.REL(R2),#177600 ;DEVICE PARTITION?S N .IFFH E' CMP P.REL(R2),#7600 ;DEVICE PARTITION?R A .ENDC O M BHIS 90$ ;YES, IF HISC8 BIT #P2.LMA!P2.SEC!P2.CPU,P.ST2(R2) ;SPECIAL PARTITION?( BNE 90$ ;IF NE YES, DON'T ALLOW CREATE#5$: MOV R2,R0 ;COPY POINTER TO PCB , TST -(R3) ;POINT TO REGION NAME (R.GNAM+2), TST -(R3) ;REGION NAME SPECIFIED? (R.GNAM) BEQ 10$ ;IF EQ NOO, CALL $SRNAM ;DETERMINE IF NAME IS UNIQUE & BCC 35$ ;IF CC, NAME IS NOT UNIQUE 10$: ;REF SYMBOLT A C .IF DF M$$PRO 0) CLR -(SP) ;CLEAR REQUIRED RUN MASK WORDP L .ENDC ;4 CLR -(SP) ;CLR HDR SIZE AND I/O CNT (P.HDLN/P.IOC) I+ MOV R3,-(SP) ;PUSH NON-ZERO WORD (P.ATT+2)C CLR -(SP) ;(P.ATT)9 MOV R.GPRO-R.GNAM(R3),-(SP) ;SET PROTECTION MASK (P.PRO)I= BIC #210,(SP) ;INSURE OWNER AND SYSTEM DELETE ACCESS (P.PRO)T, MOV #P2.PIC,-(SP) ;INIT SECOND WORD (P.ST2)4 MOV #PS.COM!PS.OUT,-(SP) ;INIT STATUS WORD (P.STAT), MOV H.CUIC(R4),-(SP) ;SET OWNER UIC (P.OWN), CLR -(SP) ;CLEAR DISK PCB POINTER (P.DPCB); MOV R.GSIZ-R.GNAM(R3),-(SP) ;STORE SIZE OF REGION (P.SWSZ)C7 CMP (SP),P.SIZE(R0) ;CREATING REGION LARGER THAN MAIN?O BHI 120$ ;IF HI YES 3 CLR -(SP) ;CLR COMMON BLK DIRECTORY LINK (P.CBDL); MOV R.GSIZ-R.GNAM(R3),-(SP) ;STORE SIZE OF REGION (P.SIZE)B* CLR -(SP) ;CLEAR RELOCATION BIAS (P.REL), MOV R0,-(SP) ;SET MAIN PCB POINTER (P.MAIN), CLR -(SP) ;CLEAR SUBPARTITION LINK (P.SUB)A MOV 2(R3),-(SP) ;SET SECOND WORD OF PAR NAME (R.GNAM+2)(P.NAM+2)W; MOV (R3),-(SP) ;SET FIRST WORD OF PAR NAME (R.GNAM)(P.NAM)-# BNE 30$ ;IF NE NAME WAS SPECIFIEDN8 BIT #RS.ATT,R.GSTS-R.GNAM(R3) ;IS REGION TO BE ATTACHED) BEQ 90$ ;IF EQ NO, PARTITION NAME ERRORS5 CLR 2(SP) ;ELSE CLEAR SECOND WORD OF NAME (P.NAM+2)I430$: CLR -(SP) ;ZERO PRIORITY AND MAP COUNT (P.PRI)$ CLR -(SP) ;CLEAR LINK WORD (P.LNK)) MOV SP,R2 ;COPY POINTER TO PCB ON STACKM535$: BIT #RS.ATT,R.GSTS-R.GNAM(R3) ;ATTACH DESIRED? V BEQ 36$ ;IF EQ NOO CALL ATT ;ATTACH REGION+)36$: TST (SP) ;WAS THE REGION CREATED? R BNE 80$ ;IF NE NO, DONE 2 MOV R1,R5 ;COPY POINTER TO ATTACHMENT DESCRIPTOR! MOV #P.LGTH,R1 ;PICK UP PCB SIZET CALL $ALOCB ;ALLOCATE A PCBR$ BCS 110$ ;IF CS ALLOCATION FAILURE, MOV #P.LGTH/2,R1 ;PICK UP PCB SIZE IN WORDS MOV R0,R4 ;COPY POINTER TO PCB!40$: MOV (SP)+,(R0)+ ;FILL IN PCB  DEC R1 ;DONE YET?, BGT 40$ ;IF GT NOP O T .IF DF M$$PRO A( TST -(R0) ;SKIP REQUIRED RUN MASK WORD Q .ENDC Q O. TST -(R0) ;SKIP XTRNL HDR SIZE AND I/O COUNT H E' CMP -(R0),-(R0) ;WAS THE PCB ATTACHED?N BEQ 50$ ;IF EQ YES MOV R0,2(R0) ;SET UP LISTHEAD4 CMP -(R3),-(R3) ;POINT TO REGION ID (R.GSIZ)(R.GID) BR 60$ ;;50$: MOV (R0),R5 ;PICK UP ADDRESS OF ATTACHMENT DESCRIPTORR+ MOV R4,A.PCB(R5) ;POINT IT TO THE REAL PCBP!60$: TST P.NAM(R4) ;NAMED COMMON?0 BEQ 75$ ;IF EQ NOC4 MOV #$CBDHD-P.CBDL,R0 ;POINT TO CBD LISTHEAD AS PCB)65$: MOV R0,R1 ;SAVE POINTER TO PREVIOUSN. MOV P.CBDL(R0),R0 ;POINT TO NEXT ENTRY IN CBD BEQ 71$ ;IF EQ THERE IS NONE5 CMP P.NAM(R4),P.NAM(R0) ;TEST TO SEE IF IT GOES HERE5 BNE 70$ ;S CMP P.NAM+2(R4),P.NAM+2(R0) ;'70$: BHI 65$ ;IF HI IT DOESN'T GO HERE.571$: MOV R0,P.CBDL(R4) ;POINT NEW ONE TO NEXT IN LISTD) MOV R4,P.CBDL(R1) ;POINT PREV TO NEW ONEC875$: BIS #RS.CRR,R.GSTS(R3) ;INDICATE REGION WAS CREATED0 BIT #RS.NDL,R.GSTS(R3) ;IS NO DELETION DESIRED? BNE 80$ ;IF NE NOL6 BIS #PS.DEL,P.STAT(R4) ;SET DELETE ON LAST DETACH BIT80$: RETURN ; (90$: DRSTS D.RS94 ;PARTITION NAME ERROR)110$: TST P.ATT(SP) ;WAS REGION ATTACHED?) BEQ 120$ ;IF EQ NO3 MOV (R3),R5 ;POINT TO ATT DESCR TO DETACH (R.GID);- MOV SP,P.NAM(SP) ;SET NAME TO AVOID00qjjf DELETION: CALL $DETRG ;DETACH THE REGION&120$: DRSTS D.RS1 ;ALLOCATION FAILURE ;+; **-$DRATR-ATTACH REGIONT;3D; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO ATTACH THE SPECIFIED REGION; TO THE CURRENT TASK.;E ; DPB FORMAT:D;P!; WD. 00 -- DIC(57.),DPB SIZE(2.)H.; WD. 01 -- ADDRESS OF REGION DEFINITION BLOCK;T ; INPUTS:E;R9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.F,; R3=ADDRESS OF THE REGION DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.O,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;22; INPUT FIELDS IN THE REGION DEFINITION BLOCK ARE:&; R.GNAM=NAME OF REGION TO ATTACH TO.#; R.GSTS=DESIRED ACCESS TO REGION.T'; RS.RED=1 IF READ ACCESS IS DESIRED.T(; RS.WRT=1 IF WRITE ACCESS IS DESIRED.); RS.EXT=1 IF EXTEND ACCESS IS DESIRED.S); RS.DEL=1 IF DELETE ACCESS IS DESIRED.E;R5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)A;F-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.; DIRECTIVE OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED.H;; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF AN ATTACHMENTD#; DESCRIPTOR CANNOT BE ALLOCATED.O;; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THE SPECIFIED'; REGION HAS INCURRED A PARITY ERROR.:; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE DESIRED; ACCESS IS DENIED.S2; DIRECTIVE STATUS OF 'D.RS94' IS RETURNED IF THE$; SPECIFIED REGION DOES NOT EXIST.;D3; OUTPUT FIELDS IN THE REGION DEFINITION BLOCK ARE:M; R.GID=ASSIGNED REGION ID."; R.GSIZ=SIZE OF ATTACHED REGION.;-6$DRATR::ADD #R.GNAM,R3 ;POINT TO SPECIFIED REGION NAME" TST (R3) ;REGION NAME SPECIFIED? BEQ 90$ ;IF EQ NO, ILLEGAL& CALL $SRNAM ;SEARCH FOR NAMED REGION, BCS 90$ ;IF CS NAMED REGION DOES NOT EXIST*ATT: BIT #PS.PER,P.STAT(R2) ;PARITY ERROR? BNE 170$ ;IF NE YESC+ CMP R2,P.MAIN(R2) ;IS IT A MAIN PARTITION?S BEQ 90$ ;IF EQ YES, ERRORP. MOV R.GSTS-R.GNAM(R3),R0 ;PICK UP STATUS WORD BIT #17,R0 ;ATTACH DESIRED?O BNE 147$ ;IF NE YESG7 MOV T.ATT(R5),R1 ;POINT TO FIRST ATTACHMENT DESCRIPTOR2146$: SUB #A.TCBL,R1 ;POINT TO START OF DESCRIPTOR( CMP A.PCB(R1),R2 ;ATTACHED TO THIS PCB? BEQ 155$ ;IF EQ YESG7 MOV A.TCBL(R1),R1 ;POINT TO NEXT ATTACHMENT DESCRIPTOR  BNE 146$ ;IF NE THERE IS ONE! DRSTS D.RS86 ;NO SUCH REGION ID 1147$: MOV H.CUIC(R4),R1 ;PICK UP CURRENT TASK UIC; MOV R0,R4 ;COPY STATUS WORD9* CMP R2,#$STACK ;IS REGION BEING CREATED ?, BLO 150$ ;IF LO YES, SKIP PROTECTION CHECK2 BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED? ( BNE 150$ ;IF NE YES, SKIP ACCESS CHECK5 CALL $CKACC ;DETERMINE IF DESIRED ACCESS IS ALLOWEDC8150$: CALL $CRATT ;CREATE ATT DESCRIPTOR AND LINK IT IN$ BCS 160$ ;IF CS ALLOCATION FAILURE:155$: MOV P.SIZE(R2),-(R3) ;RETURN SIZE OF REGION (R.GSIZ) .IF DF X$$HDR9 MOVB P.HDLN(R2),R5 ;GET SIZE OF EXTERNAL HEADER (IF ANY) . SUB R5,(R3) ;EXCLUDE HEADER FROM REGION SIZE .ENDC ;DF X$$HDRG6 MOV R1,-(R3) ;STORE DESCRIPTOR ADDR AS REG ID (R.GID) RETURN ;T&160$: DRSTS D.RS1 ;ALLOCATION FAILURE 170$: DRSTS D.RS6 ;PARITY ERROR .DSABL LSBC;+; **-$DRDTR-DETACH REGIONS; E; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO DETACH THE SPECIFIED REGION,S; UNMAPPING IF NECESSARY.I;E ; DPB FORMAT:I;R!; WD. 00 -- DIC(59.),DPB SIZE(2.)G.; WD. 01 -- ADDRESS OF REGION DEFINITION BLOCK;S ; INPUTS:R; 9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ,; R3=ADDRESS OF THE REGION DEFINITION BLOCK./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 2; INPUT FIELDS IN THE REGION DEFINITION BLOCK ARE:'; R.GID=REGION ID OF REGION TO DETACH.I; R.GSTS=CONTROL INFORMATION.5; RS.MDL=1 IF REGION SHOULD BE MARKED FOR DELETE ONE; THE LAST DETACH. ; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)G; -; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.E&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.IA; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF AN ATTEMPT IS MADEK8; TO MARK THE REGION FOR DELETE WITHOUT DELETE ACCESS.@; DIR00qj<jcDATADATADATADATADATADATADATAECTIVE STATUS OF 'D.RS86' IS RETURNED IF AN INVALID REGION6; ID IS SPECIFIED OR IF AN ATTEMPT IS MADE TO DETACH ; REGION 0. ;I3; OUTPUT FIELDS IN THE REGION DEFINITION BLOCK ARE:A7; R.GSTS=INDICATION OF ANY CHANGES IN MAPPING CONTEXT. *; RS.UNM=1 IF ANY WINDOWS WERE UNMAPPED.;- .ENABL LSBD5$DRDTR::CALL $SRATT ;SEARCH FOR AND VERIFY REGION IDI% TSTB A.IOC(R5) ;ANY I/O INTO REGION?." BNE 70$ ;IF NE YES, CAN'T DETACH MOV A.TCB(R5),R1 ;POINT TO TCBD MOV R5,R0 ;POINT TO TCB THREAD ADD #A.TCBL,R0 ;') CMP R0,T.ATT(R1) ;DETACHING TASK REGION?  BEQ 60$ ;IF EQ YES, ILLEGALM MOV A.PCB(R5),R0 ;POINT TO PCB03 MOV H.WND(R4),R4 ;POINT TO NUMBER OF WINDOW BLOCKSK( TST (R4)+ ;POINT TO FIRST WINDOW BLOCK1 BIT #RS.MDL,R.GSTS(R3) ;MARK FOR DELETE DESIRED?  BEQ 10$ ;IF EQ NO7 BITB #AS.DEL,A.STAT(R5) ;DOES TASK HAVE DELETE ACCESS?  BEQ 70$ ;IF EQ NOO/ BIS #PS.DEL,P.STAT(R0) ;MARK REGION FOR DELETES?10$: CMP W.BATT(R4),R5 ;THIS WINDOW MAPPED TO REGION TO DETACH I BNE 20$ ;IF NE NOD CALL $UNMAP ;UNMAP WINDOW(5 BIS #RS.UNM,R.GSTS(R3) ;INDICATE WINDOW WAS UNMAPPEDE/20$: ADD #W.BLGH,R4 ;POINT TO NEXT WINDOW BLOCKD9 TSTB A.MPCT(R5) ;ANY MORE WINDOWS MAPPED TO THIS REGION?I BNE 10$ ;IF NE YES6 CALLR $DETRG ;DETACH REGION BY ATTACHMENT DESCRIPTOR%60$: DRSTS D.RS86 ;INVALID REGION IDT=70$: DRSTS D.RS16 ;ATTEMPT TO MARK FOR DELETE WITHOUT ACCESSB .DSABL LSBS .ENDC .ENDN FOR DELETES?10$: CMP W.BATT(R4),R5 ;THIS WINDOW MAPPED TO REGION TO DETACH I BNE 20$ ;IF NE .TITLE DRREQN .IDENT /05.00/P E;O5; COPYRIGHT (C) 1983, 1984 BY DIGITAL EQUIPMENT CORP.Q; ALL RIGHTS RESERVEDS;; D. N. CUTLER 13-SEP-73; ;O; MODIFIED BY:;;; J. W. BERZLE 26-JUN-84 05.00; -; JWB085 -- PROPAGATE CONTEXT BLOCK POINTER P; (NAMED DIRECTORY SUPPORT)1;0;2;A; REQUEST TASK DIRECTIVE;E; MACRO LIBRARY CALLSN;C  .IF NDF P$$OFF  .MCALL TCBDF$, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+; **-$DRREQ-REQUEST TASK;.>; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO REQUEST THE EXECUTION; OF A SPECIFIED TASK.;P ; DPB FORMAT:S;S"; WD. 00 -- DIC(11.),DPB SIZE(7.).$; WD. 01 -- FIRST HALF OF TASK NAME.%; WD. 02 -- SECOND HALF OF TASK NAME.-=; WD. 03 -- PARTITION NAME-NOT SUPPORTED BUT MUST BE PRESENT.O=; WD. 04 -- PARTITION NAME-NOT SUPPORTED BUT BUST BE PRESENT. ?; WD. 05 -- REQUEST PRIORITY-NOT SUPPORTED BUT MUST BE PRESENT.C; WD. 06 -- REQUEST UIC.; ; INPUTS:L;O4; R0=ADDRESS OF THE TCB OF THE TASK TO BE REQUESTED.A; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO BE REQUESTED.E9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.D.; R3=ADDRESS OF THE PARTITION NAME IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;E5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)S;E-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.P&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.O7; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF PARTITION 2; CONTROL BLOCK OR TASK CONTROL BLOCK CANNOT BE ; ALLOCATED. D9; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF SPECIFIED. D; TASK IS ALREADY ACTIVE. ; =; NOTE: IF THE SYSTEM SUPPORTS PARENT/OFFSPRING TASKING, THE .; REQUEST DIRECTIVE IS IN THE MODULE DRSPW. ;T/; ON SYSTEMS SUPPORTING PROTOTYPE TCBS AND NONF,; RESIDENT TASK HEADERS, KISAR6 MAY MAP THE; THE PROTOTYPE TCB AT ENTRY.; ;-$DRREQ:: ; T  .IF DF R$$DSP D 4 CLR -(SP) ;INIT DISPATCHING FLAG TO NO DISPATCHING% MOV 6(R3),-(SP) ;SAVE REQUEST UIC A7 CMP T.NAM(R0),#^R... ;DOES TASK HAVE MULTI-USER NAME? L BNE 5$ ;IF NE NO * MOV R0,-(SP) ;SAVE TEMPLATE TCB ADDRESS 6 MOV T.NAM+2(R0),R1 ;PICK UP SECOND WORD OF TASK NAME / MOV T.UCB(R5),R0 ;PICK UP TARGET UCB ADDRESS O2 CALL $SRMUT ;SEARCH FOR APPROPRIATE COPY OF TCB ! BCC 4$ ;IF CC COPY WAS FOUND A6 MOV #T.LGTH,R1 ;ELSE PICK UP SIZE OF TCB TO ALLOCATE ! CALL $ALOCB ;ALLOCATE A 00<jjfTCB % BCS 15$ ;IF CS ALLOCATION FAILURE L2 MOV R0,4(SP) ;SAVE ALLOCATED TCB ADDRESS AS FLAG . MOV (SP),R1 ;RETRIEVE TEMPLATE TCB ADDRESS 2 CALL $TCBCP ;PERFORM COPY AND INSTALL OPERATION 4$: TST (SP)+ ;CLEAN STACK )5$: MOV (SP)+,R1 ;RETRIEVE REQUEST UIC O .IFF ) % MOV 6(R3),R1 ;PICK UP REQUEST UIC S  .IFTF C .IF DF M$$MUP .IF DF X$$HDR/ MOV $SAHDB,KISAR6 ;MAP NONRESIDENT TASK HEADERC .ENDC2 CALL $UISET ;ESTABLISH DEFAULT AND CURRENT UIC'S .ENDC2 MOV T.UCB(R5),R2 ;GET ADDRESS OF REQUESTER TI UCB P .IF DF N$$DIR. MOV T.CTX(R5),$CTXPT ;PROPAGATE CONTEXT BLOCK .ENDC ;DF N$$DIRO% CALL $TSKRP ;REQUEST TASK EXECUTION $ BCS 10$ ;IF CS TASK ALREADY ACTIVE .IFT ) ' MOV (SP)+,R0 ;WAS A TCB DISPATCHED?  BEQ 6$ ;IF EQ NO 0 BIS #T3.REM,T.ST3(R0) ;SET REMOVE ON EXIT BIT  .ENDC -6$: RETURN ;RETURN DIRECTIVE STATUS OF +1 T*10$: BEQ 20$ ;IF EQ TASK ALREADY ACTIVE  .IF DF R$$DSP . ' MOV (SP)+,R0 ;WAS A TCB DISPATCHED? E BEQ 15$ ;IF EQ NO $! CALL $REMOV ;REMOVE THE TASK  .ENDC *15$: DRSTS D.RS1 ;SET DIRECTIVE STATUS *20$: DRSTS D.RS7 ;SET DIRECTIVE STATUS  .ENDC  .ENDBIT  .ENDC -6$: RETURN ;RETURN DIR .TITLE DRRESR .IDENT /07.01/R;RC; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.I; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;C); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY: ;C ; M. S. FOX ; J. M. LAWLER; T. M. MARTIN; B. S. MCCARTHY;); MODIFIED BY:;L; J. R. KAUFFMAN 7-MAR-83 7.1G;A6; JRK277 -- CORRECT STACK DEPTH FOR ACP QUEUE REORDER;P; MACRO LIBRARY CALLS ;E# .MCALL HDRDF$,PKTDF$,PCBDF$,TCBDF$c% HDRDF$ ;DEFINE TASK HEADER OFFSETST$ PKTDF$ ;DEFINE I/O PACKET OFFSETS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSA, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS ;+ ; **-$DRUNS-UNSTOP TASK ; H; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO UNSTOP A TASK THAT HAS STOPPED ?; ITSELF VIA A STOP DIRECTIVE OR A RECEIVE OR STOP DIRECTIVE. ; ; DPB FORMAT: K ; '; WD. 00 -- DIC(133.),DPB SIZE(3.). L(; WD. 01 -- FIRST HALF OF TASK NAME. ); WD. 02 -- SECOND HALF OF TASK NAME. T ; ; INPUTS: O ; 6; R0=ADDRESS OF THE TCB OF THE TASK TO BE UNSTOPPED. B; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO BE UNSTOPPED. ;; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. S.; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. 2; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. /; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; 8; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; 0; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ); DIRECTIVE STATUS OF +1 IS RETURNED. $; C=1 IF DIRECTIVE IS REJECTED. ;; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF THE SPECIFIEDH; TASK IS NOT ACTIVE. 2;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THE SPECIFIED3.; TASK IS NOT STOPPED, OR STOPPED FOR EVENT ; FLAG(S) OR BUFFERED I/O. R ;-  .ENABL LSB -$DRUNS::TST (R1)+ ;SPECIFIED TASK ACTIVE? T BMI 20$ ;IF MI NO D. BIT #T2.SEF,(R1) ;TASK STOPPED FOR EVENT FLAG BNE 30$ ;IF NE YES$ MOV #T2.STP,R2 ;PICK UP STOP BIT ' BR 5$ ;JOIN COMMON CODE WITH RESUME D ;+!; **-$DRRES-RESUME TASK EXECUTIONI;HL; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO RESUME THE EXECUTION OF A TASK THAT!; HAS ISSUED A SUSPEND DIRECTIVE.K; ; DPB FORMAT: ;P"; WD. 00 -- DIC(47.),DPB SIZE(3.).$; WD. 01 -- FIRST HALF OF TASK NAME.%; WD. 02 -- SECOND HALF OF TASK NAME. ;P ; INPUTS:K;T2; R0=ADDRESS00jjcDATADATADATADATADATADATADATA OF THE TCB OF THE TASK TO BE RESUMED.?; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO BE RESUMED.P9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.S+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.S/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.S,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;A5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK);D-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.S&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.S:; DIRECTIVE STATUS OF 'D.RS7 IS RETURNED IF THE SPECIFIED; TASK IS NOT ACTIVE.S;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THE SPECIFIEDA; TASK IS NOT SUSPENDED.;-$$DRRES::TST (R1)+ ;TASK ACTIVE?  BMI 20$ ;IF MI NOE MOV #T2.SPN,R2 ;GET SUSPEND BIT-5$: BIT R2,(R1) ;TASK CURRENTLY SUSPENDED? S BNE 10$ ;IF NE YES  TST (R1) ;AST IN PROGRESS? BPL 30$ ;IF PL NOD! ASL R2 ;SET PRE AST SUSPEND BITS" BIT R2,(R1) ;WAS TASK SUSPENDED? BEQ 30$ ;IF EQ NOI610$: CMPB $DICSV,#133. ;IS THIS AN UNSTOP DIRECTIVE?  BEQ 15$ ;IF EQ YES ) BIC R2,(R1) ;CLEAR TASK'S SUSPEND BIT F3 CALLR $SETCR ;SET A CONDITIONAL SCHEDULE REQUEST O,15$: CALLR $EXRQN ;UNSTOP SPECIFIED TASK '20$: DRSTS D.RS7 ;SET DIRECTIVE STATUS2'30$: DRSTS D.RS8 ;SET DIRECTIVE STATUS ;+ Y; **-$DRSTP-STOP TASK ; A; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO STOP THE ISSUING TASK. R ; ; DPB FORMAT: W ; '; WD. 00 -- DIC(131.),DPB SIZE(1.). D ; ; INPUTS: I ; A; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK. F.; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. 2; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. /; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. D ; 8; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; -; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED. E.; DIRECTIVE STATUS OF 'D.RS22' IS RETURNED. $; C=1 IF DIRECTIVE IS REJECTED. ;; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE ISSUING ; TASK IS AT AST STATE. O ;- T 2$DRSTP::TST (R2) ;IS ISSUING TASK AT AST STATE?  BMI 35$ ;IF MI YES # CALL $STPCT ;STOP ISSUING TASK N) DRSTS D.RS22 ;RETURN SUCCESS WITH +2 C235$: DRSTS D.RS80 ;ISSUING TASK IS AT AST STATE ;+; **-$DRSPN-SUSPEND EXECUTION;=M; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SUSPEND THE EXECUTION OF THE ISSUINGR; TASK. ; ; DPB FORMAT:E; "; WD. 00 -- DIC(45.),DPB SIZE(1.).;' ; INPUTS:R;R9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. +; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.U/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)S;N*; C=0 WITH A DIRECTIVE STATUS OF 'D.RS22'.;-.$DRSPN::BIS #T2.SPN,(R2) ;SUSPEND CURRENT TASK1 CALL $SETRT ;FORCE A REDISPATCHING OF PROCESSORS$ DRSTS D.RS22 ;SET DIRECTIVE STATUS;+; **-$DRATP-ALTER TASK PRIORITY;A; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CHANGE THE TASK PRIORITY ; OF THE SPECIFIED TASK.;A ; DPB FORMAT:D;2 ; WD. 00 -- DIC(9.),DPB SIZE(4.)$; WD. 01 -- FIRST HALF OF TASK NAME.%; WD. 02 -- SECOND HALF OF TASK NAME.T; WD. 03 -- NEW PRIORITY. ;U ; INPUTS:K;2; R0=ADDRESS OF THE TCB OF THE TASK TO BE ALTERED.?; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO BE ALTERED.F9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E); R3=ADDRESS OF THE LAST WORD IN THE DPB.P/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.E,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;D5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;E-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.D&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.U1; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF THE ; TASK IS NOT ACTIVE. 0; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF A(; NONPRIVILEGED TASK ATTEMPTS TO RAISE(; ITS PRIORITY ITS INSTALLED PRIORITY.0; DIRECTIVE STATUS OF 'D.RS17' IS RETURNED IF A'; TA00jjfSK ATTEMPTS TO ALTER THE PRIORITYC+; OF A CHECKPOINTED TASK WITH OUTSTANDINGT; I/O.2; DIRECTIVE STATUS OF 'D.RS95' IS RETURNED IF THE&; NEW PRIORITY SPECIFIED IS INVALID.;A;-$DRATP:: ;REF LABEL D .IF DF M$$MUP0 BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED? BNE 39$ ;IF NE YES$ CMP R0,R5 ;MODIFYING OWN PRIORITY?) BNE 180$ ;IF NE NO, PRIVILEGE VIOLATIONA8 CMPB (R3),T.DPRI(R0) ;RAISING SELF ABOVE INSTALLED PRI? BLOS 39$ ;IF LOS NOF(180$: DRSTS D.RS16 ;PRIVILEGE VIOLATION .IFTF%170$: DRSTS D.RS95 ;ILLEGAL PRIORITYK39$: ;REF LABEL .ENDC0 MOV R0,R5 ;SAVE TCB ADDR OF TASK TO BE ALTERED TST (R1) ;TASK ACTIVE? BMI 20$ ;IF MI NOD+ MOV (R3),R3 ;GET NEW PRIORITY AND TEST IT" BNE 40$ ;IF NE ONE WAS SPECIFIED) BISB T.DPRI(R5),R3 ;USE DEFAULT PRIORITYR)40$: CMP R3,#250. ;NEW PRIORITY .GT. 250?; BHI 170$ ;IF HI YESL! MOVB R3,-(SP) ;SAVE NEW PRIORITYI TSTB T.IOC(R5) ;ANY I/O ACTIVE? BEQ 100$ ;IF EQ NO1 MOV T.PCB(R5),R1 ;GET PCB ADDRESS OF TARGET TASK9 BIT #PS.OUT!PS.CKP,P.STAT(R1) ;TASK REGION CHECKPOINTED?B* BNE 190$ ;IF NE YES, RETURN IE.RSU ERROR( CLR -(SP) ;PUSH INITIAL LUN NUMBER - 1 .IF DF X$$HDR050$: MOV T.PCB(R5),R1 ;GET ADDRESS OF TASK'S PCB" MOV P.HDR(R1),R4 ;GET HEADER ADDR+ BNE 60$ ;IF NE, RESIDENT HEADER (IN POOL)R1 MOV P.REL(R1),KISAR6 ;OTHERWISE, MAP TASK HEADER1 MOV #140000,R4 ;GET HEADER ADDR60$: ;REFERENCE LABEL .IFF5/50$: MOV T.PCB(R5),R1 ;GET ADDRES OF TASK'S PCBB* MOV P.HDR(R1),R4 ;GET TASK HEADER ADDRESS .ENDC$ CMP (SP),H.NLUN(R4) ;PAST LAST LUN? BHIS 90$ ;IF HIS YES MOV (SP),R1 ;GET LUN -1% CALL $MPLNE ;MAP LUN TO UCB ADDRESS1$ BCS 80$ ;IF CS LUN IS NOT ASSIGNED" MOV R0,-(SP) ;SAVE UCB ADDRESS 0 MOV U.SCB(R0),R4 ;GET PTR TO SCB FOR THIS UCB  CALL 130$ ;REORDER I/O QUEUE# MOV (SP),R0 ;RETRIEVE UCB ADDRESS ! TST U.CW1(R0) ;DEVICE MOUNTABLE?H BPL 79$ ;IF PL NOR! BITB #US.MNT,U.STS(R0) ;MOUNTED?T BNE 79$ ;IF NE NOE% MOV U.ACP(R0),R4 ;PICK UP TCB OF ACPT, BEQ 79$ ;IF EQ MOUNTED FOREIGN WITH NO ACP0 ADD #T.RCVL,R4 ;POINT TO RECEIVE QUEUE LISTHEAD CALL 130$ ;REORDER ACP QUEUE.79$: TST (SP)+ ;REMOVE UCB ADDRESS FROM STACK$80$: INC (SP) ;UPDATE LUN NUMBER # BR 50$ ;CONTINUE THROUGH LUN LOOP)*90$: TST (SP)+ ;POP LUN NUMBER FROM STACK 100$: ; .IF DF A$$CNT' BIT #T2.ABO,T.ST2(R5) ;IS TASK ABORTED) BNE 106$ ;IF NE YESB MOV KISAR6,R0 ;SAVE MAPPING+ MOV T.ACN(R5),KISAR6 ;MAP ACCOUNTING BLOCKE BEQ 105$ ;IF EQ NO ACCOUNTINGO+ CMPB #BT.TAB,@#B.TYP+140000 ;IS THIS A TAB  BNE 105$ ;IF NE NO; CMPB (SP),@#B.PRI+140000 ;IS NEW PRIORITY HIGHER THAN PREVQ BLOS 105$ ;IF LOS NO5 MOVB (SP),@#B.PRI+140000 ;RECORD NEW HIGHER PRIORITYN$105$: MOV R0,KISAR6 ;RESTORE MAPPING 106$: ; .ENDC ;A$$CNT, MOVB (SP)+,T.PRI(R5) ;SET NEW TASK PRIORITY2 MOV R5,R0 ;GET TCB ADDRESS OF TASK TO BE ALTERED" CALL $ACTRM ;REMOVE TCB FROM ATL$ BCS 110$ ;IF CS TCB NOT YET IN ATL# CALL $ACTTK ;RE-INSERT TCB IN ATL;)110$: MOV T.PCB(R5),R1 ;POINT TO TASK PCB+0 TST P.ATT(R1) ;TASK ATTACHED TO OWN REGION YET? BNE 115$ ;IF NE YESI MOV R5,R0 ;COPY TCB POINTERQ) CALL $ALTRG ;ALTER TASK REGION PRIORITYI BR 129$ ;R<115$: MOV T.ATT(R5),R4 ;POINT TO FIRST ENTRY IN ATTACH QUEUE9120$: TSTB A.MPCT-A.TCBL(R4) ;TASK MAPPED TO THIS REGION?T BEQ 125$ ;IF EQ NO MOV R5,R0 ;COPY TCB POINTERA- MOV A.PCB-A.TCBL(R4),R1 ;POINT TO MAPPED PCBM$ CALL $ALTRG ;ALTER REGION PRIORITY7125$: MOV (R4),R4 ;POINT TO NEXT ATTACHMENT DESCRIPTORC BNE 120$ ;IF NE THERE IS ONE.129$: CALLR $DRDSE ;DECLARE SIGNIFICANT EVENT:130$: MOV #-2,-(SP) ;CONSTRUCT TEMPORARY LISTHEAD ON STACK ADD SP,(SP) ;T CLR -(SP) ;R.140$: MOV R4,R0 ;GET I/O PACKET LISTHEAD ADDR/ MOV R5,R1 ;GET TCB ADDR OF TASK TO BE ALTEREDC, CALL $QRMVT ;REMOVE I/O PACKET BY TCB ADDR% BCS 150$ ;IF CS NO I/O PACKET FOUNDC0 CMPB I.PRI(R1),#250. ;PRIORITY HIGHER THAN 250?" BHI 145$ ;IF HI YES, DON'T TOUCH( MOVB 12(SP),I.PRI(R1) ;SET NEW PRIORITY0145$: MOV SP,R0 ;SET TEMPOR00j1jcDATADATADATADATADATADATADATAARY LISTHEAD ADDRESS2 CALL $QINSF ;INSERT I/O PACKET IN TEMPORARY LIST/ BR 140$ ;CONTINUE THROUGH PACKET REMOVAL LOOPS-150$: MOV SP,R0 ;SET TEMPORARY LISTHEAD ADDRR0 CALL $QRMVF ;REMOVE FIRST I/O PACKET FROM LIST% BCS 160$ ;IF CS NO I/O PACKET FOUND ) MOV R4,R0 ;GET I/O PACKET LISTHEAD ADDRB3 CALL $QINSP ;RE-INSERT I/O PACKET BY NEW PRIORITYC1 BR 150$ ;CONTINUE THROUGH PACKET INSERTION LOOPI9160$: CMP (SP)+,(SP)+ ;CLEAN TEMPORARY LISTHEAD OFF STACK RETURN ;(190$: DRSTS D.RS17 ;RETURN IE.RSU ERROR .DSABL LSB  .END PACKET IN TEMPORARY LIST/ BR 140$ ;CONTINUE THROUGH PACKET REMOVAL LOOPS-150$: MOV SP,R0 ;SET TEMPORARY LISTHEAD ADDRR0 CALL $QRMVF ;REMOVE FIRST I/O PACKET FROM LIST% BCS 160$ ;IF CS NO I/O PACKET FOUND ) MOV R4,R0 ;GET I/O PACKET LISTHEAD ADDRB3 CALL $QINSP ;RE-INSERT I/O PACKET BY NEW PRIORITYC1 BR 150$ ;CONTINUE THROUGH PACKET INSERTION LOOPI9160$: CMP (SP)+,(SP)+ ;CLEAN TEMPORARY LISTHEAD OFF STACK RETURN ;(190$: DRSTS D.RS17 ;RET .TITLE DRSCAS .IDENT /02.10/N ;,; COPYRIGHT (C) 1974, 1978, 1979, 1980, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.I;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDO9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.E;4; T. J. MILLER 23-OCT-77;O); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:$;G; B. S. MCCARTHY F;L;E; MODIFIED BY:;O; J. M. LAWLER 29-JUN-83 02.09;F0; JL162 -- CONDITIONALIZE DRSMP,DRMVS ON S$$MAP;A ; B. S. MCCARTHY 20-MAR-83 02.10;S5; BM295 -- REMOVE REFERENCES TO $HEADR TO STREAMLINE ; PROCESSING; ; SUPERVISOR MODE.;R; LOCAL MACRO DEFINITIONS;H S W .IF DF S$$LIB D .MCALL ABODF$,HWDDF$L" ABODF$ ;DEFINE TASK ABORT CODES& HWDDF$ ;DEFINE HARDWARE DEFINITIONS .;+; **-$DRSCA-SUPERVISOR CALLI;FG; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CALL TO CALL A SUPERVISOR MODEDE; SUBROUTINE AT THE SPECIFIED SUPERVISOR I SPACE VIRTUAL ADDRESS WITHE+; THE SPECIFIED COMPLETION ROUTINE ADDRESS.2;A ; DPB FORMAT:;B#; WD. 00 -- DIC(155.),DPB SIZE(3.).O2; WD. 01 -- ADDRESS OF SUPERVISOR ROUTINE TO CALL.5; WD. 02 -- ADDRESS OF SUPERVISOR COMPLETION ROUTINE.$;B ; INPUTS:L;B9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. 2; R3=ADDRESS OF SUPERVISOR ROUTINE TO CALL IN DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.E,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R ; OUTPUTS:;P=; THE SPECIFIED ROUTINE IS CALLED IN SUPERVISOR MODE WITH THEE5; COMPLETION ROUTINE SET UP. CONDITION CODE AND DSW:; RETURNS ARE RESERVED FOR THE SUPERVISOR ROUTINE ITSELF.;P;; (IF THERE IS INSUFFICIENT SPACE ON THE TASK STACK FOR THEO9; SUPERVISOR RETURN SETUP, THE ISSUING TASK IS ABORTED.) ;-0$DRSCA::MFPI SP ;RETRIEVE CURRENT STACK POINTER2 ADD $BTRMV,(SP) ;REMOVE BYTES FROM DIRECTIVE CALL) MOV (SP),R2 ;SAVE COPY OF STACK POINTERD) MTPI SP ;RESTORE MODIFIED STACK POINTER . CLR $BTRMV ;PREVENT DIRECTIVE DISPATCHER MOD2 TSTB $SUPFL ;ISSUING TASK LINKED TO SUPER MODE ?* BEQ 30$ ;IF EQ NO, DON'T ALLOW DIRECTIVE( CALL $SGFIN ;SET TO SET CARRY ON TRAPS4 MOV 2(R3),-(SP) ;PUSH SUPERVISOR COMPLETION ADDRESS MOV #$UMPC,R1 ;POINT TO TRAP PC MOV (R1)+,-(SP) ;SAVE TRAP PC MOV (R1),-(SP) ;SAVE TRAP PSS@ MOV #CSMODE!PMODE,(R1) ;SET FOR SUPERVISOR RETURN PS (PREV=USR)3 BIC #17,(SP) ;CLEAR ALL CONDITION CODES IN PS WORDC' BMI 10$ ;IF MI PREVIOUS MODE WAS USERT? BIC #^CPSMODE&PMODE,(R1) ;ELSE SET PREVIOUS MODE TO SUPERVISORT10$: CLC ;INIT C-BIT TO 0D7 MOV (R3)+,-(R1) ;SET SUPERVISOR RETURN PC FROM THE DPBI, MFPI #0 ;ATTEMPT TO FETCH LOCATION ZERO IN ;SUPERVISOR LIBRARYP, BCS 13$ ;IF CS NO LOCATION ZERO, CERTAINLY ;ISN'T NEW INTERFACE4 CMP (SP)+,(PC)+ ;IS LOCATION ZERO A CMP (SP)+,(SP)+7 CMP (SP)+,(SP)+ ;(IF IT IS THIS IS A VERSION 2 LIBRARYE) ;SINCE IT HAS THE ODT TRANSFER VECTORC- BEQ 15$ ;IF EQ HANDLE LINKAGE TO V2 LIBRARYE,13$: CLC ;CLEAR CARRY AND START V1 LINKAGE4 MTPD -(R2) ;PUSH TRAP PS ON SUPER STACK (MAY TRAP)4 MTPD -(R2) ;PUSH TRAP PC O001jjfN SUPER STACK (MAY TRAP)4 MTPD -(R2) ;PUSH COMPLETION ADDRESS ON SUPER STACK- BCS 20$ ;IF CS TRAP ON SUPERVISOR STACK REFN BR 17$ ;FINISH IN COMMON CODEI!15$: CLC ;CLEAR CARRY INITIALLY+3 MOV 4(SP),-(SP) ;COPY PREVIOUS MODE RETURN ADDRESS+( MTPD -(R2) ;PUT IT ON SUPERVISOR STACK4 MOV (SP),-(SP) ;WE NEED A PLACEHOLDER, MUST BE MOVE ;TO NOT AFFECT C BIT# MTPD -(R2) ;ONTO SUPERVISOR STACKN) MTPD -(R2) ;COPY PS TO SUPERVISOR STACK 1 MOV (SP),(SP)+ ;DISCARD RETURN PC, LEAVE C ALONEA- MTPD -(R2) ;PUSH COMPLETION ROUTINE ADDRESSU. BCS 20$ ;IF CS TRAP ON SUPER STACK REFERENCE417$: MOV R2,-(SP) ;PUSH NEW SUPERVISOR STACK POINTER* MTPI SP ;UPDATE SUPERVISOR STACK POINTER RETURN ;V,20$: MOV #S.CAST,R0 ;SET FOR BAD STACK ABORT" CALLR $ABCTK ;ABORT ISSUING TASK730$: DRSTS D.RS8 ;ERROR - INCONSISTENT WITH TASK STATE  E .ENDC;+%; **-$DRSMP-MODIFY SUPERVISOR MAPPINGR;O<; THIS DIRECTIVE ALLOWS A USER TASK TO MODIFY THE MAPPING OF; SUPERVISOR DATA SPACE.;E ; DPB FORMAT:M; "; WD. 00 -- DIC(201.),DPB SIZE(2.);; WD. 01 -- NEW SUPERVISOR MAPPING PARAMETER MASK. THE MASKV5; IS CODED IN BITS 8.-14. OF THE WORD, WITH BIT 8. 6; CORRESPONDING TO APR1, ETC. IF A BIT IS SET TO 0,3; THEN THE CORRESPONDING APR IS MAPPED TO USER D;3; SPACE. IF ONE, THEN THE APR IS MAPPED TO SUPERI5; I SPACE. APR 0 IS ALWAYS MAPPED TO USER D SPACE.I.; IF BIT 15 IS SET, THE MAPPING MASK IS NOT); CHANGED, BUT THE STATUS IS RETURNED. ;E ; INPUTS: ;C*; R4=ADDRESS OF HEADER OF THE CURRENT TASK;. ; OUTPUTS:;>; THE SUPERVISOR MAPPING MASK (H.SMAP) IS SET AND THE APRS ARE;; UPDATED. THE DSW IS RETURNED WITH BITS 0-7 BEING THE HIGHR;; BYTE OF THE PSW (AT TIME OF DIRECTIVE ISSUANCE), AND BITS <; 8.-14. BEING THE OLD MAPPING MASK. BIT 15. IS ALWAYS ZERO.<; IN SYSTEMS WHICH DO NOT SUPPORT SUPERVISOR MODE LIBRARIES,+; THE HIGH BYTE IS ALWAYS RETURNED AS ZERO.E;- .IF DF, S$$MAP=$DRSMP::MOVB $STACK-1,2(SP) ;SET LOW BYTE OF DIRECTIVE STATUSC .IF DF S$$LIB9 MOVB H.SMAP(R4),3(SP) ;SET HIGH BYTE OF DIRECTIVE STATUSS( MOV (R3),R0 ;GET NEW MAPPING PARAMETER+ BMI 10$ ;IF MI INFORMATION ONLY DIRECTIVEI/ SWAB R0 ;PUT SUPER MAP WHERE WE CAN GET AT ITE2 MOVB R0,H.SMAP(R4) ;RESET SUPERVISOR MAPPING MASK. TSTB $SUPFL ;TASK USING SUPERVISOR WINDOWS ? BEQ 10$ ;IF EQ NOO% CALLR $LSUP1 ;RESET SUPER MODE APRS 10$: ;REFERENCE LABEL .ENDC ; DF S$$LIB) RETURN ;RETURN TO DIRECTIVE DISPATCHER(;+,; **-$DRMVS-MOVE TO/FROM VARIOUS TASK SPACES;@; THIS DIRECTIVE ALLOWS A USER TASK TO READ/WRITE DATA (ONE WORD>; AT A TIME), INTO ITS SUPER/USER I/D SPACES. THE DIRECTIVE ISE; INTENDED FOR USE BY COMPONENTS SUCH AS DEBUGGERS, WHERE EASE OF USEM8; OF THE DIRECTIVE OVERRIDES PERFORMANCE CONSIDERATIONS.;L ; DPB FORMAT:U;V"; WD 00. -- DIC(203.),DPB SIZE(4.)*; WD 01. -- CONTROL FLAGS WORD. FLAGS ARE:*; BIT 0 - IF ZERO, TARGET SPACE IS USER$; IF ONE, TARGET SPACE IS SUPER*; BIT 1 - IF ZERO, TARGET SPACE IS INST#; IF ONE, TARGET SPACE IS DATAI,; BIT 2 - IF ZERO, DIRECTION IS MOVE FROM#; IF ONE, DIRECTION IS MOVE TOE.; WD 02. -- ADDRESS OF SOURCE/DESTINATION WORD*; WD 03. -- ADDRESS OF BUFFER IF MOVE FROM; VALUE IF MOVE TOR;I ; INPUTS:S;R); R3=ADDRESS OF CONTROL FLAGS WORD IN DPBU;V ; OUTPUTS:;I&; THE DESTINATION OR BUFFER IS UPDATED;L9; A STATUS OF D.RS16 IS RETURNED IF A MOVE TO IS EXECUTED <; FOR A DESTINATION TO WHICH THE ISSUEING TASK DOES NOT HAVE; WRITE ACCESS.I;N<; A STATUS OF D.RS98 IS RETURNED IF THE ADDRESS OR BUFFER IS*; NOT IN THE TASK'S CURRENT ADDRESS SPACE.;-($DRMVS::MOV (R3)+,R5 ;PICK UP FLAGS WORD$ MOV #UINDR0,R0 ;ASSUME USER I-SPACE ASR R5 ;IS IT USER SPACE ? .IF DF S$$LIB BCC 10$ ;IF CC YES1 TSTB $SUPFL ;CURRENT TASK USE SUPERVISOR MODE ?P$ BEQ 30$ ;IF EQ NO, ILLEGAL ADDRESS+ MOV #SISDR0,R0 ;ADJUST TO SUPERVISOR SPACEN10$: ;REFERENCE LABEL .ENDC ; DF S$$LIB ASR R5 ;IS IT I OR D SPACE ? .IF DF U$$DAS!S$$LIBI BCC 20$ ;IF CC I SPACE) A001j jcDATADATADATADATADATADATADATADD #UDSDR0-UINDR0,R0 ;ADJUST TO D SPACEO20$: ;REFERENCE LABEL .ENDC ; DF U$$DAS!S$$LIBO% MOV (R3)+,R4 ;GET ADDRESS OF OPERANDD BIT #1,R4 ;ODD ADDRESS ? BNE 30$ ;IF NE YES MOV R4,R1 ;MAKE A COPY& BIC #17777,R1 ;CLEAR ALL BUT APR BITS SWAB R1 ;MOVE TO LOW HALFD# ASH #-4,R1 ;AND CREATE WORD INDEXD! ADD R1,R0 ;POINT TO CORRECT PDRP( MOV (R0),R2 ;GET PDR CONTENTS FOR TEST% BNE 40$ ;IF NE THERE IS SOME ACCESS *30$: DRSTS D.RS98 ;EXIT WITH ERROR STATUS+40$: MOV R4,R1 ;COPY VIRTUAL ADDRESS AGAIN0# BIC #160000,R1 ;CLEAR OUT APR BITSN BIC #77,R1 ;32 WORD BOUNDARY ASL R1 ;SHIFT TO SAME PLACED ASL R1 ;AS IN PDRT+ BIC #100377,R2 ;CLEAR ALL BUT PLF FROM PDR- CMP R1,R2 ;DESIRED ADDRESS WITHIN MAPPING ? $ BHI 30$ ;IF HI NO, ILLEGAL ADDRESS& MOV (R3),R3 ;SAVE ADDRESS (OR VALUE)5 MOV UINAR0-UINDR0(R0),KISAR6 ;MAP TO DESIRED ADDRESS2+ BIC #160000,R4 ;CLEAR ALL BUT DISPLACEMENTE( BIS #140000,R4 ;COMMUTE ADDRESS TO APR6 ASR R5 ;MOVE FROM OR TO ?0 BCS 50$ ;IF CS IT'S MOVE TOR MOV (R4),-(SP) ;GET VALUE MOV #2,R1 ;SET SIZE OF BUFFER * CALL $ACHKP ;ADDRESS CHECK AND MAP BLOCK! MOV (SP)+,(R3) ;RETURN PARAMETER# RETURN ;AND EXITB+50$: BIT #4,(R0) ;WRITE ACCESS TO REGION ?S BNE 55$ ;IF NE YES,ALLOW/ MOV $TKTCB,R5 ;GET TCB ADDRESS OF ISSUING TASK / BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED  BEQ 60$ ;IF EQ NO, DISALLOW#&55$: MOV R3,(R4) ;FILL IN DESTINATION RETURN ;AND EXIT SUCCESSFULLY'60$: DRSTS D.RS16 ;PRIVILEGE VIOLATIONS  .ENDC ; DF S$$MAP M .END,-(SP) ;GET VALUE MOV #2,R1 ;SET SIZE OF BUFFER * CALL $ACHKP ;ADDRESS CHECK AND MAP BLOCK! MOV (SP)+,(R3) ;RETURN PARAMETER# RETURN ;AND EXITB+50$: BIT #4,(R0) ;WRITE ACCESS TO REGION ?S BNE 55$ ;IF NE YES,ALLOW/ MOV $TKTCB,R5 ;GET TCB ADDRESS OF ISSUING TASK / BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED  BEQ 60$ ;IF EQ NO, DISALLOW#&55$: MOV R3,(R4) ;FILL IN DESTINATION RETURN ;AND EXIT SUCCESSFULLY'60$: DRSTS D.RS16 ;PRIVILEGE VIOLATIONS  .ENDC ; .TITLE DRSEDR .IDENT /09.10/,; C; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;U<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;$; D. N. CUTLER 2-SEP-73E;O); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:D;V; J. M. LAWLER; B. S. MCCARTHY;P; MODIFIED BY:;L ; B. S. MCCARTHY 23-MAY-82 09.01;S,; BM255 -- ADD G$$GEF CONDITIONALS FOR P/OS;C; M. PETTENGILL 1-JUN-82 09.024; MLP901 -- CORRECT BM255 CONDITIONALS IN WTLO CODE; ; J. R. KAUFFMAN 17-OCT-82 09.03;N0; JRK263 -- MOVE MORE CODE TO DIRECTIVE COMMONS;R; J. M. LAWLER 20-OCT-82 09.04 ;D1; JL137 -- FIX BUG WHICH CALCULATED EF MASK WORDS; INCORRECTLY;.-; SIGNIFICANT EVENT AND EVENT FLAG DIRECTIVESM;U; MACRO LIBRARY CALLS ;M .MCALL HDRDF$,TCBDF$Y% HDRDF$ ;DEFINE TASK HEADER OFFSETST, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+; **-$DRREF-READ EVENT FLAGE;L?; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO READ AN EVENT FLAG AND ; REPORT ITS POLARITY.;1 ; DPB FORMAT:;"; WD. 00 -- DIC(37.),DPB SIZE(2.).1; WD. 01 -- EVENT FLAG NUMBER OF FLAG TO BE READ.; ; INPUTS: ; ; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS. 9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.I+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.H/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)E;S9; C=0 WITH A DIRECTIVE STATUS OF 'D.RS00' IF THE FLAG WAS); CLEAR OR 'D.RS22' IF THE FLAG WAS SET.B;- .ENABL LSB1$DRREF::BIT R0,(R1) ;TEST FLAG  BNE 10$ ;IF NE FLAG IS SET$ DRSTS D.RS00 ;SET DIRECTIVE STATUS;+; **-$DRCEF-CLEAR EVENT FLAG;A@; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CLEAR AN EVENT FLAG AND&; REPORT ITS POLARITY BEFORE CLEARING.;R ; DPB FORMAT: ;K"; WD. 00 -- DIC(31.),DPB SIZE(2.).4; WD. 01 -- EVENT FLAG NUMBER OF FLAG TO BE 00 jjfCLEARED.;U ; INPUTS:K;; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS.A9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.B+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.B/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.I,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;L5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)A;V9; C=0 WITH A DIRECTIVE STATUS OF 'D.RS00' IF THE FLAG WAS ); CLEAR OR 'D.RS22' IF THE FLAG WAS SET.S;-$DRCEF::BIT R0,(R1) ;TEST FLAG  BEQ 20$ ;IF EQ FLAG IS CLEAR BIC R0,(R1) ;CLEAR FLAG (10$: DRSTS D.RS22 ;SET DIRECTIVE STATUS;+ ; **-$DRRAF-READ ALL EVENT FLAGS%; **-$DRREF-READ EXTENDED EVENT FLAGSH;AC; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A FOUR (OR SIX) WORD K>; BUFFER WITH THE TASK LOCAL AND COMMON EVENT FLAGS (AND GROUP; GLOBAL FLAGS).;D ; DPB FORMAT: ;K(; WD. 00 -- DIC(39.),DPB SIZE(2. OR 3.).3; WD. 01 -- ADDRESS OF A FOUR (OR SIX) WORD BUFFER. ;G; BUFFER FORMAT:;C(; WD. 00 -- TASK LOCAL EVENT FLAGS 1-16.); WD. 01 -- TASK LOCAL EVENT FLAGS 17-32.A%; WD. 02 -- COMMON EVENT FLAGS 33-48.T%; WD. 03 -- COMMON EVENT FLAGS 49-64.F,; WD. 04 -- GROUP GLOBAL EVENT FLAGS 65.-80.,; WD. 05 -- GROUP GLOBAL EVENT FLAGS 81.-96.; ; INPUTS:S; 9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. .; R3=ADDRESS OF THE BUFFER ADDRESS IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)T;A-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.-3; DIRECTIVE STATUS OF +1 IS RETURNED IF SUCCESSFUL3.; DIRECTIVE STATUS OF 'D.RS00' IS RETURNED IF); GROUP GLOBAL EVENT FLAGS DO NOT EXISTR(; FOR THIS TASK'S GROUP. IN THIS CASE); THE LOCAL AND COMMON EVENT FLAGS ARE O'; RETURNED AND THE GROUP GLOBAL FLAGS ; ARE ZERO.E; C=1 IF DIRECTIVE IS REJECTED.H8; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF BUFFER IS,; OUTSIDE OF ISSUING TASK'S ADDRESS SPACE.;-6$DRRAF::MOV (R3),R3 ;GET ADDRESS OF EVENT FLAG BUFFER. MOV #4*2,R1 ;SET LENGTH OF BUFFER IN BYTES  .IF DF X$$HDR&G$$GEFU0 MOVB H.CUIC+1(R4),-(SP) ;SAVE BYTE FROM HEADER  .ENDC ; DF X$$HDR&G$$GEFD MOVB $DICSV+1,R4 ;GET DPB SIZE. CMPB R4,#2. ;READ ALL EVENT FLAGS DIRECTIVE? BEQ 16$ ;IF EQ YES) CMPB R4,#3. ;READ EXTENDED EVENT FLAGS?  BNE 18$ ;IF NE NOC& CMP (R1)+,(R1)+ ;ADD 4 TO BUFFER SIZE,16$: CALL $ACHKP ;ADDRESS CHECK USER BUFFER0 MOV T.EFLG(R5),(R3)+ ;INSERT LOCAL FLAGS 1-16 1 MOV T.EFLG+2(R5),(R3)+ ;INSERT LOCAL FLAGS 17-32M, MOV $COMEF,(R3)+ ;INSERT COMMON FLAGS 33-48. MOV $COMEF+2,(R3)+ ;INSERT COMMON FLAGS 49-64( CMPB R4,#2. ;EXTENDED FLAGS DIRECTIVE? BEQ 17$ ;IF EQ NOM* CLR (R3)+ ;INITIALIZE GROUP GLOBAL FLAGS CLR (R3) ; .IF DF G$$GEF .IF DF X$$HDR- MOVB (SP),R4 ;RELOAD GROUP CODE FROM HEADER .IFF ' MOV $HEADR,R4 ;GET TASK HEADER ADDRESSE, MOVB H.CUIC+1(R4),R4 ;GET TASK GROUP NUMBER .ENDC2 CALL $SRGEF ;SEARCH FOR GROUP GLOBAL EVENT FLAGS BCS 20$ ;IF CS NOT FOUND0 MOV G.EFLG+2(R1),(R3) ;INSERT GROUP FLAGS 81-96/ MOV G.EFLG(R1),-(R3) ;INSERT GROUP FLAGS 65-80F .IFF ; DF G$$GEF#% BR 20$ ;GROUP GLOBALS NEVER PRESENT  .IFTF ; DF G$$GEF17$: ;REFERENCE LABEL .IFT ; DF G$$GEF .IF DF X$$HDR TST (SP)+ ;CLEAN UP STACKR .ENDC O .ENDC ; DF G$$GEF RETURN$18$: DRSTS D.RS99 ;INVALID DPB SIZE;+; **-$DRSEF-SET EVENT FLAG;R>; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SET AN EVENT FLAG AND$; REPORT IS POLARITY BEFORE SETTING.;M ; DPB FORMAT:,;)"; WD. 00 -- DIC(33.),DPB SIZE(2.).0; WD. 01 -- EVENT FLAG NUMBER OF FLAG TO BE SET.;F ; INPUTS:; ; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS.9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.$+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.C/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.S,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)O;T9; C=0 WITH A DIRECTIVE STATUS OF 'D.RS00' IF THE00 jjcDATADATADATADATADATADATADATA FLAG WASM); CLEAR OR 'D.RS22' IF THE FLAG WAS SET.D;-6$DRSEF::BIT #T2.SEF,(R2) ;TASK STOPPED FOR EVENT FLAG? BEQ 19$ ;IF EQ NO@ BIC #T2.STP*2!T2.STP,(R2) ;UNSTOP THE TASK. NOTE THAT THERE IS% ;NO NEED TO CALL $NXTSK OR $SETCRU$ ;SINCE THIS IS THE CURRENT TASK.19$: BIT R0,(R1) ;TEST FLAG BNE 10$ ;IF NE FLAG IS SET BIS R0,(R1) ;SET FLAGO(20$: DRSTS D.RS00 ;SET DIRECTIVE STATUS .DSABL LSBV ;+ E+; **-$DRSTS-STOP FOR SINGLE EVENT FLAG S ; E; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO STOP THE ISSUING TASK UNTIL %; A SPECIFIED EVENT FLAG IS SET. D ; ; DPB FORMAT: N ; '; WD. 00 -- DIC(135.),DPB SIZE(2.). E4; WD. 01 -- EVENT FLAG NUMBER OF FLAG TO WAITFOR. ; ; INPUTS: T ; ; R0=EVENT FLAG MASK WORD. $"; R1=EVENT FLAG MASK ADDRESS. ;; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. .; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. 2; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. /; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. L ; 8; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; 0; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ); DIRECTIVE STATUS OF +1 IS RETURNED. W$; C=1 IF DIRECTIVE IS REJECTED. ;; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE ISSUING T; TASK IS AT AST STATE. A8; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN EVENT .; FLAG NUMBER OTHER THAN A LOCAL EVENT FLAG ; NUMBER IS SPECIFIED. ;- K  .ENABL LSB 5$DRSTS::CMP -2(R3),#64. ;LOCAL OR COMMON EVENT FLAG ?  .IF DF G$$GEF BLOS 5$ ;IF LOS YES 1 CMP -2(R3),#96. ;LEGAL GROUP GLOBAL EVENT FLAG ?  BHI 20$ ;IF HI NO ( MOV R0,-(SP) ;SAVE EVENT FLAG MASK WORD+ MOV R1,-(SP) ;SAVE EVENT FLAG MASK ADDRESS.( CALL 30$ ;DOES THIS EVENT FLAG EXIST ?' BCS 20$ ;IF CS NO, ILLEGAL EVENT FLAGA. MOV (SP)+,R1 ;RESTORE EVENT FLAG MASK ADDRESS+ MOV (SP)+,R0 ;RESTORE EVENT FLAG MASK WORD  .IFF ; DF G$$GEF ' BHI 20$ ;IF HI NO, ILLEGAL EVENT FLAG  .IFTF ; DF G$$GEF"5$: TST (R2) ;TASK AT AST STATE ?& BMI 10$ ;IF MI YES, CANCEL DIRECTIVE3 BIS #T2.SEF,(R2) ;SET STOPPED FOR EVENT FLAG BIT A% JMP $DRWFS ;FINISH STATE PROCESSINGP010$: DRSTS D.RS80 ;ISSUING TASK IS AT AST STATE/20$: DRSTS D.RS97 ;ILLEGAL EVENT FLAG NUMBER V .IFT ; DF G$$GEFS.30$: MOV R4,-(SP) ;SAVE ADDRESS OF TASK HEADER. MOVB H.CUIC+1(R4),R4 ;GET TASK'S GROUP NUMBER4 CALL $SRGEF ;VALIDATE THE GROUP GLOBAL EVENT FLAGS* MOV (SP)+,R4 ;RESTORE TASK HEADER ADDRESS RETURN ;D .ENDC ; DF G$$GEF ;+ B2; **-$DRSTL-STOP FOR LOGICAL OR OF EVENT FLAGS ; E; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO STOP THE ISSUING TASK UNTIL :.; ANY OF THE SPECIFIED EVENT FLAGS IS SET. ; ; DPB FORMAT: G ; '; WD. 00 -- DIC(137.),DPB SIZE(3.). ); WD. 01 -- EVENT FLAG SET INDICATOR. 1&; WD. 02 -- EVENT FLAG MASK WORD. ; ; EVENT FLAG SETS: ; %; SET 1 -- EVENT FLAGS 1.-16. LOCALS%; SET 2 -- EVENT FLAGS 17.-32. LOCAL&; SET 3 -- EVENT FLAGS 33.-48. GLOBAL&; SET 4 -- EVENT FLAGS 49.-64. GLOBAL,; SET 5 -- EVENT FLAGS 65.-80. GROUP GLOBAL,; SET 6 -- EVENT FLAGS 81.-96. GROUP GLOBAL ; ; INPUTS: . ; ;; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ..; R3=ADDRESS OF THE SECOND WORD IN THE DPB. 2; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. /; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; 8; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; 0; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ); DIRECTIVE STATUS OF +1 IS RETURNED. -$; C=1 IF DIRECTIVE IS REJECTED. 4; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE $; ISSUING TASK IS AT AST STATE. 3; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN ,; ILLEGAL EVENT FLAG SET OR A ZERO EVENT ; FLAG MASK IS SPECIFIED. O ;- ($DRSTL::TST 2(R3) ;NON-ZERO MASK WORD ? BEQ 20$ ;IF 00 j4kfEQ NO, ILLEGAL0 CMP (R3),#3 ;ARE EVENT FLAGS LOCAL OR GLOBAL ? .IF DF G$$GEF BLOS 40$ ;IF LOS YES/ CMP (R3),#5 ;LEGAL GROUP GLOBAL EVENT FLAGS ?E BHI 20$ ;IF HI NOC- CALL 30$ ;ARE THESE GROUP GLOBALS DEFINED ?' BCS 20$ ;IF CS NO, ILLEGAL .IFF ; DF G$$GEFT" BHI 20$ ;IF HI NO, ILLEGAL GROUP .ENDC ; DF G$$GEF#40$: TST (R2) ;TASK AT AST STATE ? ' BMI 10$ ;IF MI,YES - CANCEL DIRECTIVED3 BIS #T2.SEF,(R2) ;SET STOPPED FOR EVENT FLAG BIT ; .DSABL LSB ;+.; **-$DRWFL-WAIT FOR LOGICAL OR OF EVENT FLAGS;OE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SUSPEND THE EXECUTION OF THEL=; ISSUING TASK UNTIL ANY OF THE SPECIFIED EVENT FLAGS IS SET.0;; ; DPB FORMAT: ;B"; WD. 00 -- DIC(43.),DPB SIZE(3.).%; WD. 01 -- EVENT FLAG SET INDICATOR.2!; WD. 02 -- EVENT FLAG MASK WORD.N;;; EVENT FLAG SETS:;(; SET 0 -- EVENT FLAGS 1.-16.I; SET 1 -- EVENT FLAGS 17.-32.; SET 2 -- EVENT FLAGS 33.-48.; SET 3 -- EVENT FLAGS 49.-64.; SET 4 -- EVENT FLAGS 65.-80.; SET 5 -- EVENT FLAGS 81.-96.;F ; INPUTS:S;O9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.U+; R3=ADDRESS OF THE SECOND WORD IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;15; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)M; -; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.E&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.S1; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN-*; ILLEGAL EVENT FLAG SET OR A ZERO EVENT; FLAG MASK IS SPECIFIED.;-($DRWFL::MOV (R3)+,R1 ;GET EVENT FLAG SET .IF DF G$$GEF CMP R1,#5 ;LEGAL SET?N .IFF  CMP R1,#3 ; LEGAL SET? .ENDC BHI 10$ ;IF HI NOE ASL R1 ;CONVERT TO WORD INDEX.' MOV (R3),R0 ;GET EVENT FLAG MASK WORD # BEQ 10$ ;IF EQ NO FLAGS SPECIFIEDC$ CMP R1,#3 ;COMMON GLOBAL FLAG SET? BLT 20$ ;IF LT NO  .IF DF G$$GEF% CMP R1,#7 ;GROUP GLOBAL EVENT FLAG?E BLT 5$ ;IF LT NO MOV R4,-(SP) ;SAVE REGISTERS  MOV R0,-(SP) ; ( MOV R1,-(SP) ;SAVE EVENT FLAG SET INDEX' MOVB H.CUIC+1(R4),R4 ;GET GROUP NUMBERL2 CALL $SRGEF ;SEARCH FOR GROUP GLOBAL EVENT FLAGS BCS 10$ ;IF CS NOT FOUND3 ADD (SP)+,R1 ;POINT TO PROPER GROUP GLOBAL EF WORD 8 ADD #G.EFLG-10,R1 ;IN THE GROUP GLOBAL EVENT FLAG BLOCK MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R4 ;P1 INC T.GGF(R5) ;INC GRP GLOBAL USE COUNT FOR TASKN1 CMP -2(R3),#4 ;FIRST SIXTEEN GROUP GLOBAL FLAGS?V BEQ 3$ ;IF EQ YES;3 INCB G.CNT-(R1) ;INC GROUPS ACCESS COUNTP BR 4$ ;JOIN COMMON CODEV13$: INC G.CNT-G.EFLG(R1) ;INC GROUPS ACCESS COUNTP<4$: CALLR $DRWS1 ;JOIN COMMON CODE TO SET WFR ON GLOBAL EFN .ENDC ; DF G$$GEF65$: ADD #$COMEF-4,R1 ;POINT TO PROPER COMMON FLAG WORD% BR 30$ ;FINISH UP AS IF SINGLE FLAG (10$: DRSTS D.RS97 ;SET DIRECTIVE STATUS(20$: ADD R5,R1 ;ADD ADDRESS OF TASK TCB0 ADD #T.EFLG,R1 ;POINT TO PROPER TASK FLAGS WORD330$: CALLR $DRWFS ;JOIN COMMON CODE TO SET WFR BITE .ENDINCB G.CNT-(R1) ;INC GROUPS ACC .TITLE DRSMG: .IDENT /01.03/T P;O5; COPYRIGHT (C) 1981 BY DIGITAL EQUIPMENT CORPORATIONC; ALL RIGHTS RESERVED.;:<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;G; P. J. BEZEREDI 30-MAR-81;M; SEND MESSAGE DIRECTIVE;P; PREVIOUSLY MODIFIED BY:;T; T. M. MARTIN;O; MODIFIED BY:;O; J. M. LAWLER 29-JUN-83 1.02E;S%; JL162 -- FINISH CONDITIONALIZATIONC;N; S.C. ADAMS 29-JULY-83 1.03;;:; SA510 -- REPLACE CALLS TO $CRPKT AND $QUPKT WITH $CREQU; ; ; MACRO LIBRARY CALLSN;O .MCALL EPKDF$* EPKDF$ ;DEFINE ERROR LOG PACKET OFFSETS;+; **-$DRSMG-SEND MESSAGE;S<; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SEND A MESSAGE TO A; SYSTEM PROCESS.E;E ; DPB FORMAT:M; ); WD. 00 -- DIC(171.),DPB SIZE (VARIABLE)D; WD. 01 -- TARGET IDENTIFIER%; WD. 02 -- ADDRESS OF MESSAGE BUFFER2$; WD. 03 -- LENGTH OF MESSAGE BUFFER3; WD. 04 -- START OF TARGET SPECIFIC PARAMETER LIST3;;7; PARA004kE kcDATADATADATADATADATADATADATAMETER LIST FOR TARGET SPECIFIC IDENTIFIER SM.SER:E;&; WD. 04 -- ERROR LOG PACKET TYPE CODE); WD. 05 -- ERROR LOG PACKET SUBTYPE CODEA*; WD. 06 -- LOGICAL UNIT NUMBER (OPTIONAL)(; WD. 07 -- CONTROL MASK WORD (OPTIONAL);O ; INPUTS:S; @; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.6; R3=ADDRESS OF THE TARGET IDENTIFIER WORD IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; ; OUTPUTS:;F-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.R&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.O1; DIRECTIVE STATUS OF 'D.RS5' IS RETURNED IF THED+; SPECIFIED LUN IS ASSIGNED TO A NON-MASS /; STORAGE DEVICE, OR THE LUN IS NOT ASSIGNED.S5; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF INVALIDE#; TARGET PROCESS OR CONTROL MASK.A6; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF INVALID ; DPB SIZE.R8; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF PRIVILEGE; VIOLATION.;; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF ERROR LOGGINGI.; IS NOT ACTIVE AND PACKET CANNOT BE QUEUED.6; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF THERE IS; NOT ENOUGH POOL.;- .IF DF, E$$LOGA($DRSMG::MOVB -1(R3),R0 ;GET THE DPB SIZE8 CMP (R3)+,#SM.SER ;IS THE TARGET PROCESS ERROR LOGGING? BNE ER8 ;IF NE NOA% CMPB R0,#6. ;IS THE DPB BIG ENOUGH?C BLO ER99 ;IF LO NO7 MOV #SM.HDR!SM.TSK,-(SP) ;INITIALIZE THE FLAGS TO USEA) CMPB R0,#8. ;DOES A CONTROL MASK EXIST?  BLO 10$ ;IF LO NOC. BIS 12(R3),(SP) ;OBTAIN THE CONTROL MASK WORD7 BIT #SM.DID!SM.DOP!SM.DAC!SM.DAT,(SP) ;INVALID FLAGS?D BNE ER8 ;IF NE YES# BIT #SM.ZER,(SP) ;ZERO I/O COUNTS?  BEQ 10$ ;IF EQ NO.0 BIT #T3.PRV,T.ST3(R5) ;IS THE TASK PRIVILEGED? BEQ ER16 ;IF EQ NO010$: TST $ERRPT ;IS THE ERROR LOGGER INSTALLED? BEQ ER7 ;IF EQ NOP- BIT #ES.DAT,$ERFLA ;CAN WE LOG DATA PACKETS?; BNE 20$ ;IF NE YES) BIT #SM.CMD,(SP) ;NO, IS THIS A COMMAND?A BEQ ER7 ;IF EQ NO, ERROR120$: CMP (R3)+,(R3)+ ;POINT TO THE TYPE CODE WORD,( MOV (R3)+,-(SP) ;GET THE TYPE CODE WORD$ MOVB (R3)+,1(SP) ;STUFF THE SUBCODE( TSTB (R3)+ ;POINT TO POSSIBLE LUN WORD% CMPB R0,#7. ;DOES A LUN WORD EXIST?$ BLO 30$ ;IF LO NO3$ TST (R3) ;IS A LUN NUMBER PRESENT? BEQ 30$ ;IF EQ NO  CALL $MPLUN ;MAP THE LUN- BCC 26$ ;IF CC LUN IS ASSIGNED TO SOMETHING724$: DRSTS D.RS5 ;NOT ASSIGNED TO ERROR LOGGING DEVICE 026$: BIT #DV.MSD,U.CW1(R0) ;MASS STORAGE DEVICE?- BEQ 24$ ;IF EQ NO, NOT ERROR LOGGING DEVICE+" TST -(R3) ;POINT BACK TO THE LUN5 BIS #SM.DID,2(SP) ;YES, LOG A DEVICE IDENT SUBPACKET,,30$: MOV R0,-(SP) ;SAVE POSSIBLE UCB ADDRESS1 CMP -(R3),-(R3) ;POINT BACK TO THE BUFFER LENGTHD) MOV -(R3),R1 ;GET BUFFER LENGTH IN BYTES; BEQ 40$ ;IF EQ NO BUFFER8 BIS #SM.DAT,4(SP) ;INDICATE A DATA SUBPACKET IS PRESENT% MOV -(R3),R3 ;GET THE BUFFER ADDRESS4! MOV R1,-(SP) ;COPY BUFFER LENGTHR+ CALL $ACHKP ;ADDRESS CHECK AND MAP BUFFER)$ MOV (SP)+,R1 ;RESTORE BUFFER LENGTH'40$: MOV (SP)+,R5 ;RETRIEVE UCB ADDRESSR# MOV (SP)+,R0 ;RETRIEVE ERROR CODESD) MOV (SP)+,R2 ;RETRIEVE CONTROL MASK WORD,- MOV $TKTCB,R4 ;RETRIEVE THE TASK TCB ADDRESS1 CALL $CREQU ; CREATE AND QUEUE ERROR LOG PACKET BCS ER1 ; IF CS NO PACKETG RETURNE ER1: DRSTS D.RS1 ;NO POOL SPACE+ER7: DRSTS D.RS7 ;ERROR LOGGING NOT ACTIVEP1ER8: DRSTS D.RS8 ;INVALID TARGET OR CONTROL MASKV(ER16: DRSTS D.RS16 ;PRIVILEGE VIOLATION%ER99: DRSTS D.RS99 ;INVALID DPB SIZEV .ENDC ; DF E$$LOG .ENDH'40$: MOV (SP)+,R5 ;RETRIEVE UCB ADDRESSR# MOV (SP)+,R0 ;RETRIEVE ERROR CO .TITLE DRSPW .IDENT /14.08/;(; COPYRIGHT (C) 1982, 1983, 1984, 1985$; BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED@ ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; M. S. FOX 21-MAY-81 ;C ; THIS MODULE WAS ORIGINALLY WRITTEN BY T. J. MILLER ON 26-MAY-77(; AND HAS BEEN PREVIOUSLY MODIFIED BY:;; R. E. CALDWELL; B. S. MCCARTHY; T. J. MILLER; J. E. 00E kkfPROVINOI;R-; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:C;2; J. M. LAWLER; T. M. MARTIN; B. S. MCCARTHY; -; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:S; ; B. S. MCCARTHY; J. W. BERZLE; J. R. KAUFFMAN ;O- ; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY: ;S ; J. W. BERZLE ; P. K. M. WEISS ;R- ; MODIFIED FOR RSX-11M-PLUS VERSION 4.2 BY: ;N" ; B. S. MCCARTHY 30-MAR-89 14.07 ;5 ; BM420 -- CORRECT A FEW PROBLEMS IN $TCBCP/$REMO1R ; " ; B. S. MCCARTHY 30-MAR-89 14.08 ;X2 ; BM420 -- CORRECT A PROBLEM BETWEEN THE RATHER. ; INOCCUOUS CORRECTION OF $REMOV TO $REMO1/ ; AND THE BRAIN-DEAD ORIGINAL DESIGN OF THE ; CODE.A ;G+; THIS MODULE CONTAINS THE DIRECTIVE ROUTINES AND PRIMARY SUBROUTINES 3,; WHICH PROVIDE PARENT-OFFSPRING TASKING SUPPORT. -;I.; MACRO LIBRARY CALLSR/;1012%3 .MCALL DCBDF$,PKTDF$,TCBDF$,UCBDF$345 .IF DF N$$DIR67 .MCALL LNMDF$8)9 LNMDF$ ;DEFINE CONTEXT BLOCK OFFSETSS:; .ENDC ;DF N$$DIR8<0= DCBDF$ ;DEFINE DEVICE CONTROL BLOCK SYMBOLS.> PKTDF$ ;DEFINE I/O PACKET AND OCB OFFSETS.? TCBDF$ ;DEFINE TASK CONTROL BLOCK SYMBOLS.@ UCBDF$ ;DEFINE UNIT CONTROL BLOCK SYMBOLSAB;+LC; **-$DRSRC-SEND REQUEST AND CONNECT / VARIABLE SEND REQUEST AND CONNECT /!D; SEND REQUEST AND PASS OCB E;R F; SRDC$G;GH; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO QUEUE A SEND DATA PACKET FORGI; THE SPECIFIED TASK, CONNECT TO THE TASK AND REQUEST IT IF IT IS NOTJ; ALREADY ACTIVE.K;DL; DPB FORMAT: (FOR SDRC$)LM;K%N; WD. 00 -- DIC(141.),DPB SIZE(7.).T/O; WD. 01 -- FIRST HALF OF TASK NAME IN RAD50.L0P; WD. 02 -- SECOND HALF OF TASK NAME IN RAD50.%Q; WD. 03 -- ADDRESS OF SEND BUFFER.E=R; WD. 04 -- EFN, LENGTH OF ESB (0 = 1 WORD, >0 = 8. WORDS).AS; WD. 05 -- ADDRESS OF AST ROUTINE TO ENTER UPON STATUS RETURN.D+T; WD. 06 -- ADDRESS OF EXIT STATUS BLOCK. U;P V; VSRC$W;HBX; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO QUEUE A VARIABLE LENGTHDY; SEND DATA PACKET FOR THE SPECIFIED TASK, CONNECT TO THE TASK AND+Z; REQUEST IT IF IT IS NOT ALREADY ACTIVE.-[;S\; DPB FORMAT: (FOR VSRC$)L]; &^; WD. 00 -- DIC (141.),DPB SIZE(8.)./_; WD. 01 -- FIRST HALF OF TASK NAME IN RAD50. 0`; WD. 02 -- SECOND HALF OF TASK NAME IN RAD50.%a; WD. 03 -- ADDRESS OF SEND BUFFER.R=b; WD. 04 -- EFN, LENGTH OF ESB (0 = 1 WORD, >0 = 8. WORDS).E$c; WD. 05 -- LENGTH OF SEND BUFFER.Ad; WD. 06 -- ADDRESS OF AST ROUTINE TO ENTER UPON STATUS RETURN.E+e; WD. 07 -- ADDRESS OF EXIT STATUS BLOCK.Tf;C g; SDRP$Hh;KGi; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO QUEUE A SEND DATA PACKET FOR Ej; THE SPECIFIED TASK, UNLINK ALL OR A SELECTED OCB FROM THE CURRENT-Fk; TASK, LINK THE OCB(S) OFF THE SPECIFIED TASK, AND REQUEST IT IF ITl; IS NOT ALREADY ACTIVE.m;Rn; DPB FORMAT: (FOR SDRP$) o; $p; WD. 00 -- DIC(141.),DPB SIZE(9.).q; WD. 01 -- FIRST HALF OF TASK NAME IN RAD50/r; WD. 02 -- SECOND HALF OF TASK NAME IN RAD50P$s; WD. 03 -- ADDRESS OF SEND BUFFERt; WD. 04 -- EFN, FLAGS BYTEC3u; WD. 05 -- LENGTH OF SEND BUFFER (DEFAULT = 13.)SEv; WD. 06 -- FIRST HALF OF NAME OF PARENT WHOSE OCB SHOULD BE PASSEDA/w; WD. 07 -- SECOND HALF OF PARENT'S TASK NAME 5x; WD. 08 -- ADDRESS OF OCB TO PASS (CLI TASKS ONLY)Iy;z;S {; INPUTS:A|;.-}; R0=ADDRESS OF THE TCB OF THE TARGET TASK. :~; R1=ADDRESS OF THE TASK STATUS WORD OF THE TARGET TASK.B; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.5; R3=ADDRESS OF THE SEND BUFFER ADDRESS IN THE DPB. 1; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.E.; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;O;E=; NOTE: ON SYSTEMS SUPPORTING NON RESIDENT TASK HEADERS ANDR5; PROTOTYPE TCBS, KISAR6 MAY MAP THE PROTOTYPE TCB(6; AT ENTRY AND THEREFORE WE CAN NOT ASSUME THAT THE; TASK HEADER IS MAPPED.R;A7; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)T;.; ; FOR SDRC$ AND VSRC$T;T/; C=0 IF DIRECTIVE IS SUCCESSFULLY C00Ek kcDATADATADATADATADATADATADATAOMPLETED. (; DIRECTIVE STATUS OF +1 IS RETURNED.!; C=1 IF DIRECTIVE IS REJECTED.R6; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF A SEND,; PACKET, OFFSPRING CONTROL BLOCK , TASK4; CONTROL BLOCK OR PARTITION CONTROL BLOCK COULD; NOT BE ALLOCATED.T=; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF IT IS ILLEGALE!; TO SEND TO THE TARGET TASK.A;; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN INVALID%; EVENT FLAG NUMBER IS SPECIFIED.T9; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE EXITR4; STATUS BLOCK IS NOT ENTIRELY WITHIN THE USER'S ; SPACE.; D; THE SDRP$ DIRECTIVE CON RETURN ALL OF THE ABOVE ERRORS, PLUS THE; FOLLOWING THREE:;;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF A PARAMETERO7; RESERVED FOR A LCI ONLY IS USED BY A NON-CLI TASKU5; OR AN ATTEMPT IS MADE TO PASS ALL OCBS TO A CLIK9; DIRECTIVE STATUS OF 'D.RS86' IS RETURNED IF THERE ISA&; NO OCB FROM THE SPECIFIED PARENT;; DIRECTIVE STATUS OR 'D.RS84' IS RETURNED IF A CLI TASKI3; SPECIFIED BOTH A PARENT NAME AND OCB ADDRESS,R/; AND THE TWO DO NOT IDENTIFY THE SAME OCB,O2; OR EITHER FIELD IS SUPPLIED WITH THE FLAG TO; PASS ALL OCBS;-.$DRSRC::MOV R3,R1 ;COPY DPB ADDRESS TO SAVE7 MOV SP,$TEMP3 ;SAVE SP TO FACILITATE POSSIBLE UNWINDU9 CMPB $DICSV+1,#5 ;IS THIS ILLEGAL DPB LENGTH SPECIFIED5 BEQ ILLDPB ;IF EQ YES, NOTE THAT $DRSND VALIDATESA" ;DPB LENGTH FOR OTHER VALUES6 CALL ERRSV ;PUSH CONTEXT TO REVERSE SEND OPERATION& .WORD NULL ;NO ROUTINE TO CALL NOW* .WORD 10$ ;ADDRESS OF RECOVERY ROUTINE .IF DF X$$HDR- MOV $SAHPT,R4 ;RESTORE TASK HEADER ADDRESSE .IFF - MOV $HEADR,R4 ;RESTORE TASK HEADER ADDRESSO .ENDC' CALL $DRSND ;PERFORM SEND OPERATIONT$ MOV 4(SP),R3 ;RESTORE DPB ADDRESS' TST (R3)+ ;POINT TO EVENT FLAG WORD. CMPB $DICSV+1,#9. ;IS IT AN SDRP$ DIRECTIVE BEQ 20$ ;IF EQ YES& BR CNRQT ;CONNECT AND REQUEST TASK;N<; CODE TO REMOVE SEND PACKET FROM RECEIVERS QUEUE ON ERROR;N910$: ADD #T.RCVL,R0 ;POINT TO TARGET TASK RECEIVE QUEUED2 MOV 2(R0),R1 ;GET ADDRESS OF PACKET JUST QUEUED) CALL $GTSPK ;REMOVE IT FROM THE QUEUE4% MOV R1,R0 ;COPY POINTER TO PACKET.! MOV R0,KISAR6 ;MAP SEND PACKETS, MOV @#140002,R1 ;GET NUMBER OF WORDS SENT1 ADD #<6.+37>,R1 ;ALLOW FOR EXTRA CONTROL WORDS) ASH #-5,R1 ;CONVERT TO 32 WORD BLOCKSE' CALLR $DESEC ;DEALLOCATE THE PACKETO; .; LOCATE EXISTING OCB(S) FOR SDRP$ DIRECTIVE;T:20$: MOVB 1(R3),R2 ;GET FLAGS BYTE, DOES IT FORCE EXIT?? BMI 30$ ;IF MI YES6 MOV #1,$TEMP3 ;DON'T FORCE EXIT, BUT IT IS AN SDRP$330$: CMP (R3)+,(R3)+ ;POINT TO PARENT NAME FIELDS& CALL LOCOCB ;LOCATE OCB(S) TO PASS! MOV $TKTCB,R5 ;SET TCB ADDRESS JMP STRTSK ;REQUEST TASK;+; **-$DRCNC-CONNECT TO TASK ;XF; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CONNECT THE ISSUING TASK TO'; THE SPECIFIED (ACTIVE) TARGET TASK.;A; DPB FORMAT:);S%; WD. 00 -- DIC(143.),DPB SIZE(6.).,/; WD. 01 -- FIRST WORD OF TASK NAME IN RAD50.30; WD. 02 -- SECOND WORD OF TASK NAME IN RAD50.-; WD. 03 -- EFN, LENGTH OF ESB (DEFAULT=2).O:; WD. 04 -- ADDRESS OF AST ROUTINE TO ENTER UPON STATUS./; WD. 05 -- ADDRESS OF THE EXIT STATUS BLOCK.P;S ; INPUTS:A;-; R0=ADDRESS OF THE TCB OF THE TARGET TASK.:; R1=ADDRESS OF THE TASK STATUS WORD OF THE TARGET TASK.B; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.3; R3=ADDRESS OF THE EVENT FLAG NUMBER IN THE DPB.1; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK..; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;D7; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D; /; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.-(; DIRECTIVE STATUS OF +1 IS RETURNED.!; C=1 IF DIRECTIVE IS REJECTED.S<; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF AN OFFSPRING+; CONTROL BLOCK COULD NOT BE ALLOCATED.S=; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF AN ATTEMPT ISD*; BE00EkkfING MADE TO CONNECT TO A CLI TASK.:; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF THE TARGET; TASK IS NOT ACTIVE.R;; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN INVALIDN%; EVENT FLAG NUMBER IS SPECIFIED.E9; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE EXITS0; STATUS BLOCK IS NOT ENTIRELY IN THE USER'S ; SPACE.;->$DRCNC::MOV #ERRSV,-(SP) ;PUSH ADDRESS OF ERROR SAVE ROUTINE$ TST (R1) ;IS TARGET TASK ACTIVE?  BMI 10$ ;IF MI NOD,  BIT #T3.CLI,T.ST3(R0) ;TARGET TASK A CLI?  BEQ CNRQT ;IF EQ NOR'  DRSTS D.RS2 ;CONNECTING TO CLI TASKH. 10$: DRSTS D.RS7 ;SPECIFIED TASK NOT ACTIVE;+0; **-$DRREQ-REQUEST, SPAWN, OR CHAIN TO A TASK;LH; THIS ROUTINE INSTRUCTS THE SYSTEM TO REQUEST, SPAWN, OR CHAIN TO THEI; SPECIFIED TASK, DEPENDING ON THE DPB SIZE. IF THE DIRECTIVE IS RPOI$,=; THE TASK IS CHAINED TO BY UNLINKING ALL OR A SELECTED OCBEB; FROM THE CURRENT TASK, AND LINKING IT TO THE TARGET TASK. THIS5; DIFFERS FROM SPWN$ IN THAT NO NEW OCB IS CREATED.Q;T&; DPB FORMAT: (FOR SPAWN OR REQUEST);C1; WD. 00 -- DIC(11.),DPB SIZE(7., 13., OR 14.).C/; WD. 01 -- FIRST HALF OF TASK NAME IN RAD50.C0; WD. 02 -- SECOND HALF OF TASK NAME IN RAD50.;; WD. 03 -- FIRST WORD OF PARTITION NAME - NOT SUPPORTED.A<; WD. 04 -- SECOND WORD OF PARTITION NAME - NOT SUPPORTED./; WD. 05 -- REQUEST PRIORITY - NOT SUPPORTED.L ; WD. 06 -- REQUEST UIC.=!; WD. 07 -- EFN, LENGTH OF ESB (0 = 1 WORD, >0 = 8. WORDS). :"; WD. 08 -- ADDRESS OF AST ROUTINE TO ENTER UPON STATUS.(#; WD. 09 -- EXIT STATUS BLOCK ADDRESS.?$; WD. 10 -- ADDRESS OF COMMAND LINE TO QUEUE FOR TARGET TASK. %%; WD. 11 -- LENGTH OF COMMAND LINE.23&; WD. 12 -- VIRTUAL TERMINAL UNIT NUMBER FOR TI:. 0'; WD. 13 -- ASCII DEVICE NAME (OPTIONAL FIELD)(; ); DPB FORMAT: (FOR RPOI$)N*; %+; WD. 00 -- DIC (11.),DPB SIZE(16.) /,; WD. 01 -- FIRST HALF OF TASK NAME IN RAD50. 0-; WD. 02 -- SECOND HALF OF TASK NAME IN RAD50.;.; WD. 03 -- FIRST WORD OF PARTITION NAME - NOT SUPPORTED.N</; WD. 04 -- SECOND WORD OF PARTITION NAME - NOT SUPPORTED./0; WD. 05 -- REQUEST PRIORITY - NOT SUPPORTED.T1; WD. 06 -- REQUEST UIC.F2; WD. 07 -- FIRST HALF OF NAME OF PARENT,WHOSE OCB SHOULD BE PASSED.,3; WD. 08 -- SECOND HALF OF NAME OF PARENT.54; WD. 09 -- ADDRESS OF OCB TO PASS (CLI TASK ONLY).(5; WD. 10 -- ADDRESS OF COMMAND BUFFER.'6; WD. 11 -- LENGTH OF COMMAND BUFFER.027; WD. 12 -- UNIT NUMBER OF TASK TI:, FLAGS BYTE.(8; WD. 13 -- ASCII DEVICE NAME FOR TI:.B9; WD. 14 -- FIRST HALF OF NAME TO BE USED FOR NEW TASK IN RAD50.C:; WD. 15 -- SECOND HALF OF NAME TO BE USED FOR NEW TASK IN RAD50. ;;6 <; INPUTS:I=;->; R0=ADDRESS OF THE TCB OF THE TARGET TASK.O:?; R1=ADDRESS OF THE TASK STATUS WORD OF THE TARGET TASK.B@; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.5A; R3=ADDRESS OF THE PARTITION NAME WORD IN THE DPB.G1B; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.F.C; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.D;M7E; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)OF; /G; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. (H; DIRECTIVE STATUS OF +1 IS RETURNED.!I; C=1 IF DIRECTIVE IS REJECTED.O=J; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF AN ALLOCATIONU2K; FAILURE OCCURS ON A PARTITION CONTROL BLOCK,3L; OFFSPRING CONTROL BLOCK, COMMAND LINE BUFFER,DM; OR A TASK CONTROL BLOCK.=N; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF AN ATTEMPT ISF4O; MADE TO ISSUE A SPAWN TO A COMMAND LINE INTER-/P; PRETER WITHOUT SPECIFYING A COMMAND LINE.T=Q; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF THE SPECIFIED 1R; TASK IS ALREADY ACTIVE (WITH EXCEPTION OF A +S; SPAWN TO A COMMAND LINE INTERPRETER).A;T; DIRECTIVE STATUS OF 'D.RS92' IS RETURNED IF AN INVALIDC)U; VIRTUAL TERMINAL UNIT IS SPECIFIED.F;V; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN INVALID %W; EVENT FLAG NUMBER IS SPECIFIED.F9X; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE EXIT 6Y; STATUS BLOCK OR THE COMMAN00E%k kcDATADATADATADATADATADATADATAD LINE IS NOT ENTIRELY%Z; IN THE TASK'S ADDRESSING SPACE.I;[; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF AN ILLEGALK,\; DPB SIZE IS SPECIFIED (NOT 7. OR 13.).];WK^; THE ABOVE ERRORS ALSO APPLY TO THE RPOI$ DIRECTIVE, EXCEPT FOR 'D.RS97'RC_; WHICH IT CANNOT RETURN. THE RPOI$ DIRECTIVE CAN ALSO RETURN THED`; FOLLOWING ERRORS.Sa;S;b; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF A PARAMETERD7c; RESERVED FOR A CLI ONLY IS USED BY A NON-CLI TASKE6d; OR AN ATTEMPT IS MADE TO PASS ALL OCBS TO A CLI.9e; DIRECTIVE STATUS OF 'D.RS86' IS RETURNED IF THERE ISE'f; NO OCB FROM THE SPECIFIED PARENT.E;g; DIRECTIVE STATUS OF 'D.RS84' IS RETURNED IF A CLI TASK 3h; SPECIFIED BOTH A PARENT NAME AND OCB ADDRESS,X2i; AND THE TWO DO NOT IDENTIFY THE SAME OCB, OR,j; EITHER FIELD IS SUPPLIED WITH THE FLAG'k; REQUESTING ALL OCBS TO BE PASSED.Ul;-m n .ENABL LSBI:o$DRREQ::MOV SP,$TEMP3 ;SAVE CURRENT STACK TO EASE UNWIND)p CALL ERRSV ;INITIALIZE ERROR RECOVERYO#q .WORD NULL ;NO IMMEDIATE ACTIONI"r .WORD NULL ;NO RECOVERY ACTION's ADD #6,R3 ;POINT TO UIC WORD IN DPBE2t MOV (R3)+,R4 ;PICK UP SPECIFIED UIC FOR REQUEST/u CMPB $DICSV+1,#7. ;IS THIS A SIMPLE REQUEST?Nv BNE 5$ ;IF NE NO(w MOV T.UCB(R5),R5 ;GET TARGET UCB ADDRx CLR $TEMP3 ;NOT AN RPOI$$y JMP RQST2 ;DO REQUEST PROCESSING6z5$: CMPB $DICSV+1,#13. ;IS IT A VALID SPAWN REQUEST?{ BEQ CNRQT ;IF EQ YES>| CMPB $DICSV+1,#14. ;IS IT A SPAWN REQUEST WITH TI SPECIFIED} BEQ CNRQT ;IF EQ YES%~ CMPB $DICSV+1,#16. ;IS IT AN RPOI$N BNE 10$ ;IF NE NON9 MOVB 13(R3),R2 ;GET FLAGS BYTE, SHOULD EXIT BE FORCED?  BMI 7$ ;IF MI YESF< MOV #1,$TEMP3 ;NO FORCED EXIT, BUT REMEMBER THIS IS RPOI$)7$: CALL LOCOCB ;LOCATE OCB(S) TO PASSG2 ADD #6,R3 ;POINT TO COMMAND BUFFER ADDR IN DPB BR 35$ ;JOIN COMMON CODE,10$: MOV (PC)+,R5 ;ASSUME ILLEGAL DPB SIZEILLDPB: DRSTS D.RS99 ;I JMP ERROR ;ILLEGAL DPB SIZEI;A0; CONNECT PROCESSING (CNCT, SDRC, SPWN, VSRC).;H; COMMON CONNECT AND REQUEST PROCESSING BEGINS HERE FOR REQUEST/SPAWN,N; CONNECT, AND (VARIABLE) SEND REQUEST AND CONNECT DIRECTIVES. THE FOLLOWINGH; SECTION PERFORMS THE CONNECT PROCESSING. AN OFFSPRING CONTROL BLOCKJ; IS ALLOCATED TO BE QUEUED TO THE OFFSPRING TASK'S OCB QUEUE. THEN THEG; EVENT FLAG AND EXIT STATUS BLOCK PARAMETERS ARE CHECKED AS THE OFF-PC; SPRING CONTROL BLOCK IS INITIALIZED. IF AN OCB IS SUCCESSFULLYH; ALLOCATED, ITS ADDRESS IS STORED IN $TEMP1 AS A FLAG THAT IT MUST BE1; QUEUED TO THE TARGET TASK ON SUCCESSFUL EXIT.E;/;,>; NOTE: ON SYSTEMS SUPPORTING NON RESIDENT TASK HEADERS AND5; PROTOTYPE TCBS, KISAR6 MAY MAP THE PROTOTYPE TCBE6; AT ENTRY AND THEREFORE WE CAN NOT ASSUME THAT THE; TASK HEADER IS MAPPED.S;C$; REGISTER CONTENTS AT THIS POINT:; /; R3=PTR TO THE EVENT FLAG NUMBER IN THE DPB.;P5CNRQT: CLR $TEMP3 ;NOT AN RPOI$ OR SDRP$ DIRECTIVEL# MOV #O.LGTH,R1 ;PICK UP OCB SIZER6 CALL @(SP)+ ;ALLOCATE OCB WITH TRAIL TO DEALLOCATE, .WORD $ALOCB ;ALLOCATION ROUTINE ADDRESS- .WORD DEOCB ;DEALLOCATION ROUTINE ADDRESS ( BCC 20$ ;IF CC ALLOCATION SUCCESSFUL- JMP ALLER ;ELSE REPORT ALLOCATION FAILUREN320$: MOV R0,$TEMP1 ;STORE OCB ADDRESS FOR CONNECTD1 MOV (PC)+,R5 ;ASSUME INVALID EVENT FLAG NUMBER  DRSTS D.RS97 ; MOV R0,R4 ;COPY OCB POINTERT. MOVB (R3)+,R0 ;PICK UP SPECIFIED EVENT FLAG) CMP R0,#96. ;VALID EVENT FLAG NUMBER?R BHI 10$ ;IF HI NO1 CMP R0,#64. ;IS IT A GROUP GLOBAL EVENT FLAG?E .IF DF G$$GEF BLOS 25$ ;IF LOS NO. MOV R4,-(SP) ;SAVE R4 .IF DF X$$HDR- MOV KISAR6,-(SP) ;SAVE KERNEL APR6 MAPPING 2 MOV $SAHDB,KISAR6 ;MAP NON RESIDENT TASK HEADER, MOV $SAHPT,R4 ;GET ADDRESS OF TASK HEADER .IFF 6 MOV $HEADR,R4 ;GET ADDRESS OF CURRENT TASK'S HEADER .IFTF9 MOVB H.CUIC+1(R4),R4 ;GET CUURRENT TASK'S GROUP NUMBERR .IFTD+ MOV (SP)+,KISAR6 ;RESTORE KERNEL MAPPINGC .EN00E-kkfDC MOV R0,-(SP) ;SAVE R04 CALL $SRGEF ;SEARCH FOR GROUP GLOBAL EVENT FLAGS MOV (SP)+,R0 ;RESTORE R0 MOV (SP)+,R4 ;RESTORE R4V0 BCS 10$ ;IF CS, INVALID EVENT FLAG SPECIFIED .IFF ; DF G$$GEFI) BHI 10$ ;INVALID EVENT FLAG SPECIFIED  .ENDC ; DF G$$GEF625$: MOV $TKTCB,R5 ;PICK UP CURRENT TASK TCB ADDRESS' MOV R0,-(SP) ;SAVE EVENT FLAG NUMBER17 CALL $CEFIG ;CONVERT EVENT FLAG TO MASK AND ADDRESS0 BIC #1,R1 ;CLR GRP GLOBAL 2ND WORD INDICATOR! BIC R0,(R1) ;CLEAR EVENT FLAGS. TST (R4)+ ;SKIP OVER OCB LINK WORD (O.LNK)2 CLR (R4)+ ;INITIALLY CLR MCR LINE PTR (O.MCRL)0 MOV R5,(R4)+ ;SET PARENT TCB ADDRESS (O.PTCB). MOV #2,R1 ;ASSUME 1 WORD EXIT STATUS BLOCK CLR R0 ;DITTOV3 TSTB (R3)+ ;WAS IT A 1 WORD EXIT STATUS BLOCK ? BEQ 27$ ;IF EQ YES( MOV #8.*2,R1 ;DEFAULT SIZE TO 8 WORDS INC R0 ;SET FULL ESB FLAG327$: CMPB $DICSV+1,#8. ;IS THIS A VSRC$ DIRECTIVES BNE 28$ ;IF NE NOG, TST (R3)+ ;SKIP BUFFER SIZE FIELD IN DPB28$: ;REFERENCE LABEL .IF DF S$$LIB. MOV (R3)+,R2 ;PICK UP SPECIFIED AST ADDRESS- CALL $CALTA ;CALCULATE PROPER AST ADDRESSD/ MOV R2,(R4)+ ;SET PROPER AST ADDRESS (O.AST)  .IFF+ MOV (R3)+,(R4)+ ;SET AST ADDRESS (O.AST)R .ENDC1 MOV (SP)+,(R4)+ ;SET EVENT FLAG NUMBER (O.EFN)S( MOV R0,(R4) ;INDICATE 1/8 WORDS LONG2 MOV (R3)+,R0 ;PICK UP EXIT STATUS BLOCK ADDRESS. BIS R0,(R4)+ ;SET EXIT STATUS BLOCK ADDRESS7 MOV T.NAM(R5),(R4)+ ;STORE PARENT TASK NAME (O.STAT)" MOV T.NAM+2(R5),(R4)+ ;O.STAT+2( CLR (R4)+ ;INITIALIZE PROTECTION UIC% CLR (R4)+ ;INITIALIZE DEFAULT UICD. CLR (R4) ;INITIALIZE CONTEXT BLOCK POINTER( TST R0 ;EXIT STATUS BLOCK SPECIFIED?+ BEQ 30$ ;IF EQ NO, BYPASS ADDRESS CHECK0 CALL $ACHCK ;ADDRESS CHECK EXIT STATUS BLOCK# BCC 30$ ;IF CS ADDRESS CHECK OK/(29$: JMP ADCER ;ADDRESS CHECK FAILUREG30$: CMPB $DICSV,#141. ;IS DIRECTIVE A (VAR) SEND, REQUEST & CONNECT?1 BEQ STRTSK ;IF EQ YES, BRANCH TO REQUEST TASKT' BLO 35$ ;IF LO IT IS SPAWN OR RPOI$4 JMP SUCCESS ;IF HI IT IS CONNECT, RETURN SUCCESS/ STRTSK: CLR R4 ;PROPAGATE ISSUING TASK'S UICE(  MOV T.UCB(R5),R5 ;SET TI: UCB ADDRESS(  JMP RQST1 ;GO TO COMMON REQUEST CODE 35$: ;REFERENCE SYMBOL ;H9; TI: DETERMINATION AND COMMAND LINE PROCESSING (SPWN).D;CG; HERE THE TARGET TASK'S TI: IS DETERMINED FOR THE SUBSEQUENT REQUEST4A; AND COMMAND LINE PROCESSING IS INITIATED. IF A TERMINAL UNIT;A; HAS BEEN SPECIFIED, THEN IT IS VERIFIED AND ITS UCB IS FOUND.O3; OTHERWISE THE ISSUING TASK'S UCB IS PROPAGATED.N;E$; REGISTER CONTENTS AT THIS POINT:;S5; R3=PTR TO COMMAND LINE BUFFER ADDRESS IN THE DPB.J"; R5=TCB ADDRESS OF CURRENT TASK;5,40$: MOV T.UCB(R5),R2 ;GET TI: UCB ADDRESS9 CMPB $DICSV+1,#14. ;CAN TI BE SOMETHING OTHER THAN VT?E BLT 45$ ;IF LT NOI& TST 6(R3) ;WAS A DEVICE SPECIFIED?  BEQ 45$ ;IF EQ NOP$! CMP 6(R3),#"VT ;IS "VT" SPECIFIED" BNE 64$ ;IF NE NOE#45$: ;REFERENCE SYMBOLN$% .IF DF V$$TRM&8' MOVB 4(R3),R1 ;WAS A VIRTUAL TERMINAL UNIT SPECIFIED?1( BEQ 80$ ;IF EQ NO, DO COMMAND LINE PROCESSINGR0) MOV $VTDCB,R2 ;POINT TO FIRST CREATED VT: DCB6*50$: CMPB D.UNIT(R2),R1 ;IS THIS THE UNIT SPECIFIED?+ BEQ 60$ ;IF EQ YES', MOV (R2),R2 ;ELSE POINT TO NEXT DCBS4- CMP D.NAM(R2),#"VT ;IS IT A VIRTUAL TERMINAL DCB?. BEQ 50$ ;IF EQ YES!/ BR ILUER ;RETURN ERROR STATUS)060$: MOV D.UCB(R2),R2 ;POINT TO VT: UCBE41 BIT #T3.CLI,T.ST3(R5) ;IS THE ISSUING TASK A CLI? 2 BNE 80$ ;YES, LET IT THROUGHC3 CMP R2,T.UCB(R5) ;IS THE ISSUING TASK ALREADY RUNNING ON THE VT? 4 BEQ 80$ ;THAT'S OK TOO25 CMP U.PTCB(R2),R5 ;UNIT CREATED BY THIS PARENT?6 BNE ILUER ;IF NE NO 78 .ENDC ;V$$TRM9:+; BR 80$ ;PERFORM COMMAND LINE PROCESSINGN<:=64$: MOV R3,R4 ;SAVE POINTER TO COMMAND LINE BUF IN DPB > MOV 6(R3),R0 ;GET DEVICE NAME-? BEQ 45$ ;IF EQ, DEVICE NAME NOT SPECIFIEDB'@ MOV 4(R3),R1 ;GET00E5k kcDATADATADATADATADATADATADATA DEVICE UNIT NUMBERI5A CALL $CVDVN ;CONVERT DEVICE NAME TO A UCB ADDRESSS%B BCS ILUER ;IF CS DEVICE NOT FOUNDI*C BITB #US.OFL,U.ST2(R2) ;DEVICE OFFLINE?D BNE PRVER ;IF NE YES9E BIT #DV.TTY,U.CW1(R2) ;IS SPECIFIED DEVICE A TERMINAL?F BEQ ILUER ;IF EQ NO4G CMP R2,T.UCB(R5) ;IS CURRENT TASK'S TI: SPECIFIEDH BEQ 70$ ;IF EQ YES6I BIT #T3.PRV!T3.CLI,T.ST3(R5) ;IS TASK PRIV OR A CLIJ BEQ PRVER ;IF EQ NOD2K70$: MOV R4,R3 ;GET ADDRESS OF COMMAND LINE BUF#L80$: MOV R2,R5 ;COPY UCB ADDRESSN(M BR CMLPR ;DO COMMAND LINE PROCESSING N .DSABL LSB OP; Q; LOCAL ERROR RETURN ROUTINES.R;GS; THE FOLLOWING ROUTINES INTERFACE TO $DRTHR AND $ERREC FOR DIRECTIVEBET; ERROR STATUS RETURNS AND ERROR RECOVERY. R5 IS USED TO STORE THEI"U; ERROR STATUS TRAP INSTRUCTION.V; W9XADCER: MOV (PC)+,R5 ;PICK UP ADDRESS CHECK ERROR STATUS.Y DRSTS D.RS98 ;3ZERROR: JMP $ERREC ;THREAD THROUGH ERROR RECOVERYV8[ILUER: MOV (PC)+,R5 ;PICK UP ILLEGAL DEVICE UNIT ERROR\ DRSTS D.RS92 ;!] BR ERROR ;RETURN ERROR STATUSC5^PRVER: MOV (PC)+,R5 ;PICK PRIVILEGE VIOLATION ERRORN_ DRSTS D.RS16 ;!` BR ERROR ;RETURN ERROR STATUSTBaILPARM: MOV (PC)+,R5 ;GET PARAMETER ILLEGAL FOR THIS TASK STATUSb DRSTS D.RS8 ; c BR ERROR ;4dNOTINS: MOV (PC)+,R5 ;GET TASK NOT INSTALLED ERRORe DRSTS D.RS2 f BR ERRORDgh;K=i; DEOCB - DEALLOCATES THE CONTEXT BLOCK IN THE OCB (IF ANY)D"j; BEFORE DEALLOCATING THE OCBk;ClDEOCB:m .IF DF N$$DIR n!o MOV R1,-(SP) ;SAVE SIZE OF OCBR*p MOV O.STAT+10(R0),R1 ;GET CONTEXT BLOCKq BEQ 10$ ;IF EQ, NONE$r CALL $DLCTX ;DEALL CONTEXT BLOCK!s10$: MOV (SP)+,R1 ;RESTORE SIZELtu .ENDC ;DF N$$DIRAv w JMP $DEACB xy; /z; COMMAND LINE PROCESSING FOR SPWN$ AND RPOI$I{;O|; REGISTERS AT THIS POINTA};E/~; R3=POINTER TO COMMAND BUFFER ADDRESS IN DPB ; R5=TARGET TASK UCB ADDRESS-CMLPR: MOV (R3),R0 ;COMMAND LINE SPECIFIEDI BEQ 80$ ;IF EQ NOC& MOV 2(R3),R1 ;GET LENGTH OF COMMAND& BEQ 80$ ;IF EQ, EMPTY COMMAND LINE! CMP #M$$XLN,R1 ;IS IT TOO LONG1 BLOS ADCER ;IF LOS YES+ CALL $ACHRO ;ADDRESS CHECK COMMAND LINER+ BCS ADCER ;IF CS, ADDRESS CHECK FAILURE' MOV R3,$TEMP4 ;SAVE POINTER INTO DPBI, MOV 2(R3),R1 ;GET LENGTH OF COMMAND AGAIN@ ADD #C.CTXT+1+77,R1 ;ALLOW FOR HEADER, FINAL CR, AND ROUNDOFF) ASH #-6,R1 ;CONVERT TO 32 WORD BLOCKSE6 CALL @(SP)+ ;ALLOCATE A BUFFER FROM SECONDARY POOL$ .WORD $ALSEC ;ALLOCATION ROUTINE& .WORD $DESEC ;DEALLOCATION ROUTINE BCC 10$ ;IF CC OKE! JMP ALLER ;ALLOCATION FAILURE157$: MOV (PC)+,R5 ;PICK UP COMMAND LINE ERROR STATUSK DRSTS D.RS2 ;B! BR ERROR ;RETURN ERROR STATUSL310$: MOV KISAR6,-(SP) ;SAVE POTENTIAL TCB MAPPINGR# MOV $TEMP0,R2 ;GET OFFSPRING TCB MOV T.ST3(R2),R2 ;SAVE T.ST3E3 MOV R0,KISAR6 ;MAP SEC POOL BLOCK JUST ALLOCATED 4 MOV #140004,R4 ;SET VIRT. ADDR TO REFERENCE BLOCK) MOV R5,(R4)+ ;PUT UCB ADDRESS IN BLOCKO' MOV 2(R3),(R4)+ ;SET CHARACTER COUNTA CLR -(SP) ;INIT STATUS WORDO* BIT #T3.CLI,R2 ;IS OFFSPRING TASK A CLI BEQ 30$ ;IF EQ NOK .IF DF A$$CLI+ BIS #CC.CLI,(SP) ;SET CLI ONLY RETREIVALR .IFTF ;A$$CLI/ MOV $TEMP1,R2 ;POINT TO OCB (IF ANY) TO PASSV BEQ 20$ ;IF EQ, NO OCB0 MOV R0,O.MCRL(R2) ;PUT COMMAND ADDRESS IN OCB20$:* TST $TEMP3 ;IS THIS AN RPOI$ DIRECTIVE BEQ 25$ ;IF EQ NO 1 MOV $TKTCB,R2 ;GET TCB ADDRESS OF CURRENT TASKS= BIT #T3.CMD,T.ST3(R2) ;IS CURRENT TASK PART OF CLI COMMANDS BEQ 25$ ;IF EQ NO8 BIS #CC.TTD,(SP) ;HAVE SYSTEM HANDLE AS IF FROM TTDRV25$: ;REFERENCE LABEL .IFT ;A$$CLIC4 CMP $TEMP0,$MCRPT ;IS COMMAND GOING TO DISPATCHER BNE 30$ ;IF NE NOO2 CMP #^RMCR,-22(R3) ;WAS MCR... TARGET TASK NAME% BNE 30$ ;IF NE NO (IT WAS CLI...) ) BIS #CC.MCR,(SP) ;SET FORCE TO MCR BITT .ENDC ;A$$CLI'30$: MOV (SP)+,(R4)+ ;SET STATUS WORDC4 CLR (R4)+ ;INIT STARTING RETURN OFFSET FOR GMCR$$ MOVB #33,(R4)+ ;A00E=kkfSSUME TERMINATOR* MOVB R1,(R4)+ ;SET BLOCK ALLOCATE COUNT) MOV (R3),R0 ;GET COMMAND TEXT ADDRESS:& CALL $RELOC ;RELOCATE USER ADDRESS* SUB #20000,R2 ;CONVERT TO APR 5 MAPPING MOV 2(R3),R0 ;GET LENGTH  MOV R0,-(SP) ;SAVE LENGTH+ MOV KISAR6,R3 ;GET DESTINATION APR6 BIAS " CALL $BLXIO ;COPY COMMAND TEXT% MOVB #15,(R4) ;TERMINATE WITH A CR MOV (SP),R1 ;GET LENGTH0040$: CMPB #33,-(R4) ;IS THIS CHAR A TERMINATOR BHIS 50$ ;IF HIS YES45$: SOB R1,40$ ;LOOP TST (SP)+ ;CLEAN STACK# BR 70$ ;NO EMBEDDED TERMINATORSC*50$: BEQ 60$ ;IF EQ, AN ESC IS EMBEDDED# CMPB #15,(R4) ;IS A CR EMBEDDED?A BNE 45$ ;IF NE NO260$: DEC R1 ;ADJUST COUNTER+ SUB R1,(SP) ;CALC DIFFERENCE IN LENGTHSV= SUB (SP)+,@#C.CCT+140000 ;CALC NUMBER OF CHARS NOW PRESENT 3 BISB #200,(R4) ;FLAG TERMINATOR AS USER SUPPLIEDT/ MOVB (R4),@#C.CTR+140000 ;SET NEW TERMINATOR:+ MOVB #15,(R4) ;FORCE TRAILING CHAR TO CR070$: MOV R3,R1 ;GET ADDRESS OF SEC POOL BLOCK9 MOV (SP)+,KISAR6 ;RESTORE POTENTIAL TARGET TCB MAPPINGT5 MOV #$CLICQ,R0 ;POINT TO LISTHEAD OF COMMAND QUEUEP7 CALL @(SP)+ ;PUSH ROUTINE TO REMOVE LINE FROM QUEUE! .WORD NULL ;NOTHING TO DO NOWB! .WORD $GTSPK ;DEQUEUE ROUTINEH5 MOV $TEMP4,R3 ;GET BACK POINTER TO CMD ADDR IN DPBO8 MOV R1,$TEMP4 ;SAVE ADDRESS OF SEC POOL COMMAND BLOCK.80$: TST $TEMP4 ;IS A COMMAND LINE SUPPLIED BNE RQST ;IF NE YES)  MOV $TEMP0,R0 ;GET TARGET TCB' BIT #T3.CLI,T.ST3(R0) ;IS TASK A CLIO- BNE 7$ ;IF NE YES, LI MUST HAVE A COMMANDE;P; COMMON REQUEST PROCESSING;;TD; HERE IS THE COMMON REQUEST PROCESSING FOR ALL DIRECTIVES IN THISC; MODULE. THE DEFAULT AND PROTECTION UICS ARE DETERMINED, AND THEUG; NAME OF THE TASK CALCULATED IF NECESSARY. FOR ALL DIRECTIVES EXCEPTM>; THE RPOI$, THIS IS BASED ON THE TARGET TASK NAME AT OFFSET<; 2 IN THE DPB. THE RPOI$ DIRECTIVE ALLOWS A SPECIFIC NAMEC; FOR THE OFFSPRING TO BE SPECIFIED. THIS CAN ONLY BE DONE IF THE B; ORIGINAL TARGET HAD A NAME OF THE FORM ...XXX. IF THE NEW NAMEE; IS NOT OF THE ...XXX FORM, IT IS USED AS IS. IF THE NEW SPECIFIEDE@; NAME IS OF THE ...XXX FORM, THE APPROPRIATE FORM OF THE NAME1; FOR THE TASK'S TI:UCB IS CALCULATED AND USED.HB; THE TASK IS THEN REQUESTED VIA $TSKRP, UNLESS IT IS A CLI WITHC; A NAME NOT IN THE ...XXX FORM. THESE CLI TASKS ARE REQUESTED BYD;; $EXRQN WHICH IS CALLED BY THE COMMAND QUEUEING ROUTINE.F;N; REGISTERS AT THIS POINTN; ); R3=POINTER TO CMD TEXT ADDRESS IN DPBE; R5=TI:UCB ADDRESS ;E'RQST: MOV -10(R3),R4 ;GET REQUEST UICU.RQST1: MOV $TEMP0,R0 ;GET TARGET TCB ADDRESS9RQST2: TST $TEMP3 ;IS THIS AN RPOI$ OR SDRP$ DIRECTIVE  BEQ 30$ ;IF EQ NOL& CMPB $DICSV,#141. ;IS THIS AN SDRP$ BEQ 30$ ;IF EQ YES- ADD #10,R3 ;POINT TO SPECIFIED NAME FIELD." TST (R3) ;WAS A NAME SPECIFIED BEQ 30$ ;IF NE NOI ; # ; HANDLE SPECIFIED NAME FOR RPOI$E ;   .IF DF A$$CLI) BIT #T3.CLI,T.ST3(R0) ;IS TARGET A CLID+ BNE 10$ ;IF NE YES, CANNOT RENAME A CLI .ENDC ;A$$CLI1 CMP #^R...,T.NAM(R0) ;DOES TARGET HAVE MU NAMEB BEQ 15$ ;IF EQ YES+10$: JMP ILPARM ;ILLEGAL PARAMETER ERROR 15$: ;I' CMP #^R...,(R3) ;IS NEW NAME MU TYPEN BNE 20$ ;IF NE NO ) MOV R5,R0 ;SET ADDRESS OF DESIRED UCBN MOV 2(R3),R1 ;GET NEW NAME  CALL $SRMUT ;CALC NEW NAME% BCC 25$ ;IF CC, IT ALREADY EXISTS  BR 40$ ;CREATE IT. 20$: CALL $SRSTD ;DOES SPECIFIED TASK EXIST! BCS 40$ ;IF CS NO18"25$: CMP $TKTCB,R0 ;DID WE FIND TASK ISSUING DIRECTIVE## BNE 60$ ;IF NE NO, USE THIS TCBE<$ CMP #1,$TEMP3 ;IS CURRENT TASK GOING TO EXIT IN DIRECTIVE% BNE 40$ ;IF NE YES!& JMP TSKACT ;TASK ACTIVE ERROR,';;L(; CALCULATE TASK NAME FOR ALL CASES OTHER THAN RPOI$ WITH A SPECIFIED NAME); :*30$: CMP #^R...,T.NAM(R0) ;DOES TARGET HAVE MU TYPE NAME+ BEQ 35$ ;IF EQ, YES #, CMP #140000,R0 ;TCB IN SEC POOL?R- BHI 70$ ;IF HIGH, NO . JMP NOTINS ;OTHERWISE, ERROR//3500EEk kcDATADATADATADATADATADATADATA$: MOV T.NAM+2(R0),R1 ;GET HALF OF NEW NAMEE"0 MOV R5,R0 ;GET DESIRED TI: UCB1 CALL $SRMUT ;CALC NEW NAME%2 BCC 60$ ;IF CC, IT ALREADY EXISTS 3;I94; THE DESIRED TCB DOES NOT EXIST, SO IT MUST BE CREATEDK5;V(640$: MOV #T.LGTH,R1 ;GET LENGTH OF TCB7 CALL $ALOCB ;ALLOCATE ONET8 BCC 45$ ;IF CC, OK9 JMP ALER1 ;IF CS, NO POOLD/:45$: MOV $TEMP0,R1 ;GET PROTOTYPE TCB ADDRESS /; CMP #120000,R1 ;IS PROTOTYPE IN PRIMARY POOLI< BHI 50$ ;IF HI YES&= MOV #$PTCPT+1,R1 ;POINT TO APR BIAS0>50$: MOV R4,$TEMP0 ;PRESERVE REQUEST UIC AGAIN5? CALL @(SP)+ ;INSTALL NEW TCB WITH TRAIL TO REMOVEE"@ .WORD $TCBCP ;COPY AND INSTALL2@ .WORD $REMO1 ;REMOVE AND DEALLOCATE ; BM420/B MOV $TEMP0,R4 ;GET REQUEST UIC BACK ;**-1G-C60$: MOV R0,$TEMP0 ;USE NEW TCB FROM NOW ONTDEF .IF DF A$$CLIG3H INC R5 ;REMEMBER THAT ORIGINAL HAD MU TYPE NAME IJ .IFTF ;A$$CLIKL;#5M; PUT TCB ADDRESS IN COMMAND BUFFER, AND START TASKIN;Y9O70$: MOV $TEMP4,KISAR6 ;MAP COMMAND BUFFER IF IT EXISTSTP BEQ 72$ ;IF EQ, NO COMMAND5Q MOV R0,@#C.CTCB+140000 ;PUT TCB ADDRESS IN COMMANDER72$: ;REFERENCE LABELS$T .IF DF N$$DIR ;NAMED DIRECTORIESUV MOV R5,R1 ;COPY UCB ADDRESS;!W BIC #1,R1 ;INSURE UCB IS EVEN0%X CMPB $DICSV+1,#16. ;IS IT AN RPOI$OY BEQ 80$ ;IF EQ YES*Z BIT #T3.CLI,T.ST3(R0) ;OFFSPRING A CLI?[ BEQ 80$ ;IF EQ, NO!\ MOV $TEMP1,R2 ;GET OCB, IF ANY ] BEQ 80$ ;IF EQ, NO OCB!^ MOV $TKTCB,R3 ;GET CURRENT TCBV<_ CMP R1,T.UCB(R3) ;SPAWNED TASK TI: SAME AS SPAWNING TASK?` BEQ 73$ ;IF EQ, YESV2a BIT #DV.PSE,U.CW1(R1) ;IS THIS A PSEUDO DEVICE?b BNE 73$ ;IF NE, YES0c MOV U.CTX(R1),R1 ;USE CONTEXT FROM TARGET UCB d BR 75$C5e73$: MOV T.CTX(R3),R1 ;USE CONTEXT FROM CURRENT TCB9f75$: MOV R1,O.STAT+10(R2) ;PUT CONTEXT POINTER INTO OCBS$g BEQ 80$ ;IF EQ, NO CONTEXT BLOCK)h MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGP(i MOV R1,KISAR6 ;MAP THE CONTEXT BLOCK/j INCB C.REF+140000 ;INCREMENT REFERENCE COUNTC$k MOV (SP)+,KISAR6 ;RESTORE MAPPINGlmn .IFF ;DF N$$DIRo%p CMPB $DICSV+1,#16. ;IS IT AN RPOI$;q BEQ 80$ ;IF EQ YES!r MOV $TEMP1,R2 ;GET OCB, IF ANYUs BEQ 80$ ;IF EQ, NO OCB1t CLR O.STAT+10(R2) ;CLEAR CONTEXT BLOCK POINTERUuv .ENDC ; DF N$$DIRw"x80$: MOV R4,R1 ;SET REQUEST UIC!y MOV R4,-(SP) ;SAVE REQUEST UIC "z CALL UISET ;CALC PROT/DEF UICS${ MOV (SP)+,R4 ;RESTORE REQUEST UIC)| BIT #T3.CLI,T.ST3(R0) ;OFFSPRING A CLIC} BEQ 90$ ;IF EQ NON~ .IFT ;A$$CLI BIT #1,R5 ;MU NAME TYPE CLI BNE 90$ ;IF NE YES .IFTF ;A$$CLI. TST R4 ;WAS UIC SPECIFIED IN ORIGINAL DPB? BEQ 85$ ;IF EQ NOI% MOV $TEMP1,R2 ;GET OCB ADDR IF ANYC BEQ 85$ ;IF EQ, NO OCB* MOV R1,O.STAT+4(R2) ;SET PROTECTION UIC' MOV R3,O.STAT+6(R2) ;SET DEFAULT UIC&85$: MOV $TEMP4,R1 ;POINT TO COMMAND3 BEQ 90$ ;IF EQ, NO COMMAND FROM RQST$ DIRECTIVEO. CALL $QCPKT ;QUEUE COMMAND AND REQUEST CLI% BCC SUCCES ;IF CC, CLI STARTED OK./ BEQ SUCCES ;IF CC, CLI ALLOWED TO BE ACTIVE% BR ALER1 ;POOL ALLOCATION FAILURE;;I;90$: .IFT ;A$$CLIF& BIC #1,R5 ;INSURE EVEN UCB ADDRESS .ENDC ;A$$CLI* MOV $TKTCB,R2 ;GET ISSUER'S TCB ADDRESS* .IF DF N$$DIR ;NAMED DIRECTORY SUPPORT< CMP R5,T.UCB(R2) ;SPAWNED TASK TI: SAME AS SPAWNING TASK? BEQ 93$ ;IF EQ, YESQ2 BIT #DV.PSE,U.CW1(R5) ;IS THIS A PSEUDO DEVICE? BNE 93$ ;IF NE, YESQ4 MOV U.CTX(R5),$CTXPT ;USE CONTEXT FROM TARGET UCB  BR 95$;993$: MOV T.CTX(R2),$CTXPT ;PROPAGATE ISSUING TASK'S DDST .ENDC ;DF N$$DIR795$: CMP $TEMP3,#1 ;WILL THE CURRENT TASK BE EXITING?A BLOS 97$ ;IF LOS NOC7 BIS #T2.HLT,T.ST2(R2) ;PREVENT A POSSIBLE CHECKPOINT&97$: MOV #100$,-(SP) ;ASSUME SUCCESS" MOV R5,R2 ;GET TARGET UCB ADDR MOV R0,R5 ;SAVE TCB ADDRESS?! CALL $TSKRP ;REQUEST THE TASK# BCC 99$ ;IF CC, OK( BEQ 98$ ;IF EQ, ALLOCATION SUCCEEDED& MOV #ALER1,(SP) ;ELSE PROCESS ERROR BR 99$ ;AFTER CLEANUP;,98$:00EMkkf BIT #T3.CLI,T.ST3(R5) ;IS TASK A CLI?( BNE 99$ ;IF NE YES, IT CAN BE ACTIVE% CMPB $DICSV,#141. ;SDRC$ OR SDRP$?E" BEQ 99$ ;IF EQ, TASK ACTIVE OK+ MOV #TSKACT,(SP) ;ELSE TASK ACTIVE ERROR .99$: MOV $TKTCB,R1 ;GET ISSUER'S TCB ADDRESS1 BIC #T2.HLT,T.ST2(R1) ;RESET EXITING CONDITION  RETURN5 ; BM420U; BELIEVE IT OR NOT, THIS CODE REACHES DOWN INTO THE BOWELS OF THE RECOVERY ; BM420IR; THREADS ON THE STACK AND CHECKS FOR A REFERENCE TO $REMOV TO INDICATE ; BM420T; SUCCESS. IT NOW LOOKS FOR $REMO1, BUT ANY FURTHER PROBLEMS IN THIS AREA, ; BM4206; THIS IS A GOOD PLACE TO START LOOKING. ; BM420 ; BM4205100$: CMP 6(SP),#$REMO1 ;WAS TCB CREATED ; BM420$  BNE 110$ ;IF NE NO ;**-10 BIS #T3.REM,T.ST3(R5) ;SET REMOVE ON EXIT BIT.110$: MOV $TEMP4,R1 ;POINT TO COMMAND BUFFER! BEQ SUCCES ;IF EQ, NO COMMAND & CALL $QCLNR ;QUEUE COMMAND TO TASK# BR SUCCES ;FINISH UP PROCESSING   .ENABL LSBO5ALLER: ADD #6,SP ;POP THREAD TO DEALLOCATE ROUTINER8ALER1: MOV (PC)+,R5 ;PICK UP ALLOCATION FAILURE STATUS DRSTS D.RS1 ;E  BR 10$O8TSKACT: MOV (PC)+,R5 ;PICK UP TASK ACTIVE ERROR STATUS DRSTS D.RS7 ;C&10$: JMP ERROR ;RETURN ERROR STATUS  .DSABL LSB;TF; THE TARGET TASK HAS BEEN SUCCESSFULLY STARTED. FROM THIS POINT ON,B; NOTHING CAN GO WRONG. IRREVERSIBLE ACTIONS SUCH AS PROPOGATINGA; PROMPT REQUEST BITS AND CHANGING OCB LINKAGES CAN NOW BE DONE.H; SINCE THEY CANNOT GENERATE AN ERROR, AND THE DIRECTIVE MUST SUCCEED.;V/SUCCES: MOV $TEMP0,R4 ;GET TARGET TCB ADDRESSD( ADD #T.OCBH,R4 ;POINT TO ITS OCB LIST% MOV $TEMP1,R1 ;POINT TO ANY OCB(S)T+ MOV $TEMP3,R5 ;RPOI$ OR SDRP$ DIRECTIVE?T BEQ 30$ ;IF EQ NOS& MOV $TKTCB,R0 ;GET CURRENT TASK TCB( ADD #T.OCBH,R0 ;POINT TO ITS OCB LIST CMP #1,R1 ;PASS ALL OCBS BEQ 10$ ;IF EQ YES8 MOV T.ST3-T.OCBH(R0),-(SP) ;GET T.ST3 OF CURRENT TASK> BIS T.ST3-T.OCBH(R4),(SP) ;PUT T.ST3 OF TARGET ON TOP OF IT* BIT #T3.CLI,(SP)+ ;IS EITHER TASK A CLI BEQ 20$ ;IF EQ NO -10$: CALL PSPRMT ;PASS PROMPT CONTROL INFOC120$: CMP #1,R1 ;DETERMINE HOW TO HANDLE OCB(S)N BHI 70$ ;IF HI, NO OCB# BEQ 50$ ;IF EQ, PASS ALL OCB(S)= CALL $QRMVA ;REMOVE OCB FROM CURRENT TASK (MUST BE THERE)  BR 40$ ;30$: TST R1 ;ANY OCB BEQ 80$ ;IF EQ NO 1 MOV O.PTCB(R1),R2 ;GET PARENT TASK TCB ADDRESS0* INC T.RDCT(R2) ;INCREMENT RUNDOWN COUNT,40$: MOV R4,R0 ;POINT TO TARGET OCB QUEUE$ CALL $QINSF ;INSERT OCB IN QUEUE BR 70$ ;ALL DONE>50$: MOV (R0),R1 ;GET ADDRESS OF FIRST OCB OFF CURRENT TASK! BEQ 70$ ;IF EQ, NO OCBS EXISTT" CLR (R0) ;FORICIBLY EMPTY LIST, MOV R0,2(R0) ;SET SECOND HALF OF LISTHEAD: MOV R1,@2(R4) ;LINK AFTER PREVIOUS LAST OCB FROM TARGET260$: MOV R1,2(R4) ;SET POINTER TO NEW LAST ENTRY+ MOV (R1),R1 ;POINT TO NEXT OCB IN QUEUEA6 BNE 60$ ;IF NE, THERE IS ANOTHER SO UPDATE POINTER770$: MOV $TEMP4,KISAR6 ;MAP COMMAND LINE IF IT EXISTS" BEQ 75$ ;IF EQ NO COMMAND LINE; BICB #200,@#C.CTR+140000 ;ELIM USER TERMINATOR INDICATORI.75$: CMP #1,R5 ;FORCE CURRENT TASK TO EXIT? BHIS 80$ ;IF HIS NO 7 MOV R5,SP ;POINT STACK BACK TO RETURN ADDR TO DRDSPO. MOV $TKTCB,R5 ;GET CURRENT TASK TCB ADDRESS, CALLR $DREXT ;FORCE CURRENT TASK TO EXIT80$: DRSTS +1 ;THE ENDY;+; **-$DREXS-EXIT WITH STATUS;BD; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO PASS A STATUS WORD TO ALL ; PARENT TASKS AND EXIT. ;I ; DPB FORMAT:  ;Q# ; WD. 00 -- DIC(29.),DPB SIZE(2.)R; WD. 01 -- STATUS WORD.;I ; INPUTS::;#=; R2=ADDRESS OF THE SECOND STATUS WORD OF THE CURRENT TASK.-; R3=ADDRESS OF THE STATUS WORD IN THE DPB. 1; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.E.; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;07; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)W;TB; NO STATUS IS RETURNED TO THE ISSUING TASK SINCE THIS DIRECTIVE; TERMINATES ITS EXECUTION.A;-0$DREXS::BIT #T3.AC00EUk kcDATADATADATADATADATADATADATAP,T.ST3(R5) ;IS THIS AN ACP? BNE 5$ ;IF NE YESD0 MOV (R3),T.EFLG+2(R5) ;SET EXIT STATUS IN TCB' 5$: CALLR $DREX2 ;INITIATE TASK EXIT !";+#; **-$DREMS-EMIT STATUS $;TD%; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EMIT A STATUS WORD TO ALL0&; OR A SPECIFIED PARENT TASK WITHOUT EXITTING.';(; DPB FORMAT:();T%*; WD. 00 -- DIC(147.),DPB SIZE(4.).:+; WD. 01 -- FIRST WORD OF PARENT TASK NAME OR 0 FOR ALL..,; WD. 02 -- SECOND WORD OF PARENT TASK NAME.-; WD. 03 -- STATUS WORD..;( /; INPUTS:A0;?B1; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK.22; R3=ADDRESS OF THE PARENT TASK NAME IN THE DPB.13; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D.4; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.5;O76; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)7;/8; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. (9; DIRECTIVE STATUS OF +1 IS RETURNED.!:; C=1 IF DIRECTIVE IS REJECTED.D=;; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF THE SPECIFIEDW/<; TASK IS NOT A PARENT OF THE ISSUING TASK. =;->5?$DREMS::MOV 4(R3),-(SP) ;SAVE SPECIFIED STATUS WORDO1@ CMP (R3),#^R... ;IS SPECIFIED TASK MULTI-USER?OA BNE 10$ ;IF NE NOR3B MOV T.UCB(R5),R0 ;PICK UP UCB ADDRESS FOR $SRMUTT6C MOV 2(R3),R1 ;PICK UP SECOND WORD OF SPECIFIED NAME5D CALL $SRMUT ;CALCULATE TASK NAME (IGNORING C-BIT)Y)E10$: MOV R3,R4 ;COPY TASK NAME POINTERS0F20$: MOV R5,R0 ;COPY ISSUING TASK TCB POINTER%G ADD #T.OCBH,R0 ;POINT TO OCB QUEUEN$H MOV R0,R1 ;COPY LISTHEAD POINTER+I30$: MOV (R1),R1 ;POINT TO NEXT IN QUEUE J BEQ 60$ ;IF EQ THERE IS NONE"K TST (R4) ;TASK NAME SPECIFIED?.L BEQ 40$ ;IF EQ YES (PASSING STATUS TO ALL)9M CMP (R4),O.STAT(R1) ;MATCH ON FIRST WORD OF TASK NAME?RN BNE 30$ ;IF NE NOP=O CMP 2(R4),O.STAT+2(R1) ;MATCH ON SECOND WORD OF TASK NAME?EP BNE 30$ ;IF NE NOB%Q40$: CALL $QRMVA ;REMOVE THE ENTRY .R MOV (SP),R0 ;PICK UP SPECIFIED STATUS WORD8S MOV #S.CACT,R2 ;SET ABORT CODE OF "TASK STILL ACTIVE"-T CALL $QUEXT ;QUEUE THE OCB TO PARENT TASK,,U TST (R4) ;PASSING STATUS TO ALL PARENTS?V BEQ 20$ ;IF EQ YESW50$: TST (SP)+ ;CLEAN STACK X RETURN ;Q,Y60$: TST (R4) ;WAS A TASK NAME SPECIFIED?Z BEQ 50$ ;IF EQ NOW5[ DRSTS D.RS8 ;INCONSISTENT WITH CURRENT TASK STATE)\];(^; LOCAL ROUTINES.W_;F`a;ECb; ROUTINE TO INITIALIZE ERROR RECOVERY FOR CONNECT, REQUEST, SEND#c; REQUEST AND CONNECT, AND SPAWN.Ud;De/fERRSV: MOV R0,$TEMP0 ;SAVE TARGET TCB ADDRESST&g CLR $TEMP1 ;INITIALIZE OCB POINTER/h CLR $TEMP4 ;INITIALIZE POINTER TO CMD BLOCK 3i JMP $DRTHR ;INITIALIZE ERROR RECOVERY THREADINGCjkl;?m; THIS ROUTINE CALCULATES THE DEFAULT AND PROTECTION UICS FORQn; THE CURRENT TASKo;D p; INPUTS:Iq; R1=REQUEST UICr;T s; OUTPUTS:t; R1=PROTECTION UICu; R3=DEFAULT UIC'v; R4=ADDRESS OF CURRENT TASK'S HEADERCw;Tx; R0 IS PRESERVED y;S4zUISET: MOV $TKTCB,R2 ;GET CURRENT TASK TCB ADDRESS+{ ADD #T.ST2,R2 ;POINT TO TASK STATUS WORDP|} .IF DF X$$HDR~) MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING 2 MOV $SAHDB,KISAR6 ;MAP NON RESIDENT TASK HEADER, MOV $SAHPT,R4 ;GET ADDRESS OF TASK HEADER .IFFA. MOV $HEADR,R4 ;POINT TO CURRENT TASK HEADER) CALLR $UISET ;CALCULATE DEF/PROT UICST .IFT:( CALL $UISET ;CALCULATE DEF/PROT UICS- MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING  RETURN ;R .ENDC;KG; THIS ROUTINE PASSES THE PROMPTING CONTROL BIT (T3.MCR) AND THE CLI;TE; COMMAND EXECUTION INDICATOR BIT (T3.CMD) FROM THE CURRENT TASK TOAD; THE TARGET. IT IS CALLED ONLY IF THE CURRENT TASK HAS PASSED ALLH; ITS OCBS TO THE TARGET, OR IF EITHER THE CURRENT OR TARGET IS A CLI.A; THE TERMINATOR CHARACTER IN THE COMMAND BUFFER (IF IT EXISTS)CE; IS SET TO A CARRIAGE RETURN IF THE T3.MCR BIT IS TURNED ON IN THE(; TARGET TCB;P ; INPUTS:N;C; R0=ADDRESS OF OCB QUEUE LISTHEAD (T.OCBH) IN CURRENT TASK'S TCB B; R4=ADDRESS OF OCB QUEUE LISTHEAD (T.OCBH) IN TARGE00E]kkfT TASK'S TCB;A ; OUTPUTS:;O9; THE STATUS BITS ARE PROPOGATED TO THE TARGET TASK TCBF;C; ALL REGISTERS PRESERVED; APSPRMT: MOV T.ST3-T.OCBH(R0),-(SP) ;GET T.ST3 FROM CURRENT TASKH> BIC #^C,(SP) ;CLEAR ALL BUT BITS OF INTEREST: BIC (SP),T.ST3-T.OCBH(R0) ;CLEAR BITS IN CURRENT TASK .IF DF A$$CLI5 BIT #T3.CLI,T.ST3-T.OCBH(R4) ;IS TARGET TASK A CLIE BNE 5$ ;IF NE YEST .ENDC ;A$$CLI< BIC #T3.MCR!T3.CMD,T.ST3-T.OCBH(R4) ;CLEAR BITS IN TARGET@ BIS (SP),T.ST3-T.OCBH(R4) ;SET TARGET'S BITS LIKE CURRENT WAS:5$: BIT #T3.MCR,(SP)+ ;WILL CURRENT ISSUE PROMPT ON EXIT BEQ NULL ;IF EQ NO) MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGC5 MOV $TEMP4,KISAR6 ;MAP COMMAND BUFFER IF IT EXISTST BEQ 10$ ;IF EQ, NO COMMAND4 BITB #200,@#C.CTR+140000 ;WAS TERM USER SUPPLIED?' BNE 10$ ;IF NE YES, DON'T CHANGE IT 3 MOVB #15,@#C.CTR+140000 ;SET TERMINATOR TO BE CRN(10$: MOV (SP)+,KISAR6 ;RESTORE MAPPINGNULL: RETURN;IG; THIS ROUTINE LOCATES THE OCB(S) TO BE PASSED BY THE RPOI$ AND SDRP$T; DIRECTIVES.T;, ; INPUTS:U; ; R2=FLAGS BYTET3; R3=ADDRESS OF THE PARENT'S TASK NAME IN THE DPBU; ;N ; OUTPUTS:;I?; $TEMP1 IS SET WITH THE ADDRESS OF THE OCB TO PASS, CLEAR IFM4; NO OCB IS TO BE PASSED, OR ONE TO PASS ALL OCBS;ALOCOCB: MOV (SP)+,R4 ;RETURN ADDR TO ALLOW ERROR THREAD TO WORKE ASR R2 ;PASS ALL OCBS0 BCS 5$ ;IF CS YESS# ASR R2 ;PASS NEXT OCB IN QUEUE?I BCS 80$ ;IF CS YES- BR 10$ ;CHECK IF SPECIFIC PARENT IS NAMEDP 5$: ;& MOV $TEMP0,R2 ;POINT TO OBJECT TASK' BIT #T3.CLI,T.ST3(R2) ;IS TASK A CLIE  BNE 100$ ;IF NE YES, ILLEGAL+ MOV (R3),-(SP) ;WAS PARENT NAME SUPPLIEDI% BIS 4(R3),(SP)+ ;OR AN OCB ADDRESSR BNE 120$ ;IF NE YESE! INC $TEMP1 ;INDICATE PASS ALL BR 70$ ;ALL DONE110$: MOV $TKTCB,R2 ;POINT TO CURRENT TASK'S TCBE# ADD #T.OCBH,R2 ;ITS OCB LISTHEAD5 .IF DF A$$CLI6 BIT #T3.CLI,T.ST3-T.OCBH(R2) ;IS ISSUING TASK A CLI BEQ 30$ ;IF EQ NOA- TST (R3) ;WAS A SPECIFIC PARENT REQUESTEDO BNE 40$ ;IF NE YES+ TST 4(R3) ;WAS AN OCB ADDRESS SPECIFIED1 BEQ 70$ ;IF EQ NOL*20$: MOV (R2),R2 ;POINT TO THE NEXT OCB& BEQ 110$ ;IF EQ, THERE ARE NO MORE* CMP 4(R3),R2 ;IS THIS THE SPECIFIED OCB BNE 20$ ;IF NE NO  BR 60$ ; .ENDC ;A$$CLI/30$: TST 4(R3) ;WAS AN OCB ADDRESS SPECIFIEDS BNE 100$ ;IF NE YES- TST (R3) ;WAS A SPECIFIC PARENT REQUESTED( BEQ 70$ ;IF EQ NOC.40$: MOV (R2),R2 ;POINT TO NEXT OCB IN LIST& BEQ 110$ ;IF EQ, THERE ARE NO MORE> CMP O.STAT(R2),(R3) ;IS THIS THE OCB FOR THE CORRECT PARENT BNE 40$ ;IF NE NO:" CMP O.STAT+2(R2),2(R3) ;MAYBE?? BNE 40$ ;IF NE NOT* TST 4(R3) ;HAS OCB ADDR BEEN SPECIFIED BEQ 60$ ;IF EQ NOE+ CMP 4(R3),R2 ;DID THEY FIND THE SAME OCB; BNE 120$ ;IF NE NO.60$: MOV R2,$TEMP1 ;SAVE ADDR OF OCB TO PASS70$: JMP (R4) ;RETURN380$: MOV (R3),-(SP) ;GET PARENT NAME IF SPECIFIED - BIS 4(R3),(SP)+ ;WAS OCB ADDRESS SPECIFIEDI/ BNE 120$ ;IF NE YES, CANNOT SPECIFIY EITHER- MOV $TKTCB,R2 ;TCB ADDRESS OF CURRENT TASKO9  MOV T.OCBH(R2),$TEMP1 ;GET ADDRESS OF NEXT OCB, IF ANY(  JMP (R4) ;RETURN ;I ; ERROR HANDLING ;H8100$: JMP ILPARM ;THIS TASK CANNOT USE THIS PARAMETER=110$: MOV (PC)+,R5 ;PICK UP SPECIFIED OCB DOESN'T EXIST STA DRSTS D.RS86 ;  BR 150$ ;RETURN ERROR STATUS=120$: MOV (PC)+,R5 ;PICK UP NAME AND OCB ADDR DON'T MATCH SI DRSTS D.RS84 ;150$: JMP ERROR ;ISSUE ERRORC .END0$ ;IF NE YES, CANNOT SPECIFIY EITHER- MOV $TKTCB,R2 ;TCB ADDRESS OF CURRENT TASKO9  MOV T.OCBH(R2),$TEMP1 ;GET ADDRESS OF NEXT OCB, IF ANY(  JMP (R4) ;RETURN ;I ; ERROR HANDLING ;H8100$: JMP ILPARM ;THIS TASK CANNOT USE THIS PARAMETER=110$: MOV (PC)+,R5 ;PICK UP SPECIFIED OCB DOESN'T EXIST STA DRSTS D.RS86 ;  BR 150$ ;RETURN ERROR STATUS=120$: MOV (PC)+,R5 ;PICK UP NAME00 ek kcDATADATADATADATADATADATADATA .TITLE DRSRFS .IDENT /05.00/$;B7; COPYRIGHT (c) 1984 BY DIGITAL EQUIPMENT CORPORATION.L; ALL RIGHTS RESERVED.;F<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; ORIGINALLY PART OF DRMAP;A; MOVED TO THIS MODULE BY B. S. MCCARTHY 28-NOV-83 TO ALLOW DRMAPA; TO BE INCLUDED IN THE THIRD DIRECTIVE COMMON. SEE NOTE IN DRMAP$; REGARDING PLACEMENT OF DRSRF/DRRRF; .IF DF P$$LAS# .MCALL HDRDF$,PCBDF$,TCBDF$,WDBDF$ 1 HDRDF$ ;DEFINE HEADER AND WINDOW BLOCK OFFSETS 2 PCBDF$ ;DEFINE PCB AND ATTACHMENT DESCR OFFSETS TCBDF$ ;DEFINE TCB OFFSETSF1 WDBDF$ ;DEFINE WINDOW DEFINITION BLOCK OFFSETSE;+; **-$DRSRF-SEND BY REFERENCEF;CE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CREATE A SPECIALLY FORMATTEDBD; PACKET INCLUDING A REFERENCE TO A SPECIFIED REGION WITH ADDITIONALE; OPTIONAL INFORMATION SUPPLIED BY THE ISSUING TASK. THE SENDER TASKFI; MUST ITSELF HAVE THE ACCESS SPECIFIED IN THE REFERENCE. THE REFERENCEDF+; REGION IS ATTACHED TO THE RECEIVING TASK.;B ; DPB FORMAT:C;N!; WD. 00 -- DIC(69.),DPB SIZE(5.) ,; WD. 01 -- FIRST HALF OF RECEIVER TASK NAME-; WD. 02 -- SECOND HALF OF RECEIVER TASK NAME-:; WD. 03 -- OPTIONAL EVENT FLAG TO SET WHEN RECEIVE OCCURS.; WD. 04 -- ADDRESS OF WINDOW DEFINITION BLOCK;I ; INPUTS:N;T,; R0=ADDRESS OF THE TCB OF THE RECEIVER TASK9; R1=ADDRESS OF THE TASK STATUS WORD OF THE RECEIVER TASKS9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E*; R3=ADDRESS OF THE EFN NUMBER IN THE DPB./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.D,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 2; INPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:/; W.NRID=ID OF REGION TO BE SENT BY REFERENCE.T.; W.NOFF=OFFSET WORD PASSED WITHOUT CHECKING..; W.NLEN=LENGTH WORD PASSED WITHOUT CHECKING.=; W.NSTS=ALLOWED ACCESS (DEFAULTS TO ACCESS OF SENDER TASK).S-; WS.RED=1 IF READ ACCESS IS TO BE ALLOWED..; WS.WRT=1 IF WRITE ACCESS IS TO BE ALLOWED./; WS.EXT=1 IF EXTEND ACCESS IS TO BE ALLOWED. /; WS.DEL=1 IF DELETE ACCESS IS TO BE ALLOWED.A?; W.NSRB=OPTIONAL ADDRESS OF 8 WORD BUFFER OF ADDITIONAL INFO.I;S5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)E;N-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.R&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED..;; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF A SEND PACKET)4; OR ATTACHMENT DESCRIPTOR COULD NOT BE ALLOCATED.;; DIRECTIVE STATUS OF 'D.RS2' IS RETURNED IF AN ATTEMPT IS ; MADE TO SEND TO AN ACP TASK.;; DIRECTIVE STATUS OF 'D.RS6' IS RETURNED IF THE SPECIFIEDP; HAS HAD A PARITY ERROR.E:; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE DESIRED#; ACCESS TO THE REGION IS DENIED.D9; DIRECTIVE STATUS OF 'D.RS86' IS RETURNED IF AN INVALIDF; REGION ID WAS SPECIFIED.=; DIRECTIVE STATUS OF 'D.RS97' IS RETURNED IF AN INVALID EFND; NUMBER IS SPECIFIED.:; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE ADDRESS7; CHECK OF THE WINDOW DEF BLOCK OR SEND BUFFER FAILS.E; 3; OUTPUT FIELDS IN THE WINDOW DEFINITION BLOCK ARE:I; NONE.; 0; THE FORMAT OF THE SEND BY REFERENCE PACKET IS:"; WD. 00 -- RECEIVE QUEUE THREAD.5; WD. 01 -- TCB ADDRESS IF EFN SPECIFIED / 0 IF NOT.D7; WD. 02 -- EFN MASK / FIRST WORD OF SENDER TASK NAME.I;; WD. 03 -- EFN ADDRESS / SECOND WORD OF SENDER TASK NAME.S7; WD. 04 -- REGION ID (ATTACHMENT DESCRIPTOR ADDRESS).E#; WD. 05 -- OFFSET IN REGION WORD.S ; WD. 06 -- LENGTH OF MAP WORD.; WD. 07 -- STATUS WORD.R2; WD. 08 THRU WD. 017 -- CONTENTS OF SEND BUFFER.;->$DRSRF::BIT #T3.ACP!T3.NSD,T.ST3(R0) ;SENDS LEGAL TO RECEIVER? BNE 3$ ;IF NE NO- MOV R0,-(SP) ;SAVE RECEIVER TASK TCB ADDRESS 3 CALL $CEFNG ;CONVERT EFN AND LOCK IF GROUP GLOBAL0$ BCS 4$ ;IF CS NO EFN WAS SPECIFIED6 INCB T.SRCT(R5) ;INCREMENT NUMBER OF INCOMPLETE SREFS& MOV R5,-(SP) ;SAVE SENDER TCB ADDRESS MOV R0,-(SP) ;SAVE EFN MASK MOV R1,-(SP) ;SAVE EFN ADDRESSO BR 5$ ; 03$: DRSTS D.RS2 ;ATTEMPT TO SEND TO AN ACP TASK)4$: CLR 00 mkkf-(SP) ;INDICATE NO EFN SPECIFIEDS+ MOV T.NAM(R5),-(SP) ;SAVE SENDER TASK NAME3 MOV T.NAM+2(R5),-(SP) ;55$: MOV (R3),R3 ;PICK UP ADDRESS OF WINDOW DEF BLOCK ( MOV #8.*2,R1 ;SET SIZE TO ADDRESS CHECK5 CALL $ACHKP ;ADDRESS CHECK AND MAP WINDOW DEF BLOCK , ADD #W.NRID,R3 ;POINT TO REGION ID IN BLOCK9 CALL $SRATT ;SEARCH FOR SPECIFIED ATTACHMENT DESCRIPTORT6 CMP (R3)+,-(SP) ;BUMP POINTERS FOR REGION ID (W.NRID)+ MOV (R3)+,-(SP) ;SAVE OFFSET WORD (W.NOFF)S+ MOV (R3)+,-(SP) ;SAVE LENGTH WORD (W.NLEN)(+ MOV (R3)+,-(SP) ;SAVE STATUS WORD (W.NSTS)R% BIC #^C17,(SP) ;CLEAR ALL BUT ACCESST BNE 6$ ;IF NE ACCESS SPECIFIED7 MOVB A.STAT(R5),(SP) ;DEFAULT TO ACCESS OF SENDER TASKS=6$: MOVB A.STAT(R5),-(SP) ;PUSH ATTACHMENT DESCRIPTOR ADDRESSW' COMB (SP) ;COMPUTE ACCESS DENIED MASKT< BITB (SP)+,(SP) ;CHECK SPECIFIED ACCESS AGAINST SENDER TASK BNE 70$ ;IF NE ACCESS DENIED/ MOV -2(R3),-(SP) ;SAVE W.NSTS FOR WS.NAT CHECK(# MOV (R3),R3 ;POINT TO SEND BUFFERS BEQ 10$ ;IF EQ THERE IS NONE( MOV #8.*2,R1 ;SET SIZE TO ADDRESS CHECK0 CALL $ACHKP ;ADDRESS CHECK AND MAP SEND BUFFER* ADD #8.*2,R3 ;POINT TO END OF SEND BUFFER)10$: CALL $ALPKT ;ALLOCATE A SEND PACKET  .IF DF R$$DSP4 ADD #20.*2,R0 ;POINT PAST DESTINATION FOR TASK NAME9 MOV $TNAME+2,-(R0) ;STORE SECOND WORD OF MULTI-USER NAME)# MOV $TNAME,-(R0) ;STORE FIRST WORDE/ CMP -(R0),-(R0) ;POINT TO AREA FOR SEND BUFFER3 .IFFS6 ADD #16.*2,R0 ;POINT PAST DESTINATION FOR SEND BUFFER .ENDC% MOV #8.,R1 ;SET LOOP COUNT FOR COPYR MOV R1,R2 ;COPY LOOP COUNT/20$: MOV R3,-(R0) ;WAS A SEND BUFFER SPECIFIED? BEQ 30$ ;IF EQ NOT$ MOV -(R3),(R0) ;ELSE COPY NEXT WORD30$: DEC R2 ;DONE YET?  BGT 20$ ;IF GT NO- MOV (SP)+,R3 ;RESTORE POINTER TO SEND BUFFERS" MOV (SP),R4 ;PICK UP STATUS WORD140$: MOV (SP)+,-(R0) ;INSERT SAVED WORDS ON STACKS DEC R1 ;DONE YET?P BGT 40$ ;IF GT NOO: MOV A.PCB(R5),R2 ;PICK UP PCB ADDRESS FROM ATT DESCRIPTOR& BIT #PS.PER,P.STAT(R2) ;PARITY ERROR? BNE 90$ ;IF NE YES2 MOV (R0),R5 ;PICK UP SAVED RECEIVER TASK ADDRESS3 MOV $PTCPT,KISAR6 ;REMAP TCB IF IT WAS A PROTOTYPEB. BIT #WS.NAT,R3 ;SHOULD ATT DESCR BE CREATED ? BEQ 45$ ;YES IF EQ/ CMP #^R...,T.NAM(R5) ;SEND TO MULTIUSER TASK ?  BNE 41$ ;IF NE NOE; MOV T.RRFL(R5),R3 ;POINT TO FIRST SEND BY REFERENCE PACKET+,400$: BEQ 45$ ;END OF LIST, DIDN'T FIND ADB9 CMP $TNAME,44(R3) ;THIS SREF FOR RIGHT MULTI-USER COPY ?  BNE 410$ ;IF NE NO CMP $TNAME+2,46(R3) ;MAYBES BNE 410$ ;DEFINITELY NOT* MOV 10(R3),R1 ;POINT TO ADB FOR THIS SREF% CMP A.PCB(R1),R2 ;ADB FOR THIS PCB ?I1 BEQ 49$ ;IF EQ YES, WE DON'T NEED TO CREATE ONET-410$: MOV (R3),R3 ;POINT TO NEXT SREF PACKETY BR 400$ ;AND GO AROUND AGAIN641$: MOV T.ATT(R5),R1 ;GET FIRST ATTACHMENT DESCRIPTOR BEQ 45$ ;IF EQ END OF LIST542$: SUB #A.TCBL,R1 ;POINT TO START OF ATT DESCRIPTORD CMP A.PCB(R1),R2 ;MATCH?, BEQ 49$ ;YES IF EQ. MOV A.TCBL(R1),R1 ;GET NEXT ATT DESCR ADDRESS BNE 42$ ;IF NE GO AGAINS.45$: MOV R0,-(SP) ;SAVE ADDRESS OF SEND PACKET- CALL $CRATT ;ATTACH RECEIVER TASK TO REGIONB) MOV (SP)+,R0 ;RETRIEVE ADDRESS OF PACKETD# BCS 80$ ;IF CS ALLOCATION FAILURER) CMP #120000,R5 ;TARGET TCB IN SEC POOL ?$ BHI 49$ ;IF HI NON; BISB #AS.PRO,A.STAT(R1) ;INDICATE A.TCB POINTS TO SEC POOLQ2 MOV $PTCPT,A.TCB(R1) ;INSERT BIAS OF SEC POOL TCB+49$: MOV R1,10(R0) ;SET REGION ID IN PACKETR# MOV R0,R1 ;COPY POINTER TO PACKETV! TST (R0)+ ;POINT TO TCB ADDRESSA TST (R0)+ ;EFN SPECIFIED?G BEQ 50$ ;IF EQ NOP% MOV (R0)+,-(SP) ;GET EVENT FLAG MASKC* MOV (R0),R0 ;GET EVENT FLAG MASK ADDRESS. BIC #1,R0 ;CLR GRP GLOBAL 2ND WORD INDICATOR/ BIC (SP)+,(R0) ;CLEAR SPECIFIED EVENT FLAG NOWR750$: MOV R5,R0 ;POINT TO RECEIVE BY REFERENCE LISTHEADR ADD #T.RRFL,R0 ;A& CALL $QINSF ;INSERT IN RECEIVE QUEUE1 MOV #AS.RRA,R4 ; GET CODE FOR RECEIVE BY REF ASTR/ CALL $DASTT ;DECLARE RECEIVE BY REFERENCE ASTC+ CALLR $DRDSE ;DECLARE A SIGNIFICANT EVENT 160$: DRSTS D.RS2 ;ATTEMPT TO SEND TO AN ACP TASK$'70$: DRSTS D.RS16 ;PRIVILEGE VIOLATION )80$: CALL $DEP00 ukvkcDATADATADATADATADATADATADATAKT ;DEALLOCATE SEND PACKETA! DRSTS D.RS1 ;ALLOCATION FAILUREO)90$: CALL $DEPKT ;DEALLOCATE SEND PACKETE DRSTS D.RS6 ;PARITY ERROR .ENDC .ENDT TO RECEIVE BY REFERENCE LISTHEADR ADD #T.RRFL,R0 ;A& CALL $QINSF ;INSERT IN RECEIVE QUEUE1 MOV #AS.RRA,R4 ; GET CODE FOR RECEIVE BY REF ASTR/ CALL $DASTT ;DECLARE RECEIVE BY REFERENCE ASTC+ CALLR $DRDSE ;DECLARE A SIGNIFICANT EVENT 160$: DRSTS D.RS2 ;ATTEMPT TO SEND TO AN ACP TASK$'70$: DRSTS D.RS16 ;PRIVILEGE VIOLATION )80$: CALL $DEP .TITLE DRSSTT .IDENT /05.01/; $;R ; COPYRIGHT (C) 1974, 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;IA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDD9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.W; ; D. N. CUTLER 30-AUG-73; ; PREVIOUSLY MODIFIED BY:A;M; D. N. CUTLER; +; MODIFIED FOR RSX-11M-PLUS VERSION 1.0 BY:L;1; T. J. MILLER;E+; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY::;C!; B. S. MCCARTHY 28-SEP-87 05.01:;R%; BM403 -- ALLOW VECTOR TO BE PLACED1; IN READ ONLY REGIONC; MACRO LIBRARY CALLSI;A .MCALL HDRDF$% HDRDF$ ;DEFINE TASK HEADER OFFSETSW;+,; **-$DRSDV-SPECIFY DEBUGGING AID SST VECTOR;F; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO RECORD THE ADDRESS AND LENGTHF; OF A VECTOR OF SST SERVICE ROUTINE ENTRY POINTS FOR USE BY AN INTRA-; TASK DEGUGGING AID (E.G. ODT)S; ; DPB FORMAT: ;J$; WD. 00 -- DIC (103.),DPB SIZE(3.).&; WD. 01 -- ADDRESS OF THE SST VECTOR.0; WD. 02 -- NUMBER OF ENTRIES IN THE SST VECTOR.; ; SST VECTOR FORMAT:;N7; WD. 00 -- TRAPS TO 4 (ODD ADDRESS, NONEX MEM, ETC.).; WD. 01 -- SEGMENT FAULT. @; WD. 02 -- TRACE TRAP (T-BIT) OR EXECUTION OF BPT INSTRUCTION.-; WD. 03 -- EXECUTION OF AN IOT INSTRUCTION. =; WD. 04 -- EXECUTION OF AN ILLEGAL OR RESERVED INSTRUCTION.T4; WD. 05 -- EXECUTION OF A NON RSX EMT INSTRUCTION.-; WD. 06 -- EXECUTION OF A TRAP INSTRUCTION. 6; WD. 07 -- PDP 11/40 FLOATING POINT EXCEPTION FAULT.;C ; INPUTS: ;-9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.R+; R3=ADDRESS OF THE SECOND WORD IN THE DPB.S/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)R;I-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.E&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED..=; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF PART OF VECTORP/; IS OUTSIDE OF ISSUING TASK'S ADDRESS SPACE,N0; VECTOR ADDRESS OF ZERO IS SPECIFIED, OR THE*; VECTOR SIZE IS GREATER THAN 31. WORDS.;- .ENABL LSBB<$DRSDV::ADD #H.ODVL,R4 ;POINT TO ODT VECTOR LENGTH IN HEADER" BR 10$ ;FINISH UP IN COMMON CODE;+#; **-$DRSTV-SPECIFY TASK SST VECTORU;DI; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO RECORD THE ADDRESS AND LENGTH OFEJ; A VECTOR OF SST SERVICE ROUTINE ENTRY POINT FOR USE BY THE ISSUING TASK.;U ; DPB FORMAT:S;T#; WD. 00 -- DIC(105.),DPB SIZE(3.).I&; WD. 01 -- ADDRESS OF THE SST VECTOR.0; WD. 02 -- NUMBER OF ENTRIES IN THE SST VECTOR.;E; SST VECTOR FORMAT:; 7; WD. 00 -- TRAPS TO 4 (ODD ADDRESS, NONEX MEM, ETC.).;; WD. 01 -- SEGMENT FAULT. B; WD. 02 -- TRACE TRAP (T-BIT) OR EXECUTION OF A BPT INSTRUCTION.-; WD. 03 -- EXECUTION OF AN IOT INSTRUCTION.C=; WD. 04 -- EXECUTION OF AN ILLEGAL OR RESERVED INSTRUCTION.O4; WD. 05 -- EXECUTION OF A NON RSX EMT INSTRUCTION.-; WD. 06 -- EXECUTION OF A TRAP INSTRUCTION.I6; WD. 07 -- PDP 11/40 FLOATING POINT EXCEPTION FAULT.;O ; INPUTS:2; 9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.A+; R3=ADDRESS OF THE SECOND WORD IN THE DPB. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)R;I-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.E&; DIRECTIVE STATUS OF +1 IF RETURNED.; C=1 IF DIRECTIVE IS REJECTED..=; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF PART OF VECTORP/; IS OUTSIDE OF ISSUING TASK'S ADDRESS SPACE,N/; VECTOR ADDRESS O00}kokfF ZERO IS SPECIFIED, OR THEO*; VECTOR SIZE IS GREATER THAN 31. WORDS.;-=$DRSTV::ADD #H.TKVL,R4 ;POINT TO TASK VECTOR LENGTH IN HEADERK(10$: MOV (R3)+,R0 ;GET ADDRESS OF VECTOR BEQ 20$ ;IF EQ DEASSIGN VECTOR' MOV (R3),R1 ;GET LENGTH OF SST VECTOR= BEQ 15$ ;IF EQ DEASSIGN VECTOR CMP (R3),#31. ;VECTOR TOO BIG?+ BHI 30$ ;IF HI YES# ASL R1 ;CONVERT LENGTH TO BYTES I S .IF DF S$$LIB S$ BIC #1,R0 ;INSURE LOW BIT IS CLEAR I .IFF ; DF S$$LIBS# BIT #1,R0 ;SPECIFIED ADDRESS ODD? # BNE 30$ ;IF NE YES, RETURN FAILEDR ;DIRECTIVE STATUS1 .IFTF ; DF S$$LIB+ CALL $ACHRO ;CHECK FOR AT LEAST READ ONLYN ;ACCESS TO SPECIFIED VECTORA) BCS 30$ ;IF CS NO ACCESS, RETURN STATUS ,15$: MOV (R3),(R4) ;SET SST VECTOR LENGTH # ASL (R4) ;CONVERT LENGTH TO BYTES P .IFT ; DF S$$LIBT B-20$: MOV -(R3),R2 ;PICK UP SST VECTOR ADDRESSE. CALL $CALTA ;CALCULATE PROPER VECTOR ADDRESS# MOV R2,-(R4) ;STORE PROPER ADDRESS.  .IFF ; DF S$$LIBT ,,20$: MOV -(R3),-(R4) ;SET SST VECTOR ADDRESS S .ENDC ; DF S$$LIB D( RETURN ;RETURN DIRECTIVE STATUS OF +1(30$: DRSTS D.RS98 ;SET DIRECTIVE STATUS .DSABL LSBO .ENDD VECTORA) BCS 30$ ;IF CS NO ACCESS, RETURN STATUS ,15$: MOV (R3),(R4) ;SET SST VECTOR LENGTH # ASL (R4) ;CONVERT LENGTH TO BYTES P .IFT ; DF S$$LIBT B-20$: MOV -(R3),R2 ;PICK UP SST VECTOR ADDRESSE. CALL $CALTA ;CALCULATE PROPER VECTOR ADDRESS# MOV R2,-(R4) ;STORE PROPER ADDRESS.  .IFF ; DF S$$LIBT ,,20$: MOV -(R3),-(R4) ;SE .TITLE DRSUBR .IDENT /03.36/);V5; COPYRIGHT (c) 1987 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; B. S. MCCARTHY;e); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:O;O ; M. S. FOX;; J. M. LAWLER ; T. LEKASD; B. S. MCCARTHY;H+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:;S; J. R. KAUFFMAN ; T. LEKAS/; J. M. LAWLER; T. M. MARTIN; B. S. MCCARTHY;R+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:B;I ; S. C. ADAMS ; J. W. BERZLE; J. GEMIGNANI, JR.; J. R. KAUFFMAN; B. S. MCCARTHY; L. B. MCCULLEY; D. P. RABAHY;E$; MODIFIED FOR RSX-11M-PLUS V4.0 BY:;C ; R. D. HANEY ; S. C. ADAMSY; P. K. M. WEISS; B. S. MCCARTHY ; K. L. NOEL; J. W. BERZLE;.$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;T"; PAUL K. M. WEISS 1-FEB-1988 3.362; PKW150 - ADD ENTRY POINTS FOR $CPABO AND $CPRCV; .IF DF S$$HDW .MCALL SHDDF$,PKTDF$A* SHDDF$ ;DEFINE SHADOW RECORDING OFFSETS .ENDC ;S$$HDW  .IF DF P$$LAS# .MCALL HDRDF$,PCBDF$,TCBDF$,WDBDF$F1 HDRDF$ ;DEFINE HEADER AND WINDOW BLOCK OFFSETSA2 PCBDF$ ;DEFINE PCB AND ATTACHMENT DESCR OFFSETS TCBDF$ ;DEFINE TCB OFFSETS WDBDF$ ;DEFINE WDB OFFSETSTD; THE FOLLOWING TABLE OF VALUES MUST BE IDENTICAL TO THE ONE AT THE ; BEGINNING OF THE KX DRIVER.1* .IF DF C$$RMT ;IF REMOTE SYSTEM SERVICES .ASECTR .=120000D*CPRCON: .BLKW 1 ;UNIT CONNECT ENTRY POINT8CPRALO: .BLKW 1 ;ALLOCATE BUFFER SPACE AND COMMAND RING)CPRDEA: .BLKW 1 ;DEALLOCATE BUFFER SPACE,$CPRSEN: .BLKW 1 ;SEND PACKET TO VMS6CPRABO: .BLKW 1 ;ABORT TASK AND CLEANUP CPRSX PACKETS@CPRRCV: .BLKW 1 ;RE-ENTER DRIVER WHEN POOL HAS BECOME AVAILABLE .PSECTD .ENDC ;C$$RMT .PAGE;+%; **-$DRDSE-DECLARE SIGNIFICANT EVENTE;EE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO DECLARE A SIGNIFICANT EVENT.S;E ; DPB FORMAT:.;C"; WD. 00 -- DIC(35.),DPB SIZE(1.).;; ; INPUTS:T;T9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.N+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.P/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.O,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)A;L$; C=0 WITH A DIRECTIVE STATUS OF +1.;.2; NOTE: THIS DIRECTIVE IS ALSO CALLED A SUBROUTINE;- .IF NDF M$$PROS9$DRDSE::MOV $ACTHD,@$RQSCH ;SET DISPATCH TO FRONT OF LISTT .IFF $DRDSE::MOV R0,-(SP) ;SAVE R0* MOV00okvkcDATADATADATADATADATADATADATA #$RQTAB,R0 ;POINT TO RESCHEDULE TABLE415$: MOV $ACTHD,(R0)+ ;SET DISPATCH TO FRONT OF LIST, CMP R0,#$RQTAB+ ;AT END OF TABLE? BLO 15$ ;IF LO NON;KB; WE HAVE JUST CHANGED THE RESCHEDULE POINTERS FOR ALL PROCESSORS."; WE SHOULD INTERRUPT ALL OF THEM.;A# MOV $URMST,R0 ;GET ONLINE BUS RUNS+# BIC $CPMSK,R0 ;ONLY PROCESSORS NOWO BIC $CPBIT,R0 ;NOT US EITHER$ BEQ 25$ ;IF EQ NOBODY TO INTERRUPT MTPS #PR7 ;INHIBIT DEADLOCKS LOCK$ $FORKL,SPIN$ BIS R0,$IIPND ;SHOW WORK IS WAITING ULOCK$ $FORKL,SPIN  MTPS #025$: MOV (SP)+,R0 ;RESTORE R0S .ENDC6 CLR $SIGFL ;CLEAR TASK WAITING FOR SIGNIFICANT EVENT) RETURN ;RETURN DIRECTIVE STATUS OF +1 ;+%; **-$DFWFS-WAITFOR SINGLE EVENT FLAGP;EE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SUSPEND THE EXECUTION OF THEN3; ISSUING TASK UNTIL A SPECIFIED EVENT FLAG IS SET.;C ; DPB FORMAT: ;E"; WD. 00 -- DIC(41.),DPB SIZE(2.).1; WD. 01 -- EVENT FLAG NUMBER OF FLAG TO WAITFOR.O;, ; INPUTS:R;I; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS.9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.;+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.T/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.*,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;R5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;N$; C=0 WITH A DIRECTIVE STATUS OF +1.;-4$DRWFS::BIC #1,R1 ;CLR GRP GLOBAL 2ND WORD INDCATOR8$DRWS1::BIS #T2.WFR,T.ST2(R5) ;PUT TASK IN WAITFOR STATE) ;(DO NOT USE R2 BECAUSE OF QIOW CALL)F$ MOV R0,T.EFLM(R5) ;SET WAITFOR MASK. MOV R1,T.EFLM+2(R5) ;SET WAITFOR MASK ADDRESS& CALLR $SETRT ;SET A SCHEDULE REQUEST;+$; **-$DRCSR-CANCEL SCHEDULE REQUESTS;EK; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO CANCEL ALL SCHEDULE REQUESTS FOR A; SPECIFIED TASK.V;T ; DPB FORMAT:U;D"; WD. 00 -- DIC(25.),DPB SIZE(3.).$; WD. 01 -- FIRST HALF OF TASK NAME.%; WD. 02 -- SECOND HALF OF TASK NAME.;W ; INPUTS:.;,8; R0=ADDRESS OF THE TCB TO CANCEL SCHEDULE REQUESTS FOR.J; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO CANCEL SCHEDULE REQUES9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.E+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.D/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.S,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;P5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)(;)$; C=0 WITH A DIRECTIVE STATUS OF +1.;-&$DRCS1:: ;REF LABEL FOR ERROR LOGGER#$DRCSR::MOV R0,R5 ;SET TCB ADDRESSS( CLR R4 ;SET INITIAL ENTRY TYPE MINUS 21 CALL (PC) ;REMOVE PERIODIC/SINGLE SHOT REQUESTSK' TST (R4)+ ;ADVANCE TO NEXT ENTRY TYPEO, CALLR $CLRMV ;REMOVE ALL REMAINING ENTRIES;+; **-$DRGMX-GET MAPPING CONTEXTB;DF; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO RETURN THE MAPPING CONTEXT OF=; THE TASK, I.E. TO FILL IN UP TO N WINDOW DEFINITION BLOCKS,PB; WHERE N IS THE TOTAL NUMBER OF WINDOW BLOCKS IN THE TASK HEADER.5; NO INFORMATION IS RETURNED ON UNUSED WINDOW BLOCKS.O;0 ; DPB FORMAT:D;S"; WD. 00 -- DIC(113.),DPB SIZE(2.)5; WD. 01 -- ADDRESS OF THE N WINDOW DEFINITION BLOCKSE;K ; INPUTS:+;A9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.I,; (R3)=ADDRESS OF N WINDOW DEFINITION BLOCKS/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;.3; INPUT FIELDS IN THE WINDOW DEFINITION BLOCKS ARE:R; NONE.;T5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)F;A-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED.&; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.S:; DIRECTIVE STATUS OF 'D.RS98' IS RETURNED IF THE ADDRESS5; CHECK OF THE N WINDOW BLOCKS PLUS TERMINATOR WORDI ; FAILS.;S4; OUTPUT FIELDS IN EACH WINDOW DEFINITION BLOCK ARE:>; W.NID=ADDRESS WINDOW ID OF NEXT ESTABLISHED ADDRESS WINDOW.!; W.NAPR=BASE APR OF THE WINDOW. -; W.NBAS=VIRTUAL BASE ADDRESS OF THE WINDOW. %; W.NSIZ=SIZE OF THE ADDRESS WINDOW.N,; W.NRID=REGION ID IF MAPPED OR UNMODIFIED.3; W.NOFF=OFFSET IN REGION IF MAPPED OR UNMODIFIED.R0; W.NLEN=LENGTH OF MAP IF MAPPED OR UNMODIFIED.+; W.NSTS=00okkfNECESSARY BITS TO RESTORE WINDOW.E0; WS.SIS=1 IF WINDOW IS IN SUPERVISOR I SPACE.!; WS.MAP=1 IF WINDOW IS MAPPED.F3; WS.WRT=1 IF WINDOW IS MAPPED WITH WRITE ACCESS.A;E<; NOTE: ON SYSTEMS SUPPORTING NON RESIDENT TASK HEADERS, THE4; DIRECTIVE DISPATCHER MAPS THE NON RESIDENT HEADER5; THROUGH APR6. ON THESE SYSTEMS WE WILL USE APR5 TON5; MAP TO THE USER TASK (N WINDOW DEFINITION BLOCKS).F8; THEREFORE, THIS DIRECTIVE CAN NOT GO INTO A DIRECTIVE(; PARTITION WITHOUT SOME MODIFICATIONS.;T5; WHEN MAPPING TO A TASK REGION, W.BOFF IS OFFSET BYI8; THE SIZE OF THE EXTERNAL TASK HEADER. WE WILL ADJUST9; THAT VALUE HERE SO THAT THE TASK DOES NOT KNOW WHETHERS$; OR NOT IT HAS AN EXTERNAL HEADER.;-D$DRGMX::MOV H.WND(R4),R4 ;POINT TO NUMBER OF WINDOW BLOCKS IN HEADER. MOV (R4)+,R1 ;PICK UP NUMBER OF WINDOW BLOCKS+ MOV R1,-(SP) ;SAVE NUMBER OF WINDOW BLOCKSW+ ASL R1 ;CONVERT TO BYTES TO ADDRESS CHECKS ASL R1 ; ASL R1 ;' INC R1 ;(INCLUDE WORD FOR TERMINATOR) ASL R1 ;7 MOV (R3),R3 ;PICK UP VIRTUAL ADDRESS OF WINDOW BLOCKST .IF DF X$$HDR$ MOV R3,R0 ;GET VA TO ADDRESS CHECK CALL $ACHCK ;ADDRESS CHECK' BCS 50$ ;IF CS, ADDRESS CHECK FAILURE ) CALL $RELOC ;RELOCATE TO KERNEL ADDRESSX MOV R1,KISAR5 ;MAP USER BUFFERE' MOV R2,R3 ;GET KERNEL VIRTUAL ADDRESSR+ SUB #20000,R3 ;AND MAKE IT AN APR5 ADDRESS( .IFF ; DF X$$HDRI5 CALL $ACHKP ;ADDRESS CHECK AND MAP TO WINDOW BLOCKSS A .ENDC ; DF X$$HDR ) CLR -(SP) ;INITIALIZE WINDOW ID COUNTERR910$: TST W.BSIZ(R4) ;IS NEXT BLOCK AN ESTABLISHED WINDOW?K BNE 11$ ;IF NE YES+ ADD #W.BLGH,R4 ;POINT TO NEXT WINDOW BLOCK , BR 40$ ;BRANCH TO DETERMINE IF MORE BLOCKS+11$: MOVB (SP),(R3)+ ;SET WINDOW ID (W.NID)O+ MOV (R4)+,-(SP) ;SAVE PCB ADDRESS (W.BPCB)F3 MOV (R4)+,R1 ;PICK UP LOW VIRTUAL ADDRESS (W.BLVR)#7 MOVB -1(R4),(R3) ;GET ITS HIGH BYTE (W.BLVR+1)(W.NAPR)D. ASLB (R3) ;SHIFT TO FORM APR NUMBER (W.NAPR) ROLB (R3) ;A ROLB (R3) ;$ ROLB (R3)+ ;0 MOV R1,(R3)+ ;SET VIRTUAL BASE ADDRESS (W.NBAS)4 MOV (R4)+,R2 ;PICK UP HIGH VIRTUAL ADDRESS (W.BHVR)3 MOV (R4)+,R0 ;PICK ATT DESCRIPTOR ADDRESS (W.BATT)O2 MOV (R4)+,(R3)+ ;SET WINDOW SIZE (W.BSIZ)(W.NSIZ) .IF DF X$$HDR. MOV (SP)+,R2 ;GET PCB ADDRESS FOR THIS WINDOW E .IFF ; DF X$$HDRB# TST (SP)+ ;IS THIS WINDOW MAPPED?A E .ENDC ;DF X$$HDR  BEQ 20$ ;IF EQ NOG% MOV R0,(R3)+ ;SET REGION ID (W.NRID) A MOV T.ATT(R5),-(SP) ;PUSH ADDRESS OF FIRST ATTACHMENT DESCRIPTOR& SUB #A.TCBL,(SP) ;POINT TO FIRST WORD CMP R0,(SP)+ ;TASK REGION?V BNE 15$ ;IF NE NOG7 CLR -2(R3) ;SET IT TO DEFAULT TO TASK REGION (W.NRID)I .IF DF X$$HDR015$: MOV (R4)+,(R3) ;SET OFFSET W.BOFF TO W.NOFF6 MOVB P.HDLN(R2),R2 ;GET SIZE OF XTRNL HEADER (IF ANY)- SUB R2,(R3)+ ;ADJUST OFFSET BY HEADER LENGTHT3 MOV W.BHVR-W.BFPD(R4),R2 ;RESTORE HIGH VA (W.BHVR)D  .IFF ; DF X$$HDR115$: MOV (R4)+,(R3)+ ;SET OFFSET (W.BOFF)(W.NOFF)T ) .ENDC ; DF X$$HDR SUB R1,R2 ;CALCULATE LENGTH ADD #1,R2 ;P ROL R2 ;CONVERT TO 32W BLOCKSS ROL R2 ; ROLB R2 ;1 SWAB R2 ;G& MOV R2,(R3)+ ;SET THE LENGTH (W.NLEN)/ TST (R4)+ ;ADVANCE TO LAST PDR IMAGE (W.BFPD)(8 MOV (R4)+,(R3) ;PICK UP LAST PDR IMAGE (W.BLPD)(W.NSTS)7 BIC #^C4,(R3) ;CLEAR ALL BUT WRITE ACCESS BIT (W.NSTS)S% ASR (R3) ;SHIFT INTO PLACE (W.NSTS)- .IF DF U$$DAS2 BITB #20,W.BFPD-W.BLGH(R4) ;USER D SPACE WINDOW ? BEQ 18$ ;IF EQ NOF0 BIS #WS.UDS,(R3) ;SET USER D SPACE BIT (W.NSTS) BR 19$ ;SKIP SUPER I CHECK18$: ;REFERENCE LABEL .ENDC ; DF U$$DAS .IF DF S$$LIB3 TSTB W.BFPD-W.BLGH(R4) ;SUPERVISOR I SPACE WINDOW?W BMI 19$ ;IF MI NOA6 BIS #WS.SIS,(R3) ;SET SUPERVISOR I SPACE BIT (W.NSTS) .ENDC:19$: BIS #WS.MAP,(R3)+ ;INDICATE WINDOW IS MAPPED (W.NSTS) BR 30$ ;920$: ADD #W.NSTS-W.NRID,R3 ;POINT TO NEXT WINDOW ID BLOCKD2 ADD #W.BLGH-W.BOFF,R4 ;POINT TO NEXT WINDOW BLOCK CLR (R3)+ ;CLEAR STATUS WORD?30$: TST (R3)+ ;SKIP OVER SEND/RECEIVE BUFFER ADDRESS (W.NSRB)P40$: INC (SP) ;BUMP WINDOW ID CMP (SP),2(SP) ;DONE YET? BLO 10$ ;IF 00okvkcDATADATADATADATADATADATADATALO NOB; MOV (SP)+,(R3) ;STORE NUMBER OF HEADER SLOTS AS TERMINATORI NEG (R3) ;AND NEGATE TST (SP)+ ;CLEAN STACK .IF NDF K$$DAST/ MOV $DRAPR,KINAR5 ;REMAP DISPATCHER IN I-SPACEW .ENDC ; NDF K$$DAS) RETURN ;0 .IF DF X$$HDR50$: DRSTS D.RS98 ;BAD ADDRESSC .ENDC ; DF X$$HDR .ENDC ; DF P$$LAS;+; **-$DRQRQ-QUEUE I/O REQUEST ;D@; THIS ROUTINE IS CALLED TO OPTIONALLY INSERT AN I/O PACKET INTO7; A CONTROLLER QUEUE AND TO CALL THE DRIVER TO INITIATEE; ACTIVITY ON THE DEVICE. ;(@; IF THE DEVICE SUPPORTS SEEK OPTIMIZATION AND THE PACKET IS FOR9; A LOGICAL TRANSFER FUNCTION, THE LBN FOR THE REQUEST IS@; BLOCK CHECKED AND CONVERTED TO THE SECTOR/TRACK/CYLINDER FORM.9; THE BLOCK CHECK ROUTINE IS IN THE CORRESPONDING DRIVER.R; ; INPUTS:S;; R1=ADDRESS OF THE I/O PACKET.D'; R5=ADDRESS OF THE UNIT CONTROL BLOCK.U; ; OUTPUTS:;U5; IF NO I/O PACKET IS SPECIFIED AS INPUT (R1 = 0) THE5; DRIVER IS SIMPLY CALLED TO INITIATE ACTIVITY ON THEE0; DEVICE. THIS OPTION ALLOWS US TO RE-INITIATE /; ACTIVITY ON A DEVICE WHEN IT HAS SATISFIED A ; STALLED I/O STATE. ;O6; IF AN I/O PACKET IS SPECIFIED AS INPUT, IT IS PLACED3; IN THE CONTROLLER QUEUE AND ACTIVITY IS INITIATED ; ON THE DEVICE.;H(; NOTE: R4 IS DESTROYED BY THIS ROUTINE.;-$DRQRQ:: ;REFERENCE LABELD6 MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK% MOV (R5),R2 ;GET ADDRESS OF THE DCBI/ MOV KINAR5,-(SP) ;SAVE KERNEL INSTRUCTION APR5I .IF DF K$$DAS( MOV KDSAR5,-(SP) ;SAVE KERNEL DATA APR5 .IFTF ;K$$DAS) MOV D.PCB(R2),R3 ;GET DRIVER PCB ADDRESS ' BEQ 20$ ;IF EQ DRIVER IS PART OF EXECK< MOV P.REL(R3),KINAR5 ;MAP KERNEL INSTRUCTION APR5 TO DRIVER .IFT ;K$$DASI5 MOV P.REL(R3),KDSAR5 ;MAP KERNEL DATA APR5 TO DRIVERE .IFTF ;K$$DAS#20$: TST R1 ;I/O PACKET TO QUEUE ?) BEQ 40$ ;IF EQ, NO - SIMPLY CALL DRIVERN .IF DF S$$HDW;,#; COPY THE I/O PACKET FOR SHADOWINGN;,# MOV R4,-(SP) ;SAVE THE SCB ADDRESS3 MOV R1,R3 ;COPY THE I/O PACKET ADDRESS FOR $SHFNDD$ CALL $SHFND ;THIS DEVICE SHADOWED? BCS 35$ ;IF CS NO, DON'T COPY / CMP ML.PRI(R4),R1 ;IS THIS THE PRIMARY PACKET?P BNE 35$ ;IF NE NO, DON'T COPYU8 MOV #I.LGTH/2,R0 ;GET THE NUMBER OF WORDS IN THE PACKET632$: MOV (R1)+,(R2)+ ;COPY THE NEXT WORD IN THE PACKET% SOB R0,32$ ;LOOP FOR REST OF PACKET3 SUB #I.LGTH,R1 ;GET THE PRIMARY I/O PACKET ADDRESSD& MOV U.UMB(R5),R0 ;GET THE UMB POINTER> MOV M.UCBS+2(R0),I.UCB-I.LGTH(R2) ;COPY THE UCB POINTER INTO ;THE SECONDARY PACKETE"35$: MOV (SP)+,R4 ;RESTORE THE SCB% MOV (R5),R2 ;GET ADDRESS OF THE DCBD .ENDC ;S$$HDW* .IF DF D$$CHE ;DISK DATA CACHING SUPPORT+ .IF DF K$$DAS ;KERNEL I/D SPACE EXECUTIVE 5 CMP 2(SP),$DRCHE ;REQUEST FROM CACHE? (CHECK KINAR5)2 .IFF ;K$$DASO4 CMP (SP),$DRCHE ;REQUEST FROM CACHE? (CHECK KISAR5) .IFTF ;K$$DAS2 BEQ 350$ ;YES IF EQ; CACHE ALWAYS BYPASSES CACHE/ BIT #DV.MSD,U.CW1(R5) ;POSSIBLY A DISK DEVICE?G) BEQ 350$ ;NO IF EQ; DON'T BOTHER CACHERT< BIT #DV.SQD,U.CW1(R5) ;IS THIS POSSIBLE DISK REALLY A TAPE?/ BNE 350$ ;YES IF NE; DON'T CACHE THESE EITHER$8 MOV $DRCHE,R0 ;GET BIAS OF CACHER [DIRECTIVE] PARTITION2 BEQ 350$ ;IF EQ NOT PRESENT IN RUNNING EXECUTIVE3 MOV R0,KINAR5 ;ELSE LOAD [I-SPACE] MAPPING IN APR5F0 CALL @#120000 ;HOPE THIS CACHE CALL IS WORTH IT; NOTE:KE; AN INLINE RETURN FROM THE CACHER FORWARDS THE REQUEST TO THE DRIVERS<; THEREFORE, THE DRIVER MUST BE REMAPPED PRIOR TO CONTINUING+ MOV D.PCB(R2),R3 ;GET DRIVER'S PCB ADDRESS#0 BEQ 350$ ;IF EQ DRIVER IS RESIDENT OR UNLOADED2 MOV P.REL(R3),KINAR5 ;MAP KERNEL INSTRUCTION APR5 .IFT ;K$$DAS;0 MOV KINAR5,KDSAR5 ;MAP KERNEL DATA APR5 AS WELL .ENDC ;K$$DAS350$:G .ENDC ;D$$CHE5 BIT #S2.OPT,S.ST2(R4) ;SEEK OPTIMIZATION SUPPORTED?0 BEQ 30$ ;IF EQ NOA7 MOV D.DSP(R2),R2 ;GET ADDRESS OF DRIVER DISPATCH TABLEA6 CALL @D.VCHK(R2) ;CALL DRIVER FOR BLOCK CHECK AND CVT730$: BITB #UC.QUE,U.CTL(R5) ;QUEUE PACKET BEFORE CALL?P BNE 40$ ;IF NE NO'. MOV R4,R0 ;SET ADDRESS00okkf OF I/O QUEUE LISTHEAD/ CALL $QINSP ;QUEUE I/O PACKET IN DEVICE QUEUEE640$: MOV (R5),R2 ;GET ADDRESS OF DEVICE CONTROL BLOCK;+; ** W A R N I N G **A;E; SPM HOOKPOINT NUMBER 16.;G); DO NOT CHANGE THE INSTRUCTION FOLLOWINGR; LABEL WITHOUT CHECKING SPM;-+$SPH16==. ;SPM CHANGES THE INSTRUCTION ATA ;THE LOCATION OF THIS LABEL7 MOV D.DSP(R2),R2 ;GET ADDRESS OF DRIVER DISPATCH TABLE: T( CALL @D.VINI(R2) ;CALL DRIVER INITIATOR.$QOPDN:: ;$BLKC2 RETURNS HERE AFTER AN ERROR .IFT + MOV (SP)+,KDSAR5 ;RESTORE KERNEL DATA APR5C .ENDC2 MOV (SP)+,KINAR5 ;RESTORE KERNEL INSTRUCTION APR5 RETURN ;+@$DRWFA::MOV #$DRWFS,-(SP) ;POINT TO WAIT FOR SINGLE FLAG ROUTINE;++;**-$MPDC1-MAP TO AND CALL DIRECTIVE COMMON ;CF; THIS ROUTINE IS CALLED TO TRANSFER CONTROL TO A ROUTINE IN THE FIRSTF; DIRECTIVE COMMON, THEN RESTORE THE CURRENT MAPPING AND RETURN TO THE ; CALLER.; ; INPUTS:N;2"; (SP) = RETURN ADDRES AFTER CALL!; 2(SP) = ROUTINE ADDRESS TO CALLR; ; OUTPUTS:;(; NONE.R;R/; REGISTERS AND C-BIT ARE PRESERVED ACROSS CALL+;N;- .ENABL LSBE$MPDC3:: .IF DF D$$PAR .IF DF K$$DAS/ MOV KDSAR5,-(SP) ;SAVE CURRENT D SPACE MAPPINGI $$$=4 .IFF ; DF K$$DASN $$$=2 .IFTF ; DF K$$DAS+ MOV $$$(SP),-(SP) ;COPY ADDRESS OF ROUTINE 9 MOV $$$(SP),$$$+2(SP) ;PUT RETURN ADDRESS IN RIGHT PLACEC. MOV KINAR5,$$$(SP) ;SAVE CURRENT APR5 MAPPING, MOV $DRAP3,KINAR5 ;MAP 2ND DIRECTIVE COMMON .IFT ; DF K$$DAS 0 MOV $DRAP3,KDSAR5 ;MAP IT IN DATA SPACE AS WELL .ENDC ; DF K$$DAS0 BR 10$ ;FINISH IN COMMON WITH MAP FIRST COMMON .IFTF ; DF D$$PAR$MPDC4:: .IFT ; DF D$$PARS .IF DF K$$DAS/ MOV KDSAR5,-(SP) ;SAVE CURRENT D SPACE MAPPINGN $$$=4 .IFF ; DF K$$DASD $$$=2 .IFTF ; DF K$$DAS+ MOV $$$(SP),-(SP) ;COPY ADDRESS OF ROUTINE 9 MOV $$$(SP),$$$+2(SP) ;PUT RETURN ADDRESS IN RIGHT PLACEU. MOV KINAR5,$$$(SP) ;SAVE CURRENT APR5 MAPPING, MOV $DRAP4,KINAR5 ;MAP 2ND DIRECTIVE COMMON .IFT ; DF K$$DAST0 MOV $DRAP4,KDSAR5 ;MAP IT IN DATA SPACE AS WELL .ENDC ; DF K$$DAS0 BR 10$ ;FINISH IN COMMON WITH MAP FIRST COMMON .IFTF ; DF D$$PAR$MPDC2:: .IFT ; DF D$$PARS .IF DF K$$DAS/ MOV KDSAR5,-(SP) ;SAVE CURRENT D SPACE MAPPINGD $$$=4 .IFF ; DF K$$DASD $$$=2 .ENDC ; DF K$$DAS+ MOV $$$(SP),-(SP) ;COPY ADDRESS OF ROUTINE 9 MOV $$$(SP),$$$+2(SP) ;PUT RETURN ADDRESS IN RIGHT PLACEU. MOV KINAR5,$$$(SP) ;SAVE CURRENT APR5 MAPPING, MOV $DRAP2,KINAR5 ;MAP 2ND DIRECTIVE COMMON0 BR 10$ ;FINISH IN COMMON WITH MAP FIRST COMMON .IFTF ; DF D$$PAR$MPDCV:: .IFT ; DF D$$PAR  .IF DF K$$DAS/ MOV KDSAR5,-(SP) ;SAVE CURRENT D SPACE MAPPING $$$=4 .IFF ; DF K$$DASR $$$=2 .ENDC ; DF K$$DAS+ MOV $$$(SP),-(SP) ;COPY ADDRESS OF ROUTINE9 MOV $$$(SP),$$$+2(SP) ;PUT RETURN ADDRESS IN RIGHT PLACE . MOV KINAR5,$$$(SP) ;SAVE CURRENT APR5 MAPPING, MOV $DRAPV,KINAR5 ;MAP 2ND DIRECTIVE COMMON0 BR 10$ ;FINISH IN COMMON WITH MAP FIRST COMMON .IFTF ; DF D$$PAR$MPDC1:: .IFT ; DF D$$PAR  .IF DF K$$DAS5 MOV KDSAR5,-(SP) ;SAVE CURRENT D SPACE APR 5 MAPPINGD .ENDC ; DF K$$DAS+ MOV $$$(SP),-(SP) ;COPY ADDRESS OF ROUTINE9 MOV $$$(SP),$$$+2(SP) ;PUT RETURN ADDRESS IN RIGHT PLACEV. MOV KINAR5,$$$(SP) ;SAVE CURRENT APR5 MAPPING+ MOV $DRAPR,KINAR5 ;MAP TO DIRECTIVE COMMON '10$: CALL @(SP)+ ;CALL DESIRED ROUTINE  .IF DF K$$DAS9 MOV (SP)+,KDSAR5 ;RESTORE PREVIOUS D SPACE APR 5 MAPPINGI .ENDC ; DF K$$DAS+ MOV (SP)+,KINAR5 ;RESTORE PREVIOUS MAPPINGF RETURN ;  .IFF ; DF D$$PAR* CALLR @(SP)+ ;DIRECT TRANSFER TO ROUTINE .ENDC ; DF D$$PAR .DSABL LSBM;+$; **-$CPXXX- STUB ROUTINES FOR CPRSX;-:; THIS MODULE PROVIDES GLOBAL ENTRY POINTS TO MAP AND CALL-; ROUTINES IN THE CPRSX COMMUNICATION DRIVER.$;P .ENABL LSBO$CPCON::* .IF DF C$$RMT ;IF REMOTE SYSTEM SERVICES) MOV #CPRCON,R3 ;SAVE OUR CALLING ADDRESS  BR 10$ ;JOIN COMMON CODE .IFTF ;C$$RMT$CPALO:: .IFT ;C$$00okvkcDATADATADATADATADATADATADATARMTP) MOV #CPRALO,R3 ;SAVE OUR CALLING ADDRESS  BR 10$ ;JOIN COMMON CODE .IFTF ;C$$RMT$CPDEA:: .IFT ;C$$RMT) MOV #CPRDEA,R3 ;SAVE OUR CALLING ADDRESS  BR 10$ ;JOIN COMMON CODE .IFTF ;C$$RMT$CPRCV:: .IFT ;C$$RMT ) MOV #CPRRCV,R3 ;SAVE OUR CALLING ADDRESSS BR 10$ ;JOIN COMMON CODE .IFTF ;C$$RMT$CPABO:: .IFT ;C$$RMTI) MOV #CPRABO,R3 ;SAVE OUR CALLING ADDRESSS BR 10$ ;JOIN COMMON CODE .IFTF ;C$$RMT$CPSEN:: .IFT ;C$$RMTC) MOV #CPRSEN,R3 ;SAVE OUR CALLING ADDRESSS10$:. MOV @#KINAR5,-(SP) ;SAVE APR5 I SPACE MAPPING. MOV @#KISAR5,-(SP) ;SAVE APR5 D SPACE MAPPING$ MOV $KXBAS,@#KISAR5 ;MAP THE DRIVER$ MOV $KXBAS,@#KINAR5 ;MAP THE DRIVER CALL @(R3) ;CALL THE ROUTINE1 MOV (SP)+,@#KISAR5 ;RESTORE APR5 D SPACE MAPPINGD1 MOV (SP)+,@#KINAR5 ;RESTORE APR5 I SPACE MAPPINGR .ENDC ;C$$RMT RETURN .DSABL LSBR";$IMASG - IMPLICIT ASSIGN LUN CALL;ON; THIS ROUTINE IS USED BY QIO, GLUN, GDVI ETC. TO JUMP TO ALUN FROM THE OTHER (; DIRECTIVE COMMONS FOR RUN TIME BINDING;N$IMASG::) .IF DF C$$RTB ;RUN TIME BINDING SUPPORTP S' MOV $DRAPR,KINAR5 ;MAP TO FIRST COMMONI( MOV $DRAPR,KDSAR5 ;MAP IN D-SPACE ALSO & JMP $IMAS1 ;JUMP TO ROUTINE IN DRASG I .ENDC ; C$$RTBK;+A; **-$MPPRO- MAP AND CALL SPECIFIED PROCESS THEN RETURN TO CALLER ;CE; THIS ROUTINE IS CALLED TO MAP AND CALL THE ROUTINE INDICATED BY THE >; ADDRESS DOUBLE WORD ON THE STACK. MAPPING IS DONE VIA APR5.;G ; INPUTS: ;P#; (SP) = RETURN ADDRESS AFTER CALL !; 2(SP) = ROUTINE ADDRESS TO CALLI$; 4(SP) = MAPPING OF ROUTINE TO CALL;N ; OUTPUTS:;; NONE.P;I; ALL REGISTERS ARE PRESERVED.;-$MPPRO::) MOV 2(SP),-(SP) ;COPY ADDRESS OF ROUTINE " MOV KISAR5, 4(SP) ;COPY APR5 BIAS+ MOV 6(SP),KISAR5 ;MAP ROUTINE TO BE CALLED & MOV 2(SP), 6(SP) ;COPY RETURN ADDRESS .IF DF K$$DAS. MOV KINAR5,2(SP) ;FOR I/D SYSTEMS SAVE KINAR5# MOV KISAR5, KINAR5 ;AND MAP KINAR5M .IFF ; DF K$$DASR* MOV (SP)+, (SP) ;MOVE ADDRESS OF ROUTINE .IFTF* CALL @(SP)+ ;TRANSFER CONTROL TO PROCESS .IFT ;DF K$$DAS" MOV (SP)+,KINAR5 ;RESTORE MAPPING .ENDC ; DF K$$DAS" MOV (SP)+,KISAR5 ;RESTORE MAPPING* RETURN ;TRANSFER CONTROL BACK TO CALLER;+&; **-$FNCLI-FIND CPB FOR SPECIFIED CLI;R4; THIS ROUTINE LOCATES THE CPB FOR THE SPECIFIED CLI;U ; INPUTS:;.(; R3=ADDRESS OF CLI NAME STORED IN RAD50;S ; OUTPUTS:;5; C=1 CLI DOES NOT EXIST; C=0 CLI SUCCESSFULLY FOUND'; R1=OFFSET TO ENTRY FOR CLI IN $CPTBLF; R4=CPB ADDRESS;C3; REGISTERS R0, R2 AND R3 ARE PRESERVED ACROSS CALL ;D;- .IF DF A$$CLIF$FNCLI::MOV #$NMCLI!40000,-(SP) ;GET NUMBER OF CLIS SYSTEM CAN SUPPORT% CLR R1 ;START AT BEGINNING OF TABLET)10$: MOV $CPTBL(R1),R4 ;POINT TO NEXT CPBS BEQ 20$ ;IF EQ, EMPTY SLOT% CMP C.PNAM(R4),(R3) ;IS THIS THE CLII BNE 20$ ;IF NE NO CMP C.PNAM+2(R4),2(R3) ;MAYBE BEQ 30$ ;IF EQ YES220$: TST (R1)+ ;SET OFFSET FOR NEXT SLOT IN TABLE! DECB (SP) ;IS THERE A SLOT LEFTO BGT 10$ ;IF GT YES, ASL (SP) ;PUT BIT IN POSITION TO SET CARRY430$: ASL (SP)+ ;POP STACK AND SET APPROPRIATE CARRY RETURN: .IFF ;A$$CLI,>$FNCLI::MOV #$MCRPT,R4 ;POINT TO MCR'S CPB, ONLY ONE IN SYSTEM( CLR R1 ;OFFSET TO MCR'S SLOT IN $CPTBL% CMP C.PNAM(R4),(R3) ;LOOKING FOR MCR  BNE 10$ ;IF NE NOA TST 2(R3) ;MATCH MUST BE EXACT BEQ 20$ ;IF EQ, OK10$: SEC ;NOT LOOKING FOR MCR3 20$: RETURNS#$STCLI==-1 ;DEFINE SYMBOL FOR MCRS;+; **-$STCLI-SET CLII;H?; THIS ENTRY POINT EXISTS SO ROUTINES OUTSIDE THE EXECUTIVE CANSA; CALL THE ROUTINE TO SET A TERMINALS CLI ON SYSTEMS THAT SUPPORTC?; THE DIRECTIVE COMMON. THE ROUTINE ITSELF RESIDES IN THE DRCLI &; MODULE. CHECK THERE FOR ALL DETAILS.;;;- .IFT ;A$$CLII .IF DF D$$PAR=$STCLI::MOV #$STCL1,-(SP) ;GET ADDRESS OF ALT ENTRY IN COMMONM;HA; R3 POINTS TO THE NAME OF THE CLI THAT THE TERMINAL IS TO BE SETCB; TO. IF A TASK IS CALLING $STCLI, THE NAME COULD BE IN TASK SPACE<; THAT WILL BE UNMAPPED WHEN THE DIRECTIVE COMMON IS MAPPED.00okkfA; THEREFORE, $FNCLI MUST BE CALLED BEFORE THE MAPPING IS CHANGED. 9; NOTE: $MPCM2 MUST PRESERVE ALL REGISTERS AND THE C BIT.N;T% CALL $FNCLI ;FIND THE SPECIFIED CLIH# CALL $MPDC2 ;MAP AND CALL ROUTINE RETURN ;I .ENDC ;D$$PAR .ENDC ;A$$CLI;+/; **-$SNCMD-SEND NEXT COMMAND TO CLI DISPATCHER3;I>; THIS ROUTINE IS CALLED UPON COMPLETION OF THE EXECUTION OF AA; CLI COMMAND, WHEN THE TI: TERMINAL HAS SERIAL COMMAND EXECUTIONH?; ENABLED. IT CALLS THE TTDRV AT THE APPROPRIATE ENTRY POINT TOFD; CAUSE IT TO FIND THE NEXT COMMAND IN THE TYPEAHEAD BUFFER AND SEND"; IT TO MCR... TO START EXECUTION.;E ; INPUTS:T;C ; R0=UCB ADDRESS OF TI: TERMINAL; ; OUTPUTS:;M; NONE; ;-$SNCMD::1 .IF NDF R$$PRO ;NO SERIAL COMMAND MORE FOR P/OS/ BIT #DV.PSE,U.CW1(R0) ;IS TI: A PSEUDO DEVICE?I BNE 10$ ;IF NE, EXIT8 BIT #UM.SER,U.MUP(R0) ;TERMINAL IN SERIAL COMMAND MODE? BEQ 10$ ;IF EQ NOH MOV (R0),R2 ;POINT TO DCB' MOV KINAR5,-(SP) ;SAVE CURRENT MAPPINGO MOV KINAR6,-(SP) ;... .IF DF K$$DAS* MOV KDSAR5,-(SP) ;SAVE DATA SPACE MAPPING MOV KDSAR6,-(SP) ;... .IFTF) MOV D.PCB(R2),R3 ;POINT TO PCB FOR TTDRV ! MOV P.REL(R3),KINAR5 ;MAP DRIVER  .IFT, MOV P.REL(R3),KDSAR5 ;MAP DRIVER IN D SPACE .IFTF* MOV D.DSP(R2),R2 ;POINT TO DISPATCH TABLE2 CALL @D.VNXC(R2) ;CALL TTDRV TO SEND NEXT COMMAND .IFTR- MOV (SP)+,KDSAR6 ;RESTORE DATA SPACE MAPPINGI- MOV (SP)+,KDSAR5 ;RESTORE DATA SPACE MAPPINGN .ENDC4 MOV (SP)+,KINAR6 ;RESTORE INSTRUCTION SPACE MAPPING4 MOV (SP)+,KINAR5 ;RESTORE INSTRUCTION SPACE MAPPING .ENDC ;R$$PRO 10$: RETURNF@; THIS MODULE CONTAINS ROUTINES WHICH MUST BE REMOVED FROM OTHERA; DIRECTIVE MODULES SINCE THEY CAN NOT BE PLACED IN THE DIRECTIVES; COMMON .IF DF G$$GEF;+C; **-$ELGEF-SUBROUTINE TO ELIMINATE A GROUP GLOBAL EVENT FLAG BLOCKC;AI; THIS SUBROUTINE UNCONDITIONALLY UNLINKS A GROUP GLOBAL EVENT FLAG BLOCKK; AND DEALLOCATES IT.C;A ; INPUTS:.;C9; R0=ADDRESS OF BLOCK POINTING TO BLOCK TO BE DEALLOCATED&; R1=ADDRESS OF BLOCK TO BE ELIMINATED;E ; OUTPUTS:;N; NONE.O;-'$ELGEF::MOV (R1),(R0) ;UNLINK THE BLOCKI+ MOV R1,R0 ;SET UP TO DEALLOCATE THE BLOCKT MOV #10.,R1 ; $ CALLR $DEACB ;DEALLOCATE THE BLOCK;+-; **-$DEAGF-DEACCESS GROUP GLOBAL EVENT FLAGSU;UG; THIS ROUTINE DETERMINES IF GROUP GLOBAL EVENT FLAGS EXIST FOR A TASK. +; IF THEY DO, THE ACCESS COUNT IN THE GROUPFE; GLOBAL EVENT FLAG BLOCK IS DECREMENTED AND THE BLOCK IS DEALLOCATED ; IF IT IS MARKED FOR DELETE.E;O ; INPUTS:1;D; R3=EVENT FLAG MASK ADDRESS; R4=TASK HEADER ADDRESS; R5=TASK TCB ADDRESS.;) ; OUTPUTS:;H; NONE.;V;-,$DEAGF::SAVNR ;SAVE NON-VOLATILE REGISTERS' MOVB H.CUIC+1(R4),R4 ;GET GROUP NUMBERO2 CALL $SRGEF ;SEARCH FOR GROUP GLOBAL EVENT FLAGS BCS 10$ ;IF CS NOT FOUND2 BIC #1,R3 ;CLEAR GROUP GLOBAL 2ND WORD INDICATOR& CMP R3,R1 ;GROUP GLOBAL EVENT FLAG ? BLO 10$ ;IF LO NOE, SUB #G.LGTH,R3 ;POINT TO BEGINNING OF BLOCK& CMP R3,R1 ;GROUP GLOBAL EVENT FLAG ? BHIS 10$ ;IF HIS NOD3 DECB T.GGF(R5) ;DECR GRP GLOBAL USE COUNT FOR TASKE& DEC G.CNT(R1) ;DECREMENT ACCESS COUNT* BNE 10$ ;IF NE CAN'T ELIMINATE FLAGS YET- BITB #GS.DEL,G.STAT(R1) ;MARKED FOR DELETE ?)- BNE $ELGEF ;IF NE YES, ELIMINATE FLAG GROUPO10$: RETURN ;E .ENDC ; DF G$$GEF;+7;**-$CLEDI-CALL USERS ENABLE DISABLE INTERRUPTS ROUTINER;CB; THIS ROUTINE IS CALLED FROM THE CINT$ DIRECTIVE TO MAP THE USERS0; ENABLE/DISABLE INTERRUPTS ROUTINE AND CALL IT.;O ; INPUTS:V; ; R1=ITB ADDRESS; C=0 TO ENABLE INTERRUPTS; C=1 TO DISABLE;E ; OUTPUTS:;E; NONE.C;-9$CLEDR::MOV X.DSI(R1),R2 ; GET ADDRESS OF USER ROUTINE TOF ; ENABLE/DISABLE INTERRUPTS) BEQ 10$ ; NONE - EXITB0 MOV KINAR5,-(SP) ; SAVE CURRENT MAPPING OF APR53 MOV X.REL(R1),KINAR5 ; MAP ROUTINE IN KERNEL APR 5I L .IF DF K$$DAS B* MOV KDSAR5,-(SP) ; SAVE D SPACE APR 5 TOO3 MOV X.REL(R1),KDSAR5 ; MAP IN DATA SPACE APR 5 TOO  B .ENDC I$ CALL @R2 ; CALL ROUTINE AND RETURN 00okvkcDATADATADATADATADATADATADATA; R1 = POINTER TO ITBE$ ; CC-C = 0 TO ENABLE INTERRUPTS,$ ; = 1 TO DISABLE INTERRUPTS .IF DF K$$DAS1 MOV (SP)+,KDSAR5 ; RESTORE D SPACE APR 5 MAPPING  .ENDC ; DF K$$DAS( MOV (SP)+,KINAR5 ; RESTORE APR5 MAPPING10$: RETURN ; EXIT;+;**-$DRGLI-GET LUN INFORMANTIONR;**-$DRGIN-GET INFORMATION;**-$DREXP-EXTEND PARTITION;**-$DRGCL-GET COMMAND LINEA;AM; THESE ARE THE TRANSFER STUBS TO MAP THE VECTOR COMMON FOR THESE DIRECTIVES.#; TWO THINGS ARE IMPORTANT TO NOTE:; @; 1) THE DRTBL TABLES MARK THE DIRECTIVES AS BEING IN THE SECONDA; COMMON SO THAT SAVE AND RESTORE OF THE FIRST COMMONS MAPPINGS?; OCCURS (OTHERWISE RETURN TO THE DISPATHCER IS IMPOSSIBLE).V;P@; 2) SINCE THESE STUB ROUTINES USE R1, ALL THE DIRECTIVES IN THE.; VETOR COMMON MUST NOT USE R1 AS AN INPUT.;- .ENABL LSBE4$DREXP::MOV #$DRXP1,R1 ; GET ADDRESS OF REAL ROUTINE BR 10$ ; FINISH IN COMMON CODE4$DRGCL::MOV #$DRGC1,R1 ; GET ADDRESS OF REAL ROUTINE BR 10$ ; FINISH IN COMMON CODE4$DRGIN::MOV #$DRGN1,R1 ; GET ADDRESS OF REAL ROUTINE BR 10$ ; FINISH IN COMMON CODE4$DRGLI::MOV #$DRGL1,R1 ; GET ADDRESS OF REAL ROUTINE BR 10$ ; FINISH IN COMMON CODE810$: MOV $DRAPV,KINAR5 ; MAP TO VECTOR COMMON IN I SPACE .IF DF K$$DAS4 MOV $DRAPV,KDSAR5 ; MAP TO VECTOR COMMON IN D SPACE .ENDC ; DF K$$DAS" JMP (R1) ; TO PROCESSING ROUTINE .DSABL LSB;+.;**-$DRLOG-LOGICAL NAME TRANSLATION DIRECTIVES;1>; THIS ENTRY POINT MAPS THE FOURHT COMMON AND TRANSFERS TO THEG; LOGICAL NAME ROUTINES. SEE MODULE DRLOG FOR DETAILS ON THE OPERATION.S;N;-$DRLOG:: .IF DF L$$GCL!N$$DIRG .IF DF D$$PAR/ MOV $DRAP3,KINAR5 ; MAP THIRD COMMON (I-SPACE)M .IF DF K$$DAS/ MOV $DRAP3,KDSAR5 ; MAP THIRD COMMON (D-SPACE) .ENDC ; DF K$$DAS .ENDC ; DF D$$PAR$ JMP $DRLG1 ; JUMP TO VECTOR COMMON .ENDC ; DF L$$GCL!N$$DIRE .IF DF L$$GCL .ENABL LSBG;+G;**-$DELO1-ROUTINE STUB FILE FOR FOURTH DIRECTIVE COMMON ROUTINE $DELOGC;O>; THIS ENTRY POINT MAPS THE FOURTH COMMON AND TRANSFERS TO THE; ROUTINE $DELOG. ;E;- .IFTF ; DF L$$GCL$DELO1:: .IFT ; DF L$$GCL8 MOV #$DELOG,-(SP) ;GET ADDRESS OF ROUTINE IN 4TH DIRCOM BR 10$ ;JOIN COMMON CODE;+G;**-$CRLO1-ROUTINE STUB FILE FOR FOURTH DIRECTIVE COMMON ROUTINE $CRLOGC;D>; THIS ENTRY POINT MAPS THE FOURTH COMMON AND TRANSFERS TO THE; ROUTINE $CRLOG..;D;- .IFTF ; DF L$$GCL$CRLO1:: .IFT ; DF L$$GCLE> MOV #$CRLOG,-(SP) ;GET ADDRESS OF ROUTINE IN DIRECTIVE COMMON BR 10$ ;JUMP TO COMMON CODER;+G;**-$LNTD1-ROUTINE STUB FILE FOR FOURTH DIRECTIVE COMMON ROUTINE $LNTDR.; >; THIS ENTRY POINT MAPS THE FOURTH COMMON AND TRANSFERS TO THE; ROUTINE $LNTDR.;;N;- .IFTF ; DF L$$GCL$LNTD1:: .IFT ; DF L$$GCLT> MOV #$LNTDR,-(SP) ;GET ADDRESS OF ROUTINE IN DIRECTIVE COMMON BR 10$ ;JOIN COMMON CODE;+G;**-$RLRLN-ROUTINE STUB FILE FOR FOURTH DIRECTIVE COMMON ROUTINE $LNTDR ;L>; THIS ENTRY POINT MAPS THE FOURTH COMMON AND TRANSFERS TO THE; ROUTINE $RLRL1;U;- .IFTF ; DF L$$GCL$RLRLN:: .IFT ; DF L$$GCLR> MOV #$RTRL1,-(SP) ;GET ADDRESS OF ROUTINE IN DIRECTIVE COMMON BR 10$ ;JOIN COMMON CODE;+K; $TBTRN - ROUTINE TO TRANSLATE THE LOGICAL TABLE NUMBER INTO AN HASH TABLE 3; OFFSET AND THEN MAP THE HASH TABLE THROUGH KISAR6I;I ; INPUTS: ; R3 - TABLE NUMBERN ; OUTPUTS:; CC - SUCCESS:N3; KISAR6 - CONTAINS MAPPING TO START OF HASH TABLEE$; CS - NO HASH TABLE VALUE AVAILABLE; "; R3, KISAR6 ARE DESTROYED BY CALL;OD; THIS ROUTINE TAKES THE SPECIFIED LOGICAL TABLE NUMBER AND TURNS ITF; INTO A WORD OFFSET INTO THE HIERARCHY TABLE IN SYSCM. THE HIERARCHYG; TABLE CONTAINS THE SECONDARY POOL POINTERS TO EACH OF THE HASH TABLESOF; IN AN ORDERED, PRECEDENCE-DERIVED SEQUENCE. SINCE THE TABLE NUMBERSE; NO LONGER HAVE ANY PRETENSE OF PRECEDENCE ORDERING, IT IS NECESSARYE; TO HASH THE VALUES INTO THE CORRECT WORD OFFSET. FROM THIS OFFSET,B; THE APR BIAS OF THE HASH TABLE IS PLACED INTO KISAR6 SO THAT ANYB; 140000-14000okkf100 KERNEL DATA REFERENCES WILL ACCESS THE HASH TABLE.;- .IFTF ;DF L$$GCLA$TBTRN:: .IFT ;DF L$$GCL MOV #$TBTRL,-(SP) BR 10$;+G;**-$LDEL1-ROUTINE STUB FILE FOR FOURTH DIRECTIVE COMMON ROUTINE $LDELXA;R>; THIS ENTRY POINT MAPS THE FOURTH COMMON AND TRANSFERS TO THE; ROUTINE $LDELX. ;E;- .IFTF ; DF L$$GCL$LDEL1:: .IFT ; DF L$$GCLH5 MOV #$LDELX,-(SP) ; SET ADDRESS TO DIRECTIVE ROUTINE?10$: CALL $MPDC3 ; MAP THE ROUTINE IN THE 3RD DIRECTIVE COMMONY .IFF ; DF L$$GCLN SEC .IFTF ; DF L$$GCL RETURNA .DSABL LSBF .ENDC ; DF L$$GCL .IF DF P$$3XX;+8; $FLIPM -- THIS ROUTINE COPIES A BUFFER AND INVERTS IT.;I ; INPUTS:T5; R0 = APR 5 ADDRESS OF LAST WD. +2 OF SOURCE BUFFERI; R1 = BIAS OF SOURCE BUFFERR#; R2 = NUMBER OF WORDS TO TRANSFERE*; R3 = APR6 ADDRESS OF TARGET USER BUFFER; ; OUTPUTS:;M; BUFFER IS TRANSFERRED; APR5 BIAS IS NOT RESTORED;-$FLIPM::1 MOV R1,KISAR5 ;SET UP APR5 BIAS OF SOURCE BUFFER!10$: MOV -(R0),(R3)+ ;MOVE A WORDF SOB R2,10$ ;LOOP TILL DONE RETURNS .ENDC ; DF P$$3XX .MCALL LNMDF$ LNMDF$I MAP5 = 120000 MAP6 = 140000 .IF DF N$$DIRI;+,; $DLCTX -- DELETE A SPECIFIED CONTEXT BLOCK; ; INPUT:1; R1 = ADDRESS OF THE CONTEXT BLOCK TO BE DELETEDR; ; OUTPUT:A9; USE COUNT IN CONTEXT BLOCK IS DECREMENTED. IF CONTEXT U:; BLOCK IS NOT USE BY SOMEONE ELSE, THE SPECIFIED CONTEXT ; BLOCK IS DELETED;MA; ***** NOTE: IT IS THE RESPONSIBILTY OF THE CALLER TO ZERO THE 3; POINTER TO THE CTX.;0;;; REGISTER R1 DESTROYED.;.; -; .IFTF ;DF N$$DIR$DLCTX::  .IFTF MOV R0,-(SP) ;SAVE R0 ( MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING" MOV R1,KISAR6 ;MAP OLD CTX BLOCK) BEQ 20$ ;IF EQ, NO BLOCK TO DEALLOCATEX) CMPB #1,C.REF+MAP6 ;ONLY ONE REFERENCE?S! BEQ 10$ ;YES, DEALLOCATE BLOCKN& DECB C.REF+MAP6 ;DECREMENT USE COUNT BR 20$ ;E(10$: MOV R1,R0 ;OLD CONTEXT BLOCK BIAS CLR R1 ; & BISB C.DDSL+MAP6,R1 ;GET SIZE OF DDS2 ADD #C.FIXL+77,R1 ;GET FIXED LENGTH PLUS MODULOS& ASH #-6,R1 ;CONVERT INTO 32W BLOCKS MOV R2,-(SP) ;SAVE R2:! CALL $DESEC ;DEALLOCATE PACKETE MOV (SP)+,R2 ;RESTORE R2'20$: MOV (SP)+,KISAR6 ;RESTORE MAPPINGO MOV (SP)+,R0 ;RESTORE R0 RETURNL;+,; $CRCTX -- CREATE A SPECIFIED CONTEXT BLOCK;R%; R0 = SIZE OF USER BUFFER (IN BYTES)C; R1 = BIAS OF USER BUFFER'; R2 = APR5 DISPLACEMENT TO USER BUFFERR;0 ; OUTPUT:T; $; R3 = ADDRESS OF NEW CONTEXT BLOCK;P; -  .IFTF ;DF N$$DIRD$CRCTX::  .IFT ;DF N$$DIR S( MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING! MOV R2,-(SP) ;SAVE DISPLACEMENTC MOV R1,-(SP) ;SAVE BIASC MOV R0,-(SP) ;SAVE DDS SIZE2! MOV R0,R1 ;GET SIZE OF NEW DDSA- ADD #C.FIXL+77,R1 ;ADD FIXED SIZE + MODULUS ASH #-6,R1 ;CONVERT TO BLOCKS* CALL $ALSEC ;ALLOCATE BLOCK FOR DDS LNB% BCS 50$ ;IF CS, ALLOCATION FAILUREF0 MOV R0,R3 ;SET UP SEC. POOL BLK BIAS FOR COPY MOV R3,KISAR6 ;MAP BLOCK' CLRB C.REF+MAP6 ;ZERO REFERENCE COUNTF3 MOV (SP)+,R0 ;SET UP BYTE COUNT OF STRING TO COPY# MOVB R0,C.DDSL+MAP6 ;FILL IN SIZEI" BEQ 10$ ;IF EQ, ZERO LENGTH DDS- MOVB #1,C.REF+MAP6 ;FILL IN REFERENCE COUNT; MOV (SP)+,R1 ;SET UP BIAS;# MOV (SP)+,R2 ;SET UP DISPLACEMENT,; MOV #C.DDS+MAP6,R4 ;SETUP DISPLACEMENT TO STRING IN BLOCKC CALL $BLXIO ;COPY DDS BR 20$ ;D"10$: CMP (SP)+,(SP)+ ;CLEAN STACK'20$: MOV (SP)+,KISAR6 ;RESTORE MAPPINGL CLC ;INDICATE SUCCESS, RETURN ;"50$: CMP (SP)+,(SP)+ ;CLEAN STACK MOV (SP)+,R2 ;RESTORE R2# MOV (SP)+,KISAR6 ;RESTORE MAPPINGM .IFTF ;DF N$$DIRF SEC ;INDICATE FAILUREE RETURN ; S .ENDC ;DF N$$DIRP .IF DF L$$GCL;+C; $CMPST -- THIS ROUTINE IS USED TO COMPARE A USER SPECIFIED STRING,4; AGAINST A CURRENTLY MAPPED LOGICAL NAME BLOCK.;L ; INPUTS: /; R0 - POINTER TO LOGICAL NAME DESCRIPTOR BLOCK(; BLOCK CONTAINS:%; WD 1 - BYTE COUNT OF LOGICAL NAMEL.; WD 2 - 32 WD BLOCK ADDRESS OF LOGICAL NAME6; WD 3 - APR6 BIASED OFFSET TO START OF LOGICAL NAME,00okvkcDATADATADATADATADATADATADATA; WD 4 - TABLE # TO BE SEARCHED (LOW BYTE)(; BLOCK TYPE NUMBER (HIGH BYTE)9; WD 5 - MATCHING TCB OR UCB DEPENDING ON TYPE OF TABLE$;L;; THE LOGICAL NAME STRING TO BE COMPARED AGAINST IS MAPPEDE<; THROUGH APR6. THIS ROUTINE IS ONLY TO BE USED WHEN IT IS>; KNOWN THAT THE LENGTHS OF THE TWO STRINGS TO BE CHECKED ARE ; THE SAME.;K ; OUTPUT:; ; C=0 AND R1 = 0 MATCHC(; C=0 AND R1 <>0 NO MATCH BUT TRY NEXT.; C=1 NO MATCH AND EITHER INSERT ON PREVIOUS; OR STOP ANY FURTHER SEARCH-;B; R2,R3 ARE PRESERVED;T;-4$CMPST::MOV KISAR5,-(SP) ;SAVE CURRENT APR5 MAPPING MOV R2,-(SP) ;SAVE R2I MOV R3,-(SP) ;SAVE R3/ MOV (R0),R1 ;GET LENGTH OF STRINGS TO VERIFY . MOV 4(R0),R3 ;GET APR6 OFFSET TO USER BUFFER MOV 2(R0),KISAR5 ;MAP USER LNS, SUB #20000,R3 ;REDUCE IT TO AN APR5 OFFSET4 MOV #L.NNAM+140000,R2 ;POINT AT LOGICAL NAME STRING815$: CALL $CVBUC ;CONVERT NEXT USER CHAR TO UPPER CASE( CMPB R5,(R2)+ ;COMPARE THE TWO STRINGS1 BLO 30$ ;IF LO INPUT STRING SHOULD OCCUR FIRST31 BHI 30$ ;IF HI INPUT STRING SHOULD OCCUR LATERS$ SOB R1,15$ ;COMPARE ENTIRE STRING30$: MOV (SP)+,R3 ;RESTORE R3 MOV (SP)+,R2 ;RESTORE R2* MOV (SP)+,KISAR5 ;RESTORE KISAR5 MAPPING RETURN ;RETURN TO CALLER;+A; $CVBUC - ROUTINE TO CONVERT A SPECIFIED CHARACTER TO UPPER CASEF;T ; INPUTS:N7; R3 - POINTER TO NEXT CHARACTER TO DO TRANSLATION UPONB; ; OUTPUTS:.; R3 - POINTS TO BYTE PAST CHARACTER PROCESSED; R5 - UPCASED CHARACTER VALUE ;;-$CVBUC::' CLR R5 ;INITIALIZE THE RETURNED VALUEH BISB (R3)+,R5 ;GET THE VALUEE. CMPB R5,#141 ;CHARACTER IN LOWER CASE RANGE? BLO 10$ ;IF LO NO 3 CMPB R5,#172 ;CHARACTER OUTSIDE LOWER CASE RANGE?E BHI 10$ ;IF HI YES$ BICB #40,R5 ;CONVERT TO UPPER CASE 10$: RETURNR;+J; $GTUSR - ROUTINE TO TAKE A RAW UCB ADDRESS, WALK DOWN THE REDIRECT CHAINB; UNTIL A NON-PSEUDO DEVICE IS FOUND, AND THEN PLUG THE USER HASH =; TABLE ADDRESS WITH THE SECONDARY POOL VALUE FOR THAT DEVICET;V ; INPUTS:; R1 - RAW UCB ADDRESS;I ; OUTPUTS:B; R1 - UCB ADDRESS OF FIRST DEVICE IN REDIRECT CHAIN THAT IS NOT A; PSEUDO DEVICE;; $USRLG - UPDATED TO HOLD THE U.LOG VALUE OF THE FOUND UCB ;E;- .IFTF ;DF L$$GCL$$GTUSR::: BIT #DV.PSE,U.CW1(R1) ;CHECK IF SPECIFIED UCB IS A PSEUDO) BEQ 10$ ;IF EQ, NO, GO AND PLUG $USRLGD5 MOV U.RED(R1),R1 ;GET NEXT DEVICE IN REDIRECT CHAINO BR $GTUSR ;GO BACK FOR CHECKS10$: .IFT ;DF L$$GCL* CLR $USRLG ;INITIALIZE TO NO HASH TABLE .IFTF ;DF L$$GCL1 BIT #DV.TTY,U.CW1(R1) ;IS THIS DEVICE A TERMINALA* BEQ 20$ ;IF EQ, NO, LEAVE NO HASH TABLE .IFT ;DF L$$GCL9 MOV U.LOG(R1),$USRLG ;SET UP THE USER HASH TABLE ADDRESSO .IFTF ;DF L$$GCLF 20$: RETURN .ENDC ;DF L$$GCLU .IF DF D$$PAR;+; **-$DREIF-EXIT IF;QG; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TERMINATE THE EXECUTION OF THECA; ISSUING TASK IF, AND ONLY IF, AN INDICATED EVENT FLAG IS CLEAR. ; ; DPB FORMAT:$;L"; WD. 00 -- DIC(53.),DPB SIZE(2.).?; WD. 01 -- EVENT FLAG NUMBER OF EVENT FLAG THAT MUST BE CLEAR.R;A ; INPUTS:$;;; R0=EVENT FLAG MASK WORD.; R1=EVENT FLAG MASK ADDRESS.U9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.F+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.F/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.T,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;O5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)D;L-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. <; DIRECTIVE STATUS OF 'D.RS22' IS RETURNED IF THE SPECIFIED; EVENT FLAG IS SET.; C=1 IF DIRECTIVE IS REJECTED.9; DIRECTIVE STATUS OF 'D.RS97' IF NO OR AN INVALID EVENTF; FLAG NUMBER IS SPECIFIED.S;- .ENABL LSB '$DREIF::BIT R0,(R1) ;EVENT FLAG CLEAR?  BEQ $DREXT ;IF EQ YES2$ DRSTS D.RS22 ;SET DIRECTIVE STATUS;+; **-$DREXT-EXIT;SG; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TERMINATE THE EXECUTION OF THE ; ISSUING TASK.D;L ; DPB FORMAT:C;E"; WD. 00 -- DIC(51.),DPB SIZE(1.).;I ; INPUTS:F;.9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURR00okkfENT TASK.+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2.E/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;=; NOTE: THIS DIRECTIVE IS ALSO CALLED FROM THE DISPATCHER AND 7; THEREFORE ONLY REQUIRES R5 TO BE LOADED ON ENTRANCE.R;-=; PRIVILEGED TASKS WHICH DESIRE TO CALL $DREXT DIRECTLYE<; SHOULD SWITCH TO SYSTEM STATE AND IMMEDIATELY CALL $DREXT.; WITHOUT CALLING ANY OTHER EXEC SUBROUTINES..; THIS IS BECAUSE OF POSSIBLE SIDE EFFECTS OF(; OTHER EXEC ROUTINES (SUCH AS $TSKRP).;W0; BECAUSE MANY PRIVILEGED TASKS CALL $DREXT, WE3; WILL UNCONDITIONALLY MAP THE TASK HEADER SO THATR1; THIS CODE DOES NOT HAVE TO BE ADDED ELSEWHERE.E;R;T5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ;D@; NO STATUS IS RETURNED TO THE ISSUING TASK SINCE THIS DIRECTIVE; TERMINATES ITS EXECUTION. ;-$DREXT:: ;REFERENCE LABELE .IF DF X$$HDR+ MOV $SAHDB,KISAR6 ;MAP CURRENT TASK HEADER  .ENDC ; DF X$$HDR .IF DF P$$OFF* BIT #T3.ACP,T.ST3(R5) ;IS TASK AN ACP? BNE $DREX1 ;IF NE YES5 MOV #EX$SUC,T.EFLG+2(R5) ;SET SUCCESSFUL EXIT STATUSH@$DREX2::MOV #S.CEXT,T.EFLG(R5) ;SET SUCCESS CODE IN ABORT CODE .ENDC3$DREX1::MOV $DRAPR,KINAR5 ;MAP THE DIRECTIVE COMMONA) JMP $DREX3 ;AND GO THERE TO FINISH EXITI .PAGE;+; **-$TRTRP-TRAP TRAPT;IH; THIS ROUTINE IS TRAPPED TO WHEN A TRAP INSTRUCTION IS EXECUTED. IF THEF; STACK DEPTH IS ZERO, THEN A DIRECTIVE STATUS IS TO BE RETURNED. ELSE=; CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE.$;X ; INPUTS: ;Y+; 2(SP)=PS WORD PUSHED BY TRAP INSTRUCTION. +; 0(SP)=PC WORD PUSHED BY TRAP INSTRUCTION. ;E ; OUTPUTS:;IB; IF THE STACK DEPTH IS ZERO, THEN A DIRECTIVE STATUS IS RETURNED.B; ELSE CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE.;- .ENABL LSB-($TRTRP::TST $STKDP ;;;STACK DEPTH ZERO? BNE $EMTRP ;;;IF NE NO4 MOV (SP)+,R0 ;;;GET ADDRESS + 2 OF TRAP INSTRUCTION( MFPI -(R0) ;;;PICK UP TRAP INSTRUCTION7 MOV $DRAPR,KINAR5 ;;;MAP TO DIRECTIVE COMMON (I SPACE)$7 JMP $TRTR1 ;;;CONTINUE PROCESSING IN DIRECTIVE COMMONR;+; **-$EMTRP-EMT TRAP;DH; THIS ROUTINE IS TRAPPED TO WHEN AN EMT INSTRUCTION IS EXECUTED. IF THEC; STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED. ELSE A TEST IS D; MADE TO SEE IF THE EMT INSTRUCTION HAD A CODE OF 377. IF NOT, THENF; CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE. ELSE THE$; APPROPRIATE DIRECTIVE IS EXECUTED.;P ; INPUTS:;;K*; 2(SP)=PS WORD PUSHED BY EMT INSTRUCTION.*; 0(SP)=PC WORD PUSHED BY EMT INSTRUCTION.; ; OUTPUTS:;O@; IF THE STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED. ELSEE; CONTROL IS GIVEN TO THE EMT/TRAP SST ROUTINE OR A DIRECTIVE ROUTINE 1; DEPENDENT ON WHETHER THE EMT HAD A CODE OF 377.E;-;T>; DETERMINE IF LEGITIMATE ENTRY FROM USER STATE. IF NOT, CRASH;T0$EMTRP::TST $STKDP ;;;ARE WE AT STACK DEPTH +1? BGT 2$ ;;;IF GT YEST! JMP $CREMT ;;;ELSE CRASH SYSTEMU/2$: DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITYB5 MOV $DRAPR,KINAR5 ;MAP TO DIRECTIVE COMMON (I SPACE)U7 JMP $EMTR1 ;;;CONTINUE PROCESSING IN DIRECTIVE COMMON1>; ROUTINES USED BY DISPATCHER TO CALL OTHER COMMONS THAN FIRST/$DRCL2::MOV $DRAP2,KINAR5 ;MAP TO SECOND COMMONN .IF DF K$$DAS( MOV $DRAP2,KDSAR5 ;MAP IN D-SPACE ALSO  .ENDC ; DF K$$DAS CALL @2(SP) ;CALL ROUTINE/ MOV $DRAPR,KINAR5 ;REMAP DISPATCHER IN I-SPACEH MOV (SP)+,(SP) ;COLLAPSE STACKP! RETURN ;AND BACK TO DISPATCHER .$DRCL3::MOV $DRAP3,KINAR5 ;MAP TO THIRD COMMON CALL @2(SP) ;CALL ROUTINEI/ MOV $DRAPR,KINAR5 ;REMAP DISPATCHER IN I-SPACEO MOV (SP)+,(SP) ;COLLAPSE STACK ! RETURN ;AND BACK TO DISPATCHER 6$FINDR::MOV $DRAPR,KINAR5 ;REMAP DISPATCHER IN I-SPACE/ JMP $DRFIN ;AND JUMP TO DISPATCHER COMPLETION, .ENDC ; DF D$$PAR .END.ENDC ; DF K$$DAS CALL @2(SP) ;CALL ROUTINE/ MOV $DRAPR,KINAR5 ;REMAP DISPATCHER IN I-SPACEH MOV (SP)+,(SP) ;COLLAPSE STACKP! RETURN ;AND BACK TO DISPATCHER .$DRCL3::MOV $DRAP3,KINAR5 ;MAP TO THIRD COMMON C00kvkcDATADATADATADATADATADATADATA .TITLE DRSWS .IDENT /02.00/; ; COPYRIGHT (C) 1982, 1983, 1984/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;?; THIS SOFTWARE IS FURNISHED UNDER LICENSE AND MAY ONLY BE USED6; OR COPIED ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; J. M. LAWLER 03-DEC-82;G; THIS MODULE WAS ORIGINALLY WRITTEN FOR P/OS BY M.C. OZUR ON 21-DEC-81;; MODIFIED BY:;; MACRO LIBRARY CALLS; .MCALL HWDDF$,TCBDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS TCBDF$ ;DEFINE TCB OFFSETS;+; **-$DRSWS-SWITCH STATE 0;0D; THIS DIRECTIVE ALLOWS A PRIVILEGED TASK WHICH IS NOT MAPPED TO THEA; EXECUTIVE TO EXECUTE A SUBROUTINE IN SYSTEM STATE. THE USER ISN@; CALLED BACK ON THE SYSTEM STACK WITH ALL REGISTERS PRESERVED. >; TO RETURN TO TASK LEVEL THE CALLER MERELY EXECUTES A RETURN.; ; DPB FORMAT:T;F#; WD. 00 -- DIC(175.),DPB SIZE(3.).@; WD. 01 -- BASE ADDRESS FOR MAPPING USERS SYSTEM STATE ROUTINE.:; WD. 02 -- VIRTUAL ADDRESS OF USERS SYSTEM STATE ROUTINE.;N ; INPUTS:T;9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK.W); R3=ADDRESS OF USER BASE ADDRESS IN DPB.T/; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; 5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK)S;E-; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. &; DIRECTIVE STATUS OF +1 IS RETURNED.; C=1 IF DIRECTIVE IS REJECTED.A<; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF THE SPECIFIED; TASK IS NOT PRIVILEGED. :; DIRECTIVE STATUS OF 'D.RS81' IS RETURNED IF THE VIRTUAL4; ADDRESS OF SYSTEM STATE SUBROUTINE IS NOT WITHIN; 4KW OF BASE ADDRESS;4;- .IF DF S$$WST .ENABL LSB 0$DRSWS::TST (SP)+ ;REMOVE RETURN ADDR TO DRDSP , BIT #T3.PRV,T.ST3(R5) ;IS TASK PRIVILEGED ? BEQ 10$ ;IF EQ, NO& MTPD$ @#H.DSW ;RETURN SUCCESSFUL DSW MOV (R3)+,R0 ;GET BASE ADDRESSS5 MOV (R3)+,-(SP) ;GET ADDRESS OF SYSTEM STATE ROUTINEI. BIC #77,R0 ;CLEAR OUT BYTE WITHIN 32WD BLOCK .IF DF U$$DAS( CALL $RELUI ;RELOCATE TO APR 6 ADDRESS .IFF ; DF U$$DASE( CALL $RELOC ;RELOCATE TO APR 6 ADDRESS .ENDC ; DF U$$DAS ) SUB #20000,R2 ;RELOCATE TO APR 5 ADDRESST; SUB R0,(SP) ;GET DISPLACEMENT FROM BASE TO SYS STATE CODE 8 CMP (SP),#20000 ;TARGET SUBROUTINE WITHIN APR OF BASE ?+ BHIS 20$ ;IF GE, NO - ILLEGAL COMBINATIONC# ADD R2,(SP) ;MAKE APR 5 ADDRESSESD+ MOV R1,KINAR5 ;SET UP KERNEL INSTRUCTION 5E .IF DF K$$DAS B$ MOV R1,KDSAR5 ;SET UP KERNEL DATA 5 .ENDC ; DF K$$DAS5 MOV #$STACK-4,R0 ;POINT TO USER'S PC ON KERNEL STACKF MOV -(R0),R5 ;RESTORE USER'S R5 MOV -(R0),R4 ; R4 MOV -(R0),R3 ; R3 MOV -(R0),R2 ; R2 MOV -(R0),R1 ; R1 MOV -(R0),R0 ; R0<; COMPLETE DIRECTIVE PROCESSING FOR TASK. UPDATE USER SP TO<; REMOVE DPB OR ADDRESS OF DPB FROM THE STACK. A SUCCESSFUL,; DSW HAS ALREADY BEEN RETURNED TO THE USER.! MFPI SP ;GET USER STACK POINTERE. ADD $BTRMV,(SP) ;REMOVE BYTES FROM USER STACK% MTPI SP ;RESTORE USER STACK POINTERR, CLR $BTRMV ;ZERO 'BYTES TO REMOVE' IN CASE" ;PRIVILEGED TASK ISSUES A TRAPA; THE USER IS CALLED BACK WITH THE SAME STACK FORMAT AS A CALL TOV5; $SWSTK. THE STACK WAS ADJUSTED TO REMOVE THE RETURN 5; ADDRESS TO THE DIRECTIVE DISPATCHER AND THE +1 DSW.D; ; 20(SP)=PS PUSHED BY TRAP; 16(SP)=PC PUSHED BY TRAP; 14(SP)=SAVED R5 ; 12(SP)=SAVED R4N; 10(SP)=SAVED R3E; 06(SP)=SAVED R2T; 04(SP)=SAVED R1E; 02(SP)=SAVED R0;!; 00(SP)=RETURN ADDRESS TO SYSXT ) CALLR @(SP)+ ;JUMP TO USER'S SUBROUTINE '10$: DRSTS D.RS16 ;PRIVILEGE VIOLATIONI-20$: DRSTS D.RS81 ;ILLEGAL MAPPING SPECIFIEDD .DSABL LSBS .ENDC ;DF S$$WST  .END; $SWSTK. THE STACK WAS ADJUSTED TO REMOVE THE RETURN 5; ADDRESS TO THE DIRECTIVE DISPATCHER AND THE +1 DSW.D; ; 20(SP)=PS PUSHED BY TRAP; 16(SP)=PC PUSHED BY TRAP; 14(SP)=SAVED R5 ; 12(SP)=SAVED R4N; 10(SP)=SAVED R3E; 06(SP)=SAVED R2T; 04(SP)=SAVED R1E; 02(SP)=SAVED R0;!; 00(SP)=RETURN ADDRESS TO SYSXT ) CALLR @(SP)+ ;JUMP TO USER'S S00ekkf .TITLE DRTBLR .IDENT /05.13/;C; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.Q;; COPYRIGHT (C) 1987, 1988 BY DIGITAL EQUIPMENT CORPORATIONE;U<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;;; B. S. MCCARTHY 17-MAR-81;W!; MODIFIED FOR RSX-11M-PLUS V2.1:D;S; J. R. KAUFFMAN; T. M. MARTIN; B. S. MCCARTHYC;S+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:T; ; J. W. BERZLE; J. R. KAUFFMAN; J. M. LAWLER; B. S. MCCARTHY;O+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:P;T; B. S. MCCARTHY ; K. L. NOEL;7+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:;H!; PAUL K. M. WEISS 14-OCT-87 5.13C;E7; PKW138 - ADD ELP TO DIRECTIVE DISPATCH TABLE FOR CPR ;M; DIRECTIVE DISPATCHER TABLE ;AB; THIS MODULE WAS SPLIT OUT OF DRTBL AND RESTRUCTURED TO ALLOW FORE; MORE DIRECTIVE FLAGS, STREAMLINE DIRECTIVE PROCESSING, AND TO ALLOWM2; THIS MODULE TO BE PLACED IN THE DIRECTIVE COMMON;F;N .PAGE;+.; DEFINE BITS FOR THE DIRECTIVE DISPATCH TABLE;-;SI; THE DIRECTIVE DISPATCHER BITS OCCUPY A WORD FLAG TABLE. THERE ARE THREEM.; GROUPS OF BITS, SHOWN WITH SUBOPTIONS BELOW:;CF; ACHKDB - ADDRESS CHECK AND MAP PLAS DEFINITION BLOCK. THE DPB IS TWO<; WORDS, THE SECOND OF WHICH IS THE ADDRESS OF A REGION OR;; WINDOW DEFINITION BLOCK, 8 WORDS LONG. THE STURCTURE ISE@; ADDRESS CHECKE AND MAPPED, AND IF VALID IS PASSED IN LIEU OF%; THE DPB TO THE DIRECTIVE ROUTINE.N;FE; CEFNCL - CALL $CEFN. THE DPB CONTAINS AN EVENT FLAG NUMBER WHICH IS); CONVERTED TO A MASK WORD AND ADDRESS.Y;WE; CEFNMT - AN ERROR OF D.RS97 IS RETURNED IF THE EFN IN THE DPB ISN&; NULL (NO EVENT FLAG SPECIFIED).;DA; GEFUSE - IF THE SPECIFIED EVENT FLAG IS GROUP GLOBAL, DO NOTF; INCREMENT THE USE COUNT. ;D; SRSTCL - DIRECTIVE DEALS WITH A TCB, DPB CONTAINS NAME. DISPATCHER=; CALLS $SRSTD (OR SIMILAR) AND RETURNS ERROR D.RS2 IF TASKH*; SPECIFIED IN THE DPB IS NOT INSTALLED.;-D; DFCTSK - IF THE TASK NAME IN THE DPB IS NULL (BINARY ZERO), THE; CURRENT TASK IS USED.E; MUPCHK - MULTI-USER PROTECTION CHECKS. THE TARGET TASK MUST HAVEE<; THE SAME TI: AS THE ISSUING TASK, OR THE ISSUING TASK; MUST BE PRIVILEGEDTF; CRETCB - IPLIES THAT THE DIRECTIVE MAY CREATE A TCB FROM A PROTO-=; TYPE, AND THEREFORE SUPPRESSES THE SEARCH FOR A MULTI-H9; USER COPY OF THE TASK FROM THIS TERMINAL. (IMPLIESF; SECTCB)A; SECTCB - THIS DIRECTIVE MAY DEAL WITH TCBS IN SECONDARY POOLA;I@; ANY SUB-FUNCTION BIT IMPLIES THE MAJOR FUNCTION BIT. THE THREE); MAJOR FUNCTIONS ARE MUTUALLY EXCLUSIVE.S;H>; THE POSITION OF THE BITS WITHIN THE FLAGS WORD IS AS FOLLOWS;OA; 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0SD; +---+---+----+---+---+---+---+---+---+---+---+---+---+---+---+---+D; | | | | | | | | | | | | | | | | |D; | A | S | DC | M | | | C | G | S | C | | | | | | |D; | C | E | FR | U | | | E | E | R | E | | | | | | |D; | H | C | CE | P | | | F | F | S | F | | | | | | |D; | K | T | TT | C | | | N | U | T | N | | | | | | |D; | D | C | SC | H | | | M | S | C | C | | | | | | |D; | B | B | KB | K | | | T | E | L | L | | | | | | |D; | | | | | | | | | | | | | | | | |D; +---+---+----+---+---+---+---+---+---+---+---+---+---+---+---+---+; |;|); SPECIAL NOTE REGARDING PLAS DIRECTIVES:E;R>; ALL DIRECTIVES SPECIFYING "ACHKDB" MUST BE BUILT IN THE PLASD; DIRECTIVE COMMON (OR RESIDENT IN THE EXEC) SINCE THAT BIT TRIGGERSB; THE REMAPPING OF THE DIRECTIVE COMMON. THESE DIRECTIVES MUST USE=; THE DIRP MACRO SO THAT THE ADDRESSES ARE STORED UNADJUSTED.| .PAGE ACHKDB = 100000 CEFNCL = 100 CEFNMT = 1000!CEFNCL| GEFUSE = 400!CEFNCL  SRSTCL = 200 SECTCB = 40000!SRSTCL+ DFCTSK = 20000!SRSTCL- CRETCB = 20000!SRSTCL!SECTCB MUPCH00ekvkcDATADATADATADATADATADATADATAK = 10000!SRSTCLA;+; LOCAL MACROS;-;T'; DEFINE DIRECTIVE DISPATCH TABLE ENTRY ; ; DIR ADDR,SIZE,MASK,COND,SCONDD; ; WHERE:;S?; ADDR=ADDRESS OF THE DIRECTIVE EXECUTION ROUTINE OR '.FALSE.'.T9; SIZE=SIZE OF THE DPB REQUIRED BY THE DIRECTIVE ROUTINE.E;; MASK=CONTROL BITS TO BE USED BY THE DIRECTIVE DISPATCHER.C:; COND=EXPRESSION ON WHICH DIRECTIVE IS CONDITIONALIZED. A2; DEFAULT OF $DSTAB IS USED FOR CONVENIENCE (I.E.; UNCONDITIONAL).:; SCOND=CONDITIONAL EXPRESSION ON WHICH SIZE BYTE IS TO BE3; ZERO (VARIABLE-LENGTH DPB). A DEFAULT OF XXXXXXE2; IS USED FOR CONVENIENCE (I.E. SIZE IS NONZERO).;C .PAGE% .MACRO DIR ADDR,SIZE,MASK,COND,SCONDT .IF IDN ,<.FALSE.>E DIRC .FALSE.  T .IFFR# DIRC ADDR,0,SIZE,,COND,SCONDA .ENDC .ENDM DIR& .MACRO DIR2 ADDR SIZE,MASK,COND,SCOND( DIRC ADDR,100000,SIZE,,COND,SCOND .ENDM DIR2U& .MACRO DIRP ADDR SIZE,MASK,COND,SCOND& DIRC ADDR,REAL,SIZE,,COND,SCOND .ENDM DIRPH .PAGE8 .MACRO DIRC ADDR,COM,SIZE,MASK,COND=$DSTAB,SCOND=XXXXXX .IF EQ PASS-1 .BLKW 3 .IF DIF ,<.FALSE.>O .IF DF COND HI$DIC==<<.-$DSTAB>/6>-1, .GLOBL ADDR .ENDC ; DF COND .ENDC ; DIF ,<.FALSE.>E .IFF ; EQ PASS-1R .IF GT TB$SIZ-<.-$DSTAB>C .WORD 0$$$=. .=.+TB$SIZ-2. .WORD 0 .=.+TB$SIZ-2, .WORD 0 .=$$$ .IF DIF ,<.FALSE.>D .IF DF CONDDSPMK=0 .IF NB  .IRP X, DSPMK=DSPMK!XR .ENDM .ENDC ;NB D .IF DF SCONDMDSPSZ=0 .IFFE DSPSZ=SIZE*2 .ENDC ; DF SCOND,HI$DIC==<<.-$DSTAB>/2>-1.=.-2  .IF GT 28.-DSPSZ. .BYTE DSPSZ,-<2*DSPSZ> .IFF  .BYTE DSPSZ,0 .ENDC ; GT 28.-DSPSZB .=.+TB$SIZ-2D .IF DIF ,R .WORD <&77777>!COM- .IFF ; DIF , .WORD ADDR$ .ENDC ; DIF ,0 .=.+TB$SIZ-2 .WORD DSPMK .=$$$ .ENDC ; DF COND .ENDC ; DIF ADDR,<.FALSE.> .ENDC ; GT TB$SIZ-<.-$DSTAB> .ENDC ; EQ PASS-1 .ENDM .PAGE;+-; DEFINE SYMBOL INDICATING WHICH PASS THIS IS;- .IF NDF PASS PASS = 1- .IFF/ PASS = 2  .ENDC;+; DIRECTIVE DISPATCH TABLE;-+$DSTAB::DIR2 $DRQIO,12. ;001.-QUEUE I/OB- DIR2 $DRQIO,12. ;003.-QUEUE I/O AND WAIT6 DIR2 $DRGLI, G$$DVI ;005.-GET LUN ASSIGNMENT AND ; GET DEVICE INFORMATION$ DIR $DRASG, 4. ;007.-ASSIGN LUN. DIR $DRATP, 4.,DFCTSK ;009.-ALTER PRIORITY4 DIR2 $DRREQ, 7.,CRETCB,,P$$OFF ;011.-REQUEST/SPAWN# DIR .FALSE. ;013.-INVALID DIC+# DIR .FALSE. ;015.-INVALID DICS) DIR $DRRUN,11.,SRSTCL ;017.-RUN TASK-# DIR .FALSE. ;019.-INVALID DIC 1 DIR2 $DRRRA, 2., ,P$$LAS ;021.-REC BY REF AST,* DIR $DRMKT, 5.,CEFNCL ;023.-MARK TIME8 DIR $DRCSR, 3.,MUPCHK ;025.-CANCEL SCHEDULE REQUESTS5 DIR $DRCMS, 0. ;027.-CANCEL SELECTIVE MARK TIMESA3 DIR2 $DREXS, 2., ,P$$OFF ;029.-EXIT WITH STATUST6 DIR $DRCEF, 2., ;031.-CLEAR EVENT FLAG4 DIR $DRSEF, 2., ;033.-SET EVENT FLAG3 DIR $DRDSE, 1. ;035.-DECLARE SIGNIFICANT EVENTI5 DIR $DRREF, 2., ;037.-READ EVENT FLAGA8 DIR $DRRAF, 0. ;039.-READ ALL(EXTENDED) EVENT FLAGS6 DIR $DRWFS, 2.,CEFNMT ;041.-WFR SINGLE EVENT FLAG/ DIR $DRWFL, 3. ;043.-WAITFOR LOGICAL OR OFL ; EVENT FLAGSR+ DIR $DRSPN, 1. ;045.-SUSPEND EXECUTIONA6 DIR $DRRES, 3.,DFCTSK ;047.-RESUME TASK EXECUTION3 DIR $DRWSE, 1. ;049.-WAITFOR SIGNIFICANT EVENTG# DIR $DREXT, 1. ;051.-TASK EXIT3- DIR $DREIF, 2., ;053.-EXIT IFL4 DIRP $DRCRR, 2.,ACHKDB,P$$LAS ;055.-CREATE REGION4 DIRP $DRATR, 2.,ACHKDB,P$$LAS ;057.-ATTACH REGION4 DIRP $DRDTR, 2.,ACHKDB,P$$LAS ;059.-DETACH REGION- DIR $DRGTP, 0. ;061.-GET TIME PARAMETERS - DIR $DRGTK, 2. ;063.-GET TASK PARAMETERS 2 DIR $DRGPP, 4. ;065.-GET PARTITION PARAMETERS# DIR .FALSE. ;067.-INVALID DIC47 DIR $DRSRF, 5.,SECTCB,P$$LAS ;069.-SEND BY REFERENCEO .IF DF P$$OOL> DIR $DRSND, 0.,SECTCB ;071.-SEND (AND VARIABLE SEND) DATA .IFF32 DIR $DRSND, 5.,SR00ekkfSTCL ;071.-SEND DATA TO TASK .ENDC# DIR .FALSE. ;073.-INVALID DICA .IF DF P$$OOL/ DIR $DRREC, 0. ;075.-RECEIVE (AND VARIABLER ; REC) DATA 8 DIR $DRREC, 0. ;077.-REC (AND VAR REC) DATA OR EXIT .IFFD0 DIR $DRREC, 4. ;075.-RECEIVE DATA FROM TASK8 DIR $DRREC, 4. ;077.-RECEIVE DATA FROM TASK OR EXIT .ENDC# DIR .FALSE. ;079.-INVALID DICO7 DIRP $DRRRF, 2.,ACHKDB,P$$LAS ;081.-RCV BY REFERENCE + DIR $DRABO, 3.,MUPCHK ;083.-ABORT TASKL# DIR .FALSE. ;085.-INVALID DICC# DIR .FALSE. ;087.-INVALID DIC 3 DIR2 $DREXP, 3., ,E$$XPR ;089.-EXTEND PARTITION-# DIR .FALSE. ;091.-INVALID DIC # DIR .FALSE. ;093.-INVALID DIC-/ DIR $DRDCP, 1. ;095.-DISABLE CHECKPOINTING$. DIR $DRECP, 1. ;097.-ENABLE CHECKPOINTING1 DIR $DRDAR, 1. ;099.-DISABLE AST RECOGNITIONT0 DIR $DREAR, 1. ;101.-ENABLE AST RECOGNITION0 DIR $DRSDV, 3. ;103.-SPECIFY ODT SST VECTOR1 DIR $DRSTV, 3. ;105.-SPECIFY TASK SST VECTORT0 DIR2 $DRRCV, 2. ;107.-SETUP FOR RECEIVE AST9 DIR2 $DRPUT, 2., ,P$$RFL ;109.-SETUP FOR POWER UP AST 4 DIR2 $DRFEX, 2., ,F$$LPP ;111.-SETUP FOR FLP AST5 DIR $DRGMX, 2., ,P$$LAS ;113.-GET MAPPING CONTEXTR' DIR $DRATX, 1. ;115.-AST TRAP EXIT< DIRP $DRCRW, 2.,ACHKDB,P$$LAS ;117.-CREATE ADDRESS WINDOW? DIRP $DRELW, 2.,ACHKDB,P$$LAS ;119.-ELIMINATE ADDRESS WINDOWN9 DIRP $DRMAP, 2.,ACHKDB,P$$LAS ;121.-MAP ADDRESS WINDOW ; DIRP $DRUNM, 2.,ACHKDB,P$$LAS ;123.-UNMAP ADDRESS WINDOWT4 DIR $DRGSS, 1., ,G$$TSS ;125.-GET SENSE SWITCHES/ DIR2 $DRGCL, 0. ;127.-GET MCR COMMAND LINEU; DIR2 $DRCIN, 7., ,C$$INT ;129.-CONNECT TO INTERRUPT# DIR $DRSTP, 1. ;131.-STOP TASK + DIR $DRUNS, 3.,DFCTSK ;133.-UNSTOP TASKS1 DIR $DRSTS, 2.,CEFNMT ;135.-STOP FOR SNGL EFN.6 DIR $DRSTL, 3. ;137.-STOP FOR LOGICAL OR OF EFN'S .IF DF P$$OOL/ DIR $DRRCS, 0. ;139.-RECEIVE (AND VAR REC). ; DATA OR STOP .IFF.. DIR $DRRCS, 4. ;139.-RECEIVE DATA OR STOP .ENDC+ DIR2 $DRSRC, 0.,SECTCB,P$$OFF ;141.-SDRCG6 DIR2 $DRCNC, 6.,SRSTCL,P$$OFF ;143.-CONNECT TO TASK9 DIR2 $DRLOG, 0., ,C$$RLG ;145.-ELP DIRECTIVES FOR CPR1. DIR2 $DREMS, 4., ,P$$OFF ;147.-EMIT STATUS9 DIR $DRCRV, 5., ,V$$TRM ;149.-CREATE VIRTUAL TERMINALF< DIR $DRELV, 2., ,V$$TRM ;151.-ELIMINATE VIRTUAL TERMINAL# DIR .FALSE. ;153.-INVALID DICR6 DIR $DRSCA, 3., ,S$$LIB ;155.-SUPERVISOR MODE CALL5 DIR $DRCRE, 2., ,G$$GEF ;157.-CREATE GROUP GLOBALE ; EVENT FLAGS8 DIR $DRELE, 0., ,G$$GEF ;159.-ELIMINATE GROUP GLOBAL ; EVENT FLAGS42 DIR $DRSAF, 2., ,M$$PRO ;161.-SPECIFY AFFINITY1 DIR $DRRMA, 1., ,M$$PRO ;163.-REMOVE AFFINITYO> DIR2 $DRPER, 2., ,P$$RTY ;165.-SET UP FOR PARITY ERROR AST8 DIR2 $DRREX, 0. ;167.-SET UP FOR REQUESTED EXIT AST? DIR2 $DRGIN, 0., ,R$$GIN ;169.-GET / PUT SYSTEM INFORMATIONR@ DIR2 $DRSMG, 0., ,E$$LOG ;171.-SEND MESSAGE TO ERROR LOGGING0 DIR2 $DRCLI, 0., ,A$$CLI ;173.-CLI DIRECTIVE. DIR $DRSWS, 3., ,S$$WST ;175.-SWITCH STATE9 DIR $DRFEA, 2., ,R$$FEA ;177.-FEAT$ TEST FEATURE MASKD3 DIR .FALSE. ;179.-RESERVED RSX-11M FUTURE USER3 DIR .FALSE. ;181.-RESERVED RSX-11M FUTURE USE 3 DIR .FALSE. ;183.-RESERVED RSX-11M FUTURE USEA3 DIR .FALSE. ;185.-RESERVED RSX-11M FUTURE USEX3 DIR .FALSE. ;187.-RESERVED RSX-11M FUTURE USES3 DIR .FALSE. ;189.-RESERVED RSX-11M FUTURE USE.- DIR .FALSE. ;191.-RESERVED FOR USER USE.- DIR .FALSE. ;193.-RESERVED FOR USER USE3- DIR .FALSE. ;195.-RESERVED FOR USER USE2- DIR .FALSE. ;197.-RESERVED FOR USER USED- DIR .FALSE. ;199.-RESERVED FOR USER USES; DIR $DRSMP, 2., ,S$$MAP ;201.-MODIFY SUPERVISOR MAPPINGR6 DIR $DRMVS, 4., ,S$$MAP ;203.-MOVE TO/FROM VARIOUS ; TASK SPACESR' DIR2 $DRCPC, 3., ,C$$PCR ;205.-CPCR7A DIR2 $DRLOG, 0., , ;207.-LOGICAL NAME DIRECTIVESX= DIR $DRTFE, 2., ,R$$FEA ;209.-TFEA$ TEST TASK FEATURE.; DIR $DRBOM, 3. 00ekkkkTADATADATADATADATADATA ;211.-BREAKPOINT OR MESSAGE.; DIRP $DRRRF, 2.,ACHKDB,P$$LAS ;213.-RECEIVE DATA OR STOPE4 DIR .FALSE. ;209.-RESERVED RSX-11M+ FUTURE USEA.=$DSTAB+<*6> ;TRUNCATE UNUSED PORTION OF TABLE AT ENDA TB$SIZ == <.-$DSTAB>/3S .END203.-MOVE TO/FROM VARIOUS ; TASK SPACESR' DIR2 $DRCPC, 3., ,C$$PCR ;205.-CPCR7A DIR2 $DRLOG, 0., , ;207.-LOGICAL NAME DIRECTIVESX= DIR $DRTFE, 2., ,R$$FEA ;209.-TFEA$ TEST TASK FEATURE.; DIR $DRBOM, 3. .TITLE DR1ND .IDENT /01/ ;; COPYRIGHT (C) 1981, 1982/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 01;; B. S. MCCARTHY 14-JUL-81;; MODIFIED BY:;9; THIS MODULE MARKS THE END OF THE FIRST DIRECTIVE COMMON;$DR1ND:: .END .TITLE DR1ST .IDENT /01/ ;; COPYRIGHT (C) 1981, 1982/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 01;; B. S. MCCARTHY 14-JUL-81;; MODIFIED BY:;;; THIS MODULE MARKS THE START OF THE FIRST DIRECTIVE COMMON;$DR1ST:: .END;;V;; COPYRIGHT (c) 1985, 1989 BY DIGITAL EQUIPMENT CORPORATIOND; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 03.09S; ;N; PREVIOUSLY MODIFIED BY: ;E#; G. MARIGOWDA, J. MELVIN, P. WEISSR;A$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;V; L. KOGAN 07-SEP-88 03.00+; LK733 - DEFINE RCT DATA STRUCTURES;L; J. MELVIN 07-SEP-88 03.01M5; JJM0411 - MAKE I/O SEQ NUM CONTROLLER SPECIFICc;9; J. MELVIN 07-SEP-88 03.02 1; JJM0413 - RECORD CONTROLLER CONTEXT IN QSTF;R; J. MELVIN 07-SEP-88 03.03ED; JJM0414 - LOG 'BAD BLOCK REPLACEMENT ATTEMPT' STARTING PACKET;I; L. KOGAN 07-SEP-88 03.04?; LK736 - DEFINE ERROR LOG MESSAGE FLAGS AND REPLACEMENTI; STATUS BITS;O; L. KOGAN 07-SEP-88 03.05-; LK742 - MOVE JJM0414 TO UDADF.MAC L;3; L. KOGAN 07-SEP-88 03.06I; LK743 - ADD REPLACEMENT FLAG WORD TO DATA TRANSFER ERROR PACKETO;O; J. MELVIN 03-JAN-89 03.07I@; JJM0433 - REORDER QST DEFS TO MAINTAIN OLD LAYOUT. THIS "; SUPERCEDES JJM0411 AND JJM0413;; J. MELVIN 20-JAN-89 03.08CC; JJM0434 - DELAY OP.GUS FOR RA81 AFTER POWERFAIL. BASED ON A41; PATCH PROVIDED BY L. BRADLEY (UNITED KINGDOM)N;E; J. MELVIN 20-JAN-89 03.09@; JJM0435 - TURN LISTING OFF OF SOME DSAPRE DEFINED OFFSETS;D;A/ .IIF NDF,R$$UDA R$$UDA=0 ;INSURE IT IS DEFINED3/ .IIF NDF,R$$MYA R$$MYA=0 ;INSURE IT IS DEFINEDEI;========================================================================DH; THE FOLLOWING DEFINITIONS MAY BE CHANGED TO CUSTOMIZE THE MSCP DRIVERSI;========================================================================R2MAXWBT = 8. ;MAXIMUM UMR WAIT BLOCK TABLE ENTRIES1 ;THIS IS THE MAXIMUM NUMBER OF I/O'S THAT EACH3/ ;CONTROLLER CAN HAVE OUTSTANDING AT ONE TIMES ; (ON A UNIBUS SYSTEM)A7DUUMR = 4 ;PREALLOCATED UMR WAIT BLOCKS FOR DU DEVICES 7MUUMR = 2 ;PREALLOCATED UMR WAIT BLOCKS FOR MU DEVICES=B;DUTMO = ;DSA CONTROLLERS SEND THE HOST A TIMEOUT VALUE WHEN THEY9 ;ARE BROUGHT ONLINE. FOR DISK CONTROLLERS, THIS VALUED2 ;IS TYPICALLY BETWEEN 30 SEC AND 2 MIN. IF THE9 ;CONTROLLER BECOMES UNAVAILABLE, IT WILL TAKE THE HOST 8 ;2*(TIMEOUT VALUE)+3 SEC TO RESYNCHRONIZE. THIS TIME: ;PERIOD IS LONGER THAN NECESSARY BECAUSE THE RSX DRIVER8 ;DOES NOT IMPLEMENT SOME OF THE LONGER MSCP COMMANDS,: ;SUCH AS 'ERASE'. FOR SOME APPLICATIONS THE TIME DELAY4 ;SPECIFIED BY THE C00kkfONTROLLER MAY BE UNACCEPTABLE.; ;DEFINING DUTMO WILL CAUSE THIS VALUE TO BE USED FOR THER ;TIMEOUT PERIOD.S2 ; *****DO NOT***** USE THIS OPTION UNLESS YOUR8 ;APPLICATION ABSOLUTELY REQUIRES IT. IF YOU USE THIS2 ;OPTION, AND YOU EXPERIENCE INEXPLICABLY FAILED7 ;COMMANDS OR EXCESSIVE RESYNCHRONIZATION, RAISE THIST9 ;VALUE **BEFORE** SUBMITTING A PROBLEM REPORT. DO NOTT: ;UNDER ANY CIRCUMSTANCES ATTEMPT TO USE A TIMEOUT VALUE ;OF LESS THAN 5 SEC. E7 ;A COMPARABLE VALUE IS NOT INCLUDED FOR TAPE DRIVERS.7 ;BECAUSE THE REWIND COMMAND, WHICH WE USE, IS ONE OF  ;THE LONGEST TMSCP COMMANDS. >SPNTMO = 20. ;NUMBER OF SECONDS TO DELAY BEFORE DOING GUS TO 4 ;AN RA81 DRIVE IMMEDIATELY FOLLOWING A POWERFAIL./ ;(TO GET AROUND A HARDWARE RELATED PROBLEM). F;=====================================================================; END OF ALTERABLE DEFINITIONSF;===================================================================== .NLISTEF;=====================================================================; DEFINE CST OFFSETS FOR DSAF;=====================================================================$ .ASECT ;DEFINE CST OFFSETS FOR DSA.=0T3C.STAT: .BLKW 1 ;STATUS BITS FOR CONNECTION STATE I ;POSSIBLE STATES ARE: C1.RDY = 1 ;CONNECTION IS READY. C1.ONL = 2 ;CONNECTION IS IN TRANSITION FOR A ;CON ONL REQUEST.T* C1.SCC = 4 ;CONNECTION IS WAITING FOR ITS- ;'SET CONTROLLER CHARACTERISTICS' COMMAND ;TO COMPLETE.=8 C1.GUS = 10 ;A 'GET UNIT STATUS' COMMAND MUST BE ISSUED< C1.AVN = 20 ;AN ADDITIONAL AVAILABLE COMMAND MUST BE ISSUED4 C1.SYN = 40 ;CONTROLLER SYNCHRONIZATION IN PROGRESS6 C1.REC = 100 ;PHASE ONE OF SYNCHRONIZATION RECOVERY 5 C1.CON = 200 ;PHASE TWO OF SYNCHRONIZATION RECOVERY R0 C1.UMR = 400 ;ALLOCATE UMRS IF A UNIBUS SYSTEM 3 C1.DQU = 1000 ;CALL $DQUMR WHEN EXITING THE DRIVERL$ C1.FAT = 2000 ;FATAL ERROR OCCURRED- C1.ABO = 4000 ;ABORT COMMANDS MUST BE ISSUEDR> C1.GCS = 10000 ;A 'GET COMMAND STATUS' COMMAND MUST BE ISSUED' C1.TMO = 20000 ;A TIMEOUT HAS OCCURRED 7 C1.R1 = 40000 ;RECOVERY - ON-LINES NEED TO BE STARTED Y: C1.R2 = 100000 ;RECOVERY - UNITS STILL SPINNING UP 8C.EXTN: .BLKW 1 ;RESERVED. DO NOT MOVE/REMOVE THIS CELL 7C.CMST: .BLKW 2 ;STATUS OF OLDEST OUTSTANDING COMMAND I S7C.OLHD: .BLKW 2 ;LIST HEAD OF OUTSTANDING I/O PACKETS EC.CMDS: .BLKW 1 ;CREDIT COUNTC#C.VCID: .BLKB 1 ;VIRTUAL CIRCUIT IDM,C.FLAG: .BLKB 1 ;CLASS DRIVER CONTROL FLAG4 C2.SHD = 1 ;TO TEST RECURSION DURING DISK SHADOWING- ;THIS BIT IS MEANING LESS FOR NON I/D AND- ;MICRO/RSX9C.REDO: .BLKW 1 ;OLDEST COMMAND TO BE REISSUED AT RESYNCHN9C.REQU: .BLKW 2 ;QUEUE OF CMDS TO RESTART AFTER A RESYNCHE .IF DF E$$LOG7C.MLNG: .BLKW 1 ;LENGTH OF CONTROLLER ERROR LOG PACKET %C.CRED: .BLKB 1 ;CREDIT/DEBIT COUNTSE$C.VCIX: .BLKB 1 ;VIRTUAL CIRCUIT ID!C.IP: .BLKW 1 ;SAVED IP REGISTERC!C.SA: .BLKW 1 ;SAVED SA REGISTER. .ENDC .IF DF M$$EXT T'C.UMCT: .BLKW 1 ;UMR COUNTER FIELD D.C.UMRW: .BLKW MAXWBT ;UMR WAIT BLOCK TABLE  .ENDC +CSTLEN = <.-C.STAT>/2 ;CST LENGTH IN WORDS G;======================================================================E; DEFINE QST OFFSETS FOR DSAG;======================================================================. .ASECTK.=0;Q.CST: .BLKW 1 ;POINTER TO CST/ ;IN ORDER TO SUPPORT MULTI-CLASS CONTROLLERS 1 ;THERE WOULD BE A TABLE OF CST ADDRESSES HERE.." ;ONE ENTRY FOR EACH CLASS TYPE.=Q.STAT: .BLKW 1 ;STATUS BITS FOR HOST PORT TO CONTROLLER LINKR$ Q1.RDY= 1 ;CONTROLLER STATE = READY1 Q1.OFF= 2 ;CONTROLLER STATE = OFF-LINE, UNUSABLE=1 Q1.SYN= 100000 ;CONTROLLER STATE = SYNCHRONIZING=# ;... TO ACCOMMODATE THE ENVELOPESQ.SAD: .BLKW 1" .BLKB 1 ;RESERVED FOR DIGITAL USE&Q.INF: .BLKB 1 ;CONTROLLER INFORMATION6Q.RSPN: .BLKB 1 ;NUMBER OF RESPONSE RING DESCRIPTORS3Q.CMDN: .BLKB 1 ;NUMBER OF COMMAND RING DESCRIPTORSA&Q.CTM: .BLKB 1 ;CURRENT TIME-OUT COUNT$Q.RTY: .BLKB 1 ;CURRENT RE-TRY COUNT@Q.RING: ;P00lkkkTADATADATADATADATADATAOINTER TO RESPONSE RING AREA. MUST BE SAME AS Q.FRSP/Q.FRSP: .BLKW 1 ;POINTER TO FIRST RESPONSE RINGS/Q.LRSP: .BLKW 1 ;POINTER TO LAST RESPONSE RINGR/Q.FCMD: .BLKW 1 ;POINTER TO FIRST COMMAND RINGA/Q.LCMD: .BLKW 1 ;POINTER TO LAST COMMAND RINGVBQ.RPAT: .BLKW 1 ;POINTER TO ORDERED TABLE OF ADDRESSES OF RSP PKTSBQ.CPAT: .BLKW 1 ;POINTER TO ORDERED TABLE OF ADDRESSES OF CMD PKTS=Q.STEP: ;SYNCHRONIZATION STEP BIT. THIS OVERLAPS THE USE OFO" ;Q.CRSP AND >MUST< REMAIN HERE.3Q.CRSP: .BLKW 1 ;POINTER TO CURRENT RESPONSE PACKET ?Q.INDX: ;SYNCHRONIZATION STEP INDEX. THIS OVERLAPS THE USE OFE" ;Q.CCMD AND >MUST< REMAIN HERE.0Q.CCMD: .BLKW 1 ;POINTER TO FIRST COMMAND PACKETGQ.WRIT: .BLKW 4 ;VALUES TO WRITE TO SA REGISTER DURING SYNCHRONIZATION.6Q.TEMP: .BLKW 1 ;CONTROLLER SPECIFIC SCRATCH/WORK AREA8Q.IOSQ: .BLKB 1 ;CONTROLLER SPECIFIC I/O SEQUENCE NUMBER" .BLKB 1 ;RESERVED FOR DIGITAL USE-Q.CNTI: .BLKW 4 ;CONTROLLER T/MSCP IDENTIFIERQ.ID = Q.CNTI+6;CONTROLLER ID,Q.CSVR: .BLKB 1 ;CONTROLLER SOFTWARE VERSION,Q.CHVR: .BLKB 1 ;CONTROLLER HARDWARE VERSION)QSTLEN = <.-Q.CST>/2 ;QST LENGTH IN WORDSA >;TJ;=========================================================================; DEFINE RCT DATA STRUCTURESJ;=========================================================================;+<; DEFINE THE ERROR LOG PACKET OFFSETS USED FOR COMMUNICATIONA; FROM DUDRV AND RCT TO ERROR LOG. NEGATIVE OFFSET IS IMPLEMENTEDE2; FOR COMPATIBILITY WITH THE OLD RCT PACKET FORMAT;-2; BAD BLOCK REPLACEMENT ATTEMPT ERROR LOG PACKET2; ----------------------------------------------;>:; +---------------------------------------+<; -1| REPLACEMENT STATUS FLAG (M$RSF) |-2:; +---------------------------------------+;; 1| |0P:; +-- COMMAND REFERENCE NUMBER (M$CRF) ---+;; 3| |2L:; +---------------------------------------+;; 5| UNIT NUMBER (M$UNIT) |4-:; +---------------------------------------+;; 7| SEQUENCE NUMBER (M$SEQ) |6T:; +---------------------------------------+<; 11| FLAGS (M$FLAG) | FORMAT (M$FMT) |10:; +---------------------------------------+<; 13| EVENT CODE/SUBCODE (M$OPCD) |12:; +---------------------------------------+<; 15| |14:; +-- ---+<; 17| |16:; +-- CONTROLLER IDENTIFIER (M$CNTI) ---+<; 21| |20:; +-- ---+<; 23| |22:; +---------------------------------------+<; 25| CHVRSN (M$CHVR) | CSVRSN (M$CSVR) |24:; +---------------------------------------+<; 27| MULTIUNIT CODE (M$MLUN) |26:; +---------------------------------------+<; 31| |30:; +-- ---+<; 33| |32:; +-- UNIT IDENTIFIER (M$UNTI) ---+<; 35| |349; +-- ----<; 37| |36:; +---------------------------------------+<; 41| UHVRSN (M$UHVR) | USVRSN (M$USVR) |40:; +---------------------------------------+<; 43| CYLINDER (M$CYL) (NOT USED BY RCT) |42:; +---------------------------------------+<; 45| |44:; +-- VOLUME SERI00 lkfAL NUMBER (M$VRSN) ---+<; 47| |46:; +---------------------------------------+;-; (CONTINUED ON THE NEXT PAGE) ;|:; +---------------------------------------+<; 51| |50:; +-- BAD LBN (M$BLBN) ---+<; 53| |52:; +---------------------------------------+<; 55| |54:; +-- NEW RBN (M$NRBN) ---+<; 57| |56:; +---------------------------------------+<; 61| |60:; +-- OLD RBN (M$ORBN) ---+<; 63| |62:; +---------------------------------------+<; 65| CAUSE (M$CAUS) |64:; +---------------------------------------+;N;M;B8; DISK TRANSFER ERROR ERROR LOG PACKET 7; -------------------------------------;-:; +---------------------------------------+<; -1| REPLACEMENT STATUS FLAG (M$RSF) |-2:; +---------------------------------------+;; 1| |0-:; +-- COMMAND REFERENCE NUMBER (M$CRF) ---+;; 3| |2-:; +---------------------------------------+;; 5| UNIT NUMBER (M$UNIT) |4-:; +---------------------------------------+;; 7| SEQUENCE NUMBER (M$SEQ) |6T:; +---------------------------------------+<; 11| FLAGS (M$FLAG) | FORMAT (M$FMT) |10:; +---------------------------------------+<; 13| EVENT CODE/SUBCODE (M$OPCD) |12:; +---------------------------------------+<; 15| |14:; +-- ---+<; 17| |16:; +-- CONTROLLER IDENTIFIER (M$CNTI) ---+<; 21| |20:; +-- ---+<; 23| |22:; +---------------------------------------+<; 25| CHVRSN (M$CHVR) | CSVRSN (M$CSVR) |24:; +---------------------------------------+<; 27| MULTIUNIT CODE (M$MLUN) |26:; +---------------------------------------+;I; (CONTINUED ON THE NEXT PAGE) :; +---------------------------------------+<; 31| |30:; +-- ---+<; 33| |32:; +-- UNIT IDENTIFIER (M$UNTI) ---+<; 35| |34:; +-- ---+<; 37| |36:; +---------------------------------------+<; 41| UHVRSN (M$UHVR) | USVRSN (M$USVR) |40:; +---------------------------------------+<; 43| CYLINDER (M$CYL) (NOT USED BY RCT) |42:; +---------------------------------------+<; 45| |44:; +-- VOLUME SERIAL NUMBER (M$VRSN) ---+<; 47| |46:; +---------------------------------------+<; 51| |50:; +-- ---+<; 00lkkkTADATADATADATADATADATA 53| |52:; +-- NOT USED ---+<; 55| |54:; +-- ---+<; 57| |56:; +---------------------------------------+<; 61| |60:; +-- LAST HEADER/LBN IN ERROR (M$HED) ---+<; 63| |62:; +---------------------------------------+<; 65| NOT USED |64:; +---------------------------------------+.=177776.M$RSF: .BLKW 1 ; REPLACEMENT STATUS FLAG WORD*M$CRF: .BLKW 2 ; COMMAND REFERENCE NUMBERM$UNIT: .BLKW 1 ; UNIT NUMBER!M$SEQ: .BLKW 1 ; SEQUENCE NUMBER M$FMT: .BLKB 1 ; FORMATM$FLAG: .BLKB 1 ; FLAGS&M$OPCD: .BLKW 1 ; EVENT CODE /SUBCODE(M$CNTI: .BLKW 4 ; CONTROLLER IDENTIFIER5M$CSVR: .BLKB 1 ; CONTROLLER SOFTWARE VERSION NUMBER-5M$CHVR: .BLKB 1 ; CONTROLLER HARDWARE VERSION NUMBER !M$MLUN: .BLKW 1 ; MULTIUNIT CODE"M$UNTI: .BLKW 4 ; UNIT IDENTIFIER/M$USVR: .BLKB 1 ; UNIT SOFTWARE VERSION NUMBER /M$UHVR: .BLKB 1 ; UNIT HARDWARE VERSION NUMBER ,M$CYL: .BLKW 1 ; CYLINDER (NOT USED BY RCT)'M$VRSN: .BLKW 2 ; VOLUME SERIAL NUMBERNM$BLBN: .BLKW 2 ; BAD LBNM$NRBN: .BLKW 2 ; NEW RBN:M$HED: .BLKW 1 ; HEADER CODE (USED IN DATA ERROR PACKETS) . = M$HEDEM$ORBN: .BLKW 2 ; OLD RBNM$CAUS: .BLKW 1 ; CAUSE0M$SIZ= . - M$RSF ; SIZE OF THE ERROR LOG PACKET;+;I6; REPLACEMENT STATUS FLAG WORD BIT DEFINITIONS (M$RSF);L;-MF$PRI=1 ;PRIMARY RBN USED'MF$SUC=2 ;REPLACEMENT SUCCESSFUL FLAG$#MF$ISF=40000 ;IGNORE STATUS FLAGSN!MF$LNG=100000 ;LONG RCT PACKET R .PSECTDN;=============================================================================; DRIVER WIDE MACRO DEFINITIONSBN;============================================================================= .MACRO CALLV TYPE, RTNC .IF IDN , JSR PC,@120000+RTNA .ENDC ;IDN CLASS .IF IDN ,B JSR PC,@140000+RTN .ENDC ;IDN PORT; .ENDM ;CALLVL;=========================================================================== .MACRO JMPV TYPE, RTN .IF IDN , JMP @120000+RTN .ENDC ;IDN CLASS .IF IDN ,= JMP @140000+RTN .ENDC ;IDN PORTB .ENDM ;JMPVK;==========================================================================A .MACRO PUSH LIST ;MACRO PUSHL .IRP XX,1 .IF IDN <#0> CLR -(SP) .IFF MOV XX,-(SP)T .ENDC .ENDM .ENDM PUSH K;=========================================================================== .MACRO POP LIST ;MACRO POP= .IRP XX,V MOV (SP)+,XXI .ENDM .ENDM POPK;==========================================================================4 .MACRO COPY LIST ;MACRO COPYN .IRP XX,= MOV (SP),XX .ENDM .ENDM COPY=O;==============================================================================IH; $IDENT MACRO TO CREATE TITLE AND RUN TIME IDENT OF PUCOM, MUDRV, DUDRV;.$ .MACRO $IDENT NAME,IDMAJ,IDMIN,TEXT# .TITLE NAME V'IDMAJ'.'IDMIN 'TEXT= .RADIX 10.MAJOR = 'IDMAJMINOR = 'IDMIN .RADIX 8. .ENDM ;$IDENTK;===========================================================================;=,; MACRO THAT DEFINES TABLE FOR I/O TRANSFERS;C% .MACRO FUNCT FCN, OPCOD, PKTSIZ, PRON .WORD IO.'FCN ;QIO REQUEST .BYTE OP.'OPCOD ;OPCODE1 .BYTE PKTSIZ ;SIZE OF MSCP/TMSCP PACKET (BYTES)E& .WORD PRO ;OPCODE PROCESSING ROUTINE .ENDM FUNCTJ;=========================================================================;'C; MACRO TO DEFINE TABLE OFFSETS IN THE OTHER (PORT OR CLASS) DRIVER ; .MACRO JMPTBL TYPE= .IF IDN ,* CLASID = 0 ; CLASS DRIVER VERSION NUMBER CLADAT = 2R CLAEND = 4T CLAERR = 6A CLACMD = 10 SCUCB = 12 CLASYN = 14 .ENDC ;IDN CLASS .IF ID00l?$lfN ,O) PORTID = 0 ; PORT DRIVER VERSION NUMBERS PORSUP = 2 PORINT = 4D PORSEN = 6R PORUMR = 10 PKTAC = 12 PKTDR = 14= PKTCHK = 16 STOMP = 20= CONCNT = 22 PKTCH1 = 24 PORSYN = 260 MPPROX = 30 ;PLACE HOLDER. MPPRO DEFINED BELOW .ENDC ;IDN PORT  .ENDM ;JMPTBLJ;=========================================================================K; NULL MACROS THAT ARE REPLACED BY LOGPU.MAC IF TERMINAL LOGGING IS DESIRED J;========================================================================= .MACRO LOGDAT .ENDM .MACRO LOGCMD .ENDM .MACRO LOGRSP .ENDM .MACRO LOGSYN .ENDM .MACRO LOGRTN .ENDM .LISTJ;========================================================================= ; DRIVER WIDE SYMBOL DEFINITIONSJ;=========================================================================,RPLEN = 60. ;RESPONSE PACKET LENGTH (BYTES),CPLEN = 60. ;COMMAND PACKET LENGTH (BYTES)'IOPLEN= 18. ;I/O PACKET LENGTH (WORDS)=,ENVLEN = 4. ;ENVELOPE LENGTH (BYTES)-MPPRO = 30 ;OFFSET FOR $MPPRO VECTORED ADDRD;N7; SYMBOLS NEEDED FOR A ZERO ENTRY IN THE DISPATCH TABLE;A5IO.0 = 0 ;FOR A ZERO ENTRY FOR THE I/O FUNCTION CODE=9OP.0 = 0 ;FOR A ZERO ENTRY FOR THE (T)MSCP FUNCTION CODEW; ; OFFSETS FOR DISPATCH MACRO;=%FO.OP = 2 ;OFFSET FOR (T)MSCP OPCODE=%FO.SZ = 3 ;OFFSET FOR SIZE OF PACKETE1FO.CMD = 4 ;OFFSET FOR OPCODE PROCESSING ROUTINE +FOSIZ = 6 ;SIZE OF ENTRY IN DISPATCH TABLEK;L-; LENGTHS OF ALL COMMON TMSCP COMMAND PACKETS ; -GUS.L = 6 ;# WORDS TO ALLOCATE FOR GUS CMDR.ONL.L = 22 ;# WORDS TO ALLOCATE FOR ONL CMD.ABO.L = 10 ;# WORDS TO ALLOCATE FOR ABO CMD-AVL.L = 6 ;# WORDS TO ALLOCATE FOR AVL CMD .GCS.L = 10 ;# WORDS TO ALLOCATE FOR GCS CMD.SCC.L = 20 ;# WORDS TO ALLOCATE FOR SCC CMD:CMDINT = -4 ;COMMAND INTERRUPT OFFSET (FROM BASE OF RING);RSPINT = -2 ;RESPONSE INTERRUPT OFFSET (FROM BASE OF RING)OOWN = 100000 ;OWNFLAG = 40000 ;FLAGL;E; MESSAGE ENVELOPE;C1MSGLNG = -4 ;OFFSET TO MESSAGE LENGTH (IN BYTES)C3VCID = -1 ;OFFSET TO VIRTUAL CIRCUIT ID (IN BYTES)F7CREDIT = -2 ;OFFSET TO MESSAGE/CREDIT FIELD (IN BYTES)D MSGTYP = 360 ;MESSAGE TYPE MASKCRDDBT = 17 ;CREDIT/DEBIT MASKW;T; VIRTUAL CIRCUIT IDENTIFIERS ; #VCDSK = 0 ;DISK VIRTUAL CIRCUIT ID#VCTAP = 1 ;TAPE VIRTUAL CIRCUIT IDT,VCDIA = 255. ;DIAGNOSTIC VIRTUAL CIRCUIT ID;U; MESSAGE TYPE IDENTIFIERS;&MSGMUL = 20 ;MESSAGE FIELD MULTIPLIERMSGSEQ = 0 ;SEQUENTIAL MESSAGEMSGDAT = 1 ;DATAGRAM MESSAGEGMSGCRD = 2 ;CREDIT MESSAGE-"MSGMNT = 15. ;MAINTENANCE MESSAGE;S#; ERROR RETRY COUNT, TIME-OUT COUNTR;T)RETRY = 3. ;CONTROLLER ERROR RETRY COUNTP)STMOC = 10. ;USE A TIME-OUT COUNT OF 10.1RNGSIZ = 4 ;LENGTH OF RING DESCRIPTOR (IN BYTES)I5CMDSIZ = 4 ;LENGTH OF CMD RNG DESCRIPTOR (IN BYTES)TCRSPLNG = RPLEN + ENVLEN ;TOTAL LENGTH OF RESPONSE PACKET (IN BYTES)YBCMDLNG = CPLEN + ENVLEN ;TOTAL LENGTH OF COMMAND PACKET (IN BYTES)5MSW = 2 ;MOST SIGNIFICANT WORD (OWNER BIT IN RING)G; UMR WAIT BLOCK SIZE'UMRWTB = 20. ; SIZE OF UMR WAIT BLOCK9.IIF DF M$$PRO UMRWTB=UMRWTB+2 ;ADD WORD FOR UNIBUS MASK. ;CONTROLLER ERROR RETRY COUNTP)STMOC = 10. ;USE A TIME-OUT COUNT OF 10.1RNGSIZ = 4 ;LENGTH OF RING DESCRIPTOR (IN BYTES)I5CMDSIZ = 4 ;LENGTH OF CMD RNG DESCRIPTOR (IN BYTES)TCRSPLNG = RPLEN + ENVLEN ;TOTAL LENGTH OF RESPONSE PACKET (IN BYTES)YBCMDLNG = CPLEN + ENVLEN ;TOTAL LENGTH OF COMMAND PACKET (IN BYTES)5MSW = 2 ;MOST .TITLE DSDRVO .IDENT /12.08/ ;Q5; COPYRIGHT (C) 1981 BY DIGITAL EQUIPMENT CORPORATION/; ALL RIGHTS RESERVED.;B<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; P. J. BEZEREDI 19-SEP-79;O; PREVIOUSLY MODIFIED BY:,;D; P. J. BEZEREDI; R. T. PERRON;A; MODIFIED BY:;O; B. S. MCCARTHY 6-AUG-85 12.085;O/; BM368 -- ADD CONDITIONAL SKIP OF FIRST DRIVEP!; NOT READY ERROR FOR POWERFAILS;.,; RH1100?%lkkkTADATADATADATADATADATA/RH70-RS03/RS04 FIXED HEAD DISK DRIVER;; MACRO LIBRARY CALLS ;I .MCALL HWDDF$,PKTDF$/$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;B; EQUATED SYMBOLS ;Y%ADR=10 ;ADDRESS BITS SETUP (1=YES)E'SEL=20 ;PORT SELECT WAIT (1=WAITING)RETRY=8. ;ERROR RETRY COUNTTRE=40000 ;TRANSFER ERRORR'RSCS1=0 ;CONTROL AND STATUS REGISTERTRSWC=2 ;WORD COUNT REGISTERRSBA=4 ;BUS ADDRESSRSDA=6 ;TRACK/SECTOR ADDRESSR"RSCS2=10 ;SECOND STATUS REGISTER!RSDS=12 ;DRIVE STATUS REGISTERRSER=14 ;ERROR REGISTER&RSAS=16 ;ATTENTION SUMMARY REGISTER; ; LOCAL DATA;S=; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLER NUMBER)L;7RTTBL: .BLKW R$$JS1 ;RETRY COUNT FOR CURRENT OPERATIONR=PRMSV: .BLKW R$$JS1*5 ;PARAMETER SAVE AREA FOR ERROR RECOVERY= ;AND WRITE CHECK FUNCTION=;;; DRIVER DISPATCH TABLEE;( DDT$ DS,R$$JS1 ;GENERATE DISPATCH TABLE;+C; **-DSINI-RH11/RH70-RS03/RS04 FIXED HEAD DISK CONTROLLER INITIATORI;RB; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/OH; REQUEST IS QUEUED AND AT THE END OF A PREVOIUS I/O OPERATION TO PROPA-G; GATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED UNIT IS NOT BUSY,$H; THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST, ELSE A RETURNH; TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THENI; THE NEXT I/O OPERATION IS INITIATED FOLLOWED BY A RETURN TO THE CALLER.;* ; INPUTS:/;04; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIATED.;H ; OUTPUTS:;NA; IF THE SPECIFIED UNIT IS NOT BUSY AND AN I/O REQUEST IS WAITING @; TO BE PROCESSED, THEN THE NEXT REQUEST IS DEQUEUED AND THE I/O; OPERATION IS INITIATED. ;- .ENABL LSBI7DSINI: GTPKT$ DS,R$$JS1 ;GET NEXT I/O PACKET TO PROCESSX; 1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:.;F'; R1=ADDRESS OF THE I/O REQUEST PACKET.-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.B; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK. 4; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIATED.;F;; RH11-RS03/RS04 FIXED HEAD DISK I/O REQUEST PACKET FORMAT: ; "; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.N@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.5; WD. 04 -- FIRST LUN WORD IN REQUESTORS TASK HEADER. ; WD. 05 -- I/O FUNCTION CODE.0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.=; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT + 140000)./3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.A; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER.V+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.T-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED. ; WD. 15 -- NOT USED.E8; WD. 16 -- BITS <0:7> = HIGH LBN, BITS <8:15> NOT USED.#; WD. 17 -- LOW LBN OF I/O REQUEST.U<; WD. 20 -- RELOCATION BIAS OF REGISTER BLOCK ELSE NOT USED.;; WD. 21 -- REGISTER BLOCK ADDRESS (DISPLACEMENT + 140000).-;/( BICB #ADR!SEL,U.CW2+1(R5) ;CLEAR FLAGS% MOV #RETRY,RTTBL(R3);SET RETRY COUNTT$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 10$ ;IF CS WE FAILED TST R0 ;TRANSFER FUNCTION? BMI DSUBMP ;IF MI YES TST I.PRM+2(R1) ;SIZE THE DISK? BPL 10$ ;IF PL NOD3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFERH( MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS, MOVB U.UNIT(R5),RSCS2(R2) ;SELECT THE UNIT. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS MOVB #111,(R2) ;CLEAR THE DRIVE+ BIT #10000,RSCS2(R2);DOES THE DRIVE EXIST?U BEQ 5$ ;IF EQ YESA2 MOVB #TRE/256.,RSCS1+1(R2) ;CLEAR THE CONTROLLER* MOV #IE.SZE&377,R0 ;UNABLE TO SIZE DEVICE) BICB #US.VV,U.STS(R5);RESET VOLUME VALID$ CALL $RLCN ;RELEASE THE CONTROLLER BR 10$ ;EXIT35$: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKN- MOV #IS.SUC&377,R0 ;SET SUCCESSFUL OPERATION; BR 50$ ;10$: CALL $IODON ;FINISH I/O2& BR DSINI ;GET NEXT PACKET TO PROCESS;RC; NOW REQUEST THE CONTROLLER AND DETERMINE IF THE UNIBUS ADDRESS IS0D; ALREADY IN T00?-l$lfHE FORMAT FOR THE MASSBUS CONTROLLER OR THE UNIBUS MAP/; FOR 22-BIT PROCESSORS WITHOUT RH CONTROLLERS.E;E9DSUBMP: BITB #ADR,U.CW2+1(R5);ADDRESS BITS ALREADY SETUP?V BNE DSINIO ;IF NE YES . BISB #ADR,U.CW2+1(R5);SHOW ADDRESS BITS SETUP3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER#' MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESS/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?S BEQ 20$ ;IF EQ NO : BIT #KS.MBC,K.STS(R1) ;YES, IS THIS A 22-BIT CONTROLLER? BNE 30$ ;IF NE YES' CALL $STMAP ;SETUP UNIBUS MAP ADDRESSU220$: ASL U.BUF(R5) ;SHIFT BITS <4:5> TO BITS <8:9> ASL U.BUF(R5) ;...L ASL U.BUF(R5) ;...  ASL U.BUF(R5) ;...;/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?  BEQ 30$ ;IF EQ NO2% CALL $MPUBM ;MAP UNIBUS TO TRANSFERR;D<; CONVERT THE I/O FUNCTION CODE TO IT'S HARDWARE EQUIVALENT.;E230$: MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS7 CMP #IO.WCK!IQ.UMD,I.FCN(R1) ;DIAGNOSTIC WRITE CHECK?R BNE 40$ ;IF NE NO2, BISB #151,U.BUF(R5) ;YES, SET FUNCTION CODE BR 60$ ;040$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION2 BISB #171,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTION6 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?$ BHIS 55$ ;IF HIS FUNCTION IS LEGAL,50$: MOV @S.KRB(R4),R2 ;RETREIVE CSR ADDRESS) MOVB U.UNIT(R5),RSCS2(R2) ;SELECT DRIVEC CALLR DSFIN1 ;FINISH UPL%55$: BEQ 60$ ;IF EQ FUNCTION IS READV5 SUB #10,U.BUF(R5) ;CONVERT TO WRITE LOGICAL FUNCTIONI;O; VALIDATE AND CONVERT LBN. ; -60$: CALL $BLKCK ;CHECK LOGICAL BLOCK NUMBER CMP #2,U.PRM+2(R5) ;RS04 DRIVE? BEQ 70$ ;IF EQ YES ASL R0 ;MULTIPLY RS03 BLOCK)170$: ASL R0 ;CONVERT TO SECTOR AND TRACK ADDRESSI' MOV R0,I.PRM+12(R3) ;SAVE DISK ADDRESS ' MOV S.KRB(R4),R1 ;RETRIEVE KRB ADDRESS@- MOVB K.CON(R1),R1 ;RETRIEVE CONTROLLER INDEXT$ MUL #5,R1 ;SETUP AN INDEX INTO ...' ADD #PRMSV,R1 ;... PARAMETER SAVE AREAQ& MOV U.BUF(R5),(R1)+ ;SAVE PARAMETERS MOV U.BUF+2(R5),(R1)+ ;... MOV U.CNT(R5),(R1)+ ;... MOV I.PRM+10(R3),(R1)+ ;...K MOV I.PRM+12(R3),(R1)+ ;... .DSABL LSB+; $; **-DSINIO-INTIATE AN I/O OPERATION;RB; THIS ROUTINE WILL INITIATE THE DATA TRANSFER OPERATION. AT THIS=; POINT THE CONTROLLER MUST BE REQUESTED FOR A DATA TRANSFER.R;R ; INPUTS: ; ; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB.;T*DSINIO: MOV @S.KRB(R4),R2 ;GET CSR ADDRESS) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSB( MOVB U.UNIT(R5),RSCS2(R2) ;SELECT UNIT;R9; DETERMINE IF DRIVE'S PORT IS SEIZED BY THIS CONTROLLER.3;R) CLR RSDS(R2) ;ATTEMPT TO SEIZE THE DRIVE( BIT #400,RSDS(R2) ;DID THE DRIVE SEIZE? BNE 5$ ;IF NE YES % MOVB #100,(R2) ;RE-ENABLE INTERRUPTSN0 BISB #SEL,U.CW2+1(R5);SET PORT SELECT WAIT FLAG< MOVB S.ITM(R4),S.CTM(R4) ;SET CURRENT DEVICE TIMEOUT COUNT* CALLR $RLCN ;RELEASE CONTROLLER AND EXIT;..; LOAD CONTROLLER REGISTERS FOR DATA TRANSFER.;75$: MOV #TRE!11,(R2) ;CLEAR CONTROLLER AND DRIVE ERRORSR# ADD #RSCS2,R2 ;POINT TO SECOND CSRE- MOV I.PRM+12(R1),-(R2) ;INSERT DISK ADDRESSL. MOV U.BUF+2(R5),-(R2) ;INSERT BUFFER ADDRESS8 MOV U.CNT(R5),-(R2) ;INSERT NUMBER OF BYTES TO TRANSFER! ROR (R2) ;CONVERT TO WORD COUNTB$ NEG (R2) ;MAKE NEGATIVE WORD COUNT" TST -(R2) ;POINT TO CSR REGISTER;(&; TEST FOR DRIVE NOT READY CONDITIONS.;C+ MOV #IE.DNR&377,R0 ;ASSUME DRIVE NOT READYX7 MOV RSDS(R2),R3 ;GET CONTENTS OF DRIVE STATUS REGISTER COM R3 ;COMPLEMENT STATUS ( BIT #10200,R3 ;DRIVE READY AND ON-LINE? BEQ 20$ ;IF EQ YES/ BITB #US.SPU,U.STS(R5) ;IS DRIVE SPINNING UP?L BEQ 10$ ;IF EQ NOR9 BITB #US.VV,U.STS(R5);WAS THE VOLUME PREVIOUSLY MOUNTED?M BEQ DSPWF1 ;IF EQ NO( BR DSPWF0 ;YES, WAIT FOR IT TO SPIN UP210$: BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC OPERATION BEQ 15$ ;IF EQ NO. CALLR DSDIAG ;LOG DIAGNOSTIC DRIVE NOT READY15$: ;REFERENCE LABEL .IF DF S2.NRD6 BIT #S2.NRD,S.ST2(R4) ;IS THIS FIRST DRIVE NOT READY?! BNE 16$ ;IF NE NO, GO LOG ERROR06 BIS #S2.NRD,S.ST2(R4) ;INDICATE FIRST DRIVE NOT READY JMP DSPWF1 ;GO DO A RETRYD716$: BIC #S2.NRD,S.ST2(R4) ;CLEAR FIRST DRIVE NOT READYS .ENDC ; DF S2.NRD00?5lkkkTADATADATADATADATADATA( CALL $DVERR ;LOG DRIVE NOT READY ERROR CALLR DSFIN ;FINISH UP520$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE SPINNING UPT6 BICB #S3.SPU,S.ST3(R4) ;CLEAR PORT SPINNING UP FLAGS* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS MOV R3,R1 ;COPY KRB ADDRESSB;#$; START THE DATA TRANSFER OPERATION.; ! MTPS #PR5 ;;;DISABLE INTERRUPTS 1 BIT #FE.EXT,$FMASK ;;;22-BIT ADDRESSING ENABLED?E BEQ 30$ ;;;IF EQ NO 7 BIT #KS.MBC,K.STS(R3) ;;;IS THIS A 22-BIT CONTROLLER?  BEQ 30$ ;;;IF EQ NON' ADD K.OFF(R3),R1 ;;;POINT TO UCB TABLEE+ MOV KE.RHB(R1),R1 ;;;RETREIVE RHBAE OFFSET0' ADD R2,R1 ;;;FORM AN I/O PAGE ADDRESSP2 MOVB U.BUF+1(R5),(R1);;;SET MEMORY EXTENSION BITS& MOVB U.BUF(R5),(R2) ;;;START FUNCTION BR 40$ ;;;)30$: MOV U.BUF(R5),(R2) ;;;START FUNCTION +40$: CLR S.FRK+2(R4) ;;;INIT FORK INTERLOCK / MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNT 8 BIS #KS.DIP,K.STS(R3) ;;;SET DATA TRANSFER IN PROGRESS- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVEO MTPS #0 ;ALLOW INTERRUPTSN;D<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;I"DSCAN: RETURN ;NOP FOR RS03/RS04;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND>; CAUSES NO IMMEDIATE ACTION ON THE UNIT. THE CURRENT TIMEOUT=; COUNT IS EXTENDED SO THAT IF THE UNIT WAS BUSY IT WILL HAVE;?; SUFFICIENT TIME TO SPIN BACK UP. THE NEXT I/O REQUEST TO ANY A; UNIT WILL BE SUSPENDED FOR AT LEAST THE EXTENDED TIMEOUT UNLESSB; THE UNIT IS ALREADY READY.;-3DSPWF: TSTB S.STS(R4) ;IS THIS UNIT CURRENTLY BUSY?L BEQ DSPWF2 ;IF EQ NO8DSPWF0: MOVB #8.,S.STS(R4) ;WAIT A MAXIMUM OF 32 SECONDS6DSPWF1: MOVB S.ITM(R4),S.CTM(R4) ;4 SECONDS AT A TIME5DSPWF2: BISB #US.SPU,U.STS(R5) ;SET UNIT SPINNING UP 7DSPWF3: CALLR $RLCN ;RELEASE CONTROLLER (IF NECESSARY)A;+5; **-$DSINT-RH11-RS03/RS04 FIXED HEAD DISK CONTROLLER ; INTERRUPT SERVICE ROUTINET;-3$DSINT::BR DSFRK ;;;ENTRY POINT FOR DATA TRANSFERSD+ TST S.FRK+2(R4) ;;;ARE INTERRUPTS ALLOWED?. BNE DSCAN ;;;IF NE NO(' CALL $FORK ;;;CREATE A SYSTEM PROCESSD9DSFRK: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFERM2 BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT? BEQ 5$ ;IF EQ NO2 BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT WAIT FLAG% JMP DSINIO ;YES, GO DO THE TRANSFERO-5$: MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESSR- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXP% MOV U.SCB(R5),R4 ;GET ADDRESS OF SCBF/ MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERK# MOV @S.KRB(R4),R2 ;GET CSR ADDRESSB( MOVB U.UNIT(R5),RSCS2(R2) ;SELECT UNIT# TSTB S.STS(R4) ;IS THIS UNIT BUSY?R BNE 15$ ;IF NE YES& CLR S.FRK+2(R4) ;RESET FORK INTERLOCK- MOV #TRE!11,(R2) ;CLEAR CONTROLLER AND DRIVEF- BIT #S2.MAD,S.ST2(R4) ;MULTI-ACCESS DEVICE?T BNE 10$ ;IF NE YES. MOVB #100,(R2) ;NO, JUST RE-ENABLE INTERRUPTS( BR DSPWF3 ;RELEASE CONTROLLER AND EXIT&10$: MOVB #113,(R2) ;RELEASE THE DRIVE8 BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED( BR DSPWF3 ;RELEASE CONTROLLER AND EXIT;2+; THE UNIT WAS BUSY. NOW CHECK FOR ERRORS.);S115$: BITB #US.SPU,U.STS(R5) ;ARE WE SPINNING UP?B BNE DSREST ;IF NE YESS) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS!7 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION EXECUTED?R BNE DSDIAG ;IF NE YEST BIT #60000,(R2) ;ANY ERRORS?1 BEQ DSWCHK ;IF EQ NO. MOV RSWC(R2),R0 ;GET NEGATIVE WORDS REMAINING# ASL R0 ;CONVERT TO NEGATIVE BYTESE6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED* SUB #512.,R0 ;SUBTRACT OUT BLOCK IN ERROR) BLE 20$ ;IF LE NO GOOD BYTES TRANSFEREDH2 BIT #S2.EIP,S.ST2(R4) ;ERROR ALREADY IN PROGRESS BEQ 20$ ;IF EQ NO;E:; WE GOT AN ERROR BUT SOME GOOD DATA WAS TRANSFERED. THIS6; INDICATES THAT WE RECOVERED FROM THE PREVIOUS ERROR.;D, CALL DSCALC ;CALCULATE NEW DISK PARAMETERS MOV R2,-(SP) ;SAVE CSR ADDRESSE/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTI/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTC1 MOV #IS.SUC&377,R0 ;THIS RECOVERY WAS SUCCESSFULB+ CALL $FNERL ;FINISH ERROR LOGGING PROCESS2- MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNTE" MOV (SP)+,R2 ;RESTORE CSR A00?=l$lfDDRESS#20$: CALL $DVERR ;LOG DEVICE ERRORG- MOV #IE.WCK&377,R0 ;ASSUME WRITE CHECK ERROR ( BIT #4000,RSCS2(R2) ;WRITE CHECK ERROR? BNE DSRTRY ;IF NE YESC/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERRORR0 MOV RSER(R2),R1 ;GET CONTENTS OF ERROR REGISTER BIT #47007,R1 ;HARD ERROR?B BNE 30$ ;IF NE YES! BIT #14000,RSCS2(R2);NEM OR NED?S BNE 30$ ;IF NE YES TST RSCS2(R2) ;DATA LATE ERROR? BPL DSRTRY ;IF PL NO, CALL DSCALC ;YES, CALCULATE NEW PARAMETERS& BR DSRTRY ;RETRY FROM BLOCK IN ERROR$30$: BIT #4000,R1 ;WRITE LOCK ERROR? BEQ DSFIN ;IF EQ NOR) MOV #IE.WLK&377,R0 ;SET WRITE LOCK ERRORC BR DSFIN ;FINISH I/O;B@; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING REPEATEDA; UNLESS THE REQUEST WAS DIAGNOSTIC. TIMEOUTS ARE USUALLY CAUSED0C; BY POWERFAILURE BUT MAY ALSO BE THE RESULT OF A HARDWARE FAILURE.R;D7DSOUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE SPINNING UP? BEQ 10$ ;;;IF EQ NO- DECB S.STS(R4) ;;;HAVE WE WAITED ENOUGH YET?B BEQ 10$ ;;;IF EQ YES MTPS #0 ;;;ALLOW INTERRUPTS . CALL $RQCND ;REQUEST CONTROLLER FOR TRANSFER# BR DSREST ;RETRY ENTIRE OPERATIONC,10$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY3 BICB #US.SPU,U.STS(R5) ;;;RESET DRIVE SPINNING UP  MTPS #0 ;;;ALLOW INTERRUPTSI. CALL $RQCND ;REQUEST CONTROLLER FOR TRANSFER* MOV S.KRB(R4),R2 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R2),R3 ;RETREIVE CONTROLLER INDEX # MOV (R2),R2 ;RETREIVE CSR ADDRESS ( MOVB U.UNIT(R5),RSCS2(R2) ;SELECT UNIT! CALL $DVTMO ;LOG DEVICE TIMEOUT 2 BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT?) BNE DSFIN1 ;IF NE YES, WE DIDN'T GET ITE2 BCC DSRTRY ;IF CC TIMEOUT DURING NORMAL FUNCTION7DSDIAG: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASK * BR DSFIN ;DIAGNOSTIC PROCESSING COMPLETE;T; RETRY THE CURRENT OPERATION.;E0DSRTRY: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?N BNE DSFIN ;IF NE YES DEC RTTBL(R3) ;RETRY FUNCTION?V BLE DSFIN ;IF LE NO 'DSREST: MOVB #111,(R2) ;CLEAR THE DRIVEI! CALLR DSUBMP ;RESTART OPERATIONI;F!; TEST FOR WRITE CHECK OPERATION.F; CDSWCHK: BITB #IO.WLC&377,I.FCN(R1) ;WRITE FOLLOWED BY WRITE CHECK?C BNE 10$ ;IF NE YES5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED BY MCR?I BEQ DSFIN ;IF EQ NOP)10$: MOVB U.BUF(R5),R1 ;GET LAST FUNCTIONE CMPB #171,R1 ;WAS IT A READ? BEQ DSFIN ;IF EQ YES* CMPB #161,R1 ;WAS LAST FUNCTION A WRITE? BNE DSFIN ;IF NE NOR. MOV #RETRY,RTTBL(R3);REINITIALIZE RETRY COUNT- MOV S.PKT(R4),R1 ;RESTORE I/O PACKET ADDRESSC# MUL #5,R3 ;FORM AN INDEX INTO ...' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAS) MOV (R3)+,U.BUF(R5) ;RESTORE PARAMETERSL MOV (R3)+,U.BUF+2(R5) ;... MOV (R3)+,U.CNT(R5) ;... MOV (R3)+,I.PRM+10(R1) ;...E MOV (R3)+,I.PRM+12(R1) ;...N. MOVB #151,U.BUF(R5) ;SET WRITE CHECK FUNCTION( BR DSREST ;START WRTIE CHECK OPERATION;Q; **-DSFIN-FINISH I/O OPERATIONN;OB; THIS ROUTINE WILL SET THE ACTUAL BYTES TRANSFERED PARAMETER, THEC; ERROR LOGGING RETRY COUNTS AND CALL $IODON. A CHECK WILL BE MADE#A; FOR ANY PENDING ATTENTIONS AND THE CONTROLLER WILL BE RELEASED.A;S ; INPUTS:+;B; R0=SUCCESS/ERROR CODER; R2=ADDRESS OF CONTROLLER CSR; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB1;;7DSFIN: MOV RSWC(R2),R1 ;GET WORDS REMAINING TO TRANSFER;+ ASL R1 ;CONVERT TO BYTES LEFT TO TRANSFERW6 ADD U.CNT(R5),R1 ;CALCULATE BYTES ACTUALLY TRANSFERED&DSFIN1: MOVB #11,(R2) ;CLEAR THE DRIVE# MOV #TRE,(R2) ;NOW CLEAR THE DRIVEE* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS2 BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT WAIT FLAG+10$: TSTB RSAS(R2) ;ANY ATTENTIONS PENDING?S BEQ 20$ ;IF EQ NO01 BISB #100,(R2) ;RE-DISPATCH TO INTERRUPT HANDLERR BR 10$ ;TRY AGAIN 020$: BIT #S2.MAD,S.ST2(R4) ;DUAL ACCESS DEVICE? BEQ 30$ ;IF EQ NO 6 BITB #S3.NRL,S.ST3(R4) ;SHOULD WE RELEASE THE DRIVE? BEQ 35$ ;IF EQ YES)30$: MOVB #100,(R2) ;RE-ENABLE INTERRUPTSR BR 40$ ;<35$: BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED7 MOVB #113,(R2) ;RE-ENABLE INTERRUPTS AND RELEASE DRIVE 140$: MOVB K.CON(R3),R3 ;RE00?ElIlkkTADATADATADATADATADATATREIVE CONTROLLER INDEXT/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNT / BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTR CALL $RLCN ;RELEASE CONTROLLER" CLR S.FRK+2(R4) ;ALLOW INTERRUPTS# CALL $IODON ;FINISH I/O OPERATION! JMP DSINI ;PROCESS NEXT REQUEST ;S>; THE TRANSFER STOPPED DUE TO A RETRYABLE ERROR CONDITION. WE>; WILL NOW BACKUP THE WORD COUNT, BUS ADDRESS AND TRACK/SECTOR>; ADDRESS BY ONE BLOCK AND RETRY THE TRANSFER FROM THIS POINT.@; THIS IS DONE TO PREVENT THE ERROR CONDITION FROM RECURRING DUE; TO A LONG TRANSFER.2;E5DSCALC: MOV RSWC(R2),R0 ;GET NEGATIVE WORDS REMAININGA* BNE 10$ ;IF NE WE HAD A PARTIAL TRANSFER0 MOV #-1,R0 ;DLT ON LAST WORD, FAKE PARTIAL XFR'10$: ASL R0 ;CONVERT TO NEGATIVE BYTESI6 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERED- BIC #777,R0 ;GET BLOCKS ACTUALLY TRANSFEREDL5 SUB R0,U.CNT(R5) ;REDUCE BYTES REMAINING TO TRANSFERR* BEQ 30$ ;IF EQ NO MORE BYTES TO TRANSFER3 ADD R0,U.BUF+2(R5) ;UPDATE STARTING BUFFER ADDRESSR0 ADCB U.BUF+1(R5) ;AND THE MEMORY EXTENSION BITS2 BIT #FE.EXT,$FMASK ;IS 22-BIT ADDRESSING ENABLED? BEQ 15$ ;IF EQ NOE+ MOV S.KRB(R4),R1 ;RETRIEVE THE KRB ADDRESS#9 BIT #KS.MBC,K.STS(R1) ;IS THIS A 22-BIT MASSBUS DEVICE?O BNE 15$ ;IF NE YES& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESSK ADCB -(R1) ;...E215$: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS" SWAB R0 ;GET BLOCKS*2 TRANSFERED CMP #2,U.PRM+2(R5) ;RS04 DRIVE? BEQ 20$ ;IF EQ YES ASL R0 ;GET BLOCKS*4-20$: ADD R0,I.PRM+12(R1) ;UPDATE DISK ADDRESSE RETURN ;I430$: ADD R0,U.CNT(R5) ;YES, BACKUP BYTES TO TRANSFER RETURN ;R .ENDVE THE KRB ADDRESS#9 BIT #KS.MBC,K.STS(R1) ;IS THIS A 22-BIT MASSBUS DEVICE?O BNE 15$ ;IF NE YES& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESSK ADCB -(R1) ;...E215$: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS" SWAB R0 ;GET BLOCKS*2 TRANSFERED CMP #2,U.PRM+2(R5) ;RS04 DRIVE? BEQ 20$ ;IF EQ YES ASL R0 ;GET BLOCKS*4 .TITLE DTDRV .IDENT /10/;; COPYRIGHT (C) 1974, 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 10;; D. N. CUTLER 1-DEC-73;; PREVIOUSLY MODIFIED BY:;; P. J. BEZEREDI; D. N. CUTLER; C. A. D'ELIA; F. L. STRAIGHT; T. J. MILLER;; MODIFIED BY:;; P. J. BEZEREDI 13-MAY-77;'; PB029 -- I/O DATA STRUCTURE CHANGES.;.; P. J. BEZEREDI 14-DEC-77;6; PB050 -- REMOVE UNNEEDED CONDITIONALS FOR RSX-11M+.;O; E. L. BAATZ 18-JUN-78 ;S); EB148 -- REMOVE EXPLICIT PS REFERENCE.M;O; P. J. BEZEREDI 05-JUL-78;C9; PB079 -- INSURE R2 CONTAINS CSR ADDRESS BEFORE LOGGING ; AN ERROR.L;1; P. J. BEZEREDI 18-JUL-78;F7; PB081 -- EXPAND I/O ACTIVITY INFORMATION REPORTED AT'; TIME OF AN ERROR.;.; P. J. BEZEREDI 21-AUG-78;6; PB083 -- ADDITION OF SOFTWARE VOLUME VALID SUPPORT.;R ; TC11 DECTAPE CONTROLLER DRIVER;I; MACRO LIBRARY CALLS0;  .MCALL ABODF$,HWDDF$,PKTDF$" ABODF$ ;DEFINE TASK ABORT CODES$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;-; EQUATED SYMBOLS ;U-WAIT=100000 ;WAITING TO SELECT UNIT (1=YES)N,ABRT=40000 ;ABORT CURRENT FUNCTION (1=YES)RETRY=5. ;ERROR RETRY COUNT ;T ; LOCAL DATA;>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);3>; DIAGNOSTIC FUNCTIONS IO.RNF AND IO.RNR USE BIT 7 OF RTTBL AS!; A FLAG FOR INTERRUPT SERVICING.I<RTTBL: .BLKW T$$C11 ;ERROR RETRY COUNT AND DRIVE RESET FLAG;+; DRIVER DISPATCH TABLE ;-( DDT$ DT,T$$C11 ;GENERATE DISPATCH TABLE;+,; **-DTINI-TC11 DECTAPE CONTROLLER INITIATOR;TH; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUEG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THEH; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN AH; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN00Ml$lf TO THE CALLER IH; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER>; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.;R ; INPUTS:H;B:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;H ; OUTPUTS:;NB; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAB; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OP; ATION IS INITIATED.E;- .ENABL LSBS=DTINI: GTPKT$ DT,T$$C11,DTPWF ;GET NEXT I/O PACKET TO PROCESS.; 1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:E;T'; R1=ADDRESS OF THE I/O REQUEST PACKET.R-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.I; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.E:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;I); TC11 DECTAPE I/O REQUEST PACKET FORMAT:E;I"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTER TASK.,@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTER TASK HEADER.B; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTER TASK HEADE@; WD. 05 -- I/O FUNCTION CODE (IO.RLB,IO.RLV,IO.WLB, OR IO.WLV).0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.B; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140003; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.EA; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER.O+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.O-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.D; WD. 15 -- NOT USED. 9; WD. 16 -- LOW BYTE MUST BE ZERO AND HIGH BYTE NOT USED.C0; WD. 17 -- LOGICAL BLOCK NUMBER OF I/O REQUEST.;; WD. 20 -- RELOCATION BIAS OF DIAGNOSTIC REG. BLK. ADDRESSOB; WD. 21 -- DIAGNOSTIC REG. BLK. ADDRESS (REAL OR DISPL. + 140000);($ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 8$ ;IF CS WE FAILEDS TST R0 ;TRANSFER FUNCTION? BPL 8$ ;IF PL NO .IF DF M$$EXT, CALL $STMAP ;SET UP UNIBUS MAPPING ADDRESS .ENDC: MOV #<8.*256.>+RETRY,RTTBL(R3) ;SET ROCK AND RETRY COUNTS$ MOV R1,R0 ;COPY I/O PACKET ADDRESS& ADD #I.FCN,R0 ;POINT TO FUNCTION CODE- BITB #IQ.UMD,(R0) ;DIAGNOSTIC FUNCTION CALL?D BEQ 4$ ;IF EQ NO5 CLRB RTTBL(R3) ;NO RETRIES FOR DIAGNOSTIC OPERATIONSO. CMP #IO.RNF!IQ.UMD,(R0) ;READ BLOCK FORWARD? BNE 2$ ;IF NE NO: MOV #IO.RLB!IQ.UMD,(R0) ;CONVERT TO READ LOGICAL FORWARD BR 3$ ;F12$: CMP #IO.RNR!IQ.UMD,(R0) ;READ BLOCK REVERSE? BNE 4$ ;IF NE NO: MOV #IO.RLV!IQ.UMD,(R0) ;CONVERT TO READ LOGICAL REVERSE23$: BIS #200,RTTBL(R3) ;SET READ BLOCK NUMBER FLAG/4$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTIONO MOV R5,R3 ;COPY ADDRESS OF UCB4 ADD #U.BUF+1,R3 ;POINT TO HIGH BYTE OF MEM.EXT WORD# MOVB R2,(R3) ;INSERT DRIVE NUMBERC. BISB #105,-(R3) ;ASSUME READ LOGICAL FUNCTION7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?)# BHIS 9$ ;IF HIS FUNCTION IS LEGALB8$: JMP 195$ ;ILLEGAL FUNCTION($9$: BEQ 10$ ;IF EQ FUNCTION IS READ0 BIS #10,(R3) ;CONVERT TO WRITE LOGICAL FUNCTION310$: BIT #IO.WLV&377,I.FCN(R1) ;REVERSE DIRECTION?B BEQ 20$ ;IF EQ NO * BIS #4000,(R3) ;SET REVERSE DIRECTION BIT'20$: CLRB U.CW2+1(R5) ;CLEAR ABORT FLAG#) CALL $BLKCK ;CHECK LOGICAL BLOCK NUMBERO, MOV R0,U.PRM(R5) ;SAVE LOGICAL BLOCK NUMBER;5; INITIATE I/O OPERATION;U30$: ;REF LABEL .IF DF M$$EXT% CALL $MPUBM ;MAP UNIBUS TO TRANSFER  .ENDC% MOV S.CSR(R4),R0 ;GET ADDRESS OF CSR2 CMP (R0)+,(R0)+ ;POINT TO BUFFER ADDRESS REGISTER, MOV U.BUF+2(R5),(R0) ;INSERT BUFFER ADDRESS8 MOV U.CNT(R5),-(R0) ;INSERT LENGTH OF TRANSFER IN BYTES* CLR U.PRM+2(R5) ;CLEAR FINAL ERROR STATUS( ROR (R0) ;CONVERT LENGTH TO WORD COUNT$ NEG (R0) ;MAKE NEGATIVE WORD COUNT6 MOVB U.BUF+1(R5),-(R0) ;INSERT UNIT AND DIRECTION BIT0 BIS #WAIT,U.CW2(R5) ;SET WAITING TO SELECT UNIT- MOVB #11,-(R0) ;STOP TRANSPORT (SELECT UNIT) $35$: BIT #100200,(R0) ;SELECT ERROR? BMI 40$ ;IF MI YES# BEQ 35$ ;IF EQ DRIVE NOT SELECTED;2 BIC #WAIT,U.CW2(R5) ;CLEAR WAITING TO SELECT UNIT; MOVB S.ITM(R4),S.CTM(R4) ;SET CUR00UlIlkkTADATADATADATADATADATARENT DEVICE TIMEOUT COUNTT% CALL $BMSET ;INDICATE I/O IS ACTIVE)3 BISB #S3.SIP,S.ST3(R4) ;;;SHOW SEARCH IN PROGRESSH( MOVB #103,(R0) ;START SEARCH FOR BLOCK.;CH; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUH; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDIT3; THAT COULD EXIST IN RESTARTING THE I/O OPERATION.I;$DTPWF: RETURN ;$; ; OUTPUT SELECT ERROR MESSAGEA;U840$: MOV #T.NDSE,R0 ;SET FOR DEVICE SELECT ERROR MESSAGE6 MOVB #1,S.CTM(R4) ;RESET CURRENT DEVICE TIMEOUT COUNT( DECB S.STS(R4) ;TIME TO OUTPUT MESSAGE? BNE DTPWF ;IF NE NO = MOVB #15.,S.STS(R4) ;SET TO OUTPUT NEXT MESSAGE IN 15. SECON  CALLR $DVMSG ;OUTPUT MESSAGE;IB; CANCEL I/O OPERATION - FORCE I/O TO COMPLETE IF DEVICE NOT READY;T4DTCAN: CMP R1,I.TCB(R0) ;;;REQUEST FOR CURRENT TASK? BNE 50$ ;;;IF NE NOE9 BIS #ABRT,U.CW2(R5) ;;;SET FOR ABORT IF DEVICE NOT READYR50$: RETURN ;;;;M@; DEVICE TIMEOUT USUALLY OCCURS BECAUSE THE DRIVER IS WAITING TOB; SELECT A UNIT. TIMEOUTS MAY ALSO OCCUR AS A RESULT OF A HARDWARE; FAILURE OR A POWERFAILURE.;E1DTOUT: MOV S.PKT(R4),R1 ;;;GET I/O PACKET ADDRESSE4 BITB #IQ.UMD,I.FCN(R1) ;;;DIAGNOSTIC FUNCTION CALL? BNE 165$ ;;;IF NE YESF. MOV U.CW2(R5),R1 ;;;WAITING TO SELECT A UNIT? BMI 55$ ;;;IF MI YES# CALL $DTOER ;;;LOG DEVICE TIMEOUT$(55$: MTPS #0 ;;;ALLOW DEVICE INTERRUPTS4 MOV #IE.ABO&377,R0 ;ASSUME REQUEST IS TO BE ABORTED ASL R1 ;ABORT REQUEST? BPL 30$ ;IF PL NOH JMP 190$ ;ABORT REQUESTE;+-; **-$DTINT-TC11 DECTAPE CONTROLLER INTERUPTS ;-8 INTSE$ DT,PR6,T$$C11 ;;;SAVE REGISTERS AND SET PRIORITY MOV R3,-(SP) ;;;SAVE R38 MOV U.SCB(R5),R3 ;;;GET ADDRESS OF STATUS CONTROL BLOCK> MOVB S.ITM(R3),S.CTM(R3) ;;;RESET CURRENT DEVICE TIMEOUT COUN4 MOV S.CSR(R3),R3 ;;;GET ADDRESS OF COMMAND REGISTER+ TSTB RTTBL(R4) ;DIAGNOSTIC READ BLOCK NO.?D BMI 150$ ;IF MI YES#* BIT #2,(R3) ;;;BLOCK SEARCH IN PROGRESS? BEQ 150$ ;;;IF EQ NO TST (R3) ;;;SEARCH ERROR?J BPL 70$ ;;;IF PL NOE TST -(R3) ;;;END ZONE? BMI 110$ ;;;IF MI YEST& BIT #20000,(R3)+ ;;;MARK TRACK ERROR?( BNE 120$ ;;;IF NE YES-TRY TO BYPASS IT860$: MOV #100000,U.PRM+2(R5) ;;;SET UNRECOVERABLE ERROR( BIC #100,(R3) ;;;CLEAR INTERRUPT ENABLE BR 160$ ;;;V070$: MOV 6(R3),-(SP) ;;;GET CURRENT BLOCK NUMBER5 CMPB U.BUF+1(R5),1(R3) ;;;MOVING IN FINAL DIRECTION?B BNE 80$ ;;;IF NE NO;* CMP (SP),U.PRM(R5) ;;;BLOCK NUMBER MATCH? BEQ 130$ ;;;IF EQ YES;380$: BIT #4000,(R3) ;;;MOVING IN FORWARD DIRECTION?I BEQ 90$ ;;;IF EQ YES% ADD #2,(SP) ;;;ADD TURN AROUND BIASB. CMP U.PRM(R5),(SP)+ ;;;TURN AROUND NECESSARY? BR 100$ ;;;R.90$: SUB #2,(SP) ;;;SUBTRACT TURN AROUND BIAS. CMP (SP)+,U.PRM(R5) ;;;TURN AROUND NECESSARY?100$: BLE 120$ ;;;IF LE NO & TST -(R3) ;;;POINT TO ERROR REGISTER-110$: TST (R3)+ ;;;POINT TO COMMAND REGISTERN DECB RTTBL+1(R4) ;;;DRIVE HUNG? BLT 60$ ;;;IF LT YES% MOV #4000,-(SP) ;;;GET DIRECTION BIT17 BIC (R3),(SP) ;;;.NOT.COMMAND REGISTER.AND.DIRECTION BA8 BIC #4000,(R3) ;;;.NOT.DIRECTION BIT.AND.COMMAND REGIST4 BIS (SP)+,(R3) ;;;DIRECTION BIT.OR.COMMAND REGISTER"120$: INC (R3) ;;;CONTINUE SEARCH) MOV U.SCB(R5),R4 ;;;RETREIVE SCB ADDRESS BR 140$ ;;;M2130$: TST (SP)+ ;;;REMOVE BLOCK NUMBER FROM STACK, MOV U.SCB(R5),R4 ;;;RETRIEVE ADDRESS OF SCB4 BICB #S3.SIP,S.ST3(R4) ;;;RESET SEARCH IN PROGRESS0 MOV U.BUF(R5),(R3) ;;;START READ/WRITE FUNCTION 140$: MOV (SP)+,R3 ;;;RESTORE R3. BIS #S2.ACT,S.ST2(R4) ;;;SET I/O ACTIVE FLAG RETURN ;;;O.150$: BICB #100,(R3) ;;;CLEAR INTERRUPT ENABLE TST (R3) ;;;ANY ERRORS?( BPL 160$ ;;;IF PL NO ERRORS , MOV -(R3),U.PRM+2(R5) ;;;SAVE ERROR STATUS 160$: MOV (SP)+,R3 ;;;RESTORE R3' CALL $FORK ;;;CREATE A SYSTEM PROCESS " MOV R4,R3 ;COPY CONTROLLER INDEX6 MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK2 MOV S.CSR(R4),R2 ;GET ADDRESS OF COMMAND REGISTER1 MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL COMPLETION ) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSR2 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION CALL?165$: 00]lI_l"al8blBNE 180$ ;IF NE YES* MOV U.PRM+2(R5),R1 ;RETREIVE ERROR STATUS BEQ 180$ ;IF EQ SUCCESS CALL $DVERR ;LOG DEVICE ERRORR" BIT #63000,R1 ;RECOVERABLE ERROR? BEQ 170$ ;IF EQ NO" DECB RTTBL(R3) ;ANY MORE RETRIES? BLE 170$ ;IF LE NO' MOVB #8.,RTTBL+1(R3) ;RESET ROCK COUNT  JMP 30$ ;TRY AGAIN3170$: MOV #IE.WLK&377,R0 ;ASSUME DRIVE WRITE LOCKEDM# BIT #10000,R1 ;DRIVE WRITE LOCKED?C BNE 180$ ;IF NE YESR( MOV #IE.VER&377,R0 ;UNRECOVERABLE ERROR3180$: MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS82 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION CALL? BEQ 187$ ;IF EQ NO+ CALL $CRPAS ;PASS UNIBUS DEVICE REGISTERSR/187$: MOV U.CNT(R5),R1 ;GET ORIGINAL BYTE COUNT;3 ADD 2(R2),R1 ;CALCULATE NUMBER OF BYTES TRANSFERED0 ADD 2(R2),R1 ;V%190$: MOVB #11,(R2) ;STOP TAPE MOTIONJ/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNTU/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTT(195$: CALL $IODON ;FINISH I/O OPERATION JMP DTINI ;GO AGAINR .DSABL LSB8 .END.T(R4),R1 ;RETREIVE I/O PACKET AD .TITLE DUDRV - MSCP DRIVER0;R; ;><; COPYRIGHT (c) 1985, 1987 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;h;gJ; THIS DEFINES THE SYMBOL NEEDED TO DO CONDITIOANL ASSEMBLY OF DISK CLASS B; DRIVERS. IF THE SYMBOL IS DEFINED, THEN DISK CLASS IS SELECTED.;;V;P; MODIFIED BY:; G. MARIGOWDA;; GMG101 ADD SYMBOLS NEEDED FOR FORMATTING SUPPORT V1.1.;L;U%D$$DSK=0 ;ASSEMBLE DISK CLASS ITEMS ;5.; FUNCTION LENGTHS FOR DISK SPECIFIC FUNCTIONS;H,RD.L = 20 ;# WORDS TO ALLOCATE FOR RD CMD,WR.L = 20 ;# WORDS TO ALLOCATE FOR WR CMD.RPL.L = 20 ;# WORDS TO ALLOCATE FOR RPL CMD-FMT.L = 20 ;#WORDS TO ALLOCATE FOR FMT CMDO;I%M.SWL = 100 ;SOFTWARE WRITE LOCKEDRS. IF THE SYMBOL IS DEFINED, THEN DISK CLASS IS SELECTED.;;V;P; MODIFIED BY:; G. MARIGOWDA;; GMG101 ADD SYMBOLS NEEDED FOR FORMATTING SUPPORT V;?; DUPRE.MAC - PREFIX FILE FOR BUILDING DU LOADABLE CRASH DRIVERO;p; Created 11-JAN-88O;*C$$CDA=0 ; LOADABLE CRASH DRIVER SUPPORT3L$$CDA=0 ; LOADABLE CRASH DRIVERS TO BE ASSEMBLEDDU$$CD=0 ; CRASH DRIVER IS DURIVERS TO BE ASSEMBLEDDL$$CD=0 ; CRASH DRIVER IS DU .TITLE DVINTT .IDENT /03.01/R ;TC; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;P<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; P. J. BEZEREDI 04-OCT-77;F; +; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:I; ; P. J. BEZEREDI; ; T. LEKASM; ;+; MODIFIED BY:;E; J. W. BERZLE 07-SEP-83 03.00; 2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES;E ; B. S. MCCARTHY 30-MAy-84 03.01;/; BM309 -- STREAMLINE PORCESSING OF INTERRUPTSL;U;E;C;OB; OVERLAPPED SEEK/MIXED MASSBUS/LOADABLE DRIVER INTERRUPT ROUTINES1; FOR RH11/RH70(DB,DR,DS,MM,MF,EM) AND RK611(DM). ;O; MACRO LIBRARY CALLSF;C1 .MCALL DCBDF$,HWDDF$,KRBDF$,PCBDF$,SCBDF$,BGCK$A DCBDF$ ;DEFINE DCB OFFSETSS$ HWDDF$ ;DEFINE HARDWARE REGISTERS KRBDF$ ;DEFINE KRB OFFSETSI# PCBDF$ ;DEFINE PARTITION OFFSETS0 SCBDF$ ;DEFINE SCB OFFSETSH;A; EQUATED SYMBOLSD; ;RH11/70 REGISTER OFFSETS./RHCS2= 10 ;OFFSET TO CONTROL STATUS RGISTER 2R0RHAS= 16 ;OFFSET TO ATTENTION SUMMARY REGISTER)RHDT= 26 ;OFFSET TO DRIVE TYPE REGISTER  ;RK611 REGISTER OFFSETS)0RKCS2= 10 ;OFFSET TO CONTROL STATUS REGISTER 2/RKAS= 16 ;OFFSET TO ATTENTION/OFFSET REGISTER&IE= 100 ;INTERRUPT ENABLE BIT IN CSR CERR= 100000 ;ERROR BIT IN CSRRDY= 200 ;READY BIT IN CSR;+@; THIS MACRO DEFINES THE CODE USED TO SET THE INTERRUPT PRIORITYB; AND CALCULATE THE CONTRO008elIlkkTADATADATADATADATADATALLER INDEX. ON NON D-SPACE SYSTEMS, THEA; ROUTINE $INTSE IS CALLED. FOR D-SPACE SYSTEMS, CODE TO EMULATETB; THE ROUTINE $INTSE IS USED TO LOAD THE NEW PRIORITY DIRECTLY AND4; THEN RETURN BACK INTO THE MAINLINE CODE IN $INTSE.;CA; NOTE: CHANGES TO THIS MACRO MUST FOLLOW ANY CHANGES IN THE CODEG9; IN $INTSE (SYSXT) AND THE CLOCK INTERRUPT CODE (TDSCH).0;- .MACRO INTSAV .IF NDF K$$DAS - JSR R5,$INTSE ;;;CALL INTERRUPT SAVE ROUTINES) .WORD ^C&PR7 ;;;NEW PRIORITY IS PR5C .IFF 0 JSR R5,(PC) ;;;SAVE R5 WITHOUT DISTURBING CC'S0 JSR R4,(PC) ;;;SAVE R4 WITHOUT DISTURBING CC'S/ MFPS R4 ;;;GET PSW INCLUDING CONTROLLER INDEXD/ BIC #^C<17>,R4 ;;;ISOLATE THE CONTROLLER INDEXK ASL R4 ;;;MAKE IT A WORD INDEX DEC $STKDP ;;;SWITCH STACKS?51$: BIC #^C&PR7,@#PS ;;;SET NEW PRIORITY TO PR5S+ CACHE$ SAVE ;;;SAVE BYPASS STATE OF CACHE4 MOV #$INTSF,-(SP) ;;;SET TO RETURN BACK INTO $INTSE .ENDC .ENDM INTSAV ;+'; **-$RHALT-RH11/RH70 INTERRUPT HANDLERC;C; THIS ROUTINE IS ENTERED DIRECTLY VIA AN RH11/70 INTERRUPT VECTOR.PD; USING THE CONTROLLER INDEX, THE KRB OF THE INTERRUPTING RH11/70 ISB; FOUND. IF THE INTERRUPT WAS FROM A DATA TRANSFER OPERATION, THEF; INITIAL ATTENTION BIT SCAN IS BYPASSED AND A FORK BLOCK IS QUEUED TOF; THE DRIVER. IF THE INTERRUPT WAS CAUSED BY A POSITIONING OPERATION,E; THE CURRENT ACTIVE ATTENTION BITS ARE USED TO INDEX INTO A TABLE OF D; UCB ADDRESSES AND A CALL IS MADE TO THE PROPER UNIT'S DRIVER WHICHE; THEN IMMEDIATELY $FORK AND RETURN HERE WHERE THE NEXT ATTENTION BITNC; WILL BE TESTED. WHEN ALL EIGHT ATTENTION BITS HAVE BEEN TESTED AUF; CHECK IS MADE TO SEE IF ANY ATTENTIONS MAY HAVE COME UP. IF SO, THEA; ALGORITHM IS REPEATED UNTIL NO ATTENTIONS BITS REMAIN SET. ALLLC; ATTENTIONS FROM UNITS WHICH ARE NOT CONFIGURED INTO THE DATA BASEI; WILL BE EXPLICITLY CLEARED.N;CE; IF THE RH CONTROLLER HAS A UNIT WHICH HAS SLAVE UNITS (TM02/03) THE G; ATTENTION WILL BE CLEARED BASED ON THE MASTER'S UNIT NUMBER (U.UNIT).$E; IF OVERLAPPED OPERATIONS ARE ENABLED AND NO DATA TRANSFER CURRENTLYWE; IS ACTIVE, THE MASTER'S DRIVER WILL BE CALLED WITH THE UCB FOUND INE; THE UCB LIST.S;Y ; INPUTS:U; NONE.,;E ; OUTPUTS:@; ATTENTION REGISTER CLEARED (ALL PENDING ATTENTIONS PROCESSED).;S5; ALL REGISTERS ARE PRESERVED (R4 AND R5 VIA $INTSE).I;- .IF DF R$$HDV0$RHALT::INTSAV ;;;CALL $INTSE AND SET PRIORITY MOV R3,-(SP) ;;;SAVE REGISTERS MOV R2,-(SP) ;;;... MOV R1,-(SP) ;;;... MOV R0,-(SP) ;;;...8 MOV $RHCTB(R4),R3 ;;;GET KRB OF INTERRUPTING CONTROLLER(5$: MOV (R3),R4 ;;;GET IT'S CSR ADDRESS4 ADD #RHAS,R4 ;;;POINT TO ATTENTION SUMMARY REGISTER5 BIT #KS.DIP,K.STS(R3) ;;;DATA TRANSFER IN PROGRESS?: BNE 80$ ;;;IF NE YES#10$: MOV R3,R5 ;;;COPY KRB ADDRESSS' ADD K.OFF(R3),R5 ;;;POINT TO UCB TABLER% TSTB (R4) ;;;ANY ATTENTIONS ACTIVE? % BNE 20$ ;;;IF NE ATTENTIONS WERE UPS&15$: MOV (SP)+,R0 ;;;RESTORE REGISTERS MOV (SP)+,R1 ;;;... MOV (SP)+,R2 ;;;... MOV (SP)+,R3 ;;;...* RETURN ;;;RETURN TO INTERRUPTED PROCESS;I%; ATTENTIONS WERE FOUND TO BE ACTIVE. ;;420$: MOV #177001,R1 ;;;PRESET ATTENTION SUMMARY MASK+25$: BITB R1,(R4) ;;;IS THIS ATTENTION UP?  BNE 40$ ;;;IF NE YES,30$: TST (R5)+ ;;;POINT TO NEXT UCB ADDRESS" CMP #-1,(R5) ;;;END OF UCB TABLE? BEQ 35$ ;;;IF EQ YES$ ASL R1 ;;;NO, SHIFT ATTENTION MASK- BCC 10$ ;;;IF CC ALL ATTENTION BITS SCANNED, TSTB (R4) ;;;ANY ATTENTIONS STILL PENDING? BEQ 15$ ;;;IF EQ NOP BR 25$ ;;;TRY THE NEXT ONE035$: SWAB R1 ;;;PUT REMAINING MASKS IN LOW BYTE1 BITB R1,(R4) ;;;UNCONFIGURED ATTENTIONS ACTIVE?: BEQ 10$ ;;;IF EQ NOE, MOVB (R4),R2 ;;;COPY ACTIVE ATTENTION BITS COMB R1 ;;;TOGGLE MASK BITS43 BICB R1,R2 ;;;ISOLATE UNCONFIGURED ATTENTION BITSB2 MOVB R2,(R4) ;;;DROP ALL UNCONFIGURED ATTENTIONS' BR 10$ ;;;TRY FOR MORE ATTENTION BITST;T8; AT THIS POINT WE ARE POINTING TO THE UCB ADDRESS OF AN; ACTIVE ATTENTION.T;I%40$: MOV (R5),R2 ;;;COPY UCB ADDRESSN$ BNE 45$ ;;;IF NE UCB REALLY EXISTS, MOVB R1,(R4) ;;;DROP008ml_l"al8bl THIS UNIT'S ATTENTION$ BR 30$ ;;;LOOP FOR MORE ATTENTIONS(45$: MOV U.SCB(R2),R2 ;;;GET SCB ADDRESS< BITB #S3.ATN,S.ST3(R2) ;;;WILL DRIVER CLEAR THE ATTENTION? BNE 50$ ;;;IF NE YES, MOVB R1,(R4) ;;;DROP THIS UNIT'S ATTENTION)50$: MOV (R5),R5 ;;;RETREIVE UCB ADDRESSO(55$: CALL MAPDRV ;;;MAP AND CALL DRIVER3 BIT #KS.DIP,K.STS(R3) ;;;DATA TRANSFER INTERRUPT?D BEQ 10$ ;;;IF EQ NOT>70$: BIC #KS.DIP,K.STS(R3) ;;;RESET DATA TRANSFER IN PROGRESS" BR 5$ ;;;TRY FOR MORE ATTENTIONS;4 ; DATA TRANSFER WAS IN PROGRESS.; 080$: MOV K.OWN(R3),R5 ;;;GET OWNER'S UCB ADDRESS$ MOV U.SCB(R5),R0 ;;;GET SCB ADDRESS< BITB #S3.ATN,S.ST3(R0) ;;;WILL DRIVER CLEAR THE ATTENTION? BNE 55$ ;;;IF NE YES. MOVB U.UNIT(R5),R2 ;;;GET OWNER'S UNIT NUMBER# ASL R2 ;;;CONVERT TO A WORD INDEXL5 MOV $BTMSK(R2),(R4) ;;;ALWAYS DROP OWNER'S ATTENTION)1 BITB #S3.SLV,S.ST3(R0) ;;;SLAVE UNIT SUPPORTED?N BNE 55$ ;;;IF NE YES3 MOV #70$,-(SP) ;;;ADDRESS TO RETRUN TO AFTER $FORK;) CALLR FRKDRV ;;;FAKE THE DRIVER'S $FORKE .ENDC;+-; **-$DMALT-RK611 RK06/RK07 INTERRUPT HANDLERA;EC; THIS ROUTINE IS ENTERED DIRECTLY FROM THE RK611 INTERRUPT VECTOR.;B; USING THE CONTROLLER INDEX, THE KRB OF THE INTERRUPTING RK611 ISH; FOUND. IF THE INTERRUPT WAS CAUSED BY THE CONTROLLER, THE POSITIONINGH; FLAG IN THE UNIT'S UCB IS TESTED TO SEE IF A DRIVE INTERRUPT IS FORTH-G; COMING. IT ONE IS, THE INTERRUPT IS DISMISSED. IF NOT, A FORK BLOCKPE; IS QUEUED TO THE DRIVER. AN INTERRUPT FROM THE DRIVE (USUALLY FROMED; A POSITIONING OPERATION) WILL CAUSE THE ATTENTION BITS ARE USED TOF; INDEX INTO A TABLE OF UCB ADDRESSES AND A CALL IS MADE TO THE PROPER ; DRIVER. S; C; IF AN UNCONFIGURED (IN THE DATA BASE) UNIT RAISES IT'S ATTENTION, C; WE WILL CRASH THE SYSTEM WITH R0 CONTAINING THE CURRENT ATTENTIONGE; BITS IN THE HIGH BYTE. THIS IS BECAUSE THE ONLY METHOD OF CLEARINGOD; AN ATTENTION IS TO SELECT AND CLEAR THE DRIVE AT THE DRIVER LEVEL.=; THIS CANNOT BE DONE BECAUSE THE UNIT HAS NO DATA STRUCTURE.Y;O ; INPUTS:I; NONE.P;T ; OUTPUTS:; NONE.T;T5; ALL REGISTERS ARE PRESERVED (R4 AND R5 VIA $INTSE).S;- .IF DF R$$6110$DMALT::INTSAV ;;;CALL $INTSE AND SET PRIORITY' MOV R3,-(SP) ;;;SAVE WORKING REGISTERSN MOV R2,-(SP) ;;;... MOV R1,-(SP) ;;;... MOV R0,-(SP) ;;;...8 MOV $DMCTB(R4),R3 ;;;GET KRB OF INTERRUPTING CONTROLLER(5$: MOV (R3),R4 ;;;GET IT'S CSR ADDRESS5 BIT #KS.DIP,K.STS(R3) ;;;DATA TRANSFER IN PROGRESS?  BNE 60$ ;;;IF NE YES) CLR R1 ;;;PRESET INITIAL ATTENTION MASK )10$: MOV (R3),R4 ;;;RETREIVE CSR ADDRESST MOV R3,R5 ;;;COPY KRB ADDRESSE' ADD K.OFF(R3),R5 ;;;POINT TO UCB TABLED1 MOV RKAS(R4),R0 ;;;GET ATTENTION/OFFSET REGISTER ' BIC #377,R0 ;;;ISOLATE ATTENTION BITSE% SWAB R0 ;;;PUT THEM IN THE LOW BYTE,% CMP R0,R1 ;;;ANY NEW ATTENTIONS UP?V BNE 20$ ;;;IF NE YES&15$: MOV (SP)+,R0 ;;;RESTORE REGISTERS MOV (SP)+,R1 ;;;... MOV (SP)+,R2 ;;;...$ MOV (R4),R3 ;;;GET CONTENTS OF CSR3 BIC #RDY!CERR,R3 ;;;CLEAR THE READY AND ERROR BITSI, BIS #IE,R3 ;;;SET THE INTERRUPT ENABLE BIT$ MOV R3,(R4) ;;;REENABLE INTERRUPTS! MOV (SP)+,R3 ;;;RESTORE REGISTERP* RETURN ;;;RETURN TO INTERRUPTED PROCESS;E%; ATTENTIONS WERE FOUND TO BE ACTIVE.;;O020$: BIC R1,R0 ;;;ISOLATE LATEST ATTENTION BITS& BIS R0,R1 ;;;SET LATEST BITS IN MASK,25$: ASR R0 ;;;IS THIS UNIT'S ATTENTION UP? BCS 40$ ;;;IF CS YES,30$: TST (R5)+ ;;;POINT TO NEXT UCB ADDRESS" CMP #-1,(R5) ;;;END OF UCB TABLE?$ BNE 25$ ;;;IF NE NO, TRY NEXT UNIT% TST R0 ;;;ANY ATTENTIONS REMAINING?E BEQ 10$ ;;;IF EQ NOB,35$: MOV R1,R0 ;;;GET LATEST ATTENTION BITSH BGCK$A BF.DVI,BE.FHW,FATAL ;;;UNCONFIGURED DEVICE RAISED ATTENTION BITS% BR .-2 ;;;DON'T TEMPT THE SYSTEM!!!I;;; WE FOUND AN ACTIVE ATTENTION.L;S)40$: MOV R5,R4 ;;;COPY UCB TABLE POINTER MOV (R5),R5 ;;;GET UCB ADDRESS, BEQ 35$ ;;;IF EQ UNIT NOT IN CONFIGURATION$ CALL MAPDRV ;;;MAP AND CALL DRIVER TST R0 ;;;ANY MORE ATTENTIONS? BEQ 10$ ;;;IF EQ NO ) MOV R4,R5 ;;;RETREIVE UCB TABLE POINTER  BR 30$ ;;;TRY FOR 008ulIlkkTADATADATADATADATADATAMORE;1 ; DATA TRANSFER WAS IN PROGRESS.;G060$: MOV K.OWN(R3),R5 ;;;GET OWNER'S UCB ADDRESS. BITB #3,U.CW2+1(R5) ;;;POSITIONING OPERATION? BEQ 65$ ;;;IF EQ NOP+ MOVB U.UNIT(R5),R2 ;;;RETREIVE UNIT NUMBERT! ASL R2 ;;;CONVERT TO WORD INDEXP0 MOV $BTMSK(R2),R2 ;;;GET CORRESPONDING BIT MASK$ SWAB R2 ;;;PUT IT IN THE HIGH BYTE1 BIT R2,RKAS(R4) ;;;IS OWNER'S ATTENTION BIT SET?2 BEQ 80$ ;;;IF EQ NO, CONTROLLER CAUSED INTERRUPT765$: MOV #80$,-(SP) ;;;ADDRESS TO RETURN TO AFTER $FORK ) CALLR FRKDRV ;;;FAKE THE DRIVER'S $FORKN>80$: BIC #KS.DIP,K.STS(R3) ;;;RESET DATA TRANSFER IN PROGRESS# BR 5$ ;;;TRY FOR OTHER ATTENTIONS  .ENDC;+; **-MAPDRV-MAP AND CALL DRIVER); 9; THIS SUBROUTINE WILL SAVE THE CURRENT INTERRUPT CONTEXTP=; (R4 & R5), MAP THE DRIVER, SET THE ERROR LOGGING BITMAP AND;A; CALL THE DRIVER. THE DRIVER IS THEN UNMAPPED AND THE INTERRUPTB; CONTEXT IS RESTORED.;Q ; INPUTS:L-; R3 = KRB ADDRESS OF INTERRUPTING CONTROLLERD'; R5 = UCB ADDRESS OF INTERRUPTING UNITK; ; OUTPUTS:; R2 IS DESTROYED0;B; DRIVERS ARE CALLED WITH:; R3 = CURRENT KRB ADDRESS'; R4 = SCB ADDRESS OF INTERRUPTING UNIT'; R5 = UCB ADDRESS OF INTERRUPTING UNITD;- .IF DF R$$HDV!R$$611I(MAPDRV: MOV R4,-(SP) ;;;SAVE CSR ADDRESS' MOV U.SCB(R5),R4 ;;;GET ADDRESS OF SCBG( CMP R3,S.KRB(R4) ;;;DO THE KRB'S MATCH?- BNE 40$ ;;;IF NE NO, UNIT IS ON ANOTHER KRBO' MOV U.DCB(R5),R2 ;;;GET ADDRESS OF DCB=, MOV KINAR5,-(SP) ;;;SAVE KERNEL INSTR APR 5 U A .IF DF K$$DAS I+ MOV KDSAR5,-(SP) ;;;SAVE KERNEL DATA APR 5  .IFTF R, MOV D.PCB(R2),R4 ;;;GET DRIVERS PCB ADDRESS) BEQ 10$ ;;;IF EQ DRIVER IS PART OF EXEC59 MOV P.REL(R4),KINAR5 ;;;MAP DRIVER IN INSTRUCTION SPACEV $ .IFT D2 MOV P.REL(R4),KDSAR5 ;;;MAP DRIVER IN DATA SPACE  .IFTF E=10$: MOV D.DSP(R2),R4 ;;;GET ADDRESS OF DRIVER DISPATCH TABLE % BEQ 30$ ;;;IF EQ DRIVER IS UNLOADEDM: MOV D.VINT+2(R4),-(SP) ;;;GET DRIVER'S INTERRUPT ADDRESS, ADD #2,(SP) ;;;POINT TO SECOND ENTRY POINT) MOV U.SCB(R5),R4 ;;;RETREIVE SCB ADDRESST2 BIC #S2.ACT,S.ST2(R4) ;;;SHOW INTERRUPT INACTIVE# CALL @(SP)+ ;;;CALL PROPER DRIVERQ30$: ;;;REF LABEL  .IFTR R. MOV (SP)+,KDSAR5 ;;;RESTORE KERNEL DATA APR 5  .ENDC  V/ MOV (SP)+,KINAR5 ;;;RESTORE KERNEL INSTR APR 5 (40$: MOV (SP)+,R4 ;;;RESTORE CSR ADDRESSXIT: RETURN ;;;D;+,; **-FRKDRV-EMULATE A DRIVER'S CALL TO $FORK;;; THIS ROUTINE WILL SETUP THE STACK IN ORDER TO EMULATE THEA; DRIVER'S CALL TO $FORK.O;ED; NOTE: THIS ROUTINE ASSUMES THAT THE DRIVER IS LOADABLE AND LOADED.;; THIS IS DONE BECAUSE THIS ROUTINE IS ONLY CALLED FOR DATAR; TRANSFER INTERRUPTS.;F ; INPUTS:; R5 = UCB ADDRESS); (SP) = ADDRESS TO RETURN TO AFTER $FORK;N ; OUTPUTS:; FORK BLOCK QUEUEDR; R0, R1, AND R2 ARE DESTROYED;-+FRKDRV: MOV U.SCB(R5),R4 ;;;GET SCB ADDRESS + TST S.FRK+2(R4) ;;;IS THE FORK BLOCK BUSY?L* BNE XIT ;;;IF NE YES, DROP THE INTERRUPT$ MOV U.DCB(R5),R2 ;;;GET DCB ADDRESS- MOV D.PCB(R2),R1 ;;;GET DRIVER'S PCB ADDRESSE9 MOV D.DSP(R2),R2 ;;;GET ADDRESS OF DRIVER DISPATCH TABLE " MOV KISAR5,R0 ;;;SAVE KERNAL APR5% MOV P.REL(R1),KISAR5;;;MAP TO DRIVER: MOV D.VINT+2(R2),-(SP) ;;;GET DRIVER'S INTERRUPT ADDRESS& MOV R0,KISAR5 ;;;RESTORE APR5 MAPPING2 BIC #S2.ACT,S.ST2(R4) ;;;SHOW INTERRUPT INACTIVE& CALLR $FORK ;;;CREATE A FORK PROCESS .ENDC;+7; **-$RHKRB-RH11/RH70 CONTROLLER ONLINE/OFFLINE HANDLERY; ?; THIS ENTRY POINT WILL HANDLE RECONFIGURATION CALLS FOR ONLINEP@; CONTROLLER AND OFFLINE CONTROLLER FOR THE RH-TYPE CONTROLLERS.;E<; FOR ONLINE, IT WILL DETERMINE WHETHER THE CONTROLLER IS AN@; RH11 (I.E. IT HAS NO RHBAE/RHCS3 REGISTERS) AND THEREFORE MUST>; USE UNIBUS MAPPING REGISTERS, OR WHETHER IT IS AN RH70 (I.E.A; IT HAS RHBAE/RHCS3 REGISTERS) AND WILL SUPPORT DIRECT ACCESS TOC; A 22-BIT ADDRESS SPACE.K;O5; FOR OFFLINE, IT WILL SIMPLY CLEAR THE RH SUBSYSTEM.R;L ; INPUTS: ; R2=KRB ADDRESS.S; R3=CTB ADDRESS.A; C=1 IF OFFLINE REQUEST.F; C=0 IF ONLINE REQUEST.;O ; OUTPUTS:;; FOR 008}l_l"al8blONLINE, KS.MBC WILL BE SET IF RH70 CONTROLLER AND THE :; OFFSET FROM THE CSR TO THE RHBAE REGISTER WILL BE PLACED ; IN THE KRB.R0; FOR OFFLINE, THE RH SUBSYSTEM WILL BE CLEARED.;- .IF DF R$$HDV1$RHKRB::BCS CONCLR ;IF CS OFFLINE, JUST CLEAR RHN+ CALL CONCLR ;GET CSR ADDRESS AND CLEAR RHA- CALL $SGFIN ;TURN NXM'S INTO SET CARRY BITSL MOV R1,R4 ;COPY CSR ADDRESS- ADD #RHDT,R1 ;START WITH DRIVE TYPE REGISTERS710$: TST (R1)+ ;IS THE NEXT CONTROLLER REGISTER THERE? BCC 10$ ;IF CC YES' MOV #40,RHCS2(R4) ;CLEAR RH CONTROLLERL( SUB R4,R1 ;CALCULATE # OF REGISTERS *2 MOV R1,R0 ;SAVE REGISTER COUNT# ASR R1 ;CONVERT TO # OF REGISTERSU DEC R1 ;ADJUST REGISTER COUNT. BIS #KS.MBC,K.STS(R2) ;ASSUME WE ARE AN RH70/ MOV #$SCDVT,-(SP) ;SETUP TO SCAN DEVICE TABLESE,20$: CALL @(SP)+ ;GET NEXT DEVICE IN SYSTEM BCC 25$ ;IF CC WE GOT ONE4;C'; SET THE OFFSET TO THE RHBAE REGISTER.T;R2 BIT #FE.EXT,$FMASK ;IS 22-BIT ADDRESSING ENABLED? BEQ 21$ ;IF EQ NOE) ADD K.OFF(R2),R2 ;POINT TO KRB UCB TABLE) SUB #6,R0 ;POINT BACK TO RHBAE) MOV R0,KE.RHB(R2) ;STUFF OFFSET TO RHBAE 21$: RETURN ;ALL FINISHED ;O<; NOW THAT WE HAVE AN SCB, SEE IF IT IS CONNECTED TO THE KRB; THAT WE ARE BRINGING ONLINE.;E825$: BIT #S2.MAD,S.ST2(R4) ;IS THIS SCB MULTI-ACCESSED? BEQ 40$ ;IF EQ NOG" MOV R4,R5 ;YES, COPY SCB ADDRESS+ ADD #S.KTB,R5 ;POINT TO START OF KRB TABLEH'30$: MOV (R5)+,R3 ;GET NEXT KRB ADDRESSS BEQ 20$ ;IF EQ NONE LEFT& CMP R3,R2 ;DOES IT POINT TO OUR KRB? BNE 30$ ;IF NE NOC# BR 50$ ;YES, CHECK # OF REGISTERSR040$: CMP S.KRB(R4),R2 ;DOES IT POINT TO OUR KRB? BNE 20$ ;IF NE NON;E:; NOW WE HAVE THE CORRECT KRB. TEST FOR RH11/70 AND CLEAR; THE BIT IF WE ARE AN RH11.;O150$: CMPB R1,S.RCNT(R4) ;REGISTER COUNT FOR RH11?B BGT 20$ ;IF GT NOQ/ BIC #KS.MBC,K.STS(R2) ;YES, CLEAR MASSBUS BITE BR 20$ ;TRY FOR MORE .ENDC;+2; **-$DMKRB-RK611 CONTROLLER ONLINE/OFLINE HANDLER;2?; THIS ENTRY POINT WILL HANDLE RECONFIGURATION CALLS FOR ONLINEE=; CONTROLLER AND OFFLINE CONTROLLER FOR THE RK611 CONTROLLER.P;K@; FOR BOTH ONLINE AND OFFLINE THE CONTROLLER SUBSYSTEM IS SIMPLY>; CLEARED. THIS TURNS OFF ALL ERROR AND ATTENTION CONDITIONS.; ; INPUTS:N; R2=KRB ADDRESS.P; ALL OTHER REGISTERS IGNORED.; ; OUTPUTS:; CONTROLLER SUBSYSTEM CLEARED.S;- .IF DF R$$6112$DMKRB::BR CONCLR ;GO TO SUBSYSTEM CLEAR AND EXIT$ ;NOTE: THIS MAKES THE ASSUMPTION ; THAT RKCS2=RHCS2. .ENDC;+3; **-$RHPWF-RH11/RH70 CONTROLLER POWER FAIL HANDLERF/; **-$DMPWF-RK611 CONTROLLER POWER FAIL HANDLER ; >; THIS ROUTINE WILL HANDLE POWER FAILS FOR THE CONTROLLER. IT?; WILL SET THE SPIN UP BIT FOR THE PORT IF THE DEVICE IS MULTI- @; ACCESSED AND THE SOFTWARE VOLUME VALID BIT WAS PREVIOUSLY SET..; IT WILL THEN CLEAR THE CONTROLLER SUBSYSTEM.;>; POWER FAIL FOR EACH UNIT ON THE CONTROLLER IS HANDLED IN THE; RESPECTIVE DRIVERS. ;E;; NOTE: THIS ROUTINE MAKES THE ASSUMPTION THAT RKCS2=RHCS2.; ; INPUTS:-; R2=KRB ADDRESS.R;W ; OUTPUTS:; R1=CSR ADDRESS"; CONTROLLER SUBSYSTEM IS CLEARED.;- .IF DF R$$HDV!R$$611E$DMPWF:: ;RK611 POWER FAIL$RHPWF:: ;RH11/70 POWER FAIL/ MOV #$SCDVT,-(SP) ;SETUP TO SCAN DEVICE TABLESD,10$: CALL @(SP)+ ;GET NEXT DEVICE IN SYSTEM BCS CONCLR ;IF CS ALL DONE;NB; NOW THAT WE HAVE A DEVICE, SEE IF IT IS CONNECTED TO OUR KRB AND ; SEE IF IT NEEDS TO BE SPUN UP.;E820$: BIT #S2.MAD,S.ST2(R4) ;IS THIS SCB MULTI-ACCESSED? BEQ 10$ ;IF EQ NON, BITB #US.VV,U.STS(R5);WAS VOLUME VALID SET?$ BEQ 10$ ;IF EQ NO, FORGET THIS ONE+ BIT #KP.OFL,S.KTB(R4) ;IS PORT 'A' ONLINE? BNE 30$ ;IF NE NOO,; CMP R2,S.KTB(R4) ;IS THIS THE CORRECT KRB?; BNE 30$ ;IF NE NO7 BISB #S3.SPA,S.ST3(R4) ;YES, SET PORT 'A' SPINNING UPE230$: BIT #KP.OFL,S.KTB+2(R4) ;IS PORT 'B' ONLINE? BNE 10$ ;IF NE NOV.; CMP R2,S.KTB+2(R4) ;IS THIS THE CORRECT KRB?; BNE 10$ ;IF NE NO7 BISB #S3.SPB,S.ST3(R4) ;YES, SET PORT 'B' SPINNING UPI BR 10$ ;TRY FOR MORE;N6; RETREIVE CONTROLLER CSR AD008lNlkkTADATADATADATADATADATADRESS AND CLEAR SUBSYSTEM.; *CONCLR: MOV (R2),R1 ;RETREIVE CSR ADDRESS2 MOV #40,RHCS2(R1) ;CLEAR THE CONTROLLER SUBSYSTEM RETURN ;R .ENDC;+); **-$DMCSR-CHECK IF RK611 CSR IS PRESENT.-; **-$RHCSR-CHECK IF RH11/RH70 CSR IS PRESENT;:>; THIS ROUTINE WILL TEST THE CONTROLLER WORD COUNT REGISTER TO+; DETERMINE IF IT EXISTS ON THIS PROCESSOR.C;R ; INPUTS:0; R2=KRB ADDRESS; R3=CTB ADDRESS-; $SGFIN MUST HAVE BEEN CALLED BY OUR CALLER.R;O ; OUTPUTS:; C=0 IF CONTROLLER EXISTS"; C=1 IF CONTROLLER DOES NOT EXIST;- .IF DF R$$HDV!R$$611C!$DMCSR:: ;RK611 CONTROLLER TEST %$RHCSR:: ;RH11/RH70 CONTROLLER TEST MOV R4,-(SP) ;SAVE A REGISTER# MOV (R2),R4 ;RETREIVE CSR ADDRESS-. TST 2(R4) ;DO WE EXIST? (CHECKS WC REGISTER) MOV (SP)+,R4 ;RESTORE REGISTERO& RETURN ;RETURN WITH CARRY SET/CLEAR .ENDC .ENDSOR.C;R ; INPUTS:0; R2=KRB ADDRESS; R3=CTB ADDRESS-; $SGFIN MUST HAVE BEEN CALLED BY OUR CALLER.R;O ; OUTPUTS:; C=0 IF CONTROLLER EXISTS" .TITLE DXDRV4 .IDENT /06.02/C;LB; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;T<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;D; H. J. LEV 16-JAN-75B; P. J. BEZEREDI ; P. J. CARR; ; MODIFIED BY:T;D%; G. MARIGOWDA 4-AUG-86 V06.02T/; GM001 -- CONVERT TO USE EXEC VECTORINGR;;P!; RX01 - RX11 FLOPPY DISK DRIVER ;T; FUNCTIONS RECOGNIZED:#<; IO.RPB - READ PHYSICAL BLOCK (MAY READ ANY SECTOR ON DISK)>; IO.WPB - WRITE PHYSICAL BLOCK (MAY WRITE ANY SECTOR ON DISK)8; IO.WDD - WRITE DELETED DATA - WRITE ANY SECTOR ON DISK3; SETTING THE DELETED DATA MARK IN SECTOR HEADERH=; THE FOLLOWING TWO FUNCTION CODES OPERATE ON 256 WORD BLOCKSE;; OF DATA (4 SECTORS) THE DRIVER AUTOMATICALLY INTERLEAVESA4; AND SKEWS SECTORS TO OPTIMIZE THE TRANSFER OF DATA7; SO THAT A LONG READ/WRITE MAY BE DONE WITHOUT LOOSINGD7; A REVOLUTION OF THE DISK. THE INTERLEAVE FACTOR IS 2S; AND THE SKEW FACTOR IS 6.O,; IO.RLB - READ LOGICAL BLOCKS OF 256. WORDS.; IO.WLB - WRITE LOGICAL BLOCKS OF 256. WORDS.;T8; IF DELETED DATA IS READ, THE STATUS CODE RETURNED WILL#; BE IS.RDD, OTHERWISE IT IS IS.SUC ;L# .MCALL HWDDF$,PKTDF$,QIOSY$,SCBDF$ % HWDDF$ ; DEFINE HARDWARE REGISTERSE% PKTDF$ ; DEFINE I/O PACKET OFFSETSN QIOSY$E SCBDF$ ,,SYSDEF; ; EQUATED SYMBOLS ;TRETRY = 8. ; ERROR RETRY COUNTI-DXNUM = 4 ; NUMBER OF REGISTERS TO ERROR LOGE;R2; RX11 DEVICE REGISTER OFFSETS AND BIT DEFINITIONS;R#RXCS = 0 ; CONTROL STATUS REGISTERRXDB = 2 ; DATA BUFFERBUNIT = 20 ; UNIT SELECT BITDONE = 40 ; RX11 DONE INTEBL = 100 ; INTERRUPT ENABLE.TR = 200 ; RX11 TRANSFER READY BIT (CPU-SILO)INIT = 40000 ; INITIALIZE RX11D; ; FUNCTION CODES;IGO = 1 ; GO BITFILL = 0+GO ; FILL SILOEMPTY = 2+GO ; EMPTY SILOWRITE = 4+GO ; WRITE A SECTORREAD = 6+GO ; READ A SECTORRDSTS = 12+GO ; READ STATUS#WRTDD = 14+GO ; WRITE DELETED DATAD RDERC = 16+GO ; READ ERROR CODE;O!; STATUS REGISTER BIT DEFINITIONSS;GDD = 100 ; DELETED DATA READRDY = 200 ; UNIT READYB;O ; LOCAL DATA;O;H; CONTROLLER TABLE AND RETRY COUNT TABLE ( INDEXED BY CONTROLLER NUMBER);L9RTTBL: .BLKW R$$X11 ; ERROR RETRY COUNT FOR CURRENT UNITS$CSRSV: .BLKW R$$X11 ; CSR SAVE AREA;L; MAKE GTPKT$ A LOCAL MACRO ;O( .MACRO GTPKT$ DEV,NCTRLR,ADDR,UCBSV,SUC CALL @GTPKT .IF B BCC 65535$  RETURNR65535$:G .IFFI BCS ADDRD .ENDC .IF B  $$$=0 .IF B .IF EQ $$$S MOV R5,S.OWN(R4)S .ENDC .ENDC .IFFE .IF GT NCTRLR-1 MOV R5,UCBSV(R3)D .IFFO MOV R5,UCBSV .ENDC .ENDC .ENDM;A$; EXECUTIVE ENTRY POINT VECTOR TABLE;L1EXEVEC: .WORD 0 ; FLAG FOR VECTOR NOT YET FILLEDCALOCB: .WORD $ALOCBBMSET: .WORD $BMSET;DEACB: .WORD $DEACB DTOER: .WORD $DTOERADVERR: .WORD $DVERRKERRSQ: .WORD $ERRSQBFORK: .WORD $FORKTGTPKT: .WORD $GTPKTCIODON: .WORD $IODON5VOLVD: .WORD $00Nl_l"al8blVOLVDA;DKISR6: .WORD KISAR6S;EXEVCL=<<<.-EXEVEC>/2>-1>E;$;; DRIVER DISPATCH TABLEC;./ DDT$ DX,R$$X11,,,,NEW ;GENERATE DISPATCH TABLED;+/; *** - DXINI FLOPPY DISK CONTROLLER INITIATOR ;CD; THIS ROUTINE IS ENTERED FROM THE QIO DIRECTIVE WHEN AN I/O REQUESTG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPOGATE THEOD; EXECUTION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY,E; THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST. OTHERWISEH; A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSF; THE NEXT I/O OPERATION IS INITIATED. A RETURN TO THE CALLER IS THEN ; EXECUTED. ;L ; INPUTS: B; R5 - ADDRESS OF UCB WHICH IS ASSOCIATED WITH CONTROLLER TO BE IN;N ; OUTPUTS:<; IF THE CONTROLLER ASSOCIATED WITH THE SPECIFIED UCB IS NOTA; BUSY AND AN I/O REQUEST IS WAITING TO BE PROCESSED, THE REQUESTE>; IS DEQUEUED AND THE DRIVER INITIATES THE REQUESTED FUNCTION.;P;- .ENABL LSBE8DXINI: GTPKT$ DX,R$$X11 ; GET NEXT I/O PACKET TO PROCESS;I0; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT; ; R1 - ADDRESS OF THE I/O PACKET@; R2 - PHYSICAL UNIT NUMBER OF THE DEVICE TO PERFORM FUNCTION ON*; R3 - CONTROLLER NUMBER MULTIPLIED BY TWO; R4 - ADDRESS OF SCB7; R5 - ADDRESS OF UCB FOR DEVICE TO PERFORM FUNCTION ONF; ,; RX11 FLOPPY DISK I/O REQUEST PACKET FORMAT;T!; WD. 00 -- I/O QUEUE THREAD WORDD/; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERN1; WD. 02 -- ADDRESS OF TCB OF THE REQUESTING TASK1A; WD. 03 -- POINTER TO SECOND LUN WORD OF REQUESTING TASKS HEADER 5; WD. 04 -- CONTENTS OF FIRST LUN WORD ( UCB ADDRESS)AA; WD. 05 -- I/O FUNCTION CODE (IO.RLB, IO.RPB, IO.WLB, OR IO.WPB) /; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK /; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCKEB; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT +1400002; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE*; WD. 12 -- RELOCATION BIAS OF DATA BUFFER*; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER'; WD. 14 -- NUMBER OF BYTES TO TRANSFERN; WD. 15 -- NOT USED (IGNORED)5; WD. 16 -- LOW BYTE MUST BE ZERO, HIGH BYTE NOT USEDD,; WD. 17 -- LOGICAL OR PHYSICAL BLOCK NUMBER; WD. 20 -- NOT USED;B%; DRIVER USAGE OF WORDS IN I/O PACKETS5; I.PRM+6 (WD. 15) - STATUS REGISTER AFTER INTERRUPT 7; I.PRM+10 (WD. 16) - LOGICAL OR PHYSICAL SECTOR NUMBERP-; I.PRM+12 (WD. 17) - SIZE OF "THIS" TRANSFERF4; I.PRM+14 (WD. 20) - PHYSICAL SECTOR NUMBER (1-26.)3; I.PRM+15 (WD. 20) - PHYSICAL TRACK NUMBER (0-77.)R; ; ; INITIALIZE DRIVER ;T+10$: MOV #RETRY,RTTBL(R3) ; SET RETRY COUNTD% CALL @VOLVD ; VALIDATE VOLUME VALIDE BCS 16$ ; IF CS WE FAILEDA TST R0 ; TRANSFER FUNCTION?D BPL 16$ ; IF PL NO* TSTB I.PRM+10(R1) ; HIGH BLOCK SPECIFIED? BEQ 20$ ; NO15$: JMP 180$ ; YES, ERRORR16$: JMP 210$ ; EXIT6; %; SET UP FIRST BLOCK OR SECTOR NUMBER.;+?20$: MOV I.PRM+12(R1),R0 ; GET PHYSICAL OR LOGICAL BLOCK NUMBERS/ MOV #128.,I.PRM+12(R1) ; PRESET TRANSFER SIZE 7 BITB #IO.RPB&377,I.FCN(R1) ; PHYSICAL BLOCK FUNCTION?E BNE 30$ ; YES#+ ASL R0 ; CONVERT TO LOGICAL SECTOR NUMBERL ASL R0 ; WHICH IS LBN*4E#30$: MOV R0,I.PRM+10(R1) ; STORE ITR) MOV #RDSTS,R0 ; GET READ STATUS FUNCTION  TSTB U.UNIT(R5) ; UNIT 1? BEQ 31$ ; IF EQ NO( BIS #UNIT,R0 ; YES, SET UNIT SELECT BIT231$: MOVB S.CON(R4),R3 ; RETREIVE CONTROLLER INDEX& MOV R0,CSRSV(R3) ; SAVE THIS FUNCTION* MOVB #2,RTTBL+1(R3) ; FLAG THE GET STATUS( MOV S.CSR(R4),R2 ; RETREIVE CSR ADDRESS! MOV R0,(R2) ; DO THE GET STATUS( JMP 155$ ; START THE FUNCTION.32$: MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS) BIT #RDY,I.PRM+6(R1); IS THE UNIT READY? BNE 35$ ; IF NE YES)&33$: CALL LOGERR ; LOG UNIT NOT READY3 MOV #IE.DNR&377,R0 ; SET UNIT NOT READY ERROR CODE$ JMP 200$ ; GOOD-BYE!.35$: MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS/ CALL TRKSEC ; CONVERT BLOCK # TO TRACK/SECTOR(" BCS 15$ ; IF CS BAD BLOCK NUMBER& MOV S.CSR(R4),R2 ; GET ADDRESS OF CSR1 CMPB #IO.WLB/256.,I.FCN+1(R3) ; WRITE FUNCTION?  BNE 140$ ;IF NE NO;1; FILL SILO BEFORE WRITE;26 C00NllkkTADATADATADATADATADATAALL SETBUF ; SET UP BUFFER POINTER AND MAPPING REGI, MOV #FILL,(R2) ; SET "FILL BUFFER" FUNCTION)70$: CLR R3 ; ASSUME NO DATA TO TRANSFERT! DEC R1 ; MORE DATA TO TRANSFER?N BLT 74$ ; NO# MOVB (R0)+,R3 ; YES, GET NEXT BYTE:*74$: BITB #TR!DONE,(R2) ; CONTROLLER DONE? BMI 75$ ; IF MI YES  BEQ 74$ ; IF EQ NO BR 90$ ; SILO IS FULL -75$: MOVB R3,RXDB(R2) ; PUT NEXT BYTE IN SILOF& BR 70$ ; AND WAIT TILL IT'S ACCEPTED$90$: TST R1 ; ALL BYTES TRANSFERED? BMI 130$ ; IF MI YES%95$: JMP DXRTY ; RETRY LAST FUNCTIONE;O; EMPTY SILO AFTER READM;#3100$: MOV #EMPTY,(R2) ; SET "EMPTY BUFFER" FUNCTION;6 CALL SETBUF ; SET BUFFER POINTER AND MAPPING REGISTE+110$: BITB #TR!DONE,(R2) ; CONTROLLER DONE?S BMI 111$ ; IF MI YES BEQ 110$ ; IF EQ NOT BR 120$ ; SILO IS EMPTYF0111$: MOVB RXDB(R2),R3 ; GET NEXT BYTE FROM SILO DEC R1 ; DO WE WANT IT?2 BLT 110$ ; NO & MOVB R3,(R0)+ ; YES, PUT IT IN BUFFER BR 110$ ; GET NEXT BYTEL%120$: TST R1 ; ALL BYTES TRANSFERED?Y BGT 95$ ; IF GT ERRORR* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS% CALL NXTSEC ; UPDATE TO NEXT SECTORP BNE 35$ ; IF NE CONTINUE JMP 193$ ; FINISHEDI;R); INITIATE TRANSFER BETWEEN SILO AND DISKR;;/130$: MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS1& MOV #WRITE,R0 ; ASSUME WRITE FUNCTION& MOV I.FCN(R3),R1 ; COPY FUNCTION CODE# BIC #7,R1 ; REMOVE QUALIFIER BITS % CMP #IO.WDD,R1 ; WRITE DELETED DATA?; BNE 141$ ; IF NE NO2 MOV #WRTDD,R0 ; SET "WRITE DELETED DATA" FUNCTION BR 141$ ;Y&140$: MOV #READ,R0 ; SET READ FUNCTION141$: TSTB U.UNIT(R5) ; UNIT 1?C BEQ 142$ ; IF EQ YES) BIS #UNIT,R0 ; YES, SET TO SELECT UNIT 1J3142$: MOVB S.CON(R4),R1 ; RETREIVE CONTROLLER INDEX 1 MOV R0,CSRSV(R1) ; SAVE FUNCTION AND UNIT NUMBERO CLRB RTTBL+1(R1) ; RESET FLAGS;% MOV R0,(R2) ; INITIATE THE FUNCTIONR2143$: BITB #TR!DONE,(R2) ; TRANSFER READY OR DONE?! BMI 150$ ; IF MI TRANSFER READYE BEQ 143$ ; IF EQ LOOP;% BR 95$ ; ERROR, NO TRANSFER REQUEST 6150$: MOVB I.PRM+14(R3),RXDB(R2) ; LOAD SECTOR NUMBER2151$: BITB #TR!DONE,(R2) ; TRANSFER READY OR DONE?! BMI 152$ ; IF MI TRANSFER READYN BEQ 151$ ; IF EQ LOOPT% BR 95$ ; ERROR, NO TRANSFER REQUESTR5152$: MOVB I.PRM+15(R3),RXDB(R2) ; LOAD TRACK NUMBERO3155$: MOVB S.ITM(R4),S.CTM(R4) ; SET TIME OUT COUNT' CALL @BMSET ;SET I/O ACTIVE IN BITMAP4* BIS #INTEBL,(R2) ;;; SET INTERRUPT ENABLE;+*; DXKRB-CONTROLLER ONLINE/OFFLINE ROUTINE;;;-%DXKRB: BCS 2$ ;IF CS OFFLINE REQUEST  TST EXEVEC ;IF ALREADY DONE3 BNE 2$ ;SKIP THISC MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) ;SAVE R3 MOV KINAR6,-(SP) ;SAVE KINAR6. MOV @#112,R0 ;GET ADDRESS OF TABLE OF ENTRIES: MOV (R0),R0 ;GET ADDRESS OF APR BIAS (1ST WORD IN TABLE)1 MOV (R0),KINAR6 ;MAP COMMON THROUGH I-SPACE APR6R MOV #EXEVEC,R3 ;POINT TO VECTOR) MOV #EXEVCL,R2 ;SPECIFY LENGTH OF VECTOR$ CALL @#140004 ;TRANSLATE THE VECTOR! MOV (SP)+,KINAR6 ;RESTORE KINAR6I MOV (SP)+,R3 ;RESTORE R3 MOV (SP)+,R2 ;RESTORE R2N 2$: RETURN ; DXPWF - POWER FAIL ENTRY POINT;; POWER FAIL IS HANDLED BY THE DEVICE TIMING OUT, THEREFORE ;; NO WNRK IS DNNE HERE. IT WILL BE HANDLED WHEN THE DEVICES; TIME OUT ENTRY IS EXECUTED.,; DXPWF:;O; UNIT STATUS CHANGE ROUTINEDXUCB:;I ; DXCAN - CANCEL I/O ENTRY POINT4; CANCEL I/O IS A NOP OP FOR FILE STRUCTURED DEVICES;SDXCAN: RETURN ;C;+8; *** - $DXINT - RX11 FLOPPY DISK INTERRUPT ENTRY POINT;O;-6 INTSE$ DX,PR5,R$$X11 ;;; GENERATE INTERRUPT SAVE CODE MOV R3,-(SP) ;;; SAVE REGISTERO% MOV U.SCB(R5),R4 ;;; GET SCB ADDRESSA, MOV S.PKT(R4),R3 ;;; GET I/O PACKET ADDRESS% MOV S.CSR(R4),R4 ;;; GET CSR ADDRESSE5 MOV RXDB(R4),I.PRM+6(R3) ;;; SAVE CONTROLLER STATUS" MOV (SP)+,R3 ;;; RESTORE REGISTER( BIC #INTEBL,(R4) ;;; DISABLE INTERRUPTS( CALL @FORK ;;; CREATE A SYSTEM PROCESS MOV R4,R2 ; COPY CSR ADDRESS# MOV U.SCB(R5),R4 ; GET SCB ADDRESST) MOVB S.CON(R4),R3 ; GET CONTROLLER INDEX TST (R2) ; ANY ERRORS? BPL 160$ ; IF PL NOU+ BITB #2,RTTBL+1(R3) ; GET STATUS FUNCTION?O BEQ 156$ ; IF EQ NO  JMP 33$ ; DRIV00Nl_l"al8blE NOT READYR%156$: CALL LOGERR ; LOG DEVICE ERRORS BR DXRTY ; RETRY FUNCTIONS3160$: BITB #1,RTTBL+1(R3) ; INITIALIZE IN PROGRESS?A BNE 170$ ; IF NE YES+ BITB #2,RTTBL+1(R3) ; GET STATUS FUNCTION?L BEQ 161$ ; IF EQ NOR! JMP 32$ ; TEST IF UNIT IS READYV4161$: MOV S.PKT(R4),R3 ; RETREIVE I/O PACKET ADDRESS' CMPB #IO.RLB/256.,I.FCN+1(R3) ; READ?R BNE 165$ ; IF NE NO  JMP 100$ ; GO EMPTY SILO*165$: CALL NXTSEC ; UPDATE TO NEXT SECTOR BEQ 195$ ; ALL DONE 170$: JMP 35$ ; WRITE MORE DATA.180$: MOV #IE.BLK&377,R0 ; SET BAD BLOCK ERROR BR 210$ ;;2190$: MOV #IE.VER&377,R0 ; SET UNRECOVERABLE ERROR BR 200$ ;EA193$: BITB #IO.RPB&377,I.FCN(R3) ; READ PHYSICAL BLOCK FUNCTION?C. BEQ 195$ ; NO, THEN IGNORE DELETED DATA MARK: MOV #IS.RDD&377,R0 ; YES, DEFAULT ON READ TO DELETED DATA- BIT #DD,I.PRM+6(R3) ; WAS DELETED DATA READ?  BNE 200$ ; YES1195$: MOV #IS.SUC&377,R0 ; NO, SET NORMAL SUCCESSL/200$: MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESSL* MOV I.PRM+4(R1),R1 ; SET BYTES TRANSFERED7 SUB U.CNT(R5),R1 ; CALCULATE BYTES ACTUALLY TRANSFERED;. MOVB S.CON(R4),R3 ; RETREIVE CONTROLLER INDEX* MOVB RTTBL(R3),R2 ; SET FINAL RETRY COUNT- BIS #RETRY*256.,R2 ; SET INITIAL RETRY COUNTQ210$: CALL @IODON ; SET DONED% JMP DXINI ; TRY FOR ANOTHER REQUESTD;U;+/; *** - DXOUT - FLOPPY DISK TIMEOUT ENTRY POINTS;-*DXOUT: CALL LOGTMO ;;; LOG DEVICE TIMEOUT;U; RETRY LAST FUNCTIONA;U3DXRTY: MOVB S.CON(R4),R3 ; RESTORE CONTROLLER INDEXS* MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS( BITB #IQ.X,I.FCN(R1) ; INHIBIT RETRIES? BNE 190$ ; IF NE YES# DECB RTTBL(R3) ; ANY RETRIES LEFT?I BEQ 190$ ; NO, ERROR6 MOVB #1,RTTBL+1(R3) ; YES, SET INITIALIZE IN PROGRESS) MOV #INIT,CSRSV(R3) ; SAVE FUNCTION CODED( MOV #INIT,(R2) ; INITIALIZE RX01 DRIVES JMP 155$ ; AND DO IT .DSABL LSBS;+; **-LOGERR-LOG DEVICE ERROR; **-LOGTMO-LOG DEVICE TIMEOUT;T=; THESE ROUTINES WILL ALLOCATE A CORE BLOCK, FILL IT WITH THER<; REGISTER INFORMATION, CALL THE APPROPRIATE EXECUTIVE ERROR@; LOGGING ROUTINE, DEALLOCATE THE CORE BLOCK, AND RETURN BACK TO ; THE CALLER.T;( ; INPUTS:E; R3=CONTROLLER INDEX ; R4=SCB ADDRESS; R5=UCB ADDRESS;S ; OUTPUTS:; R2=CSR ADDRESS; R4=SCB ADDRESS; R5=UCB ADDRESS;D; R0, R1 AND R3 ARE DESTROYED.;- .ENABL LSB1*LOGERR: MOV DVERR,-(SP) ; LOG DEVICE ERROR BR 10$ ;.LOGTMO: MOV DTOER,-(SP) ;;; LOG DEVICE TIMEOUT610$: MOV #DXNUM*2,R1 ; GET NUMBER OF BYTES TO ALLOCATE( CALL @ALOCB ; ALLOCATE THE ERROR BLOCK BCC 20$ ; IF CC OK% INC @ERRSQ ; INDICATE A MISSED ERRO  CMP (SP)+,DTOER ; TIMEOUT?O BNE 30$ ; IF NE NO3 BIC #INTEBL,@S.CSR(R4) ;;; CLEAR INTERRUPT ENABLE MTPS #0 ;;; ALLOW INTERRUPTS BR 30$ ;)20$: MOV R0,R1 ; COPY CORE BLOCK ADDRESS( MOV S.CSR(R4),R2 ; RETREIVE CSR ADDRESS" MOV (R2),(R1) ; SAVE CSR CONTENTS+ BIS CSRSV(R3),(R1)+ ; SET BITS 0-4 IN RXCS  MOV RXDB(R2),(R1)+ ; SAVE RXDBT* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS# MOV I.PRM+6(R3),(R1)+ ; SAVE RXESE3 MOV #RDERC,(R2) ; EXECUTE READ ERROR CODE FUNCTION;&25$: BITB #DONE,(R2) ; WAIT UNTIL DONE BEQ 25$ ; IF EQ NO MOV RXDB(R2),(R1) ; SAVE RXER$ MOV R0,R2 ; GET CORE BLOCK ADDRESS CALL @(SP)+ ; LOG THE ERROR) MOV R2,R0 ; GET BACK CORE BLOCK ADDRESSC4 MOV #DXNUM*2,R1 ; GET NUMBER OF BYTES TO DEALLOCATE* CALL @DEACB ; DEALLOCATE THE ERROR BLOCK,30$: MOV S.CSR(R4),R2 ; RETREIVE CSR ADDRESS RETURN ; .DSABL LSBM;+>; *** - TRKSEC - CONVERT LOGICAL OR PHYSICAL BLOCK NUMBER TO; TRACK-SECTOR PAIRR3; FROM ALGORITHM BY J GILBERT MODIFIED BY H. JACOBSN;R; INPUT:; R3 - I/O PACKET ADDRESSE+; I.PRM+10(R3) - LOGICAL OR PHYSICAL SECTOR,; ; OUTPUT:B; I.PRM+14(R3) - SECTOR (1-26.) ; I.PRM+15(R3) - TRACK (0-77.); R3 - UNCHANGED; C CLEAR - VALID BLOCKG0; C SET - BAD BLOCK NUMBER (PHYSICAL OR LOGICAL);L;-;TRKSEC: MOV I.PRM+10(R3),R1 ; GET LOGICAL OR PHYSICAL BLOCKE MOV #8.,R0 ; SET LOOP COUNT MOV #6400,R2 ; SET DIVISORN*1$: CMP R2,R1 ; DOES 26 GO INTO DIVIDEND?! BHI 2$ ; BRANCH IF NOT, C CLEARM' SUB R00NllOlkTADATADATADATADATADATA2,R1 ; SUBTRACT 26 FROM DIVIDEND SEC ; SET CARRY)2$: ROL R1 ; SHIFT DIVIDEND AND QUOTIENTO DEC R0 ; DONE? BGT 1$ ; NO, LOOP. MOVB R1,R0 ; GET TRACK NUMBER. CLRB R1 ; CLEAR TRACK NUMBER$ SWAB R1 ; SHIFT DONE SECTOR NUMBER5 BITB #IO.RPB&377,I.FCN(R3) ; PHYSICAL BLOCK WANTED? BNE 10$ ; YES.% CMP #12.,R1 ; NO, C=1 IF 13<=R1<=25 ' ROL R1 ; DOUBLE FOR INTERLEAVE FACTORM ASL R0 ; ADD TRACK -TRACK SKEW ADD R0,R1 ; SKEW BY 2*TRACKD ADD R0,R1 ; SKEW BY 4*TRACK  ADD R0,R1 ; SKEW BY 6*TRACKT ASR R0 ; RESTORE TRACK NUMBERC MOV #26.,R2 ; SET MODULUSI55$: SUB R2,R1 ; MODULO SECTOR INTO RANGE -26. TO -1.O' BGE 5$ ; LOOP TILL REMAINDER GOES NEGR$ ADD R2,R1 ; CONVERT TO RANGE 0-25.! INC R0 ; LBN0 STARTS ON TRACK 1I%10$: INC R1 ; CONVERT TO RANGE 1-26.A) MOV R1,I.PRM+14(R3) ; SAVE SECTOR NUMBERO) MOVB R0,I.PRM+15(R3) ; SAVE TRACK NUMBER : CMP #77.*256.,I.PRM+14(R3) ; IS IT A VALID TRACK/SECTOR? RETURN ;B;+7; *** - NXTSEC - UPDATE BLOCK NUMBER , BUFFER ADDRESSB; AND BUFFER POINTER;O; INPUT:; R3 - I/O PACKET ADDRESS ; R5 - UCB ADDRESS%; I.PRM+10(R3) - CURRENT BLOCK NUMBER 6; I.PRM+12(R3) - BYTES TRANSFERED DURING LAST FUNCTION$; U.CNT(R5) - BYTES LEFT TO TRANSFER; U.BUF(R5) - BUFFER ADDRESS;I ; OUTPUT:N%; I.PRM+10(R3) - UPDATED BLOCK NUMBERR#; U.BUF(R5) - UPDATED BY 128. BYTESP3; U.CNT(R5) - UPDATED BY NUMBER OF WORDS TRANSFERED1; Z SET - ALL BYTES TRANSFERED"; Z CLEAR - MORE BYTES TO TRANSFER; C CLEAR - VALID TRACK/SECTOR; C SET - BAD BLOCK NUMBER;P;+.NXTSEC: INC I.PRM+10(R3) ; UPDATE BLOCK NUMBER. ADD #2,U.BUF(R5) ; UPDATE MEMORY BLOCK NUMBER< SUB I.PRM+12(R3),U.CNT(R5) ; UPDATE BYTES LEFT TO TRANSFER RETURN ;5;+A; *** - SETBUF - SET UP BUFFER POINTER FOR CPU - SILO TRANSFERS;.; INPUT:; R3 - I/O PACKET ADDRESS ; R5 - UCB ADDRESS;1 ; OUTPUT:"; I.PRM+12(R3) - BYTES TO TRANSFER; R0 - BUFFER ADDRESSE; R1 - BYTES TO TRANSFER; ;-/SETBUF: MOV U.BUF+2(R5),R0 ; GET BUFFER ADDRESSC- MOV #128.,R1 ; DEFAULT TO 128. BYTE TRANSFERX0 CMP U.CNT(R5),R1 ; 128. BYTES LEFT TO TRANSFER? BHIS 10$ ; YES* MOV U.CNT(R5),R1 ; NO, GET RESIDUAL COUNT210$: MOV R1,I.PRM+12(R3) ; STORE BYTES TO TRANSFER- MOV U.BUF(R5),@KISR6 ; SET MAPPING REGISTERI RETURN ;- .ENDNSFERS;.; INPUT:; R3 - I/O PACKET ADDRESS ; R5 - UCB ADDRESS;1 ; OUTPUT:"; I.PRM+12(R3) - BYTES TO TRANSFER; R0 - BUFFER ADDRESSE; R1 - BYTES TO TRANSFER; ;-/SETBUF: MOV U.BUF+2(R5),R0 ; GET BUFFER ADDRESSC- MOV #128.,R1 .TITLE DYCOMW .IDENT /1.0/I;K5; COPYRIGHT (C) 1983 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;.<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; J. L. GALLANT 26-JUN-83;E; THE RX02 DEVICE DRIVER IS USING THIS DATA COMMON AS AN INTERMEDIATEF; BUFFER SO THAT TASKS ABOVE THE 124K MEMORY SPACE CAN STILL DO I/O TOG; THE FLOPPY. THIS DATA COMMON IS NEEDED ONLY ON 22BIT QBUS PROCESSORS.; .PSECT DYCOM,D,GBL,RW;.3; BUFFER IS 1K WORDS, 1K BYTES FOR EACH CONTROLLER.I;N .BLKW 512.  .IF GT R$$X21-1 .BLKW 512.S .ENDC .ENDDNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; J. L. GALLANT 26-JUN-83;E; THE RX02 DEVICE DRIVER IS USING THIS DATA COMMON AS AN INTERMEDIATEF; BUFFER SO THAT TASKS ABOVE THE 124K MEMORY SPACE CAN STILL DO I/O TOG; THE FLOPPY. THIS DATA COMMON IS NEEDED ONLY ON 22BIT QBUS PROCESSORS.; .PSEC .TITLE DYDRV8 .IDENT /04.09/;P;C5; COPYRIGHT (C) 1984 BY DIGITAL EQUIPMENT CORPORATIONY; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; M. BAGGETT/R. PERRON 05-JUN-79; PREVIOUSLY MODIFIED BY:;5; R. T. PERRON ; P. J. CARR; P. J. BEZEREDI ; J. GALLANT ; T. LEKAS ; L. KOGAN;E; '; MODIFIED BY: 15-AUG-86 4.09O;.;; G. MARIGOWDA GM001 -- CONVERT TO USE EXE00Ol_l"al8blC VECTORINGY;8; RX211- NPR FLOPPY DISK DRIVERY;H; FUNCTIONS RECOGNIZED:I<; IO.RPB - READ PHYSICAL BLOCK (MAY READ ANY SECTOR ON DISK)>; IO.WPB - WRITE PHYSICAL BLOCK (MAY WRITE ANY SECTOR ON DISK)8; IO.WDD - WRITE DELETED DATA - WRITE ANY SECTOR ON DISK3; SETTING THE DELETED DATA MARK IN SECTOR HEADER;5B; THE FOLLOWING FUNCTION CODES OPERATE ON 256. WORD BLOCKS OF DATAA; (4 SECTORS FOR SINGLE DENSITY OR 2 SECTORS FOR DOUBLE DENSITY).OD; THE DRIVER AUTOMATICALLY INTERLEAVES AND SKEWS SECTORS TO OPTIMIZEB; THE TRANSFER OF DATA SO THAT A LONG TRANSFER MAY BE DONE WITHOUTC; LOOSING A REVOLUTION OF THE DISK. THE INTERLEAVE FACTOR IS 2 AND-; THE SKEW FACTOR IS 6.Y,; IO.RLB - READ LOGICAL BLOCKS OF 256. WORDS.; IO.WLB - WRITE LOGICAL BLOCKS OF 256. WORDS.;G@; THE FOLLOWING FUNCTION CODES ARE USED TO INITIALIZE THE FLOPPYE; TO SINGLE OR DOUBLE DENSITY AND TO REPORT WHICH DENSITY THE CURRENT ; FLOPPY IS.; IO.SMD - SET MEDIA DENSITY&; IO.SEC - SENSE MEDIA CHARACTERISTICS;SC; IF DELETED DATA IS READ, THE STATUS CODE RETURNED WILL BE IS.RDD,F; OTHERWISE IT WILL BE IS.SUC.;  O* .MCALL HWDDF$,PKTDF$,PCBDF$,QIOSY$,SCBDF$ QIOSY$ SCBDF$ ,,SYSDEF% HWDDF$ ; DEFINE HARDWARE REGISTERSO% PKTDF$ ; DEFINE I/O PACKET OFFSETSB PCBDF$ ; DEFINE PCB OFFSETS L;N; EQUATED SYMBOLSE;E ORETRY = 10 ; ERROR RETRY COUNTL.CEW = 4 ; RETRY COUNT FOR IO.SMD AND IO.SEC'S-DYNUM = 6 ; NUMBER OF REGISTERS TO ERROR LOGA1MEMSIZ = 7600 ; 124K OF MEMORY IN 32 WORD BLOCKSS$APR5DS = 120000 ; APR5 DISPLACEMENT$APR6DS = 140000 ; APR6 DISPLACEMENT*LOOP = 1000 ; COUNTER TO CHECK FOR TR BIT;$; U.CW2 BITS USAGE;C!DELDAT = 100 ; DELETED DATA READD ERR1 = 2000 ; TIMEOUT ERROR BITDEN = 4000 ; DENSITY BITC'RSAE = 10000 ; READ STATUS AFTER ERRORE,SCHAR = 40000 ; SENSE MEDIA CHARACTERISTICS4SILO = 100000 ; FUNCTION ISSUED WAS A SILO FUNCTION;M; U.CW3 WORD USAGE; SINGLE = 494. ; SINGLE DENSITYODOUBLE = 988. ; DOUBLE DENSITYR N; -; DEVICE REGISTER OFFSETS AND BIT DEFINITIONSE; 6#RXCS= 0 ; CONTROL STATUS REGISTERPGO = 1 ; GO BITUNIT = 20 ; UNIT SELECT BITDONE = 40 ; DONE BITE INTEBL = 100 ; INTERRUPT ENABLE)TR = 200 ; TRANSFER READY BIT (CPU-SILO)0SDEN = 400 ; DENSITY BIT #RX211 = 4000 ; RX211 INDICATOR BIT "INIT = 40000 ; INITIALIZATION BITERR = 100000 ; ERROR BITO RXDB = 2 ; DATA BUFFER REGISTER'RXES = 2 ; RX211 ERROR STATUS REGISTERSCRCERR = 1 ; CRC ERROR BIT;!INITDN = 4 ; INITIALIZE DONE BITRRXACLO = 10 ; RX221 AC LOW BITN DENERR = 20 ; DENSITY ERROR BIT+DRVDEN = 40 ; SELECTED DRIVE'S DENSITY BIT 5DELDAT = 100 ; DELETED DATA BIT (USED IN U.CW2 ALSO)0(DRVRDY = 200 ; SELECTED DRIVE READY BIT!UNTSEL = 400 ; UNIT SELECTED BIT (WCOVFL = 2000 ; WORD COUNT OVERFLOW BIT%NXM = 4000 ; NON-EXISTENT MEMORY BITI B;; FUNCTION CODES; FILL = INTEBL!0!GO ; FILL SILO EMPTY = INTEBL!2!GO ; EMPTY SILO$WRITE = INTEBL!4!GO ; WRITE A SECTOR"READ = INTEBL!6!GO ; READ A SECTOR)SETDEN = INTEBL!10!GO ; SET MEDIA DENSITYN-MRDS = INTEBL!12!GO ; MAINTENANCE READ STATUS )WRTDD = INTEBL!14!GO ; WRITE DELETED DATA1&RDERC = INTEBL!16!GO ; READ ERROR CODE 0;R ; LOCAL DATA;E2; RETRY COUNT TABLE (INDEXED BY CONTROLLER NUMBER); &DYPCB: .WORD 0 ; ADD OF PCB OF DYCOM /DYCOM: .RAD50 /DYCOM/ ; NAME OF DY DATA COMMON*BFLAG: .BLKW R$$X21 ; BUFFERING DATA FLAG ; = 0 DO NOT BUFFER DATA ; = 1 BUFFER DATA 9RTTBL: .BLKW R$$X21 ; ERROR RETRY COUNT FOR CURRENT UNITE5CSRSV: .BLKW R$$X21 ; WORD TO SAVE CSR FUNCTION CODE=6COUNT: .BLKW R$$X21 ; COUNT OF BYTES TRANSFERED IN IB;WCOUNT: .BLKW R$$X21 ; COUNT OF DATA LEFT TO BE MOVED (FORO ; WRITE OPERATION ONLY):BUFLEN: .BLKW R$$X21 ; LENGTH OF INTERMEDIATE BUFFER (IB)8PHYADD: .BLKW R$$X21 ; PHYSICAL ADD OF USER BUFFER (LO)8HIADD:: .BLKW R$$X21 ; PHYSICAL ADD OF USER BUFFER (HI)8LOPHYA: .BLKW R$$X21 ; LO ORDER 16 BITS OF PHY ADD (IB)7HIPHYA: .BLKW R$$X21 ; HI ORDER 2 BITS OF PHY ADD (IB)F0DYPTR: .BLKW R$$X21 ; POINTER IN DY00OllOlkTADATADATADATADATADATA DATA COMMON9TEMP: .BLKW R$$X21 ; TEMPORY COUNTER WHEN DOING MULTIPLEE ; FORKSI:RETPTR: .BLKW R$$X21 ; TEMPORY STORAGE FOR RET ADDRESS OF# ; SUBROUTINE WHEN CALLING $FORK" ; NOTHING CAN BE ON STACK WHEN ; CALLING $FORK)5CONCNT: .WORD 0 ;# OF CONTROLLERS CONNECTED TO DYCOML;; MAKE GTPKT$ A LOCAL MACROC;A( .MACRO GTPKT$ DEV,NCTRLR,ADDR,UCBSV,SUC CALL @GTPKT .IF B BCC 65535$H RETURN 65535$:  .IFFR BCS ADDRP .ENDC .IF B  $$$=0 .IF B .IF EQ $$$M MOV R5,S.OWN(R4)X .ENDC .ENDC .IFFH .IF GT NCTRLR-1 MOV R5,UCBSV(R3)P .IFFK MOV R5,UCBSVP .ENDC .ENDC .ENDM; $; EXECUTIVE ENTRY POINT VECTOR TABLE;1EXEVEC: .WORD 0 ; FLAG FOR VECTOR NOT YET FILLEDR ALOCB: .WORD $ALOCB BLXI: .WORD $BLXIOT DEACB: .WORD $DEACB DTOER: .WORD $DTOER DVERR: .WORD $DVERR ERRSQ: .WORD $ERRSQ FORK: .WORD $FORK FRKHD: .WORD $FRKHD GTPKT: .WORD $GTPKT HFMSK: .WORD $HFMSK IODON: .WORD $IODON LDREG: .WORD $LDREG MPPHY: .WORD $MPPHY V MPUBM: .WORD $MPUBM SCERR: .WORD $SCERR SRNAM: .WORD $SRNAM STMAP: .WORD $STMAP VOLVD: .WORD $VOLVD ; EXEVCL=<<<.-EXEVEC>/2>-1> ;;O; DRIVER DISPATCH TABLEX;C0 DDT$ DY,R$$X21,,,,NEW ; GENERATE DISPATCH TABLE ;+/; *** - DYINI FLOPPY DISK CONTROLLER INITIATORA;D; THIS ROUTINE IS ENTERED FROM THE QIO DIRECTIVE WHEN AN I/O REQUESTG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPOGATE THE D; EXECUTION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY,E; THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST. OTHERWISEK; A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL;F; THE NEXT I/O OPERATION IS INITIATED. A RETURN TO THE CALLER IS THEN ; EXECUTED.E; ; INPUTS: 3; R5 - ADDRESS OF UCB OF CONTROLLER TO BE INITIATEDS;U ; OUTPUTS:<; IF THE CONTROLLER ASSOCIATED WITH THE SPECIFIED UCB IS NOTA; BUSY AND AN I/O REQUEST IS WAITING TO BE PROCESSED, THE REQUESTT>; IS DEQUEUED AND THE DRIVER INITIATES THE REQUESTED FUNCTION.;N;- .ENABL LSBD-DYINI: GTPKT$ DY,R$$X21 ; GET NEXT I/O PACKET; 0; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT;E ; R1 - ADDRESS OF THE I/O PACKET5; R2 - PHYSICAL UNIT NUMBER OF DEVICE TO BE INITIATEDN; R3 - CONTROLLER INDEXU; R4 - ADDRESS OF SCB ; R5 - ADDRESS OF THE UCBT;E'; FLOPPY DISK I/O REQUEST PACKET FORMATS;I!; WD. 00 -- I/O QUEUE THREAD WORD/; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERS1; WD. 02 -- ADDRESS OF TCB OF THE REQUESTING TASKIA; WD. 03 -- POINTER TO SECOND LUN WORD OF REQUESTING TASKS HEADERY5; WD. 04 -- CONTENTS OF FIRST LUN WORD ( UCB ADDRESS)U>; WD. 05 -- I/O FUNCTION CODE (IO.RLB, IO.RPB, IO.WLB, IO.WPB,; IO.WDD, IO.SMD OR IO.SEC)/; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCKE/; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK :; WD. 10 -- I/O STATUS BLOCK ADDRESS DISPLACEMENT + 1400002; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE*; WD. 12 -- RELOCATION BIAS OF DATA BUFFER*; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER'; WD. 14 -- NUMBER OF BYTES TO TRANSFERS; WD. 15 -- NOT USED (IGNORED)5; WD. 16 -- LOW BYTE MUST BE ZERO, HIGH BYTE NOT USED ,; WD. 17 -- LOGICAL OR PHYSICAL BLOCK NUMBER; WD. 20 -- NOT USED; %; DRIVER USAGE OF WORDS IN I/O PACKET 5; I.PRM+6 (WD. 15) - STATUS REGISTER AFTER INTERRUPTO6; I.PRM+10 (WD. 16) - LOGICAL OR PHYSICAL BLOCK NUMBER-; I.PRM+12 (WD. 17) - SIZE OF "THIS" TRANSFER 4; I.PRM+14 (WD. 20) - PHYSICAL SECTOR NUMBER (1-26.)3; I.PRM+15 (WD. 20) - PHYSICAL TRACK NUMBER (0-76.)F;;D?; WHEN BRINGING RX02 CONTROLLER ONLINE, HRC ISSUES AN IO.SMD TOEA; DYDRV. OFFSETS I.PRM+12 AND I.PRM+14 GET RELOCATED TO I.PRM+147=; AND I.PRM+16 BY $VOLVD ROUTINE. $VOLVD THINKS THAT IT IS AN?; IO.STC FUNCTION AND DOES THE RELOCATE. IN $IOFIN, IF I.PRM+16TA; IS NOT A VALID BUFFER ADDESS (> 140000) OR ZERO, THE SYSTEM CANIA; CRASH OR DESTROY A LOCATION IN MEMORY.SINCE IO.SMD IS ONLY USED D; FOR RX02 DEVICE, A SPECIAL CHECK IS MADE IN THE DRIVER FOR IO.STC.6; IF THE FUNCTION IS IO.STC THEN I.PRM00Ol_l"al8bl+16 IS CLEARED. ,; THE DRIVER DOES NOT USE LOCATION I.PRM+16.;T;;Y; INITIALIZE DRIVER2;D& MOV #RETRY,RTTBL(R3); SET RETRY COUNT4 BIC #^C,U.CW2(R5); CLEAR DYNAMIC UCB FLAG BITS$ CALL @VOLVD ;VALIDATE VOLUME VALID BCS 20$ ; IF CS WE FAILEDM( MOV I.FCN(R1),-(SP) ; GET FUNCTION CODE% BIC #7,(SP) ; REMOVE QUALIFIER BITS : CMP #IO.STC,(SP) ; IS IT A SET CHARACTERISTICS FUNCTION ? BNE 5$ ; NOC7 CLR I.PRM+16(R1) ; CLEAR THIS FOR THE BLOCK LOCK CODE F ; IN $IOFINI$5$: TST (SP)+ ; RESTORE STACK LEVEL TST R0 ; TRANSFER FUNCTION?I BPL 20$ ; IF PL NO* TSTB I.PRM+10(R1) ; HIGH BLOCK SPECIFIED? BEQ 30$ ; IF EQ NO10$: JMP 380$ ; YES, ERRORR20$: JMP 440$ ; ERROR;L; CHECK FOR A VALID FUNCTION;,30$: MOV S.CSR(R4),R2 ; RETRIEVE CSR ADDRESS1 CMPB #IO.SEC/256.,I.FCN+1(R1) ; VALID FUNCTION?A+ BNE 60$ ; IF NE, IT MUST BE READ OR WRITE 7 MOVB #CEW,RTTBL(R3) ; IO.SEC AND IO.SMD ONLY 4 RETRIES(% MOV I.FCN(R1),R0 ; GET FUNCTION CODEE# BIC #7,R0 ; REMOVE QUALIFIER BITS;( CMP #IO.SEC,R0 ; SENSE CHARACTERISTICS? BNE 40$ ; IF NE NO* JMP DYSEC ; GET DISKETTE CHARACTERISTICS(40$: CMP #IO.SMD,R0 ; SET MEDIA DENSITY? BNE 50$ ; IF NE NO0 BITB #US.MNT!US.FOR,U.STS(R5) ; DEVICE MOUNTED? BEQ 50$ ; IF EQ YESC7 MOV R0,I.FCN(R1) ; SET FUNCTION CODE WITHOUT MODIFIERSN" JMP DYSMD ; SET DISKETTE DENSITY+50$: MOV #IE.IFC&377,R0 ; RETURN ERROR CODEC JMP 420$ ; EXITE60$: ; REF LABELE;E'; SET UP MAPPING AND FIRST DISK ADDRESSE;B* BIT #HF.UBM,@HFMSK ; UNIBUS MAP PRESENT ? BEQ 61$ ; NO$ CLR BFLAG(R3) ; NO BUFFERING NEEDED2 CALL @STMAP ; SET UP 11/70 UNIBUS MAPPING ADDRS/ SWAB U.BUF(R5) ; POSITION EXTENDED MEMORY BITS BR 69$ N61$: MOV R2,-(SP) ; SAVE R2O. MOV U.BUF(R5),R0 ; GET ADDRESS EXTENSION BITS0 MOVB U.BUF+1(R5),-(SP); SAVE THE EXTENSION BITS- MOV U.BUF+2(R5),R2 ; GET USER BUFFER ADDRESS7( ADD I.PRM+4(R1),R2 ; FIND END OF BUFFER% ADCB (SP) ; GET ANY LEFT OVER CARRYM% BITB #^C303,(SP)+ ; 22 BIT ADDRESS ? BNE 62$ ; YES - DO BUFFERING, ASH #4,R0 ; GET BITS 17 & 18 INTO POSITION BR 63$ ;%62$: MOV #1,BFLAG(R3) ; DO BUFFERING  MOV (SP)+,R2 ; RESTORE R2 BR 65$ ;(63$: CLR BFLAG(R3) ; NO BUFFERING NEEDED) BIC #^C<30000>,R0 ; ISOLATE BITS 12 & 13F+ MOV R0,U.BUF(R5) ; SAVE HI BITS OF ADDRESS. MOV (SP)+,R2 ; RESTORE R2 BR 69$ ;@65$: MOV I.PRM+2(R1),PHYADD(R3); PHYSICAL ADD OF USER BUFFER(LO)# CLR HIADD(R3) ; CLEAR HIGH ADDRESS = MOVB I.PRM+1(R1),HIADD(R3); PHYSICAL ADD OF USER BUFFER (HI)  MOV R1,-(SP) ; SAVE R1B MOV R2,-(SP) ; SAVE R2E$ MOV DYPCB,R0 ; GET PCB ADD OF DYCOM# MOV P.REL(R0),R1 ; RELOCATION BIASI1 MOV R1,DYPTR(R3) ; INITIALIZE POINTER INTO DYCOMC) TST R3 ; IS THIS THE FIRST CONTROLLER ?C BEQ 67$ ; YESA& MOV P.SIZE(R0),R2 ; GET SIZE OF DYCOM ASR R2 ; DIVIDE IN HALFV( ADD R2,R1 ; POINT TO SECOND HALF OF IB4 ADD R2,DYPTR(R3) ; POINT INTO SECOND HALF OF COMMON'67$: MOV #APR6DS,R2 ; APR6 DISPLACEMENT ' CALL @MPPHY ; GET 18BIT PYS ADD OF IBD% ASH #4,R1 ; PUT BITS 17 & 18 OF ADD  ; INTO BITS 12 & 13 + BIC #^C<30000>,R1 ; ISOLATE BITS 12 AND 13M. MOV R1,HIPHYA(R3) ; SAVE HI BITS OF ADD OF IB( MOV R1,U.BUF(R5) ; SET UP EXTENDED BITS. MOV R2,LOPHYA(R3) ; SAVE LO BITS OF ADD OF IB/ MOV R2,U.BUF+2(R5) ; SET UP LO BITS OF ADD FORD ; DATA TRANSFERD) MOV P.SIZE(R0),R1 ; COMPUTE LENGTH OF IBA" ASH #6,R1 ; GET LENGTH IN BYTES ) TST R3 ; IS THIS THE FIRST CONTROLLER ?S BEQ 68$ ; YESC4 ASH #-1,R1 ; DIVIDE BY 2 - TWO CONTROLLERS SHARING ; ONE BUFFER*68$: MOV R1,BUFLEN(R3) ; SAVE LENGTH OF IB MOV R1,COUNT(R3) ;I: MOV U.CNT(R5),WCOUNT(R3); COUNT OF DATA TO BE MOVED FOR A ; WRITE FUNCTION MOV (SP)+,R2 ; RESTORE REGS MOV (SP)+,R1 ;R0 CMPB #IO.WLB/256.,I.FCN+1(R1); WRITE FUNCTION ? BNE 69$ ; NO( CLR COUNT(R3) ; NO BYTES TRANSFERED YET ; INITIATE CALL TO BLXIO69$:; MOV I.PRM+12(R1),R0 ; GET PHYSICAL OR LOGICAL BLOCK NUMBERE9 BITB #IO.RPB&377,I.FCN(R1) ; IS IT READ/WRITE PHYSICAL?D BNE 70$ ; IF NE YESS0 ASL R0 ; CONVERT TO LOGICAL SECTOR NO. (LBN*2)%00OllOlkTADATADATADATADATADATA BIT #DEN,U.CW2(R5) ; DOUBLE DENSITY?  BNE 70$ ; IF NE YESN ASL R0 ; SINGLE DEN - LBN*4D#70$: MOV R0,I.PRM+10(R1) ; STORE ITP.80$: MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS/ CALL TRKSEC ; CONVERT BLOCK # TO TRACK/SECTOR$ BCC 82$ ; IF CC -> OKN" JMP 10$ ; CS -> BAD BLOCK NUMBER82$:& MOV S.CSR(R4),R2 ; GET ADDRESS OF CSR1 CMPB #IO.WLB/256.,I.FCN+1(R3) ; WRITE FUNCTION?P BEQ 822$ ; IF EQ YES" JMP 190$ ; MUST BE READ FUNCTION;N; FILL SILO BEFORE WRITE; .822$: MOVB S.CON(R4),R1 ; GET CONTROLLER INDEX TST BFLAG(R1) ; BUFFER DATA ? BEQ 88$ ; NO+ TST COUNT(R1) ; IS THE IB FULL WITH DATA ?+ BGT 88$ ; YESP/ CMP BUFLEN(R1),WCOUNT(R1); IS THE I/O TRANSFER ; GREATER THAN THE IBC  BGT 83$ ; BGT - NO> SUB BUFLEN(R1),WCOUNT(R1); UPDATE BYTES LEFT TO COMPLETE TRAN5 MOV BUFLEN(R1),TEMP(R1); NUMBER OF BYTES TO BE MOVED5 BR 84$ ;983$: MOV WCOUNT(R1),TEMP(R1); NUMBER OF BYTES TO BE MOVED;8 CLR WCOUNT(R1) ; AFTER THIS MOVE, I/O TRANS IS COMPLETE184$: MOV TEMP(R1),COUNT(R1); LENGTH OF DATA IN IBT)86$: CALL BLXIO ; FILL IB WITH MORE DATAE ADD #<256./100>,DYPTR(R1) ; BUMP POINTER INTO DYCOM (32 WORD BLOCKS)F- SUB #256.,TEMP(R1) ; DECREMENT TEMPORY COUNT  BLE 87$ ; IB IS FULL ' TST $FRKHD ; ANYONE WAITING TO FORK ?U$ BEQ 86$ ; IF EQ NO -> DO SOME MORE, CALL @FORK ; LET SOMEONE ELSE DO SOME WORK) MOVB S.CON(R4),R1 ; GET CONTROLLER INDEX(# MOV S.CSR(R4),R2 ; GET CSR ADDRESSO* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS BR 86$ ; DO SOME MORE BLXIOM987$: BIC #30000,U.BUF(R5); RESET EXTENDED ADDRESSING BITSF0 BIS HIPHYA(R1),U.BUF(R5); TO POINT TO BEG OF IB0 MOV LOPHYA(R1),U.BUF+2(R5); RESET LO BITS OF IB MOV R2,-(SP) ; SAVE REG MOV DYPCB,R2 ; GET PCB OF DYCOM7 MOV P.REL(R2),DYPTR(R1); INITIALIZE POINTER INTO DYCOM8 TST R1 ; ONE CONTROLLERO BEQ 877$ ; YES) MOV P.SIZE(R2),-(SP); GET SIZE OF REGION( ASR (SP) ; CUT IN HALF7 ADD (SP)+,DYPTR(R1) ; POINT INTO SECOND HALF OF REGION) 877$: MOV (SP)+,R2 ; RESTORE REG88$: D. MOVB #FILL,U.BUF(R5) ; SET FILL SILO FUNCTION)90$: BIT #DEN,U.CW2(R5) ; DOUBLE DENSITY?( BEQ 100$ ; IF EQ NO 1 BIS #SDEN,U.BUF(R5) ; YES-SET DOUBLE DENSITY BIT 2100$: BIS #SILO,U.CW2(R5) ; INDICATE SILO FUNCTION. MOVB S.CON(R4),R1 ; RETRIEVE CONTROLLER INDEX- MOV U.BUF(R5),CSRSV(R1) ; SAVE FUNCTION CODEN' MOV U.BUF(R5),(R2) ; INITIATE FUNCTION2* BIT #HF.UBM,@HFMSK ; UNIBUS MAP PRESENT ? BEQ 105$ ; N0+ MOV R2,-(SP) ; SAVE REGISTERL, CALL @MPUBM ; MAP 11/70 UNIBUS TO TRANSFER MOV (SP)+,R2 ; RESTORE REGISTER105$:S( MOV U.BUF+2(R5),R0 ; GET BUFFER ADDRESS/ MOV #128.,R1 ; DEFAULT TO A 128. BYTE TRANSFERN. BIT #DEN,U.CW2(R5) ; DOUBLE DENSITY DISKETTE? BEQ 110$ ; IF EQ NON' ASL R1 ; CHANGE DEFAULT TO 256. BYTES;,110$: CMP U.CNT(R5),R1 ; FULL TRANSFER LEFT? BHIS 120$ ; IF HIS YES* MOV U.CNT(R5),R1 ; NO, GET RESIDUAL COUNT9120$: MOV R1,I.PRM+12(R3) ; STORE BYTES BEING TRANSFERRED '130$: BITB #TR!DONE,(R2) ; TRANSFERRED? BMI 140$ ; IF MI YES BEQ 130$ ; IF EQ NOM BR 160$ ; ERRORR140$: ASR R1 ; WORD COUNT" MOV R1,RXDB(R2) ; LOAD WORD COUNT'150$: BITB #TR!DONE,(R2) ; TRANSFERRED?A. BMI 270$ ; IF MI YES - R0 HAS BUFFER ADDRESS BEQ 150$ ; IF EQ NO ,160$: MOV RXES(R2),I.PRM+6(R3) ; SAVE STATUS$ JMP DYRTY ; ERROR, RETRY OPERATION;R; EMPTY SILO AFTER READH;Y5170$: MOVB #EMPTY,U.BUF(R5) ; SET EMPTY SILO FUNCTIONO& BR 90$ ; SAME AS FILL SILO PROCEDURE;F); INITIATE TRANSFER BETWEEN SILO AND DISKR;/180$: MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS MOV S.CSR(R4),R2 ; GET CSR ADDR, MOVB #WRITE,U.BUF(R5);ASSUME WRITE FUNCTION% MOV I.FCN(R3),R1 ; GET FUNCTION CODER# BIC #7,R1 ; REMOVE QUALIFIER BITS * CMP #IO.WDD,R1 ; WRITE WITH DELETED DATA? BNE 200$ ; IF NE NOR: MOVB #WRTDD,U.BUF(R5) ; SET "WRITE DELETED DATA" FUNCTION BR 200$ ;A.190$: MOVB #READ,U.BUF(R5) ; SET READ FUNCTION*200$: BIT #DEN,U.CW2(R5) ; DOUBLE DENSITY? BEQ 210$ ; IF EQ NO* BIS #SDEN,U.BUF(R5) ; YES-SET DENSITY BIT210$: TSTB U.UNIT(R5) ; UNIT 1?I BEQ 220$ ; IF EQ NOV0 BIS #UNIT,U.BUF(R5) ; Y00Ol_l"al8blES, SET TO SELECT UNIT 13220$: MOVB S.CON(R4),R1 ; RETRIEVE CONTROLLER INDEXC- MOV U.BUF(R5),CSRSV(R1) ; SAVE FUNCTION CODE  MOV #LOOP,R0 ; SET UP COUNTER' MOV U.BUF(R5),(R2) ; INITIATE FUNCTIONV'230$: BITB #TR!DONE,(R2) ; TRANSFERRED?A BMI 240$ ; IF MI YES+ BEQ 235$ ; TR NOT SET - DECREMENT COUNTERC BR 160$ ; ERRORN!235$: DEC R0 ; DECREMENT COUNTER2! BNE 230$ ; KEEP ON CHECKING BITR) MOVB S.CON(R4),R3 ; GET CONTROLLER INDEX(* MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS% MOV #1,RTTBL(R3) ; JUST DO ONE RETRYN- JMP 620$ ; INITIALIZE DRIVE TO RECOVER FROML ; POWER OFF PROBLEM)5240$: MOVB I.PRM+14(R3),RXDB(R2) ; LOAD SECTOR NUMBERP2250$: BITB #TR!DONE,(R2) ; TRANSFER READY OR DONE?! BMI 260$ ; IF MI TRANSFER READYR BEQ 250$ ; IF EQ LOOPY& BR 160$ ; ERROR, NO TRANSFER REQUEST4260$: MOVB I.PRM+15(R3),R0 ; LOAD TRACK NUMBER IN R02270$: MOVB S.ITM(R4),S.CTM(R4) ; SET TIMEOUT COUNT0280$: BIS #S2.ACT,S.ST2(R4) ; SHOW I/O IS ACTIVE9 MOV R0,RXDB(R2) ; LOAD TRACK, BUFFER ADDRESS, OR ASCII ID;N ; DYPWF - POWER FAIL ENTRY POINT;; POWER FAIL IS HANDLED BY THE DEVICE TIMING OUT, THEREFOREI;; NO WORK IS DONE HERE. IT WILL BE HANDLED WHEN THE DEVICEN; TIME OUT ENTRY IS EXECUTED.?;B;2 ; DYCAN - CANCEL I/O ENTRY POINT4; CANCEL I/O IS A NOP OP FOR FILE STRUCTURED DEVICES;E DYPWF: ;;;IDYCAN: RETURN ;;; ;+5; ** -- DYKRB -- DY CONTROLLER STATUS CHANGE ROUTINEM;T=; THIS ROUTINE WILL HANDLE SETTING CONTROLLER ONLINE/OFFLINER;X>; THIS ROUTINE HAS BEEN ADDED FOR 22 BIT QBUS PROCESSORS. THE=; FOLLOWING REQUIREMENTS MUST BE MET TO HAVE THIS CONTROLLERI; BROUGHT ONLINE:; D; 1.DYCOM REGION MUST EXIST. DYCOM IS THE INTERMEDIATE BUFFER (IB).;; 2.DYCOM MUST RESIDE IN THE FIRST 124K OF PHYSICAL MEMORYT; 9; THIS ROUTINE WILL ALSO INSURE THAT THE DYCOM REGION ISW<; NOT CHECKPOINTABLE, NOT SHUFFLEABLE, AND FIXED IN MEMORY.;L ; INPUTSC;G; R2 = KRB ADDRESS; R3 = CTB ADDRESS.; C = 0 REQUEST OFFLINE TO ONLINE TRANSITION-; C = 1 REQUEST ONLINE TO OFFLINE TRANSTIONE; $SCERR = 1 PRESET TO SUCESS;T ; OUTPUTS;O"; $SCERR < 0 OPERATION IS FAILURE#; $CSERR CONTAINS FAILURE CODEI!; $SCERR = 1 OPERATION IS SUCESSR;B;-DYKRB:0 BCC 279$ ; IF CC -> GO TO TRANSITION TO ONLINE* BIT #HF.UBM,@HFMSK ; UNIBUS MAP PRESENT ? BNE 290$ ; YES5 DEC CONCNT ; DECREMENT # OF CONTROLLERS USING DYCOM ) BNE 290$ ; IF NE , THERE ARE STILL MOREA MOV R0,-(SP) ; SAVE R0S$ MOV DYPCB,R0 ; GET ADDRESS OF DYCOM8 BEQ 278$ ; IF EQ -> DON'T CLEAR BIT - DYPCB NOT SET UP5 BIC #P2.LMA,P.ST2(R0);CLEAR THE 'LEAVE ME ALONE' BIT 278$: MOV (SP)+,R0 ; RESTORE R0 BR 290$ ; AND RETURN#279$: TST EXEVEC ; IF DONE ALREADY  BNE 2$ ; SKIP THIS MOV R2,-(SP) ; SAVE R2- MOV R3,-(SP) ; SAVE R3I MOV KINAR6,-(SP) ; SAVE KINAR6M/ MOV @#112,R0 ; GET ADDRESS OF TABLE OF ENTRIESC; MOV (R0),R0 ; GET ADDRESS OF APR BIAS (1ST WORD IN TABLE)E2 MOV (R0),KINAR6 ; MAP COMMON THROUGH I-SPACE APR6! MOV #EXEVEC,R3 ; POINT TO VECTORQ* MOV #EXEVCL,R2 ; SPECIFY LENGTH OF VECTOR% CALL @#140004 ; TRANSLATE THE VECTORT" MOV (SP)+,KINAR6 ; RESTORE KINAR6 MOV (SP)+,R3 ; RESTORE R3 MOV (SP)+,R2 ; RESTORE R2,2$: BIT #HF.UBM,@HFMSK ; UNIBUS MAP PRESET ? BNE 290$ ; YES - NOTHING TO DO MOV R0,-(SP) ; SAVE R0M MOV R1,-(SP) ; SAVE R1N MOV R2,-(SP) ; SAVE R2  MOV R3,-(SP) ; SAVE R3E& MOV #DYCOM,R3 ; GET ADD OF DYCOM NAME' CALL @SRNAM ; SEARCH FOR NAMED REGION6* BCS 282$ ; DOES NOT EXIST - CANNOT BRING ; CONTROLLER ONLINEQ+ MOV R2,DYPCB ; SAVE ADDRESS OF DYCOM'S PCB6 MOV P.REL(R2),R3 ; GET STARTING PHYSICAL ADD OF DYCOM0 ADD P.SIZE(R2),R3 ; GET ENDING ADDRESS OF DYCOM1 CMP R3,#MEMSIZ ; IS DYCOM IN FIRST 124K MEMORY ?U0 BGT 282$ ; NO - DO NOT BRING CONTROLLER ONLINE! MOV R2,R1 ; DYCOM'S PCB ADDRESSR. BIT #PS.OUT,P.STAT(R1); IS REGION IN MEMORY ? BEQ 281$ ; YES2 INCB P.RMCT(R1) ; BUMP RESIDENT MAPPED TASK COUNT. MOVB #160.,P.PRI(R1) ; SET UP REGION PRIORITY' ; MAKE THE PRIORITY HIGH SO IT GETST ; QUEUED UP QUICKLYY( CALL @LDREG ; BRING RE00OllOlkTADATADATADATADATADATAGION INTO MEMORY# MOV DYPCB,R1 ; RESTORE PCB ADDRESSD>281$: BIS #PS.CHK!PS.FXD!PS.NSF,P.STAT(R1); MAKE SURE DYCOM IS+ ; NOT CHK,NOT SHUFF,AND FIXED IN MEMORY - BIS #P2.LMA,P.ST2(R1); DON'T TOUCH PARTITIONN5 INC CONCNT ; INCREMENT # OF CONTROLLERS USING DYCOMP% BR 285$ ; OK TO BRING DEVICE ONLINE2:282$: MOV #IE.SPC,@SCERR ; ERROR - ILLEGAL BUFFER ADDRESS285$: MOV (SP)+,R3 ; RESTORE R3P MOV (SP)+,R2 ; RESTORE R2 MOV (SP)+,R1 ; RESTORE R1 MOV (SP)+,R0 ; RESTORE R0290$: RETURN ; DONE - RETURN;+.; ** --DYUCB -- DY UNIT STATUS CHANGE ROUUTINE; ;; THIS ROUTINE WILL HANDLE SETTING EACH UNIT ONLINE/OFFLINE ;O; THIS ROUTINE WILL JUST RETURNR;DYUCB: RETURN2;+9; *** - $DYINT - RX211 FLOPPY DISK INTERRUPT ENTRY POINTO;R;-6 INTSE$ DY,PR5,R$$X21 ;;; GENERATE INTERRUPT SAVE CODE# MOV U.SCB(R5),R4 ; GET SCB ADDRESSA% TSTB S.STS(R4) ; IS THE DRIVE BUSY ?R BNE 295$ ; IF NE YES& RETURN ; IGNORE SPURIOUS INTERRUPTS"295$: MOV R3,-(SP) ; SAVE REGISTER% MOV U.SCB(R5),R4 ;;; GET SCB ADDRESSD, MOV S.PKT(R4),R3 ;;; GET I/O PACKET ADDRESS% MOV S.CSR(R4),R4 ;;; GET CSR ADDRESSN5 MOV RXDB(R4),I.PRM+6(R3) ;;; SAVE CONTROLLER STATUSR" MOV (SP)+,R3 ;;; RESTORE REGISTER! BIT #RXACLO,RXES(R4);POWER OFF ?R BEQ 297$ ;NO' RETURN ;POWER OFF - IGNORE INTERRUPTA297$:R! CLR (R4) ;;; DISABLE INTERRUPTS ( CALL @FORK ;;; CREATE A SYSTEM PROCESS MOV R4,R2 ; COPY CSR ADDRESS# MOV U.SCB(R5),R4 ; GET SCB ADDRESSN) MOVB S.CON(R4),R3 ; GET CONTROLLER INDEXR. BIT #SCHAR,U.CW2(R5); SENSE CHARACTERISTICS ? BNE DYSEN ; IF NE YESA TST (R2) ; ANY ERRORS? BPL 300$ ; IF PL NO ERRORS JMP DYRTY ; YES-RETRY FUNCTION0300$: ASRB RTTBL+1(R3) ; INITIALIZE IN PROGRESS? BCS 360$ ; IF CS YES* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS, CMP #IO.SMD,I.FCN(R3) ; SET MEDIA DENSITY? BNE 310$ ; IF NE NOU JMP 410$ ; YES, FINISH I/O4310$: CMPB #IO.RLB/256.,I.FCN+1(R3) ; READ FUNCTION? BNE 340$ ; IF NE NO  TST U.CW2(R5) ; SILO FUNCTION?T BMI 330$ ; IF MI YES. BITB #DELDAT,I.PRM+6(R3) ; DELETED DATA READ? BEQ 320$ ; IF EQ NOT BISB #DELDAT,U.CW2(R5) ; YES0320$: JMP 170$ ; GO EMPTY SILO +330$: BIC #SILO,U.CW2(R5) ; CLEAR SILO FLAG;% CALL NXTSEC ; UPDATE TO NEXT SECTORI BEQ 400$ ; IF EQ, ALL FINISHED BR 360$ ; INITIATE NEXT READ)340$: TST U.CW2(R5) ; FILL SILO FUNCTION?  BPL 350$ ; IF PL NO + BIC #SILO,U.CW2(R5) ; YES - CLEAR SILO BIT. JMP 180$ ; GO WRITE SECTOR*350$: CALL NXTSEC ; UPDATE TO NEXT SECTOR BEQ 410$ ; IF EQ, ALL FINISHED3360$: BIC #ERR1,U.CW2(R5) ; CLEAR TIMEOUT ERROR BITQ/ MOV S.PKT(R4),R1 ; RETRIEVE I/O PACKET ADDRESS04 CMP #IO.SMD,I.FCN(R1) ; SET MEDIA DENSITY FUNCTION? BNE 370$ ; IF NE NOA JMP DYSMD ; RETRY IO.SMD,370$: JMP 80$ ; RETRY CURRENT OPERATION NOW.380$: MOV #IE.BLK&377,R0 ; SET BAD BLOCK ERROR BR 440$ ;L2390$: MOV #IE.VER&377,R0 ; SET UNRECOVERABLE ERROR BR 420$ ;Y*400$: MOV I.FCN(R3),R1 ; GET FUNCTION CODE# BIC #7,R1 ; REMOVE QUAILFIER BITSO& CMP #IO.RPB,R1 ; READ PHYSICAL BLOCK? BNE 410$ ; IF NE NO,: MOV #IS.RDD&377,R0 ; YES, DEFAULT ON READ TO DELETED DATA, BITB #DELDAT,U.CW2(R5) ; DELETED DATA READ? BNE 420$ ; IF NE YES9410$: MOV #IS.SUC&377,R0 ; SET SUCCESSFUL COMPLETION CODES/420$: MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS* MOV I.PRM+4(R1),R1 ; SET BYTES TRANSFERED7 SUB U.CNT(R5),R1 ; CALCULATE BYTES ACTUALLY TRANSFEREDR3430$: MOVB S.CON(R4),R3 ; RETRIEVE CONTROLLER INDEXT* MOVB RTTBL(R3),R2 ; SET FINAL RETRY COUNT* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS- CMPB #IO.SEC,I.FCN+1(R3) ; IO.SEC OR IO.SMD?R BNE 435$ ; IF NE NOD+ BIS #CEW*256.,R2 ; SET INITIAL RETRY COUNTE BR 440$ ;A2435$: BIS #RETRY*256.,R2 ; SET INITIAL RETRY COUNT8440$: BIC #SILO!SCHAR!ERR1!DELDAT,U.CW2(R5) ; CLEAR BITS CALL @IODON ; SET DONE% JMP DYINI ; TRY FOR ANOTHER REQUESTF;0; INTERRUPT PROCESSING POINT FOR DETERMINING THE; DISKETTE UNIT STATUS.R;R5DYSEN: MOV S.PKT(R4),R1 ; RETRIEVE I/O PACKET ADDRESSF/ BIT #RSAE,U.CW2(R5) ; READ STATUS AFTER ERROR?K BEQ 450$ ; IF EQ NOE! BIC #RS00Ol_l"al8blAE,U.CW2(R5) ; CLEAR FLAG JMP 390$ ; EXIT WITH ERROR*450$: ASRB RTTBL+1(R3) ; INIT IN PROGRESS? BCC 460$ ; IF CC NOT" BIT #RXACLO,I.PRM+6(R1) ; AC LOW? BNE 460$ ; IF CC NO!$ DECB RTTBL(R3) ; ANY RETRIES LEFT ? BNE 455$ ; IF NE YES) JMP 630$ ; IF EQ NO, DON'T RETRY IO.SEC455$: JMP DYSEC ; RETRY ITT,460$: BIT #DRVRDY,I.PRM+6(R1) ; DRIVE READY? BEQ DYRTY ; IF EQ NO TST (R2) ; ANY ERRORS? BPL 470$ ; IF PL NOE2 BIT #DENERR,I.PRM+6(R1) ; IS IT A DENSITY ERROR? BEQ DYRTY ; IF EQ NO,470$: BIC #SCHAR!DEN,U.CW2(R5) ; CLEAR FLAGS. MOV #SINGLE,U.CW3(R5) ; ASSUME SINGLE DENSITY1 BIT #DRVDEN,I.PRM+6(R1) ; IS IT DOUBLE DENSITY?) BEQ 480$ ; IF EQ NO;) ASL U.CW3(R5) ; DOUBLE THE MAXIMUM LBN'SE) BIS #DEN,U.CW2(R5) ; SET THE DENSITY BITI&480$: MOV #IS.SUC&377,R0 ; SET SUCCESS1 MOV U.CW2(R5),R1 ; RETURN DEVICE CHARACTERISTICS BR 430$ ;;Q!; SENSE CHARACTERISTIC PROCESSINGY;R;DYSEC: BIS #SCHAR,U.CW2(R5) ; INDICATE SENSE CHARACTERISTICI+ MOV #MRDS,R0 ; SET MAINTENANCE READ STATUS7 TSTB U.UNIT(R5) ; UNIT 1 ?; BEQ 490$ ; IF EQ NOG! BIS #UNIT,R0 ; YES SELECT UNIT 1Y3490$: MOVB S.CON(R4),R1 ; RETRIEVE CONTROLLER INDEX& MOV R0,CSRSV(R1) ; SAVE FUNCTION CODE! MOV R0,(R2) ; INITIATE FUNCTIONE. MOVB S.ITM(R4),S.CTM(R4) ; SET TIMEOUT COUNT, BIS #S2.ACT,S.ST2(R4) ; SHOW I/O IS ACTIVE RETURN ;C;R; SET MEDIA DENSITY$;)DYSMD: MOV #SETDEN,R0 ; SET FUNCTION CODER BIC #DEN,U.CW2(R5) ; CLEAR FLAG. MOV #SINGLE,U.CW3(R5) ; ASSUME SINGLE DENSITY TST I.PRM(R1) ; SINGLE DENSITY? BEQ 500$ ; IF EQ YES# CMP #2,I.PRM(R1) ; DOUBLE DENSITY? . BNE 500$ ; IF NE NO, TREAT AS SINGLE DENSITY BIS #SDEN,R0 ; DOUBLE DENSITY# BIS #DEN,U.CW2(R5) ; UPDATE STATUSM% ASL U.CW3(R5) ; DOUBLE MAXIMUM LBN'S 500$: TSTB U.UNIT(R5) ; UNIT 1?T BEQ 510$ ; IF EQ NOS! BIS #UNIT,R0 ; YES SELECT UNIT 1R3510$: MOVB S.CON(R4),R1 ; RETRIEVE CONTROLLER INDEXE& MOV R0,CSRSV(R1) ; SAVE FUNCTION CODE! MOV R0,(R2) ; INITIATE FUNCTIONE'520$: BITB #TR!DONE,(R2) ; TRANSFERRED?I BMI 530$ ; IF MI YES BEQ 520$ ; IF EQ NOY* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS' MOV RXES(R2),I.PRM+6(R3) ; SAVE STATUSI BR DYRTY ; ERROR530$: MOV #'I,R0 ; ASCII "I"($ MOVB #30.,S.CTM(R4) ; TIMEOUT COUNT JMP 280$ ;;+*; **-DYOUT-FLOPPY DISK TIMEOUT ENTRY POINT;-*DYOUT: CALL LOGTMO ;;; LOG DEVICE TIMEOUT( BIS #ERR1,U.CW2(R5) ; SET TIMEOUT ERROR BR DYRTY1 ;;R; RETRY LAST FUNCTIONT; &DYRTY: CALL LOGERR ; LOG DEVICE ERROR4DYRTY1: MOVB S.CON(R4),R3 ; RESTORE CONTROLLER INDEX* MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS/ BIT #RSAE,U.CW2(R5) ; READ STATUS AFTER ERROR?2 BNE 640$ ; IF NE YES) BITB #IQ.X,I.FCN(R1) ; INHIBIT RETRIES ?  BEQ 540$ ; IF EQ NO8 CMP #IO.SEC,I.FCN(R1) ; SENSE CHARACTERISTICS FUNCTION? BEQ 630$ ; IF EQ YES7 BIS #RSAE,U.CW2(R5) ; SET READ STATUS AFTER ERROR FLAGT JMP DYSEC ; GO DO READ STATUSO(540$: DECB RTTBL(R3) ; ANY RETRIES LEFT? BNE 550$ ; IF NE YES5 CMP #IO.SEC,I.FCN(R1) ; DON'T REPEAT IO.SEC FUNCTION) BEQ 630$ ; IF EQ EXITI7 BIS #RSAE,U.CW2(R5) ; SET READ STATUS AFTER ERROR FLAGS JMP DYSEC ; GO DO READ STATUSE*550$: BIT #ERR1,U.CW2(R5) ; TIMEOUT ERROR? BNE 620$ ; IF NE YES&560$: BIT #RXACLO,I.PRM+6(R1); AC LO ? BEQ 565$ ; NOS BR 630$ ; ERROR - POWER OFF=565$: BIT #SCHAR,U.CW2(R5) ; SENSE CHARACTERISTICS FUNCTION ?A BNE 620$ ; IF NE YES3 CMP IO.SMD,I.FCN(R1) ; SET MEDIA DENSTIY FUNCTION?Y BEQ 620$ ; IF EQ YES( BIT #CRCERR,I.PRM+6(R1) ; CRC ERRORS ? BNE 610$ ; IF NE YES0570$: CMP #IO.SMD,I.FCN(R1) ; SET MEDIA DENSITY? BNE 580$ ; IF NE NOT% JMP DYSMD ; RETRY SET MEDIA DENSITYD5580$: MOV I.PRM+10(R1),R0 ; GET LOGICAL SECTOR NUMBERB9 BIT #WCOVFL!DENERR,I.PRM+6(R1) ; WORD COUNT OVERFLOW OR? ; DENSITY ERROR ?  BEQ 610$ ; IF EQ NOF2 BIT #DRVDEN,I.PRM+6(R1) ; IS IT DOUBLE DENSITY ? BNE 590$ ; IF NE YES2 BIC #DEN,U.CW2(R5) ; CORRECT IT TO SINGLE DENSITY BIC #SDEN,U.BUF(R5) ; HERE TOO  ASL R0 ; MULTIPLY LSN BY 2; MOV #SINGLE,U.CW3(R5) ; CHANGE MAX LBN'S TO SINGLE DENSITY, BR 600$ 00OllOlkTADATADATADATADATADATA;E3590$: BIS #DEN,U.CW2(R5) ; CHANGE TO DOUBLE DENSITY  ASR R0 ; DIVIDE LSN BY 2; MOV #DOUBLE,U.CW3(R5) ; CHANGE MAX LBN'S TO DOUBLE DENSITY#7600$: MOV R0,I.PRM+10(R1) ; STORE LOGICAL SECTOR NUMBER 3610$: BIC #ERR1,U.CW2(R5) ; CLEAR TIMEOUT ERROR BITD JMP 80$ ; RETRY FUNCTION6620$: MOVB #1,RTTBL+1(R3) ; SET INITIALIZE IN PROGRESS0 MOV #INIT!INTEBL,CSRSV(R3) ; SAVE FUNCTION CODE0 MOV #INIT!INTEBL,(R2) ; INITIALIZE RX211 DRIVES/ MOVB S.ITM(R4),S.CTM(R4) ; SET TIMEOUT COUNTER RETURN ; ,630$: BIT #DRVRDY,I.PRM+6(R1) ; DRIVE READY? BEQ 640$ ; IF EQ NO JMP 390$ ; EXIT WITH IE.VERB5640$: MOV #IE.DNR&377,R0 ; SET DEVICE NOT READY ERROR$ JMP 420$ ; EXIT WITH IE.DNRO .DSABL LSBN;+>; *** - TRKSEC - CONVERT LOGICAL OR PHYSICAL BLOCK NUMBER TO; TRACK-SECTOR PAIR2; ; INPUT:; R3 - I/O PACKET ADDRESSI+; I.PRM+10(R3) - LOGICAL OR PHYSICAL SECTORE;N ; OUTPUT:; I.PRM+14(R3) - SECTOR (1-26.)Z; I.PRM+15(R3) - TRACK (0-76.); R3 - UNCHANGED; C CLEAR - VALID BLOCK 0; C SET - BAD BLOCK NUMBER (PHYSICAL OR LOGICAL);Q;-;TRKSEC: MOV I.PRM+10(R3),R1 ; GET LOGICAL OR PHYSICAL BLOCKN MOV #8.,R0 ; SET LOOP COUNT  MOV #6400,R2 ; SET DIVISORH+10$: CMP R2,R1 ; DOES 26 GO INTO DIVIDEND?  BHI 20$ ; IF HI NO (C=0)' SUB R2,R1 ; SUBTRACT 26 FROM DIVIDEND SEC ; SET CARRY*20$: ROL R1 ; SHIFT DIVIDEND AND QUOTIENT DEC R0 ; DONE? BGT 10$ ; IF GT NO BISB R1,R0 ; GET TRACK NUMBER/ CMP R0,#77. ; IS IT A LEGITMATE TRACK NUMBER? BHI 60$ ; IF HI NO BLO 30$ ; IF LO YES 6 BITB #IO.RPB&377,I.FCN(R3) ; PHYSICAL BLOCK FUNCTION?% BEQ 60$ ; IF EQ NO, BAD BLOCK ERRORL"30$: CLRB R1 ; CLEAR TRACK NUMBER$ SWAB R1 ; SHIFT DONE SECTOR NUMBER< BITB #IO.RPB&377,I.FCN(R3) ; IS IT A PHYSICAL BLOCK NUMBER? BNE 50$ ; IF NE YEST% CMP #12.,R1 ; NO, C=1 IF 13<=R1<=25R' ROL R1 ; DOUBLE FOR INTERLEAVE FACTORT ASL R0 ; ADD TRACK -TRACK SKEW ADD R0,R1 ; SKEW BY 2*TRACKT ADD R0,R1 ; SKEW BY 4*TRACKS ADD R0,R1 ; SKEW BY 6*TRACK ASR R0 ; RESTORE TRACK NUMBER  MOV #26.,R2 ; SET MODULUS,640$: SUB R2,R1 ; MODULO SECTOR INTO RANGE -26. TO -1.& BGE 40$ ; IF GE, LOOP UNTIL NEGATIVE$ ADD R2,R1 ; CONVERT TO RANGE 0-25.! INC R0 ; LBN0 STARTS ON TRACK 1,%50$: INC R1 ; CONVERT TO RANGE 1-26.E) MOV R1,I.PRM+14(R3) ; SAVE SECTOR NUMBER  BR 70$ ; - BRANCHR#60$: SEC ; SIGNAL BAD BLOCK ERRORC) MOVB R0,I.PRM+15(R3) ; SAVE TRACK NUMBERD BR 80$ ; RETURN*-70$: MOVB R0,I.PRM+15(R3) ; SAVE TRACK NUMBER,9 CMP #77.*256.,I.PRM+14(R3) ; IS IT A VALID TRACK/SECTOR?M80$: RETURN ; ;+7; *** - NXTSEC - UPDATE BLOCK NUMBER , BUFFER ADDRESS.; AND BUFFER POINTER;N; INPUT:; R3 - I/O PACKET ADDRESSO; R5 - UCB ADDRESS%; I.PRM+10(R3) - CURRENT BLOCK NUMBERR6; I.PRM+12(R3) - BYTES TRANSFERED DURING LAST FUNCTION$; U.CNT(R5) - BYTES LEFT TO TRANSFER; U.BUF(R5) - BUFFER ADDRESS;R ; OUTPUT: %; I.PRM+10(R3) - UPDATED BLOCK NUMBERB(; U.BUF(R5) - UPDATED BY 128./256. BYTES3; U.CNT(R5) - UPDATED BY NUMBER OF WORDS TRANSFERED ; Z SET - ALL BYTES TRANSFERED"; Z CLEAR - MORE BYTES TO TRANSFER; C CLEAR - VALID TRACK/SECTOR; C SET - BAD BLOCK NUMBER;T;+.NXTSEC: INC I.PRM+10(R3) ; UPDATE BLOCK NUMBER) MOVB S.CON(R4),R0 ; GET CONTROLLER INDEXN% BIT #DEN,U.CW2(R5) ; SINGLE DENSITY?E BEQ 5$ ; IF EQ YESB ADD #256.,U.BUF+2(R5) ; UPDATE BUFFER ADDRESS FOR DOUBLE DENSITY BR 10$ ; AND CONTINUE E5$: ADD #128.,U.BUF+2(R5) ; UPDATE BUFFER ADDRESS FOR SINGLE DENSITYS"10$: BCC 15$ ; IF CC, NO OVERFLOW7 ADD #10000,U.BUF(R5) ; CARRY INTO EXTENDED MEMORY BITSL@15$: SUB I.PRM+12(R3),U.CNT(R5) ; UPDATE BYTES LEFT TO TRANSFER0 SUB I.PRM+12(R3),COUNT(R0); UPDATE COUNT FOR IB TST BFLAG(R0) ; BUFFER DATA ?M BEQ 100$ ; NO;1 CMPB #IO.WLB/256.,I.FCN+1(R3); WRITE OPERATION ?E BEQ 100$ ; YES' TST U.CNT(R5) ; ANY MORE DATA TO GET ?  BLE 30$ ; NO - MOVE IT& BIT #DEN,U.CW2(R5) ; SINGLE DENSITY ? BEQ 26$ ; YES.( CMP #256.,COUNT(R0) ; MORE ROOM IN IB ? BLE 100$ ; YES BR 30$ ; NO - MOVE THE DATA,26$: CMP #128.,COUNT(R0) ; MORE RO00Ol_l"al8blOM IN IB ? BLE 100$ ; YES.30$: MOV BUFLEN(R0),TEMP(R0); NUMBER OF BYTES % SUB COUNT(R0),TEMP(R0); TO TRANSFER;32$: CALL BLXIO ; MOVE DATA7 ADD #<256./100>,DYPTR(R0) ; UPDATE POINTER INTO DYCOM / ; (32 WORD BLOCKS)7 SUB #256.,TEMP(R0) ; UPDATE TEMPORY COUNT FOR MULTIPLET ; FORKSE BLE 35$ ;M& TST @FRKHD ; ANYONE WAITING TO FORK?$ BEQ 32$ ; IF EQ NO -> DO SOME MORE* MOV (SP)+,RETPTR(R0); SAVE RETURN ADDRESS, CALL @FORK ; LET SOMEONE ELSE DO SOME WORK) MOVB S.CON(R4),R0 ; GET CONTROLLER INDEX0# MOV S.CSR(R4),R2 ; GET CSR ADDRESS)* MOV S.PKT(R4),R3 ; GET I/O PACKET ADDRESS2 MOV RETPTR(R0),-(SP); PUT RETURN ADDRESS ON STACK BR 32$ ; NOW DO SOME MORE WORK135$: MOV BUFLEN(R0),COUNT(R0); RESET LENGTH OF IBB6 BIC #30000,U.BUF(R5) ; RESET EXTENDED ADDRESSING BITS0 BIS HIPHYA(R0),U.BUF(R5); TO POINT TO BEG OF IB0 MOV LOPHYA(R0),U.BUF+2(R5); RESET LO BITS OF IB& MOV DYPCB,R1 ; GET PCB OF DATA COMMON7 MOV P.REL(R1),DYPTR(R0); INITIALIZE POINTER INTO DYCOMV TST R0 ; ONE CONTROLLER ?E BEQ 100$ ; YES) MOV P.SIZE(R1),-(SP); GET SIZE OF REGION) ASR (SP) ; CUT IN HALF7 ADD (SP)+,DYPTR(R0) ; POINT INTO SECOND HALF OF REGIONB2100$: TST U.CNT(R5) ; IF EQ TO ZERO THEN ALL DONE RETURN ;S;N;+,; ** -- BLXIO -- MOVE BLOCK OF DATA ROUTINE;DG; THE MOVE BLOCK OF DATA ROUTINE WILL MOVE THE SPECIFIED DATA IN MEMORYY;0;-BLXIO: MOV R0,-(SP) ; SAVE REG MOV R1,-(SP) ;  MOV R2,-(SP) ;  MOV R3,-(SP) ;  MOV R4,-(SP) ; E MOV R5,-(SP) ;O! MOV R3,R5 ; SAVE I/O PACKET ADDB) MOVB S.CON(R4),R2 ; GET CONTROLLER INDEXS+ MOV PHYADD(R2),R1 ; GET LO BITS OF ADDRESSD* MOV HIADD(R2),R0 ; GET HI BITS OF ADDRESS( ASHC #10.,R0 ; CALCULATE DISP AND BIAS ASHC #-10.,R1 ;0 CMPB #IO.WLB/256.,I.FCN+1(R5); WRITE FUNCTION ? BEQ 10$ ; YESI& ADD #APR6DS,R1 ; SET TO MAP THRU APR6" MOV R0,R3 ; DESTINATION APR BIAS MOV R1,R4 ; APR6 DISPLACEMENTP, CMP #256.,TEMP(R2) ; MORE THAN 256 BYTES TO BLE 5$ ; BE TRANSFERRED ?, MOV TEMP(R2),R0 ; NOP BR 7$ ;R75$: MOV #256.,R0 ; YES - AT LEAST 256 BYTES TO TRANSFERN57$: ADD R0,PHYADD(R2) ; UPDATE FOR NEXT CALL TO BLXIOR% ADC HIADD(R2) ; NOT FOR CURRENT CALLF% MOV DYPTR(R2),R1 ; SOURCE APR5 BIAS S% MOV #APR5DS,R2 ; SOURCE DISPLACEMENT. BR 20$ ;-10$: ADD #APR5DS,R1 ; SET UP TO MAP THRU APR5A, CMP #256.,TEMP(R2) ; MORE THAN 256 BYTES TO BLE 17$ ; BE TRANSFERRED ? MOV TEMP(R2),R3 ; NOC BR 18$ ;817$: MOV #256.,R3 ; YES - AT LEAST 256 BYTES TO TRANSFER618$: ADD R3,PHYADD(R2) ; UPDATE FOR NEXT CALL TO BLXIO) ADC HIADD(R2) ; NOT FOR THE CURRENT CALLA MOV R3,-(SP) ; SAVE REG( MOV DYPTR(R2),R3 ; DESTINATION APR BIAS MOV R1,R2 ; APR DISPLACEMENT MOV R0,R1 ; SOURCE APR BIASA MOV (SP)+,R0 ; RESTORE REG * MOV #APR6DS,R4 ; DESTINATION DISPLACEMENT 20$: CALL @BLXI ; MOVE THE DATA MOV (SP)+,R5 ; RESTORE REGE MOV (SP)+,R4 ;  MOV (SP)+,R3 ;T MOV (SP)+,R2 ;V MOV (SP)+,R1 ;C MOV (SP)+,R0 ;: RETURN.;+; **-LOGTMO-LOG DEVICE TIMEOUT; **-LOGERR-LOG DEVICE ERROR;U=; THESE ROUTINES WILL ALLOCATE A CORE BLOCK, FILL IT WITH THEE=; REGISTER INFORMATION, CALL THE APPROPRIATE EXECUTIVE ERROR T=; LOGGING ROUTINE, DEALLOCATE THE CORE BLOCK, AND RETURN BACKR; TO THE CALLER.;P ; INPUTS:T; R2=CSR ADDRESS; R4=SCB ADDRESS; R5=UCB ADDRESS;: ; OUTPUTS:; SAME AS INPUTS.M$; ALL OTHER REGISTERS ARE DESTROYED.;- .ENABL LSBR9LOGERR: MOV DVERR,-(SP) ; ADDRESS OF DEVICE ERROR ROUTINE BR 10$ ;=LOGTMO: MOV DTOER,-(SP) ;;; ADDRESS OF DEVICE TIMEOUT ROUTINE510$: MOV #DYNUM*2,R1 ; GET NUMBER OF REGISTERS TO LOGT+ CALL @ALOCB ; ALLOCATE THE REGISTER BLOCKA BCC 20$ ; IF CC OK& INC @ERRSQ ; INDICATE A MISSED ERROR! CMP (SP)+,DTOER ; TIMEOUT ERROR?O BNE 30$ ; IF NE NO* CLR @S.CSR(R4) ;;; CLEAR INTERRUPT ENABLE MTPS #0 ;;; ALLOW INTERRUPTS BR 30$ ;)20$: MOV R0,R1 ; COPY CORE BLOCK ADDRESSE( MOV S.CSR(R4),R2 ; RETRIEVE CSR ADDRESS" MOV (R2),(R1) ; SAVE CSR CONTENTS. MOVB S.CON(R4),R3 ; RETRIEVE CONTROLLER INDEX) BIC #^C<17>,CSRSV(R3) ; ISOLATE BITS 0-4#, BIS CSRSV(R3),(R1)+00Ol llkTADATADATADATADATADATA ; INCLUDE FUNCTION CODE MOV RXDB(R2),(R1)+ ; SAVE RXDBS .REPT 4 CLR (R1)+ ; ZERO 4 WORDS .ENDR$ MOV R0,R2 ; GET CORE BLOCK ADDRESS CALL @(SP)+ ; LOG THE ERRORF) MOV R2,R0 ; GET BACK CORE BLOCK ADDRESS 4 MOV #DYNUM*2,R1 ; GET NUMBER OF BYTES TO DEALLOCATE) CALL @DEACB ; DEALLOCATE THE CORE BLOCKM,30$: MOV S.CSR(R4),R2 ; RETRIEVE CSR ADDRESS RETURN ;V .DSABL LSBS .ENDON(R4),R3 ; RETRIEVE CONTROLLER INDEX) BIC #^C<17>,CSRSV(R3) ; ISOLATE BITS 0-4#, BIS CSRSV(R3),(R1)+ .TITLE EMDRV1 .IDENT /01.02/ ;T6; COPYRIGHT (C) 1981 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;Q<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;E; VERSION 01.02V;.; P. J. CARR 25-AUG-81; ; MODIFIED BY:;L; P. J. BEZEREDI 14-SEP-81;K8; PB264 -- RESTORE I/O PACKET ADDRESS AFTER WRITE CHECK; DETERMINATION CODE. ;D; P. J. BEZEREDI 22-OCT-81;;6; PB269 -- RETURN IE.SZE ERROR FOR NON-EXISTANT UNIT.;D; ; RH11-ML11 MEMORY SYSTEM DRIVER; ; MACRO LIBRARY CALLSR;O .MCALL HWDDF$,PKTDF$.$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;N; EQUATED SYMBOLST;H&ADR= 10 ;ADDRESS BITS SET UP (1=YES)'SEL= 20 ;PORT SELECT WAIT (1=WAITING)ORETRY= 8. ;ERROR RETRY COUNT;E; ML11 DEVICE REGISTER OFFSETS;A'MLCS1= 0 ;CONTROL AND STATUS REGISTERNMLWC= 2 ;WORD COUNT REGISTERMLBA= 4 ;BUS ADDRESS REGISTERUMLDA= 6 ;TRACK/SECTOR ADDRESSU#MLCS2= 10 ;SECOND STATUS REGISTERE!MLDS= 12 ;DRIVE STATUS REGISTERRMLER= 14 ;ERROR REGISTER&MLAS= 16 ;ATTENTION SUMMARY REGISTER;T; MLCS1 BIT ASSIGNMENTSO;ETRE= 40000 ;TRANSFER ERROR;D ; LOCAL DATA;B>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);=7RTTBL: .BLKW M$$L11 ;RETRY COUNT FOR CURRENT OPERATIONE=PRMSV: .BLKW M$$L11*5 ;PARAMETER SAVE AREA FOR ERROR RECOVERYW ;AND WRITE CHECK FUNCTIONB;D; DRIVER DISPATCH TABLE ;A( DDT$ EM,M$$L11 ;GENERATE DISPATCH TABLE;+,; **-EMINI-RH11-ML11 MEMORY SYSTEM INITIATOR; B; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/OA; REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TOB; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED UNIT ISD; NOT BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST,F; ELSE A RETURN TO THE CALLER IS EXECUTED. IF THE DEQUEUE ATTEMPT IS E; SUCCESSFUL, THEN THE NEXT I/O OPERATION IS INITIATED FOLLOWED BY A D; RETURN TO THE CALLER.I;T ; INPUTS:;3; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIATEDH;R ; OUTPUTS:;EA; IF THE SPECIFIED UNIT IS NOT BUSY AND AN I/O REQUEST IS WAITING @; TO BE PROCESSED, THEN THE NEXT REQUEST IS DEQUEUED AND THE I/O; OPERATION IS INITIATED.S;- .ENABL LSB 7EMINI: GTPKT$ EM,M$$L11 ;GET NEXT I/O PACKET TO PROCESS ;S1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:T;D&; R1=ADDRESS OF THE I/O REQUEST PACKET,; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB; R3=CONTROLLER INDEXA(; R4=ADDRESS OF THE STATUS CONTROL BLOCK3; R5=ADDRESS OF THE UCB OF THE UNIT TO BE INITIATED:;E4; RH11-ML11 MEMORY SYSTEM I/O REQUEST PACKET FORMAT:;I!; WD. 00 -- I/O QUEUE THREAD WORD /; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERT4; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK?; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER 4; WD. 04 -- FIRST LUN WORD IN REQUESTORS TASK HEADER0; WD. 05 -- I/O FUNCTION CODE (IO.RLB OR IO.WLB)/; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK4/; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCKS<; WD. 10 -- I/O STATUS BLOCK ADDRESS (DISPLACEMENT + 140000)2; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE@; WD. 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER*; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERREDN; WD. 15 -- NOT USED7; WD. 16 -- BITS <0:7> = HIGH LBN, BITS <8:15> NOT USEDT"; WD. 17 -- LOW LBN OF I/O REQUEST;; WD. 20 -- RELOCATION BIAS OF REGISTER BLOC00 l_l"al8blK ELSE NOT USEDS:; WD. 21 -- REGISTER BLOCK ADDRESS (DISPLACEMENT + 140000);( BICB #ADR!SEL,U.CW2+1(R5) ;CLEAR FLAGS% MOV #RETRY,RTTBL(R3);SET RETRY COUNTD$ CALL $VOLVD ;VALIDATE VOLUME VALID BCS 10$ ;IF CS WE FAILED TST R0 ;TRANSFER FUNCTION? BMI EMUBMP ;IF MI YESS TST I.PRM+2(R1) ;SIZE THE DISK? BPL 10$ ;IF PL NON3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER>( MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS, MOVB U.UNIT(R5),MLCS2(R2) ;SELECT THE UNIT. MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS MOVB #111,(R2) ;CLEAR THE DRIVE+ BIT #10000,MLCS2(R2);DOES THE DRIVE EXIST?U BEQ 5$ ;IF EQ YESA2 MOVB #TRE/256.,MLCS1+1(R2) ;CLEAR THE CONTROLLER* MOV #IE.SZE&377,R0 ;UNABLE TO SIZE DEVICE) BICB #US.VV,U.STS(R5);RESET VOLUME VALID$ CALL $RLCN ;RELEASE THE CONTROLLER BR 10$ ;EXIT35$: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKN- MOV #IS.SUC&377,R0 ;SET SUCCESSFUL OPERATION; BR 50$ ;10$: CALL $IODON ;FINISH I/O2& BR EMINI ;GET NEXT PACKET TO PROCESS;RC; NOW REQUEST THE CONTROLLER AND DETERMINE IF THE UNIBUS ADDRESS IS0D; ALREADY IN THE FORMAT FOR THE MASSBUS CONTROLLER OR THE UNIBUS MAP/; FOR 22-BIT PROCESSORS WITHOUT RH CONTROLLERS.E;E:EMUBMP: BITB #ADR,U.CW2+1(R5);ADDRESS BITS ALREADY SET UP? BNE EMINIO ;IF NE YES / BISB #ADR,U.CW2+1(R5);SHOW ADDRESS BITS SET UPL3 CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFERS' MOV S.KRB(R4),R1 ;RETRIEVE KRB ADDRESSB/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?N BEQ 20$ ;IF EQ NOO: BIT #KS.MBC,K.STS(R1) ;YES, IS THIS A 22-BIT CONTROLLER? BNE 30$ ;IF NE YES( CALL $STMAP ;SET UP UNIBUS MAP ADDRESS220$: ASL U.BUF(R5) ;SHIFT BITS <4:5> TO BITS <8:9> ASL U.BUF(R5) ;...E ASL U.BUF(R5) ;...I ASL U.BUF(R5) ;...D/ BIT #FE.EXT,$FMASK ;22-BIT ADDRESSING ENABLED?E BEQ 30$ ;IF EQ NO1% CALL $MPUBM ;MAP UNIBUS TO TRANSFERR;D<; CONVERT THE I/O FUNCTION CODE TO IT'S HARDWARE EQUIVALENT.;I230$: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS7 CMP #IO.WCK!IQ.UMD,I.FCN(R1) ;DIAGNOSTIC WRITE CHECK?R BNE 40$ ;IF NE NO2, BISB #151,U.BUF(R5) ;YES, SET FUNCTION CODE BR 60$ ;040$: MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION2 BISB #171,U.BUF(R5) ;ASSUME READ LOGICAL FUNCTION6 CMPB #IO.RLB/256.,I.FCN+1(R1) ;READ LOGICAL FUNCTION?$ BHIS 55$ ;IF HIS FUNCTION IS LEGAL,50$: MOV @S.KRB(R4),R2 ;RETRIEVE CSR ADDRESS) MOVB U.UNIT(R5),MLCS2(R2) ;SELECT DRIVEC CALLR EMFIN1 ;FINISH UPL%55$: BEQ 60$ ;IF EQ FUNCTION IS READV5 SUB #10,U.BUF(R5) ;CONVERT TO WRITE LOGICAL FUNCTIONI;O; VALIDATE AND CONVERT LBN. ; -60$: CALL $BLKCK ;CHECK LOGICAL BLOCK NUMBER ' MOV R0,I.PRM+12(R3) ;SAVE DISK ADDRESS ' MOV S.KRB(R4),R1 ;RETRIEVE KRB ADDRESSF- MOVB K.CON(R1),R1 ;RETRIEVE CONTROLLER INDEXL% MUL #5,R1 ;SET UP AN INDEX INTO ...O' ADD #PRMSV,R1 ;... PARAMETER SAVE AREA& MOV U.BUF(R5),(R1)+ ;SAVE PARAMETERS MOV U.BUF+2(R5),(R1)+ ;... MOV U.CNT(R5),(R1)+ ;... MOV I.PRM+10(R3),(R1)+ ;... MOV I.PRM+12(R3),(R1)+ ;... .DSABL LSBR;O$; **-EMINIO-INTIATE AN I/O OPERATION;AB; THIS ROUTINE WILL INITIATE THE DATA TRANSFER OPERATION. AT THIS=; POINT THE CONTROLLER MUST BE REQUESTED FOR A DATA TRANSFER.R;R ; INPUTS: ; ; R4=ADDRESS OF THE SCB.; R5=ADDRESS OF THE UCB.;L*EMINIO: MOV @S.KRB(R4),R2 ;GET CSR ADDRESS) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSU( MOVB U.UNIT(R5),MLCS2(R2) ;SELECT UNIT;29; DETERMINE IF DRIVE'S PORT IS SEIZED BY THIS CONTROLLER.1;3) CLR MLDS(R2) ;ATTEMPT TO SEIZE THE DRIVE( BIT #400,MLDS(R2) ;DID THE DRIVE SEIZE? BNE 5$ ;IF NE YES % MOVB #100,(R2) ;RE-ENABLE INTERRUPTSN0 BISB #SEL,U.CW2+1(R5);SET PORT SELECT WAIT FLAG< MOVB S.ITM(R4),S.CTM(R4) ;SET CURRENT DEVICE TIMEOUT COUNT* CALLR $RLCN ;RELEASE CONTROLLER AND EXIT;..; LOAD CONTROLLER REGISTERS FOR DATA TRANSFER.;75$: MOV #TRE!11,(R2) ;CLEAR CONTROLLER AND DRIVE ERRORSR# ADD #MLCS2,R2 ;POINT TO SECOND CSRE- MOV I.PRM+12(R1),-(R2) ;INSERT DISK ADDRESSL. MOV U.BUF+2(R5),-(R2) ;INSERT BUFFER ADDRESS8 MOV U.CNT(R5),-(R2) ;INSERT NUMBER OF BYTES TO TRANSFER! ROR (R2) ;00 mllkTADATADATADATADATADATACONVERT TO WORD COUNTB$ NEG (R2) ;MAKE NEGATIVE WORD COUNT" TST -(R2) ;POINT TO CSR REGISTER;(&; TEST FOR DRIVE NOT READY CONDITIONS.;C+ MOV #IE.DNR&377,R0 ;ASSUME DRIVE NOT READYX7 MOV MLDS(R2),R3 ;GET CONTENTS OF DRIVE STATUS REGISTER COM R3 ;COMPLEMENT STATUS ( BIT #10200,R3 ;DRIVE READY AND ON-LINE? BEQ 20$ ;IF EQ YES1 BITB #US.SPU,U.STS(R5) ;IS DRIVE 'SPINNING UP'? BEQ 10$ ; IF EQ NO; BITB #US.VV,U.STS(R5) ;WAS THE VOLUME PREVIOUSLY MOUNTED?  BEQ EMPWF1 ;IF EQ NO* BR EMPWF0 ;YES, WAIT FOR IT TO 'SPIN UP'210$: BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC OPERATION BEQ 15$ ;IF EQ NOT. CALLR EMDIAG ;LOG DIAGNOSTIC DRIVE NOT READY+15$: CALL $DVERR ;LOG DEVICE TIMEOUT ERROR( CALLR EMFIN ;FINISH UP720$: BICB #US.SPU,U.STS(R5) ;RESET DRIVE 'SPINNING UP'#8 BICB #S3.SPU,S.ST3(R4) ;CLEAR PORT 'SPINNING UP' FLAGS* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS MOV R3,R1 ;COPY KRB ADDRESSB; $; START THE DATA TRANSFER OPERATION.;S! MTPS #PR5 ;;;DISABLE INTERRUPTSO1 BIT #FE.EXT,$FMASK ;;;22-BIT ADDRESSING ENABLED?B BEQ 30$ ;;;IF EQ NO;7 BIT #KS.MBC,K.STS(R3) ;;;IS THIS A 22-BIT CONTROLLER?  BEQ 30$ ;;;IF EQ NON' ADD K.OFF(R3),R1 ;;;POINT TO UCB TABLEI+ MOV KE.RHB(R1),R1 ;;;RETRIEVE RHBAE OFFSETB' ADD R2,R1 ;;;FORM AN I/O PAGE ADDRESSN2 MOVB U.BUF+1(R5),(R1);;;SET MEMORY EXTENSION BITS& MOVB U.BUF(R5),(R2) ;;;START FUNCTION BR 40$ ;;;)30$: MOV U.BUF(R5),(R2) ;;;START FUNCTION +40$: CLR S.FRK+2(R4) ;;;INIT FORK INTERLOCK / MOVB S.ITM(R4),S.CTM(R4) ;;;SET TIMEOUT COUNT 8 BIS #KS.DIP,K.STS(R3) ;;;SET DATA TRANSFER IN PROGRESS- BIS #S2.ACT,S.ST2(R4) ;;;SHOW I/O IS ACTIVEO MTPS #0 ;ALLOW INTERRUPTSN;D<; CANCEL I/O OPERATION IS A NOP FOR FILE STRUCTURED DEVICES.;EEMCAN: RETURN ;NOP;+:; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND); CAUSES NO IMMEDIATE ACTION ON THE UNIT.;;-3EMPWF: TSTB S.STS(R4) ;IS THIS UNIT CURRENTLY BUSY?S BEQ EMPWF2 ;IF EQ NO6EMPWF0: MOVB #4,S.STS(R4) ;WAIT A MAXIMUM OF 8 SECONDS6EMPWF1: MOVB S.ITM(R4),S.CTM(R4) ;2 SECONDS AT A TIME7EMPWF2: BISB #US.SPU,U.STS(R5) ;SET UNIT 'SPINNING UP' 7EMPWF3: CALLR $RLCN ;RELEASE CONTROLLER (IF NECESSARY)D;+9; **-$EMINT-RH11-ML11 MEMORY SYSTEM CONTROLLER INTERRUPTS; INTERRUPT SERVICE ROUTINE;-3$EMINT::BR EMFRK ;;;ENTRY POINT FOR DATA TRANSFERS+ TST S.FRK+2(R4) ;;;ARE INTERRUPTS ALLOWED?- BNE EMCAN ;;;IF NE NO ' CALL $FORK ;;;CREATE A SYSTEM PROCESSF9EMFRK: CALL $RQCND ;REQUEST CONTROLLER FOR DATA TRANSFER82 BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT? BEQ 5$ ;IF EQ NO2 BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT WAIT FLAG% JMP EMINIO ;YES, GO DO THE TRANSFERR-5$: MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS - MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXP% MOV U.SCB(R5),R4 ;GET ADDRESS OF SCBF/ MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERK# MOV @S.KRB(R4),R2 ;GET CSR ADDRESSB( MOVB U.UNIT(R5),MLCS2(R2) ;SELECT UNIT# TSTB S.STS(R4) ;IS THIS UNIT BUSY?R BNE 15$ ;IF NE YES& CLR S.FRK+2(R4) ;RESET FORK INTERLOCK- MOV #TRE!11,(R2) ;CLEAR CONTROLLER AND DRIVEF- BIT #S2.MAD,S.ST2(R4) ;MULTI-ACCESS DEVICE?T BNE 10$ ;IF NE YES. MOVB #100,(R2) ;NO, JUST RE-ENABLE INTERRUPTS( BR EMPWF3 ;RELEASE CONTROLLER AND EXIT&10$: MOVB #113,(R2) ;RELEASE THE DRIVE8 BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED( BR EMPWF3 ;RELEASE CONTROLLER AND EXIT;2+; THE UNIT WAS BUSY. NOW CHECK FOR ERRORS.);S315$: BITB #US.SPU,U.STS(R5) ;ARE WE 'SPINNING UP'?E BNE EMREST ;IF NE YESF) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS17 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION EXECUTED?) BNE EMDIAG ;IF NE YES BIT #60000,(R2) ;ANY ERRORS?0 BEQ EMWCHK ;IF EQ NO. MOV MLWC(R2),R0 ;GET NEGATIVE WORDS REMAINING# ASL R0 ;CONVERT TO NEGATIVE BYTEST7 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERRED * SUB #512.,R0 ;SUBTRACT OUT BLOCK IN ERROR* BLE 20$ ;IF LE NO GOOD BYTES TRANSFERRED2 BIT #S2.EIP,S.ST2(R4) ;ERROR ALREADY IN PROGRESS BEQ 20$ ;IF EQ NOB;E;; WE GOT AN ERROR BUT SOME GOOD DATA WAS TRANSFERRED. 00  m_l"al8bl THIS16; INDICATES THAT WE RECOVERED FROM THE PREVIOUS ERROR.;, CALL EMCALC ;CALCULATE NEW DISK PARAMETERS MOV R2,-(SP) ;SAVE CSR ADDRESSO/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNT/ BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTR1 MOV #IS.SUC&377,R0 ;THIS RECOVERY WAS SUCCESSFUL#+ CALL $FNERL ;FINISH ERROR LOGGING PROCESS$- MOV #RETRY,RTTBL(R3);SET INITIAL RETRY COUNTP" MOV (SP)+,R2 ;RESTORE CSR ADDRESS#20$: CALL $DVERR ;LOG DEVICE ERRORT- MOV #IE.WCK&377,R0 ;ASSUME WRITE CHECK ERRORT* BIT #40000,MLCS2(R2) ;WRITE CHECK ERROR? BNE EMRTRY ;IF NE YESL/ MOV #IE.VER&377,R0 ;ASSUME UNRECOVERABLE ERROR,0 MOV MLER(R2),R1 ;GET CONTENTS OF ERROR REGISTER BIT #43007,R1 ;HARD ERROR?S BNE 30$ ;IF NE YES! BIT #14000,MLCS2(R2);NEM OR NED?C BNE 30$ ;IF NE YES TST MLCS2(R2) ;DATA LATE ERROR? BPL EMRTRY ;IF PL NO, CALL EMCALC ;YES, CALCULATE NEW PARAMETERS& BR EMRTRY ;RETRY FROM BLOCK IN ERROR$30$: BIT #4000,R1 ;WRITE LOCK ERROR? BEQ EMFIN ;IF EQ NO ) MOV #IE.WLK&377,R0 ;SET WRITE LOCK ERRORS BR EMFIN ;FINISH I/O;B@; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING REPEATEDA; UNLESS THE REQUEST WAS DIAGNOSTIC. TIMEOUTS ARE USUALLY CAUSED0C; BY POWERFAILURE BUT MAY ALSO BE THE RESULT OF A HARDWARE FAILURE.R;D9EMOUT: BITB #US.SPU,U.STS(R5) ;;;IS DRIVE 'SPINNING UP'?B BEQ 10$ ;;;IF EQ NOC- DECB S.STS(R4) ;;;HAVE WE WAITED ENOUGH YET?  BEQ 10$ ;;;IF EQ YES MTPS #0 ;;;ALLOW INTERRUPTSW. CALL $RQCND ;REQUEST CONTROLLER FOR TRANSFER# BR EMREST ;RETRY ENTIRE OPERATION,10$: INCB S.STS(R4) ;;;LEAVE CONTROLLER BUSY5 BICB #US.SPU,U.STS(R5) ;;;RESET DRIVE 'SPINNING UP'E MTPS #0 ;;;ALLOW INTERRUPTS . CALL $RQCND ;REQUEST CONTROLLER FOR TRANSFER* MOV S.KRB(R4),R2 ;GET CURRENT KRB ADDRESS- MOVB K.CON(R2),R3 ;RETRIEVE CONTROLLER INDEX;# MOV (R2),R2 ;RETRIEVE CSR ADDRESS;( MOVB U.UNIT(R5),MLCS2(R2) ;SELECT UNIT! CALL $DVTMO ;LOG DEVICE TIMEOUTQ2 BITB #SEL,U.CW2+1(R5);WAITING FOR PORT TO SELECT?) BNE EMFIN1 ;IF NE YES, WE DIDN'T GET ITT3 BCC EMRTRY ;IF CC, TIMEOUT DURING NORMAL FUNCTIONA7EMDIAG: CALL $CRPAS ;PASS CONTROLLER REGISTERS TO TASKV* BR EMFIN ;DIAGNOSTIC PROCESSING COMPLETE; ; RETRY THE CURRENT OPERATION.; 0EMRTRY: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS' BITB #IQ.X,I.FCN(R1) ;INHIBIT RETRIES?R BNE EMFIN ;IF NE YES DEC RTTBL(R3) ;RETRY FUNCTION?  BLE EMFIN ;IF LE NOS'EMREST: MOVB #111,(R2) ;CLEAR THE DRIVEE! CALLR EMUBMP ;RESTART OPERATIONG;R!; TEST FOR WRITE CHECK OPERATION.N;ECEMWCHK: BITB #IO.WLC&377,I.FCN(R1) ;WRITE FOLLOWED BY WRITE CHECK?T BNE 10$ ;IF NE YES5 BITB #US.WCK,U.STS(R5) ;WRITE CHECK ENABLED BY MCR?I BEQ EMFIN ;IF EQ NOP)10$: MOVB U.BUF(R5),R1 ;GET LAST FUNCTION  CMPB #171,R1 ;WAS IT A READ? BEQ EMFIN ;IF EQ YES* CMPB #161,R1 ;WAS LAST FUNCTION A WRITE? BNE EMFIN ;IF NE NOR. MOV #RETRY,RTTBL(R3);REINITIALIZE RETRY COUNT. MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS# MUL #5,R3 ;FORM AN INDEX INTO ...' ADD #PRMSV,R3 ;... PARAMETER SAVE AREAM) MOV (R3)+,U.BUF(R5) ;RESTORE PARAMETERSL MOV (R3)+,U.BUF+2(R5) ;... MOV (R3)+,U.CNT(R5) ;... MOV (R3)+,I.PRM+10(R1) ;... MOV (R3)+,I.PRM+12(R1) ;.... MOVB #151,U.BUF(R5) ;SET WRITE CHECK FUNCTION( BR EMREST ;START WRTIE CHECK OPERATION;I; **-EMFIN-FINISH I/O OPERATIONT;NC; THIS ROUTINE WILL SET THE ACTUAL BYTES TRANSFERRED PARAMETER, THEAC; ERROR LOGGING RETRY COUNTS AND CALL $IODON. A CHECK WILL BE MADELA; FOR ANY PENDING ATTENTIONS AND THE CONTROLLER WILL BE RELEASED.E;E ; INPUTS:3;U; R0=SUCCESS/ERROR CODET; R2=ADDRESS OF CONTROLLER CSR; R4=ADDRESS OF THE SCB ; R5=ADDRESS OF THE UCB1;17EMFIN: MOV MLWC(R2),R1 ;GET WORDS REMAINING TO TRANSFER;+ ASL R1 ;CONVERT TO BYTES LEFT TO TRANSFERW7 ADD U.CNT(R5),R1 ;CALCULATE BYTES ACTUALLY TRANSFERREDO&EMFIN1: MOVB #11,(R2) ;CLEAR THE DRIVE# MOV #TRE,(R2) ;NOW CLEAR THE DRIVE* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS2 BICB #SEL,U.CW2+1(R5);CLEAR PORT SELECT WAIT FLAG+10$: TSTB MLAS(R2) ;ANY ATTENTIONS PENDING? BEQ 20$ ;IF EQ N00 mXmlkTADATADATADATADATADATAOS1 BISB #100,(R2) ;RE-DISPATCH TO INTERRUPT HANDLER BR 10$ ;TRY AGAINC020$: BIT #S2.MAD,S.ST2(R4) ;DUAL ACCESS DEVICE? BEQ 30$ ;IF EQ NOE6 BITB #S3.NRL,S.ST3(R4) ;SHOULD WE RELEASE THE DRIVE? BEQ 35$ ;IF EQ YES)30$: MOVB #100,(R2) ;RE-ENABLE INTERRUPTSE BR 40$ ;<35$: BISB #S3.DRL,S.ST3(R4) ;SHOW DUAL ACCESS UNIT RELEASED7 MOVB #113,(R2) ;RE-ENABLE INTERRUPTS AND RELEASE DRIVE 140$: MOVB K.CON(R3),R3 ;RETRIEVE CONTROLLER INDEXT/ MOVB RTTBL(R3),R2 ;GET FINAL ERROR RETRY COUNT / BIS #RETRY*256.,R2 ;MERGE STARTING RETRY COUNTR CALL $RLCN ;RELEASE CONTROLLER# CALL $IODON ;FINISH I/O OPERATIONC! JMP EMINI ;PROCESS NEXT REQUEST; >; THE TRANSFER STOPPED DUE TO A RETRYABLE ERROR CONDITION. WE>; WILL NOW BACKUP THE WORD COUNT, BUS ADDRESS AND TRACK/SECTOR>; ADDRESS BY ONE BLOCK AND RETRY THE TRANSFER FROM THIS POINT.@; THIS IS DONE TO PREVENT THE ERROR CONDITION FROM RECURRING DUE; TO A LONG TRANSFER.C;R5EMCALC: MOV MLWC(R2),R0 ;GET NEGATIVE WORDS REMAININGO* BNE 10$ ;IF NE WE HAD A PARTIAL TRANSFER0 MOV #-1,R0 ;DLT ON LAST WORD, FAKE PARTIAL XFR'10$: ASL R0 ;CONVERT TO NEGATIVE BYTESI7 ADD U.CNT(R5),R0 ;CALCULATE BYTES ACTUALLY TRANSFERREDD. BIC #777,R0 ;GET BLOCKS ACTUALLY TRANSFERRED5 SUB R0,U.CNT(R5) ;REDUCE BYTES REMAINING TO TRANSFER* BEQ 30$ ;IF EQ NO MORE BYTES TO TRANSFER3 ADD R0,U.BUF+2(R5) ;UPDATE STARTING BUFFER ADDRESSO0 ADCB U.BUF+1(R5) ;AND THE MEMORY EXTENSION BITS2 BIT #FE.EXT,$FMASK ;IS 22-BIT ADDRESSING ENABLED? BEQ 15$ ;IF EQ NO1+ MOV S.KRB(R4),R1 ;RETRIEVE THE KRB ADDRESS19 BIT #KS.MBC,K.STS(R1) ;IS THIS A 22-BIT MASSBUS DEVICE?V BNE 15$ ;IF NE YES& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESSK ADCB -(R1) ;...R215$: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS# SWAB R0 ;GET BLOCKS*2 TRANSFERREDS CLC ;CLEAR CARRY FOR ROTATE ROR R0 ;GET BLOCKS TRANSFERRED-20$: ADD R0,I.PRM+12(R1) ;UPDATE DISK ADDRESSI RETURN ;E430$: ADD R0,U.CNT(R5) ;YES, BACKUP BYTES TO TRANSFER RETURN ;V .END),R1 ;RETRIEVE THE KRB ADDRESS19 BIT #KS.MBC,K.STS(R1) ;IS THIS A 22-BIT MASSBUS DEVICE?V BNE 15$ ;IF NE YES& ADD K.OFF(R1),R1 ;POINT TO UMR AREA+2) ADD R0,-(R1) ;CALCULATE NEW REAL ADDRESSK ADCB -(R1) ;...R215$: MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS# SWAB R0 ;GET BLOCKS*2 TRANSFERREDS CLC ;CLEAR CARRY FOR ROTATE ROR R0 ;GET BLOCKS TRANSFERRED-20$: ADD R0,I.PRM+12(R1) ;UPDATE DISK ADDRESSI RETURN ;E430$: ADD R0,U.CNT(R5) ;YES, BACKUP BYTES TO TRANSFER RETURN .TITLE ERROR  .IDENT /11.05/$;!5; COPYRIGHT (C) 1987 BY DIGITAL EQUIPMENT CORPORATION,; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;D; ; P. J. BEZEREDI 08-JAN-82;9;E+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:I;> ; S. C. ADAMSU; J. R. KAUFFMAN; J. M. LAWLER;$+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:M;R ; B. S. MCCARTHY 12-DEC-86 11.04;R(; BM377 -- MOVE ERROR LOGGING TO DR311M; ; B. S. MCCARTHY 12-DEC-86 11.05; ,; BM385 -- NOW MOVE ERROR LOGGING TO VEC11M;H;R; ERROR LOGGINGH;S;R; MACRO LIBRARY CALLSL;N8 .MCALL CLKDF$,EPKDF$,F11DF$,HDRDF$,HWDDF$,PKTDF$,UCBDF$& EPKDF$ ;DEFINE ERROR PACKET OFFSETS;+:; **-$BMSET-SET THE UNIT'S ACTIVE INTERRUPT BIT IN THE SCB;Y;; THIS COROUTINE RAISES THE PROCESSOR PRIORITY TO SEVEN AND7; SETS THE INTERRUPT ACTIVE BIT IN THE SCB, RECALLS THE :; CALLER TO START THE FUNCTION AND THEN ALLOWS INTERRUPTS.; ; INPUTS:;.; R4=ADDRESS OF THE SCB.; ; OUTPUTS:; *; THE INTERRUPT ACTIVE BIT (S2.ACT) IS SET;-'$BMSET::MTPS #PR7 ;LOCK OUT INTERRUPTSL3 BIS #S2.ACT,S.ST2(R4) ;;;SHOW INTERRUPT IS ACTIVEF" CALL @(SP)+ ;;;RECALL THE CALLER MTPS #0 ;;;ALLOW INTERRUPTSEBMXIT: RETURN ;EXIT ;+; **-$DTOER-LOG DEVICE TIMEOUTSR6; **-$DVTMO-LOG DEVICE TIMEOUTS FOR OVERLAPPED DEVICES;TA; THIS ROUTINE IS CALLED TO LOG A DEVICE TIMEOUT ERROR CONDITION. @; IF ENTRY IS AT $DTOER THE CONTRO00Xm_l"al8blLLER'S INTERRUPT ENABLE BIT IS<; RESET AND THE PROCESSOR PRIORITY IS DROPPED TO ZERO. IF A:; DIAGNOSTIC FUNCTION WAS IN PROGRESS, NO ERROR IS LOGGED.;R ; INPUTS:S;28; R2=ADDRESS OF A BLOCK OF REGISTERS TO LOG (MUST BE THE"; CSR ADDRESS IF KS.MBC IS SET); R4=SCB ADDRESS; R5=UCB ADDRESS;I ; OUTPUTS:;$"; R0=IE.DNR&377 (DEVICE NOT READY); R1=ADDRESS OF I/O PACKET9; C=0 IF FUNCTION WAS NOT A USER MODE DIAGNOSTIC FUNTION.E6; THE ERROR LOG PACKET IS FILLED AND THE SCB CONTAINS6; A POINTER TO IT. THE ERROR IN PROGRESS FLAG IS SET; IN THE SCB.?; C=1 IF FUNCTION WAS A USER MODE DIAGNOSTIC FUNCTION. IN THISR8; CASE ONLY THE INTERRUPT ENABLE BIT IS CLEARED AND THE; PRIORITY IS LOWERED TO ZERO.M;- .ENABL LSBR/$DTOER::MOV (R2),$DVSAV ;;;SAVE CONTENTS OF CSR5. BIC #100,(R2) ;;;DISABLE THE DEVICE INTERRUPT MTPS #0 ;;;ALLOW INTERRUPTSE BR 5$ ;A-$DVTMO::MOV (R2),$DVSAV ;SAVE CONTENTS OF CSRG75$: MOV #IE.DNR&377,R0 ;SET DEVICE NOT READY ERROR CODEH/ BIC #S2.ACT,S.ST2(R4) ;SET INTERRUPT INACTIVE 8 MOV S.PKT(R4),R1 ;PICK UP THE ADDRESS OF THE I/O PACKET* SEC ;ASSUME IT IS A DIAGNOSTIC FUNCTION6 BITB #IQ.UMD,I.FCN(R1) ;IS IT A DIAGNOSTIC FUNCTION? BNE BMXIT ;IF NE YES .IF DF E$$LOG .IFTF ; DF E$$LOG> MOV #$DVTM2,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON) CALL $MPDCV ;MAP AND CALL CODE IN THIRDI ;DIRECTIVE COMMON RETURNO;+; **-$DVERR-LOG A DEVICE ERROR/; **-$DVCER-LOG A DEVICE ERROR (ALTERNATE NAME)R;DD; THIS ROUTINE IS CALLED TO LOG A DEVICE ERROR. AN ERROR LOG PACKETC; WILL BE ALLOCATED AND THE CONTEXT OF THE CURRENT TRANSFER WILL BENG; SAVED. IF AN ERROR IS ALREADY IN PROGRESS FOR THIS DEVICE, THE ERRORBG; WILL BE IGNORED. INFORMATION CONCERNING ALL ACTIVE DEVICES WILL ALSOD ; BE SAVED.E;PF; THE ERROR CODE IS SETUP TO MARK THIS AS A HARD DEVICE ERROR. IF THED; OPERATION IS SUCCESSFUL, THE CODE WILL BE CHANGED TO A SOFT DEVICE-; ERROR WHEN THE I/O OPERATION IS TERMINATED.E;T ; INPUTS:D; :; R2=ADDRESS OF THE BLOCK OF REGISTERS TO LOG (MUST BE THE"; CSR ADDRESS IF KS.MBC IS SET); R4=SCB ADDRESS; R5=UCB ADDRESS;N ; OUTPUTS:;A<; IF THIS IS THE FIRST OCCURENCE OF THE ERROR, THE ERROR LOG;; PACKET IS FILED AND THE SCB IS SET TO POINT TO THE PACKETI/; ADDRESS AND THE ERROR IN PROGRESS BIT IS SET.E; $; NOTE: ALL REGISTERS ARE PRESERVED.;- .IFTF$DVERR:: ;LOG DEVICE ERROR$DVCER:: ;LOG DEVICE ERROR .IFT > MOV #$DVER1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON% BR 10$ ;BRANCH TO COMMON PROCESSING ;+>; **-$LOGER-LOG AN ERROR LOG PACKET (NO ERROR NEED BE PRESENT);UD; THIS ROUTINE IS CALLED BY DRIVERS THAT WISH TO CREATE AN ERROR LOGE; PACKET WHEN NO ERROR IS PRESENT, I.E. FOR AN UNSOLICITED INTERRUPT.OF; THE PACKET WILL BE CREATED AND THE DRIVER IS RESPONSIBLE FOR FILLING$; IN THE NECESSARY DATA INFORMATION.;. ; INPUTS:E;:); R1=LENGTH OF DATA TO BE LOGGED IN BYTESE8; R4=SCB ADDRESS (IF ZERO THEN NO I/O PACKET IS PRESENT); R5=UCB ADDRESS;M ; OUTPUTS:;R.; C=1 IF ERROR CANNOT BE LOGGED FOR ANY REASON; C=0 IF ERROR CAN BE LOGGED.; R1=ADDRESS OF DATA AREA IN ERROR LOG PACKET!; R3=ADDRESS OF ERROR LOG PACKETE;R; R4 AND R5 ARE PRESERVEDR; R0, R2 AND R3 ARE DESTROYEDC.; APR6 MAPPING DESTROYED: KISAR6 MAPS PACKET ;- .IFTF$LOGER:: .IFTI> MOV #$LGER1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON% BR 10$ ;BRANCH TO COMMON PROCESSING;+(; **-$FNERL-FINISH ERROR LOGGING PROCESS;SA; THIS ROUTINE IS CALLED AT I/O DONE TIME OR WHEN IT IS NECESSARYE?; TO QUEUE AN ERROR LOG PACKET AFTER A SUCCESSFUL RECOVERY OF AS; MID-TRANSFER ERROR. ; ; INPUTS:R; R0=FIRST I/O STATUS WORD*; R2=STARTING AND FINAL ERROR RETRY COUNTS%; R3=ERROR LOG PACKET ADDRESS IF R4=0D; R4=SCB ADDRESS OR ZERO; R5=UCB ADDRESS; ; OUTPUTS:1; THE ERROR PACKET IS QUEUED TO THE ERROR LOGGER.O'; THE ERROR IN PROGRESS BIT IS CLEARED.T;O; R1 AND R2 ARE DESTROYED.;- .IFTF($FNERL:: ;FINISH ERROR LOGGING PROCESS A .IFT > MOV #$F00X%mmlkTADATADATADATADATADATAERL1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON% BR 10$ ;BRANCH TO COMMON PROCESSING;+#; **-$CRPKT-CREATE ERROR LOG PACKETF;TG; THIS ROUTINE IS CALLED TO CREATE AN ERROR LOG PACKET, EITHER FROM THELG; SEND MESSAGE DIRECTIVE PROCESSING, OR WITHIN THE EXECUTIVE AS PART OFD; THE PROCESSING OF A MEMORY ERROR, NONSENSE INTERRUPT, TIME CHANGE,'; POWER FAIL RECOVERY, OR DEVICE ERROR.;1 ; INPUTS: ;T; R0=PACKET CODE; R1=LENGTH OF DATA SUBPACKETL; R2=CONTROL MASK WORD1; R3=BEGINNING ADDRESS OF DATA FOR DATA SUBPACKET %; R4=TCB ADDRESS (FOR TASK SUBPACKET)O6; R5=UCB ADDRESS (FOR DEVICE IDENTIFICATION SUBPACKET);E ; OUTPUTS:;R; R0=UNCHANGED-; R1=BEGINNING ADDRESS OF DATA SUBPACKET DATAL; R2=UNCHANGED ; R3=BEGINNING ADDRESS OF PACKET; R4=UNCHANGED; R5=UNCHANGED;C; C=0 IF A PACKET WAS CREATEDN!; C=1 IF A PACKET WAS NOT CREATED .; APR6 MAPPING DESTROYED: KISAR6 MAPS PACKET ;T; OUTPUT PACKET FORMAT:L;T3; +-----------------------------------------------+G%; | RESERVED FOR PACKET LINK WORD |E3; +-----------------------------------------------+A3; | PACKET LENGTH (LENGTH OF REMAINDER OF PACKET) |U3; +-----------------------------------------------+ ; | HEADER SUBPACKET |U ; . .;B ; | |3; +-----------------------------------------------+ ; | OTHER SUBPACKETS |N ; . .;C ; | |3; +-----------------------------------------------+E;- .IFTF$CRPKT:: .IFT> MOV #$CRPK1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON% BR 10$ ;BRANCH TO COMMON PROCESSING-;+-; **-$CREQU-CREATE AND QUEUE ERROR LOG PACKETN; C; THIS ROUTINE CREATES AND QUEUES ERROR LOG PACKET. IT USES $CRPKT-E; AND $QUPKT. IT'S INPUT IS THE SAME AS THE INPUT TO $CRPKT AND IT'S C; OUTPUT IS THE SAME AS THAT FROM $QUPKT. IF THE PACKET CANNOT BE UD; CREATED, $QUPKT IS NOT CALLED AND A RETURN IS MADE WITH CARRY SET.;-; KISAR6 MAPPING IS PRESERVED;- .IFTF$CREQU:: .IFTV> MOV #$CREQ1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON% BR 10$ ;BRANCH TO COMMON PROCESSING+;+"; **-$QUPKT-QUEUE ERROR LOG PACKET;NF; THIS ROUTINE IS CALLED TO QUEUE AN ERROR LOG PACKET. IF THERE IS NOH; OTHER PACKET IN THE QUEUE, THE ERROR LOGGER IS REQUESTED WITH A DELAY.F; IF THERE IS ANOTHER PACKET ALREADY IN THE QUEUE, THE ERROR LOGGER IS; REQUESTED IMMEDIATLY.C;E ; INPUTS:U;I-; R3=POINTER TO PACKET FOR INSERTION IN QUEUE ;S ; OUTPUTS:;.; R4 AND R5 ARE PRESERVED#; ALL OTHER REGISTERS ARE DESTROYEDO;- .IFTF$QUPKT:: .IFT > MOV #$QUPK1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON% BR 10$ ;BRANCH TO COMMON PROCESSINGT;+-; **-$QERMV-REMOVE ENTRY FROM ERROR LOG QUEUEK;IF; THIS ROUTINE REMOVES AN ENTRY FROM THE ERROR LOG QUEUE AND TRANSFERS; IT INTO A USER BUFFER.; ; INPUTS:E;R; R4=LENGTH OF USER BUFFER; R5=ADDRESS OF USER BUFFER;3 ; OUTPUTS:;K; R1=LENGTH OF PACKETU; R4=UNCHANGED; R5=UNCHANGED; %; C=0 PACKET WAS REMOVED SUCCESSFULLYR;; C=1 NO PACKET TO REMOVE OR PACKET TOO LONG. IF R1<>0 THEP=; PACKET WAS TOO LONG, AND R1 CONTAINS THE PACKET LENGTH.;;- .IFTF$QERMV:: .IFT> MOV #$QRMV1,-(SP) ;SET UP ADDRESS OF CODE IN DIRECTIVE COMMON10$:) CALL $MPDCV ;MAP AND CALL CODE IN THIRDD ;DIRECTIVE COMMON  .IFFE SEC .IFTF RETURNL .ENDC ;E$$LOG .DSABL LSBO;+2; **-$NSIER-UNEXPECTED (NONSENSE) INTERRUPT ERRORS;4:; THIS ROUTINE IDENTIFIES THE INTERRUPTING VECTOR AND LOGS ; THE ERROR.; ; INPUTS:O;M.; @(SP)=BITS 06:04 OF THE UNUSED VECTOR NUMBER.; PS=VECTOR ID (MOD 20) IN CONDITION CODE BITS;H ; OUTPUTS:;F4; AN ERROR LOG PACKET IS ALLOCATED AND QUEUED TO THE; ERROR LOGGER. ;- .IF DF E$$NSI5$NSIER::MFPS -(SP) ;;;SAVE THE VECTOR ID (MODULO 20)E .IF DF M$$PRO;C>; THIS INTERRUPT COULD BE THE ONE FROM THE IIST AS PART OF CPU ; STARTUP.;-F; THE CRITERION FOR DETERMINING IS THIS IS A NORMAL NONSENSE INTERRUPTF; AS DISTINCT FROM A CPU STARTUP IS THE STATE OF THE MEMOR00X-mL0mal8blY MANAGEMENTF; UNIT. IF MAPPING IS ENABLED, THEN THIS IS ASSUMED A NORMAL NONSENSEF; INTERRUPT. IF MAPPING IS NOT ENABLED, THEN A JUMP TO CPU STARTUP IS ; PERFORMED.;E# BIT #1,SR0 ;;;IS MAPPING ENABLED?N BNE 5$ ;;;IF NE YES)' CALLR $CPBGN ;;;NO, START UP THIS CPU .ENDC"5$: INCB $NSI ;;;NSI IN PROGRESS?( BMI 7$ ;;;DON'T ALLOW COUNTER TO WRAP  BNE 10$ ;;;IF NE YES& BIT #ES.LOG,$ERFLA ;;;LOGGING ERRORS? BNE 20$ ;;;IF NE YES!7$: DECB $NSI ;;;RESTORE COUNTERT'10$: CMP (SP)+,(SP)+ ;;;CLEAR THE STACK  RTI ;;;RETURN;NG; THE NONSENSE INTERRUPT HAS NOT INTERRUPTED THE HANDLING OF A PREVIOUSE1; NONSENSE INTERRUPT, SO GO AHEAD AND PROCESS IT.;B820$: BIC #177760,(SP) ;;;ISOLATE THE VECTOR ID IN THE PS& MOV (SP)+,$VID ;;;SAVE THE VECTOR ID.) BIS @(SP)+,$VID ;;;ADD IN THE GROUP BIASO& MOV (SP),$OPC ;;;SAVE PREINTERRUPT PC' MOV 2(SP),$OPS ;;;SAVE PREINTERRUPT PSS! CALL $INTSV,PR7 ;;;SWITCH STACKSE( MOV $ERLFK,R4 ;;;GET FORK BLOCK ADDRESS CALL $FORK0 ;;;AND FORK+ INC $ERRSQ ;COUNT THE ERRORI1 MOV #E$CCPU+<400*E$SINT>,R0 ;GET THE ERROR CODET. MOV #3*2,R1 ;THE BUFFER IS 3 WORDS (6 BYTES)3 MOV #SM.HDR!SM.DAT!SM.DAC,R2 ;SET SUBPACKET FLAGS0& MOV #$VID,R3 ;GET ADDRESS OF THE DATA' CALL $CREQU ; CREATE AND QUEUE PACKETH+30$: MOVB #-1,$NSI ;RESET RECURSION COUNTERG RETURN ;M .ENDC ;E$$NSI .END PC' MOV 2(SP),$OPS ;;;SAVE PREINTERRUPT PSS! CALL $INTSV,PR7 ;;;SWITCH STACKSE( MOV $ERLFK,R4 ;;;GET FORK BLOCK ADDRESS CALL $FORK0 ;;;AND FORK+ .TITLE ERSUBD .IDENT /02.06/O;G; COPYRIGHT (C) 1983, 1984, 1985, 1986 BY DIGITAL EQUIPMENT CORPORATIONU; ALL RIGHTS RESERVED.;I<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;U;W; P. J. BEZEREDI 16-NOV-81; ;T; ; J. R. KAUFFMAN ; C. PUTNAM ; S. C. ADAMS;; G. MARIGOWDA;:; ; MODIFIED BY:;I; G. MARIGOWDA 14-JUL-86<; CHANGE THE STACK OFFSET TO ACCESS APR5 MAPPING V02.06;P;,;S; ERROR LOGGING SUBROUTINES0;6;; MACRO LIBRARY CALLS3;98 .MCALL CLKDF$,EPKDF$,F11DF$,HDRDF$,HWDDF$,PKTDF$,UCBDF$ .MCALL BGCK$A% CLKDF$ ;DEFINE CLOCK QUEUE OFFSETSA& EPKDF$ ;DEFINE ERROR PACKET OFFSETS" F11DF$ ;DEFINE FILES-11 OFFSETS% HDRDF$ ;DEFINE TASK HEADER OFFSETS1 HWDDF$ ;DEFINE CPU REGISTERSF$ PKTDF$ ;DEFINE I/O PACKET OFFSETS UCBDF$ ;DEFINE UCB OFFSETSD;; EQUATED SYMBOLS ;-ERRTIM= H$$RTZ*2 ;2 SECONDSIOC= X.IOC+140000 ;I/O COUNT0&ERHL= X.ERHL+140000 ;HARD ERROR LIMIT&ERSL= X.ERSL+140000 ;SOFT ERROR LIMIT&ERSC= X.ERSC+140000 ;SOFT ERROR COUNT&ERHC= X.ERHC+140000 ;HARD ERROR COUNT*ASSUME ERSC, IOC+6 ;ORDERING IS IMPORTANT/ASSUME X.WCNT, X.IOC+10 ;WORDS TRANSFERED COUNTF0ASSUME X.CYLC, X.IOC+14 ;CYLINDERS CROSSED COUNT-ASSUME V.PKSR, V.LABL+12. ;PACK SERIAL NUMBERP .IF DF E$$LOG;+; **-$DVER1-LOG A DEVICE ERROR;TD; THIS ROUTINE IS CALLED TO LOG A DEVICE ERROR. AN ERROR LOG PACKETC; WILL BE ALLOCATED AND THE CONTEXT OF THE CURRENT TRANSFER WILL BERG; SAVED. IF AN ERROR IS ALREADY IN PROGRESS FOR THIS DEVICE, THE ERRORUG; WILL BE IGNORED. INFORMATION CONCERNING ALL ACTIVE DEVICES WILL ALSO ; BE SAVED.;UF; THE ERROR CODE IS SETUP TO MARK THIS AS A HARD DEVICE ERROR. IF THED; OPERATION IS SUCCESSFUL, THE CODE WILL BE CHANGED TO A SOFT DEVICE-; ERROR WHEN THE I/O OPERATION IS TERMINATED. ;I ; INPUTS:T; :; R2=ADDRESS OF THE BLOCK OF REGISTERS TO LOG (MUST BE THE"; CSR ADDRESS IF KS.MBC IS SET); R4=SCB ADDRESS; R5=UCB ADDRESS;R ; OUTPUTS:;A<; IF THIS IS THE FIRST OCCURENCE OF THE ERROR, THE ERROR LOG;; PACKET IS FILED AND THE SCB IS SET TO POINT TO THE PACKETI/; ADDRESS AND THE ERROR IN PROGRESS BIT IS SET.E; $; NOTE: ALL REGISTERS ARE PRESERVED.;- .ENABL LSBO .IFTF ; DF E$$LOG$DVER1:: ;LOG DEVICE ERROR .IFT ; DF E$$LOGE MOV R0,-(SP) ;SAVE REGISTER6 MOV #E$CERR+<400*E$SDVH>,R0 ;GET THE HARD ERROR CODE% BR 10$ ;JOIN COMMON PROCESSING CODES .IFTF ; DF E$$LOG$DVT00L5mmlkTADATADATADATADATADATAM2:: .IFT ; DF E$$LOG MOV R0,-(SP) ;SAVE REGISTER@ MOV #E$CERR+<400*E$STMO>,R0 ;SET UP THE ERROR LOG PACKET FOR... ;... A DEVICE TIMEOUT ERRORT(10$: CALL LOGTST ;CAN WE LOG THE ERROR? BCS 50$ ;IF CS NO MOV R1,-(SP) ;SAVE REGISTERSR MOV R2,-(SP) ;  MOV R3,-(SP) ;D; MOV #SM.HDR!SM.DID!SM.DOP!SM.DAT!SM.DAC,R2 ;SET FLAGS ...E) ;... HEADER SUBPACKET, DEVICE ID, ...E) ;... DEVICE OPERATION, DATA, ACTIVITYE8 MOVB S.RCNT(R4),R1 ;GET THE NUMBER OF REGISTERS TO SAVE+ ASL R1 ;CONVERT IT INTO A NUMBER OF BYTESV* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS/ BIT #KS.MBC,K.STS(R3) ;BAE REGISTERS PRESENT?  BEQ 30$ ;IF EQ NOU0 ADD #4,R1 ;YES, ADD SPACE FOR 2 MORE REGISTERS" BIS #SM.MBC,R2 ;FLAG IT FOR LATER=30$: MOVB S.ROFF(R4),R3 ;GET THE OFFSET TO THE FIRST REGISTER#0 ADD 2(SP),R3 ;COMPUTE ACTUAL START OF REGISTERS;"; AT THIS POINT THE REGISTERS ARE:;.'; R0 = ENTRY TYPE CODE AND SUBTYPE CODEV*; R1 = LENGTH OF DEVICE REGISTERS IN BYTES; R2 = CONTROL MASK WORD,; R3 = BEGINNING ADDRESS OF DEVICE REGISTERS; R4 = SCB ADDRESS; R5 = UCB ADDRESS;# MOV KISAR6,-(SP) ; SAVE MAPPING CALL $CRPK1 ;CREATE THE PACKET BCS 45$ ;IF CS FAILURE7 CMP R0,#E$CERR+<400*E$STMO> ;IS THIS A TIMEOUT ERROR?0 BNE 40$ ;IF NE NO 1 MOVB S.ROFF(R4),R2 ;GET OFFSET TO FIRST REGISTERR ASL R2 ;CONVERT IT TO BYTESS2 SUB R2,R1 ;COMPUTE ADDRESS TO STORE CSR CONTENTS5 MOV $DVSAV,(R1) ;PUT SAVED CSR CONTENTS IN SUBPACKET 840$: MOV R3,S.EMB(R4) ;SAVE THE ERROR LOG PACKET ADDRESS,45$: MOV (SP)+,KISAR6 ; RESTORE APR6 MAPPING! MOV (SP)+,R3 ; RESTORE REGISTERSS MOV (SP)+,R2 ;R MOV (SP)+,R1 ;P50$: MOV (SP)+,R0 ;C .ENDC ; DF E$$LOG3 BIS #S2.EIP,S.ST2(R4) ;INDICATE ERROR IN PROGRESSH CLC ;INDICATE NO UMD FUNCTION RETURN ;V .DSABL LSB ;+>; **-$LGER1-LOG AN ERROR LOG PACKET (NO ERROR NEED BE PRESENT);1D; THIS ROUTINE IS CALLED BY DRIVERS THAT WISH TO CREATE AN ERROR LOGE; PACKET WHEN NO ERROR IS PRESENT, I.E. FOR AN UNSOLICITED INTERRUPT.AF; THE PACKET WILL BE CREATED AND THE DRIVER IS RESPONSIBLE FOR FILLING$; IN THE NECESSARY DATA INFORMATION.; ; INPUTS:R;P); R1=LENGTH OF DATA TO BE LOGGED IN BYTESG8; R4=SCB ADDRESS (IF ZERO THEN NO I/O PACKET IS PRESENT); R5=UCB ADDRESS; ; OUTPUTS:;R.; C=1 IF ERROR CANNOT BE LOGGED FOR ANY REASON; C=0 IF ERROR CAN BE LOGGED.; R1=ADDRESS OF DATA AREA IN ERROR LOG PACKET!; R3=ADDRESS OF ERROR LOG PACKETE;R; R4 AND R5 ARE PRESERVEDR; R0, R2 AND R3 ARE DESTROYEDC,; APR6 MAPPING DESTROYED: KISAR6 MAPS PACKET;- .IF DF E$$LOG*$LGER1::CALL LOGTST ;CAN WE LOG THE ERROR BCS 20$ ;IF CS NOU8 MOV #E$CDVI+<400*E$SDVI>,R0 ;ASSUME DEVICE INFORMATION0 MOV #SM.HDR!SM.DID!SM.DAT!SM.DAC,R2 ;SET FLAGS$ TST R4 ;DO WE HAVE AN SCB ADDRESS? BEQ 10$ ;IF EQ NON0 BIS #SM.DOP,R2 ;YES, LOG I/O PACKET INFORMATION- MOV #E$CERR+<400*E$SDVH>,R0 ;SET HARD ERRORO-10$: CLR R3 ;DO NOT FILL DATA SUBPACKET AREAR* CALL $CRPK1 ;CREATE THE ERROR LOG PACKET BCS 20$ ;IF CS FAILURE* TST R4 ;DO SE HAVE AN SCB ADDRESS? (C=0) BEQ 20$ ;IF EQ NOL0 MOV R3,S.EMB(R4) ;SAVE ERROR LOG PACKET ADDRESS. BIS #S2.EIP,S.ST2(R4) ;SET ERROR IN PROGRESS20$: RETURN ;A;+&; **-LOGTST-SEE IF WE CAN LOG AN ERROR;FB; THIS ROUTINE WILL CHECK TO SEE IF THE ERROR CANNOT BE LOGGED. IFB; LOGGING IS OFF, OR IF THERE IS ALREADY AN ERROR IN PROGRESS, OR E; IF BOTH LIMITS HAVE BEEN REACHED, THE PACKET WILL BE REJECTED HERE EF; INSTEAD OF LATER IN $FERL1 THE ERROR SEQUENCE NUMBER IS INCREMENTED A; IF LOGGING IS ON AND THERE IS NOT ALREADY AN ERROR IN PROGRESS.;V ; INPUTS:4;S"; R4=SCB ADDRESS OF ZERO IF NO SCB; R5=UCB ADDRESS;T ; OUTPUTS:;E(; C=0 IF ERROR CAN POTENTIALLY BE LOGGED; C=1 IF ERROR CANNOT BE LOGGEDH;-+LOGTST: MOV KISAR6,-(SP) ;SAVE APR6 MAPPING 0 BIT #ES.LOG,$ERFLA ;IS ERROR LOGGING TURNED ON? BEQ 20$ ;IF EQ NOS TST R4 ;SCB PRESENT? BEQ 5$ ;IF EQ NO> BIT #S2.EIP!S2.ENB,S.ST2(R4) ;ERROR IN PROGRESS/LOGGING OFF? BNE 20$ ;IF NE YES 5$: INC $ERRSQ ;COUNT THE ERROR* B00L=m0mal8blITB #ES.LIM,$ERFLA ;IS LIMITING ENABLED? BEQ 10$ ;IF EQ NOU< MOV U.UCBX(R5),KISAR6 ;MAP UCB EXTENSION IN SECONDARY POOL BEQ 10$ ;IF EQ NO EXTENSIONE0 CMPB ERHC,ERHL ;IS THE HARD THRESHOLD EXCEEDED? BLO 10$ ;IF LO NO0 CMPB ERSC,ERSL ;IS THE SOFT THRESHOLD EXCEEDED? BHIS 20$ ;IF HIS YES 10$: TST R4 ;DO WE HAVE AN SCB? BEQ 30$ ;IF EQ NOC+ CLR S.EMB(R4) ;INDICATE NO PACKET JUST YETS BR 30$ ; 20$: SEC ;CANNOT LOG THE ERROR+30$: MOV (SP)+,KISAR6 ;RESTORE APR6 MAPPINGU RETURN ; .ENDC ; DF E$$LOG;+(; **-$FERL1-FINISH ERROR LOGGING PROCESS;BA; THIS ROUTINE IS CALLED AT I/O DONE TIME OR WHEN IT IS NECESSARYQ?; TO QUEUE AN ERROR LOG PACKET AFTER A SUCCESSFUL RECOVERY OF A; MID-TRANSFER ERROR.C; ; INPUTS:I; R0=FIRST I/O STATUS WORD*; R2=STARTING AND FINAL ERROR RETRY COUNTS&; R3=ERROR LOG PACKET APR BIAS IF R4=0; R4=SCB ADDRESS OR ZERO; R5=UCB ADDRESS;B ; OUTPUTS:1; THE ERROR PACKET IS QUEUED TO THE ERROR LOGGER.R'; THE ERROR IN PROGRESS BIT IS CLEARED.;N; R1 AND R2 ARE DESTROYED.;-($FERL1:: ;FINISH ERROR LOGGING PROCESS .IF DF E$$LOG MOV KISAR6,-(SP) ; SAVE MAPPING MOV R3,-(SP) ;SAVE REGISTER TST R4 ;DO WE HAVE AN SCB?) BEQ 5$ ;IF EQ NO, R3 HAS PACKET ADDRESSN2 MOV S.EMB(R4),R3 ;GET ADDRESS OF ERROR LOG PACKET BEQ 40$ ;IF EQ NO PACKET5$: MOV R0,-(SP) ;SAVE REGISTER  MOV R3,KISAR6 ; MAP TO PACKET1 MOV @#140004+E$HSBF,R1 ; GET SUBPACKET MASK WORDT MOV R4,-(SP) ;SAVE R4, ROR R1 ;HEADER SUBPACKET IS ALWAYS PRESENT= MOV #E$HLEN+4,R4 ;ACCOUNT FOR THE LINK WORD, THE LENGTH WORDE' ;...AND THE HEADER SUBPACKET LENGTH( ROR R1 ;IS THE TASK SUBPACKET PRESENT? BCC 6$ ;IF CC - NOT PRESENT 6 ADD #E$TLEN,R4 ;ACCOUNT FOR THE TASK SUBPACKET LENGTH06$: ROR R1 ;IS THE DEVICE ID SUBPACKET PRESENT? BCC 7$ ;IF CC - NOT PRESENT ; ADD #E$ILEN,R4 ;ACCOUNT FOR THE DEVICE ID SUBPACKET LENGTHP77$: ROR R1 ;IS THE DEVICE OPERATION SUBPACKET PRESENT?W BCC 8$ ;IF CC - NOT PRESENTR1 ADD #E$ORTY,R4 ;GET TO THE "RETRY COUNTS" OFFSET$) ;...IN THE DEVICE OPERATION SUBPACKETE* ADD #140000,R4 ; POINT R4 TO RETRY COUNTS. MOV R2,(R4) ;...AND INSERT THE RETRY COUNTS 8$: MOV (SP)+,R4 ;RESTORE R4 TST R2 ;ANY RETRY COUNTS?T& BEQ 30$ ; IF EQ DO NOT UPDATE COUNTS< MOV U.UCBX(R5),KISAR6 ;MAP UCB EXTENSION IN SECONDARY POOL BEQ 30$ ;IF EQ NO EXTENSIONC( MOV #ERHC,R2 ;POINT TO HARD ERROR COUNT TSTB R0 ;SUCCESSFUL FUNCTION?I BMI 10$ ;IF MI NOW( MOV #ERSC,R2 ;POINT TO SOFT ERROR COUNT10$:+ BITB #ES.LIM,$ERFLA ; IS LIMITING ENABLED?N7 BEQ 25$ ; IF EQ NO, DON'T TEST LIMITS OR UPDATE COUNT 8 CMPB (R2),-2(R2) ;IS THE THRESHOLD EQUALED OR EXCEEDED? BLO 15$ ;IF LO NO);4H; THE LIMIT (HARD OR SOFT) HAS ALREADY BEEN REACHED. DISCARD THE PACKET.;O MOV R3,KISAR6 ; REMAP PACKETM( MOV R3,R0 ; SET UP FOR DESEC (POINTER)' MOV @#140002, R1 ; GET LENGTH IN BYTESP: ADD #77+4,R1 ; ACCOUNT FOR LINK AND LENGTH AND TRUNCATION( ASH #-6,R1 ; CONVERT TO 32 WORD BLOCKS) CALL $DESEC ; DEALLOCATE SECONDARY POOL,$ BR 37$ ;...AND FINISH THE CLEAN UP; H; THE LIMIT (HARD OR SOFT) HAS NOT BEEN REACHED. UPDATE THE APPROPRIATE ; COUNTER.;E$15$: INCB (R2) ;COUNT ANOTHER ERROR+ INCB (R2) ;ADD ONE MORE FOR OVERFLOW TESTE BNE 20$ ;IF NE NO OVERFLOW" DECB (R2) ;NORMALIZE ERROR COUNT20$: DECB (R2) ;...# CMPB (R2), -2(R2) ; LIMIT REACHED?R BNE 25$ ; BR IF NO$ MOV R3, KISAR6 ; MAP BACK TO PACKET/ BISB #EH$LMR, E$HFLG+140004 ; YES. TELL ERRLOGT25$: CMP R2,#ERHC ; HARD ERROR?  BEQ 30$ ; BR IF YESO MOV R3,KISAR6 ; REMAP PACKET 0 CMPB #E$STMO,E$HTYS+140004 ;WAS THIS A TIMEOUT?2 BEQ 27$ ;IF EQ - YES, SO CONVERT TO SOFT TIMEOUT2 MOVB #E$SDVS, E$HTYS+140004 ; SET SOFT ERROR CODE BR 30$ ; GO TO QUEUE PACKETE927$: MOVB #E$STMS,E$HTYS+140004 ;MAKE THIS A SOFT TIMEOUTR30$:& CALL $QUPK1 ; QUEUE THE ERROR PACKET$37$: MOV (SP)+,R0 ;RESTORE REGISTERS40$: MOV (SP)+,R3 ; # MOV (SP)+,KISAR6 ; RESTORE MAPPINGE .ENDC ; DF E$$LOG TST R4 ;DO WE HAVE AN SCB? BEQ 50$ ;IF EQ NO 5 BIC #S2.EIP,S.ST2(R4)00LEmmlkTADATADATADATADATADATA ;CLEAR ERROR IN PROGRESS FLAGS( CLR S.EMB(R4) ;SHOW NO ERROR LOG PACKET50$: RETURN ;Y;+#; **-$CRPK1-CREATE ERROR LOG PACKET,;HG; THIS ROUTINE IS CALLED TO CREATE AN ERROR LOG PACKET, EITHER FROM THEVG; SEND MESSAGE DIRECTIVE PROCESSING, OR WITHIN THE EXECUTIVE AS PART OF D; THE PROCESSING OF A MEMORY ERROR, NONSENSE INTERRUPT, TIME CHANGE,'; POWER FAIL RECOVERY, OR DEVICE ERROR. ;P ; INPUTS:N;;; R0=PACKET CODE; R1=LENGTH OF DATA SUBPACKETQ; R2=CONTROL MASK WORD1; R3=BEGINNING ADDRESS OF DATA FOR DATA SUBPACKETC%; R4=TCB ADDRESS (FOR TASK SUBPACKET)6; R5=UCB ADDRESS (FOR DEVICE IDENTIFICATION SUBPACKET);E ; OUTPUTS:;R; R0=UNCHANGED6; R1=BEGINNING ADDRESS OF DATA SUBPACKET DATA (OFFSET); R2=UNCHANGED,; R3=BEGINNING ADDRESS OF PACKET (APR VALUE); R4=UNCHANGED; R5=UNCHANGED;E; C=0 IF A PACKET WAS CREATEDC!; C=1 IF A PACKET WAS NOT CREATEDE; KISAR6 MAPS PACKET;S; OUTPUT PACKET FORMAT:;13; +-----------------------------------------------+ %; | RESERVED FOR PACKET LINK WORD |U3; +-----------------------------------------------+53; | PACKET LENGTH (LENGTH OF REMAINDER OF PACKET) |E3; +-----------------------------------------------+E; | HEADER SUBPACKET |O ; . .;C ; | |3; +-----------------------------------------------+G; | OTHER SUBPACKETS |= ; . .;A ; | |3; +-----------------------------------------------+K;- .IF DF E$$LOG($CRPK1::MOV R5,-(SP) ;SAVE ALL REGISTERS MOV R4,-(SP) ;... MOV R3,-(SP) ;... MOV R2,-(SP) ;... MOV R1,-(SP) ;... MOV R0,-(SP) ;...;-@; CHECK FOR TYPE OF SUBPACKET. NOTE THAT THERE WILL ALWAYS BE A?; HEADER SUBPACKET. AN EXTRA 4 BYTES IS ADDED TO THE LENGTH OFS>; THE HEADER SUBPACKET TO ACCOUNT FOR THE PRECEEDING LINK WORD; AND PACKET LENGTH.& ROR R2 ;BYPASS HEADER SUBPACKET FLAG BCS 5$ ;IF CS IT'S THERE5 BGCK$A BF.ERR,BE.HSP,FATAL ;HEADER SUBPACKET PROBLEM85$: MOV #E$HLEN+4,R1 ;ADD IN THE LENGTH OF THE SUBPACKET$ ROR R2 ;CHECK FOR A TASK SUBPACKET" BCC 10$ ;IF CC NO TASK SUBPACKET, ADD #E$TLEN,R1 ;ADD IN THE SUBPACKET LENGTH-10$: ROR R2 ;CHECK FOR A DEVICE ID SUBPACKETW' BCC 20$ ;IF CC NO DEVICE ID SUBPACKET , ADD #E$ILEN,R1 ;ADD IN THE SUBPACKET LENGTH.20$: ROR R2 ;CHECK FOR A DEVICE OP. SUBPACKET( BCC 30$ ;IF CC NO DEVICE OP. SUBPACKET, ADD #E$OLEN,R1 ;ADD IN THE SUBPACKET LENGTH;E'; CHECK FOR A DEVICE ACTIVITY SUBPACKETP;EE; IF THERE IS A DEVICE ACTIVITY SUBPACKET, THERE WILL BE ONE ENTRY INRC; THE SUBPACKET FOR EACH ACTIVE DEVICE (LESS ONE IF THERE IS ALSO ATA; DEVICE OPERATION SUBPACKET) PLUS THE PREFIX HEADER LENGTH WORD. ; 330$: ROR R2 ;CHECK FOR A DEVICE ACTIVITY SUBPACKETU- BCC 60$ ;IF CC NO DEVICE ACTIVITY SUBPACKET : BIT #SM.DOP,4(SP) ;IS THERE A DEVICE OPERATION SUBPACKET? BNE 35$ ;IF EQ NOE CLR R5 ;CLEAR FOR NO UCB$35$: MOV R5,R0 ;SAVE FOR COMPARISON, MOV #$SCDVT,-(SP) ;SETUP FOR COROUTINE CALL#40$: CALL @(SP)+ ;GET THE NEXT UCBP BCS 50$ ;IF CS NO MORE# MOV S.ST2(R4),R3 ;COPY STATUS BITST COM R3 ;REVERSE THEM5 BIT #S2.LOG!S2.ACT,R3 ;ACTIVE ERROR LOGGING DEVICE?E BNE 40$ ;IF NE NO  CMP R5,R0 ;IS THIS OUR UCB?C' BEQ 40$ ;IF EQ YES, IGNORE THIS ENTRY6# ADD #E$ALEN,R1 ;YES, COUNT THE I/OE BR 40$ ;LOOP050$: ADD #2,R1 ;ADD IN THE LENGTH OF THE PREFIX;$; CHECK FOR A DATA SUBPACKET; (60$: ROR R2 ;CHECK FOR A DATA SUBPACKET" BCC 70$ ;IF CC NO DATA SUBPACKET1 ADD 2(SP),R1 ;ADD IN THE LENGTH OF THE SUBPACKETB* ADD #2,R1 ;ADD IN THE PREFIX LENGTH WORD;T; ALLOCATE THE PACKETE;S570$: CMP #512.,R1 ;IS THE PACKET A REASONABLE LENGTH?I BLO 75$ ;IF LO NOE; &; CONVERT FROM BYTES TO 32 WORD BLOCKS;  MOV R1,-(SP) ; SAVE BYTE VALUEA( ADD #77,R1 ; COMPENSATE FOR TRUNCATION ASH #-6,R1 ; CONVERT' CALL $ALSEC ; ALLOCATE SECONDARY POOL" MOV (SP)+,R1 ; RESTORE BYTE VALUE BCC 80$ ;IF CC WE GOT IT775$: CALLR PKTXIT ;FAILURE, RESTORE REGISTERS AND EXIT)280$: MOV R0,-(SP) ;SAVE THE ADDRESS FOR FUTURE USE- MOV 14(SP),R5 ;RETRIEVE POSSIBLE UCB ADDRESSA00LMm0mal8bl;E; CREATE THE PACKETC;#; AT THIS POINT:;T9; R0=ADDRESS OF ALLOCATED BLOCK (TO BE USED AS APR VALUE) ; R1=LENGTH OF ALLOCATED BLOCK; R2=UNDEFINED; R3=UNDEFINED; R4=UNDEFINED; R5=UCB ADDRESS;N5; AFTER SAVING THE APR6 MAPPING ON THE STACK WE HAVE:S;N2; 0(SP) SAVED APR6 MAPPING (WILL NOT BE RESTORED)*; 2(SP) SAVED APR BIAS OF ALLOCATED BLOCK; 4(SP) SAVED ENTRY CODES$; 6(SP) SAVED DATA SUBPACKET LENGTH ; 10(SP) SAVED CONTROL WORD MASK; 12(SP) SAVED DATA ADDRESS ; 14(SP) SAVED TCB ADDRESS; 16(SP) SAVED UCB ADDRESS;;CREPKT:S+ MOV KISAR6,-(SP) ; SAVE APR6 ON THE STACK ;  MOV R0,KISAR6 ; MAP TO PACKET MOV #140000,R0 ; USE APR 6! CLR (R0)+ ; SETUP THE LINK WORDN/ SUB #4,R1 ;THE DATA LENGTH IS LESS THE HEADERW' MOV R1,(R0)+ ;PUT IN THE PACKET LENGTH / MOV #E$HLEN,(R0)+ ;PUT IN THE SUBPACKET LENGTHF/ MOV 10(SP),R2 ;GET THE SAVED CONTROL MASK WORD6+ MOV R2,(R0)+ ;INSERT IT INTO THE SUBPACKETV. MOV #6+,(R0)+ ;INSERT M-PLUS CODE/ MOV $SYSID,(R0)+ ;INSERT SYSTEM IDENTIFICATIONB MOV $SYSID+2,(R0)+ ;...;M>; INSERT THE FLAGS WORD, THE ENTRY AND ERROR SEQUENCE NUMBERS,;; AS WELL AS THE ENTRY CODE, TIME STAMP, PROCESSOR AND URM.E; : MOV #EH$NOR!<*400>,R3 ;CREATE FLAGS+ BIT #HF.QB,$HFMSK ;IS THIS A Q-BUS SYSTEM? BEQ 5$ ;IF EQ NO, SO GO ON. BIS #,R3;YES, SO SET THE FLAG BIT-5$: MOV R3,(R0)+ ;NOW PUT IT IN THE SUBPACKETI" INC $ENTSQ ;COUNT THE NEXT ENTRY MOV $ENTSQ,(R0)+ ;WRITE ITE2 MOV $ERRSQ,(R0)+ ;PUT IN THE ERROR SEQUENCE COUNT8 MOV 4(SP),(R0)+ ;PUT IN THE ENTRY TYPE CODE AND SUBCODE8 MOV #$TTNS-<6*2>,R3 ;GET THE POINTER TO THE SYSTEM TIME3 MOV #6,R1 ;GET THE NUMBER OF PARAMETERS TO INSERT#810$: MOVB (R3)+,(R0)+ ;INSERT THE ITEM IN THE TIME STAMP TSTB (R3)+ ;POINT AT NEXT ITEM SOB R1,10$ ;LOOP UNTIL DONE.4 MOVB $PRMOD,(R0)+ ;PUT IN THE PROCESSOR INFORMATION% CLRB (R0)+ ;CLEAR THE RESERVED BYTEP .IF DF M$$PRO% MOV @$CPURM,(R0)+ ;GET PROCESSOR URM  .IFF ; DF M$$PROS MOV #1,(R0)+ ;ASSUME CPAU .ENDC ; DF M$$PRO) ROR R2 ;DISCARD THE FLAG FOR THE HEADER;#; CREATE THE TASK SUBPACKETE;O;E; AT THIS POINT:;,2; R0=POINTER TO NEXT FREE ENTRY IN ALLOCATED BLOCK; R1=UNDEFINED'; R2=CONTROL MASK WORD, SHIFTED RIGHT 1 ; R3=UNDEFINED; R4=UNDEFINED; R5=UCB ADDRESS;D2CRETSK: ROR R2 ;CHECK THE FLAG FOR TASK SUBPACKET% BCC CREDID ;IF CC NO TASK SUBPACKETB/ MOV #E$TLEN,(R0)+ ;PUT IN THE SUBPACKET LENGTHE) MOV 14(SP),R1 ;GET THE SAVED TCB ADDRESSM( CALL CRTASP ;CREATE THE TASK SUBPACKET;,; CREATE THE DEVICE IDENTIFICATION SUBPACKET;; AT THIS POINT:; 2; R0=POINTER TO NEXT FREE ENTRY IN ALLOCATED BLOCK; R1=UNDEFINED'; R2=CONTROL MASK WORD, SHIFTED RIGHT 2; R3=UNDEFINED; R4=UNDEFINED; R5=UCB ADDRESS;N0CREDID: ROR R2 ;IS THERE A DEVICE ID SUBPACKET? BCC CREDOP ;IF CC NO' MOV U.SCB(R5),R4 ;RETRIEVE SCB ADDRESSO6 MOV #E$ILEN,(R0)+ ;INSERT THE LENGTH OF THE SUBPACKET( CALL CRDEVP ;CREATE DEVICE INFORMATION3 BIT #DV.DIR,U.CW1(R5) ;IS THIS A DIRECTORY DEVICE?T' BEQ 5$ ;IF EQ NO, DON'T INTERPRET VCBN+ MOV U.VCB(R5),R3 ;GET A POINTER TO THE VCBI BNE 15$ ;IF NE VCB EXISTSL@5$: MOV #/2,R3 ;GET THE NUMBER OF WORDS TO CLEAR710$: CLR (R0)+ ;CLEAR OUT THE VOLUME NAME AND PACK ID.N& SOB R3,10$ ;LOOP UNTIL DONE CLEARING* BR 30$ ;DONE WITH THE VOLUME INFORMATION'15$: ADD #V.LABL,R3 ;POINT AT THE LABEL#< MOV #/2,R1 ;GET THE NUMBER OF WORDS TO MOVE620$: MOV (R3)+,(R0)+ ;TRANSFER VOLUME NAME AND PACK ID SOB R1,20$ ;LOOP UNTIL DONEQ( BIT #DV.SQD,U.CW1(R5) ;IS THIS A DISK? BEQ 30$ ;IF EQ YES2 CMP -(R0),-(R0) ;NO, BACKUP TO PACK SERIAL NUMBER% CLR (R0)+ ;CLEAR PACK SERIAL NUMBERU CLR (R0)+ ;...,30$: MOV #1,(R0)+ ;ALL DEVICES ARE OF TYPE 14 MOV U.CW3(R5),(R0)+ ;GET LOW ORDER BLOCKS IN DEVICE6 MOVB U.CW2(R5),(R0)+ ;GET HIGH ORDER BLOCKS IN DEVICE CLRB (R0)+ ;; ?; INSERT THE I/O COUNT INFORMATION AND CLEAR THEM IF REQUESTED.T<; NOTE THAT THIS INFORMATION IS IN SECON00LUmmlkTADATADATADATADATADATADARY POOL AND MAY OR; MAY NOT BE PRESENT.T;D< MOV U.UCBX(R5),KISAR6 ;MAP UCB EXTENSION IN SECONDARY POOL BEQ 35$ ;IF EQ NO EXTENSIONK;T>; MAP TO UCB EXTENSION, SAVE COUNTS ON THE STACK THEN MAP BACK!; TO ERROR PACKET AND FILL IT IN.A;D( MOV #IOC+20, R1 ; GET END OF I/O COUNTS% MOV -(R1),-(SP) ; SAVE THE LOW ORDER : MOV -(R1),-(SP) ; SAVE HIGH ORDER CYLINDERS CROSSED COUNT! MOV -(R1),-(SP) ; SAVE LOW ORDERI: MOV -(R1),-(SP) ; SAVE HIGH ORDER BLOCKS TRANSFERED COUNT2 MOV -(R1),-(SP) ; SAVE SOFT AND HARD ERROR COUNTS! TST -(R1) ; BYPASS ERROR LIMITS5! MOV -(R1),-(SP) ; SAVE I/O COUNTO MOV -(R1),-(SP) ;...I& BIT #SM.ZER,26(SP) ; ZERO THE COUNTS? BEQ 33$ ; IF EQ NO CLR (R1)+ ;CLEAR THE COUNTSE CLR (R1)+ ;... TST (R1)+ ;... CLR (R1)+ ;... CLR (R1)+ ;... CLR (R1)+ ;... CLR (R1)+ ;... CLR (R1)+ ;...&33$: MOV 20(SP), KISAR6 ; REMAP PACKET$ MOV #7,R3 ; MOVE 7 ITEMS TO PACKET34$: MOV (SP)+,(R0)+ ; GOS SOB R3,34$ ;...K BR 40$ ;JOIN COMMON CODE BELOW835$: ADD #16,R0 ;UPDATE POINTER. NOTE: A FLAG IS SET BY* ;...CRDEVP TO INDICATE THE DATA IN THE1 ;...UCB EXTENSION AREA IS INVALID. IT IS DONE 0 ;...THERE RATHER THAN HERE FOR GENERALITY AS# ;...OTHER ROUTINES CALL CRDEVP..#40$: MOV 2(SP), KISAR6 ; MAP PACKET.;R'; CREATE THE DEVICE OPERATION SUBPACKET+;.; AT THIS POINT:;2; R0=POINTER TO NEXT FREE ENTRY IN ALLOCATED BLOCK; R1=UNDEFINED'; R2=CONTROL MASK WORD, SHIFTED RIGHT 3B; R3=UNDEFINED; R4=UNDEFINED; R5=UCB ADDRESS;:0CREDOP: ROR R2 ;CHECK FOR PRESENCE OF SUBPACKET% BCC CREIOA ;IF CC NO SUCH SUBPACKETN' MOV U.SCB(R5),R4 ;RETRIEVE SCB ADDRESSI/ MOV #E$OLEN,(R0)+ ;INSERT THE SUBPACKET LENGTHR- MOV S.PKT(R4),R1 ;GET THE I/O PACKET POINTERE& MOV I.TCB(R1),R1 ;GET THE TCB POINTER* CALL CRTASP ;INSERT THE TASK INFORMATION0 CALL CRIOPP ;INSERT THE I/O PACKET INFORMATION# CLR (R0)+ ;NO CURRENT RETRY COUNT ;D; I/O ACTIVITY SUBPACKET;D; AT THIS POINT:; 2; R0=POINTER TO NEXT FREE ENTRY IN ALLOCATED BLOCK; R1=UNDEFINED'; R2=CONTROL MASK WORD, SHIFTED RIGHT 4C; R3=UNDEFINED; R4=UNDEFINED; R5=UCB ADDRESS;R4CREIOA: ROR R2 ;CHECK FOR AN I/O ACTIVITY SUBPACKET- BCC CREDAT ;IF CC NO I/O ACTIVITY SUBPACKETP; D; THE LENGTH OF THE I/O ACTIVITY SUBPACKET WILL BE COMPUTED WHEN THEC; ENTIRE SUBPACKET HAS BEEN CREATED. SAVE THE BEGINNING ADDRESS OFI; THE SUBPACKET FOR FUTURE USE. ;N3 MOV R0,-(SP) ;SAVE THE BEGINNING SUBPACKET ADDRESS:3 CLR (R0)+ ;GET RID OF ANYTHING IN THE LENGTH WORDO+ MOV R5,R2 ;SAVE UCB ADDRESS FOR REFERENCEH0 MOV #$SCDVT,-(SP) ;SETUP FOR THE COROUTINE CALL&10$: CALL @(SP)+ ;GET THE NEXT DEVICE BCS 20$ ;IF CS DONEY# MOV S.ST2(R4),R3 ;COPY STATUS BITSO COM R3 ;TOGGLE THEM5 BIT #S2.LOG!S2.ACT,R3 ;ACTIVE ERROR LOGGING DEVICE?C BNE 10$ ;IF NE NON CMP R5,R2 ;IS THIS OUR UCB?. BEQ 10$ ;IF EQ YES, IGNORE IT, CALL CRDEVP ;CREATE THE DEVICE INFORMATION) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSS- MOV I.TCB(R1),R1 ;GET THE TASK'S TCB ADDRESSG* CALL CRTASP ;CREATE THE TASK INFORMATION. TST -(R0) ;POINT BACK TO THE TI: UNIT NUMBER8 MOVB (R0),E$ATIU-E$AFNC(R0) ;INSERT THE TI: UNIT NUMBER0 CALL CRIOPP ;CREATE THE I/O PACKET INFORMATION BR 10$ ;LOOP UNTIL DONEE320$: MOV R0,R2 ;COPY THE CURRENT SUBPACKET ADDRESSE+ SUB (SP),R2 ;COMPUTE THE SUBPACKET LENGTHS9 MOV R2,@(SP)+ ;INSERT THE LENGTH IN THE SUBPACKET PREFIX ;T; CREATE THE DATA SUBPACKETV;P; AT THIS POINT:;C2; R0=POINTER TO NEXT FREE ENTRY IN ALLOCATED BLOCK; R1=UNDEFINED; R2=UNDEFINED; R3=UNDEFINED; R4=UNDEFINED; R5=UNDEFINED;E8CREDAT: BIT #SM.DAT,10(SP) ;DO WE HAVE A DATA SUBPACKET? BEQ 20$ ;IF EQ NO , MOV 6(SP),R3 ;GET THE DATA SUBPACKET LENGTH3 MOV R3,(R0) ;PUT IN THE LENGTH OF THE DATA ITSELF 1 ADD #2,(R0)+ ;ADD IN THE SUBPACKET HEADER LENGTHT5 BIT #SM.MBC,10(SP) ;MASSBUS RHBAE REGISTERS PRESENT?  BEQ 5$ ;IF EQ NO, SUB #4,R3 ;YES, THEY MAY NOT BE CONTIGUOUS-5$: MOV R0,-(SP) ;SAVE SUBPACKET DATA ADDRESS % MOV 14(SP), R2 ;GET THE DATA ADDRESSD00L]m0mal8bl BEQ 15$ ;IF EQ, NO DATAF% MOV R3,R0 ;GET NUMBER BYTES TO MOVEE# MOV 2(SP),R1 ;DATA BUFFER APR BIAS ;E@; IF THE DATA BUFFER IS MAPPED THROUGH ANY APR'S BUT 5 OR 6, THEB; MAPPING WILL BE TRANSPARENT TO BLXIO. HOWEVER, IF IT'S IN APR6,@; WE MUST CONVERT IT TO USE 5 AND IF IT'S IN 5, WE MUST RETRIEVE*; THE SAVED APR5 MAPPING TO PASS TO BLXIO.; % CMP #160000,R2 ;IS DATA IN I/O PAGE?  BLOS 10$ ;IF YES, BRANCH' CMP #140000,R2 ;IS IT LOWER THAT APR6?R BHI 7$ ;SEE IF IT'S IN APR5D. SUB #20000, R2 ;CONVERT APR6 ADDRESS TO APR5  BR 10$ ;AND CONTINUE%7$: CMP #120000, R2 ;IS THIS IN APR5?R BHI 10$ ;BR IF NOT; I; WARNING: THIS STATEMENT REACHES OUT OF THIS MODULE'S "KNOWN" STACK AREAP<; TO GET THE APR5 MAPPING WHICH WAS SAVED BY ANOTHER MODULE:;T0 MOV 40(SP),R1 ;ELSE, GET THE SAVED APR5 MAPPING(10$: MOV 4(SP),R3 ;GET MAPPING TO PACKET MOV (SP),R4 ;ADDR OF BUFFER  CALL $BLXIO ;MOVE DATA MOV R4,R0 ;UPDATE POINTER 5 BIT #SM.MBC,12(SP) ;MASSBUS RHBAE REGISTERS PRESENT?S BEQ 15$ ;IF EQ NOT MOV 20(SP),R5 ;GET UCB ADDRESS;" MOV U.SCB(R5),R4 ;GET SCB ADDRESS* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS MOV R3,R2 ;COPY KRB ADDRESSE% ADD K.OFF(R3),R2 ;POINT TO UCB TABLEE) MOV KE.RHB(R2),R2 ;RETREIVE RHBAE OFFSETE MOV 2(SP),KISAR6 ;MAP DATAV( ADD 14(SP),R2 ;FORM AN I/O PAGE ADDRESS% MOV 2(R2),-(SP) ;COPY BOTH REGISTERSA MOV (R2),-(SP) ;...! MOV 10(SP), KISAR6 ;REMAP PACKET * MOV (SP)+,(R0)+ ;MOVE REGISTERS TO PACKET* MOV (SP)+,(R0)+ ;MOVE REGISTERS TO PACKET+15$: MOV (SP)+,R1 ;GET SUBPACKET DATA ADDR. #20$: CLC ;PACKET COULD BE CREATEDS$ TST (SP)+ ;DISCARD MAPPING TO DATA) MOV (SP)+,R3 ;RESTORE THE PACKET ADDRESSR,PKTXIT: MOV (SP)+,R0 ;RESTORE THE ENTRY CODE. INC (SP)+ ;DISCARD THE DATA SUBPACKET LENGTH, MOV (SP)+,R2 ;RESTORE THE CONTROL MASK WORD% INC (SP)+ ;DISCARD THE DATA ADDRESS;& MOV (SP)+,R4 ;RESTORE THE TCB ADDRESS& MOV (SP)+,R5 ;RESTORE THE UCB ADDRESS RETURN ;DONE;;+#; **-CRTASP-CREATE TASK INFORMATIONO;R=; CREATES THE FOLLOWING INFORMATION IN THE CURRENT SUBPACKET: ;03; +-----------------------------------------------+A; | TASK NAME IN RAD50 |+ ; | |3; +-----------------------------------------------+H; | TASK UIC |3; +-----------------------------------------------+R; | TASK TI: DEVICE NAME |D3; +-----------------------+-----------------------+R$; | FLAGS | TASK TI: UNIT NUMBER |3; +-----------------------+-----------------------++; ; FLAGS:; ET$PRV TASK IS PRIVILEGED ; ET$PRI TERMINAL IS PRIVILEGED;N ; INPUTS:T'; R0=POINTER TO SUBPACKET FOR INSERTION-; R1=POINTER TO TASK TCB; ; OUTPUTS: ; R0=UPDATED; R1 AND R3 ARE DESTROYED-; R4 AND R5 ARE PRESERVED-;-CRTASP: SAVNR ;SAVE R4 AND R5-* MOV T.NAM(R1),(R0)+ ;PUT IN THE TASK NAME MOV T.NAM+2(R1),(R0)+ ;...+ MOV T.PCB(R1),R4 ;GET A POINTER TO THE PCB-0 BIT #PS.OUT!PS.CKP,P.STAT(R4) ;TASK IN MEMORY ?' BEQ 2$ ;IF EQ, YES - UIC IS AVAILABLE-& CLR (R0)+ ;OTHERWISE, ASSUME UIC 0,0 BR 7$ ;L2$: ;REFERENCE LABELI .IF DF X$$HDR, MOV KISAR6,-(SP) ;SAVE CURRENT APR6 MAPPING. MOV P.HDR(R4),R5 ;GET A POINTER TO THE HEADER BNE 5$ ;IF NE IT'S RESIDENTT9 MOV P.REL(R4),KISAR6;SET APR6 MAPPING TO EXTERNAL HEADERS MOV #140000,R5 ;SET TO MAP APR6;;3;SAVE UIC AND REMAP PACKET AND INSERT UIC IN PACKETM;T%5$: MOV H.CUIC(R5),R5 ; SAVE THE UIC+ MOV (SP)+, KISAR6 ; RESTORE PACKET MAPPINGY MOV R5,(R0)+ ; INSERT UIC .IFF ; DF X$$HDRR. MOV P.HDR(R4),R4 ;GET A POINTER TO THE HEADER$ MOV H.CUIC(R4),(R0)+;INSERT THE UIC .ENDC ; DF X$$HDR7$: ;REFERENCE LABELG* MOV T.UCB(R1),R5 ;GET THE TI: UCB POINTER210$: MOV U.RED(R5),R5 ;FOLLOW THE REDIRECT POINTER, CMP R5,U.RED(R5) ;IS THE DEVICE REDIRECTED? BNE 10$ ;IF NE YES* MOV U.DCB(R5),R3 ;GET THE TI: DCB POINTER, MOV D.NAM(R3),(R0)+ ;INSERT THE DEVICE NAME& CALL CALDEV ;CALCULATE DEVICE UNIT #% CLRB (R0) ;INITIALIZE THE FLAG BYTER/ BIT #U2.PRV,U.CW2(R5) ;IS THE TI: PRIVILEGED?H BEQ 20$ ;IF EQ NOT+ BISB #ET$PRI,(R0) ;MARK THE TI: PRIVILE00LemmlkTADATADATADATADATADATAGEDT420$: BIT #T3.PRV,T.ST3(R1) ;IS THE TASK PRIVILEGED? BEQ 25$ ;IF EQ NO), BISB #ET$PRV,(R0) ;MARK THE TASK PRIVILEGED+25$: TSTB (R0)+ ;POINT PAST THE FLAG ENTRY. RETURN ;DONEE;+%; **-CRDEVP-CREATE DEVICE INFORMATIOND;R=; CREATES THE FOLLOWING INFORMATION IN THE CURRENT SUBPACKET:E;V3; +-----------------------------------------------+R$; | LOGICAL DEVICE NAME MNEMONIC |3; +-----------------------+-----------------------+2,; | CONTROLLER NUMBER | DEVICE UNIT NUMBER |3; +-----------------------+-----------------------+A*; | PHYSICAL SUBUNIT # | PHYSICAL UNIT # |3; +-----------------------+-----------------------+)%; | PHYSICAL DEVICE NAME MNEMONIC | 3; +-----------------------------------------------+O; | RESERVED | FLAGS |W3; +-----------------------+-----------------------+-;- ; INPUTS:-; R0=POINTER TO DATA AREA-; R4=SCB ADDRESS; R5=UCB ADDRESS;| ; OUTPUTS: ; R0=UPDATED; R1 AND R3 ARE DESTROYED2; R4 AND R5 ARE PRESERVEDE;-CRDEVP: SAVNR ;SAVE R4 AND R5- CLR -(SP) ;CLEAR FLAG WORD+ MOV U.DCB(R5),R3 ;GET A POINTER TO OUR DCB|. TST U.UCBX(R5) ;DOES THE UCB EXTENSION EXIST? BNE 10$ ;IF NE - YES= BIS #EI$NUX,(SP) ;INDICATE ANY UCB EXTENSION DATA IS INVALID-<10$: MOV D.NAM(R3),(R0)+ ;PUT IN THE LOGICAL DEVICE MNEMONIC& CALL CALDEV ;CALCULATE DEVICE UNIT #* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS BEQ 15$ ;IF EQ - NO KRBS( MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX15$: ASRB R3 ;MAKE IT A NUMBER ' MOVB R3,(R0)+ ;INSERT CONTROLLER INDEX43 MOVB U.UNIT(R5),(R0)+;GET THE PHYSICAL UNIT NUMBER)& CLRB (R0)+ ;CLEAR THE SUBUNIT NUMBER3 BITB #S3.SLV,S.ST3(R4) ;IS THERE ANY SLAVE UNITS?  BEQ 20$ ;IF EQ NOX4 MOVB U.SNUM(R5),-1(R0) ;YES, INSERT SUBUNIT NUMBER1 BIS #EI$SUB,(SP) ;FLAG AS A SUBCONTROLLER DEVICEN;C<; GET THE PHYSICAL CONTROLLER NAME BY SCANNING THE CTB LIST.;C020$: MOV #$CTLST,R3 ;GET ADDRESS OF CTB LISTHEAD+25$: MOV (R3),R3 ;GET THE NEXT CTB ADDRESSR BNE 30$ ;IF NE WE GOT ONEV' MOV U.DCB(R5),R3 ;ELSE GET DCB ADDRESSV6 MOV D.NAM(R3),(R0)+ ;USE DCB NAME FOR CONTROLLER NAME BR 55$ ;/30$: MOV L.DCB(R3),R1 ;GET DCB POINTER FROM CTBS@ BITB #LS.CIN,L.STS(R3) ;IS THIS A COMMON INTERRUPT CONTROLLER?* BNE 40$ ;IF NE YES, SEARCH TABLE FOR DCB+ CMP R1,U.DCB(R5) ;IS THIS THE CORRECT CTB? BNE 25$ ;IF NE NO, LOOPR BR 50$ ;IT MUST BE.40$: TST (R1)+ ;SKIP COMMON INTERRUPT ADDRESS-45$: TST (R1) ;IS THIS THE END OF THE TABLE?T BEQ 25$ ;IF EQ YES1 CMP (R1)+,U.DCB(R5) ;DOES THE DCB MATCH OUR DCB?S BNE 45$ ;IF NE NOM950$: MOV L.NAM(R3),(R0)+ ;INSERT PHYSICAL CONTROLLER NAME555$: MOV (SP)+,(R0)+ ;SET FLAGSD RETURN ;O;+(; **-CRIOPP-INSERT I/O PACKET PARAMETERS;T.; INSERTS THE FOLLOWING I/O PACKET PARAMETERS:;B3; +-----------------------------------------------+B; | I/O FUNCTION CODE |3; +-----------------------+-----------------------+N; | RESERVED | FLAGS |T3; +-----------------------+-----------------------+ "; | TRANSFER OPERATION ADDRESS | ; | |3; +-----------------------------------------------+(%; | TRANSFER OPERATION BYTE COUNT |3; +-----------------------------------------------++; ; INPUTS:N; R0=POINTER TO SUBPACKET DATA; R4=SCB ADDRESS; R5=UCB ADDRESS;M ; OUTPUTS: ; R0=UPDATED; R1 AND R3 ARE DESTROYED-; R4 AND R5 ARE PRESERVEDN;-#CRIOPP: MOV R2,-(SP) ;SAVE REGISTER-) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS $ MOV I.FCN(R1),R3 ;GET FUNCTION CODE MOV R3,(R0)+ ;INSERT IT CLR (R0) ;SETUP FOR THE FLAGS ; -; OBTAIN A MASK BIT FOR THE I/O FUNCTION CODE-;-& MOV U.DCB(R5),R1 ;GET THE DCB POINTER0 ADD #D.MSK+2,R1 ;AND POINT TO THE FUNCTION MASK CLRB R3 ;CLR MODIFIER FLAGSI( SWAB R3 ;PUT FUNCTION CODE IN LOW BYTE3 CMP R3,#15. ;IS THE FUNCTION IN THE SECOND MASKS?A) BLOS 10$ ;IF LOS FUNCTION IN FIRST MASKR* SUB #16.,R3 ;NORMALIZE THE FUNCTION CODE% ADD #8.,R1 ;POINT TO THE SECOND SET -10$: ASL R3 ;MAKE FUNCTION CODE A WORD INDEX= MOV $BTMSK(R3),R3 ;GET BIT THAT CORRESPONDS TO FUNCTION CODE ;B7; SEE IF THE00Lmm0mal8bl FUNCTION IS OTHER THAN A TRANSFER FUNCTIOND;R( BIT R3,(R1)+ ;IS IT A CONTROL FUNCTION? BNE 20$ ;IF NE YES' BIT R3,(R1)+ ;IS IT A NOOPED FUNCTION?I BNE 20$ ;IF NE YES% BIT R3,(R1)+ ;IS IT AN ACP FUNCTION?  BNE 20$ ;IF NE YES. BIS #EO$TRA,(R0) ;FLAG AS A TRANSFER FUNCTION;S; INSERT THE OTHER FLAGS;T020$: BITB #UC.NPR,U.CTL(R5) ;IS IT A DMA DEVICE? BEQ 40$ ;IF EQ NOA' BIS #EO$DMA,(R0) ;FLAG AS A DMA DEVICES* MOV S.KRB(R4),R3 ;GET CURRENT KRB ADDRESS9 BIT #KS.MBC!KS.EXT,K.STS(R3) ;22-BIT ADDRESSING DEVICE?F BEQ 35$ ;IF EQ NOB5 BIS #EO$EXT,(R0) ;FLAG AS EXTENDED ADDRESSING DEVICEE835$: BITB #S3.SIP,S.ST3(R4) ;IS THE DEVICE POSITIONING? BEQ 40$ ;IF EQ NORC40$: MOV S.PKT(R4),R2 ; GET THE POINTER TO THE I/O PACKET A BIT #1,I.IOSB+4(R2) ; TEST IF THIS IS AN INTERNAL I/O PACKET BEQ 41$ ; IF EQ NO: BIS #EO$IIO,(R0) ; THEN SET THE BIT TO INDICATE IT541$: MOV (R0)+,R1 ; GET COPY OF FLAG WORD E0 BIT #EO$EXT,R1 ;DO WE HAVE AN EXTENDED ADDRESS? BNE 70$ ;IF NE YES& BIT #EO$DMA,R1 ;IS THIS A DMA DEVICE? BEQ 90$ ;IF EQ NO ;S2; INSERT THE TRANSFER OPERATION ADDRESS AND LENGTH;C& ADD K.OFF(R3),R3 ;POINT TO UMR AREA+2, MOV -(R3),2(R0) ;INSERT LOW BITS OF ADDRESS. MOVB -(R3),(R0)+ ;INSERT HIGH BITS OF ADDRESS CLRB (R0)+ ;FORGET ANY GARBAGE TST (R0)+ ;POINT PAST LOW BITS BR 100$ ;O670$: MOVB U.BUF+1(R5),(R0);ASSUME HIGH BITS ARE IN UCB8 BIT #KS.EXT,K.STS(R3) ;IS THIS A 22-BIT UNIBUS DEVICE? BEQ 80$ ;IF EQ NON) MOV S.PKT(R4),R2 ;GET I/O PACKET ADDRESSO. MOV I.PRM+6(R2),(R0);GET HIGH BITS OF ADDRESS&80$: BIC #^C<377>,(R0)+ ;CLEAR GARBAGE BR 95$ ;GO GET LOW BITS490$: MOV U.BUF(R5),(R0)+ ;STORE HIGH BITS OF ADDRESS695$: MOV U.BUF+2(R5),(R0)+ ;STORE LOW BITS OF ADDRESS1100$: MOV U.CNT(R5),(R0)+ ;MOVE IN THE BYTE COUNTG MOV (SP)+,R2 ;RESTORE REGISTERO RETURN ;0;+(; **-CALDEV-CALCULATE DEVICE UNIT NUMBER; 9; THIS ROUTINE WILL CALCULATE THE LOGICAL UNIT NUMBER FORS; THE GIVEN UCB.;I ; INPUTS:M; R0=POINTER TO PACKET DATAE; R3=DCB ADDRESS; R5=UCB ADDRESS;I ; OUTPUTS:); UNIT NUMBER STORED IN NEXT PACKET BYTE.A;-CALDEV: SAVNR ;SAVE R4 AND R5V/ SUB D.UCB(R3),R5 ;COMPUTE RELATIVE UCB ADDRESS:" CLR R4 ;GET READY FOR THE DIVIDE0 DIV D.UCBL(R3),R4 ;COMPUTE REALTIVE UNIT NUMBER0 ADD D.UNIT(R3),R4 ;COMPUTE ABSOLUTE UNIT NUMBER% MOVB R4,(R0)+ ;STORE IN ERROR PACKETL RETURN ;I;+-; **-$CREQ1-CREATE AND QUEUE ERROR LOG PACKET ;TC; THIS ROUTINE CREATES AND QUEUES ERROR LOG PACKET. IT USES $CRPK1TE; AND $QUPK1. IT'S INPUT IS THE SAME AS THE INPUT TO $CRPK1 AND IT'SEC; OUTPUT IS THE SAME AS THAT FROM $QUPK1. IF THE PACKET CANNOT BE VD; CREATED, $QUPKT IS NOT CALLED AND A RETURN IS MADE WITH CARRY SET.; KISAR6 MAPPING IS PRESERVED.;4;-$CREQ1:: MOV KISAR6,-(SP) ; SAVE MAPPING! CALL $CRPK1 ; CREATE THE PACKETM# MOV (SP)+,KISAR6 ; RESTORE MAPPING) BCC $QUPK1 ; IF WE GOT PACKET, QUEUE ITD' RETURN ; ELSE, RETURN WITH CARRY SETI;+"; **-$QUPK1-QUEUE ERROR LOG PACKET;SF; THIS ROUTINE IS CALLED TO QUEUE AN ERROR LOG PACKET. IF THERE IS NOH; OTHER PACKET IN THE QUEUE, THE ERROR LOGGER IS REQUESTED WITH A DELAY.F; IF THERE IS ANOTHER PACKET ALREADY IN THE QUEUE, THE ERROR LOGGER IS; REQUESTED IMMEDIATLY.R;R ; INPUTS:-;C9; R3=POINTER TO PACKET FOR INSERTION IN QUEUE (APR VALUE)R;E ; OUTPUTS:;M; R4 AND R5 ARE PRESERVEDA#; ALL OTHER REGISTERS ARE DESTROYEDE;-$QUPK1::SAVNR ;SAVE R5 AND R4W+ MOV R3,R1 ;COPY THE POINTER TO THE PACKETO5 MOV $ERRPT,R5 ;SAVE FOR USE WHEN REQUESTING THE TASKE" BEQ 40$ ;IF EQ NO ERROR LOG TASK5 MOV #$ERHEA,R0 ;GET A POINTER TO THE QUEUE LIST HEADD< CALL $QSPIF ;INSERT THE ENTRY FIFO IN THE QUEUE (2ND POOL)6 CMP (R0)+,(R0) ;IS THIS THE FIRST ENTRY IN THE QUEUE? BNE 20$ ;IF NE NOP% MOV KISAR6,-(SP) ; SAVE APR6 MAPPING  MOV R1,KISAR6 ; MAP PACKET6 BIT #SM.CMD,E$HSBF+140004 ;IS THIS A COMMAND PACKET? BNE 10$ ; IF NO YESP# MOV (SP)+,KISAR6 ; RESTORE MAPPING,, MOV #C.LGTH,R1 ;SIZE OF A CLOCK Q00Lum|mlkTADATADATADATADATADATAUEUE ENTRY& CALL $ALOCB ;ALLOCATE THE CORE BLOCK/ BCS 20$ ;IF CS FAILURE, TRY IMMEDIATE REQUEST#$ CLR C.UIC(R0) ;INDICATE DEFAULT UIC .IF DF A$$CNT# CLR C.UAB(R0) ;BILL TASK TO SYSTEMU .ENDC ; DF A$$CNT CLR R1 ;HIGH TIME = 0T MOV #ERRTIM,R2 ;LOW TIME ) MOV #C.SSHT,R4 ;SINGLE SHOT TASK REQUESTA- CALLR $CLINS ;INSERT THE ENTRY IN THE QUEUEC;H=; THERE IS ANOTHER PACKET IN THE QUEUE, SO IMMEDIATLY REQUEST; THE ERROR LOGGER.E;R'10$: MOV (SP)+,KISAR6 ; RESTORE MAPPINGK'20$: MOV R5,R0 ;COPY THE ERROR LOG TCB ' TST T.STAT(R0) ;IS IT ALREADY RUNNING? & BPL 30$ ;IF PL YES, DON'T REQUEST IT CLR R1 ;INDICATE DEFAULT UIC CALLR $TSKRT ;REQUEST THE TASK;S?; THE ERROR LOG TASK IS ALREADY RUNNING, SO DISMISS THE REQUESTR;M30$: RETURN ;EXIT.;R@; THE ERROR LOG TASK HAS BEEN REMOVED. DISCARD THE QUEUED ENTRY; 240$: MOV R1,R0 ;COPY THE ERROR LOG PACKET POINTER! MOV KISAR6, -(SP) ; SAVE MAPPING  MOV R1,KISAR6 ; MAP TO PACKET. MOV @#140002,R1 ; GET SIZE OF PACKET IN BYTES6 ADD #77+4,R1 ; ACCOUNT FOR LINK + LENGTH + TRUNCATION( ASH #-6,R1 ; CONVERT TO 32 WORD BLOCKS# MOV (SP)+,KISAR6 ; RESTORE MAPPINGC* CALLR $DESEC ; DEALLOCATE SECONDARY POOL;+-; **-$QRMV1-REMOVE ENTRY FROM ERROR LOG QUEUES;F; THIS ROUTINE REMOVES AN ENTRY FROM THE ERROR LOG QUEUE AND TRANSFERS; IT INTO A USER BUFFER.; ; INPUTS:V;,; R4=LENGTH OF USER BUFFER; R5=ADDRESS OF USER BUFFER);S ; OUTPUTS:;M; R1=LENGTH OF PACKETA; R4=UNCHANGED; R5=UNCHANGED;F%; C=0 PACKET WAS REMOVED SUCCESSFULLYN;; C=1 NO PACKET TO REMOVE OR PACKET TOO LONG. IF R1<>0 THE2=; PACKET WAS TOO LONG, AND R1 CONTAINS THE PACKET LENGTH.E;- $QRMV1::SAVNR ; SAVE R4 AND R5, CLR R1 ; SAY THE PACKET HAS LENGTH OF ZERO& MOV #$ERHEA,R0 ;GET THE QUEUE POINTER( CALL $QSPRF ; REMOVE PACKET FROM QUEUE BCS 30$ ;IF CS NO SUCH PACKETS MOV KISAR6,-(SP) ; SAVE MAPPING6 MOV R1,KISAR6 ; MAP TO PACKET - VALUE CAME FROM QSPRF% MOV @#140002,R0 ; GET SIZE OF PACKET5# MOV (SP)+,KISAR6 ; RESTORE MAPPINGV MOV R0,-(SP) ; SAVE SIZEP% MOV R4,-(SP) ; SAVE USER BUFFER SIZE ! MOV R5,R4 ; USER BUFFER ADDRESSN' CMP R0,(SP)+ ; IS THE PACKET TOO LONG?-# BHI 20$ ;IF HI PACKET IS TOO LONG; ?; PREPARE FOR $BLXIO.. INPUT IS R0= #BYTES, R1=SOURCE APR5 BIASEC; R2=SOURCE DISPLACEMENT, R3=DESTINATION APR6 BIAS, R4=DEST. DISPL.IE; OUTPUT FROM BLXIO IS: R0 ALTERED, R1,R3 PRESERVED, R2 AND R4 POINT;%; TO LAST BYTE OF SOURCE AND DEST. +1;V, MOV #120004,R2 ; SKIP LINK AND LENGTH WORDS! MOV KISAR6,R3 ; PRIV.TASK'S APR6, CALL $BLXIO ; MOVE THE BUFFER ,20$: MOV R1,-(SP) ; SWAP R0 AND R1 FOR DESEC MOV (SP)+,R0 ;... MOV (SP)+,R1 ;...- MOV R1,-(SP) ; SAVE SIZE IN BYTES FOR OUTPUTO7 ADD #77+4,R1 ; ACCOUNT FOR LENGTH, LINK AND TRUNCATION1 ASH #-6,R1 ; CONVERT TO BLOCKS! CALL $DESEC ; DEALLOCATE PACKETS( MOV (SP)+,R1 ;RESTORE THE PACKET LENGTH DEC R4 ;ADJUST SO THAT IF: ; R4>R5 WE TRANSFERRED DATAO$ ; R4R5 WE TRANSFERRED DATAO$ ; R4; A BUFFER LIST CONTAINING TWO WORD ENTRIES EXISTS WHICH THIS C; ROUTINE WILL SEARCH TO FIND A FREE BUFFER WHENEVER ONE OVERFLOWS.I;; THE FIRST WORD OF EACH ENTRY IS THE KISAR6 MAPPING TO THEU>; FIRST WORD OF THE BUFFER AND THE SECOND IS THE LENGTH OF THE; BUFFER IN BYTES.;O7; THE EVENT HEADER FORMAT FOR EACH EVENT IS AS FOLLOWS:;O3; +-----------------------------------------------+M; ! CPU NUMBER ! EVENT NUMBER !F3; +-----------------------------------------------+N-; ! SECOND OF MINUTE ! TICK OF SECOND !I3; +-----------------------------------------------+I"; ! EVENT SEQUENCE NUMBER !3; +-----------------------------------------------+I; ! PARAMETERS !H3; +-----------------------------------------------+L ; ! . !3; +-----------------------------------------------+ ; ! . ! 3; +-----------------------------------------------+- ; ! . !-3; +-----------------------------------------------+-;-;-D; WHEN THE MACRO RECIEVES CONTROL FROM THIS SUBROUTINE, IF THE CARRYA; IS CLEAR THEN R0 POINTS TO THE PLACE TO INSERT THE FIRST OF THE 7; PARAMETERS. KISAR6 IS SET UP CORRECTLY FOR THIS TOO.-;- ; INPUTS:-;-; R0=EVENT NUMBER.;R ; OUTPUTS:;-; IF CC:.; R0=DISPLACEMENT INTO BUFFER FOR PARAMETERS. ; 2(SP)=SAVED KISAR6 VALUE.; KISAR6=SET UP FOR BUFFER. ; ; IF CS:; R0=UNDEFINED.;-; REGISTERS MODIFIED: ; ; NONE.-;- - - .IF DF E$$VNT -0$EVADD::MOV KISAR6,-(SP) ;SAVE THE KISAR6 OFFSET) MOV $EVKS6,KISAR6 ;MAP TO CURRENT BUFFERY ;C4; CHECK FOR ENOUGH ROOM IN THE BUFFER FOR THIS EVENT;H $ MOV R0,-(SP) ;SAVE THE EVENT NUMBER' CLR -(SP) ;FOR MOVB -(SP) INSTRUCTION 2 MOVB $EVTAB(R0),(SP) ;GET THE LENGTH OF THE EVENT+ MOV $EVDIS,R0 ;GET CURRENT BUFFER POSITION / ADD (SP)+,$EVDIS ;ADD EVENT LENGTH TO POSITIONU< CMP $EVLEN,$EVDIS ;COMPARE CURRENT POS WITH LENGTH + 140000 BHI 20$ ;IF HI NOO# BEQ 5$ ;IF EQ BUFFER EXACTLY FULL A;:'; SHOW THIS BUFFER FULL BUT NOT EXACTLY;V V* CLR (R0) ;PLACE ZERO WORD AT LOGICAL EOB H; .; SWITCH BUFFERS -- CURRENT ONE HAS OVERFLOWED; M*5$: MOV #$EVLST,R0 ;SEARCH FOR FREE BUFFER410$: MOV (R0)+,KISAR6 ;GET NEXT BUFFER KISAR6 OFFSET' BEQ 30$ ;IF EQ NO NEXT OFFSET -- OOPSI# TST @#140002 ;IS THIS BUFFER FULL?A BNE 10$ ;IF NE YES T;N ; FOUND EMPTY BUFFER -- CLAIM IT;; P3 MOV KISAR6,$EVKS6 ;SAVE MAPPING TO BUFFER SELECTEDI-15$: INC $EVBSQ ;BUMP BUFFER SEQUENCE NUMBER$ BEQ 15$ ;SEQUENCE NUMBER NEVER = 0C MOV $EVBSQ,@#140002 ;PUT SEQUENCE NUMBER IN SECOND BUFFER POSITION  T;B; ACTIVATE BUFFER DUMP00mlmlkTADATADATADATADATADATA TASKR;W & MOV #1,R0 ;SET UP FOR EVENT FLAG SET MOV R1,-(SP) ;SAVE R1 MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) ;SAVE R3 MOV R4,-(SP) ;SAVE R4 MOV R5,-(SP) ;SAVE R5 MOV $EVTCB,R5 ;SET UP FOR $SETF CALL $SETF MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3P MOV (SP)+,R2E MOV (SP)+,R1I T;U; SET UP LATEST BUFFER;V ' MOV @#140000,$EVLEN ;GET BUFFER LENGTH 7 ADD #140000,$EVLEN ;MAKE LENGTH INTO END OF BUFFER PTRU MOV (SP),R0 ;GET EVENT NUMBERT, MOV $EVTAB(R0),$EVDIS ;SHOW EVENT IN BUFFER+ MOV #140004,R0 ;INITIAL POSITION IN BUFFER< ADD R0,$EVDIS ;MAKE EVDIS REFLECT POSITION AFTER THIS EVENT V;3; PUT INFORMATION IN BUFFERV;, P320$: MOVB (SP)+,(R0)+ ;PUT EVENT NUMBER INTO BUFFERS  M .IF DF M$$PRO (2 MOVB $PROCN,(R0)+ ;PUT PROCESSOR NUMBER IN BUFFER I .IFFU 3 CLRB (R0)+ ;NO PROCESSOR NUMBER ON SINGLE CPU SYSE U .ENDC  A/ INC $EVSEQ ;BUMP EVENT SEQUENCE NUMBER BY ONE 2 MOV $EVSEQ,(R0)+ ;PLACE SEQUENCE NUMBER IN BUFFER1 MOVB $TTNS,(R0)+ ;PLACE TICK OF SECOND IN BUFFERI5 MOVB $TTNS-2,(R0)+ ;PLACE SECOND OF MINUTE IN BUFFERR CLC RETURN  E;H ; ERROR EXIT; U30$: TST (SP)+ ;CLEAN STACK! INC $EVLOS ;INDICATE EVENT LOSTT SEC RETURNF S .ENDC . D .ENDO (2 MOVB $PROCN,(R0)+ ;PUT PROCESSOR NUMBER IN BUFFER I .IFFU 3 CLRB (R0)+ ;NO PROCESSOR NUMBER ON SINGLE CPU SYSE U .ENDC  A/ INC $EVSEQ ;BUMP EVENT SEQUENCE NUMBER BY ONE 2 MOV $EVSEQ,(R0)+ ;PLACE SEQUENCE NUMBER IN BUFFER1 MOVB $TTNS,(R0)+ ;P .TITLE EXDBT  .IDENT /08.02/R;5; COPYRIGHT (C) 1987 BY DIGITAL EQUIPMENT CORPORATIONR; ALL RIGHTS RESERVED.;T<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;M; D. N. CUTLER 7-DEC-74A;E); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:D;U; B. S. MCCARTHY;N$; MODIFIED FOR RSX-11M-PLUS V2.1 BY:;S; B. S. MCCARTHY;;+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:A;; J. C. FRANZINI; B. S. MCCARTHY;E+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:;O; B. S. MCCARTHY ; K. L. NOEL; +; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY: ;S; K. L. NOEL 11-JAN-88 V08.02L;N+; KLN076 -- FIX DOUBLE "P" PROBLEM FOR CPRD;E;TF; THIS IS A VERSION OF ODT THAT MAY BE USED TO DEBUG RSX-11M EXECUTIVEG; MODULES. IT IS AN OUTGROWTH OF THE STANDARD RSX-11 ODT WHICH WAS PRO-F$; DUCED BY M. SMITH , H. LEV ET. AL.;A; MACRO LIBRARY CALLSR;X .MCALL HWDDF$ .MCALL CPRDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS& CPRDF$ ;DEFINE CPR SPECIFIC SYMBOLS;; EQUATED SYMBOLSY; %BPT=3 ;BREAKPOINT INSTRUCTION CODEU'BKP=16 ;NUMBER OF BREAKPOINTS -1 X 2A*LPB=177516 ;LINE PRINTER BUFFER REGISTER*LPS=177514 ;LINE PRINTER STATUS REGISTER0RLR=16 ;NUMBER OF RELOCATION REGISTERS -1 X 2/TBT=20 ;T-BIT MASK FOR PROCESSOR STATUS WORDR4TKB=177562 ;CONSOLE TERMINAL INPUT BUFFER REGISTER4TKS=177560 ;CONSOLE TERMINAL INPUT STATUS REGISTER5TPB=177566 ;CONSOLE TERMINAL OUTPUT BUFFER REGISTERG5TPS=177564 ;CONSOLE TERMINAL OUTPUT STATUS REGISTER TPR0=0TPR1=2TPR2=4TPR3=6;A; LOCAL MACROS;C; DECODE NEXT COMMAND ;B .MACRO DECODE IOT .ENDM;E; ERRORB;E .MACRO ERROR7 EMT 0 .ENDM;S; TEST MODE FOR EXEC OR USER;  .MACRO TESTM ADDR JSR R5,TESTM0 .WORD ADDRS .ENDM;O; TYPE OUT CHARACTER(S)2;;>; TYPE OUT IS EFFECTED WITH A TRAP INSTRUCTION WITH THE BOTTOM; BYTE ENCODED AS FOLLOWS:;P!; 300 = OUTPUT BOTH BYTES IN R0. ; 200 = OUTPUT LOW BYTE IN R0.O$; 340 = OUTPUT A SEQUENCE. ; 240 = OUTPUT A SEQUENCE.;A8; ALL OTHER COMBINATIONS ARE TREATED AS THE ACTUAL BYTE ; TO OUTPUT. .MACRO TYPE ARG .IF IDN ,O TRAP 200 .IFF .IF IDN , TRAP 300 .IFF. .IF IDN ,R TRAP 340. .IFFD .IF IDN ,Y TRAP 240A .IFF2 TRAP ARG&177T .ENDC .ENDC .ENDC .ENDC .ENDM H .PAGE( .SBTTL MULTIPROCESSOR LOADABLE XDT NODE;UI; THIS IS A COPY OF THE PROTOTYPE NODE IN XD00lm0mal8blTINI. IT MUST BE KEPT IN SYNCC; WITH THAT COPY. ;0 .IF DF L$$XDT&M$$PRO.)$XDTND:: ; PROTOTYPE CODE START ADDRESSS.PROTO-.AISA5: .WORD 0 ; ADDRESS OF APR5 (PSEUDO D).$.XDTA5: .BLKW 1 ; XDT APR5 CONTENTS1.KISA5: .BLKW 1 ; SAVED APR5 CONTENTS DURING XDTI9.KINA5: .BLKW 1 ; SAVED I-SPACE APR5 CONTENTS DURING XDT:.VECTR: .WORD V$$CTR+4 ; HIGHEST VECTOR ADDRESS (DEFAULTED ; TO ASSEMBLY VALUE)0.RTN: MOV .KINA5,@#KINAR5 ; RESTORE I SPACE APR58 MOV .KISA5,@.AISA5 ; RESTORE D SPACE APR5 IF NECESSARY3.RTNI: RTI ; EXIT TO EXEC (MAY BE CHANGED TO RTI)X1.CRSH: MOV .KINA5,@#KINAR5 ; RESTORE I SPACE APR5S8 MOV .KISA5,@.AISA5 ; RESTORE D SPACE APR5 IF NECESSARY JMP @#0 ; JUMP TO CRASHR).CRADD = .-2 ; ADDRESS OF CRASH ADDRESSO'.ODDA: CMP SP,.VECTR ; STACK OVERFLOW ?D BLO .SOVFL ; IF LO YES/ JSR R5,.COMMN ; ODD ADDRESS OR OTHER TRAP FOUR  .WORD 0$.SGMT: JSR R5,.COMMN ; SEGMENT FAULT .WORD 2..BPTI: JSR R5,.COMMN ; BREAKPOINTS,T-BIT TRAPS .WORD 4,.IOTX: JSR R5,.COMMN ; IOT INSTRUCTION TRAPS .WORD 67.ILLI: JSR R5,.COMMN ; ILLEGAL INSTRUCTION TRAPS (->10), .WORD 10R .NEMT: JSR R5,.COMMN ; EMT TRAPS .WORD 12R- JMP @#0 ; ALWAYS ALLOW EXEC TO HANDLE TRAPSU).TRADD = .-2 ; ADDRESS OF CRASH ADDRESSR .WORD 06.FPPE: JSR R5,.COMMN ; 11/40 FLOATING POINT EXCEPTIONS .WORD 16O,.COMMN: MOV (R5),R5 ; GET SST VECTOR OFFSET( MOV @#KINAR5,.KINA5 ; SAVE I SPACE APR54 MOV @.AISA5,.KISA5 ; SAVE D SPACE APR5 IF NECESSARY. MOV .XDTA5,@#KINAR5 ; MAP INTO XDT IN I SPACE: MOV .XDTA5,@.AISA5 ; MAP INTO XDT IN D SPACE IF NECESSARY( ADD #SSTVC1,R5 ; POINT TO EXEC SST ADDR MOV (R5),R5 ; AND GET IT RTS R5 ; AND OFF TO XDT !0/.SOVFL: MOV @#KINAR5,.KINA5 ; SAVE I SPACE APR5.4 MOV @.AISA5,.KISA5 ; SAVE D SPACE APR5 IF NECESSARY. MOV .XDTA5,@#KINAR5 ; MAP INTO XDT IN I SPACE: MOV .XDTA5,@.AISA5 ; MAP INTO XDT IN D SPACE IF NECESSARY2 JMP @#SOVFL ; JUMP TO STACK OVERFLOW ENTRY POINT*.PLENG = . - .PROTO ; LENGTH OF DSR BLOCK .ENDC ; DF L$$XDT&M$$PROD .PAGE .IF DF X$$DBT .SBTTL LOCAL DATA; ; LOCAL DATA;A; CONTEXT VARIABLES F; THE ORDER OF THESE ITEMS IS INTENTIONAL, SEE REGISTER MAPPING SCHEME;D1INTBEG =. ;STARTING ADDRESS OF INTERNAL REGISTERS.UR0: 0 ;USER R0 $0 0 ; R1 $1 0 ; R2 $2 0 ; R3 $3 0 ; R4 $4 0 ; R5 $5USP: 0 ;USER SP $6UPC: $INITL ;USER PC $7 UST: PR7 ;USER PS $SARG: 0 ;ARGUMENT REGISTER $A;LOW: 0 ;LOW LIMIT $LHI: 0 ;HIGH LIMIT $H#CNST: $XDT ;CONSTANT REGISTER $CO QUAN: 0 ;QUANTITY REGISTER $QFORM: 0 ;FORMAT REGISTER $F;E; INTERNAL TABLESO;,/INTINX =. ;STARTING ADDRESS OF INTERNAL TABLEST;D:; BREAKPOINT CONTROL LISTS, AND EXTRA SLOT FOR SINGLE STEP; +ADR1: ;ADDRESS OF THE BREAKPOINT ($0B-$7B) 3 .WORD TRTC,TRTC,TRTC,TRTC,TRTC,TRTC,TRTC,TRTC,TRTC;CT: ;PROCEED COUNT ($0G-$7G)  .WORD 1,1,1,1,1,1,1,1,1/UIN: ;USER INSTRUCTION SAVE LOCATION ($0I-$7I) * .WORD BPT,BPT,BPT,BPT,BPT,BPT,BPT,BPT,BPT; ; RELOCATION REGISTERS;$#RELT: ;RELOCATION TABLES ($0R-$7R)O .WORD -1,-1,-1,-1,-1,-1,-1,-12INTEND=.-2 ;END OF INTERNAL REGISTERS AND TABLES;O ; EXEC SST TRAP VECTOR ADDRESSES;TD; THIS TABLE IS READ/WRITE AND THERE IS ONE SUCH TABLE PER PROCESSOR;T3SSTVEC: + ODDA ;0-ODD ADDRESS, OR HALT, VECTOR @4T + SGMT ;1-SEGMENT FAULT + BPTI ;2-T-BIT OR BPT  + IOTX ;3-IOT, + ILLI ;4-RESERVED OR ILLEGAL INSTRUCTION + NEMT ;5-EMT4 + $TRTRP ;6-TRAP (EXECUTIVE ALWAYS HANDLES TRAPS);NE; WORDS AND ORDERED BYTES, ITEMS MUST BE KEPT FROM COMMAND TO COMMAND,;-1CAD: .WORD 0 ;ADDRESS OF CURRENTLY OPEN REGISTER 5DOT: .WORD 0 ;ADDRESS OF LAST EXPLICITLY OPENED CELL+BW: .WORD 0 ;LAST OPEN MODE 1=BYTE, 2=WORDU;OPN: .WORD 0 ;LOCATION OPEN FLAG 0=NOT OPEN, NON-ZERO=OPEN,&D.ARGS: .WORD 0 ;SEMI COLON PUSH WORD;U>; THE FOLLOWING ITEMS NEED NOT BE KEPT FROM COMMAND TO COMMAND/; THEIR ORDER IS INTENTIONAL SO KNOW THY MAKER!; )OP: .BYTE 0 ;CURRENT ARITHMETIC OPERA00lmmlkTADATADATADATADATADATATORP"SMFD: .BYTE 0 ;SEMI-COLON COUNTER EXP: .WORD 0 ;EXPRESSION BUCKET0OUTB: .WORD TPB ;CONSOLE PRINTER BUFFER ADDRESS1OUTS: .WORD TPS ;CONSOLE PRINTER STATUS REGISTERE'PPC: .BLKW 1 ;SAVED PC LAST BREAKPOINTT .IF DF M$$PRO4STENB: .BLKW 1 ;USED TO REENABLE SANITY TIMER IF IT% ;WAS ENABLED WHEN XDT WAS ENTEREDL .ENDC% .IF DF C$$XDJ ;XDT SUPPORTED ON KXJ /KXJNOT: .WORD 0 ;EQ 1 IF HOST IN ATTACHED MODEN! ;EQ 0 IF HOST IN NOT ATTACHEDP .ENDC ; C$$XDJ ;M;; THE FOLLOWING ITEMS MUST BE KEPT FROM COMMAND TO COMMAND.D; T: .BYTE 0 ;T BIT IN USE FLAG P: .BYTE -1 ;PROCEED ALLOW FLAG9S: .BYTE 0 ;SINGLE INSTRUCTION MODE, 0=NORMAL, >0=ENABLE.:FM: .BYTE 2 ;OUTPUT FORMAT MODE, BYTE, WORD, ANSII, RAD50-OBW: .BYTE 2 ;OPEN CELL TYPE, 1=BYTE, 2=WORD )SEQ: .BYTE 0 ;CHANGE SEQUENCE INDICATIOR .IF DF K$$DAS ;DMODE: .BYTE 'D,40 ;MODE FLAG (I OR D) AND SPACE CHARACTERT6REGFL: .BYTE 0 ;REGISTER BEING DISPLAYED FLAG (1=YES))REGSV: .BYTE 0 ;SAVED REGFL FOR CHAININGT  .ENDC .EVEN; 5; THE BELOW LOCATION IS USED IN BREAKPOINT PROCESSING.;E TRTC: BPT ;TRACE TRAP PROTOTYPE;N8; ALL XDT TYPE ERRORS JUST GO TO "ERR" OR SOMEWHERE ELSE;PSSTXDT: + ERR ;0-ODD ADDRESS + ERR ;1-SEGMENT FAULT % + ERR ;2-BPT OR T-BIT ("MCR" CALL)0 + DCD ;3-IOT ("DECODE")+ + ERR ;4-RESERVED OR ILLEGAL INSTRUCTION0 + ERR ;5-EMT ("ERROR")P + TYPE ;6-TRAPF;Y; SST VECTOR ADDRESS TABLE; SSTADR: .WORD 4 ;ODD ADDRESSV .WORD 250 ;SEGMENT FAULT .WORD 14 ;BPTN .WORD 20 ;IOTO .WORD 10 ;ILLEGAL INSTRUCTIONP .WORD 30 ;EMT .WORD 34 ;TRAP;P+; INTERNAL REGISTER NAME AND CONTROL TABLES ;"; NON-INDEXED REGISTER NAMES;X:NIXMAP: .ASCII /01234567/ ;USER REGISTER NAMES FOR MAPPING"NIXREG: .BYTE 'S ;UST USER STATUS .BYTE 'A ;ARG ARGUMENT .BYTE 'L ;LOW LOW SCAN LIMIT .BYTE 'H ;HI HIGH SCAN LIMIT .BYTE 'C ;CNST CONSTANT .BYTE 'Q ;QUAN QUANTITYT .BYTE 'F ;FORM FORMAT CONTROL  .BYTE 0 ;END OF THIS LISTT;T; INDEXED REGISTER NAMES; &INXREG: .BYTE 'B ;ADR1 BKPT ADDRESSES" .BYTE 'G ;CT BKPT PROCEED COUNTS& .BYTE 'I ;UIN BKPT USER INSTRUCTIONS% .BYTE 'R ;RELT RELOCATION REGISTERSN .BYTE 0 ;END OF THIS LIST1;7; INDEXED REGISTER TABLE BASES; .EVEN'INXTBL: .WORD ADR1 ;BKPT ADDRESS TABLER .WORD CT ;BKPT PROCEED COUNTSC .WORD UIN ;BKPT'D INSTRUCTIONN .WORD RELT ;RELOCATION TABLES6 .WORD INTEND+2 ;END OF TABLE AREA FOR ADDRESS MAPPING; ; CHARACTER CONVERSION LISTS.;T3ALTTAB: .BYTE 033,175,176 ;ALTERNATE ALT-MODE FORMSR .BYTE 0 ;END OF THIS LIST TOOB;R"; COMMAND NAME AND DISPATCH TABLES; (COMTAB: ;ADDRESS OF THE CHARACTER TABLE;R6; OPEN REGISTER COMMANDS (ORDER AND POSITION CRITICAL);T .BYTE '\,'/,'','",'%;L; CLOSE REGISTER COMMANDS ;L .BYTE 015,012,'^,'_,'@,'>,' CLOSE, NO SUCESSIVE OPEN% .WORD CLLNFD ; CLOSE, OPEN NEXT/& .WORD CLUPAR ;^ CLOSE, OPEN PREVIOUS. .WORD CLBACK ;_ CLOSE, OPEN PC RELATIVE MODE& .WORD CLATSG ;@ CLOSE, OPEN INDIRECT1 .WORD CLGRTH ;> CLOSE, OPEN PC OFFSET AS BRANCHE* .WORD CLLSTH ;< CLOSE, OPEN OLD SEQUENCE;C; SPECIAL FORMSO;R+ .WORD REGT ;$ INTERNAL REGISTER REFERENCEA* .WORD EQUALS ;= PRINT LEFT SIDE IN OCTAL, .WORD CHRCEE ;C CONSTANT REGISTER CONTENTS, .WORD CHRQUE ;Q QUANTITY REGISTER CONTENTS0 .WORD C00lm0mal8blHRDOT ;. LAST OPENED LOCATION'S ADDRESS;L ; OPERATORSN;X+ .WORD SEMI ;; MULTIPLE ARGUMENT DELIMITERO .WORD MINS ;- SUBTRACTIONR .WORD PLUS ;+ .WORD ADDITION .WORD STAR ;* MULTIPLY BY 50" .WORD COMM ;, RELOCATION COMPUTE; ; COMMANDS;;' .WORD SEBK ;B SET / CLEAR BREAKPOINTS ! .WORD GOTO ;G GO TO USER'S DATAN0 .WORD KILO ;K KOMPUTE AND TYPE RELOCATION DATA/ .WORD LIST ;L LIST MEMORY ON SPECIFIED DEVICES( .WORD OFST ;O TYPE PC RELATIVE OFFSETS' .WORD PROC ;P PROCEED FROM BREAKPOINTO0 .WORD RELO ;R SET / RESET RELOCATION REGISTERS, .WORD SNGL ;S SET / RESET SINGLE STEP MODE% .WORD EXIT ;X EXIT TO CRASH ROUTINEP   .IF DF K$$DAS- .WORD INSTM ;I SWITCH TO INSTR DISPLAY MODEE, .WORD DATAM ;D SWITCH TO DATA DISPLAY MODE .ENDC E .SBTTL INITIALIZATION;+&; **-$XDT - RSX-11M-PLUS EXECUTIVE ODT;- .ENABL LSB :$XDT:: MOV #PR7,PS ;LOCK OUT INTERRUPTS, CURR=PREV=KERNEL& MOV SP,USP ;SAVE ENTRY STACK POINTER, MOV #USP,SP ;SET NEW STACK POINTER ADDRESS( MOV R5,-(SP) ;SAVE REGISTERS R5 THRU R0 MOV R4,-(SP) ; MOV R3,-(SP) ;E MOV R2,-(SP) ;S MOV R1,-(SP) ;E MOV R0,-(SP) ;R! MOV PC,SP ;CHANGE STACK POINTERS3 MOV #SSTADR,R0 ;POINT TO TRAP VECTOR ADDRESS TABLE./ MOV #SSTXDT,R1 ;POINT TO XDT TRAP VECTOR TABLEN710$: MOV (R1)+,@(R0)+ ;INSERT XDT TRAP VECTOR ADDRESSESL! CMP R1,#SSTADR ;ANY MORE TO SET?  BLO 10$ ;IF LO YES C U .IF DF M$$PRO P' CMP #$INITL,UPC ;SYSTEM BOOTED BEFORE?K/ BEQ 20$ ;NO, ALWAYS PROMPT (CANNOT USE $XDTFLD) ;OR $XDTPR BECAUSE D-SPACE NOT SET UP $ ;IF THIS IS AN I/D SPACE SYSTEM 0 BIS $CPBIT,$XDTFL ;SHOW THIS CPU AS INITIALIZED' BIT $CPBIT,$XDTPR ;WANT AN XDT PROMPT? BNE 20$ ;YES& JMP LEAVE ;NO, JUST RETURN TO CALLER # 20$: ;P T .IF DF K$$DAS/ CALL SETRW ;SET I-SPACE DESCRIPTOR REGS TO RWV O .ENDC E  .ENDC T  MOV PC,SP ;LENGTHEN STACK 7 TYPE CRLF ;PLACE TERMINAL CARRIAGE IN PROPER POSITION;$ TYPE 'X ;OUTPUT XDT IDENTIFICATION TYPE 'D ;T TYPE 'T ;$ TYPE ': ;O TYPE 40 ;U) MOV $SYSID,R0 ;GET SYSTEM IDENTIFICATIONI* TYPE R0+R0 ;OUTPUT SYSTEM IDENTIFICATION3 MOV $SYSID+2,R0 ;GET SECOND HALF OF IDENTIFICATIOND TYPE R0+R0 ;OUPUT IT, TOO !P7 TYPE CRLF ;PLACE TERMINAL CARRIAGE IN PROPER POSITION. DECODE ;GET FIRST COMMAND*XDTSTK: ;REF LABEL - START OF XDT STACK .DSABL LSBC .IF DF M$$PRO,$XDTIN:: ;INITIALIZE XDT FOR THIS PROCESSO7 BIT $CPBIT,$XDTFL ;THIS PROCESSOR ALREADY INITIALIZED?I BEQ 10$ ;NO RETURN ; 710$: MOV (SP)+,UPC ;RETURN TO CALLER WHEN DONE WITH XDTY BR $XDT ;C O .ENDC 0; .SBTTL "$," PROCESSOR - INTERNAL REGISTER MAPPERO ;SYNTAX--E";$L DELIVER INTERNAL ADDRESS OF L&;$NL DELIVER INTERNAL ADDRESS OF L+2N0;$N DELIVER INTERNAL ADDRESS OF USER REGISTER N&;SEE MAPPING TABLES, RANGE OF N IS 0-7(REGT: JSR PC,GETNUM ;GET AN OCTAL NUMBER JSR PC,RTST ;CHECK FOR ERROR% BCC 5$ ;R4 HAS BEEN MULTIPLIED BY 4H 3$: ERROR ;R"5$: TST R2 ;SEE IF ANYTHING TYPED, BNE 10$ ;IF SO IS INDEXED OR USER REGISTER" JSR R5,LOOKUP ;SEE IF NON-INDEXED + NIXREG+ BCS 12$ ;NON-INDEXED TURNS INTO A COMMANDT, MOV R1,R4 ;PLACE IN LIST IS INTERNAL ORDER1 ADD #UST,R4 ;GET ADDRESS IN R4, GOTTA READ CHARA BR 20$ "10$: JSR R5,LOOKUP ;SEE IF INDEXED + INXREG BCC 15$ ;WAS TRULY INDEXED512$: CMP #7+7,R4 ;INTERNAL USER REGISTER RANGE CHECK  BLO 3$J. ADD #UR0,R4 ;SET ACCESS TO R0-R7 OF THE USER" BR 25$ ;AVOID READING OF COMMAND815$: ADD INXTBL(R1),R4 ;COMPUTE ADDRESS TO INDEXED TABLE,20$: JSR PC,GET ;GET THE ASSUMED TERMINATOR.25$: INC R2 ;SHOW THEM THAT R4 GOT VALID DATA T S .IF DF K$$DAS  V( INCB REGFL ;SET FLAG FOR REGISTER OPEN .ENDC, JMP CLGL ;RE-USE CHARACTER, R2 IS NON-ZERO 04 .SBTTL "K" PROCESSOR - COMPUTE AND PRINT RELOCATION ;SYNTAX--I);AK TYPE RELOCATION DEAL FROM DOT TO AG);L;AK TYPE RELOCATION DEAL FROM L TO A /;IF A IS NULL THE THE OLD BEST FIT RULE APPLIESE3;TYPES =N,DDDDDD WHERE N IS THE RELOCATION REGISTERR#; AND D-D IS 00lmmlkTADATADATADATADATADATATHE RELOCATION BIAS )KILO: TST R2 ;SEE WHO PICKS THE REGISTERH BNE 10$ TST R3 ; ADDRESS SPECIFIED?. BNE 5$ ; YES& MOV CAD,R4 ; NO, GET CURRENT ADDRESS BR 7$ ;N15$: MOV R5,R4 ; GET ADDRESS SPECIFIED ON COMMANDO27$: JSR PC,LOCA ; GET CLOSEST RELOCATION REGISTER/ MOV R0,R4 ;DID WE FIND A RELOCATION REGISTER? $ BMI ERR ;CAN'T FIND ONE THATS GOOD"10$: BIC #177770,R4 ;EDIT REGISTER TYPE '= ;OUTPUT CUER TYPE 40 ;! MOVB R4,R0 ;TYPE REGISTER & A ,O ADD #"0,,R0 TYPE R0+R0 ;" ASL R4 ;GO GET IT AS TABLE INDEX# TST R3 ;SEE WHO TYPED THE ADDRESSB BNE 15$ MOV CAD,R5 ;THAT CAD!D15$: SUB RELT(R4),R5 MOV R5,R0 ;BIAS COMPUTET JSR PC,CADW ;PRINT AS WORD DECODEG A+ .SBTTL "A-Q-." PROCESSORS - SPECIAL VALUES E;MERELY SUBSTITUTE THE VALUE IN R4 WITH THE CONTENTS OF THE SPECIFIED ;REGISTER.+CHRQUE: MOV QUAN,R4 ;LAST QUANTITY PRINTED# BR CHR001'CHRCEE: MOV CNST,R4 ;CONSTANT REGISTERP BR CHR001%CHRDOT: MOV CAD,R4 ;CURRENT LOCATION#$CHR001: INC R2 ;ALLOW AS R4 IS REAL+ JSR PC,GET ;GET NEXT CHARACTER AND ASSUME  BR CLGL ;IT IS A TERMINATORD , .SBTTL COMMAND DECODER AND MAIN LOOP OF ODT; COMMAND DECODER - ODTA%; ALL REGISTERS MAY BE USED (R0-R5), );ERROR ENTRY, TYPE FLAG AND GO DO COMMANDL(ERR: CALL SETCN ;SET OUTPUT FOR CONSOLE" TYPE '? ;OUTPUT ERROR INDICATION;E/; DECODE FROM THE TOP, CLOSE ALL AND DO CR/LF/_1;H-DCD: MOV #XDTSTK,SP ;SET THE STACK FOR SANITY1$ CALL SETCN ;SET OUTPUT FOR CONSOLE7 TYPE CRLF ;PLACE TERMINAL CARRIAGE IN PROPER POSITIONE CLR OPN ;SET NO LOCATION OPEN  L .IF DF K$$DAS D& CLRB REGFL ;CLEAR REGISTER OPEN FLAG .ENDC $ TYPE 'X ;OUTPUT INPUT SOLICITATION TYPE 'D ;S TYPE 'T ; TYPE 76 ;'>'(;MAINTAIN OPENED LOCATION, RE-INIT INPUT-NEWC: CLRB SMFD ;CLEAR SEMI-COLON FLAG/COUNTR& CLR R3 ;ZERO SECONDARY ARGUMENT FLAG CLR R5 ;AND ARGUMENT;NEW SUB-EXPRESSION ENTRYK$NEWE: CLRB OP ;CLEAR OPERATOR FOUND1 CLR EXP ;SET ZERO IN EXPRESSION SO FAR LOCATIONR%;GET NUMBER AND THEN SCAN FOR COMMANDO7NEWN: JSR PC,GETNUM ;GET AN OCTAL NUMBER AND TERMINATOR (;NON-OCTAL CHAR TYPED WHAT ARE WE TO DO?)CLGL: JSR R5,LOOKUP ;GO SEE IF IT IS REALT + COMTAB ;THIS DEFINES REAL" BCS ERR ;EASY ENOUGH IF NOT REAL$ TST R2 ;IF NOTHING TYPE BOTHER NOT BEQ CL01 ;WITH THE EXPRESSIONR" JSR PC,EXPCOM ;COMPUTE EXPRESSION+CL01: JMP @COMDIS(R1) ;GO TO PROPER ROUTINE -;FOR THE BENEFIT ALL REGISTERS ARE AS FOLLOWSC-;R0 LAST CHARACTER TYPED, THE COMMAND ITSELF!1;R1 TABLE INDEX TO COMMAND ADDRESSES, IT IS USED.S/;R2,R4 FIRST ARGUMENT, IF R2<>0 THEN R4 IS DATA0;R3,R5 SECOND ARGUMENT, IF R3<>0 THEN R5 IS DATA; '; SET OUTPUT DEVICE TO CONSOLE TERMINALT; /SETCN: MOV #TPB,OUTB ;SET OUTPUT BUFFER ADDRESSE) MOV #TPS,OUTS ;SET OUTPUT STATUS ADDRESSB RETURN ;H E@ .SBTTL "\-/-'-"-%-:" PROCESSOR - OPEN AND TYPE CONTENT COMMANDS ;SYNTAX--P.;NC OPEN LOC N IN MODE C, SET MODE FOR NEXT$;C TYPE LAST OPENED LOC IN MODE COCWORD: ;OCTAL WORD - R1=2ANWORD: ;ANSII WORD - R1=6MODULO: ;RADIX 50 WORD - R1=10A/;OPEN WORD MODE ENTRY, R1 CONTAINS FORMAT INDEXR' MOV #2,R0 ;SET BYTE FLAG TO WORD FLAGE BR OPE004 ;GO TO IT ACE HOLEOCBYTE: ;OCTAL BYTE - R1=0ANBYTE: ;ANSII BYTE - R1=4.OPE001: MOV #1,R0 ;SET WORD FLAG TO BYTE FLAG.OPE004: TST R2 ;IF NO VALUE TYPED NO MODE SET BEQ 10$& MOV R0,BW ;SET MODE AND FORMAT FLAGS% MOVB R0,OBW ;SET THE LATER USE MODE) MOVB R1,FM ;SET THE MODE FLAG FOR SOOTHO+ MOV R4,CAD ;SET ADDRESS FOR EXPLICIT OPEND MOV R4,DOT ;RESET RETURN PTR.  1 A .IF DF K$$DAS' MOVB REGFL,REGSV ;INIT REGFL SAVE BYTEV , .ENDC T L#10$: CMP #1,R0 ;CHECK ON BYTE MODEI BEQ 15$ ;NOT BYTE MODE# BIT #1,CAD ;SEE IF ADDRESS IS ODDE BEQ 15$ ;ALL IS GOOD! CLR R1 ;THEY GET BYTE MODE ONLY BR OPE001%15$: MOV R1,-(SP) ;SAVE FORMAT MAINLYB JSR PC,GETCAD ;GET THE DATA MOV (SP)+,R1 ;GET FORMATO0 JSR PC,@TYFORM(R1) ;PRINT DATA IN PROPER FORMAT% BR NEWC ;GO GETTA NEW COMMAND TO DOE D00lm0mal8blB .SBTTL "-->-<-^-_-@" PROCESSOR - CLOSE AND OPEN REGISTERS F;CARRIAGE RETURN%CLCRET: JSR PC,PUTCAD ;CLOSE LOCATION DECODE ;RETURN TO DECODER;LESS THAN, BACK TO MAIN STREAMN0CLLSTH: INCB SEQ ;SET FLAG TO LATER RESTORE CAD;LINE FEED, NEXT ONE DOWNR)CLLNFD: JSR PC,PUTCAD ;CLOSE PRESENT CELL:# TSTB SEQ ;SHOULD CAD BE RESTORED?J BEQ OP5 ;BRANCH IF NOT( MOV DOT,CAD ;RESTORE PREVIOUS SEQUENCE .IF DF K$$DAS N( MOVB REGSV,REGFL ;RESTORE REGISTER FLAG .ENDC( CLRB SEQ ;RESET FLAG; NO LONGER NEEDED BR OP2A ;P&OP5: ADD BW,CAD ;GENERATE NEW ADDRESS,OP2: ;MOV CAD,DOT ;INITIALIZE DOT (REMOVED)3OP2A: TYPE CRLF ;PLACE CARRIAGE IN PROPER POSITIONA MOV CAD,R0 ;NUMBER TO TYPE JSR PC,RORA ; CHECK FORMAT MOVB FM,R0 ;SET FORMAT ASR R0 ;SPLIT R0 IN HALF) MOVB COMTAB(R0),R0 ;SET SUFFIX CHARACTER  TYPE R0 ;PRINT CHARACTER MOV CAD,R4 ;SET UP THE DATAE! CLR R2 ; SET TO USE CAD ADDRESSD CLRB OP ;THIS IS BECUZER CLR EXP- JMP CLGL ;R0 HAS TERMIN, R4- DATA, R2= FLAGG;UP ARROW, NEXT ONE UPCLUPAR: JSR PC,PUTCAD;" SUB BW,CAD ;GENERATE NEW ADDRESS BR OP2 ;GO DO THE REST ;BACK ARROW, PC RELATIVE COMPUTE.CLBACK: JSR PC,TCLS ;TEST WORD MODE AND CLOSE ADD R4,R2 ;COMPUTE CMPB (R2)+,(R2)+ ;NEW ADDRESSPCS: MOV R2,CAD ;UPDATE CAD BR OP2A ;GO FINISH UPS$;AT SIGN, ABSOLUTE OR INDIRECT CHAIN.CLATSG: JSR PC,TCLS ;TEST WORD MODE AND CLOSE! MOV R4,R2 ;GET ABSOLUTE ADDRESSP BR PCSS';GREATER THAN, PC OFFSET BRANCH ADDRESSI$CLGRTH: JSR PC,TCLS ;TEST AND CLOSE. MOVB R4,R1 ;COMPUTE NEW ADDRESS, EXTEND SIGN ASL R1 ;R2=2@R2) ADD #2,R1 ;+2D ADD R1,R2 ; +PCR BR PCSE ;HANDY DANDY TO DO SOME LEG WORK'TCLS: JSR PC,PUTCAD ;CLOSE CURRENT CELLC# CMP #2,BW ;ONLY WORD MODE ALLOWEDS BNE ERR1 ;BRANCH IF ERRORD# MOV CAD,R2 ;CURRENT ADDRESS IN R2N# MOV R2,DOT ;MARK CURRENT POSITIONG S C .IF DF K$$DAS % MOVB REGFL,REGSV ;SAVE REGISTER FLAG & CLRB REGFL ;CLEAR OPEN REGISTER FLAG .ENDC RTS PC L1 .SBTTL "O" PROCESSOR - COMPUTE AND PRINT OFFSETSO ;SYNTAX--R;AO TYPE OFFSETS FROM . TO AR!;L;AO TYPE OFFSETS FROM L TO A 1;TYPES _PPPPPP >DDDDDD WHERE P-P IS PC RELATIVE; AND D-D IS BRANCH OFFSET&OFST: TST R3 ;HOW ABOUT A VALUE OTHER BNE 10$ ;THAN CADR MOV CAD,R5 ;RELUCTANTLY 10$: SUB R5,R40 SUB #2,R4 ;NO TRICKS, ODD AND NON-EXIST THINGS TYPE '_ ;TYPE PC RELATIVE CUEE TYPE 40 ;V MOV R4,R0% MOV R4,-(SP) ;GOOD IDEA TO SAVE THIS ! JSR PC,CADW ;TYPE VALUE + BLANK.! TYPE 76 ;TYPE OFFSET BRANCH CUER MOV (SP)+,R0 ASR R0 ;DIVIDE6OF09: JSR PC,CADW ;16 BITS SO YOU CAN SEE HOW FAR OFF DECODE ; GET NEXT COMMAND @ .SBTTL "=" PROCESSOR - PRINT LEFT SIDE EXPRESSION ON RIGHT SIDE2EQUALS: MOV R4,R0 ;PROPER PRIOR PLANNING PREVENTS BR OF09 ;POOR PERFORMANCE ;JUST ANOTHER ERROR CALL ERR1: ERRORD N) .SBTTL SST INTERRUPT VECTOR ENTRY POINTST;U*; SEGMENT FAULT - V1 - "MP" - NO PROCEED;O)SGMT: TESTM $SGFLT ;TEST IF IN EXEC MODEU' BIC #160000,SR0 ;UNFREEZE SEGMENT UNIT  MOV #"MP,EXP ;ENTRY PREFIX BR NIXP ;9; *; STACK OVERFLOW - - "SO" - NO PROCEED(; ODD ADDRESS - V0 - "OD" - NO PROCEED$; BPT - V2 - "BE" - SPECIAL CASES ; T-BIT - V2 - "TE" - PROCEED; IOT - V3 - "IO" - PROCEED/; RESERVED OR ILLEGAL - V4 - "IL" - NO PROCEEDN;E)ODDA: MOV #"SO,EXP ;ASSUME STACK OVERFLOW " CMP SP,#V$$CTR+4 ;STACK OVERFLOW? BLO NIXP ;IF LO YES1$ TESTM $TRP04 ;TEST IF IN EXEC MODE MOV #"OD,EXP ;"OD:" FOR ODD ONE BR NIXP ;NIX ON PROCEEDS)BPTI: TESTM $TRACE ;TEST IF IN EXEC MODE* MOV #"BE,EXP ;"BE:" FOR MAYBE A BAD ENTRY CLRB P ;ALLOW PROCEED DEAL& BR INTR ;SPECIAL NUMBER FOR THIS ONE)IOTX: TESTM $IOTRP ;TEST IF IN EXEC MODEV MOV #"IO,EXP ;"IO:" FOR IOTEE BR ALOP ;ALLOW PROCEED)ILLI: TESTM $ILINS ;TEST IF IN EXEC MODE( MOV #"IL,EXP ;"IL:" FOR ILL INSTRUCTIONNIXP: MOVB #-1,P ;NO PROCEEDK BR INTR ;B;X; EMT - V5 - "EM" - PROCEED"; TRAP - V6 - "TR" - NO PROCEED;D)NEMT: 00lmmlkTADATADATADATADATADATATESTM $EMTRP ;TEST IF IN EXEC MODEP MOV #"EM,EXP ;"EM:" FOR EMTEE#ALOP: MOVB #BKP+2,P ;ALLOW PROCEED Y;B); COMMON INTERRUPT SERVICE AND DISPATCHER ;R3INTR: BIT #TBT,2(SP) ;T-BIT SET IN STACKED PS WORD?S BEQ 1$ ;IF EQ NO( CMP PPC,(SP) ;PC CHANGE FROM LAST TRAP? BNE 1$ ;IF NE YES , JMP RTN ;MUST HAVE HAD AN INTERRUPT BEFORE$ ;THE INSTRUCTION HAD A CHANCE TO$ ;EXECUTE. AN INTERRUPT SERVICE  ;ROUTINE EXITS WITH AN RTI.P(1$: MOV (SP)+,UPC ;SET THE USER PC VALUE$ MOV (SP)+,UST ;AND HIS ENTRY STATUS! MOV R0,UR0 ;SAVE EXEC REGISTERSF+ MOV #UR0+2,R0 ;POINT TO REGISTER SAVE AREAY( MOV R1,(R0)+ ;SAVE REGISTERS R1 THRU SP MOV R2,(R0)+ ;N MOV R3,(R0)+ ;) MOV R4,(R0)+ ;A MOV R5,(R0)+ ;B MOV SP,(R0)+ ;& MOV #XDTSTK,SP ;SET XDT STACK POINTER B 1 .IF DF M$$PRO J R/ CLR -(SP) ;ASSUME SANITY TIMER IS NOT ENABLEDI6 BIT $CPBIT,$STENB ;SANITY TIMER ENABLED FOR THIS CPU? BEQ 3$ ;NO BIS $CPBIT,(SP) ;SAVE CPU BIT, BIC (SP),$STENB ;WANT SANITY TIMER DISABLED CALL $STTIC ; 63$: MOV (SP)+,STENB ;SAVE POLARITY OF SANITY TIMER BIT + .ENDC3 MOV #SSTADR,R0 ;POINT TO TRAP VECTOR ADDRESS TABLE / MOV #SSTXDT,R1 ;POINT TO XDT TRAP VECTOR TABLEM0 MOV #SSTVEC,R2 ;POINT TO TABLE OF TRAP CONTENTS35$: MOV @(R0),(R2)+ ;SAVE THE CURRENT TRAP CONTENTSF1 MOV (R1)+,@(R0)+ ;SET XDT TRAP VECTOR ADDRESSES I! CMP R1,#SSTADR ;ANY MORE TO SET?; BLO 5$ ;IF LO YESF .IF DF K$$DAS ;/ CALL SETRW ;SET KERNEL INSTRUCTION DESCRIPTORE ;REGISTERS TO READ/WRITE .ENDC C;TRY AND FIND OUT WHAT TO DO& TSTB P ;SEE IF CONTROLLED BREAKPOINT) BNE 10$ ;NOT DUE TO A PLANNED INTERRUPTD- TSTB T ;IS A BPT OR T-BIT, SEE IF A PROCEEDP/ BNE TBIT ;COMMAND IS BEING DONE, GO FINISH ITF+ TSTB S ;NO REMOVAL OF BREAKS ON S.I. MODE  BNE 12$ ;SKIP NEXT TWO WORDS;R; REMOVE EXEC BREAKPOINTSD;S-10$: MOV #ADR1,R4 ;POINT TO BREAKPOINT VECTOR  F  .IF DF K$$DAS  D211$: MOV UIN-ADR1(R4),-(SP) ;PUSH CORRECT CONTENTS( MTPI @(R4)+ ;REINSERT CORRECT CONTENTS .IFF711$: MOV UIN-ADR1(R4),@(R4)+ ;REINSERT CORRECT CONTENTS  .ENDC' CMP #ADR1+BKP,R4 ;ANY LEFT TO RESTORE? BHIS 11$ ;IF HIS YES312$: MOV UPC,R5 ;GET A COPY OF THE PC AT INTERRUPTD# TSTB P ;BREAKPOINT OR T-BIT CHECKV& BNE 30$ ;DEFINITELY NOT A BREAKPOINT# MOVB S,R4 ;SEE IF SINGLE STEPPINGE BNE 22$ ;AND PRETEND.;AT THIS POINT IT MAY BE DUE TO T-BIT OR A BPT) MOVB #BKP+2,P ;SET ALLOW TO THE 8'TH ONE4 ( .IF DF K$$DAS T2 MFPI -(R5) ;GET TRAPPED INSTRUCTION FROM I-SPACE CMP (SP)+,TRTC ;IS IT A BPT?( .IFFN T- CMP -(R5),TRTC ;BACK-UP R5 AND SEE WHAT'S UPP .ENDC O! BEQ 30$ ;IT WAS A NON-BREAK BPT* MOV #BKP,R4 ;SET ADDRESS OF LEGIT BREAKS-15$: CMP R5,ADR1(R4) ;LOOK IT UP IN THE TABLE( BEQ 20$ ;FOUND THE NASTY LITTLE BUGGER SUB #2,R4 ;KEEP AT ITS BGE 15$ ;UNLESS NO MOREE- MOV #"TE,R4 ;NOT THERE, MUST BE T-BIT ERRORR& TST (R5)+ ;RESET PC TO MAKE IT RIGHT BR 26$ ;LABOR+20$: MOV R5,UPC ;BACK-UP PC FOR BREAKPOINTE)22$: MOVB R4,P ;BREAKPOINT IS A REAL ONE ) DEC CT(R4) ;CHECK OUT THE PROCEED COUNTT$ BNE 31$ ;LABOR ON A MIS-CONCEPTION! INC CT(R4) ;RESET PROCEED COUNT-" ASR R4 ;OCTAL TO UN-BIASED ASCII ADD #"0B,R4 ;BIAS TO ASCII#26$: MOV R4,EXP ;SET THE PREFIX UP,;COMMON TYPE ROUTINE FOR SST VECTORS USED UP230$: TYPE CRLF ;PLACE CARRIAGE IN PROPER POSITION MOV EXP,R0 ;THE PREFIX TYPE R0+R0 ; TYPE ': ;R& MOV R5,R0 ;TYPE ADDRESS OF INTERRUPT( JSR PC,RORA ;AND THE REST OF THE ENTRY DECODE2 31$: JMP C990 ;BRANCH STRETCHER N; .SBTTL "G, S, P" PROCESSORS - GO, SINGLE STEP, AND PROCEEDB;O; "G" PROCESSOR - GO TO PROGRAM; ;SYNTAX--E!;LG START PROGRAM AT LOCATION LS ;G START PROGRAM AT CURRENT PC&GOTO: TST R2 ;SEE IF SPECIFIC ADDRESS BEQ 10$ ;NOE MOV R4,UPC ;SET THE PC$10$: CLRB S ;NO SINGLE INSTRUCTIONS TBIT: CLRB T ;CLEAR T-BIT FLAGS BIS #TBT,UST ;BOTH $ TSTB S ;SEE IF WE NEED A T-BIT BIT BNE GRTT ;NO GO ON BIC #TBT,UST ;SET THE TEE BIT;E; SET EXEC BREAKPOINTS;C00lm0mal8bl-10$: MOV #ADR1,R4 ;POINT TO BREAKPOINT VECTORC S .IF DF K$$DAS P N+20$: MFPI @(R4) ;SAVE CONTENTS OF LOCATIONA MOV (SP),UIN-ADR1(R4) ;+ MOV TRTC,(SP) ;PUSH BREAKPOINT INSTRUCTIONA) MTPI @(R4)+ ;SET BREAKPOINT INSTRUCTIONF A .IFF  Q620$: MOV @(R4),UIN-ADR1(R4) ;SAVE CONTENTS OF LOCATION MOV TRTC,@(R4)+ ;SET BREAKPOINT .ENDC F .IF DF M$$PRO BIT #1,SR0 ;MAPPING ENABLEDE) BEQ 24$ ;IF EQ NO, CAN'T GET TO LOWCR'S# .IF DF K$$DAS& BIT #4,SR3 ;KERNEL D-SPACE ENABLED ?) BEQ 24$ ;IF EQ NO, CAN'T GET TO LOWCR'SC .ENDC ; DF K$$DAS, MOV KISAR6,-(SP) ;SAVE CURRENT EXEC MAPPING% MOV R0,-(SP) ;AND A SCRATCH REGISTERV; MOV UIN-ADR1(R4),-(SP) ;FETCH USER INSTRUCTION FOR UPDATESB( MOVB $NCPU,R0 ;GET NUMBER OF PROCESSORS# ASL R0 ;AND CONVERT TO WORD INDEXN121$: MOV $K6TAB-2(R0),KISAR6 ;REMAP TO NEXT LOWCR0 MOV (SP),140000+UIN-ADR1(R4) ;STUFF INSTRUCTION# SUB #2,R0 ;POINT BACK TO NEXT CPUT BGT 21$ ;IF GT THERE IS ONED# TST (SP)+ ;GET RID OF INSTRUCTIONA' MOV (SP)+,R0 ;RESTORE SCRATCH REGISTER / MOV (SP)+,KISAR6 ;RESTORE CURRENT EXEC MAPPINGP24$: .ENDC ; DF M$$PRO& CMP #ADR1+BKP,R4 ;ANY MORE TO INSERT? BHIS 20$ ;IF HIS YES TGRTT:  T .IF DF K$$DAS " BIT #1,SR0 ;MAPPING ENABLED YET? BEQ LEAVE ;IF EQ NOV, BIT #4,SR3 ;KERNEL DATA SPACE ENABLED YET? BEQ LEAVE ;IF EQ NO2 MOV #KINDR0,R0 ;POINT TO KERNEL INSTR DESCR REG 0)25$: BIC #4,(R0)+ ;SET RO ACCESS FOR EXEC2 CMP R0,#KINDR7 ;DONE YET? BLOS 25$ ;IF LOS NON U .ENDC ()LEAVE: CLR OPN ;CLEAR LOCATION OPEN FLAGP3 MOV #SSTADR,R0 ;POINT TO TRAP VECTOR ADDRESS TABLEN0 MOV #SSTVEC,R1 ;POINT TO EXEC TRAP VECTOR TABLE,30$: MOV (R1)+,@(R0)+ ;SET EXEC TRAP VECTORS1 CMP R0,#SSTADR+ ;ANY MORE TO SET?E BLO 30$ ;IF LO YES Q .IF DF M$$PRO ; N/ BIS STENB,$STENB ;POSSIBLY ENABLE SANITY TIMER M .ENDC R% .IF DF C$$XDJ ;XDT SUPPORTED ON KXJ5) BIT #4,SR3 ;IS KERNEL D SPACE ENABLED?P9 BEQ 40$ ;IF EQ NO, THIS MUST BE VIRGIN BOOT NOT ON KXJ! BIT #F5.XDJ,$FMSK5 ;XDT ON KXJ?O BEQ 40$ ;IF EQ NOS, TST KXJNOT ;HAS HOST BEEN NOTIFIED ALREADY BEQ 40$ ;IF EQ YES" MOV $KXPTR,R0 ;GET ADDRESS OF DCB% MOV D.UCB(R0),R0 ;GET ADDRESS OF UCBP% MOV U.SCB(R0),R0 ;GET ADDRESS OF SCBO% MOV S.KRB(R0),R0 ;GET ADDRESS OF KRBF& MOV K.CSR(R0),R0 ;GET ADDRESS OF TPR0& MOV #RI$XDD,TPR2(R0) ;XDT DETACH CODE+ MOV $KXVC1,R1 ;GET ADDRESS OF FIRST VECTOR& ADD #4,R1 ;GET ADDRESS OF XDT VECTOR' MOV R1,@#KXJQIR ;NOTIFY HOST OF DETACHR , CLR KXJNOT ;KEEP TRACK OF DETACH OURSELVES135$: TST TPR2(R0) ;HOST RECEIVED DETACH MESSAGE?T BNE 35$ ;IF NE NOY .ENDC ; C$$XDJY40$: $! MOV #UR0+2,R0 ;POINT TO SAVED R1D3 MOV (R0)+,R1 ;RESTORE REGISTERS R1 THRU SP THEN R0G MOV (R0)+,R2 ;O MOV (R0)+,R3 ;R MOV (R0)+,R4 ;  MOV (R0)+,R5 ;R MOV (R0)+,SP ;S MOV UR0,R0 ; MOV UST,-(SP) ;SET EXEC PS WORD MOV UPC,-(SP) ;SET EXEC PC WORD# MOV (SP),PPC ;SET PREVIOUS PC WORDORTN: RTT ;RETURN TO EXECUTIVEO;H%; "S" PROCESSOR - SINGLE STEP PROCEEDT ;SYNTAX--A+;NS EXECUTE N INSTRUCTIONS AND THEN STOPE;S EXECUTE ONE INSTRUCTIONI$SNGL: MOVB #BKP+2,R0 ;FAKE THE BREAK' MOVB R0,S ;SET THE FLAG FOR S.I. MODEV& BR PR01 ;FAKE A PROCEED IN S.I. MOOD;R); "P" PROCESSOR - PROCEED FROM BREAKPOINTV ;SYNTAX-- +;NP PROCEED THRU THIS BREAKPOINT N TIMES0;P ASSUME N=1PROC: CLRB S ;SET FAST MODE MOVB P,R0 ;GET NUMBER OF BREAK% BMI PR02 ;THERE WASN'T ONE SO FAR ? (PR01: TST R2 ;SEE IF VALUE IN R4 VIA R2, BNE 10$ ;SEE IF AND WHAT SETTING FOR COUNT' MOV #1,R4 ;INIT IT TO ONE FOR A STARTS$10$: MOV R4,CT(R0) ;SET USER'S COUNT/C990: CMPB P,#BKP ;SEE IF A REAL ONE OR A FAKET BGT TBIT ;BRANCH IF FAKE( TSTB S ;SEE IF SINGLE INSTRUCTION MODE BNE TBIT ;IF SO EXIT NOW INCB T ;SET T-BIT FLAG BIS #TBT,UST ;SET T-BIT BR GRTTPR02: ERROR ;ANNOUNCE ERROR C; .SBTTL "L" PROCESSOR - LIST MEMORY ON THE SPECIFIED DEVICEB ;SYNTAX--R4; D;S;FL WHERE D IS DEV, <> OR 0 = CONSOLE, 1 = LPT); S IS START ADDRESS, SETS 00lmmlkTADATADATADATADATADATA$L IF THEREI(; F IS STOP ADDRESS, SETS $H IF THERE)LIST: TST R2 ;SET UPPER AND LOWER LIMITSC BEQ 10$ ;IF SPECIFIED TO DO SO MOV R4,HI10$: TST R3 ;DO THE LOW ONE BEQ 15$ MOV R5,LOWF,15$: CMPB #2,SMFD ;SEE IF AN EXTRA ARGUMENT BNE 17$ ;USE THE CONSOLE" TST D.ARGS ;LOOK AT THE ARGUMENT BEQ 17$ ;DO NOT ARGUEU: MOV #LPS,OUTS ;SET OUTPUT STATUS REGISTER TO LINE PRINTER MOV #LPB,OUTB ; TYPE 14 ;OUTPUT A FORM FEED +17$: MOV LOW,R5 ;GET STARTING DUMP ADDRESS $ MOVB OBW,R0 ;GET ADDRESS INCREMENT. SUB R0,R5 ;BIAS ADDRESS BY ADDRESS INCREMENT! MOV R5,CAD ;SET CURRENT ADDRESS% TST -(SP) ;MAKE A HOLE IN THE STACKR20$: CLR (SP) ;NEW LINE UPW& JSR PC,SNAGIT ;ACCESS DEVICE FOR DATA, JSR PC,SPRINT ;PRINT ADDRESS AND FIRST ITEM!25$: JSR PC,SNAGIT ;GET MORE DATAK# JSR PC,DPRINT ;JUST PRINT THE DATAR INC (SP) ;COUNT THE DATA CMP #7,(SP) ;CHECK THE COUNT) BNE 25$ ;JUST LIKE THEY TOLD YOU AT THE # BR 20$ ;FAMOUS PROGRAMMERS SCHOOLR G$ .SBTTL "X" PROCESSOR - EXIT COMMAND;S; EXIT COMMAND;, ; SYNTAX X;SI; THE EXIT COMMAND IN XDT EFFECTS A JUMP TO THE EXECUTIVE $CRASH ROUTINE.K; EXIT: ;REFERENCE LABEL(% .IF DF C$$XDJ ;XDT SUPPORTED ON KXJS) BIT #4,SR3 ;IS KERNEL D SPACE ENABLED?S9 BEQ 10$ ;IF EQ NO, THIS MUST BE VIRGIN BOOT NOT ON KXJP! BIT #F5.XDJ,$FMSK5 ;XDT ON KXJ?C BEQ 10$ ;IF EQ NOA, TST KXJNOT ;HAS HOST BEEN NOTIFIED ALREADY BEQ 10$ ;IF EQ YES" MOV $KXPTR,R0 ;GET ADDRESS OF DCB% MOV D.UCB(R0),R0 ;GET ADDRESS OF UCBX% MOV U.SCB(R0),R0 ;GET ADDRESS OF SCBY% MOV S.KRB(R0),R0 ;GET ADDRESS OF KRBF& MOV K.CSR(R0),R0 ;GET ADDRESS OF TPR0& MOV #RI$XDD,TPR2(R0) ;XDT DETACH CODE+ MOV $KXVC1,R1 ;GET ADDRESS OF FIRST VECTOR& ADD #4,R1 ;GET ADDRESS OF XDT VECTOR' MOV R1,@#KXJQIR ;NOTIFY HOST OF DETACHR, CLR KXJNOT ;KEEP TRACK OF DETACH OURSELVES135$: TST TPR2(R0) ;HOST RECEIVED DETACH MESSAGE?  BNE 35$ ;IF NE NOR .ENDC ; C$$XDJ 10$: .IF DF C$$CDA! MOV #UR0+2,R0 ;POINT TO SAVED R1R3 MOV (R0)+,R1 ;RESTORE REGISTERS R1 THRU SP THEN R0S MOV (R0)+,R2 ;K MOV (R0)+,R3 ;D MOV (R0)+,R4 ;V MOV (R0)+,R5 ;T MOV (R0)+,SP ; MOV UR0,R0 ;3 MOV UST,$CRUST ; MOVE USER PS FOR THE CRASH MODULEF3 MOV UPC,$CRUPC ; MOVE USER PC FOR THE CRASH MODULER5 JMP $CRALT ; ALTERNATE ENTRY POINT TO THE CRASH MOD  .IFF ; DF C$$CDAH) HALT ;HALT SYSTEM (MOSTLY USED IN P/OS  .ENDC ; DF C$$CDA , .SBTTL UTILITIES - COMMAND SUPPORT ROUTINES);TEST FOR VALID RELOCATION REGISTER IN R4R5RTST: CMP #RLR/2,R4 ;GET A GOOD NUMBER FOR A REGISTERM$ BLO 10$ ;NOT TOO GOOD, QUESTION IT ASL R4 10$: RETURN ; $;SNAG MEMORY LOCATION JSR PC,SNAGIT;NEEDS--3;CAD POINTS TO MEMORY WORD (APPROXIMATELY THAT IS)P0;R0,R5 CONTAINS REAL WORD UPON EXIT TO "SRCHEK"'SNAGIT: MOVB OBW,R0 ;SET THE INCREMENT  ADD R0,CAD ;INCREMENT AND NOW  CMP CAD,HI ;SEE IF MORE TO DO  BLOS 10$ ;IF NOT DO NOT - DECODE ;GO RESET STACK AND NO NEXT COMMAND!10$: JSR PC,GETCAD ;ACCESS METHODE" MOV R0,R5 ;MAKE A COPY FOR LATER RETURN ;R!;SEARCH HIT PRINT JSR PC,SPRINTG$;CAD POINTS TO THE LOC TO BE PRINTED7;R5 CONTAINS THE CONTENTS OF THE LOCATION TO BE PRINTED5SPRINT: TYPE CRLF ;PLACE CARRIAGE IN PROPER POSITION, MOV CAD,R0 ;THE LOCATION JSR PC,RORA ;THE MODET% MOVB FM,R0 ;PICK UP OLD CURENT MODED ASR R0 ;HALVES MOVB COMTAB(R0),R0 ;AH HA! TYPE R0 ;TYPE THE MODE REGISTERT#;DATA PRINT ROUTINE JSR PC,DPRINT ";PRINTS DATA IN R5 IN CURRENT MODE!DPRINT: MOVB FM,R1 ;SET THE MODEO" MOV R5,R0 ;THIS IS THE POOR DATA MOV R5,-(SP) ;SAVE THE DATA0 JSR PC,@TYFORM(R1) ;DO THAT __ TO THE POOR DATA MOV (SP)+,R5 ;RESTORE THE DATAO RTS PC ;RESTORE THE PC C ;L%; GET CHARACTER FROM CONSOLE TERMINALC;RGET:& .IF DF C$$XDJ ;XDT SUPPORTED ON KXJ) BIT #4,SR3 ;IS KERNEL D SPACE ENABLED?;8 BEQ 5$ ;IF EQ NO, THIS MUST BE VIRGIN BOOT NOT ON KXJ BIT #F5.XDJ,$FMSK5 ;XDT ON KXJ? BNE 10$ ;IF NE YES .IFTF ; C$$XDJ 5$:  TSTB TKS ;CHARACTER READY? BPL 5$ ;IF PL NO M00lm0mal8blOVB TKB,R0 ;READ INPUT BYTE .IFT ; C$$XDJ H BR 15$ ;JOIN COMMON CODE+10$: MOV $KXPTR,R0 ;GET ADDRESS OF KXJ DCBS% MOV D.UCB(R0),R0 ;GET ADDRESS OF UCBC% MOV U.SCB(R0),R0 ;GET ADDRESS OF SCBO% MOV S.KRB(R0),R0 ;GET ADDRESS OF KRBD& MOV K.CSR(R0),R0 ;GET ADDRESS OF TPR0# MOV #100000,TPR3(R0) ;SET HIGH BIT 2 MOV #RI$XDR,TPR2(R0) ;SET XDT READ FUNCTION CODE MOV R0,-(SP) ;SAVE TPR0 ADDRESS+ MOV $KXVC1,R0 ;GET ADDRESS OF FIRST VECTOR& ADD #4,R0 ;GET ADDRESS OF XDT VECTOR' MOV R0,@#KXJQIR ;NOTIFY HOST OF DETACH  MOV (SP)+,R0 ;RESTORE R0)12$: TST TPR2(R0) ;HAS CHARACTER ARRIVED?R BNE 12$ ;IF MI NOX613$: TST TPR3(R0) ;SEE IF CPRSYS HAS GIVEN US THE CHAR BMI 13$ ;IF MI, NOT YETC$ MOV TPR3(R0),-(SP) ;READ INPUT BYTE CLR TPR3(R0) ;CLEAR REGISTER MOV (SP)+,R0 ;GET CHARACTER15$: .IFTF ; C$$XDJM .IF DF R$$PRO/ MOV #115,@#173202 ;CLEAR THE PENDING INTERRUPTP .ENDC ; DF R$$PRO" BIC #177600,R0 ;CLEAR EXCESS BITS CMPB R0,#12 ;BRANCH IF E BEQ 40$ ;NO ECHO 'SI JSR R5,LOOKUP ;CHECK IF ALTMODE + ALTTAB BCS 20$ ;R MOVB #'$,R0 ;CHANGE TO $ IF SO'20$: MOV R0,-(SP) ;SAVE INPUT CHARACTERE TYPE R0 ;ECHO CHARACTER & MOV (SP)+,R0 ;RESTORE INPUT CHARACTER$ CMP #141,R0 ;LOWER CASE CHARACTER? BHI 30$ ;IF HI NOT$ CMP #172,R0 ;LOWER CASE CHARACTER? BLO 30$ ;IF LO NO- SUB #40,R0 ;CONVERT TO UPPER CASE CHARACTERH30$: CMPB #' ,R0 ;CVT BLANK BNE 40$ MOVB #'+,R0 ;INTO +C40$: RETURN ;; !; TYPE CHARACTER ON OUTPUT DEVICE ; .TYPE: MOV (SP),-(SP) ;DUPLICATE RETURN ADDRESS( SUB #2,(SP) ;POINT TO TRAP INSTRUCTION/ MOVB @(SP)+,-(SP) ;GET LOW BYTE OF INSTRUCTIONR BMI 10$ ;IF MI CONTROL BYTEE! MOV (SP)+,R0 ;SET BYTE TO OUTPUTA BR 30$ ;)10$: BIT #40,(SP) ;OUTPUT CONTENTS OF R0?  BEQ 20$ ;IF EQ YES% MOV (PC)+,R0 ;SET TO OUTPUT I .BYTE 15,12 ;0#20$: ASLB (SP)+ ;OUTPUT TWO BYTES?H BPL 30$ ;IF PL NOC TYPE R0 ;TYPE OUT FIRST BYTE SWAB R0 ;SET UP HIGH BYTE30$: .IFT ; C$$XDJ) BIT #4,SR3 ;IS KERNEL D SPACE ENABLED?)9 BEQ 31$ ;IF EQ NO, THIS MUST BE VIRGIN BOOT NOT ON KXJS BIT #F5.XDJ,$FMSK5 ;XDT ON KXJ? BNE 45$ ;IF NE YES  .IFTF ; C$$XDJC&31$: TSTB @OUTS ;OUTPUT DEVICE READY? BPL 31$ ;IF PL NO0 MOVB R0,@OUTB ;OUTPUT BYTEN&35$: TSTB @OUTS ;OUTPUT DEVICE READY? BPL 35$ ;IF PL YES1 CMPB #15,R0 ;WAS OUTPUT BYTE A CARRIAGE RETURN?P BNE 50$ ;IF NE NO3+ CMP #LPS,OUTS ;OUTPUT DEVICE LINE PRINTER?E BEQ 50$ ;IF EQ YES" MOV #5,-(SP) ;SET FILL COUNT TO 5 CLRB R0 ;SET OUTPUT NULLSE40$: TYPE R0 ;OUTPUT A NULL DEC (SP) ;ANY MORE TO OUTPUT?O BGT 40$ ;IF GT YES TST (SP)+ ;CLEAN STACK .IFT ; C$$XDJ BR 50$ ;JOIN COMMON CODE45$:  MOV R0,-(SP) ;SAVE CHARACTER$' MOV $KXPTR,R0 ;GET ADDRESS OF KXJ DCBN% MOV D.UCB(R0),R0 ;GET ADDRESS OF UCB?% MOV U.SCB(R0),R0 ;GET ADDRESS OF SCBW% MOV S.KRB(R0),R0 ;GET ADDRESS OF KRBE& MOV K.CSR(R0),R0 ;GET ADDRESS OF TPR07 TST KXJNOT ;HAVE WE ALREADY NOTIFIED HOST FOR ATTACH?P BNE 455$ ;IF NE, YES% MOV #1,KXJNOT ;SET NOTIFICATION FLAG " MOV #RI$XDA,TPR2(R0) ;ATTACH CODE MOV R0,-(SP) ;SAVE TPR0 ADDRESS+ MOV $KXVC1,R0 ;GET ADDRESS OF FIRST VECTORX& ADD #4,R0 ;GET ADDRESS OF XDT VECTOR' MOV R0,@#KXJQIR ;NOTIFY HOST OF DETACHK% MOV (SP)+,R0 ;RESTORE TPR0 ADDRESS D1453$: TST TPR2(R0) ;HOST RECEIVED ATTACH MESSAGE?  BNE 453$ ;IF NE NO455$:  MOV (SP),TPR3(R0) ;OUTPUT BYTEM. MOV #RI$XDW,TPR2(R0) ;SET WRITE FUNCTION CODE MOV R0,-(SP) ;SAVE TPR0 ADDRESS+ MOV $KXVC1,R0 ;GET ADDRESS OF FIRST VECTOR,& ADD #4,R0 ;GET ADDRESS OF XDT VECTOR' MOV R0,@#KXJQIR ;NOTIFY HOST OF DETACH # MOV (SP)+,R0 ;RESTORE TPR0 ADDRESSE&46$: TST TPR2(R0) ;CHARACTER RECEIVED? BNE 46$ ;IF MI NOE% MOV (SP)+,R0 ;RESTORE CONTENTS OF R0D .ENDC ; C$$XDJR 50$: RTI ; R# .SBTTL UTILITIES - PRETTY PRINTERSI4;PRINT ADDRESS- RELOC, SYMBOLIC, OR ABSL JSR PC.RORA;R0 ADDRESS TO BE PRINTED,;FORM CORE ADDRESS FORMAT (0-RELOC 1-ABSOL);REGISTER '$R ' OR '$DR 'D;CORE 'D,XXXXXX ' OR 'XXXXXX ' 1RORA: MOV R0,-(SP) ;CA00lmmlkTADATADATADATADATADATALLING VALUE ONA TOPPA SATCKT  V .IF DF K$$DAS I/ MOV DMODE,R0 ;PICK UP MODE CHARACTER AND SPACER' TSTB REGFL ;ATTEMPT TO OPEN REGISTER?E BEQ 50$ ;IF EQ NON4 MOV #"D ,R0 ;DATA SPACE USED IF REGISTER NOT THERE $ .IFTF CMP #INTBEG,(SP)B" BHI 50$ ;BELOW FIRST NON-INDEXED CMP #INTEND,(SP)O! BLO 50$ ;ABOVE LAST NON-INDEXED TYPE '$ ;ANNOUNCE INTENSIONS CMP #INTINX,(SP)A BLOS 20$ ;GO TO DO INDEXED/ MOV (SP)+,R0 ;NON-INDEXED REGISTER ----- "$R "X- SUB #INTBEG,R0 ;CLEANED UP STACK, GET OFFSETO( ASR R0 ;BYTE THAT WORD, WORD THAT BYTE/ MOVB NIXMAP(R0),R0 ;MAGIC CHARACTER FROM TABLET15$: BIS (PC)+,R0 & .BYTE 000,' ;CHARACTER PLUSSA BLANK' TYPE R0+R0 ;NAME PLUS BLANK AND SPLITT RETURN ;,20$: CLR R1 ;SEE WHICH SET OF TABLES WE GOT822$: CMP INXTBL+2(R1),(SP) ;LOOK ON AHEAD TO FIND BEHIND# BHI 24$ ;R1 POINTS TO BASE OF SETU2 TST (R1)+ ;THINK ABOUT THOSE DUMMY ENTRIES DUMMY BR 22$X/24$: MOV (SP)+,R0 ;INDEXED REGISTER ---- "$DR " ; SUB INXTBL(R1),R0 ;GET ADDRESS AND COMPUTE OFFSET IN WORDS;# ASR R0 ;AND FINALLY IN PLAIN TALK  ADD #'0,R0 ;CONVERT TO ASCII# TYPE R0 ;TYPE OUT REGISTER NUMBERE ASR R1;/ MOVB INXREG(R1),R0 ;PICK UP THE REAL CHARACTERL BR 15$ ;GO PRINT REST OF IT050$: ;REF LABEL E .IFT  TST OPN ;IS A LOCATION OPEN? BEQ 60$ ;IF EQ NOO TYPE R0+R0 ;OUTPUT MODE INFO 60$: ;O E .ENDC 1, TST FORM ;CORE ADDRESS SEE WHAT USER WANTS BNE 80$ ;TYPE AS ABSOLUTE.( MOV (SP),R4 ;RELOCATE ---- "R,XXXXXX "- JSR PC,LOCA ;WE ALWAYS PICK, XDT KNOWS BESTA BMI 80$ ;BUT NOT ALL THE TIME # MOV R1,(SP) ;SET THE DISPLACEMENTP' ADD #"0,,R0 ;PRINT REGISTER AND COMMA; TYPE R0+R0 ;DISK AND COREP%80$: MOV (SP)+,R0 ;PRINT R0 AS A WORDT%;TYPE R0 AS BYTE OR WORD, TWO ENTRIESF; FOR A WORD JSR PC,CADWN; FOR A BITE JSR PC,CADB1CADW: MOV R0,QUAN ;SET THE FAMOUS QUANTITY VALUEC MOV #6,R3 ;# OF DIGITS MOV #-2,R4 ;# OF BITS FIRST-38 BR CA01 ;DO THE COMMON THING+CADB: CLR QUAN ;SET FOR ALL OF QUAN A BYTEA, MOVB R0,QUAN ;SET THE QUANTITY THING AGAIN# MOV #3,R3 ;THERE ARE THREE DIGITS  MOV #-1,R4 ;AND ONLY TWO BITS, SWAB R0 ;SWITCH ENDSCA01: MOV R0,-(SP) ;SAVE R0D110$: ADD #3,R4 ;COMPUTE THE NUMBER OF BITS TO DOT CLR R0 15$: ROL (SP) ;GET A BIT ROL R0 ;STORE IT AWAYD DEC R4 ;DECREMENT COUNTERD# BGT 15$ ;LOOP IF MORE BITS NEEDEDO ADD #'0,R0 ;CONVERT TO ASCII TYPE R0 ;TYPE IT" DEC R3 ;SEE IF MORE DIGITS TO DO BGT 10$ ;LOOP IF SO( MOVB #' ,R0 ;SET UP FOR TRAILING SPACE TST (SP)+ ;GET RID OF JUNK TYPE R0 ;A RETURN ;,  E3;TYPE CONTENTS OF WORD IN FORMAT JSR PC,@TYFORM(R1),";R0 WORD OR BYTE TO BE TYPED, RHJ ;R1 CODE- ENTRY PT, FORMAT, CODETYFORM: + CADB ;BYTE OCTAL - 0 + CADW ;WORD OCTAL - 2 + 30$ ;BYTE ANSII - 4R + 20$ ;WORD ANSII - 6R + 10$ ;RADIX 50 - 10 210$: JSR PC,TYRADX ;R0 GETS THE RADIX 50 TREATMENT$ BR 35$ ;APPEND A BLANK TO 3 CHAR'S20$: TYPE R0 ;TYPE BYTE IN R0 SWAB R0 ;SWAP EM AND TYPE IT30$: TYPE R0 ;TYPE BYTE IN R035$: TYPE 40 ;TYPE A SPACE0 RETURN ; /;TYPE CONTENTS OF R0 IN RADIX 50 JSR PC,TYRADXP'TYRADX: MOV #3,R5 ;COUNT OF CHARACTERSY* MOV #50$,R2 ;POINTER TO COEFFICENT TABLE" MOV R0,R1 ;COPY OF RADIX 50 WORD10$: MOV R1,R0 ; GET DIVIDEND MOV (R2)+,R1 ; GET DIVISORW2 JSR PC,$DIV ; DIVIDE, R0=QUOTIENT, R1 =REMAINDER" TST R0 ; IS QUOTIENT ZERO? (SP)? BEQ 12$ ;"SP" = 040D CMPB R0,#33 ;RAD50-$ =33 BEQ 16$ ;"$" = 044( BGT 14$ ;"." OR "0-9" = 056 OR 060-071$ ADD #40,R0 ;RAD50-A = 1, "A" = 101+12$: ADD #16,R0 ;40+16+11+11 = 100 + (A-Z)T&14$: ADD #11,R0 ;16+11+11 = 40 + (SP)&16$: ADD #11,R0 ;11+11 = 22 + (.,0-9) TYPE R0 ;TYPE CHARACTER IN R0F DEC R5 ;COUNT THE CHARACTERS BNE 10$ ; LOOP RTS PCR#;COEFFICENT TABLE, RADIX 50 CONVERTE/50$: .WORD +1600.,+40.,+1. ;40.^2, 40.^1, 40.^0  M .PAGE> .SBTTL "I" AND "D" PROCESSOR - SET INSTR OR DATA DISPLAY MODE ;SYNTAX--D;I SET INSTR DISPLAY MODE4 B 1 .IF DF K$$DAS 7INSTM: MOVB #'I,DMODE ;SET FOR00lm0mal8bl INSTRUCTION DISPLAY MODE: DECODE ;DECODE NEXT COMMAND A ;SYNTAX--A;D SET DATA DISPLAY MODE S 0DATAM: MOVB #'D,DMODE ;SET FOR DATA DISPLAY MODE DECODE ;DECODE NEXT COMMAND O .ENDC E2 .SBTTL "B" PROCESSOR - SET AND REMOVE BREAKPOINTS ;SYNTAX--V;B CLEAR ALL BREAKPOINTS;NB CLEAR BKPT N*;A;B SET BKPT AT A, USE FIRST FREE BKPT;A;NB SET BKPT N AT AT>;DEPENDS MIGHTILY UPON LOCATION "TRTC" CONTAINING A TRAP INST.2;AND THAT A FREE BKPT CONTAINS THE ADDRESS "TRTC".0SEBK: ASL R4 ;MPY R4 X2, JUST IN CASE ALL IS GO2 MOV #TRTC,R0 ;SET MAGIC VALUE IN R0, JUST IN CASE! TST R3 ;CHECK FOR THE REAL CASER( BEQ REMB ;REMOVAL CASES, CLEAR THEM UP BIT #1,R5 ;LOOK AT ADDRESS BNE ERR0 ;THAT'S ODD ?( TST R2 ;SEE IF I GET TO PICK IT OR NOT! BNE 15$ ;OR NOT, DISAPPOINTMENTA910$: CMP R0,ADR1(R4) ;LOOK FOR LOCATION WITH FREE ADDRESS  BEQ 15$ ;A HIT% TST (R4)+ ;KEEP AT FOR A LONG WHILET BR 10$ ;LOOOOOOOOP-15$: MOV R5,R0 ;R0 HAS ADDRESS OF BREAKPOINTS BR RE02 ;GO TUCK IT IN;REMOVE SOME BREAKPOINTS REMB: TST R2 ;SEE IF ONE OR ALL BEQ RALL ;ALL .RE02: JSR PC,SETBRK ;SET THE ONE SET UP TO SET BCC RALL2 ;IT HAPPENED$ERR0: ERROR ;SOME THING WENT WRONG;E; REMOVE ALL BREAKPOINTS; RALL: CLR R4 ;R4 IS ZERON!10$: JSR PC,SETBRK ;SET THEM TILLN BCC 10$ ;THEY GET OUTTAORALL2: DECODE ;HAND!!!!D; %; SUBROUTINE TO SET/CLEAR BREAKPOINTST;R.SETBRK: CMP #BKP,R4 ;LEGAL BREAKPOINT NUMBER? BLO 10$ ;IF LO NOF .IF DF M$$PRO BIT #1,SR0 ;MAPPING ENABLED ?E( BEQ 8$ ;IF EQ NO, CAN'T GET TO LOWCR'S .IF DF K$$DAS& BIT #4,SR3 ;KERNEL D-SPACE ENABLED ?( BEQ 8$ ;IF EQ NO, CAN'T GET TO LOWCR'S .ENDC ; DF K$$DAS, MOV KISAR6,-(SP) ;SAVE CURRENT EXEC MAPPING% MOV R0,-(SP) ;AND BREAKPOINT ADDRESSR( MOVB $NCPU,R0 ;GET NUMBER OF PROCESSORS ASL R0 ;CHANGE TO WORD INDEX05$: MOV $K6TAB-2(R0),KISAR6 ;REMAP TO NEXT LOWCR1 MOV (SP),140000+ADR1(R4) ;SET BREAKPOINT ADDRESSN0 MOV #1,140000+CT(R4) ;AND INITIAL PROCEED COUNT# SUB #2,R0 ;POINT BACK TO NEXT CPUQ BGT 5$ ;IF GT THERE IS ONE( MOV (SP)+,R0 ;RESTORE BRAKPOINT ADDRESS/ MOV (SP)+,KISAR6 ;RESTORE CURRENT EXEC MAPPING' BR 9$8$:S .ENDC ; DF M$$PRO( MOV R0,ADR1(R4) ;SET BRAEKPOINT ADDRESS) MOV #1,CT(R4) ;SET INITIAL PROCEED COUNTS)9$: TST (R4)+ ;ADVANCE BREAKPOINT NUMBER10$: RETURN ;T O6 .SBTTL "R" PROCESSOR - RELOCATION REGISTER PROCESSING;DETERMINE IF CLEAR OR SET/RELO: TSTB SMFD ;SEMI-COLON ABSENT MEANS CLEARD- BEQ 10$ ;CLEAR DISPATCH, OR FALL TO SETTING ;FORMS HERE--T; A;NR SET RELOC(N) TO A;ABSENT A OR N DEFAULTS TO 0! JSR PC,RTST ;PROTECTION EDITINGC% BCS ERR0 ;ILLEGAL REGISTER NUMBER ?. .IF DF M$$PRO M) BIT #1,SR0 ;MEMORY MANAGEMENT ENABLED ?V' BEQ 5$ ;IF EQ NO, CAN'T GET TO LOWCRS .IF DF K$$DAS) BIT #4,SR3 ;KERNEL DATA SPACE ENABLED ?O' BEQ 5$ ;IF EQ NO, CAN'T GET TO LOWCRSS .ENDC ; DF K$$DAS, MOV KISAR6,-(SP) ;SAVE CURRENT EXEC MAPPING$ MOV R0,-(SP) ;SAVE WORKING REGISTER" MOVB $NCPU,R0 ;GET NUMBER OF CPUS ASL R0 ;MAKE WORD INDEX 93$: MOV $K6TAB-2(R0),KISAR6 ;MAP TO NEXT PROCESSORS LOWCR,5 MOV R5,140000+RELT(R4) ;AND SET RELOCATION REGISTERR) SUB #2,R0 ;POINT BACK TO NEXT PROCESSORR BGT 3$ ;IF GT MORE TO GO' MOV (SP)+,R0 ;RESTORE WORKING REGISTERW' MOV (SP)+,KISAR6 ;RESTORE EXEC MAPPINGE DECODE ;GO GET NEXT COMMAND5$: ;REF LABEL' .ENDC ; DF M$$PRO. MOV R5,RELT(R4) ;SET THE APPROPRIATE REGISTER DECODE ;GO GET NEXT COMMAND ;FORMS HERE--T#;R RESET ALL TO -1 FOR RELOC(0-7)S;NR RESET ONLY RELOC(N) !10$: TST R2 ;SEE IF NR OR JUST R  BEQ 15$ ;CLEAR ALL" JSR PC,RUCL ;CLEAR THE ONE IN R4% BCS ERR0 ;ERROR, INVALID REGISTER ?T DECODE ;NEXT COMMAND15$: JSR PC,RUAL ;DO THEM ALL DECODE ;OFF AND ONI;G.; SUBROUTINE TO RESET RELOCATION BASE REGISTER;D .ENABL LSB )RUCL: CALL RTST ;TEST FOR LEGAL REGISTER;! BCS 10$ ;IF CS ILLEGAL REGISTER , MOV #-1,RELT(R4) ;RESET RELOCATION REGISTER) ASR R4 ;CONVERT BACK TO REGISTER N00lmmlkTADATADATADATADATADATAUMBERL10$: RETURN ;0;.; SUBROUTINE TO CLEAR ALL RELOCATION REGISTERS;N$RUAL: CLR R4 ;START WITH REGISTER 0/20$: CALL RUCL ;CLEAR NEXT RELOCATION REGISTER, BCS 10$ ;IF CS ALL DONED" INC R4 ;ADVANCE TO NEXT REGISTER BR 20$ ; .DSABL LSB  F/ .SBTTL EXPRESSION SETUP COMMANDS ( ; + - * , )B;SEMI-COLON PROCESSORB"SEMI: INCB SMFD ;COUNT SEMI-COLON( CMPB #2,SMFD ;PUSH CONTENTS INTO MULTI BNE SEM1 ;SEMI COLON ARG LISTR MOV R5,D.ARGS%SEM1: MOV R2,R3 ;PUSH R2 AND R4 INTON* MOV R4,R5 ;R3 AND R5 (FLAG AND CONTENTS) JMP NEWE ;CONTINUE SCANNER;ADDITION SETUPLPLUS: CLRB OP ;OP IS 0 FOR +: BR CO00;SUBTRACT SET UPMINS: MOVB #2,OP BR CO00;MULTIPLY BY 50 AND ADDA"STAR: MOVB #-2,OP ;OP IS -2 FOR *CO00: CLR R4 ;R4 IS RESET JMP NEWNC;MEMORY RELOCATION CHECKCOMM: ASL R4 ;ALL NEED IT X 2. CMP R4,#RLR ;SEE IF REGISTER IS OUT OF RANGE BGT ERR2O, MOV RELT(R4),EXP ;COMPUTE REAL CORE ADDRESS BR PLUSERR2: ERROR ;OOPSU R! .SBTTL MISCELLANEOUS SUBROUTINES ;(; TEST IF IN EXEC MODE;W9TESTM: MOV (R5)+,-(SP) ;PICK UP EXEC TRAP ROUTINE ADDRESSP( TST $STKDP ;ALLOW EXEC TO HANDLE TRAP?+ BGT 20$ ;IF GT YES, TRAP WAS IN USER MODEY$ BLT 10$ ;IF LT NO, BAD STACK DEPTH7 CMP 4(SP),#$DRLM1 ;TRAP OCCUR IN DIRECTIVE DISPATCHER?M BLO 5$ ;IF LO NO7 CMP 4(SP),#$DRLM2 ;TRAP OCCUR IN DIRECTIVE DISPATCHER?I .IF NDF D$$PARF( BLOS 20$ ;IF LO YES, PASS TRAP TO EXEC .IFF ; NDF D$$PAR BHI 5$ ;IF HI NO, CMP KINAR5,$DRAPR ;IS THE DISPATCHER MAPPED' BEQ 20$ ;IF EQ YES, PASS TRAP TO EXECT .ENDC ; NDF D$$PARK5$:C .IF DF D$$PAR/ CMP KINAR5,$DRAP2 ;2ND DIRECTIVE COMMON MAPPEDB% BNE 10$ ;IF NE NO, XDT HANDLES TRAPD .ENDC ; DF D$$PAR1 CMP 4(SP),#$DQLM1 ;TRAP OCCUR IN QIO DIRECTIVE ?  BLO 10$ ;IF LO NOM0 CMP 4(SP),#$DQLM2 ;TRAP OCCUR IN QIO DIRECTIVE?1 BLOS 20$ ;IF LOS YES, ALLOW EXEC TO HANDLE TRAP%10$: MOV R5,(SP) ;SET TO XDT ADDRESSC%20$: MOV (SP)+,R5 ;SET RETURN ADDRESSH RTS R5 ;PROCESS TRAP S E.;EXPRESSION COMPUTATION ROUTINE JSR PC,EXPCOM;NEEDS--$;OP THE OPERATION (-2=*, 0=+, *=2);EXP THE LEFT SIDE;R4 THE RIGHT SIDE ;SETS UP--;OP BACK TO 0 FOR ADD,;EXP,R4 ALL SO FAR%EXPCOM: TSTB OP ;SEE WHAT'S UP CHUCK; BMI 20$ BEQ 10$ NEG R4 ;MINUS, OP=2I10$: ADD EXP,R4 ;PLUS, OP=0115$: MOV R4,EXP ;COMMON OUT, SET EXP TO WHATEVERS CLRB OP ;IS IN R4 TOOA$ INC R2 ;SET R2 SO THAT R4 IS, OP=0 RTS PC:320$: MOV EXP,-(SP) ;GET THE LEFT SIDE OF EXPRESSION  ASL (SP) ; MULTIPLY BY 10P ASL (SP) ; ASL (SP) ; ADD (SP),R4 ; ADD IT ASL (SP) ; MULTIPLY BY 40, ASL (SP) ; WHICH IS LIKE MULTIPLYING BY 50& ADD (SP)+,R4 ;AND ADD IT TO THE RIGHT BR 15$ ;COMMON OUT C %;BUILD AN OCTAL NUMBER JSR PC,GETNUM$;NEEDS AND RETURNS--#;R0 NON-OCTAL TERMINATING CHARACTERP;R2 OCTAL CHARACTER COUNTN$;R4 OCTAL NUMBER THAT I GOT, YOU GETGETNUM: CLR R2 ;NEW R2 AND R4 CLR R4 !10$: JSR PC,GET ;GET 1 CHARACTERS' CMPB #'0,R0 ;NON-OCTAL, LESS THAN "0"L BHI GETC99I' CMPB #'7,R0 ;NON-OCTAL, LESS THAN "7"A BLO GETC99 + BIC #177770,R0 ;MAKE INTO ACCEPTABLE RANGEP ASL R4 ; SHIFT LEFTI ASL R4 ; 3 BITS( ASL R4 ; ADD R0,R4 ;PLANT LO PLACE  INC R2 ;ACCOUNT FOR NEW ONE  BR 10$ ;NEXT ONE OR OTHER(;SCAN A LIST OF CHARACTERS JSR R5,LOOKUP;CALL--C; R0 HAS THE CHARACTER ; JSR R5,LOOKUP ;THAT IS IT (; + LIST TO USE, 00 BYTE IS END OF LIST;RETURNS AT CALL + 2 WITH--E;R0 STILL HAS CHARACTERP*;R1 HAS INDEX X2 OF FOUND CHARACTER IF C=0;C=1 CHARACTER WAS NOT FOUND$LOOKUP: MOV (R5),R1 ;GET LIST START#10$: CMPB R0,(R1) ;IS THIS THE ONEP BNE 20$ ;RIGHT IT WASN'T' SUB (R5)+,R1 ;COMPUTE INDEX AND RETURN # ASL R1 ;DO THIS FOR EVERBODY, C=0O BR 30$ '20$: TSTB (R1)+ ;CHECK FOR END OF LIST # BNE 10$ ;IF NOT LOOK AT NEXT ITEMC+ TST (R5)+ ;END, AVOID ILLEGAL INSTRUCTIONO# SEC ;SECURITY EXCHANGE COMMISION0 30$: RTS R5 ;SECURITY ELSEWHERE A +3;GET CONTENTS OF ADDRESS IN THE MODE JSR PC,GETCAD2;NEEDS--;R0 THE00lm0mal8bl MODE 1=BYTE, 2=WORD;CAD THE ADDRESSO;DEVI THE DEVICE CODE ;RETURNS--;R0 HAS THE DATA YOU ASKED FORP .IF DF K$$DAS  N&GETCAD: MOV SP,OPN ;SET LOCATION OPEN1 CALL GETIT ;READ WORD OR BYTE FROM PROPER SPACE $ MOV (SP)+,R0 ;RETRIEVE WORD OR BYTEGETC99: RTS PC ;  .IFFA E&GETCAD: MOV CAD,R3 ; GET CORE ADDRESS MOV SP,OPN ; SET LOCATION OPEN% ASR R0 ;PUSH BW FLAG INTO CARRY BITI! BCC 10$ ;2 WON'T FIT SO IS WORD  MOVB (R3),R0 ;ACCESS BYTEC BR GETC9910$: MOV (R3),R0 ;ACCESS WORDGETC99: RTS PC ;STACK ACCESSV T .IFTF/;PUT R4 INTO ADDRESS IN THE MODE JSR PC,PUTCADO;NEEDS--.;R2 CONTENT FLAG, 0 FOR NONE, ELSE R4 IS GOLD ;R4 THE DATA .;BW THE MODE FLAG, IF 0 THEN NO LOCATION OPEN .IFTR R(PUTCAD: MOV BW,R0 ;PICK UP MODE AN CC'S1 CALL GETIT ;READ WORD OR BYTE FROM PROPER SPACES TST R2 ;CHECK FOR TYPED VALUEN BEQ 12$ ;NO DATA) TST OPN ;IS A LOCATION OPEN AT PRESENT?T BEQ 12$ ;NOT OPENR BIT #177776,R0 ;CHECK MODEC BNE 5$ ;WORD MODE  MOVB R4,(SP) ;WRITE THE DATA A BIT #1,CAD ;HIGH BYTE? BEQ 10$ ;IF EQ NOI& SWAB (SP) ;MOVE IT BACK TO HIGH BYTE BR 10$ ;!5$: MOV R4,(SP) ;STORE THE DATA ,10$: MOV (SP),-(SP) ;DUPLICATE DATA ON STACK TST R1 ;DATA SPACE?F BNE 11$ ;IF NE YES) MTPI (R3) ;WRITE WORD BACK TO I SPACE E BR 12$ ; R+11$: MTPD (R3) ;WRITE WORD BACK TO D SPACEA$12$: MOV (SP)+,R4 ;RETURN DATA IN R4 RTS PC ; T .IFF Q%PUTCAD: MOV CAD,R3 ;GET CORE ADDRESSK TST R2 ;CHECK FOR TYPED VALUE " BEQ 12$ ;NO DATA NO DODO ;**-1! MOV BW,R0 ;PICK UP MODE AN CC'SQ* TST OPN ; IS A LOCATION OPEN AT PRESENT? BEQ 12$ ;NOT OPEN NOT STORED$ BIT #177776,R0 ;CHECK MODE ;**-1 BNE 10$ ;WORD MODE MOVB R4,(R3) ;BYTE MODE BR 12$ ;BRANCH MODEM10$: MOV R4,(R3) ;WORD MODE%12$: BIC #1,R3 ;INSURE EVEN ADDRESS , MOV (R3),R4 ;READ WORD FROM OPEN LOCATION RTS PC ; ;**-1 .IFTF;GET WORD FROM PROPER SPACED O;NEEDS-- ;R0 BW FLAG S ;RETURNS--.;R1 0 IF DATA FROM I SPACE, 1 IF FROM D SPACE0;R3 CURRENT ADDRESS FROM CAD WITH LOW BIT CLEAR N .IFTA C'GETIT: MOV CAD,R3 ;GET CURRENT ADDRESSE BIC #1,R3 ;CLEAR LOW ORDER BIT) MOV (SP),-(SP) ;DUPLICATE RETURN ADDRESSV CLR R1 ;ASSUME I SPACE  TSTB REGFL ;REGISTER ACCESS?" BNE 10$ ;IF NE YES, USE D SPACE ! CMPB DMODE,#'D ;IN D SPACE MODE?  BEQ 10$ ;IF EQ YES MFPI (R3) ;READ FROM I SPACE BR 20$ ;"10$: MFPD (R3) ;READ FROM D SPACE INC R1 ;SET D SPACE FLAG$20$: BIT #1,CAD ;HIGH BYTE DESIRED? BEQ 30$ ;IF EQ NOS# SWAB (SP) ;REVERSE BYTES ON STACKI030$: MOV (SP)+,2(SP) ;PLACE WORD IN PROPER PLACE RETURN ;N D S6;SET KERNEL I-SPACE DESCRIPTOR REGISTERS TO READ/WRITE I;NEEDS--;R0R!;CALLED ONLY FOR I/D SPACE SYSTEMT ;RETURNS-- R'SETRW: BIT #1,SR0 ;MAPPING ENABLED YETC BEQ 20$ ;NO,+ BIT #4,SR3 ;KERNEL DATA SPACE ENABLED YET BEQ 20$ ;NOA2 MOV #KINDR0,R0 ;POINT TO KERNEL INSTR DESCR REG 0(10$: BIS #4,(R0)+ ;SET RW ACCESS FOR XDT CMP R0,#KINDR7 ;DONE YETE BLOS 10$ ;NO20$: RETURN ;A S  .ENDC T O);SELECT RELOCATION REGISTER JSR PC,LOCAI!;CAD ADDRESS TO USE IN SELECTION ;RETURNS--.;R0 REGISTER NUMBER FOUND, -1 IF NONE FOUND";R1 DISTANCE, RELOCATION FACTOR;;SUBROUTINE TO LOCATE RELOCATION REGISTER NEAREST BUT STILLN5;BELOW THE ADDRESS IN CAD. RETURNS WITH THE REGISTERP9;NUMBER IN R0, AND WITH THE DISTANCE BETWEEN THE REGISTER ;AND (CAD) IN R1+;IF NO GOOD RELOC. REG. FOUND, R0 WILL = -1X LOCA: CLR R0, MOV #-1,-(SP) ;INITIALIZE RELOC. REG. INDEX2 MOV (SP),R1 ;INITIALIZE DISTANCE TO A HIGH VALUE)10$: CMP R0,#RLR ;ARE WE DONE COMPARING?I BHI 20$ ;BRANCH IF DONE. CMP RELT(R0),R4 ;IS CURR. RELOC. BIAS > (R4)?4 BHI 15$ ;IF SO, BRANCH -- DON'T SUBTRACT, GET NEXT* MOV R4,R2 ;OTHERWISE TAKE THE DIFFERENCE. SUB RELT(R0),R2 ;OF CURR. RELOC. REG. AND CAD/ CMP R1,R2 ;IS THE RESULT THE SMALLEST SO FAR?T/ BHI 25$ ;BRANCH IF YES (UNSIGNED CONDITIONAL) 815$: TST (R0)+ ;OTHERWISE, BUMP R0 FOR NEXT RELOC. REG.00lmmcmkTADATADATADATADATADATA' BR 10$ ;LOOP BACK FOR NEXT COMPARISONV"20$: MOV (SP)+,R0 ;PUT REG.# IN R0 RTS PC ;JOB OVER, RETURN425$: MOV R2,R1 ;REMEMBER SMALLEST DIFFERENCE IN XXY( ASR R0 ;AND ASSOCIATED REGISTER NUMBER MOV R0,(SP) ; IN (SP) & ASL R0 ;RESTORE R0 TO ORIGINAL VALUE BR 15$ ;GO FO NEXT COMPARISON. .ENDC ;DF X$$DBT2 .IIF DF X$$DBT .END $XDT .IIF NDF X$$DBT .ENDE T THE SMALLEST SO FAR?T/ BHI 25$ ;BRANCH IF YES (UNSIGNED CONDITIONAL) 815$: TST (R0)+ ;OTHERWISE, BUMP R0 FOR NEXT RELOC. REG. .TITLE EXENDU .IDENT /00/ ;E; COPYRIGHT (C) 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.F; A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;E ; VERSION 00;; T. J. MILLER 23-OCT-77;S@; THIS MODULE ENDS THE READ-ONLY EXECUTIVE IN SYSTEMS SUPPORTING; KERNEL DATA SPACE.;) P&$EXEND:: ;END OF READ ONLY EXECUTIVE - .END ;PLACE SECOND OF MINUTE IN BUFFERR CLC RETURN  E;H ; ER .TITLE EXESB .IDENT /14.03/;;; COPYRIGHT (c) 1985, 1988 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; D. N. CUTLER 4-AUG-73;; PREVIOUSLY MODIFIED BY:;; J. R. KAUFFMAN; J. M. LAWLER; B. S. MCCARTHY ; K. L. NOEL; ; MODIFIED BY;; K. L. NOEL 22-DEC-88 14.03;>; KLN119 -- MODIFY TICLR TO CLEAR TASK INDEX FOR REMOTE TASKS;;.; I/O RELATED ROUTINES;35; ROUTINES CALLED PRIMARILY FROM WITHIN THE EXECUTIVE ;P; MACRO LIBRARY CALLSR;R8 .MCALL F11DF$,HDRDF$,HWDDF$,PCBDF$,PKTDF$,SHDDF$,TCBDF$0 F11DF$ ;DEFINE WINDOW AND LOCK BLOCK OFFSETS ' HDRDF$ ;DEFINE TASK HEADER OFFSETS L$ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS* SHDDF$ ;DEFINE SHADOW RECORDING OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS .PAGE;+); **-$ACHKP-ADDRESS CHECK PARAMETER BLOCK6; **-$ACHKW-ADDRESS CHECK PARAMETER BLOCK WORD ALIGNED ; G; THESE ROUTINES ARE CALLED TO ADDRESS CHECK A TASK SPECIFIED PARAMETERCM; BLOCK TO INSURE IT IS WITHIN THE TASK'S ADDRESS SPACE AND ALIGNED PROPERLY.HI; IF EITHER CHECK FAILS, THEN A DIRECTIVE STATUS OF 'D.RS98' IS RETURNED.A;T ; INPUTS: ;C1; R0=STARTING ADDRESS OF THE BLOCK TO BE CHECKED.S0; R1=LENGTH OF THE BLOCK TO BE CHECKED IN BYTES.;D ; OUTPUTS:;RA; THE SPECIFIED BLOCK IS CHECKED FOR PROPER ALIGNMENT AND WHETHERL?; IT IS WITHIN THE TASK'S ADDRESS SPACE. IF EITHER CHECK FAILS, @; THEN A DIRECTIVE STATUS OF 'D.RS98' IS RETURNED. ELSE A RETURN; TO THE CALLER IS EXECUTED.; 9; R2=ADDRESS OF WINDOW BLOCK MAPPING BUFFER ($ACHKW ONLY)H-; (FOR PRIVILEGED TASKS SEE NOTE IN $ACHKB.)T;O&; R0 AND R3 ARE PRESERVED ACROSS CALL.;- T .ENABL LSBF3$ACHKP::MOV R3,R0 ;SET ADDRESS OF BLOCK TO CHECK T+ CALL $ACHCK ;ADDRESS CHECK WORD ALIGNED  BCS 10$ ;IF CS CHECK FAILURE/ CALL $RELOC ;RELOCATE PARAMETER BLOCK ADDRESST& MOV R1,KISAR6 ;MAP TO PARAMETER BLOCK- MOV R2,R3 ;REDEFINE PARAMETER BLOCK ADDRESS RETURN ;E2$ACHKW::CALL $ACHCK ;ADDRESS CHECK WORD ALIGNED  BCC 50$ ;IF CC OKAYK(10$: DRSTS D.RS98 ;SET DIRECTIVE STATUS .PAGE;+&; **-$ACHKB-ADDRESS CHECK BYTE ALIGNED&; **-$ACHCK-ADDRESS CHECK WORD ALIGNED;TJ; THIS ROUTINE IS CALLED TO ADDRESS CHECK A BLOCK OF MEMORY TO SEE WHETHER7; IT LIES WITHIN THE ADDRESS SPACE OF THE CURRENT TASK.C;K ; INPUTS:C; 1; R0=STARTING ADDRESS OF THE BLOCK TO BE CHECKED.,0; R1=LENGTH OF THE BLOCK TO BE CHECKED IN BYTES.; ; OUTPUTS:; ; C=1 IF ADDRESS CHECK FAILED.!; C=0 IF ADDRESS CHECK SUCCEEDED.I;D+; R2=ADDRESS OF WINDOW BLOCK MAPPING BUFFER ; (FOR PRIV TASKS SEE NOTE.);&; R0 AND R3 ARE PRESERVED ACROSS CALL.;*9; NOTE: SINCE PRIVILEGED TASK I/O BUFFERS ARE NOT ADDRESSA4; CHECKED, R2 ALWAYS RETURNS A POINTER TO THE FIRST8; WINDOW BLOCK. CHECKPOINTING AND SHUFFLING OF COMMONS6; WILL STIL00cm0mal8blL WORK PROPERLY PROVIDED THAT A PRIVILEGED5; TASK NEVER SPECIFIES AN I/O INTO A COMMON WHICH ITD3; ALLOWS TO REMAIN CHECKPOINTABLE AND SHUFFLEABLE.K;I0; THE ABOVE ALSO IMPLIES THAT ALLOWING A RANDOM.; REGION TO BE SHUFFLED OR CHECKPOINTED WHILE0; P.RMCT=0 MIGHT POSSIBLY CHECKPOINT THE REGION; WITH THE BUFFER CONTAINED. ;-$ACHCK::ASR R0 ;ODD ADDRESS?  BCS 14$ ;IF CS YES ASL R0 ;REALIGN ADDRESSN7$ACHKB::CALL $ACHRO ;CHECK BUFFER FOR READ ONLY ACCESSF BCS 14$ ;IF CS FAILURE .IF DF X$$HDR0 BIT #4,$IOTMP ;WRITE ACCESS ALLOWED TO WINDOW ? .IFFI4 BIT #4,W.BLPD(R2) ;WRITE ACCESS ALLOWED TO WINDOW ? .ENDC ;X$$HDR BNE 14$ ;IF NE YES SEC ;ELSE RETURN CS14$: RETURN ;  .PAGE;+9; **-$ACHUI-ADDRESS CHECK USER I SPACE (FOR LOAD OVERLAY)O; @; THIS ROUTINE CHECKS THE SPECIFIED USER BUFFER FOR EXISTENCE IN; USER I SPACE ONLY.; ; INPUTS:;L1; R0=STARTING ADDRESS OF THE BLOCK TO BE CHECKED. 0; R1=LENGTH OF THE BLOCK TO BE CHECKED IN BYTES.;E ; OUTPUTS:;H; C=1 IF ADDRESS CHECK FAILED.!; C=0 IF ADDRESS CHECK SUCCEEDED.;T,; R2=ADDRESS OF WINDOW BLOCK MAPPING BUFFER.(; (FOR PRIV TASKS SEE NOTE IN $ACHKB);S); R0 AND R3 ARE PRESERVED ACROSS THE CALL;- .IF DF U$$DAS$ACHUI:: .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGE- MOV $SAHDB,KISAR6 ;AND MAP TO CURRENT HEADER .ENDC ; DF X$$HDR2 MOV $SAHPT,R2 ;GET ADDRESS OF CURRENT TASK HEADER- CLR -(SP) ;FORCE EXAMINATION OF USER I ONLYE BR 145$ ;ENTER COMMON ROUTINE: .ENDC ; DF U$$DAS .PAGE;+.; **-$ACHRO-ADDRESS CHECK FOR READ-ONLY ACCESS;DE; THIS ROUTINE CHECKS THE SPECIFIED USER BUFFER FOR READ-ONLY ACCESS.$;K ; INPUTS:0;D1; R0=STARTING ADDRESS OF THE BLOCK TO BE CHECKED.$0; R1=LENGTH OF THE BLOCK TO BE CHECKED IN BYTES.; ; OUTPUTS:;A; C=1 IF ADDRESS CHECK FAILED.!; C=0 IF ADDRESS CHECK SUCCEEDED.D;$,; R2=ADDRESS OF WINDOW BLOCK MAPPING BUFFER.'; (FOR PRIV TASKS SEE NOTE IN $ACHKB.)I;O&; R0 AND R3 ARE PRESERVED ACROSS CALL.;- :$ACHRO:: .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGO2 MOV $SAHDB,KISAR6 ;AND MAP TO CURRENT TASK HEADER .ENDC ; DF X$$HDR, MOV $SAHPT,R2 ;POINT TO CURRENT TASK HEADER .IF DF U$$DAS!S$$LIBE4 MOV H.SMAP(R2),-(SP) ;SAVE USER/SUPER MAPPING MASKS ;FOR LATER +145$: CLR -(SP) ;ALLOCATE SPACE FOR BUFFER  ;DESCRIPTOR MASK .IFTF ; DF U$$DAS!S$$LIBI3 MOV H.WND(R2),R2 ;POINT TO NUMBER OF WINDOW BLOCKS . MOV (R2)+,-(SP) ;PUSH NUMBER OF WINDOW BLOCKS% TST W.BLVR(R2) ;TASK MAPPED TO EXEC?$, BNE 40$ ;IF NE YES, ADDRESS CHECK SUCCEEDS, DEC R1 ;CALCULATE HIGHEST ADDRESS OF BLOCK ADD R0,R1 ;N$ BCC 147$ ;IF CC ALL IS OK, NO WRAP5; * * * SPECIAL NOTE ABOUT PRIVILEGED TASKS * * *V;S<; IN ORDER TO MAKE THE IMPLEMENTATION OF ADDRESS CHECKING ON=; RSX-11M-PLUS COMPATIBLE WITH RSX-11M, WHICH SKIPS CHECKS IF =; T3.PRV IS SET, WE ADDRESS CHECK ONLY THE FIRST ADDRESS, NOTT@; THE LENGTH OF THE TRANSFER. THIS ALLOWS A PR:0 TASK TO PERFORM;; A LARGE I/O INTO A REGION WHICH IS MAPPED THROUGH A SMALLI>; WINDOW. WE MUST STILL ADDRESS CHECK, SINCE THIS ROUTINE WILL=; RETURN THE WINDOW BLOCK MAPPING THE BUFFER TO WHICH THE I/O ; IS TO BE CHARGED.C; =; SINCE THIS CHECK REQUIRES SEVERAL EXTRA INSTRUCTIONS, IT ISE<; IMPLEMENTED IN THE ERROR PATHS THROUGH THE CHECK ROUTINES.; 2 MOV $TKTCB,-(SP) ;GET TCB ADDRESS OF CURRENT TASK1 ADD #T.ST3,(SP) ;POINT TO THIRD TASK STATUS WORDH% BIT #T3.PRV,@(SP)+ ;TASK PRIVILEGED? , BEQ 30$ ;IF EQ NO, ADDRESS WRAP -> FAILURE147$: ;REFERENCE LABEL  .IFT ; DF U$$DAS!S$$LIB* TST 4(SP) ;TASK HAVE ONLY USER I SPACE ?+ BNE 100$ ;IF NE NO, GO DO IT THE HARD WAYT .IFTF ; DF U$$DAS!S$$LIBC/15$: TST (R2) ;IS NEXT WINDOW MAPPED? (W.BPCB)R BEQ 20$ ;IF EQ NOE  L .IF DF S$$LIB R* TSTB W.BFPD(R2) ;SUPERVISOR MODE MAPPING?. BPL 20$ ;IF PL YES, IGNORE FOR ADDRESS CHECK A .ENDC ; DF U$$DAS O I& CMP R0,W.BLVR(R2) ;COMPARE LOW LIMITS" BLO 20$ ;IF LO NOT IN DESCRIPTOR' CMP R1,W.BHVR(R2)00cnmcmkTADATADATADATADATADATA ;COMPARE HIGH LIMITS;* BLOS 40$ ;IF LOS BUFFER IS IN DESCRIPTOR<; TEST FOR ISSUER PR:0. IF SO MAPPING SUCCESSFUL EVEN THOUGH; LAST ADDRESS FAILED MAPPING2 MOV $TKTCB,-(SP) ;GET TCB ADDRESS OF CURRENT TASK1 ADD #T.ST3,(SP) ;POINT TO THIRD TASK STATUS WORD % BIT #T3.PRV,@(SP)+ ;TASK PRIVILEGED?R' BEQ 20$ ;IF EQ NO, LAST ADDR. FAILUREI3 CMP R0,W.BHVR(R2) ;LAST ADDRESS FAILURE OK, BUT IS$! ;FIRST ADDRESS WITHIN WINDOW?O/ BLOS 40$ ;IF LOS YES, OK. THIS IS A PRIV TASKT& ;WITH A VALID BUFFER THAT OVERLAPS ;THE END OF THE WINDOW.E/20$: ADD #W.BLGH,R2 ;POINT TO NEXT WINDOW BLOCKS# DEC (SP) ;MORE DESCRIPTORS TO GO?A BGT 15$ ;IF GT YES30$: ;REFERENCE LABEL .IFT ; DF U$$DAS!S$$LIB0 SUB #-6,SP ;CLEAR 3 WORDS OFF STACK, SET CARRY .IFF ; DF U$$DAS!S$$LIB# COM (SP)+ ;CLEAN STACK, SET CARRYL .IFTF ; DF U$$DAS!S$$LIB. .IF DF X$$HDR0 MOV (SP)+,KISAR6 ;RESTORE PREVIOUS EXEC MAPPING .ENDC ; DF X$$HDR RETURN ;H40$: ;REFERENCE LABEL .IFT ; DF U$$DAS!S$$LIB1 ADD #6,SP ;CLEAR 3 WORDS OFF STACK, CLEAR CARRYR .IFF ;DF U$$DAS!S$$LIBC% TST (SP)+ ;CLEAN STACK, CLEAR CARRY .IFTF ; DF U$$DAS!S$$LIB  .IF DF X$$HDR6 MOV W.BLPD(R2),$IOTMP ;SAVE R/W INDICATOR FROM WINDOW0 MOV (SP)+,KISAR6 ;RESTORE PREVIOUS EXEC MAPPING .ENDC ; DF X$$HDR50$: RETURN ;.A; THIS SECTION HANDLES ADDRESS CHECKS FOR TASKS WITH MIXED I/D ORSD; USER/SUPER MAPPING. THIS CODE IS DESIGNED TO "FAVOR" (PERFORMANCE)@; TASKS WHOSE I/O IS FULLY MAPPED THROUGH USER D SPACE. THE CODE>; ABOVE FAVORS "SIMPLE" TASKS WITH ONLY USER I SPACE OR USER I ; SUPER I.; B; FIRST, FIND A WINDOW (IF THERE IS ONE) WHICH CONTAINS THE ENTIRE; BUFFER .IFT ; DF U$$DAS!S$$LIB%100$: TST (R2) ;NEXT WINDOW MAPPED ?+ BEQ 110$ ;IF EQ NO& CMP R0,W.BLVR(R2) ;COMPARE LOW LIMITS# BLO 110$ ;IF LO NOT IN DESCRIPTORN' CMP R1,W.BHVR(R2) ;COMPARE HIGH LIMITSI+ BLOS 120$ ;IF LOS BUFFER IS IN DESCRIPTORS<; TEST FOR ISSUER PR:0. IF SO MAPPING SUCCESSFUL EVEN THOUGH; LAST ADDRESS FAILED MAPPINGE2 MOV $TKTCB,-(SP) ;GET TCB ADDRESS OF CURRENT TASK1 ADD #T.ST3,(SP) ;POINT TO THIRD TASK STATUS WORD(% BIT #T3.PRV,@(SP)+ ;TASK PRIVILEGED?I( BEQ 110$ ;IF EQ NO, LAST ADDR. FAILURE3 CMP R0,W.BHVR(R2) ;LAST ADDRESS FAILURE OK, BUT IS;! ;FIRST ADDRESS WITHIN WINDOW?R0 BLOS 120$ ;IF LOS YES, OK. THIS IS A PRIV TASK& ;WITH A VALID BUFFER THAT OVERLAPS ;THE END OF THE WINDOW.R0110$: ADD #W.BLGH,R2 ;POINT TO NEXT WINDOW BLOCK$ DEC (SP) ;MORE DESCRIPTORS TO GO ? BGT 100$ ;IF GT YESN! BR 30$ ;ELSE ADDR. CHECK FAILEDD .ENDC ; DF U$$DAS!S$$LIB.>; FOUND A WINDOW WHICH COVERS TRANSFER. CHECK FOR USER D SPACE; FIRSTL120$: ;REFERENCE LABEL  .IF DF U$$DAS- BIT #20,W.BFPD(R2) ;USER DATA SPACE WINDOW ?T BEQ 130$ ;IF EQ NOA; WINDOW IS USER D SPACE. IF THE REQUEST WAS ISSUED IN USER MODE,-; THEN THE BUFFER IS GUARANTEED TO BE MAPPED.E .IF DF S$$LIB, TST $STACK-2 ;ISSUED FROM SUPERVISOR MODE ?) BMI 40$ ;IF MI NO, D SPACE MAP SUCCEEDSD; WINDOW IS D SPACE, BUT REQUEST WAS ISSUED FROM SUPER MODE. THIS IS?; OK ONLY IF THERE IS NO OVERLAP BETWEEN THE BUFFER AND A SUPER 1; D APR WHICH HAS BEEN MAPPED INTO SUPER I SPACE.A( CALL 210$ ;BUILD SUPER BUFFER APR MASK6 BITB 2(SP),4(SP) ;ANY PART OVERLAP SUPER I/D WINDOW ? BEQ 40$ ;IF EQ NO, SUCCESS BR 110$ ;KEEP TRYING .ENDC ; DF S$$LIB .ENDC ; DF U$$DAS6; WINDOW IS EITHER USER I OR SUPER I. CHECK FOR USER I130$: ;REFERENCE LABEL4 .IF DF S$$LIB, TSTB W.BFPD(R2) ;USER I OR SUPER I WINDOW ? BPL 150$ ;IF PL SUPER IR .ENDC ; DF S$$LIBB; WINDOW IS USER I SPACE. LOOK FOR CONFLICT WITH DISCRETE D SPACED; WINDOW. FOR PERFORMANCE, WE BUILD THE MASK IF WE NEED IT, BUT ONLY; ONCE IN ANY CASE.  .IF DF U$$DAS# CALL 210$ ;ESTABLISH MAPPING MASK$?140$: BITB 3(SP),5(SP) ;ANY OF BUFFER OVERLAP DISCRETE WINDOW ?! BNE 110$ ;IF NE YES, KEEP GOING  .ENDC ; DF U$$DAS BR 40$ ;SUCCESSFULI; WINDOW IS SUPER I. IF ISSUED IN USER MODE IGNORE00c n0mal8bl WINDOW, ELSE MAKE SUREU; ENTIRE WINDOW IS OVERMAPPED. .IF DF S$$LIB*150$: TST $STACK-2 ;ISSUED IN SUPER MODE ?# BMI 110$ ;IF MI NO, IGNORE WINDOWEF; SINCE SUPER WINDOWS CAN'T MAP APR0 INTO SUPER I SPACE, IGNORE WINDOW; IF TRANSFER STARTS IN APR0' CMP #20000,R0 ;BUFFER START IN APR 0 ?S- BHI 110$ ;IF HI YES, CAN'T BE THROUGH SUPERRE; ESTABLISH SUPERVISOR MASK AND MAKE SURE WHOLE TRANSFER FITS THROUGH ; SUPER I WINDOW+ CALL 210$ ;ESTABLISH SUPER D OVERMAP MASKI- MOVB 2(SP),-(SP) ;COPY SUPER BUFFER APR MASKN0 BICB 6(SP),(SP)+ ;FULL BUFFER IN SUPER WINDOW ? BEQ 40$ ;IF EQ YES BR 110$ ;ELSE NO .ENDC ; DF S$$LIB9; LOCAL SUBROUTINE TO ESTABLISH SUPER BUFFER MAPPING MASKU .IF DF U$$DAS!S$$LIBW)210$: TSTB 5(SP) ;USER D MAP BUILT YET ?, BNE 220$ ;IF NE YES 3 MOV R2,-(SP) ;SAVE POINTER TO CURRENT WINDOW BLOCK' MOV R1,R2 ;COPY END ADDRESS OF BUFFERR! ASH #-13.,R2 ;REDUCE TO JUST APRU$ BIC #177770,R2 ;CLEAR UNWANTED BITS< MOVB $BCMSK(R2),7(SP) ;INIT MASK TO ALL UP TO UPPER ADDRESS) MOV R0,R2 ;COPY START ADDRESS OF BUFFER ! ASH #-13.,R2 ;REDUCE TO JUST APRS$ BIC #177770,R2 ;CLEAR UNWANTED BITS> BICB $BCMSK-1(R2),7(SP) ;INIT MASK TO ALL UP TO UPPER ADDRESS" MOVB 7(SP),6(SP) ;INIT SUPER MASK CLC ;GET SET FOR SHIFTU& RORB 6(SP) ;SUPER MASK IS ORIGIN ONE% MOV (SP)+,R2 ;RESTORE WINDOW POINTERO220$: RETURN ; .ENDC ;DF U$$DAS!S$$LIB .DSABL LSB. .PAGE;+9; **-$CKBFI-CHECK I/O BUFFER FOR I-SPACE (OVERLAY) ACCESSB8; **-$CKBFR-CHECK I/O BUFFER FOR READ-ONLY (BYTE) ACCESS9; **-$CKBFW-CHECK I/O BUFFER FOR READ-WRITE (WORD) ACCESSC9; **-$CKBFB-CHECK I/O BUFFER FOR READ-WRITE (BYTE) ACCESS ;M:; THESE ROUTINES ARE CALLED TO ADDRESS CHECK AN I/O BUFFER>; ASSOCIATED WITH THE CURRENT (UNDER CONSTRUCTION) I/O PACKET.C; IF THE ADDRESS CHECK PASSES, THEN AN ATTEMPT IS MADE TO POINT ONEEC; OF THE ATTACHMENT DESCRIPTOR POINTERS AT THE ASSOCIATED ADB. THISA*; WILL HAVE ONE OF THE FOLLOWING OUTCOMES:;EE; 1) - THERE IS CURRENTLY NO ATTACHMENT POINTER IN THE PACKET TO THISCD; ADB, AND THE POINTERS AREN'T FULL. A POINTER IS FILLED IN ANDD; THE A.IOC, P.IOC FIELDS FOR THIS I/O ARE INCREMENTED. THIS IS$; THE "NORMAL" SUCCESSFUL CASE.; ?; 2) - THERE IS ALREADY ONE POINTER TO THIS ADB. THE PACKET IS CB; UNTOUCHED, AS ARE THE A.IOC AND P.IOC FIELDS, AND THE CHECKD; IS CONSIDERED SUCCESSFUL. THE IMPLICATION OF NOT INCREMENTING?; A.IOC AND P.IOC IS THAT DRIVERS AND ACPS MAY NOT RELEASEE@; BUFFERS FOR AN I/O REQUEST ONE AT A TIME, I.E. THE DRIVERA; SHOULD NOT CALL $DECIO DIRECTLY, BUT SHOULD CALL $IODON OR 5; $DECAL AFTER ALL BUFFER ACCESS HAS SCOMPLETED.E;TF; 3) - THERE ARE ALREADY TWO POINTERS, NONE OF THEM TO THIS ATTACHMENT@; DESCRIPTOR. THIS IS CONSIDERED A CHECK FAILURE AND RETURN; IS MADE WITH CARRY SET.;T ; INPUTS: ; ,; R0=STARTING ADDRESS OF BLOCK TO BE CHECKED#; R1=LENGTH OF BUFFER TO BE CHECKEDI0; $ATTPT=ADDRESS OF I.AADA IN CURRENT I/O PACKET5; HEADER OF THE SUBJECT TASK IS MAPPED THROUGH KISAR6R;R ; OUTPUTS:; '; C=0 CHECK AND PACKET UPDAT SUCCESSFUL '; I.AADA OR I.AADA+2 POINTS TO THE ADBR; A.IOC, P.IOC INCREMENTED9; C=1 CHECK UNSUCCESSFUL OR PACKET COULD NOT BE FILLED IN ;- .ENABL LSBD .IF DF U$$DAS+$CKBFI::CALL $ACHUI ;PERFORM ADDRESS CHECKI BR 10$ ;ENTER COMMON CODE  .ENDC ; DF U$$DAS+$CKBFR::CALL $ACHRO ;PERFORM ADDRESS CHECKT BR 10$ ;ENTER COMMON CODE +$CKBFW::CALL $ACHCK ;PERFORM ADDRESS CHECK BR 10$ ;ENTER COMMON CODEI+$CKBFB::CALL $ACHKB ;PERFORM ADDRESS CHECK /10$: BCS 50$ ;IF CS ADDRESS CHECK UNSUCCESSFULR% MOV R0,-(SP) ;SAVE ADDRESS OF BUFFER 8 MOV W.BATT(R2),R1 ;GET ADDRESS OF ATTACHMENT DESCRIPTOR- MOV $ATTPT,R0 ;POINT TO ADDRESS OF FIRST ADBF$ TST (R0) ;FIRST ADB POINTER FULL ?/ BNE 40$ ;IF NE YES, CHECK FOR MATCH OR SECOND "20$: MOV R1,(R0) ;FILL IN POINTER7 INCB A.IOC(R1) ;INCREMENT I/O THROUGH ATTACHMENT COUNTN* MOV A.PCB(R1),R0 ;POINT TO ASSOCIATED PCB1 INCB P.IOC(R0) ;INCREMENT I/O INTO 00cnmcmkTADATADATADATADATADATAPARTION COUNT:)30$: MOV (SP)+,R0 ;RESTORE BUFFER ADDRESS: CLC ;INDICATE SUCCESS RETURN ;S440$: CMP R1,(R0)+ ;ALREADY POINTING TO DESIRED ADB ?* BEQ 30$ ;IF EQ YES, DONE, RETURN SUCCESS! TST (R0) ;SECOND POINTER FULL ?E BEQ 20$ ;IF EQ NO, USE IT;/ CMP R1,(R0) ;SECOND POINTER SAME AS DESIRED ?H* BEQ 30$ ;IF EQ YES, DONE, RETURN SUCCESS SEC ;INDICATE FAILURE% MOV (SP)+,R0 ;RESTORE BUFFER ADDRESSN50$: RETURN ;P .DSABL LSBT .PAGE;+C; **-$CEFNG-CONVERT EVENT FLAG AND LOCK GROUP GLOBALS FOR DIRECTIVE(=; **-$CEFIG-CONVERT EVENT FLAG AND LOCK GROUP GLOBALS FOR I/OT; >; THIS ROUTINE IS CALLED TO CONVERT AN EVENT FLAG NUMBER TO AN@; EVENT FLAG MASK WORD AND EVENT FLAG MASK ADDRESS. IF THE EVENTC; FLAG IS GROUP GLOBAL, POINT THE GROUP GLOBAL USE COUNT POINTER IN A; SYSTEM COMMON TO THE FLAG WORD RETURNED IN R1. IF R1 IS ODD, R1C>; IS POINTING TO THE SECOND GROUP OF GROUP GLOBAL EVENT FLAGS.;R ; INPUTS:;. ; R0=EVENT FLAG TO BE CONVERTED.7; R3=ADDRESS CONTAINING EVENT FLAG NUMBER ($CEFNG ONLY)(0; R5=TCB ADDRESS OF THE TASK THE EFN APPLIES TO.;L ; OUTPUTS:;,; C=1 IF NO EVENT FLAG NUMBER WAS SPECIFIED. ; R0=ZERO. ; R1=ZERO.L,; C=0 IF AN EVENT FLAG NUMBER WAS SPECIFIED.; R0=EVENT FLAG MASK WORD.B; R1=EVENT FLAG MASK ADDRESS.-; R1 IS EVEN IF THE EVENT FLAG NUMBER < 81.O,; R1 IS ODD IF THE EVENT FLAG NUMBER > 81.;N<; R3 IS PRESERVED ACROSS CALL IF ENTRY AT $CEFIG, ELSE R3 IS; ADVANCED BY 2.F; ;- .ENABL LSB +$CEFIG::CALL $CEFI ;CONVERT THE EVENT FLAG  BR 5$ ;JOIN COMMON CODE +$CEFNG::CALL $CEFN ;CONVERT THE EVENT FLAG5$: ;REFERENCE LABELG .IF DF G$$GEF BCS 30$ ;IF CS RETURNE BNE 30$ ;IF NE RETURNL- MOV R1,-(SP) ;SAVE GROUP GLOBAL MASK ADDRESS - TSTB -(R1) ;POINT TO GROUP GLOBAL USE COUNTI) TSTB -(R1) ;R1 MAY BE ODD - CLEAR C-BIT * ASSUME G.CNT+2,G.EFLG ;MUST BE CONTIGUOUS$ BIT #1,R1 ;USING SECOND MASK WORD?1 BEQ 10$ ;IF EQ NO, WE ARE POINTING TO USE COUNT, SUB #3,R1 ;POINT TO GROUP GLOBAL USE COUNT910$: MOV R1,@#$GEFPT ;LOAD GROUP GLOBAL USE COUNT POINTERA. MOV (SP)+,R1 ;RESTORE EVENT FLAG MASK ADDRESS4 MOV R5,$GFTCB ;DISPATCHER WILL MAINTAIN THE CORRECT; ADD #T.GGF,$GFTCB ; GRP GBL USE COUNT PER TASK W/THIS PNTRB .ENDC ; DF G$$GEF 30$: RETURN .DSABL LSB ;+ T2; **-$CEFN-CONVERT EVENT FLAG NUMBER FOR DIRECTIVE,; **-$CEFI-CONVERT EVENT FLAG NUMBER FOR I/O;I>; THIS ROUTINE IS CALLED TO CONVERT AN EVENT FLAG NUMBER TO ANA; EVENT FLAG MASK WORD AND EVENT FLAG MASK ADDRESS. IF AN ILLEGAL,A; EVENT FLAG IS SPECIFIED, THEN A DIRECTIVE STATUS OF 'D.RS97' ISO@; RETURNED. ELSE THE EVENT FLAG NUMBER IS CONVERTED AND THE COM-*; PONENT PARTS ARE RETURNED TO THE CALLER.;E ; INPUTS:T; '; R0=EVENT FLAG NUMBER TO BE CONVERTED.:6; R3=ADDRESS CONTAINING EVENT FLAG NUMBER ($CEFN ONLY)0; R5=TCB ADDRESS OF THE TASK THE EFN APPLIES TO.;T ; OUTPUTS:;B,; C=1 IF NO EVENT FLAG NUMBER WAS SPECIFIED. ; R0=ZERO.T ; R1=ZERO.T,; C=0 IF AN EVENT FLAG NUMBER WAS SPECIFIED.; R0=EVENT FLAG MASK WORD. ; R1=EVENT FLAG MASK ADDRESS.&; R1 IS EVEN IF THE EVENT FLAG < 81.%; R1 IS ODD IF THE EVENT FLAG > 81.V*; Z=1 IF GROUP GLOBAL EVENT FLAG CONVERTED-; Z=0 IF LOCAL OR COMMON EVENT FLAG CONVERTEDE;FJ; R3 IS PRESERVED ACROSS CALL IF ENTRY AT $CEFI, ELSE R3 IS ADVANCED BY 2.;-,$CEFN:: MOVB (R3)+,R0 ;GET EVENT FLAG NUMBER INC R3 ;ADVANCE TO NEXT WORD$CEFI:: ;REFERENCE LABEL  .IF DF G$$GEF( CLR -(SP) ;INIT GROUP GLOBAL INDICATOR .IFTF ; DF G$$GEF MOV R0,R1 ;COPY EFNO SEC ;ASSUME NONE SPECIFIEDR! BEQ 30$ ;IF EQ NO EFN SPECIFIEDL DEC R0 ;BACK OFF EFN BY ONEE MOV #32.,R2 ;SET EFN DIVIDER* MOV R5,R1 ;POINT TO FIRST TASK MASK WORD ADD #T.EFLG,R1 ;A CMP R0,R2 ;IN TASK EFN SET?R BLO 10$ ;IF LO YES$ SUB R2,R0 ;NORMALIZE TO COMMON SET CMP R0,R2 ;LEGAL EFN?+ .IFT ; DF G$$GEFU BLO 5$ ;IF LO YES * SUB R2,R0 ;NORMALIZE TO GROUP GLOBAL SET CMP R0,R2 ;LEGAL EFN?- BHIS 40$ ;IF HIS NOL6 CALL $GTGEF ;GET ADDRESS OF GROUP GLOBAL00cn0mal8bl EVENT FLAGS2 BCS 40$ ;IF CS NO SUCH FLAG OR TASK CHECKPOINTED$ DEC (SP) ;FLAG THAT FLAG WAS FOUND BR 10$ ;USE GROUP GLOBAL SET .IFF ; DF G$$GEF, BHIS 40$ ;IF HIS NOM .IFTF ; DF G$$GEF35$: MOV #$COMEF,R1 ;POINT TO FIRST COMMON MASK WORDO10$: ASR R2 ;HALVE DIVIDERT CMP R0,R2 ;FIRST MASK WORD?L BLO 20$ ;IF LO YES SUB R2,R0 ;NORMALIZE EFN& TST (R1)+ ;POINT TO SECOND MASK WORD .IFT ; DF G$$GEFL$ TST (SP) ;GROUP GLOBAL FLAG FOUND? BEQ 20$ ;IF EQ NOS* INC R1 ;MARK AS SECOND GROUP GLOBAL WORD .IFTF ; DF G$$GEF'20$: ASL R0 ;CONVERT EFN TO WORD INDEXW( MOV $BTMSK(R0),R0 ;GET PROPER MASK WORD30$: ;REFERENCE LABEL .IFT ; DF G$$GEF1 INC (SP)+ ;CLEAN STACK, PRESRV C-BIT, SET Z BITF .ENDC ; DF G$$GEF RETURNR(40$: DRSTS D.RS97 ;SET DIRECTIVE STATUS .PAGE;+2; **-GTGEF-GET ADDRESS OF GROUP GLOBAL EVENT FLAGS;1D; THIS ROUTINE SEARCHES FOR GROUP GLOBAL EVENT FLAGS FOR A SPECIFIED@; TASK. IF THE EVENT FLAG EXISTS, THE ADDRESS OF THE EVENT FLAG ; WORD IS RETURNED IN R1..;F ; INPUTS:F;; R5=TCB ADDRESS OF TASK.O;R ; OUTPUTS:;$-; C=0 IF GROUP GLOBAL EVENT FLAGS WERE FOUND F); R1=ADDRESS OF GROUP GLOBAL EVENT FLAGS(;+;; C=1 IF THE EVENT FLAGS WERE NOT FOUND OR IF THE SPECIFIEDF; TASK IS CHECKPOINTED.9;;;- E .IF DF G$$GEF$$GTGEF::MOV R0,-(SP) ;SAVE REGISTERS MOV R4,-(SP) ;S. MOV T.PCB(R5),R4 ;GET TASK REGION PCB ADDRESS8 BIT #PS.OUT!PS.CKP,P.STAT(R4) ;TASK HEADER ACCESSIBLE ? SEC ;ASSUME IT WASE BNE 10$ ;IF NE YES .IF DF X$$HDR1 MOV KISAR6,-(SP) ;SAVE MAPPING IN CASE XTRNL HDR ( MOV P.HDR(R4),-(SP) ;GET HEADER ADDRESS BNE 5$ ;IF NE RESIDENT HEADER - MOV P.REL(R4),KISAR6 ;MAP TO EXTERNAL HEADERE- MOV #140000,(SP) ;SET HEADER VIRTUAL ADDRESS)5$: MOV (SP)+,R4 ;RETRIEVE HEADER ADDRESS' MOVB H.CUIC+1(R4),R4 ;GET GROUP NUMBERA+ MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING) .IFF ; DF X$$HDRP* MOV P.HDR(R4),R4 ;GET TASK HEADER ADDRESS' MOVB H.CUIC+1(R4),R4 ;GET GROUP NUMBER  .ENDC ; DF X$$HDR2 CALL $SRGEF ;SEARCH FOR GROUP GLOBAL EVENT FLAGS BCS 10$ ;IF CS NOT FOUND+ ADD #6,R1 ;POINT TO FIRST EVENT FLAG WORD $10$: MOV (SP)+,R4 ;RESTORE REGISTERS MOV (SP)+,R0 ;  RETURNH E .PAGE;+/; **-$SRGEF-SEARCH FOR GROUP GLOBAL EVENT FLAGSS; ?; THIS ROUTINE IS CALLED TO SEARCH FOR GROUP GLOBAL EVENT FLAGSM;A ; INPUTS:+;S; R4=GROUP NUMBERU;A ; OUTPUTS:; 5; C=1 IF SPECIFIED GROUP GLOBAL EVENT FLAGS NOT FOUNDE5; C=0 IF SPECIFIED GROUP GLOBAL EVENT FLAGS ARE FOUND;'; R0=ADDRESS OF WORD POINTING TO BLOCKR; R1=ADDRESS OF THE BLOCK;$;- S:$SRGEF::MOV #$GGEF,R1 ;GET ADDRESS OF GROUP GLOBAL EF HEAD.10$: MOV R1,R0 ;SAVE POINTER TO CURRENT BLOCK( MOV (R1),R1 ;GET ADDRESS OF NEXT BLOCK BEQ 20$ ;IF EQ END OF LIST. CMPB G.GRP(R1),R4 ;IS THIS THE CORRECT BLOCK? BEQ 30$ ;IF EQ YES BLO 10$ ;IF LO KEEP SEARCHING4+20$: SEC ;SET CARRY TO INDICATE NOT FOUNDS30$: RETURN ;O  .ENDC ; DF G$$GEF .PAGE;+?; **-$CVDVN-CONVERT DEVICE NAME AND LOGICAL UNIT TO UCB ADDRESS ;N3; THIS ROUTINE TAKES A 2 CHARACTER ASCII NAME AND AS4; UNIT NUMBER AND SEARCHES THE DEVICE TABLES TO FIND ; THE CORRESPONDING UCB ADDRESS.; ; INPUTS:B;K%; R0=TWO CHARACTER ASCII DEVICE NAME.O; R1=UNIT NUMBER.Q;D ; OUTPUTS:; ; C=0 IF DEVICE WAS FOUND.; R2=UCB ADDRESS.; R3=DCB ADDRESS.; C=1 IF DEVICE NOT FOUND.;0;- $CVDVN::SAVNR ;SAVE REGISTERSS0 MOV #$SCDVT,-(SP) ;SET UP TO SCAN DEVICE TABLES*10$: CALL @(SP)+ ;GET ADDRESS OF NEXT DCB BCS 100$ ;IF CS END OF LIST4 CLR S$$SPC(SP) ;SET UP TO SKIP THIS DCB IF NO MATCH& CMP D.NAM(R3),R0 ;DEVICE NAMES MATCH? BNE 10$ ;IF NE NOH5 CMPB D.UNIT+1(R3),R1 ;UNIT ASSOCIATED WITH THIS DCB?T BLO 10$ ;IF LO NOV CMPB D.UNIT(R3),R1 ;MAYBE BHI 10$ ;IF HI NO " ADD #S$$SPA,SP ;ABORT DEVICE SCAN& MOV R5,R2 ;COPY ADDRESS OF FIRST UCB MOV R1,R5 ;COPY UNIT NUMBER 4 SUB D.UNIT(R3),R5 ;CALCULATE NUMBER OF UCBS TO SKIP CLC ;INDICATE SUCCESS'20$: DECB R5 ;IS THIS THE CORRECT UCB?E BLT 100c%nmcmkTADATADATADATADATADATA00$ ;IF LT YESC% ADD D.UCBL(R3),R2 ;POINT TO NEXT UCB  BR 20$ ;CONTINUE SCANT100$: RETURN ; .PAGE;+ ; **-$TICLR-CLEAR TI: ASSIGNMENT;CC; THIS ROUTINE IS CALLED TO CLEAR THE TI: ASSIGNMENT OF THE CURRENTO<; TASK IN CASE THE CURRENT TASK'S TI: IS A VIRTUAL TERMINAL.;S ; INPUTS:T;V; NONE.;V ; OUTPUTS:;D; R0-R3 ARE MODIFIED.V;- C .IF DF V$$TRM!C$$RTKD I7$TICLR::MOV $TKTCB,R3 ;PICK UP CURRENT TASK TCB ADDRESSA S$ .IF DF C$$RTK ;REMOTE TASK SUPPORT T3 BIT #F5.RTK,$FMSK5 ;REMOTE TASK SUPPORT TURNED ON?O BEQ 130$ ;IF EQ NOC CMPB T.LBN(R3),$RMTSK ;IS IT ONE OF THE STATIC REMOTE TASKS - OR -I* ; IF ZERO, IT HAS NEVER ASSIGNED A LUN BLOS 130$ ;IF LOS, YES; CMPB T.LBN(R3),#-1 ;HAS THIS TASK BEEN TERMINATED ALREADY?R9 BEQ 130$ ;IF EQ YES, NO NEED TO CLEAR LUNS OR TERMINATE: ; TASK AGAIN MOV R5,-(SP) ;SAVE REGF MOV KISAR6,-(SP) ;SAVE MAPPINGO. MOV $SAHDB,KISAR6 ;MAP HEADER OF CURRENT TASK MOV R3,R5 ;COPY TCB ADDRESS $ MOV $SAHPT,R1 ;POINT TO TASK HEADER( ADD #H.NLUN,R1 ;POINT TO NUMBER OF LUNS! MOV (R1)+,R3 ;GET NUMBER OF LUNS;- BEQ 125$ ;IF NONE, DON'T NEED TO CLEAR LUNS 90$: MOV (R1),R0 ;GET UCB ADDRESS BEQ 110$ ;IF EQ, NOT ASSIGNEDC# CALL $MPLND ;FOLLOW ALL REDIRECTS ( CMP (R0),$XXLOW ;IS IT A GENERIC DEVICE BLO 110$ ;IF LO NO( CMP (R0),$XXHGH ;IS IT A GENERIC DEVICE BHI 110$ ;IF HI NO100$:R CLR (R1)+ ;CLEAR TABLE ENTRY CLR (R1)+ ; BR 120$ ;R110$:K( CMP (R1)+,(R1)+ ;DON'T CLEAR THIS ENTRY$120$: SOB R3,90$ ;LOOP FOR ALL LUNS125$: " MOV (SP)+,KISAR6 ;RESTORE MAPPING? MOV #AL$SWS,R0 ;INDICATE WE WANT TO COME BACK WITH CS IF ERRORR MOV #1,R1 ;NEED JUST ONE BLOCK) CALL $CPALO ;ALLOCATE A BLOCK OF CPRBUFC5 BCS 127$ ;IF CS, JUST DON'T DO THE TASK TERMINATIONW MOV KISAR6,-(SP) ;SAVE MAPPING  MOV R0,KISAR6 ;MAP PACKET* MOV #140000,R1 ;POINT TO HEADER OF PACKET1 MOVB #HT$TKN,H$TYPE(R1) ;TASK TERMINATION PACKET1# CLRB H$ICNT(R1) ;INDICATE NO ITEMS1" MOV (SP)+,KISAR6 ;RESTORE MAPPING8 CPSEN$ #SN$DET,R0,#H$SIZE ;SEND TASK TERMINATION PACKET127$:O? CLRB T.LBN(R5) ;CLEAR TASK INDEX SO TASK DOESN'T TRY ANYTHING S ; WITHOUT A TASK START U MOV R5,R3 ;RESTORE TCB ADDRESS MOV (SP)+,R5 ;RESTORE REG .ENDC ;C$$RTK .IF DF V$$TRM 130$: * MOV T.UCB(R3),R0 ;PICK UP TI: UCB ADDRESS' MOV (R0),R1 ;POINT TO TI: DCB ADDRESS . CMP D.NAM(R1),#"VT ;IS IT A VIRTUAL TERMINAL? BNE 150$ ;IF NE NO C .IF DF D$$PAR R MOV KINAR5,-(SP) ;SAVE APR 5P2 MOV $DRAPR,KINAR5 ;MAP TO THE DIRECTIVE PARTITION E .ENDC 1 CALL $CVTLN ;CLEAR OUT ANY LUNS ASSIGNED TO VT:T, DECB U.OCNT(R0) ;REDUCE VT: OFFSPRING COUNT2 BNE 140$ ;IF NE THERE ARE OTHER ACTIVE OFFSPRING5 TST U.PTCB(R0) ;IS VT: UNIT MARKED FOR DEALLOCATION? BNE 140$ ;IF NE NO MOV R3,-(SP) ;SAVE TCB ADDRESST& CALL $DEAVT ;DEALLOCATE THE VT: UNIT" MOV (SP)+,R3 ;RESTORE TCB ADDRESS140$: ;REFERENCE SYMBOL B .IF DF D$$PAR " MOV (SP)+,KINAR5 ;RESTORE MAPPING P .ENDC   MOV $COPT,R0 ;POINT TO CO: UCBR! CALL $MPLND ;FOLLOW REDIRECTIONC$ MOV R0,T.UCB(R3) ;ASSIGN TI: TO CO: T .ENDC ;V$$TRM150$: RETURN ; .IFFG0$TICLR::RETURN ;NOP ROUTINE IF LACK OF SUPPORT .ENDC .PAGE;+,; **-$MPLNE-MAP LOGICAL UNIT NUMBER FOR EXIT#; **-$MPLUN-MAP LOGICAL UNIT NUMBERC;DK; THIS ROUTINE IS CALLED TO VALIDATE A LOGICAL UNIT NUMBER (LUN) AND TO MAPDD; THE LUN INTO A UCB POINTER. IF AN ILLEGAL LUN IS SPECIFIED, THEN AH; DIRECTIVE STATUS OF 'D.RS96' IS RETURNED. ELSE THE LUN IS MAPPED AND A8; POINTER TO THE LUN AND UCB ARE RETURNED TO THE CALLER.;S ; INPUTS:C;; R3=ADDRESS OF THE LUN./; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.O,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.; ; OUTPUTS:; 4; C=1 IF NO DEVICE IS ASSIGNED TO THE SPECIFIED LUN.; R0=0.3; C=0 IF A DEVICE IS ASSIGNED TO THE SPECIFIED LUN.L&; R0=ADDRESS OF REDIRECTED-TO UCB 5; R2=ADDRESS OF REDIRECTED-TO UCB OR SPOOLED DEVICE H ; @; IN EITHER CASE R1 IS RETURNED AS THE ADDRESS OF THE SECOND LUN2; 00c-n 2n94nblWORD IN THE TASK HEADER AND R3 IS ADVANCED BY 2.;- .ENABL LSBS($MPLUN::CLR R1 ;GET LOGICAL UNIT NUMBER BISB (R3)+,R1 ; INC R3 ;POINT TO NEXT WORD DEC R1 ;BACK OFF LUN BY 1E CMP R1,H.NLUN(R4) ;LEGAL LUN? BHIS 40$ ;IF HIS NOI$$MPLNE::ASL R1 ;MULTIPLY LUN-1 BY 4 ASL R1 ;0 ADD R4,R1 ;CALCULATE ADDRESS OF FIRST LUN WORD! ADD #H.NLUN+2,R1 ;IN TASK HEADERR SEC ;ASSUME LUN NOT ASSIGNED ( MOV (R1)+,R0 ;GET POINTER TO DEVICE UCB# BEQ 30$ ;IF EQ NO DEVICE ASSIGNED 6$MPLND::MOV R0,R2 ;INITIALIZE SPOOLED DEVICE UCB PTR .5$: CMP R0,U.RED(R0) ;IS DEVICE REDIRECTED?  BEQ 10$ ;IF EQ NO . MOV U.RED(R0),R0 ;GET POINTER TO REDIRECT UCB4 BIT #DV.ISP!DV.OSP,U.CW1(R2) ;SPOOLED DEVICE YET? , BEQ $MPLND ;IF EQ NO, ADVANCE R2 AS WELL ) BR 5$ ;ELSE INHIBIT ADVANCEMENT OF R2 ,010$: MOV (R0),-(SP) ;GET ADDRESS OF DEVICE DCB / ADD #D.NAM,(SP) ;POINT TO DEVICE NAME IN DCB T1 CMP #"TI,@(SP)+ ;TERMINAL INPUT PSEUDO DEVICE? B BNE 20$ ;IF NE NO I* MOV T.UCB(R5),R0 ;GET ADDRESS OF "TI" UCB BR $MPLND ; $20$: CLC ;INDICATE DEVICE ASSIGNED30$: RETURN ; (40$: DRSTS D.RS96 ;SET DIRECTIVE STATUS .DSABL LSBR .PAGE;+*; **-$TKWSE-TASK WAITFOR SIGNIFICANT EVENT;CM; THIS ROUTINE IS CALLED TO EXECUTE A WAITFOR SIGNIFICANT EVENT DIRECTIVE FORD-; THE CURRENT TASK FROM WITHIN THE EXECUTIVE.D;S ; INPUTS:D; ; NONE..;, ; OUTPUTS:;DC; A WAITFOR SIGNIFICANT EVENT DIRECTIVE IS EXECUTED FOR THE CURRENT .; TASK AND A RETURN TO THE CALLER IS EXECUTED.;-6$TKWSE::MOV $TKTCB,R5 ;GET ADDRESS OF CURRENT TASK TCB;+%; **-$DRWSE-WAITFOR SIGNIFICANT EVENTS;RE; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SUSPEND THE EXECUTION OF THEA0; ISSUING TASK UNTIL THE NEXT SIGNIFICANT EVENT.;A ; DPB FORMAT: ;A"; WD. 00 -- DIC(49.),DPB SIZE(1.).; ; INPUTS:N;A9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK..+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.A,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;5; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK);+$; C=0 WITH A DIRECTIVE STATUS OF +1.;-7$DRWSE::MOV T.ACTL(R5),R0 ;GET TCB ADDRESS OF NEXT TASKE6 MOV R5,$SIGFL ;SET TASK WAITING FOR SIGNIFICANT EVENT4 CALLR $SETRQ ;FORCE REDISPATCHING OF THE PROCESSOR .END(1.).; ; INPUTS:N;A9; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK..+; R3=ADDRESS OF THE LAST WORD IN THE DPB+2. /; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK.A,; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.;5 .TITLE EXPOLT .IDENT /02/ C;2 ; COPYRIGHT (C) 1978, 1979, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED 9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.E;T ; VERSION 02;I; T. J. MILLER 23-OCT-77;EF; THIS MODULE STARTS THE POOL IN SYSTEMS SUPPORTING KERNEL DATA SPACE.;R; MODIFIED BY:; ; D. R. DONCHIN 23-NOV-81R; /; DD134 -- ALWAYS DEFINE $POOL IN EXPOL MODULE1;R S.$POOL:: ;REFERENCE LABEL FOR BOTTOM OF POOL  .IF DF K$$DAS 1$SYBEG::.WORD 0 ;LINK TO NEXT BLOCK IN FREE LISTO4 .WORD <<+3>&177774> ;LENGTH OF FREE BLOCK< .BLKB <<+3>&177774>-4 ;ALLOCATE REMAINING STORAGE%$SYTOP:: ;LAST ADDRESS IN EXECUTIVE E .ENDC I  .ENDILLER 23-OCT-77;EF; THIS MODULE STARTS THE POOL IN SYSTEMS SUPPORTING KERNEL DATA SPACE.;R; MODIFIED BY:; ; D. R. DONCHIN 23-NOV-81R; /; DD134 -- ALWAYS DEFINE $POOL IN EXPOL MODULE1;R S.$POOL:: ;REFERE .TITLE IISRVL .IDENT /03.00/T -;,; COPYRIGHT (c) 1974, 1978, 1979, 1980, 1984/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.L;TA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED 9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.M;(;+; K. E. KINNEAR 11-NOV-77; ; MODIFIED BY:;Y; J. W. BERZLE 08-SEP-83 03.00;C2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES; ;F.; INTERPROCESSOR INTERRUPT SERVICE SUBROUTINES;P; MACRO LIBRARY CALLSE;X S0095nmcmkTADATADATADATADATADATA  .IF DF M$$PRO D .MCALL HWDDF$,BGCK$A $ HWDDF$ ;DEFINE HARDWARE REGISTERS 4; &; IIST CSR DEFINITIONS AND STATUS BITS;S -PGTE=0 ;PROGRAM GENERATED TRANSMIT ENABLESE D PGCS=1 ;PROGRAM GENERATED CSRGO=1 ;PGCS GO BITIE=4 ;PGCS INTERRUPT ENABLE IP=10 ;PGCS INTERRUPT PENDING(RDY=4000 ;PGCS READY TO ACCEPT COMMAND$ERR=100000 ;PGCS ERROR SUMMARY BIT I'STTE=2 ;SANITY TIMER TRANSMIT ENABLEE RSTCS=3 ;SANITY TIMER CSRSENB=1 ;STCS ENABLE COUNT STP=2 ;STCS STOP COUNT*LKE=4 ;STCS LOCKUP PROCESSOR IF TIMEOUT A.IMSK=4 ;INTERRUPT MASK REGISTER - 1=DISABLE D+PGF=5 ;PROGRAM GENERATED INTERRUPT FLAGSR D/STF=6 ;SANITY TIMER INTERRUPT FLAGS REGISTERT C$DCF=7 ;DCLO / DISCONNECT REGISTER NEXC=10 ;EXCEPTION REGISTERI R'MTC=15 ;MAINTENANCE CONTROL REGISTERC T;+D; **-$IISTM-SET ALL INTERPROCESSOR INTERRUPT ENABLE INTERRUPT MASKS.;RK; THIS ROUTINE WILL RESET THE INTERRUPT MASK IN THE IIST FOR THIS PROCESSOR H; AND NOTIFY ALL OTHERS THAT THEIR INTERRUPT MASKS MUST ALSO BE CHANGED.B; WHEN THE ROUTINE RETURNS, ALL PROCESSORS HAVE RESET THEIR MASKS.;A ; INPUTS: ;E3; $IIMSK=DESIRED INTERRUPT MASK FOR ALL PROCESSORS.A;R ; OUTPUTS:;C>; R2=MASK OF PROCESSORS WHO DIDN'T RESET THEIR MASKS (IF ANY).;E; NO REGISTERS ARE PRESERVED.C;- R)$IISTM::CALL $IISLM ;SET THE LOCAL MASKSP) MOV #MP.RSM,R2 ;SET RESET MASKS FUNCTION0 CALLR $IISFA ;SEND FUNCTION TO ALL ONLINE CPUS! ;AND WAIT FOR ACKNOWLEDGEMENTN O;+3; **-$IINIT-INTERPROCESSOR INTERRUPT INITIALIZATIONH7; **-$IIPWF-INTERPROCESSOR INTERRUPT POWERFAIL SERVICE.E; ?; THIS ROUTINE WILL VALIDATE THE EXISTANCE OF AN IIST, AND THEN 9; SET THE LOCAL INTERRUPT MASKS AND THE INTERRUPT ENABLE.E;R ; INPUTS:T;S; NONE.M;S ; OUTPUTS:;; NONE.S;S; NO REGISTERS ARE PRESERVED.M;- $$IINIT:: ;REFERENCE LABEL/$IIPWF::CALL $IISLM ;SET LOCAL INTERRUPT MASKSR$ CALLR $IISIE ;SET INTERRUPT ENABLE S;+5; **-$IISLM-SET LOCAL INTERPROCESSOR INTERRUPT MASKS.N;P@; THIS ROUTINE WILL SET THE LOCAL INTERPROCESSOR INTERRUPT MASKS; TO THE VALUE IN $IIMSK.; ; INPUTS:I;W/; $IIMSK=DESIRED VALUE OF LOCAL INTERRUPT MASK.;E ; OUTPUTS:;E; NONE.K;N#; R0, R1, R2, AND R3 ARE PRESERVED.S;- 9$IISLM::CALL $IIKRB ;GET IIST KRB IF ONLINE, ELSE RETURNA MFPS -(SP) ;SAVE PRIORITYT+ CACHE$ BYPASS ;MAKE SURE WE GET RIGHT ONE;+ MOV $IIMSK,-(SP) ;GET DESIRED MASK SETTINGE CACHE$ RESTOR ;UNBYPASS" MOV (SP),-(SP) ;COPY TOP OF STACK! COM (SP) ;CHANGE STATE FOR IISTI* BIC #177760,(SP) ;MAKE IT PROCESSORS ONLY" BIS #7400,(SP) ;DON'T ALLOW BOOTS MOV (R4),R5 ;GET CSR ADDRESS7 BISB K.PRI(R4),@#PS ;INCREASE PRIORITY, DON'T DECREASEE* MOV #DCF,(R5) ;GET DISCONNECTED CPU FLAGS# MOV 2(R5),-(SP) ;INTO TOP OF STACK / SWAB (SP) ;PUT DISCONNECT FLAGS IN LOWER BYTEP4 BIC $CPMSK,(SP) ;ONLY PROCESSORS THAT WE CARE ABOUT4 BIS (SP),2(SP) ;DISALLOW INTERRUPTS FROM THESE CPUS5 MOV (SP)+,K.CRQ(R4) ;SAVE MASK OF BROKEN CONNECTIONSO1 MOV #IMSK,(R5) ;;;SELECT INTERRUPT MASK REGISTERC( MOV (SP)+,2(R5) ;;;LOAD INTERRUPT MASKS& BIC #177760,(SP) ;;;MAKE IT JUST CPUS+ MOV (SP),-(SP) ;;;DUPLICATE STACK CONTENTSS$ MOV #1,R4 ;;;INITIALIZE ODD PARITY" CLC ;;;SET UP INITIAL CARRY BIT! ROR (SP) ;;;CHECK LOW ORDER BITO& BEQ 20$ ;;;IF EQ THAT ALL THERE WERE" ADC R4 ;;;ACCUMULATE PARITY BITS&10$: ASR (SP) ;;;GET NEXT BIT IN WORD BEQ 20$ ;;;END OF ALL BITS" ADC R4 ;;;ACCUMULATE PARITY BITS BR 10$ ;;;GO BACK FOR MORE20$: ADC R4 ;;;ADD IN LAST BITL$ BIC #177776,R4 ;;;GET ONLY LAST BIT# ASL R4 ;;;PUT IT IN CORRECT PLACEC( MOV #STCS,(R5) ;;;SELECT REGISTER AGAIN MOV R4,2(R5) ;;;SET PARITY BITE# TST (SP)+ ;;;GET RID OF ZERO WORDA/ MOV #STTE,(R5) ;;;GET TRANSMIT ENABLE REGISTERP% MOV (SP)+,2(R5) ;;;LOAD THE REGISTER; MTPS (SP)+ ;;;RESET PRIORITY RETURNC U;+0; **-$IISIE-SET INTERPROCESSOR INTERRUPT ENABLE.;H; THIS ROUTINE WILL CLEAR OUT THE STATUS REGISTERS OF THE INTERPROCESSOR5; INTERRUPT DEVICE AND THEN SET TH009=n2n94nblE INTERRUPT ENABLE.;C ; INPUTS: ;G; NONE.A;B ; OUTPUTS:;;; NONE. ;R-; REGISTERS R0, R1, R2, AND R3 ARE PRESERVED.A;- M;$IISIE::CALL $IIKRB ;GET IIST KRB ADDR IF ONL, ELSE RETURNO MFPS -(SP) ;SAVE PRIORITYT2 BISB K.PRI(R4),@#PS ;RAISE, DON'T LOWER, PRIORITY% MOV (R4),R4 ;;;GET IIST CSR ADDRESSR% MOV #PGCS,(R4) ;;;SELECT PROGRAM CSRE CLR 2(R4) ;;;CLEAR IT OUTA4 MOV #177777,R5 ;;;SET WORD TO CLEAR OUT STATUS BITS+ MOV #EXC,(R4) ;;;SELECT EXCEPTION REGISTERI MOV R5,2(R4) ;;;CLEAR IT OUTN' MOV #DCF,(R4) ;;;SELECT DC/LO REGISTER MOV R5,2(R4) ;;;CLEAR IT OUT . MOV #PGF,(R4) ;;;SELECT PROGRAM FLAG REGISTER MOV R5,2(R4) ;;;CLEAR IT OUT  MOV #PGCS,(R4) ;;;SELECT CSRR& MOV #IE,2(R4) ;;;SET INTERRUPT ENABLE MTPS (SP)+ ;;;RESTORE PRIORITY RETURNY;+$;**-$DISAN-DISABLE ALL SANITY TIMERS;#B; THIS ROUTINE CLEARS $STENB AND THEN $STTIC, DISABLING THE SANITYC; TIMER FOR THE CPU ON WHICH IT IS CALLED. IT SHOULD BE CALLED FROMED; EACH PROCESSOR BEFORE DOING A LONG NON-INTERRUPTIBLE SEQUENCE SUCH ; AS CRASH OR PARITY ERROR STOP.;, ; INPUTS:E; NONE; ; OUTPUTS:; NONE;T; ALL REGISTERS ARE PRESERVED,;-7$DISAN::CALL $SAVNR ;SAVE REGISTERS THAT GET CLOBBEREDE' CLR $STENB ;SET TO DISABLE ALL TIMERS) ;;+.; **-$STTIC-SANITY TIMER INTERRUPT PROCESSING.;AC; THIS ROUTINE IS DESIGNED TO BE CALLED AT EVERY TICK ON EVERY CPU.IC; IT WILL UPDATE THE SANITY TIMER ON THE PARTICULAR PROCESSOR, AND U#; WILL STOP THE TIMER IF NECESSARY.B;R ; INPUTS:O;N;; THIS ROUTINE IS DESIGNED TO BE CALLED FROM CODE EXECUTINGO;; AT A PRIORITY AS HIGH AS OR HIGHER THAN THAT OF THE IIST. ;I ; OUTPUTS:;R; NONE.;D); REGISTERS R0, R1, R2, AND R3 PRESERVED. ;- E$STTIC:: ;REFERENCE LABELB7 CACHE$ SAVE,BYPASS ;BYPASS CACHE TO LOOK AT REAL FLAGST3 TST $STFLG ;ANY REASON TO PROCESS SANITY TIMERS ?L BEQ 30$ ;IF EQ NOE810$: CALL $IIKRB ;GET IIST KRB ADDR IF ONL, ELSE RETURNF;******************************* IIST DEBUGGING CODE ***************** .IF DF L$$DBG E; C; FIND OUT IF THE IIST IS LOCKED UP. TO DO THIS WE WILL SEE IF THESA; IP!IE BITS ARE SET FOR 10 TIMES IN A ROW. IF THEY ARE, WE WILLD; TOGGLE THE IE BIT.;  "15$: MOV (R4),R5 ;GET CSR ADDRESS MOV #PGCS,(R5) ;SELECT CSRE' MOV #IE!IP,-(SP) ;SEE IF BOTH BITS SETG$ BIC 2(R5),(SP)+ ;ARE THEY BOTH SET?' BNE 16$ ;IF NE NO -- START COUNT ANEW1 INC K.CRQ(R4) ;SHOW ONE MORE TIME THAT IE!IP SETE CMP K.CRQ(R4),#10 ;TOO MANY?*) BLE 18$ ;IF LE NO, DO NOTHING THIS TIME* ;.<; IIST IS LOCKED UP. CLEAR AND REENABLE THE IE BIT IN PGCS.;  S$ MOV #PGCS,(R5) ;SELECT THE REGISTER CLR 2(R5) ;CLEAR THE IE * MOV #PGCS,(R5) ;SELECT THE REGISTER AGAIN BIS #IE,2(R5) ;SET THE IE AGAIN.16$: CLR K.CRQ(R4) ;START THE COUNT OVER AGAIN18$: ;REFERENCE LABEL .ENDC ; DF L$$DBGF;******************************* END OF IIST DEBUGGING CODE ********** MOV (R4),R4 ;GET CSR ADDRESS$ MOV #STCS,(R4) ;SELECT SANITY TIMER< BIT $CPBIT,$STENB ;SHOULD WE UPDATE AND ENABLE SANITY TIMER ;ON THIS CPU?A) BEQ 20$ ;IF EQ NO -- STOP SANITY TIMER!3 BIC #4,2(R4) ;TURN OFF SANITY TIMER LOCKOUT ALWAYSE0 MOV #STCS,(R4) ;RE-SELECT SANITY TIMER REGISTER7 MOV #177401,-(SP) ;SET MASK FOR LONGEST TIMER INTERVAL)6 BIT $CPBIT,$STALR ;SHOULD WE ENABLE ALARM AND LOCKOUT BEQ 19$ ;IF EQ NO) BIS #4,(SP) ;SET ALARM ENABLE INTO MASK >19$: BIS (SP)+,2(R4) ;ENABLE SANITY TIMER FOR LONGEST INTERVAL+ CACHE$ UNSAVE ;RESET PRIOR STATE OF CACHE$ RETURNE-20$: BIC #5,2(R4) ;CLEAR SANITY TIMER COUNTER / BIC $CPBIT,$STFLG ;CLEAR TIMER PROCESSING FLAGI/30$: CACHE$ UNSAVE ;RESET PRIOR STATE OF CACHEL RETURNW E;+5; **-$IIOPN-ENABLE THE IIST TO THE REST OF THE WORLD.7;1@; THIS ROUTINE WILL PERFORM A MASTER CLEAR OF THE IIST WHEN THIS@; PROCESSOR GOES OFFLINE. THIS WILL ALLOW ANOTHER PROCESSOR TO B; BOOT AND INTERRUPT THIS ONE AT A LATER TIME. IT WILL ALSO PLACE-; THE IIST KRB OFFLINE IN THE RUNNING SYSTEM. ;S ; INPUTS:A;O; NONE.;T ; OUTPUTS:;#; NONE.C;R-; REGISTER009EnmcmkTADATADATADATADATADATAS R0, R1, R2, AND R3 ARE PRESERVED.A;- ;$IIOPN::CALL $IIKRB ;GET IIST KRB ADDR IF ONL, ELSE RETURNA# MFPS -(SP) ;SAVE CURRENT PRIORITYN, BIS #KS.OFL,K.STS(R4) ;PUT IIST KRB OFFLINE5 BISB K.PRI(R4),@#PS ;RAISE PRIORITY TO HIGHEST POINTW. BIS #100000,@(R4) ;CLEAR OUT IIST COMPLETELY! MTPS (SP)+ ;RESTORE PRIORITY RETURNT U;++; **-$IIKRB-GET IIST KRB ADDRESS IF ONLINE.;HF; THIS ROUTINE WILL GET THE KRB ADDRESS OF THE IIST FOR THIS PROCESSORD; AND WILL DETERMINE IF THE KRB SHOWS ONLINE STATUS. IF IT DOES, THEF; ROUTINE WILL RETURN TO THE CALLER. IF IT DOES NOT, THE ROUTINE WILL ; RETURN TO THE CALLER'S CALLER.;T ; INPUTS:;S!; 0(SP)=RETURN ADDRESS TO CALLER.F*; 2(SP)=RETURN ADDRESS TO CALLER'S CALLER.;I ; OUTPUTS:;B!; IF IIST FOR THIS CPU IS ONLINE:M;T; R4=KRB ADDRESS.; RETURN TO CALLER.;T; ELSE; ; R4=UNDEFINED.; RETURN TO CALLER'S CALLER. ;S; REGISTER R4 IS DESTROYED.R;- T<$IIKRB::MOVB $PROC2,R4 ;GET THIS PROCESSORS PROCESSOR NUMBER1 MOV $IICTB(R4),R4 ;GET KRB ADDRESS FOR THIS IISTR% BIT #KS.OFL,K.STS(R4) ;IS IT ONLINE?H( BEQ 10$ ;IF EQ YES -- RETURN TO CALLER" TST (SP)+ ;REMOVE CALLERS RETURN 10$: RETURNS  L F;+C; **-$IINOT-INTERRUPT ALL ONLINE CPUS AND WAIT FOR ACKNOWLEDGEMENT.SG; **-$IISFA-SEND SPECIFIC FUNCTION TO ALL ONLINE CPUS AND WAIT FOR ACK.;@; THIS ROUTINE WILL INTERRUPT ALL ONLINE CPUS AND WAIT FOR THEIRG; ACKNOWLEDGEMENT OF THE FUNCTION DESIRED. $IISFA WILL SEND A FUNCTIONOC; PASSED AS AN ARGUMENT, WHILE $IINOT WILL SEND A NOP FUNCTION JUSTS;; TO MAKE SURE THAT THE OTHER PROCESSORS CAN HEAR THIS ONE. ;Y ; INPUTS:N; !; R2=FUNCTION CODE ($IISFA ONLY). ;U ; OUTPUTS:;S9; R2=PROCESSORS WHO DIDN'T ACKNOWLEDGE FUNCTION (IF ANY). ;T; R4 AND R5 ARE PRESERVED.;- -($IINOT::MOV #MP.NOP,R2 ;SET NOP FUNCTION,$IISFA::MOV $URMST,R1 ;GET ONLINE PROCESSORS" BIC $CPMSK,R1 ;MAKE IT CPU'S ONLY BIC $CPBIT,R1 ;NOT OURSELVESE" BNE $IIWAK ;IF NE GO DO FUNCTION CLR R2 ;SHOW EVERYTHING IS OKM RETURNE I;+7; **-$IIWAK-SEND FUNCTION AND WAIT FOR ACKNOWLEDGEMENT.T; 8; THIS ROUTINE WILL USE $IIFNX TO TRANSMIT A FUNCTION TO?; A NUMBER OF PROCESSORS, AND IT WILL WAIT A SPECIFIED INTERVAL <; OF TIME FOR THOSE PROCESSORS TO CLEAR OUT THE FUNCTION BIT:; FROM THEIR FUNCTION TABLE. IF THEY DO NOT CLEAR OUT THE5; FUNCTION WITHIN THAT TIME, THIS ROUTINE WILL RETURN$=; A ERROR STATUS, AND THE PROCESSOR MASK(S) FOR THE CPUS THATB; HAVEN'T DONE THEIR JOBS.;N ; INPUTS:;;W$; R1=MASK OF PROCESSORS TO FUNCTION.; R2=FUNCTION MASK.T; ; OUTPUTS:;K(; PROCESSORS HAVE RECEIVED THE FUNCTION.;I/; R2=CPUS WHO DIDN'T ACK THE FUNCTION (IF ANY).C;O); REGISTERS R1, R4, AND R5 ARE PRESERVED.;- M,$IIWAK::MOV R2,-(SP) ;SAVE THE FUNCTION MASK6 CALL $IIFNX ;TRANSMIT THE FUNCTION TO THE OTHER CPUS. MOV (SP)+,R3 ;RESTORE THE FUNCTION MASK TO R3! MOV R4,-(SP) ;SAVE R4 FOR CALLERS- CLR -(SP) ;CREATE TIMEOUT COUNTERS ON STACK( CLR -(SP) ;TIMEOUT IS DOUBLE PRECISION& MOV R1,R2 ;COPY INTERRUPTED CPU MASK ;29; OUTER LOOP -- SET UP TO SCAN THRU THE WHOLE TABLE AGAINE;D E710$: MOV #$MPTAB,R0 ;INITIALIZE POINTER TO TOP OF TABLE " MOV #1,R4 ;SET UP CLEAR BIT MASK A;PG; INNER LOOP -- LOOP THROUGH $MPTAB TO SEE IF PROCESSOR HAS CLEARED BITI;X T.20$: CACHE$ BYPASS ;LOOK AT VALUE OF REAL BIT8 MOV (R0)+,-(SP) ;GET VALUE OF SWITCH TABLE FOR NEXT CPU* CACHE$ RESTOR ;GO BACK TO FAST EXECUTION' BIT R3,(SP)+ ;HAS CPU CLEARED BIT YET?T' BNE 30$ ;IF NE NO -- MUST WAIT LONGERN BIC R4,R2 ;CLEAR OUT CPU BIT BEQ 40$%30$: ASL R4 ;MOVE BIT CLEAR BIT LEFTG# BIC $CPMSK,R4 ;ONLY DEAL WITH CPUSI( BNE 20$ ;IF NE MUST BE MORE PROCESSORS/ ADD #1,2(SP) ;COUNT OF FAILURES TO COMMUNICATE-, ADC (SP) ;HIGH ORDER WORD OF DBL PRECISION% CMP #1,(SP) ;SHOULD WE GIVE UP NOW?S BGT 10$ ;IF GT NOE540$: CMP (SP)+,(SP)+ ;CLEAN TIMEOUT COUNTER OFF STACK $ MOV (SP)+,R4 ;RESTORE R4 FOR CALLER 50$: RETURNN .DSABL LSB) H C;+9; **-$IISVC-INTERPROCESSOR INTERRUPT PENDING URM SERVICE.;CA; TH009Mn2n94nblIS ROUTINE IS USED TO TAKE THE PENDING URM INTERRUPT MASK IN B>; $IIPND AND CONVERT THEM TO PENDING CPU INTERRUPTS IN $IICPU.>; IT WILL THEN INTERRUPT THE NEXT PROCESSOR ROUND ROBIN, USING ; $IINXT.;C ; INPUTS:H;D@; $IIPND CONTAINS MASK BITS FOR ALL UNIBUS RUNS NEEDING SERVICE.;T ; OUTPUTS.;E=; THE URM BITS IN $IIPND HAVE BEEN CONVERTED INTO CPU BITS IN(=; $IICPU, AND USING $IINXT A PARTICULAR CPU HAS BEEN SELECTED=; TO BE INTERRUPTED. $IIXMT HAS BEEN CALLED TO INTERRUPT THEE; SELECTED CPU.U;E; NO REGISTERS ARE PRESERVED.M;- U .ENABL LSB-$IISVC::CACHE$ BYPASS ;FIGURE OUT WORK TO DOU$ MOV $IIPND,R1 ;GET PENDING URM MASK3 BIC $IICPU,R1 ;CLEAR OUT THOSE ALREADY INTERRUPTED CACHE$ RESTOR+ TST R1 ;ANY WORK NOT ALREADY INTERRUPTED?S BEQ 80$ ;IF EQ NO -- EXIT 7 MOV #$URMTB,R0 ;START SCAN THRU CPU URM CONNECTION TBLD, CLR R3 ;CLEAR OUT ACCUMULATOR FOR CPU BITS P410$: BIT R1,(R0)+ ;ARE ANY PENDING RUNS ON THIS CPU? BEQ 20$ ;IF EQ NOL6 BIS $BTMSK-$URMTB-2(R0),R3 ;YES -- SET THIS CPU'S BIT320$: CMP #$URMTB+,R0 ;IS IT END OF TABLE?H BHI 10$ ;IF GT NOT TST R3 ;ANY CPU'S TO INTERRUPT BNE 25$ ;IF NE YES I;,-; NO CPUS TO INTERRUPT. WE SHOULDN'T BE HEREE;E R9 BGCK$A BF.MP,BE.UNP,FATAL ;SOME URM NOT CONNECTED TO CPUI Q; ; INTERRUPT NEXT CPU IN ORDER.;A@; SPECIAL NOTE: $IINXT CONTAINS A POINTER INTO $BTMSK. IT IS A;; COMMON POINTER, YET IS BOTH READ WITHOUT BYPASS (POSSBILYI<; ENCOUNTERING STALE DATA), AND SET WITHOUT LOCKING ANYTHINGD; (POSSIBLY CAUSING MULTIPLE UPDATES). IN BOTH CASES, ONLY A SLIGHT<; PERTURBATION TO THE ROUND ROBIN FAIRNESS DOCTRINE RESULTS.;B@; IT IS ALSO POSSIBLE THAT TWO PROCESSORS MAY INTERRUPT THE SAME?; PROCESSOR, BUT THIS IS UNLIKELY SO NO EXPLICIT CHECK IS MADE.T;T P;25$: MOV $IINXT,R2 ;GET POINTER INTO $BTMSK FOR ROUND ROBINE230$: BIT (R2)+,R3 ;DOES THIS CPU NEED AN INTERRUPT BNE 40$ ;IF NE YES) CMP #$BTMSK+,R2 ;END OF TABLE?N BHI 30$ ;IF HI NO), MOV #$BTMSK,R2 ;START AT TOP OF TABLE AGAIN BR 30$ ;GO BACKU/40$: MOV -(R2),R1 ;GET THE CPU'S BIT FOR $IIXMTA6 MOV R2,$IINXT ;SAVE POINTER INTO $BTMSK FOR RND ROBIN MFPS -(SP) ;SAVE PRIORITYO# MTPS #PR7 ;RAISE PRIORITY TO LOCK  LOCK$ $FORKL,SPIN< BIS $URMTB-$BTMSK(R2),$IICPU ;;;SHOW THESE URMS INTERRUPTED ULOCK$ $FORKL,SPIN  MTPS (SP)+ ;RESTORE PRIORITY B (;+.; **-$IIXMT-INTERPROCESSOR INTERRUPT TRANSMIT.; >; THIS ROUTINE WILL INTERRUPT THE CPU SPECIFIED BY BIT MASK IN); R1, USING THE INTERPROCESSOR INTERRUPT.T;E ; INPUTS: ; 6; R1=PROCESSOR BIT MASK FOR PROCESSOR(S) TO INTERRUPT.;A ; OUTPUTS:;T; NONE.I;R+; R1, R4, AND R5 ARE PRESERVED ACROSS CALL.E;- T0$IIXMT::MOVB $PROC2,R0 ;GET PROCESSOR NUMBER * 2) MOV $IICTB(R0),R3 ;GET KRB ADDRESS OF II;5 BIT #KS.OFL,K.STS(R3) ;IS IIST FOR THIS CPU OFFLINE?P" BNE 80$ ;IF NE YES -- RETURN NOW ;**; CALCULATE PARITY FOR THE PROCESSOR MASK.; H% MOV R1,R2 ;DUPLICATE PROCESSOR MASKF( MOV #1,R0 ;INITIALIZE ODD PARITY IN R0 CLC ;CLEAN OUT CARRY0 ROR R2 ;PUT FIRST BIT IN CARRY -- DONT SIGN EX BEQ 60$ ;NO BITS LEFT! ADC R0 ;BUMP PARITY COUNT 1#50$: ASR R2 ;PUT NEXT BIT IN CARRYL BEQ 60$ ;IF EQ - NO MORE BITS0 ADC R0 ;ACCUMULATE PARITYM BR 50$ ;GO BACK FOR MORE BITS 60$: ADC R0 ;ADD IN LAST BIT;# BIC #177776,R0 ;WE WANT PARITY BIT8$ ASL R0 ;JUSTIFY IN PARITY POSITION* BIS #,R0 ;ADD OTHER IMPORTANT BITS MOV (R3),R2 ;GET CSR OF II MFPS -(SP) ;SAVE PRIORITY 1 BISB K.PRI(R3),@#PS ;RAISE, DON'T LOWER PRIORITYR* CLR R3 ;INITIALIZE INFINITE LOOP COUNTER) MOV #PGTE,(R2) ;;;SELECT DEVICE REGISTER  MOV R1,2(R2) ;;;SET IT UP$70$: MOV #PGCS,(R2) ;;;SELECT II CSR1 ADD #1,R3 ;COUNT NUMBER OF TIMES WE HAVE LOOPEDE' BCS 75$ ;IF OVERFLOW, FORGET THE IIST  BIT #RDY,2(R2) ;;;IS IT READY BEQ 70$ ;;;IF EQ NO -- WAITT. MOV #PGCS,(R2) ;;;YES -- FIND REGISTER AND GO, MOV R0,2(R2) ;;;YES -- LOAD FUNCTION AND GO0 TALLY$ B.IPSN,XA$$IP,CPU ;COUNT AN IP INTR SENT"75$: MTPS (SP)+ ;RESTORE PRIORITY 80$: R009UnmcmkTADATADATADATADATADATAETURNT ;+); **-$IBXMT-INTERPROCESSOR BOOT TRANSMIT.V;GA; THIS ROUTINE WILL BOOT THE PROCESSORS SPECIFIED BY THE BIT MASK:; IN R1.;2 ; INPUTS: ;C.; R1=PROCESSOR BIT MASK TO PROCESSORS TO BOOT.;E ; OUTPUTS:;I; NONE.W;O+; R1, R4, AND R5 ARE PRESERVED ACROSS CALL.Y;- 7-$IBXMT::SWAB R1 ;PLACE BITS IN CORRECT PLACES% CALL $IIXMT ;TRANSMIT BOOT REQUESTS ( SWAB R1 ;RESTORE R1 TO ORIGINAL PURITY RETURN$ ,; ,; MISC. INTERRUPT SERVICE SPECIAL PROCESSING;R R;I; JUMP OFF TO PROCESSOR ENTRY.;M N0$CPBGN::NOP ;LET OPERATOR CONTINUE (DEBUGGING)" JMP $PENT ;GO TO PROCESSOR ENTRY E;T&; ERROR SENSED IN IIST FLAG REGISTERS.;P E7ERROR: BGCK$A BF.MP,BE.FHW,FATAL ;CAN'T HANDLE THIS YET O;W,; NO ERRORS OR INTERRUPTS -- WHY ARE WE HERE;Y -7NOINT: BGCK$A BF.MP,BE.NIN,FATAL ;NO IMPLEMENTATION YETL .DSABL LSBA I O;+8; **-$IIINT-INTERRPROCESSOR INTERRUPT INTERRPUT SERVICE.;<; THIS ROUTINE ACCEPTS INCOMMING INTERRUPTS FROM THE II. IT>; WILL, IF THE PROPER BIT IS CLEAR IN $IIWAT, REPORT RECEPTION9; OF THE INTERRUPT TO ALL WAITING PROCESSORS AND LOAD ITSE:; INTERRUPT MASKS. OTHERWISE, IT WILL SIMPLY EXIT THROUGHC; $FORK THROUGH $DIRXT. NOTE: THE INTERRUPT VECTOR FOR THE II MUST >; UNIQUELY DETERMINE THE CSR ADDRESS (I.E. CSR=F(VEC)) FOR THE'; INITIALIZATION CODE TO WORK PROPERLY!E; ; INPUTS:A;I#; PS=CONTROLLER ID IN LOWER 4 BITS. ;E ; OUTPUTS:; ; NONE.;B; EXECUTES AT INTERRUPT LEVEL, AND AT EXEC LEVEL. OBSERVES PROPER(; REGISTER CONVENTIONS FOR THOSE LEVELS.;- C .ENABL LSBT/$IIINT::MFPS -(SP) ;;;SAVE CONDITION CODE BITST ;N>; THIS IS A POSSIBLE ENTRY FOR CPU STARTUP, WHEN THE PROCESSOR@; STARTING UP IS INTERRUPTED OUT OF THE BOOTSTRAP AND THRU CPA'SA; LOCAL MEMORY (AND VECTORS). IF CPA IS ONLINE AT THE TIME, THENA>; ITS IIST VECTOR POINTS TO THIS ROUTINE. SINCE THE BOOTSTRAP@; TURNS OFF MAPPING PRIOR TO ENABLING INTERRUPTS, THE FACT THAT A; THE MAPPING IS TURNED OFF IS A SIGNAL TO THIS ROUTINE THAT THISE?; IS A CPU STARTUP, AND WE SHOULD JUMP TO $CPBGN (AND THENCE TOT ; $PENT).);; V# BIT #1,SR0 ;;;IS MAPPING ENABLED?S- BEQ $CPBGN ;;;IF EQ NO -- PROCESSOR STARTUPP. MTPS (SP)+ ;;;RESTORE PS CONDITION CODE BITS1 INTSV$ II,PR6,M$$PRO ;;;DO NORMAL INTERRUPT SAVET0 TALLY$ B.IPRC,XA$$IP,CPU ;COUNT AN IP INTR RCVDF;********************************* IIST DEBUGGING CODE ***************. CLR K.CRQ(R5) ;;;CLEAR OUT COUNTER FOR $STTICF;********************************* END IIST DEBUGGING CODE ***********& MOV (R5),R4 ;;;GET CSR ADDRESS OF II, MOV R5,-(SP) ;;;SAVE KRB ON STACK FOR LATER+ MOV #EXC,(R4) ;;;SELECT EXCEPTION REGISTERE MOV 2(R4),R5 ;;;GET ALL BITSP+ MOV #EXC,(R4) ;;;SELECT EXCEPTION REGISTERI# MOV R5,2(R4) ;;;CLEAR ALL RECEIVEDR3 BIC #177400,R5 ;;;CLEAR OUT ALL BUT THE RTE ERRORSI BEQ 5$ ;;;IF EQ NO ERRORS*- MOV (SP),R5 ;;;GET KRB ADDRESS FOR IIST KRB*/ INC K.CRQ+2(R5) ;;;INCREMENT RTE ERROR COUNTER 25$: MOV #DCF,(R4) ;;;SELECT DC / LO FLAGS REGISTER MOV 2(R4),R5 ;;;GET ALL BITS/ MOV #DCF,(R4) ;;;SELECT DC / LO FLAGS REGISTER( MOV R5,2(R4) ;;;CLEAR ALL BITSR2 BIC #177400,R5 ;;;USE ONLY THE DCF BITS (NOT BRK) BEQ 10$ ;;;IF NO DCF CHANGES" MOV R4,-(SP) ;;;SAVE CSR ON STACK. CALL $IISLM ;;;SET THE LOCAL INTERRUPT MASKS MOV (SP)+,R4 ;;;RESTORE R4B710$: MOV #STF,(R4) ;;;SELECT SANITY TIMER FLAG REGISTERP MOV 2(R4),R5 ;;;GET FLAGS' MOV #STF,(R4) ;;;SELECT REGISTER AGAIN  MOV R5,2(R4) ;;;CLEAR THEM OUT( BEQ 30$ ;;;IF EQ OKL% BIC #177760,R5 ;;;MAKE IT CPU'S ONLYBA BGCK$A BF.SAN,BE.FHW,DIRECT2 ;;;CRASH WITH SANITY TIMER MESSAGE4830$: MOV #PGF,(R4) ;;;SELECT INTERRUPT RECEIVED MASK REG2 MOV 2(R4),R5 ;;;GET MASK OF THOSE WHO INTERRUPTED" MOV #PGF,(R4) ;;;SELECT PGF AGAIN3 MOV R5,2(R4) ;;;CLEAR THOSE BITS TO SHOW RECEPTION+); BEQ NOINT ;;;IF EQ NO INTERRUPTS FOUNDE+ MOV R5,-(SP) ;;;SAVE THOSE WHO INTERRUPTEDR) MOV #PGCS,(R4) ;;;SELECT II CSR REGISTERG CLR 2(R4) ;;;CLEAR IT OUT;) MOV #PGCS,(R4) ;;;SELECT II CSR REGISTERB& MOV #IE,2(R4) ;;;SE009]n2n94nblT INTERRUPT ENABLE CACHE$ BYPASS# MOV @$MPSWT,R5 ;GET FUNCTION TABLEE CACHE$ RESTOR; BIC #MP.INT,R5 ;ONLY PROCESSOR THOSE TO BE DONE AT INT LVLR BEQ 35$ ;IF EQ NONE TO PROCESS( MOV (SP),R4 ;GET THOSE WHO INTERRUPTED CALL $IIFNC ;EXECUTE FUNCTIONS%35$: MOV (SP)+,R5 ;GET INTERRUPT MASK;% MOV (SP)+,R4 ;;;GET KRB ADDRESS BACKP* TST K.FRK+2(R4) ;;;HAVE WE A FORK QUEUED? BEQ 40$ ;;;IF EQ NO -- GO FORK3 BIS R5,K.FRK+4(R4) ;;;ADD OUR CPUS TO CURRENT FORKC RETURNR S;B; QUEUE FORK BLOCK;  E.40$: ADD #K.FRK+6,R4 ;;;POINT TO LAST WORD + 2' CALL $FORK1 ;;;EXIT THRU FORK ROUTINE# I;R; EXECUTIVE LEVEL SERVICE.;O A& SUB #,R3 ;CREATE KRB ADDRESS7 MTPS K.PRI(R3) ;RAISE PRIORITY TO BLOCK II INT SERVICEF. CLR K.FRK+2(R3) ;;;SHOW FORK BLOCK NOT IN USE: BIS K.FRK+4(R3),R5 ;;;GET ANY ADDITIONAL BITS FROM WINDOW MTPS #0 ;;;LOWER PRIORITYK/ MOV R5,R4 ;PUT INTERRUPT MASK IN PROPER PLACER CACHE$ BYPASS" MOV @$MPSWT,R5 ;GET FUNCTION MASK CACHE$ RESTOR TST R5 ;PROCESS FUNCTIONS: BEQ 50$ ;IF EQ NOTHING TO DO CALL $IIFNC 50$: RETURN; .DSABL LSBR O;+,; **-$IIFNC-EXECUTE INTERPROCESSOR FUNCITON.;S>; THIS ROUTINE WILL TAKE A FUNCTION MASK IN R5 AND EXECUTE ALL?; FUNCTIONS CORRESPONDING TO THE BITS SET IN THE MASK. IT WILLC; USE THE JUMP TABLE AT $MPDSP. ;G ; INPUTS:T;A/; R4=PROCESSORS THAT HAVE INTERRUPTED THIS ONE.&; R5=FUNCTION MASK FOR THIS PROCESSOR.;L ; OUTPUTS:;Y:; ALL OF THE FUNCTIONS SPECIFIED IN THE FUNCTION MASK HAVE; BEEN EXECUTED.;I; R0, R1, R2, R3 ARE PRESERVED. ;- L$IIFNC::MOV R3,-(SP) ;SAVE R3 ( MOV R4,-(SP) ;SAVE R4 FOR OUR USE LATER" MOV #100000,R4 ;SET UP CLEAR MASK( MOV #$MPDSP,R3 ;SET START OF JUMP TABLE A-10$: ASL R5 ;PICK UP NEXT BIT FROM LEFT SIDEN% BCC 20$ ;IF CC NO FUNCTION THIS BITB A;M"; WE FOUND A FUNCTION FOR THIS BIT;S  MOV R5,-(SP) ;SAVE R5 MOV R4,-(SP) ;SAVE R4 MOV R3,-(SP) ;SAVE R3 L; /; CALL FUNCTION SUBROUTINE FROM DISPATCH TABLE. ; <; THE FUNCTION SUBROUTINES CALLED FROM INTERRUPT LEVEL HAVE ;; R3, R4, AND R5 AVAILABLE FOR USE. THOSE CALLED FROM EXEC,%; LEVEL HAVE ALL REGISTERS AVAILABLE.#;0 ; INPUTS:U;L); R4=MASK OF PROCESSORS THAT INTERRUPTED.P;B 1 MOV 6(SP),R4 ;PUT PROCESSOR INTERRUPT MASK IN R41 CALL @(R3) ;CALL SUBROUTINE FROM DISPATCH TABLEE MOV (SP)+,R3 ;RESTORE R3B MOV (SP)+,R4 ;RESTORE R4S MFPS -(SP) ;SAVE PRIORITY4. MTPS #PR7 ;DON'T GET INTERRUPTED DURING LOCK- LOCK$ $IIFNL,SPIN ;;;LOCK THE FUNCTION TABLEU) BIC R4,@$MPSWT ;;;CLEAR OUT OUR FUNCTIONV0 ULOCK$ $IIFNL,SPIN ;;;UNLOCK THE FUNCTION TABLE$ MTPS (SP)+ ;;;RESTORE THE PRIORITY MOV (SP)+,R5 ;RESTORE R5&20$: BEQ 30$ ;IF EQ NO MORE FUNCTIONS$ TST (R3)+ ;BUMP JUMP TABLE POINTER$ ROR R4 ;POINT AT NEXT BIT TO CLEAR BNE 10$ ;IF NE MORE TO TRY/ ;(THIS WILL NEVER FALL THRU - R5 = 0 FIRST)R630$: MOV (SP)+,R4 ;RESTORE R4 (NOT REALLY NECESSARY -- ;COULD BE TST (SP)+G MOV (SP)+,R3 ;RESTORE R3 RETURNI ,;+-; **-$IIFNX-INTERPROCESSOR FUNCTION TRANSMIT.;;E=; THIS ROUTINE WILL LOAD THE BIT IN THE FUNCTION MASK FOR THEN;; APPROPRIATE PROCESSOR AND WILL INTERRUPT THE PROCESSOR(S)R?; DIRECTLY IF THE FUNCTION CAN BE PROCESSED AT INTERRUPT LEVEL,BA; OTHERWISE THE PROCESSOR WILL BE INTERRUPTED TO GO TO EXEC LEVEL1; AND PROCESS THE FUNCTION.(;S ; INPUTS: ;L$; R1=MASK OF PROCESSORS TO FUNCTION.; R2=FUNCTION MASK.R;L ; OUTPUTS:;(; PROCESSORS HAVE RECIEVED THE FUNCTION.;O); REGISTERS R1, R4, AND R5 ARE PRESERVED.P;- R*$IIFNX::MOV R1,R0 ;DUPLICATE PROCESS WORD MOV #$MPTAB,R3 ;POINT TO TABLES)10$: CLC ;MAKE FOLLOWING ROR WORK WRITEL# ROR R0 ;PUT NEXT CPU BIT IN CARRYT* BCC 20$ ;IF CC DON'T WORRY WITH THIS CPU T;VH; WE HAVE FOUND A CPU BIT ON. PLACE THE FUNCTION MASK INTO HIS FUNCTION; WORD.C;   MFPS -(SP) ;SAVE PRIORITYL- MTPS #PR7 ;DONT GET INTERRUPTED DURING LOCKN- LOCK$ $IIFNL,SPIN ;;;LOCK THE FUNCTION TABLEH! BIS R2,(R3) ;;;SET THE FUNCTIONE0 ULOCK$ $IIFNL,SPIN ;;;UNLOCK THE FUNCTION TABLE MTPS (SP)+ ;;;009ennhnmkTADATADATADATADATADATARESTORE PRIORITY% TST R0 ;SET THE CONDITION CODE BITSS'20$: BEQ 30$ ;IF EQ NO PROCESSORS LEFTT1 TST (R3)+ ;POINT TO NEXT WORD IN FUNCTION TABLE  BR 10$ ;GO BACK FOR MORE U630$: BIC #MP.INT,R2 ;SPECIAL INTERRUPT LEVEL FUNCTION? BEQ 40$ ;IF EQ NOC N; C; THIS FUNCTION IS ONE OF THOSE WHICH IS PROCESSED IN THE INTERRUPTNB; SERVICE ROUTINE OF THE INTERPROCESSOR INTERRUPT. SINCE THE CPUSC; INVOLVED (IF MORE THAN ONE) DON'T HAVE TO BE LOCKED INTO THE EXEC F; TO PROCESS THE FUNCTION, THEN WE WILL INTERRUPT THEM ALL IMMEDIATELY5; AND ALLOW THEM TO PROCESS THE FUNCTION IN PARALLEL.S;F # CALL $IIXMT ;INTERRUPT PROCESSORSN RETURNL ; C; IN THE FOLLOWING CASE, THE PROCESSORS MUST BE IN THE EXECUTIVE TOVE; PROCESS THE FUNCTION. WE CONSIDER THIS ANOTHER REASON TO INTERRUPTH<; THE PROCESSOR IN THE NORMAL, ROUND ROBIN SCHEME OF THINGS.;E T40$: MFPS -(SP) ;SAVE PRIORITY / MTPS #PR7 ;NO INTERRUPTS DURING LOCKED PERIOD ( LOCK$ $FORKL,SPIN ;;;LOCK THE FORK LIST4 BIS R1,$IIPND ;;;SET THE CPU'S WE WANT TO INTERRUPT+ ULOCK$ $FORKL,SPIN ;;;UNLOCK THE FORK LIST MTPS (SP)+ ;;;RESTORE PRIORITY RETURNT O .ENDC R R .END; C; IN THE FOLLOWING CASE, THE PROCESSORS MUST BE IN THE EXECUTIVE TOVE; PROCESS THE FUNCTION. WE CONSIDER THIS ANOTHER REASON TO INTERRUPTH<; THE PROCESSOR IN THE NORMAL, ROUND ROBIN SCHEME OF THINGS.;E T40$: MFPS -(SP) ;SAVE PRIORITY / MTPS #PR7 ;NO INTERRUPTS DURING LOCKED PERIOD ( LOCK$ $FORKL,SPIN ;;;LOCK THE FORK LIST4 BIS R1,$IIPND ; .TITLE INICRA .IDENT /2.00/6; COPYRIGHT (C) 1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; ; J. WEHNER 06-MAY-83;(&; LOADABLE CRASH INITIALIZATION MODULE;); PREVIOUSLY MODIFIED BY:C;A; J. G. WEHNER; J. W. BERZLE; G. N. LARSEN; P. K. M. WEISS;S$; MODIFIED FOR RSX-11M-PLUS V4.1 BY:;N; J. W. BERZLE 27-JAN-88 2.00;Q'; JWB226 -- ADD $CRSFM TO VECTOR TABLE4;);***********************;AF; THE FOLLOWING IS A TRANSFER WORD WHICH MUST BE THE FIRST LOCATION OFI; THIS MODULE. WHEN A CRASH OCCURS, A JUMP IS MADE INDIRECT THROUGH THISO5; LOCATION TO BYPASS THE EXP INITIALIZATION ROUTINES.3;( .WORD TRNSFR I;*********************** .MCALL DIR$,GIN$Y;; EXEC ENTRY VECTOR TABLE ;ZEXEVEC:N .WORD 0BCBUF:: .WORD $BCBUFCRALT:: .WORD $CRALTCRBAE:: .WORD $CRBAECRCSR:: .WORD $CRCSRCRDEV:: .WORD $CRDEVCRDV1:: .WORD $CRDEVCRKRB:: .WORD $CRKRBCRMS0:: .WORD $CRMS0CRMS3:: .WORD $CRMS3CRMS6:: .WORD $CRMS6CRPAR:: .WORD $CRPARCRSBN:: .WORD $CRSBNCRSB2:: .WORD $CRSBNCRSCS:: .WORD $CRSCSCRSFM:: .WORD $CRSFMCRSUN:: .WORD $CRSUNCRUNT:: .WORD $CRUNTHFMSK:: .WORD $HFMSKKISA5:: .WORD KISAR5KISA6:: .WORD KISAR6MSCR1:: .WORD $MSCR1MSCR2:: .WORD $MSCR2MSCR3:: .WORD $MSCR3UISA6:: .WORD UISAR6EXEVCL=<<.-EXEVEC>/2>A>TRNVEC: GIN$ GI.VEC,EXEVEC,EXEVCL ; TRANSLATE EXECUTIVE VECTOR;R; INITIALIZE CRASH DATA BASE R;C$XPLOA:: MOV PC,R0 ; MAKE CODE PIC* ADD #TRNVEC-.,R0 ; RELOCATED ADDR OF DPB MOV PC,R1  ADD #EXEVEC-.,R1:, MOV R1,4(R0) ; RELOCATE EXEVEC ADDR IN DPB' DIR$ R0 ; TRANSLATE EXECUTIVE VECTOR: BCC 5$C BPT5$: # ADD #2,CRSB2 ; MAKE THIS $CRSBN+2I! INC CRDV1 ; MAKE THIS $CRDEV+1M& CALL $SWSTK,10$ ; GO TO SYSTEM STATE( MOV PC,R0 ;; CALCULATE RETURN ADDRESS ADD #10$-.,R0% MOV R0,16(SP) ;; SET RETURN ADDRESSR7 MOV @UISA6,@CRPAR ;; STORE THE PARTITION LOAD ADDRESSA+ MOV #PBNH,@CRSBN ;; STARTING BLOCK NUMBERE MOV #PBNL,@CRSB2.# MOV #PBNH,@CRSCS ;; SBN CHECK SUM, ADD #PBNL,@CRSCSC%10$: RETURN ;; BACK TO USER STATEA;N.; CLR DATA BASE BEFORE UNLOADING THE PARTITION;C$XPUNL::& CALL $SWSTK,10$ ; GO TO SYSTEM STATE( MOV PC,R0 ;; CALCULATE RETURN ADDRESS ADD #10$-.,R0% MOV R0,16(SP) ;; SET RETURN ADDRESS ' CLRB @CRDEV ;; CLEAR THE DEVICE NAME CLRB @CRDV1- CLR @CRSUN ;; CLEAR THE DEVICE UNIT NUMBER;/ CLRB @CRUNT ;; CLEAR THE ASCII DEVICE NUMBERR% CLR @CRCSR ;; CLEAR THE DEVICE CSRB$ CLR @CRSCS ;; CLEAR THE CHECK SUM(00nmnRnn4nbl CLR @CRPAR ;; CLEAR PARTITION ADDRESS CLR @CRKRB ;; CLEAR THE KRB$10$: RETURN ;; BACK TO USER STATETRNSFR:I .END$XPUNL::& CALL $SWSTK,10$ ; GO TO SYSTEM STATE( MOV PC,R0 ;; CALCULATE RETURN ADDRESS ADD #10$-.,R0% MOV R0,16(SP) ;; SET RETURN ADDRESS ' CLRB @CRDEV ;; CLEAR THE DEVICE NAME CLRB @CRDV1- CLR @CRSUN ;; CLEAR THE DEVICE UNIT NUMBER;/ CLRB @CRUNT ;; CLEAR THE ASCII DEVICE NUMBERR% CLR @CRCSR ;; CLEAR THE DEVICE CSRB$ CLR @CRSCS ;; CLEAR THE CHECK SUM( .TITLE INITL .IDENT /16.02/Y;; COPYRIGHT (C) 1987"; BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;E<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;:; D. N. CUTLER 23-AUG-73;++; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:R;R; B. S. MCCARTHY; P. J. BEZEREDI;L+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:); ; J. W. BERZLE; J. M. LAWLER; B. S. MCCARTHY; M. PETTENGILL; J. G. WEHNER; P. K. M. WEISS;.; MODIFIED BY:; ; B. S. MCCARTHY 21-OCT-86 16.00;U$; BM376 -- FIX PRO ASSEMBLY PROBLEM;. ; B. S. MCCARTHY 27-OCT-86 16.01;D); BM374 -- ADD LAT APPLICATIONS TERMINALN; DISCONNECT CALL; ; J. W. BERZLE 8-NOV-86 16.02.; *; JWB187 -- ADD CONDITIONALS FOR LAT CALL;U ; L. B. MCCULLEY 29-DEC-87 15.11;T*; LBM050 -- SET HF.SWR PROPERLY FOR DRGSS;M; L. B. MCCULLEY 3-FEB-87 15.12W;E6; LBM057 -- FIX LBM050 PROBLEM WITH HARDWARE SUBTLETY;; MACRO LIBRARY CALLS ;W .MCALL HWDDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS;0; MACRO DEFINITIONS ;  E .MACRO BREAK TYPE S C .IF DF X$$DBT . .WORD 3 3 .IFFD A HALTC O .ENDC N  .IF IDN ,  W BR .-28 V .ENDC   .ENDM - D;N'; INITIALIZE PROPER BIT SETTING FOR SR3L;2 E S3$BTS==0 ;INIT TO NO BITS SET W R .IF DF M$$EXT M5S3$BTS==S3$BTS!60 ;ENABLE 22 BIT MODE AND UNIBUS MAPX M .ENDC  H .IF DF K$$DAS (S3$BTS==S3$BTS!4 ;ENABLE KERNEL D SPACE D .ENDC  D .IF DF S$$LIB S,S3$BTS==S3$BTS!2 ;ENABLE SUPERVISOR D SPACE  .ENDC  .IF DF U$$DAS& S3$BTS==S3$BTS!1 ;ENABLE USER D SPACE .ENDC ; DF U$$DAS I;< ; LOCAL DATA;W ; SYSTEM IDENTIFICATION MESSAGES;M .NLIST BEX 0SYSMG: .ASCII <15><177><177><12>/ V/SYSVR: .ASCII / BL/ SYSID: .ASCIZ / /<15><12><12>7MESS0: .ASCIZ /Directive partition not fixed in memory/C0$MESS1::.ASCIZ /Executive data space not loaded/5MESS2: .ASCIZ /No CPU partition created in MP system/B7MESS3: .ASCII /Boot device not found in system tables:/. .BYTE 15,177,177,122 .ASCII /R0=device type (ASCII)/<15><177><177><12>3 .ASCII /R1=Physical unit number/<15><177><177><12>M .ASCII /R2=CSR address/   .IF DF M$$PRO * .ASCIZ <15><177><177><12>/R3=CPU ordinal/ / .IFF: S .BYTE 0 / .ENDC S  .EVENMESS4: .ASCII /Device /XX: .ASCIZ /XX -- /n!MESS5: .ASCIZ /Driver not loaded/Z7MESS6: .ASCIZ /Driver does not support controller type/ +MESS7: .ASCIZ /Vector address above V$$CTR/IMESS10: .ASCIZ /Vector in use/*MESS11: .ASCIZ /Unibus run not accessible/4MESS12: .ASCIZ /Driver didn't return control after /'MESS13: .ASCIZ /controller online call/M!MESS14: .ASCIZ /unit online call/EMESS15: .ASCIZ /Driver error -- If DEC driver, please submit an SPR!/F .EVENMESS16: .ASCII / controller /.UU: .ASCIZ /UUAANN:/!MESS17: .ASCIZ /error code in R1/SMESS20: .ASCIZ /Unit /$MESS21: .ASCIZ / didn't come online/FILL: .ASCIZ <15><177><177><12>: MESS22: .ASCIZ /Fatal error -- /4MESS23: .ASCIZ /Secondary pool not created with VMR/MESS24: .ASCIZ /Warning -- /BMESS25: .ASCII /Crash device not found in system tables:/<15><177>; .ASCII <177><12>/R0=device type (ASCII)/<15><177><177><12>9 .ASCII /R1=logical unit number/<15><177><177><12>/Enter/t8 .ASCII / CSR address in R2, physical unit number in R1/ .ASCII <15><177><177><12>/and /  e .IF DF X$$DBT A .ASCII /type P/  .IFF/ d .ASCII /hit00RunhnmkTADATADATADATADATADATA continue/ C .ENDC > 75NULL: .BYTE 0 ;NOTE -- THIS MUST FOLLOW PREVIOUS TEXTZ&CTLET: .ASCII /ABCDEFHJKLMNPRSTUVWXYZ/ .EVEN C;/8; TABLE OF ERROR MESSAGES INDEXED BY GETVEC INITIAL CODE;m bGETERR: .WORD MESS5I .WORD MESS6 .WORD MESS7 .WORD MESS10> .WORD MESS11S PROMT: .ASCIZ <15><12>/>/ ;  .EVEN >;t/; DATA AREA FOR DATA-SPACE INITIALIZATION TABLEn;e; FORMAT OF THE TABLE IS:<;>.; DTBL: .WORD ADDRESS ;ADDRESS FOR NEXT VALUE,; .WORD DATA ;DATA TO PLUG AT ABOVE ADDRESS;; .; .; .;B5; .WORD 0 ;ZERO IN ADDRESS POSITION TERMINATES TABLE.;I A E .IF DF K$$DAS DTBL: ;REFERENCE LABELE R S .IF DF M$$PRO T7 .WORD $IITBX ;INTERPROCESSOR INTERRUPT COMMON INT TBLS& .WORD $IIINT ;IIST INTERRUPT ADDRESS9 .WORD $IITBX+CI.PWF ;IIST COMMON INT TBL POWERFAIL ENTRY* .WORD $IIPWF ;ENTRY POINT IN IIST MODULE n .ENDC M O .IF DF R$$HDV >1 .WORD $RHTBX ;RH COMMON INTERRUPT TABLE ADDRESS * .WORD $RHALT ;RH COMMON INTERRUT ADDRESS7 .WORD $RHTBX+CI.KRB ;RH COMMON CONTROLLER ONLINE ENTRYS5 .WORD $RHKRB ;ADDRESS OF RH CONTROLLER ONLINE ENTRYS/ .WORD $RHTBX+CI.PWF ;RH COMMON POWERFAIL ENTRY - .WORD $RHPWF ;ADDRESS OF RH POWERFAIL ENTRYR/ .WORD $RHTBX+CI.CSR ;ADDRESS OF CSR TEST ENTRYU! .WORD $RHCSR ;RH CSR TEST ENTRYI C .ENDC B O .IF DF R$$611 O1 .WORD $DMTBX ;DM COMMON INTERRUPT TABLE ADDRESS+ .WORD $DMALT ;DM COMMON INTERRUPT ADDRESSH8 .WORD $DMTBX+CI.KRB ;DM CONTROLLER ONLINE/OFFLINE ENTRY+ .WORD $DMKRB ;DM CONTROLLER ENTRY ADDRESSC3 .WORD $DMTBX+CI.PWF ;DM CONTROLLER POWERFAIL ENTRYS/ .WORD $DMPWF ;DM CONTROLLER POWERFAIL ADDRESSI4 .WORD $DMTBX+CI.CSR ;DM CONTROLLER CSR TEST ADDRESS .WORD $DMCSR ;CSR TEST ADDRESS H .ENDC ;; KERNEL AST TABLE ENTRIES/; KEEP THIS TABLE IN SYNCH WITH $KATBL IN SYSCMO. .WORD $KATBL+00,$FINBF ;AK.BUF - BUFFERED I/O0 .WORD $KATBL+02,$FINXT ;AK.OCB - OFFSPRING EXIT6 .WORD $KATBL+04,$GENBF ;AK.GBI - GENERAL BUFFERED I/O3 .WORD $KATBL+06,$DBTRP ;AK.TBT - FORCED T-BIT TRAPN3 .WORD $KATBL+10,$FINDI ;AK.DIO - DELAYED I/O COMP.E3 .WORD $KATBL+12,$GGFRN ;AK.GGF - GRP. GBL. RUNDWN. $; SPM VECTOR FOR ACP HOOKPOINT ENTRY .WORD $SPV01D .WORD $SPVEXM; AND LOADER HOOKPOINT ENTRIES .WORD $SPV02A .WORD $SPVEXS .WORD $SPV03 .WORD $SPVEXW; !; LAT DISCONNECT CALL ENTRY POINT0;I .IF DF M$$NET&T$$LTHI .WORD $LTEEP+ .WORD $SPVEXC .ENDC ; DF M$$NET&T$$LTHA 4 .WORD 0 ;END OF TABLE  F .ENDC . D;A0; TEMPORARY STORAGE AREA FOR $SYSIZ INFORMATION.; (K$$DAS SYSTEMS ONLY) ;E E / .IF DF K$$DAS A+$SYALT::.WORD 0,0,0,0,0 ;STORAGE FOR $SYSIZ P .ENDC R P .LIST BEX  .IF DF R$$PRO;$5; THIS ROUTINE IS TAKEN FROM THE MODULE POWER. IT IS0:; HERE BECAUSE THE EXEC HAS NO POWER FAIL CODE OF ITS OWN.;I=$POWER: CALL $DRDSE ;ALWAYS DECLARE SIG. EVENT AT CPU PWRUP.$ MOV #$SCDVT,-(SP)'30$: CALL @(SP)+ ;GET NEXT UCB ADDRESS. BCC 40$ ;IF CC GOT ONE% CLRB $PWRFL ;CPU POWERFAIL COMPLETEG 35$: RETURNY'40$: MOV #30$,-(SP) ;SET RETURN ADDRESS0 BITB #US.OFL,U.ST2(R5) ;DEVICE IN CONFIGURATION( BNE 35$ ;IF NE DEVICE IS NOT IN CONFIG" MOV S.KRB(R4),R2 ;GET KRB ADDRESS BEQ 45$ ;IF EQ NO KRB ADDRESSA244$: BIT #KS.OFL,K.STS(R2) ;IS CONTROLLER OFFLINE? BNE 35$ ;IF NE YES@45$: BITB #UC.PWF,U.CTL(R5) ;CALL DRIVER REGARDLESS OF ACTIVITY? BNE 50$ ;IF NE YES TSTB U.STS(R5) ;IS UNIT ACTIVE? BPL 35$ ;IF PL NO ;50$: MOV D.DSP(R3),R2 ;GET ADDRESS OF DRIVER DISPATCH TABLEA" BEQ 35$ ;IF EQ DRIVER NOT LOADED. CALLR $LDPWF ;CALL DRIVER AT POWERFAIL ENTRY .ENDC ; DF R$$PRO;+#; **-$INITL-SYSTEM TRANSFER ADDRESSN;IJ; THIS ROUTINE CONTAINS THE TRANSFER POINT OF THE RESIDENT EXECUTIVE. WHENJ; THE SYSTEM IS BOOTED, CONTROL IS TRANSFERED HERE TO INITIALIZE AND START; UP THE SYSTEMW;- $INITL::RESET ;RESET PROCESSOR+ MOV R0,@#46 ;SAVE BOOT DEVICE CSR ADDRESS57 MOV #$SYALT+2,R0 ;POINT TO SYSTEM CONFIGURATION VECTORR MOVB R3,(R0)+ ;SAVE UNIT NUMBER& MOVB R1,(R0)+ ;00R}nnn4nblSAVE LBN OF LOAD IMAGE MOV R2,(R0)+ ;D MOV R4,(R0)+ ;SAVE DEVICE NAMET' MOV R5,(R0)+ ;SAVE LENGTH OF LOAD FILET Y M .IF DF M$$PRO ) JMP $PENT ;USE COMMON CODE IF AVAILABLEI O .IFFE E E: MOV #PMODE+PR7,PS ;SET MODE BITS AND LOCK OUT INTERRUPTS , MOV #$STACK-20,SP ;SETUP EXEC STACK POINTER2 MOV #KINAR0,R5 ;INIT POINTER TO MAPPING REGISTERS$ CLR R1 ;INIT I SPACE MEMORY OFFSET V S .IF DF K$$DAS * MOV $SCMOF,R2 ;INIT D SPACE MEMORY OFFSET BNE 3$ ;IF NE FOUND IT2 MOV #$MESS1,R4 ;SPECIFY MESSAGE TO TYPE ON CONSOL- CALL $FATAL ;PREFACE WITH FATAL DESIGNATION / BREAK FATAL ;IF D SPACE NOT LOADED HANG IT UPO.3$: SUB #200,R2 ;ADJUST TO BE RIGHT FOR APR 1 O .IFTF E5$: ;REFERENCE LABEL;  .IFTT N0 MOV #77406,KDSDR0-KINAR0(R5) ;SET D SPACE 4K RW1 MOV R2,KDSAR0-KINAR0(R5) ;SET D SPACE APR OFFSETO/ ADD #200,R2 ;ADVANCE D SPACE APR OFFSET BY 4K 0 MOV #77402,KINDR0-KINAR0(R5) ;SET I SPACE 4K RO N .IFFA M0 MOV #77406,KINDR0-KINAR0(R5) ;SET I SPACE 4K RW R .IFTF M% MOV R1,(R5)+ ;SET I SPACE APR OFFSET % ADD #200,R1 ;ADVANCE I SPACE OFFSETK CMP R5,#KINAR7 ;DONE YET? BLOS 5$ ;IF LOS NO, MOV #177600,KISAR7 ;SET UP I/O PAGE MAPPING F .IFT % CLR (R5) ;CLEAR D SPACE APR0 OFFSETM # .ENDC 0 N .IF DF K$$DAS!M$$EXT!S$$LIB R MOV #S3$BTS,SR3 ;SET UP SR3 A .ENDC  D INC SR0 ;ENABLE MAPPINGA O .ENDC  M;#C; IN A D-SPACE SYSTEM SET UP SPECIAL WORDS IN D-SPACE THAT CAN'T BE0; LINKED AT TASK BUILD TIME.;4 W$INITM:: ;REFERENCE LABEL) S I .IF DF P$$OOL 6 MOV $PLPAR,R0 ;LOCATE PCB OF SECONDARY POOL PARTITION BNE 502$ ;IF NE, THERE IS ONE3 MOV #MESS23,R4 ;SPECIFIY MESSAGE TO TYPE ON CONSOLF- CALL $FATAL ;PREFACE WITH FATAL DESIGNATION4 BREAK FATAL ;VMR HAS NOT SET UP SECONDARY POOL PAR502$: ;REF LABEL  S .ENDC N  .IF DF D$$PAR E/ TST $DRAPR ;IS THE DIRECTIVE PARTITION FIXED?S BNE 505$ ;IF NE YESI2 MOV #MESS0,R4 ;SPECIFY MESSAGE TO TYPE ON CONSOLE- CALL $FATAL ;PREFACE WITH FATAL DESIGNATIONE3 BREAK FATAL ;DIRECTIVE PARTITION NOT FIXED IN MEME505$: ;REFERENCE SYMBOL N .ENDC  F;,0; INITIALIZE THE POOL MONITOR CONTROL STRUCTURE.;T .IF DF P$$CTL5 MOV $CRAVL,R0 ;GET POINTER TO SECOND FREE POOL BLOCKL! CLR R1 ;INITIALIZE SIZE COUNTERL1507$: ADD 2(R0),R1 ;ADD LENGTH OF FREE POOL BLOCKF4 MOV (R0),R0 ;POINT TO NEXT FREE POOL BLOCK IN LIST BNE 507$ ;IF NE THERE IS ONE2 MOV R1,$PRISZ ;STORE IT AWAY FOR THE POOL MONITOR- CLR $POLST ;INITIALIZE EXEC/POOL TASK FLAGSO .ENDC T .IF DF K$$DAS I) MOV #DTBL,R0 ;SET UP TABLE START ADDRESS ,6$: MOV (R0)+,R1 ;GET ADDRESS FOR NEXT ENTRY BEQ 7$ ;IF EQ END OF TABLE' MOV (R0)+,(R1) ;STUFF VALUE AT ADDRESS, BR 6$ ;GO BACK FOR MORER P .ENDC  R; (; HAS VMR SET UP THE PER CPU PARTITIONS?;1 D;7$: MOV @#46,$TEMP0 ;PUT CSR ADDR WHERE WE CAN GET IT LATERE O B .IF DF M$$PRO 5  .IF GT M$$PRO-1 * TST $CPPAR ;HAS VMR SET UP CPU PARTITION BNE 8$ ;IF NE YES;1 MOV #MESS2,R4 ;SPECIFY MESSAGE TO TYPE ON CONSOLF- CALL $FATAL ;PREFACE WITH FATAL DESIGNATIONR( BREAK FATAL ;CPU PARTITIONS NOT SET UP8$: ;REFERENCE LABEL; E .ENDC B ;VH; IF THIS IS A I+D SPACE SYSTEM, WE MUST TRANSFER THE $SYSIZ INFORMATIONE; FROM THE AREA IN LOW MEMORY WHERE WE HAVE SAVED IT TO SYSCM, MAPPEDO; IN DATA SPACE.;R D .IFTF C G .IF DF K$$DAS B# MOV #$SYALT+2,R0 ;SET FROM ADDRESSP! MOV #$SYSIZ+2,R1 ;SET TO ADDRESS MOV (R0)+,(R1)+ ;MOVE ALL WORDS MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+  .ENDC L P .IFTW # MOV #TYPMSG,R5 ;SET RETURN ADDRESSU1 JMP $MAPCP ;SET UP MAPPING FOR KDSAR0 AND UBMAPE . .IFFB  .IF DF M$$EXT* MOV #$DIRXT,-(SP) ;SETUP EXIT FROM $SGFIN4 CALL $SGFIN ;CATCH MEMORY FAULTS AND SET CARRY BIT4 CLR @#CPUERR ;CLEAR CPU ERROR REGISTER IF IT EXISTS1 MOV #UBMPR,R0 ;POINT TO FIRST UNIBUS MAPPING REGT# BIC #HF.UBM,$HFMSK ;ASSUME NO UMRSZ TST (R0) ;UMRS PRESENT?V BCS INTRO ;IF CS NO UMRS3 BIS #00RnhnmkTADATADATADATADATADATAHF.UBM,$HFMSK ;INDICATE THAT UMRS ARE PRESENT+  . .IF DF K$$DAS W* CLR (R0)+ ;CLEAR FIRST UMR REGISTER PAIR CLR (R0)+ ;E+ MOV $SCMOF,R3 ;PICKUP OFFSET TO DATA SPACEB CLR R2 ;SET FOR CONVERSION0 ASHC #6,R2 ;CONVERT TO DOUBLE WORD BYTE OFFSET& MOV #4,R1 ;SET COUNT OF UMRS TO LOAD.11$: MOV R3,(R0)+ ;LOAD LOW 16 BITS OF ADDRESS* MOV R2,(R0)+ ;LOAD HIGH 6 BITS OF ADDRESS( ADD #20000,R3 ;BUMP ADDRESS BY 4K WORDS ADC R2 ;... SOB R1,11$ ;LOOP BR INTRO ; O .IFFS  S% CLR R1 ;SET INITIAL ADDRESS TO ZEROR2 MOV #5.,R2 ;SET NUMBER OF REGISTER PAIRS TO LOAD.11$: MOV R1,(R0)+ ;LOAD LOW 16 BITS OF ADDRESS) CLR (R0)+ ;CLEAR HIGH 6 BITS OF ADDRESSP ADD #20000,R1 ;ADVANCE 8K BYTES SOB R2,11$ ;LOOP BR INTRO ; D .ENDC T M .ENDC S .ENDC2TYPMSG: MOV #$DIRXT,-(SP) ;SET UP EXIT FROM $SGFIN4 CALL $SGFIN ;CATCH MEMORY FAULTS AND SET CARRY BIT4 CLR @#CPUERR ;CLEAR CPU ERROR REGISTER IF IT EXISTS+INTRO: MOV #$SYTYP,R0 ;POINT TO SYSTEM TYPES3 MOV #SYSMG+4,R1 ;POINT INTO IDENTIFICATION MESSAGEV# MOV (R0)+,(R1)+ ;MOVE INTO MESSAGES MOV (R0)+,(R1)+ ;...R MOV (R0)+,(R1)+ ;...F MOV (R0)+,(R1)+ ;...C MOV (R0)+,(R1)+ ;...R MOV (R0)+,(R1)+ ;...D/ MOV #$VERSN,R0 ;POINT TO SYSTEM VERSION NUMBER1 MOV #SYSVR,R1 ;POINT INTO IDENTIFICATION MESSAGEG# MOV (R0)+,(R1)+ ;MOVE INTO MESSAGE  MOV (R0)+,(R1)+ ;...C/ MOV #$SYSID,R0 ;POINT TO SYSTEM IDENTIFICATIONR/ MOV #SYSID,R1 ;POINT TO IDENTIFICATION MESSAGEM9 MOV (R0)+,(R1)+ ;MOVE SYSTEM IDENTIFICATION INTO MESSAGEN MOV (R0)+,(R1)+ ;. JSR R5,OPMSG ;TELL EVERYBODY WE'RE ON THE AIR .WORD SYSMG ;++ MOV #140000,R0 ;SET INITIAL MEMORY ADDRESS1- CLR R1 ;ZERO NUMBER OF 32W BLOCKS IN SYSTEM1 MOV #KISAR6,R2 ;POINT TO APR6+ MOV #10000,R3 ;ASSUME UPPER LIMIT OF 128KWO MOV R3,(R2) ;POINT TO 128KWG, MOV (R1),-(SP) ;SAVE CONTENTS OF LOCATION 0- MOV (R0),R5 ;SAVE CONTENTS OF LOCATION 128KT2 MOV SP,(R1) ;MOVE NON-ZERO VALUE INTO LOCATION 0* CLR (R0) ;ATTEMPT TO ACCESS WORD AT 128K. TST (R1) ;ADDRESS WRAP-AROUND AT LOCATION 0?+ BEQ 1$ ;IF EQ YES, THIS IS A 128KW SYSTEMT1 MOV #170000,R3 ;NO, UPPER LIMIT CAN BE UP TO 2MWI'1$: MOV R5,(R0) ;RESTORE LOCATION 128K # MOV (SP)+,(R1) ;RESTORE LOCATION 06$ CLR (R2) ;SET ZERO RELOCATION BIAS(2$: TST (R0) ;DOES THIS 1K BLOCK EXIST?# BCS 14$ ;IF CS NO, NO MEMORY LEFTV/ ADD #40,R1 ;UPDATE NUMBER OF 32W BLOCKS BY 1KT/ MOV R1,(R2) ;POINT TO NEXT 1K BLOCK OF MEMORYE# CMP (R2),R3 ;UPPER LIMIT REACHED?; BLO 2$ ;IF LO NO514$: MOV R1,$SYSIZ ;SET SIZE OF MEMORY IN 32W BLOCKS ;B"; INITIALIZE THE FEATURE MASK BITS;E"; HF.EIS - SYSTEM HAS EIS HARDWARE-; HF.FPP - SYSTEM HAS FLOATING POINT HARDWAREO4; HF.CIS - SYSTEM HAS CIS HARDWARE (DONE BY SAV.TSK)6; HF.SWR - SYSTEM HAS HARDWARE SWITCH REGISTER PRESENT;S4 BIS #HF.SWR,$HFMSK ; ASSUME SWITCH REGISTER PRESENT$ MOV @#4,-(SP) ; SAVE TRAP VECTOR 04> MOV #TRP10,@#4 ; POINT TRAP VECTOR 04 AT ROUTINE TO SET CARRY3 TST SWR ; TEST SWR - BUS TIMES OUT IF NOT PRESENTO? MOV (SP)+,@#4 ; RESTORE TRAP VECTOR 04, LEAVE CARRY UNAFFECTED " BCC 150$ ; READ OK, IT WAS THERE5 BIC #HF.SWR,$HFMSK ; NOT THERE, $SGFIN SET CARRY BIT / CLR $SWR ; BE NICE, INIT CLEAR SW (SYSCM) SWRA150$:A5 BIC #HF.CIS,$HFMSK ;SAV.TSK WILL FIGURE THIS ONE OUTE0 BIS #HF.EIS,$HFMSK ;EVERY M-PLUS SYSTEM HAS EIS0 MOV @#10,-(SP) ;SAVE ILLEGAL INSTRUCTION VECTOR MOV #TRP10,@#10 ;SET VECTOR- BIS #HF.FPP,$HFMSK ;ASSUME NO FLOATING POINTS CLC ;CLEAR CARRY + SETI ;ISSUE A FLOATING POINT INSTRUCTIONV BCS 15$ ;IF CS FPP NOT PRESENT% BIC #HF.FPP,$HFMSK ;SHOW FPP PRESENT;15$: ;REFERENCE LABEL .IF DF P$$3XX- CLR $HFMSK+2 ;ASSUME NOT BRIDGE, NOT PRO-3XXB MFPT ;GET CPU TYPES' BCS 152$ ;IF CS NOT A BRIDGE OR A PROS) CMPB #3,R0 ;IS THIS A F11 BASED SYSTEM?E% BEQ 151$ ;IF EQ YES, MAY BE PRO-3XX) CMPB #5,R0 ;IS THIS A J11 BASED SYSTEM?E# BNE 152$ ;IF NE NO, NOT A PRO-3XXB4151$: TST @#177750 ;LOOK AT THE MAINTENANCE REGISTER- BCS 152$ ;IF CS NOT THERE, CAN'T BE PRO-3XXN& BNE 152$ ;IF NE ISN'T PRO-3XX EITH00Rnnn4nblER; BIS #H2.PRO,$HFMSK+2 ;SET PRO BIT IN HARDWARE FEATURE MASKN BR 153$ ;BACK TO COMMON CODE%152$: TST @#176010 ;IS THIS A BRIDGE?- BCS 153$ ;IF CS NO- BIS #H2.BRG,$HFMSK+2 ;INDICATE BRIDGE SYSTEMS .ENDC ; DF P$$3XX8153$: MOV (SP)+,@#10 ;RESTORE ILLEGAL INSTRUCTION VECTOR  .IF DF M$$PRO ( BIC #MP.STP,@$MPSWT ;CLEAR STOP BIT - MOV $CPBIT,$URMST ;SET ONLINE PROCESSOR MASK , MOV $CPBIT,$IIMSK ;SET IIST CONNECTION MASK, MOV $CPBIT,$CKURM ;WE WILL HANDLE THE CLOCK' LOCK$ $EXECL,WAIT ;GRAB EXECUTIVE LOCKM  .ENDC  ; E; SEARCH FOR SYSTEM DEVICE USING CSR ADDRESS AND PHYSICAL UNIT NUMBER+E; AS KEYS. WHEN IT IS FOUND, SET UNIT AND CONTROLLER ONLINE, AND SET08; UP $SYSIZ VECTOR WITH THE CORRECT LOGICAL UNIT NUMBER.; F2 CLR .SY0+2 ;CLEAR FLAG THAT WE FOUND SYSTEM DISK1 MOV #$DEVHD,R5 ;GET ADDRESS OF FIRST DCB ADDRESSE,20$: MOV (R5),R5 ;GET ADDRESS OF NEXT DCB # BNE 25$ ;IF NE YES -- KEEP TRYING;* MOV .SY0+2,R4 ;HAVE WE FOUND SYSTEM DISK? BNE 52$ ;IF NE YES5 MOV #MESS3,R4 ;SPECIFY MESSAGE TO BE TYPED ON CONSOLR- CALL $FATAL ;PREFACE WITH "FATAL ERROR -- "I) MOV $SYSIZ+6,R0 ;PLACE DEVICE NAME IN R0U3 MOVB $SYSIZ+2,R1 ;PLACE PHYSICAL UNIT NUMBER IN R1Y MOV $TEMP0,R2 ;PLACE CSR IN R2A N N .IF DF M$$PRO R- MOVB $PROCN,R3 ;PLACE PROCESSOR NUMBER IN R3 V .ENDC  T6 BREAK FATAL ;COULD NOT FIND LOAD DEVICE IN THIS SYS.)25$: MOV D.UCB(R5),R4 ;POINT TO FIRST UCB-& BIT #DV.PSE,U.CW1(R4) ;PSEUDO DEVICE? BNE 20$ ;IF NE YES8 MOVB D.UNIT(R5),-(SP) ;SET STARTING LOGICAL UNIT NUMBER; MOVB D.UNIT+1(R5),-(SP) ;CALCULATE NUMBER OF UCB'S TO SCAN  SUB D.UNIT(R5),(SP) ; INCB (SP) ; &40$: MOV U.SCB(R4),R3 ;GET SCB ADDRESS" MOV S.KRB(R3),R0 ;GET KRB ADDRESS2 BEQ 50$ ;IF EQ NO KRB ADDRESS -- NOT SYSTEM DEV./ CMP $SYSIZ+6,D.NAM(R5) ;DO DEVICE NAMES MATCH?. BNE 50$ ;IF NE NOF: CMPB $SYSIZ+2,U.UNIT(R4) ;DO PHYSICAL UNIT NUMBERS MATCH? BNE 50$ ;IF NE NOI) CMP $TEMP0,(R0) ;DO CSR ADDRESSES MATCH?V ? B .IF DF M$$ACD  V .IF DF M$$PRO ;& BNE 43$ ;IF NE ADDRESSES DON'T MATCH/ BIT @$CPURM,K.URM(R0) ;IS IT ON THIS PROCESSORS$ BNE 45$ ;IF NE YES -- USE THIS ONE  .IFF: V$ BEQ 45$ ;IF EQ YES -- USE THIS ONE B .ENDC T B;DF; THE S.KRB KRB IS NOT THE ONE WE WANT. IF THE DEVICE IS DUAL-ACCESS,F; THEN WE WILL SEE IF THE OTHER PORT IS THE ONE TO WHICH WE ARE REALLY ; CONNECTED.;H C+43$: MOV #S2.MAD!S2.LDS,R1 ;GET STATUS BITS: BIC S.ST2(R3),R1 ;ARE THEY ALL SET? (IS THIS DUAL-ACCESS)+ BNE 50$ ;IF NE NO -- NOT DUAL-ACCESS UNIT  ;AF; UNIT IS MULTI-ACCESS, AND WE CAN CONTROL THE VALUE OF S.KRB. CAN WE,; FIND THE PORT THRU WHICH WE ARE CONNECTED.; ) MOV S.KTB(R3),R0 ;ASSUME THIS IS THE KRB.6 CMP R0,S.KRB(R3) ;IS THIS THE ONE WE ALREADY CHECKED?# BNE 44$ ;IF NE NO -- USE THIS ONEH& MOV S.KTB+2(R3),R0 ;USE THE OTHER ONE*44$: CMP $TEMP0,(R0) ;IS THE CSR THE SAME? C .IFTF #+ BNE 50$ ;IF NE NO -- NO WAY OUT THIS TIME2 )  .IF DF M$$PRO (2 BIT @$CPURM,K.URM(R0) ;IS IT ATTACHED TO THIS CPU BEQ 50$ ;IF EQ NOA  .ENDC T C .IFTN E& MOV R0,S.KRB(R3) ;SET NEW KRB POINTER .ENDC E R?45$: BISB #US.VV,U.STS(R4) ;SET VOLUME VALID BIT IN SYS DEV UCB & MOV R4,.SY0+2 ;REDIRECT SYSTEM DEVICE, MOV R4,.LB0+2 ;REDIRECT SYSTEM DEVICE TOO  .IF NDF R$$PRO ( MOV R4,.SP0+2 ;REDIRECT SPOOL DEVICE  .ENDC ; NDF R$$PRO;: MOVB 2(SP),$SYSIZ+2 ;SET LOGICAL UNIT NUMBER OF LOAD DEV. BR 51$ ;BR OUT OF LOOP,50$: INCB 2(SP) ;UPDATE LOGICAL UNIT NUMBER1 ADD D.UCBL(R5),R4 ;CALCULATE ADDRESS OF NEXT UCB$ DECB (SP) ;ANY MORE UCB'S TO SCAN? BNE 40$ ;IF NE YES!51$: MOV (SP)+,(SP)+ ;CLEAN STACKS JMP 20$ ;GO TO NEXT DCBU V;D;; SCAN CTB LIST TO FIND THE CORRECT CTB FOR THE LOAD DEVICE;V<; A CTB MUST BE FOUND THAT POINTS TO THE CORRECT KRB OR THIS!; CODE WILL NOT EXECUTE PROPERLY.V;  *52$: MOV #$CTLST,R5 ;GET START OF CTB LIST54$: MOV (R5),R5 ;GET NEXT CTBA/ ;THE CTB CONTAINING OUR KRB M U S00RnhnmkTADATADATADATADATADATA T EXIST + MOV L.DCB(R5),R2 ;GET DCB POINTER FROM CTB,< BITB #LS.CIN,L.STS(R5) ;IS IT A COMMON INTERRUPT CONTROLLER0 BNE 55$ ;IF NE YES -- SEARCH THE TABLE FOR DCB* CMP R2,U.DCB(R4) ;IS THIS THE CORRECT CTB BNE 54$ ;IF NE NOB/ BR 65$ ;YES -- CREATE VECTOR FOR THIS KRB/CTB V; -; CONTROLLER IS A COMMON INTERRUPT CONTROLLERK;O H.55$: TST (R2)+ ;SKIP COMMON INTERRUPT ADDRESS,60$: TST (R2) ;IS THIS THE END OF THE TABLE BEQ 54$ ;IF EQ YES1 CMP (R2)+,U.DCB(R4) ;DOES THE DCB MATCH OUR DCB?  BNE 60$ ;IF NE NO) ;T*; CREATE VECTOR FOR THE SYSTEM LOAD DEVICE;  265$: MOV .SY0+2,R3 ;GET UCB ADDRESS OF SYSTEM DISK" MOV U.SCB(R3),R4 ;GET SCB ADDRESS* MOV S.KRB(R4),R4 ;GET KRB ADDRESS INTO R43 BIT #KS.SLO,K.STS(R4) ;IS THIS A SLOW CONTROLLER?T BEQ 70$ ;IF EQ NO* MOV #PMODE,PS ;YES, ALLOW DISK INTERRUPTS570$: CALL ONLIN ;CREATE VECTOR AND PUT DEVICE ONLINEE& MOV #PMODE+PR7,PS ;LOCKOUT INTERRUPTS T;E; SET TERMINAL ONLINE;P 2 U .IF DF M$$PRO D/ MOVB $PROC2,R0 ;GET PROCESSOR ID AS WORD INDEX6 MOV $YLCTB(R0),R4 ;GET KRB ADDRESS OF CONSOL TERMINAL5 MOV K.OWN(R4),R5 ;GET UCB ADDRESS OF CONSOL TERMINALS MOV R5,.CO0+2 ;REDIRECT CO: MOV R5,.CL0+2 ;REDIRECT CL:  .IFF T" MOV #.TT0,R5 ;GET TT0 UCB ADDRESS) MOV #$YLA,R4 ;GET FIRST DL11 KRB ADDRESSM , .ENDC L D* BIC #U2.LOG,U.CW2(R5) ;SHOW CO: LOGGED IN+ BIS #U2.PRV,U.CW2(R5) ;MAKE CO: PRIVILEGEDS. MOV #$YLCTB-L.KRB,R5 ;GENERATE YL CTB ADDRESS ;P); CREATE VECTOR AND PLACE TERMINAL ONLINER;G P" MOV K.OWN(R4),R3 ;GET UCB ADDRESS CALL ONLINE R;D*; SET UP DUMP DEVICE KRB ADDRESS FOR CRASH;T B .IF DF C$$CDA6 BIT #F4.LCD,$FMASK+6 ;LOADABLE CRASH DRIVER SUPPORT ?) BEQ 71$ ;IF EQ, NO - DRIVER IS RESIDENT # TST $CRPAR ;CRASH DRIVER LOADED ?G. BEQ 77$ ;IF EQ, NO - DON'T TEST CRASH DEVICE71$: ;REFERENCE LABEL1 MOV #$DEVHD,R2 ;GET ADDRESS OF DEVICE TABLE HEADI*72$: MOV (R2),R2 ;GET ADDRESS OF NEXT DCB BNE 73$ ;IF NO, GOT ONEA MOV #MESS25,R4C# CALL WARN ;SEND MESSAGE TO CONSOLN0 CLR -(SP) ;PICK UP TWO BYTE, NON-WORD ALIGNED $ MOVB $CRDEV,(SP) ;CRASH DEVICE TYPE( MOVB $CRDEV+1,1(SP) ;AND PLACE ON STACK2 MOV (SP)+,R0 ;AND THEN INTO R0 FOR PUBLIC VIEWING' MOV $CRSUN,R1 ;GET LOGICAL UNIT NUMBERT% CLR R2 ;CLEAR POTENTIAL CSR ADDRESS7 BREAK/ MOV R1,$CRSUN ;GET WHAT IS NOW CONSIDERED AS AN ;PHYSICAL UNIT NUMBER 4 MOV R2,$CRCSR ;GET THE CSR ADDRESS WHICH USER TYPED ADD #60,R1 ;CONVERT TO ASCII1 MOVB R1,$CRUNT ;FILL IN $CRUNT FOR CRASH MESSAGE  BR 77$ ;EXIT CRASH PROCESSINGSF73$: CMPB D.NAM(R2),$CRDEV ;IS THIS THE DCB FOR THE CRASH DUMP DEVICE?% BNE 72$ ;NO IF NE, LOOK AT NEXT DCB 7 CMPB D.NAM+1(R2),$CRDEV+1 ;MAYBE, CHECK NEXT CHARACTERI% BNE 72$ ;NO IF NE, LOOK AT NEXT DCBM4 MOV $CRSUN,R1 ;GET CRASH DEVICE LOGICAL UNIT NUMBER1 MOVB D.UNIT(R2),R0 ;GET LOWEST UNIT FOR THIS DCB 1 CMP R1,R0 ;IS CRASH DEVICE HANDLED BY THIS DCB?S BLO 72$ ;NO IF LOT= CMPB R1,D.UNIT+1(R2) ;MAYBE, CHECK HIGHEST UNIT FOR THIS DCB$ BHI 72$ ;NO IF HIG+ SUB R0,R1 ;CALCULATE NUMBER OF PROPER UCBP" MOV D.UCBL(R2),R0 ;GET UCB LENGTH( MOV D.UCB(R2),R2 ;GET FIRST UCB ADDRESS)74$: DEC R1 ;POINTING TO PROPER UCB YET?, BLT 76$ ;YES IF LT ADD R0,R2 ;POINT TO NEXT UCB BR 74$ ;GO AGAIN676$: MOVB U.UNIT(R2),$CRSUN ;SAVE PHYSICAL UNIT NUMBER" MOV U.SCB(R2),R2 ;GET SCB ADDRESS' MOV S.KRB(R2),$CRKRB ;SAVE KRB ADDRESS 77$: N .ENDC ; DF C$$CDA O;$; CREATE VECTOR FOR IIST KRB;2 M E .IF DF M$$PRO T MOVB $PROC2,R0B MOV $IICTB(R0),R40 BIT #KS.OFL,K.STS(R4) ;DO WE HAVE ONE OF THESE? BNE 80$ ;IF NE NOC0 MOV #$IICTB-L.KRB,R5 ;GENERATE IIST KRB ADDRESS CLR R3 ;SHOW NO UCB ADDRESSP CALL ONLIN T .ENDC I T;A3; SCAN PARITY MEMORY CSR REGISTERS AND CREATE TABLE:;V . 80$: ;UNCONDITIONAL REFERENCE .IF DF P$$RTY0 MOV #$PARTB,R0 ;GET ADDRESS OF PARITY CSR TABLE" MOV R0,R1 ;COPY ADDRESS OF TABLE0 MOV #1,(R1)+ ;INSERT A ONE IN FIRST TABLE ENTRY) MOV #$CSRTB,R4 ;GET ADDRESS OF CSR TABLEO185$: MOVB (R4)+,R3 ;GET NU00Rnnn4nblMBER OF CSR'S TO SET UP; BEQ 105$ ;IF EQ DONE CLR R2 ;INITIALIZE CSR ADDRESS% BISB (R4)+,R2 ;CALCULATE CSR ADDRESS' SWAB R2 ;GET HIGH BYTE OF CSR ADDRESSI+ BISB (R4)+,R2 ;GET LOW BYTE OF CSR ADDRESSO90$: TST (R2) ;CSR PRESENT? BCS 95$ ;IF CS NO  MOV R2,(R1)+ ;SAVE CSR ADDRESS BR 100$ ;V/95$: MOV R0,(R1)+ ;POINT TO FIRST WORD OF TABLEV#100$: ADD #2,R2 ;POINT TO NEXT CSR#& SOB R3,90$ ;LOOP UNTIL NONE ARE LEFT0 BR 85$ ;CONTINUE THROUGH THE REST OF THE TABLE105$: ;REF LABEL  .ENDC ; DF P$$RTY  .IF DF F$$LPP E ' TST PIRQ ;IS THERE A PIRQ REGISTER?  BCS 106$ ;IF CS NO ) MOV #$FPPRQ,@#240 ;SET UP PIRQ VECTOR E; MOV #$FPPR8,@#244 ;SET UP FLOATING POINT EXCEPTION VECTOR 106$: ;REF LABEL V  .ENDC . JSR R5,OPMSG ;OUTPUT INITIAL PROMPT MESSAGE  .WORD PROMT ; .IF DF P$$3XX0 BIT #H2.PRO,$HFMSK+2 ;IS THIS A PRO-3XX SYSTEM?& BEQ 107$ ;IF EQ NO, SKIP CLOCK CODE2 BIS #H2.CLK,$HFMSK+2 ;INDICIATE PRO CLOCK PRESENT* MOV #173030,R0 ;GET XT CLOCK CSR3 ADDRESS MOV R0,$CKCSR ;SET CSR OF CLOCK* MOV R0,$CKCSA ;SET CSR OF CLOCK TO TICKLE/ BICB #177,-4(R0) ;CLEAR ANY SELECTED FUNCTIONSP- BISB #52,-4(R0) ;SET DEFAULT DIVIDER CONTROLE+ MOV #64.,$TKPS ;SET TICK RATE FOR THE EXEC  CLR $CKLDC ;NO LOAD COUNTP CLR $CKCNT ;NO PLACE TO COUNTE+ MOV #$CKINT,@#230 ;INITIALIZE CLOCK VECTORT MOV #340,@#232 ; ...H6 MOV #106,-2(R0) ;ENABLE INTERRUPTS, BINARY DATA, 24HR. MOV #57,@#173202 ;ENABLE INTERRUPT CONTROLLER? BIS #H2.ITF,$HFMSK+2 ;SET THE TIME BAD DUE TO BATTERY FAILURE?C% BR 130$ ;SKIP NORMAL Q/U CLOCK CODEE107$: ;REFERENCE LABELB .ENDC ; DF P$$3XX* MOV $CKCSR,R0 ;GET ADDRESS OF CLOCK CSR - TST (R0) ;IS THE GENERATED CLOCK AVAILABLE?T BCC 110$ ;IF CC YES * MOV #172540,R0 ;GET ADDRESS OF KW11-P CSR MOV R0,$CKCSR ;SETUP FOR KW11-P MOV #172542,$CKCNT ;K4 MOV #K$$LDC,$CKLDC ;SET COUNT REGISTER LOAD COUNT + MOV #K$$TPS,$TKPS ;SET TICKS PER SECOND @ TST (R0) ;KW11-P?  BCC 110$ ;IF CC YESF* MOV #177546,R0 ;GET ADDRESS OF KW11-L CSR MOV R0,$CKCSR ;SETUP FOR KW11-L MOV R0,$CKCNT ; CLR $CKLDC ;; MOV #H$$RTZ,$TKPS ;SET TICKS PER SECOND TO LINE FREQUENCY 8110$: MOV #$NONSI,@#100 ;RESET KW11-L INTERRUPT VECTOR % MOV #$CKINT,104 ;SETUP KW11-P VECTOR5 CMP #172540,R0 ;KW11-P? BEQ 120$ ;IF EQ YES;% MOV #$CKINT,100 ;SETUP KW11-L VECTORK% MOV #$NONSI,104 ;RESET KW11-P VECTORE+ TST (R0) ;FREE RUNNING CLOCK WITH NO CSR?  BCC 120$ ;IF CC NO CLR $CKCSR ;CLEAR CSR ADDRESSF" CLR $CKCNT ;CLEAR COUNT REGISTER BR 130$ ;C2120$: MOV $CKCNT,R1 ;GET ADDRESS OF COUNT REGISTER, MOV $CKLDC,(R1) ;SETUP CLOCK COUNT REGISTER" MOV #K$$IEN,(R0) ;START CLOCK 7130$: MOV #PMODE+PR7,PS ;MAKE SURE PS IS SETUP PROPERLY .IF NDF R$$PROE# CALL $CPNIT ;INITIALIZE PROCESSOR1 .IFFQ CALL $POWER .ENDC ; NDF R$$PROE .IF DF M$$PRO, MOVB $NCPU,R4 ;GET NUMBER OF CPUS IN SYSTEM ASL R4 ;FORM WORD INDEX . ADD #$K6TAB,R4 ;AND POINT PAST LAST PROCESSOR0 MTPS #PR7 ;DISABLE INTERRUPTS SINCE LOWCR WILL ;BE UNMAPPED+ MOV KISAR0,$TEMP0 ;;;SAVE REAL CPU MAPPINGI+10$: MOV -(R4),KISAR0 ;;;MAP TO A PROCESSORI .IFTF ; DF M$$PRO0 MOV #SYSMG,R0 ;SET ADDRESS OF BLOCK TO RELEASE - MOV #$ICAVL-2,R3 ;POINT TO ICB POOL LISTHEAD% ADD (R3),R0 ;ROUND TO NEXT BOUNDARY BIC (R3),R0 ;P: MOV #&^C3,R1 ;SET LENGTH OF BLOCK TO RELEASE .IFF ; DF M$$PRO . CALLR $DEAC1 ;DEALLOCATE INITIALIZATION CODE .IFT ; DF M$$PROP" CALL $DEAC1 ;;;DEALLOCATE A COPY! CMP #$K6TAB,R4 ;;;FINISHED YET ? % BLO 10$ ;;;IF LO NO, GO TO NEXT CPUE- MOV $TEMP0,KISAR0 ;;;REMAP TO REAL PROCESSORP MTPS #0 ;;;ALLOW INTERRUPTS RETURN ;V .ENDC ; DF M$$PRO;O=; ROUTINE TO SET CARRY ON TRAPS THRU 10 FOR FPP DETERMINATION;D%TRP10: BIS #1,2(SP) ;SET CARRY IN PSW( RTI ;;V?; SUBROUTINE TO OUTPUT A MESSAGE TO THE SYSTEM CONSOLE TERMINAL ;M2OPMSG: MOV (R5)+,R1 ;GET ADDRESS OF OUTPUT MESSAGEOPMSG1: 00RnhnmkTADATADATADATADATADATA ;REFERENCE LABELC+10$: MOVB (R1)+,R0 ;GET NEXT BYTE TO OUTPUTB BEQ 30$ ;IF EQ DONE* MOVB R0,TPS+2 ;LOAD BYTE IN OUTPUT BUFFER20$: TSTB TPS ;PRINTER BUSY? $ BCS 30$ ;IF CS NO CONSOLE TERMINAL BPL 20$ ;IF PL YES BR 10$ ;GO AGAIN30$: RTS R5 ; O;T?; **-WARN-WRITE "WARNING -- " ON CONSOL AND THEN PRINT MESSAGE.#;( ; INPUTS:R;I; R4=MESSAGE ADDRESS.;U ; OUTPUTS:;P; NONE.A;T; ALL REGISTERS ARE PRESERVED.; P .ENABL LSB+ .IF NDF R$$PRO 4WARN: MOV R4,-(SP) ;SAVE MESSAGE SPECIFIED FOR LATER# MOV #MESS24,R4 ;PRINT "WARNING --"B BR 5$ ;ENTER FATAL ROUTINE S .ENDC ; NDF R$$PRO ;RE; **-$FATAL-WRITE "FATAL ERROR -- " ON CONSOL AND THEN PRINT MESSAGE.;LB; THIS ROUTINE WILL WRITE "FATAL ERROR -- " ON THE CONSOL AND THEN@; PRINT THE MESSAGE ON THE CONSOL. PRIOR TO THIS, IT WILL PRINT%; OUT A CR, TWO FILLS, AND THEN A LF.U; ; INPUTS:P; ; R4=MESSAGE ADDRESS;R ; OUTPUTS:;.; NONE.;N; ALL REGISTERS PRESERVED.; N'$FATAL::MOV R4,-(SP) ;SAVE R4 FOR LATERR& MOV #MESS22,R4 ;SET THE FATAL MESSAGE(5$: CALL WRITLN ;WRITE WITH CR/LF FIRST. MOV (SP)+,R4 ;RESTORE R4 WITH MESSAGE ADDRESS L;R6; **-WRITE-WRITE A LINE TO CONSOL WITH NO CR/LF FIRST.;I ; INPUTS:T;F; R4=MESSAGE ADDRESS;N ; OUTPUTS:; ; NONE. ;S; ALL REGISTERS PRESERVED.;I I .IF NDF R$$PRO :WRITE: CALL $SGFIN ;IF NO TERMINAL, DON'T GO OFF DEEP END MOV R0,-(SP) ;SAVE R0 FOR LATER MOV R1,-(SP) ;SAVE R1 FOR LATER .ENDC ; NDF R$$PRO:!10$: MOV R4,R1 ;SET UP FOR OPMSGV JSR R5,OPMSG1 ;DO LINE OUTPUT MOV (SP)+,R1 ;RESTORE R1  MOV (SP)+,R0 ;RESTORE R0+ RETURNO R;I?; **-WRITLN-WRITE A LINE WITH CR, FILLS, AND A LINE FEED FIRST.H; ; INPUTS:.;I; R4=ADDRESS OF MESSAGE.;E ; OUTPUTS:; ; NONE.;; ALL REGISTERS ARE PRESERVED.;R .;WRITLN: CALL $SGFIN ;IF NO TERMINAL, DON'T GO OFF DEEP ENDR MOV R0,-(SP) ;SAVE R0 FOR LATER MOV R1,-(SP) ;SAVE R1 FOR LATER JSR R5,OPMSG ;SEND MESSAGE .WORD FILL ;FILLS:" BR 10$ ;ENTER WRITE, IN PROGRESS .DSABL LSBP;;.; **-ONLIN-PUT DEVICE ONLINE AND CREATE VECTOR;P<; THIS ROUTINE WILL CREATE THE VECTORS FOR A DEVICE AND THEN;; PLACE THE DEVICE ONLINE. IT WILL CALL THE DRIVER AT BOTH>; THE KRB STATUS CHANGE ENTRY AND THE UCB STATUS CHANGE ENTRY.;E ; INPUTS: ;S; R3=UCB ADDRESS.T/; R4=KRB ADDRESS OF CONTROLLER NEEDING VECTORS.E#; R5=CTB ADDRESS FOR THE KRB IN R4.T; ; OUTPUTS:;S;; VECTORS HAVE BEEN CREATED WHEN CONTROL RETURNS TO CALLER.;$; THE DEVICE HAS BEEN PLACED ONLINE.;S .ONLIN: ;REFERENCE LABEL .IF DF R$$CON MOV R3,-(SP) ;SAVE UCB ADDRESSI MOV R4,-(SP) ;SAVE KRB ADDRESSD MOV R5,-(SP) ;SAVE CTB ADDRESSE .IFTF ; DF R$$CON/ MOV #GETVC,-(SP) ;PREPARE FOR COORTOUTINE CALL *10$: CALL @(SP)+ ;GET NEXT VECTOR ADDRESS! BCS 30$ ;IF CS RETURN TO CALLERK BEQ 20$ ;IF EQ NO ERRORS .IFT ; DF R$$CONC, MOV R0,-(SP) ;SAVE IMPORTANT VALUES IN CASE MOV R2,-(SP) ;USER WANTS TO MOV R4,-(SP) ;CONTINUE FROM MOV R5,-(SP) ;A WARNING MESSAGE4 MOV #NULL,R4 ;DUMMY LINE IF COMMON INTERRUPT DEVICE< BITB #LS.MDC,L.STS(R5) ;IS IT MULTIDRIVER CONTROLLER DEVICE, BNE 12$ ;IF NE YES -- CAN'T TELL WHICH ONE6 MOV L.DCB(R5),R5 ;GET DCB ADDRESS OR COMMON INT TABLE: BITB #LS.CIN,L.STS(R5) ;IS IT COMMON INTERRUPT CONTROLLER BEQ 11$ MOV CI.DCB(R5),R5,11$: MOV D.NAM(R5),XX ;PLACE NAME IN MESSAGE' MOV #MESS4,R4 ;SPECIFY CORRECT MESSAGEM12$: SUB #2,R1 MOV R1,R2 SUB #4,R1 ;IS IT FATAL?M BPL 15$ ;IF PL NO CALL $FATAL BR 17$ ;RENTER FLOWE 15$: CALL WARN ;WARNING MESSAGE17$: MOV #GETERR,R4 ;B# ADD R2,R4 ;POINT TO ERROR ADDRESSV! MOV (R4),R4 ;GET ACTUAL MESSAGE CALL WRITE') MOV (SP)+,R5 ;RESTORE SAVED VALUES FROM B, MOV (SP)+,R4 ;BEFORE ERROR MESSAGE PRINTOUT MOV (SP)+,R2C MOV (SP)+,R0 ! BREAK ;AN ERROR CODE IS IN R1.5 5 .IFF ; DF R$$CON) HALT ;HALT ON ERROR .IFTF ; DF R$$CON;OD; CHECK THE ERROR CODE IN R1 AND SEE WHAT IT MEANS BY CONSULTING THEE; TABLE OF $GETVC ERROR CODES BELOW. IF00Rnnn4nbl THE ERROR IS A WARNING, THEN D; YOU MAY PROCEED OR CONTINUE IF DESIRED. IF THE ERROR IS FATAL, DOE; NOT ATTEMPT TO PROCEED FURTHER. TAKE REMEDIAL ACTION AND TRY AGAIN.(;+ +20$: MOV R2,(R0)+ ;PLUG PC WORD INTO MEMORYB CLR (R0) ;SET UP FOR PS WORD6 BISB K.CON(R4),(R0) ;PUT CONTROLLER NUMBER IN PS WORD ASR (R0) ;MAKE IT REAL NUMBER2 BIS #PR7,(R0) ;AND PRIORITY 7 INTERRUPT INITIALLY& TST -(R0) ;BACK UP POINTER FOR GTVEC BR 10$ ;GET NEXT VECTORT30$: ;REFERENCE LABEL .IFT ; DF R$$CONE, MOV (SP)+,$SCCTB ;SET CTB FOR STATUS CHANGE8 MOV (SP),$SCDEV ;SET UP KRB ARGUMENT FOR KRB STATUS CHG1 MOVB #100,$SCOFL ;SHOW SPECIAL ONLINE TRANSITIONT1 CALL $KRBSC ;CALL DRIVER AT STATUS CHANGE ENTRY  O;MI; ALL DEVICES THAT THIS ROUTINE DEALS WITH (I.E. DISKS, CONSOL TERMINALS,NF; AND IIST) MUST NOT MAKE USE OF THE DELAYED RETURN FEATURE OF $KRBSC.G; IF, HOWEVER, THE KS.SLO BIT IS SET IN K.STS WE WILL WAIT (UP TO ABOUTBH; 45 SECONDS) FOR THE DRIVER TO HANDLE THE SLOW CONTROLLER ONLINE TRANS-G; ITION. IT IS THE DRIVERS RESPONSIBILITY TO HANDLE INTERUPTS FROM THEKE; CONTROLLER ($FORK MAY NOT BE CALLED) AND TO RESTORE $SCERR WHEN THETG; ONLINE IS COMPLETE. IF THE FOLLOWING "BREAK" IS ENCOUNTERED, THEN IT H; IS A SOFTWARE DESIGN PROBLEM, OR A BROKEN CONTROLLER IF KS.SLO IS SET,!; AND AN SPR SHOULD BE SUBMITTED.E;L MOV (SP)+,R3 ;GET KRB ADDRESS3 BIT #KS.SLO,K.STS(R3) ;IS THIS A SLOW CONTROLLER?A BNE 31$ ;IF NE YES' TST $SCDEV ;DID THE DRIVER FINISH UP?O BEQ 40$ ;IF EQ YES BR 35$ ;NO, FATAL 531$: MOV #2000,R4 ;GET VALUE FOR 45 SECOND OUTER LOOPK032$: MOV #-1,R2 ;GET COUNT FOR INNER DELAY LOOP933$: TSTB $SCERR ;IS THE CONTROLLER STILL COMING ONLINE?W" BNE 40$ ;IF NE NO, IT'S FINISHED SOB R2,33$ ;INNER LOOP DELAY SOB R4,32$ ;OUTER LOOP DELAY035$: MOV #MESS12,R4 ;SPECIFY MESSAGE FOR CONSOLE# CALL $FATAL ;FATAL ERROR PRINTOUTB( MOV #MESS13,R4 ;SPECIFY ANOTHER MESSAGE' CALL WRITE ;WRITE WITHOUT CR/LF FIRSTE MOV #MESS15,R4R% CALL WRITLN ;WRITE WITH CR/LF FIRST BREAK FATAL 640$: MOV $SCCTB,R4 ;GET CTB ADDRESS FROM PREVIOUS CALL* MOV R4,$TEMP1 ;SAVE CTB ADDRESS FOR LATER( MOV L.NAM(R4),UU ;PLACE NAME IN MESSAGE/ MOV #UU+2,R2 ;SET INITIAL VALUE FOR CHARACTERS % MOVB K.CON(R3),R5 ;GET CONTROLLER IDY ASR R5 ;MAKE IT REAL IDD CLR R4 ;SET UP FOR DIVIDEE& DIV #22.,R4 ;TWO POSSIBLE CHARACTERS# BEQ 45$ ;IF EQ NO FIRST CHARACTERR4 MOVB CTLET(R4),(R2)+ ;PLACE FIRST LETTER IN MESSAGE945$: MOVB CTLET(R5),(R2)+ ;PLACE SECOND LETTER IN MESSAGE 4 MOV R2,$TEMP0 ;SAVE POINTER INTO CONTROLLER MESSAGE CLRB (R2)+ ;SHOW END OF STRING: BIT #KS.OFL,K.STS(R3) ;DID ONLINE FUNCTION WORK PROPERLY? BEQ 50$ ;IF EQ YES ;VB; IF THE FOLLOWING BREAK IS ENCOUNTERED, THEN A DEVICE DIDN'T COMEF; ONLINE PROPERLY. POSSIBLE CAUSES INCLUDE: THE CSR ADDRESS SPECIFIEDI; IN THE KRB IS INCORRECT; THE DRIVER FOUND SOME CONDITION THAT PROHIBITSC"; THE DEVICE FROM BEING USED; ETC.;T T% MOVB $SCERR,R1 ;PUT ERROR CODE IN R1) MOV #MESS16,R4 ;SPECIFY MESSAGE, CALL $FATAL ;PRINT FATAL MESSAGE ON CONSOL MOV #MESS21,R4 ;ANOTHER MESSAGE) CALL WRITE ;WRITE WITHOUT A CR/LF FIRSTE MOV #MESS17,R4 ;ANOTHER MESSAGE5 CALL WRITLN ;WRITE WITH A CR/LF AT FRONT OF MESSAGEN BREAK FATAL I250$: MOV (SP),$SCDEV ;SET UP FOR UCB STATUS CHANGE1 BNE 55$ ;IF UCB ADDRESS EXISTS -- PUT IT ONLINE  TST (SP)+ ;CLEAN STACK* RETURN ;GO HOME EARLY -- NO UCB ADDRESS#55$: MOV R3,-(SP) ;SAVE KRB ADDRESSV1 MOVB #100,$SCOFL ;SHOW SPECIAL ONLINE TRANSITION , CALL $UCBSC ;CALL DRIVER FOR STATUS CHANGE A;O@; AS ABOVE, IF THE DRIVER DOESN'T RETURN IMMEDIATELY, THEN IT ISC; A SOFTWARE DESIGN ERROR. SUBMIT AN SPR IF YOU ENCOUNTER THE NEXT ; BREAK INSTRUCTION BELOW.;  S MOV (SP)+,R3 ;GET KRB ADDRESS3 BIT #KS.SLO,K.STS(R3) ;IS THIS A SLOW CONTROLLER?  BNE 56$ ;IF NE YES' TST $SCDEV ;DID THE DRIVER FINISH UP?A BEQ 60$ ;IF EQ YES BR 59$ ;NO, FATALE556$: MOV #2000,R4 ;GET VALUE FOR 45 SECOND OUTER LOOPC057$: MOV #-1,R2 ;GET COUNT FOR INNER DELAY LOOP958$:00RnhnmkTADATADATADATADATADATA TSTB $SCERR ;IS THE CONTROLLER STILL COMING ONLINE?E" BNE 60$ ;IF NE NO, IT'S FINISHED SOB R2,58$ ;INNER LOOP DELAY SOB R4,57$ ;OUTER LOOP DELAY859$: MOV #MESS12,R4 ;SPECIFY MESSAGE TO PRINT ON CONSOLE, CALL $FATAL ;PRINT FATAL MESSAGE ON CONSOL2 MOV #MESS14,R4 ;SPECIFY ANOTHER MESSAGE ON CONSOL% CALL WRITE ;WRITE MESSAGE TO CONSOLS MOV #MESS15,R4 ;ANOTHER MESSAGE CALL WRITLN ;WITH CR/LF FIRSTR BREAK FATAL 4"60$: MOV (SP)+,R5 ;GET UCB ADDRESS. BITB #US.OFL,U.ST2(R5) ;WHAT IS ONLINE STATUS BEQ 70$ ;IF EQ DEVICE ONLINE N;N?; THE DEVICE COULD NOT BE PUT ONLINE. THE ONLY REASON FOR THISO<; IS THAT THE DRIVER REJECTED THE ONLINE REQUEST. THE ERROR<; CODE FROM $SCERR IS IN R1. CORRECT THE CONDITION, AND TRY; AGAIN.;  S4 MOVB $SCERR,R1 ;PUT ERROR CODE WHERE XDT CAN SEE IT# MOV $TEMP1,R3 ;RECOVER CTB ADDRESSO6 BITB #LS.MDC,L.STS(R3) ;IS IT MULTIDRIVER CONTROLLER?2 BEQ 63$ ;IF EQ NO -- LEAVE CONTROLLER NAME AS IS" MOV U.DCB(R5),R3 ;GET DCB ADDRESS. MOV D.NAM(R3),UU ;PLACE DCB NAME INTO MESSAGE363$: MOV $TEMP0,R3 ;SET POINTER TO CHARACTER STRINGN- MOVB U.UNIT(R5),R4 ;GET PHYSICAL UNIT NUMBER  BIC #177707,R4H BEQ 65$ ;IF EQ NO DIGIT THEREO) ASR R4 ;PLACE DIGIT IN LOW PART OF BYTET ASR R4T ASR R4I' ADD #'0,R4 ;MAKE INTO ASCII CHARACTERD* MOVB R4,(R3)+ ;PLACE CHARACTER IN SIMPLE 165$: MOVB U.UNIT(R5),R4 ;GET PHYSICAL UNIT NUMBERL BIC #177770,R4 ;GET MASK  ADD #'0,R4 ;MAKE INTO NUMBER! MOVB R4,(R3)+ ;PLACE INTO STRINGT MOVB #':,(R3)+ ;ADD COLON CLRB (R3)+ ;TERMINATE STRING4 MOV #MESS20,R4 ;SPECIFY MESSAGE FOR CONSOL PRINTOUT CALL $FATAL ;PRINT FATAL ERROR6 MOV #UU,R4 ;SPECIFY PHYSICAL UNIT NUMBER OF LOAD DEV CALL WRITE ;PRINT LINE MOV #MESS21,R4 ;ANOTHER MESSAGE! CALL WRITE ;WRITE WITH NO CR/LFI MOV #MESS17,R4 ;ANOTHER MESSAGE CALL WRITLN ;WRITE WITH CR/LF5 BREAK FATAL ) .ENDC ; DF R$$CON 70$: RETURN# 7;R; N O T E W E L L :;;>; THE FOLLOWING CODE HAS BEEN LIFTED DIRECTLY FROM THE MODULE=; SAVVEC.MAC. THE ONLY MODIFICATION MADE TO IT IS TO REMOVER@; THE GLOBAL SYMBOLS. IT SHOULD NOT BE FURTHER MODIFIED, SINCE?; IT IS IMPORTANT TO KEEP THIS CODE "EXACTLY" LIKE THE CODE INC?; SAVVEC.MAC. FURTHERMORE, ANY MODIFICATIONS TO SAVVEC SHOULDR0; BE REFLECTED IN MODIFICATIONS TO THIS MODULE.;M.; ORIGINALLY LIFTED FROM SAVVEC.MAC 1-MAR-78.;T:; MOST RECENTLY UPDATED TO REFLECT CHANGES TO SAVVEC.MAC:;E; K. E. KINNEAR 23-MAR-78;I C; ; SPECIAL EQUATED SYMBOLSO;H&; $GETVC ERROR CODES (MUST BE NONZERO);T 'GT$E1==1*2 ;DRIVER NOT LOADED (FATAL)Y8GT$E2==2*2 ;DRIVER DOES NOT SUPPORT CONTROLLER (FATAL)'GT$E3==3*2 ;VECTOR TOO HIGH (WARNING)K%GT$E4==4*2 ;VECTOR IN USE (WARNING)M1GT$E5==5*2 ;UNIBUS RUN NOT ACCESSIBLE (WARNING)L E;N ; LOCAL DATA;  S?NONSI: .WORD $NONSI ;ADDRESSES OF EXECUTIVE NONSENSE INTERRUPTNS0: .WORD $NS0 ; ENTRY POINTSC .WORD $NS1 ; .WORD $NS2 ; .WORD $NS3 ; .WORD $NS4 ; .WORD $NS5 ; .WORD $NS6 ;NS7: .WORD $NS7 ; D;+&; **-GETVC-GET THE NEXT VECTOR ADDRESS;VB; THE INSTRUCTIONS IN THIS ROUTINE CANNOT BE MAPPED BY KISAR6 (THEC; VIRTUAL ADDRESSES MUST NOT BE BETWEEN 140000 AND 160000), BECAUSE;2; THIS ROUTINE REMAPS (AND LATER RESTORES) KISAR6.;AH;***********************************************************************G; CODE IN THIS MODULE IS DUPLICATED IN THE EXECUTIVE MODULE INITL. ANYT-; BUG FIXES HERE MUST BE REPLICATED THERE!!!! I;************************************************************************; ; INPUTS:G;TC; THIS ROUTINE IS CALLED AT SYSTEM STATE TO PROVIDE AN INTERLOCK ; ON THE VECTOR MANIPULATION.;D; WHEN CALLED INITIALLY,4; R4 = ADDRESS OF KRBS; R5 = ADDRESS OF CTBP; (SP) = RETURN ADDRESSS;.%; WHEN CALLED BACK AS A COROUTINE,*3; IF R0<>0, VECTOR ADDRESS PRESERVED FROM LAST CALLS9; IF R0=0, AFTER CLEANING UP THE STACK, $GETVC EXITS WITH ; C=1 ; R1=0R4; R0, R2, R3, R4, R5 PRESERVED AND NOT EXAMINED.; R4 = ADDRESS OF KRB PRESERVED FROM LAST CALL00Rnnn4nbl.; R5 = ADDRESS OF CTB PRESERVED FROM LAST CALL; (SP) = RETURN ADDRESS ;E ; OUTPUTS:; A; IF C=0, $GETVC MAY BE CALLED AGAIN AS A COROUTINE (THERE MAYA0; BE ANOTHER VECTOR ADDRESS TO BE RETURNED)4; R0 = VECTOR ADDRESS (BIASED TO MAP THROUGH KISAR6)$; IF R1=0, R0 AND R2 CAN BE USED AND ; Z=10; IF R1<>0, ERROR CODE (GT$E3, GT$E4, GT$E5) AND ; Z=0; R2 = PC WORD FOR VECTORR; R3 = DESTROYED; R4 = PRESERVED; R5 = PRESERVED; (SP) = TEMPORARY STORAGE; 2(SP) = TEMPORARY STORAGE5,; 4(SP) = CONTENTS OF KISAR6 AT INITIAL CALL; 6(SP) = TEMPORARY STORAGE (; KISAR6 = MAPS R0 TO THE VECTOR ADDRESS;E9; IF C=1, $GETVC CANNOT BE CALLED AGAIN AS A COROUTINER=; R0 = MAY BE A VECTOR ADDRESS (BIASED TO MAP THROUGH KISAR6)T; IF R1=0, NO MORE VECTORS AND ; Z=1); IF R1<>0, ERROR CODE (GT$E1, GT$E2) ANDE ; Z=0; R2 = DESTROYED; R3 = DESTROYED; R4 = PRESERVED; R5 = PRESERVEDB; KISAR6 = RESTORED TO THE MAPPING AT THE TIME OF THE INITIAL CALL;- GETVC: ;;ENTRY POINTP# MOV (SP),R3 ;;SAVE RETURN ADDRESSL6 MOV L.ICB(R5),(SP) ;;SAVE ADDRESS OF FIRST ICB (OR 0)3 MOV @#KISAR6,-(SP) ;;RESERVE OTHER STACK LOCATIONSA CLR -(SP) ;;' CLR -(SP) ;; (ASSUME RESIDENT DRIVER)S& CLR R0 ;;FORM FIRST VECTOR ADDRESS/4 BISB K.VCT(R4),R0 ;;D& BEQ 42$ ;;IF EQ THERE ARE NO VECTORS$ ASL R0 ;;FORM FIRST VECTOR ADDRESS ASL R0 ;;35 MOV L.DCB(R5),R1 ;;GET POINTER TO A COMMON INTERRUPTA* ;; ROUTINE ADDRESS OR ADDRESS OF A DCB4 MOV (R1),R2 ;;GET COMMON INTERRUPT ROUTINE ADDRESS< BITB #LS.CIN,L.STS(R5) ;;IS THIS A COMMON INTERRUPT DEVICE? BNE 60$ ;;IF NE YESO8 MOV D.DSP(R1),R2 ;;GET ADDRESS OF DRIVER DISPATCH TABLE& BEQ 98$ ;;IF EQ DRIVER IS NOT LOADED;S?; THE FOLLOWING CODE ASSUMES THAT THIS SYSTEM SUPPORTS LOADABLEC<; DRIVERS (I.E., THAT D.PCB EXISTS). ALL M+ SYSTEMS SUPPORT; LOADABLE DRIVERS.A;E0 MOV D.PCB(R1),R1 ;;DRIVER RESIDENT OR LOADABLE? BEQ 10$ ;;IF EQ RESIDENT) MOV P.REL(R1),(SP) ;;SAVE MAPPING TO DDTV MOV (SP),@#KISAR6 ;;MAP TO DDTR+ ADD #20000,R2 ;;BIAS POINTER TO USE KISAR6T410$: ADD #D.VINT,R2 ;;POINT AT FIRST CONTROLLER NAME M;DE; SEARCH THE DDT FOR THE VECTOR AND INTERRUPT ENTRY POINT INFORMATIONR7; THAT APPLIES TO THIS CONTROLLER. THE DDT LOOKS LIKE: ;SA; $XXTBL+D.VINT: CONTROLLER INFORMATION (NONZERO WORDS TERMINATEDL; BY A ZERO WORD); .WORD $XYCTB;; CONTROLLER INFORMATION; .WORD $XZCTB ; .1 ; .E ; .P;L; $XXTBE:: .WORD 0;G + CLR R1 ;;INITIALIZE OFFSET TO NEXT VECTOR#$20$: TST (R2) ;;REACHED END OF DDT? BEQ 150$ ;;IF EQ YES5 CMP L.NAM(R5),(R2) ;;FOUND INFO FOR THIS CONTROLLER?T BEQ 40$ ;;IF EQ YESE630$: TST (R2)+ ;;PASSED OVER ALL INFO FOR CONTROLLER? BNE 30$ ;;IF NE NO TST (R2)+ ;;SKIP CTB POINTER BR 20$ ;;N M;O1; THE INFORMATION FOR EACH CONTROLLER LOOKS LIKE:; ); .ASCII /XY/ ;CONTROLLER (CTB) MNEMONICN8; .WORD INTERRUPT ENTRY POINT ADDRESS (NONZERO AND EVEN)(; .WORD INTERRUPT ENTRY POINT ADDRESS OR; VECTOR OFFSET (ODD) ; .O ; .T ; .A ; .WORD 0 ;?=; THERE MAY BE ZERO OR MORE WORDS OF INFORMATION BETWEEN THET3; CONTROLLER MNEMONIC AND THE TERMINATING ZERO WORD2;  A440$: TST (R2)+ ;;POINT TO NEXT CONTROLLER INFO WORD, TST (R2) ;;REACHED END OF CONTROLLER INFO?42$: BEQ 120$ ;;IF EQ YES6 BIT #1,(R2) ;;IS ENTRY AN INTERRUPT ENTRY POINT ADDR BEQ 50$ ;;IF EQ YESI, MOV (R2),-(SP) ;;FORM VECTOR ADDRESS OFFSET DEC (SP) ;;. CLR R1 ;;CLEAR DEFAULT VECTOR ADDRESS OFFSET' ADD (SP)+,R0 ;;FORM NEW VECTOR ADDRESS BR 40$ ;; $50$: MOV R2,2(SP) ;;SAVE DDT POINTER& ADD R1,R0 ;;FORM NEXT VECTOR ADDRESS5 MOV (R2),R2 ;;GET DRIVER INTERRUPT ENTRY POINT ADDR ' TST (SP) ;;IS THIS A RESIDENT DRIVER?T BEQ 60$ ;;IF EQ YES( MOV 6(SP),R2 ;;GET ICB POINTERI52$: MOV R2,R1 ;;COPY ITQ ASL R2 ;;FORM VIRTUAL ADDRESS - MOV (R2)+,6(SP) ;;ASSUME NOT A MP/I&D SYSTEME' ;; (ASSUME CURRENT MAPPING IS OKAY) / TSTB $NCPU ;;IS THIS A MULTIPROCESSOR SYSTEM?V BEQ 60$ ;;IF EQ NO4 BIT #F2.DAS,$00RnhnmkTADATADATADATADATADATAFMASK+2 ;;IS THIS AN I&D SPACE SYSTEM? BEQ 60$ ;;IF EQ NO* BIC #7777,R1 ;;CLEAR VIRTUAL ADDRESS BITS) SWAB R1 ;;FORM CPU NUMBER*2 OF ICB LINKT ASR R1 ;;P ASR R1 ;;T ASR R1 ;; 1 MOV $K6TAB(R1),@#KISAR6 ;;MAP TO ICB'S CPU POOLM, BIC #160000,R2 ;;CLEAR CPU NUMBER BITS3 BIS #140000,R2 ;;BIAS ICB POINTER TO USE APR6(; BIT $URMTB(R1),K.URM(R4) ;;THIS ICB POINTER FOR THE CPU TOE) ;; WHICH THE DEVICE IS CURRENTLYS ;; CONNECTED? BNE 54$ ;;IF NE YESO$ MOV -(R2),R2 ;;GET NEXT ICB POINTER BR 52$ ;;E/54$: MOV -(R2),6(SP) ;;SAVE POINTER TO NEXT ICBI* ADD #40002,R2 ;;REMOVE BIAS BITS AND FORM ;; ADDRESS OF ICB'S JSR;;A*; VECTOR ADDRESS TOO HIGH FOR THIS SYSTEM?;A -60$: CMP $VECTR,R0 ;;VECTOR ADDRESS TOO HIGH?; BLO 160$ ;;IF LO YES S;4@; MAP TO THE CORRECT CPU VECTOR AREA IF THIS IS A MULTIPROCESSOR; CONFIGURATIONP;T F. MOVB $NCPU,R1 ;;GET NUMBER OF CPU'S IN SYSTEM. BEQ 80$ ;;IF EQ THIS IS NOT A MULTIPROCESSOR" ASL R1 ;;CONVERT TO A WORD INDEX,70$: SUB #2,R1 ;;CHECKED ALL OF PROCESSORS? BLT 170$ ;;IF LT YES6 BIT K.URM(R4),$URMTB(R1) ;;IS CONTROLLER ON THIS CPU? BEQ 70$ ;;IF EQ NO8 MOV $K6TAB(R1),@#KISAR6 ;;MAP TO VECTOR CONTEXT FOR CPU3 BIS #140000,R0 ;;BIAS VECTOR ADDRESS TO USE KISAR6B 1; A; SEE IF VECTOR IS IN USE (DOES NOT POINT TO A NONSENSE INTERRUPTI; ENTRY POINT); O/80$: MOV #NONSI,R1 ;;POINT TO TABLE OF NONSENSE  ;; INTERRUPT ENTRY POINTS;'90$: CMP (R1)+,(R0) ;;IS VECTOR IN USE?R BEQ 100$ ;;IF EQ NOI$ CMP #NS7,R1 ;;REACHED END OF TABLE BHIS 90$ ;;IF HIS NO I;T; VECTOR IN USE (WARNING)(;  S MOV #GT$E4,R1 ;;GET ERROR CODE$ BR 167$ ;;WARNING6 (;,; DRIVER NOT LOADED (FATAL)E;F C#98$: MOV #GT$E1,R1 ;;GET ERROR CODER BR 130$ ;; B;1B; R2 CONTAINS WHAT SHOULD BE PUT INTO THE FIRST WORD OF THE VECTORD; (PROGRAM COUNTER) IF THE CALLER IS INITIALIZING THE VECTOR. R2 IS!; ONE OF THE FOLLOWING ADDRESSES:I;;5; 1) DRIVER INTERRUPT ENTRY POINT (RESIDENT DRIVER);@; 2) SECOND WORD OF AN INTERRUPT CONTROL BLOCK (LOADED DRIVER)1; 3) ENTRY POINT OF A COMMON INTERRUPT ROUTINE;V T,100$: MOV R3,-(SP) ;;POSITION RETURN ADDRESS) CLR R1 ;;SHOW GOOD VECTOR ADDRESS (C=0) 110$: CALL @(SP)+ ;;CALL CALLER D;; AT THIS POINT:;; (SP) = RETURN ADDRESS ; IF 2(SP)=0, RESIDENT DRIVERH1; IF 2(SP)<>0, MAPPING TO DDT FOR LOADABLE DRIVERI.; 4(SP) = ADDRESS OF LAST WORD EXAMINED IN DDT$; 6(SP) = INITIAL CONTENTS OF KISAR6%; 10(SP) = ADDRESS OF NEXT ICB (OR 0) ;) C# MOV (SP)+,R3 ;;SAVE RETURN ADDRESSK) TST R0 ;;CALLER WANT AN IMMEDIATE EXIT?C BEQ 120$ ;;IF EQ YES8 BITB #LS.CIN,L.STS(R5) ;;A COMMON INTERRUPT CONTROLLER?) BNE 120$ ;;IF NE YES -- ONLY ONE VECTOR1' MOV #4,R1 ;;GET DEFAULT VECTOR OFFSET & MOV 2(SP),R2 ;;RESTORE POINTER TO DDT0 MOV (SP),@#KISAR6 ;;IF NECESSARY, REMAP TO DDT $ BIC #160000,R0 ;;CLEAR MAPPING BITS BR 40$ ;;D+120$: CLR R1 ;;SHOW ALL VECTORS WERE FOUND +130$: CMP (SP)+,(SP)+ ;;CLEAR OFF STACK ANDS- MOV (SP)+,@#KISAR6 ;;RESTORE INITIAL MAPPINGA# MOV R1,(SP)+ ;; SET OR CLEAR Z-BIT ( SEC ;;SHOW CANNOT CALL AS A COROUTINE JMP (R3) ;;RETURN, T;5,; DRIVER DOES NOT SUPPORT CONTROLLER (FATAL);I E$150$: MOV #GT$E2,R1 ;;GET ERROR CODE BR 130$ ;; T;O; VECTOR TOO HIGH (WARNING)R;O E$160$: MOV #GT$E3,R1 ;;GET ERROR CODE,167$: MOV R3,-(SP) ;;POSITION RETURN ADDRESS% CLC ;;SHOW CAN CALL AS A COROUTINE1 BR 110$ ;; O;W%; UNIBUS RUN NOT ACCESSIBLE (WARNING)A;F T$170$: MOV #GT$E5,R1 ;;GET ERROR CODE BR 167$ ;;;A; END OF DYNAMIC STORAGE REGION-; 0INEND: ;REFERENCE LABEL FOR END TO DEALLOCATE. .BLKB 2 ;EXTRA FOR POSSIBLE ALIGNMENT CHANGE;T%; BEGINNING OF DYNAMIC STORAGE REGION2;   .IF DF K$$DAS $1$ICBEG::.WORD 0 ;LINK TO NEXT BLOCK IN FREE LIST4 .WORD <<+3>&177774> ;LENGTH OF FREE BLOCK< .BLKB <<+3>&177774>-4 ;ALLOCATE REMAINING STORAGE$$ICTOP:: ;LAST ADDRESS IN ICB POOL N .IFFC I1$SYBEG::.WORD 0 ;LINK TO NEXT BLOCK IN FREE LIS00Rnn4nblTR4 .WORD <<+3>&177774> ;LENGTH OF FREE BLOCK< .BLKB <<+3>&177774>-4 ;ALLOCATE REMAINING STORAGE%$SYTOP:: ;LAST ADDRESS IN EXECUTIVEN .ENDC  E .END $INITLAMIC STORAGE REGION2;   .IF DF K$$DAS $1$ICBEG::.WORD 0 ;LINK TO NEXT BLOCK IN FREE LIST4 .WORD <<+3>&177774> ;LENGTH OF FREE BLOCK< .BLKB <<+3>&177774>-4 ;ALLOCATE REMAINING STORAGE$$ICTOP:: ;LAST ADDRESS IN ICB POOL N .IFFC I1$SYBEG::.WORD 0 ;LINK TO NEXT BLOCK IN FREE LIS .TITLE IOSUBV .IDENT /17.07/I;LN; COPYRIGHT (c) 1982, 1983, 1984, 1985, 1988 BY DIGITAL EQUIPMENT CORPORATION."; BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;B<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;T; D. N. CUTLER 4-AUG-73T;P+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:R;; J. R. KAUFFMAN; J. M. LAWLER ; T. LEKASO; B. S. MCCARTHY;#+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:O;; M. PETTENGILL. ; H. HUANG; J. W. BERZLE ; S. C. ADAMS9; P. K. M. WEISS ; T. LEKAS; B. S. MCCARTHY; L. M. MCCULLEY;E+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:;; J. W. BERZLE; B. S. MCCARTHY ; K. L. NOEL;Y+; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY: ; ; P. K. M. WEISS;.$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;I; J. MELVIN 12-SEP-88E?; JJM0421 - SKIP UMR/ERROR LOG PROCESSING ON ATTACH/DETACHA;; I/O RELATED ROUTINES;I1; PRIMITIVE LEVEL ROUTINES CALLED BY MOST DRIVERST;G; MACRO LIBRARY CALLSW;E8 .MCALL F11DF$,HDRDF$,HWDDF$,PCBDF$,PKTDF$,SHDDF$,TCBDF$ .MCALL UCBDF$,SCBDF$,BGCK$A ;I0 F11DF$ ;DEFINE WINDOW AND LOCK BLOCK OFFSETS ' HDRDF$ ;DEFINE TASK HEADER OFFSETS $ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSR$ PKTDF$ ;DEFINE I/O PACKET OFFSETS* SHDDF$ ;DEFINE SHADOW RECORDING OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS. SCBDF$ ;DEFINE STATUS CONTROL BLOCK OFFSETS, UCBDF$ ;DEFINE UNIT CONTROL BLOCK OFFSETS;+B; **-$DECIO-DECREMENT I/O COUNT (THROUGH AN ATTACHMENT DESCRIPTOR)0; **-$DECIP-DECREMENT I/O COUNT (PARTITION ONLY); >; THESE ROUTINES DECREMENT THE I/O COUNT THROUGH AN ATTACHMENT<; DESCRIPTOR AND/OR ASSOCIATED PCB AND CHECK FOR ANY PENDING; CHECKPOINT REQUESTS.; ; INPUTS:P;F*; R0=ADDRESS OF THE ATTACHMENT DESCRIPTOR.;N1; IF THE LOW BIT OF THE ADB ADDRESS IS SET, THENC/; THIS IS THE COMPLETION OF A BUFFERED I/O FORN1; WHICH THE PCB I/O COUNT HAS ALREADY BEEN DEC'DB3; (VIA $DECBF). ONLY THE ADB I/O COUNT IS CHANGED.T;U ; OUTPUTS:;T; NONE.O;0; R3 IS PRESERVED, ALL OTHER REGISTERS CLOBBERED;;- .ENABL LSBE0$DECIO::BIT #1,R0 ;COMPLETION OF BUFFERED I/O ?- BNE 60$ ;IF NE YES, GO DEC A.IOC AND RETURNI4 DECB A.IOC(R0) ;REDUCE I/O COUNT THROUGH DESCRIPTOR1$DECIP::MOV A.PCB(R0),R1 ;POINT TO THE REGION PCB 4 DECB P.IOC(R1) ;REDDUCE COUNT OF I/O INTO PARTITION# BNE 50$ ;IF NE THERE IS STILL I/O< BIT #PS.CKR!PS.LIO,P.STAT(R1) ;CKP REQ OR SHF DETECTED I/O? BEQ 50$ ;IF EQ NO/& MOV R3,-(SP) ;SAVE I/O PACKET ADDRESS3 MOV #$ICHKP,-(SP) ;ASSUME ITS A CHECKPOINT REQUESTS BIT #PS.CKR,P.STAT(R1) ;IS IT?S BNE 10$ ;IF NE YES7 MOV #$NXTSK,(SP) ;MUST BE A SHUFFLER DETECTED LONG I/OO MOV R1,R0 ;COPY PCB ADDRESS.210$: BIC #PS.CKR!PS.LIO,P.STAT(R1) ;CLEAR THE BITS+ CALL @(SP)+ ;CALL ROUTINE AND CLEAN STACK) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSP50$: RETURN ;$760$: DECB A.IOC-1(R0) ;DECREMENT I/O COUNT THROUGH ATT.R RETURN ;R F .DSABL LSB;+$; **-$ULDRQ-REQUEST MICROCODE LOADER;AG; THIS ROUTINE IS CALLED FROM A DRIVER TO REQUEST THE MICRO CODE LOADER#H; TASK. A PACKET IS ALLOCATED AND THE LOAD INFO. IS INSERTED, THE PACKETL; IS QUEUED TO THE MICRO CODE LOADER AND THE MICRO CODE LOADER IS REQUESTED.;R ; INPUTS:T;R; R3=MICRO CODE FILENAME INDEX1; R4=KRB ADDRESS OF CONTROLLER FOR MICROCODE LOADS;E ; OUTPUTS:;R9; C=0 IF THE PACKET WAS ALLOCATED AND THE TASK INSTALLED.O/; C=1 IF THE PAC00nhnmkTADATADATADATADATADATAKET WAS NOT SUCCESSFULLY QUEUED +; Z=1 IF THE PACKET COULD NOT BE ALLOCATEDD$; Z=0 IF THE TASK WAS NOT INSTALLED;- .ENABL LSB 9$ULDRQ::MOV #$ULDPT,-(SP) ;PUSH ADDRESS OF ADDRESS OF TCB ) BR 10$ ;AND ENTER COMMON PACKET ROUTINEE;+!; **-$DVMSG-DEVICE MESSAGE OUTPUTO;DD; THIS ROUTINE IS CALLED TO SUBMIT A MESSAGE TO THE TASK TERMINATIONG; NOTIFICATION TASK. MESSAGES ARE EITHER DEVICE RELATED OR A CHECKPOINT ; WRITE FAILURE FROM THE LOADER.; ; INPUTS:K;S; R0=MESSAGE NUMBER.;; R5=ADDRESS OF THE UCB OR TCB THAT THE MESSAGE APPLIES TO.U;N ; OUTPUTS:;D>; A FOUR WORD PACKET IS ALLOCATED, R0 AND R5 ARE STORED IN THEA; SECOND AND THIRD WORDS RESPECTIVELY, AND THE PACKET IS THREADED;<; INTO THE TASK TERMINATION NOTIFICATION TASK MESSAGE QUEUE.;EB; NOTE: IF THE TASK TERMINATION NOTIFICATION TASK IS NOT INSTALLED:; OR NO STORAGE CAN BE OBTAINED, THEN THE MESSAGE REQUEST; IS IGNORED.;-*$DVMSG::MOV R0,R3 ;SAVE MESSAGE NUMBER  .IF DF R$$PRO TST $TKNPT ;IS TKTN INSTALLED?6 BEQ $CTMSG ;IF EQ NO - TRY SENDING TO THE DISPATCHER .ENDC ;R$$PRO7 MOV #$TKNPT,-(SP) ;PUSH ADDRESS OF ADDRESS OF TKTN TCB . BR 10$ ;DROP THROUGH TO COMMON QUEUE ROUTINE;+); **-$QPKRQ-QUEUE PACKET AND REQUEST TASKI;AD; THIS ROUTINE ATTEMPTS TO ALLOCATE A FOUR WORD BLOCK, SAVE R3-R5 INA; THE BLOCK, AND QUEUE IT TO A SPECIFIED TASK. THE CONTENT OF THET ; BLOCK IS:Q%; WD 0 - LINK WORD FOR RECEIVE QUEUE ; WD 1 - SAVED R3; WD 2 - SAVED R5; WD 3 - SAVED R4; ; INPUTS:N;L1; R0=ADDRESS OF ADDRESS OF TCB OF TASK TO REQUESTI; R3-R5=REGISTERS TO BE STORED;# ; OUTPUTS:;U1; C=0 IF ALLOCATION SUCCESSFUL AND TASK INSTALLEDT; C=1 IF EITHER FAILED; Z=1 IF PACKET NOT ALLOCATED; Z=0 IF TASK NOT INSTALLED;-=$QPKRQ::MOV R0,-(SP) ;SAVE ADDRESS OF ADDRESS FOR COMMON CODE)10$: TST @(SP) ;SPECIFIED TASK INSTALLED. BEQ 60$ ;IF EQ NO - ERROR ( MOV #8.,R1 ;SET LENGTH OF BLOCK NEEDED CALL $ALOCB ;GET A CORE BLOCK # BCC 20$ ;FINISH IN COMMON ROUTINEN! BR 50$ ;IF CS DIDN'T GET PACKET ;+3; **-$DVMG1-DEVICE MESSAGE OUTPUT (ALTERNATE ENTRY)6; **-$QPKR1-GENERAL QUEUEING ROUTINE (ALTERNATE ENTRY); @; THESE ROUTINES ARE CALLED IF A PACKET IS TO BE QUEUED WHICH IS=; ALREADY ALLOCATED (E.G. CONVERTING A KERNEL AST TO A DEVICEE>; MESSAGE. THE PACKET MUST BE EXACTLY 8. BYTES LONG, AND IT IS>; THE DRIVERS RESPONSIBILITY TO INSURE THAT THE REQUESTED TASK; IS INSTALLED.C;E ; INPUTS: 0; R0=ADDRESS OF THE PRE-ALLOCATED MESSAGE PACKET#; R3=MESSAGE NUMBER (OR EQUIVALENT)T;; R2=ADDRESS OF ADDRESS OF TCB OF TASK (IF ENTRY AT $QPKR1)A;E ; OUTPUTS::; THE PACKET IS FILLED IN AND QUEUED TO THE SPECIFIED TASK;-8$DVMG1::MOV #$TKNPT,R2 ;PUSH ADDRESS OF TKTN TCB ADDRESS4$QPKR1::MOV R2,-(SP) ;SAVE ADDRESS OF ADDRESS OF TCB-20$: MOV R0,R1 ;SET ADDRESS OF MESSAGE BLOCK.* TST (R0)+ ;POINT TO SECOND WORD IN BLOCK$ MOV R3,(R0)+ ;INSERT MESSAGE NUMBER* MOV R5,(R0)+ ;INSERT UCB OR TCB ADDRESS , MOV R4,(R0) ;INSERT ADDITIONAL PARAMETER 2 MOV @(SP)+,R0 ;GET TCB ADDRESS OF TASK TO REQUEST. CALL $EXRQF ;INSERT IN RECEIVE LIST, REQUEST CLC ;INDICATE SUCCESS RETURN ;BACK TO CALLERT+50$: CLR (SP) ;SET TO SET Z BIT FOR RETURNP460$: COM (SP)+ ;CLEAN STACK, SET C AND Z IF APPROP. RETURN ;BACK TO CALLERR .IF DF R$$PRO;+1; **-$CTMSG-DO A SEND DATA TO THE P/OS DISPATCHERI;TD; THIS ROUTINE IS CALLED TO SEND A MESSAGE TO THE P/OS DISPATCHER BYE; DOING A SEND DATA. FOR NOW MESSAGES ARE FOR CHECKPOINT WRITE ERRORR#; OR CHECKPOINT ALLOCATION FAILURE.R; ; INPUTS:R;E; R0=MESSAGE NUMBERS; ; OUPUTS:L;,9; A FIXED LENGTH SEND DATA IS DONE TO C$CTEX IF POSSIBLE.E;-/$CTMSG::MOV KISAR6,-(SP) ;SAVE THE APR6 MAPPINGC& MOV R0,-(SP) ;SAVE THE MESSAGE NUMBER< MOV #$CTBNM,R3 ;GET THE ADDRESS OF THE CTAB'S NAME (C$CTEX)# CALL $SRSTD ;GET IT'S TCB ADDRESSD1 BCS 95$ ;IF CS NOT INSTALLED - DROP THE MESSAGEM# MOV R0,-(SP) ;SAVE THE TCB ADDRESSOC MOV #<13.+8.+37>/32.,R1 ;GET A PACKET FOR A FIXED LENGTH SEND DATA " CALL $ALSEC ;A00nn4nblLLOCATE THE PACKET, BCS 90$ ;IF CS NO SPACE - DROP THE MESSAGE MOV R0,KISAR6 ;MAP THE PACKET8 MOV #140002,R0 ;POINT AFTER THE LINK WORD IN THE PACKET2 MOV #13.+2,(R0)+ ;INSERT THE NUMBER OF DATA WORDS9 MOV #^R$$E,(R0)+ ;INSERT THE SENDER "TASK" NAME - $$EXECE MOV #^RXEC,(R0)+ ;...5 MOV #4,(R0)+ ;INSERT THE MESSAGE TYPE (EXEC MESSAGE) + MOV 2(SP),(R0)+ ;GET THE SUBMESSAGE NUMBERV, ADD #<13.-2>*2,R0 ;POINT PAST THE DATA AREA- MOV $COPT,(R0)+ ;TI: FOR THIS "TASK" IS CO0:ED MOV #<200*400>+200,(R0)+ ;THE UIC FOR P/OS SHOULD ALWAYS BE 200,200. MOV $CTBNM,(R0)+ ;INSERT THE TARGET TASK NAME MOV $CTBNM+2,(R0) ;...I5 MOV (SP),R0 ;GET THE ADDRESS OF RECIEVER TASK'S TCB * ADD #T.RCVL,R0 ;POINT TO THE RECIEVE LIST) MOV KISAR6,R1 ;GET ADDRESS OF THE PACKETE0 CALL $QSPIF ;INSERT PACKET IN THE RECIEVE LIST. MOV #AS.RCA,R4 ;GET CODE FOR RECIEVE DATA AST3 MOV (SP)+,R5 ;RETRIEVE RECIEVER TASK'S TCB ADDRESS;2 TST (SP)+ ;DON'T NEED THE MESSAGE NUMBER ANYMORE+ MOV (SP)+,KISAR6 ;RESTORE THE APR6 MAPPING)" CALL $DASTT ;DECLARE RECIEVE AST+ CALLR $DRDSE ;DECLARE A SIGNIFICANT EVENTT 90$: TST (SP)+ ;CLEAN THE STACK 95$: TST (SP)+ ;CLEAN THE STACK0100$: MOV (SP)+,KISAR6 ;RESTORE THE APR6 MAPPING RETURN ;ALL DONEM .ENDC ;R$$PRO .DSABL LSB ;+-; **-$GTPKT-GET I/O PACKET FROM REQUEST QUEUEV7; **-$GSPKT-GET SELECTIVE I/O PACKET FROM REQUEST QUEUE ;TM; THIS ROUTINE IS CALLED BY DEVICE DRIVERS TO DEQUEUE THE NEXT I/O REQUEST TOAK; PROCESS. IF THE DEVICE CONTROLLER IS BUSY, THEN A CARRY SET INDICATION ISRM; RETURNED TO THE CALLER. ELSE AN ATTEMPT IS MADE TO DEQUEUE THE NEXT REQUESTNH; FROM THE CONTROLLER QUEUE. IF NO REQUEST CAN BE DEQUEUED, THEN A CARRYO; SET INDICATION IS RETURNED TO THE CALLER. ELSE THE CONTROLLER IS SET BUSY AND 5; A CARRY CLEAR INDICATION IS RETURNED TO THE CALLER.V; ?; IF QUEUE OPTIMIZATION IS SUPPORTED AND ENABLED FOR THE DEVICES>; THE APROPRIATE PACKET FOR THE CURRENT OPTIMIZATION ALGORITHMA; IS RETURNED. THREE ALGORITHMS ARE SUPPORTED: NEAREST CYLINDER, ;; ELEVATOR, AND C-SCAN. ALL THREE ALGORITHMS INCORPORATE A A; FAIRNESS COUNT. IF THE FIRST PACKET ON THE LIST IS PASSED OVERI3; MORE THAN "FCOUNT" TIMES, IT IS DONE IMMEDIATELY.I;I;IG; THE ALTERNATE ENTRY POINT $GSPKT IS INTENDED FOR USE BY DRIVERS WHICH F; SUPPORT PARALLEL OPERATIONS ON A SINGLE UNIT, A COMMON EXAMPLE BEINGE; FULL DUPLEX. SUCH DRIVERS ARE EXPECTED TO LOOK TO THE SYSTEM AS IF D; THEY ARE ALWAYS FREE, WHILE MAINTAINING THE STATUS OF ALL PARALLEL@; OPERATIONS INTERNALLY WITHIN THEIR OWN DEVICE DATA STRUCTURES.G; PARALLELISM IS ACCOMPLISHED BY HANDLING DRIVER-DEFINED CLASSES OF I/OHH; FUNCTION CODES IN PARALLEL WITH EACH OTHER. FOR EXAMPLE A FULL-DUPLEXF; DRIVER WOULD HANDLE INPUT REQUESTS IN PARALLEL WITH OUTPUT REQUESTS.C; A DRIVER CALLS $GSPKT WHEN IT WANTS TO DEQUEUE A PACKET WHOSE I/ONG; FUNCTION CODE BELONGS TO A CERTAIN CLASS. WHICH FUNCTIONS QUALIFY ISSD; DETERMINED BY AN ACCEPTANCE ROUTINE IN THE DRIVER WHOSE ADDRESS ISE; PASSED TO $GSPKT IN R2. THE ACCEPTANCE ROUTINE IS CALLED BY $GSPKTCB; EACH TIME A PACKET IS FOUND IN THE QUEUE WHICH IS ELIGIBLE TO BEG; DEQUEUED. THE ACCEPTANCE ROUTINE IS THEN EXPECTED TO TAKE ONE OF THEA; FOLLOWING THREE ACTIONS:;N8; 1. RETURN WITH CARRY CLEAR IF THE PACKET SHOULD BE4; DEQUEUED. IN THIS CASE $GSPKT PROCEEDS AS $GTPKT+; NORMALLY WOULD ON DEQUEUEING THE PACKET.A;C:; 2. RETURN WITH CARRY SET IF THE PACKET SHOULD NOT BE8; DEQUEUED. IN THIS CASE $GSPKT WILL CONTINUE THE SCAN; OF THE I/O QUEUE.;A?; 3. ADD THE CONSTANT G$$SPSA TO THE STACK POINTER TO ABORTN#; THE SCAN WITH NO FURTHER ACTION. ;UE; THE ACCEPTANCE ROUTINE MUST SAVE AND RESTORE ANY REGISTERS WHICH ITO?; INTENDS TO MODIFY. WHEN A PACKET IS DEQUEUED VIA $GSPKT, THEH/; FOLLOWING NORMAL $GTPKT ACTIONS DO NOT OCCUR:S; >; 1. FILLING IN OF U.BUF, U.BUF+2 AND U.CNT. THESE FIELDS); ARE AVAILABLE FOR DRIVER-SPECIFIC USE. ;K ; 2. BUSYING OF UCB AND SCB.;I?; 3. EXECUTION OF $CFORK TO GET TO PROPER PROCESSOR 00nhnmkTADATADATADATADATADATA(MULTI- ; PROCESSOR SYSTEMS).;S:; NOTE: $GSPKT MAY NOT BE USED BY A DRIVER WHICH SUPPORTS; QUEUE OPTIMIZATION.;E;N ; INPUTS:M; @; R2=ADDRESS OF DRIVER'S ACCEPTANCE ROUTINE (IF CALL AT $GSPKT).>; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO GET A PACKET FOR.; ; OUTPUTS:;O:; C=1 IF CONTROLLER IS BUSY OR NO REQUEST CAN BE DEQUEUED.-; C=0 IF A REQUEST WAS SUCCESSFULLY DEQUEUED.C ; R1=ADDRESS OF THE I/O PACKET.; R2=PHYSICAL UNIT NUMBER.E; R3=CONTROLLER INDEX. *; R4=ADDRESS OF THE STATUS CONTROL BLOCK.(; R5=ADDRESS OF THE UNIT CONTROL BLOCK.; 0; NOTE: R4 AND R5 ARE DESTROYED BY THIS ROUTINE.;-;9; DEFINE ADDRESS IN THE UCB EXTENSION AS MAPPED THRU APR6 ; IOC=X.IOC+140000 ;I/O COUNT+WCNT=X.WCNT+140000 ;WORDS TRANSFERED COUNTO,CYLC=X.CYLC+140000 ;CYLINDERS CROSSED COUNT%CCYL=X.CCYL+140000 ;CURRENT CYLINDER +FCUR=X.FCUR+140000 ;CURRENT FAIRNESS COUNT)FLIM=X.FLIM+140000 ;FAIRNESS COUNT LIMITS+DSKD=X.DSKD+140000 ;DISK DIRECTION (1=OUT);; *********************************************************E ; * * +; * > > > W A R N I N G < < < *Y ; * *.9; * THE FOLLOWING ARE OFFSET DEFINITIONS WHICH ARE * 9; * SUPPLIED EITHER BY DEFINITION IN THE EXEC (IOSUB) *+9; * OR THE DUMMY STB FILE (FROM SFVC2). ANY CHANGE TO *N9; * THESE DEFINITIONS MUST BE MADE IN BOTH MODULES. * ; * *4;; ********************************************************* ;N0TEMP=26 ;AMOUNT OF TEMPORARY STORAGE REQUIRED5G$$SPA==TEMP+6 ;CONSTANT TO ADD TO SP TO ABORT SCAN* * .ENABL LSB ($GTPKT::MOV #128$,R2 ;ACCEPT ALL PACKETS9$GSPKT::MOV R2,$TEMP2 ;SAVE ADDRESS OF ACCEPTANCE ROUTINE 05$: SUB #TEMP,SP ;GET TEMPORARY STORAGE ON STACK:10$: MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK! TSTB S.STS(R4) ;CONTROLLER BUSY?# BNE 20$ ;IF NE CONTROLLER IS BUSYE1 BIC #S2.EIP,S.ST2(R4) ;CLEAR ERROR IN PROGRESS *, MOV R4,R1 ;GET THE ADDRESS OF THE LISTHEAD)15$: CALL SCAN ;SCAN FOR A USABLE PACKET  BCS 20$ ;NO MORE PACKETS CALL ACPCHK ;ACP FUNCTION? BCC 25$ ;IF CC NO  CALL DEQUE ;REMOVE THE PACKETT;+; ** W A R N I N G **2;E; SPM HOOKPOINT NUMBER 22.; ); DO NOT CHANGE THE INSTRUCTION FOLLOWINGT; LABEL WITHOUT CHECKING SPM;-+$SPH22==. ;SPM CHANGES THE INSTRUCTION AT  ;THE LOCATION OF THIS LABELE) MOV U.ACP(R5),R0 ;GET ADDRESS OF ACP TCBE S+ CALL $EXRQP ;INSURE FILE SYSTEM IS ACTIVE, BR 10$ ;GO AGAIN20$: JMP 95$ ;EXITC25$:; J; IN REMOTE SYSTEMS, THE GENERIC DRIVER WILL HANDLE THE ATTACH AND DETATCH!; REQUESTS FOR THE REMOTE DEVICESL;E$ .IF DF C$$RMT ;REMOTE HOST SUPPORT1 BIT #HF.RMT,$HFMSK ;REOMTE HOST SUPPROT ENABLED?  BEQ 27$ ;IF EQ NOT" MOV I.UCB(R1),R2 ;GET UCB ADDRESS I: CMP (R2),$XXLOW ;IS THE DCB ADDRESS IN THE GENERIC RANGE? BLO 27$ ;IF LO NOT CMP (R2),$XXHGH ;IS IT? BLOS 60$ ;IF LO OR SAME, YES  27$:R .ENDC ; C$$RMTS; ; PROCESS ATTACH/DETACHA;N+ MOVB I.FCN+1(R1),R2 ;GET I/O FUNCTION CODET' CMPB #IO.ATT/256.,R2 ;ATTACH FUNCTION?  BNE 45$ ;IF NE NOH CALL DEQUE ;REMOVE THE PACKETE1 MOV #IE.PRI&377,R0 ;ASSUME PRIVILEGE VIOLATION T! TST U.CW1(R5) ;MOUNTABLE DEVICE?T BPL 30$ ;IF PL NO 7 BITB #US.MNT!US.FOR,U.STS(R5) ;NOT MOUNTED OR FOREIGN?P BEQ 55$ ;IF EQ NOD130$: MOV I.TCB(R1),R0 ;ASSUME SUCCESSFUL ATTACH N& TST U.ATT(R5) ;UNIT ALREADY ATTACHED? BEQ 35$ ;IF EQ NO ; MOV #IE.DAA&377,R0 ;SET STATUS OF DEVICE ALREADY ATTACHED BR 55$ ;;35$: BITB #IQ.UMD,I.FCN(R1) ;IS THIS A DIAGNOSTIC ATTACH? C BEQ 50$ ;IF EQ NO$8 BIT #DV.UMD,U.CW1(R5) ;USER MODE DIAGNOSTICS SUPPORTED? BEQ 40$ ;IF EQ NOV3 BISB #US.UMD,U.ST2(R5) ;INDICATE DIAGNOSTIC ATTACHT BR 50$ ;740$: MOV #IE.IFC&377,R0 ;SET STATUS OF ILLEGAL FUNCTIONR BR 55$ ;-45$: CMPB #IO.DET/256.,R2 ;DETACH FUNCTION S BNE 60$ ;IF NE NO  CALL DEQUE ;REMOVE THE PACKETA. MOV #IE.DNA&377,R0 ;ASSUME DEVICE NOT ATTCHED TST R3 ;UNIT ATTACHED? BEQ 55$ ;IF EQ NO CLR R0 ;SET TO DETACH UNIT0 BICB #US.UMD,U.ST2(R5) ;RESET DIAGNOSTIC BIT ,50$: M00nn4nblOV R0,U.ATT(R5) ;ATTACH/DETACH UNIT = BITB #UC.ATT,U.CTL(R5) ;DOES DRIVER WANT CONTROL ON ATT/DET?M BNE 56$ ;IF NE YES5 MOV #IS.SUC&377,R0 ;SET SUCCESSFUL COMPLETION STATUS /55$: ADD #TEMP,SP ;CLEANUP THE STACK FOR $IOALT:% CLR R1 ;ZERO SECOND I/O STATUS WORD 6 MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK( BICB #US.BSY,U.STS(R5) ;CLEAR UNIT BUSY& CLRB S.STS(R4) ;CLEAR CONTROLLER BUSY# CALL $IOAL2 ;FINISH I/O OPERATIONT BR 5$ ;GO AGAIN."56$: JMP 120$ ;PASS THE BRANCH ON;60$: BIT #DV.MSD,U.CW1(R5) ;IS THIS A MASS STORAGE DEVICE?., BEQ 111$ ;IF EQ, NO, CAN'T DO OPT OR STATS) .IF DF R$$AMD ;AUTOMATIC MOUNT/DISMOUNTS S ASSUME US.SIO,200, TSTB U.ST2(R5) ;STALLED I/O FOR THIS UNIT ?' BMI 111$ ;IF MI, YES. NO OPT OR STATST .ENDC ; DF R$$AMD( MOV KISAR6,$TONYL ;SAVE DATA SPACE APR6* MOV U.UCBX(R5),KISAR6 ;MAP UCB EXTENSION4 BEQ 110$ ;IF EQ, NO UCB EXT, CAN'T DO OPT OR STATS4 BITB #S3.OPT,S.ST3(R4) ;SEEK OPTIMIZATION ENABLED?# BEQ 105$ ;IF EQ NO, DO STATS ONLYT;V5; INITIALIZATION FOR THE QUEUE OPTIMIZATION SCAN LOOP1; $ TST (R1) ;IS THIS THE ONLY PACKET?! BEQ 104$ ;IF EQ YES - DO IT NOWS) INCB FCUR ;INCREMENT THE FAIRNESS COUNT(! MOVB FLIM,R2 ;GET THE MAX COUNTB' BICB #200,R2 ;CLEAR THE DIRECTION BIT' CMPB R2,FCUR ;FAIRNESS COUNT EXPIRED?;! BLO 104$ ;IF LO YES - DO IT NOW5;A<; TWO IS SUBTRACTED FROM THE OFFSETS BELOW BECAUSE THE STACK8; DOES NOT HAVE THE QUEUE SCAN LOOP RETURN ADDRESS ON IT;N$ ASSUME OUTEX-2 ;ASSUME OUTEX-2 = 0.75$: CLR (SP) ;CLEAR THE EXISTANCE INDICATORS2 MOV R1,LOWPK-2(SP) ;INIT ADDRESS OF LOWEST PACKET2 MOV R0,LOWPR-2(SP) ;INIT ADDRESS OF LOWEST PACKET4 MOV I.PRM+10(R1),LOW-2(SP) ;INIT LOWEST CYLINDER #) MOVB I.PRI(R1),PRI-2(SP) ;INIT PRIORITYH;E; QUEUE OPTIMIZATION SCAN LOOP;S,80$: CALL QOPUPD ;UPDATE THE QUEUE OPT INFO% BCS 105$ ;IF CS DO THIS PACKET NOW!T085$: CALL SCAN ;SCAN FOR THE NEXT USABLE PACKET# BCS 100$ ;IF CS THERE ARE NO MOREO* CMPB I.PRI(R1),PRI-2(SP) ;SAME PRIORITY?' BNE 100$ ;IF NE NO - GO PICK A PACKETN,90$: CMPB #IO.ATT/256.,I.FCN+1(R1) ;ATTACH? BEQ 85$ ;IF EQ YES - GO ON( CMPB #IO.DET/256.,I.FCN+1(R1) ;DETACH? BEQ 85$ ;IF EQ YES - GO ON8 BITB #IQ.UMD,I.FCN(R1) ;IS THIS A DIAGNOSTIC FUNCTION? BNE 85$ ;IF NE YES - GO ON BR 80$ ;CONSIDER THIS ONEO/95$: ADD #TEMP,SP ;RETURN THE TEMPORARY STORAGE  SEC ;SET CARRY FOR NO PACKETC JMP 130$ ;AND EXIT+100$: CALL FNDOPT ;FIND THE OPTIMAL PACKETO( CMP R1,(R4) ;IS THIS THE FIRST PACKET? BNE 105$ ;IF NE NO - GO ON*104$: CLRB FCUR ;CLEAR THE FAIRNESS COUNT(105$: ADD #1,IOC ;UPDATE UNIT I/O COUNT$ ADC IOC+2 ;AND THE HIGH ORDER WORD; CMPB #IO.RLB/256.,I.FCN+1(R1) ;LOGICAL TRANSFER FUNCTION?. BLO 110$ ;IF LO NO' MOV I.PRM+4(R1),R3 ;GET THE BYTE COUNT- ASR R3 ;MAKE IT WORDSR. ADD R3,WCNT ;UPDATE TOTAL WORDS XFERED COUNT% ADC WCNT+2 ;AND THE HIGH ORDER WORDO- BIT #S2.OPT,S.ST2(R4) ;QUEUE OPT SUPPORTED?P BEQ 110$ ;IF EQ NO* MOV CCYL,R3 ;GET THE OLD CYLINDER NUMBER0 MOV I.PRM+10(R1),CCYL ;SET THE NEW CURRENT CYL/ SUB CCYL,R3 ;SUBTRACT CURRENT CYLINDER NUMBERU BPL 108$ ;GET THE ABSOLUTE! NEG R3 ;VALUE OF THE DIFFERENCE (108$: ADD R3,CYLC ;UPDATE THE CYLINDERS ADC CYLC+2 ;THE SECOND WORD 2110$: MOV $TONYL,KISAR6 ;RESTORE DATA APR6 MAPPING3111$: CALL DEQUE ;REMOVE THE PACKET FOR PROCESSING 0120$: ADD #TEMP,SP ;RETURN THE TEMPORARY STORAGE .IF DF S$$HDW7 BIT #DV.MSD,U.CW1(R5) ;IS THIS A MASS STORAGE DEVICE?Y BEQ 125$ ;IF EQ NO/ MOV R1,R3 ;COPY I/O PACKET ADDRESS FOR $SHFNDW/ CALL $SHFN1 ;SEE IF THIS UNIT IS SHADOWED NOWI BCS 124$ ;IF CS NO/ CMP ML.PRI(R4),R1 ;IS THIS THE PRIMARY PACKET?E" BNE 124$ ;IF NE NO -- DON'T COPY+ MOV R1,-(SP) ;SAVE R1 (I/O PACKET ADDRESS)- CMPB #IO.WLB/400,I.FCN+1(R2) ;IS IT A WRITE?I* BNE 123$ ;IF NE NO -- DON'T QUEUE IT NOW MOV R5,-(SP) ;SAVE UCB ADDRESSP- MOV U.SCB(R5),R4 ;GET SCB ADDRESS OF PRIMARYH MOV R2,R1 ;COPY PKT ADDRESSI4 MOV I.UCB(R1),R5 ;GET UCB ADDRESS OF SECONDARY DISK) CLR -(SP) ;ASSUME PRIM00nhnmkTADATADATADATADATADATAARY AND SECONDARYH ;HAVE SEPARATE SCBSI7 CMP U.SCB(R5),R4 ;PRIMARY AND SECONDARY HAVE SAME SCB?M BNE 121$ ;IF NE NO, OK CMP $TEMP2,#128$ ;$GSPKT CALL?N' BNE 121$ ;IF NE YES, OK WITH SAME SCB1+ MOV R4,(SP) ;REMEMBER WE HAD TO INC S.STSC# INCB S.STS(R4) ;SHOW THIS SCB BUSY;2121$: CALL $DRQRQ ;QUEUE I/O PACKET TO OTHER UNIT& MOV (SP)+,R4 ;DID WE INCREMENT S.STS? BEQ 122$ ;IF EQ NO DECB S.STS(R4) ;PUT IT BACK2122$: MOV (SP)+,R5 ;RESTORE UCB ADDRESS OF PRIMARY3123$: MOV (SP)+,R1 ;RESTORE R1 (I/O PACKET ADDRESS)H+124$: MOV U.SCB(R5),R4 ;RESTORE SCB ADDRESSY5 MOV R1,S.PKT(R4) ;RE-SET I/O PACKET ADDRESS INTO SCBK125$: ;REF LABEL$ .ENDC CMP $TEMP2,#128$ ;$GSPKT CALL?M* BNE 127$ ;IF NE YES, SKIP TO DRIVER CALL7 MOV I.PRM(R1),U.BUF(R5) ;INSERT RELOCATION BIAS IN UCBL: MOV I.PRM+2(R1),U.BUF+2(R5) ;INSERT BUFFER ADDRESS IN UCB4 MOV I.PRM+4(R1),U.CNT(R5) ;INSERT BYTE COUNT IN UCB% INCB S.STS(R4) ;SHOW CONTROLLER BUSY;' BISB #US.BSY,U.STS(R5) ;SHOW UNIT BUSY " MOV S.KRB(R4),R3 ;GET KRB ADDRESS BEQ 126$ ;IF EQ NO KRB< BIT #KS.UOP,K.STS(R3) ;IS CONTROLLER PARALLEL OPERATION ENB BEQ 126$ ;IF EQ NO $; G; CONTROLLER SUPPORTS PARALLEL OPERATION, AND REQUIRES SYNCHRONIZATION.;C; THIS TYPE OF CONTROLLER USUALLY HAS THE INTERRUPT ENABLED, AND ISCE; CAPABLE OF SUSTAINING AN INTERRUPT WHILE INITIATING A NEW FUNCTION. ?; THE INTERRUPT MAY BE FROM SOME EXTERNAL EVENT, SUCH AS A DISKCF; BECOMMING READY. IF LEFT ALONE, THE DRIVER WOULD AUTOMATICALLY FORKF; FOR EVERY INTERRUPT, WHICH WOULD NOT DO SINCE THE FORK BLOCK IS USEDC; TO HOLD THE DRIVER CONTEXT FOR A NUMBER OF CONDITIONS DURING I/O ;D; INITIATION. THE PC WORD OF THE FORK BLOCK IS USED AS AN INTERLOCKE; TO SHOW IF A FORK IS ALLOWED, WHERE S.FRK+2 IS ZERO IF AN INTERRUPTPA; IS ALLOWED. IT IS THE DRIVERS RESPONSIBILITY TO CLR S.FRK+2 TOIC; ALLOW INTERRUPTS ONCE THEY ARE EXPECTED. THE ONLY OTHER PROBLEM NE; OCCURS WHEN A DRIVER HAS QUEUED A FORK WHILE THE EXEC AND/OR DRIVER A; WERE ON THEIR WAY TO THIS POINT, AND WHEN $GTPKT ARRIVES HERE A C; FORK BLOCK IS CURRENTLY IN THE FORK QUEUE. THE SOLUTION FOR THISCG; IS TO SIMPLY DEQUEUE THE FORK BLOCK AND THEREBY DROP THE INTERRUPT ONS); THE FLOOR. WE WILL PROCEED TO DO THIS.A;W  MTPS #PR7 ;INHIBIT DEADLOCKE LOCK$ $FORKL,SPIN* INC S.FRK+2(R4) ;;;SHOW FORK BLOCK IN USE2 MOV #$FRKHD,R0 ;;;PREPARE TO REMOVE IT FROM QUEUE$ TST (R0) ;;;IS IT POSSIBLY THERE ? BEQ 1251$ ;;;IF EQ NO  MOV R4,R1 ;;;COPY SCB ADDRESSE% ADD #S.FRK,R1 ;;;POINT TO FORK BLOCKA) CALL $QRMVA ;;;REMOVE IT FROM THE QUEUEK1251$: ;REFERENCE LABEL ULOCK$ $FORKL,SPINR MTPS #0 T I .IF DF M$$PRO R BR 127$ ;REENTER FLOWT I .ENDC S 126$: ;REFERENCE LABEL  D H .IF DF M$$PRO " MOV (SP)+,R4 ;SAVE RETURN ADDRESS+ CALL $CFORK ;EXECUTE ON CORRECT PROCESSOR % MOV R4,-(SP) ;REPLACE RETURN ADDRESSE' MOV U.SCB(R5),R4 ;RETRIEVE SCB ADDRESSO B .ENDC  Q127$: ;REFERENCE LABELR. MOV S.PKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESS- MOVB U.UNIT(R5),R2 ;SET PHYSICAL UNIT NUMBERF ;+; ** W A R N I N G **R;E; SPM HOOKPOINT NUMBER 17.;M); DO NOT CHANGE THE INSTRUCTION FOLLOWING$; LABEL WITHOUT CHECKING SPM;-+$SPH17==. ;SPM CHANGES THE INSTRUCTION AT  ;THE LOCATION OF THIS LABELE A" MOV S.KRB(R4),R3 ;GET KRB ADDRESS BEQ 128$ ;IF EQ NO KRB( MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX-128$: CLC ;SHOW VALID I/O PACKET FOR RETURN130$: ;REFERENCE LABELE;+; ** W A R N I N G **V;/4; SPM HOOKPOINT NUMBER - THE FOLLOWING RETURN IS THE/; NULL CALL FOR HOOKING SEVERAL EXTERNAL TASKS. ; ); DO NOT CHANGE THE INSTRUCTION FOLLOWINGH; LABEL WITHOUT CHECKING SPM;-)$SPVEX==. ;SPM EXPECTS THIS INSTRUCTIONC ;TO BE RETURNI RETURN .DSABL LSB ;I5; QOPUPD -- UPDATE THE QUEUE OPTIMIZATION INFORMATIONQ;8>; THIS ROUTINE UPDATES THE QUEUE OPTIMIZATION SCAN INFORMATIOND; FOR THE CURRENT PACKET. THIS INFORMATION IS USED LATER BY FNDOPT.; ; INPUT:;R&; R1=ADDRESS OF THE CURRENT I/O PACKET; R5=ADD00nn4nblRESS OF THE UCBS;E ; OUTPUTS:;O#; C=0 IF THE SCAN SHOULD CONTINUE. $; THE OPTIMIZATION DATA IS UPDATED.3; THIS DATA IS ON THE STACK IN THE FOLLOWING FORM. ;S1; +--------------------------------------------+*; 30(SP) ! DRIVER RETURN ADDRESS !1; !--------------------------------------------!S&; 26(SP) ! CURRENT PRIORITY !1; !--------------------------------------------!N%; 24(SP) ! LOWEST CYLINDER !1; !--------------------------------------------!T0; 22(SP) ! ADDRESS OF THE ABOVE PACKET !1; !--------------------------------------------!T8; 20(SP) ! ADDRESS OF THE PREVIOUS PACKET FOR ABOVE !1; !--------------------------------------------!-8; 16(SP) ! NEAREST CYLINDER IN THE INWARD DIRECTION !1; !--------------------------------------------!-0; 14(SP) ! ADDRESS OF THE ABOVE PACKET !1; !--------------------------------------------! 8; 12(SP) ! ADDRESS OF THE PREVIOUS PACKET FOR ABOVE !1; !--------------------------------------------!S8; 10(SP) ! NEAREST CYLINDER IN THE OUTWARD DIRECTION !1; !--------------------------------------------! /; 6(SP) ! ADDRESS OF THE ABOVE PACKET !-1; !--------------------------------------------!T7; 4(SP) ! ADDRESS OF THE PREVIOUS PACKET FOR ABOVE !-1; !--------------------+-----------------------!S7; 3(SP) ! INWARD EXISTANCE ! OUTWARD EXISTANCE !-7; 2(SP) ! FLAG (HIGH BIT=1) ! FLAG (HIGH BIT=1) !O8; !--------------------+-----------------------!3; 0(SP) ! OPTIMIZATION LOOP RETURN ADDRESS !E1; +--------------------------------------------+-;-; ALL REGISTERS ARE PRESERVED.R; ;T+; C=1 IF THE CURRENT PACKET SHOULD BE USED-$; R1=ADDRESS OF THE CURRENT PACKET%; R0-ADDRESS OF THE PREVIOUS PACKETR;O;--; NOTE: THESE OFFSETS ARE ALSO USED BY FNDOPT-;S6PKT=I.PRM+10 ;OFFSET (R1) FOR CYLINDER FOR THIS PACKET-PRI=26 ;OFFSET (SP) FOR THE CURRENT PRIORITY /LOW=24 ;OFFSET (SP) FOR LOWEST CYLINDER NUMBER-/LOWPK=22 ;OFFSET (SP) FOR PACKET ADDRESS OF LOWO9LOWPR=20 ;OFFSET (SP) FOR PREVIOUS PACKET ADDRESS FOR LOW-7OUT=10 ;OFFSET (SP) FOR NEAREST CYL IN THE OUTWARD DIR /OUTPK=6 ;OFFSET (SP) FOR PACKET ADDRESS OF OUT-9OUTPR=4 ;OFFSET (SP) FOR PREVIOUS PACKET ADDRESS FOR OUTH5IN=16 ;OFFSET (SP) FOR NEAREST CYL IN THE INWARD DIR .INPK=14 ;OFFSET (SP) FOR PACKET ADDRESS OF IN8INPR=12 ;OFFSET (SP) FOR PREVIOUS PACKET ADDRESS FOR IN5OUTEX=2 ;OFFSET (SP) FOR OUTWARD EXISTANCE INDICATOR 3INEX=3 ;OFFSET (SP) FOR INWARD EXISTANCE INDICATORD.QOPUPD: CMP PKT(R1),CCYL ;ON CURRENT CYLINDER? BNE 10$ ;IF NE NO-' SEC ;EXIT WITH CARRY SET (DO IT NOW) BR 70$ ;510$: CMP PKT(R1),LOW(SP) ;IS THIS THE CURRENT LOWEST?U BHIS 20$ ;IF GE NO9 MOV PKT(R1),LOW(SP) ;SET THE NEW LOWEST CYLINDER NUMBER, & MOV R1,LOWPK(SP) ;ITS PACKET ADDRESS,2 MOV R0,LOWPR(SP) ;AND THE PREVIOUS PACKET ADDRESS>20$: CMP PKT(R1),CCYL ;THIS PACKET LESS THAN CURRENT LOCATION? BLOS 40$ ;IF LE YES + TSTB OUTEX(SP) ;HAVE WE SETUP OUTWARD YET?S BPL 30$ ;IF PL NOO6 CMP PKT(R1),OUT(SP) ;THIS PACKET NEAREST OUTWARD ONE? BHIS 60$ ;IF GE NO:30$: MOV PKT(R1),OUT(SP) ;SET THE NEW NEAREST OUTWARD CYL,& MOV R1,OUTPK(SP) ;ITS PACKET ADDRESS,2 MOV R0,OUTPR(SP) ;AND THE PREVIOUS PACKET ADDRESS! BISB #200,OUTEX(SP) ;AND NOTE ITV BR 60$ ;EXIT-40$: TSTB INEX(SP) ;HAVE WE SETUP INWARD YET?E BPL 50$ ;IF PL NO4 CMP PKT(R1),IN(SP) ;THIS PACKET NEAREST INWARD ONE? BLOS 60$ ;IF LE NO850$: MOV PKT(R1),IN(SP) ;SET THE NEW NEAREST INWARD CYL,% MOV R1,INPK(SP) ;ITS PACKET ADDRESS,O1 MOV R0,INPR(SP) ;AND THE PREVIOUS PACKET ADDRESS BISB #200,INEX(SP) ;AND NOTE IT'60$: CLC ;SET FLAG FOR CONTINUED SCANR70$: RETURN ;P; =; FNDOPT -- FIND THE OPTIMAL PACKET FOR THE CURRENT ALGORITHMB; ?; THIS ROUTINE PICKS THE OPTIMAL PACKET USING THE DATA PRODUCED)A; BY QOPUPD. IT SUPPORTS NEAREST CYLINDER, ELEVATOR, AND C-SCAN.(; A; NOTE: THE OFFSETS AND THE STACK STRUCTURE ARE DEFINED IN QOPUPDT;) ; INPUTS:T;E; THE DATA PRODUCED BY QOP00ohnmkTADATADATADATADATADATAUPD.; R4=SCB ADDRESS; R5=UCB ADDRESS; CCYL=CURRENT CYLINDER NUMBER-; DSKD=HIGH BIT OF BYTE SET IF MOVING OUTWARD ;0; THE OPTIMIZATION ALGORITHM ENCODED AS FOLLOWS:;R$; S2.OP2,S2.OP1=0,0 NEAREST CYLINDER; =0,1 ELEVATORR; =1,0 C-SCAN ; =1,1 RESERVEDO;M;P ; OUTPUT: ; "; R1=ADDRESS OF THE OPTIMAL PACKET(; THE CURRENT CYLINDER NUMBER IS UPDATED'; THE DIRECTION IS UPDATED IF NECESSARYC;T;T3FNDOPT: BIT #S2.OP2,S.ST2(R4) ;C-SCAN OR RESERVED?A BEQ 20$ ;IF EQ NO." BIT #S2.OP1,S.ST2(R4) ;RESERVED? BEQ 10$ ;IF EQ NON9 BGCK$A BF.OPT,BE.IDC,FATAL ;OPTIMIZATION - RESERVED CODE;; C-SCAN;A*10$: TSTB OUTEX(SP) ;OUTWARD PACKET EXIST? BMI 50$ ;IF MI YES - RETURN IT0 MOV LOWPK(SP),R1 ;ELSE RETURN THE LOWEST PACKET3 MOV LOWPR(SP),R0 ;AND THE PREVIOUS PACKETS ADDRESSE BR 70$ ;EXIT&20$: BIT #S2.OP1,S.ST2(R4) ;ELEVATOR? BEQ 40$ ;IF EQ NOT; ; ELEVATOR;E TSTB DSKD ;ARE WE GOING OUT? BMI 30$ ;IF MI YES$ TSTB INEX(SP) ;INWARD PACKET EXIST? BMI 60$ ;IF MI YES - RETURN IT BISB #200,DSKD ;SET GOING OUT*30$: TSTB OUTEX(SP) ;OUTWARD PACKET EXIST? BMI 50$ ;IF MI YES - RETURN IT BICB #200,DSKD ;SET GOING INX& BR 60$ ;AND RETURN THE INWARD PACKET;V; NEAREST CYLINDER;U(40$: TSTB INEX(SP) ;INWARD PACKET EXIST?$ BPL 50$ ;IF PL NO - RETURN OUTWARD& TSTB OUTEX(SP) ;OUTWARD PACKET EXIST?# BPL 60$ ;IF PL NO - RETURN INWARD & MOV CCYL,R1 ;GET THE CURRENT CYLINDER. SUB R1,OUT(SP) ;CALCULATE DISTANCE TO OUTWARD, SUB IN(SP),R1 ;CALCULATE DISTANCE TO INWARD CMP R1,OUT(SP) ;INWARD CLOSER?G BLO 60$ ;IF LT YES050$: MOV OUTPK(SP),R1 ;RETURN THE OUTWARD PACKET3 MOV OUTPR(SP),R0 ;AND THE PREVIOUS PACKETS ADDRESS  BR 70$ ;EXIT.60$: MOV INPK(SP),R1 ;RETURN THE INWARD PACKET2 MOV INPR(SP),R0 ;AND THE PREVIOUS PACKETS ADDRESS70$: ;REF LABEL RETURN ;(;O2; SCAN -- SCAN THE DRIVER QUEUE FOR USABLE PACKETS;R0; THIS ROUTINE IS CALLED TO SCAN A DRIVER QUEUE.-; EACH USABLE ENTRY IN THE QUEUE IS RETURNED.B;( ; INPUTS:C;T,; R4=SCB ADDRESS FOR THE QUEUE TO BE SCANNED;S ; OUTPUTS:; 6; C=1 IF THERE ARE NO MORE USABLE ENTRIES IN THE QUEUE0; C=0 IF THE NEXT USABLE ENTRY IS BEING RETURNED$; R0=ADDRESS OF THE PREVIOUS PACKET#; R1=ADDRESS OF THE CURRENT PACKETM(; R5=UCB ADDRESS FOR THE CURRENT PACKET;E1; NOTE: R0 AND R1 MUST BE PRESERVED BETWEEN CALLSN; TO THIS ROUTINE.;USCAN:B010$: MOV R1,R0 ;SAVE ADDRESS OF PREVIOUS PACKET) MOV (R0),R1 ;GET ADDRESS OF NEXT PACKETE( BEQ 50$ ;IF EQ NO MORE PACKETS TO SCAN4 MOV I.UCB(R1),R5 ;GET ADDRESS OF UNIT CONTROL BLOCK TSTB U.STS(R5) ;UNIT BUSY?  BMI 10$ ;IF MI YES .IF DF R$$AMD ASSUME US.SIO,200& TSTB U.ST2(R5) ;I/O STALLED TO UNIT ? BPL 15$ ;IF PL, NO6 CMP $VERTK,I.TCB(R1) ;PACKET FROM VERIFICATION TASK ?% BEQ 40$ ;IF EQ, YES. DEQUEUE PACKETD$ BR 10$ ;NO, SEARCH FOR NEXT PACKET .ENDC ; DF R$$AMD 15$: ;! MOV U.ATT(R5),R3 ;UNIT ATTACHED?P BEQ 40$ ;IF EQ NO(/ CMP #IO.LOV,I.FCN(R1) ;LOAD OVERLAY FUNCTION ?I BEQ 17$ ;IF EQ YES7 CMP #IO.LDO,I.FCN(R1) ;HOW ABOUT LOAD D-SPACE OVERLAY?O BNE 20$ ;IF NE NOU'17$: TST U.CW1(R5) ;MOUNTABLE DEVICE ? D/ BMI 40$ ;IF MI YES, ALWAYS BREAK THROUGH ATT.I20$: ;REFERENCE LABEL4 MOV I.TCB(R1),R2 ;GET ADDRESS OF REQUESTOR TASK TCB$ CMP $RCTPT,R2 ;IS THE I/O FROM RCT?+ BEQ 40$ ;IF EQ YES, ALWAYS LET IT THROUGHR7 BIT #T3.PRV!T3.CLI,T.ST3(R2) ;TASK PRIVILEGED OR CLI ?T BEQ 30$ ;IF EQ NOD+ CMP R2,$LDRPT ;REQUESTING TASK THE LOADER?R- BEQ 40$ ;IF EQ YES-ALWAYS BREAK THRU ATTACHY* BIT #DV.TTY,U.CW1(R5) ;DEVICE A TERMINAL? BEQ 30$ ;IF EQ NOE8 CMPB #IO.WLB/256.,I.FCN+1(R1) ;WRITE LOGICAL FUNCTION ?' BNE 30$ ;IF NE NO, DON'T BREAKTHROUGHU- BITB #TF.WBT,I.FCN(R1) ;BREAKTHROUGH WRITE ?R" BNE 40$ ;IF NE YES, BREAKTHROUGH.30$: CMP R2,R3 ;IS THIS THE APPROPRIATE TASK? BNE 10$ ;IF NE NOA240$: CALL @$TEMP2 ;CALL DRIVER ACCEPTANCE ROUTINE$ BCS 10$ ;IF CS PACKET NOT ACCEPTED BR 60$ ;RETURN THE PACKETU+50$: SEC ;INDICATE NO MORE USABLE PACKETSS60$: RETURN ;E00 on4nblXITT;BB; ACPCHK -- THIS ROUTINE DETERMINES IF A PACKET IS AN ACP FUNCTION;I; INPUT:;F; R1=ADDRESS OF THE PACKET; R5=ADDRESS OF THE UCBN;D ; OUTPUT:H;G&; C=1 IF THE PACKET IS AN ACP FUNCTION ; C=0 IF NOT;4(ACPCHK: TST U.CW1(R5) ;DEVICE MOUNTABLE? BPL 40$ ;IF PL NOR8 BITB #IQ.UMD,I.FCN(R1) ;IS THIS A DIAGNOSTIC FUNCTION?1 BNE 40$ ;IF NE YES, IT CAN'T BE AN ACP FUNCTION ; '; DETERMINE IF FUNCTION IS ACP FUNCTION08; APPLICABLE TO ALL MOUNTED DEVICES - NATIVE AND FOREIGN6; FILES 11 - MAPPING OF VIRTUAL TO LOGICAL NOW DONE BY,; DRQIO. ONLY VIRTUAL & ACP FUNCTIONS THAT2; NEED CORRECT SEQUENCING ARE ROUTED THRU DRIVER.;D# TST U.ACP(R5) ;TEST ADDRESS OF ACP ( BEQ 40$ ;NO ACP - PASS IT ON TO DRIVER+ MOVB I.FCN+1(R1),R2 ;GET THE FUNCTION CODE49 BITB #US.FOR,U.STS(R5) ;MOUNTED FOREIGN (ASSUMED MOUNTEDT ;WITH AN ACP FROM ABOVE)3 BNE 10$ ;IF NE YES, CHECK DCB MASKS FOR ACP FUNC.F* CMP #IO.CLN/400,R2 ;IS IT AN ACP FUNCTION$ BHI 40$ ;IF HI NO, QUEUE TO DRIVER! BR 30$ ;ELSE IS AN ACP FUNCTIONO"10$: MOV (R5),R3 ;GET DCB ADDRESS" CMP R2,#15. ;NORMALIZE FCTN CODE BLOS 20$ ; SUB #16.,R2 ; ( ADD #10,R3 ;ADJUST PTR TO 2ND MASK SET#20$: ASL R2 ;CONVERT TO WORD INDEXS1 BIT $BTMSK(R2),D.MSK+6(R3) ;IS IT ACP FUNCTION??C BNE 30$ ;IF NE ACP FUNCTION(440$: TST (PC)+ ;CLEAR CARRY FOR DRIVER FUNCTION AND$ ;SKIP FOLLOWING INSTRUCTION (MOM% ;WARNED ME NOT TO CODE LIKE THIS)#!30$: SEC ;INDICATE ACP FUNCTIONN RETURN$;I ; DEQUE -- DEQUEUE AN I/O PACKET;L+; THIS ROUTINE DEQUEUES THE CURRENT PACKET.G;D; INPUT:;C#; R0=ADDRESS OF THE PREVIOUS PACKETO%; R1=ADDRESS OF THE PACKET TO DEQUEUE ; R4=SCB ADDRESS;A ; OUTPUT::;L; THE PACKET IS DEQUEUED; R1 IS UNCHANGED,;S2DEQUE: MOV (R1),(R0) ;CLOSE UP LIST REMOVING ENTRY+ BNE 10$ ;IF NE LAST ENTRY WAS NOT REMOVEDI. MOV R0,2(R4) ;SET ADDRESS OF NEW LAST IN LIST810$: MOV R1,S.PKT(R4) ;SET ADDRESS OF CURRENT I/O PACKET RETURN ;AND EXITO ;+ 2; **-$TSTBF-TEST IF I/O BUFFERING CAN BE INITIATED ; E; THIS ROUTINE DETERMINES IF A GIVEN I/O REQUEST IS ELIGIBLE FOR I/O EC; BUFFERING, AND IF SO IT STORES THE PCB ADDRESS OF THE REGION INTOU?; WHICH THE TRANSFER IS TO OCCUR IN I.PRM+16 OF THE I/O PACKET.E ; ; INPUTS: S ; -; R3=ADDRESS OF I/O PACKET FOR I/O REQUEST E ; ; OUTPUTS: ; ; R3 IS PRESERVED. ; (; C=0 IF I/O BUFFERING CAN BE INITIATED. ; ,; C=1 IF I/O BUFFERING CAN NOT BE INITIATED. ;- I ,$TSTBF::SEC ;ASSUME TASK CANNOT BE STOPPED .IF DF R$$IIC8 BIT #1,I.IOSB+4(R3) ;INTERNAL I/O COMPLETION SPECIFIED?* BNE 20$ ;IF NE YES, DON'T BUFFER ANY I/O .ENDC ;R$$IIC/ MOV I.TCB(R3),R0 ;GET ADDRESS OF REQUESTOR TCBN" BIT #T2.STP,T.ST2(R0) ;STOP TASK? BNE 20$ ;IF NE NOR6 MOV I.AADA(R3),R0 ;COPY ATTACHMENT DESCRIPTOR ADDRESS+ MOV A.PCB(R0),R1 ;POINT TO PCB OF TRANSFER 6 BIT #PS.CHK!PS.FXD,P.STAT(R1) ;IS PCB CHECKPOINTABLE? BNE 20$ ;IF NE NON1 MOV R1,I.PRM+16(R3) ;SET PCB ADDRESS OF TRANSFERF$ CLC ;INDICATE TASK MAY BE STOPPED20$: RETURN ; T;+"; **-$INIBF-INITIATE I/O BUFFERING;P>; THIS ROUTINE INITIATES I/O BUFFERING BY DOING THE FOLLOWING:;C(; 1. DECREMENT THE TASK'S I/O COUNT.; -; 2. INCREMENT THE TASK'S BUFFERED I/O COUNT2; 4; 3. INITIATE CHECKPOINTING IF A REQUEST IS PENDING;R ; INPUTS:M;A+; R3=ADDRESS OF I/O PACKET FOR I/O REQUEST.#;C ; OUTPUTS:;T; R3 IS PRESERVED.;- ?)$INIBF::MOV R3,-(SP) ;SAVE PACKET ADDRESS)0 CALL $DECBF ;DEC PCB I/O COUNTS & UNBLOCK TASK. MOV I.TCB(R3),R0 ;POINT TO ISSUING TASK'S TCB- INCB T.TIO(R0) ;TALLY A BUFFERED I/O REQUESTU6 DECB T.IOC(R0) ;ADJUST OUTSTANDING I/O REQUEST COUNT  MOV I.PRM+16(R3),R1 ;GET PCB = SUB P.REL(R1),I.PRM(R3) ;CONVERT TO RELATIVE RELOCATION BIAS) ADD #T.ST2,R0 ;POINT TO TASK STATUS BITSS8 BIT #T2.AST!T2.WFR,(R0) ;TASK IN AST OR WAITFOR STATE ? BMI 10$ ;IF MI AT AST STATEP% BEQ 10$ ;IF EQ NOT IN WAITFOR STATEI3 BIS #T2.SEF,(R0) ;STOP 00ohnmkTADATADATADATADATADATATHE TASK FOR THE EVENT FLAGF10$: ;REFERENCE LABEL+ MOV (SP)+,R3 ;RESTORE PACKET ADDRESS IN R3N RETURN ; ;+ B1; **-$QUEBF-QUEUE BUFFERED I/O FOR COMPLETION A ; H; THIS ROUTINE QUEUES A SPECIAL ENTRY TO A TASK'S AST QUEUE TO COMPLETE G; A BUFFERED I/O REQUEST THE NEXT TIME THE TASK IS SCHEDULED. IT ALSO B*; DECREMENTS THE TASK'S BUFFERED I/O COUNT ; E; NOTE: THIS ROUTINE IS EQUIVALENT TO CALLING $IOFIN AND IT DOES NOT ; UNBUSY THE DEVICE. ; ; INPUTS: F ; "; R0=FIRST WORD OF I/O STATUS #; R1=SECOND WORD OF I/O STATUS ; R3=ADDRESS OF I/O PACKET $ ; ; OUTPUTS: ; ; NONE ;- Q >$QUEBF::MOV R0,I.PRM+6(R3) ;STORE OFFSPRING I/O RETURN STATUS  MOV R1,I.PRM+10(R3) ; 2 MOV I.TCB(R3),R0 ;PICK UP OFFSPRING TCB ADDRESS . MOVB #AK.BUF,A.CBL(R3) ;SET BUFFERED I/O FLAG;+2;**-$REQUE-REQUEUE A REGION LOAD AST TO A TASK ASTD;**-$REQU1-REQUEUE A REGION LOAD AST TO A TASK AST (ALTERNATE ENTRY);FC; THESE ROUTINES ARE USED TO QUEUE A TASK KERNEL AST WHICH HAS BEEN @; USED AS A REGION LOAD AST BACK AS A TASK AST. THE BUFFERED I/O6; COUNT OF THE TASK IS DECREMENTED IF ENTRY AT $REQUE.;: ; INPUTS:M#; R0=TCB ADDRESS OF ASSOCIATED TASKA#; R3=ADDRESS OF PACKET TO BE QUEUEDM;I ; OUTPUTS:; NONE.O;-$REQUE::1$REQU1::BIC #TS.CIP!TS.RDN,T.STAT(R0) ;UNBLK TASKL MOV R0,R2 ;COPY TCB ADDRESS ) ADD #T.ASTL,R2 ;POINT TO AST LISTHEAD E. MOV (R2),(R3) ;LINK PACKET TO FRONT OF LIST  BNE 10$ ;  MOV R3,2(R2) ; 10$: MOV R3,(R2) ; - BIT #T2.SEF,T.ST2(R0) ;TASK IN STOPFOR STATEA BNE 12$ ;IF NE YES0 CALLR $SETCR ;SET CONDITIONAL SCHEDULE REQUEST*12$: CALLR $EXRQU ;UNSTOP TASK AND RETURN ;+&; **-$IODSA-I/O DONE (FOR DSA DRIVERS)&; **-$IOALT-I/O DONE (ALTERNATE ENTRY); **-$IODON-I/O DONE;IN; THIS ROUTINE IS CALLED BY DEVICE DRIVERS AT THE COMPLETION OF AN I/O REQUESTL; TO DO FINAL PROCESSING. THE UNIT AND CONTROLLER ARE SET IDLE AND $IOFIN IS#; ENTERED TO FINISH THE PROCESSING. ; ; INPUTS:,;); R0=FIRST I/O STATUS WORD.R; R1=SECOND I/O STATUS WORD.;; R2=STARTING AND FINAL ERROR RETRY COUNTS IF ERROR LOGGINGR ; DEVICE.C; R5=ADDRESS OF THE UNIT CONTROL BLOCK OF THE UNIT BEING COMPLETED.--; (SP)=RETURN ADDRESS TO DRIVER'S CALLER. E;LC; NOTE: IF ENTRY IS AT $IOALT, THEN R1 IS CLEAR TO SIGNIFY THAT THE ; SECOND STATUS WORD IS ZERO.; H; IF ENTRY IS AT $IODSA, UMR DEALLOCATION, DEVICE BUSY STATUS, AND'; ERROR LOGGING FINISH CODE IS SKIPPEDH ; OUTPUTS:;'; THE UNIT AND CONTROLLER ARE SET IDLE. ;D'; R3=ADDRESS OF THE CURRENT I/O PACKET.A;- .ENABL LSBR,$IOALT::CLR R1 ;ZERO SECOND I/O STATUS WORD$IODON::;+; ** W A R N I N G **K; ; SPM HOOKPOINT NUMBER 18.;S); DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;-+$SPH18==. ;SPM CHANGES THE INSTRUCTION ATN ;THE LOCATION OF THIS LABEL 6 MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK ,( BICB #US.BSY,U.STS(R5) ;CLEAR UNIT BUSY& CLRB S.STS(R4) ;CLEAR CONTROLLER BUSY .IF DF E$$LOG&E$$DVCD1 BIT #S2.EIP,S.ST2(R4) ;IS AN ERROR IN PROGRESS?B BEQ 15$ ;IF EQ NO , MOV R1,-(SP) ;SAVE SECOND I/O STATUS WORD + CALL $FNERL ;FINISH ERROR LOGGING PROCESSB& MOV (SP)+,R1 ;RESTORE I/O STATUS WORD .ENDC ; DF E$$LOG&E$$DVCU15$: ;REFERENCE LABEL .IF DF U$$UMR, BIT #FE.EXT,$FMASK ;IS THIS A 22-BIT SYSTEM BEQ 20$ ;IF EQ NO)0 BITB #UC.NPR,U.CTL(R5) ;IS IT AN NPR DEVICE? ) BEQ 20$ ;IF EQ NO, DOES NOT USE UMR'S # MOV S.KRB(R4),R2 ;POINT TO KRB .- BEQ 20$ ;BLOW OFF ALLOCATING UMRS IF NO KRB D BIT #KS.MBC!KS.EXT!KS.DIP,K.STS(R2) ;SHOULD WE NOT DEALLOCATE UMRS?( BNE 20$ ;IF NE YES -- DON'T DEALLOCATE* ADD K.OFF(R2),R2 ;POINT PAST UMR BLOCK . SUB #M.LGTH,R2 ;POINT TO START OF UMR BLOCK $ CALL $DEUMR ;DEASSIGN ANY UMR'S 7 MOV #$DQUMR,-(SP) ;PUSH ADDRESS TO CHECK FOR UMR WAIT I .ENDC ; DF U$$UMR$IOAL2: ;REFERENCE LABEL(52000on4nbl$: MOV S.PKT(R4),R3 ;RETRIEVE ADDRESS OF I/O PACKET  .IF DF,P$$MON) BR 200$ ; SKIP PERFORMANCE MONITOR NOPS$ .IFTF ; P$$MONI$IODSA:: .IFT ; P$$MON;+; ** W A R N I N G **;;U; SPM HOOKPOINT NUMBER 19.;E); DO NOT CHANGE THE INSTRUCTION FOLLOWINGK; LABEL WITHOUT CHECKING SPM;-+$SPH19==. ;SPM CHANGES THE INSTRUCTION ATK ;THE LOCATION OF THIS LABELM' NOP ;UGLY, BUT WE HAVE TO DO THIS AS  ;THERE'S NO OTHER WAY ( NOP ;TO BE ASSURED OF EXACTLY 2 WORDS ;TO REPLACE.,200$: ;REFERENCE LABEL TO BYPASS THE NOPS ;EXCEPT FOR $IODSA .ENDC .IF DF E$$LOG&E$$DVC$4 BIT #S2.LOG,S.ST2(R4) ;ERROR LOGGING (MASS STORE) ? BEQ 23$ ;IF EQ NO;< TALLY$ B.MIOC,XA$$IO,CPU ;COUNT A MASS STORE I/O COMPLETION23$: .ENDC ; DF E$$LOG&E$$DVCU .IF DF Q$$OPT/ TST (R4) ;ANY OTHER I/O REQUESTS TO INITIATE?  BEQ 25$ ;IF EQ GO TO $IOFIN$ MOV R3,R4 ;COPY I/O PACKET POINTER5 ADD #I.PRM+14,R4 ;POINT TO LAST WORD FOR FORK BLOCK / MOV R0,(R4) ;STORE I/O STATUS BLOCK CONTENTS E MOV R1,-(R4) ;B S H .IF DF M$$PRO , MOV $CPBIT,-6(R4) ;SET UP OUR URM FOR FORK0  .ENDC G S5 CALL $FORK0 ;FORK HERE TO ALLOW NEXT I/O INITIATIONN. MOV R4,R0 ;RESTORE I/O STATUS BLOCK CONTENTS MOV R5,R1 ;N3 SUB #I.PRM+10,R3 ;POINT TO BEGINNING OF I/O PACKET  .ENDC525$: MOV I.UCB(R3),R5 ;GET UCB ADDRESS OF I/O REQUESTO  .IF DF S$$HDW , CALL $SHFND ;IS THIS UNIT SHADOW RECORDED? BCC 251$ ;IF CC YESO JMP IOFIN2 ;GO TO $IOFIN8251$: TSTB ML.DNC(R4) ;IS THIS FIRST PACKET THRU SYSTEM?4 BNE 40$ ;IF NE NO -- MUST DECIDE WHAT TO TELL USER R;=; THIS I/O PACKET IS THE FIRST ONE TO GO THRU THE SYSTEM. IFI?; IT IS A WRITE PACKET, THEN WE MUST WAIT TO SEE THE OUTCOME OFR; THE SECOND PACKET.;R P- CMPB #IO.WLB/400,I.FCN+1(R3) ;IS IT A WRITE?.0 BNE 26$ ;IF NE NO -- CHECK FOR OTHER FUNCTIONS< CALLR $SHSAV ;IF EQ YES -- SAVE STS AND WAIT FOR OTHER PKT;26$: CMP #IO.SCF,I.FCN(R3) ;IS THIS A SHADOW COPY FUNCTION?O BEQ 28$ ;IF EQ YES7 CMPB #IO.RLB/400,I.FCN+1(R3) ;IS THIS A READ FUNCTION? - BNE 271$ ;IF NE NO -- DON'T KNOW WHAT IT IS ;BETTER EXIT NOW T;F@; THIS FUNCTION IS AN IO.RLB FUNCTION (READ) AND NO SPECIAL COPY=; SUBFUNCTION WAS SPECIFIED. WE NOW MUST CHECK TO SEE IF THE; READ COMPLETED SUCCESSFULLY.;I T# CMP R0,#IS.SUC ;WAS IT SUCCESSFUL?E BEQ 271$ ;IF EQ YES -- EXIT$ A;;?; THE FUNCTION IS A READ, AND THE FIRST I/O PACKET FAILED. NOWF=; WE MUST DETERMINE WHETHER WE NEED TO CHECK THE FENCE (WHICHA; MEANS THAT CATCHUP IS ACTIVE) PRIOR TO TRYING THE OTHER PACKET. ;F  MOV R5,-(SP) ;SAVE UCB ADDRESS " MOV U.UMB(R5),R5 ;GET UMB ADDRESS( CALL $CKLBN ;IS LBN RANGE BELOW FENCE?" MOV (SP)+,R5 ;RESTORE UCB ADDRESS BCC 30$ ;IF CC YES27$: CALL $SHSAV ;SAVE STATUS# MOV R3,-(SP) ;PREPARE TO LOG ERRORI MOV R3,-(SP) ;PREPARE SOME MORE' BR 45$ ;GO LOG SHADOW RECORDING ERRORU271$: JMP IOFIN1 ;EXIT  S<28$: MOV #IO.WLB,I.FCN(R2) ;SET WRITE LOGICAL BLOCK FUNCTION; MOVB #251.,I.PRI(R2) ;SET PRIORITY TO THE HIGHEST POSSIBLE  O;OD; I/O PACKET IS A FAILED READ OR A READ/WRITE COMBINED. WE NOW WILL?; ATTEMPT TO QUEUE THE PACKET TO THE ALTERNATE DRIVE AND SEE IFE4; WE CAN'T GET SOME BETTER RESULTS TO TELL THE USER.;  ,30$: CALL $SHSAV ;SAVE STATUS IN I/O PACKET" MOV I.UCB(R2),R5 ;GET UCB ADDRESS$ MOV R2,R1 ;COPY I/O PACKET ADDRESS3 CALLR $DRQRQ ;TRY OTHER I/O PACKET TO OTHER DRIVEE ;S*; AT THIS POINT, WE HAVE DONE TWO PACKETS.6; WE MUST CONSOLIDATE THE RESULTS TO PASS TO THE USER.;T H40$: CALL $SHSAV ;SAVE STATUS( TSTB I.R0(R2) ;ERROR FROM FIRST PACKET? BMI 42$ ;IF MI YES TSTB R0 ;ERROR FROM SECOND?O BMI 42$ ;IF MI YES' JMP IOFIN1 ;SUCCESS FROM BOTH PACKETSS S; 4; WE HAVE DETERMINED THAT AT LEAST ONE OF THE STATUS); RETURN CODES SHOWED AN ERROR CONDITION.A;E 642$: MOV ML.PRI(R4),R3 ;GET PRIMARY I/O PACKET ADDRESS! MOV R4,R2 ;COPY ML NODE ADDRESS. ADD #ML.PKT,R2 ;R2 = SECONDARY PACKET ADDRESS9 MOV I.R0(R3),ML.PR0(R4) ;SAVE STA00%ohnmkTADATADATADATADATADATATUS FROM PRIMARY PACKET9 MOV I.R1(R3),ML.PR1(R4) ;SAVE STATUS FROM PRIMARY PACKETO+ MOV R3,-(SP) ;SAVE PRIMARY PACKET ON STACKT+ MOV R3,-(SP) ;SAVE PRIMARY PACKET ON STACKI7 CMP #IO.SCF,I.FCN(R3) ;IS THIS A SHADOW COPY FUNCTION?  BNE 43$ ;IF NE NOA) TSTB I.R0(R3) ;IS THE PRIMARY STATUS OK?S BMI 45$ ;IF MI NOI! BR 44$ ;RETURN SECONDARY STATUS,143$: TSTB I.R0(R3) ;HOW DOES PRIMARY STATUS LOOK?P BPL 45$ ;IF PL OKA644$: MOV R2,(SP) ;RETURN STATUS FROM SECONDARY PACKET ,;P5; WE HAVE DECIDED WHICH STATUS TO RETURN TO THE USER.,;P R%45$: MOV R4,R1 ;COPY ML NODE ADDRESSM1 MOV $SHERR,R0 ;GET TCB ADDRESS OF THE ERROR TASK, BEQ 46$ ;IF EQ NO ERROR TASK7 CMP $SHPCT,$SHLIM ;DO WE ALREADY HAVE ENOUGH PACKETS ?I, BLT 451$ ;IF LT NO, GO AHEAD WITH THIS ONE6 TST $SHLOS ;HAVE WE LOST TOO MANY TO KEEP TRACK OF ?* BMI 46$ ;IF MI YES, DON'T COUNT THIS ONE! INC $SHLOS ;COUNT ONE MORE LOST BR 46$ ;AND THROW IT AWAYV*451$: INC $SHPCT ;COUNT ONE MORE IN QUEUE2 CLR ML.FID(R4) ;INITIALIZE FILE ID FOR ERROR TASK1 CLR ML.FSEQ(R4) ;INITIALIZE FILE SEQUENCE NUMBERD0 CALL GETWIN ;GET WINDOW ADDRESS, IS THERE ONE?* BEQ 454$ ;IF EQ THERE IS NO WINDOW BLOCK" MOV W.FCB(R2),R2 ;GET FCB ADDRESS) BEQ 454$ ;IF EQ, NO FILE CONTROL BLOCK O MOV KISAR5,-(SP) ;SAVE PAR 5$ MOV R3,-(SP) ;SAVE R3+ CMP R2,#120000 ;IS THE FCB WITHIN THE ACP?S BLO 452$ ;IF LO NO" MOV I.UCB(R3),R3 ;GET UCB ADDRESS" MOV U.ACP(R3),R3 ;GET ACP ADDRESS= MOV T.OFF(R3),KISAR5 ;PICK UP OFFSET INTO TASK REGION OF ACPL. MOV T.PCB(R3),R3 ;GET PCB ADDRESS FOR THE ACP; BIT #PS.CKP!PS.CKR!PS.OUT,P.STAT(R3) ;IS ACP CHECKPOINTED?R BNE 453$ ;IF NE YESQ< ADD P.REL(R3),KISAR5 ;MAP THE ACP TASK REGION THROUGH APR 5, CMP R2,#140000 ;IS THE FCB MAPPED BY APR 6? BLO 452$ ;IF LO NO1 SUB #20000,R2 ;CONVERT FCB ADDRESS TO APR 5 BIASR2 ADD #200,KISAR5 ;ADJUST MAPPING TO NEXT 4K OF FCP8452$: MOV F.FNUM(R2),ML.FID(R4) ;MOVE FILE ID TO ML NODE6 MOV F.FSEQ(R2),ML.FSEQ(R4) ;MOVE FILE SEQUENCE NUMBER453$: MOV (SP)+,R3 ;RESTORE R3' MOV (SP)+,KISAR5 ;RESTORE KERNEL PAR 5E3454$: CALL $DLNK ;REMOVE THE ML NODE FROM THE LISTH& MOV ML.TCB(R4),R3 ;GET ADDRESS OF TCB2 MOV T.NAM(R3),ML.TCB(R4) ;PUT TASK NAME IN PACKET MOV T.NAM+2(R3),ML.TCB+2(R4) ;C* CALL $EXRQF ;QUEUE ML NODE TO ERROR TASK446$: MOV (SP)+,R3 ;GET I/O PACKET ADDRESS FROM STACK% MOV I.R0(R3),R0 ;GET PROPER STATUSES % MOV I.R1(R3),R1 ;GET PROPER STATUSES * MOV (SP)+,R3 ;GET REAL I/O PACKET ADDRESS E .ENDC ; DF S$$HDW C .IF DF P$$MON  BR P1 ;BYPASS IOFIN HOOKPOINTK R .ENDC .DSABL LSB ;+; **-$IOFIN-I/O FINISH;LM; THIS ROUTINE IS CALLED TO FINISH I/O PROCESSING IN CASES WHERE THE UNIT AND.G; CONTROLLER ARE NOT TO BE DECLARED IDLE. IF THE TASK WHICH ISSUED THE E; I/O HAS HAD A RECENT MAPPING CHANGE WHICH MAY HAVE UNMAPPED ITS I/O F; STATUS BLOCK, THE I/O PACKET IS QUEUED TO THE FRONT OF ITS AST QUEUE:; TO BE COMPLETED LATER IN $FINBF BY CALLING $IOFIN AGAIN.;A ; INPUTS:;N; R0=FIRST I/O STATUS WORD.$; R1=SECOND I/O STATUS WORD.'; R3=ADDRESS OF THE I/O REQUEST PACKET. ; ; OUTPUTS:;H%; THE FOLLOWING ACTIONS ARE PERFORMEDH;OE; 1-THE FINAL I/O STATUS VALUES ARE STORED IN THE I/O STATUS BLOCK IFC; ONE WAS SPECIFIED.K;I;; 2-ALL ASSOCIATED I/O COUNTS ARE DECREMENTED AND TS.RDN ISA8; CLEARED IN CASE THE TASK WAS BLOCKED FOR I/O RUNDOWN.:; T3.MPC IS CLEARED IF THE TASK I/O COUNT GOES TO ZERO TO;; INDICATE THAT THE I/O COUNT WENT TO ZERO AFTER A MAPPING ; CHANGE. ; ?; 3-IF 'TS.CKR' IS SET, THEN IT IS CLEARED AND CHECKPOINTING OF ; THE TASK IS INITIATED.P;:B; 4-IF AN AST SERVICE ROUTINE WAS SPECIFIED, THEN AN AST IS QUEUED4; FOR THE TASK. ELSE THE I/O PACKET IS DEALLOCATED.;O2; 5-A SIGNIFICANT EVENT OR EQUIVALENT IS DECLARED.;R(; NOTE: R4 IS DESTROYED BY THIS ROUTINE.;-$IOFIN:: ;REFERENCE LABEL  D .IF DF P$$MON C;+; ** W A R N I N G **T;E; SPM HOOKPOINT NUMBER 35.;T); DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;-+$SPH35==. 00-on4nbl;SPM CHANGES THE INSTRUCTION ATI ;THE LOCATION OF THIS LABELP& NOP ;UGLY, BUT IT'S THE ONLY WAY WE ;CAN ASSURE TWO INSTRUCTIONS' NOP ;TO PICK UP AND REPLACE WITH THEL ;SPM HOOKSP1:I F .ENDC .ENABL LSB # .IF DF R$$AMD ;AUTOMOUNT/DISMOUNTE>; NOTE THAT THIS CODE WILL NOT WORK IF EITHER ERROR LOGGING OR; SHADOW RECORDING IS TURNED ONN, TSTB R0 ;ERROR IN PROCESSING I/O REQUEST ? BPL 100$ ;IF PL, NOT' MOV I.UCB(R3),R4 ;YES, GET UCB ADDRESSS ASSUME US.SIO,200& TSTB U.ST2(R4) ;I/O STALLED TO UNIT ?, BPL 100$ ;IF PL, NO - PASS ERRORS TO TASK ; CMP $VERTK,I.TCB(R3) ;I/O REQUEST FROM VERIFICATION TASK ?N, BEQ 100$ ;IF EQ, YES - PASS ERRORS TO TASK3 MOV U.SCB(R4),R0 ;GET SCB LISTHEAD FOR I/O PACKETSD# MOV R3,R1 ;GET CURRENT I/O PACKETO4 ADD #U.SPRM,R4 ;POINT TO PARAMETER SAVE AREA IN UCB9 ADD #I.PRM+6,R3 ;POINT TO READ/WRITE CELLS IN I/O PACKETI MOV (R4)+,(R3)+ ;RESTORE MOV (R4)+,(R3)+ ; I/OM MOV (R4)+,(R3)+ ; PACKET MOV (R4),(R3) ;1 CALL $QINSB ;RE-INSERT PACKET AT FRONT OF QUEUEB RETURN ;P100$: ;REFERENCE LABEL P .ENDC ; DF R$$AMD .IF DF S$$HDW I MOV R5,-(SP) ;SAVE R57 MOV I.UCB(R3),R5 ;SET UCB ADDRESS FOR SHADOW RECORDINGG- CALL $SHFND ;SEE IF WE HAVE PACKET PROBLEMSG MOV (SP)+,R5 ;RESTORE R5D' BCS IOFIN2 ;IF CS NO SHADOW RECORDING  U;B; THIS IS THE POINT WHERE WE WILL DEALLOCATE AN ML NODE AND RETURND; THE STATUS IN THE REGISTERS TO THE USER. ALL PROCESSING CONCERNED<; WITH STATUS RETURNS MUST HAVE BEEN RESOLVED AT THIS POINT.;T 4IOFIN1: CALL $DLNK ;REMOVE ML NODE FROM LIST ON UMB2 MOV ML.PRI(R4),R3 ;GET PRIMARY I/O PACKET ADDRESS& MOV R3,-(SP) ;SAVE I/O PACKET ADDRESS MOV R1,-(SP) ;SAVE STATUS N MOV R0,-(SP) ;SAVE STATUS* MOVB ML.LEN(R4),R1 ;GET LENGTH OF ML NODE! MOV R4,R0 ;COPY ML NODE ADDRESSO( CALL $DEACB ;RELEASE STORE FOR ML NODE MOV (SP)+,R0 ;RESTORE STATUSN MOV (SP)+,R1 ;RESTORE STATUS ) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSCIOFIN2: ;REFERENCE LABELN U .ENDC N2 TALLY$ B.AIOC,XA$$IO,CPU ;COUNT AN I/O COMPLETION M3 MOV R0,I.PRM+6(R3) ;STORE FIRST WORD OF I/O STATUS 5 MOV R1,I.PRM+10(R3) ;STORE SECOND WORD OF I/O STATUSK& TSTB I.EFN(R3) ;VIRTUAL I/O FUNCTION? BPL 205$ ;IF PL NO( BICB #200,I.EFN(R3) ;CLEAR VIRTUAL FLAG. BIT #1,I.LN2(R3) ;HEADER LOCKED DOWN FOR ACP? BNE 1$ ;IF NE NO9 MOV I.TCB(R3),R0 ;THE I/O PACKET IS CONNECTED TO THE TCBP2 MOV T.ATT(R0),R0 ;THE TCB IS CONNECTED TO THE ADB SUB #A.TCBL,R0 ;FIND THE FOOT CALL $DECIO ;UNLOCK THE HEADER1$: ;REFERENCE LABEL % MOV #205$,-(SP) ;FAKE RETURN ADDRESSR,$DCWIO::MOV $WCFLG,R0 ;GET UCB FLAG FOR TEST BEQ 11$ ;IF EQ W.IOC DISABLEDR) MOV I.UCB(R3),R2 ;GET DEVICE UCB ADDRESSI$ BIT R0,U.CW1(R2) ;FILES-11 DEVICE ? BEQ 2$ ;IF EQ, NOL1 CALL GETWIN ;GET WINDOW ADDRESS, IS THERE ONE ?D BEQ 2$ ;IF EQ, NO + DECB W.IOC(R2) ;DECREMENT WINDOW I/O COUNT 11$: ;D .IF DF R$$LKL0 MOV I.PRM+16(R3),R0 ;PICK UP LOCK BLOCK ADDRESS BEQ 2$ ;IF EQ THERE IS NONEC1 CMP R0,#140000 ;IS IT A RELOCATED USER ADDRESS ?A BHIS 2$ ;IF HIS, YES# DEC (R0) ;FREE LOCK FOR UNLOCKINGF .ENDC ; DF R$$LKL2$:  RETURN 205$: ;REFERENCE LABELV5 MOV I.IOSB+4(R3),R2 ;GET ADDRESS OF I/O STATUS BLOCK2. BEQ 10$ ;IF EQ NO I/O STATUS BLOCK SPECIFIED .IF DF R$$IIC/ BIT #1,R2 ;INTERNAL I/O COMPLETION REQUESTED? BEQ 21$ ;IF LO BIT NOT SET, NO DEC R2 ;CLEAR LO BIT. MOV KISAR5,-(SP) ;SAVE CURRENT KISAR5 MAPPING. MOV KISAR6,-(SP) ;SAVE CURRENT KISAR6 MAPPING4 MOV I.IOSB+2(R3),KISAR5 ;MAP I/O COMPLETION ROUTINE8 MOV KISAR5,KISAR6 ;ROUTINE MAY BE MAPPED THROUGH KISAR6 .IF DF K$$DAS! MOV KINAR5,-(SP) ;SAVE I-SPACE 5 ! MOV KINAR6,-(SP) ;SAVE I-SPACE 63" MOV KISAR5, KINAR5 ;MAP I-SPACE 5" MOV KISAR6, KINAR6 ;MAP I-SPACE 6 K .IFTF ; K$$DASF1 CALL (R2) ;CALL INTERNAL I/O COMPLETION ROUTINEE .IFT ; K$$DAS0 MOV (SP)+,KINAR6 ;RESTORE SAVED MAPPING CONTEXT MOV (SP)+,KINAR5 ;... .ENDC ; K$$DASG0 MOV (SP)+,KISAR6 ;RESTORE SAVED MAPPING CONTEXT MOV (SP)+,KISAR5 005ohnmkTADATADATADATADATADATA;5 RETURN ;DONEI21$: ;REF LABEL .ENDC ;R$$IIC, MOV I.TCB(R3),R0 ;POINT TO ISSUING TASK TCB6 BIT #TS.BLC,T.STAT(R0) ;TASK BLOCKED (CHECKPOINTED) ?, BNE 3$ ;IF NE YES, DEFER I/O STATUS UPDATE. BIT #T3.MPC,T.ST3(R0) ;RECENT MAPPING CHANGE? BEQ 5$ ;IF EQ NO63$: CALL $SETCR ;RESCHEDULE TASK TO LOOK AT AST QUEUE$ MOV R3,R1 ;COPY I/O PACKET POINTER8 MOVB #AK.DIO,A.CBL(R1) ;INDICATE DELAYED I/O COMPLETION1 ADD #T.ASTL,R0 ;POINT TO TASK AST QUEUE LISTHEADM1 CALL $QINSB ;INSERT BLOCK AT BEGINNING OF QUEUEN0 BR $DECAL ;DEC I/O COUNTS, UNBLK TASK & RETURN*5$: MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING1 MOV I.IOSB+2(R3),KISAR6 ;MAP TO I/O STATUS BLOCKB4 MOV I.PRM+6(R3),(R2)+ ;SET FINAL I/O STATUS VALUES MOV I.PRM+10(R3),(R2) ;, MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING 010$: CALL $DECAL ;DEC I/O COUNTS & UNBLOCK TASK4 MOV I.TCB(R3),R1 ;GET ADDRESS OF TASK CONTROL BLOCK, DECB T.IOC(R1) ;DECREMENT I/O REQUEST COUNT/ BNE 15$ ;IF NE TASK STILL HAS OUTSTANDING I/ON0 BIC #T3.MPC,T.ST3(R1) ;CLEAR MAPPING CHANGE BIT15$: ;REF LABEL5 MOV I.TCB(R3),R1 ;PICK UP ISSUING TASK'S TCB ADDRESSM" MOV R5,-(SP) ;SAVE UCB ADDRESS % MOV I.TCB(R3),R5 ;SET TCB ADDRESS ), MOVB I.EFN(R3),R0 ;GET EVENT FLAG NUMBER 1 CALL $SETFG ;SET EFN AND UNLOCK IF GROUP GLOBALT& MOV R3,R0 ;COPY I/O PACKET ADDRESS $ TST (R3)+ ;POINT TO SECOND WORD 3 MOV #I.LGTH,(R3)+ ;INSERT LENGTH OF BLOCK IN BYTESD? MOV #8.*2,(R3)+ ;SET NUMBER OF BYTES TO ALLOCATE ON USER STACKA( MOV I.AST(R0),(R3)+ ;INSERT AST ADDRESS BEQ 70$ ;IF EQ NONE SPECIFIEDL. MOV #1,(R3)+ ;INSERT NUMBER OF AST PARAMETERS@ MOV I.IOSB(R0),(R3) ;INSERT VIRTUAL ADDRESS OF I/O STATUS BLOCK' MOV R0,R1 ;COPY ADDRESS OF I/O PACKET,. MOV R5,R0 ;CALCULATE ADDRESS OF AST LISTHEAD ADD #T.ASTL,R0 ;G" CALL $QINSF ;INSERT AST IN QUEUE MOV R5,R0 ;COPY TCB ADDRESS * CALL $SETCR ;SET TASK SCHEDULE REQUEST BR 80$ ;+70$: CALL $DEPKT ;DEALLOCATE I/O PACKET U)80$: MOV (SP)+,R5 ;RESTORE UCB ADDRESS M RETURN ; .DSABL LSBD;+"; *-GETWIN-GET FILE WINDOW ADDRESS;#; INPUT:; R3=I/O PACKET ADDRESSE;S ; OUTPUT:S; R2=WINDOW ADDRESSR; Z-BIT SET IF NO WINDOW;->GETWIN: MOV I.LN2(R3),R2 ;GET IMAGE OF LUT2 OR ADDRESS OF LUT2 BIT #1,R2 ;ADDRESS?E BNE 10$ ;IF NE NOG .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGD" MOV I.TCB(R3),R2 ;GET TCB ADDRESS1 MOV T.PCB(R2),R2 ;GET PCB ADDRESS OF TASK REGIONA3 MOV P.REL(R2),KISAR6 ;ASSUME WE NEED TO MAP HEADERB .IFTF( MOV @I.LN2(R3),R2 ;GET CONTENTS OF LUT2 .IFTN" MOV (SP)+,KISAR6 ;RESTORE MAPPING .ENDC210$: BIC #1,R2 ;CLEAR POSSIBLE INTERLOCK, WINDOW? RETURN ;  ;+5; **-$DECAL-DECREMENT ALL I/O COUNTS AND UNBLOCK TASKR;D?; THIS ROUTINE IS CALLED ON I/O COMPLETION TO DECREMENT ALL I/OF>; COUNTS IN ATTACHMENT DESCRIPTORS AND TO UNBLOCK THE TASK FOR(; CHECKPOINT IN PROGRESS OR I/O RUNDOWN.; ; INPUTS:D;S; R3=ADDRESS OF I/O PACKET.R;K ; OUTPUTS:;E; NONE.M;- E9$DECAL::MOV I.AADA(R3),R0 ;DEC I/O COUNT IN 1ST ATT DESC? BEQ 10$ ;IF EQ NOK$ CLR I.AADA(R3) ;CLEAR ATT DESCR PTR" CALL $DECIO ;DECREMENT THE COUNT910$: MOV I.AADA+2(R3),R0 ;DEC I/O COUNT IN 2ND ATT DESCR?  BEQ 20$ ;IF EQ NOB& CLR I.AADA+2(R3) ;CLEAR ATT DESCR PTR" CALL $DECIO ;DECREMENT THE COUNT020$: MOV I.TCB(R3),R0 ;POINT TO ISSUING TASK TCB, BIC #TS.CIP!TS.RDN,T.STAT(R0) ;UNBLOCK TASK RETURN ;.;+?; **-$DECBF-DECREMENT ALL PARTITION I/O COUNTS AND UNBLOCK TASK;O>; THIS ROUTINE IS CALLED ON BUFFERINT I/O TO DECREMENT ALL I/O:; COUNTS IN PCBS AND TO UNBLOCK THE TASK FOR CHECKPOINT IN; PROGRESS OR I/O RUNDOWN.;E ; INPUTS:T;0; R3=ADDRESS OF I/O PACKET./;O ; OUTPUTS:;D; NONE.B;- -$DECBF::MOV R3,-(SP) ;SAVE I/O PACKET ADDRESSP3 MOV I.AADA(R3),R0 ;DEC I/O COUNT IN 1ST ATT DESCR?B BEQ 10$ ;IF EQ NOU) BIS #1,I.AADA(R3) ;INDICATE BUFFERED I/O)" CALL $DECIP ;DECREMENT THE COUNT% MOV (SP),R3 ;RESTORE PACKET ADDRESS 910$: MOV I.AADA+2(R3),R0 ;DEC I/O COUNT IN 2ND ATT DESCR?U BEQ 20$ ;IF EQ NOE00=on4nbl+ BIS #1,I.AADA+2(R3) ;INDICATE BUFFERED I/OH" CALL $DECIP ;DECREMENT THE COUNT)20$: MOV (SP)+,R3 ;RESTORE PACKET ADDRESSA, MOV I.TCB(R3),R0 ;POINT TO ISSUING TASK TCB, BIC #TS.CIP!TS.RDN,T.STAT(R0) ;UNBLOCK TASK RETURN ;S M;+; **-$IOKIL-I/O KILL;NL; THIS ROUTINE IS CALLED TO FLUSH ALL I/O REQUESTS FOR THE CURRENT TASK FROMJ; A DEVICE QUEUE AND TO CANCEL THE CURRENT I/O OPERATION IN PROGRESS IF IT; IS ALSO FOR THE CURRENT TASK.0;E ; INPUTS: ;2<; R5=ADDRESS OF THE UCB OF THE DEVICE TO FLUSH REQUESTS FOR.;A ; OUTPUTS:;HB; IF THE SPECIFIED DEVICE IS NOT FILE STRUCTURED, THEN THE I/O RE-D; REQUEST QUEUE IS FLUSHED AND THE CURRENT I/O OPERATION IN PROGRESS; IS CANCELLED.R;;(; NOTE: R4 IS DESTROYED BY THIS ROUTINE.;-$IOKIL:: .IF DF M$$PRO0 CLR $TEMP0 ;INDICATE THIS IS NOT DRQIO CALLING .ENDC ; DF M$$PRO0$IOKL1::CLR $TEMP2 ;SET INDICATOR TO FLUSH ASTS,$IOKL2::MOV U.SCB(R5),R4 ;GET ADDRESS OF SCB/ MOV $TKTCB,R1 ;GET TCB ADDRESS OF CURRENT TASKF& TST U.CW1(R5) ;DEVICE-UNIT MOUNTABLE? BPL 10$ ;IF PL NOT- BITB #US.MNT,U.STS(R5) ;DEVICE-UNIT MOUNTED?N! BNE 10$ ;IF EQ NO - FLUSH QUEUEU: TST U.ACP(R5) ;DEVICE HAVE ACP (ALSO CATCHES NOT FOREIGN)& BNE 40$ ;IF NE ES, CAN'T FLUSH QUEUE10$:$ .IF DF C$$RTK ;REMOTE TASK SUPPORT6 BIT #F5.RTK,$FMSK5 ;IS REMOTE TASK SUPPORT TURNED ON? BEQ 15$ ;IF EQ NOI: CMP (R5),$XXLOW ;IS THE DCB ADDRESS IN THE GENERIC RANGE? BLO 15$ ;IF LO NOS CMP (R5),$XXHGH ;IS IT?4 BLOS 40$ ;IF LO OR SAME, YES DON'T FLUSH QUEUE YET .ENDC ;C$$RTK15$:/ MOV R4,R3 ;COPY ADDRESS OF I/O QUEUE LISTHEAD-.20$: MOV R3,R2 ;SAVE ADDRESS OF CURRENT ENTRY( MOV (R2),R3 ;GET ADDRESS OF NEXT ENTRY BEQ 40$ ;IF EQ END OF LIST- CMP R1,I.TCB(R3) ;REQUEST FOR CURRENT TASK?$ BNE 20$ ;IF NE NOP- CMP R5,I.UCB(R3) ;REQUEST FOR SPECIFIED UCB?P BNE 20$ ;IF NE NO1 MOV (R3),(R2) ;CLOSE UP LISTL BNE 30$ ;IF NE NO NEW LAST& MOV R2,2(R4) ;SET ADDRESS OF NEW LAST230$: MOV #IE.ABO&377,R0 ;SET FINAL STATUS TO ABORT/ TSTB $TEMP2 ;SUBFUNCTION BIT SET FOR IO.KIL ? BMI 35$ ;IF MI YES2 CLR I.AST(R3) ;MAKE SURE THERE IS NO AST DECLARED,35$: CLR R1 ;CLEAR R1 BEFORE CALLING $IOFIN! CALL $IOFIN ;FINISH I/O REQUESTQ BR $IOKL2 ;GO AGAIN.40$: TSTB U.STS(R5) ;UNIT BUSY?K* BMI 45$ ;IF MI YES -- ALWAYS CALL DRIVER Q T .IF DF M$$PRO P" MOV U.SCB(R5),R4 ;GET SCB ADDRESS+ MOV S.KRB(R4),R4 ;GET KRB ADDRESS (IF ANY)A' BEQ 44$ ;IF EQ NO KRB -- CALL DRIVER?T/ BIT K.URM(R4),$URMST ;IS THE KRB'S URM ONLINE?O( BEQ 50$ ;IF EQ NO -- DON'T CALL DRIVER . .ENDC I $?44$: BITB #UC.KIL,U.CTL(R5) ;CALL DRIVER REGARDLESS OF ACTIVITY BEQ 50$ ;IF EQ NO -- EXIT ( BITB #US.OFL,U.ST2(R5) ;DEVICE ONLINE ? BNE 50$ ;IF NE NO -- EXITI45$: ;REFERENCE LABEL  Y .IF DF M$$PRO I) MOV $TEMP0,R0 ;WERE WE CALLED FROM DRQIO  BEQ 46$ ;IF EQ NOB MOV R0,SP ;RESET STACK POINTER. TST (SP)+ ;ADVANCE PAST SECONDARY PACKET PTR. MOV (SP)+,R4 ;SET ADDRESS OF I/O PACKET IN R40 INC R4 ;MAKE IT ODD TO INDICATE PACKET ADDRESS TST (SP)+ ;CLEAN STACK( BR 461$ ;AND FORK TO CORRECT PROCESSOR046$: MOV $TKTCB,R4 ;GET CURRENT TASK TCB ADDRESS'461$: MOV U.SCB(R5),R2 ;GET SCB ADDRESS(& MOV #465$,R3 ;GET THE ROUTINE ADDRESS5 JMP $EXRP1 ;TRANSFER EXECUTION TO CORRECT PROCESSOR$-465$: BIT #1,R4 ;WERE WE CALLED FROM DRQIO ?I& BEQ 462$ ;IF EQ NO, JUST CALL DRIVER MOV R4,R3 ;COPY PACKET ADDRESS DEC R3 ;CLEAR LOW ORDER BITR CLR R1 ;SET LENGTH AND& MOV #IS.SUC&377,R0 ;STATUS FOR $IOFIN6 MOV I.TCB(R3),-(SP) ;SAVE TCB ADDRESS FOR DRIVER CALL% CALL $IOFIN ;FINISH THE I/O REQUESTE# MOV (SP)+,R4 ;RETRIEVE TCB ADDRESSN A*462$: MOV R4,R1 ;RESTORE CURRENT TASK TCB& MOV U.SCB(R5),R4 ;RESTORE SCB ADDRESS E .ENDC J $4 MOV S.PKT(R4),R0 ;GET ADDRESS OF CURRENT I/O PACKET7 MOV (R5),R2 ;RETRIEVE ADDRESS OF DEVICE CONTROL BLOCK;/ MOV KINAR5,-(SP) ;SAVE KERNEL INSTR ADDR REG 5K A E .IF DF K$$DAS . MOV KDSAR5,-(SP) ;SAVE KERNEL DATA ADDR REG 5 S .IFTF S .IF DF X$$HDR$ MOV KISAR6,-(SP) ;S00EouLomkTADATADATADATADATADATAAVE KERNEL APR 6 .ENDC) MOV D.PCB(R2),R3 ;GET DRIVER PCB ADDRESS' BEQ 47$ ;IF EQ DRIVER IS PART OF EXEC4 MOV P.REL(R3),KINAR5 ;MAP THE DRIVER IN INSTR SPACE ) .IFTS E3 MOV P.REL(R3),KDSAR5 ;MAP THE DRIVER IN DATA SPACEG A .IFTF U<47$: MOV D.DSP(R2),R2 ;GET ADDRESS OF DRIVER DISPATCH TABLE % BEQ 49$ ;IF EQ DRIVER IS UNLOADED E% MOV S.KRB(R4),R3 ;GET KRB ADDRESS " BEQ 48$ ;IF EQ NO KRB ADDRESS ' MTPS K.PRI(R3) ;SET DEVICE PRIORITY 3 MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX FROM KRB 6 ;ME; CALL DRIVER AT CANCEL I/O OPERATION ENTRY POINT WITH THE ARGUMENTS:R;F'; R0=ADDRESS OF THE CURRENT I/O PACKET.I,; R1=ADDRESS OF THE TCB OF THE CURRENT TASK.; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.V'; R5=ADDRESS OF THE UNIT CONTROL BLOCK.A; 5; IF S.KRB=0 THEN R3 IS UNDEFINED AND PRIORITY =0. K ; +48$: MOV R5,-(SP) ;;;PROTECT R5 FROM DRIVERM, CALL @D.VCAN(R2) ;;;CANCEL CURRENT REQUESTS MOV (SP)+,R5 ;;;RETRIEVE R5& MTPS #0 ;;;ALLOW DEVICE INTERRUPTS 49$: ;REF LABEL P .IF DF X$$HDR' MOV (SP)+,KISAR6 ;RESTORE KERNEL APR 6  .ENDC .IFTT 1 MOV (SP)+,KDSAR5 ;RESTORE KERNEL DATA ADDR REG 5C R .ENDC . 2 MOV (SP)+,KINAR5 ;RESTORE KERNEL INSTR ADDR REG 550$: RETURN ; ;+ ; **-$SCDVT-SCAN DEVICE TABLES0; **-$SCDV1-SCAN DEVICE TABLES (ALTERNATE ENTRY);VP; THIS ROUTINE IS A CO-ROUTINE THAT IS CALLED TO SCAN THE DEVICE TABLES. FOR EAC,; UNIT CONTROL BLOCK THE CALLER IS RECALLED.;W ; INPUTS:E;P&; R3=LIST POINTER (IF ENTRY AT $SCDV1);H ; OUTPUTS:;+4; C=1 IF NO MORE ENTRIES EXIST IN THE DEVICE TABLES.7; C=0 IF THE NEXT DEVICE TABLE ENTRY IS BEING RETURNED.R*; R3=ADDRESS OF THE DEVICE CONTROL BLOCK.*; R4=ADDRESS OF THE STATUS CONTROL BLOCK.(; R5=ADDRESS OF THE UNIT CONTROL BLOCK.;-;; *********************************************************H ; * * +; * > > > W A R N I N G < < < *E ; * *E9; * THE FOLLOWING ARE OFFSET DEFINITIONS WHICH ARE *U9; * SUPPLIED EITHER BY DEFINITION IN THE EXEC (IOSUB) *P9; * OR THE DUMMY STB FILE (FROM SFVC2). ANY CHANGE TO *E9; * THESE DEFINITIONS MUST BE MADE IN BOTH MODULES. *R ; * *S;; *********************************************************O;O/S$$SPA==10 ;SYMBOL TO ADD TO SP TO ABORT SCAN.4S$$SPC==6 ;OFFSET ON SP TO CLR TO SKIP CURRENT DCB *8$SCDVT::MOV #$DEVHD,R3 ;GET ADDRESS OF FIRST DCB ADDRESS6$SCDV1::MOV (SP)+,R4 ;REMOVE RETURN ADDRESS FROM STACK*10$: MOV (R3),R3 ;GET ADDRESS OF NEXT DCB BEQ 30$ ;IF EQ NO MORE% MOV D.UCB(R3),R5 ;POINT TO FIRST UCBY& BIT #DV.PSE,U.CW1(R5) ;PSEUDO DEVICE? BNE 10$ ;IF NE YES; MOVB D.UNIT+1(R3),-(SP) ;CALCULATE NUMBER OF UCB'S TO SCAN* SUB D.UNIT(R3),(SP) ;#20$: MOV R3,-(SP) ;SAVE DCB ADDRESSS MOV R5,-(SP) ;SAVE UCB ADDRESSA! MOV R4,-(SP) ;SET RETURN ADDRESSS6 MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK CLC ;INDICATE ENTRY CALL @(SP)+ ;CALL THE CALLER$ MOV (SP)+,R4 ;REMOVE RETURN ADDRESS" MOV (SP)+,R5 ;RESTORE UCB ADDRESS" MOV (SP)+,R3 ;RESTORE DCB ADDRESS% ADD D.UCBL(R3),R5 ;POINT TO NEXT UCBT$ DECB (SP) ;ANY MORE UCB'S TO SCAN? CMPB (SP),#-1 ; BNE 20$ ;IF NE YES TST (SP)+ ;CLEAN STACK BR 10$ ;GO AGAIN30$: SEC ;INDICATE NO ENTRY, JMP (R4) ;RETURN TO CALLER .END ;SAVE UCB ADDRESSA! MOV R4,-(SP) ;SET RETURN ADDRESSS6 MOV U.SCB(R5),R4 ;GET ADDRESS OF STATUS CONTROL BLOCK CLC ;INDICATE ENTRY CALL @(SP)+ ;CALL THE CALLER$ MOV (SP)+,R4 ;REMOVE RETURN ADDRE .TITLE KXDRV .IDENT /1.00/;; COPYRIGHT (C) 1988 BY); DIGITAL EQUIPMENT CORPORATION, MAYNARD(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO5; AND OWNERSHIP 00uMon4nbl OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;(5; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N; PAUL K. M. WEISS H ; K. L. Noel;E; MACRO LIBRARY CALLS; * .MCALL HWDDF$,PKTDF$,SCBDF$,UCBDF$,CPRDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS SCBDF$ ,,1 ;SCB DEFINITIONSN( UCBDF$ ,,1 ;UNIT CONTROL BLOCK OFFSETS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS# CPRDF$ ;CPR SPECIFIC DEFINITIONSSO;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++M;NK; THE FOLLOWING TABLE MUST BE THE FIRST THING IN THE DRIVER. THE EXEC USESMN; A VECTORED ENTRY SYSTEM TO THIS MODULE. ANY CHANGES MADE TO THIS TABLE MUST'; ALSO BE MADE IN THE EXEC MODULE DRSUBL;WO;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,( .WORD CPRCON ;UNIT CONNECT ENTRY POINT6 .WORD CPRALO ;ALLOCATE BUFFER SPACE AND COMMAND RING' .WORD CPRDEA ;DEALLOCATE BUFFER SPACE" .WORD CPRSEN ;SEND PACKET TO VMS: .WORD CPRABO ;ABORT TASK AND CLEANUP OUTSTANDING PACKETS8 .WORD CPRRCV ;RE-ENTRY POINT IF STALLED DUE TO NO POOL>XXBIAS: .WORD 0 ;XX DRIVER BIAS AND RETURN ADDRESS FOR RETURN*XXALRT: .WORD 0 ;FROM A FAILED ALLOCATION; ; LOCAL DATA;L;****TEMPORARY TPR1=2+ TPR2=4+ TPR3=6+ KXCSRD=177530 KXCSRF=177534 KXJQIR=177532;****TEMPORARY<RNGBAS: .WORD 0 ;APR BIAS OF RINGS (ALSO OF BASE OF CPRBUF)=CSR: .WORD 0 ;WE SAVE THE CSR - WE DON'T HAVE IT WHEN CALLEDR6SNDRNG: .WORD 140000 ;CURRENT RSX TO VMS RING ADDRESS2PRVSND: .WORD 0 ;PREVIOUS RSX TO VMS RING ADDRESS4FRSTSN: .WORD 140000 ;FIRST RSX TO VMS RING ADDRESS6WRAPSN: .WORD 0 ;ADDRESS JUST PAST RSX TO VMS RINGS - ;INDICATES WRAPL1RCVRNG: .WORD 0 ;CURRENT VMS TO RSX RING ADDRESS=2PRVRCV: .WORD 0 ;PREVIOUS VMS TO RSX RING ADDRESS/FRSTRC: .WORD 0 ;FIRST VMS TO RSX RING ADDRESSR6WRAPRC: .WORD 0 ;ADDRESS JUST PAST VMS TO RSX RINGS - ;INDICATES WRAPE9BUFFWT: .WORD 0 ;COUNT OF TASKS WAITING FOR BUFFER SPACE 0MAXBUF: .WORD 0 ;MAXIMUM CPRBUF ALLOCATION SIZE,TOPRSX: .WORD 0 ;END OF RSX CONTROLLED AREA*XXWAIT: .WORD 0 ;XX DRIVER WAIT FLAG WORD"XXR5: .WORD 0 ;XX DRIVER SAVED R5.XXUCB: .WORD 0 ;XX DRIVER GENERIC UCB ADDRESS6XXNET: .WORD 0 ;XX DRIVER GENERIC NETWORK UCB ADDRESS1SYSUCB: .BLKW 2 ;ADDRESS OF CPRSYS'S VMS CP: UCBW; ; DRIVER DISPATCH TABLE ;RD DDT$ KX,1,,,,NEW=Y ;GENERATE DISPATCH TABLE - ALWAYS ONE CONTROLLER .PAGE1 .SBTTL KXKRB - CONTROLLER INITIALIZATION ROUTINEF; +; KXKRB - CONTROLLER INITIALZATION ROUTINE.C;OF; THIS ROUTINE ASSUMES THAT THE TOP FOUR WORDS OF PHYSICAL MEMORY HAVE(; BEEN SET UP WITH THE FOLLOWING VALUES:;D<; +-------------------------------------------------------+0; | SIZE IN 32 WORD BLOCKS OF CPRBUF |<; +-------------------------------------------------------+(; | # OF RSX/KXJ -> VAX/VMS RINGS |<; +-------------------------------------------------------+(; | # OF VAX/VMS -> RSX/KXJ RINGS |<; +-------------------------------------------------------+<; | SIZE IN 32 WORD BLOCKS OF RSX CONTROLLED BUFFER SPACE |<; +-------------------------------------------------------+;J; USING THESE VALUES, THIS ROUTINE SETS UP CPRBUF IN THE FOLLOWING MANNER:;I;IH;TOP OF MEMORY +-------------------------------------------------------+ ; | | ; | |#; | VMS CONTROLLED BUFFER AREA |+<; +-------------------------------------------------------+ ; | | ; | | ; | |#; | RSX CONTROLLED BUFFER AREA |-<; +-------------------------------------------------------+!; | VMS -> RSX COMMAND RINGS |-<; +-------------------------------------------------------+!; | RSX -> VMS COMMAND RINGS |UI;BASE OF CPRBUF +-------------------------------------------------------+-;-F; IN ADDITION, T00uUoLomkTADATADATADATADATADATAHIS ROUTINE SEND AN INTERRUPT TO VMS NOTIFYING IT THATC; THE ABOVE INFORMATION IS IN PLACE AT THE TOP OF MEMORY. WHEN VMS-H; RECEIVES THIS NOTIFICATION, IT SETS UP ITS OWN REFERENCES TO CPRBUF IN; EXACTLY THE SAME MANNER.;-H; THE FIFTH WORD FROM THE TOP OF SHARED MEMORY IS SET UP AS THE APR BIASH; OF THE BASE OF CURRENTLY SHARED MEMORY, WHICH VMS USES TO CHECK ACCESS; J; THIS ROUTINE ALSO SHRINKS THE SIZE OF SHARED MEMORY DOWN TO INCLUDE ONLY; CPRBUF;-; INPUTS;-; R4 = DCB ADDRESS; R3 = CTB ADDRESS; R2 = KRB ADDRESS1; 0(SP) = RETURN ADDRESS FOR IMMEDIATE COMPLETION 3; 2(SP) = RETURN ADDRESS FOR CALLER OF EXEC ROUTINEI(; C = 1 TRANSITION TO OFF-LINE REQUESTED'; C = 0 TRANSITION TO ON-LINE REQUESTEDE=; SUCCESS ASSUMED, $SCERR FILLED IN WITH ERROR CODE IF NEEDEDPKXKRB:: @; FIRST TELL VMS THAT THE TOP FOUR WORD HAVE BEEN SET UP, AND IT; CAN INITIALIZE ITS POINTERSA9 BIS #10010,@#KXCSRD ; ENABLE INTERRUPTS TO AND FROM VMS = MOV @#KISAR5,$KXBAS ; SAVE DRIVER BASE ADDRESS FOR THE EXECS$ MOV K.CSR(R2),R4 ; NOW GET THE CSR3 MOV R4,CSR ; SAVE THE CSR-WE DON'T HAVE IT LATERA< MOV #RI$RIN,TPR2(R4) ; INDICATE THAT THIS IS A SYNC REQUEST MOV $KXVC1,R0 ; GET THE VECTOR+ ADD #4,R0 ; WE WANT THE ALTERNATE VECTORC9 MOV R0,@#KXJQIR ; INTERRUPT VMS AT THE ALTERNATE VECTORI010$: TST TPR2(R4) ; HAS VMS RECEIVED INTERRUPT? BNE 10$ ; IF NE NOA;E; NOW SET UP THE BUFFER AREAS#;S- MOV $SYSIZ,@#KISAR6 ; GET THE END OF MEMORY@" DEC @#KISAR6 ; BACK UP ONE BLOCK, MOV $SYSIZ,RNGBAS ; GET THE SIZE OF MEMORY MOV #140100,R4 ; TOP OF MEMORY9 SUB -(R4),RNGBAS ; SUBTRACT THE # OF BLOCKS TO GET BASEN. MOV -(R4),R2 ; # OF RSX -> VMS COMMAND RINGS. MOV -(R4),R1 ; # OF VMS -> RSX COMMAND RINGS4 MOV -(R4),R0 ; SIZE OF RSX CONTROLLED BUFFER SPACE3 MOV R0,MAXBUF ; SAVE SIZE OF RSX CONTROLLED SPACES& CLR -(R4) ; ALL OF MEMORY IS SHARED/ MOV RNGBAS,@#KISAR6 ; NOW MAP CPRBUF IN APR 6V6 MOV #140000,R4 ; VIRTUAL ADDRESS TO ACCESS THE RINGS;;; INITIALIZE THE RING POINTERS;B220$: CLR (R4) ; MAKE SURE THE SYNCH BIT IS CLEAR4 MOV R4,PRVSND ; WILL BE THE LAST RING AT LOOP EXIT$ ADD #R$SIZE,R4 ; MOVE TO NEXT RING& SOB R2,20$ ; LOOP FOR ALL THE RINGS7 MOV R4,WRAPSN ; THIS IS THE WRAP VALUE FOR THE RINGS, 5 MOV R4,FRSTRC ; THE BEGINNING OF THE RECEIVE RINGS,S. MOV R4,RCVRNG ; AND THE CURRENT RECEIVE RING330$: CLR (R4) ; MAKE SURE THAT SYNCH BIT IS CLEAR 0 MOV R4,PRVRCV ; WILL BE LAST RING AT LOOP EXIT$ ADD #R$SIZE,R4 ; MOVE TO NEXT RING* SOB R1,30$ ; LOOP FOR ALL RECEIVE RINGS. MOV R4,WRAPRC ; WRAP VALUE FOR RECEIVE RINGS) BIC #160000,R4 ; CLEAR OUT THE APR BIASD+ ADD #77,R4 ; ROUND TO NEXT 32-WORD BLOCK ( ASH #-6,R4 ; MAKE INTO A BLOCK NUMBER ADD R4,@#KISAR6 ; MAP IT. MOV RNGBAS,TOPRSX ; COPY RING BASE TO TOPRSX# ADD R4,TOPRSX ; ADD THE RING AREAG6 ADD R0,TOPRSX ; AND THE SIZE OF RSX CONTROLLED SPACE1 DEC TOPRSX ; BACK OFF ONE SO SUBTRACTION WORKSI. MOV @#KISAR6,$CPRBF ; SET UP BUFFER LISTHEAD# CLR 140000 ; CLEAR THE LINK WORDO2 MOV R0,140002 ; PUT # OF BLOCKS INTO SECOND WORD RETURN ; CONTROLLER IS READY .PAGE' .SBTTL KXUCB - UNIT ONLINE ENTRY POINTN;O&; ** - KXUCB - UNIT ONLINE ENTRY POINT;IE; THE ONLY THING THAT THIS ROUTINE DOES IS TO SET UP K.OWN IN THE KRBO;R ; INPUTS: ;R$; R3=CONTROLLER INDEX (S.KRB .NE. 0); R4=ADDRESS OF SCB ; R5=ADDRESS OF UCBO;O ; OUTPUTS:;C; K.OWN SET UP IN KRBE; +KXUCB:: MOV S.KRB(R4),R2 ;RETRIEVE KRB ADDRE: MOV R5,K.OWN(R2) ;MARK THIS UNIT AS OWNING THE CONTROLLER RETURN4 .PAGE* .SBTTL $KXINT - INTERRUPT SERVICE ROUTINE;N); ** - $KXINT - INTERRUPT SERVICE ROUTINE ;T7; WE CAN GET INTERRUPTED BY VMS FOR ONE OF TWO REASONS:Y;I;; 1) OUR SEND RING HAS TRANSITIONED FROM NOT EMPTY TO EMPTYK;N>; 2) OUR RECEIVE RING HAS TRANSITIONED FROM EMPTY TO NOT EMPTY; ); WE CHECK BOTH CASES FOR EVERY INTERRUPTC;; .ENABLE LSB2CPRRCV: ;ENTRY POINT IF POOL BECOMES AVAILABLE" SAVNR ;SAVE VOLATILE REGISTERS BR 5$ ;CONTINUE IN COMMON$KXI00u]on4nblNT::) INTSV$ KX,PR5,1 ;;;INTERRUPT SAVE MACRO- ;;;R5 = UCB ADDRESS6 MOV U.SCB(R5),R4 ;;;POINT TO CONTROLLER STATUS BLOCK' TST S.FRK+2(R4) ;;;FORK BLOCK IN USE?T& BEQ 2$ ;;;IF EQ, NO, FORK THIS TIME RETURN ;;;RETURN)2$: CALL $FORK ;;;CREATE SYSTEM PROCESSA9 CLR S.FRK+2(R4) ;FREE FORK BLOCK FOR FURTHER INTERRUPTS '5$: MOV #140000,R3 ;GET A BASE ADDRESSB$ MOV RNGBAS,@#KISAR6 ;MAP THE RINGS2 MOV RCVRNG,R2 ;GET THE CURRENT RECEIVE RING BASE2 TST (R2) ;DO WE HAVE A RECEIVE RING TO PROCESS?1 BPL 60$ ;NO, ALL DONE. SEE IF ANY PACKETS AREU ;WAITING TO BE SENT.R;;"; WE HAVE AN INPUT RING TO PROCESS;T0 MOV R$ADDR(R2),@#KISAR6 ;MAP THE HEADER IN APR6, BIT #HF$RSP,H$FLAG(R3) ;IS THIS A RESPONSE? BNE 10$ ;YES, PROCESS ITA1 CALL VMSINI ;COMMANDS HAVE SEPARATE PROCESSINGO BR 20$ ;CONTINUE IN COMMON *10$: MOV @#KISAR6,R0 ;GET THE PACKET BIAS$ MOV #$CPOUT,R1 ;GET QUEUE LISTHEAD& CALL SENRSP ;SEND BACK THE RESPONSE$20$: BCC 40$ ;IF SUCCESS, CONTINUE/30$: RETURN ;WE'LL BE CALLED LATER AT CPRRCVE*40$: MOV RNGBAS,@#KISAR6 ;REMAP THE RINGS- CLR @RCVRNG ;WE'RE DONE WITH THIS RING NOW;V;INTERRUPT IF NECESSARY ; $ TST @PRVRCV ;SHOULD WE INTERRUPT? BPL 50$ ;NO, JUST CONTINUE$( MOV $KXVC1,@#KXJQIR ;INTERRUPT THE VAX;S;NOW MOVE TO THE NEXT RING; >50$: MOV RCVRNG,PRVRCV ;CURRENT RING IS NOW THE PREVIOUS RING/ ADD #R$SIZE,RCVRNG ;MOVE POINTER TO NEXT RINGL( CMP RCVRNG,WRAPRC ;DO WE NEED TO WRAP?" BNE CPRRCV ;NOPE, GET NEXT RING+ MOV FRSTRC,RCVRNG ;START AT THE BEGINNING BR CPRRCV;AO; WE'RE DONE WITH THE RECEIVE RINGS. SEE IF THERE ARE ANY SEND RINGS AVAILABLE6; AND IF SO IF THERE ARE ANY PACKETS QUEUED TO BE SENT;E-60$: CLR $CPPOL ;NO LONGER WAITING FOR POOLX0 TST @SNDRNG ;IS THERE ANOTHER RING AVAILABLE? BMI 80$ ;NOPE, EXIT NOW1 MOV $CPWAT,R1 ;GET FIRST WAITING PACKET ADDRESSI BEQ 80$ ;NONE, JUST CONTINUEI! MOV R1,@#KISAR6 ;MAP THE PACKETP* MOV H$LINK(R3),$CPWAT ;MOVE THE LINK DOWN! BNE 70$ ;IF NO OTHER PACKET...G) CLR $CPWAT+2 ;CLEAR BOTH WORDS OF QUEUE70$: MOVB (R3),R4 ;GET LENGTHG$ ASH #6,R4 ; MAKE INTO BYTE LENGTH CLR R0 ;NO FLAGS  CALL SENPKT ;SEND THE PACKETO BR 60$ ;GO TRY FOR ANOTHER 80$: RETURNI .DSABL LSBX .PAGE' .SBTTL SENRSP - RETURN RESPONSE PACKET?;B:; THIS ROUTINE RETURNS THE RESPONSE PACKET TO IT'S ORIGIN.;C ; INPUTS:I;B; R0 PACKET BIAS>; R1 LISTHEAD OF QUEUE CONTAINING PACKET (USUALLY $CPOUT) OR 0; IF PACKET NOT QUEUEDO; R3 140000 (APR6 BASE)E;A; PACKET MAPPED IN APR6;;A ; OUTPUTS:; C; CARRY CLEAR IF SUCCESSFUL, CARRY SET IF NO POOL AVAILABLE FOR ASTT; RESPONSE RETURNED TO SENDER;LSENRSP: ' MOV R1,-(SP) ;SAVE THE QUEUE LISTHEAD 9 BIT #HF$UNB,H$FLAG(R3) ;SHOULD WE JUST UNBLOCK THE TASK?P( BEQ 10$ ;YES, DON'T REMOVE FROM QUEUE CALL 160$ ;UNBLOCK THE TASK7 BIC #HF$UNB!HF$BLK,H$FLAG(R3) ;DON'T UNBLOCK NEXT TIME  TST (SP)+ ;CLEAN STACKN BR 150$ ;AND EXIT10$:5 BITB #HF$AST,H$FLAG(R3) ;DO WE NEED TO QUEUE AN AST?E BNE 50$ ;YES, GO DO ITR;H; WE AREN'T QUEUEING AN AST. THAT EITHER MEANS THAT WE ARE COMPLETING AM; DETACHED RETURN, OR WE ARE RETURNING TO AN EXEC ROUTINE. A DETACHED RETURNAP; WILL HAVE H$RET=0. IF IT IS A DETACHED RETURN, UNBLOCK THE TASK IF NECESSARY,N; STORE THE TASK INDEX IF IT WAS A TASK INITIATION, AND DEALLOCATE THE BUFFER.>; IF IT IS AN EXEC RETURN, RETURN TO THE CALLING ROUTINE WITH:;;; R0 BUFFER ADDRESS$= CMPB #HT$LST,H$TYPE(R3) ;IS THIS A LOST PACKET NOTIFICATION? , BEQ 20$ ;YES, DON'T UNBLOCK OR RESCHEDULE+ CALL 160$ ;UNBLOCK THE TASK IF NECESSARYH 20$: MOV (SP)+,R1 ;GET LISTHEAD CALL 90$ ;REMOVE FROM QUEUE2 MOV H$BIAS(R3),-(SP) ;SAVE THE APR5 BIAS FOR CALL" MOV H$RET(R3),-(SP) ;AND ADDRESS. BEQ 30$ ;IF NONE, THIS IS A DETACHED RETURN5 CALL $MPPRO ;CALL THE OTHER ROUTINE AS A COROUTINEB BR 150$ ;COMMON EXIT POINTR;R; DETACHED RETURN PROCESSING;:&30$: CMP (SP)+,(SP)+ ;CLEAN THE STACK4 CMP #HT$RUN,H$TYPE(R3) ;WAS THIS A TASK INITIATIO00ueoLomkTADATADATADATADATADATAN? BNE 40$ ;NO, JUST CONTINUEO MOV H$TCB(R3),R5 ;GET THE TCBC0 MOVB P$TKI(R3),T.LBN(R5) ;SET UP THE TASK INDEX440$: MOV @#KISAR6,R0 ;GET THE ADDRESS OF THE PACKET% CALL CPRDEA ;DEALLOCATE THE HEADER BR 150$;)L;AST PROCESSING- ALLOCATE AN AST BLOCK, FILL IT IN, AND QUEUE IT TO THE TASKP;IF ALLOCATION FAILURE, RETURN WITH CARRY SET, WE WILL BE CALLED LATER AT CPRRCV; 050$: MOV #12,R1 ;GET THE SIZE OF OUR AST BLOCK CALL $ALOCB ;GET IT BCC 60$ ;WE GOT ITW! INC $CPPOL ;WE NEED POOL LATER$' TST (SP)+ ;GET RID OF SAVED LISTHEAD  SEC ;COULDN'T COMPLETE RETURN(160$: MOV R0,R2 ;GET A COPY OF THE BLOCK ADDRESST TST (R2)+ ;SKIP THE LINK WORD< MOV #AK.GBI!100,(R2)+ ;GENERAL BUFFERED I/O AST ENTRY POINT MOV $KXBAS,(R2)+ ;OUR MAPPING 4 MOV #CPRAST,(R2)+ ;THE AST SERVICE ROUTINE ADDRESS2 MOV @#KISAR6,(R2) ;GET THE ADDRESS OF THE BUFFER;VM; QUEUE THE AST. CALL THE ROUTINE TO UNBLOCK THE TASK AND REQUEST SCHEDULING;C# MOV H$TCB(R3),R2 ;GET TCB ADDRESS ' ADD #T.ASTL,R2 ;POINT TO AST LISTHEADF- MOV (R2),(R0) ;LINK PACKET TO FRONT OF LISTR BNE 70$ ; MOV R0,2(R2) ;70$: MOV R0,(R2) ; CALL 160$ ;UNBLOCK THE TASK; ;; IF THIS TASK STARTED A P0 IMAGE, CLEAR THE BIT IN THE TCBP;T4 CMPB #HT$VMS,H$TYPE(R3) ;DID THIS START A P0 IMAGE? BNE 80$ ;NO, CONTINUE MOV H$TCB(R3),R5 ;GET THE TCBT- BIC #T4.P0,T.ST4(R5) ;CLEAR THE P0 IMAGE BIT.;A$; SET UP TO REMOVE PACKET FROM QUEUE;Q$80$: MOV (SP)+,R1 ;GET THE LISTHEAD1 MOV @#KISAR6,R0 ;GET THE CURRENT PACKET ADDRESST;SJ; REMOVE THE PACKET FROM THE QUEUE. THIS IS CALLED AS A SUBROUTINE IN THEK; CASE OF DETACHED RETURNS AND EXEC RETURNS, BUT MUST BE CALLED LAST IN THEIL; CASE WHERE AN AST MUST BE QUEUED IN CASE WE HAVE TO EXIT BECAUSE OF A POOL; ALLOCATION FAILURE; (90$: TST R1 ;IS THERE A QUEUE ADDRESS? BEQ 150$ ;NOPE, JUST EXIT) CMP R0,(R1) ;FIRST OUTSTANDING PACKET?- BNE 100$ ;NOPE, WE'LL HAVE TO KEEP LOOKING0# MOV H$LINK(R3),(R1) ;FIX THE LINKM BNE 150$ ;EXITT+ CLR 2(R1) ;CLEAR THE LAST PACKET POINTERE/ BR 150$ ;CONTINUE, PACKET REMOVED FROM QUEUEO.100$: MOV (R1),R2 ;GET FIRST PACKET IN QUEUE;E; SEARCH FOR THE PACKET ;T110$:I! MOV R2,@#KISAR6 ;MAP THE PACKETD BNE 120$ ;E CRASH ;RESPONSE NOT IN QUEUE120$:F( MOV H$LINK(R3),R2 ;GET THE NEXT PACKET CMP R0,R2 ;NEXT PACKET OURS?S BNE 110$ ;NOPE, GET NEXT ONES;D; FOUND THE PACKET; /130$: MOV @#KISAR6,R2 ;GET LAST PACKET ADDRESS(( MOV H$LINK(R3),@#KISAR6 ;MAP OUR PACKET$ MOV H$LINK(R3),-(SP) ;GET NEXT LINK$ MOV R2,@#KISAR6 ;REMAP LAST PACKET$ MOV (SP)+,H$LINK(R3) ;FIX THE LINKS2 BNE 140$ ;IF LINK WAS NON-ZERO, NOT LAST PACKET2 MOV R2,2(R1) ;LISTHEAD POINTS TO NEW LAST PACKET2140$: MOV R0,@#KISAR6 ;REMAP THIS RESPONSE PACKET150$: CLC ;OK EXITN RETURN ;TM; UNBLOCK THE TASK IF HF$BLK SET. THIS NEEDS TO BE A SUBROUTINE FOR THE SAME O; REASON THAT REMOVING IT FROM THE QUEUE DOES - IT SHOULDN'T BE DONE IF THERE'S(J; A RESOURCE FAILURE ON THE AST BLOCK ALLOCATION. IT IS SEPARATE FROM THEJ; ROUTINE TO REMOVE AN ELEMENT FROM THE QUEUE BECAUSE IT IS ALSO CALLED IFE; HF$UNB IS SET AND ALL THAT NEEDS DOING IS UNBLOCKING OF THE TASK. ;I160$:P3 CMPB #HT$TKN,H$TYPE(R3) ;IS THIS TASK TERMINATION?A- BEQ 180$ ;IF EQ YES, DON'T RESCHEDULE TASK. CMPB #HT$REM,H$TYPE(R3) ;IS THIS TASK REMOVE?- BEQ 180$ ;IF EQ YES, DON'T RESCHEDULE TASK  MOV H$TCB(R3),R0 ;GET THE TCBQ. BIT #HF$BLK,H$FLAG(R3) ;WAS THE TASK BLOCKED? BEQ 170$ ;NO, JUST RETURN BIC #TS.RSW,T.STAT(R0) ;UNBLOCK,170$: BIC #TS.RDN,T.STAT(R0) ;TEMPORARY HACK CALL $SETCR ;SCHEDULE ITC/180$: MOV @#KISAR6,R0 ;GET PACKET MAPPING BACKG RETURNC .PAGE/ .SBTTL VMSINI - PROCESS VMS INITIATED COMMANDS;;T"; WE HAVE A VMS INITIATED COMMAND.; ; INPUTS:';E; R2 BASE OF CURRENT INPUT RINGY; R3 140000 (APR6 BASE)V;; PACKET MAPPED IN APR6O; ; OUTPUTS:; ; PACKET DISPATCHED;#; RESPONSE RING SENT IF APPROPRIATE G; CARRY SET INDICATES FAILURE TO COMPLETE REQUEST - EITHER N00umon4nblO SEND RING(.; OR POOL ALLOCATION FAILURE ON ABORT REQUEST.;RVMSINI:C; 5; DISPATCH ACCORDING TO TYPE OF VMS INITIATED COMMANDK;M/ CMPB H$TYPE(R3),#HT$UCA ;UNSOL. CHARACTER AST?- BNE 10$ ;IF NE, NOC JMP 130$ ;GO PROCESS AST &10$: CMPB H$TYPE(R3),#HT$P0R ;P0 READ? BNE 20$ ;IF NE NO JMP 210$ ;GO PROCESS P0 READE'20$: CMPB H$TYPE(R3),#HT$P0W ;P0 WRITE?U BNE 30$ ;IF NE NO JMP 210$ ;GO PROCESS P0 WRITE30$:+ MOV #IS.SUC,H$STAT(R3) ;ASSUME SUCCESS M5 BIS #HF$RSP,H$FLAG(R3) ;MARK THAT THIS IS A RESPONSEI;F%; NOW DISPATCH TO THE CORRECT ROUTINE;1 CMPB #HT$GRI,H$TYPE(R3) ;GET RSX INFORMATION? N BNE 40$ ;IF NE NO  JMP 240$ ; 740$: CMPB #HT$CTC,H$TYPE(R3) ;CONTROL C NOTIFICATION? S BEQ 50$ ;IF EQ YESE$ CMPB #HT$ABA,H$TYPE(R3) ;ABORT ALL? BEQ 80$ ;IF EQ YES & CMPB #HT$RSX,H$TYPE(R3) ;MCR COMMAND? BNE 70$ ;IF EQ NO, ERROR ;FL; COMMAND IS A QUEUE COMMAND LINE REQUEST. THE DDS STRING IS UPDATED IF IT (; IS AN IMMEDIATE MODE COMMAND FROM VMS.; 9 BIT #HF$DIR,H$FLAG(R3) ;DOES IT INCLUDE VMS DEFAULT DIR?  BEQ 44$ ;NO. CONTINUE, MOV H$TIUC(R3),R5 ;TI UCBO MOV #120000+P$BLEN+4,R2: ADD P$BLEN(R3),R2 ;DIRECTORY STRING DISPLACEMENT IN APR5 CLR R0 ;CLEAR TOP HALF OF R0$2 MOVB <20000-2>(R2),R0 ;LENGTH OF DIRECTORY STRING# MOV KISAR6,R1 ;MAP PACKET TO APR5S( CALL $CRCTX ;CREATE DDS CONTEXT BLOCK BCS 70$ ;FAILED TO CREATE DDS1 MOV U.CTX(R5),R1 ;OLD DDS CONTEXT BLOCK POINTERA$ BEQ 41$ ;DON'T DEALLOCATE IF NONE, CALL $DLCTX ;DEALLOCATE OLD CONTEXT BLOCK41$:. MOV R3,U.CTX(R5) ;PUT NEW CTX POINTER IN UCB MOV KISAR6,-(SP) ;SAVE MAPPING" MOV R3,KISAR6 ;MAP CONTEXT BLOCK2 MOV #C.DDS+140001,R0 ;POINT TO FIRST CHAR OF DDS MOV R5,-(SP) ;SAVE UCB ADDRESS0 CALL CNTB ;CONVERT DDS TO BINARY, IF POSSIBLE# MOV (SP)+,R5 ;RESTORE UCB ADDRESSR# MOV (SP)+,KISAR6 ;RESTORE MAPPINGT" BCC 42$ ;IF CC, CONVERSION DONE< MOV U.LUIC(R5),U.UIC(R5) ;SET DEFAULT UIC = PROTECTION UIC BR 43$O=42$: MOV R1,U.UIC(R5) ;SET DEFAULT UIC = BINARY EQUIV OF DDSB43$:# MOV #140000,R3 ;RESTORE APR6 BASE 44$: CLR R1 ;GET A CLEAN REGISTERE9 BISB P$BLEN(R3),R1 ;GET THE LENGTH OF THE STRING BUFFER4< ADD #C.CTXT+77,R1 ;ADD FIXED AREA AND ROUND TO 32 WD BLOCK0 ASH #-6,R1 ;MAKE INTO A 32 WORD BLOCK ADDRESS" CALL $ALSEC ;GET SECONDARY POOL% BCS 120$ ;NO POOL, SEND BACK ERROR ;P,; FILL IN FIELDS IN THE COMMAND BUFFER BLOCK;L4 MOV R0,R3 ;MOVE THE ADDRESS WHERE $BLXIO NEEDS IT MOV #140000,R4 ;APR 6 BIAS. MOV KISAR6,-(SP) ;SAVE THE CPR BLOCK MAPPING CLR R0 ;GET A CLEAN REGISTERB( BISB P$BLEN(R4),R0 ;LENGTH OF TRANSFER1 MOV H$STAT+2(R4),-(SP) ;BOGUS FORCE MCR FLAG BITI( MOV H$FLAG(R4),-(SP) ;PACKET FLAGS WORD MOV H$TIUC(R4),-(SP) ;TI UCB6 MOVB 140000+P$BLEN+1(R0),R2 ;GET TERMINATOR CHARACTER MOV R3,KISAR6 ;MAP THE BLOCK+ TST (R4)+ ;MOVE THE POINTER UP TO C.CTCBI. MOV $MCRPT,(R4)+ ;QUEUE PACKET TO DISPATCHER MOV (SP)+,(R4)+ ;TI UCBS MOV R0,(R4) ;CHARACTER COUNT04 DEC (R4)+ ;THAT INCLUDED THE TERMINATOR CHARACTER# CLR (R4)+ ;ASSUME NORMAL COMMANDR$ BIT #HF$EXP,(SP)+ ;IS IT EXPLICIT? BEQ 45$ ;NOT IF ZERO+7 MOV #CC.TTD,-2(R4) ;MAKE MCR THINK THIS IS FROM TTDRV(*45$: BIT #1,(SP)+ ;IS THIS FORCED TO MCR? BEQ 46$ ;NOPE, LEAVE IT ALONE$ BIS #CC.MCR,-2(R4) ;SEND IT TO MCR!46$: CLR (R4)+ ;STARTING OFFSET4% MOVB R2,(R4)+ ;TERMINATOR CHARACTERM MOVB R1,(R4)+ ;SIZE OF PACKET ;P1; NOW MOVE THE STRING TO THE SECONDARY POOL BLOCK;;R$ MOV #120000+P$BLEN+2,R2 ;APR 5 BIAS% MOV (SP),R1 ;BIAS OF HEADER PACKET+# CALL $BLXIO ;AND MOVE THE STRINGE0 MOV R3,R1 ;GET THE BIAS WHERE $QCPKT NEEDS IT$ MOV (SP)+,KISAR6 ;REMAP THE HEADER+ CALL $QCPKT ;QUEUE THE PACKET TO THE CLIS+ BR 60$ ;COMMON CODE WITH ^C NOTIFICATION ;A; HT$CTC;C,; SEND THE ^C NOTIFICATION PACKET TO THE CLI;T+50$: MOV #CC.CTC!CC.CLI,R1 ;^C NOTIFICATIONH MOV H$TIUC(R3),R2 ;TI UCBZ+ CALL $QCNTP ;QUEUE CONTROL PACKET TO CLIE%60$: BCC 120$ ;IF SUCCESS, CONTINUE0+ BEQ 120$ ;IF EQ, CLI 00uuoLomkTADATADATADATADATADATAWAS ACTIVE, SUCCESSS. MOV #140000,R3 ;RESTORE THE OFFSET TO PACKET570$: MOV #IE.UPN,H$STAT(R3) ;NOTIFY VMS OF BAD STATUS  BR 120$ ;AND EXIT;E; HT$ABA;RL; ABORT ALL TASKS FOR THIS TI, COMPLETING WITH ERROR ANY OUTSTANDING PACKETSE; AND DISABLING THEIR T.LBN SO THEY CAN'T SEND ANY MORE CPR REQUESTS.T;C80$: MOV H$TIUC(R3),R5 ;TI UCB1. MOV $ACTHD,R1 ;GET FIRST TASK IN ACTIVE LIST BEQ 120$ ;IF NONE, EXIT!90$: CMP T.UCB(R1),R5 ;THIS UCB?  BNE 110$ ;NO, TRY NEXT ONE0 MOV #S.CTKN,R0 ;QUIET ABORTC MOV R1,-(SP) ;SAVE TCB ADDRESS CALL $ABTSK ;ABORT THE TASK# MOV (SP)+,R1 ;RESTORE TCB ADDRESSA0100$: MOV @#KISAR6,-(SP) ;SAVE THE ABORT PACKET4 CALL CPRABO ;WRECK TASK INDEX AND CLEAN UP QUEUES+ MOV (SP)+,@#KISAR6 ;RESTORE ABORT MAPPINGB'110$: MOV T.ACTL(R1),R1 ;GET NEXT TASKS BNE 90$ ;IF THERE, CHECK IT; ; SEND THE RESPONSE PACKET;T.120$: MOV @#KISAR6,R1 ;GET THE PACKET ADDRESS) MOV RCVRNG,R2 ;GET RECEIVE RING ADDRESS1. MOV #140000,R3 ;RESTORE THE OFFSET TO PACKET$ MOV RNGBAS,@#KISAR6 ;MAP THE RINGS% MOV 2(R2),R4 ;GET THE PACKET LENGTHM# MOV R1,@#KISAR6 ;REMAP THE PACKET0 CALL SENPKT ;SEND IT OFF " CLC ;MAKE SURE WE SHOW SUCCESS RETURNI;X"; UNSOLICITED CHARACTER AST PACKET;R130$:T* MOV H$TCB(R3),R0 ;GET USER'S TCB ADDRESS;E; GET THE CORRECT UCB ADDRESSE; . BIT #PF$NET,P$ASF(R3) ;IS THIS A NETWORK AST? BEQ 140$ ;IF EQ NOE' MOV XXNET,R5 ;GET NETWORK UCB ADDRESSR BNE 160$ ;IF NE GOT IT# MOV #"NS,R4 ;LOOK FOR ITT CALL GETUCB ;" MOV R5,XXNET ;STORE IT FOR LATER BR 160$140$:H, BIT #PF$TI,P$ASF(R3) ;IS AST FOR USER'S TI? BNE 150$ ;IF NE YES* MOV XXUCB,R5 ;GET GENERIC HT UCB ADDRESS BNE 160$ ;IF NE GOT ITO MOV #"HT,R4 ;LOOK FOR IT CALL GETUCB ;" MOV R5,XXUCB ;STORE IT FOR LATER BR 160$150$:O% MOV T.UCB(R0),R5 ;UCB IS USER'S TI:A160$:;;T; FIND AST CONTROL BLOCK; $ ADD #U.RAST,R5 ;POINT TO LIST HEAD& MOV R5,R1 ;GET ADDRESS OF LIST HEAD+170$: MOV R1,R4 ;SAVE ADDRESS OF PREVIOUSE MOV (R4),R1 ;GET NEXT ACB- BEQ 200$ ; IF ACB NOT FOUND, RETURN ERROR.$& CMP A.PRM+14(R1),R0 ;DOES TCB MATCH? BNE 170$ ;IF NE NOU3 CMPB A.PRM+16(R1),P$LUN(R3) ;DO LUN NUMBERS MATCH?E BNE 170$ ;IF NE NO ;O; DEQUEUE AST CONTROL BLOCK;V$ MOV (R1),(R4) ;TAKE IT OUT OF LIST BNE 180$ ;IF NE NO NEW LAST! MOV R4,2(R5) ;POINT TO NEW LASTI180$:C;R; FILL IN AST CONTROL BLOCK ;O: MOV KISAR6,A.PRM+12(R1) ;FILL IN HEADER BIAS FOR RESPONSE= MOVB P$APM(R3),A.PRM(R1) ;GET CHARACTER - NOTHING IF NETWORK ? MOV A.PRM+10(R1),A.AST(R1) ;ASSUME NO CONTROL C AST SPECIFIEDP8 TST A.PRM+6(R1) ;WAS IT SPECIFIED? - NEVER FOR NETWORK BEQ 190$ ;IF EQ NOR2 CMPB A.PRM(R1),#3 ;IS THE CHARACTER A CONTROL C? BNE 190$ ;IF NE NOO8 MOV A.PRM+6(R1),A.AST(R1) ;USE THIS AST ADDRESS INSTEAD190$:I;E ; QUEUE AST CONTROL BLOCK TO TCB;O1 CALL $QASTT ;INSERT IT IN QUEUE AND RESCHEDULE  CLC RETURNR200$:+6 MOV #IE.ABO,H$STAT(R3) ; THE TASK MUST BE GOING AWAY.0 MOV @#KISAR6,R1 ; TELL SENPKT WHERE PACKET IS.* MOV #H$SIZE+6,R4 ; PASS LENGTH IN BYTES.# CALL SENPKT ; SEND THE RESPONSE.) CLC RETURNF;?; P0 READ OR P0 WRITE REQUESTS;I210$:R;C; ALLOCATE AN I/O PACKET;R* MOV #I.LGTH,R1 ;GET LENGTH OF I/O PACKET CALL $ALOCB ;ALLOCATE ITS BCC 220$ ;IF CC, OKAY RETURN ;RETURN WITH FAILURE 220$:O;B; FILL IN I/O PACKET FIELDSI;N& MOV R0,R1 ;GET PACKET ADDRESS IN R13 CLR I.PRI(R1) ;CLEAR PRIORITY FIELD AND EFN FIELDI7 MOV H$TCB(R3),I.TCB(R1) ;FILL IN TCB OF OFFSPRING TASK.6 CLR I.LN2(R1) ;NO LUN NUMBER, NEVER CHECKED IN VTDRV* MOV H$TIUC(R3),R5 ;GET ADDRESS OF VT UCB MOV R5,I.UCB(R1) ;FILL IN UCBS$ MOV #IO.WLB,I.FCN(R1) ;ASSUME WRITE( CMPB H$TYPE(R3),#HT$P0W ;IS IT A WRITE? BEQ 230$ ;IF EQ YES2 MOV #IO.RLB,I.FCN(R1) ;FILL IN READ FUNCTION CODE' CMPB H$TYPE(R3),#HT$P0R ;IF IT A READ?I BEQ 230$ ;IF EQ YES3 MOV #IO.WLB,I.FCN(R1) ;FILL IN WRITE FUNCTION CODEP=230$: MOV KINAR5,I.IOSB+2(R1) ;FILL IN BIAS OF RETURN ROUTINET> MOV00u}on4nbl #P0CMPL!1,I.IOSB+4(R1) ;FILL IN OFFSET OF RETURN ROUTINE CLR I.AST(R1) ;NO AST ADDRESSM- MOV KISAR6,I.PRM(R1) ;FILL IN BIAS OF BUFFERR; MOV #H$SIZE+2+140000,I.PRM+2(R1) ;FILL IN OFFSET OF BUFFERI6 MOV H$SIZE(R3),I.PRM+4(R1) ;FILL IN LENGTH OF REQUEST5 MOV H$STAT(R3),I.PRM+6(R1) ;FILL IN 1ST WORD OF VFCT0 MOV H$STAT+2(R3),I.PRM+10(R1) ;FILL IN 2ND WORD;B; CALL THE VT DRIVER;V# MOV U.SCB(R5),R4 ;GET SCB ADDRESSC. CALL $DRQRQ ;QUEUE THE PACKET TO THE DRVIER CLC RETURN ; V*; PROCESS GET RSX INFORMATION PACKET ; E240$: + MOV #IS.SUC,H$STAT(R3) ;ASSUME SUCCESS ' ADD #H$SIZE,R3 ;POINT TO ITEM LIST ,9 CMPB #II$LOF,I$ID(R3) ;IS THIS GET LOGGED OFF BIT ITEM? R BEQ 260$ ;IF EQ OKAY Q250$: (0 SUB #H$SIZE,R3 ;POINT TO BEGINNING OF PACKET ' MOV #0,H$STAT(R3) ;INDICATE ERROR D% BR 280$ ;GO TO SEND PACKET BACK S260$: C& MOV I$BUF(R3),R1 ;GET UNIT NUMBER , MOV #$DEVHD,R0 ;GET ADDRESS OF FIRST DCB %270$: MOV (R0),R0 ;GET NEXT DCB K& BEQ 250$ ;IF EQ NOT FOUND, ERROR * CMP #"HT,D.NAM(R0) ;IS THIS AN HT DCB " BNE 270$ ;IF NE GET NEXT ONE 5 CMPB #377,D.UNIT(R0) ;IS THIS THE GENERIC HT UCB? F BEQ 270$ ;IF EQ, NOT IT 9 MUL D.UCBL(R0),R1 ;GET OFFSET OF UCB WE'RE LOOKING FOR G) ADD D.UCB(R0),R1 ;GET ADDRESS OF UCB DD MOVB U.CW2+1(R1),I$BUF(R3) ;GET LOGGED OFF BIT IN LOW BIT OF WORD 280$: R( MOV @#KISAR6,R1 ;GET PACKET ADDRESS  SUB #H$SIZE,R3 ;RESTORE R3) MOV #H$SIZE+4,R4 ;GET SIZE OF PACKET B! CALL SENPKT ;SEND RESPONSE CLC A RETURN ; 6; CNTB - CONVERT A NAMED DIRECTORY TO A BINARY WORD IF#; IN THE FORM OF [G,M] OR [GGGMMM]F;B; INPUTS: R0 = BUFFER POINTER;D#; OUTPUTS: IF CC, R1 = BINARY WORDE3; IF CS, INDICATES NAMED DIRECTORY NOT CONVERTEDB;DCNTB:.% CLR -(SP) ; USE STACK FOR FLAG WORDT( MOV #3,R4 ; NUMBER OF CHARS TO CONVERT" CLR R1 ; CLEAR ACCUMULATED VALUE MOVB #',,R2 ; STOP ON A COMMA CALL 100$ ; CONVERT  BCS 20$ ; BR IF INVALIDE MOV R1,R3 ; STORE RESULT BEQ 20$ ; IF EQ, INVALID( MOV #3,R4 ; NUMBER OF CHARS TO CONVERT" CLR R1 ; CLEAR ACCUMULATED VALUE% CMPB #',,(R0) ; POINTING TO A COMMA?U BNE 10$ ; IF NE, NOR TSTB (R0)+ ; SKIP THE COMMAI INC (SP) ; INDICATE COMMA SEEN%10$: MOVB #'],R2 ; STOP ON A BRACKETN CALL 100$ ; CONVERT  BCS 20$ ; BR IF INVALID#' SWAB R3 ; PUT GROUP CODE IN HIGH BYTER BIS R3,R1 ; PUT INTO RESULTM BEQ 20$ ; IF EQ, INVALID! CMPB #'],(R0)+ ; ENDING BRACKET?$ BNE 20$ ; IF NE, ERROR TST (SP) ; DID WE SEE A COMMA? BNE 15$ ; IF NE, YES# TST R4 ; VERIFY WE PARSED 3 CHARSR BNE 20$ ; IF NE, - ERROR/15$: TST (SP)+ ; CLEAN STACK, INDICATE SUCCESS1# BR 30$ ; RETURN TO CALLER WITH CC 20$: TST (SP)+ ; CLEAN STACKT) SEC ; INDICATE DIRECTORY NOT CONVERTED $30$: RETURN ; AND RETURN TO CALLER#100$: MOVB (R0)+,R5 ; GET NEXT CHARR( CMPB R2,R5 ; IS THIS ENDING CHARACTER? BEQ 115$ ; BR IF YES& SUB #'0,R5 ; SUBTRACT CHARACTER BIAS BMI 120$ ; IF MI, ILLEGAL CHAR" CMPB R5,#8. ; CHECK AGAINST BASE" BHIS 120$ ; IF HIS, ILLEGAL CHAR" MUL #8.,R1 ; MULT RESULT BY BASE ADD R5,R1 ; ACCUMULATE RESULTP SOB R4,100$ ; GO AGAIN-110$: CMP #377,R1 ; NUMBER GREATER THAN 377?  RETURN ; RETURN TO ABOVEC115$: TSTB -(R0) ; BACK UPR$ CMP #3,R4 ; DID WE PARSE ANYTHING? BNE 110$ ; IF NE, YES - OK*120$: SEC ; INVALID CHARACTER TO CONVERT RETURN ; RETURN TO ABOVEB .PAGE;F6; P0CMPL - COMPLETION ROUTINE FOR P0 READ AND P0 WRITE;I ; INPUT -A; R3 - ADDRESS OF I/O PACKETG;SP0CMPL:B MOV KISAR6,-(SP) ;SAVE MAPPING! MOV I.PRM(R3),KISAR6 ;MAP PACKET* MOV I.PRM+6(R3),140000+H$STAT ;SET STATUS# MOV I.PRM+10(R3),140000+H$STAT+2 ;N CLR R0 ;GET LENGTH  MOVB 140000,R0 ; ASH #6,R0 ;( CPSEN$ #SN$RSP,KISAR6,R0 ;SEND RESPONSE# MOV (SP)+,KISAR6 ;RESTORE MAPPING  RETURNK;2#; GETUCB - FIND GENERIC UCB ADDRESSE;"; INPUT - R4 ASCII FOR DEVICE NAME;E; OUTPUT - R5 UCB ADDRESS 00uoLomkTADATADATADATADATADATA;TGETUCB:0 MOV #$DEVHD,R5 ;GET LIST HEADA 10$: MOV (R5),R5 ;GET NEXT DCB CMP R4,D.NAM(R5) ;IS THIS IT?; BNE 10$ ;IF NE NO. CMPB #377,D.UNIT(R5) ;IS IT THE GENERIC ONE? BNE 10$ ;IF NE NO MOV D.UCB(R5),R5 ;GET UCBS RETURN ;DONE .PAGE/ .SBTTL CPRABO - ABORT TASK AND CLEAN UP QUEUES ;$; CPRABO; K; WRECK TASK INDEX SO THIS TASK CANNOT ISSUE FURTHER REQUESTS, AND COMPLETEB5; ANY PACKETS LEFT IN THE OUTSTANDING OR WAIT QUEUES.R;V ; INPUTS:E; ; R1 TCB OF TASK BEING ABORTED;B ; OUTPUTS:;D$; ALL PACKETS IN QUEUES ARE RETURNED; TASK INDEX IS SET TO -1.; R1 AND R5 REGISTERS PRESERVED ;FCPRABO:C MOV R5,-(SP) ;SAVE R5I MOV R1,-(SP) ;SAVE TCB ADDRESS MOV #140000,R3 ;GET APR6 BASEC MOV R1,R2 ;MOVE THE TCB8 CMPB T.LBN(R2),$RMTSK ;IS THIS A REMOTE PERMANENT TASK?+ BLOS 10$ ;IF LOS, YES, DON'T TRASH INDEX ( MOVB #-1,T.LBN(R2) ;FIX THE TASK INDEX-10$: MOV #2,R4 ;WE NEED TO CHECK TWO QUEUESI$ MOV #$CPOUT,R1 ;GET QUEUE LISTHEAD/20$: MOV (R1),@#KISAR6 ;MAP OUTSTANDING PACKETL BEQ 50$ ;NONE,30$: CMP H$TCB(R3),R2 ;PACKET FOR THIS TCB? BNE 40$ ;NOPE, TRY NEXT ONE= CMP T.UCB(R2),H$TIUC(R3) ;CORRECT UCB? (MIGHT NOT BE IF MCR)B BNE 40$ ;NOPE, TRY NEXT ONE1 BITB #HT$SYS,H$TYPE(R3) ;IS THIS PKT FOR CPRSYS?(. BNE 40$ ;YES, DON'T COMPLETE THE PACKET NOW ;...CPRSYS IS STILL RUNNING;N'; COMPLETE THE PACKET WITH ERROR STATUSI;X% MOV @#KISAR6,R0 ;GET PACKET ADDRESSO) MOV #IE.PRI,H$STAT(R3) ;SET ABORT STATUSE MOV R1,-(SP) ;SAVE LISTHEAD, MOV R4,-(SP) ; COUNT,Q# MOV R0,-(SP) ; AND PACKET MAPPING;! CALL SENRSP ;SEND THE RESPONSEO- MOV (SP)+,@#KISAR6 ;RESTORE PACKET MAPPING,R MOV (SP)+,R4 ; COUNT,F MOV (SP)+,R1 ; AND LISTHEADE MOV (SP),R2 ;RESTORE TCBR# MOV #140000,R3 ;RESTORE APR6 BASE$ BCS 70$ ;IF FAILURE, RETURN-40$: MOV H$LINK(R3),@#KISAR6 ;GET NEXT PACKET ! BNE 30$ ;ANOTHER ONE, CHECK ITU.50$: MOV #$CPWAT,R1 ;MAP FIRST WAITING PACKET SOB R4,20$ ;DO BOTH QUEUESO60$: CLC70$: MOV (SP)+,R1 ;RESTORE TCB MOV (SP)+,R5 ;RESTORE R5 RETURNP .PAGE+ .SBTTL CPRAST - KERNAL AST SERVICE ROUTINEO;O+; ** - CPRAST - KERNAL AST SERVICE ROUTINEG;H; THIS ROUTINE RETURNS CONTROL TO THE TASK OR DIRECTIVE ROUTINE WITH THE; FOLLOWING REGISTER CONTENTS:;T-; R0 ADDRESS OF BUFFER - TO BE USED IN AN APR;: ; INPUTS:(;,; R3 ADDRESS OF AST BLOCK;EH; CONTROL IS TRANSFERED TO THE TASK COMPLETION ROUTINE USING THE ROUTINE+; $MPPRO. THIS ROUTINE EXPECTS THE INPUTS:C;0; (SP) RETURN ADDRESS; 2(SP) ROUTINE ADDRESS TO CALL5; 4(SP) APR5 BIAS OF ROUTINE;AD; BY PUTTING THE APR BIASES AND THE CALLING ADDRESS UNDER THE RETURNA; ADDRESS THAT IS CURRENTLY ON THE STACK, WE CAN JUMP TO THE TASKE); COMPLETION ROUTINE RATHER THAN CALL IT.RCPRAST::( MOV R3,R0 ;SAVE THE AST BLOCK ADDRESS+ MOV 10(R3),-(SP) ;SAVE THE BUFFER ADDRESSF MOV #12,R1 ;SIZE OF AST BLOCK CALL $DEACB ;DEALLOCATE ITU MOV (SP)+,R0 ;BUFFER ADDRESS, ! MOV R0,@#KISAR6 ;MAP THE BUFFER$ MOV #140000,R1 ;GET A BASE ADDRESS1 MOV H$RET(R1),-(SP) ;SET UP THE ROUTINE ADDRESSE* MOV 2(SP),-(SP) ;MOVE THE RETURN ADDRESS* MOV H$BIAS(R1),4(SP) ;PUT IN THE APR BIAS3 BEQ 20$ ;NO BIAS, GET THE MAPPING FROM USER APRSE/ BIT #HF$DSW,H$FLAG(R1) ;SHOULD WE SET THE DSW?P' BEQ 30$ ;NOPE, JUST CALL THE ROUTINEA2 MOV H$STAT(R1),-(SP) ;PUT THE STATUS ON THE STACK) BPL 10$ ;IF SUCCESS, LEAVE CARRY ALONED BIS #1,$UMPS ;SET USER'S CARRY10$:+ MTPD$ @#H.DSW ;SET DIRECTIVE STATUS WORDB BR 30$M420$: MOV @#UINAR5,4(SP) ;GET MAPPING FROM USER TASK$ MOV @#UISAR6,@#KISAR6 ;MAP APR6 TOO MOV @#UINAR6,@#KINAR6 ;I&DA*30$: JMP $MPPRO ;AND GO BACK TO THE TASK .PAGE/ .SBTTL CPRCON - CONNECT TI: UCB TO VMS CP: UCBE;B); CPRCON - CONNECT TI: UCB TO VMS CP: UCBW;J; THIS ROUTINE IS CALLED BY THE $$DRV UNIT ONLINE ENTRY POINT FOR EACH TI:H; UCB. THE UCB ADDRESS AND UNIT ARE PASSED TO VMS VIA THE TPRS. THE UCBJ; ADDRESS IS WRITTEN INTO TPR2, AND THE UNIT IS WRITTEN INTO TPR3. THE VMSI; CP: DRIVER PUT00uon4nblS THE UCB ADDRESS IN IT'S OWN UCB WITH THE SAME UNIT, ANDRF; THEN WRITES ITS UCB ADDRESS BACK INTO TPRS 2 AND 3. SINCE THIS IS AG; SYSTEM ADDRESS, THE HIGH BIT IN TPR3 WILL BE SET. THIS ROUTINE WAITS C; IN A HARD LOOP FOR THE RETURN UCB, THEN PUTS IT INTO THE TI: UCB.HJ; IF THE RETURN UCB IS 000000 IN TPR2 AND 100000 IN TPR3, AN ERROR OCCURED; AND U.VUCB IS NOT FILLED IN.;S ; INPUTS:V;T; R5 TI: UCB ADDRESS;S ; OUTPUTS:;T; ALL REGISTERS PRESERVED.$; VMS CP: UCB IS LOADED INTO TI: UCB0; IE.IDU IS RETURN IN $SCERR IF AN ERROR OCCURED;TCPRCON:H SAVNR ;SAVE R4 AND R5A< MOVB U.UNIT(R5),-(SP) ;TPR3 IS FUSSY ABOUT SETTING BYTES...2 CLRB 1(SP) ;..ONE AT A TIME, SO WE FIX IT ON .. ;..THE STACKR# MOV U.DCB(R5),R4 ;GET DCB ADDRESSE, CMP D.NAM(R4),#"VT ;IS THIS A VT TERMINAL? BNE 10$ ;IF NE NO* ADD $RMTTT,(SP) ;SKIP OVER HT TERMAINALS DEC (SP) ;VT1: IS FIRST10$:" MOV CSR,R4 ;GET THE CSR ADDRESS5 MOV #RI$CON,TPR2(R4) ;WE ARE DOING A CONNECT REQUESTO) MOV R5,TPR1(R4) ;PUT IN THE UCB ADDRESSN% MOV (SP)+,TPR3(R4) ;SET UNIT NUMBER " MOV $KXVC1,-(SP) ;GET THE VECTOR, ADD #4,(SP) ;WE WANT THE ALTERNATE VECTOR' MOV (SP)+,@#KXJQIR ;INTERRUPT THE VAX 20$: TST TPR3(R4) ;DONE YET?M BPL 20$ ;NOPE' TST TPR2(R4) ;MIGHT THIS BE AN ERROR?S BNE 30$ ;IF NE NO) CMP #100000,TPR3(R4) ;IS THERE AN ERROR?I BEQ 50$ ;IF EQ YESD-30$: MOV TPR2(R4),U.VUCB(R5) ;MOVE TO TI: UCBG& MOV TPR3(R4),U.VUCB+2(R5) ;BOTH WORDS: TSTB U.UNIT(R5) ;IS THIS UNIT 0? (NOTE: CAN'T BE FOR VT) BNE 40$ ;NOPE, JUST EXIT+- MOV TPR2(R4),SYSUCB ;THIS IS CPRSYS'S UCB - + MOV TPR3(R4),SYSUCB+2 ;WE'LL NEED IT LATER -40$: MOV TOPRSX,R4 ;GET THE TOP OF RSX SPACEP# SUB U.CPKT(R5),R4 ;GET THE PACKETY- CMP R4,MAXBUF ;IS IT LESS THAN CURRENT MAX?H BGE 45$ ;NOPE, EXIT! MOV R4,MAXBUF ;NEW MAXIMUM SIZE4 45$: RETURNN!50$: MOVB #IE.IDU,$SCERR ;ERROR0 RETURNR .PAGE* .SBTTL CPRALO - BUFFER ALLOCATION ROUTINE;2$; CPRALO - BUFFER ALLOCATION ROUTINE;HF; THIS ROUTINE IS USED TO ALLOCATE RESOURCES TO SEND DATA FROM THE RSXD; SYSTEM TO THE VMS SYSTEM. IF THE RESOURCES ARE NOT AVAILABLE, THEF; ROUTINE CHECKS THE FLAGS IN R0 TO DETERMINE WHAT ACTION TO TAKE. IFF; AL$XXD IS SET, THE REQUEST IS FROM THE XX DRIVER. IN THIS CASE, THEF; ROUTINE SAVES THE CONTEXT OF THE DRIVER TO RETURN WHEN RESOURCES AREH; AVAILABLE. IF AL$XXD IS NOT SET, THE TASK IS BLOCKED PENDING RESOURCEG; AVAILABILITY. IF AL$BCK IS SET, THEN THE TASK'S PC IS BACKED UP OVERID; THE EMT INSTRUCTION SO THAT WHEN IT IS RESCHEDULED IT WILL REENTERJ; SYSTEM STATE. IF AL$BCK IS NOT SET, THE ROUTINE RETURNS WITH CARRY SET.;I; IF RESOURCES ARE AVAILABLE, THE BUFFER SPACE IS ALLOCATED. IF THE FLAGLC; AL$IMP IS SET, AND THE TASK INDEX IN THE TCB IS NOT FILLED IN, AN D; IMPLICIT TASK START REQUEST IS ISSUED. CPRALO WILL RETURN AS IF AH; RESOURCE WAS UNAVAILABLE, CAUSING THE TASK TO RESCHEDULE AND CALL THISD; ROUTINE AGAIN. THIS ROUTINE IS CALLED FROM $CPALO IN THE EXEC. ; ; INPUTS:M;N; R0 OPERATION FLAGS:I,; AL$BCK - BACK UP PC IF ALLOCATION FAILURE3; AL$IMP - DO IMPLICIT TASK START IF NO TASK INDEXA'; AL$NBL - DON'T BLOCK TASK IF FAILUREE); AL$XXD - REQUEST IS FROM THE XX DRIVERA:; AL$NVR - (DIRECTIVES) - RETURN C SET IF BUFFER > CPRBUF3; R1 LENGTH OF BUFFER NECESSARY (IN 32 WORD BLOCKS).;P ; OUTPUTS:;N7; R0 ADDRESS OF BUFFER ALLOCATED - TO BE USED IN AN APR ; R1 ACTUAL LENGTH ALLOCATED;N;; THE LENGTH IS ALSO STORED IN THE FIRST BYTE OF THE BUFFER;NCPRALO:N SAVNR ;SAVE R4 AND R5  SEC ;ASSUME FAILUREL TST R1 ;IS THERE A LENGTH?O BEQ 20$ ;NOPE, JUST EXITS% CMP R1,MAXBUF ;WILL THIS EVER WORK?I BGT NEVER ;NOPE, GET OUT / MOV @#KISAR6,-(SP) ;SAVE CURRENT APR6 MAPPING)" MOV R0,-(SP) ;SAVE THE FLAG WORD* MOV #$CPRBF,R2 ;SET UP THE POOL LISTHEAD) BIT #AL$IMP,R0 ;DO IMPLICIT TASK START?O( BEQ 10$ ;NO, JUST ALLOCATE THE BUFFER MOV $TKTCB,R5 ;GET THE TCB( TSTB T.LBN(R5) ;IS THERE A TASK INDEX?2 BEQ IMPST ;NO, WE HAVE TO DO THE IMPLICIT S00uoLomkTADATADATADATADATADATATART,10$: CALL $ALSC1 ;ALLOCATE A BLOCK OF POOL BCS NOPOOL ;NO POOL0 TST (SP)+ ;WE SUCCEEDED, SO DUMP FAILURE FLAG MOV R0,@#KISAR6 ;MAP THE BLOCK# MOVB R1,140000 ;PUT IN THE LENGTHP* MOV (SP)+,@#KISAR6 ;RESTORE APR6 MAPPING 20$: RETURNF .PAGE. .SBTTL CPR BUFFER ALLOCATION FAILURE ROUTINES;LJ; THIS ROUTINE IS CALLED WHEN THE ALLOCATION REQUESTED IS LARGER THAN THE H; LARGEST AVAILABLE CPRBUF SEGMENT, AND THUS WILL NEVER SUCCEED. IF THEG; DIRECTIVE THINKS THIS MIGHT HAPPEN, IT SETS AL$NVR IN THE FLAGS WORD.L<; (CURRENTLY ONLY RMS 21.5 ELP DOES). RETURN WITH CARRY SET;SNEVER:9 BIT #AL$NVR,R0 ;SHOULD WE TELL THEM IT WILL NEVER WORK?M" BEQ NOPOOL ;NO, THEY DIDN'T ASK SEC ;TELL THEM THE BAD NEWS6 RETURN;:K; THIS ROUTINE IS CALLED WHEN CPRALO FAILS TO ALLOCATE A RESOURCE. SEE THESM; COMMENTS AT THE BEGINNING OF CPRALO FOR A DESCRIPTION OF THE ACTIONS TAKEN. ;I;L/NOPOOL: MOV (SP)+,R0 ;RESTORE FLAG FOR FAILUREF* MOV (SP)+,@#KISAR6 ;RESTORE APR6 MAPPING5 MOV #T4.LBW,R1 ;THE TASK IS BLOCKED FOR BUFFER WAITM ;FALL THROUGH TO ALFAILALFAIL:;F; FIRST CHECK TO SEE IF THIS IS FROM XXDRV, WHICH IS HANDLED SPECIALLY;P- BIT #AL$XXD,R0 ;IS THIS REQUEST FROM XXDRV?T$ BEQ 10$ ;NO, GO BLOCK IT NORMALLY INC XXWAIT ;MARK A FAILURES$ MOV R5,XXR5 ;SAVE THE UCB ADDRESS$ ADD #16,SP ;SKIP THE XXDRV RETURN RETURN ;AND EXIT"10$: BIT #AL$NBL,R0 ;NO BLOCKING? BEQ 20$ ;NO, BLOCK IT SEC ;SHO ERROR. RETURN ;IF WE'RE NOT BLOCKING IT, WE DON'T+ ;WANT TO BACK UP THE PC OR RESCHEDULE, ;EITHER20$:;LP; SET THE BLOCKING BITS, INCREMENT BLOCKING COUNTS, BACK UP THE PC IF NECESSARY,; AND REQUEST RESCHEDULING;; MOV $TKTCB,R5 ;GET THE TCB- BIS #TS.RSW,T.STAT(R5) ;SET THE BLOCKING BITI TST R1 ;ANY WAIT FLAG?R BEQ 30$ ;NO, JUST EXITE3 BIS R1,T.ST4(R5) ;BIT TO TELL WHY TASK IS BLOCKED;* INC BUFFWT ;INCREMENT BUFFER WAIT COUNT/30$: BIT #AL$BCK,R0 ;SHOULD WE BACK UP THE PC? BNE 40$ ;IF NE, YES% CALL $DRWSE ;SCHEDULE ANOTHER TASKA SEC RETURN 40$:! SUB #2,$UMPC ;BACK UP USER'S PCE. MOV #$STACK-22,SP ;ALLOCATE? WHAT ALLOCATE? JMP $DRWSEC .PAGE# .SBTTL IMPST - IMPLICIT TASK START;VO; THIS ROUTINE IS CALLED FROM CPRALO WHEN A TCB IS DETECTED WITH NO TASK INDEX. J; IN THIS CASE, THE TASK START PACKET IS CREATED AND SENT, AND CPRALO THENJ; BLOCKS THE TASK AND RETURNS AS IF THERE WERE AN ALLOCATION FAILURE. THEK; PACKET IS SENT AS A PSEUDO REQUEST, AND THE DETACHED RETURN PROCESSING INW6; KXINT FILLS IN THE TASK INDEX AND UNBLOCKS THE TASK.;,7; THE IMPLICIT START REQUEST PACKET HAS THE PARAMETERS:?; +------------+------------+; | TASK UIC |; +------------+------------+; |DEF DIR LEN | # OF LUNS |; +------------+------------+; | DEFAULT DIRECTORY STRING| ; | |;CIMPST:;S1; FIRST FIGURE OUT HOW BIG OF A BLOCK TO ALLOCATE ;I5 MOV #H$SIZE+4+77,R1 ;SIZE IN BYTES OF FIXED AREA+77E& CLR R4 ;SET UP FOR NO CONTEXT BLOCK. MOV T.CTX(R5),@#KISAR6 ;MAP THE CONTEXT BLOCK, BEQ 10$ ;IF EQ, THERE IS NO CONTEXT BLOCK* MOV #140000,R4 ;GET A BASE ADDRESS IN R4$ MOVB C.DDSL(R4),R4 ;GET THE LENGTH( ADD R4,R1 ;ADD SIZE OF DEFAULT STRING410$: ASH #-6,R1 ;MAKE INTO A 32 WORD BLOCK ADDRESS CALL $ALSC1 ;GET A BUFFER BCS NOPOOL ;ALLOCATION FAILED; ; NOW FILL IN THE BLOCKI; 2 MOV R0,R3 ;WE'LL NEED THE BIAS IN R3 FOR $BLXIO- MOV R4,R0 ;AND WE'LL NEED THE LENGTH IN R07 MOV T.PCB(R5),R2 ;GET THE PCBE& MOV P.HDR(R2),R4 ;GET HEADER ADDRESS" BNE 20$ ;IF EQ, EXTERNAL HEADER' MOV P.REL(R2),@#KISAR6 ;MAP IT IN APR6R# MOV #140000,R4 ;GET ADDRESS IN R4..20$: MOVB H.NLUN(R4),-(SP) ;GET NUMBER OF LUNS. MOV H.CUIC(R4),-(SP) ;GET TASK PROTECTION UIC" MOV T.UCB(R5),R4 ;ADDRESS OF TCB6 CMP U.LUIC(R4),(SP) ;TERMINAL PROTECTION EQUAL TASK?, BNE 25$ ;NO. SEND TASK PROTECTION TO CPR. CLR (SP) ;YES. FLAG FOR CPR TO USE VMS UIC25$:) MOV R3,@#KISAR6 ;MAP THE COMMAND HEADERP) MOV #140000,R4 ;GET PACKET BASE ADDRESS $ MOVB R1,(00uon4nblR4) ;SET THE PACKET SIZE& MOVB #HT$RUN,H$TYPE(R4) ;SET THE TYPE' CLRB H$ICNT(R4) ;CLEAR THE ITEM COUNTE( ADD #P$UIC,R4 ;START OF PARAMETER AREA MOV (SP)+,(R4)+ ;UIC" MOVB (SP)+,(R4)+ ;NUMBER OF LUNS' MOVB R0,(R4)+ ;SIZE OF DEFAULT STRINGF& MOV T.CTX(R5),R1 ;CONTEXT BLOCK BIAS# BEQ 30$ ;IF EQ, NO CONTEXT BLOCK 2 MOV #120000+C.DDS,R2 ;DEFAULT STRING DISPLACEMENT+ MOV R0,-(SP) ;SAVE SIZE OF DEFAULT STRINGA' CALL $BLXIO ;MOVE THE DEFAULT STRING0. MOV (SP)+,R0 ;RESTORE SIZE OF DEFAULT STRING,30$: ADD #H$SIZE+4,R0 ;GET THE TOTAL LENGTH* MOV R3,R2 ;CAN'T PASS A PARAMETER IN R3 CPSEN$ #SN$PSR,R2,R0," MOV (SP)+,R0 ;GET BACK FLAG WORD* MOV (SP)+,@#KISAR6 ;RESTORE APR6 MAPPING" CLR R1 ;NOT WAITING ON A BUFFER BR ALFAIL ;EXIT .PAGE* .SBTTL CPRDEA - DEALLOCATE BUFFER SPACE;O'; ** - CPRDEA - DEALLOCATE BUFFER SPACEU;SE; THIS ROUTINE DEALLOCATES AND RETURNS TO THE CPR POOL A BUFFER BLOCK ;X ; INPUTS:T;D'; R0 ADDRESS OF BLOCK TO BE DEALLOCATEDI;O=; THE FIRST BYTE OF THE BLOCK IS THE LENGTH IN 32 WORD BLOCKS;V>; THE CORE BLOCK IS MERGED INTO THE FREE CORE CHAIN BY ADDRESS2; AND MERGED WITH ANY BORDERING BLOCKS IF POSSIBLE;S; R3, R4, R5 PRESERVED;CPRDEA: ' MOV @#KISAR6,-(SP) ;SAVE APR6 MAPPINGX MOV R0,@#KISAR6 ;MAP THE BLOCK MOVB 140000,R1 ;GET THE LENGTH% MOV (SP)+,@#KISAR6 ;RESTORE MAPPING& MOV #$CPRBF,R2 ;SET UP POOL LISTHEAD4 CALL $DESC1 ;DEALLOCATE THE POOL BLOCK AND RETURN;AL; FIRST CHECK IF ANY TASKS ARE WAITING FOR BUFFER SPACE. IF THEY ARE, SEARCHN; THE ACTIVE TASK LIST, CLEARING THE BIT WHEN FOUND UNTIL THE COUNT GOES TO 0.L; ON THE FIRST TASK FOUND WAITING (WHICH WILL BE THE HIGHEST PRIORITY), CALL; $SETCR TO SCHEDULE THE TASKM;@210$: TST BUFFWT ;ANY TASKS WAITING FOR A BUFFER? BEQ 60$ ;NO, CHECK XXDRVR4 CLR -(SP) ;FLAG TO TELL IF $SETCR HAS BEEN CALLED* MOV $ACTHD,R0 ;GET THE FIRST ACTIVE TASK.20$: BIT #T4.LBW,T.ST4(R0) ;THIS TASK WAITING? BEQ 40$ ;NO, TRY THE NEXT ONE- BIC #T4.LBW,T.ST4(R0) ;CLEAR THE WAITING BIT - BIC #TS.RSW,T.STAT(R0) ;AND THE BLOCKING BITT' TST (SP) ;HAVE WE CALLED $SETCR YET? $ BNE 30$ ;YES, DON'T CALL IT AGAIN% CALL $SETCR ;CALL FOR A RESCHEDULE " INC (SP) ;MARK THAT WE DID THIS&30$: DEC BUFFWT ;DECREMENT THE COUNT BEQ 50$ ;IF IT'S ZERO, EXIT140$: MOV T.ACTL(R0),R0 ;GET THE NEXT ACTIVE TASKE BR 20$ ;AND GO CHECK AGAINT,50$: TST (SP)+ ;POP THE FLAG OFF THE STACK660$: TST XXWAIT ;WAS XXDRV WAITING FOR BUFFER SPACE? BEQ 70$ ;IF EQ NO, JUST EXIT $ CLR XXWAIT ;CLEAR THE BUFFER WAIT5 CMP XXBIAS,4(SP) ;WAS THIS A CPDEA CALL FROM XXDRV?T BNE 80$ ;NO, GO CALL XXDRVT370$: RETURN ;CALL WAS FROM XXDRV, JUST RETURN TO ! ;AVOID MULTIPLE CALL NESTINGS;0!; SET UP AND JUMP TO THE XXDRIVERT;B280$: MOV (SP),R5 ;GET THE CURRENT RETURN ADDRESS- MOV XXBIAS,(SP) ;SET UP THE BIAS FOR $MPPROG* MOV XXALRT,-(SP) ;AND THE RETURN ADDRESS7 MOV R5,-(SP) ;MOVE ORIGINAL RETURN ADDRESS FOR $MPPROF MOV XXR5,R5 ;RESTORE R5 JMP $MPPRO ;CALL THE DRIVER .PAGE( .SBTTL CPRSEN - SEND RING ENTRY TO VMS;H&; ** - CPRSEN - SEND RING ENTRY TO VMS;OF; THIS ROUTINE FILLS IN COMMON FIELDS IN THE HEADER AND THEN SENDS THE(; FILLED-IN HEADER-ITEM BUFFER TO VMS. ; ?; THE BITS IN THE OPCODE FIELD DETERMINE THE FOLLOWING ACTIONS:R; ; BIT ACTION;V8; SF$BLK THE TASK IS BLOCKED PENDING REQUEST COMPLETION@; SF$BIA THE BIAS OF THE CALLING ROUTINE IS SAVED IN THE HEADER;; SF$HDR COMMON FIELDS ARE FILLED IN IN THE REQUEST HEADER B; SF$IRT DON'T STORE RETURN ADDRESS IN HEADER, RETURN IMMEDIATELY(; SF$RSP SET RESPONSE BIT IN FLAGS WORD@; SF$AST AN KERNAL AST MUST BE USED TO LOAD TASK CONTEXT BEFORE7; CONTROL IS TRANSFERRED TO THE COMPLETION ROUTINE!; SF$DRF CALL DRFIN WHEN EXITINGDB; SF$NRS NO RESPONSE EXPECTED TO THIS PACKET - SET FLAG IN HEADER*; SF$DSW SET TASK DSW WHEN PACKET RETURNS9; SF$TCB THE TCB IS ALREADY IN R5, DON'T GET FROM $TKTCBH;E$; THE FOLLOWING OPCODES ARE DEFINED:;I9; SN$TSK SF$BLK!SF00uoLomkTADATADATADATADATADATA$HDR!SF$AST CALLED BY PRIVILEGED TASKSEG; SN$DIR SF$BLK!SF$HDR!SF$BIA!SF$AST!SF$DRF!SF$DSW CALLED BY DIRECTIVESDI; SN$IMP SF$BLK!SF$HDR!SF$BIA!SF$AST!SF$DSW CALLED BY IMPLICIT DIRECTIVESC.; SN$QIO SF$BIA!SF$HDR!SF$TCB CALLED BY XXDRV>; SN$PSR SF$BLK!SF$HDR!SF$IRT PSEUDO REQUEST BY OTHER ROUTINE0; SN$RSP SF$RSP!SF$IRT RESPOND TO VMS COMMANDS8; SN$NOT SF$NRS!SF$IRT NOTIFY VMS - NO RESPONSE NEEDED(; SN$DET SF$IRT!SF$HDR DETACHED RETURN;H ; INPUTS: ;OG; THIS ROUTINE IS CALLED BY THE MACRO CPSEN$ WHICH SETS UP THE STACK IN ; THE FOLLOWING MANNER:F;R-; (SP) RETURN ADDRESS TO CPCALL EXEC MODULEE,; 2(SP) CALLING ROUTINE'S D SPACE APR5 BIAS,; 4(SP) CALLING ROUTINE'S I SPACE APR5 BIAS); 6(SP) CALLING ROUTINE'S RETURN ADDRESSR; 10(SP) OPCODE$; 12(SP) BUFFER ADDRESSH; 14(SP) BUFFER LENGTH8; 16(SP) ALTERNATE RETURN ADDRESS (FOR IMMEDIATE RETURN); ; OUTPUTS:;O; THE RING IS SENT TO VMSSCPRSEN:R;D%; FILL IN COMMON FIELDS IN THE HEADERH;R% MOV 12(SP),@#KISAR6 ;MAP THE BUFFERI& MOV #140000,R3 ;USE R2 TO MAP HEADER) BIT #SF$RSP,10(SP) ;IS THIS A RESPONSE?C BEQ 10$ ;NO) BIS #HF$RSP,H$FLAG(R3) ;SET RESPONSE BIT  BR 20$ ;CONTINUE IN COMMONS/10$: BIT #SF$NRS,10(SP) ;NO RESPONSE EXPECTED?T BEQ 20$ ;NO, BIS #HF$NRS,H$FLAG(R3) ;SET NO RESPONSE BIT:20$: BIT #SF$HDR,10(SP) ;SHOULD WE FILL IN HEADER FIELDS? BNE 25$ ;YES, FILL THEM IN:2 JMP 130$ ;NO, JOIN COMMON CODE TO SEND THE RING025$: CLR H$FLAG(R3) ;CLEAR THE HEADER FLAG WORD, BIT #SF$TCB,10(SP) ;SHOULD WE GET THE TCB?" BNE 27$ ;NO, IT'S ALREADY IN R5$ MOV $TKTCB,R5 ;GET THE CURRENT TCB627$: BIT #T3.PRV,T.ST3(R5) ;IS THIS A PRIVILEGED TASK? BEQ 30$ ;IF EQ NO1 BIS #HF$PVT,H$FLAG(R3) ;SET PRIVILEGED TASK FLAGE#30$: MOV T.PCB(R5),R2 ;GET THE PCBH/ MOV P.REL(R2),@#KISAR6 ;MAP THE HEADER IN APR61( MOV H.CUIC(R3),R2 ;GET THE CURRENT UIC' MOV 12(SP),@#KISAR6 ;REMAP THE PACKET ' BIT #174000,R2 ;IS THIS A SYSTEM UIC?( BNE 35$ ;IF ANY OF THOSE BITS SET, NO/ BIS #HF$SYS,H$FLAG(R3) ;SET THE SYSTEM UIC BITC735$: BIT #SF$AST,10(SP) ;WILL WE NEED TO QUEUE AN AST?G BEQ 40$ ;NOPE, JUST CONTINUEP, BIS #HF$AST,H$FLAG(R3) ;SET THE HEADER FLAG640$: BIT #SF$DSW,10(SP) ;WILL WE NEED TO SET THE DSW? BEQ 50$ ;NOPE, JUST CONTINUER, BIS #HF$DSW,H$FLAG(R3) ;SET THE HEADER FLAG950$: BIT #SF$BLK,10(SP) ;ARE WE GOING TO BLOCK THE TASK?U BEQ 60$ ;NOPE( BIS #HF$BLK,H$FLAG(R3) ;MARK AS BLOCKED! BIS #TS.RSW,T.STAT(R5) ;BLOCK IT$$ CALL $DRWSE ;REQUEST ANOTHER TASK60$:) MOV R5,H$TCB(R3) ;PUT TCB IN THE HEADER:- MOVB T.LBN(R5),H$TKI(R3) ;GET THE TASK INDEXA MOV T.UCB(R5),R2 ;GET TI: UCBI' TST U.RED(R2) ;UNIT REDIRECTED (CO:)?A BEQ 70$ ;NOPE% MOV U.RED(R2),R2 ;GET THE REAL UNITH-70$: MOV R2,H$TIUC(R3) ;PUT IT IN THE HEADER#' CLR H$BIAS(R3) ;ASSUME NO BIAS STORED06 BIT #SF$BIA,10(SP) ;DO WE WANT TO SAVE THE APR BIAS? BEQ 80$ ;NO, IT'S A TASKB) MOV 4(SP),H$BIAS(R3) ;SAVE THE APR5 BIASW-80$: CLR H$RET(R3) ;ASSUME NO RETURN ADDRESS ' BIT #SF$IRT,10(SP) ;IMMEDIATE RETURN?U* BNE 90$ ;YES, DON'T SAVE RETURN ADDRESS. MOV 6(SP),H$RET(R3) ;SAVE THE RETURN ADDRESS590$: BITB #HT$SYS,H$TYPE(R3) ;IS THIS PKT FOR CPRSYS?B( BNE 100$ ;YES, USE THE UCB FOR CPRSYSA MOV U.VUCB(R2),H$VUCB(R3) ; NO, GET THE VMS UCB FROM THE TI: UCBH+ MOV U.VUCB+2(R2),H$VUCB+2(R3) ; BOTH WORDSB;1L; WE ONLY SHOW LOST PACKET FOR PACKETS GOING TO THE USER'S AME. REQUESTS TO; CPRSYS ALWAYS GO THROUGH.5;A, CMPB #-1,H$TKI(R3) ;WAS THE TASK INDEX -1? BNE 110$ ;NO, IT'S OK;MJ; THIS TASK NO LONGER HAS AN ASSOCIATED AME. SET THE STATUS TO IE.PRI ANDL; RETURN THE PACKET. AFTER THE PACKET HAS BEEN RETURNED, ALLOCATE A 1-BLOCKO; CPR PACKET FOR THE LOST PACKET NOTIFICATION. IF A BLOCK CANNOT BE ALLOCATED,;N; JUST EXIT - IT'S NOT CRUCIAL THAT EVERY LOST PACKET BE REPORTED. IF A BLOCKM; IS ALLOCATED, INSERT THE TASK NAME AND REQUEST TYPE AND SEND THE PACKET TO E; VMS WITH A DETACHED RETURN.U;57 MOV @#KISAR6,R0 ;GET THE PACKET BIAS IN R0 FOR SENRSP1 CLR R1 ;PACKET IS NOT Q00uon4nblUEUEDS7 MOV #IE.PRI,H$STAT(R3) ;SET PRIVILEGE VIOLATION STATUSP? MOVB H$TYPE(R3),-(SP) ;SAVE THE PACKET TYPE -CAN'T BE NEGATIVE - CALL SENRSP ;RETURN THE PACKET TO THE USERA' MOV (SP)+,R4 ;RESTORE THE PACKET TYPEA CLR R0 ;NO FLAGS FOR $CPALO MOV #1,R1 ;GET ONE BLOCKC CALL CPRALO ;TRY FOR IT* BCS 150$ ;IF NONE AVAILABLE, FORGET IT.! MOV R0,@#KISAR6 ;MAP THE PACKETE# MOV #140000,R3 ;APR6 BASE ADDRESS+ MOV #HT$LST,H$TYPE(R3) ;IT'S A LOST PACKETF! CLR H$FLAG(R3) ;CLEAR THE FLAGST" CLR H$RET(R3) ;NO RETURN ADDRESS& MOV SYSUCB,H$VUCB(R3) ;SEND TO CPRSYS MOV SYSUCB+2,H$VUCB+2(R3) ;...Y CLR H$TIUC(R3) ;CLEAR THE UCBR CLR H$TCB(R3) ;AND THE TCB MOV R3,R0 ;COPY THE APR6 BASE) ADD #H$SIZE,R0 ;START OF PARAMETER AREAA$ MOV R4,(R0)+ ;MOVE THE PACKET TYPE0 BIT #SF$TCB,10(SP) ;IS THE TCB ALREADY SET UP? BNE 99$ ;YES, LEAVE R5 ALONE6 MOV $TKTCB,R5 ;GET THE TCB999$: MOV T.NAM(R5),(R0)+ ;GET THE FIRST WORD OF THE NAME / MOV T.NAM+2(R5),(R0)+ ;GET SECOND WORD OF NAME' MOV @#KISAR6,R1 ;GET PACKET BIAS BACKS MOV #H$SIZE+6,R4 ;GET SIZE( BR 140$ ;AND SEND THIS PACKET INSTEAD/100$: MOV SYSUCB,H$VUCB(R3) ;GET THE CPRSYS UCBT& MOV SYSUCB+2,H$VUCB+2(R3) ;BOTH WORDS;DP; MAKE SURE THAT THE PACKET IS AS BIG AS THE LENGTH SPECIFIED AS A SANITY CHECK.K; IF THE TASK IS STARTING A P0 IMAGE, MAKE SURE THAT THE PACKET CONTAINS AN6E; EXTRA BLOCK FOR A POTENTIAL P0 ABORT, AND SET THE P0 BIT IN THE TCBT;R110$:E MOV 14(SP),R1 ;GET THE LENGTHE" ADD #77,R1 ;ROUND TO NEXT BLOCK ASH #-6,R1 ;GET # OF BLOCKS< CMPB #HT$VMS,H$TYPE(R3) ;IS THIS GOING TO START A P0 IMAGE? BNE 120$ ;NO, CONTINUEH INC R1 ;ONE EXTRA BLOCK, BIS #T4.P0,T.ST4(R5) ;SET P0 BIT IN THE TCB.120$: CMPB R1,(R3) ;DO WE HAVE ENOUGH SPACE? BLE 130$ ;YUP, IT'S OKT( MOV #IE.ADP,H$STAT(R3) ;MARK AS NO ROOM" MOV @#KISAR6,R0 ;GET PACKET BIAS) CLR R1 ;SHOW THAT PACKET IS NOT QUEUEDA% CALL SENRSP ;SEND THE RESPONSE NOWR BR 150$ ;AND EXIT,130$: MOV 12(SP),R1 ;GET THE PACKET ADDRESS& MOV 14(SP),R4 ;GET THE PACKET LENGTH+140$: CALL SENPKT ;SEND THE PACKET TO VMSS;TB; NOW WE HAVE TO FIX THE STACK, AND RETURN. THERE ARE FOUR CASES:;BB; 1) A DIRECTIVE. PULL EVERYTHING OFF THE STACK BUT THE DSW, CALLC; $DRFIN TO FINISH THE DIRECTIVE, AND CALL $DRWSE TO RESCHEDULE.AC; 2) A $SWSTK CALL. PULL EVERYTHING OFF THE STACK AND CALL $DRWSE. E; 3) A PSEUDO REQUEST. PULL THE PARAMETERS OFF THE STACK AND RETURN.R>; 4) AN ALTERNATE RETURN. TREAT JUST LIKE AN IMMEDIATE RETURN;E0150$: BIT #SF$IRT,10(SP) ;SHOULD WE RETURN NOW?/ BNE 170$ ;IF NE, YES, GO PULL THE PARAMETERS , TST 16(SP) ;IS THERE AN ALTERNATE RETURN?( BNE 180$ ;YES, RETURN TO THAT ADDRESS" BIT #SF$DRF,10(SP) ;CALL $FINDR?( BNE 160$ ;IF NE, YES, SET UP AND CALL7 MOV #$STACK-22,SP ;GET RID OF EVERYTHING ON THE STACK  RETURNR160$:O6 MOV #$STACK-24,SP ;GET RID OF EVERYTHING BUT THE DSW JMP $FINDR ;GO TO $DRFINT>170$: MOV 6(SP),16(SP) ;THE TOP FOUR ELEMENTS ON THE STACK...1180$: MOV 4(SP),14(SP) ;...NEED TO BE MOVED DOWNL MOV 2(SP),12(SP) ;...0 MOV (SP),10(SP) ;...3 ADD #10,SP ;AND THEN SKIP THE REST OF THE PARAMSE RETURN .PAGE> .SBTTL SENPKT - SEND PACKET TO VMS OR QUEUE FOR LATER SENDING;J; QUEUE THE PACKET, EITHER TO THE OUSTANING QUEUE, OR TO THE WAITING QUEUE/; SEND PACKET TO VMS AND MOVE TO THE NEXT RING.S;K ; INPUTS:T;D; R1 PACKET TO BE SENT ; R3 140000D; R4 PACKET LENGTH;7; PACKET MAPPED IN APR6E;P ; OUTPUTS:;OH; PACKET SENT TO VMS IF RING AVAILABLE AND INSERTED IN APPROPRIATE QUEUE;)=SENPKT: CLR H$LINK(R3) ;THIS WILL BE THE LAST PACKET IN LIST ; MOV #$CPOUT+2,R2 ;ASSUME PACKET TO BE IN OUSTANDING QUEUEPA BIT #HF$RSP!HF$NRS,H$FLAG(R3) ;WILL THIS REQUEST GET A RESPONSE? ! BEQ 10$ ;YES, QUEUE THE PACKETU" CLR R2 ;PACKET NOT TO BE LINKED(10$: MOV RNGBAS,@#KISAR6 ;MAP THE RINGS$ TST @SNDRNG ;IS A RING AVAILABLE?, BPL 20$ ;YUP, PUT IT IN OUTSTANDING QUEUE7 MOV #$CPWAT+2,R2 ;PUT PACKET IN WAITING QUEUE INSTEAD !20$: TST R00uo~omkTADATADATADATADATADATA2 ;QUEUE THIS PACKET?E BEQ 50$ ;NO, JUST SEND IT3 MOV (R2),-(SP) ;SAVE THE LAST PACKET IN THE QUEUEN- MOV R1,(R2) ;PUT NEW PACKET AT END OF LIST 2 MOV (SP)+,@#KISAR6 ;MAP THE PREVIOUS LAST PACKET3 BNE 30$ ;IF PACKET EXISTS, LINK NEW PACKET TO IT,4 MOV R1,-(R2) ;QUEUE EMPTY - PUT PACKET IN LISTHEAD BR 40$V330$: MOV R1,H$LINK(R3) ;LINK PACKET TO END OF LISTA! TST -(R2) ;BACK UP TO LISTHEADP.40$: MOV RNGBAS,@#KISAR6 ;MAP THE RINGS AGAIN/ CMP R2,#$CPWAT ;WAS THIS RING HELD FOR LATER? " BEQ 70$ ;YUP, DON'T SEND IT NOW; ; FILL IN THE RING;,050$: MOV SNDRNG,R2 ;GET THE ADDRESS OF THE RING CLR (R2)+ ; SYNCH WORD  MOV R4,(R2)+ ; LENGTH@ MOV R1,(R2)+ ; ADDRESS6 BIS #RF$SYN,@SNDRNG ;TELL VMS THAT THIS ONE IS READY; ;INTERRUPT IF NECESSARYU; $ TST @PRVSND ;SHOULD WE INTERRUPT? BMI 60$ ;NO, JUST CONTINUEN( MOV $KXVC1,@#KXJQIR ;INTERRUPT THE VAX;U;NOW MOVE TO THE NEXT RING;,>60$: MOV SNDRNG,PRVSND ;CURRENT RING IS NOW THE PREVIOUS RING/ ADD #R$SIZE,SNDRNG ;MOVE POINTER TO NEXT RINGN( CMP SNDRNG,WRAPSN ;DO WE NEED TO WRAP? BNE 70$ ;NOPE, EXIT+ MOV FRSTSN,SNDRNG ;START AT THE BEGINNINGM 70$: RETURN;KXINI::MKXCAN::)KXOUT::EKXPWF::# RETURNN .ENDTELL VMS THAT THIS ONE IS READY; ;INTERRUPT IF NECESSARYU; $ TST @PRVSND ;SHOULD WE INTERRUPT? BMI 60$ ;NO, JUST CONTINUEN( MOV $KXVC1,@#KXJQIR ;INTERRUPT THE VAX;U;NOW MOVE TO THE NEXT RING;,>60$: MOV SNDRNG,PRVSND ;CURRENT RING IS NOW THE PREVIOUS RING/ ADD #R$SIZE .TITLE LADRV  .IDENT /05.01/A;A(; DIGITAL EQUIPMENT CORP., MAYNARD MASS.; B; COPYRIGHT (c) 1977, 1982, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;C<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;D;OA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON AIA; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-$A; SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANYLA; OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADEDA; AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEMOA; AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO ANDD=; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.E;TA; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUTU; EQUIPMENT CORPORATION.; A; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITSI5; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.S;W;,;R; CHARLES A. SAMUELSON; MICHAEL SCHWARTZ; CLARK A. D'ELIAW; ; NOV. 22, 1977L;O; MODIFIED BY:;X?; PKW029 -- MOVE A LABLE SO THAT A SECTION OF CODE IS EXECUTEDH; C; PKW032 -- MAKE SURE ALL OF RANDOM CHANNEL LIST IS MAPPED BY UMRSA'; IMPROVE COMMENTS ON IBUF AND RDAM;O;; LPA11 LABORATORY PERIPHERAL ACCELERATOR CONTROLLER DRIVERN;O;R;O;; MACRO LIBRARY CALLSS;S* .MCALL HWDDF$,PKTDF$,TCBDF$,UCBDF$,SCBDF$% HWDDF$ ;DEFINE HARDWARE REGISTERSP% PKTDF$ ;DEFINE I/O PACKET OFFSETS./ SCBDF$ ;DEFINE STATUS CONTROL BLOCK OFFSETSW- TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS- UCBDF$ ;DEFINE UNIT CONTROL BLOCK OFFSETSC; ; QIO DIRECTIVE DESCRIPTIONS;K; IO.LOD, ... ,'; BUF - BUFFER OF MICRO - CODE TO LOADC#; BUFFER SIZE MUST BE 2048. BYTES #; ISSUEING TASK MUST BE PRIVILEGEDT%; VERIFIES NO ACTIVE USERS FOR LPA11 ; HARDWARE RESETS LPA11"; LOADS AND VERIFIES MICRO - CODE&; STARTS LPA11 AND ENABLES INTERRUPTS,; RETURNS WHEN READY IN INTERRUPT IS POSTED4; THIS IS A TRANSFER FUNCTION-(THE QIO DOES ADDRESS(; CHECKS AND RELOCATES THE USER BUFFER);F; IO.INI, ... ,L/; BUF - BUFFER CONTAINING LPA11 INITIALIZE RDAK*; BUFFER SIZE MUST BE AT LEAS 278. BYTES#; ISSUEING TASK MUST BE PRIVILEGEDR'; SENDS AN INITIALIZE COMMAND TO LPA11A;M"; IO.CLK, ... ,%; MODE - LPA11 CLOCK START MODE WORDEE; CKCSR - IMAGE TO WRITE INTO LPA11 REAL TIME CLOCK CONTROL REGISTEREL; PRESET - IMAGE TO WRITE INTO LP00~on4nblA11 REAL TIME CLOCK PRESET BUFFER REGISTER&; ISSUES AN LPA11 CLOCK START COMMAND;K; IO.STA, ... ,*; BUF - POINTER TO LPA11 SAMPLE START RDA*; BUFFER SIZE MUST BE AT LEAST 40. BYTES.; ISSUES AN LPA11 DATA TRANSFER START COMMAND4; THIS IS A TRANSFER FUNCTION-(THE QIO DOES ADDRESS(; CHECKS AND RELOCATES THE USER BUFFER);O+; SUBFUNCTION CODE DIFFINTIONS FOR IO.STA ;E9; BIT 0 = 0 GIVE AST FOR EVERY BUFFER IF AST SPECIFIEDK5; BIT 0 = 1 GIVE AST ONLY FOR EXCEPTION CONDITIONS1;E;T; IO.STP, ... ,E;T; CALL MUST SUPPLY LUNO+; USERID - USER INDEX NUMBER <0-7> TO STOP>2; STOPPING TASK MUST BE THE SAME AS STARTING TASK;R;Z$; DEFAULT UIC OF LOADER TASK = [1,1];N'TUIC=401 ;DEFAULT UIC OF LOADER TASKI;S;T;S; ASSEMBLY CONDITIONALS ;D; M$$MGE ;MEMORY MANAGEMENT; A$$CHCK ;ADDRESS CHECKN; A$$TRP ;AST SUPPORT"; M$$EXT ;22 BIT 11/70 EXT MEM.$; M$$PRO ;MULTI-PROCESSOR SUPPORT!; R$$MPL ;RSX-11M PLUS SUPPORTC;I;C;I; DRIVER DISPATCH TABLE ;  .IF NDF R$$MPL " DDT$ LA,L$$A11,,, .IFFN( DDT$ LA,L$$A11,,,, .ENDC;S .IF GT L$$A11-1;Z,TEMP: .BLKW 1 ;TEMP STORAGE FOR CONT. NUM.;4 .ENDC;U;U .PAGE# .SBTTL ONLINE/OFFLINE ENTRY POINTSN;I$; CONTROLLER STATUS CHANGE ROUTINE;T; INPUTS: R2 = KRB ADDRESS;!; C = 0 ,BRING CONTROLLER ONLINE !; C = 1 ,TAKE CONTROLLER OFFLINE ;M(; OUTPUTS: $SCERR= UNCHANGED FOR SUCCESS!; = ERROR CODE FOR FAILUREV;D;A8; THE LPA11-K IS BOTH A UNIT AND ITS OWN CONTROLLER. ALLD; THE REAL WORK WILL BE DONE AT THE UNIT ONLINE/OFFLINE ENTRY POINT.;N .IF DF R$$MPL#LAKRB: RETURN ;ALWAYS SUCCESSFULR;;;;;;;;;U; UNIT STATUS CHANGE ROUTINE.;T; INPUTS: R3 = CONTROLLER INDEXI; R4 = SCB POINTERU; R5 = UCB POINTER;N; C = 0 ,BRING UNIT ONLINE ; C = 1 ,TAKE UNIT OFFLINEN;(; OUTPUTS: $SCERR= UNCHANGED FOR SUCCESS!; = ERROR CODE FOR FAILUREE;; LAUCB: BCS 100$ ! CALLR LAPWF ;BRING UNIT ONLINE $100$: TST S.PKT(R4) ;ANYONE ACTIVE? BNE 200$ ;YES, BRANCH, MOV #U.LAUT,R0 ;POINT TO ACTIVE USER TABLE ADD R5,R0 ; IN THE UCB:" MOV #8.,R2 ;MAXIMUM OF 8. USERS$110$: TST (R0)+ ;THIS USER ACTIVE? BNE 200$ ;YES, BRANCH DEC R2 ;DECREMENT COUNTER BGT 110$ ;TRY THE NEXT USER( MTPS S.PRI(R4) ;;; LOCK OUT INTERRUPTS2 MOV #40000,@S.CSR(R4) ;;; HARDWARE RESET LPA11-K MTPS #0 ;;; ALLOW INTERRUPTSR% RETURN ;LPA11-K READY FOR OFFLINE15200$: MOVB #IE.RSU&377,$SCERR ;RESOURCE IN USE ERRORK RETURN ;NO OFFLINE YET .ENDC .PAGE: .SBTTL LPA11 DRIVER I/O INITIATOR ENTRY POINT - LAINI -**;;J; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUESTD; IS RECEIVED FOR THE LPA11 LABORATORY PERIPHERAL ACCELERATOR. FIVEE; FUNCTIONS ARE RECOGNIZED BY THE LPA11 DRIVER. SPECIAL USER BUFFERSSF; ARE ADDRESS CHECKED WHERE NECESSARY. ERROR FREE REQUESTS ARE PLACED4; IN THE I/O QUEUE THAT IS MAINTAINED BY THE DRIVER.;G; ADDRESS CHECKING FOR THE USER'S DBP BUFFER IS DONE IN THE QIO ROUTINEF; BEFORE THIS DRIVER IS CALLED.T; ; INPUTS:I;I"; R1=ADDRESS OF I/O REQUEST PACKET$; R4=ADDRESS OF STATUS CONTROL BLOCK9; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATEDH;P ; OUTPUTS:;P;; A QUEUED I/O PACKET WITH USER BUFFERS ADDRESS CHECKED ANDH=; RELOCATED. PACKET MAY BE DEQUEUED WHEN $GTPKT IS CALLED IFH&; IT IS THE ONLY PACKET IN THE QUEUE.;C1; FUNCTION INDEPENDENT I/O REQUEST PACKET FORMAT:I;."; WD. 00 -- I/O QUEUE THREAD WORD./; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBERO0; WD. 02 -- ADDRESS OF THE TCB OF REQUESTER TASK?; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTER TASK HEADERBC; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTER TASK HEADER; WD. 05 -- I/O FUNCTION CODEP/; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCKE/; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCKAB; WD. 10 -- I/O STATUS BLOCK ADDRESS (READ OR DISPLACEMENT+140000)3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE00~oomkTADATADATADATADATADATA. ; ;U;H>; THE I/O PACKET PARAMETER LIST IS USED BY THE DRIVER TO STORE$; INFORMATION REGARDING THE REQUEST.=; THIS INFORMATION IS CALCULATED AS THE REQUEST IS PROCESSED.A7; CONVENTIONS FOR I/O PACKET PARAMETER LIST USEAGE ARE: ;U;EB; WD. 12 - I.PRM -FIRST PARAMETER SUPPLIED BY ISSUEING TASKS QIOC; WD. 13 - I.PRM+2 -SECOND PARAMETER SUPPLIED BY ISSUEING TASKS QIOUB; WD. 14 - I.PRM+4 -THIRD PARAMETER SUPPLIED BY ISSUEING TASKS QIOH; WD. 15 - I.PRM+6 -LOW ORDER 16 BITS OF PHYSICAL ADDRESS OF REQUEST RDAH; WD. 16 - I.PRM+10-HIGH ORDER 2 BITS OF PHYSICAL ADDRESS OF REQEUST RDAH; WD. 17 - I.PRM+12-EVENT FLAG MASK FOR CONTINUING DATA TRANSFER REQUEST&; WD. 20 - I.PRM+14-EVENT FLAG ADDRESS(; WD. 21 - I.PRM+16-RESERVED FOR RSX-11M;;D;2-LAINI: MOV R1,-(SP) ;SAVE I/O PACKET ADDRESSG" TST I.IOSB+4(R1) ;IOSB SUPPLIED?% BEQ ELABAD ;NO, BAD PARAMETERS ERR % MOV I.FCN(R1),R3 ;I/O FUNCTION CODEE BIC #377,R3 ;CLEAR LOW BYTE% CMP #IO.INI,R3 ;INITIALIZE REQUEST?  BNE 5$ ;NO, CONTINUEQ JMP LAINIT ;YES)5$: CMP #IO.CLK,R3 ;CLOCK START REQUEST?R BNE 15$ ;NO, CONTINUE JMP LACLOK ;YES#15$: CMP #IO.STP,R3 ;STOP REQUEST?R BNE 2$ ;NO  JMP LASTOP ;YES;GI; IT IS EITHER A LOAD MICRO-CODE REQUEST OR A START DATA TRANSFER REQEUSTR2; COPY USER BUFFER POINTERS SO $GTWRD WILL OPERATE;;,2$: MOV I.PRM(R1),U.BUF(R5) ;RELOCATION BIAS$ MOV I.PRM+2(R1),U.BUF+2(R5) ;OFFSET CMP #IO.STA,R3 ;START? BNE 3$ ;NOE JMP LASTRT ;YES%3$: CMP #IO.LOD,R3 ;LOAD MICRO-CODE?N# BNE ELAIFC ;NO, ILLEGAL FUNCTIONI JMP LALOAD ;YES, JMP TO LOAD;E;$-; *******************************************#;S<; ** - ERROR HANDLING PATHS FOR LADRV - INITIATOR ENTRY ONLYH; INTERRUPT ROUTINES AND OTHER ENTRY POINTS REPORT THEIR OWN ERRORS;;O3ELAIFC: MOV #IE.IFC&377,R0 ;ILLEGAL FUNCTION ERROR$" BR EROR ;FINISH ERROR HANDLING;I,ELAPRI: MOV #IE.PRI&377,R0 ;PRIVILEGE ERROR BR EROR ;T9ELASPC: MOV #IE.SPC&377,R0 ;USER BUFFER ADDR CHECK ERROR3 BR EROR;-6ELABCC: MOV #IE.BCC&377,R0 ;LOAD ERROR FOR MICRO-CODE BR EROR ;EXIT;@ELARSU: MOV #IE.RSU&377,R0 ;RESOURCE IN USE - CANNOT INITIALIZE BR EROR;L<ELANOD: MOV #IE.NOD&377,R0 ;SYSTEM DYNAMIC MEMORY EXHAUSTED BR EROR;T+ELABAD: MOV #IE.BAD&377,R0 ;BAD PARAMETERS;EROR: ! MOV (SP)+,R3 ;ERROR ENCOUNTEREDO CLR R1 ;SET UP IOSB WORD 2R CALLR $IOFIN ;I/O COMPLETION.;&;,,ELAPR2: MOV #IE.PRI&377,R0 ;PRIVILEGE ERROR BR ERORGT;,7ELASP2: MOV #IE.SPC&377,R0 ;USER BUFF ADDR CHECK ERROR ; ERORGT: MOV (SP)+,R3 CLR R1 CALL $IOFIN BR GETPKT;-; *******************************************E;C .PAGE7 .SBTTL RETREIVE I/O PACKET AND ISSUE REQUEST TO LPA-11E;Y; INSERT PACKET IN I/O QUEUE5; THE DRIVER WAS ENTERED BEFORE THE PACKET WAS QUEUED-; NOW WE PUT IT IN THE QUEUE AND GO TO $GTPKTC;R/QUEPKT: ;QUEUE AN I/O PACKET FOR THE DRIVERM% MOV (SP)+,R1 ;GET ADDRESS OF PACKET7= MOV R4,R0 ;SCB ADDRESS OF CONTROLLER TO INSERT PACKET INTO,( CLR I.PRM+16(R1) ;INITIALIZE FLAG WORD CALL $QINSP ;INSERT IN QUEUE ;AND FALL THROUGH TO $GTPKT;*6; TRY TO RETREIVE AN I/O PACKET AND TRANSMITT TO LPA11;IGETPKT:C; D; BEFORE WE DEALLOCATE A NEW REQUEST FROM THE CONTROLLERS I/O QUEUE,:; TRY AND FETCH A STOP REQUEST FROM THE STOP REQUEST QUEUE;I MOV U.SCB(R5),R4 ;POINT TO SCB! TSTB S.STS(R4) ;CONTOLLER BUSY?T BEQ 198$I JMP 14$ ;YES, GO AWAY,198$: MOV U.LASL(R5),R1 ;LOOK AT STOP QUEUE BEQ 200$ ;EMPTY, TRY $GTPKT& MOV (R1),U.LASL(R5) ;NEW FIRST ENTRY# INCB S.STS(R4) ;SET CONTOLER BUSYU& BISB #US.BSY,U.STS(R5) ;SET UNIT BUSY2 MOV R1,S.PKT(R4) ;SET CURRENT I/O PACKET ADDRESS0 MOVB S.CON(R4),R3 ;MOVE CONTROLLER INDEX TO R3 .IF DF M$$PRO0 CALL $CFORK ;WE MUST RUN ON CORRECT PROCESSOR .ENDC! BR 210$ ;GIVE REQUEST TO LPA11B;)?; TRY AND RETREIVE AN I/O PACKET FROM THE CONTROLLERS I/O QUEUEI;J;1200$: CALL $GTPKT BCS 14$6210$: MOV R5,UCBSV(R3) ;SAVE UCB PTR. FOR INT ROUTINE9 BICB #US.MDM,U.STS(R5) ;CLEAR ABORT CUR00~on4nblRENT REQUEST FLAG.2 CMP #IO.LOD,I.FCN(R1) ;A LOAD MICROCODE FUNCTION? BNE 220$ 3 MOVB S.ITM(R4),S.CTM(R4) ;SET DEVICE TIMEOUT COUNTE BR 12$ 220$:4 .IF DF M$$EXT' CMP #IO.INI,I.FCN(R1) ;INITIALIZE RDA?L BNE 222$ ;NO, BRANCHN2 MOV #139.*2,U.CNT(R5) ;LENGTH OF RDA TO BE MAPPED8 MOV I.PRM+6(R1),U.BUF+2(R5) ;LOW 16 BITS OF RDA ADDRESS: MOVB I.PRM+10(R1),U.BUF+1(R5) ;HIGH 6 BITS OF RDA ADDRESS CALL MAP ;GO MAP UMR'S)? MOV M.UMVL(R3),I.PRM+6(R1) ;LOW 16 BITS OF UMR VIRTUAL ADDRESSA< MOVB M.UMVH(R3),I.PRM+10(R1) ;HIGH 2 BITS (IN BITS 4 AND 5)+ ASR I.PRM+10(R1) ;MOVE THOSE ADDRESS BITS,$ ASR I.PRM+10(R1) ; TO BITS 2 AND 3 BR 250$0222$: CMP #IO.STA,I.FCN(R1) ;START I/O FUNCTION? BNE 250$ ;NO, BRANCH % TST I.PRM+16(R1) ;ANY UMR'S MAPPED?;0 BNE 250$ ;YES, START CONVERTED TO STOP PACKET3 MOV I.PRM+2(R1),U.CNT(R5) ;LENGTH OF MAPPED REGION)% MOV I.PRM+6(R1),R2 ;GET RDA ADDRESSS' MOV 4(R2),U.BUF+2(R5) ;USW LOW 16 BITS(( MOVB 6(R2),U.BUF+1(R5) ;USW HIGH 2 BITS CALL MAP ;GO MAP UMR'S) MOV R5,-(SP) ;SAVE UCB POINTER! ADD #4,R2 ;POINT TO USW IN RDAE. MOV M.UMVL(R3),(R2)+ ;POINT LPA TO MAPPED USW) MOVB M.UMVH(R3),R5 ;GET USW HIGH 2 BITS." BIC #^C<377>,R5 ;CLEAR HIGH BYTE ASRB R5 ;MOVE TO BITS 0 AND 1 ASRB R5 ASRB R5 ASRB R5 MOVB R5,(R2)+ ;STORE INTO RDAS& MOVB (R2)+,R0 ;GET VALID BUFFER MASK" BIC #^C<7>,R0 ;ISOLATE MASK BITS9225$: ADD M.UMVL(R3),(R2)+ ;ADD UMR BASE ADDRESS LOW BITSO" ADC (R2) ;DONT FORGET THE CARRY. ADD R5,(R2)+ ;ADD UMR BASE ADDRESS HI 2 BITS DEC R0P BGE 225$ ;BRANCH IF NOT DONE ) MOV I.PRM+6(R1),R2 ;GET THE RDA ADDRESS # ADD #50,R2 ;INDEX TO RCL ADDRESSH4 ADD M.UMVL(R3),(R2)+ ;ADD UMR BASE ADDRESS LOW BITS" ADC (R2) ;DONT FORGET THE CARRY! ADD R5,(R2) ;ADD THE HIGH BITSR# MOV (SP)+,R5 ;RESTORE UCB POINTER250$:R .ENDC3 MOVB S.ITM(R4),S.CTM(R4) ;SET DEVICE TIMEOUT COUNTI* MOV S.CSR(R4),R0 ;GET DEVICE CSR ADDRESS7 MOV I.PRM+6(R1),4(R0) ;SET LOW 16 BITS OF RDA ADDRESSA4 BIC #14,(R0) ;CLEAR PREVIOUS EXTENDED ADDRESS BITS MOV I.PRM+10(R1),R2 INC R2 ;SET GO BITP BIS R2,(R0) ;GIVE TO LPAR 12$: RETURN0; &; THERE IS NOTHING TO DO FOR THIS UNIT>; CHECK TO SEE IF ANY DYNAMIC STOREAGE NEEDS TO BE DEALLOCATED;E+14$: TST (R4) ;BECAUSE I/O LIST IS EMPTY? BNE 12$ ;NO, JUST EXIT +16$: MOV U.LADS(R5),R0 ;ANY DSR ALLOCATED?. BEQ 12$ ;NO, EXIT@ MOV (R0),U.LADS(R5) ;YES, REMOVE THIS PACKET AND POINT TO NEXT% MOV #30.*2,R1 ;DEALLOCATE 30. WORDS ! CALL $DEACB ;DEALLOCATE BUFFERV" BR 16$ ;CONTINUE TILL NONE LEFT .PAGE;2=; THIS SUBROUTINE SETS UP THE UNIBUS MAPPING REGISTERS NEEDEDT6; TO MAP THIS USER'S REQUEST WITH THE FOLLOWING STEPS:;O9; - GET A WORK BLOCK FROM POOL TO USE AS A MAPPING BLOCK4:; - SET UP THE MAPPING BLOCK BY REQUESTING UMRS FROM EXEC4; - MAKE SURE WE ARE UNDER THE SYSGEN DEFINED LIMIT; - LOAD THE UMRS;T;M .IF DF M$$EXT4MAP: MOV (SP),-(SP) ;RESERVE A WORD AT TOP OF STACK# MOV R1,-(SP) ;SAVE PACKET POINTER  MOV R2,-(SP) ;SAVE R2E MOV R5,-(SP) ;SAVE UCB POINTER MOV #20.,R1 ;GET 10. WORDST CALL $ALOCB ; FROM POOLG BCC 10$ ;BRANCH IF SUCCESSFUL& MOV #IE.NOD&377,-(SP) ;SET ERROR CODE BR 15$-&10$: MOV 4(SP),R3 ;GET PACKET POINTER0 MOV R0,I.PRM+4(R3) ;STORE POINTER TO NEW BLOCK MOV (SP),R5 ;GET UCB POINTERK# MOV U.SCB(R5),R4 ;GET SCB POINTERD) CLR (R0) ;INITIALIZE CONTEXT SAVE WORD CALL $STMP1 ;SET UP THE UMR'S6 MOV (SP)+,10(SP) ;MOVE DQUMR POINTER TO TOP OF STACK( TST -10(R0) ;WERE WE BLOCKED BY EXEC? BNE 12$ ;YES, REPORT IT* MOV M.UMRN(R0),R3 ;GET NUMBER OF UMR'S*4 ASR R3 ;GET NUMBER OF UMR'S ASR R3 4 SUB R3,U.LAUB+2(R5) ;SUBTRACT FROM TOTAL AVAILABLE BGE 20$ ;BRANCH IF ALL THEREA* ADD R3,U.LAUB+2(R5) ;RESTORE TOTAL VALUE& MOV #IE.DUN&377,-(SP) ;SET ERROR CODE BR 13$E812$: MOV #IE.BLK&377,-(SP) ;EXEC BLOCKED DRIVER FOR UMRS,13$: MOV R0,R2 ;COPY MAPPING BLOCK POINTER$ CALL $DEUMR ;DEALLOCATE THE UMR'S+ SUB #10,R0 ;POINT TO START OF WORK BLOCK) MOV #20.,R1 ;10. WORD00~oomkTADATADATADATADATADATAS LONG$ CALL $DEACB ;RETURN BLOCK TO POOL"15$: MOV (SP)+,R0 ;POP ERROR CODE# MOV (SP)+,R5 ;RESTORE UCB POINTER' MOV U.SCB(R5),R4 ;RESTORE SCB POINTERL MOV (SP)+,R2 ;RESTORE R26 MOV (SP)+,2(SP) ;MOV PACKET POINTER OVER RETURN ADDR TST (SP)+ ;CLEAN STACK)- CLR S.PKT(R4) ;CLEAR CURRENT PACKET POINTER7* CLRB S.STS(R4) ;MARK CONTROLLER NOT BUSY+ BICB #US.BSY,U.STS(R5) ;MARK UNIT NOT BUSY JMP ERORE/20$: MOV R0,R3 ;COPY POINTER TO MAPPING BLOCKF MOV (SP)+,R5 ;GET UCB POINTER # MOV U.SCB(R5),R4 ;GET SCB POINTERO CALL $MPUB1 ;LOAD THE UMR'S MOV (SP)+,R2 ;RESTORE R2* MOV (SP)+,R1 ;RESTORE THE PACKET POINTER" MOV #1,I.PRM+16(R1) ;MARK MAPPED RETURNR .ENDC .PAGE! .SBTTL DEVICE INITIALIZE REQUESTR;D;=; ***** PROCESS AN INITIALIZE REQUEST FOR LPA11 *************E;O/; FUNCTION DEPENDENT I/O REQUEST PACKET FORMAT:Y;B<; WD. 12 -- VIRTUAL ADDRESS OF RDA BUFFER FOR INITIALIZATION2; WD. 13 -- LENGTH IN BYTES OF THE INIT RDA BUFFER; WD. 14 -- NOT USED2; WD. 15 -- LOW ORDER 16 BITS OF PHYSICAL RDA ADDRC; WD. 16 -- HIGH ORDER 2 BITS OF PHYSICAL RDA ADDR-BIT POS. 3 AND 2E; WD. 17 -- NOT USED; WD. 20 -- NOT USED; '; RDA FORMAT FOR INITIALIZATION COMMAND;B8; WD. 00 -- MODE WORD-CONTAINS MICROCODE VERSION NO. AND; INITIALIZE CODE (000)*3; WD. 01 THRU 12 -- DEVICE ADDRESSES ON THE I/O BUSC; :; REMAINDER OF BUFFER IS THE DEDICATED MODE DISPATCH TABLE;; WHICH IS A TABLE OF CONSTANTS REQUIRED FOR DEDICATED MODEU); PROCESS AN INITIALIZE REQUEST FOR LPA11 ;ELAINIT: : CMP I.PRM+2(R1),#139.*2 ;MUST SPECIFY AT LEAST 139. WORDS BHIS 10$R# JMP ELASPC ;ERROR, RDA TOO SHORTS;); INITIALIZING TASK MUST BE PRIVILEGED!!!I;I110$: MOV I.TCB(R1),R0 ;GET TCB OF REQUESTOR TASKI( BIT #T3.PRV,T.ST3(R0) ;TASK PRIVILEGED? BNE 15$ JMP ELAPRI ;NO, ERROR&15$: MOV I.PRM(R1),R0 ;ADDRESS OF RDA  .IF DF A$$CHK!M$$MGET D- MOV #139.*2,R1 ;LENGTH OF INIT RDA IN BYTESE' CALL $ACHCK ;CALL ADDR CHECK ROUTINEU BCC 20$ JMP ELASPC ;ERROR RETURNED120$: ;REF LABLEI .IF DF R$$MPL;TH; THIS IS HERE BECAUSE IO.INI IS MARKED AS A CONTROL FUNCTION IN THE DCBE; EVEN THOUGH IT IS REALLY A TRANSFER FUNCTION. THAT WAS DONE TO GETB&; THE RDA ADDRESS IN THE CORRECT FORM.H; M DOESNT NEED THIS BECAUSE A TASK IS NOT CHECKPOINTABLE OR SHUFFLEABLE'; IF T.IOC <> 0, AND COMMONS DONT MOVE.;4 MOV W.BATT(R2),R2 ;POINT TO ATTACHMENT DESC OF BUF% INCB A.IOC(R2) ;INCREMENT I/O COUNTA& MOV (SP),R3 ;POINT R3 TO I/O PACKET2 MOV R2,I.AADA(R3) ;STORE ATT DESC ADDR SO $IOFIN" ;WILL DECREMENT THE I/O COUNT .ENDC ;R$$MPL .ENDC ;A$$CHK!M$$MGEO N5 CALL CVTP ;CONVERT RDA ADDRESS TO PHYSICAL ADDRESSN& MOV (SP),R3 ;POINT R3 TO I/O PACKETE MOV R1,I.PRM+6(R3) ;SAVE LOW ORDER 16 BITS OF PHYSICAL RDA ADDRESSE .IF DF M$$EXT) ASR R2 ;RIGHT JUSTIFY THE ADDRESS BITSO ASR R2 .ENDC, MOV R2,I.PRM+10(R3) ;AND HIGH ORDER 2 BITS) JMP QUEPKT ;INSERT PACKET IN I/O QUEUEP .PAGE .SBTTL PROCESS CLOCK START RDA.;A;);S;; ***** PROCESS LPA11-K REAL TIME CLOCK START RDA *********U;/; FUNCTION DEPENDENT I/O REQUEST PACKET FORMAT:;L!; WD. 12 -- CLOCK START MODE WORDY9; CONTAINS CLO CK ID (A OR B) AND CLO CK START CODEV; WD. 13 -- CLOCK STATUS WORDR; WD. 14 -- CLOCK PRESET WORDS,; WD. 15 -- LOW ORDER 16 BITS OF RDA ADDRESSC; WD. 16 -- HIGH ORDER 2 BITS-ALWAYS ZERO FOR THIS FUNCTION BECAUSED:; THE RDA IS IN THE I/O PACKET ITSELF WHICH RESIDES IN ; KERNEL ADDRESS SPACE ; WD. 17 -- NOT USED; WD. 20 -- NOT USED;P;-C; RDA FOR CLOCK START COMMAND IS 1ST 3 PARAMETER WORDS IN IO PACKETR;ELACLOK: 1 MOV I.PRM(R1),R0 ; INSURE THIS IS A CLOCK START ' BIC #^C<7>,R0 ;ISOLATE LOW THREE BITSC1 DEC R0 ;IF A CLOCK START,SHOULD GO FROM 1 TO 0D! BEQ 5$ ;YES, LEGAL CLOCK START5' JMP ELABAD ;NO, BAD PARAMETERS ERRORD:5$: MOV R1,I.PRM+6(R1) ;MAKE I/O PACKET A CLOCK START RDA0 ADD #I.PRM,I.PRM+6(R1) ;POINT RDA ADDRESS TO IT3 CLR I.PRM+10(R1) ;KERNAL MODE IS PHYSICAL ADDRESS- JMP Q00~on4nblUEPKT ; ;-;O .PAGE .SBTTL LOAD MICRO CODE ; 5; ******* FUNCTION TO LOAD MICRO CODE ***************L7; ALSO DOES A HARDWARE INITIALIZE AND START UP OF LPA11;C/; FUNCTION DEPENDENT I/O REQUEST PACKET FORMAT:I; "; WD. 12 -- 16 BIT RELOCATION BIAS; WD. 13 -- OFFSET); WD. 14 -- LENGTH IN BYTES OF MICRO-CODEM; WD. 15 -- NOT USED; WD. 16 -- NOT USED; WD. 17 -- NOT USED; WD. 20 -- NOT USED;+4; ***** THERE IS NO RDA FOR THE LOAD COMMAND *******;LLALOAD:PD CMP I.PRM+4(R1),#1024.*2 ;MUST LOAD EXACTLY 1024 MICRO INSTRUCTIONS" BEQ 5$ ;PROPER NUMBER, CONITNUE: JMP ELASPC ;ERROR - INCORRECT NUMBER OF BYTES IN BUFFER;Z#; LOADING TASK MUST BE PRIVILEGED!!I;D85$: MOV I.TCB(R1),R2 ;ISSUEING TASK MUST BE PRIVILEGED!( BIT #T3.PRV,T.ST3(R2) ;TASK PRIVILEGED? BNE 10$ ;YES, CONTINUEF JMP ELAPRI ;NO, ERROR; /; CHECK TO MAKE SURE THERE ARE NOT ACTIVE USERS8; WE DON'T WANT TO DO A HARDWARE RESET FOR THE POOR GUY!;D#10$: TST S.PKT(R4) ;ANYONE ACTIVE?I BEQ 15$ ;NO, OKAY SO FARD12$: JMP ELARSU ;YES, ERRORS015$: MOV #U.LAUT,R0 ;POINT TO ACTIVE USER TABLE ADD R5,R0 ;IN UCB MOV #8.,R2S20$: TST (R0)+ ;A USER HERE?& BNE 12$ ;YES, RESOURCE IN USE ERROR DEC R2 ;END OF LIST?S BGT 20$ ;NO CONTINUE3;V; HARDWARE RESET LPA11-K; .IF DF M$$PRO! CALL $CFORK ;CORRECT PROCESSOR .ENDC, MTPS S.PRI(R4) ;;;GO TO PRIORITY OF DEVICE MOV #40000,@S.CSR(R4) ;;;RESETT MTPS #0 ;;;RESET PRIORITY;S?; GET 1024 WORDS FROM USER BUFFER AND LOAD INTO MICRO PROCESSORP"; CHECK EACH WORD LOADED TO VERIFY;T% CLR R0 ;R0 IS ADDRESS TO LOAD INTOR* MOV S.CSR(R4),R1 ;POINT R1 TO DEVICE CSR-22$: CALL $GTWRD ;GET WORD FROM USER BUFFERU CLR (R1) ;CLEAR CSR MOV R0,4(R1) ;SET CRAM ADDRESS MOV (SP),6(R1) ;CRAM CONTENTS MOV #2000,(R1) ;SELECT ADDRESS BIS #20000,(R1) ;WRITE CRAMC CLR (R1) ;RESET;;(; NOW VERIFY THAT IT IS THERE FOR GRINNS;R MOV R0,4(R1) ;CRAM ADDRESS( MOV #2000,(R1) ;SELECT CRAM AT ADDRESS CMP (SP)+,6(R1) ;DATA EQUALR BEQ 26$ ; YES,OKH, JMP ELABCC ;NO, LOAD ERROR FOR MICRO-CODE26$: INC R0 ;NEXT WORD CMP R0,#1024. ;END OF WCS? BLT 22$ ;NOT YETG2 MOV #104000,(R1) ;SET RUN AND ENABLE ARBITRATION .REPT 5% NOP ;WAIT FOR THINGS TO GET GOINGP .ENDR3 BIS #100,(R1)+ ;SET INTERRUPT ENABLE FOR READY INB3 BIS #100,(R1) ;SET INTERRUPT ENABLE FOR READY OUT JMP QUEPKTT; ;I .PAGE! .SBTTL STOP LPA11 ACTIVE REQUESTM;D7; ****** ISSUE A STOP RDA COMMAND TO LPA11-K **********+;R.; FUNCTION DEPENDENT I/O REQUEST PACKET FORMAT; ; WD. 12 -- USER INDEX TO STOP; WORDS 13 THRU 20 NOT USEDC;R?; THE STOP QIO MUST CONTAIN A LUN (POINT TO CORRECT CONTROLLER);=; ROUTINE USES TCB ADDRESS TO ESTABLISH UNIQUENESS OF REQUESTN ; TO STOP. N;F; ******** NOTE !!! THIS STOP PACKET IS IMMEDIATELY DEALLOCATED. THEE; ORIGINAL START PACKET WAS CONVERTED INTO A STOP PACKET IN THE READYEE; OUT INT. ROUTINE, AFTER THE START REQUEST WAS ACCEPTED. IT IS THATM/; PACKET THAT GETS QUEUED FOR THE STOP REQUEST.E;I;RLASTOP:C/ MOV I.PRM(R1),R0 ;PARAM IS USER INDEX TO STOP & BIC #^C<7>,R0 ;INSURE INDEX FROM 0-7! ASL R0 ;MAKE INTO A WORD INDEX ADD R5,R0 ;POINT TO UCB+INDEX, MOV U.LAUT(R0),R1 ;GET PACKET PTR OF START BEQ 40$ ;USER NOT ACTIVE*& MOV (SP),R3 ;GET PACKET PTR OF STOP;E7 CMP I.TCB(R3),I.TCB(R1) ;STOP TASK SAME AS START TASK?E BNE 40$ ;NO, NOT THIS USERD= CLR U.LAUT(R0) ;CLEAR TABLE ENTRY SO WE WON'T BE HERE AGAINI ;THIS USER MATCHES!!!!S;E:; INSERT THE STOP PACKET INTO THE STOP QUEUE FOR THE LPA11E; A SEPARATE I/O QUEUE IS MAINTAINED BY THE DRIVER FOR STOP FUNCTIONS0;E MOV U.LASL(R5),(R1) ;INSERT NEXT ENTRY POINTER INTO CURRENT POINTERM3 MOV R1,U.LASL(R5) ;POINT STOP QUEUE TO THIS ENTRY ;S$ CLR R0 ;STATUS IS REQEUST PENDING,36$: MOV (SP)+,R3 ;ADDRESS OF "STOP" PACKET CLR R1 ;IOSB(2) IS ZERO. CALL $IOFIN ;DEALLOCATE STOP COMMAND PACKET' JMP GETPKT ;LOOK FOR SOMETHING TO DOH; !40$: MOV #1,R0 ;USER NOT ACTIVES BR 36$N00~oomkTADATADATADATADATADATA;T;S .PAGE+ .SBTTL PROCESS START DATA TRANSFER REQUESTA;E6; ***** PROCESS START DATA TRANSFER RDA **************;C; ADDRESS CHECKING AND RELOCATION OF USER DATA BUFFERS IS DONE HEREN$; (BEFORE THE I/O PACKET IS QUEUED);U/; FUNCTION DEPENDENT I/O REQUEST PACKET FORMAT:T;N7; WD. 12 -- RELOCATION BIAS OF ADDR OF INPUT RDA BUFFERR$; WD. 13 -- INPUT RDA ADDRESS OFFSET(; WD. 14 -- LENGTH OF INPUT RDA IN BYTES5; WD. 15 -- LOW ORDER 16 BITS OF PHYSICAL RDA ADDRESSS=; WD. 16 -- HIGH ORDER 2 BITS - ALWAYS ZERO FOR THIS FUNCTIONR1; BECAUSE THE "REAL" RDA BUFFER IS DYNAMICALLY 5; ALLOCATED IN SYSTEM DYNAMIC MEMORY IE. IN KERNELG; ADDRESS SPACE.E; WD. 17 -- EVENT FLAG MASK; WD. 20 -- EVENT FLAG ADDRESS ; WD. 21 -- RESERVED FOR RSX-11M;Q; ***** NOTE !!!<; ONCE THE 1ST TWO I.PRM WORDS HAVE BEEN MOVED FROM THE I/O <; PACKET TO THE UCB (FOR USE BY $GTWRD), THESE LOCATIONS ARE=; NO LONGER NEEDED FOR THE INPUT RDA ADDRESS AND ARE FREE FOR C; OTHER USEFUL DATA. THIS ROUTINE STORES THE FOLLOWING INFORMATIONN; IN THESE TWO WORDS:E;E%; WD. 12 -- I.PRM+0-BUFFER WORD COUNTLC; WD. 13 -- I.PRM+2-#WORDS TO BE MAPPED BY UMR'S (22-BIT MODE ONLY);D?; THE READY OUT ROUTINE STORES THE FOLLOWING INFORMATION IN THE1; SECOND OF THESE TWO WORDS:;*); WD. 13 -- I.PRM+2 - THE STOP RDA ITSELFS;VB; WHEN THE UMR'S HAVE TO BE MAPPED IN GETPKT, A BLOCK IS ALLOCATED?; FROM POOL. THE ADDRESS OF THAT BLOCK IS STORED HERE FOR LATERS/; DEALLOCATION FOLLOWING A READY-OUT INTERRUPT:U;E%; WD. 14 -- I.PRM+4-UMR MAPPING BLOCKN;ED; NOTE THAT THE ORIGINAL DATA FROM THESE LOCATIONS HAS BEEN SAVED IN;; THE UCB ENTRY POINT TO THE DRIVER (NEAR LABEL 2$) AT THED;; THE UCB AT THE ENTRY POINT TO THE DRIVER (NEAR LABEL 2$). ;1(; NOTE FOR MACRO PROGRAMMERS USING QIOS:;-L; THE FOLLOWING RDA IS NOT THE SAME STRUCTURE AS THE IBUF ARRAY. THE RDA ISO; A DESCRIPTOR ARRAY PASSED TO THE LPA BY A QIO TO INITIATE A DATA SWEEP. IBUF O; IS SET UP BY THE SUPPORT ROUTINES TO HOLD PARAMETERS AND STRUCTURES NECESSARYRN; TO CONTROL A SWEEP. THESE INCLUDE BUFFER ADDRESSES, USER AND DEVICE QUEUES,P; FLAG WORDS, USER ID, ETC. IT ALSO INCLUDES THE USW AND THE IOSB. THE SUPPORTQ; ROUTINES CREATE AN RDA USING THE INFORMATION IN IBUF AND PASS THE RDA TO LADRV.O; Q; THIS DRIVER WAS WRITTEN IN CONJUNCTION WITH THE SUPPORT ROUTINES AND IT EXPECTSAA; A CERTAIN STRUCTURE IN IBUF. THERE ARE ONLY THREE CONSTRAINTS:I;I*; 1 - THE IBUF ARRAY MUST BE 80 BYTES LONG1; 2 - THE USW MUST BE THE THIRD WORD OF THE ARRAY P; 3 - THE IOSB PASSED TO THE DRIVER MUST NOT BE THE FIRST TWO WORDS OF THE ARRAY;EO; CONSTRAINT 3 EXISTS BECAUSE THE DRIVER EXPECTS TWO CONSECUTIVE 2-WORD IOSB'S PM; STARTING AT THE ADDRESS THAT IS PASSED IN THE I/O PACKET. IF THE FIRST TWOOH; WORDS WERE SPECIFIED AS THE IOSB, THE DRIVER WOULD OVERWRITE THE USW. M; THE SUPPORT ROUTINES USE THE FIRST TWO WORDS OF THE ARRAY AS A USER IOSB. NR; THEY HAVE THE DOUBLE IOSB USED BY THE DRIVER LOCATED HIGHER IN THE IBUF ARRAY. J; THEY COMMUNICATE WITH THE DRIVER USING THE DOUBLE IOSB, AND BEFORE THEY G; RETURN FROM A CALL THEY MOVE THE APPROPRIATE DATA TO THE USER IOSB. R&; THUS THE REQUIRED FORMAT OF IBUF IS:;P"; WORD 00 - UNDEFINED (NOT IOSB)"; WORD 01 - UNDEFINED (NOT IOSB); WORD 02 - USW; WORDS 03-47 - UNDEFINED ; Q; WITHIN THESE CONSTRAINTS MACRO PROGRAMMERS MAY SET UP IBUF IN ANY WAY THEY WISH ; @; THE RDA BUFFER AS SET UP BY THE CALLING ROUTINE IS AS FOLLOWS:;V; WORD 00 - LPA-11 MODE WORD2; WORD 01 - NUMBER OF WORDS TO TRANSFER PER BUFFER(; WORD 02 - ADDRESSS OF USER STATUS WORD-; WORD 03 - LOW BYTE ONLY - VALID BUFFER MASKT; WORD 04 - BUFFER 0 ADDRESS; WORD 05 - BUFFER 1 ADDRESS; WORD 06 - BUFFER 2 ADDRESS; WORD 07 - BUFFER 3 ADDRESS; WORD 10 - BUFFER 4 ADDRESS; WORD 11 - BUFFER 5 ADDRESS; WORD 12 - BUFFER 6 ADDRESS; WORD 13 - BUFFER 7 ADDRESS*; WORD 14 - ADDRESS OF RANDOM CHANNEL LIST; WORD 15 - DELAY WORD?; WORD 16 - CHANNEL INCR (HIGH BYTE) / START CHANNEL (LOW BYTE) 5; WORD 17 - NUMBER O00~on4nblF CHANNELS TO SAMPLE IN SEQUENCE D@; WORD 20 - NUMBER OF CLOCK OVERFLOWS BETWEEN STARTS OF SEQUENCE0; WORD 21 - EVENT MARK WORD / DIGITAL START WORD; WORD 22 - START WORD MASK ; WORD 23 - EVENT MARK MASK 5; WORD 24 - NUMBER OF ELEMENTS IN RANDOM CHANNEL LISTS; ?; THIS ROUTINE CONVERTS THIS INPUT FORMAT RDA INTO THE REAL RDA1=; WHICH IS USED BY THE LPA-11. THIS ROUTINE DOES THE ADDRESST<; CHECKING AND RELOCATION OF USER BUFFERS CONVERTING THEM TO<; 2 WORD PHYSICAL ADDRESSES. IT DOES THE SAME FOR THE RANDOMA; CHANNEL LIST AND USER STATUS WORD. THE FINAL RDA IS CREATED INE>; TASK DYNAMIC MEMORY AND POINTED TO BY WORDS 15 AND 16 IN THE ; I/O PACKET.2; LASTRT:D* MOV #30.*2,R1 ;ALLOCATE DYNAMIC STOREAGE CALL $ALOCB BCC 42$ ;GOT ONEC JMP ELANOD;4; LINK THIS PACKET INTO THE LIST OF DSR FOR THE UNIT;A;42$: MOV U.LADS(R5),(R0) ;POINT THIS PACKET TO NEXT PACKET . MOV R0,U.LADS(R5) ;POINT LIST TO THIS PACKET/ TST (R0)+ ;POINT R0 TO SECOND WORD OF PACKETE;I& MOV (SP),R2 ;GET I/O PACKET ADDRESS- MOV R0,I.PRM+6(R2) ;SAVE ADDRESS OF NEW RDAC, CLR I.PRM+10(R2) ;EXTENDED ADDRESS IS ZERO% MOV R0,R3 ;COPY ADDRESS OF NEW RDAK CALL $GTWRD ;MODE MOV (SP)+,(R3)L/ BIC #7,(R3) ;MAKE SURE THIS IS A "START" RDA; BIS #2,(R3)+E CALL $GTWRD ;TRANSFER COUNT0 MOV (SP),(R3)+ ;LEAVE COUNT ON STACK FOR LATER/ BLE 62$ ;ERROR, TRANSFER COUNT MUST BE 1-32K* MOV (SP),I.PRM(R2) ;SAVE BUFF WORD COUNT+ ASL (SP) ;MAKE TRANSFER COUNT BYTE VALUEP( CALL $GTWRD ;USER STATUS WORD ADDRESS D .IF DF A$$CHK!M$$MGE2 ;/ MOV #120,R1 ;ADDRESS CHECK ENTIRE IBUF ARRAYE MOV (SP),R0 ;GET USW ADDRESS - SUB #4,R0 ;PT TO START OF IBUF(=IOSB ADDR)E CALL $ACHCK( BCS 60$ ;ADDRESS CHECK ERROR IF C SET A .ENDC B# MOV (SP),R0 ;RESTORE USW ADDRESSR CALL CVTP ;RLOCATE USWE$ MOV R1,(R3)+ ;SAVE USW ADDRESS LOW ASR R2, ASR R2 & MOVB R2,(R3)+ ;SAVE USW ADDRESS HIGH .IF DF M$$EXT/ MOV #76.,R4 ;OFFSET FROM USW TO FIRST BUFFERP .ENDC* MOV #8.,-(SP) ;COUNTER FOR EIGHT BUFFERS! CALL $GTWRD ;NUMBER OF BUFFERS; MOVB (SP),(R3)+ ;SAVE IN RDA4 BIC #^C<7>,(SP) ;AND OUT ALL BUT NUMBER OF BUFFERS# CLR -(SP) ;HIGH 2 BITS OF OFFSETA"44$: CALL $GTWRD ;BUFFER ADDRESS MOV (SP),R0 . .IF DF A$$CHK!M$$MGE  E MOV 12(SP),R1 ;ADDRESS CHECK CALL $ACHCK BCS 154$ ;ADDRESS CHECK ERROR W .ENDC  .IF NDF M$$EXT2% MOV (SP)+,R0 ;GET ADDRESS OF BUFFER CALL CVTP# MOV R1,(R3)+ ;SAVE ADDRESS IN RDAT ASR R2 ASR R2 MOV R2,(R3)+) .IFFR TST (SP)+ ;CLEAN STACKW2 MOV R4,(R3)+ ;SET BUFFER ADDR AS OFFSET FROM USW! MOV (SP),(R3)+ ;SET HIGH 2 BITSL& ADD 10(SP),R4 ;SPAN PAST THIS BUFFER" ADC (SP) ;DONT FORGET THE CARRY .ENDC& DEC 4(SP) ;COUNT DOWN TOTAL BUFFERS' DEC 2(SP) ;COUNT DOWN BUFFERS TO USEC BGE 44$ ;LOOP TIL DONE4) MOV (SP)+,R2 ;GET HIGH 2 BITS OF OFFSET.) TST (SP)+ ;CLEAN BUFFER TO USE COUNTERS'46$: DEC (SP) ;ANY BUFFERS NOT IN USE; BLT 50$ ;NO, ALL DONE$ CALL $GTWRD ;FETCH WORD FROM USER TST (SP)+ ;IGNORE CLR (R3)+ ;CLEAR NEW RDAE CLR (R3)+ BR 46$ ;AND LOOP/50$: MOV R2,(SP) ;CLEAR STACK OF BUFFER COUNT4/ CALL $GTWRD ;GET RANDOM CHANNEL LIST ADDRESST MOV (SP)+,R0. C .IF DF A$$CHK!M$$MGE  N* BEQ 52$ ;RCL NOT IN USE IF ADDRESS ZERO& MOV #2,R1 ;ADDRESS CHECK FIRST WORD CALL $ACHCK BCS 57$ ;ERROR, BAD BUFFER52$: + .ENDC U .IF NDF M$$EXTE CALL CVTP ;RELOCATE MOV R1,(R3)+ ;SAVE IN RDA  ASR R2  ASR R2L% MOV R2,(R3)+ ;SAVE HIGHT ORDER BITS(* TST (SP)+ ;CLEAN HIGH 2 BITS FROM STACK .IFF3 MOV R4,(R3)+ ;OFFSET FROM USWR& MOV (SP)+,(R3)+ ;SET UMR HIGH 2 BITS .ENDC) MOV #6,-(SP) ;SEVEN MORE ENTRIES IN RDA(54$: CALL $GTWRD MOV (SP)+,(R3)+ DEC (SP) ;END?C BGE 54$ ;NO, LOOP TST (SP)+ .IF DF M$$EXT CALL $GTWRD ;GET RCL LENGTH+ ADD (SP),R4 ;ADD WORD COUNT TWICE TO GETC, ADD (SP)+,R4 ;FINAL LENGTH FOR UMR MAPPING" MOV 4(SP),R3 ;GET PACKET POINTER* MOV R4,I.PRM+2(R3) ;SAVE FOR UMR MAP00~oomkTADATADATADATADATADATAPING6 MOV (SP),R0 ;CHECK THAT REGION STARTING WITH THE USW1 MOV R4,R1 ;AND (R4) BYTES LONG IS WITHIN USER'SV7 CALL $ACHCK ;ADDRESS SPACE. THE USER SHOULD KNOW THAT(6 BCS 60$ ;HIS IBUF,RCL AND BUFFERS MUST BE CONTIGUOUS' MOV U.SCB(R5),R4 ;RESTORE SCB POINTER$ .ENDC, ADD #4,SP ;CLEAR USW AND COUNT FROM STACK" MOV (SP),R3 ;GET PACKET POINTER8 MOVB I.EFN(R3),R0 ;CALCULATE EVENT FLAG MASK FOR LATER MOV R5,-(SP) ;SAVE R5S$ MOV I.TCB(R3),R5 ;TASK TCB ADDRESS. CALL $CEFI ;CONVERT EFN TO MASK AND ADDRESS MOV (SP)+,R5 ;RESTORE R5+ MOV R0,I.PRM+12(R3) ;SAVE EVENT FLAG MASKG- MOV R1,I.PRM+14(R3) ;AND EVENT FLAG ADDRESSE$ JMP QUEPKT ;FINISH IN COMMON CODE;H; ERROR - BAD BUFFER ADDRESS;O154$: TST (SP)+S"55$: TST (SP)+ ;CLEAR FROM STACK"56$: TST (SP)+ ;CLEAR FROM STACK"57$: TST (SP)+ ;CLEAR FROM STACK(60$: TST (SP)+ ; CLEAN STACK SOME MORE%62$: TST (SP)+ ;WHAT A CLEAN STACK!V64$: JMP ELASP2 ; BAD BUFFER;) .PAGE% .SBTTL READY IN INTERRUPT PROCESSINGE;T.; INTERRUPT SUBROUTINE FOR READY IN INTERRUPTS;V; ********************H; LABEL $LAOUT:: IS ADDED TO CONFORM TO RSX-11M SYSGEN NAMING CONVENTIONC; WHICH SPECIFIES THAT FOR DUAL VECTORED DEVICES, THE LOW VECTOR IS5G; NAMED $XXINP AND THE HIGH VECTOR IS NAMED $XXOUT. FOR THE LPA-11 KMCAH; MODULE, THE HIGHEST PRIORTY VECTOR (THE OUTPUT) MUST COME FIRST. THUSH; THE OUTPUT VECTOR IS NAMED $LAINP AND THE INPUT VECTOR IS NAMED $LAOUT; ********************;$LAOUT::; ;ILARDI::P INTSV$ LA,PR5,L$$A11,,! CALL $FORK ;;;GO TO FORK LEVEL;*); FORK PROCESSING FOR READY IN INTERRUPTSE;O1 MOV U.SCB(R5),R4 ;POINT TO STATUS CONTROL BLOCKC. CLRB S.CTM(R4) ;CLEAR DEVICE TIMEOUT COUNTER4 CLRB S.STS(R4) ;CLEAR CONTROLER STATUS TO NOT BUSY/ BICB #US.BSY,U.STS(R5) ;CLEAR UNIT BUSY STATUS % MOV S.PKT(R4),R3 ;REQUEST FINISHED?T BEQ 70$ ;YESS$ MOV #1,R0 ;FINISH IT SUCCESSFULLY CLR S.PKT(R4) ;MARK FREE. BIT #2,I.PRM+16(R3) ;DID WE RUN OUT OF POOL? BEQ 66$ ;NO, BRANCH* BIC #2,I.PRM+16(R3) ;YES, CLEAR THAT BIT0 MOV #IE.NOD&377,R0 ;SET APPROPRIATE ERROR CODE'66$: CLR R1 ;SECOND IOSB WORD IS ZEROO .IF DF M$$EXT CMP #IO.INI,I.FCN(R3) BEQ 68$7 CMP #IO.STA,I.FCN(R3) ;START PACKET CONVERTED TO STOP?  BNE 69$ ;NO, BRANCH$ TST I.PRM+16(R3) ;ANY UMRS MAPPED? BEQ 69$ ;NO, BRANCH"68$: CALL UNMAP ;YES, UNMAP THEM' MOV U.SCB(R5),R4 ;RESTORE SCB POINTERY0 CALL $DQUMR ;WAKE UP PROCESS WAITING FOR UMRS69$: .ENDC) CALL $IOFIN ;END OF REQUEST PROCESSING,-70$: JMP GETPKT ;TRY AND GET ANOTHER PACKETD;7 .PAGE. .SBTTL LPA11-K READY OUT INTERRUPT PROCESSING;B5; INTERRUPT SUBROUTINE FOR LPA11 READY OUT INTERRUPTSR;; ******************H; LABEL $LAINP:: IS ADDED TO CONFORM TO RSX-11M SYSGEN NAMING CONVENTION9; SEE COMMENT AT INPUT INTERRUPT FOR FURTHER EXPLANATION.8; ******************;A$LAINP::;ULARDO::R INTSV$ LA,PR5,L$$A11,,3 MOV #U.LAFB+6,R4 ;;;POINT TO READY OUT FORK BLOCKN ADD R5,R4 ;;;" CALL $FORK1 ;;;GO TO FORK LEVEL;P0; FORK PROCESSING FOR LPA11 READY OUT INTERRUPTS;. MOV U.SCB(R5),R4 ;POINT TO SCB& MOV S.CSR(R4),R2 ;DEVICE CSR ADDRESS% MOV 2(R2),R0 ;LPA11 OUT STATUS WORD*+ MOV 6(R2),R1 ;GET MAINTENANCE STATUS BYTEO1 BIC #200,2(R2) ;ACKNOWLEDGE READY OUT INTERRUPT  MOV R0,R3 ;GET USER INDEX ASL R3 ;MAKE WORD OFFSET* BIC #^C<16>,R3A# ADD R5,R3 ;POINT TO USRTB IN UCBP& BIC #377,R0 ;AND OUT READY OUT BYTE- BEQ 100$ ;EQUAL IS START REQUEST PROCESSED;% BPL 71$ ;POSITIVE IS NORMAL STATUS JMP 102$ ;MINUS IS ERROR1;E.; COMMON CODE FOR REPORTING NORMAL USER STATUS;O71$:1 MOV U.LAUT(R3),R2 ;GET I/O PACKET ADDRESS IN R2R0 MOV I.PRM(R2),R1 ;SET WORD COUNT IN IOSB WD. 2"; IOSB WD. 1 =400 FROM LPA11-K72$: MOV R5,-(SP) ;SAVE UCB" MOV R3,-(SP) ;SAVE USRTB POINTER+ MOV U.LAUT(R3),R3 ;POINT R3 TO I/O PACKETR% BEQ 75$ ;IF NO USER NOW, JUST EXITP0 MOV I.TCB(R3),R2 ;POINT TO REQUESTING TASK TCB+ BIT #T2.ABO,T.ST2(R2) ;TASK BEING ABORTED?7! BNE 75$ ;YES,00~on4nbl SKIP EVENT FLAG J$ MOV I.IOSB+2(R3),R4 ;GET IOSB BIAS& MOV I.IOSB+4(R3),R2 ;GET IOSB OFFSET ADD #4,R2 ;POINT TO 2ND IOSBG& CMP #140100,R2 ;MAPPING STILL VALID? BHI 172$ ;YES, BRANCH* SUB #64.,R2 ;NO, MAP NEXT 32-WORD BLOCK INC R4:172$:R ( .IF DF M$$MGE V MOV KISAR6,-(SP) ;SAVE KISAR6M MOV R4,KISAR6 ;MAP USER'S IOSB C .IFTF 7! MOV R0,(R2)+ ;STORE STATUS BYTEM MOV R1,(R2) ;IOSB HIGH WORD N .IFTT # MOV (SP)+,KISAR6 ;RESTORE MAPPINGO D .ENDC;$5; ***************************************************I; 73$: I .IF DF A$$TRP T;SA; IF BIT 0 OF THE QIO FUNCTION CODE IS SET, DO NOT QUEUE AST HEREN;T3 BIT #1,I.FCN(R3) ;IS SUBFUNCTION CODE BIT 0 SET?;" BNE 74$ ;YES, DO NOT QUEUE AST;7 TST I.AST(R3) ;AST REQUESTED?V BEQ 74$ ;NO* MOV #6.*2,R1 ;YES, ALLOCATE AN AST BLOCK CALL $ALOCB$ BCS 77$ ;ERROR, NO DYNAMIC MEMORY MOV R0,R1 ;COPY BLOCK ADDRESS+ TST (R0)+ ;POINT PAST AST LIST LINK WORD $ MOV #6.*2,(R0)+ ;SIZE OF AST BLOCK> MOV #8.*2,(R0)+ ;NUMBER OF BYTES TO ALLOCATE ON USER'S STACK* MOV I.AST(R3),(R0)+ ;AST VIRTUAL ADDRESS< MOV #1,(R0)+ ;NUMBER OF EXTRA WORDS TO PUT ON USER'S STACK# MOV I.IOSB(R3),(R0) ;IOSB ADDRESS;' ADD #4,(R0) ;POINT TO 2ND IOSB BLOCK' MOV I.TCB(R3),R0 ;POINT TO TASK'S TCB$. ADD #T.ASTL,R0 ;POINT TO TASK'S AST LISTHEAD3 CALL $QINSF ;INSERT AST BLOCK IN TASK'S AST LISTY74$: , .ENDC B% MOV I.TCB(R3),R5 ;POINT TO TASK TCBA( MOV I.PRM+12(R3),R0 ;SET ARGS FOR SETM MOV I.PRM+14(R3),R1 CALL $SETMN;E;F75$: CMP (SP)+,(SP)+ ;CLEAN STACK I;T76$: RETURN ;RETURN;D;S M;#D; WE RAN OUT OF POOL FOR AST BLOCK. QUEUE STOP PACKET FOR THIS USER9; AND SET BIT 2 OF I.PRM+16 TO SET UP PROPER ERROR CODE.L; .IF DF A$$TRP *77$: MOV (SP)+,R3 ;POP USER TABLE POINTER MOV (SP)+,R5 ;POP UCB POINTER 5 MOV U.LAUT(R3),R2 ;GET THIS USER'S CONVERTED PACKET,' CLR U.LAUT(R3) ;DEACTIVATE THIS ENTRYO7 MOV U.LASL(R5),(R2) ;MOVE STOP QUEUE BEHIND THIS USERV) MOV R2,U.LASL(R5) ;SET NEW QUEUE HEADER:/ BIS #2,I.PRM+16(R2) ;MARK FOR 'NO POOL' ERRORT, JMP GETPKT ;TRY TO DEALLOCATE STOP PACKET P .ENDC ;C;Q;E; STATUS RETURN OF ZEROR'; TRANSFER REQUEST SUCCESSFULLY STARTEDP;E100$: 2 MOV S.PKT(R4),R2 ;GET CURRENT I/O PACKET ADDRESS& MOV R2,U.LAUT(R3) ;STORE IT IN USRTB" MOV R3,R1 ;RETURN INDEX TO USER SUB R5,R1 ;GET INDEX BACK ASR R1C* CLR S.PKT(R4) ;RELINQUISH CURRENT PACKET;L@; THE FOLLOWING CODE TURNS THE ORIGONAL START REQUEST I/O PACKET@; INTO A STOP PACKET FOR ITSELF. THIS ALLOWS ANYONE TO STOP THE,; REQUEST BY SIMPLY RE-QUEUEING THIS PACKET.; MOVB R1,I.PRM+3(R2) ;USER I.D. MOVB #3,I.PRM+2(R2) ;STOP!6 MOV R2,I.PRM+6(R2) ;ADDRESS OF STOP RDA WE JUST MADE8 ADD #I.PRM+2,I.PRM+6(R2) ;ADD IN OFFSET TO PROPER PLACE' CLR I.PRM+10(R2) ;CLEAR EXTENDED BITS @; ABOVE 5 INSTR. CREATE 1 WORD STOP RDA WHICH RESIDES IN IPRM+2.; . BITB #US.MDM,U.STS(R5) ;CANCEL I/O REQUESTED? BNE 101$ ;YES, GO CANCELO& CLR R0 ;IOSB WORD 1 ON ACCEPT START; E; TIMEOUT RAISED TO 255 SEC. IN CASE USER SPECIFIED AN EXTREMELY SLOW F; CLOCK RATE AND IS USING DEDICATED MODE. AFTER THE LPA GETS THE FIRSTD; 256 WORDS OF DATA, IT WILL ISSUE A READY-IN. THE DRIVER WILL CLEARG; THE TIMEOUT THERE. IF THE LPA WILL BE WAITING LONGER THAN 255 SECONDSPB; BEFORE IT CAN ISSUE A READY-IN (DATA SWEEP DELAYED FOR HOURS FOR>; INSTANCE) THIS TIMEOUT CAN BE DISABLED HERE (AND ONLY HERE).; C; ANY READY-IN WILL CLEAR THE TIMEOUT. THUS, IF THE DRIVER RECEIVESOB; ANOTHER REQUEST SUCH AS A CLOCK QIO, THE TIMEOUT LENGTHENED HEREB; WILL BE NULLIFIED WHEN THE LPA ISSUES THE READY-IN FOLLOWING THE; CLOCK REQUEST.;F1 MOVB #255.,S.CTM(R4) ;STRETCH TIMEOUT COUNT NOW. JMP 72$ ;NO, CONTINUE; I; US.MDM FLAGS THAT A CANCEL I/O OCCURED FOR TASK WHILE START REQUEST WASEG; IN PROGRESS. IMMEDIATELY QUEUE A STOP FOR THIS USER INTO THE DRIVERSH; STOP REQUEST QUEUE.L;H6101$: MOV U.LAUT(R3),R1 ;POINT TO ORIGINAL I/O PACKET8 CLR U.LAUT(R3) ;FLAG00~pomkTADATADATADATADATADATA THAT THE REQUEST IS BEING STOPPED; MOV U.LASL(R5),(R1) ;INSERT IN DRIVERS STOP REQUEST QUEUEU MOV R1,U.LASL(R5) ;POINT TO IT RETURN ;BACK TO CALLER;E); ERROR REPORTED (STATUS RETURN NEGATIVE) ; DISPATCH ON ERROR BITS; 102$:O MOV R0,R2 ;COPY STATUST. BIC #^C<160000>,R2 ;EXTRACT ERROR TYPE FIELD' CMP R2,#160000 ;FATAL HARDWARE ERROR?U BNE 104$ ;NOI. BISB #IE.FHE&377,R0 ;YES, SET RSX ERROR CODE" CLRB S.CTM(R4) ;NO TIME OUTS NOW# BR LAOUT2 ;REPORT ERROR TO USERS(104$:L CMP R2,#140000 ;START ERROR? BEQ 106$ ;YES4 MOV U.LAUT(R3),R2 ;USER ERROR, GET I/O PACKET PNTR BEQ 76$ ;USER NOT ACTIVE NOWT% CLR U.LAUT(R3) ;DEACTIVATE THE USERO% MOV R2,R3 ;COPY I/O PACKET ADDRESST, CMP #124000,R0 ;RESULT OF USW BIT 14 STOP? BNE 103$ ;NO#5 MOVB #IS.SUC&377,R0 ;YES, SET RSX STATUS AS SUCCESS0 ;SIGN EXTEND 0 TO HIGH BYTE1 MOV I.PRM(R2),R1 ;SET WORD COUNT IS IOSB WORD 2O BR 111$ ;FINISH103$:O0 CMP #121400,R0 ;BUFFER OVERRUN/UNDERRUN ERROR? BNE 110$ ;NOR3 BISB #IE.DAO&377,R0 ;SET RSX OVERRUN ERROR STATUSU BR 111$ ;FINISH106$:I7 MOV S.PKT(R4),R3 ;START ERROR, GET I/O PACKET POINTERL BEQ 76$ ;NO USER HERE NOW% CLR S.PKT(R4) ;CLEAR PACKET POINTERT110$:#. BISB #IE.ABO&377,R0 ;SET RSX STATUS AS ABORT111$:# .IF DF M$$EXT$ TST I.PRM+16(R3) ;ANY UMRS MAPPED? BEQ 113$ ;NO, BRANCHH- CALL UNMAP ;YES, UNMAP AND DEALLOCATE THEM # MOV U.SCB(R5),R4 ;GET SCB POINTER$' CALL $DQUMR ;WAKE UP WAITING PROCESSR .ENDC&113$: CALLR $IOFIN ;FLUSH THE PACKET;T .PAGE+ .SBTTL DEVICE TIME-OUT AND POWERFAIL LOGICI;M'; DEVICE TIME-OUT AND DEVICE POWER FAILC ; RESET LPA11B8; SET I/O COMPLETION FOR ALL USERS WITH STATUS OF IE.PWR;N;T; POWER FAIL ----. ; REQUEST LOADER TASK IF PRESENT;LAPWF: F .IF DF R$$MPL+ BCC 115$ ; IF CC, UNIT POWERFAIL RECOVERYN. RETURN ; IF CS, CONTROLLER RECOVERY, RETURN115$:E .ENDC R .IF DF M$$MGE & L$$DRV & LD$LAD RB MOV S.FRK+8.(R4),U.LAFB+8.(R5) ;INITIALIZES FORK BLOCK IN UCB FOR% ;FORK1 CALL. NEEDED FOR MAPPEDE% ;SYSTEMS WITH LOADABLE DRIVERSE .ENDC U N MOV R5,R3 ;LOADER TASK NAME( ADD #U.CW2,R3 ;IN UCB U.CW2 AND U.CW3* CALL $SRSTD ;IS IT INSTALLED IN SYSTEM?& BCS 112$ ;NO, DON'T LOAD ON STARTUP* MOV #TUIC,R1 ;DEFAULT UIC OF LOADER TASK MOV R4,-(SP) ;SAVE R4 AND R5 MOV R5,-(SP) * CALL $TSKRT ;REQUEST LOADER TASK TO RUN! MOV (SP)+,R5 ;RESTORE R5 AND R4L MOV (SP)+,R4.112$: MOV #IE.VER&377,R0 ;UNRECOVERABLE ERROR( CLRB S.CTM(R4) ;CLEAR TIME OUT COUNTER CLR R1 ;ZERO IOSB+2' BR LAOUT2 ;LET ANY ACTIVE USERS KNOWN;; DEVICE TIME OUT ;OLAOUT: .IF DF M$$PRO! CALL $CFORK ;CORRECT PROCESSORL .ENDC+ MOV 2(R2),R1 ;;;GET LAST READY OUT STATUSD ;;;DATA MAY BE IRRELEVANT CLRB R1 ;;;CLEAR LOW BYTE. BIS R1,R0 ;;;COMBINE LPA STATUS WITH IE.DNR- MOV 6(R2),R1 ;;;GET MAINTENANCE STATUS WORD8LAOUT2: MOVB S.PRI(R4),@#PS ;;;GO TO PRIORITY OF DEVICE8 MOV #40000,@S.CSR(R4) ;;;DO A DEVICE RESET TO MAKE SURE CLRB @#PS ;;;RESET PRIORITY5 CLRB S.STS(R4) ;CLEAR CONTROLLER STATUS TO NOT BUSYO/ BICB #US.BSY,U.STS(R5) ;CLEAR UNIT BUSY STATUS$' BICB #US.MNT,U.STS(R5) ;UNMAPPING FLAGL) MOV S.PKT(R4),R3 ;A REQUEST IN PROCESS?A BEQ 116$ ;NO  .IF DF M$$EXT% TST I.PRM+16(R3) ;ANY UMR'S MAPPED? BEQ 114$ ;NO, BRANCHP# CALL UNMAP ;DEALLOCATE THE UMR'S;. BISB #US.MNT,U.STS(R5) ;MARK UMRS DEALLOCATED114$:@ .ENDC! CALL $IOFIN ;DEALLOCATE PACKET, MOV U.SCB(R5),R4 ;POINT TO SCB- CLR S.PKT(R4) ;CLEAR CURRENT PACKET POINTERR116$: MOV #-7,-(SP)O MOV #U.LAUT,R2O# ADD R5,R2 ;POINT TO USRTB IN UCBC120$: MOV (R2),R3 ;NEXT ENTRY. BEQ 122$ ;NO REQUEST ACTIVE MOV R2,-(SP)R .IF DF M$$EXT% TST I.PRM+16(R3) ;ANY UMR'S MAPPED?E BEQ 121$ ;NO, BRANCH;# CALL UNMAP ;DEALLOCATE THE UMR'SB. BISB #US.MNT,U.STS(R5) ;MARK UMRS DEALLOCATED121$:. .ENDC1 CALL $IOFIN ;REQEUST ACTIVE, TELL HIM ITS OVER MOV (SP)+,R2O122$: CLR (R2)+ ;CLEAR ENTRY& INC (SP00~ pbp4nbl) ;ANY MORE ENTRIES IN LIST? BLE 120$ ;YES, CONTINUE TST (SP)+ ;ALL DONE, EXIT .IF DF M$$EXT; MOV U.LAUB(R5),U.LAUB+2(R5) ;INITIALIZE #OF AVAILABLE UMRSQ/ BITB #US.MNT,U.STS(R5) ;ANY UMR'S DEALLOCATED?F BEQ LACANG ;NO, BRANCH($ CALL $DQUMR ;DEQU WAITING PROCESS3 BICB #US.MNT,U.STS(R5) ;CLEAR UMR DEALLOCATED FLAGB .ENDC BR LACANG;  .PAGE;C#; ********************************* ;E@; THIS SUBROUTINE WILL UNMAP THIS USER'S UMRS AND RETURN THEM TO@; THE LPA POOL. IT WILL DEALLOCATE THE WORK BLOCK TAKEN FROM DSR; IN SUBROUTINE 'MAP'.;+ .IF DF M$$EXT5UNMAP: MOV I.PRM+4(R3),R2 ;GET ADDRESS OF WORK BLOCKT ADD #10,R2 ;POINT TO MAP AREA# MOV R3,-(SP) ;SAVE PACKET POINTERT, MOV M.UMRN(R2),R3 ;GET #OF UMRS TO RECOVER ASR R3W ASR R3O' ADD R3,U.LAUB+2(R5) ;RECOVER THE UMRSD$ CALL $DEUMR ;DEALLOCATE THE UMR'S& MOV (SP),R3 ;RESTORE PACKET POINTER MOV R0,-(SP) ;SAVE IOSBS MOV R1,-(SP) ;SAVE IOSB+2S MOV R5,-(SP) ;SAVE UCB POINTER/ MOV I.PRM+4(R3),R0 ;GET ADDRESS OF WORK BLOCKE' MOV #20.,R1 ;WORK BLOCK IS 10. WORDS.) CALL $DEACB ;RETURN WORK BLOCK TO POOL;# MOV (SP)+,R5 ;RESTORE UCB POINTERR MOV (SP)+,R1 ;RESTORE IOSB+2 MOV (SP)+,R0 ;RESTORE IOSB& MOV (SP)+,R3 ;RESTORE PACKET POINTER! CLR I.PRM+16(R3) ;MARK UNMAPPED. RETURN) .ENDC .PAGE .SBTTL CANCEL I/O ENTRY;E"; CANCEL I/O FOR A PARTICULAR TASK2; ALL REQUESTS ARE SCANNED FOR THE TCB OF THE TASK6; EACH ACTIVE REQUEST FOR THE TASK IS MARKED FOR ABORT:; ACTUAL REQUEST STOP IS ISSUED AT READY IN INTERRUPT TIME; LACAN:2 MOV #U.LAUT,R0 ;;;POINT TO ACTIVE REQUEST TABLES ADD R5,R0 ;;;IN UCB6 MOV #8.,R2 ;;;NINE POSSIBLE ENTRIES + CURRENT ENTRY* MOV S.PKT(R4),R3 ;;;REQUEST IN PROGRESS?$ BEQ 126$ ;;;NO REQUEST IN PROCESS" CMP I.TCB(R3),R1 ;;;TCB'S MATCH?" BNE 126$ ;;;NO, DON'T CANCEL ITD BISB #US.MDM,U.STS(R5) ;;;YES, MARK REQ. FOR ABORT WHEN IT FINISHES(126$: MOV (R0)+,R3 ;;;NEXT USER ACTIVE? BEQ 130$ ;;;NOA' CMP I.TCB(R3),R1 ;;;TASK TCB'S MATCH?S BNE 130$ ;;;NOA;IF; STOP THE REQUEST BY PLACING THE ORIGONAL I/O PACKET INTO THE DRIVERS; STOP I/O QUEUE; 5 MOV U.LASL(R5),(R3) ;;;INSERT NEXT INTO NEW CURRENTR. MOV R3,U.LASL(R5) ;;;INSERT CURRENT AS FIRST;S& CLR -2(R0) ;;;DEALLOCATE USER TABLE130$: DEC R2 ;;;NEXT USER " BGT 126$ ;;;STILL SOME TO CHECK MTPS #0 ;;;RESET PRIORITY2LACANG: JMP GETPKT ;GO TO GET A PACKET IF WE CAN .PAGE .SBTTL MISC SERVICE ROUTINESB;1-; CONVERT VIRTUAL ADDRESS TO PHYSICAL ADDRESSM; ENTRYB; R0 - CONTAINS VIRTUAL ADDRESSR;E; EXIT; R0 - DESTROYED!; R1 - PHYSICAL ADDRESS BITS 0-15P"; R2 - PHYSICAL ADDRESS BITS 16-17; R3, R4, R5 PRESERVED;UCVTP: V .IF DF M$$MGE I" MOV R0,R2 ;COPY VIRTUAL ADDRESS SWAB R2 ;EXTRACT APR NUMBER .REPT 4 ASR R2E .ENDR BIC #^C<16>,R2S1 MOV UISAR0(R2),R2 ;PAGE ADDRESS FIELD FROM KT11A" MOV R0,R1 ;COPY VIRTUAL ADDRESS ASL R1 ;EXTRACT BLOCK NUMBERC ASL R1R SWAB R1 BIC #^C<177>,R1 ;BLOCK NUMBERP- ADD R2,R1 ;BLOCK NUMBER+PAGE ADDRESS BLOCKT MOV R1,R2 SWAB R2 ;EXTRACT BITS 16-17 .IF NDF M$$EXTR- BIC #^C<14>,R2 ;PHYSICAL ADDRESS BITS 16-177 .IFF4. BIC #^C<374>,R2 ;PHYSICAL ADDRESS BITS 16-21 .ENDC .REPT 6 ;GET BLOCK * 64.A ASL R1X .ENDR BIC #^C<77>,R04( ADD R0,R1 ;PHYSICAL ADDRESS BITS 0-15 S .IFF, - MOV R0,R1 ;LOW 16 BITS IS PHYSICAL ADDRESSO CLR R2L D .ENDC R RETURNA .ENDK NUMBERC ASL R1R SWAB R1 BIC #^C<177>,R1 ;BLOCK NUMBERP- ADD R2,R1 ;BL .TITLE LOADRN .IDENT /13.03/D;H7; COPYRIGHT (C) 1987, 1989 BY DIGITAL EQUIPMENT CORP.R; ALL RIGHTS RESERVED.;V>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED@; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;H ; MODIFIED FOR M-PLUS V2.0 BY: ; ; D. R. DONCHIN ; M. S. FOXD; J. M. LAWLER; T. M. MARTIN; B. S. MCCARTHY;I&; MODIFIED FOR RSX-11M-PLUS V2.1 BY:;N; J. R. KAUFFMAN; J. M. LAWLER; B. S. MCCARTHY00bpomkTADATADATADATADATADATA;.&; MODIFIED FOR RSX-11M-PLUS V3.0 BY:;O ; J. M. LAWLER 25-MAY-84 11.06!; B. S. MCCARTHY 3-JUL-84 11.07S"; L. B. MCCULLEY 12-FEB-85 11.08 ; J. W. BERZLE 12-APR-85 11.09 ; G. N. LARSEN 20-MAY-85 11.10;E& ; MODIFIED FOR RSX-11M-PLUS V4.0 BY:!;O'"; C. A. SILVER 13-MAR-86 11.13 CAS021R%#; K. L. NOEL 11-DEC-86 11.14 KLN028A($; L. B. MCCULLEY 5-FEB-87 11.14 LBM061)%; L. B. MCCULLEY 17-MAR-87 11.15 LBM076B(&; L. B. MCCULLEY 8-MAY-87 11.16 LBM084''; D. P. RABAHY 19-FEB-87 12.00 DPR040I&(; K. L. NOEL 28-MAY-87 12.01 KLN050&); D. P. RABAHY 8-JUN-87 12.02 DPR042(*; B. S. MCCARTHY 12-JUN-87 12.03 BM401$+; K. L. NOEL 1-JUL-87 12.04 KLN057',; D. P. RABAHY 21-JUL-87 12.05 DPR0455-;0#.; MODIFIED FOR RSX-11M-PLUS V4.1: /;B&/; D. P. RABAHY 3-AUG-87 13.00 DPR046'/; D. P. RABAHY 27-AUG-87 13.01 DPR0474%/; K. L. NOEL 15-JAN-88 13.02 KLN0851/;B&/; Modified for RSX-11M-PLUS V4.2 by:/;7)/; L. B. McCulley 21-Mar-89 13.03 LBM1564=/; Correct several problems in rebinding windows, includingM=/; zeroing W.BPCB for unmapped windows & correctly handling (/; RO D-space for tasks built /ID /MU.9:;L5;; TASK TO LOAD AND CHECKPOINT ALL NONRESIDENT TASKS5<;4=; MACRO LIBRARY CALLSR>;1@? .MCALL ABODF$, CPRDF$, HDRDF$, HWDDF$, PCBDF$, TCBDF$, UCBDF$@ .MCALL DIR$, WSIG$S$A ABODF$ ;DEFINE TASK ABORT CODES-B CPRDF$ ;DEFINE SYMBOLS & OFFSETS FOR CPRP'C HDRDF$ ;DEFINE TASK HEADER OFFSETS-&D HWDDF$ ;DEFINE HARDWARE REGISTERS3E PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSr.F TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS.G UCBDF$ ;DEFINE UNIT CONTROL BLOCK OFFSETSHIMAP6= 140000J;OK; LOCAL DATAL; M; READ/WRITE I/O DPBN; O$PLDRDP: .BYTE 3,12. ;DIC, DPB SIZE QLDRFC: .BLKW 1 ;FUNCTION CODER .BYTE 1 ;LUN 1S .BLKB 1 ;UNUSED BYTET .BYTE 1 ;EFN 1U .BLKB 1 ;UNUSED BYTE-V .WORD IOSB ;I/O STATUS DOUBLEWORD ADDRESS #W .WORD 0 ;NO AST SERVICE ROUTINEF=XLDRBF: .WORD 140000 ;BUFFER ADDRESS (ALWAYS MAP THRU APR6)O YLDRLN: .BLKW 1 ;BUFFER LENGTHZ .BLKW 1 ;(UNUSED)O&[LDRBK: .BLKW 2 ;LBN OF I/O TRANSFER'\IOSB: .BLKW 2 ;I/O STATUS DOUBLEWORD]^ .IF DF U$$DAS_,`ISIZE: .WORD 0 ;SIZE OF USER I SPACE LOAD,aIREL: .WORD 0 ;RELOCATION BIAS OF I SPACE3bMUDPT: .WORD 0 ;POINTER TO D WINDOW INTO MU PART c ;FOR A MULTI-USER I/D TASKd .ENDCef .IF DF X$$HDRg-hHDRDB: .WORD 0 ;APR BIAS OF CURRENT HEADERSij .ENDC ; DF X$$HDRkl;+m; **-$LOADR-LOADER TASKAn;PGo; THE LOADER TASK IS DRIVEN OFF A LIST OF PCB'S QUEUED TO ITS RECEIVEAp; QUEUE IN PRIORITY ORDER. THE LOADER'S ACTION FOR EACH PCB ISDBq; PRIMARILY DRIVEN BY THE TWO PCB STATUS BITS PS.CKP AND PS.OUT.Ir; SECONDARY INFORMATION WHICH DRIVES THE LOADER IS PASSED IN THE STATUSDEs; BITS PS.CKR, PS.COM, PS.FXD, AND PS.RON. BASICALLY THE LOADER ISK8t; CALLED UPON TO PERFORM ONE OF THE FOLLOWING ACTIONS:u;AFv; 1. (PS.CKP=0,PS.OUT=0) INITIALIZE A TASK FOR EXECUTION WHICH IS9w; ALREADY IN MEMORY. (CURRENTLY FOR TRAX-11 USE ONLY.)TGx; 2. (PS.CKP=0,PS.OUT=1) PERFORM THE INITIAL LOAD OF A NONRESIDENTRBy; REGION. IF THE REGION IS A TASK REGION (PS.COM=0), INITIALIZE<z; ITS HEADER AND ATTACHMENT LIST. IF THE REGION IS A TASKB{; REGION WHICH IS NOT SIMPLY BEING FIXED (PS.FXD=0), CALL $BILDSB|; TO INITIALIZE THE TASK'S STACK AND PLACE IT IN THE ACTIVE TASKB}; LIST. IF THE REGION BEING LOADED ALREADY HAS A PENDING CHECK-C~; POINT REQUEST (PS.CKR=1), INITIATE THE CHECKPOINT OF THE REGION ; BY CALLING $ICHKP.H; 3. (PS.CKP=1,PS.OUT=0) WRITE A CHECKPOINT IMAGE OF THE REGION OUTD; TO DISK, FREE ITS MEMORY, AND CONDITIONALLY PLACE THE PCB IN THED; PARTITION WAIT QUEUE. IF THE REGION IS A TASK REGION (PS.COM=0)?; COPY ITS HEADER FROM THE POOL INTO THE IMAGE FIRST. IF THELC; REGION IS A READ-ONLY COMMON (PS.RON=1), SIMPLY FREE ITS MEMORYK@; WITH NO I/O OPERATION. ALL PRIORITY ZERO COMMONS ARE QUEUED=; TO THE LOADR AS PRIORITY 251. COMMONS SO00bpp4nbl THAT THEY CAN BEE<; CHECKPOINTED OUT IMMEDIATELY. THEIR CORRECT PRIORITY IS; RE-CALCULATED BY THE LOADR. H; 4. (PS.CKP=1,PS.OUT=1) READ THE CHECKPOINT IMAGE OF A REGION BACKB; INTO MEMORY. IF THE REGION BEING LOADED ALREADY HAS A PENDINGA; CHECKPOINT REQUEST (PS.CKR=1), INITIATE THE CHECKPOINT OF THEI@; REGION BY CALLING $ICHKP. FOR INSTALLED COMMONS WITH PS.NWB>; SET, THE DISK PCB IS DEALLOCATED SO THAT THE COMMON IS NOT1; CHECKPOINTED TO ITS ORIGINAL TASK IMAGE FILE.M;-; 5; GET NEXT REQUEST FROM LOADER QUEUE (SYSTEM STATE)C;TI; HERE THE LOADER EXTRACTS THE NEXT PCB FROM ITS RECEIVE QUEUE OR STOPS1H; ITSELF IF THERE IS NO REQUEST. IF THE REQUEST IS THE INITIALIZATIONH; OF AN ALREADY LOADED TASK OR THE CHECKPOINT OF A READ-ONLY COMMON ORG; THE LOADING OF A REGION CREATED BY THE CREATE REGION DIRECTIVE, THEAJ; QIO PHASE IS BYPASSED HERE. IF THE REQUEST IS THE CHECKPOINT WRITE OF=; A TASK, ITS HEADER IS COPIED FROM THE POOL TO THE REGION.M;- $LOADR::+ CALL $SWSTK, 31$ ;SWITCH TO SYSTEM STATEA. CLR $LDPCB ;INITIALLY CLEAR SAVED PCB WORD, MOV $TKTCB,R0 ;PICK UP LOADER TCB ADDRESS, ADD #T.RCVL,R0 ;POINT TO RECEIVE LISTHEAD( CALL $QRMVF ;REMOVE ENTRY FROM QUEUE BCC 5$ ;IF CC GOT ONE 3 BIT #FE.MXT, $FMASK ;; NO WORK, SO STOP OR EXIT?A BNE 4$ ;; IF NE, EXITR CALLR $STPCT ;STOP FOR NOW(4$: MOV $TKTCB, R5 ;; GET LOADER'S TCB CALLR $DREXT ;; EXIT&5$: CLR IOSB ;INDICATE NO I/O ERROR3 MOV R1,R3 ;CALCULATE ADDRESS OF PCB STATUS WORDC;+; ** W A R N I N G **;;A;; SPM HOOKPOINT - LOADR CALLS DUMMY ROUTINE FOR HOOKPOINTB;E+; DO NOT CHANGE THE INSTRUCTION FOLLOWINGE; LABEL WITHOUT CHECKING SPM;-+ CALL @$SPV02 ;CALL HOOKABLE ENTRY POINTE ADD #P.STAT,R3 ;S8 BIT #PS.OUT!PS.CKP,(R3) ;INIT OF ALREADY LOADED TASK? BEQ 7$ ;IF EQ YES$$ BIT #PS.COM,(R3) ;IS IT A COMMON? BEQ 13$ ;IF EQ NOT: BIT #P2.RON,2(R3) ;IS IT AN INSTALLED READ ONLY COMMON? BEQ 6$ ;IF EQ NO8 BIT #PS.OUT,(R3) ;CHECKPOINT OF THE READ ONLY COMMON?% BNE 13$ ;IF NE NO, MUST BE LOADED . BR 12$ ;BYPASS I/O ON CKP OUT OF RO COMMON-6$: TST P.DPCB(R1) ;LOAD OF CREATED REGION?H BNE 13$ ;IF NE NO=7$: BIS #PS.OUT,(R3) ;SET ALREADY LOADED TASK OUT OF MEMORYR#12$: MOV R1,R4 ;COPY PCB ADDRESST$ MOV P.TCB(R4),R5 ;SET TCB ADDRESS& JMP 82$ ;JOIN AFTER I/O COMPLETION&13$: MOV R1,$LDPCB ;SAVE PCB ADDRESS5 BIT #PS.OUT!PS.COM,(R3) ;CHECKPOINT WRITE OF TASK? BNE 30$ ;IF NE NOB/ MOV P.HDR(R1),R3 ;GET ADDRESS OF TASK HEADERO .IF DF X$$HDR. BEQ 30$ ;IF EQ EXTERNAL HEADER, DON'T COPY .ENDC ; DF X$$HDR7 MOV P.REL(R1),KISAR6 ;SETUP TO ACCESS TASK PARTITION! MOV P.TCB(R1),R2 ;POINT TO TCBD5 ADD T.OFF(R2),KISAR6 ;ADD IN OFFSET TO TASK HEADERC5 MOV #140000,R2 ;SET ADDRESS BIAS OF TASK PARTITION$5 MOV H.WND(R3),R4 ;POINT TO NUMBER OF WINDOW BLOCKSE) TST W.BLVR+2(R4) ;TASK MAPPED TO EXEC?H BNE 15$ ;IF NE YES8 MOV H.DSW(R2),H.DSW(R3) ;COPY DSW TO REAL TASK HEADER715$: MOV H.HDLN(R3),R4 ;GET LENGTH OF HEADER IN BYTESI! ASR R4 ;CONVERT TO WORD COUNT720$: MOV (R3)+,(R2)+ ;MOVE HEADER INTO TASK PARTITIONP# DEC R4 ;ANY MORE WORDS TO MOVE?T BGT 20$ ;IF GT YES%30$: RETURN ;RETURN TO TASK STATET;H,; PERFORM ACTUAL I/O TRANSFER (TASK STATE);TI; HERE THE LOADER SETS UP THE QIOW DPB AND PERFORMS THE ONE OR MORE I/OTH; TRANSFERS REQUIRED. AFTER SETTING UP THE I/O FUNCTION CODE AND BYTEI; COUNT THE LOADER MUST CALCULATE THE DISK ADDRESS AND UCB ADDRESS. IFEH; THERE IS A DISK PCB, THE LOADER CODE ASSUMES IT IS A CHECKPOINT PCB,J; AND THE DATA STRUCTURES ARE SUCH THAT THIS WORKS FOR COMMON TASK IMAGEG; FILE PCB'S AS WELL. OTHERWISE THE REQUEST MUST BE FOR A TASK TO ORTF; FROM ITS TASK IMAGE FILE. FOR AN INITIAL TASK LOAD THIS MEANS THE@; ADDRESS IN T.LBN. FOR A CHECKPOINT OPERATION THIS MEANS THEJ; ADDRESS AT T.LBN MINUS THE PARTITION SIZE (THE PRE00b%pomkTADATADATADATADATADATAALLOCATED CHECKPOINT ; SPACE). ;RI; THE I/O TRANSFER IS SPECIFIED TO THE EXECUTIVE BY SPECIFYING A BUFFER H; ADDRESS OF 140000 AND LOADING UISAR6 WITH THE PHYSICAL MEMORY OFFSETJ; OF THE FIRST 32W BLOCK OF THE TRANSFER. THIS ALLOWS THE EXECUTIVE TOH; FIND THE CORRECT START ADDRESS VIA $RELOC. THE SIZE OF THE TRANSFERI; CAN BE ANYTHING SINCE THE EXECUTIVE DOES NOT ADDRESS CHECK PRIVILEGEDFF; TASKS. THE PROCESSOR PRIORITY IS RAISED TO PR7 TO INHIBIT CONTEXTI; SWITCHING BETWEEN THE LOADING OF UISAR6 AND THE EXECUTION OF THE QIOW/F; DIRECTIVE. THE PRIORITY ONLY REMAINS AT PR7 FOR SHORT INSTRUCTIONH; SEQUENCES AT TASK STATE IN THE LOADER, NATURALLY DROPPING TO PR0 ANDG; ALLOWING CONTEXT SWITCHING WHEN THE QIOW IS EXECUTED. ON RETURN TO B; LOADER FROM THE QIOW, HOWEVER, THE PRIORITY IS RETURNED TO PR7D; AUTOMATICALLY AND UISAR6 WILL BE RELOADED IF ANOTHER TRANSFER IS ; REQUIRED.K;H131$: MOV $LDPCB, R4 ;RETRIEVE SAVED PCB ADDRESSN/ BEQ $LOADR ;IF EQ THERE WAS NONE, TRY AGAIN 8 MOV P.TCB(R4),R5 ;GET TCB ADDRESS (IF TASK PARTITION)3 MOV R4,R3 ;CALCULATE ADDRESS OF PCB STATUS WORDU ADD #P.STAT,R3 ;N .IF DF C$$LDR0 BIT #F5.LDR, $FMSK5 ; REMOTE LOADER SUPPORT? BEQ 49$ ; IF EQ NO * MOV P.DPCB(R4), R1 ; POINT TO DISK PCB$  BEQ 40$ ; IF EQ THERE ISN'T ONE$  MOV P.MAIN(R1),R1 ; GET MAIN PCB(  MOV P.UCB(R1), R1 ; SAVE UCB ADDRESS  BR 41$8 40$: MOV T.LDV(R5), R1 ; SAVE LOAD DEVICE UCB ADDRESS141$: MOV U.RED(R1), R1 ; FOLLOW REDIRECT CHAINR* CMP R1, U.RED(R1) ; FOUND REAL DEVICE?' BNE 41$ ; IF NE, NOPE - KEEP GOINGTASSUME U.DCB4 CMP (R1), $XXLOW ; INSTALLED ON A REMOTE DEVICE?) BLO 49$ ; IF LO, NOPE - LOCAL DEVICE4 CMP (R1), $XXHGH) BHI 49$ ; IF HI, NOPE - LOCAL DEVICE142$: CALL $SWSTK, 48$ ; SWITCH TO SYSTEM STATE,7 MOV #< P$BLK+ 77>/ 100, R1 ;; ROUNDED SIZE OF PACKET1 CLR R0 ;; INDICATES IMMEDIATE RETURN DESIREDE* CALL $CPALO ;; GET BUFFER FROM CPRBUF# BCC 43$ ;; RESOURCES AVAILABLER2 BIS #1, $UMPS ;; PROPAGATE STATUS TO USER-MODE  RETURN-!43$:0" MOV R0, KISAR6 ;; MAP NEWLY ALLOCATED PACKET+# MOV #MAP6, R0 ;; BASE ADDRESS OF PACKETI$; !%; LOAD HEADER & PARAMETER AREAS$&;' CLRB H$ICNT(R0) ;; NO ITEMSC-( MOV P.REL(R4),P$ADDR(R0) ;; BIAS IN MEMORYC-) CLR P$ADDR+2(R0) ;; OFFSET IS ALWAYS ZERO0*@+ BIT #PS.OUT, P.STAT(R4) ;; IS THE REGION IN OR OUT OF MEMORY?, BNE 44$ ;; IF NE, IT'S OUT;4- MOVB #HT$CKW, H$TYPE(R0) ;; MUST BE WRITE REQUEST . BR 45$/44$:01XXX= PS.CKP!PS.COM82 BIT #XXX, P.STAT(R4) ;; IS THIS CHECKPOINT OR COMMON?/3 BEQ 46$ ;; IF EQ, NO - MUST BE A TASK LOADB465 MOVB #HT$CKR, H$TYPE(R0) ;; CHECKPOINT READ REQUEST645$::7 MOV P.DPCB(R4), R1 ;; GET DISK PARTITION CONTROL BLOCK58 MOV P.LBN+2(R1),P$BLK(R0) ;; RELATIVE BLOCK NUMBERT+9 CMP P.MAIN(R1),R1 ;; IS THIS A CKP PCB?R: BEQ 455$ ;; IF EQ NOU3; MOV P.REL(R1),P$BLK(R0) ;; RELATIVE BLOCK NUMBERV1< MOV P.MAIN(R1),R1 ;; GET CKP FILE PCB ADDRESSB=455$:5> MOV P.IID(R1), P$IID(R0) ;; USE COMMON IMAGE INDEX @? MOV P.SIZE(R4), P$LEN(R0) ;; # OF 32. WORD BLOCKS TO TRANSFER @ BR 47$LA46$:1B MOVB #HT$ILD, H$TYPE(R0) ;; IMAGE LOAD REQUESTQ3C MOV T.IID(R5), P$IID(R0) ;; USE TASK IMAGE INDEXID7E ADD T.OFF(R5), P$ADDR(R0) ;; ADJUST DESTINATION BIASBFHG47$: CPSEN$ #SN$TSK,KISAR6,#P$BLK+2 ;; SEND PACKET TO CPRSYS VIA KXDRVH I MOV R0, KISAR6 ;; MAP PACKET,J MOV MAP6+H$STAT, IOSB ;; PROPAGATE STATUSK-L CALLR $CPDEA ;; RELEASE THE CPRBUF SPACEIM48$:.N BCS 42$ ; RESOURCE WAS LACKING, TRY AGAIN,O JMP 81$ ; CONTINUE WITH POST-PROCESSINGP49$:Q .ENDC ; DF C$$LDRR*S MOV #IO.RLB,LDRFC ;ASSUME READ FUNCTION.T BIT #PS.OUT,(R3) ;CHECKPOINT WRITE REQUEST?U BNE 50$ ;IF NE NOO(V MOV #IO.WLB,LDRFC ;SET WRITE FUNCTIONW50$:X BIT #PS.COM,(R3) ;COMMON ?#Y BEQ 501$ ;IF EQ, NO ?Z BIT #P2.LDD,P.ST2(R4) ;WAS LOAD DEVICE DISABLED/DISMOUNTED ?P[ BNE 51$ ;IF 00b-pp4nblNE, YEST$\ BR 52$ ;ELSE CONTINUE PROCESSING]501$:C5^ BIT #T4.LDD,T.ST4(R5) ;TASK LOAD DEVICE DISABLED ?N _ BEQ 52$ ;IF EQ NO, ALL IS OK)` BIT #PS.CKP,(R3) ;CHECKPOINT REQUEST ?;a BEQ 51$ ;IF EQ NO, FAILURE5b BIT #T3.CAL,T.ST3(R5) ;CHECK POINT SPACE IN TASK ?Oc BEQ 52$ ;IF EQ NO, IT'S OK+d51$: MOVB #IE.PRI,IOSB ;FORCE I/O FAILUREUe52$: f CLR R0 ;HIGH PORTION OF SIZE-g MOV P.SIZE(R4),R1 ;ASSUME SIZE OF TRANSFERP9h BIT #PS.CKP!PS.COM,(R3) ;CHECKPOINT REQUEST OR COMMON?$i BNE 55$ ;IF NE YESj;LFk; THIS IS AN INITIAL TASK LOAD. SET SIZE FROM T.TKSZ, TASK LOAD SIZE+l; AND CLEAR FLAG INDICATING D SPACE TASK.Im;4n MOV T.TKSZ(R5),R1 ;USE TASK TRANSFER SIZE INSTEADo55$:%p ASHC #6,R0 ;CONVERT TO BYTE COUNT;#q MOV R0,R2 ;HIGH PORTION OF SIZE5=r MOV R1,-(SP) ;OUT OF REGISTERS - USE STACK FOR LOW PORTIONLst MOV #LDRBK,R0 ;POINT TO LBNu'v MOV P.DPCB(R4),R1 ;POINT TO DISK PCB w BEQ 56$ ;IF EQ THERE IS NONE5x MOV P.REL(R1),2(R0) ;GET RELATIVE POSITION IN FILE 'y MOV P.MAIN(R1),R1 ;POINT TO MAIN PCB 6z MOV P.LBN(R1),(R0)+ ;SET HIGH BITS OF BLOCK ADDRESS:{ ADD P.LBN+2(R1),(R0) ;ADD LOW BITS TO RELATIVE POSITION| ADC -(R0) ;PROPAGATE CARRY(} MOV P.UCB(R1),-(SP) ;SAVE UCB ADDRESS ~ BR 60$ ;;56$: MOVB T.LBN(R5),(R0)+ ;SET HIGH BITS OF BLOCK ADDRESST CLRB (R0)+ ;6 MOV T.LBN+1(R5),(R0) ;SET LOW BITS OF BLOCK ADDRESS4 MOV T.LDV(R5),-(SP) ;SAVE LOAD DEVICE UCB ADDRESS4 BIT #PS.CKP,(R3) ;IS THIS A CHECKPOINT OPERATION? .IF NDF U$$DAS BEQ 60$ ;IF EQ NO  .IFF ; NDF U$$DAS BNE 58$ ;IF NE YES;DF; THIS IS AN INITIAL LOAD. IF THE TASK HAS USER INSTRUCTION AND DATAH; SPACE ENABLED, ADJUST SO THAT THE FIRST LOAD GETS THE DATA SPACE IN.8; THEN WE WILL LOCATE I SPACE THROUGH THE TASK HEADER.;R? BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH SEPARATE I/D SPACES ?K BEQ 60$ ;IF EQ NOR0 DEC ISIZE ;AND INDICATE PARTIAL D SPACE LOAD BR 60$ ;REJOIN COMMON CODE .ENDC ; DF U$$DAS658$: MOV P.SIZE(R4),R1 ;PICK UP MAXIMUM SIZE OF TASK* ADD #7,R1 ;ROUND UP TO NEXT 512. BLOCK' ROR R1 ;CONVERT TO 512. WORD BLOCKSS  ASR R1 ;  ASR R1 ; .IF DF U$$DAS1 SUB T.ISIZ(R5),(R0) ;ADJUST BY SIZE OF I SPACE  SBC -2(R0) ; .ENDC ; DF U$$DAS3 SUB R1,(R0) ;CALCULATE STARTING LBN OF CKP AREAW SBC -(R0) ;S60$:;BK; SINCE WE'RE IN USER-MODE AT THIS POINT WE HAVE TO USE UISAR6 TO MAP OUR0N; HEADER AND SO WE MUST DISABLE INTERRUPTS LEST WE HAVE OUR CONTEXT RELOADED;U3 MOV $SAHPT, R1 ; GET ADDRESS OF LOADER'S HEADERX) MOVB #PR7, PS ;;; LOCK OUT INTERRUPTSO. MOV $SAHDB, UISAR6 ;;; MAP LOADER'S HEADER$PLF = / 100 * 400. MOV #PLF + 6, UISDR6 ;;; ALLOW WRITE ACCESS7 MOV (SP)+, H.LUN(R1) ;;; ASSIGN LUN 1 TO LOAD DEVICEE! CLRB PS ;;; ALLOW INTERRUPTS-< MOV P.REL(R4), R1 ; PICK UP RELOCATION BIAS OF PARTITION; BIT #PS.CKP!PS.COM, (R3) ; CHECKPOINT REQUEST OR COMMON?  BNE 65$ ; IF NE YES8 ADD T.OFF(R5), R1 ; ELSE ADD IN OFFSET TO TASK IMAGE65$:9 MOV #177000, LDRLN ; SET TENTATIVE LENGTH OF TRANSFERU;; AT THIS POINT WE HAVE:;A/; R2,(SP) = TOTAL SIZE OF TRANSFER TO PERFORM0=; R1 = RELOCATION BIAS OF LOAD AREA IN PHYSICAL MEMORY ); R4 = PCB ADDRESS OF TRANSFER PCB-; R5 = TCB ADDRESS OF TASK (IF TASK REGION)P?; LDRBK = HIGH ORDER PART OF DISK BLOCK ADDRESS TO TRANSFERC2; LDRBK+2 = LOW ORDER PART OF DISK BLOCK ADDRESS;67 SUB #177000, (SP) ; REDUCE ACTUAL COUNT TO TRANSFERS  SBC R2I" BGE 70$ ; IF GE FULL TRANSFER2 ADD (SP), LDRLN ; ELSE REDUCE SIZE OF TRANSFER) BEQ 80$ ; IF EQ LAST TRANSFER DID ITA70$:4 TSTB IOSB ; FORCED I/O ERROR (DUE TO DISMOUNT)?0 BMI 80$ ; IF MI YES, MAKE IT LOOK LIKE DONE) MOVB #PR7, PS ;;; LOCK OUT INTERRUPTSS0 MOV R1, UISAR6 ;;; SET APR BIAS FOR TRANSFER-71$: DIR$ #LDRDP ;;; REQUEST I/O TRANSFER % BCC 75$ ;;; IF CC LOAD SUCCEEDEDA+ WSIG$S ;00b5pomkTADATADATADATADATADATA;; WAIT FOR SIGNIFICANT EVENTA BR 71$ ;;; RETRY I/O75$:! CLRB PS ;;; ALLOW INTERRUPTSR# ADD #1770, R1 ; UPDATE APR BIASO+ ADD #177, LDRBK+2 ; UPDATE BLOCK NUMBERR  ADC LDRBK' TST R2 ; WAS IT THE LAST TRANSFER?  BLT 80$ ; IF LT YES) TSTB IOSB ; WAS TRANSFER SUCCESSFUL? * BPL 65$ ; IF PL YES - GO FOR NEXT ONE80$:- TST (SP)+ ; POP LOW-ORDER TRANSFER COUNTL; F; IF THIS IS AN I/D SPACE TASK, RESET PARAMETERS AND READ IN I SPACE@; SECTION WITH PARAMETERS FROM WINDOW ZERO IN THE TASK HEADER.; .IF DF U$$DAS2 TST ISIZE ;TASK USE I/D SPACE (AND NOT ALREADY ;LOADED BOTH SPACES) ?1 BPL 807$ ;IF PL EITHER NOT D SPACE OR ALREADY  ;ALL LOADEDR+ CALL $SWSTK,805$ ;SWITCH TO SYSTEM STATEO& MOV #ISIZE,R0 ;POINT TO IMPURE AREA- MOV P.REL(R4),KISAR6 ;POINT TO TASK REGIONT. ADD T.OFF(R5),KISAR6 ;ADJUST TO HEADER AREA+ CMPB #17,140000+H.IPS ;SUCCESSFUL READ ?S BNE 803$ ;IF NE NO+ MOV H.NLUN+140000,R1 ;GET NUMBER OF LUNS  ASL R1 ;CONVERT ASL R1 ;TO INDEX8 ADD #140000+H.NLUN+4,R1 ;POINT TO TASK I SPACE WINDOW4 MOV W.BSIZ(R1),(R0)+ ;SAVE SIZE OF I SPACE WINDOW1 MOV W.BOFF(R1),(R0) ;AND OFFSET INTO PARTITION$803$: RETURN ;BACK TO USER STATE0805$: TST ISIZE ;SHOULD WE TRY I SPACE READ ? BLE 807$ ;IF LE, NOI* MOV ISIZE,R1 ;GET SIZE OF USER I WINDOW' ASH #6,R1 ;CONVERT TO SIZE IN BYTES4, MOV R1,-(SP) ;SET UP FOR REGION LOAD CODE& MOV IREL,R1 ;GET OFFSET TO I SPACE+ ADD P.REL(R4),R1 ;SET UP RELOCATION BIASR- MOV #LDRBK,R0 ;GET ADDRESS OF BLOCK NUMBER 6 MOVB T.LBN(R5),(R0)+ ;SET HIGH PART OF BLOCK NUMBER CLRB (R0)+ ;CLEAR HIGH BITSF5  MOV T.LBN+1(R5),(R0) ;SET LOW PART OF BLOCK NUMBER 4  SUB T.ISIZ(R5),(R0) ;ADJUST BACKWARDS TO START OF  SBC -(R0) ;I SPACE+  CLR ISIZE ;INDICATE FINAL PHASE OF LOADS,  JMP 65$ ;GO LOAD USER DATA SPACE SECTION807$: ;REFERENCE LABEL( .ENDC ; DF U$$DAS;V7; POST PROCESSING FOR CHECKPOINT WRITE (SYSTEM STATE)T;EI; HERE THE LOADER CHECKS THE I/O STATUS, DEALLOCATES THE TASK HEADER IFBI; THE REGION WAS A TASK REGION, AND DETERMINES IF THE REGION PCB SHOULDFJ; BE ENTERED INTO THE PARTITION WAIT QUEUE. TASK REGIONS ALWAYS GO INTOI; THE PARTITION WAIT QUEUE AND COMMONS GO IN IF P.PRI IS NONZERO (THEREIG; IS A RESIDENT MAPPED TASK). FINALLY THE REGIONS MEMORY IS RELEASEDNG; ALLOWING $NXTSK TO ATTEMPT TO BRING IN THE HIGHEST PRIORITY WAITING ; REGION.S;O181$: CALL $SWSTK,$LOADR ;SWITCH TO SYSTEM STATEL !82$:"#;+$; ** W A R N I N G **S%;D;&; SPM HOOKPOINT - LOADR CALLS DUMMY ROUTINE FOR HOOKPOINTH';I+(; DO NOT CHANGE THE INSTRUCTION FOLLOWINGT); LABEL WITHOUT CHECKING SPM*;-++, CALL @$SPV03 ;CALL HOOKABLE ENTRY POINTG-&. BIT #PS.OUT,(R3) ;REGION IN MEMORY?/0 BNE 870$ ;IF NE NO&1 BIT #PS.COM,(R3) ;IS THIS A COMMON?2 BEQ 825$ ;IF EQ NO33 BIT #P2.CPC,P.ST2(R4) ;IS THIS A CPCR CKP WRITE?I4 BEQ 825$ ;IF EQ NO 5 TSTB IOSB ;SUCCESSFUL WRITE?6 BMI 90$ ;IF MI NO17 BR 91$ ;OTHERWISE AVOID REAL CHECKPOINT WRITEK8 ;PARTITION DEALLOCATIONN69825$: BIT #PS.DEL,(R3) ;IS REGION MARKED FOR DELETE?: BEQ 83$ ;IF EQ NO 0; TST P.ATT(R4) ;IS THERE ANYONE LEFT ATTACHED?< BNE 83$ ;IF NE YES= MOV R4,R1 ;COPY PCB POINTERO#> CALL $RLPR1 ;RELEASE ITS MEMORY ? MOV R4,R0 ;COPY PCB POINTERA6@ CALLR $RLCPS ;RELEASE CHECKPOINT SPACE & DEA PCB'S$A83$: TSTB IOSB ;SUCCESSFUL WRITE?B BMI 90$ ;IF MI NOTCDE .IF DF E$$XPRF4G BIT #PS.AST,P.STAT(R4) ;REGION HAVE AST PENDING ?.H BNE 84$ ;IF NE YES, P.SWSZ IS AST LISTHEADI ;NOT SWAP SIZE.,5J MOV P.SWSZ(R4),P.SIZE(R4) ;SET SIZE FROM SWAP SIZENK84$: ;REFERENCE LABELLM .ENDCNO-P BIS #PS.OUT,(R3) ;SET REGION OUT OF MEMORY (Q CLR $LDPCB ;CLEAR LOADER PCB POINTER+R BIT #PS.COM,(R3) ;IS IT A COMMON REGION?/S BEQ 844$ ;IF EQ, NO - MUST BE A TASK REGIONB3T CLRB P.PRI(R4) ;RE-00b=pp4nblINITIALIZE PRIORITY OF COMMON -U TSTB P.RMCT(R4) ;ANYONE MAPPED TO COMMON ?T/V BEQ 85$ ;IF EQ, NO - LEAVE PRIORITY AT ZEROW MOV R4,R1 ;COPY PCB POINTERS*X ADD #P.ATT,R1 ;POINT TO ATTACHMENT LISTY ASSUME A.PCBL(Z841$: MOV (R1),R1 ;GET FIRST/NEXT ADB [ BEQ 843$ ;IF EQ, END OF LIST6\ TSTB A.MPCT(R1) ;TASK MAPPED THRU THIS DESCRIPTOR ?0] BEQ 841$ ;IF EQ, NO - DON'T LOOK AT PRIORITY*^ MOV A.TCB(R1),R0 ;GET MAPPED TASK'S TCB<_ CMPB P.PRI(R4),T.PRI(R0) ;REGION PRIORITY ALREADY GREATER ` ;THAN SOMEONE ELSES TASK ?+a BHIS 841$ ;IF SO, DON'T UPDATE PRIORITY5b MOVB T.PRI(R0),P.PRI(R4) ;UPDATE REGION'S PRIORITYV(c BR 841$ ;AND EXAMINE NEXT ATTACHMENT:d843$: INCB P.PRI(R4) ;COMMON REGION'S PRIORITY IS ALWAYS2e BR 85$ ;ONE GREATER THAN HIGHEST PRIORITY TASKf844$: ;REFERENCE LABEL)ghi .IF DF A$$CNTj$k MOV P.TCB(R4),R0 ;GET TCB ADDRESS!l MOV KISAR6,-(SP) ;SAVE MAPPING)-m MOV T.ACN(R0),KISAR6 ;MAP ACCOUNTING BLOCK."n BEQ 845$ ;IF EQ, NO ACCOUNTING-o CMPB #BT.TAB,@#B.TYP+140000 ;IS THIS A TAB p BNE 845$ ;IF NE NO2q ADD #1,@#B.TCKP+2+140000 ;COUNT TASK CHECKPOINTr ADC @#B.TCKP+140000 ;)s845$: MOV (SP)+,KISAR6 ;RESTORE MAPPINGNtu .ENDC ;A$$CNTvw/x MOV P.HDR(R4),R0 ;GET ADDRESS OF TASK HEADERHyz .IF DF X$$HDR{4| BEQ 85$ ;IF EQ EXTERNAL HEADER, DON'T DEALLOCATE}~ .ENDC ; DF X$$HDR3 MOV H.HDLN(R0),R1 ;GET LENGTH OF HEADER IN BYTEST" CALL $DEACB ;DEALLOCATE HEADER"85$: MOV R4,R1 ;SET PCB ADDRESS+ TSTB P.PRI(R1) ;DOES IT HAVE A PRIORITY? / BEQ 87$ ;IF EQ NO, DO NOT PUT IN WAIT QUEUE2; MOV P.MAIN(R1),R0 ;CALCULATE ADDR OF WAIT QUEUE LISTHEAD4 ADD #P.WAIT,R0 ;;9 CALL $QINSP ;INSERT TASK BACK IN PARTITION WAIT QUEUER'87$: CALLR $RLPR1 ;RELEASE PARTITION870$: BR 110$ ;EXTEND BRANCH ;E+; CHECKPOINT WRITE FAILURE (SYSTEM STATE)H;H; ON CHECKPOINT WRITE FAILURES A DIAGNOSTIC MESSAGE BLOCK IS QUEUED TOD; TKTN AND THE STATUS OF THE REGION AND ANY MAPPED TASKS IS RESET,H; ALLOWING THE TASKS TO RUN AS IF THE CHECKPOINT WRITE REQUEST HAD NOTH; OCCURED. ANY CHECKPOINT SPACE ALLOCATED FOR THE REGION IS RELEASED.;A390$: MOV #T.NCWF,R0 ;SET CHECKPOINT WRITE FAILUREW MOV R4,R5 ;COPY PCB ADDRESS;+ MOV $SAHPT,R4 ;PICK UP PTR TO OWN HEADERE! MOV KISAR6,-(SP) ;SAVE MAPPINGP$ MOV $SAHDB,KISAR6 ;MAP OWN HEADER7 MOV H.LUN(R4),R4 ;PICK UP UCB ADDRESS OF WRITE ERROR $ MOV (SP)+,KISAR6 ;RESTORE MAPPING CALL $DVMSG ;OUTPUT MESSAGED& MOV R5,R4 ;RESET PCB ADDRESS IN R4;SJ; UNBLOCK MAPPED TASKS & FREE CHECKPOINT SPACE (SYSTEM STATE SUBROUTINE);CI; THIS ROUTINE IS CALLED AFTER A REGION LOAD OPERATION OR AN UNSUCCESS-KH; FULL CHECKPOINT WRITE OPERATION TO UNBLOCK ALL MAPPED TASKS AND FREEI; ANY SPACE WHICH MAY BE ALLOCATED IN A CHECKPOINT FILE. IF THE REGIOND>; HAS HAD A LOAD FAILURE, THEN ALL MAPPED TASKS ARE ABORTED.; ; INPUTS:;V; R4=PCB ADDRESS.E;I ; OUTPUTS:; ; R4 AND R5 PRESERVED.; =91$: MOV P.ATT(R4),R2 ;POINT TO FIRST ATTACHMENT DESCRIPTOR  BEQ 94$ ;IF EQ THERE IS NONE@92$: MOVB A.MPCT(R2),R1 ;PICK UP MAPPING COUNT THRU DESCRIPTOR" BEQ 93$ ;IF EQ TASK NOT MAPPED4 BIT #PS.LFR,P.STAT(R4) ;LOAD FAILURE THIS REGION? BEQ 925$ ;IF EQ NO3 MOV R2,-(SP) ;SAVE ATTACHMENT DESCRIPTOR ADDRESSR* MOV A.TCB(R2),R0 ;POINT TO ATTACHED TCB( DEC T.STAT(R0) ;REDUCE BLOCKING COUNT' BPL 923$ ;IF PL TASK ALREADY ACTIVE/ BIC #TS.EXE,T.STAT(R0) ;ELSE SET TASK ACTIVE& MOV T.PCB(R0),R1 ;POINT TO TASK PCB* BIC #PS.FXD,P.STAT(R1) ;CLEAR FIXED BIT- CALL $BILDS ;BUILD STACK AND PLACE IN ATLC6 MOV (SP),R2 ;RESTORE ATTACHMENT DESCRIPTOR ADDRESS+923$: CLRB A.MPCT(R2) ;ZERO MAPPING COUNTA( MOV A.TCB(R2),R1 ;POINT TO MAPPED TCB8 BIT #T2.ABO,T.ST2(R1) ;TASK ALREADY MARKED FOR ABORT? BNE 9241$ ;IF NE YES, MOV #S.CLRF,R0 ;SET CODE FOR LOAD FAILURE+ BIT #PS.CKP,P.STAT(R4) ;CHECKPOINT READ?A BEQ 924$ ;IF EQ NO7 MOV #S.CCRF,R0 ;S00bEpomkTADATADATADATADATADATAET CODE FOR CHECKPOINT READ FAILURE 924$: CALL $ABTSK ;ABORT TASK!9241$: MOV (SP)+,R2 ;RESTORE R2L  BR 93$ ;4925$: MOV A.TCB(R2),R0 ;POINT TO MAPPED TASK'S TCB( DEC T.STAT(R0) ;REDUCE BLOCKING COUNT( BNE 93$ ;IF NE TASK IS STILL BLOCKED CALL $SETCR ;SCHEDULE TASK893$: MOV (R2),R2 ;POINT TO NEXT ATTACHMENT DESCRIPTOR BNE 92$ ;IF NE THERE IS ONEV#94$: MOV R4,R2 ;COPY PCB POINTERE1 ADD #P.STAT,R2 ;POINT AT PARTITION STATUS WORDB' BIT #PS.COM,(R2)+ ;IS THIS A COMMON?T BEQ 95$ ;IF EQ NOA. BIT #P2.CPC,(R2) ;IS THIS A CPCR CKP WRITE? BEQ 945$ ;IF EQ NO, BIC #P2.CPC,(R2) ;INDICATE CPCR COMPLETED ASSUME P.ST2,* BIC #PS.CKP,-(R2) ;CHECKPOINT COMPLETED MOV R4,R0 ;COPY PCB ADDRESSL3 CALLR $NXTSK ;REALLOCATE PARTITION IF NECESSARY(4945$: BIT #PS.LFR,-(R2) ;LOAD FAILURE THIS REGION? BNE 96$ ;IF NE YES#95$: MOV R4,R0 ;COPY PCB POINTERE* CALLR $RLCPS ;RELEASE CHECKPOINT SPACE96$: RETURN ;S;+2; POST PROCESSING FOR REGION LOAD (SYSTEM STATE)"; COPY HEADER & CHECK I/O STATUS;E; HERE THE LOADER SETS UP A COPY OF THE TASK HEADER IN THE POOL AND.; DETERMINES IF A LOAD FAILURE HAS OCCURRED.;P;110$: BIC #PS.OUT!PS.LFR,(R3) ;CLEAR OUT AND LOAD FAILURE ( BIT #PS.COM,(R3) ;IS REGION A COMMON? BEQ 112$ ;IF EQ NO) JMP 143$ ;YES, SKIP HEADER PROCESSINGE112$: ;REFERENCE LABEL . MOV P.REL(R4),KISAR6 ;MAP TO TASK PARTITION .IF DF X$$HDR - TSTB T.HDLN(R5) ;TASK HAVE EXTERNAL HEADER 3 BEQ 113$ ;IF EQ, NO. CALCULATE OFFSET TO HEADER& BIT #PS.CKP,(R3) ;CHECKPOINT READ ?1 BNE 114$ ;IF NE, YES - EXAMINE EXTRNAL HEADERI113$:F .ENDC ; DF X$$HDR5 ADD T.OFF(R5),KISAR6 ;ADD IN OFFSET TO TASK HEADERA4114$: MOV 140000+H.HDLN,R1 ;ASSUME SUCCESSFUL READ+ CMPB #17,140000+H.IPS ;VALID TASK IMAGE?E1 BNE 115$ ;IF NE NO TREAT AS UNSUCCESSFUL READM TSTB IOSB ;SUCCESSFUL READ?P BPL 120$ ;IF PL YESX,115$: MOVB #-1,IOSB ;INDICATE LOAD FAILURE; MOV #H.NLUN+2+W.BLGH+2,R1 ;SETE LENGTH OF MINIMUM HEADERA/ CLR 140000+H.NLUN ;CLEAR NUMBER OF LUNS WORDB+120$: MOV R1,2(SP) ;SAVE LENGTH OF HEADERI .IF DF X$$HDR/ TSTB T.HDLN(R5) ;TASK HAVE EXTERNAL HEADER ?T*  BEQ 125$ ;IF EQ NO, GO TRY TO ALLOCATE6  MOV #140000,R0 ;SET VIRTUAL ADDRESS OF XTRNL HEADER0  BIT #PS.CKP,(R3) ;CHECKPOINT READ OPERATION ?8  BNE 122$ ;IF NE YES, NO HEADER MANIPULATION REQUIRED 2 CLR P.HDR(R4) ;INDICATE EXTERNAL HEADER FOR PCB; MOV P.REL(R4),HDRDB ;SET BLOCK NUMBER OF EXTERNAL HEADERM BR 131$ ;RE-ENTER CODE FLOWL-122$: JMP 1401$ ;STRETCH BRANCH FROM ABOVE) .ENDC ; DF X$$HDR6125$: CALL $ALOCB ;ALLOCATE A BLOCK FOR TASK HEADER# BCC 130$ ;IF CC BLOCK ALLOCATEDO1 BIS #PS.OUT,(R3) ;MARK REGION AS OUT OF MEMORYL;EN; NO NEED TO CHANGE FOLLOWING REFERENCE TO $HEADR TO SUPPORT EXTERNAL HEADER;F* MOV @$HEADR,R0 ;GET SAVED STACK POINTER' MOV #81$,4(R0) ;ALTER RETURN ADDRESSD+ CALLR $TKWSE ;WAITFOR SIGNIFICANT EVENT 4130$: MOV R0,P.HDR(R4) ;SAVE ADDRESS OF NEW HEADER- 131$: MOV #140000,R2 ;SET APR6 ADDRESS BIASF6! MOV R0,R1 ;CALC RELATIVE HEADER GUARD WORD POINTER" TST -(R1) ;A# MOV R1,H.GARD(R2) ;:$ MOV R1,H.WND(R2) ;CALCULATE NUMBER OF WINDOW BLOCKS PTR3% MOV H.NLUN(R2),R1 ;CALCULATE NUMBER OF LUN WORDSA & ASL R1 ; ' ASL R1 ;'( ADD #H.NLUN+4,R1 ;FINISH CALCULATION) ADD R1,H.WND(R2) ;V3* MOV 2(SP),R1 ;RETRIEVE LENGTH OF HEADER IN BYTESR*+ MOV R1,H.HDLN(R2) ;SET LENGTH OF HEADER3, ADD R1,H.GARD(R2) ;FINISH GUARD WORD CALCULATION -. .IF DF X$$HDR/0 .IF DF F$$MAP1=2 CLR H.FMAP(R2) ;ASSUME TASK DOES NOT HAVE FAST MAP ENABLED34 .ENDC ; DF F$$MAP56 .IF DF C$$DFB & C$$RTB(7=8 CLR H.LUTE(R2) ;ASSUME TASK DOES NOT HAVE RUN TIME BINDINGA9: .ENDC ; DF C$$DFB & C$$RTBL;-< TST P.HDR(R4) ;TASK HAVE EXTERNAL HEADER ?A= BNE 139$ ;IF NE NO, GO COPYV!> MOV R4,-(SP) ;SAVE PCB ADDRESSO/? MOVB T.HDLN(R5),R0 ;GET SIZE OF T00bMpp4nblOTAL HEADERG@A .IF DF F$$MAPB5C BIT #T4.FMP,T.ST4(R5) ;TASK HAVE FAST MAP ENABLED? D BEQ 133$ ;IF EQ NO:E SUB #H$$FMX,R0 ;SUBTRACT OUT SIZE OF FAST MAP EXTENSIONF133$:EG .ENDC ; DF F$$MAPHI .IF DF C$$DFB & C$$RTBCJ5K BIT #T4.DFB,T.ST4(R5) ;TASK HAVE DEFERRED BINDING?NL BEQ 135$ ;IF EQ NOM2N BIT #F5.RTB,$FMSK5 ;TASK HAVE RUN TIME BINDING?O BEQ 135$ ;IF EQ NOP5Q MOV H.NLUN(R2),R1 ;CALCULATE SIZE OF LUT EXTENSION R ASL R1 ; S ASL R1 ;/T ADD #77,R1 ;ROUND TO NEAREST 32. WORD BLOCKMU ASH #-6,R1 ;V MOV R1,H.LUTE(R2) ;SAVE SIZEP1W SUB R1,R0 ;SUBTRACT OUT SIZE OF LUT EXTENSIONRX135$:CY .ENDC ; DF C$$DFB & C$$RTBNZ[ ASH #6,R0 ;CONVERT TO BYTES8\ MOV P.REL(R4),R1 ;SET APR DISPLACEMENT OF DESTINATION*] MOV R1,R3 ;COPY TO SOURCE DISPLACEMENT*^ ADD T.OFF(R5),R1 ;CALCULATE SOURCE BIAS*_ MOV #120000,R2 ;SET SOURCE DISPLACEMENT/` MOV #140000,R4 ;SET DESTINATION DISPLACEMENT a CALL $BLXIO ;COPY HEADER$b MOV (SP)+,R4 ;RESTORE PCB ADDRESSc MOV R4,R3 ;RESTORE POINTER+d ADD #P.STAT,R3 ;TO PARTITION STATUS WORDS+e MOV HDRDB,KISAR6 ;MAP TO EXTERNAL HEADERR0f MOV #140000,R0 ;SET VIRTUAL ADDRESS OF HEADERgh .IF DF F$$MAPi5j BIT #T4.FMP,T.ST4(R5) ;TASK HAVE FAST MAP ENABLED?Ik BEQ 1371$ ;IF EQ NOP4l MOVB T.HDLN(R5),R1 ;GET LENGTH OF HEADER IN BYTES%m ASH #6,R1 ;CONVERT TO BYTE OFFSETS6n ADD #140000-<64.*H$$FMX>,R1 ;POINT TO FAST MAP AREA2o MOV R1,H.FMAP(R0) ;SET ADDRESS OF FAST MAP AREA5p MOV #<<+15.>/16.>,R2 ;GET NUMBER OFIq ;PASSES THROUGH LOOPr137$: .REPT 16.S,s CLR (R1)+ ;CLEAR A WORD OF FAST MAP AREAt .ENDRu v SOB R2,137$ ;LOOP UNTIL DONEw1371$:x .ENDC ; DF F$$MAPyz .IF DF C$$DFB & C$$RTBV{5| BIT #T4.DFB,T.ST4(R5) ;TASK HAVE DEFERRED BINDING?D} BEQ 138$ ;IF EQ NO~2 BIT #F5.RTB,$FMSK5 ;TASK HAVE RUN TIME BINDING? BEQ 138$ ;IF EQ NO> MOVB T.HDLN(R5),R1 ;GET LENGTH OF HEADER IN 32. WORD BLOCKS .IF DF F$$MAP6 BIT #T4.FMP, T.ST4(R5) ; TASK HAVE FAST MAP ENABLED BEQ 1375$ ; IF EQ NO$4 SUB #H$$FMX, R1 ; TAKE FAST MAPPING INTO ACCOUNT1375$: .ENDC ; DF F$$MAP" TST H.LUTE(R0) ;ARE THERE LUNS? BEQ 138$ ;IF EQ NO LUNS$9 SUB H.LUTE(R0), R1 ;SUBTRACT OUT SIZE OF LUT EXTENSIONE# ASH #6, R1 ;GET OFFSET IN BYTESO. ADD #MAP6, R1 ;GET ADDRESS OF LUT EXTENSION( MOV R1,H.LUTE(R0) ;STORE IT IN HEADER/ ADD #H.NLUN,R0 ;GET ADDRESS OF LUT IN HEADERR, MOV (R0)+,R2 ;GET NUMBER OF WORDS TO COPY  ASL R2 ; MOV R2,-(SP) ;SAVEE@1377$: MOV (R0)+,(R1)+ ;COPY THE HEADER LUT INTO THE EXTENSION  SOB R2,1377$ ;LOOP UNTIL DONE3 MOV #MAP6+H.NLUN+2,R1 ;POINT TO HEADER LUT AGAINN  MOV (SP)+,R2 ;GET SIZE OF LUT)1378$: CLR (R1)+ ;CLEAR OUT HEADER LUT  SOB R2,1378$ ;LOOP UNTIL DONE8138$: MOV #MAP6, R0 ;POINT BACK TO BEGINNING OF HEADER .ENDC ; DF C$$DFB & C$$RTBT BR 14000$ ;RE-ENTER CODE .ENDC ; DF X$$HDR(139$: ASR R1 ;CONVERT LENGTH TO WORDS7140$: MOV (R2)+,(R0)+ ;MOVE TASK HEADER TO CORE BLOCK+# DEC R1 ;ANY MORE WORDS TO MOVE?E BGT 140$ ;IF GT YES / MOV P.HDR(R4),R0 ;GET ADDRESS OF TASK HEADERO'14000$: TSTB IOSB ;SUCCESSFUL READ ?  BMI 1421$ ;IF MI NO:& BIT #PS.CKP,(R3) ;CHECKPOINT READ?) BNE 1401$ ;IF NE YES, DON'T TOUCH LUTO .IF DF S$$LIB: CLR H.SMAP(R0) ;INITIALIZE SUPERVISOR AND DATA MAP MASK .ENDC ; DF S$$LIB7 CALL REBIND ;BIND LUT AND WINDOWS TO EXEC ADDRESSESL1401$: ;REFERENCE SYMBOL) .IF DF M$$PRO/ MOV H.WND(R0),R1 ;POINT TO NUMBER OF WINDOWS) MOV (R1)+,-(SP) ;GET NUMBER OF WINDOWSR.141$: TST W.BPCB(R1) ;IS THIS WINDOW MAPPED? BEQ 142$ ;NO IF EQ: MOV W.BATT(R1),R2 ;GET ADDRESS OF ATTACHMENT DESCRIPTOR  BEQ 142$ ;IF EQ NOT ATTACHED3 BITB #AS.RBP,A.STAT(R2) ;SHOULD BYPASS BE RESET?S BEQ 1411$ ;NO IF EQV/ BIC #100000,W.BLPD(R1) ;RESET BYPASS IN LPDR& BICB #AS.RBP,A.STAT(R2) ;RESET FLAG71411$: BITB #AS.SBP,A.ST00bUpomkTADATADATADATADATADATAAT(R2) ;SHOULD BYPASS BE SET? BEQ 142$ ;NO IF EQ- BIS #100000,W.BLPD(R1) ;SET BYPASS IN LPDRW& BICB #AS.SBP,A.STAT(R2) ;RESET FLAG,142$: ADD #W.BLGH,R1 ;POINT TO NEXT WINDOW DEC (SP) ;ANY WINDOWS LEFT? BGT 141$ ;YES IF GT  TST (SP)+ ;CLEAN THE STACK .ENDC1421$: ;REFERENCE SYMBOL. .IF DF S$$WPC6 MOVB $SWPR,H.SPRI(R0) ;INITIALIZE SWAPPING PRIORITY .ENDC5 MOV H.WND(R0),R1 ;POINT TO NUMBER OF WINDOW BLOCKST. CALL $MAPTK ;MAP FIRST TASK ADDRESS WINDOW( CMPB #17,H.IPS(R0) ;VALID TASK IMAGE?2 BNE 1431$ ;IF NE NO TREAT AS UNSUCCESSFUL READ143$: TSTB IOSB ;READ ERROR?1 BPL 1439$ ;IF PL NO; &; REGION LOAD FAILURE (SYSTEM STATE); J; THE FIXED BIT IS CLEARED AND PS.LFR IS SET TO DENOTE THE LOAD FAILURE.F; IF THE REGION IS A TASK REGION, THEN THOSE HEADER FIELDS WHICH AREE; REQUIRED TO GET THE TASK THROUGH THE ABORT PROCESS ARE FABRICATEDI0; HERE. (ALL MAPPED TASKS ARE ABORTED LATER.);R/1431$: BIS #PS.LFR,(R3) ;SIGNIFY LOAD FAILUREL+ BIT #PS.COM,(R3) ;IS IT A COMMON REGION?  BNE 1439$ ;IF NE YES' MOV #77406,(R1) ;SET ACCESS LAST PDR$< MOV #UISDR0&377+<1*256.>,-(R1) ;SET FIRST PDR AND # PDR'S; MOV H.WND(R0),-(SP) ;GET ADDR OF NUMBER OF WINDOW BLOCKSO+ MOV #1,@(SP)+ ;INDICATE ONE WINDOW BLOCKT .IF DF, U$$DASH= BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH SEPARATE I/D SPACE?O BEQ 1435$ ;IF EQ, NO; MOV (R1),-20(R1) ;COPY FIRST PDR AND # PDR'S TO WINDOW 0/ MOV 2(R1),-16(R1) ;COPY LAST PDR TO WINDOW 01435$: ;REFERENCE LABEL .ENDC ; DF U$$DAS9 CLR H.FPSA(R0) ;CLEAR FLOATING POINT SAVE AREA POINTER3 MOV R0,H.GARD(R0) ;INITIALIZE GUARD WORD POINTERP ADD #H.TKVL+2,H.GARD(R0) ;E; 2; POST PROCESSING FOR REGION LOAD (SYSTEM STATE)$; INITIAL TASK LOAD INITIALIZATION;J; FOR THE INITIAL LOAD OF A TASK REGION, REQUEST OR FIX, THE LOADER MUSTD; ATTACH THE TASK TO ANY REGIONS WHICH IT HAS BEEN LINKED TO. THEI; TASK'S ATTACHMENT QUEUE MAY NOT BE EMPTY DUE TO THE SEND BY REFERENCEFH ; DIRECTIVE. IF THE TASK IS NOT BEING FIXED, $BILDS IS CALLED TO INIT9 ; ITS STACK AND PLACE THE TASK IN THE ACTIVE TASK LIST.G ;W " 1439$: BIT #PS.COM,(R3) ;COMMON? BNE 150$ ;IF NE, YES .IF DF, U$$DASA' CALL CALDMK ;CALCULATE D SPACE MASKA .ENDC ; DF U$$DAS% BIT #PS.CKP,(R3) ;CHECKPOINT READ?  BNE 150$ ;IF NE YES 5 MOV H.WND(R0),R3 ;POINT TO NUMBER OF WINDOW BLOCKS $ MOV #LDRBK,R1 ;POINT TO SAVE AREA0 MOV (R3)+,(R1)+ ;SAVE NUMBER OF WINDOW BLOCKS MOV R5,R0 ;COPY TCB POINTERB9 ADD #T.ATT,R0 ;POINT TO ATTACHMENT DESCRIPTOR LISTHEADC& MOV R0,-(SP) ;SAVE LISTHEAD POINTER, MOV (R0)+,(R1)+ ;SAVE FIRST LISTHEAD WORD  .IF DF U$$DAS!," MOV (R0),(R1)+ ;SAVE SECOND LISTHEAD WORD#$ .IFF ; DF U$$DAS%+& MOV (R0),(R1) ;SAVE SECOND LISTHEAD WORDE'( .IFTF ; DF U$$DAS)4* MOV (SP)+,(R0) ;REINITIALIZE SECOND LISTHEAD WORD+, .IFT ; DF U$$DASB-/. CLR (R1) ;INIT TEMPORARY TO ZERO (INDICATESM/ ;NOT D-SPACE TASK LATER,20 CLR MUDPT ;CLEAR POINTER TO D WINDOW IN HEADER1 ;OF MULTI-USER I/D TASK)2 BIT #T4.DSP,T.ST4(R5) ;IS IT D SPACE ?M3 BEQ 145$ ;IF EQ NO/4 MOV R3,(R1) ;SAVE POINTER TO I SPACE WINDOWV*5 ADD #W.BLGH,R3 ;POINT TO D SPACE WINDOW(6 DEC -6(R1) ;COUNT AS ONE LESS WINDOW37 BIT #T4.MUT,T.ST4(R5) ;IS IT A MULTI-USER TASK ?S8 BEQ 145$ ;IF EQ NO<9 MOV #<2*W.BLGH>,MUDPT ;INIT OFFSET FROM D SPACE WINDOW TO: ;D SPACE RO WINDOW,; ADD R3,MUDPT ;FORM REAL ADDRESS OF WINDOW<= .IFTF ; DF U$$DAS>7?145$: CLR R1 ;CLR NEXT ATTACHMENT DESCRIPTOR ADDRESSI2@ MOV (R3),R2 ;PICK UP NEXT PCB ADDRESS (W.BPCB)!A BEQ 148$ ;IF EQ THERE IS NONE,BC .IFT ; DF U$$DASSD8E CMP R3,MUDPT ;IS THIS RO D WINDOW IN AN I/D MU TASK ?F BNE 1455$ ;IF NE NOL4G MOV W.BATT-W.BLGH(R3),R1 ;GET ADDRESS OF RO I ADB/H MOV R1,W.BATT(R3) ;SET ADDRESS OF ATTACHMENTBI ;DESCRIPTORF-J BR 00b]pp4nbl1481$ ;AND GO SET MAPPING COUNT IN ADBIKL .ENDC ; DF U$$DASM8N1455$: MOV #AS.RED,R4 ;SET FOR ATTACH WITH READ ACCESS/O BIT #4,W.BLPD(R3) ;MAPPED WITH WRITE ACCESS?IP BEQ 146$ ;IF EQ NO.Q BIS #AS.WRT,R4 ;ADD WRITE ACCESS FOR ATTACH&R146$: CALL $CRATT ;ATTACH TO REGIONS BCC 148$ ;IF CC SUCCESSFULT; NU; NO NEED TO CHANGE FOLLOWING REFERENCE TO $HEADR TO SUPPORT EXTERNAL HEADERV;T/W MOV @$HEADR,R0 ;RETRIEVE SAVED STACK POINTERD0X MOV R3,(R0)+ ;SAVE WINDOW BLOCK POINTER AS R4'Y MOV R5,(R0)+ ;SAVE TCB ADDRESS AS R5(Z MOV #147$,(R0) ;MODIFY RETURN ADDRESS,[ CALLR $TKWSE ;WAIT FOR SIGNIFICANT EVENT2\147$: CALL $SWSTK,$LOADR ;SWITCH TO SYSTEM STATE+] MOV R4,R3 ;RESTORE WINDOW BLOCK POINTERI!^ BR 145$ ;REATTEMPT THE ATTACH$?_148$: MOV R1,W.BATT(R3) ;SET ADDRESS OF ATTACHMENT DESCRIPTOR&` BEQ 1485$ ;IF EQ WINDOW NOT MAPPED(a MOV T.PCB(R5),R4 ;RESTORE PCB ADDRESS8b CMP A.PCB(R1),R4 ;IS ATTACHED REGION THE TASK REGION?/c BEQ 1481$ ;IF EQ YES, DON'T ACCESS IT AGAINVd MOV R5,R0 ;COPY TCB ADDRESSe MOV R3,-(SP) ;SAVE R3fgh .IF DF M$$PROij MOV R1,-(SP) ;SAVE R1$k MOV A.PCB(R1),R1 ;GET PCB ADDRESS3l CALL $SETBP ;SET UP CACHE BYPASS AS APPROPRIATELm MOV (SP)+,R1 ;RESTORE R1Ano .ENDCpq6r INCB A.MPCT(R1) ;INIT MAPPING COUNT THIS DESCRIPTOR-s MOV A.PCB(R1),R1 ;POINT TO ATTACHED REGION%t CALL $ACCRG ;ACCESS COMMON REGIONSu MOV (SP)+,R3 ;RESTORE R3Av BR 1485$ ;<w1481$: INCB A.MPCT(R1) ;INIT MAPPING COUNT THIS DESCRIPTOR3x1485$: ADD #W.BLGH,R3 ;POINT TO NEXT WINDOW BLOCKS+y DEC LDRBK ;ANY MORE WINDOWS TO PROCESS?Rz BGT 145$ ;IF GT YESA3{ MOV LDRBK+2,@T.ATT+2(R5) ;ADD ON OLD DESCRIPTORS | BEQ 149$ ;IF EQ IT WAS NULLM=} MOV LDRBK+4,T.ATT+2(R5) ;POINT TO LAST ORIGINAL DESCRIPTORR~149$: ;REFERENCE LABELEI; FOR AN I/D TASK, WE SKIPPED THE I SPACE WINDOW IN THE PRECEDING CODE.SI; WE WILL NOW FIX UP THE I SPACE WINDOW TO POINT TO THE SAME ATTACHMENTCN; DESCRIPTOR AS THE D SPACE WINDOW. SINCE THIS MAPPING IS STATIC, IT DOESN'TM; MATTER THAT THE MAPPING COUNT IN THE ADB WILL BE 1 INSTEAD OF 2, AND THIS5I; SIMPLIFIES THE MANAGEMENT OF T.STAT DURING THE TASK REQUEST SEQUENCE.Q .IF DF U$$DAS5 MOV LDRBK+6,R0 ;GET POINTER TO TASK I SPACE WINDOWS' BEQ 1495$ ;IF EQ NOT A D SPACE TASK> MOV W.BATT+W.BLGH(R0),W.BATT(R0) ;POINT TASK I SPACE WINDOW- ;TO SAME ATTACHEMENT DESCRIPTOR AS TASKE ;D SPACE WINDOW  .ENDC ; DF U$$DAS51495$: BIT #PS.FXD,P.STAT(R4) ;REGION BEING FIXED ?  BNE 170$ ;IF NE YESA& MOV R5,R0 ;SET ADDRESS OF TASK TCB5 CALL $BILDS ;BUILD A STACK FOR TASK JUST STARTING ; 2; POST PROCESSING FOR REGION LOAD (SYSTEM STATE); FINAL PROCESSING; 3; HERE THE LOADER PERFORMS THE FOLLOWING ACTIONS:I;N1; 1. UNBLOCK ALL TASKS MAPPED TO THE REGION.(H; 2. FREE UP ANY DYNAMIC CHECKPOINT SPACE FROM WHICH THE REGION MAY; HAVE BEEN READ.WB; 3. IF INSTALLED COMMON IS ONLY TO BE CHECKPOINTED TO SYSTEM=; CHECKPOINT FILE (PS.NWB=1), DEALLOCATE DISK PCB AND0*; CONVERT COMMON TO A PLAS REGION.A; 4. CHECK FOR A PENDING CHECKPOINT REQUEST AND INITIATE THEN5; CHECKPOINT OPERATION IF THERE IS A REQUEST.9; 5. DECLARE RECEIVE AST'S FOR TASKS'S WITH NONEMPTY; RECEIVE QUEUES. ; ; INPUTS: ;N; R4=PCB ADDRESS OF REGION.I$; R5=TCB ADDRESS (IF TASK REGION).;Y ; OUTPUTS:;D5; R4 IS PRESERVED IF COMMON REGION OR LOAD FAILURE.I; R5 IS PRESERVED.;H-150$: CALL 170$ ;SERVICE REGION LOAD ASTS, ;DEALLOCATE CKP SPACE  ;AND UNBLOCK TASKS5 MOV R4,R3 ;RECALCULATE ADDRESS OF PCB STATUS WORD ADD #P.STAT,R3 ;O. BIT #PS.LFR,(R3) ;LOAD FAILURE THIS REGION? BEQ 155$ ;IF EQ NO+ BIT #PS.COM,(R3) ;IS IT A COMMON REGION?S* BEQ 155$ ;IF EQ NO, DO NOT FREE MEMORY1 BIC #PS.CKR,(R3) ;CLEAR CHECKPOINT REQUEST BITN. BIS #PS.OUT,(R3) ;MARK REGION OUT OF MEMORY& MOV R4,R1 ;COPY REGION PCB ADDRESS)00bepomkTADATADATADATADATADATA CALLR $RLPR1 ;RELEASE REGION'S MEMORY1.155$: BIC #PS.CKP,(R3) ;CLEAR CHECKPOINT BIT7 BIT #PS.NWB,(R3) ;COMMON CHECKPOINT TO SYSTEM FILE ?R1 BEQ 157$ ;IF EQ, NO. CHECKPOINTS TO TASK FILET, BIC #PS.NWB,(R3) ;DON'T NEED THIS ANYMORE4 MOV P.DPCB-P.STAT(R3),R0 ;GET ADDRESS OF DISK PCB* CLR P.DPCB-P.STAT(R3) ;AND ZERO POINTER' MOV #P.DLGH,R1 ;GET SIZE OF DISK PCBR! MOV R3,-(SP) ;SAVE PCB POINTERN$ CALL $DEACB ;DEALLOCATE DISK PCB# MOV (SP)+,R3 ;RESTORE COMMON PCBN0157$: BIT #PS.CKR,(R3) ;CHECKPOINT REQUESTED ? BEQ 169$ ;IF EQ NO2 BIC #PS.CKR,(R3) ;CLEAR CHECKPOINT REQUEST FLAG! MOV R4,R1 ;SET ADDRESS OF PCBR% CALLR $ICHKP ;INITIATE CHECKPOINTT169$: RETURN9170$: BIT #PS.AST,P.STAT(R4) ;REGION LOAD AST PENDING ?) BEQ 180$ ;IF EQ NO6 MOV P.STAT(R4),-(SP) ;SAVE CURRENT STATUS OF REGION7 BIC #^C,(SP) ;CLEAR ALL BUT OUT & CKP . BIC (SP),P.STAT(R4) ;CLEAR THOSE FOR REGION" MOV R5,-(SP) ;SAVE NON-VOLATILE MOV R4,-(SP) ;REGISTERS2 MOV P.SWSZ(R4),R0 ;POINT TO FIRST (OR ONLY) AST% MOV (R0),P.SWSZ(R4) ;CLOSE UP LISTS# BNE 175$ ;IF NE STILL MORE LEFT 0 BIC #PS.AST,P.STAT(R4) ;INDICATE NO ASTS LEFT7 MOV P.SIZE(R4),P.SWSZ(R4) ;RESET SWAP SIZE FROM SIZEN)175$: CALL $DSPKA ;DISPATCH KERNEL ASTO3 DEC T.STAT(R0) ;UNBLOCK THE TASK FOR THIS REGION ! BNE 177$ ;IF NE STILL BLOCKEDS1 CALL $SETCR ;SET CONDITIONAL SCHEDULE REQUEST),177$: MOV (SP),R1 ;GET REGION PCB ADDRESS0 CALL $DEARG ;DEACCESS REGION ON TASKS BEHALF" MOV (SP)+,R4 ;RESTORE REGISTERS MOV (SP)+,R5 ;06 BIS (SP)+,P.STAT(R4) ;RESET OUT/CKP STATUS TO PRIOR BR 170$ ;AND GO AGAINA!180$: CALLR 91$ ;UNBLOCK TASKSS;.A; REBIND:: - bind installed tasks to exec database at load timeH;E?; inserts correct UCB addresses into LUT from device list andBG; PCB addresses into Task Address Window Blocks from task PCB vector. ;SA; replaces LOADR routine SCHDR for tasks using deferred bindingDE; (note that existing SCHDR function must be preserved and used forM*; tasks which override deferred binding);T'; created 5-Feb-1987 by L.B. McCulleyD;G ; INPUTS:8;A; R0 = HEADER ADDRESS; R5 = TCB ADDRESS;n ; OUTPUTS:;oB; IOSB MAY BE SET TO -1 IF SCHDR IS CALLED AND HEADER IS INVALID;oD; TASK LUT AND WINDOW BLOCKS (W.BPCB OFFSET) CORRECTLY INITIALIZED; FOR THIS EXEC'S DATABASE.;; DESTROYS R1, R2u7; PRESERVES R0, R3, R4, R5 (ALL MEANINGFUL TO CALLER)h;i REBIND:c# SAVNR ; COROUTINE SAVES R4/R58  MOV R3,-(SP) ; SAVE OTHER REGISTERS NEEDED BY CALLER  MOV R0,-(SP)    .IF DF C$$DFB 7 BIT #F5.DFB,$FMSK5 ; SYSTEM USING DEFERRED BINDING?D! BEQ 2$ ; NO, GO CHECK HEADER < BIT #T4.DFB,T.ST4(R5) ; THIS TASK USING DEFERRED BINDING?$ BNE 5$ ; YES, GO DO THE BINDING2$:F .ENDC ; DF C$$DFB% TST $FMSK4 ; LUT SCAN DISABLED ?, BMI 200$ ; YES, SO SKIP IT, JUST RETURN4 CALL SCHDR ; GO CHECK HEADER ALREADY BOUND OKAY- BR 200$ ; RETURN AFTER REGISTER RESTORESR .IF DF C$$DFB5$: .IF DF C$$RTBR@ BIT #F5.RTB, $FMSK5 ; SHOULD LUN BINDING BE FURTHER DEFERED?6  BNE 100$ ; IF NE, YEP - JUST BIND WINDOWS FOR NOW!" .ENDC ; DF C$$RTB#$ MOV R0,R3 ; R0 -> HEADERD% ADD #H.NLUN,R3 ; R3 -> LUT-& MOV (R3)+,R2 ; R2 = NUMBER OF LUT ENTRIES$#' BEQ 100$ ; NONE, GO DO WINDOWSD(;E); GET NEXT LUN AND ASSIGN IT*;,+10$:), CMP (R3),#"OV ; OVERLAY PSUEDO DEVICE?E- BNE 12$ ; NOG. MOV T.LDV(R5),(R3)+ ; YES, GET TASK LOAD DEVICE UCB ADDRESS FROM TCB / BR 80$ ;0(112$: MOV $DEVHD,R4 ; FIND DEVICE TABLE)215$: CMP D.NAM(R4),(R3) ; FOUND IT YET? 3 BEQ 20$ ; YES, NOW SET UNITF%417$: MOV D.LNK(R4),R4 ; NEXT DEVICE5 BNE 15$ ; MORE TO GO)6 ; NO MORE DEVICES, CAN'T ASSIGN LUN(<7 CLR (R3)+ ; COULDN'T FIND MATCHING DEVICE, DON'T BIND IT 8 BR 80$W920$::; ;; at this pointS<; R2=remaining LUT entries=; R3->unit # in 00bmpp4nblLUTD >; R4->dcb?;1/@ MOVB 2(R3),R1 ; RETRIEVE DESIRED UNIT NUMBERLBA CMPB R1,D.UNIT(R4) ; CHECK FOR UNIT NUMBER IN RANGE OF THIS DCB%B BLT 17$ ; TOO LOW, TRY OTHER DCBSNC CMPB R1,D.UNIT+1(R4)T&D BGT 17$ ; TOO HIGH, TRY OTHER DCBS:E MOVB D.UNIT(R4),R0 ; EXTRACT FIRST UNIT NUMBER FROM DCB(F SUB R0,R1 ; GET RELATIVE UNIT NUMBER(G BEQ 22$ ; OPTIMIZATION FOR FIRST UCB%H MOV D.UCBL(R4),R0 ; GET UCB LENGTH!I CALL $MUL ; GET OFFSET TO UCB 4J22$: ADD D.UCB(R4),R1 ; GET ADDRESS OF DESIRED UCB'K MOV R1,(R3)+ ; STORE UCB IN TASK LUNVL;M80$: CLR (R3)+ ; CLEAR LUT FILES-11 WINDOW BLOCK POINTERMN O DEC R2 ; ALL UNITS ASSIGNED?P BNE 10$ ; NO, DO NEXT ONECQ;1R; BIND WINDOW BLOCKSS; T100$: .U MOV (SP),R0 ; RESTORE R0 POINTER TO HEADER1V MOV H.WND(R0), R1 ; R1 => WINDOW BLOCK STORAGEA'W MOV (R1)+, R2 ; R2 = # WINDOW BLOCKSIX?Y MOV T.PCB(R5),W.BPCB(R1) ; SET TASK REGION PCB INTO WINDOW 0LZ DEC R2 ; ONLY TASK REGION? [ BEQ 200$ ; YEP, MUST BE DONE\.] ADD #W.BLGH,R1 ; POINT TO NEXT WINDOW BLOCK^'_ .IFDF U$$DAS ; USER D-SPACE SUPPORTW`8a BIT #T4.DSP,T.ST4(R5) ; TASK WITH SEPERATE I/D SPACE?b BEQ 110$ ; NOPEX=c MOV T.PCB(R5),W.BPCB(R1) ; SET TASK D-SPACE WINDOW PCB PTRPd DEC R2 ; LAST REGION?Te BEQ 200$ ; YEP, DONE.f ADD #W.BLGH,R1 ; POINT TO NEXT WINDOW BLOCKg110$: h .IFTF ;U$$DASi.j MOV T.PCBV(R5),R4 ; R4 => TASK'S PCB VECTORDj BEQ 150$ ; NONE, CAN'T DO IT, GO CLEAR ANY UNUSED WINDOWS;LBM156j ;LBM156,l MOVB (R4)+,R3 ; LENGTH OF VECTOR ;**-1!m TSTB (R4)+ ; SKIP USAGE COUNT no .IFT ;U$$DAS#p+q BIT #T4.MUT,T.ST4(R5) ; MULTI-USER TASK?2r BEQ 120$ ; NO, SKIP RO SECTION WINDOW HANDLINGr ;LBM156OGr MOV (R4)+,W.BPCB(R1) ; SET PCB ADDRESS IN RO SECTION WINDOW ;LBM156#8r ADD #W.BLGH,R1 ; POINT TO NEXT WINDOW BLOCK ;LBM156r ;LBM156TAr BIT #T4.DSP,T.ST4(R5) ; USER D-SPACE MULTI-USER TASK? ;LBM156D>r BNE 130$ ; YES, DO D-SPACE RO AND COUNT RO WINDOW ;LBM156@r BEQ 134$ ; NO, SKIP RO D-SPACE, JUST COUNT RO WINDOW ;LBM156r ;LBM156Jr ; .IFF U$$DAS DROPS INTO STATIC MAPPING REBIND LOOP PROPERLY ;LBM156r ;LBM156Ir .ENDC ;U$$DAS ;LBM156Lr ;LBM156WMr120$: BIT #1, (R4)+ ; CLUSTER LIB PCB VECTOR ENTRY? (YES=NO WINDOW) ;LBM156 ?r BNE 140$ ; LO BIT SET FLAGS NO WINDOW BLOCK TO INIT ;LBM156Tr ;LBM156UCr130$: MOV -2(R4),W.BPCB(R1) ; SET PCB ADDRESS IN WINDOW ;LBM156E8r ADD #W.BLGH,R1 ; POINT TO NEXT WINDOW BLOCK ;LBM156r ;LBM156T8r134$: DEC R2 ; COUNT DOWN NUMBER OF WINDOWS ;LBM1564r BEQ 200$ ; NO MORE WINDOWS IS ALL DONE ;LBM156r ;LBM156M>r140$: DEC R3 ; COUNT DOWN NUMBER OF PCBS IN VECTOR ;LBM1569r BNE 120$ ; LOOP UNTIL ALL PCBS DONE, THEN... ;LBM156 r; ;LBM156,r; CLEAR UNUSED WINDOW BLOCKS ;LBM156r; ;LBM156r150$: ;LBM156/r CLR W.BPCB(R1) ; CLEAR WINDOW PCB ;LBM156 ;r ADD #W.BLGH,R1 ; POINT R1 TO NEXT WINDOW BLOCK ;LBM156B4r SOB R2,150$ ; CLEAR ALL UNUSED WINDOWS ;LBM156r ;LBM156 ! .ENDC ; DF C$$DFB ;**-29N200$: MOV (SP)+,R0) MOV (SP)+,R3 ; RESTORE SAVED REGISTERSO  RETURNM;BJ; THIS ROUTINE SCANS THE HEADER AND VALIDATES THE LUT AND WINDOW BLOCKS.E; TASKS WHICH ARE SIMULTANEOUSLY INSTALLED IN TWO DIFFERENT SYSTEMS6J; MAY HAVE INVALID UCBS IN THE LUT OR INVALID PCBS IN THE WINDOW BLOCKS.-; IF THIS IS THE CASE, THE TASK IS ABORTED.N;T ; INPUTS: ; ; R0=HEADER ADDRESS.; R5=TCB ADDRESS.D;O ; OUTPUTS:; /; IOSB IS SET TO -1 IF THE HEADER IS INVALID.N;; R0 - R3 ARE DESTROYED.;+"SCHDR: TST H.NLUN(R0) ;ANY LUNS? BEQ 100$ ;IF EQ NO8 BIT #T2.ABO,T.ST2(R5) ;TASK ALREADY MARKED FOR ABORT? BNE 200$ ;IF NE YESR+ MOV #$DEVHD,R2 ;POINT TO DEVICE LISTHEADY&10$: MOV (R2),R2 ;POINT TO NEXT DCB BEQ 60$ ;IF EQ END OF LIST4 MOVB D.UNIT+1(R2),-(SP) ;CALCULATE NUMBER OF UCBS SUB00bupomkTADATADATADATADATADATA D.UNIT(R2),(SP) ; INCB (SP) ;E- MOV D.UCB(R2),R4 ;GET ADDRESS OF FIRST UCBP&20$: MOV R0,R1 ;COPY HEADER ADDRESS* ADD #H.NLUN,R1 ;POINT TO NUMBER OF LUNS# MOV (R1)+,R3 ;GET NUMBER OF LUNSN30$: DEC R3 ;ANY LUNS LEFT? BLT 50$ ;IF LT NOA CMP (R1)+,R4 ;UCB MATCH?R BNE 40$ ;IF NE NO2# BIS #1,(R1) ;INDICATE UCB MATCHP*40$: TST (R1)+ ;POINT TO NEXT LUT ENTRY BR 30$ ;SCAN NEXT LUT ENTRY +50$: ADD D.UCBL(R2),R4 ;POINT TO NEXT UCB) DECB (SP) ;ANY UCBS LEFT?S BNE 20$ ;IF NE YES TST (SP)+ ;CLEAN THE STACK BR 10$ ;SCAN NEXT DCBC)60$: MOV R0,R1 ;COPY ADDRESS OF HEADER1 ADD #H.NLUN,R1 ;POINT TO NUMBER OF LUT ENTRIES(* MOV (R1)+,R3 ;GET NUMBER OF LUT ENTRIES70$: DEC R3 ;ANY LEFT?$ BLT 100$ ;IF LT NO' TST (R1)+ ;POINT TO SECOND LUT WORD2 BEQ 80$ ;IF EQ NOT ASSIGNEDA1 TST (R1) ;UCB ADDRESS FOUND IN DEVICE TABLES? BNE 80$ ;IF NE YES+ CLR H.NLUN(R0) ;CLEAR THE NUMBER OF LUNSX BR 150$ ;ABORT THE TASKB(80$: CLR (R1)+ ;CLEAR SECOND LUT WORD BR 70$ ;SCAN NEXT LUT ENTRY 8100$: MOV H.WND(R0),R1 ;POINT TO THE NUMBER OF WINDOWS& MOV (R1)+,R3 ;GET NUMBER OF WINDOWS%110$: DEC R3 ;LOOK FOR NEXT WINDOWM# BLE 200$ ;IF LE NO MORE WINDOWSN' ADD #W.BLGH,R1 ;POINT TO NEXT WINDOW(' MOV (R1),R0 ;IS THIS WINDOW MAPPED?8 BEQ 110$ ;IF EQ NO* MOV P.MAIN(R0),R0 ;GET MAIN PCB ADDRESS5 MOV #$PARHD,R2 ;GET ADDRESS OF PARTITION LIST HEADE-120$: MOV (R2),R2 ;GET ADDRESS OF NEXT PCBT BEQ 150$ ;IF EQ END OF LISTC+ CMP R0,R2 ;PCB FOUND IN PARTITION LIST? & BNE 120$ ;IF NE NO CONTINUE SEARCH"130$: DEC R3 ;ANY WINDOWS LEFT? BLE 200$ ;IF LE NO- ADD #W.BLGH,R1 ;POINT TO NEXT WINDOW BLOCK2 BR 110$ ;CONTINUE SCANNING&150$: MOV #S.CINS,R0 ;GET ABORT CODE MOV R5,R1 ;COPY TCB ADDRESSA  MOVB #-1,IOSB ;SET ERROR CODE  CALLR $ABTSK ;ABORT THE TASK200$: RETURN ;;+1;**-CALDMK--CALCULATE TASKS DATA SPACE MAP MASK;;DE; THIS ROUTINE IS CALLED TO CALCULATE THE I/D OVERMAP MASK FROM THEB; TASKS ADDRESSING WINDOWS.B;0 ; INPUTS:C;U; R0 = HEADER ADDRESS ; R5 = TCB ADDRESS;2 ; OUTPUTS:;A ; R1 = DATA SPACE MAPPING MASK;C$; REGISTERS R0 - R3 ARE DESTROYED.; ;- .IF DF U$$DAS&CALDMK: MOV R3,-(SP) ;SAVE REGISTERS MOV R2,-(SP) ;O MOV R1,-(SP) ;B5 MOVB H.DMAP(R0),-(SP) ;INITIALIZE D SPACE MAP MASK MOV R0,-(SP) ;L> BIT #T4.DSP,T.ST4(R5) ;TASK BUILD WITH SEPARATE I/D SPACE ?3 BEQ 20$ ;IF EQ NO, RETURN WITH ALL OVERMAP MASKK5 MOV H.WND(R0),R0 ;POINT TO NUMBER OF WINDOW BLOCKSH8 MOV (R0)+,R2 ;GET NUMBER OF WINDOWS, ADVANCE TO FIRST;10$: DEC R2 ;COUNT ONE LESS WINDOW (REMEMBER THAT WINDOWR& ;0 CAN NEVER BE A D SPACE WINDOW  BLE 20$ ;IF LE DONE '  ADD #W.BLGH,R0 ;POINT TO NEXT WINDOW(   ASSUME W.BPCB,0 " TST (R0) ;THIS WINDOW MAPPED ? BEQ 10$ ;IF EQ NOM& MOVB W.BFPD(R0),R3 ;GET PDR ADDRESS# BIT #20,R3 ;MAPPED TO D SPACE ?? BEQ 10$ ;IF EQ NO,( SUB #UDSDR0,R3 ;ADJUST TO OFFSET ZERO! ASR R3 ;CONVERT TO BYTE INDEXI) MOVB W.BNPD(R0),R1 ;GET NUMBER OF PDRSF( ADD R3,R1 ;FORM ENDING PDR NUMBER +10 MOVB $BCMSK-1(R1),R1 ;GET MASK UP TO LAST APR1 BICB $BCMSK-1(R3),R1 ;GET MASK UP TO FIRST APR$) BISB R1,2(SP) ;MERGE WITH REST OF MASK  BR 10$ ;AND CONTINUE+20$: MOV (SP)+,R0 ;RESTORE HEADER ADDRESS?. MOVB (SP)+,H.DMAP(R0) ;REWRITE HEADER VALUE" MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 ;  MOV (SP)+,R3 ;N! " RETURND#$ .ENDC ; DF U$$DAS%& .END $LOADRERT TO BYTE INDEXI) MOVB W.BNPD(R0),R1 ;GET NUMBER OF PDRSF( ADD R3,R1 ;FORM ENDING PDR NUMBER +10 MOVB $BCMSK-1(R1),R1 ;GET MASK UP TO LAST APR1 BICB $BCMSK-1(R3),R1 ;GET MASK UP TO FIRST APR$) BISB R1,2(SP) ;MERGE WITH REST OF MASK  BR 10$ ;AND CONTINUE+20$: MOV (SP)+,R0 ;RESTORE HEADER ADDRESS?. MOVB (SP)+,H.DMAP(R0) ;REWRITE HEADER VALUE" MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 ;00}pp4nbl .TITLE LOWCRN .IDENT /3.00/;WH; COPYRIGHT (c) 1984, 1985, 1986, 1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;B<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;T; D. N. CUTLER 11-AUG-73;;); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:;; P. J. BEZEREDI; J. M. LAWLER; B. S. MCCARTHY; R. T. PERRON;R+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:.;C; B. S. MCCARTHY Z ; T. LEKAS ; T. M. MARTIN; J. R. KAUFFMAN ; P. J. BEZEREDI; J. M. LAWLER 9; +; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:;L; J. W. BERZLE; B. S. MCCARTHY; C. A. SILVER; L. B. MCCULLEY;D+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:W; ; K. L. NOEL; +; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY: ;I ; K. L. NOEL; P.K.M. WEISS;Y; MODIFIED BY:;E; K. L. NOEL 29-SEP-87 V2.03C; *; KLN101 -- CHANGE REMOTE TASK COUNT TO 3;P; 8; LOW CORE POINTERS, TRAP VECTORS, AND INTERRUPT VECTORS;M@; THIS FILE MUST BE FIRST IN THE TASK BUILDER COMMAND FILE SINCE.; IT OCCUPIES LOCATIONS STARTING AT REAL ZERO.;L; MACRO LIBRARY CALLSS;C! .MCALL HDRDF$,HWDDF$,PCBDF$ L# HDRDF$ ;DEFINE HEADER OFFSETS E& HWDDF$ ;DEFINE HARDWARE REGISTERS - PCBDF$ ,,SYSDEF ;DEFINE PCB OFFSETS AND SIZE .PSECTL;.; LOCAL MACROS;O; GENVT-GENERATE VECTOR ENTRY9;P .MACRO GENVT ARGN .IF DF E$$NSI .WORD $NS'ARG .IFFP .WORD $NONSIE .ENDC .WORD PR7!<<<$$$-START>/4>&17>C .ENDM .MACRO NSIT .IF DF E$$LOG&E$$NSIU CALL $NSIER .IFFN IOT .ENDC .ENDM NSISTART: .REPT V$$CTR/4$$$=.  GENVT \<<$$$-START>/<4*20>> .ENDR .=START+4 0 .WORD $TRP04 ;TRAPS TO 4 (ODD,STACK,NONEX MEM) .WORD PR7 ;D4 .WORD $ILINS ;ILLEGAL (RESERVED) INSTRUCTION TRAPS .WORD PR7 ;.) .WORD $TRACE ;BREAK POINT (TRACE) TRAPSE .WORD PR7 ;N .WORD $IOTRP ; .WORD PR7 ;." .WORD $NONSI ;NONSENSE INTERRUPT .WORD PR7 ;E% .WORD $EMTRP ;EMT INSTRUCTION TRAPS7 .WORD PR7 ;& .WORD $TRTRP ;TRAP INSTRUCTION TRAPS .WORD PR7 ;F .IF DF C$$CDA* JMP $CRASH ;JUMP TO CRASH DUMP ROUTINE  .IFF ; DF C$$CDA>% HALT ;HALT - NO CRASH DUMP SUPPORTR& BR .-2 ;DON'T ALLOW CONTINUE, EITHER .ENDC ; DF C$$CDA0.DSW:: .WORD .+2 ;ADDRESS OF DIRECTIVE STATUS .BLKW 1 ;DIRECTIVE STATUS WORD" .BLKW 1 ;FCS IMPURE AREA POINTER& .BLKW 1 ;FORTRAN IMPURE AREA POINTER6 .BLKW 1 ;OVERLAY RUN TIME SYSTEM IMPURE AREA POINTER! .BLKW 1 ;RESERVED FOR EXPANSIOND .BLKW 12. ;D. .WORD 0 ;CONSTANTLY CHANGING WORD FOR M9312., .WORD $ENVEC ;112 - FIXED POINTER TO TABLE$ ; OF NECESSARY ENTRY POINTS .BLKB V$$CTR-114 ; ;C; EXECUTIVE STACK AREA; 8 .ASCII /COPR. (C) DIGITAL 1983/ ;ASCII COPYRIGHT NOTICE .BLKW 49. ;SYSTEM STACK  T .IF DF P$$MON W3 .BLKW 16. ;DEFINE EXTRA STACK SPACE FOR P-MONITORA I .ENDC R .IF DF I$$C11 .BLKW 30. ;  .ENDC .IF DF P$$LAS4 .BLKW P.LGTH/2 ;DEFINE EXTRA STACK FOR PLAS SYSTEMS .ENDC . D .IF DF M$$NET- .BLKW 10. ;ADD 10. WORDS TO STACK SPACE FORE$ ;DECNET TO SUPPORT FDX CHARACTER ;INTERRUPT DEVICES.B .ENDC ; DF M$$NET!$UMR4:: .BLKW 1 ;USER'S SAVED R4I!$UMR5:: .BLKW 1 ;USER'S SAVED R5O!$UMPC:: .BLKW 1 ;USER'S SAVED PC !$UMPS:: .BLKW 1 ;USER'S SAVED PS.$STACK:: ;REF LABELC ; "; PROCESSOR IMPURE DATA AREA ;  . .IF DF M$$PRO &$PROC2::.BYTE 0 ;PROCESSOR NUMBER * 2%$PROCN::.BYTE 0 ;PROCESSOR NUMBER C . .ENDC F *$STKDP::.WORD 0 ;STACK DEPTH INDICATOR /$TKTCB::.WORD 0 ;POINTER TO CURRENT TASK TCB R7$CURPR::.WORD $PRTAB ;POINTER TO CURRENT TASK PRIORITY  0$SGFFR:: .WORD 0 ;POINTER INTO STACK FOR $SGFIN)$HFMSK::.WORD HF.EIS ;HARDWARE MASK WORD:) .WORD H2.BRG ;SECOND HARDWARE MASK WORD * ;H2.BRG IS SET BECAUSE THE VIRGIN BOOT) ;OF A PROFESSIONAL 300 SERIES MACHINE) ;IS CURRENTLY ALWAYS DONE ON A BRIDGER+ ;SYSTEM AND INITL DOES NOT SET THIS BITO00pomkTADATADATADATADATADATA2$HFEND:: ;REF. LABLE TO DELIMIT HARDWARE FEATURE ;MASK WORDS.<; $RBTAD IS THE ADDRESS OF THE RE-BOOT ENTRY TO THE BOOT ROM .IF DF B$$OOT2$RBTAD::.WORD B$$OOT ;ADDRESS OF REBOOT ROM ENTRY .ENDC ; DF B$$OOT ;FA; THE FOLLOWING BYTE IS A FLAG SET WHENEVER SUPERVISOR I SPACE ISEH; MAPPED READ/WRITE, MEANING THE PDR'S MUST BE CLEARED ON CONTEXT SWITCH;  R($SIRWF::.BYTE 0 ;SUPER I SPACE R/W FLAG/$CXDBL::.BYTE 0 ;CONTEXT SWITCH DISABLE FLAG '$SAHDB:: ;BIAS OF CURRENT TASK HEADER; .IF DF X$$HDR .WORD 06$SAVSP::.WORD $UMR4 ;SAVED SP - ALWAYS POINTS TO UMR4 .IFTF T2$SAHPT:: ;VIRTUAL ADDRESS OF CURRENT TASK HEADER .IFTO .WORD 0 .ENDC2$HEADR::.WORD 0 ;POINTER TO CURRENT TASK HEADER  .IF DF F$$MAP4$FMAPP::.WORD 0 ;POINTER TO FAST MAP AREA OF HEADER .ENDC ; DF F$$MAP<$RQSCH::.WORD $RQTAB ;POINTER TO CURRENT RESCHEDULE POINTER; H; THE FOLLOWING CELLS CONDITIONALLY DESCRIBE THE EXECUTIVE CONFIGURATION$; IF KERNEL DATA SPACE IS SUPPORTED.;D $ R .IF DF K$$DAS VE$ROEND::.WORD <<<$EXEND+77>&177700>/100>&1777 ;LENGTH IN 32 WD BLOCKST" ;OF R/O SECTION OF EXECUTIVE9$SCMOF::.WORD 0 ;OFFSET TO DATA SPACE OR 0 IF NOT LOADED  .WORD 3 ;ALLOCATION SIZE MASK 6$ICAVL::.WORD $ICBEG ;BEGINNING OF ALLOCATED ICB POOL% .WORD 0 ;DUMMY SIZE FOR FIRST BLOCKP  .IFF: R.$SCMOF:: ;MAKE SURE SYMBOL IS ALWAYS DEFINED  .ENDC O W ; C; UMR ALLOCATION LISTHEAD AND WAIT QUEUE LISTHEAD. THE ALLOCATION AF; LISTHEAD DOUBLES AS A DESCRIPTOR OF THE UMRS STATICALLY ALLOCATED TO!; THE EXEC AND ANYONE ELSE. 3 ;  .IF DF M$$EXT&U$$UMRW 4$UMRHD::.WORD 0 ;MAPPING ASSIGNMENT BLOCK LISTHEAD . .WORD UBMPR ;ADDRESS OF FIRST ASSIGNED UMR 6 .WORD N$$UMR ;NUMBER OF UMR'S STATICLY ASSIGNED * 4 /$UMRWT::.WORD 0,.-2 ;UMR WAIT QUEUE LISTHEAD Y  .ENDC ; DF M$$EXT&U$$UMR ; -; DATA STRUCTURES FOR EXECUTIVE IDLE CODE A ; +$IDLCT::.BYTE 0 ;IDLE PATTERN COUNT BYTE +$IDLFL::.BYTE 0 ;IDLE PATTERN FLAG BYTE )$IDLPT::.WORD 7760 ;IDLE PATTERN WORD T+ .WORD 0 ;WORKING STORAGE FOR IDLE PATTERNN ;O; SYSTEM POWER FAIL STACK ;D .IF DF P$$RFL U  .IF DF M$$PRO U9$PWKA0::.BLKW M$$PRO ;;;STORAGE FOR KINAR0 IN CPA'S AREA;+$PWCSR::.WORD FKCSR ;;;POINTER TO IIST CSRC1FKCSR: .WORD 0 ;;;CPA CSR (WHEN NO IIST PRESENT)   .ENDC R#$PWBTM::.BLKW 7 ;R0 THRU R5 AND SP  .IF DF M$$EXT' .BLKW 31.*2 ;UNIBUS MAPPING REGISTERSL .ENDC- .BLKW 25. ;MEMORY MANAGEMENT REGS & USER SPI  .IF DF F$$LPP' .BLKW 27. ;FLOATING POINT REGISTERS  .ENDC .IF DF K$$DAS .BLKW 8. ;KERNEL D SPACE APR'S P .ENDC K : .IF DF S$$LIB O( .BLKW 16. ;SUPER I SPACE PARS AND PDRS( .BLKW 16. ;SUPER D SPACE PARS AND PDRS .BLKW 1 ;SUPER SP( N .ENDC E .IF DF U$$DAS# .BLKW 16. ;USER D SPACE REGISTERSD .ENDC ; DF U$$DAS $PWSTK==.-2 ;REF LABEL/$POWSP:: .BLKW 1 ;SAVED SP FOR POWERFAIL STACKM .ENDC T G; "; FLOATING POINT SUPPORT WORK AREA; .IF DF F$$LPP'$FLSTS::.BLKW 2 ;FLOATING POINT STATUS<$FLFRK::.WORD $FLFTB ;POINTER FOR FLOATING POINT FORK BLOCK7$FLTCB::.BLKW 1 ;ADDRESS OF TCB CAUSING EXCEPTION TRAPS .ENDC;S9; SAVE AREA FOR ERROR LOGGING NONSENSE INTERRUPT HANDLINGR;( .IF DF E$$LOG&E$$NSID D"$VID:: .BLKB 1 ;VECTOR ID STORAGE#$NSI:: .BYTE -1 ;RECURSION COUNTERP$OPS:: .BLKW 1 ;OLD PS STORAGEP$OPC:: .BLKW 1 ;OLD PC STORAGEI9$ERLFK::.WORD $PBEZ ;POINTER TO ERROR LOGGING FORK BLOCKW  .ENDC ; DF E$$LOG&E$$NSI;S$; DATA STRUCTURES FOR PARITY SUPPORT;F; EXEC PARITY ERROR MESSAGER;O N .IF DF P$$RTY .NLIST BEX C$EXMSG::.ASCIZ <15><12>/***EXEC PARITY ERROR STOP***/<15><12><12> ;A .LIST BEX .EVEN;S#; INTERRUPT RECURSION LEVEL COUNTERD;$$PARLV::.WORD -1 ;D;L.; PARITY CONTROL STATUS 00pp4nblREGISTER ADDRESS TABLE;O; ******* NOTE WELL ! *******P;TD; THE FOLLOWING TABLES ARE REFERENCED IN INITL AND PARTY, AS WELL ASE; BY SAVE AND HRC. THE ADJACENCY OF THE ITEMS STARTING AT $PARTB ANDA; INCLUDING $MEMR1, $MPCSR, AND $CPUER IS NOT ONLY ASSUMED, IT ISGB; CRUCIAL AND MUST BE PRESERVED. NOTE ALSO THAT ANY CHANGE IN THEH; STRUCTURE OF $PARTB SHOULD PROBABLY BE REFLECTED IN $MKCSR AND $MKCS2,; BOTH FOUND IN SYSCM.$CSRTB:: ;REFERENCE LABELRE$MEMRG::.BYTE 16.,<172100&177400>/400,172100&377 ;MEMORY PARITY CSR'S > .BYTE 6. ,<177740&177400>/400,177740&377 ;CACHE CONTROL CSR'S= .BYTE 1. ,<177766&177400>/400,177766&377 ;CPU ERROR REGISTER  .BYTE 0 ;END OF TABLEA N2 .BLKW 1 ;DUMMY STORAGE FOR MEMORY ERROR REGISTER .IFTF ; DF P$$RTY5$PARTB::.WORD 1 ;DUMMY CSR FOR NONEXISTANT REGISTERSH .IFT ; DF P$$RTY;UE; TABLE OF CSR ADDRESSES. IF THE CSR DOES NOT EXIST, THE ENTRY POINTSOE; TO $PARTB ABOVE. THIS MUST BE THE CASE SO THAT CODE REFERENCING THE1E; CSRS PRIOR TO THE CSR SCAN (SUCH AS THE LOCK$ $EXECL IN INITL) WILL1*; ACCESS A DUMMY LOCATION, NOT LOCATION 0.;Y#$MEMR1:: ;MEMORY PARITY CSR TABLEC .REPT 16." .WORD $PARTB ;POINT TO DUMMY CSR .ENDR)$MPCSR:: ;VECTOR OF CACHE CSR ADDRESSESR .REPT 6.;" .WORD $PARTB ;POINT TO DUMMY CSR .ENDR .IFTF ; DF P$$RTY$CPUER:: ;CPU ERROR REGISTER" .WORD $PARTB ;POINT TO DUMMY CSR .IFT ; DF P$$RTYT;O%; PDP-11/70 CACHE PARITY STATUS TABLEA;S .IF DF P$$D70 ($MSTAT::.BLKW 2 ;FIRST TWO PARITY CSR'S($STAT:: .BLKW 1 ;MEMORY STATUS REGISTER" .BLKW 3 ;LAST THREE PARITY CSR'S.$ERTRK::.BYTE 44,120 ;ADDRESS/DATA GROUP 0  .WORD 0 ;TIME OF LAST ERRORY$ .BYTE 30,240 ;ADDRESS/DATA GROUP 1 .WORD 0 ;TIME OF LAST ERROR .WORD 0 ;END OF TABLED;C; NEW CACHE PARITY CSR CONTENTS;C$MPCTL::.WORD 1 ; .ENDC .IFF ; DF P$$RTYD$CSRTB:: ;REFERENCE LABEL .ENDC ; DF P$$RTY/; DATA AREA FOR DYNAMIC EXEC DEBUGGER INTERFACE  .IF DF D$$DXD&$DXDK5::.WORD 0 ;SAVED KINAR5 FOR DXD)$DXDRL::.WORD 0 ;RELOCATION BIAS FOR DXDL$$DXDEP::.WORD 0 ;ENTRY POINT TO DXD .ENDC ; D$$DXD ; ; DATA AREA FOR BUGCHECK SUPPORT;$BCFAC::.WORD 0 ;FACILITY CODE1$BCERR::.WORD 0 ;ERROR CODE;.#; DATA AREA FOR SYSTEM CRASH MODULEA;  I .IF DF C$$CDA2$CRBAE::.WORD 0 ;DEFINE EXISTENCE OF BAE REGISTER5 .IIF EQ C$$CDA-12 CDA$MS=0 ;MS RESIDENT CRASH DRIVERY2 .IIF EQ C$$CDA CDA$MS=0 ;LOADABLE CRASH DRIVERS 6 .IF DF CDA$MS ;MS RESIDENT OR LOADABLE CRASH DRIVER ,$MSCR1:: ;COMMAND BUFFER FOR MS CRASH DUMP2 .BLKW 5 ;NEED FOUR WORDS ON DOUBLE WORD BOUNDARY $MSCR2:: ;CHARACTERISTICS DATA, .WORD $MSCR3 ;LOW ORDER 16 BITS OF MESSAGE ;BUFFER ADDRESS  .WORD 0 ;HIGH ORDER 2 BITS' .WORD 14. ;SIZE OF THE MESSAGE BUFFERF .WORD 0 ;FLAG WORD R $MSCR3::.BLKW 7 ;MESSAGE BUFFER R .ENDC ;DF CDA$MS- .IIF EQ C$$CDA-16 CDA$DU=0I .IIF EQ C$$CDA-17 CDA$MU=0S .IF DF CDA$DU!CDA$MU!H$$GEN;D ; CRASH DATA BASE FOR DU DEVICES;R; *** NOTE WELL *** =; ANY CHANGES TO THIS DATABASE MUST ALSO BE MADE IN CRASH.MACW; COMMAND AND RESPONSE PACKETS .WORD 60 ;PACKET LENGTH1 .WORD 1 ;VIRTUAL CIRCUIT AND CREDIT/DEBIT FIELDB%CMDPKT: .WORD 1 ;COMMAND PACKET AREA .BLKW 23. ;. .BLKW 2 ;ENVELOPEE(RSPPKT: .BLKW 24. ;RESPONSE PACKET AREA .BLKW 2 ;E; COMMAND RINGS.RINGS:(RSP: .WORD RSPPKT ;RESPONSE PACKET RING- .WORD 100000 ; PACKET "OWNED" BY CONTROLLERC'CMD: .WORD CMDPKT ;COMMAND PACKET RING - .WORD 100000 ; PACKET "OWNED" BY CONTROLLERN; INITIALIZATION TABLE$MUCSH::2$DUCSH::.WORD CMDPKT, RSPPKT ;ADDRESSES OF PACKETS# .WORD 100000, RINGS ;STEPS 1 AND 2  .WORD 0, 1 ;STEPS 3 AND 4E% .WORD RSP ;ADDRESS OF RESPONSE RINGA .ENDC L .IFF ; DF C$$CDA2-$BCPC:: .WORD 0 ;BUGCHECK PC FOR TYPE DIRECT  .IFT ; DF C$$CDA($BCPC:: ;ALTERNATE LABEL FOR CRASH PC($CRUPC::.WORD 0 ;USER PC IS STORED HERE($CRUST::.WORD 0 ;USER PS IS STORED HERE .NLIST BEX 00pomkTADATADATADATADATADATAA$CRMS0::.ASCII <15><12><12>/CRASH -- CONT WITH SCRATCH MEDIA ON /N$CRDEV:: ;REFERENCE SYMBOL.IIF EQ C$$CDA-1, .ASCII /DT/R.IIF EQ C$$CDA-2, .ASCII /DK/,.IIF EQ C$$CDA-3, .ASCII /MT/0.IIF EQ C$$CDA-4, .ASCII /MM/P.IIF EQ C$$CDA-5, .ASCII /DB/.IIF EQ C$$CDA-6, .ASCII /DM/2.IIF EQ C$$CDA-7, .ASCII /DL/P.IIF EQ C$$CDA-10, .ASCII /DD/.IIF EQ C$$CDA-11, .ASCII /DR/.IIF EQ C$$CDA-12, .ASCII /MS/-.IIF EQ C$$CDA-13, .ASCII /DX/ ;NOT SUPPORTED -.IIF EQ C$$CDA-14, .ASCII /DY/ ;NOT SUPPORTEDM-.IIF EQ C$$CDA-15, .ASCII /MF/ ;NOT SUPPORTEDT.IIF EQ C$$CDA-16, .ASCII /DU/.IIF EQ C$$CDA-17 .ASCII /MU/A>.IIF EQ <.-$CRDEV> .ASCII /XX/ ;ALWAYS ALLOW FOR A DEVICE NAME$CRUNT::.BYTE <60+C$$RUN>A .ASCIZ <15><12><12>  C .IF DF M$$PRO C$CRMS1::.ASCIZ <15><12>/CRASH -- WAITING FOR PROCESSORS TO QUIESCE/EE$CRMS2::.ASCIZ <15><12>/CRASH -- PROCESSOR REGISTERS HAVE BEEN SAVED/AF$CRMS4::.ASCIZ <15><12>/CRASH -- SANITY TIMER EXPIRED ON PROCESSOR CP/A$CRMS5::.ASCIZ <15><12>/CRASH -- CRASH REQUESTED BY PROCESSOR CP/ $CRCPU::.ASCIZ /?/ .ENDC@$CRMS3::.ASCIZ <15><12>\CRASH -- I/O ERROR ON CRASH DUMP DEVICE\6$CRMS6::.ASCIZ <15><12>/CRASH -- ILLEGAL CRASH DEVICE/9$CRMS7::.ASCIZ <15><12>/CRASH -- CRASH DRIVER NOT LOADED/F=; ALL THE SECTIONS OF THE BUGCHECK MESSAGE MUST BE CONTIGUOUSE5$BCMSG::.ASCIZ <15><12>/SYSTEM FAULT DETECTED AT PC=/E .ASCIZ / FACILITY=/N .ASCIZ / ERROR CODE=/ .ASCIZ <15><12><12>& .BLKB 6 ;BUFFER FOR OCTAL CONVERSION$$BCBUF::.BYTE 0 ;OF VALUES IN CRASH .LIST BEX P .ENDC ; DF C$$CDA . .IF DF A$$CNT A*$BILNG::.BYTE 1 ;BILLING IS INITIALLY OFF D .IFF M$BILNG:: 5 .ENDC  I .IF DF S$$LIB($SUPFL::.BYTE 0 ;SUPERVISOR WINDOW FLAG .ENDC ; DF S$$LIB .EVEN( ; *** THE FOLLOWING MUST BE ADJACENT .IF DF C$$CDA* .BLKW 6 ;STACK AREA FOR SUBROUTINE CALLS2$CRSBF::.BLKW 177. ;CRASH STACK IS THIS SIZE (NOT" ;169.+4 AS PREVIOUSLY THOUGHT) ;(SEE CRASH.MAC FOR FORMAT)B!$CRSST==.-2 ;TOP OF CRASH STACK ; *** ABOVE MUST BE ADJACENT/ .IF EQ, C$$CDA ;LOADABLE CRASH DRIVER SUPPORTI# PBNH = 0 ;STARTING DEVICE ADDRESS PBNL = 0 ;UNKNOWN  .IFTF0$CRSBN::.WORD PBNH,PBNL ;STARTING DEVICE ADDRESS3$CRSCS::.WORD PBNH+PBNL ;CHECKSUM OF DEVICE ADDRESSH6$CRDMP::.BYTE 0 ;FLAG INDICATING REGS HAVE BEEN SAVED" .BYTE 0 ;PRESERVE WORD ALIGNMENT$CRPAR::  .IFT ; EQ, C$$CDA' .WORD 0 ;P.REL OF LOADED CRASH DRIVER  .ENDC ; EQ, C$$CDAS .ENDC ; DF C$$CDA -  .IF DF A$$CNT 9$STRTM::.BLKW 2 ;ABSOLUTE TIME OF CONTEXT SWITCH TO TASKB C .IFFI $STRTM:: P .ENDC T IF; HERE WE DEFINE A SINGLE "FAKE WORD" WHICH RECEIVES ALL THE ADDRESSESD; FOR THINGS WHICH ARE NOT GENNED INTO THE SYSTEM, BUT WHICH REQUIREB; THAT THE ADDRESSES ALWAYS BE RESOLVED FOR TASKBUILDING MCR, ETC.C; THIS ONE (IN LOWCR) IS TO BE USED FOR I SPACE REFERENCES AND CPU CC; SPECIFIC INFO (ALSO THINGS WHICH MUST BE ACCESSED WHEN D SPACE ISSA; TURNED OFF), AND THE ONE IN SYSCM IS USED FOR D SPACE LOCATIONSK .IF NDF R$$WPT $WPBR::S FAKE = 0B .ENDC ; NDF R$$WPTM .IF NDF P$$RTYI$PARLV:: FAKE = 0N .ENDC ; NDF P$$RTYE .IF NDF D$$DXDS$DXDEP::$DXDK5::$DXDRL:: FAKE = 0E .ENDC ; NDF D$$DXDI .IF DF FAKE- .WORD -1 ;FAKE DATA LOCATION FOR ALL OF THE ;ABOVE .ENDC ; DF FAKE;+-; **-$NS0,$NS1,$NS2,$NS3,$NS4,$NS5,$NS6,$NS7-I(; NONSENSE INTERRUPT IDENTIFIER ROUTINES;D?; EACH OF THESE ROUTINES IS VECTORED TO BY ONE OF A GROUP OF 16CG; UNUSED VECTORS. THE VECTORS ARE SUB-CODED IN THE PS CONDITION CODES.F;-  .IF DF M$$PRO I;A; IN A MULTIPROCESSING SYSTEM, SOME STACK SPACE IS NECESSARY WHENS?; THE CPU IS INTERRUPTED. THE M9312MP BOOTSTRAP SETS R6 TO THE$8; VALUE POINTED TO BY PHYSICAL ZERO. THIS IS THAT AREA.;L ! .BLKW 20. ;STACK SPACE FOR IISTE  .ENDC $ ,#$NS0:: NSI ;;;CALL COMMON ROUTINE .WORD 0 ;;;GROUP 0-17 E$NS1:: NSI ;;; .WORD 20 ;;;GROUP 20-37E$NS2:: NSI 00pp4nbl ;;; .WORD 40 ;;;GROUP 40-57V$NS3:: NSI ;;; .WORD 60 ;;;GROUP 60-77C$NS4:: NSI ;;; .WORD 100 ;;;GROUP 100-117$NS5:: NSI ;;; .WORD 120 ;;;GROUP 120-137$NS6:: NSI ;;; .WORD 140 ;;;GROUP 140-157$NS7:: NSI ;;; .WORD 160 ;;;GROUP 160-177 ; 2; INDIRECT POINTERS INTO MULTIPROCESSOR TABLES ;  .IF DF M$$PRO I 7$TKPTR::.WORD $TKTAB ;POINTER INTO CURRECT TASK TABLE 6$MPSWT::.WORD $MPTAB ;POINTER INTO CPU STATUS TABLE 3$CPURM::.WORD $URMTB ;POINTER INTO CPU URM TABLE ;=$CPCRM::.WORD $CRMTB ;POINTER INTO COMPLEMENTED RUN MASK TBL2$TTUQP::.WORD $TTUQ ;TTDRV MULTIPROCESSOR POINTER N; $; MULTIPROCESSOR LOCAL MEMORY WORDS.;: I0$CPBIT::.WORD 1 ;PROCESSOR BIT FOR USE IN MASKS0$FRKCT::.WORD 0 ;NUMBER OF FORK BLOCKS DEQUEUED  .ENDC; ; KXJ11 SPECIFIC LOCATIONS; .IF DF C$$KXJ ; KXJ SUPPORTED?7$KXVC1::.BLKW 1 ; KXJ VECTOR 1 - DRIVER COMMUNICATION M8$CSFSV::.BLKW 1 ; SAVED KXJ CSR F - FULLY SHARED MEMORY5$CSHSV::.BLKW 1 ; SAVED KXJ CSR H - " " "B0$KXPTR::.BLKW 1 ; POINTER TO KXJ DRIVER'S DCB($KXBAS::.BLKW 1 ; BASE ADDRESS OF KXDRV  .IFF $KXVC1::$CSFSV::$CSHSV::$KXPTR::$KXBAS:: .ENDC ; C$$KXJ;I"; REMOTE SYSTEM SPECIFIC LOCATIONS;U .IF DF C$$RMT ; REMOTE HOST  ,$XXLOW::.BLKW 1 ; FIRST GENERIC DCB ADDRESS+$XXHGH::.BLKW 1 ; LAST GENERIC DCB ADDRESS1( ; USED TO IDENTIFY A GENERIC DEVICE .IFF$XXLOW::$XXHGH:: .ENDC ; C$$RMTY;E*; ADDRESS TO INCREMENT ON EVERY CLOCK TICK2; THIS IS EITHER 110 OR ON KXJ REMOTE SYSTEMS TPR5;X&$CKINC::.WORD 110 ; INITIALIZE TO 110;R ; REMOTE TASK SPECIFIC LOCATIONS;% .IF DF C$$RTK ; REMOTE TASK SUPPORT7$CPPKT:: .WORD 0 ; PRE-ALLOCATED CPRBUF PACKET ADDRESS3$CPLUN:: .WORD 0 ; LUN NUMBER FOR REMOTE I/O KILLS .$CPRBF:: .WORD 0 ; CPRBUF FREE SPACE LISTHEAD;$CPWAT:: .BLKW 2 ; LISTHEAD FOR PACKETS WAITING TO BE SENTC5$CPOUT:: .BLKW 2 ; LISTHEAD FOR OUTSTANDING PACKETS $-$CPPOL:: .WORD 0 ; CPRSX POOL WAIT FLAG WORDC1$RMTSK:: .WORD 3 ; NUMBER OF REMOTE STATIC TASKSM1$RMTTT:: .BLKW 1 ; NUMBER OF REMOTE HT TERMINALS1$RMTVT:: .BLKW 1 ; NUMBER OF REMOTE VT TERMINALS$ .IFFE$CPPKT::$CPLUN::$CPRBF::$CPWAT::$CPOUT::$CPPOL::$RMTSK:: $RMTTT:: L $RMTVT:: 0 .ENDC ; C$$RTKR T  .ENDF:: .WORD 0 ; CPRBUF FREE SPACE LISTHEAD;$CPWAT:: .BLKW 2 ; LISTHEAD FOR PACKETS WAITING TO BE SENTC5$CPOUT:: .BLKW 2 ; LISTHEAD FOR OUTSTANDI0 .TITLE LPDRV - RSX-11M-PLUS LINE PRINTER DRIVER' .SBTTL LPDRV - DESCRIPTION AND HISTORY; .IDENT /13.03/D;$6; COPYRIGHT (c) 1981 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;V; ; B. S. MCCARTHY 13-AUG-81N;6; BASED ON THE ORIGINAL NOVEL BY D. N. CUTLER, AND THE4; ORIGINAL KMC LP DRIVER FOR RSX11M, BY YOURS TRULY.;R;R+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY: ;-; J. W. BERZLE;E+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:T; !; B. S. MCCARTHY 26-FEB-86 13.02 ; *; BM380 -- CONVERT TO USE EXEC VECTORING;I!; B. S. MCCARTHY 26-FEB-86 13.03 ;F); BM388 -- FIX REGISTER USAGE IN VECTOR ; TRANSLATE ROUTINED;E;T1; LP11/LS11/LA180 LINE PRINTER CONTROLLER DRIVERR; WITH KMC-11 DMA SUPPORT ;T .PAGE+ .SBTTL . - MACRO LIBRARY CALLS/DEFINITIONSL;L; MACRO LIBRARY CALLS;R& .MCALL ABODF$, HWDDF$, PKTDF$, UCBDF$ .MCALL SCBDF$# ABODF$ ; DEFINE TASK ABORT CODESD% HWDDF$ ; DEFINE HARDWARE REGISTERS% PKTDF$ ; DEFINE I/O PACKET OFFSETS UCBDF$ ; DEFINE UCB OFFSETS. SCBDF$ ,,SYSDEF ; DEFINE VARIABLE SCB OFFSETS;F; EQUATED SYMBOLS;S=; SOME OF THESE DEFINITIONS ARE INCLUDED FOR INFORMATION ONLY1&; AND ARE NOT REFERENCED IN THE DRIVER;H2; LINE PRINTER STATUS WORD BIT DEFINITIONS (U.CW2);R(LS11 = 100000 ; LS11 PRINTER (1=YES)7CRJT = 40000 ; CARRIAGE RETURN JUST OUTPUT (1=YES00pomkTADATADATADATADATADATA)..FORM = 20000 ; FORM FEED REQUIRED (1=YES)4CRTY = 10000 ; CARRIAGE RETURN REQUIRED (1=YES)1ABRT = 4000 ; ABORT REQUEST IF HUNG (1=YES)U5LFCT = 3000 ; UNPROCESSED LINE FEED COUNT FIELDE5LFBT = 1000 ; UNPROCESSED LINE FEED ADD/SUB BITI>BHLD = 400 ; BYTE HELD BACK FOR CARRIAGE RETURN (1=YES)+OFFL = 200 ; PRINTER OFFLINE (1=YES)U&LOWER = 100 ; LOWER CASE (1=YES)3PWRFLG = 40 ; POWER FAIL RECOVERY IN PROGRESS09RQINPR = 20 ; REQUEST IN PROGRESS WHEN POWER FAILED 3KNOWN = 10 ; PRINTER KNOWN TO KMC-11 (1=YES)A1BLCT = 7 ; UNPROCESSED BLANK COUNT FIELD 1BLBT = 1 ; UNPROCESSED BLANK ADD/SUB BIT ;C<; LINE PRINTER HORIZONAL POSITION AND HELD BACK BYTE (U.CW3);E!HORPS = 0 ; HORIZONAL POSITION HELDB = 1 ; BYTE HELD BACKE;=2; DEFINE TIMEOUT WITH NO ERROR BIT IN S.STS FOR LP;E%TMONO=200 ; 1=TIMEOUT WITH NO ERRORG; ; K.PRM STATUS BITSC;R+KMCLOA = 1 ; KMC-11 MICROCODE LOADEDP%KPKMC = 2 ; THIS IS A KMC KRB  .PAGE+ .SBTTL . - KMC11 SPECIFIC DATA DEFINITIONS $; KMC-11/COMM-IOP-LP BIT DEFINITIONS; KMC CSR WORD 0 (SEL0)S+RUN = 100000 ; RUN BIT (1=KMC RUNNING)R8MC = 40000 ; MASTER CLEAR (SET TO 1 TO CLEAR KMC)<RQI = 200 ; REQUEST INPUT (SET TO REQUEST KMC INPUT_;IEO = 20 ; OUTPUT INTERRUPT ENABLE (SET TO ENABLE):IEI = 1 ; INPUT INTERRUPT ENABLE (SET TO ENABLE); KMC CSR WORD 1 (SEL2) 'PRTNUM = 3400 ; PRINTER NUMBER MASK *RDYO = 200 ; READY OUTPUT (1=READY))RDYI = 20 ; READY INPUT (1=READY) $FNCBSI = 3 ; BASE IN FUNCTION'FNCCTI = 1 ; CONTROL IN FUNCTION0.FNCBAI = 0 ; BUFFER ADDRESS IN FUNCTION; KMC CSR WORD 2 (SEL4)T6POLCNT = 177400 ; POLLING COUNT FOR BASE IN FUNCTION; KMC CSR WORD 3 (SEL6) 9KOPKOE = 200 ; KILL ON ERROR OPTION (FOR CONTROL IN) ,KOPNXT = 40 ; DON'T EXPAND TABS OPTION+KOPVTL = 20 ; CONVERT VT TO LF OPTION30KOPDRN = 10 ; DISCARD RUBOUTS/NULLS OPTION:KOPDNP = 4 ; DISCARD NON-PRINTING CHARACTERS OPTION6KOPLUC = 2 ; CONVERT LOWER TO UPPER CASE OPTION5KOPFPR = 1 ; FAST PRINTER OPTIMIZATIONS OPTIONF8KMCABF = 10 ; KILL (ABORT) FINISHED ON CONTROL OUT<KMCNXM = 6 ; NON-EXISTENT MEMORY (WE CAN'T GET THIS?)1KMCONL = 4 ; PRINTER ERROR CONDITION CLEAR :KMCOFL = 2 ; PRINTER ERROR OCCURED (PAPER JAM,ETC.)9BEXT = 140000 ; BUS EXTENSION BITS FOR BUFF. ADDR. IND#KILASN = 20000 ; KILL ASSIGN BIT KILL = 10000 ; KILL BIT; BUFFER DESCRIPTOR BITS+LASTBF = 100000 ; LAST DESCRIPTOR IN LISTU;S@; DEFINE THE SYMBOL "L$$PRN" EITHER IN THE RSXMC.MAC CONDITIONAL@; ASSEMBLY FILE FOR YOUR SYSTEM OR REMOVE THE SEMICOLON (;) FROM?; THE LINE CONTAINING THE SYMBOL IN THE KMC LINE PRINTER DRIVER ; (LKDRV).;E*;L$$PRN=0 ; SYMBOL TO PASS RUBOUTS/NULLS;R!VC$LP = 0 ; VECTORED LP DRIVER.); ; LOCAL DATA; * .IF DF K$$MLP ; KMC LINE PRINTER SUPPORT+KMCCTB: .WORD 0 ; ADDRESS OF $KMCTB IN CTB0+UNITPF: .WORD 0 ; THIS IS A UNIT POWERFAIL .ENDC ; DF K$$MLP;D>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);T4CNTBL: .BLKW L$$P11 ; ADDRESS OF UNIT CONTROL BLOCK; EXECUTIVE VECTOR AREA;@EXEVEC: .WORD 0 ; VECTOR FLAG (<>0 -> VECTOR ALREADY TRANSLATED)KISA6:: .WORD KISAR6DVMSG:: .WORD $DVMSGFORK:: .WORD $FORKGTPKT:: .WORD $GTPKT .IF NDF LD$LPINTSV:: .WORD $INTSV .ENDC ; NDF LD$LPIODON:: .WORD $IODONMPUBM:: .WORD $MPUBMSCERR:: .WORD $SCERRSTMAP:: .WORD $STMAPULDRQ:: .WORD $ULDRQEXEVCL=<<<.-EXEVEC>/2>-1>;O6; DRIVER DISPATCH TABLE - DDT$ CAN'T GENERATE THIS ONE;+$LPTBL:: ; START OF DRIVER DISPATCH TABLEL/ .WORD LPINI ; D.VINI - INITIATION ENTRY POINT + .WORD LPCAN ; D.VCAN - CANCEL ENTRY POINTA, .WORD LPOUT ; D.VTIM - TIMEOUT ENTRY POINT1 .WORD LPPWF ; D.VPWF - POWERFAIL RECOVERY ENTRY. N .IF DF K$$MLP0 .WORD LPKRB ; D.VKRB - KRB STATUS CHANGE ENTRY0 .WORD LPUCB 00pp4nbl; D.VUCB - UCB STATUS CHANGE ENTRY .IFFA3 .WORD LPPWF ; D.VPWF - NO KRB STATUS CHANGE ENTRYX3 .WORD LPPWF ; D.VPWF - NO UCB STATUS CHANGE ENTRYC .ENDC ; DF K$$MLP( ; D.VINT - START OF INTERRUPT VECTOR ; CONTROL INFORMATION.- .ASCII /LP/ ; FOR "LP" CONTROLLERS.1 .WORD $LPINT ; SINGLE INTERRUPT ENTRY POINT-& .WORD 0 ; VECTOR TABLE TERMINATOR2LPCTB: .WORD $LPCTB ; POINTER TO CTB KRB TABLE .IF DF K$$MLP' .ASCII /KM/ ; FOR "KM" CONTROLLERSL* .WORD $LKINP ; TWO INTERRUPT VECTORS,' .WORD $LKOUT ; ONE UNUSED ($LKINP) & .WORD 0 ; VECTOR TABLE TERMINATOR2KMCTB: .WORD $KMCTB ; POINTER TO CTB KRB TABLE .ENDC ; DF K$$MLP+$LPTBE::.WORD 0 ; END OF DISPATCH TABLEO .PAGE1 .SBTTL LPINI - LINE PRINTER CONTROLLER INITIATOR;+6; **-LPINI-LP11/LS11 LINE PRINTER CONTROLLER INITIATOR; J; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUESTN; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THE EXECU-N; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN ATTEMPTI; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER ISBI; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER-O>; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.; ; INPUTS:1;S:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;E ; OUTPUTS:;EE; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAIT-RE; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-T; ATION IS INITIATED. ;- .ENABL LSB  A LPINI: GTPKT$ LP,L$$P11,,CNTBL,T;/1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:T; '; R1=ADDRESS OF THE I/O REQUEST PACKET.N-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.E; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.E:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;:); LINE PRINTER I/O REQUEST PACKET FORMAT:B; "; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTER TASK. @; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTER TASK HEADER.J; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTER TASK HEADER (UCB).'; WD. 05 -- I/O FUNCTION CODE (IO.WLB).T0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.E; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140000).E3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE. 3; WD. 12 -- RELOCATION BIAS OF I/O BUFFER. (I.PRM) +; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.K-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.E"; WD. 15 -- CARRIAGE CONTROL BYTE.; WD. 16 -- NOT USED. ; WD. 17 -- NOT USED.H; WD. 20 -- NOT USED.-;/ .IF DF K$$MLP0 BIT #KP.OFL,S.KTB+2(R4) ; VERIFY PORT IS ONLINE BNE 5$ ; IF NE, IT'S OFFLINE* MOV S.KTB+2(R4),R0 ; GET ADDRESS OF KMC11) BEQ 5$ ; IF EQ, THIS PRINTER NOT ON KMC1> BIT #KMCLOA,K.PRM(R0) ; IS THE MICROCODE LOADED FOR THE KMC ?( BNE LKINI ; IF NE, MICROCODE IS LOADED .ENDC ; DF K$$MLP95$: MOV R5,R3 ; CALCULATE ADDRESS OF PRINTER STATUS WORDE ADD #U.CW2,R3 ;< BIC #FORM!CRTY!ABRT!LFCT!BHLD!BLCT,(R3) ; CLEAR STATUS BITS1 MOVB I.PRM+6(R1),R0 ; GET CARRIAGE CONTROL BYTE/( BEQ LPIN1 ; IF EQ, NO CARRIAGE CONTROL/ CMPB #'$,R0 ; CARRIAGE RETURN AT END OF LINE?T BEQ 10$ ; IF EQ, NO 8 BIS #CRTY,(R3) ; SET FOR CARRIAGE RETURN AT AND OF LINE310$: CMPB #'+,R0 ; LINE FEED AT BEGINNING OF LINE?R BEQ LPIN1 ; IF EQ, NO?/ CMPB #'1,R0 ; FORM FEED AT BEGINNING OF LINE?N BNE 20$ ; IF NE, NOO< ADD #FORM-LFBT,(R3) ; SET FOR FORM FEED AT BEGINING OF LINE*20$: ADD #LFBT,(R3) ; ADD IN ONE LINE FEED CMPB #'0,R0 ; DOUBLE SPACE?V BNE LPIN1 ; IF NE, NOA& ADD #LFBT,(R3) ; ADD IN ONE LINE FEED-LPIN1: CALL LPRNT ; FILL LINE PRINTER BUFFERE' BCS 35$ ; IF CS, REQUEST NOT FINISHEDE- MOV S.PKT(R4),R1 ; GET ADDRESS OF I/O PACKETR3 MOV I.PRM+4(R1),R1 ; GET NUMBER OF BYTES PROCESSEDG+ MOV #IS.SUC&377,R0 ; SET SUCCESSFUL STATUSC$ CALL @IODON 00pomkTADATADATADATADATADATA; FINISH I/O OPERATION BR LPINI ;635$: BITB #TMONO,S.STS(R4) ; TIMEOUT NO ERROR BIT SET? BEQ 40$ ; IF EQ, NOE: MOVB #2,S.CTM(R4) ; SET TIME OUT COUNT TO 2 (MIN. 1 SEC.) BR 41$ ; SKIP:40$: MOVB S.ITM(R4),S.CTM(R4) ; RESET DEVICE TIMEOUT COUNT(41$: MOV @S.KRB(R4),R4 ; GET CSR ADDRESS* BISB #100,(R4) ; ENABLE PRINTER INTERRUPT RETURN .DSABL LSB) .PAGE8 .SBTTL LKINI - KMC11 PRINTER INITIALIZATION ENTRY POINT;+B; **-LKINI-LP11/LS11 WITH KMC-11 LINE PRINTER CONTROLLER INITIATOR;- .IF DF K$$MLP5LKINI: MOV R5,CNTBL(R3) ; SAVE ADDRESS OF REQUEST UCBM, BIC #ABRT,U.CW2(R5) ; CLEAR REQUEST ABORTED;M(; CONVERSION OF ADDRESS FOR A NPR DEVICE; ; ON AN 18-BIT MACHINE, THEN @; U.BUF = HIGH ORDER 2 BITS OF PHYSICAL ADDRESS IN BITS 4 AND 53; U.BUF+2 = LOW ORDER 16 BITS OF PHYSICAL ADDRESS.E; ON AN 11/70, THEN ?; U.BUF = HIGH ORDER 6 BITS OF PHYSICAL ADDRESS IN HIGH BYTE. I5; U.BUF+2 = LOW ORDER 16 BITS OF PHYSICAL ADDRESS. 1 MOV R1,-(SP) ; SAVE R1I MOV R2,-(SP) ; AND R2# MOV U.BUF(R5),R1 ; RELOCATION BIASE* MOV U.BUF+2(R5),R2 ; DISPLACEMENT ADDRESS- ASL R2 ; REMOVE APR6 BIAS FROM DISPLACEMENT ASL R2 ;& CLC ; GET 2 BITS OF RELOCATION BIAS ROR R1 ;/ RORB R2 ; TO FILL 8 LOW ORDER BITS OF ADDRESSS ASR R1 ; RORB R2 ;F' SWAB R2 ; SWAP TO COLLECT 8 MORE BITSS- BISB R1,R2 ; INSERT UPPER 8 BITS OF ADDRESSE% SWAB R2 ; SWAP BACK TO REAL ADDRESST( CLRB R1 ; CLEAR LOW BYTE OF UPPER BITS .IF NDF M$$EXT/ ASH #-4,R1 ; PUT BITS <17:18> OF ADDRESS INTO ; BITS <4:5> .ENDC# MOV R1,U.BUF(R5) ; HIGH ORDER BITSE8 MOV R2,U.BUF+2(R5) ; LOW ORDER 16 BITS OF PHYS. ADDRESS MOV (SP)+,R2 ; RESTORE R2 MOV (SP)+,R1 ; AND R1 .IF DF M$$MGE&M$$EXT CALL @STMAP ; SETUP UNIBUS MAP .ENDC ; M$$MGE&M$$EXT.; TEST TO SEE IF KMC KNOW'S ABOUT THIS PRINTER ; AND ISSUE BASE IN IF NECESSARY-LKIN1: BIT #KNOWN,U.CW2(R5) ; PRINTER KNOWN ?R BNE 10$ ; IF NE, YES! CALL WTKMC ; WAIT FOR KMC READY* MOV @S.KRB(R4),6(R0); FILL IN CSR ADDRESS. MOV #L$$KPC*256.,4(R0) ; SET UP POLLING COUNT$ CLR R4 ; SCRATCH FOR UNIT/FUNCTION% BISB U.UNIT(R5),R4 ; SET UNIT NUMBERD SWAB R4 ; PUT IT IN HIGH BYTE& BIS #FNCBSI,R4 ; SET BASE IN FUNCTION" MOV R4,2(R0) ; AND ISSUE FUNCTION' MOV U.SCB(R5),R4 ; RESTORE SCB ADDRESS) BIS #KNOWN,U.CW2(R5) ; SET PRINTER KNOWNT?; TEST TO SEE IF PRINTER HAS BEEN INITIALIZED FOR CORRECT WIDTH ; (CURRENT SET WIDTH IN U.CW3)810$: CMPB U.CW4(R5),U.CW3(R5) ; BUF SIZE CURRENT WIDTH ?- BEQ 20$ ; IF EQ, YES, CONTROL IN WAS ISSUED6! CALL WTKMC ; WAIT FOR KMC READYR .IF NDF L$$PRNI7 MOV #KOPDRN,R4 ; SET FUNCTION TO DISCARD RUBOUTS/NULLS4 .IFFT- CLR R4 ; SET FUNCTION TO PASS RUBOUTS/NULLSC .ENDC* BIT #LOWER,U.CW2(R5) ; LOWER CASE PRINTER% BNE 11$ ; IF NE, LOWER CASE PRINTER.1 BIS #KOPLUC,R4 ; SET LOWER TO UPPER CASE SUPPORTI11$: ; REF LABELI .IF DF L$$11R% BIT #LS11,U.CW2(R5) ; FAST PRINTER ? BNE 12$ ; IF NE, NO.0 BIS #KOPFPR,R4 ; SET FAST PRINTER OPTIMIZATIONS .ENDC ; DF L$$11R$12$: MOV R4,6(R0) ; SET OPTIONS WORD( MOV U.CW4(R5),4(R0) ; SET PRINTER WIDTH+ CLR R4 ; SCRATCH FOR UNIT NUMBER/FUNCTION4( BISB U.UNIT(R5),R4 ; SET IN UNIT NUMBER SWAB R4 ; PUT IT IN HIGH BYTE) BIS #FNCCTI,R4 ; SET CONTROL IN FUNCTION MOV R4,2(R0) ; ISSUE FUNCTION' MOV U.SCB(R5),R4 ; RESTORE SCB ADDRESSP0 MOVB U.CW4(R5),U.CW3(R5) ; SET PRINTER SIZE SET6; BUILD ADDRESS BUFFER IN I/O PACKET AND ISSUE REQUEST20$: ; REFERENCE LABELT .IF DF M$$MGE & M$$EXTN' MOV R1,-(SP) ; SAVE I/O PACKET ADDRESS $ CALL @MPUBM ; MAP UNIBUS TO MEMORY* MOV (SP)+,R1 ; RESTORE I/O PACKET ADDRESS .ENDC ; M$$MGE & M$$EXT! CALL WTKMC ; WAIT FOR KMC READY < MOV U.BUF+2(R5),I.PRM+10(R1) ; SET LOW PART OF BUFFER ADDR.2 MOV U.CNT(R5),I.PRM+12(R1) ; AND LENGTH OF BUFFER. MOV U.BUF(R5),R0 ; GET HIGH TWO BITS OF ADDR. SWAB R0 ; PUT IN HIGH BYTE ASR R0 ; SHIFT INTO BITS 10/11 ASR R0 ;' BIS #LASTBF,R0 ; SET FOR LAST FUNCTIONE& BISB I.PRM+6(R1),R0 ; SET VFC BITS IN00pp4nbl1 MOV R0,I.PRM+14(R1) ; STORE INTO BUFF ADDR DESC.M6; BUFFER DESCRIPTOR BUILT IN WORDS 4,5,6 OF PARAM LIST' MOV @S.KTB+2(R4),R0 ; POINT TO KMC CSRT! CLR 6(R0) ; CLEAR OUT KILL BITSD! MOV R1,R4 ; COPY PACKET ADDRESS . ADD #I.PRM+10,R4 ; POINT TO BUFFER DESCRIPTOR& MOV R4,4(R0) ; FILL IN BUFFER ADDRESS" CLR R4 ; SCRATCH FOR UNIT NUMBER( BISB U.UNIT(R5),R4 ; SET IN UNIT NUMBER SWAB R4 ; PUT IT IN HIGH BYTER" MOV R4,2(R0) ; AND START TRANSFER 25$: RETURN ; EXIT FROM DRIVER .ENDC ; DF K$$MLP .PAGE2 .SBTTL LPPWF - LINE PRINTER POWERFAIL ENRTY POINT;OK; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUSESSK; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDITIONA2; THAT COUND EXIST IN RESTARTING THE I/O OPERATION;(LPPWF: .IF DF K$$MLP% BCC 5$ ; BR IF CONTROLLER POWERFAIL& INC UNITPF ; INDICATE UNIT POWERFAIL35$: BIT #KP.OFL,S.KTB+2(R4) ; VERIFY PORT IS ONLINEN BNE 10$ ; IF NE, IT'S OFFLINE * MOV S.KTB+2(R4),R0 ; GET ADDRESS OF KMC11* BEQ 10$ ; IF EQ, THIS PRINTER NOT ON KMC= BIT #KMCLOA,K.PRM(R0) ; IS THE MICROCODE LOADED FOR THE KMC?U' BEQ 10$ ; IF EQ, MICROCODE NOT LOADEDM! JMP LKPWF ; DO POWERFAIL FOR LKS-10$: MOV #0,UNITPF ; ZERO UNIT POWERFAIL FLAGE .IFF ; DF K$$MLPE0 CALL LPKRB ; TRANSLATE EXEC ENTRY POINT VECTOR .ENDC ; DF K$$MLP RETURN ;C .PAGE3 .SBTTL LKPWF - KMC11 PRINTER POWERFAIL ENTRY POINT4; D; UNIT POWERFAIL PROCESSING MARKS A DEVICE AS UNKNOWN AND OF UNKNOWNE; WIDTH. FOR CONTROLLER POWERFAIL CALLS, THE MICROCODE IS MARKED AS KF; NOT LOADED. THE MICROCODE LOADER (MCL...) IS REQUESTED. IF MCL... H; IS NOT INSTALLED AN ERROR MESSAGE IS ISSUED. IF THERE IS NO POOL, A 7; RETURN IS EXECUTED AND LPDRV WILL NOT USE THE KMC. ;K .IF DF K$$MLP .ENABL LSBA.LKPWF: TST UNITPF ; IS THIS A UNIT POWERFAIL?* BEQ LKPWF0 ; IF EQ, CONTROLLER POWERFAIL DEC UNITPF ; SET BACK TO ZERO42 BIS #PWRFLG,U.CW2(R5) ; SET POWERFAIL IN PROGRESS$ TST CNTBL(R3) ; REQUEST IN PROGRESS BEQ 10$ ; IF EQ, NOL5 BIS #RQINPR,U.CW2(R5) ; SET REQUEST IN PROGRESS FLAGC/10$: BIC #KNOWN,U.CW2(R5) ; SET PRINTER UNKNOWN+ CLRB U.CW3(R5) ; AND SET THE WIDTH TO ZEROD RETURN ; EXIT FROM DRIVERLKPWF0: ; CTB IS IN R3  MOV R2,R4 ; PUT KRB INTO R4.& MOV #0,R5 ; MICROCODE FILENAME INDEX6 BIC #KMCLOA,K.PRM(R4) ; INDICATE MICROCODE NOT LOADED"13$: CALL @ULDRQ ; REQUEST LOADER BCC 15$ ; BR IF OK, BEQ 20$ ; IF EQ, TASK MCL... NOT INSTALLED BNE 40$ ; IF NE, NO POOL I(15$: MOV #MC,@(R4) ; MASTER CLEAR KMC-11 BR 40$ ; RETURNT<20$: MOV #T.NKLF,R0 ; MESSAGE NUM "MICROCODE LOADER NOT ..."' CALLR @DVMSG ; PRINT MESSAGE AND EXITH 40$: RETURND .ENDC ; DF K$$MLP .DSABL LSBW .PAGE6 .SBTTL $LPINT - LINE PRINTER INTERRUPT HANDLING ENTRY;+7; **-$LPINT-LP11/LS11 LINE PRINTER CONTROLLER INTERUPTST;-$LPINT:: ;;; REF LABEL> INTSV$ LP,PR4,L$$P11,,CNTBL ;;; GENERATE INTERRUPT SAVE CODE 9 MOV U.SCB(R5),R4 ;;; GET ADDRESS OF STATUS CONTROL BLOCKL& MOV @S.KRB(R4),R4 ;;; GET CSR ADDRESS+ CLRB (R4) ;;; DISABLE PRINTER INTERRUPTS K( CALL @FORK ;;; CREATE A SYSTEM PROCESS MOV U.SCB(R5),R4 ; GET SCBM$ MOV @S.KRB(R4),R3 ; GET CSR ADDRESS TST (R3) ; PRINTER READY?S BMI LPOUT1 ; IF MI, NO6 MOV R5,R3 ; CALCULATE ADDRESS OF PRINTER STATUS WORD ADD #U.CW2,R3 ;' CALL LPRNT ; FILL LINE PRINTER BUFFERI( BCC LPINT1 ; IF CC, OPERATION FINISHED6 MOVB S.ITM(R4),S.CTM(R4) ; RESET DEVICE TIMEOUT COUNT$ MOV @S.KRB(R4),R4 ; GET CSR ADDRESS* BISB #100,(R4) ; ENABLE PRINTER INTERRUPT RETURNR4LPINT1: MOV S.PKT(R4),R1 ; GET ADDRESS OF I/O PACKET3 MOV I.PRM+4(R1),R1 ; GET NUMBER OF BYTES PROCESSED + MOV #IS.SUC&377,R0 ; SET SUCCESSFUL STATUST(60$: CALL @IODON ; FINISH I/O OPERATION JMP LPINI ;V .PAGE4 .SBTTL $LKINT - KMC11 PRINTER INTERRUPT ENTRY POINT;+7; **-$LPINT-LP11/LS11 LINE PRINTER CONTROLLER INTERUPTSI.; (INTERRRUPTS ARE FROM COMM IOP, NOT PRINTER); 6; INPUT INTERRUPTS SHOULD NOT OCCUR, AND ARE THEREFORE; DISMISSED IMMEDIATELY.; ); 00pomkTADATADATADATADATADATAOUTPUT INTERRUPTS ARE CAUSED FOUR WAYS: ; ;; 1) - BUFFER ADDRESS OUT - INDICATES SUCCESSFUL COMPLETION ; OF AN OUTPUT OPERATION 9; 2) - CONTROL OUT - KMCABF SET IN KCS3 - ABORT COMPLETEDI@; 3) - CONTROL OUT - KMCONL SET IN KCS3 - PREVIOUS ERROR CLEARED7; 4) - CONTROL OUT - OTHER - ERROR CONDITION ON PRINTERP;- .IF DF K$$MLP$$LKINP:: ; IGNORE INPUT INTERRUPTS+ ; ($LPINP IS NEEDED TO MAKE DRIVER LOAD  ; CORRECTLY) .IF NDF L$$DRV ! M$$MGE ! LD$LP RTI .IFFI RETURN .ENDC .PAGE .ENABL LSBF$LKOUT:: ;;; REF LABEL .IF NDF L$$DRV ! M$$MGE ! LD$LP0 JSR R5,@INTSV ;;; SINCE THERE'S ONE KMC VECTOR,4 .WORD ^C&PR7 ;;; NORMAL UCB CALC. DOESN'T WORK .ENDC" ADD KMCCTB,R4 ;;; POINT INTO KRB . ADD #10,R4 ;;; ADD DISPLACEMENT TO CTB TABLE! MOV (R4),R4 ;;; GET KRB ADDRESS." MOV R4,-(SP) ;;; SAVE KRB ADDRESS! MOV (R4),R4 ;;; GET CSR ADDRESSE- MOV 2(R4),R5 ;;; GET PRINTER NUMBER FROM KMC.& BIC #^C,R5 ;;; STRIP OFF JUNK" SWAB R5 ;;; INTO LOW HALF OF REG" ASL R5 ;;; AND CREATE WORD INDEX" MOV (SP)+,R4 ;;; GET KRB ADDRESS - ADD K.OFF(R4),R5 ;;; ADD OFFSET TO KRB TABLEK ADD R4,R5 ;;; ADD KRB ADDRESS;! MOV (R5),R5 ;;; GET UCB ADDRESS./ BEQ 90$ ;;; IF EQ, DISMISS SPURIOUS INTERRUPT# MOV (R4),R4 ;;; GET KMC CSRC" MOV R5,-(SP) ;;; SAVE UCB ADDRESS6 MOV 6(R4),R5 ;;; GET PRINTER ERROR CODE 2 SWAB R5 ;;; PUT INTO HIGH BYTE 2 CLRB R5 ;;; CLEAR OUT LOW BYTE 7 BISB 2(R4),R5 ;;; AND MERGE IN INTERRUPT CAUSE ;) BIC #IEO,(R4) ;;; DISABLE KMC INTERRUPTSE9 BIC #RDYO,2(R4) ;;; RELEASE KMC L* MOV R5,R4 ;;; INTERRUPT CAUSE/ERROR BYTE% MOV (SP)+,R5 ;;; RESTORE UCB POINTER , CALL @FORK ;;; CREATE A SYSTEM PROCESS  MOV U.SCB(R5),R0 ; GET SCBV" MOV @S.KTB+2(R0),R0 ; GET KMC CSR) BIS #IEO,(R0) ; RE-ENABLE KMC INTERRUPTS 4 MOV R4,R0 ; COPY INTERRUPT CAUSE 4 MOV R4,R1 ; COPY POSSIBLE ERROR BYTE 2 SWAB R1 ; AND MOVE IT TO LOW BYTE : MOV U.SCB(R5),R4 ; GET SCB $ BIT #1,R0 ; WAS IT A CONTROL OUT ? BNE 70$ ; IF NE, YES$ MOV #IS.SUC,R0 ; SET SUCCESS STATUS.60$: MOV S.PKT(R4),R1 ; GET I/O PACKET ADDRESS. MOV I.PRM+4(R1),R1 ; GET REQUESTED BYTE COUNT$ CALL @IODON ; FINISH I/O OPERATION MOV U.SCB(R5),R4 ; GET SCB;! MOV S.KTB+2(R4),R4 ; GET KMC KRB,) MOVB K.CON(R4),R4 ; GET CONTROLLER INDEX ' CLR CNTBL(R4) ; CLEAR CONTROLLER TABLE $ JMP LPINI ; AND START DRIVER AGAIN'70$: CMPB #KMCABF,R1 ; ABORT FINISHED ?R! BNE 80$ ; IF NE, YES ABORT DONE )LKOUT1: MOV #IE.ABO,R0 ; SET ABORT STATUS? BR 60$ ; AND OUT NORMALLYM)80$: CMPB #KMCONL,R1 ; PRINTER BACK NOW ?S& BNE LKOUT ; IF NE, NO, MUST BE ERROR" RETURN ; ELSE YES, THAT'S NICE.90$: MOV (R4),R4 ; GET CSRH BIC #RDYO,2(R4) ; RELEASE KMC RETURN ; AND EXIT FROM DRIVER .DSABL LSB, .ENDC ; DF K$$MLP .PAGE0 .SBTTL LPOUT - LINE PRINTER TIMEOUT ENTRY POINT;?; DEVICE TIMEOUT RESULTS IN A NOT READY MESSAGE BEING OUTPUT ATOC; A SYSGEN SPECIFIED INTERVAL. TIMEOUTS ARE CAUSED BY POWERFAILUREB; AND PRINTER FAULT CONDITIONS. ;A .ENABL LSBLLPOUT: : .IF DF K$$MLP2 BIT #KP.OFL,S.KTB+2(R4) ;;; VERIFY PORT IS ONLINE! BNE 10$ ;;; IF NE, IT'S OFFLINET, MOV S.KTB+2(R4),R0 ;;; GET ADDRESS OF KMC11, BEQ 10$ ;;; IF EQ, THIS PRINTER NOT ON KMC? BIT #KMCLOA,K.PRM(R0) ;;; IS THE MICROCODE LOADED FOR THE KMC?B BEQ 10$ ;;; IF EQ, NOT! JMP LKOUT ;;; DO TIMEOUT FOR LKT .ENDC ; DF K$$MLP"10$: MOV @S.KRB(R4),R3 ;;; GET CSR) CLRB (R3) ;;; DISABLE PRINTER INTERRUPTU MTPS #0 ;;; ALLOW INTERRUPTS&LPOUT1: MOV R5,R3 ; CALCULATE ADDRESS5 MOV #IE.ABO&377,R0 ; ASSUME REQUEST IS TO BE ABORTED;. ADD #U.CW2,R3 ; ADJUST TO PRINTER STATUS WORD BIT #ABRT,(R3) ; ABORT REQUEST? BEQ 70$ ; IF EQ, NO1$ CALL @IODON ; FINISH I/O OPERATION JMP LPINI ;#(70$: MOV @S.KRB(R4),R2 ; GET CSR ADDRESS TST (R2) ; PRINTER READY?;- BMI DEVNR ; DEVICE NOT READY(ERROR BIT SET)T7 BITB #TMONO,S.STS(R4) ; WAS00pp4nbl TIMEOUT WITH NO ERROR BIT?C BNE 71$ ; IF NE, YES L= BISB #TMONO,S.STS(R4) ; NO, SET THE BIT(TO CLEAR WHEN IODON)O& JMP LPIN1 ; GO BACK AND PRINT BUFFER>71$: BICB #TMONO,S.STS(R4) ; 2 TIMEOUTS WITH NO ERROR => ERROR BR DEVNR ; DEVICE NOT READYT .DSABL LSB  .PAGE6 .SBTTL LKOUT - KMC11 LINE PRINTER TIMEOUT ENTRY POINT;E8; TIMEOUT PROCESSING IS ENTERED FOR ANY OF THE FOLLOWING;E9; 1. FOLLOWING AN IO.KIL, IF THE REQUEST IS NOT COMPLETEDR<; NORMALLY BEFORE THE NEXT TIMEOUT CHECK, THEN A HARDWARE; ABORT IS ISSUED HERE.;F<; 2. AFTER A DEVICE ERROR, THE TIMEOUT SECTION TAKES CARE OF ; ISSUING NOT READY MESSAGES.;N .IF DF K$$MLP$LKOUT: MTPS #0 ;;; ALLOW INTERRUPTS9 BIT #PWRFLG,U.CW2(R5) ; POWERFAIL RECOVERY IN PROGRESS ?S BEQ 99$ ; IF EQ, NOT- BIC #PWRFLG,U.CW2(R5) ; CLEAR POWERFAIL FLAGT( BIT #ABRT,U.CW2(R5) ; ABORT REQUESTED ?1 BNE LKOUT1 ; IF NE, YES, BUT REQUEST IS ALREADYL* ; ABORTED (AND HOW) DUE TO KMC FAILURE@ BIT #RQINPR,U.CW2(R5) ; REQUEST IN PROGRESS WHEN WE WENT DOWN ? BEQ 96$ ; IF EQ, NO.2 BIC #RQINPR,U.CW2(R5) ; CLEAR REQUEST IN PROGRESS. MOV S.PKT(R4),R1 ; RESTORE I/O PACKET ADDRESS! JMP LKIN1 ; AND RESTART REQUEST 096$: CLRB S.STS(R4) ; CLEAR FAKE CONTROLLER BUSY/ BICB #US.BSY,U.STS(R5) ; AND DECLARE UNIT IDLET( JMP LPINI ; TRY TO ACTIVATE CONTROLLER,99$: BIT #ABRT,U.CW2(R5) ; ABORT REQUESTED ? BEQ DEVNR ; IF EQ, NO # CALL WTKMC ; WAIT TILL IT'S READYR$ MOV #KILL,6(R0) ; SET KILL FUNCTION CLR 4(R0) ; NO BUFF ADDR% CLR R1 ; SCRATCH FOR PRINTER NUMBER9( BISB U.UNIT(R5),R1 ; SET IN UNIT NUMBER SWAB R1 ; PUT IT IN HIGH BYTES5 MOV R1,2(R0) ; FILL IN PRINTER NUMBER AND START KILL " RETURN ; WAIT TIL IT'S ALL OVER 4 .ENDC ; DF K$$MLP E .PAGE. .SBTTL . - DEVICE NOT READY MESSAGE PROCESSOR#; PROCESS DEVICE NOT READY MESSAGESLDEVNR: ; REF LABELR .IF DF T$$KMG2 MOV #T.NDNR,R0 ; SET FOR DEVICE NOT READY MESSAGE .IFTF ; DF T$$KMG- MOVB #1,S.CTM(R4) ; SET TIMEOUT FOR 1 SECONDO .IFT ; DF T$$KMGS* DECB S.STS(R4) ; TIME TO OUTPUT MESSAGE ? BNE 120$ ; IF NE, NO .IF NDF L$$PTOI4 MOVB #15.,S.STS(R4) ; SET TO OUTPUT NEXT MESSAGE IN ; 15. SECONDSR .IFF ; NDF L$$PTO7 MOVB #L$$PTO,S.STS(R4) ; SET TO OUTPUT NEXT MESSAGE INE ; L$$PTO SECONDS1 BNE 110$ ; IF NE, LP NOT READY MESSAGES ENABLEDN5 INCB S.STS(R4) ; LP NOT READY MESSAGE NOT WANTED, SO  BR 120$ ; RE-BUSY CONTROLLER .ENDC ; NDF L$$PTO$110$: CALLR @DVMSG ; OUTPUT MESSAGE .ENDC ; DF T$$KMG120$: RETURN ; OUT ! .DSABL LSBP .PAGE/ .SBTTL LPCAN - LINE PRINTER CANCEL ENTRY POINT;VC; CANCEL I/O OPERATION-FORCE I/O TO COMPLETE IF DEVICE IS NOT READY;.5LPCAN: CMP R1,I.TCB(R0) ;;; REQUEST FOR CURRENT TASK?T BNE 10$ ;;; IF NE, NO : BIS #ABRT,U.CW2(R5) ;;; SET FOR ABORT IF DEVICE NOT READY N .IF DF K$$MLP2 BIT #KP.OFL,S.KTB+2(R4) ;;; VERIFY PORT IS ONLINE! BNE 10$ ;;; IF NE, IT'S OFFLINE , MOV S.KTB+2(R4),R0 ;;; GET ADDRESS OF KMC11, BEQ 10$ ;;; IF EQ, THIS PRINTER NOT ON KMC? BIT #KMCLOA,K.PRM(R0) ;;; IS THE MICROCODE LOADED FOR THE KMC?R BEQ 10$ ;;; IF EQ, NOV: MOVB #1,S.CTM(R4) ;;; FORCE TIMEOUT IN 1 SECOND (OR LESS)  .ENDC ; DF K$$MLP10$: RETURN ;;;  .PAGE- .SBTTL LPKRB - KRB STATUS CHANGE ENTRY POINTS ; ON ENTRY:);;(; R3 = CTB ADDRESS FOR THE CONTROLLER(; R2 = KRB ADDRESS FOR THE CONTROLLER'; 0(SP) = RETURN ADDRESS FOR COMPLETIONF7; 2(SP) = RETURN ADDRESS FOR CALLER OF THE EXEC ROUTINEF;C0; C = 0 IF THE CALL IS FOR CONTROLLER ONLINE1; C = 1 IF THE CALL IS FOR CONTROLLER OFFLINEF;T; $SCERR IS PRESET TO 1F;,0LPKRB: ; CONTROLLER STATUS CHANGE ENTRY POINT' ; AND EXEC VECTOR TRANSLATE ROUTINE0 .IF DF K$$MLP$ BCS 25$ ; BR IF CONTROLLER OFFLINE .IFTF ; DF K$$MLP3; FILL IN EXEC VECTOR IF WE HAVEN'T DONE SO ALREADYR' TST EXEVEC ; EXEC VECTOR TRANSLATED ?& BNE 15$ ; IF NE, YES - DON'T REPEAT. MOV R3,-(SP) ; SAVE A REGISTERL MOV R2,-(SP) ; OR TWO% MOV @#112,R0 ; R0 > TABLE OF ENTR00pomkTADATADATADATADATADATAIESR2 MOV (R0),R0 ; AND APR BIAS (1ST WORD OF TABLE).) MOV KINAR6,-(SP) ; SAVE I-SPACE MAPPING.3 MOV (R0),KINAR6 ; MAP COMMON THROUGH I-SPACE APR6.T& MOV #EXEVEC,R3 ; R3 > EXEC VECTOR AND. MOV #EXEVCL,R2 ; R2 = LENGTH OF VECTOR AREA.' CALL @#140004 ; TRANSLATE THE VECTORS.I, MOV (SP)+,KINAR6 ; RESTORE I-SPACE MAPPING. MOV (SP)+,R2 ; RESTORE  MOV (SP)+,R3 ; REGISTERS15$: ; REFERENCE LABELP .IFT ; DF K$$MLP ) BIT #KPKMC,K.PRM(R2); IS THIS A KMC KRB?V" BEQ 40$ ; IF EQ, NO, JUST RETURN% MOV R3,KMCCTB ; SAVE LOCATION OF CTB  MOV R2,R4 ; PUT KRB INTO R4 & MOV #0,R5 ; MICROCODE FILENAME INDEX, CALL @ULDRQ ; REQUEST THE MICROCODE LOADER BCC 40$ ; BR IF SUCCESSFUL4 BNE 30$ ; IF NE, NO POOL, REJECT ONLINE TRANSITION #920$: MOVB #IE.NST,@SCERR ; MICROCODE LOADER NOT INSTALLEDR BR 40$ ; AND RETURNV-25$: BIT #KPKMC,K.PRM(R2) ; IS THIS A KMC KRB" BEQ 40$ ; IF EQ, NO, JUST RETURN3 BIC #KMCLOA,K.PRM(R2) ; CLEAR MICROCODE LOADED BITC% MOV #MC,@(R2) ; MASTER CLEAR KMC-11 U BR 40$ ; M+30$: MOVB #IE.NOD,@SCERR ; INDICATE NO POOL  .IFTF ; DF K$$MLP 40$: RETURN  .IFT ; DF K$$MLP  .PAGE- .SBTTL LPUCB - UCB STATUS CHANGE ENTRY POINTU ; ON ENTRY:3; /; R5 = ADDRESS OF UCB OR UNIT CHANGIN STATUS0 ; R4 = ADDRESS OF SCB OF UNIT1; R3 = CONTROLLER INDEX (UNDEFINED IF S.KRB=0)5'; 0(SP) = RETURN ADDRESS FOR COMPLETIONR7; 2(SP) = RETURN ADDRESS FOR CALLER OF THE EXEC ROUTINEM;)0; C = 0 IF THE CALL IS FOR CONTROLLER ONLINE1; C = 1 IF THE CALL IS FOR CONTROLLER OFFLINE.;,; $SCERR IS PRESET TO 1 LPUCB: BCS 10$ ; BR IF OFFLINE* BIT #1,S.KTB(R4) ; IS THE LP PORT ONLINE BEQ 10$ ; IF EQ, YES, ITS OKR) MOVB #IE.CNR,@SCERR ; REJECT TRANSITIONR/10$: BIC #KNOWN,U.CW2(R5) ; SET PRINTER UNKNOWNS RETURNO N .ENDC ; DF K$$MLP .PAGE .SBTTL . SUBROUTINES;P(; SUBROUTINE TO FILL LINE PRINTER BUFFER; *LPRNT: MOV @S.KRB(R4),R1 ; GET CSR ADDRESS0 MOV U.BUF+2(R5),R0 ; GET ADDRESS OF USER BUFFER .IF DF M$$MGE* MOV U.BUF(R5),@KISA6 ; MAP TO USER BUFFER .IFTF5$: MOV #5,R2 ; SET LOOP COUNT 10$: TST (R1) ; TEST ERROR  BPL 20$ ; BRANCH IF NO ERROR2 MOV R5,R3 ; CALCULATE ADDRESS OF RELOCATION BIAS ADD #U.BUF,R3 ;- MOV S.PKT(R4),R1 ; GET ADDRESS OF I/O PACKETN) ADD #I.PRM,R1 ; POINT TO RELOCATION BIAS.( MOV (R1)+,(R3)+ ; RESET RELOCATION BIAS' MOV (R1)+,(R3)+ ; RESET BUFFER ADDRESS! MOV (R1),(R3) ; RESET BYTE COUNTR SEC ; RETURN ;R 20$: TSTB (R1) ; TEST BIT READY BMI 40$ ;$ DEC R2 ; BNE 10$ ; LOOP AGAIN SEC ; SET BIT CARRYB30$: MOV R0,U.BUF+2(R5) ; SAVE ADDRESS OF NEXT BYTE IN USER BUFFER .IFT 0 MOV @KISA6,U.BUF(R5) ; SAVE MAPPING INFORMATION .ENDC RETURN ;D/35$: TST -(R3) ; ADJUST TO PRINTER STATUS WORDII40$: BIT #FORM!LFCT!BHLD!BLCT,(R3) ; FORM, LINE FEED, BYTE HELD, OR BLANKR BEQ 50$ ; IF EQ, NOM* BIT #BLCT,(R3) ; ANY BLANKS TO BE OUTPUT? BNE 80$ ; IF NE, YES5 BIT #BHLD,(R3) ; BYTE HELD BACK FOR CARRIAGE RETURN?B BNE 65$ ; IF NE, YES) BIT #FORM,(R3) ; FORM FEED TO BE OUTPUT?; BNE 60$ ; IF NE, YES) SUB #LFBT,(R3)+ ; REDUCE LINE FEED COUNT ) MOVB #12,R2 ; SET TO OUTPUT A LINE FEEDU BR 100$ ;M.50$: TST U.CNT(R5) ; ANY MORE BYTES TO OUTPUT? BNE 70$ ; IF NE, YES0 BIT #CRTY,(R3) ; CARIAGE RETURN AT END OF LINE? BEQ 30$ ; IF EQ, NOE, BIC #CRTY,(R3)+ ; CLEAR CARRIAGE RETURN BIT/ MOVB #15,R2 ; SET TO OUTPUT A CARRIAGE RETURNB BR 100$ ;N*60$: BIC #FORM,(R3)+ ; CLEAR FORM FEED BIT) MOVB #14,R2 ; SET TO OUTPUT A FORM FEED BR 100$ ;3965$: BIC #BHLD,(R3) ; CLEAR BYTE HELD FOR CARRIAGE RETURN## MOVB 3(R3),R2 ; RETRIEVE HELD BYTE BR 150$ ; 370$: MOVB (R0)+,R2 ; GET NEXT BYTE FROM USER BUFFERU .IF DF M$$MGE% BIT #20000,R0 ; OVERFLOW 4K BOUNDRY?S BEQ 75$ ; IF EQ, NOI# BIC #20000,R0 ; CLEAR OVERFLOW BIT ) ADD #200,@KISA6 ; UPDATE RELOCATION BIASI .ENDC)75$: DEC U.CNT(R5) ; DECREMENT BYTE COUNTE CMPB #177,R2 ; RUBOUT? BEQ 50$ ; IF EQ, YES* TST (R3)+ ; ADJUST TO HORIZONAL POSITION CMPB #11,R2 ; 00pp4nblHORIZONAL TAB? BNE 90$ ; IF NE, NOL1 MOVB (R3),-(SP) ; GET CURRENT HORIZONAL POSITION;: BIS #177770,(SP) ; CALCULATE BLANK COUNT TO NEXT TAB STOP NEG (SP) ; " BIS (SP)+,-(R3) ; SET BLANK COUNT$80$: DEC (R3)+ ; REDUCE BLANK COUNT% MOVB #' ,R2 ; SET TO OUTPUT A BLANK;#90$: BHI 110$ ; IF HI, OUTPUT BYTE6" CMPB #15,R2 ; LF, CR, VT, OR FF? BLO 110$ ; IF LO, NO CMPB #13,R2 ; VERTICLE TAB?1 BEQ 110$ ; IF EQ, YES$+100$: CLRB (R3) ; CLEAR HORIZONAL POSITIONO BR 120$ ; .110$: CMPB (R3),U.CW4(R5) ; CARRIAGE OVERFLOW? BHIS 35$ ; IF HIS, YES* INCB (R3) ; INCREMENT HORIZONAL POSITION 120$: TST -(R3) ; LS11 PRINTER? .IF DF L$$11R BMI 150$ ; IF MI, YES) CMPB R2,#15 ; CARRIAGE RETURN? BHI 130$ ; IF HI, NO BEQ 160$ ; IF EQ, YEST CMPB R2,#14 ; FORM FEED? BEQ 140$ ; IF EQ, YESC CMPB R2,#12 ; LINE FEED? BEQ 140$ ; IF EQ, YES 3130$: BIT #CRJT,(R3) ; CARRIAGE RETURN JUST OUTPUT?Q BEQ 150$ ; IF EQ, NO8 BIS #BHLD,(R3) ; SET BYTE HELD BACK FOR CARRIAGE RETURN$ MOVB R2,3(R3) ; SAVE BYTE HELD BACK- MOVB #15,R2 ; SET TO OUTPUT CARRIAGE RETURNO8140$: BIC #CRJT,(R3) ; CLEAR CARRIAGE RETURN JUST OUTPUT .IFTF; ); TEST THE PRINTER CASE INDICATION IN CW2A%; IF IT DOES NOT INDICATE LOWER CASE +; FORCE LOWER CASE CHARACTERS TO UPPER CASEM;E150$:Q+ BIT #LOWER,U.CW2(R5) ; LOWER CASE PRINTER?E% BNE 155$ ; IF NE, YES, SKIP CONVERT  CMPB #141,R2 ; 'a' OR ABOVES BHI 155$ ; IF HI, NO" CMPB #172,R2 ; YES, 'z' OR BELOW BLO 155$ ; IF LO, NO BIC #40,R2 ; YES, CONVERT IT!155$: MOVB R2,2(R1) ; OUTPUT BYTE  JMP 5$ ; GO AGAINT .IFT$6160$: BIS #CRJT,(R3) ; SET CARRIAGE RETURN JUST OUTPUT JMP 5$ ; .ENDC;T,; SUBROUTINE TO WAIT FOR THE KMC TO BE READY;C ; INPUTS:A;"; R5 = UCB ADDRESS OF THE PRINTER"; R4 = SCB ADDRESS OF THE PRINTER;W ; OUTPUTS:;A; R0 = KMC CSR ADDRESS; .IF DF K$$MLP0WTKMC: MOV @S.KTB+2(R4),R0 ; GET KMC CSR ADDRESS" BIS #RQI,(R0) ; REQUEST KMC INPUT(10$: TST (R0) ; IS THE KMC-11 RUNNING ?. BPL 20$ ; IF PL, KMC NOT RUNNING - POWERFAIL" BIT #RDYI,2(R0) ; READY BIT SET ?% BEQ 10$ ; IF EQ, NO, WAIT SOME MORET$ BIC #RQI,(R0) ; CLEAR REQUEST INPUT RETURN ; YES, BO BACK;IE; WE WERE WAITING FOR THE KMC BUT THE KMC IS NOT RUNNING. THEREFORE,RJ; WE WILL GO TO THE POWERFAIL CODE WHICH WILL REQUEST THE MICROCODE LOADERH; TO RELOAD THE MICROCODE TO THE KMC. IF UNSUCCESSFUL, WE WILL CONTINUE; PRINTING WITHOUT THE KMC. ,;)=20$: BIS #PWRFLG!RQINPR,U.CW2(R5) ; SET POWERFAIL IN PROGRESSB- TST (SP)+ ; WE WON'T BE RETURNING TO CALLERB& MOV S.KTB+2(R4),R2 ; GET KRB ADDRESS MOV KMCCTB,R3 ; GET CTB ADDRESS$ JMP LKPWF0 ; FINISH IN COMMON CODE .ENDC ; DF K$$MLP .END; WE WERE WAITING FOR THE KMC BUT THE KMC IS NOT RUNNING. THEREFORE,RJ; WE WILL GO TO THE POWERFAIL CODE WHICH WILL REQUEST THE MICROCODE LOADERH; TO RELOAD THE MICROCODE TO THE KMC. IF UNSUCCESSFUL, WE WILL CONTINUE; PRINTING WITHOUT THE KMC. ,;)=20$: BIS #PWRFLG!RQINPR,U.CW2(R5) ; SET POWERFAIL IN PROGRES .TITLE LRDRVI .IDENT /06/; COPYRIGHT (C) 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.Y2; DIGITAL EQUIPMENT OF CANADA LTD, KANATA, ONTARIO;TA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDP9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.:;T ; VERSION 05;; DAVID R. CROWE; ; PREVIOUSLY MODIFIED BY:S;; DAVID H. CHANS; HELEN GORDON; PATRICIA C. LEEM;(; MODIFIED BY:;V; R. E. CALDWELL 21-AUG-79;E'; RC011 -- USE CORRECT FORM OF GTPKT$..;L;R$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;9; A. V. HUDED 06-SEP-88 06;O8; AVH0004 --- MODIFIED TO SAVE THE LENGTH OF RECEPTION+; IN SECOND WORD OF I/O STATUS BLOCKD;DF; PARALLEL COMMUNICATIONS LINK (PCL) RECEIVER DRIVER FOR RSX-11M-PLUS.;S; MACRO LIBRARY CALLS.;E .MCALL PKTDF$,TCBDF$,UCBDF$$ PKTDF$ ;DEFINE I/O PACKET OFFSETS- TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS.E UCBDF$ ;DEFINE UCB OFFSETS.;+A; THIS DRIVER IS IN ONE OF A NUMBER OF SOFTWARE STATES D00pomkTADATADATADATADATADATAURING ITS@; OPERATION. ITS CURRENT STATE IS DEFINED IN THE LOW ORDER BYTE9; OF U.CW2 IN THE UCB. HANDLER STATES ARE DEFINED BELOW.R;P; INDEX MEANING; 0 NO TASK CONNECTED.%; 2 TASK CONNECTED BUT NOT TRIGGERED.K); 4 TASK TRIGGERED & AWAITING ATF OR RTF.S3; 6 TASK CONNECTED & TIMED OUT AWAITING ATF OR RTF.C;$; ... BUSY STATES .../8; THE CONTROLLER IS CONSIDERED BUSY BY RSX-11M WHILE THEE; HANDLER IS IN THESE STATES. THEREFORE ONLY THE INTERRUPT PROCESSORF=; NEED CONCERN ITSELF WITH THEM. BUSY STATES ARE AS FOLLOWS:R; ; -2 ATF IN PROGRESS. 6; -4 TASK CONNECTED, NOT TRIGGERED, & HAS ATF PENDING.; -6 RTF IN PROGRESS.; ; LEGAL FUNCTIONS BY STATE. ; FUNCTION LEGAL STATES; CRX 0T ; RTF 4, 6 ; ATF 2, 4, 6G ; DRX 2, 4, 6 ;-;++; HANDLER UCB WORK AREA OFFSET DEFINITIONS.T;-4U.TASK = U.CNT+2 ;TCB ADDR OF CONNECTED TASK [WORD]/U.TEF = U.TASK+2 ;TRIGGER EVENT FLAG NO. [WORD]S1U.TRSB = U.TEF+2 ;REAL ADDRESS OF TRIGGER STATUSC3U.BUF1 = U.TRSB+4 ;ADDRESS OF RETURN BUFFER (2 WDS) +U.AADA = U.BUF1+4 ;ATACHMENT DESCR. STORAGE ; BUFFER [2 WORDS];+?; THE HARDWARE REGISTERS ARE DEFINED RELATIVE TO THE RCR, WHOSECA; ADDRESS IS FOUND IN THE S.CSR FIELD OF THE SCB AT RUN TIME.;-$RCR = 0 ;RECEIVER COMMAND REGISTER.#RSR = 2 ;RECEIVER STATUS REGISTER.O,RDDB = 4 ;RECEIVER DESTINATION DATA BUFFER.+RDBC = 6 ;RECEIVER DESTINATION BYTE COUNT. -RDBA = 10 ;RECEIVER DESTINATION BUS ADDRESS. %RDCRC = 12 ;RECEIVER DESTINATION CRCT;+"; RECEIVER COMMAND REGISTER (RCR).;-REJ = 100000 ;REJECT (R/W) "RCNPR = 40000 ;RECEIVER NPR (R/W)"RCVWD = 20000 ;RECEIVE WORD (R/W)'IB04 = 10000 ;IDENTIFICATION BITS (RO)SIB03 = 4000 ; "IB02 = 2000 ; "IB01 = 1000 ; "IB00 = 400 ; " LDSILO = 200 ;LOAD SILO (R/W)!IE = 100 ;INTERRUPT ENABLE (R/W)O&A17 = 40 ;EXTENDED ADDRESS BITS (R/W) A16 = 20 ; "6#DTIRDY = 10 ;DATA INPUT READY (RO),INHADI = 4 ;INHIBIT ADDRESS INCREMENT (R/W)"BDINIT = 2 ;BOARD INITIALIZE (WO)RCVDAT = 1 ;RECEIVE DATA (R/W)G;IB = IB04!IB03!IB02!IB01!IB00 ;UNION OF IDENTIFICATION BITS ;+!; RECEIVER STATUS REGISTER (RSR).V;-ERR = 100000 ;ERROR (RO)T*NEXLOC = 40000 ;NONEXISTENT LOCATION (RO)&MEMOFL = 20000 ;MEMORY OVERFLOW (R/W))TXMERR = 10000 ;TRANSMISSION ERROR (R/W)EPAR = 4000 ;PARITY (R/W)RTIMOUT = 2000 ;TIME OUT (R/W)(BCOFL = 1000 ;BYTE COUNT OVERFLOW (R/W)%DTORDY = 400 ;DATA OUTPUT READY (RO)I(SUCTXF = 200 ;SUCCESSFUL TRANSFER (R/W)BUSY = 100 ;BUSY (RO)"RECOM = 40 ;REJECT COMPLETE (R/W)CHNOPN = 20 ;CHANNEL OPEN (RO)URSPB1 = 10 ;RESPONSE B1 (RO)RSPB0 = 4 ;RESPONSE B0 (RO)RSPA1 = 2 ;RESPONSE A1 (RO)RSPA0 = 1 ;RESPONSE A0 (RO);+; FUNCTION DISPATCH TABLEO;- FUNTBL: .IRP X, .WORD IO.'X, XS .ENDM .WORD 0 ;TERMINATOR0;+; DEVICE DISPATCH TABLE ;-- DDT$ LR,L$$R11,,CHK ;GENERATE DISPATCH TABLE(;+0; LRCHK - PCL RECEIVER DRIVER PARAMETER CHECKING; B; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/OD; REQUEST IS RECEIVED FOR THE PARALLEL COMMUNICATIONS LINK RECEIVER.E; SOME PCL RECEIVER REQUESTS CONTAIN INFORMATION THAT MUST BE CHECKEDRG; IN THE CONTEXT OF THE ISSUING TASK; THEREFORE, THE I/O REQUEST IS NOT#; QUEUED BEFORE CALLING THE DRIVER.O;I ; INPUTS:.;M ; R1 = ADDRESS OF THE I/O PACKET*; R4 = ADDRESS OF THE STATUS CONTROL BLOCK;; R5 = ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATEDR;I ; OUTPUTS:;HE; IF FUNCTION IS IO.CRX, ADDRESS CHECK IS PERFORMED FOR IOSB(8 BYTES) ;IA; IF THE QIO FUNCTION IS IO.ATF THEN THE RETURN BUFFER ADDRESS ISI9; CHECKED TO DETERMINE WHETHER IT LIES WITHIN THE ISSUING D; TASK'S ADDRESS SPACE. IF IT DOES THEN THE RETURN BUFFER ADDRESS IS>; RELOCATED AND STORED IN THE I/O PACKET. IF IT IS NOT A VALID@; ADDRESS THEN AN ILLEGAL BUFFER STATUS IS RETURNED AS THE FINAL; I/O STATUS OF THE REQUEST.;=;; FOR ALL FUNCTION CODES, THE I/O PACKET IS INSERTED IN THE ?; CONTROLLER QUEUE AND THE DEVICE INITIATOR IS ENTERED TO START ; THE CONTROLLER.;-1LRCH00pp4nblK: CMP #IO.CRX,I.FCN(R1) ;IS FUNCTION 'CRX'?R BNE 5$ ;IF NE NO# MOV R1,R3 ;SAVE IO PACKET ADDRESSI2 MOV I.PRM+2(R3),R0 ;GET VIRTUAL ADDRESS OF BUFFER MOV #4.,R1 ;GET LENGTH 4 BYTES CALL $ACHKB ;CHECK THE ADDRESS BCS 10$ ;IF CS BAD' MOV W.BATT(R2),R2 ;GET ATT. DESC. ADD.S$ INCB A.IOC(R2) ;INCREMENT I/O COUNT) MOV R2,I.PRM+6(R3) ;SAVE ATT. DESC. ADDRI" CALL $RELOC ;RELOCATE THE BUFFER MOV R1,I.PRM+2(R3) ;STORE BIAST" MOV R2,I.PRM+4(R3) ;STORE ADDRESS& MOV R3,R1 ;RESTORE IO PACKET ADDRESS BR 20$ ;CONTINUE55$: CMP #IO.ATF,I.FCN(R1) ;IS FUNCTION CODE = 'ATF'?  BNE 20$ ;IF NE NOS;D; 'ATF' FUNCTION - SET UP REGISTERS FOR ADDRESS CHECK AND RELOCATION;G$; R0 = ADDRESS TO CHECK AND RELOCATE ; R3 = ADDRESS OF THE I/O PACKET;B+ MOV R1,R3 ;SAVE ADDRESS OF THE I/O PACKET(9 MOV I.PRM+6(R3),R0 ;GET VIRTUAL ADDRESS OF RETURN BUFFERS;A2; VALIDATE THE RETURN BUFFER ADDRESS FOR THIS TASK;+5 MOV #12.,R1 ;SET LENGTH OF RETURN BUFFER TO 6 WORDS CALL $ACHCK ;CHECK THE ADDRESS BCC 15$ ;IF CC OKN;F; INVALID RETURN BUFFER ADDRESS - SET ILLEGAL BUFFER STATUS AND FINISH;S210$: MOV #IE.SPC&377,R0 ;SET ILLEGAL BUFFER STATUS$ CALLR $IOFIN ;FINISH I/O OPERATION;S$; RELOCATE THE RETURN BUFFER ADDRESS; ,15$: MOV W.BATT(R2),R2 ;GET ATT. DESC. ADDR.$ INCB A.IOC(R2) ;INCREMENT I/O COUNT* MOV R2,I.AADA+2(R3) ;SAVE PTR FOR $IODONE CALL $RELOC ;RELOCATE ADDRESSD3 MOV R1,I.PRM+6(R3) ;RELOCATION BIAS ==> I/O PACKETR3 MOV R2,I.PRM+10(R3) ;16-BIT ADDRESS ==> I/O PACKETD% MOV R3,R1 ;RESTORE R1 TO I/O PACKETI;E$; INSERT THE I/O PACKET IN THE QUEUE;S(20$: MOV R4,R0 ;R0 = I/O QUEUE LISTHEAD( CALL $QINSP ;GO INSERT PACKET IN QUEUE; $; NOW GET THE I/O PACKET TO PROCESS.;E1LRINI: GTPKT$ LR,L$$R11,,,T ;GET I/O PACKET MACRO;1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:C;T!; R1 = ADDRESS OF THE I/O PACKET.R/; R2 = PHYSICAL UNIT NUMBER OF THE REQUEST UCB.R; R3 = CONTROLLER INDEX.+; R4 = ADDRESS OF THE STATUS CONTROL BLOCK.6<; R5 = ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;E; I/O REQUEST PACKET FORMAT:;N; WD.00 = I/O QUEUE THREAD WORDR.; WD.01 = REQUEST PRIORITY, EVENT FLAG NUMBER.(; WD.02 = TCB ADDRESS OF REQUESTER TASK.;; WD.03 = POINTER TO 2ND LUN WORD IN REQUESTER TASK HEADER.CB; WD.04 = CONTENTS OF 1ST LUN WORD IN REQUESTER TASK HEADER (UCB).; WD.05 = I/O FUNCTION CODE..; WD.06 = VIRTUAL ADDRESS OF I/O STATUS BLOCK..; WD.07 = RELOCATION BIAS OF I/O STATUS BLOCK.9; WD.10 = I/O STATUS BLOCK ADDRESS DISPLACEMENT + 140000. 1; WD.11 = VIRTUAL ADDRESS OF AST SERVICE ROUTINE.S;; WD.12 = FIRST PARAMETER OR RELOCATION BIAS OF DATA BUFFER0;; WD.13 = SECOND PARAMETER OR 16-BIT ADDRESS OF DATA BUFFERS2; WD.14 = THIRD PARAMETER OR LENGTH OF DATA BUFFER>; WD.15 = FOURTH PARAMETER OR RELOCATION BIAS OF RETURN BUFFER<; WD.16 = FIFTH PARAMETER OR 16-BIT ADDRESS OF RETURN BUFFER;/ MOV I.TCB(R1),R0 ;GET TCB ADDRESS OF REQUESTOR 0 BITB #T2.ABO,T.ST2(R0) ;IS TASK BEING ABORTED? BEQ 10$ ;IF EQ NOK CALLR IEVER ;YES, IT'S FATAL210$: MOV #FUNTBL,R0 ;GET ADDRESS OF FUNCTION TABLE.20$: CMP (R0),I.FCN(R1) ;FUNCTION CODES MATCH? BEQ 30$ ;IF EQ YES$ CMP (R0)+,(R0)+ ;MOVE TO NEXT ENTRY TST (R0) ;END OF TABLE?  BNE 20$ ;IF NE NON$ CALLR IEIFC ;YES, ILLEGAL FUNCTION*30$: JMP @2(R0) ;GO TO FUNCTION PROCESSOR;+; PROCESS 'CRX' FUNCTION;-4CRX: CMP I.PRM(R1),#96. ;IF TRIGGER EVENT FLAG > 64, BHI 20$ ;IF HI BAD. TSTB U.CW2(R5) ;IS A TASK ALREADY CONNECTED ? BNE 10$ ;IF NE YES6 MOV I.PRM(R1),U.TEF(R5) ;SAVE TRIGGER EVENT FLAG NO.< MOV I.PRM+2(R1),U.TRSB(R5) ;SAVE THE ADDRESS OF THE TRIGGER- MOV I.PRM+4(R1),U.TRSB+2(R5) ;STATUS BUFFER(, MOV I.TCB(R1),U.TASK(R5) ;SAVE TCB ADDRESS2 MOV I.PRM+6(R1),U.AADA(R5) ;SAVE ATT. DESC. ADDR.( CALL PRCRX ;CONNECT TASK FOR RECEPTION( CALLR ISSUC ;INDICATE SUCCESS AND EXIT,10$: CALLR IEDAA ;SOMEONE ALREADY CONNECTED*20$: CALLR IEBAD ;BAD PARAMETER SPECIFIED;+/; **-PRCRX-PERFORM ACTUAL CONNECT FOR RECEPTIONE;$?; THIS ROUTINE IS CALLED TO CONNECT THE RECEIVER F00pomkTADATADATADATADATADATAOR RECEPTION.N<; IT ACTIVATES THE HARDWARE TO RECEIVE A WORD, WHICH WILL BEE; TREATED AS A FLAGS WORD. IT SETS THE SOFTWARE STATE OF THE HANDLERS@; TO 2. THE ROUTINE SHOULD BE CALLED WHENEVER THE HANDLER WISHES; TO RECEIVE A FLAGS WORD.;C ; INPUTS:R0; R4 = ADDRESS OF THE STATUS CONTROL BLOCK (SCB).; R5 = ADDRESS OF THE UNIT CONTROL BLOCK (UCB);0 ; OUTPUTS:6; THE RECEIVER IS INITIALIZED (BDINIT) & RCVWD IS SET.); THE HANDLER IS SET TO SOFTWARE STATE 2.U ; R0 IS SET POINTING TO THE RCR.;-'PRCRX: MOV U.BUF(R5),-(SP) ;SAVE BUFFERR MOV U.BUF+2(R5),-(SP) ;ADDRESS MOV U.CNT(R5),-(SP) ;& COUNT./ MOV U.TRSB(R5),U.BUF(R5) ;MOVE TRIGGER STATUS 5 MOV U.TRSB+2(R5),U.BUF+2(R5) ;BUFFER ADDR TO U.BUF.S# MOV #4,U.CNT(R5) ;LOAD BYTE COUNT.N% CLR -(SP) ;SET STATUS BYTE TO ZERO.N CALL $PTBYT ; " $ MOV (SP)+,U.CNT(R5) ;RESTORE BUFFER MOV (SP)+,U.BUF+2(R5) ;ADDRESS MOV (SP)+,U.BUF(R5) ;& COUNT.% MOV S.CSR(R4),R0 ;GET ADDRESS OF RCRO' BIS #BDINIT,(R0) ;INITIALIZE RECEIVER. 2 BIS #RCVWD!IE,(R0) ;PREPARE TO RECEIVE A FLAG WD.+ MOVB #2,U.CW2(R5) ;SET HANDLER STATE TO 2.U RETURN ;);+; PROCESS 'RTF' FUNCTION;-8RTF: CMP I.TCB(R1),U.TASK(R5) ;RTF FROM CONNECTED TASK? BEQ 10$ ;IF EQ YES' CALLR IEDNA ;NO, DEVICE NOT AVAILABLER*10$: MOVB U.CW2(R5),R0 ;GET HANDLER STATE.% BIC #^C6,R0 ;MASK OUT UNWANTED BITSR2 JMP @RTFJMP(R0) ;PROCESS FUNCTION ACCORDING STATERTFJMP: .WORD IEDNA ;STATE 0R .WORD IENTR ;STATE 2 .WORD RTFS4 ;STATE 4 .WORD RTFS6 ;STATE 6+RTFS4: MOV S.CSR(R4),R0 ;GET ADDRESS OF RCRW+ BIS #REJ!IE,(R0) ;SET REJECT & INT ENABLE.2- MOVB #-6,U.CW2(R5) ;SET HANDLER STATE TO -6.N( MOVB S.ITM(R4),S.CTM(R4) ;SET TIME OUT RETURN ;T1RTFS6: MOVB #2,U.CW2(R5) ;SET HANDLER STATE TO 2.V$ CALLR IEDNR ;FORCE DRIVE NOT READY;+; PROCESS 'ATF' FUNCTION;-ATF: ;REF LABEL .IF DF M$$EXT( CALL $STMAP ;SET UP UNIBUS MAP ADDRESS .ENDC4 MOV I.PRM+6(R1),U.BUF1(R5) ;RELOCATION BIAS ==> UCB6 MOV I.PRM+10(R1),U.BUF1+2(R5) ;16-BIT ADDRESS ==> UCB4 CMP I.TCB(R1),U.TASK(R5) ;ATF FROM CONNECTED TASK? BEQ 10$ ;IF EQ YES' CALLR IEDNA ;NO, DEVICE NOT AVAILABLEN*10$: MOVB U.CW2(R5),R0 ;GET HANDLER STATE." BIC #^C6,R0 ;CLEAR UNWANTED BITS5 JMP @ATFJMP(R0) ;PROCESS FUNCTION ACCORDING TO STATEIATFJMP: .WORD IEDNA ;STATE 0F .WORD ATFS2 ;STATE 2 .WORD PRATF ;STATE 4 .WORD RTFS6 ;STATE 6ATFS2: MOVB #-4,U.CW2(R5)% CLRB S.CTM(R4) ;NO TIME OUT ON THIS5 RETURN ;;+); **-PRATF-PERFORM ACCEPTANCE OF TRANSFERB;AA; THIS ROUTINE IS CALLED TO INITIATE THE RECEPTION OF THE MESSAGE?@; WHICH HAS JUST BEEN ACCEPTED. THE STATE OF THE HANDLER IS SET<; TO -2, WHICH INDICATES THAT THE HANDLER IS BUSY PERFORMING; THE ACCEPT TRANSFER FUNCTION.);R ; INPUTS:I0; R4 = ADDRESS OF THE STATUS CONTROL BLOCK (SCB).; R5 = ADDRESS OF THE UNIT CONTROL BLOCK (UCB);E ; OUTPUTS:D; THE RDBC & RDBA ARE SET UP, & AN NPR RCVDAT FUNCTION IS INITIATED.!; THE HANDLER IS SET TO STATE -2. ; R0 IS SET POINTING TO THE RCR.; R2 IS DESTROYED.;-PRATF: ;REF LABEL .IF DF M$$EXT# CALL $MPUBM ;MAP UNIBUS TO MEMORYE. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKET ADDRESS .ENDC% MOV S.CSR(R4),R0 ;GET ADDRESS OF RCR9 MOV U.BUF+2(R5),RDBA(R0) ;LOAD BUFFER ADDRESS REGISTER.D" MOV U.CNT(R5),R2 ;GET BYTE COUNT. NEG R2 ;NEGATE IT & LOAD& MOV R2,RDBC(R0) ;BYTE COUNT REGISTER.- MOVB #-2,U.CW2(R5) ;SET HANDLER STATE TO -2.U9 BIS #RCNPR!RCVDAT!IE,U.BUF(R5) ;SET RCNPR, RCVDAT, IE, & 0 BIS U.BUF(R5),(R0) ;EXTENDED ADDR BITS IN RCR.( MOVB S.ITM(R4),S.CTM(R4) ;SET TIME OUT RETURN ;L;+; PROCESS 'DRX' FUNCTION;-,DRX: TSTB U.CW2(R5) ;IS ANY TASK CONNECTED ? BEQ 10$ ;IF EQ NOR( MOV I.TCB(R1),R1 ;YES, GET TCB ADDRESS., CMP R1,U.TASK(R5) ;IS THIS TASK CONNECTED ? BNE 10$ ;IF NE NOG CALL PRDRX ;DO THE DISCONNECTI CALLR ISSUC ;EXIT WITH SUCCESS'10$: CALLR IEDNA ;DEVICE NOT AVAILABLEN;+3; **-PRDRX-PERFORM ACTUAL DISCONNECT FROM RECEPTIONN; =; THIS ROUTINE DISCONNECTS THE RECEIVING TASK FROM RECEP00pp4nblTION..;M ; INPUTS:4; R1 = ADDRESS OF TCB FOR TASK.R; R4 = SCB ADDRESS.S; R5 = UCB ADDRESS.;R ; OUTPUTS:4; THE I/O REQUEST COUNT FOR THE TASK IS DECREMENTED.'; THE RECEIVER IS INITIALIZED (BDINIT). ; THE HANDLER STATE IS SET TO 0. ; R0 IS SET POINTING TO THE RCR.;-;PRDRX: MOV U.AADA(R5),R0 ;GET ATTACHMENT DESCRIPTOR ADDRESS$ DECB A.IOC(R0) ;DECREMENT I/O COUNT% MOV S.CSR(R4),R0 ;GET ADDRESS OF RCRI- BIS #BDINIT,(R0) ;INITIALIZE RECEIVER BOARD.S, CLR U.AADA(R5) ;CLEAR ATTACHED REGION DESC.4 CLR U.TASK(R5) ;CLEAR TCB ADDRESS OF CONNECTED TASK% CLR U.TEF(R5) ;CLEAR EVENT FLAG ALSO( CLRB U.CW2(R5) ;SET HANDLER STATE TO 0. RETURN ; ;+,; **-$LRINT-PCL RECEIVER INTERRUPT PROCESSOR;<; INTERRUPTS ARE PROCESSED DEPENDING UPON THE HANDLER STATE.;-$LRINT::6 INTSV$ LR,PR5,L$$R11 ;;;GENERATE INTERRUPT SAVE STUFF% MOV U.SCB(R5),R4 ;;;GET SCB ADDRESS.% MOV S.CSR(R4),R4 ;;;GET RCR ADDRESS.( BIC #IE,(R4) ;;;DISABLE PCL INTERRUPTS.& CALL $FORK ;;;CREATE A FORK PROCESS. MOV R4,R0 ;COPY RCR ADDRESSE# MOV U.SCB(R5),R4 ;GET SCB ADDRESS.R& MOVB U.CW2(R5),R2 ;GET HANDLER STATE.6 JMP @INTJMP(R2) ;PROCESS INTERRUPT ACCORDING TO STATE .WORD INTM6 ;STATE -6I .WORD INTM4 ;STATE -4  .WORD INTM2 ;STATE -2DINTJMP: .WORD INTP0 ;STATE 0 .WORD INTP2 ;STATE 2  .WORD INTP4 ;STATE 4  .WORD INTP6 ;STATE 6V;B<; THE VARIOUS INTERRUPT STATE PROCESSORS WHICH ARE JUMPED TOG; THROUGH THE INTJMP TABLE ARE ENTERED WITH REGISTERS SET AS FOLLOWS:A; R0 = RCR ADDRESS; R2 = HANDLER STATE; R4 = SCB ADDRESS; R5 = UCB ADDRESS;1INTM6: BIT #ERR!SUCTXF,RSR(R0) ;ERROR OF SUCTXF?R BNE 10$ ;IF NE YES" BIT #RECOM,RSR(R0) ;IS RECOM SET? BEQ 10$ ;IF EQ NOT% CALL PRCRX ;RECONNECT FOR RECEPTIOND CALLR ISSUC ;EXIT WITH SUCCESS'10$: CALLR IEFHE ;FATAL HARDWARE ERRORAINTM4:INTP2: INTP6: TST RSR(R0) ;ANY ERRORS? BMI 10$ ;IF MI YES' BIT #RECOM,RSR(R0) ;REJECT COMPLETION?  BNE 20$ ;IF NE YES( BIT #DTORDY,RSR(R0) ;DATA OUTPUT READY? BNE 40$ ;IF NE YES/ CALLR PRCRX ;RECONNECT FOR RECEPTION AND EXITD(10$: BIT #PAR,(R0) ;IS IT PARITY ERROR ? BNE 20$ ;IF NE YES NOP)20$: CALL PRCRX ;RECONNECT FOR RECEPTION , MOVB R2,U.CW2(R5) ;MOVE STATE TO AS BEFORE. RETURN ;E#40$: TST R2 ;IS HANDLER STATE -4 ?S, BGE 60$ ;IF GE NO, GIVE FLAGS WORD TO TASK TST RDDB(R0) ; CALLR PRATF ;ACCEPT TRANSFER360$: MOV U.BUF(R5),-(SP) ;SAVE BUFFER ADDR & COUNT.P MOV U.BUF+2(R5),-(SP) ;Y MOV U.CNT(R5),-(SP) ;= MOV U.TRSB(R5),U.BUF(R5) ;LOAD TRIGGER STATUS BLOCK ADDRESSN MOV U.TRSB+2(R5),U.BUF+2(R5) ;+ MOV #4,U.CNT(R5) ;LOAD A BIG ENOUGH COUNT.2 CMP R2,#2 ;IS THE STATUS=2?  BEQ 70$ ;IF EQ YES4 MOV #&377,R2 ; STATE 6 ==> STATUS IE.DAO70$: ASRB R2 ; " MOV (R0),R3 ;GET CONTENTS OF RCR( BIC #^C,R3 ;ISOLATE TRANSMITTER ID. BIS R3,R2 ;MERGE WITH STATUS.P$ MOV R2,-(SP) ;GET FIRST STATUS WORD" CALL $PTWRD ;PUT IN USERS BUFFER+ MOV RDDB(R0),-(SP) ;GET SECOND STATUS WORDR" CALL $PTWRD ;PUT IN USERS BUFFER6 MOV (SP)+,U.CNT(R5) ;RESTORE COUNT AND BUFFER ADDRESS MOV (SP)+,U.BUF+2(R5) ;. MOV (SP)+,U.BUF(R5) ;# MOVB #4,U.CW2(R5) ;SET STATE TO 4.S# BIS #IE,(R0) ;REENABLE INTERRUPTS..- MOV U.TEF(R5),R0 ;GET TRIGGER EVENT FLAG NO.:4 MOV U.TASK(R5),R5 ;GET TCB ADDR FOR CONNECTED TASK. BEQ 90$ ;IF EQ NONEA- CALL $CEFI ;CONV EVENT FLAG TO MASK & ADDR." BCS 90$ ;IF CS NO FLAG SPECIFIED BIS R0,(R1) ;SET FLAGS.90$: CALLR $DRDSE ;DECLARE SIGNIFICANT EVENT. INTM2: TST RSR(R0) ;ANY ERRORS? BMI M2ERR ;IF MI YES$ TSTB RSR(R0) ;SUCCESSFUL TRANSFER? BPL M2PAR ;IF PL NOR)M2SUC: MOV (R0),R2 ;GET CONTENTS OF RCR.2) BIC #^C,R2 ;RETRIEVE TRANSMITTER ID.A' BIS #IS.SUC,R2 ;MERGE IN RETURN STATUST% BIT #RECOM,RSR(R0) ;REJECT COMPLETE?, BEQ 10$ ;IF EQ NOC% INC R2 ; +2 FOR TRUNCATED RECEPTION210$: MOV RDBC(R0),R1 ;COMPUTE LENGTH OF RECEPTION. ADD U.CNT(R5),R1 ;S MOV U.BUF(R5),-(SP) ;SAVE U.BUF% MOV U.BUF+2(R5),-(SP) ;SAVE U.BUF+2N MOV U.CNT(R5),-(SP) ;SAVE U.CNT3 MOV U.BUF1(R5),U.BU00qomkTADATADATADATADATADATAF(R5) ;RELOCATION BIAS ==> UCBU BEQ 20$ ;IF EQ ZEROL5 MOV U.BUF1+2(R5),U.BUF+2(R5) ;16-BIT ADDRESS ==> UCB  BR 30$ ;GO MOVE THE REGISTERSV;R7; RELOCATION BIAS = 0 CHECK FOR NON-ZERO 16-BIT ADDRESS;T920$: MOV U.BUF1+2(R5),U.BUF+2(R5) ;16-BIT ADDRESS ==> UCBI" BEQ 40$ ;IF EQ NO RETURN ADDRESS;0#; REGISTERS REQUESTED - RETURN THEM ;E.30$: MOV (R0)+,-(SP) ;GET CONTENTS OF REGISTER% CALL $PTWRD ;PUT IT IN USERS BUFFER * MOV (R0)+,-(SP) ;GET CONTENTS OF REGISTER% CALL $PTWRD ;PUT IT IN USERS BUFFERA* MOV (R0)+,-(SP) ;GET CONTENTS OF REGISTER% CALL $PTWRD ;PUT IT IN USERS BUFFERD* MOV (R0)+,-(SP) ;GET CONTENTS OF REGISTER% CALL $PTWRD ;PUT IT IN USERS BUFFERO* MOV (R0)+,-(SP) ;GET CONTENTS OF REGISTER% CALL $PTWRD ;PUT IT IN USERS BUFFER=;C; CONTINUE PROCESSING ;U'40$: MOV (SP)+,U.CNT(R5) ;RESTORE U.CNTE( MOV (SP)+,U.BUF+2(R5) ;RESTORE U.BUF+2# MOV (SP)+,U.BUF(R5) ;RESTORE U.BUFP% CALL PRCRX ;RECONNECT FOR RECEPTION) MOV R2,R0 ;COPY STATUS CODEL CALL $IODON ;FINISH I/OB JMP LRINI ;TRY FOR MORE WORK*M2ERR: MOV RSR(R0),R1 ;GET CONTENTS OF RSR$ BIT #BCOFL,R1 ;CHECK FOR BYTE COUNT BNE 10$ ;IF NE OVERFLOWP2 BIT #PAR!TXMERR,R1 ;PARITY OR TRANSMISSION ERROR? BNE M2PAR ;IF NE YES$ BIT #TIMOUT,R1 ;CHECK FOR TIME OUT. BNE M2TIME ;IF NE YESN) BIT #MEMOFL!NEXLOC,R1 ;NEM OR OVERFLOW?. BNE M2OFL ;IF NE YES* CALLR IEBBE ;INDICATE TRANSMISSION ERROR;E; BYTE COUNT OVERFLOWR;;/10$: BIC #BCOFL,RSR(R0) ;CLEAR ERROR CONDITION.S# BIS #REJ!IE,(R0) ;TRUNCATE MESSAGEJ RETURN ;Y;R; PARITY OR TRANSMISSION ERROR; +M2PAR: CALL PRCRX ;RECONNECT FOR RECEPTIONO BR IEBBE ;FLAG IE.BBEI;E; RECEIVER TIMEOUT;X,M2TIME: CALL PRCRX ;RECONNECT FOR RECEPTION! BR IEDNR ;FLAG DEVICE NOT READYC;K*; NONEXISTENT LOCATION OR MEMORY OVERFLOW.;#+M2OFL: CALL PRCRX ;RECONNECT FOR RECEPTIONO) BR IESPC ;INDICATE NONEXISTENT LOCATIONN*INTP0: BIS #BDINIT,(R0) ;INITIALIZE BOARD. RETURN ;F+INTP4: CALL PRCRX ;RECONNECT FOR RECEPTIONE+ MOVB #6,U.CW2(R5) ;SET HANDLER STATE TO 6. RETURN ;N;+%; **-LRCAN-CANCEL I/O SERVICE ROUTINEN; :; THIS ENTRY POINT IS ENTERED WHEN AN IO.KIL FUNCTION IS9; ISSUED REGARDLESS OF WHETHER THE DEVICE IS BUSY OR NOT. ;N ; INPUTS:V,; R0 = ADDRESS OF ACTIVE I/O PACKET (IF ANY)%; R1 = ADDRESS OF TCB OF CURRENT TASK ; R3 = CONTROLLER INDEXO; R4 = SCB ADDRESS; R5 = UCB ADDRESS;N ; OUTPUTS:6; 1. IF TASK TERMINATION IS IN PROGRESS, THEN BOARD IS1; INITIALIZED & TASK (IF ANY) IS DISCONNECTED.67; 2. OTHERWISE, IF REQUEST IS OUTSTANDING, THEN TASK IS; RECONNECTED FOR RECEPTION.T>; 3. REGARDLESS OF RUN DOWN STATUS, IF REQUEST IS OUTSTANDING,2; THEN COMPLETION IS INDICATED WITH STS=IE.ABO.;-7LRCAN: CMP R1,U.TASK(R5) ;;;REQUEST FOR CONNECTED TASK?E BNE 10$ ;;;IF NE NOE% MOV S.CSR(R4),R3 ;;;GET RCR ADDRESS.R$ BIC #IE,(R3) ;;;DISABLE INTERRUPTS. MTPS #0 ;;;LOWER PRIORITY:/ BITB #T2.HLT,T.ST2(R1) ;TASK BEING TERMINATED?O BEQ 20$ ;IF EQ NOZ0 MOVB U.CW2(R5),R2 ;YES, RETRIEVE HANDLER STATE. CALL PRDRX ;DISCONNECT TASKT TSTB R2 ;IS UNIT BUSY? BLT 30$ ;IF LT YES10$: RETURN ;F"20$: TSTB U.CW2(R5) ;IS UNIT BUSY? BGE 10$ ;IF GE YES+ CALL PRCRX ;ABORT OPERATION AND RECONNECTR30$: BR IEABO ;;+; POWERFAIL AND TIMEOUTK;-)LROUT: TSTB U.CW2(R5) ;IS TASK CONNECTED?G BEQ 10$ ;IF EQ YES% CALL PRCRX ;RECONNECT FOR RECEPTION /10$: BITB #US.BSY,U.STS(R5) ;IS THE UNIT BUSY?T BEQ LRPWF ;IF EQ NO* BR IEDNR ;YES, ABORT OUTSTANDING REQUESTLRPWF: RETURN ;T;+-; PROCESS ERROR CONDITIONS AND CALL I/O DONE.N;-%IEABO: MOV #IE.ABO&377,R0 ;ABORT TASK BR IODON ;)IEBAD: MOV #IE.BAD&377,R0 ;BAD PARAMETERSY BR IODON ;3IEDAA: MOV #IE.DAA&377,R0 ;DEVICE ALREADY CONNECTED BR IODON ;1IEBBE: MOV #IE.BBE&377,R0 ;BAD TRANSMISSION ERRORK BR IODON ;/IEDNA: MOV #IE.DNA&377,R0 ;DEVICE NOT AVAILABLEE BR IODON ;+IEDNR: MOV #IE.DNR&377,R0 ;DEVICE NOT READYB BR IODON ;/IEFHE: MOV #IE.FHE&377,R0 ;FATAL HARDWARE ERROR BR IODON 00 qq4nbl ;0IEIFC: MOV #IE.IFC&377,R0 ;INVALID FUNCTION CODE BR IODON ;-IENTR: MOV #IE.NTR&377,R0 ;TASK NOT TRIGGEREDO BR IODON ;)IESPC: MOV #IE.SPC&377,R0 ;ILLEGAL BUFFERO BR IODON ;6IEVER: MOV #IE.VER&377,R0 ;PARITY OR HARD DEVICE ERROR BR IODON ;/ISSUC: MOV #IS.SUC&377,R0 ;SUCCESSFUL OPERATIONO%IODON: CALL $IOALT ;PROCESS I/O DONE  JMP LRINI ;AND TRY FOR MORE .ENDV #IE.DNR&377,R0 ;DEVICE NOT READYB BR IODON ;/IEFHE: MOV #IE.FHE&377,R0 ;FATAL HARDWARE ERROR BR IODON .TITLE LTDRVS .IDENT /05/; COPYRIGHT (C) 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.O1; DGITAL EQUIPMENT OF CANADA LTD, KANATA, ONTARIOR;RA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDB9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;P ; VERSION 05;P; DAVID R. CROWE;; PREVIOUSLY MODIFIED BY:I;T; DAVID H. CHAN1; HELEN GORDON; PATRICIA C. LEE6;); ; MODIFIED BY:;S; R. E. CALDWELL 21-AUG-79;A!; RC010 -- FIX BUG IN CANCEL I/O#; AND USE CORRECT FORM OF GTPKT$.Y;HH; PARALLEL COMMUNICATION LINK (PCL) TRANSMITTER DRIVER FOR RSX-11M-PLUS.;E; MACRO LIBRARY CALLSA;N .MCALL PKTDF$,TCBDF$,UCBDF$$ PKTDF$ ;DEFINE I/O PACKET OFFSETS- TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS.R UCBDF$ ;DEFINE UCB OFFSETSS;+#; STATE SETTINGS FOR 'STC' FUNCTIONS;-SS.MAS = 1 ;MASTER STATECD;EVENT FLAG FEATURE AND SECONDARY STATE CAPABILITY HAVE BEEN REMOVED;SS.SEC = 2 ;SECONDARY STATESS.NEU = 4 ;NEUTRAL STATE;+"; MODE SETTINGS FOR 'STC' FUNCTION;-MS.AUT = 20 ;AUTO ADDRESSMS.ADS = 40 ;ADDRESS SILO;+; CHARACTERISTIC WORD USAGE.+; U.CW2 IS USED BY THE HANDLER AS FOLLOWS:D; BITS 7-0 CONTAIN NUMBER OF RETRIES TO BE PERFORMED AFTER CURRENT; TRY IF NECESSARY.;-;++; HANDLER UCB WORK AREA OFFSET DEFINITIONS.';-,U.EFN = U.CNT+2 ;'NOWMST' EVENT FLAG NUMBER5U.TCB = U.EFN+2 ;TCB ADDRESS OF EVENT FLAG REQUESTORR9U.BUF1 = U.TCB+2 ;RELOCATION BIAS FOR RETURN REG. BUFFERL;+@; THE HARDWARE REGISTERS ARE DEFINED RELATIVE TO THE TCR, WHOSE?; ADDRESS IS FOUND IN THE S.CSR FIELD OF THE SCB AT RUN TIME.R;-'TCR = 0 ;TRANSMITTER COMMAND REGISTER.L&TSR = 2 ;TRANSMITTER STATUS REGISTER.*TSDB = 4 ;TRANSMITTER SOURCE DATA BUFFER.)TSBC = 6 ;TRANSMITTER SOURCE BYTE COUNT. +TSBA = 10 ;TRANSMITTER SOURCE BUS ADDRESS. /TMMR = 12 ;TRANSMITTER MASTER/MAINTENANCE REG.F#TSCRC = 14 ;TRANSMITTER SOURCE CRCS;+%; TRANSMITTER COMMAND REGISTER (TCR).R;-#RIB = 100000 ;RETRY IF BUSY (R/W).G&TXNPR = 40000 ;TRANSMITTER NPR (R/W). SNDWD = 20000 ;SEND WORD (R/W).+DC04 = 10000 ;DESTINATION CODE BITS (R/W).DC03 = 4000 ; "DC02 = 2000 ; "DC01 = 1000 ; "DC00 = 400 ; "RRDSILO = 200 ;READ SILO (R/W).S"IE = 100 ;INTERRUPT ENABLE (R/W).'A17 = 40 ;EXTENDED ADDRESS BITS (R/W).R A16 = 20 ; "E%DTORDY = 10 ;DATA OUTPUT READY (RO). -INHADI = 4 ;INHIBIT ADDRESS INCREMENT (R/W).T#BDINIT = 2 ;BOARD INITIALIZE (WO).O%STTXM = 1 ;START TRANSMISSION (R/W).0>DC = DC04!DC03!DC02!DC01!DC00 ;UNION OF DESTINATION CODE BITS.;+$; TRANSMITTER STATUS REGISTER (TSR).;-ERR = 100000 ;ERROR (RO).+NEXLOC = 40000 ;NONEXISTENT LOCATION (RO).1'MEMOFL = 20000 ;MEMORY OVERFLOW (R/W). *TXMERR = 10000 ;TRANSMISSION ERROR (R/W)."MSTDWN = 4000 ;MASTER DOWN (R/W).TIMOUT = 2000 ;TIME OUT (R/W).OVERUN = 1000 ;OVERRUN (R/W).%DTIRDY = 400 ;DATA INPUT READY (RO).C)SUCTXF = 200 ;SUCCESSFUL TRANSFER (R/W).ZBUSY = 100 ;BUSY (RO).R"SORE = 40 ;SOFTWARE REJECT (R/W).!TDMBSY = 20 ;TDM BUS BUSY (R/W).NRSPB1 = 10 ;RESPONSE B1 (RO).RSPB0 = 4 ;RESPONSE B0 (RO).RSPA1 = 2 ;RESPONSE A1 (RO)..RSPA0 = 1 ;RESPONSE A0 (RO).L;+1; TRANSMITTER MASTER/MAINTENANCE REGISTER (TMMR).X;-; LOW ORDER BYTE (TMMR+0).-TXMAD4 = 20 ;TRANSMITTER ADDRESS BITS (R/W).TTXMAD3 = 10 ; "(TXMAD2 = 4 ; "TXMAD1 = 2 ; "TXMAD0 = 1 ; "; HIGH ORDER BYTE (TMMR+1).F)AOPRDY = 200 ;ADDRESS OUTPUT READY (RO).1(AIPRDY = 100 ;ADDRESS INPUT READY (RO).&CLRA00qomkTADATADATADATADATADATADR = 40 ;CLEAR ADDRESS SILO (WO).!AUTADR = 20 ;AUTO ADDRESS (R/W).O CHNOPN = 10 ;CHANNEL OPEN (RO).NOWMST = 4 ;NOW MASTER (R/W).!SEC = 2 ;SECONDARY MASTER (R/W).MASTER = 1 ;MASTER (R/W).;+; PAD TRANSMITTER ID;-PAD = 31. ;PAD TRANSMITTER ID;+; DEVICE DISPATCH TABLES;-- DDT$ LT,L$$T11,,CHK ;GENERATE DISPATCH TABLE;+; LOCAL IMPURE DATA TABLES;-$PRVAL: .BLKW L$$T11 ;PREVIOUS VALUE*ASCNT: .BLKW L$$T11 ;ADDRESS SILO COUNTER0LFVAL: .BLKW L$$T11 ;VALUES LEFT IN USER BUFFER)FRVAL: .BLKW L$$T11 ;FIRST VALUE IN SILOA;+3; LTCHK - PCL TRANSMITTER DRIVER PARAMETER CHECKING4;NJ; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUESTD; IS RECEIVED FOR THE PARALLEL COMMUNICATIONS LINK TRANSMITTER. SOMEF; PCL TRANSMITTER REQUESTS CONTAIN INFORMATION THAT MUST BE CHECKED IND; THE CONTEXT OF THE ISSUING TASK; THEREFORE, THE I/O REQUEST IS NOT#; QUEUED BEFORE CALLING THE DRIVER.L;1 ; INPUTS: ;O ; R1 = ADDRESS OF THE I/O PACKET*; R4 = ADDRESS OF THE STATUS CONTROL BLOCK;; R5 = ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATEDV;P ; OUTPUTS:;NB; IF THE QIO FUNCTION IS IO.STC THEN NO PRIOR ADDRESS CHECKING HASE; BEEN PERFORMED BY THE SYSTEM BECAUSE IO.STC IS CLASSED AS A CONTROLS;; FUNCTION. IT IS THEREFORE NECESSARY TO FIRST MOVE ALL THETC; PARAMETERS SO THAT THE ADDRESS DOUBLEWORD FOR THE DATA BUFFER MAY A; BE MOVED TO I.PRM AND I.PRM+2 AFTER IS HAS BEEN ADDRESS CHECKED >; AND RELOCATED. IF THE LENGTH OF THE DATA BUFFER IS ZERO, THEC; ADDRESS CHECK WILL NOT TAKE PLACE AND THE ZERO LENGTH BUFFER WILLE; BE CONSIDERED VALID.;U@; IF THE QIO FUNCTION IS IO.STC OR IO.ATX THEN THE RETURN BUFFER<; ADDRESS IS CHECKED TO DETERMINE WHETHER IT LIES WITHIN THEA; ISSUING TASK'S ADDRESS SPACE. IF IT DOES THEN THE RETURN BUFFERRA; ADDRESS IS RELOCATED AND STORED IN THE I/O PACKET. IF IT IS NOTHB; A VALID ADDRESS THEN AN ILLEGAL BUFFER STATUS IS RETURNED AS THE"; FINAL I/O STATUS OF THE REQUEST.; ;; FOR ALL FUNCTION CODES, THE I/O PACKET IS INSERTED IN THEI?; CONTROLLER QUEUE AND THE DEVICE INITIATOR IS ENTERED TO STARTE; THE CONTROLLER.T;-7LTCHK: CMP #IO.ATX,I.FCN(R1) ;IS FUNCTION CODE = 'ATX'?D BEQ 30$ ;IE EQ YES1 CMP #IO.STC,I.FCN(R1) ;IS FUNCTION CODE = 'STC'?S BNE 60$ ;IF NE NO ;SB; 'STC' FUNCTION - MOVE ALL PARAMETERS TO MAKE WAY FOR DATA BUFFER; ADDRESS DOUBLEWORD;/10$: MOV R1,R3 ;SAVE ADDRESS OF THE I/O PACKETS; MOV I.PRM+12(R3),I.PRM+14(R3) ;MOVE RETURN BUFFER ADDRESSO7 MOV I.PRM+10(R3),I.PRM+12(R3) ;MOVE EVENT FLAG NUMBER) MOV I.PRM+6(R3),I.PRM+10(R3) ;MOVE MODE * MOV I.PRM+4(R3),I.PRM+6(R3) ;MOVE STATUS4 MOV I.PRM+2(R3),I.PRM+4(R3) ;MOVE LENGTH OF BUFFER BEQ 30$ ;IF EQ LENGTH = 0& BLT 15$ ;IF LT INVALID BUFFER LENGTH;'3; SET UP REGISTERS FOR ADDRESS CHECK AND RELOCATIONM; - MOV I.PRM(R3),R0 ;DATA BUFFER ADDRESS ==> R0D% MOV I.PRM+2(R3),R1 ;LENGTH ==> REG 1S CALL $ACHCK ;CHECK THE LENGTHM BCS 15$ ;IF CS, ERRORR2 MOV W.BATT(R2),R2 ;PICK UP ATTACHMENT DESC. ADDR. INCB A.IOC(R2) ;LOCK REGION/ MOV R2,I.AADA(R3) ;SAVE PTR IN PKT FOR $IODONED BR 20$ ;CONTINUE;P; INVALID BUFFER;S215$: MOV #IE.SPC&377,R0 ;SET ILLEGAL BUFFER STATUS2 CALLR $IOFIN ;CALL FINISH I/O OPERATION AND EXIT;L"; RELOCATE THE DATA BUFFER ADDRESS;S620$: CALL $RELOC ;GO RELOCATE THE DATA BUFFER ADDRESS& MOV R1,I.PRM(R3) ;SET RELOCATION BIAS' MOV R2,I.PRM+2(R3) ;SET 16-BIT ADDRESSH( BR 40$ ;GO CHECK RETURN BUFFER ADDRESS;O; 'STC' OR 'ATX' FUNCTIONK; 30$: MOV R1,R3 ;SAVE I/O PACKET>40$: MOV I.PRM+14(R3),R0 ;GET VIRTUAL ADDRESS OF RETURN BUFFER5 MOV #14.,R1 ;SET LENGTH OF RETURN BUFFER TO 7 WORDS: CALL $ACHCK ;CHECK THE ADDRESS BCS 15$ ;IF CS BAD2 MOV W.BATT(R2),R2 ;PICK UP ATTACHMENT DESC. ADDR. INCB A.IOC(R2) ;LOCK REGION1 MOV R2,I.AADA+2(R3) ;SAVE PTR IN PKT FOR $IODONER;D$; RELOCATE THE RETURN BUFFER ADDRESS;I# CALL $RELOC ;RELOCATE USER BUFFERD: MOV R1,I.PRM+14(R3) ;SET RELOCATION BIAS OF RETURN BUFFER9 MOV R2,I.PRM+16(R3) ;SET 16-BIT ADDRESS OF RETURN BUF00qq4nblFER$ MOV R3,R1 ;COPY I/O PACKET ADDRESS;R$; INSERT THE I/O PACKET IN THE QUEUE;L,60$: MOV R4,R0 ;SET R0 = I/O QUEUE LISTHEAD( CALL $QINSP ;GO INSERT PACKET IN QUEUE;; GET THE QUEUED I/O PACKETT;H1LTINI: GTPKT$ LT,L$$T11,,,T ;GET I/O PACKET MACROV;,(; ANALYZE THE CONTENTS OF THE I/O PACKET;D; R1 = I/O PACKETT.; R2 = PHYSICAL UNIT NUMBER OF THE REQUEST UCB; R3 = CONTROLLER INDEXR; R4 = STATUS CONTROL BLOCK ; R5 = UNIT CONTROL BLOCK.;+; I/O REQUEST PACKET FORMAT ;U; WD.00 = I/O QUEUE THREAD WORD -; WD.01 = REQUEST PRIORITY, EVENT FLAG NUMBERT'; WD.02 = TSB ADDRESS OF REQUESTER TASK/:; WD.03 = POINTER TO 2ND LUN WORD IN REQUESTER TASK HEADER;; WD.04 = CONTENTS OF 1ST LUN WORD IN REQUESTER TASK HEADER,; WD.05 = I/O FUNCTION CODE,-; WD.06 = VIRTUAL ADDRESS OF I/O STATUS BLOCK-; WD.07 = RELOCATION BIAS OF I/O STATUS BLOCK "; WD.10 = I/O STATUS BLOCK ADDRESS0; WD.11 = VIRTUAL ADDRESS OF AST SERVICE ROUTINE(; WD.12 = RELOCATION BIAS OF DATA BUFFER'; WD.13 = 16-BIT ADDRESS OF DATA BUFFERW; WD.14 = LENGTH OF DATA BUFFER ; WD.15 = FLAG WORD OR STATE; WD.16 = ID OR MODE0; WD.17 = NUMBER OF RETRIES OR EVENT FLAG NUMBER*; WD.20 = RELOCATION BIAS OF RETURN BUFFER); WD.21 = 16-BIT ADDRESS OF RETURN BUFFER0; / TST U.EFN(R5) ;WAS EFN FOR 'NOWMST' SPECIFIED?I BEQ 5$ ;IF EQ NO, MOV S.CSR(R4),R0 ;YES, RETREIVE CSR ADDRESS BIS #IE,(R0) ;ENABLE INTERRUPTS05$: MOV I.TCB(R1),R0 ;GET REQUESTER TCB ADDRESS.0 BITB #T2.ABO,T.ST2(R0) ;IS TASK BEING ABORTED? BEQ 10$ ;IF EQ NO " CALLR IEVER ;YES, REJECT REQUEST;B;; DISPATCH PACKET FOR PROCESSING ACCORDING TO FUNCTION CODE ;1110$: CMP #IO.ATX,I.FCN(R1) ;IS IT 'ATX' FUNCTION?  BEQ ATX ;IF EQ YES- CMP #IO.SEC,I.FCN(R1) ;IS IT 'SEC' FUNCTION?N BEQ IOSEC ;IF EQ YES- CMP #IO.STC,I.FCN(R1) ;IS IT 'STC' FUNCTION?  BEQ STC ;IF EQ YES$ CALLR IEIFC ;INVALID FUNCTION CODE;+; PROCESS 'ATX' FUNCTION; ; REQUIRED INPUTS:; R1 = I/O PACKETR.; R2 = PHYSICAL UNIT NUMBER OF THE REQUEST UCB; R3 = CONTROLLER INDEXN; R4 = STATUS CONTROL BLOCKT; R5 = UNIT CONTROL BLOCKC;-ATX: ;REF LABEL .IF DF M$$EXT( CALL $STMAP ;SET UP UNIBUS MAP ADDRESS# CALL $MPUBM ;MAP UNIBUS TO MEMORYC MOV S.PKT(R4),R1 ;RESTORE REG 1 .ENDC. CMPB I.PRM+11(R1),#DC/400 ;CPU ID > MAXIMUM? BHI LTBAD ;IF HI YES TSTB I.PRM+11(R1) ;CPU ID = 0?  BEQ LTBAD ;IF EQ YES& TSTB I.PRM+13(R1) ;RETRY COUNT > 255? BNE LTBAD ;IF NE YES4 MOVB I.PRM+12(R1),U.CW2(R5) ;SAVE RETRY COUNT BYTE.;B.; SET UP RETURN REGISTER BUFFER ADDRESS IN UCB;L6 MOV I.PRM+14(R1),U.BUF1(R5) ;RELOCATION BIAS ==> UCB6 MOV I.PRM+16(R1),U.BUF1+2(R5) ;16-BIT ADDRESS==> UCB2RETRY: MOV S.CSR(R4),R0 ;GET DEVICE ADDRESS (TSR).$ MOV #BDINIT,(R0) ;BOARD INITIALIZE.9 MOV I.PRM+6(R1),TSDB(R0) ;MOVE FLAGS WORD TO DATA SILO.I2 MOV U.BUF+2(R5),TSBA(R0) ;SET UP BUFFER ADDRESS.! MOV U.CNT(R5),R2 ;GET BYTE COUNTR NEG R2 ;NEGATE IT.) MOV R2,TSBC(R0) ;PUT IT IN PCL REGISTER.+) MOVB I.PRM+11(R1),TCR+1(R0) ;SET CPU ID.B6 BIS #RIB!TXNPR!SNDWD!IE!STTXM,U.BUF(R5) ;SET EXTENDED, BIS U.BUF(R5),(R0) ;ADDR & GO BITS IN TCR.* MOVB S.ITM(R4),S.CTM(R4) ;- SET TIME OUT RETURN ;>#LTBAD: CALLR IEBAD ;BAD PARAMETERSC;+; PROCESS 'SEC' FUNCTION; ; REQUIRED INPUTS:; R4 = STATUS CONTROL BLOCKO;-+IOSEC: MOV S.CSR(R4),R0 ;GET DEVICE ADDRESS(1 MOV TMMR(R0),R1 ;MOVE SECOND WORD FOR IOSB TO R1T, MOV #IS.SUC&377,R0 ;GET SUCCESS STATUS CODE# CALL $IODON ;GO EXIT THIS REQUESTV! BR LTINI ;GO LOOK FOR MORE WORKD;+; PROCESS 'STC' FUNCTION;U; REQUIRED INPUTS:; R1 = I/O PACKET(.; R2 = PHYSICAL UNIT NUMBER OF THE REQUEST UCB; R3 = CONTROLLER INDEX; R4 = STATUS CONTROL BLOCKI; R5 = UNIT CONTROL BLOCK+;--STC: MOV I.TCB(R1),R0 ;GET TASK'S TCB ADDRESS / BIT #T3.PRV,T.ST3(R0) ;IS THE TASK PRIVLEGED?R BEQ 35$ ;IF EQ NOD$ TST I.PRM+6(R1) ;'STATE' SPECIFIED? BEQ 10$ ;IF EQ NO* CMP #SS.MAS,I.PRM+6(R1) ;IS IT 'MASTER'? BEQ 10$ ;IF EQ YESD;EVENT FLAG FEATURE AND SECONDARY STATE CAPABILITY HAVE BEEN REMOVED00%qomkTADATADATADATADATADATA.; CMP #SS.SEC,I.PRM+6(R1) ;IS IT 'SECONDARY'?; BEQ 10$ ;IF EQ YESI+ CMP #SS.NEU,I.PRM+6(R1) ;IS IT 'NEUTRAL'?N% BNE LTBAD ;IF NE NO, BAD PARAMETERSL;I; VALIDATE THE 'MODE' PARAMETER;T(10$: TST I.PRM+10(R1) ;'MODE' SPECIFIED? BEQ 20$ ;IF EQ NO30 CMP #MS.AUT,I.PRM+10(R1) ;IS 'AUTO' SPECIFIED? BEQ 20$ ;IF EQ YES8 CMP #MS.ADS,I.PRM+10(R1) ;IS 'ADDRESS SILO' SPECIFIED?% BNE LTBAD ;IF NE NO, BAD PARAMETERSI;QD;EVENT FLAG FEATURE AND SECONDARY STATE CAPABILITY HAVE BEEN REMOVED ; VALIDATE THE EVENT FLAG NUMBER;I20$: BR 40$#; TST I.PRM+12(R1) ;EVENT FLAG > 0?I; BLE 30$ ;IF LE NO%; CMP #96.,I.PRM+12(R1) ;IS IT > 96?R; BGT 40$ ;IF GT NO%30$: CALLR IEIEF ;INVALID EVENT FLAGI%35$: CALLR IEPRI ;PRIVLEGE VIOLATION$;I3; VALIDATE THE SIZE AND CONTENTS OF THE DATA BUFFERF;?140$: TST I.PRM+4(R1) ;IS SIZE OF BUFFER > OR = 0?; BLT 54$ ;IF LT NOC BEQ 60$ ;IF EQ SIZE=0E;,.; INITIALIZE VALUES FOR LOOPING THROUGH BUFFER;D6 MOV #50.,ASCNT(R3) ;SAVE MAX NUMBER OF VALUES ALLOWED6 CMP I.PRM+4(R1),ASCNT(R3) ;IS # OF VALUES > MAXIMUM? BGT 54$ ;IF GT YES1 CLR PRVAL(R3) ;INITIALIZE PREVIOUS VALUE TO ZERO , MOV I.PRM+4(R1),LFVAL(R3) ;GET # OF VALUES. MOV I.PRM(R1),U.BUF(R5) ;GET RELOCATION BIAS1 MOV I.PRM+2(R1),U.BUF+2(R5) ;GET VITUAL ADDRESSS; 7; CHECK ALL VALUES IN THE BUFFER FOR WITHIN VALID RANGEF; ; PRVAL(R3) = PREVIOUS VALUE4; ASCNT(R3) = # VALUES STILL POSSIBLE TO ADD TO SILO+; LFVAL(R3) = # VALUES STILL IN USER BUFFERN;3250$: CALL $GTBYT ;RETRIEVE NEXT BYTE ON THE STACK TSTB (SP) ;IS VALUE > 0? BEQ 51$ ;IF EQ NO$' CMPB (SP),#DC/400 ;IS VALUE > MAXIMUM?P BLE 52$ ;IF LE NO -51$: MOVB (SP)+,PRVAL(R3) ;CLEAN UP THE STACK BR 54$ ;INVALID DATA BUFFERR;C; CHECK FOR PAD VALUE NEEDED;F-52$: CMPB (SP),PRVAL(R3) ;IS IT = LAST VALUE?A BNE 53$ ;IF NE NOR0 DEC ASCNT(R3) ;DECREMENT MAXIMUM VALUES ALLOWED;E,; DECREMENT COUNTERS AND SAVE PREVIOUS VALUE; 653$: MOVB (SP)+,PRVAL(R3) ;SAVE THIS VALUE AS PREVIOUS0 DEC ASCNT(R3) ;DECREMENT MAXIMUM VALUES ALLOWED$ BGE 55$ ;IF GE STILL WITHIN LIMITS(54$: CALLR IESPC ;ILLEGAL BUFFER FORMAT;ME; DECREMENT NUMBER OF BYTES STILL IN USER BUFFER AND GO GET NEXT BYTE ;C255$: DEC LFVAL(R3) ;DECREMENT # BYTES YET TO CHECK BGT 50$ ;IF GT GET NEXTC; 0; ALL PARAMETERS ARE VALID - PROCESS THE REQUEST;E60$: BR 70$T4; TST U.TCB(R5) ;HAS A TASK REQUESTED AN EVENT FLAG?; BEQ 62$ ;IF EQ NO7; CMP I.TCB(R1),U.TCB(R5) ;IS THIS THE SAME REQUESTOR?L; BEQ 61$ ;IF EQ YESC,; CALLR IEFLG ;EVENT FLAG ALREADY SPECIFIED;$-; DECREMENT I/O COUNT FOR PREVIOUS EVENT FLAG ;L.;61$: MOV U.TCB(R5),R0 ;GET PREVIOUS REQUESTOR1; DECB T.IOC(R0) ;DECREMENT REQUESTOR'S I/O COUNT;;; SET UP TCB & EVENT FLAG ;E:;62$: MOV I.PRM+12(R1),U.EFN(R5) ;SET UP EVENT FLAG NUMBER%; BNE 63$ ;IF NE NON-ZERO EVENT FLAGE$; CLR U.TCB(R5) ;ZERO REQUESTORS TCB$; BR 70$ ;GO PROCESS NEXT PARAMETER;2?; EVENT FLAG HAS BEEN SPECIFIED, SETUP TCB IN UCB AND INCREMENTT ; I/O COUNT.;;+;63$: MOV I.TCB(R1),R0 ;SAVE REQUESTORS TCBY; MOV R0,U.TCB(R5) ; ; INCB T.IOC(R0) ;LOCK DOWN TASK;A"; INITIALIZE BASE REGISTER ADDRESS;V$70$: MOV S.CSR(R4),R0 ;TSR ==> REG 0* TST I.PRM+6(R1) ;WAS A 'STATE' SPECIFIED? BEQ 80$ ;IF EQ NO3 CMP #SS.MAS,I.PRM+6(R1) ;IS MASTER STATE DESIRED?U BNE 71$ ;IF NE NON, MOV #MASTER,ASCNT(R3) ;SET MASK FOR MASTER BR 73$ ;GO CHANGE TMMR71$:7; CMP #SS.SEC,I.PRM+6(R1) ;IS SECONDARY STATE DESIRED?S; BNE 72$ ;IF NE NO,; MOV #SEC,ASCNT(R3) ;SET MASK FOR SECONDARY; BR 73$ ;GO CHANGE TMMR$72$: CLR ASCNT(R3) ;SET NEUTRAL MASK:73$: MOVB TMMR+1(R0),PRVAL(R3);GET HIGH ORDER BYTE OF TMMR2 BICB #MASTER!SEC,PRVAL(R3) ;CLEAR PREVIOUS STATE) BISB ASCNT(R3),PRVAL(R3) ;SET NEW STATE 6 MOVB PRVAL(R3),TMMR+1(R0) ;STORE NEW HIGH ORDER BYTE: MOVB TMMR+1(R0),PRVAL(R3) ;GET NEW HIGH ORDER BYTE AGAIN0 BICB #374,PRVAL(R3) ;CLEAR ALL BUT DESIRED BITS0 CMPB ASCNT(R3),PRVAL(R3) ;IS ACTUAL = DESIRED? BEQ 80$ ;IF EQ YES;OD; NOT DESIRED STATE - CHECK FOR VALID EXCEPT00-qq4nblION (SECONDARY==>MASTER);+ BITB #MASTER,PRVAL(R3) ;IS IT NOW MASTER?: BNE 80$ ;IF NE YES& CALLR IEVER ;HARDWARE REJECTED STATE;S; SET UP ADDRESS SILOA;R380$: TST I.PRM+4(R1) ;IS LENGTH OF DATA BUFFER = 0?T BEQ 90$ ;IF EQ YES; MOVB TMMR+1(R0),PRVAL(R3);RETRIEVE HIGH ORDER BYTE OF TMMRR= BISB #CLRADR!AUTADR,PRVAL(R3) ;CLEAR SILO AND SET AUTO ADRS 6 MOVB PRVAL(R3),TMMR+1(R0) ;STORE NEW HIGH ORDER BYTE; (; REINITIALIZE UCB FOR THE DATA TRANSFER;E2 MOV I.PRM(R1),U.BUF(R5) ;RELOCATION BIAS ==> UCB5 MOV I.PRM+2(R1),U.BUF+2(R5) ;16-BIT ADDRESS ==> UCBR/ CLR ASCNT(R3) ;ZERO ADDRESS SILO ENTRY COUNTER * CLR PRVAL(R3) ;SET PREVIOUS VALUE TO ZERO; MOV I.PRM+4(R1),LFVAL(R3) ;INITIALIZE DATA BUFFER COUNTERQ;$7; MOVE EACH BYTE OF THE DATA BUFFER TO THE ADDRESS SILOD;B; PRVAL(R3) = PREVIOUS VALUE"; ASCNT(R3) = ADDRESS SILO COUNTER*; LFVAL(R3) = # BYTES STILL IN DATA BUFFER!; FRVAL(R3) = FIRST VALUE IN SILOT;I381$: CALL $GTBYT ;RETRIEVE A BYTE FROM USER BUFFERF' CMPB (SP),PRVAL(R3) ;IS IT = PREVIOUS?M BNE 82$ ;IF NE NO1' MOVB #PAD,TMMR(R0) ;INSERT A PAD VALUEE4 INC ASCNT(R3) ;INCREMENT ADDRESS SILO ENTRY COUNTER582$: MOVB (SP),PRVAL(R3) ;SAVE THIS VALUE AS PREVIOUSI# TST ASCNT(R3) ;IS THIS FIRST BYTE?E BGT 83$ ;IF GT NOA& MOVB (SP),FRVAL(R3) ;SAVE FIRST VALUE783$: MOVB (SP)+,TMMR(R0) ;INSERT THE USER VALUE IN SILOR. INC ASCNT(R3) ;INCREMENT ADDRESS SILO COUNTER- DEC LFVAL(R3) ;DECREMENT # BYTES YET TO MOVE  BGT 81$ ;IF GT GET NEXT BYTE; CMP #20.,ASCNT(R3) ;HAVE AT LEAST 20 VALUES BEEN INSERTED?$ BLE 84$ ;IF LE YES;TE; LESS THAN THE MINIMUM NUMBER OF VALUES HAVE BEEN MOVED - REPEAT THET; PATTERN AGAINM; 2 MOV I.PRM(R1),U.BUF(R5) ;RELOCATION BIAS ==> UCB5 MOV I.PRM+2(R1),U.BUF+2(R5) ;16-BIT ADDRESS ==> UCBM3 MOV I.PRM+4(R1),LFVAL(R3) ;SET UP # BYTES TO MOVE, BR 81$ ;GO MOVE THE VALUES;N*; ALL BYTES MOVED - CHECK FOR FIRST = LAST;C084$: CMPB PRVAL(R3),FRVAL(R3) ;IS FIRST = LAST? BNE 90$ ;IF NE NOT- MOVB #PAD,TMMR(R0) ;MOVE A PAD VALUE TO SILOA,90$: TST I.PRM+10(R1) ;WAS A MODE SPECIFIED? BEQ 100$ ;IF EQ NO5 MOVB TMMR+1(R0),PRVAL(R3);RETRIEVE HIGH BYTE OF TMMRH3 CMP #MS.AUT,I.PRM+10(R1) ;AUTO ADDRESS SPECIFIED?R BNE 91$ ;IF NE NOB* BISB #AUTADR,PRVAL(R3) ;SET AUTO ADDRESS BR 92$ ;GO RESTORE TMMR+1);V; ADDRESS SILO REQUESTED;V?91$: BICB #AUTADR,PRVAL(R3) ;CLEAR AUTO ADDRESS (IMPLIES SILO)O892$: MOVB PRVAL(R3),TMMR+1(R0);RESTORE HIGH BYTE OF TMMR:100$: MOV I.PRM+14(R1),U.BUF1(R5) ;RELOCATION BIAS ==> UCB6 MOV I.PRM+16(R1),U.BUF1+2(R5) ;16-BIT ADDRESS ==> UCB BEQ 110$ ;IF EQ NO" CALL REGRET ;GO RETURN REGISTERS-110$: CALLR ISSUC ;INDICATE SUCCESS AND EXITP;+E; REGRET -- SERVICE ROUTINE TO RETURN THE CONTENTS OF THE TRANSMITTERAA; SIDE REGISTERS TO THE USER BUFFER WHOSE ADDRESS IS SPECIFIED INSA; U.BUF1 AND U.BUF1+2 IN THE UCB. THE CONTROL REGISTER ADDRESS ISE?; CONTAINED IN R0. U.BUF AND U.BUF+2 ARE PRESERVED ACROSS CALL.Y;-,REGRET: TST U.BUF1(R5) ;RELOCATION BIAS = 0? BNE 10$ ;IF NE NOM) TST U.BUF1+2(R5) ;IS 16 BIT ADDRESS = 0?S BEQ 20$ ;IF EQ YES$10$: MOV U.BUF(R5),-(SP) ;SAVE U.BUF% MOV U.BUF+2(R5),-(SP) ;SAVE U.BUF+2C/ MOV U.BUF1(R5),U.BUF(R5) ;GET RELOCATION BIAS 3 MOV U.BUF1+2(R5),U.BUF+2(R5) ;GET VIRTUAL ADDRESSG .REPT 7# MOV (R0)+,-(SP) ;GET WORD TO STOREI# CALL $PTWRD ;PUT WORD INTO BUFFERE .ENDR( MOV (SP)+,U.BUF+2(R5) ;RESTORE U.BUF+2# MOV (SP)+,U.BUF(R5) ;RESTORE U.BUFV20$: RETURN ;;+; INTERRUPT SERVICE ROUTINEA;- .ENABL LSBE$LTINT::4 INTSV$ LT,PR5,L$$T11 ;;;EXECUTE INTERRUPT SAVE CODE% MOV U.SCB(R5),R4 ;;;GET SCB ADDRESS.-% MOV S.CSR(R4),R4 ;;;GET TCR ADDRESS.)$ BIC #IE,(R4) ;;;DISABLE INTERRUPTS.) BITB #US.BSY,U.STS(R5) ;;;IS UNIT BUSY?( BEQ 10$ ;;;IF EQ NOI! TST TSR(R4) ;;;ERROR CONDITION?+ BPL 5$ ;;;IF PL, NO ERRORC' CALL $FORK ;;;CREATE A SYSTEM PROCESSR JMP ERROR ;GO HANDLE ERRORSO5$: TSTB TSR(R4) ;;;SUCTXF? BMI 30$ ;;;IF MI YES1 BIT #SORE,TSR(R4) ;;;HAVE WE A SOFTWARE REJECT ?- BNE 20$ ;;;IF NE YES10$:D;EVENT005qomkTADATADATADATADATADATA FLAG FEATURE AND SECONDARY STATE CAPABILITY HAVE BEEN REMOVED4; BITB #NOWMST,TMMR+1(R4) ;;;HAVE WE BECOME MASTER?; BNE 50$ ;;;IF NE YESD) BIS #BDINIT,(R4) ;;;TX INIT JUST IN CASE  RETURN ;;;RETURN FOR MORE;I; PROCESS SOFTWARE REJECTE;R120$: BIC #SORE,(R4) ;;;CLEAR THE INTERRUPTING BITF# CALL $FORK ;;;CREATE FORK PROCESSP MOV R4,R0 ;COPY CSR ADDRESS CALL REGRET ;RESTORE REGISTERS CALLR IEREJ ;REJECT REQUESTR630$: BIC #SUCTXF,TSR(R4) ;;;CLEAR THE INTERRUPTING BIT# CALL $FORK ;;;CREATE FORK PROCESSD MOV R4,R0 ;COPY CSR ADDRESSR CALL REGRET ;RESTORE REGISTERS, MOV #IS.SUC&377,R0 ;GET SUCCESS STATUS CODE/ BIT #SORE,TSR(R4) ;WAS TRANSMISSION TRUNCATED?  BEQ 40$ ;IF EQ NO + BIC #SORE,TSR(R4) ;CLEAR THE SORE BIP ALSO INC R0 ;BUMP STATUS TO IS.TNRI040$: MOV U.CNT(R5),R1 ;GET # OF BYTES TRANSFERED CALL $IODON ;FINISH I/O  JMP LTINI ;TRY FOR MORESD;EVENT FLAG FEATURE AND SECONDARY STATE CAPABILITY HAVE BEEN REMOVED;)#; NOWMST INTERRUPT - SET EVENT FLAG ;R(;50$: CALL $FORK ;;;CREATE FORK PROCESS(; MOV U.SCB(R5),R3 ;RETREIVE SCB ADDRESS.; MOVB S.CON(R3),R3 ;RETREIVE CONTROLLER INDEX-; MOVB TMMR+1(R4),PRVAL(R3) ;RETRIEVE TMMR+1U-; BICB #NOWMST,PRVAL(R3) ;CLEAR 'NOWMST' BITR,; MOVB PRVAL(R3),TMMR+1(R4) ;RESTORE TMMR+1; MOV R5,PRVAL(R3) ;SAVE REG 5'; MOV U.EFN(R5),R0 ;EVENT FLAG # ==> R0 ); MOV U.TCB(R5),R5 ;REQUESTORS TCB ==> R5M; BEQ 51$ ;IF EQ NONE+; CALL $CEFI ;GO CONSTRUCT EVENT FLAG MASKM$; BCS 51$ ;IF CS NO EVENT SPECIFIED; BIS R0,(R1) ;SET EVENT FLAG); CALL $DRDSE ;DECLARE SIGNIFICANT EVENT;/; DECB T.IOC(R5) ;UNLOCK TCB, EFN IS GOING AWAYV%;51$: MOV PRVAL(R3),R5 ;RESTORE REG 5R; CLR U.EFN(R5) ;T; CLR U.TCB(R5) ;M); RETURN ;RETURN TO INTERRUPTED PROGRAMP .DSABL LSB+;+A; WE HAVE AN ERROR CONDITION. WE WILL DETERMINE THE CAUSE OF THE03; ERROR AND TAKE THE APPROPRIATE ACTION AS FOLLOWS:S;B; OVERRUN = IE.BBE;; TIMEOUT = IE.DNRE; MASTER DOWN = IE.DNR ; XMIT ERROR; RSP B = 00 = IE.DNRS; RSP B = 01,10,11 = IE.BBE:; MEM OVERFLOW = INCREMENT A16-17, CLEAR ERROR, ENABLE IE,; SET STTXMK; NEM = SET BDINIT, IE.SPC$;-#ERROR: MOV R4,R0 ;COPY CSR ADDRESS. CALL REGRET ;RESTORE REGISTERS% MOV TSR(R4),R1 ;GET CONTENTS OF TSR.P$ BIT #OVERUN,R1 ;CHECK FOR OVER RUN. BNE 110$ ;IF NE OVERRUNR' BIT #MSTDWN,R1 ;CHECK FOR MASTER DOWN.T BNE 130$ ;IF NE MASTER DOWNS$ BIT #TIMOUT,R1 ;CHECK FOR TIME OUT. BNE 120$ ;IF NE TIMEOUT . BIT #TXMERR,R1 ;CHECK FOR TRANSMISSION ERROR.$ BNE 140$ ;IF NE TRANSMISSION ERROR) BIT #MEMOFL!NEXLOC,R1 ;OVERFLOW OR NEM?  BNE 170$ ;IF NE YEST' BIS #BDINIT,(R4) ;INIT THE BOARD AGAIN RETURN ;,;+; PROCESS OVERRUN CONDITIONT;-5110$: BIC #OVERUN,TSR(R4) ;CLEAR THE INTERRUPTING BIT! CALLR IEBBE ;TRANSMISSION ERROR.;+; PROCESS TIMEOUTU;-5120$: BIC #TIMOUT,TSR(R4) ;CLEAR THE INTERRUPTING BITN CALLR IEDNR ;DEVICE NOT READYC;+; PROCESS MASTER DOWN.;-5130$: BIC #MSTDWN,TSR(R4) ;CLEAR THE INTERRUPTING BITO. MOV #IE.DNR&377,R0 ;GET DEVICE NOT READY CODE BR 150$ ;GO TRY FOR A RETRYN;+; PROCESS TRANSMISSION ERROR.D;-(140$: BIC #TXMERR,TSR(R4) ;CLEAR INT BIT# BIT #RSPB1!RSPB0,R1 ;IF RSPB IS 00-" BEQ 120$ ;IF EQ TREAT AS TIMEOUT3 MOV #IE.BBE&377,R0 ;GET TRANSMIT ERROR STATUS CODER'150$: MOV U.SCB(R5),R4 ;GET SCB ADDRESS$- MOV S.PKT(R4),R1 ;LOAD ADDRESS OF I/O PACKETI' DECB U.CW2(R5) ;DECREMENT RETRY COUNT.+ BGE 160$ ;IF GE RETRY CALLR IODON ;FINISH UP160$: JMP RETRY ;GO TRY AGAIN;+1; PROCESS MEMORY OVERFLOW & NONEXISTENT LOCATION.$;-)170$: BIS #BDINIT,(R4) ;INITIALIZE BOARD.I( CALLR IESPC ;RETURN NON-EXISTANT ERROR;+; CANCEL I/O OPERATION;B ; INPUTS:P;S; R0 = I/O PACKET ADDRESSA; R1 = TCB ADDRESS; R3 = CONTROLLER INDEXI; R4 = SCB ADDRESS; R5 = UCB ADDRESS;-!LTCAN: MTPS #0 ;;;LOWER PRIORITY 7 CMP R1,U.TCB(R5) ;DID THIS TASK ASK FOR AN EVENT FLAG?R BNE 10$ ;IF NE NO0. DECB T.IOC(R1) ;UNLOCK TCB, EFN IS GOING AWAY' CLR U.EFN(R5) ;CLEAR EVENT FLAG NUMBERC$ CLR U.T00=qP@q4nblCB(R5) ;CLEAR REQUESTORS TCB"10$: TSTB S.STS(R4) ;IS UNIT BUSY? BEQ LTPWF ;IF EQ THEN YESI: CMP R1,I.TCB(R0) ;IS CANCEL REQUEST FOR THE CURRENT TASK?$ BNE LTPWF ;IF NE, NO SIMPLY RETURN+ MOV #IE.ABO&377,R0 ;LOAD ABORT STATUS CODER BR ABORT ;ABORT THIS OPERATION LTPWF: RETURN ;NO, JUST RETURN;+; TIMEOUT SERVICE ;-6LTOUT: MOV #IE.DNR&377,R0 ;LOAD NOT READY STATUS CODE.)ABORT: MOV S.CSR(R4),R2 ;GET TSR ADDRESS. . BIS #BDINIT,(R2) ;INITIALIZE PCL TRANSMITTER. BR IODON ;FINISH I/O;+,; PROCESS ERROR CONDITIONS AND CALL I/O DONE;-)IEBAD: MOV #IE.BAD&377,R0 ;BAD PARAMETERSP BR IODON ;-IEBBE: MOV #IE.BBE&377,R0 ;TRANSMISSION ERRORP BR IODON ;+IEDNR: MOV #IE.DNR&377,R0 ;DEVICE NOT READY BR IODON ;7IEFLG: MOV #IE.FLG&377,R0 ;EVENT FLAG ALREADY SPECIFIED BR IODON ;-IEIEF: MOV #IE.IEF&377,R0 ;INVALID EVENT FLAGR BR IODON ;0IEIFC: MOV #IE.IFC&377,R0 ;INVALID FUNCTION CODE BR IODON ;-IEPRI: MOV #IE.PRI&377,R0 ;PRIVLEGE VIOLATIONO BR IODON ;,IEREJ: MOV #IE.REJ&377,R0 ;TRANSFER REJECTED BR IODON ;-IESPC: MOV #IE.SPC&377,R0 ;INVALID PARAMETERSO BR IODON ;'IEVER: MOV #IE.VER&377,R0 ;PARITY ERROR BR IODON ;/ISSUC: MOV #IS.SUC&377,R0 ;SUCCESSFUL OPERATION IODON: CALL $IOALT ;FINISH I/OR JMP LTINI ;TRY FOR MOREF .END IODON ;-IEIEF: MOV #IE.IEF&377,R0 ;INVALID EVENT FLAGR BR IODON ;0IEIFC: MOV #IE.IFC&377,R0 ;INVALID FUNCTION CODE BR IODON ;-IEPRI: MOV #IE.PRI&377,R0 ;PRIVLEGE VIOLATIONO BR IODON ;, .TITLE MDSUBP .IDENT /14.01/A;E5; COPYRIGHT (c) 1986 BY DIGITAL EQUIPMENT CORPORATIONU; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;A; D. N. CUTLER 4-AUG-73D;; MODIFIED BY:;S ; J. R. KAUFFMAN 3-SEP-86 14.013; JRK332 - ADD SUPPORT FOR DATA CACHE WRITE DEFERSF; ;A; I/O RELATED ROUTINES;I4; ROUTINES USED BY FILES-11 AND MASS STORAGE DRIVERS;D; MACRO LIBRARY CALLS ;O8 .MCALL F11DF$,HDRDF$,HWDDF$,PCBDF$,PKTDF$,SHDDF$,TCBDF$0 F11DF$ ;DEFINE WINDOW AND LOCK BLOCK OFFSETS ' HDRDF$ ;DEFINE TASK HEADER OFFSETS D$ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSI$ PKTDF$ ;DEFINE I/O PACKET OFFSETS* SHDDF$ ;DEFINE SHADOW RECORDING OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+&; **-$DEATR-DEALLOCATE ATTRIBUTE BLOCK;NC; THIS ROUTINE IS CALLED TO DEALLOCATE AN ATTRIBUTE BLOCK ALLOCATEDA2; BY QIO PROCESSING OF A USER FILE ATTRIBUTE LIST.;P ; INPUTS:$;D ; R0=ADDRESS OF ATTRIBUTE BLOCK.;A ; OUTPUTS:;F;; ALL I/O COUNTS ASSOCIATED WITH THE BLOCK ARE DECREMENTED.D;- A+$DEATR::MOV R0,-(SP) ;SAVE ADDRESS OF BLOCK * MOV #6,-(SP) ;SET MAX COUNT OF ATTRIBUTES,60$: TSTB (R0) ;IS THERE ANOTHER ATTRIBUTE? BEQ 70$ ;IF EQ NOF& MOV R0,-(SP) ;SAVE POINTER INTO BLOCK- MOV 2(R0),R0 ;POINT TO ATTACHMENT DESCRIPTORN" CALL $DECIO ;DECREMENT I/O COUNT4 MOV (SP)+,R0 ;RESTORE POINTER INTO ATTRIBUTE BLOCK* ADD #8.,R0 ;POINT TO NEXT ENTRY IN BLOCK DEC (SP) ;ANY MORE TO GO?R BNE 60$ ;IF NE YES70$: TST (SP)+ ;POP COUNT$ MOV (SP)+,R0 ;RESTORE BLOCK POINTER% MOV #I.ATRL,R1 ;SET COUNT TO RELEASEA+ CALLR $DEACB ;DEALLOCATE BLOCK AND RETURNC R ;+ T=; **-$CVLBN-CONVERT LOGICAL BLOCK NUMBER TO DISK PARAMETERS M ; B; THIS SUBROUTINE WILL CONVERT THE SPECIFIED LOGICAL BLOCK NUMBER *; TO A SECTOR/TRACK/CYLINDER ADDRESS. ; ; INPUTS: T ; ; (SAME AS $BLKCK OUTPUTS) X; R0=LOW PART OF LBN ; R2=HIGH PART OF LBN ; R3=I/O PACKET ADDRESS P; R5=UCB ADDRESS S ; ; OUTPUTS: ; ; R0=SECTOR NUMBER ; R1=TRACK NUMBER ; R2=CYLINDER NUMBER ;- $ R#$CVLBN::MOV R0,R1 ;SHUFFLE LOW LBNT MOV R2,R0 ;SHUFFLE HIGH LBNO4 MOVB U.PRM(R5),R2 ;SET DIVISOR TO SECTORS PER TRACK$ DIV R2,R0 ;CALCULATE SECTOR NUMBER! MOV R1,-(SP) ;SAVE SECTOR NUMBER  MOV R0,R1 ;SET NEW00PEqomkTADATADATADATADATADATA DIVIDENDC CLR R0 ;CLEAR HIGH BITSP8 MOVB U.PRM+1(R5),R2 ;SET DIVISOR TO TRACKS PER CYLINDER) DIV R2,R0 ;CALCULATE TRACK AND CYLINDER $ MOV R0,R2 ;COPY CYLINDER NUMBER ( MOV (SP)+,R0 ;RETREIVE SECTOR NUMBER  RETURN ; ;+'; **-$BLKCK-LOGICAL BLOCK CHECK ROUTINEC9; **-$BLKC1-LOGICAL BLOCK CHECK ROUTINE (ALTERNATE ENTRY)GG; **-$BLKC2-LOGICAL BLOCK CHECK ROUTINE (ALTERNATE ENTRY FOR QUEUE OPT) ;LD; THIS ROUTINE IS CALLED BY I/O DEVICE DRIVERS TO CHECK THE STARTING?; AND ENDING LOGICAL BLOCK NUMBERS OF AN I/O TRANSFER TO A FILE,E; STRUCTURED DEVICE. IF THE RANGE OF BLOCKS IS NOT LEGAL, THEN $IODOND@; IS ENTERED WITH A FINAL STATUS OF "IE.BLK" AND A RETURN TO THEB; DRIVER'S INITIATOR ENTRY POINT IS EXECUTED. ELSE A RETURN TO THE; DRIVER IS EXECUTED. ;TD; $BLKC2 RETURNS TO $QOPDN IN $DRQRQ IF THERE IS AN ERROR INSTEAD OF<; THE DRIVER'S INITIATOR ENTRY POINT. THIS ALLOWS THE QUEUE ; OPTIMIZATION CODE TO USE BLKCK;B ; INPUTS:E;I; R1=ADDRESS OF I/O PACKET. ; R5=ADDRESS OF THE UCB.;E ; OUTPUTS:;A@; IF THE CHECK FAILS, THEN $IODON IS ENTERED WITH A FINAL STATUS@; OF "IE.BLK" AND A RETURN TO THE DRIVER'S INITIATOR ENTRY POINT; IS EXECUTED.;TB; IF THE CHECK SUCCEEDS, THEN THE FOLLOWING REGISTERS ARE RETURNED'; R0=LOW PART OF LOGICAL BLOCK NUMBER.R/; R1=POINTS TO I.PRM+12 (LOW PART OF USER LBN)N(; R2=HIGH PART OF LOGICAL BLOCK NUMBER.; R3=ADDRESS OF I/O PACKET.;- C .ENABL LSBK2$BLKC2::MOV #1,-(SP) ;FLAG THIS AS THE BLKC2 ENTRY BR 4$ ;CONTINUE /$BLKCK::CLR -(SP) ;FLAG THIS AS A NORMAL ENTRYH*4$: MOV R1,R3 ;SAVE ADDRESS OF I/O PACKET. ADD #I.PRM+11,R1 ;POINT PAST HIGH PART OF LBN CLRB (R1)+ ;CLEAR EXCESS BYTET$ BR BLKC3 ;SKIP THE ALTERNATE ENTRY/$BLKC1::CLR -(SP) ;FLAG THIS AS A NORMAL ENTRY (BLKC3: MOV (R1),R0 ;GET LOW PART OF LBN# MOV -(R1),R2 ;GET HIGH PART OF LBN=7 MOV I.PRM+4(R3),-(SP) ;GET NUMBER OF BYTES TO TRANSFERP# ADD #777,(SP) ;ROUND TO NEXT BLOCK3 ROR (SP) ;CALCULATE NUMBER OF BLOCKS IN HIGH BYTE CLRB (SP) ;CLEAR EXCESS BYTE2 SWAB (SP) ;CALCULATE NUMBER OF BLOCK IN TRANSFER1 ADD (SP)+,R0 ;CALCULATE HIGHEST BLOCK NUMBER + 1I ADCB R2 ;P% BCS 20$ ;IF CS ILLEGAL BLOCK NUMBERB+ CMPB R2,U.CW2(R5) ;HIGH PART OF LBN LEGAL?B BHI 20$ ;IF HI NOG BLO 10$ ;IF LO YES) CMP R0,U.CW3(R5) ;LOW PART OF LBN LEGAL?N BHI 20$ ;IF HI NOH,10$: MOV (R1)+,R2 ;RETRIEVE HIGH PART OF LBN' MOV (R1),R0 ;RETRIEVE LOW PART OF LBNS TST (SP)+ ;CLEAN THE STACK RETURN ;L$20$: TST (SP)+ ;TEST THE ENTRY FLAG+ BEQ 30$ ;RETURN TO THE DRIVER'S INITIATORL- TST (SP)+ ;REMOVE DRIVERS EXTRA STACK ENTRYR6 MOV #$QOPDN,(SP) ;SETUP FOR QUEUE OPTIMIZATION RETURN) MOV #IE.BLK&377,R0 ;SET FINAL I/O STATUS % CALLR $IOFIN ;AND FINISH UP THE I/O,30$: MOV (R5),R0 ;GET ADDRESS OF DEVICE DCB9 MOV @D.DSP(R0),(SP) ;REPLACE RETURN ADDRESS TO INITIATORN) MOV #IE.BLK&377,R0 ;SET FINAL I/O STATUSF" JMP $IOALT ;AND COMPLETE THE I/O .DSABL LSBT;+=; **-$SHFND-FIND SHADOW RECORDING PACKET ON UMB ML NODE LIST.RH; **-$SHFN1-FIND SHADOW RECORDING PACKET ON UMB ML NODE LIST (ALT ENTRY);V>; THIS ROUTINE WILL SEARCH THE LIST WHOSE ROOT IS AT M.LHD FOR=; AN ML NODE THAT EITHER POINTS TO OR CONTAINS THE I/O PACKETL; SPECIFIED AS INPUT.U;H ; INPUTS::;V,; R3=I/O PACKET ADDRESS FOR WHICH TO SEARCH.; R5=UCB ADDRESS.C;E ; OUTPUTS:; #; C=0 (SUCCESS -- FOUND I/O PACKET)F;L; R2=OTHER I/O PACKET. ; R4=ML NODE ADDRESS.;.1; C=1 (FAILURE -- NO PACKET OR DISK NOT SHADOWED) ;K; R2,R4 DESTROYED.T; ; ALL OTHER REGISTERS PRESERVED.;-  .IF DF S$$HDW L .ENABL LSB>$SHFND::BIT #DV.MSD,U.CW1(R5) ;IS THIS A MASS STORAGE DEVICE?/ BEQ 30$ ;IF EQ NO -- CAN'T SHADOW THIS DEVICEE6$SHFN1::BIT #DV.SQD,U.CW1(R5) ;COULD IT BE A MAGTAPE?$ BNE 30$ ;IF NE YES -- CAN'T SHADOW A;.?; THE ABOVE STATEMENTS DEFINE THOSE DEVICES WHICH HAVE THE CELL <; U.UMB IN THEIR UCB'S. NOW SEE IF U.UMB IS NON-ZERO, WHICH0; MEANS THE DEVICE IS CURRENTLY SHADOW RECORDED.;D D" MOV U.UMB(R5),R4 ;GET UMB ADD00PMq@q4nblRESS/ BEQ 30$ ;IF EQ NO UMB, THEREFORE NOT SHADOWED ;WC; SHADOW RECORDING IS ENABLED ON THIS DISK. NOW SEE IF THE PACKET OD; SPECIFIED IS FROM THE REPLACEMENT CONTROL TASK AND IF IT IS, SKIP ; OVER IT.;.3 CMP $RCTPT,I.TCB(R3) ;IS THIS I/O PACKET FOR RCT?- BEQ 30$ ;IF EQ YES, EXIT;VI; THE SPECIFIED PACKET IS NOT FROM THE REPLACEMENT CONTROL TASK. NOW SEE B5; IF THE PACKET SPECIFIED IS IN THE LIST OFF THE UMB.E;E1 ADD #M.LHD+ML.PKT,R4 ;START SCAN AT PROPER PLACE) /10$: MOV ML.LNK-ML.PKT(R4),R4 ;GET NEXT ML NODEO BEQ 30$ ;IF EQ NONE LEFT. MOV ML.PRI(R4),R2 ;GET PRIMARY PACKET ADDRESS& CMP R2,R3 ;IS THIS THE INPUT PACKET? BEQ 20$ ;IF EQ YES2 ADD #ML.PKT,R4 ;POINT TO SECONDARY PACKET IN NODE* CMP R4,R3 ;IS OURS THE SECONDARY PACKET?* BNE 10$ ;IF NE NO -- GO OFF TO TRY AGAIN5 SUB #ML.PKT,R4 ;MOVE BACK TO MAKE R4=ADDRESS ML NODE. BR 25$B(20$: MOV R4,R2 ;COPY I/O PACKET ADDRESS* ADD #ML.PKT,R2 ;POINT TO SECONDARY PACKET25$: CLC ;SHOW SUCCESS RETURN030$: SEC ;SHOW FAILURE RETURNX .DSABL LSBB 3;+6; **-$DLNK-DELINK AN ML NODE FROM THE LIST IN THE UMB.;D>; THIS ROUTINE WILL DELINK THE SPECIFIED ML NODE FROM THE LIST#; OF ML NODES IN THE SPECIFIED UMB.R;A ; INPUTS:E;C; R3=I/O PACKET ADDRESS. ; R4=ML NODE.;E ; OUTPUTS:; "; NODE SPECIFED IN R4 IS DELINKED.; ; REGISTERS R2,R3 DESTROYED.;-1$DLNK:: MOV I.UCB(R3),R3 ;GET UCB ADDRESS FOR UMBE( MOV R3,-(SP) ;SAVE UCB ADDRESS ON STACK+ MOV U.UMB(R3),R3 ;GET UMB ADDRESS FROM UCB:! ADD #M.LHD,R3 ;POINT TO LISTHEADS10$: MOV R3,R2 ;SAVE LAST NODEN MOV (R3),R3 ;GET NEXT NODE BNE 20$ ;IF NE THERE IS ONEL& BPT ;DEBUGGING BPT -- CAN'T DELINK  ;NODE NOT FOUNDN!20$: CMP R3,R4 ;IS THIS THE ONE?E BNE 10$ ;IF NE NO -- TRY AGAIN MOV (R3),(R2) ;DELINK THE NODE# BNE 30$ ;IF EQ LIST NOT YET EMPTY  ;IB; THE LIST IS EMPTY. SEE IF WE ARE SUPPOSED TO DEALLOCATE THE UMB.;  # MOV (SP),R3 ;GET UCB ADDRESS BACK " MOV U.UMB(R3),R2 ;GET UMB ADDRESS7 BIT #MS.MDA,M.STS(R2) ;IS UMB MARKED FOR DEALLOCATION?0 BEQ 30$ ;IF EQ NO -- EXIT NOWM (;,C; UMB IS MARKED FOR DEALLOCATION. WE WILL NOW RELEASE THE STORAGE, ,; AND REMOVE THE TWO POINTERS FROM THE UCBS.;C R# MOV M.UCBS(R2),R3 ;GET PRIMARY UCBI! CLR U.UMB(R3) ;CLEAR PRIMARY UCB)' MOV M.UCBS+2(R2),R3 ;GET SECONDARY UCB # CLR U.UMB(R3) ;CLEAR SECONDARY UCB  MOV R0,-(SP) ;SAVE STATUS MOV R1,-(SP) ;SAVE R1 ; 6; WE MUST DELINK THE UMB FROM THE SYSTEM LIST OF UMB'S;G U" MOV #$SHUMB,R0 ;GET START OF LIST-25$: MOV R0,R1 ;MAKE CURRENT THE NEW OLD PTR " MOV (R1),R0 ;GET NEW CURRENT PTR R  .IF DF R$$DER W BNE 27$ ;IF NE NOT END OF LIST# BPT ;OOPPS -- CNT'T FIND IN LISTE27$: ;REFERENCE LABEL 2 .ENDC R R CMP R0,R2 ;IS THIS THE NODE? BNE 25$ ;IF NE NOB) MOV (R2),(R1) ;DELINK NODE FROM UMB LISTR( MOV #M.LGH,R1 ;SET LENGTH TO DEALLOCATE MOV R2,R0 ;SET ADDRESS OF UMB1 CALL $DEACB ;DEALLOCATE UMBU MOV (SP)+,R1 ;RESTORE R1U MOV (SP)+,R0 ;RESTORE R0R-30$: TST (SP)+ ;CLEAN UCB ADDRESS FROM STACKR RETURNE L;+/; **-$SHSAV-SAVE CURRENT STATUS IN THE ML NODE..;D>; THIS ROUTINE WILL SAVE R0 AND R1 IN THE CORRECT PLACE IN THE=; CURRENT I/O PACKET. IT WILL ALSO INCREMENT THE COUNT OF I/O$; PACKETS FINISHED FOR THIS ML NODE.;2 ; INPUTS:N;; R0=FIRST STATUS WORD.D; R1=SECOND STATUS WORD.; R3=I/O PACKET ADDRESS.; R4=ML NODE ADDRESS.T;D ; OUTPUTS:;C8; COUNT OF FINISHED I/O PACKETS FOR THIS ML NODE IS ONE '; GREATER. STATUS SAVED IN I/O PACKET.+;C; ALL REGISTERS PRESERVED.;- R1$SHSAV::INCB ML.DNC(R4) ;SHOW ONE PACKET FINISHEDM MOV R0,I.R0(R3) ;SAVE STATUSL MOV R1,I.R1(R3) ;SAVE STATUS  RETURNT ;+D; **-$CKLBN-DETERMINE IF LBN RANGE IN AN ML NODE IS BELOW THE FENCE.;I:; THIS ROUTINE WILL DETERMINE IF A RANGE OF LOGICAL BLOCKS8; SPECIFIED IN AN ML NODE IS BELOW THE FENCE IN THE UMB.; ; INPUTS:E;D; R4=ML NODE ADDRESS.; R5=UMB ADDRESS.S; ; OUTPUTS:; 9; C=0 IF THE LBN RANGE IN THE ML NODE IF BELOW THE FENCE.T00PUqomkTADATADATADATADATADATA;- $CKLBN::MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP) ;SAVE R1) MOVB ML.LBN(R4),R0 ;GET HIGH BYTE OF LBN0* MOV ML.PKT+I.PRM+4(R4),R1 ;GET BYTE COUNT% ADD #777,R1 ;ROUND UP TO NEXT BLOCKE ROR R1 ;CONVERT TO WORDS CLRB R1 ;CLEAR RESIDUAL BITS, SWAB R1 ;SWAP NUMBER OF BLOCKS TO LOW BYTE4 ADD ML.LBN+2(R4),R1 ;CALCALATE LAST LBN IN TRANSFER ADC R0 ; CMPB M.LBN(R5),R0 ;OVERLAP?2 BNE 100$ ;IF LO CARRY IS SET, IF HI CARRY IS CLR, CMP M.LBN+2(R5),R1 ;SET UP CONDITION CODES 100$: MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R0 ;RESTORE R0 RETURN ;P S .ENDC ; DF S$$HDW T;+#; **-$MPPKT-MAP I/O PACKET FUNCTION4;1N; THIS ROUTINE IS CALLED TO MAP A READ/WRITE VIRTUAL FUNCTION IN AN I/O PACKETP; TO A READ/WRITE LOGICAL FUNCTION. IF THE CURRENT WINDOW DOES NOT MAP THE VIRTUP; FUNCTION, THEN A FAILURE INDICATION IS RETURNED. ELSE IF THE WINDOW COMPLETELYO; MAPS THE VIRTUAL FUNCTION, THEN THE LOGICAL BLOCK NUMBER IS STORED IN THE I/ORP; PACKET AND THE READ/WRITE VIRTUAL FUNCTION IS CONVERTED TO ITS LOGICAL COUNTERD; PART. ELSE THE PARTIAL MAPPING RESULTS ARE RETURNED TO THE CALLER.;K ; INPUTS:A;T; R1=ADDRESS OF THE I/O PACKET. ; R5=UCB ADDRESS OF DEVICE.R;L ; OUTPUTS:; ; C=1 IF MAPPING FAILURE.T ; C=0 IF MAPPING WAS SUCCESSFUL.; IF R0 EQ 0, THENT; I.FCN+1(R1)=IO.WLB/IO.RLB.); I.PRM+10(R1)=HIGH PART OF MAPPED LBN.N); I.PRM+12(R1)=LOW PART OF MAPPED LBN..,; ELSE #; R0=NUMBER OF BLOCKS NOT MAPPED. ; R2=HIGH PART OF MAPPED LBN. ; R3=LOW PART OF MAPPED LBN.;S; R1 IS PRESERVED ACROSS CALL.;- I?$MPPKT::MOV I.LN2(R1),R0 ; GET IMAGE OF LUT2 OR ADDRESS OF LUT2A BIT #1,R0 ; ADDRESS? BNE 5$ ; IF NE NOO .IF DF X$$HDR( MOV KISAR6,-(SP) ; SAVE CURRENT MAPPING# MOV I.TCB(R1),R2 ; GET TCB ADDRESS 2 MOV T.PCB(R2),R2 ; GET PCB ADDRESS OF TASK REGION4 MOV P.REL(R2),KISAR6 ; ASSUME WE NEED TO MAP HEADER .IFTF$ MOV (R0),R0 ; GET CONTENTS OF LUT2 .IFTO# MOV (SP)+,KISAR6 ; RESTORE MAPPINGA .ENDC)5$: BIC #1,R0 ; CLEAR POSSIBLE INTERLOCK  MOV R0,$IOTMP ; SAVE FOR LATER ' MOV R1,-(SP) ; SAVE I/O PACKET ADDRESSE- MOV I.PRM+12(R1),R3 ; PICKUP LOW PART OF VBNR. MOV I.PRM+10(R1),R2 ; PICKUP HIGH PART OF VBN8 MOV I.PRM+4(R1),R0 ; PICKUP LENGTH OF TRANSFER IN BYTES) MOV $IOTMP,R1 ; SET WINDOW BLOCK ADDRESSE' CALL $MPVBN ;MAP VIRTUAL BLOCK NUMBERR* MOV (SP)+,R1 ;RETRIEVE I/O PACKET ADDRESS BCS 20$ ;IF CS MAPPING FAILURE$ TST R0 ;REQUEST COMPLETELY MAPPED? BNE 20$ ;IF NE NON+ MOVB R2,I.PRM+10(R1) ;SET HIGH PART OF LBNL) MOV R3,I.PRM+12(R1) ;SET LOW PART OF LBNE' MOV #IO.RLB,-(SP) ;ASSUME READ REQUESTS7 CMPB #IO.WVB/256.,I.FCN+1(R1) ;WRITE VIRTUAL FUNCTION?I BNE 10$ ;IF NE NOU% MOV #IO.WLC,(SP) ;ASSUME WRITE CHECK ; ASSUME WI.WCK,100000' TST @$IOTMP ;DATA CHECKING REQUESTED?  BMI 10$ ;IF MI YES- CLRB (SP) ;DEMOTE TO WRITE LOGICAL (IO.WLB)R/10$: MOV (SP)+,I.FCN(R1) ;SET NEW FUNCTION CODEM& MOV R1,R3 ;SAVE I/O PACKET ADDRESS & MOV I.PRM(R3),R1 ;GET RELOCATION BIAS- MOV I.PRM+2(R3),R2 ;GET DISPLACEMENT ADDRESSR- CALL $MPPHY ;MAP TO 18 BIT PHYSICAL ADDRESSR6 MOV R1,I.PRM(R3) ;INSERT 18 BIT PHYSICAL ADDRESS BACK$ MOV R2,I.PRM+2(R3) ;INTO I/O PACKET' MOV R3,R1 ;RESTORE I/O PACKET ADDRESSM CLC ;MAKE SURE CARRY IS CLEAR20$: RETURN ; ;+$; **-$MPVBN-MAP VIRTUAL BLOCK NUMBER;O; THIS ROUTINE IS CALLED TO MAP A VIRTUAL BLOCK NUMBER (VBN) TO A LOGICAL BLOCK J; NUMBER (LBN) VIA A WINDOW BLOCK THAT CONTAINS A SET OF MAPPING POINTERS.;R ; INPUTS:I;5; R0=NUMBER OF CONSECUTIVE BYTES THAT MUST BE MAPPED.M!; R1=ADDRESS OF THE WINDOW BLOCK.S; R2=HIGH PART OF VBN.; R3=LOW PART OF VBN.D;S ; OUTPUTS:;,/; C=1 IF VBN CANNOT BE MAPPED VIA WINDOW BLOCK.E(; C=0 IF VBN SUCCESSFULLY MAPPED TO LBN. ; PARTIAL MAPPING IS A SUCCESS. ; R0=NUMBER OF UNMAPPED BLOCKS.; R2=HIGH PART OF LBN.U; R3=LOW PART OF LBN.; R4 & R5 PRESERVED.;)7; IF DATA CACHING IS SUPPORTED, THE FOLLOWING RETRIEVALH-; INFORMATION IS PROVIDED VIA CELLS IN SYSCM:N;S5; $DCCEL - CURRENT EXTENT L00P]q@q4nblENGTH (IF SUCCESSFUL MAP)A,; (0 INDICATES INFORMATION NOT AVAILABLE)+; $DCCEB - CURRENT EXTENT BASE LBN (DITTO)-; $DCNEL - NEXT EXTENT LENGTH (IF AVAILABLE)E+; (0 INDICATES INFORMATION NOT AVAILABLE)L(; $DCNEB - NEXT EXTENT BASE LBN (DITTO)0; $DCSTS - STATUS INFORMATION FROM WINDOW BLOCK;H;-+$MPVBN::SAVNR ;SAVE NONVOLATILE REGISTERSR R . .IF DF D$$CHEA9 MOVB W.STS(R1),$DCSTS ;GET INFORMATION FROM WINDOW BLOCKS .ENDC ; DF D$$CHE .IF DF P$$WND E& MOV KISAR5,R5 ;SAVE SYSTEM APR5 IN R5: MOV W.MAP(R1),KISAR5 ;POINT APR5 TO SECONDARY POOL WINDOW BEQ 20$ ;BRANCH ON NO MAP ( MOV #120000,R1 ;SET R1 TO MAP THRU APR5 A( .ENDC ;END SECONDARY POOL CONDITIONAL A* .IF DF D$$CHE ;DISK DATA CACHING SUPPORT, CLR $DCCEL ;ASSUME THAT THIS MAP WILL FAIL .IFTF ;D$$CHE M2 ADD #777,R0 ;ROUND BYTES TO NEXT 256. WORD BLOCK ROR R0 ;CONVERT TO WORDS CLRB R0 ;CLEAR RESIDUAL BITS, SWAB R0 ;SWAP NUMBER OF BLOCKS TO LOW BYTE0 MOVB W.VBN(R1),R4 ;GET HIGH ORDER 7 BITS OF VBN' SUB R4,R2 ;NORMALIZE HIGH PART OF VBN + SUB W.VBN+2(R1),R3 ;NORMALIZE LOW PART TOON SBC R2$ BLO 20$ ;BRANCH ON MAPPING FAILURE- MOVB (R1),R4 ;GET NUMBER OF ACTIVE POINTERSL' BEQ 20$ ;BRANCH IF NONE - MAP FAILURES- ADD #W.RTRV,R1 ;POINT R1 TO MAPPING POINTERSL010$: SUB (R1)+,R3 ;SUBTRACT EXTENT SIZE FROM VBN SBC R2 ;ALSO HIGH VBND' BLO 30$ ;BRANCH IF VBN IN THIS EXTENT $ CMP (R1)+,(R1)+ ;INCREMENT PAST LBN, SOB R4,10$ ;DECRIMENT POINTER COUNT & LOOP$20$: SEC ;INDICATE MAPPING FAILURE' BR 70$ ;RETURN WITH CARRY SET - ERROR330$: ADD R3,R0 ;TEST FOR ALL BLOCKS IN THIS EXTENT/ BGT 40$ ;BRANCH IF NOT - ONLY PARTIAL MAPPING)# CLR R0 ;INDICATE COMPLETE MAPPING-40$: ADD -2(R1),R3 ;R3 = OFFSET WITHIN EXTENT#( ADC R2 ;R2 = HIGH OFFSET (SHOULD BE 0)( ADD (R1)+,R2 ;ADD THE BIGINNING LBN OF * ADD (R1)+,R3 ;THE EXTENT TO THE OFFSET TO ADC R2 ;GET THE DESIRED LBN9;NOTE: AT THIS POINT CARRY IS CLEAR FOR SUCCESSFUL RETURNN .IFT ;D$$CHEO. SUB #6,R1 ;BACKTRACK TO THE BEGINNING OF RTV; MOV (R1)+,$DCCEL ;ASSUMPTION INCORRECT, SET CURRENT LENGTHL. MOV (R1)+,$DCCEB ;SET CURRENT EXTENT BASE LBN! MOV (R1)+,$DCCEB+2 ;(DOUBLEWORD) - CLR $DCNEL ;ASSUME NONEXISTENCE OF NEXT RTV3! DEC R4 ;OUR ASSUMPTION CORRECT?R, BEQ 50$ ;YES IF EQ; DON'T FILL IN NEXT RTV. MOV (R1)+,$DCNEL ;ELSE SET NEXT EXTENT LENGTH+ MOV (R1)+,$DCNEB ;SET NEXT EXTENT BASE LBN ! MOV (R1)+,$DCNEB+2 ;(DOUBLEWORD)C;;NOTE: CC BY 'CLR'S ABOVE, PRESERVED THROUGH HERE AS NEEDEDS50$: .ENDC ;D$$CHE70$:  R .IF DF P$$WND E# MOV R5,KISAR5 ;RESTORE SYSTEM APR5L T( .ENDC ;END SECONDARY POOL CONDITIONAL E N RETURN ;RETURN+ ;+ (; **-$LCKPR-LOCK PROCESSING ROUTINE ; E; THIS ROUTINE FIRST DETERMINES IF A FILE I/O REQUEST IS TO A SHARED TC; FILE. IF SO, IT DETERMINES IF THE REQUEST IS AN UNLOCK QIO OR A EE; VIRTUAL BLOCK I/O REQUEST. IT THEN EITHER PERFORMS THE UNLOCK QIO :+; OR THE LOCK PROCESSING RESPECTIVELY. S ; ; INPUTS: C ; *; R1=I/O PACKET ADDRESS OF THE REQUEST ; ; OUTPUTS: ; -; C=0 IF NO LOCK PROCESSING WAS REQUIRED. R ; ?; C=1 IF AN UNLOCK WAS PERFORMED OR AN ERROR CONDITION OCCURED H"; DURING THE LOCK PROCESSING. ; R0=I/O STATUS ; ; R1 IS PRESERVED. ;- T  .IF DF R$$LKL E 3$LCKPR::MOV @I.LN2(R1),R3 ;POINT TO WINDOW BLOCK R# BIC #1,R3 ;CLEAR INTERLOCK BIT 2 MOV #IE.ULK&377,R0 ;SET FOR UNLOCK ERROR STATUS 5 MOV W.LKL(R3),R2 ;POINT TO FIRST ENTRY IN LOCK LIST ! BEQ 50$ ;IF EQ THERE IS NONE O;NC; AT THIS POINT WE KNOW THAT BLOCK LOCKING IS ENABLED FOR THE FILE. ;ED; THE TYPE OF LOCK REQUESTED IS EITHER SHARED OR EXCLUSIVE DEPENDING/; ON THE TYPE OF ACCESSOR AND THE I/O FUNCTION. ;/; IF REQUEST IS FROM A READER THEN I.FCN(R1) ISL!; IO.RVB TO READ WITH SHARED LOCK ,; IO.ULK TO UNLOCK ANY OR ALL EXISTING LOCKS8; IO.ULK!IQ.LCK TO REQUEST A SHARED LOCK WITHO00PeqomkTADATADATADATADATADATAUT ANY I/O;R3; IF THE REQUEST IS FROM A WRITER THEN I.FCN(R1) ISI'; IO.RVB TO READ WITH AN EXCLUSIVE LOCKQ*; IO.RVB!IQ.LCK TO READ WITH A SHARED LOCK%; IO.WVB TO WRITE WITH EXCLUSIVE LOCK ,; IO.ULK TO UNLOCK ANY OR ALL EXISTING LOCKS7; IO.ULK!IQ.LCK TO REQUEST A EXCLUSIVE LOCK WITHOUT I/OA;S SAVNR ;SAVE R4 AND R5 5 MOV I.PRM+4(R1),R4 ;PICK UP BYTE COUNT FOR REQUEST R) ADD #777,R4 ;ROUND TO NEXT DISK BLOCK N% ROR R4 ;CONVERT TO SIZE IN BLOCKS K CLRB R4 ;  SWAB R4 ; ; CMPB I.FCN+1(R1),#IO.ULK/256. ;IS THIS AN UNLOCK REQUEST? N BNE 100$ ;IF NE NO ; ASSUME IQ.LCK,200C* TSTB I.FCN(R1) ;LOCK WITHOUT I/O REQUEST? BPL 5$ ;IF PL NO CALL 100$ ;DO LOCK PROCESSINGT2 DEC @I.PRM+16(R1) ;UNBUSY LOCK BLOCK SINCE NO I/O BR 50$ ;JOIN COMMON CODE5$: ;REFERENCE LABELR ; ; UNLOCK PROCESSING ; H; THIS SECTION OF THE ROUTINE PERFORMS THE UNLOCK PROCESSING. RELEVANT +; REGISTER CONTENTS AT THIS POINT ARE: S ; ; R0=UNLOCK ERROR STATUS ; R1=I/O PACKET ADDRESS N7; R2=ADDRESS OF THE FIRST LOCK BLOCK IN THE LOCK LIST .#; R3=POINTER TO CURRENT WINDOW B-; R4=BYTE COUNT OF CURRENT UNLOCK REQUEST N ; 9 MOV I.PRM+12(R1),R5 ;CREATE BLOCK NUMBER SPECIFIED FLAG  BISB I.PRM+10(R1),R5 ; .10$: TSTB L.CNT(R2) ;THIS LOCK BLOCK IN USE?  BEQ 40$ ;IF EQ NO N# TST R5 ;BLOCK NUMBER SPECIFIED? R BEQ 20$ ;IF EQ NO E) CALL 180$ ;EXACT VBN AND COUNT MATCH?  BNE 40$ ;IF NE NO O&20$: CMP L.WI1(R2),R3 ;SAME OWNER?  BNE 40$ ;IF NE NO H# CLRB L.CNT(R2) ;UNLOCK THE LOCK .0 MOV #IS.SUC&377,R0 ;SET FOR SUCCESSFUL RETURN 1 TST R5 ;WAS THIS FOR AN EXPLICIT BLOCK NUMBER?  BNE 50$ ;IF NE YES -40$: MOV (R2),R2 ;POINT TO NEXT LOCK BLOCK S BNE 10$ ;IF NE THERE IS ONE ; ; NO LOCK LIST EXISTS ; D; IF THE FUNCTION IS NOT AN UNLOCK FUNCTION, A SIMPLE RETURN OCCURS E; WITH CARRY CLEAR. AN UNLOCK IN THIS CASE IS AN ERROR. (NOTE THAT P4; ALL UNLOCK REQUESTS FALL THROUGH HERE AS WELL.) ; <50$: CMPB I.FCN+1(R1),#+1 ;SET CARRY IF UNLOCK  RETURN ; ; ; LOCK PROCESSING ; G; THIS ROUTINE CHECKS FOR ATTEMPTED LOCK OVERLAPS, ATTEMPTS TO SET THE ED; NEW LOCK, AND PERFORMS THE IMPLIED UNLOCK. IF A NEW LOCK REQUEST H; FOR AN EXPLICIT UNLOCKER IS DETECTED WHICH EXACTLY MATCHES AN EXISTINGH; LOCK FOR THAT WINDOW IN BOTH STARTING VBN AND SIZE, THE LOCK BLOCK IS A; SIMPLY REUSED. RELEVANT REGISTER CONTENTS AT THIS POINT ARE: ; ; R1=I/O PACKET ADDRESS 20; R2=ADDRESS OF FIRST LOCK BLOCK IN LOCK LIST ; R3=ADDRESS OF FILE WINDOW (; R4=BLOCK COUNT FOR CURRENT REQUEST ; ;P%; THE FOLLOWING CASES ARE CONSIDERED:E; @; 1. IF THE REQUEST IS FOR A WINDOW WITH IMPLICIT (NOT EXPLICIT,?; WI.EXL) UNLOCKING AND THERE EXISTS A CURRENT LOCK FOR THAT ?; WINDOW WITH I/O STILL IN PROGRESS THEN RETURN A LOCK ERRORH; (IE.LCK).; <; 2. IF THE REQUEST IS AN EXACT MATCH FOR A LOCK WHICH IS AN;; EXACT MATCH OF WINDOW (OWNER), LBN, AND SIZE AND WHICHOA; HAS I/O STILL IN PROGRESS THEN RETURN A LOCK ERROR (IE.LCK). ; ?; 3. IF THE REQUEST IS FROM A WINDOW WITH ONLY READ ACCESS OR AL=; READ REQUEST REQUESTING ONLY SHARED ACCESS FROM A WRITERW=; ATTEMPT TO GRANT A SHARED LOCK. IF THERE IS NO EXISTINGT?; LOCK WITH OVERLAP THEN GRANT THE SHARED LOCK. IN THE CASEI#; OF A CONFLICT SEE TABLE BELOW.; ?; 4. IF THE REQUEST IS FROM A WINDOW WITH WRITE ACCESS AND IS AW=; WRITE OR A READ WITHOUT A SHARED LOCK REQUEST ATTEMPT TON@; GRANT AN EXCLUSIVE LOCK. IF THERE IS NO EXISTING LOCK WITHC; OVERLAP THEN GRANT AN EXCLUSIVE LOCK. IN THE CASE OF CONFLICTC; SEE TABLE BELOW.E;S,; 5. DECISION TABLE FOR RESOLVING CONFLICTS:; ; I/O REQUESTH; LOCK SHARED EXCLUSIVE;T.; EXACT MATCH GRANT SHARED GRANTED EXCLUSIVE; IF NO OTHER CONFLICTO); (REUSE LOCK BL00Pmq@q4nblOCK) (REUSE LOCK BLOCK) ; -; CONFLICT SHARED GRANT SHARED REJECT IE.LCKI;W1; CONFLICT EXCLUSIVE REJECT IE.LCK REJECT IE.LCKT;T (100$: CLR R5 ;INIT FREE NODE POINTER 0 MOV #IE.LCK&377,-(SP) ;PUSH LOCK ERROR STATUS  CLR -(SP) ;ASSUME SHARED LOCKN0 BIT #WI.WRV,(R3) ;IS THIS REQUEST FOR A WRITER?( BEQ 110$ ;IF EQ NO, ALWAYS SHARED LOCK7 CMPB I.FCN+1(R1),#IO.RVB/400 ; IS THIS A READ REQUEST? + BNE 105$ ;IF NE NO, ALWAYS EXCLUSIVE LOCK ; ASSUME IQ.LCK,200O' TSTB I.FCN(R1) ;SHARED LOCK REQUESTED?K BMI 110$ ;IF MI YESE-105$: INC (SP) ;SET EXCLUSIVE LOCK REQUESTEDE.110$: TSTB L.CNT(R2) ;IS LOCK BLOCK IN USE?  BNE 120$ ;IF NE YES $ TST R5 ;ALREADY HAVE FREE BLOCK? / BNE 150$ ;IF NE YES, LOOK AT NEXT LOCK BLOCK S# BR 130$ ;ELSE CLAIM THIS BLOCK I-120$: MOV L.WI1(R2),R0 ;PICK UP OWNER WORD + BIC #1,R0 ;CLEAR BIT FOR NO UNLOCK FLAG .* CMP R0,R3 ;LOCK BELONG TO THIS WINDOW? * BNE 140$ ;IF NE NO, CHECK FOR OVERLAPS ( BIT #WI.EXL,(R3) ;EXPLICIT UNLOCKER? 3 BEQ 125$ ;IF EQ NO, SAVE BLOCK FOR IMPLIED UNLOCK)$ CALL 180$ ;EXACT VBN AND COUNT?  BNE 140$ ;IF NE NO.125$: MOV L.WI1(R2),R0 ;RETRIEVE OWNER WORD % ROR R0 ;CAN LOCK BLOCK BE REUSED?  BCS 153$ ;IF CS NO0130$: MOV R2,R5 ;SET TO REUSE THIS LOCK BLOCK $ BR 150$ ;LOOK AT NEXT LOCK BLOCK <140$: MOVB L.CNT(R2),R0 ;PICKUP LOCK BLOCK COUNT, EXCLUSIVE? BMI 141$ ;IF MI YESL# TST (SP) ;REQUEST EXCLUSIVE LOCK?0 BEQ 150$ ;IF NE NO BR 142$ ;DO CONFLICT CHECK#141$: NEG R0 ;CONVERT TO MAGNITUDE;?142$: ADD L.VB1+2(R2),R0 ;CALCULATE NUMBER OF HIGHEST BLOCK + 1A. MOVB L.VB1(R2),-(SP) ;PUSH HIGH ORDER BYTE  ADCB (SP) ;PROPAGATE CARRY & CMPB I.PRM+10(R1),(SP)+ ;OVERLAP? % BNE 145$ ;IF NE USE BRANCH BELOW " CMP I.PRM+12(R1),R0 ;OVERLAP? 145$: BHIS 150$ ;IF HIS NO + MOV R4,R0 ;COPY SIZE OF CURRENT REQUEST C; ADD I.PRM+12(R1),R0 ;CALCULATE NUMBER OF HIGHEST BLOCK +1 0 MOVB I.PRM+10(R1),-(SP) ;PUSH HIGH ORDER BYTE  ADCB (SP) ;PROPAGATE CARRY # CMPB L.VB1(R2),(SP)+ ;OVERLAP? B% BNE 146$ ;IF NE USE BRANCH BELOW ! CMP L.VB1+2(R2),R0 ;OVERLAP? P'146$: BLO 153$ ;IF LO YES, (CARRY SET)A.150$: MOV (R2),R2 ;POINT TO NEXT LOCK BLOCK ! BNE 110$ ;IF NE THERE IS ONE H;WF; HACK: IN ORDER TO PHASE IN REAL READER LOCKS WHICH ARE NOT SUPPORTEDE; BY RMS-11 V1.8, THE FOLLOWING CODE IS INCLUDED TO PREVENT THEM FROM;@; BEING CREATED. AT SOME FUTURE TIME THIS CODE WILL BE REMOVED.;H .IF NE 1Y BIT #WI.WRV,(R3) ;READER? BEQ 170$ ;IF EQ YES2 .ENDC. MOV R5,R0 ;COPY POINTER TO SAVED LOCK BLOCK ) BNE 160$ ;IF NE ONE WAS IN FACT SAVED $8 MOV #IE.NOD&377,2(SP) ;ASSUME ALLOCATION FAILURE STATUS( MOV R1,-(SP) ;SAVE I/O PACKET ADDRESS * MOV #L.LKSZ,R1 ;PICKUP SIZE OF LOCK BLOCK% CALL $ALOCB ;ALLOCATE LOCK BLOCK E+ MOV (SP)+,R1 ;RESTORE I/O PACKET ADDRESS N BCC 155$ ;IF CC SUCCESSN153$: ROL (SP) ;SAVE CARRY. BR 170$ ;JOIN COMMON EXIT CODE<155$: MOV @W.LKL(R3),(R0) ;POINT NEW BLOCK TO SECOND IN LIST9 MOV R0,@W.LKL(R3) ;POINT FIRST BLOCK IN LIST TO NEW ONE N*160$: TST (R0)+ ;ADVANCE TO OWNER WORD 2 MOV R0,I.PRM+16(R1) ;SAVE POINTER TO OWNER WORD ! MOV R3,(R0) ;SET OWNER WORD V" INC (R0)+ ;SET NO UNLOCK FLAG 0 MOVB I.PRM+10(R1),(R0)+ ;SET HIGH PART OF VBN  ROR (SP) ;EXCLUSIVE LOCK?K BCC 165$ ;IF CC NO NEG R4 ;SET FOR EXCLUSVE LOCKC$165$: MOVB R4,(R0)+ ;SET BLOCK COUNT. MOV I.PRM+12(R1),(R0) ;SET LOW PART OF VBN = MOV #IS.SUC&377,2(SP) ;SET SUCCESS FOR LOCK WITHOUT I/O CASE(170$: ROR (SP)+ ;SET CARRY, CLEAN STACK" MOV (SP)+,R0 ;PICKUP ERROR STATUS RETURN ; ; 9; ROUTINE TO CHECK FOR EXACT VBN AND BLOCK COUNT MATCH R ; ; INPUTS: ; ; R1=I/O PACKET ADDRESS E; R2=LOCK BLOCK ADDRESS ; R4=BYTE COUNT ; ; OUTPUTS: ; ; ALL REGISTERS PRESERVED. B ; ; Z=1 IF EXACT MATCH. O ; ; Z=0 IT NO MATCH. ; 9180$: CMP L.VB1+2(R2),00PuqomkTADATADATADATADATADATAI.PRM+12(R1) ;MATCH ON LOW ORDER? K BNE 190$ ;IF NE NO 4 CMPB L.VB1(R2),I.PRM+10(R1) ;MATCH ON HIGH ORDER?  BNE 190$ ;IF NE NO  TST R4 ;COUNT SPECIFIED? R BEQ 190$ ;IF EQ NO 6 MOVB L.CNT(R2),-(SP) ;GET LOCK BLOCK COUNT, NEGATIVE? BPL 185$ ;IF PL NO NEGB (SP) ;COMPUTE MAGNITUDE1185$: CMPB (SP)+,R4 ;CLEAN STACK, MATCH ON COUNT?I190$: RETURN ;  .ENDC ;+ 8; **-$RQCNC-REQUEST CONTROLLER FOR CONTROL OPERATIONS ; B; THIS ROUTINE IS CALLED TO REQUEST CONTROL FUNCTION ACCESS TO A E; CONTROLLER THAT SUPPORTS OVERLAPPED CONTROL OPERATIONS. ACCESS IS RG; GRANTED TO A SPECIFIC UNIT. IF THE UNIT IS MULTI-ACCESS, CONTROLLER H; ASSIGNMENT IS PERFORMED FOR IT. IF THE CONTROLLER IS BUSY, THE DRIVER G; PROCESS CONTEXT IS STORED IN THE FORK BLOCK, AND IT IS QUEUED ON THE EF; CONTROLLER REQUEST QUEUE FOR THAT CONTROLLER. IF THE DRIVER IS NOT F; BUSY, A $CFORK IS PERFORMED TO ENSURE EXECUTION ON THE CORRECT CPU, -; AND A RETURN TO THE CALLER IS EXECUTED. T ; ; INPUTS: O ; ; R4=SCB ADDRESS. (; R5=UCB ADDRESS OF REQUESTING UNIT. $; 0(SP)=DRIVERS RETURN ADDRESS. -; 2(SP)=RETURN ADDRESS OF DRIVERS CALLER. E ; ; OUTPUTS: ; ; R4=SCB ADDRESS. (; R5=UCB ADDRESS OF REQUESTING UNIT. ; "; S.FRK+2 IS ALWAYS NON-ZERO. ; B; ACCESS IS GRANTED TO THE CONTROLLER FOR CONTROL FUNCTIONS ONLY. ; *; R4 AND R5 ARE PRESERVED ACROSS CALL. ;-  .ENABL LSB  .IF DF O$$LAP;$RQCNC::MOV R4,R1 ;GET SCB ADDRESS IN PROPER REG FOR QUEUE % MOV S.KRB(R4),R0 ;GET KRB ADDRESS / INC S.FRK+2(R4) ;MAKE SURE THAT S.FRK+2 <> 0 $ CMP R5,K.OWN(R0) ;ARE WE OWNER? " BEQ 180$ ;IF EQ YES -- RETURN  B D .IF DF M$$ACD U CALL ASKRB   .ENDC + S: BIT #KS.SDX,K.STS(R0) ;SEEKS DURING DATA XFERS SUPPORTED? BEQ 100$ ;IF EQ NO  .IF DF M$$PRO R 6 CALLR $CFORK ;ASSURE EXECUTION ON CORRECT PROCESSOR .IFF C 0 RETURN ;RETURN TO DRIVER WITH ACCESS GRANTED  .ENDC 0100$: MOV (SP)+,R4 ;SAVE DRIVER RETURN ADDRESS % TST K.OWN(R0) ;IS CONTROLLER BUSY  .IF DF M$$PRO C  BNE 150$ ;IF NE YES S2 CALL $CFORK ;NOT BUSY - TRANSFER TO CORRECT CPU * MOV U.SCB(R5),R1 ;GET BACK SCB ADDRESS * MOV S.KRB(R1),R0 ;GET BACK KRB ADDRESS " TST K.OWN(R0) ;IS IT BUSY NOW?  .ENDC . BEQ 300$ ;IF EQ NO -- GRAB IT FOR OURSELVES 8150$: MOV #$QINSB,-(SP) ;SAVE QUEUEING ROUTINE ADDRESS ) BR 350$ ;SAVE DRIVER CONTEXT AND EXIT D  .ENDC ; DF O$$LAP ;+ 3; **-$RQCND-REQUEXT CONTROLLER FOR DATA TRANSFER ; E; THIS ROUTINE IS CALLED FOR ACCESS TO A CONTROLLER FOR AN OPERATION F; THAT WILL BUSY OUT THE CONTROLLER, USUALLY A DATA TRANSFER. IF THE G; UNIT IS MULTI-ACCESS, CONTROLLER ASSIGNMENT IS PERFORMED. $CFORK IS B; USED IF NECESSARY TO ENSURE EXECUTION ON THE CORRECT PROCESSOR. ; ?; NOTE: IF THE SCB IS ALREADY IN A CONTROLLER REQUEST QUEUE, WE :; SKIP THE CALL AND RETURN TO THE CALLER'S CALLER. THIS IS<; BELIEVED TO HAPPEN ONLY ON NON-DEC SUPPLIED DM: TYPE DISKS5; DURING POWERFAIL RECOVERY. NOTE THAT THIS BASICALLYR=; DISMISSES THE DRIVERS POWER RECOVERY CALL. WE HOPE THAT THET8; DRIVER KNOWS HOW TO RECOVER WHEN ITS OTHER $RQCND CALL ; COMPLETES.; ; INPUTS: N ; (; R5=ADDRESS OF REQUESTING UNITS UCB "; 0(SP)=DRIVER RETURN ADDRESS ,; 2(SP)=RETURN ADDRESS OF DRIVERS CALLER ; ; OUTPUTS: ; ; R4=SCB ADDRESS. (; R5=UCB ADDRESS OF REQUESTING UNIT. ; "; S.FRK+2 IS ALWAYS NON-ZERO. ; ; /; DRIVER HAS EXCLUSIVE ACCESS TO CONTROLLER. ; ;- L ,$RQCND::MOV U.SCB(R5),R1 ;GET SCB ADDRESS 00P}q@q4nbl .IF DF S2.NRD5 BIT #S2.KRQ,S.ST2(R1) ;KRB ALREADY IN REQUEST QUEUE?5' BNE 370$ ;IF NE YES, IGNORE THIS CALL( .ENDC ; DF S2.NRD% MOV S.KRB(R1),R0 ;GET KRB ADDRESS R9 CMP R5,K.OWN(R0) ;IS REQUESTING UNIT ALREADY THE OWNER? + BNE 190$ ;IF NE NO, MAKE HIM THE OWNER E' MOV R1,R4 ;PUT SCB IN CORRECT PLACE 6180$: INC S.FRK+2(R4) ;ALWAYS EXIT WITH S.FRK+2 <> 0  RETURN A 190$: ;REFERENCE LABEL   L .IF DF M$$ACD D CALL ASKRB5 1 .ENDC D S1 INCB K.IOC(R0) ;COUNT AN I/O REQUEST ON THIS KRBR. MOV (SP)+,R4 ;PUT DRIVER RETURN ADDRESS IN R4& TST K.OWN(R0) ;IS CONTROLLER BUSY?  .IF DF M$$PRO  BNE 340$ ;IF NE YES L. CALL $CFORK ;TRANSFER TO CORRECT PROCESSOR * MOV U.SCB(R5),R1 ;GET SCB ADDRESS BACK * MOV S.KRB(R1),R0 ;GET KRB ADDRESS BACK  TST K.OWN(R0) ;IS IT BUSY  .ENDC  BNE 340$ ;IF NE YES ; ; SET OWNER AND RETURN C ; %300$: MOV R5,K.OWN(R0) ;SET OWNER U# MOV R4,R0 ;SAVE RETURN ADDRESS C. MOV R1,R4 ;PUT SCB ADDRESS IN CORRECT PLACE 1 INC S.FRK+2(R4) ;ALWAYS EXIT WITH S.FRK+2 <> 0 E& JMP (R0) ;RETURN TO CALLING DRIVER 0340$: MOV #$QINSF,-(SP) ;SET QUEUEING ADDRESS 4 BIS #S2.KRQ,S.ST2(R1) ;INDICATE REQUEST IS IN QUEUE ; B; STORE DRIVER CONTEXT IN FORK BLOCK AND RETURN TO DRIVERS CALLER ; 4350$: MOV R1,S.FRK+6(R1) ;SAVE SCB IN R4 SAVE AREA - ADD #S.FRK+6,R1 ;POINT TO R5 SAVE AREA + 2 U MOV R5,-(R1) ;SAVE R5 , MOV R4,-(R1) ;SAVE DRIVERS RETURN ADDRESS  CLR -(R1) ;CLEAR LINK WORD L, ADD #K.CRQ,R0 ;POINT TO QUEUE FOR DRIVERS 0360$: RETURN ;EXIT TO PROPER QUEUEING ROUTINE )370$: TST (SP)+ ;REMOVE CALLER'S ADDRESS2$ RETURN ;RETURN TO CALLER'S CALLER ;+ #; **-$RLCN-RELEASE CONTROLLER B ; F; THIS ROUTINE WILL RELEASE THE CONTROLLER IF THE CALLER IS THE OWNER F; OF THE CONTROLLER. IT WILL ALSO PLACE THE FORK BLOCK FOR THE NEXT D; DRIVER (IF ANY) IN THE CONTROLLER WAIT QUEUE INTO THE FORK QUEUE G; AFTER MAKING THAT DRIVER THE OWNER OF THE CONTROLLER. IF THE DRIVER E-; IS NOT THE OWNER, A RETURN IS EXECUTED. Q ; ; INPUTS: S ; ; R4=SCB ADDRESS. 8; R5=UCB ADDRESS OF UNIT THAT IS RELEASING CONTROLLER. ; ; OUTPUTS: ; ; CONTROLLER IS RELEASED. ; -; ALL REGISTERS EXECEPT R3 ARE PRESERVED. L ;- )$RLCN:: MOV S.KRB(R4),R3 ;GET KRB ADDRESSA, CMP R5,K.OWN(R3) ;IS RELEASING UNIT OWNER  BNE 460$ ;IF NE NO, RETURN V/ CLR K.OWN(R3) ;CLEAR OUT OWNER OF CONTROLLER 0 ADD #K.CRQ,R3 ;POINT TO CONTROLLER RQST QUEUE 5 DECB K.IOC-K.CRQ(R3) ;COUNT ONE LESS I/O ON THIS KRBE! MOV (R3),R4 ;GET NEXT EXTRY T1 BEQ 450$ ;IF EQ NO DRIVER IS WAITING -- RETURN P( MOV (R4),(R3) ;SET NEW FIRST IN LIST * BNE 400$ ;IF NE OLD LAST IS STILL LAST + MOV R3,2(R3) ;SET NEW LAST -- EMPTY LIST A400$: MOV 4(R4),K.OWN-K.CRQ(R3) ;SET NEW OWNER WITH R5 FROM FORK .# CLR (R4) ;CLEAR FORK LINK WORD B1 CALL $QFORK ;INSERT FORK BLOCK INTO FORK QUEUE A,450$: MOV U.SCB(R5),R4 ;REPLACE SCB IN R4 + BIC #S2.KRQ,S.ST2(R4) ;SCB IS NOT IN QUEUE-460$: RETURN ; .DSABL LSBT ;E,; **-ASKRB-ASSIGN KRB FOR DUAL-ACCESS DEVICE;;D; THIS ROUTINE WILL PROPERLY ASSIGN THE KRB FOR A DUAL-ACCESS DEVICE"; THAT USES KS.UOP SYNCRONIZATION.;I ; INPUTS:T;$; R0=CURRENTLY ASSIGNED KRB ADDRESS.(; R1=SCB ADDRESS FOR DUAL-ACCESS DEVICE.;N ; OUTPUTS:;5#; R0=KRB ADDRESS FOR KRB OF CHOICE.L(; R1=SCB ADDRESS FOR DUAL-ACCESS DEVICE.;K#; REGISTERS R2 AND R3 ARE DESTROYED5;4 E C .IF DF M$$ACD C-ASKRB: MOV #S2.MAD!S2.LDS,R2 ;GET STATUS BITS 0 BIC S.ST2(R1),R2 ;ARE ALL OF THE ABOVE BITS SET BNE 30$ ;IF NE NO -- EXIT NOW;/ BITB #S3.DRL,S.ST3(R1) ;IS THE DRIVE RELEASED?  BEQ 30$ ;IF NE NO -- EXIT NOW  U;S ; GET PORT A KRB -- CHECK IT OUT;  C00PqomkTADATADATADATADATADATA) MOV S.KTB(R1),R2 ;GET PORT A KRB ADDRESSD( BIC #KP.OFL,R2 ;CLEAR OUT LOW ORDER BIT+ MOV S.KTB+2(R1),R3 ;GET PORT B KRB ADDRESS( BIC #KP.OFL,R3 ;CLEAR OUT LOW ORDER BIT ;E$; GET PORT A -- CHECK IT FOR OFFLINE; * BIT #KS.OFL,K.STS(R2) ;IS THE KRB OFFLINE# BNE 10$ ;IF NE YES, SELECT PORT B) ;E ; GET PORT B KRB -- CHECK IT OUT;  & BIT #KS.OFL,K.STS(R3) ;IS KRB ONLINE?" BNE 20$ ;IF NE NO, SELECT PORT A ; :; BOTH KRB'S ARE ONLINE -- NOW CHECK FOR PORT RELATIVE I/O;  C) MOV S.PKT(R1),R0 ;GET I/O PACKET ADDRESSD2 MOV I.FCN(R0),-(SP) ;GET I/O FUNCTION FROM PACKET1 BIC #7,(SP) ;REMOVE QUALIFIER BITS (SEE $VOLVD)R* CMP #IO.STC,(SP)+ ;IS IT IO.STC FUNCTION? BEQ 40$ ;IF EQ YES I;>; BOTH KRB'S ARE ONLINE, IT IS NOT PORT RELATIVE I/O FUNCTION.7; NOW CHECK FOR THE PDF AND PORT SPECIFIC OFFLINE BITS.C;T T75$: BIT #KP.OFL,S.KTB(R1) ;IS PORT A OFL FROM THIS UNIT$% BNE 10$ ;IF NE YES -- SELECT PORT AO6 BIT #KP.OFL,S.KTB+2(R1) ;IS PORT B OFL FROM THIS UNIT% BNE 20$ ;IF NE YES -- SELECT PORT BE D;SF; NOW THE PDF BITS (WHICH, FOR NON PORT-SPECIFIC I/O, ARE EQU TO OFL).;V U* BIT #KS.PDF,K.STS(R2) ;IS PORT A PDF SET?% BNE 10$ ;IF NE YES -- SELECT PORT BI* BIT #KS.PDF,K.STS(R3) ;IS PORT B PDF SET?% BNE 20$ ;IF NE YES -- SELECT PORT A  ;C>; AT THIS POINT, BOTH KRB'S ARE EQUIVALENT FROM THE STANDPOINT=; OF BEING EQUALLY ONLINE, AND THIS WASN'T PORT SPECIFIC I/O. ;Y@; NOW WE WILL COMPARE THE KRB'S TO SEE WHICH IS BUSIER. IF THEY@; ARE THE SAME, THEN WE WILL SEE IF ONE IS ATTACHED TO THIS CPU. ; IF IT IS, THEN WE WILL USE IT.;C C CMPB K.IOC(R2),K.IOC(R3) BLO 20$ ;IF LO PORT A IS FREER BHI 10$ ;IF HI PORT B IS FREER  E .IF DF M$$PRO S@ BIT @$CPURM,K.URM(R2) ;CAN WE GET TO ONE EASIER THAN THE OTHER? BNE 20$ ;IF NE YES -- PORT A B .ENDC R Q10$: MOV R3,R2 ;SELECT PORT B&20$: MOV R2,S.KRB(R1) ;SET KRB ADDRESS MOV R2,R0 ;SHOW KRB OF CHOICEE L O .IF DF M$$PRO S6 MOV K.URM(R0),S.URM(R1) ;SET URM IN FORK BLOCK OF SCB S .ENDC S T530$: BICB #S3.DRL,S.ST3(R1) ;SHOW CONTROLLER ASSIGNEDC RETURNP .;(>; FUNCTION IS IO.STC, SEE IF PORT SPECIFICATION EXISTS. IF IT&; DOES, THEN SWITCH TO SPECIFIED PORT.; 040$: MOVB I.PRM+4(R0),R0 ;GET PORT SPECIFICATION BEQ 5$ ;IF EQ NONE EXISTS  SUB #1,R0 ;IS IT PORT AC BNE 10$ ;IF NE NO, BR 20$ ;IF EQ YES0 M .ENDC ;+"; **-$ECCOR-ECC CORRECTION ROUTINE;C@; THIS ROUTINE WILL TAKE THE 22 BIT REAL STARTING ADDRESS OF THEE; TRANSFER, CALCULATE WHERE THE ECC CORRECTION SHOULD TAKE PLACE, ANDSA; PERFORM THE ACTUAL XOR OPERATION TO CORRECT THE DATA IN MEMORY.E;F ; INPUTS:F;T; R0=BYTES ACTUALLY TRANSFERED0; R1=ECC ERROR POSITION (FROM HARDWARE REGISTER):; R3=ECC ERROR CORRECTION PATTERN (FROM HARDWARE REGISTER); R4=SCB ADDRESS; R5=UCB ADDRESS;1 ; OUTPUTS:;; R2=CSR ADDRESS; R3=CONTROLLER INDEX ;; R0, R4, R5 ARE PRESERVED;- .IF DF S$$ECC&$ECCOR::MOV R4,-(SP) ;SAVE SCB ADDRESS. MOV R0,-(SP) ;SAVE NUMBER OF BYTES TRANSFERED) CLR R0 ;CLEAR HIGH ORDER ERROR POSITIONE) DEC R1 ;MAKE POSITION INTO 0-7777 RANGEH DIV #20,R0 ;DIVIDE FOR:N ; R0=WORD POSITION (0-377)R ; R1=BIT POSITION (0-17)O! MOV R0,-(SP) ;SAVE WORD POSITIONC( CLR R2 ;CLEAR HIGH ORDER ERROR PATTERN1 ASHC R1,R2 ;SHIFT PATTERN INTO CORRECT POSITION / MOV U.BUF+2(R5),R1 ;GET LOW 16 BITS OF ADDRESSN3 MOVB U.BUF+1(R5),R0 ;GET HIGH BITS OF REAL ADDRESS ' MOV S.KRB(R4),R4 ;RETREIVE KRB ADDRESSA9 BIT #KS.MBC,K.STS(R4) ;IS THIS A 22-BIT MASSBUS DEVICE?R BNE 10$ ;IF NE YES& ADD K.OFF(R4),R4 ;POINT TO UMR AREA+2. MOV -(R4),R1 ;GET LOW 16 BITS OF REAL ADDRESS/ MOVB -(R4),R0 ;GET HIGH 6 BITS OF REAL ADDRESS 010$: MOV 2(SP),R4 ;GET BYTES ACTUALLY TRANSFERED3 BIC #777,R4 ;GET NUMBER OF FULL BLOCKS TRANSFERED1 BEQ 15$ ;IF EQ THERE WERE NONE' SUB #512.,R4 ;BACKUP TO BLOCK IN ERROR 815$: ADD R4,R1 ;CALCULATE STARTING ADDRESS OF BAD BLOCK ADC R0 ;...M/ ASHC #10.,R0 ;CALCULATE DISPLACEMENT AND BIASM ASHC #-10.,R100Pq@q4nbl ;...S# MOV R0,KISAR6 ;SET RELOCATION BIAS 7 ADD #140000+2,R1 ;POINT TO HIGH ORDER CORRECTABLE WORD- MOV (SP)+,R4 ;GET WORD POSITION2 ADD R4,R1 ;ADD IN ERROR WORD POSITION OFFSET ...$ ADD R4,R1 ;... FOR BYTE ADDRESSING, MOV (SP),R0 ;GET BYTES ACTUALLY TRANSFERED ASR R0 ;CONVERT TO WORDS- BIC #^C<377>,R0 ;GET HIGHEST WORD TO CORRECTB. BNE 17$ ;IF NE, IT'S A PARTIAL WORD TRANSFER6 MOV #377,R0 ;SET R0 EQUAL TO VERY LAST WORD IN BLOCK017$: CMP R4,R0 ;IS THE OFFSET WITHIN THE LIMIT? BHI 40$ ;IF HI NOT AT ALLA& BEQ 30$ ;IF EQ THEN ONLY ONE WORD IS.20$: XOR R2,(R1) ;CORRECT THE HIGH ORDER WORD-30$: XOR R3,-(R1) ;CORRECT THE LOW ORDER WORDI+40$: MOV (SP)+,R0 ;RESTORE BYTES TRANSFERED " MOV (SP)+,R4 ;RESTORE SCB ADDRESS' MOV S.KRB(R4),R3 ;RETREIVE KRB ADDRESSR# MOV (R3),R2 ;RETREIVE CSR ADDRESS0- MOVB K.CON(R3),R3 ;RETREIVE CONTROLLER INDEXE RETURN ;I .ENDC ; DF S$$ECC ;+ Q*; **-$CRPAS - COMMON REGISTER PASS ROUTINE; F; THIS SUBROUTINE IS USED TO PASS THE CONTENTS OF THE DEVICE REGISTERSE; BACK TO THE DIAGNOSTIC TASK. ALL REGISTERS ARE PASSED IN THE ORDERE%; IN WHICH THEY APPEAR ON THE UNIBUS.L;OF; NOTE: THIS ROUTINE MAKES USE OF THE ERROR LOGGING ENTRIES S.ROFF AND; S.RCNT IN THE SCB.;V ; INPUTS:R;R; R1=I/O PACKET ADDRESSV; R2=CSR ADDRESS; R4=SCB ADDRESS; ; OUTPUTS:;E; R1=DESTROYED. ; R0,R2 ARE PRESERVED;- $ .IF DF U$$UMD$CRPAS::MOV R0,-(SP) ;SAVE R0E/ MOV I.PRM+14(R1),KISAR6 ;SET RELOCATION BIAS P3 MOV I.PRM+16(R1),R0 ;GET REGISTER BUFFER ADDRESS H+ MOV R2,-(SP) ;PRESERVE INITIAL CSR ADDRESSI1 MOVB S.ROFF(R4),R2 ;GET OFFSET TO FIRST REGISTERL ADD (SP),R2 ;ADD CSR ADDRESS4 MOVB S.RCNT(R4),R1 ;GET NUMBER OF REGISTERS TO XFER)10$: MOV (R2)+,(R0)+ ;TRANSFER A REGISTERP$ SOB R1,10$ ;LOOP FOR ALL REGISTERS .IF DF M$$EXT' MOV S.KRB(R4),R1 ;RETREIVE KRB ADDRESS 2 BIT #KS.MBC,K.STS(R1) ;IS THIS A MASSBUS DEVICE? BEQ 20$ ;IF EQ NOE% ADD K.OFF(R1),R1 ;POINT TO UCB TABLEO$ MOV -(R1),R1 ;RETREIVE RHBAE OFFSET' ADD (SP),R1 ;FORM AN I/O PAGE ADDRESS( MOV (R1)+,(R0)+ ;TRANSFER RHBAE MOV (R1),(R0) ;TRANSFER RHCS3 .ENDC&20$: MOV (SP)+,R2 ;RESTORE CSR ADDRESS MOV (SP)+,R0 ;RESTORE R0M RETURNG .ENDC ; DF U$$UMD;+,; **-$VOLVD-PREPROCESS VOLUME VALID FUNCTION;R<; THIS ROUTINE WILL DETERMINE IF THE VOLUME VALID BIT SHOULD?; BE SET OR CLEARED. IF THE FUNCTION IS NOT IO.STC (SET VOLUMEC8; VALID) THE VOLUME VALID BIT WILL BE TESTED TO SEE IF A"; TRANSFER FUNCTION CAN BE ISSUED.;F?; NOTE: THE IO.STC SUBFUNCTION CODE VV$CHE SHOULD BE CONSIDERED;7; AN INVALID FUNCTION (AND CURRENTLY IS) IF RECEIVED BY;; $VOLVD. THIS SUBFUNCTION CODE IS INTERCEPTED, PROCESSED,S;; AND TERMINATED BY THE CACHER. THESE OPERATIONS WILL ONLYV;; REACH THE DRIVER IF DISK DATA CACHING IS NOT SUPPORTED INE;; THE CURRENTLY RUNNING EXECUTIVE, AND THOSE PACKETS SHOULD #; BE TERMINATED WITH STATUS IE.BAD.L;C ; INPUTS:T;V; R1=I/O PACKET ADDRESSE; I.PRM=ALWAYS ZERO&; I.PRM+2=0 TO RESET VOLUME VALID BIT; 1 TO SET VOLUME VALID BIT /; 2 TO RESET VOLUME VALID AND SPIN DRIVE DOWNO+; 3 TO SET VOLUME VALID AND SPIN DRIVE UPD'; 4 FOR "DATA CACHE LOCAL" OPERATIONSP8; -1 TO SIZE THE DISK (VOLUME VALID NOT CHANGED)*; I.PRM+4=RESERVED FOR PORT SPECIFICATION; R5=UCB ADDRESS;P ; OUTPUTS:;H/; C=0 THEN VOLUME VALID BIT WAS SET OR CLEARED.S3; R0=IS.SUC&377 IF VOLUME VALID FUNCTION (IO.STC).N; R0=-1 IF TRANSFER FUNCTION.'; N=1 IF TRANSFER FUNCTION (R0 TESTED)T;E9; C=1 THEN THE FUNCTION (EITHER TRANSFER OR VOLUME VALID) ; WAS REJECTED.; R0=I/O ERROR CODE.O;-# VV$SET==1 ;SET/CLEAR VOLUME VALIDU" VV$UNL==2 ;LOAD/UNLOAD THE DRIVE VV$SIZ==-1 ;SIZE THE DRIVE& VV$CHE==4 ;CAC SUBFUNCTION OF IO.STC8$VOLVD::MOV #IE.IFC&377,R0 ;ASSUME ILLEGAL FUNCTION CODE+ MOV I.FCN(R1),-(SP) ;GET THE FUNCTION CODEI( BIC #7,(SP) ;REMOVE ANY QUALIFIER BITS* CMP #IO.STC,(SP)+ ;VOLUME VALID FUNCTION? BNE 30$ ;IF NE NO.( MOV I.TCB(R1),R0 ;GET TASKS TCB ADDRESS; BIT #00PqqmkTADATADATADATADATADATAT3.PRV,T.ST3(R0) ;IS THE REQUESTING TASK PRIVILEGED?D BNE 99$ ;IF NE YES0 BITB #US.FOR,U.STS(R5) ;VOLUME MOUNTED FOREIGN? BEQ 50$ ;IF EQ NO, CAN'T RESET799$: BITB #US.VV,U.STS(R5) ;IS VOLUME VALID ALREADY SET=& BNE 1$ ;IF NE YES, SKIP MOUNTED TEST7 CMP $VERTK,R0 ;REQUESTING TASK THE VERIFICATION TASK ?R+ BEQ 1$ ;IF EQ, YES - ALLOW VV TO BE RESET) R8 BITB #US.MNT,U.STS(R5) ;IS THE DEVICE ALREADY MOUNTED? BEQ 50$ ;IF EQ YES, ERROR.31$: MOV I.PRM+2(R1),R0 ;GET PARAMETER SPECIFICATIONP( BPL 2$ ;IF PL SET/CLEAR OR LOAD/UNLOAD= MOV I.PRM+14(R1),I.PRM+16(R1) ;MOVE REGISTER BUFFER ADDRESS ; MOV I.PRM+12(R1),I.PRM+14(R1) ;TO PROPER PLACE FOR $CRPAS  BR 15$ ;SHOW SUCCESS%2$: BIT #VV$SET,R0 ;SET VOLUME VALID?N BNE 10$ ;IF NE YES, BIT #^C,R0 ;BAD PARAMETERS? BNE 5$ ;IF NE YESB) BICB #US.VV,U.STS(R5);CLEAR VOLUME VALID BR 15$ ;-5$: MOV #IE.BAD&377,R0 ;ASSUME BAD PARAMETERSE BR 40$ ;EXIT+10$: BISB #US.VV,U.STS(R5);SET VOLUME VALID 115$: MOV #IS.SUC&377,R0 ;SHOW SUCCESSFUL FUNCTION 20$: CLC ;SHOW GOOD FUNCTION RETURN ;)/30$: MOV #-1,R0 ;ASSUME GOOD TRANSFER FUNCTION11 BITB #US.VV,U.STS(R5);HAS VOLUME VALID BEEN SET?5 BNE 20$ ;IF NE YES/ MOV #IE.DNR&377,R0 ;ELSE FORCE DRIVE NOT READY 40$: SEC ;SHOW FAILURE RETURN ;D,50$: MOV #IE.PRI&377,R0 ;PRIVILEGE VIOLATION BR 40$ ; .ENDLUME VALID BR 15$ ;-5$: MOV #IE.BAD&377,R0 ;ASSUME BAD PARAMETERSE BR 40$ ;EXIT+10$: BISB #US.VV,U.STS(R5);SET VOLUME VALID 115$: MOV #IS.SUC&3 .TITLE MEMAPC .IDENT /13.02/R; C; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.P; ALL RIGHTS RESERVED.;B<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;D; D. N. CUTLER 4-AUG-73E;A); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:U;; P. J. BEZEREDI; D. R. DONCHINR; B. S. MCCARTHY;T; MODIFIED BY:;. ; B. S. MCCARTHY 23-MAY-82 13.01;F,; BM255 -- ADD U$$UMR CONDITIONALS FOR P/OS;K; J. M. LAWLER 02-DEC-82 13.02;R/; JL144 -- MODIFY $RELUI TO RELOCATE SUPERMODEL ; I-SPACE REFERENCES CORRECTLY;S; I/O RELATED ROUTINES;W/; ROUTINES DEALING WITH MEMORY MAPPING AND UMRS;R; MACRO LIBRARY CALLSN;W8 .MCALL F11DF$,HDRDF$,HWDDF$,PCBDF$,PKTDF$,SHDDF$,TCBDF$0 F11DF$ ;DEFINE WINDOW AND LOCK BLOCK OFFSETS ' HDRDF$ ;DEFINE TASK HEADER OFFSETS $ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS $ PKTDF$ ;DEFINE I/O PACKET OFFSETS* SHDDF$ ;DEFINE SHADOW RECORDING OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+#; **-$MPPHY-MAP TO PHYSICAL ADDRESSA; P; THIS ROUTINE IS CALLED TO MAP A RELOCATION BIAS AND DISPLACEMENT ADDRESS TO ANK; 18 BIT PHYSICAL ADDRESS. IF THE INDICATED DEVICE IS NOT AN NPR AN DEVICE,1O; THEN THE RELOCATION BIAS AND DISPLACEMENT ADDRESS ARE RETURNED TO THE CALLER.TN; ELSE THE RELOCATION BIAS AND DISPLACEMENT ADDRESS ARE CONVERTED TO AN 18 BIT3; PHYSICAL ADDRESS WHICH IS RETURNED TO THE CALLER.;D ; INPUTS:N;H; R1=RELOCATION BIAS.; R2=DISPLACEMENT ADDRESS.'; R5=ADDRESS OF THE UNIT CONTROL BLOCK.O;Y ; OUTPUTS:;9; IF DEVICE IS AN NPR DEVICE ON AN 18-BIT MACHINE, THEN I;; R1=HIGH ORDER 2 BITS OF PHYSICAL ADDRESS IN BITS 4 AND 5N,; R2=LOW ORDER 16 BITS OF PHYSICAL ADDRESS.1; IF DEVICE IS AN NPR DEVICE ON AN 11/70, THEN :; R1=HIGH ORDER 6 BITS OF PHYSICAL ADDRESS IN HIGH BYTE. .; R2=LOW ORDER 16 BITS OF PHYSICAL ADDRESS. &; IF DEVICE IS NOT AN NPR DEVICE, THEN; R1=RELOCATION BIAS.; R2=DISPLACEMENT ADDRESS.; &; R0 AND R3 ARE PRESERVED ACROSS CALL.;- R+$MPPHY::BITB #UC.NPR,U.CTL(R5) ;NPR DEVICE?S BEQ 10$ ;IF EQ NO1, ASL R2 ;REMOVE APR6 BIAS FROM DISPLACEMENT ASL R2 ;% CLC ;GET 2 BITS OF RELOCATION BIASR ROR R1 ;. RORB R2 ;TO FILL 8 LOW ORDER BITS OF ADDRESS ASR R1 ; RORB R2 ;& SWAB R2 ;SWAP TO COLLECT 8 MORE BITS, BISB R1,R2 ;INSERT UPPER 8 BITS OF ADDRESS$ SWAB R2 ;SWAP BACK TO REAL ADDRESS' CLRB R1 ;CLEAR LOW BYTE OF00q@q4nbl UPPER BITSB .IF NDF M$$EXTE. ASH #-4,R1 ;PUT BITS <17:18> OF ADDRESS INTO ;BITS <4:5>  .ENDC10$: RETURN ;L E;+:; THE FOLLOWING TWO ENTRY POINTS WILL BE DEFINED ONLY WHEN=; 22-BIT ADDRESSING CODE IS DISABLED. THIS IS TO PREVENT THER8; DRIVERS FROM HAVING UNDEFINED SYMBOLS WHEN TASK BUILT.;- .ENABL LSB2 .IF DF U$$UMR .IF NDF M$$EXT ($MPUBM:: ;MAP 11/70 UNIBUS TO TRANSFER!$STMAP:: ;SET MAPPING REGISTERSL RETURN ;DUMMY RETURNR;+3; **-$MPUB1-MAP UNIBUS TO MEMORY (ALTERNATE ENTRY). ;UA; THIS ROUTINE IS CALLED BY UNIBUS NPR DEVICE DRIVERS TO LOAD THE:=; NECESSARY UNIBUS MAP REGISTERS TO EFFECT A TRANSFER TO MAINSC; MEMORY ON AN 11/70 PROCESSOR WITH EXTENDED MEMORY. THIS ALTERNATEIE; ENTRY POINT ALLOWS THE DRIVER TO SPECIFY A NON-STANDARD UMR MAPPING ; ASSIGNMENT BLOCK. ;2 ; INPUTS:D;$/; R0=ADDRESS OF A UMR MAPPING ASSIGNMENT BLOCK. ;B ; OUTPUTS:;2; THE UNIBUS MAP REGISTERS NECESSARY TO EFFECT THE; TRANSFER ARE LOADED.;B-; NOTE: REGISTER R3 IS PRESERVED ACROSS CALL.;- .IFF ;NDF M$$EXT <$MPUB1::MOV M.UMRN(R0),-(SP) ;SET COUNT OF REGISTERS TO LOAD/ MOVB M.BFVH(R0),R1 ;GET HIGH 6 BITS OF ADDRESSO. MOV M.BFVL(R0),R2 ;GET LOW 16 BITS OF ADDRESS5 MOV M.UMRA(R0),R0 ;GET ADDRESS OF FIRST MAP REGISTERA BR 10$ ;GO LOAD THE UMRS;+ ; **-$MPUBM-MAP UNIBUS TO MEMORY; A; THIS ROUTINE IS CALLED BY UNIBUS NPR DEVICE DRIVERS TO LOAD THEB; NECESSARY UNIBUS MAP REGISTERS TO EFFECT A TRANSFER TO MAIN MEM-1; ORY ON AN 11/70 PROCESSOR WITH EXTENDED MEMORY. ;L ; INPUTS:;F; R4=ADDRESS OF DEVICE SCB. ; R5=ADDRESS OF DEVICE UCB.F;G ; OUTPUTS:;<; THE UNIBUS MAP REGISTERS NECESSARY TO EFFECT THE TRANSFER ; ARE LOADED. ;B-; NOTE: REGISTER R3 IS PRESERVED ACROSS CALL. ;-,$MPUBM::MOV S.KRB(R4),R0 ;GET KRB ADDRESS * ADD K.OFF(R0),R0 ;R0=END OF UMR AREA+2 : MOV M.UMRN-M.LGTH(R0),-(SP) ;PUSH COUNT OF UMR'S TO LOAD 4 MOV -(R0),R2 ;GET LOW 16 BITS OF BUF ADDR (M.BFVL) 0 MOVB -(R0),R1 ;GET HIGH ORDER 6 BITS (M.BFVH) 8 MOV M.UMRA-M.BFVH(R0),R0 ;PICK UP ADDRESS OF FIRST UMR .10$: MOV R2,(R0)+ ;LOAD LOW 16 BITS OF ADDRESS* MOV R1,(R0)+ ;LOAD HIGH 6 BITS OF ADDRESS ADD #20000,R2 ;ADVANCE 8K BYTES ADC R1 ;' SUB #4,(SP) ;ALL REGISTERS LOADED? A BGT 10$ ;IF GT NO TST (SP)+ ;CLEAN STACK RETURND .ENDC ;NDF M$$EXT .ENDC ; DF U$$UMR .DSABL LSBU ;+ S); **-$RELOC-RELOCATE USER VIRTUAL ADDRESS)8; **-$RELUI-RELOCATE USER (I SPACE ONLY) VIRTUAL ADDRESS;EC; THIS ROUTINE IS CALLED TO TRANSFORM A 16 BIT USER VIRTUAL ADDRESSDD; INTO A RELOCATION BIAS AND DISPLACEMENT IN BLOCK RELATIVE TO APR6.;R ; INPUTS:A;I&; R0=USER VIRTUAL ADDRESS TO RELOCATE.;C ; OUTPUTS:;C,; R1=RELOCATION BIAS TO BE LOADED INTO PAR6.3; R2=DISPLACEMENT IN BLOCK PLUS 140000 (PAR6 BIAS).R;R&; R0 AND R3 ARE PRESERVED ACROSS CALL.;- .ENABL LSBS .IF DF U$$DAS7$RELUI::MOV #UINAR0,-(SP) ;PUSH ADDRESS OF USER I SPACE- .IF DF S$$LIB) BIT #20000,@#PS ;EXECUTED IN USER MODE ?E BNE 10$ ;IF NE, YES ' MOV #SISAR0,(SP) ;SET TO SUPER I SPACER .ENDC ; DF S$$LIB BR 10$ ;ENTER COMMON CODEA .ENDC ; DF U$$DAS$RELOC:: ;REFERENCE LABELO .IF DF U$$DAS!S$$LIB:' MOV #UISAR0,-(SP) ;ASSUME USER D SPACEO R .IFDF S$$LIBC) BIT #20000,@#PS ;EXECUTED IN USER MODE ? BNE 10$ ;IF MI YES' MOV #SDSAR0,(SP) ;SET TO SUPER D SPACE .ENDC ; DF S$$LIB .IFTF ; U$$DAS!S$$LIB%10$: MOV R0,R1 ;COPY VIRTUAL ADDRESSL$ ASH #-6,R1 ;CALCULATE BLOCK NUMBER BIC #177600,R1 ;$! MOV R0,R2 ;COPY VIRTUAL ADDRESSS" ASH #-12.,R2 ;CALCULATE APR INDEX BIC #177761,R2 ;; .IFT ; DF U$$DAS!S$$LIB$ ADD (SP)+,R2 ;CALCULATE APR ADDRESS! ADD (R2),R1 ;AND FETCH CONTENTSM .IFF ; DF U$$DAS!S$$LIB- ADD UISAR0(R2),R1 ;CALCULATE RELOCATION BIASS .ENDC ; DF U$$DAS!S$$LIBB! MOV R0,R2 ;COPY VIRTUAL ADDRESS 4 BIC #177700,R2 ;CLEAR ALL BUT DISPLACEMENT IN BLOCK BIS #140000,R2 ;SET APR 6 BIAS1 RETURN ; .DSABL LSB6;+$; **-$RELOM-RE00qqmkTADATADATADATADATADATALOCATE AND MAP ADDRESS;$C; THIS ROUTINE IS CALLED TO TRANSFORM A 16 BIT USER VIRTUAL ADDRESSDC; INTO A RELOCATION BIAS AND DISPLACEMENT IN BLOCK RELATIVE TO APR6C1; AND LOAD THESE VALUES FOR ACCESS BY THE CALLER.E;M ; INPUTS: ;U&; R0=USER VIRTUAL ADDRESS TO RELOCATE.;T ; OUTPUTS:;A; R0=DISPLACEMENT IN BLOCK.I,; KISAR6 IS LOADED WITH THE RELOCATION BIAS.;7; R3 IS PRESERVED ACROSS CALL.;- B3$RELOM::CALL $RELOC ;RELOCATE USER VIRTUAL ADDRESS.+ MOV R1,KISAR6 ;SET KERNEL MAPPING REGISTERP. MOV R2,R0 ;SET DISPLACEMENT IN BLOCK ADDRESS RETURN ;U;+0; **-$RELCD-RELOCATE,MAP AND CHECK A DPB/RDB/WDB;MC; THIS ROUTINE IS CALLED TO TRANSFORM A 16 BIT USER VIRTUAL ADDRESS A; INTO A BIAS/DISPLACEMENT PAIR. THE ROUTINE IS PRIMARILY FOR USEC?; FROM THE DIRECTIVE DISPATCHER FOR DPBS/RDBS/WDBS. THE ROUTINEI@; CHECKS TO SEE IF THE STRUCTURE OVERLAPS AN APR BOUNDARY. IF ITC; DOES, AND THE NEXT APR IS NOT MAPPED CONTIGUOUSLY WITH THE FIRST,R;; A STATUS OF D.RS98 IS RETURNED, ELSE THE BLOCK IS MAPPED.0;S ; INPUTS:M; ; R2=SIZE OF STRUCTURE IN BYTES; R3=USER VIRTUAL ADDRESSP;D ; OUTPUTS:;B;; D.RS98 RETURNED TO TASK IF STRUCTURE NOT PHYS. CONTIGUOUS ;T6; R3=DISPLACEMENT ADDRESS IF USER VIRT. ADDR WAS VALID;I?; NOTE: KISAR6 IS DESTROYED (REMAPPED) IF USER VIRT. ADDR VALIDB;- ($RELCD::MOV R3,R0 ;COPY VIRTUAL ADDRESS- ASH #-12.,R0 ;SHIFT APR SELECT TO BITS 1,2,3N( BIC #177761,R0 ;CLEAR ALL BUT APR INDEX6 MOV UISAR0(R0),R1 ;GET PAGE ADDRESS REGISTER CONTENTS$ CMP #16,R0 ;MAPPED THROUGH APR 7 ?, BEQ 10$ ;IF EQ YES - ALWAYS CHECK FOR WRAP# MOV R1,-(SP) ;SAVE CONTENTS OF APR) ADD #200,(SP) ;AND POINT IT AHEAD BY 4KWN3 CMP (SP)+,UISAR0+2(R0) ;CONTIGUOUS WITH NEXT APR ?F BEQ 20$ ;IF EQ YES - ALWAYS OK310$: BIC #160000,R3 ;CLEAR APR SELECT FIELD OF V.A.D+ ADD R3,R2 ;CALCULATE ADDRESS OF LAST BYTER DEC R2 ;IN DATA STRUCTURES& CMP #20000,R2 ;OVERLAP APR BOUNDARY ?3 BLOS 30$ ;IF LOS YES - STRUCTURE IS NO CONTIGUOUS;%20$: MOV R3,R2 ;COPY VIRTUAL ADDRESSP. ASH #-6,R2 ;SHIFT OFFSET BITS TO 0 THROUGH 6% BIC #177600,R2 ;CLEAR OUT ALL OTHERS,( ADD R1,R2 ;CALCULATE 32WD BLOCK NUMBER0 BIC #177700,R3 ;STRIP ALL BUT DISPLACEMENT BITS* BIS #140000,R3 ;SET TO MAP THROUGH KISAR6" MOV R2,KISAR6 ;MAP TO USER BUFFER RETURN ;E:30$: DRSTS D.RS98 ;"PART OF DPB OUT OF TASK'S ADDR SPACE" ;+ /; **-$ASUMR-ASSIGN UNIBUS MAPPING REGISTERS R ; H; THIS ROUTINE IS CALLED TO ASSIGN A CONTIGUOUS SET OF UMR'S. NOTE THATH; FOR THE SAKE OF SPEED, THE LINK WORD OF EACH MAPPING ASSIGNMENT BLOCK H; POINTS TO THE UMR ADDRESS (2ND) WORD OF THE BLOCK, NOT THE FIRST WORD.H; THE CURRENT STATE OF UMR ASSIGNMENT IS REPRESENTED BY A LINKED LIST OFF; MAPPING ASSIGNMENT BLOCKS, EACH BLOCK CONTAINING THE ADDRESS OF THE D; FIRST UMR ASSIGNED AND THE NUMBER OF UMR'S ASSIGNED TIMES 4. THE B; BLOCKS ARE LINKED IN THE ORDER OF INCREASING FIRST UMR ADDRESS. ; ; INPUTS: D ; 6; R0=POINTER TO A MAPPING REGISTER ASSIGNMENT BLOCK. -; M.UMRN(R0)=NUMBER OF UMR'S REQUIRED * 4. ; ; OUTPUTS: ; #; ALL REGISTERS ARE PRESERVED. ; 1; C=0 IF THE UMR'S WERE SUCCESSFULLY ASSIGNED. D7; ALL FIELDS OF THE MAPPING REGISTER ASSIGNMENT BLOCK I1; ARE INITIALIZED AND THE BLOCK IS LINKED INTO E; THE ASSIGNMENT LIST. -; C=1 IF THE UMR'S COULD NOT BE ASSIGNED. ;- R  .IF DF M$$EXT&U$$UMR #$ASUMR::SAVNR ;SAVE R4 AND R5 G* TST (R0)+ ;SKIP OVER LINK WORD (M.LNK) 8 MOV #$UMRHD+2,R5 ;POINT TO UMR ASSIGNMENT LISTHEAD + 2 +10$: MOV R5,R4 ;SAVE POINTER TO PREVIOUS % BEQ 30$ ;IF EQ ASSIGNMENT FAILURE S7 MOV (R5),(R0) ;POINT TO NEXT FREE UMR (M.UMRA)(M.UMRA)E( ADD M.UMRN-M.UMRA(R5),(R0) ;(M.UMRA) 6 MOV #UBMPR+<31.*4>,-(SP) ;PUSH POINTER PAST LAST UMR 6 MOV -(R5),R5 ;POINT TO NEXT ASSIGNMENT BLOCK (M.LNK) ! BEQ 20$ ;IF EQ THERE IS NONE 7 MOV (R5),(SP) ;SET NEXT ALLOCATED UMR ADDRESS (M.UMRA)S;20$: SUB (R0),(SP) ;CALCUL00q@q4nblATE # OF FREE UMR'S * 4 (M.UMRA) 6 CMP (SP)+,M.UMRN-M.UMRA(R0) ;ENOUGH UMR'S AVAILABLE?  BLO 10$ ;IF LO NO 2 MOV R0,-(R4) ;LINK NEW BLOCK TO PREVIOUS (M.LNK) / MOV (R0),R4 ;SAVE FIRST UMR ADDRESS (M.UMRA) R7 MOV R5,-2(R0) ;POINT NEW BLOCK TO NEXT IN LIST (M.LNK) * MOV R4,R5 ;DUPLICATE FIRST UMR ADDRESS ; BICB #UBMPR!34,R5 ;MASK OUT ALL BUT HI 2 BITS IN LOW BYTE - BIC R5,R4 ;MASK OUT HIGH BYTE HIGH 2 BITS M* ASR R5 ;SHIFT HIGH 2 BITS TO BITS 4 & 5 . ASLB R4 ;CALCULATE HIGH BYTE OF LOW 16 BITS % ASL R4 ; (LOSING 200 BIT FIRST) U ASL R4 ; N' SWAB R4 ;FORM PROPER 16 BIT ADDRESS N< MOV M.BFVL-2(R0),M.UMVL-2(R0) ; GET ORIGINAL BUFFER ADDRESS& BIC #^C<1>,M.UMVL-2(R0) ; WAS IT ODD?8 ADD R4,M.UMVL-2(R0) ; IF IT WAS, THEN M.UMVL SHOULD BE) MOVB R5,M.UMVH-2(R0) ;SET BITS 4 & 5 D530$: DEC R0 ;PNT BACK TO LINK WORD PRESERVING CARRY I DEC R0 ; C RETURN ; ;+ 1; **-$DEUMR-DEASSIGN UNIBUS MAPPING REGISTERS 4 ; E; THIS ROUTINE IS CALLED TO DEASSIGN A CONTIGUOUS BLOCK OF UMR'S. IF LG; THE MAPPING ASSIGNMENT BLOCK IS NOT IN THE LIST, NO ACTION IS TAKEN. ,F; NOTE THAT FOR THE SAKE OF ASSIGNMENT SPEED, THE LINK WORD POINTS TO 8; THE UMR ADDRESS (2ND) WORD OF THE ASSIGNMENT BLOCK. ; ; INPUTS: 0 ; &; R2=POINTER TO ASSIGNMENT BLOCK. ; ; OUTPUTS: ; ; R0 AND R1 ARE PRESERVED. + ;- 1$DEUMR::TST (R2)+ ;SKIP OVER LINK WORD (M.LNK) 4 MOV #$UMRHD+2,R3 ;POINT TO ASSIGNMENT LISTHEAD + 2 010$: CMP -(R3),R2 ;IS IT THE NEXT ONE? (M.LNK)  BEQ 20$ ;IF EQ YES 2 MOV (R3),R3 ;ELSE POINT TO NEXT IN LIST (M.LNK) BNE 10$ ;IF NE THERE IS ONE 1 BR 30$ ;ELSE MAPPING ASSIGNMENT BLK NOT IN LISTK520$: MOV -(R2),(R3) ;UNLINK THE BLOCK (M.LNK)(M.LNK) P30$: RETURN ; ;+<; **-$STMP1-SET UP UNIBUS MAPPING ADDRESS (ALTERNATE ENTRY).;.=; THIS ENTRY CODE SETS UP AN ALTERNATE DATA STRUCTURE USED AS >; A UMR MAPPING ASSIGNMENT BLOCK AND CONTEXT STORAGE BLOCK, IN<; THE SAME MANNER AS $STMAP USES THE FORK BLOCK AND MAPPING C; BLOCK IN THE SCB, KRB. THE FORMAT OF THE STRUCTURE IS AS FOLLOWS:M;K; -------------------------- ; ! ! 4 WORDS USED FOR SAVING!; ! ! DRIVER'S CONTEXT IN CASE-; ! ! UMRS CAN'T BE MAPPEDL; ! ! IMMEDIATELY.R; --------------------------; ! !; ! ! 6 WORDS USED AS A UMR"; ! ! MAPPING ASSIGNMENT BLOCK.; ! !; ! !; ! !; --------------------------;N;S ; INPUTS:O;A2; R0=ADDRESS OF THE DATA STRUCTURE DEPICTED ABOVE.; R4=ADDRESS OF DEVICE SCB. ; R5=ADDRESS OF DEVICE UCB. ;. ; OUTPUTS:;T?; DATA STRUCTURE POINTERS SET UP FOR ENTRY TO $STMP2 IN $STMAP. ; ;- .ENABL LSB 5$STMP1::MOV S.FRK+10(R4),6(R0) ;SAVE DRIVER'S MAPPING  MOV R0,R4 ;COPY BLOCK POINTERA, ADD #M.LGTH+10,R0 ;POINT PAST MAPPING BLOCK( ADD #4,R4 ;POINT TO CONTEXT SAVE BLOCK BR 5$ ;SET UP THE UMR ADDRESS ;+); **-$STMAP-SET UP UNIBUS MAPPING ADDRESS-;C; THIS ROUTINE IS CALLED BY UNIBUS NPR DEVICE DRIVERS TO SET UP THEBC; UNIBUS MAPPING ADDRESS, FIRST ASSIGNING THE UMR'S. IF THE UMR'S G; CANNOT BE ALLOCATED, THE DRIVER'S MAPPING ASSIGNMENT BLOCK IS PLACED SH; IN A WAIT QUEUE AND A RETURN TO THE DRIVER'S CALLER IS EXECUTED. THE B; ASSIGNMENT BLOCK WILL EVENTUALLY BE DEQUEUED WHEN THE UMR'S ARE G; AVAILABLE AND THE DRIVER WILL BE REMAPPED AND RETURNED TO WITH R1-R5 B; PRESERVED AND THE NORMAL OUTPUTS OF THIS ROUTINE. THE DRIVER'S G; CONTEXT IS STORED IN THE ASSIGNMENT BLOCK AND FORK BLOCK WHILE IT IS SE; BLOCKED AND IN THE WAIT QUEUE. ONCE A DRIVER'S MAPPING ASSIGNMENT ED; BLOCK IS PLACED IN THE UMR WAIT QUEUE, IT IS NOT REMOVED FROM THE B; QUEUE UNTIL THE UMR'S ARE SUCCESSFULLY ASSIGNED. THIS STRATEGY G; ASSURES THAT WAITING DRIVERS WILL BE SERVICED FIFO AND THAT DRIVER'S H=; WITH LARGE REQUESTS FOR UMR'S WILL NOT WAIT INDEFINATELY. E ; ; INPUTS:;R; R4=ADDRESS OF DEVICE SCB.S; R5=ADDRESS OF DEVICE UCB.'&; (SP)=RETURN TO DRIVER'S CALLER00qqmkTADATADATADATADATADATA. ;L ; OUTPUTS:;O;; UNIBUS MAP ADDRESSES ARE SET UP IN THE DEVICE UCB AND THEI.; ACTUAL PHYSICAL ADDRESS IS MOVED TO THE SCB.;E;; NOTE: REGISTERS R1, R2, AND R3 ARE PRESERVED ACROSS CALL.H;- C,$STMAP::MOV S.KRB(R4),R0 ;GET KRB ADDRESS / ADD K.OFF(R0),R0 ;R0=LAST WORD+2 OF UMR AREA A' ADD #S.FRK+6,R4 ;POINT INTO FORK BLOCKM@5$: MOV U.BUF+2(R5),-(R0) ;SAVE LOW 16 BITS OF ADDRESS (M.BFVL)> MOVB U.BUF+1(R5),-(R0) ;SAVE HIGH 6 BITS OF ADDRESS (M.BFVH) # DEC R0 ;POINT BACK TO NEXT WORD ; MOV U.CNT(R5),-(R0) ;TEMORARILY STORE BYTE COUNT (M.UMVL) C, CLR -(R0) ;INITIALIZE UMR COUNT (M.UMRN) . BIT #1,M.BFVL-M.UMRN(R0) ;BUFFER ADDRESS ODD?" BEQ 10$ ;IF EQ NO, ALL IS NORMAL1 INC 2(R0) ;IT'S ODD, WE MUST MAP ONE EXTRA BYTED710$: ADD #4,(R0) ;INCREASE COUNT FOR ONE UMR (M.UMRN) A: SUB #20000,2(R0) ;REDUCE BYTE COUNT BY 8K BYTES (M.UMVL) ! BHI 10$ ;IF HI MORE BYTES TO GOR TST -(R0) ;(M.UMRA) (8 MOV -(R0),-(SP) ;SAVE POSSIBLE WAIT QUEUE LINK (M.LNK) 0 CALL $ASUMR ;ATTEMPT TO ASSIGN REQUIRED UMR'S 0 BCC 20$ ;IF CC SUCCESSFUL, CHECK FOR UMR WAIT  TST (SP)+ ;CLEAR STACK / MOV R5,(R4) ;SAVE R5 IN FORK BLOCK (S.FRK+6) 9 MOV (SP)+,-(R4) ;SAVE DRIVER'S RETURN ADDRESS (S.FRK+4) 3 MOV R0,-(R4) ;SAVE MAPPING BLOCK POINTER (S.FRK+2)I1 CALL $WTUMR ;WAIT FOR CHANGE IN UMR ASSIGNMENT (6 MOV (R4)+,R0 ;RESTORE MAPPING BLOCK POINTER (S.FRK+2)) ADD #M.LGTH,R0 ;POINT PAST MAPPING BLOCKM9 MOV (R4)+,-(SP) ;RESTORE DRIVER'S RETURN ADDR (S.FRK+4) M# MOV (R4),R5 ;RESTORE R5 (S.FRK+6)I* MOV 2(R4),KINAR5 ;REMAP DRIVER (S.FRK+10) .IF DF K$$DAS5 MOV 2(R4),KDSAR5 ;REMAP DRIVER IN D SPACE (S.FRK+10)  .ENDC BR 5$!20$: MOV U.SCB(R5),R4 ;RESTORE R4I< MOV M.UMVL(R0),U.BUF+2(R5) ;STORE LOW WORD OF UMR VIRT ADDR1 MOVB M.UMVH(R0),U.BUF(R5) ;STORE HIGH SIX BITS H+ CLRB U.BUF+1(R5) ;CLEAR HIGH-ORDER BYTE O* CMP $UMRWT,R0 ;WAS THIS CALLER WAITING?  BNE 30$ ;IF NE NO N2 MOV (SP),$UMRWT ;DEQUEUE CURRENT CALLER'S BLOCK # BNE 30$ ;IF NE NOT END OF LIST O4 MOV #$UMRWT,$UMRWT+2 ;UPDATE LAST IN LIST POINTER 30$: TST (SP)+ ;CLEAR STACK .ENABL LSBM ;+ S&; **-$DQUMR-DEQUEUE FROM UMR WAIT ; D; CONTROL IS TRANSFERRED HERE TO SEE IF A DRIVER IS WAITING FOR UMR G; ASSIGNMENT. FIRST THE CALLING DRIVER IS CALLED BACK AS A COROUTINE. .H; WHEN THE CALLING DRIVER ISSUES A RETURN BACK TO THIS ROUTINE, A CHECK H; IS MADE TO SEE IF ANY DRIVERS ARE WAITING FOR UMR'S. IF SO THE WAIT- C; ING DRIVER'S CONTEXT IS RESTORED WITHOUT ACTUALLY DEQUEUEING THE +F; MAPPING ASSIGNMENT BLOCK AND CONTROL IS PASSED BACK TO THE ORIGINAL ; UMR ASSIGNMENT ROUTINE. $ ; ; INPUTS: ; -; (SP)=RETURN ADDRESS TO DRIVER'S CALLER.. V ; ; OUTPUTS: ; A; IF ANYONE IS WAITING THEIR CONTEXT IS RESTORED AND THE ALLOCA- L#; TION ROUTINE IS CALLED BACK. H ;-  .ENABL LSB 4$DQUMR::CALL @(SP)+ ;CALL THE CALLER AS COROUTINE 3 MOV $UMRWT,R0 ;ANYONE WAITING FOR UMR ASSIGNMENT? U) BEQ 10$ ;IF EQ HE HAS SINCE GONE AWAY C ROL -(SP) ;SAVE SENSE OF C-BIT! TST (R0)+ ;POINT TO SAVED R1 ( MOV (R0)+,R1 ;RESTORE SAVED REGISTERS  MOV (R0)+,R2 ;  MOV (R0)+,R3 ;  MOV (R0)+,R4 ;  CALL @(R0)+ ;CALL ROUTINE + ROR (SP)+ ;RESET C BIT TO ENTRY CONDITIONT RETURN ; ;+ I,; **-$WTUMR-WAIT FOR CHANGE IN UMR STATE ; H; THIS ROUTINE STORES R1-R4 AND THE RETURN PC IN THE MAPPING ASSIGNMENT H; AND QUEUES THE BLOCK IN THE UMR WAIT QUEUE FOR A SUBSEQUENT RECALL TO H; THE CALLER WHEN THE STATE OF UMR ASSIGNMENT CHANGES. NOTE THAT IT IS F; POSSIBLE FOR THE MAPPING ASSIGNMENT BLOCK TO ALREADY BE IN THE WAIT @; QUEUE, BUT IF IT IS IT CAN ONLY BE AT THE HEAD OF THE QUEUE. ; ; INPUTS: B ; (; R0=POINTER TO UMR ASSIGNMENT BLOCK ; ; OUTPUTS: ; 9; THE ASSIGNMENT BLOCK IS QUEUED IN THE UMR WAIT QUEUE. ?; THE CALLER IS EVENTUALLY RETURNED AT SYSTEM STATE WITH R1-R4 H00qq4nbl; PRESERVED. A ;- E @$WTUMR::MOV (SP)+,12(R0) ;STORE RETURN ADDR TO ALLOCATE ROUTINE 7 CMP R0,$UMRWT ;MAPPING ASSIGNMENT BLK ALREADY IN LIST?A BEQ 5$ ;IF EQ YES 0 MOV R0,@$UMRWT+2 ;LINK BLOCK TO LAST IN QUEUE / MOV R0,$UMRWT+2 ;UPDATE LAST IN LIST POINTER  CLR (R0) ;ZERO LINK WORD$5$: TST (R0)+ ;POINT PAST LINK WORD( MOV R1,(R0)+ ;SAVE CALLER'S REGISTERS  MOV R2,(R0)+ ;  MOV R3,(R0)+ ;  MOV R4,(R0)+ ; *10$: RETURN ;RETURN TO CALLER'S CALLER  .DSABL LSB  .ENDC ; DF M$$EXT&U$$UMR ;+,; **-$RELOP-RELOCATE UNIBUS PHYSICAL ADDRESS;R>; THIS ROUTINE RELOCATES A UNIBUS PHYSICAL ADDRESS TO A KISAR6; BIAS AND DISPLACEMENT.;L ; INPUTS:O;S4; R0=BYTE OFFSET FROM ADDRESS IN U.BUF+1 AND U.BUF+2; R5=UCB ADDRESS2; U.BUF+1(R5)=HIGH ORDER BITS OF PHYSICAL ADDRESS1; U.BUF+2(R5)=LOW ORDER BITS OF PHYSICAL ADDRESSV;, ; OUTPUTS:;M(; KISAR6=CALCULATED BIAS (MAPPED SYSTEM)!; R1=REAL ADDRESS OR DISPLACEMENTA;- .IF NDF R$$PRO -$RELOP::MOV R0,-(SP) ;SAVE OFFSET INTO BUFFER5 MOV U.BUF+2(R5),R1 ;GET LOW BITS OF PHYSICAL ADDRESS 7 MOVB U.BUF+1(R5),R0 ;GET HIGH BITS OF PHYSICAL ADDRESSA% ADD (SP),R1 ;ADD OFFSET INTO BUFFERU ADC R0 ;...B/ ASHC #10.,R0 ;CALCULATE DISPLACEMENT AND BIAS  ASHC #-10.,R1 ;...B$ MOV R0,KISAR6 ;LOAD RELOCATION BIAS% ADD #140000,R1 ;SET TO MAP THRU APR6F" MOV (SP)+,R0 ;RESTORE BYTE OFFSET RETURN ;  .ENDC ; NDF R$$PROE;+E; **-$SWACD-SAVE MAPPING, CALL ACD AS A CO-ROUTINE, THEN REMAP DRIVER 7; **-$SWAC1-CALL ACD AS A CO-ROUTINE, THEN REMAP DRIVERG;LA; THESE ROUTINES ARE CALLED BY THE FULL DUPLEX TERMINAL DRIVER TOFD; SWITCH PROCESSING TO AN ANCILLARY CONTROL DRIVER (ACD). SINCE THEH; ACD REQUIRES APRS 5 AND 6, THE DRIVER MAPPING IS FIRST SAVED (IF ENTRYC; AT $SWACD), THEN THE ACD IS CALLED AS A CO-ROUTINE VIA A DISPATCH E; TABLE CONTAINED IN THE ANCILLARY CONTROL BLOCK (ACB). WHEN THE ACDNH; ACD RETURNS, THIS ROUTINE REMAPS THE DRIVER AND RETURNS CONTROL TO IT.; ; INPUTS:D;E0; R0=DISPATCH TABLE OFFSET (IF ENTRY AT $SWACD).&; R0=ACB ADDRESS (IF ENTRY AT $SWAC1).8; R5=POINTER TO OFFSET U.TSTA WITHIN THE TERMINAL'S UCB.3; 2(SP)=DISPATCH TABLE OFFSET (IF ENTRY AT $SWAC1).E:; 4(SP)=APR5 BIAS OF TERMINAL DRIVER (IF ENTRY AT $SWAC1).;D ; OUTPUTS:;T; R0 IS DESTROYED.;- .IF DF T$$ACD6$SWACD::MOV KINAR5,-(SP) ;SAVE TERMINAL DRIVER MAPPING .IF DF K$$DAS7 MOV KDSAR5,-(SP) ;SAVE TERMINAL DRIVER D-SPACE MAPPINGD .IFTF ;K$$DAS. MOV R0,-(SP) ;PUT ENTRY POINT OFFSET ON STACK) MOV U.ACB-U.TSTA(R5),R0 ;GET ACB ADDRESSB ASSUME A.REL,0Y9$SWAC1::MOV (R0),KINAR5 ;MAP THE ANCILLARY CONTROL DRIVERI .IFT ;K$$DASP: MOV (R0),KDSAR5 ;MAP THE ANCILLARY CONTROL DRIVER D-SPACE .IFTF ;K$$DAS: ADD A.DIS(R0),(SP) ;ADD DISPATCH TABLE ADDR TO THE OFFSET, MOV @(SP),(SP) ;GET THE ENTRY POINT ADDRESS CALL @(SP)+ ;CALL THE ACDR .IFT ;K$$DASD3 MOV (SP)+,KDSAR5 ;UPON RETURN, REMAP TTDRV D-SPACEP .ENDC ;K$$DAS, MOV (SP)+,KINAR5 ;REMAP THE TERMINAL DRIVER RETURN ;AND THEN RETURN TO IT .ENDC ;T$$ACD .ENDASSUME A.REL,0Y9$SWAC1::MOV (R0),KINAR5 ;MAP THE ANCILLARY CONTROL DRIVERI .IFT ;K$$DASP: MOV (R0),KDSAR5 ;MAP THE ANCILLARY CONTROL DRIVER D-SPACE .IFTF ;K$$DAS: ADD A.DIS(R0),(SP) ;ADD DISPATCH TABLE ADDR TO THE OFFSET, MOV @(SP),(SP) ;GET THE ENTRY POINT ADDRESS CALL @(SP)+ ;CALL THE ACDR .IFT ;K$$DASD3 MOV (SP)+,KDSAR5 ;UPON RETURN, REMAP TTDRV D-SPACEP .ENDC ;K$$DAS, MOV (SP .TITLE MFDRV .IDENT /0.00/;; COPYRIGHT (c) 1983. /; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;=; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE >; USED OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; VERSION 0.00;1 .ENABL LC ; Lower Case - Comments Field, Only !;+;O; MFDRV is presently NOT SUPPORTED and should NOT YET BE USED on RSX11M-PLUS. M; Such support will be provided in an upcoming update. This driver reservesF; space for a sup00qqmkTADATADATADATADATADATAported MFDRV to be provided in that upcoming update.; ;3F; MFDRV is the software interface between the RSX11M Operating System ); and DEC RH70/TM78/TU78 configurations. ;E; The TM78/TU78 DEC Magtape System has the following characteristics: ;SG; TM78 Control Unit - May have up to four (4) TU78 Tape Units attached.G; TU78 Tape Unit - Data Recording Mode is 6250BPI (GCR) or 1600BPI (PE)-F; at 125IPS (Inches/Sec.) Data recording is per ANSI X3.39 (1600BPI); and ANSI X3.54 (6250BPI).;-; d; C. SESTOKAS March 1983; ; EDIT DATE AUTHOR REASONF; ____ ____ ______ ______ ; 001; ;1;O a .SBTTL MACROS;+; MACRO LIBRARY CALLSf;- .MCALL HWDDF$,PKTDF$,UCBDF$ HWDDF$ ; Hardware Registerso PKTDF$ ; I/O Packet OffsetsM% UCBDF$ ; Unit Control Block Offsets4 .IF DF D$$IAG1 .MCALL UMDIO$ ; User Mode Diagnostic Defenitions  .ENDC;+F; Linkage Macros - Used by this Driver servicing TM78/TU78 interrupts.;- ; -- SUBR --.MACRO SUBR ARG.1 MOV #.+12,@#ARG-2*T$$M78 ; Setup Linkage AddressD" JMP ARG ; and GO TO Subroutine. .ENDM SUBR ; -- RTRN --.MACRO RTRN ARGA, JMP @ARG-2*T$$M78 ; Return from Subroutine. .ENDM RTRN , D;+; MACRO DEFENITIONSe;-; -- PUSH -- following forms:t;,; 1. Arguments may be defined or undefined. 7; They are enclosed in < > and separated by commas. i@; Undefined Arguments are null elements signified by a comma.; 2. No Arguments.).MACRO PUSH ARGS ; Push Items on Stack.B,.NARG HWMNY ; Number of Arguments in Call.$ .IF EQ HWMNY ; IF No Arguments,) CLR -(SP) ; THEN Reserve Stack Space.M .MEXIT ;HWMNY .IFF ; IF Arguments. .IRP X,E) .IF B X ; IF Argument missing,-( CLR -(SP) ; THEN Reserve Stack Space. .IFF ; IF Arguments( MOV X,-(SP) ; THEN Put Them on Stack. .ENDC ;X .ENDM ;X, .ENDC ;HWMNY .ENDM PUSH#; -- POP -- same forms as for PUSH.*.MACRO POP ARGS ; Pop Items from Stack.,.NARG HWMNY ; Number of Arguments in Call.$ .IF EQ HWMNY ; IF No Arguments,) INC (SP)+ ; THEN Skip Stack Element. .MEXIT ;HWMNY .IFF ; IF Arguments. .IRP X,& .IF B X ; IF Argument missing,( INC (SP)+ ; THEN Skip Stack Element. .IFF ; IF Arguments2 MOV (SP)+,X ; THEN Pop Them off Stack & to ARG. .ENDC ;X .ENDM ;X, .ENDC ;HWMNY .ENDM POP-:; **** Note PUSH/POP Usage: IF PUSH R2,R3 THEN POP R3,R2. f& .SBTTL TM78 DEVICE, MASSBUS REGISTERSGTMREGS = 22. ; # TM78 Device Registers - not including MFBAE, MFCS3.H3 ; Accessing MFIA may result in MFCS1 C1.CPE set.  ;#MFCS1 = +00 ; Control and Status 1IMFWC = + 2 ; Word CountMFBA = 4 ; UNIBUS AddressMFBC = 6 ; Byte Count#MFCS2 = 10 ; Control and Status 2 MFDI = 12 ; Data InterruptMFDM = 14 ; Data Mode MFAS = 16 ; Attention Summary MFDS = 20 ; Drive StatusMFDB = 22 ; Data BufferPMFDE = 24 ; Diagnostic ErrorMFDT = 26 ; Drive TypeMFSN = 30 ; Serial Number2 MFDR = 32 ; Diagnostic RequestMFDD = 34 ; Diagnostic Data;!MFNDI = 36 ; Non Data Interrupt -MFND0 = 40 ; Non Data Command - Tape Unit 0S*MFND1 = 42 ; | | | - Tape Unit 1*MFND2 = 44 ; | | | - Tape Unit 2-MFND3 = 46 ; Non Data Command - Tape Unit 3=MFIA = 50 ; Internal AddressMFCR = 52 ; Control register .IF DF M$$EXT ; 22 Bit Addr. -MFBAE = 54 ; Bus Address Extension Register4#MFCS3 = 56 ; Control and Status 3r .ENDC ;M$$EXT0 & .SBTTL REGISTER BIT/FIELD DEFENITIONS;+*; MFCS1 REGISTER RH/TM Shareable Register.;-+C1.SC = 100000 ; RH Reg - Special ConditionD*C1.TRE = 40000 ; RH Reg - Transfer Error 3C1.CPE = 20000 ; RH Reg - Control Bus Parity Error *C1.DVA = 4000 ; TM Reg - Drive Available&C1.PSL = 2000 ; RH Reg - Port Select-C1.A17 = 1000 ; RH Reg - UNIBUS @ - A171C1.A16 = 400 ; RH Reg - Extension Bits - A16B4C1.RDY = 200 ; RH Reg - Ready (for Data Transfer)*C1.IE = 10000qq4nbl ; RH Reg - Interrupt Enable6C1.DFC = 76 ; TM Reg - Data Transfer Function Code4C1.GO = 1 ; TM Reg - Go. Initiate data transfer;+3; Data Transfer Function Codes - GO and IE Bit set. ;-$FC.PE = 61 ! C1.IE ; Write 1600 (PE)&FC.GCR = 63 ! C1.IE ; Write 6250 (GCR)"FC.RDF = 71 ! C1.IE ; Read Forward"FC.RDR = 77 ! C1.IE ; Read Reverse$FC.XSN = 73 ! C1.IE ; Extended Sense;+,; MFWC REGISTER MASSBUS Word Count Register ;- 2's complement WORD COUNT.;+); MFBA REGISTER UNIBUS Address Register.n;- 177776. LSB not used.7;+5; MFBC REGISTER TM (Read/Write) Byte Count Register. ;-;+; MFCS2 REGISTER RH REGISTER;-C2.DLT = 100000 ; Data LateG#C2.WCE = 40000 ; Write Check ErrorC%C2.UPE = 20000 ; UNIBUS Parity Error1$C2.NED = 10000 ; Non-existent Drive%C2.NEM = 4000 ; Non-existent MemoryIC2.PGE = 2000 ; Program Error1!C2.MXF = 1000 ; Missed TransferR+C2.DPE = 400 ; MASSBUS Data Parity Error' ;RH TRE Err.NCS2ERR = C2.DLT ! C2.WCE ! C2.UPE ! C2.NED ! C2.NEM ! C2.PGE ! C2.MXF ! C2.DPEC2.OR = 200 ; Output ReadyEC2.IR = 100 ; Input Ready"C2.CLR = 40 ; Controller ClearC2.PAT = 20 ; Parity Test02C2.BAI = 10 ; UNIBUS Address Increment Inhibit&C2.UNT = 7 ; TM Unit Select (0-7) ;+; MFDI REGISTER TM Register;-,DTFLCD = 176000 ; Data Transfer Failure Code"DPR = 400 ; "1" - Drive Present%DTINTC = 77 ; Data Interrupt Code ;+; MFDM REGISTER TM Register;-)DM.SER = 100000 ; Suppress Error Recovery 9DM.FMT = 70000 ; Data (assembly/disassembly) Format Mode;>DM.SKP = 7400 ; Skip Count - Read:'0' fill followed by data.>DM.CNT = 374 ; Record Count - number of to be read/written.&DM.UNT = 3 ; TU Unit Select (0-3);+; MFAS REGISTER TM Register;->AS.BTS = 377 ; Attention Summary: Bit0-Drive0, Bit7-Drive7.;+; MFDS REGISTER TM Register;-4DS.RDY = 100000 ; Unit online - ready for execution.)DS.PRS = 40000 ; Unit has power applied.DS.ONL = 20000 ; Unit online.$DS.REW = 10000 ; Unit is Rewinding.1DS.PE = 4000 ; Unit in 1600(PE) recording mode. #DS.BOT = 2000 ; Unit at tape BOT.y)DS.EOT = 1000 ; Unit detected tape EOT.m9DS.FPT = 400 ; Unit write protected (No Write Ring). t-DS.AVL = 200 ; Drive available to MASSBUS.8DS.SHR = 100 ; Drive shareable to both MASSBUS ports.BDS.MNT = 40 ; Drive in maintenance mode - unavailable for use.9DS.DSE = 20 ; Unit in erase portion of DSE operation.p;+*; MFDB REGISTER RH REGISTER - Data Buffer;-;+/; MFDE REGISTER TM Register - Diagnostic Errorn;-;+); MFDT REGISTER TM Register - Drive Type ;-#DT.TAP = 40000 ; '1' - Tape Devicee#DT.DPT = 4000 ; Dual Port Featurew/DT.WCS = 2000 ; '1' - Writeable Control Store09DT.DTP = 777 ; Drive Type - TM78= 100, TM78/TU78= 101.h a;+,; MFSN REGISTER TM Register - Serial Number;-%SN.SN3 = 170000 ; BCD Serial Number 3.%SN.SN2 = 7400 ; | | | 2o%SN.SN1 = 360 ; | | | 1S%SN.SN0 = 17 ; BCD Serial Number 0+;+1; MFDR REGISTER TM Register - Diagnostic Request;-;+.; MFDD REGISTER TM Register - Diagnostic Data;-;+8; MFNDI REGISTER TM Register - Non Data Interrupt Status;-'NDFLCD = 176000 ; Non Data Failure Codet"NDUNIT = 1400 ; Tape Unit Number*NDINTCD = 77 ; Non Data Interrupt Code;+F; MFNDx REGISTER(S) TM Register - Non Data Command, Tape Unit (x) 0-3.;-0CMCNTx = 177400 ; Command Count for Tape Unit x.9NDFCTx = 76 ; Non Data Function Code for Tape Unit x.l>GOBITx = 1 ; Go Bit for Non Data Command for Tape Unit x.*; Non Data Transfer Commands - GO Bit set.%ERGGCR= 37 ; Erase 3" Gap, GCR.T#ERGPE= 35 ; Erase 3" Gap, PE.t(WTMGCR= 17 ; Write Tape Mark, GCR.&WTMPE= 15 ; Write Tape Mark, PE.%DSE= 13 ; Data Security Erase.r1SNSE= 11 ; Sense Tape Unit Characteristics.o*RWND= 7 ; Rewind Tape on Tape Unit.5UNLD= 5 ; Rewind and Unload Tape on Tape Unit. $SFTMK= 25 ; Space Forward TMK.$SRTMK= 27 ; Spac00qqmkTADATADATADATADATADATAe Reverse TMK.ASLTMK= 47 ; Space Forward TMK/LEOT. IF LEOT, position AEOV.s$SFREC= 21 ; Space Forward REC.$SRREC= 23 ; Space Reverse REC. s;+4; MFIA REGISTER TM Register - TM78 Internal Address;-;+4; MFCR REGISTER TM Register - TM78 Control Register;-5TMRDY = 100000 ; TM78 available for command executionsTMCLR = 40000 ; TM78 Clearn%MCPE = 20000 ; TM78 ROM parity errorR=ILR = 10000 ; TM78 reference to nonexistent MASSBUS registero>CPE = 4000 ; TM78 parity error detect - write to MASSBUS regDEVPAR = 2000 ; TM78 even parity generate/check on MASSBUS cntl bus6HLDA = 1000 ; TM78 microprogram sequencing inhibited?HOLD = 400 ; TM78 HOLD bit - inhibit microprogram sequencingINTDT = 377 ; Internal Data;+=; MFBAE REGISTER RH REGISTER - Bus Address Extension Registero;-GBA.BTS = 77 ; Bus Address bits 21-16. Logical extn of MFBA registerp;+7; MFCS3 REGISTER RH REGISTER - Control and Status Reg 3B;-&C3.APE = 100000 ; Address Parity Error.C3.PEO = 40000 ; Data Parity Error - Odd Word1C3.PEE = 20000 ; Data Parity Error - Even Word b.C3.CEO = 10000 ; Write Check Error - Odd Word/C3.CEE = 4000 ; Write Check Error - Even WordiC3.DW = 2000 ; Double Word!C3.IE = 100 ; Interrupt Enable'C3.IPC = 17 ; Inverted Parity Checks;+; Extended Sense DataB;-0XNDREG = 60. ; 60. bytes - TM78 Error Log Data A .SBTTL TM78 INTERRUPT CODES;+C; TM78 INTERRUPT CODES - Data/Non Data Transfers and TM78 Initiateds;-#; Bit Mask Values Int Code tILG = 1 ; Illegal 0."DON = 2 ; NDT or DT. 1, Done.'TMK = 4 ; NDT or DT. 2, Tape Mark. 0BOT = 10 ; NDT or DT. 3, Beginning of Tape.'EOT = 20 ; NDT or DT. 4, End of Tape.+LEOT = 40 ; NDT. 5, Logical End of Tape. %NOOP = 100 ; NDT. 6, NO OP Command. !RWD = 200 ; NDT. 7, Rewinding. -FPT = 400 ; NDT or DT. 10, Write Protect.BBNRDY = 1000 ; NDT or DT. 11, TM78 not ready to execute command.<NAVL = 2000 ; NDT or DT. 12, TU78 not avail to this port.-OFLN = 4000 ; NDT or DT. 13, TU78 Offline. 3NTEX = 10000 ; NDT or DT. 14, TU78 Non Existant..?NTCP = 20000 ; NDT or DT. 15, Read initiated, not performed.p UNDF = 40000 ; Undefined. 16,AONLN = 100000 ; TM Initiated 17, TU78 < Online. TU78 Sense Data.06RLL = 1 ; DT. 20, Read data OK. GT requested.6RLS = 2 ; DT. 21, Read data OK. LT requested.<RTRY = 4 ; DT. 22, Retry operation - same direction.<RDOP = 10 ; DT. 23, Read Data in opposite direction.:UNRD = 20 ; DT. 24, Data Unreadable after retries.@ERR = 40 ; DT. 25, Data Transfer error - Surp Err RcvryAEOTE = 100 ; DT. 26, Write err after EOT - Surp Err RcvryeCBDTP = 200 ; NDT or DT. 27, Bad tape- Write failure ! Lost PositeBTMFA = 400 ; NDT or DT. 30, TM Fault A - Failure, I/O operationCTUFA = 1000 ; NDT or DT. 31, TU Fault A - Failure, I/O operation <TMFB = 2000 ; TM Initiated 32, TM Fault B - Failure, no I/OTMFB = 4000 ; Not Used. 33,s;MBFL = 10000 ; TM Initiated 34, Massbus Control Bus Fault.f; TM78 Initiated Interrupts. TMI1= ONLNTMI2= TMFB ! MBFLp%; Data Transfer Operation Interrupts.i ; WRITE2WRTI1= DON ! EOT ! FPT ! NRDY ! NAVL ! OFLN ! NTEX-WRTI2= RTRY ! ERR ! EOTE ! BDTP ! TMFA ! TUFA0 ; READ FWD,3RDFI1= DON ! TMK ! NRDY ! NAVL ! OFLN ! NTEX ! NTCPN@RDFI2= RLL ! RLS ! RTRY ! RDOP ! UNRD ! ERR ! BDTP ! TMFA ! TUFA ; READ REV 9RDRI1= DON ! TMK ! BOT ! NRDY ! NAVL ! OFLN ! NTEX ! NTCP3@RDRI2= RLL ! RLS ! RTRY ! RDOP ! UNRD ! ERR ! BDTP ! TMFA ! TUFA ; XTND SNSd XNSI1= DON ); Non Data Transfer Operation Interrupts.T ; WRITE TMK2WTMI1= DON ! EOT ! FPT ! NRDY ! NAVL ! OFLN ! NTEXWTMI2= BDTP ! TMFA ! TUFA ; SENSE SNSI1= DONSNSI2= TMFA ! TUFA ; SPACE TMK, FWD=.SFTMI1= DON ! NRDY ! NAVL ! OFLN ! NTEX ! NTCPSFTMI2= BDTP ! TMFA ! TUFA ; SPACE TMK, REV 4SRTMI1= DON ! BOT ! NRDY ! NAVL ! OFLN ! NTEX ! NTCPSRTMI2= BDTP ! TMFA ! TUFA ; S00qq4nblPACE TMK/LEOT, FWD5SLTMI1= DON ! LEOT ! NRDY ! NAVL ! OFLN ! NTEX ! NTCPXSLTMI2= BDTP ! TMFA ! TUFA ; SPACE RECORD, FWD4SFRCI1= DON ! TMK ! NRDY ! NAVL ! OFLN ! NTEX ! NTCPSFRCI2= BDTP ! TMFA ! TUFA ; SPACE RECORD, REV:SRRCI1= DON ! TMK ! BOT ! NRDY ! NAVL ! OFLN ! NTEX ! NTCPSRRCI2= BDTP ! TMFA !TUFAO ; ERASE 3" GAP!2ERGI1= DON ! EOT ! FPT ! NRDY ! NAVL ! OFLN ! NTEXERGI2= BDTP ! TMFA ! TUFA  ; DATA SECURITY ERASE,DSEI1= DON ! FPT ! NRDY ! NAVL ! OFLN ! NTEXDSEI2= TMFA ! TUFA ; REWIND ,RWDI1= DON ! RWD ! NRDY ! NAVL ! OFLN ! NTEXRWDI2= TMFA ! TUFA ; UNLOADE&UNLI1= DON ! NRDY ! NAVL ! OFLN ! NTEXUNLI2= TMFA ! TUFA .SBTTL Function Tables ;+$;TM78/TU78 Spacing Subfunction Table;-<.MACRO SPCFCT SPCGCR,SPCPE,TIMOUT,TIMES,SPCVL1,SPCVL2,ISRSRV# .BYTE SPCGCR ; Commands: 6250BPI, .BYTE SPCPE ; 1600BPI. ? .BYTE TIMOUT,TIMES ; Subcycle Time (S.CTM), Subcycles (S.STS).U- .WORD SPCVL1 ; Interrupt validation Mask 1.L- .WORD SPCVL2 ; Interrupt validation Mask 2.' .WORD ISRSRV ; > ISR Service Routine.T .ENDM SPCFCT *SVALI1= +4 ; > Spacing Validation Mask(s).JSPFTMK: SPCFCT SFTMK,SFTMK, 2,120., SFTMI1,SFTMI2, SPCISR ;Space FWD TMK.JSPRTMK: SPCFCT SRTMK,SRTMK, 2,120., SRTMI1,SRTMI2, SPCISR ;Space REV TMK.NSPLTMK: SPCFCT SLTMK,SLTMK, 2,120., SLTMI1,SLTMI2, SPCISR ;Space FWD TMK/LEOTJSPFREC: SPCFCT SFREC,SFREC, 2,120., SFRCI1,SFRCI2, SPCISR ;Space FWD REC.JSPRREC: SPCFCT SRREC,SRREC, 2,120., SRRCI1,SRRCI2, SPCISR ;Space REV REC. v;+ ; Valid TM78/TU78 Function Table;-F.MACRO FUNCT FCT,PREPRO,CMNDGC,CMNDPE,TIMOUT,TIMES,VALI1,VALI2,ISRSRV# .WORD IO.'FCT ; I/O Function Code + .WORD PREPRO ; Preprocessing indications..# .BYTE CMNDGC ; Commands: 6250BPI, # .BYTE CMNDPE ; | 1600BPI. .? .BYTE TIMOUT,TIMES ; Subcycle Time (S.CTM), Subcycles (S.STS).c, .WORD VALI1 ; Interrupt Validation Mask 1., .WORD VALI2 ; Interrupt Validation Mask 2.' .WORD ISRSRV ; > ISR Service Routine.1 .ENDM FUNCT PWR= 1 ; Test US.PWF Indication.WRT= 2 ; Test M.SWL Indication.M2WTPW= PWR!WRT ; Test US.PWF and M.SWL Indication.REV= 4 ; Test for Read Reverse. DT= 8. ; Test for Data Request.R'PREPRO= +2 ; > Pre process I/O request.NCMDGCR= +4 ; > GCR Command..CMDPE= +5 ; > PE Command.$TMOUT= +6 ; > Time out information.#VALI1= +10 ; > Validation Mask(s)..$ISRSRV= +14 ; > ISR Service Routine.*IO.XSN= 37400 ; Function - Not in QIO.MAC.FTBL:OIFUNCT WLB, WTPW!DT, FC.GCR,FC.PE, 3,1, WRTI1,WRTI2, 0 ; WRITEdLFUNCT RLB, PWR!DT, FC.RDF,FC.RDF, 20.,1, RDFI1,RDFI2, 0 ; READ FWDNFUNCT RLV, PWR!REV!DT, FC.RDR,FC.RDR, 20.,1, RDRI1,RDRI2, 0 ; READ REVMFUNCT EOF, WTPW, WTMGCR,WTMPE, 3,1, WTMI1,WTMI2, WTMISR ; WRITE TMKLFUNCT STC, 0, SNSE, SNSE, 2,1, SNSI1,SNSI2, SNSISR ; SET CHARLFUNCT SEC, 0, SNSE, SNSE, 2,1, SNSI1,SNSI2, SNSISR ; SNS CHARMFUNCT SMO, 0, SNSE, SNSE, 2,1, SNSI1,SNSI2, SNSISR ; S/MOU CHR,LFUNCT SPF, PWR, 0, 0, 2,120., 0, 0, 0 ; SPC TMKSMFUNCT SPB, PWR, 0, 0, 2,120., 0, 0, 0 ; SPC BLCKS MFUNCT ERS, WTPW, ERGGCR,ERGPE, 3,1, ERGI1,ERGI2, ERGISR ; ERS 3" GP GFUNCT DSE, WTPW, DSE, DSE, 2,160., DSEI1,DSEI2, DSEISR ; DSEEIORWD:CFUNCT RWD, 0, RWND, RWND, 2,60., RWDI1,RWDI2, RWDISR ; REWINDE LNGHT=.-IORWD1FFUNCT RWU, 0, UNLD, UNLD, 2,1, UNLI1,UNLI2, UNLISR ; RWND/UNLD S .IF DF E$$DVC XNDSNS:HLFUNCT XSN, 0, FC.XSN,FC.XSN, 2,1, XNSI1, 0, XNSISR ; XTND SNS .ENDC ;E$$DVCENDFTB=.  .SBTTL OPERATION RETURN CODES;+<; I/O Operation Return Codes per TM78 Interrupt Code Values.;- ; Interrupt Designation/Code+RTRNTB: .BYTE 0 ; ILG 0 - Illegal.D! .BYTE IS.SUC ; DON 1 - Done. & .BYTE IE.EOF ; TMK 2 - Tape Mark./ .BYTE IS.SUC ; BOT 3 - Beginning of Tape. ,( .BYTE IE.EOT ; EOT 4 - End of Tape.0 .BYTE IE.EOV ; LEOT 5 - Logical End of Tape.) .BYTE 0 00qqmkTADATADATADATADATADATA ; NOOP 6 - No operation.,, .BYTE IS.SUC ; RWD 7 - Start of Rewind.+ .BYTE IE.WLK ; FPT 10 - File Protected.N2 .BYTE IE.DNR ; NRDY 11 - Not ready for Command.7 .BYTE IE.FHE ; NAVL 12 - Not available to this port.o* .BYTE IE.DNR ; OFLN 13 - TU78 Offline. / .BYTE IE.FHE ; NTEX 14 - TU78 non-existant. I: .BYTE IE.FHE ; NTCP 15 - Not cpbl- Rd Init, Not Prfrmd.& .BYTE 0 ; UNDF 16 - Undefined.1 .BYTE 0 ; ONLN 17 - Online (Unsolicited). ( .BYTE IE.DAO ; RLL 20 - Long Record.) .BYTE IS.SUC ; RLS 21 - Short Record.W, .BYTE IE.VER ; RTRY 22 - Retry operation.* .BYTE IE.VER ; RDOP 23 - Read opposite.' .BYTE IE.VER ; UNRD 24 - Unreadable.I6 .BYTE IE.VER ; ERR 25 - Error, Retries suppressed.: .BYTE IE.VER ; EOTE 26 - Error/EOT. Retries suppressed.; .BYTE IE.BBE ; BDTP 27 - Bad Tape. Write err/Posit lost.p' .BYTE IE.FHE ; TMFA 30 - TM Fault A.;' .BYTE IE.FHE ; TUFA 31 - TU Fault A. 6 .BYTE 0 ; TMFB 32 - TM Fault B (Unsolicited). ' .BYTE 0 ; TUFB 33 - Undefined. 5 .BYTE 0 ; MBFL 34 - MASSBUS Control Bus Fault  ; (Unsolicited). .EVEN 2! .SBTTL DEFENITION OF U.CW2/U.CW3;;+; U.CW2 - Characteristics WordB; U.CW3 - Supported Tape Density Identification (Set up by SYSGEN);-;+#; TAPE CHARACTERISTICS (U.CW2) WORD 7; Bits 6,7 and 11 user settable via IO.STC or IO.SMO. .D; Bit 11 only allowed to be updated when tape unit not beyond BOT.5; Returned per IO.SEC request in second status word.);-?M.PEOV= 100000 ; Returned to user as '0' - Driver internal use. 7 ; Unlabelled tape operation - Tape in gap after EOV V< ; (double TMK) having completed forward motion operation.CM.AEOV= 40000 ; Unlabelled tape operation - Tape positioned in gapS? ; between double TMK's (EOV) after forward motion operation. M.BOT= 20000 ; Tape at BOT.@M.1600= 4000 ; * Tape density control - '0'=6250BPI, '1'=1600.$M.HWL= 2000 ; Hardware Write Lock.9M.RWD= 1000 ; Driver indication that unit is rewinding..;M.SER= 400 ; Tape Unit select error (Tape Unit Offline). EM.IWR= 200 ; * Inhibit Write with Extended Inter-record gap (IRG).e(M.SWL= 100 ; * Software write locked.2M.TMK= 40 ; Last Tape Command encountered TMK.2M.EOT= 20 ; Last command encountered EOT mark.6NEWBTS= M.AEOV ! M.BOT ! M.EOT ! M.HWL ! M.SER ! M.TMK7NWBTS1= M.BOT ! M.EOT ! M.HWL ! M.SER ! M.1600=&NWBTS2= M.BOT ! M.EOT ! M.SER;+/; SUPPORTED TAPE DENSITY (U.CW3) IDENTIFICATIONu; 1; Low byte: U.CW2, Bit11='0' - UD.625, 6250BPI.r1; High byte: U.CW2, Bit11='1' - UD.160, 1600BPI. ;- i .SBTTL DRIVER PARAMETERSp#US.SUP=2 ; Supress Error Recoveryw;+5; Driver Parameters - Indexed by RH Controller NumberM;-(CNTBL: .BLKW T$$M78 ; > UCB, I/O Dequd.-DQDIO: .BLKW T$$M78 ; > FTBL, Dequd request.L.DQDUCB: .BLKW T$$M78 ; > UCB - Dequd request.0IOFCT: .BLKW T$$M78 ; > FTBL, I/O Command code..IORTN: .BLKW T$$M78 ; I/O Request restart @. BINPROG: .BLKW T$$M78 ; I/O Status - NEQ= Lo Byte,I/O in Progress;% ; Hi Byte,Passed DEV REG's(UMD).'6DTCMD: .BLKW T$$M78 ; I/O Status - NEQ=Data Transfer.DXNSCMD: .BLKW T$$M78 ; I/O Status - NEQ= Lo Byte,XND SNS Operation; ; Hi Byte,Unsolicited I/O.3DTCNT: .BLKW T$$M78 ; Current DATA I/O Byte Count..8DTADR1: .BLKW T$$M78 ; Current Address - U.BUF,U.BUF+1.2DTADR2: .BLKW T$$M78 ; | | | | - U.BUF+2.DRDOPCM: .BLKW T$$M78 ; > FTBL - Read Opposite Function, preprocess.5INTRPT: .BLKW T$$M78 ; I/O Interrupt being serviced.t6INTCD1: .BLKW T$$M78 ; Interrupt code to Int 0 - 172INTCD2: .BLKW T$$M78 ; Bit Code value: 20 - 343TMUNIT: .BLKW T$$M78 ; Lo Byte= TM#, Hi Byte= TU#.B;RSTATN: .BLKW T$$M78 ; MFAS Reg Reset Mask - NDT Commands.TBSPCYET: .BLKW T$$M78 ; Residual (to be yet) spaced BLCK/TMK count6TPCHAR=SPCYET ; Tape Characteristics; IO.SMO/IO.STC.?SPACED: .BLKW T$$M78 ; Spaced BLCK/TMK count - Already spaced.L/SPCNG: .BLKW T$$M78 ; Current I/O Space Count. @RTTBL: .BLKW T$$M78 ; Retry count: 00qq4nbl+0,Rtrs left. +1,Total rtrs.+ERRPKT: .BLKW T$$M78 ; > Error Log Packet.B .IF GT T$$M78-18TEMP: .BLKW 1 ; PS Save Area. Lo 4 bits - Controller #. .ENDCDCBPTR: .WORD 0 ; > DCB.8$WTRTRY= 50. ; # Re-write attempts.:RDRTRY= 21. ; # Re-read attempts (embedded tape cleans).;+; DRIVER DISPATCH TABLEa;-$MFTBL::' .WORD MFINI ; Initiate I/O Operation 8$ .WORD MFCAN ; Cancel I/O Operation .WORD MFOUT ; Device Timeout .WORD MFPWF ; Powerfail Entry: .PAGE .SBTTL INITIATE I/O OPERATIONSt;+8; -- MFINI -- Initiate TU78/TM78 Mag Tape I/O Operation ;N; Service QIO Directive or Completed I/O request, services remaining requests.;K; IF the Dqu successful, THEN service the request. ELSE RETURN to Caller. ; ; Prior to CALL $GTPKT:m; R5 - > UCB.;; Return from $GTPKT: ;LF; C=1 - Dequeue unsuccessful. Controller Busy or No Request to DQU.; ; C=0 - Dequeue successful.O; R1 - > I/O Pckt..(; R2 - Physical Tape Unit # (U.UNIT).&; R3 - RH Controller Index (S.CON).; R4 - > SCB.; R5 - > UCB.;-0MFINI: CALL $GTPKT ; Outstanding I/O request ?$ BCC 10$ ; IF CC, Yes. Service it./ RETURN ; Controller Busy or No I/O Request. 10$: MOV S.CSR(R4),R2 ; R2=CSR.2 MOV R5,CNTBL(R3) ; Save > UCB, Dqud I/O Request.( MOV I.FCN(R1),R1 ; R1 - Function code./ MOV #FTBL,R0 ; R0 > TM78/TU78 Function Table.e9 BICB #US.SUP,U.STS(R5) ; Assume Error recovery allowed. , CLR RTTBL(R3) ; Assume recovery count = 0. .IF DF D$$IAG) BITB #IQ.UMD,R1 ; Diagnostic function ?. BEQ 15$ ; IF EQ, No.. MOV #100000,RTTBL(R3) ; Diagnostic function," BR 18$ ; No error recovery. 15$: .ENDC ;D$$IAG* BITB #IQ.X,R1 ; Inhibit error recovery ? BEQ 20$ ; IF EQ, No.R=18$: BISB #US.SUP,U.STS(R5) ; Inhibit Driver error recovery. ; Validate I/O Request Support.R>20$: BICB #IQ.X!IQ.UMD!IQ.Q,R1 ; Validate only function code.122$: CMP R1,(R0) ; I/O supported by TM78/TU78 ?  BEQ 30$ ; IF EQ, Yes. $ ADD #LNGHT,R0 ; Next I/O function.1 CMP R0,#ENDFTB ; Any more TM78/TU78 Functions ?+ BNE 22$ ; IF NE, No. Look for match/end.,# MOV #IE.IFC&377,R0 ; Unsupported, BR 45$ ; End request.; Preprocess I/O Request.r!30$: MOV R0,DQDIO(R3) ; > FTBL, / MOV R5,DQDUCB(R3) ; and > UCB Dequd request.e& TST (R0)+ ; > Preprocess functions.,; Function allowed if Powerfailure occured ?6 BIT #PWR,(R0) ; I/O allowed if powerfailure occured? BEQ 40$ ; IF EQ, Yes.2 BITB #US.PWF,U.STS(R5) ; Powerfailure occurence? BEQ 40$ ; IF EQ, No.,< MOV #IE.ABO&377,R0 ; Fnctn not allowed until US.PWF Reset. BR 45$ ; End request.-; Function allowed if Software write locked ? 640$: BIT #WRT,(R0) ; User write locked verification ? BEQ DQD ; IF EQ, No.M< BIT #M.SWL,U.CW2(R5) ; Device user software write locked? BEQ DQD ; IF EQ, No.- MOV #IE.WLK&377,R0 ; Indicate write locked,B"45$: SUBR ENDRQS ; End request, BR MFINI ; Service others. ?; Request DQD - RWD completion or TM78 RDY return entry point. 4B; R2 - CSR, R3 - RH Cont Index(S.CON), R4 - > SCB, R5 - > UCB. ; No I/O to Rewinding Tape Unit.8DQD: MOV DQDUCB(R3),R5 ; > UCB - restart Dequd request.. BIT #M.RWD,U.CW2(R5) ; Tape Unit Rewinding ? BEQ 50$ ; IF EQ, No.o" MTPS #PR5 ; INHIBIT INTERRUPTS.? MOVB #C1.IE,MFCS1(R2) ;;; Allow further interrupts on this RHW2 MOVB #60.,S.STS(R4) ;;; Allow up to 60 checks at1 MOVB #2,S.CTM(R4) ;;; 2 sec intervals for RWD.s" MTPS #PR0 ;;; ALLOW INTERRUPTS.0 BR MFINI ; Service other controller requests.; I/O - only if TM78 Ready.-50$:,; MOV U.SUB(R5),MFCS2(R2) ; Select TM UNIT.) TST MFCR(R2) ; TM78 Ready for command ?t BMI ACTIVE ; IF MI, Yes.W> MOVB S.ITM(R4),S.CTM(R4) ; Check TM78 ready after 2 seconds.1 BR MFINI ; Service other controller requests.C4ACTIVE: PUSH DQDIO(R3) ; Save DQD > preprocessing.1 CLR DQDIO(R3) ; Request about to become active.  POP R0 ; R0 >  TST (R0)+ ; current requestP TST (R0)+ ; I/O Command. ) MOV R0,IOFCT(R3) 00qqmkTADATADATADATADATADATA ; IOFCT > I/O Command.. INC INPROG(R3) ; I/O Active." BIT #DT,-2(R0) ; Data Transfer ? BNE DTIO ; IF NE, Yes.( JMP NDTIO ; Initiate NDT I/O. .PAGE& .SBTTL INITIATE DATA (I/O) SERVICING ;+&; R0 > FTBL I/O Command, R2 - CSR, ;; R3 - Controller Index (S.CON), R4 - > SCB, R5 - > UCB.E;-)DTIO: INC DTCMD(R3) ; Data transfer I/O.C- MOVB U.UNIT(R5),-(SP) ; Tape Unit selection. 3 BIC #^C<3>,(SP) ; Perhaps won't suppress retries.P1 BITB #US.SUP,U.STS(R5) ; Inhibit Error Recovery?  BNE 9$ ; IF NE, Yes./ MOV #RDRTRY,RTTBL(R3) ; Read recovery retries.;, MOV IOFCT(R3),RDOPCM(R3) ; > Read Opposite 0 ADD #LNGHT+2,RDOPCM(R3) ; Function preprocess." BIT #WRT,-2(R0) ; Write request? BEQ 10$ ; IF EQ, No. 9 BIT #M.IWR,U.CW2(R5) ; Inhibit write retries (long gap)?, BNE 8$ ; IF NE, Yes.O3 MOV #WTRTRY,RTTBL(R3) ; Set up for Write recovery.R BR 10$ ; . . Cont. (8$: CLR RTTBL(R3) ; No retries allowed./9$: BIS #DM.SER,(SP) ; Inhibit error recovery.n910$: MOVB RTTBL(R3),RTTBL+1(R3) ; Error Recovery Retries.T' MOV #DTIOGO,IORTN(R3) ; Restart I/O @.M/ POP MFDM(R2) ; Data transfer for Tape Unit x.#3 .IF DF M$$EXT ; 22 Bit Extnd Addr (11/70, 11/44).2 BIT #DV.MBC,U.CW1(R5) ; RH11 ?; BNE 20$ ; IF NE, No - RH70.& CALL $STMAP ; Setup UNIBUS mapping. ASL U.BUF(R5) ; Setup A17,A16# ASL U.BUF(R5) ; address bitst ASL U.BUF(R5) ; into  ASL U.BUF(R5) ; HI Byte.N) CALL $MPUBM ; Setup UMRs for transfer. % MOV S.CSR(R4),R2 ; Restore R2 - CSRB20$: .ENDC ;M$$EXTr .IF NDF M$$EXTs% .IF DF M$$MGE ; 18 Bit Addressing.O MOV R5,R1 ; R1 >D ADD #U.BUF,R1 ; U.BUF. ROL (R1) ; Setup A17,A16t ROL (R1) ; address bits ROL (R1) ; into ROL (R1) ; HI Byte.I .ENDC ;M$$MGE .ENDC ;M$$EXTS& MOV IOFCT(R3),R0 ; R0 > I/O Command.* BIT #REV,-2(R0) ; Read Reverse request ? BEQ 30$ ; IF EQ, No.n6 SUB #2*LNGHT-2,RDOPCM(R3) ; > Read Opposite Function./30$: CALL SETUP ; Setup Data trfr parameters.s; -- DTIOGO -- Start DATA I/OX;G; DTCNT, DTADR1, DTADR2, R0 - > FTBL I/O Command: Normal.or.Opposite, F; R2 - CSR, R3 - Controller Index (S.CON), R4 - > SCB, R5 - > UCB.;18DTIOGO: MOV DTCNT(R3),MFBC(R2) ; Data byte count for TM. MOV MFBC(R2),MFWC(R2) ; and N INC MFWC(R2) ; Word R CLC ; countm ROR MFWC(R2) ; for RH.R$ NEG MFWC(R2) ; (2's complement).? MOV DTADR2(R3),MFBA(R2) ; Transfer address - 16 lo order bits.:1 MOVB (R0),DTADR1(R3) ; I/O code - 6250BPI mode.-' BIT #M.1600,U.CW2(R5) ; 1600BPI mode ?  BEQ 10$ ; IF EQ, No.T1 MOVB 1(R0),DTADR1(R3) ; I/O code - 1600BPI mode. 110$: BITB #US.ABO,U.STS(R5) ; Abort I/O request ? .ENABL LSBT BEQ 15$ ; IF EQ, No.R3ABOEND: MOV #IE.ABO&377,R0 ; Aborting I/O request.;"ENDIT: SUBR ENDRQS ; End request/ JMP MFINI ; and service other I/O requests. 915$: BIC #M.SER,U.CW2(R5) ; Assume Tape Unit selectable.F .DSABL LSBs! MTPS #PR5 ; INHIBIT INTERRUPTSV ; Start I/O; .IF DF M$$EXT 6 BIT #DV.MBC,U.CW1(R5) ;;; RH70 (MASSBUS Controller) ? BEQ 20$ ;;; IF EQ, No. / MOVB DTADR1+1(R3),MFBAE(R2) ;;; Start transfer:) MOVB DTADR1(R3),MFCS1(R2) ;;; on 11/70.  BR 22$ ;;; . . cont . .IFTF;20$: MOV DTADR1(R3),MFCS1(R2) ;;; Start transfer on others.22$: .ENDC ;M$$EXT- MOVB 2(R0),S.CTM(R4) ;;; Start I/O Timeout.  MTPS #0 ;;; ALLOW INTERRUPTS.( RETURN ; EXIT while I/O in progress. .PAGE( .SBTTL INITIATE NONDATA (I/O) SERVICING;+&; Initiate Non Data (I/O) servicing:;M%; R0 - > FTBL I/O Command, R2 - CSR,e;; R3 - Controller Index (S.CON), R4 - > SCB, R5 - > UCB.);-4NDTIO: MOV #NDTCMD,IORTN(R3) ; Restart I/O return @.A MOV U.BUF(R5),SPCYET(R3) ; Space Count .or. Tape Characteristics(, CLR U.BUF(R5) ; Init for NDT Command word. TST (R0) ; Spacing Request? BEQ SPACE ; IF EQ, Yes.4; -- STRTIO -- Start NON DATA (not SPACING) requests;l'; U.BUF+1(R5) - Command request count.A;N&; R0 - > FTBL I/O Command, R2 - CSR,;; R3 - Controller Index (S.CON), R00qq4nbl4 - > SCB, R5 - > UCB.2;C-NDTCMD: MOVB (R0),U.BUF(R5) ; 6250BPI Mode.C) BIT #M.1600,U.CW2(R5) ; 1600BPI Command?I BEQ 10$ ; IF EQ, No.t9 MOVB 1(R0),U.BUF(R5) ; NDT Command Word - 1600BPI Mode.h010$: BITB #US.ABO,U.STS(R5) ; Abort I/O request? BNE ABOEND ; IF NE, Yes.c TST (R0)+ ; > Timeouts.! MTPS #PR5 ; INHIBIT INTERRUPTSN ; Start I/OI1 MOV #C1.TRE,MFCS1(R2) ;;; Make sure no previous c7 BIC #C1.TRE,MFCS1(R2) ;;; transfer error holds us up. ! MOVB U.UNIT(R5),R3 ;;; Prepare  ASL R3 ;;; for MFNDx ADD R2,R3 ;;; accessing.5 MOV U.BUF(R5),MFND0(R3) ;;; Start Non Data Transfer.d8 MOVB #C1.IE,MFCS1(R2) ;;; Allow interrupts on this RH.$ MOVB (R0)+,S.CTM(R4) ;;; Start I/O$ MOVB (R0)+,S.STS(R4) ;;; Timeout. MTPS #0 ;;; ALLOW INTERRUPTS( RETURN ; EXIT While I/O in progress. H .ENABL LSBT)SPACE: TST SPCYET(R3) ; Space count =0 ?) BNE 10$ ; IF NE, No.s" CLR INPROG(R3) ; No active I/O. & MOV #IS.SUC&377,R0 ; Successful end,$ CLR R1 ; no blocks/files spaced, BR ENDIT ; End request.; Handle Spacing Count.R010$: CLR R1 ; R1 - Space Dir; EQ-FWD, NEQ-REV." TST SPCYET(R3) ; Space Forward ? BPL 20$ ; IF PL, Yes.' NEG SPCYET(R3) ; Count adjustment and. INC R1 ; REV indication.; Space Files/Block's ?,20$: CMP #IO.SPF,-4(R0) ; Space via TMK's ? BEQ 40$ ; IF EQ, Yes.!; Determine Space Blocks Command.B, MOV #SPFREC,IOFCT(R3) ; > Space FWD blocks. TST R1 ; Space records FWD ?  BEQ 30$ ; IF EQ, Yes., MOV #SPRREC,IOFCT(R3) ; > Space REV blocks.; Setup NDT Command.030$: CLR SPACED(R3) ; No Blks/TMK's yet spaced.6 MOVB @IOFCT(R3),U.BUF(R5) ; Set up NDT Function Code.3SPCAGN: MOV #255.,R1 ; R1 - Spacing command count.m/ CMP SPCYET(R3),R1 ; Space GT 255 Blcks/TMKs ?  BHI 35$ ; IF HI, Yes.. MOV SPCYET(R3),R1 ; Space LT 255 Blcks/TMKs.'35$: SUB R1,SPCYET(R3) ; To yet space.s; MOVB R1,U.BUF+1(R5) ; Set up NDT command (spacing) count.T- MOV R1,SPCNG(R3) ; Current I/O space count.Q4 MOV IOFCT(R3),R0 ; R0 > Spacing Subfunction Table./ MOV #NDTCMD,IORTN(R3) ; Restart spacing I/O @.  BR NDTCMD ; Now issue I/O.I ; Determine Space Files Command.-40$: MOV #SPRTMK,IOFCT(R3) ; > Space REV TMK.g TST R1 ; REV TMK ?S BNE 30$ ; IF NE, Yes.) MOV #SPFTMK,IOFCT(R3) ; > Space FWD TMK.) BITB #US.LAB,U.STS(R5) ; Labelled tape ?K BNE 30$ ; IF NE, Yes.. MOV #SPLTMK,IOFCT(R3) ; > Space FWD TMK/LEOT. BR 30$ ; . . cont . u .DSABL LSB, .PAGE .SBTTL CANCEL I/O OPERATION;+; -- MFCAN -- ;R7; Called for QIO IO.KIL request (UC.KIL set in U.CTL) R0; .or. EXEC Task rundown (US.BSY set in U.STS).;I&; Active I/O ends in one of two ways:;; 1. Normal end - Data transfers are allowed to complete. ); Error recovery attempts are aborted.TI; 2. Abnormal end - Other requests are aborted via the Timeout routine.KE; The driver attempts to leave the hardware in a controlled state.O;-; Register configuration upon entry to MFCAN:E6; R0 - > Current I/O Packet. R3 - RH Controller Index.&; R1 - > Current Task TCB. R4 - > SCB.; R5 - > UCB. ;-;MFCAN: CMP I.TCB(R0),R1 ;;; Active I/O owned by requestor?n BNE 10$ ;;; IF NE, No. + BISB #US.ABO,U.STS(R5) ;;; End active I/O. 10$: RETURN  .SBTTL POWERFAIL ENTRY POINTt;+ ; -- MFPWF --a;nB; Called due to: 1. System power failure and subsequent recovery.; 2. System Bootstrapped.; 3. Driver loaded.;eN; A. US.PWF set: indicates that normal QIO functions are disallowed with the :; exception of IO.RWD, IO.RWU, IO.SMO, IO.SEC, and IO.STC.J; *** Successful IO.RWD, IO.RWU and IO.SMO reset US.PWF and allow normal ; operations to resume.B:; B. Reset controller/devices/U.CW2 and allow Interrupts.;e-; Register configuration upon entry to MFPWF:R; R3 - RH Controller index ; R4 - > SCB ; R5 - > UCB;-8MFPWF: BISB #US.PWF,U.STS(R5) ; Normal QIO's dissalowed.& MOV S.CSR(R4),R2 ; R2 > Device REGS.2 CLR U.CW2(R5) ; Reset Tape Characteristics word.6 BIS #C2.CLR,MFCS2(R2) ; Reset controlle00rqmkTADATADATADATADATADATAr and devices.> MOVB #C1.IE,MFCS1(R2) ; Allow Interrupts on this controller.8 MOV U.DCB(R5),DCBPTR ; DCB > - Driver restart fallback.7 MOV R5,CNTBL(R3) ; UCB > - Unsolicited Intrpt Hndlng.w RETURN  .PAGE .SBTTL TIMEOUT ENTRY POINTn;+ ; -- MFOUT --3;R; Called due to S.CTM expiring:;5; 1. Active I/O - :O; a. IF US.ABO set - End request (no recovery), if possible end physical I/O.i*; b. IF Timeout (S.STS=0) - End request.; 2. Request DQD - 5; a. DQD, no I/O issued; M.RWD .or. TM78 not ready.V<; b. I/O issued; TU78 Offline (Sel Err) .or. TM78 cleared.;U-; Register configuration upon entry to MFOUT:c3; R0 = IE.DNR, Device Not Ready, R2 = CSR (S.CSR),n:; R3 - RH Cntrlr Index (S.CON), R4 - > SCB, R5 - > UCB.;-5MFOUT: DECB S.STS(R4) ;;; One less Timeout Subcycle. / BITB #US.ABO,U.STS(R5) ;;; Abort I/O request ?q BEQ 10$ ;;; IF EQ, No.i, MOV #IE.ABO&377,R0 ;;; Request end status.35$: BIC #C1.IE,@S.CSR(R4) ;;; Disable TM Interrupt.D MTPS #0 ;;; Allow interrupts.%7$: SUBR ENDRQS ; End I/O request.l$ CALL CLRTM ; Abort physical I/O. RETURNr*10$: TST INPROG(R3) ;;; I/O In Progress ? BEQ 20$ ;;; IF EQ, No.2- TSTB S.STS(R4) ;;; Timeout Subcycles left ?)) BNE 15$ ;;; IF NE, Yes. Restart Timer.D112$: .IF DF E$$DVC ;;; If Error Logging Device. " PUSH S.RCNT(R5) ;;; Error log - ? MOV #TMREGS,S.RCNT(R5) ;;; Dev Reg's, no MFBAE/MFCS3/XND SNS.e& CALL $DTOER ;;; Log Device Timeout.8 POP S.RCNT(R5) ; Normally Log Dev Reg's and Extnd Sns. .ENDC BR 7$ ; End request.r; Restart TIMER.115$: MOVB S.ITM(R4),S.CTM(R4) ;;; Restart timer.O" RETURN ;;; Until next Timeout.7; DQD Request. Could not previously issue I/O request. l120$: TSTB S.STS(R4) ;;; Timeout Subcycles left ?) BNE 15$ ;;; IF NE, Yes. Restart Timer.e; DQD Request. Timeout.;1 BIT #M.RWD,U.CW2(R5) ;;; Tape Drive Rewinding ?s, BNE 12$ ;;; IF NE, Yes - End DQD request..; MOV U.SUB(R5),MFCS2(R2) ;;; Select TM UNIT.+ TST MFCR(R2) ;;; TM78 Ready for Command ? + BPL 12$ ;;; IF PL, No - End DQD request.5 MTPS #0 ; Allow interrupts.R& JMP DQD ; Servvice pending request. .PAGE .SBTTL INTERRUPT SERVICINGn;+7; $MFINT - TM78/TU78 Mag Tape Interrupt Service Routine;;-MFINT:<; INTSE$ MF,PR5,T$$M78 ;;; Map ISR, Set Processor Priority.;u$; R5 > UCB. R4= RH Controller Index.;; MOV U.SCB(R5),R4 ;;; R4 > SCB18 BICB #C1.IE,@S.CSR(R4) ;;; No IE in TM CS1 pseudo reg.4 MOVB S.CON(R4),R4 ;;; Restore RH Controller Index.5 CALL $FORK ;;; Become Interuptable System Process.D;+=; Interrupt servicing first handles Data Transfer interrupts E; - followed by servicing all Non Data Transfer Attentions present.T;/>; A data transfer request defers non data transfer interrupts &; pending data transfer completion. ;r9; The TM78 can generate solicited/unsolicited interrupts:;VO; 1.Solicited interrupts occur as a result of Data/Non Data Transfer Requests. ;.O; 2.Unsolicited interrupts result from tape units coming on line and hardware II; failure. If MFCS1 C1.IE is enabled, unsolicited interrupts can occur.T;-( MOV R4,R3 ; R3 - RH Controller Index.- MOV U.SCB(R5),R4 ; R4 - > SCB. R5 - > UCB. MOV S.CSR(R4),R2 ; R2=CSR.! TST DTCMD(R3) ; Data Transfer ?  BEQ 10$ ; IF EQ, No.e0 SUBR DTINT ; Service Data Transfer Interrupt.+10$: TST MFAS(R2) ; Attention Interrupts ?t BEQ 20$ ; IF EQ, No.r5 SUBR NDINT ; Service Non Data Transfer Interrupts.s&20$: TST INPROG(R3) ; I/O yet active? BEQ 30$ ; IF NE, No.d$ MOV IOFCT(R3),R0 ; R0 > active I/O TST (R0)+ ; timeouts.! MOVB (R0)+,S.CTM(R4) ; Re-start;& MOVB (R0)+,S.ITM(R4) ; I/O timeout., MOVB #C1.IE,MFCS1(R2) ; Wait for interrupt. RETURN;630$: TST DQDIO(R3) ; DQD request to be yet completed? BNE 40$ ; IF EQ, Yes.2 JMP MFINI ; Service any other pending requests.040$: JMP DQD ; Service previously DQD request. .PAGE .SBTTL NDT INTERRUPT SERVICINGT;+(; Non Data Transfer Interrupt Servicing.;y9; Service00 rq4nbl active ATTNS - both solicited and unsolicited.R; K; The ATTN bit position identifies the TM Unit, Register MFNDI identifies M*; NDT Interrupt Code/Tape Unit (Attn Adr).;.D; If unsolicited: appropriate measures are taken and ATTN is reset.; 4; If solicited: verify interrupt an expected value.<; Unexpected values end the request and driver dependencies.'; If expected, call I/O ending routine.; EI; Control is returned to the ATTN scan routine to service active ATTN's.c;-1 .BLKW T$$M78 ; Reserve space - Return address.s6NDINT: SUBR FNDUNT ; Obtain a TM Unit, ATTN pending.$ BCC 10$ ; IF CC, Found a TM Unit." RTRN NDINT ; No further ATTN's.,10$: SUBR UNSLCT ; Unsolicited Interrupt ?% BCS NDINT ; IF CS, Yes. Any more ?' SUBR VALNDI ; Reasonable Interrupt ?c BCC 20$ ; IF CC, Yes. SUBR LOGERR ; Log Error.v7 MOV #IE.FHE&377,R0 ; Indicate Unrecoverable Situation" SUBR ENDRQS ; and End Request./ RTRN NDINT ; Service pending NDT Interrupts.-120$: CALL RTRNCD ; Set up I/O Return Code - R0.s+ MOV IOFCT(R3),R1 ; R1 > I/O Command code.T9 BIT #M.RWD,U.CW2(R5) ; Perhaps previous RWD operation ?N BEQ 30$ ; IF EQ, No.2 MOV #IORWD+CMDGCR,R1 ; R1 > I/O RWD command code.;30$: ADD #ISRSRV-CMDGCR,R1 ; R1 > I/O Interrupt servicing.  MOV (R1),R1 ; > and Service  MOV #.+10,-2(R1) ; NDT I/O  JMP (R1) ; Requests.I# BR NDINT ; Service other ATTN's.B .PAGE  .SBTTL NDT INTRPT ROUTINESD;+; -- FNDUNT --; F; Subroutine scans MFAS L <- R, to find first active ATTN, TM Unit #. ;V; TM Unit (ATTN) Found - CC:n;; Sets up ATTN reset mask (RSTATN(R3)), Selects TM Unit.t; !; TM Unit (ATTN) Not Found - CS.#;W; R1 - Modified.I;-1 .BLKW T$$M78 ; Reserve space - Return Address./,FNDUNT: MOV #1,R1 ; R1- HI Byte,TM UNIT#. ! ; LO Byte,MFAS Rst Mask. % MOV MFAS(R2),-(SP) ; (SP) - ATTN's,B5 MOVB #8.,1(SP) ; 1(SP) - # of ATTN's to be checked.D10$: ASRB (SP) ; This ATTN ? BCS 20$ ; IF CS, Yes." ASLB R1 ; Update MFAS Rst Mask, SWAB R1 ; and  INCB R1 ; next  SWAB R1 ; UNIT.s' DECB 1(SP) ; One less ATTN to check.s2 BNE 10$ ; IF NE, Check for other ATTN's active. SEC ; No TM UNIT found. BR 30$$920$: MOVB R1,RSTATN(R3) ; NDT Command - ATTN Reset Mask.  SWAB R1 ; Select## MOVB R1,MFCS2(R2) ; and remember # MOVB R1,TMUNIT(R3) ; TM UNIT #.s CLC ; TM UNIT found.%30$: POP ; Return Stack as found.A RTRN FNDUNT .PAGE ?;+; -- UNSLCT --;eG; Unsolicited ATTN's (NDT INTRPT) occur due to tape units coming ONLINE ; .or. equipment failure.T;; Unsolicited ATTN - CS.; Solicited ATTN - CC.;;#; ONLINE interrupts are dismissed..;S?; Equipment Failures (NDT INTRPT's #32.or.#34) are logged and ;2; their TM's reset (no further I/O may proceed).; /; R0 - modified, R4 - cleared if unsolicited.U;-1 .BLKW T$$M78 ; Reserve space - Return Address.P*UNSLCT: MOV MFNDI(R2),R0 ; R0 - [MFNDI];  MOV R0,INTRPT(R3) ; NDT # BIC #^C<1477>,R0 ; INTRPT code.R SWAB R0 ; Remembern# MOVB R0,TMUNIT+1(R3) ; TU Unti#.f SWAB R0 ; n& CMP #17,R0 ; Tape Unit put Online ? BNE 10$ ; IF NE, No.r4 MOV RSTATN(R3),MFAS(R2) ; Unit Online - Reset ATTN.1 BIC #M.RWD,U.CW2(R5) ; Any previous Rewind over.s#7$: SEC ; Unsolicited interrupt. BR 20$ 610$: CMP #32,R0 ; TM Fault B (TM Detected Failure) ? BEQ 15$ ; IF EQ, Yes.4 CMP #34,R0 ; MB Fault (MASSBUS Cntrl Bus Fault) ? BNE 19$ ; IF NE, No.)#15$: TST INPROG(R3) ; Active I/O ?T BNE 17$ ; IF NE, Yes." CLR R4 ; Unsolicited interrupt.-17$: SUBR LOGERR ; Log the Error, Clear TM.a# TST R4 ; Unsolicited interrupt ?  BEQ 7$ ; IF EQ, Yes.,"19$: CLC ; Solicited interrupt.20$: RTRN UNSLCT .PAGE n;+; -- VALNDI --; 8; Validate Non Data Interrupts. Obtain UCB/SCB for ATTN.;#:; 1. If not in configuration, not INPROG or Tape Unit not 5; previously set into Rewind - will take no action. >; Reset the ATTN and continue scanning for additional ATTN's.;/00rqmkTADATADATADATADATADATAN; This happens when OS systems moved about without correcting the system data N; bases or by adding on equipment that data bases have not been generated for.; H; 2. Validate NDT Interrupt for I/O INPROG or Tape Unit in previous RWD.;n ; INPUTS - ; R2 - CSR, R3 - RH CNTL INDX.;e9; OUTPUTS - CS, INVALID. CC, Valid. Registers preserved.u;-1 .BLKW T$$M78 ; Reserve space - Return Address. "VALNDI: MOV DCBPTR,R5 ; R5 > DCB.E PUSH ; UCB lenght,HI/LO UCB unit #s on Stack " MOV D.UCB(R5),R5 ; R5 > 1st UCB.(5$: CMP R5,U.RED(R5) ; UCB Redirected ? BNE 20$ ; IF NE, Yes. TST INPROG(R3) ; I/O Active ?b BEQ 10$ ; IF EQ, No. 1 CMP R5,CNTBL(R3) ; UCB same as for I/O INPROG ?i BEQ 40$ ; IF EQ, Yes.510$: BIT #M.RWD,U.CW2(R5) ; Tape Unit prev set RWD ?T BEQ 20$ ; IF EQ, No.d0 CMPB U.UNIT(R5),TMUNIT+1(R3) ; Same Tape Unit ? BNE 20$ ; IF NE, No.e,; CMPB U.SUB(R5),TMUNIT(R3) ; Same TM UNIT ? BNE 20$ ; IF NE, No.  MOV U.SCB(R5),R4 ; R4 > SCB. CMPB S.CON(R4),R3 ; Same RH ?  BEQ 42$ ; IF EQ, Yes."20$: CMPB (SP),1(SP) ; Last UCB ? BEQ 30$ ; IF EQ, Yes. ADD 2(SP),R5 ; R5 > next UCB.$$ INCB (SP) ; LO # - Current UCB #.* BR 5$ ; Keep Checking rest of MF UCB's.*30$: MOV RSTATN(R3),MFAS(R2) ; Reset ATTN,! SEC ; Unreasonable Interrupt.; BR 50$ "40$: MOV U.SCB(R5),R4 ; R4 > SCB.,42$: CALL VALIDT ; Validate NDT Interrupt.,50$: POP <,> ; Maintain stack integrity. RTRN VALNDI .PAGE M;+; -- VALIDT -- ;CI; Validate INPROG or prev RWD request INTRPT Code - defined and in range.S;1,; Valid: CC - Described in INTCD1 or INTCD2.;D; Invalid, CS. ;-,VALIDT: PUSH ; Reference values.& MOV IOFCT(R3),R1 ; R1 > I/O command.( CMP R5,CNTBL(R3) ; INPROG Validation ? BEQ 10$ ; IF EQ, Yes.- MOV #IORWD+CMDGCR,R1 ; R1 > RWD I/O command.R110$: ADD #SVALI1,R1 ; R1 > 1st validation mask. n+ MOVB INTRPT(R3),R0 ; R0 - Interrupt Code.n. CMPB R0,#35 ; Interrupt code out of range ? BGE 30$ ; IF GE, Yes.- CLR INTCD1(R3) ; Initialize 0-17 and 20-34 n. CLR INTCD2(R3) ; interrupt bit descriptors.6 MOV #INTCD1,R2 ; R2 > Interrupt 0-17 bit descriptor.& CMPB R0,#17 ; Interrupt 0-17 range? BLOS 20$ ; IF BLOS, Yes.n7 MOV #INTCD2,R2 ; R2 > Interrupt 20-34 bit descriptor.;3 BIC #20,R0 ; Interrupt code in binary/bit range.m( TST (R1)+ ; R1 > 2nd validation mask.620$: ADD R3,R2 ; R2 > correct Intrpt bit descriptor." ASL R0 ; Convert Interrupt Code ADD #$BTMSK,R0 ; TO MOV (R0),R0 ; Bit Mask Value.' MOV R0,(R2) ; Current Intrpt code - I ; per Bit descrition." BIT R0,(R1) ; Valid Interrupt ? BEQ 30$ ; IF EQ, No.r( CLC ; Indicate Interrupt Code Valid.025$: POP ; Maintain stack integrity. RETURN .30$: SEC ; Indicate interrupt code Invalid. BR 25$  .PAGE .SBTTL NDT INTRPT SERVICING;+; Non Data Interrupt Servicing.A;-;+*; Sense Tape Charecteristics - Completion.:; Result of servicing IO.SMO, IO.STC and IO.SEC requests.;0 ; INPUTS -7; R0 - LO BYTE; I/O Request Return Code HI BYTE; 0's. /; R2 - CSR. R3 - RH CNTL INDX. R5 - > UCB.I;r ; OUTPUTS -37; R2 - CSR, R3 - RH CNTL INDX, R4 - > SCB, R5 - > UCB.i;-1 .BLKW T$$M78 ; Reserve space - Return Address.T'SNSISR: CMPB #IS.SUC,R0 ; Successful ?c BEQ 5$ ; IF EQ, Yes.. SUBR LOGERR ; Log Error.I- BIS #M.SER,U.CW2(R5) ; Not avalable for use.-3$: MOV #IE.FHE&377,R0 ; Hardware problems. . BR 25$ ; End request.?5$: BIC #NWBTS1,U.CW2(R5) ; Update BOT,EOT,HWL,SER,1600 status.;- CLR R1 ; Temp BOT,EOT,HWL,SER,1600 status. 1 PUSH MFDS(R2) ; Local copy - Tape Drive Status.U BIT #DS.RDY,(SP) ; Ready ? BNE 10$ ; IF NE, Yes.# BIS #M.SER,R1 ; Not avail for usee BR 20$c10$: BIT #DS.BOT,(SP) ; BOT ? BEQ 12$ ; IF EQ, No.  BIS #M.BOT,R1 ; Status- BOT.12$: BIT #DS.EOT,(SP) ; EOT ? BEQ 14$ ; IF EQ, No.v BIS #M.EOT,R1 ; Status- EOT.'14$: BIT #DS.FPT,(SP) ; Write Locked ?  BEQ 16$ ; IF EQ, No.I' BIS #M.HWL,R1 ; Status- 00rq4nblWrite locked.S*16$: BIT #DS.PE,(SP) ; Tape Unit 1600BPI? BEQ 20$ ; IF EQ, No.S# BIS #M.1600,R1 ; Status- 1600BPI. /20$: BIS R1,U.CW2(R5) ; Update Tape Char word.  POP ; Maintain Stack.,+ MOV IOFCT(R3),R1 ; R1 > I/O Command code.T' CMP #IO.SEC,-4(R1) ; IO.SEC request ?Q BNE 30$ ; IF NE, No. 925$: MOV U.CW2(R5),R1 ; 2nd I/O Status Word - Tape Char I SUBR ENDRQS ; End Request.t3 RTRN SNSISR ; Return to NDT Interrupt Servicing.; IO.SMO/IO.STC - F30$: BIC #M.SWL!M.IWR,U.CW2(R5) ; Perhaps - No Soft Write Lock, IWR. 0 PUSH TPCHAR(R3) ; Setup - Software write lock< BIC #^C,(SP) ; and Extended gap write control& BIS (SP)+,U.CW2(R5) ; per request.%35$: MOV U.CW2(R5),-(SP) ; (SP)+2 > o1 BIC #^C,(SP) ; Setup - density control.  MOV TPCHAR(R3),-(SP) ; (SP) >3 BIC #^C,(SP) ; Request - density control.r1 CMP (SP),+2(SP) ; Setup/Request densities same?; BEQ 37$ ; IF EQ, Yes.& BIT #M.BOT,U.CW2(R5) ; TU78 at BOT ?. BEQ 40$ ; IF EQ, No - can't change density., BIC #M.1600,U.CW2(R5) ; Set density control$ BIS (SP),U.CW2(R5) ; per request. 37$: POP <,> ; Restore stack. CMP #IO.SMO,-4(R1) ; IO.STC ?  BNE 25$ ; IF NE, Yes.4 BIT #M.BOT,U.CW2(R5) ; IO.SMO only succeeds at BOT. BEQ 3$ ; IF EQ, failure.9 BICB #US.PWF,U.STS(R5) ; Reset Power Failed Indication.q BR 25$ ; End Request. 40$: POP <,> ; Restore stack.0 BR 3$ ; Not BOT, Setup/Request densities NEQ. ,;+!; Completed Space Tape Operation:;B; FWD/REV via TMKS, FWD to LEOT, FWD/REV via Blocks (Records).;y ; INPUTS -7; R0 - LO BYTE; I/O Request Return Code HI BYTE; 0's.t/; R2 - CSR. R3 - RH CNTL INDX. R5 - > UCB.E;$ ; OUTPUTS -e7; R2 - CSR, R3 - RH CNTL INDX, R4 - > SCB, R5 - > UCB.;-1 .BLKW T$$M78 ; Reserve space - Return Address.RFSPCISR: BIT #DON!TMK!BOT!LEOT!NAVL!NTEX!NTCP,INTCD1(R3) ; End request? BNE 20$ ; IF NE, Yes.B BIT #NRDY!OFLN,INTCD1(R3) ; Not ready for command or Unit Offl ? BNE 40$ ; IF NE, Yes. SUBR LOGERR ; Log Error.T710$: MOV SPACED(R3),R1 ; Indicate TMK's/Blocks Spaced. !15$: SUBR ENDRQS ; End Request.I218$: RTRN SPCISR ; Service other NDT Interrupts.O; IS.SUC (Normal End). IF Interrupt code is DON, THEN may need to Restart I/O. B!20$: MOVB MFNDI+1(R2),R1 ; R1 = BIC #^C<3>,R1 ; Tape Unit #. ASL R1 ; Make word index -!# ADD R2,R1 ; To access Residual 2+ MOVB MFND0+1(R1),R1 ; TMK/Block Count.)2 BIC #^C<377>,R1 ; R1 = Residual TMK/Block Count.0 BEQ 30$ ; IF EQ, Current req count exhausted.2 SUB R1,SPCNG(R3) ; SPCNG - TMK's/Block's spaced.?30$: ADD SPCNG(R3),SPACED(R3) ; Maintain TMK's/Block's spaced.e, BIT #DON,INTCD1(R3) ; Interrupt code DON ?$ BEQ 10$ ; IF EQ, No. End Request.2 TST SPCYET(R3) ; Further TMK's/Blocks to Space ? BEQ 10$ ; IF EQ, No.  MOV U.SCB(R5),R4 ; R4 > SCB.0 JMP SPCAGN ; Restart I/O to complete request.-40$: CALL MSG ; OFLN .or. NRDY Intrpt Code. BCC 15$ ; IF CC, End request.# BR 18$ ; Service NDT Interrupts.  r;+C; Completed: Write Tape Mark; Erase 3" Gap; Data Security Erase;e); Rewind Tape; Rewind/unload Tape.i;M ; INPUTS -7; R0 - LO BYTE; I/O Request Return Code HI BYTE; 0's.B/; R2 - CSR. R3 - RH CNTL INDX. R5 - > UCB.3;; ; OUTPUTS -s7; R2 - CSR, R3 - RH CNTL INDX, R4 - > SCB, R5 - > UCB.R;-8RWDRET: .BLKW T$$M78 ; Reserve space - Return Address.<RWDISR: BIT #M.RWD,U.CW2(R5) ; Rewind previously initiated ? BEQ 30$ ; IF EQ, No..0 BIC #M.RWD,U.CW2(R5) ; End of previous Rewind.& CMPB #IS.SUC,R0 ; Any complications. BEQ 10$ ; IF EQ, No.e- CLR R4 ; TMFA/TUFA error - Req prev ended.M SUBR LOGERR ; Log it.*10$: MOV RSTATN(R3),MFAS(R2) ; Reset ATTN.5 TST DQDIO(R3) ; Driver need compl prev DQD request? BEQ 20$ ; IF EQ, No.,% JMP DQD ; Service pending request.U220$: RTRN RWDISR ; Service other NDT Attentions.@30$: BIT #DON!NRDY!NAVL!OFLN!NTEX,INTCD1(R3) ; Initiated Rewind? BNE 40$ ; IF NE, No. * BIS #M.RWD,U.CW2(R5) ; Rewind initia00%rqmkTADATADATADATADATADATAted.+40$: MOV RWDRET,WTMRET ; Maintain linkage.i BR WTMISR ; End Request. 8WTMRET: .BLKW T$$M78 ; Reserve space - Return Address.WTMISR:LERGISR:0DSEISR:TBUNLISR: BIT #DON!RWD,INTCD1(R3) ; Clear Power Failed Indication ? BEQ 5$ ; IF EQ, No.9 BICB #US.PWF,U.STS(R5) ; Reset Power Failed Indication.U* BIT #RWD,INTCD1(R3) ; Rewind initiated ? BEQ 5$ ; IF EQ, No.' BIS #M.RWD,U.CW2(R5) ; Rewind started.i=5$: BIT #DON!RWD!EOT!FPT!NAVL!NTEX,INTCD1(R3) ; End Request ?; BNE 10$ ; IF NE, Yes.C BIT #NRDY!OFLN,INTCD1(R3) ; Not ready for command, Unit Offline ? BNE 30$ ; IF NE, Yes. SUBR LOGERR ; Log Error.r!10$: SUBR ENDRQS ; End Request.720$: RTRN WTMISR ; Return to NDT Interrupt Servicing.i-30$: CALL MSG ; OFLN .or. NRDY Intrpt Code.. BCC 10$ ; IF CC, End request.# BR 20$ ; Service NDT interrupts.i .PAGE .SBTTL DT INTERRUPT SERVICING;+$; Data Transfer Interrupt Servicing.; .; Service Read/Write/Extended Sense Requests.; ; INPUTS -;$; R2 - CSR R3 - RH CNTRL INDX; R4 - > SCB R5 - > UCB; "; XNSCMD - NEQ=XND SNS Operation.;-1 .BLKW T$$M78 ; Reserve space - Return Address. 3DTINT: BIT #C1.TRE,MFCS1(R2) ; DATA Transfer error?  BNE 30$ ; IF NE, Yes.# TST XNSCMD(R3) ; Extended Sense ?Y BEQ 10$ ; IF EQ, No. - JMP XNSISR ; Endup Extended Sense Request. ; Interrupt code= DON.&10$: MOV #IS.SUC&377,R0 ; Success and.12$: MOV U.CNT(R5),R1 ; # bytes transferred.!14$: SUBR ENDRQS ; End request. '16$: RTRN DTINT ; Service NDT ATTN's.R'25$: MOV #IE.FHE&377,R0 ; Fatal Error.S#27$: SUBR LOGERR ; Log the Error.L BR 14$ ; End request.9; Data trnsfr err; C1.TRE = MFCS2 ! Drive Intrpt NOT DON.n(30$: MOV MFCS2(R2),R0 ; R0 - possible , BIC #^C,R0 ; RH Error indication. BEQ 40$ ; IF EQ, no.S; *****uM; FOR NOW - MFCS2 errors will be considered fatal. Will complete this later.; BR 25$a1; Data trnsfr err; C1.TRE = Drive intrpt NOT DON.4=40$: MOV MFDI(R2),INTRPT(R3) ; Dt Fail Cd, DPR, Dt Intrpt Cd.D' CALL VALIDT ; Validate DT Interrupt.F* BCS 25$ ; IF CS, Invalid - End request.- CALL RTRNCD ; Set up I/O Return Code - R0.f2 MOV INTCD1(R3),R1 ; R1 - Intrpt code 0-17 range?0 BEQ 60$ ; IF EQ, No. Intrpt code 20-34 range.7 BIT #FPT!NAVL!NTEX!NTCP,R1 ; End request (no status) ?S BEQ 44$ ; IF EQ, No.F BIT #NTCP,R1 ; Not capable ?$ BNE 27$ ; IF NE, Yes - log error.42$: CLR R1 ; No status, BR 14$ ; end request.N&44$: BIT #TMK,R1 ; TMK (file mark) ? BEQ 46$ ; IF EQ, No. PUSH R0 ; Remember IE.EOF+ MOV IOFCT(R3),R0 ; R0 - I/O Command code.  BIT #REV,-2(R0) ; REV ?S BNE 45$ ; IF NE, Yes. BIS #M.TMK,U.CW2(R5) ; TMK -I45$: POP R0 ; Restore IE.EOF,  BR 42$ ; end request.0"46$: BIT #BOT,R1 ; Rev into BOT? BEQ 48$ ; IF EQ, No.s BIS #M.BOT,U.CW2(R5) ; BOT andB! BR 42$ ; no bytes transfered.2#48$: BIT #EOT,R1 ; EOT on write ?R BEQ 50$ ; IF EQ, No.4 BIS #M.EOT,U.CW2(R5) ; EOT and# BR 12$ ; bytes transfered.-50$: CALL MSG ; OFLN .or. NRDY Intrpt Code.E BCC 14$ ; IF CC, End request.# BR 16$ ; Service NDT interrupts.E460$: MOV INTCD2(R3),R1 ;Interrupt code 20-34 range.! BIT #RLL,R1 ; Data GT request?E BNE 42$ ; IF NE, Yes.0 BIT #UNRD!ERR!BDTP!TMFA!TUFA,R1 ; Fatal error ?$ BNE 27$ ; IF NE, Yes - log error.# BIT #EOTE,R1 ; EOT error (write)?e BEQ 64$ ; IF EQ, No.T$ BIS #M.EOT,U.CW2(R5) ; Indicate EOT BR 42$ ; End request.(64$: BIT #RLS,R1 ; Data LT requested ? BEQ 70$ ; IF EQ, No. " MOV MFBC(R2),R1 ; Data trasfered BR 14$ ; and End request.s; Error Recovery: RTRY ! RDOP. p70$: SUBR LOGERR ; Log error.I! DECB RTTBL(R3) ; Retries left ?L% BEQ 14$ ; IF EQ, No - end request.;" BIT #RTRY,R1 ; Retry operation ? BNE 75$ ; IF NE, Yes.1 MOV RDOPCM(R3),R0 ; R0 > FTBL I/O Command code.R.75$: CALL SETUP ; Setup transfer parameters./ JMP @IORTN(R3) ; Restart RH - Error recovery.  .PAGE4 .SBTTL Handle 'Not Ready' or 'Offline' return codes;+ ; -- MSG --Q00-rq4nbl;o ; INPUTS -(-; INTCD1(R3) - Interrupt code OFLN .or. NRDY.r;e ; OUTPUT -o; CC - end request.O"; CS - MSG handled Interrupt Code.;;-MSG: 3$; Preprocess OFLN/NRDY Intrpt codes.' BIT #NRDY,INTCD1(R3) ; NRDY interrupt?R BNE 20$ ; IF NE, Yes.; OFLN Interrupt.M+5$: BITB #US.SUP,U.STS(R5) ; IQ.X or UMD's?e& BNE 18$ ; IF NE, Yes - end request.! TST U.ACP(R5) ; Associated ACP?a& BNE 15$ ; IF NE, Yes - end request.#10$: PUSH ; Save REG's.u* MOV #T.NDSE,R0 ; 'Select Error' message. CALL $DVMSG ; Output message." POP ; Restore REG's.! CLR INPROG(R3) ; No I/O active,l( INCB DQDIO+1(R3) ; retry I/O Request.& MOV RSTATN(R3),MFAS(R2) ; Reset ATTN.+ MOVB #1,S.STS(R4) ; Start 15 sec timeout. / MOVB #15.,S.CTM(R4) ; Try again in 15 sec. S)14$: SEC ; MSG handled Interrupt code.; 15$: RETURN 18$: CLC ; End request. BR 15$t&; NRDY Interrupt. Check failure code.20$: BPT ; *** DEBUG *** PUSH R0 ; Save R0.# TST DTCMD(R3) ; Data Request?g BEQ 25$ ; IF EQ, NDT.7 MOVB MFDI+1(R2),R0 ; R0 - DT failure code, 0 and DPR.O BR 26$ ; . . Cont.l?25$: MOVB MFNDI+1(R3),R0 ; R0 - NDT failure code, Tape Unit #.R26$: ASR R0 ; R0 =! ASR R0 ; NDT/DT failure code.o! CMP #2,R0 ; Failure Code = 2?  POP R0 ; Restore R0.S BNE 5$ ; IF NE, No.6; Fatal TM error - Clear TM; Log Error; Retry request./ BR 10$ ; DON'T KNOW IF THAT'S WHERE TO GO !!d .PAGE .SBTTL LOG DEVICE ERRORS ;+; -- LOGERR --;T ; INPUTS - /; R2 - CSR, R3 - RH CNTRL INDX, R5 - > UCB,F5; R4 = EQ - Unsolicited I/O error, R0 - Don't care.6;; R4 - > SCB - Solicited I/O error, R0 - I/O Status Code.e;d+; OUTPUTS - REG's Preserved. R1 Altered.R;-1 .BLKW T$$M78 ; Reserve space - Return Address.d$LOGERR: TST R4 ; Unsolicited I/O ? BEQ 10$ ; IF EQ, Yes.+; IF UMD THEN Pass REG's, Don't Log Error.u# .IF DF D$$IAG ; If Diagnostics -S) CALL MFDGNT ; IF UMD - pass DEV REG's.E BCC 10$ ; IF CC, Not UMD.- INCB INPROG+1(R3) ; UMD - DEV REG's passed.I BR 30$ ; May require TM CLR.  .ENDC ;D$$IAG,; NOT UMD. Solicited/unsolicited I/O Error.-10$: .IF DF E$$DVC ; IF Log Device Errors - 1 MOV #,R1 ; R1 - # Bytes to log.L6 .IF DF M$$EXT ; IF 22 Bit Ext Addr (11/70,11/44) - BIT #DV.MBC,U.CW1(R5) ; RH11 ? BEQ 15$ ; IF EQ, Yes.& ADD #4,R1 ; Log MFBAE/MFCS3 Reg(s).15$: .ENDC ;M$$EXT: PUSH <,R3,R2,R0> ; > Error Packet, Save R3,R2,R0 Reg(s).) CALL $LOGER ; Request an Error Packet.G3 ; IF Got it: R1 > Data Area, R3 > Error packet.e6 MOV R3,+6(SP) ; Assume Got it - Save > Error Packet.C POP ; Restore R0,R2,R3 & > to Error Packet.) BCS 30$ ; IF CS, Not logging an error.o7 INC XNSCMD(R3) ; Extended Sense Request to log error.4 TST R4 ; Solicited I/O ?  BNE 18$ ; IF NE, Yes.4 INCB XNSCMD+1(R3) ; Logging Unsolicited I/O error."18$: PUSH ; Save R2,R0. 5 MOV #TMREGS-2,R0 ; R0 - # Dev Reg(s) thru NDT Regs. /20$: MOV (R2)+,(R1)+ ; Move a Device Register. , DEC R0 ; One less Device Register to log.1 BNE 20$ ; IF NE, log rest of device registers.03 CLR (R1)+ ; Log MFIA reg- 0's (might set C1.CPE)a TST (R2)+ ; R2 > MFCR Reg. MOV (R2),(R1)+ ; Log MFCR Reg. POP ; Restore R0,R2.g5 .IF DF M$$EXT ; IF 22 bit Ext Addr (11/70, 11/44) BIT #DV.MBC,U.CW1(R5) ; RH11 ? BEQ 25$ ; IF EQ, Yes.& MOV MFBAE(R2),(R1)+ ; Move MFBAE Reg& MOV MFCS3(R2),(R1)+ ; Move MFCS3 Reg25$: .ENDC ;M$$EXT .ENDC ;E$$DVCC;IF INTRPT #32.OR.#34 - REQUIRE TM CLR BEFORE ANY I/O MAY COMMENCE..330$: MOVB MFDI(R2),-(SP) ; Data request interrupt.$ TST DTCMD(R3) ; QIO Data request ? BNE 35$ ; IF NE, Yes.3 MOVB MFNDI(R2),(SP) ; Else - Non data interrupt..135$: CMP #32,(SP) ; TM Fault B - requires TM CLR  BEQ 40$ ; IF EQ, Yes.. CMP #34,(SP) ; MB Fault B - requires TM CLR. BNE 50$ ; IF NE, No."40$: TST (SP)+ ; Maintain Stack.- CALL CLRTM ; TM CLR and Unit dependencies.:) TST MFCR(R2) ; TM78 ready for co005rqmkTADATADATADATADATADATAmmand ?R BMI 50$ ; IF MI, Yes.- MOVB S.ITM(R4),S.CTM(R4) ; Check TM78 after F RETURN ; 2 seconds."50$: TST (SP)+ ; Maintain Stack.2; WHAT IS REG STATE IF RETURN HERE AFTER TMOUT ???CONTLG: .IF DF E$$DVC % TST XNSCMD(R3) ; Logging an error ?  BEQ RTNLGR ; IF EQ, No.2 MOV #60.,DTCNT(R3) ; Extended Sense - 60. bytes.2 CLR DTADR1(R3) ; Error Packet in Exec POOL area.A; IS [R1] STILL HERE ? - WHAT IF RETURNED HERE FROM TMOUT ROUTINEd: MOV R1,DTADR2(R3) ; R1 > Dt in Err pckt- after DEV REG's/ MOV #XNDSNS+CMDGCR,R0 ; R0 > FTBL I/O command.h; *** PROBLEM HERE ***" BR RTNLGR ; Handle other ATTNS.:XNSISR: TSTB XNSCMD+1(R3) ; Log error (Unsolicited I/O) ?, BEQ RTNLGR ; IF EQ, No. Return to caller. PUSH ; Save REG's. CLR R2 ; Retry count EQ.M( MOV ERRPKT(R3),R3 ; R3 > Error Packet.& CLR R4 ; R4 .EQ. (Unsolicited I/O).# CALL $FNERL ; End Error Logging.  POP ; Restore REG's.O" CLR XNSCMD(R3) ; Error log done. .ENDC ;E$$DVC=; WILL WE ALWAYS GET BACK TO WHERE ORIGINALLY CALLED FROM ???c)RTNLGR: RTRN LOGERR ; Return to Caller.R .PAGE: .SBTTL ABORT TM78 OPERATION/DRIVER DATA BASE DEPENDENCIES;+ ; -- CLRTM --?;B;; Called by LOERR Interrupt codes #32.or.#34 to reset TM78 %; or by MFOUT to abort physical I/O.Q;; 1. Reset TM78 via TM CLR.<; 2. Update driver data base - for all TU78's on that TM78.); a. Previously started rewinds ended.;;-CLRTM:(; MOVB U.SUB(R5),MFCS2(R2) ; Select and $ BIS #TMCLR,MFCR(R2) ; Reset TM78. PUSH ; Save 'em.D; MOV U.SUB(R5),R0 ; R0 - TM#. % ASL R0 ; Compatibility with S.CON.B MOV DCBPTR,R5 ; R5 > DCB.A# MOV D.UCBL(R5),-(SP) ; UCB lenght,?3 MOV D.UNIT(R5),-(SP) ; HI/LO UCB unit #s on Stack. " MOV D.UCB(R5),R5 ; R5 > 1st UCB.10$:-; CMP U.SUB(R5),R0 ; Same TM Subcontroller ?  BNE 20$ ; IF NE, NO.s) CMPB S.CON(R4),R3 ; Same RH Controler ?r BNE 20$ ; IF NE, No.e% CMP R5,U.RED(R5) ; UCB Redirected ?M BNE 20$ ; IF NE, Yes./ BIC #M.RWD,U.CW2(R5) ; Any previous RWD ended. ( CLRB S.STS(R4) ; No timeout subcycles."20$: CMPB (SP),1(SP) ; Last UCB ? BEQ 30$ ; IF EQ, Yes. ADD 2(SP),R5 ; R5 > next UCB.($ INCB (SP) ; LO # - Current UCB #.. BR 10$ ; Handle other TU's on same RH/TM78.,30$: ADD #4,SP ; Maintain Stack integrity. POP ; Restore 'em.B RETURN  .PAGE .SBTTL SETUP I/O RETURN CODEe;+; -- RTRNCD --;2+; Convert Interrupt to Request Return Code.R;r ; OUTPUT -; *; R0 - LO BYTE: I/O Request Return Code. ;-7RTRNCD: MOVB INTRPT(R3),R0 ; R0 - Interrupt Code only.e, ADD #RTRNTB,R0 ; > I/O Request Return Code$ MOVB (R0),R0 ; and provide it to BIC #^C<377>,R0 ; Caller.L RETURN # .SBTTL SETUP DATA TRFR PARAMETERS ;+ ; -- SETUP --;: ; INPUT - ;M<; R0 > FTBL, I/O command code R3 - Controller Index (S.CON)"; R2 - CSR. R4 > SCB R5 > UCB;C ; OUTPUT -;R@; Correctly setup DTCNT, DTADR1 and DTADR2 for I/O sequencing.; Registers preserved.B;-6SETUP: MOV U.CNT(R5),DTCNT(R3) ; Setup I/O byte count.8 MOV U.BUF(R5),DTADR1(R3) ; I/O request code, Hi @ bits,- MOV U.BUF+2(R5),DTADR2(R3) ; and Lo @ bits.o BIT #REV,-2(R0) ; Read REV ? BEQ 20$ ; IF EQ, No. SUB #2,DTCNT(R3) ; Read REV -S1 ADD DTCNT(R3),DTADR2(R3) ; Adjust Buffer pointer  BCC 10$ ; to end of $ ADCB DTADR1+1(R3) ; Buffer Area.010$: ADD #2,DTCNT(R3) ; Restore Transfer count. 20$: RETURNp .PAGE .SBTTL END I/O REQUESTO;+ ; -- ENDRQS--g;e-; End solicited request: DQD or I/O active. T;) ; INPUT -O;t;; R0 - I/O Request Return Code, R1 - 2nd I/O Status Word,b.; R2 - CSR, R3 - RH CNTRL INDX, R5 - > UCB.;-1 .BLKW T$$M78 ; Reserve space - Return Address.Q%ENDRQS: MOV U.SCB(R5),R4 ; R4 > SCB.S-; If Usermode Diagnostic - Pass Device Reg's.e, .IF DF D$$IAG ; If Usermode Diagnostics -0 TSTB INPROG+1(R3) ; Passed DEV REG's already ? BNE 5$ ; IF NE, Yes.R. CALL MFDGNT ; IF UMD, THEN Pass TM78 REG's. 5$: .ENDCg+; If Logged an Error - Endup Error00=rBr4nbl Logging.v, .IF DF E$$DVC ; If Error Logging Device - u-; BITB #SP.EIP,S.PRI(R4) ; Logged an Error ?S BEQ 10$ ; IF EQ, No.R. MOV RTTBL(R3),R2 ; Setup Error Retry Counts,- MOV ERRPKT(R3),R3 ; > Error Log Packet and 6 CALL $FNERL ; Endup Err Logging for this request. 10$: .ENDC ; End Request.1 BICB #US.ABO,U.STS(R5) ; Clear Abort indication.D CALL $IODON ; End Request. & MOV U.SCB(R5),R4 ; Restore R4, >SCB./ MOVB S.CON(R4),R3 ; R3, RH CNTL INDX.n% MOV S.CSR(R4),R2 ; R2, CSR.  D! TST DTCMD(R3) ; Data transfer ?u BNE 20$ ; IF NE, Yes.* MOV RSTATN(R3),MFAS(R2) ; Reset TM ATTN.20$: CLR DTCMD(R3) ; Cleart" CLR INPROG(R3) ; Driver Request+ CLR XNSCMD(R3) ; Processing indicators.E RTRN ENDRQS .PAGE7 .SBTTL PASS DEV REG'S TO USER MODE DIAGNOSTIC REQUEST B;+; -- MFDGNT --; 2; Determine if User Mode Diagnostic Function Call.; +; If so - Then pass TM78 device registers.V;. ; INPUTS - ; R2 - CSR ; R4 - > SCB.;V ; OUTPUTS - ; Reg(s) preserved.; CC - Not User Mode Diagnostic Function CallF; CS - User Mode Diagnostic Function Call. TM78 device reg(s) passed.;-1MFDGNT: MOV R1,-(SP) ; Save R1. $CRPAS mungs it.C- MOV S.PKT(R4),R1 ; R1 > current I/O packet.R> BITB #IQ.UMD,I.FCN(R1) ; User Mode Diagnostic Function Call? BEQ 20$ ; IF EQ, No.N2 MOVB S.RCNT(R4),-(SP) ; Pass TM78 Device Reg(s)-? MOVB #TMREGS,S.RCNT(R4) ; MFBAE, MFCS3, XND SNS not included. # MOV R1,-(SP) ; Save > I/O packet..6 CMPB #IO.EOF/256.,I.FCN+1(R1) ; QIO Control Code #6 ? BEQ 10$ ; IF EQ, Yes.6 CMPB #IO.RWD/256.,I.FCN+1(R1) ; QIO Control Code #5 ? BEQ 10$ ; IF EQ, Yes.2 CALL $CRPAS ; Pass device reg(s) - Other QIO's. MOV (SP)+,R1 ; Maintain Stack. BR 15$a510$: MOV I.PRM+14(R1),I.PRM+16(R1) ; Setup I/O packet - MOV I.PRM+12(R1),I.PRM+14(R1) ; for $CRPAS. $ CALL $CRPAS ; Pass device reg(s).1 MOV (SP)+,R1 ; Maintain Stack. R1 > I/O packet.N4 MOV I.PRM+14(R1),I.PRM+12(R1) ; Re-setup I/O packet/ MOV I.PRM+16(R1),I.PRM+14(R1) ; after $CRPAS.l@15$: MOVB (SP)+,S.RCNT(R4) ; Restore # REG(s) passed to ERR LOG.- SEC ; User Mode Diagnostic Function Call. 18$: MOV (SP)+,R1 ; Restore R1. RETURN .20$: CLC ; No User Mode Diag Function Call. BR 18$0 .ENDP+14(R1),I.PRM+16(R1) ; Setup I/O packet - MOV I.PRM+12(R1),I.PRM+14(R1) ; for $CRPAS. $ CALL $CRPAS ; Pass device reg(s).1 MOV (SP)+,R1 ; Maintain Stack. R1 > I/O packet.N4 MOV I.PRM+14(R1),I.PRM+12(R1) ; Re-setup I/O packet/ MOV I.PRM+16(R1),I. .TITLE MKDRV .IDENT /02/;; COPYRIGHT (C) 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 02;; J. REED 6-OCT-78;; MODIFIED BY:;; J.E.POLLACK 18-JUL-79;%; EP011 -- ADD CLEAR MEMORY FUNCTION;; B. S. MCCARTHY;'; VARIOUS BUG FIXES THROUGHOUT HISTORY;;;; MKA11 MEMORY DRIVER;; >; THE MKA11 MEMORY DRIVER IS THE INTERFACE BETWEEN HRC AND THE@; MEMORY CSRS. THE ONLY TASK THAT MAY ACCESS THIS DRVIER IS HRC.; ;S; MACRO LIBRARY CALLSU;R# .MCALL HWDDF$,PKTDF$,MKDEF$,UCBDF$R HWDDF$N PKTDF$C MKDEF$E UCBDF$ ; DEFINE UCB OFFSETS;S; BIT ASSIGNMENTSE;- BIT0 = 1I BIT1 = 2J BIT2 = 4L BIT3 = 101 BIT4 = 20O BIT5 = 40 BIT6 = 100 BIT7 = 200B BIT8 = 400U BIT9 = 1000 BIT10 = 2000O BIT11 = 4000  BIT12 = 10000E BIT13 = 20000E BIT14 = 40000N BIT15 = 100000E;C ; CSR OFFSETSA;T CSR1 = 0 ;$ CSR2 = 2 ; SECOND CSR CONTROL WORD R;A; BIT DEFINITIONS FOR MK11 CSRSK;$> PROG = BIT10 ; BOX CONTROL 1 => PROGRAMMMABLE, 0 => MANUAL? ECC = BIT1 ; ECC DISABLE 1 => SINGLE BIT ERRORS DETECTABLE  SIZ = BIT3 ;L4 SEIND = BIT4 ; SBE SEEN 1=> SINGLE BIT ERROR SEEN CONSEL = BIT9 ;& IIN = BIT11 ; INTERNAL INTERLEAVE OGMSK = PROG!777 ; BAS1 = EPT ; BAS2 = OGMSK!PROG ;00ErqmkTADATADATADATADATADATA6 INMSK = BIT12!BIT13!BIT14 ; EXTERNAL INTERLEAVE MASK$ PROPTR = BIT3 ; PROTECTION POINTER;&; OFFSETS INTO THE MK UCB PRIVATE DATA;A? U.KCTR = U.CNT+2 ; COUNTER OF KRBS SCANNED FOR THE CURRENT BOXN< U.STAD = U.CNT+4 ; POINTER TO STATUS WORD OF USER PARAMETER ; BUFFER; U.PWRV = U.CNT+6 ; POWER FAIL VECTOR FOR INTERNAL ROUTINES4: U.CSAV = U.CNT+10 ; START OF 8-WORD CSR SAVE AREA FOR CSR( ; CONTENTS OF ALL PORTS OF THIS BOX.;K;R; MISC. PARAMETERS; ' GRANUL = +10. ; GRANULARITY OF MEMORY!0 ; ONE UNIT OF BASE ADDRESS = 2**GRANUL BYTES GRASHF = 2000 ; 1**GRANUL;F; FUNCTION JUMP TABLER;TFCNLST:' .BYTE IO.ORG/400 ; SET/READ BOX ORIGINN' .BYTE IO.INT/400 ; SET/READ INTERLEAVE+, .BYTE IO.IIN/400 ; READ INTERNAL INTERLEAVE) .BYTE IO.PRG/400 ; SET/READ PROGRAMMABLEL% .BYTE IO.ERR/400 ; READ ERROR STATUS $ .BYTE IO.GRN/400 ; READ GRUNULARITY! .BYTE IO.SIZ/400 ; READ BOX SIZE * .BYTE IO.RSA/400 ; READ ERROR INFORMATION .BYTE IO.CST/400 ; ' .BYTE IO.MSK/400 ; SET DIAGONSTIC MASK .BYTE IO.CLM/400 ; CLEAR MEMORY .BYTE 0 ; TERMINATOR;A; SERVICE ROUTINE ADDRESSES ;L8FCNJMP: .WORD IOORG ; SERVICE ROUTINE ADDRESSES FOR THE% .WORD IOINT ; ABOVE FUNCTIONS CODES+ .WORD IOIIN ;0 .WORD IOPRG ;  .WORD IOERR ;E .WORD IOGRN ;/ .WORD IOSIZ ;L .WORD IORSA ;0 .WORD IOCST ;A .WORD IOMSK ;R .WORD IOCLM ;U;Y;.; ERROR CODE STORAGE BUFFERZ;;Y8ECOD1: .WORD 0 ; STATUS RETURN VALUES FOR I/O OPERATIONECOD2: .WORD 0 ;0; ;G; DEVICE DISPATCH TABLEL;0;  DDT$ MK,M$$K11,,,,T; ;M;TD; IN ADDITION TO THE NORMAL $GTPKT OPERATION, A CALL WILL BE MADE TO@; THE ROUTINE $CFORK. THIS ROUTINE WILL DETERMINE THE PROCESSOR>; THAT IS CURRENTLY EXECUTING THIS ROUTINE AND COMPARE IT WITH=; THE ONE INDICATED IN THE SCB AT S.URM. IF THEY ARE THE SAMECA; THEN A RETURN IS EXECUTED AND PROCESSING CONTINUES. IF THEY ARES?; DIFFERENT THEN $CFORK SAVES THE CONTEXT IN THE FORK BLOCK ANDRA; ENTERS THIS REQUEST INTO THE FORK QUE FOR THE PROPER PROCESSOR.AC; CONTROL IS RETURNED TO THE CALLERS CALLER WITH THE CARRY BIT SET.NB; IN THIS CASE CONTROL WILL RETURN TO THE DRIVER WHICH WILL RETURN; TO THE EXEC.;L;T.PAGET;P;E;R; DRIVER INITALIZE ENTRY POINT;S .ENABLE LSBMKINI: GTPKT$ MK,M$$K11,,,T ;E;B; REGISTER SUMMARY:E;E; R0 = UNDEFINED; R1 = ADDRESS OF I/O PACKET(; R2 = PHYICAL UNIT NUMBER ON CONTROLLERD; R3 = CONTROLLER INDEX IN LIST OF ALL SIMILAR CONTROLLERS IN SYSTEM; R4 = ADDRESS OF SCBO; R5 = ADDRESS OF UCBA; ;T; ; I/O PACKET FORMAT:;S;L; I.LNK: I/O QUEUE THREAD WORDN; I.PRI: REQUEST PRIORITY; I.EFN: EVENT FLAG NUMBERE*; I.TCB: ADDRESS OF TCB OF REQUESTOR TASK9; I.LN2: ADRESS OF LUN2 WORD IN HEADER OF REQUESTOR TASK; I.UCB: ADDRESS OF UCB; I.FCN: I/O FUNCTION CODEM.; I.IOSB: VIRTUAL ADDRESS OF I/O STATUS BLOCK.; +2: RELOCATION BIAS OF I/O STATUS BLOCK>; +4: DISPLACEMENT OF I/O STATUS BLOCK (RELATIVE TO APR6)0; I.AST: VIRTUAL ADDRESS OF AST SERVICE ROUTINE-; I.PRM: RELOCATION BIAS OF FIRST I/O BUFFER&; +2: DISPLACMENT RELATIVE TO APR6; +4: BUFFER SIZE IN BYTES; ;N;L;N;E;;I;B; IN THE USER BUFFER.U;O;A5 CLR U.KCTR(R5) ; CLEAR THE PORT POINTER JUST IN CASER8 MOV U.BUF+2(R5),-(SP) ; SAVE THE PRESENT BUFFER ADDRESS6 MOV (SP),U.STAD(R5) ; SAVE THE INITIAL BUFFER ADDRESS; ADD #10,U.STAD(R5) ; AND ADD THE OFFSET TO THE STATUS WORDL@ MOV U.STAD(R5),U.BUF+2(R5) ; SET UP THE USER BUFFER STATUS WORD3 MOV #IS.SUC,-(SP) ; INDICATE SUCCESS TO START WITHB' MOV (SP),ECOD1 ; INITALIZE FOR SUCCESSA CLR ECOD2 ;T* CALL $PTWRD ; AND PUT IT INTO THE BUFFER3 MOV (SP)+,U.BUF+2(R5) ; RESTORE THE BUFFER ADDRESSO;A;C;U; THEN WE EXIT WITH AN ERROR.T;J; 8 MOV I.TCB(R1),R3 ; GET THE ADDRESS OF THE TASK CONTROL  ; BLOCK INTO R3.; BIT #T3.PRV,T.ST3(R3); TEST THE PRIVILEGE BIT OF THE THIRD5 ; STATUS WORD IN THE TCB) BEQ 3$ ; IF EQUAL THEN THE TASK IS NOT ' ; PRIVILEGED AND WE RETURN00MrBr4nbl AN ERROR# CMP R3,$HRCPT ; WAS IT HRC... ? BEQ 5$ ; YES -- PROCEEDDA3$: MOV #IE.PRI&377,-(SP) ; ELSE WE MOVE THE ERROR ONTO THE STACK " JMP ERROR ; AND REPORT THE ERROR;)+; SELECT SERVICE ROUTINE FROM FUNCTION CODE ;N5$:T3 MOV #FCNLST,R0 ; POINT TO VECTOR OF FUNCTION CODES 6$:S8 CMPB I.FCN+1(R1),(R0) ; IS THIS THE REQUESTED FUNCTION? BEQ 7$ ; BR IF YES/ TSTB (R0)+ ; HAVE WE SEEN THE TERMINATOR YET?E BNE 6$ ; BR IF NOT2 MOV #IE.IFC&377,-(SP) ; SET ILLEGAL FUNCTION CODE JMP ERROR ; TAKE ERROR RETURNW7$: 0 SUB #FCNLST,R0 ; OBTAIN OFFSET IN FUNCTION LIST! ASL R0 ; CONVERT TO WORD OFFSETR= MOV FCNJMP(R0),U.PWRV(R5) ; SAVE THE FUNCTION ROUTINE IN THE  ; POWERFAIL RECOVERY BUFFERI, JMP @FCNJMP(R0) ; AND GO TO SERVICE ROUTINE;C.PAGEF; STARTING ADDRESS OF BOX:;CA; IF MS.SET BIT IS SET THIS FUNCTION WILL CHANGE ALL OF THE PORTSS@; ON THIS BOX TO THE STARTING ADDRESS SUPPLIED IN THE FIRST WORDD; OF THE USER BUFFER. IF ANY OF THE PORTS ARE IN THE 'FORCED PANEL'B; MODE SO THAT THEY CANNOT BE PROGRAMMED THE ERROR CODE IE.WLK&377D; IS RETURNED IN THE IOSB AND NO FURTHER ATTEMPT IS MADE TO CONTINUE@; PROGRAMMING THE REST OF THE PORTS. IF ANY PORT FAILS TO ACCEPTA; THE STARTING ADDRESS BUT INDICATES THAT IT IS PROGRAMMABLE, THEPG; ERROR CODE IE.FHE&377 IS RETURNED IN THE IOSB AND NO FURTHER ATTEMPT N9; IS MADE TO CONTINUE PROGRAMMING THE STARTING ADDRESSES.N;DG; IF MS.SET IS NOT SET THIS FUNCTION WILL REPORT THE STARTING ADDRESSESR@; OF ALL OF THE PORTS ON THIS BOX IN THE FIRST FOUR WORDS OF THE; USER BUFFER.; :; STATUS IS RETURNED IN THE FIFTH WORD OF THE USER BUFFER.; ;EIOORG:11$:' CALL ROUND ; SET UP ON EACH PROCESSORN12$:" TST U.KCTR(R5) ; ARE WE THRU YET? BEQ 19$ ; IF EQUAL THEN WE ARE9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORKI. BITB #MS.SET,I.FCN(R1) ; IS IT A SET FUNCTION$ BEQ 16$ ; GIVE HIM THE INFORMATION' CALL $GTWRD ; GET THE ADDRESS DESIREDW= SUB #2,U.BUF+2(R5) ; RESET THE BUFFER ADDRESS SO THAT WE CANI+ ; GET THE SAME PARAMETER THE NEXT TIME.B MOV (SP)+,R0 ; INTO R0E, BIC #^C777,R0 ; RESET ALL BUT ADDRESS FIELD+ BIS #PROG,R0 ; MASK IN THE PROGRAMABLE BITN; MOV CSR2(R4),R3 ; GET THE PRESENT STATE OF THE CSR INTO R3B4 BIC #OGMSK,R3 ; CLEAR OUT THE STARTING ADDRESS BITS6 BIS R0,R3 ; PUT THE DESIRED STARTING ADDRESS INTO R3/ MOV R3,CSR2(R4) ; PUT THE RESULTS INTO THE CSRH" BIT #PROG,CSR2(R4) ; DID IT TAKE?! BNE 13$ ; IF NOT EQUAL THEN YES,; MOV #IE.WLK&377,-(SP) ; PUSH THE ERROR CODE ONTO THE STACK : CALL STATUS ; REPORT THE PRESENT OF A WRITE LOCKED PORT, ; TO THE USER IN THE BUFFER STATUS WORD. BR 11$ ; AND GO AROUND AGAIN13$:4 CMPB R0,CSR2(R4) ; IS THE CORRECT ADDRESS ASSERTED? BEQ 11$ ; IF EQUAL THEN YESS< MOV #IE.FHE&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR16$:0 MOV CSR2(R4),-(SP) ; GET THE ADDRESS INTO -(SP). BIC #^C777,(SP) ; RESET ALL BUT ADDRESS FIELD. CALL GTURM ; GET THE UNIBUS RUN MASK INTO R3( ASH #4,R3 ; SHIFT MASK TO UPPER 4 BITS2 BIS R3,(SP) ; THEN SET IT INTO THE RETURN TO THE ; BUFFER.E0 CALL $PTWRD ; PUT THE RESULTS INTO THE BUFFER" BR 11$ ; AND GO GET THE NEXT ONE19$: JMP SUC ; FINISH UPA;R;?;B; EXTERNAL INTERLEAVINGE;;VIOINT:21$:' CALL ROUND ; SET UP ON EACH PROCESSORK22$:" TST U.KCTR(R5) ; ARE WE THRU YET? BEQ 29$ ; IF EQUAL THEN WE ARE9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORKD. BITB #MS.SET,I.FCN(R1) ; IS IT A SET FUNCTION BEQ 26$ ; GIVE THE INFORMATION: CALL $GTWRD ; GET THE DESIRED INTERLEAVING FUNCTION CODE" MOV (SP)+,R0 ; AND GET IT INTO R0" BIT #370,R0 ; IS IT A GOOD CODE? BEQ 23$ ; IF EQUAL THE YES< MOV #IE.BAD&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR23$:@ SUB #2,U.BUF+2(R5) ; RESET THE BUFFER ADDRESS TO THE FIRST WORD/ ; SO THAT WE CAN GET THE FACTOR ON THE NEXTE ; PASS( ASL R0 ; GET THE INTERLEAVING FUNCTION$ ASL R0 ; INTO THE RIGHT POSISTION# ASL R0 ; FOR ASSERTION00UrqmkTADATADATADATADATADATA ON THE CSRI ASL R0L SWAB R0, BIS #PROG,R0 ; MASK IN THE PROGRAMMABLE BIT; MOV CSR2(R4),R3 ; GET THE PRESENT STATE OF THE CSR INTO R3O9 BIC #INMSK,R3 ; CLEAR OUT THE INTERNAL INTERLEAVING BITSS* BIS R0,R3 ; SET THE INTERLEAVING FACTOR/ MOV R3,CSR2(R4) ; PUT THE RESULTS INTO THE CSR+" BIT #PROG,CSR2(R4) ; DID IT TAKE?, BNE 24$ ; IF EQUAL THEN IT IS PROGRAMMABLE< MOV #IE.WLK&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK6 CALL STATUS ; REPORT THE EXISTANCE OF A WRITE LOCKED) ; PORT IN THE USER BUFFER STATUS WORDS BR 21$ ; AND GO AGAINA24$:4 CMPB R3,CSR2(R4) ; IS THE CORRECT ADDRESS ASSERTED? BEQ 21$ ; IF EQUAL THEN YESB26$:7 MOV CSR2(R4),-(SP) ; GET THE CSR WORD 2 ONTO THE STACK 2 BIC #107777,(SP) ; CLEAR OUT THE REST OF THE WORD/ SWAB (SP) ; GET THE CODE INTO A READABLE FORMR ASR (SP) ASR (SP)B ASR (SP)F ASR (SP) . CALL GTURM ; GET THE UNIBUS RUN MASK INTO R30 BIS R3,(SP) ; SET IT INTO THE HIGH BYTE OF THE ; RETURNED WORDO& CALL $PTWRD ; BUT IT INTO THE BUFFER# BR 21$ ; GO TO THE NEXT PROCESSORG29$: JMP SUC ; FINISH UP(;S;E; INTERNAL INTERLEAVING?;B;2IOIIN:31$:' CALL ROUND ; SET UP ON EACH PROCESSORE32$:" TST U.KCTR(R5) ; ARE WE THRU YET? BEQ 39$ ; IF EQUAL THEN WE ARE9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORK5 BITB #MS.SET!MS.CLR,I.FCN(R1) ; IS IT A SET FUNCTIONT BEQ 36$ ; IF EQUAL THEN NO; MOV CSR2(R4),R0 ; GET THE PRESENT CONTENTS OF THE CSR INTO  ; R0' BITB #MS.CLR,I.FCN(R1); IS IT A CLEAR?  BEQ 34$ ; IF EQUAL THEN NO3 BIC #IIN,R0 ; CLEAR THE INTERNAL INTERLEAVING BIT- MOV R0,CSR2(R4) ; MOV THE IMAGE INTO THE CSR1! BIT #IIN,CSR2(R4) ; DID IT WORK?R' BEQ 31$ ; IF EQUAL THEN YES IT WORKEDT33$:< MOV #IE.FHE&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR34$:1 BIS #IIN,R0 ; SET THE INTERNAL INTERLEAVING BITT* MOV R0,CSR2(R4) ; TRY TO PROGRAM THE PORT BIT #IIN,CSR2(R4) ; IS IT SET?F. BNE 31$ ; IF NOT EQUAL THEN YES AND GO AGAIN35$:< MOV #IE.WLK&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK5 CALL STATUS ; INDICATE THAT ONE OF THE PORTS CANNOTM ; BE INTERLEAVED BR 31$ ; AND GO AGAIN;36$: BIT #IIN,CSR2(R4) ; IS IT SET% BEQ 38$ ; IF EQUAL THEN IT IS CLEAR3 MOV #1,-(SP) ; INDICATE SET37$:/ CALL GTURM ; GET THE UNIBUS RUN MASK INTO R3 BIS R3,(SP) ; REPORT ITE' CALL $PTWRD ; PUT IT INTO THE BUFFER;# BR 31$ ; GO TO THE NEXT PROCESSORS38$: MOV #0,-(SP) ; SHOW CLEARED BR 37$ ; GO AGAINN39$: JMP SUC ; FINISH UPK;7;S; MANUAL-PROGRAMMABLE MODE;T;SIOPRG:41$:' CALL ROUND ; SET UP ON EACH PROCESSORN42$:" TST U.KCTR(R5) ; ARE WE THRU YET? BEQ 49$ ; IF EQUAL THEN WE ARE9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORKV5 BITB #MS.SET!MS.CLR,I.FCN(R1) ; IS IT A SET FUNCTION  BEQ 46$ ; IF EQUAL NO. BITB #MS.CLR,I.FCN(R1); IS IT A CLEAR COMMAND! BNE 43$ ; IF NOT EQUAL THEN YES 2 BIS #PROG,CSR2(R4) ; SET THE BANK TO PROGRAMMABLE BIT #PROG,CSR2(R4) ; IS IT SET:! BNE 41$ ; IF NOT EQUAL THEN YES < MOV #IE.WLK&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK1 CALL STATUS ; INDICATE THAT ONE OF THE PORTS IS  ; FORCED TO THE PANEL. BR 41$ ; AND GO AGAINC43$:, BIC #PROG,CSR2(R4) ; SET THE BANK TO MANUAL# BIT #PROG,CSR2(R4) ; IS IT CLEARED;' BEQ 41$ ; IF EQUAL THEN IT IS CLEAREDU< MOV #IE.FHE&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR46$:# MOV #1,-(SP) ; ASSUME PROGRAMMABLEM BIT #PROG,CSR2(R4) ; IS IT SET?0 BNE 48$ ; IF NOT EQUAL THEN IT IS PROGRAMMABLE3 MOV CSR2(R4),R2 ; GET THE IMAGE OF THE CSR INTO R2+ BIS #PROG,R2 ; SET THE PROGRAMMABILITY BITS* MOV R2,CSR2(R4) ; MOVE IT BACK TO THE CSR0 BIT #PROG,CSR2(R4) ; IS IT FORCED TO THE PANEL?6 BEQ 47$ ; IF EQUAL THEN IT IS NOT AND WE REPORT THIS ; PORT AS NOT PROGRAMMABLE.L/ BIC #PROG,CSR2(R4) ; PUT IT BAC THE WAY IT WASC( BR 48$ ; AND REPORT IT AS PROGRAMMABLE47$:4 CLR (SP) ; ELSE INDICATE FORCED TO THE FRONT PANEL48$:4 CALL GTURM ; GET THE UNIBUS RUN MASK INTO 00]rBr4nblTHE HIGH ; BYTE OF R3+ BIS R3,(SP) ; SET IT INTO THE RETURN WORDN/ CALL $PTWRD ; PUT THE RESULTS INTO THE PACKETI# BR 41$ ; GO TO THE NEXT PROCESSORO49$: JMP SUC ; FINISH UP ;S; !; ERROR CORRECTION ENABLE-DISABLEF;U;TIOERR:. CALL GTONE ; GET ONTO THE DESIRED PROCESSOR52$:9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORK 5 BITB #MS.SET!MS.CLR,I.FCN(R1); IS IT A SET FUNCTION?;/ BEQ 55$ ; IF NOT EQUAL THEN REPORT THE STATUSC2 BITB #MS.CLR,I.FCN(R1) ; IS IT A DISABLE REQUEST?! BNE 53$ ; IF NOT EQUAL THEN YESE' BIC #ECC,(R4) ; ELSE CLEAR THE ECC BIT  BIT #ECC,(R4) ; IS IT CLEAR?E% BEQ 59$ ; IF EQUAL THEN IT IS CLEARO< MOV #IE.FHE&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR53$: BIS #ECC,(R4) ; SET THE ECC BIT BIT #ECC,(R4) ; IS IT SET?S' BNE 59$ ; IF NOT EQUAL THEN IT IS SET< MOV #IE.FHE&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR55$: MOV #0,-(SP) ; ASSUME DISABLEDS BIT #ECC,(R4) ; IS IT ENABLED? , BNE 56$ ; IF NOT EQUAL THEN IT IS DISABLED" INC (SP) ; ELSE INDICATE ENABLED56$: CALL $PTWRD ; REPORT SAMEU59$: JMP SUC ; FINISH UPE;E;7; GRANULARITY CHECKR;C; IOGRN:5 MOV #GRASHF,-(SP) ; SET THE GRANULARITY AT 64K BYTES,& CALL $PTWRD ; PUT IT INTO THE BUFFER JMP SUC2 ; GO HOME; ;N; BOX SIZE CHECK;E;IOSIZ:- CALL GTONE ; GET ONTO THE DESIRED PROCESSORS72$:9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORKE% MOV #SIZ,(R4) ; REQUEST THE BOX SIZEL3 MOV (R4),-(SP) ; GET THE SIZE ONTO THE STACK FOR AI ; CALL TO $PTWRD( BIC #100377,(SP) ; CLEAN UP THE GARBAGE$ SWAB (SP) ; SET SIZE INTO LOW BYTE& CALL $PTWRD ; OUT IT INTO THE BUFFER JMP SUC ; GO HOME ;S;T$; GET PARAMETERS ON SINGLE BIT ERROR;D; IORSA:- CALL GTONE ; GET ONTO THE DESIRED PROCESSOR 82$:9 CALL RESET ; RESET THE REGISTERS AFTER RETURN FROM FORKE5 BIT #SEIND,(R4) ; IS THE SINGLE BIT ERROR INDICATED?A! BNE 83$ ; IF NOT EQUAL THEN YESR< MOV #IE.IDS&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK JMP ERROR ; REPORT THE ERROR83$:7 MOV (R4),-(SP) ; PUSH THE ARRAY ADDRESS ONTO THE STACK 3 MOV CSR2(R4),R0 ; GET THE STARTING ADDRESS INTO R0 ( ASRB (SP) ; GET THE ARRAY ADDRESS INTO% ASRB (SP) ; THE FORM OF X TIMES 32KD ASRB (SP) ; AND THEN WE WILL+ ASRB (SP) ; CORRECT FOR WHICH SIDE OF THEE BIT #CONSEL,R0 ; OF THE BOX.R1 BEQ 84$ ; IF EQUAL THEN IT IS ON THE RIGHT SIDEB" ; AND WE HAVE THE RIGHT NUMBER7 ADD #1,(SP) ; ELSE WE ARE ON THE ODD SIDE AND WE MUSTE ; ADD ONE TO CORRECT.J84$:7 ADD R0,(SP) ; ADD THE STARTING ADDRESS TO THE RESULTSA/ SWAB (SP) ; NOW WE GET INTO A 32. WORD FACTORG$ BIC #377,(SP) ; WITHOUT THE GARBAGE ASL (SP)E ASL (SP) - MOV (SP),R0 ; AND WE SAVE THE RESULTS IN R0 < CALL $PTWRD ; THEN WE PUT THE LOWER END OF THE RANGE INTO- ; INTO THE FIRST OUTPUT WORD OF THE ARRAYB4 ADD #GRASHF,R0 ; ADD THE GRANULARITY TO THE RESULTS# MOV R0,-(SP) ; AND PUT THE RESULTSR9 CALL $PTWRD ; INTO THE SECOND WORD OF THE BUFFER AS THE ; UPPER LIMIT OF THE RANGE JMP SUC ; AND GO HOME ;R;G; SYSTEM STATUS FUNCTION;A;SIOCST:91$:' CALL GTKRB ; GET THE NEXT KRB INTO R3)0 BEQ 93$ ; IF EQUAL THEN THIS IS THE END OF THE) ; KRB TABLE AND WE ARE THRU WITH THIS  ; PART OF THE FUNCTION.T= MOVB K.URM(R3),-(SP) ; PUT THE UNIBUS RUN MAP ONTO THE STACKO0 BIT K.URM(R3),$URMST ; IS THE PROCESSOR ONLINE?5 BEQ 92$ ; IF EQUAL THEN IT IS OFFLINE AND WE DO NOTT ; SET THE SIGN BIT.T6 BISB #200,(SP) ; ESLE IT IS ONLINE AND WE SO INDICATE92$:+ CALL $PTBYT ; PUT IT IN THE OUTPUT BUFFERY' ADD #2,U.KCTR(R5) ; UPDATE THE COUNTER: BR 91$ ; AND GO AGAINN93$:* CLR U.KCTR(R5) ; CLEAR THE OFFSET COUNTER> MOV U.STAD(R5),U.BUF+2(R5) ; SET THE BUFFER TO THE FIFTH WORD? SUB #4,U.BUF+2(R5) ; AND SUBTRACT FOUR SO THAT WE POINT TO THES ; THIRD WORD.T94$:0 MOV U.DCB(R5),R3 ; GET THE DCB ADDRESS INTO R3@ MOV D.MSK(R3),-(SP) ; GET THE FIRST FUNCTION MASK WORD ONTO THE ; STACKT& C00erqmkTADATADATADATADATADATAALL $PTWRD ; PUT IT INTO THE BUFFER; MOV D.MSK+10(R3),-(SP) ; GET THE SECOND FUNCTION MASK WORDB ; ONTO THE STACK' CALL $PTWRD ; PUT IT INTO THE BUFFERD JMP SUC ; GO HOMER;K;(; ; DIAGNOSTIC MASK FUNCTION;V;S;(IOMSK:- CALL GTONE ; GET ONTO THE DESIRED PROCESSORB) CALL RESET ; AND GET THE REGISTERS BACK 0 BITB #MS.SET,I.FCN(R1) ; IS THIS A SET FUNCTION, BEQ 102$ ; IF EQUAL THEN IT IS A READ ONLY ; FUNCTION5 CALL $GTWRD ; ELSE WE GET THE #2 WORD OF THE BUFFERT* MOV (SP)+,(R4) ; AND MOVE IT INTO THE CSR4 CALL $GTWRD ; AND WE GET THE #3 WORD OF THE BUFFER. MOV (SP)+,CSR2(R4) ; AND MOVE IT INTO THE CSR102$: : MOV (R4),-(SP) ; PUSH THE FIRST WORD OF THE CSR ONTO THE ; STACKC* CALL $PTWRD ; AND PUT IT INTO THE BUFFER. MOV CSR2(R4),-(SP) ; AND THEN THE SECOND WORD CALL $PTWRD ; INTO THE BUFFERM! JMP SUC ; THEN EXIT WITH STATUSC/ JMP SNAP ; AND END WITH THE SNAPSHOT ROUTINE.Y; ; CLEAR MEMORY BOX; IOCLM:6 CALL GTONE ; MOVE OURSELVES TO THE CLOSEST PROCESSOR CALL RESET ; SETUP REGISTERS;N=; R4 = CSR ADDRESS FOR THE PORT ACCESSING THE TARGET BOX FROMO; 'THIS' PROCESSOR;$ MOV R5,-(SP) ; SAVE UCB ADDRESS* MOV (R4),-(SP) ; SAVE STARTING CSR1 VALUE' MOV CSR2(R4),R3 ; PICK UP BASE ADDRESSM( BIT #PROG,R3 ; IS THE BOX PROGRAMMABLE? BEQ 118$ ; BR IF NOT% BIC #^C777,R3 ; ISOLATE BASE ADDRESSS* CMP #77,R3 ; IS THE BOX SET AT INFINITY?' BLOS 120$ ; BR IF YES, NOT ACCESSABLE= ASH #GRANUL,R3 ; CONVERT TO UNITS OF 32WORDS FROM 32K WORDS.S! MOV #SIZ,(R4) ; ASK FOR BOX SIZE MOV (R4),R5 ; PICK UP SIZE$ BIC #100377,R5 ; ISOLATE SIZE FIELD- ASL R5 ; CONVERT TO COUNT OF 32 WORD BLOCKSU4 BEQ 118$ ; BR IF SIZE=0 (A MEMORY ERROR CONDITION);M ; NOW CLEAR ALL CELLS IN THE BOX;M CLR R2 ; SOURCE DATA- MOV #ECC,(R4) ; SET BOX TO IGNORE ECC ERRORSC112$:,! MOV R3,-(SP) ; SAVE BASE ADDRESS7% MOV R5,-(SP) ; AND SAVE THE BOX SIZEO114$: 5 MOV R3,KISAR6 ; MAP VIA APR6 TO THE NEXT 32WORD UNITR- MOV #140000,R1 ; POINT TO THE BLOCK TO CLEAR# .REPT 32.4 MOV R2,(R1)+ ; USE A VECTOR OF MOVE INSTRUCTIONS TO .ENDR ; CLEAR MEMORYE! INC R3 ; BUMP THE BLOCK POINTER . SOB R5,114$ ; LOOP FOR ALL BLOCKS IN THE BOX MOV (SP)+,R5 ; RESTORE SIZE( MOV (SP)+,R3 ; AND RESTORE BASE ADDRESS+ BIT #PROPTR,(R4) ; IS THIS THE SECOND PASSO! BNE 116$ ; BR IF YES, WERE DONEP? MOV #PROPTR ! ECC,(R4) ; TOGGLE THE PROTECTION POINTER FOR THE$ ; SECOND PASS; BR 112$ ; AND CLEAR IT AGAIN116$: MOV (SP)+,(R4) ; RESTORE CSR1 MOV (SP)+,R5 ; RESTORE UCB JMP SUC2 ; WERE DONE!T118$:O MOV (SP)+,(R4) ; RESTORE CSR1 MOV (SP)+,R5 ; RESTORE UCBM( MOV #IE.BAD&377,-(SP) ; PARAMETER ERROR JMP ERROR ; 120$:B MOV (SP)+,(R4) ; RESTORE CSR1 MOV (SP)+,R5 ; RESTORE UCBR. MOV #IE.OFL&377,-(SP) ; MEMORY NOT ACCESSABLE JMP ERROR ; .DSABLE LSB;S&; INTERRUPT ENTRY POINT LABEL FOR LOAD-; MEMORY ERRORS ARE SERVICED BY THE EXECUTIVE ;O$MKINT::- RETURN ; THIS IS THE INTERRUPT ENTRY POINTP ; THAT WILL NEVER BE USEDP.PAGE ;T; ;;J&; UTILITY SUBROUTINES AND ENTRY POINTS;(; ;E;R;S; SUBROUTINE ROUND;T?; THIS ROUTINE IS USED TO STEP THRU ALL OF THE PORTS ASSOCIATED 0; WITH THE BOX OF MEMORY CURRENTLY BE ACCESSED. ;; THE CURRENT OFFSET INTO THE KTB IS RETAINED IN THE UCB ATE:; U.KCTR. THIS POSITION IS CLEARED WHEN ALL KRBS HAVE BEEN ; DELT WITH.;O;O ; INPUTS:Y;R=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDH ; OUTPUTS:5; THE CARRY BIT INDICATES IF THE DRIVER IS EXECUTINGP4; ON THE PROPER PROCESSOR. IF THE BIT IS CLEAR THEN3; THE PROPER PROCESSOR HAS CONTROL AND THE ROUTINE -; MAY CONTINUE EXECUTION. IF THE BIT IS SETR7; THEN THE CALLER MUST DISMISS HIMSELF AND RETURN FROME*; THE FORK LEVEL ON THE PROPER PROCESSOR.;T;EROUND: U/ MOV U.SCB(R5),R4 ; GET THE SCB ADDRESS INTO R4L' CALL GTKRB ; GET THE NEXT KRB INTO R3 A MOV R3,S.KRB(R4) ; MOVE THE TABLE ENTRY INTO THE KRB WORD IN THEA ; SCB 3 BEQ 5$ ; IF EQUAL THEN THE ENTRY I00mrBr4nblN THE KRB TABLE . ; IS THE ZERO WORD AT THE END OF THE TABLE* ; SO WE ARE FINISHED AND MUST CLEAN UP- ; THE COUNTER AND INDICATE SUCCESS TO THEC ; CALLER4 ADD #2,U.KCTR(R5) ; ELSE WE MUST UPDATE THE COUNTER< MOV K.URM(R3),S.URM(R4) ; MOVE THE UNIBUS RUN MASK FOR THIS0 BIT K.URM(R3),$URMST ; IS THE PROCESSOR ONLINE?0 BEQ ROUND ; IF EQUAL THEN IT IS OFFLINE AND WE ; SKIP THIS PORT6 BIT #KS.OFL,K.STS(R3) ; ELSE IS THE CONTROLER ONLINE?5 BEQ 2$ ; IF EQUAL THEN IT IS ONLINE AND WE CONTINUER- TST (SP)+ ; ELSE WE HAVE A BAD SITUATION SOT# ; WE THROW AWAY THE DRIVER CALLD1 MOV #IE.OFL&377,-(SP) ; SET UP THE OFFLINE ERRORE! BR ERROR ; AND REPORT THE ERROR.2$:R( MOV (SP)+,R4 ; SAVE THE CALLER INTO R4 2 CALL $CFORK ; CALL THE CONDITIONAL FORK ROUTINE.2 ; IF WE ARE EXECUTING ON THE CORRECT PROCESSOR+ ; THEN WE WILL RETURN HERE AND CONTINUE / ; IF NOT THEN WE WILL RETURN TO THE CALLERSR/ ; CALLER AFTER WE ARE ENTERED INTO THE FORK 3 ; QUEUE. WHEN WE ARE DEQUEUED WE SHALL CONTINUE  ; FROM HERE.....MAYBEI1 MOV R4,-(SP) ; RESTORE THE CALLER ONTO THE STACK# RETURN ; AND RETURN TO HIM.5$: 4 CLR U.KCTR(R5) ; CLEAR THE COUNTER TO INDICATE THAT* ; WE HAVE COMPLETED THE CIRCUIT OF THE ; PORTS.$ RETURN ; AND RETURN TO THE CALLER;W; SUBROUTINE RESET;C>; THIS ROUTINE RESETS R4 AND R1 AFTER A RETURN FROM FORK LEVELA; USING THE UCB ADDRESS IN R5 TO LINK WITH THE CSR ADDRESS IN THER!; KRB AND THE I/O PACKET ADDRESS. ;U ; INPUTS:E;E=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDR;( ; OUTPUTS:; R1=ADDRESS OF THE I/O PACKETT; R4=ADDRESS OF THE CSR;$;-RESET: MOV U.SCB(R5),R4 ; GET THE SCB ADDRESS 2 MOV S.PKT(R4),R1 ; GET THE PACKET ADDRESS INTO R1/ MOV S.KRB(R4),R4 ; GET THE KRB ADDRESS INTO R4# MOV (R4),R4 ; AND THE CSR INTO R4U RETURN ; RETURN TO CALLER;U;F; ; SUBROUTINE ERROR; =; THIS ROUTINE IS THE COMMON ERROR REPORTING PROCESS FOR THISN=; DRIVER. THE COMMUNICATION WITH THE CALLER IS THRU THE IOSB.F<; AFTER THE ERROR PARAMETERS ARE SET UP IN R0 AND R1 CONTROLB; IS PASSED TO THE ROUTINE 'SNAP' WHICH LOGS THE PRESENT CONDITION9; OF THE PORTS IN THE DEVICE DEPENDENT BUFFER IN THE UCB.T;; THAT ROUTINE CALLS $IODON AND JUMPS TO THE INITIALIZATION ; ENTRY POINT FOR MORE WORK.;V;4 ; INPUTS: ; ; (SP)=ERROR CODE; R4=CSR ADDRESSL;=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDN;R;R ; OUTPUTS:;S;R; R0=ERROR CODE; 9; R1=PORT NUMBER IN HIGH BYTE AND BOX NUMBER IN LOW BYTEH;R=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDT;R;I;'ERROR:* MOV (SP)+,R0 ; GET THE ERROR CODE INTO R0' MOV R0,ECOD1 ; SAVE THE CODE FOR IODONU. CMP #IE.IFC&377,R0 ; IS IT A BAD PARAMETER OR ; ILLEGAL FUNCTION?R2 BGE 3$ ; IF EQUAL OR GREATER YES AND WE WILL NOT ; REPORT A URM3 CMP #IE.PRI&377,R0 ; IS IT A PRIVILEDGE VIOLATION?N1 BEQ 3$ ; IF EQUAL THEN YES AND WE RETURN NO URMS6 CALL GTURM ; ELSE WE GET THE CURRENT UNIBUS RUN MASK3 MOV R3,R1 ; AND SET IT UP TO REPORT THRU THE IOSBT3$:BA MOVB U.UNIT(R5),ECOD2 ; GET THE UNIT NUMBER INTO THE LOW BYTE OFP ; R1 FOR THE $IODON CALL. = MOV U.STAD(R5),U.BUF+2(R5) ; GET THE BUFFER STATUS WORD INTOR ; BUFFER ADDRESS= MOV #IE.ABO&377,-(SP) ; PUT THE FUNCTION STATUS ON THE STACKR3 CALL $PTWRD ; PUT IT INTO THE BUFFER STATUS WORDI6 JMP SNAP ; NOW GO TO THE SNAPSHOT ROUTINE TO LOG THE! ; CURRENT STATUS OF THIS BOX.S;C; ;R;;; SUBROUTINE GTONE;T;I>; THIS ROUTINE CONTINUES PROCESSING ON THE PROCESSOR INDICATED;; IN THE USER BUFFER. IF THE PORT REQUESTED IS OUT OF RANGEH8; FOR THIS BOX THEN THE CALLER IS CLEARED FROM THE STACK4; AND THE ERROR IS REPORTED THRU THE ROUTINE 'ERROR'; ; INPUTS:D;S=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDR;C:; THE PORT DESIRED IN THE CURRENT WORD OF THE USER BUFFER;;;WGTONE:4 CALL $GTWRD ; GET THE DESIRED PORT FROM THE BUFFER4 CMP #-1,(SP) ; DID THE CALLER SPECIFY A 'WILD CARD' ; PORT NUMBE00urqmkTADATADATADATADATADATAR? BNE 1$ ; BR IF NOT/ MOV $CPBIT,(SP) ; IF SO SUBSTITUTE THE URM FORT ; THE CURRENT PROCESSORA1$:+ CALL GTPRT ; GT THE KRB OF THE PORT IN R4M& TST R4 ; IS IT THE END OF THE TABLE? BNE 2$ ; IF NOT EQUAL THEN NON4 TST (SP)+ ; ELSE WE HAVE AN ERROR CONDITION AND WE ; MUST THROW AWAY THE CALLERB MOV #IE.BAD&377,-(SP) ; AND INDICATE THAT WE HAVE A BAD PARAMETER BR ERROR ; AND REPORT SAME. 2$:F0 BIT K.URM(R4),$URMST ; IS THE PROCESSOR ONLINE?) BNE 4$ ; IF NOT EQUAL THEN IT IS ONLINEB3$: 5 TST (SP)+ ; ELSE WE HAVE AND ERROR CONDITION AND WER ; MUST THROW AWAY THE CALLER< MOV #IE.OFL&377,-(SP) ; ELSE PUSH ERROR CODE ONTO THE STACK BR ERROR ; REPORT THE ERROR?4$:E, BIT #KS.OFL,K.STS(R4) ; IS THE PORT ONLINE?1 BNE 3$ ; IF NOT EQUAL THEN IT IS OFFLINE AND WER ; HAVE AN ERROR CONDITION./ MOV U.SCB(R5),R3 ; GET THE SCB ADDRESS INTO R3M4 MOV R4,S.KRB(R3) ; PUT THE KRB ADDRESS INTO THE SCB7 MOV K.URM(R4),S.URM(R3) ; PUT THE UNIBUS RUN MASK INTO ; THE SCBS% MOV (SP)+,R4 ; SAVE THE CALLER IN R4A, CALL $CFORK ; GET ON THE CORRECT PROCESSOR" MOV R4,-(SP) ; RESTORE THE CALLER RETURN ; AND CONTINUE; ;O;E;A;; SUBROUTINE GTPRT; ;O<; THIS ROUTINE RETURNS THE KRB ADDRESS THAT IS ON THE UNIBUSC; RUN MASK INDICATED BY THE CURRENT STACK WORD. IF THE MASK IS NOTD&; FOUND THEN A ZERO VALUE IS RETURNED.;R; ; INPUTS:M;R=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDS;M;); (SP)=THE UNIBUS RUN MASKT;; ; OUTPUT;M.; R4=ADDRESS OF THE KRB WITH THE DESIRED MASK; ;E;NGTPRT:' CALL GTKRB ; GET THE NEXT KRB INTO R3H% TST R3 ; IS IT THE END OF THE TABLE+ BEQ 3$ ; IF EQUAL THEN YES AND WE USE THE ( ; ZERO VALUE OF R3 TO INDICATE SAME.0 CMP 2(SP),K.URM(R3) ; IS THIS THE DESIRED PORT?0 BEQ 3$ ; IF EQUAL THEN IT IS AND WE RETURN THE ; VALUE.; ADD #2,U.KCTR(R5) ; ELSE WE BUMP THE OFFSET COUNTER TO THEB ; NEXT ADDRESS BR GTPRT ; AND GO AGAIN3$:P0 MOV R3,R4 ; GET IT INTO THE REPORTING REGISTER5 MOV (SP),2(SP) ; GET THE CALLER INTO THE SECOND SLOT TST (SP)+ ; CLEAN THE STACKN" CLR U.KCTR(R5) ; ZERO THE COUNTER RETURN ; AND GO BACKQ; ;I;Q; ;N; SUBROUTINE GTKRB; ; ?; THIS ROUTINE RETURNS THE ADDRESS OF THE KRB POINTED TO BY THES%; OFFEST COUNTER AT U.KCTR(R5) IN R3. ;N; ; INPUTS:E;N;E=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDU;R; 7; U.KCTR(R5)=OFFSET TO DESIRED KRB IN THE S.KTB TABLE.P;M;RGTKRB:+ MOV U.KCTR(R5),R3 ; GET THE OFFSET INTO R3,* ADD U.SCB(R5),R3 ; ADD IN THE SCB ADDRESS3 MOV S.KTB(R3),R3 ; GET THE ADDRESS OF THE KRB INTOE ; R3 RETURN ; GO BACK ;B;Q; ;I;Q; ;N; ; SUBROUTINE STATUS;;H=; THIS ROUTINE WILL PUT THE SECOND WORD ON THE STACK INTO THE !; STATUS WORD OF THE USER BUFFER. ;N; ; INPUTS:E=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDA; 2(SP)=ERROR CODE;K;(;=STATUS: > MOV U.BUF+2(R5),-(SP) ; PUT THE CURRENT BUFFER ADDRESS ON THE ; STACKEC MOV U.STAD(R5),U.BUF+2(R5) ; MOVE THE STATUS WORD ADDRESS INTO THEK ; BUFFER SLOT 4 MOV 4(SP),-(SP) ; PUT THE ERROR CODE ONTO THE STACK2 CALL $PTWRD ; PUT THE ERROR CODE INTO THE BUFFER3 MOV (SP)+,U.BUF+2(R5) ; RESTORE THE BUFFER ADDRESS ( MOV (SP)+,(SP) ; AND CLEAN UP THE STACK RETURN ; GO BACK;;N; SUBROUTINE SUC; >; THIS ROUTINE HANDLES A SUCCESSFULL COMPLETION OF A FUNCTION.;E=; SUCCESS IS INDICATED IN THE IOSB AND THE BUFFER STATUS WORDT;F ; INPUTS: ;T=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSED ;D;DSUC:3 MOV #IS.SUC,ECOD1 ; SET UP SUCCESS IN FOR THE IOSBT$ CLR ECOD2 ; ZERO THE 2ND IOSB WORD;D; ; ; SUBROUTINE SNAP ; D; THIS ROUTINE IS USED TO GET A 'SNAPSHOT' OF THE MEMORY CSRS STORED@; IN WORDS U.CSAV TO U.CSAV+2. THESE WORDS ARE USED AFTER A REAL;; POWERFAIL TO RESET THE MEMORY TO IT'S PREVIOUS CONDITION.LA; THIS ROUTINE IS ENTERED FROM BOTH ERROR AND SUCCESS CONDITIONS.E;F; ; INPUTS:T;F5; R0= DATA FOR THE FIRST W00}rBr4nblORD OF THE I/O STATUS BLOCKC;E6; R1= DATA FOR THE SECOND WORD OF THE I/0 STATUS BLOCK=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDS;O;SNAP:2 CALL SNAP1 ; GET ALL OF THE CSRS COPIED INTO THE ; U.CSAV AREAOSUC2:E5 CLR U.PWRV(R5) ; CLEAR THE POWERFAIL RECOVERY VECTORW MOV ECOD1,R0 ; FIRST IOSB WORDE MOV ECOD2,R1 ; SECOND IOSB WORD% CALL $IODON ; CLEAN UP THE FUNCTION # MOV U.SCB(R5),R0 ; GET SCB ADDRESSO" CLR S.KRB(R0) ; CLEAR KRB ADDRESS- CLR S.URM(R0) ; AND REQUIRED UNIBUS RUN MASK $ JMP MKINI ; GO GET THE NEXT PACKET;D; ; ; ; SUBROUTINE SNAP1;R; ;; THIS ROUTINE IS USED TO GET AN IMAGE OF THE CSRS THAT AREP<; CURRENTLY ONLINE INTO THE IMAGE STORAGE BUFFER THAT STARTS; AT U.CSAV IN THE UCB.R;P;( ; INPUTS: ; ;E=; R5=ADDRESS OF THE UCB OF THE UNIT CURRENTLY BEING ACCESSEDE;2; ; OUTPUT:S;O;&; CSR IMAGES ARE IN THE STORAGE BUFFER;V;S;R;R .ENABLE LSB5$:C) ADD #2,U.KCTR(R5) ; ADVANCE TO NEXT PORTMSNAP1:& CALL GTKRB ; GET A KRB ADDRESS IN R3 BEQ 10$+ BIT K.URM(R3),$URMST ; IS THIS CPU ONLINE?S# BEQ 5$ ; BR IF NOT. TRY NEXT PORTT* MOV U.SCB(R5),R4 ; ENSURE WE HAVE THE SCB MOV R3,S.KRB(R4) ; SET THE SCB : MOV K.URM(R3),S.URM(R4) ; SET THE MASK FOR THE CONTROLLER, MOV (SP)+,R4 ; GET RETURN ADDRESS TO CALLER! CALL $IFORK ; GO TO A PROCESSOR- MOV R4,-(SP) ; SAVE RETURN ADDRESS TO CALLER ( CALL GTKRB ; AND REFRESH THE REGISTERS/ MOV (R3),R3 ; OBTAIN CSR ADDRESS. SINCE "ALL"T$ ; ACCESSABLE REGISTERS HAVE BEEN& ; SET THE SAME BY OUR CALLER, PCIK$ ; ANY KRB TO GET THE CSR ADDRES.? MOV CSR1(R3),U.CSAV(R5) ; SAVE THE MEMORY CONTROLLER REGISTERS 0 MOV CSR2(R3),U.CSAV+2(R5) ; AGAINS A POWER FAIL% CLR U.KCTR(R5) ; CLEAN UP FROM GTKRB 10$: RETURN ;V .DSABLE LSB;U;A;E;T;A; SUBROUTINE GTURM;O7; THIS ROUTINE PUTS THE UNIBUS RUN MASK FOR THE CURRENTC ; PORT INTO THE HIGH BYTE OF R3.;E;G ; INPUTS:V;3; R4=KRB ADDRESSA;E; ; OUTPUT:T; +; R3=UNIBUS RUN MASK FOR PORT IN HIGH BYTE ; ;EGTURM: MOV U.SCB(R5),R4  MOV S.KRB(R4),R4C= MOV K.URM(R4),R3 ; GET THE UNIBUS RUN MASK INTO THE LOW BYTEL, SWAB R3 ; MOVE THE MASK INTO THE HIGH BYTE RETURNO; ;L.PAGER;K;(; MKPWF:MKOUT:MKCAN:1 RETURN ; THESE TWO POINTS SHOULD NEVER BE USED& ; ON THIS DRIVER BUT JUST IN CASE.;P7; THESE ARE THE ENTRY POINTS FOR THE ONLINE AND OFFLINE ; STATUS CHANGES.E;G; .ENABLE LSB;=MKKRB:! BCS 30$ ; BR IF OFFLINE REQUEST=" ; OFFLINE IS CONSIDERED ALWAYS! ; SUCCESSFUL. *** CAUTION ***R% ; THIS ASSUMPTION IS MADE SO THATR" ; A UNIT CAN GO OFFLINE WHEN A& ; CPU GOES OFFLINE. HRC MUST CHECK& ; TO INSURE THAT OFFL COMMANDS MAY" ; NEVER GET HERE WITH THE BOX  ; MEMORY ON-LINE.W;N; CONTROLLER ONLINE SERVICE ;N& MOV K.OWN(R2),R1 ; PICK UP OWNING UCB BEQ 25$ ; BR IF NONE) MOVB U.UNIT(R1),R1 ; GET BOX UNIT NUMBERE ASL R1 ; CONVERT TO WORD INDEX= CMP #160000,$MKCSR(R1) ; IS THE EXECUTIVE TABLE ENTRY DUMMY?E% BLO 30$ ; NO, SKIP CSR MODIFICATION ' MOV K.CSR(R2),R1 ; PICK UP CSR ADDRESSR& MOV #BAS1,(R1) ; MOVE BOX TO INFINITY. MOV #BAS2,CSR2(R1) ; LOAD ADDRESS AND CONTROL BR 30$ ; RETURN TO EXECUTIVE;E; UNIT ONLINE/OFFLINE SERVICE ;OMKUCB:& BCC 30$ ; NOP IF UNIT ONLINE REQUEST; UNIT OFFLINE SERVICE;U MOV R5,R1 ; COPY UCB ADDRESS BR 15$ ; TO COMMON CODE 10$: MOV K.OWN(R2),R1 ; GET UCBN BEQ 25$ ; BR IF NO UCB15$:( MOVB U.UNIT(R1),R1 ; PICK UP BOX NUMBER! ASL R1 ; CONVERT TO WORD OFFSETR/ CMP #160000,$MKCSR(R1) ; IS BOX ADDRESS DUMMY?D* BHI 30$ ; BR IF YES, OFFLINE MAY PROCEED25$:9 MOVB #IE.ONL,$SCERR ; OTHERWISE MARK STATUS CHANGE ERRORR30$: RETURN ; TO EXEC .DSABLE LSB .ENDCE ;OMKUCB:& BCC 30$ ; NOP IF UNIT ONLINE REQUEST; UNIT OFFLINE SERVICE;U MOV R5,R1 ; COPY UCB ADDRESS BR 15$ ; TO COMMON CODE 10$: MOV K.OWN(R2),R1 ; GET UCBN BEQ 25$ ; BR IF NO UCB15$:( MOVB U.UNIT(R1),R1 ; PICK UP 006rqmkTADATADATADATADATADATA .TITLE MLOCKA .IDENT /04.02/ R;R&; COPYRIGHT (C) 1975, 1977, 1979, 1984/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.Y;CA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.D;A;E$; RICHARD H. ECKHOUSE, JR. 5-MAR-75;T; MODIFIED BY:;M; J. M. LAWLER 07-JUL-83 04.01;;*; JL167 -- MAKE PATCH SPACE UNCONDITIONAL;K; J. W. BERZLE 08-SEP-83 04.02;N2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES; $; MULTIPROCESSOR LOCKING SUBROUTINES;; MACRO LIBRARY CALLS5;9  9 .IF DF M$$PRO Q .MCALL HWDDF$,BGCK$AY$ HWDDF$ ;DEFINE HARDWARE REGISTERS I;D; LOCK WORDS ARE OF THE FORM:E;E/; BYTE 0 = LOCK VALUE (0 IF LOCKED, 1 IF FREE)U; BYTE 1 = IF BYTE 0 EQUAL:"; 0, THEN BYTE 1 = OWNER OF LOCK"; 1, THEN BYTE 1 = COMPLEMENT OF; PREVIOUS OWNER1>; BYTE 2,3 = SECONDARY LOCK WORD (FORMAT ABOVE) FOR WAIT MASK.(; BYTE 4,5 = MASK OF WAITING PROCESSORS.;I+; NOTE: BYTES 4+5 ARE REFERENCED AS A WORD.I;S O;+2; **-$MLOCK-MULTIPROCESSOR WAIT-LOCK LOCK ROUTINE.;PE; THIS ROUTINE WILL USE THE ASRB INSTRUCTION TO LOCK A DATA STRUCTUREI?; OR CODE SEGMENT. IT OPERATES ON LOCK BLOCKS DESCRIBED ABOVE.(G; IT IS CALLED FROM AN INVOCATION OF THE LOCK$ MACRO WHEN THE LOCK TYPE1E; IS "WAIT". IT WILL ATTEMPT THE LOCK, AND IF IT FAILS WILL POST THEWI; FACT THAT THIS PROCESSOR IS WAITING, THEN PLACE ITSELF IN A WAIT STATE.EB; THIS ROUTINE SHOULD ONLY BE CALLED AT PRIORITY ZERO, UNBYPASSED.I; WHEN IT EXITS, THE PRIORITY IS AGAIN ZERO, AND THE CACHE IS UNBYPASSED.T;. ; INPUTS:S;U!; 0(SP)=RETURN ADDRESS TO CALLER.T; 2(SP)=ADDRESS OF LOCK BLOCK.; ; OUTPUTS:;E>; LOCK BLOCK IS LOCKED, AND THIS PROCESSOR IS OWNER. PRIORITY;; EQUALS ZERO, CACHE UNBYPASSED. CACHE HAS BEEN FLUSHED IF.$; MORE THAN ONE PROCESSOR IS ACTIVE.;L; ALL REGISTERS ARE PRESERVED.;- E'$MLOCK::MOV R4,-(SP) ;SAVE R4 FOR LATERA MFPS -(SP) ;SAVE PRIORITYO. MTPS #PR7 ;DON'T WANT TO BE INTERRUPTED HERE  N .IF DF P$$D70 R% MOV $URMST,R4 ;;;GET ONLINE BUS RUNSY# BIC $CPMSK,R4 ;;;MAKE IT CPUS ONLY=" BIC $CPBIT,R4 ;;;IGNORE OURSELVES1 BEQ 5$ ;;;IF EQ DON'T BOTHER TO FLUSH OR BYPASSB4 BIS #BYPASS,@$MPCSR+6 ;;;FLUSH AND BYPASS THE CACHE5$: ;;;REFERENCE LABELP E .ENDC A E;F; CURRENT STACK CONTENTS: ;C; 0(SP) = SAVED PRIORITY. ; 2(SP) = SAVED R4 FROM ENTRY.#; 4(SP) = RETURN ADDRESS TO CALLER.A&; 6(SP) = ADDRESS OF LOCK BLOCK.;P ! MOV 6(SP),R4 ;;;GET LOCK ADDRESS   .IF DF L$$DBG $ CMPB 1(R4),$PROCN ;;;DO WE OWN LOCK. BEQ ERR5 ;;;IF EQ YES -- CRASH, NO WALK THRU , .ENDC E R#10$: ASRB (R4) ;;;ATTEMPT THE LOCKR BCS 20$ ;;;IF CS WE NOW OWN IT M;RE; WE HAVE ATTEMPTED TO LOCK THE LOCK BYTE, AND FAILED TO GAIN ACCESS.C0; WE WILL NOW POST THE FACT THAT WE ARE WAITING.;  A, LOCK$ 2(R4),SPIN ;;;LOCK THE SECONDARY LOCK6 BIS $CPBIT,4(R4) ;;;POST THE FACT THAT WE ARE WAITING/ ULOCK$ 2(R4),SPIN ;;;UNLOCK THE SECONDARY LOCKG- ASRB (R4) ;;;ATTEMPT THE PRIMARY LOCK AGAINC& BCS 30$ ;;;IF CS WE GOT IT THIS TIME/ MTPS (SP) ;;;LOWER PRIORITY TO ENTRANCE VALUE., TST $PWRFL ;;;SEE IF POWERFAIL FLAG IS SET* BNE 15$ ;;;IF SET, SKIP WAIT INSTRUCTION) BIT @$CPURM,$URMST ;;;ARE WE ONLINE YET?T$ BEQ 15$ ;;;IF EQ NO -- NO IIST YET! WAIT ;;;WAIT FOR ANY INTERRUPTA215$: MTPS #PR7 ;;;WE DON'T WANT TO BE INTERRUPTED" BR 10$ ;;;TRY PRIMARY LOCK AGAIN ;T#; WE HAVE GAINED ACCESS TO THE LOCKP;; N20$: ;;;REFERENCE LABEL  ) .IF DF L$$DBG I930$: CACHE$ BYPASS ;;;NEED TO CHECK OUT SOME REAL VALUESM- TSTB 1(R4) ;;;DOES LOCK ALREADY SHOW OWNED?0 BPL ERR4 ;;;IF PL YES -- SOMEHOW WE BROKE LOCK& MOVB $PROCN,1(R4) ;;;SHOW US AS OWNER T .IFTF R- CACHE$ RESTOR ;;;THRU WITH CHANGABLE VALUESN - .IFFT T30$: ;;;REFERENCE LABEL R .ENDC M MTPS (SP)+ ;;;RESTORE PRIORITY MOV (SP)+,R4 ;RESTORE R4M$ MOV (SP)+,(SP) ;MOVE RETURN ADDRESS CACHE$ FLUSH ;FLUSH CACHEN RETURN  R:ERR5: BGCK$A BF.006rTr4nblMP,BE.WTL,FATAL ;ATTEMPT TO WALK THRU LOCK ;+7; **-$MULCK-MULTIPROCESSOR WAIT LOCK UNLOCK SUBROUTINE.L; B; THIS ROUTINE WILL UNLOCK THE SOFTWARE MULTIPROCESSOR LOCK, USING@; THE ASRB INSTRUCTION TO INTERLOCK MEMORY. IT WILL CHECK TO SEEF; IF ANY PROCESSOR IS WAITING, AND IF ANY ARE, IT WILL INTERRUPT THEM.;N ; INPUTS:R;.!; 0(SP)=RETURN ADDRESS OF CALLER.R; 2(SP)=ADDRESS OF LOCK BLOCK.;R ; OUTPUTS:;(4; LOCK IS UNLOCKED. ANY WAITING PROCESSORS HAVE BEEN; INTERRUPTED.;5:; PRIORITY IS PRESERVED AT EXIT, BUT MAY GO TO ZERO DURING; THIS ROUTINES EXECUTION.;W; CACHE IS UNBYPASSED.;L; ALL REGISTERS ARE PRESERVED.;- F$MULCK::MOV R5,-(SP) ;SAVE R5G MOV R4,-(SP) ;SAVE R4" MOV 6(SP),R4 ;GET ADDRESS OF LOCK$ MFPS -(SP) ;SAVE PRIORITY FOR EXIT4 MTPS #PR7 ;RAISE PRIORITY SINCE WE WILL LOCK LATER   .IF DF L$$DBG E! CMPB 1(R4),$PROCN ;DO WE OWN IT?L BNE ERR1 ;IF NE NO -- CRASH ASRB (R4) ;IS LOCK LOCKED?% BCS ERR3 ;NO - WE JUST GOT IT, OOPS COMB 1(R4) ;CLEAR WHO DONE ITI B .ENDC O;R!; SEE IF ANY PROCESSOR IS WAITING.;W 6 LOCK$ 2(R4),SPIN ;;;LOCK SECONDARY LOCK IN LOCK BLOCK/ MOV 4(R4),R5 ;;;GET MASK OF WAITING PROCESSORS,/ CLR 4(R4) ;;;CLEAR MASK OF WAITING PROCESSORSK M; D; AT THIS POINT, WE WILL SET THE BITS IN $IICPU FOR THOSE CPUS WHICH6; ARE CURRENTLY WAITING, AND HAVE WORK TO DO ($IIPND).7; UNFORTUNATELY, WE MUST LOCK THE FORK LOCK TO DO THIS.A;  )F;******************************* IIST DEBUGGING CODE ***************** BR 4$ ;ENTER NEW CODE. BR 6$ ;DON'T ENTER NEW CODEEF;******************************* END IIST DEBUGGING CODE *************+4$: MOV R5,-(SP) ;GET SOME SPACE TO WORK INO' MOV $IIPND,-(SP) ;CALC $IIPND .AND. R5I/ COM (SP) ;CREATE MASK OF CPUS NOT HAVING WORKL8 BIC (SP)+,R5 ;R5=CPUS WHICH HAVE WORK AND WILL BE INTED# BEQ 5$ ;IF EQ DON'T BOTHER $IICPUP* LOCK$ $FORKL,SPIN ;LOCK ONCE MORE (YEECH)% BIS R5,$IICPU ;SHOW OURS INTERRUPTED** ULOCK$ $FORKL,SPIN ;UNLOCK FORK LIST LOCK%5$: MOV (SP)+,R5 ;RESTORE ORIGINAL R5D(6$: MOVB #1,(R4) ;;;UNLOCK PRIMARY LOCK+ ULOCK$ 2(R4),SPIN ;;;UNLOCK SECONDARY LOCKN7 BIC $CPBIT,R5 ;;;WE ALREADY HAD LOCK, SO CLEAR OUR BITT! BEQ 10$ ;;;IF EQ NO CPU WAITING  P;.&; WE HAVE A MASK OF WAITING PROCESSORS;O A MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP)H MOV R2,-(SP)W MOV R3,-(SP)B) MOV R5,R1 ;SET UP PARAMETERS FOR $IIXMT$ CALL $IIXMT MOV (SP)+,R3 ;RESTORE R3R MOV (SP)+,R2O MOV (SP)+,R1* MOV (SP)+,R0L610$: MTPS (SP)+ ;RESTORE PRIORITY TO SAME AS INCOMING MOV (SP)+,R4 ;RESTORE R4R MOV (SP)+,R5R0 MOV (SP)+,(SP) ;SLIDE RETURN ADDRESS DOWN STACK RETURNB $>ERR1: BGCK$A BF.MP,BE.UNO,FATAL ;PROCESSOR WHO DIDN'T OWN LOCK ;TRIED TO UNLOCK9ERR2: BGCK$A BF.MP,BE.ILC,FATAL ;ILLEGAL LOCK COUNT VALUEM-ERR3: BGCK$A BF.MP,BE.LNS,FATAL ;LOCK NOT SET(;ERR4: BGCK$A BF.MP,BE.OCP,FATAL ;OTHER CPU SHOWED OWNERSHIPMCERR6: BGCK$A BF.MP,BE.MLK,FATAL ;ATTEMPT MADE TO EXIT MULTIPLE LOCKP R .IFTF ; DF M$$PRO"$PATCH::.BLKW 40. ;PATCHING SPACE E .ENDC G M .END+,R4 ;RESTORE R4R MOV (SP)+,R5R0 MOV (SP)+,(SP) ;SLIDE RETURN ADDRESS DOWN STACK RETURNB $>ERR1: BGCK$A BF.MP,BE.UNO,FATAL ;PROCESSOR WHO DIDN'T OWN LOCK ;TRIED TO UNLOCK9ERR2: BGCK$A BF.MP,BE.ILC,FATAL ;ILLEGAL LOCK COUNT VALUEM-ERR3: BGCK$A BF.MP,BE.LNS,FATAL ;LOCK NOT SET(;ERR4: BGCK$A BF.MP,BE.OCP,FATAL ;OTHER CPU SHOWED OWNERSHIPMCERR6: BGCK$A BF.MP,BE.MLK,FATAL ;ATTEMPT MADE TO EXIT MULTIPLE LOCKP R .IFTF ; DF M$$PRO"$PATCH::.BLKW 40. ;PATCHING SPACE .TITLE MMDRVV .IDENT /09.01/ .ENABLE LCE;T5; Copyright (C) 1986 by Digital Equipment CorporationD; All Rights Reserved.;1<; This Software is Furnished Under a License And May Be Used>; or Copied Only in Accordance With the Terms of Such License.;; B; RSX11M-PLUS RH11/RH70 TM02/TM03 Magnetic Tape Controller Driver;R; Version 09.01A;R;; Modified By:;S>; CS005 -- Handle CALL for Controller Power Fail (C bit set).;I;C; .PAGER; Macro Library Calls;.E.MCA00TrqmkTADATADATADATADATADATALL ABODF$, HWDDF$, PKTDF$, UCBDF$, UMDIO$, KRBDF$, SCBDF$, QIOSY$h ABODF$ ;Define Abort Codeso$ HWDDF$ ;Define Hardware Registers$ PKTDF$ ;Define I/O Packet Offsets UCBDF$ ;Define UCB OffsetsC2 UMDIO$ ;Define User Mode Diagnostic Definitions& KRBDF$ ;Define KRB and KRB1 Offsets SCBDF$ ;Define SCB Offsetse* QIOSY$ ;Define QIO Functions and Errors;d; Equated Symbols-;aUS.ABO=1 ;Abort Request,#US.SUP=2 ;Supress Error Recovery,G.US.PWF=10 ;Power Fail Indication - in U.STS..RETRY=12 ;Retry Count - 10. retries/request.2MINREC=14. ;Write Request - Minimum Record Size.)REV=2 ;Reverse Bit - Space Operations.f3NOISE=MINREC ;Anything Smaller than this is NoiseC.PAGEO!; Register Definition and Offsetsf;t,RHCS1 = +0 ;RH Control and Status RegisterGO= 1 ;Go BitfIE= 100 ;Interrupt Enableu!RDY= 200 ;RH Controller Ready PSL= 2000 ;Port select;DVA= 4000 ;Device AvailableTRE= 40000 ;Transfer Error)CPE= 20000 ;RH Control Bus Parity ErrorR"SC= 100000 ;Special Condition ;I/O Commands.%FC.RWU= 103 ;Rewind Unload/Off-LineFC.RWD= 107 ;Rewind FC.RLS= 113 ;Release DriveFC.ERS= 125 ;Erase 3" Gaph$FC.WEF= 127 ;Write EOF (tape mark)FC.SPF= 131 ;Space Forward FC.SPR= 133 ;Space Reverse eFC.WRT= 161 ;WriteFC.RED= 171 ;ReadIFC.REV= 177 ;Read Reverse FC.CLR= 11 ;Drive Clear#RHWC = +2 ;RH Word Count Registere$RHBA = +4 ;RH Bus Address Register+MTFC = +6 ;TM02/TM03 Frame Count Registerr/RHCS2 = +10 ;RH Control and Status Register 2m#SCLR= 40 ;RH Controller Cleard(DPE= 400 ;MASSBUS Data Parity ErrorMXF= 1000 ;Missed TransferPGE= 2000 ;Program Error"NEM= 4000 ;Non-existent Memory!NED= 10000 ;Non-existent Drive3"UPE= 20000 ;Unibus Parity Error WCE= 40000 ;Write Check ErrorDLT= 100000 ;Data LateC>CS2ERR= DLT! WCE! UPE! NED! NEM! PGE! MXF! DPE ;RH TRE Errors-MTDS = +12 ;TM02/TM03 Drive Status Register0SLA= 1 ;Slave Attention!BOT= 2 ;Beginning of Tape s TM= 4 ;Tape Mark Detected#PES= 40 ;Phase Encoded StatusB"SSC= 100 ;Slave Status ChangeDRY= 200 ;Drive ReadyEOT= 2000 ;End of Tape 0WRL= 4000 ;Write LockEMOL= 10000 ;Medium On Line3&PIP= 20000 ;Positioning in Progress ERR= 40000 ;Error - Composite&MTER = +14 ;TM02/TM03 Error RegisterILF= 1 ;Illegal FunctionEILR= 2 ;Illegal Register ,RMR= 4 ;Register Modification Refused'CPR= 10 ;Control Bus Parity ErrornFMT= 20 ;Format Error; DPR= 40 ;Data Parity Error+INC= 100 ;Incorrectable Data - PE ModeS-VPE=INC ;Vertical Parity Error - NRZI Mode %PEF= 200 ;Format Error - PE ModeW"LRC=PEF ;LRCC Error - NRZI ModeNSG= 400 ;Non-standard Gapg FCE= 1000 ;Frame Count Error(CS= 2000 ;Correctable Skew - PE Mode(ITM=CS ;Illegal Tape Mark - NRZI Mode&NEF= 4000 ;Non-executable Function!DTE= 10000 ;Drive Timing Errorn#OPI= 20000 ;Operation IncompletePUNS= 40000 ;Drive UnsafeF,COR= 100000 ;Correctable Data - PE Mode!CRC=COR ;CRC Error - NRZI Mode )DAT= CS! PEF! INC ;Data Detection errors +RHAS = +16 ;RH Attention Summary Registerd2MTCK = +20 ;TM02/TM03 CRC or Dead Track Register#MTDB = +22 ;TM02/TM03 Data BufferF,MTMR = +24 ;TM02/TM03 Maintenance Register+MTDT = +26 ;TM02/TM03 Drive Type RegisterN%MTSN = +30 ;TM02/TM03 Serial Number -MTTC = +32 ;TM02/TM03 Tape Control Register=TC.1600= 2000 ;1600 BPITC.800= 1000 ;800 BPIU?TC.FMT= 300 ;Formatting Mode - PDP-11 normal assy/dissassy;TC.EVN= 10 ;Even ParityC.PAGE E; The following define bits in the Tape Characteristic Word (U.CW2). g1M.PEOV= 100000 ;Tape past Logical End of Volumei/M.AEOV= 40000 ;Tape at Logical End of Volume=M.BOT= 20000 ;Tape at BOT@M.1600= 4000 ;Tape Density Control; '1'=1600 BPI, '0'=800BPI$M.HWL= 2000 ;Hardware Write Lock"M.RWD= 1000 ;Unit is Rewinding9M.SER= 00Trr4nbl 400 ;Select Error - Tape Drive not accessibleU<M.IXG= 200 ;Inhibit Write with Extended Interrecord Gap$M.SWL= 100 ;Software Write Lock9M.EOF= 40 ;Tape Mark detected (FWD direction only).tM.EOT= 20 ;Tape at EOT 0M.EVN= 10 ;Even Parity-USRBTS=4310 ; Bits Controlled by the User - # ; M.1600! M.IXG! M.SWL! M.EVN B<NEWBTS=M.BOT!M.EOF!M.EOT ;Bits to be set before Call $IODON. ; Local Data; A; Controller Impure Data Tables (Indexed by Subcontroller Number) ; M; Diagnostic Functions use bit 15 of RTTBL as a Flag for Interrupt Servicing.t'RTTBL: .BLKW T$$M03 ;Error Retry Count 0SPTBL: .BLKW T$$M03 ;Current Space Count - 2's.*SPTOTL: .BLKW T$$M03 ;Total Blocks Spaced3SPRMNG: .BLKW T$$M03 ;Remaining Space Count - 2's.S+FMTBL: .BLKW T$$M03 ;Format Code Save Area-FCCDE: .BLKW T$$M03 ;Function Code Save AreaM.CMDCNT: .BLKW T$$M03 ;Command Count Save Area&BUFADR: .BLKW T$$M03 ;U.BUF Save Area/DONADR: .BLKW T$$M03 ;DONTBL Address Save Areab&IOFCN: .BLKW T$$M03 ; > I/O Function..PAGER;+; VALID I/O FUNCTION TABLE;-, .MACRO DFENT FUNC,INDX,RQSTCD,RTRADR,RTRYCD .WORD FUNC ;I/O Function Codec) .BYTE INDX ;I/O Handling (Tables) Indexl( .BYTE RQSTCD ;Device I/O Request Code ( .WORD RTRADR ;Tape Repositioned Return2 .WORD RTRYCD ;Device Error Recovery Request Code .ENDM ;DFENT =LGFCN: DFENT IO.RLB,FREAD,FC.RED,RTYCMD,FC.SPR ;Read Forward 0 DFENT IO.WLB,FWRTE,FC.WRT,RTYCMD,FC.ERS ;Write7 DFENT IO.RLV,FRREV,FC.REV,RTYCMD,FC.SPF ;Read ReverseI: DFENT IO.EOF,FWEOF,FC.WEF,RTYCMD,FC.ERS ;Write Tape Mark7 DFENT IO.ERS,FERSE,FC.ERS, 0, 0 ;Erase 3" GapN1 DFENT IO.RWD,FRWND,FC.RWD, 0, 0 ;Rewind(A DFENT IO.RWU,FRWDU,FC.RWU, 0, 0 ;Rewind Unload/Off-LineR7 DFENT IO.SPB,FSPCR,FC.SPF,SPCONT,FC.SPR ;Space Blocksr6 DFENT IO.SPF,FSPCF,FC.SPF,SPCONT,FC.SPR ;Space Files0 DFENT IO.STC,FSETC, 0, 0, 0 ;Set Char3 DFENT IO.SEC,FSENC, 0, 0, 0 ;Sense Char;SMOU: DFENT IO.SMO,FSMOU, 0, 0, 0 ;Mount/Set CharEENDFCN=. LNGHT=.-SMOU.PAGEE; Function Code Index TableI;RFREAD = 0 ;Read Logical Blocke FWRTE = 2 ;Write Logical Block'FRREV = 4 ;Read Logical Block Reverse,FWEOF = 6 ;Write Tape MarkFERSE = 10 ;Erase 3" GapEFRWND = 12 ;Rewind #FRWDU = 14 ;Rewind Unload/Off-lineTFSPCR = 16 ;Space Blocks,FSPCF = 20 ;Space Files%FSETC = 22 ;Set Tape Characteristics 'FSENC = 24 ;Sense Tape Characteristics *FSMOU = 26 ;Set and Mount CharacteristicsFRTRY = 30 ;Retry in Progress FSPRR = 22 ;Space Block ReverseFSPFR = 24 ;Space File Reverse$; Pre-initiation Processing Routines; PRETBL: .WORD PRERED ;ReadE .WORD PREWRT ;Write  .WORD PREREV ;Read Reverse e .WORD PREEOF ;Write Tape Mark  .WORD PREERS ;Erase 3" Gap .WORD PRECOM ;Rewind O' .WORD PRECOM ;Rewind Unload/Off-line C .WORD PRESPC ;Space Blocks 2 .WORD PRESPC ;Space Files $ .WORD PRESTC ;Set Characteristics & .WORD PRESEC ;Sense Characteristics . .WORD PRESMO ;Mount and Set Characteristics ; Succesful Completion Table; $DONTBL: .WORD REDDON ;Read Forward  .WORD WRTDON ;Write Forward  .WORD REVDON ;Read Reverse O .WORD EOFDON ;Write Tape Mark  .WORD EXTNST ;Erase 3" Gap .WORD RWDDON ;Rewind O' .WORD RWDDON ;Rewind Unload/Off-line ;$ .WORD SPFEXT ;Space Block Forward # .WORD SPFEXT ;Space File Forward l$ .WORD SPFEXT ;Space Block Reverse # .WORD SPFEXT ;Space File Reverse 7 .WORD SMODON ;IO.SMO Rewind Completion (TM03 problem)o) .WORD FATAL ;Error Recovery Completion u.PAGEe; Mask Table - Retriable ErrorsE; DAT= CS! PEF! INCAERRMSK: .WORD COR! DTE! DAT! FCE! FMT! CPR ;Read ForwardD: .WORD COR! DTE! DAT! FCE! FMT! CPR! NSG! DPR ;Write @ .WORD COR! DTE! DAT! FCE! FMT! CPR! OPI ;Read Reverse0 .WORD COR! DAT! CPR! NSG ;Write TMK .WORD 0 ;Erase 3" Gap& .WORD FMT! NEF ;Rewind 1 .WORD FMT! NEF ;Rewind Unl/OfflineO9 .WORD FCE! 00TrqmkTADATADATADATADATADATA OPI ;Space FWD Blocksc8 .WORD FCE! OPI ;Space FWD Files8 .WORD FCE! OPI ;Space REV Blocks8 .WORD FCE! OPI ;Space REV Files .WORD 0 ;No Function; .WORD 0 ;RetryD2; Retry Table; > Error Recovery RETRY Entry Points; $RTYTBL: .WORD REDRTY ;Read Forward  .WORD WRTRTY ;Write  .WORD REVRTY ;Read Reverse F .WORD WRTRTY ;Write Tape Mark $ .WORD FATAL ;Erase - Not Retriable .WORD RWDRTY ;Rewind & .WORD RWDRTY ;Rewind Unload/Off-line .WORD SPRRTY ;Space FWD Blocks .WORD SPFRTY ;Space FWD Files .WORD SPRRTY ;Space REV Blocks .WORD SPFRTY ;Space REV Files 9 .WORD FATAL ;IO.SMO Rewind not retriable (TM03 problem); .WORD FATAL ;Error during Error Recovery - Not Retriable. B; Error Check Table; > Specific Function, ERROR CHECK Entry Points; $CHKTBL: .WORD REDERR ;Read Forward  .WORD COMRTY ;Write  .WORD REVERR ;Read Reverse e .WORD COMRTY ;Write Tape Mark # .WORD FATAL ;Erase 3" Gap - Fatala .WORD RWDRTY ;Rewind & .WORD RWDRTY ;Rewind Unload/Off-line .WORD SPFEXT ;Space FWD Blocks .WORD SPFEXT ;Space FWD Filesc .WORD SPRERR ;Space REV Blocks .WORD SPRERR ;Space REV Files 3 .WORD FATAL ;IO.SMO Rewind - Fatal (TM03 problem)t) .WORD RTYCON ;Retry Frame Count Errors e.PAGEu; Driver Dispatch Table ;n2 DDT$ MM,T$$M03 ;Create the Driver Dispatch Table.;+A; **-MMINI-RH11/RH70 TM02/TM03 Magnetic Tape Controller Initiatora;MB; This Routine is entered from the Queue I/O directive when an I/OF; Request is queued and at the end of a previous I/O operation to pro-E; pagate the execution of the driver. If the specified Controller isE; not busy, then an attempt is made to dequeue the next I/O request. (G; Else a return to the caller is executed. If the dequeue attempt is vH; successful, then the next I/O operation is initiated. A return to the=; caller is then executed. If this unit is currently doing ae=; rewind any requests for it are rejected by the 'Acceptance'd:; routine. These requests will be done when the rewind is ; complete;o;a ; Inputs:-; :; R5=Address of the UCB of the Controller to be Initiated.;r ; Outputs:;y?; If the specified controller is not busy and an I/O request isEC; waiting to be processed, then the request is dequeued and the I/O; operation is initiated. ;-5MMINI: GTPKT$ MM,T$$M03 ;Get an I/O packet to processn;e&; The Following Arguments Are Returned;e; R1 > I/O request packet.0; R2 = Physical Unit Number of requested TM02/3.; R3 = RH Controller Index.e; R4 > Status Control Block.; R5 > Tape Drive UCB.;eD; RH11/RH70 TM02/TM03 Magnetic Tape Function Independent I/O Request; Packet Format:;n"; WD. 00 -- I/O queue thread word.0; WD. 01 -- Request priority, event flag number.5; WD. 02 -- Address of the TCB of the requestor task.=; WD. 03 -- Pointer to second LUN word in requestor task headC; WD. 04 -- Contents of the first LUN word in requestor task headerpB; WD. 05 -- I/O function code (IO.RLB/IO.RWD/IO.SPB/IO.SPF/IO.EOF)0; WD. 06 -- Virtual address of I/O status block.0; WD. 07 -- Relocation bias of I/O status block.<; WD. 10 -- I/O status block address (Displacement + 140000)3; WD. 11 -- Virtual address of AST service routine.-;e.10$: CALL $RQSUB ;Request the Subcontroller. MOV U.KRB1(R5),R2 ;R2 > KRB1. 1 MOVB K1.CON(R2),R3 ;R3 - Formatter Unit Number,e# ASL R3 ; Convert to Word Index.n$ MOV S.PKT(R4),R1 ;R1 > I/O Packet./ MOV #LGFCN,R2 ;R2 > Valid I/O Function Table.L+ MOV I.FCN(R1),R0 ;R0 - QIO Function Code.i0 BICB #US.SUP,U.STS(R5) ;Error Recovery allowed.* CLRB RTTBL+1(R3) ;Clear Diagnostic Flag.' BITB #IQ.UMD,R0 ;Diagnostic Function?t BEQ 20$ ;IF EQ, No.. MOV #100000,RTTBL(R3) ;Indicate Diagnostics,- BISB #US.SUP,U.STS(R5) ; no Error Recovery.,20$: BITB #IQ.X,R0 ;Error Recovery allowed? BEQ 25$ ;IF EQ, No., BISB #US.SUP,U.STS(R5) ;No Error Recovery.D25$: BICB #IQ.X!IQ.UMD!IQ.Q,R0 ;R0 - Funct00Trr4nblion Code for Validation.(30$: CMP R0,(R2) ;Function Code match? BEQ 50$ ;IF EQ, Yes.e# ADD #LNGHT,R2 ;Next I/O Function.c CMP R2,#ENDFCN ;End of table? ( BLO 30$ ;IF LO, No. Check next entry.140$: MOV #IE.IFC&377,R0 ;Yes - Illegal Function.M* CALL $RLSUB ;Release the Subcontroller.$ CALL $IOALT ;End this Request and1 BR MMINI ; service other outstanding Requests.o,50$: MOV R2,IOFCN(R3) ;Remember I/O Request TST (R2)+ ; and" MOV (R2),U.FCDE(R5) ; QIO index.- CLR SPTBL(R3) ;Clear out Spacing Indicator.P% TST RTTBL(R3) ;Diagnostic Function?5) BMI 60$ ;IF MI, Yes - Inhibit Retries./) MOV #RETRY,RTTBL(R3) ;Set Retry Count.e; Request the Controller;k660$: CMPB U.FCDE(R5),#FRREV ;Data Transfer Function? BLOS 70$ ;IF LOS, Yes.e4 CALL $RQCNC ;Request Controller for Control Fnct. BR 80$ ;Perform request.c:70$: CALL $RQCND ;Request Controller for Dt Trnsfr Fnct.#80$: MOV U.KRB1(R5),R3 ;R3 > KRB1.d- CALL SELECT ;Update Device Tape Char Info.L8 MOVB U.FCDE(R5),R0 ;R0 - QIO Index, I/O Function Code.$ MOV S.PKT(R4),R1 ;R1 > I/O Packet.1 MOVB K1.CON(R3),R3 ;R3 - Formatter Unit Number,S" ASL R3 ; Convert to Word Index.1 MOV #FATAL,DONTBL+FRTRY ;Preset Error Address.r* JMP @PRETBL(R0) ;Preprocess I/O Request..PAGE ;+/; **-PRESPC - Preprocess Space Function Request0; ,; This routine Pre-Process's Space Requests.; /; Spacing Function Dependent I/O Packet Format:5;3@; WD. 12 -- Spacing Count (positive=forward, Negative=backward).; WD. 13 -- Not Used.-; WD. 14 -- Not Used.n; WD. 15 -- Not Used.R; WD. 16 -- Not Used.M=; WD. 17 -- Relocation Bias Of Diagnostic Reg. Buffer Addresso7; WD. 20 -- Diag. Reg. Buffer Address (Displ. + 140000)E;-5PRESPC: MOV #IS.SUC&377,R0 ;Assume 0 Space Count andP1 CLR SPTOTL(R3) ; indicate No Blocks Spaced yet.e+ MOV U.BUF(R5),-(SP) ;Current Space Count.e BEQ 40$ ;IF EQ, Done. BMI 10$ ;IF MI, Space REV.o ;Space FWD# MOV #IE.EOV&377,R0 ;May be at EOVw! BIT #M.AEOV,U.CW2(R5) ;At EOV?-2 BNE 40$ ;IF NE, Yes - can't Space FWD from here. NEG (SP) ;I/O Space Count - 2's complement. BR 20$ ;Continuen ;Space REV<10$: BIC #M.AEOV,U.CW2(R5) ;Clear at End of Volume status.3 MOVB #FC.SPR,U.FCDE+1(R5) ;Space REV Function and / ADD #4,U.FCDE(R5) ; Space REV Function Index.B+20$: CLR U.BUF(R5) ;Init for Function Coder& CMP #IO.SPF,@IOFCN(R3) ;Space Files? BNE 30$ ;IF NE, No.5 MOV (SP),SPRMNG(R3) ;Remaining Spacing Count - 2's.e3 MOV (SP),I.PRM+4(R1) ;Save for later calculations.$( MOV #1,(SP) ;Set for MAX Space Count.230$: MOV (SP),U.CNT(R5) ;Current I/O Space Count.2 MOV (SP)+,SPTBL(R3) ;Save for Timeout situation./ BR PWFTST ;Start I/O if no PWFLD Indication. ,40$: TST (SP)+ ;Clean up Stack for Return. JMP EXTNST ;End Request.E.PAGEi;+H; **-PRESMO - IF Tape at BOT, Set Tape Characteristics per User Request.;-*PRESMO: BIT #M.BOT,U.CW2(R5) ;Tape at BOT?5 BNE SMORWD ;IF NE, Yes - Set Tape Characteristics.V' MOV #IE.FHE&377,R0 ;No, Fatal Error -t BR PREXIT ;End Request.;+G; **-SMORWD - Issue REWIND to clear possibly hung EOT status in TM03's.(E; Caused by manually rewinding an Online Tape Unit previously at EOT.f;-;SMORWD: BIC #M.AEOV,U.CW2(R5) ;Not at End of Volume Status.t& BIC #USRBTS!7,U.CW2(R5) ;Prepare for 2 BIC #^C,U.BUF(R5) ; User Controlled Bits.> BIS U.BUF(R5),U.CW2(R5) ;Set User Controlled Characteristics. MOV #FC.RWD,U.BUF(R5) ;Set and # JMP PRCOM ; request I/O REWIND.M3SMODON: BICB #US.PWF,U.STS(R5) ;Clear PWFLD Status.n% CALL SELECT ;Update Tape Char WordE& BR PRESEC ; and end IO.SMO Request.;+); **-PRESTC - Set Characteristics Commandi:; Sets User Controlled Bits in Tape Characteristics Word.;-/PRESTC: BIC #USRBTS!7,U.CW2(R5) ;Prepare for 72 BIC #^C,U.BUF(R5) ; User Controlled Bits.@ BIS U.BUF(R5),U.CW2(R5) ;Set User controlled Characteristics.;+.; **-PRESEC - Return Tape Characteristics Word;-=PRESEC: BIC #M.PEOV,U.CW2(R5) ;No M.PEOV for IO.SMO r00TrqmkTADATADATADATADATADATAequest.S1 MOV U.CW2(R5),R1 ;Return Tape Characteristic's e- MOV #IS.SUC&377,R0 ; and indicate Success. PREXIT: JMP EXIT ;End Request..PAGEe;+*; **-PREWRT - WRITE Request Preprocessing:<; Verify At least Minimum Record Size .and. Write Enabled.;-6PREWRT: MOV #IE.SPC&377,R0 ;Assume Parameter Problems0 CMP #MINREC,I.PRM+4(R1) ;Minimum Record Size?' BHI PREEXT ;IF HI, Record too small.P;+,; **-PREEOF - Write Tape Mark Preprocessing:+; **-PREERS - 3" Gap Erasure Preprocessing:O; Verify Write Enabled.R;-PREEOF:p0PREERS: MOV #IE.WLK&377,R0 ;Assume Write Locked* BIT #M.SWL!M.HWL,U.CW2(R5) ;Write Locked? BNE PREEXT ;IF NE, Yes.( CMPB #FRREV,U.FCDE(R5) ;Data Transfer? BLT PWFTST ;IF LT, No.o;+; **-PRERED - Read Forward and T); PREREV - Read Reverse Preprocessing:b;-PRERED:I0PREREV: MOV S.KRB(R4),R1 ;Retrieve KRB Address.0 BIT #FE.EXT,$FMASK ;22-bit Addressing enabled? BEQ 5$ ;IF EQ, No.p' BIT #KS.MBC,K.STS(R1) ;MASSBUS Device?P BNE 5$ ;IF NE, Yes.! CALL $STMAP ;Setup Unibus Map.R" ASL U.BUF(R5) ;Shift bits <4:5> # ASL U.BUF(R5) ; into bits <8:9>.5 ASL U.BUF(R5) ; ...P ASL U.BUF(R5) ; ...C( CALL $MPUBM ;Setup UMR's for transfer, MOV @S.KRB(R4),R2 ; and restore R2 (=CSR).5$: MOV R5,R1 ;R1 >  ADD #U.BUF,R1 ; U.BUF.r( BIT #FE.EXT,$FMASK ;22-bit Addressing? BNE 10$ ;IF NE, Yes.d ROL (R1) ; Setup  ROL (R1) ; A17, A16n ROL (R1) ; into  ROL (R1) ; Hi Byte.A'10$: CMPB #4,U.FCDE(R5) ;Read Reverse?C BNE PWFTST ;IF NE, No.M" SUB #2,U.CNT(R5) ;Read reverse -- ADD U.CNT(R5),2(R1) ; Adjust Buffer PointerL BCC 15$ ; to end of  ADCB 1(R1) ; Buffer Area./15$: ADD #2,U.CNT(R5) ;Restore Transfer Count. <PWFTST: MOV #IE.ABO&377,R0 ;Request Aborted IF PWFLD Status+ BITB #US.PWF,U.STS(R5) ;Power Fail occur?d# BEQ PRECOM ;IF EQ, No - ContinueR)PREEXT: JMP EXTNST ;Else - End Request.1;+(; **-PRECOM - Common Preprocessing Entry;H3; All requests have been preprocessed successfully.B$; Setup Formatter Mode Control and /; Subsequently perform I/O Function Execution.d;-7PRECOM: MOVB U.FCDE+1(R5),U.BUF(R5) ;Retrieve Function. (PRCOM: MOVB U.SNUM(R5),R0 ;Tape Unit #.# BIS #TC.1600,R0 ;Assume 1600 BPI.I, BIT #M.1600,U.CW2(R5) ;Assumption correct? BNE 10$ ;IF NE, Yes.  BIC #TC.1600,R0 ;Setup for BIS #TC.800,R0 ; 800 BPI.( BIT #M.EVN,U.CW2(R5) ;Even Parity Mode? BEQ 10$ ;IF EQ, No.# BIS #TC.EVN,R0 ;Even Parity Mode.u310$: BIS #TC.FMT,R0 ;Normal Assys/Disassy of Data.F, MOV R0,FMTBL(R3) ;Tape Drive Control Mode.;+; **-FNCEX - Function ExecutionM;OC; Issue I/O Function. RH Controller, Tape Formatter and Tape Drive):; ownership need be synchronized before I/O may proceed.;# ; Inputs:2; R2 = CSR Address R4 > SCB. ; R3 = Formatter Index R5 > UCB.;-*FNCEX: BIT #M.SER,U.CW2(R5) ;Select Error?) BNE SELERR ;IF NE, Yes - Select Error.?! BIT #PIP,MTDS(R2) ;Tape moving?E BEQ 10$ ;IF EQ, No.$ JMP WTRWD ;Wait until Tape Stops.810$: MOV DONTBL+FRTRY,DONADR(R3) ; > Retry Completion. " MTPS #PR5 ;Inhibit Interrupts." CALL SELDRV ;;Select Formatter.> MOV FMTBL(R3),MTTC(R2) ;;Select Tape Drive/Formatting mode.( MOV #TRE!FC.CLR,(R2) ;;Clear Formatter.. MOV U.CNT(R5),MTFC(R2) ;;Setup Command Count.7 BIC #M.AEOV!M.SER!M.RWD,U.CW2(R5) ;;Clear status bits.E3 CMPB U.FCDE(R5),#FRREV ;;Data Transfer Function?  BLOS 20$ ;;IF LOS, Yes.4 BISB #S3.SIP,S.ST3(R4) ;;Positioning in Progress. BR 25$ ;;Issue I/O Function.920$: NEG MTFC(R2) ;;Formatter Frame Count - 2's cmplmnt.M) MOV MTFC(R2),RHWC(R2) ;;RH Controller D ROR RHWC(R2) ;; Word Count.7 MOV U.BUF+2(R5),RHBA(R2) ;;Low order 16 bit address. MOV S.KRB(R4),R1 ;; > KRB.5 BIS #KS.DIP,K.STS(R1) ;;Data Transfer in Progress.n) BIT #FE.EXT,$FMASK ;;22-bit Addressing?e BEQ 30$ ;;IF EQ, No..) BIT #KS.MBC,K.STS(R1) ;;MASSBUS Device?  BEQ 30$ ;;IF EQ, No.e( ADD K.OFF(R1),R1 ;; > to UCB table and, MOV KE.RHB(R1),R1 ;; obtain RHB00Trr4nblAE Offset.% ADD R2,R1 ;;Form I/O page address.a< MOVB U.BUF+1(R5),(R1) ;;HI Order address bits to RHBAE reg.'25$: MOVB U.BUF(R5),(R2) ;;Start I/O. M BR 40$ ;;.. Cont.%30$: MOV U.BUF(R5),(R2) ;;Start I/O.S$40$: MOV U.KRB1(R5),R2 ;; R2 > KRB1 INC K1.STS(R2) ;; K1.STS .NE. ' BIS #S2.ACT,S.ST2(R4) ;; I/O active.r5 BICB #S3.SPU,S.ST3(R4) ;;Clear Spin-Up indication.R2 MOVB S.ITM(R4),S.CTM(R4) ;;Start Timeout Count.) CLR S.FRK+2(R4) ;;Reset Fork Interlock.V MTPS #PR0 ;;Allow Interrupts. RETURN ;+&; **-SELERR-Issue Select Error Message;,A; IF Not Diagnostic or ACP - Issue a Select Error Message to the )+; System Console Terminal every 15 seconds M3; (the unit is subsequently checked once a second),3; until Tape Drive comes ready or Request Aborted. B;-5SELERR: MOV #IE.DNR&377,R0 ;Assume Not Ready Status.49 BITB #US.SUP,U.STS(R5) ;User Mode Diagnostics or IQ.X? $ BNE 5$ ;IF NE, Yes - End Request./ TST U.ACP(R5) ;End Request if associated ACP?l BEQ 10$ ;IF EQ, No.05$: JMP EXTNST ;End Request - Device Not Ready'10$: CALL RLSDRV ;Release Tape Drive,a" CALL $RLSUB ; TM Subcontroller# CALL $RLCN ; and RH Controller.s4 DECB S.STS(R4) ;Time for a 'Select Error' message? BNE TIMER ;IF NE, No.+ MOV #T.NDSE,R0 ;Set up Error Message Code 2 MOVB #15.,S.STS(R4) ; and set up 15 sec Timeout.4 CALL $DVMSG ;Send the Error Message to Sys Consl.,TIMER: MOVB #1,S.CTM(R4) ;Set up a Timeout./TIMER1: CLR S.FRK+2(R4) ;Reset Fork Interlock.1 RETURN ;Wait for Timeout.T.PAGE ;+'; **-MMOUT - Device Timeout Entry PointV;;N; I/O Timeouts may be caused by Powerfailure or other Hardware considerations.;o; TIMEOUT CONSIDERATIONS: ;iI; 1. An RH Controller supports Parallel Operation and requires Concurrent G; Operation synchronization. An RH supports one current Drive Data iJ; Transfer Operation overlapped with other Drive(s) Non Data Transfers.O; There may be further restrictions on each Drive - i.e. Spacing Operations I; on a given Drive may not overlap Data Transfers on the same Drive.r;oL; 2. The RH Controller is operated with Interrupt ENABLED - this may result H; in an Interrupt occuring simultaneously with Driver being called atJ; Timeout Entry point. The Interrupt may be from some external event, =; such as a RWD completing, or a Tape Drive coming Online.p;tM; The Driver must be prepared for such an occurence - this is done by the eM; interlock S.FRK+2; IF S.FRK+2 is Zero, Interrupt processing is allowed. v;aH; 3. Another problem exists when a Driver has QUD a Fork while the Exec L; was sequencing to the same Driver's Timeout Entry Point. Timeout EntryD; code sequences with a Fork Block currently in the Fork Queue. ;p ; Inputs:I; R4 > SCB. R5 > UCB.m;- .ENABL LSB 3MMOUT: TST S.FRK+2(R4) ;;;Interrupt handling I/O ?n+ BEQ 10$ ;;;IF EQ, No - Device timed out.r' RETURN ;;;Interrupt will handle it.y010$: INC S.FRK+2(R4) ;;;Timeout will handle it.! MTPS #PR0 ;;;Allow interrupts.v& CALL $RQSUB ;Request Subcontroller.' CMPB #FRREV,U.FCDE(R5) ;Data Transfer?  BLT 20$ ;IF LT, No.6 CALL $RQCND ;Request Controller for DT XFR Function BR 30$ ; .. Continuer920$: CALL $RQCNC ;Request Controller for Cntrl Function430$: MOV U.KRB1(R5),R3 ;R3 - % MOVB K1.CON(R3),R3 ; Subcontroller t ASL R3 ; as Word Index.;% CALL SELDRV ;Select Subcontroller.R. MOV #IE.DNR&377,R0 ;Assume Not Ready Status.5 BIT #M.RWD,U.CW2(R5) ;Tape Drive in previous Rewind?l BEQ 40$ ;IF EQ, No.; Tape Drive in previous RWD.' BITB #US.ABO,U.STS(R5) ;Abort Request?- BNE 53$ ;IF NE, Yes - End current Request. 1 CALL SELECT ;Tape Drive available for Request?i835$: BCS SELERR ;IF CS, No - Issue 'Select Error' Msg.3 BIT #M.RWD,U.CW2(R5) ;Tape Drive - still RWD mode?N. BEQ 60$ ;IF EQ, No - Start current Request.2WTRWD: CALL RLSDRV ;ELSE Release the Tape Drive,% CALL $RLSUB ; Subcontroller anda! CALL $RLCN ; RH Controller.r! BR TIMER ;W00TrqmkTADATADATADATADATADATAait for one second. (; Tape Drive had I/O previously started.-40$: MOV SPTBL(R3),R1 ;Spacing via BLKS/TMK?B BEQ 52$ ;IF EQ, No. CMP R1,MTFC(R2) ;Blank tape?2 BEQ 50$ ;IF EQ, Yes. End Rqst(Can't Stop Tp Sp)8 MOV MTFC(R2),SPTBL(R3) ;Remember Blocks/TMK's spaced.! MOVB S.ITM(R4),S.CTM(R4) ;Wait  BR TIMER1 ; some more.D; Device I/O Timeout - Current I/O Not Completed in reasonable time.'50$: CALL $DVTMO ;Log Device Timeout. ' BCS 80$ ;IF CS, Diagnostic Function.1 JMP FATAL ;End Request - Space Timeouts Fatal.h-52$: BITB #US.ABO,U.STS(R5) ;Abort Request?  BEQ 55$ ;IF EQ, No.,53$: MOV #IE.ABO&377,R0 ;Indicate Aborting  BR 90$ ; and end Request.@; Timeouts are not retried because the tape position is unknown.;c(55$: BIT #M.SER,U.CW2(R5) ;Select Error? BEQ 50$ ;IF EQ, No - Error. CALL SELECT ;Ready yet? BCS 35$ ;IF CS, No.!60$: JMP PRECOM ;Retry Request.L?; The following handles a timeout during a diagnostic function.c;n480$: CALL SELDRV ;Select Subcontroller/Tape Drive.& CALL MMDINT ;Pass Device Registers.F; NOTE: The following may cause all I/O on other Drive(s) attached to G; the same RH Controller to abort. Other I/O requests will be handledu1; by their respective Driver Timeout handling. E,; *** Exception - Tape Spacing operations.; , MOV #SCLR,RHCS2(R2) ;RH Subsystem Clear - + ; Stop all I/O on that RH Controller.e/ CALL SELECT ;Select Subcontroller/Tape Drivea 90$: JMP EXTNST ; and Request. .DSABL LSB;.PAGES;+; **-MMCAN - Cancel I/O RequestT;->MMCAN: CMP I.TCB(R0),R1 ;Cancel I/O Request for issuing Task? BNE 10$ ;IF NE, No.; BISB #US.ABO,U.STS(R5) ;Indicate I/O Request be Aborted.e 10$: RETURNa;+!; **-MMPWF - Power Fail Recovery u;aI; Powerfail is handled via the Device Timeout Facility - to avoid a race C>; condition that could exist in restarting the I/O Operation.;-/MMPWF: BCS 10$ ;IF CS, Controller Power Fail.p/ BISB #US.PWF,U.STS(R5) ; ELSE, Unit Power FailB(10$: RETURN ; Disallow normal QIO'S.;+;; **-MMINT RH11/RH70 TM02/TM03 Interrupt service routine.i;T5; R3 > KRB R5 > UCB (owner) - data transfer interrupt ,; R5 > UCB (1st slave) - other interrupts;-$MMINT::NOP ;;;" MOV U.KRB1(R5),R4 ;;;R4 > KRB1. MOV K1.OWN(R4),R5 ;;;R5 > UCB.# BNE 10$ ;;;IF NE - Owner exists.n5 MOV (R4),R5 ;;;Use Subcontroller's Tape Drive UCB..#10$: MOV U.SCB(R5),R4 ;;;R4 > SCB.l' TST S.FRK+2(R4) ;;;Fork Block in use? . BNE 18$ ;;;IF NE, Yes. Disregard Interrupt.&; If data transfer - service interrupt, BIT #KS.DIP,K.STS(R3) ;;;Data trfr in prog?* BNE 13$ ;;;IF NE, Yes - service intrpt.4; If interrupt not during non-data I/O - discard it. MOV U.KRB1(R5),R2 ;;;R2 > KRB1 TST K1.STS(R2) ;;;Started I/O? BEQ 14$ ;;;IF EQ, No.;?; Interrupt from SSC and non-data I/O complete asynchronously. ; MOV (R3),R2 ;;;R2 - CSR.i/; If non-data I/O complete - service interrupt.T- BIT #PIP,MTDS(R2) ;;;Non-data I/O complete?$ BEQ 13$ ;;;IF EQ, Yes.  MOV (R2),-(SP) ;;;Isolate I/Os$ BIC #^C<77>,(SP) ;;; Command Code.% CMP #6,(SP)+ ;;;Just completed RWD?;) BEQ 13$ ;;;IF EQ, yes - RWD initiated.t ; If SSC interrupt - discard it.% BIT #SSC,MTDS(R2) ;;;SSC condition? BNE 14$ ;;;IF NE, Yes. -13$: CALL $FORK ;;;Create a system process.r MOV U.KRB1(R5),R1 ;R1 > KRB1.a' CLR K1.STS(R1) ;K1.STS .EQ. I/O over.C TST K1.OWN(R1) ;Owned?- BNE 20$ ;IF NE, Yes - Solicited Interrupt.)4; Presently Unsolicited Interrupts are disregarded..14$: CALL $RQSUB ;Request the Subcontroller,! CALL $RQCNC ; Controller and,. CALL SELDRV ; Formatter/Tape Drive. C BIT #M.RWD!M.SER,U.CW2(R5) ;Previously Rewinding or Select Error?S BEQ 15$ ;IF EQ, No.5 INCB S.CTM(R4) ;Timeout Count - per original value.;'15$: CALL RLSDRV ;Release Tape Drive,5 CALL $RLSUB ; Subcontroller# CALL $RLCN ; and RH Controller.W+ CLR S.FRK+2(R4) ;Reset Fork interlock andc.18$: RETURN ; discard Unsolicited Interupt.120$: B00Trr4nblICB #S3.SIP,S.ST3(R4) ;I/O not in progress.h) BITB #US.ABO,U.STS(R5) ;Abort Request?l BEQ 25$ ;IF EQ, No. MOV #IE.ABO&377,R0 ;Aborting  BR ENDRQS ; Request.(25$: MOV #IS.SUC&377,R0 ;Assume Success/ MOVB K1.CON(R1),R3 ;Retrieve Formatter Number ASL R3 ; and make Word Index.6 MOV DONADR(R3),DONTBL+FRTRY ;Set Retry done Address.. MOVB U.FCDE(R5),R1 ;Retrieve Function Index.7 BIT #M.EOF!M.BOT,U.CW2(R5) ;Tape Mark seen last time?R BEQ 40$ ;IF EQ, No., BIS #M.PEOV,U.CW2(R5) ;Set for EOV check.@40$: BIC #NEWBTS,U.CW2(R5) ;Status bits that may have changed./ CALL SELECT ;Select subcontroller/tape unit.;# BIT #TRE,(R2) ;RH Transfer Error? BNE 50$ ;IF NE, Yes. *45$: BIT #ERR,MTDS(R2) ;Tape Drive Error? BNE 60$ ;IF NE, Yes.A. JMP @DONTBL(R1) ;No I/O Error - End Request. ; RH Controller Transfer Error -350$: BIT #CPE,(R2) ;Parr Err, MASSBUS Control Bus?B) BNE FATAL ;IF NE, Yes - Unrecoverable.l! MOV RHCS2(R2),R0 ;R0 - Possible+ BIC #^C,R0 ; RH Error Indication. BEQ 60$ ;IF EQ, No.+ BIT #DLT!UPE!DPE,R0 ;Repositioning Error?L BNE 67$ ;IF NE, Yes.t BIT #PGE!NED,R0 ;Retry Error?) BNE 57$ ;IF NE, Yes.B BIT #MXF,R0 ;Missed Transfer? BEQ 53$ ;IF EQ, No.# CMPB #4,U.FCDE(R5) ;Read Reverse?J BNE 57$ ;IF NE, No./ BIT #M.BOT,U.CW2(R5) ;BOT during Read Reverse?E BEQ 57$ ;IF EQ, No.* BR 45$ ; .. Check for Tape Drive Error.&53$: BIT #WCE,R0 ;Write Check Error?) BNE FATAL ;IF NE, Yes. (Else, C2.NEM)2(55$: MOV U.CNT(R5),R0 ;R0 - Frame Count NEG R0 ; Request., ADD MTFC(R2),R0 ;Frame Count as Requested? BNE 67$ ;IF NE, Moved.G57$: CALL LOGERR ;Log Error5 JMP FNCEX ;Reissue Request.3; Drive Error Indication - Determine IF RecoverableU*60$: MOV MTER(R2),R0 ;R0 - Error Register( BIT ERRMSK(R1),R0 ;Recoverable Error? BEQ FATAL ;IF EQ, No.) BIT #FMT!CPR!DTE,R0 ;Positioning Known?  BNE 55$ ;IF NE, No.%65$: BIT #MOL,MTDS(R2) ;Drive Ready?T BEQ FATAL ;IF EQ, No - Fatal.+67$: MOV MTER(R2),R0 ;R0 - Error Register.N4 JMP @CHKTBL(R1) ;Recover per Specific I/O Request.%; Unrecoverable Request - End Request7 FATAL: CALL LOGERR ;Log Error.* MOV #IE.FHE&377,R0 ;Unrecoverable Error."ENDRQS: JMP EXTNST ;End Request..PAGE:;+1; **-REVERR - Read Reverse Special Error Checking,; "; Test for Read Reverse into BOT.,; IF BOT THEN IS.SUC and Zero Byte Count.;- .ENABL LSB$,REVERR: BIT #OPI,R0 ;Operation Incomplete?. BEQ REDERR ;IF EQ, No - Not a BOT Condition! BIT #BOT,MTDS(R2) ;Tape at BOT?t+ BEQ FATAL ;IF EQ, No - Errors are Fatal. + BIS #M.BOT,U.CW2(R5) ;Indicate BOT Status. $ CLR MTFC(R2) ;No Data Transferred. BR 50$ ;End Request. ;+!; **-REDERR - Read Error CheckingT;-2REDERR: BIT #INC!PEF!DTE!FMT!CPR,R0 ;Retry Error? BNE 20$ ;IF NE, Yes." BIT #FCE,R0 ;Frame Count Error? BNE 30$ ;IF NE, Yes.U!10$: BIT #PES,MTDS(R2) ;PE Tape? ( BNE 40$ ;IF NE, Yes - Corrected Data.!20$: JMP COMRTY ;Retry Request.-"30$: BIT #TM,MTDS(R2) ;Tape Mark? BEQ 50$ ;IF EQ, No.( MOV #IE.EOF&377,R0 ;EOF Ending Status.< BIS #M.EOF,U.CW2(R5) ;Indicate EOF in Characteristics Word. BR 60$ ;End Request. 40$: CALL LOGERR ;Log Error.)50$: MOV #IS.SUC&377,R0 ;Indicate SucessI(60$: JMP @DONTBL(R1) ; and End Request. .DSABL LSBF;+;; **-RWDERR/RWDRTY - Rewind .OR. Unload/Offline Error RetryY;-RWDERR:T2RWDRTY: BIC #M.1600,U.CW2(R5) ;Setup for 800BPI.2 BIT #TC.1600,FMTBL(R3) ;Last Request at 1600BPI?' BNE 10$ ;IF NE, Yes - Try 800BPI.B2 BIS #M.1600,U.CW2(R5) ;Setup to try at 1600BPI.410$: CMP #RETRY,RTTBL(R3) ;Retried at least once? BNE FATAL ;IF NE, Yes. DECB RTTBL(R3) ;Retry JMP PRCOM ; only once..PAGEC;+,; **-SPRERR - Space Reverse - Error Handling;- .ENABL LSB.,SPRERR: BIT #BOT,MTDS(R2) ;BOT Encountered? BEQ SPFEXT ;IF EQ, No.o+ BIS #M.BOT,U.CW2(R5) ;Indicate BOT Status..& MOV #IS.SUC&377,R0 ;Indicate Success BR 30$ ; and End Request.;+,; **-SPFEXT - Space Forwar00TrqmkTADATADATADATADATADATAd - Error Handling(; Space Functions - Completion Routines;-,SPFEXT: BIT #OPI,R0 ;Operation Incomplete?' BNE FATAL ;IF NE, Yes - Fatal Error.e& MOV #IS.SUC&377,R0 ;Indicate Success*10$: BIT #TM,MTDS(R2) ;Detected Tapemark? BEQ 30$ ;IF EQ, No./ MOV #IE.EOF&377,R0 ;Indicate Tapemark Status.D( CALL CHKEOV ;Check for End of Volume. BCC 15$ ;IF CC, Not EOV.(- MOVB #FRTRY,U.FCDE(R5) ;Set for Backspace. " JMP BACK ;Backspace One Record.&15$: JMP @RTYTBL(R1) ;Any more files?6SPCONT: CLR U.CNT(R5) ;Clear Requested Count for Calc( MOV #IE.EOV&377,R0 ;Assume EOV ending.. BIS #M.AEOV,U.CW2(R5) ;Indicate EOV status./30$: MOV S.PKT(R4),R1 ;Get I/O Packet Address.' CMPB #IO.SPF,I.FCN(R1) ;Space Files??, BEQ SPFDON ;Yes - Endup Files Completion.E; This works because we only get to SPRRTY: for successful completionBB; of the backup (Also MTFC=0), and IO.SPB cannot detect EOV after6; spacing over any blocks. (IO.SPF Doesn't Use U.CNT);T;Space Blocks - FWD/REV;P,SPRRTY: TST MTFC(R2) ;Enough Blocks Spaced? BEQ 35$ ;Yes - End Request.) BIT #TM!BOT,MTDS(R2) ;TMK or BOT seen?; BNE 35$ ;Yes - End Request.- MOV U.CNT(R5),R0 ;Retrieve Requested Count.I2 SUB MTFC(R2),R0 ;Calculate actual number spaced., ADD R0,SPTOTL(R3) ;Add it to total spaced./ MOV MTFC(R2),U.CNT(R5) ;Update Current Countt4 MOV MTFC(R2),SPTBL(R3) ; and save it for timeout." BR 70$ ;Try to Space some more.135$: MOV U.CNT(R5),R1 ;Retrieve Requested Count.o2 SUB MTFC(R2),R1 ;Calculate actual number spaced.0 ADD SPTOTL(R3),R1 ;Additional Space Operations ; done IF after EOT. BR 60$ ;Exit.;+!; **-SPFRTY - Space Files FWD/REV ;-SPFRTY: INC SPRMNG(R3) ;Done?! BNE 70$ ;IF NE, No - Continue.s' MOV #IS.SUC&377,R0 ;Indicate Success,t( BR 50$ ; Setup count and End Request.+SPFDON: BIT #BOT!TM,MTDS(R2) ;BOT or TMK?n! BEQ 70$ ;IF EQ, No - Continue.T, BIT #BOT,MTDS(R2) ;Stopped for BOT or EOV?% BNE 50$ ;Don't increment the countF* BIT #M.AEOV,U.CW2(R5) ; because we didn't BNE 50$ ; pass a file.& INC SPRMNG(R3) ;Increment TMK Count./50$: MOV S.PKT(R4),R1 ;Get I/O Packet Address. / MOV I.PRM+4(R1),R1 ;Retreive Count Requested.)/ SUB SPRMNG(R3),R1 ;Subtract Number remaining.V-60$: NEG R1 ;Set for positive Return Value.  JMP EXIT ;End Request.s70$: JMP FNCEX .DSABL LSBS;+"; **-COMRTY - Common Retry Routine;t&; IF Retries Suppressed - End Request-; ELSE Call Function Specific Retry Routineo;-$COMRTY: CALL LOGERR ;Log the Error) MOVB U.FCDE(R5),R1 ;R1 - Function IndexN+ BITB #US.SUP,U.STS(R5) ;Retries allowed?R$ BNE 10$ ;IF NE, No - End Request.( DECB RTTBL(R3) ;Any more Retries left?$ BLE 10$ ;IF LE, No - End Request.0 MOV U.FCDE(R5),FCCDE(R3) ;Save Function Index/ MOV U.CNT(R5),CMDCNT(R3) ;Save Command CountJ0 MOV U.BUF(R5),BUFADR(R3) ;Save Buffer Address, MOVB #FRTRY,U.FCDE(R5) ;Set Retry Command7 JMP @RTYTBL(R1) ;GOTO Function Specific Retry routineo)10$: BIT #PEF!OPI,R0 ;Tape Format Error?E BEQ RTYCN1 ;IF EQ, No.;" MOV #IE.BBE&377,R0 ;Other Error.&RTYCON: JMP @DONTBL(R1) ;End Request.1RTYCN1: MOV #IE.VER&377,R0 ;Request Return Code.o BR RTYCON ;End Request..PAGE,;+; -- Write/WTMK Retry --;- .ENABL LSB (WRTRTY: MOV #FRTRY,R1 ;R1- Retry Index.3 MOV #RTNWRT,DONTBL(R1) ;I/O Cont after Reposition.3/ MOV #FC.SPR,U.BUF(R5) ;Setup I/O Request Code.  BR 15$ ;Reposition Tape.T.RTNWRT: BIT #M.IXG,U.CW2(R5) ;No Extended IRG? BNE RTYCMD ;IF NE, Yes.% BR BACK ;Recover from Write Error. ;+; -- Read FWD/REV Retry --;-REDRTY:N2REVRTY: CMP MTFC(R2),#NOISE ;800BPI - Min Record?% BLO RTYCMD ;IF LO, No - Ignore it. 'BACK: MOV #FRTRY,R1 ;R1 - Retry Index.e MOV IOFCN(R3),R0 ;R0 >" ADD #4,R0 ; Reposition Return.1 MOV (R0)+,DONTBL(R1) ;I/O Cont after Reposition.e- MOV (R0),U.BUF(R5) ;Setup I/O Request Code./115$: MOV #-1,U.CNT(R5) ;Reposition by one Block.T BR 20$ ;+; Reissue Original I/O Request;-9RT00Trr4nblYCMD: MOV FCCDE(R3),U.FCDE(R5) ;Restore Function Index,+ MOV CMDCNT(R3),U.CNT(R5) ; Command Count,N- MOV BUFADR(R3),U.BUF(R5) ; Buffer Address -c,20$: JMP FNCEX ; and Execute the Function. .DSABL LSBF.PAGE ;+-; **-REDDON - Read Forward Completion RoutineD;-EREVDON: BIC #M.EOF!M.AEOV,U.CW2(R5) ;Setup Status for REV completion.i8REDDON: MOV MTFC(R2),R1 ;Set Frame Count for Requestor./; TM03 Formatter - Auto Density setup on Reads.B6; IF TM03, Update Density Status for that Tape Unit. TM03DN: BIT #40,MTDT(R2) ;TM03? BEQ 5$ ;IF EQ, No.M/ BIT #M.BOT!M.RWD,U.CW2(R5) ;BOT or Rewinding?B BNE 5$ ;IF NE, Yes.( BIC #M.1600,U.CW2(R5) ;Assume 800BPI. BIT #PES,MTDS(R2) ;800 BPI?  BEQ 5$ ;IF EQ, Yes.' BIS #M.1600,U.CW2(R5) ;Else 1600BPI.5$: TSTB R0 ;Returning Error?.) BMI EXIT ;IF MI, Yes - More important.' BIT #BOT,MTDS(R2) ;Read REV into BOT?  BNE EXIT ;IF NE, Yes.0 CMP MTFC(R2),#NOISE ;Record at least Min Size? BHIS 10$ ;IF HIS, Yes. & BIT #M.1600,U.CW2(R5) ;1600 BPI Tape?3 BNE EXIT ;IF NE, Yes -LT Min allowed for 1600BPI,- JMP COMRTY ;LT Min not allowed for 800BPI.E810$: CMP R1,U.CNT(R5) ;Tape Data - More than Requested?# BLOS EXIT ;IF LOS, No - Success.Q& MOV #IE.DAO&377,R0 ;Inform the User. BR EXIT ;End Request.;+0; **-EOFDON - Write Tape Mark Completion Routine4; **-WRTDON - Write Logical Block Completion Routine;-)EOFDON: BIS #M.EOF,U.CW2(R5) ;TMK status.c4WRTDON: MOV U.CNT(R5),R1 ;Retrieve Requested Count.+ ADD MTFC(R2),R1 ;Calculate Actual Length.I BIT #EOT,MTDS(R2) ;EOT?o BEQ EXIT ;IF EQ, No.M/ MOV #IE.EOT&377,R0 ;EOT - Request End Status.P8 BIS #M.EOT,U.CW2(R5) ;EOT in Tape Characteristics Word. BR EXIT ;End Request./RWDDON: BIT #PIP,MTDS(R2) ;Rewind in progress?T BEQ 10$ ;IF EQ, Done.3 BIS #M.RWD,U.CW2(R5) ;Indicate Rewind in Progress.T:10$: BIC #M.AEOV,U.CW2(R5) ;No End of Volume indication.- BICB #US.PWF,U.STS(R5) ;Clear PWRFLD Status..6EXTNST: CLR R1 ;No additional Status being Returned.#EXIT: MOV @S.KRB(R4),R2 ;R2 = CSR.,0 CALL MMDINT ;Pass Dev Regs IF User Mode Diag." CALL RLSDRV ;Release the Drive.+ MOV U.KRB1(R5),R3 ;Retrieve KRB1 Address.a+ MOVB K1.CON(R3),R3 ;Get Formatter Number. ASL R3 ;Make a Word Index.e% MOVB RTTBL(R3),R2 ;Set Retry Count.D) BIS #RETRY*256.,R2 ;Set Original Count.d+ BIC #M.PEOV!7,U.CW2(R5) ;No PEOV Status.;. BICB #US.ABO,U.STS(R5) ;Clear Abort Status., BICB #S3.SIP,S.ST3(R4) ;Clear Status Bit.* CALL $RLSUB ;Release the Subcontroller." CALL $RLCN ;Release Controller.< BIC #S2.ACT,S.ST2(R4) ;Clear Intrpts active - If Timeout., CLR S.FRK+2(R4) ;Clear the Fork Interlock. CALL $IODON ;End the Request./ JMP MMINI ;Service outstanding I/O Requests.k;+-; **-CHKEOV - Check For Logical End Of VolumeD;B ; Outputs: ; C=1 If EOV; C=0 If Not EOV;-CHKEOV: CLC ;Assume Not EOV.s$ BIT #REV,U.BUF(R5) ;REV Operation?& BNE 20$ ;IF NE, Yes - can't be EOV.+ MOV MTFC(R2),-(SP) ;Retrieve frame Count.h4 SUB U.CNT(R5),(SP) ;Obtain number actually Spaced. CMP (SP)+,#1 ;Exactly One? CLC ;Assume Not EOV. BNE 10$ ;IF NE, No - not EOV.( BITB #US.LAB,U.STS(R5) ;Labelled Tape? BNE 10$ ;IF NE, Yes - No EOV.4 BIT #M.PEOV,U.CW2(R5) ;TMK or BOT seen last time? BEQ 10$ ;IF EQ, No - CC.B SEC ;EOV. )10$: BIS #M.EOF,U.CW2(R5) ;Set EOF status 20$: RETURN .PAGEV;+; **-SELDRV - Select Tape Unit,; **-SELECT - Select And Set Hardware Status;V,; This routine attempts to select a drive. I; It sets up BOT, EOT, HWL, SER bits in the Tape Characteristics Word.n; ; Outputs:; C=0 If Good Select; C=1 If Bad SelectO;-%SELDRV: MOV @S.KRB(R4),R2 ;R2 - CSR.3 MOVB U.UNIT(R5),RHCS2(R2) ;Select the formatter.R BIT #GO,(R2) ;Go Bit Set?m+ BNE 10$ ;IF NE, Yes - don't touch MTTC !V1 MOV MTTC(R2),-(SP) ;Save Slave Select Register.: MOVB U.SNUM(R5),(SP) ;Select " MOV (SP)+,MTTC(R2) ; Slave Unit. 10$: RETURN 2SELECT: CALL SELDRV ;Select Formatter and Slave.> B00TrqmkTADATADATADATADATADATAIC #M.BOT!M.EOT!M.HWL!M.SER,U.CW2(R5) ;Status to be updated.( SEC ;Assume can't select Tape Drive.& BIT #MOL,MTDS(R2) ;Tape Drive Ready? BNE 10$ ;IF NE, Yes.R2 BIS #M.SER,U.CW2(R5) ;Select Error - indicate it. RETURN 110$: BIT #PIP,MTDS(R2) ;Positioning in Progress?; BNE 20$ ;IF NE, Yes.M! BIT #BOT,MTDS(R2) ;Tape at BOT?S BEQ 15$ ;IF EQ, No." BIS #M.BOT,U.CW2(R5) ;BOT status,& BIC #M.RWD,U.CW2(R5) ; not Rewinding.%15$: BIT #EOT,MTDS(R2) ;Tape at EOT?c BEQ 20$ ;IF EQ, No." BIS #M.EOT,U.CW2(R5) ;EOT status.120$: BIT #WRL,MTDS(R2) ;Tape Drive Write-Locked?e BEQ 30$ ;IF EQ, No." BIS #M.HWL,U.CW2(R5) ;HWL status."30$: CLC ;Tape Drive available. RTRN: RETURN;+.; **-LOGERR - Subroutine To Log Device Errors;-+LOGERR: TST RTTBL(R3) ;User Mode Function?,. BMI RTRN ;IF MI, Yes - They will handle it.. JMP $DVERR ;Log the Error - They will RTRN..PAGE;+!; **-$RQSUB-Request Subcontroller;:#; Obtain Access To Subcontroller - BA; IF Allowed to perform an I/O Operation, Set Subcontroller Busy.#;, ; Inputs:T2; R5 > UCB, Requestor Unit. 0(SP)= > Driver Return; 2(SP)= > Drivers Caller. ; Outputs: ; R4 > SCB, ; R5 > UCB, Requestor Unit.;; NOTE:R; S.FRK+2 is Always Non-Zero.r/; Driver has Exclusive Access to Subcontroller.c;-$$RQSUB: MOV U.SCB(R5),R1 ;R1 > SCB. MOV U.KRB1(R5),R0 ;R0 > KRB1.e9 CMP R5,K1.OWN(R0) ;Requestor already own Subcontroller?u BEQ 10$ ;IF EQ, Yes.n% TST K1.OWN(R0) ;Subcontroller Busy?w BNE 20$ ;IF NE, Yes.a5 MOV R5,K1.OWN(R0) ;Requestor - Subcontroller Owner.U ; Requestor Subcontroller Owner.(10$: MOV R1,R4 ;Subcontroller Owner - 0 MOV #42,S.FRK+2(R4) ; IF S.FRK+2 .NE. - owned. RETURN>; Requestor not Subcontroller Owner .and. Subcontroller Busy. 420$: MOV R1,S.FRK+6(R1) ; Save SCB in R4 Save Area.+ ADD #S.FRK+6,R1 ; R1 > to R5 Save Area+2;1 MOV R5,-(R1) ; Save R5,e, MOV (SP)+,-(R1) ; Save Drivers Return @,& CLR -(R1) ; and Clear Link Word.% ADD #K1.CRQ,R0 ; R0 > to Wait Queue( JMP $QINSF ; and Queue this Request.;+!; **-$RLSUB-Release Subcontrollere;0; IF Requestor not Subcontroller Owner, Return. ;F>; ELSE Release Subcontroller, place Fork Block for subsequent:; Requests (if any) from the Controller Wait Queue to the ?; Fork Queue and make Requestor the Owner of the Subcontroller.1;t ; Inputs:r ; R4 > SCB, ; R5 > UCB of Requestor. V;P ; Outputs:#; IF Owned - Subcontroller Released ; R3 Altered ;-&$RLSUB: MOV U.KRB1(R5),R3 ;R3 > KRB1.1 CMP R5,K1.OWN(R3) ;Requestor own Subcontroller? BNE 30$ ;IF NE, No.; Requestor owns Subcontroller.r2 CLR K1.OWN(R3) ;Release Subcontroller ownership.!; Handle other Requestors Queued. 3 ADD #K1.CRQ,R3 ;R3 > Subcontroller Request Queue.e, MOV (R3),R4 ;Any other Requestors Queued?. BEQ 20$ ;IF EQ, No other Requestors Queued.* MOV (R4),(R3) ;Update Beginning of List. BNE 10$ ;IF NE, List updated. MOV R3,2(R3) ;Empty list. B10$: MOV 4(R4),K1.OWN-K1.CRQ(R3) ;Prev Reqstr - R5 from Fork List." CLR (R4) ;Clear Fork Link Word.) CALL $QFORK ;Fork Block to Fork Queue. !20$: MOV U.SCB(R5),R4 ;R4 > SCB.3 30$: RETURNu;+; **-RLSDRV - Release the Driveq;tL; IF A Multi Access (Dual Ported) Unit, Issue Drive Release and note in SCB.; ; Inputs: ; R2 > CSR.e ; R4 > SCB.$;-ERLSDRV: MOVB #TRE/256.,1(R2) ;Clear RH errors - CS1 14,13; CS2 15-8.L# BIT #PIP,MTDS(R2) ;Tape movement?.1 BNE 5$ ;IF NE, Yes - Can't init RH, tape subsyW1 MOV #TRE!10,(R2) ;Clear RH errors, selected TM.R"5$: BIT #S2.MAD,S.ST2(R4) ;RH01? BEQ 10$ ;IF EQ, No.2 MOVB #FC.RLS,(R2) ;Release Drive (Subcontroler).? BISB #S3.DRL,S.ST3(R4) ; and Show Dual Access Unit released.A*10$: MOVB #IE,(R2) ;Re-enable Interrupts. RETURN .PAGEe;+ ; **-MMDINTn;s"; IF Diagnostic Control Function, +; pass Device Registers via $CRPAS routine.o;- ; Inputs: ; R2 > CSR R4 > SCB ;-MMDINT: MOV R1,-(SP) ;Save R1* MOV S.PKT(R4),R1 ;Get I/O Packet Address3 BITB #IQ.UMD,I.00Trar7rblFCN(R1) ;Diagnostic Function Call?  BEQ 20$ ;IF EQ, No.; CMPB #IO.EOF/256.,I.FCN+1(R1) ;Write EOF Control Function?D BEQ 10$ ;IF EQ, Yes.S: CMPB #IO.RWD/256.,I.FCN+1(R1) ;Control other than IO.EOF? BEQ 10$ ;IF EQ, Yes.-4 CALL $CRPAS ;Pass Device Registers to Diagnostics BR 20$ ; .. Cont.510$: MOV I.PRM+14(R1),I.PRM+16(R1) ;Move WD20 to WD21u1 MOV I.PRM+12(R1),I.PRM+14(R1) ;Move WD17 to WD20' MOV R1,-(SP) ;Save I/O Packet AddressT4 CALL $CRPAS ;Pass Device Registers to Diagnostics* MOV (SP)+,R1 ;Restore I/O Packet Address6 MOV I.PRM+14(R1),I.PRM+12(R1) ;Move WD20 back to WD176 MOV I.PRM+16(R1),I.PRM+14(R1) ;Move WD21 back to WD2020$: MOV (SP)+,R1 ;Restore R1 RETURNI .ENDBEQ 10$ ;IF EQ, Yes.-4 CALL $CRPAS ;Pass Device Registers to Diagnostics BR 20$ ; .. Cont.510$: MOV I.PRM+14(R1),I.PRM+16(R1) ;Move WD20 to WD21u1 MOV I.PRM+12(R1),I.PRM+14(R1) ;Move WD17 to WD20' MOV R1,-(SP) ;Save I/O Packet AddressT4 CALL $CRPAS ;Pass Device Registers to Diagnos;?; MMPRE.MAC - PREFIX FILE FOR BUILDING MM LOADABLE CRASH DRIVERO;p; Created 28-JAN-88O;*C$$CDA=0 ; LOADABLE CRASH DRIVER SUPPORT3L$$CDA=0 ; LOADABLE CRASH DRIVERS TO BE ASSEMBLEDMM$$CD=0 ; CRASH DRIVER IS MMRIVERS TO BE ASSEMBLEDDL$$CD=0 ; CRASH DRIVER IS DU .TITLE MPENTC .IDENT /03.00/D R;; COPYRIGHT (C) 1979,1980,1984/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.T;MA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDM9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.O;H; K. E. KINNEAR 26-JAN-79A;A'; MULTIPROCESSOR CPU STARTUP PROCESSINGE;E; MODIFIED BY:;R; J. W. BERZLE 08-SEP-83 03.00;2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES;C ; D; THE FOLLOWING CODE IS DUPLICATED IN INITL.MAC, AND IS USED TO SET D; THE MAPPING FOR STARTUP OF A CPU. ANY MODIFICATIONS HERE MUST BE -; REFLECTED IN THE SIMILAR CODE IN INITL. F ;  A;C; MACRO LIBRARY CALLSE; .MCALL BGCK$A A .IF DF M$$PRO B$PENT:: MOV #PMODE!PR7,PS ;;;INIT MODE BITS & LOCK OUT INTERRUPTS 3 MOV #$STACK-20,SP ;;;SET UP KERNEL STACK POINTER E5 MOV #KINAR0,R5 ;;;INIT POINTER TO MAPPING REGISTERS I( CLR R1 ;;;INIT I SPACE MEMORY OFFSET  .IF DF K$$DAS N . MOV $SCMOF,R2 ;;;INIT D SPACE MEMORY OFFSET % BNE 5$ ;;;IF NE DATA SPACE LOADED & TST $URMST ;;;IS THIS FROM INITL? * BNE 5$ ;;;IF NE NO -- REGULAR CPU ENTRY 8 MOV #$MESS1,R4 ;;;SPECIFY DATA SPACE NOT LOADED MESSAGE/ CALL $FATAL ;;;PRINT OUT FATAL ERROR MESSAGE 2 BGCK$A BF.MP,BE.NDS,HALT ;;;DATA SPACE NOT LOADED5$: SUB #200,R2 ;;; V  .IFTF 6$: ;;;REFERENCE LABEL .IFT 4 MOV #77406,KDSDR0-KINAR0(R5) ;;;SET D SPACE 4K RW 5 MOV R2,KDSAR0-KINAR0(R5) ;;;SET D SPACE APR OFFSET - ADD #200,R2 ;;;ADVANCE D SPACE APR OFFSET R4 MOV #77402,KINDR0-KINAR0(R5) ;;;SET I SPACE 4K RO .IFF I 4 MOV #77406,KINDR0-KINAR0(R5) ;;;SET I SPACE 4K RW  .IFTF ) MOV R1,(R5)+ ;;;SET I SPACE APR OFFSET R) ADD #200,R1 ;;;ADVANCE I SPACE OFFSET CMP R5,#KINAR7 ;;;DONE YET?  BLOS 6$ ;;;IF LOS NO . MOV #177600,KINAR7 ;;;SET UP I/O PAGE MAPPING .IFT V 3 MOV #177600,KDSAR6+2 ;;;SET UP D-SPACE MAPPING TOO ( CLR (R5) ;;;CLEAR DSPACE APR0 OFFSET  .ENDC ! .IF DF K$$DAS!M$$EXT!S$$LIB M " MOV #S3$BTS,SR3 ;;;SET UP SR3  .ENDC $ INC SR0 ;;;START MEMORY MAPPING ; ?; WE HAVE, WITH THE LAST INSTRUCTION, JUST CHANGE THE MAPPING I>; THROUGH WHICH THE CPU IS FETCHING INSTRUCTIONS. I007rqmkTADATADATADATADATADATAF WE ARE ?; ON CPA THEN NO ACTUAL CHANGE WAS MADE, BUT IF ON SOME OTHER TC; CPU, THEN WE ARE NOW FETCHING INSTRUCTIONS FROM THE NEW MAPPING. ; , TST $URMST ;;;WERE WE CALLED FROM INITL? + BNE 7$ ;;;IF NE NO -- DON'T RETURN THERE ;' JMP $INITM ;;;RETURN BACK TO INITL *7$: MOV #PARTB,R5 ;;;SET RETURN ADDRESS / MOV #$NS0,SP ;;;SET UP STACK FOR CPU STARTUP E4$MAPCP::MOV $IICTB,R1 ;;;GET AN IIST KRB (ANY ONE) - MOV #9$,-(SP) ;;;SET UP RETURN FROM $SGFIN T& TST $URMST ;;;IS THIS THE FIRST CPU?* BNE 5$ ;;;IF NE NO -- IIST MUST BE THERE& ;;;SO DONT $SGFIN ON CPA'S VECTORS4 CALL $SGFIN ;;;ON CPA, TRAP NON-EXISTANT IIST REGS.5$: MOV @(R1),R0 ;;;GET IIST REGISTER (IF ANY), BCS 8$ ;;;IF CS NO REGISTER -- CPA FORCED ) SWAB R0 ;;;PUT CPU NUMBER IN LOW BYTE * BIC #177770,R0 ;;;CLEAR EXTRANEOUS BITS ) CMPB R0,$NCPU ;;;TOO HIGH A PROCESSOR? R) BGE 8$ ;;;IF GT YES -- MAKE CPA AGAIN T& ASL R0 ;;;MAKE CPU INTO WORD INDEX 3 MOV $IICTB(R0),R1 ;;;GET PROPER IIST KRB ADDRESS : BIC #KS.OFL,K.STS(R1) ;;;CLEAR OFFLINE BIT FOR THIS IIST 6 MOV (R1),$PWCSR ;;;SAVE IIST CSR FOR POWER UP ROUTINE! ;;;IN CPA'S CPU SPECIFIC AREA$ RETURN ;8$: CLR R0 ;;;FORCE TO CPA 8 RETURN G39$: MOV $K6TAB(R0),KINAR0 ;;;SET UP LOCAL MAPPING L  .IF DF K$$DAS 4 MOV $K6TAB(R0),KDSAR0 ;;;SET UP FIRST D SPACE PAR  .ENDC 0 MOV #$STACK-20,SP ;;;SET UP PROPER STACK AREA , MOV R5,-(SP) ;;;MAKE INTO SUBROUTINE CALL  .IF DF X$$DBT P ; BIT $CPBIT,$XDTFL ;;;HAS XDT BEEN INITIALIZED ON THIS CPU?A BNE 12$ ;;;IF NE YES " CALL $XDTIN ;;;INITIALIZE XDT ?12$: MOV #PMODE!PR7,PS ;;;SET UP MODE BITS AFTER XDT SCREWS IT  .ENDC ; F; INITIALIZE THE UNIBUS MAPPING REGISTERS ON THIS PROCESSOR IF IT IS #; A PDP-11/7X TYPE PROCESSOR. S ; 2 CALL $SGFIN ;;;CATCH MEMORY FAULTS AND SET CARRY4 MOV #UBMPR,R0 ;;;POINT TO FIRST UNIBUS MAP REGISTER% BIC #HF.UBM,$HFMSK ;;;ASSUME NO UMRSN TST (R0) ;;;ARE UMRS PRESENT?1 BCS 20$ ;;;IF CS NO 5 BIS #HF.UBM,$HFMSK ;;;INDICATE THAT UMRS ARE PRESENTS- MOV KINAR0,R3 ;;;GET MAPPING OF VIRTUAL ZERO ( CLR R2 ;;;CLEAR HIGH PART OF UMR VALUE2 ASHC #6,R2 ;;;CONVERT TO DOUBLE WORD BYTE OFFSET' MOV R3,(R0)+ ;;;SET UP LOW HALF OF UMR % MOV R2,(R0)+ ;;;AND HIGH HALF OF UMR  .IF DF K$$DAS C . MOV $SCMOF,R3 ;;;PICK UP OFFSET TO DATA SPACE! CLR R2 ;;;SET FOR CONVERSION F2 ASHC #6,R2 ;;;CONVERT TO DOUBLE WORD BYTE OFFSET) MOV #4,R1 ;;;SET COUNT OF UMR'S TO LOAD#015$: MOV R3,(R0)+ ;;;LOAD LOW 16 BITS OF ADDRESS, MOV R2,(R0)+ ;;;LOAD HIGH 6 BITS OF ADDRESS* ADD #20000,R3 ;;;BUMP ADDRESS BY 4K WORDS ADC R2 ;;;...O! SOB R1,15$ ;;;LOOP FOR ALL UMRSM .IFF A  CLR R1 ;;;INIT UMR OFFSET 4 MOV #4,R2 ;;;SET NUMBER OF REGISTER PAIRS TO LOAD +15$: ADD #20000,R1 ;;;ADVANCE UMR OFFSET T. MOV R1,(R0)+ ;;;LOAD LOW 16 BITS OF ADDRESS - CLR (R0)+ ;;;CLEAR HIGH 6 BITS OF ADDRESS ! SOB R2,15$ ;;;LOOP FOR ALL UMRS  .ENDC 20$: RETURN ;;;R ; A; SCAN PARITY MEMORY CSR REGISTERS AND CREATE TABLE FOR THIS CPU ; 5PARTB: MOV #$DIRXT,-(SP) ;;;EXIT FINALLY TO $DIRXT 1 CALL $SGFIN ;;;CATCH TRAPS TO 4 AND SET CARRY ;3 MOV #$PARTB,R0 ;;;GET ADDRESS OF PARITY CSR TABLE 0' MOV R0,R1 ;;;COPY ADDRESS OF TABLE R3 MOV #1,(R1)+ ;;;INSERT A ONE IN FIRST TABLE ENTRY C- MOV #$CSRTB,R4 ;;;GET ADDRESS OF CSR TABLE ;516$: MOVB (R4)+,R3 ;;;GET NUMBER OF CSR'S TO SET UP  BEQ 22$ ;;;IF EQ DONE % CLR R2 ;;;INITIALIZE CSR ADDRESS R* BISB (R4)+,R2 ;;;CALCULATE CSR ADDRESS + SWAB R2 ;;;GET HIGH BYTE OF CSR ADDRESS M/ BISB (R4)+,R2 ;;;GET LOW BYTE OF CSR ADDRESS C"17$: TST (R2) ;;;CSR PRESENT?  BCS 19$ ;;;IF CS NO R$ MOV R007r srbl2,(R1)+ ;;;SAVE CSR ADDRESS  BR 20$ ;;; P319$: MOV R0,(R1)+ ;;;POINT TO FIRST WORD OF TABLE '20$: ADD #2,R2 ;;;POINT TO NEXT CSR ; SOB R3,17$ ;;;LOOP UNTIL DONE:3 BR 16$ ;;;CONTINUE THROUGH THE REST OF THE TABLE B ; B; CLOCK INITIALIZATION -- CLOCKS ON ALL SECONDARY PROCESSORS MUST D; BE THE SAME TYPE AS THE PRIMARY PROCESSOR (I.E. EITHER ALL KW11-L "; OR KW11-P) OR WE WILL HALT ; -22$: TST @$CKCSR ;;;IS THE CLOCK AVAILABLE R BCC 25$ ;;;IF CC YES 4 BGCK$A BF.MP,BE.NCK,HALT ;;;NO -- CLOCK UNAVAILABLE+25$: CMP #172540,$CKCSR ;;;IS IT KW11-P 2 BNE 30$ ;;;IF NE NO / MOV #$CKINT,@#104 ;;;SET UP KW11-P INTERRUPT T0 MOV #$NONSI,@#100 ;;;DISABLE KW11-L INTERRUPT  BR 40$ 930$: MOV #$NONSI,@#104 ;;;ASSUME KW11-L - DISABLE KW11-P S/ MOV #$CKINT,@#100 ;;;SET UP KW11-L INTERRUPT I* TST $CKCSR ;;;DOES THE CLOCK HAVE A CSR? BEQ 45$ ;;;IF EQ NO 740$: MOV $CKLDC,@$CKCNT ;;;SETUP CLOCK COUNT REGISTER L' MOV #K$$IEN,@$CKCSR ;;;START CLOCK 45$: ;;;REFERENCE SYMBOLO  .IF DF F$$LPP T ( TST PIRQ ;;;IS THERE A PIRQ REGISTER  BCS 50$ ;;;IF CS NO E+ MOV #$FPPRQ,@#240 ;;;SET UP PIRQ VECTOR L: MOV #$FPPR8,@#244 ;;;SET UP FLOATING POINT EXCEPTION VEC 50$: ;;;REFERENCE LABEL M  .ENDC G; MOVE $HFMSK FROM CPA'S LOWCR INTO THAT OF THE PROCESSOR COMING ONLINE0 MOV KISAR6,-(SP) ;;;SAVE CURRENT KERNEL MAPPING* CLR KISAR6 ;;;MAP TO CPA'S LOW CORE AREA7 MOV $HFMSK+140000,$HFMSK ;;;PROPAGATE TO NEW PROCESSOR+ MOV (SP)+,KISAR6 ;;;RESTORE KERNEL MAPPING  LOCK$ $EXECL,WAIT ; LOCK$ $IIFNL,SPIN ;;;LOCK THE MULTIPROCESSOR FUNCTION TBL 0 BIC #MP.STP,@$MPSWT ;;;CLEAR OUT OUR STOP BIT - ULOCK$ $IIFNL,SPIN ;;;UNLOCK THE FN TABLE & CALL $CPNIT ;;;START UP PROCESSOR  .IF NDF X$$DBT 1$XDTIN:: ;;;REFERENCE LABEL -- NULL SUBROUTINE E  .IFTF  RETURN  .ENDC  .ENDC  .END  LOCK$ $EXECL,WAIT ; LOCK$ $IIFNL,SPIN ;;;LOCK THE MULTIPROCESSOR FUNCTION TBL 0 BIC #MP.STP,@$MPSWT ;;;CLEAR OUT OUR STOP BIT - ULOCK$ $IIFNL,SPIN ;;;UNLOCK THE FN TABLE & CALL $CPNIT ;;;START UP PROCESSOR  .IF NDF X$$DBT 1$XDTIN:: ;;;REFERENCE LABEL -- NULL SUBROUTINE E  .IFTF .TITLE MPTBL$ .IDENT /02.04/N; ,; COPYRIGHT (C) 1974, 1978, 1979, 1980, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.M; A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDA9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.N; ; VERSION 02.04 ;;; T. J. MILLER 23-OCT-77;); MODIFIED FOR RSX-11M-PLUS VERSION 1 BY:T; ; K. E. KINNEARR; J. E. PROVINO$; B. A. O'CONNELLG;A; MODIFIED BY:;.; B. S. MCCARTHY 11-AUG-80;.=; BM072 -- CORRECT GRP GBL EVENT FLAG USE COUNT MANIPULATION; ; J. E. POLLACK 26-NOV-808;9<; JEP022 -- REMOVE QMCR GIN$ FUNCTION AND ADD SET PRIVILEGE;; B. S. MCCARTHY 16-DEC-80;D5; BM100 -- ADDITION OF USER D SPACE SUPPORT, RESERVEA-; USER DICS, RESERVE FUTURE DIRECTIVE DICS.;E; B. S. MCCARTHY 18-MAR-81;R2; BM125 -- MOVE DIRECTIVE AND GIN TABLES TO DRTB2;Y; B. S. MCCARTHY 29-SEP-81;E(; BM162 -- CORRECT LENGTH OF DPB BUFFER;D<; MULTIPROCESSOR TABLES AND DIRECTIVE DISPATCHER IMPURE AREAK; (IN A MULTI-PROCESSOR SYSTEM THIS MODULE CAN EITHER BE PROCESSOR-SPECIFIC9; OR IN THE COMMON DATA AREA) ;C; LOCAL DATA-ADJACENCY ASSUMED;.)$USRPS::.BLKW 1 ;POINTER TO USER PS WORDI)$BTRMV::.BLKW 1 ;BYTES TO REMOVE ON EXITS6$DICSV::.BLKW 16. ;BUFFER FOR DPB (THIS MUST INCREASE% ;WHENEVER THE SIZE OF THE LARGESTD ;COPIED DPB CHANGES);A; MULTIPROCESSOR INTERPROCESSOR INTERRUPT FUNCTION DISPATCH TABLEP;U .IF DF M$$PRO0$MPDSP::.WORD $CRAL1 ;MP.CRH -- CRASH PROCESSOR5 .00 ssmkTADATADATADATADATADATAWORD $PWRMP ;MP.PWF -- SOME CPU DETECTED POWERFAILE4 .WORD $IISLM ;MP.RSM -- RESET IIST INTERRUPT MASKS5 .WORD $INTXT ;MP.NOP -- NOP FUNCTION FOR XMIT CHECK - .WORD $INTXT ;MP.XXX -- CURRENTLY UNDEFINED; .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX5 .WORD $CPOFF ;MP.STP -- STOP CPU IN ORDERLY FASHION .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .ENDC .END;MP.PWF -- SOME CPU DETECTED POWERFAILE4 .WORD $IISLM ;MP.RSM -- RESET IIST INTERRUPT MASKS5 .WORD $INTXT ;MP.NOP -- NOP FUNCTION FOR XMIT CHECK - .WORD $INTXT ;MP.XXX -- CURRENTLY UNDEFINED; .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX5 .WORD $CPOFF ;MP.STP -- STOP CPU IN ORDERLY FASHION .WORD $INTXT ;MP.XXX .WORD $INTXT ;MP.XXX .7 .IIF DF,T$$APE $IDENT MUDRV,04,12,I7 .IIF DF,D$$DSK $IDENT DUDRV,04,12,P;)<; COPYRIGHT (c) 1985, 1989 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;N; PREVIOUSLY MODIFIED BY::;T ; J. BERZLE ; J. MELVIN; G. MARIGOWDAH ; P. WEISSI ; M. NOEL ;L$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;M; J. MELVIN 19-SEP-88 04.00 =; JJM0411 - MAKE I/O SEQUENCE NUMBER CONTROLLER SPECIFIC$; ; J. MELVIN 19-SEP-88 04.01SE; JJM0412 - NO CONTROLLER ERRLOGS IF NO ERRLOG SUPPORT IN SYSTEMA;N; J. MELVIN 19-SEP-88 04.02/; JJM0413 - SAVE CONTROLLER CONTEXT IN QSTM;B; J. MELVIN 19-SEP-88 04.03C6; JJM0415 - EXPAND INFORMATION RETURNED BY IO.RSN;M; J. MELVIN 19-SEP-88 04.04 B; JJM0417 - ADD SUBFUNCTION TO DISABLE ERROR LOG REPORTING ON; SELECTED DEVICES ;2; J. MELVIN 19-SEP-88 04.058D; JJM0422 - SPLIT ALLOWABLE I/O FUNCTION TABLE INTO PRIMARY AND5; SECONDARY (SUBFUNCTION BITS WILL BE MASKED BEFOREN6; CHECKING PRIMARY TABLE; NO MASKING BEFORE CHECKING; SECONDARY TABLE);4; J. MELVIN 19-SEP-88 04.06OC; JJM0424 - RETURN EVENT CODE TO RCT IN THE INFORMATION PACKETM;5; J. MELVIN 20-OCT-88 04.07D9; JJM0431 - RETURN CORRECT CONTROLLER ID INFORMATION7;A!; A. HUDED - 21-OCT-88 04.08 =; AVH0005 ADD CHECK FOR UMR WAIT BLOCK PRE-ALLOCATION ;0; J. MELVIN 01-DEC-88 04.09LD; JJM0432 - USE CARRY FLAG TO DETERMINE IF A UNIT OR CONTROLLER; POWERFAIL IS BEING DONE.; ; J. MELVIN 20-JAN-89 04.10S:; JJM0434 - DELAY OP.GUS FOR RA81 FOLLOWING POWERFAIL4; (BASED ALMOST EXCLUSIVELY ON A PATCH PROVIDED BY#; L. BRADLEY (UNITED KINGDOM)) ;.; T. SCHOELLER 20-JAN-89 04.11A; TMS062 - DO NOT IGNORE ONLINE UNITS FROM AN OP.GUS WHEN AND5; IO.STC (SET VOLUME VALID) COMES IN SO THAT RCT ISO; REQUESTED EVERY IO.STC.O;; T. SCHOELLER 20-JAN-89 04.127; TMS065 - DO NOT REQUEST RCT IF VOLUME NOT VALID.O;O;O; MACRO LIBRARY CALLSB;G8 .MCALL HWDDF$,UCBDF$,SCBDF$,ABODF$,PKTDF$,UDADF$,KRBDF$ .MCALL QIOSY$,CLKDF$F QIOSY$P ABODF$ ;TKTN MESSAGES UDADF$ ;(T)MSCP DEFINITIONS SCBDF$ ,,1 ;SCB DEFINITIONSI HWDDF$ ;HARDWARE REGISTERS2% UCBDF$ ;UNIT CONTROL BLOCK OFFSETSI2 PKTDF$ ;IOP DEFS (WITH DSA IP.XXX DEFS AS WELL)! KRBDF$ ;KRB OFFSET DEFINITIONSH" CLKDF$ ;CLOCK QUEUE DEFINITIONS# JMPTBL PORT ;PORT ROUTINE OFFSETS.;.; CHECK FOR THE PRE-ALLOCATED UMR WAIT BLOCKS.;L .IF DF D$$DSK ;FOR DISKR8 .IF NDF DUUMR ;IF NO PRE-ALLO. UMR WAIT BLOCKS DEFINED! .ERROR DUUMR ;THEN REPORT ERROR .IFF ;IF DEFINED DUUMRS@ .IF GT ;PRE-ALLO. WAIT BLOCKS > MAX. WAIT BLOCKS! .ERROR DUUMR ;THEN REPORT ERRORU .ENDC ;END IF GT  .ENDC ;END IF NDF DUUMR .IFF ;IF IT IS A TAPE8 .IF NDF MUUMR ;IF NO PRE-ALLO. UMR WAIT BLOCKS DEFINED! .ERROR MUUMR ;THEN REPORT ER00 ssrblROR  .IFF ;IF DEFINED MUUMR @ .IF GT ;PRE-ALLO. WAIT BLOCKS > MAX. WAIT BLOCKS! .ERROR MUUMR ;THEN REPORT ERRORP .ENDC ;END IF GTC .ENDC ;END IF NDF MUUMR. .ENDC ;ALL CHECKS DONE. (END IF DF D$$DSK)  .PAGE6 .SBTTL JMPTAB - JUMP TABLE FOR VARIOUS CLASS ROUTINESL;===========================================================================E; THE FOLLOWING JUMP TABLE --- MUST --- BE DEFINED AS THE FIRST THINGLD; WITHIN THIS MODULE. VARIOUS PORT DRIVERS EXPECT TO SEE THIS TABLE ; AT 120000.;UH; BE CAREFUL WHEN ADDING NEW ROUTINES TO ADD THEM TO THE END AND TO ALSOK; DEFINE THEM IN THE MACRO JMPTBL IN DSAPRE.MAC (WHICH CONTAINS THE OFFSET F"; DEFINITIONS FOR THESE ROUTINES.)L;===========================================================================DXXBEGN::.WORD MAJOR*256.+MINOR;COMPONENT ID (SET UP IN $IDENT MACRO) .WORD CLADAT ;DATAGRAM HANDLER" .WORD CLAEND ;END PACKET HANDLER( .WORD CLAERR ;PORT/CLASS ERROR HANDLER) .WORD CLACMD ;(T)MSCP COMMAND INITIATORB .WORD SCUCB ;SCAN UCB LIST% .WORD CLASYN ;CLASS SYNCHRONIZATIONE .WORD -1 ;TERMINATOR; ; LOCAL DATA;E;C$; EXECUTIVE ENTRY POINT VECTOR TABLE;H1EXEVEC: .WORD 0 ; FLAG FOR VECTOR NOT YET FILLED=ALCLK: .WORD $ALCLK=ALOCB: .WORD $ALOCB=ALSEC: .WORD $ALSEC=BLKC2: .WORD $BLKC2OBLXIO: .WORD $BLXIOTCLINS: .WORD $CLINS CPURM: .WORD $CPURM CVLBN: .WORD $CVLBN.DEACB: .WORD $DEACBKDECLK: .WORD $DECLKADESEC: .WORD $DESECRDEUMR: .WORD $DEUMRMDQUMR: .WORD $DQUMRNDVMSG: .WORD $DVMSGBEXRQF: .WORD $EXRQFOFNERL: .WORD $FNERLCFORK: .WORD $FORKDGSPKT: .WORD $GSPKTIODSA: .WORD $IODSAIOFIN: .WORD $IOFINNLDREG: .WORD $LDREGLOGER: .WORD $LOGERMPPROR: .WORD $MPPROMPUB1: .WORD $MPUB1DMULS: .WORD $$MULOQFORK: .WORD $QFORKOQINSB: .WORD $QINSBOQINSF: .WORD $QINSFOQINSP: .WORD $QINSPOQRMVA: .WORD $QRMVAORCTPT: .WORD $RCTPTOSRNAM: .WORD $SRNAMOSCERR: .WORD $SCERROSCOFL: .WORD $SCOFLOSTMP1: .WORD $STMP1TKPS: .WORD $TKPSOUMRWT: .WORD $UMRWTOVOLVD: .WORD $VOLVDO;$KISR5: .WORD KISAR5$KISR6: .WORD KISAR6F;DEXEVCL=<<<.-EXEVEC>/2>-1>S;.8LSTPKT:.WORD 0 ;ADDRESS OF LAST ABORTABLE IOP IN C.OLHD*RADNAM:.WORD 0 ;PORT COMMON NAME IN RAD50' .RAD50 /OM/ ;END OF PORT COMMON NAME.COMPCB:.WORD 0 ;STORAGE FOR PORT PCB ADDRESS/SAVSTK:.WORD 0 ;SAVE STACK ADDRESS IN DELAYEDO% ;CONTROLLER TRANSITION TO ON-LINE:> .IIF DF E$$LOG KEEPR1: .WORD 0 ;TO HOLD R1 DURING CLADAT CODE .IF DF,D$$DSK:RSNEXP: .BLKW 18. ;TEMPORARY AREA FOR IO.RSN INFORMATION .ENDC ;D$$DSK .PAGE/ .SBTTL IOFUN - I/O FUNCTION TRANSLATION TABLEVIOFUN: .IF DF,D$$DSK- FUNCT RLB,RD,RD.L,CMDRLB ;READ LOGICAL BLOCK. FUNCT WLB,WR,WR.L,CMDWLB ;WRITE LOGICAL BLOCK .ENDC ;D$$DSK .IF DF,T$$APE. FUNCT WLB,WR,WR.L,CMDWLB ;WRITE LOGICAL BLOCK- FUNCT RLB,RD,RD.L,CMDRLB ;READ LOGICAL BLOCKA. FUNCT CMP,CMP,CMP.L,CMDCMP ;COMPARE HOST DATA .ENDC ;T$$APE .IF DF D$$DSK' FUNCT LOV,RD,RD.L,CMDRLB ;LOAD OVERLAY7 FUNCT STC,AVL,AVL.L,CMDSTC ;SET DEVICE CHARACTERISTICSN. FUNCT RPB,RD,RD.L,CMDRLB ;READ PHYSICAL BLOCK/ FUNCT RLC,RD,RD.L,CMDRLB ;READ WITH READ CHECK$/ FUNCT LDO,RD,RD.L,CMDRLB ;LOAD D SPACE OVERLAYC* FUNCT SCF,RD,RD.L,CMDRLB ;SHADOW CATCH UP/ FUNCT WPB,WR,WR.L,CMDWLB ;WRITE PHYSICAL BLOCKW1 FUNCT WLC,WR,WR.L,CMDWLB ;WRITE WITH WRITE CHECKR7 FUNCT WDD,WR,WR.L,CMDWDD ;WRITE WITH DELETED DATA MARKC= FUNCT INL,GUS,GUS.L,CMDGUS ;INITIALIZE (FOR RCT REPLACEMENT)F* FUNCT RPL,RPL,RPL.L,CMDRPL ;REPLACE BLOCK* FUNCT RSN,0,0,CMDRSN ;READ SERIAL NUMBER0 FUNCT TRM,0,0,CMDTRM ;TERMINATE RCT PROCESSING. FUNCT SMD,FMT,FMT.L,CMDFMT ;SET MEDIA DENSITYCEIOFUN: FUNCT 0,0,0,SCAN2 ;SCAN SECONDARY TABLE FOR RCT RELATED I/OR;DK; THE FOLLOWING TABLE ENTRIES HAVE BEEN ADDED IN ORDER TO ALLOW RCT TO TELLM; THE DRIVER TO TURN ERROR LOGGING FOR A DEVICE OFF OR ON. THIS WAS SUPPOSEDWK; TO BE A SINGLE BIT SUB FUNCTION, BUT LACK OF THEM NECESSITATED THE USE OFT5; A MULTIPLE BIT SUBFUNCTION (EG, IQ.SEL = 11(8) ). O;FIOFUN2: FUNCT RLB!00ssmkTADATADATADATADATADATAIQ.SEL,RD,RD.L,CMDRL0 ;READ LOGICAL BLOCK [NO ERROR]? FUNCT WLB!IQ.SEL,WR,WR.L,CMDWL0 ;WRITE LOG BLOCK [NO ERROR]I@ FUNCT RPB!IQ.SEL,RD,RD.L,CMDRL0 ;READ PHYSICAL BLOCK[NO ERROR] ? FUNCT RLC!IQ.SEL,RD,RD.L,CMDRL0 ;READ W/ READ CHECK [NO ERROR]D? FUNCT WPB!IQ.SEL,WR,WR.L,CMDWL0 ;WRITE PHYS BLOCK [NO ERROR]A? FUNCT WLC!IQ.SEL,WR,WR.L,CMDWL0 ;WR W/ WRITE CHECK [NO ERROR]F? FUNCT WDD!IQ.SEL,WR,WR.L,CMDWD0 ;WR W/ DEL DATA MARK[NO ERROR]BA FUNCT RPL!IQ.SEL,RPL,RPL.L,CMDRP0 ;REPLACE BLOCK [NO ERROR]S8EIOFN2: FUNCT 0,0,0,ILEGAL ;SECONDARY TABLE TERMINATOR .IFF ;D$$DSK.+ FUNCT EOF,WTM,WTM.L,CMDEOF ;WRITE EOF MARKT( FUNCT SPF,REP,REP.L,CMDSPF ;SPACE FILES) FUNCT SPB,REP,REP.L,CMDSPB ;SPACE BLOCKS,( FUNCT RWD,REP,REP.L,CMDRWD ;REWIND UNIT9 FUNCT RWU,AVL,AVL.L,CMDRWU ;REWIND AND TURN UNIT OFFLINER? FUNCT SMO,AVL,AVL.L,CMDSMO ;MOUNT AND SET TAPE CHARACTERISTICSR0 FUNCT STC,ONL,ONL.L,CMDSTC ;SET CHARACTERISTICS2 FUNCT SEC,GUS,GUS.L,CMDGUS ;SENSE CHARACTERISTICS8 FUNCT DSE,ERS,ERS.L,CMDEOF ;ERASE (DATA SECURITY ERASE)& FUNCT ERS,ERG,ERG.L,CMDEOF ;ERASE GAP5 FUNCT RLV,RD,RD.L,CMDRLV ;READ LOGICAL BLOCK REVERSER<EIOFUN: FUNCT 0,0,0,ILEGAL ;PRIMARY TABLE TERMINATOR (TAPE) .ENDC ;D$$DSK;O.; FUNCTION TABLE ENTRIES FOR INTERNAL COMMANDS;N2ONLFUN: FUNCT 0,ONL,ONL.L ;ONLINE (T)MSCP COMMAND;GUSFUN: FUNCT 0,GUS,GUS.L ;GET UNIT STATUS (T)MSCP COMMANDI1ABOFUN: FUNCT 0,ABO,ABO.L ;ABORT (T)MSCP COMMANDS5AVNFUN: FUNCT 0,AVL,AVL.L ;AVAILABLE (T)MSCP COMMANDS>GCSFUN: FUNCT 0,GCS,GCS.L ;GET COMMAND STATUS (T)MSCP COMMAND>SCCFUN: FUNCT 0,SCC,SCC.L ;SET CONTROLER CHAR (T)MSCP COMMAND .IF DF D$$DSK*FMTFUN: FUNCT 0,FMT,FMT.L ;FORMAT COMMAND .ENDC ;D$$DSK .IF DF,T$$APE<SNGDEN: .BYTE TK50,TK70,-1 ;SINGLE DENSITY DRIVE/CONTROLLER .EVEN .ENDC ;T$$APE;;<; TABLE FOR TRANSLATION OF MSCP END CODES TO RSX ERROR CODES;U$RSXTAB: .BYTE IS.SUC ;00 - SUCCESS+ .BYTE IE.IFC ;01 - ILLEGAL FUNCTION CODEC% .BYTE IE.ABO ;02 - COMMAND ABORTEDN2 .BYTE IE.DNR ;03 - UNIT OFFLINE (TMSCP OFFLINE)$ .BYTE IE.DNR ;04 - UNIT AVAILABLE .IF DF D$$DSK, .BYTE IE.BCC ;05 - MEDIA FORMAT ERROR .IFF ;IF TAPE. .BYTE IE.FHE ;05 - UNDEFINED STATUS CODE .ENDC ;D$$DSK' .BYTE IE.WLK ;06 - UNIT WRITE LOCKEDO# .BYTE IE.CBE ;07 - COMPARE ERROR .BYTE IE.VER ;08 - DATA ERROR. .BYTE IE.SPC ;09 - HOST BUFFER ACCESS ERROR& .BYTE IE.FHE ;10 - CONTROLLER ERROR! .BYTE IE.FHE ;11 - DRIVE ERROR. .IF DF T$$APE ;TAPE ONLY.% .BYTE IE.VER ;12 - FORMATTER ERRORF% .BYTE IS.SUC ;13 - BOT ENCOUNTEREDL* .BYTE IE.EOF ;14 - TAPEMARK ENCOUNTERED+ .BYTE IE.FHE ;15 - UNDEFINED STATUS CODE + .BYTE IE.DAO ;16 - RECORD DATA TRUNCATEDU# .BYTE IE.VER ;17 - POSITION LOSTL' .BYTE IE.ABO ;18 - SERIOUS EXCEPTIONB) .BYTE IE.EOV ;19 - LOGICAL END OF TAPE0 .IFF ;T$$APE - IF DISKP+ .BYTE IE.FHE ;12 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;13 - UNDEFINED STATUS CODE1+ .BYTE IE.FHE ;14 - UNDEFINED STATUS CODEL+ .BYTE IE.FHE ;15 - UNDEFINED STATUS CODE+ .BYTE IE.FHE ;16 - UNDEFINED STATUS CODEE+ .BYTE IE.FHE ;17 - UNDEFINED STATUS CODEI+ .BYTE IE.FHE ;18 - UNDEFINED STATUS CODEI+ .BYTE IE.FHE ;19 - UNDEFINED STATUS CODEI .ENDC ;T$$APE+ .BYTE IE.FHE ;20 - UNDEFINED STATUS CODET+ .BYTE IE.FHE ;21 - UNDEFINED STATUS CODEP+ .BYTE IE.FHE ;22 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;23 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;24 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;25 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;26 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;27 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;28 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;29 - UNDEFINED STATUS CODEH+ .BYTE IE.FHE ;30 - UNDEFINED STATUS CODE$0 .BYTE IE.FHE ;31 - MESSAGE FROM INTERNAL DIAG .EVEN;I"; DISK CLASS DRIVER DISPATCH TABLE;. .IF DF D$$DSK ;IF DISK4 .IF DF DU$CHK ;QUEUE OPTIMIZATION SUPPORTED9 DDT$ DU,R$$UDA,,,,NEW=Y,OPT=Y;GENERATE DISPATCH TABLEE .IFF ;DU$CHKI4 DDT$ DU,R$$UDA,,,,NEW=Y ;G00ssrblENERATE DISPATCH TABLE .ENDC ;DU$CHK; "; TAPE CLASS DRIVER DISPATCH TABLE;. .IFF ;D$$DSK - IF TAPET: DDT$ MU,R$$MYA,,,,NEW=Y ;GENERATE DISPATCH TABLE .ENDC ;D$$DSK .PAGE* .SBTTL XXINI - I/O INITIATOR ENTRY POINT;+;**-MUINI-INITIATOR ENTRY POINT ;**-DUINI-INITIATOR ENTRY POINT; ; INPUTS:D; ; R4 IS THE ADDRESS OF THE SCB%; R5 IS THE ADDRESS OF THE UNIT'S UCBD;D ; OUTPUTS:;=; R2 - QST ADDRESS; R4 - SCB ADDRESS; R5 - UCB ADDRESS; PORT MAPPED IN APR6 ;N; TRY TO START I/O;-MUINI:DUINI:; G; SET UP THE COMMON REGISTERS, MAP THE PORT IN APR6, AND JUMP TO CLACMD ;D! MOV S.QST(R4),R2 ;R2 IS THE QSTI/ MOV S.PBIA(R4),@KISR6 ;MAP APR6 TO PORT DRIVERN3 MOV S.PBIA(R4),@#KINAR6 ;KERNAL INSTRUCTION SPACEO* CALLR CLACMD ;GO TRY TO START A COMMAND .PAGE* .SBTTL XXACC - PACKET ACCEPTANCE ROUTINE;+(; **-XXACC-ACCEPTANCE ROUTINE FOR $GSPKT;H; THIS ROUTINE DECIDES WHICH PACKETS CAN BE PROCESSED. IT CHECKS UMR WAH; STATUS TO MAKE SURE THAT NECESSARY RESOURCES ARE AVAILABLE. IF THE UNI; IN SERIAL MODE, NO I/O'S FOR THAT DEVICE ARE PROCESSED. FOR DISKS, I/OJ; MAY BE PREVENTED BY STALL I/O. FOR TAPES, IF ANY I/O'S ARE OUTSTANDING K; AND THE PACKET BEING CHECKED IS AN IO.SEC FUNCTION, THEN NO MORE PACKETS AK; ARE ACCEPTED FOR THAT UNIT UNTIL ALL OUTSTANDING I/O'S COMPLETE (THIS IS RL; TO INSURE THAT THE GUS TMSCP COMMAND, WHICH IS AN IMMEDIATE TYPE COMMAND, N; IS ISSUED TO A QUIESCENT UNIT). THIS ROUTINE IS AN INTEGRAL PART OF $GSPKT &; AND SHOULD ONLY BE CALLED FROM IT. ; ; INPUTS:R; ; R1 - I/O PACKET ADDRESSI; R4 - SCB ADDRESS; R5 - UCB ADDRESS;E ; OUTPUTS:;T; R0-R5 PRESERVED 1; CARRY SET THIS PACKET IS NOT TO BE DEQUEUEDK(; CARRY CLEAR PACKET IS TO BE DEQUEUED;S;-XXACC: .IF DF D$$DSK ;DISK ONLY;T); IS THERE ANY REASON NOT TO DO THIS I/O?R;HB BIT #UU.SER!UU.ATN!UU.IOS,U.UTIL(R5) ;SERIAL, ATTENTION, OR STALL$ BNE 40$ ;IF NE YES, REJECT PACKET;N"; IS RCT IN PROGRESS ON THIS UNIT?; 6 BIT #UU.RCT,U.UTIL(R5) ;RCT IN PROGRESS ON THIS UNIT? BEQ 20$ ;IF EQ NO6 CMP I.TCB(R1),@RCTPT ;YES, THEN IS THIS I/O FROM RCT?# BNE 40$ ;IF NE NO, REJECT PACKET  .IFF ;D$$DSK - IF TAPE> BIT #UU.SER!UU.ATN,U.UTIL(R5) ;ANY REASON NOT TO DO THIS I/O? BNE 40$ ;YES, REJECT IT6 CMP #IO.SEC,I.FCN(R1) ;SENSE CHARACTERISTICS COMMAND?* BNE 20$ ;NO. CHECK FOR TRANSFER FUNCTION" MOV S.QST(R4),R4 ;GET QST ADDRESS ASSUME Q.CST,0N MOV (R4),R4 ;GET CST ADDRESS* TST C.OLHD(R4) ;ANY OUTSTANDING COMMANDS?0 BNE 40$ ;YES. REJECT IT. UNIT SHOULD BE UNUSED/ BR 30$ ;NO. ACCEPT THE PACKET FOR PROCESSINGN .ENDC ;D$$DSK20$:; .IF NDF M$$PRO ;WE MAY NEED TO FORK IF ON WRONG PROCESSOR7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;DATA TRANSFER REQUEST??' BLO 30$ ;IF LO NO, ACCEPT THE PACKETC5 BIT #DV.EXT,U.CW1(R5) ;IS EXTENDED MEMORY SUPPORTED?N" BNE 30$ ;YES, WE DON'T NEED UMRS .ENDC ;M$$PRO" MOV S.QST(R4),R4 ;GET QST ADDRESS ASSUME Q.CST,0A MOV (R4),R4 ;GET CST ADDRESS) BIT #C1.UMR,(R4) ;UNIT WAITING FOR UMRS?I) BNE 40$ ;IF NE, YES. REJECT THE PACKETC* TST C.UMCT(R4) ;ANY MORE UMR WAIT BLOCKS? BEQ 40$ ;IF EQ NOF;F; ACCEPT PACKETN; 30$: .IF DF,D$$DSK< BIC #UU.SEL,U.UTIL(R5) ;MAKE SURE ERROR PACKET LOGGING ON .ENDC ;D$$DSK& MOV U.SCB(R5),R4 ;RESTORE SCB ADDRESS" CLC ;INDICATE ACCEPT THE PACKET RETURN ;RETURN$;Y; REJECT PACKET ;S40$:& MOV U.SCB(R5),R4 ;RESTORE SCB ADDRESS" SEC ;INDICATE REJECT THE PACKET RETURN ;AND EXITE .PAGE' .SBTTL XXCAN - CANCEL I/O ENTRY POINTB;+*; **-DUCAN-CANCEL I/O ENTRY POINT FOR DISK*; **-MUCAN-CANCEL I/O ENTRY POINT FOR TAPE; E; THIS ROUTINE HANDLES ABORTING OUTSTANDING MSCP/TMSCP COMMANDS FOR AU; GIVEN TASK AND UNIT.;E ; INPUTS: ;G"; R0=ADDRESS OF CURRENT I/O PACKET ; R1=TCB ADDRESS OF CURRENT TASK; R3=CONTROLLER INDEX ; R4=SCB ADDRESS; R5=UCB ADDRESS;T ; OUTPUTS:;0; R0=DESTROYED; R1-R5=PRESERVEDAE; IOPS IN OUTSTANDING LIST HEAD ARE MARKED FOR ABORT COMMAND00%ssmkTADATADATADATADATADATA ISSUANCEE"; CONTROLLER MODE IS SET TO C1.ABO;N;-MUCAN:DUCAN: .IF DF,T$$APE/ CALL MAPD ;MAP PORT COMMON AREA THROUGH APR6 # MOV S.QST(R4),R0 ;GET QST ADDRESST* MOV (R0),R0 ;/*Q.CST*/ ;GET CST ADDRESS' MOV R0,R2 ;SAVE A COPY FOR USE LATERG* MOV C.OLHD(R0),R0 ;GET FIRST IOP ADDRESS BEQ 30$ ;NONE TO DO. EXIT3-10$: CMP I.TCB(R0),R1 ;IOP FOR CORRECT TASK?A BNE 20$ ;NO. GET NEXT PACKET) CMP I.UCB(R0),R5 ;IOP FOR CORRECT UNIT?S BNE 20$ ;NO. GET NEXT PACKET< BISB #IP.ABO,I.PRM+11(R0) ;MARK IT FOR ABO COMMAND ISSUANCE( BIS #C1.ABO,(R2) ;SET CONTROLLER STATE8 BIT #UU.SER,U.UTIL(R5) ;ALREADY IN SERIAL MODE ON UNIT?% BNE 20$ ;YES. DO NOT SAY WE SET IT,A BIS #UU.SER!UU.ABO,U.UTIL(R5);INDICATE SERIAL MODE AND WE SET IT (20$: MOV (R0),R0 ;GET NEXT IOP ADDRESS BNE 10$ ;AND GO CHECK IT OUT 30$: .ENDC ;T$$APE$ RETURN ;AND RETURN TO THE CALLER .PAGE7 .IF DF D$$DSK&DU$CHK ;IF QUEUE OPTOMIZATION SUPPORTEDN4 .SBTTL XXCHK - DU ONLY, SEEK OPTIMIZATION CHECKING'; **-DUCHK-VALIDATE AND CONVERT THE LBNU;E9; THIS ROUTINE IS CALLED FROM $DRQRQ TO DO LBN PROCESSINGU9; FOR DEVICES WHICH SUPPORT QUEUE OPTIMIZATION. IF BLKC2D9; DETECTS AN ERROR IT WILL RETURN TO THE CORRECT PLACE INT; $DRQRQ AFTER CALLING $IOALT.;M ; INPUTS: ;E; R1=I/O PACKET ADDRESS1; R5=UCB ADDRESS; ; OUTPUTS:;N4; IF THE CHECKS SUCCEEDS, THEN THE LBN IN THE PACKET=; IS REPLACED BY THE CYLINDER/TRACK/SECTOR. R1 IS PRESERVED.;B:; IF THE CHECKS FAILS, THEN $IOALT IS ENTERED WITH A FINAL8; STATUS OF IE.BLK AND A RETURN TO THE CORRECT PLACE IN ; $DRQRQ IS EXECUTED.N;O;S<; NOTE: ALL FUNCTIONS PUT INTO THE DRIVER QUEUE ARRIVE HERE.3; THESE INCLUDE IO.ATT, IO.DET, AND ACP FUNCTIONS.P;- .ENABL LSBQ=DUCHK: CMPB #IO.RLB/256.,I.FCN+1(R1) ;DATA TRANSFER REQUEST?S$ BLO 30$ ;IF LO NO, LEAVE IT ALONE? BITB #IO.RPB&IO.WPB,I.FCN(R1);IS IT READ/WRITE PHYSICAL BLOCK?P! BEQ 10$ ;NO, DO BLOCK CHECKING 6REQUE: MOV R1,R3 ;WE HAVE TO SIMULATE THE SETUP THAT3 CLRB I.PRM+11(R3) ;BLKC2 WOULD PERFORM FOR $CVLBNR MOV I.PRM+10(R3),R2 ;... MOV I.PRM+12(R3),R0 ;... BR 20$ ;NOW GO TO $CVLBN .10$: CALL @BLKC2 ;CHECK LOGICAL BLOCK NUMBER020$: CALL @CVLBN ;CONVERT LOGICAL BLOCK NUMBER4 MOV R2,I.PRM+10(R3) ;SAVE DESIRED CYLINDER ADDRESS# SWAB R1 ;SWAP TRACK TO HIGH BYTE;% BIS R1,R0 ;MERGE TRACK WITH SECTOR&< MOV R0,I.PRM+12(R3) ;SAVE DESIRED TRACK AND SECTOR ADDRESS( MOV R3,R1 ;RESTORE THE PACKET ADDRESS30$: RETURN ;EXIT .DSABL LSBT .ENDC ;D$$DSK&DU$CHK .PAGE" .SBTTL $XXINT - INTERRUPT HANDLER;+.; **-$XXINT-CLASS CONTROLLER INTERRUPT HANDLER;WD; INTERRUPTS ARE RECEIVED FROM A CONTROLLER UNDER FOUR CIRCUMSTANCES; THEY ARE AS FOLLOWS:D; 1. DURING THE INITIALIZATION PROCESS (OPEN THE "VIRTUAL CIRCUIT")<; 2. WHEN THE "COMMAND RING BUFFER" TRANSITIONS FROM "FULL"; TO "NOT FULL"M?; 3. WHEN THE "RESPONSE RING BUFFER" TRANSITIONS FROM "EMPTY"R; TO "NOT EMPTY"D; 4. WHEN A FATAL CONTROLLER ERROR IS DETECTED AND AN INTERRUPT CAN; BE GENERATED; FATAL CONTROLLER ERRORS ARE:+9; A. FAILURE TO BECOME UNIBUS MASTER FOR DATA TRANSFERE5; B. FAILURE TO BECOME UNIBUS MASTER FOR INTERRUPTS/; C. FAILURE TO ACCESS I/O PAGE REGISTERS ORI6; COMMUNICATIONS AREA (I.E. NON-EXISTENT MEMORY)$; D. UNIBUS PARITY ERROR DETECTED;O;- .IF DF D$$DSK ;IF DISK CLASS5 INTSE$ DU,PR5,R$$UDA ;;;GENERATE INTERRUPT SAVE CODE  .IFF ;;;IF TAPE5 INTSE$ MU,PR5,R$$MYA ;;;GENERATE INTERRUPT SAVE CODEC .ENDC ;;;D$$DSK- ;;;R5 POINTS TO ANY UCB ON THE CONTROLLERO) ;;;R4 = CONTROLLER INDEX (UNLESS THISM, ;;;IS M AND THERE IS ONLY ONE CONTROLLER ;;;R4 AND R5 MAY BE MODIFIED5 MOV U.SCB(R5),R4 ;;;POINT TO CONTROLLER STATUS BLOCK 7 BIT #UU.SPC,U.UTIL(R5) ;;;IS SPECIAL ONLINE IN EFFECT?. BEQ 10$ ;;;NO, FORK NORMALLY( CALL SAVREG ;;;COROUTINE TO SAVE R0-R46 CALL MAPD ;;;COROUTINE TO SAVE APR6 AND MAP THE PORT2 JMPV PORT,PORINT ;;;GO EXECUTE THE REQUEST AT PR5*10$: TST S.FRK+2(R4) ;;;FORK BLOCK00-ssrbl IN USE?! BEQ 20$ ;;;IF EQ, NO, CALL FORKE. RETURN ;;;IF FORK BLOCK IN USE, JUST RETURN)20$: CALL @FORK ;;;CREATE SYSTEM PROCESSO ;;;R5 MUST STILL BE THE UCB 1 ;;;R4 MUST BE THE SCB BEFORE $FORK IS CALLED.S;U; RETURN AT FORK STATE;I8 CLR S.FRK+2(R4) ;FREE FORK BLOCK FOR FURTHER INTERRUPTS1 MOV S.PBIA(R4),@KISR6 ;MAP APR 6 TO PORT DRIVER-3 MOV S.PBIA(R4),@#KINAR6 ;KERNAL INSTRUCTION SPACE 6 JMPV PORT,PORINT ;TRANSFER TO PORT INTERRUPT ROUTINE .PAGE0 .SBTTL XXKRB - CONTROLLER STATE CHANGE ROUTINE;+; 1; **-XXKRB-CLASS CONTROLLER STATUS CHANGE ROUTINEJ; =; THIS ROUTINE WILL HANDLE SETTING CONTROLLER ON-LINE/OFFLINE ; REQUESTS. ; ; INPUTS;R; R4 = DCB ADDRESS; R3 = CTB ADDRESS; R2 = KRB ADDRESS1; 0(SP) = RETURN ADDRESS FOR IMMEDIATE COMPLETIONO3; 2(SP) = RETURN ADDRESS FOR CALLER OF EXEC ROUTINER(; C = 1 TRANSITION TO OFF-LINE REQUESTED'; C = 0 TRANSITION TO ON-LINE REQUESTEDT:; $SCOFL NONZERO POSITIVE - SPECIAL ONLINE FOR SYSTEM DISK; $SCERR = 1 PRESET TO SUCCESS; PRIORITY = 0; ; OUTPUTSC;S!; $SCERR = 0 OPERATION IS PENDING>; $SCERR < 0 OPERATION IS FAILURE ($SCERR CONTAINS ERROR CODE)!; $SCERR = 1 OPERATION IS SUCCESS4; 0(SP) = RETURN ADDRESS OF CALLER OF $KRBSC ROUTINE;SB; THE DRIVER EITHER CHOSES TO REJECT THE STATUS REQUEST, ACCEPT ITA; IMMEDIATELY OR TO DO A DELAYED TRANSITION BY SAVING THE ADDRESSI@; ON TOP OF THE STACK AND RETURNING TO THE SECOND ADDRESS ON THE; STACK.;V;-DUKRB::NMUKRB::S* BCC 20$ ;IF CC, GO TRANSITION TO ON-LINE;R; TRANSITION TO OFF-LINE;S MOV R2,R3 ;COPY THE KRB  MOV K.OWN(R2),R4 ;GET A UCB MOV U.SCB(R4),R4 ;GET THE SCB MOV S.QST(R4),R2 ;GET THE QST CALL MAPD ;MAP THE PORTE/ MOV COMPCB,R0 ;GET THE ADDRESS OF THE PORT PCBH: DECB P.RMCT(R0) ;DECREMENT THE RESIDENT MAPPED TASK COUNT9 DEC 140000+CONCNT ;DECREMENT # OF CONTROLLERS USING PORTH& BNE 10$ ;IF NE, THERE ARE STILL MORE6 BIC #P2.LMA,P.ST2(R0) ;CLEAR THE 'LEAVE ME ALONE' BIT.10$: CALLV PORT,STOMP ;STOMP ON THE CONTROLLER2 BIT #KS.EXT,K.STS(R3) ;THIS CONTROLLER HAVE UMRS? BNE 60$ ;NO, FINISH UP( MOV (R2),R3 ;/*Q.CST*/ ;SET UP THE CST& SEC ;SEC TELLS PORUMR TO DEALLOCATE/ JMPV PORT,PORUMR ;DEALLOCATE THE UMRS AND EXITC;0; TRANSITION TO ON-LINEP; ,20$: TST EXEVEC ; IS VECTORING DON ALREADY? BNE 22$ ; YES THEN SKIP THIS# PUSH ; SAVE THE REGISTERSI MOV KINAR6,-(SP) ; SAVE KINAR6 / MOV @#112,R0 ; GET ADDRESS OF TABLE OF ENTRIES ; MOV (R0),R0 ; GET ADDRESS OF APR BIAS (1ST WORD IN TABLE)T2 MOV (R0),KINAR6 ; MAP COMMON THROUGH I-SPACE APR6! MOV #EXEVEC,R3 ; POINT TO VECTORM* MOV #EXEVCL,R2 ; SPECIFY LENGTH OF VECTOR% CALL @#140004 ; TRANSLATE THE VECTORP" MOV (SP)+,KINAR6 ; RESTORE KINAR6! POP ; RESTORE REGISTERSN<22$: MOVB K.HPU(R2),R5 ; GET THE HIGHEST PHYSICAL UNIT KNOWN& ASL R5 ; SHIFT TO WORD INDEX K.HPU*22 ADD R2,R5 ; ADJUST FOR KRB BASE R5=KRB+(K.HPU*2)7 ADD K.OFF(R2),R5 ; R5 = LAST UCB SLOT IN KRB UCB TABLEV MOV (R5),R5 ; R5 = UCB ADDRESS/ MOV U.SCB(R5),R4 ; GET THE SCB ADDRESS INTO R4M& MOV R5,K.OWN(R2) ; GIVE K.OWN A VALUE& TSTB @SCOFL ;IS IT A SPECIAL ONLINE?" BLE 30$ ;NOPE, CONTINUE NORMALLY> BIS #UU.SPC,U.UTIL(R5) ;SET THE SPECIAL ONLINE BIT IN THE UCB= CLRB @SCERR ;CLEAR SCERR TO SHOW THAT THE ONLINE IS PENDINGG3 BR 40$ ;DON'T DELAY THE RETURN FOR SPECIAL ONLINET30$:& POP SAVSTK ;DO DELAYED STATUS CHANGE40$:? .IIF DF D$$DSK MOV #VCDSK,R1 ;R1 = VIRTUAL CIRCUIT ID FOR DISKR? .IIF DF T$$APE MOV #VCTAP,R1 ;R1 = VIRTUAL CIRCUIT ID FOR TAPE 7 CALL CLASUP ;DO INITIAL LOAD FUNCTIONS ON PORT COMMONK BCS 50$ ;IF CS, ERRORL. CALL MAPD ;CALL A COROUTINE TO MAP AND LATER$ ;RESTORE APR 6. R0 IS DESTROYED.9 INC 140000+CONCNT ;INCREMENT # OF CONTROLLERS USING PORTE5 MOV MPPROR,140000+MPPROX ;REVECTORED $MPPRO ADDRESS ;% ;PUCOM CAN VECTOR OTHER ROUTINESN4 CALLV PORT,PORSUP ;MORE SETUP FOR PACKET MANAGEMENT ;SETUP FUNCTIONS9 MOV #C1.CON!C1.SYN,(R3) ;CLEAR ALL CONNECTION STATE BITSP$ ;AND ENTER C1.SYN,C1.CON STATE.  ;..CON ONL FOR005ssmkTADATADATADATADATADATA CONTROLLER 1 ;IS IN PROGRESS AND WE NEED TO ALLOCATE UMRS I( JMPV PORT,PORSYN ;START SYNCHRONIZATION50$: ;ERROR ON INITIAL LOAD# PUSH ;SAVE REGISTERS+( CALL @SAVSTK ;TELL CON ABOUT THE ERROR) POP ;RESTORE OUR REGISTERS  SEC ;ENSURE CARRY SET60$: RETURN ;H .PAGE% .SBTTL XXOUT - TIME OUT ENTRY POINTR;+;**-XXOUT-TIME OUT ENTRY POINT;S; REASONS FOR TIME-OUTS ARE:; C; 1. THE TIMER ON THE OLDEST COMMAND IN THE CONTROLLER HAS EXPIRED. 3; 2. (DISK ONLY) A CONTROLLER RE-SYNCH IS DONE AND E=; OP.ONL'S MUST BE RE-ISSUED FOR ANY UNITS STILL MARKED ASI?; SPINNING UP (US.SPU=1). THE TIME-OUT IS SET AND PROCESSEDI; BY THE RECSIO ROUTINE.C<; 3. A FATAL ERROR HAS BEEN DETECTED AND NOW A RE-SYNCH MUST=; COMMENCE. WE GET HERE BECAUSE CLAERR IS CALLED WHENEVERX9; A FATAL ERROR IS DETECTED AND SETS A 1 SECOND TIMER.P=; 4. A CONTROLLER SYNCHRONIZATION STEP HAS TIMED OUT WHICH ISH; A FATAL ERROR.H;O ; INPUTS:S;P; R4 ADDRESS OF SCB ; R5 ADDRESS OF A UCB;. ; OUTPUTS:;E;-DUOUT:MUOUT:/ MOV S.PBIA(R4),@KISR6 ;MAP APR6 TO PORT DRIVERH3 MOV S.PBIA(R4),@#KINAR6 ;FOR I/D SYSTEMS MAP BOTHR) MOV S.QST(R4),R2 ;R2 IS THE QST ADDRESST0 MOV (R2),R3 ;/*Q.CST*/ ;R3 IS THE CST ADDRESS) BIT #C1.RDY,(R3) ;IS THE READY BIT SET? # BEQ 20$ ;NO, CONTINUE, ELSE THIS ! ;MUST BE A CMD TMO. FOR TAPEE .IF DF D$$DSK+ BIT #C1.R2,(R3) ;IS RECOVERY IN PROGRESS?R* BEQ 10$ ;IF EQ, NO, THIS MUST BE A CMD.+ TST C.OLHD(R3) ;ANY COMMANDS IN PROGRESS?B0 BNE 10$ ;IF NE, YES, THIS MUST BE A CMD. TMO.@; WE MUST BE HERE IN ORDER TO RE-TRY UNIT ON-LINES AFTER A FATALB; ERROR RE-SYNCHRONIZATION. FOR EACH UNIT THAT USED TO BE ON-LINEE; (US.SPU=1), RE-TRYS, IN CASE OF FAILURE, ARE DONE EVERY FEW SECONDS(; 3 BIS #C1.R1,(R3) ;NOTE THAT WE NEED TO DO ON-LINESL JMP RECSIO ;GO DO THEMM .ENDC ;D$$DSK;F.; WE ARE HERE BECAUSE A COMMAND JUST TIMED OUT;G;10$: BIT #C1.TMO!C1.GCS,(R3) ;DID THE GCS COMMAND TIME OUT?H BEQ 15$ ;NO, CONTINUE5 JMP TMOERR ;IF THE GCS TIMED OUT, GO START RESYNCHM815$: BIS #C1.GCS,(R3) ;INDICATE WE NEED TO DO AN OP.GCS, MOVB S.ITM(R4),S.CTM(R4) ;RE-SET TMO. COUNT; CALLV PORT,PKTCH1 ;DO WE HAVE THE RESOURCES TO DO IT NOW?E) ; ONLY NEED ONE CREDIT SINCE THIS IS  ; AN IMMEDIATE CMD  BCS 17$ ;NO, RETURN JMP GCSSIO ;GO ISSUE IT 17$: RETURNC;$A; IF WE GET HERE EITHER WE TIMED OUT BEFORE THE CONTROLLER GOT UPB.; OR WE ARE HERE TO START A RE-SYNCHRONIZATION;T-20$: BIT #C1.FAT,(R3) ;IS THE FATAL BIT SET?  BEQ 30$ ;NO, CONTINUE: BIC #C1.FAT,(R3) ;YES, IT'S A FATAL ERROR, CLEAR THE BIT3 JMPV PORT,PORSYN ;AND START RESYNCH WITH THE CONTU!30$: SEC ;LOG CONTROLLER ERROR $ JMP CLAERR ;JUMP TO ERROR ROUTINE .PAGE& .SBTTL XXPWF - POWERFAIL ENTRY POINT;+&; **-DUPWF- DISK POWERFAIL ENTRY POINT&; **-MUPWF- TAPE POWERFAIL ENTRY POINT;FH; THIS ROUTINE HANDLES POWERFAIL RECOVERY FOR CONTROLLERS. CLAERR WILL ; DEAL WITH ALL THE UNITS.;A ; INPUTS:0;B*; C = 1 ;INDICATES CONTROLLER POWERFAIL; R2 = KRB ADDRESS E; R3 = CTB ADDRESS;E$; C = 0 ;INDICATES UNIT POWERFAIL; R3 = CONTROLLER INDEXT; R4 = SCB ADDRESS; R5 = UCB ADDRESS;G ; OUTPUTS:;O; CONTROLLER ONLINEM;O;-DUPWF:MUPWF:2 BCC 20$ ;JUST RETURN FOR UNIT POWERFAIL. CLAERR% ;WILL HANDLE THAT PART OF THINGS.* MOV L.DCB(R3),R3 ;GET THE DCB MOV D.UCB(R3),R5 ;NOW A UCB MOV U.SCB(R5),R4 ;THE SCB CALL MAPD ;MAP THE PORTE MOV S.QST(R4),R2 ;THE QST- MOV (R2),R3 ;/*Q.CST*/ ;AND THE CST (WHEW!)R) MOVB #RETRY,Q.RTY(R2);SET UP RETRY COUNTB8 JMP CLAERR ;RE-SET STATES, QUEUES, AND SET UP TIME-OUT. ;COUNT. THE TIMEOUT ROUTINE WILL START THE ;RE-SYNCH FOR DISK.: 20$: RETURNO .PAGE, .SBTTL XXUCB - CON UNIT ONLINE ENTRY POINT;+(; **-XXUCB - CON UNIT ONLINE ENTRY POINT;D; ROUTINE DESCRIPTION*;M ; INPUTS:); $; R3=CONTROLLER INDEX (S.KRB .NE. 0); R4=ADDRESS OF SCBR; R5=ADDRESS OF UCBD; 0(SP) - RETURN ADDRESS ; 2(SP) - DE00=ssrblLAYED RETURN ADDRESS; C SET OFFLINEH; C CLEAR ONLINE; $CSERR SET TO 1, SUCCESS*; $SCOFL > 0 THEN ONLINE FOR SYSTEM DEVICE;E ; OUTPUTS:;I; R4-R5 ARE PRESERVED ;E>; $SCERR = 0 OPERATION IS PENDING (MAXIMUM TIME IS 60 SECONDS)8; $SCERR < 0 OPERATION IS A FAILURE $SCERR CONTAINS CODE#; $SCERR = 1 OPERATION IS A SUCCESSY4; 0(SP) = RETURN ADDRESS OF CALLER OF $UCBSC ROUTINE;-MUUCB:DUUCB::E! .IF DF D$$DSK ;DISK DRIVER ONLYC BCS 40$ ;IF CS OFFLINE REQUEST9 TST U.BPKT+2(R5) ;REPLACEMENT QUEUE ALREADY INITIALIZED?F BNE 10$ ;IF NE YES: MOV #U.BPKT,U.BPKT+2(R5) ;NO SET UP FOR ZERO ENTRY QUEUE& ADD R5,U.BPKT+2(R5) ;SHOW IT AS EMPTY10$:$ MOV S.KRB(R4),R2 ;RETRIEVE KRB ADDR: MOV R5,K.OWN(R2) ;MARK THIS UNIT AS OWNING THE CONTROLLER3 MOV U.UC2X(R5),R0 ;IS THE EXTENSION ALREADY THERE?1% BNE 30$ ;YES, DON'T GET ANOTHER ONEU7 MOV #1,R1 ;OBTAIN ONE 32-WORD BLOCK OF SECONDARY POOL: CLC ;CLR CARRY 2 CALL @ALSEC ;ALLOCATE A CHUNK OF SECONDARY POOL BCC 30$ ;IF CC OK ' MOVB #IE.UPN,@SCERR ;SET FAILURE CODE 20$: RETURN ;EXIT WITH FAILUREE30$: MOV R0,U.UC2X(R5) ;SAVE ADDRESS OF BLOCK IN SECOND UCB EXTENSIONW5 TSTB @SCOFL ;SPECIAL OFFLINE TO ONLINE TRANSITION?R BLE 20$ ;IF LE NOM CALL MAPD ;MAP SECOND 4K WORDS" MOV S.QST(R4),R2 ;GET QST ADDRESS) MOV (R2),R3 ;/*Q.CST*/ ;GET CST ADDRESS'2 CLRB @SCERR ;INDICATE STATUS CHANGE IN PROGRESS/ BIS #UU.SPC,U.UTIL(R5) ;MARK AS SPECIAL ONLINEL& JMP ONLSIO ;GO BRING THE UNIT ONLINE40$: CALL MAPD ;MAP THE PORTV& MOV S.QST(R4),R2 ;GET THE QST ADDRESS- MOV (R2),R3 ;/*Q.CST*/ ;GET THE CST ADDRESS.6 MOV C.OLHD(R3),R1 ;ANY I/O OUTSTANDING IN CONTROLLER? CALL 60$ ;CHECK THIS QUEUE. MOV U.BPKT(R5),R1 ;CHECK THE BAD PACKET QUEUE CALL 60$ ;IF ANY? BIC #UU.SIO,U.UTIL(R5) ;CLEAR THE STALL I/O TO THIS DEVICE BIT A MOV U.UC2X(R5),R0 ;GET ADDRESS OF BLOCK IN SECOND UCB EXTENSION,E ;IF IT'S THERE.50$: MOV #1,R1 ;SET SIZE TO ONE 32-WORD BLOCK> CLR U.UC2X(R5) ;ZERO ADDRESS OF BLOCK IN SECOND UCB EXTENSION4 CALLR @DESEC ;DEALLOCATE A CHUNK OF SECONDARY POOL960$: BEQ 90$ ;EMPTY QUEUE, MUST BE AFTER LOAD OF R1 WITHN! ; WITH FIRST (P)IOP ON QUEUEC*70$: CMP R5,I.UCB(R1) ;IS IT FOR THIS UNIT BNE 80$ ;NO, THEN CHECK NEXT! TST (SP)+ ;CLEAR RETURN ADDRESSU& MOVB #IE.VER,@SCERR ;SET FAILURE CODE RETURN ;AND EXIT(80$: MOV (R1),R1 ;GET NEXT IOPE( BNE 70$ ;CHECK TO SEE IF FOR THIS UNIT90$: .ENDC ;D$$DSK RETURN ;BACK TO CALLERR .PAGE .IF DF,T$$APE0 .SBTTL ABOSIO - KILL I/O'S ON UNIT REQUIRING IT;+,; **-ABOSIO-KILL I/O'S ON UNITS REQUIRING IT;$H; THIS ROUTINE SCANS THROUGH THE C.OLHD QUEUE FOR THE CURRENT CONTROLLERI; AND LOCATES ANY I/O PACKETS THAT HAVE THE IP.ABO BIT SET (BY XXCAN) ANDHJ; THE IP.PND BIT RESET (SET MEANS ABO CMD ALREADY ISSUED FOR THIS PACKET).G; WHEN SUCH A PACKET IS FOUND, AN ABO COMMAND IS ISSUED FOR THE COMMAND$;C; INPUT:;F; R2=QST ADDRESS; R3=CST ADDRESS; ; OUTPUT:B; ;-ABOSIO:.'10$: CLR LSTPKT ;SHOW NO PACKET FOUND # MOV S.QST(R4),R2 ;GET QST ADDRESSA MOV (R2),R0 ;GET CST ADDRESSN/ ADD #C.OLHD,R0 ;POINT TO LIST HEAD TO PROCESS '20$: MOV (R0),R0 ;GET NEXT I/O PACKETO% BEQ 30$ ;NO MORE THIS TIME THROUGHA6 CMP #IO.KIL,I.FCN(R0) ;IS IT A KIL COMMAND WE ISSUED?' BEQ 20$ ;YES. SO LOOK AT ANOTHER ONEK7 BITB #IP.ABO,I.PRM+11(R0) ;SHOULD THIS CMD BE ABORTED?S BEQ 20$ ;NO. FIND ANOTHER ONE< BITB #IP.PND,I.PRM+11(R0) ;WAS ABO ALREADY ISSUED FOR THIS?( BNE 20$ ;YES. DON'T NEED ANOTHER ONE) MOV R0,LSTPKT ;SAVE LAST PACKET ADDRESS - BR 20$ ;AND GO SEE IF THERE IS ANOTHER ONED(30$: TST LSTPKT ;WAS ANY REALLY FOUND?$ BEQ 40$ ;NO. NO MORE FOR ANY UNIT;E; ; ISSUE I/O ABO COMMAND FOR UNIT;A- CALLV PORT,PKTCHK ;ANY RESOURCES AVAILABLE?E BCS 70$ ;NO. TRY AGAIN LATERK MOV LSTPKT,R0 ;GET IOP ADDRESS# MOV I.UCB(R0),R5 ;GET UCB ADDRESSS# MOV U.SCB(R5),R4 ;GET SCB ADDRESSB2 CALL PIOPAL ;ALLOCATE PIOP FOR 'DUMMY' COMMAND BCS 70$ ;NONE AVAILABLE8 MOV #IO.KIL,I.FCN(R3) ;MAKE SURE WE KNOW WHENCE00EssmkTADATADATADATADATADATA IT CAME# ;PIOP ADDRESS IS IN R3 BY NOW.E& MOV #ABOFUN,R0 ;FUNCTION INFORMATION& CALL CMDCOM ;BUILD TEMPLATE COMMAND, MOV LSTPKT,R0 ;GET ORIGNAL I/O PACKET ADDR= MOVB I.PRM+11(R0),P.OTRF(R1) ;GET COMMAND REFERENCE NUMBER 19 BIC #177760,P.OTRF(R1) ;ONLY GET 4 BITS WORTH (ACTUAL #)P9 MOV R0,P.OTRF+2(R1) ;AND PUT IN THE ASSOCIATED IOP ADDRR5 BISB #IP.PND,I.PRM+11(R0) ;SHOW ABORT COMMAND ISSUEDF( PUSH <#10$> ;GO BACK TO SCANNING LIST$ CALL CMDSEN ;GO ISSUE THE COMMAND;E;O; END PACKET PROCESSINGI;A& CLR R0 ;INDICATE NO I/O TO COMPLETE# PUSH <#0> ;NO INFORMATION NEEDEDM- CALL ENDCMO ;CLEAN UP AND THEN RETURN HEREG- BR 10$ ;MAKE ANOTHER PASS THROUGH THE LISTP40$:% PUSH <#SCUCB> ;SAVE NECESSARY ITEMSB-50$: CALL @(SP)+ ;CALL SCUCB AS A COROUTINEC BCS 60$ ;NO MORE TO DO.7 BIT #UU.ABO,U.UTIL(R5) ;DID XXCAN SET THE SERIAL MODE?,) BEQ 50$ ;NO. DON'T EVEN LOOK AT UU.SERPD BIC #UU.SER!UU.ABO,U.UTIL(R5) ;YES. RESET THE SERIAL MODE, ABO MODE$ BR 50$ ;AND LOOK FOR ANOTHER UNIT60$:% CALL 70$ ;RESTORE QST/CST ADRESSESE, BIC #C1.ABO,(R3) ;TAKE US OUT OF ABO STATE BR 80$ ;AND RETURNT70$:- MOV S.QST(R4),R2 ;GET THE QST ADDRESS AGAINH, MOV (R2),R3 ;AND PUT BACK THE CST ADDRESS"80$: RETURN ;BACK TO THE CALLER .ENDC ;T$$APEN .PAGE4 .SBTTL CLAATN - CLASS ATTENTION MESSAGE PROCESSING;+/;**-CLAATN - CLASS ATTENTION MESSAGE PROCESSINGN;O=; ATTENTION MESSAGES WILL CAUSE A TRANSITION TO UU.ATN STATE.R"; R5 WILL CONTAIN THE UCB ADDRESS.; ; INPUTS: ; R1=ADDRESS OF END PACKET; R2=ADDRESS OF QSTE; R3=ADDRESS OF CST;; R4=ADDRESS OF SCBA; R5=ADDRESS OF UCBT;T ; OUTPUTS:;Q;-CLAATN:  MOV R1,R2 ;SCUCB USES R1@ CMPB #OP.AVA,P.OPCD(R1) ; IS IT AN AVAILABLE ATTENTION MESSAGE?) BNE 40$ ;NO, JUST DEALLOCATE THE PACKETB. PUSH <#SCUCB> ;PUSH SCAN UCB ROUTINE ON STACK%10$: CALL @(SP)+ ;CALL THE COROUTINEA! BCS 40$ ;IF CS -> NO MORE UCB'SS? CMPB P.UNIT(R2),U.UNIT(R5); IS THIS ATT MESSAGE FOR THIS UCB ?  BNE 10$ ;IF NE -> NO .IF DF,D$$DSK ;DISK? 5 BIT #UU.IOS,U.UTIL(R5) ;IS I/O STALLED TO THIS UNIT?  BNE 20$ ;YES, MARK THIS UNIT. BITB #US.MNT,U.STS(R5) ;WAS THE UNIT MOUNTED? BNE 30$ ;NO, SKIP THIS ONE2 BIT #UU.SIO,U.UTIL(R5) ;CAN THIS UNIT STALLL I/O? BEQ 30$ ;NO, CONTINUEJI ; TO GET HERE THE UNIT MUST HAVE SPUN DOWN BUT NO I/O HAS BEEN ATTEMPTED20$: .ENDC ;D$$DSK( BIT #UU.ATN,U.UTIL(R5) ;DID WE ALREADY?! BNE 30$ ;YUP, DON'T DO IT AGAIN5* BIS #C1.GUS,(R3) ;SET GUS TRANSTITION BIT= BIS #UU.GUS!UU.SER!UU.ATN,U.UTIL(R5);SET GUS, SERIAL AND ATNU$30$: ADD #10,SP ;FLUSH THE UCB SCAN'40$: MOV R2,R1 ;RESTORE THE END PACKETU" MOV S.QST(R4),R2 ;RESTORE THE QST3 CALLV PORT,PKTDR ;DEALLOCATE THE ATTENTION MESSAGE( RETURN ;RETURNS .PAGE7 .SBTTL CLACMD - INITIATOR AND CONTINUATION ENTRY POINTT;+=;**-CLACMD-INITIATOR ENTRY POINT AND CONTINUATION ENTRY POINTK;;; DECIDE WHAT TO DO NEXT BASED ON CONNECTION MODES'-; A MODE IS A COMBINATION OF STATES.S;I ; INPUTS:S;U; R2 ADDRESS OF THE QST; R4 ADDRESS OF THE SCB; R5 ADDRESS OF THE UCB; ; OUTPUTS:;R; R2,R4,R5 PRESERVED; R3 ADDRESS OF THE CST; TRY TO START I/O;-CLACMD:D( MOV (R2),R3 ;/*Q.CST*/ ;R3 IS THE CST# BIT #C1.RDY,(R3) ;IS THE RDY SET?D BEQ 70$ ;NOT READY, BAG ITNA10$: BIT #^C,(R3) ;IS ANYTHING BUT RDY OR DQU SET?N+ BNE 20$ ;YES, WE NEED TO DO SOMETHING SPN& TST (R4) ;IS THERE AN I/O TO START? BEQ 70$ ;NOPE, JUST EXIT  .IF DF D$$DSK ;IF DISK> BITB #C2.SHD,C.FLAG(R3) ;IS THIS A RECURSIVE ENTRY? C2.SHD IS, ;ONLY FOR TESTING RECUSRSION THAT MIGHT ;OCCUR DURING SHADOWING F BNE 80$ ;IF NE YES, JUST EXIT' .IF DF DU$CHK ;IF QUEUE OPTIMIZATIONT7 BITB #S3.OPT,S.ST3(R4) ;IS QUEUE OPTIMIZATION ENABLED?O BEQ 13$ ;NO, CALL PKTCHK 0 MOV C.OLHD(R3),R1 ;GET THE OUTSTANDING REQUEST+ BEQ 15$ ;IF NONE, WE CAN ISSUE A REQUESTG' TST (R1) ;MORE THAN ONE OUTSTANDING?R BEQ 15$ ;NO, ISSUE THIS ONE BR 70$ ;CAN'T ISSUE ONE NOW00Mssrbl .ENDC ;DU$CHK .IFTF ;D$$DSK>13$: CALLV PORT,PKTCHK ;IS THERE A COMMAND PACKET WE CAN USE? BCS 70$ ;IF NOT, JUST RETURNO$15$: CALLR CMDSIO ;GO START AN I/O>20$: CALLV PORT,PKTCHK ;IS THERE A COMMAND PACKET WE CAN USE? BCS 70$ ;IF NOT, JUST RETURNE, BIT #C1.GCS,(R3) ;ARE WE IN THE GCS STATE? BEQ 30$ ;NOPE, KEEP LOOKING' CALLR GCSSIO ;GO START A GCS COMMANDS30$:' BIT #C1.GUS,(R3) ;CHECK FOR GUS STATET BEQ 50$ ;NO. CONTINUES CALLR GUSSIO ;PROCESS GUS50$: .IFT ;D$$DSK - DISK DRIVER ONLY/ BIT #C1.REC,(R3) ;ARE WE IN RESYNCH RECOVERY?O BEQ 70$ ;NOPE, KEEP LOOKING+ CALLR RECSIO ;GO TO THE RECOVERY ROUTINE  .IFF ;D$$DSK - IF TAPEL, BIT #C1.ABO,(R3) ;ARE WE IN THE ABO STATE? BEQ 70$ ;NOPE, KEEP LOOKING( CALLR ABOSIO ;GO ISSUE ABORT COMMANDS .ENDC ;D$$DSK70$:+ BIT #C1.DQU,(R3) ;SHOULD WE DEQUEUE UMRS?R BEQ 80$ ;NOPE! BIC #C1.DQU,(R3) ;CLEAR THE BIT 6 CALL @DQUMR ;AND CALL IT - NOTE THAT THIS MUST BE A/ ;CALL, NOT A CALLR. $DQUMR IS A COROUTINEN080$: RETURN ;DON'T KNOW WHAT TO DO, SO RETURN .PAGE! .SBTTL CLADAT - HANDLE DATAGRAMSR;+;**-CLADAT - PROCESS DATAGRAMS;;. ; INPUTS: ; R1=ADDRESS OF END PACKET; R2=ADDRESS OF QSTB; R3=ADDRESS OF CST;; R4=ADDRESS OF SCBC; R5=ADDRESS OF UCBU;B; ; OUTPUTS:;N;-CLADAT:0 .IF DF E$$LOG (8 MOV R1,KEEPR1 ;SAVE END PACKET ADDRESS SO WE CAN USE IT: PUSH #SCUCB ;YES, PUSH "SCAN UCB'S" ROUTINE ON THE STACK&10$: CALL @(SP)+ ;CALL THE CO-ROUTINE BCS 20$ ;IF CS, NO MORE UCB'S7 MOV KEEPR1,R1 ;GET THE END PACKET ADDRESS BACK FOR USEC CMPB P.UNIT(R1),U.UNIT(R5) ;IS THIS ERROR LOG PACKET FOR THIS UCBS BNE 10$ ;IF NE NO" ADD #10,SP ;YES, FLUSH THE STACK .IF DF,D$$DSKA BIT #UU.SEL,U.UTIL(R5) ;SHOULD PACKET BE LOGGED FOR THIS UNIT? - BNE 20$ ;NE - DO NOT LOG THE ERROR PACKET( .ENDC ;D$$DSK MOV P.STS(R1),R0R0 BIC #^C,R0 ;R0 IS THE MAJOR STATUS CODE< MOVB RSXTAB(R0),R0 ;R0 IS THE CORRESPONDING RSX STATUS CODE BIC #177400,R0 . CALL LERR ;TRY TO LOG THE ERROR LOG DATAGRAM.20$: MOV KEEPR1,R1 ;RESTORE END PACKET ADDRESS .ENDC+ JMPV PORT,PKTDR ;DEALLOCATE RECEIVE BUFFER .PAGE1 .SBTTL CLAEND - CLASS DISPATCHER FOR END PACKETS;+,; **-CLAEND-CLASS DISPATCHER FOR END PACKETS;K; ROUTINE DESCRIPTIONN; <; WHEN THE PORT DRIVER RECEIVES END PACKETS IT WILL?; CALL THE CLASS DRIVER AT CLAEND FOR EACH END PACKET.A6; PICKS UP THE THREAD FOR EACH I/O AND RETURN=; TO THE CORRECT PLACE TO PROCESS THE END PACKET ANDR; COMPLETE THE I/O.;, ; INPUTS: ; ; R0=A; R1=ADDRESS OF END PACKET; R2=ADDRESS OF QSTR; R3=ADDRESS OF CSTE; R4=ADDRESS OF SCBA; R5=ADDRESS OF UCB ; ASSUMES ONE SCB PER CONTROLLER;T;R ; OUTPUTS:;S; R2-R5 ARE PRESERVEDT;-CLAEND: 5 BITB #OP.AVA,P.OPCD(R1) ;IS IT AN ATTENTION MESSAGE?L' BNE 100$ ;GO HANDLE ATTENTION MESSAGEE/10$: MOV P.CRF+2(R1),R5 ;GET I/O PACKET ADDRESSH) MOV I.UCB(R5),R5 ;GET ACTUAL UCB ADDRESS 8 CMPB #OP.GCS!OP.END,P.OPCD(R1) ;IS IT A GET CMD STATUS? BEQ 200$ ;GO PROCESS IN TMOGCS20$:& MOV C.OLHD(R3),R0 ;GET ENTRY IN QUEUE" BEQ 45$ ;NO ENTRIES IN THE QUEUE' MOV P.CRF+2(R1),R3 ;IOP ADDRESS IF ONE 30$: CMP R3,R0 ;IS THIS THE ONE?R BEQ 50$ ;ENTRY IS IN QUEUE MOV (R0),R0 ;GET NEXT ENTRY  BNE 30$ ;CHECK ITD40$:- MOV (R2),R3 ;/*Q.CST*/ ;RESTORE CST ADDRESSN845$: JMPV PORT,PKTDR ;RETURN PACKET. NO MORE PROCESSING.50$:! .IF DF D$$DSK ;DISK CONDITIONALA, TST P.STS(R1) ;ANYTHING OTHER THAN SUCCESS?" BEQ 70$ ;NOPE, CONTINUE NORMALLY0 CALL ENDSIO ;GO SEE IF WE SHOULD STALL THE I/O2 BCC 70$ ;IF CARRY CLEAR, THE I/O WAS NOT STALLED. RETURN ;IF THE I/O WAS STALLED, JUST RETURN70$: .ENDC ;DISK CONDITIONAL, JMP @I.PRM+6(R3) ;GO TO END PROCESS ROUTINE.100$: CALLR CLAATN ;PROCESS ATTENTION MESSAGE>200$: CALLR TMOGCS ;PROCESS IN TMOGCS ROUTINE INSTEAD OF HERE .PAGE% .SBTTL CLAERR - FATAL ERROR RECOVERY;+&;**-CLAERR- A FATAL ERROR HAS OCCURRED;SH; ON FATAL ERROR00UssmkTADATADATADATADATADATA RESET CONTROLLER AND UNIT STATES. CLEAN UP C.OLHD QUEUE; DEALLOCATING ALL PIOPS;UH; FOR DISK, MOVE C.OLHD OLDEST I/O TO C.REDO SO THAT IT WILL BE RETRIED H; THE CONTROLLER COMES BACK. MOVE ALL COMMANDS IN C.OLHD TO THE FRONT O;; FOR TAPE, MOVE ALL COMMANDSP;E ; INPUTS:;0; R2 ADDRESS OF QSTO; R3 ADDRESS OF CSTE; R4 ADDRESS OF SCB ; R5 ADDRESS OF A UCBI;I ; OUTPUTS:;; R2,R3,R4 PRESERVED; R5 IS A UCB ADDRESS;-2TMOERR: MOVB #4,Q.RTY(R2) ;SET UP THE RETRY COUNT SEC ;LOG ERRORCLAERR:N/ BIT #C1.FAT,(R3) ;DID WE ALREADY DO ALL THIS?I( BEQ 10$ ;NOPE, IT'S TIME TO DO IT NOW RETURN ;DON'T DO IT AGAIN 10$:;E/; IF CARRY IS SET THEN LOG FATAL HARDWARE ERRORMD; THIS ROUTINE IS CALLED ON 11M BOOT IN WHICH CASE THERE IS NO ERROR;  .IF DF E$$LOG 2 BCC 20$2 MOV #IE.FHE,R0 ;PUT FATAL HARDWARE ERROR ON STACK! CALL CERR ;LOG CONTROLLER ERROR: .ENDC,20$: CALLV PORT,STOMP ;STOMP THE CONTROLLER;R4; RESET ALL STATES EXCEPT C1.REC,C1.R2,C1.UMR,C1.CON;G) BIC #^C,(R3)E) BIS #C1.FAT,(R3) ;MARK THAT WE DID THIST MOV R3,R0 ;GET THE CSTR+ ADD #C.OLHD,R0 ;POINT TO THE C.OLHD QUEUEY; "; DEALLOCATE ALL PIOPS FROM C.OLHD;H! MOV R0,R1 ;COPY THE QUEUE HEAD # MOV (R1),R1 ;GET THE NEXT PACKETF BEQ 50$ ;NONE LEFT$'30$: PUSH <(R1)> ;POINTER TO NEXT IOPO) BITB #IP.FAK,I.PRM+11(R1) ;IS IT A PIOP?O BEQ 40$ ;NOPE, CONTINUE PUSH ;SAVE R0 AND R3( CALL @QRMVA ;REMOVE IT FROM THE QUEUE POP ;RESTORE R3# CALL PIOPDE ;DEALLOCATE IT( POP ;RESTORE R0;40$: POP ;RESTORE R1R BNE 30$ ;GET ANOTHERD$50$: MOV S.QST(R4),R2 ;RESTORE THE 4 MOV (R2),R3 ;/*Q.CST*/ ;RESTORE CST ADDRESS TO R3;1M; TAKE ANY IOP'S WAITING FOR UMR'S OUT OF THE UMR WAIT QUEUE PUT THEM BACK INEM; S.LHD. CHANGE THE PRIORITY TO INSURE THAT IT GOES AT THE BEGINNING OF THE S!; QUEUE, AND CLEAR THE C1.UMR BITT;E9 BIT #C1.UMR,(R3) ;WAS THIS CONTROLLER WAITING FOR UMRS?I BEQ 80$ ;IF EQ NO PUSH ;SAVE R2 AND R3E3 MOV @UMRWT,R0 ;GET THE HEAD OF THE UMR WAIT QUEUEP) BEQ 70$ ;IF NOTHING, SKIP THIS SECTIONE' MOV R0,R1 ;COPY THE QUEUE HEAD TO R1$60$: MOV (R1),R1 ;GET A WAIT BLOCK BEQ 70$ ;NONE LEFTA1 CMP 10(R1),R4 ;WAIT BLOCK FOR THIS CONTROLLER? Q ;..(SAME SCB) BNE 60$ ;NO, TRY ANOTHERR/ CALL @QRMVA ;REMOVE THE BLOCK FROM THE QUEUEE7 MOV 6(R1),R1 ;GET THE IOP ADDRESS FROM THE WAIT BLOCK(- .IF DF D$$DSK&DU$CHK ;IF QUEUE OPTIMIZATIONQ3 MOV I.UCB(R1),R5 ;MAKE SURE WE HAVE THE RIGHT UCBV CALL REQUE ;RECONVERT THE LBN .ENDC ;D$$DSK&DU$CHK' MOV R4,R0 ;PUT THE S.LHD QUEUE ON R0 4 CALL @QINSB ;INSERT AT THE BEGINNING OF THE QUEUE%70$: POP ;RESTORE R3 AND R2C% BIC #C1.UMR,(R3) ;CLEAR THE UMR BITR;E; DEALLOCATE ANY UMR'S USEDE;$80$:* ADD #C.OLHD,R3 ;POINT TO THE .OLHD QUEUE 90$: MOV (R3),R3 ;GET A PACKET BEQ 100$ ;NONE LEFT- BITB #IP.UMR,I.PRM+11(R3) ;IS IT USING UMRS?; BEQ 90$ ;NO, CONTINUE, CLR R0 ;TELL ENDCM1 NOT TO FINISH THE I/O PUSH ;SAVE R3R& CALL ENDCM1 ;GO DEALLOCATE THE UMRS POP ;RESTORE R3  BR 90$ ;GO TRY ANOTHERL/100$: MOV (R2),R3 ;/*Q.CST*/ ;RESTORE THE CST+ DECB Q.RTY(R2) ;DECREMENT THE RETRY COUNT#, BGT 110$ ;IF GT, WE STILL HAVE MORE TRIES;E?; WE'VE EXHAUSTED OUR TIMEOUTS. CLEAN OUT THE QUEUES AND EXIT.Q;E. MOV (R2),R1 ;/*Q.CST*/ ;GET THE CST ADDRESS" CLR (R1) ;SET THE STATE OFFLINE- ADD #C.OLHD,R1 ;POINTER TO THE C.OLHD QUEUEE CALL FINIO ;FLUSH THE QUEUE" MOV R4,R1 ;GET THE SCB ADDDRESS+ ADD #S.LHD,R1 ;POINTER TO THE S.LHD QUEUEP. JMP FINIO ;FLUSH THAT QUEUE TUEUE, AND EXIT110$:$2 MOVB #1,S.CTM(R4) ;SET A 1 SECOND TIME-OUT COUNT' ;RESYNCH WILL START FROM TIME-OUT.B& TST S.BSYU(R4) ;IS THERE A BUSY UNIT BNE 120$ ;IF NE, YES ' MOV R5,S.BSYU(R4) ;ELSE MAKE ONE BUSYX BISB #US.BSY,U.STS(R5);120$:*- ADD #C.OLHD,R3 ;POINTER TO THE C.OLHD QUEUEA4 MOV R3,R0 ;INSURE QUEUE ADDRESS SET UP FOR RSX-11M+ .IF DF D$$DSK ;IF 00]ssrblTHIS IS THE DISK DRIVER1;;*; SEE IF WE'VE RE-TRYED THE OLDEST COMMAND;T5 TST C.REDO-C.OLHD(R3) ;IS THE OLDEST CMD STILL HERE?E) BEQ 130$ ;IF EQ, NO, SKIP THIS SECTIONT;1;C3; IF WE HAVE ALREADY TRYED THE OLDEST COMMAND TWICEE.; IT MUST BE 'FUNNY' SO COMPLETE IT AS IE.ABO.;E9 CMP (R3),C.REDO-C.OLHD(R3) ;OLDEST AT LAST FAIL THE SAMES ; AS OLDEST THIS TIME? BNE 130$ ;IF NE, CONTINUE& ;ELSE THE OLDEST HAS FAILED TWICE ; SO COMPLETE IT AS IE.ABO MOV R3,R0 ;R0 IS THE QUEUES$ MOV (R0),R1 ;R1 IS THE OLDEST IOP4 CALL @QRMVA ;REMOVE THE OLDEST CMD FROM THE QUEUE ;R1 IS STILL IOP ADDRESSE- MOV S.QST(R4),R2 ;R2,R3 DESTROYED BY $QRMVAT ;FOR ENDCOM:A* MOV I.UCB(R1),R5 ; R5 = THE UCB ADDRESS ; R4 = THE SCB ADDRESS MOV R1,R3 ; R3 = IOP ADDRESS CLR R1 ; R1 = BYTE COUNT$ MOV #IE.ABO&377,R0 ; R0 = #IE.ABO CALL ENDCM1 ;FINISH THE IOP;N?; ADD C.OLHD QUEUE TO C.REQU AND REMEMBER OLDEST FAILED COMMANDT; 0130$: MOV (R2),R3 ;/*Q.CST*/ ;GET THE CST BACK6 MOV C.OLHD(R3),C.REDO(R3) ;REMEMBER OLDEST FAILED CMD MOV R3,R0 ;PUT THE CST IN R0I+ ADD #C.OLHD,R0 ;R0 POINTS TO C.OLHD QUEUER, TST (R0) ;IS THERE ANYTHING IN THE QUEUE? BEQ 150$ ;NO, JUST CONTINUE MOV (R2),R1 ;/*Q.CST*/ 1 ADD #C.REQU,R1 ;R1 IS THE ADDRESS OF THE C.REQUR/ PUSH <(R1)> ;SAVE THE ADDRESS OF THE FIRST P0, BNE 140$ ;WAS THERE ANYTHING IN THE QUEUE2 MOV 2(R0),2(R1) ;NO, COPY THE LAST PACKET POINTE2140$: MOV (R0),(R1) ;COPY THE POINTER FROM C.OLHD CLR (R0) ;QUEUE IS NOW EMPTY30 PUSH <2(R0)> ;SAVE THE LAST PACKET IN THE C.O/ MOV R0,2(R0) ;FINISH SETTING UP THE EMPTY QUEI, POP ;GET BACK THE ADDRESS OF THE LAS( POP <(R0)> ;FIRST IN QUEUE NOW ON END@150$: BIS #C1.REC!C1.R1!C1.R2,(R3) ;INDICATE WE ARE IN RECOVERY .IFF ;D$$DSK ;THIS IS FOR TAPE- MOV R0,R1 ;MOVE THE C.OLHD POINTER TO R1 F . CALL FINIO ;FINISH ALL I/O IN C.OLHD AS IE. .IFTF ;D$$DSK7 PUSH <#SCUCB> ;PUSH ADDRESS OF COROUTINE TO SCAN UCBSF160$: CALL @(SP)+ ;GET A UCB BCS 190$ ;NONE LEFT .IFT ;D$$DSKA9 BIT #UU.RDY,U.UTIL(R5) ;WAS THE UNIT IN THE READY STATE?M BEQ 180$ ;NOPE, KEEP LOOKINGH, BITB #US.OFL,U.ST2(R5) ;IS THE UNIT ONLINE?' BNE 180$ ;NO, THEN DON'T BRING IT UPR) BISB #US.SPU,U.STS(R5) ;SET SPIN UP BIT170$:  .ENDC ;D$$DSK= .IIF DF T$$APE BISB #US.PWF,U.STS(R5) ;SET THE POWERFAIL BITLC180$: BIC #^C,U.UTIL(R5); CLEAR - ;UTILITY WORD BUT KEEP SOME BITS THE SAMEB ;(CONTEXT ACROSS COMMANDS)+ CLR U.CNT(R5) ;U.CNT USED FOR RETRY COUNT BR 160$ ;GO GET ANOTHER ONE 190$: RETURN .PAGE% .SBTTL CLASUP - CLASS SET UP ROUTINE;+!; - CLASUP - CLASS SET UP ROUTINEL;?>; THIS ROUTINE WILL MAKE SURE THAT THE COMMON IS IN MEMORY AND9; PROPERLY SET UP. THE FOLLOWING FUNCTIONS ARE PERFORMED:T;P1; 1. DETERMINE WHICH PORT THE CONTROLLER IS USING8%; 2. MAKE SURE THE PORT IS IN MEMORY.!?; 3. IF PORT IS NOT PRESENT, TRY TO LOAD IT. IF THAT FAILS, THET7; DRIVER MUST BE DISABLED AND SEND MESSAGE VIA TKTN. /; 4. IF PORT IS PRESENT, FILL IN S.PBIA IN SCB.A; 5. THE PORT MUST BEN ; - FIXED.; - NON SHUFFLABLE!; - NON REMOVABLE (BUMP P.RMCT)A; - NOT TOUCHABLE?; ; INPUTS;W; R4 = SCB ADDRESS; R1 = VIRTUAL CIRCUIT ID;R ; OUTPUTSU;T; ALL REG ARE PRESERVED%; C=0 SUCCESS, COMMON LOADED PROPERLYP); C=1 FAILURE, COMMON NOT LOADED PROPERLYE!; S.PBIA IN SCB WITH BIAS OF PORTO;-CLASUP:S! CALL SAVREG ;SAVE REGISTERS 0-3 . MOV S.PORT(R4),RADNAM ;GET RAD50 NAME OF PORT# MOV #RADNAM,R3 ;NAME TO SEARCH FORN% CALL @SRNAM ;SEARCH FOR PORT COMMONR" ;IF FOUND, R2 IS PCB ADDRESS  BCS 20$ ;NO COMMON/ MOV R2,COMPCB ;SAVE PCB ADDRESS OF PORT COMMON  MOV R2,R1 ;SAVE R20 BIT #PS.OUT,P.STAT(R1) ;PORT COMMON IN MEMORY ? BEQ 10$ ;YES. MOVB #160.,P.PRI(R1) ;BRING IN COMMON QUICKLY' CALL @LDREG ;BRING COMMON INTO MEMORYO# MOV COMPCB,R1 ;RESTORE PCB ADDRESSB. BR 20$ ;WE CAN'T WAIT FOR IT TO BE IN MEMORY:10$: INCB P.RMCT(R1) ;BUMP RESIDENT 00essmkTADATADATADATADATADATAMAPPED TASK TASK COUNT= BIS #PS.CHK!PS.FXD!PS.NSF,P.STAT(R1);MAKE NON-CHECKPOINTABLE  ; FIXED IN MEMORYU ; NON-SHUFFLEABLE2, BIS #P2.LMA,P.ST2(R1);DON'T TOUCH PARTITION3 MOV P.REL(R1),S.PBIA(R4);STORE BIAS OF PORT IN SCBT CLC ;INDICATE NO ERROR  RETURN ;SUCCESFUL RETURNV620$: MOVB #IE.PNT,@SCERR ;INDICATE PARTITION NOT THERE SEC ;INDICATE FAILURE RETURNM .PAGE. .SBTTL CLASYN - CLASS SYNCHRONIZATION ROUTINE;+); **-CLASYN-CLASS SYNCHRONIZATION ROUTINEP;SC; THIS ROUTINE IS CALLED BY THE PORT DRIVER FOR ONE OF TWO REASONS:A?; HARDWARE SYNCHRONIZATION HAS COMPLETED SUCESSFULLY OR HADWARE C; SYNCHRONIZATION HAS FAILED. IF THE SYNCHRONIZATION WAS SUCESSFUL,PE; THE CLASS DRIVER MUST ISSUE AN OP.SCC IMMEDIATELY AND PUT ALL UNITSO; INTO THEIR KNOWN STATES.;V ; INPUTS:V;I; R2=ADDRESS OF QSTE; R3=ADDRESS OF CST; R4=ADDRESS OF SCBU; R5=ADDRESS OF UCB;B; C=1 IF SYNCHRONIZATION FAILEDN!; C=0 IF SYNCHRONIZATION SUCEEDEDC;N ; OUTPUTS:;P; R0-R1 ARE DESTROYED ; R2-R5 ARE PRESERVEDE;O;-CLASYN:R+ BCC 10$ ;IF CC, SYNCHRONIZATION SUCCEEDEDL# JMP CLAERR ;JUMP TO ERROR ROUTINER;Z2; SUCESSFUL COMPLETION OF HARDWARE SYNCHRONIZATION;P10$:3 CLRB Q.IOSQ(R2) ;RESET SEQ NUM FOR THIS CONTROLLERU BIS #C1.SCC,(R3) ;SCC STATE" CALL PIOPAL ;ALLOCATE PSEUDO-IOP6 MOV #SCCFUN,R0 ;POINT TO TABLE ENTRY FOR SCC COMMANDS8 CALL CMDCOM ;GET A (T)MSCP PKT AND FILL IN SOME FIELDS ;R1 IS ADD OF PKTO! CLR P.HTMO(R1) ;SET HOST TIMEOUT3 CLR P.UNIT(R1) ;RESERVED FIELD. MUST BE ZERO!!!!!O .IF DF,E$$LOGCH MOV #CF.ATN!CF.MSC!CF.THS,P.CNTF(R1);ALL PACKETS BACK FROM CONTROLLER .IFF ;E$$LOGE5 MOV #CF.ATN,P.CNTF(R1) ;ONLY ATTENTION MSG PACKETS .ENDC ;E$$LOG> MOVB #10.,S.ITM(R4) ;TIMEOUT OF 10 SECONDS ON THE SCC COMMAND) CALL CMDSEN ;SEND COMMAND TO CONTROLLER#;F; END PACKET PROCESSINGR;O ; INPUTS:N; R1-PTR TO END PACKET;)$ MOV R1,R0 ;COPY END PACKET ADDRESS0 ADD #P.CNTI,R0 ;POINT TO THE CONTROLLER CONTEXT MOV R2,R3 ;COPY QST ADDRESS + ADD #Q.CNTI,R3 ;POINT TO CONTROLLER FIELDSC, MOV (R0)+,(R3)+ ;MOVE WORD OF CONTROLLER ID, MOV (R0)+,(R3)+ ;MOVE WORD OF CONTROLLER ID, MOV (R0)+,(R3)+ ;MOVE WORD OF CONTROLLER ID, MOV (R0)+,(R3)+ ;MOVE WORD OF CONTROLLER ID7 MOVB P.CSVR(R1),(R3)+;MOVE CONTROLLER SOFTWARE VERSIONN7 MOVB P.CHVR(R1),(R3) ;MOVE CONTROLLER HARDWARE VERSIONN .IF DF,T$$APE6 BIC #UU.BLK,U.UTIL(R5) ;ASSUME MULTI DENSITY DEVICE: MOV #SNGDEN,R3 ;ADDRESS OF SPECIAL DRIVE/CONTROLLERS#14$: TSTB (R3) ;END OF TABLE?#% BLT 17$ ;YES. USE THE DEFAULT6 CMPB (R3)+,Q.CNTI+6(R2);IS IT A SPECIAL CONTROLLER?* BNE 14$ ;NO. LOOK AT ANOTHER ENTRY9 BIS #UU.BLK,U.UTIL(R5) ;YES. MARK IT AS SINGLE DENSITYE17$: ;REFERENCE LABEL  .ENDC ;T$$APE1 MOV (R2),R3 ;/*Q.CST*/ GET THE CST ADDRESS BACK(( MOV P.STS(R1),R0 ;GET STATUS/EVENT CODE/ BIC #^C,R0 ;CLEAR ALL BUT STATUS/EVENTM BEQ 20$ ;IF EQ, YES;M; SYNCHRONIZATION HAS FAILED;I SEC ;LOG ERRORS5 JMP CLAERR ;INDICATE ERROR. IF ANY RETRIES ARE LEFT;' ;A RETRY WILL BE INITIATED FROM THEN ;TIME-OUT ROUTINEL20$:4 BIC #C1.SCC!C1.SYN,(R3) ;LEAVE FROM THE SCC AND SYN* BIS #C1.RDY,(R3) ;AND GO TO THE RDY STATE, .IF DF D$$DSK&DUTMO ;IF PRE-DEFINED TIMEOUT4 MOVB #DUTMO,S.ITM(R4) ;SET UP INITIAL TIMEOUT VALUE .IFF ;NORMAL CASE9 MOVB P.CTMO(R1),S.ITM(R4) ;SET-UP INITIAL TIME-OUT VALUEA .ENDC ;D$$DSK&DUTMO: BIT #C1.CON,(R3) ;IS THIS A CON ON-LINE FOR THE CONTROLLE BEQ 40$ ;IF EQ, NO$ BIC #C1.CON,(R3) ;CLEAR OUT THE BIT8 MOVB #IS.SUC&377,@SCERR;INDICATE SUCCESS OF CON ON_LINE& MOV S.KRB(R4),R0 ;GET THE KRB ADDRESS% MOV K.OWN(R0),R0 ;THE THE OWNING UCBB2 BIT #UU.SPC,U.UTIL(R0) ;IS IT THE SPECIAL ONLINE?$ BEQ 30$ ;NO, DO THE DELAYED RETURN5 BIC #UU.SPC,U.UTIL(R0) ;CLEAR THE SPECIAL ONLINE BIT.! BR 40$ ;SKIP THE DELAYED RETURN)230$: PUSH ;SAVE REGISTERS TO BE SAFE MOV S.KRB(R4),R2 ;GET KRB BACK - CALL @SAVSTK ;CALL EXEC ROUTINE TO INDICATE4 ;CON-ONLINE HAS 00mssrblFINISHED% POP ;RESTORE REGISTERS7$40$: MOV P.CRF+2(R1),R3 ;ADD OF PIOP3 MOV #IS.SUC,R0 ;TELL ENDCOM TO DEALLOCATE THE PIOPK) PUSH <#0> ;PUSH BYTE COUNT - FOR ENDCOMS* CALL ENDCMO ;PERFORM END PROCESSING CODE .IF DF,D$$DSK .IF NE,SPNTMO;BL;THE FOLLOWING CODE SCANS THE UCBS ON THIS CONTROLLER LOOKING FOR A SPECIFICI;UNIT TYPE (IN THIS CASE RA81). IF ONE IS FOUND, THE UU.SER BIT FOR THATBJ;UNIT IS SET SO THAT NO I/O'S WILL BE ACTIVATED FOR THAT UNIT. A TIMER ISI;SET SO THAT AFTER 'N' SECONDS, THE BIT GETS CLEARED AND I/O TO THAT UNITPJ;WILL BE ALLOWED TO CONTINUE. A FORCED TIMEOUT WILL MAKE SURE IT HAPPENS.K;THE TIMER AND FORCED TIMEOUT WILL NOT OCCUR UNTIL THE CONTROLLER AND UNITSPJ;HAVE BEEN MSCP ONLINED AT LEAST ONCE SINCE IT IS THAT PROCESS WHICH FILLS#;IN THE UCB WITH THE DEVICE 'NAME'.N;ODELAY:. PUSH ;SAVE FIRST HALF OF REGISTERS CALL @ALCLK ;GET A CLOCK BLOCK. BCS 110$ ;DID NOT GET ONE. SO, JUST GET OUT5 PUSH ;SAVE REGISTERS NEEDED DURING THISS PUSH <#0> ;COUNTERD MOV #140000+X.NAME,R1 ;POINT TO DEVICE NAME IN UCBX (APR 6 MAPPING)" MOV S.KRB(R4),R2 ;GET KRB ADDRESS. ADD K.OFF(R2),R2 ;POINT TO START OF UCB TABLE$10$: CMP (R2),#-1 ;END OF UCB TABLE? BEQ 20$ ;BRANCH IF SOI MOV (R2)+,R3 ;GET NEXT UCBF% BITB #US.SPU,U.STS(R3) ;SPINNING UP?' BEQ 10$ ;BRANCH IF NOT) MOV U.UCBX(R3),@KISR6 ;MAP UCB EXTENSION CMP #^RRA8,(R1) ;RA81? (RAD50) BNE 10$ ;BRANCH IF NOT! CMP #^R1 ,2(R1) ;RA81? (RAD50)  BNE 10$ ;BRANCH IF NOT INC (SP) ;COUNT IT2 BISB #UU.SER,U.UTIL(R3) ;BLOCK OP.GUS FROM RECSIO BR 10$C;();SET UP CLOCK BLOCK IF RA81(S) WERE FOUNDA;E20$: TST (SP)+ ;ANY RA81? BEQ 100$ ;BRANCH IF NOT:% PUSH ;SAVE WORK REGISTERS2 MOV @TKPS,R0 ;GET CLOCK RATER( MOV #SPNTMO,R1 ;GET TIME OUT IN SECONDS CALL @MULS ;MULTIPLY$ MOV R1,R2 ;SWITCH TO REGS EXPECTED MOV R0,R1 ;BY $CLINS( POP ;GET BACK CLOCK BLOCK ADDRESS) MOV #TIMHAN,R3 ;CLOCK EXPIRATION HANDLER + MOV R3,C.SUB(R0) ;CLOCK EXPIRATION HANDLER 1 MOV S.KRB(R4),R5 ;SAVE KRB ADDRESS AS IDENTIFIERF2 MOV #C.SYST,R4 ;CLOCK REQUEST TYPE - INTERNAL S/R% CALL @CLINS ;PUT IN THE CLOCK QUEUEA* POP ;GET UCB, SCB ADDRESSES BACK4100$: POP <@KISR6,R3> ;GET MAPPING AND REGISTER BACK5110$: POP ;GET REST OF REGISTERS RESTOREDC JMP SKIP01UTIMHAN:V8 PUSH ;SAVE REGISTERS / CURRENT MAPPING PUSH <#0> ;SET UP A COUNTERK4 MOV #140000+X.NAME,R1 ;POINT TO DEVICE NAME IN UCBX" MOV C.TCB(R4),R2 ;GET KRB ADDRESS. ADD K.OFF(R2),R2 ;POINT TO START OF UCB TABLE$10$: CMP (R2),#-1 ;END OF UCB TABLE? BEQ 20$ ;BRANCH IF SOR MOV (R2)+,R3 ;GET NEXT UCBL% BITB #US.SPU,U.STS(R3) ;SPINNING UP?  BEQ 10$ ;BRANCH IF NOT) MOV U.UCBX(R3),@KISR6 ;MAP ucb EXTENSION CMP #^RRA8,(R1) ;RA81? (RAD50) BNE 10$ ;BRANCH IF NOT! CMP #^R1 ,2(R1) ;RA81? (RAD50)R BNE 10$ ;BRANCH IF NOT INC (SP)+ ;COUNT IT 4 BICB #UU.SER,U.UTIL(R3) ;UNBLOCK OP.GUS FROM RECSIO BR 10$C;A8;CONDITIONALLY SETUP DUDRV TIMEOUT IF RA81(S) WERE FOUND;)20$: TST (SP)+ ;ANY RA81(S)?E BEQ 30$ ;BRANCH IF NOT MOV C.TCB(R4),R2 ;GET KRB% ADD K.OFF(R2),R2 ;POINT TO UCB TABLEL MOV (R2),R3 ;GET A UCB MOV U.SCB(R3),R2 ;GET THE SCB% TSTB S.CTM(R2) ;TIMEOUT IN PROGRESS?c* BNE 30$ ;BRANCH IF SO - IT'LL DO THE JOB# INCB S.CTM(R2) ;SET A QUICK ONE UPR$ TST S.BSYU(R2) ;GOT AN ACTIVE UNIT?( BNE 30$ ;BRANCH IF SO - THAT'LL DO TOO+ MOV R3,S.BSYU(R2) ;SET AN 'ACTIVE' UNIT UPE) BISB #US.BSY,U.STS(R3) ;AND MARK IT BUSYD;T";DEALLOCATE CLOCK BLOCK AND RETURN; 30$: POP <@KISR6,R3,R2,R1>Q! MOV R4,R0 ;POINT TO CLOCK BLOCK) CALLR @DECLK ;DEALLOCATE IT SKIP01: ;REFERENCE LABEL2 .ENDC ;SPNTMO .ENDC ;D$$DSK& BIT #C1.REC,(R3) ;ARE WE IN RECOVERY? BEQ 50$ ;NO, JUST RETURN0 MOVB #1,S.CTM(R4) ;SET A 1 SECOND TIMEOUT COUNT( TST S.BSYU(R4) ;IS A UNIT ALREADY BUSY? BNE 50$ ;YES, RETURN" MOV R5,S.BSYU(R4) ;SET A BUSY UCB( BISB #US.BSY,U.STS(R5) ;MARK IT AS BUSY 50$: RETURNS .PAGE; .SBTTL CMDCOM - ALLOCATE AND 00ussmkTADATADATADATADATADATAFILL IN COMMON COMMAND PACKETN;+7; **-CMDCOM- ALLOCATE AND FILL IN COMMON COMMAND PACKETC;L?; THIS ROUTINE ALLOCATES A COMMAND PACKET AND A RESPONSE PACKET2=; FOR THE TMSCP/MSCP COMMAND ABOUT TO BE ISSUED. BEFORE THISN>; ROUTINE IS CLALED, PKTCHK MUST HAVE BEEN CALLED TO DETERMINE@; IS THERE ARE ENOUGH RESOURCES TO START THE TMSCP/MSCP I/O. TO;; HAVE REACHED THIS POINT, SUFFICIENT RESOURCES MUST EXIST.;SB; ONCE THE COMMAND PACKET IS ALLOCATED, THIS ROUTINE FILLS IN SOMEA; OF THE COMMON FIELDS FOR VARIOUS ROUTINES. THE COMMAND PACKET,O:; WHEN FIRST ALLOCATED, IS ZEROED OUT BEGINNING AT TEXT+0.;I ; INPUTS:S;C8; R0=ADDRESS OF THE ENTRY IN THE FUNCTION DISPATCH TABLE; R2=ADDRESS OF QSTI; R3=I/O PACKET ADDRESSO; R4=ADDRESS OF SCBH; R5=ADDRESS OF UCBE;O ; OUTPUTS:;S; R0=PRESERVED(; R1=ADDRESS OF COMMAND PACKET ALLOCATED; R2-R5 ARE PRESERVED ;N=; THE FOLLOWING FIELDS ARE INITIALIZED IN THE COMMAND PACKET:CB; P.CRF = COMMAND REFERENCE (PART 1) SET TO I/O SEQ NUMBER?; P.CRF+2 = COMMAND REFERENCE (PART 2) SET TO IOP ADDRESST/; P.UNIT = UNIT NUMBER SET TO U.UNIT(R5)U); P.OPCD = OPCODE SET TO FO.OP(R0)F; REST OF PACKET ZEROED OUTE;-CMDCOM: , PUSH ;SAVE POINTER TO DISPATCH ENTRY/ MOVB FO.SZ(R0),R0 ;GET SIZE OF COMMAND PACKETE2 CALLV PORT,PKTAC ;ALLOCATE/ZERO A COMMAND PACKET4 INCB Q.IOSQ(R2) ;INCR SEQ NUM FOR THIS CONTROLLER5 BICB #^C<17>,Q.IOSQ(R2) ;ONLY USE A FOUR BIT COUNTERO: BISB Q.IOSQ(R2),P.CRF(R1) ;USE AS COMMAND REFERENCE NUM 14 BICB #017,I.PRM+11(R3) ;CLEAR OUT CRF IN I/O PACKETA BISB P.CRF(R1),I.PRM+11(R3) ;STORE THE ACTUAL COMMAND REF NUMBER 7 MOV R3,P.CRF+2(R1) ;IOP ADDRESS IS SECOND CREF NUMBERE< BISB U.UNIT(R5),P.UNIT(R1) ;UNIT NUMBER (OBVIOUSLY 255 MAX)+ POP ;RESTORE DISPATCH ENTRY POINTERE" MOVB FO.OP(R0),P.OPCD(R1) ;OPCODE. BIT #IQ.X,I.FCN(R3) ;INHIBIT ERROR RECOVERY? BEQ 10$ ;NO.T. BIS #MD.SER!MD.SEC,P.MOD(R1) ;INHIBIT IT THEN 10$: RETURNO .PAGE+ .SBTTL CMDDAT - PROCESS ALL DATA TRANSFERSN;+,; **-CMDDAT- PROCESS DATA TRANSFER REQUESTS.;AL; THIS SECTION DOES ALL THE PROCESSING SPECIFIC TO DATA TRANSFER REQUESTS. I; THERE ARE SEPARATE ENTRY POINTS FOR DIFFERENT FUNCTIONS. ANY SPECIFIC IM; PROCESSING IS DONE AT EACH ENTRY POINT, AND THEN THEY ALL JOIN COMMON CODE.N;; WHEN THE ROUTINE CMDSEN IS CALLED, THE PACKET IS SENT AND)L; CONTROL IS RETURNED TO CLACMD TO PROCESS ANOTHER I/O. WHEN THE END PACKETL; IS RECEIVED, CONTROL IS RETURNED TO THIS ROUTINE IMMEDIATELY FOLLOWING THE; CALL CMDSEN COMMAND.;O+; **-CMDCMP- COMPARE HOST DATA ENTRY POINT I3; COMPARES DATA IN HOST BUFFER WITH DATA IN THE MUR; CONTROLLER BUFFER;E ; INPUTS:Y;I$; R0 ADDRESS OF FUNCTION TABLE ENTRY; R2 QST ADDRESS; R3 I/O PACKET ADDRESSP; R4 SCB ADDRESS; R5 UCB ADDRESS;E ; OUTPUTS:;R; DATA TRANSFER I/O STARTEDP; R2-R5 PRESERVED;OA; FIRST CHECK FOR ANY ERROR CONDITIONS THAT WE CAN DETECT WITHOUTAB; SENDING A COMMAND TO THE CONTROLLER. IF NO ERROR CONDITIONS ARE8; FOUND, GET AN MSCP PACKET, FILL IT IN, AND SEND IT OFF;A .IF DF D$$DSK ;IF DISK .ENABL LSBA6CMDWD0: BIS #UU.SEL,U.UTIL(R5) ;DO NOT LOG ERR PACKETSCMDWDD:N: PUSH #MD.CMP!MD.ERR ;SET MODS TO WRITE DELETED DATA MARK+ BR 10$ ;SKIP OVER PUSHING 0 ON THE STACKD6CMDWL0: BIS #UU.SEL,U.UTIL(R5) ;DO NOT LOG ERR PACKETSCMDWLB:R PUSH #0>10$: BIT #DV.SWL,U.CW1(R5) ;IS THE UNIT SOFTWARE WRITE LOCKED? BEQ 20$ ;NOPE, CONTINUE5 MOV #IE.WLK&377,R0 ;SET UP WRITE LOCKED STATUS CODEO BR CMDERR ;AND FINISH THE I/O6CMDRL0: BIS #UU.SEL,U.UTIL(R5) ;DO NOT LOG ERR PACKETSCMDRLB:N PUSH #0?20$: BITB #IO.RPB&IO.WPB,I.FCN(R3) ;IS IT READ/WRITE PHYS. BLK?D4 BNE 40$ ;YES, DON'T CHECK MAX LBN, AND SET MD.CMP@ .IF NDF DU$CHK ;BLOCK CHECKING DONE IN DUCHK IF Q OPT4 PUSH ;SAVE FUNCTION TABLE ADDRESS AND QST+ MOV I.PRM+10(R3),R2 ;GET HIGH PART OF LBNU* MOV I.PRM+12(R3),R0 ;GET LOW PART OF LBN5 MOV I.PRM+4(R3),R1 ;GET NUMBER OF BYTES TO TRANSFERT# ADD #777,R1 ;ROUND 00}ssrblTO NEXT BLOCKT, ROR R1 ;CALCULATE #OF BLOCKS IN HIGH BYTE CLRB R1 ;CLEAR EXCESS BYTEP- SWAB R1 ;CALCULATE # OF BLOCKS IN TRANSFERI/ ADD R1,R0 ;CALCULTE HIGHEST BLOCK NUMBER + 1C ADCB R2 ;& BCS 25$ ;IF CS ILLEGAL BLOCK NUMBER, CMPB R2,U.CW2(R5) ;HIGH PART OF LBN LEGAL? BHI 25$ ;IF HI NO BLO 30$ ;IF LO YESA* CMP R0,U.CW3(R5) ;LOW PART OF LBN LEGAL? BLOS 30$ ;IF LO OR SAME YES=25$: POP ;RESTORE QST AND FUNCTION TABLE ADDRESS , MOV #IE.BLK&377,R0 ;SET UP THE STATUS CODE BR CMDERR ;AND EXITE=30$: POP ;RESTORE QST AND FUNCTION TABLE ADDRESS1 .ENDC ;DU$CHK 9 BITB #IO.RLC&IO.WLC,I.FCN(R3);READ/WRITE CHECK FUNCTION?C$ .IF DF D$$WCK ;IF DISK WRITECHECK BNE 40$ ;YES, SET THE CMP BIT7 CMPB #IO.WLB/256.,I.FCN+1(R3);IS THIS A WRITE REQUEST?$, BNE 50$ ;NO. DO NOT ATTEMPT TO SET MD.CMP6 BITB #US.WCK,U.STS(R5) ;DOES UNIT HAVE CHECK ENABLED? .ENDC ;D$$WCK BEQ 50$ ;NO, FORGET ITD#40$: BIS #MD.CMP,(SP) ;SET THE BITT*50$: BIT #IQ.Q,I.FCN(R3) ;HOW ABOUT IQ.Q? BEQ CMDDAT ;NOPE, KEEP GOINGA BIS #MD.EXP,(SP) ;SET THE BITN BR CMDDAT .DSABL LSB  .IFF ;D$$DSK - IF TAPERCMDCMP:H1 PUSH <#MD.CSE> ;CLEAR SERIOUS EXCEPTION CLEAREDE CMP I.PRM+4(R3),#2 ! ;SPECIAL CASE: RETURN IE.SPCI# ;TO TELL THAT IO.CMP SUPPORTED ;WITHOUT ACTUAL TAPE MOTION ;BEING DONE! BGT CMDDAT ;NO - REAL COMMAND H. MOV #IE.SPC&377,R0 ;INDICATE A 'FAILURE' OF  ;COMMAND TO FUNCTIONP$ BR CMDERR ;CLEAN UP AFTER REQUESTCMDWLB: ) PUSH #MD.CSE ;CLEAR SERIOUS EXCEPTION 9 CMP I.PRM+4(R3),#14 ;ENOUGH BYTES FOR A WRITE FUNCTION?S BHIS 10$ ;IF HI YES- MOV #IE.SPC,R0 ;SET UP BAD PARAMETERS ERROR  BR CMDERR ;AND EXIT=10$: BIT #M.SWL,U.CW2(R5) ;IS THE UNIT SOFTWARE WRITE LOCKED?  BEQ CMDDAT ;NOPE, CONTINUE5 MOV #IE.WLK&377,R0 ;SET UP WRITE LOCKED STATUS CODEB BR CMDERR ;AND FINISH THE I/OCMDRLV:S4 PUSH #MD.REV!MD.CSE ;SET MODIFIER TO READ REVERSE ' BR CMDDAT ;CONTINUE WITH COMMON CODER7CMDRLB: PUSH #MD.CSE ;CLEAR SERIOUS EXCEPTION ON READN' BR CMDDAT ;CONTINUE WITH COMMON CODEO .ENDC ;D$$DSK$CMDERR: TST (SP)+ ;CLEAR THE STACK CALLR CMDXIT ;AND EXIT .CMDDAT: CALL CMDCOM ;GO GET A COMMAND PACKET BIS (SP)+,P.MOD(R1);F1; IF WE NEED UMRS, ALLOCATE THEM FOR THE TRANSFER;M( BIT #DV.EXT,U.CW1(R5) ;DO WE NEED UMRS?$ BNE 50$ ;NOPE, SKIP ALL THIS STUFF .IF DF M$$PRO< BITB #IP.UMR,I.PRM+11(R3) ; HAVE WE ALREADY ALLOCATED BLOCK BEQ 5$ ;NO, THEN WE MUST MOV (R2),R0 ;POINT TO CST;. MOVB I.PRM(R3),R2 ;GET UMR WAIT BLOCK POINTER ASL R2 ; MAKE A WORD OFFSET. ADD R2,R0 ;ADD TO CSTS) ADD #C.UMRW,R0 ;POINT TO UMR WAIT BLOCKS  MOV (R0),R0 ;GET THE ADDRESS, DEC R0 ;LOW BIT FLAG WAS SET - ODD ADDRESS3 BR 32$ ;WE ALREADY HAVE BLOCK--GO PAST ALLOCATIONA5$:  .ENDC ;M$$PRO, PUSH ;SAVE THE COMMAND PACKET ADDRESS- MOV (R2),R1 ;/*Q.CST*/ ;GET THE CST ADDRESS 3 DEC C.UMCT(R1) ;DECREMENT THE UMR WAIT BLOCK COUNTK8 ADD #C.UMRW,R1 ;POINT TO THE BEGINNING OF THE WAIT BLOC5 MOV #-1,R2 ;SET COUNTER TO -1 BECAUSE WE INCREMENT R)10$: INC R2 ;INCREMENT THE INDEX COUNTERT" TST (R1) ;IS THERE A BLOCK HERE?% BEQ 20$ ;IF EQ NO, ALLOCATE ANOTHERA# BIT #1,(R1)+ ;IS THE BLOCK IN USE?T BNE 10$ ;YES, TRY ANOTHERA! MOV -(R1),R0 ;GET THE WAIT BLOCKO BR 30$ ;GO TO COMMON CODEP:20$: PUSH ;SAVE THE TABLE ADDRESS AND BLOCK INDEX) MOV #UMRWTB,R1 ;SET LENGTH OF CORE BLOCK( CALL @ALOCB ;GET A WAIT BLOCK 6 POP ;RESTORE THE BLOCK INDEX AND TABLE ADDRE BCC 25$ ;WE GOT ONE,OK MOV S.QST(R4),R2 ;GET THE QST$ MOV (R2),R1 ;/*Q.CST*/ GET THE CST> INC C.UMCT(R1) ;WE'RE NOT GOING TO USE A WAIT BLOCK AFTER ALL# POP ;GET BACK COMMAND PACKET), MOV #IE.NDR&377,R0 ; SET NO DYNAMIC MEMORY CLR R1 ;7 JMP @IOFIN ;COMPLETE I/O WITH NO DYNAMIC MEMORY ERRORC@25$: .IIF DF M$$PRO MOV S.URM(R4),(R0)+ ; PUT IN UNIBUS RUN MASK5 MOV R0,(R1) ;PUT THE NEW BLOCK ADDRESS IN THE TABLE -30$: INC (R1) ;SHOW THAT THE BLOCK IS IN US00ssmkTADATADATADATADATADATAEB' POP ;GET BACK THE COMMAND PACKET ; MOVB R2,I.PRM(R3) ;SAVE UMR WAIT BLOCK INDEX IN I/O PACKETQC BISB #IP.UMR,I.PRM+11(R3) ;MARK THE I/O AS HAVING A UMR WAIT BLOCKOA32$: MOV I.PRM(R3),U.BUF(R5) ;SET UP FOR UMR ASSIGNMENT BLOCK ..7= MOV I.PRM+2(R3),U.BUF+2(R5) ;... PROCESSING OF BUFFER ADDREE/ MOV I.PRM+4(R3),U.CNT(R5) ;... AND BYTE COUNTF MOV S.QST(R4),R2 ;GET THE QST% MOV (R2),R2 ;/*Q.CST*/ ;NOW THE CSTT5 BIS #C1.UMR,(R2) ;SHOW THAT WE ARE WAITING FOR A UMRH6 MOV R0,R2 ;... AND COPY UMR WAIT BLOCK POINTER TO R2$ CALL @STMP1 ;SET UP UNIBUS MAPPING: MOV S.PBIA(R4),@KISR6 ;MAKE SURE THE PORT IS STILL MAPPED3 MOV S.PBIA(R4),@#KINAR6 ;KERNAL INSTRUCTION SPACE: MOV S.QST(R4),R0 ;GET THE QST% MOV (R0),R0 ;/*Q.CST*/ ;NOW THE CSTP, BIC #C1.UMR,(R0) ;CLR UMR MAPPING INTERLOCK, ADD #10,R2 ;OFFSET TO UMR ASSIGNMENT BLOCK3 MOV R2,R0 ;ASSIGNMENT BLOCK WHERE $MPUB1 WANTS IT2; PUSH ;SAVE R1 AND POINTER TO UMR ASSIGNMENT BLOCKW% CALL @MPUB1 ;MAP UNIBUS TO TRANSFER.= POP ;RESTORE POINTER TO UMR ASSIGNMENT BLOCK AND R1 ( MOV S.QST(R4),R2 ;GET THE QST BACK ALSO350$: MOV I.PRM+2(R3),P.BUFF(R1) ;BUFFER DESCRIPTORK( MOV I.PRM+4(R3),P.BCNT(R1) ;BYTE COUNT0 MOVB I.PRM+10(R3),P.LBN+2(R1) ;HIGH BYTE OF LBN- MOV I.PRM+12(R3),P.LBN(R1) ;LOW WORD OF LBNG1 MOVB I.PRM+1(R3),P.BUFF+2(R1) ;BUFFER DESCRIPTORB3 BIT #DV.EXT,U.CW1(R5) ;EXTENDED MEMORY SUPPORTED?S+ BNE 60$ ;YES, NO MANIPULATION NECESSARYU' MOV M.UMVL(R0),P.BUFF(R1) ;LO 16 BITSU+ MOVB M.UMVH(R0),P.BUFF+2(R1) ;HIGH 2 BITSI* ASR P.BUFF+2(R1) ;SHIFT BITS 4:5 TO 0:1 ASR P.BUFF+2(R1) ;... ASR P.BUFF+2(R1) ;... ASR P.BUFF+2(R1) ;...1 BIC #^C<3>,P.BUFF+2(R1) ;CLEAR ALL BUT BITS 0:1T'60$: PUSH <#CLACMD> ;RETURN TO CLACMDT$ CALL CMDSEN ;SEND OFF THE PACKET;O&; RETURN TO THIS POINT WITH END PACKETK; REGISTERS ARE THE SAME EXCEPT THAT R1 CONTAINS AN END PACKET INSTEAD OF AD; COMMAND PACKET; M; NOW WE WILL FIND OUT HOW THE COMMAND FINISHED AND PUT THE STATUS CODE IN R0M ; FOR ENDCOM;1 .IF DF D$$DSK ;IF DISKF3 CALL ENDERR ;TRANSLATE MSCP ERROR INTO RSX ERROR.- BITB #EF.BBR,P.FLGS(R1) ;BAD BLOCK REPORTED?  BEQ 80$ ;NOPE;.F; WE'VE FOUND A BAD BLOCK. IF RCT IS NOT INSTALLED OR NOT APPLICABLE,E; WE JUST RETURN IE.BBE, BAD BLOCK ERROR. IF WE CAN USE RCT, THEN WETC; REQUEST IT TO RUN, AND PUT THE I/O PACKET IN THE BAD BLOCK QUEUE. I; RCT WILL REPLACE THE BLOCK AND THEN RETURN THE IOP TO US TO BE REISSUEDT; (SEE CMDTRM);  CALL RQRCT ;GO REQUEST RCT5 BCS 80$ ;IF CS, DON'T PUT THE I/O IN THE BBK QUEUEN;R:; PUT THE I/O PACKET IN THE BAD BLOCK QUEUE AND SET UU.RCT;R4 PUSH ;SAVE THE IOP AND SHOW NO BYTE COUNT) CLR R0 ;INDICATE NOT TO FINISH THE I/OE# CALL ENDCMO ;GO CLEAN UP THE I/ON MOV (SP),R1 ;GET THE IOP BACK PUSH NC .IIF DF D$$DSK&DU$CHK CALL REQUE ;RECONVERT THE LBN FOR QUEUE OPT.E+ MOV R5,R0 ;PUT UCB WHERE $QINSF WANTS ITE/ ADD #U.BPKT,R0 ;ADD OFFSET TO BAD BLOCK QUEUE), CALL @QINSF ;PUT IT IN THE QUEUE AND EXIT POP ;RESTORE THEM RETURNU080$: PUSH P.BCNT(R1) ;SET BYTE COUNT FOR ENDCOM .IFF ;D$$DSK - IF TAPER# MOV P.STS(R1),R0 ;GET STATUS CODEC+ BIC #^C,R0 ;CLEAR UNEEDED PORTION/ CMP #ST.SUC,R0 ;SUCCESSFUL? $ BNE 70$ ;NO. DON'T RESET ANYTHING> BIC #M.BOT!M.PEOV!M.RWD!M.SER!M.TMK!M.EOT,U.CW2(R5) ;DEFAULTS! ;ENDERR WILL DETECT BOT, EOT,70$:3 CALL ENDERR ;SET UP STATUS TO RETURN TO THE USER ( CMP #IS.SUC&377,R0 ;WAS IT SUCCESSFUL? BNE 80$ ;NO.U: BIC #M.AEOV,U.CW2(R5) ;NO LONGER AT LOGICAL EOT (TMK/TMK):80$: PUSH ;USE ACTUAL TAPE RECORD BYTE COUNT' ;THIS IS TO MAINTAIN COMPATABILITYE ;WITH ALL OTHER RSX DRIVERS+ CMP I.FCN(R3),#IO.CMP ;COMPARE HOST DATA?;# BNE 85$ ;NO. RETURN ACTUAL TAPE E ; RECORD COUNT4 MOV P.BCNT(R1),(SP) ;YES RETURN POINT OF MISMATCH  ; (IF ANY)85$: ;REFERENCE LABEL  .ENDC ;D$$DSK CALLR ENDCOM ;FINISH THE I/OP .PAGE .IF DF,T$$APE@ .SBTTL CMDEOF - PROCESS ROUTINE FOR IO.E00ssrblRS, IO.EOF, AND IO.DSE;+6; **-CMDEOF-PROCESS ROUTINE FOR IO.EOF, IO.ERS, IO.DSE;E>; THIS ROUTINE ISSUES THE TMSCP REQUEST FOR IO.EOF (WRITE TAPE>; MARK), FOR IO.ERS (WRITE EXTENDED RECORD GAP) AND FOR IO.DSEA; (ERASE TO END OF TAPE). IF THE DRIVE IS SOFTWARE WRITE LOCKED,DA; THE COMMAND IS NOT ISSUED AND AN ERROR IS RETURNED TO THE USER,;"; OTHERWISE THE COMMAND IS ISSUED.; A; NOTE: FOR EACH OF THESE FUNCTIONS, THE CURRENT TAPE POSITION ISF@; USED. FOR IO.DSE, THE TAPE IS REPOSITIONED TO BOT AFTER#; ERASING TO THE END OF TAPE.O;N ; INPUTS:F;O$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R2=ADDRESS OF QSTO; R3=I/O PACKET ADDRESSA; R4=ADDRESS OF SCBE; R5=ADDRESS OF UCB :; U.CW2(R5), M.SWL = FLAG INDICATING SOFTWARE WRITE LOCKED;W ; OUTPUTS:;D; R0=STATUS CODE*; R1=STATUS INFORMATION (RETURNED AS ZERO); R2-R5 ARE PRESERVEDH;-CMDEOF::5 BIT #M.SWL,U.CW2(R5) ;IS UNIT SOFTWARE WRITE LOCKED?R# BEQ 10$ ;NO. GO SEND THE COMMAND . MOV #IE.WLK&377,R0 ;WRITE LOCKED STATUS CODE" CALLR CMDXIT ;COMMON ERROR EXIT+10$: BITB #US.MNT,U.STS(R5) ;IS IT MOUNTED?C+ BEQ 20$ ;YES. OK TO DO THIS TYPE OF CMDI2 MOV #IE.PRI&377,R0 ;ERROR. TAPE MUST BE MOUNTED" CALLR CMDXIT ;COMMON ERROR EXIT320$: CALL CMDCOM ;BUILD A SKELETON COMMAND PACKETD3 BIS #MD.CSE,P.MOD(R1) ;SET 'CLR SER EXCEPTION' NO. PUSH <#CLACMD> ;RETURN ADDRESS! CALL CMDSEN ;ISSUE THE COMMAND ; F; END PACKET PROCESSING. CONTROL RETURNS HERE WHEN THE END PACKET FORG; THIS COMMAND IS RECEIVED. AT THIS POINT, THE I/O IS EFFECTIVELY DONE E; SO IT IS NECESSARY TO SET UP THE RETURN STATUS FOR THE USER, RETURNK7; IT TO THEM, AND THEN CLEANUP FROM THE MSCP/TMSCP I/O.A;M3 CALL ENDERR ;SET UP STATUS TO RETURN TO THE USER01 CMP R0,#IS.SUC&377 ;WAS THE COMMAND SUCCESSFUL?" BNE 30$ ;NO. LEAVE STATES ALONEE BIC #M.TMK!M.AEOV!M.BOT!M.RWD!M.SER!M.PEOV,U.CW2(R5) ;INDICATE STATEU30$:1 PUSH <#0> ;NO ADDITIONAL INFORMATION AVAILABLEU1 CALLR ENDCOM ;CLEANUP FOLLOWING I/O COMPLETION  .ENDC ;T$$APEP .PAGE .IF DF D$$DSK .SBTTL CMDFMT - FORMATC;+/; **-CMDFMT-PROCESS ROUTINE FOR IO.SMD (FORMAT)R;>; THIS ROUTINE WILL PROCESS THE IO.SMD FUNCTION FOR DISKS THAT; SUPPORT FORMATTING.A; B; BEFORE ISSUING THE FORMAT COMMAND IT ISSUES AVL COMMAND TO BRINGA; THE UNIT TO UNIT AVAILABLE STATE AND AFTER FORMATING BRINGS THET ; THE UNIT BACK TO ONLINE STATE.;T;T ; INPUTS:;S.; R0=ADDRESS OF THE FUNCTION TABLE ENTRY; R2=ADDRESS OF QSTN; R3=ADDRESS OF I/O PKTO; R4=ADDRESS OF SCBP; R5=ADDRESS OF UCBD; ; OUTPUTS:;-; R0=RSX STATUS CODE;-;C=CMDFMT: BITB #US.FOR,U.STS(R5) ;IS THE DISK MOUNTED FOREIGN?S BNE 2$ ;YES, THEN CONTINUE3 MOV #IE.PRI&377,R0 ;NO, THEN PRIVILEGE VIOLATIONE BR 5$ ;GO FINISH I/O72$: BIT #M.SWL,U.CW2(R5) ;IS THE UNIT SFT WRITE LOCKEDA BEQ 10$ ;EQ, THEN CONTINUE, MOV #IE.WLK&377,R0 ;SET WRITE LOCK STATUS"5$: CALLR CMDXIT ;GO FINISH I/O;10$: CMPB #RQDX3,Q.CNTI+6(R2) ;IS IT AN RQDX3 CONTROLLER?  BEQ 20$ ;YES, THEN CONTINUE ) CALLR ILEGAL ;NO, THEN IT IS ILEGAL0120$: BIS #UU.SER,U.UTIL(R5) ;SET THE SERIAL MODES! MOV Q.CST(R2),R0 ;GET THE CST S. MOV R3,C.EXTN(R0) ;SAVE THE I/O PKT ADDRESS* CALL PIOPAL ;GET A PIOP FOR AVL CMD- MOV #AVNFUN,R0 ;FUNCTION CODE ENTRY TO USE ) CALL CMDCOM ;BUILD THE COMMAND PACKET 1 BIS #MD.EXC,P.MOD(R1) ;SET THE EXCLUSIVE ACCESSE( PUSH <#CLACMD> ;ADDRESS TO RETURN TO " CALL CMDSEN ;ISSUE THE COMMAND( MOV #IS.SUC,R0 ;NON ZERO STATUS TO R0! PUSH <#0> ;NO STATUS FOR IOSBI CALL ENDCMO ;FINISH UPA MOV Q.CST(R2),R0 ;GET THE CST) MOV C.EXTN(R0),R3 ;RESTORE IOP ADDRESSG- MOV #FMTFUN,R0 ;FUNCTION CODE ENTRY TO USEO) CALL CMDCOM ;BUILD THE COMMAND PACKETP< MOV I.PRM(R3),P.FMTI+2(R1) ;FILL THE FIRST 2 BYTES OF INFO= MOV I.PRM+2(R3),P.FMTI(R1) ;FILL THE SECOND 2 BYTES OF INFOR# PUSH <#CLACMD> ;RETURN TO CLACMD $ CALL CMDSEN ;SEND OFF THE PACKET; &; RETURN TO THIS POINT WITH END PACKET>; REGISTERS ARE THE SAME EXCEPT THAT R1 00ssmkTADATADATADATADATADATACONTAINS AN END PACKET; INSTEAD OF A COMMAND PACKET.;M>; FIND OUT HOW THE COMMAND FINISHED AND PUT THE STATUS CODE IN*; R0 FOR ENDCOM AND BRING THE UNIT ONLINE.;T3 CALL ENDERR ;TRANSLATE MSCP STATUS TO RSX STATUSP! CMP #IS.SUC,R0 ;IS IT A SUCCESSL* BEQ 40$ ;YES THEN BRING THE UNIT ONLINE( PUSH ;NEED TO USE R1, SO SAVE IT" MOV P.STS(R1),R1 ;GET THE STATUS. BIC #^C,R1 ;ISOLATE THE MAJOR STATUS% CMP #ST.DRV,R1 ;IS IT A DRIVE ERRORT BNE 30$ ;NO, CONTINUE6 MOV #IE.ABO,R0 ;YES, THEN INDICATE FORMAT INCOMPLETE+30$: POP ;RESTORE END PACKET ADDRESSD. BIC #UU.SER,U.UTIL(R5) ;CLEAR THE SERIAL MODE PUSH <#0> ;NIL BYTE COUNT CALLR ENDCOM ;FINISH IT UPT!40$: PUSH <#0> ;NIL BYTE COUNT# CALL ENDCMO ;FINISH UPL4 BIS #UU.ONL,U.UTIL(R5) ;INDICATE AN OP.ONL REQUIRED) CALLR ONLSIO ;ISSUE THE ONLINE COMMANDS .ENDC ;D$$DSK  .PAGE .IF DF,D$$DSKR* .SBTTL CMDRPL - RCT BAD BLOCK REPLACEMENT;+/; **-CMDRPL- PROCESS BLOCK REPLACEMENT REQUESTSM;#4; THIS ROUTINE PROCESSES BLOCK REPLACEMENT REQUESTS.;P ; INPUTS:S;E); R0 ADDRESS OF FUNCTION TABLE ENTRY5; R2 QST ADDRESSE; R3 I/O PACKET ADDRESS; R4 SCB ADDRESSS; R5 UCB ADDRESS0; ; OUTPUTS:;#;-CMDRPL:O6 BIT #IQ.X!IQ.Q!IQ.UMD,I.FCN(R3) ;ILLEGAL SUBMODIFIERS BEQ CMDRP1 ;IT IS OKI. JMP ILEGAL ;EXIT WITH ILLEGAL FUNCTION CODE6CMDRP0: BIS #UU.SEL,U.UTIL(R5) ;DO NOT LOG ERR PACKETS+CMDRP1: CALL CMDCOM ;GET A COMMAND PACKETR4 MOV I.PRM(R3),P.RBN+2(R1) ;REPLACEMENT BLOCK NUMBER4 MOV I.PRM+2(R3),P.RBN(R1) ;REPLACEMENT BLOCK NUMBER2 MOV I.PRM+4(R3),P.LBN+2(R1) ;LOGICAL BLOCK NUMBER0 MOV I.PRM+6(R3),P.LBN(R1) ;LOGICAL BLOCK NUMBER% MOV I.PRM+10(R3),P.MOD(R1) ;MODIFIER= MOV I.PRM+6(R3),I.PRM+12(R3) ;CLEAR SPACE FOR RETURN ADDRESS;" PUSH <#CLACMD> ;RETURN TO CLACMD% CALL CMDSEN ;ISSUE THE RPL COMMANDL;L&; RETURN TO THIS POINT WITH END PACKET;L) MOV P.CRF+2(R1),R0 ;GET THE IOP ADDRESSC@ MOV I.PRM+12(R0),I.PRM+6(R0) ;PUT THE LOGICAL BLOCK NUMBER BACK# CALL ENDERR ;SET UP THE END CODEP PUSH <#0> ;NO BYTE COUNTU CALLR ENDCOM ;FINISH UP .PAGE* .SBTTL CMDRSN - READ VOLUME SERIAL NUMBER;+%; **-CMDRSN-READ VOLUME SERIAL NUMBER,;OJ; THE READ VOLUME SERIAL ROUTINE WILL READ THE 4-BYTE VOLUME SERIAL NUMBERH; CONTAINED IN THE DEVICE'S SECOND UCB EXTENSION INTO A BUFFER SPECIFIED; IN THE I/O PACKET.;H ; INPUTS:T;N$; R0 ADDRESS OF FUNCTION TABLE ENTRY; R2 QST ADDRESS; R3 I/O PACKET ADDRESS+; R4 SCB ADDRESS; R5 UCB ADDRESS;K ; OUTPUTS:; ; R0 SUCCESS CODE; R1 BYTES TRANSFERED; R2-R5 PRESERVEDD;-CMDRSN: D BITB #IQ.X!IQ.Q!IQ.UMD,I.FCN(R3) ;DO WE HAVE ANY ILLEGAL MODIFIERS? BEQ 10$ ;NOPE, CONTINUE& CALLR ILEGAL ;ILLEGAL FUNCTION CODE-10$: CMP I.PRM+4(R3),#R$MSIZ ;IS IT IN RANGE?O BLE 20$ ;NO. RETURN ERRORU* MOV #IE.BAD&377,R0 ;BAD LENGTH SPECIFIED( CALLR CMDXIT ;COMMON ERROR PROCESSING*20$: PUSH ;SAVE WORK REGISTERS;8; MAP UCB EXTENSION AND MOVE SELECTED FIELDS INTO PACKET;3 MOV U.UC2X(R5),@KISR6 ;MAP EXTENSION THROUGH APR 6R& MOV #RSNEXP,R2 ;TEMP AREA FOR PACKET9 MOV X.VSER+140000,(R2)+ ;PART 1 OF VERSION NUM : R$VRSNA= MOV X.VSER+2+140000,(R2)+ ;PART 2 OF VERSION NUM : R$VRSN+2G9 MOV X.UNFL+140000,(R2)+ ;UNIT FLAGS : R$USTAN;O) MOV #RSNEXP+R$UNTI,R2 ;UNIT INFO POINTERB9 MOV X.UNTI+140000,(R2)+ ;PART 1 OF UNIT ID : R$UNTIR= MOV X.UNTI+2+140000,(R2)+ ;PART 2 OF UNIT ID : R$UNTI+2= MOV X.UNTI+4+140000,(R2)+ ;PART 3 OF UNIT ID : R$UNTI+4= MOV X.UNTI+6+140000,(R2)+ ;PART 4 OF UNIT ID : R$UNTI+6E: MOVB X.USVR+140000,(R2)+ ;UNIT SOFT VERS : R$USVR: MOVB X.UHVR+140000,(R2)+ ;UNIT HARD VERS : R$UHVR9 MOV X.MLUN+140000,(R2)+ ;MULTI UNIT CODE : R$MLUN;, CLR (R2)+ ;COMMAND REFERENCE NUM 1: R$CRF. CLR (R2)+ ;COMMAND REFERENCE NUM 2: R$CRF+2, CLR (R2)+ ;SEQUENCE NUMBER : R$SEQ, CLR (R2) ;EVENT CODE : R$OPCD; :; RESTORE PUCOM MAPPING AND COMPLETE THE PACKET PROCESSING; # MOV S.P00ssrblBIA(R4),@KISR6 ;REMAP PUCOM(! MOV (SP),R2 ;GET QST ADDR BACKT' ADD #Q.CNTI,R2 ;POINT TO ORIGINAL INFT/ MOV #RSNEXP+R$CNTI,R4 ;POINT TO CONTROLLER INF 2 MOV (R2)+,(R4)+ ;CONTROLLER INFORMATION : R$CNTI4 MOV (R2)+,(R4)+ ;CONTROLLER INFORMATION : R$CNTI+24 MOV (R2)+,(R4)+ ;CONTROLLER INFORMATION : R$CNTI+44 MOV (R2)+,(R4)+ ;CONTROLLER INFORMATION : R$CNTI+60 MOV (R2),(R4) ;CNTRL SOFT/HARD INFO : R$CXVR; "; RETURN PACKET TO THE USER BUFFER; / MOVB I.PRM+1(R3),R2 ;SET HI 6-BITS OF ADDRESSI/ MOV I.PRM+2(R3),R3 ;SET LO 16-BITS OF ADDRESSS0 ASHC #10.,R2 ;CALCULATE DISPLACEMENT AND BIAS ASHC #-10.,R3 ;...3 MOV R3,R4 ;COPY DESTINATION DISPLACEMENT INTO R4C/ BIS #140000,R4 ;SET DESTINATION BIAS FOR APR6 + MOV R2,R3 ;COPY DESTINATION BIAS INTO R3+ MOV 2(SP),R0 ;GET IOP ADDRESS 3 MOV I.PRM+4(R0),R0 ;GET NUMBER OF BYTES FROM USER  MOV @KISR5,R1 ;SOURCE BIAS( MOV #RSNEXP,R2 ;GET SOURCE DISPLACMENT, CALL @BLXIO ;MOVE THE DATA TO USER BUFFER* POP ;RESTORE ORIGNAL CONTENTS MOV I.PRM+4(R3),R1 ;BYTE COUNT$ MOV #IS.SUC&377,R0 ;RETURN SUCCESS3 PUSH <#CLACMD> ;START ANOTHER COMMAND IF POSSIBLE;3 CALLR ENDCM1 ;COMPLETE THE I/O PACKET PROCESSINGR .ENDC ;D$$DSK  .PAGE .IF DF,T$$APE@ .SBTTL CMDRWD - PROCESS ROUTINE FOR IO.RWD AND IO.RWU FUNCTIONS;+-; **-CMDRWD-ROUTINE TO HANDLE REWIND FUNCTIONM;EI; THIS ROUTINE WILL PROCESS THE RSX IO.RWD AND IO.RWU FUNCTIONS FOR TAPES;L;B ; INPUTS:E;E$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R2=ADDRESS OF QSTO; R3=ADDRESS OF I/O PKTR; R4=ADDRESS OF SCB#; R5=ADDRESS OF UCBN;C ; OUTPUTS:;L; R0=STATUS CODE; R2-R5 ARE PRESERVED;9; U.CW2, BIT M.AEOV CLEAR ON SUCCESSFUL REWIND OPERATION.6; U.CW2, BIT M.REW SET TO INDICATE TAPE IS REWINDING:; U.STS, BIT US.PWF CLEAR POWERFAIL BIT TO ALLOW COMMANDS;W;O:; THE VALUE TO PUT INTO IOSB+2 IS ON THE STACK FOR ENDCOM;-CMDRWU: ? PUSH #MD.UNL!MD.CSE ;SET UNLOAD AND 'CLR SER EXCEPT' MODIFIER  BR CMDRWC ;JOIN COMMON CODECMDRWD:A9 PUSH #MD.RWD!MD.IMM!MD.CSE ;SET REWIND, IMMEDIATE, ANDC ;'CLR SER EXCEPT' MODIFIERSCMDRWC: ;COMMON ENTRY POINT20 CALL CMDCOM ;ALLOCATE (T)MSCP PACKET AND FILL ;COMMAND FIELDS' BIS (SP)+,P.MOD(R1) ;SET THE MODIFIERSA* PUSH <#CLACMD> ;SAVE ROUTINE ADD ON STACK) CALL CMDSEN ;SEND COMMAND TO CONTROLLERO; ; END PACKET PROCESSINGS; 8 BICB #EF.EOT,P.FLGS(R1) ;DO NOT USE EOT FLAG ON REWINDS& CMP #ST.AVL,P.STS(R1);UNIT AVAILABLE? BNE 5$ ;NO.M) CLR P.STS(R1) ;INDICATE SUCCESS (ST.SUC)M5$:!. CALL ENDERR ;SET UP STATUS TO RETURN TO USER' CMP #IS.SUC&377,R0 ;WAS IT SUCCESSFUL? BNE 10$ ;NO ) BISB #US.PWF,U.STS(R5);SET POWERFAIL BITCA BIC #M.PEOV!M.RWD!M.SER!M.TMK!M.EOT!M.AEOV,U.CW2(R5) ;NEW STATESO? BIS #M.BOT,U.CW2(R5) ;INDICATE THAT TAPE IS AT BOT (OR WILL BEN+ ;WHEN THE CONTROLLER GETS DONE WITH IT)K)10$: PUSH <#0> ;VALUE TO PUT INTO IOSB+2)( CALLR ENDCOM ;DO COMMON END PROCESSING .PAGE3 .SBTTL CMDSMO - MOUNT AND SET TAPE CHARACTERISTICS;;+F; **-CMDSMO-PROCESS ROUTINE FOR IO.SMO (MOUNT AND SET CHARACTERISTICS);RL; THIS ROUTINE PERFORMS THE FUNCTION OF SETTING THE TAPE CHARACTERISTICS ANDM; BRINGING THE UNIT TMSCP ONLINE. FOR TAPES THAT SUPPORT MULTIPLE DENSITIES, L; THIS MUST FIRST MAKE SURE THE TAPE UNIT IS TMSCP AVAILABLE. IF IT IS NOT,L; AN AVAILABLE COMMAND MUST BE ISSUED, FOLLOWED BY AN ONLINE COMMAND SO THAT>; THE TAPE DENSITY CAN BE SET TO THAT SPECIFIED BY THE USER. ;. ; INPUTS:O;M$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R2=ADDRESS OF QST ; R3=I/O PACKET ADDRESS ; R4=ADDRESS OF SCBC; R5=ADDRESS OF UCBE;R ; OUTPUTS:;I; R0=STATUS CODE; R1=DESTROYED; R2-R5 ARE PRESERVEDE;-CMDSMO:I3 BIT #M.BOT,U.CW2(R5) ;ARE WE AT BEGINNING OF TAPE?H. BNE 10$ ;YES. CONTINUE WITH DENSITY SETTING+ CALLR ILEGAL ;NO. IO.SMO IS ILLEGAL THENAB10$: BIT #UU.BLK,U.UTIL(R5) ;DOES UNIT SUPPORT MULTIPLE DENSITIES?' BNE 200$ ;NO. NOTHING TO DO IN HEREE# MOV Q.CST(R2),R0 ;GET CST ADDRESSD( MOV R3,C.EXTN(R0) ;SAVE R3 TEMPORARILY- C00ssmkTADATADATADATADATADATAALL PIOPAL ;A "FALSE" IOP FOR AVN COMMANDS, MOV #AVNFUN,R0 ;FUNCTION CODE ENTRY TO USE& CALL CMDCOM ;BUILD TEMPLATE COMMAND> BIS #MD.CSE,P.MOD(R1) ;SET 'CLEAR SERIOUS EXCEPTION' MODIFIER$ PUSH <#CLACMD> ;WHERE TO RETURN TO! CALL CMDSEN ;ISSUE THE COMMANDI- PUSH ;SAVE WHAT WILL BE USED LATERA0 MOV #IS.SUC,R0 ;NON-ZERO -> RETURN IOP TO POOL! PUSH <#0> ;NO IOSB DATA EITHERN$ CALL ENDCMO ;CLEAN UP PACKET USED# MOV Q.CST(R2),R0 ;GET CST ADDRESS.( MOV C.EXTN(R0),R3 ;RESTORE IOP ADDRESS POP ;RETURN REGISTERS.200$: CALLR CMDONL ;ISSUE THE ONLINE COMMAND .PAGE, .SBTTL CMDSPB - PROCESS ROUTINE FOR IO.SPB;+5; **-CMDSPB-PROCESS ROUTINE FOR IO.SPB (SPACE BLOCKS)#;CH; THIS ROUTINE PERFORMS THE FUNCTION OF SPACING FORWARD OR BACKWARD OVER=; A SPECIFIED NUMBER OF BLOCKS. IF A NEGATIVE BLOCK COUNT IS-J; SPECIFIED, THE SKIPPING IS DONE IN THE REVERSE DIRECTION. FOR UNLABELEDH; TAPE, SPACING BLOCKS PAST EOV (TWO CONSECUTIVE TAPE MARKS OR BOT/TMRK); IS NOT PERMITTED.E; ; INPUTS:>;;$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R2=ADDRESS OF QSTM; R3=I/O PACKET ADDRESSD; R4=ADDRESS OF SCB ; R5=ADDRESS OF UCBC/; U.CW2, BIT M.AEOV=TAPE AT OR PAST LOGICAL EOT; ; OUTPUTS:;P; R0=STATUS CODE2; R1=STATUS INFORMATION (NUMBER OF BLOCKS SKIPPED); R2-R5 ARE PRESERVED /; U.CW2, BIT M.AEOV=TAPE AT OR PAST LOGICAL EOTP;-CMDSPB::/ TST I.PRM(R3) ;ANY BLOCKS ACTUALLY SPECIFIED?P+ BNE 10$ ;YES. FURTHER PROCESSING NEEDEDA4 MOV #IS.SUC&377,R0 ;INDICATE SUCCESS (NOP THE I/O)" CALLR CMDXIT ;COMMON ERROR EXIT110$: BITB #US.MNT,U.STS(R5) ;IS THE UNIT MOUNTED?S+ BEQ 20$ ;YES. OK TO DO THIS TYPE OF CMDC2 MOV #IE.PRI&377,R0 ;ERROR. TAPE MUST BE MOUNTED" CALLR CMDXIT ;COMMON ERROR EXIT920$: BITB #US.LAB,U.STS(R5) ;WORKING WITH A LABELED TAPE?R) BNE 30$ ;YES. SKIP LOGICAL EOV CHECKSA7 BIT #M.AEOV,U.CW2(R5) ;ARE WE PAST LOGICAL END OF TAPEY' BEQ 30$ ;NO. GO TO COMMON PROCESSING;' TST I.PRM(R3) ;TEST SPACING DIRECTIONS BLE 30$ ;BACKWARD IS OK.S4 MOV #IE.EOV&377,R0 ;INDICATE EOV ON UNLABELED TAPE" CALLR CMDXIT ;COMMON ERROR EXIT330$: CALL CMDCOM ;BUILD A SKELETON COMMAND PACKETM5 BIS #MD.CSE,P.MOD(R1) ;SET 'CLR SER EXCEPT' MODIFIER2 CLR P.RECC+2(R1) ;HIGH ORDER WORD OF BLOCK COUNT4 MOV I.PRM(R3),P.RECC(R1) ;DEFAULT SPACE BLOCK COUNT$ BGE 40$ ;GOING FORWARD DIRECTION.2 BIS #MD.REV,P.MOD(R1) ;INDICATE REVERSE DIRECTION4 NEG P.RECC(R1) ;INDICATE POSITIVE NUMBER OF BLOCKS240$: BITB #US.LAB,U.STS(R5) ;IS THIS LABELED TAPE?% BNE 50$ ;YES. SKIP LEOT PROCESSINGE# TST I.PRM(R3) ;FORWARD DIRECTION? $ BLE 50$ ;NO. SKIP LEOT PROCESSING> BIS #MD.DLE,P.MOD(R1) ;SET TO DETECT LEOT FOR UNLABELED TAPES:50$: CLR P.TMGC(R1) ;INSURE NO TAPE MARKS WILL BE SKIPPED6 CLR P.TMGC+2(R1) ;HIGH ORDER WORD OF TAPE MARK COUNT PUSH <#CLACMD> ;RETURN ADDRESS# CALL CMDSEN ;ISSUE TMSCP COMMANDV;MF; END PACKET PROCESSING. CONTROL RETURNS HERE WHEN THE END PACKET FORG; THIS COMMAND IS RECEIVED. AT THIS POINT, THE I/O IS EFFECTIVELY DONEEE; SO IT IS NECESSARY TO SET UP THE RETURN STATUS FOR THE USER. OTHER ;; FLAGS HAVE TO BE SET TO SHOW THE RESULT OF THE OPERATION.);E# CALL ENDERR ;GET RSX STATUS CODE+ CMP R0,#IE.EOV&377 ;WAS LEOT ENCOUNTERED?L BNE 60$ ;NO.R5 BIS #M.AEOV,U.CW2(R5) ;INDICATE THAT LOGICAL EOT HITS@ BIC #M.BOT!M.PEOV!M.RWD!M.SER!M.TMK!M.EOT,U.CW2(R5) ;NEW STATES160$: PUSH ;NUMBER OF BLOCKS SKIPPEDE2 CMP R0,#IE.EOF&377 ;WAS A TAPE MARK ENCOUNTERED? BNE 70$ ;NO. - INC (SP) ;COUNT TAPE MARK AS BLOCK SKIPPEDA.70$: CALLR ENDCOM ;GO TO COMMON CLEANUP CODE .PAGE, .SBTTL CMDSPF - PROCESS ROUTINE FOR IO.SPF;+4; **-CMDSPF-PROCESS ROUTINE FOR IO.SPF (SPACE FILES);RH; THIS ROUTINE PERFORMS THE FUNCTION OF SPACING FORWARD OR BACKWARD OVERE; A SPECIFIED NUMBER OF TAPE MARKS. IF A NEGATIVE TAPE MARK COUNT ISMJ; SPECIFIED, THE SKIPPING IS DONE IN THE REVERSE DIRECTION. FOR UNLABELEDG; TAPE, SPACING FILES PAST EOV (TWO CONSECUTIVE TAPE MARKS OR BOT/TMRK);; IS NOT PERMITTED.U;T00ssrbl ; INPUTS: ;C$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R2=ADDRESS OF QST; R3=I/O PACKET ADDRESS ; R4=ADDRESS OF SCBO; R5=ADDRESS OF UCB-/; U.CW2, BIT M.AEOV=TAPE AT OR PAST LOGICAL EOTH;R ; OUTPUTS:; ; R0=STATUS CODE1; R1=STATUS INFORMATION (NUMBER OF FILES SKIPPED)R; R2-R5 ARE PRESERVEDE/; U.CW2, BIT M.AEOV=TAPE AT OR PAST LOGICAL EOTP;-CMDSPF::3 TST I.PRM(R3) ;ANY TAPE MARKS ACTUALLY SPECIFIED?N+ BNE 10$ ;YES. FURTHER PROCESSING NEEDEDO4 MOV #IS.SUC&377,R0 ;INDICATE SUCCESS (NOP THE I/O)" CALLR CMDXIT ;COMMON ERROR EXIT110$: BITB #US.MNT,U.STS(R5) ;IS THE UNIT MOUNTED?+ BEQ 20$ ;YES. OK TO DO THIS TYPE OF CMD 2 MOV #IE.PRI&377,R0 ;ERROR. TAPE MUST BE MOUNTED" CALLR CMDXIT ;COMMON ERROR EXIT920$: BITB #US.LAB,U.STS(R5) ;WORKING WITH A LABELED TAPE?R) BNE 30$ ;YES. SKIP LOGICAL EOV CHECKSR7 BIT #M.AEOV,U.CW2(R5) ;ARE WE PAST LOGICAL END OF TAPEP' BEQ 30$ ;NO. GO TO COMMON PROCESSING;' TST I.PRM(R3) ;TEST SPACING DIRECTIONS BLE 30$ ;BACKWARD IS OK.S4 MOV #IE.EOV&377,R0 ;INDICATE EOV ON UNLABELED TAPE" CALLR CMDXIT ;COMMON ERROR EXIT330$: CALL CMDCOM ;BUILD A SKELETON COMMAND PACKETM5 BIS #MD.CSE,P.MOD(R1) ;SET 'CLR SER EXCEPT' MODIFIER6 CLR P.TMGC+2(R1) ;HIGH ORDER WORD OF TAPE MARK COUNT3 MOV I.PRM(R3),P.TMGC(R1) ;DEFAULT SPACE FILE COUNTE$ BGE 40$ ;GOING FORWARD DIRECTION.2 BIS #MD.REV,P.MOD(R1) ;INDICATE REVERSE DIRECTION3 NEG P.TMGC(R1) ;INDICATE POSITIVE NUMBER OF TMRKS)240$: BITB #US.LAB,U.STS(R5) ;IS THIS LABELED TAPE?% BNE 50$ ;YES. SKIP LEOT PROCESSINGV# TST I.PRM(R3) ;FORWARD DIRECTION?C$ BLE 50$ ;NO. SKIP LEOT PROCESSING> BIS #MD.DLE,P.MOD(R1) ;SET TO DETECT LEOT FOR UNLABELED TAPES650$: CLR P.RECC(R1) ;INSURE NO BLOCKS WILL BE SKIPPED2 CLR P.RECC+2(R1) ;HIGH ORDER WORD OF BLOCK COUNT PUSH <#CLACMD> ;RETURN ADDRESS# CALL CMDSEN ;ISSUE TMSCP COMMANDS;DF; END PACKET PROCESSING. CONTROL RETURNS HERE WHEN THE END PACKET FORG; THIS COMMAND IS RECEIVED. AT THIS POINT, THE I/O IS EFFECTIVELY DONEPE; SO IT IS NECESSARY TO SET UP THE RETURN STATUS FOR THE USER. OTHERR;; FLAGS HAVE TO BE SET TO SHOW THE RESULT OF THE OPERATION.P;D# CALL ENDERR ;GET RSX STATUS CODED+ CMP R0,#IE.EOV&377 ;WAS LEOT ENCOUNTERED?S BNE 60$ ;NO.5 BIS #M.AEOV,U.CW2(R5) ;INDICATE THAT LOGICAL EOT HITS? BIC #M.PEOV!M.BOT!M.RWD!M.SER!M.TMK!M.EOT,U.CW2(R5) ;NEW STATES560$: PUSH ;NUMBER OF TAPE MARKS SKIPPEDE* CALLR ENDCOM ;GO TO COMMON CLEANUP CODE .ENDC ;T$$APET .PAGE9 .SBTTL CMDXIT - COMMON ERROR EXIT - INCLUDES ILEGAL EXITR;+;T+; **-ILEGAL-EXIT WITH ILLEGAL FUNCTION CODEE; **-CMDXIT-COMMON ERROR EXITO;AH; THIS ROUTINE PROVIDES A SIMPLE AND COMMON EXIT PATH FOR COMMAND ERRORSG; THAT ARE DETECTED BEFORE ANY I/O IS ACTUALLY ISSUED TO THE CONTROLLERT; ; INPUTS: ;S"; R0=RSX ERROR CODE TO BE RETURNED;M ; OUTPUTS:;;; CONTROL IS PASSED TO ENDCM11; ;-2ILEGAL: MOV #IE.IFC&377,R0 ;ILLEGAL FUNCTION CODECMDXIT:A CLR R1 ;NO BYTE COUNT4 PUSH #CLACMD ;RETURN TO CLACMD TO FIND MORE TO DO+ CALLR ENDCM1 ;JOIN COMMON END PROCESSINGT .PAGE( .SBTTL CMDSEN - SEND OFF COMMAND PACKET;+?; **-CMDSEN-ROUTINE TO SEND CMD PKT AND ADD IOP TO C.OLHD QUEUE ;M>; THIS ROUTINE WILL SEND THE (T)MSCP PACKET TO THE CONTROLLER.?; IT ALSO WILL ADD THE IOP TO THE END OF THE OUTSTANDING QUEUE.BB; IF THE COMMAND IS THE OLDEST, THEN THE COMMAND STATUS IS UPDATED>; AND THE TIMEOUT COUNT IS UPDATED AND THE TIMER GETS STARTED.;C ; INPUTS: ;E; R1=COMMAND PACKET ADDRESSR; R2=QST ADDRESS; R3=I/O PACKET ADDRESSM; R4=SCB ADDRESS; R5=UCB ADDRESS;E ; OUTPUTS:;N; R0-R1-R3 DESTROYEDK; R2-R4-R5 PRESERVEDT;-CMDSEN:M: POP ;ADDR TO RETURN TO WHEN END PKT ARRIVES. CALLV PORT,PORSEN ;SEND CMD PKT TO CONTROLLER% MOV (R2),R0 ;/*Q.CST*/ ;ADDR OF CSTE: ADD #C.OLHD,R0 ;POINT TO QUEUE OF OUTSTANDING I/O PACKETS! MOV R3,R1 ;POINTS TO IOP TO ADD $ CALL @QINSF ;INSERT IOP INTO QUEUE ;R2 GETS DESTROYED* MOV S.QST(R4),R2 ;RESTORE THE QST ADDRESS MOV R3,R000ssmkTADATADATADATADATADATA ;I/O PKT ADDRESS% MOV (R2),R3 ;/*Q.CST*/ ;ADDR OF CSTU4 CMP R0,C.OLHD(R3) ;IS THIS COMMAND NOW THE OLDEST ? BNE 20$ ;NOR;RD; RESET TIME-OUT COUNT FOR NEW OLDEST COMMAND AND MAYBE RESET BSYUCB;R MOVB S.ITM(R4),S.CTM(R4)D? MOV S.BSYU(R4),R1 ;R1 IS THE ADDRESS OF THE PREVIOUS BUSY UNITA+ BEQ 10$ ;IF NO UNIT IS BUSY CHANGE BSYUCBI8 BICB #US.BSY,U.STS(R1) ;CLEAR BUSY BIT ON OLD BUSY UNIT:10$: BISB #US.BSY,U.STS(R5) ;SET BUSY BIT ON NEW BUSY UNIT! MOV R5,S.BSYU(R4) ;CHANGE BSYUCB7 MOV #-1,C.CMST(R3) ;SET COMMAND STATUS PROGRESS TO MAXD/ MOV #-1,C.CMST+2(R3);UNSIGNED DOUBLE PRECISIONO20$:$ RETURN ;RETURN TO CALLER'S CALLER .PAGE' .SBTTL CMDSIO - START NEXT I/O REQUESTE;+8; **-CMDSIO-TRY TO START NEXT I/O REQUEST FROM SCB QUEUE;1B; THIS ROUTINE WILL TRY TO START THE NEXT I/O REQUEST FROM THE SCBA; QUEUE. THIS ROUTINE WILL DISPATCH TO THE FUNCTION CODE SPECIFICD&; ROUTINE WHICH WILL RETURN TO CLACMD.;T ; INPUTS:N;W; R2=ADDRESS OF QST.; R3=ADDRESS OF CSTC; R4=ADDRESS OF SCB3; R5=ADDRESS OF UCB ;G;S ; OUTPUTS:;#,; R0=ADDRESS OF FUNCTION CODE ENTRY IN TABLE; R1=DESTROYED; R3=I/O PACKET ADDRESS; R2-R4-R5 ARE PRESERVED;A;-CMDSIO:U- MOV #XXACC,R2 ;ADDRESS OF ACCEPTANCE ROUTINEU; %; MAKE BUSY UNIT TEMPORARILY NON-BUSY G; IT IS ONLY BUSY SO THAT THE TIME-OUT COUNT IN THE SCB IS DECREMENTED.L;S MOV S.BSYU(R4),R0 BEQ 10$ BICB #US.BSY,U.STS(R0)L10$: .IF DF D$$DSK ;IF DISK + BISB #C2.SHD,C.FLAG(R3);SET RECURSIVE FLAGC .IFTF ;D$$DSK) CALL @GSPKT ;GET I/O PACKET TO PROCESS:;#; MAKE BUSY UNIT BUSY AGAIND;N" MOV S.QST(R4),R2 ;WE NEED THE QST .IFT ;D$$DSK MOV (R2),R3 ;GET THE CST1 BICB #C2.SHD,C.FLAG(R3);CLEAR THE RECURSION FLAGA .ENDC ;D$$DSK MOV S.BSYU(R4),R0 BEQ 20$ BISB #US.BSY,U.STS(R0) 20$:6 .IF DF D$$DSK&DU$CHK ;IF QUEUE OPTOMIZATION SUPPORTED' BCS 30$ ;IF CS, NO PACKETS LEFT, EXIT,;TL; UNFORTUNATELY WE NOW HAVE TO CHANGE SECTOR, TRACK, AND CYLINDER THAT QUEUE.; OPTOMIZATION NEEDED BACK INTO AN LBN NUMBER.; 7 CMPB #IO.RLB/256.,I.FCN+1(R1) ;DATA TRANSFER REQUEST?' BLO CMDRED ;IF LO NO, LEAVE IT ALONE) MOV I.PRM+10(R1),R2 ;GET CYLINDER NUMBERT) MOVB U.PRM+1(R5),R0 ;GET TRACKS/CYLINDERI* MUL R0,R2 ;TRACKS UP TO CURRENT CYLINDER/ MOVB I.PRM+13(R1),R2 ;GET CURRENT TRACK NUMBER9 ADD R3,R2 ;ADD TRACKS IN CYLINDERS TO GET CURRENT TRACKS% MOVB U.PRM(R5),R0 ;GET SECTORS/TRACKT( MUL R0,R2 ;SECTORS UP TO CURRENT TRACK) MOVB I.PRM+12(R1),R0 ;GET CURRENT SECTORO$ ADD R0,R3 ;GET TOTAL SECTOR NUMBER ADC R2 ;HIGH AND LOW* MOV R2,I.PRM+10(R1) ;SAVE HIGH LBN NUMBER) MOV R3,I.PRM+12(R1) ;SAVE LOW LBN NUMBERV MOV S.QST(R4),R2 ;GET THE QST" BR CMDRED ;GO PROCESS THE PACKET30$: L .IFF BCC CMDRED  .ENDC ;D$$DSK&DU$CHKR$ MOV (R2),R3 ;**Q.CST** GET THE CST) BIT #C1.DQU,(R3) ;SHOULD WE CALL $DQUMR?E BEQ 40$ ;IF EQ NOC$ BIC #C1.DQU,(R3) ;CLEAR THE BIT OUT;TN; DO NOT CHANGE THE FOLLOWING CALL AND RETURN TO A JUMP: $DQUMR IS A COROUTINE;O CALL @DQUMR ;AND CALL IT 40$: RETURN;+; - THE MAGIC IS BACK!! -,;R0; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GSPKT;;); R1 = ADDRESS OF THE I/O REQUEST PACKET.T/; R2 = PHYSICAL UNIT NUMBER OF THE REQUEST UCB.:9; R3 = KRB ADDRESS (UNLESS 0 THEN R3 = CONTROLLER INDEX).M.; R4 = ADDRESS OF THE STATUS CONTROLLER BLOCK.<; R5 = ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;U-; UDA50 CLASS DISK I/O REQUEST PACKET FORMAT.H;O*; WD 00 -- I/O QUEUE THREAD WORD (I.LINK).?; WD 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER (I.EFN & I.PRI). <; WD 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK (I.TCB).G; WD 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER (I.LN2).PD; WD 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTOR'S TASK HEADER ; (I.UCB).5; WD 05 -- I/O FUNCTION CODE (IO.RLB/IO.WLB) (I.FCN).E8; WD 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK (I.IOSB).:; WD 07 -- RELOCATION BIAS OF I/O STATUS BLOCK (I.IOSB+2).C; WD 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140000)E; (I.IOSB+00ssrbl4).T:; WD 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE (I.AST).;F:; FOLLOWING FORMAT APPLIES TO ALL DATA TRANSFER FUNCTIONS:;WH; WD 12 -- MEMORY EXTENSION BITS (BITS 4 AND 5) OF I/O TRANSFER (I.PRM).4; WD 13 -- BUFFER ADDRESS OF I/O TRANSFER (I.PRM+2).6; WD 14 -- NUMBER OF BYTES TO BE TRANSFERED (I.PRM+4).E; WD 15 -- DIAGNOSTIC SUPPLIMENTAL PARAMETER ELSE NOT USED (I.PRM+6).TC; WD 16 -- HIGH PART OF LOGICAL BLOCK NUMBER AND HIGH BYTE NOT USED ; (I.PRM+10).DF; WD 17 -- LOW PART OF LOGICAL BLOCK NUMBER OF I/O REQUEST (I.PRM+12).F; WD 20 -- RELOCATION BIAS OF DIAGNOSTIC REG. BLOCK ADRS ELSE NOT USED; (I.PRM+14).NE; WD 21 -- DIAGNOSTIC REG. BLOCK ADRS (REAL OR DISPLACEMENT + 140000) ; (I.PRM+16). ;B#; SET CHARACTERISTICS FUNCTION CODE2; ; WD 12 --,; WD 13 -- PARAMETER SPECIFICATION (I.PRM+2); 0 = RESET VOLUME VALID; 1 = SET VOLUME VALID*; 2 = RESET VOLUME VALID, SPIN UNIT DOWN&; 3 = SET VOLUME VALID, SPIN UNIT UP*; -1 = SIZE UNIT (VOLUME VALID UNCHANGED) ; WD 14 --;M;-7CMDRED: ;ENTRY POINT FOR REISSUING I/O'S ON RECOVERY , CLRB I.PRM+11(R1) ;CLEAR INTERNAL FLAG BYTE MOV R1,R3 ;SAVE IOP ADDRESS & .IF DF M$$PRO ;MULTIPROCESSOR SYSTEM TST S.URM(R4) ;UNIBUS RUN MASK  BEQ 37$ ;NONE, CONTINUEN MOV @CPURM,-(SP) % BIT S.URM(R4),@(SP)+ ;OK ON THIS CPU( BNE 37$ ;YES, JUST EXITU*; GET FORK BLOCK AND QUEUE IT IN FORK LIST- MOV (R2),R1 ;/*Q.CST*/ ;GET THE CST ADDRESS 3 DEC C.UMCT(R1) ;DECREMENT THE UMR WAIT BLOCK COUNT 8 ADD #C.UMRW,R1 ;POINT TO THE BEGINNING OF THE WAIT BLOC5 MOV #-1,R2 ;SET COUNTER TO -1 BECAUSE WE INCREMENT R)32$: INC R2 ;INCREMENT THE INDEX COUNTERS" TST (R1) ;IS THERE A BLOCK HERE?% BEQ 33$ ;IF EQ NO, ALLOCATE ANOTHER;# BIT #1,(R1)+ ;IS THE BLOCK IN USE?N BNE 32$ ;YES, TRY ANOTHERB! MOV -(R1),R0 ;GET THE WAIT BLOCK( BR 35$ ;GO TO COMMON CODE:33$: PUSH ;SAVE THE TABLE ADDRESS AND BLOCK INDEX) MOV #UMRWTB,R1 ;SET LENGTH OF CORE BLOCK( CALL @ALOCB ;GET A WAIT BLOCK ! POP ;RESTORE REGISTERSH BCC 34$ ;WE GOT ONE,OK ;NO POOL, EXIT GRACEFULLYO MOV S.QST(R4),R2 ;GET THE QST$ MOV (R2),R1 ;/*Q.CST*/ GET THE CST> INC C.UMCT(R1) ;WE'RE NOT GOING TO USE A WAIT BLOCK AFTER ALL+ MOV #IE.NDR&377,R0 ;SET NO DYNAMIC MEMORYU CLR R1 ; JMP @IOFIN ;COMPLETE I/O034$: MOV S.URM(R4),(R0)+ ;PUT IN UNIBUS RUN MASK5 MOV R0,(R1) ;PUT THE NEW BLOCK ADDRESS IN THE TABLEA-35$: INC (R1) ;SHOW THAT THE BLOCK IS IN USEC; MOVB R2,I.PRM(R3) ;SAVE UMR WAIT BLOCK INDEX IN I/O PACKET;C BISB #IP.UMR,I.PRM+11(R3) ;MARK THE I/O AS HAVING A UMR WAIT BLOCKE% MOV R0,R4 ;PUT THE FORK BLOCK IN R4 CLR (R0)+ ;CLEAR THE FORK LINK& MOV #36$,(R0)+ ;PUT IN RETURN ADDRESS MOV R5,(R0)+ ;R5, UCB ADDRESS- MOV R3,(R0)+ ;IOP ADDRESS (COMES BACK IN R4)R MOV @KISR5,(R0)+ ;APR 5 BIASO% CALLR @QFORK ;QUEUE THE FORK BLOCK U$36$: MOV R4,R3 ;RESTORE IOP ADDRESS8 MOV U.SCB(R5),R4 ;RECOVER R4 WHICH IS DESTROYED BY FORK MOV S.QST(R4),R2 ;RESTORE QST0 MOV S.PBIA(R4),@KISR6 ;MAP APR 6 TO PORT DRIVER, MOV S.PBIA(R4),@#KINAR6 ; KERNAL INST SPACE- MOV R3,R1 ;RESTORE THE IOP IN R1 FOR $VOLVDR37$: .ENDC ;M$$PRO! .IF DF D$$DSK ;DISK DRIVER ONLY); CMP #IO.SMD,I.FCN(R1) ;IS IT A SET MEDIA DENSITY FUNCTION?V BNE 39$ ;NO, THEN CALL VOLVDK9 BITB #US.UMD,U.ST2(R5) ;DEVICE ATTACHED FOR DIAGNOSTICS?U BEQ 39$ ;NO, THEN CALL VOLVD,6 BISB #US.VV,U.STS(R5) ;SET THE VV BIT FOR LATER CHECK*39$: CALL @VOLVD ;CHECK THE VOLUME VALID! BCC 40$ ;IF IT WAS OK, CONTINUES! CALLR ENDCM1 ;GO FINISH THE I/OS40$: .ENDC ;D$$DSK;NK; SCAN THE PRIMARY TABLE FOR THE I/O FUNCTION CODE. FOR TAPE, CONTROL WILLPG; EITHER TRANSFER TO THE PROCESSING ROUTINE FOR THAT FUNCTION OR TO THE E; ROUTINE TO HANDLE ILLEGAL FUNCTIONS. FOR DISK, CONTROL WILL EITHER H; TRANSFER TO THE PROCESSING ROUTINE FOR THAT FUNCTION OR TO THE 'SCAN2'J; ROUTINE BELOW IN ORDER TO SCAN THE SECONDARY FUNCTION TABLE FOR A MATCH.; $ MOV I.FCN(R3),R1 ;GET FUNCTION CODE2 BIC #IQ.Q!IQ.X!IQ.UMD,R1 ;CLEAR OUT ANY MODIFIERS: MOV R1,EIOFUN ;00ssmkTADATADATADATADATADATAINITIALIZE END OF TABLE WITH USER I/O CODE) MOV #IOFUN,R0 ;ADD OF I/O FUNCTION TABLET50$: CMP R1,(R0) ;I/O CODES MATCH ? BEQ 60$ ;YES+ ADD #FOSIZ,R0 ;POINT TO NEXT FUNCTION CODEN BR 50$ ;KEEP ON LOOKINGN@60$: JMP @FO.CMD(R0) ;DISPATCH TO FUNCTION CODE SPECIFIC ROUTINE;IH; SCAN THE SECONDARY TABLE FOR THE I/O FUNCTION CODE. THIS SECOND TABLEL; IS SCANNED ONLY FOR DISK. CONTROL WILL EITHER TRANSFER TO THE PROCESSING L; ROUTINE FOR THAT FUNCTION OR TO THE ROUTINE TO HANDLE ILLEGAL FUNCTIONS. ;I .IF DF,D$$DSK-SCAN2: MOV I.FCN(R3),R1 ;GET FUNCTION CODEF- MOV R1,EIOFN2 ;MAKE SURE SOME MATCH FOUNDM+ MOV #IOFUN2,R0 ;SECONDARY TABLE ADDRESS 70$: CMP R1,(R0) ;MATCH?+ BEQ 80$ ;YES. GOTO PROCESSING ROUTINEI# ADD #FOSIZ,R0 ;NEXT TABLE ENTRYI BR 70$ ;AND GO CHECK IT480$: JMP @FO.CMD(R0) ;GOTO THE PROCESSING ROUTINE .ENDC ;D$$DSK .PAGE .SBTTL CMDSTC - SET STATUSE;+ ; **-CMDSTC-;J; THIS ROUTINE DISPATCHES ALL IO.STC COMMANDS. ONLINE AND GET UNIT STATUSS; COMMANDS ARE PASSED OFF TO OTHER ROUTINES. AVAILABLE COMMANDS ARE PROCESSED HERE2;MP; FOR DISKM THE IO.STC FUNCTION WILL DO ONE OF THE FOLLOWING ACTIONS, DEPENDING ; ON THE VALUE IN I.PRM+2:;$; I.PRM+2 ActionE; ------- ------A; 0 SET UNIT AS AVAILABLEI; 1 SET UNIT AS ONLINE.; 2 SET UNIT AVAILABLE, AND SPIN UNIT DOWN; 3 SAME AS 1$; -1 GET UNIT STATUSS;-H; FOR TAPE, THIS ROUTINE PERFORMS THE SET CHARACTERISTIC FUNCTION. THISE; MEANS THAT A TMSCP ONLINE COMMAND IS ISSUED, FOLLOWED BY A GET UNITRG; STATUS COMMAND. IF THE STC FUNCTION IS ISSUED BY CON/HRC, THE ONLINEO?; COMMAND IS NOT ISSUED; THE GET UNIT STATUS COMMAND IS ISSUED. G; CON/HRC IS CONSIDERED TO HAVE SENT THE STC FUNCTION IF BOTH ARE TRUE: ; 6; 1. UNIT IS ATTACHED FOR DIAGNOSTICS (US.UMD IS SET)3; 2. STC COMMAND HAS THE IQ.UMD SUBFUNCTION BIT SETA;A ; INPUTS:1;E$; R0 ADDRESS OF FUNCTION TABLE ENTRY; R2 QST ADDRESS; R3 I/O PACKET ADDRESST; R4 SCB ADDRESS; R5 UCB ADDRESS; ; OUTPUTS:;E;-CMDSTC:Y .IF DF D$$DSK ;IF DISKA+ TST I.PRM+2(R3) ;IS IT A GET UNIT STATUS?T BGE 10$ ;NOPE, KEEP LOOKING CALLR CMDGUS ;GO DO IT THEREI/10$: BIT #1,I.PRM+2(R3) ;IS IT AN ONL COMMAND?E BEQ 20$ ;NOPE,CONTINUER CALLR CMDONL ;GO DO IT THEREO+20$: CALL CMDCOM ;GO GET A COMMAND PACKETD. TST I.PRM+2(R3) ;SHOULD WE SPIN IT DOWN TOO? BEQ 30$ ;NOPE,KEEP GOINGC4 MOV U.UC2X(R5),@KISR6 ;MAP SECOND UCB EXTENSION* MOV X.UNFL+140000,R0 ;RETRIEVE UNIT FLAGS0 MOV S.PBIA(R4),@KISR6 ;RESTORE PORT MAPPING( BIT #UF.RMV,R0 ;IS THE DISK REMOVABLE?+ BEQ 30$ ;NO, DON'T SPIN DOWN FIXED DISKSI. MOV #MD.SPD,P.MOD(R1) ;SET SPIN DOWN MODIFIER730$: PUSH <#CLACMD> ;RETURN TO STARTING OTHER COMMANDSE CALL CMDSEN;C&; RETURN TO THIS POINT WITH END PACKETK; REGISTERS ARE THE SAME EXCEPT THAT R1 CONTAINS AN END PACKET INSTEAD OF AO; COMMAND PACKET.E;E2 CALL ENDERR ;CHANGE END CODE TO RSX STATUS CODE PUSH <#0> ;NO BYTE COUNT05 CMP #ST.SDI!ST.CON,P.STS(R1) ;WAS SPIN DOWN IGNORED?E BNE 70$ ;NO, JUST FINISH UP; %; WE HAVE TO SPIN DOWN THE OTHER UNITO;O4 CALL ENDCMO ;GO FINISH THE COMMAND, AND COME BACK0 MOV U.UC2X(R5),@KISR6 ;MAP SECOND UCB EXTENSION* MOV X.MLUN+140000,R2 ;GET MULTI-UNIT CODE, MOV S.PBIA(R4),@KISR6 ;RESTORE PORT MAPPING) MOV R5,R0 ;SAVE THE ORIGINAL UCB IN R0T2 PUSH #SCUCB ;NOW SEARCH TO FIND ONE THAT MATCES40$: CALL @(SP)+ ;GET A UCBD$ BCC 50$ ;WE GOT ONE, CHECK IT OUT2 MOV S.QST(R4),R2 ;RESTORE THE QST BEFORE EXITING# RETURN ;END OF UCB SEARCH, EXIT 050$: CMP R0,R5 ;IS IT THE UCB WE STARTED WITH?! BEQ 40$ ;YES, GET THE NEXT ONES0 MOV U.UC2X(R5),@KISR6 ;MAP SECOND UCB EXTENSION. MOV X.MLUN+140000,R1 ;GET THE MULTI-UNIT CODE, MOV S.PBIA(R4),@KISR6 ;RESTORE PORT MAPPING' CMP R1,R2 ;MULTI UNIT CODE THE SAME?A! BNE 40$ ;NOPE, GET ANOTHER ONES. ADD #10,SP ;WE FOUND IT, FLUSH THE UCB SCAN. BIS #UU.IOS,U.UTIL(R5) ;SET THE STALL I/O BIT- MOV #T.NIOS,R0 ;I/O STALLED CONSOLE MESSAGEH CALL @DVM00ssrblSG ;GO PRINT IT  MOV S.QST(R4),R2 ;GET THE QST0% MOV (R2),R3 ;/*Q.CST*/ AND THE CSTD CALL PIOPAL ;ALLOCATE A PIOPN5 MOV #AVNFUN,R0 ;SET UP THE AVAILABLE FUNCTION TABLEI CALL CMDCOM ;GO GET A PACKETE2 MOV #MD.SPD,P.MOD(R1) ;SET THE SPIN DOWN MODIFIER2 PUSH #CLACMD ;SEE IF WE CAN START MORE COMMANDS# CALL CMDSEN ;SEND OFF THE PACKET;DN; END PACKET RETURNS HERE. WE CAN'T REALLY DO ANYTHING INTELLIGENT IF THE I/O(; IS NOT A SUCCESS, SO JUST COMPLETE IT.;S PUSH <#0> ;NO BYTE COUNT;% MOV #IS.SUC&377,R0 ;SHOW SUCCESSFULH70$: JMP ENDCOM ;FINISH IT .IFF ;D$$DSK - IF TAPEP5 BIT #IQ.UMD,I.FCN(R3) ;USER MODE DIAGNOSTIC BIT SET?L* BEQ 20$ ;NO. DO ONLINE/GET-UNIT-STATUS2 BITB #US.UMD,U.ST2(R5) ;ATTACHED FOR DIAGNOSTICS?* BEQ 20$ ;NO. DO ONLINE/GET-UNIT-STATUS1 MOV #GUSFUN,R0 ;ISSUE A GET-UNIT-STATUS COMMANDE/ CALL CMDCOM ;BUILD THE COMMAND PACKET NEEDEDL" PUSH <#CLACMD> ;WHENCE TO RETURN! CALL CMDSEN ;ISSUE THE COMMANDE;I; END PACKET PROCESSINGB; ' MOV P.STS(R1),R0 ;GET THE STATUS CODES+ BIC #^C,R0 ;GET MAJOR STATUS CODED' CMP R0,#ST.AVL ;IS IT AVAILABLE CODE?) BNE 10$ ;NO.O/ CLR R0 ;/*ST.SUC*/ ; INDICATE SUCCESS ANYWAYI.10$: CALL ENDERR ;CONVERT TO RSX STATUS CODE$ PUSH <#0> ;NO STATUS FOR IOSB + 2) CALLR ENDCOM ;AND GO CLEAN UP PROPERLYU)20$: BIT #M.BOT,U.CW2(R5) ;ARE WE AT BOT? % BEQ 25$ ;NO. DO NOT WORRY ABOUT ITS> BIT #UU.BLK,U.UTIL(R5) ;DOES UNIT SUPPORT MULTIPLE DENSITIES?& BNE 25$ ;NO. NOTHING TO DO IN HERE# MOV Q.CST(R2),R0 ;GET CST ADDRESSS( MOV R3,C.EXTN(R0) ;SAVE R3 TEMPORARILY* CALL PIOPAL ;GET A PIOP FOR THE COMMAND, MOV #AVNFUN,R0 ;FUNCTION CODE ENTRY TO USE& CALL CMDCOM ;BUILD TEMPLATE COMMAND9 BIS #MD.CSE,P.MOD(R1) ;SET 'CLEAR SERIOUS EXCEPTION' MODO$ PUSH <#CLACMD> ;WHERE TO RETURN TO! CALL CMDSEN ;ISSUE THE COMMAND.) PUSH ;SAVE REGISTERS FOR LATERO3 MOV #IS.SUC,R0 ;NON-ZERO -> RETURN PACKET TO POOLN! PUSH <#0> ;NO IOSB DATA EITHERE$ CALL ENDCMO ;CLEAN UP PACKET USED# MOV Q.CST(R2),R0 ;GET CST ADDRESSM MOV C.EXTN(R0),R3 ;RESTORE R3A! POP ;RESTORE REGISTERSR125$: CALLR CMDONL ;ISSUE ONLINE/GET-UNIT-STATUS  .ENDC ;D$$DSK .PAGE .IF DF,D$$DSK( .SBTTL CMDTRM - PROCESS RCT TERMINATION;+-; **-CMDTRM- PROCESS RCT TERMINATION REQUESTSR;RH; THIS SECTION DOES ALL THE PROCESSING SPECIFIC TO TERMINATION REQUESTS.K; I.PRM CONTAINS THE ADDRESS OF THE I/O THAT MUST BE RESTARTED, AND I.PRM+2 -; CONTAINS THE STATUS CODE RETURNED FROM RCT.P;C ; INPUTS:M;Q); R0 ADDRESS OF FUNCTION TABLE ENTRY(; R2 QST ADDRESSP; R3 I/O PACKET ADDRESS; R4 SCB ADDRESS ; R5 UCB ADDRESSS;U ; OUTPUTS:;$;-CMDTRM:= BIT #IQ.X!IQ.Q!IQ.UMD,I.FCN(R3) ;THESE MODIFIERS ARE ILLEGAL  BEQ 10$ ;IT'S OKT CALLR ILEGALQ$10$: MOV R5,R0 ;COPY THE UCB TO R07 ADD #U.BPKT,R0 ;ADD THE OFFSET TO THE BAD BLOCK QUEUET: MOV I.PRM(R3),R1 ;GET THE I/O THAT INITIATED THE REPLACE3 BEQ 40$ ;IF NO IOP THEN JUST COMPLETE WITH SUCCE PUSH ;SAVE R3R( CALL @QRMVA ;REMOVE IT FROM THE QUEUE1 MOV (SP),R3 ;GET R3, BUT LEAVE IT ON THE STACK+ CMPB #IS.SUC,I.PRM+2(R3) ;DID RCT SUCCEED?S BNE 20$ ;NO, COMPLETE THE I/O0 MOV R4,R0 ;COPY THE SCB TO R0 (S.LHD IS AT 0)4 CALL @QINSP ;INSERT THE IOP BACK IN THE SCB QUEUE MOV S.QST(R4),R2 ;RESTORE R2 BR 30$ ;COMMON END POINT 20$: MOV S.QST(R4),R2 ;RESTORE R2) MOV I.PRM+2(R3),R0 ;GET THE STATUS CODED/ MOV I.PRM(R3),R3 ;MOVE THE ORIGINAL IOP TO R3P CLR R1 ;NO BYTE COUNT CALL ENDCM1 ;FINISH THE I/O30$: POP ;RESTORE R3((40$: MOV #IS.SUC&377,R0 ;SUCCESS STATUS CLR R1 ;NO BYTE COUNT' PUSH <#CLACMD> ;TRY TO START MORE I/OO! CALLR ENDCM1 ;FINISH THE I.TRMT .ENDC ;D$$DSK  .PAGE= .SBTTL ENDCOM - COMMON PROCESSING TO COMPLETE AN I/O REQUESTQ;+:; **-ENDCOM - COMMON PROCESSING TO COMPLETE AN I/O REQUESTA; **-ENDCMO - ALTERNATE ENTRY POINT FOR ENDCOM (RETURN TO CALLER)D; ROUTINE DESCRIPTION;;E ; INPUTS:A;O8; R0=STATUS (0 -> DO NOT00ssmkTADATADATADATADATADATA CALL $IOFIN, I/O STILL PENDING); R1=END PACKETP; R2=ADDRESS OF QST(; R3=I/O PACKET ADDRESS ; R4=ADDRESS OF SCBR; R5=ADDRESS OF UCB; (SP)=BYTECOUNT; &; OUTPUTS: (FALLING THROUGH TO ENDCM1); ; R0,R2-R5 ARE PRESERVED; R1 IS SET TO BYTECOUNT;-ENDCMO:R4 MOV (SP),-(SP) ;COPY TOP OF STACK TO A TEMPORY CELL, MOV 4(SP),2(SP) ;GET SPACE FOR SECOND VALUE% MOV (SP)+,2(SP) ;FINISH THE EXCHANGEOENDCOM:( .IF DF E$$LOG D TST R0 ;IS THERE ENDING STATUS+ BEQ 10$ ;NO, THEN WE DON'T LOG THE PACKETN .IF DF T$$APE2 CMP #ST.VOL,P.STS(R1) ;IS IT 'NO VOLUME MOUNTED'?) BEQ 10$ ;YES. DO NOT LOG IT FOR TAPE5 .ENDC ;T$$APE? BITB #EF.LOG,P.STS(R1) ; IS THERE AN ERRORLOG PACKET TO FOLLOW BEQ 10$ ;NO, THEN DON'T LOGI .IF DF,D$$DSK6 BIT #UU.SEL,U.UTIL(R5) ;LOG PACKET FOR THIS DEVICE?( BNE 10$ ;NE - DO NOT LOG THE PACKET .ENDC ;D$$DSK/ CMPB #OP.ONL!OP.END,P.OPCD(R1);ONLINE COMMAND? BEQ 10$ ;DO NOT LOG PACKETS .IF DF,T$$APE2 CMPB #OP.AVL!OP.END,P.OPCD(R1);AVAILABLE COMMAND? BEQ 10$ ;DO NOT LOG PACKETS .ENDC ;T$$APE CALL LERR ;LOG THE ERROR10$: .ENDC ;E$$LOG4 BIT #IQ.UMD,I.FCN(R3);USER MODE DIAGNOSTIC REQUEST? BEQ 70$ ;NOL* PUSH ;SAVE WORK REGISTERS MOV R3,R0 ;COPY OF IOP ADDRESS .IF DF T$$APE3 CMPB #IO.EOF/256.,I.FCN+1(R3) ;WRITE EOF FUNCTIONO BEQ 20$ ;IF EQ YES/ CMPB #IO.RWD/256.,I.FCN+1(R3) ;REWIND FUNCTIONI BNE 30$ ;IF EQ YES120$: MOV I.PRM+14(R3),I.PRM+16(R3) ;RELOCATE BIAS.0 MOV I.PRM+12(R3),I.PRM+14(R3) ;RELOCATE ADDRESS30$: .IFTF ;T$$APE, MOV I.PRM+14(R0),R3 ;DESTINATION APR 6 BIAS BEQ 40$ ;NO BUFFER- MOV I.PRM+16(R0),R4 ;REGISTER BUFFER ADDRESSE BEQ 40$ ;NO BUFFER" MOV R1,R2 ;R2 IS THE SOURCE DISP( SUB #ENVLEN,R2 ;BACK TO START OF HEADER- BIC #160000,R2 ;R2 IS ADDRESS IN APR 5 RANGER BIS #120000,R2 ;T' MOV @KISR6,R1 ;R1 IS SOURCE APR 5 BIAS/% MOV #RPLEN+ENVLEN,R0;NUMBER OF BYTESE CALL @BLXIO ;MOVE THE DATA40$: .IFT ;T$$APE;# MOV 2(SP),R3 ;RESTORE IOSB ADDRESS+3 CMPB #IO.EOF/256.,I.FCN+1(R3) ;WRITE EOF FUNCTIONM BEQ 50$ ;IF EQ YES/ CMPB #IO.RWD/256.,I.FCN+1(R3) ;REWIND FUNCTIONI BNE 60$ ;IF EQ YES050$: MOV I.PRM+14(R3),I.PRM+12(R3) ;RESTORE BIAS/ MOV I.PRM+16(R3),I.PRM+14(R3) ;RESTORE ADDRESSC60$: .ENDC ;T$$APE/ POP ;RESTORE ORIGINAL CONTENTS#70$:0 PUSH ;SAVE COMPLETION CODE/IOP ADDRESS( CALLV PORT,PKTDR ;DEALLOCATE END PACKET$ MOV R3,R1 ;SAVE THE PACKET ADDRESS- MOV (R2),R0 ;/*Q.CST*/ ;GET THE CST ADDRESSR$ ADD #C.OLHD,R0 ;POINT TO QUEUE HEAD5 CMP R1,(R0) ;IS THIS THE OLDEST PACKET IN THE QUEUEW& BNE 90$ ;NO, DON'T BOTHER WITH TIMER;68; MUST TAKE CARE OF TIMER BECAUSE OLDEST COMMAND IS DONE;I" TST (R1) ;OTHER PACKETS ON QUEUE' BEQ 80$ ;NO, THEN DON'T RESTART TIMER;P@; RESET TIME-OUT COUNT FOR NEW OLDEST COMMAND AND RESET BUSY UCB;;6 MOV (R1),R1 ;R1 IS THE ADDRESS OF THE NEW OLDEST CMD2 MOV I.UCB(R1),R1 ;R1 IS THE UCB OF THE NEW OLDEST, BICB #US.BSY,U.STS(R5) ;CLEAR OLD BUSY UNIT* BISB #US.BSY,U.STS(R1) ;SET NEW BUSY UNIT* MOV R1,S.BSYU(R4) ;REMEMBER NEW BUSY UNIT$ MOVB S.ITM(R4),S.CTM(R4) ;SET TIMER0 MOV (R0),R1 ;GET BACK THE IOP WE'RE WORKING ON BR 90$T;M7; STOP THE TIMER THERE ARE NO MORE COMMANDS OUTSTANDINGQ;$80$: CLRB S.CTM(R4) ;STOP TIMERP BICB #US.BSY,U.STS(R5)F CLR S.BSYU(R4) ;CLEAR BSYUCB 90$:/ CALL @QRMVA ;REMOVE THE PACKET FROM THE QUEUEE& MOV S.QST(R4),R2 ;RESTORE QST ADDRESS9 POP ;RESTORE IOP ADDR, COMPL CODE, BYTE COUNTD;S; FALL THROUGH TO ENDCM1;1 .PAGEI .SBTTL ENDCM1 - ALTERNATE ENTRY POINT FOR COMMANDS WITHOUT AN END PACKET.;+F; **-ENDCM1 - ALTERNATE ENTRY POINT FOR COMMANDS WITHOUT AN END PACKET; ROUTINE DESCRIPTIONR;E ; INPUTS:O;C8; R0=STATUS (0 -> DO NOT CALL $IOFIN, I/O STILL PENDING); R1=BYTECOUNT; R2=ADDRESS OF QSTB; R3=I/O PACKET ADDRESS0; R4=ADDRESS OF SCBM; R5=ADDRESS OF UCBH;U ; OUTPUTS:;T; R0-R1 DESTROYED; R2,R4-R5 ARE PRESERVED; R3 IS SET TO CST;-ENDCM1: ;D';DEALLOCATE UMRS00ssrbl IF THEY WERE ALLOCATEDE;.> BITB #IP.UMR,I.PRM+11(R3) ;A UMR WAIT BLOCK ALLOCATED FOR THI BEQ 20$ ;IF EQ NOD PUSH ;SAVE R2 AND R3. BICB #IP.UMR,I.PRM+11(R3) ;CLEAR THE UMR FLAG% MOV (R2),R2 ;/*Q.CST*/ ;GET THE CST - BIS #C1.DQU,(R2) ;SET THE BIT TO CALL $DQUMR 8 ADD #C.UMRW,R2 ;POINT TO THE BEGINNING OF THE WAIT BLOC' MOVB I.PRM(R3),R3 ;GET THE BLOCK INDEX ! PUSH ;SAVE THE BLOCK INDEXD& ASL R3 ;MAKE THE INDEX A WORD OFFSET1 ADD R3,R2 ;ADD IT TO THE BEGINNING OF THE TABLEM DEC (R2) ;CLEAR THE IN USE BIT# PUSH ;SAVE THE TABLE ADDRESSB5 MOV (R2),R2 ;GET THE ADDRESS OF THE BLOCK FOR DEUMR,' ADD #10,R2 ;POINT TO THE MAPPING INFO+ MOV S.QST(R4),R3 ;GET THE QST% MOV (R3),R3 ;/*Q.CST*/ ;NOW THE CSTS9 INC C.UMCT(R3) ;INCREMENT THE UMR ASSIGNMENT BLOCK COUNT CALL @DEUMR ;DEASSIGN THE UMRS8 POP ;RESTORE THE BLOCK INDEX AND BLOCK ADDRESSC .IIF DF D$$DSK CMP #DUUMR,R3 ;IS IT A DYNAMICALLY ALLOCATED BLOCK?AC .IIF DF T$$APE CMP #MUUMR,R3 ;IS IT A DYNAMICALLY ALLOCATED BLOCK?H BGE 10$ ;IF GE, NO PUSH ;SAVE R0 AND R1) MOV (R2),R0 ;MOV THE ADDRESS FOR $DEACBO8 .IIF DF M$$PRO TST -(R0) ;ADJUST FOR EXTRA WORD FOR URM* CLR (R2) ;CLEAR THE ADDRESS IN THE TABLE% MOV #UMRWTB.,R1 ;LENGTH OF THE BLOCKI( CALL @DEACB ;DEALLOCATE THE WAIT BLOCK POP ;RESTORE R1 AND R0$10$: POP ;RESTORE R3 AND R2$20$: TST R0 ;DO WE COMPLETE THIS IO BEQ 40$ ;NO, THEN WE EXITL( BITB #IP.FAK,I.PRM+11(R3) ;IS IT A PIOP BEQ 30$ ;NO, FINISH THE I/OA8 MOV R3,R1 ;MOVE ADDRESS OF PIOP TO R1 FOR DEALLOCATION0 MOV (R2),R3 ;/*Q.CST*/ ;WE NEED CST FOR PIOPDE# CALLR PIOPDE ;DEALLOCATE THE PIOPJ30$: PUSH 3 CALL @IODSA ;SPECIAL ENTRY POINT FOR MSCP DEVICESM POP 1: MOV U.SCB(R5),R4 ;RECOVER R4 WHICH IS DESTROYED BY $IOFIN& MOV S.QST(R4),R2 ;RESTORE QST ADDRESS40$:) MOV (R2),R3 ;/*Q.CST*/ ;CST IS RESTORED; RETURN ;RETURN TO CALLER4 .PAGE6 .SBTTL ENDERR - TRANSLATE MSCP ERROR CODE TO RSX CODE;+2; **-ENDERR- TRANSLATE MSCP ERROR CODE TO RSX CODE;FE; THIS ROUTINE LOOKS AT THE CURRENT END PACKET, POINTED TO BY R1, AND D; TRANSLATES THE MSCP ERROR RETURNED TO THE RSX EQUIVALENT. IN SOMEG; ERRORS, ADDITIONAL ACTION IS REQUIRED, E.G. FOR POSITION LOST ERRORS,S!; THE POWER FAIL BIT MUST BE SET.R;D ; INPUTS:;V; R1=ADDRESS OF END PACKET; R2=ADDRESS OF QST2; R3=I/O PACKET ADDRESSR; R4=ADDRESS OF SCBR; R5=ADDRESS OF UCB.;E ; OUTPUTS:;R-; R0=RSX ERROR STATUS (CAN BE IS.SUC AS WELL) ; R1-R5=PRESERVEDE<; POWERFAIL FLAG SET IF TMSCP ERROR IS ST.POL(POSITION LOST);R;-ENDERR:T .IF DF T$$APE ;TAPE ONLYR3 BITB #EF.EOT,P.FLGS(R1) ;WAS PHYSICAL EOT REACHED?  BEQ 10$ ;NO.S3 MOVB P.OPCD(R1),R0 ;GET US THE ACTUAL OPCODE USEDS7 BIC #177400!OP.END,R0 ;CLEAR ALL BUT THE OPCODE ITSELFU/ CMP R0,#OP.RD ;WAS THIS EITHER READ FUNCTION?S0 BEQ 10$ ;YES. DON'T REPORT EOT ON SUCH THINGS- CMP R0,#OP.REP ;IS THIS A SPACING FUNCTION?R+ BEQ 10$ ;YES. KEEP ORIGINAL STATUS CODEL. CMP R0,#OP.CMP ;IS THIS A COMPARE HOST DATA?+ BEQ 10$ ;YES. KEEP ORIGINAL STATUS CODE3 MOV #IE.EOT&377,R0 ;INDICATE PHYSICAL END OF TAPEO: BIC #M.AEOV!M.BOT!M.RWD!M.SER!M.TMK,U.CW2(R5) ;NEW STATES BIS #M.EOT,U.CW2(R5) ;NEW STATE+ RETURN ;THAT'S ALL WE NEED FOR THIS ONEL10$: .IFTF ;T$$APES, PUSH ;SAVE. NEED AS A WORK REGISTER* MOV P.STS(R1),R1 ;GET TMSCP STATUS CODES+ BIC #^C,R1 ;CLEAR OUT THE SUBCODEC .IFT ;T$$APE( CMP #ST.AVL,R1 ;IS THE UNIT AVAILABLE?+ BEQ 20$ ;YES. THIS MEANS CERTAIN STATE , CMP #ST.BOT,R1 ;IS THERE A BOT INDICATION? BNE 30$ ;NO.R*20$: BIS #M.BOT,U.CW2(R5) ;INDICATE AT BOTB BIC #M.AEOV!M.PEOV!M.RWD!M.SER!M.TMK!M.EOT,U.CW2(R5) ; NEW STATES30$: .IFTF ;T$$APE . MOVB RSXTAB(R1),R0 ;TRANSLATE THE ERROR CODE3 BIC #177400,R0 ;CLEAR OUT THE HIGH BYTE OF STATUSE .IFT ;T$$APE' CMPB R1,#ST.POL ;POSITION LOST ERROR?. BNE 40$ ;NO. GO CLEAN UP3 BISB #US.PWF,U.STS(R5) ;SET POWERFAIL BIT FOR UNITI40$:' POP ;RESTORE00ssmkTADATADATADATADATADATA END PACKET ADDRESSA .IFF ;DISK ONLYT' POP ;RESTORE END PACKET ADDRESS + CMP P.STS(R1),#ST.DAT ;IS IT FORCED ERROR?T BNE 50$ ;NO, LEAVE IT ALONE2 MOV #IE.FER&377,R0 ;SET FORCED ERROR STATUS CODE50$: .ENDC, CMP #ST.OFL,P.STS(R1) ;WAS IT UNIT OFFLINE? BNE 60$ ;NOPE, JUST EXITU/ MOV #IE.IDU&377,R0 ;ST.OFL MEANS NO SUCH UNIT60$:% RETURN ;AND GO BACK TO THE CALLERE .PAGE .IF DF,D$$DSK! .SBTTL ENDSIO - TRY TO STALL I/OA;+;**-ENDSIO- TRY TO STALL I/O;R ; INPUTS:P;E; R1 END PACKET ADDRESSI; R2 QST ADDRESS; R3 (P)IOP ADDRESSC; R4 SCB ADDRESS; R5 UCB ADDRESS;S ; OUTPUTS:0; CARRY CLEAR - R1-R5 PRESERVED, I/O NOT STALLED-; CARRY SET - R2,R4,R5 PRESERVED, I/O STALLED;-)ENDSIO: MOV P.STS(R1),R0 ;GET STATUS WORDF) BIC #^C,R0 ;CLEAR SUBSTATUS BITS#! CMP #ST.OFL,R0 ;OFFLINE TO DISKH& BEQ 5$ ;YES, SHOULD TRY TO STALL I/O% CMP #ST.AVL,R0 ;HOW ABOUT AVL STATE?$ BNE 20$ ;NOT THAT EITHER, CONTINUE5$:-) BITB #IP.FAK,I.PRM+11(R3) ;IS IT A PIOP?E0 BNE 20$ ;YES, LET PIOP'S THROUGH FOR RECOVERY2 BIT #UU.SIO,U.UTIL(R5) ;DOES THIS UNIT STALL I/O? BEQ 20$ ;IF EQ NO- BITB #US.MNT,U.STS(R5) ;IS THE UNIT MOUNTED?  BNE 20$ ;NO, DON'T STALL I/O/% CLR R0 ;INDICATE NOT TO FINISH I/O04 PUSH ;SAVE THE IOP AND SHOW NO BYTE COUNT' CALL ENDCMO ;CLEAN UP THE END PACKETS POP ;GET THE IOP- .IF DF D$$DSK&DU$CHK ;IF QUEUE OPTIMIZATIONS3 MOV I.UCB(R1),R5 ;MAKE SURE WE HAVE THE RIGHT UCBT CALL REQUE ;RECONVERT THE LBN .ENDC ;D$$DSK&DU$CHK3 MOV R4,R0 ;MOVE THE S.LHD QUEUE TO R0 FOR $QINSBE4 CALL @QINSB ;INSERT AT THE BEGINNING OF THE QUEUE2 BIT #UU.IOS,U.UTIL(R5) ;DID WE ALREADY STALL I/O?* BNE 10$ ;YES, DON'T REISSUE THE MESSAGE. BIS #UU.IOS,U.UTIL(R5) ;SET THE STALL I/O BIT) MOV #T.NIOS,R0 ;SET I/O STALLED MESSAGEA CALL @DVMSG ;GO SEND IT MOV S.QST(R4),R2 ;RESTORE R2$10$: SEC ;SHOW THAT WE STALLED IT RETURNU20$: CLC ;WE DIDN'T STALL ITI RETURN .ENDC ;D$$DSKN .PAGE- .SBTTL FINIO - FINISH UP ALL I/O IN A QUEUE ;+-;**-FINIO-FINISH ALL I/O IN A QUEUE AS IE.FHEN; ; INPUTS: ; ; R1 INITIAL POINTER FOR QUEUE; R2 QST ADDRESS; R4 SCB ADDRESS; R5 UCB ADDRESS;E ; OUTPUTS:; R2,R4,R5 PRESERVED;-FINIO:) MOV R1,R3 ;COPY THE QUEUE ADDRESS TO R3S# MOV (R3),R3 ;GET THE FIRST PACKET * BEQ 20$ ;THERE AREN'T ANY, SO JUST LEAVE" CLR (R1) ;REINITIALIZE THE QUEUE MOV R1,2(R1) ;...-10$: MOV #IE.FHE&377,R0 ;FATAL HARDWARE ERROR CLR R1 ;NO BYTE COUNTE1 PUSH <(R3)> ;SAVE LINK TO NEXT IOP IN THE QUEUE+ CALL ENDCM1 ;GO FINISH IT - POP ;GET LINK TO NEXT IOP IN THE QUEUEI BNE 10$ ;GO DO THE NEXT ONET 20$: RETURN4 .PAGE. .SBTTL GCSSIO - INITIATE A GET COMMAND STATUS;+9;**-GCSSIO-INITIATE A GET COMMAND STATUS COMMAND (OP.GCS)R; ; INPUTS:3;G; R2 ADDRESS OF QST; R3 ADDRESS OF CST; R4 ADDRESS OF SCB; R5 ADDRESS OF UCB;# ; OUTPUTS:;F;-GCSSIO: " TST C.OLHD(R3) ;I/O STILL THERE?# BNE 10$ ;IF NE, YES, CHECK ON IT / BIC #C1.GCS,(R3) ;FORGET ABOUT ISSUING OP.GCS3( JMP CLACMD ;GO TRY TO START SOMETHING;17; ISSUE 'GET COMMAND STATUS' COMMAND FOR OLDEST COMMAND ;S10$:. BIS #C1.TMO,(R3) ;WE'RE NOW IN TIMEOUT STATE, BIC #C1.GCS,(R3) ;SHOW THAT WE DID THE GCS, MOV #GCSFUN,R0 ;GET THE GCS FUNCTION TABLE/ MOVB FO.SZ(R0),R0 ;GET THE SIZE OF THE PACKET CALLV PORT,PKTAC ;GET A PACKET: MOV C.OLHD(R3),R0 ;GET THE ADDRESS OF THE OLDEST COMMAND+ MOV #OP.GCS,P.OPCD(R1) ;SET UP GCS OP CODEY; MOVB I.PRM+11(R0),P.OTRF(R1) ;OUTSTANDING REFERENCE NUMBER.< BIC #^C<17>,P.OTRF(R1) ;CLEAR OUT ALL BUT THE SEQUENCE BITS; MOV R0,P.OTRF+2(R1) ;IOP ADDRESS IS THE SECOND CRF NUMBERB; MOV R0,P.CRF(R1) ;USE THE IOP FOR BOTH OF THE CRF NUMBERS3 MOV R0,P.CRF+2(R1) ;...S/ MOV I.UCB(R0),R5 ;GET THE CORRECT UCB ADDRESSM3 MOVB U.UNIT(R5),P.UNIT(R1) ;SET UP THE UNIT NUMBERV) CLRB P.UNIT+1(R1) ;UNIT IS ALWAYS <=255,% CALLV PORT,PORSEN ;SEND THE COMMANDA- JMP CLACMD ;GO 00ssrblTRY TO START OTHER COMMANDSY .PAGE4 .SBTTL GUSSIO - START AND PROCESS AN OP.GUS REQUEST .SBTTL CMDGUS - GET UNIT STATUS;+0;**-GUSSIO - START AND PROCESS AN OP.GUS REQUEST;DH; THIS ROUTINE ISSUES GUS COMMANDS. THE GUSSIO ENTRY POINT WILL ISSUE A#; FOR ANY UNIT THAT HAS UU.GUS SET.1;; ; INPUTS:I;B ; ASSUMES ONE SCB PER CONTROLLER; R2=ADDRESS OF QST); R4=ADDRESS OF SCBH; R5=ADDRESS OF UCB ;N ; OUTPUTS:; IF C1.GUS IS CLEARED THENP;,; R2=ADDRESS OF QSTM; R3=ADDRESS OF CSTG; R4=ADDRESS OF SCBC; R5=ADDRESS OF UCB.;T;**-CMDGUS - GET UNIT STATUS;P; ROUTINE DESCRIPTIONM;SM; CONTROL IS PASSED TO THIS POINT WHEN A GET UNIT STATUS COMMAND IS ISSUED BY (; THE USER, SUCH AS IN AN IO.STC COMMAND; ; INPUTS: ;L$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R2=ADDRESS OF QSTS; R3=ADDRESS OF IOP ; R4=ADDRESS OF SCB ; R5=ADDRESS OF UCB ;A ; OUTPUTS:;; R2-R5 ARE PRESERVEDN; ;- .ENABL LSB.CMDGUS:R( PUSH <#CLACMD> ;RETURN TO CLASS COMMAND BR 30$ ;GO TO COMMON CODEOGUSSIO: ;A!; LOOK FOR UNITS NEEDING OP.GUS'ST;I PUSH <#SCUCB> ;START A UCB SCAN10$: CALL @(SP)+ ;GO GET A UCBI BCC 20$ ;WE GOT ONE  JMP 190$ ;NONE LEFT, EXIT320$: BIT #UU.GUS,U.UTIL(R5) ;IS AN OP.GUS REQUIRED?S" BEQ 10$ ;IF EQ, NO, TRY NEXT ONE+ BIC #UU.GUS,U.UTIL(R5) ;LEAVE UU.GUS STATEO7 BIS #UU.SER,U.UTIL(R5) ;MAKE SURE WE'RE IN SERIAL MODE  CALL PIOPAL ;GO GET A PIOP3 PUSH <#200$> ;RETURN TO ISSUING MORE GUS COMMANDSC830$: MOV #GUSFUN,R0 ;R0 POINTS TO TABLE ENTRY FOR OP.GUS$ CALL CMDCOM ;SET UP COMMAND PACKET1 CALL CMDSEN ;SEND THE COMMAND TO THE CONTROLLER;C); PROCESS END PACKET FOR OP.GUS - INPUTS:O;N; R1=ADDRESS OF END PKT,; R3=ADDRESS OF IOPG; R2=ADDRESS OF QSTO; R4=ADDRESS OF SCBQ; R5=ADDRESS OF UCB ;T .IF DF D$$DSK;I#; SAVE INFORMATION IN UCB EXTENSIONS;U, PUSH ;SAVE END PACKET, QST, IOP5 MOV #,R0 ;SET NUMBER OF BYTES TO MOVES, MOV R1,R2 ;COPY MSCP PACKET POINTER TO R20 ADD #P.MLUN,R2 ;UPDATE OFFSET INTO MSCP PACKET* MOV @KISR6,R1 ;GET PACKET'S BASE ADDRESS! SUB #20000,R2 ;BIAS IT PROPERLY. MOV U.UC2X(R5),R3 ;GET DESTINATION APR6 BIAS4 MOV #X.MLUN+140000,R4 ;GET DESTINATION DISPLACEMENT CALL @BLXIO ;MOVE THE DATAS+ MOV U.SCB(R5),R4 ;RESTORE THE SCB ADDRESSD7 .IF DF D$$DSK&DU$CHK ;IF QUEUE OPTOMIZATION SUPPORTEDS, MOV 4(SP),R2 ;RETRIEVE MSCP PACKET POINTER0 MOVB P.TRCK(R2),U.PRM(R5) ;SET UP SECTORS/TRACK% MOVB P.GRP(R2),R0 ;GET TRACKS/GROUPT/ MUL P.CYL(R2),R0 ;MULTIPLY BY GROUPS/CYLINDERA- MOVB R1,U.PRM+1(R5) ;SET UP TRACKS/CYLINDERS" MOV R1,R0 ;SET UP FOR MULTIPLY - MUL P.TRCK(R2),R0 ;COMPUTE SECTORS/CYLINDERS& MOV U.CW3(R5),R3 ;SET UP MAX LBN ... MOVB U.CW2(R5),R2 ;...$ DIV R1,R2 ;COMPUTE CYLINDERS/UNIT+ MOV R2,U.PRM+2(R5) ;SET UP CYLINDERS/UNITK .ENDC ;D$$DSK&DU$CHKT; N; THE NEXT SECTION OF CODE SETS MULTI-UNIT CODES FOR THE UNIT. IF THE MULTI-P; UNIT CODE OF THIS UNIT MATCHES THAT OF ANY OTHER UNITS ON THE CONTROLLER, UU.SN; IS SET IN THE UCB OF THE FIXED DISK. THIS INDICATES THAT I/O CAN BE STALLEDL; TO THIS UNIT. FOR M-PLUS, US.MUN IS SET IN THE UCB OF THE REMOVABLE DISK.N; THIS TELLS DISMOUNT TO ISSUE WARNING MESSAGES ABOUT MULTI-UNIT SPIN DOWN AND=; TO PREVENT NON-PRIVILEGED USERS FROM SPINNING DOWN THE DISKP;L& MOV 4(SP),R1 ;GET THE END PACKET BACK& MOV P.UNFL(R1),R0 ;GET THE UNIT FLAGS+ MOV P.MLUN(R1),R2 ;AND THE MULTI-UNIT CODE& BEQ 90$ ;IF NO CODE, UNIT IS OFFLINE MOV R5,R3 ;SAVE THE UCBT) PUSH #SCUCB ;GET THE UCB SEARCH ADDRESSX50$: CALL @(SP)+ ;GO GET A UCB  BCS 90$ ;ALL DONET CMP R5,R3 ;IS IT THE SAME UCB? BEQ 50$ ;YES, GO GET ANOTHER& PUSH <@KISR6> ;SAVE THE PORT MAPPING0 MOV U.UC2X(R5),@KISR6 ;MAP THE SECOND EXTENSION) MOV 140000+X.UNFL,R1 ;GET THE UNIT FLAGS . MOV 140000+X.MLUN,R4 ;AND THE MULTI-UNIT CODE POP <@KISR6> ;REMAP THE PORT/ CMP R2,R4 ;ARE THE MULTI-UNIT CODES THE SAME?U BNE 50$ ;NO, GO TRY ANOTHERO+ BIT #UF.RMV,R0 ;IS THE ORIGINAL REMOVABLE?  BNE 60$ ;IF NE YESA BIS00ssmkTADATADATADATADATADATA #UU.SIO,U.UTIL(R3) ;SET BIT TO INDICATE DEVICE CAN STALL I/O96 BICB #US.MUN,U.ST2(R3) ;DON'T HAVE DMO ISSUE MESSAGES BR 70$ ;BRANCH AROUND:60$: BISB #US.MUN,U.ST2(R3) ;INDICATE DEVICE IS MULTI-UNIT,70$: BIT #UF.RMV,R1 ;IS THE OTHER REMOVABLE? BNE 80$ ;IF NE YESA BIS #UU.SIO,U.UTIL(R5) ;SET BIT TO INDICATE DEVICE CAN STALL I/O 6 BICB #US.MUN,U.ST2(R5) ;DON'T HAVE DMO ISSUE MESSAGES BR 50$ ;FINISH THE SCANG:80$: BISB #US.MUN,U.ST2(R5) ;INDICATE DEVICE IS MULTI-UNIT BR 50$ ;FINISH THE SCANS590$: POP ;RESTORE IOP, QST, AND END PACKETL .IFF ;D$$DSK - IF TAPE- MOV P.MEDI(R1),U.MEDI(R5) ;SAVE THE MEDIA IDN. MOV P.MEDI+2(R1),U.MEDI+2(R5) ;IT'S TWO WORDS .IFTF ;D$$DSK - BOTH DRIVERS;V>; NOW WE CHECK OUT THE STATUS CODE AND TAKE APPROPRIATE ACTION;U; CALL ENDERR ;TRANSLATE THE MSCP END CODE INTO AN RSX CODE.' PUSH #0 ;PUT A FLAG WORD ON THE STACKG8 MOV P.STS(R1),-(SP) ;PUT THE STATUS IN A TEMPORARY CELL) BIC #^C,(SP) ;GET THE MAJOR CODE;* CMP #ST.AVL,(SP)+ ;WAS IT UNIT AVAILABLE?$ BNE 140$ ;NO, LEAVE THE ERROR CODE;$5; SPECIAL PROCESSING IF THE STATUS WAS UNIT-AVAILABLEM;A2 MOV #IS.SUC,R0 ;RETURN SUCCESS AS THE STATUS CODEB BIT #UU.ATN,U.UTIL(R5) ;WAS THIS A GUS FROM AN ATTENTION MESSAGE? BEQ 170$ ;NOPE, JUST CONTINUEI .IFF ;D$$DSK - TAPE ONLY1 BIT #UU.BLK,U.UTIL(R5) ;SHOULD WE DO THE ONLINE?T BEQ 170$ ;NOPE, JUST CONTINUEP .IFTF ;D$$DSK - BOTH DRIVERS0 INC (SP) ;MARK THE FLAG WORD AS NEEDING AN ONL BR 170$ ;GO FINISH UPP .IFT ;D$$DSK - DISK DRIVER,140$: TST P.STS(R1) ;WAS THE STATUS SUCCESS? BNE 170$ ;NO, FINISH UPS;I<; SPECIAL PROCESSING IF THE STATUS WAS SUCCESS - UNIT ONLINEI; IF THIS IS THE GUS AFTER AN ONL, THEN REQUEST RCT AND RESTART STALL I/O;Q0 BIT #UU.SER,U.UTIL(R5) ;WERE WE IN SERIAL MODE?( BEQ 170$ ;NO, MUST HAVE BEEN AN IO.STC) BITB #US.VV,U.STS(R5) ; IS VOLUME VALID?T% BNE 150$ ; YES. REQUEST RCT TO RUNI9 BIT #UU.IOS,U.UTIL(R5) ; IS I/O STALLED TO THIS DEVICE?B BEQ 170$ ; NOPE, CONTINUE/150$: PUSH ; R1 IS A PARAMETER FOR RQRCTW, CLR R1 ;R1=0 TELLS RCT WE ARE INITIALIZING CALL RQRCTP POP ;RESTORE R1; SEE IF INIT WAS STALLING I/O7 BIT #UU.IOS,U.UTIL(R5) ;IS I/O STALLED TO THIS DEVICE?T BEQ 170$ ;NOPE, CONTINUE0 BIC #UU.IOS,U.UTIL(R5) ;CLEAR THE STALL I/O BIT( BISB #US.VV,U.STS(R5) ;SET VOLUME VALID= PUSH ;SAVE STUFF THAT $DVMSG IS GOING TO WRECKR, MOV #T.NIOR,R0 ;SET THE I/O RESUMED MESSAGE CALL @DVMSG ;GO PRINT IT POP ;GET 'EM BACK;H>; IF SPECIAL ONLINE PUT STATUS CODE IN $SCERR AND CLEAR UU.SPC; >170$: BIC #UU.ATN!UU.SER,U.UTIL(R5) ;EXIT SERIAL AND ATN STATE BIT #UU.SPC,U.UTIL(R5) ;$SCOFL? BEQ 180$ ;IF EQ, NO, MOVB R0,@SCERR ;SET UP ERROR CODE FOR EXEC. BIC #UU.SPC,U.UTIL(R5) ;NOLONGER SPECIAL CASE180$: PUSH <#0> ;NO BYTE COUNT) .IFF ;IF TAPE140$:R<170$: BIC #UU.ATN!UU.SER,U.UTIL(R5) ;CLEAR ATN AND SER FLAGS, BIC #M.DEFM,U.CW2(R5) ;CLEAR DEFAULT FLAGS+ BITB #EF.EOT,P.FLGS(R1) ;EOT ENCOUNTERED ?  BEQ 60$ ;NO. BISB #M.EOT,U.CW2(R5) ;YES, ENCOUNTERED EOT60$:3 BIT #UF.WPH,P.UNFL(R1) ;HARDWARE WRITE-PROTECTED ?E BEQ 70$ ;NO6 BIS #M.HWL,U.CW2(R5) ;YES, HARDWARE WRITE-PROTECTED70$:# BIT #TF.PE,P.FORM(R1) ;1600 BPI ?  BEQ 80$ ;NO& BIS #M.1600,U.CW2(R5) ;YES, 1600 BPI% BR 90$ ;DO NOT CHECK MORE DENSITIES 80$:# BIT #TF.GCR,P.FORM(R1) ;6250 BPI ?U BEQ 90$ ;NO& BIS #M.6250,U.CW2(R5) ;YES, 6250 BPI90$: ;REFERENCE LABEL' CMP #ST.OFL,R0 ;UNIT OFFLINE ?  BNE 110$ ;NO* BIS #M.SER,U.CW2(R5) ;YES, SELECT ERROR110$:: PUSH ;SET IOSB+2 VALUE CMP I.FCN(R3),#IO.STC BEQ 120$; CMP I.FCN(R3),#IO.SMO BEQ 120$A0 MOV U.CW2(R5),(SP) ;VALUE TO BE USED FOR IOSB+2120$:  .ENDC ;D$$DSK/ CALL ENDCMO ;GO FINISH UP, AND COME BACK HEREB$ TST (SP)+ ;SHOULD WE DO AN ONLINE? BEQ 220$ ;NOPE, JUST RETURN6) JMP ONLSIO ;GO ISSUE THE ONLINE COMMANDU5; NO UNIT'S REQUIRE OP.GUS'S - LEAVE THE C1.GUS STATE#190$: / MOV (R2),R300ssrbl ;/*Q.CST*/ ;R3 IS THE CST ADDRESSS% BIC #C1.GUS,(R3) ;LEAVE C1.GUS STATE5 JMP CLACMD ;GOTO CLACMD TO LOOK FOR SOMETHING TO DO);O4; GO BACK TO TOP OF LOOP FOR PROCESSING MORE PACKETS200$:C) CALLV PORT,PKTCH1 ;DO WE HAVE RESOURCES?2% ; ONLY NEED ONE CREDIT SINCE THISG ; IS AN IMMEDIATE CMDH BCS 210$ ;NO RESOURCES, QUIT# JMP 10$ ;WE'RE OK, GO TRY ANOTHERT%210$: ADD #10,SP ;FLUSH THE UCB SCAN 220$: RETURN ;GO HOMEE- .DSABL LSB ;DISABLE LOCAL SYMBOL DEFINITION$ .PAGE .SBTTL LERR - LOG AN ERROR ' .SBTTL CERR - LOG A CONTROLLER ERROR. .IF DF E$$LOG;+-; **- CERR - CONTROLLER ERROR LOGGING ROUTINE;J; THE CONTROLLER ERROR LOGGING ROUTINE WILL CAUSE THE CREATION OF AN ERRORJ; LOG PACKET, COPY THE VALUES OF THE TWO I/O PAGE REGISTERS INTO THE ERRORJ; LOG PACKET AND REQUEST THE ERROR LOGGING SUB-SYSTEM TO CAPTURE THE DATA.; ; INPUTS:T1; R0 = ERROR CODE (IE.FHE FOR CONTROLLER FAILURE)U; R3 = CST ADDRESS; R4 = SCB ADDRESS; R5 = UCB ADDRESS; ; OUTPUTS:; @; THE ERROR (OR TIME OUT) ON THE SPECIFIED CONTROLLER IS LOGGED.;F;- .ENABL LSB CERR:R3 PUSH ;SAVE REGISTERS (WE NEED R0)O# MOV S.KRB(R4),R2 ;GET KRB ADDRESS # MOV K.CSR(R2),R2 ;GET CSR ADDRESST;O$; SET UP CONTROLLER ERROR LOG PACKET;R% MOV #4,C.MLNG(R3) ;SET PACKET LENGTHT, MOVB #-2,C.VCIX(R3) ;SET VIRTUAL CIRCUIT ID& MOVB #20,C.CRED(R3) ;SET CREDIT FIELD$ MOV (R2),C.IP(R3) ;SAVE IP REGISTER% MOV 2(R2),C.SA(R3) ;SAVE SA REGISTER5 MOV #C.IP,R1 ;ADJUST R1 TO ...5 ADD R3,R1 ;... POINT TO CONTROLLER ERROR LOG PACKET , ;THIS IS ADJUSTED LATER TO POINT TO MLNG BR 10$ ;AND LOG ERROR PACKET;+'; **- LERR - UNIT ERROR LOGGING ROUTINE ;RH; THE UNIT ERROR LOGGING ROUTINE WILL CAUSE THE CREATION OF AN ERROR LOGG; PACKET, COPY THE CONTENTS OF THE MSCP ERROR LOG PACKET INTO THE ERRORXJ; LOG PACKET AND REQUEST THE ERROR LOGGING SUB-SYSTEM TO CAPTURE THE DATA.;, ; INPUTS:A;I+; R0 = COMPLETION STATUS (IS.SUC OR IE.XXX)S.; R1 = ADDRESS OF CURRENT RESPONSE RING PACKET; R4 = SCB ADDRESS; R5 = UCB ADDRESS;E ; OUTPUTS:;S,; THE ERROR ON THE SPECIFIED UNIT IS LOGGED.;-LERR:A& PUSH ;SAVE REGISTERS@10$: CLRB S.ROFF(R4) ;ZERO OFFSET TO FIRST REGISTER OF ERROR ... ;... LOG PACKETG4 MOV #MSGLNG,R2 ;GET OFFSET TO BEGINNING OF ENVELOPE0 ADD R1,R2 ;ADD BASE ADDRESS OF RESPONSE PACKET PUSH (R2) ;GET MESSAGE LENGTHU0 ADD #-,(SP) ;ADD EXTRA FOR THE ENVELOPE5 CMP #RSPLNG,(SP) ;DID WE EXCEED MAXIMUM PACKET SIZE?  BHIS 30$ ;IF HIS NO :20$: TST (SP)+ ;PACKET PLUS ENVELOPE EXCEEDS MAXIMUM SIZE" BR 80$ ;EXIT, CAN'T ERROR LOG IT-30$: MOV (SP),R2 ;COPY NUMBER OF BYTES TO R2A@ MOVB (SP)+,S.RCNT(R4) ;SET NUMBER OF REGISTERS TO COPY FOR ... ;... ERROR LOG+ CLR S.PKT(R4) ;ASSUME NO I/O PACKET ACTIVEO0 MOV CREDIT(R1),R0 ;OBTAIN MESSAGE/CREDIT FIELDS3 BIC #^C,R0 ;CLR ALL BUT MESSAGE TYPE FIELDT? CMPB #,R0 ;IS THIS RESPONSE A DATAGRAM PACKET?G BEQ 40$ ;IF EQ Y( MOV P.CRF+2(R1),R3 ;GET THE IOP ADDRESS( BEQ 40$ ;NO PACKET...... NOT POSSIBLE?E BITB #IP.FAK,I.PRM+11(R3);NO, ARE WE DOING AN INTERNAL I/O FUNCTION?P BNE 40$ ;IF EQ YES@ MOV P.CRF+2(R1),S.PKT(R4) ;NO, COPY I/O PACKET ADDRESS FOR ... ;... ERROR LOGGERE ;IS I/O ACTIVE?R BR 50$ ;NO, GO ON TO LOG IT40$: CLR R4 ;NO, CLR R450$: PUSH R1 ;SAVE R1 AGAIN) MOV R2,R1 ;COPY NUMBER OF BYTES INTO R1L;C; INTERFACE TO $LOGER:;S ; INPUTS:N;A,; R1 = LENGTH OF DATA TO BE LOGGED, IN BYTES*; R4 = SCB ADDRESS (ZERO IF NO I/O PACKET); R5 = UCB ADDRESS;P ; OUTPUTS:; ; C = 1 UNABLE TO LOG ERRORW;O; C = 0 ABLE TO LOG ERRORN;0; R1 = ADDRESS OF DATA AREA IN ERROR LOG PACKET#; R3 = ADDRESS OF ERROR LOG PACKET; ; NOTE:R;G; R4 AND R5 ARE PRESERVED!; R0, R2, AND R3 MAY BE DESTROYED0+; KISAR6 IS DESTROYED BY $LOGER ON 11M PLUS1;A* CALL @LOGER ;ATTEMPT TO LOG ERROR PACKET5 BCS 20$ ;EXIT IF WE CAN'T LOG THE ERROR (POP STACK)1, MOV R1,R4 ;COPY R1 INTO R0 FOR DESTINATION3 POP R2 ;REST00ttmkTADATADATADATADATADATAORE POINTER TO MSCP PACKET FOR SOURCED, BCS 80$ ;IF CS, UNABLE TO LOG ERROR PACKET" PUSH R2 ;SAVE DESTROYED REGISTER0 ADD #MSGLNG,R2 ;OFFSET TO BEGINNING OF ENVELOPE- BIC #160000,R2 ;R2 IS ADDRESS IN APR 5 RANGE BIS #120000,R2 ; & MOV U.SCB(R5),R3 ;RESTORE SCB ADDRESS& MOV S.PBIA(R3),R1 ;MAP TO PORT DRIVER CLR R0 ;SETUP FOR "BISB"< BISB S.RCNT(R3),R0 ;SET NUMBER OF REGISTERS (WORDS) TO COPY% MOV @KISR6,R3 ;GET DESTINATION BIASK# PUSH R3 ;MAY BE NEEDED FOR $FNERLD CALL @BLXIO ;MOVE THE DATAO MOV U.SCB(R5),R4 ;R4 IS THE SCB3 MOV S.PBIA(R4),@KISR6 ;MAP APR 6 TO PORT DRIVER ' MOV S.PBIA(R4),@#KINAR6 ; KERNAL DATA 2 POP R3 ;RECOVER MAPPING BIAS FOR ERRORLOG PACKET POP R1 ;RESTORE REGISTER* MOV (SP),R0 ;GET STATUS WHICH CAME IN R0 TST S.PKT(R4) ;IS I/O ACITVE? BNE 70$ ;IF NE YES CLR R4 ;NO, CLR R4 CLR R2 ;DON'T FORGET R2R;S;N; INTERFACE TO $FNERL:;T ; INPUTS:V;I; R0 = FIRST I/O STATUS WORD,; R2 = STARTING AND FINAL ERROR RETRY COUNTS2; R3 = ADDRESS OF ERROR LOG PACKET (BIAS IF MPLUS)*; R4 = SCB ADDRESS (ZERO IF NO I/O PACKET); R5 = UCB ADDRESS;V ; OUTPUTS:;I*; THE SPECIFIED ERROR LOG PACKET IS LOGGED; ; NOTE:E;R; R4 AND R5 ARE PRESERVEDR!; R1, R2, AND R3 MAY BE DESTROYEDU;H870$: CALL @FNERL ;FINISH LOGGING THIS ERROR LOG PACKET,80$: POP ;RESTORE REGISTERS0 MOV S.PBIA(R4),@KISR6 ;MAP APR 6 TO PORT DRIVER' MOV S.PBIA(R4),@#KINAR6 ; KERNAL DATAO RETURN ;EXITN .DSABL LSBO .ENDC .PAGE* .SBTTL MAPD - COROUTINE TO MAP THE PORT( .SBTTL SAVREG - COROUTINE TO SAVE R0-R3;+&; **-MAPD-SAVE AND LATER RESTORE APR 6; R0 IS DESTROYED;-MAPD:K" POP R0 ;REMEMBER WHERE TO RETURN PUSH @KISR6 ;SAVE APR 612 MOV S.PBIA(R4),@KISR6 ;MAP APR 6 TO PORT DRIVER, PUSH @#KINAR6 ;SAVE INSTRUCTION SPACE APR 6: MOV S.PBIA(R4),@#KINAR6 ;FOR I/D SYSTEMS MAP BOTH I AND D- CALL (R0) ;CALL CALLER BACK AS A CO-ROUTINEA; ; COROUTINE RETURN POINT;I. POP @#KINAR6 ;RESTORE INSTRUCTION SPACE APR 6+ POP @KISR6 ;RESTORE PREVIOUS APR6 MAPPINGC RETURN ;RETURN3;+(; **-SAVREG-SAVE AND LATER RESTORE R0-R3;-SAVREG:D. PUSH ;STORE R0 TEMPORARILY ON THE STACK+ MOV 2(SP),R0 ;GET THE RETURN ADDRESS IN R04: POP <(SP)> ;MOVE THE ORIGINAL R0 OVER THE RETURN ADDRESS6 PUSH ;SAVE R1-R3 AND THE RETURN ADDRESS MOV 10(SP),R0 ;RESTORE R02 CALL @(SP)+ ;CALL BACK THE CALLER AS A COROUTINE;; COROUTINE RETURN POINT;) POP ;RESTORE THE REGISTERSA RETURN .PAGE& .SBTTL CMDONL - ISSUE ONLINE COMMANDS;+; **-CMDONL- DEVICE ONLINE;VO; CONTROL IS PASSED TO THIS POINT WHEN AN ONLINE REQUEST IS ISSUED BY THE USER,L; AS IN AN IO.STC COMMANDR;G ; INPUTS:R;D$; R0=ADDRESS OF FUNCTION TABLE ENTRY; R1= ; R2=ADDRESS OF QSTD; R3=ADDRESS OF IOP,; R4=ADDRESS OF SCBH; R5=ADDRESS OF UCBV;( ; OUTPUTS:; IF C1.ONL IS CLEARED THENA;T; R2=ADDRESS OF QSTI; R3=ADDRESS OF IOPE; R4=ADDRESS OF SCB<; R5=ADDRESS OF UCB ; ;-/ONLSIO: MOV (R2),R3 ;MAKE SURE WE HAVE THE CSTE) CALL PIOPAL ;GO GET A PSEUDO I/O PACKETNCMDONL:+ MOV #ONLFUN,R0 ;GET TABLE ENTRY FOR OP.ONLI1 BIS #UU.SER,U.UTIL(R5) ;SERIAL MODE FOR THIS ONET$ CALL CMDCOM ;SET UP COMMAND PACKET! .IF DF T$$APE ;TAPE CONDITIONAL ; /; TAPE SET UP DENSITY AND (USER SETTABLE BITS?)D;S3 BIT #UU.BLK,U.UTIL(R5) ;ONLY 1 DENSITY SUPPORTED?C4 BNE 40$ ;YES. USE 0 (CONTROLLER PICKS DENSITY)' BIT #M.1600,I.PRM(R3) ;YES, 1600 BPI5 BEQ 30$ ;NO " BIS #TF.PE,P.FORM(R1) ;1600 BPI' BR 40$ ;IGNORE NEXT DENSITY CHECK 30$:' BIT #M.6250,I.PRM(R3) ;YES, 6250 BPI  BEQ 40$ ;NOR$ BIS #TF.GCR,P.FORM(R1) ;6250 BPI ?40$: .ENDC ;T$$APE* PUSH #CLACMD ;TRY TO ISSUE MORE COMMANDS1 CALL CMDSEN ;SEND THE COMMAND TO THE CONTROLLERE; ); PROCESS END PACKET FOR OP.ONL - INPUTS:K;U; R1=ADDRESS OF END PKTS; R2=ADDRESS OF QST ; R3=ADDRESS OF (P)IOP; R4=ADDRESS OF SCB; R5=ADDRESS OF UCB);;5; FOR DISK SAVE SOME INFORMATION IN THE UCB EXTENS00 tsrblIONR; * BIC #UU.SER,U.UTIL(R5) ;LEAVE SERIAL MODE .IF DF D$$DSK;.#; SAVE INFORMATION IN UCB EXTENSIONQ;$0 PUSH ;SAVE END PACKET, QST, AND IOP5 MOV #,R0 ;SET NUMBER OF BYTES TO MOVER, MOV R1,R2 ;COPY MSCP PACKET POINTER TO R20 ADD #P.UNSZ,R2 ;UPDATE OFFSET INTO MSCP PACKET* MOV @KISR6,R1 ;GET PACKET'S BASE ADDRESS! SUB #20000,R2 ;BIAS IT PROPERLYE. MOV U.UC2X(R5),R3 ;GET DESTINATION APR6 BIAS4 MOV #X.UNSZ+140000,R4 ;GET DESTINATION DISPLACEMENT CALL @BLXIO ;MOVE THE DATAR, MOV 4(SP),R2 ;RETRIEVE MSCP PACKET POINTER' MOV U.SCB(R5),R4 ;RESTORE SCB ADDRESSS1 MOV P.UNSZ(R2),U.CW3(R5) ;SET UP THE MAX LBN ...A6 MOVB P.UNSZ+2(R2),U.CW2(R5) ;... FOR PROPER OPERATION2 POP ;RESTORE IOP, QST, AND END PACKET .ENDC ;D$$DSK MOV P.STS(R1),R0M( BIC #^C,R0 ;ISOLATE MAJOR CODE( BNE 70$ ;IF NOT SUCCESS, ST.SUC, SKIP;E;; UNIT IS NOW ON-LINE, FIND OUT ABOUT IT BY DOING AN OP.GUSZ;0( MOV (R2),R0 ;/*Q.CST*/ ;R0 IS THE CST' BIS #C1.GUS,(R0) ;ENTER C1.GUS STATE; ;STATE= SERIAL, GUS, RDYM% BIS #UU.SER!UU.GUS!UU.RDY,U.UTIL(R5). BICB #US.SPU,U.STS(R5) ;CLEAR SPINNING UP BIT .IF DF T$$APE;C?; IF TAPE AND IF (IO.STC!IO.SMO) THEN LEAVE THE POWERFAIL STATEQ;  CMP I.FCN(R3),#IO.STC BEQ 60$ CMP I.FCN(R3),#IO.SMO BNE 70$60$: BICB #US.PWF,U.STS(R5) .ENDC ;T$$APE70$: PUSH ;SAVE R1( MOV P.STS(R1),R1 ;R1 IS COMPLETION CODE$ CMP #ST.VOL,R1 ;IS IT A MEDIA ERROR BNE 80$ ;NO. CONTINUEE% MOV #IE.DNR&377,R0 ;DEVICE NOT READY  BR 110$ ;JOIN COMMON CODEGB80$: CMP #ST.OFL,R1 ;IS IT MSCP OFFLINE, WHICH MEANS NO SUCH UNIT? BNE 90$ ;NO. CONTINUEP+ MOV #IE.IDU&377,R0 ;ILLEGAL DEVICE OR UNITF BR 100$ ;JOIN COMMON CODEH90$:# MOV #IS.SUC&377,R0 ;ASSUME SUCCESSS1 BIC #^C,R1 ;ISOLATE MAJOR CODE IS ST.SUC: BEQ 110$ ;IF SUCCESS OK .IF DF D$$DSK 0* CMP #ST.MFE,R1 ;IS IT MEDIA FORMAT ERROR? BNE 95$ ;NO, CONTINUEC2 MOV #IE.BCC&377,R0 ;SET UP FOR MEDIA FORMAT ERROR BR 110$ ;JOIN COMMON CODE  .ENDC ;D$$DSK395$: MOV #IE.OFL&377,R0 ;ELSE SET TO DEVICE OFFLINE M100$: .IIF NDF R$$MPL&T$$APE BISB #US.OFL,U.ST2(R5) ;RSX-11M DISK DRIVER ONLY#110$:3 POP ;RESTORE R10 PUSH <#0> ;ZERO BYTE COUNT FOR ONLINE COMMANDS CALLR ENDCOMA;M .PAGE- .SBTTL PIOPAL - ALLOCATE A PSEUDO I/O PACKETS;+3; **-PIOPAL-ROUTINE TO ALLOCATE A PSEUDO I/O PACKETP;TB; THIS ROUTINE WILL ALLOCATE A PSEUDO I/O PACKET FROM PRIMARY POOL;B ; INPUTS:S;U; R2=ADDRESS OF QSTR; R3=ADDRESS OF CSTO; R4=ADDRESS OF SCB$; R5=ADDRESS OF UCBL;7; ; OUTPUTS:;V; R0-R1 ARE DESTROYEDF; R2-R4-R5 ARE PRESERVED*; R3=PIOP ADDRESS IF SUCESSFULLY ALLOCATED#; C=0 PIOP IS SUCESSFULLY ALLOCATED ; C=1 PIOP CANNOT BE ALLOCATED;-PIOPAL:C1 MOV #18.*2,R1 ;SIZE OF PIOP TO ALLOCATE IN BYTES  PUSH ;SAVE R2& CALL @ALOCB ;ALLOCATE PIOP FROM POOL POP ;RESTORE R2) BCS 30$ ;CANNOT ALLOCATE PIOP - GET OUTK" MOV R0,R3 ;PUT I/O PKT ADD IN R3 PUSH <#18.> ;PACKET LENGTH'20$: CLR (R0)+ ;CLEAR A WORD AT A TIME" DEC (SP) ;ONE LESS WORD TO CLEAR BGT 20$ ;GO DO ENTIRE PACKET TST (SP)+ ;CLEAN UP THE STACKP5 MOVB #IP.FAK,I.PRM+11(R3) ;SET TO 1 TO INDICATE PIOPE% MOV R5,I.UCB(R3) ;SET UP UCB ADDRESSE CLC ;CLEAR CARRYL BR 40$ ;AND EXIT530$: MOV #177773,R3 ;PUT A BAD ADDRESS IN R3 SINCE NO2 ;POOL AVAILABLEC SEC ;SET CARRY 40$: RETURNE .PAGE/ .SBTTL PIOPDE - DEALLOCATE A PSEUDO I/O PACKETR;+5; **-PIOPDE-ROUTINE TO DEALLOCATE A PSEUDO I/O PACKET;::; THIS ROUTINE WILL DEALLOCATE A PSEUDO I/O PACKET. IF THE9; PIOP IS FROM POOL, THEN DEALLOCATE IT FROM SYSTEM POOL,C;; ELSE IT IS FROM THE CST SO JUST MARK THE FIRST WORD AS -1N; TO INDICATE THAT IT IS FREE.;T ; INPUTS:R;E; R1=ADDRESS OF PIOP; R3=ADDRESS OF CST; R4=ADDRESS OF SCBP; R5=ADDRESS OF UCB3;N;N ; OUTPUTS:;V; R0-R1 DESTROYEDE; R2-R5 ARE PRESERVED;.;-PIOPDE:  PUSH ;SAVE R2,R3I/ MOV R1,R0 ;ADD OF PIOP IN POOL TO DEALLOCATE . MOV #18.*2,R1 ;NUMBER OF B00ttmkTADATADATADATADATADATAYTES TO DEALLOCATE CALL @DEACB ;DEALLOCATE PIOPT POP ;RESTORE R3,R2E RETURN ; .PAGE .IF DF,D$$DSKL .SBTTL RECSIO - CONTINUE RECOVERY FROM A CONDITION THAT REQUIRED A RE-SYNCH;+F;**-RECSIO-CONTINUE RECOVERY FROM A CONDITION THAT REQUIRED A RE-SYNCH;DC; AFTER ALL UNITS ARE BROUGT BACK ON-LINE FROM THE TIME-OUT ROUTINEEC; THEN ALL OUTSTANDING I/O IS RE-ISSUED AND C1.REC STATE IS CLEAREDS; ; INPUTS:V;,; R2 ADDRESS OF QST; R3 ADDRESS OF CST; R4 ADDRESS OF SCB ; R5 ADDRESS OF A UCB;R ; OUTPUTS:;3; R2,R3,R4 PRESERVED; R5 IS A UCB ADDRESSS;-RECSIO: D; PROPER OPERATION OF THIS CODE DEPENDS ON THE FACT THAT THIS DRIVERB; ALWAYS TRYS TO START MORE COMMANDS AFTER IT COMPLETES PROCESSING; ANY RECEIVED END PACKETS.L; ?; RECOVERY INVOLVES THREE STAGES AND IS CONTROLLED BY THE STATEE>; BITS C1.R1, C1.R2 AND C1.REC. THE THREE BITS ARE RELATED TO?; THREE PARTS OF RECOVERY; ISSUING ON-LINES, RE-TRYING ON-LINES &; AND RE-ISSUING OUTSTANDING COMMANDS.;F;; C1.R1 IS SET TO INDICATE THAT IT IS TIME TO TRY AND BRING :; "SPINNING UP" UNITS (US.SPU SET) BACK ON-LINE. C1.R1 IS9; CLEARED AFTER UNITS ARE MARKED AS NEEDING TO BE BROUGHTT<; ON-LINE. IF, AFTER ALL ON-LINES COMPLETE, THERE ARE STILL4; UNITS THAT DIDN'T COME READY THE DRIVER WILL SET A:; TIME-OUT. WHEN THE TIME-OUT COMES DUE C1.R1 WILL BE SET<; AND CONTROL WILL TRANSER HERE WHERE WE WILL TRY TO ON-LINE:; THE UNITS AGAIN. THIS BEHAVIOR IS REPEATED UNTIL EITHER/; ALL UNITS ARE READY OR RE-TRYS ARE EXHAUSTED.T;N:; IF POSSIBLE IT WOULD BE BETTER TO HAVE LIMITLESS RE-TRYS7; FOR THE SYSTEM DISK. THIS IS NOT CURRENTLY THE CASE. ;T=; C1.R2 REMAINS SET AS LONG AS THERE ARE STILL UNITS SPINNINGL; UP.N;C=; C1.REC REMAINS SET UNTIL ALL OUTSTANDING COMMANDS HAVE BEENI<; RE-ISSUED AND COMPLETED. THE OLDEST COMMAND MUST COMPLETE>; BEFORE SUBSEQUENT OUTSTANDING COMMANDS ARE RE-ISSUED AND ALLA; RE-ISSUED COMMANDS MUST COMPLETE BEFORE NEW I/O MAY BE STARTED.H;;; IF C1.R1 IS SET THEN MARK UNITS THAT NEED TO COME ON-LINES'; AND GOTO ONLSIO TO START THE COMMANDSS;- BIT #C1.R1,(R3). BEQ 40$ ;THIS SECTION DONE ONLY IF C1.R1 SET/ BIC #C1.R1,(R3) ;CLEAR C1.R1 SO THAT THIS WILLU ;ONLY BE DONE ONCE.C9 MOV #SCUCB,-(SP) ;PUSH "SCAN UCB'S" ROUTINE ON THE STACKB&10$: CALL @(SP)+ ;CALL THE CO-ROUTINE BCS 30$ ;IF CS, ALL DONE1 BITB #US.SPU,U.STS(R5) ;IS THIS UNIT SPINNING UPU BEQ 10$ ;IF NOT, GO AGAINN BIT #UU.SER,U.UTIL(R5)E+ ;ON-LINE IN PROGRESS (FROM ATTEN. MSG)?  BNE 10$ ;IF SO, GO AGAIN* INC U.CNT(R5) ;COUNT THIS ON-LINE ATTEMPT, CMP U.CNT(R5),#120. ;RE-TRY COUNT EXCEEDED? BLE 20$ ;IF LE, NO, TRY AGAINS= BICB #US.SPU,U.STS(R5) ;RE-TRYS EXHAUSTED, CLEAR SPINNING UP # CLR U.CNT(R5) ; AND RE-TRY COUNT.SA BIS #UU.ABO,U.UTIL(R5); REMEMEBER TO ABORT ALL I/O FOR THIS UNITO+ ;OTHERWISE IF THE UNIT SUDDENLY BECOMESU3 ;ON-LINE SUBSEQUENT RE-ISSUED I/O WILL SUCCEED.  BR 10$ ;TRY NEXT UNIT#H20$: BIS #UU.SER!UU.GUS!UU.ATN,U.UTIL(R5) ;GET UNIT STATUS, AND THEN ONL BR 10$ ;GO THROUGH LOOPC030$: BIS #C1.GUS,(R3) ;SET GET UNIT STATUS STATE JMP GUSSIOY;U@; AT THIS POINT C1.R1 IS CLEAR BUT C1.R2 MAY BE SET. C1.R2 WILLC; BE CLEARED WHEN ALL UNITS HAVE BECOME READY AND HAVE BEEN BROUGHTEC; BACK ON-LINE OR WHEN RE-TRYS HAVE BEEN EXHAUSTED. THIS CONDITION -; IS TRUE WHEN US.SPU IS CLEAR FOR ALL UNITS. ;O<; THIS SECTION OF CODE WILL SET A TIME-OUT IF ANY UNITS HAVE=; FAILED TO SPIN UP. AT THE END OF THE TIME-OUT CONTROL WILL5>; TRANSFER TO RECSIO WITH C1.R1 SET SO THAT MORE ON-LINES WILL ; BE TRYED.S;3240$: BIT #C1.R2,(R3) ;IN SECOND STAGE OF RECOVERY?% BEQ 90$ ;IF EQ, NO, TRY THIRD STAGEY, BIC #C1.R2,(R3) ;ASSUME ALL UNITS ARE READY9 MOV #SCUCB,-(SP) ;PUSH "SCAN UCB'S" ROUTINE ON THE STACKE&50$: CALL @(SP)+ ;CALL THE CO-ROUTINE BCS 60$ ;IF CS, ALL DONE1 BITB #US.SPU,U.STS(R5) ;IS THIS UNIT SPINNING UPI BEQ 50$ ;IF NOT, GO AGAINT) BIS #C1.R2,(R3) ;SET C1.R2, NOT DONE YETT BR 50$ ;TRY 00tsrblNEXT UNITC60$: BIT #C1.R2,(R3) ;DONE?E$ BEQ 90$ ;IF EQ, YES, DO NEXT STAGE- TST C.OLHD(R3) ;WAITING FOR I/O TO COMPLETE?) BEQ 70$ ;IF YES, EXITV ;LATER AFTER END PACKETS* ;ARE COMPLETED WE WILL BE CALLED AGAIN( ;AT WHICH TIME WE CAN SET A TIME-OUT ;FOR ON-LINE RE-TRYS RETURN70$:( TST S.BSYU(R4) ;IS A UNIT BUSY ALREADY?( BNE 80$ ;IF NE, YES WE MUST BE WAITING& ;FOR A TIME-OUT SO DON'T RE-SET IT) MOV R5,S.BSYU(R4) ;ELSE, SET A UNIT BUSY1 BISB #US.BSY,U.STS(R5)0+ MOVB #2,S.CTM(R4) ;SET A 2 SECOND TIME-OUTE80$: RETURN ;EXIT ;DF; AT THIS POINT C1.R1 AND C1.R2 MUST BE CLEAR AND IT IS THEREFORE TIME; TO RE-ISSUE I/O.;T90$:* BIC #C1.REC,(R3) ;ASSUME WE ARE FINISHED4 MOV C.REQU(R3),R1 ;R1 IS THE FIRST IOP FROM C.REQU ;ANY I/O TO RESTART?) BEQ 130$ ;NO, THEN SEE IF WE ARE DONE?B' BIS #C1.REC,(R3) ;WE ARE NOT DONE YETS8 CMP R1,C.REDO(R3) ;IS THIS THE OLDEST AT TIME OF FAIL? BEQ 110$ ;IF YES, GO START IT4 TST C.OLHD(R3) ;WE KNOW THE OLDEST HAS STARTED BUT! ;ARE WE STILL WORKING ON IT? * BEQ 100$ ;IF EQ, NO, SO GO CLEAR C.REDO7 CMP C.OLHD(R3),C.REDO(R3) ;ARE WE STILL WORKING ON IT? * BEQ 150$ ;YES, SO WAIT FOR IT TO FINISH:100$: CLR C.REDO(R3) ;OTHERWISE WE MUST HAVE FINISHED THE# ;OLDEST COMMAND SO ITS TIME TO ;FORGET IT.;E$; START PROCESS OF RE-ISSUING AN I/O; R1 IS THE I/O PACKET; R3 IS THE CSTO; R4 IS THE SCBE;D.110$: MOV I.UCB(R1),R5 ;R5 IS THE UCB ADDRESS MOV R3,R00 ADD #C.REQU,R0 ;R0 IS THE POINTER TO THE QUEUE& CALL @QRMVA ;REMOVE THE FIRST ENTRY< BIT #UU.ABO,U.UTIL(R5) ;DID THIS UNIT FAIL TO BECOME READY?+ BEQ 120$ ;IF EQ, NO, GO RE-ISSUE THE I/O % ;OTHERWISE COMPLETE IT AS IE.DNRL" MOV R1,R3 ;R3 IS THE I/O PACKET5 MOV #IE.DNR&377,R0 ;R0 IS IE.DNR (DEVICE NOT READY) " CLR R1 ;R1 IS A ZERO BYTE COUNT CALL ENDCM1 ;COMPLETE THE I/O& BR 90$ ;GO TRY TO START ANOTHER I/O(120$: MOV S.QST(R4),R2 ;RESTORE THE QST& JMP CMDRED ;RESTART ENTRY IN CMDSIO;R,; WE ARE NOT DONE UNTIL I/O'S HAVE COMPLETED; 130$:E+ TST C.OLHD(R3) ;STILL WORKING ON COMMANDS?D BNE 150$ ;YES, JUST EXIT ;ELSE WE ARE DONEQ( CLRB S.CTM(R4) ;STOP TIMER JUST IN CASE# MOV S.BSYU(R4),R1 ;GET UCB ADDRESS  BEQ 140$ ;IF NONE SKIP' BICB #US.BSY,U.STS(R1) ;CLEAR BUSY BITN' CLR S.BSYU(R4) ;CLEAR BUSY UNIT IN SCBC140$:C6 CLR C.REDO(R3) ;FORGET ABOUT OLDEST COMMAND IF IT WAS ;THE ONLY COMMAND % CALLR CLACMD ;START ANY PENDING I/OP)150$: BIS #C1.REC,(R3) ;STILL RECOVERINGE RETURN ;RETURN TO CALLERE .PAGE1 .SBTTL RQRCT - REQUEST REPLACEMENT CONTROL TASKO;+6; **- RQRCT - REQUEST REPLACEMENT CONTROL TASK ROUTINE;C<; THE REQUEST THE REPLACEMENT CONTROL TASK ROUTINE IS CALLED?; TO INITIALIZE THE SPECIFIED UNIT OR TO REPLACE A BAD BLOCK ON ; THE SPECIFIED UNIT.S;Y ; INPUTS:R;S=; R1 = ADDRESS OF CURRENT RESPONSE RING PACKET IF REPLACEMENTM%; OR ELSE ZERO IF INITIALIZATION; R2 = ADDRESS OF THE QSTE; R3 = ADDRESS OF THE IOPE; R4 = ADDRESS OF THE SCB; R5 = ADDRESS OF THE UCB.;. ; OUTPUTS:;Q6; THE REPLACEMENT CONTROL TASK IS REQUESTED TO REPLACE&; THE BAD BLOCK ON THE SPECIFIED UNIT.;E;-RQRCT: ;REF LABEL PUSH ;SAVE R0-R3L0 MOV U.UC2X(R5),@KISR6 ;MAP SECOND UCB EXTENSION+ MOV X.UNFL+140000,R1 ;RETRIEVE UNIT FLAGSY) MOV X.RCTS+140000,R0 ;RETRIEVE RCT SIZE , MOV S.PBIA(R4),@KISR6 ;RESTORE PORT MAPPING# TST R0 ;DOES IT EVEN HAVE AN RCT?= BEQ 20$ ;NOPE, JUST EXIT< BIT #UF.RPL,R1 ;CONTROLLER INITIATED BAD BLOCK REPLACEMENT? BNE 20$ ;IF NE YES TST @RCTPT ;IS RCT INSTALLED?O BNE 40$ ;IF NE YES; MOV #T.NRCT,R0 ;SET MESSAGE "REPLACEMENT CONTROLL TASK ... ;... NOT INSTALLED"10$: CALL @DVMSG ;GO PRINT IT)20$: TST R1 ;WAS THIS ON INITIALIZATION?T+ BEQ 30$ ;YES, DON'T CHANGE THE ERROR CODE 8 MOV #IE.BBE&377,6(SP) ;SET BAD BLOCK ERROR IN STORED R0330$: SEC ;SET CARRY TO INDICATE NO NEED TO REQUESS BR 90$ ;EXIT40$: ;REF LABEL, CMP @RCTPT,I.TCB(R3) ;IS THE I/O FROM RCT? BNE 50$ ;NO, REQUE00%ttmkTADATADATADATADATADATAST RCT CLR R0 ;GET A WORKING REGISTER! MOV 4(SP),R1 ;GET THE END PACKET " BISB P.FLGS(R1),R0 ;GET THE FLAGS) SWAB R0 ;PUT THE FLAGS IN THE HIGH BYTE.; BIS R0,6(SP) ;SET THE FLAG BITS IN THE I/O STATUS ON STACKR BR 30$ ;EXIT-50$: MOV #12.,R1 ;SET LENGTH OF BLOCK NEEDEDE CALL @ALOCB ;GET A CORE BLOCKS BCC 60$ ;IF CC GOT ONE MOV #T.NUER,R0 ;SET MESSAGE BR 10$ ;GO ONO-60$: MOV R0,R3 ;SET ADDRESS OF MESSAGE BLOCKL* TST (R0)+ ;POINT TO SECOND WORD IN BLOCK4 MOV 4(SP),R1 ;DO WE HAVE AN INITIALIZATION REQUEST? BEQ 70$ ;IF EQ YESC MOV P.CRF+2(R1),(R0)+ ;NO, INSERT I/O PACKET ADDRESS (REPLACEMENTA ;REQUIRED INDICATOR)! MOV R5,(R0)+ ;INSERT UCB ADDRESSE6 MOV P.FBBK+2(R1),(R0)+ ;INSERT HI LBN TO BE REPLACED4 MOV P.FBBK(R1),(R0)+ ;INSERT LO LBN TO BE REPLACED+ MOV P.STS(R1),(R0) ;GIVE EVENT CODE TO RCTC BR 80$ ;AND CONTINUE070$: CLR (R0)+ ;INSERT INITIALIZATION INDICATOR! MOV R5,(R0)+ ;INSERT UCB ADDRESST CLR (R0)+ ;CLR LO LBN POSITION CLR (R0)+ ;CLR HI LBN POSITION1 CLR (R0) ;NO EVENT CODE TO RCT (INITIALIZATION)V.80$: MOV R3,R1 ;COPY ADDRESS OF MESSAGE BLOCK) MOV @RCTPT,R0 ;PICK UP RCT'S TCB ADDRESS! CALL @EXRQF ;REQUEST RCT TO RUN+ CLC ;CLR CARRY TO INDICATE RCT REQUESTED /90$: POP ;RESTORE R3,R2,R1 AND R0O RETURN ;EXITV S .ENDC ;D$$DSK  .PAGE; .SBTTL SCUCB - GET ADDR OF NEXT UCB ON CONTROLLERN;+L; ** - SCUCB - SCAN UCB'S ASSOCIATED WITH SPECIFIED CONTROLLER (SCB ADDRESS);O;I ; INPUTS:0; ; R5 = UCB ADDRESS;0 ; OUTPUTS:;D;O; R1=DESTROYED; R4 = SCB ADDRESS; R5 = UCB ADDRESS; CARRY CLEAR=UCB FOUND ; CARRY SET=NO MORE UCBS;-SCUCB:# POP ;RETRIEVE RETURN ADDRESSE PUSH ;SAVE R5 AND R3% MOV U.SCB(R5),R3 ;GET ADDRESS OF SCBE% MOV S.KRB(R3),R3 ;GET ADDRESS OF KRB * ADD K.OFF(R3),R3 ;OFFSET TO THE UCB TABLE610$: CMP #-1,(R3) ;ARE WE AT THE END OF THE UCB TABLE? BEQ 20$ ;IF EQ YES5 MOV (R3)+,R5 ;GET ADDRESS OF NEXT UCB, IS THERE ONE?U BEQ 10$ ;IF EQ NOP3 MOV U.SCB(R5),R4 ;GET ADDRESS OF SCB FOR THIS UNITA# PUSH ;SAVE UCB TABLE POINTER # MOV 2(SP),R3 ;RETRIEVE CALLER'S R3A& CLC ;CLR CARRY TO SHOW WE FOUND ONE! CALL (R1) ;CALL THE CALLER BACKS? POP ;GET RETURN ADDRESS AND POINTER TO NEXT UCB ENTRYE BR 10$ ;TRY THE NEXT UCB20$: ;REF LABEL) POP ;RESTORE ORIGINAL R3 AND R5P3 MOV U.SCB(R5),R4 ;GET ADDRESS OF SCB FOR THIS UNIT2! SEC ;SET CARRY TO SHOW THE ENDA JMP (R1) ;EXIT .PAGE/ .SBTTL TMOGCS - PROCESS END PACKET FROM OP.GCS ;+;;**-TMOGCS-RESPOND TO RECEIPT OF END PKT FOR OP.GCS COMMANDO;E ; INPUTS:S;R"; R1 ADDRESS OF END PKT; R2 ADDRESS OF QST; R3 ADDRESS OF CST;P ; OUTPUTS:;TJ; IF THE COMMAND IS MAKING PROGRESS OR HAS COMPLETED THEN DO NOTHING/; OTHERWISE INITIATE A RE-SYNCHRONIZATIONI;-TMOGCS:P- BIC #C1.TMO,(R3) ;INDICATE OP.GCS COMPLETEDS* MOV P.OTRF+2(R1),R0 ;GET THE IOP ADDRESS, CMP R0,C.OLHD(R3) ;IS IT THE SAME COMMAND?. BNE 30$ ;NO, THE COMMAND MUST HAVE FINISHED/ MOVB I.PRM+11(R0),R0 ;GET THE SEQUENCE NUMBERE1 BIC #^C<17>,R0 ;CLEAR ALL BUT THE LOW FOUR BITST5 CMP R0,P.OTRF(R1) ;BOTH REFERENCE NUMBERS THE SAME?S* BNE 30$ ;NO, COMMAND MUST HAVE FINISHED" TST P.CMST(R1) ;REF NUMBER ZERO?2 BNE 10$ ;NO, WE HAVE TO SEE IF IT MADE PROGRESS3 TST P.CMST+2(R1) ;HOW ABOUT THE OTHER REF NUMBER?33 BEQ 30$ ;IT'S ZERO TOO, THE COMMAND HAS FINISHED 910$: CMP P.CMST+2(R1),C.CMST+2(R3) ;DID IT MAKE PROGRESS?O BHI 20$ ;NO, TIME OUT ERROR BLO 30$ ;YES, JUST RETURN? CMP P.CMST(R1),C.CMST(R3) ;HIGH WORD WAS EQUAL, CHECK LOW WORDA. BLO 30$ ;IF LOWER THEN IT DID MAKE PROGRESS,20$: CALLV PORT,PKTDR ;DEALLOCATE END PACKET# JMP TMOERR ;JMP TO TIME OUT ERRORT830$: MOV P.CMST(R1),C.CMST(R3) ;COMMAND STATUS - PART 16 MOV P.CMST+2(R1),C.CMST+2(R3);COMMAND STATUS - PART 2/ MOVB S.ITM(R4),S.CTM(R4) ;RESET TIMEOUT COUNTO* CALLV PORT,PKTDR ;DEALLOCATE THE PACKET RETURN. .END) ;DID IT MAKE PROG00i-tsrbl .TITLE MSDRV .IDENT /12.01/E;P5; COPYRIGHT (C) 1987 BY DIGITAL EQUIPMENT CORPORATION$;S<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;R; VERSION 12.011;S; PREVIOUSLY MODIFIED BY:;;; B. S. MCCARTHY ; C. SESTOKAS ; ; MODIFIED BY:V;; C SESTOKAS 6-NOV-87E;B6; CS022 -- CORRECT TRPHYS ROUTINE TO HANDLE VECTORED (; I/D AND NON I/D SYSTEMS AT RUN TIME;M .PAGE;R; MACRO LIBRARY CALLS;1 .MCALL ABODF$,CLKDF$,HWDDF$,PKTDF$,UCBDF$,UMDIO$  ABODF$ ;TASK ABORT CODES , CLKDF$ ;CLOCK QUEUE CONTROL BLOCK OFFSETS HWDDF$ ;HARDWARE REGISTERSD PKTDF$ ;I/O PACKET OFFSETSE& UCBDF$ ;UNIT CONTROL BLOCK OFFSETS., UMDIO$ ;USER MODE DIAGNOSITIC DEFINITIONS;.:; BIT DEFINITIONS FOR UCB CHARACTERISTICS WORD # 2 (U.CW2);T1M.PEOV= 100000 ;TAPE PAST LOGICAL END OF VOLUMEE.M.AEOV= 40000 ;TAPE AT LOGICAL END OF VOLUMEM.BOT= 20000 ;TAPE IS AT BOT.M.1600= 4000 ;UNIT IS 1600 BPI PHASE ENCODED"M.HWL= 2000 ;HARDWARE WRITE LOCK M.RWD= 1000 ;UNIT IS REWINDING'M.SER= 400 ;SELECT ERROR HAS OCCURREDD#M.IWR= 200 ;INHIBIT WRITE RETRIES #M.SWL= 100 ;SOFTWARE WRITE LOCKED 3M.TMK= 40 ;ENCOUNTERED TAPE MARK - FWD DIRECTION.T1M.EOT= 20 ;LAST COMMAND ENCOUNTERED END OF TAPE .M.SWAP= 2 ;SWAP BYTES FOR COMPATIBILITY MODE>USRBTS= M.IWR!M.SWL!M.SWAP ;STATUS BITS CONTROLLED BY THE USER>NEWBTS= M.BOT!M.EOT!M.SER!M.HWL!M.1600 ;STATUS TO BE UPDATED..MOVBTS= M.TMK!M.AEOV ;BITS SET BY TAPE MOTION; 9; FLAG BIT DEFINITIONS FOR CONTROLLER STATUS WORD (CSTAT).;=0CS.SER = 40000 ;'SEL ERR' - UNIT OFFLINE STATE.-CS.WSS = 20000 ;WAITING FOR SUB-SYSTEM READYI-CS.TMO = 10000 ;THIS OPERATION HAS TIMED OUT-!CS.NER = 2000 ;NO ERROR RECOVERY !CS.ABO = 1000 ;ABORT IN PROGRESS.#CS.UMD = 200 ;USER MODE DIAGNOSTICT*CS.SFB = 100 ;SPACE FILES VIA SPACE BLKS.'CS.RSP = 40 ;REWIND/SPACE IN PROGRESS.O/CS.LBA = 20 ;LOADING DEVICE MSG BUFFER ADDRESS.'CS.GST = 10 ;DOING GET CHARACTERISTICS %CS.CIP = 1 ;COMMAND IN PROGRESS FLAGR .PAGE; **-DEVICE REGISTER OFFSETS"TSBA= -2 ;BUS ADDRESS REGISTER"TSDB= -2 ;DATA BUFFER REGISTERTSSR= 0 ;STATUS REGISTERO; **-COMMAND PACKET *CMDHDR= 0 ;#1 COMMAND/CONTROL FUNCTION.+CMDB2= 2 ;#2 DT TRFR - LO ORD BUF @ .OR.U ; NDT TRFR - TMK/RCRD CNT.'CMDB3= 4 ;#3 DT TRFR - HI ORD BUF @..%CMDB4= 6 ;#4 DT TRFR - BYTE COUNT.S; **-STATUS REGISTER0TSSRSV= 10 ;SAVED TSSR DEVICE STATUS REGISTER.; **-MESSAGE PACKET=MSGHDR= 12 ;#1 HEADER WORD - MG.ACK=100000 ; ACK BIT,O ; 70000 ; RESERVED,U ; 1400 ; CLASS CODE BITS,' MG.FMT= 340 ; MESSAGE FORMAT BITS,S% MG.COD= 37 ; MESSAGE CODE BITS; MC.END=20 ; END, MC.FAL=21 ; FAIL,= MC.ERR=22 ; ERROR, MC.ATN=23 ; ATTENTION.! MC.LOG=24 ; LOG (NOT USED).T)MSGLGH= 14 ;#2 MESSAGE LENGHT: #3 - #7.F+RBPCR= 16 ;#3 RESIDUAL BYTE/FRAME COUNT.%XST0= 20 ;#4 EXTENDED STATUS REG 0,RXST1= 22 ;#5 1,XST2= 24 ;#6 2,RXST3= 26 ;#7 3.D; **-CHARACTERISTIC PACKET,CHRWD1= 30 ;#1 > MESSAGE PCKT - LO ORD @,,CHRWD2= 32 ;#2 > MESSAGE PCKT - HI ORD @.(CHRWD3= 34 ;#3 MESSAGE PACKET LENGHT,&CHRWD4= 36 ;#4 I/O CHARACTERISTICS:, CH.ESS=200 ; STOP - TMK/TMK, (UNLABELLED, CH.ENB=100 ; STOP - BOT/TMK. TAPE)+ CH.EAI= 40 ; ENABLE ATTENTION INTERRUPT.N/ CH.ERI= 20 ; ENABLE MSG BUFFER RLS INTRUPTS.A .PAGE;; XST0 BIT DEFENITIONS;T$X0.TMK= 100000 ;TAPE MARK DETECTED$X0.RLS= 40000 ;RECORD LENGTH SHORT$X0.LET= 20000 ;LOGICAL END OF TAPE#X0.RLL= 10000 ;RECORD LENGTH LONG X0.WLE= 4000 ;WRITE LOCK ERROR'X0.NEF= 2000 ;NON-EXECUTABLE FUNCTION X0.ILC= 1000 ;ILLEGAL COMMAND X0.ILA= 400 ;ILLEGAL ADDRESS+X0.MOT= 200 ;TAPE MOTION ON LAST COMMAND.0X0.ONL= 100 ;ON LINEX0.IE= 40 ;INTERRUPT ENABLEBX0.VCK= 20 ;VOLUME CHECK#X0.PED= 10 ;* PHASE ENCODED DRIVEN ;* NOT USED - TK25.SX0.WLK= 4 ;WRITE LOCKX000i5ttmkTADATADATADATADATADATA.BOT= 2 ;BEGINNING OF TAPE!X0.EOT= 1 ;END OF TAPE DETECTEDH;T; XST1 BIT DEFENITIONS;EX1.DLT= 100000 ;DATA LATEC; 40000 ;NOT USED.#X1.COR= 20000 ;* CORRECTABLE DATA  ;** NOT USED - TK25."X1.CRS= 10000 ;* CREASE DETECTED ;** NOT USED - TSV05, TU80. X1.TIG= 4000 ;* TRASH IN GAP,X1.NER= 4000 ;* TK25 - NOISE DURING ERASE.$X1.DBF= 2000 ;* DESKEW BUFFER FAILX1.SCK= 1000 ;* SPEED CHECK;% ;** NOT USED - TK25, TSV05, TU80. !X1.RBE= 400 ;! READ BUS PAR ERR ;!! NOT USED - TK25, TS11.!X1.IPR= 200 ;* INVALID PREAMBLEX1.SYN= 100 ;* SYNCH ERROR% ;** NOT USED - TK25, TSV05, TU80.0!X1.TN3= 200 ;$ TAPE TRACK #3. \*.X1.TN2= 100 ;$ | | #2. \ TK25 ONLY.!X1.TN1= 40 ;$ | | #1. / X1.TN0= 20 ;$ TAPE TRACK #0. /!X1.IPO= 40 ;% INVALID POSTAMBLER ;%% NOT USED - TK25, TSV05.R X1.IED= 20 ;* INVALID END DATAX1.POS= 10 ;* POSTAMBLE SHORT $X1.EW= 10 ;* TK25 - EARLY WARNING.X1.POL= 4 ;* POSTAMBLE LONG % ;** NOT USED - TK25, TSV05, TU80.TX1.UNC= 2 ;UNCORRECTABLE DATAE X1.MTE= 1 ;% MULTI-TRACK ERROR ;%% NOT USED - TSV05, TK25.5;0; XST2 BIT DEFENITIONS;R'X2.OPM= 100000 ;OPERATION IN PROGRESS %X2.SIP= 40000 ;* TS11-SILO PAR ERR,|,X2.RCE= 40000 ;* TSV05 - RAM CHECKSUM ERR,.X2.DCF= 40000 ;* TK25 - COMMUNICATION FAULT. ;**NOT USED - TU80.I.X2.BPE= 20000 ;* SERIAL BUS PAR ERR AT DRIVE)X2.DHF= 20000 ;* TK25 - HARDWARE FAULT.  ;** NOT USED - TSV05, TU80.E.X2.SPD= 10000 ;* TK25 - CAPSTAN SPEED ERROR. ;** NOT USED - TSV05, TU80.(X2.TU8= 4000 ;"1"-TU80 IDENTIFICATION.&X2.TK2= 1000 ;"TK25" IDENTIFICATION. ; UNIT BIT 9, 11 ; TS11 0 0 UNIBUS ; TSV05 0 0 Q BUS* ; TU80 0 1 UNIBUS ; TK25 1 0 Q22/UNIBUS& ; TSU05 1 1 TSV05 FOR UNIBUS$X2.WCF= 2000 ;* WRITE CARD FAILURE ;* NOT USED - TK25. 6X2.DTK= 777 ;* TS11/TU80 DATA TRFR: DEAD TRKS P,7-0.) ;* TS11/TU80 WRT CHAR: MICROCODE REV.2* ;* TS11 STATUS: RES CAPSTAN TIC COUNT. ;* TU80 STATUS: 0'S.2X2.REV= 377 ;* TSV05 WRT CHAR: 200 - XND FTR SW,+ ;* 100 - BUFF SW, 77 - MICROCODE REV. " ;* TSV05 DATA TRF/STATUS: 0'S.0X2.EAD= 377 ;* TK25 - ERROR ADDRESS (LO BYTE).2X2.XFS= 200 ;* TK25 - WRT CHAR: XTND FEATURE SW,#X2.MCD= 177 ; MICROCODE REV.;F; XST3 BIT DEFENITIONS;U8X3.MEC= 177400 ;TS11/TSV05/TU80 MICRO-DIAG ERROR CODE.1X3.EAD= 177400 ;TK25 - ERROR ADDRESS (HI BYTE).A%X3.LMX= 200 ;* TAPE LIMIT EXCEEDED. # ;** NOT USED - TK25/TSV05/TU80.T#X3.OPI= 100 ;OPERATION INCOMPLETEW#X3.REV= 40 ;TAPE MOVED BACKWARDS.1)X3.CRF= 20 ;* CAPSTAN RESPONSE FAILURE.T0X3.TCH= 20 ;* TK25 - NO TACHOMETER INDICATION. ;** NOT USED - TSV05, TU80.X.X3.DCK= 10 ;TS11/TSV05/TU80 - DENSITY CHECK.*X3.STP= 10 ;TK25 - SERVO STRIPE FAILURE.'X3.NOI= 4 ;* NOISE - COULD NOT ERASE.4#X3.LXS= 2 ;* REACHED TAPE LIMITS.R% ;** NOT USED - TK25, TSV05, TU80.AX3.RIB= 1 ;REVERSE INTO BOT  .PAGE;I; TSSR BIT DEFINITIONS; "SR.SC= 100000 ;SPECIAL CONDITION'SR.UPE= 40000 ;* UNIBUS PARITY ERROR A*SR.SPE= 20000 ;* SERIAL BUS PARITY ERROR" ;* NOT USED - TK25/TSV05/TU80..SR.RMR= 10000 ;REGISTER MODIFICATION REFUSED#SR.NXM= 4000 ;NON-EXISTENT MEMORYS#SR.NBA= 2000 ;NEED BUFFER ADDRESSPSR.A17= 1000 ;BA 17RSR.A16= 400 ;BA 16SR.SSR= 200 ;SUB-SYSTEM READY!SR.OFL= 100 ;DEVICE IS OFF LINER'SR.FC1= 40 ;* FATAL ERROR CLASS BIT 1'SR.FC0= 20 ;* FATAL ERROR CLASS BIT 0I ;* NOT USED - TK25.%SR.TC2= 10 ;TERMINATION CLASS BIT 2N$SR.TC1= 4 ;TERMINATION CLASS BIT 1$SR.TC0= 2 ;TERMINATION CLASS BIT 07SR.TCN= SR.TC2!SR.TC1!SR.TC0 ;TERMINATION CLASS NUMBER.0;GF; TSDBX REGISTER - BYTE REGISTER AT THE TSSR HIGH BYTE; Q22 BUS ONLY.;0;DBX.BT= 20 ;BOOT TAPE - TSDBX DBX.BT '1' AND TSSR SSR '1': 3 ; REWINDS THE TAPE TO BOT, SKIPS THE FIRST TAPE 02 ; RECORD AND READS THE FIRST 512. BYTES OF THE 9 ; SECOND TAPE RECORD TO MEMORY STARTING AT LOCATION 0. ,00i=tsrbl ; TSSR SSR REMAINS CLEARED UNTIL THE BOOT 4 ; SEQUENCE HAS COMPLETED OR A DEVICE ERROR OCCURS. .PAGE; -; COMMAND PACKET HEADER WORD - BIT DEFENITION!;T!CM.ACK= 100000 ;ACKNOWLEDGE BIT#CM.CVC= 40000 ;CLEAR VOLUME CHECK CM.OPP= 20000 ;OPPOSITE BITOCM.SWB= 10000 ;SWAP BYTEST!CM.MOD= 7400 ;COMMAND MODE BITS CM.RTY= 1000 ;RETRY MODE BIT.B*CM.RVS= 400 ;REVERSE DIRECTION MODE BIT.CM.IE= 200 ;INTERRUPT ENABLECM.COD= 37 ;COMMAND CODE BITSM#CM.LOW= 3 ;LOW HALF OF CODE BITS.S.CM.NML= CM.IE!CM.ACK ;NORMAL COMBO. OF FLAGS.;H; COMMAND PACKET HEADER WORD;C)CC.RDN= 0001!CM.NML ;READ NEXT (FORWARD)D-CC.RDP= 0401!CM.NML ;READ PREVIOUS (REVERSE)N:CC.RRP= 1001!CM.NML ;REREAD PREVIOUS (SPACE REV,READ FWD)7CC.RRN= 1401!CM.NML ;REREAD NEXT (SPACE FWD, READ REV)M+CC.WRC= 0004!CM.NML ;WRITE CHARACTERISTICS CC.WRD= 0005!CM.NML ;WRITE DATA=CC.WDR= 1005!CM.NML ;* WRITE RETRY (BCKSPC, ERASE, RE-WRITE)M,CC.WSM= 0006!CM.NML ;WRITE SUBSYSTEM MEMORY+CC.SRF= 0010!CM.NML ;SPACE RECORDS FORWARD +CC.SRR= 0410!CM.NML ;SPACE RECORDS REVERSEK-CC.STF= 1010!CM.NML ;SKIP TAPE MARKS FORWARDD-CC.STR= 1410!CM.NML ;SKIP TAPE MARKS REVERSEE"CC.RWD= 2010!CM.NML!CM.CVC ;REWIND%CC.WTM= 0011!CM.NML ;WRITE TAPE MARK)CC.ERS= 0411!CM.NML ;ERASED;CC.WTR= 1011!CM.NML ;- WTMK RETRY (BCKSPC, ERASE, RE-WTMK)R-CC.UNL= 0412!CM.NML!CM.CVC ;REWIND AND UNLOAD&CC.DRI= 0013!CM.NML ;DRIVE INITIALIZE*CC.GST= 0017!CM.NML ;GET STATUS IMMEDIATE2CC.MST=CC.GST!CM.CVC ;MOUNT & SET CHARACTERISTICS .PAGE;O>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);C,CSTAT: .BLKW T$$S11 ;CONTROLLER STATUS WORD)CMDPTR: .BLKW T$$S11 ; > COMMAND PACKET.02INTADD: .BLKW T$$S11 ; > I/O INTERRUPT SERVICING.;SSRRTY: .BLKW T$$S11 ; > I/O RESUMPTION - SUBSYSTEM READY.M8TMOCNT: .BLKW T$$S11 ;SAVED I/O TIMEOUT, (UNIT OFFLINE)(RTYINT: .BLKW T$$S11 ;SAVED INTADD(R3),?CMDSAV: .BLKW T$$S11 ;SAVED COMMAND - WHILE REQUESTING STATUS.M=RTTBL: .BLKW T$$S11 ;RTRY CNT: +0-RTRYS LEFT, +1-TOTAL RTRYSE=RCVCNT: .BLKW T$$S11 ;RECOVERY COUNT - RECOVERY RTRYS (LEFT)M";CLEAN TAPE - PARAMETER SAVE AREA:&CMDPK1: .BLKW T$$S11 ;CMD PKT WRD #1,&CMDPK2: .BLKW T$$S11 ;CMD PKT WRD #2,&CLNRTN: .BLKW T$$S11 ;RCVRY INTRPT @.5CLNCNT= SPCNT ;TAPE CLN CNT - INIT REV/FWD SPC CNT.M3CLNED= SPACED ;CURRENT (CLEAN) BLOCK SPACE COUNT.F$SPCNT: .BLKW T$$S11 ;SPACING COUNT..SPACED: .BLKW T$$S11 ;SPACED (VIA TMK) COUNT.>PRVDIR: .BLKW T$$S11 ;LO BYTE - PREV TAPE DIR:EQ/FWD,NEQ/REV.3 ;HI BYTE - TAPE DIR (WRT,WTMK,RD):EQ/FWD,NEQ/REVR-DEVTYP: .BLKW T$$S11 ;LO BYTE - NE IF TK25, T! ;HI BYTE - NE IF TSV05/TSU05. 1WRTOVR= 32. ; REWRITE WRITE/WTMK UP TO 64 TIMES ( ; FOR MAX EXTENDED IBG UP TO 20 FT.&RDOVR= 40. ; REREAD UP TO 40 TIMES -+REREAD= 8. ; CLEAN TAPE AFTER 8 REREADS. &RDTMO= 12. ; READ TIMEOUT - 12. SEC.0CLNTMO= 2 ; CLEAN TAPE SUBCYCLE TIME - 2 SEC.1CLNCYC= 15. ; CLEAN TAPE - UP TO 15 SUBCYCLES.S!VC$MS = 0 ; Vectored MS driver.E .PAGE; EXECUTIVE VECTOR AREA,4EXEVEC: .WORD 0 ; IF NE - vectors already filled in.DVERR: .WORD $DVERR ; Vectored NDVMSG: .WORD $DVMSG ; Exec FORK: .WORD $FORK ; referencesGTPKT: .WORD $GTPKT ;XHFMSK: .WORD $HFMSK ; IOALT: .WORD $IOALT ; (filledEIODON: .WORD $IODON ; in by SCMOF: .WORD $SCMOF ; MSDRV 1CRPAS: .WORD $CRPAS ; code $DVTMO: .WORD $DVTMO ; at MSKRB)MPUBM: .WORD $MPUBM ; STMAP: .WORD $STMAP ;5FMSK2: .WORD $FMSK2 ; SFRK: .WORD S.FRK ;rSPKT: .WORD S.PKT ;TSCTM: .WORD S.CTM ;XSITM: .WORD S.ITM ; SSTS: .WORD S.STS ;lSST2: .WORD S.ST2 ;DSKRB: .WORD S.KRB ;EXEVCL=<<<.-EXEVEC>/2>-1>$; Driver SCB reference patch table. ;DD; The driver uses this patch table when it is called for the first B; controller on-line request. The driver initially contains SCB ;; offset references of the form S.Vzzz located at Rzzzx. D; The contents of these references are replaced at driver assembly L; time with the value -1 (promote crashes if th00iEttmkTADATADATADATADATADATAe vectoring isn't complete).S.VCSR = 177777 S.VOWN = 177777.S.VFRK = 177777RS.VPKT = 177777 S.VCTM = 177777S.VITM = 177777CS.VSTS = 177777rS.VST2 = 177777eS.VKRB = 177777DK.VOWN = 177777sK.VCON = 177777lB; After the driver is LOAded and called for the first controller B; on-line request, the driver replaces these SCB references withE; the vectored equivalents from the driver's Executive vector area.l;d ; Example:s;l); Previous code: MOV S.ITM(R4),S.CTM(R4)h;i,; Vectored code: MOV S.VITM(R4),S.VCTM(R4)+; RITMx=.-4 ; xth occurence of S.VITM and .7; RCTMy=.-2 ; yth occurence of S.VCTM in this driver.S;1/; For this vectored code, this table contains:N; .WORD RITMx,S.ITM7; .WORD RCTMy,S.CTMi; SCBPAT: .WORD RPTK1,SPKT .WORD RPKT2,SPKT .WORD RPKT3,SPKT, .WORD RCTM1,SCTMs .WORD RCTM2,SCTMe .WORD RCTM3,SCTMt .WORD RCTM4,SCTMo .WORD RCTM5,SCTMu .WORD RITM1,SITM .WORD RITM2,SITMl .WORD RITM3,SITM  .WORD RITM4,SITM( .WORD RITM5,SITMe .WORD RITM6,SITM( .WORD RITM7,SITMR .WORD RITM8,SITMr .WORD RITM9,SITM. .WORD RITM10,SITM .WORD RITM11,SITM .WORD RITM12,SITM .WORD RSTS1,SSTSt .WORD RSTS2,SSTSl .WORD RSTS3,SSTSW .WORD RSTS4,SSTS  .WORD RSTS5,SSTSi .WORD RSTS6,SSTSR .WORD RSTS7,SSTSD .WORD RSTS8,SSTSD .WORD RSTS9,SSTSD .WORD RSTS10,SSTS .WORD RSTS11,SSTS .WORD RSTS12,SSTS .WORD RST21,SST2D .WORD RKRB1,SKRBD# .WORD 0 ; Patch table terminator.O .PAGE; ; DRIVER DISPATCH TABLEO;R9 DDT$ MS,T$$S11,,,,NEW ;Generate driver dispatch table.T;T!; TERMINATION CODE DISPATCH TABLE1;IERJTBL: .IRPC X,<01234567> .WORD TCL'X'ERO .ENDM;t; VALID FUNCTION TABLE;D* .MACRO FUNCT FCN, HCC, EXT, TMO, INT, ADR .WORD IO.'FCN ;QIO REQUEST.D" .WORD CC.'HCC ;HARDWARE COMMAND.$ .BYTE EXT ;I/O TIMEOUT ITERATIONS.# .BYTE TMO ;I/O TIMEOUT - SECONDS.S/ .WORD I'INT ;REQUEST INTERRUPT ENDUP ROUTINE.0. .WORD P'ADR ;REQUEST PRE-PROCESSING ROUTINE. .ENDM FUNCT5VFTBL: FUNCT RLB,RDN,1,RDTMO,OCOM,READ ;READ FORWARDi4 FUNCT WLB,WRD,1,12.,OCOM,WRITE ;WRITE LOGICAL BLOCK5 FUNCT RLV,RDP,1,RDTMO,OCOM,READ ;READ REVERSE8 FUNCT EOF,WTM, 1,4,ODON,WRTMK ;WRITE TAPE MARK* FUNCT RWD,RWD,255.,2,RWDU,REWND ; REWIND: FUNCT RWU,UNL, 1,2,RWDU,UNLOD ;REWIND AND UNLOAD0 FUNCT SPB,SRF,250.,6,SPCB,SPACE ; SPACE BLOCKS/ FUNCT SPF,STF,250.,6,SPCF,SPACE ; SPACE FILESR3 FUNCT STC,MST,2.,2.,STAT,SET ;SET CHARACTERISTICSE6 FUNCT SEC,GST,2.,2.,STAT,GSTAT ;SENSE CHARACTERISTICS: FUNCT SMO,MST,2.,2.,MOUNT,SET ;MOUNT/SET CHARACTERISTICS+ FUNCT ERS,ERS,1,12.,ODON,WRTMK ;ERASE TAPETEVFTBL:E; ; MESSAGE HEADER TABLE;E0MESSAG: .IRP X, .WORD MC.'X .ENDM .PAGE;++; **-MSINI- INITIATE MAG TAPE I/O OPERATION ;WB; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/OA; REQUEST IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO.E; PROPAGATE THE EXECUTION OF THE DRIVER. IF THE SPECIFIED CONTROLLERE>; IS NOT BUSY, THEN AN ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O<; REQUEST. ELSE A RETURN TO THE CALLER IS EXECUTED. IF THE?; DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPERATION IST6; INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.; ; INPUTS:I; <; R5 = ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;R ; OUTPUTS:;O<; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST:; IS WAITING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED%; AND THE I/O OPERATION IS INITIATED.E;-;+;; THE FOLLOWING REGISTERS ARE RETURNED BY THE GTPKT$ MACRO:E;S&; R1=ADDRESS OF THE I/O REQUEST PACKET,; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB; R3=CONTROLLER INDEXA(; R4=ADDRESS OF THE STATUS CONTROL BLOCK9; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATEDO;H; I/O REQUEST PACKET FORMAT:;T&;I.LNK WD. 00 = I/O QUEUE THREAD WORD.,;I.PRI WD. 01 = REQUEST PRIORITY (LOW BYTE)..;I.EFN WD. 01 = EVENT FLAG NUMBER (HIGH BYTE).9;I.TCB WD. 02 = ADDRESS OF THE TCB OF THE REQUESTOR 00iMtsrblTASK.A;I.LN2 WD. 03 = POINTER TO 2ND LUN WORD IN REQUESTOR TASK HEADER.SG;I.UCB WD. 04 = CONTENTS OF 1ST LUN WORD IN REQUESTOR TASK HEADER (UCB)E>;I.FCN WD. 05 = I/O FUNCTION CODE (IO.RLB/IO.RWD/IO.SPB/ETC.).5;I.IOSB WD. 06 = VIRTUAL ADDRESS OF I/O STATUS BLOCK.E5;IOSB+2 WD. 07 = RELOCATION BIAS OF I/O STATUS BLOCK.T@;IOSB+4 WD. 10 = I/O STATUS BLOCK ADDRESS (DISPLACEMENT+140000).7;I.AST WD. 11 = VIRTUAL ADDRESS OF AST SERVICE ROUTINE.H; ;E:; READ/WRITE LOGICAL FUNCTION DEPENDENT I/O PACKET FORMAT:;G;I.PRM WD. 12 = HIGH 2 BITS (BITS 4 & 5) OF 18 BIT DATA BUFFER ADDRESS.B:;PRM+2 WD. 13 = LOW 16 BITS OF 18 BIT DATA BUFFER ADDRESS.2;PRM+4 WD. 14 = NUMBER OF BYTES TO BE TRANSFERRED.;PRM+6 WD. 15 = NOT USED. ;PRM+10 WD. 16 = NOT USED.;PRM+12 WD. 17 = NOT USED.F;PRM+14 WD. 20 = RELOCATION BIAS OF DIAGNOSTIC REGISTER BLOCK ADDRESS.A;PRM+16 WD. 21 = DIAG. REG. BUFFER ADDRESS (DISPLACEMENT+140000).D;S;F?; BLOCK AND FILE SPACING FUNCTIONS DEPENDENT I/O PACKET FORMAT:E;ND;I.PRM WD. 12 = SPACING COUNT (POSITIVE=FORWARD, NEGATIVE=BACKWARD).;PRM+2 WD. 13 = NOT USED.B;PRM+4 WD. 14 = NOT USED.T;PRM+6 WD. 15 = NOT USED.R;PRM+10 WD. 16 = NOT USED.F;PRM+12 WD. 17 = RELOCATION BIAS OF DIAGNOSTIC REGISTER BLOCK ADDRESS.A;PRM+14 WD. 20 = DIAG. REG. BUFFER ADDRESS (DISPLACEMENT+140000).O;PRM+16 WD. 21 = NOT USED.;LG; (MOUNT AND) SET CHARACTERISTICS FUNCTION DEPENDENT I/O PACKET FORMAT.08; FOR SENSE CHARACTERISTICS, I.PRM (WD. 12) IS NOT USED:;I);I.PRM WD. 12 = NEW CHARACTERISTICS WORD.C;PRM+2 WD. 13 = NOT USED.,;PRM+4 WD. 14 = NOT USED.2;PRM+6 WD. 15 = NOT USED.4;PRM+10 WD. 16 = NOT USED.;PRM+12 WD. 17 = NOT USED.;PRM+14 WD. 20 = NOT USED.;PRM+16 WD. 21 = NOT USED.;IB; WREOF, REWIND, AND UNLOAD FUNCTIONS DEPENDENT I/O PACKET FORMAT:;D;I.PRM WD. 12 = NOT USED.O;PRM+2 WD. 13 = NOT USED..;PRM+4 WD. 14 = NOT USED.R;PRM+6 WD. 15 = NOT USED.E;PRM+10 WD. 16 = NOT USED.F;PRM+12 WD. 17 = RELOCATION BIAS OF DIAGNOSTIC REGISTER BLOCK ADDRESS.A;PRM+14 WD. 20 = DIAG. REG. BUFFER ADDRESS (DISPLACEMENT+140000)..;PRM+16 WD. 21 = NOT USED.;-7MSINI: GTPKT$ MS,T$$S11 ;GET NEXT I/O PACKET TO PROCESSN& CLR CSTAT(R3) ;CLEAR CONTROLLER FLAGS' CLR RCVCNT(R3) ;NOT IN ERROR RECOVERY.W) CLRB PRVDIR+1(R3) ;ASSUME FWD DIRECTION.K CLR R0 ;LABELLED BITB #US.LAB,U.STS(R5) ; TAPE?. BNE 20$ ;IF NE, YES.2 BIS #CH.ESS!CH.ENB,R0 ;STOP TMK/TMK .OR. BOT/TMK.%20$: MOV CMDPTR(R3),R2 ;CMDPTR SETUP?7 BEQ GCR ;IF EQ, NO.I* CMP R0,CHRWD4(R2) ;CHAR PCKT PER REQUEST?) BNE GCR ;IF NE, CHANGE CHARACTERISTICS.E<30$: BIT #SR.NBA,@S.CSR(R4) ;COMMUNICATING WITH TAPE SYSTEM? BNE GCR ;IF NE, NO. 0ILDBA: MOV S.VPKT(R4),R1 ;RELOAD PACKET POINTER. RPTK1=.-2R. MOV #VFTBL,R2 ;POINT AT VALID FUNCTIONS TABLE0 MOV I.FCN(R1),R0 ;GET FUNCTION CODE FROM PACKET) BIT #IQ.X,R0 ;ERROR RECOVERY PROHIBITED?2 BEQ 50$ ;IF EQ NOS+ BIS #CS.NER,CSTAT(R3) ;CORRESPONDING FLAG.) BIC #IQ.X,R0 ;AND CLEAR BIT FOR COMPARE.B/50$: BITB #IQ.UMD,R0 ;DIAGNOSTIC FUNCTION CALL?K BEQ 60$ ;IF EQ NOG- BIS #CS.UMD,CSTAT(R3) ;COPY DIAGNOSTIC FLAG#- BIC #IQ.UMD,R0 ;CLEAR BIT FOR FUNCTION CHECKE(60$: CMP R0,(R2)+ ;FUNCTION CODES MATCH? BEQ 70$ ;IF EQ YES' ADD #10,R2 ;POINT TO NEXT TABLE ENTRY2 CMP #EVFTBL,R2 ;END OF TABLE? BNE 60$ ;IF NE NOG1 MOV #IE.IFC&377,R0 ;SET UP ILLEGAL FUNCTION CODER BR ALT ;GO TO EXIT)70$: MOV (R2)+,R1 ;R1 - I/O COMMAND CODE. 3 MOVB (R2)+,S.VSTS(R4) ;SET EXTENDED TIMEOUT VALUER RSTS1=.-202 MOVB (R2)+,S.VITM(R4) ;SET INITIAL TIMEOUT VALUE RITM1=.-2N- MOV (R2)+,INTADD(R3);STORE INTERRUPT ADDRESSA5 CALLR @(R2) ;GO TO PRE-PROCESSING FOR THIS FUNCTION:;+); **-GCR-GENERATE CHARACTERISTICS ROUTINEI;Q-; SETUP HARDWARE/SOFTWARE COMMUNICATIONS .OR.0; MODIFY DEVICE LEOV DETECTION CHARACTERISTICS.;-$GCR: MOVB #2,S.VITM(R4) ;SET TIMEOUT RITM2=.-2B+ BIS #CS.LBA,CSTAT(R3) ;SET WRITE CHAR FLAG  MOV R5,R1 ;R1 >" ADD #U.VCB+4,R1 ; DEVICE PKT AREA BIC #3,R1 ; ON MOD4 BOUNDARY. CMP R1,R2 ;PKT AREA SETUP? I BEQ 10$ ;IF EQ, YES. MOV R1,00iUttmkTADATADATADATADATADATAR2 ;R2 >I MOV R1,CMDPTR(R3) ; PKT AREA."10$: ADD #MSGHDR,R1 ;R1 > MSG PKT.; SETUP CHARACTERISTIC PACKET ' CLR -(SP) ;CLEAR HI-ORD ADDRESS AREA.( MOV R1,-(SP) ;PUSH ADDRESS TO TRANSLATE0 CALL TRPHYS ;TRANSLATE TO PHYSICAL (IF NEEDED); MOV (SP)+,CHRWD1(R2) ;STORE CHARACTERISTICS PACKET ADDRESS=+ MOV (SP)+,CHRWD2(R2) ; AND HI-ORD ADDRESS.F) MOV #14.,CHRWD3(R2) ;MSG BUF - 14. WRDS,; MOV R0,CHRWD4(R2) ;DEVICE CHAR.& ADD #CHRWD1-MSGHDR,R1 ;R1 > CHAR PKT.; SETUP COMMAND PACKET$ MOV #CC.WRC,CMDHDR(R2) ;WRITE CHAR,' CLR -(SP) ;CLEAR HI-ORD ADDRESS AREA.R( MOV R1,-(SP) ;PUSH ADDRESS TO TRANSLATE0 CALL TRPHYS ;TRANSLATE TO PHYSICAL (IF NEEDED): MOV (SP)+,CMDB2(R2) ;STORE CHARACTERISTICS PACKET ADDRESS* MOV (SP)+,CMDB3(R2) ; AND HI-ORD ADDRESS. MOV #10,CMDB4(R2) ;4 WORD TRFR. JMP INITIO ;START I/O+ .PAGE;+-; PRE-PROCESSING ROUTINES FOR I/O OPERATIONSS;U ; INPUTS:S; R1 = HARDWARE FUNCTION CODEC; R3 = CONTROLLER INDEX,; R4 = SCB ADDRESS; R5 = UCB ADDRESS;- .ENABL LSBC;D ; WRITE DATA;,3PWRITE: CMP U.CNT(R5),#14. ;ENOUGH BYTES FOR WRITE?P BHIS 75$ ;IF HIS YES TST U.CNT(R5) ;IS IT MAX COUNT? BEQ 75$ ;IF EQ YES0 MOV #IE.SPC&377,R0 ;SET UP PARAMETER ERROR CODE BR ALT ;GO TO EXIT;R; WRITE TAPE MARKR;.(PWRTMK: CLR U.CNT(R5) ;INSURE COUNT IS 0275$: MOV #WRTOVR*2,RTTBL(R3) ;SETUP ERROR RECOVERY* MOVB RTTBL(R3),RTTBL+1(R3) ; RETRY COUNT.2 BIT #M.SWL,U.CW2(R5) ;(USER) DISABLED WRITING? BEQ PIOCOM ;IF EQ NO1 MOV #IE.WLK&377,R0 ;SET UP WRITE LOCK ERROR CODEA BR ALT ;GO TO EXIT;(; READ FWD/REV;T-PRDREV: INCB PRVDIR+1(R3) ;REVERSE DIRECTION.T1PREAD: MOV #RDOVR,RTTBL(R3) ;SETUP ERROR RECOVERY#* MOVB RTTBL(R3),RTTBL+1(R3) ; RETRY COUNT. BR PIOCOM ; . . CONT.R;R; SPACE BLOCKS AND SPACE FILES;.2PSPACE: MOV #IS.SUC&377,R0 ;ASSUME 0 SPACING COUNT4 MOV U.BUF(R5),U.CNT(R5) ;PUT SPACING COUNT IN PLACE2 MOV U.BUF(R5),SPCNT(R3) ;REMEMBER SPACING COUNT.( BEQ ALT ;IF EQ NO I/O NEEDED (U.BUF=0)/ BMI 90$ ;IF MI SPACE REVERSE (U.BUF=NEGATIVE) BIT #M.AEOV,U.CW2(R5) ;AT EOV?D BEQ 80$ ;IF EQ, NO. . MOV #IE.EOV&377,R0 ;SET UP END OF VOLUME CODE)ALT: CALL @IOALT ;TERMINATE THIS REQUEST) JMP MSINI ; AND SERVICE OTHER REQUESTS.580$: BITB #US.LAB,U.STS(R5) ;SPACING LABELLED TAPE? F BNE 100$ ;IF NE, YES.* BIT #M.BOT,U.CW2(R5) ;SPACING FROM BOT? BNE 100$ ;IF NE, YES.& CMP #CC.SRF,R1 ;SPACING RECORDS FWD? BEQ 100$ ;IF EQ, YES.5 MOV #^C<0>,U.CNT(R5) ;SETUP MAX BLK SPACING COUNT, + CLR SPACED(R3) ; NO TMKS SPACED YET AND#. BIC #CC.STF-CC.SRF,R1 ; SPACING VIA BLOCKS.8 BIS #CS.SFB,CSTAT(R3) ;SPACING FILES VIA SPACE BLOCKS. BR 100$990$: BIS #CC.SRR-CC.SRF,R1 ;MAKE CMND SPACE/SKIP REVERSEE# NEG U.CNT(R5) ;MAKE COUNT POSITIVE5A100$: BIS #CS.RSP,CSTAT(R3) ;SET "REWIND/SPACE IN PROGRESS" FLAGO BR PIOCOM .DSABL LSB ;?-; (MOUNT AND) SET CHARACTERISTICS, GET STATUS;;C6PSET: BIC #USRBTS,U.CW2(R5) ;CLEAR USER SETTABLE BITS4 BIC #^C,U.BUF(R5) ;REMOVE NON-SETABLE BITS.3 BIS U.BUF(R5),U.CW2(R5) ;UPDATE USER SETABLE BITS.,; 4; GET STATUS (SENSE (MOUNT AND) SET CHARACTERISTICS);L3PGSTAT: BIS #CS.GST,CSTAT(R3) ;SET GET STATUS FLAG.R BR PUNLOD ; . . CONT.I;E ; REWIND TAPET;)5PREWND: BIS #M.RWD,U.CW2(R5);SET TAPE REWINDING FLAG. < BIS #CS.RSP,CSTAT(R3) ;SET "REWIND/SPACE IN PROGRESS" FLAG; ; UNLOAD TAPE ;R(PUNLOD: CLR U.CNT(R5) ;INSURE COUNT IS 0 BR PIOCM1 ;PREPROCESS REQUEST. .PAGE;B&; I/O OPERATION COMMON PRE-PROCESSING;E,PIOCOM: MOV #IE.ABO&377,R0 ;ABORT REQUEST?- BITB #US.PWF,U.STS(R5) ;PWFLD INDICATOR SET?A BNE ALT ;IF NE, YES./PIOCM1: MOV CMDPTR(R3),R2 ;R2 > COMMAND BUFFER.U, MOV R1,(R2)+ ;LOAD COMMAND HEADER IN BUFFER. BIC #^C,R1 ;ISOLATE COMMAND CODE BITS& CMP R1,#CC.GST&CM.COD ;SENSE REQUEST? BEQ 110$ ;IF EQ, YES.E< BIC #M.PEOV!M.AEOV,U.CW2(R5) ;M.PEOV/M.AEOV PER END STATUS.5110$: CMP R1,#CC.SRF&CM.COD ;FILL IN COMPLETE PACKET?U BHIS 130$ ;IF HIS NO; DATA TRANSFER REQUESTC, BIT #M.SWAP,U.CW2(R5)00i]tsrbl ;SWAP BYTES ON DATA? BEQ 120$ ;IF EQ NO6 BIS #CM.SWB,-2(R2) ;SET SWAP BITS BYTE IN HEADER WORD*120$: BIT #DV.EXT,U.CW1(R5) ;22 BIT Q BUS? BNE 125$ ;IF NE, YES.)$ CALL @STMAP ;SET UP UNIBUS MAPPING MOV R2,-(SP) ;SAVE R2% CALL @MPUBM ;MAP UNIBUS TO TRANSFERC MOV (SP)+,R2 ;RESTORE R204125$: MOV U.BUF+2(R5),(R2)+ ;SET UP LO 16 ADDR BITS.% BIT #DV.EXT,U.CW1(R5) ;22 BIT Q BUS?1 BEQ 127$ ;IF EQ, UNIBUS.# MOVB U.BUF+1(R5),(R2)+ ;SET UP HI  CLRB (R2)+ ; 6 ADDR BITS.# BR 130$ ; . . CONT.Y1127$: MOV U.BUF(R5),(R2) ;SET UP HI 2 ADDR BITS2 ASR (R2) ;AND MOVE FROMA ASR (R2) ;BITS 4 AND 5 ASR (R2) ;TO ASR (R2)+ ;BITS 0 AND 1F5130$: MOV U.CNT(R5),(R2) ;LOAD BYTE/RECORD/FILE COUNTR .PAGE;+; INITIATE I/O OPERATION;U ; INPUTS:E;; COMMAND PACKET SETUP.0;2; R3 = CONTROLLER INDEX ; R4 = SCB ADDRESS; R5 = UCB ADDRESS;-3INITIO: MOVB S.VITM(R4),S.VCTM(R4) ;START THE TIMERV RITM3=.-4, RCTM1=.-2  MTPS #PR5 ;INHIBIT INTERRUPTSS) MOV S.CSR(R4),R2 ;;;RETREIVE CSR ADDRESS. TSTB (R2) ;;;SUBSYSTEM READY?B BPL 140$ ;;;IF PL NO' CLR -(SP) ;CLEAR HI-ORD ADDRESS AREA.(2 MOV CMDPTR(R3),-(SP) ;;;PUSH ADDRESS TO TRANSLATE2 CALL TRPHYS ;;;TRANSLATE TO PHYSICAL (IF NEEDED)0 MOV (SP)+,R1 ;;; SETUP CMD PKT PHYS @ BITS 15-2( BIS (SP)+,R1 ;;; AND BITS 17,16 IN R1. MOV R1,TSDB(R2) ;;; START I/O. 3 BIS #CS.CIP,CSTAT(R3) ;;;SET COMMAND IN PROGRESS M BR 150$ ;;;EXITE%140$: MOVB #4,S.VCTM(R4) ;;;SET TIMER5 RCTM2=.-2T+ BIS #CS.WSS,CSTAT(R3) ;;;SET WAITING FLAGD. MOV #INITIO,SSRRTY(R3) ;;;SET RETURN ADDRESS&150$: MTPS #0 ;;;ALLOW INTERRUPTS AND& RETURN ;EXIT WHILE I/O IN PROGRESS. .PAGE;+"; **-MSCAN- CANCEL I/O ENTRY POINT;A-; ACTIVE I/O REQUESTS ARE MARKED FOR ABORT - ;C; THE I/O REQUEST WILL THEN END NORMALLY AS A RESULT OF INTERRUPT NB; SERVICING .OR. END ABNORMALLY VIA THE TIMEOUT (MSOUT:) ROUTINE.;C ; INPUTS:R ; R0 = ACTIVE I/O PACKET ADDRESS; R1 = CURRENT TCB ADDRESS; R3 = CONTROLLER INDEXB; R4 = SCB ADDRESS; R5 = UCB ADDRESS;-4MSCAN: CMP I.TCB(R0),R1 ;;;IS THIS THE CORRECT TASK? BNE 10$ ;;;IF NE NOP< BIS #CS.ABO!CS.NER,CSTAT(R3) ;ABORT REQUEST - NO ERR RCVRY.10$: RETURN ;;;RETURNY;+!; **-MSPWF- POWERFAIL ENTRY POINTD;R9; US.PWF SET TO DISALLOW NORMAL QIO REQUESTS EXCEPT FOR -R-; IO.RWD, IO.RWU, IO.SMO, IO.SEC AND IO.STC.O;LH; SUCCESSFUL IO.RWD, IO.RWU, IO.SMO RESET US.PWF AND ALLOW QIO REQUESTS.;T ; INPUTS: ; R3 = CONTROLLER INDEX; R4 = SCB ADDRESS; R5 = UCB ADDRESS;-/MSPWF: BCS 10$ ;IF CS, CONTROLLER POWER FAIL. / BISB #US.PWF,U.STS(R5) ; ELSE, UNIT POWER FAILN ; DISALLOW NORMAL QIO'S. BIT #HF.UBM,@HFMSK ;UMRS?R BNE 10$ ;IF NE - MAPPED @.* BIS #DV.EXT,U.CW1(R5) ;ELSE - PHYSICAL @. 10$: RETURNT .PAGE;+; **-MSOUT- TIMEOUT ENTRY POINTR; C; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING TERMINATED.,A; IF THE OPERATION WAS DIAGNOSTIC, THE QIO REQUEST IS TERMINATED. B; TIMEOUTS ARE USUALLY CAUSED BY POWER FAILURE BUT MAY ALSO BE THE>; RESULT OF HARDWARE CONSIDERATIONS. IN PARTICULAR, A LENGTHY<; SPACING OPERATION OR A REWIND ON THIS MODEL TAPE DRIVE MAY,; RESULT IN A TIMEOUT WHICH WILL BE IGNORED.;$ ; INPUTS: ; R0 = LITERAL CONSTANT IE.DNR; R2 = CSR ADDRESS; R3 = CONTROLLER INDEX; R4 = SCB ADDRESS; R5 = UCB ADDRESS;- .ENABL LSBR4MSOUT: BIT #CS.ABO,CSTAT(R3) ;;;BEEN TOLD TO ABORT? BNE 10$ ;;;IF NE YES - ABORT4 BIT #CS.SER,CSTAT(R3) ;;;'SEL ERR' - UNIT OFFLINE? BNE 10$ ;;;IF NE, YES.8 BIT #CS.WSS,CSTAT(R3) ;;;WAITING FOR SUB-SYSTEM READY? BNE 30$ ;;;IF NE YES0 BIT #CS.RSP,CSTAT(R3) ;;;REWIND/SPACE TIMEOUT? BNE 40$ ;;;IF NE YES4 BIS #CS.TMO,CSTAT(R3) ;;;FLAG TIMEOUT BEING LOGGED# CALL MSDTER ;;;LOG DEVICE TIMEOUT=10$: MTPS #0 ;LOWER PRIORITY / BIT #M.SER,U.CW2(R5);SELECT ERROR IN PROGRESS?- BNE NORDY ;IF NE YESMSOUT1: CLR R1 ;CLEAR R1B CALLR IODON ;AND EXIT1*30$: TSTB (R2) ;;;IS THE SUBSYSTEM READY? BPL 40$ ;;;IF PL NO - INCB S.VSTS(R4) ;;;INSURE CONTROLLER IS BUSYS RSTS2=00iettmkTADATADATADATADATADATA.-2;- BIC #CS.WSS,CSTAT(R3) ;;;CLEAR WAITING FLAG  MTPS #0 ;;;LOWER PRIORITY)# CALLR @SSRRTY(R3) ;RETRY OPERATION 540$: DECB S.VSTS(R4) ;;;SUBSYSTEM RECOVERY TIMED OUT?E RSTS3=.-2C3 BEQ 10$ ;;;IF EQ YES, RETURN WITH DRIVE NOT READYW+ MOVB S.VITM(R4),S.VCTM(R4) ;;;START TIMERR RITM4=.-4S RCTM3=.-2Y RETURNY .DSABL LSB  .PAGE;+; **-NORDY-TAPE UNIT NOT READY;:@; ISSUE 'SEL ERR' MESSAGES AT 15 SEC INTERVALS FOR OFFLINE UNITS;; .OR. END THE REQUEST FOR USER CONTROL PARAMETERS OR ACP.B; 1; INPUTS: R3 - CNTRL INDX, R4 > SCB, R5 > UCB. ;-BNORDY: BIT #CS.NER!CS.UMD!CS.ABO,CSTAT(R3) ;USER CNTRL PARAMETERS? BNE 10$ ;IF NE, YES.Y TST U.ACP(R5) ;ACP REQUEST?Q BEQ 20$ ;IF EQ, NO.410$: MOV RTYINT(R3),INTADD(R3) ;INTADD PER REQUEST,& MOV #IE.DNR&377,R0 ; DRIVE NOT READY JMP IODON ; AND END REQUEST.-20$: CMP #NORD1,INTADD(R3) ;M.SER FIRST TIME?S BEQ NORDY0 ;IF EQ, NO.50;SAVE CMD HDR WRD .AND. SETUP FOR SENSE REQUEST." MOV CMDPTR(R3),R2 ;R2 > CMD PKT./ MOV (R2),CMDSAV(R3) ;SAVE CMD PKT HDR WRD ANDC2 MOV #CC.GST,(R2) ; SETUP CMD PKT FOR SENSE RQST.1 MOVB S.VITM(R4),TMOCNT(R3) ;SAVE REQUEST TIMEOUTF RITM5=.-4T< MOVB S.VSTS(R4),TMOCNT+1(R3) ; AND TIMEOUT ITERATION COUNT. RSTS4=.-4N. MOVB #2,S.VITM(R4) ;SETUP SENSE I/O TIMEOUT. RITM6=.-2N/ MOVB #1,S.VSTS(R4) ;FAKE END OF 15 SEC CYCLE.: RSTS5=.-2N7 MOV INTADD(R3),RTYINT(R3) ;SAVE REQUEST ENDUP ADDR AND8 MOV #NORD1,INTADD(R3) ; AND RETURN HERE AFTER SNS RQST.1 BIS #CS.SER,CSTAT(R3) ;'SEL ERR' - UNIT OFFLINE.S&TIME: DECB S.VSTS(R4) ;END OF 15 SEC? RSTS6=.-2C BNE TIMER ;IF NE, NO.( MOV #T.NDSE,R0 ;R0='SEL ERR' MSG CODE . CALL @DVMSG ; AND ISSUE 'SEL ERR' MESSAGE.0 MOVB #15.,S.VSTS(R4) ;15 SEC 'SEL ERR' TIMEOUT RSTS7=.-2T9TIMER: MOVB #1,S.VCTM(R4) ; CHECKED AT 1 SEC INTERVALS.VV RCTM4=.-2E RETURN57; RETURN FROM **-NORDY SENSE REQUEST INTRPT SERVICINGE;QA; INPUTS: R2 > CMD PKT, R3 - CNTRL INDX, R4 > SCB, R5 > UCB.R%NORD1: BIT #M.SER,U.CW2(R5) ;OFFLINE?E BNE TIME ;IF NE, YES./; ONLINE - SETUP CMD PKT AND ISSUE I/O REQUEST.* BIC #CS.SER,CSTAT(R3) ;NOT OFFLINE STATE./ MOV CMDSAV(R3),(R2) ;RESTORE CMD PKT HDR WRD,U4 MOV RTYINT(R3),INTADD(R3) ; INTERRUPT SERVICE ADDR,0 MOVB TMOCNT(R3),S.VITM(R4) ; TIMEOUT COUNT AND RITM7=.-2E: MOVB TMOCNT+1(R3),S.VSTS(R4) ; TIMEOUT ITERATION COUNT. RSTS8=.-2O5NORDY0: JMP INITIO ;GET STS .OR. RE-ISSUE I/O RQST.2 .PAGE;+(; **-$MSINT- SERVICE DEVICE INTERRUPTS. ;-6 INTSE$ MS,PR5,T$$S11 ;;;SAVE REGISTERS & SET PRIORITY/ BIT #CS.CIP,CSTAT(R4) ;;;COMMAND IN PROGRESS?E BNE 5$ ;;;IF NE YEST! RETURN ;;;NO, IGNORE INTERRUPTA*5$: CALL @FORK ;;;CREATE A SYSTEM PROCESS" MOV R4,R3 ;COPY CONTROLLER INDEX& MOV U.SCB(R5),R4 ;PICK UP SCB ADDRESS# MOV CMDPTR(R3),R2 ;R2 > CMD PCKT.0 MOV @S.CSR(R4),TSSRSV(R2) ;SAVE DEVICE STATUS.( MOV TSSRSV(R2),R1 ;R1 - DEVICE STATUS. MOV (R2),-(SP) ;(SP) -' BIC #^C,(SP) ; COMMAND CODE.I>;STATUS/WRITE CHAR DON'T RETAIN PREVIOUS TAPE MARK INDICATION.) CMP (SP),#CC.GST&CM.COD ;SENSE REQUEST?) BEQ 15$ ;IF EQ, YES.. CMP (SP),#CC.WRC&CM.COD ;WRITE CHAR REQUEST? BEQ 15$ ;IF EQ, YES. 6 BITB #US.LAB,U.STS(R5) ;(NO LEOV FOR) LABELLED TAPE? BNE 8$ ;IF NE, YES.4 BIT #X3.REV,XST3(R2) ;(NO LEOV FOR) TAPE MOVED REV? BNE 8$ ;IF NE, YES., BIT #X0.LET,XST0(R2) ;HARDWARE DETECT LEOT? BNE 7$ ;IF NE, YES.3 BIT #M.BOT!M.TMK,U.CW2(R5) ;BOT .OR. TMK PREV I/O?O BEQ 8$ ;IF EQ, NO.T<;PEOV IF PREV BOT/TMK .OR. TMK/TMK WITHOUT INTERVENING BLKS.$ BIT #X0.TMK,XST0(R2) ;TMK THIS I/O? BEQ 8$ ;IF EQ, NO.C$ CMP (SP),#CC.RDN&CM.COD ;READ FWD? BNE 6$ ;IF NE, NO.E' CMP RBPCR(R2),CMDB4(R2) ;DATA ON READ?E# BEQ 117$ ;IF EQ, NO - TMK/TMK.I*6$: CMP (SP),#CC.SRF&CM.COD ;SPACING FWD? BNE 8$ ;IF NE, NO.E MOV CMDB2(R2),R0 ;R0 - 0 DEC R0 ; I/O SPACE COUNT-1./ CMP RBPCR(R2),R0 ;SPACED OVER TMK, NO DATA?. BNE 8$ ;IF NE, NO.V0117$: TSTB PRVDIR(R3) ;TAPE PREVIOUS DIRECTION? BNE 8$ ;IF NE, REVE00imtsrblRSE.*7$: BIS #M.PEOV,U.CW2(R5) ;TAPE PAST LEOV BR 9$ ; AND TMK INDICATION.)8$: BIT #M.PEOV,U.CW2(R5) ;PREVIOUS PEOV?B BNE 10$ ;IF NE, YES.C& BIC #M.TMK,U.CW2(R5) ;ASSUME NOT TMK.) MOV (R2),R0 ;R0 - BIT8:CMND MODE REV, M8 BIC #CM.NML!^C<777>,R0 ;BIT7-5:PKT FMT, BIT4-0:CMD CODE& CMP #410,R0 ;SPACE REVERSE REQUEST?+ BEQ 10$ ;IF EQ, YES - NO TMK INDICATION.R BIT #X0.TMK,XST0(R2) ;TMK? BEQ 10$ ;IF EQ, NO.%9$: BIS #M.TMK,U.CW2(R5) ; ELSE, TMK.I510$: CLRB PRVDIR(R3) ;ASSUME TAPE FORWARD DIRECTION.P) BIT #X3.REV,XST3(R2) ;FORWARD DIRECTION?A BEQ 15$ ;IF EQ, YES. - INCB PRVDIR(R3) ; ELSE - REVERSE DIRECTION.$!15$: TST (SP)+ ;MAINTAIN STACK.(. BIC #NEWBTS,U.CW2(R5) ;STATUS TO BE UPDATED.% BIT #X0.PED,XST0(R2) ;1600 BPI MODE?R BEQ 20$ ;IF EQ, NO.1 BIS #M.1600,U.CW2(R5) ; ELSE 1600 BPI (PE) MODE.20$: BIT #X0.BOT,XST0(R2) ;BOT?N BEQ 30$ ;IF EQ, NO.! BIS #M.BOT,U.CW2(R5) ; ELSE BOT.,30$: BIT #X0.EOT,XST0(R2) ;EOT?E BEQ 50$ ;IF EQ, NO.! BIS #M.EOT,U.CW2(R5) ; ELSE EOT.C(50$: BIT #X0.WLK,XST0(R2) ;WRITE LOCKED? BEQ 60$ ;IF EQ, NO.* BIS #M.HWL,U.CW2(R5) ; ELSE WRITE LOCKED.60$: BIT #SR.OFL,R1 ;ONLINE?  BEQ 70$ ;IF EQ, YES.#/ BIS #M.SER,U.CW2(R5) ; ELSE SEL ERR - OFFLINE.0)70$: MOV #IS.SUC&377,R0 ;ASSUME SUCCESS.;, BIC #^C,R1 ;R1 - TERMINATION CODE.6 CMPB MSGHDR(R2),MESSAG(R1) ;MESSAGE MATCH TERM CODE? BEQ 80$ ;IF EQ, YES.#, MOV #SR.TC2!SR.TC1,R1 ; ELSE TERM CODE = 6.480$: JMP @ERJTBL(R1) ;SERVICE INTRPT PER TERM CODE. .PAGE;+(; SERVICE INTERRUPT PER TERMINATION CODE;LA; R0 - IS.SUC&377 R1 - TERM CODE R2 - > COMMAND PACKETL2; R3 - CNTRLR INDX R4 - > SCB R5 - > UCB;-); TERMINATION CODE 0 - NORMAL TERMINATIONR7TCL0ER: BIT #CS.LBA,CSTAT(R3) ;WRITTEN CHARACTERISTICSB BEQ TCEXIT ;IF EQ NO, EXIT*; TERMINATION CODE 1 - ATTENTION CONDITION9TCL1ER: BIC #CS.LBA,CSTAT(R3) ;CLEAR BUFFER ADDRESS FLAG2' CLR DEVTYP(R3) ;DETERMINE DEVICE TYPE.P MOV XST2(R2),R1 ;R1 - XSTAT2.4 BIC #^C,R1 ;R1 - DEVICE IDENTIFIER. CMP #X2.TK2,R1 ;TK25? BNE 10$ ;IF NE, NO.T# INC DEVTYP(R3) ;DEVICE TYPE - TK256 MOVB #UD.8K,U.CW3+1(R5) ; AND UPDATE DENSITY SUPPORT. BR 30$N)10$: TST R1 ;TS11/TSV05 .OR. TU80/TSU05?  BNE 20$ ;IF NE, TU80/TSU05.  BIT #HF.UBM,@HFMSK ;UMRS? BNE 30$ ;IF NE, THEN TS11. BR 25$ ; .. CONT.I20$: CMP #X2.TU8,R1 ;TU80? BEQ 30$ ;IF EQ, YES.225$: INCB DEVTYP+1(R3) ;DEVICE TYPE - TSV05/TSU05.%30$: JMP ILDBA ;PROCESS QIO REQUEST.T(; TERMINATION CODE 2 - TAPE STATUS ALERT"TCL2ER: BIT #M.EOT,U.CW2(R5) ;EOT? BEQ 10$ ;IF EQ NOT CMPB #CC.WRD,(R2) ;WRITE DATA?T BEQ 5$ ;IF EQ YESC CMPB #CC.WTM,(R2) ;WTMK?T BEQ 5$ ;IF EQ YES CMPB #CC.ERS,(R2) ;ERASE? BNE 10$ ;IF NE NOE*5$: MOV #IE.EOT&377,R0 ;SET EOT FOR RETURN BR TCEXIT ;END REQUEST.E%10$: BIT #X0.TMK,XST0(R2) ;TAPE MARK?: BEQ 20$ ;IF EQ NO?( MOV #IE.EOF&377,R0 ;ENDING STATUS - EOF BR TCEXIT ; AND END REQUEST..20$: BIT #X0.RLL,XST0(R2) ;RECORD LENGHT LONG? BEQ TCEXIT ;IF EQ NO$ MOV #IE.DAO&377,R0 ;SET RECORD LONG BR TCEXIT ;PROCESS COMPLETIONT&; TERMINATION CODE 3 - FUNCTION REJECT6TCL3ER: BIT #CS.GST,CSTAT(R3) ;GET STATUS IN PROGRESS? BNE TCEXIT ;IF NE YES) BIT #M.SER,U.CW2(R5) ;OFFLINE?$ BEQ 10$ ;IF EQ NO; CALLR NORDY ;YES, HANDLE IT 410$: BIT #X0.VCK!X0.ILC!X0.ILA,XST0(R2) ;HARD ERROR? BNE FATAL ;IF NE YES FATAL+ BIT #M.HWL,U.CW2(R5) ;DEVICE WRITE LOCKED?T BEQ TCEXIT ;IF EQ NO# MOV #IE.WLK&377,R0 ;SET WRITE LOCKG,TCEXIT: JMP @INTADD(R3) ;GOTO REQUEST ENDUP. FATAL: JMP TCL6ER ;FATAL ERROR. .PAGE<; TERMINATION CODE 4 - RECOVERABLE ERROR: TAPE MOVED 1 BLOCKTCL4ER: TSTB DEVTYP(R3) ;TK25? BEQ 2$ ;IF EQ, NO. MOV (R2),R1 ;R1 - I/O  BIC #^C<17>,R1 ; COMMAND CODE.B CMP #5,R1 ;WRITE TO TAPE?R BEQ 1$ ;IF EQ, YES.! CMP #11,R1 ;WTMK OR ERASE TAPE?( BNE 2$ ;IF NE, NO.-1$: BIT #X1.EW,XST1(R2) ;TK25 EW WRITE ERROR? $ BNE 3$ ;IF NE, YES - DON'T LOG IT.'2$: CALL MSDVER ;LOG THE DEVICE ERROR.L:3$: BIT #CS.NER!CS.UMD,CST00iuttmkTADATADATADATADATADATAAT(R3) ;ERR RECOVERY INHIBITED?$ BNE 30$ ;IF NE, YES - END REQUEST.+ MOV (R2),R0 ;RETRIEVE COMMAND HEADER WORDM- BIC #^C<6437>,R0 ;R0 - CMND MODE, CMND CODE.+ TST RCVCNT(R3) ;SETUP FOR ERROR RECOVERY?  BNE 20$ ;IF NE, YES. CMPB #1,R0 ;READ?1 BEQ 10$ ;IF EQ, YES. CMPB #5,R0 ;WRITE? BEQ 5$ ;IF EQ, YES.S CMPB #11,R0 ;WTMK?& BNE FATAL ;IF NE, I/O NOT RETRIABLE.25$: BIT #M.IWR,U.CW2(R5) ;(USER) INHIBIT XND GAPS? BNE 30$ ;IF NE, YES.310$: BIS #CM.RTY,(R2) ;I/O REQUEST - RETRY COMMAND.)+ MOV #REREAD,RCVCNT(R3) ;ASSUME READ RETRY.  CMPB #1,R0 ;I/O= READ? BEQ 20$ ;IF EQ, YES., MOV #WRTOVR*2,RCVCNT(R3) ;ELSE, WRITE/WTMK.20$: CMPB #1,R0 ;READ?V BEQ 22$ ;IF EQ, YES. BIT #M.EOT,U.CW2(R5) ;EOT?E BEQ 22$ ;IF EQ, NO.E. CMPB #WRTOVR,RTTBL(R3) ;RECOVERY - NGT 10 FT? BHIS 22$ ;IF HIS, NO.S9 MOVB #WRTOVR,RTTBL(R3) ;ERR RCVRY - NGT 10 FT AFTER EOT.L;SETUP FOR ERROR RECOVERY.#22$: DECB RTTBL(R3) ;RETRY FURTHER?  BEQ PARERR ;IF EQ, NO.!25$: DEC RCVCNT(R3) ;REISSUE I/O?A BNE AGAIN ;IF NEQ, YES.3 CMPB #1,R0 ;READ? *30$: BNE PARERR ;IF NE, NO - END REQUEST.;CLEAN TAPE ON READ. TSTB DEVTYP(R3) ;TK25?M, BNE AGAIN ;IF NE, NO TAPE CLEAN FOR TK25S.3CLEAN: MOV INTADD(R3),CLNRTN(R3) ;RCVRY ISR RETURN,Q* MOV #CLNISR,INTADD(R3) ;CLEAN ISR RETURN.' MOV (R2),CMDPK1(R3) ;CMD PKT HDR WRD,V+ MOV 2(R2),CMDPK2(R3) ; DATA TRFR LO BUF @.T1 MOV #5,CLNCNT(R3) ;IF READ FWD, BCKSPC 5 BLOCKS.B% TSTB PRVDIR+1(R3) ;READ FWD REQUEST?F BEQ 27$ ;IF EQ, YES.* DEC CLNCNT(R3) ;READ REV - BCKSPC 4 BLKS,427$: MOV #CC.SRR,(R2) ;TAPE CLEAN (BCKSPC OVER CLNR)5CLNSET: MOV CLNCNT(R3),CMDB2(R2) ; AND SPACING COUNT.R. BEQ FWDPOS ; IF EQ, Repositioned for RD FWD. CLR CLNED(R3) ;NONE SPACED YET.4CLNAGN: MOVB #CLNTMO,S.VITM(R4) ;CHECK SUBCYCLES AND RITM8=.-2T, MOVB #CLNCYC,S.VSTS(R4) ; SUBCYCLE TIMEOUT. RSTS9=.-2C BR AGAIN ; .. CLEAN TAPE. #CLNISR: MOV CMDB2(R2),-(SP) ;UPDATEK# SUB RBPCR(R2),(SP) ; BLOCKS SPACEDE ADD (SP)+,CLNED(R3) ; COUNT. TSTB PRVDIR(R3) ;SPACE REV?$ BEQ FWDCLN ;IF EQ, NO - SPACE FWD?;TAPE CLEAN - SPACING REV." TST RBPCR(R2) ;COMPLETED REQUEST? BEQ REVDON ;IF EQ, YES.T BIT #X0.BOT,XST0(R2) ;BOT?o BNE REVDON ;IF NE, DONE.#POSAGN: MOV CLNCNT(R3),-(SP) ;SETUPO SUB CLNED(R3),(SP) ; REMAINING MOV (SP)+,CMDB2(R2) ; SPACE BR CLNAGN ; COUNT.L+REVDON: MOV CLNED(R3),CLNCNT(R3) ;SETUP FOR % TSTB PRVDIR+1(R3) ;READ FWD REQUEST?U BNE 100$ ;IF NE, READ REV. DEC CLNCNT(R3) ;SPACE N-1.N BR 110$ ; .. CONT. 100$: INC CLNCNT(R3) ;SPACE N+1.6110$: MOV #CC.SRF,(R2) ;TAPE CLEAN (FWDSPC OVER CLNR). BR CLNSET ; . . CONT. (FWDCLN: TST RBPCR(R2) ;REPOSITIONED FWD? BNE POSAGN ;IF NE, NO.*FWDPOS: MOV CMDPK1(R3),(R2) ;SETUP CMD PKT# BIC #CM.RTY,(R2) ;COMMAND WORD ANDP) MOV CMDPK2(R3),CMDB2(R2) ; LO ORD BUF @.A MOVB #1,S.VSTS(R4) ;ONE READ RSTS10=.-2& MOVB #RDTMO,S.VITM(R4) ; TIMEOUT AND RITM9=.-2E1 MOV CLNRTN(R3),INTADD(R3) ; > INTRPT PROCESSING.C&AGAIN: JMP INITIO ;RE-INITITIATE I/O. .PAGE8; TERMINATION CODE 5 - RECOVERABLE ERROR: TAPE NOT MOVED%TCL5ER:CALL MSDVER ;LOG DEVICE ERRORS& DECB RTTBL(R3) ;DECREMENT RETRY COUNT BNE AGAIN ;IF NE RETRIES LEFT 0PARERR: MOV #IE.VER&377,R0 ;UNRECOVERABLE ERROR. BR TCEND ;END REQUEST.*; TERMINATION CODE 6 - UNRECOVERABLE ERROR(TCL6ER: MOV #IE.FHE&377,R0 ;FATAL ERROR. CALL MSDVER ;LOG ERROR AND TCEND: JMP IODON ; END REQUEST.-; TERMINATION CODE 7 - FATAL CONTROLLER ERRORR:TCL7ER: CLR @S.CSR(R4) ;INITIALIZE DEVICE - ELSE UNUSABLE.7 MOV #TCL6ER,SSRRTY(R3) ;END REQUEST WHEN DEVICE READY.. BIS #CS.WSS,CSTAT(R3) ;WAIT FOR DEVICE READY:7 MOVB #5.,S.VITM(R4) ;TEST FOR DEV RDY AT 5 SEC INTRVL,S RITM10=.-26 MOVB #240.,S.VSTS(R4) ; UP TO 240 TIMES - 20 MINS.V RSTS11=.-2( MOVB S.VITM(R4),S.VCTM(R4) ;START TIMER RITM11=.-4 RCTM5=.-27 RETURNA .PAGE;C; MOUNT COMPLETION;A&IMOUNT: BIT #M.SER,U.CW2(R5) ;OFFLINE?% BNE 10$ ;IF NE YES, IT'S FATAL HERER BIT #M.BOT,U.CW2(R5) ;BOT?) BEQ 10$ ;IF EQ, NO.L- BICB #US.PWF,U.STS(R5) 00i}tsrbl;ELSE RESET PWFLD INDE BR ISTAT ; AND END REQUEST.S,10$: MOV #IE.FHE&377,R0 ;NO, SET FATAL ERROR;I+; STATUS EXIT FOR SET, SENSE, MOUNT AND SET ;M.ISTAT: MOV U.CW2(R5),R1 ;SET STATUS WORD IN R1 BR IODON ;;+?; **- IRWDU - SUCCESSFUL IO.RWD/IO.RWU RESETS US.PWF INDICATION ;-#IRWDU: TST R0 ;SUCCESSFUL RWD/RWU?O BMI 10$ ;IF MI, NO. . BICB #US.PWF,U.STS(R5) ;ELSE RESET PWFLD IND,! INCB PRVDIR(R3) ; Pre dir - REV.,.10$: BIC #M.RWD,U.CW2(R5) ;RWND, IF ANY, OVER. BR IODON ;END REQUEST. .PAGE;; SPACE BLOCKS COMPLETIONT;#ISPCB: BIT #M.PEOV,U.CW2(R5) ;PEOV?L BEQ IOCOM ;IF EQ, NO.2 MOV #SBRPOS,INTADD(R3) ;RETURN @ AFTER BACKSPACE. BR BCKSPC ;SETUP REQUEST.;+1; **-SBRPOS - POSITIONED AEOV SPACING VIA BLOCKS./;-#SBRPOS: CLR R1 ;NO BLOCKS SPACED,R BR NDAEOV ; AEOV ENDUP.;+$; **- ISPCF - SPACE FILES COMPLETION;-1ISPCF: BIT #CC.STR-CC.STF,(R2) ;SPACING REVERSE?e BNE SFREV ;IF NE, YES.W1 BIT #CS.SFB,CSTAT(R3) ;SPACING FILES VIA BLOCKS?E BNE SPCFB ;IF NE, YES.P BIT #M.PEOV,U.CW2(R5) ;PEOV?S BEQ IOCOM ;IF NE, NO.- SUB RBPCR(R2),SPCNT(R3) ;SPACED FILE COUNT.S9NDSPFB: MOV #SFRPOS,INTADD(R3) ;RETURN @ AFTER BACKSPACE. %BCKSPC: MOV #CC.SRR,(R2) ;BACKSPACE D MOV #1,CMDB2(R2) ; 1 BLOCK./ MOVB #15.,S.VSTS(R4) ;WAIT UP TO 15 SUBCYCLES RSTS12=.-2. MOVB #4,S.VITM(R4) ; 4 SECONDS PER SUBCYCLE. RITM12=.-2 BR AGAIN ;ISSUE I/O.A;+@; **-SFRPOS - RETURN AFTER REPOSITIONING TO AEOV FOR SPACE FILES;-)SFRPOS: DEC SPCNT(R3) ;SPACED FILE COUNTS" MOV SPCNT(R3),R1 ; TO REQUESTOR.(NDAEOV: BIC #M.PEOV,U.CW2(R5) ;NOT PEOV," BIS #M.AEOV,U.CW2(R5) ; BUT AEOV.$ MOV #IE.EOV&377,R0 ;INDICATE AEOV, BR IODON ; END REQUEST.=SPCFB: MOV #ISPCFB,INTADD(R3) ;SPC FILES VIA BLOCK SERVICING.V.ISPCFB: INC SPACED(R3) ;SPACED ONE MORE FILE. BIT #M.PEOV,U.CW2(R5) ;PEOV?  BNE 10$ ;IF NE, YES.. CMP SPACED(R3),SPCNT(R3) ;DONE? BNE AGAIN ;IF NE, NO.' MOV #IS.SUC&377,R0 ;R0 - RETURN CODE,S& MOV SPCNT(R3),R1 ;R1 - SPACED COUNT, BR IODON ; END REQUEST.110$: MOV SPACED(R3),SPCNT(R3) ;SPACED FILE COUNT.(! BR NDSPFB ;REPOSITION TO AEOV.R.SFREV: BIT #M.BOT,U.CW2(R5) ;BACKED INTO BOT? BEQ IOCOM ;IF EQ, NO., MOV #IS.SUC&377,R0 ; ELSE - IS.SUC IF BOT.;K7; COMMON EXIT ROUTINE FOR ALL ROUTINES REQUIRING STATUSL;1IOCOM: MOV U.CNT(R5),R1 ;RETRIEVE REQUESTED COUNTS( SUB RBPCR(R2),R1 ; LESS RESIDUAL COUNT. A; ; COMMON EXIT FOR ALL FUNCTIONS ;0/IODON: CALL MSDINT ;CALL DIAGNOSTIC COMPLETIONO1 MOV RTTBL(R3),R2 ; R2 - TOTAL RTRYS, RTRYS LEFT.(2 BIC #CS.CIP,CSTAT(R3) ;CLEAR COMMAND IN PROGRESS CALL @EIODON ;CALL COMPLETIONT) JMP MSINI ;GO CHECK FOR ANOTHER REQUESTI .PAGE;+&; **-MSDVER/MSDTER- LOG DEVICE ERRORS.;C@; THE DRIVER LOGS THE COMMAND PACKET, DEVICE STATUS REGISTER AND?; MESSAGE PACKET (INCLUDING EXTENDED STATUS REGISTERS) LOCATEDN; IN THE DRIVER DATA BASE.R;D; INPUT:; R3 = CONTROLLER INDEXO; R4 = SCB ADDRESS; R5 = UCB ADDRESS; ;L;- .ENABL LSBTMSDVER: MOV R2,-(SP) ;SAVE R2.0 MOV DVERR,-(SP) ;(SP) - @ TO LOG DEVICE ERRORS. BR 10$ ;MSDTER: MOV R2,-(SP) ;SAVE R2.2 MOV DVTMO,-(SP) ;(SP) - @ TO LOG DEVICE TIMEOUTS.=10$: BIT #CS.UMD,CSTAT(R3) ;USER MODE DIAGNOSTIC IN PROGRESSC BEQ 20$ ;IF EQ NOH TST (SP)+ ;MAINTAIN  TST (SP)+ ; STACK. RETURN ;RETURN TO THE CALLERE(20$: MOV CMDPTR(R3),R2 ; > ERR LOG DATA.. CALL @(SP)+ ;CALL EXEC ERROR LOGGING ROUTINE MOV (SP)+,R2 ;RESTORE R2. RETURN ;A .DSABL LSBL .PAGE;+-; **-MSDINT- DIAGNOSTIC REGISTER PASS ROUTINEE;-@; IF ENTRY WAS FROM A DIAGNOSTIC CONTROL FUNCTION, THEN MOVE THEC; I/O PACKET WORDS 17 & 20 TO WORDS 20 & 21 FOR THE $CRPAS ROUTINE.0;B>; THE DRIVER PASSES THE COMMAND PACKET, DEVICE STATUS REGISTERF; AND MESSAGE PACKET (INCLUDING XTND STS REGS) VIA THE $CRPAS ROUTINE.;R ; INPUTS:E;L; R3 = CONTROLLER INDEX,; R4 = SCB ADDRESS; R5 = UCB ADDRESS;-5MSDINT: BIT #CS.UMD,CSTAT(R3) ;DIAGNOSTIC OPERATION?T BEQ 30$ ;IF EQ NOL MOV R1,-(SP) ;S00ittmkTADATADATADATADATADATAAVE R1 MOV R2,-(SP) ;SAVE R2* MOV S.VPKT(R4),R1 ;GET I/O PACKET ADDRESS RPKT2=.-2R& MOV CMDPTR(R3),R2 ; > DEVICE PACKETS.3 CMPB #IO.EOF/256.,I.FCN+1(R1) ;WRITE EOF FUNCTION?E BEQ 10$ ;IF EQ YES0 CMPB #IO.RWD/256.,I.FCN+1(R1) ;REWIND FUNCTION? BEQ 10$ ;IF EQ YES3 CALL @CRPAS ;PASS DEVICE REGISTERS TO DIAGNOSTICS BR 20$ ;GO TO EXIT<10$: MOV I.PRM+14(R1),I.PRM+16(R1) ;MOVE PACKET WD20 TO WD218 MOV I.PRM+12(R1),I.PRM+14(R1) ;MOVE PACKET WD17 TO WD203 CALL @CRPAS ;PASS DEVICE REGISTERS TO DIAGNOSTICSR/ MOV S.VPKT(R4),R1 ;RETRIEVE I/O PACKET ADDRESSK RPKT3=.-2 7 MOV I.PRM+14(R1),I.PRM+12(R1) ;MOVE WD20 BACK TO WD 17 6 MOV I.PRM+16(R1),I.PRM+14(R1) ;MOVE WD21 BACK TO WD2020$: MOV (SP)+,R2 ;RESTORE R2. MOV (SP)+,R1 ;RESTORE R1.30$: RETURN ;EXIT TO CALLER  .PAGE;+8;**-TRPHYS-TRANSLATE D-SPACE ADDRESS TO PHYSICAL ADDRESS;MD; THIS ROUTINE IS CALLED TO TRANSLATE A KERNEL DATA SPACE ADDRESS TOC; EQUIVALENT PHYSICAL ADDRESS. IN UNIBUS SYSTEMS, THE UMRS MAP DATAEB; SPACE, SO THE VIRTUAL ADDRESS IS OK. IN ALL NON-I/D SYSTEMS, THEC; VIRTUAL -> PHYSICAL MAPPING OF EXEC ADDRESSES IS DIRECT. THE ONLYKD; SITUATION REQUIRING TRANSLATION IS THEREFORE AN I/D SYSTEM RUNNING ; ON A Q-BUS. ;S; CALLING SEQUENCE:R;R+; CLR -(SP) ; CLEAR HI-ORD ADDRESS AREA.+; MOV ...,-(SP) ;PUSH ADDRESS TO TRANSLATEE; CALL TRPHYS ;TRANSLATE(; MOV (SP)+,... ; GET TRANSLATED LO-ORD'; MOV (SP)+,... ; AND HI-ORD ADDRESS.P;I;-TRPHYS: ; REFERENCE LABEL3 BIT #DV.EXT,U.CW1(R5) ; 22 bit physical @ (Q bus)?.5 BEQ 10$ ; IF EQ, No - UNIBUS (UMRs), no translationP! BIT #F2.DAS,@FMSK2 ; Data space?E+ BEQ 10$ ; IF EQ, Non I/D, no translation.T MOV R0,-(SP) ; Save R0N MOV R1,-(SP) ; and R1. 2 MOV @SCMOF,R1 ; Get 32-wd block addr of D-space.' CLR R0 ; and R0=0 for @ translation.A8 SUB #200,R1 ; R1 - @ D space starting at virtual 20000% ASHC #6,R0 ; Translate the D pool @V ADD R1,6(SP) ; and  ADC R0 ; return it& BIC #^C<3>,R0 ; (18 bit phys @)! MOV R0,10(SP) ; to user.) MOV (SP)+,R1 ; Restore R1 MOV (SP)+,R0 ; and R0.o10$: RETURN ;RETURN TO CALLERe .PAGE;+-; **-MSKRB - CONTROLLER STATUS CHANGE ROUTINE(-; **-MSUCB - UNIT STATUS CHANGE ROUTINEV;C@; The status change routines are NOPS and are provided only as aB; mechanism to gain control at MSKRB to translate the exec vector.;-.MSKRB: BCS MSUCB ; IF CS - offline call, nop.' TST EXEVEC ; Exec vector translated ? ( BNE MSUCB ; IF NE, Yes - don't repeat.% MOV @#112,R0 ; R0 > table of entriesM2 MOV (R0),R0 ; and apr bias (1st word of table).) MOV KINAR6,-(SP) ; Save I-space mapping.E3 MOV (R0),KINAR6 ; Map common through I-space APR6.& MOV #EXEVEC,R3 ; R3 > Exec vector and. MOV #EXEVCL,R2 ; R2 = length of vector area.' CALL @#140004 ; Translate the vectors. , MOV (SP)+,KINAR6 ; Restore I-space mapping.; Patch driver SCB references# MOV #SCBPAT,R0 ; R0 > patch table.E+10$: MOV (R0)+,R2 ; R2 > driver @ to patch B0 BEQ MSUCB ; IF EQ (R0> table terminator), end.0 MOV @(R0)+,(R2) ; Else - patch driver location- BR 10$ ; and continue till driver patched.eMSUCB: JMP MSPWF ; Continue.A .ENDp common through I-space APR6.& MOV #EXEVEC,R3 ; R3 > Exec vector and. MOV #EXEVCL,R2 ; R2 = length of vector area.' CALL @#140004 ; Translate the vectors. , MOV (SP)+,KINAR6 ; Restore I-space mapping.; Patch driver SCB references# MOV #SCBPAT,R0 ; R0 > patch table.E+10$: MOV (R0)+,R2 ; R2 > driver @ to patch B0 BEQ MSUCB ; IF EQ (R0> table termina;?; MSPRE.MAC - PREFIX FILE FOR BUILDING MS LOADABLE CRASH DRIVERO;p; Created 11-JAN-88O;*C$$CDA=0 ; LOADABLE CRASH DRIVER SUPPORT3L$$CDA=0 ; LOADABLE CRASH DRIVERS TO BE ASSEMBLEDMS$$CD=0 ; CRASH DRIVER IS MSRIVERS TO BE ASSEMBLEDDL$$CD=0 ; CRASH DRIVER IS DU00Utsrbl .TITLE MTDRV+ .IDENT /05.08/ ;t5; COPYRIGHT (C) 1986 BY DIGITAL EQUIPMENT CORPORATIONk; ALL RIGHTS RESERVED.;,<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;a; VERSION 05.08r;o; SCOTT G. DAVIS 9-JUL-74.;n; PREVIOUSLY MODIFIED BY:,;R; P. J. BEZEREDI; D. N. CUTLER ; S. G. DAVIS.; C. A. D'ELIA ; B. LYONS; T. J. MILLER; F. L. STRAIGHT;d; MODIFIED BY:;S;;;s+; PB122 -- RETURN IS.SUC FOR EOT ON READS.;D5; TL069 -- CHECK THAT A CANCEL IS ISSUED BY THE TASKI'; WHICH ISSUED THE CURRENT OPERATION.;,.; TL070 -- RETURN THE CORRECT BLOCK COUNT FOR; IO.SPB AT EOV;P#; TL071 -- FIX BRANCH OUT OF RANGE ;S#; TL074 -- DO NOT LOG DATA OVERRUNo; *; TL075 -- RETURN EOV FOR IO.SPF, NOT EOT;F8; CS001 -- TAPE DENSITY SUPPORT IDENTIFICATION IN U.CW3;.2; CS002 -- DEVICE NOT READY IF TAPE UNIT OFF LINE;T); CS003 -- BOT STATUS IF TAPE UNIT READYP;2"; CS004 -- REMOVE REDUNDANT CODE,%; S2.ACT NOT BEING RESET IN S.ST2.S;S-; CS005 -- IO.STC/IO.SMO 1600BPI NOT ALLOWED '; ALLOW BAD TAPE READ ERROR RECOVERYR;T.; CS006 -- CORRECT CS003; BOT STATUS VALID IF*; TAPE UNIT READY .OR. ENDING OPERATION; >; CS007 -- HANDLE CALL FOR CONTROLLER POWER FAIL (C BIT SET).;T;T;F&; TM11 MAGNETIC TAPE CONTROLLER DRIVER;C; MACRO LIBRARY CALLSC;2* .MCALL HWDDF$,PKTDF$,ABODF$,CLKDF$,UCBDF$ HWDDF$0 PKTDF$  ABODF$  CLKDF$  UCBDF$ ;DEFINE UCB OFFSETSR;T; EQUATED SYMBOLS ; %US.ABO=1 ;ABORT IN PROGRESS - U.STSO2US.BSP=2 ;INTERNAL BACKSPACE IN PROGRESS - U.STSUS.PWF=10 ;POWER FAIL STATUSRETRY=12 ;RETRY COUNTT;U; REGISTER BIT SYMBOLS;RCS.GO=1 ;GO!CS.EXM=60 ;EXTENDED MEMORY BITSLCS.IE=100 ;INTERRUPT ENABLEB"CS.RDY=200 ;CONTROLLER READY BITCS.EVN=4000 ;EVEN PARITYCS.CLR=10000 ;POWER CLEAR#CS.DN5=20000 ;556 BPI DENSITY BITC#CS.DN8=40000 ;800 BPI DENSITY BITCDS.TUR=1 ;TAPE UNIT READYFDS.RWS=2 ;REWINDINGEDS.HWL=4 ;WRITE LOCKDS.SDN=10 ;SETTLE DOWNDS.7CH=20 ;UNIT IS 7 CHANNELDS.BOT=40 ;BEGINNING OF TAPEDS.MOL=100 ;MEDIUM ON LINEDS.BTE=400 ;BAD TAPE ERROR"DS.RLE=1000 ;RECORD LENGTH ERROR#DS.EOT=2000 ;END OF TAPE DETECTEDYDS.BGL=4000 ;BUS GRANT LATEEDS.PAE=10000 ;PARITY ERROR)DS.CRE=20000 ;CYCLICAL REDUNDANCY ERRORS!DS.TM=40000 ;TAPE MARK DETECTED2 DS.ILG=100000 ;ILLEGAL COMMAND(RD.GAP=10000 ;GAP SHUTDOWN IN PROGRESS1RD.LPC=40000 ;READ LPC CHARACTER AND RTTBL FLAGL;;H; MAG TAPE STATUS REGISTER BIT DEFINITIONS (SENSE AND SET CHARACTERISTIC;40M.PEOV=100000 ;TAPE PAST LOGICAL END OF VOLUME-M.AEOV=40000 ;TAPE AT LOGICAL END OF VOLUMERM.BOT=20000 ;TAPE AT BOT M.7CH=10000 ;UNIT IS 7 CHANNEL0M.1600=4000 ;TAPE DENSITY CONTROL - '0'=800BPI!M.HWL=2000 ;HARDWARE WRITE LOCKDM.RWD=1000 ;UNIT IS REWINDINGP%M.SER=400 ;SELECT ERROR HAS OCCUREDG4M.IXG=200 ;INHIBIT WRITE WITH EXTENDED INTERRECORD M.SWL=100 ;SOFTWARE WRITE LOCK.M.EOF=40 ;LAST COMMAND ENCOUNTERED TAPE MARK(M.EOT=20 ;LAST COMMAND ENCOUNTERED EOTM.EVN=10 ;EVEN PARITY0+M.CDM=4 ;CORE DUMP MODE (7 CHANNEL ONLY)V$M.200=2 ;200 BPI (7 CHANNEL ONLY)$M.556=1 ;556 BPI (7 CHANNEL ONLY)0USRBTS=317 ;STATUS BITS CONTROLLED BY THE USERDNEWBTS=M.PEOV!M.BOT!M.EOF!M.EOT ;STATUS BITS TO BE SET BEFORE $IODON;; ; COMMANDS;NRWU=101 ;REWIND AND OFFLINERED=103 ;READWRT=105 ;WRITEWWEF=107 ;WRITE END-OF-FILE=SPF=111 ;SPACE FORWARDSPR=113 ;SPACE REVERSEC#WTE=115 ;WRITE WITH EXTENDED GAPCRWD=117 ;REWIND-U.SPC = U.VCB+2 ;SPACING COUNT, RDBLK TEMP.M;E; LOCAL MACROS;;0;; THE FOLLOWING MACRO DEFINES ENTRIES IN THE FUNCTION TABLEN;O..MACRO DFENT COM,TIMOUT,PWF,OPCODE,TYPE,INTADD .WORD COM .BYTE PWF,TIMOUT. .BYTE TYPE,OPCODE .WORD INTADDF .ENDM DFENT; ; LOCAL DATA;W>; CONTROLLER IMPURE DATA TABLES (INDEXED BY CONTROLLER NUMBER);;; DIAGNOSTIC FUNCTIONS USE BITS 14-15 OF R00UttmkTADATADATADATADATADATATTBL AS FLAGS FORP"; INTERRUPT AND FUNCTION HANDLING.'RTTBL: .BLKW T$$M11 ;ERROR RETRY COUNTI(SPTBL: .BLKW T$$M11 ;FOR SPACE CHECKING8INTADD: .BLKW T$$M11 ;CURRENT INTERRUPT SERVICE ADDRESS;E; LEGAL FUNCTION DISPATCH TABLEL;8LGFCN: DFENT IO.RLB,8.,0,RED,0,RDBLK ;READ LOGICAL BLOCK3 DFENT IO.WLB,6.,0,WRT,0,WRBLK ;WRITE LOGICAL BLOCKT/ DFENT IO.EOF,2.,0,WEF,0,WREOF ;WRITE TAPE MARKT& DFENT IO.RWD,2.,1,RWD,0,REWND ;REWIND4 DFENT IO.RWU,2.,1,RWU,0,REWND ;REWIND THEN OFF-LINE+ DFENT IO.SPB,8.,0,SPF,1,SPCBK ;SPACE BLOCK * DFENT IO.SPF,8.,0,SPF,2,SPCFL ;SPACE FILE/ DFENT IO.STC,0,-1,0,-1,-1 ;SET CHARACTERISTICSC1 DFENT IO.SEC,0,-1,1,-1,-1 ;SENSE CHARACTERISTICST9 DFENT IO.SMO,0,1,-1,-1,-1 ;MOUNT AND SET CHARACTERISTICS!ENDFCN=. ;END OF FUNCTION TABLER;;; DRIVER DISPATCH TABLET;.( DDT$ MT,T$$M11 ;GENERATE DISPATCH TABLE;+2; **-MTINI-TM11 MAGNETIC TAPE CONTROLLER INITIATOR;WH; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUEG; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THESH; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN AH; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER IH; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER>; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.;I ; INPUTS:E;:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;H ; OUTPUTS:;NB; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAB; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OP; ATION IS INITIATED.E;- .ENABL LSBS7MTINI: GTPKT$ MT,T$$M11 ;GET NEXT I/O PACKET TO PROCESSE;.1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:D;E'; R1=ADDRESS OF THE I/O REQUEST PACKET./-; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.A; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK. :; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;ED; TM11 MAGNETIC TAPE FUNCTION INDEPENDENT I/O REQUEST PACKET FORMAT:;R"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.T@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTOR TASK HEADER.B; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTOR TASK HEADEB; WD. 05 -- I/O FUNCTION CODE (IO.RLB/IO.RWD/IO.SPB/IO.SPF/IO.EOF)0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.B; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140003; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE.U; 9 MOV #$MTCLK,S.MTCK+C.SUB(R4) ;SET ADDR OF CLOCK ROUTINEO# CLR S.FRK+2(R4) ;INIT FORK PC WORDO- MOV #LGFCN,R2 ;POINT TO LEGAL FUNCTION TABLEE( CLRB RTTBL+1(R3) ;CLEAR DIAGNOSTIC FLAG$ MOV I.FCN(R1),R0 ;GET FUNCTION CODE+ BITB #IQ.UMD,R0 ;DIAGNOSTIC FUNCTION CALL?O BEQ 20$ ;IF EQ NO67 MOV #100000,RTTBL(R3) ;STOP RETRIES AND SET DIAG. FLAGO5 CMP #IO.LPC!IQ.UMD,R0 ;READ LPC CHARACTER FUNCTION?S BNE 15$ ;IF NE NOO* BIS #RD.LPC,RTTBL(R3) ;SET LPC READ FLAG0 MOV #IO.RLB!IQ.UMD,R0 ;CONVERT TO READ LOGICAL% MOV R0,I.FCN(R1) ;SAVE FOR LATER USE -15$: BIC #IQ.UMD,R0 ;CLEAR FOR FUNCTION CHECK320$: BICB #IQ.X,R0 ;CLEAR IQ.X WILL BE TESTED LATER  CMP R0,(R2)+ ;FUNCTION MATCH? BEQ 35$ ;IF EQ YES& ADD #6,R2 ;POINT TO NEXT TABLE ENTRY! CMP R2,#ENDFCN ;AT END OF TABLE?  BNE 20$ ;IF NE NO0 BR 40$ ;ILLEGAL FUNCTION! JMP 230$ ;FINISH IN COMMON CODE.;0; FUNCTION CODE MATCH FOUNDN;.35$: BITB #US.PWF,U.STS(R5) ;POWER FAIL OCCUR? BEQ 45$ ;IF EQ NO# TSTB (R2) ;LEGAL FUNCTION? BMI 45$ ;IF MI YES% BNE 43$ ;IF NE THIS IS A BETTER ONEC40$: MOV #IE.IFC&377,R0 ;NOO JMP 230$ ;INFORM THE USER;243$: BICB #US.PWF,U.STS(R5) ;ALLOW ALL FUNCTIONS345$: MOV (R2)+,S.CTM(R4) ;SET UP FOR PROPER TIMEOUTT# CLRB S.CTM(R4) ;CLEAR OUT PWF INFO " CLR SPTBL(R3) ;RESET SPACING FLAG CLR U.SPC(R5) ;NOT SPACING FILE) TSTB (R2)+ ;DETERMINE TYPE OF OPERATION $ BPL 50$ ;IF PL NOT STATUS FUNCTION JMP 190$ ;STAT00UtsrblUS FUNCTIONR)50$: BEQ 90$ ;IF EQ NON-SPACING FUNCTIONR;L/; SPACING FUNCTION DEPENDENT I/O PACKET FORMAT:I;E@; WD. 12 -- SPACING COUNT (POSITIVE=FORWARD, NEGATIVE=BACKWARD).; WD. 13 -- NOT USED.B; WD. 14 -- NOT USED. ; WD. 15 -- NOT USED.5; WD. 16 -- NOT USED.;:; WD. 17 -- RELOCATON BIAS OF DIAGNOSTIC REG. BLK. ADDRESS?; WD. 20 -- DIAG. REG. BUFFER ADDRESS (REAL OR DISPL. + 140000)C; 5 BISB #S3.SIP,S.ST3(R4) ;SET POSITIONING IN PROGRESS$= MOV U.BUF(R5),I.PRM+4(R1) ;MOVE SPACING COUNT TO COMMON PLAC:- CLR U.BUF(R5) ;RESET TO TAKE ON OPCODE BELOW = MOV I.PRM+4(R1),U.CNT(R5) ;MOVE SPACING COUNT TO COMMON PLAC & BNE 60$ ;IF NE SOME SPACING REQUIRED/ CLR I.PRM+4(R1) ;CLEAR COUNT FOR STATUS RETURN  JMP 220$ ;NO SPACING REQUIRED5!60$: BMI 65$ ;IF MI SPACE REVERS- BIT #M.AEOV,U.CW2(R5) ;AT EOV?G BEQ 70$ ;IF EQ NO - PROCEEDG! MOV #IE.EOV&377,R0 ;STILL AT EOVL/ CLR I.PRM+4(R1) ;CLEAR COUNT FOR STATUS RETURN  JMP 230$ ;TELL THE USERM65$: ;REFERENCE LABEL) NEG U.CNT(R5) ;CONVERT TO POSITIVE COUNTB NEG I.PRM+4(R1) ;THIS ONE, TOOE8 BIS #2,U.BUF(R5) ;CHANGE SPACE FORWARD TO SPACE REVERSE/70$: CMPB -1(R2),#1 ;SPACE FILE OR SPACE BLOCK?D BEQ 80$ ;IF EQ SPACE BLOCK6 MOV U.CNT(R5),U.SPC(R5) ;SAVE COUNT OF FILES TO SPACE+ NEG U.SPC(R5) ;SET UP FOR FINAL ACCOUNTINGE( MOV #-1,U.CNT(R5) ;SET UP FOR BIG SPACE080$: MOV U.CNT(R5),SPTBL(R3) ;SAVE SPACING COUNT/ NEG SPTBL(R3) ;MAKE IT MATCH REGISTER CONTENTS% BR 110$ ;SKIP SOME CHECKS AND BIC'SF;E:; READ/WRITE LOGICAL FUNCTION DEPENDENT I/O PACKET FORMAT:;4+; WD. 12 -- RELOCATION BIAS OF DATA BUFFER.G ; WD. 13 -- DATA BUFFER ADDRESS.-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED.D; WD. 15 -- NOT USED.E; WD. 16 -- NOT USED.U; WD. 17 -- NOT USED. :; WD. 20 -- RELOCATON BIAS OF DIAGNOSTIC REG. BLK. ADDRESS?; WD. 21 -- DIAG. REG. BUFFER ADDRESS (REAL OR DISPL. + 140000)T;RG; NO FUNCTION DEPENDENT PARAMETERS ARE REQUIRED FOR REWIND OR WRITE EOF; 90$: ;REF LABEL .IF DF M$$EXT, CALL $STMAP ;SET UP UNIBUS MAPPING ADDRESS .ENDC7 CMPB -2(R2),#2 ;WRITE EOF, REWIND OR REWIND & OFFLINE?-, BEQ 100$ ;IF EQ YES - SEE IF WRITELOCK SET CMPB (R2),#WRT ;WRITE? BNE 110$ ;IF NE NO. MOV #IE.SPC&377,R0 ;ASSUME PARAMETER PROBLEMS! CMP I.PRM+4(R1),#14. ;TOO SHORT?G BLO 163$ ;IF LO YESS BR 105$ ;SKIP EXMEM BIT CLEARD*100$: CLR U.BUF(R5) ;NOTHING THERE FOR WEF5 BISB #S3.SIP,S.ST3(R4) ;SET POSITIONING IN PROGRESS  CMPB (R2),#WEF ;WRITE EOF?F/ BNE 110$ ;IF NE NO, SKIP CHECK FOR WRITE LOCKU6105$: MOV #IE.WLK&377,R0 ;ASSUME (SOFTWARE) WRITE LOCK BIT #M.SWL,U.CW2(R5) ;LOCKED? BNE 163$ ;IF NE YESFC110$: BISB (R2)+,U.BUF(R5) ;PICK UP FUNCTION CODE FROM COMMAND TABL;3 MOV (R2),INTADD(R3) ;SET INITIAL INTERRUPT ADDRESSE$ TST RTTBL(R3) ;DIAGNOSTIC FUNCTION?# BMI 120$ ;IF MI YES, STOP RETRIESS* MOV #RETRY,RTTBL(R3) ;SET UP RETRY COUNTS-120$: CALL SELECT ;SELECT THE REQUIRED DRIVE;) BCS SELERR ;IF CS SELECT ERROR OCCURREDE2 MOV U.CW2(R5),R1 ;PICK UP DRIVE'S CHARACTERISTICS% BIT #M.EVN,R1 ;EVEN PARITY REQUIRED?; BEQ 140$ ;IF EQ NO2 BIS #CS.EVN,U.BUF(R5) ;SET BIT IN STATUS REGISTER<140$: BIS #CS.DN5!CS.DN8,U.BUF(R5) ;ASSUME 9-CHANNEL, 800BPI BIT #M.7CH,R1 ;7-CHANNEL DRIVE? BEQ 170$ ;IF EQ NO BIT #M.CDM,R1 ;CORE DUMP MODE?; BNE 170$ ;IF NE YESB BIT #M.556,R1 ;556 BPI? BNE 150$ ;IF NE YEST- BIC #CS.DN5,U.BUF(R5) ;RESET BIT FOR COMMAND  BIT #M.200,R1 ;200 BPI? BEQ 170$ ;IF EQ NO.150$: BIC #CS.DN8,U.BUF(R5) ;RESET COMMAND BIT BR 170$;AC; DEVICE TIMEOUT RESULTS IN THE CURRENT OPERATION BEING TERMINATED.EA; IF THE OPERATION WAS DIAGNOSTIC, THE QIO REQUEST IS TERMINATED. A; TIMEOUTS ARE USUALLY CAUSED BY POWERFAILURE BUT MAY ALSO BE THE;F; RESULT OF HARDWARE CONSIDERATIONS. IN PARTICULAR, A LENGTHY SPACING:; OPERATION MAY RESULT IN A TIMEOUT WHICH WILL BE IGNORED.;;1MTOUT: MOV S.CSR(R4),R2 ;;;PICK UP ADDRESS OF CSRM$ BITB #US.ABO,U.STS(R5) ;;;ABORTING? BEQ 152$ ;;;IF EQ NO/ BIC #M.RWD,U.CW2(R5) ;;;REWIND NOT IN PROGRESS BR 162$ ;;;TERMINATE00UttmkTADATADATADATADATADATA152$: ;;;REFERENCE LABELO* MOVB S.CON(R4),R3 ;;;FETCH CONTROLLER NO.# BIT #M.RWD,U.CW2(R5) ;;;REWINDING?N BNE 155$ ;;;IF NE YESU' MOV SPTBL(R3),R0 ;;;SPACE IN PROGRESS?B BEQ 154$ ;;; IF EQ THEN NO# CMP R0,2(R2) ;;;IS THE TAPE BLANK?T BNE 153$ ;;; IF NE THEN NO$ CALL $DTOER ;;; LOG DEVICE TIMEOUT) BR 161$ ;;; EXIT WITH IE.DNR ERROR CODEP153$: ;;; REF. LABELU6 MOV 2(R2),SPTBL(R3) ;;;SAVE VALUE FOR NEXT COMPARISON+ MOVB S.ITM(R4),S.CTM(R4) ;;;RESUME TIMEOUT RETURN ;;;THAT IS ALL FOR NOW)154$: CALL $DTOER ;;; LOG DEVICE TIMEOUT;+ BCS 161$ ;IF CS ABORT DIAGNOSTIC FUNCTION;/155$: BIC #CS.IE,(R2) ;;;CLEAR INTERRUPT ENABLEL MTPS #0 ;;;ALLOW INTERRUPTS0 BIT #M.SER,U.CW2(R5) ;WAS THERE A SELECT ERROR? BEQ 160$ ;IF EQ NO' BIC #M.SER,U.CW2(R5) ;RESET STATUS BIT;! BIT #M.RWD,U.CW2(R5) ;REWINDING? / BEQ 120$ ;IF EQ NO - REISSUE ORIGINAL COMMANDA. BIT #DS.MOL,-2(R2) ;IS THE DRIVE ON-LINE NOW? BEQ SELERR ;IF EQ NO- MOVB #RWD-CS.IE,(R2) ;START THE REWIND AGAIN; BR 172$ ;START UP TIMEOUTA&160$: BIT #M.RWD,U.CW2(R5) ;REWINDING? BNE 164$ ;IF NE YESG3161$: MOV #IE.DNR&377,R0 ;INDICATE DEVICE NOT READYR4162$: CALL MTDINT ;PASS DIAGNOSTIC DEVICE REGISTERS$ BIS #CS.CLR,(R2) ;RESET CONTROLLER#163$: JMP 230$ ;REPORT FATAL ERROR,/164$: BIT #DS.MOL,-2(R2) ;EVERYTHING COPASETIC?5 BEQ SELERR ;IF EQ NO$ BIT #DS.BOT!DS.RWS,-2(R2) ;TAPE OK? BNE 165$ ;IF NE OK8SELERR: MOV #IE.DNR&377,R0 ;NOT READY - IF TAPE OFF LINE$ TST RTTBL(R3) ;DIAGNOSTIC FUNCTION?. BMI 230$ ;IF MI YES, STOP THE SELECT MESSAGE( BITB #IQ.X,I.FCN(R1) ;SUPPRESS RETRIES?& BNE 230$ ;IF NE YES SKIP SELECT MSG., TST U.ACP(R5) ; ACP WANTS RETURN IMMEDIATE?, BNE 230$ ; IF NE YES EXIT DEVICE NOT READY+ BIS #M.SER,U.CW2(R5) ;SET SELECT ERROR BITR DECB S.STS(R4) ;TIME FOR A MSG? BNE 172$ ;IF NE NO* MOV #T.NDSE,R0 ;SET UP TO DELIVER MESSAGE$ MOVB #15.,S.STS(R4) ;SET UP TIMEOUT CALL $DVMSG ;SEND THE MESSAGE7 BR 172$ ;SET THE TIMOUTF*165$: BIT #DS.TUR,-2(R2) ;REWIND COMPLETE? BEQ 172$ ;IF EQ NO' BIT #DS.BOT,-2(R2) ;DID WE GET TO BOT?.' BNE 175$ ;IF NE YES - REWIND COMPLETEF&170$: BIT #M.RWD,U.CW2(R5) ;REWINDING? BEQ 177$ ;IF EQ NO)172$: MOVB #1,S.CTM(R4) ;SET UP A TIMEOUTE RETURN ;THAT IS ALL FOR NOW&175$: BIS #M.BOT,U.CW2(R5) ;SAY AT BOT177$: ;REF LABELB .IF DF M$$EXT$ CMPB #SPF,U.BUF(R5) ;SPACE FORWARD?' BEQ 178$ ;IF EQ YES, UMR'S NOT NEEDED$ CMPB #SPR,U.BUF(R5) ;SPACE FORWARD?' BEQ 178$ ;IF EQ YES, UMR'S NOT NEEDED, MOV R2,-(SP) ;SAVE R2% CALL $MPUBM ;MAP UNIBUS TO TRANSFER( MOV (SP)+,R2 ;RESTORE R2B .ENDC7178$: CMP (R2)+,(R2)+ ;POINT TO MEMORY ADDRESS REGISTERI, MOV U.BUF+2(R5),(R2) ;SET UP BUFFER ADDRESS0 MOV U.CNT(R5),-(R2) ;SET UP BYTE COUNT REGISTER NEG (R2) ;NEED 2S COMPLEMENT@180$: MOVB S.ITM(R4),S.CTM(R4) ;SET CURRENT DEVICE TIMEOUT COUNT7 BIC #M.AEOV!M.SER!M.RWD,U.CW2(R5) ;RESET VARIOUS FLAGSU$ BICB #US.BSP,U.STS(R5) ;RESET FLAGS/ BIT #RD.LPC,RTTBL(R3) ;READ LPC CHAR FUNCTION?T BEQ 185$ ;IF EQ NO- BIS #RD.LPC,6(R2) ;SET LPC READ IN MTRD REG.E'185$: CALL $BMSET ;SET I/O ACTIVE FLAG+ MOV U.BUF(R5),-(R2) ;INITIATE THE FUNCTIOND RETURN ;DONEM;B7; CANCEL I/O OPERATION IS A NOP FOR TM11 MAGNETIC TAPES);E.MTCAN: CMP I.TCB(R0),R1 ;CANCEL FOR THIS TASK? BNE 111$ ;BRANCH IF NOT)2 BISB #US.ABO,U.STS(R5) ;FLAG THE ABORT CONDITION 111$: RETURN;DH; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUH; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDIT3; THAT COULD EXIST IN RESTARTING THE I/O OPERATION.L;M/MTPWF: BCS 112$ ;IF CS, CONTROLLER POWER FAIL.N/ BISB #US.PWF,U.STS(R5) ; ELSE, UNIT POWER FAILA ; DISALLOW NORMAL QIO'S. , CALL DRVSTS ;INDICATE TAPE DENSITY SUPPORT 112$: RETURN;H; STATUS FUNCTION PROCESSING;O190$: ;REFERENCE LABEL;! MOV R2,-(SP) ;SAVE TABLE POINTERU+ CALL SELECT ;SET BOT, HWL, AND 7CH STATUS  MOV (SP)+,R2 ;RESTORE POINTER8 MOV U.CW2(R5),I.PRM+4(R1) ;ASSUME SENSE CHARACTERISTICS) TSTB (R2)+ ;DETERMINE FUNCTION R00UtsrblEQUIREDE% BEQ 210$ ;IF EQ SET CHARACTERISTICSW) BPL 220$ ;IF PL "SENSE CHARACTERISTICS"N"201$: BIT #M.BOT,U.CW2(R5);AT BOT? BNE 210$ ;IF NE, YES.S&203$: MOV #IE.FHE&377,R0 ;FATAL ERROR, BR 230$ ; END REQUEST.3210$: BIT #M.1600,U.BUF(R5) ;TRYING TO SET 1600BPI?O% BNE 203$ ;IF NE, YES - NOT ALLOWED.,0 BIC #USRBTS,U.CW2(R5) ;PREPARE TO SET NEW BITS.; BIC #^C,U.BUF(R5) ;LEAVE ONLY USER CONTROLLED BITSU) BIS U.BUF(R5),U.CW2(R5) ;NEW STATUS WORDR;S; NO SPACING REQUIREDN;U:220$: MOV #IS.SUC&377,R0 ;SET SUCCESSFUL COMPLETION STATUS+230$: MOV S.CSR(R4),R2 ;PICK UP CSR ADDRESS ; BIC #CS.IE!CS.EXM,(R2) ;CLEAR INT. ENABLE AND EX. MEM BITS + CLR 2(R2) ;ASSURE PROPER VALUE FOR RETURN  JMP 540$ ;CLEAN UP AND EXIT,;+4; **-$MTINT-TM11 MAGNETIC TAPE CONTROLLER INTERRUPTS;-5 INTSE$ MT,PR5,T$$M11 ;;;GENERATE INTERRUPT SAVE CODE., MOV U.SCB(R5),R4 ;;;RETRIEVE ADDRESS OF SCB+ TST S.FRK+2(R4) ;;;HAVE WE FORKED ALREADY?E. BNE 300$ ;;;IF NE YES, RETURN FROM INTERRUPT' CALL $FORK ;;;CREATE A SYSTEM PROCESSF'240$: MOV U.SCB(R5),R4 ;GET SCB ADDRESS,3 MOV S.CSR(R4),R2 ;PICK UP COMMAND REGISTER ADDRESSE: BIT #DS.TUR!DS.RWS!DS.ILG!DS.EOT!DS.BOT,-(R2) ;UNIT DONE? BNE 250$ ;IF NE YESP; CMPB U.BUF(R5),#RWU ;WAS IT A REWIND AND OFFLINE FUNCTION? , BEQ 220$ ;IF EQ YES, COMPLETE WITH SUCCESS* MOV R4,R0 ;GET ADDR OF CLOCK QUEUE BLOCK ADD #S.MTCK,R0 ;; CLR R1 ;SET UP HIGH TICKST MOV #1,R2 ;TIMEOUT UNTIL TUR$ MOV #C.SYST,R4 ;TYPE OF CLOCK ENTRY CALLR $CLINS ;TIMEOUT !$MTCLK:: ;REF LABEL FOR TIMEOUT4& MOV C.TCB(R4),R5 ;RESTORE UCB ADDRESS BR 240$ ;SEE IF UNIT READY/250$: MOVB S.CON(R4),R3 ;PICK UP CONTROLLER NO.D/ BIT #DS.MOL,(R2)+ ;IS THE DRIVE STILL ON-LINE?  BNE 260$ ;IF NE YESR( JMP 161$ ;ISSUE "DEVICE-NOT-READY" MSG@260$: BIC #CS.IE!CS.EXM,(R2) ;CLEAR INT. ENABLE AND EX.MEM BITS/ MOVB S.ITM(R4),S.CTM(R4) ;RESET TIMEOUT COUNTR, CLR S.FRK+2(R4) ;ALLOW INTERRUPT PROCESSING5 MOV -2(R2),R1 ;GET CONTENTS OF DRIVE STATUS REGISTERR8 BITB #US.BSP,U.STS(R5) ;INTERNAL BACKSPACE IN PROGRESS?, BNE 280$ ;IF NE YES - CALL SERVICE ROUTINE<270$: MOV #IS.SUC&377,R0 ;ASSUME SUCCESS FOR VARIOUS REASONS TST (R2) ;ANY ERRORS?L BMI 280$ ;IF MI YESI TST U.SPC(R5) ;SPACING FILE? . BNE 280$ ;IF NE, YES. TREAT AS ERROR ANYWAY.6 CMPB (R2),#RWD+CS.RDY-CS.GO-CS.IE ;WAS THAT A REWIND? BNE 275$ ;IF NE NO% BIS #M.RWD,U.CW2(R5) ;SET STATUS BITC275$: JMP 500$ ;SUCCESS!!)280$: TST RTTBL(R3) ;DIAGNOSTIC FUNCTION?S BMI 290$ ;IF MI YESE+ BIT #DS.ILG!DS.CRE!DS.PAE!DS.BGL!DS.BTE,R1C% ; ANY ERRORS IN STATUS REG (MTS)?  BEQ 290$ ; IF EQ THEN NO CALL $DVERR ; LOG DEVICE ERROR2290$: CALL @INTADD(R3) ;CALL THE INTERRUPT ROUTINE, BIS #S2.ACT,S.ST2(R4) ;SET I/O ACTIVE FLAG- MOV (SP)+,INTADD(R3) ;SAVE INTERRUPT ADDRESSY1300$: RETURN ;WAIT FOR END OF NEXT COMMAND STEPA;N; WRITE LOGICAL FUNCTION;S(WRBLK: BIT #DS.TM,R1 ;DID WRITE SEE EOF? BNE 320$ ;IF NE YES$; ; WRITE TAPE MARK FUNCTION;S'WREOF: BIT #34404,R1 ;ANY OTHER ERRORS?R( BEQ 325$ ;IF EQ NO - REALLY SUCCESSFUL& MOV #IE.WLK&377,R0 ;ASSUME WRITE-LOCK BIT #DS.HWL,R1 ;WRITE LOCK? BNE 325$ ;IF NE YES " BIT #34400,R1 ;RECOVERABLE ERROR? BNE 320$ ;IF NE YESS;R; REWIND FUNCTIONS;G&REWND: MOV #IE.FHE&377,R0 ;FATAL ERROR BR 325$ ; .. CONT 7320$: MOV #IE.BBE&377,R0 ;ASSUME BAD TAPE OR EQUIVALENT # TSTB U.CW2(R5) ;SHOULD WE REWRITE?; BMI 325$ ;IF MI, NO." BIT #2,@R2 ;IS THIS A WRITE EOF? BNE 420$ ;IF NE YES< BIS #WTE-WRT,U.BUF(R5) ;DO WRITE WITH EXTENDED GAP FROM NOW BR 420$ ;DO THE OPERATIONE;K(325$: BR 490$ ;GO FINISH UP INT SERVICE;W; SPACE FILE FUNCTION;;N,SPCFL: BIT #DS.TM,R1 ;TAPE MARK ENCOUNTERED? BNE 350$ ;IF NE YESR/ MOV U.SPC(R5),2(R2) ;SOMETHING ELSE STOPPED US7;F; SPACE BLOCK FUNCTION;CSPCBK: BIT #DS.BOT,R1 ;AT BOT?3 BNE 490$ ;IF NE YES, NOT AN ERROR, BUT NEED STACKL BIT #DS.TM,R1 ;EOF? BEQ 340$ ;IF EQ NO& CALL CHKEOV ;SEE IF AT END OF VOLUME BCC 410$ ;IF CC NOT FOUND, BR 360$ ;POSITION TA00UttmkTADATADATADATADATADATAPE AT EOV 3340$: BIT #DS.BTE!DS.EOT,R1 ;BAD TAPE ERROR OR EOT? ( BNE RDBLK ;IF NE YES - NOT RECOVERABLE BR REWND ;FATAL;9350$: CALL CHKEOV ;DID TAPE REACH LOGICAL END OF VOLUME?0# BCC 370$ ;IF CC NO, TRY NEXT FILE;&360$: CALL BSPACE ;BACKSPACE THE TAPE" CALL @(SP)+ ;WAIT FOR COMPLETION; MOV #IE.EOV&377,R0 ;INFORM USER THAT EOV HAS BEEN DETECTEDN& BIS #M.AEOV,U.CW2(R5) ;SET STATUS BIT BR 380$ ;FIX COUNT AND RETURNE/370$: INC U.SPC(R5) ;ANOTHER TAPE MARK DETECTED, BNE 390$ ;IF NE NOT DONE-380$: MOV U.SPC(R5),2(R2) ;SET UP FINAL COUNTR- MOV S.PKT(R4),R3 ;GET THE I/O PACKET ADDRESSV+ MOV I.FCN(R3),-(SP) ;GET THE FUNCTION CODEO) BIC #IQ.UMD!IQ.X,(SP) ;CLEAR EXTRA BITS! CMP #IO.SPB,(SP)+ ;SPACE BLOCKS?;$ BNE 385$ ;NO -- LEAVE STATUS ALONE) CLR I.PRM+4(R3) ;CLEAR FOR STATUS RETURNV CLR 2(R2) ;...385$: BR 490$ ;RETURN TO USER(390$: BIS #M.EOF,U.CW2(R5) ;I SAW AN EOF+ MOV #1,2(R2) ;SET RECORD COUNT FOR SPACING ' MOV 2(R2),SPTBL(R3) ;SAVE RECORD COUNT,8 ADD #-CS.RDY+CS.GO+CS.IE,(R2) ;REISSUE SPACING COMMAND" CALL @(SP)+ ;WAIT FOR COMPLETION BR SPCFL ;SEE WHAT HAPPENED;I; READ LOGICAL FUNCTIONU;I*RDBLK: MOV #IE.BBE&377,R0 ;ASSUME BAD TAPE BIT #DS.BTE,R1 ;BAD TAPE/OPI? BEQ 405$ ;IF EQ, NO. CMP 2(R2),U.CNT(R5) ;BAD TAPE?P BNE 420$ ;IF NE, YES.S BR REWND ; ELSE - OPI.5405$: MOV #IE.DAO&377,R0 ;ASSUME RECORD LENGHT ERROR.2" BIT #DS.RLE,R1 ;RECORD LTH ERROR? BNE 490$ ;IF NE YESC!410$: MOV #IE.EOF&377,R0 ;TRY EOFC BIT #DS.TM,R1 ;EOF DETECTED?+ BNE 490$ ;IF NE YESA- MOV #IS.SUC&377,R0 ;ASSUME SUCCESS FOR EOT'SN BIT #DS.EOT,R1 ;EOT?H BNE 490$ ;IF NE NO& MOV #IE.VER&377,R0 ;ASSUME DATA ERROR420$: MOV R1,-(SP) ;SAVE R1. MOV S.PKT(R4),R1 ;RETREIVE I/O PACKRT ADDRESS* BITB #IQ.X,I.FCN(R1) ;RETRIES SUPPRESSED? BEQ 430$ ;IF EQ NO CONTINUEN MOV (SP)+,R1 ;RESTORE R1  BR 490$ ;EXITS430$: MOV (SP)+,R1 ;RESTORE R1& DECB RTTBL(R3) ;DECREMENT RETRY COUNT BLE 490$ ; IF LE NOO0 MOV INTADD(R3),U.SPC(R5) ;SAVE ORIGINAL ADDRESS! CALL BSPACE ;BACKSPACE THE TAPEM! CALL @(SP)+ ;WAIT FOR BACKSPACEO. MOV U.SPC(R5),INTADD(R3) ;RESTORE INT ADDRESS2 CLR U.SPC(R5) ;RESET TO INDICATE NOT SPACING FILE TST (SP)+ ;CLEAN UP THE STACKP JMP 177$ ;RETRY ;A-; END OF INTERRUPT SERVICE ROUTINE PROCESSINGP;S$490$: TST (SP)+ ;CLEAN UP THE STACK)500$: MOV R5,R3 ;MAKE A COPY OF UCB BASE1 ADD #U.CW2,R3 ;COMPUTE OFFSET TO MAG TAPE STATUSC$ MOV (R3),-(SP) ;SAVE CURRENT STATUS5 BIC #NEWBTS,(R3) ;CLEAR STATUS BITS TO BE DETERMINED BIT #DS.BOT,R1 ;AT BOT? BEQ 510$ ;IF EQ NO BIS #M.BOT,(R3) ;SET STATUS BIT510$: BIT #DS.TM,R1 ;TAPE MARK?E BEQ 520$ ;IF EQ NOT TAPE MARKC9 CMPB (R2),#SPR+CS.RDY-CS.IE-CS.GO ;WAS THAT A BACKSPACE?P2 BEQ 520$ ;IF EQ YES - DON'T SET INTERNAL EOF BIT BIS #M.EOF,(R3) ;SET STATUS BIT520$: MOV R1,-(SP) ;SAVE R10/ CALL MTDINT ;PASS DIAGNOSTIC DEVICE REGISTERS. MOV (SP)+,R1 ;RESTORE R1A) BCS 530$ ;IF CS FUNCTION WAS DIAGNOSTICN+ BIT #DS.ILG!DS.CRE!DS.PAE!DS.BGL!DS.BTE,R1S% ; ANY ERRORS IN STATUS REG (MTS)?  BEQ 530$ ; IF EQ THEN NO CALL $DVERR ; LOG DEVICE ERROR:530$: CMPB (R2),#RED+CS.RDY-CS.IE-CS.GO ;WAS THAT A READ?! BEQ 539$ ;IF EQ YES, IGNORE EOTE BIT #DS.EOT,R1 ;EOT?S BEQ 539$ ;IF EQ NO& TSTB R0 ;ALREADY RETURNING AN ERROR? BMI 538$ ;IF MI YEST,535$: MOV #IE.EOT&377,R0 ;SET FOR EOT STATUS4538$: BIS #M.EOT,(R3) ;REMEMBER EOT FOR NEXT COMMAND- MOV 2(R2),-(SP) ;PRESERVE THE COUNT REGISTERD0 BIS #CS.CLR,@R2 ;STOP THE DRIVE IF RUNNING AWAY, MOV (SP)+,2(R2) ;RESTORE THE COUNT REGISTER539$: TST (SP)+ ;CLEAN STACKC6540$: MOV S.PKT(R4),R1 ;RETRIEVE ADDRESS OF I/O PACKET6 BICB #S3.SIP,S.ST3(R4) ;RESET POSITIONING INPROGRESS* BIC #S2.ACT,S.ST2(R4) ; CLEAR I/O ACTIVE.- MOV I.PRM+4(R1),R1 ;GET ORIGINAL COUNT VALUEA" ADD 2(R2),R1 ;FIX COUNT REMAINING. MOVB S.CON(R4),R3 ; RETRIEVE CONTROLLER INDEX* MOVB RTTBL(R3),R2 ; GET FINAL RETRY COUNT0 BIS #RETRY*256.,R2 ; MERGE STARTING RETRY COUNT# CALL $IODON ;FINISH I/O OPERATIONI JMP MTINI ;GO AGAINP .DSABL LSBT;H@00Utsrbl; THIS SUBROUTINE CHECKS FOR THE LOGICAL END-OF-VOLUME CONDITION;,; RETURNS WITH CC IF NOT EOV.K; RETURNS WITH CS IF EOV. ;E)CHKEOV: MOV 2(R2),-(SP) ;SAVE FRAME COUNT2/ ADD U.CNT(R5),(SP) ;GET NUMBER ACTUALLY SPACEDT2 CMP (SP)+,#1 ;EXACTLY ONE? (COUNT STARTED WITH 1) CLC ;ASSUME NOT EOV BNE 30$ ;IF NE NO, NOT EOV .IF DF A$$NSI, BITB #US.LAB,U.STS(R5) ;MOUNTED ANSII TAPE?# BNE 30$ ;IF NE YES - EXIT WITH CCD .ENDC BIT #2,(R2) ;FORWARD SPACE?G# BNE 30$ ;IF NE NO - CANNOT BE EOVO$ BIT #M.EOF!M.BOT,U.CW2(R5) ;AT EOV?" BEQ 30$ ;IF EQ NO - EXIT WITH CC SEC ;EOV DETECTED30$: RETURN ;V;E:; THIS SUBROUTINE ISSUES A COMMAND TO BACKSPACE ONE RECORD;(CBSPACE: BISB #US.BSP,U.STS(R5) ;SET INTERNAL BACKSPACE IN PROGRESSA$ MOV #-1,2(R2) ;BACKSPACE ONE RECORD) MOVB #SPR,(R2) ;ISSUE BACKSPACE FUNCTION$ RETURNB;U/; THIS ROUTINE ATTEMPTS TO SELECT A TAPE DRIVE.I5; THE CURRENT STATUS OF THE DRIVE WITH REGARD TO 7CH,F#; BOT, AND HWL IS SET AT THIS TIME. ;N; ON RETURN: CC==>GOOD SELECT.; CS==>BAD SELECT;3*SELECT: CALL DRVSTS ;GET TAPE UNIT STATUS+ MOVB 1(R2),U.BUF+1(R5) ;SET UP FOR COMMANDN) MOV -2(R2),-(SP) ;SAVE TAPE UNIT STATUS.= BIC #,U.CW2(R5) ;CLEAR EXCESSN SEC ;ASSUME SELECT ERRORA$ BIT #DS.MOL,(SP) ;DID DRIVE SELECT?" BEQ 10$ ;IF EQ NO - SELECT ERROR6 BIT #DS.TUR!DS.RWS!DS.SDN,(SP) ;MAKE SURE DRIVE IS OK BNE 7$ ;IF NE OK BIT #RD.GAP,10(R2) ;LAST CHANCE' BEQ 10$ ;IF EQ VACUUM IS GONE - FATALN'7$: BIT #DS.TUR!DS.SDN,(SP) ;TRUST BOT?> BNE 8$ ;IF NE, YES.T' BIC #DS.BOT,(SP) ;MAY BE INTERMITTENT.V/8$: SWAB (SP) ;UNIT SELECTABLE. CARRY CLEARED.(8 BIC #^C,(SP) ;CLEAR EXTRA BITS BIS (SP),U.CW2(R5) ;5% BICB #US.ABO,U.STS(R5) ;NOT ABORTING 710$: INC (SP)+ ;CLEAN UP STACK WITHOUT AFFECTING CARRYI BCC 20$ ;IF CC GOOD SELECT+ BIS #M.SER,U.CW2(R5) ;SET SELECT ERROR BIT 20$: RETURN ;N;+F; SUBROUTINE SELECTS A TAPE UNIT AND TRIES TO OBTAIN TAPE UNIT STATUS.;$M; IF TAPE UNIT READY, DETERMINE 7/9 TRACK STATUS AND UPDATE U.CW3 ACCORDINGLYP;-#DRVSTS: MOV S.CSR(R4),R2 ;R2 - CSR.N) MOVB U.UNIT(R5),1(R2) ;SELECT TAPE UNIT.B+ MOV #50.,-(SP) ;INTERVAL TILL DEV REG RDY.5$: DEC (SP) ;INTERVAL OVER ?. BNE 5$ ;IF NE, NO.% BIT #DS.TUR,-2(R2) ;TAPE UNIT READY? - BEQ 10$ ;IF EQ, NO. BITS 0-5 NOT AVAILABLE. ( MOVB #UD.800,U.CW3(R5) ;INDICATE (ONLY)) MOVB #UD.UNS,U.CW3+1(R5) ;9TRACK/800BPI.R' BIT #DS.7CH,-2(R2) ;7TRACK TAPE UNIT ?B BEQ 10$ ;IF EQ, NO.* MOVB #UD.200,U.CW3(R5) ;INDICATE 7 TRACK,1 MOVB #UD.800,U.CW3+1(R5) ;200 TO 800BPI SUPPORT.S'10$: TST (SP)+ ;RETURN STACK AS FOUND.N RETURNR;+9; **-MTDINT-TM11 DIAGNOSTIC INTERRUPT AND TIMEOUT HANDLER;$?; IF ENTRY WAS FROM A DIAGNOSTIC CONTROL FUNCTION THEN MOVE I/OR7; PACKET WORDS 17-20 TO WORDS 20-21 FOR $CRPAS ROUTINE.5B; FOR ANY DIAGNOSTIC FUNCTION PASS THE UNIBUS DEVICE REGISTERS VIA; THE $CRPAS ROUTINE.C;0; INPUTS; R2= CSR ADDRESS7; R4= SCB ADDRESS;Q ; OUTPUTSQ; R1= IO PACKET ADDRESSW;-0MTDINT: MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESS CLC ;2 BITB #IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION CALL? BEQ 4$ ;IF EQ NO % MOV R1,-(SP) ;SAVE IO PACKET ADDRESS 3 CMPB #IO.EOF/256.,I.FCN+1(R1) ;WRITE EOF FUNCTION?C BEQ 1$ ;IF EQ YES> CMPB #IO.RWD/256.,I.FCN+1(R1) ;CNTRL FUNCT.OTHER THAN IO.EOF? BEQ 1$ ;IF EQ YES2 CALL $CRPAS ;PASS DEVICE REGISTERS TO DIAGNOSTIC( MOV (SP)+,R1 ;RESTORE IO PACKET ADDRESS BR 3$ ;RETURN 41$: MOV I.PRM+14(R1),I.PRM+16(R1) ;MOVE WD20 TO WD211 MOV I.PRM+12(R1),I.PRM+14(R1) ;MOVE WD17 TO WD20T52$: CALL $CRPAS ;PASS DEVICE REGISTERS TO DIAGNOSTIC ( MOV (SP)+,R1 ;RESTORE IO PACKET ADDRESS6 MOV I.PRM+14(R1),I.PRM+12(R1) ;MOVE WD20 BACK TO WD176 MOV I.PRM+16(R1),I.PRM+14(R1) ;MOVE WD21 BACK TO WD2073$: BIC #RD.LPC,10(R2) ;CLEAR LPC MODE BIT IN MTRD REG..+ SEC ;SET DIAGNOSTIC FUNCTION CALL RETURNS 4$: RETURN .END DIAGNOSTIC( MOV (SP)+,R1 ;RESTORE IO PACKET ADDRESS BR 3$ ;RETURN 41$: MOV I.PRM+14(R1),I.PRM+16(R100jt&tCtkTADATADATADATADATADATA .TITLE MUDRV - TMSCP DRIVER/ .SBTTL TAPEPRE - TMSCP PREFIX FILE DEFINITIONSo;n<; COPYRIGHT (c) 1985, 1988 BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;c; MODIFIED BY:;K; J. MELVIN 05-NOV-1987 V01.01B; JJM0403 - SUPPORT COMPARE HOST DATA FUNCTIONS FOR MU DRIVES;; J. MELVIN 03-MAR-1988 V01.02;; JJM0407 - UPDATE COPYRIGHT DATE FOR RSX-11-PLUS V4.1 ; MICRO/RSX V4.1T;A"; LENGTHS OF TMSCP COMMAND PACKETS;/RD.L = 14. ;# WORDS TO ALLOCATE FOR RD CMDE/WR.L = 14. ;# WORDS TO ALLOCATE FOR WR CMDS/CMP.L = 14. ;# WORDS TO ALLOCATE FOR CMP CMD .WTM.L = 6. ;# WORDS TO ALLOCATE FOR WTM CMD.ERS.L = 6. ;# WORDS TO ALLOCATE FOR ERS CMD.ERG.L = 6. ;# WORDS TO ALLOCATE FOR ERG CMD/REP.L = 10. ;# WORDS TO ALLOCATE FOR REP CMD/SUC.L = 18. ;# WORDS TO ALLOCATE FOR SUC CMD7.AVL.L = 6. ;# WORDS TO ALLOCATE FOR AVL CMD/ONL.L = 22. ;# WORDS TO ALLOCATE FOR ONL CMDP T$$APE = 1 ;ASSEMBLE FOR TAPE;O4; BIT DEFINITIONS FOR UCB CHARACTERISTICS WORD U.CW2;A'M.PEOV=100000 ;TAPE PAST LOGICAL EOVO$M.AEOV=40000 ;TAPE AT LOGICAL EOVM.BOT=20000 ;TAPE IS AT BOT.M.1600=4000 ;UNIT IS 1600 BPI PHASE ENCODED$M.HWL=2000 ;HARDWARE WRITE-LOCKED M.RWD=1000 ;UNIT IS REWINDING&M.SER=400 ;SELECT ERROR HAS OCCURED#M.IWR=200 ;INHIBIT WRITE RETRIES #M.SWL=100 ;SOFTWARE WRITE-LOCKEDA2M.TMK=40 ;ENCOUNTERED TAPE MARK - FWD DIRECTION1M.EOT=20 ;LAST COMMAND ENCOUNTERED END OF TAPEM.6250=10 ;UNIT IS 6250 BPICM.DEFM = M.PEOV!M.EOT!M.HWL!M.SWL!M.1600!M.6250!M.SER ;DEFAULT MASK6USRBTS = M.IWR!M.SWL ;STATUS BITS CONTROLLED BY USER IS AT BOT.M.1600=4000 ;UNIT IS 1600 BPI PHASE ENCODED$M.HWL=2000 ;HARDWARE WRITE-LOCKED M.RWD=1000 ;UNIT IS REWINDING&M.SER=400 ;SELECT ERROR HAS OCCURED#M.IWR=200 ;INHIBIT WRITE RETRIES #M.SWL=100 ;SOFTWARE WRITE-LOCKEDA2;?; MUPRE.MAC - PREFIX FILE FOR BUILDING MU LOADABLE CRASH DRIVERO;p; Created 11-JAN-88O;*C$$CDA=0 ; LOADABLE CRASH DRIVER SUPPORT3L$$CDA=0 ; LOADABLE CRASH DRIVERS TO BE ASSEMBLEDMU$$CD=0 ; CRASH DRIVER IS MURIVERS TO BE ASSEMBLEDDL$$CD=0 ; CRASH DRIVER IS DU4 .IIF DF R$$MPL .TITLE NETCM - CEX COMMON DATABASE3 .IIF NDF R$$MPL .TITLE CEXCM - CEX COMMON DATABASEr .IDENT /V03.19/ e;e; COPYRIGHT (C) 1987 BYg/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.c;s;"H; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDH; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THEH; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERH; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANYH; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY; TRANSFERRED.;MH; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICEH; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT; CORPORATION.;EH; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS9; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.R;T;T; MODULE DESCRIPTION: ; *; COMMUNICATIONS EXECUTIVE COMMON DATABASE;R; IDENT HISTORY:;A; 1.00 14-DEC-79; DECNET-11M/S V3.0O; DECNET-11M-PLUS V1.0;T; 3.00 16-APR-82; DECNET-11M V3.1; DECNET-11M-PLUS V1.1;O; 3.01 09-Sep-82,; Add Network management completion listhead?; Add Phase 4 cells ($NA, $NBRA, $NBEA, $AMAXH, $AMAXC, $HIORD)T;.; 3.02 12-Oct-823; Add cell for maximum protocol overhead from CETABO;I; 3.03 17-Nov-825; Add secondary host listhead for Server Base systems ;U; 3.04 30-Nov-82E; Add Broadcast routing timer ($ROUTB) and Broadcast router priority A ; ($RP00CtsrblRI)-;-; 3.05 16-Dec-82@; Merge NETCM M+ specific cells into common CEXCM, remove unused>; cells ($PBIAS,$PAVL) and remove IAS/D comditionals and code./; Condense new cells to one area of the common. /; Add $DECPT, $NMLST, $SPAR1, and $SPAR2 cells.T; Removed 50msec timer labels.;f; 3.06 20-Dec-82@; Conditionalized $PUMR for RSX11M only. This cell is defined in!; LOWCR for RSX-11M-PLUS systems.;; 3.07 21-DEC-82>; Keep Phase III symbols in for 1 release ($PAVL,$T50Q,$T50CL);y; 3.08 22-Dec-82>; Modify (correct) $XAVL cell to be .WORD 0 instead of .WORD 1;C; 3.09 22-Dec-82=; Remove S$$BAS conditional from $SHLST (Secondary Host List);o; 3.10 22-Dec-82?; Local node name ($NTNAM) must follow remote listhead ($RNNHD)A;c; 3.11 4-Jan-83 ; Correct URM location; ; 3.12 19-Jan-83'; conditionalize title for M and M Plusi;e; 3.13 03-Mar-83?; Place M+ conditional around cells moved to DECnet Home Block.P;e; 3.14 22-Mar-838; Add URM cells at the end of all timer queue blocks for&; RSX-11M-Plus multi-processor systems;n; 3.15 28-Mar-838; Put back 4 cells for 3271 product (uses 1.0 comm exec); ; 3.16 3-May-83i3; Correct table of timer blocks for multiprocessors);s; 3.17 16-Oct-84'; Add symbols for $ZTIME+2 and $NMCLH+2 ;r; 3.18 20-Oct-86(; Add $LTEEP LAT exit entry point vector;f; 3.19 29-May-87<; Increase the size of the Event Descriptor Block by 3 words;o .IF DF M$$NET .IF NDF R$$MPL- .MCALL CCBDF$,NKRDF$,OPTDF$ CCBDF$ ; DEFINE CCB OFFSETS- NKRDF$ <:>,<=> ; DEFINE NETWORK KRB OFFSETS.$ OPTDF$ ; DEFINE CEX OPTIONS FLAGS .PSECT CEXCOM .ENDC ; NDF R$$MPL. M;+(; COMMUNICATION SYSTEM COMMON DATA BASE; ( ORDERING IMPACTS VNP );-;- d/$PDVTA::.BLKW 1 ; ADDRESS OF PDV ADDRESS TABLE2/$SLTMA::.BLKW 1 ; ADDRESS OF SLT ADDRESS TABLEr8$LLCTA::.BLKW 1 ; ADDRESSS OF LLC REVERSE MAPPING TABLE($PDVNM::.BLKW 1 ; NUMBER OF PDV ENTRIES)$SLTNM::.BLKW 1 ; NUMBER OF SYSTEM LINESN'$CCBNM::.BLKW 1 ; # OF CCB'S ALLOCATEDF $CCBSZ::.BLKW 1 ; # BYTES / CCB'$RDBNM::.BLKW 1 ; # OF RDB'S ALLOCATEDX $RDBSZ::.BLKW 1 ; # BYTES / RDB'$SDBNM::.BLKW 1 ; # OF SDB'S ALLOCATEDU $SDBSZ::.BLKW 1 ; # BYTES / SDB7$CCBCT::.BLKW 1 ; COUNTER OF CURRENT # OF CCBS IN POOL :$CCBAF::.BLKW 1 ; COUNTER OF # OF CCB ALLOCATION FAILURES:$LDBAF::.BLKW 1 ; COUNTER OF # OF LDB ALLOCATION FAILURES:$CCBAL::.BLKW 1 ; COUNTER OF # OF DYNAMIC CCB ALLOCATIONS;$RDBTH::.BLKW 1 ; POOL THRESHOLD FOR LDB ALLOCATON FAILURE :$CMPDV::.BLKW 1 ; PDV INDEX OF CURRENT DISPATCHED PROCESS2$ZTIME::.BLKW 1 ; TIME SINCE COUNTERS LAST ZEROED0$ZTIM2::.BLKW 1 ; TIME SINCE SYSTEM LAST ZEROED ' .IF DF M$$PRO .WORD 0 ; UNIBUS RUN MASK  .ENDC5$CMFRK::.WORD 0 ; INITIAL LINK MARKS FORK BLOCK FREE:# .WORD 0 ; ADDRESS OF FORK PROCESST .WORD 0 ; FORK PROCESS QUEUE .WORD .-2- .WORD 0 ; APR5 BIAS FOR FORK LEVEL DISPATCHC# ; FREE WORD ON UNMAPPED SYSTEMSS%$T50Q:: ; PHASE III COMPATIBILITY D'$T100Q::.WORD 0 ; 100 MSEC TIMER QUEUEP .WORD .-2$STMFC:: .IF NDF R$$MPLZA .WORD FC.TIM+FS.STM ; FUNCTION CODE TO DISPATCH 50 MSEC TIMEOUTS; .IFF ; NDF R$$MPL .WORD 0 .ENDC ; R$$MPLP$$T50CL:: ; PHASE III COMPATIBILITY4$T100C::.WORD 0,0,0,0,0 ; 100 MSEC CLOCK QUEUE ENTRY) .WORD 0 ; ADDRESS OF PROCESSING ROUTINET ; (FILLED IN BY NTL)* .WORD 0 ; APR5 BIAS FOR LOADABLE DRIVERS .IF DF M$$PRO .WORD 0 ; Unibus run maskM .ENDC M$LTMFC:: .IF NDF R$$MPLI> .WORD FC.TIM+FS.LTM ; FUNCTION CODE TO DISPATCH LONG TIMEOUTS .IFF ; NDF R$$MPL .WORD 0 .ENDC ; NDF R$$MPL+4$T1SCL::.WORD 0,0,0,0,0 ; 1 SECOND CLOCK QUEUE ENTRY) .WORD 0 ; ADDRESS OF PROCESSING ROUTINEP ; (FILLED IN BY NTL)* .WORD 0 ; APR5 BIAS FOR LOADABLE DRIVERS .IF DF M$$PRO .WORD 0 ; Unibus run maskF .ENDC/$DECPT::.WORD 0 ; Pointer to DECnet Home Block -$PSIPT::.WORD 0 ; POINTER TO PSI HOME BLOCKO"$SNAPT::.WORD 0 ; POINTER FOR SNA $DDFNC:: .IF NDF R$$MPLP1 .WORD FC.PWR ; POWERFAIL RECOVERY FUNCTION CODEH00CttCtkTADATADATADATADATADATA .IFF ; NDF R$$MPL .WORD 0 .ENDC ; NDF R$$MPLC,$CCBLH::.BLKW 1 ; POINTER TO FIRST FREE CCB3$SDBCT::.BLKW 1 ; COUNTER OF CURRENT SDB'S IN POOLS:$SDBLH::.BLKW 1 ; POINTER TO FIRST FREE SMALL DATA BUFFER- .BLKW 1 ; SECOND HALF OF ADDRESS DOUBLEWORDD:$SDBAF::.BLKW 1 ; COUNTER OF # OF SDB ALLOCATION FAILURES3$RDBCT::.BLKW 1 ; COUNTER OF CURRENT RDB'S IN POOLO7$RDBLH::.BLKW 1 ; POINTER TO FIRST FREE RECEIVE BUFFER- .BLKW 1 ; SECOND HALF OF ADDRESS DOUBLEWORDW:$RDBAF::.BLKW 1 ; COUNTER OF # OF RDB ALLOCATION FAILURES?$RDQSL::.BLKW 1 ; SYSTEM LINE # TO CHECK ON NEXT BUFFER RETURNE:$RDQCT::.BLKW 1 ; NUMBER OF BUFFER WAIT REQUESTS AND FLAG7$NTLPT::.BLKW 1 ; NTL POINTER TO IMPURE AREA IN NTPOOLR-$CXOPT::.BLKW 1 ; COMM/EXEC OPTIONS INCLUDEDD S1$NBIAS::.BLKW 1 ; POINTER TO NON-UMR MAPPED POOLL8$QBIAS::.BLKW 1 ; POINTER TO UMR-MAPPED PORTION OF POOL>$QSTRT::.BLKW 1 ; ORIGINAL BIAS OF UMR-MAPPED PORTION OF POOL .IF NDF R$$MPLL$$PUMR:: .BLKW 1 ; STARTING UMR BIAS .ENDC U"$PWRF1::.BLKW 1 ; POWER FAIL FLAG4$XBIAS::.BLKW 1 ; BIAS OF EXTENDED SINGLE WORD POOL$$PAVL:: ; PHASE III COMPATIBILITY?$XAVL:: .WORD 0 ; POINTER TO FIRST FREE BLOCK IN EXTENDED POOLR($NMLST::.WORD 0 ; Logical Name Listhead($OBJHD::.BLKW 1 ; OBJECT TABLE LISTHEAD.$TK100:: ; NUMBER OF CLOCK TICKS IN 100 MSEC3$TCK50::.WORD 4 ; NUMBER OF CLOCK TICKS IN 50 MSECL@$SQRCM::.BYTE 0 ; SQ ROOT LIMIT FOR COMPONENT BUFFER ALLOCATION' .BYTE 0 ; NUMBER OF ACTIVE COMPONENTST-$MAXOV::.BLKW 1 ; MAXIMUM PROTOCOL OVERHEAD F,$LGPDV::.BLKW 1 ; PDV INDEX OF EVENT LOGGER3$LGDDB::.BLKW 1 ; ADDRESS OF EVENT LOGGER DATABASE($FILHD::.BLKW 1 ; EVENT FILTER LISTHEAD&$LGSTT::.BLKW 1 ; EVENT LOGGER STATUS+$EVDSC::.BLKW 11. ; EVENT DESCRIPTOR BLOCKJ8$LGFNB::.BLKW 3 ; EVENT LOGGER FILENAME BLOCK - FILE ID .RAD50 /EVENTLOG/ ; FILENAMEM .RAD50 /SYS/ ; FILE TYPE .BLKW ; VERSION NUMBERO .ASCII /LB/ ; DEVICE NAME  .BLKW ; AND UNIT;$LGUIC::.BYTE 6,1 ; UIC FOR LOGGING FILE (DEFAULT = [1,6])P+$LGMON::.RAD50 /MON.../ ; MONITOR TASK NAMEI*$LGCON::.ASCII /CO/ ; CONSOLE DEVICE NAME .WORD 0 ; AND UNITT;$CELFN::.WORD 0 ; CEX LOGGING FUNCTION CODE (MUST BE ZERO)K9$NMCLH::.WORD 0 ; NETWORK MANAGEMENT COMPLETION LISTHEADR$NMCL2::.WORD .-2F .IF DF R$$MPL)$NETPF::.WORD 0 ; POWERFAIL ENTRY POINT 3$NTLAL::.WORD 0 ; NTL POINTER TO CEX POOL LISTHEAD. W .IF DF M$$PRO .,TIMERS: .WORD -1 ; SHOW TIMER IS NOT ACTIVE4 .WORD 0,0,0,0,0 ; PROCESSOR #1 DEPENDANT ONE SECOND .WORD 0 ; TIMER QUEUE BLOCK .WORD 0 .WORD 0$$$STM=.-TIMERSI2 .WORD 0,0,0,0,0 ; PROCESSOR #1 DEPENDANT 100 MSEC .WORD 0 ; TIMER QUEUE BLOCK .WORD 0 .WORD 0$$$LEN=.-TIMERSH .REPT M$$PRO-1K% .WORD -1 ; SHOW TIMER IS NOT ACTIVE28 .WORD 0,0,0,0,0 ; PROCESSOR #2 - N DEPENDANT ONE SECOND .WORD 0 ; TIMER QUEUE BLOCK .WORD 0 .WORD 06 .WORD 0,0,0,0,0 ; PROCESSOR #2 - N DEPENDANT 100 MSEC .WORD 0 ; TIMER QUEUE BLOCK .WORD 0 .WORD 0 .ENDR$$$OFF=2$1SCTB::.REPT M$$PRO@ .WORD TIMERS+$$$OFF ; POINTER TO PROCESSOR DEPENDANT TIMER CELL$$$OFF=$$$OFF+$$$LEN .ENDR $$$OFF=$$$STM0$STMTB::.REPT M$$PRO@ .WORD TIMERS+$$$OFF ; POINTER TO PROCESSOR DEPENDANT TIMER CELL$$$OFF=$$$OFF+$$$LEN .ENDR=$CRESL::LCKDF$ SPIN ; SERIALIZE ACCESS TO COMMEXEC RESOURCES   .ENDC ; M$$PRO  .ENDC ; R$$MPLO*$SHLST::.WORD 0 ; SECONDARY HOST LISTHEAD8$IMASK:: ; For 3271 back compatibility (1.0 comm exec)$EMASK:: ; ....$ETIMR:: ; ...$/$SPAR1::.WORD 0 ; First Double word spare cellF .WORD 08$PBIAS:: ; For 3271 back combatibility (1.0 comm exec)0$SPAR2::.WORD 0 ; Second Double word spare cell .WORD 0;$< .IF DF R$$MPL ; Leave cells for M+ backwards compatability;$,; Cells to be moved to the DECnet Home Block;A+$ANNHD::.BLKW 1 ; ALIAS NODE NAME LISTHEAD$.$RNNHD::.WORD .+2 ; REMOTE NODE NAME LISTHEAD1 .WORD 0 ; TEMPORARY END OF REMOTE NAME LISTHEADc"$NTNAM::.BLKB 6 ; LOCAL NODE NAME$$NSPNM::.BLKW 1 ; LOCAL NODE NUMBER4$NODID::.BLKW 1 ; LEN00CtttblGTH OF LOCAL NODE IDENT STRING' .BLKB 32. ; LOCAL NODE IDENTIFICATIONy$$HOST:: .BLKW 1 ; HOST NODE ADDRESS4$NLN:: .BLKW 1 ; NUMBER OF ROUTING CHANNELS FOR NSP+$NN:: .BLKW 1 ; NUMBER OF NODES IN NETWORKi$MAXC:: .BLKW 1 ; MAXIMUM COSTt$MAXH:: .BLKW 1 ; MAXIMUM HOPS:-$MAXV:: .WORD 20. ; MAXIMUM VISITATION COUNTW.$SQRTL::.BLKW 1 ; SQUARE ROOT LIMITING FACTOR,$ROUTM::.WORD 30. ; ROUTING TIMER (SECONDS);: .ENDC ; R$$MPLN; !; SYNC AND PAD BUFFER DESCRIPTORS ;B $SYNC==226K $SYNCT==8. $PAD==377 $PADSH==2. $PADKL==10.$SYNB::I .WORD 0 .WORD $SYNBFB .WORD $SYNCTO$PADB:: .WORD 0 .WORD $PADBFO .WORD $PADKLE$PADBF:: .REPT $PADKL; .BYTE $PADD .ENDR$SYNBF:: .REPT $SYNCT; .BYTE $SYNC .ENDR;K; COMM EXEC FREE SPACE POINTER;  .IF NDF R$$MPLS .PSECT $$$POL .WORD 3 ; ROUNDING FACTORL.$CEAVL::.WORD 0 ; POINTER TO FIRST FREE BLOCK .WORD 0 .PSECTN .IFF ; NDF R$$MPL .IF NDF K$$DASE9$LTEEP::.WORD $SPVEX ; LAT PROCESS TASK EXIT ENTRY POINT$) ; ADDRESS. INITIALIZED TO A RETURN IND& ; IN IOSUB, WILL BE FILLED IN WHEN ; LAT IS LOADEDO .IFF ; NDF K$$DAS$LTEEP::.WORD 0. .ENDC ; NDF K$$DASA .ENDC ; NDF R$$MPL. .ENDC ; DF M$$NET .IF DF R$$MPL3$NTEND:: ; END OF ARE TO DEALLOCATE IN SET /NOCEXS ; MCR COMMAND .ENDC ; R$$MPLI C .ENDC .TITLE NETLC .IDENT /01.02/ ;; COPYRIGHT (C) 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; VERSION 01;; J. E. PROVINO 21-SEP-78;; MODIFIED BY:;; J. FORECAST 19-OCT-78*; JF001 -- ADD ACTIVE LINE COUNT ($ACTLN);; J. FORECAST 22-OCT-80; JF002 -- NEW TIMER SUPPORT;+*; LOW CORE DATABASE FOR DECNET SUPPORT ;- .IF DF M$$NET8$PUMR:: .WORD 0 ; STARTING UMR BIAS FOR THIS PROCESSOR 2$UMRPT::.WORD 0 ; POINTER TO UMR ALLOCATION BLOCK ; FOR THIS PROCESSOR,$ACTLN::.WORD 0 ; COUNT OF ACTIVE NPR LINES .IF DF M$$PRO?$M100Q::.WORD 0,.-2 ; PROCESSOR DEPENDANT 100 MSEC TIMER QUEUEV .IFFP$M100Q:: .ENDC  .ENDC  9 T .END JF001 -- ADD ACTIVE LINE COUNT ($ACTLN);; J. FORECAST 22-OCT-80; JF002 -- NEW TIMER SUPPORT;+*; LOW CORE DATABASE FOR DECNET SUPPORT ;- . .TITLE NLDRV( .IDENT /04/ ;;E; COPYRIGHT (C) 1976, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.$;IA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDG9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.C;M ; VERSION 03;O; E. L. BAATZ 22-JUL-76 ; ; MODIFIED BY:;.; ERIC BAATZ 20-JAN-794; EB188 -- CONVERT FOR RSX-11M-PLUS (USE DDT$ MACRO);W; ; NULL DEVICE DRIVER.A;;; MACRO LIBRARY CALLSO;A; EQUATED SYMBOLS+; ; LOCAL DATA;T9; NO CONTROLLER IMPURE DATA TABLES (THERE IS NO DEVICE TO ; CAUSE INTERRUPTS)I; ; DRIVER DISPATCH TABLEY;D DDT$ NL,,NONE,,,NEW;+7; NLDRV AND DRQIO IMPLEMENT A DEVICE NL:, WHICH ACTS AS 5; 1) A SINK FOR ALL INFORMATION SEND TO IT (IO.WLB)C?; 2) A SOURCE FOR AN INFINITE NUMBER OF END OF FILES (IO.RLB)B?; 3) A SOURCE FOR AN INFINITE NUMBER OF NULL RECORDS (IO.RLB)U$; IF "IE.EOF" IS CHANGED TO "IS.SUC";-;VE; DRQIO (BECAUSE THE UC.QUE BIT IS SET IN THE UCB) SETS THE REGISTERSA; TO THE FOLLOWING:E;M; R1 = ADDRESS OF I/O PACKET; R4 = ADDRESS OF SCBE; R5 = ADDRESS OF UCBD;A); ONLY TWO FIELDS OF AN I/O PACKET MATTER /; I.FCN+1 = THE I/O FUNCTION CODE. ONLY IO.WLBS ; AND IO.RLB MAKE IT TO NLDRV-; I.PRM+4 = IF I.FCN+1 IS IO.WLB, THIS IS THE .; NUMBER OF BYTES THE CALLER WANTS TO WRITE;)-NLINI: MOV R1,R3 ;POINT AT PACKET FOR $IOFINS, MOV #IS.SUC&377,R0 ;A WRITE ALWAYS SUCCEEDS/ MOV I.PRM+4(R1),R1 ;SAY EVERYTHING WAS WRITTENT. CMPB #IO.WLB/400,I.FCN+1(R3) ;WANTS TO WRIT00tttkTADATADATADATADATADATAE? BEQ 10$ ;IF EQ YES! MOV #IE.EOF&377,R0 ;IT IS A READO CLR R1 ;READ NO CHARACTERS%10$: CALLR $IOFIN ;FINISH OFF PACKETT TNLCAN:NLOUT:NLPWF:NLKRB:NLUCB: RETURN. .END AND IO.RLB MAKE IT TO NLDRV-; I.PRM+4 = IF I.FCN+1 IS IO.WLB, THIS IS THE .; NUMBER OF BYTES THE CALLER WANTS TO WRITE;)-NLINI: MOV R1,R3 ;POINT AT PACKET FOR $IOFINS, MOV #IS.SUC&377,R0 ;A WRITE ALWAYS SUCCEEDS/ MOV I.PRM+4(R1),R1 ;SAY EVERYTHING WAS WRITTENT. CMPB #IO.WLB/400,I.FCN+1(R3) ;WANTS TO WRIT .TITLE NVRUPT .IDENT /01.01/$; ; COPYRIGHT (C) 1982; ALL RIGHTS RESERVED/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.$;D?; THIS SOFTWARE IS FURNISHED UNDER LICENSE AND MAY ONLY BE USED 6; OR COPIED ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;2; VERSION 01.01 ;H; M. C. OZUR 16-APR-82;N; MODIFIED BY:; ;N; T. LEKAS 3-JUNE-82 01.01;B/; TL191 -- CHANGE REFERENCES TO $CTFEA AND CF.M-; TO THE SECOND HARDWARE FEATURE MASK WORDE;I; MACRO LIBRARY CALLST;0 .MCALL HWDDF$% HWDDF$ ; DEFINE HARDWARE REGISTERSY .ENABL LC; *; INCREMENT THE KEYSTROKE COUNT IN THE NVR;R+$KEYUP::BIT #H2.NVR,$HFMSK+2 ;NVR PRESENT?S BEQ 10$ ;IF EQ NON SEC ;SET CARRY FOR INCREMENTP' ADCB @#N.KEY ;ADD CARRY TO FIRST BYTEE) ADCB @#N.KEY+2 ;CASCADE CARRY THROUGH...R" ADCB @#N.KEY+4 ; THE NEXT 3 BYTES ADCB @#N.KEY+6 ;N10$: RETURN ;DONE1; 2; INCREMENT THE RX50'S READ/WRITE COUNT IN THE NVR;D+$DZAUP::BIT #H2.NVR,$HFMSK+2 ;NVR PRESENT?R BEQ 10$ ;IF EQ NOC SEC ;SET CARRY FOR INCREMENTR' ADCB @#N.DZA ;ADD CARRY TO FIRST BYTER) ADCB @#N.DZA+2 ;CASCADE CARRY THROUGH...K" ADCB @#N.DZA+4 ; THE NEXT 3 BYTES ADCB @#N.DZA+6 ;I10$: RETURN ;DONE ; 2; INCREMENT THE RD50'S READ/WRITE COUNT IN THE NVR;E+$DWAUP::BIT #H2.NVR,$HFMSK+2 ;NVR PRESENT? BEQ 10$ ;IF EQ NO  SEC ;SET CARRY FOR INCREMENT' ADCB @#N.DWA ;ADD CARRY TO FIRST BYTEH) ADCB @#N.DWA+2 ;CASCADE CARRY THROUGH...D" ADCB @#N.DWA+4 ; THE NEXT 3 BYTES ADCB @#N.DWA+6 ;I10$: RETURN ;DONE ; 0; INCREMENT THE MINUTES OF O/S UPTIME IN THE NVR;T+$UPTUP::BIT #H2.NVR,$HFMSK+2 ;NVR PRESENT?K BEQ 10$ ;IF EQ NOH SEC ;SET CARRY FOR INCREMENTI' ADCB @#N.UPT ;ADD CARRY TO FIRST BYTE ) ADCB @#N.UPT+2 ;CASCADE CARRY THROUGH..." ADCB @#N.UPT+4 ; THE NEXT 3 BYTES ADCB @#N.UPT+6 ; ! MOV $NVRCT,$NVRTM ;RESET COUNTERN10$: RETURN ;DONEW;+7; $SETCK - SETUP NONVOLATILE CLOCK (MC146818 CMOS Chip)R;H; Description:;+5; Copies the RSX date/time vector (from SYSCM) to the 8; NV clock chip. This is done when the date/time vector8; is modified via the SET TIME directive. Once the chip2; is update, RSX and the clock chip maintain time6; independently of each other. The clock chip will be7; read at boot time to reload the RSX date/time vector.T;-,$SETCK::MOV $CKCSR,R5 ;GET THE CT CLOCK CSR2: BIS #206,-2(R5) ;ENABLE "SET" MODE, BINARY DATA, 24 HOUR. ; UPDATES INHIBITED.-5$: BIT #200,-4(R5) ;IS AN UPDATE IN PROGRESSt( BNE 5$ ;IF NE, YES WAIT FOR COMPLETION- MOV #$TTNS,R4 ;GET POINTER TO SECONDS VECTORt MOV R5,R3 ;POINT TO SECONDS...! SUB #30,R3 ; IN THE CLOCK CHIP) MOV #3,R2 ;COPY SECONDS, MINUTES, HOURSi10$: MOV -(R4),(R3)+ ;MOVE IT  CLR (R3)+ ;CLEAR THE ALARMS SOB R2,10$ ;DONE?o CLR (R3)+ ;CLEAR DAY OF WEEK" MOV #3,R2 ;COPY DAY, MONTH, YEAR20$: MOV -(R4),(R3)+ ;MOVE IT2 SOB R2,20$ ;DONE?D5 BIC #200,-2(R5) ;DISABLE "SET" MODE. UPDATE STARTED.I RETURN ;DONE  .END IN PROGRESSt( BNE 5$ ;IF NE, YES WAIT FOR COMPLE .TITLE OLRSRT .IDENT /04.01/S;C; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.E; ALL RIGHTS RESERVED.;R<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; K. E. KINNEAR 27-JUN-78;;); MODIFIED FOR RSX-11M-PLUS VERSION 2 BY:<;C; P. J. BEZEREDI;G; MODIFIED BY:;.; J. M. LAWLER 01-JUN-82 04.01;O,; JL110 -- CONDITIONALIZE MODULE ON R$$CON &; ADD SUBROUTINE $VOLSC FOR PHASE 2"; 00tttbl SUPPORT OF AUTOMOUNT/DISMOUNT;S;; ); ONLINE RECONFIGURATION SERVICE ROUTINESE;P T;+3; **-$KRBSC-CALL DRIVER AT KRB STATUS CHANGE ENTRY.R;SB; THIS ROUTINE WILL CALL THE DRIVER AT ITS KRB STATUS CHANGE ENTRYD; SPECIFIED IN THE DDT. IF THE DRIVER IS A COMMON INTERRUPT DRIVER,C; THEN IT WILL BE CALLED AT THE CI.KRB ENTRY. ENTRY CONDITIONS AREG9; DETAILED IN THE ROUTINE BODY. IF THE ENTRY ADDRESS = 0 9; THEN THE DRIVER OR COMMON INTERRUPT ROUTINE WILL NOT BET ; CALLED.F;P ; INPUTS: ;P3; $SCDEV=KRB ADDRESS OF CONTROLLER CHANGING STATUS.N"; $SCOFL=BYTE FLAG ONLINE/OFFLINE:;+'; -1 --> ONLINE TO OFFLINE TRANSITION.H'; 0 --> OFFLINE TO ONLINE TRANSITION.L;; 100 --> OFFLINE TO ONLINE TRANSITION SPECIAL CASE.E;T3; $SCCTB=CTB ADDRESS OF CONTROLLER CHANGING STATUS.N; ; OUTPUTS:;A=; DRIVER HAS BEEN CALLED AT ENTRY. WHEN $SCDEV GOES TO ZERO,OB; THEN $SCERR (BYTE VALUE) CONTAINS STATUS (I.E. WHETHER OPERATION?; WAS ACCEPTED OR REJECTED). NEGATIVE VALUES SIGNAL REJECTION, $; ONE SIGNALS SUCCESSFUL COMPLETION.; B; $SCDEV MAY TAKE SOME TIME TO GO TO ZERO. ALLOW AT LEAST 60 SECS.;F; NO REGISTERS ARE PRESERVED.F;N"; APR5/APR6 MAPPING IS PRESERVED.;-<; NOTE: $KRBSC AND $UCBSC MUST NOT BE USED TOGETHER, AS THEY%; USE COMMON PARAMETER PASSING AREAS.S;- ( .IF DF R$$CON ;RECONFIGURATION SUPPORT .ENABL LSBC&$KRBSC::MOV $SCCTB,R3 ;GET CTB ADDRESS$ MOVB #1,$SCERR ;SHOW SUCCESS STATUS' MOV KINAR5,-(SP) ;SAVE I-SPACE MAPPINGE I V .IF DF K$$DAS I' MOV KDSAR5,-(SP) ;SAVE D-SPACE MAPPING.  .ENDC M T8 MOV #REMAP,-(SP) ;SET ADDRESS TO RESTORE KISAR5, KDSAR5+ MOV L.DCB(R3),R4 ;GET DCB POINTER FROM CTBP8 BITB #LS.CIN,L.STS(R3) ;IS THIS A COMMON INTERRUPT CTB? BNE 10$ ;IF NE YES A;H:; DRIVER IS NOT COMMON INTERRUPT DRIVER -- HAS UCB AND MAY; OR MAY NOT BE LOADED DRIVER.; .1 MOV D.UCB(R4),R5 ;GET ANY UCB FOR DRIVER MAPPING, MOV D.DSP(R4),R4 ;GET DRIVER DISPATCH TABLE BNE 5$ ;IF NE DRIVER IS LOADED ;D; DRIVER IS NOT LOADED -- RETURN IE.HWR (HANDLER NOT RESIDENT) ERROR; $ MOVB #IE.HWR,$SCERR ;SET ERROR CODE T25$: MOV U.SCB(R5),R2 ;GET SCB ADDRESS (OF ANY SCB)) MOV S.KS5(R2),KINAR5 ;MAP DRIVER I SPACEH A M .IF DF K$$DAS ) MOV S.KS5(R2),KDSAR5 ;MAP DRIVER D SPACEO O .ENDC U D BR 15$ ;REENTER FLOW910$: ADD #CI.KRB-D.VKRB,R4 ;MAKE R4 LOOK LIKE DDT POINTER 15$: ;REFERENCE LABEL N  .IF DF M$$PRO G MOV $SCDEV,R2 ;GET KRB ADDRESS & MOV K.URM(R2),R2 ;GET UNIBUS RUN MASK MOV #20$,R3 ;SET UP FOR $EXROP CALLR $EXROPS N .IFTF ;&; AT THIS POINT, WE ARE ON CORRECT CPU; 20$: ;REFERENCE LABEL R .IFT  % MOV $SCCTB,R3 ;GET CTB ADDRESS AGAIN  P .ENDC M . MOV $SCDEV,R2 ;GET KRB ADDRESSK) ASRB $SCOFL ;CHECK IF ONLINE OR OFFLINE4 BCS 30$ ;IF CS OFFLINE TRANSITION (DONT CHECK CSR)" MOV #30$,-(SP) ;SET UP FOR $SGFIN" CALL $SGFIN ;WE EXPECT NXM TRAPS ;P>; SEE IF DRIVER IS COMMON INTERRUPT DRIVER. IF IT IS, THEN IF>; ITS CI.CSR ENTRY IS NON-ZERO, CALL IT THERE TO TEST THE CSR.@; OTHERWISE, TEST THE CSR JUST LIKE WE DO FOR ALL OTHER DEVICES.;  00 BITB #LS.CIN,L.STS(R3) ;IS IT COMMON INT DRIVER" BEQ 23$ ;IF EQ NO -- NORMAL TEST/ TST D.VKRB+(R4) ;IS CI.CSR ZEROA# BEQ 23$ ;IF EQ YES -- NORMAL TESTN ;S5; CALL COMMON INTERRUPT DRIVER AT CI.CSR ENTRY POINT.#;,; ENTRY CONDITIONS:F;; R2=KRB ADDRESS.X; R3=CTB ADDRESS.;7; $SGFIN HAS BEEN CALLED, THEREFORE DRIVER IS PROTECTEDE5; FROM NXM TRAPS. ON TST INSTRUCTIONS, IF C BIT CLR,T6; THEN LOCATION WAS THERE. IF C BIT SET, THEN LOCATION; CAUSED A NXM TRAP.; 3; NO REGISTERS ARE AVAILABLE FOR USE -- DRIVER MUSTR&; SAVE AND RESTORE ANY REGISTERS USED.;D; EXIT CONDTIONS:B;4; NO REGISTERS CAN BE CHANGED.;Q; IF DEVICE PRESENT, C BIT CLR.A#; IF DEVICE NOT PRESENT, C BIT SET.E;Y I. CALL @D.VKRB+(R4) ;CALL DRIVER BR 24$ ;REENTER CODE FLOW#23$: TSTB @(R2) ;IS THE CSR THERE? 24$: BCC 25$ ;IF CC YES. MOVB #IE.OFL,$SCE00tttkTADATADATADATADATADATARR ;SHOW NO CSR ERROR STATUS25$: RETURN ;EXIT $SGFIN230$: TSTB $SCERR ;HAVE WE ALREADY FOUND AN ERROR?4 BMI 50$ ;IF MI YES -- SKIP CALL TO DRIVER AND EXIT, ASRB $SCOFL ;GET OFFLINE BIT INTO SIGN BIT ;X@; CALL DRIVER AT KRB STATUS CHANGE ENTRY. ENTRY CONDITIONS ARE:;R; INPUTS TO DRIVER: ;D); R2=KRB ADDRESS FOR KRB CHANGING STATUS.L#; R3=CTB ADDRESS FOR THE ABOVE KRB.R); 0(SP)=RETURN ADDRESS FOR COMPLETION.T.; 2(SP)=RETURN ADDRESS TO CALLER OF $KRBSC.'; CARRY BIT CONTAINS STATUS TRANSITION: ;O(; C=1 --> ONLINE TO OFFLINE TRANSITION.(; C=0 --> OFFLINE TO ONLINE TRANSITION.;? ; $SCERR=1.I=; $SCOFL=POSITIVE/NON-ZERO IF SPECIAL OFFLINE TO ONLINE CASE.F;E#; RETURNED INFORMATION FROM DRIVER:I; +; DRIVER MUST EVENTUALLY RETURN CONTROL TO: ;:6; 0(SP) THEN THE RETURN STATUS IS CONTAINED IN $SCERR:;A,; $SCERR < 0 --> OPERATION NOT SUCCESSFUL.(; $SCERR = 1 --> OPERATION SUCCESSFUL./; $SCERR = 0 --> SPECIAL CASE OPERATION STILL$; IN PROGRESS.;T+; IF $SCERR < 0, THEN VALUE IS ERROR CODE.N;O;; DRIVER MUST RETURN WITHIN 60 SECS. (USE THE S.CTM TIMEOUT.; FEATURE IF NECESSARY.);P,; ALL REGISTERS ARE AVAILABLE TO THE DRIVER.;E ;A; AT THIS TIME, THE CARRY BIT CONTAINS INFORMATION FOR THE DRIVERR;R O<40$: MOV D.VKRB(R4),R0 ;TEST FOR ZERO WITHOUT CHANGING C-BIT! BEQ 50$ ;IF EQ DONT CALL DRIVERE CALL @D.VKRB(R4) ;CALL DRIVER#50$: MOV $SCDEV,R2 ;GET KRB ADDRESS # MOVB $SCOFL,R0 ;GET DESIRED STATUS  MOVB $SCERR,R1 ;GET ERROR TYPE SXT R1 ;MAKE R1 ALL 1'S OR 0'S- XOR R1,R0 ;FLIP BITS IN R0 IF R1 SHOW ERRORC+ BIC #^C,R0 ;R0 CONTAINS KS.OFL BITS= BIC #KS.OFL,K.STS(R2) ;MAKE SURE OFFLINE BIT IS PROPER STATE4 BIS R0,K.STS(R2) ;SET OFFLINE BIT TO DESIRED STATUS F;+8; **-$OLRNT-ONLINE RECONFIGURATION NOTIFICATION ROUTINE.;H=; THIS ROUTINE WILL CLEAR $SCDEV AND SET EVENT FLAG 1 FOR THED; TASK POINTED TO BY $HRCPT.;$ ; INPUTS:E;R; NONE. ;M ; OUTPUTS:;G; NONE.D;A; NO REGISTERS ARE PRESERVED.R;- ,$OLRNT::CLR $SCDEV ;SHOW OPERATION COMPLETE" MOV #1,R0 ;SET EVENT FLAG TO SET& MOV $HRCPT,R5 ;GET HRC... TCB ADDRESS BEQ 60$ ;IF EQ NOT INSTALLED( BIT #TS.EXE,T.STAT(R5) ;IS TASK ACTIVE?' BNE 60$ ;IF NE NO -- DON'T CALL $SETF 7 BIT #T2.SEF,T.ST2(R5) ;IS TASK STOPPED FOR EVENT FLAG?C( BNE 60$ ;IF NE YES -- DON'T CALL $SETF MOV R5,R1 ;CREATE ADDRESS WORD) ADD #T.EFLG,R1 ;POINT TO FIRST TASK WORD ' CALLR $SETM ;SET HRC'S EVENT FLAG ONEG 60$: RETURNA ;+9; **-$UCBSC-CALL DRIVER AT UCB STATUS CHANGE ENTRY POINT. ; @; THIS ROUTINE WILL CALL A DRIVER AT ITS UCB STATUS CHANGE ENTRY; POINT.;T ; INPUTS:;Q2; $SCDEV=UCB ADDRESS OF UNIT WITH CHANGING STATUS.-; $SCOFL=BYTE VALUE OF DESIRED STATUS CHANGE:C; '; -1 --> ONLINE TO OFFLINE TRANSITION.T(; 0 --> OFFLINE TO ONLINE TRANSITION.;; 100 --> OFFLINE TO ONLINE TRANSITION SPECIAL CASE.D;. ; OUTPUTS:;T>; DRIVER HAS BEEN CALLED AT D.VUCB ENTRY. WHEN $SCDEV GOES TO<; ZERO THEN $SCERR (BYTE VALUE) CONTAINS RETURN STATUS (I.E.?; WHETHER OPERATION WAS ACCEPTED OR REJECTED). NEGATIVE VALUESB7; SIGNIFY REJECTION, ONE SIGNALS SUCCESSFUL COMPLETION.D4; IF THE ENTRY POINT IN THE DRIVER EQUALS ZERO, THEN; THE DRIVER IS NOT CALLED. ;N); $SCDEV MAY TAKE UP TO 60 SECS TO CLEAR.I;N; NO REGISTERS ARE PRESERVED.E;A!; APR5/APR6 MAPPING IS PRESERVED.T;N<; NOTE: $UCBSC SHOULD NOT BE USED WHILE $KRBSC IS IN USE DUE#; TO COMMON USE OF PARAMETER AREAS. ;- G&$UCBSC::MOV $SCDEV,R5 ;GET UCB ADDRESS T S .IF DF M$$PRO ." MOV U.SCB(R5),R4 ;GET SCB ADDRESS* MOV S.KRB(R4),R3 ;GET KRB ADDRESS, IF ANY BEQ 65$ ;IF EQ NO KRB ADDRESSO) MOV K.URM(R3),S.URM(R4) ;SET URM FOR SCBV65$: ;REFERENCE LABEL R .ENDC  L' MOV KINAR5,-(SP) ;SAVE I-SPACE MAPPING  C R .IF DF K$$DAS E' MOV KDSAR5,-(SP) ;SAVE D-SPACE MAPPINGN S .ENDC T N8 MOV #REMAP,-(SP) ;SET ADDRESS TO RESTORE KISAR5, KDSAR5 E  .IF DF M$$PRO R0 CALL $IFORK ;CONTINUE EXECUTION ON CORRECT CPU B D .ENDC S .;D/00tttbl; WE ARE NOW EXECUTING ON THE CORRECT PROCESSOR;V K"70$: MOV (R5),R3 ;GET DCB ADDRESS" MOV U.SCB(R5),R4 ;GET SCB ADDRESS" MOV D.DSP(R3),R2 ;GET DDT ADDRESS! BNE 80$ ;IF NE DRIVER IS LOADED N;; DRIVER IS NOT LOADED;S $ MOVB #IE.HWR,$SCERR ;SET ERROR CODE BR 90$ ;EXIT WITH COMMON CODE-(80$: MOVB #1,$SCERR ;SHOW SUCCESS STATUS" MOV S.KRB(R4),R3 ;GET KRB ADDRESS BEQ 85$ ;IF EQ NO KRB.( MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX85$: ;REFERENCE LABEL   .IF NDF M$$PROD , MOV S.KS5(R4),KINAR5 ;SET UP KERNEL MAPPING V K .IF DF K$$DAS 7 MOV S.KS5(R4),KDSAR5 ;SET UP KERNEL DATA SPACE MAPPINGV D .ENDC G D .ENDC  E3 TST D.VUCB(R2) ;DOES THE DRIVER WANT TO BE CALLED?O BEQ 90$ ;IF EQ NOV4 ASRB $SCOFL ;SET CARRY BIT FOR DRIVER IF NECESSARY M;C); CALL DRIVER AT UCB STATUS CHANGE ENTRY.T;; INPUTS TO DRIVER:T;B5; R3=CONTROLLER INDEX. IF S.KRB=0 THEN R3 UNDEFINED.;); R4=ADDRESS OF THE STATUS CONTROL BLOCK.B'; R5=ADDRESS OF THE UNIT CONTROL BLOCK.K); 0(SP)=RETURN ADDRESS FOR COMPLETION.K.; 2(SP)=RETURN ADDRESS TO CALLER OF $UCBSC.'; CARRY BIT CONTAINS STATUS TRANSITION:C;G(; C=1 --> ONLINE TO OFFLINE TRANSITION.(; C=0 --> OFFLINE TO ONLINE TRANSITION.;I ; $SCERR=1.R=; $SCOFL=POSITIVE/NON-ZERO IF SPECIAL OFFLINE TO ONLINE CASE.L;I#; RETURNED INFORMATION FROM DRIVER:;N/; THE DRIVER MUST EVENTUALLY RETURN CONTROL TO:S;B,; 0(SP) AND THEN RETURN STATUS IS IN $SCERR:;S+; $SCERR < 0 --> OPERATION NOT SUCCESSFUL.N'; $SCERR = 1 --> OPERATION SUCCESSFUL.O/; $SCERR = 0 --> SPECIAL CASE OPERATION STILLE; IN PROGRESS.;I*; IF $SCERR < 0, THEN VALUE IS ERROR CODE.;O@; DRIVER MUST RETURN CONTROL WITHIN 60 SECS. (USE S.CTM TIMEOUT; IF NECESSARY.);R,; ALL REGISTERS ARE AVAILABLE TO THE DRIVER.;O L CALL @D.VUCB(R2) ;CALL DRIVER(90$: MOV $SCDEV,R5 ;GET UCB ADDRESS BACK. MOVB $SCOFL,R0 ;GET DESIRED STATUS OF OFL BIT MOVB $SCERR,R1 ;GET ERROR VALUE. SXT R1 ;MAKE R1 ALL 1'S OR 0'S FROM SIGN BIT. XOR R1,R0 ;FLIP BITS IN R0 IF R1 SHOWS ERROR8 BIC #^C,R0 ;R0 CONTAINS DESIRED STATE OF US.OFL; BICB #US.OFL,U.ST2(R5) ;CLEAR OUT OFFLINE BIT JUST IN CASE3 BISB R0,U.ST2(R5) ;SET ACTUAL BIT VALUE INTO U.ST2C" BR $OLRNT ;EXIT THRU COMMON CODE .DSABL LSB  ;I=; REMAP -- RESET KINAR5/(KDSAR5) WITH SAVED VALUE AND RETURN.0;M $REMAP: ;REFERENCE LABEL  V .IF DF K$$DAS S. MOV (SP)+,KDSAR5 ;RESTORE DATA SPACE REGISTER V .ENDC R ;/ MOV (SP)+,KINAR5 ;RESTORE ALTERNATIVE REGISTER  RETURNS ;+&; **-$CPUSC-CPU STATUS CHANGE ROUTINE.;O>; THIS ROUTINE WILL PERFORM THE EXECUTIVE ACTIONS NECESSARY TO.; BRING A CPU ONLINE OR TO TAKE A CPU OFFLINE.;E ; INPUTS:T;LC; $SCDEV=MASK WITH BIT SET FOR CPU WHOSE STATUS SHOULD CHANGE. ONLY; ONE BIT SHOULD BE SET./-; $SCOFL=BYTE VALUE OF DESIRED STATUS CHANGE:;A'; -1 --> ONLINE TO OFFLINE TRANSITION.$'; 0 --> OFFLINE TO ONLINE TRANSITION. ;C ; OUTPUTS:; ; CPU ONLINE:;V4; THE CPU HAS BEEN "BOOTED" THRU THE IIST, AND THEN0; INTERRUPTED INTO THE $PENT PROCESSOR ENTRY. 7; AT THIS POINT THIS ROUTINE WILL RETURN TO THE CALLERE; WITH:;RF; R2=MASK OF PROCESSORS WHO DIDN'T RESET THE INTERRUPT MASKS (IF ANY).;S:; WHEN THE PROCESSOR COMMING ONLINE CALLS $CPNIT (AT THE 5; VERY END OF THE $PENT PROCESS) IT WILL ATTEMPT TO D9; INTERRUPT THE CURRENTLY ONLINE CPUS TO SEE IF THEY CANN8; RECEIVE FROM IT. IT WILL LEAVE THE MASK OF THOSE WHO5; CAN'T HEAR IT IN $SCRET, AND THEN ENTER $OLRNT TO "(; NOTIRY HRC... THAT THE CPU IS ONLINE.; ; CPU OFFLINE:; 9; THE CALLER WILL BE RETURNED TO AFTER THE NECESSARY CPUC8; HAS BEEN INTERRUPTED WITH THE OFFLINE FUNCTION. WHEN9; LOCAL EVENT FLAG ONE IS SET, THE PROCESSOR HAS HALTED.O;O; NO REGISTERS ARE PRESERVED.H;!; APR5/APR6 MAPPING IS PRESERVED.T;LD; THIS ROUTINE SHARES COMMON DATA AND PARAMETER AREAS WITH THE OTHERD; $XXXSC ROUTINES IN THIS MODULE. THEY SHOULD ONLY BE USED ONE AT A; TIME.T;- R  .IF DF M$$PRO N($CPUSC00uttkTADATADATADATADATADATA::TSTB $SCOFL ;ONLINE OR OFFLINE? BMI 30$ ;IF MI GOING OFFLINE T;C; BRING CPU ONLINE;T F% CLRB $SCERR ;NO IMMEDIATE ERROR YETE% MOV #C.LGTH,R1 ;ALLOCATE CLOCK BLOCKN( CALL $ALOCB ;OF CORRECT SIZE FROM POOL/ BCC 10$ ;IF CC BLOCK ALLOCATED OK, ADDR IN R0V4 MOVB #IE.NOD,$SCERR ;BAD NEWS -- NO POOL SPACE LEFT RETURN ;EXIT BACK TO OLRSRN310$: MOV R0,-(SP) ;SAVE CLOCK QUEUE BLOCK FOR LATERN) BIS $SCDEV,$IIMSK ;SET INTERRUPT MASK UP / CALL $IISTM ;MAKE EVERYONE SET UP THEIR MASKSC0 MOV R2,-(SP) ;SAVE PEOPLE WHO DIDN'T DO THE JOB/ MOV $SCDEV,R1 ;GET THE CPU COMING ONLINE AGAIN' CALL $IBXMT ;SEND HIM A BOOT MESSAGE!  CLR $SCRET ;CLEAR OUT STATUS) MOV 2(SP),R0 ;GET CLOCK QUEUE BLOCK BACKE3 MOV (SP)+,(SP) ;SLIDE STATUS RETURN DOWN ONE FRAME + MOV #20$,C.SUB(R0) ;SET SUBROUTINE ADDRESSP# MOV $TKPS,R2 ;GET TICKS PER SECONDT) CLR R1 ;CLEAR OUT HIGH ORDER DELTA TIMEU ASL R2O ASL R2 ;WAIT FOR 4 SECONDS! MOV #C.SYST,R4 ;SET REQUEST TYPEM& MOV $TKTCB,R5 ;SET REQUEST IDENTIFIER$ CALL $CLINS ;INSERT IN CLOCK QUEUE MOV (SP)+,R2 ;GET STATUS BACK RETURNI O;N); SUBROUTINE FOR INTERPROCESSOR INTERRUPTS;E (20$: MOV R4,R0 ;GET CLOCK BLOCK ADDRESS MOV #C.LGTH,R1 ;SET LENGTHC% CALL $DEACB ;DEALLOCATE CLOCK BLOCKN MOV $SCDEV,R1 ;GET PROCESSOR(S) CALLR $IIXMT ;INTERRUPT THEM $;S; BRING CPU OFFLINEC;T C&30$: MOV #MP.STP,R2 ;SET STOP FUNCTION% MOV $SCDEV,R1 ;GET CPU'S TO DO IT TOS% CLR $SCRET ;CLEAR OUT STATUS RETURNM& CLRB $SCERR ;CLEAR OUT STATUS RETURN! CALLR $IIFNX ;TRANSMIT FUNCTION V;+; **-$CPOFF-TAKE CPU OFFLINE.I;OD; THIS ROUTINE WILL TAKE A CPU OFFLINE. IT WILL RESET THE INTERRUPTC; MASKS OF ALL OTHER ONLINE PROCESSORS TO NOT ALLOW INTERRUPTS FROMAD; THIS ONE, WILL RESET THE IIST ON THIS CPU TO ALLOW INTERRUPTS FROMD; ANYONE, WILL DECLARE A SIGNIFICANT EVENT, AND CLEAR OUT THE ONLINE%; BIT FROM $URMST FOR THIS PROCESSOR.$;E ; INPUTS:P; ; NONE.T; ; OUTPUTS:;L; NONE.T;S; NO REGISTERS ARE PRESERVED.O;- UB$CPOFF::BIC $CPBIT,$IIMSK ;PREPARE TO RESET THE INTERRUPT MASKS OF% CALL $IISTM ;ALL OTHER ONLINE CPUS.L: CALL $IIOPN ;INITIALIZE OUR IIST, TO ALLOW INT AND BOOTS1 CLRB $CXDBL ;IN CASE CONTEXT SWITCHING DISABLEDP. BIC $CPBIT,$URMST ;SHOW US NOT ONLINE ANYMORE2 CALLR $DRDSE ;DECLARE SIGNIFICANT EVENT AND EXIT A .ENDC T .IFF ; DF R$$CON $KRBSC::$OLRNT::$UCBSC::$CPOFF:: RETURNE .ENDC ; DF R$$CON!; **-$VOLSC-VOLUME STATUS CHANGE S; <; THIS SUBROUTINE IS CALLED BY A DRIVER WHEN HARDWARE VOLUME;; VALID STATUS CHANGES. MINIMALLY, $VOLSC RE-SETS SOFTWAREL8; VOLUME VALID. IF THE VOLUME MOUNTED FOREIGN THEN THIS9; IS THE ONLY ACTION TAKEN ON THE UNIT. IF THE VOLUME ISC9; MOUNTED FILE-STRUCTURED OR NOT MOUNTED THE VERIFICATIONO9; TASK WILL BE REQUESTED TO EITHER MOUNT OR RE-MOUNT THE 5; VOLUME. ADDITIONALLY, I/O WILL BE STALLED TO UNITS0; MOUNTED WITH A FILE-STRUCTURE UNTIL THE VOLUME; STATUS CAN BE VERIFIED.A; ; INPUTS: ; (; R5=UCB ADDRESS OF UNIT WITH TRANSITION;R ; OUTPUTS:; ; NONE.T;C; R4,R5 PRESERVED ;L;- .ENABL LSBL $VOLSC:: ;# .IF DF R$$AMD ;AUTOMOUNT/DISMOUNT  SAVNR T5 BICB #US.VV,U.STS(R5) ;RE-SET SOFTWARE VOLUME VALID 1 BITB #US.FOR,U.STS(R5) ;VOLUME MOUNTED FOREIGN ?T* BNE 20$ ;IF NE, YES - NOTHING MORE TO DO) BITB #US.MNT,U.STS(R5) ;VOLUME MOUNTED ?L BNE 10$ ;IF NE, NO6 BISB #US.SIO,U.ST2(R5) ;STALL I/O FOR MOUNTED VOLUMES;10$: BISB #US.TRN,U.ST2(R5) ;SET FLAG FOR VERIFICATION TASKB0 MOV $VERTK,R0 ;TCB ADDRESS OF VERIFICATION TASK" CALLR $EXRQN ;UNSTOP/REQUEST VER .IFTF ; DF R$$AMD20$: RETURN ; .DSABL LSB  .ENDC ; DF R$$AMD S .END BICB #US.VV,U.STS(R5) ;RE-SET SOFTWARE VOLUME VALID 1 BITB #US.FOR,U.STS(R5) ;VOLUME MOUNTED FOREIGN ?T* BNE 20$ ;IF NE, YES - NOTHING MORE TO DO) BITB #US.MNT,U.STS(R5) ;VOLUME MOUNTED ?L BNE 10$ ;IF NE, NO6 BISB #US.SIO,U.ST2(R5) ;STALL I/O FOR MOUNTED VOLUMES;10$: BISB #US.TRN,U.ST2(R5) ;SET FLAG FOR VERIFICATION TASKB0 MOV $VERTK,R0 ;TCB ADDR000 uttbl .TITLE PARTYA .IDENT /09.03/; A;L,; COPYRIGHT (c) 1974, 1978, 1979, 1980, 1983/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.L; A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDN9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.R;C;@; D. N. CUTLER 14-FEB-74 ;B$; MODIFIED FOR RSX-11M-PLUS V2.1 BY:;C; C. B. PUTNAM; J. R. KAUFFMAN; B. S. MCCARTHY;;; MODIFIED BY:;:; C. B. PUTNAM 27-MAY-83 09.00;0; CBP188 -- USE E$CMEM FOR MEMORY PARITY ERRORS;I; J. W. BERZLE 08-SEP-83 09.01;L2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES;A; J. R. KAUFFMAN 9-NOV-83 09.02 ;S?; JRK286 -- GET CACHE CSR VALUES FROM $MSTAT FOR ERROR LOG PKT ;U; J. M. LAWLER 21-NOV-83 09.03;H"; JL173 -- CORRECT TYPO IN JRK286; "; MEMORY PARITY INTERRUPT HANDLING;D; MACRO LIBRARY CALLSB; .IF DF P$$RTY1 .MCALL ABODF$,EPKDF$,HWDDF$,PCBDF$,TCBDF$,BGCK$A:" ABODF$ ;DEFINE TASK ABORT CODES& EPKDF$ ;DEFINE ERROR PACKET OFFSETS$ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSY, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;0; PARITY VECTOR ;G .ASECTR.=114 .WORD $PARER .WORD PR7 ; .PSECTM;+(; **-PARER-MEMORY PARITY ERROR INTERRUPT;YN; THIS ROUTINE IS ENTERED AS THE RESULT OF A MEMORY PARITY ERROR INTERRUPT. IFI; THE ERROR OCCURED IN THE EXECUTIVE OR WHILE ON THE SYSTEM STACK, THEN A$F; MESSAGE IS PRINTED ON THE CONSOLE TERMINAL AND THE SYSTEM IS HALTED.E; ELSE A SWITCH TO THE SYSTEM STACK IS EXECUTED AND THE TASK IN WHICHO/; THE PARITY ERROR OCCURED IS LOCKED IN MEMORY.C;- .ENABL LSBS*RECURS: JMP 60$ ;;;JUMP TO HALT PROCESSOR+$PARER::INC $PARLV ;;;INTERRUPT RECURSION?M BNE RECURS ;;;IF NE YESA .IF DF P$$D70 MOV R0,-(SP) ;;;SAVE R0 MOV R1,-(SP) ;;;SAVE R1* MOV #$MPCSR,R0 ;POINT TO PARITY CSR TABLE. MOV #$MSTAT,R1 ;POINT TO PARITY CSR SAVE AREA, MOV @(R0)+,(R1)+ ;SAVE LOW ADDRESS REGISTER- MOV @(R0)+,(R1)+ ;SAVE HIGH ADDRESS REGISTERE4 MOV #-1,(R1) ;ASSUME MEM PARITY ON NONCACHE MACHINE. CMP (R0)+,#MPCSR-2 ;RUNNING ON CACHE MACHINE? BNE 2$ ;IF NE NO/ MOV @-(R0),(R1)+ ;;;SAVE MEMORY ERROR REGISTERO/ TST (R0)+ ;;;POINT TO ADDRESS OF MEM CTRL REGN/ MOV @(R0)+,(R1)+ ;SAVE MEMORY CONTROL REGISTER0% MOV #3,@-2(R0) ;TURN CACHE TRAPS OFF(, MOV @(R0)+,(R1)+ ;SAVE MAINTENANCE REGISTER* MOV @(R0)+,(R1)+ ;SAVE CACHE HIT REGISTER2$: MOV (SP)+,R1 ;;;RESTORE R1 MOV (SP)+,R0 ;;;RESTORE R0R .IFTF( BIT #CMODE,2(SP) ;;;PREVIOUS MODE USER? BNE 4$ ;;;IF NE YESA .IFTO%3$: TST $STAT ;;;FATAL MEMORY ERROR?I BGT 301$ ;;;IF GT NO JMP 20$ ;;;O$301$: MOV R0,-(SP) ;;;SAVE REGISTERS MOV R1,-(SP) ;;;(0 MOV #$ERTRK,R1 ;;;POINT TO ERROR TRACKING TABLE% CALL 14$ ;;;EXECUTE CACHE ALGORITHME" MOV (SP)+,R1 ;;;RESTORE REGISTERS MOV (SP)+,R0 ;;;, RTI ;;;RETURN FROM TRAP .IFFV(3$: BR 20$ ;;;FATAL MEMORY PARITY ERROR .IFTF/4$: DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITY. F  .IFTM ,;P=; FIND THE REGION WITH THE PARITY ERROR AND LOCK IT IN MEMORY$;S S BIT #360,$STAT ;CACHE ERROR?B BEQ 401$ ;IF EQ NO CALL LOG ;LOG CACHE ERROR- BR 11$ ;GO ONS>401$: MOV @$MPCSR+2,R0 ;GET CONTENTS OF HIGH ERROR ADDRESS REG6 MOV @$MPCSR,R1 ;GET CONTENTS OF LOW ERROR ADDRESS REG4 ASHC #-6,R0 ;DOUBLE SHIFT R0 AND R1 RIGHT SIX BITS3 MOV #$PARHD,R0 ;GET ADDRESS OF PARTITION LIST HEADF+5$: MOV (R0),R0 ;GET NEXT MAIN PCB ADDRESSS BEQ 11$ ;IF EQ END OF LIST2 CMP P.REL(R0),R1 ;DID ERROR OCCUR IN THIS REGION?, BHI 11$ ;IF HI THERE IS NO PCB FOR REGION 0 MOV P.REL(R0),R2 ;GET BASE ADDRESS OF PARTITION. ADD P.SIZE(R0),R2 ;CALCULATE END OF PARTITION, CMP R2,R1 ;DID ERROR OCCUR IN THIS REGION? BLOS 5$ ;IF LO NOD,6$: MOV P.SUB(R0),R0 ;GET NEXT SUB PARTITION BEQ 11$ ;IF EQ END OF LIST2 CMP P.REL(R0),R1 ;DID ERROR OCCUR IN THIS REGION?, BHI 11$ ;IF HI THERE IS NO PCB FOR REGION 0 MOV P.REL(R0),R2 ;GET BASE ADDRESS OF PARTITION. ADD P.SIZE(R0),R2 ;CALCULATE END OF PARTITION, CMP R2,R1 ;DID ERROR OCCUR IN THIS000uttkTADATADATADATADATADATA REGION? BLOS 6$ ;IF LO NOR2 BIS #PS.PER!PS.NSF!PS.CHK,P.STAT(R0) ;LOCK REGION BIC #PS.FXD,P.STAT(R0) ;A L  .IFFP I;N2; LOCK ALL OF THE CURRENT TASK'S REGIONS IN MEMORY2; PS.FXD IS CLEARED IN THE TASK REGION PCB TO THAT5; THE TASK IS NO LONGER FIXED. THIS WILL ASSURE THAT)=; WHEN THE TASK EXITS, IT WILL BE DETACHED FROM IT'S REGIONS. ;P F0 MOV $TKTCB,R0 ;COPY TCB ADDRESS OF CURRENT TASK& MOV T.PCB(R0),R1 ;GET TASK REGION PCB' BIC #PS.FXD,P.STAT(R1) ;UNFIX THE TASKR! ADD #T.ATT,R0 ;POINT TO ATT LISTI;7$: MOV (R0),R0 ;GET ADDRESS OF NEXT ATTACHMENT DESCRIPTOR BEQ 10$ ;IF EQ END OF LIST% TSTB A.MPCT-A.TCBL(R0) ;TASK MAPPED?  BEQ 7$ ;IF EQ NO) MOV A.PCB-A.TCBL(R0),R1 ;GET PCB ADDRESSS3 BIS #PS.PER!PS.NSF!PS.CHK,P.STAT(R1) ;LOCK REGION  BIC #PS.FXD,P.STAT(R1) ;H BR 7$ ;GO AGAINI I .IFTE H;F;; IF THIS IS A UNIBUS PARITY ERROR, NOTIFY ALL MAPPED TASKSO8; IF THIS IS A CPU PARITY ERROR, NOTIFY THE CURRENT TASK7; IN EITHER CASE, TASKS WHICH ARE FIXED BECOME UNFIXED.O;  A-701$: BIT #30000,$STAT ;UNIBUS PARITY ERROR?  BEQ 10$ ;IF EQ NO MOV R0,-(SP) ;SAVE R0 CALL LOG ;LOG THE PARITY ERROR MOV (SP)+,R0 ;RESTORE R0E3 ADD #P.ATT,R0 ;POINT TO PARTITION'S ATT DESCR LISTS58$: MOV (R0),R0 ;POINT TO NEXT ATTACHMENT DESCRIPTOR# BEQ 101$ ;IF EQ END OF LISTG% TSTB A.MPCT-A.PCBL(R0) ;TASK MAPPED?  BEQ 8$ ;IF EQ NO2 MOV A.TCB-A.PCBL(R0),R5 ;GET TCB OF ATTACHED TASK1 MOV T.PCB(R5),R4 ;GET ADDRESS OF TASK REGION PCBA' BIC #PS.FXD,P.STAT(R4) ;UNFIX THE TASKO. MOV #AS.PEA,R4 ;GET CODE FOR PARITY ERROR AST$ TST T.ASTL(R5) ;AST ALREADY QUEUED? BEQ 9$ ;IF EQ NO MOV T.ASTL+2(R5),R1 ;. CMPB R4,A.CBL+1(R1) ;PARITY ERROR AST QUEUED? BEQ 8$ ;IF EQ YESN9$: MOV R0,-(SP) ;SAVE R0 2 CALL DASTT ;DECLARE AN AST FOR THE ATTACHED TASK MOV (SP)+,R0 ;RESTORE R0) BCC 8$ ;IF CC AST SUCCESSFULLY DECLAREDQ BIT #360,$STAT ;CACHE ERROR?B BNE 8$ ;IF NE YESA1 BIT #T2.ABO,T.ST2(R5) ;ALREADY MARKED FOR ABORT?K BNE 8$ ;IF NE YESS MOV R0,-(SP) ;SAVE R0 MOV R5,R1 ;COPY TCB ADDRESSC0 MOV #S.PRTY,R0 ;GET CODE FOR PARITY ERROR ABORT CALL $ABTSK ;ABORT THE TASKO901$: MOV (SP)+,R0 ;RESTORE R0 BR 8$ ;GO AGAINI E .IFTF E;?B; DECLARE AN AST FOR THE CURRENT TASK. IF PARITY ERROR AST IS NOT; SPECIFIED, ABORT THE TASK.;K M$10$: CALL LOG ;LOG THE PARITY ERROR, MOV $TKTCB,R5 ;GET CURRENT TASK TCB ADDRESS. MOV #AS.PEA,R4 ;GET CODE FOR PARITY ERROR AST CALL DASTT ;DECLARE ASTK& BCC 11$ ;IF CC AST HAS BEEN DECLARED R ( .IFTV 0 BIT #360,$STAT ;CACHE ERROR?C BNE 11$ ;IF NE YES D O .IFTF R MOV R5,R1 ;COPY TCB ADDRESST0 MOV #S.PRTY,R0 ;GET CODE FOR PARITY ERROR ABORT! CALL $ABTSK ;ABORT CURRENT TASKE,101$: MOV $FXRPT,R0 ;IS THE FIXER INSTALLED? BEQ 11$ ;IF EQ NOP CALL $EXRQN ;REQUEST THE FIXER :;L7; CLEAR ALL PARITY REGISTERS AND REENABLE PARITY ERRORS ;K B)11$: CALL $CLPAR ;RESET ALL PARITY CSR'SI .IFTA. MOV #$ERTRK,R1 ;POINT TO ERROR TRACKING TABLE' TST $STAT ;WAS IT ONLY A CACHE ERROR? BGT 14$ ;IF GT YES BR 16$ ;;$; PDP-11/70 CACHE TRAP;F112$: MOV $TTNS-4,-(R1) ;;;SAVE TIME OF LAST ERROR &13$: TST (R1)+ ;;;POINT TO NEXT GROUP,14$: MOVB (R1)+,R0 ;;;GET CACHE DISABLE BITS BEQ 16$ ;;;IF EQ END OF TABLEQ) BITB (R1)+,$STAT ;;;ERROR IN THIS GROUP?E BEQ 13$ ;;;IF EQ NO + CMP (R1)+,$TTNS-4 ;;;OCCUR IN SAME MINUTE?R BNE 12$ ;;;IF NE NOC, BIS R0,$MPCTL ;;;DISABLE THAT PART OF CACHE BR 14$ ;;;PROCESS NEXT GROUP916$: MOVB $MPCTL,@$MPCSR+6 ;;;LOAD CACHE CONTROL REGISTERT .ENDC;?; AT THIS POINT EVERYTHING HAS BEEN CLEANED UP AND THE USER MAY-*; INSERT CODE SPECIFIC TO HIS APPLICATION.;+;***************.; INSERT CODE HERE-ALL REGISTERS ARE AVAILABLE;***************; ; EXIT SYSTEMQ;B# DEC $PARLV ;RESET RECURSION LEVELE RETURN ;EXIT FROM TRAPC;1D; PARITY ERROR OCCURED WHILE IN EXEC CODE. THIS IS A FATAL SITUATION@; AND THE SYSTEM IS SHUT DOWN. THE USER MAY INSERT CODE SPECIFIC#; TO HIS APPLICATION AT THIS POINT.D;C20$: ;;000uttbl;REF LABEL .IF DF M$$PRO+ CALL $DISAN ;DISABLE SANITY TIMERS/ALARMSD .ENDC;;;***************6;;; INSERT CODE HERE-ALL REGISTERS HAVE NOT BEEN SAVED;;;***************) MOV #60$,@#4 ;;;PLUG NONEX MEMORY VECTORX MOV R0,-(SP) ;;;SAVE R05 MOV #$EXMSG,R0 ;;;GET ADDRESS OF PARITY STOP MESSAGEC)30$: MOVB (R0)+,TPS+2 ;;;OUTPUT NEXT BYTEC BEQ 50$ ;;;IF EQ DONET40$: TSTB TPS ;;;OUTPUT DONE? BPL 40$ ;;;IF PL NOE BR 30$ ;;;GO AGAIN50$: MOV (SP)+,R0 ;;;RESTORE R0?60$: BGCK$A BF.PAR,BE.FHW,HALT ;PARITY ERROR WHILE IN EXEC CODES# BR 60$ ;;;IF CONTINUED HALT AGAIN .DSABL LSB* .PAGE;+"; **-$CLPAR-CLEAR PARITY REGISTERS; F; THIS ROUTINE CLEARS OUT ALL PARITY ERRORS IN THE MEMORY PARITY ERROR2; REGISTERS AND ENABLES PARITY ERROR NOTIFICATION.;A ; INPUTS:A;Y; NONE.S;C ; OUTPUTS:;); NONE.;;T@; NOTE: IF THE SYMBOL M$$K11 IS DEFINED (11/70 TYPE ECC MEMORY),:; THIS ROUTINE WILL NOT PROPERLY HANDLE UNIBUS ECC MEMORY7; (SUCH AS MF11S-K) SINCE THE ROUTINE ASSUMES THAT ANYT7; OTHER MEMORY ON THE SYSTEM MUST BE PARITY MEMORY ANDU9; THAT AN ATTEMPT TO SET THE SINGLE-BIT ECC ERROR BIT ONA7; SUCH A MEMORY WILL FAIL. THIS ASSUMPTION IS USED TOI2; DISTINGUISH MK11 ECC MEMORY FROM PARITY MEMORY.;- E4$CLPAR::MOV #$PARTB+2,R0 ;POINT TO PARITY CSR VECTOR10$: ;REF LABEL .IF DF M$$K11 O" TST (R0) ;EVEN WORD CSR PRESENT? BPL 20$ ;IF PL NOY4 MOV #21,@(R0)+ ;SET ENABLE AND SINGLE-BIT ECC ERROR5 BIT #20,@-(R0) ;SINGLE-BIT ECC ERROR BIT SET (MK11)?S BEQ 20$ ;IF EQ NOM7 MOV #1,@(R0)+ ;SET ENABLE BIT AND CLR REST IN 1ST WORDN3 BIC #100000,@(R0)+ ;CLEAR ERROR BIT IN SECOND WORDS BR 30$ ;420$: MOV #1,@(R0)+ ;ENABLE PARITY ERROR NOTIFICATION M .ENDC7 MOV #1,@(R0)+ ;ENABLE PARITY (OR UNIBUS MEM ECC) NOTIF;(30$: CMP R0,#$PARTB+2+<16.*2> ;DONE YET? BLO 10$ ;IF LO NOK   .IF DF P$$D70 R8 MOV @$MPCSR+4,-(SP) ;CLEAR MEMORY SYSTEM ERROR REGISTER MOV (SP)+,@$MPCSR+4 ; E .ENDC # @ RETURN ;- ;+4; THE FORMAT OF ERROR LOGGING PACKETS IS AS FOLLOWS:;03; +-----------------------------------------------+0 ; | |&; \ FIXED ERROR LOGGING INFORMATION \ ; | |3; +-----------------------------------------------+.2; | CACHE REGISTER EXISTENCE MASK (SEE BELOW) | 03; +-----------------------------------------------+E/; | PARITY CSR EXISTENCE MASK (SEE BELOW) | 23; +-----------------------------------------------+E;T; PARITY CSRS:;C"; ADDRESS BIT VALUE IN MASK AT 23; +-----------------------------------------------+S; | 172100 000001 | 4-3; +-----------------------------------------------+|; | 172102 000002 | 6N3; +-----------------------------------------------+-; | 172104 000004 | 10 3; +-----------------------------------------------+- ; \ \3; +-----------------------------------------------+E; | 172134 040000 | 40|3; +-----------------------------------------------+-; | 172136 100000 | 42C3; +-----------------------------------------------+-;- ; CACHE CSRS:-; -3; +-----------------------------------------------+-3; | 177740 LOW ERROR ADDRESS 000001 | 4403; +-----------------------------------------------+-3; | 177742 HIGH ERROR ADDRESS 000002 | 46-3; +-----------------------------------------------+3; | 177744 CACHE ERROR REGISTER 000004 | 503; +-----------------------------------------------+-3; | 177746 CACHE CONTROL REGISTER 000010 | 52C3; +-----------------------------------------------+-3; | 177750 CACHE MAINTENANCE REGISTER 000020 | 54-3; +-----------------------------------------------+R3; | 177752 CACHE HIT/MISS REGISTER 000040 | 56-3; +-----------------------------------------------+D .PAGE;+; LOG PARITY ERROR IN A TASK;-; THE FOLLOWING MAY BE LOGGED:;!; 16 WORDS OF MEMORY PARITY CSR'S ; 6 WORDS OF CACHE PARITY CSR'S;-/LOG: BIT #ES.LOG,$ERFLA ;ARE WE LOGGING ERRORS?  BEQ 30$ ;IF EQ NO  INC $ERRSQ ;COUNT THE ERROR-7 MOV #E$CMEM+,R0 ;GET CODE FOR000%up+utkTADATADATADATADATADATA PARITY ERRORN, MOV #<24.*2>,R1 ;GET SIZE OF DATA SUBPACKET5 MOV #SM.HDR!SM.TSK!SM.DAT,R2 ;GET CONTROL MASK BITSH' CLR R3 ;NO BEGINNING ADDRESS FOR DATA-, MOV $TKTCB,R4 ;SET CURRENT TASK TCB ADDRESS! CLR R5 ;INDICATE NO UCB ADDRESSI* CALL $CRPKT ;CREATE THE ERROR LOG PACKET BCS 30$ ;IF CS NO PACKET4 CMP (R1)+,(R1)+ ;SKIP OVER CACHE CSR AND PARITY CSR ;EXISTENCE MASKS;A; FILL IN PARITY CSRS AND MASK;I1 MOV #$MEMR1,R2 ;POINT TO MEMORY PARITY CSR TABLEM CLR -(SP) ;SET PROTOTYPE MASKP210$: MOV #-1,(R1)+ ;ASSUME REGISTER DOES NOT EXIST& CMP #160000,(R2)+ ;REAL CSR ADDRESS ?# BHI 15$ ;IF HI NO, LEAVE -1 THEREB/ MOV @-2(R2),-2(R1) ;REPLACE -1 WITH REAL THINGU2 BIS $BTMSK-$MEMR1-2(R2),(SP) ;INDICATE CSR EXISTS&15$: CMP R2,#$MEMR1+<16.*2> ;DONE YET? BLO 10$ ;IF LO NO 7 MOV (SP)+,-44+2(R1) ;FILL IN PARITY CSR EXISTENCE WORDN .IF DF P$$D70, MOV #$MPCSR,R2 ;POINT TO CACHE PARITY CSR'S1 MOV #$MSTAT,R0 ;POINT TO SAVED CACHE PARITY CSRSS CLR -(SP) ;SET PROTOTYPE MASKY220$: MOV #-1,(R1)+ ;ASSUME REGISTER DOES NOT EXIST& CMP #160000,(R2)+ ;REAL CSR ADDRESS ?# BHI 25$ ;IF HI NO, LEAVE -1 THERE-, MOV (R0),-2(R1) ;REPLACE -1 WITH REAL THING2 BIS $BTMSK-$MPCSR-2(R2),(SP) ;INDICATE CSR EXISTS(25$: TST (R0)+ ;POINT TO NEXT CSR VALUE CMP R2,#$MPCSR+<6*2>;DONE YET? BLO 20$ ;IF LO NO;4 MOV (SP)+,-60(R1) ;FILL IN CACHE CSR EXISTENCE WORD .IFF ; DF P$$D70I+ CLR -44(R1) ;INDICATE NO CACHE CSRS EXISTT .ENDC ; DF P$$D70) CALL $QUPKT ;QUEUE THE ERROR LOG PACKET:30$: RETURN ;S E .PAGE O;+; DASTT;P:; DECLARE A PARITY ERROR AST AND SET UP THE AST PARAMETERS;- ; INPUTS:M;(2; R4=CODE INDICATING WHICH AST SHOULD BE DECLARED.;; R5=ADDRESS OF THE TCB OF THE TASK TO DECLARE THE AST FOR.T; ; OUTPUTS:;6; C=1 IF THE TASK IS NOT SETUP FOR A PARITY ERROR AST.3; C=0 IF THE TASK IS SET UP FOR A PARITY ERROR AST.<; THE AST PARAMETERS ARE MOVED TO THE AST CONTROL BLOCK.*; R1=ADDRESS OF THE AST CONTROL BLOCK.;- E#DASTT: CALL $DASTT ;DECLARE AN AST , BCS 100$ ;IF CS AST HAS NOT BEEN SPECIFIED4 ADD #A.PRM,R1 ;POINT TO PARAMETER LIST IN AST BLOCK0 MOV -2(R1),(R1) ;MOVE NUMBER OF AST PARAMETERS / ASL (R1)+ ;CALCULATE NUMBER OF BYTES ON STACKE S O .IF DF M$$PRO R$ MOVB $PROCN,(R1)+ ;GET PROCESSOR ID TSTB (R1)+ ;SKIP TO NEXT WORDO S .IFF= F CLR (R1)+ ;CLEAR PROCESSOR IDE R .ENDC  H1 MOV #$MPCSR,R0 ;POINT TO MEMORY STATUS REGISTERS.>10$: MOV @(R0)+,(R1)+ ;LOW / HIGH ERR, MEM SYS ERR, CACHE CTRL! CMP R0,#$MPCSR+<4.*2> ;DONE YET?0 BLO 10$ ;IF LO NO 3 MOV #$PARTB+2,R0 ;POINT TO MEMORY PARITY CSR TABLES520$: MOV @(R0)+,(R1)+ ;GET MEMORY PARITY CSR CONTENTSR" CMP R0,#$PARTB+<16.*2> ;DONE YET? BLO 20$ ;IF LO NOE CLC ;INDICATE SUCCESS100$: RETURN ; + .ENDC ; DF P$$RTY .END ;SKIP TO NEXT WORDO S .IFF= F CLR (R1)+ ;CLEAR PROCESSOR IDE R .ENDC  H1 MOV #$MPCSR,R0 ;POINT TO MEMORY STATUS REGISTERS.>10$: MOV @(R0)+,(R1)+ ;LOW / HIGH ERR, MEM SYS ERR, CACHE CTRL! CMP R0, .TITLE PLSUBL .IDENT /05.01/$;P; COPYRIGHT (C) 1988 BYR; DIGITAL EQUIPMENT CORPORATIONL; ALL RIGHTS RESERVED.;D<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;,; PREVIOUSLY MODIFIED BY:;N; J. R. KAUFFMAN; B. S. MCCARTHY;L+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:H;I; J. W. BERZLE;P+; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY: ;D; B. S. MCCARTHY 1-APR-88 05.01K;R;; BM409 -- ADD $SRMAI TO LOOK FOR A MAIN PARTITION, CHANGE&; $SRNAM TO EXCLUDE MAIN PARTITIONS.;I9; PROGRAM LOGICAL ADDRESS SPACE (PLAS) COMMON SUBROUTINESW; ; MACRO LIBRARY CALLSC;E .IF DF P$$LAS# .MCALL HDRDF$,HWDDF$,PCBDF$,TCBDF$E% HDRDF$ ;DEFINE TASK HEADER OFFSETSM$ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS;+&; **-$SRNAM-SEARCH FOR NAMED PARTITION; D; THIS ROUTINE SEARCHES FOR A NAMED PARTITION AND RE00p-uttblTURNS A SUCCESS/7; FAILURE INDICATION AND A POINTER TO THE PCB IF FOUND.N; ; INPUTS:A;O&; R3=POINTER TO DOUBLE-WORD RAD50 NAME;E ; OUTPUTS:; ; C=1 IF NO MATCH ON NAMEF; ; C=0 IF NAMED PARTITION FOUND; R2=PCB ADDRESSR;- .IFTF K2$SRNAM::MOV $CBDHD,R2 ;POINT TO FIRST ENTRY IN CBD BEQ 25$ ;IF EQ THERE IS NONE510$: CMP P.NAM(R2),(R3) ;MATCH ON FIRST WORD OF NAME?B BNE 20$ ;IF NE NO 5 CMP P.NAM+2(R2),2(R3) ;MATCH ON SECOND WORD OF NAME?E BEQ 30$ ;IF EQ YES.20$: MOV P.CBDL(R2),R2 ;POINT TO NEXT MAIN PCB BNE 10$ ;IF NE THERE IS ONE 25$: SEC ;C-SET ON NO MATCH30$: RETURN ;O;++; **-$SRMAI-SEARCH FOR NAMED MAIN PARTITIONN;A@; THIS ROUTINE SEARCHES FOR A NAMED MAIN PARTITION AND RETURNS A?; FAILURE SUCCESS/INDICATION AND A POINTER TO THE PCB IF FOUND. ;C ; INPUTS:$;I&; R3=POINTER TO DOUBLE-WORD RAD50 NAME; ; OUTPUTS:; ; C=1 IF NO MATCH ON NAMEI;E; C=0 IF NAMED PARTITION FOUND; R2=PCB ADDRESSO;- .IFTF.$SRMAI::MOV $PARHD,R2 ;POINT TO FIRST MAIN PCB510$: CMP P.NAM(R2),(R3) ;MATCH ON FIRST WORD OF NAME?C BNE 20$ ;IF NE NO5 CMP P.NAM+2(R2),2(R3) ;MATCH ON SECOND WORD OF NAME?M BEQ 30$ ;IF EQ YES)20$: MOV (R2),R2 ;POINT TO NEXT MAIN PCBI BNE 10$ ;IF NE THERE IS ONEU SEC ;C-SET ON NO MATCHT30$: RETURN ;F D .IFT;+ ; **-$CKACC-CHECK DESIRED ACCESS; A; THIS ROUTINE CHECKS IF THE DESIRED ACCESS OF A TASK TO A REGION=B; IS ALLOWED. THE BITS IN THE PROTECTION WORD ARE ARRANGED IN THE; FOLLOWING ORDER:;T; [WORLD,GROUP,OWNER,SYSTEM] ; 15 03;MC; THE BITS WITHIN EACH CATEGORY IN THE PROTECTION WORD ARE ARRANGED2; IN THE FOLLOWING ORDER:O;A; DELETE EXTEND WRITE READ:; 3 2 1 0;I:; A BIT SET MEANS THE CORRESPONDING ACCESS IS NOT ALLOWED.;C ; INPUTS:T; ); R0=DESIRED ACCESS MASK IN LOW FOUR BITSE; R1=CURRENT UIC OF TASK; R2=PCB ADDRESS OF REGION;C ; OUTPUTS:;O; R0,R1 ARE MODIFIED; 7; DIRECTIVE STATUS OF D.RS16 RETURNED IF ACCESS DENIED.O;-.$CKACC::MOV #30$,-(SP) ;PUSH COROUTINE ADDRESS0 BIC #^C17,R0 ;CLEAR ALL BUT DESIRED ACCESS MASK210$: SWAB R1 ;REVERSE GROUP AND OWNER IN UIC WORD2 CALL @(SP)+ ;CHECK IF QUALIFIED IN NEXT CATEGORY BNE 20$ ;IF NE NOI3 BIT R0,P.PRO(R2) ;ALLOWED ACCESS IN THIS CATEGORY?L BNE 20$ ;IF NE NOT" TST (SP)+ ;POP COROUTINE ADDRESS RETURN ;RETURN TO CALLERC)20$: ASL R0 ;SHIFT MASK TO NEXT CATEGORY ASL R0 ; ASL R0 ; ASL R0 ;' BR 10$ ;CHECK ACCESS IN THIS CATEGORY 30$: CMPB R1,#10 ;SYSTEM UIC? BHI 40$ ;IF HI NOH! SEZ ;SET FLAG FOR ACCESS CHECKC.40$: CALL @(SP)+ ;CHECK ACCESS AND SHIFT MASK CMP R1,P.OWN(R2) ;OWNER UIC? * CALL @(SP)+ ;CHECK ACCESS AND SHIFT MASK! CMPB R1,P.OWN+1(R2) ;SAME GROUP?* CALL @(SP)+ ;CHECK ACCESS AND SHIFT MASK% SEZ ;INSURE CHECK FOR WORLD ACCESSP CALL @(SP)+ ;CHECK ACCESSR, DRSTS D.RS16 ;ACCESS DENIED IF WE GET HERE;+(; **-$CRATT-CREATE ATTACHMENT DESCRIPTOR;AE; THIS ROUTINE CREATES AN ATTACHMENT DESCRIPTOR AND INSERTS IT IN THES; NECESSARY QUEUES. ; ; INPUTS:Z;;,; R2=PCB ADDRESS OF REGION BEING ATTACHED TO; R4=ACCESS CODE"; R5=TCB ADDRESS OF ATTACHING TASK;C ; OUTPUTS:;+; C=0 IF SUCCESSFULH&; R1=ADDRESS OF ATTACHMENT DESCRIPTOR; R0 IS MODIFIED 8; C=1 IF AN ATTACHMENT DESCRIPTOR COULD NOT BE ALLOCATED; R0,R1 ARE MODIFIED+;- .IFTF $CRATT::MOV R3,-(SP) ;SAVE R3F MOV R2,-(SP) ;SAVE PCB ADDRESSR3 MOV #A.LGTH,R1 ;PICK UP ATTACHMENT DESCRIPTOR SIZES1 CALL $ALOCB ;ALLOCATE THE ATTACHMENT DESCRIPTOR # BCS 10$ ;IF CS ALLOCATION FAILURE;4 ADD R0,R1 ;POINT PAST END OF ATTACHMENT DESCRIPTOR( MOV (SP),-(R1) ;SET PCB ADDRESS (A.PCB)0 MOV R4,-(R1) ;INIT STATUS AND MAP COUNT (A.STS)2 BIC #^C17,(R1) ;CLEAR ALL BUT ACCESS BITS (A.STS)/ TST -(R1) ;POINT TO TCBL THREAD WORD (A.TCBL) - MOV R5,R0 ;POINT TO TCB ATTACHMENT LISTHEADF ADD #T.ATT,R0 ;0 CALL $QINSF ;INSERT DESCRIPTOR AT END OF QUEUE& MOV R5,-(R1) ;SET TCB ADDRESS (A.TCB)$ CLRB -(R1) ;ZERO I/O COUNT (A.IOC)= MOVB T.PRI(R5),-(R1) ;INIT PRIORITY TO 00p5u+utkTADATADATADATADATADATATASK PRIORITY (A.PRI)A* TST -(R1) ;POINT TO PCBL THREAD (A.PCBL)/ MOV (SP),R0 ;POINT TO PCB ATTACHMENT LISTHEADS ADD #P.ATT,R0 ;* CALL $QINSP ;INSERT IN QUEUE BY PRIORITY CLC ;INDICATE SUCCESS&10$: MOV (SP)+,R2 ;RESTORE PCB ADDRESS MOV (SP)+,R3 ;RESTORE R3C RETURN ;, .IFTT ;+,; **-$SRATT-SEARCH FOR ATTACHMENT DESCRIPTOR;NJ; THIS ROUTINE VERFIES IF A VALID REGION ID WAS PASSED IN A PLAS DIRECTIVEG; BY SEARCHING FOR THE CORRESPONDING ATTACHMENT DESCRIPTOR IN THE TCB'SO; ATTACHMENT QUEUE. ;P ; INPUTS:-;); (R3)=REGION ID TO VERIFY; 0 FOR TASK REGION+; 1-17 FOR OTHER STATICALLY LINKED REGIONS, ; R5=TCB ADDRESS OF CURRENT TASK;B ; OUTPUTS:;C%; R5=ADDRESS OF ATTACHMENT DESCRIPTOR ;SB; D.RS86 IS RETURNED IF THE ATTACHMENT DESCRIPTOR CANNOT BE FOUND.;->$SRATT::MOV T.ATT(R5),R5 ;POINT TO FIRST ATTACHMENT DESCRIPTOR MOV (R3),-(SP) ;SAVE REGION ID ( CMP (SP),#17 ;STATICALLY LINKED REGION? BHI 9$ ;NO IF HI15$: DEC (SP) ;SEARCH FOR PROPER ATTACHMENT DESCRH BLT 20$ ;IF LT, FOUND IT& MOV (R5),R5 ;POINT TO NEXT ATT DESCR BEQ 15$ ;IF EQ, END OF LISTE BR 5$ ;GO AGAIN +9$: ADD #A.TCBL,(SP) ;ADD BIAS TO LINK WORDB,10$: CMP R5,(SP) ;MATCH ON THIS DESCRIPTOR? BEQ 20$ ;IF EQ YES5 MOV (R5),R5 ;ELSE POINT TO NEXT DESCRIPTOR (A.TCBL)O BNE 10$ ;IF NE THERE IS ONE5%15$: DRSTS D.RS86 ;INVALID REGION IDT<20$: SUB #A.TCBL,R5 ;POINT TO START OF ATTACHMENT DESCRIPTOR TST (SP)+ ;CLEAN STACK RETURN ;$;+/; **-$SRWND-SEARCH FOR SPECIFIED ADDRESS WINDOW2; H; THIS ROUTINE VERIFIES THAT THE SPECIFIED ADDRESS WINDOW ID CORRESPONDS(; TO A VALID ESTABLISHED ADDRESS WINDOW.;A ; INPUTS:;; ; (R3)=ADDRESS WINDOW ID#; R4=ADDRESS OF CURRENT TASK HEADER? ; R5=TCB ADDRESS OF CURRENT TASK; ; OUTPUTS:;N&; R4=POINTER TO SPECIFIED WINDOW BLOCK; R0 IS MODIFIED.5;D?; D.RS87 IS RETURNED IF THE SPECIFIED ADDRESS WINDOW IS INVALIDT;-4$SRWND::MOV H.WND(R4),R4 ;POINT TO NUMBER OF WINDOWS1 MOVB (R3),R0 ;PICK UP ADDRESS WINDOW ID (W.NID)D BEQ 10$ ;IF EQ ILLEGAL .IF DF U$$DAS CMP #1,R0 ;ADDRESS WINDOW 1 ?C BNE 5$ ;IF NE NO/ BIT #T4.DSP,T.ST4(R5) ;TASK USE USER D SPACE ?- BNE 10$ ;IF NE YES, CAN'T CHANGE WINDOW ONEU5$: ;REFERENCE LABELT .ENDC ; DF U$$DAS# CMP R0,(R4)+ ;WINDOW ID TOO LARGE?T BHIS 10$ ;IF HIS YES, ASL R0 ;CONVERT WINDOW ID TO 8 WORD OFFSET ASL R0 ; ASL R0 ; ASL R0 ;$ ADD R0,R4 ;POINT TO ADDRESS WINDOW5 TST W.BSIZ(R4) ;IS IT AN ESTABLISHED ADDRESS WINDOW?  BEQ 10$ ;IF EQ NON RETURN ;$*10$: DRSTS D.RS87 ;INVALID ADDRESS WINDOW;+ ; **-$UNMAP-UNMAP ADDRESS WINDOW; B; THIS ROUTINE SEARCHES FOR AND CONDITIONALLY UNMAPS THE SPECIFIED; ADDRESS WINDOW.E;N ; INPUTS:$; %; R4=ADDRESS OF WINDOW TO BE UNMAPPEDS; ; OUTPUTS:;W; R0 IS MODIFIED; ; C=1 IF UNMAPPING WAS PERFORMED;- .ENABL LSB811$: RETURN ;RETURN TO KEEP BRANCH FROM BREAKINGD-$UNMAP::TST (R4) ;IS WINDOW MAPPED? (W.BPCB) " BEQ 1$ ;IF EQ, WINDOW NOT MAPPED MOV R3,-(SP) ;SAVE REGISTERSR MOV R2,-(SP) ;S MOV R1,-(SP) ;  .IF DF F$$MAP&X$$HDR&P$$LAS TST $FMAPP ;TASK USE FAST MAP? BEQ 5$ ;IF EQ NO* MOVB W.BFPD(R4),R0 ;GET FIRST PDR ADDRESS BPL 5$ ;IF PL NOT USER WINDOW, ;CAN'T BE SET FAST MAP ASL R0 ;ADJUST TOU ASL R0 ;QUADWORD OFFSETD% BIC #177407,R0 ;REMOVE UNNEEDED BITS ADD $FMAPP,R0 ;POINT TO BLOCK CLR (R0) ;INDICATE UNUSEDR5$:E .ENDC ; DF F$$MAP&X$$HDR&P$$LAS< MOV W.BATT(R4),R0 ;PICK UP ADDRESS OF ATTACHMENT DESCRIPTOR4 CLR W.BATT(R4) ;CLEAR ATTACHMENT DESCRIPTOR POINTER) DECB A.MPCT(R0) ;DECREMENT MAPPING COUNT9 MOVB A.MPCT(R0),-(SP) ;SAVE MAPPING COUNT FOR TEST LATER , MOV A.TCB(R0),R1 ;POINT TO TASK TCB ADDRESS .IF DF X$$HDR2 MOV $SAHPT,R0 ;GET ADDRESS OF CURRENT TASK HEADER .IFF 2 MOV $HEADR,R0 ;GET ADDRESS OF CURRENT TASK HEADER .ENDC .IF DF S$$LIB!U$$DASK7 MOV H.SMAP(R0),-(SP) ;GET SUPER MAPPING MASK FOR LATER$ .ENDC ; DF S$$LIB!U$$DAS,4 MOV H.WND(R0),R2 ;GET ADDRESS OF FIRST WINDOW BLOCK, MOVB W.BF00p=uttblPD(R4),R0 ;POINT TO FIRST USER PDR  P .IF DF S$$LIB A BPL 17$ ;IF PL SUPER WINDOW- .IFTF ; DF S$$LIB10$: ;REFERENCE LABEL .IF DF U$$DAS& CMP #UDSDR0,R0 ;USER D SPACE WINDOW ?, BLOS 140$ ;IF LOS YES, HANDLE USER D SPACE .ENDC ; DF U$$DAS* TST W.BLVR+2(R2) ;IS THE TASK PRIVILEGED? BEQ 14$ ;IF EQ NOF5 MOV KISAR0-UINDR0(R0),UINAR0-UINDR0(R0) ;RESTORE PRVM ;MAPPING .IF DF M$$PRO0 MOV #177406,(R0)+ ;RESTORE R/W 4K BYPASS ACCESS .IFF ; DF M$$PROM( MOV #77406,(R0)+ ;RESTORE R/W 4K ACCESS .ENDC ; DF M$$PRO .IF DF U$$DAS8 BITB $BTMSK-UINDR0-2(R0),1(SP) ;THIS APR MAPPED THROUGH ;DISCRETE USER D WINDOW. BNE 15$ ;IF NE YES, LEAVE USER/SUPER D ALONE8 MOV KISAR0-UINDR0-2(R0),UDSAR0-UINDR0-2(R0) ;MAP USER D ;TO EXECI .IF DF M$$PRO> MOV #177406,UDSDR0-UINDR0-2(R0) ;RESTORE R/W 4K BYPASS ACCESS .IFF ; DF M$$PRO 6 MOV #77406,UDSDR0-UINDR0-2(R0) ;RESTORE R/W 4K ACCESS .ENDC ; DF M$$PRO .ENDC ; DF U$$DAS .IFT ; DF S$$LIBR< BITB $BTMSK-2-UINDR0-2(R0),(SP) ;SUPER I MAPPED TO USER D ? BNE 15$ ;IF NE NON< MOV KISAR0-UINDR0-2(R0),SDSAR0-UINDR0-2(R0) ;MAP SUPER D TO ;EXEC .IF DF M$$PRO> MOV #177406,SDSDR0-UINDR0-2(R0) ;RESTORE R/W 4K BYPASS ACCESS .IFF ; DF M$$PRO 6 MOV #77406,SDSDR0-UINDR0-2(R0) ;RESTORE R/W 4K ACCESS .ENDC ; DF M$$PRO K .IFTF E BR 15$ ;$14$: CLR (R0)+ ;CLEAR NEXT USER PDR .IF DF U$$DAS: BITB $BTMSK-UINDR0-2(R0),1(SP) ;THIS USER D APR MAPPED BY ;EXPLICIT D SPACE WINDOWK" BNE 15$ ;IF NE YES, DON'T CHANGE, CLR UDSDR0-UINDR0-2(R0) ;UNMAP USER D SPACE .ENDC ; DF U$$DAS .IFT ; DF S$$LIBE: BITB $BTMSK-2-UINDR0-2(R0),(SP) ;SUPER D MAPPED TO USER D ;FOR THIS APR ?  BNE 15$ ;IF NE NO.- CLR SDSDR0-UINDR0-2(R0) ;UNMAP SUPER D SPACE( .IFTF ; DF S$$LIB .IF DF U$$DAS BR 15$ ;SKIP USER D CODE5A140$: BICB $BTMSK-UDSDR0(R0),1(SP) ;INDICATE REMAPPING TO I SPACE > MOV UINAR0-UDSDR0(R0),UDSAR0-UDSDR0(R0) ;MAP USER D TO USER I1 MOV UINDR0-UDSDR0(R0),(R0)+ ;AND SET SAME ACCESS  .IF DF S$$LIB< BITB $BTMSK-2-UDSDR0-2(R0),(SP) ;THIS SUPER D APR MAPPED TO ;USER D SPACE  BNE 15$ ;IF NE NO,< MOV UINAR0-UDSDR0-2(R0),SDSAR0-UDSDR0-2(R0) ;MAP SUPER D TO ;USER D< MOV UINDR0-UDSDR0-2(R0),SDSDR0-UDSDR0-2(R0) ;AND SET ACCESS .ENDC ; DF S$$LIB .ENDC ; DF U$$DAS15$: DECB W.BNPD(R4) ;DONE YET?- BGT 10$ ;IF GT NOI .IFT ; DF S$$LIBP( BR 18$ ;SKIP SUPER I SPACE WINDOW CODE117$: ADD #SDSDR0,R0 ;ADJUST TO SUPER D SPACE PDRS+4 DECB $SUPFL ;COUNT ONE LESS SUPERVISOR MODE WINDOW& BNE 170$ ;IF NE THERE STILL ARE SOME& BIC #10,SR3 ;DISABLE CSM INSTRUCTION8 BIS #PMODE!CMODE,$STACK-2 ;FORCE EXECUTION TO USER MODE8170$: BITB $BTMSK-2-SDSDR0(R0),(SP) ;THIS APR OVERMAPPED! BEQ 171$ ;IF EQ NO, DON'T TOUCHC# CLR (R0)+ ;CLEAR NEXT SUPER D PDR; BR 172$ ;GO DO NEXT ONEN171$: TST (R0)+ ;SKIP THIS APR !172$: DECB W.BNPD(R4) ;DONE YET ?  BGT 170$ ;IF GT NO .ENDC ; DF S$$LIB18$: ;REFERENCE LABELS .IF DF U$$DAS!S$$LIB * MOV $SAHPT,R0 ;GET ADDRESS OF TASK HEADER> MOVB 1(SP),H.DMAP(R0) ;RESTORE D SPACE MAPPING MASK TO HEADER$ TST (SP)+ ;CLEAN OFF MAPPING MASKS .ENDC ; DF U$$DAS!S$$LIBE* MOV R1,R0 ;COPY TCB ADDRESS FOR DEACCESS' MOV (R4),R1 ;POINT TO PCB TO DEACCESS  ' O .IF DF M$$PRO  E0 CALL $RESBP ;RESET CACHE BYPASS AS APPROPRIATE $ .IFTF 4 TSTB (SP)+ ;WAS THIS LAST MAP THROUGH ATTACHMENT ?. BNE 20$ ;IF NE NO, DON'T DEACCESS REGION YET MOV R0,-(SP) ;SAVE REGISTERSD MOV R1,-(SP) ; CALL $DEARG ;DEACCESS REGION MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R0 ;C%20$: CLR (R4) ;UNMAP WINDOW (W.BPCB)C N .IFTP G S  .IF DF M$$EXT S1 CMP P.REL(R1),#177600 ;IS REGION IN THE IO PAGE?E  .IFF4 1/ CMP P.REL(R1),#7600 ;IS REGION IN THE IO PAGE?P  .ENDC  S BLO 95$ ;NO IF LOS' CALL $SETAT ;RECALULATE TASK AFFINITYS  .IFTF L$95$: MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 ;T MOV (SP)+,R3 ;Y% SEC 00pEu+utkTADATADATADATADATADATA ;RETURN CS FOR WINDOW UNMAPPEDV100$: RETURN ; D .ENDC C  .ENDC ; DF P$$LAS R .DSABL LSBE M;+,; **-$GTMCT-DETERMINE NUMBER OF MAPPED TASKS;I; THIS ROUTINE CALCULATES THE NUMBER OF WINDOWS MAPPED TO A GIVEN REGION.O7; THE VALUE RETURNED IS FOR DETERMINING IF CACHE BYPASS;; IS NECESSARY FOR THIS REGION..;C ; INPUTS:B;9; R1=PCB ADDRESS; ; OUTPUTS:;L+; R2=NUMBER OF WINDOWS MAPPED TO THE REGION(; R2=0 FOR READ ONLY COMMONSV; R2=1 IF ONE WINDOW IS MAPPEDS.; R0=ADDRESS OF TASK'S ATTACHMENT DESCRIPTOR6; R2=2 IF 2 OR MORE WINDOWS ARE MAPPED TO THIS REGION; ; R0 MODIFIED+;- $ C .IF DF M$$PRO O'$GTMCT::CLR R2 ;ASSUME NO MAPPED TASKSA) BIT #P2.RON,P.ST2(R1) ;READ ONLY REGION?  BNE 30$ ;YES IF NE MOV R1,-(SP) ;E( CLR -(SP) ;RESERVE A WORD ON THE STACK' ADD #P.ATT,R1 ;POINT TO ATT DESCR LIST *10$: MOV (R1),R1 ;POINT TO NEXT ATT DESCR BEQ 20$ ;IF EQ END OF LIST( MOVB A.MPCT-A.PCBL(R1),R0 ;TASK MAPPED? BEQ 10$ ;IF EQ NOS, MOV R1,(SP) ;SAVE ATTACHMENT DESCR ADDRESS3 ADD R0,R2 ;CALCULATE TOTAL NUMBER OF TASKS MAPPEDO' CMP R2,#2 ;AT LEAST TWO TASKS MAPPED? BLT 10$ ;IF LT NOO220$: SUB #A.PCBL,(SP) ;POINT TO START OF ATT DESCR$ MOV (SP)+,R0 ;GET ATT DESCR ADDRESS MOV (SP)+,R1 ;RESTORE R1,30$: RETURN ;S ;+; **-$STCXT-SET MAPPING CONTEXT.;,7; THIS ROUTINE RELOADS THE PDRS FOR A SPECIFIED REGION. ;T ; INPUTS:;Q>; IF CALLED TO FORCE SECOND MAPPED TASK TO BYPASS THE CACHE:;:; R4=ATTACHMENT DESCRIPTOR FOR FIRST TASK TO MAP TO REGION;; R5=ATTACHMENT DESCRIPTOR FOR SECOND TASK TO MAP TO REGION;PI; IF CALLED TO RELOAD THE PDRS FOR THE ONLY TASK MAPPED TO THIS REGION:L;P9; R4=ATTACHMENT DESCRIPTOR FOR ONLY TASK MAPPED TO REGIONR; R5=0;M ; OUTPUTS:;SB; THE PDRS ARE SET UP SO THAT ACCESSES TO THIS REGION BYPASS CACHE; AS APPROPRIATE.E;L;- E$STCXT:: ;REFERENCE LABEL  .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGS .ENDC/ MOV $TKTCB,R0 ;GET TCB ADDRESS OF CURRENT TASKR! BEQ 100$ ;IF EQ NO CURRENT TASKC) BIT #TS.RUN,T.STAT(R0) ;IS TASK RUNNING?R BEQ 100$ ;NO IF EQ" MOV T.PCB(R0),R0 ;GET PCB ADDRESS .IF DF X$$HDR  .IFTF% MOV P.HDR(R0),R1 ;GET HEADER ADDRESSA .IFT ! BNE 10$ ;IF NE, RESIDENT HEADERS1 MOV P.REL(R0),KISAR6 ;MAP TO NON RESIDENT HEADERG- MOV #140000,R1 ;POINT TO NON RESIDENT HEADERE10$: .ENDC- MOV R4,R2 ;COPY ATT DESCR ADDRESS OF CALLER,! CALL $SRWAT ;SEARCH FOR WINDOW N BCS 100$ ;IF CS NOT FOUND ( TST W.BPCB(R0) ;IS WINDOW STILL MAPPED? BEQ 100$ ;NO IF EQ2 BIT #WB.NBP,W.BLPD(R0) ;CACHE BYPASS NOT DESIRED?# BNE 100$ ;YES IF NE DO NOT BYPASSB( CLR -(SP) ;RESERVE A WORD ON THE STACK1 MOVB W.BNPD(R0),(SP) ;GET NUMBER OF PDRS TO LOAD, MOV W.BLPD(R0),R2 ;GET CONTENTS OF LAST PDR( BIC #77777,R2 ;KEEP ONLY THE BYPASS BIT- MOVB W.BFPD(R0),R1 ;GET ADDRESS OF FIRST PDR : . .IF DF S$$LIB  BMI 30$ ;IF MI USER WINDOW( ADD #SISDR0,R1 ;POINT TO SUPERVISOR PDR S .IFTF C-30$: BIC #100000,(R1) ;CLEAR BYPASS INDICATORM, BIS R2,(R1)+ ;SET BYPASS BIT AS APPROPRIATE ( .IFTC B CMP R1,#UISDR0 ;USER WINDOW?; BLO 40$ ;NO IF LOS+ MOV -2(R1),SDSDR0-UISDR0-2(R1) ;RELOAD PDR V .ENDC ) P&40$: DEC (SP) ;FINISHED LOADING PDRS? BGT 30$ ;IF GT NON TST (SP)+ ;CLEAN THE STACK100$: ;REFERENCE LABEL .IF DF X$$HDR) MOV (SP)+,KISAR6 ;RESTORE KERNEL MAPPING  .ENDC TST R5 ;RESET BYPASS) BEQ 110$ ;IF EQ YES, NO TASK TO UNBLOCKP" MOV A.TCB(R5),R0 ;GET TCB ADDRESS! DEC T.STAT(R0) ;UNBLOCK THE TASKS2 CALLR $SETCR ;SET A CONDITIONAL SCHEDULE REQUEST110$: RETURN ; ;+; **-$SRWAT-SEARCH FOR WINDOWS;M8; THIS ROUTINE SEARCHES FOR A MAPPED WINDOW WITH A GIVEN; ATTACHMENT DESCRIPTOR.;D ; INPUTS:R;; R1=HEADER ADDRESS"; R2=ATTACHMENT DESCRIPTOR ADDRESS;; ; OUTPUTS:;*; C=1 IF NO MATCH ON ATTACHMENT DESCRIPTOR;E; C=0 IF WINDOW FOUNDN; R0=WINDOW ADDRESS;A; ; R0 MODIFIEDE;-4$SRWAT::MOV H.WND(R1),R0 ;POINT TO NUMBER OF WINDOWS' MOV (R0)+,-(S00pMuttblP) ;GET NUMBER OF WINDOWSC510$: CMP W.BATT(R0),R2 ;ATTACHMENT DESCRIPTORS MATCH?  BNE 15$ ;IF NE NO # TSTB A.MPCT(R2) ;IS WINDOW MAPPED?H BNE 20$ ;IF NE YES)15$: ADD #W.BLGH,R0 ;POINT TO NEXT WINDOWT DEC (SP) ;ANY WINDOWS LEFT? BGT 10$ ;IF GT YES SEC ;WINDOW NOT FOUND:20$: MOV PC,(SP)+ ;CLEAN THE STACK WITHOUT MODIFYING CARRY RETURN ;R;+; **-$RESBP-RESET CACHE BYPASS;W3; THIS ROUTINE WILL RESET CACHE BYPASS FOR A REGION.-; IF ONLY ONE WINDOW IS MAPPED TO THE REGION.0;- ; INPUTS:U;R; R1=PCB ADDRESS;P ; OUTPUTS:;;7; CACHE BYPASS IS DISABLED IF ONLY ONE WINDOW IS MAPPEDT; TO THE REGION.;O;- D$RESBP::SAVNR ;SAVE REGISTERSD MOV R3,-(SP) ;T MOV R2,-(SP) ; MOV R1,-(SP) ;I MOV R0,-(SP) ;T .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING  .ENDC6 CALL $GTMCT ;GET NUMBER OF TIMES REGION IS MAPPED TO DEC R2 ;ONLY MAPPED ONCE? BNE 100$ ;IF NE NO" MOV A.TCB(R0),R2 ;GET TCB ADDRESS" MOV T.PCB(R2),R2 ;GET PCB ADDRESS< BIT #PS.OUT!PS.CKP!PS.CKR,P.STAT(R2) ;IS TASK CHECKPOINTED? BEQ 10$ ;IF EQ NO * BICB #AS.SBP,A.STAT(R0) ;CLEAR BYPASS BIT: BISB #AS.RBP,A.STAT(R0) ;INDICATE BYPASS IS NOT NECESSARY BR 100$ ;  .IF DF X$$HDR  .IFTF)10$: MOV P.HDR(R2),R1 ;GET HEADER ADDRESSR .IFTK! BNE 20$ ;IF NE, RESIDENT HEADER1 MOV P.REL(R2),KISAR6 ;MAP TO NON RESIDENT HEADER - MOV #140000,R1 ;POINT TO NON RESIDENT HEADERE20$: .ENDC/ MOV R0,R2 ;COPY ATTACHMENT DESCRIPTOR ADDRESSR CALL $SRWAT ;SEARCH FOR WINDOW BCS 100$ ;IF CS NOT FOUNDI7 BIC #100000,W.BLPD(R0) ;RESET CACHE BYPASS IN LAST PDR,8 BIT #WB.NBP!WB.BPS,W.BLPD(R0) ;SHOULD TASK RELOAD PDRS? BNE 100$ ;IF NE NO C0 MOV R2,R4 ;COPY ATT DESCR FOR ONLY TASK MAPPED CLR R5 ;1 MOV A.TCB(R2),R2 ;GET TCB ADDRESS OF MAPPED TASK2) BIT #TS.RUN,T.STAT(R2) ;IS TASK RUNNING?) BEQ 100$ ;IF EQ NO/ MOVB T.CPU(R2),R2 ;FIND CPU TASK IS RUNNING ONI ASL R2 ;CONVERT TO WORD INDEXV MOV $BTMSK(R2),R2 ;GET CPU BITO6 MOV #$STCXT,R3 ;GET ADDRESS OF ROUTINE TO RELOAD PDRS2 CALL $EXROP ;EXECUTE $STCXT ON CORRECT PROCESSOR E100$: ;REFERENCE LABEL# .IF DF X$$HDR( MOV (SP)+,KISAR6 ;RESTORE APR 6 MAPPING F .ENDC M MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R1 ;R MOV (SP)+,R2 ;B MOV (SP)+,R3 ;A RETURN  P;+"; **-$SETBP-SETUP FOR CACHE BYPASS;RC; THIS ROUTINE WILL DETERMINE IF ONLY ONE WINDOW IS MAPPED TO THIS RG; REGION. IF SO, THE TASK MAPPED TO THIS REGION IS NOTIFIED TO BYPASS ; CACHE AS NECESSARY.G;A ; INPUTS:O;N; R0=TCB ADDRESS; R1=PCB ADDRESS7; R3=WINDOW ADDRESS OF TASK ABOUT TO MAP TO THIS REGION ;E ; OUTPUTS:;$6; TASK MAPPED TO THIS REGION IS NOTIFIED AS NECESSARY.9; TASK ABOUT TO MAP IS BLOCKED (IF NECESSARY) UNTIL TASK R%; ALREADY MAPPED RELOADS ITS CONTEXT.R;R;- $SETBP::SAVNR ;SAVE REGISTERSY MOV R3,-(SP) ;R MOV R2,-(SP) ;M MOV R1,-(SP) ;I MOV R0,-(SP) ;  .IF DF X$$HDR' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGO .ENDC MOV R0,R4 ;COPY TCB ADDRESS+ CALL $GTMCT ;GET NUMBER OF WINDOWS MAPPEDB$ DEC R2 ;ONLY ONE CURRENTLY MAPPED? BNE 100$ ;IF NE NO510$: MOV A.TCB(R0),R1 ;GET TCB ADDRESS OF TASK MAPPEDN MOV T.PCB(R1),R1 ;POINT TO PCBK9 BIT #PS.OUT!PS.CKP!PS.CKR,P.STAT(R1) ;TASK CHECKPOINTED?E BEQ 20$ ;IF EQ NOS6 BISB #AS.SBP,A.STAT(R0) ;INDICATE BYPASS IS NECESSARY BICB #AS.RBP,A.STAT(R0) ; BR 100$ ;V320$: MOV R0,R2 ;COPY ATTACHMENT DESCRIPTOR ADDRESSM .IF DF X$$HDRV MOV R1,R2 ;COPY PCB POINTERV% MOV P.HDR(R1),R1 ;GET HEADER ADDRESST! BNE 30$ ;IF NE, RESIDENT HEADERD1 MOV P.REL(R2),KISAR6 ;MAP TO NON RESIDENT HEADERN- MOV #140000,R1 ;POINT TO NON RESIDENT HEADER 30$: MOV R0,R2 T .IFF)% MOV P.HDR(R1),R1 ;GET HEADER ADDRESSS .ENDC CALL $SRWAT ;SEARCH FOR WINDOW BCS 100$ ;IF CS NOT FOUND,2 BIS #100000,W.BLPD(R0) ;SET UP LAST PDR TO BYPASS" MOV A.TCB(R2),R1 ;GET TCB ADDRESS$ CMP R1,R4 ;SAME TASK MAPPED TWICE? BEQ 100$ ;IF EQ YESX; BIT #TS.RUN,T.STAT(R1) ;IS TASK RUNNING ON SOME PROCESSOR?  BEQ 100$ ;IF EQ NO MOV00pUu+utkTADATADATADATADATADATA R1,-(SP) ;SAVE R1# INC T.STAT(R4) ;BLOCK CALLING TASKP MOV R4,R0 ;COPY TCB ADDRESS#% CALL $SETCR ;SET A SCHEDULE REQUEST  MOV (SP)+,R1 ;RESTORE R1)2 MOV R2,R4 ;COPY ATTACHMENT DESCR FOR TASK MAPPED1 MOV W.BATT(R3),R5 ;GET ATT DESCRIPTOR OF CALLER C7 MOVB T.CPU(R1),R2 ;GET CPU ID ON WHICH TASK IS RUNNING  ASL R2 ;CONVERT TO WORD INDEXB MOV $BTMSK(R2),R2 ;GET RUN MASK/ MOV #$STCXT,R3 ;GET ADDRESS OF ROUTINE TO CALLN6 CALL $EXROP ;EXECUTE $STCXT ON THE CORRECT PROCESSOR100$: ;REFERENCE LABELP .IF DF X$$HDR) MOV (SP)+,KISAR6 ;RESTORE KERNEL MAPPING  .ENDC MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R1 ;( MOV (SP)+,R2 ;R MOV (SP)+,R3 ;C RETURN ;T S .ENDC ; DF M$$PRO V B (;+; **-$DELRG-DELETE REGIONA;RH; THIS ROUTINE ASSUMES ALL CHECKS HAVE BEEN MADE ON WHETHER A REGION MAYF; BE DELETED OR NOT. IT UNCONDITIONALLY DELETES THE REGION REGARDLESS+; OF WHAT STATE THE REGION IS CURRENTLY IN.P;EF; WHEN THE REGION IS BE DELETED, A NUMBER OF OPERATIONS MAY HAVE TO BEE; PERFORMED TO EFFECT ALL NECESSARY CLEANUP, DEPENDING ON THE CURRENTMH; STATE OF THE REGION AS DETERMINED BY THE BITS PS.OUT AND PS.CKP. NOTED; THAT IF THE REGION IS OUT OF MEMORY, IT CANNOT BE IN THE PARTITIONC; WAIT QUEUE, LOADER OR LOADER QUEUE. THIS IS DUE TO THE FACT THATBH; SINCE THE CURRENT TASK IS RUNNING, IT HAS EITHER NOT BEEN MAPPED (COM-H; MON CANNOT BE CONTENDING FOR MEMORY) OR MAPPED AND NOT BLOCKED (COMMONE; IS IN MEMORY). ON DELETION, IF THE REGION HAS A NAME IT IS REMOVEDEE; FROM THE COMMON BLOCK DIRECTORY. ADDITIONAL CLEANUP ACTIONS FOR THEU); FOUR POSSIBLE STATES OF THE REGION ARE: ;T=; (PS.OUT=0,PS.CKP=0 => COMMON IS IN MEMORY) - RELEASE MEMORYF&; DELETE REGION PCB AND ANY DISK PCB.;AB; (PS.OUT=0,PS.CKP=1 => COMMON IS IN PROCESS OF BEING CHECKPOINTED:; OUT) - RELEASE MEMORY AND COUNT ON THE LOADER TO DETECT6; THIS CONDITION AND RELEASE ANY CHECKPOINT SPACE AND"; DELETE REGION PCB AND DISK PCB.;E@; (PS.OUT=1,PS.CKP=0 => REGION NEVER LOADED) - DELETE REGION PCB; AND ANY DISK PCB.;T=; (PS.OUT=1,PS.CKP=1 => REGION IS CHECKPOINTED OUT) - RELEASES7; CHECKPOINT SPACE AND DELETE REGION PCB AND DISK PCB.I;N ; INPUTS:R;A; R0=REGION PCB ADDRESS.;P ; OUTPUTS:; ; NONE.;- U5$DELRG::BIT #PS.COM,P.STAT(R0) ;IS IT A NAMED COMMON?T BEQ 40$ ;IF EQ NO , TST P.NAM(R0) ;DOES THE REGION HAVE A NAME? BEQ 40$ ;IF EQ NOE< MOV #$CBDHD-P.CBDL,R1 ;POINT TO COMMON BLOCK DIRECTORY HEAD230$: CMP P.CBDL(R1),R0 ;POINTING TO ONE TO DELETE? BEQ 35$ ;IF EQ YES! MOV P.CBDL(R1),R1 ;POINT TO NEXT= BR 30$ ;@35$: MOV P.CBDL(R0),P.CBDL(R1) ;UNLINK FROM COMMON BLK DIRECTORY340$: BIS #PS.DEL,P.STAT(R0) ;MARK REGION FOR DELETE- BIT #PS.OUT,P.STAT(R0) ;IS REGION IN MEMORY?  BNE 50$ ;IF NE NOG MOV R0,R1 ;COPY PCB ADDRESS ) TST P.DPCB(R0) ;DOES IT HAVE A DISK PCB?T BEQ 45$ ;IF EQ NOR7 CALLR $ICHKP ;INITIATE CHECKPOINT & LET LOADER FINISHC#45$: MOV R0,-(SP) ;SAVE PCB ADDRESSR CALL $RLPR1 ;FREE MEMORY" MOV (SP)+,R0 ;RESTORE PCB ADDRESS,50$: CALLR $RLCPS ;RELEASE CHECKPOINT SPACE;+:; **-$DETRG-DETACH REGION BY ATTACHMENT DESCRIPTOR ADDRESS;NK; THIS ROUTINE DETACHES A TASK FROM A REGION AND DEALLOCATES THE ATTACHMENTSI; DESCRIPTOR. ON THE LAST DETACH OF A REGION IT IS CHECKED FOR DELETION.C$; WHEN APPRORIATE, $NXTSK IS CALLED.;T;VK; NOTE: THE DETACH REGION ROUTINE MAKES USE OF THE FOLLOWING RELATIONSHIPSE7; IN THE DATA STRUCTURES AS SHOWN IN THE DIAGRAM BELOW:C; #; A.TCB IS AT OFFSET 4 FROM A.PCBLR#; A.PCB IS AT OFFSET 4 FROM A.TCBL ;E;S ; PCBS ; +-------+ ; | |R; | |H"; |-------| ADB2; | P.ATT |--| +---------------+ +---------------+9; |-------| |--->| A.PCBL |------>| 0 |<------+A7; +----|-------| |---------------| |---------------| |N(; | | | | A.IOC | A.PRI | | | | |.; | | | |---------------| |---------------| |#; | +-------+ | A.TCB | | | |D3; | |---------------| |---------------| | 5; | TCB |--->| A.TCBL |------>| 0 00p]uJbutbl| |E=; | +-------+ | |---------------| |-->|---------------| | ); | | | | |A.MPCT | A.STAT| | | | | | 5; | | | | |---------------| | |---------------| |-*; | |-------| | | A.PCB | | | | |;; | | T.ATT |--| +---------------+ | +---------------+ |-/; | |-------| | | /; | |-------|---------------------------| ||; | | | |; | | | |; | +-------+ |; | |I; +--------------------------------------------------------------------+-;-; ;-I; THE ROUTINE BELOW CLEARS THE KEY TO SEARCH ON, AND CLEARS OFFSET 4 FROM H; THE LINK WORD BEFORE CALLING $QRMVT. $QRMVT COMPARES OFFSET 4 IN EACHK; ELEMENT ON THE LIST WITH THE KEY. THE ZERO KEY WILL MATCH THE ATTACHMENT /; DESCRIPTOR WHICH HAS BEEN MARKED WITH A ZERO. ; ; INPUTS: ; %; R5=ADDRESS OF ATTACHMENT DESCRIPTOR-;| ; OUTPUTS:;|; R0,R1,R2,R3 ARE MODIFIED. ;- 0$DETRG::MOV A.PCB(R5),R0 ;POINT TO PCB OF REGION2 ADD #P.ATT,R0 ;POINT TO ATTACHMENT DESCR LISTHEAD CLR R1 ;CLEAR SEARCH KEY& MOV A.TCB(R5),-(SP) ;SAVE TCB ADDRESS6 CLR A.TCB(R5) ;MARK ATTACHMENT DESCRIPTOR FOR REMOVAL1 CALL $QRMVT ;REMOVE DESCRIPTOR FROM PCB'S QUEUEL, TST (R0) ;IS ANYONE ELSE ATTACHED? (P.ATT) BNE 55$ ;IF NE YES ( SUB #P.ATT,R0 ;POINT TO START OF PCB 2 BIT #PS.PER,P.STAT(R0) ;PARITY ERROR IN REGION?  BEQ 22$ ;IF EQ NO 1 MOV $FXRPT,R0 ;GET TCB ADDRESS OF RECOVERY TASK :& BEQ 55$ ;IF EQ IT IS NOT INSTALLED / CMP R0,(SP) ;PARITY ERROR IN RECOVERY TASK? E BEQ 55$ ;IF EQ YES * CALL $EXRQN ;REQUEST THE RECOVERY TASK ! BR 55$ ;DO NOT DELETE REGION E-22$: TST P.NAM(R0) ;IS THIS A NAMED REGION? C BNE 25$ ;IF NE YES % MOV (SP),R1 ;PICK UP TCB ADDRESS .* MOV T.PCBV(R1),R1 ;POINT TO PCB VECTOR ! BEQ 26$ ;IF EQ THERE IS NONE #- CMP R0,2(R1) ;READ ONLY REGION OF MU TASK? B# BNE 26$ ;IF NE NO, MUST DELETE 0 BR 55$ ;ELSE DO NOT DELETE K:25$: BIT #PS.DEL,P.STAT(R0) ;IS REGION MARKED FOR DELETE?  BEQ 55$ ;IF EQ NO A'26$: CALL $DELRG ;DELETE THE REGION E)55$: MOV (SP)+,R0 ;RESTORE TCB ADDRESS 7 ADD #T.ATT,R0 ;POINT TO ATTACHMENT DESCRIPTOR LISTHEAD  CLR R1 ;CLEAR SEARCH KEY6 CLR A.PCB(R5) ;MARK ATTACHMENT DESCRIPTOR FOR REMOVAL0 CALL $QRMVT ;REMOVE DESCRIPTOR FROM TCB'S LIST$ MOV R5,R0 ;COPY DESCRIPTOR ADDRESS' MOV #A.LGTH,R1 ;SET SIZE TO DEALLOCATEB0 CALLR $DEACB ;DEALLOCATE ATTACHMENT DESCRIPTOR  .END25$: BIT #PS.DEL,P.STAT(R0) ;IS REGION MARKED FOR DELETE?  BEQ 55$ ;I .TITLE POWERL .IDENT /10.00/P;6; COPYRIGHT (C) 1986 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;*<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;I; D. N. CUTLER 1-OCT-73 ;U$; MODIFIED FOR RSX-11M-PLUS V2.1 BY:;I ; H. HUANG; H. BERNSTEIN; B. S. MCCARTHY;N+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:T; ; S. C. ADAMSD; J. W. BERZLE; M. PETTENGILL; B. S. MCCARTHY; J. C. FRANZINI;L; MODIFIED BY:;1; J. W. BERZLE 20-MAY-86 10.00; ,; JWB174 -- MODIFY POWER DOWN CALL TO IPDRV;R;.; POWERFAIL RECOVERY;F; MACRO LIBRARY CALLSE;D1 .MCALL EPKDF$,HDRDF$,HWDDF$,PCBDF$,TCBDF$,BGCK$A & EPKDF$ ;DEFINE ERROR PACKET OFFSETS% HDRDF$ ;DEFINE TASK HEADER OFFSETSM$ HWDDF$ ;DEFINE HARDWARE REGISTERS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSR, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS; ; POWERFAIL VECTOR;E .ASECT .=24PWVCT: .WORD PDOWN ;I .WORD PR7 ;I .PSECT1;+%; **-PDOWN-POWERFAIL INTERRUPT (DOWN)7;-D; THIS ROUTINE IS ENTERED AS A RESULT OF A POWER DOWN INTERRUPT. ALLH; VOLATILE MACHINE REGISTERS ARE SAVED, THE POWERFAIL VECTOR IS SWITCHEDC; TO THE POWER UP ROUTINE, AND THE PROCESSOR IS HALTED TO AWAIT THEH; POWER UP INTERRUPT. ;-PDOWN: ;REF LABEL B  .IF DF M$$PRO ;T@; IN THE MULTIPROCESSING CASE, THIS IS THE ONLY PLACE THE VECTOR@; AT 24 EVER POINTS. THIS IS BECAUSE ON POWER-UP, THE HARDWARE D00Jeu+utkTADATADATADATADATADATA; MUST USE THE VECTOR AT PHYSICAL 24, NOT KERNEL VIRTUAL 24 (BECAUSE/; THERE ISN'T ANY KERNEL MAPPING AT THAT TIME). ;A@; DUE TO THIS, WE HAVE THREE CONDITIONS WHICH CAN BRING US THRU ; THIS VECTOR.;TC; 1. POWERFAIL (POWER GOING DOWN) -- WE CAN DETERMINE THIS FROM THED@; FACT THAT MAPPING IS ENABLED (WHICH IT NEVER IS OTHERWISE).;D; 2. POWER RETURNS (AFTER A POWERFAIL) -- WE CAN DETERMINE THIS FROME; THE FACT THAT MAPPING IS NOT ENABLED, AND THE LOW MEMORY MAPPINGW>; FOR US IS SET UP IN THE $PWKA0 VECTOR (ONE WORD PER CPU).;ND; 3. POWER RETURNS (BUT WE NEVER POWERFAILED). THIS IS BECAUSE SOMEA; UNCLEVER PERSON TURNED THE KEY ON (OR OTHERWISE BROUGHT BACKTD; THE POWER) AND DIDN'T HAVE THE HALT KEY DOWN. IF THEY HAVE THEH; NEAT 11/70 REMOTE DIAGNOSTIC CONSOL, THEY CAN BE PARTIALLY EXCUSED,F; SINCE THEY HAVE NO ACTUAL HALT KEY (ALTHO THEY CAN USE THE LITTLEG; SLIDE SWITCH, WHICH MIGHT SURVIVE 100 OPERATIONS WITHOUT FAILURE).WD; IN THIS CASE WE WILL HALT THE MACHINE, AND THEY WILL NEVER KNOW!; WHAT WE DID FOR THEM. SIGH.(; 5 CACHE$ BYPASS ;;;MAKE SURE WE HAVE THE "REAL THING"E/ BIT #1,SR0 ;;;ARE WE COMING UP OR GOING DOWN?T+ BNE PDOWN1 ;;;IF NE WE'RE ON THE WAY DOWNA K;D$; NOW -- EITHER POWER UP OR SPURIOUS;E E& MOV $PWCSR,R0 ;;;GET IIST CSR ADDRESS( MOV (R0),R2 ;;;GET IIST REGISTER VALUE# SWAB R2 ;;;PUT CPU ID IN LOW BYTET, BIC #177774,R2 ;;;MAKE IT ONLY TWO BITS BIG ASL R2 ;;;AND WORD INDEX ; ; DID WE GO DOWN??? ;T E2 MOV $PWKA0(R2),R1 ;;;GET KINAR0 VALUE FROM BEFORE/ BNE 10$ ;;;IF NE THERE IS ONE, WE DID PWRFAILU W;AC; SOME CLEVER FELLOW POWERED UP THE CPU WITH THE HALT KEY UNHALTED.TB; WE WILL HALT AND HE WILL PROBABLY NEVER KNOW WE DIDN'T CRASH THEC; POSSIBLE MP SYSTEM UNDERNEATH HIM. TOO BAD IT'S A WASTE OF SPACEE$; TO GIVE HIM A SNAPPY ERRORMESSAGE.;L 5$: HALT ;;;HERE WE AREL BR 5$ ;;;OH NO YOU DON'T K610$: CLR $PWKA0(R2) ;;;SHOW WE ARE MORE OR LESS UP NOW DEC R1 ;;;REMOVE BIAS OF ONE M;$; R0 = IIST CSR ADDRESS0 ; R1 = KINAR0 VALUE FOR THIS CPU#; R2 = CPU ID * 2 FOR TABLE INDEXESW;A ;E:; WE WILL NOW SET UP THE KERNEL MAPPING AND TURN ON 18 BIT9; MODE SO THIS CPU CAN ACCESS THE LOW MEMORY CONTEXT WITHT:; WHICH IT IS SO WELL FAMILIAR. AS FAR AS THE REST OF THE@; POWERFAIL CODE IS CONCERNED, IT ALWAYS HAS ITS OWN LOW MEMORY.;$B; THIS MEANS THAT THE CODE THAT LOADS THE KERNEL I SPACE REGISTERSA; CANNOT LOAD JUNK AND THEN CORRECT IT -- IT MUST LOAD (OVERLOAD)A1; VALID INFORMATION SO THIS CODE DOESN'T GO AWRY.K;R A CLR R3 ;;;START WITH KINAR0  MOV #KINAR0,R4 ;;;DITTO520$: MOV #77406,KINDR0-KINAR0(R4) ;;;SET UP FOR 4K RWU MOV R3,(R4)+ ;;;LOAD ADDRESSU ADD #200,R3 ;;;MOVE ANOTHER 4K! CMP #KINAR0+16,R4 ;;;ARE WE DONEI BHIS 20$ ;;;IF HIS NOF E; 5; NOW CORRECT KINAR0 AND KINAR7 WITH THE REAL VALUES.M;R - MOV R1,@#KINAR0 ;;;PUT REAL OFFSET IN PAGE 0E: MOV #177600,@#KINAR0+16 ;;;PUT I/O PAGE ADDRESS IN PAGE 7, BIS #PMODE,PS ;;;PUT USER INTO PREVIOUS PS + INC SR0 ;;;TURN ON MAPPING AND AWAY WE GO) JMP PUP ;;;GO TO "NORMAL" POWERUP CODE0  .ENDC 0 M3PDOWN1: MOV SP,$PWSTK ;;;SAVE CURRENT STACK POINTERV4 MOV #$PWSTK,SP ;;;SET ADDRESS OF REGISTER SAVE AREA* MOV R5,-(SP) ;;;SAVE REGISTERS R5 THRU R0 MOV R4,-(SP) ;;;S MOV R3,-(SP) ;;;  MOV R2,-(SP) ;;;K MOV R1,-(SP) ;;;  MOV R0,-(SP) ;;;M R;##; MULTIPROCESSOR POWERFAIL SUPPORT:;V8; EACH PROCESSOR THAT POWERFAILS SETS ITS BIT IN A WORD =; WHICH CONTAINS THE MASK OF PROCESSORS IN THEIR SAVE-RESTOREN;; CODE. THEY ALSO INTERRUPT ALL OTHER ONLINE PROCESSORS TOP:; TELL THEM TO STOP WHAT THEY ARE DOING AND WAIT UNTIL THE+; POWERFAILED PROCESSORS ARE BACK UP AGAIN.A;E O;E.; SET OUR BIT IN THE POWERFAILED CPU FLAG WORD;5 R 0 .IF DF M$$PRO S LOCK$ $PWRLK,SPIN7 BIS $CPBIT,$PWRMK ;;;SET OUR BIT IN THE POWERFAIL MASK; ULOCK$ $PWRLK,SPINO) MOV $URMST,R1 ;;;GET MASK OF ONLINE URMSE) BIC $CPMSK,R1 ;;;MAKE IT PROCESSORS ONLY & BIC $CPBIT,R1 ;;;NOT OURSELVES EI00JmubutblTHER" BEQ 5$ ;;;IF EQ NOBODY UP BUT US* MOV #MP.PWF,R2 ;;;SET FUNCTION CODE IN R2 CALL $IIFNX ;;;XMIT FUNCTION5$: ;;;REFERENCE LABELT T .ENDC F E/ BIT #FE.EXT,$FMASK ;;;IS THIS A 22-BIT SYSTEM?E BEQ 21$ ;;;IF EQ NOA- BIT #HF.UBM,$HFMSK ;;;IS THERE A UNIBUS MAP? BEQ 21$ ;;;IF EQ NO6 MOV #UBMPR+<31.*4>,R0 ;;;POINT PAST LAST MAP REGISTER/ MOV #31.,R1 ;;;SET COUNT OF REGISTERS TO SAVEK320$: MOV -(R0),-(SP) ;;;SAVE HIGH 6 BITS OF ADDRESSS/ MOV -(R0),-(SP) ;;;SAVE LOW 16 BITS OF ADDRESSB! SOB R1,20$ ;;;LOOP FOR ALL UMRSM521$: BIS #PMODE,PS ;;;MAKE SURE PREVIOUS MODE IS USER $ MFPI SP ;;;SAVE USER STACK POINTER E  .IF DF S$$LIB : BIC #^CPSMODE&PMODE,PS ;;;SET PREVIOUS MODE TO SUPERVISOR* MFPI SP ;;;SAVE SUPERVISOR STACK POINTER  .ENDC  B< MOV #KINAR0+16.,R0 ;;;POINT TO KERNEL INSTR ADDRESS REG 7+2/ MOV #UINAR0+16.,R1 ;;;POINT TO USER I PAR 7 +2I/ MOV #UINDR0+16.,R2 ;;;POINT TO USER I PDR 7 +2  I O .IF DF U$$DAS9 MOV #UDSAR0+16.,R3 ;;;POINT TO USER DATA ADDRESS REG 7+2;9 MOV #UDSDR0+16.,R4 ;;;POINT TO USER DATA DESC. REG 7+2S .ENDC ; DF U$$DAS  S .IF DF K$$DAS T; MOV #KDSAR0+16.,R5 ;;;POINT TO KERNEL DATA ADDRESS REG 7+2T E .ENDC T U010$: MOV -(R1),-(SP) ;;;SAVE USER INSTR ADDR REG1 MOV -(R2),-(SP) ;;;SAVE USER DESCRIPTOR REGISTERT  N .IF DF U$$DAS3 MOV -(R3),-(SP) ;;;SAVE USER DATA ADDRESS REGISTER+3 MOV -(R4),-(SP) ;;;SAVE USER DATA DESC. REGISTER .ENDC ; DF U$$DAS  V. MOV -(R0),-(SP) ;;;SAVE KERNEL INSTR ADDR REG +  .IF DF K$$DAS 5 MOV -(R5),-(SP) ;;;SAVE KERNEL DATA ADDRESS REGISTER$ S .ENDC . D$ CMP R0,#KINAR0 ;;;ANY MORE TO SAVE? BHI 10$ ;;;IF HI YES .IF DF S$$LIB: MOV #SDSAR0+16.,R0 ;;;POINT TO SUPER DATA ADDRESS REG 7+2: MOV #SDSDR0+16.,R1 ;;;POINT TO SUPER DATA DESC. REG 7+2: MOV #SISAR0+16.,R2 ;;;POINT TO SUPER INST ADDRESS REG 7+2: MOV #SISDR0+16.,R3 ;;;POINT TO SUPER INST DESC. REG 7+29200$: MOV -(R0),-(SP) ;;;SAVE SUPER DATA ADDRESS REGISTERE4 MOV -(R1),-(SP) ;;;SAVE SUPER DATA DESC. REGISTER4 MOV -(R2),-(SP) ;;;SAVE SUPER INST ADDRESS REGISTER4 MOV -(R3),-(SP) ;;;SAVE SUPER INST DESC. REGISTER CMP R0,#SDSAR0 ;;;DONE YET? BHI 200$ ;;;IF HI NO .ENDC ; DF S$$LIB .IF DF F$$LPP% TST $HFMSK ;;;FPP HARDWARE PRESENT?T BMI 210$ ;;;IF MI NO, STFPS -(SP) ;;;STORE FLOATING POINT STATUS# SETD ;;;SET FLOATING DOUBLE MODE.. STD R0,-(SP) ;;;SAVE FLOATING POINT REGISTERS STD R1,-(SP) ;;;; STD R2,-(SP) ;;;D STD R3,-(SP) ;;;V LDD R4,R0 ;;;A STD R0,-(SP) ;;;  LDD R5,R0 ;;;- STD R0,-(SP) ;;;S+210$: CLR -(SP) ;;;PUSH AN ADDRESS OF ZERO;7 CMP @#244,#$FPPR7 ;;;IS THERE A PIRQ REGISTER TO SAVE?N2 BEQ 30$ ;;;IF EQ NO, DO DUMMY SAVE OF LOCATION 0' MOV #PIRQ,(SP) ;;;SET FOR SAVE OF PIRQ;;30$: MOV @(SP),-(SP) ;;;SAVE PIRQ REGISTER OR CONTENTS OF 0  S .ENDC .IF NDF M$$PROS - MOV #PUP,PWVCT ;;;SWITCH TO POWER UP ROUTINE; V .ENDC P& MOV SP,$POWSP ;;;SAVE SP FOR POWER UP .IF DF I$$P11&I$$PFSP MOV $IPUCB,R0 ;;;GET IP UCB, BEQ 40$ ;;;IF EQ, DRIVER POWERFAIL NOT SET MOV (R0),R0 ;;;GET IP DCBH1 MOV D.DSP(R0),R1 ;;;GET IP DRIVER DISPATCH TABLEE% BEQ 40$ ;;;IF EQ, DRIVER NOT LOADED;# MOV D.PCB(R0),R0 ;;;GET DRIVER PCB0 BEQ 40$ ;;;IF EQ, FORGET IT!. MOV P.REL(R0),KINAR5 ;;;MAP DRIVER IN I-SPACE .IF DF K$$DAS. MOV P.REL(R0),KDSAR5 ;;;MAP DRIVER IN D-SPACE .ENDC ; DF K$$DAS5 MOV D.VINI-2(R1),-(SP) ;;;GET POWER-DOWN ENTRY POINT; CALL @(SP)+ ;;;CALL DRIVER40$: ;;;REFERENCE LABEL .ENDC ; DF I$$P11&I$$PFS$ I;QF; AT THIS POINT, WE HAVE ALL BUT HALTED. WE WILL PLACE OUR KINAR0 LOWD; MEMORY MAPPING IN THE CELL IN CPA'S LOW MEMORY. THIS IS A FLAG TOD; THE POWERUP ROUTINE THAT WE HAVE ACTUALLY POWERFAILED. IF WE FAILE; TO DO THIS, THE POWERUP ROUTINE WILL JUST HALT (SINCE IT CAN'T TELLSC; THAT FACT FROM THE CASE WHERE SOMEONE POWERED UP THE MACHINE WITHD; THE HALT KEY UP.)1;(  G .IF DF M$$PRO % MOVB $PROC2,R1 ;;;GET OUR CPU OFFSET0- MOV @#KINAR00Juu+utkTADATADATADATADATADATA0,R0 ;;;GET OUR LOW MEMORY OFFSETI- CLR @#KINAR0 ;;;START USING CPA'S LOW MEMORYB H E .IF DF K$$DAS U$ CLR @#KDSAR0 ;;;D-SPACE TOO, IF ANY L .ENDC O E/ INC R0 ;;;BIAS BY ONE, SO NEVER ACTUALLY ZEROH2 MOV R0,$PWKA0(R1) ;;;STORE OUR LOW MEMORY POINTER H .ENDC E  T HALT ;;;WAIT FOR SOME JUICE!T;+!; **-PUP-POWERFAIL INTERRUPT (UP)O;NK; THIS ROUTINE IS ENTERED AS A RESULT OF A POWER UP INTERRUPT. ALL VOLATILEPF; MACHINE REGISTERS ARE RESTORED, A SCHEDULE REQUEST IS FORCED FOR THEB; NULL TASK, THE POWERFAIL INDICATOR IS INCREMENTED, AND AN RTI ISF; EXECUTED. AT THE APPROPRIATE TIME THE DISPATCHER WILL CALL THE POWER9; RECOVERY ROUTINE TO ACTUALLY PROCESS THE POWER FAILURE.Y;-/PUP: MOV $POWSP,SP ;;;RE-LOAD SP FROM POWERFAILT .IF DF F$$LPP9 MOV (SP)+,@(SP)+ ;;;CONDITIONALLY RESTORE PIRQ OR LOC. 0R% TST $HFMSK ;;;FPP HARDWARE PRESENT?E BMI 1$ ;;;IF MI NO2 LDFPS #200 ;;;SET FLOATING DOUBLE MODE, NO TRAPS1 LDD (SP)+,R0 ;;;RESTORE FLOATING POINT REGISTERSD STD R0,R5 ;;;T LDD (SP)+,R0 ;;;I STD R0,R4 ;;;M LDD (SP)+,R3 ;;;S LDD (SP)+,R2 ;;;E LDD (SP)+,R1 ;;;H LDD (SP)+,R0 ;;;A. LDFPS (SP)+ ;;;RESTORE FLOATING POINT STATUS .ENDC.1$: BIS #PMODE,PS ;;;SET PREVIOUS MODE TO USER .IF DF S$$LIB4 MOV #SDSAR0,R3 ;;;POINT TO SUPER DATA ADDRESS REG 04 MOV #SDSDR0,R2 ;;;POINT TO SUPER DATA DESC. REG 04 MOV #SISAR0,R1 ;;;POINT TO SUPER INST ADDRESS REG 04 MOV #SISDR0,R0 ;;;POINT TO SUPER INST DESC. REG 0:5$: MOV (SP)+,(R0)+ ;;;RESTORE SUPER INST DESC. REGISTER7 MOV (SP)+,(R1)+ ;;;RESTORE SUPER INST ADDRESS REGISTERR7 MOV (SP)+,(R2)+ ;;;RESTORE SUPER DATA DESC. REGISTERP7 MOV (SP)+,(R3)+ ;;;RESTORE SUPER DATA ADDRESS REGISTERI CMP R0,#SISDR0+16. ;;;DONE YET? BLO 5$ ;;;IF LO NOL .ENDC ; DF S$$LIB3 MOV #KINAR0,R0 ;;;POINT TO KERNEL INSTR ADDR REG 0P. MOV #UINAR0,R1 ;;;POINT TO USER I SPACE PAR 0. MOV #UINDR0,R2 ;;;POINT TO USER D SPACE PDR 0 0  .IF DF U$$DAS8 MOV #UDSDR0,R3 ;;;POINT TO USER DATA DESC. REGISTER 08 MOV #UDSAR0,R4 ;;;POINT TO USER DATA ADDRESS REGISTER 0 .ENDC G E .IF DF K$$DAS +2 MOV #KDSAR0,R5 ;;;POINT TO KERNEL DATA ADDR REG 0 3 .ENDC R U10$: ;;;REF LABEL I C .IF DF K$$DAS ;1 MOV #77406,KDSDR0-KDSAR0(R5) ;;;SET 4K RW ACCESS$6 MOV (SP)+,(R5)+ ;;;RESTORE KERNEL DATA INSTR ADDR REG ;B; IN THE MULTIPROCESSING, I+D SPACE CASE, WE WOULD NORMALLY TRY TO@; LOAD 1600 INTO KINAR7 AND SET IT FOR 4K RO. THIS WIPES US OUT,@; SINCE WE ARE EXECUTING OUT OF THESE REGISTERS. WE WILL DETECT,; THIS FACT, AND WILL DO ANYTHING TO KISAR7.;G E . .IF DF M$$PRO M= CMP R0,#KINAR0+16 ;;;ARE WE JUST ABOUT TO WIPE THE I/O PAGE?R BNE 15$ ;;;IF NE NOB* CMP (SP)+,(R0)+ ;;;BUMP STACK AND ADDRESS) BR 20$ ;;;SKIP ACTUAL LOAD INSTRUCTIONSV15$: ;;;REFERENCE LABEL D .ENDC D R1 MOV #77402,KINDR0-KINAR0(R0) ;;;SET 4K RO ACCESSE E .IFFN A1 MOV #77406,KINDR0-KINAR0(R0) ;;;SET 4K RW ACCESS4 O .ENDC S 1 MOV (SP)+,(R0)+ ;;;RESTORE KERNEL INSTR ADDR REGR20$: ;;;REFERENCE LABEL , D .IF DF U$$DAS6 MOV (SP)+,(R3)+ ;;;RESTORE USER DATA DESC. REGISTER6 MOV (SP)+,(R4)+ ;;;RESTORE USER DATA ADDRESS REGISTER .ENDC ; DF U$$DAS6 MOV (SP)+,(R2)+ ;;;RESTORE USER INST DESC. REGISTER6 MOV (SP)+,(R1)+ ;;;RESTORE USER INST ADDRESS REGISTER CMP R0,#KINAR0+16. ;;;DONE YET? BLO 10$ ;;;IF LO NO4 O C .IF DF K$$DAS!M$$EXT!S$$LIB , MOV #S3$BTS,SR3 ;;;SET UP SR3 S .ENDC N  .IF DF M$$PRO ( + .IF DF K$$DAS I MOV #77402,@#KINAR0+16; F .ENDC L , .IFF. D& INC SR0 ;;;TURN ON MEMORY MANAGEMENT R .ENDC  E .IF DF S$$LIB (5 BIC #^CPSMODE&PMODE,PS ;;;SET PREVIOUS MODE TO SUPERD- MTPI SP ;;;RESTORE SUPERVISOR STACK POINTERS+ BIS #PMODE,PS ;;;SET PREVIOUS MODE TO USERR. TSTB $SUPFL ;;;CURRENT TASK USE SUPER MODE ? BEQ 25$ ;;;IF EQ NO$( BIS #10,SR3 ;;;TURN ON CSM INSTRUCTION25$: ;;;REFERENCE LABEL 3 .ENDC S ' MTPI SP ;;;RESTORE USER STACK POINTER+/ BIT #FE.EXT00J}ubutbl,$FMASK ;;;IS THIS A 22-BIT SYSTEM?F BEQ 35$ ;;;IF EQ NO.: BIT #HF.UBM,$HFMSK ;;;DOES THIS SYSTEM HAVE A UNIBUS MAP? BEQ 35$ ;;;IF EQ NO(- MOV #UBMPR,R0 ;;;POINT TO FIRST MAP REGISTERT2 MOV #31.,R1 ;;;SET COUNT OF REGISTERS TO RESTORE630$: MOV (SP)+,(R0)+ ;;;RESTORE LOW 16 BITS OF ADDRESS2 MOV (SP)+,(R0)+ ;;;RESTORE HIGH 6 BITS OF ADDRESS! SOB R1,30$ ;;;LOOP FOR ALL UMRSR35$: ;;;REF LABEL; 3; SHOW OTHER PROCESSORS THAT WE ARE BACK ON THE AIR;;S E E .IF DF M$$PRO B LOCK$ $PWRLK,SPIN5 BIC $CPBIT,$PWRMK ;;;CLEAR OUT OUR BIT FROM THE MASKT F .IFTF ' INC $PWRFL ;;;SHOW POWERFAIL HAPPENEDB 3 .IFTI Q# INCB $PWRFL+1 ;;;URM POWERFAIL TOOT( BIS @$CPURM,$PFURM ;;;FOR ALL OUR URM'S ;II; AT THIS POINT, WE WANT TO ASSURE OURSELVES THAT THIS CPU WILL, IN FACT,MD; GO THROUGH DIRXT AT SOME POINT IN THE FUTURE. THIS REQUIRES A TWOI; PRONGED ATTACK -- FIRST WE SET $IIPND SO THAT IF WE RETURN FROM A CLOCK F; INTERRUPT TO A USER PROGRAM, THEN WE WILL GO THRU THE EXEC. SECOND,@; WE FIX UP THE IDLE LOOP TO LOOK AT $IIPND ON EACH LOOP AROUND.; 5 BIS $CPBIT,$IIPND ;;;TELL US LATER THAT WE HAVE WORKQ ULOCK$ $PWRLK,SPINR O .ENDC T BC; IF THE SYSTEM HAS ANY MK11 BOXES ON IT, WE WILL RESTORE THEM NOW,T@; SINCE THE RTI MAY GO BACK TO A LOADED DRIVER (OR TASK) IN ONE. .IF DF M$$K11( CALL $MKSET ;;;RESET MK11 MEMORY BOXES .ENDC ; DF M$$K11# MOV (SP)+,R0 ;;;RESTORE R0 THRU R5  MOV (SP)+,R1 ;;;  MOV (SP)+,R2 ;;;T MOV (SP)+,R3 ;;;  MOV (SP)+,R4 ;;; MOV (SP)+,R5 ;;;E& MOV (SP),SP ;;;RESTORE STACK POINTER, MOV #$ACTHD,@$RQSCH ;;;FORCE REDISPATCHING   T .IF NDF M$$PROU K1 MOV #PDOWN,PWVCT ;;;SWITCH TO POWER DOWN ROUTINEEF; AT THIS POINT WE WILL BYPASS THE CACHE. THIS PREVENTS GETTING STUCKG; IN $PWRMP, AND ALSO ASSURES THAT IF THE CODE INTERRUPTED BY POWERFAIL F; RUNS WITH CACHE BYPASSED, IT WILL BE AFTER THE POWERFAIL. (NOTE THATE; THE SYSTEM WILL ALWAYS BE CACHE BYPASSED BETWEEN POWER RECOVERY AND(; THE FIRST ENTRY TO THE EXEC) .IFFP& CACHE$ BYPASS ;;;GET THE REAL THINGS I .ENDC # T2 MOV $CKLDC,@$CKCNT ;;;RELOAD CLOCK COUNT REGISTER* MOV #K$$IEN,@$CKCSR ;;;TURN CLOCK BACK ON RTI ;;;;+; **-$POWER-POWER FAIL RECOVERYA;TC; THIS ROUTINE WILL PERFORM POWERFAIL AND INITIALIZATION FOR ACTIVE ; TASKS AND DEVICES.;T ; INPUTS:F; ; $PWRFL=GENERAL POWERFAIL FLAG:9; 0 - DON'T INVOKE ACTIVE TASK POWERFAIL AST'S AND DON'TL4; CALL DRIVERS WITHOUT KRBS. $PWRFL+1 MUST BE '; NON-ZERO OR WE WOULDN'T BE HERE.6; 1 - CALL ALL ACTIVE TASKS WITH POWERFAIL AST'S, AND; ALL DRIVERS TOO. R;A!; $PWRFL+1=DEVICE POWERFAIL FLAG:N8; 0 - $PWRFL MUST HAVE BEEN SET OR WE WOULDN'T BE HERE.9; 1 - DO ONLY DEVICE POWERFAIL, AND CHECK $PFURM FOR THEO9; UNIBUS RUN MASKS WHICH DEFINE THE RUNS TO PWRFAIL..;T=; $PFURM=MASK DEFINING THE RUNS FOR POWERFAIL IF $PWRFL+1<>0.T!; OTHERWISE THIS SHOULD BE ZERO. ; ;- .ENABL LSB 4$POWER::TSTB $PWRFL ;IS IT GENERAL (FIRST) PWRFAIL?& BEQ 16$ ;IF EQ NOT GENERAL POWERFAIL .IF DF K$$W11& CLR K$$W11+2 ;CLEAR CLOCK ERROR FLAGS' MOV #1,K$$W11+6 ;ENERGIZE OUTPUT RELAYI .ENDC;$>; EFFECT POWERFAIL AST'S FOR TASKS THAT ARE ACTIVE AND IN CORE;V( MOV $ACTHD,R5 ;GET ADDRESS OF FIRST TCB010$: MOV #AS.PFA,R4 ;GET CODE FOR POWER FAIL AST7 MOV T.ACTL(R5),-(SP) ;SAVE POINTER TO NEXT ACTIVE TASK  BEQ 15$ ;IF EQ THERE IS NONE$ CALL $DASTT ;DECLARE POWERFAIL AST215$: MOV (SP)+,R5 ;GET ADDRESS OF NEXT ACTIVE TASK BNE 10$ ;IF NE NOI;N.; DO POWERFAIL RECOVERY FOR ALL ACTIVE DEVICES;$B; IF THE POWERFAIL IS FOR A CPU URM, THEN INITIALIZE THE CACHE AND-; MEMORY PARITY REGISTERS FOR THAT PROCESSOR.S;R S16$: ;REFERENCE LABEL E V .IF DF M$$PRO ;3 BIT $CPBIT,$PFURM ;IS IT A POWERFAIL FOR THIS CPU?D& BEQ 22$ ;IF EQ NO -- JUST DO DEVICES  .IFTF E' MOV #21$,-(SP) ;INLINE SUBROUTINE CALLT E .IFTE C+ BR 18$ ;SKIP IIST INITIALIZATION ON PWRFL( + .ENDC E;+9; **-$CPNIT-INITIALIZE CPU00Ju+utkTADATADATADATADATADATA AT POWERFAIL, STARTUP, ONLINE.A;R@; THIS ROUTINE WILL PERFORM COMMON CPU INITIALIZATION FOR INITL,; SAVE, AND LOWCR CPU STARTUP.;D ; INPUTS:P;T; NONE.R;O ; OUTPUTS:;R; INITIALIZATION PERFORMED.E;B; NO REGISTERS ARE PRESERVED.;- P$CPNIT:: ;REFERENCE LABEL   .IF DF M$$PRO0; SET UP MK11 MEMORY BOXES, IN CASE WE NEED THEM .IF DF M$$K11$ CALL $MKSET ;SET MK11 MEMORY BOXES% BCS 17$ ;IF CS DIDN'T FIND THEM ALLF .ENDC ; DF M$$K11" CALL $IINIT ;INITIALIZE THE IIST* BIS $CPBIT,$URMST ;WE ARE ONLINE FOR SURE/ CALL $IINOT ;SEE IF WE CAN TALK TO OTHER CPUS%17$: MOV R2,$SCRET ;SET STATUS RETURNN" CALL $OLRNT ;SEND STATUS TO OLR R .ENDC I I:18$: CALL $DRDSE ;ALWAYS DECLARE SIG. EVENT AT CPU PWRUP. .IF DF P$$RTY( CALL $CLPAR ;CLEAR MEMORY PARITY CSR'S9 MOV $MPCSR+6,R0 ;GET ADDRESS OF 11/70 CACHE CSR REGISTER C  .IF DF P$$D70 E$ MOV $MPCTL,(R0) ;SET UP 11/70 CACHE T .IFFF  MOV #3,(R0) ;DISABLE TRAPS N .ENDC L .ENDC ; DF P$$RTY , RETURNE E21$: ;REF LABEL .IF DF P$$RTY/ MOV #177777,-(R0) ;CLEAR MEMORY ERROR REGISTERE .ENDC ; DF P$$RTY .IF DF E$$LOG1 BIT #ES.DAT,$ERFLA ;ARE WE LOGGING DATA PACKETS?A BEQ 22$ ;IF EQ NOE8 MOV #E$CSYS+,R0 ;GET POWER FAIL ERROR CODE$ CLR R1 ;INDICATE NO DATA SUBPACKET, MOV #SM.HDR,R2 ;ONLY LOG A HEADER SUBPACKET CALL $CREQU .ENDC ; DF E$$LOG , );+0;**-DRVPF-LOCAL ENTRY FOR DRIVER ONLY POWER FAIL;-#DRVPF: ;CALLED FROM $DRVPF BELOW$;B; SCAN DEVICES FROM THE CTB SIDE (I.E. PHYSICAL) AND CHECK TO MAKE; SURE THEY ARE ALL THERE.;G E22$: ;REFERENCE LABEL .IF DF M$$NET0 MOV $NETPF,R5 ;GET ADDRESS OF NETWORK POWERFAIL ;RECOVERY ROUTINE BEQ 225$ ;IF EQ THERE IS NONET( CALL (R5) ;CALL POWER RECOVERY ROUTINE .ENDC ; DF M$$NET1225$: MOV #27$,-(SP) ;RETURN TO HERE AFTER $SGFINE& CALL $SGFIN ;WE EXPECT TRAPS TO FOUR5 MOV #$CTLST,R3 ;GET ADDRESS OF FIRST ADDRESS OF CTBSR*23$: MOV (R3),R3 ;GET ADDRESS OF NEXT CTB' BEQ 35$ ;IF EQ NO MORE -- EXIT $SGFINI& MOVB L.NUM(R3),R4 ;GET NUMBER OF KRBS MOV R4,R5 ;COPY NUMBER ASL R5 ; *2B ADD R3,R5 ;$4 ADD #L.KRB,R5 ;POINTER TO JUST BEYOND LAST KRB ADDR24$: DEC R4 ;ONE LESS TO GO BLT 23$ ;IF LT NO MORE MOV -(R5),R2 ;GET KRB ADDRESS* BEQ 24$ ;THERE IS NO KRB ADDRESS IN LIST& BIT #KS.OFL,K.STS(R2) ;IS IT OFFLINE?% BNE 24$ ;IF NE YES -- DONT CHECK ITT O  .IF DF M$$PRO T- BIT K.URM(R2),$PFURM ;SHOULD WE DO THIS ONE?3 BEQ 24$ ;IF EQ NO 0 BIT K.URM(R2),@$CPURM ;IS IT ON THIS PROCESSOR? BEQ 24$ ;IF EQ NO;  .ENDC R  V;,.; CALL DRIVER AT THE POWERFAIL-KRB ENTRY POINT;A #3 MOV L.DCB(R3),R1 ;GET DCB ASSOCIATED WITH THIS CTBD; MOV CI.PWF(R1),R0 ;ASSUME IT WASN'T DCB BUT COMMON INT TBLR7 BITB #LS.CIN,L.STS(R3) ;WAS IT COMMON INTERRUPT TABLE? 1 BNE 25$ ;IF NE YES -- GO AND CALL DRIVER IMMED.2 ; 6; R4 CONTAINS DCB ADDRESS. MAP AND CALL NORMAL DRIVER;K M+ MOV D.PCB(R1),R0 ;GET PCB OF LOADED DRIVER$, MOV P.REL(R0),KINAR5 ;MAP DRIVER IN I-SPACE I R .IF DF K$$DAS , MOV P.REL(R0),KDSAR5 ;MAP DRIVER IN D-SPACE I .ENDC P R" MOV D.DSP(R1),R1 ;GET DDT ADDRESS: MOV D.VPWF(R1),R0 ;GET ADDRESS OF DRIVER POWERFAIL ENTRY ,;;B; IF POWERFAIL ADDRESS EXISTS, CALL DRIVER AFTER SAVING REGISTERS.;I O)25$: TST R0 ;IS THERE A POWERFAIL ENTRY?S# BEQ 24$ ;IF EQ NO -- TRY NEXT KRB 6 MOV R5,-(SP) ;SAVE POINTER TO NEXT KRB ADDRESS IN CTB4 MOV R4,-(SP) ;SAVE NUMBER OF KRB'S LEFT IN THIS CTB MOV R3,-(SP) ;SAVE CTB POINTERE N:; CALL DRIVER AT POWERFAIL ENTRY POINT WITH THE ARGUMENTS:;P8; C=1 TO SHOW CONTROLLER POWERFAIL (NOT UNIT POWERFAIL).; R2=KRB ADDRESS.M; R3=CTB ADDRESS.G; ; ALL REGISTERS MAY BE USED.; - SEC ;SHOW KRB POWERFAIL, NOT UCB POWERFAILA CALL (R0) ;CALL DRIVER" MOV (SP)+,R3 ;RESTORE CTB ADDRESS7 MOV (SP)+,R4 ;RESTORE NUMBER OF KRB'S LEFT IN THIS CTBR" MOV (SP)+,R5 ;RESTORE KRB ADDRESS( BR 24$ ;GO TO NEXT KRB AND KEEP TRYING R; C; NOW SC00JubutblAN DEVICES FROM THE DCB (I.E. LOGICAL) ORIENTATION AND CALL &; THE DRIVER FOR THE APPROPRIATE ONES.;: P27$: MOV #$SCDVT,-(SP)'30$: CALL @(SP)+ ;GET NEXT UCB ADDRESSK BCC 40$ ;IF CC GOT ONE S  .IF DF M$$PRO 6 BIC @$CPURM,$PFURM ;WE JUST DID POWERFAIL FOR OUR CPU O .ENDC C % CLRB $PWRFL ;CPU POWERFAIL COMPLETEO C A .IF DF M$$PRO R5 TST $PFURM ;ANY URM'S LEFT TO PWRFAIL ON OTHER CPU?+ BNE 35$ ;IF NE YES -- EXIT NOW2 CLRB $PWRFL+1 ;CLEAR OUT URM POWERFAIL INDICATION V .ENDC H C 35$: RETURNA O'40$: MOV #30$,-(SP) ;SET RETURN ADDRESSE0 BITB #US.OFL,U.ST2(R5) ;DEVICE IN CONFIGURATION( BNE 35$ ;IF NE DEVICE IS NOT IN CONFIG" MOV S.KRB(R4),R2 ;GET KRB ADDRESS F  P .IF DF M$$PRO M' BNE 43$ ;IF NE THERE IS A KRB ADDRESSU4 TSTB $PWRFL ;IS THIS TOTAL PWRFAIL OR JUST DEVICES' BEQ 35$ ;IF EQ NOT TOTAL -- TRY AGAIN$ BR 45$ ;GO DO THIS ONE F .IFFO R BEQ 45$ ;IF EQ NO KRB ADDRESSX N .IFTR;43$: BIT K.URM(R2),$PFURM ;SHOULD WE CHECK OUT THIS DEVICE? BEQ 431$ ;IF EQ NO0 BIT K.URM(R2),@$CPURM ;IS IT ON THIS PROCESSOR? BNE 44$ ;IF NE YES BR 35$ ;EQ - NOE; CHECK FOR A DUAL PORT, LOAD SHARE DEVICE WHERE ONLY ONE PORT'S URM,EB; NAMELY THE ONE THAT IS NOT THE CURRENT OWNER (S.KRB) POWERFAILED,431$: MOV #S2.MAD!S2.LDS,R0 ;GET STATUS BITS+ BIC S.ST2(R4),R0 ;ARE ALL OF THE ABOVE SET & BNE 35$ ;IF NE NO - NOT LOAD SHARING( MOV S.KTB(R4),R0 ;ASSUME THIS IS PORT A! BIT #KP.OFL,R0 ;IS PORT A ONLINER) BEQ 35$ ;IF EQ NO, NO ONLINE PORT PWFLD CMP R0,R2 ;PORT A ?$ BNE 432$ ;IF NE NO - TAKE THIS ONE( MOV S.KTB+2(R4),R0 ;POINT TO OTHER PORT BIT #KP.OFL,R0 ;IS IT ONLINE ?P) BEQ 35$ ;IF EQ NO, NO ONLINE PORT PWFLDS$432$: MOV R0,R2 ;POINT TO OTHER KRB, BIT K.URM(R2),$PFURM ;THAT PORT POWERFAIL ?+ BEQ 35$ ;IF EQ NO (THAT WAS A LOT OF WORKS ; FOR NOTHING) 4 BIT K.URM(R2),@$CPURM ;OTHER PORT ON THIS PROCESSOR' BEQ 35$ ;IF EQ NO (DON'T WORRY, WE'LLA# ;CATCH IT LATER ON ANOTHER CPU)  $ .ENDC , 244$: BIT #KS.OFL,K.STS(R2) ;IS CONTROLLER OFFLINE? BEQ 45$ ;IF EQ NOH TSTB U.STS(R5) ;IS UNIT ACTIVE? BPL 35$ ;IF PL NO# O;R@; THE CONTROLLER IS OFFLINE, AND THE UNIT IS ACTIVE. WE HAVE A ?; PROBLEM. WE CANNOT CALL THE DRIVER AT THE CANCEL ENTRY SINCEO$; THE DEVICE REGISTERS DO NOT EXIST.;  C BGCK$A BF.ERR,BE.CSR,FATAL ;ACTIVE CONTROLLER DISAPPEARED AT PWRFL @45$: BITB #UC.PWF,U.CTL(R5) ;CALL DRIVER REGARDLESS OF ACTIVITY? BNE 50$ ;IF NE YES TSTB U.STS(R5) ;IS UNIT ACTIVE? BPL 35$ ;IF PL NOL;50$: MOV D.DSP(R3),R2 ;GET ADDRESS OF DRIVER DISPATCH TABLET" BEQ 35$ ;IF EQ DRIVER NOT LOADED ;++; **-$LDPWF-CALL DRIVER AT POWERFAIL ENTRY.A;TD; THIS ROUTINE WILL UNCONDITIONALLY CALL THE DRIVER AT ITS POWERFAIL; ENTRY FOR A SINGLE UNIT.;H ; INPUTS:G;E; R2=DDT ADDRESS. ; R3=DCB ADDRESS.R; R4=SCB ADDRESS.V; R5=UCB ADDRESS.E;D ; OUTPUTS:;:; NONE;W; NO REGISTERS ARE PRESERVED!;- A6$LDPWF::MOV KINAR5,-(SP) ;SAVE KERNEL INSTR ADDR REG 5 T ? .IF DF K$$DAS N. MOV KDSAR5,-(SP) ;SAVE KERNEL DATA ADDR REG 5 S .IFTF T) MOV D.PCB(R3),R3 ;GET DRIVER PCB ADDRESS+% MOV P.REL(R3),KINAR5 ;MAP THE DRIVERE Y .IFT H/ MOV P.REL(R3),KDSAR5 ;MAP DRIVER IN DATA SPACET S .IFTF &55$: MOV S.KRB(R4),R3 ;GET KRB ADDRESS BEQ 60$ ;IF EQ NO KRB ADDRESSD( MOVB K.CON(R3),R3 ;GET CONTROLLER INDEX;E:; CALL DRIVER AT POWERFAIL ENTRY POINT WITH THE ARGUMENTS:;R; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.5'; R5=ADDRESS OF THE UNIT CONTROL BLOCK.,;P"; IF S.KRB=0 THEN R3 IS UNDEFINED.;F(60$: TST D.VPWF(R2) ;IS THERE AN ENTRY ? BEQ 70$ ;IF EQ NO) CLC6 CALL @D.VPWF(R2) ;CALL DRIVER AT POWERFAIL ENTRYPOINT70$: ;REFERENCE LABEL  .IFTF 1 MOV (SP)+,KDSAR5 ;RESTORE KERNEL DATA ADDR REG 5$ I .ENDC  R2 MOV (SP)+,KINAR5 ;RESTORE KERNEL INSTR ADDR REG 5 RETURN ;E .DSABL LSBL Y .IF DF M$$PRO U3$PWRMP::CACHE$ BYPASS ;;;GET ACTUAL WORD IN MEMORYH T;S; REMOVE OUR BIT FROM $S00JuutkTADATADATADATADATADATATENB;  $ MOV $STENB,R0 ;;;GET CURRENT STATUS=5$: CACHE$ BYPASS ;;;KEEP FORCING BYPASS IN CASE OF PWR FAILE' BIC $CPBIT,$STENB ;;;CLEAR OUT OUR BIT BIT $CPBIT,$STENB ;;;BREAK TIES/ BNE 5$ ;;;FIX ONE IN A MILLION RACE CONDITIONF! MOV $CPBIT,R1 ;;;GET OUR CPU BITK" COM R1 ;;;MAKE IT BIT CLEAR MASK' BIC R1,R0 ;;;LEAVE ONLY OUR BIT IN R0 2 CALL $STTIC ;;;MAKE SURE THE SANITY TIMER IS OFF>10$: CACHE$ BYPASS ;;;KEEP FORCING BYPASS IN CASE OF PWR FAIL, TST $PWRMK ;;;ANYONE IN THE POWERFAIL AREA BNE 10$ ;;;IF YES KEEP TRYINGU# BIS R0,$STENB ;;;SET OUR BIT AGAINE% CACHE$ RESTOR ;;;UNBYPASS THE CACHE RETURNI S .ENDC A;+);**-$MKSET-RESET MK11 CSR'S ON CPU ONLINES;BD; THIS ROUTINE IS CALLED TO RESTORE THE SETTING OF MK11 CSR'S (USINGD; $MKCSR,$MKCS1,$MKCS2) AFTER POWER FAILURE AND RECOVERY, AND AT CPUF; ONLINE TIME TO BRING PARITY (NO PUN INTENDED) TO THE NEW PROCESSOR'S; OUTLOOK ON MEMORY.;K ; INPUTS: ;A; NONE.E; ; OUTPUTS:;$; MK11 MEMORY BOXES REMAPPED; ; R0,R1 ARE DESTROYEDE$; R2 = STATUS (VALID ONLY IF $MKSET)8; C = 1 IF ANY ONLINE BOX (IN $MKCSR) IS NOT IN I/O PAGE;- .IF DF M$$K11<; NOTE: THE FOLLOWING CODE ASSUMES THAT WE ARE CALLED ON CPU6; ONLINE IN A SECTION PROTECTED BY $SGFIN (I.E. MPENT)7; AND THAT POWERFAIL DOES NOT CALL $SGFIN. THIS WAY, IFE8; A CSR "DISAPPEARS" WHILE POWERED DOWN, THE SYSTEM WILL8; CRASH. IF IT DISSAPEARS BEFORE PROCESSOR ON-LINE (E.G.9; SWITCHES NOT SET CORRECTLY) THE ON-LINE TRANSITITION ISO ; REJECTED.2$MKSET::MOV #$MKCSR,R0 ;POINT TO FIRST CSR ADDRESS) MOV #IE.ONP,R2 ;ASSUME CSR'S NOT PRESENTM-10$: MOV (R0)+,R1 ;GET FIRST/NEXT CSR ADDRESS& CMP #160000,R1 ;IS IT A CSR ADDRESS ?! BHI 20$ ;IF HI NO, IT'S A DUMMY " CLC ;ASSUME THAT THE CSR EXISTS/ MOV $MKCS1,(R1) ;STUFF CSR1 WITH CONTROL VALUE. BCS 30$ ;IF CS DIDN'T EXISTE9 MOV $MKCS2-$MKCSR-2(R0),2(R1) ;CRAM CSR2 WITH START ADDRS*20$: CMP R0,#$MKCS2 ;REACHED THE END YET ? BLO 10$ ;IF LO NO, CONTINUEN2 MOV #1,R2 ;SET SUCCESS (NOTE C-BIT MUST BE CLEAR% ;FOR BLO TO HAVE DROPPED THROUGH)30$: RETURN ;BACK TO CALLERO .ENDC ; DF M$$K11;+.;**-$DRVPF-CALL DRIVERS FOR POWERFAIL RECOVERY;TD; THIS ENTRY POINT IS PROVIDED SPECIFICALLY FOR USE BY AUTOCONFIGUREE; TO RECOVER THE SYSTEM. THE DEVICE DRIVERS ARE CALLED AT THEIR POWERB=; FAIL ENTRY POINTS IN ORDER TO RE-ESTABLISH INTERRUPTS, ETC.R;-+$DRVPF:: ;DRIVER POWERFAIL RECOVERY ENTRYH6 MOV KISAR5,-(SP) ;SAVE APR 5 MAPPING (D OR I/D SPACE) .IF DF K$$DAS/ MOV KINAR5,-(SP) ;SAVE APR 5 MAPPING (I SPACE)P .IFTF ; DF K$$DAS .IF DF M$$PRO4 BIS @$CPURM,$PFURM ;INDICATE THIS CPU'S URMS FAILED .ENDC ; DF M$$PRO' CALL DRVPF ;CALL DRIVERS AT POWERFAILE .IFT ; DF K$$DASA2 MOV (SP)+,KINAR5 ;RESTORE APR 5 MAPPING (I SPACE) .ENDC ; DF K$$DAS9 MOV (SP)+,KISAR5 ;RESTORE APR 5 MAPPING (D OR I/D SPACE)U RETURN ;- .END: ;DRIVER POWERFAIL RECOVERY ENTRYH6 MOV KISAR5,-(SP) ;SAVE APR 5 MAPPING (D OR I/D SPACE) .IF DF K$$DAS/ MOV K .TITLE PPDRVN .IDENT /03.01/1 M; ; COPYRIGHT (C) 1975, 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.O;$A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDN9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.B;2; VERSION 03.01'; ; THOMAS J. MILLER 25-NOV-74;S; PREVIOUSLY MODIFIED BY:V;K; C. A. D'ELIA; T. J. MILLER;I; MODIFIED BY:;:; K. E. KINNEAR 22-JUN-77E;D&; KK004 -- NEW I/O DATA BASE SUPPORT.;T; E. L. BAATZ 18-JUN-78;N(; EB148 -- REMOVE EXPLICIT PS REFERENCE;; PC11 PAPER TAPE PUNCH DRIVER;I; MACRO LIBRARY CALLST;,# .MCALL ABODF$,HWDDF$,PKTDF$,TCBDF$S" ABODF$ ;DEFINE TASK ABORT CODES+ HWDDF$ ;DEFINE HARDWARE REGISTER SYMBOLST$ PKTDF$ ;DEFINE I/O PACKET OFFSETS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS; ; EQUATED SYMBOLS ;V6; PAPER TAPE PUNCH STATUS WORD BIT DEFINITIONS (U.CW2);:9WAIT=100000 ;WAITING FOR DEVICE TO COME ON-LINE (1=YES)S0ABORT=40000 ;ABORT CURRENT I/O REQUEST (1=YES)00ubutbl/TRAIL=200 ;CURRENTLY PUNCHING TRAILER (1=YES)P; ;**-16; DRIVER DISPATCH TABLEA;T ; KK004$ DDT$ PP,P$$P11 ; KK004 ;**-4;+5; **-PPINI-PC11 PAPER TAPE PUNCH CONTROLLER INITIATOR;TJ; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUESTN; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THE EXECU-N; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN ATTEMPTI; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER ISNI; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER- >; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.; ; INPUTS:1;A:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;E ; OUTPUTS:;EE; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAIT-RE; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-T; ATION IS INITIATED. ;- .ENABL LSBN,PPINI: GTPKT$ PP,P$$P11,PPPWF,,T ; KK004 ;**-2;N1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:M;I'; R1=ADDRESS OF THE I/O REQUEST PACKET. -; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.H; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.N:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;D-; PAPER TAPE PUNCH I/O REQUEST PACKET FORMAT:A;R"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTER TASK.,@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTER TASK HEADER.J; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTER TASK HEADER (UCB).9; WD. 05 -- I/O FUNCTION CODE (IO.WLB, IO.ATT OR IO.DET).E0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.E; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140000). 3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE. *; WD. 12 -- RELOCATION BIAS OF I/O BUFFER.+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.D-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED. ; WD. 15 -- NOT USED.-; WD. 16 -- NOT USED. ; WD. 17 -- NOT USED.A; WD. 20 -- NOT USED. ;-* CLR U.CW2(R5) ;CLEAR ALL SWITCHES ;**-1= CMPB I.FCN+1(R1),#IO.WLB/256. ;WRITE LOGICAL BLOCK FUNCTION?- BEQ 10$ ;IF EQ YES, MOV I.TCB(R1),R0 ;GET REQUESTOR TCB ADDRESS+ BIT #T2.ABO,T.ST2(R0) ;TASK BEING ABORTED? * BNE 65$ ;IF NE YES - DON'T PUNCH TRAILER= BIS #TRAIL,U.CW2(R5) ;OTHERWISE FUNCTION IS ATTACH OR DETACH " ; SET FLAG TO PUNCH TRAILER- MOV #170.,U.CNT(R5) ;SET COUNT FOR 170 NULLS 910$: BIS #WAIT,U.CW2(R5) ;ASSUME WAIT FOR DEVICE OFF LINEO! TST @S.CSR(R4) ;DEVICE OFF LINE?- BMI 80$ ;IF MI YES>20$: BIC #WAIT,U.CW2(R5) ;DEVICE ON LINE, CLEAR WAIT CONDITION, MOVB S.ITM(R4),S.CTM(R4) ;SET TIMEOUT COUNT' MOV #100,@S.CSR(R4) ;ENABLE INTERRUPTSD;K; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUSESNK; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDITION 2; THAT COULD EXIST IN RESTARTING THE I/O OPERATION;;PPPWF: RETURN ;L;+6; **-$PPINT-PC11 PAPER TAPE PUNCH CONTROLLER INTERUPTS;-$PPINT:: ;;;REF LABELI5 INTSV$ PP,PR4,P$$P11 ;;;GENERATE INTERRUPT SAVE CODEE8 MOV U.SCB(R5),R4 ;;;GET ADDRESS OF STATUS CONTROL BLOCK0 MOVB S.ITM(R4),S.CTM(R4) ;;;RESET TIMEOUT COUNT8 MOV S.CSR(R4),R4 ;;;POINT R4 TO CONTROL STATUS REGISTER# MOV (R4)+,U.CW3(R5) ;;;SAVE STATUSE BMI 60$ ;;;IF MI, ERRORN. SUB #1,U.CNT(R5) ;;;DECREMENT CHARACTER COUNT BCS 50$ ;;;IF CS, THEN DONET. TSTB U.CW2(R5) ;;;CURRENTLY PUNCHING TRAILER? BPL 30$ ;;;IF PL NOC- CLRB (R4) ;;;LOAD NULL INTO OUTPUT REGISTER BR 40$ ;;;BRANCH TO LOAD ITV330$: CALL $GTBYT ;;;GET NEXT BYTE FROM USER BUFFERV2 MOVB (SP)+,(R4) ;;;LOAD BYTE INTO OUTPUT REGISTER'40$: JMP $INTXT ;;;EXIT FROM INTERRUPTO&50$: INC U.CNT(R5) ;;;RESET BYTE COUNT+60$: CLR -(R4) ;;;DISABLE PUNCH INTERRUPTSR% CALL $FORK ;;;CREATE SYSTEM PROCESS " MOV U.SCB(R5),R4 ;POINT R4 TO SCB) MOV S.PKT(R4),R1 ;POINT R1 TO I/O PACKETN3 MOV I.PRM+4(R1),R1 ; 00uutkTADATADATADATADATADATAAND PICK UP CHARACTER COUNT?3 SUB U.CNT(R5),R1 ;CALCULATE CHARACTERS TRANSFERREDT/ MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERV TST U.CW3(R5) ;DEVICE ERROR?  BPL 70$ ;IF PL NOV:65$: MOV #IE.VER&377,R0 ;UNRECOVERABLE HARDWARE ERROR CODE*70$: CALL $IODON ;INITIATE I/O COMPLETION( BR PPINI ;BRANCH BACK FOR NEXT REQUEST; G; DEVICE TIMEOUT RESULTS IN A NOT READY MESSAGE BEING PUT OUT 4 TIMES AVI; MINUTE. TIMEOUTS ARE CAUSED BY POWERFAILURE AND PUNCH FAULT CONDITIONS.;V1PPOUT: CLRB @S.CSR(R4) ;;;DISABLE PUNCH INTERRUPTB MTPS #0 ;;;ALLOW INTERRUPTST680$: MOV #IE.DNR&377,R0 ;ASSUME DEVICE NOT READY ERROR3 MOV U.CW2(R5),R1 ;ARE WE WAITING FOR DEVICE READY? * BPL 70$ ;IF PL NO, TERMINATE I/O REQUEST4 MOV #IE.ABO&377,R0 ;ASSUME REQUEST IS TO BE ABORTED ASL R1 ;ABORT REQUEST? BMI 70$ ;IF MI YES TST @S.CSR(R4) ;PUNCH READY?O BPL 20$ ;IF PL YES* MOV #T.NDNR,R0 ;SET FOR NOT READY MESSAGE, MOVB #1,S.CTM(R4) ;SET TIMEOUT FOR 1 SECOND( DECB S.STS(R4) ;TIME TO OUTPUT MESSAGE? BNE PPPWF ;IF NE NOU? MOVB #15.,S.STS(R4) ;SET TO OUTPUT NEXT MESSAGE IN 15. SECONDS3 CALLR $DVMSG ;OUTPUT MESSAGE .DSABL LSBC;)C; CANCEL I/O OPERATION-FORCE I/O TO COMPLETE IF DEVICE IS NOT READYE;O4PPCAN: CMP R1,I.TCB(R0) ;;;REQUEST FOR CURRENT TASK? BNE 10$ ;;;IF NE NO : BIS #ABORT,U.CW2(R5) ;;;SET FOR ABORT IF DEVICE NOT READY10$: RETURN ;;;L .ENDV #T.NDNR,R0 ;SET FOR NOT READY MESSAGE, MOVB #1,S.CTM(R4) ;SET TIMEOUT FOR 1 SECOND( DECB S.STS(R4) ;TIME TO OUTPUT MESSAGE? B .TITLE PRDRVE .IDENT /03.01/S S;); COPYRIGHT (C) 1975, 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;SA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDI9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.F;C; VERSION 03.01E;$; THOMAS J. MILLER 2-DEC-74.;(; PREVIOUSLY MODIFIED BY:I;N; C. A. D'ELIA;R; MODIFIED BY:;#; K. E. KINNEAR 22-JUN-77Y;S&; KK004 -- NEW I/O DATA BASE SUPPORT.; ; E. L. BAATZ 18-JUN-78T; (; EB148 -- REMOVE EXPLICIT PS REFERENCE;N$; PC11/PR11 PAPER TAPE READER DRIVER; ; MACRO LIBRARY CALLSN;O .MCALL ABODF$,HWDDF$,PKTDF$" ABODF$ ;DEFINE TASK ABORT CODES+ HWDDF$ ;DEFINE HARDWARE REGISTER SYMBOLSN$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;F; EQUATED SYMBOLS0;7; PAPER TAPE READER STATUS WORD BIT DEFINITIONS (U.CW2)E;Y)TRAIL=100000 ;CURRENTLY READING TRAILER#; ;**-16; DRIVER DISPATCH TABLE ;  ; KK004. DDT$ PR,P$$R11 ; KK004 ;**-4;+;; **-PRINI-PC11/PR11 PAPER TAPE READER CONTROLLER INITIATOR ;VJ; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN AN I/O REQUESTN; IS QUEUED AND AT THE END OF A PREVIOUS I/O OPERATION TO PROPAGATE THE EXECU-N; TION OF THE DRIVER. IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN ATTEMPTI; IS MADE TO DEQUEUE THE NEXT I/O REQUEST. ELSE A RETURN TO THE CALLER ISDI; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN THE NEXT I/O OPER- >; ATION IS INITIATED. A RETURN TO THE CALLER IS THEN EXECUTED.;I ; INPUTS:1;P:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;E ; OUTPUTS:;EE; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O REQUEST IS WAIT-RE; ING TO BE PROCESSED, THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-T; ATION IS INITIATED. ;- .ENABL LSBN,PRINI: GTPKT$ PR,P$$R11,PRPWF,,T ; KK004 ;**-2;N1; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT:M;I'; R1=ADDRESS OF THE I/O REQUEST PACKET. -; R2=PHYSICAL UNIT NUMBER OF THE REQUEST UCB.H; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.N:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;D.; PAPER TAPE READER I/O REQUEST PACKET FORMAT:;R"; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTER TASK.,@; WD. 03 -- POINTER TO SECOND LUN WORD IN REQUESTER TASK HEADER.J; WD. 04 -- CONTENTS OF THE FIRST LUN WORD IN REQUESTER TASK HEADER (UCB).9; WD. 05 -- I/O FUNCTION CODE (IO.RLB, IO.ATT OR IO.DE00uutblT).E0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.E; WD. 10 -- I/O STATUS BLOCK ADDRESS (REAL OR DISPLACEMENT + 140000). 3; WD. 11 -- VIRTUAL ADDRESS OF AST SERVICE ROUTINE. *; WD. 12 -- RELOCATION BIAS OF I/O BUFFER.+; WD. 13 -- BUFFER ADDRESS OF I/O TRANSFER.D-; WD. 14 -- NUMBER OF BYTES TO BE TRANSFERED. ; WD. 15 -- NOT USED.-; WD. 16 -- NOT USED. ; WD. 17 -- NOT USED.A; WD. 20 -- NOT USED. ;-5 MOVB I.FCN+1(R1),R2 ;MOVE FUNCTION CODE TO R2 ;**-163 CMPB R2,#IO.RLB/256. ;READ LOGICAL BLOCK FUNCTION?  BEQ 10$ ;IF EQ YES3 MOV #IS.SUC&377,R0 ;OTHER FUNCTIONS ALWAYS SUCCEED(2 CLR R1 ;RETURN 0 IN SECOND WORD OF STATUS BUFFER' CMPB R2,#IO.ATT/256. ;ATTACH FUNCTION? BNE 50$ ;IF NE NO, CALL $IODON9 BIS #TRAIL,U.CW2(R5) ;SET FLAG TO READ TRAILER IF ATTACH- BR 60$ ;CALL $IODON 010$: MOVB S.ITM(R4),S.CTM(R4) ;SET TIMEOUT COUNT2 TST @S.CSR(R4) ;ERROR BIT SET IN STATUS REGISTER? BPL 15$ ;IF PL NO, INITIATE IO< TST U.CW2(R5) ;IS THIS THE FIRST READ FOR ATTACHED PROCESS?2 BMI 70$ ;IF MI YES, RETURN DEVICE NOT READY CODE0 ; (OTHERWISE HANDLE AS EOF UPON INTERRUPT)715$: MOV #101,@S.CSR(R4) ;ENABLE READER WITH INTERRUPTSP;#+; IN-PROGRESS TRANSFERS ARE NOT TERMINATED. ;NPRCAN:;K; POWERFAIL IS HANDLED VIA THE DEVICE TIMEOUT FACILITY AND THEREFORE CAUSESOK; NO IMMEDIATE ACTION ON THE DEVICE. THIS IS DONE TO AVOID A RACE CONDITIONR2; THAT COULD EXIST IN RESTARTING THE I/O OPERATION;IPRPWF: RETURN ;);+<; **-$PRINT-PC11/PR11 PAPER TAPE READER CONTROLLER INTERUPTS;-$PRINT:: ;;;REF LABEL5 INTSV$ PR,PR4,P$$R11 ;;;GENERATE INTERRUPT SAVE CODEM8 MOV U.SCB(R5),R4 ;;;GET ADDRESS OF STATUS CONTROL BLOCK0 MOVB S.ITM(R4),S.CTM(R4) ;;;RESET TIMEOUT COUNT8 MOV S.CSR(R4),R4 ;;;POINT R4 TO CONTROL STATUS REGISTER# MOV (R4)+,U.CW3(R5) ;;;SAVE STATUS  BMI 40$ ;;;IF MI, ERRORD" TST U.CW2(R5) ;;;READING TRAILER? BPL 20$ ;;;IF PL NOD# TSTB (R4) ;;;IS BYTE READ A NULL?N BEQ 30$ ;;;IF EQ YES+ CLR U.CW2(R5) ;;;NO LONGER READING TRAILERA&20$: MOVB (R4),-(SP) ;;;PUSH BYTE READ( CALL $PTBYT ;;;PLACE IT IN USER BUFFER& DEC U.CNT(R5) ;;;DECREMENT BYTE COUNT BEQ 40$ ;;;IF EQ READ COMPLETE 30$: INC -(R4) ;;;ENABLE READER# JMP $INTXT ;;;EXIT FROM INTERRUPTS%40$: CLR -(R4) ;;;DISABLE INTERRUPTSE% CALL $FORK ;;;CREATE SYSTEM PROCESSA" MOV U.SCB(R5),R4 ;POINT R4 TO SCB) MOV S.PKT(R4),R1 ;POINT R1 TO I/O PACKET 3 MOV I.PRM+4(R1),R1 ; AND PICK UP CHARACTER COUNTB3 SUB U.CNT(R5),R1 ;CALCULATE CHARACTERS TRANSFERREDD/ MOV #IS.SUC&377,R0 ;ASSUME SUCCESSFUL TRANSFERE TST U.CW3(R5) ;DEVICE ERROR?N BPL 50$ ;IF PL NOC, MOV #IE.EOF&377,R0 ;RETURN END OF FILE CODE#50$: CLR U.CW2(R5) ;CLEAR FLAG WORD;*60$: CALL $IODON ;INITIATE I/O COMPLETION( BR PRINI ;BRANCH BACK FOR NEXT REQUEST;UH; DEVICE TIMEOUT RESULTS IN THE RETURN OF A DEVICE NOT READY ERROR CODE.;S2PROUT: CLR @S.CSR(R4) ;;;DISABLE READER INTERRUPTS MTPS #0 ;;;ALLOW INTERRUPTSH.70$: MOV #IE.DNR&377,R0 ;DEVICE NOT READY CODE BR 50$ ;CALL $IODONM .DSABL LSB7 .ENDME SUCCESSFUL TRANSFERE TST U.CW3(R5) ;DEVICE ERROR?N BPL 50$ ;IF PL NOC, MOV #IE.EOF&377,R0 ;RETURN END OF FILE CODE#50$: CLR U.CW2(R5) ;CLEAR FLAG WORD;*60$: CALL $IODON ;INITIATE I/O COMPLETION( BR PRINI ;BRANCH BACK FOR NEXT REQUEST;UH; DEVICE TIMEOUT RESULTS IN THE RETURN OF A DEVICE NOT READY ERROR CODE.;S2PROUT: CLR @S.CSR(R4) ;;;DISABLE READER INTERRUPTS MTPS #0 ;;;ALLOW INTERRUPTSH.70$: MOV #IE.DNR&377,R0 ;DEVICE NOT RE$ $IDENT PUCOM,04,03, .PSECT ;USE BLANK PSECT .LIST MEBE;L; !; COPYRIGHT (c) 1985, 1989 BY .); DIGITAL EQUIPMENT CORPORATION, MAYNARD(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;S5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAYF5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THEM5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THEM5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERF5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE 5; MADE AVAILABL00uutkTADATADATADATADATADATAE TO ANY OTHER PERSON. NO TITLE TO>5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.; 5; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;FE; JASON GALLANT, JOE MELVIN, BOB SCHMEICHEL, SUSAN THOMAS, PAUL WEISSA; ; PREVIOUSLY MODIFIED BY:T;E; G. MARIGOWDA, J. MELVIN ; $; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;.; J. MELVIN 19-SEP-88 04.00T5; JJM0411 - MAKE I/O SEQ NUM CONTROLLER SPECIFICE;D; J. MELVIN 19-SEP-88 04.01 1; JJM0413 - RECORD CONTROLLER CONTEXT IN QST ;D; A. HUDED 06-OCT-88 04.021; AVH0005 - FIX UMR WAIT BLOCK DEALLOCATION ;F; J. MELVIN 03-JAN-1989 04.03 ?; JJM0433 - REORDER QST DEFS TO MAINTAIN OLD LAYOUT. THIS,; SUPERCEDES JJM0413;AC; THIS MODULE CONTAINS THE ROUTINES AND DATA STRUCTURES REQUIRED TO @; SUPPORT THE UQSSP PORT PROTOCAL FOR TMSCP/MSCP DEVICES. THESEB; ROUTINES AND DATA STRUCTURES ARE USED WITH VARIOUS CLASS DRIVERS4; IN THE SYSTEM TO PROVIDE SUPPORT FOR SUCH DEVICES.;3M;============================================================================HC; PLEASE NOTE THE FOLLOWING RESTRICTIONS WHEN MODIFYING THIS MODULE ;0@; 1) THE JUMP TABLE DEFINED AT LABEL UQBEGN --MUST-- APPEAR AT D; RELATIVE OFFSET 0 IN THIS MODULE. CLASS DRIVERS REQUIRE THIS.;AI; 2) PUCOM IS CURRENTLY SET UP TO HANDLE A VIRTUAL CIRCUIT ID OF 0 OR 1.PH; IF AN ID GREATER THAN 1 IS USED, CHANGES MAY BE REQUIRED TO PUCOM.;DM;=============================================================================;=* .MCALL HWDDF$,UCBDF$,SCBDF$,UDADF$,KRBDF$ HWDDF$ ;HARDWARE REGISTERS % UCBDF$ ;UNIT CONTROL BLOCK OFFSETSN2 UDADF$ ;DISK CLASS MSCP SYMBOLS AND DEFINITIONS SCBDF$ ,,1 ;SCB OFFSETSR KRBDF$ ;DEFINE KRB OFFSETSN6 JMPTBL CLASS ;DEFINE CLASS DRIVER JUMP TABLE OFFSETS; ; LOCAL MACROS; ' .MACRO GENLAB PRE,VAL ;GENERATE LABELP PRE'VAL::A .ENDM ;GENLABM;=============================================================================; .MACRO GENADD PRE,VAL ;GENERATE LABEL, THEN ADDRESS OF ITL .WORD PRE'VAL .ENDM ;GENADDL;===========================================================================> .MACRO GETINF TYP,CON ;GENERATE SYMBOL, SAVE NUMBER OF RINGSRNUM=TYP'$R'CONKCNUM=TYP'$C'CONR .ENDM ;GETINFL;===========================================================================% .MACRO GENTAB BASE,CON,LEN,NUM,PTYPE ADDR=BASE'CONN .REPT NUM+ .WORD ADDR + ENVLEN ;ADDRESS OF PTYPE PKT=ADDR=ADDR + LEN + ENVLEN .ENDR .ENDM ;GENTABM;============================================================================= .MACRO RECORD DDD,CON .WORD DDD'QST'CON .ENDM ;RECORDM;============================================================================> .MACRO INDEX PRE,VAL ;GENERATE SUBTITLE ASSEMBLER DIRECTIVE8 .SBTTL . PRE: DATA STRUCTURES FOR CONTROLLER VAL .ENDM ;INDEX M;============================================================================N;A; EQUATED SYMBOLS=;D#IOPLEN = 18.*2 ;IOP SIZE IN BYTESM;E%; DEVICE REGISTER AND BIT DEFINITIONS=;=,IP = 0 ;INITIALIZATION AND POLLING REGISTER$SA = 2 ;STATUS AND ADDRESS REGISTER;.; STEP BIT DEFINITIONS;=ERROR = 100000 ;ERRORSTEP4 = 40000 ;STEP 4 BITSTEP3 = 20000 ;STEP 3 BITSTEP2 = 10000 ;STEP 2 BITSTEP1 = 4000 ;STEP 1 BITT; ; STEP ONE READ BITS;E3NOVEC = 2000 ;INABILITY TO ACCEPT INTERRUPT VECTOR=/ ;(I.E. CONTROLLER IS USING A HARD-WIRED ...= ;... INTERRUPT VECTOR PLUG)L QB = 1000 ;22 BIT BUS SUPPORTED; ; STEP ONE WRITE BITSG;EINTE = 200 ;INTERRUPT ENABLE=; ; STEP FOUR WRITE BITS; LF = 2 ;LAST FAILURE FLAGGO = 1 ;GO BITR .PAGE4 .SBTTL JMPTAB - JUMP TABLE OF VARIOUS PORT ROUTINESL;===========================================================================E; THE FOLLOWING 00uutblJUMP TABLE --- MUST --- BE DEFINED AS THE FIRST THING0E; WITHIN THIS MODULE. VARIOUS CLASS DRIVERS EXPECT TO SEE THIS TABLEGE; AT 140000, WHERE THIS COMMON AREA IS MAPPED INTO THE CLASS DRIVERS.T;SF; THIS TABLE ALSO MAKES USE OF SYMBOLS DEFINED IN THE PREFIX FILE. BE#; CAREFUL WHEN ADDING NEW ROUTINES.FL;===========================================================================DUQBEGN::.WORD MAJOR*256.+MINOR;COMPONENT ID (SET UP IN $IDENT MACRO)$ .WORD PORSUP ;PORT SETUP FUNCTIONS, .WORD PORINT ;CONTROLLER INTERRUPT HANDLER1 .WORD PORSEN ;SEND COMMAND PACKET TO CONTROLLERO( .WORD PORUMR ;ALLOCATE/DEALLOCATE UMRS& .WORD PKTAC ;ALLOCATE COMMAND PACKET) .WORD PKTDR ;DEALLOCATE RESPONSE PACKETS, .WORD PKTCHK ;CHECK FOR REQUIRED RESOURCES% .WORD STOMP ;CLOBBER THE CONTROLLERN4CONCNT: .WORD 0 ;# OF CONTROLLERS CONNECTED TO PORT2 .WORD PKTCH1 ;CHECK FOR RESOURCES-IMMEDIATE CMDS$ .WORD PORSYN ;PORT SYNCHRONIZATION0 .WORD 0 ;EXEC VECTORING FROM APR6 CODE ROUTINE ;FILLED IN BY CLASS DRIVER, .WORD -1 ;NO MORE INDICATOR - MUST BE LAST)TABTAB:: ;TABLE OF QST TABLE ADDRESSES  .IRP CON,T .WORD CON'QTBL .ENDM ;CON % .WORD -1 ;ANOTHER TABLE TERMINATORT;E ; LOCAL DATA;.6TEMP: .BLKW 1 ;NUMBER OF RESPONSE DESCRIPTORS CHECKED6COUNT: .BLKW 1 ;NUMBER OF COMMAND DESCRIPTORS CHECKED5UQRELC: .BLKW 2 ;RELOCATION CONSTANT USED TO CONVERTO" ;VIRTUAL TO PHYSICAL ADDRESSES1UMRMAP: .BLKW 1 ;ADDRESS OF MAPPING BLOCK OF UMRR0EXEVEC: .WORD 0 ;FLAG FOR VECTOR NOT YET FILLED;ALOCB: .WORD $ALOCBNASUMR: .WORD $ASUMRTDEACB: .WORD $DEACBODEUMR: .WORD $DEUMR HFMSK: .WORD $HFMSKKISR6: .WORD KISAR6NMPUB1: .WORD $MPUB1 5EXEVCL=<<<.-EXEVEC>/2>-1> ;TABLE LENGTH FOR VECTORING  .IF DF,DSADEB8UNKPKT: .BLKW 1 ;COUNT OF UNKNOWN RESPONSE PACKET TYPES ; ACROSS ALL DSA CONTROLLERS?UNKRNG: .BLKW 1 ;COUNT OF TIMES CREDIT OK, RING NOT HOST OWNEDT ; ACROSS ALL DSA CONTROLLERS .ENDC ;DSADEB .PAGE9 .SBTTL TABLES - DATA STRUCTURES FOR DISK/TAPE CLASS MSCPLP;===============================================================================,; SET UP DATA STRUCTURES FOR ALL THE CLASSESP;===============================================================================3.IRP DEV, ;ASSUME TABLE STRUCTURE THE SAMEU$CONT=0 ;INITIAL CONTROLLER NUMBER .IF IDN E .IIF NDF R$$UDA R$$UDA=0T. LOOP=R$$UDA ;USE NUMBER OF MSCP CONTROLLERS .ENDC .IF IDN ; .IIF NDF R$$MYA R$$MYA=0S/ LOOP=R$$MYA ;USE NUMBER OF TMSCP CONTROLLERS= .ENDC' .REPT LOOP ;FOR EACH MSCP CONTROLLER=$ INDEX DEV,\CONT ;GENERATE SUBTITLE9 GETINF DEV,\CONT ;GET NUMBER OF CMD/RSP RINGS FOR CONT.= .PAGE"; -------------------------------"; SET UP THE CST FOR A CONTROLLER"; -------------------------------. GENLAB DEV'CST,\CONT ;REFERENCE LABEL TO CST+ .WORD 0 ;C.STAT - CONNECTION STATE STATU$2 .WORD 0 ;C.EXTN - RESERVED. DO NOT MOVE/DELETE- .WORD 0,0 ;C.CMST - OLDEST OUTSTANDING CMDS/ .WORD 0,.-2 ;C.OLHD - OUTSTANDING I/O LIST H=+ .WORD 0 ;C.CMDS - CREDIT COUNT FOR CONTRR' .BYTE 0 ;C.VCID - VIRTUAL CIRCUIT IDT. .BYTE 0 ;C.FLAG - CLASS DRIVER CONTROL FLAG+ .WORD 0 ;C.REDO - COMMAND TO BE REISSUED-- .WORD 0 ;C.REQU - QUEUE OF CMDS TO RESTARTR .WORD .-2 ;AFTER A RESYNCH- .IF DF E$$LOG D+ .WORD 0 ;C.MLNG - LENGTH OF CONTROLLER E0( .BYTE 0 ;C.CRED - CREDIT/DEBIT COUNTS' .BYTE 0 ;C.VCIX - VIRTUAL CIRCUIT IDE$ .WORD 0 ;C.IP - SAVED IP REGISTER$ .WORD 0 ;C.SA - SAVED SA REGISTER .ENDC$ .IF DF M$$EXT ;IF EXTENDED MEMORY8 .WORD MAXWBT ;C.UMCT - # OF UMR WAIT BLOCKS AVAILABLE0 .REPT MAXWBT ;C.UMRW - TABLE OF UMR WAIT BLOC .WORD 0 ; ADDRESSES .ENDR .ENDC ;M$$EXTO$; ---------------------------------$; SET UP THE QST FOR THE CONTROLLER$; ---------------------------------. GENLAB DEV'QST,\CONT ;REFERENCE LABEL TO QST6 GENADD DEV'CST,\CONT ;Q.CST - PNTR TO ASSOCIATE CST2 .WORD 0 ;Q.STAT - STATUS BITS (PORT-CONTROLLER) .WORD 0 ;Q.SAD -$ .BYTE 0 ;RE00uutkTADATADATADATADATADATASERVED FOR DIGITAL USE+ .BYTE 0 ;Q.INF - CONTROLLER INFORMATIONF0 .BYTE RNUM ;Q.RSPN - NUMBER OF RESPONSE RINGS/ .BYTE CNUM ;Q.CMDN - NUMBER OF COMMAND RINGSS+ .BYTE 0 ;Q.CTM - CURRENT TIME OUT COUNT-( .BYTE 0 ;Q.RTY - CURRENT RETRY COUNT( ;Q.RING - START OF RING AREA. MUST ;BE SAME ADDRESS AS Q.FRSP!< GENADD DEV'FRR,\CONT ;Q.FRSP - PNTR TO FIRST RESPONSE RING; GENADD DEV'LRR,\CONT ;Q.LRSP - PNTR TO LAST RESPONSE RING(3 GENADD DEV'FCR,\CONT ;Q.FCMD - FIRST COMMAND RINGE3 GENADD DEV'LCR,\CONT ;Q.LCMD - LAST COMMAND RINGE= GENADD DEV'RPT,\CONT ;Q.RPAT - PNTR TO RSP PACKET ADDRESSESS= GENADD DEV'CPT,\CONT ;Q.CPAT - PNTR TO CMD PACKET ADDRESSES / .WORD 0 ;Q.CRSP - CURRENT RESPONSE RING WHEN.( ; CONTROLLER ONLINE (MSCP)., ;Q.STEP - SYNC STEP BIT WHEN CONTROLLER+ ; IS SYNCRONIZING. THIS FIELDP, ; DELIBERATELY OVERLAPS Q.CRSP.. .WORD 0 ;Q.CCMD - CURRENT COMMAND RING WHEN+ ; CONTROLLER IS ONLINE (MSCP).D$ ;Q.INDX - SYNC STEP INDEX WHEN * ; CONTROLLER IS SYNCRONIZING.& ; THIS FIELD DELIBERATELY ; OVERLAPS Q.CCMD.T7 .WORD 0,0,0,0 ;Q.WRIT - WORDS TO WRITE TO SA IN SYNCR- .WORD 0 ;Q.TEMP - CONTR SPECIFIC WORK AREAL( .BYTE 0 ;Q.IOSQ - CONTROLLER SEQUENCE$ .BYTE 0 ;RESERVED FOR DIGITAL USE* .WORD 0,0,0,0 ;Q.CNTI - CNTRL T/MSCP ID ;Q.ID <-- Q.CNTI+6Q$ .BYTE 0 ;Q.CSVR - CNTRL SOFT VERS$ .BYTE 0 ;Q.CHVR - CNTRL HARD VERS0; ---------------------------------------------0; ALLOCATE SPACE FOR CMD/RSP TABLE OF ADDRESSES0; ---------------------------------------------5 GENLAB DEV'RPT,\CONT ;TABLE OF RSP PACKET ADDRESSEST= GENTAB DEV'DRP,\CONT,RPLEN,RNUM,RSP ;GEN TABLE OF ADDRESSESE5 GENLAB DEV'CPT,\CONT ;TABLE OF CMD PACKET ADDRESSESN= GENTAB DEV'DCP,\CONT,CPLEN,CNUM,CMD ;GEN TABLE OF ADDRESSESN4; -------------------------------------------------4; ALLOCATE THE SPACE FOR THE RESPONSE/COMMAND RINGS4; -------------------------------------------------- .WORD 0 ;CONTROLLER COMMAND INTERRUPT ADDR . .WORD 0 ;CONTROLLER RESPONSE INTERRUPT ADDR7 GENLAB DEV'FRR,\CONT ;FIRST RESPONSE RING BEGINS HEREE+ .REPT *2 ;2 WORDS EACH; N-1 RINGSU .WORD 0 .ENDR6 GENLAB DEV'LRR,\CONT ;LAST RESPONSE RING BEGINS HERE .WORD 0,0 ;LAST RESPONSE RING6 GENLAB DEV'FCR,\CONT ;FIRST COMMAND RING BEGINS HERE .REPT *2- .WORD 0 .ENDR5 GENLAB DEV'LCR,\CONT ;LAST COMMAND RING BEGINS HERES .WORD 0,0 ;LAST COMMAND RING-$; ---------------------------------$; ALLOCATE COMMAND/RESPONSE PACKETS$; ---------------------------------? GENLAB DEV'DRP,\CONT ;REFERENCE LABEL TO RESPONSE PACKET AREAE .REPT RNUM 6 .WORD RPLEN ;INSURE MAX PACKET SIZE ON INITIAL CALL .WORD 0 ;SECOND ENVELOPE WORD/ .BLKB RPLEN ;ALLOCATE ACTUAL RESPONSE PACKETE, .ENDR ;DO FOR EACH RESPONSE RING DESIRED> GENLAB DEV'DCP,\CONT ;REFERENCE LABEL TO COMMAND PACKET AREA .REPT CNUMA6 .WORD CPLEN ;INSURE MAX PACKET SIZE ON INITIAL CALL .WORD 0 ;SECOND ENVELOPE WORD. .BLKB CPLEN ;ALLOCATE ACTUAL COMMAND PACKET+ .ENDR ;DO FOR EACH COMMAND RING DESIREDD!CONT=CONT + 1 ;NEXT CONTROLLERS' .ENDR ;LOOP ;ALL THE MSCP CONTROLLERSN;;@; GENERATE A TABLE WITH THE ADDRESSES OF THE QSTS FOR THIS CLASS+ .WORD LOOP ;RECORD NUMBER OF CONTROLLERSN DEV'QTBL:: CONT=0 .REPT LOOPR RECORD DEV,\CONTD CONT=CONT + 1 .ENDR ;LOOP .ENDM ;IRP CODBEG = . .PAGEB .SBTTL PKTAC - ALLOCATE COMMAND PACKET GIVEN CMD RING DESCRIPTOR;+<; **-PKTAC-ALLOCATE COMMAND PACKET GIVEN CMD RING DESCRIPTOR; F; THIS ROUTINE CALCULATES THE ADDRESS OF THE AVAILABLE COMMAND PACKET,G; GIVEN THE COMMAND DESCRIPTOR ADDRESS. SINCE THE ONLY WAY TO GET HERE E; IS IF THE PKTCHK ROUTINE HAS ALREADY BEEN CALLED, THIS ROUTINE WILLL:; ALWAYS RETURN WITH CARRY CLEAR, I.E. INDICATING SUCCESS.;E ; INPUTS:R;R?; R0=NUMBER OF WORDS TO ALLOCATE FOR THE TEXT PORTION OF PACKET=3; NOTE: THIS VALUE MUST NOT INCLUDE THE ENVELOPEG; R2=QST ADDRESS; R3=I/O PACKE00uutblT ADDRESSL; R4=SCB ADDRESS; R5=UCB ADDRESS1; Q.CCMD=ADDRESS OF AVAILABLE CMD RING DESCRIPTORS;F ; OUTPUTS:;C; R0=DESTROYED. ;; R1=VIRTUAL ADDRESS OF COMMAND PACKET TO USE. THIS POINTSG=; TO THE PACKET ITSELF AND > NOT < TO THE PACKET ENVELOPE.H; R2,R3,R4,R5 PRESERVEDSE; CARRY CLEAR=COMMAND PACKET ALLOCATED. CARRY ALWAYS RETURNED CLEAR.;-PKTAC::F7 MOV Q.CCMD(R2),R1 ;ADDR OF CMD RING DESCR TO ALLOCATEN8 SUB Q.FCMD(R2),R1 ;THE BEGINNING OF THE CMD RING DESCR ASR R1 ;DIVIDE BY TWO, ADD Q.CPAT(R2),R1 ;BASE ADDR TO THE OFFSET% MOV (R1),R1 ;ACTUAL PACKET ADDRESSS& MOV R0,MSGLNG(R1) ;STORE IN ENVELOPE& ASL MSGLNG(R1) ;MAKE IT A BYTE VALUE% PUSH ;SAVE THE PACKET ADDRESSH+10$: CLR (R1)+ ;ZERO OUT A WORD OF PACKETE) SOB R0,10$ ;CLEAR OUT THE WHOLE PACKETL POP ;GET PACKET ADDRESSR RETURN ;AND RETURN TO CALLER .PAGEA .SBTTL PKTCHK - CHECK FOR REQUIRED RESOURCES: NON-IMMEDIATE CMDSM= .SBTTL PKTCH1 - CHECK FOR REQUIRED RESOURCES: IMMEDIATE CMDSD;+G; **-PKTCHK-CHECK FOR RESOURCES BEFORE ISSUING I/O - NON-IMMEDIATE CMDSLC; **-PKTCH1-CHECK FOR RESOURCES BEFORE ISSUING I/O - IMMEDIATE CMDS(; K; THIS ROUTINE CHECKS FOR SUFFICIENT RESOURCES TO ISSUE A COMMAND. SUCCESS+; IS RETURN IF AND ONLY IF:E;S1; 1. THERE IS AT LEAST 1 HOST OWNED COMMAND RING. /; 2. THERE ARE SUFFICIENT CREDITS TO ISSUE IT. ;L ; INPUTS:;B; R2=QST ADDRESS; VARIOUS QST FIELDS;N ; OUTPUTS:;D; R0=PRESERVED; R1=DESTROYED; R2-R5=PRESERVEDI8; CARRY SET= NO RESOURCES AVAILABLE. Q.CCMD NOT MODIFIED;; CARRY CLR= RESOURCES AVAILABLE. Q.CCMD(R2) HAS ADDRESS OFO$; AVAILABLE COMMAND RING TO USE.;(; .ENABL LSBIPKTCHK:: ASSUME Q.CST,0S MOV (R2),R1 ;GET CST ADDRESSS( CMP C.CMDS(R1),#1 ;AT LEAST 2 CREDITS?) BLE 100$ ;NO. RETURN FAILURE TO CALLERG1 MOV Q.CCMD(R2),R1 ;CHECK CURRENT CMD DESCRIPTOR  TST MSW(R1) ;HOST OWNED?T( BLT 90$ ;NO. RETURN FAILURE TO CALLER CLC ;INDICATE SUCCESS % RETURN ;AND GO BACK TO THE CALLERRPKTCH1:: ASSUME Q.CST,0L MOV (R2),R1 ;GET CST ADDRESSL& TST C.CMDS(R1) ;AT LEAST ONE CREDIT?* BLE 100$ ;NO. RETURN FAILURE TO CALLER1 MOV Q.CCMD(R2),R1 ;CHECK CURRENT CMD DESCRIPTOR, TST MSW(R1) ;HOST OWNED?D( BLT 90$ ;NO. RETURN FAILURE TO CALLER CLC ;INDICATE SUCCESST% RETURN ;AND GO BACK TO THE CALLER,90$: .IF DF,DSADEB/ INC UNKRNG ;COUNT IT (CREDIT OK, RING ISN'T)9 .ENDC ;DSADEB100$: SEC ;INDICATE FAILURE RETURNS .DSABL LSB 440$: RETURN ;RETURN TO CALLER USING CARRY AS FLAG .DSABL LSB, .PAGE* .SBTTL PKTDR - DEALLOCATE RECEIVE PACKET;+$; **-PKTDR-DEALLOCATE RECEIVE PACKET;TE; THIS ROUTINE DEALLOCATES THE RECEIVE PACKET POINTED TO BY R1. THISRA; ENTAILS LOCATING THE CORRESPONDING RESPONSE RING DESCRIPTOR AND !; MARKING IT AS CONTROLLER OWNED.N;O ; INPUTS:E;L1; R1=ADDRESS OF RESPONSE PACKET TO BE DEALLOCATED ; R2=QST ADDRESS; R4=SCB ADDRESS; R5=UCB ADDRESS;; Q.CRSP(R2)=ADDRESS OF ASSOCIATED RESPONSE RING DESCRIPTOR;;U ; OUTPUTS:;I; R1,R2,R3,R4,R5 PRESERVEDC; ASSOCIATED RESPONSE RING DESCRIPTOR IS MARKED AS CONTROLLER OWNEDR;A;-PKTDR:: ; MOV #RPLEN,MSGLNG(R1) ;RESTORE MAXIMUM REPONSE PACKET SIZEN4 MOV Q.CRSP(R2),R0 ;GET CURRENT RSP RING DESCR ADDR/ BIS #OWN,MSW(R0) ;MARK IT AS CONTROLLER OWNEDA$ RETURN ;AND RETURN TO THE CALLER .PAGE- .SBTTL PORINT - CONTROLLER INTERRUPT HANDLER;+); **-PORINT- CONTROLLER INTERRUPT HANDLERD;SD; INTERRUPTS ARE RECEIVED FROM A CONTROLLER UNDER FOUR CIRCUMSTANCES; THEY ARE AS FOLLOWS:;,D; 1. DURING THE INITIALIZATION PROCESS (OPEN THE "VIRTUAL CIRCUIT")<; 2. WHEN THE "COMMAND RING BUFFER" TRANSITIONS FROM "FULL"; TO "NOT FULL"A?; 3. WHEN THE "RESPONSE RING BUFFER" TRANSITIONS FROM "EMPTY"; TO "NOT EMPTY"D; 4. WHEN A FATAL CONTROLLER ERROR IS DETECTED AND AN INTERRUPT CAN1; BE GENERATED. FATAL CONTROLLER ERRORS ARE:;7; A. FAILURE TO BECOME UNIBUS MASTER FOR DATA TRANSFERP3; B. FAILURE TO BECOME UNIBUS MASTER FOR INTERRUPTA-; C. FAILURE 00uutkTADATADATADATADATADATATO ACCESS I/O PAGE REGISTERS ORT4; COMMUNICATIONS AREA (I.E. NON-EXISTENT MEMORY)"; D. UNIBUS PARITY ERROR DETECTED;T; INPUTS; R5 POINTS TO A UCB;-PORINT::( MOV S.QST(R4),R2 ;R2 POINTS TO THE QST ASSUME Q.CST,0P/ MOV (R2),R3 ;/*Q.CST*/ ;R3 POINTS TO THE CSTN( MOV S.CSR(R4),R1 ;R1 POINTS TO THE CSR ASSUME C.STAT,0: BIT #C1.FAT,(R3) ;WAITING FOR TIMEOUT TO START RECOVERY?, ;CAN SOMETIMES GET INTERRUPT IN MIDDLE * ;OF POWERFAIL BEFORE CONTROLLER GETS  ;RE-INITIALIZED.  BNE 55$ ;IF NE, YES, RETURN+ TST Q.STAT(R2) ;IN SYNCHRONIZATION STATE?M. BMI 70$ ;GO HANDLE SYNCH RELATED INTERRUPTS;U0; THIS SECTION DEALS WITH RESPONSES AND COMMANDS;)710$: TST SA(R1) ;DID CONTROLLER SUFFER A FATAL ERROR?30 BMI 60$ ;HANDLE IT AS CONTROLLER FATAL ERROR /15$: MOV Q.RING(R2),R1 ;R1 POINTS TO THE RINGSB3 CLR CMDINT(R1) ;CLEAR COMMAND INTERRUPT INDICATORR# CLR RSPINT(R1) ;AND RESPONSE TOO. ;M; PROCESS ALL RESPONSESL;F/20$: MOV Q.CRSP(R2),R1 ;STARTING RESPONSE RINGE,23$: TST MSW(R1) ;DOES HOST OWN THIS RING?- BMI 50$ ;NO. WE MUST BE DONE WITH THE SCANL1 SUB Q.FRSP(R2),R1 ;GET OFFSET TO RING FROM BASES ASR R1 ;DIVIDE BY TWO1 ADD Q.RPAT(R2),R1 ;GET TABLE ADDRESS OF ADDRESSF' MOV (R1),R1 ;GET REAL PACKET ADDRESSN0 MOVB CREDIT(R1),R0 ;ELSE, PROCESS THE RESPONSE4 BIC #^C,R0 ;R0 CONTAINS CREDIT/DEBIT FIELD. ADD R0,C.CMDS(R3) ;ADD TO CLASS CREDIT COUNT MOV CREDIT(R1),R04 BIC #^C,R0 ;R0 CONTAINS MESSAGE TYPE FIELD+ BNE 27$ ;MUST NOT BE A SEQUENTIAL PACKETS/ ASSUME MSGSEQ,0 ;MAKE THAT ASSUMPTION, THOUGHD/ CALLV CLASS,CLAEND ;PROCESS SEQUENTIAL PACKETE+ ASSUME Q.CST,0 ;ASSUME AT START OF TABLEO MOV (R2),R3 ;RESTORE CSTB BR 45$ ;JOIN COMMON CODE(<27$: CMPB #,R0 ;IS THIS A REAL LIVE DATAGRAM?+ BNE 40$ ;NO. JUST DEALLOCATE THE PACKET;* CALLV CLASS,CLADAT ;PROCESS THE DATAGRAM BR 45$ ;JOIN COMMON CODEC40$: .IF DF,DSADEB INC UNKPKT .ENDC ;DSADEB$ CALL PKTDR ;THROW THE PACKET AWAY945$: MOV Q.CRSP(R2),R1 ;GET CURRENT RING DESCRIPTOR ADDRT* ADD #CMDSIZ,R1 ;POINT TO NEXT DESCRIPTOR/ CMP R1,Q.LRSP(R2) ;DO WE NEED TO WRAP AROUND?S BLOS 47$ ;NO.. MOV Q.FRSP(R2),R1 ;YES. SO WRAP TO BEGINNING547$: MOV R1,Q.CRSP(R2) ;REMEMBER THE NEXT ONE TO USES" BR 23$ ;AND GO LOOK FOR ANOTHER; ;; ALL RESPONSES HAVE BEEN PROCESSED. TRY TO START MORE I/OH;A<50$: JMPV CLASS,CLACMD ;CALL CLASS DRIVER TO START MORE I/O 55$: RETURN;NC; HANDLE CONTROLLER ERROR. ALL ASSOCIATED CLASS DRIVERS WOULD HAVE2; TO BE TOLD AT THIS POINT.I;R,60$: SEC ;INDICATE ERROR SHOULD BE LOGGED/ JMPV CLASS,CLAERR ;INFORM THE CLASS DRIVER(S)U;S+; HANDLE SYNCHRONIZATION RELATED INTERRUPTS ;W+70$: TST SA(R1) ;WAS THERE A FATAL ERROR?M BPL 75$ ;NO. SO CONTINUEB JMP OPN ;YES. TRY TO RETRYR(75$: TST Q.SAD(R2) ;SPURIOUS INTERRUPT? BEQ 55$ ;YES. IGNORE IT THEN0 JMP @Q.SAD(R2) ;NO. SO PROCESS NECESSARY STEP .PAGE2 .SBTTL PORSEN - SEND COMMAND PACKET TO CONTROLLER;+-; **-PORSEN-SEND COMMAND PACKET TO CONTROLLER ;SE; THIS ROUTINE SENDS THE CURRENT COMMAND PACKET TO THE CONTROLLER FOR,E; PROCESSING. ONCE THE PACKET HAS BEEN SENT, THIS ROUTINE DETERMINEST@; THE NEXT AVAILABLE COMMAND RING THAT CAN BE USED. WRAP AROUND2; PROCESSING FOR THIS TAKES PLACE IN THIS ROUTINE.;E ; INPUTS:T;Q&; R1=ADDRESS OF COMMAND PACKET TO SEND; R2=QST ADDRESS; R3=I/O PACKET ADDRESS;; R4=SCB ADDRESS; R5=UCR ADDRESS; VARIOUS QST AND CST FIELDS; ; OUTPUTS:;O; R1,R2,R3,R4,R5 PRESERVED:; Q.CCMD(R2)=ADDRESS OF NEXT AVAILABLE CMD RING DESCRIPTOR; COMMAND PACKET DISPATCHEDC6; C.CMDS(R3)=NEW CREDIT COUNT (ONE LESS THAN ON ENTRY);T;-PORSEN:: ASSUME Q.CST,0H. MOV (R2),R0 ;/*Q.CST*/ ;GET THE CST ADDRESS1 MOVB C.VCID(R0),VCID(R1) ;SET VIRTUAL CIRCUIT IDT( DEC C.CMDS(R0) ;DECREMENT CREDIT COUNT- MOV Q.CCMD(R2),R0 ;GET CURRENT COMMAND RINGS; BIS #OWN!FLAG,MSW(R0) ;MARK AS CONTR OWNED/REQUEST INTRPTSS# MOV S.KRB(R4),R0 ;GET KRB ADDRESS # MOV K.CSR(R0),R0 ;GE00uutblT CSR ADDRESSV ASSUME IP,0% TST (R0) ;START CONTROLLER LOOKINGE.5$: ADD #CMDSIZ,Q.CCMD(R2) ;POINT TO NEXT RING) CMP Q.CCMD(R2),Q.LCMD(R2) ;OUT OF RINGS?R BLOS 10$ ;NO.5 MOV Q.FCMD(R2),Q.CCMD(R2) ;YES. PERFORM WRAP AROUNDE10$: RETURN ;AND GO BACK) .PAGE7 .SBTTL PORSUP - SETUP DATA STRUCTURES ETC FOR THE PORTR;+; **-PORSUP-PORT SETUP ROUTINE;R7; THE FOLLOWING THREE ROUTINES WILL BE CALLED BY PORSUP ; TO DO THE FOLLOWING:;VE; SETUP - PERFORM DRIVER SPECIFIC SET UP FUNCTIONS SUCH AS SETTING UP/; THE CST, QST, AND RINGS FOR THE CONTROLLER.N;A; VACSET - SET UP INFORMATION NEEDED TO CONVERT VIRTUAL ADDRESSESC<; TO PHYSICAL ADDRESSES. IF A UMR IS NEEDED TO MAP UQCOM,,; THEN IT SHOULD BE ALLOCATED AND MAPPED.; ; INPUTS:C;; R1=VIRTUAL CIRCUIT IDS; R4=SCB ADDRESS; R5=UCB ADDRESS; ; OUTPUTS:;-; R2=QST; R4=SCB; R5=UCB; STORE QST IN SCB ; CALCAULATE UQRELC AND UQRELC+2'; SEE VACSET ROUTINE FOR DESCRIPTION OFR; UQRELC AND UQRELC+2.;-PORSUP:: TST EXEVEC ;IF DONE ALREADYQ BNE 10$ ;SKIP THIS0 MOV @#112,R0 ;GET POINTER TO VECTOR OF POINTERS3 MOV @(R0),-(SP) ;MAP ROUTINE WITH CORRECT APR BIASA2 MOV #120000,-(SP) ;GET ADDR. OF TRANSLATE ROUTINE) MOV #EXEVCL,R2 ;SPECIFY LENGTH OF VECTOR MOV #EXEVEC,R3 ;POINT TO VECTOR: CALL @<140000+MPPRO> ;CALL ROUTINE IN EXEC WHICH MAPS AND ;CALLS TRANSLATE ROUTINE10$:' MOV S.CON(R4),R0 ;GET CONTROLLER INDEXQ( ASL R1 ;CONVERT VC ID INTO BYTE OFFSET0 ADD TABTAB(R1),R0 ;R0 POINTS TO THE QST ADDRESS* MOV (R0),R2 ;R2 CONTAINS THE QST ADDRESS( ASR R1 ;RESTORE THE VIRTUAL CIRCUIT ID+ MOV R2,S.QST(R4) ;STORE QST ADDRESS IN SCBI ASSUME Q.CST,0A1 MOV (R2),R3 ;/*Q.CST*/ ;R3 CONTAINS CST ADDRESSI/ MOVB R1,C.VCID(R3) ;STORE THE VC ID IN THE CSTM RETURNC .PAGEG .SBTTL PORUMR - ALLOCATE/DEALLOCATE STATIC UMR AND DYNAMIC WAIT BLOCKS;+B; **-PORUMR-ALLOCATE/DEALLOCATE STATIC UMR AND DYNAMIC WAIT BLOCKS;QO; CALLED WHENEVER A CONTROLLER IS BROUGHT ONLINE OR OFFLINE. THE STATIC UMR ISQM; ALLOCATED ONLY ONCE, AND A COUNT IS KEPT OF HOW MANY CONTROLLERS ARE ONLINEIJ; TO THE PORT. WHEN THE COUNT GOES TO ZERO, THE UMR IS DEALLOCATED. WAITM; BLOCKS ARE ALLOCATED ON A PER-CONTROLLER BASIS TO AVOID HAVING TO DEAL WITHS; FAIRNESS PROBLEMS.;M ; INPUTS:;A?; C = 1 TRANSITION TO OFFLINE - DEALLOCATE UMR AND WAIT BLOCKSA; R2 = KRB ADDRESS;R<; C = 0 TRANSITION TO ONLINE - ALLOCATE UMR AND WAIT BLOCKS2; R0 = HIGH 6 BITS OF RELOCATION BIAS FOR PORT UMR2; R1 = LOW 16 BITS OF RELOCATION BIAS FOR PORT UMR; R2 = KRB ADDRESS; R3 = CST ADDRESS;E ; OUTPUTS:;.; UMR AND WAIT BLOCKS ALLOCATED OR DEALLOCATEDI; FOR THE ONLINE TRANSITION, R0 AND R1 CONTAIN THE RELOCATION BIAS OF THES; ALLOCATED UMRT;-PORUMR:  BCC 30$ ;IF CC ONLINE REQUEST; TST CONCNT ;IS THIS THE LAST CONTROLLER MAPPING THE PORT?B( BNE 10$ ;NO, JUST DUMP THE WAIT BLOCKS8 MOV UMRMAP,R2 ;GET THE ADDRESS OF THE UMR MAPPING BLOCK5 CLR UMRMAP ;MAKE SURE UMRMAP IS ZERO SO WE ALLOCATEW# ;..A STATIC UMR AGAIN NEXT TIMEU PUSH ;SAVE THE CST3$ CALL @DEUMR ;DEALLOCATE STATIC UMR5 MOV R2,R0 ;MOVE THE ADDRESS OF THE CORE BLOCK TO R0 " MOV #M.LGTH,R1 ;CORE BLOCK LENGTH( CALL @DEACB ;DEALLOCATE THE CORE BLOCK POP ;RESTORE THE CST$<10$: ADD #C.UMRW,R3 ;POINT TO THE START OF THE UMR WAIT BLOC8 MOV #MAXWBT,-(SP) ;STORE MAX UMR WAIT BLOCKS ON STACKR 315$: MOV #UMRWTB,R1 ;SET THE LENGTH OF A WAIT BLOCKR MOV (R3),R0 ;GET A BLOCK BEQ 20$ ;IF EQ WE'RE DONE 7 .IIF DF M$$PRO TST -(R0) ;BACK UP OVER UNIBUS RUN MASK " CLR (R3)+ ;CLEAR OUT THE ADDRESS PUSH ;SAVE IT( CALL @DEACB ;DEALLOCATE THE CORE BLOCK POP ;AND RESTORE IT/ DEC (SP) ;KEEP THE COUNT FOR WAIT BLOCKS LEFT  BNE 15$ ;GO DO ANOTHER ; 20$: TST (SP)+ ;CLEAN THE STACK RETURN ;ALL DONER30$:6 TST UMRMAP ;IS THIS THE FIRST CONTROLLER TO CONNECT?# BNE 40$ ;NO, JUST GET WAIT BLOCKSR1 PUSH ;SAVE RELOCATION BIAS HIGH AND LOWG1 MOV #M.LGTH,R1 ;LENGTH OF CORE BLOCK TO ALLOCATEM$ CALL @ALOCB ;ALLOC00uutkTADATADATADATADATADATAATE A CORE BLOCK BCS 80$ ;ERROR, EXIT2 MOV R0,UMRMAP ;SAVE THE ADDRESS OF THE CORE BLOCK- POP M.BFVL(R0) ;SET UP LO 16-BITS OF ADDRESSNH MOVB (SP),M.BFVH(R0) ;SET UP HI 6-BITS OF ADDRESS (WE ONLY NEED A BYTE)3 TST (SP)+ ;POP OFF THE WORD TO MAINTAIN THE STACKR* MOV #4,M.UMRN(R0) ;SET UP COUNT FOR 1 UMR CALL @ASUMR ;GO ASSIGN UMR BCS 90$ ;IF CS, ERROR EXIT;AD; WE'LL DO THE ACTUAL MAPPING LATER SO THAT A RESYNCH CAN REMAP ALSO;G=; NOW WE ALLOCATE A SET OF UMR WAIT BLOCKS FOR THE CONTROLLERT; 40$:* TST C.UMRW(R3) ;ARE WAIT BLOCKS ASSIGNED? BNE 70$ ;IF NE, YES, DONEE( MOV #DUUMR,R2 ;ASSUME THAT IT IS A DISK ASSUME U.DCB,0V MOV (R5),R1 ;GET THE DCB. CMP #"DU,D.NAM(R1) ;SEE IF IT IS DISK OR TAPE BEQ 50$ ;IF EQ IT IS DISKI MOV #MUUMR,R2 ;IT'S A TAPEM*50$: PUSH ;SAVE WORKING REGISTERS( ADD #C.UMRW,R3 ;POINT TO UMR WAIT QUEUE)60$: MOV #UMRWTB,R1 ;LENGTH OF WORK BLOCKE PUSH R2 ;SAVE THE BLOCK INDEXO7 CALL @ALOCB ;ALLOCATE A CORE BLOCK FOR UMR ASSIGNMENTC! POP R2 ;RESTORE THE BLOCK INDEX30 BCS 65$ ;WE WILL ALLOCATE THE REST DYNAMICALLY& .IF DF M$$PRO ;MULTIPROCESSOR SYSTEM MOV U.SCB(R5),R4 ;SCB ADDRESS% MOV S.URM(R4),(R0)+ ;UNIBUS RUN MASK( .ENDC ;M$$PRO+ MOV R0,(R3)+ ;PUT THE ADDRESS IN THE TABLEV% SOB R2,60$ ;LOOP THROUGH ALLOCATION,$65$: POP ;RESTORE REGISTERS170$: MOV UMRMAP,R0 ;GET THE STATIC UMR WAIT BLOCKR CALL @MPUB1 ;MAP THE UNIBUS ' MOV UMRMAP,R2 ;GET BACK THE STATIC UMR 3 MOVB M.UMVH(R2),R0 ;HIGH 2 BITS OF RELOCATION BIAS;# ASH #-4,R0 ;SHIFT BITS 4:5 TO 0:1W2 MOV M.UMVL(R2),R1 ;LOW 16 BITS OF RELOCATION BIAS CLC ;GOOD RETURNY RETURNV$80$: POP ;RESTORE REGISTERS90$: SEC ;ERROR RETURN RETURNC .PAGE- .SBTTL PORSYN - PORT SYNCHRONIZATION ROUTINEL;+); **-PORSYN-STANDARD PORT SYNCHRONIZATION:;PC; TRANSFERED TO BY CLASS DRIVER TO START CONTROLLER SYNCHRONIZATIONW; ; INPUTS:L;M; R5=UCB ADDRESS; R4=SCB ADDRESS; R3=CST ADDRESS; R2=QST ADDRESS; S.CSR=CSR ADDRESS $; S.VCT=(INTERRUPT VECTOR ADDRESS)/4;H ; OUTPUTS:; :; IF INITIAL PART OF HARDWARE SYNCHRONIZATION BEGINS THEN:; 4; THE CONTROLLER HAS BEGUN STEP 1 OF SYNCHRONIZATION; R2-R5 PRESERVED ; R0,R1 DESTROYEDTF; Q.RTY=RETRY-1 (A TOTAL OF (RETRY) RE-TRIES WILL BE MADE BY THE PORT)@; Q.SAD=OPN2 (AN INTERRUPT IS EXPECTED AND WILL CAUSE A TRANSFER; TO THE ADDRESS IN Q.SAD)Y0; Q.STAT=Q1.SYN (CONTROLLER STATE=SYNCHRONIZING)<; Q.INDX=2 (ROUTINE WSW WILL USE THE SECOND ENTRY IN Q.WRIT)2; Q.CTM=STMOC (STOMC SECOND TIME OUT ON EACH STEP)?; Q.STEP=STEP2 (WE ARE WAITING FOR COMPLETION OF STEP 1 AND THET; BEGINNING OF STEP 2.H5; Q.WRIT=4 STEP VALUES HOST MUST WRITE TO SA REGISTERR;R; IF ALL RE-TRIES FAIL:E;; CONTROL TRANSFERS TO CLASYNT; C=1 TO INDICATE FAILUREY; R5=UCB ADDRESS; R4=SCB ADDRESS; R3=CST ADDRESS; R2=QST ADDRESS5; Q.STAT=Q1.OFF (CONTROLLER STATE=OFF-LINE, UNUSABLE)N;-PORSYN::0 MOVB #RETRY,Q.RTY(R2) ;SET UP FOR RETRY RE-TRYS2 CLR Q.SAD(R2) ;PROTECT AGAINST SPURIOUS INTERRUPT ;UQINT WILL JUST DROP IT& ;IF Q.SAD(R2)=0 AND Q1.SYN IS SET.7 MOV #Q1.SYN,Q.STAT(R2) ;CONTROLLER STATE=SYNCHRONIZING4% ;CONTROL NOW FALLS THROUGH TO THES ;OPN MODULE. BIS #C1.SYN,(R3) ;SET SYNC BITN4 MOV #1,C.CMDS(R3) ;SET INTITIAL CREDIT COUNT TO ONE( ;MUST BE 1 BECAUSE IT IS DECREMENTED ;WHEN THE OP.SCC IS SENT .PAGE .SBTTL . OPN;E:; CONTROL TRANSFERS HERE IF AN ERROR IN SYNCHRONIZATION IS8; DETECTED. CONTROL ALSO FALLS THROUGH TO HERE FROM THE; PORSYN ENTRY POINT.T;L ; INPUTS: ;; R0,R1 MAY BE DESTROYED; R5=UCB ADDRESS; R4=SCB ADDRESS; R3=CST ADDRESS; R2=QST ADDRESS; Q.RTY=NUMBER OF RE-TRIES LEFT ;S .ENABL LSBDOPN:: DECB Q.RTY(R2) ;TRY OR RE-TRY? BGE 5$ ;IF GE, YES2 MOV #Q1.OFF,Q.STAT(R2) ;CONTROLLER STATE=OFF-LINE;IC; LET CLASS DRIVER HANDLE FAILURE OF SYNCHRONIZATION BY TRANSFERING ; TO CLASYN WITH THE CARRY SET;E.BADSYN: SEC ;INDICATE FAILURE TO SYNCHRONIZE5 JMPV CLASS,CLASYN ;TRANSFER TO CLASS DRIVER (CLASYN)E;Y#; 00uutblCOMMENCE HARDWARE SYNCHRONIZATION ; 5$:S;Y+; SET UP 4 STEP VALUES THAT HOST MUST WRITEC;A" PUSH ;SAVE R3 MON THE STACK MOV R2,R3 ;R3=QST ADDRESS.9 ADD #Q.WRIT,R3 ;R3 POINTS TO THE Q.WRIT TABLE IN THE QST5-; SET UP FIRST WORD TO PASS TO THE CONTROLLERL2 MOVB S.VCT(R4),(R3) ;(INTERRUPT VECTOR ADDR) / 4$ BISB #INTE,(R3)+ ;ENABLE INTERRUPTS;/; CALCULATE COMMAND RING LENGTH AS A POWER OF 2 ;D1 MOVB Q.CMDN(R2),R0 ;R0=NUMBER OF CMD DESCRIPTORSR, MOV #-1,R1 ;R1 IS FOR COUNTING POWERS OF 2#15$: INC R1 ;COUNT THIS POWER OF 2S ASR R0 ;SHIFT RIGHTA* BNE 15$ ;IF NE, COUNT ANOTHER POWER OF 2- ASL R1 ;ELSE, SHIFT C RNG LNG INTO POSITIONR ASL R1D ASL R1R& MOVB R1,(R3) ;AND ADD IT TO THE WORD1 MOVB Q.RSPN(R2),R0 ;R0=NUMBER OF RSP DESCRIPTORSL, MOV #-1,R1 ;R1 IS FOR COUNTING POWERS OF 2#25$: INC R1 ;COUNT THIS POWER OF 2E ASR R0 ;SHIFT RIGHT * BNE 25$ ;IF NE, COUNT ANOTHER POWER OF 2% BISB R1,(R3) ;ADD R RNG LNG TO WORDC BISB #200,(R3) ;SET BIT 15 + POP ;RESTORE R3 TO ORIGINAL CONTENTS ;S8; CONTINUE WITH INITIALIZATION AND START SYNCHRONIZATION; 8 MOV #STEP1,Q.STEP(R2) ;Q.STEP=FIRST STEP VALUE EXPECTED6 CLR Q.INDX(R2) ;INITIALIZE OFFSET INTO TABLES TO ZERO' MOV S.CSR(R4),R0 ;R0 POINTS TO THE CSRB ASSUME IP,0 $ CLR (R0) ;HARD INIT THE CONTROLLER PUSH <#50.> ;COUNTER FOR DELAY30$: DEC (SP) ;COUNT DOWN BGT 30$ ; FOR ENTIRE DELAY TST (SP)+ ;CLEAN OFF STACK2 CALL WSW ;PROCESS START OF STEP 1 (TABLE DRIVEN), BCS OPN ;IN CASE OF ERROR GO TRY TO RE-TRY;L7; IN CASE AN ERROR IS DETECTED CONTROL TRANSFERS TO OPNS;HI; SET UP KS.EXT BIT IN K.STS FOR THE CONTROLLER, BASED ON QB BIT IN VALUEC%; READ FROM SA AT THE START OF STEP 1A;S& MOV S.KRB(R4),R4 ;GET THE KRB ADDRESS< BIC #KS.EXT,K.STS(R4) ;ASSUME EXTENDED MEMORY NOT SUPPORTED8 BIT #QB,Q.TEMP(R2) ;CONTROLLER SUPPORT 22 BIT HOST BUS? BEQ 35$ ;IF EQ, NO; ; * * * N O T E * * *E;O=; THE FOLLOWING BRANCH MAY BE NOP'D IN ORDER TO ALLOW THE USEB:; OF 22-BIT MSCP CONTROLLERS ON BUS ADAPTERS WHICH REQUIRE"; THE USE OF UNIBUS MAP REGISTERS.; /$$$BR1::BR 34$ ;NORMALLY SKIP THE SYSTEM CHECKN2 BIT #HF.UBM,@HFMSK ;ARE THERE UMR'S ON THE SYSTEM) BNE 35$ ;YES, THEN USE CONVERTER OPTIONR34$:< BIS #KS.EXT,K.STS(R4) ;INDICATE CONTROLLER IS ON 22 BIT BUS.35$: MOV U.SCB(R5),R4 ;RESTORE THE SCB ADDRESS= PUSH <120000+SCUCB> ;GET THE ADDRESS OF THE SCAN UCB ROUTINE %37$: CALL @(SP)+ ;CALL THE COROUTINE  BCS 45$ ;IF CS, ALL DONE< BIC #DV.EXT,U.CW1(R5) ;ASSUME EXTENDED MEMORY NOT SUPPORTED8 BIT #QB,Q.TEMP(R2) ;CONTROLLER SUPPORT 22 BIT HOST BUS? BEQ 37$ ;IF EQ NOA;K; * * * N O T E * * *F;M=; THE FOLLOWING BRANCH MAY BE NOP'D IN ORDER TO ALLOW THE USEE:; OF 22-BIT MSCP CONTROLLERS ON BUS ADAPTERS WHICH REQUIRE"; THE USE OF UNIBUS MAP REGISTERS.;S'$$$BR2::BR 38$ ;SKIP THE SYSTEM CHECKS 2 BIT #HF.UBM,@HFMSK ;ARE THERE UMR'S ON THE SYSTEM) BNE 37$ ;YES, THEN USE CONVERTER OPTION 38$:8 BIS #DV.EXT,U.CW1(R5) ;INDICATE DEVICE IS ON 22 BIT BUS BR 37$ ;GO DO ANOTHERD45$: ;CONTINUE2;C+; SET UP THE RELOCATION REGISTERS AT UQRELQ ; CALL VACSET BCS BADSYN ;ERROR EXIT;7; SET UP THE NEXT THREE WORDS TO SEND TO THE CONTROLLER ;  PUSH ;SAVE R3 MOV R2,R3 ;GET THE QST ADDRESS< ADD #Q.WRIT+2,R3 ;GET TO THE ADDRESS OF THE NEXT START WORD8 MOV Q.RING(R2),R0 ;R0 POINTS TO THE RING BASE (LOW ADDR, CALL VACPA ;CONVERT R0 TO PHYSICAL ADDRESS* MOV R0,(R3)+ ;Q.WRIT+2=RING BASE LOW BITS+ MOV R1,(R3)+ ;Q.WRIT+4=RING BASE HIGH BITS * MOV #LF!GO,(R3)+ ;Q.WRIT+6=LAST FAIL ! GO POP ;RESTORE R3;EA; SET TIME-OUT, AND RETURN, AN INTERRUPT WILL TRANSFER TO OPN2 TO8; PROCESS THE COMPLETION OF STEP 1 (BEGINNING OF STEP 2)1 MOVB #STMOC,S.ITM(R4) ;SET INITIAL TIMEOUT COUNTA1 MOVB #STMOC,S.CTM(R4) ;AND CURRENT TIMEOUT COUNTE$ MOV R5,S.BSYU(R4) ;SET THE BUSY UCB. BISB #US.BSY,U.STS(R5) ;MARK THE UNIT AS BUSY= MOV #OPN2,Q.SAD(R2) ;THE NEXT INTERRUPT WILL TAKE US TO OPN2G RETURN ;RETURNV .DSABL LSBW .PAGE .SBTTL . OPN00uutkTADATADATADATADATADATA2V;+; AT THE START OF STEP 29; OPN2 IS JUMPED TO FROM UQINT (THE INTERRUPT PROCESSOR);E;N ; INPUTS:U;W; R5=UCB ADDRESS; R4=SCB ADDRESS; R3=CST ADDRESS; R2=QST ADDRESS;S ; OUTPUTS:;S; R2-R5 PRESERVED ; R0,R1 DESTROYEDN; S.ITM(R4)=STMOCC ; Q.SAD=OPN3;-OPN2::) CALL WSW ;PROCESS STEP 2 (TABLE DRIVEN)B BCC 5$ ;ALL IS OK( JMP OPN ;WE FAILED, RESTARTV95$: MOVB S.ITM(R4),S.CTM(R4) ;RESET CURRENT TIMEOUT COUNT= MOV #OPN3,Q.SAD(R2) ;THE NEXT INTERRUPT WILL TAKE US TO OPN3V RETURN ;RETURNT .PAGE .SBTTL . OPN3 ;+; AT THE START OF STEP 3; OPN3 IS JUMPED TO FROM UQINT;U ; INPUTS:;4; R5=UCB ADDRESS; R4=SCB ADDRESS; R3=CST ADDRESS; R2=QST ADDRESS;R ; OUTPUTS:; ; R2-R5 PRESERVED ; R0,R1 DESTROYED ; Q.CTM=STMOC ; Q.SAD=OPN4;-OPN3::) CALL WSW ;PROCESS STEP 3 (TABLE DRIVEN)O" BCC 5$ ;IF CC, SUCCESS, CONTINUE, JMP OPN ;ELSE JUMP TO OPN AND MAYBE RE-TRY95$: MOVB S.ITM(R4),S.CTM(R4) ;RESET CURRENT TIMEOUT COUNT = MOV #OPN4,Q.SAD(R2) ;THE NEXT INTERRUPT WILL TAKE US TO OPN4O RETURN ;RETURNS .PAGE .SBTTL . OPN4D;+; AT THE START OF STEP 4; OPN4 IS JUMPED TO FROM UQINT;D ; INPUTS:C;A; R5=UCB ADDRESS; R4=SCB ADDRESS; R3=CST ADDRESS; R2=QST ADDRESS;E ; OUTPUTS:;T!; CONTROL IS TRANSFERED TO CLASYN:,; C=0 (INDICATES SUCCESSFUL SYNCHRONIZATION); R2-R5 PRESERVEDC; R0,R1 DESTROYEDP ; Q.CTM=? ; Q.SAD=? (; Q.STAT=Q1.RDY (CONTROLLER STATE=READY); RING DESCRIPTORS ARE SET UPN;;-OPN4::) CALL WSW ;PROCESS STEP 4 (TABLE DRIVEN)O" BCC 5$ ;IF CC, SUCCESS, CONTINUE, JMP OPN ;ELSE JUMP TO OPN AND MAYBE RE-TRY)5$: CALL RNGSET ;SET UP RING DESCRIPTORS / MOV #Q1.RDY,Q.STAT(R2) ;CONTROLLER STATE=READY@ MOV Q.FRSP(R2),Q.CRSP(R2) ;SET UP INITIAL RESPONSE RING POINTER@ MOV Q.FCMD(R2),Q.CCMD(R2) ;SET UP INITIAL COMMAND RING POINTER CLC ;INDICATE SUCCESS6 JMPV CLASS,CLASYN ;TRANSFER TO CLASS DRIVER TO HANDLE .PAGE2 .SBTTL RNGSET - INITIAL SETUP OF RING DESCRIPTORS;+.; **-RNGSET-INITIAL SET UP OF RING DESCRIPTORS;RD; THIS ROUTINE IMPLEMENTS THE DESIGN DECISION TO STATICALLY ALLOCATEE; A PACKET TO EACH RING DESCRIPTOR. IT FILLS IN EACH DESCRIPTOR WITH1D; THE PHYSICAL ADDRESS OF THE PACKET ASSOCIATED WITH THE DESCRIPTOR.; ; INPUTS:R;O; R2=QST ADDRESS; R4=SCB ADDRESS; VARIOUS QST FIELDS;C ; OUTPUTS:;I; IT DESTROYS R0, R1<; A PACKET IS ASSOCIATED PERMANENTLY WITH EACH DESCRIPTOR BY;; FILLING THE DESCRIPTOR WITH THE PACKETS PHYSICAL ADDRESS.S*; ALL CMD DESCRIPTORS ARE MADE HOST OWNED.B; ALL RSP DESCRIPTORS ARE MADE CONTROLLER OWNED WITH (FLAG BIT)=1.;L;-RNGSET::1 PUSH ;SAVE R4,R3,R2, R2 MUST BE LAST!E. MOV Q.RING(R2),R3 ;R3 POINTS TO THE RING BASE, MOVB Q.RSPN(R2),R4 ;R4=NUMBER OF RSP DESCR.B MOV Q.RPAT(R2),R2 ;R2 POINTS TO THE TABLE OF RSP PACKET ADDRESSES.5$: MOV (R2)+,R0 ;R0=VA OF RSP PACKET (TEXT+0)* MOV #RPLEN,MSGLNG(R0) ;SET MESSAGE LENGTH& CLR CREDIT(R0) ;CLEAR CREDIT AND VCID/ CALL VACPA ;CONVERT VIRTUAL ADDR. TO PHYSICALC ;R0=LOW BITS ;R1=HIGH BITSS5 MOV R0,(R3)+ ;FILL IN DESCR. WITH PHYSICAL PKT ADDR.= MOV R1,(R3)> BIS #OWN!FLAG,(R3)+ ;MAKE DESCR. CONTROLLER OWNED AND REQUEST" ;INTERRUPT ON RING TRANSITIONS5 SOB R4,5$ ;LOOP AND SET UP ALL RSP RING DESCRIPTORS# MOV (SP),R2 ;R2 POINTS TO THE QSTT5 MOVB Q.CMDN(R2),R4 ;R4=NUMBER OF COMMAND DESCRIPTORSFB MOV Q.CPAT(R2),R2 ;R2 POINTS TO THE TABLE OF CMD PACKET ADDRESSES+ ;R3 POINTS TO FIRST COMMAND DESCR SINCEA! ;CMD DESCR. FOLLOW RSP DESCR.I/10$: MOV (R2)+,R0 ;R0=VA OF CMD PACKET (TEXT+0)R* MOV #CPLEN,MSGLNG(R0) ;SET MESSAGE LENGTH& CLR CREDIT(R0) ;CLEAR CREDIT AND VCID/ CALL VACPA ;CONVERT VIRTUAL ADDR. TO PHYSICALI ;R0=LOW BITS ;R1=HIGH BITS,5 MOV R0,(R3)+ ;FILL IN DESCR. WITH PHYSICAL PKT ADDR.P& MOV R1,(R3)+ ;CMD PKTS ARE HOST OWNED6 SOB R4,10$ ;LOOP AND SET UP ALL CMD RING DESCRIPTORS! POP ;RESTORE R2,R3,R4M RETURN ;RETURN .PAGE8 .SBTTL STOMP - BRING A CONTROLLER TO THE OFFLINE STATE;+!; **-STOMP-C00uutblLOBBER THE CONTROLLERA; L; CALLED TO ENSURE THAT THE CONTROLLER IS IN AN OFFLINE STATE WHEN THE CLASS0; DRIVER DETERMINES THAT A RESYNCH IS NECESSARY.;T ; INPUTS:O;Y; R2 QST ADDRESS; R4 SCB ADDRESS;B ; OUTPUTS:;R; R2,R4 PRESERVED ; R0 DESTROYED;-STOMP: MOV S.CSR(R4),R0 ;GET THE CSR ASSUME IP,0 CLR (R0) ;STOMP THE CONTROLLER< MOV #Q1.OFF,Q.STAT(R2) ;SET THE CONTROLLER STATE TO OFFLINE RETURN .PAGE7 .SBTTL VACPA - VIRTUAL TO PHYSICAL ADDRESS CONVERSION;+9; **-VACPA-VIRTUAL ADDRESS TO PHYSICAL ADDRESS CONVERSIONT; B; CALLED TO CONVERT A VIRTUAL PACKET ADDRESS TO A PHYSICAL ADDRESS9; (OR UMR ADDRESS FOR AN EXTENDED MEMORY UNIBUS MACHINE).2=; BECAUSE ALL PACKETS AND RINGS ARE IN A SHARED COMMON MAPPEDS7; THROUGH APR 6 THE VIRTUAL ADDRESS MAY BE COMPUTED AS:T;E<; (PHYSICAL ADDRESS)=(VIRTUAL ADDRESS)+(RELOCATION CONSTANT);FE; SEE ROUTINE VACSET FOR A DESCRIPTION OF HOW THE RELOCATION CONSTANTB; IS COMPUTED.;L ; INPUTS:L;D; R0=VIRTUAL ADDRESS(; UQRELC=LOW BITS OF RELOCATION CONSTANT+; UQRELC+2=HIGH BITS OF RELOCATION CONSTANTI;A ; OUTPUTS:;S!; R0=LOW BITS OF PHYSICAL ADDRESSD"; R1=HIGH BITS OF PHYSICAL ADDRESS;H;-VACPA::S CLR R1K/ ADD UQRELC,R0 ;R0=LOW BITS OF PHYSICAL ADDRESSH ADC R1 2 ADD UQRELC+2,R1 ;R1=HIGH BITS OF PHYSICAL ADDRESS RETURND .PAGE. .SBTTL VACSET - CALCULATE RELOCATION CONSTANT;+ ; **-VACSET -R;D?; THIS ROUTINE WILL CALCULATE THE RELOCATION CONSTANT NEEDED TO :; PERFORM VIRTUAL ADDRESS TO PHYSICAL ADDRESS CONVERSIONS.; PA=VA+UQRELC<; IF A UMR IS NEEDED TO MAP UQCOM THIS ROUTINE WILL ALLOCATE ; AND MAP IT.B; ; INPUTS: ;R; R2=QST; R3=CST; R4=SCB; R0,R1 DESTROYED; KISAR6; $FMASK; $HFMSK;, ; OUTPUTS:; ; R2,R3,R4,R5 PRESERVEDC ; UQRELC AND UQRELC+2 ARE SET UP%; UQRELC HAS THE TWO HIGH BITS SET UPE%; UQRELC+2 HAS THE 16 LOW BITS SET UP ; UMRS ARE MAPPED IF NECESSARY;-VACSET::( MOV @KISR6,R1 ;GET START OF PORT COMMON CLR R0 ;ZERO R0R) ASHC #6.,R0 ;CALCULATE PHYSICAL ADDRESSR& MOV S.KRB(R4),R2 ;GET THE KRB ADDRESS2 BIT #KS.EXT,K.STS(R2) ;EXTENDED MEMORY SUPPORTED? BNE 50$ ;YES, DON'T GET UMR'S27 CLC ;CARRY CLEAR TELLS PORUMR IT'S ONLINE TRANSITION > CALL PORUMR ;GO ALLOCATE AND MAP A UMR (GET WAIT BLOCKS TOO)" BCS 60$ ;BAD, NO SPACE ALLOCATED50$: H" MOV S.QST(R4),R2 ;RESTORE THE QST ASSUME Q.CST,0O) MOV (R2),R3 ;/*Q.CST*/ ;RESTORE THE CSTA5 SUB #140000,R1 ;SUBTRACT PORT COMMON VIRTUAL ADDRESSM ;MAPPED THRU APR6 SBC R0 ;SUBTRACT CARRY FROM R0 MOV R1,UQRELC ;LO ADDRESS MOV R0,UQRELC+2 ;HI CLC ;GOOD RETURN) 60$: RETURNM .PAGE7 .SBTTL WSW - WAIT/RESPOND TO A SYNCHRONIZATION STEPL;+O; **-WSW-WAIT FOR AND RESPOND TO A STEP IN THE HARDWARE SYNCHRONIZATION PROCESSE;AL; WAIT UP TO 100 MICRO-SECONDS FOR A STEP VALUE, READ AND SAVE SA, WRITE SA.;S ; INPUTS:T;A; R2=QST ADDRESS; R4=SCB ADDRESS; S.CSR=CSR ADDRESSA; VARIOUS QST FIELDS;C ; OUTPUTS:;I; C=1 IF AN ERROR IS DETECTEDU; R0,R1 DESTROYEDU;A; C=0 ON SUCCESS; R0,R1 DESTROYEDA1; Q.STEP=NEXT STEP BIT PATTERN EXPECTED IN THE SA0; Q.INDX=Q.INDX+2 (INDEXES NEXT ENTRY IN Q.WRIT);O;-WSW::I' MOV S.CSR(R4),R1 ;R1 POINTS TO THE CSRE CLR R0 ;R0=LOOP CONTROLW5$: TST SA(R1) ;ERROR OCCURED?. BMI 15$ ;IF MI, YES, GO SET CARRY AND RETURN% BIT Q.STEP(R2),SA(R1) ;STEP BIT SET?U BNE 10$ ;IF NE, YES, SUCCESS3 SOB R0,5$ ;WAIT UP TO 100 MICRO-SEC. FOR STEP BITL- BR 15$ ;TIME IS UP, GO SET CARRY AND RETURNT;E2; A STEP HAS COMPLETED AND THE NEXT STEP HAS BEGUN;E/10$: MOV Q.INDX(R2),R0 ;INDEX INTO Q.WRIT TABLE  ADD R2,R0 ;R0=QST + INDEX 8 MOV SA(R1),Q.TEMP(R2);READ/SAVE SA REGISTER TEMPORARILY5 MOV Q.WRIT(R0),SA(R1) ;WRITE TO SA FROM Q.WRIT TABLEO" ASL Q.STEP(R2) ;UPDATE Q.STEP AND ADD #2,Q.INDX(R2) ;Q.INDX CLC ;INDICATE SUCCESS BR 20$ ;GO TO RETURN#15$: SEC ;INDICATE ERROR DETECTEDC20$: RETURN ;RETURN 7CODLEN = <.-CODBEG>/2 ;LENGTH OF CODE SECTION IN WORDS  LOGRTNR .ENDTURNT;E2; A STEP HAS COMPLETED AND THE NEXT ST00WvutkTADATADATADATADATADATA .TITLE QITBLB .IDENT /03.01/L;B6; COPYRIGHT (c) 1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;F; B. S. MCCARTHY 20-JUL-81;D; POLISH INTERPRETER DATA BASE;H; THIS MODULE WAS SPLIT OUT OF DRTBL TO ALLOW THE QIO DIRECTIVE AND THIS4; TABLE TO BE PLACED IN THE SECOND DIRECTIVE COMMON.;O;; PREVIOUSLY MODIFIED BY:F;L ; J. KAUFMAN; B. S. MCCARTHY; J. W. BERZLE;.;L+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:M; "; ERIC POSTPISCHIL 12-DEC-86 03.00;:; edp040 -- ADD SON OF GET DEVICE INFORMATION SUBFUNCTION; TO GIN DIRECTIVE.C ; B. S. MCCARTHY 5-MAR-87 03.01;S4; BM384 -- MOVE DRGIN DISPATCH TABLE INTO DRGIN FOR!; INSERTION INTO VECTOR COMMON. ; ;I .PAGE;+1; POLISH INTERPRETER DATA BASE FOR QIO PROCESSINGL;D; FUNCTION CODE DISPATCH VECTOR;-)$FCDSP::.WORD FCIFC ;10-ILLEGAL FUNCTIONM. .WORD $FCPKT ;11-FIND FILE NAME IN DIRECTORY .IF DF R$$LKL .WORD UNLCK ;12-UNLOCK BLOCK .IFFS" .WORD FCIFC ;12-ILLEGAL FUNCTION .ENDC2 .WORD $FCPKT ;13-REMOVE FILE NAME FROM DIRECTORY/ .WORD $FCPKT ;14-ENTER FILE NAME IN DIRECTORY & .WORD FCACC ;15-ACCESS FILE FOR READ0 .WORD FCACC ;16-ACCESS FILE FOR READ AND WRITE6 .WORD FCACC ;17-ACCESS FILE FOR READ, WRITE, AND EXT .WORD FCDAC ;20-DEACCESS FILEC$ .WORD FCRVB ;21-READ VIRTUAL BLOCK% .WORD FCWVB ;22-WRITE VIRTUAL BLOCKD .WORD FCEXT ;23-EXTEND FILED .WORD FCCRE ;24-CREATE FILE.4 .WORD FCDEL ;25-MARK FILE FOR DELETE/TRUNCATE FILE' .WORD $FCPKT ;26-READ FILE ATTRIBUTESD( .WORD $FCPKT ;27-WRITE FILE ATTRIBUTES0 .WORD $FCPKT ;30-USER MAGTAPE CONTROL FUNCTION* .WORD FCWVB ;31-TRANSMIT PROCESS MESSAGE) .WORD FCRVB ;32-RECEIVE PROCESS MESSAGEW$ .WORD FCCON ;33-CONNECT TO PROCESS) .WORD FCDIS ;34-DISCONNECT FROM PROCESSE* .WORD FCNCT ;35-NETWORK CONTROL FUNCTION" .WORD FCIFC ;36-ILLEGAL FUNCTION" .WORD FCIFC ;37-ILLEGAL FUNCTION .PAGE .IF NDF M$$NETE*FCCON: ;REF LABEL IF NO NETWORK SUPPORT*FCDIS: ;REF LABEL IF NO NETWORK SUPPORT*FCNCT: ;REF LABEL IF NO NETWORK SUPPORT .IFTF;O; ILLEGAL FUNCTION;T1FCIFC: .WORD $IEIFC ;SET ILLEGAL FUNCTION STATUSE;S8; ACCESS FILE FOR READ, READ/WRITE, OR READ/WRITE/EXTEND;N9FCACC: .WORD $CKDMO ;CHECK IF VOLUME MARKED FOR DISMOUNTR5 .WORD $CKALN ;CHECK IF FILE ALREADY ACCESSED ON LUNO .IF DF M$$MUP5 .WORD $CKMOU ;CHECK IF VOLUME MOUNTED FOR THIS USERA .ENDC# .WORD $BDPKT ;BUILD AN I/O PACKET .WORD $CKLHD ;LOCK DOWN HEADER* .WORD $CKIWN ;INCREMENT WINDOW I/O COUNT+ .WORD $CKRLK ;SYNCHRONIZE ACCESS AND EXIT;E; DEACCESS FILE;C3FCDAC: .WORD $CKNLN ;CHECK IF FILE ACCESSED ON LUN# .WORD $BDPKT ;BUILD AN I/O PACKETR .WORD $CKLHD ;LOCK DOWN HEADER* .WORD $CKIWN ;INCREMENT WINDOW I/O COUNT .WORD $CKRLK ;EXIT;C; READ VIRTUAL BLOCK;D3FCRVB: .WORD $CKNLN ;CHECK IF FILE ACCESSED ON LUNV* .WORD $CKRAC ;CHECK READ ACCESS AND EXIT;$; WRITE VIRTUAL BLOCKC; 3FCWVB: .WORD $CKNLN ;CHECK IF FILE ACCESSED ON LUNR+ .WORD $CKWAC ;CHECK WRITE ACCESS AND EXITR; ; CREATE FILE'; CREATE & ACCESS NOT LEGAL COMBINATIONO-; CREATE & EXTEND DOES NOT INCR PENDING COUNTO; SINCE NO WINDOW;O9FCCRE: .WORD $CKDMO ;CHECK IF VOLUME MARKED FOR DISMOUNTN5 .WORD $CKALN ;CHECK IF FILE ALREADY ACCESSED ON LUN FCDEL:FCEXT:;C; BUILD AN I/O PACKET FOR FIND, ENTER, REMOVE, EXTEND, DELETE, READ "; ATTRIBUTES, AND WRITE ATTRIBUTES;R$FCPKT:: .IF DF M$$MUP5 .WORD $CKMOU ;CHECK IF VOLUME MOUNTED FOR THIS USER$ .ENDC# .WORD $BDPKT ;BUILD AN I/O PACKETA .WORD $CKLHD ;LOCK DOWN HEADER* .WORD $CKIWN ;INCREMENT WINDOW I/O COUNT .WORD $CKXIT ;EXIT;N ; EXPLICIT UNLOCK BLOCK FUNCTION;M .IF DF R$$LKL3UNLCK: .WORD $CKNLN ;CHECK IF FILE ACCESSED ON LUNL& .WORD $UNLXT ;SET REGISTERS AND EXIT .ENDC .IFFI;C; CONNECT TO PROCESS;V00W vFvtbl9FCCON: .WORD $CKDMO ;CHECK IF VOLUME MARKED FOR DISMOUNT7 .WORD $CKALN ;CHECK IF PROCESS ALREADY CONNECTED ON L  .IF DF X$$HDR. .WORD $CKHDR ;CHECK IF EXTERNAL HEADER VALID .ENDC ;X$$HDR5 .WORD $CKCON ;ADDRESS CHECK CONNECT BUFFER AND EXIT .WORD $CKLHD ;LOCK DOWN HEADER, .WORD $CKRLK ;INTERLOCK LUN USAGE AND EXIT;; DISCONNECT FROM PROCESSO;$7FCDIS: .WORD $CKNLN ;CHECK IF PROCESS CONNECTED ON LUN 0 .WORD $CKDIS ;CHECK BUFFER AND COPY PARAMETERS .WORD $CKLHD ;LOCK DOWN HEADER, .WORD $CKRLK ;INTERLOCK LUN USAGE AND EXIT;.; NETWORK CONTROL FUNCTION;A9FCNCT: .WORD $CKDMO ;CHECK IF VOLUME MARKED FOR DISMOUNTH .IF DF X$$HDR. .WORD $CKHDR ;CHECK IF EXTERNAL HEADER VALID .ENDC ; DF X$$HDR) .WORD $CKPRM ;COPY PARAMETERS TO PACKETD .WORD $CKLHD ;LOCK DOWN HEADER .WORD $CKXIT ;EXIT .ENDC;OF; TABLE OF SPECIAL FUNCTION CODES TO BE CHECKED BY SOFTWARE WRITE LOCK;$WLKTB:: ;DEVICE DEPENDENT CODESA! .WORD IO.SMD ;SET MEDIA DENSITYE! .WORD IO.EOF ;WRITE END OF FILE  .WORD IO.ERS ;ERASE TAPE# .WORD IO.DSE ;DATA SECURITY ERASEO ;DIAGNOSTIC CODESM% .WORD IO.WDH ;WRITE DATA AND HEADERR& .WORD IO.WTD ;WRITE TRACK DESCRIPTOR0 .WORD IO.TDD ;WRITE TRACK DESCRIPTOR DISPLACED' .WORD IO.CEW ;WRITE BLOCK ON CE TRACKH* .WORD 0 ;TERMINATOR FOR WRITE LOCK TABLE .END;OF; TABLE OF SPECIAL FUNCTION CODES TO BE CHECKED BY SOFTWARE WRITE LOCK;$WLKTB:: ;DEVICE DEPENDENT CODESA! .WORD IO.SMD ;SET MEDIA .TITLE QUEUEC .IDENT /10.00/L;H; COPYRIGHT (C) 1985"; BY DIGITAL EQUIPMENT CORPORATION; ALL RIGHTS RESERVED.;V<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;T; D. N. CUTLER 3-AUG-73O;E!; MODIFIED FOR RSX-11M-PLUS V2.1:;N; B. S. MCCARTHYP;A$; MODIFIED FOR RSX-11M-PLUS V3.0 BY:;Q; J. M. LAWLER; B. S. MCCARTHY; J. W. BERZLE;E; MODIFIED BY:;(; J. W. BERZLE 23-OCT-85 10.00;A; JWB167 -- ADD $QRMVA ROUTINED; ;.;L%; GENERAL QUEUE MANIPULATION ROUTINESL;U; MACRO LIBRARY CALLSL;I# .MCALL PKTDF$,PCBDF$,CLKDF$,TCBDF$F+ PKTDF$ ;DEFINE CLI COMMAND BLOCK OFFSETSR3 CLKDF$ ;DEFINE CLOCK QUEUE CONTROL BLOCK OFFSETSE, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSP;+!; **-$CLINS-CLOCK QUEUE INSERTION:;QG; THIS ROUTINE IS CALLED TO MAKE AN ENTRY IN THE CLOCK QUEUE. THE ENTRY(E; IS INSERTED SUCH THAT THE CLOCK QUEUE IS ORDERED IN ASCENDING TIME.>; THUS THE FRONT ENTRIES ARE MOST IMMINENT AND THE BACK LEAST.;R ; INPUTS:;1; R0=ADDRESS OF THE CLOCK QUEUE ENTRY CORE BLOCK.D#; R1=HIGH ORDER HALF OF DELTA TIME.K"; R2=LOW ORDER HALF OF DELTA TIME.; R4=REQUEST TYPE.5; R5=ADDRESS OF REQUESTING TCB OR REQUEST IDENTIFIER.N;A ; OUTPUTS:; @; THE CLOCK QUEUE ENTRY IS INSERTED IN THE CLOCK QUEUE ACCORDING$; TO THE TIME THAT IT WILL COME DUE.;T; NOTE:Q>; ON MULTIPROCESSOR SYSTEMS, A REQUEST WITH TYPE C.SYST!1000007; WILL BE EXECUTED ON A PRATICULAR UNIBUS RUN, WITH URMS<; SPECIFIED IN C.URM. TYPE C.CYST REQUESTS ON MP SYSTEMS ARE<; DEFAULTED TO RUN ON ANY UNIBUS RUN, WHICH IN PRACTICE WILL;; RESULT IN THE REQUEST EXECUTING ON THE CPU WHICH OWNS THEQ; CLOCK. ($CKURM)D;S>; A REQUEST WITH TYPE C.SCHD!100000 OR C.SSHT!100000 INDICATES?; THAT IT IS A SCHEDULE REQUEST WITH A DEFAULT NAMED DIRECTORY.;; THIS BIT IS SET IN THE DIRECTIVE CODE (E.G. DRMKT) AND INI=; TDSCH ON RESCHEDULE REQUESTS. C.NAM IS SET UP ACCORDINGLY. ;- .ENABL LSBC6$CLINS::CLR (R0)+ ;POINT TO TYPE FIELD AND CLEAR LINK MOVB R4,(R0)+ ;SET REQUEST TYPE INC R0 ;ADVANCE TO TCB ADDRESS, MOV R5,(R0)+ ;SET TCB OR REQUEST IDENTIFIER, ADD $ABTIM,R2 ;CALCULATE ABSOLUTE TIME WHEN ADC R1 ;REQUEST WILL COME DUE ) MOV R2,(R0)+ ;SET LOW ORDER PART OF TIMED* MOV R1,(R0) ;SET HIGH ORDER PART OF TIME/ MOV #$CLKHD,R2 ;POINT TO CLOCK QUEUE LIST HEADN/10$: MOV R2,R1 ;SAVE ADDRESS OF PREVIOUS ENTRY ( MOV (R1),R2 ;GET ADDRESS OF NEXT ENTRY00FvutkTADATADATADATADATADATA BEQ 20$ ;IF EQ END OF LIST/ CMP (R0),C.TIM+2(R2) ;COMPARE HIGH ORDER TIMESL BHI 10$ ;IF HI NOT THIS ENTRYU BLO 20$ ;IF LO ENTRY GOES HERE. CMP -2(R0),C.TIM(R2) ;COMPARE LOW ORDER TIMES! BHIS 10$ ;IF HIS NOT THIS ENTRYB+20$: SUB #8.,R0 ;BACK UP TO FRONT OF BLOCK - MOV R0,(R1) ;SET NEW NEXT IN PREVIOUS ENTRYD$ MOV R2,(R0) ;SET NEXT IN NEW ENTRY .IF DF N$$DIR, CMPB #C.SCHD,R4 ;PERIODIC SCHEDULE REQUEST? BEQ 25$ ;IF EQ, YESF* CMPB #C.SSHT,R4 ;SINGLE SHOT TASK REQUEST BNE 27$ ;IF NE, NO025$: CLRB C.NAM(R0) ;INDICATE UIC IN CLOCK BLOCK2 TST R4 ;IS THERE A CONTEXT BLOCK INSTEAD OF UIC? BPL 27$ ;IF PL, NO6 INCB C.NAM(R0) ;INDICATE CONTEXT BLOCK IN CLOCK BLOCK27$: ;REFERENCE LABEL .ENDC ;DF N$$DIR05 CMPB #C.SYST,R4 ;A SYSTEM ROUTINE REQUEST (DRIVER)?  BNE 30$ ;IF NE NOI5 MOV KINAR5,C.AR5(R0) ;SAVE KERNEL INSTR APR5 MAPPINGF .IF DF M$$PRO* TST R4 ;IS THIS A URM SPECIFIC REQUEST ?' BMI 30$ ;IF EQ YES, LEAVE C.URM ALONEG1 MOV #177777,C.URM(R0) ;DEFAULT TO ANY UNIBUS RUNR .ENDC ; DF M$$PRO30$: RETURN ; ;+; **-$CLRMV-CLOCK QUEUE REMOVALO8; **-$CLRSM-CLOCK QUEUE REMOVAL - SELECTIVE MARK TIME ;XJ; THIS ROUTINE IS CALLED TO REMOVE ALL ENTRIES FOR A SPECIFIED TCB ADDRESSF; AND REQUEST TYPE FROM THE CLOCK QUEUE, OR SELECTIVELY BY EFN OR AST #; ADDRESS IF ENTRY AT $CLRSM. L ; ; INPUTS:;F-; R1=EFN NUMBER OR 0 (IF ENTRY AT $CLRSM). R.; R2=AST ADDRESS OR 0 (IF ENTRY AT $CLRSM). ; R4=REQUEST TYPE.4; R5=ADDRESS OF REQUESTING TCB OR SYSTEM SUBROUTINE.; ; OUTPUTS:; @; ALL OF THE MATCHING ENTRIES FOR THE SPECIFIED TCB ADDRESS ARE B; REMOVED FROM THE CLOCK QUEUE. IF THE REQUEST TYPE IS NOT 'C.SYST4; THEN THE CLOCK QUEUE ENTRY CORE BLOCK IS RELEASED.;-5$CLRMV::CLR R1 ;MATCH ON ANY EVENT FLAG (MKTM ONLY) O/ CLR R2 ;MATCH ON ANY AST ADDRESS (MKTM ONLY) 8$CLRSM::MOV #$CLKHD,R0 ;POINT TO CLOCK QUEUE LIST HEAD 140$: MOV R0,R3 ;SAVE ADDRESS OF PREVIOUS ENTRY L( MOV (R3),R0 ;GET ADDRESS OF NEXT ENTRY BEQ 30$ ;IF EQ END OF LIST' CMPB R4,C.RQT(R0) ;REQUEST TYPE MATCH?T BNE 40$ ;IF NE NOO: CMP R5,C.TCB(R0) ;TCB OR SYSTEM SUBROUTINE ADDRESS MATCH? BNE 40$ ;IF NE NOT TST R4 ;MARK TIME ENTRY? C BNE 60$ ;IF NE NO C TSTB R1 ;EFN SPECIFIED? L BEQ 50$ ;IF EQ NO % CMPB R1,C.EFN(R0) ;MATCH ON EFN? A" BEQ 55$ ;IF EQ YES, REMOVE ENTRY# TST R2 ;AST ADDRESS SPECIFIED? E BEQ 40$ ;IGNORE PACKET 50$: TST R2 ;AST SPECIFIED?  BEQ 55$ ;IF EQ NOA$ CMP R2,C.AST(R0) ;MATCH ON AST?  BNE 40$ ;IF NE NO R#55$: MOV R2,-(SP) ;SAVE AST ADDRESS$ MOV R1,-(SP) ;SAVE EVENT FLAG- MOV R3,-(SP) ;SAVE ADDRESS OF PREVIOUS ENTRY4. MOV C.DST(R0),R3 ;GET EVENT FLAG MASK ADDRESS MOV T.PCB(R5),R4 ;GET TASK PCB1 .IF DF X$$HDR6 MOV KISAR6,-(SP) ;SAVE MAPPING FOR POSSIBLE XTRNL HDR) MOV P.HDR(R4),-(SP) ;SAVE HEADER ADDRESSE+ BNE 57$ ;IF EQ HEADER IS RESIDENT IN POOLB- MOV P.REL(R4),KISAR6 ;MAP TO EXTERNAL HEADERP4 MOV #140000,(SP) ;REPLACE VIRTUAL ADDRESS OF HEADER057$: MOV (SP)+,R4 ;GET VIRTUAL ADDRESS OF HEADER .IFF ; DF X$$HDRS MOV P.HDR(R4),R4 ;GET HEADERV .IFTF ; DF X$$HDR .IF DF G$$GEF' CALL $DEAGF ;DEACCESS IF GROUP GLOBALT .ENDC ; DF G$$GEF .IFT ; DF X$$HDRS+ MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPINGS .ENDC ; DF X$$HDR0 MOV (SP)+,R3 ;RESTORE ADDRESS OF PREVIOUS ENTRY! MOV (SP)+,R1 ;RESTORE EVENT FLAGS" MOV (SP)+,R2 ;RESTORE AST ADDRESS3 MOV (R3),R0 ;RESTORE ADDRESS OF CURRENT CLOCK BLKE& CLR R4 ;RESTORE CURRENT REQUEST TYPE-60$: MOV (R0),(R3) ;REMOVE ENTRY FROM LIST 5 CMPB #C.SYST,C.RQT(R0) ;SYSTEM SUBROUTINE REQUEST? ; BEQ 40$ ;IF EQ YES CONTINUE) MOV R2,-(SP) ;SAVE NECESSARY REGISTERS  MOV R1,-(SP) ; 5 CALL $DCLKA ;DEALLOCATE CORE (MAY HAVE ACNTING UAB)E( MOV (SP)+,R1 ;RESTORE SAVED REGISTERS  MOV (SP)+,R2 ;  BR $CLRSM ;GO AGAIN M .DSABL LSB ;+1; **-$QINSF-QUEUE INSERTION AT END OF LIST (FIFO)3;0A; THIS ROUTINE IS CALLED TO MAKE AN ENTRY IN A FIRST IN FIRST OUT 00Fvvtbl3; LIST. THE ENTRY IS LINKED TO THE END OF THE LIST.I; ; INPUTS:C;S&; R0=ADDRESS OF THE TWO WORD LISTHEAD.); R1=ADDRESS OF THE ENTRY TO BE INSERTED.,;P ; OUTPUTS:;R.; THE ENTRY IS LINKED TO THE END OF THE QUEUE.; &; R0 AND R1 ARE PRESERVED ACROSS CALL.;- .ENABL LSBS7$QINSF::MOV 2(R0),R2 ;GET ADDRESS OF LAST ENTRY IN LIST  BR 20$ ;FINISH IN COMMON CODE ;+'; **-$QINSP-QUEUE INSERTION BY PRIORITYI;(A; THIS ROUTINE IS CALLED TO INSERT AN ENTRY IN A PRIORITY ORDERED ?; LIST. THE LIST IS SEARCHED UNTIL AN ENTRY IS FOUND THAT HAS A;; LOWER PRIORITY OR THE END OF THE LIST IS REACHED. THE NEW >; ENTRY IS THEN LINKED INTO THE LIST AT THE APPROPRIATE POINT.; ; INPUTS:N; &; R0=ADDRESS OF THE TWO WORD LISTHEAD.); R1=ADDRESS OF THE ENTRY TO BE INSERTED. ;S;Q ; OUTPUTS:;,0; THE ENTRY IS LINKED INTO THE LIST BY PRIORITY.;I&; R0 AND R1 ARE PRESERVED ACROSS CALL.;-,$QINSP::MOV R0,R3 ;COPY ADDRESS OF LISTHEAD.10$: MOV R3,R2 ;SAVE ADDRESS OF CURRENT ENTRY( MOV (R2),R3 ;GET ADDRESS OF NEXT ENTRY BEQ 20$ ;IF EQ END OF LIST< CMPB T.PRI(R1),T.PRI(R3) ;NEW ENTRY LOWER OR SAME PRIORITY? BLOS 10$ ;IF LOS YES( MOV R3,(R1) ;LINK CURRENT TO NEW ENTRY BR 30$ ;*20$: MOV R1,2(R0) ;SET ADDRESS OF NEW LAST$ CLR (R1) ;CLEAR LINK TO NEXT ENTRY-30$: MOV R1,(R2) ;LINK NEW TO PREVIOUS ENTRY RETURN ; .DSABL LSB ;+ R,; **-$QINSB-QUEUE INSERTION AT BEGINNING ; A; THIS ROUTINE IS CALLED TO INSERT A QUEUE ENTRY INTO A QUEUE AT 2; THE BEGINNING. T ; ; INPUTS: ; *; R0=ADDRESS OF THE TWO WORD LISTHEAD. -; R1=ADDRESS OF THE ENTRY TO BE INSERTED. ) ; ; OUTPUTS: ; 4; THE ENTRY IS LINKED INTO THE QUEUE AT THE FRONT. ; #; ALL REGISTERS ARE PRESERVED. ;- U /$QINSB::MOV (R0),(R1) ;LINK OLD FIRST TO NEW R& BNE 5$ ;IF NE THIS IS NOT NEW LAST & MOV R1,2(R0) ;SET NEW LAST POINTER *5$: MOV R1,(R0) ;SET NEW FIRST POINTER  RETURN N ;+2; **-$QCNTP-QUEUE CONTROL PACKET TO CLI DISPATCHER; B; THIS ROUTINE QUEUES SPECIAL PACKETS TO THE CLI DISPATCHER. THESE@; PACKETS CAN BE "BYE" COMMANDS BEING FORCED ON A TERMINAL LINE,D; OR A CONTROL PACKET WITH NO COMMAND TEXT SUCH AS A PROMPT REQUEST.;R ; INPUTS: ;>; R1=STATUS MASK FOR PACKET, OR ZERO TO GENERATE A BYE COMMAND;; R2=UCB ADDRESS OF TERMINAL COMMAND IS BEING GENERATED FOR(; ; OUTPUTS:;O2; C=0 PACKET WAS SUCCESSFULLY QUEUED TO DISPATCHER2; C=1 PACKET MAY NOT HAVE BEEN SUCCESSFULLY QUEUED9; Z=0 IF THERE WAS A POOL OR SEC POOL ALLOCATION FAILUREE9; Z=1 IF THE DISPATCHER WAS ALREADY ACTIVE (THIS WILL BEA4; THE NORMAL RETURN SINCE MCR... IS ALWAYS ACTIVE);R;-*$QCNTP::MOV KISAR6,-(SP) ;SAVE OLD MAPPING MOV R1,-(SP) ;SAVE STATUS WORD MOV R2,-(SP) ;SAVE UCB ADDRESS - MOV #1,R1 ;NEED ONE BLOCK OF SECONDARY POOLS CALL $ALSEC ;ALLOCATE IT BCS 40$ ;IF CS, NO SEC POOL: MOV R0,KISAR6 ;MAP NEW BLOCKU< MOV #C.CTCB+140000,R2 ;POINT TO TCB FIELD IN SEC POOL BLOCK MOV $MCRPT,(R2)+ ;TCB ADDRESS MOV (SP)+,(R2)+ ;UCB ADDRESSO CLR (R2)+ ;NO TEXT# MOV (SP),(R2)+ ;INSERT STATUS WORDI( CLR (R2)+ ;INIT STARTING RETURN OFFSET/ MOV #433,(R2)+ ;SET TERMINATOR AND BLOCK COUNTA" TST (SP)+ ;IS THIS A BYE COMMAND BNE 20$ ;IF NE NOR5 MOV #3,@#C.CCT+140000 ;SET CHARACTER COUNT FOR "BYE" 6 BIS #CC.MCR,@#C.CSTS+140000 ;FORCE BYE COMMAND TO MCR MOV #"BY,(R2)+ ;MOVE IN "BYE" MOVB #'E,(R2)+ ;A"20$: MOVB #15,(R2)+ ;END WITH A CR BR QUEPKT ;GO TO COMMON CODE!40$: CMP (SP)+,(SP)+ ;CLEAN STACKE* COM (SP)+ ;SET C, CLEAR Z, AND POP STACK RETURN ;;+%; **-$QCPKT-QUEUE COMMAND LINE PACKET2<; **-$QCLNR-QUEUE COMMAND LINE PACKET WITH NO REQUEST OF CLI; ?; THESE ROUTINES QUEUE THE SECONDARY POOL COMMAND PACKET TO THEIA; APPROPRIATE CLI, AND OPTIONALLY REQUEST IT TO RUN. THEY COMMANDB8; PACKET IN SECONDARY POOL MUST BE COMPLETELY FILLED IN.;B;R ; INPUTS:N;YB; R1=COMMAND PACKET ADDRESS IN SECONDARY POOL (APR BIAS 00F%vutkTADATADATADATADATADATATO MAP IT); ; OUTPUTS:;OD; C=0 IF THE CLI WAS SUCCESSFULLY STARTED AFTER QUEUEING THE COMMAND7; C=1 IF THE CLI MAY NOT HAVE BEEN SUCCESSFULLY STARTEDN+; Z=0 IF A POOL ALLOCATION FAILURE OCCUREDE$; Z=1 IF THE CLI WAS ALREADY ACTIVE;S>; NO STATUS IS RETURNED IF ENTRY WAS AT THE $QCLNR ENTRY POINT1; SINCE THE QUEUEING OPERATION ITSELF CANNOT FAILE;O;- .ENABL LSB ,$QCLNR::CLR R2 ;FLAG TO INDICATE NO REQUEST BR 10$ ;$QCPKT::MOV SP,R2 ;NON ZERO+10$: MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGI! MOV R1,KISAR6 ;MAP COMMAND BLOCKE1QUEPKT: MOV (SP)+,R3 ;GET ORIGINAL KISAR6 MAPPINGM< MOV @#C.CTCB+140000,-(SP) ;GET TCB ADDRESS TO REQUEST LATER! MOV (SP),-(SP) ;COPY TCB ADDRESSR TST R2 ;WILL CLI BE REQUESTED  BNE 15$ ;IF NE YES CLR 2(SP) ;DO NOT REQUEST CLIS,15$: MOV @#C.CUCB+140000,R0 ;GET UCB ADDRESS CALL $MPLND ;FOLLOW REDIRECT( BIT #DV.TTY,U.CW1(R0) ;IS IT A TERMINAL BNE 20$ ;IF NE YES- MOVB @#C.CBLK+140000,R1 ;GET LENGTH OF BLOCKO MOV KISAR6,R0 ;ADDRESS OF BLOCK MOV R3,KISAR6 ;RESTORE MAPPING  CMP (SP)+,(SP)+ ;CLEAN STACK)5 CALLR $DESEC ;DEALLOCATE PACKET AND FORGET ABOUT IT0)20$: MOV KISAR6,R1 ;GET ADDRESS OF PACKETM MOV R3,KISAR6 ;RESTORE MAPPING .IF DF V$$TRM MOV (R0),R2 ;GET DCB ADDRESS- CMP D.NAM(R2),#"VT ;IS IT A VIRTUAL TERMINALC BNE 30$ ;IF NE NOU0 CMP $MCRPT,(SP) ;IS COMMAND GOING TO DISPATCHER BNE 30$ ;IF NE NOI9 INCB U.OCNT(R0) ;INCREMENT USE COUNT OF VIRTUAL TERMINAL130$: .ENDC0 MOV #$CLICQ,R0 ;POINT TO COMMAND QUEUE LISTHEAD CALL $QSPIF ;INSERT IN QUEUE% MOV (SP)+,R0 ;GET TCB ADDRESS OF CLIE .IF DF A$$CLI+ CMP $MCRPT,R0 ;COMMAND GOING TO DISPATCHERS6 BEQ 40$ ;IF EQ YES, OPTIMIZE BY NOT CHECKING FOR AST7 CALL $DCAST ;DECLARE COMMAND ARRIVAL AST IF SPECIFIEDR! BCS 40$ ;IF CS, NO AST DECLARED/ CLR (SP) ;DO NOT REQUEST CLI SINCE IT GOT ASTD .ENDC ;A$$CLI140$: MOV (SP)+,R0 ;GET TCB ADDR OF CLI TO REQUESTS BEQ 50$ ;IF EQ, NO REQUEST CALLR $EXRQN ;REQUEST CLII50$: RETURN ;O .DSABL LSBI;+A; **-$QMCRL-QUEUE COMMAND LINE TO THE CLI OF A SPECIFIED TERMINAL B; **-$QMCR -QUEUE COMMAND LINE TO MCR REQARDLESS OF TERMINAL'S CLI/; **-$QCLIL-QUEUE COMMAND LINE TO SPECIFIED CLII;FD; THESE ROUTINES QUEUE COMMAND BUFFERS TO A CLI TASK FOR PROCESSING.<; THEY ONLY EXIST TO PROVIDE A COMPATABLE INTERFACE FOR CODEF; THAT HAS NOT BEEN CHANGED TO DEAL WITH THE NEW COMMAND PACKET FORMATE; AND THE USE OF SECONDARY POOL INSTEAD OF SYSTEM POOL. THEY PRESERVEUK; THE OLD INTERFACE BY ACCEPTING A STANDARD 84. BYTE PACKET IN SYSTEM POOL,E3; ALLOCATING SECONDARY POOL AND COPYING THE COMMANDUF; TEXT INTO IT. THE SYSTEM POOL IS DEALLOCATED, AND THE SECONDARY POOL:; PACKET USED INSTEAD. THIS ADDS CONSIDERABLE OVERHEAD, SO4; THESE ROUTINES SHOULD NOT BE USED BY ANY NEW CODE.;X ; INPUTS:I;A"; R0=CLI TCB ADDRESS ($QCLIL ONLY)-; R1=ADDRESS OF COMMAND PACKET IN SYSTEM POOLM;D ; OUTPUTS:;=; C=0 IF CLI WAS SUCCESSFULLY REQUESTED WITH THE COMMAND LINEE1; C=1 IF THE REQUEST MAY NOT HAVE BEEN SUCCESSFUL ?; Z=0 IF A SYSTEM OR SECONDARY POOL ALLOCATION FAILURE OCCURED ; Z=1 IF THE CLI ALREADY ACTIVE; ;- .ENABL LSBD($QMCRL::CLR -(SP) ;GO TO TERMINAL'S CLI BR 10$ ;'$QMCR:: MOV #CC.MCR,-(SP) ;FORCE TO MCR910$: MOV $MCRPT,-(SP) ;GIVE COMMAND TO COMMAND DISPATCHER BR 20$ ;2$QCLIL::CMP $MCRPT,R0 ;IS COMMAND INTENDED FOR MCR BEQ $QMCR ;IF EQ YES! CLR -(SP) ;GO TO TERMINAL'S CLI ! MOV R0,-(SP) ;TCB ADDRESS OF CLII520$: MOV 2(R1),-(SP) ;GET UCB ADDR OF SOURCE TERMINAL  BIT #1,(SP) ;PROMPT REQUEST??T BEQ 40$ ;IF EQ NOA MOV R1,R0 ;COPY PACKET ADDRESS! MOV #4,R1 ;GET LENGTH OF PACKET 30$: CALL $DEACB ;DEALLOCATE IT MOV (SP)+,R2 ;GET UCB ADDRESS BIC #1,R2 ;REMOVE ODD BIT  CMP (SP)+,(SP)+ ;CLEAN STACK,# MOV #CC.PRM,R1 ;SET PROMPT REQUESTC1 JMP $QCNTP ;CONVERT IT TO PROMPT REQUEST PACKET )40$: MOV R1,-(SP) ;SAVE ADDRESS OF PACKETCC MOV #/100,R1 ;GET NUMBER OF BLOCKS OF SEC POOL& CALL $ALSEC ;ALLOCATE SECONDARY POOL BCC 50$ ;IF CC, 00F-vvtblSUCCESS)0 MOV (SP)+,R0 ;GET ADDRESS OF SYSTEM POOL PACKET- MOV #M$$CRB,R1 ;LENGTH OF SYSTEM POOL PACKETN2 BR 30$ ;ISSUE A PROMPT FOR LACK OF ANYTHING ELSE(50$: MOV KISAR6,R3 ;SAVE CURRENT MAPPING( MOV R0,KISAR6 ;MAP SECONDARY POOL BLOCK. MOV (SP)+,R0 ;GET VALUE OFF STACK TEMPORARILY< MOV #C.CUCB+140000,R2 ;POINT TO UCB FIELD IN SECONDARY POOL$ MOV (SP)+,(R2)+ ;INSERT UCB ADDRESS% MOV (SP)+,-4(R2) ;INSERT TCB ADDRESS ! CLR (R2)+ ;INIT CHARACTER COUNTC MOV (SP)+,(R2)+ ;STATUS BITSC) CLR (R2)+ ;INIT STARTING OFFSET OF TEXTA INC R2 ;SKIP TERMINATOR FIELDV0 MOVB R1,(R2)+ ;INSERT NUMBER OF SEC POOL BLOCKS4 MOV R0,-(SP) ;PUT SYSTEM POOL ADDRESS BACK ON STACK/ CMP (R0)+,(R0)+ ;POINT TO COMMAND TEXT IN POOL;460$: MOVB (R0)+,(R2) ;COPY A CHARACTER INTO SEC POOL' CMPB #15,(R2) ;IS IT A CARRIAGE RETURN2 BEQ 70$ ;IF EQ YES CMPB #33,(R2) ;IS IT AN ESCAPE+ BEQ 70$ ;IF EQ YES INC R2 ;ADVANCE POINTERC( INC @#C.CCT+140000 ;COUNT THE CHARACTER BR 60$ ;NEXT CHARACTER-70$: MOVB (R2),@#C.CTR+140000 ;SET TERMINATORF& MOVB #15,(R2) ;FORCE A CR TO END TEXT) MOV (SP)+,R0 ;GET ADDRESS OF POOL PACKET  MOV #M$$CRB,R1 ;LENGTHT) MOV R3,-(SP) ;SAVE ORIGINAL KISAR6 VALUE0 CALL $DEACB ;DEALLOCATE IT1 MOV SP,R2 ;INSURE NON-ZERO TO FORCE CLI REQUESTI JMP QUEPKT ;GO TO COMMON CODEI .DSABL LSBR;+>; **-$SCMDQ-SEARCH COMMAND QUEUE FOR BUFFER FOR SPECIFIED TASK6; **-$SRCCQ-SEARCH QUEUE FOR BUFFER FOR SPECIFIED TASK=; **-$SRUCB-SEARCH QUEUE FOR BUFFER FROM A SPECIFIED TERMINALVG; **-$SRCQ1-SEARCH QUEUE FROM MIDDLE FOR PACKET WITH SPECIFIED TCB ADDR G; **-$SRUC1-SEARCH QUEUE FROM MIDDLE FOR PACKET WITH SPECIFIED UCB ADDRT;MG; THESE ROUTINES SEARCH A QUEUE IN SECONDARY POOL FOR SPECIFIC PACKETS.MB; THEY ARE MAINLY INTENDED FOR USE ON THE QUEUE CONTAINING COMMANDB; PACKETS, THAT HAVE A TCB ADDRESS AT OFFSET 2, AND A TERMINAL UCBG; ADDRESS AT OFFSET 4. THE LISTHEAD MUST BE IN EXEC SPACE IF THE SEARCHP?; STARTS THERE. THE $SRCQ1 AND $SRUC1 ROUTINES START THE SEARCHDD; AT ANY PACKET IN THE QUEUE. THIS PACKET DOES NOT HAVE TO BE MAPPEDC; WHEN THE ROUTINE IS CALLED. NOTE THAT FOR ANY ROUTINE, THE PACKETS ; WILL NOT BE DEQUEUED IF FOUND.;N ; INPUTS: /; R0=LISTHEAD ADDRESS (FOR $SRCCQ, $SRUCB ONLY) E; R0=APR VALUE TO MAP PACKET TO START SEARCH AT ($SRCQ1, $SRUC1 ONLY)K#; R5=TCB OR UCB ADDRESS TO LOOK FORT; ; OUTPUTS:;U3; C=1 IF THERE IS NO ENTRY IN THE LIST THAT MATCHESE; C=0 IF THE ENTRY IS FOUNDR$; R0=ADDRESS OF BUFFER THAT MATCHES;S;- ASSUME C.CTCB,2 ASSUME C.CUCB,4 .ENABL LSBE4$SRUCB::MOV (R0),R0 ;POINT TO FIRST ELEMENT IN LIST7$SRUC1::MOV #4,R1 ;GET OFFSET TO UCB ADDRESS IN PACKETB BR 10$ ;GO TO COMMON CODEN7$SCMDQ::MOV #$CLICQ,R0 ;POINT TO COMMAND QUEUE LISTHEAD4$SRCCQ::MOV (R0),R0 ;POINT TO FIRST ELEMENT IN LIST7$SRCQ1::MOV #2,R1 ;GET OFFSET TO TCB ADDRESS IN PACKET +10$: MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGI MOV R0,KISAR6 ;MAP FIRST ENTRYF BEQ 40$ ;IF EQ, LIST IS EMPTYS)20$: CMP R5,140000(R1) ;IS THIS THE ENTRY  BEQ 50$ ;IF EQ YES$ MOV @#140000,KISAR6 ;MAP NEXT BLOCK BNE 20$ ;IF NE, MORE IN LIST40$: SEC ;NOT FOUND (50$: MOV KISAR6,R0 ;GET ADDRESS OF ENTRY" MOV (SP)+,KISAR6 ;RESTORE MAPPING RETURNC .DSABL LSBO L;+,; **-$QRMVF-QUEUE REMOVAL FROM FRONT OF LIST;T@; THIS ROUTINE IS CALLED TO REMOVE THE NEXT (FRONT) ENTRY FROM A@; LIST. THE LIST ORGANIZATION MAY BE EITHER FIFO OR BY PRIORITY.;I ; INPUTS:;Q&; R0=ADDRESS OF THE TWO WORD LISTHEAD.;4 ; OUTPUTS:;I*; C=1 IF THERE ARE NO ENTRIES IN THE LIST.1; C=0 IF THE NEXT ENTRY IS REMOVED FROM THE LIST.E#; R1=ADDRESS OF THE ENTRY REMOVED.:;V; R0 IS PRESERVED ACROSS CALL.;- .ENABL LSB ,$QRMVF::MOV R0,R2 ;COPY ADDRESS OF LISTHEAD( MOV (R2),R3 ;GET ADDRESS OF NEXT ENTRY" BNE 30$ ;IF NE LIST HAS AN ENTRY10$: SEC ;NO ENTRIES IN LIST RETURN ; ;+*; **-$QRMVA-QUEUE REMOVAL BY BLOCK ADDRESS;IB; THIS ROUTINE IS CALLED TO REMOVE A PARTICULAR BLOCK FROM A LIST.,; LIST ORGANIZATION MAY BE FIFO OR PRIORITY.;E ; INPUTS: ;T00F5vutkTADATADATADATADATADATA"; R0=ADDRESS OF TWO WORD LISTHEAD.&; R1=ADDRESS OF THE TCB TO SEARCH FOR.;T ; OUTPUTS:;D@; C=1 IF THERE IS NO ENTRY IN THE LIST THAT MATCHES THE ADDRESS.3; C=0 IF A MATCHING ENTRY IS REMOVED FROM THE LIST. #; R1=ADDRESS OF THE ENTRY REMOVED. ; "; R0 IS PRESERVED ACROSS THE CALL.;-,$QRMVA::MOV R0,R3 ;COPY ADDRESS OF LISTHEAD.15$: MOV R3,R2 ;SAVE ADDRESS OF CURRENT ENTRY) MOV (R2),R3 ;GET ADDRESS OF NEXT ENNTRYM BEQ 10$ ;IF EQ END OF LIST CMP R1,R3 ;ADDRESS MATCH ? BEQ 30$ ;IF EQ YES BR 15$ ;GO AGAIN;+(; **-$QRMVT-QUEUE REMOVAL BY TCB ADDRESS;TB; THIS ROUTINE IS CALLED TO REMOVE THE NEXT ENTRY FROM A LIST THAT?; MATCHES A SPECIFIED TCB ADDRESS. THE LIST ORGANIZATION MAY BET; EITHER FIFO OR BY PRIORITY.R;VH; NOTE: IN ADDITION TO MATCHING R1 WITH THE ELEMENTS ON THE LIST, R1 IS>; ALSO CHECKED AGAINST OFFSET 4 IN EACH ELEMENT ON THE LIST. ;TJ; FOR EXAMPLE, R1 COULD BE SET TO A TCB AND THE LISTHEAD COULD POINT TO A K; LIST OF I/O PACKETS. THE PACKET THAT GETS DEQUEUED IS THE ONE WHERE THE +D; TCB IN R1 MATCHES THE TCB IN THE I/O PACKET (I.TCB AT OFFSET 4). ;TD; THE $DETRG ROUTINE ALSO USES THIS FEATURE WHEN REMOVING ATTACHMENTD; DESCRIPTORS. SEE $DETRG ROUTINE IN MODULE PLSUB FOR MORE DETAILS.; ; INPUTS: ;I%; R0=ADDRESS OF THE TWO WORD LISTEAD.N&; R1=ADDRESS OF THE TCB TO SEARCH FOR.;F ; OUTPUTS:;LD; C=1 IF THERE IS NO ENTRY IN THE LIST THAT MATCHES THE TCB ADDRESS.3; C=0 IF A MATCHING ENTRY IS REMOVED FROM THE LIST..#; R1=ADDRESS OF THE ENTRY REMOVED.E;E; R0 IS PRESERVED ACROSS CALL.;- ASSUME ,C.TCB ASSUME ,C.TCB ASSUME I.TCB,C.TCB,$QRMVT::MOV R0,R3 ;COPY ADDRESS OF LISTHEAD.20$: MOV R3,R2 ;SAVE ADDRESS OF CURRENT ENTRY( MOV (R2),R3 ;GET ADDRESS OF NEXT ENTRY BEQ 10$ ;IF EQ END OF LIST" CMP R1,R3 ;MATCH ON TCB ADDRESS? BEQ 30$ ;IF EQ YES( CMP R1,C.TCB(R3) ;MATCHING TCB ADDRESS? BNE 20$ ;IF NE NOR!30$: MOV (R3),(R2) ;CLOSE UP LISTR BNE 40$ ;IF NE NO NEW LAST& MOV R2,2(R0) ;SET ADDRESS OF NEW LAST-40$: MOV R3,R1 ;SET ADDRESS OF ENTRY REMOVEDP CLC ;SUCCESS RETURN ;B .DSABL LSBB A;+:; **-$QSPIB-QUEUE INSERTION AT BEGINNING IN SECONDARY POOL;?; THIS ROUTINE IS CALLED TO INSERT AN ENTRY INTO A QUEUE AT THETI; BEGINNING. THE QUEUE MUST BE IN SECONDARY POOL, WITH A STANDARD 2 WORD &; LISTHEAD IN THE SYSTEM POOL OR SYSCM;, ; INPUTS:M;H-; R0=ADDRESS OF 2 WORD LISTHEAD IN EXEC SPACEVF; R1=ADDRESS OF ENTRY TO BE INSERTED. ENTRY MUST BE IN SECONDARY POOL:; THIS VALUE WILL BE LOADED INTO AN APR TO MAP THE ENTRY.; ;O ; OUTPUTS:;U0; THE ENTRY IS INSERTED IN THE LIST AT THE FRONT;I; ALL REGISTERS ARE PRESERVEDI;E;- $QSPIB:: H R .IF DF P$$OOL 6 MOV (R0),-(SP) ;SAVE ADDRESS OF CURRENT FIRST IN LIST% MOV KISAR6,-(SP) ;SAVE APR 6 MAPPING ( MOV R1,KISAR6 ;MAP ENTRY TO BE INSERTED; MOV 2(SP),@#140000 ;LINK NEW ENTRY TO PREVIOUS FIRST ENTRYS+ MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPINGO& TST (SP)+ ;WAS IT NEW LAST IN LIST ?& BNE 10$ ;IF NE, THIS IS NOT NEW LAST# MOV R1,2(R0) ;SET NEW LAST POINTER (10$: MOV R1,(R0) ;SET NEW FIRST POINTER RETURNT E;+1; **-$QSPIF-QUEUE INSERTION AT END OF LIST (FIFO);PA; THIS ROUTINE IS CALLED TO MAKE AN ENTRY IN A FIRST IN FIRST OUTC4; LIST. THE ENTRY IS LINKED TO THE END OF THE LIST.E; THE LIST MUST BE IN SECONDARY POOL, WITH A STANDARD 2 WORD LISTHEADL; IN THE SYSTEM POOL OR SYSCM.;R ; INPUTS:P;K; R0=ADDRESS OF 2 WORD LISTHEADE; R1=ADDRESS OF ENTRY TO BE INSERTED. THIS VALUE WILL BE PUT INTO ANE; APR TO MAP THE ENTRY.;W ; OUTPUTS:;-; THE ENTRY IS LINKED TO THE END OF THE QUEUER;; ALL REGISTERS ARE PRESERVEDT; ;- O .IFTF O$QSPIF:: S .IFTE  TST (R0) ;IS LIST EMPTYA BEQ $QSPIB ;IF EQ YESI MOV KISAR6,-(SP) ;SAVE MAPPINGN, MOV 2(R0),KISAR6 ;MAP TO LAST BLOCK IN LIST) MOV R1,@#140000 ;LINK NEW BLOCK AFTER IT MOV R1,KISAR6 ;MAP TO NEW BLOCK* CLR @#140000 ;CLEAR LINK WORD TO END LIST+ MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPIN00F=vvtblGT) MOV R1,2(R0) ;UPDATE END OF LIST POINTERA RETURNR ;+,; **-$QSPRF-QUEUE REMOVAL FROM FRONT OF LIST;O@; THIS ROUTINE IS CALLED TO REMOVE THE NEXT (FRONT) ENTRY FROM AB; LIST. THE LIST MUST BE IN SECONDARY POOL WITH A STANDARD 2 WORD"; LISTHEAD IN SYSTEM POOL OR SYSCM;S; INPUT:;&; R0=ADDRESS OF LISTHEAD IN EXEC SPACE;T ; OUTPUTS:;0); C=1 IF THERE ARE NO ENTRIES IN THE LIST6; R1=0N1; C=0 IF THE NEXT ENTRY IS REMOVED FROM THE LIST.T;; R1=ADDRESS OF ENTRY REMOVED. THIS ADDRESS SHOULD BE PUT ; IN AN APR TO MAP THE ENTRY.T;R ; ALL OTHER REGISTERS PRESERVED;R;- T .IFTF O$QSPRF:: I .IFTA D SEC ;ASSUME EMPTY LIST 1 MOV (R0),R1 ;GET ADDRESS OF FIRST BLOCK IN LISTY BEQ 20$ ;IF EQ, EMPTY LIST$ MOV KISAR6,-(SP) ;SAVE APR6 MAPPING* MOV R1,KISAR6 ;MAP TO FIRST BLOCK IN LIST- MOV @#140000,R1 ;GET POINTER TO NEXT IN LISTA* MOV (SP),KISAR6 ;RESTORE PREVIOUS MAPPING- MOV (R0),(SP) ;SAVE ADDRESS OF FIRST IN LIST # MOV R1,(R0) ;UNLINK FIRST ELEMENTD' BNE 10$ ;IF NE, THERE IS MORE IN LISTP) MOV R0,2(R0) ;UPDATE END OF LIST POINTERE210$: MOV (SP)+,R1 ;SET ADDRESS OF FIRST FOR RETURN CLC ;AN ELEMENT WAS REMOVED 20$: RETURN1 G;+4; **-$QSPIP-QUEUE INSERTION IN SEC. POOL BY PRIORITY;T9; THIS ROUTINE IS CALLED TO INSERT A SECONDARY POOL BLOCK $; INTO A LIST BY ITS PRIORITY FIELD.;; ; INPUTS: ;N#; R0=LISTHEAD ADDRESS IN EXEC SPACER+; R4=OFFSET INTO BLOCK OF LINKWORD + 140000E$; KISAR6 MAPS THE BLOCK TO BE QUEUED;N ; OUTPUTS:;D; NONE.$;I; R0-R3 ARE DESTROYED.S;-0$QSPIP::MOV KISAR6,-(SP) ;SAVE BIAS OF NEW ENTRY4 MOVB 140000+T.PRI,-(SP) ;SAVE PRIORITY OF NEW ENTRY%10$: MOV R0,R2 ;SAVE ADDRESS OF LAST MOV R1,R3 ;SAVE BIAS OF LAST( MOV R4,R0 ;GET VIRTUAL ADDRESS OF NEXT MOV (R2),R1 ;GET BIAS OF NEXTA BEQ 20$ ;IF EQ END OF LIST! MOV R1,KISAR6 ;MAP TO NEXT BLOCKS& CMPB 140000+T.PRI,(SP) ;BELONG HERE ? BHIS 10$ ;IF HIS NOB)20$: TST (SP)+ ;DUMP PRIORITY FROM STACKH# MOV R3,KISAR6 ;REMAP TO LAST ENTRY! MOV (SP),(R2) ;LINK TO NEW ENTRYR& MOV (SP)+,KISAR6 ;RE-MAP TO NEW ENTRY! MOV R1,(R4) ;STUFF LINK POINTER0 RETURN ;;;+&; **-$GTSPK-GET SECONDARY POOL PACKET.;DC; THIS ROUTINE IS CALLED TO DEQUEUE A SPECIFIC PACKET FROM A QUEUE.U;A ; INPUTS:E;'; R0=ADDRESS OF LISTHEAD IN EXEC SPACE.$"; R1=APR VALUE FOR DESIRED PACKET.;A ; OUTPUTS:;S#; C=1 IF NO PACKET CAN BE DEQUEUED.E,; C=0 IF A PACKET WAS SUCCESSFULLY DEQUEUED.;; R1=ADDRESS OF THE ENTRY REMOVED. THIS ADDRESS SHOULD BE2; PUT IN AN APR TO MAP THE ENTRY.; ;- +$GTSPK::MOV R0,-(SP) ;SAVE LISTHEAD ADDRESSE MOV R2,-(SP) ;SAVE R2$ MOV KISAR5,-(SP) ;SAVE KERNEL APR 5$ MOV KISAR6,-(SP) ;SAVE KERNEL APR 6#10$: SEC ;ASSUME PACKET NOT FOUNDU1 MOV (R0),R2 ;GET ADDRESS OF NEXT PACKET IN LISTX BEQ 100$ ;IF EQ END OF LISTD, MOV KISAR5,KISAR6 ;SAVE POINTER TO PREVIOUS1 MOV R2,KISAR5 ;MAP THE NEXT PACKET THROUGH APR 5U( CMP R1,R2 ;IS THIS THE DESIRED PACKET? BEQ 50$ ;IF EQ YES- MOV #120000,R0 ;POINT TO LINK WORD IN PACKETN BR 10$ ;GET NEXT PACKET150$: CMP R0,6(SP) ;IS THIS THE FIRST IN THE LIST?E BNE 60$ ;IF NE NO MOV (SP)+,KISAR6 ;RESTORE APR 6! CALL $QSPRF ;DEQUEUE THE PACKETN BR 110$ ;:)60$: MOV (R0),@#140000 ;UNLINK THE PACKET,! BNE 90$ ;IF NE NOT LAST IN LISTL# MOV 6(SP),R0 ;GET LISTHEAD ADDRESS) MOV KISAR6,R2 ;COPY LAST IN LIST ADDRESSS* MOV (SP),KISAR6 ;RESTORE PREVIOUS MAPPING* MOV R2,2(R0) ;UPDATE LAST IN LIST POINTER90$: CLC ;INDICATE SUCCESS%100$: MOV (SP)+,KISAR6 ;RESTORE APR 6P%110$: MOV (SP)+,KISAR5 ;RESTORE APR 5: MOV (SP)+,R2 ;RESTORE R2F' MOV (SP)+,R0 ;RESTORE LISTHEAD ADDRESS RETURN ;S  .ENDC R .END $QSPRF ;DEQUEUE THE PACKETN BR 110$ ;:)60$: MOV (R0),@#140000 ;UNLINK THE PACKET,! BNE 90$ ;IF NE NOT LAST IN LISTL# MOV 6(SP),R0 ;GET LISTHEAD ADDRESS) MOV KISAR6,R2 ;COPY LAST IN LIST ADDRESSS* MOV (SP),KISAR6 ;RESTORE PREVIOUS MAPPING* MOV R2,2(R0) ;UPDATE LAST IN LIST POINTER90$: CLC ;INDICATE SUCCESS%100$: MOV (SP)+,KI00EvutkTADATADATADATADATADATA .TITLE RDDRV .IDENT /3.1/Q; C; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.S; ALL RIGHTS RESERVED.;#<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;M; MODIFIED BY:; ; B. S. MCCARTHY 3-OCT-82 3.1I;3; BM258 -- CORRECT DRIVER TO USE $CKBFB FOR BUFFER ; CHECKING DUE TO P.IOCC;R ; RECONFIGURATION CONTROL DRIVER;I;+C; THE RECONFIGURATION CONTROL DRIVER PROVIDES THE INTERFACE BETWEENID; USER COMMAND LEVEL TASKS WHICH GENERATE REQUESTS TO PERFORM SYSTEMG; RECONFIGURATION FUNCTIONS AND TO RETURN SYSTEM STATUS INDICATIONS ANDR-; A PRIVILEDGED RECONFIGURATION CONTROL TASK.E; THIS DRIVER ACCESS AND ADDRESS CHECKS QIO REQUESTS FROM THE COMMANDOD; TASKS, ENQUEUES THEM INTO THE RECIEVE QUEUE OF THE RECONFIGURATION$; TASK, AND INITIATES ITS EXECUTION.B; EXCEPT IN THE CASE OF ACCESS ERRORS, I/O COMPLETION IS PERFORMED'; DIRECTLY BY THE RECONFIGURATION TASK.P;-;H; LOCAL MACRO DEFINITIONSR;M;D .MCALL OLRDF$,UCBDF$R3 OLRDF$ ; DEFINE ONLINE RECONFIGURATION INTERFACEC UCBDF$ ; DEFINE UCB OFFSETS;I; DEFINE LOCAL VARIABLES; 1 U.LIST=U.CNT+2 ; LISTHEAD FOR PACKET EXTENSION A;D; DRIVER DISPATCH TABLEF; / DDT$ RD,1,NONE ; DEFINE DRIVER DISPATCH TABLEV;+8; **-RDINI-RECONFIGURATION DRIVER INITIATIOR ENTRY POINT;.; B; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE EACH TIME AD; RECONFIGURATION COMMAND TASK ISSUES A QIO TO A LUN ASSIGNED TO THED; RD0: UNIT. THE COMMAND TASK SUPPLIES ONE OR TWO BUFFER ADDRESS ANDB; SIZE DESCRIPTORS AND A FUNCTION CODE. THE QIO DIRECTIVE CODE HASF; VALIDATED THE FIRST BUFFER AND PLACED THE TWO-WORD BUFFER DESCRIPTORE; AT OFFSETS I.BUF+0 AND I.BUF+2 IN THE PACKET. THIS DRIVER IS CALLEDRE; DIRECTLY FROM THE DIRECTIVE SERVICE CODE TO VALIDATE THE ADDITIONALRD; PARAMETERS. THE PACKET IS THEN QUEUED TO THE SCB I/O REQUEST QUEUED; FOR THE UNIT AND A CALL MADE TO $GTPKT TO DEQUEUE THE NEXT REQUEST; IN THAT QUEUE.; ; INPUTS:T; R1= ADDRESS OF I/O PACKETO; R4= ADDRESS OF SCB; R5= ADDRESS OF UCB;D%; THE PACKET IS FORMATTED AS FOLLOWS:E;S; I.LNK: I/O QUEUE THREAD WORD; I.PRI: REQUEST PRIORITYE; I.EFN: EVENT FLAG NUMBER); I.TCB: ADDRESS OF TCB OF REQUESTOR TASKE9; I.LN2: ADDRESS OF LUN2 WORD IN HEADER OF REQUESTOR TASK ; I.UCB: ADDRESS OF UCB; I.FCN: I/O FUNCTION CODE-; I.IOSB: VIRTUAL ADDRESS OF I/O STATUS BLOCK -; +2: RELOCATION BIAS OF I/O STATUS BLOCKH=; +4: DISPLACEMENT OF I/O STATUS BLOCK (RELATIVE TO APR6) .; I.AST: VIRTUA ADDRESS OF AST SERVICE ROUTINE,; I.PRM: RELOCATION BIAS OF FIRST I/O BUFFER<; +2: DISPLACEMENT TO FIRST I/O BUFFER (RELATIVE TO APR6)*; +4: SIZE IN BYTES OF FIRST I/O BUFFER; +6: ; +10:R; +12:; +14:; +16:;O-; I/O FUNCTION CODES SERVICED BY THIS DRIVER:C;AA; IO.MFC = 0,1 MULTIPLE FUNCTIONS AND I/O PARAMETERS ARE SUPPLIEDS; IN THE USERS BUFFER (; IO.RSC = 0,2 READ SYSTEM CONFIGURATION; IO.ATT = 0,3 ATTACH TO UNIT/ ; IO.DET = 0,4 DEATACH FROM UNIT); IO.WSC = N,6 WRITE SYSTEM CONFIGURATIONU; 'N' IS A FUNCTION CODE.S; ;-RDINI:$ MOV R1,R3 ; COPY ADDRESS OF PACKET+ ADD #I.FCN,R1 ; AND POINT TO FUNCTION CODEB! CMPB #IO.ATT/400,1(R1) ; ATTACH?  BEQ 95$ ; YES, GO ENQUEUE1- CMPB #IO.DET/400,1(R1) ; HOW ABOUT A DETACH? BEQ 95$ ; YES, SAME OPERATION.9 CMP #IO.RSC,(R1) ; IS THIS A 'READ FULL CONFIGURATION'? - BEQ 95$ ; YES, THEN JUST GO ENQUEUE REQUESTM2 CMP #IO.HRC,(R1) ; IS THIS A MODE-CHANGE COMMAND? BEQ 140$ ; BR IF YES9 MOV #IE.RSU&377,R0 ; ASSUME THIS CALLER IS NOT ATTACHED.A3 ; FOR THE REMAINDER OF THE FUNCTIONS THE CALLERY, ; MUST BE ATTACHED BEFORE THE REQUEST IS( ; ENQUEUED. THIS SERVES TO GUARENTEE ; CONTINUTITY OF ACCESS,2 ; IF MORE THAN ONE REQUESTOR IS SIMULTANIOUSLY/ ; ATTEMPTING TO ADDRESS THE RECONFIGURATION# ; TASK.;8 CMP I.TCB(R3),U.ATT(R5) ; IS THIS CALLER ATTATCHED YET?& BNE 125$ ; GO ISSUE I/O ERROR RETURN20$:# MOV R3,-(SP) ; SA00MvvtblVE PACKET ADDRESSQ MOV R3,-(SP) ; TWICE.B MOV R3,U.BUF+2(R5) ; SETUP FOR CALL TO $GETWRD, POINT INTO PACKET< ADD #I.PRM,U.BUF+2(R5) ; POINT TO FIRST PARAMETER IN PACKET;F?; COME HERE IF THIS IS EITHER A 'WRITE DEVICE CONFIGURATION' OR ; 'MULTIPLE FUNCTION',; 30$:< MOV #14,U.CNT(R5) ; COUNT OF REMAINING BYTES IN THE PACKET., CMP #IO.MFC,I.FCN(R3) ; MULTI-FUNCTION QIO? BNE 40$ ; BR IF NOTI;SB; CHANGE INPUT BUFFER DESCRIPTOR TO REFERENCE USER SUPPLIED BUFFER;+ ADD #I.PRM+0,R3 ; POINT TO FIRST PARAMETER(/ MOV (R3)+,U.BUF+0(R5) ; SET ADDRESS FOR $GTWRDA= MOV (R3)+,U.BUF+2(R5) ; REFERENCING THE USERS MULTI-FUNCTIONN MOV (R3),U.CNT(R5) ; BUFFER.40$:/ ; AT THIS POINT U.BUF/U.CNT REFER TO EITHERG, ; THE REMAINDER OF THE PARAMETERS IN THE. ; PACKET ITSELF (FOR A IO.WSC FUNCTION) OR/ ; TO THE USERS SPECIFICATION BUFFER (FOR ANI ; IO.MFC FUNCTION)C MOV #IE.BAD&377,R0 ; ASSUME THE CALLER SUPPLIED A TOO-LARGE BUFFERS: CMP U.CW3(R5),U.CNT(R5); CHECK AGAINST MAXIMUM PARAMETERS! BLO 120$ ; BR IF BUFFER TOO BIG;8 CALL NXTNOD ; ALLOCATE THE FIRST PACKET EXTENSION NODE/ ; AND LINK IT TO THE PACKET EXTENSION LIST. # BCS 110$ ; BR IF ALLOCATION ERRORN50$:( MOV (SP),R1 ; GET PACKET ADDRESS AGAIN> BEQ 150$ ; BR IF THIS WAS A ONESHOT QIO (IO.WSC) AND WE HAVE# ; FINISHED PARAMETER PROCESSINGI* MOV I.FCN(R1),R0 ; GET USER FUNCTION CODE) SWAB R0 ; GET FUNCTION CODE TO LOW BYTEE( CMPB #IO.WSC/400,R0 ; SINGLE OPERATION?% BNE 60$ ; NO, BR IF MULTI-OPERATIONA+ CLR (SP) ; FLAG SINGLE OPERATION COMPLETE BR 70$ ;60$: ; PICKUP TRUE FUNCTION CODEO" ; FROM THE USER COMMAND BUFFER= CALL GETWRD ; GET NEXT WORD FROM USER MULTI-FUNCTION BUFFER: BCS 150$ ; BR IF END OF BUFFER# MOV R1,R0 ; POSITION FUNCION CODE ) SWAB R0 ; GET FUNCTION CODE TO LOW BYTEI;D; VALIDATE NEXT FUNCTION CODEF;R70$:B CMPB #IO.WSC/400,R0 ; THIS MUST BE A WRITE CONFIGURATION FUNCTION BNE 100$ ; ILLEGAL FUNCTION  SWAB R0 ; GET SUBFUNCTIONR) CMPB #MAXFC,R0 ; VERIFY CODE IS IN RANGEG" BLO 100$ ; ILLEGAL FUNCTION CODE: CALL PUTWRD ; PUT FUNCTION CODE TO PACKET EXTENSION LIST# BCS 110$ ; BR IF ALLOCATION ERRORT$ CLR R1 ; COUNT REQUIRED PARAMETERS BIC #^C377,R0 ; ISOLATE COMMAND# BEQ 100$ ; BR IF ILLEGAL FUNCTION + MOVB LEGFCN-1(R0),R0 ; PICKUP CONTROL BYTE$ MOV R0,-(SP) ; SAVE FOR SECOND HALF& CALL MOVPAR ; COPY PARAMETERS IF ANY% MOV (SP)+,R0 ; GET CONTROL WORD BACKB" BCS 110$ ; BR IF PARAMETER ERROR& ASH #-4,R0 ; SHIFT TO SECOND QUARTET' CALL MOVDES ; COPY DESCRIPTORS IF ANYI" BCS 110$ ; BR IF PARAMETER ERROR BR 50$ ; GO FOR NEXT COMMAND80$:% MOV #IE.SPC&377,R0 ; PARAMETER ERRORR BR 120$ ; TAKE ERROR EXITE95$:# BR 170$ ; RELAY BRANCH FROM ABOVEA100$:Q+ MOV #IE.IFC&377,R1 ; ILLEGAL FUNCTION CODEN110$:R5 MOV R1,R0 ; CODE WAS SET BY DETECTING ROUTINE ABOVEN120$: TST (SP)+ ; REMOVE FLAG WORD" MOV (SP)+,R3 ; GET PACKET ADDRESS125$:C2 CLR R1 ; RESET SECOND WORD OF I/O STATUS RETURN ' CALL $IOFIN ; AND RETURN ERROR STATUS ;Y9; NOW CLEAR ANY PARTIAL PACKET EXTENSION LIST BUILT ABOVEB;0130$:O MOV R5,R0 ; POINT TO LISTHEADS ADD #U.LIST,R0E CALL $QRMVF ; REMOVE NEXT NODE" BCS 200$ ; BR IF NO MORE IN LIST+ MOV R1,R0 ; SET ADDRESS OF NODE TO RETURN ( MOV #I.LGTH,R1 ; AND SET ALLOCATED SIZE* CALL $DEACB ; RETURN NODE TO SYSTEM POOL BR 130$ ; GO FOR NEXT IN LISTA;D-; PROCESS PRIVILEGED TASK MODE CHANGE REQUESTC;R140$:T1 MOV I.TCB(R3),R2 ; PICK UP REQUESTOR TCB ADDRESS * BIT #T3.PRV,T.ST3(R2) ; IS IT PRIVILEGED?0 BEQ 146$ ; BR IF NO. NON-PRIVILEGED REQUESTORS ; JUST WAKE UP HRC...O; ADD #I.PRM+0-I.FCN,R1 ; ADVANCE POINTER TO FIRST PARAMETERX1 BIC (R1),U.CW2(R5) ; RESET 'MASK' FROM MODE BITS0 COM (R1) ; OBTAIN 'NOT MASK'9 BIC (R1)+,(R1) ; AND ENSURE 'TRUE' BITS DONT CONTAIN ANY . ; OTHER THAN WHAT WERE SPECIFIED IN 'MASK'< BIS (R1),U.CW2(R5) ; AND SET IN NEW BITS INTO MODE CONTROL.146$:R MOV #IS.SUC,R0 ; SET STATUS" CLR R1 ; SET SECOND STATUS00UvutkTADATADATADATADATADATA VALUE TST $HRCPT ; DOES HRC EXIST? BNE 147$ ; BR IF NOT/ MOV #IE.OFL&377,R0 ; REVISE STATUS ACCORDINGLYK147$:C+ CALL $IOFIN ; AND TERMINATE I/O OPERATIONR, MOV $HRCPT,R0 ; PICK UP TCB ADDRESS FOR HRC2 BEQ 200$ ; IGNORE OPERATION OF HRC NOT INSTALLED. CALLR $EXRQN ; REQUEST HRC TO CHECK NEW MODE; @; THE FINAL COMMAND HAS BEEN TRANSFERRED TO THE PACKET EXTENSION;1150$:51 CLR R0 ; SET A ZERO COMMAND AS A STOPPER IN THER ; PACKET EXTENSION% CALL PUTWRD ; PUT TO EXTENSION LISTL# BCS 110$ ; BR IF ALLOCATION ERRORB160$:  TST (SP)+ ; REMOVE FLAG3" MOV (SP)+,R3 ; GET PACKET ADDRESS;CE; COPY PACKET EXTENSION LISTHEAD TO THE PACKET AND ENQUEUE THE PACKET ; TO THE SCB QUEUE.C;B170$:;$ MOV R3,R1 ; RESTORE PACKET ADDERSSB MOV U.LIST+0(R5),I.PRM+14(R1) ; COPY EXTENSION LISTHEAD TO PACKET175$:  CLR U.LIST(R5) ;D% MOV R5,U.LIST+2(R5) ; RESET LISTHEAD$ ADD #U.LIST,U.LIST+2(R5) ; TO EMPTY/ MOV U.SCB(R5),R0 ; POINT TO I/O QUEUE LISTHEAD * CALL $QINSP ; AND INSERT PACKET IN QUEUE& ; FALL THROUGH INTO PACKET DEQUEUE;O,; FETCH THE NEXT PACKET FROM THE INPUT QUEUE6; PERFORM ATTACH AND DETACH FUNCTIONS AS A SIDE EFFECT;Q180$:P. BICB #US.BSY,U.STS(R5) ; MARK DRIVER NOT BUSY# MOV U.SCB(R5),R4 ; GET SCB ADDRESSV* CLRB S.STS(R4) ; TO ALLOW ANOTHER DEQUEUEE GTPKT$ RD,1,130$,,T ; GET NEXT PACKET FROM QUEUE OR RETURN TO CALLERS;S; INPUT:; R1= ADDRESS OF NEXT PACKET; R4= ADDRESS OF SCB; R5= ADDRESS OF UCB;L; PACKET FORMAT:;P ; AS ABOVE.T;C3 MOV $HRCPT,R0 ; GET ADDRESS OF HRC PROCESSING TASK) BNE 190$ ; BR IF SERVICE TASK AVAILABLEQ& MOV #IE.OFL&377,R0 ; 'DEVICE' OFFLINE MOV R1,R3 ; SET UP FOR $IOFINP0 MOV I.PRM+14(R1),R2 ; GET ADDRESS OF FIRST NODE( BEQ 187$ ; NO LIST, GO TAKE ERROR EXIT% MOV R2,U.LIST+0(R5) ; BUILD LISTHEAD185$:T( MOV R2,U.LIST+2(R5) ; LAST NODE POINTER' MOV (R2),R2 ; LOOK FOR REAL LAST NODE  BNE 185$ ; NOT YET187$: , CALL 125$ ; DO I/O DONE ON THIS PACKET AND# ; ELIMENATE ANY PARAMETER LISTSC( BR 180$ ; GO RESET DEVICE NOT BUSY AND ; CHECK FOR ANOTHER PACKET190$:I: CALL $EXRQP ; ENQUEUE TO HRC AND ACTIVATE IF NOT ALREADY BR 180$ ; GO FOR NEXT PACKET;P+; POWERFAIL AND TIMEOUT DRIVER ENTRY POINTSQ;7200$:IRDPWF:RDOUT:RDCAN: RETURNI;R; UTILITY ROUTINES;8;B; COPY PARAMETERS OR BUFFER DESCRIPTORS TO EXTENSION AS INDICATED ; IN THE CONTROL BYTE.;;MOVPAR:8$ BIC #^C17,R0 ; ISOLATE CONTROL BITS BEQ 15$ ; BR IF DONE" MOV R0,R2 ; COPY PARAMETER COUNT10$:. CALL GETWRD ; GET NEXT WORD FROM USER BUFFER$ BCS 15$ ; BR IF NO MORE PARAMETERS MOV R1,R0 ; COPY FOR PUT. CALL PUTWRD ; PUT IT TO THE PACKET EXTENSION' BCS 15$ ; BR IF NODE ALLOCATION ERRORT& SOB R2,10$ ; LOOP FOR ALL PARAMETERS15$: RETURNTMOVDES:, BIC #^C17,R0 ; ISOLATE COUNT OF DESCRIPTORS BEQ 35$ ; BR IF NONE TO MOVE MOV R5,-(SP) ; SAVE A REGISTERR MOV R0,-(SP) ; SAVE THE COUNT10$:; CALL GETBUF ; GET NEXT BUFFER DESCRIPTOR FROM USER BUFFER 1 BCS 28$ ; BRANCH IF INPUT EXHAUSTED PREMATURELYE MOV R0,-(SP) ; SAVE BUFFER SIZE2 MOV R1,R0 ; SET BUFFER RELOCATION ADDRESS (APR6) CALL PUTWRD ; PUT TO EXTENSION" BCS 25$ ; BR IF ALLOCATION ERROR# MOV R2,R0 ; PUT RELOCATION OFFSET 2 CALL PUTWRD ; AND PUT IT TO THE PACKET EXTENSION" BCS 25$ ; BR IF ALLOCATION ERROR! MOV (SP),R0 ; SET BUFFER LENGTHE2 CALL PUTWRD ; AND PUT IT TO THE PACKET EXTENSION25$:4 INC (SP)+ ; CLEAR STACK WITHOUT CHANGING CARRY BIT BCS 30$ ; EXIT IF ERRORE% DEC (SP) ; DEC COUNT OF DESCRIPTORSE BNE 10$ ; LOOP28$: INC (SP)+ ; CLEAN THE STACKR30$:" MOV (SP)+,R5 ; RESTORE A REGISTER35$: RETURN ; ;EC; GET A BUFFER DESCRIPTOR FROM THE USER, ADDRESS CHECK AND RELOCATEA; TO AN APR6 BASE PLUS OFFSET.;UGETBUF: - CALL GETWRD ; GET VIRTUAL ADDRESS OF BUFFERE BCS 50$ ; BR IF NO MOREU MOV R1,R0 ; SET ADDRESS  CALL GETWRD ; GET SIZE WORDN BCS 50$ ; BR IF NO MOREL$ MOV R1,-(SP) ; SAVE SIZE FOR RETURN BNE 5$ ; BR IF REAL DESC00]vdcvtblRIPTOR' CLR R2 ; INDICATE NO BUFFER AVAILABLE$ BR 40$ ; COMPLETE SCAN5$:L) CALL $CKBFB ; CHECK AND LOCK THE BUFFERR7 BCS 40$ ; AND EXIT IF THERE IS A BUFFER MAPPING ERRORD+ CALL $RELOC ; AND RELOCATE TO APR6 OFFSETL40$:" MOV (SP)+,R0 ; RETURN BUFFER SIZE50$: RETURNC;W1; GET NEXT WORD FROM USER INPUT BUFFER OR PACKET.R; GETWRD:M( MOV #IE.BAD&377,R1 ; ASSUME FETCH ERROR* SUB #2,U.CNT(R5) ; ACCOUNT FOR WORD TAKEN BCS 10$ ; BR IF NO MOREO9 CALL $GTWRD ; USER SYSTEM ROUTINE TO ADDRESS THE BUFFERC MOV (SP)+,R1 ; LOAD VALUE CLC ; ENSURE CARRY CLEAR10$: RETURN ; #; PUT WORD TO PACKET EXTENSION LIST ;T; INPUT:; R0=WORD TO PUT); R3=BYTECOUNT OF SPACE REMAINING IN NODEP; R4=NODE FILL POINTER;+PUTWRD:N' SUB #2,(R3) ; ACCOUNT FOR SPACE TAKENE$ BGE 20$ ; BR IF SPACE IS AVAILABLE! ADD #2,(R3) ; CORRECT UNDERFLOWD5 CALL NXTNOD ; ALLOCATE NEXT NODE AND LINK IT TO THEN ; EXTENSION LIST BCC PUTWRD ; TRY AGAIN BR 30$ ; ALLOCATE ERRORO20$: MOV R0,(R4)+ ; PUT WORD TO NODE30$: RETURNE;CH; ALLOCATE ANOTHER NODE FOR THE PACKET EXTENSION LIST AND LINK IT TO THE; LISTHEAD AT U.LIST+0,+2 ;WNXTNOD: JSR R2,$SAVVR ; SAVE R0,R1,R2, MOV #I.LGTH,R1 ; SET SIZE OF EXTENSION NODE MOV R1,R3 ; SET FILL COUNT CALL $ALOCB ; ALLOCATE NODER BCS 10$ ; BR IF ALLOCATE ERROR MOV R0,R4 ; SET FILL POINTER MOV R0,R1 ; AND NODE ADDRESS" MOV R5,R0 ; SET LISTHEAD ADDRESS ADD #U.LIST,R0 ;; CLR (R4)+ ; ZERO LINKWORD % MOV R3,(R4) ; SET 'SPACE REMAINING'T/ MOV R4,R3 ; COPY POINTER TO 'SPACE REMAINING'N3 SUB #4,(R4)+ ; ADJUST TO ACTUAL SPACE AND POINT TO ; FIRST FILL LOCATION$ MOV R3,-(SP) ; AGAINST MODIFICATION4 CALL $QINSF ; INSERT NODE AT END OF EXTENSION LIST! MOV (SP)+,R3 ; RESTORE REGISTERSA RETURNL10$:& MOV #IE.NOD&377,R1 ; ALLOCATION ERROR RETURN,;E0; SPECIFICATION OF LEGAL FUNCTIONS AND ARGUMENTS;R .MACRO CMD NAME $$$TMP=.A .=LEGFCN+-1 .BYTE IO$'NAME&377 .IIF GT .-$$$TMP $$$TMP=. .=$$$TMP $$$CNT=$$$CNT+1 .ENDM $$$CNT=0MLEGFCN:* CMD ONL ; ONLINE, TWO BUFFER DESCRIPTORS+ CMD OFL ; OFFLINE, TWO BUFFER DESCRIPTORS,/ CMD MAI ; MAINTENANCE, TWO BUFFER DESCRIPTORSN CMD ONE ; ON CONDITION CMD IF ; IF CONDITION ( CMD CAC ; CACHE CONTROL, ONE PARAMETER6 CMD MEM ; MIND CONTROL, ONE DESCRIPTOR,ONE PARAMETER- CMD HRC ; CONTROL - SET HRC OPERATING MODES# CMD STN ; SET TASK NAME TWO WORDS. CMD STA ; RETURN DEVICE STATUS! CMD RLI ; LINK, TWO DESCRIPTORST" CMD RUL ; UNLINK, ONE DESCRIPTOR= CMD MBO ; MEMORY BOX ONLINE, 2 PARAMETERS AND 4 DESCRIPTORSD CMD MBF ; MEMORY BOX OFFLINE# CMD RSW ; SWITCH, TWO DESCRIPTORS * CMD WAT ; WRITE ATTRIBUTES, 1 DESCRIPTOR) CMD RAT ; READ ATTRIBUTES, 1 DESCRIPTOR > ASSUME $$$CNT,<<.-LEGFCN>> ; ENSURE NO COMMANDS WERE LEFT OUT MAXFC=.-LEGFCNO .ENDR- CMD HRC ; CONTROL - SET HRC OPERATING MODES# CMD STN ; SET TASK NAME TWO WORDS. CMD STA ; RETURN DEVICE STATUS! CMD RLI ; LINK,  .TITLE REQSBN .IDENT /14.07/N;PK; COPYRIGHT (c) 1982, 1983, 1984, 1985 BY DIGITAL EQUIPMENT CORPORATION.(; ALL RIGHTS RESERVED.; >; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED@; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;O ; D. N. CUTLER 10-AUG-73 ; # ; MODIFIED FOR RSX-11M-PLUS V2.1:; ;B; H. HUANGR; J. R. KAUFFMAN; B. KRISHNAMURTHYE; J. M. LAWLER; T. LEKASS; T. M. MARTIN; B. S. MCCARTHY ;-; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY: ;I; J. M. LAWLER; J. R. KAUFFMAN; J. W. BERZLE; B. S. MCCARTHY; L. B. MCCULLEY;-; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:D;B ; J. W. BERZLE!; K. L. NOEL";E-"; MODIFIED FOR RSX-11M-PLUS VERSION 4.1 BY:N";L"; K. L. NOEL "; P. K. M. WEISS";M-"; MODIFIED FOR RSX-11M-PLUS VERSION 4.2 BY: ";M""; B. S. MCCARTHY 30-MAR-89 14.07";A5"; BM420 -- CORRECT A FEW PROBLEMS IN $TCBCP/$REMO1C"; $100devutkTADATADATADATADATADATA; TASK REQUEST RELATED SUBROUTINES2;O3; MACRO LIBRARY CALLSM4;L5,6 .MCALL HDRDF$,ITBDF$,PCBDF$,TCBDF$,BGCK$A789: .IF DF N$$DIR;< .MCALL LNMDF$=)> LNMDF$ ;DEFINE CONTEXT BLOCK OFFSETSW?@ .ENDC ;DF N$$DIRA'B HDRDF$ ;DEFINE TASK HEADER OFFSETS.4C ITBDF$ ;DEFINE INTERRUPT TRANSFER BLOCK OFFSETS3D PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS;E TCBDF$ ,,SYSDEF ;DEFINE TASK CONTOL BLOCK OFFSETS & LGTHOFGH .IF DF A$$CNTIJ .MCALL ACNDF$K ACNDF$ ;ACCOUNTING OFFSETSSLM .ENDCNO .IF DF C$$RTKPQ .MCALL CPRDF$ R CPRDF$CST .ENDCUV MAP6=140000WX;+ Y; **-$ABCTK-ABORT CURRENT TASKZ; **-$ABTSK-ABORT TASK[; M\; THIS ROUTINE IS CALLED TO MARK A TASK FOR ABORT AND TO FORCE A TASK EXIT..I]; THE REASON FOR ABORT AND THE CURRENT OUTSTANDING I/O COUNT ARE STORED &^; IN THE FIRST TASK EVENT FLAG WORD._;, `; INPUTS:Ea; b; R0=REASON FOR ABORT.Gc; R2=EXTENDED ABORTER INFORMATION (VALID ONLY IF R0=S.CABO OR S.CPMD)Nd;S e; OUTPUTS:f;Fg; THE TASK IS MARKED FOR ABORT AND A CONDITIONAL SCHEDULE REQUEST ISh; SET.i;-j8k$ABCTK::MOV $TKTCB,R1 ;SET TCB ADDRESS TO CURRENT TASK?l$ABTSK::BIC #TS.STP,T.STAT(R1) ;REMOVE POSSIBLE MCR BLOCK BITRm3n .IF DF C$$RTK ;IF REMOTE TASK SERVICE SUPPORTEDDoCp BIT #T4.P0,T.ST4(R1);DOES THIS TASK HAVE AN ASSOCIATED P0 IMAGE?N7q BEQ 3$ ;NOPE, CONTINUE WITH NORMAL ABORT PROCESSING r MOV R0,-(SP) ;SAVE ABORT CODEs MOV R1,-(SP) ;SAVE TCB=)t MOV R2,-(SP) ;SAVE ABORTER INFORMATION(u MOV #MAP6,R2 ;BASE ADDRESS FOR PACKET.v MOV $CPOUT,R0 ;GET FIRST OUTSTANDING PACKET)w101$: BEQ 25$ ;IF NONE, LEAVE IT ALONES"x MOV R0,@#KISAR6 ;MAP THE PACKET-y CMP R1,H$TCB(R2) ;IS THIS THE CORRECT TCB?z BNE 1$ ;NO5{ CMPB #HT$VMS,H$TYPE(R2) ;IS THIS THE RIGHT PACKET?4)| BEQ 2$ ;YES, SEND THE P0 ABORT PACKETA8}1$: MOV H$LINK(R2),R0 ;GET THE NEXT PACKET IN THE LIST$~ BR 101$ ;GO BACK TO CHECK IT OUT2$:O2 DEC (R2) ;DECREMENT THE LENGTH OF THE P0 BLOCK" CLR -(SP) ;GET A STORAGE SPACE. MOVB (R2),(SP) ;GET THE LENGTH OF THE BLOCK( ADD (SP)+,R0 ;GET THE NEW PACKET BIAS: MOV R0,@#KISAR6 ;MOVE TO LAST BLOCK OF ORIGINAL REQUEST$ MOV #1,(R2) ;LENGTH OF ONE BLOCK- MOVB #HT$AP0,H$TYPE(R2) ;SET P0 ABORT TYPEM& MOV $TKTCB,-(SP) ;SAVE CURRENT TASK- MOV R1,$TKTCB ;MOVE IN TASK WE'RE ABORTING3 CPSEN$ #SN$DET,R0,#H$SIZE ;SEND P0 ABORT REQUEST) MOV (SP)+,$TKTCB ;RESTORE CURRENT TASKD025$: MOV (SP)+,R2 ;RESTORE ABORTER INFORMATION MOV (SP)+,R1 ;RESTORE TCB# MOV (SP)+,R0 ;RESTORE ABORT CODE 3$:B .ENDC ;C$$RTK, CMP R0,#S.CABO ;ABORT BY DIRECTIVE OR MCR BEQ 4$ ;IF EQ YESR$ CMP R0,#S.CTKN ;QUIET TASK ABORT?. BEQ 4$ ;IF EQ YES, ISSUE ABORT ASTS IF ANY" CMP R0,#S.CPMD ;ABORT WITH PMD? BNE 7$ ;IF NE NO4$: SAVNR ;SAVE R4 AND R5'2 MOV #AS.REA,R4 ;GET CODE FOR REQUESTED EXIT AST! MOV R1,-(SP) ;SAVE TCB ADDRESS+ MOV R0,-(SP) ;SAVE ABORT CODE) MOV R2,-(SP) ;SAVE ABORTER INFORMATIONI MOV R1,R5 ;COPY TCB ADDRESS CALL $DASTT ;DECLARE AST, MOV (SP)+,R2 ;RESTORE ABORTER INFORMATION# MOV (SP)+,R0 ;RESTORE ABORT CODE BCC 5$ ;IF CC AST SET UP$ MOV (SP)+,R1 ;RESTORE TCB ADDRESS- BIT #T3.PRV,T.ST3(R1) ;IS TASK PRIVILEGED?P BEQ 7$ ;IF EQ NO9 BIT #T2.REX,T.ST2(R1) ;HAS ABORT AST ALREADY OCCURRED?' BEQ 7$ ;IF EQ NO MOV R1,R0 ;COPY TCB ADDRESS BR 10$ ;RESCHEDULE TASKS5$: TST (SP)+ ;CLEAN STACKE8 MOV #4,A.PRM(R1) ;STORE NUMBER OF AST PARAMETER BYTES0 MOV R2,A.PRM+2(R1) ;STORE ABORTER INFORMATION1 RETURN ;$NXTSK ALREADY CALLED, SIMPLY RETURNM*7$: BIT #T3.ACP,T.ST3(R1) ;ACP ABORTING? BEQ 8$ ;IF EQ NO+ BIT #T3.PMD,T.ST3(R1) ;IS PMD REQUESTED?V2 BNE 8$ ;IF NE NO (NOTE: T3.PMD=1 MEANS NO PMD)9 BGCK$A BF.XIT,BE.ACP,FATAL ;CRASH SYSTEM ON ACP ABORTSD08$: MOV R0,T.EFLG(R1) ;INSERT REASON FOR ABORT: MOVB T.IOC(R1),T.EFLG+1(R1) ;SAVE OUTSTANDING I/O COUNT .IF DF M$$PRO00dmvcvtbl6 CLR T.RRM(R1) ;TASK CAN BE ABORTED ON ANY PROCESSOR .ENDC .IF DF P$$OFF) BIT #T3.ACP,T.ST3(R1) ;IS THIS AN ACP? BNE 9$ ;IF NE YES19 MOV #EX$SEV,T.EFLG+2(R1) ;SET SEVERE ERROR EXIT STATUS39$: ;REFERENCE SYMBOL .ENDC MOV R1,R0 ;COPY TCB ADDRESSC2 ADD #T.STAT,R1 ;POINT TO FIRST TASK STATUS WORD' BIC #TS.CKR,(R1)+ ;CLEAR STATUS BITSF5 BIC #T2.SEF!T2.STP!T2.SPN,(R1) ;MAKE TASK RUNNABLEI? BIS #T2.AST!T2.DST!T2.HLT!T2.ABO,(R1) ;DSBL AST'S & FRC EXITK .IF DF M$$PRO: BIT #^C,-(R1) ;OUT FOR INITIAL LOAD OR BLOCKED? .IFFS6 TST -(R1) ;OUT FOR INITIAL LOAD OR OTHERWISE BLKD? .ENDC BNE 10$ ;IF NE YES3 CALL $SETCR ;SET A CONDITIONAL SCHEDULE REQUEST*10$: MOV T.PCB(R0),R0 ;POINT TO TASK PCB8 CALLR $NXTSK ;REALLOCATE TASK PARTITION IF NECESSARY;+/; **-$BILDS-BUILD STACK AND INITIALIZE HEADER ; I; THIS ROUTINE SETS UP THE TASK STACK AND INITIALIZES THE HEADER. IT ISEI; CALLED PRIOR TO PLACING A TASK INTO CONTENTION FOR THE PROCESSOR WHENAF; AN EXECUTION REQUEST IS MADE FOR A TASK THAT IS FIXED IN MEMORY OR3; WHEN A DISK RESIDENT TASK HAS FINISHED LOADING.$; ; INPUTS:L;T4; R0=ADDRESS OF THE TCB OF THE TASK TO INITIALIZE.;R ; OUTPUTS:;K0; 1-TASK LOCAL EVENT FLAGS 1.-32. ARE CLEARED.); 2-CURRENT UIC IS SETUP IN THE HEADER. L; 3-TASK CONTEXT IS SETUP TO CAUSE THE TASK TO START EXECUTION AT ITS ENTR@; 4-REDISPATCHING OF THE PROCESSOR IS CONDITIONALLY REQUESTED.;T ; R3 IS PRESERVED ACROSS CALL.;-3$BILDS::MOV T.PCB(R0),R1 ;GET ADDRESS OF TASK PCBN .IF DF X$$HDR7 MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING FOR XTRNL HDRL+ MOV P.HDR(R1),-(SP) ;SAVE HEADER POINTER ! BNE 5$ ;IF NE INTERNAL HEADER/ MOV P.REL(R1),KISAR6 ;MAP TO EXTERNAL HEADERA4 MOV #140000,(SP) ;RESET VIRTUAL ADDRESS OF HEADER15$: MOV (SP)+,R1 ;GET VIRTUAL ADDRESS OF HEADERE .IFF ; DF X$$HDR / MOV P.HDR(R1),R1 ;GET ADDRESS OF TASK HEADERU .ENDC ; DF X$$HDR /  MOV T.EFLG(R0),H.CUIC(R1) ;SET SPECIFIED UIC0$  BNE 10$ ;IF NE UIC WAS SPECIFIED-  MOV H.DUIC(R1),H.CUIC(R1) ;SET DEFAULT UICU  .IF DF M$$MUP  BR 15$ ; .IFTF10$: ;REF LABEL .IFTE- MOV T.ACTL(R0),H.DUIC(R1) ;SET DEFAULT UICN .ENDC 15$: ;S  .IF DF A$$CNT!!" MOV KISAR5,-(SP) ;SAVE MAPPING 3# MOV T.ACN(R0),KISAR5 ;MAP FIRST ACCOUNTING BLOCKM)$ BEQ 16$ ;IF EQ, NO ACCOUNTING ON TASKU-% CMPB #BT.TAB,@#B.TYP+120000 ;IS THIS A TAB0& BNE 16$ ;IF NE NOF6' MOV H.CUIC(R1),@#B.PUIC+120000 ;COPY PROTECTION UIC3( MOV H.DUIC(R1),@#B.CUIC+120000 ;COPY CURRENT UICF-) MOV T.ST3(R0),@#B.TST3+120000 ;COPY T.ST3(*16$: MOV (SP)+,KISAR5 ;RESTORE MAPPING+, .ENDC ;A$$CNT-.// BIT #T2.ABO,T.ST2(R0) ;TASK MARKED FOR ABORTS0 BNE 20$ ;IF NE YES123 .IF DF M$$PRO405 MOV T.PCB(R0),R2 ;GET TASK REGION PCB ADDRESS>6 MOV T.RRM(R0),P.RRM(R2) ;SAVE THE TASK'S INSTALLED AFFINITY37 CALL $SETAT ;SET UP THE TASK'S RUNNING AFFINITY 89 .ENDC:;/< CLR T.EFLG(R0) ;CLEAR TASK LOCAL EVENT FLAGSM#= BIT #T3.ACP,T.ST3(R0) ;TASK ACP?U> BNE 17$ ;IF NE YES? CLR T.EFLG+2(R0) ;C@17$: ;REFERENCE SYMBOLKABC .IF DF M$$PROD3E CALL $TSTAT ;ARE THE REQUIRED BUS RUNS PRESENT?KF BCC 20$ ;IF CC YESG MOV R0,-(SP) ;SAVE REGISTERSFH MOV R1,-(SP) ;MI MOV R3,-(SP) ;TJ MOV R0,R1 ;COPY TCB ADDRESST&K MOV #S.CAFF,R0 ;GET TKTN ABORT CODEL CALL $ABTSK ;ABORT THE TASKS"M MOV (SP)+,R3 ;RESTORE REGISTERSN MOV (SP)+,R1 ;O MOV (SP)+,R0 ; PQ .ENDCRS4T20$: MOV H.ISP(R1),(R1) ;SET INITIAL STACK POINTER0U MOV H.GARD(R1),R2 ;POINT TO CONTEXT SAVE AREA!V SUB #16,R2 ;POINT TO SAVED PCF*W MOV H.IPC(R1),(R2) ;SET INITIAL PC WORD+X MOV H.IPS(R1),-(R2) ;SET INITIAL PS WORDYYZ .IF DF C$$RTK ;REMOTE TASKF[2\ BIT #F5.RTK,$FMSK5 ;ARE REMOTE TASKS BEING USED] BEQ 30$ 00duvutkTADATADATADATADATADATA;IF EQ NOM^9_ TSTB T.LBN(R0) ;HAS THIS TASK HAD CONTACT WITH CPRAME?T6` BEQ 30$ ;IF EQ, NO - DON'T NEED TO CLEAR LUN TABLEa?b CLRB T.LBN(R0) ;INDICATE THAT NO TASK START REQUEST HAS BEEN(c ; MADE FOR THIS TASK YETd#e .IF DF C$$RTB ;RUN TIME BINDINGVf2g BIT #F5.RTB,$FMSK5 ;RUN TIME BINDING TURNED ON?h BEQ 30$ ;IF EQ NOPi$j MOV T.PCB(R0),R3 ;GET PCB ADDRESS*k BIT #PS.FXD,P.STAT(R3) ;IS TASK FIXED?2l BEQ 30$ ;IF EQ NO, NO NEED TO CLEAR LUN TABLEmn MOV R0,-(SP) ;SAVE R0o MOV R5,-(SP) ; AND R5p MOV R3,-(SP) ; AND R3q4r MOV R0,R5 ;PUT TCB ADDRESS WHERE $MPLND WANTS IT%s ADD #H.NLUN,R1 ;POINT TO LUN TABLEC#t MOV (R1)+,R3 ;GET NUMBER OF LUNSEu'v25$: MOV (R1),R0 ;GET LUN ASSIGNMENTF w BEQ 27$ ;IF EQ, NOT ASSIGNEDx!y CALL $MPLND ;FOLLOW REDIRECTSNz1{ CMP (R0),$XXLOW ;MIGHT IT BE A GENERIC DEVICE?R| BLO 27$ ;IF LO, NO+} CMP (R0),$XXHGH ;IS IT A GENERIC DEVICE?~ BHI 27$ ;IF HI, NO"26$: CLR (R1)+ ;CLEAR LUN ENTRY CLR (R1)+ ; SOB R3,25$ ;LOOP UNTIL DONE, BR 28$ ;DONE*27$: CMP (R1)+,(R1)+ ;SKIP OVER THIS ONE SOB R3,25$ ;LOOP UNTIL DONEU28$: MOV (SP)+,R3 ;RESTORE R3  MOV (SP)+,R5 ; AND R5 MOV (SP)+,R0 ; AND R0 .ENDC ;C$$RTB30$: .ENDC ;C$$RTK .IF DF X$$HDR- MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPINGI .ENDC ; DF X$$HDR;+*; **-$ACTTK-PUT TASK IN ACTIVE TASK LIST;2I; THIS ROUTINE IS CALLED TO PUT AN ACTIVE TASK IN THE ACTIVE TASK LIST.;R ; INPUTS:U;D@; R0=ADDRESS OF THE TCB OF THE TASK TO PUT IN THE ACTIVE LIST.;O ; OUTPUTS:=; THE SPECIFIED TASK IS MERGED INTO THE ACTIVE TASK LIST BYV ; PRIORITY. ; ; R3 IS PRESERVED ACROSS CALL.;-<$ACTTK::MOV #$ACTHD-T.ACTL,R1 ;SET ADDRESS OF PREVIOUS TCB/10$: MOV R1,R2 ;SAVE ADDRESS OF PREVIOUS TCBN- MOV T.ACTL(R2),R1 ;GET ADDRESS OF NEXT TCB : CMPB T.PRI(R1),T.PRI(R0) ;TASK HIGHER OR SAME PRIORITY? BHIS 10$ ;IF HIS YES/ MOV R0,T.ACTL(R2) ;LINK NEW TASK TO PREVIOUS2 MOV R1,T.ACTL(R0) ;SET LINK TO NEXT IN NEW TASK;+.; **-$SETCR-SET CONDITIONAL SCHEDULE REQUEST"; **-$SETRQ-SET SCHEDULE REQUEST3; **-$SETRT-SET SCHEDULE REQUEST FOR CURRENT TASKS;.B; THIS ROUTINE IS CALLED TO FORCE REDISPATCHING OF THE PROCESSORE; FROM A SPECIFIED POSITION IN THE TASK LIST. IF A PREVIOUS REQUEST2A; HAS BEEN SET, THEN REDISPATCHING STARTS AT WHICH EVER REQUESTI; HAS THE HIGHEST PRIORITY. ;; ; INPUTS:;R; IF ENTRY AT $SETRT, THEN/; R5=ADDRESS OF THE TCB OF THE CURRENT TASK.T&; IF ENTRY AT $SETRQ OR $SETCR, THEN3; R0=ADDRESS OF THE TCB TO START DISPATCHING AT.E;R ; OUTPUTS:;R<; A SCHEDULE REQUEST IS SET WHICH WILL FORCE A REDISPATCH-8; ING OF THE PROCESSOR WHEN A SYSTEM EXIT IS EXECUTED.;A(; R2 AND R3 ARE PRESERVED ACROSS CALL.:; R0 IS PRESERVED ACROSS CALL IF ENTRY IS NOT AT $SETRT.;- .IF NDF M$$PROH  .ENABL LSB 8$SETCR::CMP R0,$TKTCB ;REQUESTED TASK SAME AS CURRENT? BEQ $SETRQ ;IF EQ YESO: CMPB @$CURPR,T.PRI(R0) ;CURRENT TASK OF HIGHER PRIORITY BHI 30$ ;IF HI YES BLO $SETRQ ;IF LO NO=10$: CALLR $DRDSE ;SAME PRIORITY-DECLARE SIGNIFICANT EVENTH1$SETRT::MOV R5,R0 ;SET ADDRESS OF DISPATCH TCBS7$SETRQ::MOV @$RQSCH,R1 ;GET PREVIOUS SCHEDULE REQUESTR& BEQ 20$ ;IF EQ NO PREVIOUS REQUEST( CMP R0,R1 ;TASK ALREADY RESCHEDULED? BEQ 30$ ;IF EQ YES/ CMPB T.PRI(R1),T.PRI(R0) ;COMPARE PRIORITIESM. BHI 30$ ;IF HI PREVIOUS IS HIGHER PRIORITY  BEQ 10$ ;IF EQ SAME PRIORITY+20$: MOV R0,@$RQSCH ;SET SCHEDULE REQUESTO30$: RETURN ;I  .DSABL LSBO .IFFL  .ENABL LSB$; G; SEARCH FOR LOWEST PRIORITY RESCHEDULED OR CURRENTLY EXECUTING TASK.RC; IF IT IS LOWER THAN RESCHEDULE REQUEST, THEN FORCE A RESCHEDULE ; REQUEST FOR THAT PROCESSOR.R;S$SETCR::MOV R2,-(SP) ;SAVE R2 7 BIT #TS.RUN,T.STAT(R0) ;IS TASK RUNNING ON OTHER CPU. BNE 40$ ;IF NE YES, MOV00d}vcvtbl #$RQTAB,R2 ;POINT TO RESCHEDULE TABLE7 MOV #377,-(SP) ;INITIALIZE LOWEST PRIORITY CELL WITH$& ;MAXIMUM POSSIBLE PRIORITY VALUE410$: MOV (R2)+,-(SP) ;PUSH NEXT RESCHEDULE POINTER0 BNE 15$ ;IF NE THERE IS A RESCHEDULE POINTER. MOV R2,(SP) ;COPY POINTER INTO RQSCH TABLE= ADD #$PRTAB-$RQTAB-T.PRI-2,(SP) ;CONVERT INTO POINTER INTOE ;PRIORITY TABLER515$: BIT $BTMSK-$RQTAB-2(R2),$URMST ;IS CPU ONLINE?# BNE 20$ ;IF NE YES TST (SP)+ ;CLEAN STACK BR 30$ ;TRY FOR NEXT CPU120$: CMP R0,-2(R2) ;TASK ALREADY RESCHEDULED???( BNE 25$ ;IF NE NOP( CMP (SP)+,(SP)+ ;CLEAN STACK PRIOR TO BR 80$ ;EXIT.25$: ADD #T.PRI,(SP) ;POINT TO TASK PRIORITY+ MOVB @(SP)+,1(SP) ;PICK UP TASK PRIORITYE0 CMPB (SP),1(SP) ;CURRENT PRIORITY LOW OR SAME BLO 30$ ;IF LO YES- BHI 27$ ;IF HI NO -- DON'T CHANGE LOW PRI;I?; PRIORITY IS THE SAME AS THE CURRENT LOWEST. IF THIS IS OUREF; CPU, THEN WE WILL BE NEW LOWEST PRI PROCESSOR. IF NOT, NO CHANGE.;E"  CMP $RQSCH,R2 ;IS THIS OUR CPU?"  BNE 30$ ;IF NE NO -- NO CHANGE/ 27$: SWAB (SP) ;ELSE SET NEW LOWEST PRIORITY,  MOV R2,R1 ;SAVE RESCHEDULE TABLE POINTER1 30$: CMP R2,#$RQTAB+ ;AT END OF TABLEA BLO 10$ ;IF LO NOS3 CMPB (SP)+,T.PRI(R0) ;SCHEDULE REQUEST REQUIRED?O BHI 80$ ;IF HI NOI BLO 60$ ;IF LO YES635$: MOV (SP)+,R2 ;ELSE EFFECT SIG. EVENT BECAUSE WE' ;DON'T KNOW WHICH TCB COMES FIRSTE  ;IN ATLW" CALLR $DRDSE ;EXIT THRU $DRDSE;<; TASK IS IN EXECUTION -- FIND THE PROCESSOR AND PERFORM A:; $SETRQ FOR THAT PROCESSOR. THIS GENERALIZES THE SINGLE; PROCESSOR $SETCR. ;E)40$: MOV #$TKTAB,R1 ;GET START OF TABLER045$: CMP (R1)+,R0 ;IS TASK ACTIVE ON THIS CPU?%  BNE 45$ ;IF NE NO -- TRY NEXT CPUU7! ADD #$RQTAB-$TKTAB-2,R1 ;POINT INTO $RQTAB FOR SETRQO-" BR 50$ ;ENTER $SETRQ, ALREADY IN PROGRESSN#3$$SETRT::MOV R5,R0 ;SET ADDRESS OF DISPATCH TABLE9%$SETRQ::MOV $RQSCH,R1 ;PICK UP RESCHEDULE TABLE POINTER& MOV R2,-(SP) ;SAVE R27'50$: MOV (R1)+,R2 ;PICK UP CURRENT RESCHEDULE POINTERR ( BEQ 60$ ;IF EQ THERE IS NONE() CMP R0,R2 ;TASK ALREADY RESCHEDULED?* BEQ 80$ ;IF EQ YES/+ CMPB T.PRI(R2),T.PRI(R0) ;IS PREVIOUS HIGHERV$, BHI 80$ ;IF HI YES -- DO NOTHING0- BNE 60$ ;IF NE YES -- SET RESCHEDULE REQUEST0. MOV $ACTHD,-(R1) ;SET SIG. EVENT FOR THIS CPU'/ BR 70$ ;EXIT THRU NOTIFICATION CODE +060$: MOV R0,-(R1) ;SET RESCHEDULE REQUESTT12;RB3; AT THIS POINT IN A MULTIPROCESSOR SYSTEM, WE HAVE JUST CHANGEDD4; THE RESCHEDULE POINTER FOR SOME PROCESSOR. WE WANT TO INTERRUPT#5; HIM TO INFORM HIM OF THAT FACT. 6; 7870$: CMP $RQSCH,R1 ;IS IT US? 9 BEQ 80$ ;IF EQ YES: MTPS #PR7 ;INHIBIT DEADLOCK; LOCK$ $FORKL,SPIN;< BIS $BTMSK-$RQTAB(R1),$IIPND ;SHOW SOMEONE NEEDS SERVICEE= ULOCK$ $FORKL,SPIN > MTPS #0?80$: MOV (SP)+,R2 ;RESTORE R2T @ RETURNI A .DSABL LSBBC .ENDCDEF;+>G; **-$SETMG/$SETFG-SET EVENT FLAG AND UNLOCK IF GROUP GLOBALH;MBI; THESE ROUTINES SET AN EVENT FLAG AND TAKE CARE OF THE REQUIREDAJ; SCHEDULING. IF THE EVENT FLAG WAS GROUP GLOBAL, THE USE COUNT AK; FOR THAT FLAG'S GROUP GLOBAL CONTROL BLOCK IS DECREMENTED. IFM@L; THE CONTROL BLOCK IS MARKED FOR DELETE AND THE COUNT GOES TO!M; ZERO, IT WILL BE DEALLOCATED.DN;V O; INPUTS:KP;R>Q; R0=EVENT FLAG NUMBER ($SETFG) OR EVENT FLAG MASK ($SETMG).-R; R1=EVENT FLAG WORD ADDRESS ($SETMG ONLY)./S; R5=TCB ADDRESS FOR WHICH FLAG IS BEING SET. T; U; OUTPUTS:V;H-W; R0=TCB ADDRESS OF TASK WHOSE FLAG WAS SET X; R3 IS PRESERVED.Y;GZ;-[ \ .ENABL LSBR])^$SETMG::CALL $SETM ;SET THE EVENT FLAG _ BR 5$ ;JOIN COMMON CODE )`$SETFG::CALL $SETF ;SET THE EVENT FLAGMa5$: ;REFERENCE LABELUbc .IF DF G$$GEFd,e BNE 15$ ;IF NE FLAG WAS COMMON OR GLOBALf5g DECB T.GGF(R5) ;DECR GRP GLOBAL USE COUNT FOR TASKT:h ADD #,R1 ;POINT TO GROUP GLOBAL USE COUNT2i ASR R1 ;SHIFT OFF POSSIBLE SECOND GRP GBL FLAG4j00dvutkTADATADATADATADATADATA SBC R1 ;IF IT WAS SET SUBTRACT ONE WHICH BECOMES.k ASL R1 ;THREE WHEN JOINED WITH THE ASR/ASL.l DEC (R1) ;DECREMENT GROUP GLOBAL USE COUNT1m BNE 15$ ;IF NE THESE EVENT FLAGS STILL IN USES8n BITB #GS.DEL,-(R1) ;FLAGS MARKED FOR DELETE? (G.STAT)o BEQ 15$ ;IF EQ NO !p MOV R0,-(SP) ;SAVE TCB ADDRESS q MOV R3,-(SP) ;SAVE R3r MOV R4,-(SP) ;SAVE R4*s MOVB -(R1),R4 ;GET GROUP NUMBER (G.GRP)6t CALL $SRGEF ;FIND THESE FLAGS IN GROUP GLOBAL LIST8u CALL $ELGEF ;ELIMINATE THIS GROUP GLOBAL CONTROL BLKv MOV (SP)+,R4 ;RESTORE R4Bw MOV (SP)+,R3 ;RESTORE R3N$x MOV (SP)+,R0 ;RESTORE TCB ADDRESSyz .ENDC ; DF G$$GEF{ |15$: RETURN$} ~ .DSABL LSBT;+!; **-$SETF/$SETM-SET EVENT FLAGS;EB; THESE ROUTINES SET AN EVENT FLAG AND TAKE CARE OF THE REQUIRED; RESCHEDULING.M;, ; INPUTS:3;M<; R0=EVENT FLAG NUMBER ($SETF) OR EVENT FLAG MASK ($SETM).,; R1=EVENT FLAG WORD ADDRESS ($SETM ONLY)./; R5=TCB ADDRESS FOR WHICH FLAG IS BEING SET.U;B ; OUTPUTS:;M-; R0=TCB ADDRESS OF TASK WHOSE FLAG WAS SETO; R1=EVENT FLAG WORD ADDRESS; R3 IS PRESERVED.;;.; IF GROUP GLOBAL EVENT FLAGS ARE SUPPORTED:*; Z=0 IF LOCAL OR COMMON EVENT FLAG SET'; Z=1 IF GROUP GLOBAL EVENT FLAG SET ; ;-=$SETF:: CALL $CEFI ;CONVERT EVENT FLAG TO MASK AND ADDRESS30$SETM:: CLR -(SP) ;CLR GROUP GLOBAL INDICATOR- MOV R1,-(SP) ;SAVE EVENT FLAG WORD ADDRESSE2 BIC #1,R1 ;CLEAR GROUP GLOBAL SECOND WORD FLAGC BIT #T2.ABO!T2.HLT,T.ST2(R5) ;TASK EXITING OR MARKED FOR ABORT ?W4 BNE 10$ ;IF NE YES, DO NOT TOUCH EVENT FLAG WORD# BIS R0,(R1) ;SET THE EVENT FLAGP.10$: MOV R5,R0 ;COPY TCB ADDRESS FOR $SETCR' TST R1 ;WAS AN EVENT FLAG SPECIFIEDI% BEQ 19$ ;IF EQ NO, DON'T SCHEDULE. CMP R1,#$COMEF+2 ;IS IT A COMMON EVENT FLAG BLOS 20$ ;IF LOS YES" SUB R5,R1 ;IS IT GROUP GLOBAL? BLO 15$ ;IF LO YES! SUB #T.EFLG+2,R1 ;IS IT LOCAL? BLE 18$ ;IF LE YES515$: DEC 2(SP) ;INDICATE SETTING GROUP GLOBAL FLAG( BR 20$ ;JOIN COMMON CODE18$: ;REF LABEL0 BIT #T2.SEF,T.ST2(R0) ;TASK IN STOPFOR STATE? BNE 185$ ;IF NE YESF, TSTB T.TIO(R0) ;OUTSTANDING BUFFERED I/O?& BEQ 30$ ;IF EQ NO, DON'T UNSTOP IT1 BIT #T2.WFR!,T.ST2(R0) ;TASK IN WFR?& BEQ 30$ ;IF EQ NO, DON'T UNSTOP ITB185$: BIT T.EFLM(R0),@T.EFLM+2(R0) ;STOPFOR CONDITION SATISFIED?& BEQ 30$ ;IF EQ NO, DON'T UNSTOP IT MOV R3,-(SP) ;SAVE R3 MOV R0,-(SP) ;SAVE TCBC/ CALL $EXRQN ;UNSTOP AND REQUEST TASK TO RUNB MOV (SP)+,R0 ;RESTORE TCB MOV (SP)+,R3 ;RESTORE R3S719$: TST $SIGFL ;TASK WAITING FOR SIGNIFICANT EVENT?  BEQ 30$ ;IF EQ NO .20$: CALL $DRDSE ;DECLARE SIGNIFICANT EVENT BR 40$ ;JOIN COMMON CODE130$: CALL $SETCR ;FORCE CONDITIONAL REDISPATCH$440$: MOV (SP)+,R1 ;RESTORE EVENT FLAG WORD ADDRESS3 INC (SP)+ ;CLEAN STACK AND SET Z-BIT FOR RETURN$  RETURN ;N;+7; **-$DCAST-DECLARE COMMAND ARRIVAL AST TRAP FOR CLIS;LA; THIS ROUTINE IS CALLED BY THE COMMAND QUEUEING ROUTINE $QCPKTE;; WHEN IT IS QUEUEING A COMMAND TO A CLI TASK. IF THE CLIW@; HAS SPECIFIED THE COMMAND ARRIVAL AST, AN ATTEMPT IS MADE TOA; ALLOCATE A NEW AST BLOCK FROM THE POOL. THIS IS DONE IN ORDER@; TO ELIMINATE THE WINDOW THAT OCCURS WHEN THE AST BLOCK WOULD<; NORMALLY BE UNLINKED FROM T.SAST AND LINKED INTO T.ASTL.D; IT WOULD BE UNACCEPTABLE FOR A CLI TO LOSE A COMMAND DURING THISA; WINDOW. IF THE ALLOCATION FAILS HOWEVER, THE CURRENT EXISTINGEC; AST BLOCK IS USED. THE WORD AT A.PRM+2 IN THE AST BLOCK IS USEDED; AS A FLAG TO THE SYSXT CODE TO INFORM IT IF IT SHOULD DEALLOCATE; OR RELINK THE AST BLOCK.; ; INPUTS:A;N; R0=TCB ADDRESS OF CLI ; R1=ADDRESS OF COMMAND BUFFER;E ; OUTPUTS:;C6; C=1 IF THE TASK IS NOT SETUP FOR THE SPECIFIED AST8; C=0 IF THE TASK IS SETUP FOR THE AST AND THE AST HAS; BEEN DECLARED(; R1=ADDRESS OF THE AST CONTROL BLOCK;A;- .IF DF A$$CLI!$DCAST::SAVNR 00dvcvtbl ;SAVE R4 AND R5T MOV #AS.CAA,R4 ;SET AST TYPEC% MOV R0,R5 ;COPY CLI'S TCB ADDRESSC# MOV R1,R3 ;COPY COMMAND ADDRESSA .IFF ;A$$CLI  $DCAST==-1 .ENDC ;A$$CLI;+; **-$DASTT-DECLARE AST TRAP; E; THIS ROUTINE IS CALLED TO DECLARE A NON-I/O RELATED AST TRAP. THETG; TCB OF THE SPECIFIED TASK IS EXAMINED TO DETERMINE IF THE SPECIFIEDS>; AST IS ENABLED (SETUP). IF IT IS THEN THE AST IS DECLARED.; ; INPUTS:;F+; R3=COMMAND ADDRESS IF AST TYPE = AS.CAAD4; R4=CODE INDICATING WHICH AST SHOULD BE DECLARED.=; R5=ADDRESS OF THE TCB OF THE TASK TO DECLARE THE AST FOR.; ; OUTPUTS:;7; C=1 IF THE TASK IS NOT SETUP FOR THE SPECIFIED AST.$G; C=0 IF THE TASK IS SETUP FOR THE AST AND THE AST HAS BEEN DECLARED.-); R1=ADDRESS OF THE AST CONTROL BLOCK.S;I); NOTE: R4 IS DESTROYED BY THIS ROUTINEC;-  .ENABL LSBD6$DASTT::CALL $SRAST ;SEARCH FOR SPECIFIED AST BLOCK! BCS 10$ ;IF CS, THERE IS NONEE  .IF DF A$$CLI :  CMP A.CBL(R0),# ;DECLARING CMD ARRIVAL AST  BNE 1$ ;IF NE NO2  MOV R1,-(SP) ;SAVE POINTER TO AST BLOCK ADDRESS- MOV #C.LGTH,R1 ;GET LENGTH OF AN AST BLOCKS+ CALL $ALOCB ;ALLOCATE ONE FROM THE POOLF5 MOV (SP)+,R4 ;RESTORE POINTER TO AST BLOCK ADDRESSR2 MOV (R4),R1 ;GET ADDRESS OF EXISTING AST BLOCK* BCC 105$ ;IF CC, SUCCESSFUL ALLOCATION8 MOV SP,A.PRM+2(R1) ;NON-ZERO TO FORCE SYSXT TO RELINK, MOV (R1),(R4) ;REMOVE AST BLOCK FROM LIST  BR 107$ ;D-105$: MOV R1,R4 ;COPY POINTER TO OLD BLOCKD& MOV R0,R1 ;COPY NEW AST BLOCK ADDR# CMP (R4)+,(R0)+ ;SKIP LINK WORDS  MOV (R4)+,(R0)+ ;COPY A.CBL MOV (R4)+,(R0)+ ;COPY A.BYT MOV (R4)+,(R0)+ ;COPY A.AST MOV (R4)+,(R0)+ ;COPY A.NPR5 CLR A.PRM+2(R1) ;ZERO TO FORCE SYSXT TO DEALLOCATE,:107$: MOV R3,A.PRM(R1) ;SET COMMAND ADDRESS IN AST BLOCK% MOV R5,R0 ;SET TCB ADDRESS OF CLI+  BR $QASTT ;QUEUE AST!1$: "# .ENDC ;A$$CLI$%:& CMPB A.CBL+1(R0),#AS.REA ;IS THIS A REQUESTED EXIT AST?' BNE 2$ ;IF NE NO8( BIS #T2.REX,T.ST2(R5) ;INDICATE AST HAS BEEN DECLARED;)2$: MOV (R0),(R1) ;REMOVE THE CONTROL BLOCK FROM THE LISTM4* MOV R0,R1 ;SAVE ADDRESS OF THE AST CONTROL BLOCK+ MOV R5,R0 ;COPY TCB ADDRESSN,-. .IF DF C$$INT/0 BR $QASTT ;GO QUEUE THE AST012;+03; **-$DQAC-DEQUEUE AST BLOCK QUEUED BY $QASTC.#4; (TO BE CALLED FROM SYSXT ONLY).5;Q 6; INPUT:7; R0 POINTER TO AST BLOCK$8; 9; OUTPUT:P-:; A.CBL SET TO 1 TO INDICATE AST BLOCK FREE ;; (NOT IN AST QUEUE).O<;B=; REGISTERS ALTERED: NONEE>;-?@,A$DQAC:: INC A.CBL(R0) ; SET AST BLOCK FREE B RETURNRCDE;+ F; **-$QASTC-QUEUE AST TO TASK.G;CAH; THIS IS A VARIANT OF $QASTT TO BE USED BY A TASK ISR, ENTERED$6I; VIA A VECTOR CONNECTED TO VIA THE CINT$ DIRECTIVE.J;$ K; INPUT:#L; R5 POINTER TO FORK BLOCK IN ITB M;L N; OUTPUT:T?O; CC-C 0 IF OK, 1 IF AST ADDRESS NOT SPECIFIED IN CINT$ CALL.P;P;Q; NOTE - IF THE AST BLOCK IS ALREADY QUEUED FOR THE TASK,T(R; NO ACTION IS TAKEN. RETURN CC-C = 0.S;N"T; REGISTERS ALTERED: R0,R1,R2,R3U;-VWX$QASTC::MOV R5,R1T&Y ADD #X.AST-X.FORK,R1 ;GET AST BLOCK1Z TST A.CBL(R1) ;AST BLOCK ALREADY IN AST QUEUE? #[ BEQ 10$ ;Y - EXIT WITH CC-C = 0(\ TST A.AST(R1) ;AST ADDRESS SPECIFIED?] SEC ;ASSUME NO #^ BEQ 10$ ;N - EXIT WITH CC-C = 1I+_ CLR A.CBL(R1) ;INDICATE AST BLOCK IN USE +` MOV X.TCB-X.FORK(R5),R0 ;GET TCB ADDRESSa ;FALL THRU TO $QASTTbc .ENDCdef;+g; **-$QASTT-QUEUE AST TO TASKKh;EFi; THIS ROUTINE IS USED TO QUEUE AN AST TO A TASK AND INSURE THE TASKHj; WILL BE SCHEDULED AND RECONSIDERED FOR ELIGIBILITY IN THE PARTITION.k;; l; INPUTS:Em;N)n; R0=TCB ADDRESS OF TASK TO RECEIVE AST-.o; R1=ADDRESS OF AST CONTROL BLOCK TO BE USEDp;S q; OUTPUTS:r;s; C=0 t; R1 IS PRESERVED u;-v4w$QASTT::ADD #T.ASTL,R0 ;POINT TO TASK AST LISTHEAD2x MOV R1,-(SP) ;SAVE ADDRESS OF AST CONTROL BLOCK2y CALL 00dvutkTADATADATADATADATADATA$QINSF ;INSERT CONTROL BLOCK IN AST QUEUE,z SUB #T.ASTL,R0 ;POINT BACK TO TCB ADDRESS{;+|; ** W A R N I N G **D};R~; SPM HOOKPOINT NUMBER 08.;N+; DO NOT CHANGE THE INSTRUCTION FOLLOWINGO; LABEL WITHOUT CHECKING SPM;--$SPH08==. ;SPM CHANGES THE INSTRUCTION ATO! ;THE LOCATION OF THIS LABELS2 CALL @#$SETCR ;SET CONDITIONAL SCHEDULE REQUEST* BIT #T2.STP,T.ST2(R0) ;IS TASK STOPPED? BEQ 5$ ;IF EQ NO& MOV T.PCB(R0),R0 ;POINT TO TASK PCB* CALL $NXTSK ;REALLOCATE TASK PARTITION55$: MOV (SP)+,R1 ;RESTORE AST CONTROL BLOCK ADDRESSD CLC ;RETURN CARRY CLEAR10$: RETURN ;P  .DSABL LSBB;+.; **-$SRAST-SEARCH FOR A SPECIFIED AST BLOCK; J; THIS ROUTINE IS CALLED TO SEARCH FOR A SPCIFIC TYPE OF AST CONTROL BLK;A ; INPUTS:E;T7; R4=CODE INDICATING TYPE OF BLOCK TO BE SEARCHED FORE<; R5=TCB ADDRESS OF TASK WHOSE SAST LIST IS TO BE SEARCHED; ; OUTPUTS:;M/; C=1 IF SPECIFED TYPE OF AST BLOCK NOT FOUNDK/; C=0 IF SPECIFIED TYPE OF AST BLOCK IS FOUND;; R0=ADDRESS OF THE BLOCK-; R1=ADDRESS OF WORD POINTING TO THE BLOCKR;-%$SRAST::MOV R5,R0 ;GET TCB ADDRESSS7 ADD #T.SAST,R0 ;POINT TO SPECIFIED AST BLOCK ADDRESSE10$: SEC ;ASSUME FAILURE( MOV R0,R1 ;GET POINTER TO NEXT BLOCK MOV (R0),R0 ;GET LINK WORD BEQ 20$ ;IF EQ, END OF LIST ? CMPB R4,A.CBL+1(R0) ;IS THIS THE BLOCK OF THE SPECIFIED TYPED BNE 10$ ;NO IF NE 20$: RETURNS;+'; **-$SRPRO-SEARCH PROTOTYPE TCB LISTE;DD; THIS ROUTINE IS CALLED TO SCAN THE SECONDARY POOL TCB LIST FOR AE; SPECIFIC TASK NAME. IF THE SEARCH SUCCEEDS, THEN THE ADDRESS OF ACE; KISAR5 BIAS, WITH THE LOW BIT OF THE ADDRESS SET TO DIFFERENTIATEF; IT FROM A POOL TCB ADDRESS, IS RETURNED. IF THE SEARCH FAILS, THENA; THE ROUTINE DROPS INTO $SRSTD TO SEARCH THE PRIMARY TCB LIST.C;4 ; INPUTS:;;I-; R3=ADDRESS OF THE TASK NAME TO SEARCH FOR ;F ; OUTPUTS:;S.; C=1 IF THE TASK IS NOT IN EITHER TASK LIST; C=0 IF TASK WAS FOUNDE(; R0=ADDRESS OF TCB IN POOL (IF EVEN)2; R0=ADDRESS OF KISAR5 BIAS OF TCB ! 1 (IF ODD);-$SRPRO:: ;REFERENCE LABEL5 .IF DF P$$OOL. CALL CLIDSP ;CHECK IF TASK NAME WAS CLI...( MOV KISAR6,-(SP) ;SAVE APR 6 FOR SCAN. MOV $PTCBL,KISAR6 ;MAP TO FIRST TCB IN LIST  BEQ 30$ ;IF EQ THERE IS NONE@10$: CMP (R3),140000+T.NAM ;MATCH ON FIRST HALF OF TASK NAME ? BNE 20$ ;IF NE NOU6 CMP 2(R3),140002+T.NAM ;LUCKY SO FAR, SECOND HALF ?" BEQ 40$ ;IF EQ YES, THIS IS IT820$: MOV 140000+T.TCBL,KISAR6 ;MAP TO NEXT TCB IN LIST" BNE 10$ ;IF NE NOT END OF LIST630$: MOV (SP)+,KISAR6 ;PUT APR 6 BACK AS WE FOUND IT BR SCNSTD ;AND TRY THE STD540$: MOV #$PTCPT,R0 ;POINT TO THE PROTO TCB POINTER % MOV KISAR6,(R0) ;STORE KISAR6 BIASO4 INC R0 ;INDICATE KISAR5 POINTER, NOT TCB ADDRESS- MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPINGL& RETURN ;C IS CLR DUE TO CMP ABOVE .ENDC ;DF P$$OOLA;+*; **-$SRSTD-SEARCH SYSTEM TASK DIRECTORY;SI; THIS ROUTINE IS CALLED TO SEARCH THE TASK DIRECTORY FOR A TASK OF THE$; SPECIFIED NAME.I; ; INPUTS:+;R.; R3=ADDRESS OF THE TASK NAME TO SEARCH FOR.;T ; OUTPUTS:;M'; C=1 IF SPECIFIED TASK IS NOT FOUND.N#; C=0 IF SPECIFIED TASK IS FOUND.6; R0=ADDRESS OF THE TCB.K; ,; R1,R2, AND R3 ARE PRESERVED ACROSS CALL.;-  .ENABL LSBL($SRSTD::CALL CLIDSP ;CHECK FOR CLI...3SCNSTD: MOV $TSKHD,R0 ;POINT TO FIRST TCB IN LISTR410$: CMP T.NAM(R0),(R3) ;FIRST HALF OF NAME MATCH? BNE 20$ ;IF NE NO 4 CMP T.NAM+2(R0),2(R3) ;SECOND HALF OF NAME MATCH? BEQ 30$ ;IF EQ YES.20$: MOV T.TCBL(R0),R0 ;GET LINK TO NEXT TCB TST T.TCBL(R0) ;NULL TASK?= BNE 10$ ;IF NE NON25$: SEC ;INDICATE FAILURE30$: RETURN ;;RF; **-CLIDSP-LOCAL ROUTINE TO CHECK IF SUPPLIED TASK NAME IS "CLI...";E; THIS ROUTINE IS CALLED BY EITHER $SRPRO OR $SRSTD TO CHECK IF THEO@; TASK THEY ARE TRYING TO FI00dvcvtblND IS THE CLI DISPATCHER "CLI...".A; IF IT IS, THE ADDRESS OF MCR... IS PUT IN R0, AND A RETURN TO2?; THE CALLER'S CALLER IS EXECUTED. OTHERWISE, A RETURN TO THE@; APPROPRIATE SCAN ROUTINE IS EXECUTED TO SEARCH THE LIST. ALLJ; THIS IS BEING DONE SINCE THERE IS NO ACTUAL CLI... TASK IN THE SYSTEM.G; CLI... IS INTENDED TO BE USED FROM SPWN$ OR RPOI$ TO PASS A COMMANDSE; LINE TO THE TERMINAL'S CLI, WHEREAS MCR... WILL FORCE THE COMMANDR); TO MCR, REGARDLESS OF CLI ASSIGNMENT. ;G ; INPUTS:H; ; R3=ADDRESS OF TASK NAMEI ; ; OUTPUTS: ;.= ; IF THE NAME WAS CLI..., THE TCB ADDRESS IS RETURNED IN R0E% ; WITH C=0 TO THE CALLER'S CALLER. C; IF THE NAME WAS NOT CLI..., A RETURN TO THE CALLER IS EXECUTED.S;E;-/CLIDSP: CMP #^RCLI,(R3) ;SEARCHING FOR CLI.... BNE 35$ ;IF NE NOD  CMP #^R...,2(R3) ;MAY HAVE IT BNE 35$ ;IF NE NOI# MOV $MCRPT,R0 ;USE TCB OF MCR....3 TST (SP)+ ;POP FIRST RETURN ADDRESS AND SET C=0 35$: RETURN ;+3; **-$ACTRM-REMOVE TASK FROM THE ACTIVE TASK LIST;UE; THIS ROUTINE IS CALLED TO REMOVE A TCB FROM THE ACTIVE TASK LIST.N; ; INPUTS:  ;E$!; R0=ADDRESS OF THE TCB TO REMOVE."; #; OUTPUTS:$; D%; C=1 IF THERE IS NO ENTRY IN THE LIST THAT MATCHES THE TCB ADDRES5&; C=0 IF A MATCHING ENTRY IS REMOVED FROM THE LIST.R';($(; R0 IS PRESERVED ACROSS THE CALL.);*;-+5,$ACTRM::MOV #$ACTHD-T.ACTL,R1 ;GET ADDR OF LISTHEADR)-40$: MOV R1,R2 ;SAVE PREVIOUS TCB ADDR'. MOV T.ACTL(R2),R1 ;GET NEXT TCB ADDRA$/ BEQ 25$ ;IF EQ END OF LIST FOUND*0 CMP R0,R1 ;DOES NEXT TCB ADDR EQ OURS?%1 BNE 40$ ;IF NE NO -- KEEP LOOKING*2 MOV T.ACTL(R0),T.ACTL(R2) ;REMOVE ENTRY3 RETURN ;EXIT 4 .DSABL LSBE56;+(7; **-$SRMUT-SEARCH FOR MULTI-USER TASK8; F9; THIS ROUTINE CALCULATES THE NAME OF A MULTI-USER TASK ACCORDING TOC:; THE NAME OF THE PROTOTYPE TCB AND THE TI: OF THE COPY. IT THENRB;; SEARCHES FOR THE COPY OF THE MULTI-USER TASK IN THE TASK LIST.<;M =; INPUTS:,>;E@?; R0=ADDRESS OF THE TI: UCB OF THE COPY OF THE MULTI-USER TASK:@; R1=FIRST WORD OF THE TASK NAME OF THE COPY OF THE TASKA;O B; OUTPUTS:C;T<D; R3=PTR TO CALCULATED TASK NAME (IN $TNAME AND $TNAME+2).E;.F; C=0 IF THE COPY WAS FOUND IN THE TASK LISTG; R0=ITS TCB ADDRESSEH;U2I; C=1 IF THE COPY WAS NOT FOUND IN THE TASK LISTJ;-KLM .IF DF R$$DSPN4O$SRMUT::MOV R1,$TNAME ;SET FIRST WORD OF TASK NAME%P CLR -(SP) ;ALLOCATE SCRATCH SPACEL!Q MOV (R0),R2 ;POINT TO TI: DCB *R TST (R2)+ ;SKIP OVER LINK WORD (D.LNK)5S SUB (R2)+,R0 ;CALC RELATIVE ADDRESS OF UCB (D.UCB) 3T MOV (R2)+,-(SP) ;PUSH DEVICE NAME OF TI: (D.NAM)39U MOV (R2)+,-(SP) ;SAVE LOW UNIT NUMBER FOR DCB (D.UNIT)-V MOV (R2),R1 ;PICK UP SIZE OF UCB (D.UCBL)T4W CALL $DIV ;CALCULATE RELATIVE UNIT NUMBER OF UCB6X ADD (SP)+,R0 ;CALCULATE LOGICAL UNIT NUMBER OF UNIT"Y BIC #177400,R0 ;CLEAR HIGH BYTE(Z CMP R0,#77 ;IS UNIT GREATER THAN 77?[ BLOS 9$ ;IF LOS NO\ MOV R0,R1 ;COPY UNIT NUMBER .] ASH #-3,R1 ;CALCULATE HIGH ORDER CHARACTER"^ ADD #'A-10,R1 ;CONVERT TO ASCII0_ BIC #177770,R0 ;CALCULATE LOW ORDER CHARACTER ` ADD #'0,R0 ;CONVERT TO ASCII a BR 15$ ;"b9$: MOV R0,R1 ;COPY UNIT NUMBER)c BIC #70,R0 ;MASK OFF HIGH-ORDER DIGITC&d ADD #'0,R0 ;CONVERT TO ASCII DIGIT'e ASRB R1 ;CALCULATE HIGH-ORDER DIGITU f ASRB R1 ;I g ASRB R1 ;T.h BNE 10$ ;IF NE THERE IS A HIGH-ORDER DIGIT,i MOV R0,R1 ;ELSE SUPPRESS HIGH-ORDER ZERO j BR 20$ ;*k10$: ADD #'0,R1 ;CONVERT TO ASCII DIGIT%l15$: MOVB R0,2(SP) ;STORE LOW DIGITD,m20$: MOVB R1,1(SP) ;STORE IN SCRATCH SPACE'n MOV SP,R0 ;POINT TO ASCII TASK NAME#%o CALL $CAT5 ;CONVERT TO RAD50 WORDp CMP (SP)+,(SP)+ ;CLEAN STACKR3q MOV #$TNAME,R3 ;POINT TO TASK NAME AREA IN SYSCM#-r MOV R1,2(R3) ;SET SECOND WORD OF TASK NAMEL1s CALLR $SRSTD ;SEARCH FOR TASK NAME AND RETURN1tu;+v; **-$TCBCP-TCB COPY ROUTINEw;DEx; THIS ROUTINE IS CALLED TO COPY AN INSTALLED TCB INTO AN ALLOCATE00dvutkTADATADATADATADATADATAD:Ey; TCB AND LINK IT INTO TO THE SYSTEM TASK DIRECTORY. SPECIFICALLY,I$z; THIS ROUTINE DOES THE FOLLOWING:{;HH|; 1. COPY THE CONTENTS OF THE INSTALLED TCB INTO THE ALLOCATED TCB.8}; 2. INITIALIZE ALL LISTHEADS IN THE ALLOCATED TCB.C~; 3. TRANSFER ANY SEND PACKETS DESTINED FOR THE ALLOCATED TCB.C.; 4. SET UP THE TASK NAME IN THE NEW TCB.E; 5. LINK THE NEW TCB INTO THE SYSTEM TASK DIRECTORY IMMEDIATELY7; AFTER THE TCB INPUT AS THE PROTOTYPE INSTALLED TCB.N; ; INPUTS:; #; R0=ADDRESS OF THE ALLOCATED TCBI#; R1=ADDRESS OF THE INSTALLED TCBU@; IF R1 IS ODD, THEN R1-1 IS THE ADDRESS OF THE KISAR6 BIAS,; OF A PROTOTYPE TCB IN SECONDARY POOL.A; R3=ADDRESS OF THE TASK NAME DOUBLE-WORD FOR THE ALLOCATED TCBF;Y ; OUTPUTS:;N; R0 AND R1 ARE PRESERVED.;-!$TCBCP::SAVNR ;SAVE R4 AND R5 .IF DF P$$OOL0 MOV KISAR6,-(SP) ;SAVE CURRENT KERNEL MAPPING) BIT #1,R1 ;IS TCB IN SECONDARY POOL ?L BEQ 3$ ;IF EQ NO DEC R1 ;POINT BACK TO BIAS* MOV (R1),KISAR6 ;REMAP TO SEC. POOL TCB1 MOV (R1),(R0)+ ;STORE KISAR6 BIAS IN T.LNK FOR ( ;POSSIBLE ERROR RECOVERY BY $REMOV/ MOV #140000,R1 ;POINT TO TCB VIRTUAL ADDRESS  BR 4$ ;ENTER COMMON CODE .ENDC ;DF P$$OOL23$: CLR (R0)+ ;CLEAR AND SKIP LINK WORD (T.LNK):4$: MOVB T.DPRI(R1),(R0)+ ;INIT RUNNING PRIORITY (T.PRI)& CLRB (R0)+ ;INIT I/O COUNT (T.IOC)< MOV T.PCBV(R1),(R0)+ ;COPY POINTER TO PCB VECTOR (T.PCBV) BEQ 5$ ;IF EQ THERE IS NONE 9 ADD #400,@T.PCBV(R1) ;INCREMENT ACCESS COUNT IN VECTOR.5$: MOV (R3)+,(R0)+ ;STORE TASK NAME (T.NAM) MOV (R3),(R0)+ ;O3 ADD #T.RCVL,R1 ;POINT TO INSTALLED TCB RCVD LIST ! CALL 40$ ;SETUP RECEIVE QUEUEC10$: ;MARK T.RCVL CALLP  CALL @(SP)+ ;SETUP AST QUEUE' CLR (R0)+ ;CLEAR EFN WORDS (T.EFLG)T CLR (R0)+ ;I9 CMP (R0)+,(R0)+ ;POINT TO STATUS WORDS (T.UCB)(T.TCBL)C5 MOV #TS.EXE,(R0)+ ;INIT FIRST STATUS WORD (T.STAT)P= ADD #T.ST2-T.EFLG,R1 ;POINT TO INSTALLED TCB 2ND STAT WORD02 MOV (R1)+,(R0) ;COPY SECOND STATUS WORD (T.ST2)? BIC #^CT2.CHK,(R0)+ ;CLEAR ALL BUT CHECKPOINTABILITY (T.ST2)O1 MOV (R1)+,(R0) ;COPY THIRD STATUS WORD (T.ST3)S> BIC #T3.REM!T3.MCR!T3.CAL,(R0)+ ;CLR NECESSARY BITS (T.ST3)$ MOV (R1)+,(R0)+ ;(T.DPRI & T.LBN) MOV (R1)+,(R0)+ ;(T.LBN+1)S MOV (R1)+,(R0)+ ;(T.LDV), MOV (R1)+,R2 ;PICK UP PCB ADDRESS (T.PCB)0 MOV P.MAIN(R2),(R0)+ ;SET PCB POINTER (T.PCB) MOV (R1)+,(R0)+ ;(T.MXSZ) CMP (R1)+,(R0)+ ;(T.ACTL)+ CALL @(SP)+ ;SET UP ATTACHMENT LISTHEADP- MOV (R1)+,(R0) ;FOURTH STATUS WORD (T.ST4)(6 BIC #T4.PRO!T4.RIN,(R0)+ ;CLEAR NON-PROPAGATED BITS3 MOV (R1)+,(R0)+ ;HDR LENGTH/UNUSED BYTE (T.HDLN)35 CLR (R0)+ ;GRP GBL USE/BUFFERED I/O (T.GGF,T.TIO) TST (R1)+ ;POINT TO T.EFLM: MOV (R1)+,(R0)+ ;COPY POSSIBLE CPU TIME LIMIT IN T.EFLM MOV (R1)+,(R0)+ ;SECOND HALFB .IF DF A$$CNT9 BIT #TS.EXE,T.STAT-T.TKSZ(R1) ;IS SOURCE TASK ACTIVE ?+ BNE 15$ ;IF NE, NO0 CLR -2(R0) ;YES, THEN DON'T COPY (T.EFLM+2). CLR -4(R0) ;EVENT FLAG MASKS (T.EFLM)15$: ;REFERENCE LABEL .ENDC ; DF A$$CNT3 MOV (R1)+,(R0)+ ;TASK INITIAL LOAD SIZE (T.TKSZ)E$$$=T.TKSZ+2 .IF DF P$$LAS, MOV (R1)+,(R0)+ ;COPY OFFSET WORD (T.OFF)1 CLR (R0)+ ;CLR SREF WITH EFN COUNT (T.SRCT-1)L, TST (R1)+ ;ADVANCE INSTALLED TCB POINTER5 CALL @(SP)+ ;SET UP RECEIVE BY REFERENCE LISTHEADK20$: ;MARK T.RRFL CALL .$$$=T.RRFL+4 ;MARK CURRENT POSITION IN TCB .ENDC .IF DF N$$DIR4 CLR (R0) ;POINTER TO CONTEXT BLOCK (DDS) (T.CTX)* CMP (R0)+,(R1)+ ;INCREMENT TCB POINTERS $$$=T.CTX+2A .ENDC ; DF N$$DIR .IF DF P$$OFF# CALL @(SP)+ ;SETUP OCB LISTHEAD0! CLR (R0) ;CLEAR RUNDOWN COUNTR( CMP (R0)+,(R1)+ ;ADVANCE TCB POINTERS .ENDC CLR (R0) ;CLEAR T.SAST,$$$=T.SAST ;MARK CURRENT POSITION IN TCB .IF DF M$$PRO1 CMP (R0)+,(R1)+ ;ADVANCE TCB POINTERS T00dvcvtblO T.RRMO* MOV (R1)+,(R0)+ ;COPY REQUIRED RUN MASK1 MOV (R1)+,(R0)+ ;COPY INITIAL AFFINITY (T.IRM)D* CLR (R0) ;CLEAR CPU ID AND UNUSED BYTE $$$=T.CPU .ENDC .IF DF A$$CNT1 CMP (R0)+,(R1)+ ;ADVANCE TCB POINTERS TO T.ACNB/ CLR (R0) ;CLEAR POINTER TO ACCOUNTING BLOCK+$$$=T.ACN ;MARK CURRENT POSITION IN TCBN .ENDC  .IF DF U$$DAS 1  CMP (R0)+,(R1)+ ;ADJUST TCB POINTERS TO T.ISIZ#  MOV (R1),(R0) ;COPY I SPACE SIZE+ $$$=T.ISIZ .ENDC ; DF U$$DAS$ SUB #$$$,R0 ;POINT BACK TO START SUB #$$$,R1 ;I .IF DF P$$OOL) CMP #140000,R1 ;TCB IN PRIMARY POOL ? BHI 30$ ;IF HI YES6 MOV #$TSKHD-T.TCBL,R2 ;POINT TO FIRST TCB IN SYSTEM+25$: MOV R2,R1 ;SAVE POINTER TO OLD TCB 0 MOV T.TCBL(R2),R2 ;POINT TO NEXT TCB IN LIST! BEQ 30$ ;IF EQ THERE IS NONEN< CMPB T.DPRI(R2),T.DPRI(R0) ;TASK BELONG BEFORE THIS TCB ?# BHIS 25$ ;IF HIS NO,KEEP GOINGR30$: ;REFERENCE LABEL= ! .ENDC ; DF P$$OOL"9# MOV T.TCBL(R1),T.TCBL(R0) ;LINK ALLOCATED TCB INTO STD$$ MOV R0,T.TCBL(R1) ;$% TST (SP)+ ;POP COROUTINE ADDRESS&' .IF DF P$$OOL(4) MOV (SP)+,KISAR6 ;RESTORE PREVIOUS KERNEL MAPPING*+ .ENDC ; DF P$$OOL, - RETURN ;P0.40$: CLR (R0) ;INIT LISTHEAD IN ALLOCATED TCB/ MOV R0,2(R0) ;012 .IF DF P$$LAS3&4 CMP (SP),#20$ ;IS IT THE RRFL LIST?5 BEQ 50$ ;IF EQ YES67 .ENDC89): CMP (SP),#10$ ;IS IT THE RECEIVE LIST?A; BNE 80$ ;IF NE NO 6< BIT #T3.NSD!T3.ACP,T.ST3-T.RCVL(R1) ;DOES TASK HAVE= ;STANDARD RECEIVE QUEUE ?R*> BNE 80$ ;IF NE, NO - DON'T TRY TO COPY?@A .IF DF P$$OOLB4C MOV R0,-(SP) ;SAVE LISTHEAD ADDRESS FOR ALLOC TCB2D MOV R1,-(SP) ;SAVE LISTHEAD ADDRESS FOR INS TCB E MOV KISAR5,-(SP) ;SAVE KISAR5)F MOV R1,R0 ;COPY INSTALLED TCB POINTER G MOV R0,R4 ;COPY POINTER;$H46$: MOV (R4),R4 ;GET NEXT PACKETI BEQ 47$ ;IF EQ END OF LIST.J MOV R4,KISAR5 ;MAP THE PACKET THROUGH APR 50K MOV @#120002,R1 ;GET NUMBER OF DATA WORDS + 2L ASL R1 ;CONVERT TO BYTES/M ADD #120010,R1 ;POINT TO TASK NAME IN PACKETO,N MOV #120000,R4 ;POINT TO PACKET LINK WORD5O CMP (R1),-2(R3) ;MATCH ON FIRST WORD OF TASK NAME?TP BNE 46$ ;IF NE NOV5Q CMP 2(R1),(R3) ;MATCH ON SECOND WORD OF TASK NAME?VR BNE 46$ ;IF NE NO $S MOV KISAR5,R1 ;GET PACKET ADDRESS/T MOV 2(SP),R0 ;GET LISTHEAD FOR ALLOCATED TCBX5U CALL $GTSPK ;UNLINK THE PACKET FROM INSTALLED TCBA%V MOV R0,R4 ;SET UP TO RESTART SCANV3W MOV 4(SP),R0 ;GET INSTALLED TCB LISTHEAD ADDRESS -X CALL $QSPIF ;AND LINK IT TO ALLOCATED TCB Y BR 46$ ;CONTINUE SCANV'Z47$: MOV (SP)+,KISAR5 ;RESTORE KISAR54[ MOV (SP)+,R1 ;RESTORE LISTHEAD ADDRESS OF INS TCB6\ MOV (SP)+,R0 ;RESTORE LISTHEAD ADDRESS OF ALLOC TCB ] BR 80$ ;^_ .ENDC`a0b50$: MOV R1,R5 ;INIT POINTER TO START OF LIST+c60$: MOV R5,R4 ;SAVE POINTER TO PREVIOUSC&d MOV (R5),R5 ;POINT TO NEXT IN LIST e BEQ 80$ ;IF EQ THERE IS NONE7f CMP 44(R5),-2(R3) ;MATCH ON FIRST WORD OF TASK NAME?Tg BNE 60$ ;IF NE NO6h CMP 46(R5),(R3) ;MATCH ON SECOND WORD OF TASK NAME?i BNE 60$ ;IF NE NO:)j MOV (R5),(R4) ;UNLINK PACKET FROM LIST(2k BNE 70$ ;IF NE IT WAS NOT THE LAST IN THE LIST,l MOV R4,2(R1) ;UPDATE LAST IN LIST POINTER!m70$: CLR (R5) ;CLEAR LINK WORD3n MOV R5,@2(R0) ;LINK TO END OF ALLOCATED TCB LIST,o MOV R5,2(R0) ;UPDATE LAST IN LIST POINTER0p MOV R1,-(SP) ;SAVE T.RRFL PTR FOR PROTO TCB0q MOV R0,-(SP) ;SAVE T.RRFL PTR FOR CREATED TCB-r MOV 10(R5),R0 ;GET REGION ID TO SEARCH FOR +s ADD #A.TCBL,R0 ;ADJUST TO LINK WORD ADDRO7t ADD #T.ATT-T.RRFL,R1 ;POINT TO PROTO ATT DESC LIST).u MOV R1,R2 ;MAKE A COPY OF LISTHEAD ADDRESS'v72$: MOV R2,R4 ;SAVE POINTER TO LAST,w MOV (R2),R2 ;GET NEXT ADBT x BEQ 74$ ;IF EQ THERE IS NONEy CMP R2,R0 ;THIS THE ONE ? z BNE 72$ ;IF NE NOS"{ MOV (R2),(R4) ;UNLINK FROM LIST#| BNE 73$ ;IF NE NOT LAST IN LIST.,} MOV R4,2(R1) ;UPDATE LAST IN LIST POINTER6~73$: MOV (SP),R0 ;RESTO00dvutkTADATADATADATADATADATARE POINTER TO CREATED T.RRFL7 ADD #T.ATT-T.RRFL,R0 ;POINT TO CREATED ATT DESC LISTO, MOV R2,@2(R0) ;INSERT IN SPAWNED ATT LIST$ MOV R2,2(R0) ;UPDATE LAST IN LIST3 MOV R0,A.TCB-A.TCBL(R2) ;CREATE POINTER IN A.TCBV. SUB #T.ATT,A.TCB-A.TCBL(R2) ;TO CORRECT TCB9 BICB #AS.PRO,A.STAT-A.TCBL(R2) ;INDICATE PRI. POOL TCBH&74$: MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R1 ;F BR 50$ ;RESTART SCAN*80$: CMP (R0)+,(R0)+ ;BUMP BOTH POINTERS CMP (R1)+,(R1)+ ;% CALL @(SP)+ ;CALL THE CALLER BACKT  BR 40$ ; .ENDC ; DF R$$DSP;+; **-$REMOV-REMOVE TASKV.; **-$REMO1-REMOVE TASK DURING ERROR CLEANUP;0F; THIS ROUTINE IS STRICTLY DESIGNED TO REMOVE A TASK, WHICH HAS BEENE; DYNAMICALLY INSTALLED BY THE EXECUTIVE-LEVEL DISPATCHING CODE, AS.B; PART OF ERROR RECOVERY BEFORE THE TASK IS EVER ACTIVATED, OR AG; TASK BEING REMOVED ON TASK EXIT. IT WILL NOT, IN GENERAL, PROPERLY0 ; REMOVE ANY OTHER GIVEN TASK.;1D; $REMO1 IS AN ALTERNATE ENTRY TO BE USED WHEN CLEANING UP AFTER AC; FALSE START, SUCH AS WHEN THE SPAWN DIRECTIVE PASSES $TCBCP BUT*D; FAILS TO START THE TASK. $REMO1 CHECKS THE UTILTITY LINK WORD TOG; SEE IF IT CONATINS THE KISAR6 BIAS OF THE PROTOTYPE TCB, AND SHOULDE@; NOT BE CALLED IF THE TCB HAS BEEN CHANGED (E.G. FROM $DREIF);E ; INPUTS: ;I); R0=TCB ADDRESS OF TASK TO BE REMOVED.V; ; OUTPUTS:; ; NONE.E;-  .ENABL LSBY$REMO1:: ;REFERENCE LABEL1 .IF DF P$$OOL# SAVNR ;SAVE NON-VOL. REGISTERS ( MOV KISAR6,-(SP) ;SAVE KERNEL MAPPING0 MOV (R0),KISAR6 ;MAP TO POSSIBLE SEC POOL TCB% BEQ 5$ ;IF EQ TCB IN PRIMARY POOL ) MOV #140000,R1 ;POINT TO PROTOTYPE TCBO CALL 15$ ;JOIN $REMOV BELOW- MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPINGE  RETURN ;)05$: MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING. BR 6$ ;SKIP SAVNR CALL IN $REMOV ; BM420 .ENDC ; DF P$$OOL!$REMOV::SAVNR ;SAVE R4 AND R5 $6$: ;REFERENCE LABEL ; BM420- CALL $DRCSR ;CANCEL ANY SCHEDULE REQUESTS," MOV R5,R0 ;RESTORE TCB ADDRESS .IF DF P$$LAS6 CALL $CLSRF ;CLEAR ANY REC BY REF PKT PTRS TO TASK .ENDC> MOV #$TSKHD-T.TCBL,R1 ;POINT TO START OF TASK LIST - T.TCBL) CMP $TSKHD,R0 ;REMOVING FIRST IN LIST?R BEQ 40$ ;IF EQ YES/10$: MOV T.TCBL(R1),R1 ;POINT TO NEXT IN LISTS, CMP T.TCBL(R1),R0 ;REMOVING NEXT IN LIST? BNE 10$ ;IF NE NOR15$: ;REFERENCE LABEL .IF DF P$$OOL6 MOV T.RCVL(R0),R2 ;ANY ENTRIES IN THE RECEIVE LIST? BEQ 30$ ;IF EQ NOO& MOV KISAR5,-(SP) ;SAVE KERNEL APR 50 MOV #120000,R4 ;POINT TO FIRST WORD OF PACKET= MOV T.RCVL+2(R1),KISAR5 ;MAP THE LAST PACKET THROUGH APR 5N0 TST T.RCVL(R1) ;PROTO TCB RECEIVE LIST EMPTY? BNE 20$ ;IF NE NOT% MOV R1,R4 ;COPY PROTO TCB ADDRESST( ADD #T.RCVL,R4 ;POINT TO RECEIVE LIST720$: MOV R2,(R4) ;LINK RECEIVE ENTRIES TO PROTO LIST 9 MOV T.RCVL+2(R0),T.RCVL+2(R1) ;FIX UP LAST IN LIST PTRL) MOV (SP)+,KISAR5 ;RESTORE KERNEL APR 5T .IFFS: MOV T.RCVL(R0),@T.RCVL+2(R1) ;LINK ENTRIES TO PROTO TCB! BEQ 30$ ;IF EQ THERE ARE NONEO9 MOV T.RCVL+2(R0),T.RCVL+2(R1) ;FIX UP LAST IN LIST PTRE .ENDC30$: ;REF LABEL .IF DF P$$LAS: MOV T.RRFL(R0),@T.RRFL+2(R1) ;LINK ENTRIES TO PROTO TCB! BEQ 40$ ;IF EQ THERE ARE NONEI9 MOV T.RRFL+2(R0),T.RRFL+2(R1) ;FIX UP LAST IN LIST PTR  .ENDC940$: MOV T.ATT(R0),@T.ATT+2(R1) ;MOVE ADBS (FROM SREFS)S" BEQ 41$ ;IF EQ THERE WERE NONE9 MOV T.ATT(R0),T.ATT+2(R1) ;UPDATE LAST IN LIST POINTER 5 MOV T.ATT(R0),R4 ;GET ADDRESS OF FIRST ADB IN LISTV5412$: CMP #120000,R1 ;PROTOTYPE IN SECONDARY POOL ? BLOS 413$ ;IF LOS YES + MOV R1,A.TCB-A.TCBL(R4) ;SET TCB ADDRESS" BR 414$ ;FINISH LOOP IN COMMON=413$: BISB #AS.PRO,A.STAT-A.TCBL(R4) ;INDICATE SEC POOL TCBV0 MOV KISAR6,A.TCB-A.TCBL(R4) ;AND FILL IN BIAS'414$: MOV (R4),R4 ;POINT TO NEXT ADB)  BNE 412$ ;IF NE THERE 00dvcvtblIS ONE<41$: MOV T.TCBL(R0),T.TCBL(R1) ;UNLINK TASK FROM TASK LIST MOV R0,R4 ;SAVE PCB ADDRESSN) MOV T.PCBV(R0),R0 ;POINT TO PCB VECTORI  BEQ 50$ ;IF EQ THERE IS NONE- MOV 2(R0),R1 ;POINT TO FIRST PCB IN VECTOR  TST P.NAM(R1) ;NAMED PCB? BNE 45$ ;IF NE YES/  CMP P.OWN(R1),R4 ;IS THIS TCB USED FOR NAME?  BNE 45$ ;IF NE NOA/  MOV $TSKHD,R2 ;POINT TO FIRST INSTALLED TASKR= 43$: CMP T.PCBV(R2),R0 ;DOES THIS TASK USE THE PCBV VECTOR?N  BEQ 44$ ;IF EQ YES2 MOV T.TCBL(R2),R2 ;POINT TO NEXT INSTALLED TASK) TST T.TCBL(R2) ;POINTING TO NULL TASK?R BNE 43$ ;IF NE NON$ CLR R2 ;POINT P.OWN TO 0 FOR NOW$44$: MOV R2,P.OWN(R1) ;RESET P.OWN145$: DECB 1(R0) ;REDUCE ACCESS COUNT IN VECTOR3 BNE 50$ ;IF NE THERE ARE STILL OTHERS INSTALLED1 MOV (R0),R1 ;ELSE PICK UP NUMBER OF PCB WORDS* MOV 2(R0),R5 ;SAVE ADDRESS OF FIRST PCB$ INC R1 ;INCREMENT FOR FIRST WORD* ASL R1 ;CONVERT TO BYTES TO DEALLOCATE& CALL $DEACB ;DEALLOCATE PCB VECTOR+ MOV R5,R0 ;RESTORE ADDRESS OF FIRST PCB( TST P.NAM(R0) ;RO SECTION OF MU TASK? BNE 50$ ;IF NE NON( CALL $DELRG ;DELETE READ ONLY REGION&50$: MOV R4,R0 ;RESTORE TCB ADDRESS) MOV #T.LGTH,R1 ;SET SIZE TO DEALLOCATEO  CALLR $DEACB ;DEALLOCATE TCB!" # .DSABL LSB$%;+C&; **-$CLSRF-CLEAR TASK TCB ADDRESS IN ALL RECEIVE BY REF PACKETS.S';F?(; THIS ROUTINE WILL SEARCH THE ACTIVE TASK LIST FOR TCBS WITHRD); RECEIVE BY REFERENCE PACKETS WHICH CONTAIN A POINTER TO THE TASK=*; BEING REMOVED. IF SUCH A POINTER IS FOUND IT IS CLEARED.S+;N ,; INPUTS:-;E).; R0=TCB ADDRESS OF TASK TO BE REMOVED.E/;L 0; OUTPUTS:1;V 2; NONE.S3;T4;-56$CLSRF:: ;REFERENCE SYMBOL789 .IF DF P$$LAS:&; MOV $TSKHD,R1 ;GET FIRST TCB IN ATL.<10$: TSTB T.SRCT(R0) ;ANY OUTSTANDING SREFS?= BEQ 40$ ;IF EQ NOP%> MOV T.TCBL(R1),-(SP) ;END OF LIST?E? BEQ 30$ ;IF EQ YES5@ ADD #T.RRFL,R1 ;POINT TO RECEIVE BY REFERENCE LISTH/A20$: MOV (R1),R1 ;GET NEXT REC BY REF PACKET.B BEQ 30$ ;IF EQ END OF LIST5C CMP 2(R1),R0 ;DOES IT POINT TO TASK BEING REMOVED?ED BNE 20$ ;IF NE NOD4E DECB T.SRCT(R0) ;DECREMENT OUTSTANDING SREF COUNT-F CLR 2(R1) ;CLEAR POINTER TO EXITTING TASK.GH .IF DF G$$GEFI)J MOV R0,-(SP) ;SAVE TCB OF EXITING TASK $K MOV R1,-(SP) ;SAVE PACKET ADDRESS,L MOV 6(R1),R3 ;GET EVENT FLAG MASK ADDRESS)M CALL $DEAGF ;DEACCESS IF GROUP GLOBALA'N MOV (SP)+,R1 ;RESTORE PACKET ADDRESSN,O MOV (SP)+,R0 ;RESTORE TCB OF EXITING TASKPQ .ENDC ; DF G$$GEFR5S MOV T.NAM(R0),4(R1) ;STORE FIRST HALF OF TASK NAMEB)T MOV T.NAM+2(R0),6(R1) ;AND SECOND HALFDU BR 20$ ;GO AGAIN4V30$: MOV (SP)+,R1 ;GET ADDRESS OF NEXT TCB IN LISTW BNE 10$ ;IF NE GO AGAIN.XY .IFTFZ[40$: RETURN ;V\] .ENDC^_`a;+Ib; **-$DRTHR/$ERTHR-DIRECTIVE ERROR AND GENERAL ERROR THREADING ROUTINESc;LCd; THESE ROUTINES ARE USED IN CONJUNCTION WITH THE FOLLOWING ERROR Ee; RECOVERY ROUTINE TO DYNAMICALLY THREAD ERROR RECOVERY INFORMATIONDAf; ONTO THE STACK. AFTER INITIALIZATION, THE INTERFACE IS VIA ABCg; COROUTINE CALL (CALL @(SP)+) FOLLOWED BY TWO ROUTINE ADDRESSES.Fh; THE FIRST ROUTINE IS CALLED AND THEN THE SECOND ROUTINE ADDRESS ISFi; PUSHED ONTO THE STACK ALONG WITH THE CONTENTS OF R0 AND R1. IT ISFj; INTENDED THAT THE SECOND ROUTINE, ALONG WITH THE SAVED CONTENTS OFCk; R0 AND R1, CAN UNDO THE ACTION OF THE FIRST ROUTINE IF AN ERROR Jl; CONDITION IS ENCOUNTERED LATER. ANOTHER POSSIBILITY IS THAT THE FIRSTJm; ROUTINE IS NULL, AND THE SECOND ROUTINE CAN UNDO SOME PREVIOUS ACTION.Gn; $DRTHR MAY BE CALLED WHEN THE FINAL DESIRED ACTION ON ERROR WILL BEJo; TO RETURN A DIRECTIVE STATUS PASSED IN R5 (IN THE FORM 'DRSTS D.RSX').Jp; $ERTHR IS A GENERAL ERROR RECOVERY THREADING ROUTINE. EXAMPLE USES OF4q; THESE ROUTINES MAY BE FOUND IN THE MODULE DRSPW.r;T s; INPUTS:At;,*u; AS REQUIRED FOR CALL TO FIRST ROUTINE.v;R w; OUTPUTS:x; ?y; C-BIT AND R0-R3 ARE PRESERVED FROM RETURN OF00dvutkTADATADATADATADATADATA FIRST ROUTINE. z; R4 IS DESTROYED.{;-|}~ .IF DF P$$OFF  .ENABL LSB)$DRTHR::MOV (SP),R4 ;PICK UP RETURN PCE9 MOV #10$,(SP) ;SET ADDRESS OF ROUTINE TO RETURN STATUSS0 CMP -(SP),-(SP) ;ALLOCATE WORDS FOR R0 AND R1* MOV R4,-(SP) ;RESTORE RETURN PC ADDRESS .IF DF K$$DAS*$ERTHR::MOV PS,R2 ;SAVE CURRENT PS WORD- BIC #PMODE,PS ;SET PREVIOUS MODE TO KERNEL  MOV (SP)+,R4 ;POP CALLING PC* MFPI (R4)+ ;PUSH FIRST ROUTINE ADDRESS- MFPI (R4)+ ;PUSH RECOVERY ROUTINE ADDRESS4 MOV R2,PS ;RESTORE PS WORD# CALL @2(SP) ;CALL FIRST ROUTINE; MOV (SP)+,(SP) ;MOVE RECOVERY ROUTINE ADDRESS INTO PLACEE .IFFR)$ERTHR::MOV (SP),R4 ;PICK UP RETURN PCL/ CALL @(R4)+ ;CALL THE FIRST ROUTINE ADDRESSO4 MOV (R4)+,(SP) ;SAVE THE RECOVERY ROUTINE ADDRESS .ENDC, MOV R1,-(SP) ;SAVE CURRENT CONTENTS OF R1, MOV R0,-(SP) ;SAVE CURRENT CONTENTS OF R0# CALL (R4) ;CALL THE CALLER BACKR BR $ERTHR ;DO IT AGAIN;10$: MOV R5,-(SP) ;PUSH DIRECTIVE STATUS TRAP INSTRUCTION  JMP (SP) ;EXECUTE TRAP  .DSABL LSB;+$; **-$ERREC-ERROR RECOVERY ROUTINE; B; THIS ROUTINE IS USED IN CONJUNCTION WITH THE ABOVE ROUTINES TOE; EFFECT A SERIES OF SUBROUTINE CALLS STORED ON THE STACK FOR ERRORSE; RECOVERY. THE NORMAL CALLING SEQUENCE IS VIA A JUMP. SUCCESSIVE B; R0 AND R1 CONTENTS ARE POPPED FROM THE STACK WITH CALLS TO THEF; SAVED ROUTINE ADDRESSES. THE LAST ROUTINE ON THE STACK MUST FORCE; THE PROCESS TO STOP.;E ; INPUTS:T;N3; R5=DIRECTIVE STATUS (IF INITIALIZED BY $DRTHR).; ; OUTPUTS:;- ; NONE.E;-+$ERREC::TST (SP)+ ;POP COROUTINE ADDRESSO%10$: MOV (SP)+,R0 ;PICK UP SAVED R0T! MOV (SP)+,R1 ;PICK UP SAVED R1D* CALL @(SP)+ ;CALL THE RECOVERY ROUTINE  BR 10$ ;;+$; **-$QUEXT-QUEUE EXIT "AST" BLOCK; C; THIS ROUTINE FILLS IN THE STATUS IN AN OFFSPRING CONTROL BLOCK,N@; AND QUEUES IT AS A SPECIAL AST BLOCK TO THE PARENT TASK TCB.; ; INPUTS:E; ; R0=EXIT STATUS WORD.; R1=OCB ADDRESS.T; R2=TKTN ABORT CODE (BYTE) ;T ; OUTPUTS:;E; R3 IS PRESERVED.;- .IFTF,$QUEXT:: ;UNCONDITIONALLY DEFINE FOR MCR .IFT(  MOV R2,-(SP) ;SAVE ABORT CODE. .IF DF N$$DIR ;IF NAMED DIRECTORY SUPPORT! MOV R1,-(SP) ;SAVE OCB ADDRESSO2 MOV O.STAT+10(R1),R1 ;GET CONTEXT BLOCK POINTER BEQ 5$ ;IF EQ, NONEN% CALL $DLCTX ;DELETE CONTEXT BLOCKO'5$: MOV (SP)+,R1 ;RESTORE OCB POINTERU .ENDC ;DF N$$DIRT0 MOV O.PTCB(R1),R2 ;PICK UP PARENT TCB ADDRESS% BEQ 30$ ;IF EQ PARENT HAS EXITTED* DEC T.RDCT(R2) ;DECREMENT RUNDOWN COUNT5 MOV T.ASTL(R2),(R1) ;LINK OCB TO FRONT OF AST LISTF  BNE 10$ ;R MOV R1,T.ASTL+2(R2) ;10$: MOV R1,T.ASTL(R2) ;3 MOV #AK.OCB,A.CBL(R1) ;SET EXIT "AST" BLOCK FLAG % MOV R0,O.STAT(R1) ;SET EXIT STATUSC0 MOV (SP)+,O.STAT+2(R1) ;PUT ABORT CODE IN OCB& MOV R2,R0 ;COPY PARENT TCB POINTER;+; ** W A R N I N G **E;; SPM HOOKPOINT NUMBER 09.;O+; DO NOT CHANGE THE INSTRUCTION FOLLOWINGB; LABEL WITHOUT CHECKING SPM;--$SPH09==. ;SPM CHANGES THE INSTRUCTION ATA! ;THE LOCATION OF THIS LABELA2 CALL @#$SETCR ;SET CONDITIONAL SCHEDULE REQUEST( MOV T.PCB(R0),R0 ;POINT TO PARENT PCB3 CALLR $NXTSK ;REALLOCATE (AST ENTRY CAN UNSTOP) 130$: MOV R1,R0 ;COPY OCB POINTER TO DEALLOCATEC' TST (SP)+ ;CLEAN STACK (ABORT CODE)B+ MOV #O.LGTH,R1 ;SET LENGTH TO DEALLOCATE  CALLR $DEACB ;DEALLOCATE OCB .ENDC;+; **-$STPCT-STOP CURRENT TASKE; **-$STPTK-STOP TASK;F; THESE ROUTINES ARE CALLED TO STOP A TASK AND REALLOCATE THE TASK'S ; PARTITION. ; ; INPUTS:# ;R7 ; R0=TCB ADDRESS OF TASK TO STOP (IF ENTRY AT $STPTK)P;T ; OUTPUTS:;L; NONE;-<$STPCT::MOV $TKTCB,R0 ;PICK UP ADDRESS OF CURRENT TASK TCB;$STPTK::BIS #T2.STP,T.ST2(R0) ;SET STOP BIT IN TASK'S TCB .IF DF M$$P00dvcvtblRO: BIT #TS.RUN,T.STAT(R0) ;TASK RUNNING ON SOME PROCESSOR? BEQ 10$ ;IF EQ NO$ .IFFR CMP R0,$TKTCB ;TASK RUNNING?  BNE 10$ ;IF NE NOS!" .ENDC#$+% CALL $SETCR ;INSURE THAT TASK WILL STOP.*&10$: MOV T.PCB(R0),R0 ;POINT TO TASK PCB(' BR $NXTSK ;REALLOCATE TASK PARTITION();+&*; **-$RLCPS-RELEASE CHECKPOINT SPACE+;:G,; THIS ROUTINE RELEASES SPACE IN A CHECKPOINT FILE. IF THE SPECIFIED,A-; REGION IS TO BE DELETED, IT ALSO DELETES ANY DISK PCB AND THE.; REGION PCB ITSELF./;T 0; INPUTS:N1; 32; R0=REGION PCB FOR WHICH SPACE IS TO BE DELETED.3;P 4; OUTPUTS:5;N 6; NONE.B7;-8!9$RLCPS::SAVNR ;SAVE R4 AND R5C: MOV R0,R4 ;COPY PCB POINTERL.; MOV P.DPCB(R4),R1 ;POINT TO REGION DISK PCB < BEQ 25$ ;IF EQ THERE IS NONE/= CMP R1,P.MAIN(R1) ;IS THIS A CHECKPOINT PCB?P> BEQ 25$ ;IF EQ NOH-? CALL $RLPR1 ;RELEASE THE CHECKPOINT SPACE !@ MOV R4,-(SP) ;SAVE PCB ADDRESSO8A MOV P.DPCB(R4),R4 ;POINT TO CHECKPOINT ALLOCATION PCB2B MOV P.MAIN(R4),R4 ;POINT TO CHECKPOINT FILE PCB/C TST P.REL(R4) ;CHECKPOINT FILE STILL IN USE?PD BEQ 10$ ;IF EQ YES(E TST P.SUB(R4) ;CHECKPOINT FILE EMPTY?F BNE 10$ ;IF NE NO,G MOV #20,R0 ;SET TKTN CODEP%H MOV P.UCB(R4),R5 ;PASS UCB ADDRESS&I CALL $DVMSG ;QUEUE MESSAGE TO TKTN/J10$: MOV (SP)+,R4 ;RESTORE REGION PCB ADDRESSQ'K MOV P.DPCB(R4),R0 ;POINT TO DISK PCBE1L20$: CLR P.DPCB(R4) ;CLEAR OUT DISK PCB POINTERD+M MOV #P.DLGH,R1 ;SET LENGTH TO DEALLOCATEO$N CALL $DEACB ;DEALLOCATE DISK PCB;O25$: BIT #PS.DEL,P.STAT(R4) ;IS REGION MARKED FOR DELETE?TP BEQ 30$ ;IF EQ NO(Q TST P.ATT(R4) ;ANYONE STILL ATTACHED?R BNE 30$ ;IF NE YES'S MOV P.DPCB(R4),R0 ;POINT TO DISK PCB T BNE 20$ ;IF NE THERE IS ONEP2U MOV R4,R0 ;COPY MAIN PCB POINTER TO DEALLOCATE+V MOV #P.LGTH,R1 ;SET LENGTH TO DEALLOCATE W CALL $DEACB ;DEALLOCATE PCBOX30$: RETURN ;YZ;+$[; **-$RLPAR-RELEASE TASK PARTITION\; **-$RLPR1-RELEASE PARTITIONO];LJ^; THIS ROUTINE IS CALLED TO RELEASE SPACE IN A PARTITION OWNED BY A TASKD_; AND TO ATTEMPT TO REALLOCATE THE PARTITION IF THE WAIT QUEUE FOR`; THE PARTITION IS NONEMPTY.a;$ b; INPUTS:c;V@d; R0=ADDRESS OF THE TCB OF THE OWNER TASK (IF ENTRY AT $RLPAR)?e; R1=ADDR OF SUBPARTITION PCB TO RELEASE (IF ENTRY AT $RLPR1).f;R g; OUTPUTS:h;ABi; THE SPACE IS RELEASED AND AN ATTEMPT IS MADE TO REASSIGN SPACE?j; IN THE PARTITION TO THE NEXT HIGHEST PRIORITY CONTENDER(S). k;-l8m$RLPAR::MOV T.PCB(R0),R1 ;GET ADDRESS OF PARTITION PCB1n$RLPR1::MOV P.MAIN(R1),R0 ;GET MAIN PCB ADDRESSL'o MOV R0,R3 ;SAVE POINTER TO MAIN PCBR/p10$: MOV R0,R2 ;SAVE ADDRESS OF PREVIOUS PCBS,q MOV P.SUB(R2),R0 ;GET ADDRESS OF NEXT PCBr CMP R0,R1 ;TASK PCB?s BNE 10$ ;IF NE NOA0t MOV P.SUB(R0),P.SUB(R2) ;REMOVE PCB FROM LIST.u TST P.MAIN(R3) ;RELEASING CHECKPOINT SPACE?vw BNE 20$ ;IF NE NOE x RETURNEy20$:z;+{; ** W A R N I N G **E|;I}; SPM HOOKPOINT NUMBER 15.~;R+; DO NOT CHANGE THE INSTRUCTION FOLLOWINGI; LABEL WITHOUT CHECKING SPM;--$SPH15==. ;SPM CHANGES THE INSTRUCTION ATO! ;THE LOCATION OF THIS LABEL " NOP ;DROP THROUGH TO $NXTSK TO' NOP ; REALLOCATE RELEASED PARTITION ;++; **-$NXTSK-ASSIGN NEXT TASK TO PARTITION;;EH; THIS ROUTINE IS CALLED TO ASSIGN SPACE IN A PARTITION TO THE HIGHEST8; PRIORITY CONTENDERS WAITING TO OCCUPY THE PARTITION.;G ; INPUTS:; B; R0=ADDRESS OF THE PCB OF THE MAIN PARTITION, OR A SUBPARTITION<; PCB WITHIN THE MAIN PARTITION IN WHICH TO ASSIGN SPACE.;C ; OUTPUTS:;IB; THIS ROUTINE ATTEMPTS TO ASSIGN SPACE IN THE MAIN PARTITION IN%; AS MANY AS FOUR STEPS AS FOLLOWS:E;AC; 1. IT FIRST DETERMINES IF THERE ARE ANY ELIGIBLE CONTENDERSA<; IN THE PARTITION WAIT QUEUE. THE ONLY CONTENDERS WHICH=; CAN BE IN THE WAIT QUEUE WHICH ARE NOT ELIGIBLE ARE TASKO<; PARTITIONS WHICH ARE NOT MAPPED BY OTHER RESIDENT TASKS<; AND FOR WHICH00dvutkTADATADATADATADATADATA THE CORRESPONDING TASK IS STOPPED WITH NO; PENDING AST QUEUE ENTRIES.C;A<; 2. IF THERE IS AN ELIGIBLE CONTENDER FOR MEMORY, THE;; ROUTINE ATTEMPTS TO ASSIGN SPACE TO THE CONTENDER FROMF#; SPACE WHICH IS CURRENTLY FREE. ; A; 3. IF THERE IS CURRENTLY INSUFFICIENT FREE SPACE TO BRING 5; IN THE CONTENDER, AN ATTEMPT IS MADE TO CREATE AC8; CONTIGUOUS FREE SPACE LARGE ENOUGH BY CHECKPOINTING;; ONE OR MORE OF THE CURRENT RESIDENTS OF THE PARTITION.<; (NOTE THAT DURING THIS STEP THE DECISION MAY BE MADE TO<; CHECKPOINT A REGION FOR WHICH CHECKPOINTING HAS ALREADY<; BEEN INITIATED. THIS IS ACCEPTABLE SINCE AN ATTEMPT TO:; INITIATE CHECKPOINTING A SECOND TIME IS EFFECTIVELY A ; NOP.);B; 4. IF SUFFICIENT SPACE CANNOT BE CREATED BY CHECKPOINTING,; THE SHUFFLER IS ACTIVATED.T;- $NXTSK:: .IF DF R$$PRO; TST $NXTLK ;NXTSK LOCK SET? (NEEDED TO MAINTAIN CONTEXT  ;DURING CHECKPOINTS)! BEQ 5$ ;IF EQ NO, OK TO ENTERI RETURN ;LEAVE NOW5$:  .ENDC ;R$$PRO SAVNR ;SAVE R4 AND R54 MOV P.MAIN(R0),R5 ;GET MAIN PARTITION PCB ADDRESS410$: MOV P.WAIT(R5),R4 ;GET FIRST PCB IN WAIT LIST#20$: BEQ 100$ ;IF EQ END OF LIST8 TSTB P.RMCT(R4) ;ARE THERE ANY RESIDENT MAPPED TASKS?+ BNE 40$ ;IF NE YES, ATTEMPT TO BRING IND: MOV P.TCB(R4),R0 ;GET TCB ADDR (TASK PART. IF P.RMCT=0)8 BIT #TS.STP,T.STAT(R0) ;TASK BLOCKED BY BLOCK COMMAND BNE 30$ ;IF NE YES, SKIP IT ' BIT #T2.STP,T.ST2(R0) ;TASK STOPPED?A BEQ 40$ ;IF EQ NO.. TST T.ASTL(R0) ;BUT ARE THERE PENDING ASTS? BNE 40$ ;IF NE YES330$: MOV (R4),R4 ;POINT TO NEXT PCB IN WAIT LIST; BR 20$ ;GO AGAIN:40$: BIT #PS.CSA,P.STAT(R4) ;CHECKPOINT SPACE ALLOCATED?& BNE 100$ ;IF NE, YES - JUST RETURN8 CALL $FNDSP ;ATTEMPT TO ALLOCATE SPACE IN MAIN PART./ BCS 50$ ;IF CS NO SPACE CURRENTLY AVAILABLE$ MOV R5,R0 ;COPY MAIN PCB ADDRESS/ ADD #P.WAIT,R0 ;POINT TO WAIT QUEUE LISTHEADI, MOV R4,R1 ;COPY ADDRESS OF PCB TO REMOVE .IF DF R$$PRO* MOV P.REL(R4),$NXTBA ;SET BASE TO BIAS> ADD P.SIZE(R4),$NXTBA ;FOLLOWING LAST SUCCESSFUL ALLOCATION .ENDC+ CALL $QRMVA ;REMOVE PCB FROM WAIT QUEUE() CALL $LOADT ;PLACE IT IN LOADER QUEUE0, TALLY$ B.RLOD,XA$$TL ;COUNT A REGION LOAD BR 10$ ;TRY TO LOAD ANOTHER;SK; ATTEMPT TO CREATE A CONTIGUOUS FREE SPACE LARGE ENOUGH BY CHECKPOINTINGEI; ONE OR MORE TASKS/COMMONS. ON P/OS, START LOOKING FOR THIS CONTIGUOUSDL; FREE SPACE FOLLOWING THE LAST SUCCESSFUL LOAD. THIS AVOIDS THE THRASHINGH; STATE WHEREBY A TASK IS MAPPING AND UNMAPPING FROM VARIOUS CLUSTEREDL; LIBRARIES WHICH CHECKPOINT EACH OTHER AS A CONSEQUENCE OF HAVING NO FREE=; SPACE DUE TO A RESIDENT UNMAPPED COMMON(S) HIGHER IN GEN. ;T50$: .IF DF R$$PRO& TST $NXTLK ;JUST STARTING TO LOOK?7 BNE 53$ ;IF NE NO, WRAP BACK TO BOTTOM OF PARTITIONE6 INC $NXTLK ;LOCK $NXTSK TO PREVENT LOSS OF CONTEXT' ;VIA RECURSIVE CALL OUT OF $ICHKPO+ MOV P.SUB(R5),R1 ;GET FIRST SUBPARTITIONE MOV R1,R5 ;SET UP PREVIOUS852$: CMP P.REL(R1),$NXTBA ;ABOVE LAST SUCCESSFUL LOAD? BHIS 65$ ;IF HIS YES MOV R1,R5 ;UPDATE PREVIOUS/ MOV P.SUB(R1),R1 ;POINT TO NEXT SUBPARTITIONP BNE 52$ ;TRY AGIAN453$: INC $NXTLK ;INDICATE FULL BOTTOM TO TOP PASS0 MOV P.MAIN(R4),R5 ;SET UP POINTER TO MAIN PCB .ENDC ;R$$PRO& CLR R3 ;INIT BASE OF HOLE REGISTER4 MOV R5,R1 ;COPY MAIN PCB PTR LEAVING PTR TO PREV/55$: ADD P.REL(R5),R3 ;CALCULATE BASE OF HOLER760$: MOV P.SUB(R1),R1 ;POINT TO NEXT SUBPARTITION PCBC. BEQ 110$ ;IF EQ NONE, FAILED TO CHECKPOINT065$: CALL $TSTCP ;CAN WAITING PCB CHECKPOINT? BCC 70$ ;IF CC YES-  MOV R1,R5 ;UPDATE POINTER TO PREVIOUS PCB 0  MOV P.SIZE(R5),R3 ;INIT BASE OF HOLE REGISTER  BR 55$ ;TRY AGAINP' 70$: CLR R0 ;INITIALIZE SIZE OF HOLE1  MOV P.SUB(R1),R2 ;POINT TO NEXT PCB AFTER HOLEH BNE 80$ ;IF NE THERE IS ONE , MOV P.MAIN(R1),R200dvcvtbl ;ELSE POINT TO MAIN PCB0 ADD P.SIZE(R2),R0 ;CALCULATE END OF PARTITION980$: ADD P.REL(R2),R0 ;CALCULATE ADDRESS OF TOP OF HOLE;% SUB R3,R0 ;CALCULATE SIZE OF HOLE:- CMP R0,P.SIZE(R4) ;IS THE HOLE BIG ENOUGH?B BLO 60$ ;IF LO NOM> BIS #PS.CSA,P.STAT(R4) ;INDICATE CHECKPOINT SPACE ALLOCATED' MOV R4,-(SP) ;SAVE PCB IN WAIT QUEUE;* MOV R1,R4 ;MARK LAST PCB TO CHECKPOINT890$: MOV P.SUB(R5),R5 ;POINT TO NEXT PCB TO CHECKPOINT MOV R5,R1 ;COPY ITS ADDRESSN$ CALL $ICHKP ;INITIATE CHECKPOINT" CMP R5,R4 ;MORE TO CHECKPOINT? BNE 90$ ;IF NE YES, MOV (SP)+,R4 ;RESTORE PCB OF WAITING TASK6 BIC #PS.CSA,P.STAT(R4) ;INDICATE CHECKPOINT IS DONE100$:, ! .IF DF R$$PRO"!# CLR $NXTLK ;CLEAR $NXTSK LOCK$% .ENDC ;R$$PRO& ' RETURN ;P()110$:L*+ .IF DF R$$PRO,6- CMP $NXTLK,#1 ;WRAP BACK TO BEGINNING OF PARTITION?. BNE 100$ ;IF NE NO / BR 53$ ;01 .ENDC213 MOV $SHFPT,R0 ;PICK UP ADDRESS OF SHUFFLER TCBC*4 BEQ 100$ ;IF EQ SHUFFLER NOT INSTALLED,5 TST $SHFTM ;CAN WE REQUEST THE SHUFFER ?-6 BNE 100$ ;NO, WAIT FOR NEXT TIME INTERVALK97 BIT #TS.EXE,T.STAT(R0) ;YES, SHUFFLER ALREADY ACTIVE ?8 BEQ 100$ ;IF EQ, YES, EXIT9:; .IF DF A$$CNT<)= MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING > MOV $SABPT,KISAR6 ;MAP SABD*? BEQ 130$ ;IF EQ, ACCOUNTING NOT ACTIVE4@ BIT #BF.LSS,$ACNFE ;SYSTEM ACCOUNTING TURNED ON ?A BEQ 130$ ;NO, IF EQ.0B ADD #1,@#B.SHF+140002 ;COUNT SHUFFLER STARTUPC ADC @#B.SHF+140000 ;H)D130$: MOV (SP)+,KISAR6 ;RESTORE MAPPINGEEF .ENDCGH1I CALLR $EXRQN ;REQUEST THE SHUFFLER AND RETURNJKL;+:M;**-$TSPAR-TEST IF PARTITION IS IN MEMORY FOR KERNEL ASTN;YBO; THIS ROUTINE IS CALLED TO CHECK A REGION FOR MEMEORY RESIDENCEAP; TO DETERMINE IF IT IS SAFE TO SERVICE A KERNEL AST (E.G. COPY,?Q; A BUFFER) INTO THE REGION. IF THE REGION IS CHECKPOINTED ORTBR; CURRENTLY BEING CHECKPOINTED, THEN A REGION LOAD AST IS QUEUED3S; AND THE REGION IS ACCESSED ON THE TASKS BEHALF. T;S U; INPUTS:E(V; R0=ADDRESS OF PACKET PEING PROCESSEDW; R1=PCB ADDRESS OF REGION%X; R5=TCB ADDRESS OF ASSOCIATED TASKTY;T Z; OUTPUTS:$[; C=0 IF REGION IS MEMORY RESIDENT>\; C=1 IF REGION IS NON-RESIDENT. IN THIS CASE THE REGION AST]; HAS BEEN QUEUED, ETC.A^;-_+`$TSPAR::CLC ;ASSUME REGION IS IN MEMORYN4a BIT #PS.CKP!PS.OUT,P.STAT(R1) ;REGION IN MEMORY ?b BNE 10$ ;IF NE NOI c RETURN ;G3d10$: BIT #PS.AST,P.STAT(R1) ;ALREADY A LOAD AST ?De BNE 20$ ;IF NE YES3f BIS #PS.AST,P.STAT(R1) ;INDICATE LOAD AST QUEUEDO,g CLR P.SWSZ(R1) ;USE P.SWSZ FOR A LISTHEAD7h20$: MOV P.SWSZ(R1),(R0) ;LINK NEXT BLOCK TO THIS ONE=4i MOV R0,P.SWSZ(R1) ;AND SET THIS ONE FIRST IN LIST!j MOV R0,-(SP) ;SAVE TCB ADDRESSNk MOV R5,R0 ;COPY TCB ADDRESSC"l CALL $ACCRG ;ACCESS THE REGION'm MOV (SP)+,R0 ;RESTORE PACKET ADDRESS.n SEC ;INDICATE AST QUEUEDY o RETURN ; pq;+r; **-$ACCRG-ACCESS REGION##s; **-$ALTRG-ALTER REGION PRIORITY t;Cu; EFFECT THE ACCESS OF A NEW RESIDENT MAPPED TASK TO A REGION ANDE0v; OPTIONALLY ALTER THE PRIORITY OF THE REGION.w;0 x; INPUTS:(y;R+z; R0=TCB ADDRESS OF RESIDENT MAPPED TASK..{; R1=PCB ADDRESS OF REGION.T|;I }; OUTPUTS:~; ; NONE.D;-  .ENABL LSBP7$ACCRG::MOV T.PCB(R0),R2 ;PICK UP TASK REGION PCB PTRV% CMP R1,R2 ;ACCESSING TASK REGION?S- BEQ 4$ ;IF EQ YES, DON'T INCREMENT P.RMCT .IF DF M$$PRO? BIS P.RRM(R1),T.RRM(R0) ;INCLUDE REGION AFFINITY IN TASK AFFA .ENDC/ BIT #PS.OUT,P.STAT(R2) ;TASK OUT OF MEMORY ?T' BNE 3$ ;IF NE YES, OK TO INC P.RMCT / BIT #PS.CKP,P.STAT(R2) ;BEING CHECKPOINTED ?P* BNE 43$ ;IF NE YES, DON'T TOUCH P.RMCT53$: INCB P.RMCT(R1) ;INC RESIDENT MAPPED TASK COUNTB?4$: BIT #PS.CKP,P.STAT(R2) ;IS THIS A CHECKPOINT READ ACCESS?/ BNE $ALTRG ;IF NE YES, SKIP BLOCKING CHECKS 43$: ;REFERENCE LABEL6 BIT #PS.OUT!PS.CKP,P.STAT(R1) ;IS REGION IN MEMORY? BEQ 5$ ;IF EQ YESI% INC00dvutkTADATADATADATADATADATA T.STAT(R0) ;BLOCK MAPPING TASK  BR 6$ ;T<5$: BIT #PS.CKR,P.STAT(R1) ;IS THERE A CHECKPOINT REQUEST? BEQ 6$ ;IF EQ NO- BIS #TS.CIP,T.STAT(R0) ;BLOCK MAPPING TASK "6$: MOV R1,R2 ;SAVE PCB ADDRESS .IF DF M$$PRO< BIT #TS.RUN,T.STAT(R0) ;IS THE TASK RUNNING ON SOME PROC? BEQ 7$ ;NO IF EQ .IFFE+ CMP R0,$TKTCB ;IS THIS THE CURRENT TASK?E BNE 7$ ;NO IF NE .ENDC2 CALL $SETCR ;SET SCHEDULE REQUEST TO STOP TASK%7$: MOV R2,R1 ;RESTORE PCB ADDRESSO2$ALTRG::MOVB T.PRI(R0),R2 ;PICK UP TASK PRIORITY/ CMP R1,T.PCB(R0) ;ALTERING TASKS OWN REGION?6 BNE 10$ ;IF NE NOS6 TSTB P.RMCT(R1) ;OTHER TASKS MAPPED TO TASK REGION? BEQ 15$ ;IF EQ NO;.<; THIS SECTION INSURES THAT THE PRIORITY OF A NON-RESIDENT9; NON-MAPPED REGION STAYS AT ZERO WHEN ALTERED. THIS IS=; NECESSARY TO INSURE THAT ZERO MAP COUNT COMMONS DON'T GETE=; PUT IN THE PAR. WAIT QUEUE, AND TO INSURE THAT THE REGIONO>; WILL GET LOADED WHEN IT IS MAPPED BY SOME TASKS. NOTE THAT<; IF THE PRIORITY IS NOT ALTERED UPWARD, THE REGION IS NOT>; LOADED. ALSO NOTE THAT THE NEXT TEST WILL NEVER BRANCH FOR5; TASK REGIONS, SINCE WE JUST CHECKED P.RMCT ABOVE. ;Q810$: TSTB P.RMCT(R1) ;ANY TASK MAPPED TO THIS REGION ?, BEQ 30$ ;IF EQ NO - DON'T TOUCH PRIORITY* INCB R2 ;INCREMENT FOR COMMON PRIORITY- CMPB R2,P.PRI(R1) ;IS NEW PRIORITY HIGHER?E BLOS 30$ ;IF LOS NOT315$: MOVB R2,P.PRI(R1) ;STORE NEW REGION PRIORITYL:$LDREG::BIT #PS.OUT,P.STAT(R1) ;IS THE REGION IN MEMORY? BEQ 30$ ;IF EQ YES1 CMP R1,$LDPCB ;IS LOADER CURRENTLY LOADING IT?H BEQ 30$ ;IF EQ YES% MOV $LDRPT,R0 ;POINT TO LOADER TCB 2 ADD #T.RCVL,R0 ;POINT TO LOADER'S RECEIVE QUEUE. CALL $QRMVA ;SEE IF PCB IS IN LOADER QUEUE BCS 20$ ;IF CS NO'! CALL $QINSP ;ELSE PUT IT BACKE  BR 30$ ;20$:;+; ** W A R N I N G **W;R; SPM HOOKPOINT NUMBER 06.;N+; DO NOT CHANGE THE INSTRUCTION FOLLOWINGN; LABEL WITHOUT CHECKING SPM;--$SPH06==. ;SPM CHANGES THE INSTRUCTION ATQ! ;THE LOCATION OF THIS LABELU' MOV P.MAIN(R1),R0 ;POINT TO MAIN PCBM/ ADD #P.WAIT,R0 ;POINT TO WAIT QUEUE LISTHEADL8 CALL $QRMVA ;REMOVE FROM CURRENT POSITION (IF THERE)/ CALL $QINSP ;INSERT IN PARTITION WAIT QUEUE-25$: MOV R1,R0 ;SET PCB ADDRESS FOR $NXTSK* CALL $NXTSK ;REALLOCATE MAIN PARTITION30$: RETURN ; ;+; **-$DEARG-DEACCESS REGIONN;TG; THIS ROUTINE DEACCESSES A MAPPED TASK FROM A REGION AND REALLOCATESS>; ITS MAIN PARTITION IF THE REGION HAS NO MORE MAPPED TASKS.; ; INPUTS:P;(&; R0=TCB ADDRESS OF DEACCESSING TASK; R1=PCB OF REGION TO DEACESSA; ; OUTPUTS:;R ; NONE.C;-9$DEARG::TSTB T.IOC(R0) ;DOES TASK HAVE OUTSTANDING I/O?  BEQ 35$ ;IF EQ NO00 BIS #T3.MPC,T.ST3(R0) ;SET MAPPING CHANGE BIT>35$: BIT #PS.CKR,P.STAT(R1) ;CHECKPOINT REQUEST THIS REGION? BEQ 40$ ;IF EQ NO7 BIC #PS.CKR,P.STAT(R1) ;CLEAR CHECKPOINT REQUEST BITG MOV R1,-(SP) ;SAVE REGISTERSN MOV R0,-(SP) ;E/ CALL $ICHKP ;ATTEMPT TO INITIATE CHECKPOINTP" MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R1 ;P% 40$: CMP R1,T.PCB(R0) ;TASK REGION?P BNE 45$ ;NO IF NE3 TST @P.ATT(R1) ;OTHER ATTACHES TO TASK'S REGION?T% BEQ 30$ ;IF EQ NO, SAVE SOME TIME4 INCB P.RMCT(R1) ;INSURE NO MODIFICATION OF P.RMCT: 45$: DECB P.RMCT(R1) ;DEC COUNT OF RESIDENT MAPPED TASKS) BNE 30$ ;IF NE THERE ARE STILL OTHERSA( CLRB P.PRI(R1) ;ASSUME IT IS A COMMON* BIT #PS.COM,P.STAT(R1) ;IS IT A COMMON? BEQ 47$ ;IF EQ NOA2 BIT #PS.OUT,P.STAT(R1) ;REGION OUT OF MEMEORY ?- BEQ 50$ ; IF EQ NO - REALLOCATE PARTITIONR) MOV R0,-(SP) ;SAVE TCB ADDRESS OF TASK + MOV R1,-(SP) ;SAVE PCB ADDRESS OF REGIONT4 MOV P.MAIN(R1),R0 ;POINT TO REGION MAIN PARTITION/ ADD #P.WAIT,R0 ;POINT TO WAIT QUEUE LISTHEAD.+ CALL $QRMVA ;REMOVE FROM QUEUE IF THERES$ MOV (SP)+,R1 ;RESTORE PCB ADDRESS  MOV (SP)+,R0 ;AND TCB ADDRESS' BCS 46$ 00dvcvtbl;IF CS WASN'T IN WAIT QUEUE#3 BIC #PS.CKR,P.STAT(R1) ;CLEAR CHECKPOINT REQUESTQ 46$: RETURN ;T* 47$: MOV P.TCB(R1),R0 ;POINT TO TASK TCB7 MOVB T.PRI(R0),P.PRI(R1) ;THEN SET TO TASK PRIORITY # 50$: MOV R1,R0 ;COPY PCB ADDRESS,6 CALLR $NXTSK ;REALLOCATE MAIN PARTITION AND RETURN  .DSABL LSBO  ;+$ ; **-$FNDSP-FIND SPACE IN PCB LIST ;EG ; THIS ROUTINE IS CALLED TO FIND SPACE WITHIN A DYNAMICALLY ALLOCATEDRE! ; PCB LIST REPRESENTING THE ALLOCATION STATE OF A SYSTEM CONTROLLEDI)" ; PARTITION OR DYNAMIC CHECKPOINT FILE.P# ;( $ ; INPUTS:E% ;N'& ; R4=ADDRESS OF PCB TO FIND SPACE FORV9' ; R5=ADDRESS OF MAIN PCB FOR SPACE IN WHICH TO ALLOCATE1( ;E ) ; OUTPUTS:* ;R$+ ; C=0 IF ALLOCATION WAS SUCCESSFUL+, ; SUB PCB IS LINKED INTO ALLOCATION LISTT- ; C=1 IF ALLOCATION FAILURE. ; / ; R0,R1,R2 ARE MODIFIED.0 ;-1 .2 $FNDSP::MOV R5,R0 ;COPY ADDRESS OF MAIN PCB:3 MOV P.REL(R5),R2 ;SET HIGHEST ADDRESS IN LAST PARTITION04 10$: MOV P.SUB(R0),R1 ;GET ADDRESS OF NEXT PCB5 BEQ 20$ ;IF EQ END OF LIST.6 MOV P.REL(R1),-(SP) ;CALCULATE SIZE OF HOLE7 SUB R2,(SP) ;P)8 CMP (SP)+,P.SIZE(R4) ;HOLE BIG ENOUGH?A9 BHIS 30$ ;IF HIS YES+: MOV R1,R0 ;SAVE ADDRESS OF PREVIOUS PCBO8; MOV P.REL(R1),R2 ;CALCULATE BASE ADDRESS OF NEXT HOLE< ADD P.SIZE(R1),R2 ; = BR 10$ ;7> 20$: MOV P.REL(R5),-(SP) ;CALCULATE SIZE OF LAST HOLE ? ADD P.SIZE(R5),(SP) ;@ SUB R2,(SP) ;L)A CMP (SP)+,P.SIZE(R4) ;HOLE BIG ENOUGH?IB BLO 40$ ;IF LO NO)6C 30$: MOV R2,P.REL(R4) ;SET ADDRESS OF TASK PARTITION9D MOV R4,P.SUB(R0) ;LINK ALLOCATED PARTITION TO PREVIOUSB*E MOV R1,P.SUB(R4) ;LINK NEXT TO TASK PCBF 40$: RETURN ;IG H ;+4I ; **-$TSTCP-TEST IF CHECKPOINT SHOULD BE INITIATEDJ ;M K ; INPUTS:RL ;LM ; R1=ADDRESS OF RESIDENT PCB N ; R4=ADDRESS OF CONTENDING PCBO ; P ; OUTPUTS:Q ;)*R ; C=0 IF CHECKPOINT SHOULD BE INITIATED..S ; C=1 IF CHECKPOINT SHOULD NOT BE INITIATED.T ;P"U ; R1,R3,R4 AND R5 ARE PRESERVED.V ;-W ?X $TSTCP::BIT #PS.CHK!PS.FXD,P.STAT(R1) ;IS PCB CHECKPOINTABLE? Y BNE 30$ ;IF NE NO 8Z TSTB P.RMCT(R1) ;BUT ARE THERE RESIDENT MAPPED TASKS?)[ BNE 30$ ;IF NE YES, CANNOT CHECKPOINT;\ BIT #PS.COM,P.STAT(R1) ;IS IT AN UNMAPPED COMMON REGION? !] BNE 40$ ;IF NE YES, IT CAN GOE:^ MOV P.TCB(R1),R2 ;AT THIS POINT MUST BE A TASK, GET TCB*_ BIT #T2.HLT,T.ST2(R2) ;IS TASK EXITING?)` BNE 30$ ;IF NE YES, CANNOT CHECKPOINTH.a BIT #T2.STP,T.ST2(R2) ;IS THE TASK STOPPED?b BEQ 10$ ;IF EQ NO0c TST T.ASTL(R2) ;BUT DOES IT HAVE PENDING AST? d BEQ 40$ ;IF EQ NO, IT CAN GO9e 10$: BIT #TS.STP,T.STAT(R2) ;BLOCKED BY MCR BLOCK CMD ? !f BNE 40$ ;IF NE YES, IT CAN GONg h i .IF DF S$$WPCj *k MOV $SWPR,R0 ;ASSUME TASK NOT IN MEMORY8l BIT #PS.CKP!PS.CKR!PS.OUT,P.STAT(R1) ;TASK IN MEMORY?m BNE 15$ ;IF NE NOEn o .IF DF X$$HDRp 7q MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING FOR XTRNL HDRS(r MOV P.HDR(R1),R0 ;SAVE HEADER POINTER"s BNE 12$ ;IF NE INTERNAL HEADER/t MOV P.REL(R1),KISAR6 ;MAP TO EXTERNAL HEADERV2u MOV #140000,R0 ;RESET VIRTUAL ADDRESS OF HEADERv 12$: ;REFERENCE LABELw x .IFF ; DF X$$HDR y /z MOV P.HDR(R1),R0 ;GET ADDRESS OF TASK HEADERF{ | .ENDC ; DF X$$HDR} 8~ MOVB H.SPRI(R0),R0 ;PICK UP CURRENT SWAPPING PRIORITY  .IF DF X$$HDR 2 MOV (SP)+,KISAR6 ;RESTORE PREVIOUS EXEC MAPPING  .ENDC ; DF X$$HDR 0 15$: CLR -(SP) ;EXTRACT TASK PRIORITY AS WORD BISB T.PRI(R2),(SP) ;7 ADD (SP)+,R0 ;ADD TASK PRIORITY TO SWAPPING PRIORITYM0 BMI 40$ ;IF MI WAITING TASK IS ALWAYS HIGHER+ ;EFFECTIVE PRIORITY AND CAN THEREFOREE ;CHECKPOINT 7 BIT #PS.COM,P.STAT(R4) ;IS WAITING PCB FOR A COMMON?K BEQ 20$ ;IF EQ NO;- INC R0 ;PRIORITY OF WAITING COMMON IS + 1C1 20$: CLR R2 ;INIT REGISTER TO EXTRACT PRIORITY8 BISB P.PRI(R4),R2 ;EXTRACT PRIORITY OF CONTENDING PCB* CMP R2,R0 ;CAN WAITING PCB CHECKPOINT? CLC ;ASSUME YES BGT 40$ ;IF GT YES  .IFFA 4 MOVB T.PRI(R2),R0 ;PICK UP RESIDENT TASK PRIORITY7 BIT #00dvutkTADATADATADATADATADATAPS.COM,P.STAT(R4) ;IS WAITING PCB FOR A COMMON?C BEQ 20$ ;IF EQ NOH- INC R0 ;PRIORITY OF WAITING COMMON IS + 1S5 20$: CMPB P.PRI(R4),R0 ;CAN WAITING PCB CHECKPOINT?  BHI 40$ ;IF HI YES  .ENDC  " 30$: SEC ;SET CARRY FOR RETURN 40$: RETURN ;R  ;+! ; **-$ICHKP-INITIATE CHECKPOINTO ;TJ ; THIS ROUTINE INITIATES THE CHECKPOINT OF THE SPECIFIED REGION. IT MAYE ; BE CALLED ANY TIME REGARDLESS OF THE STATE OF ANY MAPPED TASKS ORU ; OUTSTANDING I/O. ; ; INPUTS:P ;(B ; R1=ADDR OF PCB OF REGION FOR WHICH TO INITIATE THE CHECKPOINT. ;R ; OUTPUTS: ;OC ; THIS ROUTINE TAKES ONE OF THE FOLLOWING THREE ACTIONS DEPENDING' ; ON THE CURRENT STATE OF THE REGION. ; ? ; 1. IF THE REGION IS ALREADY BEING CHECKPOINTED, THEN NO  ; ACTION IS TAKEN.E ;NC ; 2. IF THE REGION IS CURRENTLY BEING LOADED, OR THERE IS I/OR; ; GOING INTO THE REGION, OR A TASK MAPPING THE REGION ISE< ; RUNNING ON ANOTHER PROCESSOR, THEN A CHECKPOINT REQUEST; ; IS POSTED FOR THE REGION TO BE HONORED WHEN THE CONDI-E ; TION IS REMOVED. ;UC ; 3. IF NONE OF THE ABOVE CONDITIONS ARE TRUE THEN AN ATTEMPTN2 ; IS MADE TO CHECKPOINT THE REGION IMMEDIATELY. ; > ; IF AN ATTEMPT IS TO BE MADE TO CHECKPOINT THE REGION, THIS ; OCCURS AS FOLLOWS: ;B ; 1. IF THE REGION IS A READ-ONLY INSTALLED REGION, THEN ITS< ; SPACE IS SIMPLY DEALLOCATED BY THE LOADER. (HAVING THE= ; LOADER DO THE DEALLOCATION SOLVES A PROBLEM OF UNLIMITEDQ ; RECURSION BACK TO $NXTSK.)O ;BB ; 2. IF THE REGION IS A READ-WRITE INSTALLED REGION, THEN IT+ ; IS CHECKPOINTED BACK TO ITS OWN IMAGE.N ;T@ ; 3. FOR ALL OTHER REGIONS, AN ATTEMPT IS MADE TO ALLOCATE7 ; SPACE IN A CHECKPOINT FILE. IF THIS FAILS AND THE ; ; REGION CONTAINS A TASK WITH CHECKPOINT SPACE ALLOCATEDI< ; IN ITS CHECKPOINT FILE, THEN THIS SPACE IS USED. OTHER-0 ; WISE TKTN IS REQUESTED TO REPORT THE ERROR. ;OC ; IN ANY CASE, IF THE CHECKPOINT CAN OCCUR, THE FIRST STATUS WORD B ; OF ALL TASKS MAPPED TO THE REGION IS INCREMENTED TO BLOCK THEM> ; FROM FURTHER EXECUTION UNTIL THE REGION RETURNS TO MEMORY. ;- @ $ICHKP::BIT #PS.OUT,P.STAT(R1) ;REGION CURRENTLY BEING LOADED? BEQ 5$ ;IF EQ NO4 BIS #PS.CKR,P.STAT(R1) ;POST A CHECKPOINT REQUEST BR 70$ ;RETURNB 5$: BIT #PS.CKP,P.STAT(R1) ;IS THE REGION ALREADY CHECKPOINTING?* BNE 70$ ;IF NE YES, NO ACTION REQUIRED MOV R1,R3 ;COPY PCB ADDRESSN2 TSTB P.IOC(R3) ;ANY I/O IN PROGRESS TO REGION ? BEQ 7$ ;IF EQ NO9 BIS #PS.CKR,P.STAT(R3) ;YES, CAN ONLY POST REQUEST NOW < 7$: MOV P.ATT(R3),R2 ;POINT TO FIRST ATTACHMENT DESCRIPTOR BEQ 36$ ;IF EQ THERE IS NONE5 20$: TSTB A.MPCT(R2) ;IS THIS ATTACHED TASK MAPPED?F BEQ 35$ ;IF EQ NOP/ MOV A.TCB(R2),R0 ;PICK UP TCB OF MAPPED TASK;+ CMP R0,$TKTCB ;IS THIS THE CURRENT TASK?R   .IF DF M$$PRO  BEQ 25$ ;IF EQ YES< BIT #TS.RUN,T.STAT(R0) ;IS THE TASK RUNNING ON SOME PROC? BEQ 30$ ;IF EQ NOR6 BIS #TS.CKR,T.STAT(R0) ;NOTE THE CHECKPOINT REQUEST4 BIS #PS.CKR,P.STAT(R3) ;POST A CHECKPOINT REQUEST  .IFF2  BNE 30$ ;IF NE NO   .ENDC  ' 25$: CALL $SETCR ;FORCE RESCHEDULINGT@ 30$: BIS #TS.CIP,T.STAT(R0) ;BLOCK TASK FOR CHECKPOINT IN PROG8 35$: MOV (R2),R2 ;POINT TO NEXT ATTACHMENT DESCRIPTOR BNE 20$ ;IF NE THERE IS ONE; BIT #PS.CKR,P.STAT(R3) ;WAS THERE ONLY A REQUEST POSTED?#% BNE 70$ ;IF NE YES, JUST EXIT NOWO< 36$: TST P.DPCB(R3) ;IS THIS AN INSTALLED RW OR RO REGION? BNE 90$ ;IF NE YES SAVNR ;SAVE R4 AND R5> BIC #PS.CAF,P.STAT(R3) ;CLEAR CHECKPOINT ALLOCATION FAILURE/ MOV #P.DLGH,R1 ;SET LENGTH OF CHECKPOINT PCBT* CALL $ALOCB ;ALLOCATE A CHECKPOINT PCB% BCS 50$ ;IF CS ALLOCATION FAILUREI- MOV R0,R4 ;SAVE POINTER TO CHECKPOINT PCBC- ADD R1,R0 ;POINT TO END OF CHECKPOINT PCBN5 MOV P.SIZE(R3),-(R0) ;STORE SIZE OF CHECKPOINT PCB ) ADD #7,(R0) ;ROUND TO NEXT DISK BLOCK $ ROR (R0) ;CONVERT TO DISK BLOCKS ASR00dvcvtbl (R0) ; ASR (R0) ;8 MOV #$CFLPT,R5 ;POINT TO CHECKPOINT FILE PCB LISTHEAD6 40$: MOV (R5),R5 ;POINT TO NEXT CHECKPOINT FILE PCB BNE 80$ ;IF NE THERE IS ONEC. MOV R4,R0 ;RETRIEVE CHECKPOINT PCB POINTER+ MOV #P.DLGH,R1 ;SET LENGTH TO DEALLOCATEL MOV R3,R5 ;SAVE PCB ADDRESS * CALL $DEACB ;DEALLOCATE CHECKPOINT PCB# MOV R5,R3 ;RETRIEVE PCB ADDRESS(' 50$: MOV R3,R1 ;RETRIEVE PCB ADDRESS1 BIT #PS.COM,P.STAT(R1) ;IS THIS A TASK REGION?( BNE 60$ ;IF NE NOL( MOV P.TCB(R1),R0 ;PICK UP TCB ADDRESS= BIT #T3.CAL,T.ST3(R0) ;SPACE ALLOCATED IN TASK IMAGE FILE?V BNE 90$ ;IF NE YES, USE IT' BIC #TS.CIP,T.STAT(R0) ;UNBLOCK TASK @ 60$: BIS #PS.CAF,P.STAT(R1) ;SET CHECKPOINT FILE ALLOC FAILURE* MOV $TKNPT,R0 ;PICK UP TKTN TCB ADDRESS  .IF DF R$$PRO $ BNE 65$ ;IF NE TKTN IS INSTALLED, MOV #5,R0 ;GET THE CHECKPOINT ALLOCATION+! ;FAILURE CODE FOR THE P/OS DISPATCHER#1" CALLR $CTMSG ;GO SEND THE MESSAGE IF POSSIBLE6# $ .IFF ;R$$PROV% (& BEQ 70$ ;IF EQ TKTN IS NOT INSTALLED' ( .ENDC ;R$$PRO) +* 65$: TST T.STAT(R0) ;TKTN ALREADY ACTIVE?E#+ BPL 70$ ;IF PL YES, JUST RETURN0 , JMP $EXRQN ;NO, REQUEST TKTN- 70$: RETURN ;C9. 80$: TST P.REL(R5) ;IS THIS CHECKPOINT FILE TURNED OFF?N/ BNE 40$ ;IF NE YES50 CALL $FNDSP ;ATTEMPT TO ALLOCATE CHECKPOINT SPACE %1 BCS 40$ ;IF CS ALLOCATION FAILUREI.2 CLR P.UCB(R4) ;P.UCB=0 FOR CHECKPOINT PCB'S83 MOV R5,P.MAIN(R4) ;STORE ADDRESS OF MAIN CKP FILE PCB74 MOV R4,P.DPCB(R3) ;STORE CHECKPOINT FILE PCB ADDRESSA'5 90$: MOV R3,R1 ;RETRIEVE PCB ADDRESST96 MOV P.ATT(R1),R3 ;POINT TO FIRST ATTACHMENT DESCRIPTOR !7 BEQ 120$ ;IF EQ THERE IS NONEEA8 100$: MOVB A.MPCT(R3),R0 ;PICK UP MAPPING COUNT THRU DESCRIPTORP9 BEQ 110$ ;IF EQ NO1: MOV A.TCB(R3),R2 ;PICK UP MAPPED TCB'S ADDRESS .; INC T.STAT(R2) ;ADVANCE TASK BLOCKING COUNT;< BIC #TS.CIP,T.STAT(R2) ;CLEAR CHECKPOINT IN PROGRESS BITP9= 110$: MOV (R3),R3 ;POINT TO NEXT ATTACHMENT DESCRIPTORP > BNE 100$ ;IF NE THERE IS ONE2? 120$: BIS #PS.CKP,P.STAT(R1) ;SET CHECKPOINT BIT;@ BIT #PS.COM,P.STAT(R1) ;IS TARGET REGION A TASK REGION ?EA BNE 125$ ;IF NE, NO0+B MOV P.TCB(R1),R3 ;GET OWNING TCB ADDRESS(2C TSTB T.IOC(R3) ;TASK HAVE ANY OUTSTANDING I/O ?0D BEQ 125$ ;IF EQ, NO NEED TO WORRY ABOUT IOSB9E BIS #T3.MPC,T.ST3(R3) ;SET MAPPING CHANGE TO FORCE ANYI%F ;OUTSTANDING I/O TO RE-MAP IOSBEG 125$: ;REFERENCE LABELPH I J .IF DF A$$CNTK 6L BIT #BF.XTK,$ACNFE ;DOES CHECKPOINT BECAUE OF EXTK$M BNE 140$ ;IF NE YES.)N MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING#O MOV $SABPT,KISAR6 ;MAP SABG*P BEQ 130$ ;IF EQ, ACCOUNTING NOT ACTIVE4Q BIT #BF.LSS,$ACNFE ;SYSTEM ACCOUNTING TURNED ON ?R BEQ 130$ ;NO, IF EQ.*S ADD #1,@#B.CKP+140002 ;COUNT CHECKPOINTT ADC @#B.CKP+140000 ;B)U 130$: MOV (SP)+,KISAR6 ;RESTORE MAPPINGN&V 140$: BIC #BF.XTK,$ACNFE ;CLEAR FLAGW X .ENDCY Z [ \ ;+(] ; **-$LOADT-PUT REGION IN LOADER QUEUE^ ; F_ ; THIS ROUTINE PUTS A REGION IN THE LOADER QUEUE FOR AN INITIAL LOADA` ; OR CHECKPOINT OPERATION. IF THE REGION IS A TASK REGION, ALLIGa ; OTHER REGIONS MAPPED BY THE TASK ARE EITHER ACCESSED OR DEACCESSED,S?b ; DEPENDING ON WHETHER THE TASK IS COMING IN OR OUT OF MEMORYEc ; RESPECTIVELY. NOTE THAT IF THE TASK'S ATTACHMENT QUEUE IS EMPTY, Dd ; THEN THIS MUST BE THE INITIAL LOAD AND ALL REGIONS LINKED TO THEe ; TASK ARE MAPPED.f ; g ; INPUTS:+h ; i ; R1=ADDRESS OF PCB OF REGIONEj ; k ; OUTPUTS:l ;Em ; NONEn ;-o 5p $LOADT::BIT #PS.COM,P.STAT(R1) ;IS IT A COMMON PCB?Pq BNE 50$ ;IF NE YES.r TST P.ATT(R1) ;ATTACHED TO TASK REGION YET?s BNE 5$ ;IF NE YES t 3u TALLY$ B.TLOD,XA$$TL ;COUNT AN INITIAL TASK LOADSv &w BR 50$ ;LOADER DOES FIRST ACCESSESx 5$: ;REFERENCE LABELA!y MOV R1,-(SP) ;SAVE PCB ADDRESS z MOV R4,-(SP) ;SAVE R4({ MOV P.TCB(R1),R4 ;PICK UP TCB ADDRESS<| MOV #$ACCRG,-(SP) ;ASSUME ATTACHED REGIONS TO BE ACCESSED7} BIT #PS.OUT,P.STAT(R1) ;IS TASK REGION BEING LOADED? ~ BNE 10$ ;I00dwutkTADATADATADATADATADATAF NE YES5 MOV #$DEARG,(SP) ;SET TO DEACCESS ATTACHED REGIONS > 10$: MOV @T.ATT(R4),R4 ;PICK UP SECOND ATTACHMENT DESCRIPTOR% 20$: BEQ 30$ ;IF EQ AT END OF LIST$0 TSTB A.MPCT-A.TCBL(R4) ;IS THE REGION MAPPED? BEQ 25$ ;IF EQ NOS/ MOV A.TCB-A.TCBL(R4),R0 ;PICK UP TCB ADDRESSS/ MOV A.PCB-A.TCBL(R4),R1 ;PICK UP PCB ADDRESSV0 CMP T.PCB(R0),R1 ;ATTACHMENT TO TASK REGION ? BNE 23$ ;IF NE NO , CMP (SP),#$ACCRG ;ACCESSING TASK REGION ?, BEQ 25$ ;IF EQ YES, SKIP THIS ATTACHMENT0 23$: CALL @(SP) ;CALL ACCESS/DEACCESS ROUTINE7 25$: MOV (R4),R4 ;PICK UP NEXT ATTACHMENT DESCRIPTORO BNE 20$ ;IF NE THERE IS ONEB 30$: TST (SP)+ ;CLEAN STACK MOV (SP)+,R4 ;RESTORE R4 % MOV (SP)+,R1 ;RETRIEVE PCB POINTERN3 50$: MOV $LDRPT,R0 ;PICK UP TCB ADDRESS OF LOADER ;+ ; ** W A R N I N G **K ;C ; SPM HOOKPOINT NUMBER 12. ;T+ ; DO NOT CHANGE THE INSTRUCTION FOLLOWINGN ; LABEL WITHOUT CHECKING SPM ;- - $SPH12==. ;SPM CHANGES THE INSTRUCTION ATH! ;THE LOCATION OF THIS LABELS  3 TSTB P.PRI(R1) ;CHECKPOINTING UNMAPPED COMMON ORE ;MULTI-USER SECTION ?I BNE 60$ ;IF NE, NO5 MOVB #251.,P.PRI(R1) ;INSERT PCB AT FRONT OF QUEUE  60$: ;REFERENCE LABEL  ;+= ; **-$EXRQP-EXECUTIVE REQUEST WITH QUEUE INSERT BY PRIORITY6 ; **-$EXRQF-EXECUTIVE REQUEST WITH QUEUE INSERT FIFO7 ; **-$EXRQN-EXECUTIVE REQUEST WITH NO QUEUE INSERTIONB ; **-$EXRQU-EXECUTIVE UNSTOP AND REQUEST WITH NO QUEUE INSERTION8 ; **-$EXRQS-EXECUTIVE REQUEST WITH NO SCHEDULE REQUEST ; I ; THESE ROUTINES PROVIDE A STANDARD INTERFACE TO ALL TASKS REQUESTED BYE ; THE EXECUTIVE. ; ; INPUTS:V ;1% ; R0=TCB ADDRESS OF TASK TO REQUESTUB ; R1=ADDR OF PACKET TO QUEUE TO TASK (IF ENTRY AT $EXRQP/$EXRQF) ; ; OUTPUTS: ;Y2 ; C=0 IF THE REQUEST WAS SUCCESSFULLY COMPLETED.3 ; C=1 IF THE TASK WAS NOT SUCCESSFULLY REQUESTED.N# ; Z=0 IF PCB ALLOCATION FAILURE.C7 ; Z=1 IF TASK ACTIVE, BEING REMOVED, OR BEING FIXED.$ ;- .ENABL LSBIB $EXRQP::MOV #$QINSP,-(SP) ;PUSH ADDR OF QUEUE INSERT BY PRIORITY BR 1$ ;JOIN COMMON CODET; $EXRQF::MOV #$QINSF,-(SP) ;PUSH ADDR OF QUEUE INSERT FIFOT0 1$: ADD #T.RCVL,R0 ;POINT TO TASK RECEIVE LIST/ CALL @(SP)+ ;INSERT PACKET IN RECEIVE QUEUE- SUB #T.RCVL,R0 ;POINT BACK TO START OF TCBT7 $EXRQN::BIT #T2.STP*2!T2.STP,T.ST2(R0) ;TASK STOPPED?  BEQ 2$ ;IF EQ NO= $EXRQU::BIC #T2.STP*2!T2.STP,T.ST2(R0) ;CLEAR TASK STOP BITV  ;+ ; ** W A R N I N G ** ; ; SPM HOOKPOINT NUMBER 07. ;$+ ; DO NOT CHANGE THE INSTRUCTION FOLLOWINGO ; LABEL WITHOUT CHECKING SPM ;- - $SPH07==. ;SPM CHANGES THE INSTRUCTION ATT! ;THE LOCATION OF THIS LABEL   3 CALL @#$SETCR ; SET CONDITIONAL SCHEDULE REQUESTV $EXRQS:: ;REF LABELR 2$: CLR R1 ;USE DEFAULT UIC .DSABL LSBT  ;+( ; **-$TSKRT-TASK REQUEST (DEFAULT UCB)( ; **-$TSKRQ-TASK REQUEST (SPECIFY UCB)0 ; **-$TSKRP-TASK REQUEST (SPECIFY DEFAULT UIC) ;R> ; THIS ROUTINE IS CALLED TO REQUEST THE EXECUTION OF A TASK. ;A ; INPUTS:U ; 6 ; R0=ADDRESS OF THE TCB OF THE TASK TO BE REQUESTED. ; R1=REQUEST UIC.G& ; R2=UCB ADDRESS IF ENTRY AT $TSKRQ.& ; R3=DEFAULT UIC IF ENTRY AT $TSKRP. ;; ; OUTPUTS: ;H> ; C=1 IF TASK IS ALREADY ACTIVE OR IS BEING FIXED IN MEMORY.' ; Z=1 IF TASK ACTIVE OR BEING FIXED.*# ; Z=0 IF PCB ALLOCATION FAILURE. 1 ; C=0 IF THE REQUEST IS SUCCESSFULLY COMPLETED.R ;- 9 $TSKRT::MOV $COPT,R2 ;GET ADDRESS OF COMMAND OUTPUT UCBD2 $TSKRQ::MOV R1,R3 ;MAKE CURRENT UIC DEFAULT UICA $TSKRP::MOV #TS.EXE,-(SP) ;ASSUME TASK IS ACTIVE OR BEING FIXED, BIT (SP),T.STAT(R0) ;TASK ALREADY ACTIVE? BEQ 10$ ;IF EQ YES& MOV R1,T.EFLG(R0) ;SAVE REQUEST UIC< MOV T.PCB(R0),R1 ;PICK UP PCB POINTER (COULD BE MAIN PCB)/ BIT #PS.FXD,P.STAT(R1) ;IS TASK BEING FIXED?I BEQ 1$ ;IF EQ NO7 BIT #PS.OUT!PS.CKP,P.STAT(R1) ;TASK OUT OF MEMORY ORC ;BEING SHUFFLED ? BNE 10$ ;IF NE YES, 1$: BIT #T3.REM,T.ST3(R0) ;REMOVE 00d wcvtblON EXIT? BNE 10$ ;IF NE YES% MOV R3,T.ACTL(R0) ;SET DEFAULT UIC.' BIC (SP),T.STAT(R0) ;SET TASK ACTIVE % CLR (SP) ;CLEAR FAILURE INDICATORR ;+ ; ** W A R N I N G **Q ; ; SPM HOOKPOINT NUMBER 02. ;U+ ; DO NOT CHANGE THE INSTRUCTION FOLLOWING( ; LABEL WITHOUT CHECKING SPM ;- - $SPH02==. ;SPM CHANGES THE INSTRUCTION ATO! ;THE LOCATION OF THIS LABEL; , MOV R2,T.UCB(R0) ;SET ADDRESS OF 'TI' UCB 0 BIT #PS.FXD,P.STAT(R1) ;TASK FIXED IN MEMORY? BNE 20$ ;IF NE YES& MOV R0,-(SP) ;SAVE TASK TCB ADDRESS- MOV #P.LGTH,R1 ;SET LENGTH OF BLOCK NEEDEDA CALL $ALOCB ;ALLOCATE PCB  MOV R0,R3 ;SAVE PCB ADDRESSW* MOV (SP)+,R0 ;RETRIEVE TASK TCB ADDRESS ROR (SP) ;CAPTURE CARRY BIT + BEQ 3$ ;IF EQ ALLOCATION WAS SUCCESSFUL ) BIS (SP),T.STAT(R0) ;SET TASK INACTIVEC$ INC (SP) ;SET ALLOCATION FAILURE) CMP R0,$TKNPT ;TRYING TO REQUEST TKTN?C BEQ 40$ ;IF EQ YES  BR 10$ ; 3$:S   .IF DF N$$DIR & CALL SETDDS ;SET UP POINTER TO DDS! " .ENDC ; DF N$$DIR# $ .IF DF A$$CNT% 2& CALL ACNTSK ;SET UP ACCOUNTING DATA STRUCTURES' ( .ENDC) * 3+ MOV T.PCB(R0),R1 ;GET MAIN PARTITION PCB ADDRESST), MOV R3,R2 ;COPY ALLOCATED PCB ADDRESS 1- MOV R2,T.PCB(R0) ;SET ADDRESS OF ALLOCATED PCBB". TST (R2)+ ;SKIP OVER LINK WORD2/ CLR (R2)+ ;INIT PRIORITY AND RES. MAPPED COUNT-0 MOV P.NAM(R1),(R2)+ ;INSERT PARTITION NAMEI1 MOV P.NAM+2(R1),(R2)+ ;12 CLR (R2)+ ;CLEAR POINTER TO NEXT SUBPARTITIONS73 MOV R1,(R2)+ ;SET BACK POINTER TO MAIN PARTITION PCBF$4 CLR (R2)+ ;CLEAR RELOCATION BASE95 MOV T.MXSZ(R0),(R2)+ ;SET PARTITION SIZE IN 32W BLOCKST'6 CLR (R2)+ ;CLEAR WAIT QUEUE POINTERS;7 MOV P.SIZE-P.SWSZ(R2),(R2)+ ;SET SWAP SIZE FROM PAR SIZEC$8 CLR (R2)+ ;ZERO DISK PCB ADDRESS&9 MOV R0,(R2)+ ;SET OWNER TCB ADDRESS=: MOV #PS.DEL!PS.OUT,(R2)+ ;MARKED FOR DELETE, OUT OF MEMORY)1; BIT #T2.CHK,T.ST2(R0) ;IS TASK CHECKPOINTABLE?(< BEQ 4$ ;IF EQ YESC1= BIS #PS.CHK,-2(R2) ;MAKE PCB NONCHECKPOINTABLE 0> 4$: CLR (R2)+ ;INITIALLY CLEAR HEADER POINTER$? CLR (R2)+ ;CLEAR PROTECTION WORD2@ MOV R2,R1 ;SAVE POINTER TO ATTACHMENT LISTHEAD)A CLR (R2)+ ;SET UP ATTACHMENT LISTHEAD B MOV R1,(R2)+ ;RC D .IF DF X$$HDRE 9F MOVB T.HDLN(R0),(R2)+ ;INIT XTRNL HEADER SIZE (P.HDLN)RG H .IFF ; DF X$$HDRDI (J TSTB (R2)+ ;SKIP XTRNL HEADER LENGTHK L .ENDC ; DF X$$HDRM !N MOV R0,-(SP) ;SAVE TCB ADDRESSIO ;+P ; ** W A R N I N G **CQ ;BR ; SPM HOOKPOINT NUMBER 11.S ;K+T ; DO NOT CHANGE THE INSTRUCTION FOLLOWING U ; LABEL WITHOUT CHECKING SPMV ;-W -X $SPH11==. ;SPM CHANGES THE INSTRUCTION ATC!Y ;THE LOCATION OF THIS LABELU1Z CLRB (R2)+ ;ZERO PARTITION I/O COUNT (P.IOC).#[ MOV R3,R1 ;RETRIEVE PCB ADDRESS(\ #] CALL $ACCRG ;ACCESS TASK REGION ^ BR 30$ ;%_ 10$: MOV R0,-(SP) ;SAVE TCB ADDRESSL6` MOV T.PCB(R0),R0 ;GET ADDRESS OF TASK PARTITION PCB!a CALL $NXTSK ;SELECT NEXT TASK b BR 30$ ;%c 20$: MOV R0,-(SP) ;SAVE TCB ADDRESS1d e f .IF DF N$$DIRg &h CALL SETDDS ;SET UP POINTER TO DDSi j .ENDC ; DF N$$DIRk l m .IF DF A$$CNTn 2o CALL ACNTSK ;SET UP ACCOUNTING DATA STRUCTURESp q .ENDCr s +t CALL $BILDS ;BUILD A STACK FOR THE TASK1(u 30$: MOV (SP)+,R0 ;RESTORE TCB ADDRESSv w x .IF DF V$$TRMy $z TST (SP) ;SUCCESSFUL ACTIVATION?{ BMI 40$ ;IF MI NOB,| MOV T.UCB(R0),R1 ;PICK UP TI: UCB ADDRESS} MOV (R1),R2 ;POINT TO DCB :~ CMP D.NAM(R2),#"VT ;IS THE TI: A VIRTUAL TERMINAL UNIT? BNE 40$ ;IF NE NO 4 INCB U.OCNT(R1) ;INCREMENT ACTIVE OFFSPRING COUNT  .ENDC   40$: .IF DF N$$DIR - CLR $CTXPT ;CLEAR OUT FOR FUTURE REQUESTS  .ENDC ;DF N$$DIR  - ASL (SP)+ ;SET SUCCESS/FAILURE INDICATIONP RETURN ;A  ; G ; LOCAL ROUTINE TO PROPAGATE THE DEFAULT DIRECTORY STRING TO THE TASK4 ; WHICH IS STARTING UP ;)  .IF DF N$$DIR 2 SETDDS: MOV $CTXPT,R1 ;GET SPECIAL DDS SPECIFIED BEQ 20$ ;IF EQ, NONE! M00dwutkTADATADATADATADATADATAOV R1,T.CTX(R0) ;PUT INTO TCBE$ CLR $CTXPT ;RESET $CTXPT TO ZERO BR 40$ ;BRANCH AROUND $ 20$: MOV T.UCB(R0),R1 ;GET TI: UCB' BIT #DV.PSE,U.CW1(R1);PSEUDO DEVICE?U( BNE 60$ ;IF NE, YES - NO CONTEXT PTR. MOV U.CTX(R1),R1 ;GET CONTEXT BLOCK POINTER$ BEQ 60$ ;IF EQ, NO CONTEXT BLOCK1 MOV R1,T.CTX(R0) ;PUT POINTER TO DDS INTO TCBN - 40$: MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING# MOV R1,KISAR6 ;MAP CONTEXT BLOCKC. INCB C.REF+MAP6 ;INCREMENT REFERNCE COUNTER$ MOV (SP)+,KISAR6 ;RESTORE MAPPING 60$: RETURNC  .ENDC ;DF N$$DIRT   ; I ; LOCAL ROUTINE TO SET UP ACCOUNTING DATA STRUCTURES FOR THE TASK BEINGU ; ACTIVATED  ;E   .IF DF A$$CNT ACNTSK:P MOV R4,-(SP) ;SAVE R4 MOV R0,R4 ;SAVE TCB ADDRESS6) MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGT" MOV T.UCB(R0),R0 ;LOCATE TI UCB CMP $COPT,R0 ;IS TI: = CO:S BEQ 10$ ;IF EQ YES- MOV U.UAB(R0),R0 ;TRY TO LOCATE TASK'S UABE" BNE 30$ ;IF NE, THERE IS A UAB   .IF DF V$$TRM * MOV T.UCB(R4),R1 ;LOCATE TASK'S TI: UCB MOV (R1),R0 ;POINT TO DCBO0 CMP D.NAM(R0),#"VT ;IS IT A VIRTUAL TERMINAL? BNE 20$ ;IF NE NOA, MOV U.PTCB(R1),R1 ;LOCATE PARENT TASK TCB6 BEQ 20$ ;IF EQ, USE $SYUAB SINCE CAN'T FIND PARENT' MOV T.ACN(R1),R0 ;TRY TO USE ITS UABR) BEQ 20$ ;IF EQ, USE $SYUAB AS DEFAULTI) 5$: MOV R0,KISAR6 ;MAP ACCOUNTING BLOCKQ+ CMPB #BT.UAB,@#B.TYP+140000 ;IS IT A UAB  BEQ 30$ ;IF EQ YES3 MOV @#B.PNT+140000,R0 ;GET ADDRESS OF NEXT BLOCKT BR 5$ ;CHECK ITR  .IFF ;V$$TRMT % BR 20$ ;USE $SYUAB AS DEFAULT UABC  .ENDC ;V$$TRM  4 10$: MOV $CKUAB,R0 ;GET UAB ADDRESS FROM CLQ BLOCK BNE 30$ ;IF NE, THERE IS ONE3 20$: MOV $SYUAB,R0 ;USE SYSTEM UAB AS LAST RESORT) BEQ 90$ ;IF EQ, ACCOUNTING NOT ACTIVE  30$: MOV R0,KISAR6 ;MAP UAB + INCB @#B.USE+140000 ;INCREMENT USE COUNT 4 INC @#B.ACT+140000 ;INCREMENT ACTIVE TASK COUNTER0 MOV #B.TAS,R1 ;GET OFFSET TO TASK COUNT FIELD' CALL $ADAT1 ;INCREMENT TASK COUNTERE MOV #BS.ACT,R1 ;ACTIVATE TAB1 BIT #BF.TSK,$ACNFE ;TASK ACCOUNTING TURNED ON?C BNE 50$ ;IF NE YES9 MOV T.EFLM(R4),-(SP) ;CHECK FOR ANY TIME LIMIT ON TASK  BIS T.EFLM+2(R4),(SP)+ ;M! BEQ 80$ ;IF EQ, NO TIME LIMITT2 BIS #BS.TML,R1 ;SET TIME LIMIT ONLY BIT FOR TAB ;0 ; CREATE TAB FOR TASK  ;I5 ; TKTN CANNOT HAVE A TAB, BECAUSE IT GETS REQUESTEDT2 ; IN THE PROCESSING OF A TAB ALLOCATION FAILURE. ;;- 50$: CMP $TKNPT,R4 ;IS TKTN BEING REQUESTED  BEQ 80$ ;IF EQ YES MOV KISAR5,-(SP) ;SAVE KISAR5! MOV R0,-(SP) ;SAVE UAB ADDRESSN% MOV R1,-(SP) ;SAVE VALUE FOR B.STMS MOV #B.TBLK,R1 ;LENGTH OF TAB MOV R3,-(SP) ;SAVE R3 CALL $ALTAB ;ALLOCATE A TAB  MOV (SP)+,R3 ;RESTORE& BCS 75$ ;IF CS, ALLOCATION FAILURE3 MOV R0,2(SP) ;REPLACE UAB ADDR WITH THE TAB ADDR % MOV R0,KISAR5 ;MAP TAB WITH KISAR5 = MOV #!BT.TAB,@#B.TYP+120000 ;TAB IDENTIFACTIONA5 MOV #B.HID+120000,R1 ;POINT TO USER ID AREA OF TABS 55$: MOV R1,R2 ;COPY ADDRESSM1 MOV 20000(R2),(R1)+ ;COPY WORD FROM UAB TO TAB - CMP #B.HEND+120000,R1 ;ENTIRE AREA COPIED?. BHI 55$ ;IF HI NO : MOV #/2,R2 ;GET NUMBER OF WORDS TO CLEAR2 60$: CLR (R1)+ ;CLEAR ACCUMULATION FIELD IN TAB SOB R2,60$ ;LOOP4 MOV #B.CPUL+2+120000,R1 ;POINT TO CPU LIMIT FIELD. MOV T.EFLM+2(R4),(R1) ;COPY LIMIT INTO TAB MOV T.EFLM(R4),-(R1)A- MOV (R1)+,-(SP) ;CHECK IF THERE IS A LIMIT. BIS (R1),(SP)+ ;T BEQ 70$ ;IF EQ, NO LIMIT9 MOV -2(R1),@#B.CPU+120000 ;COPY LIMIT INTO B.CPU FIELDR MOV (R1),@#B.CPU+2+120000 ;2 COM @#B.CPU+120000 ;CONVERT TO 1'S COMPLIMEMENT5 COM @#B.CPU+2+120000 ;TO ENABLE DETECTION WITH BCSD! 70$: TST (R1)+ ;POINT TO B.PNTR* MOV KISAR6,(R1)+ ;INSERT POINTER TO UAB) CMP T.UCB(R4),$COPT ;IS CO: TASK'S TI:C BNE 73$ ;IF NE NOT% BIS #BS.CO,(SP) ;SET INDICATOR BIT$ 73$: MOVB (SP),(R1)+ ;INSERT B.STM5 MOVB T.PRI(R4),(R1)+ ;INSERT INITIAL TASK PRIORITYT( MOV T.NAM(R4),(R1)+ ;00dwcvtblINSERT TASK NAME MOV T.NAM+2(R4),(R1)+ ;# MOV R4,(R1)+ ;INSERT TCB ADDRESS." MOV R0,R1 ;COPY ADDRESS OF TAB, MOV #B.BEG,R0 ;TASK ACTIVATION TIME FIELD CALL $TMSTP ;TIME STAMP TABT( 75$: TST (SP)+ ;CLEAN B.STM OFF STACK- MOV (SP)+,R0 ;GET ADDR OF ACCOUNTING BLOCK # MOV (SP)+,KISAR5 ;RESTORE KISAR5I6 80$: MOV R0,T.ACN(R4) ;LINK ACCOUNTING BLOCK OFF TCB' 90$: MOV (SP)+,KISAR6 ;RESTORE KISAR6T" MOV R4,R0 ;RESTORE TCB ADDRESS MOV (SP)+,R4 ;RESTORE R4  RETURNR ! .ENDC" # $ % ;+3& ; **-$UISET-ESTABLISH DEFAULT UIC AND CURRENT UICD' ;.D( ; THIS ROUTINE ESTABLISHES DEFAULT AND CURRENT FOR REQUESTED TASKS) ; IN MULTI-USER SYSTEMS.* ;M + ; INPUTS:, ;:- ; R1=REQUEST UIC4. ; R2=ADDRESS OF SECOND STATUS WORD OF CURRENT TASK(/ ; R4=ADDRESS OF HEADER OF CURRENT TASK0 ; 1 ; OUTPUTS:2 ;(3 ; R1=CURRENT UIC4 ; R3=DEFAULT UIC65 ; C=1 IF NONPRIVILEGED TASK IS TRYING TO CHANGE UIC6 ; C=0 OTHERWISE7 ;-8 9 .IF DF M$$MUP: 2; $UISET::MOV H.DUIC(R4),R3 ;PROPAGATE DEFAULT UIC< TST R1 ;UIC SPECIFIED?= BEQ 10$ ;IF EQ NO > MOV R1,R3 ;USE SPECIFIED UIC.? BIT #T3.PRV,2(R2) ;CURRENT TASK PRIVILEGED?@ BNE 20$ ;IF NE YES6A CMP R1,H.CUIC(R4) ;NONPRIVILEGED TASK CHANGING UIC?B BEQ 10$ ;IF EQ NONC SEC ;ELSE RETURN C-BIT SETO:D 10$: MOV H.CUIC(R4),R1 ;FORCE PROPAGATION OF CURRENT UICE 20$: RETURN ;CF G .ENDCH I J ;+%K ; **-$MAPTK-MAP TASK ADDRESS WINDOWOL ;IDM ; THIS ROUTINE IS CALLED TO MAP THE FIRST WINDOW BLOCK IN A TASK'S3N ; HEADER IN A MAPPED SYSTEM FROM ITS PCB AND TCB.1O ;I P ; INPUTS:MQ ;,=R ; R1=POINTER TO NUMBER OF WINDOW BLOCKS IN THE TASK HEADER.I6S ; R5=ADDRESS OF THE TASK CONTROL BLOCK FOR THE TASK.T ;I U ; OUTPUTS:V ; 0W ; R1=ADDRESS OF LAST PDR IMAGE IN TASK HEADER.X ; R2 IS MODIFIED.MY ;-Z 0[ $MAPTK::TST (R1)+ ;POINT TO TASK WINDOW BLOCK-\ MOV T.PCB(R5),R2 ;PICK UP TASK PCB ADDRESS$.] MOV R2,(R1)+ ;SET TASK PCB ADDRESS (W.BPCB)^ _ ` .IF DF U$$DASa >b BIT #T4.DSP,T.ST4(R5) ;TASK BUILT WITH SEPARATE I/D SPACE ?c BEQ 2$ ;IF EQ NO0d ADD #W.BLGH-2,R1 ;POINT TO WINDOW 1 (D-SPACE))e MOV R2,(R1)+ ;SET UP TASK PCB (W.BPCB)5f 2$: ;REFERENCE LABELLg h .ENDC ; DF U$$DASi j k .IF DF P$$LASl 6m BIT #T3.ROV,T.ST3(R5) ;TASK HAVE RESIDENT OVERLAYS?1n BNE 20$ ;IF NE AS, DON'T CHANGE WINDOW BLOCKSo p .IFTFq 7r MOV (R1)+,(R1) ;INIT HIGH VIRT ADDR (W.BLVR)(W.BHVR)R,s MOV P.SIZE(R2),R2 ;PICK UP PARTITION SIZEt u .IFTSv 7w SUB T.OFF(R5),R2 ;REDUCE BY TASK OFFSET IN PARTITIONSx y .IFTFz *{ MOV R2,-(SP) ;PUSH REQUIRED WINDOW SIZE| SWAB (SP) ;CONVERT TO BYTES } RORB (SP) ;(~ ROR (SP) ; ROR (SP) ;9 ADD (SP)+,(R1) ;COMPLETE HIGH VIRTUAL ADDRESS (W.BHVR)  DEC (R1)+ ;T  .IFTK , TST (R1)+ ;POINT TO WINDOW SIZE (W.BATT)) MOV R2,(R1)+ ;SET WINDOW SIZE (W.BSIZ) 8 MOV T.OFF(R5),(R1)+ ;SET OFFSET IN PARTITION (W.BOFF)$ INC R1 ;POINT TO NUMBER OF PDR'S  .IFF 7 ADD #W.BNPD-W.BATT,R1 ;POINT TO NUMBER OF PDR'S BYTEA  .IFTF & ASL R2 ;SHIFT # PDR'S TO HIGH BYTE4 SWAB R2 ;# PDR'S TO LO BYTE, LAST PDR SIZE TO HI0 SUB #377,R2 ;INC # PDR'S & DEC LAST PDR SIZE0 SBC R2 ;IF CS, EVEN BOUNDARY, REDUCE # PDR'S. MOVB R2,(R1)+ ;SET NUMBER OF PDR'S (W.BNPD) ROR R2 ;ADJUST CORRECT SIZET/ MOV R2,(R1) ;SET SIZE FOR LAST PDR (W.BLPD) 4 MOVB #6,(R1) ;SET FOR READ/WRITE ACCESS (W.BLPD) 10$: RETURN ;   .IFTP @ 20$: ADD #W.BLPD-W.BLVR,R1 ;POINT TO LAST WORD OF WINDOW BLOCK RETURN ;  .ENDC   ;+$ ; **-$CALTA-CALCULATE TRAP ADDRESS ;RH ; THIS ROUTINE IS CALLED TO CALCULATE WHETHER A TRAP ADDRESS SHOULD BED ; STORED ODD (SERVICE IN SUPERVISOR MODE) OR EVEN (SERVICE IN USERE ; MODE), ACCORDING TO THE PREVIOUS MODE FROM THE DIRECTIVE CALL ANDTH ; THE VALUE OF THE LOW ORDER BIT OF THE ADDRESS SPECIFIED (1 = SERVICE ; IN "OTHER" MODE).W ;) ; INPUTS:R ;  ; R2=SPECIFIED ADDRESS.A ;. ; OUTPUTS: 00d%w'wtkTADATADATADATADATADATA;N! ; R2=TRAP ADDRESS TO BE STORED.R" ; ALL OTHER REGISTERS PRESERVED. ;-   .IF DF S$$LIB * $CALTA::TST R2 ;TRAP ADDRESS SPECIFIED?% BEQ 20$ ;IF EQ NO, RETURN AS ZEROE4 BIT #^CPSMODE&PMODE,PS ;PREVIOUS MODE SUPERVISOR?( BNE 20$ ;IF NE NO, USE ADDRESS AS IS% BIT #1,R2 ;ODD ADDRESS SPECIFIED?L BEQ 10$ ;IF EQ NOF+ DEC R2 ;MAKE ADDRESS EVEN FOR USER MODE1 BR 20$ ;4 10$: INC R2 ;MAKE ADDRESS ODD FOR SUPERVISOR MODE 20$: RETURN ;A  .ENDC   .END R2=TRAP ADDRESS TO BE STORED.R" ; ALL OTHER REGISTERS PRESERVED. ;-   .IF DF S$$LIB * $CALTA::TST R2 ;TRAP ADDRESS SPECIFIED?% BEQ 20$ ;IF EQ NO, RETURN AS ZEROE4 BIT #^CPSMODE&PMODE,PS ;PREVIOUS MODE SUPERVISOR?( BNE 20$ ;IF NE NO, USE ADDRESS AS IS% BIT #1,R2 ;ODD ADDRESS SPECIFIED?L BEQ 10$ ;IF EQ NOF+ DEC R2 ;MAKE ADDRESS EVEN FOR USER MODE1 BR 20$ ;4 10$: INC R2 ;MAKE ADDRESS ODD FOR SUPERVISOR MODE 20$: RETURN ;A  .ENDC  % .TITLE SAVXT - DW/DZ COMMON DRIVER .IDENT /01.06/O;I7; COPYRIGHT (C) 1982 BY DIGITAL EQUIPMENT CORPORATION:; ALL RIGHTS RESERVED.;S>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED@; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;I ; . ; P. J. BEZEREDI / I. P. ZATKOVICH 05-MAY-82 ;M ; MODIFIED BY: ; ; T. LEKAS 11-JUL-822 ; TL203 -- REMOVE UNNEEDED INSTRUCTIONS IN ORDER ; TO GET SAVXT TO FIT. ;  ; P. J. BEZEREDI 13-JUL-82, ; PB322 -- STREAMLINE DRIVER EVEN FURTHER. ;. ; T. LEKAS 15-JUL-82= ; TL205 -- FIX PB322 - THE DRIVER WAS UNMAPPING ITSELF WHENS ; WHEN RUNNING IN APR6S ;I ; M. Pettengill 15-July-1982; ; MLP074 - Correct retry logic to actually retry 4 times 5 ; and to jump to the correct location in boot romI ;- ;2?; THIS MODULE CONTAINS A SPECIAL DRIVER USED BY BOOT AND SAVE $; TO READ AND WRITE SYSTEM IMAGES.;; DRIVER INPUTS:; R2 = NOT USEDJ; R3 = NOT USED2; R4 = UNIT NUMBER/; R5 = 0 USE CSR ADDRESS STORED IN THE DRIVERU(; R5 <> 0 USE CSR ADDRESS STORED IN R5;N; DRIVER OUTPUTS:; R0 = RESIDUAL BLOCK COUNTS@; R2 = POSSIBLE MEMORY SIZE FROM CONFIGURATION TABLE ; PB322; R1 = DEVICE NAME IN ASCIIe; R4 = PHYSICAL UNIT NUMBERr; R5 = CSR ADDRESS; .MCALL HWDDF$ HWDDF$I!";I#; DRIVER TABLE$;A%!& .PSECT DRVTAB,RW,D,GBL,REL,CONI'"( .ASCII /XT/ ; XT COMMON DRIVER)) .WORD XTLLEN ; ADDRESS OF LOAD LENGTHU** .WORD XTSA ; ADDRESS OF BUFFER ADDRESS/+ .WORD XTFUN ; ADDRESS OF FUNCTION CODE/UNITR', .WORD $XTDRV ; DRIVER ENTRY ADDRESS 2- .WORD /2; SIZE OF DRIVER IN WORDS#. .WORD 160 ; WRITE FUNCTION CODE3"/ .WORD 100 ; READ FUNCTION CODE0 .WORD 0 ; UNIT SELECT BITS/1 .WORD XTFUN ; ADDRESS OF FUNCTION CODE WORD(2 .WORD XTCSR ; ADDRESS OF CSR ADDRESS3 4 .PSECTC56;R7; SPECIAL DRIVER8;.9+:$XTDRV::BR XT0 ;;; BR AROUND FIXED STUFF;+;XTNAM: .WORD "XT ;;; GENERIC DEVICE NAMED)<XTCSR: .WORD 0 ;;; DEFAULT CSR ADDRESSD3=XTFUN: .WORD 0 ;;; FUNCTION CODE AND UNIT NUMBERE(>XT0: TST R5 ;;; CSR ADDRESS SUPPLIED?? BNE 5$ ;;; IF NE YES-@ MOV XTCSR,R5 ;;; NO, GET SAVED CSR ADDRESSD8A5$: MOV #1,@#SR0 ;;; MAKE SURE MEMORY MANAGEMENT IS ONFA MOV #1400,@#KISAR3 ;;; MAP TO POSSIBLE CONFIGURATION TABLE ; PB3226A MOVB @#77707,XTSIZ+1;;; SAVE MEMORY SIZE ; PB322*B MOV PC,R3 ;;; SET ADDRESS FOR PIC CODEC ADD #,R3 ;;; .../D MOV @#6,XTBLK ;;; SAVE STARTING BLOCK NUMBER.&E MOVB R4,1(R3) ;;; SAVE THE UNIT NO..F BITB #20,(R3) ;;; IS THIS A WRITE FUNCTION?G BEQ 6$ ;;; IF EQ NOD5H MOV 15$,MOVE ;;; SET GENERIC FILL SILO INSTRUCTIONR(I6$: CMP #401,(R5) ;;; IS THIS AN RD50?J BNE 20$ ;;; IF NE NOK; L; RD50 SETUP CODEMM;4*N MOV #"DW,XTNAM ;;; SET RD50 DEVICE NAME0O BIC #100000,MOVE ;;; CONVERT A MOVB TO A MOVB-P BITB #20,(R3) ;;; IS THIS A READ FUNCTION?DQ BEQ 10$ ;;; IF EQ YES#*R MOVB #60,(R3) ;00-wcvtbl;; NO, SET WRITE COMMANDS BR XTRTY ;;;)T10$: MOVB #40,(R3) ;;; SET READ COMMANDTU BR XTRTY ;;;0V15$: MOVB (R1)+,(R2) ;;; FILL SILO INSTRUCTIONW;QX; RX50 SETUP CODE Y;E.Z20$: MOV #"DZ,XTNAM ;;; SET RX50 DEVICE NAME [ ASL R4 ;;; SHIFT UNIT NUMBER$\ BISB R4,(R3) ;;; SET UNIT NUMBER];D^; COMMON PARAMETER SETUP_;E7`; TEST NUMBER OF RETRIES. IF MORE THAN FOUR, QUIT ANDB3a; JUMP TO DIAGNOSTIC ROM TO CONTINUE BOOT PROCESSIb; WITH NEXT DEVICE.Fc;E*dXTRTY: DEC (PC)+ ;;; ANY RETRIES LEFT ?e .WORD 4 ;;; (FOUR RETRIES) &e BPL 25$ ;;; IF NE YES ; MLP074De JMP @#167700 ;;; TRY BOOTING THE NEXT DEVICE IN SEQUENCE ; MLP0743h25$: MOV (PC)+,R1 ;;; GET BUFFER ADDRESS ;**-2 iXTSA: .WORD 0 ;;;*j CLC ;;; CONVERT TO 32WD BLOCK ADDRESSk ROL R1 ;;; ...l ROL R1 ;;; ...m SWAB R1 ;;; ...E2n MOV R1,@#KISAR3 ;;; SETUP APR3 TO MAP TO BUFFER#o MOV (PC)+,R4 ;;; GET LOAD LENGTH pXTLLEN: .WORD 0 ;;;$q MOV #0,SBLK ;;; SET STARTING LBNrXTBLK= .-4 ;;;*sXTLOOP: MOV (PC)+,R1 ;;; GET CURRENT LBNtSBLK: .WORD 0 ;;;,t TST MOVE ;;; IS THIS AN RD50? ; PB322't BMI DZLOOP ;;; IF MI NO ; PB322Lw; ;**-2x; RD50 BASIC LOOPAy;S+zDWLOOP: TST 20(R5) ;;; IS THE UNIT BUSY?;){ BMI DWLOOP ;;; IF MI YES, WAIT FOR IT;"| INC R1 ;;; MAKE IT LOGICAL I/O} MOV R1,R2 ;;; COPY ITI+~ BIC #177760,R2 ;;; ISOLATE SECTOR NUMBER(/ ASH #-4,R1 ;;; RIGHT JUSTIFY TRACK AND HEAD;' CLR R0 ;;; GET READY FOR THE DIVIDE- DIV #4,R0 ;;; CALCULATE CYLINDER AND HEADG! MOVB R2,6(R5) ;;; SET SECTOR #;! MOVB R0,12(R5) ;;; SET TRACK #  MOV R1,14(R5) ;;; SET HEAD # * MOVB (R3),16(R5) ;;; START THE FUNCTION& BR COMMON ;;; GET INTO COMMON LOOP; ; RX50 BASIC LOOP;;B5DZLOOP: CALL DZTRK ;;; CONVERT LBN TO DISK ADDRESSM( MOVB (R3),4(R5) ;;; LOAD THE FUNCTION" MOVB R1,10(R5) ;;; SET SECTOR # MOVB R0,6(R5) ;;; SET TRACK ## TSTB 22(R5) ;;; CLEAR RX50 SILOR;;; COMMON TRANSFER LOOP;4COMMON: BITB #20,(R3) ;;; IS THIS A READ FUNCTION? BEQ 10$ ;;; IF EQ YES. CALL SILO ;;; NO, FILL SILO BEFORE WRITING110$: CALL WAIT ;;; WAIT FOR FUNCTION TO FINISH ( BCS XTRTY ;;; IF CS ERROR, TRY AGAIN# INC SBLK ;;; UPDATE CURRENT LBN;. BITB #20,(R3) ;;; WAS THIS A READ FUNCTION?& BNE 20$ ;;; IF NE NO, TEST FOR END! CALL SILO ;;; YES, EMPTY SILO 120$: SOB R4,XTLOOP ;;; LOOP IF MORE LBNS REMAIN) BR XTDONE ;;; ALL FINISHED ; PB322 ;**-1 ;!; PERFORM SILO/MEMORY TRANSFERSS;  .ENABL LSB3SILO: MOV #512.,R0 ;;; SET COUNT OF BYTES IN SILOS" MOV R5,R2 ;;; COPY CSR ADDRESS, ADD #20,R2 ;;; POINT TO RX50 DATA BUFFER. MOV #60000,R1 ;;; SET BASE FOR APR6 MAPPING, TST MOVE ;;; IS THIS AN RD50? ; PB322# BMI 5$ ;;; IF MI NO ; PB322;4 SUB #10,R2 ;;; POINT TO RD50 DATA BUFFER ;**-2% ASR R0 ;;; CONVERT BYTES TO WORDSF*5$: CMP #"DW,XTNAM ;;; IS THIS THE RD50? BNE MOVE ;;; IF NE NO ( TSTB 20(R5) ;;; READY FOR NEXT MOVE? BPL 5$ ;;; IF PL NO.AMOVE: MOVB (R2),(R1)+ ;;; EMPTY SILO (WILL CHANGE TO FILL SILO)! SOB R0,5$ ;;; LOOP UNTIL DONE9 ADD #10,@#KISAR3 ;;; UPDATE APR3 MAPPING BY 256. WORDS1( TST (PC)+ ;;; IS THE NXM TRAP SETUP?-TRPFLG: .WORD 0 ;;; FLAG=0 FIRST TIME THRU; BNE XIT ;;; IF NE NO/ MOV @#4,(PC)+ ;;; SAVE CURRENT TRAP 4 VECTOR*TRPPC: .WORD 0 ;;;E MOV @#6,(PC)+ ;;; ...TRPPS: .WORD 0 ;;;H2 INC TRPFLG ;;; INDICATE THAT WE HAVE BEEN HERE MOV #PR7,@#6 ;;; SET NEW PS( MOV PC,R0 ;;; CALCULATE TRAP ADDRESS ADD #,R0 ;;; ...C MOV R0,@#4 ;;; SET NEW PC,XIT: RETURN ;;;N .DSABL LSB@;;"; WAIT FOR OPERATION TO COMPLETE;T2WAIT: TST MOVE ;;; IS THIS THE RD50? ; PB322$ BMI 10$ ;;; IF MI NO ; PB322%5$: TST 20(R5) ;;; DONE? ;**-3S BMI 5$ ;;; IF MI NO*! BITB #1,17(R5) ;;; ANY ERRORS?6 BR 20$ ;;; EXITP!10$: TST 24(R5) ;;; START RX50;)15$: BITB #10,4(R5) ;;; DONE? ;**-1R005wf8wtkTADATADATADATADATADATA BEQ 15$ ;;; IF EQ NO" BITB #200,4(R5) ;;; ANY ERRORS?20$: BEQ 30$ ;;; IF EQ NO SEC ;;; INDICATE ERRORP30$: RETURN ;;;;;S-; CONVERT RX50 LBN TO PHYSICAL DISK ADDRESSO;E.DZTRK: CLR R0 ;;; SIGN EXTEND R1 ; TL203= DIV #10.,R0 ;;; DIVIDE BY # OF SECTORS PER TRACK ; TL203R, CMP #4,R1 ;;; C=1 IF 5<=R1<=9. ;**-11+ ROL R1 ;;; DOUBLE FOR INTERLEAVE FACTORB* ASL R0 ;;; ADD FOR TRACK TO TRACK SKEW! ADD R0,R1 ;;; SKEW BY 2*TRACK  ASR R0 ;;; RESTORE TRACK # MOV #10.,R2 ;;; SET MODULUS;430$: SUB R2,R1 ;;; PUT SECTOR IN RANGE -10. TO -13 BGE 30$ ;;; IF GE LOOP UNTIL REMAINDER IS MINUS$ ADD R2,R1 ;;; NORMALIZE SECTOR # INC R1 ;;; FORGET SECTOR 01 INC R0 ;;; CONVERT TRACK TO LOGICAL OPERATION;' CMP R0,#120 ;;; DO WE NEED TO WRAP?0 BNE 40$ ;;; IF NE NO CLR R0 ;;; WRAP AROUND40$: RETURN ;;; ;E; WE ARE FINISHED;;DTRP4: &XTDONE: MOV TRPPC,@#4 ;;; RESTORE PC MOV TRPPS,@#6 ;;; RESTORE PSA* MOV R4,R0 ;;; GET RESIDUAL BLOCK COUNT. MOV (PC)+,R2 ;;; GET SYSTEM SIZE ; PB322"XTSIZ: .WORD 0 ;;; ; PB322$ MOVB 1(R3),R4 ;;; GET UNIT NUMBER# MOV XTNAM,R1 ;;; GET DEVICE NAMERXTEND: RETURN ;;;  .ENDTRACK TO LOGICAL OPERATION;' CMP R0,#120 ;;; DO WE NEED TO WRAP?0 BNE 40$ ;;; IF NE NO CLR R0 ;;; WRAP AROUND40$: RETURN ;;; ;E; WE ARE FINISHED;;DTRP4: &XTDONE: MOV TRPPC,@#4 ;;; RESTORE PC MOV TRPPS,@#6 ;;; R .IIF NDF R$$MPL, .TITLE EXESTBD .IIF DF R$$MPL, .TITLE SFVC2 .IDENT /02.03/R;O6; COPYRIGHT (C) 1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;E; B. S. MCCARTHY 28-NOV-83; $; MODIFIED FOR RSX-11M-PLUS V4.0 BY:;! ; R. D. HANEYO; B. S. MCCARTHY; G. N. LARSEN; T. SCHOELLER ; R. KRISHNA; J. W. BERZLE;R$; MODIFIED FOR RSX-11M-PLUS V4.1 BY:; ; R. D. HANEY 26-OCT-87 02.00I;F ; RDH131 -- ADD $RMTSK FOR CPR;.; G. N. LARSEN 5-NOV-87 02.01B;I6; GNL076 -- ADD $SECPB FOR TOTAL SECONDARY POOL COUNT; ; J. W. BERZLE 27-JAN-88 02.02;L5; JWB226 -- ADD $CRSFM FOR LOADABLE MM: CRASH DRIVERW; ; G. N. LARSEN 7-MAR-88 02.03;.; GNL081 -- ADD $CPABO FOR CPRI;D; EXEC VECTORING ROUTINE;!A; AS YOU MAY HAVE NOTICED IN THE .TITLE DIRECTIVE, THIS MODULE ISE; ASSEMBLED CONDITIONALLY UPON R$$MPL. THE MODULE IS ASSEMBLED TWICE.G; THE FIRS TIME (ASSEMBLED WITH RSXMC), PRODUCES THE VECTOR CODE ITSELFJ; FOR THE EXEC (MODULE SFVC2). THE SECOND ASSEMBLY, WITHOUT RSXMC, CREATESH; AN OBJECT MODULE (MODULE EXESTB) WHICH CAN BE TASKBUILT INTO THE DUMMY; STB FILE FOR THE EXECUTIVE.H;+.; **-$SFVCD-TRANSLATE EXEC VECTOR (FOR DRIVER)4; **-$SFVCP-TRANSLATE EXEC VECTOR (FOR COMM PROCESS);EF; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TRANSLATE A VECTOR OF OFFSETSF; INTO THE SYSTEM VECTOR (DEFINED BELOW) INTO OFFSETS. SEE COMMENTS ON; BUFFER FORMAT BELOW.;D$; * * * N O T E W E L L * * *;SI; THESE ROUTINES ARE AT VIRTUAL ZERO IN THE DIRECTIVE COMMON. THE ROUTINEEH; COULD BE MOVED, BUT LABEL $SFVCP HAD BETTER STAY AT ZERO FOR ALL TIME,; AND $SFVCD AT VIRTUAL 4E;I ; INPUTS:;*;; R2=NUMBER OF ENTRIES IN VECTOR (NUMBER OF WORDS, LESS ONEL; FOR FLAGS WORD)&; R3=ADDRESS OF WD. 00. OF THE BUFFER.;S7; CALLING SEQUENCE ($SFVCD): (REGISTER USAGE ARBITRARY) ;T1; MOV @#112,R0 ;GET POINTER TO VECTOR OF POINTERS 5; MOV @(R0),KINAR6 ;MAP ROUTINE WITH CORRECT APR BIAS '; CALL @#140004 ;CALL TRANSLATE ROUTINEA;E7; CALLING SEQUENCE ($SFVCP): (REGISTER USAGE ARBITRARY)D;U1; MOV @#112,R0 ;GET POINTER TO VECTOR OF POINTERS,4; MOV @(R0),-(SP) ;MAP ROUTINE WITH CORRECT APR BIAS3; MOV #120000,-(SP) ;GET ADDR. OF TRANSLATE ROUTINEN3; CALL $MPPRO ;CALL ROUTINE IN EXEC WHICH MAPS AND0; ;CALLS TRANSLATE ROUTINE ;U ; OUTPUTS:;(6; THE VECTOR IS FILLED WITH THE REQUESTED INFORMATION.; ;- .PAGE00f=wcvtbl .IF DF R$$MPL;$SFVCP::JMP SFVCC ;ENTRY POINT TO TRANSLATE PROCESS VECTOR02$SFVCD:: ;ENTRY POINT TO TRANSLATE DRIVER VECTOR .IF DF K$$DAS/ MOV @#KDSAR6,-(SP) ;SAVE MAPPING OF DATA SPACEO5 MOV @#KINAR6,@#KDSAR6;OVERMAP I/D (CALLER CAN'T TELLT# ;THIS MUST BE DONE, BECAUSE THEP' ;FEATURE MASK ISN'T AVAILABLE YET).L .ENDC ; DF K$$DAS! TST (R3) ;FIRST WORD NON-ZERO ? ( ;(IMPLIES VECTOR ALREADY TRANSLATED) BNE 40$ ;IF NE YES, RETURN NOW3 INC (R3)+ ;SET FLAG FOR VECTOR ALREADY TRANSLATED"10$: MOV (R3),R0 ;GET NEXT OFFSET% CMP R0,#MAXOFF ;PAST END OF VECTOR ?; BHIS 20$ ;IF HIS YES BIT #1,R0 ;ODD ? BNE 20$ ;IF NE YES0 MOV EXEVEC+20000(R0),(R3)+ ;INSERT REAL ADDRESS BR 30$ ;FINISH LOOPPA20$: MOV #160001,(R3)+ ;THIS ADDRESS SHOULD ALWAYS RESULT IN TRAPF+ ;(IT'S ODD AND GUARANTEED NON-EXISTENT);30$: SOB R2,10$ ;FINISH LOOPO40$: .IF DF K$$DAS) MOV (SP)+,@#KDSAR6 ;RESTORE APR6 MAPPING  .ENDC ; DF K$$DAS RETURN ; % .BLKW 50. ; ***** PATCH SPACE ***** .ENDC ; DF R$$MPL .PAGE;+!; **-$SFVC2-TRANSLATE EXEC VECTORO;;F; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TRANSLATE A VECTOR OF OFFSETSF; INTO THE SYSTEM VECTOR (DEFINED BELOW) INTO OFFSETS. SEE COMMENTS ON; BUFFER FORMAT BELOW.;S ; DPB FORMAT: ;A#; WD. 00 -- DIC(169.),DPB SIZE(4.).D.; WD. 01 -- SUBFUNCTION CODE (15.) (LOW BYTE).; WD. 02 -- BUFFER ADDRESS.$#; WD. 03 -- BUFFER SIZE (IN WORDS).A; ; BUFFER FORMAT:;D7; WD. 00 -- RETURNED AS ADDRESS OF ROUTINE/DATA CELLC(; WD. 01 -- OFFSET INTO SYSTEM VECTOR; WD. 02/03 -- SECOND PAIR; .; .; .;I ; INPUTS:S;E*; R2=NUMBER OF EXTRA WORDS IN USER BUFFER.&; R3=ADDRESS OF WD. 00. OF THE BUFFER.(; R5=TCB ADDRESS OF THE REQUESTING TASK.; ; OUTPUTS:;P=; THE USER'S BUFFER IS FILLED WITH THE REQUESTED INFORMATION.-;U;- .PAGE .IF DF R$$MPL .ENABL LSB 7$SFVEC::INC R2 ;ALLOW FOR MANDATORY PARAMETER IN COUNT! MOV R2,R0 ;COPY NUMBER OF WORDS- INC R0 ;ALLOW FOR FLAGS WORD$ ASL R0 ;CONVERT TO NUMBER OF BYTES% ADD R3,R0 ;POINT PAST END OF BUFFERA BCS 50$ ;IF CS WRAPS AROUND3 CMP R0,#160000 ;IS IT PAST MAPPING RANGE OF APR6 ?F# BHI 50$ ;IF HI YES - RETURN ERRORB'SFVCC: TST (R3) ;FIRST WORD NON-ZERO ?T( ;(IMPLIES VECTOR ALREADY TRANSLATED) BNE 40$ ;IF NE YES, RETURN NOW3 INC (R3)+ ;SET FLAG FOR VECTOR ALREADY TRANSLATEDB"10$: MOV (R3),R0 ;GET NEXT OFFSET% CMP R0,#MAXOFF ;PAST END OF VECTOR ?, BHIS 20$ ;IF HIS YES BIT #1,R0 ;ODD ? BNE 20$ ;IF NE YES* MOV EXEVEC(R0),(R3)+ ;INSERT REAL ADDRESS BR 30$ ;FINISH LOOPEA20$: MOV #160001,(R3)+ ;THIS ADDRESS SHOULD ALWAYS RESULT IN TRAPN+ ;(IT'S ODD AND GUARANTEED NON-EXISTENT)T30$: SOB R2,10$ ;FINISH LOOPI40$: RETURN ; 350$: DRSTS D.RS98 ;INVALID VECTOR BUFFER SPECIFIED .DSABL LSBU% .BLKW 50. ; ***** PATCH SPACE *****R .ENDC ; DF R$$MPL .PAGE ; MACRO TO DEFINE VECTOR ENTRIES .MACRO VECTOR ENTRY,COND, .IF NDF R$$MPLS'ENTRY'==OFFSETOOFFSET=OFFSET+2I .IFF ; NDF R$$MPL .IF NB CONDE .IF DF COND .WORD ENTRY# .IFF ; DF CONDS .WORD 160001 .ENDC ; DF COND .IFF ;NB CONDT .WORD ENTRY .ENDC ; NB CONDT .ENDC ; NDF R$$MPLD .ENDM VECTORE9; MACRO FOR ENTRIES WHOSE NAMES DON'T APPEAR IN DUMMY STB  .MACRO NOSTB ENTRY,COND .IF NDF R$$MPLEOFFSET=OFFSET+2N .IFF ; NDF R$$MPL .IF NB CONDC .IF DF COND .WORD ENTRYF .IFF ; DF COND  .WORD 160001 .ENDC ; DF COND .IFF ;NB CONDN .WORD ENTRY .ENDC ; NB CONDW .ENDC ; NDF R$$MPLN .ENDM NOSTB+; MACRO TO DEFINE SYNONYMS FOR ENTRY POINTS  .MACRO SYNONM ENTRY .IF NDF R$$MPL'ENTRY'==OFFSET-2A .ENDC ; NDF R$$MPLA .ENDM SYNONMI0; DEFINE LOCAL SYMBOLS FOR MULTIPLE CONDITIONALS .IF DF M$$EXT&U$$UMR+ EXTUMR = 0D .ENDC ;DF M$$EXT&U$$UMR .IF DF S$$WPC&D$$ISK  SWAP=0R .ENDC ;DF S00fEw8wtkTADATADATADATADATADATA$$WPC&D$$ISK  .IF DF C$$CDA .IIF EQ C$$CDA-12 CDA$MS=0 .IIF EQ C$$CDA CDA$MS=0 .ENDC ;DF C$$CDA .IF DF M$$NET&M$$PRO. MPNET=0 .ENDC ; DF M$$NET&M$$PROA .IF DF L$$XDT&M$$PROR MPLXDT=0  .ENDC ; DF L$$XDT&M$$PRO. .PAGE; THE VECTOR TABLE ITSELF=; AS OF FIELD TEST, THE VECTOR FOR THE VERSION 3.0 RELEASE ISF3; FROZEN. ADD NEW SYMBOLS AT THE END OF THE VECTOR.;T .IF NDF R$$MPL; OFFSET = 0R .IFFFEXEVEC:D .ENDC ; NDF R$$MPL. VECTOR D.VINT VECTOR KISAR0 VECTOR KISAR5 VECTOR KISAR6 VECTOR KISAR7 VECTOR P.LGTH VECTOR S.CTMN VECTOR S.FRK VECTOR S.EMBT VECTOR S.ITMN VECTOR S.KRB; VECTOR S.KS5,L$$DRV VECTOR S.KTBM VECTOR S.LHDD VECTOR S.PKT; VECTOR S.RCNT VECTOR S.ROFF VECTOR S.STSB VECTOR S.ST2 VECTOR S.ST3T VECTOR S.URMR VECTOR T.ACN0 VECTOR T.CPU VECTOR T.EXT VECTOR T.IRME VECTOR T.ISIZ VECTOR T.LGTH VECTOR T.OCBH VECTOR T.RDCT VECTOR T.RRM  VECTOR UISAR0 VECTOR UISAR1 VECTOR UISAR6 VECTOR UISAR7 VECTOR UISDR6 VECTOR UISDR7 VECTOR U.UAB  VECTOR V$$CTR VECTOR W.MAPC VECTOR W.RTRV VECTOR W.USE,P$$WND VECTOR W.VBN. VECTOR W.WISZ VECTOR .LB0 VECTOR .CO0 VECTOR .TT0 VECTOR $ABTIM VECTOR $ABTM2 VECTOR $ABTSK VECTOR $ACCRG VECTOR $ACHCK VECTOR $ACHKB VECTOR $ACHRO VECTOR $ACNFE VECTOR $ACTHD VECTOR $ACTPS VECTOR $ALACC VECTOR $ALOCB VECTOR $ALOC1 VECTOR $ALSEC VECTOR $ALTAB VECTOR $ALVBK VECTOR $APLIM VECTOR $ASUMR,EXTUMRO VECTOR $BCBUF,C$$CDA7 VECTOR $BILNG VECTOR $BLXIO VECTOR $BTTIM VECTOR $BTTM2 VECTOR $CBDHD VECTOR $CEFIV VECTOR $CEFN, VECTOR $CEX  VECTOR $CFLPT VECTOR $CKBFB VECTOR $CKBFR VECTOR $CKCSR VECTOR $CKMAP VECTOR $CKURM VECTOR $CLICQ VECTOR $CLINS VECTOR $CLKHD VECTOR $CLRMV VECTOR $CLSRF VECTOR $CNTLN VECTOR $COMEF VECTOR $COPTS VECTOR $CPBIT VECTOR $CPCRM VECTOR $CPMSK VECTOR $CPTBL VECTOR $CPUSC VECTOR $CPURM VECTOR $CPUTM VECTOR $CPUT1 VECTOR $CRALT,C$$CDAF VECTOR $CRATT VECTOR $CRAVL VECTOR $CRBAE,C$$CDAM VECTOR $CRCSR,C$$CDAO VECTOR $CRDEV,C$$CDAV VECTOR $CRKRB,C$$CDAO VECTOR $CRMS0,C$$CDAT VECTOR $CRMS3,C$$CDAO VECTOR $CRMS6,C$$CDAR VECTOR $CRMTB VECTOR $CRPAR,C$$CDAO VECTOR $CRPKT VECTOR $CRSBN,C$$CDAD VECTOR $CRSCS,C$$CDAO VECTOR $CRSUN,C$$CDAN VECTOR $CRUNT,C$$CDAO VECTOR $CTLST VECTOR $CTXPT VECTOR $CVDVN VECTOR $CXDBL VECTOR $DEACB VECTOR $DEAC1 VECTOR $DEARG VECTOR $DEATR VECTOR $DECLK VECTOR $DELRG VECTOR $DEPKT VECTOR $DESEC VECTOR $DESPK VECTOR $DETRG VECTOR $DEUMR,EXTUMRO VECTOR $DEVHD VECTOR $DICSV NOSTB $DIVC SYNONM $$DIVD VECTOR $DRATP VECTOR $DRDSE VECTOR $DREXT VECTOR $DRQRQ VECTOR $DTOER VECTOR $DVCER VECTOR $DVERR VECTOR $DVMSG VECTOR $DYPMN VECTOR $ENTSQ VECTOR $ERFLA VECTOR $ERRPT VECTOR $ERRSQ VECTOR $ERRX,E$$LOG VECTOR $EXRQF VECTOR $EXRQN VECTOR $EXRQP VECTOR $EXSIZ VECTOR $FINDI VECTOR $FMASK VECTOR $FMSK2 VECTOR $FMSK3 VECTOR $FMSK4 VECTOR $FNCLI VECTOR $FORKD VECTOR $FXRPT VECTOR $GGEF,G$$GEF VECTOR $GSPKT VECTOR $GTBYT VECTOR $GTPKT VECTOR $GTSPK VECTOR $GTWRD VECTOR $HEADR VECTOR $HFMSK VECTOR $HRCPT VECTOR $IBXMT VECTOR $ICAVL VECTOR $ICHKP VECTOR $IIMSK VECTOR $IISTM VECTOR $IIXMT VECTOR $INIBF VECTOR $INTCT VECTOR $INTSE VECTOR $INTSI VECTOR $INTSV VECTOR $INTXT VECTOR $IOALT VECTOR $IODON VECTOR $IOFIN VECTOR $KRBSC VECTOR $K6TAB VECTOR $LBUIC VECTOR $LDPWF VECTOR $LDREG VECTOR $LDRPT VECTOR $LOGHD VECTOR $LOGPT VECTOR $LSTLK VECTOR $MCRPT VECTOR $MKCSR VECTOR $MKCS2 VECTOR $MOULS VECTOR $MPDC1 VECTOR $MPLND VECTOR $MPLNE VECTOR $MPLUN VECTOR $MPPKT VECTOR $MPPRO VECTOR $MPVBN NOSTB $MUL K SYNONM $$MULM VECTOR $MSCR1,CDA$MSO VECTOR $MSCR2,CDA$MST VECTOR $MSCR3,CDA$MSO VECTOR $MXEXT VECTOR $M100Q,M$$NETT VECTOR $NCPU  VECTOR $NCTPT,T$$TSAO VECTOR $NMCLI VECTOR $NONSI VECTOR $NS0 00fMwcvtbl VECTOR $NS1  VECTOR $NS2  VECTOR $NS3  VECTOR $NS4  VECTOR $NS5  VECTOR $NS6  VECTOR $NS7  VECTOR $NTEND VECTOR $NTUIC VECTOR $NXTSK VECTOR $PARHD VECTOR $PARTB VECTOR $PFRSZ VECTOR $PKMAX VECTOR $PKNUM VECTOR $PLPAR VECTOR $POLBP VECTOR $POLFL VECTOR $POLST VECTOR $POOL  VECTOR $PRIHL VECTOR $PRILL VECTOR $PROC2 VECTOR $PRTAB VECTOR $PTBYT VECTOR $PTCBL VECTOR $PTCPT VECTOR $PTTCB VECTOR $PTWRD VECTOR $QACNT VECTOR $QASTT VECTOR $QCLNR VECTOR $QCNTP VECTOR $QCPKT VECTOR $QERMV VECTOR $QFORK VECTOR $QINSF VECTOR $QINSP VECTOR $QMCR  VECTOR $QMCRL VECTOR $QRMVF VECTOR $QRMVT VECTOR $QSPIB VECTOR $QSPIF VECTOR $QSPIP VECTOR $QSPRF VECTOR $QTRAN VECTOR $QTRN1 VECTOR $QTRN2 VECTOR $QUEBF VECTOR $QUEXT VECTOR $QUPKT VECTOR $RCTPT VECTOR $RELOC VECTOR $REMOV VECTOR $REMO1 VECTOR $REQU1 VECTOR $RNDC,R$$NDC VECTOR $RNDH,R$$NDC T VECTOR $RNDL,R$$NDC C VECTOR $RQSCH VECTOR $RQTAB VECTOR $SABPT VECTOR $SAHDB VECTOR $SAHPT VECTOR $SAVNR VECTOR $SCCTB VECTOR $SCDEV VECTOR $SCDVT VECTOR $SCDV1 VECTOR $SCERR VECTOR $SCMDQ VECTOR $SCMOF VECTOR $SCOFL VECTOR $SCRET VECTOR $SECFR VECTOR $SETCR VECTOR $SETFC VECTOR $SGFIN VECTOR $SGNMK VECTOR $SHERR VECTOR $SHFCT VECTOR $SHFTM VECTOR $SHFPT VECTOR $SHLOS VECTOR $SHPCT VECTOR $SHUMB VECTOR $SIGFL VECTOR $SNCMD VECTOR $SRAST VECTOR $SRCCQ VECTOR $SRGEF,G$$GEFO VECTOR $SRPRO VECTOR $SRSTD VECTOR $SRUCB VECTOR $SRUC1 VECTOR $STACK VECTOR $STALR VECTOR $STCLI VECTOR $STENB VECTOR $STFLG VECTOR $STKDP VECTOR $STPCT VECTOR $STPTK VECTOR $STRTM VECTOR $SWPC,SWAP VECTOR $SWPR,SWAP VECTOR $SWR  VECTOR $SYLHD VECTOR $SYSID VECTOR $SYSIZ VECTOR $SYSNM VECTOR $SYTYP VECTOR $SYUAB VECTOR $SYUIC VECTOR $TCBCP VECTOR $TICLR VECTOR $TKNPT VECTOR $TKPSL VECTOR $TKTAB VECTOR $TKTCB VECTOR $TKWSE VECTOR $TMSTP VECTOR $TRACE VECTOR $TSKHD VECTOR $TSKRP VECTOR $TSKRT VECTOR $TSPAR VECTOR $TSTBF VECTOR $TSTCP VECTOR $TTNS  VECTOR $UCBSC VECTOR $UMPCO VECTOR $UMPSO VECTOR $UMRHD,EXTUMRK VECTOR $UMRPT,M$$NETO VECTOR $URMST VECTOR $URMTB VECTOR $VECTR VECTOR $VERSN VECTOR $VERTK VECTOR $VTDCB; COMM EXEC VECTORSO VECTOR $1SCTB,MPNET VECTOR $ACTLN,MPNET VECTOR $ASCMP,M$$NETC VECTOR $CALLX,M$$NETC VECTOR $CCBAF,M$$NETT VECTOR $CCBAL,M$$NETC VECTOR $CCBCT,M$$NETS VECTOR $CCBGT,M$$NETC VECTOR $CCBRT,M$$NETK VECTOR $CCBLH,M$$NETC VECTOR $CCBNM,M$$NETT VECTOR $CCBSZ,M$$NETC VECTOR $CEACC,M$$NETB VECTOR $CECAC,M$$NETC VECTOR $CEDIV,M$$NETR VECTOR $CELFN,M$$NETR VECTOR $CELOG,M$$NETM VECTOR $CEMUL,M$$NETC VECTOR $CEPWR,M$$NETR VECTOR $CMFRK,M$$NETC VECTOR $CMPDV,M$$NETE VECTOR $CMQIN,M$$NET1 VECTOR $CMQRM,M$$NETT VECTOR $CNV22,M$$NETP VECTOR $CNV18,M$$NETX VECTOR $CSBGT,M$$NETF VECTOR $CSBRT,M$$NETL VECTOR $CTCMP,M$$NETT VECTOR $CXOPT,M$$NETT VECTOR $DDAST,M$$NETT VECTOR $DDCCP,M$$NETH VECTOR $DDCRA,M$$NETM VECTOR $DDDIS,M$$NETZ VECTOR $DDENB,M$$NETC VECTOR $DDFNC,M$$NETC VECTOR $DDGET,M$$NETV VECTOR $DDKCP,M$$NETN VECTOR $DDKIL,M$$NETG VECTOR $DDMAN,M$$NETL VECTOR $DDMSN,M$$NETR VECTOR $DDRCE,M$$NETK VECTOR $DDRCP,M$$NETV VECTOR $DDRNG,M$$NETN VECTOR $DDSET,M$$NETM VECTOR $DDSPC,M$$NET2 VECTOR $DDSTP,M$$NET8 VECTOR $DDSTR,M$$NETT VECTOR $DDXKL,M$$NETT VECTOR $DDXME,M$$NETP VECTOR $DDXMP,M$$NETT VECTOR $DDXOF,M$$NETT VECTOR $DDXON,M$$NETP VECTOR $DECPT,M$$NETA VECTOR $DLCRS,M$$NETS VECTOR $DSPTM,M$$NETB VECTOR $EVDSC,M$$NETC VECTOR $FILHD,M$$NETT VECTOR $INTSX,M$$NETP VECTOR $INTX7,M$$NETL VECTOR $KLCMP,M$$NETN VECTOR $LDBAF,M$$NETN VECTOR $LDBGT,M$$NETE VECTOR $LDBRT,M$$NETP VECTOR $LGCON,M$$NETG VECTOR $LGDDB,M$$NETT VECTOR $LGFNB,M$$NETC VECTOR $LGMON,M$$NETP VECTOR $LGPDV,M$$NETR VECTOR $LGSTT,M$$NETL VECTOR $LGUIC,M$$NETE VECTOR $LLCAL,M$$NETP VECTOR $LLCLC,M$$NETF VECTOR $LLCRQ,M$$00fUw8wtkTADATADATADATADATADATANETN VECTOR $LLCRS,M$$NETT VECTOR $LLCSP,M$$NETS VECTOR $LLCTA,M$$NETM VECTOR $LTMFC,M$$NETC VECTOR $MAXOV,M$$NETD VECTOR $MPLCK,MPNET VECTOR $MPSAV,MPNET VECTOR $MVFBF,M$$NETK VECTOR $MVTBF,M$$NETL VECTOR $NBIAS,M$$NETL VECTOR $NETPF,M$$NETL VECTOR $NMCLH,M$$NETL VECTOR $NMCL2,M$$NETL VECTOR $NMCRS,M$$NETL VECTOR $NMLST,M$$NETL VECTOR $NTLPT,M$$NETL VECTOR $OBJHD,M$$NETL VECTOR $PADB,M$$NET VECTOR $PDDSP,M$$NET  VECTOR $PDQUE,M$$NET  VECTOR $PDQU1,M$$NET  VECTOR $PDSPL,M$$NET  VECTOR $PDVID,M$$NET  VECTOR $PDVNM,M$$NET  VECTOR $PDVTA,M$$NET  VECTOR $PSIPT,M$$NET  VECTOR $PUMR,M$$NET VECTOR $PWRF1,M$$NET  VECTOR $QBIAS,M$$NETM VECTOR $QSTRT,M$$NETM VECTOR $RCCMP,M$$NETN VECTOR $RDBAF,M$$NETN VECTOR $RDBCT,M$$NETN VECTOR $RDBGT,M$$NETN VECTOR $RDBLH,M$$NETN VECTOR $RDBNM,M$$NETN VECTOR $RDBRT,M$$NETN VECTOR $RDBSZ,M$$NETO VECTOR $RDBTH,M$$NETP VECTOR $RDBWT,M$$NETD VECTOR $RDBQP,M$$NETQ VECTOR $RDQCT,M$$NETQ VECTOR $RDQSL,M$$NETS VECTOR $SDBAF,M$$NETV VECTOR $SDBCT,M$$NETV VECTOR $SDBLH,M$$NETV VECTOR $SDBNM,M$$NETI VECTOR $SDBSZ,M$$NETM VECTOR $SLTMA,M$$NET1 VECTOR $SLTNM,M$$NETS VECTOR $SNAPT,M$$NETT VECTOR $SPMTB,DUMMY VECTOR $SQRCM,M$$NETB VECTOR $STDDM,M$$NETB VECTOR $STDD1,M$$NETB VECTOR $STDLC,M$$NETB VECTOR $STDL1,M$$NETB VECTOR $STMFC,M$$NETB VECTOR $SYNB,M$$NET VECTOR $SYNC,M$$NET VECTOR $TK100,M$$NET  VECTOR $TSTIM,M$$NET  VECTOR $T1SCL,M$$NET  VECTOR $T100C,M$$NET  VECTOR $T100Q,M$$NET  VECTOR $XAVL,M$$NET VECTOR $XBIAS,M$$NETO VECTOR $XMCMP,M$$NETO VECTOR $ZTIME,M$$NETO VECTOR $ZTIM2,M$$NETO VECTOR $STMTB,MPNET6; THE FOLLOWING SYMBOLS ARE FOR SPM-11M-PLUS HOOKPOINT VECTOR $SPH01 VECTOR $SPH02 VECTOR $SPH03 VECTOR $SPH04 VECTOR $SPH05 VECTOR $SPH06 VECTOR $SPH07 VECTOR $SPH08 VECTOR $SPH09 VECTOR $SPH10,E$$XPRT VECTOR $SPH11 VECTOR $SPH12 VECTOR $SPH13,DUMMY VECTOR $SPH14,DUMMY VECTOR $SPH15 VECTOR $SPH16 VECTOR $SPH17 VECTOR $SPH18 VECTOR $SPH19,P$$MONT VECTOR $SPH20 VECTOR $SPH21 VECTOR $SPH22 VECTOR $SPH23,V$$TRMO VECTOR $SPH24,V$$TRMO VECTOR $SPH25 VECTOR $SPH26 VECTOR $SPH27 VECTOR $SPH28,C$$INTS VECTOR $SPH29 VECTOR $SPH30 VECTOR $SPH31 VECTOR $SPH32 VECTOR $SPH33 VECTOR $SPH34,P$$MONS VECTOR $SPH35,P$$MONV VECTOR $SPH36,M$$NETS VECTOR $SPH37,DUMMY VECTOR $SPH38,DUMMY VECTOR $SPH39,DUMMY VECTOR $SPH40,DUMMY;; SYMBOLS ADDED AFTER START OF RSX-11M-PLUS V3.0 FIELD TEST7 VECTOR $BCERR VECTOR $BCFAC VECTOR $BCPC  VECTOR $CRUPC,C$$CDA VECTOR $CRUST,C$$CDA  VECTOR $DQLM1 VECTOR $DQLM2 VECTOR $DRAP2 VECTOR $DRLM1 VECTOR $DRLM2 VECTOR $EMTRP VECTOR $ILINS VECTOR $IOTRP VECTOR $SGFLT VECTOR $SRNAM VECTOR $TRP04 VECTOR $TRTRP VECTOR $XDTND,MPLXDT$; ADDITIONAL SPM-11M-PLUS HOOKPOINTS VECTOR $SPH64 VECTOR $SPH66 VECTOR $SPH67 VECTOR $SPH70 VECTOR $SPH71 VECTOR $SPH72 VECTOR $SPH74,P$$CTLT VECTOR $SPH75,Q$$OPT0 VECTOR $SPH76,P$$CTL  VECTOR $SPH77,Q$$OPT+; ADDITIONS LATE IN VERSION 3.0 DEVELOPMENT  VECTOR $FMSK5; 9; ADDED FOR RSX-11M-PLUS V3.0 UPDATE C AND MICRO/RSX V3.1C;  VECTOR $DRAPR VECTOR $HKSTS VECTOR $IDLFL VECTOR $POLHD VECTOR $SETM  VECTOR $SPMVC VECTOR $SPV01 VECTOR $SPV02 VECTOR $SPV03 VECTOR $SRATT; ADDITIONS FOR VERSION 4.0 VECTOR U.CTXS VECTOR U.FPRO VECTOR U.LOGS VECTOR $LDEL1 VECTOR $USRLG VECTOR $PRISZ VECTOR $FNDSP VECTOR $GTUSR VECTOR $LNTD1 VECTOR $RLRLN VECTOR $CRPAS VECTOR $DVTMO VECTOR $MPUBM* NOSTB $STMAP,DUMMY ; THIS WAS A DUPLICATE VECTOR $CRCTX VECTOR $CRLO1 VECTOR $DELO1 VECTOR $DLCTX VECTOR $LOGTB VECTOR $QRMVA VECTOR $TBTRN VECTOR $BLKC2 VECTOR $BMSET VECTOR $CVLBN VECTOR $RLCN1 VECTOR $RQCND VECTOR $STMAP VECTOR $VOLVD VECTOR $BLKCK VECTOR $MPPHY VECTOR $FRKHD VECTOR $EFMSK,E$$LOGV VECTOR $ULDPT VECTOR $RTF01,MPNET VECTOR $RTF02,MPNET VECTOR $RTF03,M$$NETO VECTOR $RTF04,M$$NET1 V00f]wcvtblECTOR $LTEEP,M$$NETO VECTOR $WPLST,R$$WPTO VECTOR $WPADR,R$$WPTB VECTOR $WPIN0,R$$WPTS VECTOR $WPIN1,R$$WPTC VECTOR $WPIN2,R$$WPTV VECTOR $WPIN3,R$$WPTD VECTOR $WPBR,R$$WPT VECTOR $TNAME VECTOR $MPUB1 VECTOR $PRMOD VECTOR $ULDRQ VECTOR $FNERL VECTOR $IODSA VECTOR $QINSB VECTOR KISDR0 VECTOR KISDR6 VECTOR $CKCNT VECTOR $CKLDC VECTOR $DRVPF VECTOR $TRINT,C$$CDA VECTOR $UMRWT VECTOR $ACDHD,T$$ACDV VECTOR $DQUMR VECTOR $LOGER VECTOR $STMP1 VECTOR $TTPRM VECTOR $WCFLG VECTOR $CPSEN,C$$RMTL VECTOR $CPALO,C$$RMTA VECTOR $CPDEA,C$$RMTI;$6; SYMBOLS ADDED AT THE END OF VERSION 4.0 FOR XDT, CPR; AND GENERAL CLEANUPV;O VECTOR T.CTX VECTOR T.SAST VECTOR $ABCTK VECTOR $ACCLK VECTOR $ACHKP VECTOR $ACHKW VECTOR $ACHUI,U$$DAS  VECTOR $ACTRM VECTOR $ACTTK VECTOR $ALCLK VECTOR $ALPKT VECTOR $ALSC1,P$$OOL VECTOR $ALSPK,P$$OOL VECTOR $ALTRG VECTOR $ATTPT VECTOR $BILDS VECTOR $BLKC1 VECTOR $CALTA,S$$LIB VECTOR $CEFIG VECTOR $CEFNG VECTOR $CFORK,M$$PRO VECTOR $CKACC,P$$LAS VECTOR $CKBFI,U$$DAS VECTOR $CKBFW VECTOR $CKLBN,S$$HDWS VECTOR $CKUAB,A$$CNT  VECTOR $CLRSM VECTOR $CPCON,C$$RTB VECTOR $CSFSV,C$$KXJO VECTOR $CSHSV,C$$KXJK VECTOR $CURPR VECTOR $DASTT VECTOR $DBTRP VECTOR $DCAST VECTOR $DCCEB,D$$CHEK VECTOR $DCCEL,D$$CHEO VECTOR $DCLKA VECTOR $DCNEB,D$$CHEO VECTOR $DCNEL,D$$CHEO VECTOR $DCPCB,D$$CHET VECTOR $DCSTS,D$$CHEO VECTOR $DCWIO VECTOR $DECAL VECTOR $DECBF VECTOR $DECIO VECTOR $DECIP VECTOR $DESC1 VECTOR $DIRSV VECTOR $DIRXT VECTOR $DLNK,S$$HDW VECTOR $DQAC,C$$INT VECTOR $DRAP3 VECTOR $DRAP4 VECTOR $DRAPV VECTOR $DRCHE VECTOR $DRCL2 VECTOR $DRCL3 VECTOR $DRTHR,P$$OFFC VECTOR $DRWSE VECTOR $DSPKA VECTOR $DVMG1 VECTOR $ECCOR,S$$ECCC VECTOR $EMSST VECTOR $ERREC,P$$OFFC VECTOR $ERTHR,P$$OFFN VECTOR $ERHEA,E$$LOGN VECTOR $EXDOP,M$$PROP VECTOR $EXROP,M$$PROS VECTOR $EXRP1,M$$PROW VECTOR $EXRQS VECTOR $EXRQU VECTOR $FINBF VECTOR $FINDR VECTOR $FINXT VECTOR $FMAPP,F$$MAPC VECTOR $FMSKR,C$$RMTN VECTOR $FORK0 VECTOR $FORK1 VECTOR $FORK2,C$$INTO VECTOR $FPPRQ,F$$LPPV VECTOR $FPPR7,F$$LPPO VECTOR $FPPR8,F$$LPP3 VECTOR $FORKL,M$$PROC VECTOR $GENBF VECTOR $GGFRN,G$$GEFO VECTOR $GNLST VECTOR $IFORK,M$$PROO VECTOR $IMASG,C$$RTBC VECTOR $INTSC,C$$INTR VECTOR $INTSF VECTOR $INTX1 VECTOR $IOKIL VECTOR $IOKL1 VECTOR $IOKL2 VECTOR $KATBL VECTOR $KXBAS,C$$KXJS VECTOR $KXPTR,C$$KXJO VECTOR $KXVC1,C$$KXJR VECTOR $LCKPR,R$$LKLO VECTOR $LDPCB VECTOR $LOADT VECTOR $LSUPD,S$$LIB0 VECTOR $LSUP1,S$$LIBO VECTOR $MAPTK VECTOR $MPDC2 VECTOR $MPDC3 VECTOR $MPDC4 VECTOR $MPDCV VECTOR $PASTH VECTOR $PKAVL,Q$$OPTO VECTOR $PLTRQ,P$$CTLN VECTOR $PRIFR VECTOR $PROCN,M$$PROK VECTOR $PWRFL VECTOR $QASTC,C$$INTO VECTOR $QCLIL VECTOR $QPKRQ VECTOR $QPKR1 VECTOR $RELCD VECTOR $RELOM VECTOR $RELOP VECTOR $RELUI,U$$DASO VECTOR $REQUE VECTOR $RLCPS VECTOR $RLPAR VECTOR $RLPR1 VECTOR $RNDCT,R$$NDCO VECTOR $RQCNC,O$$LAPO VECTOR $SETFG VECTOR $SETMG VECTOR $SETRT VECTOR $SETRQ VECTOR $SHFND,S$$HDW2 VECTOR $SHFN1,S$$HDWO VECTOR $SHLIM,S$$HDWV VECTOR $SHSAV,S$$HDWO VECTOR $SGFFR VECTOR $SIRWF,S$$LIBN VECTOR $SPMAX VECTOR $SRCQ1 VECTOR $SRMUT,P$$OFFL VECTOR $SRWND,P$$LASO VECTOR $SUPFL,S$$LIBO VECTOR $SWACD,T$$ACD1 VECTOR $SWAC1,T$$ACDO VECTOR $SWPCT,SWAPL VECTOR $SWSTK VECTOR $TSKRQ VECTOR $UISET,M$$MUPC VECTOR $UMR4P VECTOR $UMR5P VECTOR $UNMAP,P$$LASD VECTOR $WPVAL,R$$WPTA VECTOR $WTUMR VECTOR $XXLOW,C$$KXJC VECTOR $XXHGH,C$$KXJT;V; SYMBOLS ADDED FOR VERSION 4.1F;S VECTOR $RMTSK VECTOR $SECPB VECTOR $CRSFM,C$$CDA VECTOR $CPABO#; FOR PEACE OF MIND, PAD THE VECTOR .IF DF R$$MPL .REPT 25. .WORD 160001S .ENDRMAXOFF=.-EXEVECS .ENDC ; DF R$$MPL .PAGE*; DEFINE GLOBALS OFFSETS GIVEN IN STB FILE;C;; ******************************************************00fewYfwtkTADATADATADATADATADATA***U ; * * +; * > > > W A R N I N G < < < *L ; * *C9; * THE FOLLOWING ARE OFFSET DEFINITIONS WHICH ARE *9; * SUPPLIED EITHER BY DEFINITION IN THE EXEC (IOSUB) *9; * OR THE DUMMY STB FILE (FROM SFVC2). ANY CHANGE TO * 9; * THESE DEFINITIONS MUST BE MADE IN BOTH MODULES. *E ; * *O;; *********************************************************L .IF NDF R$$MPLI G$$SPA == 34V S$$SPA == 10 S$$SPC == 6* .ENDC ; NDF R$$MPL* .END*** .TITLE SSTSR; .IDENT /12.01/;V5; COPYRIGHT (C) 1987 BY DIGITAL EQUIPMENT CORPORATION*; ALL RIGHTS RESERVED.;S+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:E;U; B. S. MCCARTHY;#+; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:U; "; B. S. MCCARTHY 22-DEC-86 12.00;, ; BM377 -- MOVE DRDSP TO DIR11M;R; J. W. BERZLE 7-MAY-87 12.01;N(; JWB212 -- CORRECT TEST OF STACK DEPTH;S; MACRO LIBRARY CALLSW;H8 .MCALL ABODF$,HDRDF$,HWDDF$,PKTDF$,BGCK$A,BGCK$R,BCKDF$$ BCKDF$ ;DEFINE THE BUGCHECK CODES" ABODF$ ;DEFINE TASK ABORT CODES% HDRDF$ ;DEFINE TASK HEADER OFFSETS$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS;. ; LOCAL DATA;F; FLOATING POINT EXCEPTION VECTOR (FINAL SETUP OF THIS VECTOR AND, IF D; NECESSARY, THE PIRQ VECTOR IS PERFORMED IN INITL AND THE MCR SAVE ; COMMAND.) N ;  .IF DF F$$LPP!F$$LTPP .ASECTA.=244R .WORD $FLTRP ; .WORD PR7 ;H .PSECT , .ENDC;D; SEGMENT FAULT VECTOR;U S .ASECT .=250N .WORD $SGFLT ; .WORD PR7 ;F .CSECTH ;+ ;D(; **-$EMSST-NON RSX EMT/TRAP INSTRUCTION;DJ; THIS ROUTINE IS TRANSFERED TO BY THE DIRECTIVE DISPATCHER WHEN A NON RSXK; EMT OR A TRAP INSTRUCTION IS EXECUTED. THE MACHINE STATE HAS ALREADY BEEN C; SAVED. THE EMT/TRAP CODE (LOW BYTE OF INSTRUCTION) IS SETUP TO BE G; PASSED TO THE USER AND CONTROL IS TRANSFERED TO THE SST EXIT ROUTINE.D;7 ; INPUTS:S; ); R5=ADDRESS OF THE EMT/TRAP INSTRUCTION. ;T ; OUTPUTS:; '; 04(SP)=EMT/TRAP CODE MULTIPLIED BY 2..*; 02(SP)=SST CODE (SCEMT=EMT, SCTRP=TRAP).<; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO USER STACK (6).;- .ENABL LSBT0$EMSST::MOV (SP),R5 ;GET EMT/TRAP INSTRUCTION , BIC #177400,(SP) ;CLEAR INSTRUCTION CODE  ASL (SP) ;MULTIPLY CODE BY 22 MOV #S.CEMT,-(SP) ;ASSUME NON-RSX EMT INSTRUCTION BIT #400,R5 ;EMT INSTRUCTION?C* BEQ 10$ ;IF EQ YES-SET NUMBER OF BYTES + MOV #S.CTRP,(SP) ;SET FOR TRAP INSTRUCTIONM(10$: MOV #3*2,-(SP) ;SET NUMBER OF BYTES) JMP SSTXT ;TAKE COMMON SST EXIT ROUTINE ;+,; **-$FLTRP-FLOATING POINT EXCEPTION (11/40);EI; THIS ROUTINE IS TRAPPED TO WHEN AN 11/40 FLOATING POINT EXCEPTION FAULT:I; OCCURS. THE CURRENT MACHINE STATE IS SAVED AND CONTROL IS TRANSFERED TOI; THE SST EXIT ROUTINE.U;P ; INPUTS:2;M; NONE.T;S ; OUTPUTS:;R; 02(SP)=SST CODE (SCFLT).<; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO USER STACK (4).;- 3$FLTRP:: ;DEFINE UNCONDITIONALLY FOR VECTOR SETUP( .IF DF F$$LTP/ DIRSV$ ;;;SAVE REGISTERS AND CLEAR PRIORITY ; MOV #S.CFLT,-(SP) ;SET FOR FLOATING POINT EXCEPTION FAULT R7 MOV #BE.FLT,R3 ;FLOATING POINT EXCEPTION BUGCHECK CODEO BR 20$ ;SET NUMBER OF BYTES  .ENDC;+F; **-$FPPR7-$FPPR8-$FPPRQ-FLOATING POINT PROCESSOR EXCEPTION HANDLING ; A; THESE ROUTINES HANDLE EXCEPTION FAULTS FROM THE FLOATING POINT ME; PROCESSOR. THE FLOATING POINT EXCEPTION AND ADDRESS REGISTERS AND PH; THE CURRENT TASK TCB ARE SAVED AND THEN AN ATTEMPT IS MADE TO QUEUE ANF; AST TO THE TASK AT FORK LEVEL. THESE ROUTINES SUPPORT TWO MODES OF F; OPERATION DEPENDING ON WHETHER THE FPP'S EXCEPTION FAULTS CAN OCCUR G; WHILE THE PROCESSOR IS AT PRIORITY 7 OR NOT. IF THE FPP'S EXCEPTION A; FAULT CAN OCCUR WHILE THE PROCESSOR IS AT PRIORITY 7, THEN THE @; PROCESSOR MUST HAVE A PIRQ REGISTER. INITL AND THE MCR SAVE A; COMMAND DETERMINE WHICH MODE OF OPERATION IS TO BE USED OR NOT EE; DEPENDING ON WHETHER THE PROCESSOR HAS A PROGRAM INTERRUPT REQUE00YmwcvtblST T@; REGISTER (PIRQ) OR NOT, AND SET UP THE FPP AND PIRQ VECTORS 3; ACCORDINGLY. THE ROUTINES OPERATE AS FOLLOWS. W ; H; 1. IF THE PROCESSOR DOES NOT HAVE A PIRQ REGISTER THEN THE FPP MUST@; NEVER FAULT WHEN THE PROCESSOR IS AT PRIORITY 7 OR IT MUST BE A; SYNCHRONOUS. IN THIS CASE THE FLOATING POINT EXCEPTION VECTOR GB; POINTS TO $FPPR7, AND THE PROCESSOR SIMPLY CALLS INTERRUPT SAVE &; AND FORK TO GET TO SYSTEM STATE. ; H; 2. IF THE PROCESSOR HAS A PIRQ REGISTER, THE FLOATING POINT EXCEP- B; TION TRAP VECTOR POINTS TO $FPPR8 AND THE PIRQ VECTOR POINTS TO A; $FPPRQ. FLOATING POINT TRAPS ARE CONVERTED TO PIRQ PRIORITY 1 RB; INTERRUPTS AFTER SAVING THE FLOATING POINT STATUS. ON THE PIRQ B; TRAP AN INT SAVE AND FORK IS USED TO GET TO SYSTEM STATE. NOTE B; THAT THIS STRATEGY WOULD ALSO WORK FOR PROCESSORS DESCRIBED IN 1; ABOVE. ; ; INPUTS:S; C; THE FLOATING POINT EXCEPTION REGISTER CONTAINS THE REASON FOR THEPD; FAULT AND THE FLOATING POINT ADDRESS REGISTER CONTAINS THE ADDRESS; OF THE FAULTING INSTRUCTION.;Q ; OUTPUTS:;TB; AN ATTEMPT IS MADE TO QUEUE AN AST TO THE TASK CAUSING THE FAULTA; WITH THE CONTENTS OF THE FLOATING POINT EXCEPTION REGISTER AND R; AND ADDRESS REGISTER. ;- T .IF DF F$$LPP;$FPPR7::STST $FLSTS ;;;STORE FLOATING POINT EXCEP AND ADDRI BR 14$ ;;; ;$FPPR8::STST $FLSTS ;;;STORE FLOATING POINT EXCEP AND ADDRE9 BIS #<2*256.>,PIRQ ;;;POST PROGRAMMED INTERRUPT REQUEST I# RTI ;;;WAIT FOR PIRQ INTERRUPT E 7$FPPRQ::CLR PIRQ ;;;DISABLE PROGRAM INTERRUPT REQUEST I414$: MOV $TKTCB,$FLTCB ;;;MUST SAVE FAULTING TCB NOW' CALL $INTSV,PR1 ;;;GO TO PRIORITY 1 + MOV $FLFRK,R4 ;;;SET ADDRESS OF FORK BLOCKT( CALL $FORK0 ;;;CREATE A SYSTEM PROCESS0 MOV #AS.FPA,R4 ;GET CODE FOR FLOATING POINT AST0 MOV $FLTCB,R5 ;GET TCB ADDRESS OF FAULTING TASK+ CALL $DASTT ;DECLARE FLOATING POINT AST E BCS 15$ ;IF CS NO AST DECLARED. MOV $FLSTS,A.PRM+2(R1) ;INSERT AST PARAMETERS MOV $FLSTS+2,A.PRM(R1) ; 15$: RETURN ;F .IFF ; &$FPPR7:: ;REFERENCE LABEL FOR SAVE $FPPR8:: ;REFERENCE LABEL $FPPRQ:: ;REFERENCE LABEL  .ENDC;++; **-$ILINS-ILLEGAL OR RESERVED INSTRUCTIONR; D; THIS ROUTINE IS TRAPPED TO WHEN AN ILLEGAL OR RESERVED INSTRUCTIONG; IS EXECUTED. THE CURRENT MACHINE STATE IS SAVED AND CONTROL IS TRANS-D!; FERRED TO THE SST EXIT ROUTINE.1; ; INPUTS:S;E; NONE.M;$ ; OUTPUTS:;1; 02(SP)=SST CODE (SCILI).@; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO THE USER STACK (4).; C; THIS ROUTINE IS ALSO ENTERED WHEN THE CSM INSTRUCTION IS EXECUTEDEE; ON A PROCESSOR THAT DOES NOT SUPPORT CSM. IT WILL FIELD THE ILLEGAL$3; INSTRUCTION TRAP AND EMULATE THE CSM INSTRUCTION.U;E:; NOTE: ONLY ONE FORM OF THE CSM INSTRUCTION IS SUPPORTED.;E'; MOV #
,-(SP) ; CSM (SP)+S;A; KERNEL STACK ON ENTRY.;T; 0(SP) = TRAP PC + 2S; 2(SP) = PS PRIOR TO TRAP;:2; KERNEL STACK IMMEDIATELY BEFORE RTI INSTRUCTION.;T3; 0(SP) = (10) (VIRTUAL ADDRESS IN SUPERVISOR MODE)S8; 2(SP) = PS WITH PROPER PREVIOUS AND CURRENT MODE SUPER;E1; SUPER STACK IMMEDIATELY BEFORE RTI INSTRUCTION.L;I,; 0(SP) = ADDRESS OF SUPERVISOR MODE ROUTINE; 2(SP) = RETURN ADDRESS; 4(SP) = PS PRIOR TO TRAP;E;-$ILINS:: ;;;REF LABELE .IF DF S$$LIB .IF NDF X$$DBT $ TST $STKDP ;;;PREVIOUS MODE USER ? BLE 17$ ;;;IF LE NOP .ENDC ;NDF X$$DBT# MOV (SP),-(SP) ;;;COPY TRAP PC + 2A" SUB #2,(SP) ;;;CALCULATE TRAP PC) MFPI @(SP)+ ;;;PICK UP TRAP INSTRUCTION ! CMP (SP),#7027 ;;;IS IT CSM #N ?E BEQ 155$ ;;;IF EQ YESP" CMP (SP),#7026 ;;;IS IT CSM (SP)+1 BNE 165$ ;;;IF NE NO - ILLEGAL INSTRUCTION TRAPP4155$: TSTB $SUPFL ;;;TASK MAPPED TO SUPER WINDOWS ?1 BEQ 165$ ;;;IF EQ NO - ILLEGAL INSTRUCTION TRAP : BIT #10,SR3 ;;;IS THE INSTRUCTION LEGAL ON THIS MACHINE?1 BNE 165$ ;;;IF NE NO - ILLEGAL INSTRUCTION TRAPP: ADD #170751,(SP) ;;;IS IT CSM #N ? (THIS INSTRUCTION WILL00YuwfwtkTADATADATADATADATADATA, ;;;SET C FOR #N, BUT NOT (SP)+, AND WILL, ;;;LEAVE A ZERO CONSTANT (USED LATER FOR% ;;;STACK ADJUSTMENT) ON THE STACK  MOV R0,-(SP) ;;;SAVE R01 BCS 156$ ;;;IF CS WE DETERMINED 2 INST AGO THISI ;;;WAS CSM (SP)+3 MOV #2,2(SP) ;;;IT WAS CSM (SP)+ - SET CONSTANT TOS, ;;;ADD TO USER STACK FOR ADJUSTING BELOW, MFPI SP ;;;GET PREVIOUS MODE STACK POINTER7$DSLM1::MFPD$ @(SP)+ ;;;GET ADDR OF SUPER MODE ROUTINEI" BR 157$ ;;;FINISH IN COMMON CODEB156$: MOV 4(SP),-(SP) ;;;GET ADDRESS OF SECOND HALF OF INSTRUCTION& MFPI @(SP)+ ;;;GET IMMEDIATE OPERAND-157$: MOV SP,R0 ;;;COPY KERNEL STACK POINTERN ADD #6,R0 ;;;POINT TO TRAP PC;% MOV (R0)+,-(SP) ;;;PUSH PC OF CALLERI$ MOV (R0),-(SP) ;;;PUSH PS OF CALLER8 MOV #CSMODE!PMODE,(R0) ;;; CURRENT=SUPER, PREVIOUS=USER. BIC #17,(SP) ;;;CLEAR STACKED CONDITION CODES) BMI 16$ ;;;IF MI PREVIOUS MODE WAS USERR7 BIC #^CPSMODE&PMODE,(R0) ;;;SET PREVIOUS MODE TO SUPERI%16$: MFPI SP ;;;GET PREVIOUS MODE SP57 ADD 12(SP),(SP) ;;;ADJUST FOR STACK DIFFERENCE BETWEENR ;;;(SP)+ AND #N VARIATIONM MOV (SP),R0 ;;;COPY IT9 SUB #6,(SP) ;;;ADJUST SP FOR PUSHED PS,PC,SUPER ROUTINET5 BIC #^CPSMODE&PMODE,PS ;;;SET PREVIOUS MODE TO SUPERV MTPI SP ;;;SET SUPER SPA% MTPD -(R0) ;;;PUSH PS ON USER STACKN& MTPD -(R0) ;;;PUSH PC ON SUPER STACK- MTPD -(R0) ;;;PUSH ADDRESS OF SUPER ROUTINE  MOV (SP)+,R0 ;;;RESTORE R0B$ CMP (SP)+,(SP)+ ;;;POINT TO TRAP PS=$DSLM2::MFPI 10 ;;;SET RETURN PC IN SUPER MODE FROM SUPER 101& RTI ;;;RETURN TO (SUPER VIRTUAL 10)2165$: TST (SP)+ ;;;POP CSM INSTRUCTION FROM STACK .ENDC ;DF S$$LIB#17$: DIRSV$ ;;;SAVE REGISTERS,; MOV #S.CILI,-(SP) ;SET FOR ILLEGAL OR RESERVED INSTRUCTION 2 MOV #BE.ILI,R3 ;ILLEGAL INSTRUCTION BUGCHECK CODE BR 20$ ;SET NUMBER OF BYTES( .PAGE;+; **-$IOTRP-IOT INSTRUCTION0;;H; THIS ROUTINE IS TRAPPED TO WHEN AN IOT INSTRUCTION IS EXECUTED. IF THEA; STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED VIA A JUMP TOPG; $CRASH. ELSE THE CURRENT MACHINE STATE IS SAVED AND CONTROL IS TRANS-S ; FERED TO THE SST EXIT ROUTINE.;SB; IF THE CURRENT TASK HAS FAST MAPPING ENABLED ($FMAPP>0) THEN THEF; FAST MAP DESCRIPTOR IN THE REGISTERS IS USED TO REMAP A PLAS WINDOW.7; (SEE DRMAP, WHERE THE REMAPPING ACTUALLY TAKES PLACE)U;R ; INPUTS:;A; NONE. ;$ ; OUTPUTS:;UC; IF THE CURRENT STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED.X>; ELSE THE FOLLOWING ARGUMENTS ARE SETUP ON THE CURRENT STACK:; ; 02(SP)=SST CODE (SCIOT).A; 00(SP)=NUMBER OF BYTES TO BE TRANSFERRED TO THE USER STACK (4).E;-;E; NOTES:;TC; REGISTER CONTENTS ON ENTRY/EXIT TO FAST MAP ARE DEFINED IN DRMAP.H .PAGE?18$: BGCK$A BF.EXE,BE.IOT,INTERNAL ;;;SETUP ERROR CODES FOR IOTN ;;;IN SYSTEM STATEE# JMP $CREMT ;;;GO CRASH THE SYSTEM /$IOTRP::TST $STKDP ;;;RUNNING ON SYSTEM STACK?E# BLE 18$ ;;;IF LE NO, SYSTEM FAULTT .IF DF F$$MAP&X$$HDR&P$$LAS. TST $FMAPP ;;;FAST MAP IN USE FOR THIS TASK? BEQ 189$ ;;;IF EQ NO .IF DF D$$PAR2 MOV $DRAP3,KINAR5 ;;;MAP TO PLAS DIRECTIVE COMMON .ENDC ; DF D$$PAR- JMP $DRFMP ;;;GO EXECUTE FAST MAP DIRECTIVES189$: ;;;REFERENCE LABEL. .ENDC ; DF F$$MAP&X$$HDR&P$$LAS, DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITY+ MOV #S.CIOT,-(SP) ;SET FOR IOT INSTRUCTIONT BR 20$ ;SET NUMBER OF BYTESP;+; **-$SGFLT-SEGMENT FAULTB;1E; THIS ROUTINE IS TRAPPED TO WHEN A SEGMENT FAULT OCCURS. THE CURRENT$J; MACHINE STATE IS SAVED, SR0 THRU SR2 ARE SETUP TO BE PASSED TO THE USER,4; AND CONTROL IS TRANSFERED TO THE SST EXIT ROUTINE.;M ; INPUTS:C;D; NONE.;J ; OUTPUTS:;O; 10(SP)=CONTENTS OF SR0.S; 06(SP)=CONTENTS OF SR2.A; 04(SP)=CONTENTS OF SR1.X; 02(SP)=SST CODE (SCSGF).A; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO THE USER STACK (10).N;- 3$SGFLT::DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITY  MOV #SR0+4,R5 ;POINT SR2I MOV (R5),-(SP) ;SAVE SR2  MOV (SP),-(SP) ;COPY SAVED SR2H MOV -(R5),-(SP) ;SAVE SR1 MOV -(R5),4(SP) ;SAVE SR02 BIC #160000,(R5) ;UNFREEZE MEMORY MANAGEMENT 00Y}wcvtblUNIT) MOV #S.CSGF,-(SP) ;SET FOR SEGMENT FAULT$ MOV #5*2,-(SP) ;SET NUMBER OF BYTES, MOV #BE.SGF,R3 ;SEGMENT FAULT BUGCHECK CODE( BR SSTXT ;TAKE COMMON SST EXIT ROUTINE ;+ )?; **-$TRACE-TRACE (T-BIT) OR BREAK POINT INSTRUCTION (BPT) TRAP ; I; THIS ROUTINE IS TRAPPED TO WHEN A TRACE TRAP (T-BIT) OCCURS OR A BREAK-;H; POINT TRAP INSTRUCTION IS EXECUTED. THE CURRENT MACHINE STATE IS SAVED4; AND CONTROL IS TRANSFERED TO THE SST EXIT ROUTINE.;B ; INPUTS:(; ; NONE. ;O ; OUTPUTS:;N; 02(SP)=SST CODE (SCBPT).@; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO THE USER STACK (4).;-3$TRACE::DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITYO4 MOV #S.CBPT,-(SP) ;SET FOR TRACE OR BREAKPOINT TRAP2 MOV #BE.BPT,R3 ;TRACE OR BREAKPOINT BUGCHECK CODE BR 20$ ;SET NUMBER OF BYTESE;+5; **-$TRP04-TRAPS AT 4 (ODD ADDRESS, NONEX MEM, ETC.)R;IJ; THIS ROUTINE IS TRAPPED TO WHEN A TRAP AT 4 OCCURS. IF A STACK VIOLATIONF; HAS CAUSED THE TRAP (I.E. A STACKPOINTER OF LESS THAN 400), THEN THED; THE SYSTEM IS CRASHED. ELSE THE CURRENT MACHINE STATE IS SAVED AND0; CONTROL IS TRANSFERED TO THE SST EXIT ROUTINE.; ; INPUTS:G;E; NONE.T;I ; OUTPUTS:;.; 02(SP)=SST CODE (SCOAD).@; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO THE USER STACK (4).;-($TRP04::CMP SP,#400 ;;;STACK VIOLATION? BLO 30$ ;;;IF LO YES, DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITY% CLR -(SP) ;SET FOR ODD ADDRESS TRAPF: MOV #BE.ODD,R3 ;ODD ADDRESS OR OTHER TRAP 4 BUGCHECK CODE(20$: MOV #2*2,-(SP) ;SET NUMBER OF BYTES( BR SSTXT ;TAKE COMMON SST EXIT ROUTINE@30$: BGCK$A BF.EXE,BE.STK,DIRECT ;;;SETTUP THE ERROR CODES FOR A ;;;STACK OVERFLOW .DSABL LSB ;+"; **-SSTXT-COMMON SST EXIT ROUTINE;0H; CONTROL IS TRANSFERED TO THIS ROUTINE TO EFFECT AN SST. IF THE CURRENTI; STACK DEPTH IS NOT ZERO, THEN THE SYSTEM IS CRASHED. ELSE AN ATTEMPT ISVG; MADE TO EFFECT AN SST FOR THE CURRENT TASK. IF THE TASK DOES NOT HAVEVJ; AN APPROPRIATE SST VECTOR ENTRY OR A PUSH OF THE SST PARAMETERS ONTO THEG; TASK STACK CANNOT BE EFFECTED, THEN THE TASK IS ABORTED. ELSE THE SST$,; IS SETUP AND A DIRECTIVE EXIT IS EXECUTED.;F; INPUTS: (MAPPED SYSTEM);.#; 24(SP)=PS WORD SAVED BY SST TRAP.S#; 22(SP)=PC WORD SAVED BY SST TRAP.S; 20(SP)=SAVED R5.; 16(SP)=SAVED R4.; 14(SP)=SAVED R3.; 12(SP)=SAVED R2.; 10(SP)=SAVED R1.; 06(SP)=SAVED R0.B; 04(SP)=SST PARAMETER (ZERO OR MORE PARAMETERS MAY BE SPECIFIED).; 02(SP)=SST CODE.8; 00(SP)=NUMBER OF BYTES TO BE TRANSFERED TO USER STACK.;R; R3 - BUGCHECK ERROR CODE; ; OUTPUTS: ;AF; AN ATTEMPT IS MADE TO EFFECT THE SPECIFIED SST FOR THE CURRENT TASK.;- .ENABL LSB(0SSTXT: MOV $SAHPT,R5 ;GET ADDRESS OF TASK HEADER2 CMP #-1,$STKDP ;FAULT OCCUR AT STACK DEPTH ZERO?  BNE 7$ ;IF NE NO' MOV SP,R1 ;COPY CURRENT STACK POINTERS4 ADD (SP),R1 ;ADD NUMBER OF BYTES TO BE TRANSFERRED$ MOV 16(R1),R0 ;GET FAULT PC ADDRESS5 CMP R0,#$DRLM1 ;FAULT OCCUR IN DIRECTIVE DISPATCHER?N BLO 3$ ;IF LO NO5 CMP R0,#$DRLM2 ;FAULT OCCUR IN DIRECTIVE DISPATCHER?O BHI 3$ ;IF HI NO .IF DF D$$PAR3 CMP KINAR5,$DRAPR ;YES, BUT DID THE FAULT OCCUR INE& ;THE DIRECTIVE DISPATCHER? (IS THE$ ;FIRST DIRECTIVE COMMON MAPPED?) BNE 3$ ;IF NE NO .ENDC ; DF D$$PAR JMP 90$ ;YES3$:; .IF DF D$$PAR1 CMP KINAR5,$DRAP2 ;2ND DIRECTIVE COMMON MAPPED ?D, BNE 7$ ;IF NE NO, CAN'T HAVE BEEN IN DRQIO .ENDC ; DF D$$PAR. CMP R0,#$DQLM1 ;TRAP OCCUR IN QIO DIRECTIVE ? BLO 7$ ;IF LO NO. CMP R0,#$DQLM2 ;FAULT OCCUR IN QIO DIRECTIVE? BLOS 90$ ;IF LOS YES%7$: TST $STKDP ;STACK DEPTH ZERO? P( BNE 60$ ;IF NE NO - FATAL SYSTEM ERROR I  .IF DF S$$LIB D' MOV SP,R1 ;COPY CURRENT STACK POINTERC3 ADD (SP),R1 ;ADD NUMBER OF BYTES TO BE TRANSFEREDP$ MOV 16(R1),R0 ;GET FAULT PC ADDRESS8 CMP R0,#$DSLM1 ;FAULT OCCUR IN CSM INSTRUCTION EMULATE? BLO 8$ ;IF LO NO8 CMP R0,#$DSLM2 ;FAULT OCCUR IN CSM INSTRUCTION EMULATE? BHI 8$ ;IF HI NO& BIT #PMODE,PS ;PREVIOUS MODE KERNEL ?2 BEQ 100$ ;IF EQ YES, - EXCEPTION IN CSM EMULATOR8$: ;00YwfwtkTADATADATADATADATADATAREFERENCE LABEL   .ENDC ;DF S$$LIBH R  B 6 .IF DF P$$D70 A' CLR @$CPUER ;CLEAR CPU ERROR REGISTERD M .IF NDF M$$EXTU N NOP ;THIS NOP MUST BE HERE.& ;UNLESS THE MICRO CODE BUG IN THE & ;11/60 IS FIXED (ECO M7872-00007),$ ;CLEARING THE CPU ERROR REGISTER( ;WILL CAUSE THIS WORD TO BE SKIPPED. , .ENDC U O .ENDC , CLR $TEMP0 ;INDICATE USE NORMAL ABORT CODE+$CNBPT:: ;ENTRY POINT FROM BOM$ DIRECTIVEF E# MOV R5,R4 ;COPY ADDRESS OF HEADER 3 ADD #H.ODVA,R4 ;POINT TO ODT SST VECTOR DESCRIPTOR) MFPI SP ;GET CURRENT TASK STACK POINTERC& CALL 10$ ;SST ADDRESS IN ODT VECTOR?, MOV #80$,-(SP) ;SST ADDRESS IN TASK VECTOR?/10$: MOV $SAHDB,KISAR6 ;MAP CURRENT TASK HEADERI( MOV (R4)+,R3 ;GET ADDRESS OF SST VECTOR* BEQ 20$ ;IF EQ NO VECTOR THIS DESCRIPTOR R O .IF DF S$$LIB .0 BIS #PMODE,PS ;ASSUME SST HANDLED IN USER STATE- BIT #1,R3 ;AST HANDLED IN SUPERVISOR STATE?N BEQ 15$ ;IF EQ NOF8 BIC #^CPSMODE&PMODE,PS ;SET PREVIOUS MODE TO SUPERVISOR% DEC R3 ;REMOVE SUPERVISOR MODE FLAG M .ENDC T R415$: CMP 6(SP),(R4) ;VECTOR LONG ENOUGH TO COVER SST BHIS 20$ ;IF HIS NO( MOV R3,R0 ;COPY VECTOR ADDRESS, MOV #2,R1 ;TWO BYTE SIZE FOR ADDRESS CHECK0 ADD 6(SP),R3 ;POINT TO APPROPRIATE VECTOR ENTRY) CALL $ACHRO ;CHECK FOR READ ONLY ACCESS* BCS 20$ ;IF CS VECTOR ELEMENT IS INVALID( MFPD$ (R3) ;GET ADDRESS OF SST ROUTINE MOV (SP)+,R3 ;U$ BNE 30$ ;IF NE SST ROUTINE FOUND 020$: TST (R4)+ ;POINT TO NEXT VECTOR DESCRIPTOR RETURN ;C&30$: TST (SP)+ ;REMOVE RETURN ADDRESS3 MOV 2(SP),R1 ;GET NUMBER OF BYTES TO BE TRANSFEREDG) SUB R1,(SP) ;CALCULATE NEW TOP OF STACKV, MOV (SP),R0 ;COPY NEW TOP OF STACK ADDRESS) MTPI SP ;RESTORE NEW TASK STACK POINTER 2 CALL $ACHCK ;ADDRESS CHECK PUSH ONTO TASK STACK & BCS 70$ ;IF CS ADDRESS CHECK FAILURE .IF DF X$$HDR4 MOV -(R4),$TEMP0 ;SAVE SST ADDRESS FROM TASK HEADER .ENDC ; DF X$$HDR/ CALL $RELOM ;RELOCATE AND MAP STACK ADDRESS P/ MOV (SP)+,R1 ;GET NUMBER OF BYTES TO TRANSFER :5 CMP -(R1),-(R1) ;ADJUST BY 4 BYTES (PS AND PC WORDS)N ASR R1 ;CONVERT TO WORD COUNT' TST (SP)+ ;REMOVE SST CODE FROM STACKV.40$: DEC R1 ;ANY MORE PARAMETERS TO TRANSFER? BLT 50$ ;IF LT NOW2 MOV (SP)+,(R0)+ ;TRANSFER PARAMETER TO TASK STACK BR 40$ ;*50$: MOV #$UMPC,R1 ;POINT TO SAVED PC WORD. MOV (R1),(R0)+ ;SAVE PC AT TRAP ON USER STACK MOV R3,(R1)+ ;SET SST PC WORD- MOV (R1),(R0) ;SAVE PS AT TRAP ON USER STACK ' MOV #CMODE!PMODE,(R1) ;SET SST PS WORDG N E .IF DF S$$LIB F .IF DF X$$HDR- BIT #1,$TEMP0 ;SUPERVISOR MODE SST ROUTINE ?R ; .IFF ; DF X$$HDRN, BIT #1,-(R4) ;SUPERVISOR MODE SST ROUTINE ? .ENDC ; DF X$$HDR BEQ 55$ ;IF EQ NO+ TSTB $SUPFL ;LINKED TO SUPER MODE LIBRARYF$ BEQ 55$ ;IF EQ NO, FORCE USER MODE; BIC #^CCSMODE&CMODE,(R1) ;SET RETURN PS WORD TO SUPER MODE ) TST (R0) ;WAS PREVIOUS MODE SUPERVISOR?) BMI 54$ ;IF MI NOM: BIC #^CPSMODE&PMODE,(R1) ;SET PREVIOUS MODE TO SUPERVISOR54$: ;REFERENCE LABEL N .ENDC D $55$: RETURN ;EXIT FROM TRAPB;,6; SST FAULT AT NON ZERO STACK DEPTH-FATAL SYSTEM ERROR;D060$: BGCK$R #BF.EXE,R3,FATAL;BUGCHECK THE SYSTEM$ ;FACILITY IS GENERAL EXEC ERROR. ;THE ERROR CODE IS FOR THE ;SST CAUSING THE PROBLEM. ;Q2; SST CANNOT BE EFFECTED BECAUSE OF BAD TASK STACK;T 170$: MOV #S.CSST,R0 ;SET BAD STACK SST ABORT CODEV BR 81$ ;ABORT TASK ; 7; SST CANNOT BE EFFECTED BECAUSE OF NO SST VECTOR ENTRY:; %80$: MOV 4(SP),R0 ;SET SST ABORT CODE:) TST $TEMP0 ;IS THERE A BOM$ ABORT CODE?L BEQ 81$ ;IF EQ NO, OK AS IS + MOV $TEMP0,R0 ;USE BOM$ ERROR CODE INSTEADT181$: MOV #$STACK-22,SP ;RELOAD EXEC STACK POINTERE&85$: CALLR $ABCTK ;ABORT CURRENT TASK; /; FAULT FROM PROTECTED LIMITS IN DRDSP OR DRQIO ;E90$: E  .IF DF P$$D70 ' CLR @$CPUER ;CLEAR CPU ERROR REGISTERS K .IF NDF M$$EXT  NOP ;THIS NOP MUST BE HERE.& ;UNLESS THE MICRO CODE BUG IN THE & ;11/60 IS FIXED (ECO M7872-00007),$ 00Ywwtbl ;CLEARING THE CPU ERROR REGISTER( ;WILL CAUSE THIS WORD TO BE SKIPPED. Q .ENDC I .ENDC E ,+ INC $STKDP ;CORRECT STACK DEPTH INDICATORS- MOV 20(R1),PS ;RESTORE CORRECT PREVIOUS MODEL$ DRSTS D.RS98 ;SET DIRECTIVE STATUS L;R:; FAULT FROM PROTECTED LIMITS IN CSM INSTRUCTION EMULATION;F'; AT THIS POINT THE STACK IS AS FOLLOWSE;R,; 0(SP) - NUMBER OF BYTES TO BE TRANSFERRED; .P; SST PARAMETERS; . %; 0(R1) - RETURN POINTER TO $DIRXTI; 2(R1) - SAVED R0 FROM TRAPC; 4(R1) - SAVED R1E; 6(R1) - SAVED R2 ; 10(R1) - SAVED R3.; 12(R1) - SAVED R4C; 14(R1) - SAVED R5;; 16(R1) - SAVED PCI; 20(R1) - SAVED PS;; . *; $STACK-6 - SAVED R0 DURING CSM EMULATION; $STACK-4 - PC OF CSM TRAP ; $STACK-2 - PS OF CSM TRAPN;M6; WE WILL CLEAN UP THE STACK AND MAKE IT LOOK AS IF WE; ENTERED THROUGH $DIRSV N .IF DF S$$LIB E100$:E MTPS #PR7 ;DISABLE INTERRUPTS( MOV 14(R1),R5 ;;;RESTORE R5 FROM $DIRSV# MOV #$STACK-6,SP ;;;TRUNCATE STACKC# MOV (SP),R0 ;;;GET SAVED R0 VALUE- MOV R5,(SP) ;;;SAVE R5 MOV 20(R1),R5 ;;;AND GET OLD PS6 BIC #^C,R5 ;;;CLEAR ALL BUT PREVOIUS MODE BITS+ BIS R5,PS ;;;SET PREVIOUS MODE TO CORRECT  MOV R4,-(SP) ;;;SAVE R4/ MOV SP,@$HEADR ;;;SAVE STACK POINTER IN HEADERT- MOV 4(R1),R1 ;;;RESTORE ORIGINAL VALUE OF R1  MTPS #0 ;;;ALLOW INTERRUPTSO% MOV R3,-(SP) ;SAVE REST OF REGISTERS$ MOV R2,-(SP) ;TO MAKE IT LOOK MOV R1,-(SP) ;LIKE A NORMAL SST MOV R0,-(SP) ;ENTRY TO THES MOV #$DIRXT,-(SP) ;EXECUTIVE,) MOV #S.CCSM,R0 ;SET BAD STACK ABORT CODE; BR 85$ ;ABORT CURRENT TASK E .ENDC ;DF S$$LIBP E .DSABL LSB  .END DE BITS+ BIS R5,PS ;;;SET PREVIOUS MODE TO CORRECT  MOV R4,-(SP) ;;;SAVE R4/ MOV SP,@$HEADR ;;;SAVE STACK POINTER IN HEADERT- MOV 4(R1),R1 ;;;RESTORE ORIGINAL VALUE OF R1  MTPS #0 ;;;ALLOW INTERRUPTSO% MOV R3,-(SP) ;SAVE REST OF REGISTERS$ MOV R2,-(SP) ;TO MAKE IT LOOK MOV R1,-(SP) ;LIKE A NORMAL SST MOV R0,-(SP) ;ENTRY TO THES MOV #$DIRXT,- .TITLE SYSCMR .IDENT /18.00/I;G5; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATIONR; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;S; D. N. CUTLER 11-AUG-73;I+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY: ; ; P. J. BEZEREDI; J. R. KAUFFMAN; J. M. LAWLER ; T. LEKASS; T. M. MARTIN;T+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:F;M;D; J. R. KAUFFMAN; L. B. MCCULLEY ; K. L. NOEL; B. S. MCCARTHY;I; MODIFIED BY:;c; K. L. NOEL 04-NOV-87 V17.00P;T<; KLN071 -- ADD LOCATION FOR TOTAL NUMBER OF SECONDARY POOL ; BLOCKSE;D; J. W. BERZLE 21-JAN-88 17.01;C-; JWB225 -- TURN ON WINDOW I/O COUNT SUPPORT ;N;U$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;M; L. KOGAN 22-SEP-88 18.00A; LK745 -- SUPPORT SLAVED TERMINAL TYPEAHEAD BUFFER OPTION; M; SYSTEM COMMON DATA AREAR;X; MACRO LIBRARY CALLSY; .MCALL HDRDF$,HWDDF$,TCBDF$/ .MCALL EPKDF$ ;ERRLOG PACKET/MASK DEFINITIONS % HDRDF$ ;DEFINE TASK HEADER OFFSETS7$ HWDDF$ ;DEFINE HARDWARE REGISTERS, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS$ EPKDF$ ;DEFINE FEATURE MASK FLAGS .IF DF A$$CNT .MCALL ACNDF$/ ACNDF$ ;DEFINE OFFSETS FOR ACCOUNTING BLOCKSM .ENDC;; MAKE CLOCK PARAMETERS GLOBAL;L S$$RTZ==H$$RTZ ;LINE FREQUENCY%S$$IEN==K$$IEN ;ENABLE BITS PATTERNC/S$$LDC==K$$LDC ;LOAD VALUE FOR COUNT REGISTER-S$$TPS==K$$TPS ;TICKS PER SECOND ON P CLOCK ;O; LOCAL SYMBOL DEFINITIONS;R; FUNCTION MASK LITERAL ;SBFMASK= FE.EXV!FE.DRV!FE.CAL!FE.EXP!FE.FDT ;INITIALIZE FEATURE MASKFMASK= FMASK!FE.DYME .IF DF M$$EXT&M$$MGEK2FMASK= FMASK!FE.EXT ;INCLUDE EXTENDED MEMORY MASK .ENDC .IF DF M$$MUP8FMASK= FMASK!FE.MUP ;INCLUDE MULTI-USER PROTECTION MASK .ENDC .IF DF P$$LAS"FMASK= FMASK!FE.PLA ;PLAS SUPPORT .ENDC .IF DF Q$$OPT.FMASK= FMASK!FE.PKT ;QIO PACKET PREALLOCATION .ENDC .IF DF P$00wfwtkTADATADATADATADATADATA$OFF6FMASK= FMASK!FE.OFF ;PARENT OFFSPRING TASKING SUPPORT .ENDC0F2MASK=0 ;INITIALIZE SECOND MASK WORD CONTENTS .IF DF K$$DAS0F2MASK=F2MASK!F2.DAS ;KERNEL DATA SPACE SUPPORT .ENDC .IF DF S$$LIB6F2MASK=F2MASK!F2.LIB ;SUPERVISOR MODE LIBRARY SUPPORT .ENDC .IF DF M$$PRO,F2MASK=F2MASK!F2.MP ;MULTIPROCESSOR SUPPORT .ENDC .IF DF E$$VNT3F2MASK=F2MASK!F2.EVT ;EVENT TRACE FACILITY SUPPORTA .ENDC .IF DF A$$CNT-F2MASK=F2MASK!F2.ACN ;CPU ACCOUNTING SUPPORTA .ENDC .IF DF S$$HDW/F2MASK=F2MASK!F2.SDW ;SHADOW RECORDING SUPPORTE .ENDC .IF DF P$$OOL-F2MASK=F2MASK!F2.POL ;SECONDARY POOL SUPPORT  .ENDC .IF DF D$$PAR<F2MASK=F2MASK!F2.DPR ;SYSTEM SUPPORTS A DIRECTIVE PARTITION .ENDC .IF DF P$$WND=F2MASK=F2MASK!F2.WND ;SYSTEM SUPPORTS SECONDARY POOL WINDOWS. .ENDC%; DEFINE CONSTANT FEATURE MASK 2 BITSE8 F2MASK=F2MASK!F2.IRR!F2.GGF!F2.RAS!F2.RBN!F2.SWP!F2.STP; FEATURE MASK 3 BITSC%; DEFINE CONSTANT FEATURE MASK 3 BITSF F3MASK=F3.AST!F3.EIS!F3.RLK F3MASK=F3MASK!F3.SHF .IF DF A$$CLI F3MASK=F3MASK!F3.CLI2 .ENDC .IF DF X$$HDR. F3MASK=F3MASK!F3.XHR ;EXTERNAL HEADER SUPPORT .ENDC .IF DF U$$DAS. F3MASK=F3MASK!F3.UDS ;USER DATA SPACE SUPPORT .ENDC .IF DF P$$OOL1 F3MASK=F3MASK!F3.PRO ;SEC POOL PROTO TCB SUPPORTE .ENDC .IF DF T$$COM5 F3MASK=F3MASK!F3.TCM ;TTDRV HAS SEPARATE BUFFER POOL2 .ENDC .IF DF P$$CTL. F3MASK=F3MASK!F3.PMN ;POOL MONITORING SUPPORT .ENDC; FEATURE MASK 4 BITSS ; DEFINE MASK (NO CONSTANT BITS) F4MASK=0= .IF DF R$$PRO) F4MASK=F4MASK!F4.XT ;THIS IS A CT SYSTEMF .ENDC ;R$$PRO .IF DF E$$LOG, F4MASK=F4MASK!F4.ERL ;ERROR LOGGING SUPPORT .ENDC .IF DF P$$RTY, F4MASK=F4MASK!F4.PTY ;PARITY MEMORY SUPPORT .ENDC .IF DF, F$$DVN. F4MASK=F4MASK!F4.DVN ;DECIMAL VERSION NUMBERS .ENDC ; DF F$$DVN .IF DF C$$CDA .IF EQ, C$$CDAC2 F4MASK=F4MASK!F4.LCD ;LOADABLE CRASH DUMP SUPPORT .ENDC ; EQ C$$CDA .ENDC .IF DF F$$NIM0 F4MASK=F4MASK!F4.NIM ;DELETED FIXED TASK IMAGES .ENDC .IF DF D$$CHE( F4MASK=F4MASK!F4.CHE ;DISK DATA CACHING .ENDC .IF DF L$$GCL+ F4MASK=F4MASK!F4.LOG ;LOGICAL NAME SUPPORTC .ENDC .IF DF N$$DIR. F4MASK=F4MASK!F4.NAM ;NAMED DIRECTORY SUPPORT .ENDC ;DF N$$DIR .IF DF P$$LAS&X$$HDR&F$$MAP' F4MASK=F4MASK!F4.FMP ;FAST MAP SUPPORTF .ENDC ; DF P$$LAS&X$$HDR&F$$MAP .IF DF D$$DCL) F4MASK=F4MASK!F4.DCL ;DCL IS DEFAULT CLI$ .ENDC ;DF D$$DCLF .IF DF D$$DDS2 F4MASK=F4MASK!F4.DDS ;DDS IS DEFAULT (NAMED MODE) .ENDC ;DF D$$DDSF .IF DF T$$ACD, F4MASK=F4MASK!F4.ACD ;SYSTEM SUPPORTS ACD'S .ENDC ;DF T$$ACD. .IF DF T$$TSA- F4MASK=F4MASK!F4.NCT ;SYSTEM HAS NCT SUPPORT4 .ENDC ;DF T$$TSAR$; DEFINE MASK (NO CONSTANT FEATURES)* F5MASK=F5.VTL ;INIT TO VTLOGONS DISABLED; Remote services feature maskH; If HF.RMT is set as SAV brings the system up, the mask in $FMSKR will $; replace the bits defined by $FMSKMI; This scheme allows the system to be SAVed on a processor that does not DM; require host services and then run on a processor like the KXJ11 which doesP FMASKR=0  .IF DF P$$3XX7 F5MASK=F5MASK!F5.PRO ;SYSTEM SUPPORTS PROFESSIONAL 3XX  ;SERIES PERSONAL COMPUTERS .ENDC ; DF P$$3XX .IF DF C$$DFB8 F5MASK=F5MASK!F5.DFB ; SYSTEM SUPPORTS DEFERRED BINDING .ENDC ; DF C$$DFB .IF DF C$$ODB5 F5MASK=F5MASK!F5.ODB ; CAN OVERRIDE DEFERRED BINDING .ENDC ; DF C$$ODB .IF DF C$$RTB8 F5MASK=F5MASK!F5.RTB ; SYSTEM SUPPORTS RUN TIME BINDING .ENDC ; DF C$$RTB .IF DF C$$RTK< FMASKR=FMASKR!F5.RTK ; SYSTEM SUPPORTS REMOTE TASK INSTALLS .ENDC ; DF C$$RTK F .IF DF C$$NSY< FMASKR=FMASKR!F5.NSY ; SYSTEM SUPPORTS NO LOCAL SYSTEM DISK .ENDC ; DF C$$NSY .IF DF C$$NCO2 FMASKR=FMASKR!F5.NCO ; SYSTEM SUPPORTS NO CONSOLE .ENDC ; DF C$$NCO .IF DF C$$XDJ/ FMASKR=FMASKR!F5.00wwtblXDJ ; SYSTEM SUPPORTS KXJ XDTD .ENDC ; DF C$$XDJ .IF DF C$$RDRA FMASKR=FMASKR!F5.RDR ; SYSTEM SUPPORTS REMOTE DIRECTORY DEFAULTSB .ENDC ; DF C$$RDR .IF DF C$$RLG7 FMASKR=FMASKR!F5.RLG ; SYSTEM SUPPORTS REMOTE LOGICALSS .ENDC ; DF C$$RLG .IF DF C$$LDR> FMASKR=FMASKR!F5.LDR ; SYSTEM SUPPORTS REMOTE LOADER/OVERLAYS .ENDC ; DF C$$LDR, .IF NDF C$$RMT ; IF NO REMOTE HOST SUPPORT. F5MASK=F5MASK!FMASKR ; SET $FMASK5 TO BE BOTH .ENDC ; C$$RMT;F; NULL TASK CONTROL BLOCKM;PE; THIS TCB TERMINATES THE SYSTEM AND ACTIVE TASK LISTS. IT MUST HAVERC; A PRIORITY OF ZERO AND ALWAYS BE BLOCKED. REQUIRED POSITIONS ARE$!; ENFORCED BY THE "ASSUME" MACRO.M;R+$CMBEG:: ;BEGINNING OF SYSCM AREA FOR CDA.;CF; $ACCLK MUST REFERENCE THE SAME TWO WORDS AS $ABTIM FOR ACCOUNTING TOF; WORK, UNLESS ACCOUTING HAS ITS OWN CLOCK. IN THIS CASE, $ACCLK WILLD; BE THE ADDRESS OF WHERE ACCOUNTING CAN ACCESS IT. ACCOUNTING WILL;; USE A TWO WORD $ABTIM IF A PRIVATE CLOCK IS NOT AVAILABLE;-$ACCLK:: ;ABSOLUTE TIME CLOCK FOR ACCOUTINGK,$ABTM2::.WORD 0 ;ADDITIONAL WORD FOR $ABTIM'$ABTIM::.WORD 0 ;ABSOLUTE TIME COUNTER 1$ACTHD::.WORD . ;T.LNK-ACTIVE TASK LIST LISTHEADB* ASSUME .-$ACTHD,T.PRI ;T.PRI MUST BE ZERO+ .BYTE 0 ;T.PRI-NULL TASK PRIORITY IS ZEROA .IF DF M$$PRO=$NCPU:: .BYTE M$$PRO ;T.IOC - NUMBER OF PROCESSORS IN SYSTEM, .IFFI3$NCPU:: .BYTE 0 ;T.IOC - NOT MULTIPROCESSOR SYSTEM  .ENDC0$COMEF::.WORD 0 ;T.DPCB-COMMON EVENT FLAGS 1-16) .WORD 0 ;T.NAM-COMMON EVENT FLAGS 17-32M/$HRCPT::.WORD 0 ;T.NAM+2-POINTER TO HRC... TCBN?$DEVHD::.WORD $DEVTB ;T.RCVL-PTR TO FIRST DEVICE CONTROL BLOCKT.$TKNPT::.WORD 0 ;T.RCVL+2-POINTER TO TKTN TCB0$SHFPT::.WORD 0 ;T.ASTL-POINTER TO SHUFFLER TCB:$CKCNT::.WORD K$$CNT ;T.ASTL+2-ADDRESS OF CLOCK COUNT REG<$CKCSR::.WORD K$$CSR ;T.EFLG-ADDR OF CLOCK CNTRL STATUS REG .IF EQ K$$CSR-177546T+$CKLDC::.WORD 0 ;T.EFLG+2-CLOCK LOAD COUNTN .IFFC0$CKLDC::.WORD K$$LDC ;T.EFLG+2-CLOCK LOAD COUNT .ENDC4$SYUIC::.BYTE 54,1 ;T.UCB-DEFAULT MAPPED SYSTEM UIC, ASSUME .-$ACTHD,T.TCBL ;T.TCBL MUST BE ZERO" .WORD 0 ;T.TCBL-LINK TO NEXT TCB/ ASSUME .-$ACTHD,T.STAT ;T.STAT MUST BE NONZEROT7$EXSIZ::.WORD $SYTOP ;T.STAT-ADDR OF LAST BYTE IN EXECC7$PWRFL::.WORD 0 ;T.ST2-POWERFAIL RECOVERY REQUEST FLAGC2$SIGFL::.WORD 0 ;T.ST3-TASK WAITING FOR SIG EVENT+ .WORD 0 ;T.DPRI MUST BE 0, T.LBN - UNUSED:6$FXRPT::.WORD 0 ;T.LBN+1-POINTER TO PARITY ERROR TASK8$LSTLK::.WORD 0 ;T.LDV-LOCK WORD (TCB ADDRESS OF OWNER)1 .WORD 3 ;T.PCB-CONSTANT FOR ALLOCATION ROUTINESC .IF NDF K$$DAST4$ICAVL:: ;ICB POOL SAME AS CORE POOL IF NO D SPACE .ENDC7$CRAVL::.WORD $SYBEG ;T.MXSZ-ACTIVE TASK LIST LISTHEADS, ASSUME .-$ACTHD,T.ACTL ;T.ACTL MUST BE ZERO .IF NDF M$$PROO*$K6TAB:: ;REFERENCE LABEL FOR MAPPING IN ;NON-MULTIPROCESSOR SYSTEM .ENDC1 .WORD 0 ;T.ACTL-NEXT ACTIVE TASK-DUMMY BLK SIZE ;.7; END OF SUPERIMPOSED AREA-REMAINING SYSTEM COMMON AREAD;O$ACPTK:: .IF DF R$$AMD) .WORD 0 ;TCB POINTER FOR DEFAULT F11ACPU .ENDC ; DF R$$AMD3$VERTK::.WORD 0 ;TCB POINTER FOR VERIFICATION TASKD4$LOGHD::.WORD 0 ;LOGICAL DEVICE ASSIGNMENT LISTHEAD6$CFLPT::.WORD 0 ;POINTER TO FIRST CHECKPOINT FILE PCB$MOULS::.WORD 0 ;MOUNT LIST $LBUIC::.BYTE 54,3 ;LIBRARY UIC $NTUIC::.BYTE 54,1 ;NETWORK UIC7$SPMAX::.WORD 0 ;POINTER TO AUXILARY MONITOR POOL NODEA1$SPMVC::.BLKW 1 ;POINTER TO SPM NODE IN ICB POOLA)$HKSTS::.BLKW 1 ;SPM MONITOR STATUS WORDKG; SPM ENTRY VECTORS - EXTERNAL TASKS (LOADER,F11ACP) CALL THROUGH THESEC5; HOOKS. THEY POINT TO THE RETURN IN $GTPKT IFI;; SPM IS TURNED OFF, AND SPM INTERCEPTS THEM WHEN ITI; IS ENABLED.;; .IF DF K$$DAS4$SPV01::.WORD 0 ;SPM VECTOR FOR ACP HOOKPOINT ENTRY6$SPV02::.WORD 0 ;SPM VECTOR FOR LOADR HOOKPOINT ENTRY6$SPV03::.WORD 0 ;SPM VECTOR FOR LOADR HOOKPOINT ENTRY .IFF ; DF K$$DASB9$SPV01::.WORD $SPVEX ;SPM VECTOR FOR ACP HOOKPOINT ENTRYP;$SPV02::.WORD $SPV00wfwtkTADATADATADATADATADATAEX ;SPM VECTOR FOR LOADR HOOKPOINT ENTRYS;$SPV03::.WORD $SPVEX ;SPM VECTOR FOR LOADR HOOKPOINT ENTRYI .ENDC ; DF K$$DAS;I?; $BTTIM HOLDS THE ABSOLUTE TIME OF WHEN THE SYSTEM WAS BOOTED. C; THE TWO WORDS MUST BE CONSECUTIVE, THE LABEL IS ON THE SECOND ONET; FOR COMPATABILITY WITH $ABTIM2;W+$BTTM2::.WORD 0 ;HIGH ORDER WORD OF $BTTIM1$BTTIM::.WORD 0 ;VALUE OF $ABTIM WHEN SYS BOOTEDT .IF DF D$$MND2$DICSR::.WORD D$$MND ;ADDRESS OF DIAMOND REGISTER7$DITCB::.WORD 0 ;ADDRESS OF TCB FOR TASK BEING WATCHED  .ENDC .IF DF M$$PRO3$CKURM::.WORD 1 ;URM OF PROCESSOR THAT KEEPS CLOCKN .ENDC* .BLKW 1 ;CLOCK INTERRUPT FORK BLOCK LINK( .BLKW 1 ;CLOCK INTERRUPT FORK BLOCK PC.$INTCT::.WORD -1 ;CLOCK INTERRUPT TICKS COUNT%$FRKHD::.WORD 0 ;FORK QUEUE LISTHEADB0 .WORD $FRKHD ;(LAST POINTS TO FIRST INITIALLY))$FMASK::.WORD FMASK ;SYSTEM FEATURE MASKN9$FMSK2:: .WORD F2MASK ;SECOND WORD OF SYSTEM FEATURE MASKA8$FMSK3:: .WORD F3MASK ;THIRD WORD OF SYSTEM FEATURE MASK9$FMSK4:: .WORD F4MASK ;FOURTH WORD OF SYSTEM FEATURE MASK8$FMSK5:: .WORD F5MASK ;FIFTH WORD OF SYSTEM FEATURE MASK1$FMEND:: ;REF. LABLE DELIMITING FEATURE MSK WDSK .IF DF C$$RMT$XXWIN::A$FMSKR::.WORD FMASKR ; THIS WORD BECOMES $FMSK5 IF HF.RMT IS SETK3 .WORD 0 ; W.IOC MUST BE ZERO, EVERYTHING ELSE IS L ; IRRELIVANT N .IFF ; C$$RMT$XXWIN::$FMSKR:: .ENDC ; C$$RMTS($PRMOD::.WORD 0 ;PROCESSOR MODEL NUMBER$CLKHD::.WORD 0 ;CLOCK QUEUES2$COPT:: .WORD .CO0 ;POINTER TO COMMAND OUTPUT UCB+$PARHD::.WORD 0 ;POINTER TO PARTITION LIST'$LDRPT::.WORD 0 ;POINTER TO LOADER TCBE7$TSKHD::.WORD $ACTHD ;POINTER TO SYSTEM TASK DIRECTORY 1$CBDHD::.WORD 0 ;COMMON BLOCK DIRECTORY LISTHEAD  .IF DF G$$GEF*$GGEF:: .WORD 0 ;GROUP GLOBAL EVENT FLAGS3$GFTCB::.WORD $GEFPT+2 ;GRP GLOBAL USER TCB POINTERE9$GEFPT::.WORD $GEFPT+2 ;GROUP GLOBAL MASK ADDRESS POINTER;, .WORD 0 ;DUMMY WORD FOR NON-GRP GLOBAL USE .ENDC ; DF G$$GEF,$LDPCB::.WORD 0 ;CURRENT LOADER PCB POINTER.$VECTR::.WORD V$$CTR-4 ;HIGHEST VECTOR ADDRESS<$MXEXT::.WORD 177777 ;INITIALLY NO LIMIT FOR TASK EXTENSION7$AVRHD::.WORD 0 ;AUTOMATIC VOLUME RECOGNITION LISTHEAD-$PRIFR::.WORD 0 ;CURRENT AMOUNT OF FREE POOLA3$ULDPT::.WORD 0 ;MICROCODE LOADER TASK TCB ADDRESSL2$GNLST::.WORD 0 ;GENERAL USE POOL PACKET LISTHEAD($PTCBL::.WORD 0 ;PROTOTYPE TCB LISTHEAD.$PTCPT::.WORD 0 ;KISAR5 BIAS OF PROTOTYPE TCB,$PASTH::.WORD 0,.-2 ;PARTITION AST LISTHEAD;G6; P/OS $NXTSK LOCK AND BASE FROM WHICH TO START SEARCH;:'$NXTLK::.WORD 0 ;$NXTSK RECURSION LOCKM)$NXTBA::.WORD 0 ;$NXTSK BASE SEARCH BIAS ;E'; LOGICAL NAME TRANSLATION SUPPORT DATAU;R .IF DF L$$GCL;$LOGTB::.WORD 0 ;APR BIAS PTR TO SYSTEM LOGICAL HASH TABLER3 .WORD 0 ;APR BIAS PTR TO GROUP LOGICAL HASH TABLER9$USRLG::.WORD 0 ;APR BIAS PTR TO USER LOGICAL HASH TABLER2 .WORD 0 ;APR BIAS PTR TO TASK LOGICAL HASH TABLE3 .WORD 0 ;RESERVED WORD FOR P/OS LT.USR (ALWAYS 0)  .IFF ; DF L$$GCL$$LOGTB::$USRLG:: .ENDC ; DF L$$GCL;'; NAMED DIRECTORY CONTEXT BLOCK POINTERC;$CTXPT:: .IF DF N$$DIR .WORD 0 .ENDC ;DF N$$DIRE;A>; THE FOLLOWING WORDS ARE USED FOR THE POOL MONITOR INTERFACE.C; THE ORDERING OF THESE WORDS CANNOT BE CHANGED BECAUSE PMT AND VMRG; ARE WRITTEN TO DEPEND ON IT.;W .IF DF P$$CTL3$PTTCB::.WORD 0 ;TCB ADDRESS OF POOL RECOVERY TASK )$PRISZ::.WORD 0 ;TOTAL SIZE OF FREE POOLR4$POLST::.WORD 0 ;EXEC/POOL TASK COMMUNICATIONS WORD:$PRIHL::.WORD P$$HIL ;HIGH WATER MARK FOR POOL MONITORING9$PRILL::.WORD P$$LOL ;LOW WATER MARK FOR POOL MONITORINGD7$PFRSZ::.WORD P$$FRS ;MINIMUM SIZE OF LARGEST FRAGMENT 9$POLBP::.WORD P$$BPR ;MINIMUM PRIORITY OF NONPRIVILEGED % ;TASKS TO EXECUTE DURING LOW POOLH4$POLFL::.WORD 0 ;EXECUTIVE POOL USAGE CONTROL FLAGS .IFF&$PTTCB:: ;ALWAYS DEFINE THESE LABELS$PRISZ::$POLST::$PRIHL::$PRILL::$PFRSZ::$POLBP::$POLFL:: .ENDC;W#; SHADOW RECORDING IMPURE DATA AREA ;D#$SHUMB::.WORD 0 ;ROOT FOR UMB LISTK4$SHERR00wwtbl::.WORD 0 ;POINTS TO TCB OF SHADOW ERROR TASK&$SHLIM::.WORD 10. ;ERROR PACKET LIMIT,$SHPCT::.WORD 0 ;CURRENT SHADOW ERROR COUNT8$SHLOS::.WORD 0 ;NUMBER OF PACKETS LOST FROM SATURATION/$RCTPT::.WORD 0 ;POINTER TO CURRENT RCT... TCBW)$EXCRC::.WORD 0 ;EXECUTIVE RO CODE CRC16.;=; WINDOW I/O COUNT FLAG. THE FOLLOWING WORD IS USED BY DREIF,P<; IOFIN, AND DEACC IN THE ACP TO DETERMINE WHETHER TO MANAGE;; THE WINDOW I/O COUNT. IF SET TO DV.F11 THE BEHAVIOR IS TO =; MANAGE THE I/O COUNT (NEW). IF SET TO ZERO THE I/O COUNT IS 7; LEFT ALONE AND THE WINDOW MAY BE DEALLOCATED WITH I/OT(; PENDING. THIS MAY CAUSE CRASHES LATER.;S8$WCFLG::.WORD DV.F11 ; WINDOW I/O COUNT MANAGEMENT FLAG* .IF DF D$$CHE ;DISK DATA CACHING SUPPORT;E; DATA CACHING IMPURE DATA AREA ;19$DCPCB::.WORD 0 ;PCB ADDRESS OF SYSTEM DEFAULT CACHE PAR ;E1; THESE CELLS ARE FILLED IN BY $MPVBN (MDSUB) FORE8; VIRTUAL TO LOGICAL I/O TRANSLATIONS. THIS INFORMATION5; IS USED BY THE CACHER WHEN PROCESSING THE RESULTINGT ; I/O PACKET.O;U'$DCCEL::.WORD 0 ;CURRENT EXTENT LENGTHD+$DCCEB::.WORD 0,0 ;CURRENT EXTENT BASE LBNS$$DCNEL::.WORD 0 ;NEXT EXTENT LENGTH($DCNEB::.WORD 0,0 ;NEXT EXTENT BASE LBN6$DCSTS::.WORD 0 ;STATUS INFORMATION FROM WINDOW BLOCK .ENDC ;D$$CHE; C; POINTER TO FIRST IP11 UCB, USED BY IP11 POWERFAIL CODE (IN POWER);,$IPUCB::.WORD 0 ; POINTER TO FIRST IP11 UCB;I8; PARAMETER AREA FOR STATUS CHANGE ROUTINES IN OLRSR.MAC;E.$SCDEV::.BLKW 1 ;UCB OR KRB FOR STATUS CHANGE.$SCRET:: ;REFERENCE LABEL (ALIAS FOR $SCCTB),$SCCTB::.BLKW 1 ;CTB IF $SCDEV CONTAINS KRB-$SCOFL::.BLKB 1 ;ONLINE OR OFFLINE PARAMETERG*$SCERR::.BLKB 1 ;ERROR RETURN FROM DRIVER;S"; EVENT TRACE READ/WRITE DATA AREA;I .IF DF E$$VNT;$; CURRENT BUFFER INFORMATION;I)$EVKS6::.WORD 0 ;KISAR6 OFFSET TO BUFFERR0$EVDIS::.WORD 0 ;BUFFER POSITION FOR NEXT EVENT2$EVLEN::.WORD 0 ;PTR TO WORD BEYOND END OF BUFFER'$EVSEQ::.WORD 0 ;EVENT SEQUENCE NUMBER :$EVLOS::.WORD 0 ;NUMBER OF EVENTS LOST THROUGH SATURATION2$EVTCB::.WORD 0 ;TCB ADDRESS OF EVENT LOGGER TASK;I; EVENT SWITCH TABLE;;; INDEXED BY EVENT NUMBERG"; IF BYTE NEGATIVE, EVENT DISABLED,; IF BYTE POSITIVE, VALUE IS LENGTH OF EVENT;A?; EVERY EVENT MUST CONTAIN AN ENTRY IN THIS TABLE, OF THE FORM:;E(; .BYTE -EV.XXX ;THIS IS A SAMPLE EVENT;D); WHERE XXX IS THE NUMBER OF THE EVENT.T;E$EVTAB:: ;REFERENCE LABELO .REPT E$$VNTE, .BYTE -1 ;SET ALL EVENTS TO NULL INITIALLY .ENDR! .BYTE 0 ;THERE IS NO EVENT ZEROA .EVEN;:; EVENT BUFFER MANAGEMENTE;L4$EVBSQ::.WORD 1 ;BUFFER SEQUENCE NUMBER (NEVER = 0)$EVLST:: ;REFERENCE LABELA .REPT E$$BUF+1# .WORD 0 ;KISAR6 POINTER TO BUFFERE .ENDR .IFFV$EVKS6:: ;REFERENCE LABELI$EVDIS::$EVLEN::$EVSEQ::$EVTAB::$EVBSQ::$EVLST:: .ENDC; WATCHPOINT DEBUG INFO  .IF DF R$$WPT2$WPLST::.WORD 0 ;LAST SYSTEM STATE ROUTINE CALLED/$WPVAL::.WORD 0 ;VALUE TO WATCH FOR OR AGAINSTN,$WPADR::.WORD $WPVAL ;PLACE TO WATCH FOR IT .ENDC ; DF R$$WPT;N;; ADDITIONAL ARGUMENT TO $POWER FOR MULTIPROCESSOR SYSTEMS.E;  .IF DF M$$PRO"$PFURM::.WORD 0 ;URM TO POWERFAIL .ENDC=$SWR:: .WORD 0 ;SOFTWARE SWITCH REGISTER IF NONE IN HARDWAREC; EXECUTIVE COMMON APR TABLE;:; * * * N O T E * * *;E; THIS TABLE IS ORDER DEPENDENT, SINCE THERE IS A TABLE IN VMR OF THEWE; STANDARD COMMON NAMES THAT OCCUR IN THE DIRECTIVE PARTITION. A SIDETE; EFFECT OF THIS IS THAT THE ENTRIES BELOW MAY NOT BE CONDITIONALIZEDN;; .IF DF D$$PAR6$DRAPR::.WORD 0 ;APR VALUE TO MAP DIRECTIVE PARTITION1$DRAP2::.WORD 0 ;BIAS OF SECOND DIRECTIVE COMMON 0$DRAP3::.WORD 0 ;BIAS OF THIRD DIRECTIVE COMMON1$DRAP4::.WORD 0 ;BIAS OF FOURTH DIRECTIVE COMMONX2$DRAPV::.WORD 0 ;BIAS OF EXEC VECTORING DIRECTIVE3$DRCHE::.WORD 0 ;BIAS OF DATA CACHE MANAGER COMMONE- .WORD -1 ;FLAG FOR END OF COMMON BIAS TABLEA .IFFO%$DRAPR:: ;ALWAYS DEFINE THIS SYMBOL .ENDC?; $E00wfwtkTADATADATADATADATADATANVEC - TABLE OF ENTRY POINTS FOR VECTORING CODE WHICH CAN'T; USE $DRGIN;D:; THIS TABLE CONTAINS A *SMALL* NUMBER OF ADDRESSES AND IS?; INTENDED TO PROVIDE THE MINIMUM AMOUNT OF INFO TO ACCESS THENI$; SYSTEM WITHOUT BEING LINKED TO IT.;R7$ENVEC::.WORD $DRAPV ;POINTER TO APR BIAS OF VECTORINGI ;COMMONC .IF DF C$$CDA/$CRKRB::.WORD 0 ;CRASH DUMP DEVICE KRB ADDRESSE7$CRSFM::.WORD 0 ;CRASH FORMATTER NUMBER (RH TAPE ONLY)OC$CRSUN::.WORD C$$RUN ;CRASH PHSICAL UNIT NUMBER. NOTE: C$$RUN ISB. ;...A LOGICAL UNIT NUMBER. INITL CONVERTS) ;...$CRSUN TO A PHYSICAL UNIT NUMBER.A6$CRCSR::.WORD 0 ;CRASH DEVICE CSR ADDRESS WHEN NO KRB1$CRLCK::.BYTE 1 ;ONLY ONE CPU SHOULD DUMP MEMORY" .BYTE 0 ;PRESERVE WORD ALIGNMENT .ENDC ; DF C$$CDA .IF DF R$$NDC<$RNDCT::.WORD R$$NDC ;CLOCK TICKS TO NEXT SCHEDULE INTERVAL:$RNDC:: .WORD R$$NDC ;CLOCK TICKS PER SCHEDULING INTERVAL8$RNDL:: .BYTE R$$NDL ;LOWEST PRIORITY CLASS TO CONSIDER-$RNDH:: .BYTE R$$NDH ;HIGHEST PRIORITY CLASSI .ENDC .IF DF S$$WPC&D$$ISKN<$SWPCT::.WORD S$$WPC ;CLOCK TICKS TO NEXT SWAPPING INTERVAL8$SWPC:: .WORD S$$WPC ;CLOCK TICKS PER SWAPPING INTERVAL($SWPR:: .WORD S$$WPR ;SWAPPING PRIORITY .ENDC;E:; DAYS PER MONTH TABLE (ENTRY CONTAINS DAYS PER MONTH + 1);'$DYPMN::.BYTE 29.,32. ;FEBRUARY, MARCHT .BYTE 31.,32. ;APRIL, MAYW .BYTE 31.,32. ;JUNE, JULYS" .BYTE 32.,31. ;AUGUST, SEPTEMBER" .BYTE 32.,31. ;OCTOBER, NOVEMBER" .BYTE 32.,32. ;DECEMBER, JANUARY;R; BIT MASK TABLE;F; NOTE: DUE TO THE ORGANIZATION OF THE SUPERVISOR MODE MAPPING CONTROL@; SUPPORT, NAMELY THE FACT THAT BIT 0 OF THE BYTE CORRESPONDS TO:; APR 1, NOT APR 0, THERE MUST BE A ZERO PRECEDING $BTMSK.;! .WORD 0 ;DUMMY FOR APR0 BITMASK $BTMSK::.WORD 1 ;BIT 0. .WORD 2 ;BIT 1.B .WORD 4 ;BIT 2.A .WORD 10 ;BIT 3. .WORD 20 ;BIT 4. .WORD 40 ;BIT 5. .WORD 100 ;BIT 6.. .WORD 200 ;BIT 7.B .WORD 400 ;BIT 8.O .WORD 1000 ;BIT 9. .WORD 2000 ;BIT 10.J .WORD 4000 ;BIT 11.K .WORD 10000 ;BIT 12. .WORD 20000 ;BIT 13. .WORD 40000 ;BIT 14. .WORD 100000 ;BIT 15.N7; BIT MASK TABLE FOR FORMING ADDRESS MASKS IN $ACHRO IN ; USER I/D SYSTEMS .IF DF U$$DAS!S$$LIB$ .BYTE 0$$BCMSK::.BYTE 1,3,7,17,37,77,177,377 .ENDC ; DF U$$DAS!S$$LIBD4; TABLE OF APR ADDRESSES USED BY GIN SF.APR FUNCTION .EVEN5$APRTB::.WORD KINAR0,KINDR0 ;KERNEL I SPACE REGISTERSD .IF DF K$$DAS. .WORD KDSAR0,KDSDR0 ;KERNEL D SPACE REGISTERS .ENDC ; DF K$$DAS, .WORD UINAR0,UINDR0 ;USER I SPACE REGISTERS .IF DF U$$DAS, .WORD UDSAR0,UDSDR0 ;USER D SPACE REGISTERS .ENDC ; DF U$$DAS .IF DF S$$LIB- .WORD SISAR0,SISDR0 ;SUPER I SPACE REGISTERSD- .WORD SDSAR0,SDSDR0 ;SUPER D SPACE REGISTERS, .ENDC ; DF S$$LIB .WORD 0 ;END OF TABLE;L@; SHUFFLER TASK REQUEST LIMIT FLAGS. $SHFTM CONTAINS THE NUMBER>; OF CLOCK TICKS THAT MUST EXPIRE BEFORE THE SHUFFLER TASK CAN@; BE REQUESTED BY THE EXECUTIVE. IT IS INITIALIZED TO THE VALUE6; CONTAINED IN $SHFCT EACH TIME THE SHUFFLER EXECUTES.;.>$SHFTM:: .WORD 0 ;TIME REMAINING BEFORE NEXT POSSIBLE REQUEST?$SHFCT:: .WORD S$$HFC ;MINIMUM TICKS BETWEEN SHUFFLER REQUESTS ;E ; ONLINE ERROR LOGGING DATA BASE;  .IF DF E$$LOG;N ; ERROR LOG FEATURE MASK SUPPORT;A EFEAT = 0L$ .IIF DF,E$$ICM EFEAT = EFEAT!EL.ICM$ .IIF DF,E$$MOU EFEAT = EFEAT!EL.MOU$ .IIF DF,E$$SEF EFEAT = EFEAT!EL.SEF1$EFMSK::.WORD EFEAT ;SELECTED FEATURE MASK WORDS -$ERHEA::.WORD 0, .-2 ;MESSAGE QUEUE LISTHEADH'$ENTSQ::.WORD 0 ;ENTRY SEQUENCE NUMBER($ERFLA::.WORD 0 ;ERROR LOGGER FLAG WORD7$ERRX:: .WORD 0 ;POINTER TO SECONDARY POOL ERRLOG DATA  .IFFW$ERFLA:: ;REFERENCE LABEL .ENDC ; DF E$$LOG-$ERRPT::.WORD 0 ;POINTER TO ERROR LOGGER TCBO'$ERRSQ::.WORD 0 ;ERROR SEQUENCE NUMBER.$NCTPT:: .IF DF T$$TSAI .WORD 0 ;APR BIAS OF NT.NCTA( .WORD 0 ;APR5 ADDRESS OF QUEUE ROUTINE .WORD 0 ;NCT... TCB ADDRESSE .ENDC ; T$$TSA  .IF DF R$$PRO;,A; $NVRTM CONTAINS TH00wwtblE NUMBER OF TICKS THAT MUST ELAPSE BEFORE THEMD; O/S UPTIME CELL IN THE PROFESSIONAL 3XX NVR IS UPDATED. IN GENERALD; IT IS SET TO THE NUMBER OF TICKS PER SECOND TIMES 60. THIS RESULTSD; IN UPTIME IN MINUTES BEING RECORDED. IT IS INITIALIZED WITH $NVRCT ; EACH TIME THAT NVR IS UPDATED.;E,$NVRTM::.WORD 0 ;TICKS TILL NEXT NVR UPDATE1$NVRCT::.WORD N$$VRC ;TICKS PER NVR UPDATE CYCLER;Q#; TASK NAME OF THE P/OS DISPATCHER.D(; USED TO SEND MESSAGES AND AST'S TO IT.;4$CTBNM::.RAD50 /C$CTEX/ ;NAME OF THE P/OS DISPATCHER .ENDC ; DF R$$PRO$$DVSAV::.BLKW 1 ;SAVED CSR CONTENTS;D0; SYSTEM BOOTSTRAP AND SAVE CONFIGURATION VECTOR;P .IF NDF K$$DASH$SYALT:: ;REFERENCE LABELT .ENDC3$SYSIZ::.WORD S$$YSZ ;SIZE OF MEMORY IN 32W BLOCKSN- .BLKB 1 ;LOGICAL UNIT NUMBER OF LOAD DEVICEI) .BLKB 3 ;LBN OF LOAD/SAVE IMAGE ON DISKT' .BLKW 1 ;NAME OF LOAD DEVICE IN ASCIIK, .BLKW 1 ;SIZE OF LOAD IMAGE IN 256W BLOCKS;A; TIME LIMIT PARAMETERS;C .WORD -1 ;YEARS PER UNIVERSE .WORD 13. ;MONTHS PER YEAR( .WORD 32. ;DAYS PER MONTH (CALCULATED) .WORD 24. ;HOURS PER DAY .WORD 60. ;MINUTES PER HOURE .WORD 60. ;SECONDS PER MINUTE;AE; ACCOUNTING USES $ACTPS TO GET THE NUMBER OF CLOCK TICKS PER SECOND.MD; ON SYSTEMS WHERE ACCOUNTING IS USING THE SYSTEM CLOCK, $ACTPS MUSTE; REFERENCE THE SAME WORD AS $TKPS. IF ACCOUNTING HAS ITS OWN CLOCK,I.; IT WILL CONTAIN THE TICK RATE OF THAT CLOCK.; %$ACTPS:: ;CLOCK RATE FOR ACCOUNTING .IF EQ K$$CSR-177546 '$TKPS:: .WORD H$$RTZ ;TICKS PER SECONDO .IFFD'$TKPS:: .WORD K$$TPS ;TICKS PER SECONDU .ENDC;D; CURRENT TIME VECTORE;.* .WORD 82. ;YEAR OF UNIVERSE - HAPPY 30TH' .WORD 3. ;MONTH OF YEAR - BIRTHDAY * .WORD 30. ;DAY OF MONTH - MS. LAWLER .WORD 0 ;HOUR OF DAY .WORD 0 ;MINUTE OF HOURE .WORD 0 ;SECOND OF MINUTE $TTNS:: .WORD 0 ;TICK OF SECOND .IF DF P$$3XX7$CKCSA::.WORD $CKCSA ;THIS WORD IS SET EITHER TO POINTF# ;TO ITSELF (PDP-11 HARDWARE) OR7& ;TO THE CLOCK CSR (SAME AS $CKCSR)' ;(PRO HARDWARE) TO MAKE TDSCH CLOCKS" ;TICKLING RUN TIME CONDITIONAL .ENDC ; DF P$$3XX;.=; LIFO SEND AND I/O PREALLOCATION LIST POINTER AND PARAMETERST;F .IF DF Q$$OPT1$PKAVL::.WORD 0 ;POINTER TO FIRST PACKET IN LIST05$PKNUM::.BYTE 0 ;NUMBER OF PACKETS CURRENTLY IN LISTS5$PKMAX::.BYTE Q$$OPT ;MAXIMUM NUMBER ALLOWED IN LIST. .IFF3$PKNUM:: ;REF LABEL FOR MCR $PKMAX:: ;REF LABEL FOR MCR  .ENDC;-1; SAVE AREA FOR CALCULATED MULTI-USER TASK NAMES.K;) .IF DF R$$DSP8$TNAME::.BLKW 2 ;(2ND WORD IS ALSO FLAG FOR RQST & RUN) .ENDC;34; TEMPORARY STORAGE VARIABLES FOR DIRECTIVE SERVICES;R$TEMP0::.BLKW 1 ;$TEMP1::.BLKW 1 ;4$TEMP2::.BLKW 1 ;COMPLETION ROUTINE ADDR FOR $GSPKT3$TEMP3::.WORD 0 ;SCRATCH SPACE FOR SPWN$ AND RPOI$S3$TEMP4::.WORD 0 ;SCRATCH SPACE FOR SPWN$ AND RPOI$S7$TONYL::.WORD 0 ;SCRATCH STORAGE FOR SEEK OPTIMIZATION 2$IOTMP::.WORD 0 ;SCRATCH WD FOR ADDR CHECKING AND ;ACP QIO TEMPORARY WORKK5$ATTPT::.WORD 0 ;POINTER TO I.AADA IN CURRENT PACKET2+$CTLST::.WORD $CTB0 ;START OF THE CTB LIST; KERNEL AST DISPATCH TABLEEA; THIS TABLE IS FILLED IN BY INITL AT BOOT TIME. ANY CHANGES MADE;+; HERE MUST BE REFLECTED IN INITL AT DBTBL.O;GF; IF THE SYSTEM DOES NOT SUPPORT KERNEL I/D SPACE, THEN THE REFERENCES; ARE RESOLVED DIRECTLY.; 7$KATBL::.WORD $FINBF ;$FINBF-BUFF I/O FINISH (AK.BUF)T0 .WORD $FINXT ;$FINXT-OFF. TASK EXIT (AK.OCB)0 .WORD $GENBF ;$GENBF-GEN. BUFF. I/O (AK.GBI)0 .WORD $DBTRP ;$DBTRP-FORCE T-BIT TRAP (AK.TBT)0 .WORD $FINDI ;$FINBF-DELAYED I/O FIN (AK.DIO) .IF DF G$$GEF0 .WORD $GGFRN ;$GGFRN-GROUP GBL RUNDWN (AK.GGF) .IFF ; DF G$$GEFA-; .WORD 0 ;IF OTHER KASTS ARE INVENTED, MAKED% ;THIS A PLACEHOLDER IN THE TABLE.P .ENDC ; DF G$$GEF .IF DF M$$PRO.$URMST::.WORD 0 ;UNIBUS RUN MASK STATUS TABLE .IF DF X$$DBT*$XDTFL::.WORD 1 ;XDT INITIALIZATION TABLE)$XDTPR::.WORD 0 ;FLAG FOR PROMPTS00wfwtkTADATADATADATADATADATA OF XDTG .IFF >$XDTFL::.WORD 177777 ;ALWAYS LOOKS INITIALIZED WHEN NOT THERE4$XDTPR:: ;REFERENCE LABEL -- UNUSED IF XDT ALREADY ;INITIALIZED .ENDC OFF=177777 .REPT M$$PROW OFF=OFF+OFF .ENDR,$CPMSK::.WORD OFF ;PROCESSOR BIT CLEAR MASK*$IIMSK::.WORD 0 ;IIST INTERRUPT MASK WORD;$IIPND::.WORD 0 ;PENDING URM WORK WORD. LOCKED WITH $FORKLW9$IICPU::.WORD 0 ;MASK OF URMS THAT HAVE BEEN INTERRUPTED2$IINXT::.WORD $BTMSK ;ROUND ROBIN WORD FOR $IISVC7$STENB::.WORD 0 ;SANITY TIMER ENABLED ON VARIOUS CPU'SW-$STFLG::.WORD 0 ;SECONDARY SANITY TIMER FLAGT5$STALR::.WORD 0 ;SANITY TIMER ALARM ENABLED ON CPU'SA6$PWRMK::.WORD 0 ;MASK OF CPUS IN THEIR POWERFAIL CODE8$CPPAR::.WORD 0 ;POINTER TO PARTITION FOR CPU LOCAL MEMC; NOTE THAT THE NEXT TWO TABLES FOLLOW AN INDEX STRUCTURE LIKE THAT:F; OF $PARTB+2 INS LOWCR, AND THE TWO SHOULD BE UPDATED IN HARMONY WITH; HRC (MODULE HRBOX) .IF DF M$$K11.$MKCS1::.WORD 1 ;CONTENTS FOR CSR 1 OF MK11'S% .WORD 8. ;NUMBER OF MK11'S POSSIBLED4$MKCSR::.BLKW 8. ;CSR ADDRESS TABLE FOR MK11 PARITY*$MKCS2::.BLKW 8. ;CSR CONTENTS FOR MK11'S .ENDC ; DF M$$K11;R; MULTIPROCESSOR LOCKS;I/; BYTE 0 -- LOCK VALUE (0 IF LOCKED, 1 IF FREE) ; BYTE 1 -- IF BYTE 0 EQUALS:/; 0, THEN BYTE 1 EQUALS PROCESSOR ID OF OWNER -; 1, THEN BYTE 1 EQUALS COMPLEMENT OF ID OFA; PREVIOUS OWNERD;D; IF LOCK TYPE IS "WAIT" THEN:;O>; BYTE 2,3 = SECONDARY LOCK WORD (ABOVE FORMAT) FOR WAIT MASK.(; BYTE 4,5 = MASK OF WAITING PROCESSORS.;L+; NOTE: BYTES 4+5 ARE REFERENCED AS A WORD.M; 8$EXECL::LCKDF$ WAIT ;SERIALIZE ACCESS TO EXECUTIVE DATA3$FORKL::LCKDF$ SPIN ;SERIALIZE ACCESS TO FORK LISTY0$IIFNL::LCKDF$ SPIN ;SERIALIZE ACCESS TO $MPTAB0$PWRLK::LCKDF$ SPIN ;SERIALIZE ACCESS TO $PWRMK;R; MULTIPROCESSOR TABLE;,"$TKTAB:: ;CURRENT TASK TCB TABLE .REPT M$$PROI+ .WORD $ACTHD ;INITIALIZE TO NULL TASK TCB: .ENDR .IFTF3$RQTAB::.WORD $ACTHD ;RESCHEDULE POINTER TCB TABLEY .IFTM .REPT M$$PRO-1E+ .WORD $ACTHD ;INITIALIZE TO NULL TASK TCBA .ENDR .IFTF7$PRTAB::.WORD 0 ;PROCESSOR CURRENT TASK PRIORITY TABLEF .IFTD .REPT M$$PRO-1 & .WORD 0 ;INITIALIZE TO PRIORITY ZERO .ENDR"$MPTAB:: ;PROCESSOR STATUS TABLE .REPT M$$PROZ! .WORD MP.STP ;INITIALLY STOPPEDO .ENDR"OFF=0 ;START K6 OFFSETS AT ZERO-$K6TAB:: ;PROCESSOR IMPURE AREA APR OFFSETSA .REPT M$$PROS .WORD OFF#OFF=OFF+40 ;INCREASE OFFSET BY 1K  .ENDR#OFF=1 ;START PROCESSOR URMS AT 1E,$URMTB:: ;PROCESSOR URM CONNECTIVITY TABLE .REPT M$$PRO. .WORD OFF$OFF=OFF+OFF ;POOR MAN'S LEFT SHIFT .ENDR#OFF=1 ;START PROCESSOR URMS AT 1$2$CRMTB:: ;COMPLEMENT OF CPU URM CONNECTIVITY TBL .REPT M$$PRO  .WORD ^C$OFF=OFF+OFF ;POOR MAN'S LEFT SHIFT .ENDR .IFTF;$CRFLG::.WORD 0 ;FLAG INDICATING REGISTERS HAVE BEEN SAVED; .IFT  .REPT M$$PRO-1S .WORD 0 .ENDR6$CRFPR::.WORD 377 ;$PROCN OF FIRST PROCESSOR TO CRASH .IFT=' .WORD 1 ;URM IN FORK BLOCK FOR ERRLOG  .IFTF# .BLKW 2 ;ERROR LOGGING FORK BLOCK.$PBEZ:: ;REFERENCE LABELP .IFT URM=2T .REPT M$$PRO-1  .WORD URM ;URM IN FORK BLOCK URM=URM*2; .BLKW 3 ;3 WORD FORK BLOCK .ENDR .ENDC .IF DF F$$LPP .IF DF M$$PRO .WORD 1 ;URM IN FORK BLOCK .IFTF .BLKW 2 ;2 WORD FORK BLOCK$FLFTB:: ;REFERENCE LABEL; .IFT URM=2T .REPT M$$PRO-1D .WORD URM URM=URM*2W .BLKW 2 .ENDR .ENDC .ENDC;); DEFINITIONS FOR NON MK11 MEMORY SYSTEMSR;R .IF NDF M$$K11$MKCS1::0 .WORD 0 ;# OF MK11 REGISTERS (FOR BOO,SAV,HRC)$MKCSR::$MKCS2:: .ENDC ; DF M$$K11 .IF NDF M$$PROI;K,; DEFINITIONS FOR NON-MULTIPROCESSOR SYSTEMS;$CKURM:: ;REFERENCE LABELS$CPBIT::!$CPCRM:: ;COMPLEMENTED RUN MASK $CPMSK::$CPURM::#$CPUSC:: ;CPU STATUS CHANGE ENTRYF'$CRMTB:: ;COMPLEMENTED RUN MASK TABLE=$EXECL::'$IBXMT:: ;IIST INTERCPU BOOT TRANSMITW$IIMSK::'$IISTM:: ;IIST SUBROUTINE ENTRY POINTN$$IIXMT:: ;IIST TRANSMIT SUBROUTI00wwtblNE$MPTAB::$PROCN::$PROC2::$PFURM::$STENB:: ;SANITY TIMER ENABLER$STFLG::$STALR::$TKTAB::$URMST::$URMTB::$XDTFL::$XDTPR::$XDTIN:: .ENDCF; HERE WE DEFINE A SINGLE "FAKE WORD" WHICH RECEIVES ALL THE ADDRESSESD; FOR THINGS WHICH ARE NOT GENNED INTO THE SYSTEM, BUT WHICH REQUIREB; THAT THE ADDRESSES ALWAYS BE RESOLVED FOR TASKBUILDING MCR, ETC.B; THIS ONE (IN SYSCM) IS TO BE USED FOR D SPACE LOCATIONS, AND THEC; ONE IN LOWCR IS USED FOR I SPACE REFERENCES AND CPU SPECIFIC INFOMA; (ALSO THINGS WHICH MUST BE ACCESSED WHEN D SPACE IS TURNED OFF)L .IF NDF R$$WPTR$WPVAL::$WPADD::$WPLST:: FAKE = 0X .ENDC ; NDF R$$WPTN .IF NDF E$$LOGI$ERHEA::$ENTSQ:: FAKE = 0V .ENDC ; NDF E$$LOG .IF DF FAKE- .WORD -1 ;FAKE DATA LOCATION FOR ALL OF THEE ;ABOVE .ENDC ; DF FAKE .IF DF P$$OOL/$PLPAR::.WORD 0 ;POINTER TO SECONDARY POOL PCBE8$POLHD::.WORD 0 ;LIST HEAD FOR SECONDARY POOL FREE LIST:$SECPB::.WORD 0 ;NUMBER OF TOTAL BLOCKS IN SECONDARY POOL9$SECFR::.WORD 0 ;NUMBER OF FREE BLOCKS IN SECONDARY POOLF .IFFP$PLPAR::$POLHD::$SECPB::$SECFR:: .ENDC .IF DF A$$CNT1$SYLHD::.WORD 0 ;LISTHEAD FOR SYSLOG INPUT QUEUE # .WORD $SYLHD ;END OF LIST POINTERD1$SABPT::.WORD 0 ;POINTER TO SYSTEM ACCOUNT BLOCK  .IF DF X$$ACC0$ACNFE::.WORD BF.TRN!BF.XAC ;EXTENDED ACCOUNTING .IFF ;X$$ACCS2$ACNFE::.WORD BF.TRN ;NORMAL SUPPORTED ACCOUNTING .ENDC ;X$$ACC7$APLIM::.WORD 0 ;FREE SEC POOL SPACE ACNT MUST RESERVEO1$SYUAB::.WORD 0 ;ADDRESS OF UAB FOR SYSTEM TASKSN3$CKUAB::.WORD 0 ;UAB FOR TASK RUN FROM CLOCK QUEUE .IFF$SABPT::$SYLHD::$ACNFE::$APLIM::$SYUAB:: .IFTF/$LOGPT::.WORD 0 ;POINTER TO TCB OF SYSLOG TASKO .ENDC;R; CLI DATABASE AREAE;C($CLICQ::.WORD 0 ;COMMAND QUEUE LISTHEAD .WORD $CLICQB4$CNTLN::.WORD 0 ;CONTINUATION LINE SEGMENT LISTHEAD .WORD $CNTLN -$CPTBL::.WORD $MCRPT ;POINTER TO CPB FOR MCR .IF DF A$$CLI .REPT A$$CLI-1C" .WORD 0 ;TABLE FOR CPB ADDRESSES .ENDR0$NMCLI==A$$CLI ;NUMBER OF CLIS SYSTEM SUPPORTS .IFTF ;A$$CLI;U ; CPB FOR MCR;B:$MCRPT::.WORD 0 ;POINTER TO MCR'S TCB, START OF MCR'S CPB .RAD50 /MCR / ;CLI NAME .WORD CP.LGO ;STATUS WORDC- .BYTE MDPL ;LENGTH OF DEFAULT PROMPT STRINGR/ .BYTE MCPL ;LENGTH OF CONTROL/C PROMPT STRINGT$$$=.R .IF DF R$$MIC* .ASCIZ <15><12>/$ / ;MICRO DEFAULT PROMPT .IFF ; DF R$$MICI* .ASCIZ <15><12>/>/ ;DEFAULT PROMPT STRING .ENDC ; DF R$$MIC MDPL=.-$$$$$$=.E .IF DF R$$MIC( .ASCIZ <15><12>/DCL>/ ;CONTROL/C PROMPT .IFF ; DF R$$MICI/ .ASCIZ <15><12>/MCR>/ ;CONTROL/C PROMPT STRINGE .ENDC ; DF R$$MIC MCPL=.-$$$ .EVEN .IFF ;A$$CLI($NMCLI==0 ;ALTERNATE CLI NOT SUPPORTED .ENDC ;A$$CLI&$CMFIN:: ; END OF SYSCM AREA FOR CDA; A; PARAMETER WORD TO CONTROL TERMINAL DRIVER SYSTEM-WIDE BEHAVIOR:I; F; BIT 0 = 0 FOR REMOTE LINES, DON'T HANGUP IMMEDIATELY ON CARRIER LOSS:; 1 FOR REMOTE LINES, HANGUP IMMEDIATELY ON CARRIER LOSSA; BIT 1 = 0 FOR REMOTE LINES, DON'T ENABLE DTR UNTIL RING IS SEEN 6; 1 FOR REMOTE LINES, ENABLE DTR BEFORE RING IS SEEN;RL; BIT 2 = 0 WHEN TYPEAHEAD BUFFER OPTION FOR SLAVED TERMINALS IS NOT ENABLEDC; 1 WHEN TYPEAHEAD BUFFER OPTION FOR SLAVED TERMINALS IS ENABLED ;E2$TTPRM::.WORD 2 ;DEFAULT TERMINAL DRIVER BEHAVIOR;O1; TERMINAL DRIVER DATA BUFFER - NOT DUMPED BY CDA ;  .IF DF K$$DAS&T$$COM &$DALED::.BLKW 1 ;TERMINAL DRIVER DATA .ENDC ;DF K$$DAS&T$$COM .IF DF T$$ACD:$ACDHD::.WORD 0 ;ANCILLARY CONTROLL DRIVER BLOCK LISTHEAD .ENDC ; DF T$$ACD .ENDNES, ENABLE DTR BEFORE RING IS SEEN;RL; BIT 2 = 0 WHEN TYPEAHEAD BUFFER OPTION FOR SLAVED TERMINALS IS NOT ENABLEDC; 1 WHEN TYPEAHEAD BUFFER OPTION FOR SLAVED TERMINALS IS ENABLED ;E2$TTPRM::.WORD 2 ;DEFAULT TERMINAL DRIVER BEHAVIOR;O1; TERMINAL DRIVER DATA BUFFER - NOT DUMPED BY CDA ;  .IF DF K$$DAS&T$$COM &$DALED::.BLKW 1 ;TERMINAL DRIVER DATA .ENDC ;DF00)wfwtkTADATADATADATADATADATA .TITLE SYSDF .IDENT /10.02/;C; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;; D. N. CUTLER 23-AUG-73;/; PREVIOUSLY MODIFIED FOR RSX-11M-PLUS V2.1 BY:;; D. R. DONCHIN ; T. LEKAS; T. M. MARTIN; B. S. MCCARTHY;$; MODIFIED FOR RSX-11M-PLUS V2.2 BY:;; H. HUANG 10-MAY-83 10.00;2; HH174 -- CLEAN UP ERROR CODES FOR LOGICAL NAME; DIRECTIVES;9; J.R. KAUFFMAN 23-FEB-84 10.01E;C9; JRK298 -- CHANGE CONDITIONALS FOR LOGICAL NAME SUPPORTS;R ; J. C. FRANZINI 22-AUG-84 10.02;DA; JCF173 -- EXPLAIN SYSDEF AND RESOLUTION OF CONDITIONAL OFFSETS; 4; SYSTEM GLOBAL AND CONTROL BLOCK OFFSET DEFINITIONS;-,; GLOBALLY DEFINE THE HIGHEST VECTOR ADDRESS;  .GLOBL R$$MPL,V$$CTR ; D; DEFINE SYSTEM DEPENDENT CONTROL BLOCK OFFSETS AND LENGTHS GLOBALLY;-;1N; The static data structure offsets are defined by invoking the macros without$; the SYSDEF argument. For example:;; .MCALL UCBDF$G; UCBDF$;S0; The static offsets are also defined in EXELIB.;UN; The variable offsets depend on RSXMC conditionals. They are defined here byM; invoking the macros with the SYSDEF argument, and the definitions end up inFI; RSX11M.STB. References in privileged tasks to the variable offsets areE/; resolved when the task is linked to the Exec.H;LO; Tasks should never invoke the data structure macros with the SYSDEF argument,aH; but rather should let the variable offset definitions be resolved from ; RSX11M.STB. ; * .MCALL HWDDF$,PCBDF$,PKTDF$,SCBDF$,TCBDF$ .MCALL UCBDF$,F11DF$s .MCALL ITBDF$ i .MCALL DCBDF$ d .MCALL WDBDF$ .IF DF L$$GCL .MCALL LNBDF$ .ENDC ;DF L$$GCLi5 HWDDF$ ,<=>,SYSDEF ;DEFINE CONDITIONAL MAPPING REGS.a% ;AND FEATURE MASK BITS (VMR LOOKSo& ;FOR F4.CXD TO DISTINGUISH BL9 AND ;BEYOND SYSTEMS.)n7 PCBDF$ <:>,<=>,SYSDEF ;DEFINE PCB OFFSETS AND LENGTH u/ PKTDF$ ,<=>,SYSDEF ;DEFINE I/O PACKET LENGTH e7 ITBDF$ <:>,<=>,SYSDEF ;DEFINE ITB OFFSETS AND LENGTH C* DCBDF$ ,<=>,SYSDEF ;DEFINE DDT OFFSETS ( SCBDF$ <:>,,SYSDEF ;DEFINE SCB OFFSETS, TCBDF$ <:>,<=>,SYSDEF ;DEFINE TCB LENGTH 7 UCBDF$ <:>,<=>,,SYSDEF ;DEFINE CONDITIONAL UCB OFFSETSH5 F11DF$ <:>,<=>,SYSDEF ;DEFINE FILES-11 BLOCK OFFSETS & WDBDF$ ;DEFINE WDB OFFSETS AND BITS .IF DF L$$GCL7 LNBDF$ <:>,<=>,SYSDEF ;DEFINE LNB OFFSETS AND LENGTHS, .ENDC ;DF L$$GCLF1 WS.UDS==WS.UDS ;MAKE USER D SPACE OFFSET GLOBALP e;I9; CAUSE OFFSET DEFINITIONS FROM PREFIX FILES TO BE LISTEDB; S$$YDF=0;I"; SYSTEM GLOBAL SYMBOL DEFINITIONS;;; DIRECTIVE STATUS CODES;:;,8; INSUFFICIENT DYNAMIC CORE AVAILABLE TO SATISFY REQUEST; D.RS1==-1. ;;H,; SPECIFIED TASK NOT INSTALLED IN THE SYSTEM;FD.RS2==-2. ;;N; UNASSIGNED LUN;SD.RS5==-5. ;;L; DRIVER NOT LOADED ;FD.RS6==-6. ;;E; TASK NOT ACTIVEF;$D.RS7==-7. ;; F; TASK NOT SUSPENDED/NO DATA QUEUED/TASK CHECKPOINTING ALREADY ENABLEDK; OR DISABLED/AST RECOGNITION ALREADY ENABLED OR DISABLED/AST ENTRY ALREADYA ; UNSPECIFIEDT;SD.RS8==-8. ;;S!; ISSUING TASK NOT CHECKPOINTABLEN;CD.RS10==-10. ;;Y; RECEIVE BUFFER IS TOO SMALL;H D.RS15==-15. T;S; PRIVILEGE VIOLATIONF;D.RS16==-16. ; ; %; VECTOR ALREADY IN USE (CINT$) V ; D.RS17==-17. ;; NO SWAP SPACE AVAILABLE;A N D.RS18==-18. A ; ; ILLEGAL VECTOR (CINT$) ; D.RS19==-19. ;S; ILLEGAL TABLE NUMBER C;ED.RS20==-20. ;;; LOGICAL NAME NOT FOUND;KD.RS21==-21. ; S;1.; DIRECTIVE ISSUED/NOT ISSUED FROM AST ROUTINE; D.RS80==-80. ; ; 8; CANNOT MAP ISR OR DISABLE-INTERRUPT ROUTINE (CINT$) ; D.RS81==-81. ;S; WINDOW HAS IO00)wwtbl IN PROGRESS; O D.RS83==-83. A;; ALIGNMENT ERROR1;D.RS84==-84. ;; ; ADDRESS WINDOW OVERFLOW ; D.RS85==-85. ;;.; INVALID REGION ID;D.RS86==-86. ;;; INVALID WINDOW ID;;D.RS87==-87. ;;U.; INVALID SEND BUFFER SIZE (GREATER THAN 255.);U N D.RS89==-89. T;U!; SPECIFIED LUN IS LOCKED IN USE. ; D.RS90==-90. ;;I ; INVALID UIC ;T D.RS91==-91. ; '; INVALID DEVICE AND/OR UNIT SPECIFIED. ; D.RS92==-92. ;; ; INVALID TIME PARAMETER;.D.RS93==-93. ;;O ; PARTITION/REGION NOT IN SYSTEM;DD.RS94==-94. ;; ; INVALID PRIORITY;D.RS95==-95. ;; ; INVALID LUN8; D.RS96==-96. ;;W+; INVALID EFN OR REQUIRED EFN NOT SPECIFIED ;DD.RS97==-97. ;;N8; PART OF DPB IS OUTSIDE OF ISSUING TASK'S ADDRESS SPACE;ED.RS98==-98. ;;=; INVALID DIC OR DPB SIZEI;D.RS99==-99. ;;; LOGICAL NAME SUPERSEDED ;TD.RSP3==3. ;;S ; EFN WAS SET;D.RS22==2. ;;R; EFN WAS CLEAR9; D.RS00==0. ;;E9; IF DYNAMIC ALLOCATION IS PRESENT DEFINE D$$YNM GLOBALLY ;OD$$YNM==0 ;ALWAYS PRESENT U;<; IF 11/70 EXTENDED MEMORY IS PRESENT DEFINE M$$EXT GLOBALLY;P .IIF DF M$$EXT , M$$EXT==0 ; N; 1; IF MULTIPROCESSOR SYSTEM DEFINE M$$PRO GLOBALLYA; .IIF DF M$$PRO , M$$PRO==M$$PRO; 8; IF MEMORY MANAGEMENT IS PRESENT DEFINE M$$MGE GLOBALLY;PM$$MGE==0 ;ALWAYS PRESENT S ;@; IF SEND / RECEIVE BY REFERENCE PRESENT, DEFINE P$$SRF GLOBALLY; E .IIF DF P$$SRF , P$$SRF==P$$SRF D;N+; IF DSPACE PRESENT, DEFINE K$$DAS GLOBALLY ;S .IIF DF K$$DAS , K$$DAS==K$$DAS N; '; IF P$$D70 DEFINED, DEFINE IT GLOBALLY; . .IIF DF P$$D70 , P$$D70==P$$D70 .IF DF B$$LIN% $BASLN==1 ;INDICATE BASELINE SYSTEM .IFF ; DF B$$LIN % $BASLN==0 ;INDICATE BASELINE SYSTEME .ENDC ; DF B$$LIN; ?; DEFINE MASK OF FEATURES SELECTED AT SYSGEN TIME FOR INCLUSION; IN RSX11M.STB FILE.R;R SFMSK=0 ; .IF DF S$$EXC' SFMSK=SFMSK!SF.STD ;STANDARD EXECUTIVEF .ENDC .IF DF P$$GEN< SFMSK=SFMSK!SF.PGN ;PREGENERATED SYSTEM (EX. RL02/RC25 KIT) .ENDC; DEFINE GLOBAL SYMBOL$ $SGNMK==SFMSK ;SYSGEN FEATURE MASK  .END0==P$$D70 .IF DF B$$LIN% $BASLN==1 ;INDICATE BASELINE SYSTEM .IFF ; DF B$$LIN % $BASLN==0 ;INDICATE BASELINE SYSTEME .ENDC ; DF B$$LIN; ?; DEFINE MASK OF FEATURES SELECTED AT SYSGEN TIME FOR INCLUS .TITLE SYSIDE .IDENT /01.00/N Y;M; COPYRIGHT (c) 1984, 1985 BY(; DIGITAL EQUIPMENT CORPORATION, MAYNARD'; MASSACHUSETTS. ALL RIGHTS RESERVED. ;EA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USEDA; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE A; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THISIA; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED ORCA; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO ANDN1; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERED.M; A; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTAA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R,; CREATED BY SYSBLD ON 07-APR-89 AT 19:17:08;O; MODIFIED BY:;NA; THIS MODULE CONTAINS THE SYSTEM BASE LEVEL AND VERSION NUMBERS..F; IT MUST RESIDE IN THE FIRST 4K OF I AND D SPACE ON KERNEL D SYSTEMS. .ENABL LC .NLIST BEX  S$SYTYP:: .IF DF P$$3XX .ASCII \ProMicro/RSX\ .IFFO. .IF DF R$$MIC ;SYSTEM NAME USED BY UTILITIES .ASCII \Micro/RSX \ .IFFS .IF DF R$$CPR .ASCII \VAX-CP/RSX \ .IFFS .ASCII /RSX-11M-PLUS/ .ENDC ; DF R$$CPR N .ENDC ; DF R$$MIC .ENDC ; DF P$$3XX ?$SYSID::.ASCII /58 / ;SYSTEM IDENTIFICATION - MUST BE 4 CHARSN -$VERSN::.ASCII /4.2 / ;SYSTEM VERSION NUMBERVF$SYSNM::.WORD S$$NM1,S$$NM2,S$$NM3 ;SYSTEM00wwtkTADATADATADATADATADATA NAME (NODE NAME FOR DECNET) .END SYSTEMS. .ENABL LC .NLIST BEX  S$SYTYP:: .IF DF P$$3XX .ASCII \ProMicro/RSX\ .IFFO. .IF DF R$$MIC ;SYSTEM NAME USED BY UTILITIES .ASCII \Micro/RSX \ .IFFS .IF DF R$$CPR .ASCII \VAX-CP/RSX \ .IFFS .ASCII /RSX-11M-PLUS/ .ENDC ; DF R$$CPR N .ENDC ; DF R$$MIC .ENDC ; DF P$$3XX ?$SYSID::.ASCII /58 / ;SYSTEM IDENTIFICATION - MUST BE 4 CHARSN -$VERSN::.ASCII /4.2 / ;SYSTEM VERSION NUMBERVF$SYSNM::.WORD S$$NM1,S$$NM2,S$$NM3 ;SYSTEM .TITLE SYSXTT .IDENT /15.02/T;9; COPYRIGHT (c) 1989, BY DIGITAL EQUIPMENT CORPORATION.N; ALL RIGHTS RESERVED.;A>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED@; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;C ; D. N. CUTLER 10-AUG-73 ;- ; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:  ;C; B. S. MCCARTHY; J. R. KAUFFMAN; T. LEKASS; J. M. LAWLER; -; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY: ; ; J. W. BERZLE; D. R. DONCHIN; J. R. KAUFFMAN; T. LEKAS ; B. S. MCCARTHY; L. B. MCCULLEY; C. A. SILVER;S-; MODIFIED FOR RSX-11M-PLUS VERSION 4.0 BY:D;L; B. S. MCCARTHY ; K. L. NOEL!;Y-"; MODIFIED FOR RSX-11M-PLUS VERSION 4.2 BY:#;"$; P. K. M. WEISS 28-JUL-88 15.00%;I=&; PKW161 -- DON'T RESCHEDULE IF CONTEXT SWITCHING DISABLEDY'; AND AN AST IS POSTED(;A"); B. S. MCCARTHY 30-NOV-88 15.01*;F9+; BM416 -- DON'T WRITE THE IOSB OUT IN THE BUFFER COPY+,; PASS THRU $FINBF OF A REGION LOAD AST -;A!-; B. S. MCCARTHY 9-FEB-89 15.02C-;Y6-; BM416 -- CHANGE ABOVE TO ALLOW FOR WHATEVER IT IS.-; THAT DECNET IS DOING WITH $FINBF (CALLED(-; DIRECTLY WITH NON-ZERO LINK WORD).3-; (.COR reconstructed by LBM to propogate afterU>-; master packs zeroed for CPR v1 before M-PLUS v4.2 ship.).;G4/; SYSTEM ENTRANCE, EXIT, AND PROCESSOR DISPATCHING0;C1; MACRO LIBRARY CALLS2;3,4 .MCALL ABODF$,HDRDF$,HWDDF$,PCBDF$,TCBDF$5 .MCALL PKTDF$,ITBDF$,BGCK$A67$8 ABODF$ ;DEFINE TASK ABORT CODES'9 HDRDF$ ;DEFINE TASK HEADER OFFSETSN&: HWDDF$ ;DEFINE HARDWARE REGISTERS3; PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETSI.< TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS4= ITBDF$ ;DEFINE INTERRUPT TRANSFER BLOCK OFFSETS)> PKTDF$ ;DEFINE AST OFFSETS AND CODESh?@;+A; **-$DIRSV-DIRECTIVE SAVEB;OJC; THIS ROUTINE IS CALLED FROM DIRECTIVE LEVEL TRAP SERVICE ROUTINES. THEGD; STACK DEPTH IS +1, THUS A SWITCH TO THE SYSTEM STACK IS ALWAYS NEC-FE; ESSARY. AT THE END OF TRAP PROCESSING A RETURN IS EXECUTED TO EXITF; FROM THE SYSTEM.G;A H; INPUTS:EI;!J; 4(SP)=PS WORD PUSHED BY TRAP. !K; 2(SP)=PC WORD PUSHED BY TRAP. -L; 0(SP)=SAVED R5 PUSHED BY 'JSR R5,$DIRSV'. M;R N; OUTPUTS:O;OBP; REGISTER R4 IS PUSHED ONTO THE CURRENT STACK AND THEN A SWITCH=Q; TO THE SYSTEM STACK IS EXECUTED. REGISTERS R3 THRU R0 AREI=R; PUSHED ON THE SYSTEM STACK, THE NEW PROCESSOR PRIORITY IS,.S; SET, AND A CALL TO THE CALLER IS EXECUTED.T;-U*V$DIRSV::MOV R4,-(SP) ;;;SAVE REGISTER R4W;+X; ** W A R N I N G **TY;SZ; SPM HOOKPOINT NUMBER 26.[; +\; DO NOT CHANGE THE INSTRUCTION FOLLOWINGW]; LABEL WITHOUT CHECKING SPM^;-_-`$SPH26==. ;SPM CHANGES THE INSTRUCTION AT!a ;THE LOCATION OF THIS LABELOb)c DEC @#$STKDP ;;;SET PROPER STACK DEPTHEde .IF DF M$$PROf(g BNE 10$ ;;;IF NE DON'T SWITCH STACKShi .ENDC ; DF M$$PROjklm .IF NDF M$$PRO,no10$: ;;; REFERENCE LABELEpq .IFTF ; NDF M$$PRO rs MTPS #0 ;;;ALLOW INTERRUPTSt LOCK$ $EXECL,WAITuv .IFF ; NDF M$$PROw#x10$: MTPS #0 ;;;ALLOW INTERRUPTSNyz .ENDC ; NDF M$$PROA{*| MOV R3,-(SP) ;SAVE REGISTERS R3 THRU R0} MOV R2,-(SP) ;I~ MOV R1,-(SP) ;  MOV R0,-(SP) ;T .IF DF M$$PRO) MOV $TKTCB,R0 ;GET CURRENT TCB ADDRESS 6 ASSUME T2.HLT,200 ;NEXT INSTRUCTION DEPENDS ON THIS$ TSTB T.ST2(R0) ;IS TASK EXITING?.00wwtbl BPL 15$ ;IF PL NO -- ALLOW ENTRY TO SYSTEM- TST $STKDP ;DID WE COME FROM USER STATE ?I* BEQ 20$ ;IF EQ YES - NO ACTION ALLOWED*15$: MOV (SP),R0 ;RESTORE R0 FOR $SWSTK .ENDC .IF DF R$$WPT5 MOV R5,$WPLST ;SAVE ADDRESS OF LAST SYSTEM ROUTINEI .ENDC ; DF R$$WPT, CALL (R5) ;CALL SYNCHRONOUS TRAP ROUTINE20$: JMP $DIRXTU;+ ; **-$IFORK-INDEPENDANT $CFORK;TF; THIS ROUTINE IS SIMILAR TO $CFORK (SEE BELOW) BUT DOES NOT USE THEF; FORK BLOCK IN THE SCB. INSTEAD IT ALLOCATES A FORK BLOCK FROM THEH; POOL, TRANSFERS EXECUTION TO ANOTHER PROCESSOR, AND THEN DEALLOCATES; THE FORK BLOCK. ;O ; INPUTS:S; ; R4=ANYTHING (THIS IS SAVED).; R5=UCB ADDRESS.,"; 0(SP)=CALLER'S RETURN ADDRESS.,; 2(SP)=RETURN ADDRESS OF CALLER'S CALLER.;) ; OUTPUTS:; ; R4=SAVED R4.; R5=UCB ADDRESS.;B; EXECUTION IS ON CORRECT PROCESSOR. DRIVERS WITHOUT KRB'S HAVEF; NO CORRECT PROCESSOR, AND ALWAYS EXECUTE ON THE CURRENT PROCESSOR.;- .IF DF M$$PRO>$IFORK::MOV (SP)+,R3 ;PUT RETURN ADDRESS IN PROPER PLACE FOR ;$EXDOP;+1; **-$EXDOP-EXECUTE DRIVER ROUTINE ON PROCESSORN*; **-$EXROP-EXECUTE ROUTINE ON PROCESSOR;PD; THIS ROUTINE IS USED TO EXECUTE A PARTICULAR ROUTINE (USUALLY INH; A DRIVER) UNDER CONTROL OF A SPECIFIC PROCESSOR (POSSIBLY THIS ONE.)C; THE CODE SEGMENT TO BE EXECUTED MUST BE TERMINATED BY A RETURN.;OB; IF THE ROUTINE CAN BE EXECUTED ON THE CURRENT PROCESSOR, IT IS>; CALLED BY A CALL. SHOULD IT BE NECESSARY TO EXECUTE IT ON@; ANOTHER PROCESSOR, A FORK BLOCK IS ALLOCATED AND LINKED INTO>; THE FORK QUEUE. THEN A RETURN TO THE CALLER IS PERFORMED.@; WHEN THE TARGET PROCESSOR EXECUTES THE "FORKED" ROUTINE, THEB; FORK BLOCK WILL BE DEALLOCATED PRIOR TO CALLING THE ROUTINE TOA; BE EXECUTED. THIS ENTIRE OPERATION IS INDEPENDANT OF WHAT ISE?; ON THE STACK, I.E. CONTROL WILL ALWAYS RETURN TO THE CALLERIA; WHETHER OR NOT THE ROUTINE CAN BE EXECUTED ON THIS PROCESSOR. ; "; THE FORM OF THE FORK BLOCK IS:;&; *-------------------------------*; 0 ! UNIBUS RUN MASK !&; *-------------------------------*; 2 ! FORK LINK !&; *-------------------------------*; 4 ! FORK PC !T&; *-------------------------------*; 6 ! FORK R5 !O&; *-------------------------------*; 10 ! FORK R4 !&; *-------------------------------*; 12 ! DRIVER KISAR5 !O&; *-------------------------------*; 14 ! ROUTINE ADDRESS !P&; *-------------------------------*;O ; INPUTS:;*%; R2=UNIBUS RUN MASK ($EXROP ONLY). ); R3=ADDRESS OF ROUTINE TO BE EXECUTED.- ; R4=ANYTHING (THIS IS SAVED).!; R5=UCB ADDRESS ($EXDOP ONLY).-"; 0(SP)=CALLER'S RETURN ADDRESS.,; 2(SP)=RETURN ADDRESS OF CALLER'S CALLER.; ; OUTPUTS:;-.; THE ROUTINE TO BE EXECUTED IS CALLED WITH:;*; R4=SAVED R4.1; R5=SAVED R5 (UCB ADDRESS IF ENTRY AT $EXDOP).-; 0(SP)=RETURN ADDRESS.-;,; THE CALLING ROUTINE IS RETURNED TO WITH:;-3; C=0 IF THE ROUTINE TO BE EXECUTED HAS EXECUTED.U$; C=1 IF A FORK HAD TO BE CREATED.;O2; NOTE: ONLY R5 IS PRESERVED TO CALLING ROUTINE!;D7; THE CONTENTS OF KERNEL INSTR AND DATA APR 5 AT THES$; TIME OF THE CALL ARE DESTROYED.;O;- .ENABL LSB+$EXDOP::MOV U.SCB(R5),R2 ;GET SCB ADDRESSC. MOV S.KS5(R2),KINAR5 ;MAP DRIVER IN I SPACE .IF DF K$$DAS. MOV S.KS5(R2),KDSAR5 ;MAP DRIVER IN D SPACE .ENDC,$EXRP1::MOV S.URM(R2),R2 ;GET URM FROM SCB  BEQ 10$ ;IF EQ NO URM : $EXROP::BIT R2,@$CPURM ;CAN WE EXECUTE ON THIS PROCESSOR  BEQ 20$ ;IF EQ NO, MUST FORK  ;O$; EXECUTE THE ROUTINE HERE AND NOW;N-10$: MOV R5,-(SP) ;SAVE R5 FROM THE ROUTINER CALL (R3) ;CALL ROUTINE! MOV (SP)+,R5 ;RESTORE SAVED R5($ CLC ;TELL CALLER THAT WE DID IT  RETURN 220$: MOV #7.*2,R1 ;SET BLOCK SIZE FOR FORK BLOCK$ MOV R2,-(SP) ;SAVE R2 FROM 00wwtkTADATADATADATADATADATA$ALOCB, CALL $ALOCB ;WE ASSUME IT SAVES R3,R4,R5  BCC 30$ ;IF CC ALLOCATION OK;I0; ***** THIS IS A RATHER NASTY SITUATION *****;O:; WE CANNOT GET TO THE CORRECT PROCESSOR, SINCE WE CAN'T: ; ALLOCATE A FORK BLOCK. NEITHER CAN WE EXIT THE EXEC TO:!; LET ANYONE ELSE IN WHO MIGHT POTENTIALLY FREE UP POOL,="; SINCE WE HAVE NO IDEA WHAT THE CALLER WAS DOING. IT WOULDE9#; BE NICE IF IN THE FUTURE SOME WAY OUT OF THIS PROBLEMB$; COULD BE DEVISED.K%;M&'' BGCK$A BF.MP,BE.NPL,FATAL ;POOL FULLO(/)30$: MOV (SP)+,(R0) ;INSERT URM IN FORK BLOCKA&* ADD #14.,R0 ;POINT AT END OF BLOCK'+ MOV R3,-(R0) ;INSERT ROUTINE ADDRESS., MOV KINAR5,-(R0) ;PUT MAPPING IN FORK BLOCK- MOV R4,-(R0) ;INSERT R4 . MOV R0,R4 ;SET UP FOR $FORK14/ CALL $FORK1 ;WE ASSUME $FORK ALWAYS RETURNS C=1.01;O22; AT THIS POINT THE CALLER HAS BEEN RETURNED TO.3;IA4; WHEN WE EXECUTE THE CODE BELOW WE ARE ON THE TARGET PROCESSORB 5; AND THE REGISTERS LOOK LIKE:6;B(7; R3=ADDRESS OF PC WORD IN FORK BLOCK.8; R4=SAVED R4.:9; R5=SAVED R5 (POSSIBLY UCB ADDRESS IF ENTRY AT $EXDOP).:;B;-< MOV R3,R0 ;POINT AT PC WORD IN FORK BLOCKM$= SUB #4,R0 ;POINT AT TOP OF BLOCK!> MOV #7.*2,R1 ;SET BLOCK LENGTH,? MOV 14(R0),-(SP) ;SAVE ADDRESS OF ROUTINE7@ CALLR $DEACB ;DEALLOCATE BLOCK (ASSUME R4,R5 SAVED)T0A .DSABL LSB ;AND EXIT TO OUR ROUTINE WHO WILL&B ;EXIT BACK TO THE FORK PROCESSORCD;+E; **-$CFORK-CONDITIONAL FORKF;R>G; THIS ROUTINE WILL TRANSFER THE EXECUTION STREAM TO ANOTHER?H; PROCESSOR BY USING THE FORK LIST. IT SHOULD ONLY BE CALLED AI; AT EXECUTIVE LEVEL, SINCE IT USES REGISTERS OTHER THAN R4 ANDJ; R5.,K;P L; INPUTS:FM;KN; R4=ANYTHING.O; R5=UCB ADDRESS.P;1 Q; OUTPUTS:R;DS; R4=SAVED R4.T; R5=UCB ADDRESS.LU;EBV; EXECUTION IS ON CORRECT PROCESSOR. NOTE: DRIVERS WITHOUT KRBS=W; HAVE NO "CORRECT PROCESSOR" SO $CFORK WILL ALWAYS RETURN.X;-Y+Z$CFORK::MOV U.SCB(R5),R2 ;GET SCB ADDRESSL[,\ TALLY$ B.CFCL,XA$$CF ;COUNT A $CFORK CALL],^ TST S.URM(R2) ;IS THERE A UNIBUS RUN MASK"_ BEQ $INTXT ;IF EQ NO -- RETURN)` BIT S.URM(R2),@$CPURM ;OK ON THIS CPU?#a BNE $INTXT ;IF NE YES -- RETURN bc;N,d; TRANSFER EXECUTION TO CORRECT PROCESSOR.e;fg,h TALLY$ B.CFRK,XA$$CF ;COUNT A $CFORK FORKij MOV R4,-(SP) ;SAVE R4k MOV R2,R4 ;GET SCB ADDRESS.l ADD #S.FRK+6,R4 ;POINT TO END OF FORK BLOCK-m MOV (SP)+,(R4) ;PUT SAVED R4 IN FORK BLOCK,*n BR $FORK1 ;TRANSFER INTO FORK ROUTINESop .ENDC ; DF M$$PROqrs;++t; **-$FORK-FORK AND CREATE SYSTEM PROCESS$u; Mv; THIS ROUTINE IS CALLED FROM AN I/O DRIVER TO CREATE A SYSTEM PROCESS THAT Gw; WILL RETURN TO THE DRIVER AT STACK DEPTH ZERO TO FINISH PROCESSING.Sx; y; INPUTS:z;L7{; R5=ADDRESS OF THE UCB FOR THE UNIT BEING PROCESSED.P#|; 0(SP)=RETURN ADDRESS TO CALLER.D+}; 2(SP)=RETURN ADDRESS TO CALLERS CALLER.K~;K ; OUTPUTS:; B; REGISTERS R5 AND R4 ARE SAVED IN THE CONTROLLER FORK BLOCK ANDB; A SYSTEM PROCESS IS CREATED. THE PROCESS IS LINKED TO THE FORK+; QUEUE AND A JUMP TO $INTXT IS EXECUTED.E;-  .ENABL LSBI($FORK:: MOV R4,-(SP) ;SAVE REGISTER R45 MOV U.SCB(R5),R4 ;POINT TO CONTROLLER STATUS BLOCK " CLRB S.CTM(R4) ;DISABLE TIMEOUT. ADD #S.FRK+6,R4 ;POINT TO END OF FORK BLOCK- MOV (SP)+,(R4) ;PUT SAVED R4 IN FORK BLOCKR;+,; **-$FORK1-FORK AND CREATE SYSTEM PROCESS;UE; THIS ROUTINE IS AN ALTERNATE ENTRY TO CREATE A SYSTEM PROCESS ANDB; SAVE REGISTER R5.P;S ; INPUTS:T;O>; R4=ADDRESS OF THE LAST WORD OF A 3 WORD FORK BLOCK PLUS 2..; R5=REGISTER TO BE SAVED IN THE FORK BLOCK.;- ; OUTPUTS:; A; REGISTER R5 IS SAVED IN THE SPECIFIED FORK BLOCK AND A SYSTEM ?; PROCESS IS CREATED. THE PROCESS IS LINKED TO THE FORK QUEUEO%; AND A JUMP TO $INTXT IS EXECUTED.R'; R5 IS PRESERVED FOR CALLERS CALLER.-;-($FORK1::MOV R5,-(R4) ;SAVE REGISTER R5;+,; **-$FORK0-FORK AND CREATE SYSTEM PROCESS00wwtbl; B; THIS ROUTINE IS AN ALTERNATE ENTRY TO CREATE A SYSTEM PROCESS.;W ; INPUTS:R;K>; R4=ADDRESS OF THE LAST WORD OF A 2 WORD FORK BLOCK PLUS 2.; ; OUTPUTS:;?; A SYSTEM PROCESS IS CREATED, LINKED TO THE FORK QUEUE AND A ; JUMP TO $INTXT IS EXECUTED.C;-&$FORK0::MOV (SP)+,-(R4) ;SET FORK PC, CLR -(R4) ;CLEAR LINK TO NEXT FORK BLOCK;+4; **-$QFORK-INSERT FORK BLOCK AT END OF FORK QUEUE;5<; THIS ROUTINE IS AN ALTERNATE ENTRY TO QUEUE A FORK BLOCK@; AND RETURN TO THE CALLER. IT DOES NOT RETURN TO THE CALLER'S); CALLER AS DO THE OTHER FORK ROUTINES.S;H ; INPUTS:F;W; R4=ADDRESS OF A FORK BLOCK. ;T ; OUTPUTS:;T;; THE FORK BLOCK SUPPLIED IN R4 IS LINKED INTO THE SYSTEMU7; FORK QUEUE, AND A RETURN TO THE CALLER IS EXECUTED.,;-;$QFORK::MFPS -(SP) ;SAVE PRIORITY AROUND QUEUE INSERTION. MTPS #PR7 ;CAN'T INTERRUPT QUEUE INSERTION1 LOCK$ $FORKL,SPIN ;;;SERIALIZE ACCESS TO QUEUET .IF DF R$$FRK" MOV R4,-(SP) ;;;FREE A REGISTER* MOV #$FRKHD,R4 ;;;GET THE FORK LISTHEAD710$: MOV (R4),R4 ;;;GET THE NEXT ELEMENT IN THE LIST$ BEQ 15$ ;;;IF EQ NO MORE - GO ON0 CMP R4,(SP) ;;;THIS ONE IN THE LIST ALREADY?( BNE 10$ ;;;IF NE NO - LOOK SOME MORE, BGCK$A BF.INT,BE.2FR,FATAL ;;;DOUBLE FORK!15$: MOV (SP)+,R4 ;;;RESTORE R4O .ENDC ;R$$FRK1 MOV R4,@$FRKHD+2 ;;;LINK NEW ENTRY TO OLD LAST- MOV R4,$FRKHD+2 ;;;SET ADDRESS OF NEW LASTU .IF DF M$$PRO;V$; ADD ITEM TO FORK LIST WAIT MASK.;D( TST -(R4) ;;;IS IT LEGAL FORK BLOCK? BEQ 40$ ;;;IF EQ YES$ BIT (R4),$URMST ;;;IS URM ONLINE? BNE 40$ ;;;IF NE YES: BGCK$A BF.MP,BE.URM,FATAL ;;;FORK BLOCK FOR OFFLINE URM040$: BIS (R4)+,$IIPND ;;;ADD TO FORK WAIT MASK .ENDC+ TSTB $IDLFL ;;;ARE WE IN IDLE LOOP NOW? BLE 50$ ;;;IF LE NOV;+; ** W A R N I N G **O;S; SPM HOOKPOINT NUMBER 32.;S+; DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;--$SPH32==. ;SPM CHANGES THE INSTRUCTION ATL! ;THE LOCATION OF THIS LABELB .IF DF M$$PRO* COMB @#$IDLFL ;;;SHOW WE HAVE BEEN HERE? MOV #DIRXT2,$STACK-24 ;;;FORCE SYSTEM BACK THRU $IIPND CHECKI .IFF , CLRB @#$IDLFL ;;;NOT IN IDLE LOOP ANYMORE@ MOV #$DIRXT,$STACK-24 ;;;FORCE SYSTEM BACK THRU LOCK AND INTO  ;;;EXECG  .ENDC   50$: ULOCK$ $FORKL,SPIN&  MTPS (SP)+ ;;;RESTORE OLD PRIORITY1 SEC ;RETURN WITH CARRY SET TO CALLERS CALLERH  RETURN ;A  .DSABL LSBC;+6; **-$FORK2-FORK ROUTINE FOR USE IN CONJUNCTION WITH; THE CINT$ DIRECTIVE.;H ; INPUTS:E;E#; R5=ADDRESS OF FORK BLOCK IN ITBY;B ; OUTPUTS:;C;; IF THE FORK BLOCK IS ALREADY IN USE (FORK PC NON-ZERO),Y?; A SYSTEM PROCESS IS CREATED, LINKED TO THE FORK QUEUE AND AL; JUMP TO $INTXT IS EXECUTED.:; ELSE THE INTERRUPT IS DISMISSED (NO RETURN TO CALLER). ;E:!; IMMEDIATELY ON RETURN FROM THIS ROUTINE, THE FOLLOWING#"; INSTRUCTION SHOULD BE EXECUTED: #; $; CLR @R3%;O'&; WHICH DECLARES THE FORK BLOCK FREE.I';-() .IF DF C$$INT*2+$FORK2::TST 2(R5) ;;;FORK BLOCK ALREADY IN USE?, BNE 10$ ;;;Y - JUMPT(- MOV R4,6(R5) ;;;SAVE R4 IN FORK BLOCK. MOV R5,R4 ;;;N3/ ADD #6,R4 ;;;POINT JUST AFTER 3-WORD FORK BLOCKT0 BR $FORK1 ;;;L 110$: TST (SP)+ ;;;CLEAR STACK2 ;;;FALL THRU TO $INTXT34 .ENDC567;+8; **-$INTXT-INTERRUPT EXIT9; C:; THIS ROUTINE MAY BE CALLED VIA A JMP TO EXIT FROM AN INTERRUPT. ;; <; INPUTS:3=;O(>; 0(SP)=INTERRUPT SAVE RETURN ADDRESS.?;- @; OUTPUTS:A;I+B; A RETURN TO INTERRUPT SAVE IS EXECUTED.RC;-DE$INTXT::RETURN ;FG;+CH; **-$INTSI-INTERRUPT SAVE (CALLED FROM INTERRUPT CONTROL BLOCKS),I;;DJ; THIS ROUTINE IS CALLED FROM AN INTERRUPT CONTROL BLOCK. IT PUTSFK; THE WORLD IN ORDER FOR ENTRY TO A DRIVER INTERRUPT ENTRY POINT ANDL; MAPS TO THE DRIV00xwtkTADATADATADATADATADATAER.EM; N; INPUTS:O;S%P; 4(SP)=PS WORD PUSHED BY INTERRUPTT%Q; 2(SP)=PC WORD PUSHED BY INTERRUPT3,R; 0(SP)=SAVED R5 PUSHED BY 'JSR R5,$INTSI'S; 0(R5)=SCRATCH WORD OF ICB*T; 2(R5)=WORD FOR APR5 (TO MAP TO DRIVER)'U; 4(R5)=BYTE FOR PS (DEVICE PRIORITY)9V; 6(R5)=DRIVER INTERRUPT ENTRY POINT (BIASED BY 120000) W;S X; OUTPUTS:Y;R#Z; R4 IS PUSHED ONTO CURRENT STACKN&[; R4 IS SET TO CONTROLLER NUMBER * 2?\; STACK DEPTH IS DECREMENTED AND, IF RESULT IS ZERO, A SWITCH $]; TO THE SYSTEM STACK IS EXECUTED ^; KERNEL APR5 MAPPING IS SAVED,_; CPU PRIORITY IS SET TO PRIORITY FROM ICBC`; DRIVER INTERRUPT ENTRY POINT IS CALLED AS A COROUTINE (SO AFTERD$a; A RETURN, APR5 CAN BE RESTORED)b;-c7d$INTSI::JSR R4,(PC) ;;;SAVE R4 WHILE PRESERVING CC'S=(e MFPS R4 ;;;RETRIEVE CONTROLLER INDEX4f BIC #177760,R4 ;;;CLEAR ALL BUT CONTROLLER NUMBER#g ASL R4 ;;;CONVERT TO WORD INDEXNh;+i; ** W A R N I N G **Ej;Sk; SPM HOOKPOINT NUMBER 27.l;,+m; DO NOT CHANGE THE INSTRUCTION FOLLOWINGTn; LABEL WITHOUT CHECKING SPMo;-p-q$SPH27==. ;SPM CHANGES THE INSTRUCTION ATR!r ;THE LOCATION OF THIS LABELDs!t DEC @#$STKDP ;;;SWITCH STACKS?Ruv7w10$: MOV KINAR5,-(SP) ;;;SAVE KERNEL INSTRUCTION APR5Exyz .IF DF K$$DAS{,| MOV KDSAR5,-(SP) ;;;SAVE KERNEL DATA APR5#} MOV (R5),KDSAR5 ;;;MAP TO DRIVERE~ .ENDC MOV (R5)+,KINAR5 ;;; .IF DF C$$INT( BR $INTS2 ;;;CONTINUE IN COMMON CODE .IFFC> .IIF NE <.-$INTS2>, .ERROR ;$INTS2 NOT THE NEXT INSTRUCTION .ENDC;+=; **-$INTSC-INTERRUPT SAVE (INTERRUPT FROM VECTOR CONNECTED; TO VIA CINT$ DIRECTIVE).;'; CALLS ISR WITH R4 AND R5 SAVED AND:E;I#; R5 POINTER TO FORK BLOCK IN ITB$; PRI TAKEN FROM ITB; ;- .IF DF C$$INT!$INTSC::MOV R4,-(SP) ;;;SAVE R4.;+; ** W A R N I N G **R;; SPM HOOKPOINT NUMBER 28.;B+; DO NOT CHANGE THE INSTRUCTION FOLLOWING.; LABEL WITHOUT CHECKING SPM;--$SPH28==. ;SPM CHANGES THE INSTRUCTION AT! ;THE LOCATION OF THIS LABELR! DEC @#$STKDP ;;;SWITCH STACKS?E710$: MOV KINAR5,-(SP) ;;;SAVE KERNEL INSTRUCTION APR5  .IF DF K$$DAS, MOV KDSAR5,-(SP) ;;;SAVE KERNEL DATA APR5+ MOV X.REL-X.PSW(R5),KDSAR5 ;;;MAP TO ISR .ENDC! MOV X.REL-X.PSW(R5),KINAR5 ;;;R .ENDC*$INTS2: MTPS (R5)+ ;;;LOAD ISR PRIORITY5 BISB (R5)+,R4 ;;;ADD CONSTANT TO CONTROLLER NUMBERH- CACHE$ SAVE ;;;SAVE BYPASS STATE OF CACHES .IF DF R$$RSV! MOV R3,-(SP) ;;;SAVE REGISTERSD MOV R2,-(SP) ;;;  MOV R1,-(SP) ;;;0 MOV R0,-(SP) ;;;; .IFTF"$WPIN0::CALL @(R5)+ ;;;CALL ISR .IF DF R$$WPT( NOP ;;;SPACE TO PLUG WATCHPOINT JSR .ENDC ; R$$WPTT .IFTN7 CMP (SP)+,R0 ;;;MAKE SURE DRIVER DIDN'T DESTROY REGS% BEQ 30$ ;;;IF EQ R0 IS UNMODIFIEDSA20$: BGCK$A BF.INT,BE.ISR,FATAL ;;;DRIVER DESTROYED REGS IN ISR,30$: CMP (SP)+,R1 ;;;HAS R1 BEEN MODIFIED? BNE 20$ ;;;IF NE YES( CMP (SP)+,R2 ;;;HAS R2 BEEN MODIFIED? BNE 20$ ;;;IF NE YES( CMP (SP)+,R3 ;;;HAS R3 BEEN MODIFIED? BNE 20$ ;;;IF NE YES .ENDC2 CACHE$ UNSAVE ;;;RESTORE BYPASS STATE OF CACHE .IF DF K$$DAS/ MOV (SP)+,KDSAR5 ;;;RESTORE KERNEL DATA APR5R .ENDC6 MOV (SP)+,KINAR5 ;;;RESTORE KERNEL INSTRUCTION APR5$ BR $INTX1 ;;;EXIT FROM INTERRUPT .IF DF R$$WPT<$WPIN3::MOV R5,$WPLST ;SAVE ADDRESS OF LAST SYSTEM ROUTINE# CALL (R5) ;CALL THE CALLER BACKS# BR WPIN4 ;FINISH IN COMMON CODE >$WPIN2::MOV (R5),$WPLST ;SAVE ADDRESS OF LAST SYSTEM ROUTINE CALL @(R5)+ ;CALL ISR;WPIN4:: CMP $WPVAL,@$WPADR ;DID WATCHED LOCATION CHANGE ?. BEQ 1$ ;IF EQ NO (ONE OF THESE IS NOP'D BY, BNE 1$ ;IF NE NO THE SET WATCH COMMAND) BPT ;LET XDT KNOW ABOUT ITE41$: RETURN ;RETURN TO PROPER REAL INTS.. ROUTINE .ENDC ; DF R$$WPT00 xwtbl;+; **-$INTSV-INTERRUPT SAVE5; **-$INTSE-INTERRUPT SAVE FOR ERRORLOGGING DEVICES ;AD; THIS ROUTINE IS CALLED FROM AN INTERRUPT SERVICE ROUTINE WHEN ANC; INTERRUPT IS NOT GOING TO BE IMMEDIATELY DISMISSED. A SWITCH TOG; THE SYSTEM STACK IS EXECUTED IF THE CURRENT STACK DEPTH IS +1. WHEN J ; THE INTERRUPT SERVICE ROUTINE FINISHES ITS PROCESSING, IT EITHER FORKS, ; , JUMPS TO $INTXT, OR EXECUTES A RETURN. ;U ; INPUTS:T ;P&; 4(SP)=PS WORD PUSHED BY INTERRUPT.&; 2(SP)=PC WORD PUSHED BY INTERRUPT.-; 0(SP)=SAVED R5 PUSHED BY 'JSR R5,$INTSV'.R!; 0(R5)=NEW PROCESSOR PRIORITY.U;I ; OUTPUTS:;T@; REGISTER R4 IS PUSHED ONTO THE CURRENT STACK AND THE CURRENT;; STACK DEPTH IS DECREMENTED. IF THE RESULT IS ZERO, THENX?; A SWITCH TO THE SYSTEM STACK IS EXECUTED. THE NEW PROCESSOR A; STATUS IS SET AND A CO-ROUTINE CALL TO THE CALLER IS EXECUTEDP>; R4 IS SET WITH THE CONTROLLER INDEX*2, WHICH IS DETERMINED; FROM THE PSW AT ENTRY.;-$INTSE:: ;;;REFERENCE LABELR7$INTSV::JSR R4,(PC) ;;;SAVE R4 WHILE PRESERVING CC'S ( MFPS R4 ;;;RETRIEVE CONTROLLER INDEX/  BIC #177760,R4 ;;;MASK OFF CONTROLLER NUMBERE#! ASL R4 ;;;CONVERT TO WORD INDEXT"2$:T#;+$; ** W A R N I N G ** %;R&; SPM HOOKPOINT NUMBER 29.';M+(; DO NOT CHANGE THE INSTRUCTION FOLLOWINGT); LABEL WITHOUT CHECKING SPM*;-+-,$SPH29==. ;SPM CHANGES THE INSTRUCTION ATR!- ;THE LOCATION OF THIS LABEL.!/ DEC @#$STKDP ;;;SWITCH STACKS?012 .IF DF K$$DAS3*43$: MOV PS,-(SP) ;;;SAVE CURRENT PS WORD/5 BIC #PMODE,PS ;;;SET PREVIOUS MODE TO KERNELR66 MFPI (R5)+ ;;;RETRIEVE CLEAR MASK FOR NEW PRIORITY+7 BIC (SP)+,(SP) ;;;CLEAR FOR NEW PRIORITYT#8 MOV (SP)+,PS ;;;SET NEW PRIORITYR9: .IFFK;'<3$: BIC (R5)+,PS ;;;LOAD NEW PRIORITY => .ENDC?@-A CACHE$ SAVE ;;;SAVE BYPASS STATE OF CACHES,B$WPIN1::CALL (R5) ;;;CALL THE CALLER BACKCD .IF DF R$$WPTE(F NOP ;;;SPACE TO PLUG WATCHPOINT JSRGH .ENDC ; R$$WPT I9J$INTSF::CACHE$ UNSAVE ;;;RESTORE BYPASS STATE OF CACHE#KL;+M; **-$INTXT-INTERRUPT EXITN;MJO; THIS ROUTINE IS ENTERED VIA A RETURN TO EXIT FROM AN INTERRUPT. IF THEBP; STACK DEPTH IS NOT EQUAL TO ZERO, THEN REGISTERS R4 AND R5 ARE@Q; RESTORED AND AN RTI IS EXECUTED. ELSE A CHECK IS MADE TO SEEDR; IF THERE ARE ANY ENTRIES IN THE FORK QUEUE. IF NONE, THEN R4 ANDBS; R5 ARE RESTORED AND AN RTI IS EXECUTED. ELSE REGISTERS R3 THRUGT; R0 ARE SAVED ON THE CURRENT STACK AND A DIRECTIVE EXIT IS EXECUTED.HU;SV; INPUTS: (MAPPED SYSTEM)OW;H'X; 06(SP)=PS WORD PUSHED BY INTERRUPT.T'Y; 04(SP)=PC WORD PUSHED BY INTERRUPT. Z; 02(SP)=SAVED R5.[; 00(SP)=SAVED R4.\;-] ^ .ENABL LSBL+_$INTX1::MTPS #PR7 ;;;LOCK OUT INTERRUPTSE#` TST $STKDP ;;;STACK DEPTH ZERO? a BEQ 2$ ;;;IF EQ YES b JMP 10$ ;;;IF NE NOIc2$: ;;;REFERENCE LABELEdef .IF NDF M$$PROEg)h TST $FRKHD ;;;ANYTHING IN FORK QUEUE?Ui BEQ 10$ ;;;IF EQ NO jk .IFF lm-n CACHE$ BYPASS ;;;SEE IF THERE IS ANY WORKM(o MOV $IIPND,R4 ;;;GET URM NEEDING WORK/p MOV $IICPU,R5 ;;;GET THOSE WITH INTS PENDINGYq CACHE$ RESTOR9r BIC @$CPURM,R5 ;;;DON'T CONSIDER OURSELVES INTERRUPTED 5s BIC R5,R4 ;;;CLEAR THOSE PEOPLE WITH INTS PENDINGT1t BEQ 10$ ;;;IF EQ NO WORK FOR US OR ANYONE NOTEu ;;;ALREADY INTERRUPTEDvw .ENDCxyz;AF{; ENTER THE EXECUTIVE. THERE IS EITHER WORK SPECIFICALLY FOR US, OR/|; WORK FOR SOMEONE NOT CURRENTLY INTERRUPTED.};~"3$: MTPS #0 ;;;ALLOW INTERRUPTS* MOV R3,-(SP) ;SAVE REGISTERS R3 THRU R0 MOV R2,-(SP) ;P MOV R1,-(SP) ;I MOV R0,-(SP) ;4$: LOCK$ $EXECL,WAITC;+; **-$DIRXT-DIRECTIVE EXIT;EF; THIS ROUTINE IS CALLED VIA A JUMP TO EXIT FROM A DIRECTIVE OR TRAPE; SERVICE ROUTINE. IF THERE ARE ANY ENTRIES IN THE FORK QUEUE, THENE; THE FIRST ENTRY IS REMOVED AND THE FORK ROUTINE IS EXECUTED. ELSEKF; A CHECK IS MADE TO SEE IF REDISPATCHING OF THE PROCESSOR IS NE00xwtkTADATADATADATADATADATACES-C; SARY. IF NOT, THEN REGISTERS R0 THRU R5 ARE RESTORED AND AN RTIV@; IS EXECUTED. ELSE THE PROCESSOR IS REDISPATCHED AND THE EXIT; SEQUENCE IS EXECUTED AGAIN.E;I; INPUTS: (MAPPED SYSTEM)I;V/; 16(SP)=PS WORD PUSHED BY INTERRUPT OR TRAP.M/; 14(SP)=PC WORD PUSHED BY INTERRUPT OR TRAP.O; 12(SP)=SAVED R5.; 10(SP)=SAVED R4.; 06(SP)=SAVED R3.; 04(SP)=SAVED R2.; 02(SP)=SAVED R1.; 00(SP)=SAVED R0.;- .IF DF M$$PRO)$DIRXT::CLR R5 ;INITIALIZE TCB POINTERN+DIRXT1: MTPS #PR7 ;;;LOCK OUT INTERRUPTSD .IF DF R$$WPT. CMP $WPVAL,@$WPADR ;;;WATCHPOINT STILL OK ?& ;;;ONE OF THE FOLLOWING BRANCHES' ;;;SHOULD BE NO-OPED TO START THE  ;;;WATCHPOINTS#$WPBR:: BEQ 1$ ;;;IF EQ STILL OK  BNE 1$ ;;;IF NE STILL OK BPT ;;;OOOOOOPPPPPSSS!!! 1$: ;;;REFERENCE LABELS .ENDC ; DF R$$WPT CACHE$ BYPASS+ MOV $IIPND,R3 ;;;ANY WORK IN FORK QUEUE? CACHE$ RESTOR BIT @$CPURM,R3 ;;;ANY WORK? BNE 20$ ;;;IF NE YES .IFF;+$DIRXT::MTPS #PR7 ;;;LOCK OUT INTERRUPTS .IF DF R$$WPT. CMP $WPVAL,@$WPADR ;;;WATCHPOINT STILL OK ?& ;;;ONE OF THE FOLLOWING BRANCHES' ;;;SHOULD BE NO-OPED TO START THEB ;;;WATCHPOINTS#$WPBR:: BEQ 1$ ;;;IF EQ STILL OKK BNE 1$ ;;;IF NE STILL OK BPT ;;;OOOOOOPPPPPSSS!!!S1$: ;;;REFERENCE LABEL .ENDC ; DF R$$WPT* MOV $FRKHD,R3 ;;;ANYTHING IN FORK QUEUE BNE 20$ ;;;IF NE YES .ENDC;2I; EVEN IF CONTEXT SWITCHING IS DISABLED, WE STILL NEED TO SERVICE ASTS.UC; AND WE NEED TO SERVICE KERNAL ASTS EVEN IF THE TASK IS EXITING.T;K1 TSTB $CXDBL ;;;IS CONTEXT SWITCHING DISABLED?; BEQ 5$ ;;;IF EQ NO4 MOV $TKTCB,R5 ;;;PICK UP CURRENT TASK TCB ADDRESS1 MOV T.ASTL(R5),R4 ;;;AST QUEUED FOR THIS TASK?T BNE 53$ ;;;IF NE YES1 TSTB T.ST2(R5) ;;;TASK EXITING (DUE TO ABORT)?W BPL 6$ ;;;IF PL NO'52$: JMP TEXIT ;;;INITIATE TASK EXIT;553$: TSTB T.ST2(R5) ;;;TASK EXITING (DUE TO ABORT)? + BPL 54$ ;;;IF PL NO, GO SERVICE THE ASTC* TSTB A.CBL(R4) ;;;IS THIS A KERNAL AST?. BPL 52$ ;;;IF PL NO, GO INITIATE TASK EXIT#54$: MTPS #0 ;;;ALLOW INTERRUPTSA JMP TAST ;GO DO THE ASTO-5$: MOV @$RQSCH,R5 ;;;SCHEDULING REQUESTED?A BEQ 6$ ;;;IF EQ NO JMP 40$ ;;;IF NE YES-6$: ULOCK$ $EXECL,WAIT ;;;RELEASE EXECUTIVET;T>; CHECK TO SEE IF THERE IS ANY WORK FOR THE EXECUTIVE TO DO.;T?; THIS SECTION OF CODE MAY BE ENTERED FROM A NUMBER OF AREAS:D; 4; 1. FROM THE ENTRANCE TO THE IDLE LOOP AFTER PR7; UNLOCKING THE EXECUTIVE.;R3; 2. AFTER UNLOCKING THE EXECUTIVE IN $DIRXT PR7X*; JUST PRIOR TO RESTORING THE REGISTERS.;T3; 3. FROM ANY NON-PR7 SECTION OF CODE IN THE PR0I+; IDLE LOOP. IN THIS CASE, WE CAN NOT BEP+; JERKED OUT OF THIS CODE SINCE $IDLFL IS;*; NEGATIVE, INFORMING $QFORK NOT TO CRAM); THE STACK WITH THE ADDRESS OF DIRXT2. ;. ; ---------S;I,; THIS SECTION OF CODE HAS THREE OUTCOMES:;;@; 7$: THERE IS NO CURRENT WORK FOR US, BUT WORK IS PENDING FOR@; ANOTHER CPU. INTERRUPT THEM AND CHECK OUR WORK PENDING ONCE; MORE BEFORE EXITING AT 8$.;NA; 8$: THERE IS NO WORK FOR US AND NO WORK PENDING FOR ANY OTHERT<; CPU. WE WILL EXIT BACK TO WHENCE WE CAME; THE IDLE LOOP; OR AN ACTIVE USER TASK.I;IC; 15$: THERE DEFINATELY WORK FOR US, SO WE REENTER THE EXECUTIVE,E<; CLEARING THE IDLE FLAG ($IDLFL) IN CASE WE CAME FROM THE; IDLE LOOP.;E .IF DF M$$PRO  DIRXT2: CACHE$ BYPASSK#  MOV $IIPND,R4 ;;;GET PENDING URM   BEQ 8$ ;;;IF EQ NO WORKA$  BIT @$CPURM,R4 ;;;ANY WORK FOR US BNE 15$ ;;;IF NE YES3 BIC $IICPU,R4 ;;;CLEAR THOSE ALREADY INTERRUPTEDD BEQ 8$ ;;;IF EQ NO NEW WORKW5 MOVB $EXECL+1,R5 ;;;GET PROCESSOR IN EXEC (IF ANY)A" BMI 7$ ;;;IF MI NO ONE IN EXEC) ASL R5 ;;;MAKE CPU ID INTO WORD INDEXR0 BIC $URMTB(R5),R4 ;;;ANY WORK HE CAN'T HANDLE BEQ 8$ ;;;IF EQ NO; ; 00xwtblINTERRUPT OTHER CPU;F7$: CACHE$ RESTOR $ CALL $IISVC ;INTERRUPT OTHER CPU% CACHE$ BYPASS ;;;AVOID STALE DATAW2 BIT @$CPURM,$IIPND ;;;ANY LAST NSEC WORK FOR US& BNE 15$ ;;;IF NE YES -- ENTER EXEC !; ,"; EXIT EXECUTIVE TO USER TASK OR IDLE LOOP#;R$%8$: CACHE$ RESTOR;&& TSTB $IDLFL ;;;ARE WE IN IDLE LOOP' BEQ 9$ ;;;IF EQ NO%( MOVB #1,$IDLFL ;;;SET IN IDLE LOOPR3) MOV #$IDLPT,R1 ;;;RESTORE REGISTER FOR IDLE LOOPA* MTPS #0 ;;;ALLOW INTERRUPTS$+ JMP IDLE ;EXIT BACK TO IDLE LOOP,- .IFTF.2/9$: MOV (SP)+,R0 ;;;RESTORE REGISTERS R0 THRU R30 MOV (SP)+,R1 ;;;S1 MOV (SP)+,R2 ;;;C2 MOV (SP)+,R3 ;;;S3410$:5;+6; ** W A R N I N G **S7;N8; SPM HOOKPOINT NUMBER 30.9;I+:; DO NOT CHANGE THE INSTRUCTION FOLLOWING ;; LABEL WITHOUT CHECKING SPM<;-=->$SPH30==. ;SPM CHANGES THE INSTRUCTION AT1!? ;THE LOCATION OF THIS LABELV@(A INC @#$STKDP ;;;INCREMENT STACK DEPTH.B MOV (SP)+,R4 ;;;RESTORE REGISTERS R4 AND R5C MOV (SP)+,R5 ;;;ODE;+!F; NONSENSE INTERRUPT ENTRY/EXITEG;-HI$NONSI::RTI ;;;MJK .IFT;LMN;P:O; ENTER EXECUTIVE FROM EXIT OF $DIRXT OR FROM IDLE LOOP.P;NFQ; THE ONLY DIFFERENCE BETWEEN THE TWO ENTRY CONDITIONS IS THAT IF WEFR; ARE ENTERING FROM THE IDLE LOOP, THEN WE MUST CLEAR OUT THE $IDLFLKS; SINCE WE ARE NOT GOING TO BE IDLE ANYMORE. OTHERWISE $IDLFL IS ALREADYE T; ZERO.IU;$V,W15$: CACHE$ RESTOR ;;;RESTORE CACHE STATE8X CLRB $IDLFL ;;;SHOW NOT IN IDLE LOOP WHETHER WE WEREY MTPS #0 ;;;OR NOTUZ BR 4$ ;;;ENTER EXECUTIVE[\ .ENDC ; DF M$$PRO]^_;`; EXECUTE FORK ROUTINEa;E<b; FORK ROUTINES ARE ENTERED VIA A CALL WITH THE ARGUMENTS:c;W4d; R3=ADDRESS OF THE BEGINNING OF THE FORK BLOCK+2. e; R4=RESTORED FROM FORK BLOCK. f; R5=RESTORED FROM FORK BLOCK.g;Ehi20$: MTPS #PR7j LOCK$ $FORKL,SPINklm .IF DF M$$PROn(o MOV #$FRKHD,R3 ;;;GET "CURRENT" ENTRY5p22$: MOV R3,R2 ;;;MAKE CURRENT INTO PREVIOUS ENTRYO5q MOV (R2),R3 ;;;GET NEW CURRENT -- AT END OF LIST?;r BNE 24$ ;;;IF NE NO.st; Fu; END OF FORK LIST. IF WE GET TO HERE THEN WE HAVENT FOUND ANYTHING?v; TO DO IN THIS PASS. WE CAN NOW CLEAR OUT OUR URM BITS FROMO!w; THE PENDING URM MASK, $IIPND..x; y+z BIC @$CPURM,$IIPND ;;;CLEAR OUT OUR BITSM+{ BIC @$CPURM,$IICPU ;;;CLEAR OUT OUR BITSL'| BR 30$ ;;;EXIT FROM FORK PROCESSINGO}7~24$: BIT -2(R3),@$CPURM ;;;IS THIS FORK BLOCK FOR US?, BNE 26$ ;;;IF NE YES) TST -2(R3) ;;;CAN ANY CPU PROCESS IT?C* BNE 22$ ;;;IF NE NO -- GO GET NEXT ONE.26$: INC $FRKCT ;;;BUMP FORK DEQUEUED COUNT) MOV (R3),(R2) ;;;LINK NEXT TO PREVIOUS! BNE 30$ ;;;IF NE NOT NEW LAST " MOV R2,$FRKHD+2 ;;;SET NEW LAST .IFF # MOV $FRKHD,R3 ;;;GET FIRST ENTRY$2 MOV (R3),$FRKHD ;;;REMOVE ENTRY FROM FORK QUEUE BNE 30$ ;;;IF NE NOT LAST04 MOV #$FRKHD,$FRKHD+2 ;;;RESET FORK QUEUE LISTHEAD .ENDC30$: ULOCK$ $FORKL,SPIN2  MTPS #0 .IF DF M$$PRO$ TST R3 ;DO WE HAVE A FORK BLOCK?$ BNE 35$ ;IF NE YES -- PROCESS IT+ JMP $DIRXT ;GO BACK TO CYCLE THRU AGAIN335$: ;REFERENCE LABEL .ENDC MTPS #0 ;;;ALLOW INTERRUPTSK# ADD #10,R3 ;POINT PAST SAVED R4 .IF DF K$$DAS MOV (R3),KDSAR5 ;MAP DRIVER .ENDC;+; ** W A R N I N G **T;0; SPM HOOKPOINT NUMBER 72.;F+; DO NOT CHANGE THE INSTRUCTION FOLLOWING0; LABEL WITHOUT CHECKING SPM;--$SPH72==. ;SPM CHANGES THE INSTRUCTION ATA! ;THE LOCATION OF THIS LABELS MOV (R3),@#KINAR5 ;, MOV -(R3),R4 ;RESTORE REGISTERS R4 AND R5 MOV -(R3),R5 ; .IF DF R$$WPT9 MOV -2(R3),$WPLST ;SAVE ADDRESS OF LAST SYSTEM ROUTINER .ENDC ; DF R$$WPT" CALL @-(R3) ;CALL FORK ROUTINE JMP $DIRXT ;TRY EXIT AGAIN;N; RESCHEDULING OR POWERFAILO;U#40$: MTPS #0 ;;;ALLOW INTERRUPTST .IF DF P$$RFL TST $PWRFL ;POWER FAIL00%xwtkTADATADATADATADATADATAURE? BEQ RESCH ;IF EQ NOA0 CALL $POWER ;EXECUTE POWER RECOVERY ROUTINES .IF DF M$$PRO4 MOV @$RQSCH,R5 ;RENEW VALUE OF RESCHEDULE POINTER .IFF)& JMP $DIRXT ;CYCLE BACK THRU $DIRXT .ENDC .ENDC ; DF P$$RFL  .DSABL LSBN;$; RESCHEDULING REQUESTED;O  .ENABL LSB$.RESCH: CLR @$RQSCH ;CLEAR SCHEDULE REQUESTS .IF DF M$$PRO;+; ** W A R N I N G **T;; SPM HOOKPOINT NUMBER 71.;F+; DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;--$SPH71==. ;SPM CHANGES THE INSTRUCTION ATR! ;THE LOCATION OF THIS LABELP* MOV @#$TKTCB,R4 ;FETCH CURRENT TASK TCB  BEQ 4$ ;IF EQ NO CURRENT TCB- BIC #TS.RUN,T.STAT(R4) ;REMOVE RUNNING BIT: BIT #TS.CKR,T.STAT(R4) ;CHECKPOINT REQUESTED THIS TASK? BEQ 4$ ;IF EQ NO, BIC #TS.CKR,T.STAT(R4) ;CLEAR THE REQUEST4 ADD #T.ATT,R4 ;POINT TO ATTACHMENT DESCR LISTHEAD-3$: MOV (R4),R4 ;GET NEXT ATTACHMENT DESCR  BEQ 4$ ;IF EQ THERE IS NONEA1 MOV A.PCB-A.TCBL(R4),R1 ;POINT TO ATTACHED PCBS7 BIT #PS.CKR,P.STAT(R1) ;CHECKPOINT REQUEST THIS PCB?I BEQ 3$ ;IF EQ NO3 BIC #PS.CKR,P.STAT(R1) ;CLEAR CHECKPOINT REQUEST & CALL $ICHKP ;TRY TO CHECKPOINT NOW  BR 3$ ;N;G; IF CPU IS GOING OFFLINE, THEN GO STRAIGHT TO IDLE LOOP. DON'T ENTERF7; SCHEDULING LOOP. DON'T PASS GO. DON'T COLLECT 200$.A;.. 4$: BIT $CPBIT,$URMST ;IS CPU GOING OFFLINE?  BNE 5$ ;IF NE NO(  CLR R5 ;SIMULATE SCHED. LOOP FAILURE"  BR 33$ ;MOVE TOWARD IDLE STATE  .IFF ;M$$PROC;+; ** W A R N I N G **C;O; SPM HOOKPOINT NUMBER 71.;;+; DO NOT CHANGE THE INSTRUCTION FOLLOWINGE; LABEL WITHOUT CHECKING SPM;--$SPH71==. ;SPM CHANGES THE INSTRUCTION ATC! ;THE LOCATION OF THIS LABELH .ENDC=5$: MOV #T2.STP!T2.SPN!T2.WFR,R1 ;SET STP,SPN, AND WFR MASKO# MOV #T2.WFR,R4 ;SET WAITFOR MASKB# MOV #T2.SEF,R0 ;SET STOPFOR MASKB?10$: MOV T.ST2(R5),R3 ;PICK UP CONTENTS OF SECOND STATUS WORD $ MOV T.STAT(R5),R2 ;TASK BLOCKED ?  BNE 25$ ;IF NE YES!"# .IF DF M$$PRO$9% BIT @$CPCRM,T.RRM(R5) ;CAN TASK RUN ON THIS PROCESSOR?T& BNE 30$ ;NO IF NE ?' BIT #T4.SNC,T.ST4(R5) ;TASK USE COMMONS FOR SYNCHRONIZATION?T( BEQ 15$ ;IF EQ NO :) BIT #T2.ABO!T2.HLT,T.ST2(R5) ;TASK EXITTING OR ABORTED?!* BNE 15$ ;IF NE YES IT CAN RUNW0+ MOV T.PCB(R5),R2 ;GET TASK REGION PCB ADDRESS,- .IF DF X$$HDR.5/ MOV P.HDR(R2),-(SP) ;GET VIRTUAL ADDRESS OF HEADERS#0 BNE 12$ ;IF NE, RESIDENT HEADER,/1 MOV P.REL(R2),KISAR6 ;MAP TO EXTERNAL HEADER22 MOV #140000,(SP) ;SET VIRTUAL ADDRESS OF HEADER2312$: MOV (SP)+,R2 ;GET VIRTUAL ADDRESS OF HEADER45 .IFF ; DF X$$HDRR6*7 MOV P.HDR(R2),R2 ;GET ADDRESS OF HEADER89 .IFTF ; DF X$$HDR:5; CALL $CKMAP ;ANOTHER TASK MAPPED TO SAME REGION ?E<= .ENDC ; DF X$$HDR>&? BCS 30$ ;IF CS YES, SKIP THIS TASK;@ MOV T.ST2(R5),R3 ;RESTORE CONTENTS OF SECOND STATUS WORDEA15$: ;REFERENCE SYMBOLBC .ENDCDE!F MOV T.ASTL(R5),R2 ;AST QUEUED?SG BEQ 20$ ;IF EQ NOA6H BIT #T2.AST!T2.DST,R3 ;AST IN PROGRESS OR DISABLED?I BEQ 70$ ;IF EQ NOG(J TSTB A.CBL(R2) ;BUFFERED I/O REQUEST?K BMI 70$ ;IF MI YES8L20$: BIT R1,R3 ;IS TASK STOPPED,SUSPENDED, OR IN WFR?"M BEQ 60$ ;NO, RESTART THIS TASKN BIT R4,R3 ;WAITFOR STATE?%O BEQ 30$ ;IF EQ NO, SKIP THIS TASK P-Q ASSUME T2.HLT,200 ;T2.HLT MUST BE SIGN BITSR2S TSTB T.ST2(R5) ;TASK MARKED FOR EXIT OR ABORT ?T BMI 50$ ;IF MI YES4U BIT T.EFLM(R5),@T.EFLM+2(R5) ;WAITFOR SATISFIED ?V BNE 50$ ;IF NE YES&W BIT R0,R3 ;TASK IN STOPFOR STATE ?X BEQ 30$ ;IF EQ NO 7Y BIT #T2.AST!T2.STP,R3 ;TASK STOPPED OR AT AST STATE?7Z BNE 30$ ;IF NE YES0[ BIT #T2.SEF,R3 ;TASK STOPPED FOR EVENT FLAG ?\ BNE 24$ ;IF NE YES2] TSTB T.TIO(R5) ;TASK HAVE ACTIVE BUFFERED I/O ?&^ BEQ 30$ ;IF EQ NO, GO TO NEXT TASK#_24$: MOV R5,R0 ;COPY TCB ADDRESS ` CALL $STPTK ;STOP THE TASK+a BR 5$ ;B00-xwtblRANCH TO SET UP REGISTERS AGAIN 9b25$: BIC #TS.BLC,R2 ;TASK BLOCKED FOR CHECKPOINT ONLY ??/c BNE 29$ ;IF NE NO, CANNOT REQUEST THIS TASKSd BIT #T2.STP,R3 ;TASK STOPPEDQ#e BEQ 30$ ;IF EQ NO, DON'T UNSTOPS&f BIT R0,R3 ;TASK IN STOPFOR STATE ?,g BEQ 30$ ;IF EQ NO, DON'T TRY TO SCHEDULE4h BIT T.EFLM(R5),@T.EFLM+2(R5) ;STOPFOR SATISFIED ?#i BEQ 30$ ;IF EQ NO, DON'T UNSTOP3j MOV T.ACTL(R5),-(SP) ;REMEMEBER TCB OF NEXT TASK0k MOV R5,R0 ;COPY TCB ADDRESSP.l BIC #T2.STP*2!T2.STP,T.ST2(R0) ;UNSTOP TASK$m CALL $EXRQS ;REQUEST TASK TO RUN)n MOV (SP)+,R5 ;RESTORE NEXT TCB ADDRESSB+o CLR @$RQSCH ;CLEAR POSSIBLE RESCHEDULES0p BR 5$ ;RESET REGISTERS AND CONTINUE ATL SCANDq29$: CMP #TS.CIP,T.STAT(R5) ;ONLY WAITING FOR CHECKPOINT TO OCCUR?0r BNE 30$ ;IF NE NO, CAN'T ATTEMPT TO SCHEDULE)s TSTB T.ST2(R5) ;TASK WAITING TO EXIT ?t BPL 30$ ;IF PL, NOT EXITING'u MOV T.ASTL(R5),R4 ;ANY ASTS QUEUED ?Ov BEQ 70$ ;IF EQ, NO"w MOVB A.CBL(R4),R4 ;KERNEL AST ?.x BMI 70$ ;IF MI, YES DON'T DISTURB AST FLAG'y BR 60$ ;NO, DON'T SERVICE USER ASTS 1z30$: MOV T.ACTL(R5),R5 ;GET ADDRESS OF NEXT TCBP{ BNE 10$ ;IF NE OKAYB|33$: ;REFERENCE LABEL}~5 TALLY$ B.IDCT,XA$$ID,CPU ;COUNT AN IDLE LOOP ENTRYO .IF DF A$$CNT, TSTB $BILNG ;ARE WE BILLING CPU TIME NOW BNE 35$ ;IF NE NOA- CALL $CPUTM ;TERMINATE BILLING HERE SINCEN$ ;WE PROBABLY WILL GO IDLE, AND.35$: ;DEFINITELY WILL DO A CONTEXT SWITCH .ENDC=; GO VISIT THE IDLE LOOP IN ITS NEW HOME AT THE END OF THISO7; MODULE. THIS KEEPS THE BRANCHES ABOVE FROM BREAKINGR" JMP IDOL ;SORRY ABOUT THE NAME ;I COULDN'T RESIST;T&; WAITFOR SATISFIED-CLEAR WAIT STATE;N .IF DF D$$PAR650$: MOV KINAR5,-(SP) ;SAVE KERNEL INSTRUCTION APR 54 MOV $DRAPR,KINAR5 ;MAP TO THE DIRECTIVE PARTITION .IFF 50$: ;REFERENCE SYMBOL .IFTF3 MOV T.PCB(R5),R4 ;GET ADDRESS OF TASK REGION PCB .IF DF X$$HDR5 MOV P.HDR(R4),-(SP) ;GET VIRTUAL ADDRESS OF HEADERE. BNE 55$ ;IF NE NOT AN EXTERNAL TASK HEADER/ MOV P.REL(R4),KISAR6 ;MAP TO EXTERNAL HEADERE2 MOV #140000,(SP) ;SET VIRTUAL ADDRESS OF HEADER255$: MOV (SP)+,R4 ;GET VIRTUAL ADDRESS OF HEADER .IFF ; DF X$$HDRS, MOV P.HDR(R4),R4 ;GET TASK HEADER ADDRESS .IFTF6 MOV T.EFLM+2(R5),R3 ;GET ADDRESS OF EVENT FLAG WORD .ENDC ;DF X$$HDR .IF DF G$$GEF2 CALL $DEAGF ;DEACCESS GROUP GLOBAL EVENT FLAGS .ENDC ; DF G$$GEF .IFTF$ MOV (SP)+,KINAR5 ;RESTORE MAPPING .ENDC% DEC T.ST2(R5) ;CLEAR WAITFOR STATEE' BMI 60$ ;IF MI TASK IS AT AST STATEE4 BIC #T2.SEF!T2.STP,T.ST2(R5) ;CLEAR STOPFOR STATE;R; RESTART OR CONTINUE A TASK;V360$: CLR R4 ;SET FLAG TO SIGNIFY RESTART OF TASK870$: MOVB T.PRI(R5),@$CURPR ;SET CURRENT TASK PRIORITY .IF DF M$$PRO2 BIS #TS.RUN,T.STAT(R5) ;SHOW TASK ACTIVE ON CPU .IFTF4STCTX: ;REFERENCE LABEL FOR ENTRY FROM THE IDLE  ;LOOPK472$: MOV #H.DSW,R0 ;POINT TO DIRECTIVE STATUS WORD4 MOV $SAHPT,R3 ;GET ADDRESS OF CURRENT TASK HEADER" BEQ 80$ ;IF EQ NO CURRENT TASK .IF DF X$$HDR# MOV $SAHDB,KISAR6 ;MAP TO HEADERC .ENDC ; DF X$$HDR+ CMP R5,$TKTCB ;NEW TASK SAME AS CURRENT?S BNE 73$ ;IF NE NO5 .IFTT! MOV $TKTCB,R2 ;GET TCB ADDRESSD) BIT #T2.HLT,T.ST2(R2) ;IS TASK HALTED?O2 BNE 73$ ;IF NE YES -- SAVE AND RESTORE CONTEXT .ENDC) JMP 130$ ;NO CONTEXT SWITCH NECESSARYV;0 ; SAVE CONTEXT OF CURRENT TASK;V73$:;+; ** W A R N I N G **D;; SPM HOOKPOINT NUMBER 04.;+; DO NOT CHANGE THE INSTRUCTION FOLLOWING;; LABEL WITHOUT CHECKING SPM;--$SPH04==. ;SPM CHANGES THE INSTRUCTION ATS! ;THE LOCATION OF THIS LABELF0 MOV H.GARD(R3),R2 ;POINT TO HEADER GUARD WORD  MOV SP,R1 ;POINT TO SAVED R0  MOV (R1)+,-005xwtkTADATADATADATADATADATA(R2) ;SAVE R0D  MOV (R1)+,-(R2) ;SAVE R1C  MOV (R1)+,-(R2) ;SAVE R2N  MOV (R1)+,-(R2) ;SAVE R3  MOV (R1)+,-(R2) ;SAVE R4N MOV (R1)+,-(R2) ;SAVE R5+ MOV (R1)+,-(R2) ;SAVE PC MOV (R1),-(R2) ;SAVE PS# MFPI SP ;GET USER STACK POINTERT4 MOV (SP)+,(R3) ;SAVE USER STACK POINTER IN HEADER575$: MOV (R0),H.DSW(R3) ;SAVE DIRECTIVE STATUS WORD .IF DF F$$LPP7 MOV H.FPSA(R3),R2 ;POINT TO FLOATING POINT SAVE AREAD3 BEQ 77$ ;IF EQ TASK DOES NOT USE FLOATING POINT-& TST $HFMSK ;PROCESSOR HAVE A FPP ?' BMI 77$ ;IF MI NO, SKIP CTX STORAGEV1 MOV $TKTCB,R3 ;GET TCB ADDRESS OF CURRENT TASKN6 MOV T.PCB(R3),R1 ;GET ADDRESS OF TASK PARTITION PCB .IF DF X$$HDR -! TST P.HDR(R1) ;TASK HAVE EXTERNAL HEADER ?)" BEQ 76$ ;IF EQ YES, NO NEED TO RE-MAP #$ .ENDC ; DF X$$HDR%.& MOV P.REL(R1),KISAR6 ;MAP TO TASK PARTITION'() .IF DF P$$LAS*4+ ADD T.OFF(R3),KISAR6 ;ADD IN OFFSET TO TASK IMAGE,- .ENDC./76$: ;REF LABEL0+1 STFPS (R2)+ ;SAVE FLOATING POINT STATUSI#2 SETD ;SET FLOATING DOUBLE MODE.3 STD R0,(R2)+ ;SAVE FLOATING POINT REGISTERS4 LDD R4,R0 ;)5 STD R0,(R2)+ ; 6 LDD R5,R0 ;B7 STD R0,(R2)+ ;H8 STD R1,(R2)+ ;R9 STD R2,(R2)+ ;E: STD R3,(R2)+ ;B;< .ENDC=> ?77$: ;A@AB .IF DF A$$CNTC,D TSTB $BILNG ;ARE WE BILLING CPU TIME NOWE BNE 80$ ;IF NE NO 1F CALL $CPUTM ;ADD TIME USED TO USER ACCOUNTINGT5G MOV #H.DSW,R0 ;RESTORE DIRECTIVE STATUS WORD TO R0HI .ENDCJKL;AM; LOAD CONTEXT OF NEW TASKN;FO,P80$: MOV R5,$TKTCB ;SET ADDRESS OF NEW TCBQRS .IF DF M$$PROTUV .IF DF X$$HDRW3X CLR $SAHPT ;CLEAR HEADER PTR IN CASE $TKTCB = 0)YZ .IFFR[\ CLR $HEADR ;CLEAR HEADER]^ .ENDC_/` MOV R5,@$TKPTR ;SET NEW TCB ADDRESS IN TABLET&a BNE 81$ ;IF NE CURRENT TASK EXISTS!b JMP IDLE1 ;RE-ENTER IDLE LOOPC;c81$: BIT #T2.ABO!T2.HLT,T.ST2(R5) ;TASK MARKED FOR ABORT?Ed BNE 82$ ;IF NE YES6e MOVB $PROCN,T.CPU(R5) ;SAVE PROCESSOR NUMBER IN TCBf82$: ;REF SYMBOLgh .ENDCij3k TALLY$ B.CTXP,XA$$CX,CPU ;COUNT A CONTEXT SWITCHlmn .IF DF A$$CNTo!p MOV KISAR6,-(SP) ;SAVE MAPPINGE-q MOV T.ACN(R5),KISAR6 ;MAP ACCOUNTING BLOCK;"r BEQ 825$ ;IF EQ, NO ACCOUNTING-s CMPB #BT.TAB,@#B.TYP+140000 ;IS THIS A TABt BNE 825$ ;IF NE NO%u ADD #1,@#B.CTXT+2+140000 ;COUNT ITDv ADC @#B.CTXT+140000 ;!w825$: MOV (SP)+,KISAR6 ;RESTORERxy .ENDC ;A$$CNTz{| .IF DF D$$MND}+~ TST $DITCB ;IS DIAMOND WATCHING A TASK?  BEQ 83$ ;IF EQ NO.3 BIC #1,@$DICSR ;ASSUME NOT WATCHING CURRENT TASKN7 CMP $TKTCB,$DITCB ;IS DIAMOND WATCHING CURRENT TASK?, BNE 83$ ;IF NE NO' BIS #1,@$DICSR ;SET DIAMOND REGISTERC83$: ;REFERENCE SYMBOLC .ENDC .IF DF S$$LIB. MOV #PMODE,PS ;INSURE PREVIOUS MODE IS USER .ENDC6 MOV T.PCB(R5),R3 ;GET ADDRESS OF TASK PARTITION PCB/ MOV P.HDR(R3),R2 ;GET ADDRESS OF TASK HEADERF .IF DF X$$HDR% BNE 84$ ;IF NE HEADER IS RESIDENTB7 MOV #$SAVSP,$HEADR ;POINT TO STACK POINTER SAVE AREAG8 MOV #140000,R2 ;POINT TO START OF NON-RESIDENT HEADER3 MOV P.REL(R3),KISAR6 ;MAP TO NON-RESIDENT HEADERI: MOV P.REL(R3),$SAHDB ;REMEMBER TASK HEADER MAPPING BIAS! BR 841$ ;AND JOIN COMMON CODEB984$: MOV R2,$HEADR ;POINT TO HEADER SAVED STACK POINTER .ENDC ; DF X$$HDR2841$: MOV R2,$SAHPT ;SAVE ADDRESS OF TASK HEADER .IF DF F$$MAP&X$$HDR&P$$LAS7 MOV H.FMAP(R2),$FMAPP ;LOAD FAST MAP CONTEXT POINTERS" .ENDC ; DF F$$MAP&X$$HDR&P$$LAS% MOV R4,-(SP) ;SAVE EFFECT AST FLAG 5 MOV H.WND(R2),R4 ;POINT TO NUMBER OF WINDOW BLOCKS)0 TST W.BLVR+2(R4) ;IS TASK MAPPED TO THE EXEC? BEQ 85$ ;IF EQ NOA* MOV R2,R1 ;COPY ADDRESS OF TASK HEADER- ADD R0,R1 ;POINT TO DIRECTIVE STATUS WORDH1 MOV (R1)+,(R0)+ ;RESTORE DIRECTIVE STATUS WORDR6 MOV (R1)+,(R0)+ ;RESTORE POINTER TO FCS IMPURE AREA: MOV (R1)+,(R0)+ ;RESTORE POINTER TO00=xwtbl FORTRAN IMPURE AREA: MOV (R1)+,(R0)+ ;RESTORE POINTER TO OVERLAY IMPURE AREA8 MOV (R1)+,(R0)+ ;RESTORE PTR TO VECTOR OF IMPURE PTRS3 MOV #UINDR0,R0 ;POINT TO USER I DESCRIPTOR REG 0B .IF DF K$$DAS!M$$PROA> MOV #<<<<$UTEND+77>*4>-400>&77400>!6,(R0)+ ;MIN SIZE NEEDED .IFTF .IF DF M$$PRO8 MOV #177406,(R0) ;SETUP PRIV TASK PDR FOR 4K BYPASSED .IFFS> MOV #77406,(R0) ;SETUP PRIVILEGED TASK DESCRIPTOR REGISTERS .ENDC .IFF  MOV (R0)+,(R0) ; .ENDC MOV (R0)+,(R0) ;Y MOV (R0)+,(R0) ;( MOV (R0)+,(R0) ;T5 MOV (R0),UINDR0+14. ;ALLOW FULL ACCESS TO I/O PAGE 0 MOV #UINAR0,R1 ;POINT TO USER I ADDRESS REG 05 MOV #KISAR0,R0 ;POINT TO KERNAL ADDRESS REGISTER 0R; MOV (R0)+,(R1)+ ;SETUP PRIVILEGED TASK ADDRESS REGISTERS MOV (R0)+,(R1)+ ; MOV (R0)+,(R1)+ ; MOV (R0)+,(R1)+ ; MOV (R0),(R1) ;9 MOV #177600,UINAR0+14. ;SET ADDRESS REG 7 FOR I/O PAGE  BR 90$ ;785$: MOV #UINDR0,R0 ;POINT TO USER I DESCRIPTOR REG 0186$: CLR (R0)+ ;CLEAR ALL DESCRIPTOR REGISTERS CLR (R0)+ ;T CLR (R0)+ ;D CLR (R0)+ ;L CLR (R0)+ ;G CLR (R0)+ ;0 CLR (R0)+ ;R CLR (R0) ;90$: ;REFERENCE LABEL .IF DF S$$LIB3 BIC #10,SR3 ;ASSUME NEXT TASK DOESN'T USE SUPERI% ;MODE (DISABLE CSM INSTRUCTION)0+ TSTB $SIRWF ;SUPERVISOR MODE R/W PDR'S?, BEQ 95$ ;IF EQ NOU CLRB $SIRWF ;CLEAR FLAGF3 MOV #SISDR0,R0 ;POINT TO FIRST SUPER I SPACE PDRI% BR 86$ ;CLEAR SUPER I SPACE PDR'SC695$: MOVB #-1,$SUPFL ;INDICATE NO SUPERVISOR WINDOWS .ENDC0 MOV (R4)+,-(SP) ;PUSH NUMBER OF WINDOW BLOCKS7100$: ADD #W.BLGH,R4 ;POINT PAST CURRENT WINDOW BLOCKN/ MOV -W.BLGH(R4),R3 ;PICK UP NEXT PCB ADDRESS0( BEQ 115$ ;IF EQ WINDOW IS NOT MAPPED. CMP -(R4),-(R4) ;POINT TO FIRST PDR ADDRESS6 MOV P.REL(R3),R0 ;PICK UP PARTITION RELOCATION BIAS .IF DF P$$LAS& ADD -2(R4),R0 ;ADD IN WINDOW OFFSET .ENDC$ MOVB (R4)+,R1 ;POINT TO FIRST PDR .IF DF S$$LIB$  BMI 105$ ;IF MI USER MODE WINDOW/  INCB $SUPFL ;COUNT A SUPERVISOR MODE WINDOWN(  BNE 102$ ;IF NE THIS ISN'T THE FIRST9  MOV $DRAP3,SISAR0 ;FORCE MAPPING TO DISPATCHER IN EXECN.  ;IN CASE TASK HAS NO SUPER MODE 0 WINDOW' MOV #402,SISDR0 ;MAP 1 32WD BLOCK ROF<102$: ADD #SISDR0,R1 ;POINT TO FIRST SUPER INSTRUCTION PDR9 BIT #4,W.BLPD-W.BNPD(R4) ;R/W ACCESS TO SUPER I SPACE?; BEQ 105$ ;IF EQ NO8 INCB $SIRWF ;SET FLAG FOR SUPER I SPACE WRITE ACCESS .ENDC6105$: MOVB (R4)+,R3 ;PICK UP NUMBER OF PDR'S TO LOAD8110$: MOVB (R4),(R1)+ ;SET USER DESCRIPTOR ACCESS CODE$ MOVB #177,(R1)+ ;SET BLOCK LENGTH .IF DF M$$PRO!C$$CBPE# BIT #WB.BPS,(R4) ;ALWAYS BYPASS?P BEQ 111$ ;NO IF EQ2  BISB #200,-1(R1) ;SET UP TO ALWAYS BYPASS CACHE ! BR 112$ ;OC"111$: BIT #WB.NBP,(R4) ;CACHE BYPASS NOT DESIRED FOR THIS WINDOW? ,# BNE 112$ ;YES IF NE, DO NOT BYPASS CACHE:$ BISB 1(R4),-1(R1) ;SET BYPASS BIT IN PDR AS APPROPRIATE%& .ENDC ; DF M$$PRO!C$$CBP4'(>)112$: MOV R0,UISAR0-UISDR0-2(R1) ;LOAD USER ADDRESS REGISTER,* ADD #200,R0 ;ADVANCE TO NEXT 4K BOUNDARY+ DEC R3 ;ANY MORE TO LOAD?F, BGT 110$ ;IF GT NO6- MOV (R4)+,-(R1) ;LOAD LAST USER DESCRIPTOR REGISTER./0 .IF DF M$$PRO!C$$CBP 1%2 BIT #WB.BPS,-2(R4) ;ALWAYS BYPASS?13 BEQ 113$ ;IF EQ NO24 BIS #100000,(R1) ;SET UP TO ALWAYS BYPASS CACHE 5 BR 115$ ;DE6113$: BIT #WB.NBP,-2(R4) ;CACHE BYPASS NOT DESIRED FOR THIS WINDOW?O37 BEQ 115$ ;NO IF EQ, BYPASS CACHE AS APPROPRIATE1(8 BIC #100000,(R1) ;DO NOT BYPASS CACHE9: .ENDC ; DF M$$PRO!C$$CBP ;<*=115$: DEC (SP) ;ANY MORE WINDOW BLOCKS?> BGT 100$ ;IF GT YESF?@ .IF DF S$$LIBA/B INCB $SUPFL ;ADJUST SUPER MODE WINDOW COUNT.CD .ENDC ; DF S$$LIBE)F MOV (R2),(SP) ;LOAD USER STACK POINTER1 G MTPI SP ;4H MOV #$UMR4,(R2) ;POINT SAVED SP VALUE AT SAVED R4I@J; IF A USER D SYSTEM, 00ExwtkTADATADATADATADATADATAUPDATE THE USER D PAR'S/PDR'S TO OVERMAP#K; USER I SPACE WHERE APPROPRIATE.QLM .IF DF U$$DASN3O MOV R2,-(SP) ;SAVE TASK HEADER ADDRESS FOR LATER,P MOV #UINAR7+2,R0 ;POINT PAST USER I PAR 7,Q MOV #UINDR7+2,R1 ;POINT PAST USER I PDR 7,R MOV #UDSAR7+2,R3 ;POINT PAST USER D PAR 7,S MOV #UDSDR7+2,R4 ;POINT PAST USER D PDR 74T MOVB H.DMAP(R2),R2 ;GET USER D SPACE MAPPING MASK$U BNE 118$ ;IF NE MAPPING IS MIXEDV;W; NONE OF USER D HAS DISCRETE MAPPING. COPY ALL REGISTERSEX; FROM USER IEYZ MOV -(R0),-(R3) ;PAR 7M[ MOV -(R1),-(R4) ;PDR 7A\ MOV -(R0),-(R3) ;6F] MOV -(R1),-(R4) ;^ MOV -(R0),-(R3) ;5A_ MOV -(R1),-(R4) ;` MOV -(R0),-(R3) ;4Pa MOV -(R1),-(R4) ;b MOV -(R0),-(R3) ;3Pc MOV -(R1),-(R4) ;d MOV -(R0),-(R3) ;2Pe MOV -(R1),-(R4) ;f MOV -(R0),-(R3) ;1Pg MOV -(R1),-(R4) ;h MOV -(R0),-(R3) ;0 i MOV -(R1),-(R4) ;#j BR 119$ ;SKIP MIXED UPDATE CODE k@l; USER D SPACE MAPPING IS A MIXTURE (OR ALL D SPACE). TEST FOR,m; LATTER CASE, THEN UPDATE AS APPROPRIATE.n+o118$: COMB R2 ;REVERSE SENSE OF BIT MASK)-p ;(1 NOW MEANS APR IS MAPPED TO I SPACE)-0q BEQ 119$ ;IF EQ, ALL APRS MAPPED BY DISCRETE)r ;D SPACE WINDOWS, NO UPDATE NEEDED.R/s BMI 1182$ ;IF MI, APR 7 IS MAPPED TO USER I;t3u; THIS SECTION HANDLES APRS WITH DISCRETE MAPPING-v/w1181$: CMP -(R0),-(R3) ;ADVANCE PAR ADDRESSESR)x CMP -(R1),-(R4) ;ADVANCE PDR ADDRESSESy ASLB R2 ;TEST FOR NEXT APR0z BEQ 119$ ;IF EQ END OF LOOP OR ALL REMAINING!{ ;APRS HAVE DISCRETE MAPPING3| BPL 1181$ ;IF PL NEXT APR HAS DISCRETE MAPPING, &} ;BUT AT LEAST ONE MORE DOES NOT.~4; THIS SECTION HANDLES APRS MAPPED TO USER I SPACE71182$: MOV -(R0),-(R3) ;COPY USER I PAR TO USER D PARP1 MOV -(R1),-(R4) ;COPY USER I PDR TO USER D PDRL ASLB R2 ;TEST FOR NEXT APR) BMI 1182$ ;NEXT APR MAPS USER I SPACED1 BNE 1181$ ;IF NE, NEXT APR IS NOT OVERMAPPED, ;BUT AT LEAST ONE MORE IS1119$: MOV (SP)+,R2 ;RESTORE TASK HEADER ADDRESS  .ENDC ; DF U$$DAS- MOV (SP)+,R4 ;RESTORE EFFECT AST INDICATORI .IF DF F$$LPP7 MOV H.FPSA(R2),R0 ;POINT TO FLOATING POINT SAVE AREAT4 BEQ 120$ ;IF EQ TASK DOES NOT USE FLOATING POINT3 TST $HFMSK ;PROCESSOR HAVE A FLOATING PT UNIT ? - BMI 120$ ;IF MI NO, DON'T TRY TO LOAD CTXT4 MOV T.PCB(R5),R1 ;GET ADDRESS OF TCB OF NEXT TASK. MOV P.REL(R1),KISAR6 ;MAP TO TASK PARTITION .IF DF X$$HDR- TST P.HDR(R1) ;TASK HAVE EXTERNAL HEADER ?H BEQ 121$ ;IF EQ, YES .IFTF ;DF X$$HDRV .IF DF P$$LAS4 ADD T.OFF(R5),KISAR6 ;ADD IN OFFSET TO TASK IMAGE .ENDC .IFT ;DF X$$HDR121$: ;REFERENCE LABEL  .ENDC ;DF X$$HDRT6 TST (R0)+ ;POINT TO SAVED FLOATING POINT REGISTERS2 LDFPS #200 ;SET FLOATING DOUBLE MODE, NO TRAPS1 LDD (R0)+,R0 ;RESTORE FLOATING POINT REGISTERSR LDD (R0)+,R1 ;I STD R1,R4 ;D LDD (R0)+,R1 ;T STD R1,R5 ;H LDD (R0)+,R1 ;  LDD (R0)+,R2 ;F LDD (R0)+,R3 ;F3 LDFPS @H.FPSA(R2) ;RESTORE FLOATING POINT STATUSA .ENDC120$:S;+; ** W A R N I N G **;; SPM HOOKPOINT NUMBER 05.; +; DO NOT CHANGE THE INSTRUCTION FOLLOWING; LABEL WITHOUT CHECKING SPM;--$SPH05==. ;SPM CHANGES THE INSTRUCTION ATL! ;THE LOCATION OF THIS LABELD0 MOV H.GARD(R2),R0 ;POINT TO HEADER GUARD WORD' MOV SP,R1 ;POINT TO CURRENT CONTEXT  MOV -(R0),(R1)+ ;RESTORE R0 MOV -(R0),(R1)+ ;RESTORE R1 MOV -(R0),(R1)+ ;RESTORE R2 MOV -(R0),(R1)+ ;RESTORE R3 MOV -(R0),(R1)+ ;RESTORE R4 MOV -(R0),(R1)+ ;RESTORE R5 MOV -(R0),(R1)+ ;RESTORE PC MOV -(R0),(R1) ;RESTORE PSA130$:N .IF DF A$$CNT4 TST T.ACN(R5) ;DOES TASK HAVE AN ACCOUNTING BLOCK BEQ 132$ ;IF EQ NO, TSTB $BILNG ;IS BILLING CURRENTLY ACTIVE BEQ 132$ ;IF EQ YES 4 MOV $ACCLK+2,$STRTM+2 ;SAVE CURRENT ABSOLUTE TIME MOV $ACCLK,$STRTM ;* CLRB $BILNG ;INDICATE START OF B00MxwtblILLING .ENDC4; A FEW DESCRIPTIVE WORDS ABOUT AST CONTROL BLOCKS;-B; AST CONTROL BLOCKS FALL INTO SEVERAL DISTINCT CATEGORIES BASED1; UPON THE VALUES IN A.CBL AND A.BYT. THESE ARE;$; A.CBL A.BYT DESCRIPTION; ----- ----- -----------;E7; <0 X KERNEL AST. BIT 6 OF A.CBL IS SET IF $SGFINL1; SHOULD NOT BE CALLED PRIOR TO EXECUTING THEE0; KERNEL AST CODE. BITS 0 THROUGH 5 OF A.CBL.; REPRESENT AN INDEX (DIVIDED BY 2) INTO A3; TABLE OF AST ADDRESSES ($KATBL). DEALLOCATION6; IS THE RESPONSIBILITY OF THE PROCESSING ROUTINE.5; THESE ARE EXEC LEVEL FUNCTIONS SUCH AS BUFFEREDA3; I/O COMPLETION WHICH MUST TAKE PLACE WHEN THET; TASK CONTEXT IS LOADED..;D<; 0 0 AST DEQUEUED BY A SYSTEM SUBROUTINE. THE ROUTINE4; IS MAPPED BY THE CONTENTS OF A.KSR5 AND CALLED4; VIA THE ADDRESS IN A.DQSR. DEALLOCATION IS THE/; RESPONSIBILITY OF THE DEQUEUE ROUTINE. ANS4; EXAMPLE IS THE PROCESSING OF UNSOLICITED INPUT$; ASTS BY THE FULL DUPLEX TTDRV.;S:; 0 N THIS IS A SPECIFIED AST BLOCK OF LENGTH C.LGTH7; (A.PLGH FOR PARITY ERROR ASTS) N IS THE SPECIFIEDP1; AST TYPE. THESE BLOCKS ARE RE-LINKED IN THEC8; T.SAST LIST AFTER THE AST IS DECLARED (EXCEPT FOR)5; PARITY ERROR ASTS, WHICH ARE ALWAYS DEALLOCATEDN3; AFTER USE, AND REQUESTED EXIT ASTS, WHICH AREA5; DEALLOCATED AFTER USE BY A NON-PRIVILEGED TASK. ;U<; >0 0 THIS IS A DYNAMIC AST (I/O COMPLETION, MARK TIME5 ; OF LENGTH A.CBL. AFTER THE PARAMETERS ARE MOVED 6 ; TO THE TASK STACK AND THE AST EFFECTED THE BLOCK ; IS DEALLOCATED.Y ;R 132$: TST R4 ;EFFECT AST? BNE TAST ;IF NE YESE JMP 190$ ;NO5TAST: MOV R5,R0 ;CALCULATE ADDRESS OF AST LISTHEADO ADD #T.ASTL,R0 ;R, CALL $QRMVF ;REMOVE AST ENTRY FROM QUEUE" MOVB A.CBL(R1),R4 ;KERNEL AST ? BPL 135$ ;IF PL NO JMP 210$ ;4135$: MOV R5,R4 ;CALCULATE ADDRESS OF STATUS WORD ADD #T.ST2,R4 ;/ MOVB (R4),-(SP) ;COPY CURRENT EXTENSION BYTET? BIC #^C,(SP) ;CLEAR ALL BUT WAIT STATEE+ ASL (SP) ;SHIFT INTO POSITITON FOR SAVE< BIC #*2!T2.STP!T2.SPN!T2.WFR,(R4) ;" BIS (SP)+,(R4) ;SAVE WAIT STATE( BIS #T2.AST,(R4) ;SET AST IN PROGRESS- MOV R1,R3 ;COPY AST CONTROL BLOCK ADDRESSR/  MOV R3,-(SP) ;SAVE AST CONTROL BLOCK ADDRESS8! CMP (R3)+,(R3)+ ;POINT TO NUMBER OF BYTES TO ALLOCATE"# .IF DF X$$HDR$.% MOV $SAHPT,R4 ;POINT TO CURRENT TASK HEADER&' .IFFT(.) MOV $HEADR,R4 ;POINT TO CURRENT TASK HEADER*+ .ENDC ;X$$HDR,&- MFPI SP ;GET CURRENT STACK POINTER. MOV (SP)+,R0 ;#8/ MOV (R3)+,R1 ;GET NUMBER OF BYTES TO ALLOCATE ON TASK)0 SUB R1,R0 ;CALCULATE NEW TOP OF STACKA*1 CALL $ACHCK ;ADDRESS CHECK STACK SPACE)2 BCS 160$ ;IS CS ADDRESS CHECK FAILURE,345 .IF DF S$$LIB6+7 MOV #PMODE,PS ;SET PREVIOUS MODE TO USER 89 .IFTF:;< .IF DF X$$HDR==> MOV KISAR6,-(SP) ;SAVE TASK HEADER MAPPING IF XTRNL HEADERT?@ .IFTF ; DF X$$HDRA+B MOV R0,-(SP) ;SET NEW TASK STACK POINTER C MTPI SP ; /D CALL $RELOM ;RELOCATE AND MAP STACK ADDRESS+E MOV SP,R1 ;CALCULATE ADDRESS OF TRAP PCEFG .IFF ; DF X$$HDRCHI ADD #7*2,R1 ;CJK .IFT ; DF X$$HDRELM ADD #8.*2,R1 ;NO .ENDC ; DF X$$HDRP#Q MOV (R1)+,-(SP) ;SAVE PC AT TRAP R MOV (R1),R2 ;SAVE PS AT TRAP)S MOV #CMODE!PMODE,(R1) ;SET AST TRAP PSF#T MOV (R3)+,-(R1) ;SET AST TRAP PCS4U MOV (R3)+,-(SP) ;GET NUMBER OF PARAMETERS TO MOVEVW .IFTX%Y BIT #1,(R1) ;SUPERVISOR MODE AST?NZ BEQ 140$ ;IF EQ NO$[ DEC (R1)+ ;CLEAR SUPERVISOR FLAG/\ TSTB $SUPFL ;TASK HAVE SUPER MODE LINKAGE ?P-] BEQ 140$ ;IF EQ NO, DON'T ALLOW SUPER AST,<^ BIC #^CCSMODE&CMODE,(R1) ;SET SUPERVISOR MODE IN STACK PS_` .ENDCab/c140$: DEC (SP) ;ANY MORE PARAMETERS TO MOVE?(d BLT 150$ ;IF LT NO0e MOV (R3)+,(R0)+ ;MOVE PARAMETER TO USER STACK f BR 140$ ;;g150$: TST (SP)+ ;CLEAN STACKSh MFPD$ @#H.D00UxwtkTADATADATADATADATADATASW ;GET USER DSWO*i MOV (SP)+,(R0)+ ;MOVE DSW TO TASK STACK1j MOV (SP)+,(R0)+ ;MOVE PC AT TRAP TO TASK STACK1.k MOV R2,(R0)+ ;MOVE PS AT TRAP TO TASK STACK.l MOV T.EFLM(R5),(R0) ;SAVE WAITFOR MASK WORDmn .IF DF X$$HDRo9p MOV (SP)+,KISAR6 ;RESTORE MAPPING TO XTRNL TASK HEADERCqr .ENDCs9t MOV T.EFLM+2(R5),H.EFSV(R4) ;SAVE WAITFOR MASK ADDRESSuv BR 170$ ;TAKE COMMON EXIT+%w160$: MOV #S.CAST,R0 ;SET AST ABORT#x CALL $ABCTK ;ABORT CURRENT TASKA8y170$: MOV (SP)+,R0 ;RETRIEVE AST CONTROL BLOCK ADDRESS3z MOV A.CBL(R0),R1 ;GET LENGTH OF BLOCK TO RELEASEE{ BNE 175$ ;JUMP IF NON-ZERO*| CMP -(R0),-(R0) ;ZERO - POINT TO A.KSR5}~ .IF DF K$$DAS5 MOV (R0),KDSAR5 ;MAP DEQUEUE ROUTINE IN DATA SPACE+ .ENDC7 MOV (R0)+,KINAR5 ;MAP DEQUEUE ROUTINE IN INSTR SPACE+( CALL @(R0)+ ;CALL DEQUEUE SUBROUTINE BR 200$ ;EXIT "175$: TSTB R1 ;LENGTH NON-ZERO? BNE 180$ ;Y - JUMP SWAB R1 ;GET AST CODEE+ CMPB R1,#AS.PEA ;PARITY ERROR AST BLOCK?C' BEQ 1781$ ;IF EQ YES, DEALLOCATE IT  .IF DF A$$CLI- CMPB R1,#AS.CAA ;COMMAND ARRIVAL AST BLOCK) BNE 176$ ;IF NE NO4 TST A.PRM+2(R0) ;SHOULD AST BLOCK BE DEALLOCATED? BEQ 177$ ;IF EQ YESN BR 178$ ;RELINK BLOCK 176$: ; .ENDC ;A$$CLI- CMPB R1,#AS.REA ;REQUESTED EXIT AST BLOCK?  BNE 179$ ;IF NE NO* BIT #T3.PRV,T.ST3(R5) ;TASK PRIVILEGED? BNE 178$ ;IF NE YES2177$: CALL $DECLK ;DEALLOCATE AST CONTROL BLOCK  BR 200$ ;K8178$: BIC #T2.REX,T.ST2(R5) ;ALLOW AST RESPECIFICATION=179$: MOV T.SAST(R5),(R0) ;LINK AST CONTROL BLOCK BACK INTO)* MOV R0,T.SAST(R5) ;THE HEAD OF THE LIST BR 200$ ;TRY EXIT AGAINA-1781$: MOV #A.PLGH,R1 ;GET LENGTH OF PACKETL.180$: CALL $DEACB ;DEALLOCATE CONTROL BLOCK BR 200$ ;TRY EXIT AGAINA*190$: TSTB T.ST2(R5) ;TASK BEING HALTED? BPL 200$ ;IF PL NOTEXIT: ;REFERENCE LABEL .IF DF X$$HDR- MOV $SAHDB,KISAR6 ;MAP CURRENT TASK HEADERO .ENDC ; DF X$$HDR+ CALL $DREX1 ;CONTINUE TASK EXIT PROCESSN200$: ;REF LABEL) .IF DF S$$LIB3 TSTB $SUPFL ;DOES TASK HAVE SUPERVISOR WINDOWS?T BEQ 205$ ;IF EQ NO/ CALL LSUPD1 ;LOAD SUPERVISOR DATA REGISTERSC* TST $STACK-2 ;GOING TO SUPERVISOR MODE? BMI 205$ ;IF MI NO& MFPI SP ;GET CURRENT STACK POINTER+ MOV (SP),-(SP) ;MAKE A COPY ON THE STACK2 ADD #4,(SP) ;MAKE USER SP 4 MORE THAN SUPER SP+ MOV #PMODE,PS ;SET PREVIOUS MODE TO USERE$ MTPI SP ;LOAD USER STACK POINTER: BIC #^CPSMODE&PMODE,PS ;SET PREVIOUS MODE TO SUPERVISOR* MTPI SP ;LOAD SUPERVISOR STACK POINTER .ENDC .IF NDF M$$PROB205$: JMP $DIRXT ;  .IFF 205$: JMP DIRXT1 ; .ENDC-210$: MOV #$DIRXT,-(SP) ;SET RETURN ADDRESS/ MOV R1,R0 ;SET ADDRESS OF AST CONTROL BLOCK,/ CLR (R0) ;INDICATE THIS IS A SCHEDULER CALL 7211$: ASLB R4 ;CONVERT AST INDEX TO WORD, TST $SGFIN & BMI 215$ ;IF MI NO $SGFIN REQUIRED/ CALL $SGFIN ;SETUP TO IGNORE SEGMENT FAULTSS .IF DF R$$WPT= MOV $KATBL+256.(R4),$WPLST ;SAVE LAST SYSTEM STATE ADDRESSN .ENDC ; DF R$$WPT3 JMP @$KATBL+256.(R4) ;DISPATCH TO PROPER ROUTINE 215$:0 .IF DF R$$WPT= MOV $KATBL+128.(R4),$WPLST ;SAVE LAST SYSTEM STATE ADDRESSS .ENDC ; DF R$$WPT3 JMP @$KATBL+128.(R4) ;DISPATCH TO PROPER ROUTINES;+ ;**-$DSPKA-DISPATCH KERNEL AST;E@; THIS ROUTINE IS CALLED WHEN A KERNEL AST IS TO BE DISPATCHED=; BY A COMPONENT OTHER THAN THE SCHEDULER (SPECIFICALLY THET(; LOADER TO DISPATCH REGION LOAD ASTS.;S ; INPUTS:D"; R0=ADDRESS OF KERNEL AST BLOCK;@ ; OUTPUTS:; THE AST IS SERVICEDT;?; NOTE: THE TASK CONTEXT IS NOT GUARANTEED LOADED, SO THE ASTVB; MAY ONLY BE USED TO PERFORM SERVICES DEPENDENT UPON CONDITIONS-; GUARANTEED BY THE CALLER OF THIS ROUTINE.;-7$DSPKA::MOV KINAR5,-(SP) ;SAVE CURRRENT APR 5 MAPPINGE  .IF DF K$$DAS ) MOV00]xwtbl KDSAR5,-(SP) ;SAVE D SPACE MAPPINGO  .ENDC ; DF K$$DAS & MOVB A.CBL(R0),R4 ;GET CAUSE OF AST. MOV #1,(R0) ;SET LINK NON-ZERO TO INDICATE ;NOT A SCHEDULER REQUEST  CALL 211$ ;GO EXECUTE ASTT  .IF DF K$$DAS / MOV (SP)+,KDSAR5 ;RESTORE PREVIOUS D MAPPING  .ENDC ; DF K$$DAS - MOV (SP)+,KINAR5 ;RESTORE PREVIOUS MAPPINGE  RETURN ;   .DSABL LSB-    ;+7 ; **-$GGFRN-GROUP GLOBAL EVENT FLAG USE COUNT RUNDOWND ;DC ; DEACCESS THIS TASK'S GROUP GLOBAL EVENT FLAGS IF THE EVENT FLAG E ; MASK IN THE AST CONTROL BLOCK IS GROUP GLOBAL, AND DEALLOCATE THET ; THE AST CONTROL BLOCK.! ; " ; INPUTS:L# ;Q.$ ; R0=ADDRESS OF THE KERNEL AST CONTROL BLOCK% ;D;& ; TASK HEADER IS EITHER RESIDENT OR MAPPED THROUGH KISAR65' ; AND $SAHPT IS ASSUMED TO BE VALID AT THIS POINT.S( ;P ) ; OUTPUTS:* ; 3+ ; THE GROUP GLOBAL EVENT FLAGS ARE DEACCESSED AND+%, ; THE CONTROL BLOCK IS DEALLOCATED. - ;O$. ; FORMAT OF THE AST CONTROL BLOCK:/ ;S0 ; WD. 00 -- UNKNOWNG%1 ; WD. 01 -- KERNEL AST TYP = AK.GGFS2 ; WD. 02 -- UNKNOWNP%3 ; WD. 03 -- EVENT FLAG MASK ADDRESSS4 ;T5 ;-6 7 8 .IF DF G$$GEF9 :: $GGFRN::MOV $SAHPT,R4 ;GET CURRENT TASK'S HEADER ADDRESS+; MOV R0,-(SP) ;SAVE CONTROL BLOCK ADDRESSU,< MOV 6(R0),R3 ;GET EVENT FLAG MASK ADDRESS)= CALL $DEAGF ;DEACCESS IF GROUP GLOBAL .> MOV (SP)+,R0 ;RESTORE CONTROL BLOCK ADDRESS-? CALL $DEPKT ;DEALLOCATE THE CONTROL BLOCK '@ CALLR $SETRT ;INSURE RESCAN OF TASKCA B .ENDC ; DF G$$GEFC D .IF DF P$$OFFE F ;+3G ; **-$FINXT-FINISH OFFSPRING TASK EXIT PROCESSING H ; FI ; THIS ROUTINE IS CALLED TO OPTIONALLY SET AN EVENT FLAG, DECLARE ANGJ ; AST AND RETURN EXIT STATUS TO A PARENT TASK ONCE THAT TASK HAS BEENOK ; SCHEDULED.L ; M ; INPUTS:RN ;T*O ; R0=ADDRESS OF OFFSPRING CONTROL BLOCK.P ;S Q ; OUTPUTS:R ;DS ; ALL EXIT CONDITIONS ARE EFFECTED AND THE OFFSPRING CONTROL BLOCK=T ; IS DEALLOCATED IF IT IS NOT USED AS AN AST CONTROL BLOCK.SU ;-V &W $FINXT::MOV R0,R3 ;COPY OCB POINTERX MOV R0,R4 ;COPY OCB POINTERO*Y TST (R3)+ ;SKIP OVER LINK WORD (O.LNK)<Z MOV #O.LGTH,(R3)+ ;SET LENGTH TO DEALLOCATE (O.LNK=A.CBL)7[ MOV (R3),R5 ;PICK UP PARENT TCB ADDR (O.PTCB=A.BYT)T6\ MOV #8.*2,(R3)+ ;BYTES ON USER STACK (O.PTCB=A.BYT)/] TST (R3)+ ;SKIP OVER AST WORD (O.AST=A.AST)1^ MOV (R3),R0 ;PICK UP EFN NUMBER (O.EFN=A.NPR)R1_ CALL $SETFG ;SET EFN AND UNLOCK IF GRP GLOBALD6` MOV #1,(R3)+ ;SET NUMBER OF AST PARMS (O.EFN=A.NPR)7a MOV (R3)+,R0 ;PICK UP VIRTUAL ESB ADDR (O.ESB=A.PRM)R+b MOV #1,R2 ;ASSUME ONE WORD STATUS BLOCK #c ASR R0 ;ONE WORD STATUS BLOCK ?H,d BEQ 40$ ;IF EQ NO STATUS BLOCK SPECIFIED'e BCC 5$ ;IF CC ONE WORD STATUS BLOCKR'f MOV #8.,R2 ;SET SIZE TO EIGHT WORDSE+g 5$: ASL R0 ;SET ADDRESS BACK TO ORIGINAL 8h MOV R0,-2(R3) ;CORRECT ADDRESS IN AST BLOCK FOR STACK-i 10$: MOV (R3)+,-(SP) ;GET A WORD OF THE ESBS0j MTPD$ (R0)+ ;STORE IN USER BUFFER (CAN TRAP)/k BCS 40$ ;IF CS TRAPPED, NO POINT CONTINUING3"l SOB R2,10$ ;CONTINUE WITH COPY!m 40$: TST O.AST(R4) ;EFFECT AST?Nn BEQ 50$ ;IF EQ NO %o MOV R5,R0 ;SET PARENT TCB ADDRESSB$p MOV R4,R1 ;SET AST BLOCK ADDRESS1q CALLR $QASTT ;QUEUE AST FOR PARENT AND RETURNV,r 50$: MOV R4,R0 ;POINT TO BLOCK TO RELEASE*s MOV #O.LGTH,R1 ;PICK UP SIZE TO RELEASEt CALL $DEACB ;DEALLOCATE OCBB'u CALLR $SETRT ;INSURE RESCAN OF TASKEv w .IFF ;DF P$$OFFx Py $FINXT::BGCK$A BF.KAS,BE.SGN,FATAL ;SHOULDN'T HAVE AK.OCB IN NON P$$OFF SYSTEMz { .ENDC| } ;+G~ ; **-$DBTRP-SET T BIT IN SAVED PS TO CAUSE TASK TO TRAP INTO DEBUGGERI ;N@ ; THIS LOCAL ROUTINE IS CALLED AS A KERNEL AST TO FORCE A TASK? ; TO TRAP INTO A DEBUGER. IT IS CALLED AS A RESULT OF THE MCRV1 ; "DEBUG" COMMAND QUEUEING THE KERNEL AST BLOCKM ;. ; INPUTS:  ;Z" ; R0=ADDRESS OF KERNEL AST BLOCK% ; R5=ADDRESS OF TCB OF CURRENT TASKS ;F ; OUTPUTS: ; D ; THE "T" BIT IS SET IN THE SAVED PS IN THE TASK'S HEADER TO CAUSEF ; ITTO TRAP. THE00exwtkTADATADATADATADATADATA AST BLOCK IS DEALLOCATED. IF THE TASK DOES NOT HAVED ; A DEBUGGER SST VECTOR SPECIFIED, OR IS EXITING, THE T BIT IS NOT@ ; SET, AND THE AST BLOCK IS USED TO QUEUE A MESSAGE REQUEST TO ; TKTN FOR OUTPUT. ;L ;- C $DBTRP::BIT #T2.ABO!T2.HLT,T.ST2(R5) ;IS TASK EXITING OR ABORTING BNE 20$ ;IF NE YES$ MOV T.PCB(R5),R4 ;FIND TASK'S PCB  .IF DF X$$HDR ; MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING IN CASE XTRNL HDRT, MOV P.HDR(R4),-(SP) ;POINT TO TASK HEADER! BNE 5$ ;IF NE RESIDENT HEADERE/ MOV P.REL(R4),KISAR6 ;MAP TO EXTERNAL HEADERG7 MOV #140000,(SP) ;POINT TO VIRTUAL ADDRESS OF HEADER1 5$: MOV (SP)+,R4 ;GET VIRTUAL ADDRESS OF HEADERG( MOV H.ODVA(R4),R4 ;GET VECTOR ADDRESS, MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING' TST R4 ;IS A DEBUGGER SST SPECIFIED2  .IFF ; DF X$$HDRP $ MOV P.HDR(R4),R4 ;POINT TO HEADER. TST H.ODVA(R4) ;IS A DEBUGGER SST SPECIFIED  .ENDC ; DF X$$HDR  BEQ 20$ ;IF EQ NONA BIC #T2.SEF!T2.STP!T2.SPN!T2.WFR,T.ST2(R5) ;MAKE TASK RUNNABLER, BIS #20,@#$STACK-2 ;SET T BIT IN SAVED PS* 10$: MOV #A.DLGH,R1 ;LENGTH OF AST BLOCK CALL $DEACB ;DEALLOCATE IT' CALLR $SETRT ;INSURE RESCAN OF TASK,$ 20$: TST $TKNPT ;TKTN INSTALLED ?) BEQ 10$ ;IF EQ NO, DEACLLOCATE PACKET;( MOV #T.NDEB,R3 ;NO DEBUGGER SPECIFIED3 MOV T.NAM+2(R5),R4 ;GET SECOND HALF OF TASK NAMER# MOV T.NAM(R5),R5 ;AND FIRST HALFT. CALLR $DVMG1 ;REQUEST TKTN USING AST BLOCK   ;+- ; **-$GENBF-GENERAL BUFFERED I/O COMPLETION5 ;KE ; THIS ROUTINE IS CALLED TO TRANSFER KERNEL AST CONTROL TO A DRIVERMD ; FOR PROCESSING OF FUNCTIONS WHICH MUST BE DONE WITH TASK CONTEXT0 ; LOADED. THE AST CONTROL BLOCK IS AS FOLLOWS: ;P# ; +-----------------------------+ # ; ! LINK WORD !.# ; +-----------------------------+V# ; ! A.BYT=0 ! A.CBL=AK.GBI !A# ; +-----------------------------+R# ; ! SUBROUTINE KISAR5 BIAS !K# ; +-----------------------------+ # ; ! SUBROUTINE ADDRESS !T# ; +-----------------------------+D ;R ; INPUTS:  ;O# ; R0=ADDRESS OF AST CONTROL BLOCKG ;U ; OUTPUTS: ;B ;+ . $GENBF::SAVNR ;SAVE NON-VOLATILE REGISTERS- MOV R0,R3 ;COPY AST CONTROL BLOCK ADDRESS-. MOV $TKTCB,R0 ;GET CURRENT TASK TCB POINTER2 CALL $SETCR ;FORCE RE-DISPATCHING OF PROCESSOR* MOV 4(R3),KISAR5 ;MAP TO DRIVER ROUTINE  .IF DF K$$DAS 4 MOV 4(R3),KINAR5 ;MAP TO DRIVER ROUTINE (I SPACE)  .ENDC ; DF K$$DAS 0 CALLR @6(R3) ;CALL DRIVER ACCEPTANCE ROUTINE  ;+0 ; **-$FINBF-FINISH TERMINAL INPUT BUFFERED I/O ;T@ ; THIS ROUTINE IS CALLED TO COMPLETE A BUFFERED TERMINAL INPUTH ; REQUEST THAT HAS BEEN PLACED IN THE AST QUEUE, OR TO COMPLETE AN I/OD ; REQUEST FOR A TASK WHICH MAY HAVE UNMAPPED ITS I/O STATUS BLOCK. ;R ; INPUTS:  ;O ; R0=ADDRESS OF I/O PACKET.P< ; R4=0 FOR BUFFERED I/O OR 100 FOR POSSIBLE UNMAP OF IOSB. ;M ; REQUIRED I/O PACKET FIELDS:  ;.( ; I.FCN+1=I/O FUNCTION CODE OF REQUEST- ; I.PRM=RELATIVE KISAR6 BIAS OF USER BUFFER$. ; I.PRM+2=KISAR6 DISPLACEMENT OF USER BUFFER! ; I.PRM+6=FIRST I/O STATUS WORDE@ ; I.PRM+10=2ND I/O STATUS WORD (AND COUNT FOR $BLXIO TRANSFER)7 ; I.PRM+12=PTR TO LINKED LIST OF BUFFERS OR 0 IF NONEA) ; I.PRM+14=KISAR5 BIAS OF DRIVER BUFFERL2 ; I.PRM+16=PCB ADDRESS FOR PARTITION OF TRANSFER ;KA ; NOTE: ONLY THE I/O STATUS IN I.PRM+6 AND I.PRM+10 IS REQUIRED ; IF R4=100.D ; OUTPUTS: ; D ; THE BUFFERED I/O REQUEST IS COMPLETED AND $IOFIN IS CALLED. THEF ; DRIVER IS CALLED TO DEALLOCATE ANY BUFFERS. IF THE BUFFER ADDRESSE ; IS ODD, THE BUFFER IS NOT COPIED AND INSTEAD THE DRIVER IS CALLEDDE ; DIRECTLY. THIS CASE ALLOWS FOR NON-STANDARD BUFFER FORMATS. THEFG ; DRIVER IS RESPONSIBLE FOR TRANSFERRING THE DATA TO THE USER BUFFER.+? ; IF THE PCB ADDRESS IS ODD, THE BUFFER IS IN SECONDARY POOL.E ;-  .ENABL LSBD  - $FINBF::SAVNR ;SAVE NONVOLITILE REGISTERS 4 MOV I.PRM+16(R0),R1 ;GET ADDRESS OF BUF00mxwtblFER REGION- BIC #1,R1 ;CLEAR SECONDARY POOL INDICATORO" CALL $TSPAR ;BUFFER RESIDENT ? BCC 5$ ;IF CC YESU% BR 50$ ;IF CS NO, LOAD AST QUEUEDE. $FINDI::SAVNR ;SAVE NON-VOLATILE REGISTERS) 5$: MOV R0,R3 ;COPY I/O PACKET ADDRESSR4 BIT #1,(R3) ;IS THIS A REGION LOAD AST? ;BM416; BNE 10$ ;IF NE YES, DON'T WRITE I/O STATUS BLOCK ;BM416 : MOV I.IOSB(R3),R0 ;PICK UP VIRTUAL IOSB ADDRESS ;**-2! BEQ 10$ ;IF EQ NONE SPECIFIEDR7 MOV I.PRM+6(R3),-(SP) ;PUSH FIRST WORD OF I/O STATUSI6 MTPD$ (R0)+ ;WRITE IN USER IOSB (ANY TRAP IGNORED)9 MOV I.PRM+10(R3),-(SP) ;PUSH SECOND WORD OF I/O STATUSB8 MTPD$ (R0)+ ;WRITE IN USER IOSB+2 (ANY TRAP IGNORED)3 CLR I.IOSB+4(R3) ;NO I/O STATUS BLOCK FOR $IOFINP 10$:8 ASSUME AK.BUF,200 ;BUFFERED I/O LOW BITS MUST BE ZERO  TSTB R4 ;BUFFERED I/O? BNE 30$ ;IF NE NOK. MOV I.TCB(R3),R5 ;RETRIEVE TASK TCB ADDRESS/ DECB T.TIO(R5) ;DECREMENT BUFFERED I/O COUNTC2 INCB T.IOC(R5) ;INCREMENT OUTSTANDING I/O COUNT( MOV R3,-(SP) ;SAVE I/O PACKET ADDRESS) ADD #I.PRM+16,R3 ;POINT TO PCB ADDRESS(,! MOV (R3),R5 ;SAVE PCB ADDRESS (I.PRM+16)" MOV R5,R2 ;COPY PCB ADDRESS+2# BIC #1,R2 ;CLEAR POSSIBLE SEC POOL BUFFER FLAG8$ ADD P.REL(R2),-16(R3) ;MAKE TASK BUFFER BIAS ABSOLUTE/% CLR (R3) ;CLEAR PCB ADDRESS WORD (I.PRM+16)B(& TST -(R3) ;BACKUP POINTER (I.PRM+14)8' MOV -(R3),R2 ;PICK UP INPUT BUFFER ADDRESS (I.PRM+12) ( BEQ 20$ ;IF EQ THERE IS NONE0) MOV -10(R3),R4 ;GET START ADDR OF USER BUFFER* + .IF DF T$$ACD!T$$TSA , (- BIT #1,R5 ;BUFFER IN SECONDARY POOL?. BNE 12$ ;IF NE YES*/ BIT #1,R2 ;NON-STANDARD BUFFER FORMAT?/0 BNE 17$ ;IF NE YES, BYPASS BUFFER COPY CODES1 2 .ENDC ;T$$ACD!T$$TSA 3 ,4 11$: BIT #1,R5 ;BUFFER IN SECONDARY POOL?5 BEQ 13$ ;IF EQ NOA16 12$: MOV R2,R1 ;BUFFER ADDRESS IS MAPPING BIASU(7 MOV #120000,R2 ;SET APR5 DISPLACEMENT*8 BR 14$ ;TRANSFER USING SEC POOL BUFFER.9 13$: CMP R2,#120000 ;BUFFER IN DRIVER SPACE?: BLO 15$ ;IF LO NOU"; MOV R2,R1 ;COPY BUFFER ADDRESS1< BIC #77,R1 ;REMOVE DISPLACEMENT IN BLOCK BITSE5= SUB #120000,R1 ;CALC OFFSET IN DRIVER PAR IN BYTESR0> SUB R1,R2 ;REDUCE ADDRESS TO FIT IN KERNEL 5-? ASL R1 ;CONVERT BYTE OFFSET TO 32W BLOCKSB @ ASL R1 ; A SWAB R1 ;Y1B ADD 2(R3),R1 ;CALCULATE PHYSICAL MEMORY OFFSETB C 14$: MOV R1,KISAR5 ;MAP BUFFER3D 15$: MOV (R2)+,-(SP) ;SAVE POINTER TO NEXT BUFFERR&E MOV (R2)+,R0 ;PICK UP SIZE OF BLOCK+F SUB #4,R0 ;REDUCE COUNT BY HEADER BYTES1)G SUB R0,-(R3) ;IS THERE THAT MUCH LEFT?AH BCC 16$ ;IF CC YES'I ADD (R3),R0 ;ELSE SET CORRECT COUNTB(J CLR (R3) ;CLEAR REMAINING BYTE COUNT2K 16$: MOV -10(R3),R3 ;PICK UP KISAR6 BIAS (I.PRM)(L CALL $BLXIO ;TRANSFER TO USER BUFFER0M MOV (SP)+,R2 ;RETRIEVE POINTER TO NEXT BUFFER,N MOV (SP),R3 ;RETRIEVE I/O PACKET POINTER(O ADD #I.PRM+10,R3 ;POINT TO BYTE COUNT%P TST (R3)+ ;MORE TO GO? (I.PRM+10)EQ BNE 11$ ;IF NE YES5R 17$: MOV (R3),R0 ;POINT TO FIRST BUFFER (I.PRM+12)E4S MOV @I.UCB-(R3),R2 ;POINT TO DRIVER DCB(T MOV D.PCB(R2),R3 ;POINT TO DRIVER PCBU V W .IF DF K$$DASX 1Y MOV P.REL(R3),KDSAR5 ;MAP DRIVER IN DATA SPACERZ [ .ENDC\ ] 2^ MOV P.REL(R3),KINAR5 ;MAP DRIVER IN INSTR SPACE3_ MOV D.DSP(R2),R2 ;POINT TO DRIVER DISPATCH TABLE5` CALL @D.VDEB(R2) ;CALL DRIVER DEALLOCATION ROUTINE.+a 20$: MOV (SP)+,R3 ;RESTORE PACKET ADDRESS b TST (R3) ;REGION LOAD AST ?1)c BNE 40$ ;IF NE YES, RE-QUEUE TASK ASTT+d 30$: CALLR $IOFIN ;COMPLETE I/O REQUESTPe (f 40$: MOV I.TCB(R3),R0 ;SET TCB ADDRESS6g MOVB #AK.DIO,A.CBL(R3) ;CHANGE AST TYPE TO "DELAYEDh ;I/O COMPLETION")i CALLR $REQUE ;RE-QUEUE TASK LEVEL ASTCj ,k 50$: INCB T.TIO(R5) ;RE-COUNT BUFFERED I/O l ;FORCE I/O RUNDOWN IF TASKm ;EXITS DURING LOAD AST n RETURN ;Eo p .DSABL LSBDq r s t ;Nu ; EXECUTIVE IDLE LOOPRv ;EHw ; THE EXECUTIVE IDLE LOOP IS ENTERED WHEN THERE ARE NO RUNNABLE TASKS.Gx ; THE NULL TCB AT THE END OF THE TASK LIST IS ALWAYS GUARANTEED TO BE Hy 00uxwtkTADATADATADATADATADATA; BLOCKED. TWO FLAGS ARE SET FOR OTHER EXECUTIVE ROUTINES IN THE IDLE z ; LOOP. { ;YJ| ; 1. THE ADDRESS OF THE NULL TCB (#$ACTHD) IS SET INTO THE RESCHEDULED} ; POINTER ($RQSCH) TO PREVENT $DIRXT FROM EVER RETURNING TO SYSTEMD~ ; STATE WHILE THE EXEC IS IDLE. THIS FORCES EXECUTION BACK TO THE1 ; IDLE LOOP IN LIEU OF A REAL SCHEDULE REQUEST. ;I ; 2. AN IDLE FLAG IS SET ($IDLFL) FOR THE FORK ROUTINES TO CAUSE THEM ? ; TO FORCE CONTROL BACK TO $DIRXT WHEN NECESSARY TO DEQUEUE AOB ; FORK. (IT IS IMPOSSIBLE FOR THE IDLE LOOP TO ALWAYS RETURN TOB ; $DIRXT WHEN NECESSARY BECAUSE OF A WINDOW BETWEEN THE CHECK OF, ; THE FORK LIST AND THE WAIT INSTRUCTION.) ;$G ; THE STACK CANNOT BE USED IF $IDLFL IS SET TO A ONE AND THE PRIORITYHF ; IS OTHER THAN PR7, BECAUSE WE COULD SUSTAIN AN INTERRUPT RESULTINGF ; IN A FORK WHICH WOULD FORCE $QFORK TO JAM AN ADDRESS DIRECTLY INTOF ; THE STACK. IF WE ARE USING THE STACK, THEN IT WOULDN'T KNOW WHERE ; TO PUT THE ADDRESS.E ; .ENABL LSB( @ IDOL: MOV #$ACTHD,@$RQSCH ;PREVENT $DIRXT RETURN TO USER STATE- CLRB @$CURPR ;CLEAR CURRENT TASK PRIORITYC  ;+ ; ** W A R N I N G **T ;R ; SPM HOOKPOINT NUMBER 31. ;T+ ; DO NOT CHANGE THE INSTRUCTION FOLLOWINGI ; LABEL WITHOUT CHECKING SPM ;- - $SPH31==. ;SPM CHANGES THE INSTRUCTION ATF! ;THE LOCATION OF THIS LABEL    .IF DF M$$PRO 0 MOV @#$TKTCB,R0 ;;;GET CURRENT TASK ; BM079$ BEQ 40$ ;;;IF EQ NO CURRENT TASK8 BIT @$CPCRM,T.RRM(R0) ;CAN THIS TASK RUN ON THIS CPU?+ BNE 72$ ;IF NE NO -- REMOVE HIS CONTEXTR< BIT #TS.BLC,T.STAT(R0) ;;;POSSIBLE FUTURE MAPPING CHANGE?, BNE 72$ ;;;IF NE YES -- SAVE THE CONTEXT+ BIT $CPBIT,$URMST ;ARE WE GOING OFFLINE? ( BEQ 72$ ;IF EQ YES -- REMOVE CONTEXT< BIS #TS.RUN,T.STAT(R0) ;;;SHOW CURRENT TASK BELONGS TO US - ; RE-ENTRY POINT AFTER STORING TASK CONTEXT  , IDLE1: ;;;REF. LABEL FOR CONTEXT SWITCH $ 40$: MTPS #PR7 ;;;UP OUR PRIORITY- BIT $CPBIT,$URMST ;;;ARE WE GOING OFFLINE?  BNE 42$ ;;;IF NE NO72 CALL $OLRNT ;;;TELL HRC... WE MADE IT THIS FAR7 ULOCK$ $EXECL,WAIT ;;;CLEAR OUT AND LET THE WORLD IN$! HALT ;;;COME TO A DEAD STOP!: 42$: DECB $IDLFL ;;;SHOW IN IDLE LOOP - UNINTERRUPTABLE ;+ ; ** W A R N I N G **B ;S ; SPM HOOKPOINT NUMBER 33. ;K+ ; DO NOT CHANGE THE INSTRUCTION FOLLOWINGS ; LABEL WITHOUT CHECKING SPM ;- - $SPH33==. ;SPM CHANGES THE INSTRUCTION ATP! ;THE LOCATION OF THIS LABELI - MOV #$IDLPT,R1 ;;;SET UP FOR LIGHT PATTERNI) ULOCK$ $EXECL,WAIT ;;;UNLOCK EXECUTIVE ) JMP DIRXT2 ;;;CHECK FOR WAITING FORKSC  .IFFL 4 MOV #$IDLPT,R1 ;;;SET FOR IDLE LOOP LIGHT PATTERN$ INCB $IDLFL ;;;SHOW IN IDLE LOOP' TST $FRKHD ;;;ANYTHING IN FORK LISTN+ BEQ IDLE ;;;IF EQ NO -- ENTER IDLE LOOP  ;+ ; ** W A R N I N G **U ;  ; SPM HOOKPOINT NUMBER 33. ;I+ ; DO NOT CHANGE THE INSTRUCTION FOLLOWINGT ; LABEL WITHOUT CHECKING SPM ;- - $SPH33==. ;SPM CHANGES THE INSTRUCTION ATO! ;THE LOCATION OF THIS LABELW 2 CLRB @#$IDLFL ;;;NOT IN IDLE LOOP NOW ; BM079# JMP $DIRXT ;;;EXECUTE THE FORKSV ;;;ENTER EXECUTIVE  .ENDC 0 ; INTERMEDIATE TARGET TO JUMP TO STORE CONTEXT + 72$: JMP STCTX ;GO STORE CONTEXT OF TASK; 3 IDLE: CACHE$ RESTOR ;RESTORE CACHE TO NON-BYPASS*' MOV (R1)+,(R1) ;RESTORE IDLE PATTERN & DECB $IDLCT ;TIME TO MOVE PATTERN? BGE 45$ ;IF GE NOH MOVB #2,$IDLCT ;RESET COUNT% ASLB (R1)+ ;MOVE PATTERN ($IDLPT)A RORB (R1) ;($IDLPT+1)T ADCB -(R1) ;($IDLPT)9 45$: MOV (R1),R0 ;PUT IT WHERE IT CAN BE SEEN ($IDLPT);& MOV R0,-(R1) ;SAVE IT FOR NEXT TIME WAIT  ;H ; IF $IIPND HAS ANY OF OUR URMS SET, WE SHOULDN'T BE IN THE IDLE LOOP.F ; IF WE HAVE JUST POWERFAILED, THEN THIS CODE PATH MAY BE TAKEN. IFI ; NOT, WE SHOULD NEVER EXECUTE IT. STILL, ITS NICE BELT AND SUSPENDERST5 ; TECHNIQUE. NOT MUCH ELSE TO DO IN THE IDLE LOOP.2 ;C   .IF DF M$$PRO 200}xwtbl CACHE$ BYPASS ;MAKE SURE WE GET THE REAL THING' BIT @$CPURM,$IIPND ;ANY WORK FOR US?1- BEQ IDLE ;IF EQ NO, IDLE AROUND SOME MORE $ JMP DIRXT2 ;GO FIND OUT FOR SURE  .IFF " BR IDLE ;IF NO MULTIPROCESSING  .ENDC  .DSABL LSBL  ;+8 ; **-$SGFIN-SEGMENT FAULT AND TRAP 4 INTERCEPT ROUTINE ; G ; THIS ROUTINE IS A CO-ROUTINE WHICH SETS UP TO IGNORE SEGMENT FAULTSD ; AND TRAPS THROUGH 4. ;E ; INPUTS:T ;L ; NONE.  ;  ; OUTPUTS: ;P  ; NONE.C ;- 7 $SGFIN::MOV @#4,-(SP) ;SAVE CONTENTS OF TRAP 4 VECTORN   .IF DF P$$D70 3 MOV $SGFFR,-(SP) ;SAVE LAST $SGFIN FRAME POINTER 7 MOV @#114,-(SP) ;SAVE MAIN MEMORY TIMEOUT AND PARITY ' MOV 6(SP),-(SP) ;COPY RETURN ADDRESS.. MOV @#250,10(SP) ;SAVE SEGMENT TRAP ADDRESS$ MOV #20$,@#114 ;TRAP THESE FAULTS  .IFFI '! MOV 2(SP),-(SP) ;COPY RETURN ADDRESSG9" MOV @#250,4(SP) ;SAVE CONTENTS OF SEGMENT FAULT VECTOR# $ .IFTF% .& MOV #10$,@#4 ;POINT TO ROUTINE TO SET CARRY' MOV #10$,@#250 ;P( ) ;O$* ; CONTENTS OF STACK AT THIS POINT:+ ; -, ; 0(SP)=COROUTINE RETURN ADDRESS TO CALLER.I*- ; 2(SP)=CONTENTS OF @#114 (IF DF P$$D70)). ; 4(SP)=SAVE $SGFFR CELL (IF DF P$$D70))/ ; 6(SP)=CONTENTS OF @#4.0 ; 10(SP)=CONTENTS OF @#2501 ; 2 3 4 .IFTM5 $6 MOV SP,$SGFFR ;SAVE FRAME POINTER17 ADD #6,$SGFFR ;ADJUST TO POINT TO SAVED TRAP 48 9 .IFTF: !; CALL @(SP)+ ;RETURN TO CALLERC< = .IFT.> 4? MOV (SP)+,@#114 ;RESTORE MAIN MEMORY TIMEOUT TRAP0@ MOV (SP)+,$SGFFR ;RESTORE SAVED FRAME POINTERA B .IFTFC 'D MOV (SP)+,@#4 ;RESTORE TRAP 4 VECTORS5E BIC #160000,@#SR0 ;UNFREEZE MEMORY MANAGEMENT UNIT)0F MOV (SP)+,@#250 ;RESTORE SEGMENT FAULT VECTOR&G RETURN ;RETURN TO CALLER'S CALLERH I 10$: ;REFERENCE LABELJ K .IFTML M ;F,N ; TRAP 4 SERVICE FOR 11/70 CLASS MACHINES.O ; EP ; THIS TRAP SERVICE RESETS THE VECTOR AT FOUR, AND THEN ATTEMPTS TOLGQ ; CLEAR THE CPU ERROR REGISTER. IF THE REGISTER ISN'T THERE, WE WILLRER ; TRAP THRU FOUR, AND GO TO 15$, WHERE WE WILL CLEAR THE EQUAL BIT,IS ; SET THE CARRY BIT, AND RTI. AFTER THE ATTEMPT TO CLEAR THE CPU ERRORMFT ; REGISTER, WE CHECK THE CARRY TO SEE IF IT WAS REALLY THERE, AND IFEU ; IT WAS, THEN WE CHECK IT TO SEE IF THIS WAS ONE OF THE CONDITIONSEV ; THAT WE EXPECT IN $SGFIN. IF IT ISN'T, THEN WE ACT LIKE THIS WAS W ; A NORMAL TRAP TO FOUR.X ;TY +Z MOV #15$,@#4 ;RESET TRAP TO FOUR ADDRESSA#[ CLC ;SET UP CARRY PROPERLY NOWI1\ BIC #60,@#177766 ;CLEAR OUT CPU ERROR REGISTER '] BCS 12$ ;IF CS REGISTER ISN'T THEREB(^ BEQ 12$ ;IF EQ WE CLEARED IT ALL OUT_ ` ;TEa ; HERE WE HAVE FOUND A PROBLEM: WE HAVE TAKEN A TRAP THROUGH VECTORFCb ; LOCATION 4, BUT THE REASON WAS NOT FOR NON-EXISTANT MEMORY. INTHc ; THIS CASE, WE WISH TO SIMULATE A TRAP THROUGH THE CONTENTS OF VECTORHd ; FOUR PRIOR TO THE TIME THAT $SGFIN PLACED ITS OWN VALUE IN IT. THISJe ; IS POINTED TO ON THE STACK BY THE $SGFFR POINTER. IT SEEMS REASONABLEHf ; TO SIMPLY DISPATCH THROUGH THAT LOCATION, WHICH WE WILL DO. IF THISFg ; IS NOT A GOOD IDEA, THIS IMPLEMENTATION WILL ALLOW UNTHREADING THEEh ; STACK UNTIL THE ULTIMATE RESOLUTION OF THE NESTED CALLS TO $SGFINFi ; IS EFFECTED.j ;Hk ,l MOV @$SGFFR,-(SP) ;GET ADDRESS TO JUMP TOm JMP @(SP)+ ;JUMP THERECn 11$: MOV #104001,@#177744 ;CLEAR OUT MEMORY SYSTEM ERROR REGISTERE>o 12$: MOV #10$,@#4 ;RESET TRAP 4 (WHETHER IT NEEDS IT OR NOT)p q .IFTFr $s 15$: BIC #4,2(SP) ;CLEAR EQUAL BITt BIS #1,2(SP) ;SET CARRY BITu RTIv w .IFTCx y ; z ; TRAP 114 SERVICE{ ;GF| ; THIS TRAP SERVICE ACCEPTS TRAPS TO 114 ON PDP-11/70 CLASS MACHINESF} ; SO THAT ATTEMPTS TO REFERENCE NON-EXISTANT MEMORY BELOW THE SYSTEMF~ ; SIZE REGISTER DOESN'T LOOK LIKE A PARITY ERROR. THIS SERVICE ALSOC ; ATTEMPTS TO VERIFY IF THE CAUSE OF THE TRAP TO 114 IS IN FACT AEC ; NON-EXISTANT MEMORY CONDITION, OR IF IT WAS SOME OTHER PROBLEM.TF ; IF IT WAS SOME OTHER PROBLEM, TRANSFER IS MADE TO THE PARITY ERRORF 00xwtkTADATADATADATADATADATA; SERVICE ROUTINE. IF IT WAS NON-EXISTANT MEMORY, THEN THE REGISTER2 ; IS CLEARED AND THE NORMAL CODE FLOW REENTERED. ;OG ; A SPECIAL CASE EXISTS IN THE CASE WHERE A TRAP 114 OCCURRED, AND WETE ; ARE NOT ON A SYSTEM WITH A MEMORY SYSTEM ERROR REGISTER. IN THISEI ; CASE, THE CMP ACCESS WILL FAIL, TRAPPING THRU 4, WHICH WILL ENCOUNTEROI ; THE CODE IN $SGFIN MENTIONED ABOVE. THIS CODE WILL CLEAR THE EQ BIT,HF ; SO THAT THE COMPARISON WILL FAIL, CAUSING A TRANSFER TO THE PARITYJ ; ERROR SERVICE ROUTINE. THIS IS THE DESIRED RESULT, SINCE THE ONLY WAYL ; WE COULD TRAP TO 114 ON A MACHINE WITHOUT A MEMORY SYSTEM ERROR REGISTERC ; (OR SYSTEM SIZE REGISTER) WAS TO ENCOUNTER A REAL PARITY ERROR.R ;  9 20$: CMP #104001,@#177744 ;IS THIS MAIN MEMORY TIMEOUT? . BEQ 11$ ;IF EQ YES -- SET CARRY AND RETURN  .IF DF P$$RTY * JMP $PARER ;NO -- THIS IS PARITY ERROR  .IFF ; DF P$$RTYT > BGCK$A BF.PAR,BE.SGN,HALT ;PARITY ERROR, P$$RTY NOT DEFINED  .ENDC ; DF P$$RTY   .ENDC   ;+ ; **$SWSTK-SWITCH STACKS ;CB ; THIS ROUTINE IS CALLED FROM TASK LEVEL TO SWITCH TO THE SYSTEMB ; STACK THUS INHIBITING TASK SWITCHING. THE CALLING TASK MUST BED ; PRIVILEGED IF RUNNING IN A MAPPED SYSTEM AND MAPPED TO THE EXEC.D ; CONTROL IS PASSED HERE FROM DRDSP AFTER THE TRAP HAS OCCURED AND ; $DIRSV HAS BEEN CALLED.  ;I ; CALLING SEQUENCE:. ; % ; EMT 376 ;TRAP TO $EMSST IN DRDSP,1 ; .WORD ADDR ;ADDRESS FOR RETURN TO USER STATEC ;  ; INPUTS AT THIS POINT:  ;. ; R3=ADDRESS OF PC WORD OF TRAP ON STACK + 2 ;I ; MAPPED SYSTEM: ;L ; 22(SP)=PS PUSHED BY TRAP ; 20(SP)=PC PUSHED BY TRAP ; 16(SP)=SAVED R5A ; 14(SP)=SAVED R4L ; 12(SP)=SAVED R3M ; 10(SP)=SAVED R2E ; 06(SP)=SAVED R1O ; 04(SP)=SAVED R0F) ; 02(SP)=RETURN ADDRESS FOR SYSTEM EXIT  ; 00(SP)=104376A ; ; OUTPUTS: ; B ; THE USER IS CALLED BACK ON THE SYSTEM STACK WITH ALL REGISTERSB ; PRESERVED. TO RETURN TO TASK LEVEL THE CALLER MERELY EXECUTES ; A RETURN.  ;A? ; NOTE: PRIVILEGED TASKS MAY ONLY CALL $SWSTK FROM SUPERVISOR:; ; MODE IF BOTH SUPERVISOR MODE AND KERNEL DATA SPACE ARE ; ; SUPPORTED IN THE EXEC. FURTHERMORE, THEY MUST ONLY DOS+ ; SO WITH CODE RUNNING IN APRS 5, 6 & 7.V ;- - $SWSTK::BICB #357,(R3) ;SET INITIAL PS WORDO  .IF DF K$$DAS&S$$LIB4 + TST $STACK-2 ;CALL FROM SUPERVISOR MODE?A BMI 5$ ;IF MI NO% MOV SDSAR5,KDSAR5 ;COPY SUPERVISORE" MOV SDSAR6,KDSAR6 ;DATA MAPPING. MOV SISAR5,KINAR5 ;COPY SUPER INSTR MAPPING MOV SISAR6,KINAR6 ; MOV SISAR7,KINAR7 ;! BR 10$ ;FINISH IN COMMON CODEV  .ENDC  + 5$: MOV #UINAR5,R5 ;POINT TO USER I APR 5F  .IF DF K$$DAS  .IF DF U$$DAS 5 MOV UDSAR0-UINAR0(R5),KDSAR5 ;SET UP KERNEL DATA 5#  .IFF ; DF U$$DASW ( MOV (R5),KDSAR5 ;SET UP KERNEL DATA 5  .ENDC ; DF U$$DAS  .IFTF ; DF K$$DAS ) MOV (R5)+,KINAR5 ;SET UP KERNEL INST 5E  .IFT ; DF K$$DASA  .IF DF U$$DAS 5 MOV UDSAR0-UINAR0(R5),KDSAR6 ;SET UP KERNEL DATA 6;  .IFF ;DF U$$DAS ( MOV (R5),KDSAR6 ;SET UP KERNEL DATA 6  .ENDC ;DF U$$DASU  .ENDC ;DF K$$DAS   .IF DF K$$DAS&U$$DAS ) MOV (R5)+,KINAR6 ;SET UP KERNEL INST 6R) MOV (R5)+,KINAR7 ;SET UP KERNEL INST 7F  .IFFW ( MOV (R5),KINAR6 ;SET UP KERNEL INST 6  .ENDC ;DF K$$DAS&U$$DAS  ) 10$: MOV -(R3),R5 ;PICK UP TRAP PC WORDU  .IF DF U$$DAS!K$$DAS&S$$LIB 4 MFPI (R5)+ ;GET ADDRESS FOR RETURN TO USER STATE0 MOV (SP)+,(R3) ;FROM CORRECT SPACE AND SET IT ! .IFF ; DF U$$DAS!K$$DAS&S$$LIBR 7 MOV (R5)+,(R3) ;SET ADDRESS FOR RETURN TO USER STATE  " .ENDC ; DF U$$DAS!K$$DAS&S$$LIB % MOV R5,(SP) ;SET CALLER'S ADDRESSM MOV -(R3),R5 ;RESTORE R5L MOV 12(SP),R3 ;RESTORE R3 ;+ ; ** W A R N I N G **  ;6 ; SPM HOOKPOINT NUMBER 70. ; + ; DO NOT CHANGE THE INSTRUCTION FOLLOWINGR ; LABEL WITHOUT CHECKING SPM ;- - $SPH7000xwtbl==. ;SPM CHANGES THE INSTRUCTION ATR!! ;THE LOCATION OF THIS LABELR" !# CALLR @(SP)+ ;CALL THE CALLERU$ % ;+(& ; **-$LSUPD-LOAD SUPERVISOR DATA SPACE' ;FC( ; THIS ROUTINE IS CALLED BEFORE TRANSFERRING CONTROL TO A TASK INA) ; SUPERVISOR MODE TO LOAD SUPERVISOR D SPACE FROM USER I SPACE.L* ;M + ; INPUTS:;, ;R - ; NONE.. ;* / ; OUTPUTS:0 ;1 ; R2 AND R3 ARE PRESERVED.2 ;-3 4 5 .IF DF S$$LIB6 D7 $LSUPD::BIC #^CPSMODE&PMODE,PS ;SWITCH PREVIOUS MODE TO SUPERVISOR/8 $LSUP1:: ;GLOBAL ENTRY WHICH DOESN'T AFFECTT9 ;MODE BITS IN THE PSW .: LSUPD1: BIS #10,SR3 ;ENABLE CSM INSTRUCTION'; MOV #UISDR0,R0 ;POINT TO USER D PDR0(< MOV #SDSDR0,R1 ;POINT TO SUPER D PDR0%= MOV R3,-(SP) ;SAVE A WORK REGISTERU> ? .IF DF X$$HDR@ .A MOV KISAR6,-(SP) ;SAVE CURRENT EXEC MAPPING/B MOV $SAHDB,KISAR6 ;MAP TO HEADER IF EXTERNALC D .IFTF ; DF X$$HDRE ,F MOV $SAHPT,R3 ;GET ADDRESS OF TASK HEADER'G MOVB H.SMAP(R3),R3 ;GET MAPPING MASK #H BNE 30$ ;IF NE MAPPING IS MIXEDBI HJ ; THIS SECTION HANDLES THE UNMIXED CASE (ALL SUPER D MAPPED TO USER D)/K ; IN STRAIGHT LINE CODE FOR PERFORMANCE SAKE. L 4M 10$: MOV (R0)+,(R1)+ ;COPY USER I TO SUPER D SPACEN MOV (R0)+,(R1)+ ;O MOV (R0)+,(R1)+ ;P MOV (R0)+,(R1)+ ;Q MOV (R0)+,(R1)+ ;R MOV (R0)+,(R1)+ ;S MOV (R0)+,(R1)+ ;T MOV (R0),(R1) ;U CMP R1,#SDSAR7 ;DONE YET?V BEQ 20$ ;IF EQ YES'W MOV #UISAR0,R0 ;POINT TO USER I APR0(X MOV #SDSAR0,R1 ;POINT TO SUPER D APR0Y BR 10$ ;PERFORM COPYZ 20$:[ .IFT ; DF X$$HDRI\ 2] MOV (SP)+,KISAR6 ;RESTORE PREVIOUS EXEC MAPPING^ _ .IFTF ; DF X$$HDR` &a MOV (SP)+,R3 ;RESTORE WORK REGISTER b RETURN ;Yc Gd ; THIS SECTION HANDLES THE MIXED CASE WHERE SOME OF SUPER D IS MAPPED(Be ; TO USER D AND SOME IS MAPPED TO SUPER I BY INTERPRETING H.SMAPf *g 30$: MOV R2,-(SP) ;SAVE ANOTHER REGISTER-h MOV #SISDR0,R2 ;POINT TO SUPER I REGISTERSI2i BIS #100000,R3 ;SET DONE FLAG BIT INTO REGISTER*j ASLB R3 ;ADJUST REGISTER FOR FACT THAT*k ;BIT ZERO OF MAP CORRESPONDS TO APR1)l 40$: ASR R3 ;CHECK NEXT BIT (NEXT APR)G-m BCC 50$ ;IF CC NEXT APR MAPS USER D SPACE 7n MOV SISAR0-SISDR0(R2),SDSAR0-SDSDR0(R1) ;SET ADDRESSI)o MOV (R2)+,(R1)+ ;SET ACCESS AND LENGTHE$p TST (R0)+ ;ADJUST USER D POINTERq BR 60$ ;ON TO NEXT ONE;r 50$: MOV UISAR0-UISDR0(R0),SDSAR0-SDSDR0(R1) ;SET ADDRESST)s MOV (R0)+,(R1)+ ;SET ACCESS AND LENGTHI%t TST (R2)+ ;ADJUST SUPER I POINTERGu 60$: TSTB R3 ;MORE TO GO ? v BPL 40$ ;IF PL YES"w MOV (SP)+,R2 ;RESTORE REGISTERSx y .IFT ; DF X$$HDRRz 2{ MOV (SP)+,KISAR6 ;RESTORE PREVIOUS EXEC MAPPING| } .ENDC ; DF X$$HDR~  MOV (SP)+,R3 ;FOR RETURND RETURN ;D   .ENDC   ;+? ; **-CKMAP-CHECK TASK MAPPING TO DETERMINE IF IT CAN RUN NOW.0 ;NF ; THIS ROUTINE DETERMINES IF THERE ARE MULTIPLE RUNNING TASKS MAPPED ; TO THE SAME REGION.E ;E ; INPUTS:I ;TC ; R2=HEADER ADDRESS FOR TASK BEING TESTED FOR ELIGIBILITY TO RUN. @ ; R5=TCB ADDRESS FOR TASK BEING TESTED FOR ELIGIBILITY TO RUN. ; ; OUTPUTS: ;M ; C=0 IF TASK CAN RUN NOW.> ; C=1 IF TASK CANNOT RUN NOW BECAUSE THERE ARE OTHER RUNNING; ; TASKS MAPPED TO A REGION WHICH THIS TASK IS MAPPED TO. ;* ;- $CKMAP::   .IF DF M$$PRO & CLR -(SP) ;ASSUME TASK CAN RUN NOW MOV R0,-(SP) ;SAVE REGISTERSA MOV R1,-(SP) ;T MOV R2,-(SP) ;  MOV R3,-(SP) ;  MOV R4,-(SP) ;D  .IF DF X$$HDR ) MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGE  .IFTF ; DF X$$HDR < MOV H.WND(R2),R0 ;POINT TO # OF WINDOWS IN TASK TO BE RUN- MOV (R0)+,-(SP) ;GET THE NUMBER OF WINDOWSC  10$: ;REFERENCE LABEL .IFT ; DF X$$HDRR 2 MOV #$DICSV,R3 ;POINT TO INTERMEDIATE SAVE AREA$ MOV R0,(R3)+ ;SAVE WINDOW ADDRESS   .REPT C / MOV (R0)+,(R3)+ ;COPY ADDR WNDW TO SAVE AREAR  .ENDR 6 SUB #W.BLGH,R3 ;POINTER TO BEGINNING OF WINDOW AREA+ MOV R3,R0 ;POINT TO WINDOW IN SAVE AREAS   .IFTF ; D00xHxtkTADATADATADATADATADATAF X$$HDR  TST (R0) ;IS WINDOW MAPPED?) BEQ 90$ ;IF EQ NOO   .IFTF ; DF X$$HDR / MOV #M$$PRO,R1 ;GET THE NUMBER OF PROCESSORS % MOV #$TKTAB,R2 ;POINT TO TCB TABLE) 20$: MOV (R2)+,R3 ;GET NEXT TCB ADDRESSE3 BEQ 80$ ;IF EQ THERE IS NO CURRENT TASK ON PROC CMP R5,R3 ;IS THIS OUR TCB?M BEQ 80$ ;IF EQ YES SKIP IT= BIT #T4.SNC,T.ST4(R3) ;DOES TASK SYNCHRONIZE THRU COMMONS?E BEQ 80$ ;IF EQ NO/ BIT #^C,T.STAT(R3) ;IS TASK BLOCKED? BNE 80$ ;IF NE YES? BIT #T2.STP!T2.WFR,T.ST2(R3) ;IS TASK STOPPED OR IN WAITFOR?  BNE 80$ ;IF NE YES3 MOV T.PCB(R3),R3 ;GET ADDRESS OF TASK REGION PCBR  .IFT ; DF X$$HDRI , MOV P.REL(R3),KISAR6 ;MAP EXTERNAL HEADER, MOV P.HDR(R3),R3 ;GET TASK HEADER ADDRESS( BNE 25$ ;IF NE, TASK HAS POOL HEADER4 MOV #140000,R3 ;OTHERWISE, TASK HAS EXTRNL HEADER 25$: ;REFERENCE LABEL  .IFF ; DF X$$HDR / MOV P.HDR(R3),R3 ;GET ADDRESS OF TASK HEADER   .IFTF ; DF X$$HDR / MOV H.WND(R3),R3 ;POINT TO NUMBER OF WINDOWS - MOV (R3)+,-(SP) ;GET THE NUMBER OF WINDOWSE0 30$: CMP (R0),(R3) ;MAPPED TO THE SAME REGION? BNE 70$ ;IF NE NO ? CMP W.BOFF(R0),W.BOFF(R3) ;DOES TASK TO BE RUN HAVE A REGIONM* ;WHICH OVERLAPS THE REGION OF A TASK$ ;RUNNING ON ANOTHER PROCESSOR? BEQ 60$ ;IF EQ YES BHI 50$ ;IF HI MAYBE< MOV W.BOFF(R0),R4 ;SAVE REGION OFFSET FOR TASK TO BE RUN2 ADD W.BSIZ(R0),R4 ;CALCULATE END OF MAPPED AREA' CMP R4,W.BOFF(R3) ;REGIONS OVERLAP?D BHI 60$ ;IF HI YES" BR 70$ ;REGIONS DO NOT OVERLAP= 50$: MOV W.BOFF(R3),R4 ;GET REGION OFFSET FOR RUNNING TASKA2 ADD W.BSIZ(R3),R4 ;CALCULATE END OF MAPPED AREA* CMP R4,W.BOFF(R0) ;DO REGIONS OVERLAP? BLOS 70$ ;IF LOS NOP9 60$: INC 16(SP) ;INDICATE OVERLAP, TASK CANNOT RUN NOW? TST (SP)+ ;CLEAN THE STACK BR 100$ ;Y; 70$: ADD #W.BLGH,R3 ;POINT TO NEXT WINDOW IN RUNNING TASKR DEC (SP) ;ANY MORE WINDOWS?T BNE 30$ ;IF NE YES TST (SP)+ ;CLEAN THE STACK8 80$: SOB R1,20$ ;CONTINUE SCAN WITH NEXT RUNNING TASK  .IFF ; DF X$$HDRF = 90$: ADD #W.BLGH,R0 ;POINT TO NEXT WINDOW OF TASK TO BE RUN4  .IFT ; DF X$$HDR  A 90$: MOV 2(SP),KISAR6 ;RESTORE POSSIBLE MAPPING TO XTRNL HEADERN3 ADD #W.BLGH,-(R0) ;SET UP POINTER TO NEXT WINDOW  MOV (R0),R0 ;P  .IFTF ; DF X$$HDR  DEC (SP) ;ANY MORE WINDOWS?I BNE 10$ ;IF NE YES# 100$: TST (SP)+ ;CLEAN THE STACKN  .IFT ; DF X$$HDRE - MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING,  .ENDC ; DF X$$HDR " MOV (SP)+,R4 ;RESTORE REGISTERS MOV (SP)+,R3 ;# MOV (SP)+,R2 ;  MOV (SP)+,R1 ;  MOV (SP)+,R0 ;.5 ROR (SP)+ ;CLEAN STACK AND RETURN STATUS IN CARRYP  RETURN ;   .ENDC   .ENDH,-(R0) ;SET UP POINTER TO NEXT WINDOW  MOV (R0),R0 ;P  .IFTF ; DF X$$HDR  DEC (SP) ;ANY MORE WINDOWS?I BNE 10$ ;IF NE YES# 100$: TST (SP)+ ;CLEAN THE STACKN  .IFT ; DF X$$HDRE - MOV (SP)+,KISAR6 ;RESTO .TITLE TDSCHS .IDENT /13.03/2;)I; COPYRIGHT (c) 1982, 1983, 1984, 1985 BY DIGITAL EQUIPMENT CORPORATION.S; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;T; D. N. CUTLER 11-AUG-73;+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY: ;E; J. R. KAUFFMAN; T. M. MARTIN; B. S. MCCARTHY;1+; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 BY:R;R; B. S. MCCARTHY; J. W. BERZLE; L. B. MCCULLEY; C. A. SILVER; J. R. KAUFFMAN;; MODIFIED BY:; ; J. W. BERZLE 04-APR-86 13.00;E<; JWB170 -- CORRECT UIC FOR TASK RUNNING OUT OF CLOCK QUEUE;R ; B. S. MCCARTHY 15-DEC-86 13.01;Y7; BM379 -- DON'T DECLARE S.E. IN ROUND ROBIN SCHEDULERF"; UNLESS THE CURRENT TASK MOVES.;U; K. L. NOEL 15-DEC-86 13.02;P7; KLN030 -- SET INTERRUPT ENABLE BIT ON WATCHDOG TIMERN; ; K. L. NOEL 08-JUN-87 13.03;R+; KLN053 -- ADD SUPPORT FOR TICK INCREMENTC;T/; TIME DEPENDENT SCHEDULING AND DEVI00HxwtblCE TIME OUTV;; MACRO LIBRARY CALLS ;I* .MCALL CLKDF$,HDRDF$,HWDDF$,TCBDF$,PCBDF$2 CLKDF$ ;DEFINE CLOCK QUEUE CONTROL BLOCK OFFSET% HDRDF$ ;DEFINE TASK HEADER OFFSETSE$ HWDDF$ ;DEFINE HARDWARE REGISTERS .IF DF R$$PRO .MCALL UPTUP$ ;UPTIME UPDATE .ENDC ; DF R$$PRO  .IF DF N$$DIR- .MCALL LNMDF$' LNMDF$ ;DEFINE CONTEXT BLOCK OFFSETSO I .ENDC ;DF N$$DIRO, TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS1 PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS ;+; **-$CKINT-CLOCK INTERRUPTI;RD; THIS ROUTINE IS ENTERED AS THE RESULT OF A CLOCK INTERRUPT. $INTSVC; IS CALLED TO SAVE REGISTERS R4 AND R5 AND $INTCT IS INCREMENT. IFE@; THE RESULT IS NONZERO, THEN A JUMP TO $INTXT IS EXECUTED. ELSEA; A FORK IS EXECUTED SO THAT PENDING CLOCK INTERRUPTS CAN BE PRO-D ; CESSED.;-$CKINT:: ;;;REFERENCE LABEL  .IF NDF K$$DAST- JSR R5,$INTSE ;;;CALL INTERRUPT SAVE ROUTINE ) .WORD ^C&PR7 ;;;NEW PRIORITY IS PR5N .IFF ; NDF K$$DAS1 MOV R5,-(SP) ;MIMIC ACTIONS OF $DIRSV TO PREVENT( MOV R4,-(SP) ;WASTE TIME ON I/D SYSTEMS DEC $STKDP ;;;SWITCH STACKS ?C45$: BIC #^C&PR7,@#PS ;;;DROP TO DEVICE PRIORITY+ CACHE$ SAVE ;;;SAVE BYPASS STATE OF CACHEP7 MOV #$INTSF,-(SP) ;;;PUSH ADDRESS OF EXEC EXIT ROUTINET .ENDC ; DF K$$DAS .IF DF K$$W11* MOV #103,K$$W11 ;;;ENABLE AND START TIMER .ENDC .IF DF P$$3XX+ TST @$CKCSA ;;;ENSURE CLOCK ISN'T LONESOM< ;;;(IF WE'RE ON A PRO-3XX) .ENDC ; DF P$$3XX .IF DF M$$PRO T " CALL $STTIC ;UPDATE SANITY TIMER* BIT $CKURM,@$CPURM ;DO WE MAINTAIN CLOCK? BEQ 7$ ;IF EQ NO -- EXIT  .IFTF + MOV #$INTCT,R4 ;;;POINT TO INTERRUPT COUNTM' INC (R4) ;;;INCREMENT INTERRUPT COUNTE BEQ 10$ ;;;IF EQ FORKD .IFT $ 7$: ;;;REFERENCE LABEL  .ENDC RETURN ;;;EXIT FROM INTERRUPT!10$: CALL $FORK0 ;;;EXECUTE FORK;C/; UPDATE ABSOLUTE AND REAL TIME OF DAY AND DATE ;;+; ** W A R N I N G **T;R; SPM HOOKPOINT NUMBER 67.;I); DO NOT CHANGE THE INSTRUCTION FOLLOWING ; LABEL WITHOUT CHECKING SPM;-+$SPH67==. ;SPM CHANGES THE INSTRUCTION ATM ;THE LOCATION OF THIS LABELP4UPTIM: MOV #$TKPS+2,R4 ;POINT PAST CONVERSION VECTOR0 MOV #$TTNS+2,R5 ;POINT PAST CURRENT TIME VECTOR#10$: MOV #$TTNS-10,R2 ;POINT TO DAY  INC -(R5) ;UPDATE A COUNTER CMP -(R4),(R5) ;EXCEEDED LIMIT? BHI 20$ ;IF HI NOC CLR (R5) ;RESET COUNTERL( CMP R5,R2 ;CHECK FOR LAST DAY OR MONTH BHI 10$ ;IF HI NO & INC (R5) ;DAY AND MONTH ARE 1 ORIGIN BCS 10$ ;IF CS NOT DAY MOV -(R2),R1 ;GET CURRENT MONTH5 MOVB $DYPMN-1(R1),R0 ;GET DAYS FOR NEXT MONTH PLUS 1+ MOV R0,(R4) ;MOVE TO DAYS PER MONTH LIMITV* DEC R1 ;IS CURRENT MONTH ENDING JANUARY? BNE 10$ ;IF NE NON# BIT #3,-(R2) ;IS THIS A LEAP YEAR?# BNE 10$ ;IF NE NO ' INC (R4) ;INCREMENT DAYS FOR FEBRUARYP BR 10$ ;20$: ;REFERENCE LABEL .IF DF R$$PRO) DEC $NVRTM ;TIME TO UPDATE O/S UPTIME ?R BNE 25$ ;IF NE NOB UPTUP$ ;UPDATE UPTIME25$: ;REFERENCE LABEL .ENDC ; DF R$$PRO) TST $SHFTM ;SHF TIMER ALREADY EXPIRED ? BEQ 30$ ;IF EQ, YES 3 DEC $SHFTM ;DECREMENT TIMER BLOCKING SHF REQUESTSO.30$: INC $ABTIM ;UPDATE ABSOLUTE TIME COUNTER BNE TDS ;IF NE NO OVERFLOW6 INC $ABTIM-2 ;COUNT OVERFLOW IN SECOND WORD OF $ABTIM. MOV #$CLKHD,R0 ;POINT TO CLOCK QUEUE LISTHEAD,40$: MOV (R0),R0 ;GET ADDRESS OF NEXT ENTRY BEQ TDS ;IF EQ NO MORE IN LIST( DEC C.TIM+2(R0) ;ADJUST HIGH ORDER TIME BR 40$ ;;P; TIME DEPENDENT SCHEDULINGR;RTDS: ;REFERENCE LABEL O  .IF DF M$$PRO I' MOV KISAR6,-(SP) ;SAVE MAPPING POINTER CLR KISAR6 ;POINT TO REAL ZERO) INC @#140110 ;BUMP ABSOLUTE LOCATION 110;* MOV (SP)+,KISAR6 ;RESTORE MAPPING POINTER N .IFFL  INC @$CKINC ;BUMP TICKER3 ;ABSOLUTE LOCATION 110 OR TPR5 IF CPR ON KXJ-11  .ENDC  T, MOV $CLKHD,R4 ;GET ADDRESS OF NEXT IN QUEUE BEQ 11$ ;IF EQ, NONE IN LIST* TST C.TIM+2(R00HxxtkTADATADATADATADATADATA4) ;HIGH ORDER PART NONZERO? BNE 11$ ;IF NE, YES" CMP $ABTIM,C.TIM(R4) ;TIME TO GO? BLO 11$ ;IF LO, NO/ MOV (R4),$CLKHD ;REMOVE ENTRY FROM CLOCK QUEUE * MOVB C.RQT(R4),R5 ;GET ENTRY REQUEST TYPE+ ADD R5,PC ;DISPATCH TO PROCESSING ROUTINEC10$: BR 20$ ;MARK TIME REQUESTS/ BR 30$ ;TASK REQUEST WITH PERIODIC RESCHEDULEC" BR 30$ ;SINGLE SHOT TASK REQUEST2 BR 12$ ;SINGLE SHOT INTERNAL SUBROUTINE (C.SYST)* BR 15$ ;SINGLE SHOT INTERNAL SUBROUTINE ;1); CLEAR STOP BIT AND REALLOCATE PARTITION;;H& MOV C.TCB(R4),R0 ;PICK UP TCB ADDRESS6 CALL $EXRQN ;CLEAR STOP BIT AND REALLOCATE PARTITION BR TDS ;&11$: JMP DVOUT ;JUMP TO DEVICE TIMOUT;V*; SINGLE SHOT INTERNAL SUBROUTINE (TYPE 6);,0; THIS SECTION HANDLES URM SPECIFIC CLOCK BLOCKS12$: ;REFERENCE LABEL .IF DF M$$PRO7 MOV #TDS,-(SP) ;PUSH RETURN ADDRESS FROM EITHER DRIVER, ;(IF WE'RE NOW ON CORRECT CPU) OR $FORK0 ;(IF WE'RE NOT)E; BIT C.URM(R4),@$CPURM ;ARE WE ALREADY ON CORRECT PROCESSORC, BNE 17$ ;IF NE YES, GO CALL THE DRIVER AND ;CONTINUE CLQ SCAN! TST (R4)+ ;POINT PAST LINK WORDE4 MOV C.URM-C.RQT(R4),(R4)+ ;PUT URM IN CORRECT PLACE6 CMP (R4)+,(R4)+ ;POINT PAST LINK AND PC IN FORK BLOCK% CALL $FORK0 ;GET TO RIGHT PROCESSORS$ MOV R3,R4 ;COPY FORK BLOCK POINTER6 SUB #C.TIM,R4 ;POINT BACK TO BEGINNING OF CLOCK BLOCK BR 17$ ;GO MAP DRIVER AND CALL;(G; SINGLE SHOT INTERNAL SUBROUTINE (TYPE 8, ALSO TYPE 6 ON UNIPROCESSOR)R;@ .IFTF ;DF M$$PROY15$: ;REFERENCE LABEL .IFT ;DF M$$PRO6 MOV #TDS,-(SP) ;PUSH RETURN ADDRESS TO SCAN CLQ AGAIN .IFTF ;DF M$$PROE317$: MOV KINAR5,-(SP) ;SAVE KERNEL INSTR ADDR REG 5 ( + .IF DF K$$DAS L. MOV KDSAR5,-(SP) ;SAVE KERNEL DATA ADDR REG 5/ MOV C.AR5(R4),KDSAR5 ;MAP DRIVER IN DATA SPACEI R .IFTF I0 MOV C.AR5(R4),KINAR5 ;MAP DRIVER IN INSTR SPACE;+; ** W A R N I N G **L;; SPM HOOKPOINT NUMBER 66.;O); DO NOT CHANGE THE INSTRUCTION FOLLOWINGR; LABEL WITHOUT CHECKING SPM;-+$SPH66==. ;SPM CHANGES THE INSTRUCTION ATV ;THE LOCATION OF THIS LABELT+ CALL @C.SUB(R4) ;CALL SYSTEM SUBROUTINE V N .IFTP S1 MOV (SP)+,KDSAR5 ;RESTORE KERNEL DATA ADDR REG 5D  .ENDC S ,2 MOV (SP)+,KINAR5 ;RESTORE KERNEL INSTR ADDR REG 5 .IFT ;DF M$$PRO RETURN ;R .IFF ;DF M$$PRO BR TDS ; P .ENDC ;DF M$$PROE; ; MARK TIME REQUEST;520$: MOV C.SRC(R4),R0 ;PICK UP EVENT FLAG MASK WORD U3 MOV C.DST(R4),R1 ;PICK UP EVENT FLAG MASK ADDRESS ) MOV C.TCB(R4),R5 ;PICK UP TCB ADDRESS V1 CALL $SETMG ;SET EFN AND UNLOCK IF GROUP GLOBALB# CLR R5 ;RESET CLOCK BLOCK TYPE * MOV C.AST(R4),R3 ;GET AST TRAP ADDRESS ! BEQ 40$ ;IF EQ NO AST SPECIFIED" MOVB C.EFN(R4),R2 ;GET EFN NUMBER. MOV R4,R1 ;COPY ADDRESS OF CLOCK QUEUE ENTRY* TST (R4)+ ;POINT TO CONTROL BLOCK LENGTH3 MOV #C.LGTH,(R4)+ ;SET LENGTH OF AST CONTROL BLOCK5 MOV #8.*2,(R4)+ ;SET BYTES TO ALLOCATE ON TASK STACKW& MOV R3,(R4)+ ;INSERT AST TRAP ADDRESS+ MOV #1,(R4)+ ;SET NUMBER OF AST PARAMETERS * MOV R2,(R4) ;INSERT EFN AS AST PARAMETER CALL $QASTT ;QUEUE AST TO TASK BR TDS ; ; ; SCHEDULE REQUEST; +30$: MOV C.TCB(R4),R0 ;GET TASK TCB ADDRESSS .IF NDF N$$DIR " MOV C.UIC(R4),R1 ;GET REQUEST UIC .IFF  R' TSTB C.NAM(R4) ;IS THERE A UIC OR CTX I, BNE 35$ ;IF NE, GET UIC FROM CONTEXT BLOCK" MOV C.UIC(R4),R1 ;GET REQUEST UIC BR 37$ ;035$: MOV C.CTX(R4),R1 ;GET CONTEXT BLOCK POINTER' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING,! MOV R1,KISAR6 ;MAP CONTEXT BLOCK $ TSTB C.DDSL+140000 ;IS THERE A DDS?! BEQ 36$ ;IF EQ, DON'T PROPAGATE ( MOV R1,$CTXPT ;PROPAGATE CONTEXT BLOCK)36$: MOV C.CUIC+140000,R1;GET REQUEST UICT" MOV (SP)+,KISAR6 ;RESTORE MAPPING37$: ;REFERENCE LABEL .ENDC ;NDF N$$DIR R T .IF DF A$$CNT H. MOV C.UAB(R4),$CKUAB ;GET UAB TO BILL TASK TO C .IFTF K% CALL $TSKRT ;REQUEST TASK EXECUTIONB 7 .IFT5 M- CLR $CKUAB ;DO NOT NEED UAB ADDRESS ANYMOREV S .ENDC S 040$: MOV R4,R0 ;SET ADDRESS OF BLOCK TO REL00HxwtblEASE# CMPB #C.SCHD,R5 ;PERIODIC REQUEST?D BEQ 50$ ;IF EQ YES3 CALL $DCLKA ;DEALLOCATE CLQ BLOCK WITH ACCOUNTINGB JMP TDS ;V450$: MOV C.RSI+2(R0),R1 ;SET HIGH ORDER PART OF TIME- MOV C.RSI(R0),R2 ;SET LOW ORDER PART OF TIME. MOV R5,R4 ;SET REQUEST TYPED .IF DF N$$DIR& TSTB C.NAM(R0) ;IS THERE A UIC OR CTX* BEQ 55$ ;IF EQ, NO CONTEXT BLOCK POINTER1 BIS #100000,R4 ;SET HIGH BIT TO INDICATE CTX PTRN55$: ;REFERENCE LABEL .ENDC ;DF N$$DIR2 MOV C.TCB(R0),R5 ;SET ADDRESS OF REQUEST TASK TCB, CALL $CLINS ;REINSERT ENTRY IN CLOCK QUEUE JMP TDS ;L;L; DEVICE TIME OUT ;C&DVOUT: TST $TTNS ;ONE SECOND ELAPSED? BNE ROBIN ;IF NE NOGC MOV #$SCDVT,-(SP) ;SET ADDRESS OF DEVICE TABLE SCANNING CO-ROUTINE'10$: CALL @(SP)+ ;GET NEXT UCB ADDRESS  BCS ROBIN ;IF CS END OF TABLER% MOV S.KRB(R4),R2 ;GET KRB ADDRESS N BEQ 11$ ;IF EQ NO KRB#, MTPS K.PRI(R2) ;;;SET THE DEVICE PRIORITY !11$: TSTB U.STS(R5) ;;;UNIT BUSY?F BPL 20$ ;;;IF PL NO R" TSTB S.CTM(R4) ;;;TIMEOUT ACTIVE? BEQ 20$ ;IF EQ NOR .IF DF M$$PRO7 CMPB #377,S.CTM(R4) ;WAITING FOR INTERPROCESSOR FORK ?T+ BEQ 20$ ;IF EQ YES, DON'T TOUCH INTERLOCKI .ENDC ; DF M$$PRO* DECB S.CTM(R4) ;;;DECREMENT TIMEOUT COUNT% BNE 20$ ;;;IF NE -- MORE TIME TO GO  ;R6; DRIVER HAS TIMED OUT. CALL HIM AT HIS TIMEOUT ENTRY.;G K A .IF DF M$$PRO $/ DECB S.CTM(R4) ;;;SET TIMED OUT FLAG FOR LATERC" MOV #12$,R3 ;;;SET UP FOR $EXDOP, CALL $EXDOP ;;;CALL ROUTINE TO CALL DRIVER .;(A; AT THIS POINT, IF DOESNT HAVE A KRB ADDRESS, THEN HE WAS CALLEDC"; BECAUSE OF THE WAY $EXDOP WORKS.;O S20$: MTPS #0 ;;;LOWER PRIORITY  BR 10$ ;GO BACK FOR MORE C D;$:; INTERNAL SUBROUTINE TO CALL DRIVER AT HIS TIMEOUT ENTRY.<; THIS SUBROUTINE IS EXECUTED ON THE CPU TO WHICH THE DRIVER; IS ATTACHED.;I U&12$: MOV (R5),R3 ;RESTORE DCB ADDRESS" MOV S.KRB(R4),R2 ;GET KRB ADDRESS BEQ 13$ ;IF EQ NO KRB,$ MTPS K.PRI(R2) ;SET DEVICE PRIORITY'13$: TSTB U.STS(R5) ;;;UNIT STILL BUSY?' BPL 30$ ;;;IF PL NO -- DON'T CALL HIMR2 TSTB S.CTM(R4) ;;;DO WE STILL SHOW HIM TIMED OUT?' BPL 30$ ;;;IF PL NO -- DON'T CALL HIMP% CLRB S.CTM(R4) ;;;SHOW HIM TIMED OUTC D .ENDC E L; MOV #IE.DNR&377,R0 ;;;SET DEVICE NOT READY STATUS FOR DRVRO9 MOV D.DSP(R3),R1 ;;;GET ADDRESS OF DRIVER DISPATCH TABLEC1 MOV KINAR5,-(SP) ;;;SAVE KERNEL INSTR ADDR REG 5S M S .IF DF K$$DAS B0 MOV KDSAR5,-(SP) ;;;SAVE KERNEL DATA ADDR REG 5 S .IFTF R+ MOV D.PCB(R3),R3 ;;;GET DRIVER PCB ADDRESSY) BEQ 15$ ;;;IF EQ DRIVER IS PART OF EXECR6 MOV P.REL(R3),KINAR5 ;;;MAP THE DRIVER IN INSTR SPACE 3 .IFTI L5 MOV P.REL(R3),KDSAR5 ;;;MAP THE DRIVER IN DATA SPACEE U .IFTF N(15$: TST R2 ;;;IS THERE A KRB ADDRESS  BEQ 17$ ;;;IF EQ NO V- MOVB K.CON(R2),R3 ;;;GET CONTROLLER INDEX D# MOV (R2),R2 ;;;GET CSR ADDRESS S I;R8; CALL DRIVER AT TIMEOUT ENTRY POINT WITH THE ARGUMENTS:;;$; R0=DEVICE TIMEOUT STATUS 'IE.DNR'.; R2=ADDRESS OF DEVICE CSR.G; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK.'; R5=ADDRESS OF THE UNIT CONTROL BLOCK.N;S+; IF S.KRB=0 THEN R2, R3 ARE UNDEFINED R ; ;+; ** W A R N I N G **;:; SPM HOOKPOINT NUMBER 64.;E); DO NOT CHANGE THE INSTRUCTION FOLLOWINGO; LABEL WITHOUT CHECKING SPM;-+$SPH64==. ;SPM CHANGES THE INSTRUCTION AT  ;THE LOCATION OF THIS LABELT)17$: CALL @D.VOUT(R1) ;;;ENTER DRIVER C I .IFTT S3 MOV (SP)+,KDSAR5 ;;;RESTORE KERNEL DATA ADDR REG 5L  .ENDC 4 D4 MOV (SP)+,KINAR5 ;;;RESTORE KERNEL INSTR ADDR REG 5 N C .IF DF M$$PRO !30$: MTPS #0 ;;;ALLOW INTERRUPTSN RETURN  .IFF !20$: MTPS #0 ;;;ALLOW INTERRUPTS BR 10$ ;GO FOR SOME MORE  .ENDC T;G(; EXECUTIVE LEVEL ROUND ROBIN SCHEDULING; ROBIN: ;REF LABEL .IF DF R$$NDC DEC $RNDCT ;TIME TO SCHEDULE?T BNE SWAP ;IF NE NO5 MOV $RNDC,$RNDCT ;RESET CLOCK TICKS TO NEXT INTERVALT1 MOV #SWAP,-(SP) ;ASSUME DIRECT EXIT TO DISK SWAP  .IF DF M$$PRO1 M00HxxtkTADATADATADATADATADATAOV #60$,-(SP) ;THIS WILL PREVENT MULTIPLE CALLSD( ;TO $DRDSE IF MULTIPLE RUNNING TASKS ;ARE MOVED.W .ENDC ; DF M$$PRO5 MOV #$ACTHD-T.ACTL,R1 ;SET ADDRESS OF PREVIOUS ENTRY /10$: MOV R1,R0 ;SAVE ADDRESS OF PREVIOUS ENTRYX- MOV T.ACTL(R0),R1 ;GET ADDRESS OF NEXT ENTRYI BEQ 60$ ;IF EQ END OF LIST) CMPB $RNDH,T.PRI(R1) ;PRIORITY IN RANGE? BLO 10$ ;IF LO NO-20$: CMPB $RNDL,T.PRI(R1) ;PRIORITY IN RANGE?T BHI 60$ ;IF HI NOS  .IF NDF M$$PRO  TST T.STAT(R1) ;TASK BLOCKED? .IFF D + BIT #^CTS.RUN,T.STAT(R1) ;TASK BLOCKED? C  .ENDC  BNE 30$ ;IF NE YES& BIT #T2.SPN!T2.STP!T2.WFR,T.ST2(R1) ; BEQ 40$ ;IF EQ NO0+30$: MOV R1,R0 ;SAVE ADDRESS OF LAST ENTRYI- MOV T.ACTL(R0),R1 ;GET ADDRESS OF NEXT ENTRYT BR 20$ ;40$: TST T.ACTL(R1) ;NULL TASK?  BEQ 60$ ;IF EQ YES .IF NDF M$$PROI+ CMP R1,$TKTCB ;ABOUT TO MOVE CURRENT TASK?N BNE 45$ ;IF NE NO 2 MOV #$DRDSE,-(SP) ;FORCE SIGNIFICANT EVENT AT END .IFF ; NDF M$$PRO7 BIT #TS.RUN,T.STAT(R1) ;TASK RUNNING ON SOME PROCESSOR  BEQ 45$ ;IF EQ NO 1 MOV #$DRDSE,(SP) ;FORCE SIGNIFICANT EVENT AT END2 .ENDC ; DF M$$PRO945$: MOV T.ACTL(R1),T.ACTL(R0) ;REMOVE TCB FROM TASK LIST MOV R1,R2 ;SAVE ADDRESS OF TCB& MOV R0,R1 ;SET ADDRESS OF LAST ENTRY+50$: MOV R1,R0 ;SAVE ADDRESS OF LAST ENTRY - MOV T.ACTL(R0),R1 ;GET ADDRESS OF NEXT ENTRYB2 CMPB T.PRI(R1),T.PRI(R2) ;IN SAME PRIORITY CLASS? BEQ 50$ ;IF EQ YES/ MOV R2,T.ACTL(R0) ;SET ADDRESS OF NEXT IN LASTP8 MOV R1,T.ACTL(R2) ;SET ADDRESS OF NEXT IN REMOVED ENTRY& MOV R2,R0 ;SET ADDRESS OF LAST ENTRY BR 20$ ;260$: RETURN ;TO SWAP, WITH POSSIBLE INTERMEDIATE ;STOP AT $DRDSEC .ENDC;TF; DISK SWAPPING ALGORITHM - REDUCE SWAPPING PRIORITY OF RESIDENT TASKS;ESWAP: ;REF LABELM .IF DF S$$WPC L 1 DEC $SWPCT ;TIME TO MODIFY SWAPPING PRIORITIES?P BNE 70$ ;IF NE NO : MOV $SWPC,$SWPCT ;RESET CLOCK TICKS TO NEXT SWAP INTERVAL0 MOV $PARHD,R5 ;POINT TO PARTITION LIST LISTHEAD+10$: TST P.SUB(R5) ;ANY MORE SUBPARTITIONS? BEQ 20$ ;IF EQ NOE1 MOV P.SUB(R5),R5 ;POINT TO NEXT SUBPARTITION PCBW< BIT #PS.FXD!PS.CHK!PS.CKP!PS.CKR!PS.OUT!PS.COM,P.STAT(R5) ;1 BNE 10$ ;IF NE NOT CHECKPOINTABLE RESIDENT TASK ' MOV P.HDR(R5),R4 ;POINT TO TASK HEADER  .IF DF X$$HDR BNE 15$ ;IF NE RESIDENT HEADER- MOV P.REL(R5),KISAR6 ;MAP TO EXTERNAL HEADERS MOV #140000,R4 ;AND POINT TO IT .IFTF ; DF X$$HDR515$: CLR R0 ;CALCULATE THE MINIMUM SWAPPING PRIORITYR SUB $SWPR,R0 ;E .ENDC ; DF X$$HDR2 CMPB H.SPRI(R4),R0 ;SWAPPING PRIORITY AT MINIMUM? BLE 10$ ;IF LE YES* DECB H.SPRI(R4) ;REDUCE SWAPPING PRIORITY BR 10$ ;.20$: MOV P.MAIN(R5),R5 ;POINT BACK TO MAIN PCB" MOV R5,R0 ;COPY MAIN PCB POINTER. CALL $NXTSK ;ATTEMPT TO REALLOCATE PARTITION% MOV (R5),R5 ;POINT TO NEXT MAIN PCBD BNE 10$ ;IF NE THERE IS ONET70$: ;REF LABEL .ENDC;AP; EXIT TIME DEPENDENT SCHEDULE IF THERE ARE NOT REMAINING UNPROCESSED CLOCK TICK;P.TIMXT: DEC $INTCT ;ANY MORE TICKS TO PROCESS? BGE 10$ ;IF GE YES RETURN ; 10$: JMP UPTIM ;?;+ ; **-$NLTMO-NULL TIMEOUT ROUTINE;ED; THIS ROUTINE MAY BE SPECIFIED AS THE TIMEOUT ROUTINE IN A DRIVER'SG; DISPATCH TABLE. IT SIMPLY BYPASSES ALL UNITS ON THE CURRENT DCB WHENT ; CALLED.E;R ; INPUTS:V;5'; AS FOR NORMAL DRIVER TIMEOUT ROUTINE. ; ; OUTPUTS:;T?; CURRENT DCB IS NO LONGER CONSIDERED FOR CURRENT TIMEOUT SCAN.E;- $NLTMO:: ;REFERENCE LABELC .IF DF K$$DAS. CLR S$$SPC+4(SP) ;FORCE $SCDVT ON TO NEXT DCB .IFF ; DF K$$DASY. CLR S$$SPC+2(SP) ;FORCE $SCDVT ON TO NEXT DCB .ENDC ; DF K$$DAS2 INCB S.CTM(R4) ;RESET TIMEOUT COUNT FOR NEXT TIME RETURN ;  R R  .ENDTCH TABLE. IT SIMPLY BYPASSES ALL UNITS ON THE CURRENT DCB WHENT ; CALLED.E;R ; INPUTS:V;5'; AS FOR NORMAL DRIVER TIMEOUT ROUTINE. ; ; OUTPUTS:;T?; CURRENT DCB IS NO LONGER CONSIDERED FOR CURRENT TIMEOUT SCAN.E;-00xwtbl .TITLE TTATT5 .IDENT /06.14/d;s; COPYRIGHT (c) 1987 BY); DIGITAL EQUIPMENT CORPORATION, MAYNARD,,(; MASSACHUSETTS. ALL RIGHTS RESERVED.;VA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USEDCA; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSErA; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS,A; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR+A; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND;1; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERED.d;sA; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTDA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R;T; 09-FEB-78 PETER WANNHEDEN ;A; PREVIOUSLY MODIFIED BY:M;N; P. WANNHEDEN ; C. F. SPITZ ; D. R. DONCHINO; B. S. MCCARTHY ; T. LEKAS ; S. C. ADAMSS; R. S. PHILPOTT;S;R; MODIFICATION HISTORY:H;N; L. KOGAN 4-APR-86 6.046; LK709 -- FIX CONDITIONALS WHEN SF.SMC IS DEFINED AND; SF.GMC IS NOT DEFINEDE; ; L. KOGAN 18-JUN-86 6.05O1; LK710 -- INCLUDE 7-BIT CHARACTER LENGTH SUPPORT ; ; S.C. ADAMS 14-JUNE-86 6.06; SA459 -- FIX COMMENT IN MCOOB ; ; S. R. CLOUTIER 23-JUN-86 6.079;; ADD CALL TO LAT PORT DRIVER, ON DETACH, IF TERMINAL IS A; LAT APPLICATION TERMINAL.; ; S.C. ADAMS 5-AUG-86 6.08; SA464 -- ADD LAT 5.1 SUPPORT; ; S.C. ADAMS 5-AUG-86 6.09>; SA465 -- REMOVE RESTRICTION THAT TERMINAL CANNOT BE ATTACHEDB; FOR AST NOTIFICATION TO SET OTHER NOTIFICATION CHARACTERISTICS;; S. R. CLOUTIER 7-AUG-86 6.10A; SRC SUPPLY STATUS IE.DNR IN ROUTINE PPHNG BEFORE CALLING KILLO1S;-;; CHECK TO SEE IF I/O PACKET HAS BEEN TAKEN BY LAT PROCESSL!; IN PPHNG BEFORE COMPLETING I/O ;L; S. R. CLOUTIER 9-SEP-86 6.11B; SRC MAKE CORRECTIONS TO MCMAP AND MCQDP LAT APPLICATION TERMINAL ; ROUTINES6;- ; T. M. SCHOELLER 10-DEC-86 6.12B; TMS050 -- REMAP APR5 BEFORE CALLING CKTAB VIA CHANGING THE STACK;B; L. KOGAN 26-FEB-87 6.13I6; LK722 -- DO NOT KILL I/O ON LOCAL LINES AFTER IO.HNG;.; S.C. ADAMS 12-JUN-87 6.14 @; SA473 -- CHECK THAT LAT PROCESS IS INSTALLED BEFORE GET OR SET; CHARACTERSITICSF;O;C;+; ****** T T A T T ******L; D; THIS MODULE CONTAINS THE ROUTINES TO PROCESS I/O REQUESTS WITH THE; FOLLOWING FUNCTION CODES:A0; IO.ATT, IO.DET, IO.HNG, IO.GTS, SF.GMC, SF.SMCJ; MOST OF THIS PROCESSING IS DONE WHEN THE I/O REQUEST IS REMOVED FROM THEL; TERMINAL'S REQUEST QUEUE. HOWEVER, IO.GTS AND IO.GMC ARE NEVER PUT IN THEK; QUEUE SO THEIR PROCESSING ROUTINE IS CALLED IMMEDIATELY FROM TTINI. ALSO N; CONTAINED IN THIS MODULE IS THE ROUTINE FOR DEALLOCATING AST CONTROL BLOCKS.M; IT IS CALLED FROM THE EXECUTIVE WHEN AN AST HAS BEEN DEQUEUED AND EFFECTED.R;-; & .SBTTL .MCALLS AND SYMBOL DEFINITIONS1 .IF DF T$$TSA!T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOBG .MCALL EVNDF$,PKTDF$T* EVNDF$ ;DEFINE TSA EVENT PACKET OFFSETS+ PKTDF$ ;DEFINE AST CONTROL BLOCK SYMBOLSQ1 .ENDC ;T$$TSA!T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOBE .IF NDF R$$MPLP .MCALL HWDDF$,SCBDF$E HWDDF$ ;DEFINE KINAR5 SCBDF$ ;DEFINE S.DMCS .ENDC .IF DF T$$GTS .MCALL TTSYM$+ TTSYM$ ;DEFINE F1.XXX AND F2.XXX SYMBOLSH;A=; DEFINE TERMINAL SUPPORT WORDS RETURNED BY AN IO.GTS REQUEST ; ; ALWAYS SUPPORTED OPTIONS:$;A0TSP1 = F1.ACR!F1.BUF!F1.CCO!F1.HLD!F1.LWC!F1.RNE.TSP1 = TSP1!F1.RST!F1.SYN!F1.TRW!F1.UTB!F1.VBF;OTSP2 = F2.FDX!F2.SFF; $; CONDITIONALLY SUPPORTED OPTIONS:;T!.IIF DF T$$BTW TSP1 = TSP1!F1.BTWO!.IIF DF T$$CCA TSP1 = TSP1!F1.UIAW!.IIF DF T$$ESC TSP1 = TSP1!F1.ESQI!.IIF DF T$$RPR TSP1 = TSP1!F1.RPR.!.IIF DF T$$RUB TSP1 = TSP1!F1.RUB ;Y!.IIF DF T$$GMC TSP2 = TSP2!F2.GCHF!.IIF DF T$$SMC TSP2 = TSP2!F2.SCHA!.IIF DF T$$CUP TSP2 = TSP2!F2.CUPT!.IIF DF T$$EIO TSP2 = TSP2!F2.EIOD!.IIF DF T$$TSA TSP2 = TSP2!F2.NCTF .ENDC ;T$$GTS.PAGEE9 .SBTTL PPATT - POST-QUEUE PROCESS00xxtkTADATADATADATADATADATAING FOR ATTACH REQUESTS=;.;+6; **-PPATT - POST-QUEUE PROCESSING FOR ATTACH REQUESTS;DF; THIS ROUTINE IS DISPATCHED TO FROM TTINI AFTER AN IO.ATT REQUEST HASF; BEEN DEQUEUED FOR A TERMINAL. ALWAYS SAVE THE USER-DEFINED TERMINAL%; ID AND PROCESS IO.ATT SUBFUNCTIONS.D;$ ; INPUTS:; R5 => U.TSTA OF TERMINAL UCB=; R4 => UCBX FOR TERMINAL (GUARANTEED TO EXIST AND BE MAPPED)$; R3 => CURRENT I/O PACKET;D; OUTPUTS: NONE.;.*; REGISTERS MODIFIED: R0, R1, R2, R3, R4;-;O;MOVE THIS TO APR6 .IF NDF T$$OVL .PSECT MAP6 .ENDC ;NDF T$$OVL/ .IF DF T$$ONI ;IF AN OVERLAID NON I/D SYSTEMP8$DALED: .WORD 0 ;THIS WILL BE INITIALIZED BY TTDAT CODE/ ;THIS MUST BE THE FIRST WORD IN THE OVERLAYE .IF DF T$$GMC!T$$SMCE;.@; TABLE OF CHARACTERISTIC CODES FOR GET MULTIPLE CHARACTERISTICSG; FUNCTION (SF.GMC) AND SET MULTIPLE CHARACTERISTICS FUNCTION (SF.SMC). ;R7; EACH RECOGNIZED CODE HAS A 1-WORD ENTRY IN THE TABLE.M*; THIS WORD CONTAINS ONE OF THE FOLLOWING:;H(; 1. IF THE WORD NOT = 0 AND BIT 15 = 0:;; LOW BYTE = A BITMASK THAT MAPS THE DESIRED CHARACTERISTICD7; VALUE IN THE PROPER BYTE IN THE UCB. BITS ARE SET FORL ; RELEVANT BITS IN THE UCB BYTE.6; HIGH BYTE = OFFSET FROM START OF THE UCB TO THE BYTE+; THAT CONTAINS THE DESIRED CHARACTERISTIC.O;E; 2. IF BIT 15 = 1:S6; THE WORD IS THE ADDRESS OF A SUBROUTINE THAT HANDLES!; THIS PARTICULAR CHARACTERISTIC.R=; (ALL VIRTUAL ADDRESSES IN THE DRIVER ARE 120000 OR HIGHER).O;I; 3. IF THE WHOLE WORD = 0:<; THIS CHARACTERISTIC IS NOT RECOGNIZED BY SF.GMC OR SF.SMC.;T; (; DEFINE MACRO TO GENERATE TABLE ENTRIES;T .MACRO MCGEN NAME,OFS,BMB .IF LE NAME-MCHI  .=MCTAB+<2*>B .IF NB BM .IF LE BM-377 .BYTE BM,OFST .IFFT .BYTE BM/400,OFS+1N .ENDC .IFFE .WORD OFS .ENDC .IFF. .ERROR ;ILLEGAL CHARACTERISTICH .ENDC .ENDM MCGEN; 4MCHI == TC.MAX-1 ;HIGHEST RECOGNIZED CHARACTERISTIC;VMCTAB:: .REPT MCHI+ .WORD 0 ;INITIALIZE WHOLE TABLE TO ZEROSI .ENDR* MCGEN TC.WID,U.CW4,377 ;NUMBER OF COLUMNS2 MCGEN TC.LPP,U.TLPP,377 ;NUMBER OF LINES PER PAGE .IF DF D$$H11!D$$Z11!D$$V11# MCGEN TC.RSP,MCRSP ;RECEIVE SPEED $ MCGEN TC.XSP,MCXSP ;TRANSMIT SPEED4 MCGEN TC.PAR,MCPAR ;PARITY GENERATION AND CHECKING" MCGEN TC.EPA,MCEPA ;PARITY SENSE- MCGEN TC.CLN,MCCLN ;7-BIT CHARRACTER LENGTHA .IF DF T$$MOD" MCGEN TC.ASP,MCASP ;ANSWER SPEED7 MCGEN TC.ABD,U.TSTA+6,S4.ABD ;AUTO-BAUD SPEED DETECT I  .ENDC ;T$$MOD .ENDC ;D$$H11!D$$Z11!D$$V110 MCGEN TC.ISL,U.UNIT,377 ;SUB-LINE ON CONTROLLER# MCGEN TC.TTP,MCTTP ;TERMINAL TYPEE! MCGEN TC.SCP,U.CW2,U2.CRT ;SCOPE< MCGEN TC.HFL,U.TSTA+6,S4.HFL ;HORIZONTAL FILL REQUIREMENT : MCGEN TC.VFL,U.TSTA+6,S4.VFL ;VERTICAL FILL REQUIREMENT 4 MCGEN TC.HFF,U.TSTA+6,S4.HFF ;HARDWARE FORM-FEED / MCGEN TC.HHT,U.TSTA+6,S4.HHT ;HARDWARE TAB $> MCGEN TC.ACR,U.TSTA+4,S3.ACR ;AUTOMATIC CR-LF ON LONG LINES / MCGEN TC.PPT,U.TSTA+4,S3.PPT ;PRINTER-PORT 4 MCGEN TC.SMR,U.CW2,U2.LWC ;LOWERCASE INPUT ENABLED  .IF DF T$$ESC7 MCGEN TC.ESQ,U.CW2,U2.ESC ;ESCAPE SEQUENCES RECOGNIZEDT .ENDC ;T$$ESC .IF DF T$$MOD" MCGEN TC.DLU,MCRMT ;DIAL-UP LINE .ENDC, MCGEN TC.HLD,U.CW2,U2.HLD ;HOLD-SCREEN MODE* MCGEN TC.NEC,U.TSTA+4,S3.NEC ;NO-ECHO . MCGEN TC.SLV,U.CW2,U2.SLV ;SLAVED TERMINAL / MCGEN TC.PRI,U.CW2,U2.PRV ;PRIVILEGED TERMINALN. MCGEN TC.FDX,U.TSTA+4,S3.FDX ;FULL DUPLEX = MCGEN TC.PTH,U.TSTA+4,S3.PTH ;PASS-THROUGH MODE IS ENABLED G' MCGEN TC.BIN,MCBIN ;READ-PASS-ALL N? MCGEN TC.8BC,U.TSTA+4,S3.8BC ;8 BIT CHARACTERS PASSED ON READ Q4 MCGEN TC.TBF,MCTBF ;TYPE-AHEAD BUFFER ACTIVE COUNT& MCGEN TC.CTS,MCCTS ;CONTROL-S STATUS5 MCGEN TC.HSY,MCHSY ;HOST/TERMINAL SYNCHRONIZATION E' MCGEN TC.ANI,U.TSTA+6,S4.ANI ;ANSI CRT - MCGEN TC.AVO,U.TSTA+6,S4.AVO ;ADVANCED VIDEO ) MCGEN TC.BLK,U.TSTA+6,S4.BLK ;BLOCK MODET& MCGEN TC.DEC,U.TSTA+6,S4.DEC ;DEC CRT( MCGEN TC.EDT,U.TSTA+6,S4.EDT ;EDIT MODE$ MCGEN TC.RGS,U.TSTA+6,S4.RGS ;REGIS1 MCGEN TC.SFC,U.TSTA+6,S4.SFC ;SOFT CHARACTERS 00xwtbl T;B .IF DF R$$MPL!A$$CLIT .IF DF C$$CTC 8 MCGEN TC.TLC,U.TSTA+4,S3.CTC ;CONTROL-C NOTIFICATION  .ENDC ;C$$CTC ' MCGEN TC.NBR,U.MUP,UM.NBR ;NOBROADCASTO .ENDC ;R$$MPL!A$$CLIA .IF DF T$$ACD4 MCGEN TC.ACD,MCACD ;ANCILLARY CONTROL DRIVER (ACD) .ENDC ;T$$ACD. MCGEN TC.RAT,U.TSTA+4,S3.TAB ;READ-AHEAD TYPE .IF DF T$$SER? MCGEN TC.TBM,U.MUP,UM.SER ;TYPEAHEAD BUFFER MODE (TASK OR CLI)R .ENDC ;T$$SER ; . .IF DF T$$OOB ; MCGEN TC.OOB,MCOOB ;OUT-OF-BAND/HELLO/INCLUDE CHARACTERS N .ENDC ;T$$OOB  .IF DF T$$ICS 3 MCGEN TC.ICS,MCICS ;NOTIFY OF CHANGE IN TABUF , ;(INPUT COUNT STATE)  .ENDC ;TT$ICS  .IF DF T$$SCA 1 MCGEN TC.SSC,MCSSC ;SPECIFY SWITCH CHARACTERS A5 MCGEN TC.TMM,MCTMM ;EXIT TERMINAL MANAGEMENT MODE  .ENDC ;T$$SCA , MCGEN TC.TSY,MCTSY ;OUTPUT FLOW CONTROL ) .IF DF T$$MHU ;MODEM HANG-UP NOTIFY 9 MCGEN TC.MHU,MCMHU ;REQUEST MODEM HANG-UP NOTIFICATION S .ENDC ;T$$MHU  .IF DF T$$LTH&M$$NET$< MCGEN TC.QDP,MCQDP ;GET QUEUE DEPTH AND LAT CONNECT STATUS) MCGEN TC.MAP,MCMAP ;SET UP LAT MAPPING T .ENDC ;T$$LTH&M$$NET .=MCTAB+<2*MCHI> ;END OF TABLE;F;W .ENDC ;T$$GMC!T$$SMCN .ENDC ; T$$ONITPPATT::A; MOVB I.PRM+2(R3),U.TTID(R4) ;SAVE USER-DEFINED TERMINAL ID  .IF DF T$$ESC3 BIT #TF.ESQ,I.FCN(R3) ;TASK WANT ESCAPE SEQUENCES?  .IF DF T$$CCA BEQ 10$ ;IF EQ, NO...SKIP .IFF ;T$$CCAI( BEQ ADHSUC ;COMPLETE SUCCESSFUL ATTACH .ENDC ;T$$CCA* BIS #S3.RES,4(R5) ;REMEMBER TO PARSE THEM10$: .ENDC ;T$$ESC .IF DF T$$CCA: BIT #TF.AST,I.FCN(R3) ;ATTACH FOR UNSOLICITED INPUT AST?1 BEQ 19$ ;IF EQ, NO...COMPLETE SUCCESSFUL ATTACH;1 MOV I.PRM+4(R3),-(SP) ;GET CONTROL-C AST ADDRESSV0 BEQ 15$ ;IF EQ, NONE...CHECK OTHER AST ADDRESS5 BIT #TF.XCC,I.FCN(R3) ;CONFLICTING SUBFUNCTION CODE?K' BNE 20$ ;IF NE, YES...RETURN AN ERRORA15$: .IF NDF S$$LIBO: BIS I.PRM(R3),(SP) ;"OR" IN UNSOLICITED INPUT AST ADDRESS$ ASR (SP)+ ;WAS EITHER ADDRESS ODD?+ BCS 30$ ;IF CS, YES...INVALID AST ADDRESSN .IFF ;S$$LIBF; BIS I.PRM(R3),(SP)+ ;"OR" IN UNSOLICITED INPUT AST ADDRESSN .ENDC ;S$$LIB3 BEQ 30$ ;IF EQ, NEITHER ADDRESS SPECIFIED...ERROR4* MOV #24.,R1 ;SET SIZE OF ACB TO ALLOCATE8 ADD #U.TAST,R4 ;POINT TO ATTACH ACB POINTER IN THE UCBX, CALL ALACB ;ALLOCATE AN ACB FOR THE ATTACH+ BCS 40$ ;IF CS, ALLOCATION FAILED...ERRORC MOVB I.FCN(R3),(R0)+ ;PUT FUNCTION CODE MODIFIERS IN ACB FLAG BYTET9 MOV I.PRM+4(R3),(R0)+ ;SAVE CONTROL-C AST ADDRESS IN ACBI? MOV I.PRM(R3),(R0) ;LIKEWISE FOR UNSOLICITED INPUT AST ADDRESSR .IFTF ;T$$CCA+19$: BR ADHSUC ;COMPLETE SUCCESSFUL ATTACHB .IFT ;T$$CCA 20$: TST (SP)+ ;CLEAN STACK730$: MOV #IE.SPC,R0 ;SET ILLEGAL AST ADDRESS ERROR CODE# BR 50$ ;JOIN COMMON ERROR CODE.40$: MOV #IE.NOD,R0 ;ERROR - NO DYNAMIC MEMORY950$: CLR U.ATT-U.TSTA(R5) ;CLEAR POINTER SET UP BY $GSPKT .IF DF T$$ESC; BIC #S3.RES,4(R5) ;DON'T REMEMBER ESCAPE SEQUENCES ANYMOREM .ENDC ;T$$ESC$ BR ADHFIN ;COMPLETE ATTACH REQUEST .ENDC ;T$$CCA.PAGEN9 .SBTTL PPDET - POST-QUEUE PROCESSING FOR DETACH REQUESTSD;C;+6; **-PPDET - POST-QUEUE PROCESSING FOR DETACH REQUESTS;PF; THIS ROUTINE IS DISPATCHED TO FROM TTINI AFTER AN IO.DET REQUEST HASI; BEEN DEQUEUED FOR A TERMINAL. FLUSH THE TYPEAHEAD BUFFER IF NECESSARY,IG; CLEAN UP TERMINAL STATUS, AND DEALLOCATE UNNECESSARY DATA STRUCTURES..;D ; INPUTS:; R5 => U.TSTA OF TERMINAL UCB5; R4 => UCBX FOR TERMINAL (ONLY IF T$$SPL IS DEFINED)D; R3 => CURRENT I/O PACKET;; OUTPUTS: NONE.;G*; REGISTERS MODIFIED: R0, R1, R2, R3, R4;-;HPPDET::D .IF DF T$$SER; BIT #UM.SER,U.MUP-U.TSTA(R5) ;DETACH WHILE IN SERIAL MODE?I& BNE 10$ ;Y - DON'T FLUSH TABUF, JUMP .ENDC ;T$$SER .IF DF T$$IDO* TST $MCRPT ;IS THE DISPATCHER INSTALLED?' BEQ 10$ ;IF EQ NO - DON'T FLUSH TABUF  .ENDC ;T$$IDO* MOV R00xxtkTADATADATADATADATADATA3,-(SP) ;SAVE CURRENT PACKET ADDRESS .IF DF T$$OVL MOV #I1CTXL,-(SP) ;GET ADDRESSA. CALL MPROT ;CALL ROUTINE TO FLUSH TYPE AHEAD .IFF ;T$$OVL 6 CALL I1CTXL ;FLUSH TYPE-AHEAD BUFFER WITH INTERRUPTS ;LOCKED OUTP .ENDC ;T$$OVL) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESST(10$: BIC #S2.CTO,2(R5) ;CLEAR CTRL-O BIT BIS #S2.IRQ!S2.ORQ!S2.SRQ,2(R5). ;LOOK FOR ALL SORTS OF PACKET IN THE QUEUE ;NEXT TIME .IF DF T$$ESC; BIC #S3.RES,4(R5) ;DON'T LOOK FOR ESCAPE SEQUENCES ANYMORE( .ENDC ;T$$ESC# .IF DF T$$SCA!T$$MHU!T$$ICS!T$$OOBV/ BIC #S3.TME!S3.MHE!S3.ICE,4(R5) ;DISABLE THESEU7 BIC #S5.TMM,U.TST5-U.TSTA(R5) ;AND TERMINAL MANAGEMENTL# .ENDC ;T$$SCA!T$$MHU!T$$ICS!T$$OOBP* .IF DF T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOB .IF NDF T$$SPLO" MOV U.TUX-U.TSTA(R5),R4 ;GET UCBX3 BEQ ADHSUC ;IF EQ, UCBX IS GONE...COMPLETE DETACH) .ENDC ;T$$SPL7 ADD #U.TAST,R4 ;POINT TO UNSOLICITED INPUT ACB ADDRESS$-X = U.TAST ;SYMBOL NEEDED FOR ASSUME MACROSP .IF DF T$$CCA3 CALL DEACB ;DEALLOCATE ATTACH ACB IF THERE IS ONE$% TST (R4)+ ;SKIP TO NEXT ACB POINTER) X = X + 2H .ENDC ;T$$CCA .IF DF T$$SCA ASSUME U.TSCA,X X = X + 2.4 CALL DEACB ;DEALLOCATE SWITCH CHARACTER ACB IF ONE% TST (R4)+ ;SKIP TO NEXT ACB POINTERT .ENDC ;T$$SCA .IF DF T$$MHU ASSUME U.TMHA,X X = X + 2U0 CALL DEACB ;DEALLOCATE MODEM HANGUP ACB IF ONE% TST (R4)+ ;SKIP TO NEXT ACB POINTER  .ENDC ;T$$MHU .IF DF T$$ICS ASSUME U.TICA,X X = X + 2+ CALL DEACB ;DEALLOCATE ICS ACB/TEP IF ONEA% TST (R4)+ ;SKIP TO NEXT ACB POINTER  .ENDC ;T$$ICS .IF DF T$$OOB ASSUME U.TOBA,X+ CALL DEACB ;DEALLOCATE OOB ACB/TEP IF ONE  .ENDC ;T$$OOB* .ENDC ;T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOB, .IF DF T$$LTH ; IF LAT TERMINALS IN SYSTEM9 BIT #S6.LAT,U.TST6-U.TSTA(R5) ;LAT APPLICATION TERMINAL? % BEQ 20$ ; IF EQ - NO, JUST COMPLETEO .IF DF T$$OVL MOV #LHDET,-(SP) ;GET ADDRESS" CALL MPROT ;CALL ROUTINE IN TTLH .IFF ;T$$OVL CALL LHDET ;CALL TTLH DIRECTLY ;I .ENDC ;T$$OVL' BCS PPHNG ; IF CS, HANG UP THE LINE..$ .ENDC ;T$$LTH20$:' BR ADHSUC ;COMPLETE SUCCESSFUL DETACHB.PAGE ? .SBTTL PPHNG - POST-QUEUE PROCESSING FOR MODEM HANGUP REQUESTSO;;+<; **-PPHNG - POST-QUEUE PROCESSING FOR MODEM HANGUP REQUESTS;-F; THIS ROUTINE IS DISPATCHED TO FROM TTINI AFTER AN IO.HNG REQUEST HASE; BEEN DEQUEUED FOR A TERMINAL. INITIATE A TIMEOUT ON THE LINE WHICH ;; WILL CAUSE DTR TO DROP AND THE TERMINAL TO BE LOGGED OUT.L;L ; INPUTS:; R5 => U.TSTA OF TERMINAL UCB5; R4 => UCBX FOR TERMINAL (ONLY IF T$$SPL IS DEFINED); R3 => CURRENT I/O PACKET; ; OUTPUTS: NONE.;"; REGISTERS MODIFIED: R0, R1, R2;-;NPPHNG::E .IF DF T$$SPL' MOV U.TAPR-U.TSTA(R5),KDSAR5 ;MAP UCBXI MOV #120000,R4 ;POINT TO UCBX H .IFF ;T$$SPLI' MOV U.TUX-U.TSTA(R5),R4 ;POINT TO UCBXE .ENDC ;T$$SPL .IF DF T$$MOD+ BIT #U2.RMT,U.CW2-U.TSTA(R5) ;REMOTE LINE?I3 BEQ ADHSUC ;IF EQ, LINE IS LOCAL. DO NOT KILL I/OT& MOV R3,-(SP) ;SAVE I/O PACKET ADDRESS7 BISB #US.CRW,U.STS-U.TSTA(R5) ;SET WAITING FOR CARRIERF4 MOV #CT.TIM,R2 ;SET INDEX FOR MODEM TIMEOUT ROUTINE .IF DF T$$OVL) MOV #CTRD,-(SP) ;GET ADDRESS OF ROUTINE # CALL MPROT ;AND MAP AND CALL CTRDR .IFF ;T$$OVLB8 CALL CTRD ;INITIATE TIMEOUT WHICH WILL CAUSE DTR TO BE0 ;DROPPED AND THE USER OF THE LINE LOGGED OUT .ENDC ;T$$OVL) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSR BNE 20$ ;IF NE, FINISH I/O0 RETURN ;ELSE RETURN (PACKET WAS TAKEN BY LAT)10$: .ENDC ;T$$MOD% MOV R3,-(SP) ;SAVE IO PACKET POINTER  .IF DF T$$OVL+ MOV #I1CTXL,-(SP) ;GET ADDRESS OF ROUTINE T( CALL MPROT ;AND MAP AND CALL FLUSH TAB ) .IF NDF T$$SPLU TST R4 ;IS THERE A UCBX?- BEQ 15$ ;IF NOT, DON'T KILL INPUT OR OUTPUT  .ENDC ;NDF T$$SPL I3 MOV #IE.ABO&377,R0 ;SET COMPLETION STATUS FOR READL+ MOV #KILLI1,-(SP) ;GET ADDRESS OF ROUTINE R) CALL MPROT ;AND MAP AND CALL KILL INPUTI4 MOV #IE.DNR&377,R0 ;SET COMPLETION STATUS FOR W00xwtblRITE+ MOV #KILLO1,-(SP) ;GET ADDRESS OF ROUTINE R* CALL MPROT ;AND MAP AND CALL KILL OUTPUT .IFF ;T$$OVL1 CALL I1CTXL ;FLUSH TAB .IF NDF T$$SPLO TST R4 ;IS THERE A UCBX?- BEQ 15$ ;IF NOT, DON'T KILL INPUT OR OUTPUTA .ENDC ;NDF T$$SPL3 MOV #IE.ABO&377,R0 ;SET COMPLETION STATUS FOR READ CALL KILLI1 ;KILL INPUTT4 MOV #IE.DNR&377,R0 ;SET COMPLETION STATUS FOR WRITE CALL KILLO1 ;KILL OUTPUT .ENDC ;T$$OVL,15$: MOV (SP)+,R3 ;RESTORE IO PACKET POINTER20$: .IF DF T$$MHU/ BIT #S3.MHE,4(R5) ;IS CHARACTERISTIC ENABLED?L BEQ ADHSUC ;BR IF NO .IF DF T$$SPL4 MOV #120000,R4 ;POINT TO UCBX. IT IS POSSIBLE THAT) ;A CALL FROM FPORD TO THE EXEC CAUSES1( ;US TO LOSE THE VALUE THAT WAS IN R4 N .IFF ;T$$SPL' MOV U.TUX-U.TSTA(R5),R4 ;POINT TO UCBXS .ENDC ;T$$SPL# MOV U.TMHA(R4),R1 ;GET ACB ADDRESS7 .IF DF T$$OVL MOV #QUEAEN,-(SP) CALL MPROT ;QUE AST TO TASKN .IFF ;T$$OVL:* CALL QUEAEN ;QUEUE AST TO ATTACHED TASK  .ENDC ;T$$OVL .ENDC ;T$$MHU;IJ; HERE TO COMPLETE AN IO.ATT, IO.DET, IO.ORG OR IO.HNG I/O WITH A SUCCESS3; (ADHSUC) OR A PRESET (ADHFIN) COMPLETION STATUS. ;CADHSUC:F# MOV #IS.SUC,R0 ;SET SUCCESS STATUSLADHFIN:A .IF DF T$$OVL# CLR R1 ;CLEAR SECOND WORD OF IOSBU$ CALLR $IOFIN ;FINISH IO AND RETURN .IFF ;T$$OVLU& JMP IOFIN ;FINISH OFF THE I/O PACKET .ENDC ;T$$OVL.PAGE  .IF DF T$$LTH< .SBTTL PPORG - POST-QUEUE PROCESSING FOR ORIGINATE REQUESTS;H;+A; **-PPORG - POST-QUEUE PROCESSING TO ORIGINATE A CONNECTION TO A ; TERMINAL SERVER (ORIGINATE);/F; THIS ROUTINE IS DISPATCHED TO FROM TTINI AFTER AN IO.ORG REQUEST HASE; BEEN DEQUEUED FOR A TERMINAL. CHECK THAT THIS HAS BEEN ESTABLISHED$@; AS A LAT APPLICATION TERMINAL AND IF SO, CALL THE LAT PROCESS.;I ; INPUTS:; R5 => U.TSTA OF TERMINAL UCB5; R4 => UCBX FOR TERMINAL (ONLY IF T$$SPL IS DEFINED)G; R3 => CURRENT I/O PACKET; ; OUTPUTS: NONE.;E; REGISTERS MODIFIED: R0;-;+PPORG::O .IF DF T$$SPL' MOV U.TAPR-U.TSTA(R5),KDSAR5 ;MAP UCBX MOV #120000,R4 ;POINT TO UCBX .IFF ;T$$SPLI' MOV U.TUX-U.TSTA(R5),R4 ;POINT TO UCBXR .ENDC ;T$$SPL9 BIT #S6.LAT,U.TST6-U.TSTA(R5) ;LAT APPLICATION TERMINAL?E0 BNE 10$ ;IF NE, YES...CAN ORIGINATE CONNECTION8 MOV #!,R0 ;CONNECTION REJECTED / BR ADHFIN ;COMPLETE REQUEST WITH ERROR STATUS 10$:& MOV R3,-(SP) ;SAVE I/O PACKET POINTER2 MOV R3,R0 ;GET IRP ADDRESS TO R0 FOR LAT PROCESS3 MOV #PO$ORG,R3 ;GET ORIGINATE CODE FOR LAT PROCESSA .IF DF T$$OVL) MOV #LTPRC,-(SP) ;GET ADDRESS OF ROUTINE.$ CALL MPROT ;AND MAP AND CALL LTPRC .IFF ;T$$OVLR CALL LTPRC ;CALL LAT PROCESS .ENDC ;T$$OVL) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSE" TST R0 ;ERROR BACK FROM PROCESS?1 BNE ADHFIN ;IF NE, NO - ERROR, COMPLETE REQUESTE1 RETURN ;ELSE RETURN, LAT WILL COMPLETE REQUESTU ;WHEN CONNECTION COMPLETES .ENDC ;T$$LTH.PAGETA .SBTTL PPSPC/PPSPC1 - POST-QUEUE PROCESSING FOR SPECIAL REQUESTSC; ;+6; **-PPSPC - POST-QUEUE PROCESSING FOR SF.SMC REQUESTSB; **-PPSPC1 - POST-QUEUE PROCESSING FOR IO.GTS AND SF.GMC REQUESTS;$L; THESE ROUTINES ARE DISPATCHED TO FROM TTINI TO PROCESS IO.GTS, SF.GMC, ANDM; SF.SMC REQUESTS. PPSPC IS USED WHEN AN SF.SMC REQUEST IS DEQUEUED. PPSPC1NI; IS USED WHEN AN IO.GTS OR SF.GMC REQUESTS ARE INITIATED, SINCE THEY CAN ; COMPLETE ASYNCHRONOUSLY.;C ; INPUTS:"; R5 => U.TSTA OF THE TERMINAL UCB; R3 => CURRENT I/O PACKET;R; OUTPUTS: NONE.;Q*; REGISTERS MODIFIED: R0, R1, R2, R3, R4J; R1 IS PRIMARILY USED AS A POINTER INTO THE USER'S CHARACTERISTIC BUFFER.;-;M;KEEP THIS IN APR 5S .IF NDF T$$OVLA .PSECT MAP5 .ENDC ;T$$OVL .IF DF T$$SMCPPSPC::Q .IF NDF T$$SPLE" .IF DF T$$OVL ;IF OVERLAID TTDRV1 MOV (SP),-(SP) ;FORCE A REMAP FIRST BEFORE CKTAB 0 MOV 4(SP),2(SP) ;BRING UP THE APR BIAS ON STACK5 MOV #CKTAB,4(SP) ;THIS REQUEST MAY WANT TO CREATE ORL! ;REMOVE A TYPE-AHEAD BUFFER -R ;CHECK ON TH00xxtkTADATADATADATADATADATAE WAY OUT ' .IFF ;DF T$$OVL ;IF NOT OVERLAID TTDRV 5 MOV #CKTAB,-(SP) ;THIS REQUEST MAY WANT TO CREATE ORE! ;REMOVE A TYPE-AHEAD BUFFER -I ;CHECK ON THE WAY OUTA .ENDC ;DF T$$OVL. .ENDC ;NDF T$$SPL0 MOV #IRESEL,-(SP) ;RESET S1 BITS ON THE WAY OUT .ENDC ;T$$SMC .IF DF T$$GTS!T$$GMC!T$$SMC6PPSPC1::MOV I.PRM(R3),KISAR6 ;MAP USER BUFFER IN APR 6< MOV I.PRM+2(R3),R1 ;GET START OF BUFFER (WE KNOW IT IS ON A ;WORD BOUNDARY)R .ENDC ;T$$GTS!T$$GMC!T$$SMC .IF DF T$$GTS% CMP I.FCN(R3),#IO.GTS ;IS IT IO.GTS?I7 BNE CHKCHR ;IF NE, NO...CHECK GET/SET CHARACTERISTICSR;E1; PROCESS REQUESTS TO GET TERMINAL DRIVER SUPPORTK; 8 MOV #TSP1,(R1)+ ;STORE FIRST WORD OF SUPPORT PARAMETERS, CMP I.PRM+4(R3),#2 ;WANTS MORE THAN 1 WORD?3 BEQ JCHRSC ;IF EQ, NO...GIVE ONLY WHAT USER WANTSC# MOV #TSP2,(R1)+ ;STORE SECOND WORD  .ENDC ;T$$GTS .IF DF T$$GTS!T$$GMC!T$$SMCJCHRSC:R JMP CHRSUC ;FINISH OFF REQUESTCHKCHR:+; BR NXTCHR ;CHECK CHARACTERISTICS SUPPORTS .ENDC ;T$$GTS!T$$GMC!T$$SMC.PAGEI= .SBTTL . NXTCHR - PROCESSING LOOP FOR SF.GMC/SF.SMC REQUESTS .IF DF T$$GMC!T$$SMC ;ND; LOOP HERE TO START PROCESSING NEXT CHARACTERISTIC FROM USER BUFFER;ANXTCHR:C$ SUB #2,I.PRM+4(R3) ;ANY MORE TO DO?7 BMI JCHRSC ;IF MI, NO...FINISH SUCCESSFUL I/O REQUESTC8 MOVB (R1)+,R0 ;GET NEXT CHARACTERISTIC FROM USER BUFFER, BEQ ERCNIH ;IF EQ, BAD CODE...RETURN ERROR CMP R0,#MCHI ;TOO HIGH?0 BHI ERCNIH ;IF HI, YES...RETURN BAD CODE ERROR ASL R0 ;MULTIPLY CODE BY 2' ADD #MCTAB-2,R0 ;MAKE POINTER IN MCTABC .IF DF T$$SPL7 MOV $DALED,KISAR6 ;MAP CHARACTERISTIC TABLE (IN TTCOM) .IFTF ;T$$SPL CLR R2 ;INIT BITMASK) BISB (R0)+,R2 ;GET BITMASK FOR THIS CODE! MOVB (R0)+,R4 ;GET OFFSET IN UCB?2 MOV -(R0),R0 ;GET FULL WORD IF SUBROUTINE ADDRESS .IFT ;T$$SPL)+ MOV I.PRM(R3),KISAR6 ;RESTORE TASK MAPPING' TST R0 ;IS CHARACTERISTIC RECOGNIZED?R .ENDC ;T$$SPL8 BEQ ERCNIH ;IF EQ, UNRECOGNIZED CHARACTERISTIC...ERROR4 BPL 10$ ;IF PL, NOT A SUBROUTINE...PROCESS BITMASK> CMP R0,#160000 ;NEGATIVE OFFSET (NOT A SUBROUTINE AFTER ALL)?3 BHIS 10$ ;IF HIS, NOT A SUBROUTINE ADDRESS...SKIP .IF DF T$$GMC&T$$SMCB: CMP I.FCN(R3),#SF.GMC ;DO TEST FOR SF.GMC BEFORE DISPATCH .ENDC ;T$$GMC&T$$SMC)5 CALL (R0) ;DISPATCH TO ROUTINE TO HANDLE SPECIAL...)" ;...CASES OF SF.GMC AND SF.SMC, BR NXTCHR ;LOOP TO GET NEXT CHARACTERISTIC10$:) ADD R5,R4 ;POINT TO UCB OFFSET + U.TSTA,2 SUB #U.TSTA,R4 ;BACK UP POINTER TO THE UCB OFFSET .ENDC ;T$$GMC!T$$SMCO .IF DF T$$GMC&T$$SMC0% CMP I.FCN(R3),#SF.SMC ;IS IT SF.SMC?T4 BEQ 100$ ;IF EQ, YES...PROCESS SET CHARACTERISTICS .ENDC ;T$$GMC&T$$SMCC .IF DF T$$GMC;R<; PROCESS REQUEST TO RETURN TERMINAL CHARACTERISTICS TO USER;T3 MOVB (R4),(R1) ;STORE CURRENT VALUE IN USER BUFFERS MOVB R2,R0 ;COPY BITMASK COMB R0 ;INVERT IT% BICB R0,(R1) ;CLEAR IRRELEVANT BITST20$: ASRB R2 ;SHIFT BITMASK RIGHT BCS 30$ ;CARRY - JUMPS1 RORB (R1) ;SHIFT VALUE IN USER BUFFER RIGHT TOO; BR 20$ ;LOOP30$:+ INC R1 ;SKIP OVER VALUE FIELD JUST STORED;, BR NXTCHR ;LOOP TO GET NEXT CHARACTERISTIC .ENDC ;T$$GMC .IF DF T$$SMC;T1; PROCESS REQUEST TO SET TERMINAL CHARACTERISTICSO;T100$:M: MOVB -1(R1),R0 ;GET CHARACTERISTIC CODE WE ARE PROCESSING- CMPB #TC.WID,R0 ;WANT TO CHANGE BUFFER SIZE?B* BNE 110$ ;IF NE, NO...SKIP TO NEXT CHECK1 CMPB #15.,(R1) ;TRYING TO MAKE BUFFER TOO SMALL?T) BLO 200$ ;IF LO, NO...SKIP TO SET WIDTH ' BR ERCVL1 ;RETURN INVALID VALUE ERRORO110$: ( CMPB #TC.ISL,R0 ;WANT TO CHANGE U.UNIT?= BEQ ERCFIX ;IF EQ, YES...NOT ALLOWED - FIXED CHARACTERISTICT6 CMPB #TC.PRI,R0 ;TRYING TO CHANGE TERMINAL PRIVILEGE?< BEQ ERCPRI ;IF EQ, YES...NOT ALLOWED - PRIVILEGE VIOLATION .IF DF T$$MOD9 CMPB #TC.ABD,R0 ;WANT TO CHANGE AUTOBAUD CHARACTERISTIC?H+ BEQ 120$ ;IF EQ, YES...MUST BE PRIVILEGEDK6 CMPB #TC.ASP,R0 ;WANT TO CHANGE DEFAULT ANSWER SPEED?2 BNE 200$ ;IF NE, NO...PROCESS THE CHARACTERISTIC120$:B/ MOV I.TCB(R3),R0 ;G00xwtblET ISSUING TASK TCB ADDRESSC/ BIT #T3.PRV,T.ST3(R0) ;IS THE TASK PRIVILEGED?I4 BEQ ERCPRI ;IE EQ, NO...RETURN PRIVILEGE VIOLATION .ENDC ;T$$MOD200$: ) MOV R2,-(SP) ;SAVE BITMASK TO BE CHANGEDF. MOVB (R1),R0 ;GET NEW VALUE FROM USER BUFFER210$:  ASRB R2 ;SHIFT BITMASK RIGHT, BCS 220$ ;IF CS, SHIFTED FAR ENOUGH...SKIP ROLB R0 ;SHIFT NEW VALUE LEFTE! BR 210$ ;LOOP FOR MORE SHIFTINGE220$:T& ROLB R2 ;PICK UP LOST BIT FROM CARRY% COMB R2 ;INVERT RIGHT-ADJUSTED MASKV# BITB R2,(R1)+ ;NEW VALUE IN RANGE?D4 BNE ERCVAL ;IF NE, NO...RETURN INVALID VALUE ERROR BICB (SP)+,@R4 ;CLEAR OLD VALUE BISB R0,@R4 ;SET NEW VALUE .IF DF T$$SER, CMPB -2(R1),#TC.TBM ;SERIAL CHARACTERISTIC? BNE 300$ ;IF NE, NO...SKIP" TSTB R0 ;NOSERIAL NOW IN EFFECT? BNE 300$ ;IF NE, NO...SKIP@ BIC #UM.CMD,U.MUP-U.TSTA(R5) ;ELSE, YES...CLEAR CMD IN PROGRESS300$:B .ENDC ;T$$SER CMPB #TC.PTH,-2(R1) ;PASSTHRU?P BNE 301$ ;BR IF NOTR" BIC #S1.PTH,(R5) ;CLEAR OLD VALUE S ASSUME S1.PTH*400,S3.PTHU" SWAB R0 ;GET BYTE IN RIGHT PLACE# BISB R0,(R5) ;SET OR CLEAR S1.PTHS301$: -;PROCESS FORMFEED AND NO-ECHO CHARACTERISITCS;F7 CMPB #TC.NEC,-2(R1) ;IS THIS A NO-ECHO CHARACTERISTIC??' BNE 303$ ;BR IF NOT TO CHECK FORMFEED 2 BIC #U2.NEC,U.CW2-U.TSTA(R5) ;Y - CLEAR OLD VALUE ASSUME S4.HFF*400,U2.HFF( ASSUME S3.NEC*400,U2.NEC*2  ASRB R0 ;GET NEW VALUE BR 305$ ;BR TO SET NEW VALUE303$:U8 CMPB #TC.HFF,-2(R1) ;IS THIS A FORMFEED CHARACTERISTIC?6 BNE NXTCHR ;IF NE, NO...LOOP FOR NEXT CHARACTERISTIC; BIC #U2.HFF,U.CW2-U.TSTA(R5) ;Y - CLEAR OLD FORMFEED VALUE$305$:P3 BISB R0,U.CW2+1-U.TSTA(R5) ;SET NEW FORMFEED VALUEP) BR NXTCHR ;LOOP FOR NEXT CHARACTERISTICE .ENDC ;T$$SMC.PAGEI4 .SBTTL . ERROR HANDLING FOR GET/SET CHARACTERISTICS;Y%; ERRORS IN SF.GMC OR SF.SMC REQUESTS0;. .IF DF T$$GMC!T$$SMC0FERCNIH: MOV #!,R0 ;ILLEGAL CHARACTERISTIC TYPE .ENDC ;T$$GMC!T$$SMC)CHRFN1: / DEC R1 ;BACK UP CHARACTERISTIC BUFFER POINTER. BR CHRFIN ;FINISH IT OFF .IF DF T$$SMC8ERCPRI: MOV #IE.PRI&377,R0 ;ATTEMPT TO EXCEED PRIVILEGES BR CHRFN1 ;FINISH IT OFF7ERCVAL: TST (SP)+ ;CLEAN UP STACK FOR THIS ENTRY POINTS/ DEC R1 ;BACK UP CHARACTERISTIC BUFFER POINTERAERCVL1:R@ MOV #!,R0 ;ILLEGAL CHARACTERISTIC VALUE BR CHRFIN ;FINISH IT OFFHERCFIX: MOV #!,R0 ;ATTEMPT TO CHANGE FIXED CHAR. BR CHRFN1 ;FINISH IT OFF .IF DF D$$H11!D$$Z11!D$$V11GERCSPD: MOV #!,R0 ;INVALID SPEED FOR CONTROLLER BR CHRFN1 ;FINISH IT OFF .ENDC ;D$$H11!D$$Z11!D$$V11 .IFTF ;T$$SMCIERCNSC:: MOV #!,R0 ;NOT A SETTABLE CHARACTERISTIC  BR CHRFN1 ;FINISH IT OFF .IFT ;T$$SMCV* .IF DF T$$SPL!T$$SCA!T$$MHU!T$$ICS!T$$OOBEERCUPN: MOV #!,R0 ;STORAGE ALLOCATION FAILUREA BR CHRFN1 ;FINISH IT OFF* .ENDC ;T$$SPL!T$$SCA!T$$MHU!T$$ICS!T$$OOB# .IF DF T$$SCA!T$$MHU!T$$ICS!T$$OOB1>ERCIAA: MOV #!,R0 ;ILLEGAL AST ADDRESS BR CHRFN1 ;FINISH IT OFF# .ENDC ;T$$SCA!T$$MHU!T$$ICS!T$$OOBV .ENDC ;T$$SMC .IF DF T$$GTS!T$$GMC!T$$SMCCHRSUC:0/ MOV #IS.SUC,R0 ;SET SUCCESSFUL COMPLETION CODE  .ENDC ;T$$GTS!T$$GMC!T$$SMCCHRFIN: . SUB I.PRM+2(R3),R1 ;GET OFFSET IN USER BUFFER/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPING $ JMP $IOFIN ;FINISH THE I/O REQUEST.PAGE;2 .SBTTL . GET/SET TERMINAL CHARACTERISTICS SUPPORT2 .SBTTL . MC*SP - TERMINAL SPEED (RCV/XMT/ANSWER) .IF DF T$$GMC!T$$SMCA;D'; GET/SET RECEIVE/TRANSMIT/ANSWER SPEEDC;$E .IF DF D$$H11!D$$Z11!D$$V11 ;ONLY DH11, DZ11 AND DHV11 CAN SET SPEEDSMCRSP::CMCXSP::# .IF DF T$$MODMCASP::P .ENDC ;T$$MOD .IF DF T$$GMC&T$$SMC BEQ 310$ ;GET SPEED - JUMP .ENDC ;T$$GMC&T$$SMCR .IF DF T$$SMC;; ; SET SPEEDR;T* MOVB (R1)+,R0 ;SET SPEED - GET USER VALUE1 BEQ ERCVAL ;IF EQ, INVALID CHARACTERISTIC VALUER CMP R0,#SPHI ;IN RANGE?6 BHI ERCVAL ;IF HI, NO...INVALID CH00xxtkTADATADATADATADATADATAARACTERISTIC VALUE0 CALL SPDPRM ;CALL CONTROLLER DEPENDENT ROUTINE* BCC 10$ ;IF CC, SUCCESSFUL SPEED SETTING= MOV #ERCSPD,(SP) ;CHANGE RETURN ADDRESS TO PROCESS THE ERROR#10$:+ RETURN ;RETURN FOR MORE/ERROR COMPLETION .ENDC ;T$$SMC .IF DF T$$GMC;E ; GET SPEEDP;(310$: MOV #100000,R0 ;INDICATE GET SPEED% INC R1 ;BUMP POINTER IN USER BUFFER;0 CALL SPDPRM ;CALL CONTROLLER DEPENDENT ROUTINE .IF DF T$$MOD BIT #1000,R0 ;GET ANSWER SPEED? BEQ 320$ ;N - JUMP. MOVB U.CW3+1-U.TSTA(R5),R0 ;GET ANSWER SPEED? BR 330$ ;JOIN COMMON CODER .ENDC ;T$$MOD320$:U) MOVB U.CW3-U.TSTA(R5),R0 ;GET SPEED BITSC% CMPB -2(R1),#TC.XSP ;TRANSMIT SPEED?O+ BNE 330$ ;N - MUST BE RECEIVE SPEED, JUMPM .IF DF R$$EIS: ASH #-4,R0 ;PUT TRANSMIT SPEED BITS INTO PROPER POSITION .IFF ;R$$EISA6 ASR R0 ;PUT TRANSMIT SPEED BITS INTO PROPER POSITION ASR R0 ; ASR R0 ; ASR R0 ; .ENDC ;R$$EIS.330$: BIC #^C<17>,R0 ;CLEAR ALL BUT SPEED BITS .IF DF T$$SPL!T$$ONI.+ MOV $DALED,KISAR6 ;MAP DRIVER SPEED TABLES$ .ENDC ;T$$SPL!T$$ONI.( MOV R4,-(SP) ;SAVE START OF SPEED TABLE- MOV #SPHI,R2 ;GET NUMBER OF ENTRIES IN TABLER340$: CMPB R0,(R4)+ ;MATCH?  BEQ 350$ ;Y - JUMP SOB R2,340$ ;N - LOOPS0 MOV @SP,R4 ;UNRECOGNIZED SPEED - RETURN A ZERO'350$: SUB (SP)+,R4 ;GET OFFSET IN TABLE  .IF DF T$$ONI!T$$SPL + MOV I.PRM(R3),KISAR6 ;RESTORE TASK MAPPINGA .ENDC ;T$$ONI!T$$SPLS% MOVB R4,-1(R1) ;STORE IN USER BUFFERP) RETURN ;RETURN FOR NEXT CHARACTERISTIC$ .ENDC ;T$$GMC.PAGEE' .SBTTL . MCPAR/MCEPA - PARITY OPTIONSM;R2; GET/SET PARITY GENERATION AND CHECKING AND SENSE;N .ENABL LSBIMCPAR::R .IF DF T$$GMC&T$$SMCT6 BEQ 1000$ ;GET PARITY GENERATION AND CHECKING - JUMP .ENDC ;T$$GMC&T$$SMCE .IF DF T$$SMC;$$; SET PARITY GENERATION AND CHECKING;.6 BIC #U3.PAR,U.CW3-U.TSTA(R5) ;ASSUME DISABLING PARITY TSTB (R1)+ ;CHECK ASSUMPTION BEQ 1010$ ;CORRECT - JUMPOD BIS #U3.PAR,U.CW3-U.TSTA(R5) ;ENABLE PARITY GENERATION AND CHECKING6 BR 1010$ ;JOIN COMMON CODE TO CHANGE LINE PARAMETERS .ENDC ;T$$SMC .IF DF T$$GMC;N$; GET PARITY GENERATION AND CHECKING;1000$:) CLRB (R1) ;ASSUME PARITY IS NOT ENABLEDG) BIT #U3.PAR,U.CW3-U.TSTA(R5) ;CHECK THAT BEQ 1030$ ;CORRECT - JUMPF( INCB (R1) ;SHOW THAT PARITY IS ENABLED5 BR 1030$ ;JOIN COMMON CODE TO CHECK LINE PARAMETERS  .ENDC ;T$$GMC; ; GET/SET PARITY SENSE;BMCEPA::  .IF DF T$$GMC&T$$SMC3$ BEQ 1020$ ;GET PARITY SENSE - JUMP .ENDC ;T$$GMC&T$$SMC  .IF DF T$$SMC;E; SET PARITY SENSE;E9 BIC #U3.OPA,U.CW3-U.TSTA(R5) ;ASSUME SETTING EVEN PARITYN TSTB (R1)+ ;CHECK ASSUMPTION BNE 1010$ ;CORRECT - JUMPI- BIS #U3.OPA,U.CW3-U.TSTA(R5) ;SET ODD PARITYC1010$:5 MOV #6000,R0 ;INDICATE DEVICE DEPENDENT SPEED FORMATT, BISB U.CW3-U.TSTA(R5),R0 ;GET CURRENT SPEED6 BR 1040$ ;RESET TO CURRENT SPEED AND PARITY SETTINGS .ENDC ;T$$SMC .IF DF T$$GMC;F; GET PARITY SENSE;B1020$: CLRB (R1) ;ASSUME ODD PARITY ASSUME U3.OPA,100000! TST U.CW3-U.TSTA(R5) ;CHECK THATS BMI 1030$ ;CORRECT - JUMP3 INCB (R1) ;SHOW EVEN PARITYN1030$: INC R1 ;BUMP POINTER# MOV #100000,R0 ;INDICATE GET SPEEDI .ENDC ;T$$GMC .IF DF T$$GMC ! T$$SMC ; 1040$:6 CALL CTRPRM ;MAKE SURE INTERFACE HAS SETTABLE PARITY3 RETURN ;RETURN TO CALLER FOR NEXT CHARACTERISTIC0 .ENDC ;DF T$$GMC ! T$$SMC7 .SBTTL . MCCLN - SETTING (7/8-BIT) CHARACTER LENGTH ; ; GET/SET CHARACTER LENGTH ;RMCCLN::  .IF DF T$$GMC&T$$SMCA# BEQ 1050$ ;GET CHAR LENGTH - JUMPT .ENDC ; T$$GMC&T$$SMC .IF DF T$$SMC;S; SET 7-BIT CHARACTER LENGTH; , BIC #S5.CLN,U.TST5-U.TSTA(R5) ;ASSUME 8-BIT TSTB (R1)+ ;CHECK ASSUMPTION BEQ 1060$ ;CORRECT - JUMP:) BIS #S5.CLN,U.TST5-U.TSTA(R5) ;SET 7-BITT7 BR 1060$ ; JOIN COMMON CODE TO CHANGE LINE PARAMETERST .ENDC ;T$$SMC .IF DF T$$GMC;; GET CHARACTER LENGTH;N1050$:  CLRB (R1) ;ASSUME 8-BIT * BIT #S5.CLN,U.TST5-U.TSTA(R5) ;CHECK THAT BEQ 10700xwtbl0$ ;CORRECT - JUMPB INCB (R1) ;SET 7-BIT LENGTHM5 BR 1070$ ;JOIN COMMON CODE TO CHECK LINE PARAMETERS  .ENDC ;T$$GMC .IF DF T$$SMC/1060$: MOV #10000,R0 ;INDICATE SET 7-BIT LENGTH BR 1080$U .ENDC ; DF T$$SMC .IF DF T$$GMC1070$: INC R1 ;BUMP POINTER# MOV #20000,R0 ;INDICATE GET LENGTH  .ENDC ;DF T$$GMCT .IF DF T$$GMC ! T$$SMCD1080$:7 CALL CTRPRM ;MAKE SURE INTERFACE HAS SETTABLE LENGTH 4 RETURN ;RETURN TO CALLER FOR NEXT CHARACTERISTICS .ENDC ;DF T$$GMC ! T$$SMC .DSABL LSB7;L7; LOCAL SUBROUTINE TO CALL CONTROLLER-DEPENDENT ROUTINET; SPDPRM:C$ CMPB -2(R1),#TC.RSP ;RECEIVE SPEED? BEQ 10$ ;IF EQ, YES...SKIP& BIS #400,R0 ;N - FLAG TRANSMIT SPEED10$: .IF DF T$$MOD# CMPB -2(R1),#TC.ASP ;ANSWER SPEED?V BNE CTRPRM ;IF NE, NO...SKIP$ BIS #1000,R0 ;Y - FLAG ANSWER SPEED .ENDC ;T$$MODCTRPRM:C MOV R1,-(SP) ;Save R1+ CLR R1 ;Indicate not flow control change.T .ENDC ;D$$H11!D$$Z11!D$$V11 .ENABLE LSBCTRPR2: MOV #10$,-(SP)9 CALL MPCCOR ;MAP DRIVER DATA AND RETURN AS A CO-ROUTINEL5 MOV #CT.PRM,R2 ;SET INDEX FOR LINE PARAMETER ROUTINER .IF DF T$$OVL) MOV #CTRD,-(SP) ;GET ADDRESS OF ROUTINE  CALL MPROT ;AND GOTO ROUTINE8 RETURN ;CAN'T USE CALLR CAUSE OF STACK INPUT TO MPROT .IFF ;T$$OVLN7 CALLR CTRD ;CALL CONTROLLER ROUTINE AND PRESERVE CC-CC .ENDC ;T$$OVL10$:+ MOV (SP)+,R1 ;Restore R1 and preserve CC-Cf RETURN ;Donee; .DSABLE LSB.PAGE!; .SBTTL . MCTSY, MCHSY, MCBIN - FLOW CONTROL STATUS CHANGE .ENABL LSBA MCTSY:: ; OUTPUT FLOW CONTROL .IF DF T$$GMC&T$$SMCF0 BEQ 9100$ ;GET OUTPUT FLOW CONTROL INFO - JUMP .ENDC ;T$$GMC&T$$SMC  .IF DF T$$SMC;O; SET OUTPUT FLOW CONTROLR; 4 MOV #^B<1000>,-(SP) ; ASSUME NO OUTPUT FLOW CONTROL6 BIC #S3.TSY,-U.TSTA(R5) ; ASSUME NO TTSYNCH TSTB (R1)+ ; CHECK ASSUMPTION' BEQ 9900$ ; CORRECT - NOTIFY THE PORTr0 BIS #S3.TSY,-U.TSTA(R5) ; SET TTSYNCH6 MOV #^B<0100>,(SP) ; SET FLAG FOR ENABLE FLOW CONTROL BR 9900$ ; NOTIFY THE PORT .ENDC ;T$$SMC .IF DF T$$GMC19100$: CLRB (R1) ; ASSUME NO OUTPUT FLOW CONTROLC+ BIT #S3.TSY,-U.TSTA(R5) ; CHECK BEQ 9950$ ; CORRECT - RETURN& INCB (R1) ; SHOW OUTPUT FLOW CONTROL BR 9950$ ; AND RETURNL .ENDC ;T$$GMCMCHSY:: ; Input flow controlM .IF DF T$$GMC&T$$SMC / BEQ 9200$ ;Get input flow control info - JumpY .ENDC ;T$$GMC&T$$SMC< .IF DF T$$SMC;S; Set input flow control;P3 MOV #^B<0010>,-(SP) ; ASSUME NO INPUT FLOW CONTROLT5 BIC #S4.HSY,-U.TSTA(R5) ; Assume no HSYNCH0 TSTB (R1)+ ; Check assumptionF' BEQ 9900$ ; Correct - Notify the portS/ BIS #S4.HSY,-U.TSTA(R5) ; Set HSYNCH6 MOV #^B<0001>,(SP) ; SET FLAG FOR ENABLE FLOW CONTROL BR 9900$ ; Notify the port .ENDC ;T$$SMC .IF DF T$$GMC09200$: CLRB (R1) ; Assume no input flow control+ BIT #S4.HSY,-U.TSTA(R5) ; CheckM BEQ 9950$ ; Correct - Return& INCB (R1) ; Show output flow control BR 9950$ ; And returnF .ENDC ;T$$GMCMCBIN:: ; Read Pass All .IF DF T$$GMC&T$$SMCT* BEQ 9300$ ;Get read pass all info - Jump .ENDC ;T$$GMC&T$$SMC .IF DF T$$SMC;-; Set read pass allC;4 MOV #^B<1000>,-(SP) ; ASSUME NO OUTPUT FLOW CONTROL9 BIS #S3.RAL,-U.TSTA(R5) ; Assume read pass all  TSTB (R1)+ ; Check assumptionu' BNE 9900$ ; Correct - Notify the port.9 BIC #S3.RAL,-U.TSTA(R5) ; Set no read pass all2 BIT #S3.TSY,-U.TSTA(R5) ; TTSYNCH now?7 BEQ 9900$ ; If EQ no - Notify port of no flow controlA7 MOV #^B<0100>,(SP) ; Set the output flow control flagss BR 9900$ ; Notify the port .ENDC ;T$$SMC .IF DF T$$GMC,9300$: CLRB (R1) ; Assume not read pass all+ BIT #S3.RAL,-U.TSTA(R5) ; CheckL BEQ 9950$ ; Correct - Return INCB (R1) ; Show read pass all BR 9950$ ; And return$ .ENDC ;T$$GMC .IF DF T$$SMC;3?; Notify the port of the flow control status change. The flags<; are passed i00yxtkTADATADATADATADATADATAn R1. ;T29900$: MOV (SP),-(SP) ; Duplicate the top of stack MOV R1,2(SP) ; Save R1B MOV (SP)+,R1 ; Settup the flag ' CALLR CTRPR2 ; Call the port and exito .ENDC ;T$$SMC .IF DF T$$GMC9950$:' INC R1 ; POINT TO NEXT CHARACTERISTIC" RETURN ; All done with this one .ENDC ;T$$GMC .DSABL LSB .PAGE( .SBTTL . MCTTP - TERMINAL TYPE OPTIONS;d; GET/SET TERMINAL TYPEC;MCTTP::$ .IF DF T$$GMC&T$$SMCp$ BEQ 460$ ;GET TERMINAL TYPE - JUMP .ENDC ;T$$GMC&T$$SMCi .IF DF T$$SMC;(; SET TERMINAL TYPE.J; IF THE TYPE IS RECOGNIZED (CONTAINED IN THE TABLES TTYP1, TTYP2, TTYP3),J; SET THE CORRESPONDING IMPLICIT CHARACTERISTICS. IMPLICIT CHARACTERISTICS; ARE:; TC.HHT; TC.HFF; TC.HFL; TC.LPP; TC.SCP; TC.VFL; TC.WID; 5; IN ADDITION, THE CURSOR POSITIONING TYPE IS STORED.;B.; IN ANY CASE, STORE NEW TYPE VALUE IN U.TTYP.;  CLR R2 ;GET NEW TYPE VALUE+ BISB @R1,R2 ;WITHOUT SIGN EXTEND PROBLEMSE BEQ 440$ ;ZERO - UNKNOWN, JUMP( CMPB R2,#TTPHI ;IN TERMINAL TYPE TABLE? BHI 440$ ;N - UNKNOWN, JUMPS/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPINGT- TSTB TTYP2-1(R2) ;UNSUPPORTED TERMINAL TYPE?T BEQ 435$ ;Y - JUMP? BIC #U2.CRT,U.CW2-U.TSTA(R5) ;ASSUME 0 FOR ALL CHARACTERISTICSC; BIC #S4.HFF!S4.HHT!S4.HFL!S4.VFL,6(R5) ;MORE BITS TO CLEARIA BIC #U3.UPC,U.CW3-U.TSTA(R5) ;ASSUME TERMINAL SUPPORTS LOWERCASEU CMPB R2,#T.AS35 ;CHECK THAT) BHI 400$ ;ASSUMPTION WAS CORRECT - JUMPE< BIS #U3.UPC,U.CW3-U.TSTA(R5) ;FORCE CONVERSION TO UPPERCASE7400$: MOVB TTYP1-1(R2),R0 ;GET IMPLICIT CHARACTERISTICSS* BICB #300,R0 ;CLEAR OUT CURSOR POS. TYPE;P:; HFF,HFL,HHT,VFL MUST BE IN THE LOW BYTE OF STATUS WORD 4;  .IIF GE S4.HFF-400 .ERROR .IIF GE S4.HFL-400 .ERROR .IIF GE S4.HHT-400 .ERROR .IIF GE S4.VFL-400 .ERROR5 BISB R0,6(R5) ;STORE IMPLICIT CHARACTERISTICS IN LOW5 ;BYTE OF STATUS WORD 4A BIC #U2.HFF,U.CW2-U.TSTA(R5) ;ASSUME NEW TYPE DOESN'T SUPPORT FFS2 BITB #S4.HFF,R0 ;WAS FORMFEED CHARACTERISTIC SET? BEQ 420$ ;N - JUMP< BIS #U2.HFF,U.CW2-U.TSTA(R5) ;INDICATE TERMINAL SUPPORTS FF420$: = MOVB TTYP2-1(R2),U.CW4-U.TSTA(R5) ;STORE IMPLICIT PAGE WIDTHT? MOVB TTYP3-1(R2),U.TLPP-U.TSTA(R5) ;STORE IMPLICIT PAGE LENGTHR BPL 430$ ;NOT A SCOPE - JUMP8 BICB #200,U.TLPP-U.TSTA(R5) ;CLEAR SCOPE FLAG IN U.TLPP; BIS #U2.CRT,U.CW2-U.TSTA(R5) ;INDICATE TERMINAL IS A SCOPET430$:A: .IIF LT S4.ABD-400 .ERROR ; ABD MUST BE IN THE HIGH BYTEB BICB #^C,7(R5) ;SET EXTENDED TERMINAL CHARACTERISTICS BISB TTYP4-1(R2),7(R5) ; ...H435$: ;REFERENCE LABELT+ MOV I.PRM(R3),KISAR6 ;RESTORE TASK MAPPING(440$:W/ MOVB (R1),U.TTYP-U.TSTA(R5) ;SET TERMINAL TYPET> BIC #U2.L3S!U2.VT5,U.CW2-U.TSTA(R5) ;CLEAR TERMINAL TYPE BITS CMPB (R1)+,#T.L30S ;LA30S?C BNE 450$ ;N - JUMP= BIS #U2.L3S,U.CW2-U.TSTA(R5) ;OTHERWISE, SET LA30S TYPE FLAGI BR 455$ ;SKIP TO FINISHT!450$: CMPB -1(R1),#T.VT05 ;VT05B?R BNE 455$ ;IF NE, NO...SKIP= BIS #U2.VT5,U.CW2-U.TSTA(R5) ;OTHERWISE, SET VT05B TYPE FLAGA455$:I) RETURN ;RETURN FOR NEXT CHARACTERISTIC  .ENDC ;T$$SMC .IF DF T$$GMC; ; GET TERMINAL TYPE(;4460$:M: MOVB U.TTYP-U.TSTA(R5),(R1)+ ;GIVE USER THE TERMINAL TYPE) RETURN ;RETURN FOR NEXT CHARACTERISTICP .ENDC ;T$$GMC.PAGE 1 .SBTTL . MCTBF - TYPEAHEAD BUFFER COUNT OPTIONSU;T@; FLUSH TYPEAHEAD OR GET TYPEAHEAD BUFFER ACTIVE CHARACTER COUNT;5MCTBF::- .IF DF T$$GMC&T$$SMCB BEQ 510$ ;GET COUNT - JUMP .ENDC ;T$$GMC&T$$SMC  .IF DF T$$SMC;Y; FLUSH THE TYPE-AHEAD BUFFERT; # INC R1 ;SKIP PAST DUMMY SET VALUE$7 CALL MPCCOR ;MAP DATABASE AND COME BACK AS CO-ROUTINE6 .IF DF T$$OVL MOV #I1CTXL,-(SP) ;GET ADDRESSI. CALL MPROT ;CALL ROUTINE TO FLUSH TYPE AHEAD RETURN ;BACK FROM COROUTINE .IFF ;T$$OVLF7 CALLR I1CTXL ;FLUSH TYPE-AHEAD BUFFER WITH INTERRUPTSR ;LOCKED OUTF .ENDC ;T$$OVL .ENDC ;T$$SMC .IF DF T$$GMC;C7; GET THE NUMBER OF CHARACTERS IN THE TYPE-AHEAD BUFFERC;$510$: .IF DF T$$SPL5 MOV U.TAPR-U.TSTA(R5),KDSAR5 ;MAP00 ywtbl THE UCBX AND TABUFS! MOV #120000+U.TTBF,R2 ;GET TABUFM .IFF ;T$$SPLO/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPING#$ MOV U.TTAB-U.TSTA(R5),R2 ;GET TABUF .IFTF ;T$$SPL* MOVB 2(R2),R2 ;GET ACTIVE CHARACTER COUNT .IFF ;T$$SPLV& MOV I.PRM(R3),KISAR6 ;MAP USER BUFFER .ENDC ;T$$SPL% MOVB R2,(R1)+ ;STORE COUNT IN BUFFER.) RETURN ;RETURN FOR NEXT CHARACTERISTICH .ENDC ;T$$GMC.PAGE 6 .SBTTL . MCTYP/MCTBS - TYPEAHEAD BUFFER SIZE OPTIONS;V,; GET/SET TYPEAHEAD BUFFER PRESENCE AND SIZE;S .IF DF T$$SPL .ENABL LSBUMCTYP::  .IF DF T$$GMC&T$$SMCI BEQ 520$ ;GET PRESENCE - JUMP .ENDC ;T$$GMC&T$$SMCR .IF DF T$$SMC;;/; ENABLE TYPEAHEAD WITH AN OPTIMAL DEFAULT SIZEU;9 MOV #<<2*64.>->,R2 ;COMPUTE OPTIMAL TABUF SIZE' TSTB (R1)+ ;ASSUME ENABLING TYPEAHEAD  BNE 530$ ;CORRECT - JUMP CLR R2 ;INDICATE NO TYPEAHEADH BR 530$ ;ENFORCE THAT  .ENDC ;T$$SMC .IF DF T$$GMC;EI; RETURN WHETHER TYPEAHEAD IS ENABLED OR DISABLED (ENABLED IMPLIES A SIZEF; OF 2 OR GREATER);S0520$: MOVB #1,(R1)+ ;ASSUME TYPEAHEAD IS ENABLED BR 580$ ;CHECK THATM .ENDC ;T$$GMC;$; GET/SET TYPEAHEAD BUFFER SIZEN;EMCTBS::D .IF DF T$$GMC&T$$SMCS BEQ 570$ ;GET COUNT - JUMP .ENDC ;T$$GMC&T$$SMCT .IF DF T$$SMC; 3; SET THE SIZE OF THE TYPEAHEAD BUFFER (0 -> 255.).U2; A SIZE OF ZERO OR ONE IMPLIES TYPEAHEAD DISABLED;E# CLR R2 ;PREPARE TO PICK UP A BYTE$+ BISB (R1)+,R2 ;GET THE USER SPECIFIED SIZEB'530$: MOV R1,-(SP) ;SAVE BUFFER POINTER< MOV #120000+U.TAST,R1 ;SET POINTER TO UNSOLICITED INPUT ACB X = U.TAST .IF DF T$$CCA4 MOV (R1)+,-(SP) ;SAVE UNSOLICITED INPUT ACB ADDRESS X = X + 2 .ENDC ;T$$CCA .IF DF T$$SCA ASSUME U.TSCA,X X = X + 23 MOV (R1)+,-(SP) ;SAVE SWITCH CHARACTER ACB ADDRESSE .ENDC ;T$$SCA .IF DF T$$MHU ASSUME U.TMHA,X X = X + 2O/ MOV (R1)+,-(SP) ;SAVE MODEM HANGUP ACB ADDRESSR .ENDC ;T$$MHU .IF DF T$$ICS ASSUME U.TICA,X X = X + 2Z* MOV (R1)+,-(SP) ;SAVE ICS ACB/TEP ADDRESS .ENDC ;T$$ICS .IF DF T$$OOB ASSUME U.TOBA,X X = X + 2 * MOV (R1)+,-(SP) ;SAVE OOB ACB/TEP ADDRESS .ENDC ;T$$OOB MOV R2,R1 ;PUT SIZE IN R1 BNE 540$ ;SETTING NOTYPEAHEAD? MOV #1,R1 ;Y - SET SIZE TO 1540$: MOV R1,-(SP) ;SAVE SIZE : ADD #T$$UXL+4+77,R1 ;COMPUTE TOTAL NUMBER OF BYTES NEEDED8 ASH #-6,R1 ;CONVERT TO NUMBER OF SECONDARY POOL BLOCKS' CALL $ALSEC ;ATTEMPT TO ALLOCATE THEM BCS 560$ ;FAILURE - JUMP: MOV R0,-(SP) ;SAVE ADDRESS OF SEC POOL RETURNED BY $ALSEC5 MTPS #TTPRI ;PREVENT INTERRUPTS WHILE CHANGING SIZEO .IF DF T$$OVL* MOV $DALED,KISAR6 ;;MAP TO DATA FOR MPROT: MOV #DEUCBX,-(SP) ;;DEALLOCATE THE CURRENT UCBX AND TABUF CALL MPROT ;; ... .IFF ;T$$OVLS1 CALL DEUCBX ;;DEALLOCATE CURRENT UCBX AND TABUF$ .IFTF ;T$$OVL( MOV (SP)+,R0 ;;RETRIEVE THE NEW ADDRESS/ MOVB (SP),U.TBSZ-U.TSTA(R5) ;;SET THE NEW SIZEC- BIS #S3.TAB,4(R5) ;;ASSUME SETTING TYPEAHEAD0 DEC (SP)+ ;;CHECK THAT BNE 550$ ;;CORRECT - JUMPP$ BIC #S3.TAB,4(R5) ;;SET NOTYPEAHEAD550$:T .IFT ;T$$OVLL 2 MOV #STUCBX,-(SP) ;;CREATE THE NEW UCBX AND TABUF CALL MPROT ;; ... # MOV I.PRM(R3),KISAR6 ;; REMAP TASKH .IFF ;T$$OVLD- CALL STUCBX ;;CREATE THE NEW UCBX AND TABUF .ENDC ;T$$OVL8 MOV #120000+X,R1 ;;POINT TO FIRST UCBX CELL TO BE MOVED> .IIF DF T$$OOB, MOV (SP)+,-(R1) ;;RESTORE OOB ACB/TEP POINTER> .IIF DF T$$ICS, MOV (SP)+,-(R1) ;;RESTORE ICS ACB/TEP POINTERC .IIF DF T$$MHU, MOV (SP)+,-(R1) ;;RESTORE MODEM HANGUP ACB POINTERTC .IIF DF T$$SCA, MOV (SP)+,-(R1) ;;RESTORE SWITCH CHAR. ACB POINTER-C .IIF DF T$$CCA, MOV (SP)+,-(R1) ;;RESTORE UNSOL. INPUT ACB POINTERM MTPS #PR0 ;;ENABLE INTERRUPTS * MOV (SP)+,R1 ;RESTORE TASK BUFFER POINTER" RETURN ;GET NEXT CHARACTERISTIC;V<; ALLOCATION FAILURE TRYING TO CREATE A NEW TYPEAHEAD BUFFER;T560$:MSTKPOP = X - U.TAST + 2B, ADD #STKPOP,SP ;CLEAR PARAMETERS FROM STACK* MOV (SP)+,R1 ;RESTORE TASK BUFFER POINTER, TST (SP)+ ;CLEAN RETURN ADDRESS FROM S00yxtkTADATADATADATADATADATATACK' JMP ERCUPN ;REPORT ALLOCATION FAILURE- .ENDC ;T$$SMC .IF DF T$$GMC;&; GET THE SIZE OF THE TYPEAHEAD BUFFER;U570$:NB MOVB U.TBSZ-U.TSTA(R5),(R1)+ ;GET SIZE ASSUMING TYPEAHEAD ENABLED580$:E) BIT #S3.TAB,4(R5) ;IS TYPEAHEAD ENABLED?H BNE 590$ ;CORRECT - JUMP CLRB -1(R1) ;RETURN SIZE = 0590$:H" RETURN ;GET NEXT CHARACTERISTIC .ENDC ;T$$GMC .DSABL LSB  .ENDC ;T$$SPL.PAGEK" .SBTTL . MCCTS - CONTROL-S STATE;I; GET/SET CONTROL-S STATUS; MCCTS::R .IF DF T$$GMC&T$$SMCE BEQ 630$ ;GET ^S STATUS - JUMP .ENDC ;T$$GMC&T$$SMC .IF DF T$$SMC; ; SET OR CLEAR ^S CONDITION$;. MOVB (R1)+,R2 ;GET NEW VALUE FROM USER BUFFER< CALL MPCCOR ;MAP DRIVER DATA AND COME BACK AS A CO-ROUTINE TSTB R2 ;ARE WE SETTING ^S?  BNE 610$ ;Y - JUMP;RF; NOTE: DUE TO MAPPING COMPLICATIONS, THE FOLLOWING CODE IS DUPLICATED; FROM I1CTSL AND I1CTQL* ;N - FAKE A ^Q. TASK MAPPED ON RETURN! CALL LOCKI ;LOCK OUT INTERRUPTS * BIC #S2.CTS,2(R5) ;;;CLEAR CONTROL-S FLAG0 MOV #CT.RES,R2 ;;;SET INDEX FOR "RESUME OUTPUT"@ BITB #US.OIU,U.STS-U.TSTA(R5) ;;;EXPECTING AN OUTPUT INTERRUPT?# BNE 660$ ;;;IF NE, NO...JUST EXIT  BR 620$+610$: ;FAKE A ^S, RETURN WILL REMAP TASKM! CALL LOCKI ;LOCK OUT INTERRUPTSA( BIS #S2.CTS,2(R5) ;;;SET CONTROL-S FLAG. MOV #CT.STP,R2 ;;;SET INDEX FOR "STOP OUTPUT"620$:  .IF DF T$$OVL) MOV #CTRD,-(SP) ;GET ADDRESS OF ROUTINE  CALL MPROT ;AND GOTO ROUTINE RETURN; .IFF ;T$$OVLT1 CALLR CTRD ;;;CALL CONTROLLER DEPENDENT ROUTINE# .ENDC ;T$$OVL .ENDC ;T$$SMC .IF DF T$$GMC;.; GET TERMINAL ^S AND ^O STATUST; /630$: CLRB @R1 ;ASSUME NEITHER ^S OR ^O IS SET ASSUME S2.CTS,100000A* TST 2(R5) ;VERIFY ASSUMPTION FOR ^S BIT$ BPL 640$ ;ASSUMED CORRECTLY - JUMP. INCB @R1 ;ASSUMPTION WAS WRONG - SET THE BIT7640$: BIT #S2.CTO,2(R5) ;VERIFY ASSUMPTION FOR ^O BITT BEQ 650$ ;^O IS NOT SET - JUMP4 BISB #2,@R1 ;^O IS SET, SET CORRESPONDING USER BIT650$: INC R1 ;SKIP PAST VALUE FIELDE D .ENDC ;T$$GMC .IF DF T$$GMC!T$$SMC;'660$: RETURN ;GET NEXT CHARACTERISTICN .ENDC ;T$$GMC!T$$SMC.PAGE@+ .SBTTL . MCACD - ANCILLARY CONTROL DRIVERM .IF DF T$$ACD;T(; GET/SET ANCILLARY CONTROL DRIVER (ACD);6MCACD::U .IF DF T$$GMC&T$$SMCC) BEQ 810$ ;GET ACD IDENTIFICATION NUMBER4 .ENDC ;T$$GMC&T$$SMCV .IF DF T$$SMC; 1; SET/RESET THE ACD ASSOCIATED WITH THIS TERMINAL@; 2 MOV R1,-(SP) ;SAVE CHARACTERISTICS BUFFER POINTER& MOV R3,-(SP) ;SAVE I/O PACKET POINTER/ CLR -(SP) ;ASSUME NO TARGET ACD WAS SPECIFIEDN! TSTB @R1 ;CHECK THAT ASSUMPTIONN BEQ 730$ ;VALID - JUMP;@F; SEARCH THE ACB LIST (LISTHEAD IS $ACDHD) FOR THE PROTOTYPE ACB WHICHK; HAS THE SAME IDENTIFICATION NUMBER AS THE NUMBER SPECIFIED BY THE REQUESTM;< MOV $ACDHD,R0 ;TARGET ACD SPECIFIED, FIND ITS PROTOTYPE ACB: BEQ 710$ ;THERE ARE NO ACDS IN THE SYSTEM - RETURN ERRORI700$: CMPB A.NUM(R0),@R1 ;HAVE WE FOUND THE MATCHING PROTOTYPE ACD BLOCK?I BEQ 720$ ;Y - JUMP+ MOV A.LIN(R0),R0 ;N - GET NEXT ACB IN LISTO BNE 700$ ;KEEP LOOKING710$: TST (SP)+ ;CLEAN STACKO) MOV (SP)+,R3 ;RESTORE I/O PACKET POINTERT5 MOV (SP)+,R1 ;RESTORE CHARACTERISTICS BUFFER POINTERW, TST (SP)+ ;CLEAN RETURN ADDRESS FROM STACK$ JMP ERCVL1 ;RETURN BAD VALUE ERROR;M2; FOUND THE ACB. CHECK IF CONNECTS ARE DISALLOWED;AG720$: BITB #AS.DLT!AS.DIS,A.STA(R0) ;ACD MARKED FOR DELETE OR DISABLED?A BNE 710$ ;Y - ERRORN;H ; ATTEMPT TO ALLOCATE A FULL ACB;Q6 MOV R0,-(SP) ;SAVE R0 DESTROYED BY ALLOCATION ROUTINE) CLR R1 ;EXTRA STEP TO AVOID SIGN EXTENDS+ BISB A.FLEN(R0),R1 ;SET LENGTH OF FULL ACBE CALL $ALOCB ;ALLOCATE AN ACB9 MOV R0,R2 ;COPY ACB ADDRESS WITHOUT AFFECTING CARRY BITN5 MOV (SP)+,R0 ;RESTORE R0 WITHOUT AFFECTING CARRY BITL% BCS 710$ ;ALLOCATION FAILED - ERROR ;CG; SAVE THE ADDRESS OF THE FULL ACB, AND COPY THE COMMON FIELDS FROM THER; PROTOTYPE ACB INTO ITD;0 MOV R2,@SP ;REPLACE ZERO WITH FULL ACB ADDRESS$ INC A.ACC(R0) ;UPDATE ACD U00ywtblSE COUNT. MOV (R0)+,(R2)+ ;COPY RELOCATION BIAS (A.REL)5 MOV (R0)+,(R2)+ ;COPY DISPATCH TABLE POINTER (A.DIS)T7 MOV (R0)+,(R2)+ ;COPY FIRST FUNCTION MASK WORD (A.MAS): MOV (R0)+,(R2)+ ;COPY SECOND FUNCTION MASK WORD (A.MAS+2): MOV (R0),(R2) ;COPY ID NUMBER (A.NUM) AND LENGTH (A.FLEN); H; IF THE TERMINAL IS CURRENTLY LINKED TO AN ACD, FIND THE PROTOTYPE ACB.H; IF IT CANNOT BE FOUND THEN A SERIOUS ERROR HAS OCCURRED AND THE SYSTEM ; IS CRASHED.O;T.730$: MOV U.ACB-U.TSTA(R5),R2 ;GET CURRENT ACB BEQ 770$ ;NONE - JUMP+5 MOV $ACDHD,R0 ;SEARCH THE ACB LIST FOR ITS PROTOTYPED9 BEQ 750$ ;LIST IS EMPTY YET TERMINAL HAS AN ACD - CRASHT<740$: CMPB A.NUM(R0),A.NUM(R2) ;IS THIS THE RIGHT PROTOTYPE? BEQ 760$ ;Y - JUMP1 MOV A.LIN(R0),R0 ;GET NEXT PROTOTYPE ACB IN LISTN BNE 740$ ;KEEP LOOKING:750$: CRASH ;CAN'T FIND PROTOTYPE OF CURRENT ACD - CRASH;CK; FOUND THE PROTOTYPE. DECREMENT THE USE COUNT AND DISCONNECT THE ACD FROM<; THE TERMINAL. THEN ALERT THE ACD TO WHAT HAS TAKEN PLACE.;B-760$: DECB A.ACC(R0) ;DECREMENT THE USE COUNTR= CLR U.ACB-U.TSTA(R5) ;DISASSOCIATE THE ACD FROM THE TERMINALE: MOV #A.DISC,R1 ;SET TO CALL ACD AT DISCONNECT ENTRY POINT. MOV R2,R0 ;MAKE ACB ADDRESS AVAILABLE TO ACD CALL 790$ ;SWITCH TO ACD;NA; COMPLETE DISCONNECT PROCESSING BY DEALLOCATING THE OLD FULL ACB ;N+ MOV R2,R0 ;COPY ADDRESS OF NOW UNUSED ACB) CLR R1 ;EXTRA STEP TO AVOID SIGN EXTENDO+ BISB A.FLEN(R0),R1 ;SET LENGTH OF FULL ACBN! CALL $DEACB ;DEALLOCATE THE ACBA;L*; CONNECT THE NEW ACD IF ONE WAS SPECIFIED;S3770$: MOV @SP,R0 ;GET THE NEW ACD FULL ACB ADDRESS ! BEQ 780$ ;NONE SPECIFIED - EXIT ;TC; INFORM THE ACD OF THE CONNECT AND THEN PERFORM THE CONNECT ITSELF ;I8 CLRB A.IOS(R0) ;ASSUME CONNECT REQUEST WILL BE ACCEPTED; MOV #A.CONN,R1 ;SET TO CALL ACD AT ITS CONNECT ENTRY POINTM CALL 790$ ;SWITCH TO THE ACD" MOV (SP),R0 ;GET THE ACB ADDRESS. TSTB A.IOS(R0) ;WAS CONNECT REQUEST ACCEPTED? BEQ 775$ ;Y - JUMP) CLR R1 ;EXTRA STEP TO AVOID SIGN EXTENDC@ BISB A.FLEN(R0),R1 ;SET LENGTH OF FULL ACB THE ACD HAS REJECTED! CALL $DEACB ;DEALLOCATE THE ACB0 BR 710$ ;RETURN AN ERRORJ775$: MOV R0,U.ACB-U.TSTA(R5) ;LINK THE ACB TO CONNECT ACD TO THE TERMINAL;C; SET/RESET EXIT PROCESSING ;U780$: TST (SP)+ ;CLEAN STACKO) MOV (SP)+,R3 ;RESTORE I/O PACKET POINTER 5 MOV (SP)+,R1 ;RESTORE CHARACTERISTICS BUFFER POINTER ) TSTB (R1)+ ;POINT TO THE NEXT PARAMETERC) RETURN ;RETURN FOR NEXT CHARACTERISTIC ;PN; SUBROUTINE TO SET UP STACK PARAMETERS AND THEN CALL THE EXECUTIVE SUBROUTINE:; WHICH SWITCHES FROM THE DRIVER TO THE ACD AND BACK AGAIN;C790$: & MOV KINAR5,-(SP) ;SET CURRENT MAPPING .IF DF T$$COM. MOV KDSAR5,-(SP) ;SET CURRENT D-SPACE MAPPING .ENDC% MOV R1,-(SP) ;SET ENTRY POINT OFFSETA: JMP $SWAC1 ;JUMP TO ROUTINE TO AVOID EXTRA STACK STORAGE .ENDC ;T$$SMC .IF DF T$$GMC;N;; RETURN THE IDENTICATION NUMBER OF THE CURRENT ACD, IF ANYR;R;810$: CLRB (R1)+ ;ASSUME THERE IS NO ACD FOR THIS TERMINALP+ MOV U.ACB-U.TSTA(R5),R0 ;GET THE ACD BLOCKI BEQ 820$ ;NONE - JUMP 8 MOVB A.NUM(R0),-1(R1) ;RETURN ITS IDENTIFICATION NUMBER820$:P) RETURN ;RETURN FOR NEXT CHARACTERISTIC .ENDC ;T$$GMC .ENDC ;T$$ACD.PAGEG4 .SBTTL . MCRMT - LOCAL/REMOTE/DIALOUT LINE STATUS;P; GET/SET REMOTE STATUS ;A .IF DF T$$MODMCRMT:: .IF DF T$$GMC&T$$SMC ( BNE 100$ ;IF NE, SET NEW REMOTE STATUS .ENDC ;T$$GMC&T$$SMC  .IF DF T$$GMC;1; GET REMOTE STATUSN;C" CLRB (R1)+ ;ASSUME LINE IS LOCAL5 BIT #U2.RMT,U.CW2-U.TSTA(R5) ;IS THIS A REMOTE LINE? - BEQ 10$ ;IF EQ, NO...ASSUMPTION WAS CORRECTT$ INCB -1(R1) ;ASSUME LINE IS REMOTE, BIT #S4.DLO,6(R5) ;IS THIS A DIAL-OUT LINE?- BEQ 10$ ;IF EQ, NO...ASSUMPTION WAS CORRECTO) INCB -1(R1) ;TELL USER LINE IS DIAL-OUTE10$:) RETURN ;RETURN FOR NEXT CHARACTERISTIC .ENDC ;T$$GMC .IF DF T$$SMC;;$; SET LINE REMOTE/NOREMOTE/DIAL-OUT.;$&; THE STATE OF THE LINE IS AS FOLLOWS:; 3; LOCAL -> U2.RMT CLEAR, S4.DLO CLEAR, US.DSB 00%yxtkTADATADATADATADATADATACLEARLE; INCOMING CALLS -> U2.RMT SET, S4.DLO CLEAR, US.DSB SET IF NO CALLER J; OUTGOING CALLS -> U2.RMT SET, S4.DLO SET, US.DSB SET IF NO CALLER/CALLEE;4100$:R) MOV I.TCB(R3),R0 ;GET ISSUING TASK'S TCB / BIT #T3.PRV,T.ST3(R0) ;IS THE TASK PRIVILEGED?T2 BEQ 190$ ;IF EQ, NO...RETURN PRIVILEGE VIOLATION> BIT #U2.RMT,U.CW2-U.TSTA(R5) ;DETERMINE REMOTE STATUS OF LINE( BNE 110$ ;IF NE, LINE IS REMOTE...SKIP, TSTB @R1 ;IS USER SETTING THE LINE REMOTE?& BNE 200$ ;IF NE, YES...SKIP TO DO IT+ INC R1 ;LINE IS ALREADY IN REQUESTED MODET) RETURN ;RETURN FOR NEXT CHARACTERISTIC ;G; LINE IS REMOTE OR DIAL-OUT;S110$:D, TSTB (R1) ;IS USER SETTING THE LINE LOCAL?& BEQ 200$ ;IF EQ, YES...SKIP TO DO IT;#F; RESET OR SWITCH BETWEEN REMOTE AND DIAL-OUT. DON'T HANGUP THE LINE.;P2 CMPB #1,(R1)+ ;IS USER SETTING THE LINE DIAL-OUT?1 BNE 120$ ;IF NE, YES...SKIP TO MAKE IT DIAL-OUTL) BIC #S4.DLO,6(R5) ;SET LINE DIAL-IN ONLYE) RETURN ;RETURN FOR NEXT CHARACTERISTICY120$:I% BIS #S4.DLO,6(R5) ;SET LINE DIAL-OUTN) RETURN ;RETURN FOR NEXT CHARACTERISTICT;A); ERROR PROCESSING FOR SET REMOTE OPTIONSO;190$:$, TST (SP)+ ;CLEAN RETURN ADDRESS FROM STACK( JMP ERCPRI ;RETURN PRIVILEGE VIOLATION;#:; HERE TO DISPATCH ON CONTROLLER TYPE TO CHANGE LINE STATE;T200$:. .IF DF R$$MPL! MOV U.SCB-U.TSTA(R5),R0 ;GET SCB? MOV S.KRB(R0),R0 ;GET KRB' MOVB K.PRM(R0),R0 ;GET CONTROLLER TYPER .IFF ;R$$MPL-/ MOVB U.CTYP-U.TSTA(R5),R0 ;GET CONTROLLER TYPEY .ENDC ;R$$MPL( ADD R0,PC ;DISPATCH BY CONTROLLER TYPE BR RMTDL ;DL11 BR RMTDZ ;DZ11 BR RMTDH ;DH11 BR RMTDJ ;DJ11# CRASH ;DM11 - SHOULDN'T GET HEREN BR RMTDC ;PRO VIDEO INTERFACEE BR RMTDV ;DHV11I RETURN ;TTLH (LAT)E .IF DF D$$M11 .IF DF R$$MPLRMTDH:! MOV U.SCB-U.TSTA(R5),R0 ;GET SCBL MOV S.KRB(R0),R0 ;GET KRB( MOVB K.CON(R0),R0 ;GET CONTROLLER INDEX& ASRB R0 ;CONVERT TO A COUNT (0 TO N) MOVB R0,-(SP) ;SAVE IT  .IF DF T$$SPL!T$$ONI ) MOV $DALED,KISAR6 ;MAP DRIVER DATA SPACE, .ENDC ;T$$SPL!T$$ONIE .IF DF T$$ONI. MOV YMC12,R0 ;GET POINTER TO DM11-BB KRB LIST .IFF ;T$$ONIH. MOV YMCP1,R0 ;GET POINTER TO DM11-BB KRB LIST .ENDC ;T$$ONI .IF DF T$$SPL!T$$ONIR( MOV I.PRM(R3),KISAR6 ;REMAP TASK BUFFER .ENDC ;T$$SPL!T$$ONIU5 CMPB L.NUM-L.KRB(R0),(SP)+ ;IS THIS KRB IN THE LIST?* BLOS RMTER ;IF LOS, NO...RETURN AN ERROR .IFF ;R$$MPLTRMTDH:! MOV U.SCB-U.TSTA(R5),R0 ;GET SCB TST S.DMCS(R0) ;GET DM11-BB CSR* BEQ RMTER ;IF EQ, NONE...REPORT AN ERROR .ENDC ;R$$MPL .ENDC ;D$$M11 .IF DF D$$VMDRMTDV: .ENDC ;D$$VMD .IF DF D$$LMDRMTDL: .ENDC ;D$$LMD .IF DF D$$ZMDRMTDZ: .ENDC ;D$$ZMD8 BIC #U2.RMT,U.CW2-U.TSTA(R5) ;ASSUME SETTING LINE LOCAL* BIC #S4.DLO,6(R5) ;CANNOT DIAL OUT EITHER CMPB @R1,#1 ;ASSUMPTION TRUE?B' BLO 20$ ;IF LO, YES...GO SET IT LOCAL.! BEQ 15$ ;IF EQ, SET LINE REMOTE% BIS #S4.DLO,6(R5) ;SET LINE DIAL-OUT 15$:3 BIS #U2.RMT,U.CW2-U.TSTA(R5) ;ALLOW INCOMING CALLS 20$:( INCB U.TMTI-U.TSTA(R5) ;SET MODEM TIMER7 BISB #US.CRW,U.STS-U.TSTA(R5) ;SET WAITING FOR CARRIER TSTB (R1)+ ;LINE NOW REMOTE?( BNE 30$ ;IF NE, YES...ALL DONE WITH IT3 BICB #US.DSB,U.STS-U.TSTA(R5) ;LOCAL - ENABLE LINES30$:) RETURN ;RETURN FOR NEXT CHARACTERISTICT;A; LINE STATUS CANNOT BE CHANGEDM;O .IF NDF D$$M11 RMTDH: .ENDC ;NDF D$$M11 .IF NDF D$$VMDERMTDV: .ENDC ;NDF D$$VMD .IF NDF D$$LMDURMTDL: .ENDC ;NDF D$$LMD .IF NDF D$$ZMDMRMTDZ: .ENDC ;NDF D$$ZMDRMTDJ:RMTDC:RMTER: TST (SP)+ ;CLEAN OFF THE STACK6 JMP ERCNSC ;RETURN NON-SETTABLE CHARACTERISTIC ERROR .ENDC ;T$$SMC .ENDC ;T$$MOD.PAGEB2 .SBTTL . MCSSC - TERMINAL MGMT SWITCH CHARACTERS .IF DF T$$SCA; #; GET/SET FOR SET SWITCH CHARACTERSS;UF; WHEN ISSUED VIA INTERNAL I/O, THE CHARACTERISTIC BUFFER FORMAT IS:;1); +-------------------------------------+D); 1 | RESERVED | TC.SSC | 0.); |-------------------------------------|D$; 3 | T00-ywtblEP ADDRESS OR 0 | 2); +-------------------------------------+A;?; THE ASSOCIATED TEP MUST BE PROPERLY FORMATTED WITH THE SWITCH;%; CHARACTERS STORED IN OFFSET E.VSWC.B; A; WHEN ISSUED FROM A TASK, THE CHARACTERISTIC BUFFER FORMAT IS:;E); +-------------------------------------+H); 1 | RESERVED | TC.SSC | 0T); |-------------------------------------|-$; 3 | AST ADDRESS OR 0 | 2); |-------------------------------------|-.; 5 | SWITCH CHARACTERS | 4); +-------------------------------------+-;-MCSSC::-8 MOV #U.TSCA,R4 ;SET OFFSET INTO UCBX OF ACB/TEP POINTER .IF DF T$$SMC? MOV #S3.TME,R2 ;IDENTIFY FLAG TO ENABLE/DISABLE CHARACTERISTICA4 MOV #22.,R0 ;SET SIZE OF ACB TO ALLOCATE IF NEEDED .IFTF ;T$$SMC9 CALL GSAENC ;GET/SET STANDARD ASYNCH EVENT NOTIFICATION + ;IT MAY RETURN WITH INTERRUPTS DISABLED- .IFT ;T$$SMCD .IF DF T$$GMC, BVS 100$ ;IF VS, REQUEST WAS SF.GMC...SKIP .ENDC ;T$$GMC4 ;;;CO-ROUTINE DISABLED INTERRUPTS TIL WE FINISH , BNE 10$ ;;;IF NE, WE HAVE AN ACB TO MODIFY0 TST (R1)+ ;;;ELSE, USER CLEARED CHARACTERISTIC5 BR 1000$ ;;;RETURN TO GSAENC TO COMPLETE PROCESSINGD10$:< MOV (R1)+,A.PRM+6(R2) ;;;STORE SWITCH CHARACTERS IN THE ACB .IF DF T$$GMC* BR 1000$ ;;;SKIP TO RETURN TO CO-ROUTINE .ENDC ;T$$GMC .ENDC ;T$$SMC .IF DF T$$GMC;S+; GET TERMINAL MANAGEMENT SWITCH CHARACTERSC;100$:0, BNE 110$ ;IF NE, WE HAVE AN ACB/TEP...SKIP4 CLR (R1)+ ;INDICATE SWITCH CHARACTERS ARE DISABLED BR 1000$ ;FINISH OFF REQUEST110$:  .IF DF R$$IIC7 BCC 120$ ;IF CC, CURRENT SETTING IS FOR AN ACB...SKIP = MOV E.VSWC(R2),(R1)+ ;STORE SWITCH CHARACTERS IN USER BUFFERA) BR 1000$ ;FINISH OFF THE CHARACTERISTICE120$: .ENDC ;R$$IIC> MOV A.PRM+6(R2),(R1)+ ;STORE SWITCH CHARACTERS IN USER BUFFER .ENDC ;T$$GMC1000$:@ SUB #2,I.PRM+4(R3) ;CO-ROUTINE PROCESSED 2 MORE BYTES OF BUFFER4 RETURN ;RETURN TO CO-ROUTINE OR TO GET NEXT CHAR..PAGEI0 .SBTTL . MCTMM - EXIT TERMINAL MANAGEMENT MODE;I&; GET/SET FOR TERMINAL MANAGEMENT MODE;;B; CHARACTERISTIC PACKET FORMAT:I;O; +------------------------+; | 0 | TC.TMM |; +------------------------+; MCTMM::O .IF DF T$$GMC&T$$SMC2+ BEQ 2120$ ;GET TERMINAL MANAGEMENT STATUS+ .ENDC ;T$$GMC!T$$SMC  .IF DF T$$SMC;NC; CHECK FOR ERRORS, EITHER TRYING TO ENABLE TM WITH A QIO OR TRYINGE#; TO EXIT TM WHEN TM IS NOT ACTIVE.O;- TSTB (R1)+ ;EXITING TM?.2 BNE 2110$ ;BR IF NOT. CANNOT ENABLE TM WITH QIO- BIT #S5.TMM,U.TST5-U.TSTA(R5) ;ARE WE IN TM?O0 BEQ 2110$ ;TRYING TO EXIT WHEN WE'RE NOT IN IT) MOV R1,-(SP) ;SAVE REGISTERS OVER KILLI1 MOV R3,-(SP) ;-'; MAP UCBX, AND TERMINATE PENDING READS.;D .IF DF T$$SPL MOV #120000,R4 ;POINT TO UCBX5 MOV U.TAPR-U.TSTA(R5),KDSAR5 ;MAP THE UCBX AND TABUFC .IFF ;T$$SPL / MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPINGY- MOV U.TUX-U.TSTA(R5),R4 ;GET POINTER TO UCBX T .IFTF ;T$$SPL+ MOV #IS.TMM,R0 ;REASON FOR CANCELLED READST .IF DF T$$OVL .IF DF T$$SPL R MOV $DALED,KISAR6 .ENDC ;T$$SPL+ MOV #KILLI1,-(SP) ;GET ADDRESS OF ROUTINE S CALL MPROT ;AND GOTO ROUTINE .IFF ;T$$OVL & CALL KILLI1 ;TERMINATE PENDING READS .ENDC ;T$$OVL% MOV (SP)+,R3 ;RESTORE PACKET ADDRESSU% MOV (SP)+,R1 ;RESTORE BUFFER POINTERN9 BIC #S5.TMM,U.TST5-U.TSTA(R5) ;CLEAR TERMINAL MANG'T BITR .IF DF R$$IIC! BIS #S2.IRQ!S2.ORQ!S2.SRQ,2(R5) E% ;SET BITS TO POSSIBLY RESTART I/O# .ENDC ;R$$IIC .IFF ;T$$SPLD. MOV I.PRM(R3),KISAR6 ;MAP BACK TO USER BUFFER .ENDC ;T$$SPL) RETURN ;RETURN FOR NEXT CHARACTERISTICS .IF DF T$$OVL&T$$SPLO. MOV I.PRM(R3),KISAR6 ;MAP BACK TO USER BUFFER .ENDC ;T$$OVL&T$$SPLR; ; USER ERROR;2110$: JMP ERCVAL ;ILLEGAL VALUES .ENDC ;T$$SMC .IF DF T$$GMC;N$; GET TERMINAL MANAGEMENT MODE STATE;E2120$:" CLRB (R1)+ ;ASSUME TM NOT ACTIVE- BIT #S5.TMM,U.TST5-U.TSTA(R5) ;IS TM ACTIVE?O BEQ 2130$ ;BR IF NO INCB -1(R1) 005yxtkTADATADATADATADATADATA;SAY ENABLED $2130$: M) RETURN ;RETURN FOR NEXT CHARACTERISTICR .ENDC ;T$$GMC .ENDC ;T$$SCA.PAGEE2 .SBTTL . MCMHU - MODEM HANGUP EVENT NOTIFICATION .IF DF T$$MHU;B(; GET/SET FOR MODEM HANG-UP NOTIFICATION;; GET/SET PACKET:*; +-------------------------------------+,; 1 | RESERVED | TC.MHU | 0*; |-------------------------------------|/; 3 | ADDRESS OF AST (TASK) OR TEP (TSA) | 2U*; +-------------------------------------+;BMCMHU::8 MOV #U.TMHA,R4 ;SET OFFSET INTO UCBX OF ACB/TEP POINTER .IF DF T$$SMC? MOV #S3.MHE,R2 ;IDENTIFY FLAG TO ENABLE/DISABLE CHARACTERISTICM4 MOV #20.,R0 ;SET SIZE OF ACB TO ALLOCATE IF NEEDED .ENDC ;T$$SMC9 CALL GSAENC ;GET/SET STANDARD ASYNCH EVENT NOTIFICATION-, RETURN ;RETURN TO GET NEXT CHARACTERISTIC .ENDC ;T$$MHU.PAGE 7 .SBTTL . MCICS - INPUT COUNT STATE EVENT NOTIFICATION| .IF DF T$$ICS; /; GET/SET CHARACTERISTIC BUFFER FORMAT FOR ICS:-;-*; +-------------------------------------+*; 1 | RESERVED | TC.ICS | 0*; |-------------------------------------|/; 3 | ADDRESS OF AST (TASK) OR TEP (TSA) | 2 *; +-------------------------------------+;C; MCICS:: 8 MOV #U.TICA,R4 ;SET OFFSET INTO UCBX OF ACB/TEP POINTER .IF DF T$$SMC? MOV #S3.ICE,R2 ;IDENTIFY FLAG TO ENABLE/DISABLE CHARACTERISTIC 4 MOV #20.,R0 ;SET SIZE OF ACB TO ALLOCATE IF NEEDED .ENDC ;T$$SMC9 CALL GSAENC ;GET/SET STANDARD ASYNCH EVENT NOTIFICATION-) RETURN ;RETURN FOR NEXT CHARACTERISTIC  .ENDC ;T$$ICS.PAGE ; .SBTTL . MCOOB - OUT-OF-BAND CHARACTER EVENT NOTIFICATIONR .IF DF T$$OOB;P ; GET/SET OUT-OF-BAND CHARACTERS;-I; WHEN THIS CHARACTERISTIC IS ISSUED VIA INTERNAL I/O, THIS IS THE FORMAT '; OF THE GET/SET CHARACTERISTIC BUFFER:M;#*; +-------------------------------------+(; 1 | RESERVED | TC.OOB | 0*; |-------------------------------------|/; 3 | OOB TEP ADDRESS OR ZERO | 2N*; +-------------------------------------+;A9; NOTE THAT THE TEP MUST BE FORMATTED WITH THE BIT MASKS.O;OD; WHEN ISSUED FROM A USER TASK, THE CHARACTERISTIC BUFFER FORMAT IS:;U*; +-------------------------------------+'; 1 | RESERVED | TC.OOB | 0 *; |-------------------------------------|); 3 | OOB AST VIRTUAL ADDRESS | 2-*; |-------------------------------------|$; 5 | OOB BIT MASK 1 | 4*; |-------------------------------------|$; 7 | OOB BIT MASK 2 | 6*; |-------------------------------------|+; 11 | HELLO/CLEAR BIT MASK 1 | 10M*; |-------------------------------------|1; 13 | HELLO/CLEAR BIT MASK 2 | 12-*; |-------------------------------------|1; 15 | INCLUDE BIT MASK 1 | 14-*; |-------------------------------------|1; 17 | INCLUDE BIT MASK 2 | 16-*; +-------------------------------------+; ;4>; IN HELLO/CLEAR BIT MASKS, 0 => CLEAR OOB; 1 => HELLO OOB.>; CHARACTERS THAT ARE CLEAR OOB CANNOT ALSO BE INCLUDE OOB.;1MCOOB::O8 MOV #U.TOBA,R4 ;SET OFFSET INTO UCBX OF ACB/TEP POINTER .IF DF T$$SMC; CLR R2 ;INDICATE NO FLAG TO ENABLE/DISABLE CHARACTERISTIC-4 MOV #52.,R0 ;SET SIZE OF ACB TO ALLOCATE IF NEEDED .IFTF ;T$$SMC9 CALL GSAENC ;GET/SET STANDARD ASYNCH EVENT NOTIFICATION + ;IT MAY RETURN WITH INTERRUPTS DISABLED .IFT ;T$$SMC- .IF DF T$$GMC, BVS 100$ ;IF VS, REQUEST WAS SF.GMC...SKIP .ENDC ;T$$GMC4 ;;;CO-ROUTINE DISABLED INTERRUPTS TIL WE FINISH , BNE 10$ ;;;IF NE, WE HAVE AN ACB TO MODIFY2 ADD #12.,R1 ;;;ELSE, USER CLEARED CHARACTERISTIC+ BR 1000$ ;;;SKIP FOR RETURN TO CO-ROUTINE 10$:;SM; PERFORM CONSISTENCY CHECKS ON THE OOB BITMASKS SUPPLIED BY THE TASK. THE.L; RULES SPECIFY THAT NO CLEAR-OOB CHARACTERS CAN BE INCLUDE-OOB AND THAT ALLL; CLEAR-OOB AND INCLUDE-OOB CHARACTERS MUST BE DECLARED AS OOB CHARACTERS INK; THE FIRST BITMASK DOUBLEWORD. AN ERROR IN THE FIRST CHECK (CLEAR/INCLUDECI; CONFLICT) WILL LEAVE THE BUFFER POINTER 00=ywtblAT THE OFFENDING CLEAR-OOB MASKNL; WORD. FAILING THE SECOND CHECK LEAVES THE BUFFER POINTER AT THE OFFENDING; OOB DECLARATION BITMASK WORD. ;0" ADD #A.PRM+5,R2 ;;;POINT TO FLAGS# CLRB (R2) ;;;INITIALIZE FLAG BYTEE> BISB #AF.OOB,(R2)+ ;;;SET OOB FLAG AND POINT TO OOB MASK WORD$ MOV (R1)+,(R2)+ ;;;STORE OOB MASK 1$ MOV (R1)+,(R2)+ ;;;STORE OOB MASK 2, MOV (R1)+,(R2)+ ;;;STORE HELLO/CLEAR MASK 1, MOV (R1)+,(R2)+ ;;;STORE HELLO/CLEAR MASK 2( MOV (R1)+,(R2)+ ;;;STORE INCLUDE MASK 1( MOV (R1)+,(R2)+ ;;;STORE INCLUDE MASK 2$ CLR (R2)+ ;;;INIT OOB TABUF HEADER+ CLRB (R2)+ ;;;INIT OOB TABUF ACTIVE COUNT& MOVB #10.,(R2) ;;;INIT OOB TABUF SIZE* BR 1000$ ;;;SKIP TO RETURN TO CO-ROUTINE30$:3 MOV #ERCVL1,2(SP) ;;;FORCE RETURN TO ERROR ROUTINEF8 RETURN ;;;EXIT CO-ROUTINE FOR RETURN TO ERROR ROUTINE .ENDC ;T$$SMC .IF DF T$$GMC;O,; GET OUT-OF-BAND CHARACTER AST AND BITMASKS;A100$:M, BNE 110$ ;IF NE, WE HAVE AN ACB/TEP...SKIP" CLRB -3(R1) ;CLEAR RESERVED BYTE$ CLR (R1)+ ;CLEAR FIRST OOB BITMASK% CLR (R1)+ ;CLEAR SECOND OOB BITMASKE# ADD #8.,R1 ;SKIP REST OF BITMASKSA BR 1000$ ;FINISH OFF REQUEST110$:O .IF DF R$$IIC7 BCC 120$ ;IF CC, CURRENT SETTING IS FOR AN ACB...SKIP2;)O; WE GET HERE WHEN GET WAS DONE FROM EXTERNAL I/O BUT THE GOTTEN CHARACTERISTICR; WAS OF THE INTERNAL I/O TYPE;F; ADD #E.VOBM,R2 ;POINT TO WHERE OOB BITMASKS START IN A TEPS( BR 130$ ;FINISH OFF THE CHARACTERISTIC120$:E .ENDC ;R$$IIC= ADD #A.PRM+6,R2 ;POINT TO WHERE OOB BITMASKS START IN AN ACB130$:1! MOV (R2)+,(R1)+ ;COPY OOB MASK 1D! MOV (R2)+,(R1)+ ;COPY OOB MASK 2B) MOV (R2)+,(R1)+ ;COPY HELLO/CLEAR MASK 1F) MOV (R2)+,(R1)+ ;COPY HELLO/CLEAR MASK 2T) MOV (R2)+,(R1)+ ;COPY OOB INCLUDE MASK 1R) MOV (R2)+,(R1)+ ;COPY OOB INCLUDE MASK 2H .ENDC ;T$$GMC1000$:C SUB #12.,I.PRM+4(R3) ;CO-ROUTINE PROCESSED 12 MORE BYTES OF BUFFER 4 RETURN ;RETURN TO CO-ROUTINE OR TO GET NEXT CHAR. .ENDC ;T$$OOB.PAGEN: .IF DF T$$LTH&M$$NET ;THIS IS CONDITIONAL ADDITIONALLY ON, ;A NET AS $LTEEP IS NOT DEFINED W/O NET.* ;IF THE SYSTEM DOESN'T HAVE A NETWORK,$ ;THE LAT CODE WON'T EVER EXECUTE> .SBTTL . MCMAP - GET/SET MAPPING FOR LAT APPLICATION TERMINALK; BUFFER FOR ESTABLISHING MAPPING AND ESTABLISHING TERM AS LAT APPLICATION:;.*; +-------------------------------------+'; |BUFFER SIZE OR 0| TC.MAP |B*; |-------------------------------------|"; | UP TO 16. BYTES |$; | FOR SERVER NAME |; | . |*; |-------------------------------------|"; | SERVICE NAME |; | . |; | . |*; |-------------------------------------|%; | PORT NAME |E; | . |; | . |*; +-------------------------------------+;NF; WHEN THE BUFFER SIZE IS ZERO, WE ARE VOIDING THE MAPPING AND THE LATJ; APPLICATION TERMINAL STATUS. IN THIS CASE, NO BUFFER FOLLOWS THE WORD G; CONTAINING TC.MAP AND THE 0 BYTE. ELSE, THE BUFFER SIZE MUST BE LESS J; THAN OR EQUAL TO 52. AND MUST BE EVEN. EACH NAME IS ALLOWED TO BE 16. $; BYTES IN LENGTH WITH A TRAILING 0.; ); SET LAT BY DEFAULT SETS NOBRO AND SLAVE--; SET NOLAT BY DEFAULT CLEARS NOBRO AND SLAVE ; ; MCMAP::  .IF DF T$$GMC!T$$SMC- -! CMPB #52., (R1) ;CORRECT SYNTAX? BLO ERSYN ;IF 52. OR LESS, OKE BITB #1,(R1) ;IS IT ODD? BNE ERSYN ;NOT ALLOWED10$:$ MOV $CTLST,R2 ;GET FIRST CONTROLLER615$: CMP U.DCB-U.TSTA(R5),L.DCB(R2) ;IS THIS OUR UNIT? BEQ 20$ ;IF EQ, YES - BRANCH MOV (R2),R2 ;GET NEXT ENTRYS BNE 15$ ;IF NE, CHECK IT#17$: TST (SP)+ ;POP RETURN ADDRESSI JMP ERCNSC ;PROCESS ERRORA;Y/20$: CMP L.NAM(R2),#"LH ;SHOULD BE LH CONTROLERF) BNE 17$ ;IF NOT, BRANCH - MAP NOT LEGAL:3 CMP $LTEEP,#$SPVEX ;IS THERE A RETURN INSTRUCTIONR ;AT THE LAT ENTRY POINT?& BEQ 17$ ;IF SO, LAT IS NOT INSTALLED;? CLR -(SP)$ MOVB (R1),(SP) ;SAVE SIZE OF BUFFER) MOV R3,-(SP) ;SAVE POINTER TO I/O PACKET( MOV #PO$MAP,R3 , MOV (SP),R0 ;GET IRP ADDRESS TO R0 FOR LAT ;USE00EyxtkTADATADATADATADATADATAR BUFFER IN R1 FOR LAT8 MOV KISAR6,R2 ;GET MAPPING OF USER BUFFER TO R2 FOR LAT$ MOV KISAR6,-(SP) ;SAVE APR6 MAPPING( MOV $DALED,KISAR6 ;MAP DRIVER DATA AREA T .IF DF T$$OVL* MOV #LTPRC,-(SP) ;GET ADDRESS OF ROUTINE  CALL MPROT ;AND GO TO ROUTINEN .IFF ;T$$OVLA% CALL LTPRC ;CALL MAP TO LAT PROCESS  .ENDC ;T$$OVL' MOV (SP)+,KISAR6 ;RESTORE APR6 MAPPINGI) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSO% MOV (SP)+,R2 ;GET BUFFER LENGTH BACKP, TST R0 ;DID WE GET AN ERROR BACK FROM LAT? BNE ERLAT ;IF NE, ERRORV( CMPB #SF.GMC,I.FCN(R3) ;WAS THIS A GET? BEQ 50$ ;IF EQ, YES - RETURN; 7; SET LAT APPLICATION TERMINAL CHARACTERISTICS, BUT NOTT ; S6.LAT (LAT PROCESS DOES THIS);G TSTB (R1) ;LAT OR NOLAT? BEQ 30$ ;EQ -> NOLAT - BRANCH. .IF DF R$$MPL!A$$CLIR) BIS #UM.NBR,U.MUP-U.TSTA(R5) ;SET NOBROL .ENDC ;R$$MPL!A$$CLIS3 BIS #U2.SLV,U.CW2-U.TSTA(R5) ;SET TERMINAL SLAVEDD BR 50$M;(+; SET NOLAT (S6.LAT CLEARED BY LAT PROCESS)I;E30$: .IF DF R$$MPL!A$$CLI- BIC #UM.NBR,U.MUP-U.TSTA(R5) ;SET BROADCAST3 .ENDC ;R$$MPL!A$$CLI55 BIC #U2.SLV,U.CW2-U.TSTA(R5) ;SET TERMINAL UNSLAVEDM;C#50$: INC R1 ;UPDATE BUFFER POINTERA ADD R2,R1 ;SKIP OVER BUFFER < SUB R2,I.PRM+4(R3) ;ROUTINE PROCESSED BUFFER LEN CHARACTERS RETURN ;DONER .ENDC ;T$$GMC&T$$SMCT.PAGE;G .SBTTL MCQDP - GET CONNECT STATUS/QUEUE DEPTH OF LAT APPLICATION TERM.E;M:; SET MULTIPLE CHARACTERISTICS FOR MCQDP IS NOT ALLOWED. ;P ; RETURN IS:0; 0 = CONNECTEDA; -1 = DISCONNECTEDU; 1 -> 255 = QUEUE DEPTH;.MCQDP::M .IF DF T$$GMC&T$$SMCV BNE 20$ ;SET (NOT ALLOWED) .ENDC ;T$$GMC&T$$SMCC .IF DF T$$GMC$ MOV $CTLST,R2 ;GET FIRST CONTROLLER55$: CMP U.DCB-U.TSTA(R5),L.DCB(R2) ;IS THIS OUR UNIT?H BEQ 8$ ;IF EQ, YES - BRANCH. MOV (R2),R2 ;GET NEXT ENTRY BNE 5$ ;IF NE, CHECK IT ;T$7$: BR 20$ ;ERROR, NOT A LAT DEVICE;.8$: CMP L.NAM(R2),#"LH ;SHOULD BE LH CONTROLER( BNE 7$ ;IF NOT, BRANCH - MAP NOT LEGAL3 CMP $LTEEP,#$SPVEX ;IS THERE A RETURN INSTRUCTION> ;AT THE LAT ENTRY POINT?& BEQ 20$ ;IF SO, LAT IS NOT INSTALLEDN; CALL TO LAT PROCESS WILL INSERT THE QUEUE DEPTH INDICATOR IN THE USER BUFFER10$:) MOV R3,-(SP) ;SAVE POINTER TO I/O PACKETR* MOV R3,R0 ;GET IRP ADDRESS TO R0 FOR LAT MOV #PO$GQD,R3($ MOV KISAR6,-(SP) ;Save APR6 mapping* MOV $DALED,KISAR6 ;Map data area in TTCOM/ MOV (SP),R2 ;SET UP USER BUFFER MAPPING IN R2B .IF DF T$$OVL* MOV #LTPRC,-(SP) ;GET ADDRESS OF ROUTINE  CALL MPROT ;AND GOTO ROUTINE .IFF ;T$$OVL % CALL LTRPC ;CALL MAP TO LAT PROCESS  .ENDC ;T$$OVL' MOV (SP)+,KISAR6 ;RESTORE APR6 MAPPINGR) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSF TST R0 ;ERROR? BNE ERLAT ;IF NE, YESO RETURNE .ENDC ;T$$GMC .IF DF T$$SMC; SET IS NOT ALLOWED#20$: TST (SP)+ ;POP RETURN ADDRESSi JMP ERCNSC ;PROCESS ERRORa .ENDC ;T$$SMC .IF DF T$$SMC!T$$GMCRERSYN:' JMP ERCVAL ;AND JUMP TO PROCESS ERROR#ERLAT: TST (SP)+ ;POP RETURN ADDRESSL JMP CHRFN1 ;FINISH I/O .ENDC ;T$$SMC!T$$GMCL .ENDC ;T$$LTH&M$$MAP .PAGE .SBTTL TTATT SUBROUTINES+< .SBTTL . GSAENC - GET/SET GENERAL ASYNCH EVENT NOTIFICATION# .IF DF T$$SCA!T$$MHU!T$$ICS!T$$OOBL;I;+F; **-GSAENC - GET/SET ASYNCHCHRONOUS EVENT NOTIFICATION CHARACTERISTIC;D;; THIS ROUTINE PROCESSES THE COMMON PART OF AN ASYNCHRONOUSSO; EVENT NOTIFICATION CHARACTERISTIC. TO SET ONE OF THESE, THE TERMINAL MUST BEUL; ATTACHED AND MAY NOT HAVE UNSOLICITED INPUT AST'S SPECIFIED. THIS ROUTINEM; ESTABLISHES AN ACB (UNLESS ONE ALREADY EXISTS) FOR THE REQUESTED CHARACTER-BK; ISTIC, SAVES THE USER-SPECIFIED AST ADDRESS IN THE ACB, CALLS THE CALLINGIL; ROUTINE AS A CO-ROUTINE WITH INTERRUPTS LOCKED OUT TO ALLOW SETTING UP THEM; CHARACTERISTIC DEPENDENT PART OF THE ACB. UPON RETURN FROM THE CO-ROUTINE,SL; INTERRUPTS ARE ENABLED AND THE MAIN CHARACTERISTIC HANDLER IS RETURNED TO.;TA; NOTE THAT IF THE CHARACTERISTIC IS BEING SET OR DISABLED VIA ANNL; INTERNAL I/O REQUEST, THE CO-R00MywtblOUTINE SEQUENCE IS NOT EXECUTED AND A RETURN>; TO THE MCXXX DISPATCH ROUTINE (NXTCHR) IS EXECUTED. THIS ISH; BECAUSE THE CHARACTERISTIC BUFFER IS FORMATTED DIFFERENTLY SINCE A TEPF; IS EXPECTED TO ALREADY CONTAIN THE NEEDED CHARACTERISTIC PARAMETERS.E; BY DESIGN, THE CALLING ROUTINE ASSUMES IT WILL NOT GET RETURNED TO.E;D; NOTE THAT AN SF.GMC REQUEST FROM A TASK CAN BE HANDLED EVEN IF THEG; CHARACTERISTIC CURRENTLY HAS A TEP ASSOCIATED WITH IT. IN THIS CASE,AK; THE CO-ROUTINE MUST COPY THE CHARACTERISTIC DEPENDENT PARAMETERS FROM THEE; TEP TO THE USER BUFFER.C;O ; INPUTS::; R0 = SIZE OF AN AST CONTROL BLOCK FOR THE CHARACTERISTIC@; R1 => HIGH BYTE OF CURRENT CHARACTERISTIC ENTRY IN USER BUFFERF; R2 = BIT IN STATUS WORD 3 MARKING CHARACTERISTIC AS ENABLED/DISABLED; R3 => CURRENT I/O PACKET,; R4 = OFFSET TO ACB/TEP POINTER IN THE UCBX&; R5 => U.TSTA OF CURRENT TERMINAL UCB;E ; OUTPUTS:I.; WHEN CALLING THE CALLER AS A CO-ROUTINE::; CC-V = SET IF REQUEST IS SF.GMC; CC-V = CLEAR FOR SF.SMC9; CC-Z = SET IF NO TEP/ACB EXISTS; CC-Z = CLEAR OTHERWISE>; CC-C = SET IF REQUEST IS SF.GMC AND A TEP IS ASSOCIATED WITH=; THE CHARACTERISTIC (ONLY CHECK IF CC-V SET AND CC-Z CLEAR)N:; R1 => NEXT WORD OF USER CHARACTERISTIC BUFFER TO PROCESS&; R2 => ACB/TEP FOR THE CHARACTERISTIC2; R4 => UCBX POINTER TO ACB/TEP FOR CHARACTERISTIC;C/; WHEN RETURNING TO CHARACTERISTIC HANDLER: :; R1 => NEXT WORD OF USER CHARACTERISTIC BUFFER TO PROCESS;C; REGISTERS MODIFIED: NONE.C;-;LGSAENC:F- INC R1 ;SKIP PAST CHARACTERISTIC HIGH BYTE 4 SUB #2,I.PRM+4(R3) ;ASSUME WE WILL PROCESS 2 BYTES .IF DF T$$GMC&T$$SMCH? CMPB #SF.GMC,I.FCN(R3) ;IS THIS REQUEST TO GET CHARACTERISTICS # BEQ 1000$ ;IF EQ, YES...GET THEMC .ENDC ;T$$GMC&T$$SMC= .IF DF T$$SMC, TST U.ATT-U.TSTA(R5) ;IS TERMINAL ATTACHED?1 BEQ 900$ ;IF EQ, NO...CAN'T SET CHARACTERISTICR3 BIT #1,(R1) ;SPECIFYING ODD ADDRESS FOR AST/TEP?C BNE 800$ ;ERROR IF ODD8 MOV (R1)+,-(SP) ;GET REQUESTED AST ADDRESS/TEP POINTER. MOV R4,-(SP) ;SAVE OFFSET IN UCBX OF POINTER .IF DF T$$SPL% MOV #120000,R4 ;SET POINTER TO UCBX ' MOV U.TAPR-U.TSTA(R5),KDSAR5 ;MAP UCBX .IFF ;T$$SPLT/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPINGG* MOV U.TUX-U.TSTA(R5),R4 ;GET UCBX POINTER .IFTF ;T$$SPL0 ADD (SP)+,R4 ;POINT TO ACB/TEP POINTER IN UCBX' TST (SP) ;ENABLE THE CHARACTERISTIC?B BNE 100$ ;IF NE, YESO;A*; REQUEST IS TO DISABLE THE CHARACTERISTIC;* BIC R2,4(R5) ;DISABLE THE CHARACTERISTIC% CALL DEACB ;DEALLOCATE THE ACB/TEPF .IFF ;T$$SPLI. MOV I.PRM(R3),KISAR6 ;MAP BACK TO USER BUFFER .IFTF ;T$$SPL3 BIT #1,I.IOSB+4(R3) ;IS THIS AN INTERNAL REQUEST?T+ BEQ 10$ ;IF EQ, NO...THIS IS A USER TASKA/ TST (SP)+ ;CLEAN UP STACK TO SKIP CO-ROUTINER10$:/ CLR (SP)+ ;CLEAN STACK, CLEAR CC-V, SET CC-ZP. RETURN ;RETURN TO CO-ROUTINE OR DISPATCHER;T6; REQUEST IS TO ENABLE ASYNCHRONOUS EVENT NOTIFICATION; 100$:R2 MTPS #TTPRI ;LOCK OUT INTERRUPTS WHILE CHANGING* BIS R2,4(R5) ;;;MARK FUNCTION AS ENABLED .IF DF R$$IIC. BIT #1,I.IOSB+4(R3) ;;;INTERNAL I/O REQUEST?. BEQ 120$ ;;;IF EQ, NO...MUST BE FROM A TASK6 CMP (SP),(R4) ;;;INTERNAL REQUEST USING CURRENT TEP?/ BEQ 110$ ;;;IF EQ, YES...DON'T DEALLOCATE ITT2 CALL DEACB ;;;DEALLOCATE CURRENT TEP/ACB IF ONE110$:C) MOV (SP)+,(R4) ;;;STORE NEW TEP POINTERU TST (SP)+ ;;;CLEAN STACKU .IF NDF T$$SPLY. MOV I.PRM(R3),KISAR6 ;;;REMAP THE USER BUFFER .ENDC ;NDF T$$SPL* BR 150$ ;;;ENABLE INTERRUPTS AND RETURN120$:  .IFTF ;R$$IIC+ MOV R2,-(SP) ;;;SAVE FUNCTION ENABLE FLAGA% MOV (R4),R2 ;;;GET CURRENT TEP/ACBO .IFT ;R$$IIC , BEQ 130$ ;;;IF EQ, NONE...ALLOCATE AN ACB ASSUME A.CBL,E.VSIZ" TST A.CBL(R2) ;;;IS THIS AN ACB?3 BEQ 140$ ;;;IF EQ, YES...JUST CHANGE AST ADDRESSO5 CALL DEACB ;;;DEALLOCATE TEP BEFORE ACB ALLOCATION130$:P .IFF ;R$$IICC& BNE 140$ ;;;IF NE, USE EXISTING ONE .ENDC ;R$$IIC* MOV R1,-(SP) ;;;SAVE USER BUFFER POINTER. MOV R0,R1 ;00UyxtkTADATADATADATADATADATA;;COPY LENGTH OF ACB TO ALLOCATE CALL ALACB ;;;ALLOCATE AN ACB( MOV (SP)+,R1 ;;;RESTORE BUFFER POINTER( BCS 920$ ;;;IF CS, ALLOCATION FAILURE$ CLRB (R0)+ ;;;CLEAR ACB FLAG BYTE140$:B0 BIS (SP)+,4(R5) ;;;SET FLAG TO ENABLE FUNCTION> MOV (SP)+,A.AST(R2) ;;;SAVE AST ADDRESS, CLEAR CC-V AND CC-Z .IFF ;T$$SPLD0 MOV I.PRM(R3),KISAR6 ;;;MAP BACK TO USER BUFFER .ENDC ;T$$SPL+ CALL @(SP)+ ;;;CALL CALLER AS CO-ROUTINE$150$: MTPS #0 ;ENABLE INTERRUPTSF RETURN ;BACK TO CALLER;Y"; ERROR PROCESSING FOR THE ROUTINE; 800$:L7 MOV #!,R0 ;ILLEGAL AST ADDRESSB BR 905$900$:S; MOV #!,R0 ;ERROR WHEN NOT ATTACHED4*905$: CMP (SP)+,(SP)+ ;CLEAN UP THE STACK JMP CHRFIN ;FINISH ERRORR920$:S" MTPS #0 ;;;RE-ENABLE INTERRUPTS. MOV #ERCUPN,R2 ;SET ERROR COMPLETION ROUTINE$ TST -(R1) ;BACK UP BUFFER POINTER- ADD #8.,SP ;CLEAN OFF ALL STACK PARAMETERSN, JMP (R2) ;PROCESS THE ERROR AND FINISH UP .ENDC ;T$$SMC .IF DF T$$GMC;C9; REQUEST IS TO RETURN CHARACTERISTIC SETTING TO THE USERI;41000$: .IF DF T$$SPL2 ADD #120000,R4 ;POINT TO ACB/TEP POINTER IN UCBX' MOV U.TAPR-U.TSTA(R5),KDSAR5 ;MAP UCBXS .IFF ;T$$SPL / MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPING" MOV U.TUX-U.TSTA(R5),R2 ;GET UCBX3 BEQ 1010$ ;IF EQ, NONE...CHARACTERISTIC DISABLED-. ADD R2,R4 ;POINT TO ACB/TEP POINTER IN UCBX .IFTF ;T$$SPL* MOV (R4),R2 ;GET ACB/TEP POINTER IF ONE .IFF ;T$$SPL.1010$:. MOV I.PRM(R3),KISAR6 ;MAP BACK TO USER BUFFER .ENDC ;T$$SPL .IF DF R$$IIC8 BIT #1,I.IOSB+4(R3) ;WAS THIS AN INTERNAL I/O REQUEST?4 BEQ 1020$ ;IF EQ, NO...RETURN FULL CHARACTERISTIC4 MOV R2,(R1)+ ;STORE TEP/ACB ADDRESS IN USER BUFFER TST (SP)+ ;CLEAN STACKN RETURN ;ALL DONE1020$: .IFTF ;R$$IIC" TST R2 ;IS THERE AN ACB OR TEP?' BNE 1030$ ;IF NE, YES...CHECK IT OUTI0 CLR (R1)+ ;AST DISABLED, CLEAR CC-V, SET CC-Z# BR 1050$ ;SKIP TO FINISH REQUESTT1030$: .IFT ;R$$IICP ASSUME A.CBL,E.VSIZ- TST A.CBL(R2) ;IS THIS AN ACB? (CLEAR CC-C)I BEQ 1040$ ;IF EQ, YES0 MOV R2,(R1)+ ;STORE TEP POINTER IN USER BUFFER' SEC ;SET FLAG TO SHOW THIS IS A TEP BR 1050$ ;FINISH REQUEST 1040$: .ENDC ;R$$IIC7 MOV A.AST(R2),(R1)+ ;STORE AST ADDRESS IN USER BUFFER.1050$:- SEV ;SET CC-V TO INDICATE THIS WAS SF.GMCE. RETURN ;RETURN TO GET CHAR-DEPENDENT STUFF .ENDC ;T$$GMC# .ENDC ;T$$SCA!T$$MHU!T$$ICS!T$$OOB .PAGE > .SBTTL . MPCCOR - MAP DRIVER DATA AND CALL BACK AS CO-ROUTINE;C;+B; **-MPCCOR - MAP DRIVER DATA AREA AND CALL CALLER AS A CO-ROUTINE;RH; THIS ROUTINE WILL MAP THE DRIVER DATA AREA AND CALL BACK THE CALLER ASI; A CO-ROUTINE. WHEN THE CALLER EXECUTES A RETURN, THIS ROUTINE WILL MAPT%; BACK TO THE TASK BUFFER AND RETURN.B;E ; INPUTS:<; 2(SP) = RETURN ADDRESS AFTER RESTORING TASK BUFFER MAPPING; R3 => CURRENT I/O PACKET;F ; OUTPUTS:$; CC-C PRESERVED,; NO REGISTERS ARE MODIFIED BY THIS ROUTINE.;-;RMPCCOR:I2 MOV (SP),-(SP) ;DUPLICATE RETURN ADDRESS ON STACK& MOV R3,2(SP) ;SAVE I/O PACKET ADDRESS/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPINGH/ CALL @(SP)+ ;CALL CALLER BACK AS A CO-ROUTINE ) MOV (SP)+,R3 ;RESTORE I/O PACKET ADDRESSE. MOV I.PRM(R3),KISAR6 ;MAP BACK TO USER BUFFER% RETURN ;RETURN FROM THE CO-ROUTINE  .ENDC ;T$$SMC!T$$GMCT.PAGEI? .SBTTL . ALACB - ALLOCATE AND INITIALIZE AN AST CONTROL BLOCKS* .IF DF T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOB;Y;+'; **-ALACB - ALLOCATE AST CONTROL BLOCK(; E; THIS SUBROUTINE ALLOCATES AN AST CONTROL BLOCK AND INITIALIZES THE ED; FIXED DATA. DATA THAT IS CHARACTERISTIC-DEPENDENT (SUCH AS A.AST)(; MUST BE SET BY THE CALLER UPON RETURN.;+ ; INPUTS: :; R1 = SIZE IN BYTES OF ACB TO ALLOCATE (SAVED IN A.PRM+4); R3 => CURRENT I/O PACKET9; R4 => OFFSET IN UCBX WHERE ADDRESS OF ACB WILL BE SAVEDB; R5 => U.TSTA OF CURRENT UCBT;I ; OUTPUTS:T9; CC-C CLEAR IF SUCCESSFUL ALLOCATION; CC-C SET OTHERWISE$; R0 => A.PRM+5 OF THE ALLOCATED A00]ywtblCB@; R2 => LINK WORD OF ALLOCATED ACB (ACB'S HAVE NEGATIVE OFFSETS)$; (R4) => LINK WORD OF ALLOCATED ACB; ,; THE ALLOCATED ACB IS FORMATTED AS FOLLOWS:;); +-------------------------------------++7; | TTDRV KINAR5 BIAS | A.KSR5 (-4)S); |-------------------------------------|T7; | DEQUEUE SUBROUTINE ADDRESS (DQACB) | A.DQSR (-2)E); |-------------------------------------|O$; | THREAD WORD (0) | (0)); |-------------------------------------|R1; | LENGTH OF CONTROL BLOCK (0) | A.CBLC); |-------------------------------------|R1; | # BYTES TO ALLOC ON STACK (16.) | A.BYTE); |-------------------------------------|-.; | AST ADDRESS (0) | A.AST); |-------------------------------------|S0; | # AST PARAMETERS (1) | A.NPR); |-----------------+-------------------|Q1; | U.TTID | (0) | A.PRMO); |-----------------+-------------------|-'; | POINTER TO U.TSTA | A.PRM+2 ); |-----------------+-------------------|.3; | | ACB SIZE | A.PRM+4 ); |-----------------+-------------------+Y;; REGISTERS MODIFIED: R1;-;-ALACB: CALL $ALOCB ;ALLOCATE SPACE  BCS 10$ ;BR IF ERROR .IF DF T$$OVL .IF DF T$$SPL ) MOV KISAR6,-(SP) ;SAVE APR6 DATA MAPPINGR* MOV $DALED,KISAR6 ;AND MAP TO DRIVER DATA .IFTF ;T$$SPL3 MOV ROTMAP,(R0)+ ;INSERT DRIVER MAIN APR 5 MAPPING- .IFT ;T$$SPL-8 MOV (SP)+,KISAR6 ;RESTORE EITHER TASK OR DRIVER MAPPING .ENDC ;T$$SPL .IFF ;T$$OVL 7 MOV KINAR5,(R0)+ ;INSERT DRIVER APR 5 MAPPING (A.KSR5)- .ENDC ;T$$OVL9 MOV #DQACB,(R0)+ ;INSERT POINTER TO ROUTINE TO CALL WHEN:# ;AST BLOCK IS DEQUEUED (A.DQSR)S' MOV R0,R2 ;SAVE ALLOCATED ACB ADDRESS.' MOV R0,(R4) ;STORE POINTER TO THE ACB TST (R0)+ ;SKIP OVER LINK WORD1 CLR (R0)+ ;SET BLOCK LENGTH ZERO TO FORCE SYSXTM. ;TO CALL US WHEN BLOCK IS DEQUEUED (A.CBL); MOV #16.,(R0)+ ;ALLOCATE 16. BYTES ON TASK'S STACK (A.BYT)K* TST (R0)+ ;SKIP PAST AST ADDRESS (A.AST)! ;THIS WILL BE FILLED IN LATERS6 MOV #1,(R0)+ ;INSERT NUMBER OF AST PARAMETERS (A.NPR) .IF DF T$$SPL6 CLRB (R0)+ ;SKIP LOW BYTE OF FIRST PARAMETER (A.PRM)E MOVB 120000+U.TTID,(R0)+ ;SAVE USER DEFINED TERMINAL ID IN HIGH BYTE, .IFF ;T$$SPLT: CLR (R0)+ ;SKIP OVER FIRST PARAMETER UNTIL LATER (A.PRM) .IFTF ;T$$SPL2 MOV R5,(R0)+ ;INSERT POINTER TO U.TSTA (A.PRM+2) / MOVB R1,(R0)+ ;SAVE SIZE OF THIS ACB (A.PRM+4)E .IFF ;T$$SPL 4 MOV U.TUX-U.TSTA(R5),R1 ;GET POINTER TO TOP OF UCBXB MOVB U.TTID(R1),-4(R0) ;INSERT USER-DEFINED TERMINAL ID (A.PRM+1) .ENDC ;T$$SPL10$: RETURN ;ALL DONE * .ENDC ;T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOB.PAGE2& .SBTTL . QPEIO - EXTENDED I/O REQUEST;A;+*; **-QPEIO - EXTENDED I/O REQUEST (IO.EIO); M; THIS ROUTINE VALIDATES THE PARAMETERS OF AN EXTENDED WRITE OR READ REQUEST.)G; AN EXTENDED I/O REQUEST IS ONE WITH A FUNCTION CODE OF "IO.EIO" AND A K; SUBFUNCTION OF "TF.WLB" OR "TF.RLB". ALL MODIFIERS AND PARAMETERS OF THETK; REQUEST ARE SET UP IN AN ITEMLIST IN THE USER TASK SPACE INSTEAD OF BEING)K; PASSED FROM THE DPB VIA THE I/O PACKET. THIS MAKES IT POSSIBLE TO CREATEME; MORE COMPLEX TYPES OF READS AND WRITES THAN CAN BE DONE BY "OR'ING"AL; SUBFUNCTION BITS TOGETHER. FOR EXAMPLE, AN "IO.RPR" REQUEST CANNOT HAVE AL; TERMINATOR TABLE SPECIFIED WITH IT (IO.RTT) SINCE THERE IS NOT ENOUGH ROOMM; IN THE QIO PARAMETER LIST OR IN A NORMAL I/O PACKET FOR THE PROMPT VFC, THERM; TIMEOUT VALUE, AND THE ADDRESS/LENGTH OF THE DATA BUFFERS. AN EXTENDED I/OEH; REQUEST ELIMINATES THIS RESTRICTION BY SPECIFYING THE PARAMETERS IN ANH; ITEMLIST POINTED TO BY THE QIO PARAMETER LIST AND BY SAVING ADDITIONALN; INFORMATION IN AN I/O PACKET EXTENSION. THE USER'S ITEMLIST IS SPECIFIED BYI; "P1" AND "P2" OF THE QIO PARAMETER LIST. THIS BUFFER HAS BEEN ADDRESS-DL; CHECKED AND RELOCATED BY THE EXEC AND THE DOUBLEWORD ADDRESS AND LENGTH ISJ; STORED IN I.PRM THROUGH I.PRM+4. THE ITEMLIST HAS THE FOLLOWING FORMAT:;D00eyxtkTADATADATADATADATADATA; READ ITEM LIST:D; $; +-------------------------------+; | MODIFIER WORD 1 |S$; |-------------------------------|; | MODIFIER WORD 2 |O$; |-------------------------------|#; | ADDRESS OF READ DATA BUFFER |T$; |-------------------------------|#; | LENGTH OF READ DATA BUFFER |R$; |-------------------------------|; | TIME OUT VALUE |$; |-------------------------------|!; | ADDRESS OF PROMPT BUFFER | $; |-------------------------------|!; | LENGTH OF PROMPT BUFFER | $; |-------------------------------|; | PROMPT VFC |$; |-------------------------------|"; | TERMINATOR TABLE ADDRESS |$; |-------------------------------|#; | LENGTH OF TERMINATOR TABLE |F$; |-------------------------------|$; | DEFAULT INPUT BUFFER ADDRESS |$; |-------------------------------|$; |LENGTH OF DEFAULT INPUT BUFFER |$; +-------------------------------+; ;D; WRITE ITEM LIST:; $; +-------------------------------+; | MODIFIER WORD 1 |E$; |-------------------------------|; | MODIFIER WORD 2 |C$; |-------------------------------|!; | ADDRESS OF OUTPUT BUFFER |E$; |-------------------------------|"; | LENGTH OF OUTPUT BUFFER |$; |-------------------------------|; | VFC/CURSOR POSITION |R$; +-------------------------------+;-; *** NOTE ***HC; AT PRESENT, THERE ARE TOO FEW PARAMETERS THAT CAN BE SPECIFIED ON B; EXTENDED WRITE REQUESTS TO JUSTIFY THE ALLOCATION OF AN IOPX FORE; THEM. THUS, AN "IO.EIO!TF.WLB" REQUEST PACKET IS CONVERTED TO LOOK E; LIKE A NORMAL "IO.WLB". NOTE THAT THIS REQUIRES ALL WRITE MODIFIERDE; BITS TO RESIDE IN THE LOW BYTE OF THE ITEMLIST MODIFIER WORD EXCEPT F; TF.FMT WHICH IS SPECIAL CASED. IT COMES TO US VIA THE USER MODIFIER#; WORD OR I.PRM+13 FOR INTERNAL I/O-;-9; THE FOLLOWING ACTIONS MAY BE PERFORMED BY THIS ROUTINE: 4; 1. VALIDATE THE SIZE OF THE USER-DEFINED ITEMLIST.I; 2. MAKE SURE NO SUBFUNCTIONS OTHER THAN TF.WLB OR TF.RLB ARE REQUESTED.MG; 3. CONVERT AN "IO.EIO!TF.WLB" REQUEST INTO A NORMAL "IO.WLB" REQUEST.AB; 4. ALLOCATE AN I/O PACKET EXTENSION (IOPX) FROM PRIMARY POOL FOR=; SAVING PARAMETERS FROM THE USER'S ITEMLIST. IF THE IO.EIOP:; IS AN INTERNAL I/O REQUEST, I.PRM MUST POINT TO AN IOPX$; ALLOCATED AND SET UP BY THE USER.E; 5. VALIDATE AND ADDRESS CHECK PARAMETERS IN THE USER'S ITEMLIST ANDU*; SAVE NECESSARY INFORMATION IN THE IOPX.5; 6. LINK THE IOPX INTO A LIST OF IOPX'S FOR THE UCB.T>; 7. REQUEST THAT THE I/O PACKET BE LINKED INTO THE TERMINAL'S; SCB I/O REQUEST QUEUE. ;. ; INPUTS:; R3 => IO.EIO REQUEST PACKET ; R4 => SCB FOR THE TERMINAL; R5 => UCB FOR THE TERMINAL7; I.PRM => PRE-ALLOCATED IOPX IF IO.EIO IS INTERNAL I/OR; ; OUTPUTS:I-; R3 => IO.WLB REQUEST PACKET PASSED TO QPWLBT8; R4 = U.TSTA+2 BITS FOR DE-QUEUE BLOCKING (IN "TSTRQ")%; IOPX LINKED INTO IOPX LIST (U.TIXL) ;E"; REGISTERS MODIFIED: R0, R1, R2;-;H .IF DF T$$EIO .IF DF T$$OVL QPEIO1:: . Q .IFF ;T$$OVL/QPEIO::B .ENDC ;T$$OVL .IF DF R$$IIC7 MOV I.PRM(R3),R0 ;ASSUME THERE IS A PRE-ALLOCATED IOPXT6 BIT #1,I.IOSB+4(R3) ;IS THIS AN INTERNAL I/O REQUEST? BEQ 5$ ;IF EQ, NO %; THIS IS AN INTERNAL I/O REQUEST. A' BIT #TF.RLB,I.FCN(R3) ;IS THIS A READ?Q+ BNE 15$ ;IF YES, IOPX IS ALREADY IN PLACE2& MOV #IO.WLB,I.FCN(R3);MARK AS A WRITE6 MOVB I.PRM+12(R3),I.FCN(R3) ;AND SET THE SUBFUNCTIONS .IF DF T$$OVL JMP QPWTRA ;TRANSFER FOR QPWLB .IFF ;T$$OVLP! JMP QPWLB ;PROCESS IT AS IO.WLBB  .ENDC ;T$$OVL5$:D6 MOV R0,KISAR6 ;OTHERWISE, MAP TO USER ITEMLIST BUFFER .IFF ;R$$IICT/ MOV I.PRM(R3),KISAR6 ;MAP USER ITEMLIST BUFFER .ENDC ;R$$IIC* BIT #1,I.PRM+2(R3) ;IS IT WORD ALLIGNED? BNE 11$ ;IF ODD, BRANCHS; CMP I.PRM+4(R3),#8. ;IS THE SIZE SMALLER THAN THE MINIMUM? BMI 11$ ;IF PL, YESM8 MOV #10.,R0 ;ASSUME CHECKING LENGTH OF TF.WLB ITEMLIST= MOV #^C,R1 ;INVERSE OF LEGAL WRITE FLAGS ARE INVALIDW: BIT #TF.WLB,I.FCN(R3) ;IS THIS AN EXTENDED WRITE REQUEST?5 BNE 10$ 00mywtbl;IF NE, YES...ASSUMPTION WAS CORRECT - SKIPM9 MOV #24.,R0 ;SET LENGTH OF TF.RLB ITEMLIST TO CHECK FORR? MOV #^C,R1 ;INVERSE OF EXTENDED READ FLAGS ARE INVALID,10$:. CMP R0,I.PRM+4(R3) ;IS THE ITEMLIST TOO LARGE BPL 12$ ;IF PL, NO, CONTINUE11$: .IF DF T$$OVL# MOV #IE.BAD&377,R0 ;GET ERROR CODEM JMP 930$, .IFF ;T$$OVLI JMP EQPBAD ;ELSE, ERROR .ENDC ;T$$OVL12$:8 BIT R1,@I.PRM+2(R3) ;ARE ANY INVALID MODIFIER BITS SET?5 BNE 25$ ;IF NE, YES...REPORT INVALID FUNCTION ERROR : BIT #TF.WLB,I.FCN(R3) ;IS THIS AN EXTENDED WRITE REQUEST?4 BEQ 20$ ;IF EQ, NO...SKIP TO PROCESS EXTENDED READ;RJ; PROCESS AN EXTENDED WRITE REQUEST BY CONVERTING IT TO AN IO.WLB REQUEST.;H: MOV I.PRM+2(R3),R2 ;SET POINTER TO START OF USER ITEMLIST> MOV #IO.WLB,I.FCN(R3) ;CHANGE FUNCTION CODE OF OUR I/O PACKET5 MOVB (R2),I.FCN(R3) ;GET THE WRITE REQUEST MODIFIERS.9 CMP (R2)+,(R2)+ ;SKIP HIGH BYTE AND UNUSED MODIFIER WORDO3 MOV (R2)+,R0 ;GET VIRTUAL ADDRESS OF OUTPUT BUFFERL* MOV (R2)+,R1 ;GET LENGTH OF OUTPUT BUFFER$ MOV R3,R4 ;COPY I/O PACKET POINTER3 ADD #I.PRM+4,R4 ;POINT TO WHERE BUFFER LENGTH GOES5 MOV R1,(R4) ;COPY LENGTH OF SPECIFIED OUTPUT BUFFERT< MOV (R2),2(R4) ;COPY VFC/CURSOR POSITION INFO TO I/O PACKET7 CALL CKBFR ;CHECK FOR READ ACCESS AND RELOCATE BUFFERN- BCS 26$ ;IF CS, CHECK FAILED...RETURN ERROR)5 MOV R2,-(R4) ;SAVE SECOND WORD OF DOUBLEWORD ADDRESSP# MOV R1,-(R4) ;SAVE FIRST WORD ALSO/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPINGL .IF DF T$$OVL! CALLR QPWTRA ;TRANSFER TO QPWLB4 .IFF ;T$$OVLT8 JMP QPWLB ;NOW PROCESS PACKET AS NORMAL IO.WLB REQUEST .ENDC ;DF T$$OVL15$: JMP 50$ ;BRANCH AIDB;TK; PROCESS AN EXTENDED READ REQUEST BY BUILDING AN IOPX TO HOLD INFO FOR US. ;H ASSUME I.XLNK,0 ASSUME I.XLNK+2,I.XIOPB ASSUME I.XIOP+2,I.XTCBL ASSUME I.XTCB+2,I.XMODV ASSUME I.XMOD+4,I.XRBFR ASSUME I.XRBF+4,I.XRBL ASSUME I.XRBL+2,I.XTMO  ASSUME I.XTMO+2,I.XPBF, ASSUME I.XPBF+4,I.XPBLT ASSUME I.XPBL+2,I.XPBVO ASSUME I.XPBV+2,I.XTTBN ASSUME I.XTTB+4,I.XTTLT ASSUME I.XTTL+2,I.XDBFW ASSUME I.XDBF+4,I.XDBL F20$: BIT #TF.RLB,I.FCN(R3) ;THIS ISN'T A WRITE, SO IT BETTER BE A READ( BNE 27$ ;IF EQ, INVALID FUNCTION ERROR25$: .IF DF T$$OVL# MOV #IE.IFC&377,R0 ;GET ERROR CODEA .IFF ;DF T$$OVL$ JMP EQPIFC ;ELSE, INVALID FUNCTION .ENDC ;DF T$$OVLM926$: JMP 930$ ;ALWAYS NEEDED AS BRANCH STRETCHER ANYWAY.227$:2 MOV I.PRM+4(R3),R1 ;GET SPECIFIED EIO BUFFER SIZE1 MOV @I.PRM+2(R3),R4 ;GET SPECIFIED FUNCTION MASKN' BIT #TF.RDI,R4 ;READ W/ DEFAULT INPUT?L BEQ 272$ ;BR IF NO RDI4 CMP R1,#24. ;IF RDI, MAKE SURE ALL 24. BYTES THERE BNE 11$ ;IF LESS, ERRORE BR 29$ ;ELSE, OK CONTINUE 272$:N* BIT #TF.RTT,R4 ;READ W/ TERMINATOR TABLE? BEQ 274$ ;BR IF NO RTT6 CMP R1,#20. ;IF RTT, CHECK MIN. REQUIRED BYTES THERE BMI 11$ ;IF LESS, ERROR BR 29$9274$:L .IF DF T$$RPR BIT #TF.RPR,R4 ;READ W/ PROMPT? BEQ 276$ ;BR IF NO RPR5 CMP R1,#14. ;CHECK MINIMUM REQUIRED BYTES SPECIFIEDF BMI 11$ ;IF LESS, ERRORF BR 29$R276$:D .ENDC ; DF T$$RPR! BIT #TF.TMO,R4 ;READ W/ TIMEOUT?I BEQ 29$ ;BR IF NOT( CMP R1,#10. ;CHECK ALL BYTES SPECIFIED BMI 11$ ;IF LESS, ERRORU29$:; MOV #I.XLEN,R1 ;SET SIZE OF AN I/O PACKET EXTENSION (IOPX);: CALL $ALOCB ;ALLOCATE IOPX FROM PRIMARY POOL (IOPX IN...- ; ...DRIVER POOL IS A MAPPING NIGHTMARE!)) BCS 910$ ;IF CS, NO FREE POOL...GIVE UPR MOV R0,R4 ;COPY IOPX ADDRESS7 MOV R3,-(SP) ;SAVE CURRENT I/O PACKET (IO.EIO) ADDRESSC$ MOV R0,-(SP) ;AND SAVE IOPX ADDRESS;92; INITIALIZE AN IOPX FOR AN EXTENDED READ REQUEST.; TST (R4)+ ;SKIP PAST LINK WORD4 MOV R3,(R4)+ ;FILL IN ASSOCIATED I/O PACKET ADDRESS. MOV I.TCB(R3),(R4)+ ;FILL IN TASK TCB ADDRESS: MOV I.PRM+2(R3),R3 ;USE R3 AS A POINTER INTO THE ITEMLIST1 MOV (R3)+,(R4)+ ;SAVE FUNCTION MODIFIERS IN IOPXE+ MOV (R3)+,(R4)+ ;MOVE UNUSED MODIFIER WORD;6 MOV (R3)+,R0 ;GET VIRTUAL ADDRESS OF READ DATA BUFFER MOV (R3),R1 ;GET BUFFER SIZE7 CALL CKBFB ;CHECK FOR 00uyxtkTADATADATADATADATADATAREAD ACCESS AND RELOCATE BUFFERO. BCS 920$ ;IF CS, CHECK FAILED...RETURN ERROR4 MOV R1,(R4)+ ;SAVE FIRST WORD OF ADDRESS DOUBLEWORD5 MOV R2,(R4)+ ;SAVE SECOND WORD OF ADDRESS DOUBLEWORD, MOV (R3)+,(R4)+ ;SAVE LENGTH OF READ BUFFER, MOV (R3)+,(R4)+ ;SAVE TIMEOUT VALUE IN IOPX .IF DF T$$RPR3 MOV (R3),R0 ;GET VIRTUAL ADDRESS OF PROMPT BUFFER(% MOV 2(R3),R1 ;GET PROMPT BUFFER SIZE6 BIT #TF.RPR,-14(R4) ;EXTENDED READ W/PROMPT FUNCTION? BEQ 30$ ;IF EQ, NO...SKIPE7 CALL CKBFR ;CHECK FOR READ ACCESS AND RELOCATE BUFFERO. BCS 920$ ;IF CS, CHECK FAILED...RETURN ERROR4 MOV R1,(R4)+ ;SAVE FIRST WORD OF ADDRESS DOUBLEWORD5 MOV R2,(R4)+ ;SAVE SECOND WORD OF ADDRESS DOUBLEWORD TST (R3)+ ;POINT TO THE LENGTH. MOV (R3)+,(R4)+ ;SAVE LENGTH OF PROMPT BUFFER) MOV (R3)+,(R4)+ ;SAVE PROMPT VFC IN IOPX  BR 33$L30$: .ENDC ;T$$RPR/ ADD #6.,R3 ;SKIP PAST UNUSED ITEMLIST OFFSETSF+ ADD #8.,R4 ;SKIP PAST UNUSED IOPX OFFSETS?33$:8 BIT #TF.RTT,-24(R4) ;READ W/TERMINATOR TABLE SPECIFIED? BEQ 35$ ;IF EQ, NO...SKIPB=; BIT #TF.PTT,-24(R4) ;WANT TO USE PREVIOUS TERMINATOR TABLE? ;; BNE 35$ ;IF NE, YES...DON'T BOTHER TO CHECK TABLE PARAM.W. MOV (R3)+,R0 ;GET ADDRESS OF TERMINATOR TABLE- MOV (R3),R1 ;GET LENGTH OF TERMINATOR TABLEP7 CALL CKBFR ;CHECK FOR READ ACCESS AND RELOCATE BUFFER2 BCS 920$ ;IF CS, CHECK FAILED...RETURN THE ERROR4 MOV R1,(R4)+ ;COPY FIRST WORD OF ADDRESS DOUBLEWORD3 MOV R2,(R4)+ ;COPY LAST WORD OF ADDRESS DOUBLEWORD;1 MOV (R3)+,(R4)+ ;COPY LENGTH OF TERMINATOR TABLEQ3 BR 37$ ;BRANCH SINCE POINTERS ARE ALREADY CORRECTE35$:3 CMP (R3)+,(R3)+ ;SKIP PAST UNUSED ITEMLIST OFFSETST* ADD #6,R4 ;SKIP PAST UNUSED IOPX OFFSETS37$:B BIT #TF.RDI,I.XMOD-I.XDBF(R4) ;READ WITH DEFAULT INPUT SPECIFIED? BEQ 40$ ;IF EQ NO : MOV (R3)+,R0 ;GET VIRTUAL ADDRESS OF DEFAULT INPUT BUFFER. MOV (R3),R1 ;GET DEFAULT INPUT BUFFER LENGTH7 CALL CKBFR ;CHECK FOR READ ACCESS AND RELOCATE BUFFER . BCS 920$ ;IF CS, CHECK FAILED...RETURN ERROR4 MOV R1,(R4)+ ;SAVE FIRST WORD OF ADDRESS DOUBLEWORD5 MOV R2,(R4)+ ;SAVE SECOND WORD OF ADDRESS DOUBELWORD35 MOV (R3)+,(R4)+ ;SAVE LENGTH OF DEFAULT INPUT BUFFER4;S8; EXTENDED READ ITEMLIST PARAMETERS HAVE BEEN VALIDATED.;F40$:/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPING $ MOV (SP)+,R0 ;RETRIEVE IOPX POINTER, MOV (SP)+,R3 ;RESTORE IO.EIO PACKET POINTER;F>; LINK THE CURRENT IOPX INTO THE U.TIXL LIST FOR THE TERMINAL.; 50$:C MOV U.TIXL(R5),(R0) ;POINT THIS IOPX TO FIRST IOPX IN LIST, IF ANY,? MOV R0,U.TIXL(R5) ;THIS IOPX NOW BECOMES THE FIRST IN THE LIST 4 MOV #S2.IRQ,R4 ;READS MUST BLOCK IF INPUT IS ACTIVE .IF DF T$$RPR4 BIT #TF.RPR,I.XMOD(R0);WAS READ W/PROMPT SPECIFIED?- BEQ 60$ ;IF EQ, NO...ALL CHECKING COMPLETED,C MOV #S2.IRQ!S2.ORQ,R4 ;PROMPT MUST BLOCK IF ACTIVE INPUT OR OUTPUTP60$: .ENDC ;T$$RPR .IF DF T$$OVL JMP QUETRA ;TRANSFER TO QUEUEI .IFF ;DF T$$OVL JMP QUEUE ;QUEUE THE REQUEST .ENDC ;DF T$$OVL;N-; ERROR PROCESSING FOR EXTENDED I/O REQUESTS.V;,910$:)5 MOV #IE.NOD&377,R0 ;SET ERROR FOR NO NODES AVAILABLE21 BR 930$ ;RETURN ERROR (REMAP DRIVER ON THE WAY)F920$:R) MOV R0,R4 ;SAVE ERROR COMPLETION STATUSO$ MOV (SP)+,R0 ;RETREIVE IOPX ADDRESS! MOV #I.XLEN,R1 ;GET SIZE OF IOPXI# CALL $DEACB ;DEALLOCATE THE IOPX T* MOV (SP)+,R3 ;RETRIEVE I/O PACKET ADDRESS& MOV R4,R0 ;RESTORE COMPLETION STATUS930$: * .IF DF T$$OVL ;IF THE DRIVER IS OVERLAID/ MOV $DALED,KISAR6 ;RESTORE DRIVER DATA MAPPING  CLR R1 ;INPUT TO $IOFIN CALLR $IOFIN ;FINISH REQUEST .IFF ;DF T$$OVL3 JMP EQPFIN ;FINISH THE I/O REQUEST WITH THE ERRORR .IFT ;T$$OVLE.PAGE$9 .SBTTL . BUFFER ADDRESS CHECKING AND RELOCATION ROUTINESR;R;+2; **-CKBFR - ADDRESS CHECK BUFFER FOR READ ACCESS8; **-CKBFB - ADDRESS CHECK BUFFER FOR READ/WRITE ACCESS;VI; THESE ROUTINES PERFORM THE DESCRIBED ADDRESS CHECKING ON A USER BUFFER.D;$G; NOTE: THIS CODE IS DUPLICATED FROM TTINI IN THE OVERLAID/EXTENDED I/OTH; DRIVER DUE TO MAPPING CONSIDERATIONS. TH00}yytblE CODE MUST RUN IN APR5 BUT E; CAN'T BE EASILY TRANSFERRED TO FROM THE OVERLAY SINCE DATA APR6 IS R:; NOT MAPPED TO THE DRIVER'S DATA, BUT TO THE USER BUFFER.;N ; INPUTS:%; R0 => USER BUFFER (VIRTUAL ADDRESS)D; R1 = LENGTH OF USER BUFFERE; ; OUTPUTS: *; CC-C = 0 IF ADDRESS CHECK WAS SUCCESSFUL"; CC-C = 1 IF ADDRESS CHECK FAILED4; R0 = ERROR CODE FOR ADDRESS CHECK FAILURE REASON:.; "IE.SPC" IF SPECIFIED BUFFER LENGTH IS ZEROB; "IE.SPC" IF BUFFER NOT WORD ALIGNED OR EXEC ADDRESS CHECK FAILS6; "IE.BAD" IF BUFFER SIZE IS GREATER THAN 8128. BYTES-; R1 = BIAS OF RELOCATED USER BUFFER ADDRESS 5; R2 = DISPLACEMENT OF RELOCATED USER BUFFER ADDRESSN; ; REGISTERS MODIFIED: R0;-;U .IF DF A$$CHK .ENABL LSBSCKBFR: .IF DF R$$MPL5 MOV #$CKBFR,-(SP) ;SET UP CALL FOR READ-ACCESS CHECKI BR 10$ ;SKIP TO COMMON CODE  .IFTF ;R$$MPLCKBFB: .IFT ;R$$MPL6 MOV #$CKBFB,-(SP) ;SET UP CALL FOR WRITE-ACCESS CHECK10$: .IFTF ;R$$MPL TST R1 ;IS BUFFER SIZE VALID? 3 BEQ 900$ ;IF EQ, NO...RETURN INVALID BUFFER ERROR6 CMP R1,#20000-100 ;IS BUFFER BIGGER THAN 8128. BYTES?5 BHI 920$ ;IF HI, YES...RETURN BAD BUFFER SIZE ERRORR .IFT ;R$$MPL: .IF DF X$$HDR; MOV (SP),-(SP) ;DUPLICATE MAPPING ROUTINE ADDRESS ON STACKV, MOV KISAR6,2(SP) ;SAVE CURRENT EXEC MAPPING+ MOV $SAHDB,KISAR6 ;MAP CURRENT TASK HEADERF .IFTF ;X$$HDR3 CALL @(SP)+ ;CALL REQUESTED ADDRESS CHECK ROUTINEO .IFT ;X$$HDRE+ MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPINGE .ENDC ;X$$HDR .IFF ;R$$MPLN) CALL $ACHKB ;DO NORMAL ADDRESS CHECKING0 .ENDC ;R$$MPL+ BCS 910$ ;IF CS, IT FAILED...RETURN ERRORS .IFF ;A$$CHKFCKBFR:CKBFB: .IFTF ;A$$CHK9 CALL $RELOC ;RELOCATE ADDRESS AND CONVERT TO DOUBLEWORDA RETURN ;ALL DONEV .IFT ;A$$CHKV900$: 6 .IIF DF R$$MPL, TST (SP)+ ;POP OFF CO-ROUTINE ADDRESS910$:FA MOV #IE.SPC&377,R0 ;SET COMPLETION ERROR CODE FOR INVALID BUFFER BR 990$ ;SKIP920$:P6 .IIF DF R$$MPL, TST (SP)+ ;POP OFF CO-ROUTINE ADDRESS; MOV #IE.BAD&377,R0 ;SET COMPLETION ERROR CODE FOR BAD SIZE990$:; SEC ;RETURN WITH ERROR FLAG RETURN ;ALL DONES .DSABL LSBH .ENDC ;A$$CHK .ENDC ;T$$OVL .ENDC ;T$$EIO .END ADDRESS AND CONVERT TO DOUBLEWORDA RETURN ;ALL DONEV .IFT ;A$$CHKV900$: 6 .IIF DF R$$MPL, TST (SP)+ ;POP OFF CO-ROUTINE ADDRESS910$:FA MOV #IE.SPC&377,R0 ;SET COMPLETION ERROR CODE FOR INVALID BUFFER BR 990$ ;SKIP920$:P6 .IIF DF R$$MPL, TST (SP)+ ;POP OFF CO .TITLE TTCANF .IDENT /07.00/P; 6; COPYRIGHT (c) 1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;I<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;P;T; 06-FEB-78 PETER WANNHEDEN;L; PREVIOUSLY MODIFIED BY:T;U; P. WANNHEDEN ; C. F. SPITZT; D. R. DONCHINR; M. S. HARVEY ; S. C. ADAMSR; B. S. MCCARTHY;R; MODIFIED BY:;G; S. C. ADAMS 4-AUGUST-87 07.00O9; SA475 -- CORRECT HANDLING OF SELECTIVE READ/WRITE KILLS0;0;;+>; THIS MODULE CONTAINS ENTRY POINTS FOR THE FOLLOWING ROUTINES; CALLED BY THE EXECUTIVE:;W; TTCAN - CANCEL IOR; TTPWUP - POWER-UP ;-; ;C .MCALL DCBDF$,HWDDF$E;T DCBDF$ ;DEFINE DCB SYMBOLSP" HWDDF$ ;DEFINE HARDWARE SYMBOLS .IF DF T$$EIO .MCALL PKTDF$ PKTDF$H .ENDC ;T$$EIO  .IF DF R$$MPL  .MCALL KRBDF$ C KRBDF$ ;DEFINE KRB SYMBOLS O .IFF ;R$$MPL . .MCALL SCBDF$ 8 SCBDF$ ;DEFINE SCB SYMBOLSN N .ENDC ;R$$MPL .PSECT MAP5;0;;+.SBTTL TTCAN - CANCEL I/OT;P;+%; TTCAN - CANCEL CURRENT IO REQUESTS.B<; THIS ROUTINE IS CALLED FROM THE EXECUTIVE TO CANCEL (KILL)+; CURRENT IO REQUESTS FOR A TASK ON A LINE.D<; THE UC.KIL BIT IN U.CTL IN THE UCB IS SET FOR ALL TERMINAL3; UNITS TO FORCE THE EXECUTIVE TO CALL THIS ROUTINE.*; EVEN THOUGH THE UNIT IS NOT MARKED BUSY.;-;$;C?; TTCN1 IS CALLED FROM TTINI TO KILL READS OR WRITES (OR BOTH) =; AS REQUESTED FROM AN INTERNAL I/O KILL PACKTET00yxtkTADATADATADATADATADATA. SELECTION B; IS BASED ON THE SUBFUNCTION BIT IN THE INTERNAL I/O KILL PACKET.;- ; INPUT: R ; R1=>TCB FOR WHICH TO KILL I/O ; R5=>UCB FOR WHICH TO KILL I/O.; R3=>FUNCTION(S) TO KILL (IF ENTRY AT TTCN1); ;E .ENABL LSBK;BTTCAN::T .IF DF R$$IIC8 MOV #,R3 ;IF CALLED AT TTCAN, BOTH READS ; AND WRITES WILL BE KILLED TTCN1::O .ENDC ;R$$IIC MTPS #0 ;;;ALLOW INTERRUPTSO CALL MAPD ;MAP DATA AREA .IF DF T$$EIO$ MOV R5,R0 ;GET COPY OF UCB POINTER7 ADD #U.TIXL,R0 ;MAKE POINTER TO U.TIXL (IOPX LISTHEAD)N83$: MOV R0,R4 ;CURRENT IOPX POINTER BECOMES BACKPOINTER ASSUME I.XLNK,0#5$: MOV @R4,R0 ;POINT TO NEXT IOPXR BEQ 7$ ;NONE - JUMP(' CMP I.XTCB(R0),R1 ;DO TASK TCBS MATCH? BNE 3$ ;N - JUMP .IF DF R$$IIC7 BIT #TF.RLB,R3 ;ARE WE KILLING READS? IF SO, THIS MUST . ;HAVE AN IOPX SINCE ONLY READS HAVE IOPX'S BEQ 3$ ;BR IF NO .ENDC ;R$$IIC ASSUME I.XLNK,0$ MOV @R0,@R4 ;REMOVE IOPX FROM LIST MOV R1,-(SP) ;SAVE REGISTERS. MOV R3,-(SP)O! MOV #I.XLEN,R1 ;GET SIZE OF IOPX$ CALL $DEACB ;DEALLOCATE IOPX MOV (SP)+,R3 ;RESTORE REGISTERS MOV (SP)+,R1$ BR 5$ ;LOOPP7$: ;REFERENCE LABEL7 .ENDC ;T$$EIO .IF DF T$$SPL, MOV #120000,R4 ;SET VIRTUAL ADDRESS OF UCBX" MOV U.TAPR(R5),@#KDSAR5 ;MAP UCBX ADD #U.TSTA,R5 ;POINT TO U.TSTA .IFF ;T$$SPLN ADD #U.TUX,R5 ;POINT TO U.TUX ASSUME U.TSTA,U.TUX+2+ MOV (R5)+,R4 ;GET UCBX AND POINT TO U.TSTA0! BEQ 40$ ;NONE - LINE IDLE- JUMPR .ENDC ;T$$SPL ASSUME U.TCI,0P& MOV @R4,R0 ;GET CURRENT INPUT PACKET BEQ 10$ ;NONE - JUMP$ BIT #S1.USI,@R5 ;UNSOLICITED INPUT? BNE 10$ ;Y - IGNORE ' CMP I.TCB(R0),R1 ;FROM THE RIGHT TASK?. BNE 10$ ;N - JUMPD .IF DF R$$IIC* BIT #TF.RLB,R3 ;DO WE WANT TO KILL READS? BEQ 10$ ;BR IF NOA C .IFTF ;R$$IIC' MOV #IE.ABO&377,(R0) ;SET ABORT STATUSA/ MOV R3,-(SP) ;SAVE FLAG FOR KILL READ OR WRITEX MOV R1,-(SP) ;SAVE TCB ADDRESSO CALL KILLI ;KILL INPUT" MOV (SP)+,R1 ;RESTORE TCB ADDRESS MOV (SP)+,R3 ;RESTORE FLAGM010$: MOV U.TCO(R4),R0 ;GET CURRENT OUTPUT PACKET BEQ 40$ ;NONE - JUMP' CMP I.TCB(R0),R1 ;FROM THE RIGHT TASK?I BNE 40$ ;N - JUMP) .IFT ;R$$IICH+ BIT #TF.WLB,R3 ;DO WE WANT TO KILL WRITES?C BEQ 40$ ;BR IF NOD E .ENDC ;R$$IIC' MOV #IE.ABO&377,(R0) ;SET ABORT STATUSI BR KILLO ;KILL OUTPUT0;S;A6.SBTTL KILLO1 - KILL OUTPUT WITH STATUS SUPPLIED IN R0;+); KILLO1 - KILL OUTPUT WITH STATUS IE.DNR %; USED FOR TIME-OUT OR MODEM HUNG UP.O;T; INPUT:"; R0 - STATUS (IO.DNR IN LO BYTE); R4 POINTER TO UCBX; R5 POINTER TO U.TSTA;Q ; REGISTERS ALTERED: R0,R1,R2,R3;-;O;H3KILLO1::MOV U.TCO(R4),R3 ;GET CURRENT OUTPUT PACKETH BNE 20$ ;THERE IS ONE - JUMP# BIT #S1.OBY,@R5 ;ECHO IN PROGRESS?D BEQ 40$ ;NO - JUMP- CALL SETDSI ;YES - DISABLE INPUT PROCESSING ; BISB #US.OIU,U.STS-U.TSTA(R5) ;INTERRUPTS NOT EXPECTED NOWH! BIC #S1.OBY,@R5 ;SET OUTPUT FREE1 RETURNU"20$: MOV R0,@R3 ;OK - LOAD STATUS ;FALL THRU TO "KILLO"O;T; -.SBTTL KILLO - KILL OUTPUT WITH STATUS IE.ABO4;I;+); KILLO - KILL OUTPUT WITH STATUS IE.ABO.I;R; INPUT:; R4 POINTER TO UCBX; R5 POINTER TO U.TSTA8; I.LNK IN CURRENT OUTPUT REQUEST PACKET CONTAINS STATUS; TO RETURN TO TASK;;%; NOTE - MUST EXECUTE ON CORRECT CPU!P;C ; REGISTERS ALTERED: R0,R1,R2,R3;-;N;KILLO:: SAVNR ;SAVE R4,R5)' CALL SETDSI ;DISABLE INPUT PROCESSINGO- BIC #S2.WRA,2(R5) ;CLEAR WRAP-AROUND CONTEXT,5 CALL ABOXL ;ABORT OUTPUT WITH INTERRUPTS LOCKED OUT= BISB #US.OIU,U.STS-U.TSTA(R5) ;DISABLE RECOGNITION OF OUTPUTI ;INTERRUPTSI2 FRKBIT BIC,#FR.ORD ;PREVENT MULTIPLE COMPLETIONS CALLR FPORD ;SAY OUTPUT DONE; ;C,.SBTTL KILLI1 - KILL INPUT WITH STATUS IN R0;+A; KILLI1 - KILL SOLICITED OR UNSOLICITED INPUT WITH STATUS IN R0. :; USED TO KILL INPUT BECAUSE OF TIME-OUT OR MODEM HUNG UP.;V; INPUT:; R0 STATUS (IS.TMO OR IE.DNR); R4 POINTER TO UCBX; R5 POINTER TO U.TSTA;O ; REGISTERS ALTERED: R0,R1,R2,R3;-;N;R ASSUME U.TCI,0'KILLI1::MOV 00yytbl@R4,R3 ;GET CURRENT PACKETE BEQ 40$ ;NONE - RETURN MOV R0,@R3 ;OK - STORE STATUSR ;FALL THRU TO "KILLI"T;S;C,.SBTTL KILLI - KILL INPUT WITH STATUS IE.ABO;I;+(; KILLI - KILL INPUT WITH STATUS IE.ABO.;K; INPUT:; R4 POINTER TO UCBX; R5 POINTER TO U.TSTA7; I.LNK IN CURRENT INPUT REQUEST PACKET CONTAINS STATUS.; TO RETURN TO TASK;U%; NOTE - MUST EXECUTE ON CORRECT CPU!C; ; REGISTERS ALTERED: R0,R1,R2,R3;-;L;EKILLI:: SAVNR ;SAVE R4,R5A' CALL SETDSI ;DISABLE INPUT PROCESSINGC" TST U.TCO(R4) ;DOING TASK OUTPUT? BNE 30$ ;Y - JUMPK;SB; IF WE ARE KILLING A READ WITH ECHO, IT IS POSSIBLE THAT THE ECHO@; HAS NOT YET COMPLETED. IF SO, WE MUST LOGICALLY KILL THE ECHO.;I? BISB #US.OIU,U.STS-U.TSTA(R5) ;SET OUTPUT INTERRUPT UNEXPECTEDA! BIC #S1.OBY,@R5 ;SET OUTPUT FREEP630$: FRKBIT BIC,#FR.IRD ;PREVENT MULTIPLE COMPLETIONS BIC #S1.ESC!S1.DEC!S1.DPR,@R5$ ;GET OUT OF ESCAPE SEQUENCE MODE ;CLEAR DEFERRED ECHO FLAGS# ;CLEAR DEFERRED PROCESSING FLAGP, CLRB U.TISV(R4) ;CLEAR INPUT STATE VARIABLE CALLR FPIRD ;SAY INPUT DONE40$: RETURN ;RETURNE;W;  O .IF DF M$$PRO A*.SBTTL FPTIM - FORK LEVEL TIME-OUT ROUTINE;MA; THIS ROUTINE IS ENTERED FROM THE FORK DISPATCHER AFTER A SWITCHE*; TO THE CORRECT CPU TO HANDLE A TIME-OUT.;5 .IF DF T$$SPL/FPTIM:: CALL 70$ ;HANDLE TIME-OUT ON THIS UNITT .IFF ;T$$SPLC ASSUME U.TUX,U.TSTA-2"FPTIM:: TST -(R5) ;POINT TO U.TUX( CALL 70$ ;HANDLE TIME-OUT ON THIS UNIT .ENDC ;T$$SPL1 TST (SP)+ ;ROUTINE RETURNS AS A COROUTINE - POPC ;RETURN ADDRESST$ RETURN ;RETURN TO FORK DISPATCHER O .ENDC ;M$$PRO A;S;L&.SBTTL TIME - TIME-OUT (DRIVER TIMER).; ;S!TTICK:: CALL MAPD ;MAP DATA AREAI+ MOV #DCB0,R3 ;POINT TO POINTER TO TT0: DCBU< MOV #$SCDV1,-(SP) ;GET ADDRESS OF DEVICE TABLE SCAN ROUTINE  .IF NDF T$$MODO H80$:  .ENDC ;NOT T$$MOD S$60$: CALL @(SP)+ ;GET NEXT TERMINAL BCS CLINS ;ALL DONE - JUMP) CMP D.NAM(R3),#"TT ;IS DEVICE NAME "TT"?S BNE 100$ ;N - ABORT SCAN) BIT #DV.TTY,U.CW1(R5) ;IS IT A TERMINAL?D BEQ 100$ ;N - ABORT SCAN .IF DF R$$CON) BITB #US.OFL,U.ST2(R5) ;IS UNIT OFFLINE? ! BNE 60$ ;Y - GO ON TO NEXT UNITT .ENDC ;R$$CON;A!; FOUND A TERMINAL. CHECK TIMERS.O;E .IF DF T$$SPL ADD #U.TSTA,R5 ;POINT TO U.TSTA070$: MOV #120000,R4 ;SET VIRTUAL ADDRESS OF UCBX) MOV U.TAPR-U.TSTA(R5),@#KDSAR5 ;MAP UCBX .IFF ;T$$SPL  ADD #U.TUX,R5 ;POINT TO U.TUX ASSUME U.TSTA,U.TUX+2/70$: MOV (R5)+,R4 ;GET UCBX AND POINT TO U.TSTAC .ENDC ;T$$SPL BEQ 80$ ;NONE - JUMP MOV R4,R1 ;;% ADD #U.TITI,R1 ;POINT TO INPUT TIMERT. MOV #IS.TMO,R0 ;GET STATUS FOR INPUT TIME-OUT, MOV #KILLI1,R2 ;POINT TO KILL INPUT ROUTINE CALL 110$ ;CHECK INPUT TIMER ASSUME S2.CTS,100000 ( TST 2(R5) ;OUTPUT STOPPED BY CTRL-S?" BMI 80$ ;Y - IGNORE OUTPUT TIMER .IF DF T$$SPL6 MOV #120000,R4 ;RESTORE CLOBBERED R4 TO POINT TO UCBX MOV R4,R1 ;, .IFF ;T$$SPLX MOV -2(R5),R1 ;GET UCBX .ENDC ;T$$SPL& ADD #U.TOTI,R1 ;POINT TO OUTPUT TIMER1 MOV #IE.DNR&377,R0 ;MOVE STATUS TO R0 FOR KILLO1D- MOV #KILLO1,R2 ;POINT TO KILL OUTPUT ROUTINEO CALL 110$ ;CHECK OUTPUT TIMERT M .IF DF T$$MOD T80$: .IF NDF R$$CONC0 BITB #US.OFL,U.ST2-U.TSTA(R5) ;IS UNIT OFFLINE? BEQ 90$ ;N - JUMPU; CLRB U.TMTI-U.TSTA(R5) ;Y - RESET TIMER TO PREVENT TIMEOUT. BR 60$ ;GO ON TO NEXT UNIT .ENDC ;NDF R$$CON90$: MOV R5,R1 ;M, ADD #U.TMTI-U.TSTA,R1 ;POINT TO MODEM TIMER. MOV #MTIM,R2 ;POINT TO MODEM TIME-OUT ROUTINE CALL 110$ ;CHECK MODEM TIMER D .IF DF D$$ZMD- MOV #U2.DZ1!U2.RMT,-(SP) ;PUSH BITS TO CHECKTC BIC U.CW2-U.TSTA(R5),(SP)+ ;IS LINE SERVICED BY A DZ11 AND REMOTE?  BNE 60$ ;N - JUMP. .IF DF M$$PRO7 MOV #FR.TIM,R3 ;GET FORK REQUEST BIT FOR MODEM TIMEOUT ? MOV #60$,-(SP) ;GO ON TO NEXT LINE IF THIS ONE NOT ON THIS CPUI4 CALL SWCPU ;SWITCH TO THE CORRECT CPU IF NECESSARY7 CALLR YZPOLL ;POLL THE DZ11 FOR MODEM STATUS SINCE IT 2 ;DOESN'T INTERRUPT ON MODEM STATUS TRANSITIONS00yxtkTADATADATADATADATADATA .IFF ;M$$PRO 6 CALL YZPOLL ;POLL THE DZ11 FOR MODEM STATUS SINCE IT2 ;DOESN'T INTERRUPT ON MODEM STATUS TRANSITIONS .ENDC ;M$$PRO .ENDC ;D$$ZMD .ENDC ;T$$MOD B BR 60$ ;LOOP;3; FOUND A DEVICE OTHER THAN A TERMINAL - ABORT SCAN ; !100$: ADD #S$$SPA,SP ;FLUSH STACK ; ; ALL DONE - REQUEUE CLOCK BLOCK;I&CLINS:: MOV #$TTCB,R0 ;GET CLOCK BLOCK% CLR R1 ;CLEAR HIGH ORDER DELTA TIMEO# MOV $TKPS,R2 ;LOW ORDER = 1 SECOND ) MOV #C.SYST,R4 ;TYPE = SYSTEM SUBROUTINEA0 CALLR $CLINS ;INSERT IN CLOCK QUEUE AND RETURN; ;1110$: TSTB @R1 ;TIMER ACTIVE? BEQ 120$ ;N - RETURN DECB @R1 ;Y - UPDATE TIMER BEQ 130$ ;TIMER EXPIRED - JUMP120$: RETURN ;RETURN130$:P  .IF DF M$$PRO OE; WE JUST DECREMENTED THE TIMER TO 0, BUT WE MAY BE ON THE WRONG CPU.C5; SET TIMER BACK TO +1 AND SWITCH TO THE CORRECT CPU.O;$ INCB @R1 ;SET TIMER TO +1R% MOV #FR.TIM,R3 ;GET FORK REQUEST BITV# CALL SWCPU ;SWITCH TO CORRECT CPUV;.:; IF WE FALL THRU HERE, WE ARE ALREADY ON THE CORRECT CPU.;L& CLRB @R1 ;FINALLY SET THE TIMER TO 0 .IF DF T$$SPL% MOV #120000,R4 ;RESTORE UCBX POINTER .IFF ;T$$SPLB. MOV U.TUX-U.TSTA(R5),R4 ;RESTORE UCBX POINTER .ENDC ;T$$SPL D .ENDC ;M$$PRO J .IF DF T$$CON ! MOV U.SCB-U.TSTA(R5),R3 ;GET SCBO C .IF DF R$$MPL A MOV S.KRB(R3),R3 ;GET KRB TSTB K.PRM(R3) ;DL11? BNE 140$ ;N - JUMP ASSUME K.CSR,0  MOV @R3,R3 ;GET CSR ADDRESSW .IFF ;R$$MPLR  TSTB U.CTYP-U.TSTA(R5) ;DL11? BNE 140$ ;N - JUMP" MOV S.CSR(R3),R3 ;GET CSR ADDRESS  .ENDC ;R$$MPL ) BIT #20,4(R3) ;TERMINAL IN CONSOLE MODE?E BNE 120$ ;Y - IGNORE TIME-OUT M .ENDC ;T$$CON ,140$: JMP @R2 ;HANDLE TIME-OUTC;$ .DSABL LSB.;C $ .ENABL LSBF  .IF DF T$$MOD S;U; HANDLE MODEM TIME-OUTC;.9MTIM: MOV #CT.TIM,R2 ;SET INDEX FOR MODEM TIMEOUT ROUTINE3+ CALLR CTRD ;DO CONTROLLER-DEPENDENT STUFF,  .ENDC ;T$$MOD;S;D.SBTTL TTPWUP - POWER-UP.;;+; TTPWUP - POWER-UP.;-;B;1 .IF DF R$$CONTTINIT:: .IFFCTTPWUP:: .ENDC $ .IF DF T$$COM 4% MOV $TTCOM,R0 ;GET TTCOM PCB ADDRESS1 .IF NDF R$$CONM% BEQ 20$ ;NOT A VIRGIN SYSTEM - JUMP  .ENDC ;NDF R$$CON4 BIS #PS.NSF,P.STAT(R0) ;MARK TTCOM AS NONSHUFFLABLE7 MOV P.REL(R0),KINAR6 ;MAP INITIALIZATION CODE IN APR 6. .IF DF T$$SPL% CALL INIT ;DO VIRGIN INITIALIZATION; .IFF ;T$$SPLE* CALL INIT+20000 ;DO VIRGIN INITIALIZATION* ;THE INIT ROUTINE IS BUILT FOR MAPPING( ;IN APR5, BUT IS NOW MAPPED IN APR 6 .ENDC ;T$$SPL%20$: CALL MAPD ;MAP DRIVER DATA AREAM 4 .IFF ;T$$COM0 E CALL MAPD ;MAP DATA AREA .IF NDF R$$CONQ% BNE 30$ ;NOT A VIRGIN SYSTEM - JUMPN .ENDC ;NDF R$$CON N .IF NDF R$$MPLR T MOV R3,-(SP) ;SAVE R3 MOV R4,-(SP) ;SAVE R4 I .IFTF 0 MOV @#KISAR5,R0 ;COPY REAL START OF DRIVER DATA. ADD #200,R0 ;ADD THE EQUIVALENT OF 4 K WORDS$ MOV R0,@#KISAR6 ;MAP REST OF DRIVER .IF NDF T$$SPLO$ MOV R0,@#$DALED ;SAVE DRIVER KISAR6 .ENDC ;NDF T$$SPL% CALL INIT ;DO VIRGIN INITIALIZATIOND  .IFTE A MOV (SP)+,R4 ;RESTORE R40 MOV (SP)+,R3 ;RESTORE R3  A .ENDC ;NDF R$$MPL  .ENDC ;T$$COM R30$: ;REFERENCE LABEL ; .IF NDF R$$MPL F .IF DF T$$ACD/ TST U.ACB(R5) ;DOES THIS TERMINAL HAVE AN ACD?I BEQ 40$ ;N - JUMPK ADD #U.TSTA,R5 ;POINT TO U.TSTA* MOV #A.POWE,R0 ;SET POWERFAIL ENTRY POINT CALL $SWACD ;CALL ACDA* SUB #U.TSTA,R5 ;RESTORE R5 TO UCB ADDRESS .ENDC ;T$$ACD%; SET UP DATABASES OF UCB'S AND CSR'SL; L,40$: MOVB U.CTYP(R5),R2 ;GET CONTROLLER TYPE# MOV TTUCB(R2),R1 ;POINT TO D'X'UCBV7 ADD R3,R1 ;POINT TO TABLE POINTER FOR THIS CONTROLLERC% MOV (R1),R1 ;POINT TO UCB/CSR TABLE .IF DF D$$M11 CMP #TTTDH,R2 ;IS IT A DH11?A BNE 50$ ;N - JUMPM+ MOV S.DMCS(R4),-2(R1) ;FILL IN DM11-BB CSRD .ENDC ;D$$M11050$: MOV S.CSR(R4),(R1)+ ;FILL IN CONTROLLER CSR$ MOVB U.UNIT(R5),R2 ;GET UNIT NUMBER ASL R2 ;CONVERT TO WORD OFFSET* ADD R2,R1 ;ADD POINTER AND UNIT NUMBER*2 MOV R5,00y|ytbl(R1) ;PLUG IN UCB M .ENDC ;NDF R$$MPL C .IF DF M$$EXT .IF DF D$$H11!D$$V11T ' .IF DF R$$MPL& BIT #HF.UBM,$HFMSK ;UNIBUS MAP EXIST?" BEQ 60$ ;N - SKIP INITIALIZATION .IFF ;R$$MPLF TST $UMRPT ;UNIBUS MAP EXISTS?( BEQ 60$ ;IF EQ NO, SKIP INITIALIZATION .ENDC?; LOAD THE UMR(S) TO MAP DRIVER WITH 18-BIT ADDRESSES IDENTICAL1; TO 16-BIT ADDRESSESC; .IF DF T$$UMR$ MOV #UMR5S,R1 ;POINT TO SAVED UMR 5$ MOV #UBMPR+<5*4>,R2 ;POINT TO UMR 5" MOV (R1)+,(R2)+ ;INITIALIZE UMR 5 MOV (R1)+,(R2)+ .IF NDF T$$SPLC" MOV (R1)+,(R2)+ ;INITIALIZE UMR 6 MOV (R1)+,(R2)+ M .ENDC ;NDF T$$SPL .ENDC ; DF T$$UMR60$: ;REFERENCE LABEL .ENDC ;D$$H11!D$$V11F .ENDC ;M$$EXT B .IF DF R$$CON RETURNI .IFFS ADD #U.TSTA,R5 ;POINT TO U.TSTA4 CALL CKTAB ;CHECK WHETHER TYPE-AHEAD BUFFER SHOULD ;BE ALLOCATED OR DEALLOCATED  .IF DF T$$MOD M% BICB #US.CRW!US.DSB,U.STS-U.TSTA(R5)V ;ASSUME LOCAL LINE U .ENDC (/ MOV #CT.PWR,R2 ;SET ROUTINE INDEX FOR POWER-UP/ CALLR CTRD ;CALL CONTROLLER DEPENDENT ROUTINEU ;AND RETURN( .ENDC ;R$$CON .DSABL LSBN;;;  .END60$: ;REFERENCE LABEL .ENDC ;D$$H11!D$$V11F .ENDC ;M$$EXT B .IF DF R$$CON RETURNI .IFFS ADD #U.TSTA,R5 ;POINT TO U.TSTA4 CALL CKTAB ;CHECK WHETHER TYPE-AHEAD BUFFER SHOULD ;BE ALLOCATED OR DEALLOCATED  .IF DF T$$MOD M% BICB #US.CRW!US.DSB,U.STS-U.TSTA(R5)V ;ASSUME LOCAL LINE U .ENDC (/ MOV #CT.PWR,R2 ;S .TITLE TTCISC .IDENT /05.03/N;O6; COPYRIGHT (c) 1983 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;;;O; 23-JAN-78 PETER WANNHEDENT;(; PREVIOUSLY MODIFIED BY:;+; P. WANNHEDEN ; C. F. SPITZ; D. R. DONCHINT; ; MODIFICATIONS:;N!; DD158 12-OCT-82 DALE R. DONCHIN <; DISALLOW INPUT PROCESSING CONCURRENT WITH FORK PROCESSING;E; S. C. ADAMS 24-OCT-83 5.01&; SA135 -- REFERENCE U.TFRQ AS A WORD;B; S. C. ADAMS 18-JUN-84 5.02; SA251 -- FIX SIMULATED ^R; ; S. C. ADAMS 1-MAR-85 5.03D*; SA367 -- ADD TTSET1 ENTRY POINT FOR LAT;I;C;+D; CONTROLLER INDEPENDENT ROUTINES TO SET UP FOR INTERRUPT PROCESSING; AND TO QUEUE A FORK REQUEST.;-;+;  .MCALL UCBDF$,SCBDF$P UCBDF$ ,,TTDEFC SCBDF$ O .IF DF R$$MPL  .MCALL KRBDF$ E KRBDF$I  .ENDC ;R$$MPL R .PSECT MAP5;N;I;+*; TTSET - COMMON INTERRUPT SET UP ROUTINE.;1; INPUT:; R2 SAVED BY CALL (JSR R2)./; POINTS TO POINTER TO CTB POINTER. (RSX-11M+)I'; POINTS TO CONTROLLER TYPE. (RSX-11M)5; R4 SAVED BY $INTSV. "; CONTAINS CONTROLLER NUMBER * 2.; R5 SAVED BY $INTSV.N;T ; OUTPUT:O; R2 FREE TO USE; R3 CSR ADDRESS; R4 KRB ADDRESS; R5 FREE TO USE; ;; CALLS CALLER BACK AS COROUTINE WITH ALL OF DRIVER MAPPED.F:; CALLER EXECUTES "RETURN" BACK TO THIS ROUTINE TO RESTORE:; REGISTERS, QUEUE A FORK REQUEST IF NECESSARY AND DISMISS; THE INTERRUPT.;-; ;U .ENABL LSBD; TTSET:: MOV R3,-(SP) ;;;SAVE R3T& MOV KISAR6,-(SP) ;;;SAVE KERNEL APR 6 .IF DF T$$COM2 MOV KINAR6,-(SP) ;;;SAVE KERNEL INSTRUCTION APR 6 .ENDC ;T$$COM  .IF DF R$$MPL V, ADD @(R2)+,R4 ;;;GET POINTER TO KRB POINTER MOV @R4,R4 ;;;GET KRB ADDRESSF MOV @R4,R3 ;;;GET CSR ADDRESSC CALL MAPD ;;;MAP DATA AREA  .IFFF  CALL MAPD ;;;MAP DATA AREA7 ADD (R2)+,R4 ;;;CALCULATE POINTER TO UCB TABLE POINTERU- MOV (R4),R4 ;;;GET ADDRESS OF UCB/CSR TABLE/ MOV (R4)+,R3 ;;;GET CSR AND POINT TO UCB TABLE) ; .ENDC ;R$$MPL R CALL @R2 ;;;CALL CALLER6 .IF DF T$$COM5 MOV (SP)+,KINAR6 ;;;RESTORE KERNEL INSTRUCTION APR 6 .ENDC ;T$$COM) MOV (SP)+,KISAR6 ;;;RESTORE KERNEL APR 6O MOV (SP)+,R3 ;;;RESTORE R2, R3  MOV (SP)+,R2 ;;;F MTTSET1:: .IF DF M$$PRO / MOV $TTUQP,R4 ;;;GET POINTER TO UCB QUEUE HEADL% TST (R4)+ ;;;ANYTHING IN UCB QUEUE? , BNE 10$ ;;;Y - QUEUE FORK BLOCK AND RETURN RETURN ;;;N - RETURNS$00|yxtkTADATADATADATADATADATA10$: CALLR 100$ ;;;QUEUE FORK BLOCK C .IFFP T% TST $TTUQ ;;;ANYTHING IN UCB QUEUE? BEQ 20$ ;;;N - RETURN6- MOV #$TTFB+2,R4 ;;;POINT TO PC IN FORK BLOCKO+ TST (R4)+ ;;;FORK BLOCK ALREADY IN QUEUE?M BNE 20$ ;;;Y - RETURNR! CALL $FORK0 ;;;QUEUE FORK BLOCK  R .IFTF R;'; COME HERE AT SYSTEM STATE, PRIORITY 0D;$!FP000:: CALL MAPD ;MAP DATA AREAN! CALL LOCKI ;LOCK OUT INTERRUPTS + CALL 30$ ;;;PROCESS ALL UCBS IN UCB QUEUEQ;EH; COME BACK HERE WITH INTERRUPTS LOCKED OUT, UCB QUEUE EMPTY AND LOCKED.M; CLEAR FORK PC TO SHOW FORK BLOCK NOT IN QUEUE, UNLOCK UCB QUEUE AND RETURN. ;N R .IFT V CLR 6(R4) ;;;CLEAR FORK PC% JMP 130$ ;;;GO AND UNLOCK UCB QUEUE  E .IFFQ E CLR 4(R4) ;;;CLEAR FORK PC L .IFTF ;20$: RETURN ;;;RETURN.30$: ;;;REFERENCE LABEL S .IFTT P/ MOV $TTUQP,R4 ;;;GET POINTER TO UCB QUEUE HEADN) LOCK$ -LK.SPN(R4),SPIN ;;;LOCK UCB QUEUE   .IFFC ) MOV #$TTUQ,R4 ;;;POINT TO UCB QUEUE HEADE T .IFTF S' MOV (R4)+,R5 ;;;GET FIRST UCB IN QUEUE BEQ 20$ ;;;NONE - RETURN MOV @R5,-(R4) ;;;DEQUEUE UCB  BNE 40$ ;;;NOT LAST - JUMP7 MOV R4,2(R4) ;;;LAST UCB DEQUEUED - UPDATE PTR TO LASTA/40$: INC @R5 ;;;SHOW UCB NOT IN QUEUE ANY MORE  C .IFTR C, ULOCK$ -LK.SPN(R4),SPIN ;;;UNLOCK UCB QUEUEA BIS #S1.DSI,U.TSTA-U.TFLK(R5) ;;;DISABLE INPUT PROC. DURING FORKN  .ENDC E+ CALL 60$ ;;;PROCESS ALL FORK REQUEST BITSU ;;;FOR THIS UCB& BR 30$ ;;;TRY TO DEQUEUE ANOTHER UCB;;;+$; SETDSI - DISABLE INPUT PROCESSING.; A; SOME SYSTEM STATE ROUTINES WHICH ARE NOT CALLED FROM THE DRIVERC; FORK DISPATCHER MAY DISABLE INPUT CHARACTER PROCESSING BY CALLINGD9; THIS ROUTINE. THE CALLER IS CALLED BACK AS A COROUTINE.Y>; ON RETURN HERE, ALL FORK REQUESTS FOR THE UCB ARE PROCESSED.C; AFTER THAT, INPUT PROCESSING IS ENABLED AND AN ATTEMPT IS MADE TOR1; RETRIEVE CHARACTERS FROM THE TYPE-AHEAD BUFFER.R;-;B;U1SETDSI::BIS #S1.DSI,@R5 ;DISABLE INPUT PROCESSINGA CALL @(SP)+ ;CALL CALLER! CALL LOCKI ;LOCK OUT INTERRUPTS ; ;E<; FIND ALL BITS THAT ARE SET IN THE FORK LEVEL REQUEST BYTE.9; FOR EACH BIT FOUND, CLEAR IT AND CALL THE CORRESPONDING ; FORK LEVEL ROUTINE.E;H-50$: ADD #U.TFLK-U.TSTA,R5 ;;;POINT TO U.TFLKR ASSUME U.TFRQ, 060$: TST -(R5) ;;;ANY BITS SET IN REQUEST WORD? BEQ 80$ ;;;N - JUMP ! MTPS #0 ;;;Y - ALLOW INTERRUPTSC2 MOV #FRKTB-2,R2 ;GET START OF TABLE WITH POINTERS ;TO FORK LEVEL ROUTINESB CLR R3 ;INITIALIZE BITMASK# SEC ;MAKE SURE WE SHIFT IN A ONEK70$: ROL R3 ;SHIFT MASK LEFTD! TST (R2)+ ;UPDATE TABLE POINTERL BIT R3,@R5 ;THIS BIT SET?# BEQ 70$ ;N - LOOP (WITH CC-C = 0)S BIC R3,@R5 ;Y - CLEAR IT .IF DF T$$SPL' ADD #U.TSTA-U.TFRQ,R5 ;POINT TO U.TSTAA) MOV U.TAPR-U.TSTA(R5),@#KDSAR5 ;MAP UCBX;, MOV #120000,R4 ;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPL0 ASSUME U.TSTA, M% ADD #U.TUX-U.TFRQ,R5 ;POINT TO U.TUX  MOV (R5)+,R4 ;GET UCBX IN R4U .IFTF ;T$$SPL T! CALL @(R2)+ ;CALL ROUTINE WITH:E ; R4 = POINTER TO UCBX  ; R5 = POINTER TO U.TSTA " MTPS #TTPRI ;LOCK OUT INTERRUPTS% BR 50$ ;;;GET NEXT FORK REQUEST BIT ;TA; NO MORE PROCESSING AT ZERO PRIORITY. ENABLE PROCESSING OF INPUT#E; CHARACTERS AND SEE WHAT IS WAITING FOR US IN THE TYPE-AHEAD BUFFER.P;B-80$: ADD #U.TSTA-U.TFRQ,R5 ;;;POINT TO U.TSTAX9 BIC #S1.DSI,@R5 ;;;ENABLE PROCESSING OF INPUT CHARACTERSU .IF DF T$$SER4SERPRO:: ;;;SERIALLY PROCESS CHARACTERS FROM TABUF .ENDC ;T$$SER .IFT ;T$$SPLN; MOV U.TAPR-U.TSTA(R5),@#KDSAR5 ;;;MAKE SURE UCBX IS MAPPEDU .ENDC ;T$$SPL9 CALL NXTIC ;;;PROCESS CHARACTERS FROM TYPE-AHEAD BUFFERI; TST U.TFRQ-U.TSTA(R5) ;;;ANY FORK REQUESTS NOW PENDING?I BEQ 20$ ;;;N - RETURNS, BIS #S1.DSI,@R5 ;;;DISABLE INPUT PROCESSING- BR 50$ ;;;PROCESS ANY PENDING FORK REQUESTS;;N;OE; POST-FORK PROCESSING. PICK UP CHARACTER FROM U.TECB AND PROCESS IT.;F-FPPFP:: MOV #NXTIC,@SP ;MODIFY RETURN ADDRESSA" MTPS #TTPRI ;LOCK OUT INTERRUPTS .IF DF T$$SPL6 MOVB U.TECO-U.T00|y}ytblSTA(R5),R2 ;;;GET CHARACTER TO PROCESS .IFF ;T$$SPL;/ MOVB U.TECB(R4),R2 ;;;GET CHARACTER TO PROCESSY .ENDC ;T$$SPL+ BIC #S1.DSI,@R5 ;;;ENABLE INPUT PROCESSINGN P .IF DF T$$MOD % BITB #US.DSB!US.CRW,U.STS-U.TSTA(R5)A, ;;;LINE DISABLED OR WAITING FOR CARRIER? BNE 20$ ;;;Y - JUMP  .ENDC ;T$$MOD C" CALLR ICH2A ;;;PROCESS CHARACTER;N;R S .IF DF M$$PRO ;+ ; SWCPU - SWITCH TO CORRECT CPU.;M; INPUT:(; R3 BITMASK TO SET IN FORK REQUEST BYTE; R5 POINTER TO U.TSTA;2 ; OUTPUT:R<; IF ALREADY EXECUTING ON THE CORRECT CPU (THE ONE THAT OWNS9; THE UNIBUS WHERE THE CONTROLLER SITS), IMMEDIATE RETURN@ ; TO CALLER.;T8; ELSE, FORK REQUEST BIT SET IN UCB. UCB ADDED TO END OF6; TARGET CPU'S UCB QUEUE, UNLESS IT IS ALREADY QUEUED.9; TARGET CPU'S FORK BLOCK QUEUED TO FORK QUEUE, UNLESS ITC/; IS ALREADY QUEUED. RETURN TO CALLER'S CALLER.F; ; REGISTERS ALTERED: R4 ;-;T;O(SWCPU:: MOV U.SCB-U.TSTA(R5),R4 ;GET SCB MOV S.KRB(R4),R4 ;GET KRB1 BIT K.URM(R4),@$CPURM ;ALREADY ON THE RIGHT CPU?E BNE 140$ ;Y - RETURN> MOV K.URM(R4),@SP ;N - SAVE URM AND POP RETURN ADDRESS - WANT! ;TO RETURN TO CALLER'S CALLERT' MOV #$URMTB,R4 ;GET START OF URM TABLEB,90$: BIT @SP,(R4)+ ;IS THIS THE CORRECT CPU? BEQ 90$ ;N - LOOPE TST (SP)+ ;CLEAN STACK; MOV $TTUQT-$URMTB-2(R4),R4 ;GET POINTER TO POINTER TO LASTR" ;UCB IN TARGET CPU'S UCB QUEUE; CALL 110$ ;PLACE FORK REQUEST (NO NEED TO RAISE PRIORITY,)' ;WE ARE ON THE WRONG CPU ANYWAY...).100$: LOCK$ -LK.SPN-2(R4),SPIN ;LOCK UCB QUEUE' TST 6(R4) ;FORK BLOCK ALREADY QUEUED?) BNE 130$ ;Y - JUMP! ADD #6,R4 ;N - POINT TO FORK PC  MOV #FP000,@R4 ;SET FORK PC CLR -(R4) ;CLEAR LINK WORD CALL $QFORK ;QUEUE FORK BLOCKT CMP -(R4),-(R4) ;BACK UP R4' BR 130$ ;UNLOCK FORK BLOCK AND RETURNM $ .IFTF B;R;R;+9; FORK - SET FORK LEVEL REQUEST AND ADD UCB TO UCB QUEUE.B;E; INPUT:(; R3 BITMASK TO SET IN FORK REQUEST BYTE; R5 POINTER TO U.TSTA;N ; OUTPUT:C8; REQUEST BIT SET IN UCB. UCB ADDED TO END OF UCB QUEUE,; UNLESS IT WAS ALREADY QUEUED.E; ; REGISTERS ALTERED: R4 ;-;A;#FORK:: P .IFT  K) MOV $TTUQP,R4 ;;;POINT TO UCB QUEUE HEADR0 TST (R4)+ ;;;POINT TO POINTER TO LAST IN QUEUE0110$: LOCK$ -LK.SPN-2(R4),SPIN ;;;LOCK UCB QUEUE  .IFFO A5 MOV #$TTUQ+2,R4 ;;;POINT TO POINTER TO LAST IN QUEUER E .IFTF ( BIS #S1.DSI,@R5 ;;;FORCE INPUT TO TABUF# ;;;PREVENT RETRIEVAL FROM TABUFY) ADD #U.TFRQ-U.TSTA,R5 ;;;POINT TO U.TFRQ, BIS R3,(R5)+ ;;;SET REQUEST BIT (U.TFRQ) ASSUME U.TFLK, # BIT #1,@R5 ;;;UCB ALREADY QUEUED?E BEQ 120$ ;;;Y - JUMP MOV R5,@(R4)+ ;;;N - QUEUE IT MOV R5,-(R4) ;;;SET NEW LASTR CLR @R5 ;;;CLEAR LINK WORD)120$: ADD #U.TSTA-U.TFLK,R5 ;;;RESTORE R5( , .IFT; K3130$: ULOCK$ -LK.SPN-2(R4),SPIN ;;;UNLOCK UCB QUEUE  P .ENDC A140$: RETURN ;;; F .DSABL LSB1 I 5 .ENDCE INPUT TO TABUF# ;;;PREVENT RETRIEVAL FROM TABUFY) ADD #U.TFRQ-U.TSTA,R5 ;;;POINT TO U.TFRQ, BIS R3,(R5)+ ;;;SE .TITLE TTCT .IDENT /02.01/E;; COPYRIGHT (c) 1984 BY(; DIGITAL EQUIPMENT CORPORATION, MAYNARD'; MASSACHUSETTS. ALL RIGHTS RESERVED.E;A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED.A; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSELA; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THISRA; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED ORA; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND1; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERED.1;A; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTAA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R;T;O; 3-JUL-82 TONY LEKASE;R; MODIFICATIONS:;H(; WMG029 2-MAR-83 WILLIAM M. GERACI/; ADD ERROR PASSING CAPABILITY FOR TFW TO PASST; ERROR STATUS TO TTDRV (00}yxtkTADATADATADATADATADATAP/OS)R;S; S. C. ADAMS 2-MAY-84 02.01*; SA170 -- SUPPORT CHANGES TO STATUS BITS;C;G;+4; CONTROLLER-DEPENDENT ROUTINES FOR CT VIDEO DISPLAY;-;  .IF DF B$$MAP .PSECT MAP5;.;+; YCSTAX - START OUTPUT.;S; INPUT:<; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE.; ; R2 PHYSICAL UNIT NUMBER * 2T#; (ONLY IF MULTIPLEXERS IN SYSTEM)O; R3 CSR ADDRESS; R4 UCBX ADDRESS-; R5 POINTER TO U.TSTA;D; U.TOP BUFFER LIST POINTER; U.TOC BYTE COUNTR;A; NOTE:;; THE VIDEO TASK SHOULD DECREMENT T.OREM AS DATA IS REMOVEDP8; FROM THE BUFFERS. THE COUNT IN THE SECOND STATUS WORD:; THAT IS RETURNED TO THE USER IS THE ORIGINAL COUNT MINUS ; T.OREM. ;5*; Intermediate input and output buffer. - ;:!; byte contentsN-; ------------------------------------N@; 0-1 link to next buffer (0 if this is last).; 2 logical buffer length!; 3 reserved; 4-47 dataT;;H; NOTE:A;S,; THE OUTPUT TIMER IS BEING CLEARED BECAUSE-; SOME OUTPUT TO THE VIDEO TASK, FOR EXAMPLEU; GIDIS, MAY TAKE A LONG TIME. ;-; 3YCSTAX::CALL MAPD ;SETTUP TERMINAL DRIVER MAPPINGe% CLRB U.TOTI(R4) ;CLEAR OUTPUT TIMER !; COMPUTE THE TOTAL TRANSFER SIZE-: MOV U.TTOC(R4),T.OREM ;GET THE NUMBER OF BYTES IN THE XFR% ;THAT ARE NOT CURRENTLY BUFFERED)6 ADD U.TOC(R4),T.OREM ;ADD IN THE AMOUNT FOR THE FIRST# ;BUFFER OR FOR THE ECHO BUFFER # TST U.TCO(R4) ;BUFFER CHAIN USED?E$ BEQ 10$ ;IF EQ NO - COPY THE DATA: MOV U.TOP(R4),T.OPKP ;MOV THE BUFFER LIST ADDRESS FOR TFW7; NOW WE ADD IN THE COUNTS FOR THE EXTRA BUFFERS IF ANYL0; THIS CODE DEPENDS ON THE MAXIMUM BUFFER LENGTH; BEING LESS THAN 128.4 MOV T.OPKP,R1 ;GET THE ADDRESS OF THE FIRST BUFFER.5$: MOVB U.TDYP(R4),3(R1) ;STORE THE DATA TYPE2 MOV (R1),R1 ;GET THE POINTER TO THE NEXT BUFFER/ BEQ REQEST ;IF EQ NO MORE - REQUEST THE TASK & MOVB 2(R1),R0 ;GET THE BUFFER LENGTH$ ADD R0,T.OREM ;ADD IT TO THE COUNT BR 5$ ;TRY FOR SOME MOREA0; COPY THE SINGLE BUFFER INTO A BUFFER IN TFWCOM=10$: MOV #T.TBUF,T.OPKP ;MOV THE BUFFER LIST ADDRESS FOR TFW + MOV U.TOC(R4),R1 ;GET THE CHARACTER COUNTF2 MOVB R1,T.TBUF+2 ;PUT THE LENGTH INTO THE BUFFER9 MOV #T.TBUF+4,R0 ;POINT TO DATA AREA OF THE TEMP BUFFER,3 MOV U.TOP+2(R4),R3 ;GET THE SOURCE BUFFER ADDRESSO#20$: MOVB (R3)+,(R0)+ ;MOVE A BYTE  SOB R1,20$ ;DO THEM ALL BR REQEST ;REQUEST THE TASK;F;+; YCABOX - ABORT OUTPUT.;I; INPUT:<; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE.;T; NOTE:,; THE VIDEO TASK MUST NOT USE ANY CHARACTERS+; FROM THE BUFFER AFTER TF.ABO HAS BEEN SET)0; BECAUSE THE BUFFER WILL HAVE BEEN DEALLOCATED.;U4; GET THE CHARACTER(S) AND THEN TEST THE BIT. IF IT$; IS SET DO NOT USE THE CHARACTER(S);-;P3YCABOX::CALL MAPD ;SETTUP TERMINAL DRIVER MAPPINGR' BIS #TF.ABO,T.FLAG ;SET THE ABORT BITD' CLR T.OPKP ;CLEAR THE BUFFER POINTERK" BR REQEST ;AND REQUEST THE TASK;;+!; YCSTOX - STOP (SUSPEND) OUTPUT.R;N; INPUT:<; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE.;-;R3YCSTOX::CALL MAPD ;SETTUP TERMINAL DRIVER MAPPING ) BIS #TF.SPN,T.FLAG ;SET THE SUSPEND BITE" BR REQEST ;AND REQUEST THE TASK;T;+; YCRESX - RESUME OUTPUT.O;S; INPUT:<; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE.;-;N3YCRESX::CALL MAPD ;SETTUP TERMINAL DRIVER MAPPINGK+ BIC #TF.SPN,T.FLAG ;CLEAR THE SUSPEND BIT;" BR REQEST ;AND REQUEST THE TASK;S;+; YCPWUP - POWER-UP.; ; INPUT:<; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE.;-; .IF DF R$$CONYCCONL::,YCCPUP::RETURN ;ONLY INIT FOR UNIT ONLINEYCUONL::YCUPUP:: .IFFEYCPWUP:: .ENDC ;R$$CON, CALL MAPD ;SETTUP TERMINAL DRIVER MAPPING$ TST # ;32 WORD ALIGNED? BEQ 5$ ;IF EQ YES - OK- CRASH ;OOOPS65$: MOV #VT.NAM,R3 ;GET THE ADDRESS OF THE TASKS NAME) CALL $SRSTD ;GET THE TASKS TCB ADDRESS  BCC 100}yytbl0$ ;BRANCH IF NO ERRORS+ CRASH ;TASK NOT INSTALLEDN)10$: MOV R0,VT.TCB ;SAVE THE TCB ADDRESSL= MOV #</64.>,VT.APR ;TFWCOM'S OFFSET IN TTDRVP7 ADD @#KISAR5,VT.APR ;COMPUTE TFWCOMS PHYSICAL ADDRESSP2 MOV #TFWPAR,R3 ;GET THE ADDRESS OF TFWCOM'S NAME. CALL $SRNAM ;GET THE PARTITIONS PCB ADDRESS BCC 20$ ;IF CC OK CRASH ;PARTITION NOT AROUNDO?20$: MOV VT.APR,P.REL(R2) ;FILL IN BASE ADDR IN 32. WORD BLOCKSH7 MOV #</64.>,P.BLKS(R2) ;AND THE LENGTH, BIS #TF.INT,T.FLAG ;SET THE INITIALIZE BIT5REQEST: MOV VT.TCB,R0 ;SETTUP THE TASK'S TCB ADDRESSS! CALLR $EXRQN ;REQUEST THE TASKT; ;+; G$IN - DRIVER INPUT ROUTINEK;R:; THIS ROUTINE IS CALLED IN SYSTEM STATE BY THE VIDEO TASK9; TO INFORM THE DRIVER THAT THERE IS INPUT WAITING IN THEH; INPUT BUFFER.A;E; REGISTERS MODIFIED:K; ALL;-;R;N@; DEFINE THE KEY MATRIX CODES FOR INTERRUPT AND DO HERE FOR NOW.@; THESE DEFINITIONS SHOULD BE PROVIDED BY THE TERMINAL TASK CODE!; SINCE THEY ARE "DEFINED" BY IT.H;N(K.INT = 144 ;MATRIX CODE FOR INTERRUPT K.DO = 175 ;MATRIX CODE FOR DO2G$IN:: MTPS #TTPRI ;LOCK OUT TERMINAL INTERRUPTS/ CLR R4 ;;;INDICATE THAT THIS IS CONTROLLER 0 3 TTSET$ YC ;;;CALL TTSET SETTUP FOR POSSIBLE FORKR/ MOV #.TTCT+U.TSTA,R5 ;;;SETTUP FOR ICHAR1 CALLF* MOV #T.INBF,R0 ;;;GET THE BUFFER ADDRESS% ;;;ASSUME THE TYPE BYTE IS FIRST $ MOVB (R0)+,R2 ;;;GET THE DATA TYPE$ CMP #T.RSDN,R2 ;;;LEGAL DATA TYPE?, BHIS 5$ ;;;IF HIS YES - PROCESS THE INPUT CRASH ;;;BAD DATA TYPE 5$: ASL R2 ;;;MAKE IT AN INDEX* MOV R2,DTYPE ;;;SAVE THE DATA TYPE INDEX& ;;;ASSUME THAT THE LENGTH IS NEXT.10$: MOVB (R0)+,R1 ;;;GET THE CHARACTER COUNT( BEQ 50$ ;;;IF EQ NO CHARACTERS - EXIT .IF DF T$$IDO TST R2 ;;;DATA TYPE ZERO?. BNE 15$ ;;;NE NO - CAN'T BE INTERRUPT OR DO$ CMPB #K.INT,(R0) ;;;INTERRUPT KEY?% BEQ 100$ ;;;EQ YES - GO PROCESS ITT CMPB #K.DO,(R0) ;;;DO KEY?% BEQ 100$ ;;;EQ YES - GO PROCESS ITF) BR 15$ ;;;AND GO PROCESS THE CHARACTERB;DA; WE HAVE AN INTERRUPT OR DO KEY. IF THIS TERMINAL IS NOT IN RPAT=; MODE THEN CONVERT THE INTERRUPT-DO SEQUENCE TO A CONTROL-C.0;M100$:)% BIT #S1.PTH,(R5) ;;;READ-PASS-THRU?51 BNE 15$ ;;;NE YES - PROCESS CHARACTER IS USUALO CMPB #K.DO,(R0) ;;;DO KEY?' BEQ 110$ ;;;EQ YES - GO DEAL WITH ITT, INC IDOFLG ;;;SET THE INTERRUPT SEEN FLAG( BR 50$ ;;;AND EXIT DISCARDING THE KEY,110$: TST IDOFLG ;;;WAS INTERRUPT PRESSED?1 BEQ 15$ ;;;EQ NO - GO PROCESS DO AS NORMAL KEY ) CLR IDOFLG ;;;CLEAR THE INTERRUPT FLAGO2 MOV #CH.CTC,R2 ;;;CONVERT INTERRUPT-DO TO CTRL-C CALLR ICHAR1 ;;;PROCESSES IT  .ENDC ;T$$IDO-15$: CLR IDOFLG ;;;CLEAR THE INTERRUPT FLAG5. ;;;ASSUME THAT TYPE SPECIFIC DATA IS NEXT& ;;;ASSUME THAT IT IS WORD ALIGNED0 TST (R0)+ ;;;PASS OVER THE TYPE SPECIFIC INFO;SA; IF WE HAVE A MULTI CHARACTER INPUT SEQUENCE FOR DATA TYPE ZERO,YE; (I.E. A CONTROL OR ESCAPE SEQUENCE), MAKE SURE THAT THERE IS ENOUGH C; ROOM IN THE TYPEAHEAD BUFFER FOR IT. IF THERE IS NOT ENOUGH ROOMA.; THEN DISCARD THE CHARACTERS AND ECHO A BELL.;L# CMP #1,R1 ;;;ONLY ONE CHARACTER?% BEQ 20$ ;;;EQ YES - GO PRECESS IT.; TST DTYPE ;;;DATA TYPE 0?$ BNE 20$ ;;;NE NO - GO PROCESS IT. .IF DF T$$SPL$ MOV #120000+U.TTBF,R3 ;;;GET TABUF .IFF ;T$$SPL & MOV U.TTAB-U.TSTA(R5),R3 ;;;GET TABUF- BEQ 20$ ;;;NONE - GO PROCESS THE CHARACTER $ BIT #1,R3 ;;;SINGLE-CHAR. BUFFER?% BNE 20$ ;;;Y - GO PROCESS THE CHAR  .ENDC ;T$$SPL+ MOVB 2(R3),R3 ;;;GET CURRENT ACTIVE COUNTR0 ADD R1,R3 ;;;ACTIVE COUNT INCLUDING NEW CHARS+ CMPB R3,#T$$BFL-4 ;;;TOO MANY CHARACTERS?. BLOS 20$ ;;;LOS NO - PROECSS THE CHARACTERS1 CALLR BELL ;;;ECHO A BELL AND DISCARD THE CHARE ;;;NOW COMES THE DATA120$: CLR R2 ;;;PREPARE R0 (STATUS MUST BE ZERO) " BISB (R0)+,R2 ;;;GET A CHARACTER MOV R0,-(SP) ;;;SAVE R0- MOV R1,-(SP) ;;;AND R1 TST DTYPE ;;;DATA TYPE 0?, BEQ 30$ ;;;IF EQ YES - HANDLE NORMAL TEXT* CALL IRSD00}yxtkTADATADATADATADATADATA1 ;;;HANDLE SPECIAL DATA INPUT BR 40$ ;;;GO GET THE NEXT ONE+30$: CALL ICHAR1 ;;;DO COMMON INPUT PROC.P 40$: MOV (SP)+,R1 ;;;RESTORE R1 MOV (SP)+,R0 ;;;AND R0 SOB R1,20$ ;;;LOOP TILL DONEL50$: RETURN ;AND EXIT;S;+5; IRSD1 - INPUT CHARACTER PROCESSING FOR SPECIAL DATA ;P.; THIS ROUTINE IS CALLED FOR EACH SPECIAL DATA/; INPUT CHARACTER. THIS ROUTINE DOES BASICALLY&; THE SAME THING AS ICHAR1 EXCEPT THAT-; IT WILL PUT THE DATA IN A SPECIAL TYPEAHEADE/; BUFFER UNLESS THERE IS AN IO.RSD OUTSTANDING.A/; IT IS SIMPLER AND PROBABLY SHORTER TO DO THISL; SEPARATLY HERE.M; ; INPUTS:P ; R2 BYTE(; R5 POINTER TO U.TSTA3; DTYPE DATA PATH SPECIFIER 1 < DTYPE < 2*T.RSDN+1D;L ; OUTPUTS:2; ANY OF THE FOLLOWING ACTIONS IS TAKEN, DEPENDENT; ON LINE STATUS.I;D0; 1. BYTE IS STORED IN THE APPROPRIATE DATA TYPE; SPECIFIC TYPEAHEAD BUFFER.S;U,; 2. BYTE IS STORED IN THE INPUT BUFFER OF A; PENDING IO.RSD.;L5; 3. BYTE IS IGNORED IF THE TYPEAHEAD BUFFER IS FULL. ,; AT A LATER TIME SUPPORT COULD BE ADDED TO&; RETURN AN ERROR FOR THIS SITUATION.;A; REGISTERS ALTERED: R2,R3,R4 ;-;(-IRSD1: MOV DTYPE,R3 ;;;GET THE TABUF ADDRESSF MOV T.RSDT(R3),R3 ;;;+# TSTB 2(R3) ;;;ANYTHING BUFFERED?O! BNE 100$ ;;;Y - BUFFER THIS TO + CALL RSDPRC ;;;CAN WE PROCESS THIS BYTE?T BCS 100$ ;;;NO - GO STORE ITI CALLR ICHAR2 ;;;GO PROCESS IT5; PUT THE CHARACTER INTO THE CORRECT TYPEAHEAD BUFFER.1100$: MOVB (R3)+,R4 ;;;GET OFFSET WHERE TO STORE  INC R3 ;;;SKIP OVER 1 BYTEO" CMPB (R3)+,(R3)+ ;;;BUFFER FULL?' BEQ 200$ ;;;Y - IGNORE THE CHARACTER ( ADD R3,R4 ;;;MAKE POINTER INTO BUFFER" MOVB R2,(R4) ;;;STORE CHARACTER( INC -(R3) ;;;INCREMENT ACTIVE COUNTER$ INC -(R3) ;;;UPDATE STORE POINTER! CMPB (R3),3(R3) ;;;WRAP-AROUND?; BNE 200$ ;;;N - JUMPE2 CLRB (R3) ;;;Y - SET POINTER AT START OF BUFFER200$: RETURN ;;;RETURN ;H;+A; RSDPRC - DETERMINE WHETHER A SPECIAL DATA BYTE CAN BE PROCESSEDE;F; INPUT:; R5 POINTER TO U.TSTA;I ; OUTPUT:T$; IF CHARACTER CAN BE PROCESSED NOW:; R4 I/O PAKET ADDRESS; CC-C 0;C(; IF CHARACTER CAN NOT BE PROCESSED NOW:; CC-C 1;2; REGISTERS ALTERED: R4R;-;-=RSDPRC::BIT #S1.DSI!S1.USI,(R5) ;;;INPUT PROCESSING DISABLED?P& ;;;OR UNSOLICITED INP INPROGRESS?# BNE 10$ ;;;Y - CAN'T PROCESS NOWR ASSUME S1.IBY,200 TSTB (R5) ;;;INPUT BUSY? # BPL 10$ ;;;N - CAN'T PROCESS NOWP$ MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX, BEQ 10$ ;;;NONE - CAN'T PROCESS IT (COULD& ;;;HAPPEN FOR EXAMPLE WHEN CTRL-C( ;;;IS TYPED ON AN IDLE SLAVED TERM) ASSUME U.TCI,00$ MOV (R4),R4 ;;;GET PACKET ADDRESS1 CMPB #IO.RSD/400,I.FCN+1(R4) ;;;IS IT AN IO.RSD?-# BNE 10$ ;;;N - CAN'T PROCESS NOW5. TST (PC)+ ;;;RETURN CARRY CLEAR, PROCESS IT10$: SEC ;;;RETURN CARRY SET  RETURN ;;;RETURN;;+; R$OUTD - OUTPUT DONE ROUTINE;U:; THIS ROUTINE IS CALLED IN SYSTEM STATE BY THE VIDEO TASK=; TO INFORM THE DRIVER THAT THE TASK IS DONE WITH THE CURRENTI; OUTPUT BUFFERS;P; REGISTERS MODIFIED:L; ALL;-;T> .IIF DF,T$$SPL,.ERROR ;THIS CODE ASSUMES UCBX IN PRIMARY POOL ;OR PRIVATE BUFFER POOL3R$OUTD::MTPS #TTPRI ;LOCK OUT TERMINAL INTERRUPTS;/ CLR R4 ;;;INDICATE THAT THIS IS CONTROLLER 0C3 TTSET$ YC ;;;CALL TTSET SETTUP FOR POSSIBLE FORKE) CLR T.OPKP ;;;CLEAR THE BUFFER POINTERD@ BIC #,T.FLAG ;;;CLEAR THE ABORT AND SUSPEND BITS. MOV #.TTCT+U.TSTA,R5 ;;;SETTUP FOR ODONE CALL, MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX ADDRESS8 MOV T.OREM,U.TTOC(R4) ;;;RESTORE BYTES TRANSFERED COUNT/ CLR U.TOC(R4) ;;;SHOW CURRENT BUFFER ALL DONER6 MOV T.STAT,@U.TCO(R4) ;;;GET PACKET COMPLETION STATUS2 CALLR ODONE ;;;FINISH OFF THE OUTPUT AND RETURN;D;+); CTICK - TIMER ROUTINE FOR CT VIDEO TASK;;A3; THIS ROUTINE IS CALLED ONCE EVERY CT$TIC TICKS TOC.; PROVIDE TIMER SERVICES FOR THE CT VIDEO TASK;L ; INPUTS: ; NONE;N ; OUTPUTS:4; THE THREE CT TIMERS ARE CHECKED AND THE VIDEO TASK; IS NOTIFIED IF THEY RUN OUTC;-;E3CTICK:00}yytbl: CALL MAPD ;SETTUP TERMINAL DRIVER MAPPINGC% CLR -(SP) ;GET A WORD ON THE STACKU" TST T.BTMR ;BLINK TIMER ACTIVE?) BEQ 10$ ;IF EQ NO - TRY THE NEXT TIMERO" DEC T.BTMR ;DECREMENT THE TIMER$ BNE 10$ ;IF NE, NOT TIMED OUT YET, BIS #TF.BTM,(SP) ;SET THE BLINK TIMER FLAG'10$: TST T.CTMR ;CURSOR TIMER ACTIVE? ) BEQ 20$ ;IF EQ NO - TRY THE NEXT TIMER " DEC T.CTMR ;DECREMENT THE TIMER$ BNE 20$ ;IF NE, NOT TIMED OUT YET- BIS #TF.CTM,(SP) ;SET THE CURSOR TIMER FLAG-+; T.STMR IS MAINTAINED IN SECONDS, NOT TICSI-20$: TST T.STMR ;SCREEN BLANK TIMER ACTIVE?C BEQ 30$ ;IF EQ NO - FINISH UP, DEC STIMER ;SCREEN TICS COUNTER FINISHED? BPL 30$ ;IF PL NO - FINISH UP- MOV $TKPS,STIMER ;RESET SCREEN TICS COUNTERB) DEC T.STMR ;DECREMENT THE SCREEN TIMER$ BNE 30$ ;IF NE, NOT TIMED OUT YET3 BIS #TF.STM,(SP) ;SET THE SCREEN BLANK TIMER FLG C430$: BIS (SP),T.FLAG ;SET ANY BITS IN THE FLAG WORD TST (SP)+ ;ANY TIMERS GO OFF?1 BEQ CTQUEK ;IF EQ NO - REQUEUE THE CLOCK BLOCKD CALL REQEST ;REQUEST THE TASK. ASSUME .,CTQUEK ;AND REQUEUE THE CLOCK BLOCK;E;+ ; CTQUEK - QUEUE THE CLOCK BLOCK;-;C+CTQUEK::MOV #$CTCB,R0 ;GET THE CLOCK BLOCK * CLR R1 ;CLEAR THE HIGH ORDER DELTA TIME) MOV #CT$TIC,R2 ;SET THE LOW ORDER DELTA * MOV #C.SYST,R4 ;TYPE = SYSTEM SUBROUTINE1 CALLR $CLINS ;INSERT IN CLOCK QUEUE AND RETURNG;;+-; UNUSED ENTRY POINTS, SHOULD NEVER BE CALLEDD;-;(-$YCOUT:: ;OUTPUT INTERRUPT SERVICE ROUTINEQ,$YCINP:: ;INPUT INTERRUPT SERVICE ROUTINEYCMTIM::CRASH ;MODEM TIMERT .ENDC ;B$$MAP .ENDBLOCK;E;+ ; CTQUEK - QUEUE THE CLOCK BLOCK;-;C+CTQUEK::MOV #$CTCB,R0 ;GET THE CLOCK BLOCK * CLR R1 ;CLEAR THE HIGH ORDER DELTA TIME) MOV #CT$TIC,R2 ;SET THE LOW ORDER DELTA * MOV #C.SYST,R4 ;TYPE = SYSTEM SUBROUTINE1 CALLR $CLINS ;INSERT IN CLOCK QUEUE AND RETURNG;;+-; UNUSED ENTRY POINTS, SHOULD NEVER BE CALLEDD;-;(-$YCOUT:: ;OUTPUT INTERRUPT SERVICE ROUTINEQ,$YCINP:: ;INP .TITLE TTDATE .IDENT /06.11/R;R6; COPYRIGHT (c) 1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;R<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;A;A; 27-JAN-78 PETER WANNHEDENC;$; PREVIOUSLY MODIFIED BY:O;I; P. WANNHEDEN ; C. F. SPITZE; D. R. DONCHINA ; T. LEKAS; J. KAUFFMAN ; S. C. ADAMS ; C. B. PETROVIC -; R. S. PHILPOTT S ; T. LEKAS E; B. S. MCCARTHY ; L. B. MCCULLEY R; L. M. KOGAN ;; MODIFICATIONS:;; ; L. KOGAN 02-DEC-85 06.01Q:; LK706 -- CORRECT SPEED FOR 134.5 BAUD IN ABLOW FOR DH11;R; S. C. ADAMS 6-NOV-85 6.025; SA452 -- ADD SUPPORT FOR USER-WRITTEN PORT DRIVER H;E; L. KOGAN 18-JUN-86 6.032; LK710 -- INCLUDE 7-BIT CHARACTER LENGTH SUPPORT;E ; S. R. CLOUTIER 20-JUN-86 6.043; ADD $LHGTD (LH GET TRANSMIT DATA) ENTRY TO TABLE ; ; S. C. ADAMS 6-AUG-86 6.055; SA464 -- ADD SUPPORT FOR LAT APPLICATION TERMINALS ; ; S. R. CLOUTIER 7-AUG-86 6.06%; ADD $LHTMO TIME-OUT ENTRY TO TABLEN;-; R. D. HANEY 13-AUG-86 6.07R ; RDH073 - ADD SUPPORT FOR LA75; #; S. R. CLOUTIER 12-SEPT-1986 6.082/; SRC CORRECT PPORG AND PPEIO IN PPDSP (PHEW!)R;R; R. D. HANEY 19-SEP-86 06.10&; RDH087 ADD SUPPORT FOR LA2XX SERIES;G!; S. R. CLOUTIER 27-OCT-86 06.11-; SRC FIX QPDSP FOR IO.ORGL;E;R;+I; THIS MODULE CONTAINS ALL DRIVER DATA, EXCEPT THE DRIVER DISPATCH TABLE. 5; IT ALSO CONTAINS THE DRIVER INITIALIZATION ROUTINE.U;R?; IN A SYSTEM THAT SUPPORTS SEPARATE KERNEL DATA SPACE MAPPING,.8; THIS MODULE MUST BE BUILT INTO THE TASK IMAGE "TTCOM".;-;;. .MCALL FILIO$, SPCIO$, TTSYM$; $ FILIO$ ;DEFINE I/O FUNCTION CODES SPCIO$ TTSYM$D .IF DF T$$OVL .MCALL PCBDF$ PCBDF$R .ENDC ;T$$OVL  .IF NDF R$$MPL2 C .MCALL HWDDF$ C HWDDF$ ;DEFINE KINAR5 R .ENDC ;NDF R$$MPL T;S;LA; MACRO TO GENERATE CHARACTER RECOGNITION TABLE AND CORRESPONDINGS; DISPATCH TABLE.I;I .MACRO CREC P00yxtkTADATADATADATADATADATAREFIX,CHAR .IRP X, .PSECT CHRT .IIF NDF CHRT CHRT==.$ .IIF NDF 'PREFIX'CRT 'PREFIX'CRT==. .BYTE CH.'X'T .PSECT CHRD .IIF NDF CHRD CHRD==. .WORD 'PREFIX''X' .ENDR .PSECT MAP5 .ENDM CREC;C'CH.DEF = 0 ;DEFINE "DEFAULT" CHARACTERL ;FOR CHARACTER DISPATCHING;L; CHARACTER RECOGNITION TABLES.C9; EACH TABLE SHOULD BE ORDERED IN DESCENDING FREQUENCY OF$%; OCCURRENCE FOR MAXIMUM PERFORMANCE.H;C2; CHARACTERS THAT HAVE SPECIAL SIGNIFICANCE BEFORE0; STORING IN TYPE-AHEAD BUFFER - USED BY ICHAR1..; NOTE - ICHAR1 RECOGNIZES CTRL-X SEPARATELY. 6; ALL ENTRIES IN THE TABLE MUST BE NUMERICALLY SMALLER; OR EQUAL TO CTRL-X (30).; .PSECT MAP5;' .EVENI1CRT::  .BYTE CH.CTS, CH.CTQ, CH.CTO= .IIF DF T$$CTX, .BYTE CH.CTX .BYTE CH.CTCR2ASXOFF==I1CRT ;THIS LABEL MUST POINT TO AN XOFF  ;CHARACTER (CTRL-S)D1ASXON==I1CRT+1 ;THIS LABEL MUST POINT TO AN XONM ;CHARACTER (CTRL-Q);H;C1; CHARACTERS THAT HAVE SPECIAL SIGNIFICANCE AFTERN<; RETRIEVAL FROM TYPE-AHEAD BUFFER (OR WHEN BUFFER BYPASSED)D; USED BY ICHAR2. NOTE - ESCAPE AND RUBOUT ARE RECOGNIZED SEPARATELY9; BY ICHAR2. ALL ENTRIES IN THE TABLE MUST BE NUMERICALLY; SMALLER THAN ESCAPE (33).C;T) CREC I2,E .IIF DF T$$CTX, CREC I2, CREC I2,; ;T .IIF DF T$$CTR, CREC ED, CREC ED,; ;HA; CHARACTERS THAT HAVE TO BE EXPANDED ON OUTPUT - USED BY EXPCHR. 5; CARRIAGE-RETURN IS RECOGNIZED SEPARATELY BY EXPCHR.RE; ALL ENTRIES IN THE TABLE MUST BE SMALLER THAN CARRIAGE-RETURN (15).2;O CREC EX,;E?; CHARACTERS THAT HAVE NON-STANDARD ECHO FORMATS AS TERMINATORSI;L CREC EK,C;;E6; RECOGNITION TABLE FOR VERTICAL FORMAT CONTROL BYTES.0; NOTE - THIS TABLE USES -1 AS TABLE TERMINATOR.;T/; THE WORD IN TABLE CHRD IS ENCODED AS FOLLOWS: ;H(; LOW BYTE DESCRIBES LEADING LF'S OR FF:; 0 = NO LEADING CHARACTERS ; CH.FF = LEADING FF; -N = N LEADING LF'SX;R"; HIGH BYTE DESCRIBES TRAILING CR:; 0 = NO TRAILING CR; S2.CR = TRAILING CRC; #; DEFINE SYMBOLS FOR ENCODED VALUESC;S5 .IIF LE S2.CR-200 .ERROR ;S2.CR MUST BE IN HIGH BYTELVFNUL = 0 ;NULL - NOTHING#VFZER = 376!S2.CR ;0 - 2 LF'S, 1 CRO#VFONE = CH.FF!S2.CR ;1 - 1 FF, 1 CRO%VFPLU = S2.CR ;+ - NO LF OR FF, 1 CRAVFDOL = 377 ;$ - 1 LF, NO CRH&VFDF = 377!S2.CR ;DEFAULT - 1 LF, 1 CR;D;R; DEFINE THE TABLE TERMINATOR ;L CH.DF = -1;R! CREC VF,L;I;L; SPECIAL ECHO STRINGS;I<ASHT:: .BYTE CH.SP,CH.SP,CH.SP,CH.SP,CH.SP,CH.SP,CH.SP,CH.SP) ;8 SPACES - USED TO SIMULATE HOR. TAB  .IF DF T$$CTR .ASCTR:: .ASCII /^R/ ;CTRL-R L .ENDC ASCTU:: .ASCII /^U/ ;CTRL-U .IF NDF R$$MPL&A$$CLI,ASCLP:: .BYTE 12,'> ;ABBREVIATED CLI PROMPT*ASCLI:: .ASCII <12>/MCR>/ ;FULL CLI PROMPT .ENDC ;NDF R$$MPL&A$$CLIS .IF DF T$$SPC-ASCLC:: .BYTE 15,12 ;CLI CONTINUATION PROMPT .ASCII /->/ ;R .ENDC ;T$$SPC;,!; DON'T SEPARATE THE LINES BELOW!O;RASCTZ::.ASCII /^Z/ ;CTRL-ZC&ASCR:: .BYTE CH.CR,0,0,0,0,0,0,0,0,0,0* ;CARRIAGE RETURN PLUS UP TO 10 FILLERS ;(WORST CASE FOR LA30S)T; !; DON'T SEPARATE THE LINES ABOVE! ;SASBELL::.BYTE 7 ;BELLASBSL:: .ASCII "\" ;BACKSLASH L .IF DF T$$RUB B<ASRBS:: .BYTE CH.BSP,CH.SP,CH.BSP ;BACKSPACE-SPACE-BACKSPACE ;(FOR SCOPE RUBOUT)A7ASBSP:: .BYTE CH.BSP,CH.BSP,CH.BSP,CH.BSP ;8 BACKSPACEST; .BYTE CH.BSP,CH.BSP,CH.BSP,CH.BSP ;TO RUBOUT HTAB ON SCOPE  ' .ENDC T;L. NLFF==4 ;NUMBER OF VERTICAL FILL CHARACTERS. .REPT 4 ;OUTPUT 4 LF'S IN PLACE OF FF AND VT .BYTE CH.LF ;FOR SCOPESF/ .REPT NLFF ;INSERT VERTICAL FILL IF NECESSARY  .BYTE 0 .ENDR .ENDR. .REPT 4 ;OUTPUT 4 LF'S IN PLACE OF FF AND VT .BYTE CH.LF ;FOR SCOPES$ .ENDRASLF:: .BYTE CH.LF ;LINE FEED .REPT NLFFE .BYTE 0 ;FILLERS .ENDR;P;U .IF DF T$$ESC T(; SYNTAX RULE TABLE FOR ESCAPE SEQUENCES; .ENABL LSB,7 .BYTE 'P,'P,40$-ESCST ;P - NEXT = 40$ (VT61 EXCEPTION)7 .BYTE 'Y,'Y,30$-ESC00yytblST ;Y - NEXT = 30$ (VT61 EXCEPTION).EESCST:: .BYTE '?,'?,40$-ESCST ;? - NEXT = 40$ (OLDER TERM. EXCEPTION)F< .BYTE 'O,'O,40$-ESCST ;O - NEXT = 40$ (ANSI SS3 INTRODUCER)1 .BYTE '[,'[,20$-ESCST ;[ - NEXT = 20$ (ANSI CSI)FB10$: .BYTE 40,57,10$-ESCST ;INTERMEDIATE CHAR. - NEXT = SAME (10$)' .BYTE 60,176,0 ;FINAL CHARACTER - DONEEB20$: .BYTE 40,77,20$-ESCST ;INTERMEDIATE CHAR. - NEXT = SAME (20$)( .BYTE 100,176,0 ;FINAL CHARACTER - DONE@30$: .BYTE 40,176,40$-ESCST ;FIRST COORD. (BIAS 40) - NEXT = 40$40$: .BYTE 60,71,20$-ESCST ; .BYTE 40,176,0 ; .DSABL LSB- S .ENDC ;01; TABLE OF HORIZONTAL FILL REQUIREMENT FOR LA30S.;3; INDEX = CURRENT HORIZONTAL POSITION DIVIDED BY 8.$;C ; NUMBER OF FILL CHAR.S HOR.POS.HORFT:: .BYTE 4. ;0-7.; .BYTE 8. ;8.-15. .BYTE 6. ;16.-23.. .BYTE 3. ;24.-31.C .BYTE 0. ;32.-39.: .BYTE 2. ;40.-47.T .BYTE 4. ;48.-55.- .BYTE 6. ;56.-63.. .BYTE 8. ;64.-71.  .BYTE 10. ;72. AND UPY;4;7 0.IIF DF T$$ONI, .PSECT MAP6  .IF DF D$$M11&R$$MPL&T$$ONI#YMC12:: .BLKW 1 ;POINTER TO $YMCTBB .ENDC ;D$$M11&R$$MPL&T$$ONI* .IF DF T$$GMC!T$$SMC!D$$M11!D$$Z11!D$$V11 .SPHI == S.38.4 ;HIGHEST RECOGNIZED SPEED CODE  .IF DF D$$H11 L:; TABLE OF RECEIVE AND TRANSMIT SPEED PARAMETERS FOR DH11.>; THE TABLE IS INDEXED BY S.XXX-1, WHERE S.XXX IS THE SYMBOLIC1; NAME FOR THE DESIRED SPEED (DEFINED BY TTSYM$)..<; EACH ENTRY IS A BYTE CONTAINING THE PARAMETER TO LOAD INTO.; THE LINE PARAMETER REGISTER FOR SPEED S.XXX.>; IF S.XXX IS UNSUPPORTED, THE BYTE CONTAINS A NEGATIVE VALUE.;MSPDH:: .BYTE 0 ;S.0 .BYTE 1 ;S.50 .BYTE 2 ;S.75$ .BYTE -1 ;S.100 - UNSUPPORTEDI .BYTE 3 ;S.110 .BYTE 4 ;S.134 .BYTE 5 ;S.150 .BYTE 6 ;S.200 .BYTE 7 ;S.300 .BYTE 10 ;S.600A .BYTE 11 ;S.1200 .BYTE 12 ;S.1800 .BYTE -1 ;S.2000 - UNSUPPORTED .BYTE 13 ;S.2400 .BYTE -1 ;S.3600 - UNSUPPORTED .BYTE 14 ;S.4800 .BYTE -1 ;S.7200 - UNSUPPORTED .BYTE 15 ;S.9600 .BYTE 16 ;S.EXTA .BYTE 17 ;S.EXTB .BYTE -1 ;S.19.2 - UNSUPPORTED .BYTE -1 ;S.38.4 - UNSUPPORTED P .ENDC ;D$$H11  .IF DF D$$Z11 .:; TABLE OF RECEIVE AND TRANSMIT SPEED PARAMETERS FOR DZ11.9; THE TABLE FORMAT IS IDENTICAL TO THAT OF THE DH11 TABLE0; DESCRIBED ABOVE.;Y#SPDZ:: .BYTE -1 ;S.0 - UNSUPPORTED. .BYTE 0 ;S.50 .BYTE 1 ;S.750 .BYTE -1 ;S.100 - UNSUPPORTED0 .BYTE 2 ;S.110 .BYTE 3 ;S.134 .BYTE 4 ;S.150 .BYTE -1 ;S.200 - UNSUPPORTEDD .BYTE 5 ;S.300 .BYTE 6 ;S.600 .BYTE 7 ;S.1200. .BYTE 10 ;S.1800 .BYTE 11 ;S.2000 .BYTE 12 ;S.2400 .BYTE 13 ;S.3600 .BYTE 14 ;S.4800 .BYTE 15 ;S.7200 .BYTE 16 ;S.9600 .BYTE -1 ;S.EXTA - UNSUPPORTED .BYTE -1 ;S.EXTB - UNSUPPORTED .BYTE -1 ;S.19.2 - UNSUPPORTED .BYTE -1 ;S.38.4 - UNSUPPORTED ; .ENDC ;D$$Z11  .IF DF D$$V11;; TABLE OF RECEIVE AND TRANSMIT SPEED PARAMETERS FOR DHV11. 9; THE TABLE FORMAT IS IDENTICAL TO THAT OF THE DH11 TABLE0; DESCRIBED ABOVE.;E$SPDHV:: .BYTE -1 ;S.0 - UNSUPPORTED .BYTE -1 ;S.50 - UNSUPPORTED .BYTE 1 ;S.750 .BYTE -1 ;S.100 - UNSUPPORTED; .BYTE 2 ;S.110 .BYTE 3 ;S.134 .BYTE 4 ;S.150 .BYTE -1 ;S.200 - UNSUPPORTED- .BYTE 5 ;S.300 .BYTE 6 ;S.600 .BYTE 7 ;S.1200- .BYTE 10 ;S.1800 .BYTE 11 ;S.2000 .BYTE 12 ;S.2400 .BYTE -1 ;S.3600 - UNSUPPORTED .BYTE 13 ;S.4800 .BYTE -1 ;S.7200 - UNSUPPORTED .BYTE 15 ;S.9600 .BYTE -1 ;S.EXTA - UNSUPPORTED .BYTE -1 ;S.EXTB - UNSUPPORTED .BYTE 16 ;S.19.2 .BYTE -1 ;S.38.4 - UNSUPPORTED .ENDC ;D$$V11# .ENDC ;T$$GMC!T$$SMC!D$$M11!D$$Z11; .PSECT MAP5  .IF DF D$$M11!D$$ZMD!D$$VMD;M; MATCH TABLES FOR AUTO-BAUD SPEED DETECT. EACH ENTRY CONSISTS OF TWO BYTES, K; THE FIRST BYTE IS WHAT A CARRIAGE RETURN LOOKS LIKE WHEN WE ARE RECEIVING K; AT A KNOWN RATE AND THE CHARACTER WAS SENT AT THE BAUD SPEED SPECIFIED BY.J; THE SECOND RATE. THERE ARE TWO TABLES, ONE FOR DETECTING SPEEDS BETWEENL; 600 AND 9600 BAUD (WE SAMPLE AT 4800 BAUD), THE OTHER FOR DETECTING SPEEDS2; BETWEEN 50 AND 300 BAUD (W00yxtkTADATADATADATADATADATAE SAMPLE AT 300 BAUD).;1;ABHIGH::.BYTE 200,S.600 ;CH.CR AT 600 BAUD ON DH11 AND DZ116 .BYTE 170,S.1200 ;CH.CR AT 1200 BAUD ON DH11 AND DZ116 .BYTE 214,S.1800 ;CH.CR AT 1800 BAUD ON DH11 AND DZ116 .BYTE 346,S.2400 ;CH.CR AT 2400 BAUD ON DH11 AND DZ11- .BYTE 362,S.9600 ;CH.CR AT 9600 BAUD ON DH11 - .BYTE 376,S.9600 ;CH.CR AT 9600 BAUD ON DZ11H .BYTE 0 ;ZERO TABLE TERMINATOR; 9ABLOW:: .BYTE 340,S.50 ;CH.CR AT 50 BAUD ON DH11 AND DZ11)2 .BYTE 170,S.75 ;CH.CR AT 75 BAUD ON DH11 AND DZ114 .BYTE 214,S.110 ;CH.CR AT 110 BAUD ON DH11 AND DZ11- .BYTE 316,S.134 ;CH.CR AT 134.5 BAUD ON DH11.- .BYTE 306,S.134 ;CH.CR AT 134.5 BAUD ON DZ11 4 .BYTE 346,S.150 ;CH.CR AT 150 BAUD ON DH11 AND DZ11 .BYTE 0 ;ZERO TABLE TERMINATOR .ENDC ;D$$M11!D$$ZMD!D$$VMD .IF DF T$$GMC!T$$SMC!T$$CUP ;D; 7; TABLES OF IMPLICIT CHARACTERISTICS PER TERMINAL TYPE.0<; EACH TABLE IS INDEXED WITH TERMINAL TYPE (TC.XXX) MINUS 1.;; HIGHEST INDEX = TTPHI. EACH ENTRY IS A BYTE, WITH MEANING ; DESCRIBED BELOW.;E; TABLE BIT(-S) MEANINGB8; ------------------------------------------------------4; TTYP1 0-5 TO BE COPIED DIRECTLY INTO THE HIGH BYTE ; OF STATUS WORD 2 (U.TSTA+2).3; 6-7 CURSOR POSITIONING COMMAND TYPE (RANGE 0-3).N2; THIS VALUE IS USED AS INDEX INTO TABLE "CPOST"; (SEE BELOW).; TTYP2 0-7 PAGE WIDTH.M; TTYP3 0-6 PAGE LENGTH.; 7 1 = SCOPE.4; TTYP4 0-5 TO BE COPIED DIRECTLY INTO THE HIGH BYTE ; OF STATUS WORD 4 (U.TSTA+6).; ;RB; MACRO TO GENERATE AN ENTRY IN THE TABLES TTYP1, TTYP2 AMD TTYP3.;N;BP; NOTE: DEFAULT OF HSY IS A NO-OP. STATUS BITS MUST BE REARRANGED FOR IT TO WORK;DC .MACRO TERM TYPE,WID,LEN,HHT=0,HFF=0,HFL=0,VFL=0,SCP=0,CUP=0,HSY=0C .PSECT TTYP1N .IIF NDF TTYP1 TTYP1==. .=TTYP1+TYPE-1E6 X=!!! .BYTE X!HFL! .IF DF T$$GMC!T$$SMCT .PSECT TTYP2O .IIF NDF TTYP2 TTYP2==. .=TTYP2+TYPE-1O .BYTE WID .PSECT TTYP3U .IIF NDF TTYP3 TTYP3==. .=TTYP3+TYPE-1N .BYTE !LEN .ENDC .PSECT MAP5 .ENDM TERM;0; MACRO TO GENERATE AN ENTRY IN THE TABLE TTYP4.;E< .MACRO ETERM TYPE,ANI=0,AVO=0,BLK=0,DEC=0,EDT=0,RGS=0,SFC=0 .PSECT TTYP4F .IIF NDF TTYP4 TTYP4==. .=TTYP4+TYPE-1IC X=!!!!< X=X!! .BYTE X/400 .PSECT MAP5 .ENDM ETERM;S5TTPHI == T.L2XX ;HIGHEST TERMINAL TYPE WITH IMPLICIT ;CHARACTERISTICS;U" TERM T.AS33 WID=72.,LEN=66.,HFL=1" TERM T.KS33 WID=72.,LEN=66.,HFL=1" TERM T.AS35 WID=72.,LEN=66.,HFL=1" TERM T.L30S WID=80.,LEN=66.,HFL=7 TERM T.L30P WID=80.,LEN=66. TERM T.LA36 WID=132.,LEN=66.E4 TERM T.VT05 WID=72.,LEN=20.,HHT=1,VFL=1,SCP=1,CUP=1( TERM T.VT50 WID=80.,LEN=12.,HHT=1,SCP=1. TERM T.VT52 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=2. TERM T.VT55 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=2. TERM T.VT61 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=2# TERM T.L180 WID=132.,LEN=66.,HFF=1I4 TERM T.V100 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1# TERM T.L120 WID=132.,LEN=66.,HFF=16) TERM T.LA12 WID=132.,LEN=66.,HHT=1,HFF=11) TERM T.L100 WID=132.,LEN=66.,HHT=1,HFF=1 # TERM T.LA34 WID=132.,LEN=66.,HFF=1W# TERM T.LA38 WID=132.,LEN=66.,HFF=1.4 TERM T.V101 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=14 TERM T.V102 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=14 TERM T.V105 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=14 TERM T.V125 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=14 TERM T.V131 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=14 TERM T.V132 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1( TERM T.LA50 WID=80.,LEN=66.,HHT=1,HFF=1) TERM T.LQP1 WID=132.,LEN=66.,HHT=1,HFF=11) TERM T.LQP2 WID=132.,LEN=66.,HHT=1,HFF=114 TERM T.BMP1 WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=14 TERM T.V2XX WID=80.,LEN=24.,HHT=1,SCP=1,CUP=3,HSY=1) TERM T.LN03 WID=132.,LEN=66.,HHT=1,HFF=11 TERM T.DTC1 WID=132.,LEN=66.8) TERM T.L210 WID=132.,LEN=66.,HHT=1,HFF=1.) TERM T.LQP3 WID=132.,LEN=66.,HHT=1,HFF=11( TERM T.LA75 WID=80.,LEN=66.,HHT=1,HFF=1( TERM T.L2XX WID=80.,LEN=66.,HHT=1,HFF=1 ETERM T.V100 ANI=1,DEC=1,AVO=1  ETERM T.V101 ANI=1,DEC=11%00yytbl ETERM T.V102 ANI=1,DEC=1,AVO=1,EDT=1H ETERM T.V105 ANI=1,DEC=1D% ETERM T.V125 ANI=1,DEC=1,AVO=1,RGS=11+ ETERM T.V131 ANI=1,DEC=1,AVO=1,EDT=1,BLK=1R+ ETERM T.V132 ANI=1,DEC=1,AVO=1,EDT=1,BLK=1Y% ETERM T.BMP1 ANI=1,DEC=1,AVO=1,EDT=1,+ ETERM T.V2XX ANI=1,DEC=1,AVO=1,EDT=1,SFC=1  .ENDC ;T$$GMC!T$$SMC!T$$CUP .;T .EVEN;W;1>; TABLE OF POINTERS TO DISPATCH TABLES IN CONTROLLER-DEPENDENT4; MODULES. INDEX = CONTROLLER TYPE CODED AS FOLLOWS: ; 0 = DL-11E ; 2 = DZ-11E ; 4 = DH-11N ; 6 = DJ-11E; 10 = DM-11BB=!; 12 = CT VIDEO CONTROL TASK,; 14 = DHV-11; 16 = LAT Port; 20 = USER PORT STUB;,3 .IIF DF R$$CON CTBL:: .IRP X,= 4 .IIF NDF R$$CON CTBL:: .IRP X, .IF IDN X,LH  .IF DF T$$LTH N4 .IIF NDF R$$CON .ERROR ;LAT Support requires R$$CONN .IIF NDF T$$GMC .IIF NDF T$$SMC .ERROR ;LAT Support requires T$$GMC or T$$SMC .WORD $LHTBLC .PSECT CTBL!$LHTBL:.WORD LHSTAX ;START OUTPUT  .WORD LHABOX ;ABORT OUTPUT  .WORD LHRESX ;RESUME OUTPUT .WORD LHSTOX ;STOP OUTPUT .WORD LHMTIM ;MODEM TIMER" .WORD LHCPUP ;CONTROLLER POWER-UP .WORD LHUPUP ;UNIT POWER-UP .WORD LHCONL ;CONTROLLER ONLINE! .WORD LHCOFF ;CONTROLLER OFFLINEX .WORD LHUONL ;UNIT ONLINE .WORD LHUOFF ;UNIT OFFLINE& .WORD LHLPAR ;GET/SET LINE PARAMETERS .PSECT MAP5 .IFF ; L$$LTH .WORD 0 .ENDC ; L$$LTH  .ENDC ; IDN X,LHe .IF IDN X,USC .IF DF T$$USP .< .IIF NDF R$$CON .ERROR ;USER SUPPLIED PORTS REQUIRES R$$CON .WORD $USTBL .PSECT CTBL"$USTBL: .WORD USSTAX ;START OUTPUT .WORD USABOX ;ABORT OUTPUTT .WORD USRESX ;RESUME OUTPUT .WORD USSTOX ;STOP OUTPUT .WORD USMTIM ;MODEM TIMER" .WORD USCPUP ;CONTROLLER POWER-UP .WORD USUPUP ;UNIT POWER-UP .WORD USCONL ;CONTROLLER ONLINE! .WORD USCOFF ;CONTROLLER OFFLINET .WORD USUONL ;UNIT ONLINE .WORD USUOFF ;UNIT OFFLINE& .WORD USLPAR ;GET/SET LINE PARAMETERS .PSECT MAP5 .IFF ; T$$USP .WORD 0D .ENDC ; T$$USPU .ENDC ; IDN X,USR .IF DIF X,LH .IF DIF X,US. .IF DF D$$'X'11 .WORD $Y'X'TBLR .PSECT CTBL%$Y'X'TBL:.WORD Y'X'STAX ;START OUTPUT  .WORD Y'X'ABOX ;ABORT OUTPUTS .WORD Y'X'RESX ;RESUME OUTPUT .WORD Y'X'STOX ;STOP OUTPUT .IF NDF R$$COND .WORD Y'X'PWUP ;POWER-UPD .IFTF ;NDF R$$CON .WORD Y'X'MTIM ;MODEM TIMER .IFF ;NDF R$$CONN$ .WORD Y'X'CPUP ;CONTROLLER POWER-UP .WORD Y'X'UPUP ;UNIT POWER-UP" .WORD Y'X'CONL ;CONTROLLER ONLINE# .WORD Y'X'COFF ;CONTROLLER OFFLINEU .WORD Y'X'UONL ;UNIT ONLINE .WORD Y'X'UOFF ;UNIT OFFLINEF .ENDC ;NDF R$$CON# .IF DF T$$GMC!T$$SMC!D$$M11!D$$ZMDY( .WORD Y'X'LPAR ;GET/SET LINE PARAMETERS# .ENDC ;T$$GMC!T$$SMC!D$$M11!D$$ZMDP .PSECT MAP5 .IFFO .WORD 0 .ENDC .ENDC ; DIF X,USD .ENDC ; DIF X,LHD;. .ENDR;$;N@; TABLE OF POINTERS TO FORK LEVEL ROUTINES. THE ORDER OF ENTRIESA; IN THIS TABLE MUST MATCH THE BIT POSITIONS OF THE CORRESPONDINGD2; BITS IN THE FORK REQUEST BYTE U.TFRQ IN THE UCB.;E)FRKTB:: .WORD FPIRD ;FR.IRD - INPUT DONE.# .WORD FPORD ;FR.ORD - OUTPUT DONEC2 .WORD FPSUI ;FR.SUI - START OF UNSOLICITED INPUT  .IF DF T$$CCA T1 .WORD FPAST ;FR.AST - CHARACTER THAT CAUSES AST1 $ .ENDC ;T$$CCA 5 .IF DF M$$PRO .WORD FPTIM ;FR.TIM - TIME-OUT D .ENDC ;M$$PRO N .IF DF T$$SPC/ .WORD FPKIL ;FR.KIL - SEND KILL PACKET TO CLIF .ENDC ;T$$SPC .IF DF T$$OOB7 .WORD FPOOB ;FR.OOB - CHECK FOR OUT-OF-BAND CHARACTER  .ENDC ;T$$OOB .IF DF T$$ICS. .WORD FPICS ;FR.ICS - SEND TSA EVENT PACKET  .ENDC ;T$$ICS .IF DF T$$SCA+ .WORD FPSCA ;FR.SCA - SEND AST TO TSA... L .ENDC ; T$$SCA5 .WORD FPGRQ ;FR.GRQ - GET REQUEST PACKET FROM QUEUET .IF DF T$$LTH+ .WORD FPLAT ;FR.LAT - LAT Port processingO .ENDC ; T$$LTH / .WORD FPPFP ;FR.PFP - POST-FORK PROCESSING OF! ;CHARACTER IN U.TECB (U.TECO) ;K;T$; I/O FUNCTION CODE DISPATCH TABLES.H; VERIFY THAT THE TABLE MATCHES THE NUMERIC VALUES OF I/O FUNCTION CODES; ASSUME IO.WLB/400,1 ASSUME IO.RLB/400,2 ASSUME IO.ATT/400,3 A00yxtkTADATADATADATADATADATASSUME IO.DET/400,4 ASSUME IO.GTS/400,5 ASSUME SF.SMC/400,5 ASSUME SF.GMC/400,5 ASSUME IO.HNG/400,6 .IF DF T$$RPR ASSUME IO.RPR/400,11T .ENDC ASSUME IO.RTT/400,12. .IF DF B$$MAP) ASSUME IO.WSD/400,13 ;WRITE SPECIAL DATAF( ASSUME IO.RSD/400,14 ;READ SPECIAL DATA .ENDC ;B$$MAP .IF DF T$$LTH ASSUME IO.ORG/400,33T .ENDC ;T$$LTH .IF DF T$$EIO* ASSUME IO.EIO/400,37 ;EXTENDED READ/WRITE .ENDC ;T$$EIO;0?; DISPATCH TABLE FOR PROCESSING DIFFERENT FUNCTION CODES BEFORE0%; ENTERING A PACKET IN THE I/O QUEUE.C;0QPDSP::M .IF DF R$$IIC .WORD QPKIL ;IO.KIL. .ENDC ;R$$IIC .WORD QPWLB ;IO.WLB. .WORD QPRLB ;IO.RLB4 .WORD QPATT ;IO.ATTP .WORD QPDET ;IO.DET1 W .IF DF T$$GTS!T$$GMC!T$$SMC D! .WORD QPSPC ;SPECIAL FUNCTIONS:C ; IO.GTS ; SF.SMC ; SF.GMC .IFFT .WORD 0 L .ENDC F .WORD QPHNG ;IO.HNGO/ .WORD 0 ;RESERVED EXEC CLOSE-OUT-LUN FUNCTIONO- .WORD 0 ;RESERVED FOR USER MODE DIAGNOSTICSN .IF DF T$$RPR .WORD QPRPR ;IO.RPRE .IFFI .WORD 0 .ENDC .WORD QPRTT ;IO.RTT  .IF DF B$$MAP .WORD QPWSD ;IO.WSDO .WORD QPRSD ;IO.RSD  .ENDC ;B$$MAP .IF DF T$$LTH .IF NDF B$$MAPT .BLKW 2 .ENDC ;NDF B$$MAP" .BLKW --1 .WORD QPORG .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF T$$LTHD .IF NDF B$$MAP .BLKW 2 .ENDC ;NDF B$$MAP .BLKW - .ENDC ;NDF T$$LTH" .BLKW --1 .WORD QPEIO ;IO.EIOR .ENDC ;T$$EIO;.;D>; DISPATCH TABLE FOR PROCESSING DIFFERENT FUNCTION CODES AFTER/; A PACKET HAS BEEN DEQUEUED FROM THE I/O QUEUEN;; .IF DF T$$OVLD; NOTE: THE ROUTINES THAT ARE IN TTEXT ARE REPRESENTED WITH THE HIGH ; BIT CLEAR.'PPDSP:: .WORD !100000 ;IO.WLB; .WORD !100000 ;IO.RLBN .WORD &77777 ;IO.ATT .WORD &77777 ;IO.DET .IF DF T$$SMC .WORD &77777 ;SF.SMCH .IFFW .WORD 0 .ENDC .WORD &77777 ;IO.HNG." .WORD 0 ;RESERVED EXEC FUNCTION! .WORD 0 ;USER MODE DIAGNOSTICSC .IF DF T$$RPR .WORD !100000 ;IO.RPRH .IFFU .WORD 0 .ENDC .WORD !100000 ;IO.RTTN E .IF DF B$$MAP  .WORD !100000 ;IO.WSD .WORD !100000 ;IO.RSD 0 .ENDC ;B$$MAP P / .IF DF T$$LTH .IF NDF B$$MAP> .BLKW 2 .ENDC ;NDF B$$MAP" .BLKW --1" .WORD &77777 ;ORIGINATE .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF T$$LTH  .IF NDF B$$MAP  .BLKW 2 .ENDC ;NDF B$$MAP .BLKW - .ENDC ;NDF T$$LTH" .BLKW --1 .WORD !100000 ;IO.EIO  .ENDC ;T$$EIO .IF DF T$$LTH" .WORD &77777 ;ORIGINATE .ENDC ;T$$LTH C .IF DF T$$EIO /  .IF NDF B$$MAP  .BLKW 2 .  .ENDC ;NDF B$$MAP G .% .BLKW --1 O" .WORD !100000 ;IO.EIO   .ENDC ;T$$EIO .IFF ;T$$OVL$PPDSP:: .WORD PPWLB ;IO.WLB .WORD PPRLB ;IO.RLBG .WORD PPATT ;IO.ATT. .WORD PPDET ;IO.DETL < .IF DF T$$SMC / .WORD PPSPC ;SF.SMC/ .IFF  .WORD 0 N .ENDC .WORD PPHNG ;IO.HNG.! .WORD 0 ;RESERVED EXEC FUNCTION .WORD 0 ;USER MODE DIAGNOSTICS .IF DF T$$RPR .WORD PPRPR ;IO.RPR  .IFF. .WORD 0 .ENDC .WORD PPRLB ;IO.RTT .IF DF B$$MAP .WORD PPWSD ;IO.WSD1 .WORD PPRSD ;IO.RSD1 .ENDC ;B$$MAP .IF DF T$$LTH .IF NDF B$$MAP$ .BLKW 2 .ENDC ;B$$MAP" .BLKW --1 .WORD PPORG ;ORIGINATET .ENDC ;T$$LTH .IF DF T$$EIO .IF NDF T$$LTHM .IF NDF B$$MAPO .BLKW 2 .ENDC ;NDF B$$MAP .BLKW - .ENDC ;T$$LTH" .BLKW --1 .WORD PPEIO ;IO.EIO. .ENDC ;T$$EIO D .ENDC ;T$$OVL;O; LH port dispatch table:D;$ .IF DF T$$LTH'LHDSP:: .WORD $LHSTS00yytbl ; Start session0 .WORD $LHINP ; Receive data from LAT process+ .WORD $LHOUT ; Send data to LAT processO .WORD $LHSTP ; Stop sessionD$ .WORD $LHGTD ; GET TRANSMIT DATA$ .WORD $LHTMO ; SOLICIT TIMED OUT .ENDC ;T$$LTH;O;0; DISPATCH TABLE FOR INPUT CHARACTER PROCESSING.5; THIS TABLE IS CONSULTED EACH TIME ECHO DONE OCCURS.0@; THE TABLE CONTAINS POINTERS TO ROUTINES IN THE MODULE "ICHAR".F; INDEX = INPUT LOGIC STATE VARIABLE (U.TISV IN UCBX) MULTIPLIED BY 2.;:*ISDSP:: .WORD CFGRQ ;NOTHING MORE TO ECHO N .IF DF T$$CTR SV.CR1==<.-ISDSP>/2O' .WORD I2CTR1 ;USED FOR CTRL-R ECHOING' .WORD I2CTR2 ;USED FOR CTRL-R ECHOING$ .IF DF R$$MPL!A$$CLIA' .WORD I2CTR3 ;USED FOR CTRL-R ECHOING. .ENDC' .WORD I2CTR4 ;USED FOR CTRL-R ECHOINGA' .WORD I2CTR5 ;USED FOR CTRL-R ECHOINGE A .ENDC OSV.CU1==<.-ISDSP>/2 ' .WORD I2CTU1 ;USED FOR CTRL-U ECHOINGE' .WORD I2CTU2 ;USED FOR CTRL-U ECHOINGT .IF DF R$$MPL!A$$CLIC' .WORD I2CTU3 ;USED FOR CTRL-U ECHOINGR .ENDC' .WORD I2CTU4 ;USED FOR CTRL-U ECHOINGC;=;I1; DISPATCH TABLE FOR OUTPUT CHARACTER PROCESSING.D; THIS TABLE IS CONSULTED EACH TIME AN OUTPUT CHARACTER IS EXPANDED.A; THE TABLE CONTAINS POINTERS TO ROUTINES IN THE MODULE "EXPCHR". ;; INDEX = BITS 8 AND 9 IN U.TSTA+2 IN UCBX MULTIPLIED BY 2.C; (BIT COMBINATION 11 UNUSED).;I"OSDSP:: .WORD EXPC0 ;DEFAULT CASE# .WORD EXPC1 ;USED FOR WRAP-AROUNDF# .WORD EXPC2 ;USED FOR WRAP-AROUNDA;L; . .IF NDF T$$ONIF,; NOTE THIS DATA IS DUPLICATED IN TTATT !!!!;D .IF DF T$$GMC!T$$SMC= I; @; TABLE OF CHARACTERISTIC CODES FOR GET MULTIPLE CHARACTERISTICSG; FUNCTION (SF.GMC) AND SET MULTIPLE CHARACTERISTICS FUNCTION (SF.SMC).S;I7; EACH RECOGNIZED CODE HAS A 1-WORD ENTRY IN THE TABLE.S*; THIS WORD CONTAINS ONE OF THE FOLLOWING:;(; 1. IF THE WORD NOT = 0 AND BIT 15 = 0:;; LOW BYTE = A BITMASK THAT MAPS THE DESIRED CHARACTERISTICO7; VALUE IN THE PROPER BYTE IN THE UCB. BITS ARE SET FOR ; RELEVANT BITS IN THE UCB BYTE.6; HIGH BYTE = OFFSET FROM START OF THE UCB TO THE BYTE+; THAT CONTAINS THE DESIRED CHARACTERISTIC.O;E; 2. IF BIT 15 = 1:S6; THE WORD IS THE ADDRESS OF A SUBROUTINE THAT HANDLES!; THIS PARTICULAR CHARACTERISTIC.R=; (ALL VIRTUAL ADDRESSES IN THE DRIVER ARE 120000 OR HIGHER).O;I; 3. IF THE WHOLE WORD = 0:<; THIS CHARACTERISTIC IS NOT RECOGNIZED BY SF.GMC OR SF.SMC.;T; (; DEFINE MACRO TO GENERATE TABLE ENTRIES;T .MACRO MCGEN NAME,OFS,BMB .IF LE NAME-MCHI  .=MCTAB+<2*>B .IF NB BM .IF LE BM-377 .BYTE BM,OFST .IFFT .BYTE BM/400,OFS+1N .ENDC .IFFE .WORD OFS .ENDC .IFF. .ERROR ;ILLEGAL CHARACTERISTICH .ENDC .ENDM MCGEN; 4MCHI == TC.MAX-1 ;HIGHEST RECOGNIZED CHARACTERISTIC;VMCTAB:: .REPT MCHI+ .WORD 0 ;INITIALIZE WHOLE TABLE TO ZEROSI .ENDR* MCGEN TC.WID,U.CW4,377 ;NUMBER OF COLUMNS2 MCGEN TC.LPP,U.TLPP,377 ;NUMBER OF LINES PER PAGE O .IF DF D$$H11!D$$Z11!D$$V11 .# MCGEN TC.RSP,MCRSP ;RECEIVE SPEEDE$ MCGEN TC.XSP,MCXSP ;TRANSMIT SPEED4 MCGEN TC.PAR,MCPAR ;PARITY GENERATION AND CHECKING" MCGEN TC.EPA,MCEPA ;PARITY SENSE, MCGEN TC.CLN,MCCLN ;7-BIT CHARACTER LENGTH .IF DF T$$MOD" MCGEN TC.ASP,MCASP ;ANSWER SPEED5 MCGEN TC.ABD,U.TSTA+6,S4.ABD ;AUTO-BAUD SPEED DETECTI .ENDC ;T$$MOD I .ENDC ;D$$H11!D$$Z11!D$$V11 0 MCGEN TC.ISL,U.UNIT,377 ;SUB-LINE ON CONTROLLER# MCGEN TC.TTP,MCTTP ;TERMINAL TYPEE! MCGEN TC.SCP,U.CW2,U2.CRT ;SCOPE$: MCGEN TC.HFL,U.TSTA+6,S4.HFL ;HORIZONTAL FILL REQUIREMENT8 MCGEN TC.VFL,U.TSTA+6,S4.VFL ;VERTICAL FILL REQUIREMENT1 MCGEN TC.HFF,U.TSTA+6,S4.HFF ;HARDWARE FORM-FEEDS+ MCGEN TC.HHT,U.TSTA+6,S4.HHT ;HARDWARE TABE< MCGEN TC.ACR,U.TSTA+4,S3.ACR ;AUTOMATIC CR-LF ON LONG LINES+ MCGEN TC.PPT,U.TSTA+4,S3.PPT ;PRINTER-PORTD3 MCGEN TC.SMR,U.CW2,U2.LWC ;LOWERCASE INPUT ENABLED! .IF DF T$$ESC7 MCGEN TC.ESQ,U.CW2,U2.ESC ;ESCAPE SEQUENCES RECOGNIZEDC  .ENDC ;T$$ESC .IF DF T$$MOD ," MCGEN TC.DLU,MCRMT ;DIAL-UP LINE S .ENDC Z, MCGEN TC.HLD,U.CW2,U2.HLD ;HOLD-SCR00zxtkTADATADATADATADATADATAEEN MODE& MCGEN TC.NEC,U.TSTA+4,S3.NEC ;NO-ECHO+ MCGEN TC.SLV,U.CW2,U2.SLV ;SLAVED TERMINALS/ MCGEN TC.PRI,U.CW2,U2.PRV ;PRIVILEGED TERMINALM* MCGEN TC.FDX,U.TSTA+4,S3.FDX ;FULL DUPLEX; MCGEN TC.PTH,U.TSTA+4,S3.PTH ;PASS-THROUGH MODE IS ENABLED# MCGEN TC.BIN,MCBIN ;READ-PASS-ALL > MCGEN TC.8BC,U.TSTA+4,S3.8BC ;8 BIT CHARACTERS PASSED ON READ4 MCGEN TC.TBF,MCTBF ;TYPE-AHEAD BUFFER ACTIVE COUNT& MCGEN TC.CTS,MCCTS ;CONTROL-S STATUS3 MCGEN TC.HSY,MCHSY ;HOST/TERMINAL SYNCHRONIZATIONH' MCGEN TC.ANI,U.TSTA+6,S4.ANI ;ANSI CRTA- MCGEN TC.AVO,U.TSTA+6,S4.AVO ;ADVANCED VIDEO;) MCGEN TC.BLK,U.TSTA+6,S4.BLK ;BLOCK MODEV& MCGEN TC.DEC,U.TSTA+6,S4.DEC ;DEC CRT( MCGEN TC.EDT,U.TSTA+6,S4.EDT ;EDIT MODE$ MCGEN TC.RGS,U.TSTA+6,S4.RGS ;REGIS. MCGEN TC.SFC,U.TSTA+6,S4.SFC ;SOFT CHARACTERS;G .IF DF R$$MPL!A$$CLIB .IF DF C$$CTC5 MCGEN TC.TLC,U.TSTA+4,S3.CTC ;CONTROL-C NOTIFICATIONE .ENDC ;C$$CTC' MCGEN TC.NBR,U.MUP,UM.NBR ;NOBROADCASTN .ENDC ;R$$MPL!A$$CLII .IF DF T$$ACD4 MCGEN TC.ACD,MCACD ;ANCILLARY CONTROL DRIVER (ACD) .ENDC ;T$$ACD .IF DF T$$SPL% MCGEN TC.RAT,MCTYP ;READ-AHEAD TYPED+ MCGEN TC.TBS,MCTBS ;TYPEAHEAD BUFFER SIZEM .IFF ;T$$SPLA. MCGEN TC.RAT,U.TSTA+4,S3.TAB ;READ-AHEAD TYPE .ENDC ;T$$SPL .IF DF T$$SER? MCGEN TC.TBM,U.MUP,UM.SER ;TYPEAHEAD BUFFER MODE (TASK OR CLI) .ENDC ;T$$SER;4 .IF DF T$$OOB: MCGEN TC.OOB,MCOOB ;OUT-OF-BAND/HELLO/INCLUDE CHARACTERS .ENDC ;T$$OOB .IF DF T$$ICS1 MCGEN TC.ICS,MCICS ;NOTIFY OF CHANGE IN TABUF  ;(INPUT COUNT STATE)( .ENDC ;TT$ICS .IF DF T$$SCA/ MCGEN TC.SSC,MCSSC ;SPECIFY SWITCH CHARACTERS3 MCGEN TC.TMM,MCTMM ;EXIT TERMINAL MANAGEMENT MODE  .ENDC ;T$$SCA) MCGEN TC.TSY,MCTSY ;OUTPUT FLOW CONTROL& .IF DF T$$MHU ;MODEM HANG-UP NOTIFY8 MCGEN TC.MHU,MCMHU ;REQUEST MODEM HANG-UP NOTIFICATION .ENDC ;T$$MHU .IF DF T$$LTH&M$$NETMG MCGEN TC.QDP,MCQDP ;GET QUEUE DEPTH AND LAT CONNECT/DISCONNEDT STATUS) MCGEN TC.MAP,MCMAP ;SET UP LAT MAPPING F .ENDC ;T$$LTH&M$$NET .=MCTAB+<2*MCHI> ;END OF TABLE;;. D .ENDC ;T$$GMC!T$$SMC, S .ENDC ;NDF T$$ONI;A;R  .IF DF T$$MOD ;X5; DISPATCH TABLE FOR MODEM INTERRUPT SERVICE ROUTINE..4; INDEX = BITS 1 AND 2 IN U.STS (US.DSB AND US.CRW).;O5MDSP:: .WORD MODI4 ;ENABLED, NOT WAITING FOR CARRIER 0 .WORD MODI2 ;DISABLED, NOT WAITING FOR CARRIER+ .WORD MODI5 ;ENABLED, WAITING FOR CARRIERU, .WORD MODI3 ;DISABLED, WAITING FOR CARRIER N .ENDC ;T$$MOD; ;L; MISCELLANEOUS WORDS;;L .IF DF D$$V11!D$$H11<2YVXOFF::.WORD CH.CTS!100000 ;XOFF FOR DHU/DHV11/DH1YVXON:: .WORD CH.CTQ!100000 ;XON FOR DHU/DHV11/DH$ .ENDC ;D$$V11!D$$H11T .IF NDF T$$SPLR1$DALED::.BLKW 1 ;SAVED DRIVER MAPPING FOR KISAR6T .ENDC ;NDF T$$SPL .IF DF T$$OVL .PSECT MAP6<EXTMAP:: .BLKW 1 ;APR5 MAPPING OF TTDRV EXTENSION (OVERLAY)-ROTMAP:: .BLKW 1 ;APR5 MAPPING OF TTDRV ROOTO8TTEXT: .RAD50 /TTEXT / ;NAME OF COMMON TO MAP AS OVERLAY .PSECT MAP5 .ENDC ;T$$OVL&FREEB:: .WORD 0 ;FREE BUFFER LISTHEAD2DCB0:: .BLKW 1 ;POINTER TO DCB FOR FIRST TERMINAL% ;SET UP BY INITIALIZATION ROUTINEN.OPTIMR::.WORD OPTIME ;OUTPUT TIMEOUT INTERVAL;F;F $ .IF DF D$$H11!D$$V11  .IF DF M$$EXT G?; SAVED SETTINGS FOR UMR(S) TO MAP DRIVER WITH 18-BIT ADDRESSESA; IDENTICAL TO 16 BIT ADDRESSESP; UMR5S:: .BLKW 2 ;UMR 5A .IF NDF T$$SPL1 .BLKW 2 ;UMR 6 V .ENDC ;NDF T$$SPL .IFF ;M$$EXTO .IF DF D$$H11 EF; RELOCATION CONSTANT TO TRANSFORM A VIRTUAL ADDRESS WITHIN THE DRIVERA; TO A PHYSICAL ADDRESS. THIS RELOCATION IS REQUIRED ONLY FOR DMASE; CONTROLLERS (SUCH AS THE DH-11), AND ONLY IF EXTENDED MEMORY IS NOT D; PRESENT. THE FORMAT OF THE DOUBLE-WORD RELOCATION CONSTANT IS SUCHG; THAT WHEN IT IS ADDED TO A VIRTUAL ADDRESS IN THE RANGE 120000-157777AA; (CARRY IS ADDED TO BIT 4 OF THE HIGH ORDER WORD), THE RESULT IS$A; THE 18-BIT PHYSICAL ADDRESS (2 HIGH BITS IN BITS 4-5 OF RELC+0,; 16 LOW BITS IN RELC+2).O;IG; THE RELOCATION CONSTANT IS CALCULATED 00 zytblAND STORED HERE BY THE POWER-UPI; CODE.S;TH; IF EXTENDED MEMORY IS PRESENT, THE POWER-UP CODE HAS MAPPED THE DRIVERA; IN UMR'S 5 AND 6, WHICH MEANS THAT DRIVER VIRTUAL ADDRESSES AREE&; IDENTICAL WITH THE 18-BIT ADDRESSES.; RELC:: .BLKW 2 .ENDC ;D$$H11 D .ENDC ;M$$EXT 2 .ENDC ;D$$H11!D$$V11I D .IF DF D$$V11L; DHV11 RELOCATION CONSTANT TO TRANSFORM A VIRTUAL ADDRESS WITHIN THE DRIVERK; TO A PHYSICAL ADDRESS. THE FORMAT OF THE DOUBLE-WORD RELOCATION CONSTANTNO; IS SUCH THAT WHEN IT IS ADDED TO A VIRTUAL ADDRESS IN THE RANGE 120000-157777 3; THE RESULT IS THE 18-BIT/22-BIT PHYSICAL ADDRESS.R;RRELCV:: .BLKW 2D .IF DF K$$DAS6 .BLKW 2 ;ANOTHER CONSTANT TO MAP D-SPACE POOL REGION .ENDC ;K$$DAS .ENDC ;D$$V11 . .IF DF T$$CUP .F; TABLE OF POINTERS TO ROUTINES TO EXPAND A CURSOR POSITIONING COMMAND<; INTO A CHARACTER STRING APPROPRIATE FOR THE TERMINAL TYPE.G; INDEX INTO THIS TABLE = 2*X-2, WHERE X = THE VALUE IN BITS 6-7 OF THEN2; TABLE "TTYP1" (SEE ABOVE) FOR THE TERMINAL TYPE.;L$CPOST:: .WORD CPOS1 ;1 - VT05 STYLE .WORD CPOS2 ;2 - VT52 STYLEI .WORD CPOS3 ;3 - VT100 STYLE;B; H; NOTE - THE LOCATIONS EXPCP, CP0, CP1, CP2 AND CP3 BELOW ARE READ/WRITE ; LOCATIONS!@; THIS IS SAFE SINCE THEY ARE ONLY USED BY THE SYSTEM STATE CODE3; IN MODULE "TTRW" - NEVER BY INTERRUPT LEVEL CODE.A;C; POINTER TO ROUTINE TO EXPAND 1 CHARACTER ON OUTPUT, OR TO ROUTINE *; THAT EXPANDS CURSOR POSITIONING COMMAND.; EXPCP:: .WORD EXPC3A; 7; TERMINAL-DEPENDENT CURSOR POSITIONING COMMAND STRINGSW; 2; TYPE 2 - VT52. MUST BE LOCATED ON WORD BOUNDARY!;CP2:: .BYTE CH.ESC,'H,CH.ESC,'JB .BYTE CH.ESC,'Y,0,0;O; TYPE 1 - VT051;P3CP1:: .BYTE 35,0,0,0,0 ;4 FILLERS AFTER HOME CURSORI/ .BYTE 37,0,0,0,0 ;4 FILLERS AFTER ERASE-TO-EOST3 .BYTE 16,0,0,0,0,0,0 ;4 FILLERS AFTER Y-COORDINATE ;E; TYPE 3 - VT100;RCP3:: .BYTE CH.ESC,'[,'2,'JO .BYTE CH.ESC,'[,0,0,0,';,0,0,0ECP3A:: .BYTE 'HI .EVEN M .ENDC ;T$$CUP W .IF DF D$$M11&R$$MPL&T$$COM E#YMCP1:: .BLKW 1 ;POINTER TO $YMCTBW  .ENDC ;D$$M11&R$$MPL&T$$COM D .IF NDF R$$MPL!  P; ;TABLE OF POINTERS TO UCB TABLES;.TTUCB:: .IRP X, .IF DF D$$'X'11 .WORD D'X'UCB .IFFF .WORD 0 .ENDC .ENDR ,;,; DL-11 DATABASESE;E - .IF DF D$$L11.DLUCB:: ;DL UCB POINTER TABLE POINTER TABLEN=03 .REPT D$$L11P .WORD DLUC0+NN=N+4' .ENDR'DLUC0: .BLKW D$$L11*2 ;DL UCB/CSR TABLEE I .ENDC ; DF D$$L11;C; DH-11 DATABASESM;R .IF DF D$$H11+DMUCB:: ;POINT DM11-BB UCB'S TO DH UCB'SN.DHUCB:: ;DH UCB POINTER TABLE POINTER TABLEN=0P .REPT D$$H11  .IF DF D$$M11+ .WORD DHUC0+N+2 ;POINTER TO DH11 UCB TABLEDN=N+38.1 .IFFD* .WORD DHUC0+N ;POINTER TO DH11 UCB TABLEN=N+36.1 .IFTF .ENDRDHUC0: ;DH UCB TABLES .REPT D$$H11T .IFTP .BLKW 1 ;DM11-BB CSR ADDRESS .ENDC .BLKW 1 ;DH11 CSR ADDRESS. .REPT 16.2 .WORD 0 ;ADDR OF UCB FOR LINE (PLUGGED AT TTPWF) .ENDR .WORD -1 ;END OF UCB LIST1 .ENDR .ENDC ; DF D$$H11 ';O; DZ-11 DATABASES ;; .IF DF D$$Z11.DZUCB:: ;DZ UCB POINTER TABLE POINTER TABLEN=01 .REPT D$$Z1106 .WORD DZUC0+N ;POINTER TO DZ11 UCB TABLE (INDEXED BY ; CONTROLLER NUMBER)N=N+20.T .ENDRDZUC0: ;REF LABEL .REPT D$$Z11D .BLKW 1 ;DZ CSR ADDRESST .REPT 8.% .WORD 0 ;UCB ADDRESS FOR EACH LINE N .ENDR .WORD -1 ;END OF UCB LIST. .ENDR . .ENDC ; DF D$$Z11 R;N; DJ-11 DATABASES);. .IF DF D$$J11.DJUCB:: ;DJ UCB POINTER TABLE POINTER TABLEN=0 .REPT D$$J11 * .WORD DJUC0+N ;POINTER TO DJ11 UCB TABLEN=N+36.T .ENDRDJUC0: ;REF LABEL .REPT D$$J11D .BLKW 1 ;DJ CSR ADDRESSU .REPT 16. .WORD 0 ;ADDRESS OF LINE'S UCB .ENDR .WORD -1 ;END OF UCB LISTL .ENDR .ENDC ; DF D$$J11 ; ; DHV-11 DATABASES; .IF DF D$$V11DVUCB:: ;REF LABEL.N=0 .REPT D$$V11 + .WORD DVUC0+N ;POINTER TO DHV11 UCB TABLEN=N+36.  .ENDRDVUC0: ;REF LABEL .REPT D$$V11  .00zxtkTADATADATADATADATADATABLKW 1 ;DHV CSR ADDRESS .REPT 16.$ .WORD 0 ;UCB ADDRESS FOR EACH LINE .ENDR .WORD -1 ;END OF UCB LISTT .ENDR .ENDC ; DF D$$V11 .ENDC ;NDF R$$MPL.PAGE1 .IF DF B$$MAP;E"; CT VIDEO TASK INTERFACE DATABASE;B&TFWPAR::.RAD50 /TFWCOM/ ;TFWCOM'S NAME*VT.NAM::.RAD50 /TFW.../ ;VIDEO TASK'S NAME-DTYPE:: .BLKW 1 ;TEMPORARY DATA TYPE STORAGE;8CTEX:: .RAD50 /C$CTEX/ ;TASK NAME OF THE CTEX DISPATCHER'IDOFLG::.WORD 0 ;FLAG FOR INTERRUPT-DO&STIMER::.WORD 1 ;SCREEN TIMER COUNTER;WJ; THIS IS THE TABLE OF ADDRESSES FOR THE SPECIAL DATA "TYPEAHEAD" BUFFERS.;K; BECAUSE OF THE WAY THAT THIS IS BEING DONE THERE CAN ONLY BE ONE TERMINALMH; THAT SUPPORTS IO.RSD. FOR THE PRO ENVIRONMENT THIS IS NOT A PROBLEM. ;>T.RSDT::.WORD 0 ;THIS IS NOT A SUPPORTED DATA TYPE FOR IO.RSD$ .WORD GIDIS ;BUFFER FOR GIDIS DATA<T.RSDN==<<.-T.RSDT>/2>-1 ;HIGHEST LEGAL DATA TYPE FOR IO.RSD;E!; TYPEAHEAD BUFFER FOR GIDIS DATA;;G"GIDIS: .BYTE 0 ;INSERTION POINTER .BYTE 0 ;RETRIEVAL POINTER .BYTE 0 ;ACTIVE COUNTE .BYTE T$$BFL-4 ;BUFFER LENGTH .BLKB T$$BFL-4 ;DATAEH; THIS PSECT IS USED TO FORCE ALIGNMENT OF TFWCOM ON A 32 WORD BOUNDARY.E; IT WILL COLLATE BEFORE $$$$$$ AND ITS SIZE IS SET IN THE BUILD FILE .PSECT $$$$$A4; THIS PSECT IS USED TO DEFINE THE LENGTH OF TFWCOM.; IT WILL COLLATE AFTER $$$$$$ .PSECT $$$$$.#TFWEND == . ;ADDRESS END OF TFWCOMO .ENDC ;B$$MAP .PSECT $$$$$$,OVR .IF DF B$$MAP+TFWCOM:: ;THIS IS THE START OF THE TFWCOMI" ;A PARTITION WILL OVERMAP THIS% ;SECTION OF DATA. THAT PARTITIONL* ;IS USED BY TFW... TO GET AT THIS DATA7VT.ADR::.WORD TFWCOM ;THE VIRTUAL ADDRESS OF THE STARTL& ;OF TFWCOM FROM THE DRIVER'S POINT ;OF VIEW0VT.APR::.BLKW 1 ;THE PHYSICAL ADDRESS OF TFWCOMLVT.LEN::.WORD </64.> ;LENGTH OF THE COMMON IN 32. WORD BLOCKS*VT.TCB::.BLKW 1 ;VIDEO TASK'S TCB ADDRESS*T.FLAG::.WORD 0 ;FLAG WORD FOR VIDEO TASK;D; FLAG WORD BIT DEFINITIONSI;HTF.INT == 1 ;INIT VIDEO TASKR"TF.ABO == 2 ;ABORT CURRENT OUTPUT$TF.SPN == 4 ;SUSPEND CURRENT OUTPUTTF.BTM == 10 ;BLINK TIMEOUTTF.CTM == 20 ;CURSOR TIMEOUTT#TF.STM == 40 ;SCREEN BLANK TIMEOUT ,TF.PRT == 400 ;PRINT SCREEN FLAG FOR TFW.../TF.SON == 1000 ;TURN SCREEN ON FLAG FOR TFW...C%CT$TIC == 1 ;TICK COUNT FOR CT TIMERL>I$MAX == T$$BFL-4 ;MAXIMUM NUMBER OF CHARS IN THE INPUT BUFFER;S;; INTERNAL BUFFER FORMAT - ALSO USED FOR TFW OUTPUT BUFFERSD; %OB.LNK == 0 ;LINK TO THE NEXT BUFFER=OB.LEN == 2 ;DATA LENGTH (=N)<OB.TYP == 3 ;DATA TYPE (SEE THE DATA PATH SPECIFIER VALUES)OB.DAT == 4 ;DATA (N BYTES);F ; INPUT BUFFER FORMAT (FROM TFW);=<IB.TYP == 0 ;DATA TYPE (SEE THE DATA PATH SPECIFIER VALUES)IB.LEN == 1 ;DATA LENGTH (=N)'IB.SPI == 2 ;TYPE SPECIFIC INFORMATION IB.DAT == 4 ;DATA (N BYTES); ; MORE INTERFACE DATA FOR TFWC;ST.BTMR::.WORD 0 ;BLINK TIMERET.CTMR::.WORD 0 ;CURSOR TIMER$T.STMR::.WORD 0 ;SCREEN BLANK TIMER$T.OPKP::.WORD 0 ;OUTPUT BUFFER LIST,T.OREM::.WORD 0 ;COUNT OF OUTPUT CHARACTERS@T.OPKC::.WORD 0 ;COUNT OF BYTES PROCESSED IN CURRENT OUTPUT PKT;; INPUT BUFFER (FROM TFW) ;O T.INBF::.BYTE 0 ;DATA STREAM ID .BYTE 0 ;DATA COUNTE$ .WORD 0 ;TYPE SPECIFIC INFORMATION$ .BLKW I$MAX/2 ;THEN COMES THE DATA;M&; INTERMEDIATE INPUT AND OUTPUT BUFFER;; BYTE CONTENTS -; ------------------------------------T@; 0-1 LINK TO NEXT BUFFER (0 IF THIS IS LAST).; 2 LOGICAL BUFFER LENGTH"; 3 DATA TYPE; 4-47 DATAS;OC; THE FOLLOWING BUFFER IS USED WHEN THE OUTPUT BUFFER IS NOT IN THEC; NORMAL BUFFER CHAIN FORMAT. THIS OCCURS WHEN ECHOING IS DONE ANDT>; WHEN THE TERMINAL DRIVER PUTS SOMETHING SPECIAL OUT, SUCH AS; PROMPT STRINGS.E;P2T.TBUF::.WORD 0 ;ZERO LINK WORD - ONLY ONE BUFFER .BLKB 1 ;BUFFER LENGTH .BYTE 0 ;DATA TYPE 0 = TEXT1 .BLKB T$$BFL-4 ;DATAX;F?; DEFINE OFFSETS FOR THE LOCATIONS IN TFWCOM FOR THE VIDEO TAS00zytblKE;H9VT$ADR == VT.ADR-TFWCOM ;THE VIRTUAL ADDRESS OF THE START & ;OF TFWCOM FROM THE DRIVER'S POINT ;OF VIEW7VT$APR == VT.APR-TFWCOM ;THE PHYSICAL ADDRESS OF TFWCOM @VT$LEN == VT.LEN-TFWCOM ;LENGTH OF THE COMMON IN 32. WORD BLOCKS1T$FTCB == VT.TCB-TFWCOM ;VIDEO TASK'S TCB ADDRESSN1T$FLAG == T.FLAG-TFWCOM ;FLAG WORD FOR VIDEO TASK $T$BTMR == T.BTMR-TFWCOM ;BLINK TIMER%T$CTMR == T.CTMR-TFWCOM ;CURSOR TIMERT+T$STMR == T.STMR-TFWCOM ;SCREEN BLANK TIMERE+T$OPKP == T.OPKP-TFWCOM ;OUTPUT BUFFER LIST3T$OREM == T.OREM-TFWCOM ;COUNT OF OUTPUT CHARACTERS GT$OPKC == T.OPKC-TFWCOM ;COUNT OF BYTES PROCESSED IN CURRENT OUTPUT PKTT.T$INBF == T.INBF-TFWCOM ;CIRCULAR INPUT BUFFER .ENDC ;B$$MAP.PAGET;+ ; DRIVER INITIALIZATION ROUTINE.;B3; THIS CODE IS EXECUTED ONCE ONLY AT THE FIRST CALL=); TO THE DRIVER AFTER IT HAS BEEN LOADED.#; IT SERVES THE FOLLOWING PURPOSES:2; 1. ESTABLISH THE MAPPING OF THE DRIVER DATA AREA:; AND SAVE THE APR VALUES IN SAVE LOCATIONS SO THEY CAN5; BE QUICKLY LOADED WHENEVER THE DRIVER IS CALLED.U9; 2. SAVE KINAR5 IN THE TT-DRIVER FORK BLOCK (FORK BLOCKSR!; IF MULTI-PROCESSOR SYSTEM).N6; 3. CALCULATE AND SAVE UMR'S 5 AND 6 VALUES (IF DH-11$; AND EXTENDED MEMORY SUPPORTED).=; 4. CALCULATE AND SAVE A CONSTANT USED TO TRANSFORM A DRIVERR:; VIRTUAL ADDRESS INTO A PHYSICAL ADDRESS (IF DH-11 BUT$; NOT EXTENDED MEMORY SUPPORTED).4; 5. INITIALIZE AND QUEUE THE TT-DRIVER CLOCK BLOCK.6; 6. SAVE A POINTER TO THE FIRST TT DCB IN THE SYSTEM.E; 7. CONSTRUCT THE LIST OF FREE BUFFERS IN THE TT-DRIVER BUFFER POOL. ; ?; IN A SYSTEM THAT SUPPORTS SEPARATE KERNEL DATA SPACE MAPPING,E2; THIS MODULE RESIDES IN THE COMMON BLOCK "TTCOM".9; WHEN "INIT" IS CALLED IN SUCH A SYSTEM, THE MAPPING IS:A!; INSTR. SPACE APR 5: DRIVER CODES<; INSTR. SPACE APR 6: DRIVER DATA AND INITIALIZATION ROUTINE; (FIRST 4 KW OF TTCOM); DATA SPACE APR 5: DRIVER CODEI; DATA SPACE APR 6: UNDEFINEDLD; ON RETURN FROM "INIT", THE MAPPING IS THE "NORMAL" DRIVER MAPPING, ; WHICH IS:T); INSTR. SPACE APR 5: DRIVER CODE (TTDRV)F); DATA SPACE APR 5-6: DRIVER DATA (TTCOM) ;AG; IN A SYSTEM THAT DOES NOT SUPPORT SEPARATE KERNEL DATA SPACE MAPPING,CG; THIS MODULE RESIDES TOGETHER WITH ALL OTHER CODE AND DATA IN "TTDRV". A; THE COMMON BLOCK "TTCOM" DOES NOT EXIST. IN SUCH A SYSTEM, WHEN #; "INIT" IS CALLED, THE MAPPING IS:S*; INSTR. AND DATA SPACE APR 5: DRIVER CODEB; ON RETURN, THE MAPPING IS THE "NORMAL" DRIVER MAPPING, WHICH IS:4; INSTR. SPACE APR 5-6: DRIVER CODE AND DATA (TTDRV); H; FROM THE DESCRIPTION ABOVE, IT FOLLOWS THAT THE INITIALIZATION ROUTINEF; MAY BE MAPPED EITHER IN APR 5 (NON-D-SPACE SYSTEM) OR APR 6 (D-SPACEK; SYSTEM) WHEN CALLED. IT MUST THEREFORE BE WRITTEN IN POSITION-INDEPENDENT ; CODE (PIC). ;-;M;B0TTPOOL::.BLKW 1 ;START OF DRIVER'S PRIVATE POOL; @; NOTE - THE ROUTINE BELOW MUST FIT INTO ONE FIXED LENGTH BUFFER7; (LENGTH = T$$BFL BYTES), OR IT WILL OVERWRITE ITSELF.ID; NOTE ALSO THAT THE ROUTINE MUST MAP ITSELF IN BOTH I- AND D-SPACE.;R; INPUT:; R0 START OF DRIVER POOL 2; R1 POINTER T$$BFL BYTES BELOW END OF DRIVER POOL;P1CPOOL: MOV R0,R2 ;COPY POINTER TO CURRENT BUFFERD% ADD #T$$BFL,R0 ;POINT TO NEXT BUFFERT MOV R0,@R2 ;LINK NEW TO OLD-+ CMP R0,#160000-T$$BFL ;WITHIN 4K BOUNDARY?T BHIS 10$ ;N - STOP HEREI CMP R0,R1 ;END OF POOL?O BLO CPOOL ;N - LOOPM/10$: CLR @R2 ;Y - CLEAR POINTER IN LAST BUFFER  RETURN ;ALL DONEW" .IIF GT .-, .ERROR;T;EINIT:: .IF DF R$$PRO, MOV #60,R0 ;MOVE THE DL INTERRUPT VECTORS* MOV #220,R1 ;TO THE PRINTER PORT VECTOR1 MOV (R0)+,(R1)+ ;LOCATIONS. THIS IS BEING DONEP8 MOV (R0)+,(R1)+ ;BECAUSE THE PRINTER PORT IS NOW USED./ MOV (R0)+,(R1)+ ;THE DL VECTOR IS USED ON THER MOV (R0),(R1) ;BRIDGE SYSTEM.A .ENDC ;R$$PRO* MOV @#KINAR5,R0 ;GET START OF DRIVER CODE .IF DF M$$PRO$ MOV #M$$PRO,R2 ;GET NUMBER OF CPU'S0 MOV #$TTFB+10,R1 ;GET POINTER TO KINAR6 WORD IN ;FORK BLOCK FOR CPU 0E+20$: MOV R0,@R1 ;SAVE KINAR5 IN FORK 00%zxtkTADATADATADATADATADATABLOCKM( ADD #TT$UQL,R1 ;POINT TO NEXT UCB QUEUE SOB R2,20$ ;LOOP .IFF ;M$$PRO(- MOV R0,@#$TTFB+10 ;SAVE KINAR5 IN FORK BLOCKV .ENDC ;M$$PRO .IF DF T$$COM + MOV @#$TTCOM,-(SP) ;SAVE TTCOM PCB ADDRESSR2 CLR @#$TTCOM ;INDICATE DRIVER INITIALIZATION DONE . .IF DF D$$M11 V' MOV @#YMCTBP,R1 ;GET POINTER TO $YMCTB F .IFTF ;D$$M11 #* MOV @#KINAR6,R0 ;GET START OF DRIVER DATA .IF DF T$$SPL4 MOV R0,@#KDSAR6 ;MAP TTCOM THROUGH DATA SPACE APR 6 MOV R0,@#$DALED ;SAVE MAPPING .IFF ;T$$SPLL MOV R0,@#PAR5S ;SAVE A COPY! MOV R0,@#KDSAR5 ;MAP DRIVER DATA .ENDC ;T$$SPL/ MOV @#KINAR5,@#PAR6I ;GET START OF DRIVER CODE3 ADD #200,@#PAR6I ;COMPUTE AND SAVE HIGH 4K MAPPINGC D .IFT ;D$$M11$ O' MOV R1,@#YMCP1 ;SAVE POINTER TO $YMCTB. . .ENDC ;D$$M11 M .ENDC ;T$$COM + MOV R0,R1 ;COPY REAL START OF DRIVER DATAM .IF NDF T$$SPL . ADD #200,R0 ;ADD THE EQUIVALENT OF 4 K WORDS$ MOV R0,@#KISAR6 ;MAP REST OF DRIVER$ MOV R0,@#$DALED ;SAVE DRIVER KISAR6 .IF DF D$$M11&R$$MPL&T$$ONI3 MOV YMCTBP,YMC12 ;MOVE A COPY TO APR6 FOR OVERLAY .ENDC ;D$$M11&R$$MPL&T$$ONI .ENDC ;NDF T$$SPL .IF DF T$$OVL4 MOV KINAR5,ROTMAP ;SET UP POINTER TO MAIN APR5 CODE' MOV #TTEXT,R3 ;POINT TO RAD50 OF TTEXTN' CALL $SRNAM ;GET ADDRESS OF PARTITION. BCC 25$ ;CC - GOT IT CRASH ;NO GOOD IF NOT LOADEDD425$: MOV P.REL(R2),EXTMAP ;SET UP POINTER TO OVERLAY .IF NDF T$$SPLS MOV KISAR5,-(SP) ;SAVE MAPPINGV' MOV P.REL(R2),KISAR5 ;MAP TO EXTENSION/ MOV KISAR6,@#120000 ;SAVE MAPPING TO APR6 CODE1" MOV (SP)+,KISAR5 ;RESTORE MAPPING .ENDC ;NDF T$$SPL .ENDC ;T$$OVL .IF DF D$$H11!D$$V11F;$9; CALCULATE MAPPING INFORMATION NECESSARY FOR DMA DEVICESE;M .IF DF D$$V11;RN; CALCULATE AND SAVE THE DOUBLE-WORD RELOCATION CONSTANT TO TRANSFORM A DRIVERH; VIRTUAL ADDRESS INTO AN 18-BIT/22-BIT ADDRESS FOR THE DHV11. A SECONDL; RELOCATION CONSTANT IS NECESSARY FOR I/D-SPACE SYSTEMS SINCE BUFFERS WHICHM; ARE IN PRIMARY POOL DON'T HAVE A VIRTUAL ADDRESS WHICH MATCHES THE PHYSICALC; ADDRESS IN THOSE SYSTEMS.O;M .IF DF M$$EXT!D$$H11S1 MOV R1,-(SP) ;SAVE START APR BIAS OF DRIVER DATA .IFTF ;M$$EXT!D$$H11M .IF DF R$$EIS$ CLR R0 ;PREPARE FOR COMBINED SHIFT% ASHC #6,R0 ;GET PHYS. START ADDRESSD .IFF ;R$$EISA. SWAB R1 ;USE NON-EIS EMULATION OF ASHC #6,R0 MOVB R1,R0 ; BIC #377,R1 ;H ROR R0 ; ROR R1 ; ROR R0 ; ROR R1 ; .ENDC ;R$$EIS .IF DF K$$DAS4 SUB #140000,R1 ;SUBTRACT TTCOM BASE VIRTUAL ADDRESS .IFF ;K$$DASS5 SUB #120000,R1 ;SUBTRACT DRIVER BASE VIRTUAL ADDRESSD .IFTF ;K$$DAS SBC R0 ;TAKE CARE OF CARRY6 BIC #^C<77>,R0 ;MAKE SURE ONLY 6 BITS MAXIMUM ARE SET# MOV R0,@#RELCV ;SAVE HIGH 2/6 BITSB: MOV R1,@#RELCV+2 ;SAVE LOW 16 BITS OF RELOCATION CONSTANT .IFT ;K$$DAS @ MOV @#KDSAR1,R1 ;GET START APR BIAS OF POOL IN I/D-SPACE SYSTEM$ CLR R0 ;PREPARE FOR COMBINED SHIFT< ASHC #6,R0 ;GET PHYS. START ADDRESS (I/D SYS REQUIRES EIS)2 SUB #20000,R1 ;SUBTRACT POOL BASE VIRTUAL ADDRESS SBC R0 ;TAKE CARE OF CARRY6 BIC #^C<77>,R0 ;MAKE SURE ONLY 6 BITS MAXIMUM ARE SET! MOV R0,@#RELCV+4 ;SAVE HIGH BITS MOV R1,@#RELCV+6 ;SAVE LOW BITS .ENDC ;K$$DAS .IFT ;M$$EXT!D$$H114 MOV (SP)+,R1 ;RESTORE START APR BIAS OF DRIVER DATA .ENDC ;M$$EXT!D$$H11. .ENDC ;D$$V11 .IF DF M$$EXT;RH; CALCULATE AND SAVE THE UMR VALUE(S) TO MAP ALL OF THE DRIVER DATA AREA; .IF DF R$$EIS& CLR R0 ;PREPARE FOR ASHC INSTRUCTION% ASHC #6,R0 ;GET PHYS. START ADDRESSR .IFF ;R$$EISC. SWAB R1 ;USE NON-EIS EMULATION OF ASHC #6,R0 MOVB R1,R0 ; BIC #377,R1 ;M ROR R0 ; ROR R1 ; ROR R0 ; ROR R1 ; .ENDC ;R$$EIS$ MOV #UMR5S,R2 ;POINT AT SAVED UMR 5! MOV R1,(R2)+ ;SAVE UMR 5 SETTINGA MOV R0,(R2)+ ;  .IF NDF T$$SPLE! ADD #20000,R1 ;ADVANCE 8 K BYTESD ADC R0 ;! MOV R1,(R2)+ ;SAVE UMR 6 SETTINGL MOV R0,(R2)+ ;O .ENDC ;NDF T$$SPL .IFF ;M$$EXT$ .IF DF D$$H11;RL; COMPUTE AND SAVE THE DOUBLE-WORD RELOCATION CO00-z1ztblNSTANT TO TRANSFORM A DRIVER); VIRTUAL ADDRESS INTO AN 18-BIT ADDRESS.S.; (SEE DETAILED DESCRIPTION AT LABEL "RELC:").; # SWAB R1 ;SHIFT KISAR5 6 BITS LEFT;1 MOVB R1,R0 ;GET ORIGINAL BITS 10-11 IN BITS 2-3D$ RORB R1 ;ORIGINAL BIT 8 INTO CARRY- ROR R1 ;BIT 8 INTO BIT 15, BIT 9 INTO CARRYA0 ROR R1 ;BIT 9 INTO BIT 15 - SHIFT IS COMPLETED BIC #77,R1 ;CLEAR 6 LOW BITS) ASL R0 ;SHIFT 2 HIGH BITS INTO BITS 4-5. ASL R0 ;5 SUB #120000,R1 ;SUBTRACT DRIVER BASE VIRTUAL ADDRESS- BCC 30$ ;NO CARRY - JUMP* SUB #20,R0 ;SUBTRACT CARRY FROM R0 BIT 4+30$: BIC #^C<60>,R0 ;CLEAR ALL BUT BITS 4-5O( MOV R0,@#RELC ;SAVE RELOCATION CONSTANT MOV R1,@#RELC+2 .ENDC ;D$$H11 .ENDC ;M$$EXT 1 .ENDC ;D$$H11!D$$V111,; SETTUP THE CT VIDEO TASK TIMER CLOCK BLOCK .IF DF B$$MAP1 MOV #CTICK,@#$CTCB+C.SUB ;INITIALIZE CLOCK BLOCKL CALL CTQUEK ;QUEUE IT  .ENDC ;B$$MAP1 MOV #TTICK,@#$TTCB+C.SUB ;INITIALIZE CLOCK BLOCKB CALL @#CLINS ;QUEUE IT& MOV #$DEVHD,R0 ;GET START OF DCB LIST40$: MOV @R0,R0 ;GET NEXT DCB4 CMP D.NAM(R0),#"TT ;DOES IT HAVE GENERIC NAME "TT"? BNE 40$ ;N - LOOPV MOV D.UCB(R0),R1 ;GET FIRST UCB) BIT #DV.TTY,U.CW1(R1) ;IS IT A TERMINAL?. BEQ 40$ ;N - LOOPN2 MOV R0,@#DCB0 ;SAVE POINTER TO FIRST TERMINAL DCB R .IF DF T$$COM F MOV (SP)+,R1 ;GET TTCOM PCB + .IFF ;T$$COMZ L MOV D.PCB(R0),R1 ;GET TTDRV PCB  .ENDC ;T$$COM 9 MOV P.SIZE(R1),R1 ;GET PARTITION SIZE IN 32. WORD BLOCKS# .IF DF R$$EIS ASH #6,R1 ;CONVERT TO BYTES .IFF ;R$$EIS0 SWAB R1 ;CONVERT TO BYTESR RORB R1 ROR R1V ROR R1  .ENDC ;R$$EIS .IF DF T$$SPLB ADD #140000-T$$BFL,R1 ;GET POINTER T$$BFL BYTES BELOW END OF POOL .IFF ;T$$SPLN= ADD #120000-T$$BFL,R1 ;GET POINTER T$$BFL BYTES BELOW END OF ;DRIVER POOL .ENDC ;T$$SPL;C" MOV #TTPOOL,R0 ;GET START OF POOL+ MOV R0,@#FREEB ;POINT TO FIRST FREE BUFFERC BR CPOOL ;INITIALIZE POOLE;A;T .ENDE IN 32. WORD BLOCKS# .IF DF R$$EIS ASH #6,R1 ;CONVERT TO BYTES . .TITLE TTFP .IDENT /07.01/I;D6; COPYRIGHT (c) 1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;R;U; 09-FEB-78 PETER WANNHEDENR;O; PREVIOUSLY MODIFIED BY:P;I; D. R. DONCHINI ; T. LEKAS ; J. KAUFFMAN2 ; S. C. ADAMST; R. S. PHILPOTT; B. S. MCCARTHY;P; MODIFICATIONS;.;+; S.C. ADAMS 27-FEB-86 07.000; SA454 -- FIX PROBLEMS WITH CONTINUATION LINES;D; S.C. ADAMS 29-APR-86 07.01-; SA457 -- ADD CONDITIONAL FOR BIC IN U.TST6L;I;S .MCALL EVNDF$,PKTDF$S PKTDF$S EVNDF$D .PSECT MAP5.6;M;+?; MODULE TTFP - CONTAINS FORK LEVEL PROCESSING ROUTINES FOR THEE; FOLLOWING FORK REQUESTS:$; FR.SUI START OF UNSOLICITED INPUT,; FR.AST CHARACTER THAT CAUSES AST RECEIVED;; FR.SCA TERMINAL MANAGEMENT SWITCH CHARACTERS WERE STRUCKT/; FR.ICS INPUT COUNT STATE TRANSITION OCCURRED-*; FR.OOB OUT-OF-BAND CHARACTER WAS STRUCK;T<; ALL THESE ROUTINES ARE CALLED BY THE FORK DISPATCHER WITH:#; R4 POINTER TO UCBX (IF IT EXISTS)I; R5 POINTER TO U.TSTA&; S1.DSI 1 TO DISABLE INPUT PROCESSING;-;;*.SBTTL FPSUI - START OF UNSOLICITED INPUT.;R .ENABL LSBH;;FPSUI:: CALL GCTAB ;GET CHARACTER THAT STARTS UNSOL. INPUTP) BCS 30$ ;NOT THERE ANY MORE - FORGET ITE .IF DF T$$IDO. TST $MCRPT ;IS THE MCR DISPATCHER INSTALLED?, BEQ CTAST ;EQ NO - QUEUE THE AST TO C$CTEX .ENDC ;T$$IDO3 CMPB R2,#CH.SP ;IS IT A "FUNNY" CHARACTER (CONTROLA ;CHARACTER OR SPACE)?T BHI 10$ ;N - OK, JUMPT7 CMPB R2,#CH.CR ;OF THE FUNNY CHARACTERS, WE ONLY ALLOW1( ;CARRIAGE RETURN AND CTRL-C TO START ;UNSOLICITED INPUT* ;(CR WILL OF COURSE ALSO TERMINATE IT) BEQ 10$ ;CR - OK CMPB R2,#CH.CTC ;CTRL-C?S BNE 50$ ;N - IGNOREN10$: ;REFERENCE LABEL .IF NDF T$$SPLI CALL ALUCBX ;ALLOCATE UCBX BCS 50$ ;FAILED - JUMP .ENDC ;NDF T$$SPL% CALL ALTB ;ALLOCATE AN INPUT BUFFERC BCS 40$ ;FAILED - JU005zxtkTADATADATADATADATADATAMP MOV R2,-(SP) ;OK - SAVE POINTER. CLR -(SP) ;RESET CLI PROMPT STATUS FOR ^U/^R ASSUME U.TCI,0 6 MOV @R4,R3 ;GET CURRENT INPUT PACKET IF THERE IS ONE BEQ 20$ ;INPUT FREE - JUMP0 MOV #IS.CC,@R3 ;INPUT BUSY - SET STATUS = IS.CC) ;(BY DEFINITION, IT MUST BE SOLICITEDH ;INPUT)S9 MOVB @R3,1(SP) ;SHOW THAT A READ WAS INTERRUPTED BY A ^CN MOV R4,-(SP) ;SAVE R4 CALL FPIRD ;SAY INPUT DONE MOV (SP)+,R4 ;RESTORE R4DA20$: MOV (SP)+,U.TFPB(R4) ;SAVE ^U/^R STATUS IN NOW UNUSED OFFSETE; MOV (SP)+,U.TFIB(R4) ;SET UP POINTER TO FIRST INPUT BUFFERT< MOVB U.TCHP-U.TSTA(R5),U.TIHP(R4) ;SET UP INITIAL HOR. POS. .IF NE T$$UTO* MOVB #T$$UTO,U.TITI(R4) ;INITIALIZE TIMER .ENDC ;T$$UTO ADD #U.TFIB,R4 ;POINT TO U.TFIB;; ;+7; SUBROUTINE FPSUI1 - SET UP UCB FOR UNSOLICITED INPUT.R:; FALL THROUGH FROM ABOVE OR CALLED FROM TTICH @ INT STATE;P; INPUT:; R4 POINTER TO U.TFIB; R5 POINTER TO U.TSTA&; U.TFIB POINTER TO FIRST INPUT BUFFER; ; OUTPUT:S ; UCB SET UP.O&; R2 POINTER TO SECOND WORD OF BUFFER.; THIS WORD INITIALIZED TO 0.; R4 POINTER TO U.TIC.;P; REGISTERS ALTERED: R2,R4;-;.;N6FPSUI1::MOV @R4,R2 ;GET POINTER TO FIRST INPUT BUFFER ASSUME U.TTIC,U.TFIB-2#1 MOV #M$$CRB-4,-(R4) ;INITIALIZE TOTAL BYTE COUNTE! ; = 1 FULL CLI COMMAND BUFFERD+ CALL NXTIB ;SET UP UCB FOR INPUT TRANSFER ? MOV R2,U.TCI-U.TIC(R4) ;STORE POINTER TO SECOND WORD IN BUFFER5- ;THIS WORD WILL RECEIVE COMPLETION STATUSN CLR @R2 ;INITIALIZE STATUS9 BIS #S1.IBY!S1.IBF!S1.USI,@R5 ;SET FLAGS FOR UNSOLICITEDI ;BUFFERED INPUT 3 BIC #S1.RST!S1.PTH!S1.RES!S1.RNF!S1.RSP!S1.TNE,@R5R BIC #S5.ITI,U.TST5-U.TSTA(R5) 2 .IF DF T$$EIO BIC #S6.EIO,U.TST6-U.TSTA(R5) U .ENDC ;T$$EIO) MOV 4(R5),-(SP) ;GET CHARACTERISTIC WORD4 BIC #^C,(SP) ;GET RID OF EVERYTHING BUT TSY ASSUME S3.TSY,S1.TSY @ BIS (SP)+,(R5) ;RESTORE THE TSY BIT ACCORDING TO CHARACTERISTIC30$: RETURN ;L;E40$:;PA; FAILED TO ALLOCATE INPUT BUFFER. WITH A LITTLE EFFORT, WE COULD1>; DEALLOCATE THE UCBX, AFTER CHECKING WHETHER IT IS NEEDED FOR; SOME OTHER PURPOSE.S;N& CALL BELL ;BUFFER ALLOCATION FAILURE ;OUTPUT A BELL AND:50$: CALLR RCTAB ;REMOVE CHARACTER FROM TYPE-AHEAD BUFFER ;AND FORGET IT ALL.PAGER1.SBTTL FPAST - CHARACTER THAT CAUSES AST RECEIVED ;R .IF DF T$$CCA?FPAST:: CALL GCTAB ;GET A CHARACTER FROM THE TYPE-AHEAD BUFFERR BCS 30$ ;NONE THERE - IGNORE .IF NDF T$$SPL TST R4 ;UCBX PRESENT?P0 BEQ 30$ ;N - TERMINAL MUST BE DETACHED, IGNORE .ENDC ;NDF T$$SPL! MOV U.TAST(R4),R1 ;GET AST BLOCK 3 BEQ 30$ ;NONE - TERMINAL MUST BE DETACHED, IGNOREI1 MOVB R2,A.PRM(R1) ;INSERT CHARACTER IN AST BLOCKBA BISB #AF.LCK,A.PRM+5(R1) ;ASSUME TASK ONLY WANTS NOTIFICATION...% ;...SO LOCK THE AST CONTROL BLOCKA$ CMPB R2,#CH.CTC ;IS CHARACTER A ^C? BNE 60$ ;N - JUMPT3 MOV A.PRM+6(R1),R0 ;ASSUME SPECIFICATION OF ^C ASTS! BNE 70$ ;GOOD ASSUMPTION - JUMPN@60$: MOV A.PRM+10(R1),R0 ;GET ADDRESS OF UNSOLICITED AST ROUTINE8 BITB #TF.NOT,A.PRM+5(R1) ;TASK WANTS NOTIFICATION ONLY? BNE 80$ ;Y - JUMPC970$: CALL RCTAB ;REMOVE CHARACTER FROM TYPE-AHEAD BUFFERM+ BICB #AF.LCK,A.PRM+5(R1) ;UNLOCK AST BLOCKC=80$: MOV R0,A.AST(R1) ;INSERT TASK AST ADDRESS INTO AST BLOCKI3 JMP QUEAEN ;QUEUE ASYNCHRONOUS EVENT NOTIFICATION  .ENDC ;T$$CCA.PAGE^4 .SBTTL FPSCA - SWITCH CHARACTERS HAVE BEEN DETECTED .IF DF T$$SCA ;G; THIS FORK ROUTINE IS EXECUTED WHEN A USER HAS REQUESTED RECOGNITION I; OF SWITCH CHARACTERS BY SETTING UP THE TC.SSC CHARACTERISTIC. ENTERINGIC; SWITCH CHARACTERS IS A REQUEST TO ENTER TERMINAL MANAGEMENT MODE.O; FPSCA::B .IF NDF T$$SPLC TST R4 ;IS THERE A UCBX?C* BEQ 30$ ;IF EQ, NO...MUST HAVE DETACHED .ENDC ;NDF T$$SPL8 TST U.TSCA(R4) ;IS THERE POINTER TO TERM MGMT ACB/TEP?0 BEQ 30$ ;IF EQ, IT WENT AWAY...IGNORE REQUEST MOV #IS.TMM,R0 ;SET TMM STATUS CALL KILLI1 ;KILL INPUT5 MOV U.TSCA(R4),R1 ;GET POINTER TO TERM MGMT ACB/TEPO& JMP QUEAEN ;QUEUE TEP TO IT'S OWNER .EN00=z1ztblDC ;T$$SCA.PAGEI5 .SBTTL FPICS - INPUT COUNT STATE TRANSITION OCCURREDN .IF DF T$$ICSM;OH; THIS FORK ROUTINE IS EXECUTED WHEN A USER HAS REQUESTED NOTIFICATIONF; OF THE TYPE-AHEAD BUFFER GOING FROM EMPTY TO NON-EMPTY BY SETTING UPG; THE TC.ICS CHARACTERISTIC. A TSA EVENT PACKET WILL BE QUEUED TO THE E6; SYSTEM-STATE PROCESS THAT SET UP THE CHARACTERISTIC.;FPICS::L0 CALL GCTAB ;IS THERE STILL A CHAR IN THE TAB?* BCS 30$ ;IF CS, NO...FORGET THE REQUEST .IF NDF T$$SPL TST R4 ;IS THERE A UCBX?B* BEQ 30$ ;IF EQ, NO...MUST HAVE DETACHED .ENDC ;NDF T$$SPL/ MOV U.TICA(R4),R1 ;GET POINTER TO ICS ACB/TEPA0 BEQ 30$ ;IF EQ, IT WENT AWAY...IGNORE REQUEST& JMP QUEAEN ;QUEUE ACB TO IT'S OWNER .ENDC ;T$$ICS.PAGES. .SBTTL FPOOB - OUT-OF-BAND CHARACTER DETECTED .IF DF T$$OOBT;AH; THIS FORK ROUTINE IS EXECUTED WHEN A USER HAS REQUESTED NOTIFICATIONO; OF INPUT OF OUT-OF-BAND CHARACTERS BY SETTING UP THE TC.OOB CHARACTERISTIC. .M; IF THE USER IS A TASK, AN AST WILL BE QUEUED. OTHERWISE A TSA EVENT PACKETVL; WILL BE QUEUED TO THE SYSTEM-STATE PROCESS THAT SET UP THE CHARACTERISTIC.;EFPOOB::3 .IF NDF T$$SPLT TST R4 ;IS THERE A UCBX?E* BEQ 30$ ;IF EQ, NO...MUST HAVE DETACHED .ENDC ;NDF T$$SPL/ MOV U.TOBA(R4),R1 ;GET POINTER TO ICS ACB/TEP 0 BEQ 30$ ;IF EQ, IT WENT AWAY...IGNORE REQUEST' CALL QUEAEN ;QUEUE TEP TO IT'S OWNERF ASSUME U.TCI,0N;HD; CHECK IF A STATUS HAS BEEN SET. (IS.OOB). THIS MEANS THAT THE OOBG; CHARACTER WAS A CLEAR OOB AND THEREFORE, THE READ MUST BE TERMINATED. ;U TST (R4)+ ;IS THERE INPUT?T1 BEQ 30$ ;RETURN IF NOT. (IF NOT R4 NOT NEEDED)F TST @-(R4) ;IS THERE STATUS?R BEQ 30$ ;RETURN IF NOTE" CALLR KILLI ;TERMINATE THE READ .ENDC ;T$$OOB .DSABL LSB1.PAGEI@.SBTTL CTAST - FOR INTERRUPT-DO SEND AN AST TO C$CTEX - FOR P/OS;T .IF DF T$$IDO;U<; THIS IS A HACK TO SEND AN AST TO A TASK CALLED C$CTEX WHEN?; ^C IS TYPED AND NO ONE WANT'S IT. THE AST ROUTINE IS ASSUMED ; TO BE AT LOCATION 250F;,;R; SEE IF THE TASK IS INSTALLED;()CTAST: CMPB R2,#CH.CTC ;IS IT A CTRL-C?N BEQ 970$ ;EQ YES - OK GO ON& CRASH ;WE SHOULD ONLY GET HERE FOR ;A CTRL-C (OR INT-DO)K)970$: CALL RCTAB ;GET RID OF THE CTRL-C MOV #CTEX,R3 ;GET CTEX'S NAMEC CALL $SRSTD ;LOOK FOR ITA BCS 990$ ;IF CS - NOT HERE% BIT #TS.EXE,T.STAT(R0) ;TASK ACTIVE?K# BNE 990$ ;IF NE NO - DON'T DO ITE$ MOV R0,-(SP) ;SAVE THE TCB ADDRESS;T; GET SOME POOLE;  MOV #6.*2,R1 ;SIZE CALL $ALOCB ;GET IT( BCS 980$ ;IF CS - NO POOL - FORGET IT;B; FILL IN THE AST BLOCKL;N MOV R0,R1 ;COPY BLOCK ADDRESS+ TST (R0)+ ;POINT PAST AST LIST LINK WORD $ MOV #6.*2,(R0)+ ;SIZE OF AST BLOCK: MOV #7.*2,(R0)+ ;NUMBER OF BYTES TO ALLOCATE ON USER'S S% MOV #250,(R0)+ ;AST VIRTUAL ADDRESSB4 CLR (R0)+ ;NUMBER OF EXTRA WORDS TO PUT ON USER'S# MOV (SP)+,R0 ;GET THE TCB ADDRESS 4 CALLR $QASTT ;QUEUE THE AST AND THROW THE ^C AWAY"980$: TST (SP)+ ;CLEAN THE STACK 990$: RETURN .ENDC ;T$$IDO.PAGES&.SBTTL FPKIL - SEND KILL PACKET TO CLI;  .IF DF T$$SPC .PSECT MAP6FPKIL::B .IF DF C$$CTCC BIT #UM.KIL,U.MUP-U.TSTA(R5) ;CREATE ^C NOTIFICATION PACKET IF CLRA- BNE 10$ ;IF NE, KILL PACKET MUST BE CREATED 9 MOV #CC.CLI!CC.CTC,R1 ;SET ^C NOTIFICATION PACKET STATUSB BR 20$ ;JUMP TO COMMON CODE 10$: .ENDC ;C$$CTC- BIC #UM.KIL,U.MUP-U.TSTA(R5) ;CLEAR KILL BITA( CLR U.TFPB(R4) ;RESET CLI PROMPT STATUS;?; THE FOLLOWING CODE IS AN ATTEMPT TO CAUSE TTDRV TO CYCLE BACKOC; THROUGH FPKIL SUCH THAT WHEN CONTROL C IS TYPED TO A CONTINUATIONC=; LINE, WE FIRST COME THROUGH AND KILL THE LINE THEN AGAIN TOUD; ABORT TASKS. THIS BEHAVIOR IS BEING CHANGED AS IT IS INCONSISTENTC; WITH THE ACTION OF TTDRV WHEN A COMMAND LINE IS TERMINATED BY ^C.F; .IF DF T$$SPLU;7; MOVB #CH.CTC,U.TECO-U.TSTA(R5) ;PUT ^C IN ECHO BUFFERB;#; .IFF ;T$$SPL;(0; MOVB #CH.CTC,U.TECB(R4) ;PUT ^C IN ECHO BUFFER;P; .ENDC ;T$$SPLH;O-; FR00EzLztkTADATADATADATADATADATAKBIT BIS,#FR.PFP ; POST-FORK PROCESS A ^CC;B$ MOV #CC.KIL,R1 ;SET CLI KILL STATUS 20$: MOV R5,R2 ;GET UCB ADDRESS SUB #U.TSTA,R2 ;T* CALL $QCNTP ;QUEUE CONTROL PACKET TO CLI RETURNR .ENDC ;T$$SPC.PAGEI6 .SBTTL QUEAEN - QUEUE ASYNCHRONOUS EVENT NOTIFICATION V* .IF DF T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOB;I;+;$3; **-QUEAEN - QUEUE ASYNCHRONOUS EVENT NOTIFICATION ;O ; INPUTS::; R1 => AST CONTROL BLOCK OR TSA EVENT PACKET TO BE QUEUED'; R4 => UCBX (MUST EXIST AND BE MAPPED)B; R5 => U.TSTA OF CURRENT UCBX;A ; OUTPUTS:; R0 IS DESTROYEDI*; R3 IS DESTROYED IF A TEP IS PASSED IN R1;;-;. .ENABL LSBLQUEAEN:: .IF DF R$$IIC ASSUME A.CBL,E.VSIZ- TST A.CBL(R1) ;IS THIS AN AST CONTROL BLOCK?E$ BNE 10$ ;IF NE, NO...MUST BE A TEP .IFTF ;R$$IIC6 BITB #AF.QUE,A.PRM+5(R1) ;IS THIS ACB ALREADY QUEUED?# BNE 20$ ;IF NE, YES...JUST RETURN .IF DF T$$OOB/ BITB #AF.OOB,A.PRM+5(R1) ;IS THIS ACB FOR OOB?  BEQ 5$ ;IF EQ, NO(; TSTB A.PRM+24(R1) ;IS THERE A CHARACTER IN THE OOB BUFFER?A BEQ 20$ ;IF EQ, NO... RETURN CALL RCBUF ;GET THE CHARACTER ) MOVB R2,A.PRM(R1) ;AND PUT IT IN THE ACBU5$:: .ENDC ;T$$OOB- BISB #AF.QUE,A.PRM+5(R1) ;MARK ACB AS QUEUEDI2 MOV U.ATT-U.TSTA(R5),R0 ;GET TCB OF ATTACHED TASK) CALLR $QASTT ;QUEUE THE AST TO THE TASKU .IFT ;R$$IIC 10$:/ MOV R1,R3 ;COPY TEP POINTER FOR QUEUE ROUTINET!; BR QUETEP ;SKIP TO QUEUE A TEP.5 .SBTTL QUETEP - QUEUE TERMINAL EVENT PACKET TO OWNERN;;+;.L; **-QUETEP - THIS ROUTINE IS CALLED TO PASS A TSA EVENT PACKET TO A ROUTINEE; SET UP TO PROCESS THE EVENT. THE DOUBLEWORD ADDRESS OF THE ROUTINETD; TO BE CALLED IS EXPECTED TO BE IN THE TEP. NOTE THAT AN INTERLOCKE; MECHANISM IS PROVIDED TO DISABLE A FUTURE CALL WITH THE SAME PACKETLG; IF NECESSARY. IT IS UP TO THE CALLED ROUTINE TO CLEAR THE INTERLOCK.,; ; INPUT: ; R3 => TEP TO PASS TO ITS OWNER;E;-;PQUETEP::5 BIT #EF.QUE,E.VFLG(R3) ;IS THE PACKET ALREADY QUEUEDT4 BNE 20$ ;IF NE, YES...CANNOT QUEUE A LOCKED PACKET@ BIS #EF.QUE,E.VFLG(R3) ;LOCK PACKET UNTIL OWNER IS DONE WITH IT? MOV E.VAPR(R3),-(SP) ;SAVE DOUBLEWORD ADDRESS OF THE PACKET...D' MOV E.VADR(R3),-(SP) ;...OWNER ROUTINE % CALL $MPPRO ;MAP AND CALL THE OWNERO .ENDC ;R$$IIC20$: RETURN ;ALL DONE .DSABL LSB * .ENDC ;T$$CCA!T$$SCA!T$$MHU!T$$ICS!T$$OOB7 .SBTTL RCBUF - REMOVE CHARACTER FROM TYPE-AHEAD BUFFERE;-;+;UI; **-RCBUF - THIS ROUTINE IS CALLED TO REMOVE A CHARACTER FROM A STANDARDI@; FORMAT TYPE-AHEAD BUFFER. NOTE: THIS MUST BE CALLED ONLYB; WHEN IT IS KNOWN THAT THERE ARE CHARACTERS TO BE RETRIEVED!;O; INPUT:.; R1 => ACB IN WHICH TYPE-AHEAD BUFFER RESIDES ; OUTPUT:O#; R2 CHARACTER THAT WAS RETRIEVEDH;W;-; .IF DF T$$OOBRCBUF:! CALL LOCKI ;LOCK OUT INTERRUPTS4 MOV R1,R3 ;;;MAKE COPY OF ACB ADDRESS TO PLAY WITH/ ADD #A.PRM+23,R3 ;;;POINT TO RETRIEVAL POINTERE% CLR R2 ;;;PREPARE FOR BYTE TRANSFER 2 BISB (R3),R2 ;;;GET OFFSET TO RETRIEVE CHARACTER& INCB (R3) ;;;INCREMENT RETR. POINTER< CMPB (R3)+,1(R3) ;;;IS THE POINTER NOW = TOTAL BUFFER SIZE? BNE 10$ ;;;NE- OKR- CLRB -1(R3) ;;;START AT BEGINNING NEXT TIME-10$:# DECB (R3)+ ;;;DEC CHARACTER COUNTA ADD R2,R3 ;;;POINT TO... INC R3 ;;;THE CHARACTER CLR R2 ;;;GET READY FOR IT% BISB (R3),R2 ;;;GET CHARACTER IN R2Y RETURND .ENDC ;T$$OOB;A;# .END3,R3 ;;;POINT TO RETRIEVAL POINTERE% CLR R2 ;;;PREPARE FOR BYTE TRANSFER 2 BISB (R3),R2 ;;;GET OFFSET TO RETRIEVE CHARACTER& INCB (R3) ;; .TITLE TTICH .IDENT /08.01/;@; COPYRIGHT (c) 1986,1987,1988 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;;; 23-JAN-78 PETER WANNHEDEN;; PREVIOUSLY MODIFIED BY:;; P. WANNHEDEN ; C. F. SPITZ; D. R. DONCHIN ; T. LEKAS ; J. KAUFFMAN ; S. C. ADAMS; R. S. PHILPOTT ; L. M. KOGAN;;$; MODIFIED FOR RSX-11M-PLUS V4.2 BY:;00Mz1ztbl; L. KOGAN 22-SEP-88 08.002; LK739 -- SAVE R4 BEFORE CALLING PORT DRIVER; ; L. KOGAN 22-SEP-88 08.01A; LK745 -- SUPPORT SLAVED TERMINAL TYPEAHEAD BUFFER OPTIONE; M;B;S;+; ****** T T I C H ******E;TI; THIS MODULE CONTAINS THE ROUTINES WHICH MAKE UP THE "PRE-INPUT PROCESS"RM; AND THE "INPUT PROCESS" OF THE TERMINAL DRIVER. THE "PRE-INPUT" PROCESS IS O; MODELLED AS RECEIVING CHARACTERS FROM A TERMINAL INTERFACE. THESE CHARACTERSM; ARE INTERPRETED PRIOR TO BEING MOVED TO EITHER A TYPE-AHEAD BUFFER OR TO ANLK; OUT-OF-BAND CHARACTER BUFFER. THE "INPUT PROCESS" IS MODELLED AS READING O; CHARACTERS FROM THE TYPE-AHEAD BUFFER, PROCESSING THEM, AND THEN WRITING THEM+L; TO AN INPUT BUFFER. THE PROCESSING INVOLVES RECOGNIZING ESCAPE SEQUENCES,L; EDIT CHARACTERS, AND TERMINATORS AND INITIATING THE ECHO PROCESSING OF THEI; CHARACTER. AN INPUT BUFFER CAN BE A USER TASK BUFFER, "BUFFERED INPUT" .; BUFFERS, OR UNSOLICITED INPUT (CLI) BUFFERS.;-;E& .SBTTL .MCALLS AND SYMBOL DEFINITIONS .IF DF R$$MPL .MCALL KRBDF$ KRBDF$ ;DEFINE KRB SYMBOLS .IFF ;R$$MPLL .MCALL SCBDF$$ SCBDF$ ,,SYSDEF ;DEFINE SCB SYMBOLS .ENDC ;R$$MPL .MCALL PKTDF$ PKTDF$ ;DEFINE PACKET SYMBOLS .IF DF T$$TSA .MCALL EVNDF$* EVNDF$ ;DEFINE TSA EVENT PACKET OFFSETS .ENDC ;T$$TSA .PSECT MAP5.6.PAGE ) .SBTTL TERMINAL DRIVER PRE-INPUT PROCESSA@ .SBTTL . ICHAR1 - INITIALIZATION AND SPECIAL CHARACTER CHECKING;U;+A; **-ICHAR1 - PROCESS AN INPUT CHARACTER BEFORE TYPE-AHEAD BUFFERL;M; THIS ROUTINE INITIATES PROCESSING OF A CHARACTER ON THE "OUTSIDE" (HARDWARECM; SIDE) OF THE TYPE-AHEAD BUFFER. ANY OF THE FOLLOWING ACTIONS MAY BE TAKEN:$;=; 1. IF THE UNIT IS OFFLINE OR WAITING FOR CARRIER, THE INPUTV; CHARACTER IS IGNORED.,; 2. PERFORM AUTOBAUD DETECTION IF REQUIRED.B; 3. CHECK FOR USER REQUEST TO SWITCH TO TERMINAL MANAGEMENT MODE.A; 4. DISPATCH TO ONE OF THE "PRE-INPUT PROCESS" SPECIAL CHARACTERU9; HANDLING ROUTINES (^S, ^Q, ^O, ^X, ^C, ^V). NOTE THATA:; THESE CHARACTERS ARE NOT INTERPRETED IF "PASSTHRU" OR A0; "READ WITH SPECIAL TERMINATORS" IS IN EFFECT.-; 5. PERFORM OUT-OF-BAND CHARACTER DETECTION.I8; 6. TRANSFER CONTROL TO "I1DEF" FOR FURTHER PROCESSING.;G ; INPUTS:3; R2 = CHARACTER (LOW BYTE) AND STATUS (HIGH BYTE)A"; R5 => U.TSTA OF THE TERMINAL UCB;E ; OUTPUTS:E0; R2 = CHARACTER (IF CONTROL PASSED TO "I1DEF");S!; REGISTERS ALTERED: R2, R3, R4E;-;CICHAR1:: .IF DF T$$MODC BITB #US.CRW,U.STS-U.TSTA(R5) ;;;IS THIS UNIT WAITING FOR CARRIER? ( BNE I1RET ;;;IF NE, YES...IGNORE INPUT .ENDC ;T$$MOD .IF DF R$$CON7 BITB #US.OFL,U.ST2-U.TSTA(R5) ;;;IS THIS UNIT OFFLINE?.( BNE I1RET ;;;IF NE, YES...IGNORE INPUT .ENDC ;R$$CON .IF DF T$$SPL9 MOV U.TAPR-U.TSTA(R5),@#KDSAR5 ;;;MAP THE UCBX AND TABUFO .ENDC ;T$$SPL;*; PERFORM AUTOBAUD DETECTION IF NECESSARY.;S .IF DF D$$M11!D$$ZMD!D$$VMD ASSUME S5.ABP,100000-= TST U.TST5-U.TSTA(R5) ;;;IS AUTO-BAUD DETECTION IN PROGRESS?R BPL 10$ ;;;IF PL, NO...SKIPC1 CALL SETSPD ;;;DETERMINE THE CALLER'S BAUD RATE1 BEQ I1RET ;;;IF EQ, DID NOT FIND SPEED...RETURN,0 ;;;ELSE, THE INPUT CHARACTER IN R2 IS A 10$: .ENDC ;D$$M11!D$$ZMD!D$$VMD .IF DF T$$ACDA MOV #UA.ACC!UA.PRO!UA.ECH,U.AFLG-U.TSTA(R5) ;;;SET DEFAULT FLAGS 8 TST U.ACB-U.TSTA(R5) ;;;DOES THIS TERMINAL HAVE AN ACD?' BEQ 20$ ;;;IF EQ, NO...SKIP ACD STUFF$. MOV R0,-(SP) ;;;SAVE REGISTER NEEDED FOR CALL: MOV #A.RECE,R0 ;;;SPECIFY CHARACTER RECEPTION ENTRY POINT CALL $SWACD ;;;CALL ACDC! MOV (SP)+,R0 ;;;RESTORE REGISTER'8 BIT #UA.ACC,U.AFLG-U.TSTA(R5) ;;;ACCEPT THIS CHARACTER?) BEQ I1RET ;;;IF EQ, NO...JUST IGNORE IT B BIT #UA.TYP,U.AFLG-U.TSTA(R5) ;;;FORCE THIS CHARACTER INTO TABUF?% BNE I1BUFR ;;;IF NE, YES...GO DO IT.; BIT #UA.PRO,U.AFLG-U.TSTA(R5) ;;;INTERPRET THIS CHARACTER?  BEQ I1DEF ;;;IF EQ, NO...SKIP220$: .ENDC ;T$$ACD;TK; CHECK FOR HARD RECEIVE ERRORS ON THE INPUT CHARACTER. IT IS ASSUMED THATIJ; THE ERROR BITS PAS00UzLztkTADATADATADATADATADATASED FROM THE HARDWARE MATCH THE FLAG VALUES IN THE UCB; STATUS WORD (U.TST5).B;# .IF DF T$$RED> BIC #^C,R2 ;;;CLEAR EXTRANEOUS BITS= BIT #S5.BCC!S5.DAO!S5.VER,R2 ;;;HARD RECEIVE ERROR DETECTED?T5 BNE I1DEF ;;;IF NE, YES...DON'T INTERPRET CHARACTER .IFF ;T$$REDL= BIT #S5.BCC!S5.DAO!S5.VER,R2 ;;;HARD RECEIVE ERROR DETECTED? 0 BNE I1BEEP ;;;IF NE, YES...RESPOND WITH A BELL .ENDC ;T$$RED. BIT #S3.8BC,4(R5) ;;;PASS 8 BITS TO THE USER? BNE 40$ ;;;IF NE, YES...SKIP. BIC #200,R2 ;;;OTHERWISE, CLEAR THE HIGH BIT40$:;U;; CHECK FOR POTENTIAL SWITCH INTO TERMINAL MANAGEMENT MODE.E;7 .IF DF T$$SCA; CALL TMMCHK ;;;SEE IF INPUT PUTS US IN TERMINAL MGMT MODEO9 BCS I1RET ;;;IF CS, ONE OF SWITCH CHARS SEEN...ALL DONEH .ENDC ;T$$SCA;EH; SCAN PRE-INPUT PROCESS CHARACTER RECOGNITION TABLE AND THE OUT-OF-BAND8; CHARACTER DEFINITIONS FOR THE CURRENT INPUT CHARACTER.;D1 MOV #I1CRT,R3 ;;;GET CHARACTER RECOGNITION TABLE? CMPB R2,(R3)+ ;;;CONTROL-S?, BEQ 50$ ;;;IF EQ, YES...CHECK TTSYNC STATE CMPB R2,(R3)+ ;;;CONTROL-Q?0 BNE 60$ ;;;IF NE, NO...SKIP TO CONTINUE CHECKS50$:2 BIT #S1.TSY,(R5) ;;;TERMINAL HAVE TTSYNC ENABLED? BEQ 60$ ;;;IF EQ, NO...SKIPS3 ASR R3 ;;;CONTROL-S (ASSUMES I1CRT WORD-ALIGNED)?H% BCS I1CTS ;;;IF CS, YES...HANDLE ITP0 BR I1CTQ ;;;ELSE, IT WAS CONTROL-Q...HANDLE IT60$:3 BIT #S1.PTH,(R5) ;;;TERMINAL SET TO PASSTHRU MODE?R BNE I1DEF ;;;IF NE, YES...SKIP .IF DF T$$OOB MOV R0,-(SP) ;;;SAVE REGISTER0 CALL OOBCHK ;;;SEE IF CHARACTER IS OUT-OF-BAND$ BCC 70$ ;;;IF CARRY CLEAR, NOT OOB: CALL OOBCK2 ;;;DO FURTHER CHECKING AND PROCESSING OF OOB! MOV (SP)+,R0 ;;;RESTORE REGISTERB% BCS I1DEF ;;;IF CS THEN OOB INCLUDEA BR I1RET ;;;ELSE, NOT INCLUDED%70$: MOV (SP)+,R0 ;;;RESTORE REGISTER 2 ;;;ELSE, CHARACTER NOT OOB OR IS "OOB INCLUDE"@ MOV #I1CRT+2,R3 ;;;RESTORE POINTER INTO CHAR. RECOGNITION TABLE .ENDC ;T$$OOB CMPB R2,(R3)+ ;;;CONTROL-O?( BEQ I1CTO ;;;IF EQ, YES...CHECK IT OUT< BIT #S1.RSP,(R5) ;;;READ WITH SPECIAL CHARACTER PROCESSING? BNE I1DEF .IF DF T$$CTX CMPB R2,(R3)+ ;;;CONTROL-X?( BEQ I1CTX ;;;IF EQ, YES...CHECK IT OUT .ENDC ;T$$CTX CMPB R2,(R3)+ ;;;CONTROL-C?- BEQ I1CTC ;;;IF EQ, YES...PROCESS CONTROL-C" ;;;ELSE, FALL THROUGH TO I1DEF.PAGE - .SBTTL . I1DEF - NORMAL CHARACTER PROCESSING;V;+N; **-I1DEF - HANDLE INPUT CHARACTER THAT HAS NO PRE-INPUT PROCESS SIGNIFICANCE; H; THIS ROUTINE ACCEPTS A CHARACTER FROM "ICHAR1" AND DOES THE FOLLOWING:;PB; 1. IF THE TYPE-AHEAD BUFFER IS EMPTY, CALL "IPROC" TO SEE IF THE@; CURRENT CHARACTER CAN BE PROCESSED IMMEDIATELY (BY "ICHAR2").C; 2. IF THE TYPE-AHEAD BUFFER IS NOT EMPTY OR "IPROC" INDICATES THE;; CURRENT CHARACTER CANNOT BE PROCESSED NOW, THE CHARACTERF); IS PLACED INTO THE TYPE-AHEAD BUFFER.EB; 3. IF AN ERROR WAS PREVIOUSLY DETECTED, OR THE TYPE-AHEAD BUFFER<; IS FULL, THE CHARACTER IS DISCARDED AND A BELL IS ECHOED.;R ; INPUTS:); R2 = CURRENT CHARACTER TO BE PROCESSEDO"; R5 => U.TSTA OF THE TERMINAL UCB;F ; OUTPUTS: 4; R2 = CHARACTER (IF CONTROL IS PASSED TO "ICHAR2")C; THE CHARACTER IS PLACED IN THE TABUF IF "ICHAR2" CANNOT BE CALLED ;N; REGISTERS MODIFIED: R3, R4;-;CI1DEF: .IF DF T$$SPL. MOV #120000+U.TTBF,R3 ;;;SET POINTER TO TABUF .IFF ;T$$SPLU. MOV U.TTAB-U.TSTA(R5),R3 ;;;GET TABUF POINTER" BEQ I1DEF1 ;;;IF EQ, NONE...SKIP0 BIT #1,R3 ;;;IS THIS A SINGLE-CHARACTER TABUF?9 BNE I1BEEP ;;;IF NE, YES...TABUF IS FULL SO RING A BELLO .ENDC ;T$$SPL0 TSTB 2(R3) ;;;ANY CHARACTERS ALREADY BUFFERED?9 BNE I1BUFR ;;;IF NE, YES...SKIP TO BUFFER THIS ONE ALSOP;EE; I1DEF1 - NOTHING IS CURRENTLY BUFFERED. CHECK TO SEE IF WE NEED TO:5; REQUEST A FORK FOR AN INPUT COUNT STATE TRANSITION.0;UI1DEF1:; .IF DF T$$ICS ASSUME S1.IBY,200% TSTB (R5) ;;;IS INPUT ALREADY BUSY?B0 BMI 10$ ;;;IF MI, YES...WON'T NEED TO SEND ICS7 BIT #S3.ICE,4(R5) ;;;IS INPUT COUNT STATE AST ENABLED?E5 BEQ 10$ ;;;IF EQ, NO...TRY TO PROCESS CH00]z1ztblARACTER NOWN .IF DF T$$SCA@ BIT #S5.TMM,U.TST5-U.TSTA(R5) ;;;TERMINAL IN TERM. MANGT. MODE?) BNE 10$ ;;;NE -> YES= -> DON'T SENT ICS  .ENDC ;T$$SCA? MOV #FR.ICS,R3 ;;;SET REQUEST FOR INPUT COUNT STATE TRANSITIONK CALL FORK ;;;REQUEST THE FORKI8 BR I1BUFR ;;;CAN'T PROCESS CHARACTER NOW, SO BUFFER IT10$: .ENDC ;T$$ICS;E?; CHECK TO SEE IF CURRENT CHARACTER CAN BE PROCESSED RIGHT AWAYT;31 CALL IPROC ;;;CAN WE PROCESS THE CHARACTER NOW?B% BCC ICHAR2 ;;;IF CC, YES...GO DO ITH;CO; I1BUFR - CHARACTER CANNOT BE PROCESSED NOW. PUT IT IN THE TYPE-AHEAD BUFFER. ;GI1BUFR: .IF DF T$$REDD BIT #S5.BCC!S5.DAO!S5.VER,U.TST5-U.TSTA(R5) ;;;PREVIOUS HARD ERROR?2 BNE I1BEEP ;;;IF NE, YES...REJECT THIS CHARACTER0 MOV R2,-(SP) ;;;COPY CHARACTER PLUS ERROR FLAGS8 CLRB (SP) ;;;CLEAR LOW BYTE - LEAVE FLAGS IN HIGH BYTEC BIS (SP)+,U.TST5-U.TSTA(R5) ;;;SAVE ERROR FLAGS (IF ANY) FOR LATER3 .ENDC ;T$$RED; CALL PCTAB ;;;PUT THIS CHARACTER IN THE TYPE-AHEAD BUFFER.9 BCS I1BEEP ;;;IF CS, TYPE-AHEAD BUFFER FULL...RING BELLWI1RET: RETURN ;;;ALL DONEF; <; SOME EVENT REQUIRES ECHOING A BELL AT THE USER'S TERMINAL.;TI1BEEP:A2 CALLR BELL ;;;SOME ERROR REQUIRES ECHOING A BELL.PAGER/ .SBTTL . SPECIAL CHARACTER PROCESSING ROUTINESC% .SBTTL . I1CTS - CONTROL-S HANDLINGE;L7; I1CTSL - LOCK OUT INTERRUPTS AND STOP TERMINAL OUTPUTS;RI1CTSL:E! CALL LOCKI ;LOCK OUT INTERRUPTSI1CTS:( BIS #S2.CTS,2(R5) ;;;SET CONTROL-S FLAG. MOV #CT.STP,R2 ;;;SET INDEX FOR "STOP OUTPUT"1 CALLR CTRD ;;;CALL CONTROLLER DEPENDENT ROUTINER% .SBTTL . I1CTQ - CONTROL-Q HANDLINGQ;E9; I1CTQL - LOCK OUT INTERRUPTS AND RESUME TERMINAL OUTPUTL;BI1CTQL::! CALL LOCKI ;LOCK OUT INTERRUPTSPI1CTQ:* BIC #S2.CTS,2(R5) ;;;CLEAR CONTROL-S FLAG0 MOV #CT.RES,R2 ;;;SET INDEX FOR "RESUME OUTPUT"@ BITB #US.OIU,U.STS-U.TSTA(R5) ;;;EXPECTING AN OUTPUT INTERRUPT?$ BNE I1RET ;;;IF NE, NO...JUST EXITI1CTRD:1 CALLR CTRD ;;;CALL CONTROLLER DEPENDENT ROUTINES.PAGES% .SBTTL . I1CTO - CONTROL-O HANDLING ;;I; I1CTO - PROCESS OUTPUT DISCARD REQUEST. IF TASK OUTPUT IS IN PROGRESS,QA; IT IS ABORTED. IF THE TERMINAL IS ATTACHED, THE OUTPUT DISCARDB>; STATE FLAG IS COMPLEMENTED TO ENABLE/DISABLE FURTHER OUTPUT.;SI1CTO:2 TST U.ATT-U.TSTA(R5) ;;;IS THE TERMINAL ATTACHED?2 BEQ 10$ ;;;IF EQ, NO...JUST ABORT CURRENT OUTPUT8 BIT #S2.CTO,2(R5) ;;;IS OUTPUT ALREADY BEING DISCARDED?7 BNE 30$ ;;;IF NE, YES...SKIP TO ENABLE FURTHER OUTPUT 8 BIS #S2.CTO,2(R5) ;;;SET FLAG TO DISABLE FURTHER OUTPUT10$: .IF DF T$$SPL* MOV #120000,R4 ;;;SET POINTER TO THE UCBX .IFF ;T$$SPLS3 MOV U.TUX-U.TSTA(R5),R4 ;;;GET POINTER TO THE UCBXO+ BEQ 40$ ;;;IF EQ, NONE...IGNORE CONTROL-OT .ENDC ;T$$SPL. MOV U.TCO(R4),R3 ;;;GET CURRENT OUTPUT PACKET4 BEQ 40$ ;;;IF EQ, NOT DOING TASK OUTPUT...ALL DONE@ BITB #US.OIU,U.STS-U.TSTA(R5) ;;;EXPECTING AN OUTPUT INTERRUPT?! BNE 40$ ;;;IF NE, NO...ALL DONE  .IF DF T$$RPR2 TST U.TFPB(R4) ;;;IS OUTPUT FROM A READ W/PROMPT?8 BNE 20$ ;;;IF NE, YES...CONTROL-O IS IGNORED DURING IT .ENDC ;T$$RPR: BITB #TF.WBT,I.FCN(R3) ;;;WRITE-BREAKTHROUGH IN PROGRESS?* BNE 40$ ;;;IF NE, YES...IGNORE CONTROL-O20$:4 INC (R3) ;;;SET OUTPUT COMPLETION STATUS TO IS.SUC CALL ABOX ;;;ABORT OUTPUTO) CALLR ODONE ;;;SIMULATE FINAL INTERRUPT ;K%; EXIT FROM THE OUTPUT DISCARD STATE.-;S30$:/ BIC #S2.CTO,2(R5) ;;;CLEAR OUTPUT DISCARD FLAGI40$: RETURND.PAGE% .SBTTL . I1CTC - CONTROL-C HANDLING ;PH; I1CTC - FLUSH TYPE-AHEAD BUFFER, THEN PASS CONTROL-C TO INPUT PROCESS.;NI1CTC: .IF DF T$$SCA: BIT #S3.TME,4(R5) ;;;IS TERMINAL MANAGEMENT MODE ENABLED?: BNE I1DEF ;;;IF NE, YES...DON'T RECOGNIZE CONTROL-C HERE .ENDC ;T$$SCA CALL I1CTX1 ;;;FLUSH TABUF/ CALL I1CTQ ;;;RESUME OUTPUT IF IT WAS STOPPEDI% MOVB #CH.CTC,R2 ;;;RESTORE CHARACTERP' BR I1DEF1 ;;;GO PROCESS THE CONTROL-CO% .SBTTL . I1CTX - CONTROL-X HANDLING:;RL; I1CTXL - FLUSH TYPE-AHEAD BUFFER AND ENABLE UNSOLICITED ASTS IF NECESSARY.;AI1CTXL::!00ezLztkTADATADATADATADATADATA CALL LOCKI ;LOCK OUT INTERRUPTSCI1CTX:I1CTX1: .IF DF T$$REDA BIC #S5.BCC!S5.DAO!S5.VER,U.TST5-U.TSTA(R5) ;;;CLEAR ERROR FLAGSF .ENDC ;T$$RED; =; UNLOCK UNSOLICITED INPUT AST CONTROL BLOCK IF THERE IS ONE.F;H .IF DF T$$CCA .IF DF T$$SPL? MOV 120000+U.TAST,R3 ;;;GET UNSOLICITED INPUT AST BLOCK IF ONE1 .IFF ;T$$SPLS$ MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX BEQ 10$ ;;;IF EQ, NONE...SKIP-< MOV U.TAST(R4),R3 ;;;GET UNSOLICITED INPUT AST BLOCK IF ONE .ENDC ;T$$SPL BEQ 10$ ;;;IF EQ, NONE...SKIPCC BICB #AF.LCK,A.PRM+5(R3) ;;;UNLOCK AST BLOCK IN CASE IT WAS LOCKEDU10$: .ENDC ;T$$CCA;OJ; FLUSH THE TYPE-AHEAD BUFFER BY RESETTING THE FILL AND RETRIEVAL POINTERSH; AND THE NUMBER OF ACTIVE BYTES. ALSO CALL SNDXON WHICH WILL OUTPUT AN+; XON IF WE HAVE PREVIOUSLY OUTPUT AN XOFF.K;  .IF DF T$$SPL. MOV #120000+U.TTBF,R3 ;;;SET POINTER TO TABUF .IFF ;T$$SPLO. MOV U.TTAB-U.TSTA(R5),R3 ;;;GET TABUF POINTER+ BEQ 20$ ;;;IF EQ, NONE...NOTHING TO RESETB0 BIT #1,R3 ;;;IS THIS A SINGLE-CHARACTER TABUF?2 BEQ 30$ ;;;IF EQ, NO...SKIP TO RESET LARGE TABUF6 CLR U.TTAB-U.TSTA(R5) ;;;FLUSH SINGLE-CHARACTER TABUF20$: RETURN ;;;ALL DONE 30$: .ENDC ;T$$SPL6 CLR (R3)+ ;;;INITIALIZE STORE AND RETRIEVAL POINTERS+ CLRB (R3) ;;;CLEAR NUMBER OF ACTIVE BYTEST* CALLR SNDXON ;;;SEND AN XON IF NECESSARY.PAGET% .SBTTL TERMINAL DRIVER INPUT PROCESS = .SBTTL . ICHAR2 - INITIALIZATION AND INPUT STATE RECOGNITIONQ;$ ;;+5; **-ICHAR2 - INITIATE PROCESSING OF INPUT CHARACTER.S;LL; THIS ROUTINE INITIATES PROCESSING OF A CHARACTER ON THE "INSIDE" (SOFTWAREL; SIDE) OF THE TYPE-AHEAD BUFFER. IT IS ENTERED FROM "I1DEF" ABOVE AND FROMJ; "NXTIC" IN MODULE TTODN WHEN A CHARACTER HAS BEEN REMOVED FROM THE TYPE-J; AHEAD BUFFER FOR PROCESSING. AN ALTERNATE ENTRY POINT "ICH2A" IS CALLEDE; DURING POST-FORK PROCESSING (ROUTINE "FPPFP" IN MODULE TTCIS). THE.%; FOLLOWING ACTIONS MAY BE PERFORMED:U;TF; 1. IF RECEIVER ERROR DETECTION IS SUPPORTED (T$$RED) AND THE CURRENT=; CHARACTER CAUSED AN ERROR, THE PENDING INPUT IS TERMINATEDA); WITH AN APPROPRIATE COMPLETION STATUS.TC; 2. CONVERSION FROM LOWER TO UPPER CASE IS PERFORMED IF NECESSARY.N@; 3. THE CHARACTER IS SAVED IN THE SINGLE-CHARACTER ECHO BUFFER.0; 4. THE INTER-CHARACTER ARRIVAL TIMER IS RESET.D; 5. DISPATCH TO A PROCESSING ROUTINE DEPENDING ON THE CURRENT INPUT2; STATE OR THE TYPE OF CHARACTER BEING PROCESSED.C; 6. PASS CONTROL TO "I2ECHO" TO INITIATE NECESSARY ECHOING FOR THEE; INPUT CHARACTER.R;T ; INPUTS:; R2 = CHARACTER "; R5 => U.TSTA OF THE TERMINAL UCB:; IF THE CHARACTER WILL NEED ECHOING, OUTPUT MUST BE IDLE.;L ; OUTPUTS: 1; R2 = CHARACTER (IF CONTROL PASSED TO "I2ECHO")R; R4 => UCBX FOR THE TERMINALE;C!; REGISTERS ALTERED: R2, R3, R4R;-;LICHAR2:: .IF DF T$$SPL* MOV #120000,R4 ;;;SET POINTER TO THE UCBX .IFF ;T$$SPLS, MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX POINTER4 BEQ I1RET ;;;IF EQ, NONE...RETURN (COULD HAPPEN...- ;;; ...WHEN CTRL-C IS TYPED ON AN IDLE...P( ;;; ...SLAVED TERMINAL, FOR EXAMPLE) .IFTF ;T$$SPL .IF DF T$$RED;LJ; EXAMINE THE INPUT CHARACTER TO DETECT A HARD RECEIVE ERROR. IF THERE IS>; ONE, TERMINATE THE CURRENT INPUT WITH AN APPROPRIATE STATUS.;9 BIT #S5.BCC!S5.DAO!S5.VER,R2 ;;;ANY HARD RECEIVE ERRORS?F, BEQ 20$ ;;;IF EQ, NO...SKIP ERROR CHECKING7 MOV #IE.DAO&377,R3 ;;;ASSUME ERROR DUE TO DATA OVERRUN; ASSUME S5.DAO,40000 ROL R2 ;;;DATA OVERRUN?R& BMI 10$ ;;;IF MI, YES...RETURN ERROR4 MOV #IE.BCC&377,R3 ;;;ASSUME FRAMING ERROR OCCURRED ASSUME S5.BCC,S5.DAO/2F ROL R2 ;;;FRAMING ERROR?& BMI 10$ ;;;IF MI, YES...RETURN ERROR7 MOV #IE.VER&377,R3 ;;;ELSE, ERROR MUST BE PARITY ERRORA10$: ASSUME U.TCI,0T" MOV R3,@(R4)+ ;;;STORE ERROR CODE' JMP IDONE ;;;FINISH THE INPUT REQUESTV20$: .ENDC ;T$$RED .IFT ;T$$SPL @ MOVB R2,U.TECO-U.TSTA(R5) ;;;SAVE THE CHARACTER BEING PROCESSED .IFF ;T$$SPLD9 MOVB R2,U.TECB(R4) ;;;SAVE THE CHARACTER BEING PROCESSED. .ENDC ;T$$S00mz1ztblPL;E*; RESET THE INTER-CHARACTER ARRIVAL TIMER.;A .IF NE T$$UTO2 MOVB #T$$UTO,U.TITI(R4) ;;;INITIALIZE INPUT TIMER .ENDC ;T$$UTO ASSUME S1.USI,100000;- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT?M BMI 30$ ;;;IF MI, YES...SKIP ASSUME U.TCI,0J1 MOV (R4),R3 ;;;GET CURRENT INPUT REQUEST PACKETN= MOVB I.PRM+6(R3),U.TITI(R4) ;;;INIT USER-DEFINED TIMER VALUEA30$:;A-; DETERMINE ACTION DEPENDENT ON U.TSTA FLAGS.V;2 .IF DF T$$ACDA MOV #UA.PRO!UA.ECH!UA.PUT,U.AFLG-U.TSTA(R5) ;;;SET DEFAULT FLAGS ( BIT #S1.RNE,(R5) ;;;DOING READ NO ECHO? BEQ 35$ ;;;BR IF NOT2 BIC #UA.ECH,U.AFLG-U.TSTA(R5) ;;;INDICATE NO ECHO35$:8 TST U.ACB-U.TSTA(R5) ;;;DOES THIS TERMINAL HAVE AN ACD?, BEQ 40$ ;;;IF EQ, NO...SKIP ACD PROCESSING2 MOV R0,-(SP) ;;;SAVE REGISTER NEEDED FOR ACD CALL7 MOV #A.PROC,R0 ;;;SET CHARACTER PROCESSING ENTRY POINTU CALL $SWACD ;;;CALL ACD0! MOV (SP)+,R0 ;;;RESTORE REGISTERT? BIT #UA.PRO,U.AFLG-U.TSTA(R5) ;;;PROCESS THIS CHARACTER AS IS?A2 BEQ I2ECHO ;;;IF EQ, NO...TREAT AS READ-PASS-ALL40$: .ENDC ;T$$ACD* BIT #S3.RUB,4(R5) ;;;RUB-OUT IN PROGRESS? BEQ 50$ ;;;SKIP IF NON" JMP I2RUB1 ;;;DO RUBOUT SEQUENCE50$: .IF DF T$$ESC+ BIT #S1.ESC,(R5) ;;;IN AN ESCAPE SEQUENCE?S BEQ 60$ ;;;IF EQ, NO...SKIPP1 JMP I2ESC2 ;;;CONTINUE WITH THE ESCAPE SEQUENCEC60$: .IFTF ;T$$ESC .IF DF T$$OOB" MOV R4,-(SP) ;;;SAVE REGISTERS.... MOV R0,-(SP) ;;;THAT ARE DESTROYED BY OOBCHK % CALL OOBCHK ;;;WAS THIS CHAR. OOB? A" MOV (SP)+,R0 ;;;RESTORE REGISTERS MOV (SP)+,R4 ;;;...- BCS I2ECHO ;;;CS->OOB->NO SPECIAL FUNCTIONS; .ENDC ;T$$OOB0 BIT #S1.RST,(R5) ;;;READ WITH TERMINATOR TABLE?: BEQ 70$ ;;;IF EQ, NOT DOING READ-WITH-TERMINATORS...SKIP .IFT ;T$$ESCU@; IF THIS IS NOT AN EXTENDED I/O, CHECK FOR SPECIAL TERMINATORS.>; IF THIS IS EXTENDED I/O, AND THE CHARACTER IS AN ESCAPE WITHA; ESCAPE SEQUENCES RECOGNIZED, ALLOW THIS TO START AN ESCAPE SEQE; RATHER THAN TERMINATE A READ.  .IF DF T$$EIO& BIT #S6.EIO,U.TST6-U.TSTA(R5) ;;;EIO?. BEQ 65$ ;;;EQ, NOT EIO, CHECK FOR TERMINATORD BIT #U2.ESC,U.CW2-U.TSTA(R5) ;;;DOES TERMINAL GENERATE ESCAPE SEQ.?! BEQ 65$ ;;;IF EQ, CHECK FOR RST;5 BIT #S1.RES,(R5) ;;;DOES TASK WANT ESCAPE SEQUENCES? ( BEQ 65$ ;;;IF EQ,NO .. CHECK FOR RST & CMPB R2,#CH.ESC ;;;IS THIS AN ESCAPE?' BEQ 70$ ;;;IF ESC, SKIP CHECK FOR RSTI' CMPB R2,#233 ;;;IS THIS A CSI ESCAPE?G' BEQ 70$ ;;;IF CSI, SKIP CHECK FOR RSTE65$: .ENDC ;T$$EIO .ENDC ;T$$ESC. CALL I2RST ;;;CHECK FOR A SPECIAL TERMINATOR1 ;;;IF WE RETURN, CHARACTER WAS NOT TERMINATORR) ;;;IF TERMINATOR, STATUS HAS BEEN SETM70$:+ BIT #S1.PTH,(R5) ;;;TERMINAL IN PASSTHRU ? 2 BNE I2ECHO ;;;IF NE, YES...PROCESS CHARACTER NOW4 BIT #S1.RSP,(R5) ;;;TERMINAL IN SPECIAL PROCESSING?3 BNE CASCHK ;;;NE => YES CHECK FOR CASE CONVERSION;9 .SBTTL . ICH2A - DISPATCH DEPENDING ON CURRENT CHARACTER ;AJ; ICH2A - DETERMINE ACTION DEPENDENT ON CHARACTER. SPECIAL CHARACTERS ARED; DIVIDED INTO TWO DISPATCH TABLES. IF THE CURRENT CHARACTER IS NOTA; IN THE FIRST TABLE, THE DISPATCH WILL BE TO "EDDEF". HERE, THETC; EDIT CHARACTER (OTHER THAN ^R, ^U, AND DELETE) DISPATCH TABLE IS B; CHECKED. IF NOT IN THAT TABLE, PROCESSING CONTINUES AT "I2DEF".;5 .ENABL LSB  .IF DF T$$EIO ?8 BIT #S1.RNF,(R5) ;;;ARE WE DOING A READ WITH NO FILTER?: BNE EDDEF ;;;IF NE, YES...SKIP THE CHECK FOR EDIT CHARS. .ENDC ;T$$EIOICH2A::N; MOV #EDCRT,R3 ;;;POINT TO EDIT CHARACTER RECOGNITION TABLEN. CMPB R2,#CH.SP ;;;IS CHARACTER IN THIS TABLE?( BLO 10$ ;;;IF LO, YES...SCAN THE TABLE0 CMPB R2,#CH.RUB ;;;ELSE, IS CHARACTER A RUBOUT?7 BNE I2DEF ;;;IF NE, NO...MUST BE A "NORMAL" CHARACTER " BR 10$ ;;;COULD BE IN THIS TABLE;IG; EDDEF - CHARACTER IS NOT IN FIRST RECOGNITION TABLE. SEE IF IT IS AN18; ENABLED EDIT CHARACTER (OTHER THAN ^R, ^U, OR RUBOUT).; EDDEF:: 4 MOV #I2CRT,R3 ;;;ASSUME WE WANT TO SCAN FIRST TABLE10$:1 CALLR CHRDSP ;;;DISPATCH ACCORDING TO CHARACTERE .DSABL LSBN;CP; I2DEF - IF THE TERMINAL DOES NOT S00uzLztkTADATADATADATADATADATAUPPORT LOWERCASE, SEE IF THE INPUT CHARACTERD; IS ONE OF THE ALTERNATE ESCAPE CHARACTERS (RIGHT BRACE AND TILDE).; G; EKDEF - COME HERE TO ECHO TERMINATOR IN READ WITH SPECIAL TERMINATORSE;IEKDEF:: I2DEF:: ) CMPB R2,#233 ;;;SPECIAL CASE CSI ESCAPEI BNE CASCHK ;;;BRANCH AROUNDT/ JMP I2ESC ;;;TO ALLOW IT TO START ESCAPE SEQ.CASCHK:R .IF DF T$$EIO= BIT #S6.RLU,U.TST6-U.TSTA(R5) ;;;DOING CONVERT TO UPPERCASE?R BNE 5$ ;;;BR IF YES. .ENDC ;T$$EIOA BIT #U2.LWC,U.CW2-U.TSTA(R5) ;;;DOES TERMINAL SUPPORT LOWERCASE?C5 BNE I2ECHO ;;;IF NE, YES...SKIP OTHER ESCAPE CHECKSR5$: 4 BIT #S1.RSP,(R5) ;;;TERMINAL IN SPECIAL PROCESSING?: BNE I2CASE ;;;NE => YES => NOT TERM BUT NEEDS CONVERSION/ CMPB R2,#CH.RBR ;;;IS CHARACTER A RIGHT BRACE?I, BEQ 10$ ;;;IF EQ, YES...TREAT AS AN ESCAPE) CMPB R2,#CH.TLD ;;;IS CHARACTER A TILDE?K6 BNE I2CASE ;;;IF NE, NO...SKIP TO DO CASE CONVERSION' ;;;OTHERWISE, TREAT IT AS AN ESCAPE;10$:6 JMP I2ESC1 ;;;PROCESS ESCAPE CHARACTER AS TERMINATOR;D3; I2CASE - CONVERT LOWER TO UPPER CASE IF REQUIRED.N;YI2CASE: 1 CMPB R2,#340 ;;;EIGHT-BIT LOWER CASE CHARACTER?R: BHI 10$ ;;;IF HIS, YES...CONVERT TO EIGHT-BIT UPPER CASE' CMPB R2,#CH.LCZ ;;;UPPER END GRAPHICS?H* BHI I2ECHO ;;;IF HI, YES...DON'T CONVERT& CMPB R2,#CH.LCA ;;;LOWER CASE LETTER?) BLO I2ECHO ;;;IF LO, NO...DON'T CONVERT10$:; BICB #40,R2 ;;;CONVERT CHARACTER FROM LOWER TO UPPER CASER .IF DF T$$SPL9 MOVB R2,U.TECO-U.TSTA(R5) ;;;UPDATE SAVED CHARACTER ALSO .IFF ;T$$SPL 2 MOVB R2,U.TECB(R4) ;;;UPDATE SAVED CHARACTER ALSO .ENDC ;T$$SPL;4J; FALL THRU TO "I2ECHO" TO PROCESS CHARACTER WITHOUT SPECIAL SIGNIFICANCE.;I.PAGE 6 .SBTTL . I2ECHO - INITIATE ECHO OF AN INPUT CHARACTER;I;-M; **-I2ECHO - PUT CHARACTER IN INPUT BUFFER AND INITIATE ECHOING IF NECESSARYI;HL; THIS ROUTINE PROCESSES A CHARACTER THAT HAD NO SPECIAL SIGNIFICANCE DURINGG; PROCESSING IN "ICHAR2" AND "ICH2A". THE FOLLOWING ACTIONS MAY OCCUR:;;A9; 1. THE CHARACTER IS PLACED IN THE CURRENT INPUT BUFFER.CA; 2. IF ECHO IS SUPPRESSED, A TRANSFER IS MADE TO THE "ECHO DONE"L5; PROCESSING ROUTINES TO CHECK FOR INPUT COMPLETION.S>; 3. ECHO OF THE CHARACTER OR AN EXPANSION OF THE CHARACTER IS ; INITIATED.R;I ; INPUTS:; R2 = CHARACTER ; R4 => UCBX FOR THE TERMINALE"; R5 => U.TSTA OF THE TERMINAL UCB.; IF ECHOING IS REQUIRED, OUTPUT MUST BE FREE.;I; OUTPUTS: NONER;S; REGISTERS MODIFIED: R2, R3;-;OI2ECHO:O .IF DF T$$ACD@ BIT #UA.PUT,U.AFLG-U.TSTA(R5) ;;;PUT CHARACTER IN INPUT BUFFER? BEQ 10$ ;;;IF EQ, NO...SKIPR .IFTF ;T$$ACD6 BIT #S1.RST,(R5) ;;;DOING READ W/ SPECIAL TERMINATORS, BEQ 5$ ;;;IF NOT, THIS SHOULD GO IN BUFFER I ASSUME U.TCI,0E# TST @(R4) ;;;HAS STATUS BEEN SET? - BNE 10$ ;;;IF IT HAS, THIS WAS A TERMINATORE5$:5. CALL PUTNIC ;;;PUT CHARACTER IN INPUT BUFFER10$: .IFT ;T$$ACDE9 BIT #UA.SPE,U.AFLG-U.TSTA(R5) ;;;SPECIAL ECHO REQUESTED?2 BEQ I2ECHA ;;;IF EQ, NO...SKIPI2SPE:1 MOV U.ACB-U.TSTA(R5),R2 ;;;GET ACD CONTROL BLOCKN? ADD #A.IMAP,R2 ;;;POINT TO INTERRUPT BUFFER PARAMETERS OFFSETS9 MOV (R2)+,U.TOP(R4) ;;;SET ECHO BUFFER APR BIAS (A.IMAP)B1 MOV (R2)+,R3 ;;;SET ECHO BUFFER ADDRESS (A.IBUF)S0 MOV (R2),R2 ;;;SET ECHO BUFFER LENGTH (A.ILEN)9 CALLR MECHO ;;;OUTPUT THE SPECIAL ECHO USING MULTI-ECHOCI2ECHA:C5 BIT #UA.ECH,U.AFLG-U.TSTA(R5) ;;;ECHO THE CHARACTER?C4 BEQ ECHD2 ;;;IF EQ, NO...PRETEND AN ECHO COMPLETED .ENDC ;T$$ACD( BIT #S1.RNE,(R5) ;;;IS ECHO SUPPRESSED?5 BNE ECHD2 ;;;IF NE, YES...PRETEND AN ECHO COMPLETEDP2 BIT #S1.PTH,(R5) ;;;IS TERMINAL IN PASSTHRU MODE?5 BNE I2ECHC ;;;IF NE, YES...ECHO CHARACTER AS ITSELFM;BP; I2EXPC - PERFORM CHARACTER EXPANSION AND INITIATE ECHO OF CHARACTER OR STRING.;RI2EXPC:A; CALL EXPCHR ;;;EXPAND CHARACTER TO GET PROPER ECHO STRINGE7 BEQ I2ECHC ;;;IF EQ, SKIP TO ECHO CHARACTER AS ITSELFE7 BCC 10$ ;;;IF CC, NO DEFERRED ECHO IS REQUIRED...SKIPC5 BIS #S1.DEC,(R5) ;;;INDICATE DEFERRED ECHO IS NEEDEDC10$:4 CALLR ECHSTR ;;;ECHO STRIN00}z1ztblG DESCRIBED BY R2 AND R3;PI; I2ECHC - ECHO THE CHARACTER STORED IN THE SINGLE-CHARACTER ECHO BUFFER.;;NI2ECHC:E .IF DF T$$SPL2 MOV R5,R3 ;;;SET UP R3 TO POINT TO THE SINGLE...> ADD #U.TECO-U.TSTA,R3 ;;; ...CHARACTER ECHO BUFFER IN THE UCB .IFF ;T$$SPLR2 MOV R4,R3 ;;;SET UP R3 TO POINT TO THE SINGLE...8 ADD #U.TECB,R3 ;;; ...CHARACTER ECHO BUFFER IN THE UCBX .ENDC ;T$$SPL< CALLR ECHCHR ;;;ECHO THE SINGLE CHARACTER POINTED TO BY R3.PAGEE; .SBTTL . ECHD1 - COMPLETE PROCESSING OF AN INPUT CHARACTER3;P;+>; **-ECHD1 - PROCESS COMPLETION OF A CHARACTER OR STRING ECHO.;FG; THIS ROUTINE IS ENTERED WHEN AN ECHO IS DONE. IT PERFORMS ONE OF THE =; FOLLOWING ACTIONS (LISTED FROM HIGHEST TO LOWEST PRIORITY):B;E>; 1. IF DEFERRED PROCESSING IS REQUIRED, PICK UP THE CHARACTER8; SAVED IN THE SINGLE-CHARACTER ECHO BUFFER AND PROCESS; IT FROM THE BEGINNING.N@; 2. IF DEFERRED ECHO IS REQUIRED, JUST ECHO THE CHARACTER SAVED'; IN THE SINGLE-CHARACTER ECHO BUFFER.EE; 3. IF THE CURRENT INPUT HAS COMPLETED, REQUEST A FORK TO HANDLE IT.LF; 4. DISPATCH ON THE CURRENT INPUT STATE VARIABLE (U.TISV). THIS WILL?; EITHER CONTINUE ECHOING OF SPECIAL CASES (E.G. ^R AND ^U) ORLB; WILL MAKE A FORK REQUEST TO GET THE NEXT AVAILABLE I/O REQUEST.N; THE ALTERNATE ENTRY POINT "ECHD2" IS ENTERED WHEN PROCESSING FOR A CHARACTER*; IS COMPLETED AND NO ECHOING IS REQUIRED.; ; INPUTS:; R4 => UCBX FOR THE TERMINALO"; R5 => U.TSTA OF THE TERMINAL UCB; S1.OBY = 0 (OUTPUT IDLE);. ; OUTPUTS:N; UCB UPDATED AS REQUIREDE;A; REGISTERS MODIFIED: R2, R3;-;TECHD1::T4 MOVB 1(R5),R3 ;;;GET DEFERRED PROCESSING/ECHO FLAGS .IF DF T$$ACD> BIT #UA.CAL,U.AFLG-U.TSTA(R5) ;;;CALL ACD BACK FOR MORE ECHO? BEQ 10$ ;;;IF EQ, NO...SKIPE MOV R0,-(SP) ;;;SAVE REGISTER1 MOV #A.CALL,R0 ;;;SET ECHO CALL BACK ENTRY POINTT CALL $SWACD ;;;CALL THE ACDN! MOV (SP)+,R0 ;;;RESTORE REGISTER41 BR I2SPE ;;;BRANCH BACK TO CONTINUE ECHO OUTPUTE10$: .ENDC ;T$$ACD .IF DF T$$SPLE MOVB U.TECO-U.TSTA(R5),R2 ;;;RETRIEVE CHARACTER (IN CASE DEFERRED...2* ;;; ...PROCESSING OR ECHO IS REQUIRED) .IFF ;T$$SPLS> MOVB U.TECB(R4),R2 ;;;RETRIEVE CHARACTER (IN CASE DEFERRED...* ;;; ...PROCESSING OR ECHO IS REQUIRED) .ENDC ;T$$SPL@ BIC #S1.DPR!S1.DEC,(R5) ;;;CLEAR DEFERRED PROCESSING/ECHO FLAGS ASSUME S1.DPR,400) ROR R3 ;;;DEFERRED PROCESSING REQUIRED?R$ BCS ICH2A ;;;IF CS, YES...GO DO IT ASSUME S1.DEC,S1.DPR*2C# ROR R3 ;;;DEFERRED ECHO REQUIRED?% BCS I2EXPC ;;;IF CS, YES...GO DO IT5;2C; ECHD2 - CHECK TO SEE IF THE CURRENT INPUT BUFFER HAS BEEN FILLED.R;HECHD2:;)F; EKESC,EKAES - ESCAPE OR ALTERNATE ESC WAS SEEN AS SPECIAL TERMINATOR;FEKESC::EKAES::. .IF DF T$$ACD1 BIT #UA.COM,U.AFLG-U.TSTA(R5) ;;;COMPLETE INPUT?E BEQ 10$ ;;;IF EQ, NO...SKIPS1 MOV U.ACB-U.TSTA(R5),R3 ;;;GET ACD CONTROL BLOCKE2 MOV A.IOS(R3),@(R4)+ ;;;SET I/O COMPLETION STATUS$ BR IDONE ;;;FORK TO COMPLETE INPUT10$: .ENDC ;T$$ACD ASSUME U.TCI,0S2 TSTB @(R4)+ ;;;HAS A COMPLETION STATUS BEEN SET?6 BNE IDONE ;;;IF NE, YES...FORK TO COMPLETE THE INPUT/ TST U.TIC-2(R4) ;;;IS THE CURRENT BUFFER FULL?E BNE 20$ ;;;IF NE, NO...SKIPE1 BIT #S1.IBF,(R5) ;;;ARE WE DOING BUFFERED INPUT?5 BEQ IDONE ;;;IF EQ, NO...FORK TO COMPLETE THE INPUTB;1E; WE ARE DOING BUFFERED INPUT, AND JUST FILLED UP THE CURRENT BUFFER.LD; SEE IF THERE IS ANOTHER BUFFER LINKED TO THE CURRENT (COULD BE THED; CASE IF THE OPERATOR DID RUBOUT OR CTRL-U, OR IF WE ARE PROCESSINGE; CTRL-R ECHO). IF THERE IS, UPDATE UCB. IF THERE IS NOT, FORK TO GETE; ANOTHER BUFFER.P;E ASSUME U.TIP,U.TCI+221 MOV @(R4)+,R2 ;;;GET NEXT BUFFER IF THERE IS ONE : BEQ IDONE1 ;;;IF EQ, THERE IS NONE...FORK TO GET ANOTHER ASSUME U.TTIC,U.TIP+6# CMP (R4)+,(R4)+ ;;;POINT TO U.TTICB' CALL NXTIB ;;;START USING NEXT BUFFERJ6 BEQ IDONE1 ;;;IF EQ, NOT ONE...WE ARE DONE AFTER ALL' CMP -(R4),-(R4) ;;;POINT BACK TO U.TIP ;TN; CONSULT INPUT STATE VARIABLE TO SEE WHAT TO DO NEXT. NOTE THAT IN AN ESCAPEN; 00zLztkTADATADATADATADATADATASEQUENCE, THE STATE VARIABLE IS USED WHEN THE NEXT CHARACTER OF THE SEQUENCEL; ARRIVES...NOT WHEN A PREVIOUS CHARACTER HAS BEEN ECHOED, WHERE WE ARE NOW.L; SO IF WE ARE IN AN ESCAPE SEQUENCE, JUST FORK FOR THE NEXT REQUEST PACKET.;T20$:( TST -(R4) ;;;POINT BACK TO TOP OF UCBX .IF DF T$$ESC; H; THE FOLLOWING ASSUMES THAT THE FIRST ENTRY IN THE INPUT STATE DISPATCHG; TABLE POINTS TO "CFGRQ", WHICH WILL FORK TO GET A NEW REQUEST PACKET.I;E+ CLR R2 ;;;SET UP FOR STATE TABLE DISPATCHA@ BIT #S1.ESC,(R5) ;;;ARE WE IN THE MIDDLE OF AN ESCAPE SEQUENCE?7 BNE NXSTA1 ;;;IF NE, YES...SKIP NORMAL STATE DISPATCHE .ENDC ;T$$ESC;EP; NXSTAT - DISPATCH ON THE CURRENT VALUE OF THE INPUT STATE VARIABLE. THIS WILLL; SEQUENCE THROUGH THE INPUT STATES UNTIL IT FORKS FOR A NEW REQUEST PACKET.;NXSTAT: ) MOVB U.TISV(R4),R2 ;;;GET STATE VARIABLEH ASL R2 ;;;MAKE WORD INDEXLNXSTA1:T4 CALLR @ISDSP(R2) ;;;DISPATCH ON CURRENT INPUT STATEA .SBTTL . IDONE - QUEUE FORK REQUEST FOR INPUT REQUEST COMPLETION5;;H; IDONE - QUEUE A FORK REQUEST BECAUSE A TERMINATOR CHARACTER WAS SEEN.F; THE LINK WORD IN THE PACKET CONTAINS THE COMPLETION STATUS (IF IT IS:; A SOLICITED READ). THE INPUT STATE FLAGS ARE ALSO RESETK; IDONE1 - QUEUE A FORK REQUEST BECAUSE THE (CURRENT) INPUT BUFFER IS FULL.E;IDONE::T5 CALL IRESET ;;;RESET THE TERMINAL INPUT STATE FLAGS IDONE1:W; MOV #FR.IRD,R3 ;;;FORK TO PROCESS INPUT REQUEST COMPLETIONT CALLR FORK ;;;DO IT .PAGE ? .SBTTL . SPECIAL INPUT STATE AND CHARACTER PROCESSING ROUTINES-0 .SBTTL . I2RST - READ WITH SPECIAL TERMINATORS;W;-9; **-I2RST - READ WITH SPECIAL TERMINATORS IS IN PROGRESS ;TL; THIS ROUTINE CHECKS THE CURRENT CHARACTER AGAINST THE PRE-DEFINED "SPECIALH; TERMINATORS" OR AGAINST THE CURRENT USER-SPECIFIED TERMINATOR TABLE TOJ; SEE IF THE CURRENT INPUT REQUEST SHOULD BE COMPLETED. IF SO, AND IF THEP; TERMINATOR IS NOT TO BE ECHOED, THE RETURN ADDRESS (FROM "ICHAR2") IS DELETED L; AND THE INPUT IS TERMINATED. IF THE TERMINATOR NEEDS TO BE ECHOED, STATUSP; IS SET AND A RETURN TO ICHAR2 IS EXECUTED FOR ECHO AND TERMINATION. OTHERWISE,'; THE CHARACTER IS RETURNED UNMODIFIED.T; ; INPUTS:; R2 = CHARACTER ; R4 => UCBX FOR THE TERMINALE"; R5 => U.TSTA OF THE TERMINAL UCB;H; OUTPUTS: NONE;I; REGISTERS MODIFIED: NONE;-;CI2RST:2 MOV R3,-(SP) ;;;SAVE REGISTER USED BY THE ROUTINE6 TST U.TRTT(R4) ;;;USER-SPECIFIED TERMINATORS PRESENT? BEQ 10$ ;;;IF EQ, NO...SKIPN;H5; CHECK CHARACTER AGAINST USER-DEFINED TERMINATOR SETC;D0 MOV R2,R3 ;;;GET A COPY OF THE TYPED CHARACTER2 BIC #177417,R3 ;;;CLEAR ALL BUT HIGH ORDER 4 BITS .IF DF R$$EIS ASH #-3,R3 ;;;DIVIDE BY 8. .IFF ;R$$EIS ASR R3 ;;;DIVIDE BY 8. ASR R3 ;;; ASR R3 ;;; .ENDC ;R$$EIS6 ADD U.TRTT(R4),R3 ;;;ADD TABLE BASE ADDRESS TO OFFSET' MOV R2,-(SP) ;;;SAVE CURRENT CHARACTERE5 BIC #177760,R2 ;;;THIS TIME LOOK AT LOW ORDER 4 BITSM- ASL R2 ;;;CONVERT FROM BYTE TO WORD OFFSETN? BIT $BTMSK(R2),(R3) ;;;SEE IF MATCHES AGAINST TERMINATOR TABLE5 BEQ 30$ ;;;IF EQ, IT DOESN'T...PROCESS NORMAL CHAR.#" MOV (SP)+,R2 ;;;RESTORE CHARACTER% BR 20$ ;;;CHARACTER IS A TERMINATORR;;7; CHECK CHARACTER AGAINST NORMAL "SPECIAL TERMINATORS". ;10$:- CMPB R2,#CH.SP ;;;IS IT A CONTROL CHARACTER?U, BLO 20$ ;;;IF LO, YES...IT IS A TERMINATOR/ CMPB R2,#CH.RBR ;;;IS IT A "NORMAL" CHARACTER?C0 BLO 40$ ;;;IF LO, YES...IT IS NOT A TERMINATOR# CMPB R2,#CH.RUB ;;;IS IT A RUBOUT?O, BEQ 20$ ;;;IF EQ, YES...IT IS A TERMINATOR9 CMPB R2,# ;;;EIGHT-BIT NON-CONTROL CHARACTER?N2 BHIS 40$ ;;;IF HIS, YES...IT IS NOT A TERMINATOR. CMPB R2,#200 ;;;EIGHT-BIT CONTROL CHARACTER?. BHIS 20$ ;;;IF HIS, YES...IT IS A TERMINATOR< BIT #U2.LWC,U.CW2-U.TSTA(R5) ;;;TERMINAL SUPPORT LOWERCASE?7 BNE 40$ ;;;IF NE, YES...175-176 ARE NORMAL CHARACTERSR;CH; TERMINATOR FOUND - SET COMPLETION STATUS TO IS.SUC WITH THE TERMINATORJ; IN THE HIGH BYTE. ** NOTE ** THE CHARACTER IS NOT STORED IN THE BUFFER.;Q20$:$ MOV R2,R3 ;;;GET COPY OF C00z1ztblHARACTER( SWAB R3 ;;;GET TERMINATOR IN HIGH BYTE CLRB R3 ;;;CLEAR LOW BYTE." INC R3 ;;;SET IS.SUC IN LOW BYTE ASSUME U.TCI,0T MOV R3,@(R4) ;;;STORE STATUSH MOV (SP)+,R3 ;;;RESTORE R3( TST (SP)+ ;;;GET RID OF RETURN ADDRESS2 BIT #S1.TNE!S1.RNE,(R5) ;;;SHOULD THIS BE ECHOED? BNE 25$ ;;;IF NO ECHO BR< MOV #EKCRT,R3 ;;;CHARACTER RECOGNITION TABLE FOR TERM.ECHO. CALLR CHRDSP ;;;AND DISPATCH25$:/ BR IDONE ;;;REQUEST FORK FOR INPUT COMPLETION.30$:" MOV (SP)+,R2 ;;;RESTORE CHARACTER40$:! MOV (SP)+,R3 ;;;RESTORE REGISTERG50$: RETURN ;;;BACK TO CALLERT.PAGER; .SBTTL . I2ESC* - ESCAPE SEQUENCE AND TERMINATOR HANDLING(; ;-H; **-I2ESC - REAL ESCAPE CHARACTER SEEN; POSSIBLY START ESCAPE SEQUENCE5; **-I2AES - ALTERNATE ESCAPE CHARACTER WAS DETECTEDE0; **-I2ESC1 - TERMINATE INPUT WITH IS.ESC STATUS:; **-I2ESC2 - CONTINUE PROCESSING OF INPUT ESCAPE SEQUENCE;;I; THESE ROUTINES HANDLE ESCAPE AND ESCAPE SEQUENCE PROCESSING AS FOLLOWS::;M?; 1. UPON ENTRY AT I2ESC, IF THE TERMINAL IS SET UP TO GENERATER:; ESCAPE SEQUENCES AND THE ATTACHED TASK CAN ACCEPT THEM,7; ESCAPE SEQUENCE MODE IS ESTABLISHED. OTHERWISE, THE 4; ESCAPE TERMINATES THE CURRENT INPUT VIA "I2ESC1".?; 2. ENTRY AT I2AES OCCURS IF AN ALTERNATE ESCAPE CHARACTER WASR; (OCTAL 37) WAS DETECTED. B; 3. ENTRY AT I2ESC1 WILL CAUSE THE CURRENT INPUT TO BE TERMINATED; WITH A STATUS OF IS.ESC.;F; 4. I2ESC2 IS ENTERED TO PROCESS SUBSEQUENT CHARACTERS OF THE CURRENT>; ESCAPE SEQUENCE. SYNTAX RULES ARE CHECKED DEPENDING ON THE<; INPUT STATE VARIABLE, U.TISV. WHEN THE LAST CHARACTER OF<; A VALID SEQUENCE IS RECEIVED, THE INPUT IS COMPLETED WITH; THE STATUS IS.ESQ.TB; 5. A "RUBOUT" CHARACTER WILL CAUSE ALL CHARACTERS RECEIVED SINCE;; AN ESCAPE CHARACTER TO BE REMOVED FROM THE INPUT BUFFER. D; 6. A SYNTAX ERROR WILL TERMINATE THE INPUT WITH THE STATUS IE.IES.;W ; INPUTS: ; R2 = CURRENT INPUT CHARACTER ; R4 => UCBX FOR THE TERMINALT"; R5 => U.TSTA OF THE TERMINAL UCB; ; OUTPUTS: NONEH;E"; REGISTERS MODIFIED: R2, R3, R4;-;,I2ESC::  .IF DF T$$ESCD BIT #U2.ESC,U.CW2-U.TSTA(R5) ;;;DOES TERMINAL GENERATE ESCAPE SEQ.?+ BEQ I2ESC1 ;;;IF EQ, NO...TERMINATE INPUTC5 BIT #S1.RES,(R5) ;;;DOES TASK WANT ESCAPE SEQUENCES?A BEQ I2ESC1 ;;;IF EQ, NO...SKIP ASSUME S1.USI,100000A- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT? 0 BMI I2ESCU ;;;IF MI, YES...TERMINATE THE INPUT10$:/ BIS #S1.ESC,(R5) ;;;ENTER ESCAPE SEQUENCE MODE  TSTB R2 ;;;IS THIS CSI ESC? BPL I2ESC3 ;;;BR IF NO; MOVB #17,U.TISV(R4) ;;;ESTABLISH OFFSET FOR CSI ESC. SEC. + BR I2ESC3 ;;;STORE THE CHARACTER AND EXITE;E2; I2AES - ALTERNATE ESCAPE CHARACTER WAS DETECTED.;.1 .IFTF ;T$$ESC ;;;LABEL SHOULD ALWAYS BE DEFINEDNI2AES::Q .IFT ;T$$ESCED BIT #U2.ESC,U.CW2-U.TSTA(R5) ;;;TERMINAL GENERATE ESCAPE SEQUENCES?9 BEQ J2EDDF ;;;IF EQ, NO...PROCESS AS A NORMAL CHARACTERI .IFTF ;T$$ESC;B6; I2ESC1 - TERMINATE CURRENT INPUT WITH STATUS IS.ESC.;;I2ESC1:C3 BIT #S1.RST,(R5) ;;;READ WITH SPECIAL TERMINATORS?R BNE I2ESC3 ;;;BR IF SO (NE)  ASSUME U.TCI,02I2ESCU:S6 MOV #IS.ESC,@(R4)+ ;;;SET COMPLETION STATUS TO IS.ESC2 BR IDONE ;;;REQUEST A FORK TO COMPLETE THE INPUT .IFT ;T$$ESCL;B?; I2ESC2 - PROCESS SUBSEQUENT CHARACTERS OF AN ESCAPE SEQUENCE.T;(I2ESC2:R, CMPB R2,#37 ;;;IS CHARACTER IN RANGE 0-37?0 BLO 50$ ;;;IF LO, YES...THIS IS A SYNTAX ERROR2 CMPB R2,#CH.RUB ;;;IS CURRENT CHARACTER A RUBOUT?: BEQ RUBESC ;;;IF EQ, YES...DELETE ENTIRE ESCAPE SEQUENCE. MOVB U.TISV(R4),R3 ;;;GET CURRENT SYNTAX RULE0 BNE 10$ ;;;IF NE, NOT FIRST TIME THRU; SO SKIP2 CMPB U.TTYP-U.TSTA(R5),#T.VT61 ;;;IS THIS A VT61? BNE 10$ ;;;IF NE, NO...SKIP 2 MOV #-6,R3 ;;;SET UP TO ALLOW CERTAIN EXCEPTIONS10$:; ADD #ESCST,R3 ;;;SET POINTER INTO ESCAPE SYNTAX RULE TABLE220$:2 CMPB R2,(R3)+ ;;;IS THE INPUT CHARACTER IN RANGE?) BLO 30$ ;;;IF LO, NO...CHECK NEXT RANGEC CMPB R2,(R3)+ ;;;IN RANGE?C) BHI 40$ ;;;IF HI, NO...CHECK NEXT RANGEY@ MOVB (R3),U.TISV(R4) ;;;CHARACT00zLztkTADATADATADATADATADATAER IS OK - SAVE NEXT SYNTAX RULE: BNE I2ESC3 ;;;IF NE, NOT DONE YET...STORE CHAR. AND EXIT;K2; ESCAPE SEQUENCE IS COMPLETE - SET STATUS IS.ESQ.;, MOV #IS.ESQ,@U.TCI(R4) ;;;SET RETURN STATUS& BR 60$ ;;;FINISH OFF ESCAPE SEQUENCE;P; CHARACTER DIDN'T MATCH CURRENT RANGE - GET NEXT RANGE FOR CURRENT SYNTAX RULE.;;30$: INC R3 ;;;UPDATE POINTER40$:. TSTB (R3)+ ;;;ANY MORE RANGES FOR THIS RULE?+ BNE 20$ ;;;IF NE, YES...LOOP FOR NEXT ONEC;KI; THE INPUT CHARACTER IS INVALID IN THE ESCAPE SEQUENCE PROCESSED SO FAR.UE; COMPLETE THE CURRENT INPUT REQUEST WITH COMPLETION STATUS "IE.IES".S;E50$:/ MOV #IE.IES&377,@U.TCI(R4) ;;;SET ERROR STATUSS60$:0 CALL I2ESCX ;;;GET OUT OF ESCAPE SEQUENCE MODE;FH; I2ESC3 - STORE THE CURRENT CHARACTER OF THE ESCAPE SEQUENCE AND SEE IF*; THE CURRENT INPUT REQUEST HAS COMPLETED.;  .IFTF ;T$$ESCI2ESC3:T8 CALL PUTNIC ;;;STORE CHARACTER AND DON'T ECHO ANYTHING8 JMP ECHD2 ;;;CHECK FOR COMPLETION OF THE INPUT REQUEST .IFT ;T$$ESC ;EL; RUBESC - DELETE THE ENTIRE ESCAPE SEQUENCE FROM INPUT BUFFER AND EXIT FROM; ESCAPE SEQUENCE MODE.E;0RUBESC::' CALL GETPIC ;;;GET PREVIOUS CHARACTERS' CMPB R2,#CH.ESC ;;;IS THIS THE ESCAPE?E0 BNE RUBESC ;;;IF NE, NO...LOOP TILL WE FIND ITI2ESCX:O+ BIC #S1.ESC,(R5) ;;;GET OUT OF ESCAPE MODEN( CLRB U.TISV(R4) ;;;CLEAR STATE VARIABLE RETURN ;;;RETURNTJ2EDDF:U; JMP I2DEF ;;;CONTINUE INPUT CHARACTER THROUGH INPUT LOGIC  .ENDC ;T$$ESC.PAGET8 .SBTTL . I2CR - TERMINATE INPUT DUE TO CARRIAGE RETURN;HN; I2CR - CARRIAGE RETURN HAS BEEN INPUT. TERMINATE INPUT WITH STATUS "IS.CR".; .ENABL LSBI2CR::4 CLR -(SP) ;;;ZERO THE ECHO STRING ADJUSTMENT COUNT3 MOV #IS.CR,-(SP) ;;;SET COMPLETION STATUS TO IS.CRP BR 10$ ;;;SKIP TO COMMON CODE#3 .SBTTL . I2CTZ - TERMINATE INPUT DUE TO CONTROL-Z);;J; I2CTZ - CONTROL-Z HAS BEEN INPUT. TERMINATE INPUT WITH STATUS "IE.EOF".;NI2CTZ::C4 MOV #2,-(SP) ;;;SET ^Z ECHO STRING ADJUSTMENT COUNT9 MOV #IE.EOF&377,-(SP) ;;;SET COMPLETION STATUS TO IE.EOFH10$:2 BIT #S1.RST,(R5) ;;;WAS THIS READ W/ SPEC. TERMS?- BEQ 12$ ;;;IF EQ, NO. THIS IS A TERMINATOR:;CK; COME HERE IF DOING RST. WE HAVE 2 CASES; EITHER THIS IS NOT A TERMINATORCD; AND IS AN INPUT CHARACTER (FIRST PASS THROUGH THIS CODE) OR ELSE,G; THIS IS THE SECOND TIME THROUGH...WE ARE DOING DEFERRED PROCESSING OFAJ; A TERMINATOR. WE END UP HERE FROM ECHD1 AND HAVE BYPASSED THE RST TEST.3; IF THIS IS THE CASE, A STATUS WILL HAVE BEEN SET.E;F TST (SP)+ ;;;GET RID OF STATUS TST @(R4) ;;;STATUS SET?$ BNE 15$ ;;;NE => YES => TERMINATOR6 CALL PUTNIC ;;;AND PUT THIS NON-TERMINATOR IN BUFFER& BIT #S1.RNE,(R5) ;;;ECHO SUPPRESSED?% BEQ 15$ ;;;JOIN COMMON CODE TO ECHO 0 TST (SP)+ ;;;CLEAN STRING ADJUSTMENT OFF STACK" JMP ECHD2 ;;;AND GET OUT OF HERE12$: ASSUME U.TCI,0E$ MOV (SP)+,@(R4) ;;;ELSE, SET STATUS, BIT #S1.RNE!S1.TNE,(R5) ;;;ECHO SUPPRESSED?* BNE 30$ ;;;GO SET STATUS AND COMPLETE IO BR 15$ ;LI; EKCR AND EKCTZ - OR ^Z WAS SPECIAL TERMINATOR. COME HERE TO ECHO U;EEKCR::0 CLR -(SP) ;;;ZERO ECHO STRING ADJUSTMENT COUNT BR 15$ ;;;JOIN COMMON CODEEKCTZ::R4 MOV #2,-(SP) ;;;SET ^Z ECHO STRING ADJUSTMENT COUNT15$:( CALL EXCR1 ;;;EXPAND A CARRIAGE RETURN1 BCC 20$ ;;;IF CC, NO LEADING LF REQUIRED...SKIPT: BIS #S1.DPR,(R5) ;;;ELSE DEFER PROCESSING OF CR OR CTRL-Z$ CLR (SP) ;;;CLEAR ADJUSTMENT COUNT20$:. ADD (SP),R2 ;;;ADJUST COUNT OF BYTES TO ECHO& SUB (SP)+,R3 ;;;ADJUST BUFFER POINTER& BR C2ECHS ;;;SKIP TO ECHO THE STRING30$: TST (SP)+ ;;;CLEAN STACK) JMP IDONE ;;;COMPLETE THE CURRENT INPUTT .DSABL LSB;.PAGEC2 .SBTTL . CONTROL-U AND CONTROL-R ECHO PROCESSING, .SBTTL . EDCTU - INITIALIZE AND ECHO "^U";AH; EDCTU - CONTROL-U HAS BEEN INPUT. INITIALIZE ECHO PROCESSING TO BEGIN1; ECHO OF "^U " OR "^U ". ;L .ENABL LSB EDCTU:: 5 MOVB #SV.CU1,U.TISV(R4) ;;;INITIALIZE STATE VARIABLEF# MOV #ASCTU,R3 ;;;GET CTRL-U STRINGS .IF DF T$$CTR BR 20$ ;;;ECHO ^UE,00z1ztbl .SBTTL . EDCTR - INITIALIZE AND ECHO "^R";H; EDCTR - CONTROL-R HAS BEEN INPUT. INITIALIZE ECHO PROCESSING TO BEGIN%; ECHO OF "^R " ORC+; "^R ".H;^EDCTR:: ( BIT #S1.RNE,(R5) ;;;IS ECHO SUPPRESSED?7 BEQ 10$ ;;;IF EQ, NO...WE CAN PERFORM THE ^R FUNCTION<; CALLR CFGRQ ;;;ELSE, IGNORE AND PROCESS AN OUTPUT REQUEST.10$:9 MOV U.TIP+2(R4),U.TTOC(R4) ;;;SAVE POS. OF LAST BYTE + 1E5 MOVB #SV.CR1,U.TISV(R4) ;;;INITIALIZE STATE VARIABLE^# MOV #ASCTR,R3 ;;;GET CTRL-R STRINGA .ENDC ;T$$CTR20$: BIT #S2.FLF,2(R5) ;;;FORCE LF?I BEQ 30$ ;;;IF EQ, NO...SKIP1 BIS #S1.DPR,(R5) ;;;DEFER PROCESSING OF ^U OR ^R<: CALL EXPCHR ;;;EXPAND CHARACTER IN R2 (JUST TO FORCE LF)5 BR C2ECHS ;;;MAKE CALL TO ECHO THE EXPANSION STRINGW30$:, MOV R3,-(SP) ;;;SAVE ADDRESS OF ECHO STRING ASSUME U.TCI,0C) MOV (R4)+,R3 ;;;GET CURRENT INPUT PACKETR, MOV #UPUNB,-(SP) ;;;ASSUME UNBUFFERED INPUT1 BIT #S1.IBF,(R5) ;;;ARE WE DOING BUFFERED INPUT?L+ BEQ 40$ ;;;IF EQ, NO...CORRECT ASSUMPTION.$ ADD #U.TFIB-2,R4 ;;;POINT TO U.TFIB' MOV (R4),R2 ;;;GET FIRST INPUT BUFFER.- MOV #FPSUI1,(SP) ;;;ASSUME UNSOLICITED INPUT^ ASSUME S1.USI,100000;& TST (R5) ;;;DOING UNSOLICITED INPUT?, BMI 40$ ;;;IF MI, YES...CORRECT ASSUMPTION@ MOV I.PRM+4(R3),-(R4) ;;;SOLICITED INPUT - GET TOTAL BYTE COUNT MOV #NXTIB,(SP) ;;;40$:; CALL @(SP)+ ;;;CALL UPUNB, FPSUI1, OR NXTIB TO UPDATE UCBN .IF DF T$$SPL' MOV #120000,R4 ;;;RESTORE UCBX POINTERP .IFF ;T$$SPL;0 MOV U.TUX-U.TSTA(R5),R4 ;;;RESTORE UCBX POINTER .ENDC ;T$$SPL) MOV (SP)+,R3 ;;;POINT TO ^U OR ^R STRING% BIT #S1.RNE,(R5) ;;;ECHO SUPPRESSED? % BNE I2CTUE ;;;Y - JUMP (MUST BE ^U)T( MOV #2,R2 ;;;LENGTH OF ^U OR ^R STRING; J; DON'T WORRY ABOUT UPDATING CURRENT HORIZONTAL POSITION FOR 2 CHARACTERS.>; WE ARE GOING TO DO A CARRIAGE RETURN IMMEDIATELY AFTER THEM.; 8 BR C2ECHS ;;;GO ECHO THE STRING DESCRIBED BY R2 AND R3.PAGE1 .SBTTL . I2CTU1/I2CTR1 - ECHO AND FILLERS ;$?; I2CTU1/I2CTR1 - "^R" OR "^U" HAS BEEN ECHOED. SET UP TO ECHOC#; A CARRIAGE-RETURN (PLUS FILLERS). ;OI2CTU1::I2CTR1::/ INCB U.TISV(R4) ;;;UPDATE INPUT STATE VARIABLE; ASSUME S1.USI,100000- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT?  .IF DF R$$MPL!A$$CLIG BPL 50$ ;;;IF PL, NO...SKIP2;AI; IN ALTERNATE CLI SYSTEMS, THE CLI PROMPT IS NOT ASSUMED TO START WITH A J; CARRIAGE RETURN, SO DO NOT OUTPUT ONE. RATHER, GO ON TO THE NEXT STATE.; J2NXST:C1 JMP NXSTAT ;;;DON'T GIVE GRATIS CARRIAGE RETURN 50$: .IFF ;R$$MPL!A$$CLI# BMI 70$ ;;;IF MI, YES...ECHO P .ENDC ;R$$MPL!A$$CLI1 .IF DF T$$RPR- TST U.TFPB(R4) ;;;READ W/PROMPT IN PROGRESS?S/ BNE 70$ ;;;IF NE, YES...DON'T SKIP NEXT STATES .ENDC ;T$$RPR60$:. INCB U.TISV(R4) ;;;BYPASS THE NEXT ECHO STATE70$:( CALL EXCR1 ;;;EXPAND A CARRIAGE-RETURNC2ECHS: ( CALLR ECHSTR ;;;ECHO STRING AND RETURN* .SBTTL . I2CTU2 - SET UP TO ECHO PROMPT;XJ; I2CTU2 - "^U " HAS BEEN ECHOED. SEE IF PROMPT BUFFER NEEDS ECHOING.;:I2CTU2:: ASSUME S1.USI,1000007- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT?L- BPL I2CTR2 ;;;IF PL, NO...START PROMPT ECHO;4 CLRB U.TFPB(R4) ;;;SET UP TO USE THE DEFAULT PROMPTA TSTB U.TFPB+1(R4) ;;;DID THE UNSOLICITED INPUT INTERRUPT A READ?) .IF DF T$$SER0 BNE 80$ ;;;IF NE, YES...DO NOT ECHO CLI PROMPT> BIT #UM.CMD,U.MUP-U.TSTA(R5) ;;;IS A CLI COMMAND IN PROGRESS? .ENDC ;T$$SER4 BEQ I2CTR2 ;;;IF EQ, NO...START ECHOING THE PROMPT80$: .IF DF R$$MPL!A$$CLIE2 INCB U.TISV(R4) ;;;BYPASS CLI PROMPT OUTPUT STATE .ENDC ;R$$MPL!A$$CLII, BR 60$ ;;;SKIP TO OUTPUT A CARRIAGE RETURN* .SBTTL . I2CTR2 - SET UP TO ECHO PROMPT;PH; I2CTR2 - "^R " HAS BEEN ECHOED. INITIALIZE TO START OUTPUT OF THED; CURRENT PROMPT BUFFER. THIS CODE IS ALSO ENTERED DURING CONTROL-U; ECHO PROCESSING.;BI2CTR2::) INCB U.TISV(R4) ;;;UPDATE STATE VARIABLEO;SJ; RESET THE CURRENT HORIZONTAL POSITION TO THE INITIAL HORIZONTAL POSITIONN; FOR THE READ PORTION00zLztkTADATADATADATADATADATA OF AN IO.RPR. WE DON'T CARE ABOUT INCORRECT HORIZONTALM; POSITION DURING THE ECHO OF THE PROMPT STRING. FURTHERMORE, IT IS POSSIBLENL; THAT THE ORIGINAL PROMPT STARTED AT A POSITION OTHER THAN FIRST COLUMN. IFI; SO, WE CAN ONLY HOPE THAT THE PROMPT BUFFER CONTAINS AN EXPLICIT CURSORHI; POSITIONING COMMAND. IF NOT, THE HORIZONTAL POSITION WILL BE INCORRECT; WHILE DOING THE NEXT READ.;VK; AT THIS INPUT STATE, WE KNOW THAT THE LAST CHARACTER THAT WAS EXPANDED BYAM; "EXPCHR" WAS A CARRIAGE RETURN, SO THE FORCE-LINE-FEED FLAG (S2.FLF) IS NOW I; SET. IF THE INITIAL HOR. POS. IS NOT COLUMN 1, WE MUST CLEAR THE FLAG.I;S? MOVB U.TIHP(R4),U.TCHP-U.TSTA(R5) ;;;RESET HORIZONTAL POSITIONR9 BEQ 90$ ;;;IF EQ, WE ARE AT COLUMN 1...LEAVE S2.FLF SETM? BIC #S2.FLF,2(R5) ;;;OTHERWISE, CLEAR FLAG TO PREVENT EXTRA LFF90$: .IF DF T$$RPR ASSUME S1.USI,100000- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT?U/ BMI 100$ ;;;IF MI, YES...ECHO THE CLI PROMPT  .IF DF R$$MPL!A$$CLIW2 INCB U.TISV(R4) ;;;BYPASS CLI PROMPT OUTPUT STATE .ENDC ;R$$MPL!A$$CLIT9 MOV U.TFPB(R4),U.TFOB(R4) ;;;GET THE FIRST PROMPT BUFFERI0 CALLR STAXL ;;;START ECHO OF THE PROMPT STRING;I ; PREPARE FOR CLI PROMPT OUTPUT.; 100$:A .ENDC ;T$$RPR .IF DF T$$SPC5 TST U.TFPB(R4) ;;;CLI CONTINUATION LINE IN PROGRESS?L BPL 110$ ;;;IF PL, NO...SKIP? MOV #ASCLC,R3 ;;;OTHERWISE, OUTPUT SPECIAL CONTINUATION PROMPTT4 MOV #4,R2 ;;;LENGTH IS 4 BYTES INCLUDING CR AND LF. BR C2ECHS ;;;GO ECHO THE CONTINUATION STRING110$:C .ENDC ;T$$SPC .IF DF R$$MPL!A$$CLI$3 MOV U.MUP-U.TSTA(R5),R3 ;;;GET POINTER TO CLI WORDM. BIC #^C,R3 ;;;CLEAR ALL BUT CLI INDEX/ MOV $CPTBL(R3),R3 ;;;POINT TO CLI PARSER BLOCK.0 MOVB C.PDPL(R3),R2 ;;;GET DEFAULT PROMPT LENGTH1 ADD #C.PRMT,R3 ;;;POINT TO DEFAULT PROMPT STRINGE- TSTB U.TFPB(R4) ;;;WHICH PROMPT DO WE ISSUE?L2 BNE 120$ ;;;IF NE, SKIP TO ISSUE FULL CLI PROMPT! TST R2 ;;;CHECK FOR NULL LENGTHS+ BR 130$ ;;;EITHER PROMPT OR FORGET IT ALLT120$:I> MOVB C.PCPL-C.PRMT(R3),-(SP) ;;;GET LENGTH OF FULL CLI PROMPT. ADD R2,R3 ;;;POINT TO FULL CLI PROMPT STRING MOVB (SP)+,R2 ;;;GET ITS LENGTH130$:A/ BEQ 140$ ;;;IF EQ, NULL LENGTH...DON'T PROMPTC4 MOV R3,U.TSHP(R4) ;;;SAVE CLI PROMPT STRING ADDRESS4 MOVB R2,U.TVFC(R4) ;;;SAVE CLI PROMPT STRING LENGTH ;;;FALL INTO NEXT STATE;4 .SBTTL . I2CTU3/I2CTR3 - OUTPUT CLI PROMPT BUFFER;IO; I2CTU3/I2CTR3 - OUTPUT CLI PROMPT BUFFER BY EXPANDING EACH CHARACTER IN TURN.M;OI2CTU3::I2CTR3::3 MOV U.TSHP(R4),R3 ;;;GET ADDRESS OF NEXT CHARACTERF+ MOVB U.TVFC(R4),R2 ;;;GET REMAINING LENGTHC& BNE 150$ ;;;IF NE, MORE TO DO...SKIP140$:G) INCB U.TISV(R4) ;;;UPDATE STATE VARIABLEH BR J2NXST ;;;GO TO NEXT STATER150$:A) MOVB (R3)+,R2 ;;;GET CHARACTER TO EXPANDF( CALL EXPCHR ;;;GET CHARACTER EXPANSION8 BNE 160$ ;;;IF NE, CHARACTER ECHOES AS A STRING - SKIP. MOV U.TSHP(R4),R3 ;;;SET POINTER TO CHARACTER MOV #1,R2 ;;;SET LENGTH % BR 170$ ;;;UPDATE POINTER AND COUNT160$::4 BCS 180$ ;;;IF CS, NEED TO PRESENT CHARACTER AGAIN170$:E* INC U.TSHP(R4) ;;;POINT TO NEXT CHARACTER DECB U.TVFC(R4) ;;;KEEP COUNT180$:.2 BR C2ECHS ;;;ECHO EXPANSION OF CURRENT CHARACTER .IFF ;R$$MPL!A$$CLI0 MOV #ASCLP,R3 ;;;ASSUME ECHO ANGLE BRACKET ONLY- MOV #2,R2 ;;;TWO BYTES LENGTH (INCLUDES LF)E, TSTB U.TFPB(R4) ;;;DID WE ASSUME CORRECTLY?4 BEQ C2ECHS ;;;IF EQ, YES...SKIP TO ECHO THE STRING .IF DF M$$CLI. MOV U.CLI-U.TSTA(R5),R3 ;;;GET POINTER TO CLI! TST (R3)+ ;;;POINT PAST CLI TCB;' MOV R3,R2 ;;;COPY POINTER TO CLI NAME190$:7 TSTB (R2)+ ;;;SEARCH FOR END OF ASCIZ NAME AND PROMPTR% BNE 190$ ;;;IF NE, NOT THERE...LOOP;' SUB R3,R2 ;;;GET LENGTH OF CLI PROMPT. BR C2ECHS ;;;ECHO CLI PROMPT .IFF ;M$$CLIH0 MOV #ASCLI,R3 ;;;GET ADDRESS OF FULL CLI PROMPT MOV #5,R2 ;;;GET PROMPT LENGTH BR C2ECHS ;;;ECHO CLI PROMPT .ENDC ;M$$CLI .ENDC ;R$$MPL!A$$CLI .DSABL LSBD.PAGEI0 .SBTTL . I2CTU4 - FINISH CONTROL-U PROCESSING;TH; I2CTU4 - COMPLETE PROCESSING OF CONTRO00z1ztblL-U INPUT. IF CONTROL-U WAS FORC; AN UNSOLICITED INPUT, "IS.TMO+1" IS SET AS A COMPLETION STATUS SOBA; THAT "FPIRD" WILL KNOW THE DIFFERENCE BETWEEN A USER HITTING ^UC-; AND A FAKED ^U BECAUSE OF AN INPUT TIMEOUT..; I2CTU4::I2CTUE:S2 CLRB U.TISV(R4) ;;;RESET THE INPUT STATE VARIABLEE MOVB U.TCHP-U.TSTA(R5),U.TIHP(R4) ;;;SET INITIAL HOR. POS. = CURRENTI ASSUME S1.USI,100000L- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT?-5 BPL C2CFRQ ;;;IF PL, NO...SKIP TO DO A FORK REQUESTR ASSUME U.TCI,0OB MOV #IS.TMO+1,@(R4)+ ;;;OTHERWISE, SHOW A TIMEOUT ^U HAS FINISHED) JMP IDONE ;;;COMPLETE THE INPUT REQUEST"3 .SBTTL . I2CTR4 - INITIATE ECHO OF CURRENT INPUT^;L; I2CTR4 - SET UP THE INPUT STATE TO RE-ECHO THE INPUT BUFFER. THIS IS DONEC; BY "RECYCLING" ALL CHARACTERS THAT HAVE BEEN INPUT SO FAR THROUGH,; THE INPUT LOGIC.;AI2CTR4::) INCB U.TISV(R4) ;;;UPDATE STATE VARIABLE 2 .SBTTL . I2CTR5 - RECYCLE NEXT INPUT CHARACTER ;PO; I2CTR5 - ECHO THE NEXT INPUT CHARACTER BY SENDING IT THROUGH THE INPUT LOGIC.H;II2CTR5::: MOV U.TIP+2(R4),R3 ;;;GET POINTER TO NEXT BYTE TO PROCESS CMP R3,U.TTOC(R4) ;;;ALL DONE?I! BEQ I2CTR6 ;;;IF EQ, YES...SKIP' CALL GETRIC ;;;GET THE NEXT CHARACTERC4 CALLR ICHAR2 ;;;RECYCLE CHARACTER THRU INPUT LOGIC0 .SBTTL . I2CTR6 - FINISH CONTROL-R PROCESSING;HG; I2CTR6 - COMPLETE PROCESSING OF CONTROL-R. RESET THE INPUT STATE ANDL9; CONDITIONALLY FORK TO START ANY PENDING OUTPUT REQUEST.P; I2CTR6::2 CLRB U.TISV(R4) ;;;RESET THE INPUT STATE VARIABLEC2CFRQ:H< CALLR CFGRQ ;;;CONDITIONALLY FORK TO GET AN OUTPUT REQUEST.PAGEO% .SBTTL . I2CTC - CONTROL-C HANDLING;QN; I2CTC - CONTROL-C IS BEING PROCESSED. START (OR RESTART) UNSOLICITED INPUT.;HI2CTC::E .IF DF T$$SCA5 BIT #S3.TME,4(R5) ;;;IS TERMINAL MANAGEMENT ENABLED?R BEQ 5$ ;;;IF EQ NO5 JMP I2ECHO ;;;IF NE, YES...DON'T DO CONTROL-C STUFFT5$:N .ENDC ;T$$SCA ASSUME U2.SLV,200* TSTB U.CW2-U.TSTA(R5) ;;;SLAVED TERMINAL?0 BMI I2RET ;;;IF MI, YES...IGNORE THE CONTROL-C .IF DF T$$IDO0 TST $MCRPT ;;;IS THE MCR DISPATCHER INSTALLED? BNE 10$ ;;;IF NE, YES...SKIP;RG; THE FORK ROUTINE WHICH STARTS UNSOLICITED INPUT WILL QUEUE THE AST TOS; C$CTEX IF APPROPRIATE.2 MOV #FR.SUI,R3 ;;;FORK/START OF UNSOLICITED INPUT" CALLR FORK ;;;QUEUE FORK REQUEST10$: .ENDC ;T$$IDO .IF DF T$$SPC4 BIT #UM.KIL,U.MUP-U.TSTA(R5) ;;;SEND A KILL PACKET? BEQ 20$ ;;;IF EQ, NO...SKIP , MOV #FR.KIL,R3 ;;;GET KILL FORK REQUEST BIT/ CALLR FORK ;;;REQUEST FORK TO KILL THIS INPUTD20$:5 TST U.TFPB(R4) ;;;CLI CONTINUATION LINE IN PROGRESS? BPL 30$ ;;;IF PL, NO...SKIPB BIS #UM.KIL,U.MUP-U.TSTA(R5) ;;;ELSE, SEND KILL PACKET ON NEXT ^C30$: .ENDC ;T$$SPC7 MOVB R2,U.TFPB(R4) ;;;ECHO A FULL CLI PROMPT FOR ^U/^RI" ADD #U.TFIB,R4 ;;;POINT TO U.TFIB MOV R1,-(SP) ;;;SAVE REGISTER1 CALL FPSUI1 ;;;SET UP UCB FOR UNSOLICITED INPUTS; 9; FILL THE INPUT BUFFER WITH THE FOLLOWING PROMPT STRING:R.; " \ XXX>";UF; WHERE " \" TAKES THE TERMINAL OUT OF HOLD-SCREEN MODE (INSERTEDF; ONLY IF TERMINAL IS IN HOLD-SCREEN MODE); AND "XXX" IS THE CLI NAME.;T ASSUME U.TIP+2,U.TIC-2P/ MOV -(R4),R1 ;;;GET START OF THE OUTPUT BUFFER 5 BIT #U2.HLD,U.CW2-U.TSTA(R5) ;;;IN HOLD-SCREEN MODE?D BEQ 40$ ;;;IF EQ, NO...SKIP: MOV (PC)+,(R1)+ ;;;INSERT \ - EXIT HOLD SCREEN MODE .BYTE CH.ESC,CH.BSL7 BIC #U2.HLD,U.CW2-U.TSTA(R5) ;;;CLEAR HOLD-SCREEN FLAG 40$:;B; NOW EXPAND CARRIAGE RETURN TWICE. THIS HAS THE FOLLOWING EFFECT:>; 1. IF THE LAST EXPANDED CHARACTER WAS NOT A CARRIAGE RETURN,:; THE FIRST CR EXPANDS AS CR, AND THE SECOND ONE AS LF.?; 2. ELSE, THE FIRST CR EXPANDS AS LF AND THE SECOND ONE AS CR.H?; IN THIS CASE, THE FLAG S2.FLF WILL BE SET AFTER THE SECOND #; EXPANSION AND MUST BE CLEARED.;MI; THE CARRIAGE RETURN AND LINE FEED ARE NOT OUTPUT HERE FOR ALTERNATE CLIBI; SYSTEMS SINCE THE CLI MAY NOT WANT THEM. IF IT DOES, THEN THEY MUST BEO+; PART OF THE CLI PROMPT STRING IN THE C00zLztkTADATADATADATADATADATAPB.F;O .IF DF T$$SPC? TST U.TFPB-(R4) ;;;CLI CONTINUATION LINE IN PROGRESS?E2 BPL 70$ ;;;IF PL, NO...DON'T INCLUDE GRATIS CRLF .ENDC ;T$$SPC .IIF NDF A$$CLI,NOACLI=0E .IF DF T$$SPC!NOACLII( CALL EXCR1 ;;;EXPAND A CARRIAGE RETURN50$: MOVB (R3)+,(R1)+ ;;;INSERTM SOB R2,50$ ;;;LOOP CALL EXCR1 ;;;EXPAND CR AGAINE60$: MOVB (R3)+,(R1)+ ;;;INSERT  SOB R2,60$ ;;;LOOP .ENDC ;T$$SPC!NOACLI.70$:, BIC #S2.FLF,2(R5) ;;;DON'T FORCE ANOTHER LF .IF DF T$$SPC? TST U.TFPB-(R4) ;;;CLI CONTINUATION LINE IN PROGRESS?N BPL 90$ ;;;IF PL, NO...SKIPB@ MOVB ASCLC+2,(R1)+ ;;;INSERT FIRST CHAR. OF CONTINUATION PROMPT4 MOVB ASCLC+3,(R1)+ ;;;INSERT SECOND CHAR. OF PROMPT6 MOVB #2,U.TCHP-U.TSTA(R5) ;;;SET UP CURRENT HOR. POS.6 MOVB #2,U.TIHP-(R4) ;;;SET INITIAL HOR. POS. BR 170$ ;;;OUTPUT THE PROMPT .ENDC ;T$$SPC .IF DF M$$CLI3 MOV U.CLI-U.TSTA(R5),R3 ;;;GET POINTER TO CLI NAME#, ADD #4,R3 ;;;ADD IN LENGTH OF THE CLI NAME80$: MOVB (R3)+,(R1)+ ;;;INSERT( BNE 80$ ;;;LOOPT .ENDC ;M$$CLI .IF DF R$$MPL!A$$CLI 90$:: MOV U.MUP-U.TSTA(R5),R3 ;;;GET POINTER TO CLI STATUS WORD3 BIC #^C,R3 ;;;CLEAR ALL BUT CLI INDEX BITSO/ MOV $CPTBL(R3),R3 ;;;POINT TO CLI PARSER BLOCKR8 ADD #C.PDPL,R3 ;;;POINT TO DEFAULT PROMPT STRING LENGTH ASSUME C.PCPL,C.PDPL+1;6 CLR -(SP) ;;;WORD TO GET BYTE VALUE OF PROMPT LENGTH0 BISB (R3)+,(SP) ;;;GET LENGTH OF DEFAULT PROMPT ASSUME C.PRMT,C.PCPL+1I* MOVB (R3)+,R2 ;;;GET LENGTH OF CLI PROMPT+ ADD (SP)+,R3 ;;;POINT TO CLI PROMPT STRINGC TST R2 ;;;ANYTHING THERE?$2 BEQ I2RET ;;;IF EQ, NO...RETURN TO FORGET IT ALL6 MOV R1,-(SP) ;;;GET CURRENT POSITION IN OUTPUT BUFFER7 SUB (R4),(SP) ;;;GET NUMBER OF CHARACTERS IN IT SO FARR2 MOV R2,-(SP) ;;;SAVE UNEXPANDED CLI PROMPT LENGTH100$:N/ MOVB (R3)+,R2 ;;;GET A CHARACTER OF THE PROMPT;/ MOV R3,-(SP) ;;;SAVE ADDRESS OF NEXT CHARACTERR3 CALL EXPCHR ;;;GET EXPANSION OF CURRENT CHARACTERR* BNE 120$ ;;;IF NE, IT IS A STRING...SKIP- CMP 4(SP),#T$$BFL ;;;BUFFER LENGTH EXCEEDED?M! BHIS 110$ ;;;IF HIS, YES...SKIPE= MOVB R2,(R1)+ ;;;CHARACTER EXPANDS AS ITSELF - PUT IN BUFFERR0 INC 4(SP) ;;;SHOW ONE MORE CHARACTER IN BUFFER BR 150$ ;;;CHECK IF DONE110$:R ADD #6,SP ;;;CLEAN STACK2 BR 170$ ;;;ECHO WHATEVER COULD FIT IN THE BUFFER120$: 9 BCC 130$ ;;;IF CC, DON'T PRESENT CHARACTER AGAIN...SKIP;" DEC (SP) ;;;ELSE, BACKUP POINTER INC 2(SP) ;;;AND FIX COUNT130$:N' ADD R2,4(SP) ;;;SHOW NEW BUFFER LENGTHA- CMP 4(SP),#T$$BFL ;;;BUFFER LENGTH EXCEEDED?N2 BHI 110$ ;;;IF HI, YES...ECHO WHAT WE COULD COPY140$:2. MOVB (R3)+,(R1)+ ;;;PUT EXPANSION INTO BUFFER SOB R2,140$ ;;;LOOPS150$: ' MOV (SP)+,R3 ;;;RESTORE PROMPT POINTERE DEC (SP) ;;;MORE TO DO?,* BNE 100$ ;;;IF NE, YES...LOOP UNTIL DONE160$:D CMP (SP)+,(SP)+ ;;;CLEAN STACK1 .ENDC ;R$$MPL!A$$CLIE .IF NDF R$$MPL&A$$CLI&M$$CLI( MOVB #'M,(R1)+ ;;;INSERT MI MOVB #'C,(R1)+ ;;; CT MOVB #'R,(R1)+ ;;; R; MOVB #'>,(R1)+ ;;; > .ENDC ;NDF R$$MPL&A$$CLI&M$$CLI .IF NDF R$$MPL&A$$CLI6 MOVB #4,U.TCHP-U.TSTA(R5) ;;;SET UP CURRENT HOR. POS.6 MOVB #4,U.TIHP-(R4) ;;;SET INITIAL HOR. POS. .ENDC ;NDF R$$MPL&A$$CLIR170$:O5 MOV (R4),R3 ;;;GET START OF PROMPT STRING (U.TIP+2);( CMP -(R4),-(R4) ;;;RESTORE UCBX POINTER1 MOV R1,R2 ;;;COPY CURRENT PROMPT STRING POINTERL' SUB R3,R2 ;;;GET LENGTH OF THE STRINGM! MOV (SP)+,R1 ;;;RESTORE REGISTER'7 BIC #U2.HLD,U.CW2-U.TSTA(R5) ;;;CLEAR HOLD-SCREEN FLAG)ECHOS1:( CALLR ECHSTR ;;;ECHO THE PROMPT STRING.PAGER; .SBTTL . I2CT* - MISCELLANEOUS CONTROL CHARACTER HANDLINGH; $; CTRL-Q, CTRL-S, CTRL-O AND CTRL-X.A; IF ANY OF THESE CHARACTERS IS RECEIVED WHEN AN IO.RAL OR IO.RSTVB; IS ACTIVE, STORED IN THE TYPE-AHEAD BUFFER (FOR EXAMPLE, BECAUSE?; ECHO IS REQUIRED AND OUTPUT IS BUSY), THE READ TERMINATES ANDN@; THE NEXT READ IS AN IO.RLB, THEN THESE SPECIAL CHARACTERS WILL<; APPEAR HERE. WE DON'T WANT TO PASS THEM TO THE TASK, SO WE; JUST IGNORE THEM.C;1D; THE SAME IS DO00z1ztblNE FOR CTRL-C FROM A SLAVED TERMINAL, AND FOR CTRL-R+; IN A SYSTEM THAT DOES NOT SUPPORT CTRL-R.;I2CTQ:: I2CTS::T, BIT #S1.TSY,(R5) ;IS TERMINAL SYNC ENABLED?& BEQ JI2EC ;IF NE, YES,KEEP CHARACTERI2CTX::VI2CTO::N .IF NDF T$$CTRFEDCTR::M .ENDC ;T$$CTRI2RET: RETURN ;;;IGNORES?JI2EC: JMP I2ECHO ;;;ELSE, PROCESS AS A NORMAL INPUT CHARACTERT.PAGEI, .SBTTL . EDRUB - RUBOUT CHARACTER HANDLING;T#; EDRUB - PROCESS RUBOUT CHARACTER.T;NEDRUB::C4 CALL GETPIC ;;;GET (AND REMOVE) PREVIOUS CHARACTER0 BCS I2RET ;;;IF CS, NONE THERE...IGNORE RUBOUT( BIT #S1.RNE,(R5) ;;;IS ECHO SUPPRESSED?8 BNE I2RET ;;;IF NE, YES...DON'T ECHO DELETED CHARACTER* TSTB U.TCHP-U.TSTA(R5) ;;;AT LEFT MARGIN?2 BEQ I2RET ;;;IF EQ, YES...CAN'T ECHO AROUND WRAP .IF DF T$$RUB5 BIT #U2.CRT,U.CW2-U.TSTA(R5) ;;;IS TERMINAL A SCOPE?A. BEQ 70$ ;;;IF EQ, NO...START RUBOUT SEQUENCE;BJ; ECHO THE STANDARD CRT RUBOUT SEQUENCE. HORIZONTAL TAB ECHOS AS A NUMBERI; (1-8) OF BACKSPACES. ANYTHING ELSE ECHOS AS BACKSPACE-SPACE-BACKSPACE. ;I) CMPB R2,#CH.HT ;;;RUBOUT HORIZONTAL TAB?R BEQ 10$ ;;;IF EQ, YES...SKIP( BITB #140,R2 ;;;NON-SPACING CHARACTER?4 BEQ I2RET ;;;IF EQ, YES...DELETE IT BUT DON'T ECHO, MOV #ASRBS,R3 ;;;POINT TO BSP-SP-BSP STRING# MOV #3,R2 ;;;SET LENGTH OF STRING#= DECB U.TCHP-U.TSTA(R5) ;;;UPDATE CURRENT HORIZONTAL POSITIONI! BR ECHOS1 ;;;GO ECHO THE STRINGB; (; FIND THE PREVIOUS HORIZONTAL POSITION.;O10$:A MOVB U.TCHP-U.TSTA(R5),-(SP) ;;;SAVE CURRENT HORIZONTAL POSITIONSC MOVB U.TIHP(R4),U.TCHP-U.TSTA(R5) ;;;RESET CURRENT TO INITIAL POS.L- MOV R3,-(SP) ;;;SAVE R3 (POINTS TO THE HTAB)1 ASSUME U.TCI,0C8 MOV (R4),R3 ;;;GET CURRENT PACKET (IF SOLICITED INPUT)/ MOV I.PRM+2(R3),R3 ;;;GET START OF TASK BUFFER ;IM; NOTE - THE 2 INSTRUCTIONS ABOVE ASSUME THAT THE CURRENT INPUT IS UNBUFFEREDRK; SOLICITED INPUT. OF COURSE, "I.PRM+2(R3)" MAKES NO SENSE IF THE INPUT ISP1; UNSOLICITED, BUT NO ADDRESSING ERROR CAN OCCUR.P;T- CLR -(SP) ;;;SET UP A VERY LARGE LOOP COUNTO1 BIT #S1.IBF,(R5) ;;;ARE WE DOING BUFFERED INPUT?R. BEQ 30$ ;;;IF EQ, NO...SKIP TO EXPAND BUFFER, MOV U.TFIB(R4),R3 ;;;GET FIRST INPUT BUFFER20$:/ CMP (R3)+,(R3)+ ;;;POINT TO START OF DATA AREAV. MOV #T$$BFL-4,(SP) ;;;SET MAX BYTES IN BUFFER; I; THE FOLLOWING IS A LOOP THAT GOES THROUGH ALL CHARACTERS THAT HAVE BEENRE; INPUT SO FAR AND EXPANDS THEM. THE PURPOSE IS TO UPDATE THE CURRENTPB; HORIZONTAL POSITION (U.TCHP) TO THE VALUE IT HAD BEFORE THE LAST ; CHARACTER (THE TAB) WAS INPUT.;O30$:6 CMP R3,2(SP) ;;;POINTING TO THE RUBBED-OUT CHARACTER?% BEQ 50$ ;;;IF EQ, YES...WE ARE DONEF40$:3 CALL GETRIC ;;;GET THE CHARACTER POINTED TO BY R3P MOV R3,-(SP) ;;;SAVE R3% CALL EXPCHR ;;;EXPAND THE CHARACTER  MOV (SP)+,R3 ;;;RESTORE R3 : BCS 40$ ;;;IF CS, EXPAND CHARACTER AGAIN (DEFERRED ECHO) INC R3 ;;;UPDATE POINTER" DEC (SP) ;;;DECREMENT LOOP COUNT7 BNE 30$ ;;;IF NE, MORE IN THIS BUFFER...LOOP FOR MORETC MOV -T$$BFL(R3),R3 ;;;LOOP COUNT RAN OUT - THIS CAN ONLY HAPPEN...0 ;;; ...IF WE ARE DOING BUFFERED INPUT, SO...0 ;;; ...GET LINK TO NEXT BUFFER (MUST BE ONE) BR 20$ ;;;BIG LOOP; D; WE ARE BACK AT WHERE WE STARTED - U.TCHP CONTAINS NEW (BACKSPACED); HORIZONTAL POSITION.;R50$: CMP (SP)+,(SP)+ ;;;CLEAN STACKB, MOV (SP),R2 ;;;GET OLD HORIZONTAL POSITION; MOVB U.TCHP-U.TSTA(R5),(SP) ;;;GET NEW HORIZONTAL POSITIONN8 SUB (SP)+,R2 ;;;CALCULATE NUMBER OF BACKSPACES REQUIRED BGT 60$ ;;;IF GT, OUTPUT THEM 7 MOV #8.,R2 ;;;THE TAB WE WANT TO RUB OUT CAUSED AN... 1 ;;; ...AUTO CR-LF - SPACE BACK TO LEFT MARGIN.60$:1 MOV #ASBSP,R3 ;;;POINT TO STRING WITH BACKSPACESO BR ECHOS1 ;;;ECHO THE STRING .ENDC ;T$$RUB;AJ; PROCESS A RUBOUT FOR A HARDCOPY TERMINAL. THE ECHO SEQUENCE STARTS WITHJ; A BACKSLASH FOLLOWED BY EACH CHARACTER THAT IS RUBBED OUT. WHEN NO MOREM; CHARACTERS ARE TO BE RUBBED OUT, A TERMINATING BACKSLASH IS ECHOED FOLLOWED 6; BY THE CHARACTER THAT TERMINATED THE RUBOUT PROCESS.;M70$: .IF DF T$$SPL7 MOVB 00zLztkTADATADATADATADATADATAR2,U.TECO-U.TSTA(R5) ;;;SAVE RUBBED-OUT CHARACTERC .IFF ;T$$SPLR0 MOVB R2,U.TECB(R4) ;;;SAVE RUBBED-OUT CHARACTER .ENDC ;T$$SPL1 BIT #S3.RUB,4(R5) ;;;ALREADY IN RUBOUT SEQUENCE?R3 BNE 80$ ;;;IF NE, YES...ECHO RUBBED-OUT CHARACTERU8 BIS #S1.DEC,(R5) ;;;SET RUBOUT AND DEFERRED ECHO FLAGS BIS #S3.RUB,4(R5)- BR I2RUB2 ;;;SKIP TO ECHO A BACKSLASH FIRSTU80$:= CALLR I2EXPC ;;;EXPAND & ECHO CHAR. IN R2 & U.TECB (U.TECO)A;E); I2RUB1 - WE ARE ALREADY IN RUBOUT MODE..;DI2RUB1:* CMPB R2,#CH.RUB ;;;IS THIS ALSO A RUBOUT?4 BEQ EDRUB ;;;IF EQ, YES...CONTINUE RUBOUT SEQUENCE2 BIC #S3.RUB,4(R5) ;;;ELSE, GET OUT OF RUBOUT MODE1 BIS #S1.DPR,(R5) ;;;SET DEFERRED PROCESSING FLAG3 ;;;FALL THROUGH TO ECHO A TERMINATING BACKSLASH;SM; I2RUB2 - OUTPUT LEADING OR TRAILING BACKSLASH FOR HARDCOPY RUBOUT SEQUENCE.2;2I2RUB2: 8 MOV #ASBSL,R3 ;;;POINT TO BACKSLASH CHARACTER TO OUTPUT5 INCB U.TCHP-U.TSTA(R5) ;;;UPDATE HORIZONTAL POSITIONW3 CALLR ECHCHR ;;;ECHO 1 CHARACTER POINTED TO BY R32.PAGEB .SBTTL TTICH SUBROUTINES6 .SBTTL . SETSPD - FIND AND SET THE CALLER'S BAUD RATE;#;+@; SETSPD - DETERMINE THE INCOMING CALLER'S BAUD RATE AND SET IT.;F ; INPUTS:; R2 = CHARACTER RECEIVED"; R5 => U.TSTA OF THE TERMINAL UCB;S ; OUTPUTS:O2; R2 = IF THE LINE SPEED IS FOUND AND SET UP4; = 0 IF THE LINE SPEED COULD NOT BE DETERMINED@; THE CONTROLLER DEPENDENT ROUTINE FOR SETTING THE LINE SPEED IS2; CALLED AS EACH RANGE OF LINE SPEEDS IS CHECKED.;TA; REGISTERS MODIFIED: R3, R4 (BY CONTROLLER DEPENDENT ROUTINES) ;-;- .IF DF D$$M11!D$$ZMD!D$$VMDSETSPD:+; CLR -(SP) ;;;SET UP RETURN VALUE FOR R2 = SPEED NOT FOUNDT4 MOV R1,-(SP) ;;;SAVE REGISTERS USED BY THIS ROUTINE MOV R0,-(SP) ;;;E@ MOV U.CW4-U.TSTA(R5),R0 ;;;GET THE CURRENT SPEED AND FLAGS WORD+ BIC #^C<37>,R0 ;;;CLEAR ALL BUT SPEED BITSC? BIC #^C<377>,R2 ;;;CLEAR ALL BUT EIGHT BITS OF INPUT CHARACTERT> CMPB R2,#CH.CR ;;;IS IT A CARRIAGE RETURN (SPEED IS CORRECT)?- BEQ 60$ ;;;IF EQ, YES...EXIT AUTOBAUD STATE(B CMPB R2,# ;;;8-BIT CARRIAGE RETURN (SPEED IS CORRECT)?- BEQ 60$ ;;;IF EQ, YES...EXIT AUTOBAUD STATENC BIT #U4.CR,U.CW4-U.TSTA(R5) ;;;EXPECTING TO SEE A CARRIAGE RETURN?D6 BNE 20$ ;;;IF NE, YES...WE DIDN'T GET ONE, SO LOG IT> CMPB R0,#S.4800 ;;;DID WE JUST FINISH SEARCHING AT 4800 BAUD?: BNE 10$ ;;;IF NE, NO...GO SEARCH LOW BAUD RATE TABLE NOW* TST R2 ;;;WAS RECEIVED CHARACTER A NULL?8 BNE 30$ ;;;IF NE, NO...SEARCH HIGH BAUD RATE TABLE NOW; MOV #S.300,R0 ;;;SEARCH THE LOW BAUD SPEED RANGE NEXT TIMER8 BR 50$ ;;;CHANGE THE SPEED AND WAIT FOR NEXT CHARACTER; K; THE PREVIOUS INPUT CHARACTER DID NOT MATCH ANYTHING IN THE HIGH BAUD RATENO; RANGE. WE HAVE A NEW CHARACTER TO CHECK AGAINST THE LOW BAUD RATE TABLE NOW. ;10$:5 MOV #ABLOW,R1 ;;;SET ADDRESS OF LOW BAUD SPEED TABLE?< CALL TBLCHK ;;;LOOK FOR A MATCH AGAINST RECEIVED CHARACTER6 BEQ 40$ ;;;IF CC, FOUND MATCH...SET SPEED FROM TABLE; 0; WE COME HERE IN EITHER OF THE FOLLOWING CASES:D; 1. AN INPUT CHARACTER COULD NOT BE MATCHED WITH THE HIGH BAUD RATEF; TABLE ENTRIES; THE LINE SPEED WAS CHANGED FOR LOW SPEED CHECKING;B; AND THE NEXT CHARACTER DID NOT MATCH THE LOW BAUD RATE TABLE.E; 2. A MATCH WAS FOUND IN EITHER THE LOW OR HIGH SPEED TABLE, AND THE0=; NEXT CHARACTER WAS EXPECTED TO BE A CARRIAGE RETURN (FORL8; VALIDATION). HOWEVER, IT WASN'T A CARRIAGE RETURN.;Q20$:1 INCB U.CW4+1-U.TSTA(R5) ;;;INCREMENT ERROR COUNT 1 CMPB U.CW4+1-U.TSTA(R5),#5 ;;;REACHED THRESHOLD?.+ BLT 70$ ;;;IF LT, NO...KEEP PRESENT SPEED 5 MOV #S.4800,R0 ;;;RESET SPEED, ERROR COUNT AND FLAGSW/ BR 50$ ;;;TRY AGAIN WITH ORIGINAL RANGE CHECKN; O; SEARCH THE HIGH BAUD RATE TABLE FOR A MATCH WITH THE CURRENT INPUT CHARACTER.R;E30$:7 MOV #ABHIGH,R1 ;;;SET ADDRESS OF HIGH BAUD SPEED TABLEE< CALL TBLCHK ;;;LOOK FOR A MATCH AGAINST RECEIVED CHARACTER1 BNE 70$ ;;;IF NE, NO MATCH...KEEP PRESENT SPEEDW;-J; FOUND A MATCHING CHARACTER IN SPEED TABLE. SET SPEED FROM THE TABLE AND>; LOOK FOR A REAL CARR00z1ztblIAGE RETURN AS THE NEXT INPUT CHARACTER.;.40$:/ MOVB (R1)+,R0 ;;;GET CALLER'S SPEED FROM TABLE = BIS #U4.CR,R0 ;;;VALIDATE THIS SPEED ON NEXT INPUT CHARACTER ;D6; SET THE LINE TO A NEW LINE SPEED AS SPECIFIED BY R0.;50$:9 MOV R0,U.CW4-U.TSTA(R5) ;;;SET NEW SPEED VALUE AND FLAGSE5 BR 70$ ;;;SET UP CONTROLLER AND WAIT FOR NEXT INPUTA;TI; SINCE WE JUST RECOGNIZED A REAL CARRIAGE RETURN AS THE INPUT CHARACTER,IF; WE ARE NOW AT THE CORRECT SPEED. EXIT AUTOBAUD-IN-PROGRESS MODE ANDE; SET UP TO PROCESS THE CARRIAGE RETURN WHICH WILL GIVE A CLI PROMPT.);060$:A BIC #S5.ABP,U.TST5-U.TSTA(R5) ;;;CLEAR AUTO-BAUD IN PROGRESS BIT 8 MOV #72.,U.CW4-U.TSTA(R5) ;;;RESET CORRECT BUFFER WIDTH6 MOV R2,4(SP) ;;;SAVE CARRIAGE RETURN WE JUST DETECTED;RO; CALL THE CONTROLLER DEPENDENT ROUTINE TO SET THE LINE TO THE SPECIFIED SPEED.N; 70$:+ BIC #^C<37>,R0 ;;;CLEAR ALL BUT SPEED BITSA7 BIS #4000,R0 ;;;SET AUTO-BAUD DETECT BIT FOR SET SPEEDO8 MOV #CT.PRM,R2 ;;;SET INDEX FOR CHANGING LINE PARAMETER0 CLR R1 ;;;SET FLAG FOR NOT FLOW-CONTROL CHANGE' CALL CTRD ;;;GO CHANGE THE LINE SPEEDT( MOV (SP)+,R0 ;;;RESTORE SAVED REGISTERS MOV (SP)+,R1 ;;;.: MOV (SP)+,R2 ;;;GET BACK RETURN STATUS (EITHER OR 0) RETURN ;;;ALL DONE ;JD; TBLCHK - CHECK CURRENT SPEED TABLE FOR A MATCHING INPUT CHARACTER.; TBLCHK:E7 CMPB R2,(R1)+ ;;;RECEIVED CHARACTER MATCH TABLE ENTRY?T+ BEQ 10$ ;;;IF EQ, YES...RETURN WITH ENTRYD INC R1 ;;;BUMP PAST SPEEDV TSTB (R1) ;;;END OF THE TABLE?( BNE TBLCHK ;;;IF NE, NO...KEEP LOOKING! CLZ ;;;SHOW NO MATCH WAS FOUNDT10$: RETURN ;;;DONE WITH SCANM .ENDC ;D$$M11!D$$ZMD!D$$VMD.PAGEM? .SBTTL . TMMCHK - CHECK FOR SWITCH TO TERMINAL MANAGEMENT MODE ;>C; **-TMMCHK - CHECK FOR POSSIBLE SWITCH TO TERMINAL MANAGEMENT MODEB;FM; THIS ROUTINE CHECKS THE CURRENT INPUT STATE AND THE CURRENT INPUT CHARACTERTJ; TO SEE IF A SWITCH TO TERMINAL MANAGEMENT MODE IS NECESSARY. ONE OF THE:; FOLLOWING ACTIONS IS PERFORMED (IN DECREASING PRIORITY):;T;; 1. IF TERMINAL MANAGEMENT MODE IS NOT ENABLED, JUST EXIT.AG; 2. IF WE HAVE NOT SEEN THE FIRST SWITCH CHARACTER, SEE IF THE CURRENTV@; INPUT CHARACTER IS IT. IF SO, UPDATE THE TERMINAL MANAGEMENT; STATE FLAGS AND EXIT.C; 3. IF WE HAVE ALREADY SEEN THE FIRST SWITCH CHARACTER, SEE IF THEH:; CURRENT INPUT CHARACTER IS THE FINAL ONE. IF SO, CLEAR:; THE TYPE-AHEAD BUFFER AND REQUEST A FORK TO SWITCH INTO; TERMINAL MANAGEMENT MODE.C; 4. OTHERWISE, SAVE THE CURRENT INPUT CHARACTER, RECYCLE THE FIRST.>; SWITCH CHARACTER THROUGH THE INPUT LOGIC, AND EXIT. IF THE=; USER ENTERED THE FIRST SWITCH CHARACTER TWICE, ONLY ONE OFN*; THEM IS PASSED BACK TO THE INPUT LOGIC.;E ; INPUTS:; R2 = CURRENT INPUT CHARACTER."; R5 => U.TSTA OF THE TERMINAL UCB@; U.TSCA => AST CONTROL BLOCK/TSA EVENT PACKET IF TMM IS ENABLED4; S5.SW1/S5.TMM = CURRENT TERMINAL MANAGEMENT STATE;D ; OUTPUTS:RE; CC-C = 0 IF INPUT CHARACTER WAS NOT A SWITCH CHARACTER AND MUST BEE; PROCESSED UPON EXIT.C; CC-C = 1 IF INPUT CHARACTER WAS ONE OF THE SWITCH CHARACTERS ANDE ; SHOULD BE IGNORED UPON EXIT.;S; REGISTERS MODIFIED: R3, R4;-; .IF DF T$$SCATMMCHK:  .IF DF T$$SPL5 MOV 120000+U.TSCA,R4 ;;;GET SWITCH CHARACTER TEP/ACBS .IFF ;T$$SPLL/ MOV U.TUX-U.TSTA(R5),R4 ;;;GET TERMINAL'S UCBXT9 BEQ 40$ ;;;IF EQ, NO UCBX...SKIP SWITCH CHARACTER CHECKA2 MOV U.TSCA(R4),R4 ;;;GET SWITCH CHARACTER ACB/TEP .ENDC ;T$$SPL6 BEQ 40$ ;;;IF EQ, NO SWITCH CHARACTERS SET UP...SKIP@ BIT #S5.TMM,U.TST5-U.TSTA(R5) ;;;ALREADY IN TERMINAL MGMT MODE?8 BNE 40$ ;;;IF NE, YES...SKIP SWITCH CHARACTER CHECKING9 MOV A.PRM+6(R4),R3 ;;;GET USER-DEFINED SWITCH CHARACTERSFD BIT #S5.SW1,U.TST5-U.TSTA(R5) ;;;ALREADY SEEN 1ST SWITCH CHARACTER?) BEQ 10$ ;;;IF EQ, NO...CHECK FOR IT NOW41 SWAB R3 ;;;SWAP CHARACTERS TO CHECK FOR 2ND ONEB10$:1 CMPB R2,R3 ;;;DOES THIS SWITCH CHARACTER MATCH?E4 BNE 30$ ;;;IF NE, NO...NO SWITCH TO TERM MGMT MODE ASSUME S5.SW1,1 ASSUME S5.TMM,S5.SW1+1.< INC U.TST5-U.TSTA(R5) ;00zLztkTADATADATADATADATADATA;;UPDATE SWITCH CHARACTER STATE BITS< BIT #S5.TMM,U.TST5-U.TSTA(R5) ;;;SEEN 2ND SWITCH CHARACTER?0 BEQ 20$ ;;;IF EQ, NO...WAIT FOR NEXT CHARACTER;H/; FORK TO PUT USER IN TERMINAL MANAGEMENT MODE.L;D/ CALL I1CTX1 ;;;GO FLUSH THE TYPE-AHEAD BUFFER # CALL I1CTQ ;;;ALSO RESTART OUTPUTA< MOV #FR.SCA,R3 ;;;REQUEST FORK FOR SWITCH TO TERM MGMT MODE CALL FORK ;;;DO IT20$:, SEC ;;;INDICATE SWITCH CHARACTER WAS SEEN RETURN ;;;ALL DONE1;N; INPUT IS NOT A SWITCH CHARACTER - SEE IF NEED TO RECYCLE PREVIOUS CHARACTER.;I30$:B BIT #S5.SW1,U.TST5-U.TSTA(R5) ;;;DID WE SEE 1ST SWITCH CHARACTER?7 BEQ 40$ ;;;IF EQ, NO...JUST PROCESS CURRENT CHARACTERU ASSUME S5.SW1,1: DEC U.TST5-U.TSTA(R5) ;;;CLEAR FLAG SAYING WE SAW 1ST ONE2 SWAB R3 ;;;SWAP TO GET 1ST SWITCH CHARACTER BACK6 CMPB R2,R3 ;;;DID USER ENTER 1ST SWITCH CHAR. TWICE?7 BEQ 40$ ;;;IF EQ, YES...JUST PASS ONE OF THEM THROUGHS' MOV R2,-(SP) ;;;SAVE CURRENT CHARACTERL6 MOV 2(SP),-(SP) ;;;DUPLICATE RETURN ADDRESS FOR LATER2 CLR R2 ;;;PREPARE FOR BYTE COPY (AND CLEAR CC-C)- BISB R3,R2 ;;;GET 1ST SWITCH CHARACTER BACKC1 CALL @(SP)+ ;;;FEED IT THROUGH INPUT PROCESSING , MOVB (SP)+,R2 ;;;GET BACK CURRENT CHARACTER40$: CLC ;;;CLEAR RETURN STATUSE8 RETURN ;;;RETURN TO FEED IT THROUGH THE INPUT PROCESS .ENDC ;T$$SCA.PAGE > .SBTTL . OOBCHK - CHECK OUT-OF-BAND MASKS FOR INPUT CHARACTER;P;+A; **-OOBCHK - DETERMINE IF CURRENT INPUT CHARACTER IS OUT-OF-BANDV;S;- ; INPUTS:; R2 = CHARACTERS"; R5 => U.TSTA OF THE TERMINAL UCB;E ; OUTPUTS:E#; CC-C = 0 IF CHARACTER IS NOT OOBT; = 1 IF CHARACTER IS OOB ;F ; REGISTERS ALTERED: R0, R3, R4;-;S;-;; .IF DF T$$OOB .ENABL LSB0OOBCHK:; CLR R4 ;;;ASSUME NOT OOB0 CMPB R2,#CH.SP ;;;IS INPUT A CONTROL CHARACTER?/ BHIS 60$ ;;;IF HIS, NO...NOT SUPPORTED AS OOB- .IF DF T$$SPL8 MOV 120000+U.TOBA,R3 ;;;GET OUT-OF-BAND ACB/TEP POINTER .IFF ;T$$SPLC, MOV U.TUX-U.TSTA(R5),R3 ;;;GET UCBX POINTER2 BEQ 60$ ;;;IF EQ, NOT ONE...CAN'T BE OOB SO SKIP5 MOV U.TOBA(R3),R3 ;;;GET OUT-OF-BAND ACB/TEP POINTERT .ENDC ;T$$SPL1 BEQ 60$ ;;;IF EQ, OUT-OF-BAND NOT SET UP...SKIP4# MOV R3,R4 ;;;COPY ACB/TEP POINTER.2 ADD #A.PRM+6,R4 ;;;POINT TO START OF OOB BITMASKS% ;;;ASSUME THIS IS AN ACB, NOT TEPH .IF DF R$$IIC ASSUME A.CBL,E.VSIZ TST A.CBL(R3) ;;;ACB OR TEP?S BEQ 5$ ;;;IF EQ, ACB .IF DF T$$SCA@ BIT #S5.TMM,U.TST5-U.TSTA(R5) ;;;IS USER IN TERMINAL MGMT MODE?. BNE 12$ ;;;IF NE, YES... DON'T DO OOB CHECKS .ENDC ;T$$SCA@ ASSUME E.VOBM,A.PRM+2 ;;;NOTE: THIS CODE ALSO ASSUMES THAT THE$ ;;;OOB BITMASKS START AT A.PRM+6( SUB #4,R4 ;;;POINT TO ACB OOB BITMASKS5$:  .ENDC ;R$$IIC! MOV R2,R0 ;;;COPY THE CHARACTERO2 CMPB #16.,R0 ;;;IS CHARACTER IN FIRST MASK WORD?+ BHI 10$ ;;;IF HIS, YES...SKIP TO CHECK IT/ SUB #16.,R0 ;;;MAKE CHARACTER RELATIVE TO 16.,6 TST (R4)+ ;;;POINT TO SECOND HALF OF DOUBLEWORD MASK10$:- ASL R0 ;;;CONVERT CHARACTER FOR WORD OFFSETE5 BIT $BTMSK(R0),(R4)+ ;;;IS CHARACTER IN THE BITMASK?M BNE 60$ ;;;IF NE, OOB: 12$: CLR R4 ;;;INDICATE NOT OOB BR 60$ ;;;DONE;+?; **-OOBCK2 - DETERMINE WHETHER AN OOB CHARACTER IS INCLUDE AND.<; PROCESS OOB CHARACTER BY INSERTING IT IN OOB BUFFER.8; IF THERE'S NO ROOM IN THE BUFFER, GO DIRECTLY TO6; WARN THE USER. OTHERWISE, CHECK FOR CLEAR AND<; PERFORM ASSOCIATED FUNCTION. SET STATUS AND SET UP ; FORK FOR OOB.;L?; NOTE: THIS ROUTINE IS DESIGNED TO BE CALLED IMMEDIATELY AFTER 9; OOBCHK AND SHOULD BE CALLED ONLY IF THE CHAR. IS OOB.<; VALUES FOR R0, R3 AND R4 (INPUT TO OOBCK2) ARE ESTABLISHED:; BY CALLING OOBCHK. ALSO NOTE THAT IT IS ASSUMED THAT R07; WAS SAVED ON THE STACK PRIOR TO CALLING THIS ROUTINE.E; ; INPUTS:; R0 ESTABLISHED BY OOBCHKO; R2 = CHARACTER ; R3 ESTABLISHED BY OOBCHKE; R4 ESTABLISHED BY OOBCHKR"; R5 => U.TSTA OF THE TERMINAL UCB;S ; OUTPUTS: .; CC-C = 0 IF CHARACTER IT NOT TO BE INCLUDED*; = 1 IF CHARACTER IS TO BE INCLUD00z1ztblED;C ; REGISTERS ALTERED: R0, R3, R4;-; OOBCK2: - ADD #E.VHDR,R3 ;;;POINT TO OOB BUFFER HEADERE$ ;;;ASSUME THIS IS A TEP, NOT ACBC ASSUME E.VHDR,A.PRM+16 ;;;NOTE:CODE ASSUMES OOB HEADER IMMEDIATELYL' ;;;FOLLOWS OOB BIT MASKS IN THE AST  ASSUME A.CBL,E.VSIZ% TST E.VSIZ-E.VHDR(R3) ;;;ACB OR TEP?  BNE 15$ ;;;IF NE, TEPL& ADD #4,R3 ;;;POINT TO ACB OOB HEADER15$:% MOV R4,-(SP) ;;;SAVE BITMASK POINTERC+ CALL PCBUF ;;;PUT CHARACTER IN OOB BUFFERF) MOV (SP)+,R4 ;;;GET BACK BITMASK POINTERE! BCC 17$ ;;;CC -> ROOM IN BUFFERO+ TST (SP)+ ;;;ELSE, POP OFF RETURN ADDRESSR MOV (SP)+,R0 ;;;RESTORE R0I2 CALLR I1BEEP ;;;WARN USER THAT NO ROOM IN BUFFER17$:. TST (R4)+ ;;;SKIP TO NEXT BITMASK DOUBLEWORD4 BIT $BTMSK(R0),(R4)+ ;;;IS CHARACTER A "CLEAR" OOB?, BNE 20$ ;;;IF NE, NO...CHECK FOR "INCLUDE" MOV R2,-(SP) ;;;SAVE CHARACTER;+ CALL I1CTX1 ;;;CLEAR OOB MUST CLEAR TABUF # CALL I1CTQ ;;;ALSO RESTART OUTPUT ( MOV (SP)+,R2 ;;;RESTORE CHARACTER TO R2 .IF DF T$$SPL$ MOV #120000,R3 ;;;GET UCBX POINTER .IFF ;T$$SPLT, MOV U.TUX-U.TSTA(R5),R3 ;;;GET UCBX POINTER .ENDC ;T$$SPL ASSUME U.TCI,0 * TST (R3) ;;;DO WE HAVE A CURRENT PACKET? BEQ 30$ ;;;BR IF NON MOV R2,-(SP) ;;;GET CHARACTER SWAB (SP) ;;;INTO HIGH BYTE < MOVB #IS.OOB,(SP) ;;;INDICATE THAT THIS WILL TERMINATE READ MOV (SP)+,@(R3) ;;;SET STATUS5 BR 30$ ;;;SKIP SINCE "CLEAR" OOB CAN'T BE "INCLUDE"T20$:. TST (R4)+ ;;;SKIP TO NEXT BITMASK DOUBLEWORD9 BIT $BTMSK(R0),(R4) ;;;IS CHARACTER OUT-OF-BAND INCLUDE? 6 BNE 40$ ;;;IF NE, YES...SKIP TO FINISH OOB CHARACTER30$:. CLR R4 ;;;INDICATE CHARACTER IS NOT INCLUDED40$:8 MOV #FR.OOB,R3 ;;;SET REQUEST TYPE FOR OUT-OF-BAND FORK MOV R4,-(SP) ;;;SAVE R4 CALL FORK ;;;REQUEST THE FORKI MOV (SP)+,R4 ;;;V60$:. TST R4 ;;;CLEAR CARRY AND SEE IF OOB OR INCL* BEQ 70$ ;;;IF EQ, NOT OOB OR NOT INCLUDE" SEC ;;;SET CARRY IF OOB OR INCL70$: RETURN ;;;ALL DONE .DSABLE LSB .ENDC ;T$$OOB.PAGES@ .SBTTL . IPROC - SEE IF AN INPUT CHARACTER CAN BE PROCESSED NOW; ;+F; **-IPROC - DETERMINE WHETHER AN INPUT CHARACTER CAN BE PROCESSED NOW; ; INPUTS:; R2 = CHARACTER "; R5 => U.TSTA OF THE TERMINAL UCB;K ; OUTPUTS:P7; CC-C = 0 IF THE INPUT CHARACTER CAN BE PROCESSED NOW+1; = 1 IF CHARACTER CAN NOT BE PROCESSED NOWO;O1; CC-Z = 1 IF THE CHARACTER IS TO BE THROWN AWAY;C ; REGISTERS ALTERED: R2, R3, R4;-;T .ENABL LSBDIPROC::S2 BIT #S1.DSI,(R5) ;;;IS INPUT PROCESSING DISABLED?- BNE RETCS ;;;IF NE, YES...CAN'T PROCESS NOWD .IF DF B$$MAP$ CALL RSDPRC ;;;IO.RSD OUTSTANDING?( CLZ ;;;DON'T THROW THE CHARACTER AWAY* BCC RETCS ;;;Y - CAN'T PROCESS NOW, JUMP .ENDC ;B$$MAP? CMP R2,#CH.CTC ;;;IS CHARACTER ^C (AND NO HARD RECEIVE ERROR)?O BNE 70$ ;;;IF NE, NO...SKIPN! .SBTTL . CHARACTER IS CONTROL-C1;F; CHARACTER IS CTRL-C ;O .IF DF T$$SCA G1 BIT #S3.TME,4(R5) ;;;IS TERMINAL MANG'T ENABLED?2 BNE 70$ ;;;IF NE, YES, CTL C IS NORMAL CHARACTER .ENDC ;T$$SCA ASSUME S1.IBY,200 TSTB (R5) ;;;IS INPUT BUSY?M BMI 30$ ;;;IF MI, YES...SKIP;AJ; CHARACTER IS CONTROL-C AND INPUT IS NOT BUSY. SEE IF IT SHOULD CAUSE AN; UNSOLICITED INPUT AST.;$ .IF DF T$$CCA .IF DF T$$SPL+ TST U.ATT-U.TSTA(R5) ;;;TERMINAL ATTACHED?  BEQ 60$ ;;;BR IF NO. MOV #120000,R4 ;;;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPLO4 MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX IF THERE IS ONE* BEQ 60$ ;;;IF EQ, THERE ISN'T ONE...SKIP .ENDC ;T$$SPL3 MOV U.TAST(R4),R3 ;;;GET AST BLOCK IF THERE IS ONER( BEQ 20$ ;;;IF EQ, NO AST SET UP...SKIP> BITB #TF.XCC,A.PRM+5(R3) ;;;WANT CONTROL-C PASSED TO THE AST? BNE 60$ ;;;IF NE, NO...SKIP 10$:7 TST A.PRM+6(R3) ;;;NEED TO CHECK FOR LOCKED AST BLOCK?1 BEQ 100$ ;;;IF EQ, YES...CHECK THAT POSSIBILITYQ? BITB #AF.QUE,A.PRM+5(R3) ;;;IS ACB CURRENTLY IN THE AST QUEUE?X0 BNE RETCS ;;;IF NE, YES...CAN'T PROCESS ^C NOW+ BR 110$ ;;;OTHERWISE, SKIP TO TRIGGER AST 20$: .IFTF ;T$$CCAA BIT #S3.PTH!S3.RAL,4(R5) ;;;T00zLztkTADATADATADATADATADATAERMINAL IN PASSTHRU OR BINARY MODE?N7 BNE RETCS ;;;IF NE, YES...PUT ^C IN TYPE-AHEAD BUFFERC0 BR 60$ ;;;OTHERWISE, SEE IF TERMINAL IS SLAVED;B+; CHARACTER IS CONTROL-C AND INPUT IS BUSY.M?; 1. IF DOING IO.RAL OR IO.RST, OR IF ALREADY DOING UNSOLICITEDE@; INPUT, TRY TO PROCESS IMMEDIATELY (DEPENDENT ON OUTPUT BUSY; AND ECHOING REQUIREMENT).8; 2. ELSE, IF TERMINAL IS SLAVED, DISCARD THE CHARACTER.>; 3. ELSE, IF AN AST IS NOT SPECIFIED, FORK TO ABORT SOLICITED); INPUT AND START AN UNSOLICITED INPUT.P; 4. ELSE, QUEUE AN AST;E30$:C BIT #S1.PTH!S1.RSP,(R5) ;;;DOING READ WITH SPEC. PROC.OR PASSTHRU?, BNE 80$ ;;;IF NE, YES...SKIP .IF DF T$$RPR< BIT #S5.RPO,U.TST5-U.TSTA(R5) ;;;PROMPT OUTPUT IN PROGRESS?- BNE RETCS ;;;IF NE, YES...CAN'T PROCESS NOWO .ENDC ASSUME S1.USI,100000O- TST (R5) ;;;ARE WE DOING UNSOLICITED INPUT?. BPL 40$ ;;;IF PL, NO...SKIPI;R;; CHARACTER IS CONTROL-C, AND AN UNSOLICITED INPUT IS BUSY. ?; 1. IF OUTPUT IS NOT BUSY ACCEPT CTRL-C WHICH WILL RESTART THE ; UNSOLICITED INPUT.EF; 2. ELSE, CANNOT PROCESS NOW SINCE UNLIKE THE PROCESSING OF ALL OTHER@; CHARACTERS, CTRL-C PROCESSING FORCES THE OUTPUT OF A PROMPT>; WITHOUT REGARD FOR THE ECHO/NOECHO STATUS OF THE TERMINAL;;$ BIT #S1.OBY,(R5) ;;;IS OUTPUT BUSY?9 BEQ RETCC ;;;IF EQ, NO...^C STARTS AN UNSOLICITED INPUTURETCS:3 SEC ;;;SET INDICATION WE CAN'T PROCESS CHARACTERR RETURN ;;;ALL DONE ;U7; CHARACTER IS CONTROL-C AND A SOLICITED INPUT IS BUSY.C; 40$: .IFT ;T$$CCAR .IF DF T$$SPL. MOV #120000,R4 ;;;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPLE$ MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX .ENDC ;T$$SPL3 MOV U.TAST(R4),R3 ;;;GET AST BLOCK IF THERE IS ONE - BEQ 60$ ;;;IF EQ, ASTS NOT SPECIFIED...SKIP1, BITB #TF.XCC,A.PRM+5(R3) ;;;PASS ^C TO AST? BNE 60$ ;;;IF NE, NO...SKIPI6 BITB #AF.QUE,A.PRM+5(R3) ;;;IS AN AST ALREADY QUEUED?- BEQ 10$ ;;;IF EQ, NO...ASTS MAY BE POSSIBLE  .ENDC ;T$$CCA50$:7 TST (SP)+ ;;;POP RETURN ADDRESS TO TOSS THE CHARACTER+ RETURN ;;;RETURN BACK TO CALLER'S CALLERR60$: ASSUME U2.SLV,2004 TSTB U.CW2-U.TSTA(R5) ;;;IS THIS A SLAVED TERMINAL?+ BMI 50$ ;;;IF MI, YES...THROW AWAY THE ^C  .IF DF A$$CLI&C$$CTC < BIT #S3.CTC,4(R5) ;;;DOES THIS TERMINAL EXPECT NOTIFICATION8 BEQ 130$ ;;;IF EQ, NO..CONTINUE WITH NORMAL PROCESSING> MOV U.MUP-U.TSTA(R5),R3 ;;;GET THIS CLI OFFSET INTO CPB TABLE1 BIC #^CUM.CLI,R3 ;;;ELIMINATE ALL BUT THE OFFSETN4 MOV $CPTBL(R3),R3 ;;;POINT TO CPB FOR THIS TERMINALE BIT #CP.CTC,C.PSTS(R3) ;;;DOES THIS CLI ACCEPT NOTIFICATION PACKET?09 BEQ 130$ ;;;IF EQ, NO...CONTINUE WITH NORMAL PROCESSING 4 MOV #FR.KIL,R3 ;;;FORK TO QUEUE NOTIFICATION PACKET8 CALL FORK ;;;QUEUE FORK REQUEST - THIS CODE ASSUMES..., ;;; ...THAT FPKIL IS ENTERED WITH BIT..." ;;; ...UM.KIL CLEARED IN U.MUP1 CALL GCTAB ;;;CHECK FOR ^C IN TYPE-AHEAD BUFFERH" BCS 50$ ;;;IF CS BUFFER IS CLEAR* CMPB R2,#CH.CTC ;;;MAKE SURE IT IS THE ^C3 BNE 50$ ;;;IF NE, IT ISN'T...IGNORE THE CHARACTERL7 CALL RCTAB ;;;REMOVE CHARACTER FROM TYPE-AHEAD BUFFERC. BR 50$ ;;;RETURN FOR NEXT FORK QUEUE ROUTINE .IFF ;A$$CLI&C$$CTC BR 130$ ;;;N - JUMPR .ENDC ;A$$CLI&C$$CTCA.PAGEL% .SBTTL . CHARACTER IS NOT CONTROL-CD;S; CHARACTER IS NOT CONTROL-C;S70$: ASSUME S1.IBY,200 TSTB (R5) ;;;IS INPUT BUSY? BPL 90$ ;;;IF PL, NO...SKIP ;E/; CHARACTER IS NOT CONTROL-C AND INPUT IS BUSY:R3; 1. IF ECHO IS REQUIRED AND OUTPUT IS BUSY, RETURN$8; WITH CC-C = 1 (CHARACTER CAN NOT BE PROCESSED NOW).=; 2. IF OUTPUT IS BUSY WITH THE PROMPT OF A READ WITH PROMPT,N9; THE READ HAS NOT STARTED YET SO RETURN WITH CC-C = 1 ); (CHARACTER CANNOT BE PROCESSED NOW).A@; 3. ELSE, RETURN WITH CC-C =0 (CHARACTER CAN BE PROCESSED NOW).;S80$:! BIT #S1.OBY,(R5) ;;;OUTPUT BUSY?2, BEQ RETCC ;;;IF EQ, NO...PROCESS CHARACTER, BIT #S1.RNE,(R5) ;;;IS LINE IN NOECHO MODE?, BEQ RETCS ;;;IF EQ, NO...CAN'T PROCESS NOW .IF DF T$$RPR< BIT #S5.RPO,U.TST5-U.TSTA(R5) ;;;PROMPT OUTPUT IN PROGRESS?- BNE R00z1ztblETCS ;;;IF NE, YES...CAN'T PROCESS NOWR .ENDC ;T$$RPRRETCC: CLC ;;;CLEAR CARRY  RETURN ;;;RETURN ;H3; CHARACTER IS NOT CONTROL-C AND INPUT IS NOT BUSY:AF; 1. IF UNSOLICITED INPUT ASTS ARE SET UP, REQUEST A FORK TO GIVE ONE.E; NOTE A SPECIAL CASE - IF THE AST BLOCK IS "LOCKED", DO NOT FORK.OF; THE AST BLOCK IS LOCKED WHEN IT IS STILL IN THE TASK'S AST QUEUE,E; OR WHEN TF.NOT WAS SPECIFIED AT ATTACH AND THE TASK HAS NOT DONET.; A READ SINCE THE PREVIOUS AST WAS QUEUED./; 2. ELSE, IF THE TERMINAL IS ATTACHED, RETURN...; 3. ELSE, FORK TO START AN UNSOLICITED INPUT.;TF; IN ALL OF THE ABOVE CASES, RETURN WITH CC-C = 1 TO INDICATE THAT THE-; CHARACTER CAN NOT BE PROCESSED IMMEDIATELY.R;E90$:2 TST U.ATT-U.TSTA(R5) ;;;IS THE TERMINAL ATTACHED? .IF DF T$$CCA BEQ 120$ ;;;IF EQ, NO...SKIP .IF DF T$$SPL. MOV #120000,R4 ;;;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPLC: MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX (TERMINAL IS ATTACHED ;;;SO THERE MUST BE ONE) .ENDC ;T$$SPL+ MOV U.TAST(R4),R3 ;;;GET AST BLOCK ADDRESSS* BEQ RETCS ;;;IF EQ, NONE...NO AST SET UP3 TST A.PRM+10(R3) ;;;ASTS WANTED FOR OTHER THAN ^C?T! BEQ RETCS ;;;IF EQ, NO...RETURNS100$:D< BITB #AF.LCK!AF.QUE,A.PRM+5(R3) ;;;IS ACB LOCKED OR QUEUED?0 BNE RETCS ;;;IF NE, YES...CAN'T REQUEST IT NOW110$:K .IF DF T$$REDA BIT #S5.BCC!S5.DAO!S5.VER,R2 ;;;WAS HARD RECEIVE ERROR DETECTED?C. BNE 50$ ;;;IF NE, YES...THROW AWAY CHARACTER .ENDC ;T$$RED; MOV #FR.AST,R3 ;;;SET UP TO FORK FOR UNSOLICITED INPUT AST( BR 140$ ;;;SKIPL .IFF ;T$$CCAQ: BNE RETCS ;;;IF NE, TERMINAL IS ATTACHED...CAN'T PROCESS .ENDC ;T$$CCA120$:C4 TSTB U.CW2-U.TSTA(R5) ;;;IS THIS A SLAVED TERMINAL?* BPL 125$ ;;;DO NOT DISCARD THE CHARACTER= BIT #4,$TTPRM ;;;CHECK IF WE USE TYPEAHEAD BUFFER FOR SLAVED1 ;;;TERMINALS% BEQ 50$ ;;;THROW THE CHARACTER AWAY;0 BR RETCS ;;;MOVE CHARACTER IN TYPEAHEAD BUFFER125$: ;;;REFERENCE LABELT .IF DF T$$SER= BIT #UM.CMD,U.MUP-U.TSTA(R5) ;;;COMMAND ALREADY IN PROGRESS?- BNE RETCS ;;;IF NE, YES...CAN'T PROCESS NOWT .ENDC ;T$$SER .IF DF T$$IDO0 TST $MCRPT ;;;IS THE MCR DISPATCHER INSTALLED?0 BEQ RETCS ;;;IF EQ, YES...CAN'T PROCESS IT NOW .ENDC ;T$$IDO130$:E .IF DF T$$MOD0 BITB #US.DSB,U.STS-U.TSTA(R5) ;;;LINE DISABLED?7 BNE 50$ ;;;IF NE, YES...DON'T START UNSOLICITED INPUTA .ENDC ;T$$MOD5 MOV #FR.SUI,R3 ;;;FORK TO START AN UNSOLICITED INPUTC140$:T% CALL FORK ;;;QUEUE THE FORK REQUESTM8 BR RETCS ;;;RETURN TO INDICATE WE CAN'T PROCESS IT NOW .DSABL LSB..PAGE 4 .SBTTL . PCTAB - PUT CHARACTER IN TYPE-AHEAD BUFFER;$;+8; **-PCTAB - PUT A CHARACTER INTO THE TYPE-AHEAD BUFFER.; F; THIS ROUTINE PLACES A CHARACTER INTO A TERMINAL'S TYPE-AHEAD BUFFER.; ; INPUTS:; R2 = CHARACTER;"; R5 => U.TSTA OF THE TERMINAL UCB;E ; OUTPUTS:R6; CC-C = 0 IF CHARACTER SUCCESSFULLY STORED IN BUFFER:; = 1 IF CHARACTER WAS NOT STORED DUE TO FULL BUFFER;;; REGISTERS MODIFIED: R3, R4;-;; .ENABL LSBIPCTAB: .IF DF T$$SPL+ MOV #120000+U.TTBF,R3 ;;;SET TABUF POINTERU .IFF ;T$$SPLP. MOV U.TTAB-U.TSTA(R5),R3 ;;;GET TABUF POINTER& BNE 10$ ;;;IF NE...THERE IS A BUFFERA MOVB R2,U.TTAB+1-U.TSTA(R5) ;;;STORE CHAR. IN SINGLE-CHAR. TABUF7 INCB U.TTAB-U.TSTA(R5) ;;;MARK THE TABUF AS BEING FULL  CLC ;;;SHOW SUCCESS STATUS RETURN ;;;ALL DONER10$:1 BIT #1,R3 ;;;IS THIS A SINGLE CHARACTER BUFFER?W5 SEC ;;;ASSUME IT IS (AND IN USE) SO SET ERROR FLAGF- BNE 20$ ;;;IF NE, IT IS...RETURN WITH ERROR. .ENDC ;T$$SPL' CALL PCBUF ;;;PUT CHARACTER IN BUFFER" BCS 20$ ;;;IF CS, BUFFER IS FULL/ CALL SNDXOF ;;;SEE IF WE NEED TO SEND AN XOFFE( CLC ;;;RETURN WITH SUCCESS INDICATION RETURN ;;;ALL DONE .PAGEH; .SBTTL . PCBUF - PUT CHARACTER INTO STANDARD FORMAT BUFFERG;L;+:; **-PCBUF - PUT A CHARACTER INTO A STANDARD FORMAT BUFFER;BE; THIS ROUTINE PLACES A CHARACTER INTO A BUFFER FORMATTED AS FOLLOWS:S;N#; +---------------+---------------+$#00zLztkTADATADATADATADATADATA; | RETRIEVAL PTR | STORE PTR |.#; +---------------+---------------+;#; | BUFFER SIZE | CHARACTER CNT |;#; +---------------+---------------+ #; | CHARACTER BUFFER |C#; \ \N#; +-------------------------------+;B ; INPUTS:; R2 = CHARACTERO%; R3 => TOP OF STANDARD FORMAT BUFFERP;F ; OUTPUTS:A6; CC-C = 0 IF CHARACTER SUCCESSFULLY STORED IN BUFFER:; = 1 IF CHARACTER WAS NOT STORED DUE TO FULL BUFFER;-; REGISTERS MODIFIED: R4;-; PCBUF:% CLR R4 ;;;PREPARE FOR BYTE TRANSFER-9 BISB (R3)+,R4 ;;;GET OFFSET WHERE TO STORE THE CHARACTER ' INC R3 ;;;SKIP OVER RETRIEVAL POINTER7 CMPB (R3)+,(R3)+ ;;;IS THE BUFFER FULL (COUNT = SIZE)? ' SEC ;;;ASSUME YES AND SET ERROR FLAG-- BEQ 20$ ;;;IF EQ, YES...RETURN ERROR STATUSO7 ADD R3,R4 ;;;SET POINTER IN BUFFER TO STORE CHARACTERA! MOVB R2,(R4) ;;;STORE CHARACTERU" INC -(R3) ;;;COUNT THE CHARACTER# INC -(R3) ;;;UPDATE STORE POINTER = CMPB 3(R3),(R3) ;;;TIME TO WRAP (STORE = SIZE)? (CLEAR CC-C) ! BNE 20$ ;;;IF NE, NO...ALL DONES3 CLRB (R3) ;;;ELSE, SET POINTER AT START OF BUFFER 20$: RETURN ;;;ALL DONEE .DSABL LSBC.PAGE,< .SBTTL . GCTAB - GET A CHARACTER FROM THE TYPE-AHEAD BUFFER;S;+5; GCTAB - GET A CHARACTER FROM THE TYPE-AHEAD BUFFER.R;A ; INPUTS:"; R5 => U.TSTA OF THE TERMINAL UCB; ; OUTPUTS:M5; CC-C = 0 IF CHARACTER WAS OBTAINED FROM THE BUFFERT#; = 1 IF THE BUFFER WAS EMPTYTD; R2 = CHARACTER RETRIEVED FROM THE BUFFER (NOTE THAT THE CHARACTER#; IS NOT REMOVED FROM THE BUFFER!)DF; IF THERE IS ANY UNPROCESSED DEFAULT INPUT, RETURN THE NEXT CHARACTERD; OF IT IN R2 AND WITH CC-C = 0 BEFORE CHECKING THE TYPEAHEAD BUFFER;C!; REGISTERS ALTERED: R2, R3, R4;-;C .PSECT MAP5GCTAB::T .IF DF T$$EIO ASSUME S6.RDI,10000054 TST U.TST6-U.TSTA(R5) ;;;LOOKING FOR DEFAULT INPUT? BPL 3$ ;;;N - JUMP .IF DF T$$SPL. MOV #120000,R4 ;;;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPLE$ MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX .IFTF ;T$$SPL8 CLR R2 ;;;PREVENT FUTURE SIGN EXTENSION AND CLEAR CC-C. BIT #S1.IBF,@R5 ;;;IS DEFAULT INPUT BUFFERED? BNE 1$ ;;;Y - JUMP .IFT ;T$$SPLN9 MOV U.TDIP(R4),KISAR6 ;;;MAP USER'S DEFAULT INPUT BUFFER1 BISB @U.TDIP+2(R4),R2 ;;;GET A CHARACTER FROM ITE .IFF ;T$$SPLR5 MOV U.TDIP+2(R4),R3 ;;;GET POINTER TO NEXT CHARACTERL< MOV U.TDIP(R4),KISAR6 ;;;MAP USER'S BUFFER (MAY UNMAP UCBX) BISB @R3,R2 ;;;GET A CHARACTER .ENDC ;T$$SPL" MOV $DALED,KISAR6 ;;;REMAP DRIVER7 RETURN ;;;RETURN WITH CHARACTER IN R2 AND CC-C CLEAR F1$: BISB @U.TDIP+2(R4),R2 ;;;GET A CHARACTER FROM DEFAULT INPUT BUFFER7 RETURN ;;;RETURN WITH CHARACTER IN R2 AND CC-C CLEAR4 .ENDC ;T$$EIO3$: ;;;REFERENCE LABELB .IF DF T$$SPL; MOV #120000+U.TTBF+1,R2 ;;;POINT TO TABUF RETRIEVE POINTER+% CLR R3 ;;;PREPARE FOR BYTE TRANSFERE> BISB (R2)+,R3 ;;;GET RETRIEVE POINTER & POINT TO ACTIVE COUNT .IFF ;T$$SPL;. MOV R5,R3 ;;;POINT TO CELL CONTAINING THE...E ADD #U.TTAB-U.TSTA,R3 ;;; ...ADDRESS OF THE TABUF (ALSO CLEARS CC-C)-" MOV (R3),R2 ;;;GET TABUF POINTER5 BEQ 5$ ;;;IF EQ, NOT ONE...INDICATE BUFFER IS EMPTY 5 BITB #1,(R3)+ ;;;IS THIS THE SINGLE CHARACTER TABUF?C BNE 10$ ;;;IF NE, YES...SKIP% INC R2 ;;;POINT TO RETRIEVE POINTER0> MOVB (R2)+,R3 ;;;GET RETRIEVE POINTER & POINT TO ACTIVE COUNT .IFTF ;T$$SPL# TSTB (R2)+ ;;;IS THE TABUF EMPTY?P3 BNE 7$ ;;;IF EQ, YES...RETURN WITH THAT INDICATEDM 5$: JMP RETCSI7$: % ADD R2,R3 ;;;MAKE POINTER IN BUFFERT/ INC R3 ;;;POINT TO NEXT CHARACTER TO RETRIEVEC .IF DF T$$RED* CMPB -(R2),#1 ;;;LAST CHARACTER IN TABUF? BNE 10$ ;;;IF NE, NO...SKIP 9 MOV U.TST5-U.TSTA(R5),R2 ;;;GET HARD RECEIVE ERROR FLAGSB: BIC #^C,R2 ;;;CLEAR IRRELEVANT BITS8 BR 20$ ;;;RETURN WITH FLAGS AND CC-C CLEAR (FROM CMPB) .ENDC ;T$$RED10$: CLR R2 ;;;CLEAR R2 AND CC-CE20$:+ BISB (R3),R2 ;;;PUT CHARACTER IN LOW BYTEH" RETURN ;;;RETURN WITH CHARACTER.PAGE,? .SBTTL . RCTAB - REMOVE A CHA00z1ztblRACTER FROM THE TYPE-AHEAD BUFFERE;O;+8; RCTAB - REMOVE A CHARACTER FROM THE TYPE-AHEAD BUFFER.:; MUST BE CALLED ONLY IF THERE IS A CHARACTER TO REMOVE!!!G; IF THERE IS UNPROCESSED DEFAULT INPUT, DECREMENT CHARACTER COUNT LEFTE;R ; INPUTS:"; R5 => U.TSTA OF THE TERMINAL UCB; ; OUTPUTS: NONER;R; REGISTERS ALTERED: R3, R40;-;R .PSECT MAP5.6RCTAB:: .IF DF T$$EIO ASSUME S6.RDI,100000W4 TST U.TST6-U.TSTA(R5) ;;;LOOKING FOR DEFAULT INPUT? BPL 3$ ;;;N - JUMP: INC U.TDIP+2(R4) ;;;POINT TO NEXT DEFAULT INPUT CHARACTER9 DEC U.TDIC(R4) ;;;ONE LESS DEFAULT INPUT CHARACTER TO GO  BEQ 1$ ;;;BRANCH IF ALL DONE: BIT #S1.IBF,@R5 ;;;ARE DEFAULT INPUT CHARACTERS BUFFERED? BEQ 2$ ;;;N - RETURN7 DEC U.TDIP(R4) ;;;REDUCE COUNT OF CHARACTERS IN BUFFERB* BNE 2$ ;;;BUFFER IS NOT YET EMPTY - JUMPD MOV #T$$BFL-4,U.TDIP(R4) ;;;BUFFER IS EMPTY - RESET CHARACTER COUNTD MOV U.TDIP+2(R4),R3 ;;;GET POINTER ONE CHARACTER PAST END OF BUFFER. SUB #T$$BFL,R3 ;;;BACK UP TO BUFFER LINK WORD. MOV @R3,U.TDIP+2(R4);;;SET NEW CURRENT BUFFER: ADD #4,U.TDIP+2(R4) ;;;POINT TO FIRST CHARACTER WITHIN IT RETURN;D1$: BIC #S6.RDI,U.TST6-U.TSTA(R5);;;NO MORE DEFAULT INPUT TO PROCESS 2$: RETURN .ENDC ;T$$EIO3$: ;;;REFERENCE LABELC .IFT ;T$$SPLT; MOV #120000+U.TTBF+1,R3 ;;;POINT TO TABUF RETRIEVE POINTERV .IFF ;T$$SPL(/ MOV U.TTAB-U.TSTA(R5),R3 ;;;GET START OF TABUFV2 BIT #1,R3 ;;;IS THIS THE SINGLE CHARACTER TABUF? BNE 20$ ;;;IF NE, YES...SKIP% INC R3 ;;;POINT TO RETRIEVE POINTERU .ENDC ;T$$SPL& INCB (R3) ;;;UPDATE RETRIEVE POINTER( CMPB (R3)+,1(R3) ;;;DID WE WRAP AROUND? BNE 10$ ;;;IF NE, NO...SKIPT7 CLRB -1(R3) ;;;ELSE, RESET POINTER TO START OF BUFFER10$:% CALL SNDXON ;;;POSSIBLY SEND AN XON0 DECB (R3) ;;;UPDATE COUNT OF BYTES LEFT TO GET .IF DF T$$RED1 BEQ 30$ ;;;IF EQ, LAST CHARACTER REMOVED...SKIPR .IFTF ;T$$RED RETURN ;;;ALL DONE; .IF NDF T$$SPL 20$:> CLR U.TTAB-U.TSTA(R5) ;;;MARK SINGLE-CHARACTER TABUF AS EMPTY .ENDC ;NDF T$$SPL .IFT ;T$$REDI30$:A BIC #S5.BCC!S5.DAO!S5.VER,U.TST5-U.TSTA(R5) ;;;CLEAR ERROR FLAGSN .ENDC ;T$$RED RETURN ;;;ALL DONE1.PAGE;@ .SBTTL . SNDXOF - SEND XOFF IF TYPE-AHEAD BUFFER IS NEARLY FULL;I;+?; SNDXOF - SEND XOFF IF HOSTSYNC ENABLED AND TABUF NEARLY FULL.;F ; INPUTS: ; R3 => TOP OF TYPE-AHEAD BUFFER"; R5 => U.TSTA OF THE TERMINAL UCB;; OUTPUTS: NONEN;; REGISTERS ALTERED: R4;-;T .ENABL LSB)SNDXOF:N3 BIT #S4.HSY,6(R5) ;;;HOST SYNCHRONIZATION ENABLED?$ BEQ 20$ ;;;IF EQ, NO...JUST RETURN .IF DF T$$SPL; MOVB U.TBSZ-U.TSTA(R5),R4 ;;;GET SIZE OF TYPE-AHEAD BUFFER < SUB #XHIPNT,R4 ;;;COMPUTE CHAR. COUNT AT WHICH TO SEND XOFF8 CMPB 2(R3),R4 ;;;DID WE REACH THE HIGH THRESHOLD POINT? .IFF ;T$$SPLA= CMPB 2(R3),#XHIPNT ;;;DID WE REACH THE HIGH THRESHOLD POINT?  .ENDC ;T$$SPL( BNE 20$ ;;;IF NE, NO...DON'T SEND XOFFD BIS #S5.OXF!S5.XOF,U.TST5-U.TSTA(R5) ;;;REQUEST XOFF OUTPUT & STATE BR 10$ ;;;JOIN COMMON CODE@ .SBTTL . SNDXON - SEND XON IF TYPE-AHEAD BUFFER IS NEARLY EMPTY;D;+C; SNDXON - SEND XON IF XOFF PREVIOUSLY SENT AND TABUF NEARLY EMPTY.;B ; INPUTS:8; R3 => TABUF ACTIVE BYTE COUNT BEFORE BEING DECREMENTED"; R5 => U.TSTA OF THE TERMINAL UCB; ; OUTPUTS: NONE$;A; REGISTERS ALTERED: R4D;-;ESNDXON:I< BIT #S5.OXF,U.TST5-U.TSTA(R5) ;;;PREVIOUSLY OUTPUT AN XOFF?! BEQ 20$ ;;;IF EQ, NO...ALL DONES= CMPB (R3),#XLOPNT+1 ;;;DID WE REACH THE LOW THRESHOLD POINT? + BHI 20$ ;;;IF HI, NO...DON'T SENT XON YETN3 BIC #S5.OXF,U.TST5-U.TSTA(R5) ;;;RESET XOFF STATUS 4 BIS #S5.XON,U.TST5-U.TSTA(R5) ;;;SET XON STATUS BIT10$:9 MOV R2,-(SP) ;;;SAVE REGISTERS DESTROYED BY CTRD ROUTINEO MOV R3,-(SP) ;;;D) MOV R4,-(SP) ;;;DESTROYED BY PORT DRIVER  ASSUME CT.STA,0( CLR R2 ;;;SET INDEX FOR "START OUTPUT"0 CALL CTRD ;;;CALL CONTROLLER DEPENDENT ROUTINE MOV (SP)+,R4 ;;;( MOV (SP)+,R3 ;;;RESTORE SAVED REGISTERS MOV (SP)+,R2 ;;;I20$: RETURN ;;;ALL DONEP .DSABL LSB$.P00{LztkTADATADATADATADATADATAAGEI4 .SBTTL . ABOX/ABOXL - ABORT CURRENT TERMINAL OUTPUT;);+F; ABOXL - LOCK OUT INTERRUPTS AND CALL CONTROLLER-DEPENDENT ROUTINE TO; ABORT THE CURRENT OUTPUT. ;-;R .PSECT MAP5ABOXL::T! CALL LOCKI ;LOCK OUT INTERRUPTS(ABOX:D/ MOV #CT.ABO,R2 ;;;SET INDEX FOR "ABORT OUTPUT"R ;;;FALL THRU TO "CTRD"2 .SBTTL . CTRD - CALL CONTROLLER DEPENDENT ROUTINE;;++; CTRD - CALL CONTROLLER DEPENDENT ROUTINE.D;G ; INPUTS:; R2 = ROUTINE INDEX:; 0 - START OUTPUT; 2 - ABORT OUTPUTG; 4 - RESUME OUTPUT; 6 - STOP OUTPUT; 10 - POWER-UP (RSX-11M); 12 - MODEM TIMER (RSX-11M)A); 14 - GET/SET LINE PARAMETERS (RSX-11M) "; 10 - MODEM TIMER (RSX-11M-PLUS)*; 12 - CONTROLLER POWER-UP (RSX-11M-PLUS)$; 14 - UNIT POWER-UP (RSX-11M-PLUS)(; 16 - CONTROLLER ONLINE (RSX-11M-PLUS)); 20 - CONTROLLER OFFLINE (RSX-11M-PLUS)T"; 22 - UNIT ONLINE (RSX-11M-PLUS)#; 24 - UNIT OFFLINE (RSX-11M-PLUS)I.; 26 - GET/SET LINE PARAMETERS (RSX-11M-PLUS); R5 => U.TSTA OF TERMINAL UCB;T ; OUTPUTS:R2; THE CONTROLLER DEPENDENT ROUTINE IS CALLED WITH:A; R2 = PHYSICAL UNIT NUMBER * 2 (ONLY IF MULTIPLEXERS IN SYSTEM)M-; R3 => CSR ADDRESS FOR TERMINAL'S CONTROLLERP; R4 => UCBX FOR THE TERMINALU$; R5 => U.TSTA OF THE TERMINAL'S UCB;R!; REGISTERS ALTERED: R2, R3, R4L;-;XCTRD:: .IF DF R$$MPL0 MOV U.SCB-U.TSTA(R5),R3 ;;;GET SCB FOR THIS UCB MOV S.KRB(R3),R3 ;;;GET KRB) MOVB K.PRM(R3),R4 ;;;GET CONTROLLER TYPEP? ADD CTBL(R4),R2 ;;;POINT TO DISPATCH TABLE FOR CONTROLLER TYPEO MOV (R3),R3 ;;;GET CSR .IFF ;R$$MPLE1 MOVB U.CTYP-U.TSTA(R5),R4 ;;;GET CONTROLLER TYPEN? ADD CTBL(R4),R2 ;;;POINT TO DISPATCH TABLE FOR CONTROLLER TYPES# MOV U.SCB-U.TSTA(R5),R3 ;;;GET SCBR MOV S.CSR(R3),R3 ;;;GET CSR .ENDC ;R$$MPL .IF DF T$$SPL. MOV #120000,R4 ;;;SET VIRTUAL ADDRESS OF UCBX .IFF ;T$$SPLU6 MOV U.TUX-U.TSTA(R5),R4 ;;;GET UCBX (IF THERE IS ONE) .ENDC ;T$$SPL .IF DF T$$MUX' MOV (R2),-(SP) ;;;PUSH ROUTINE ADDRESS 6 MOVB U.UNIT-U.TSTA(R5),R2 ;;;GET PHYSICAL UNIT NUMBER ASL R2 ;;;MULTIPLY BY 2) CALLR @(SP)+ ;;;CALL ROUTINE AND RETURNL .IFF ;T$$MUXB) CALLR @(R2)+ ;;;CALL ROUTINE AND RETURNO .ENDC ;T$$MUX.PAGET; .SBTTL . GETPIC - GET PREVIOUS CHARACTER FROM INPUT BUFFER;;M;+3; GETPIC - GET PREVIOUS CHARACTER FROM INPUT BUFFERD;S ; INPUTS:; R4 => UCBX FOR THE TERMINALT"; R5 => U.TSTA OF THE TERMINAL UCB;) ; OUTPUTS:$+; CC-C = 0 IF THERE IS A PREVIOUS CHARACTERP#; = 1 IF THERE IS NO CHARACTERT; R2 = CHARACTERH%; R3 => CHARACTER IN THE INPUT BUFFERY/; U.TIP, U.TIP+2, U.TIC AND U.TTIC "DOWN-DATED"L3; (CHARACTER LOGICALLY REMOVED FROM INPUT BUFFER)A;R; REGISTERS ALTERED: R2, R3G;-;BGETPIC:C" MOV R4,-(SP) ;;;SAVE UCBX POINTER ASSUME U.TCI,08 MOV (R4)+,R3 ;;;GET CURRENT PACKET (IF SOLICITED INPUT) ASSUME U.TIP,U.TCI+2X7 MOV (R4)+,R2 ;;;GET CURRENT BUFFER (IF BUFFERED INPUT))* ADD #4,R2 ;;;POINT AT START OF DATA AREA* BIT #S1.IBF,(R5) ;;;DOING BUFFERED INPUT? BNE 10$ ;;;IF NE, YES...SKIP7 MOV I.PRM+2(R3),R2 ;;;GET START ADDRESS OF TASK BUFFER 10$:8 MOV (R4),R3 ;;;GET CURRENT CHARACTER POINTER (U.TIP+2)5 CMP R3,R2 ;;;POINTING AT START OF (CURRENT) BUFFER?G+ BHI 50$ ;;;IF HI, NO...ALL IS OK, SO SKIPC* BIT #S1.IBF,(R5) ;;;DOING BUFFERED INPUT?7 BEQ 30$ ;;;IF EQ, NO...RETURN WITH INPUT BUFFER EMPTY,6 MOV U.TFIB-(R4),R3 ;;;GET FIRST INPUT BUFFER, CMP R3,-(R4) ;;;ARE WE IN THE FIRST BUFFER?) BEQ 30$ ;;;IF EQ, YES...EXIT WITH ERRORE? CLR U.TIC-U.TIP(R4) ;;;CLEAR U.TIC (SWITCHING BACK TO PREVIOUSG& ;;;BUFFER, WHICH IS FULL JUST NOW), ADD -(R2),U.TTIC-U.TIP(R4) ;;;UPDATE U.TTIC;.I; SCAN LIST OF INPUT BUFFERS UNTIL THE BUFFER PREVIOUS TO THE ONE POINTED;; TO BY R2 IS FOUND.;O20$:) CMP (R3),(R4) ;;;POINTING TO OUR BUFFER?? BEQ 40$ ;;;IF EQ, YES...SKIP- MOV (R3),R3 ;;;ELSE GET POINTER TO NEXT ONE2 BR 20$ ;;;LOOP; 6; NO CHARACTERS ARE IN THE BUFFER - EXIT WITH CC-C = 1;30$:% MOV (SP)+,R4 ;;;RESTORE UCBX POINTERC SEC ;;;RETURN WITH CC-C =00 {{tbl 1 RETURN ;;;ALL DONEE;U); PREVIOUS BUFFER FOUND - R3 POINTS TO IT;D40$:- MOV R3,(R4)+ ;;;MAKE THIS THE CURRENT BUFFERL8 ADD #T$$BFL,R3 ;;;POINT JUST AFTER LAST CHAR. IN BUFFER;ND; WE NOW HAVE R3 POINTING JUST AFTER THE LAST CHARACTER IN THE INPUTE; BUFFER. THE UCBX IS UPDATED IF WE HAD TO GO TO THE PREVIOUS BUFFER.O;E50$:! DEC R3 ;;;STEP BACK 1 CHARACTERO MOV R3,(R4)+ ;;;UPDATE U.TIP+2X INC (R4) ;;;UPDATE U.TIC% MOV (SP)+,R4 ;;;RESTORE UCBX POINTER ;;;FALL THRU TO "GETRIC".PAGER/ .SBTTL . GETRIC - GET A RANDOM INPUT CHARACTER3;I;+'; GETRIC - GET A RANDOM INPUT CHARACTERH;T ; INPUTS:!; R3 => CHARACTER TO BE RETRIEVEDS; R4 => UCBX FOR THE TERMINALN; ; OUTPUTS:3; R2 = CHARACTERR ; CC-C = 0;C; REGISTERS ALTERED: R2 ;-;XGETRIC:E CALL MAPIB ;;;MAP INPUT BUFFER7 CLR R2 ;;;PREPARE TO RECEIVE CHARACTER AND CLEAR CC-CM< BISB (R3),R2 ;;;GET CHARACTER WITHOUT SIGN EXTEND PROBLEMS RETURN ;;;RETURN TO CALLERN.PAGE 5 .SBTTL . PUTNIC - PUT NEXT INPUT CHARACTER IN BUFFERG;A;+-; PUTNIC - PUT NEXT INPUT CHARACTER IN BUFFERR;O ; INPUTS:; R2 = CHARACTER TO BE STORED; R4 => UCBX FOR THE TERMINAL4"; R5 => U.TSTA OF THE TERMINAL UCB;U ; OUTPUTS: #; CHARACTER STORED IN INPUT BUFFER.E; U.TIP+2 AND U.TIC UPDATED.;E; REGISTERS ALTERED: R3 ;-;PUTNIC:;, MOV U.TIP+2(R4),R3 ;;;GET CHARACTER POINTER$ CALL MAPIB ;;;MAP THE INPUT BUFFER% MOVB R2,(R3) ;;;STORE THE CHARACTERR CALL @(SP)+ ;;;RESTORE MAPPING, INC U.TIP+2(R4) ;;;UPDATE CHARACTER POINTER( DEC U.TIC(R4) ;;;UPDATE CHARACTER COUNT RETURN ;;;ALL DONEI.PAGE& .SBTTL . MAPD - MAP DRIVER DATA SPACE;X;+; MAPD - MAP DRIVER DATA SPACE;-;E .IF DF T$$COMMAPD:: .IF NDF T$$SPLD- MOV #0,KDSAR5 ;;;MAP TTCOM IN D-SPACE APR 53PAR5S==.-4 ;;;FILLED IN AT VIRGIN INITIALIZATIONV .ENDC ;NDF T$$SPL' MOV #0,KINAR6 ;;;MAP TOP 4K OF DRIVER 3PAR6I==.-4 ;;;FILLED IN AT VIRGIN INITIALIZATION BR RESM ;;; .ENDC ;T$$COM" .SBTTL . MAPIB - MAP INPUT BUFFER;T;+; MAPIB - MAP INPUT BUFFER;T ; INPUTS:; R4 => UCBX FOR THE TERMINAL.!; R5 = U.TSTA OF THE TERMINAL UCBE;X ; OUTPUTS:-; INPUT BUFFER MAPPED IN KISAR64; CALLER CALLED BACK AS A COROUTINE - WITH CC-C = 0.9; "RETURN" LEADS BACK TO THIS ROUTINE WHICH THEN RESTORESF<; KISAR6 AND RETURNS TO CALLER'S CALLER WITH CC-C PRESERVED.;#M; NOTE - WHEN THE CALLER IS CALLED AS COROUTINE, THE UCBX MAY NOT BE MAPPED!L;T; REGISTERS ALTERED: NONEC;-;MMAPIB: CLC ;;;ASSUME WANT CC-C CLEAR* BIT #S1.IBF,(R5) ;;;DOING BUFFERED INPUT?. BNE 10$ ;;;IF NE, YES...DON'T CHANGE MAPPING( MOV U.TIP(R4),KISAR6 ;;;MAP TASK BUFFER10$:! CALL @(SP)+ ;;;CALL CALLER BACKL .IF NDF T$$COM MAPD:: .ENDC ;NOT T$$COMRESM:A$ MOV $DALED,KISAR6 ;;;RESTORE KISAR6 RETURN ;;;RETURN TO CALLER  .ENDCLER WITH CC-C PRESERVED.;#M; NOTE - WHEN THE CALLER IS CALLED AS COROUTINE, THE UCBX MAY NOT BE MAPPED!L;T; REGISTERS ALTERED: NONEC;-;MMAPIB: C .TITLE TTINI .IDENT /07.02/;;; COPYRIGHT (c) 1986,1987 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;;; 02-FEB-78 PETER WANNHEDEN;; PREVIOUSLY MODIFIED BY:;; P. WANNHEDEN ; C. F. SPITZ; D. R. DONCHIN ; T. LEKAS ; S. C. ADAMS; R. S. PHILPOTT ; L. KOGAN ; S. C. ADAMS; T. SCHOELLER; B. S. MCCARTHY;;; MODIFIED BY:;; K. L. NOEL 2-JUNE-87 07.00=; KLN051 -- DO ADDRESS CHECKING FOR IO.GTS, SF.GMC AND SF.SMCI;; ; K. L. NOEL 06-NOV-87 07.01B; KLN072 -- FIX BUG FOR IO.GTS, SF.GMC AND SF.SMC WHEN NOPRIV TASK!; ISSUES QIO TO OTHER TERMINAL ;S; K. L. NOEL 10-NOV-87 07.02<; KLN073 -- ALLOW INTERNAL I/O FOR IO.GTS, SF.GMC AND SF.SMC;+;D; ****** T T I N I ******O;IA; THIS MODULE CONTAINS THE ROUTINES TO INITIATE A NEW I/O REQUESTCJ; FOR A TERMINAL. THERE ARE THREE PARTS TO THIS. FIRST, THE I/O 00{LztkTADATADATADATADATADATAREQUESTSG; ARE VALIDATED PRIOR TO PLACING THEM IN THE DEVICE'S I/O PACKET QUEUE.GG; THIS MUST OCCUR WHILE THE USER TASK WHICH ISSUED THE REQUEST IS STILL I; THE CURRENT TASK. NEXT, THE REQUEST IS PLACED IN THE REQUEST QUEUE FORRI; THE TERMINAL. FINALLY, ANY REQUEST IN THE QUEUE WHICH CAN BE INITIATEDRD; IS DEQUEUED AND PASSED TO A FUNCTION-DEPENDENT INITIATION ROUTINE.;-;  .MCALL PKTDF$ PKTDF$E .PSECT MAP5.PAGE B .SBTTL TTINI - TERMINAL DRIVER I/O REQUEST INITIATION ENTRY POINT; ;+,; **-TTINI - REQUEST INITIATION ENTRY POINT.;NK; THIS ROUTINE IS CALLED FROM "DRQIO" WHEN A TASK HAS ISSUED AN I/O REQUEST K; FOR A TERMINAL. THE CALL IS MADE PRIOR TO QUEUEING THE I/O PACKET TO THEDK; SCB QUEUE SINCE TERMINALS HAVE THE "UC.QUE" BIT SET IN THEIR UCB'S. THISEJ; IS DONE WHILE THE TASK CONTEXT IS STILL VALID, SINCE MANY FUNCTIONS WILLK; NEED ADDITIONAL PARAMETER CHECKS NOT DONE BY THE EXECUTIVE. THIS ROUTINEH; WILL MAP THE DRIVER DATA AREA (SINCE WE WERE CALLED FROM THE EXEC) AND<; DISPATCH ON THE FUNCTION CODE TO VALIDATE THE I/O REQUEST.;E ; INPUTS:*; R1 => I/O REQUEST PACKET TO BE PROCESSED&; R4 => SCB FOR THE REQUESTED TERMINAL&; R5 => UCB FOR THE REQUESTED TERMINAL;D; OUTPUTS: NONE.;M"; REGISTERS MODIFIED: R0, R1, R3;-;BTTINI::E! CALL MAPD ;MAP DRIVER DATA AREAI$ MOV R1,R3 ;COPY I/O PACKET POINTER/ MOVB I.FCN+1(R3),R0 ;GET THE I/O FUNCTION CODEY$ ASL R0 ;CONVERT IT TO A WORD INDEX .IF DF R$$IIC3 CALLR @QPDSP(R0) ;DISPATCH TO PROCESS THIS REQUESTP .IFF ;R$$IICI5 CALLR @QPDSP-2(R0) ;DISPATCH TO PROCESS THIS REQUEST1 .ENDC ;R$$IIC .IF DF T$$EIO&T$$OVL=D;HERE IS THE STUB FOR TRANSFERING TO THE OVERLAY. QPEIO IS IN TTATT.QPEIO::T* CALLR QPETRA ;BRANCH TO TRANSFER IN APR6 .ENDC ;T$$EIO&T$$OVLE.PAGEA; .SBTTL FPGRQ - GET A REQUEST PACKET FROM THE REQUEST QUEUET;;+2; FPGRQ - GET A REQUEST PACKET FROM THE I/O QUEUE.?; THIS SUBROUTINE IS ENTERED EITHER FROM THE REQUEST INITIATOR,(; OR FROM THE FORK DISPATCHER.;S; INPUT:; R5 POINTER TO U.TSTA); S1.DSI 1 TO PREVENT PROCESSING OF INPUT1; ; OUTPUT:I8; IF THERE IS AN IO.WBT PACKET IN THE QUEUE, A CTRL-Q IS ; SIMULATED.;O6; AS MANY PACKETS AS CAN BE DEQUEUED FROM THE IO QUEUE; ARE STARTED.;I#; REGISTERS ALTERED: R0,R1,R2,R3,R4P;-;.;T .ENABL LSB FPGRQ:: ? BIT #FR.PFP,U.TFRQ-U.TSTA(R5) ;POST-FORK PROCESSING REQUESTED?A- BNE FPRET ;IF NE, YES...MUST DO THAT FIRST.EGRQPKT:E .IF NDF T$$SPLI= MOV #DEUCBX,-(SP) ;IF TSTRQ OR $GSPKT FAILS, DEALLOCATE UCBXI .IFTF ;NDF T$$SPL) CALL TSTRQ ;TEST IF ANYTHING TO DEQUEUEU1 ;IF NOT, DEALLOCATE UCBX AND RETURN TO CALLER,. MOV R3,-(SP) ;SAVE FLAGS IN CASE $GSPKT FAILS+ MOV #GRQAC,R2 ;POINT TO ACCEPTANCE ROUTINE & SUB #U.TSTA,R5 ;POINT TO START OF UCB" MOV R5,-(SP) ;SAVE POINTER TO UCB CALL $GSPKT ;GET A PACKETR% MOV (SP)+,R5 ;RESTORE POINTER TO UCBE3 BCC 10$ ;IF CC, SUCCESSFULLY GOT A REQUEST...SKIPE;M; NOPKDQ - NO PACKET CAN CURRENTLY BE DEQUEUED. EITHER THERE WERE NO PACKETSEI; OR THE ACCEPTANCE ROUTINE ABBORTED THE SCAN AND BRANCHED HERE DIRECTLY.E;UNOPKDQ:I) ADD #U.TSTA,R5 ;POINT TO UCB STATUS WORD,7 BIC (SP)+,2(R5) ;CLEAR FLAGS THAT WE SHOULD NOW IGNORERFPRET: RETURN ;ALL DONEO; G; FOUND A REQUEST PACKET THAT CAN BE PROCESSED. IT'S ADDRESS IS IN R1.U;10$: .IFT ;NDF T$$SPLR= CMP (SP)+,(SP)+ ;CLEAN STACK OF FLAGS AND DEALLOCATE ROUTINES .IFF ;NDF T$$SPL.! TST (SP)+ ;CLEAN STACK OF FLAGSC .ENDC ;NDF T$$SPL .IF DF T$$BTW% MOV U.SCB(R5),R3 ;GET POINTER TO SCB 20$:6 MOV (R3),R3 ;GET POINTER TO NEXT I/O PACKET IN QUEUE BEQ 30$ ;IF EQ, NONE...SKIPT/ CMP I.UCB(R3),R5 ;IS THAT PACKET FOR THIS UCB? ' BNE 20$ ;IF NE, NO...SKIP THIS PACKETL; CMPB I.PRI(R3),#251. ;IS REQUEST FOR A BREAKTHROUGH WRITE? * BEQ 40$ ;IF EQ, YES...ACCEPT THE REQUEST30$:C BIC #S2.BRQ,U.TSTA+2(R5) ;OTHERWISE, SHOW NO MORE IO.WBTS IN QUEUEN40$: .ENDC ;T$$BTW+ ADD #U.TSTA,R5 ;POINT TO FIRST STATUS WORDC MOV R1,R3 ;COPY PACKET POI00{{tblNTER: CLR (R3) ;CLEAR LINK WORD USED TO HOLD COMPLETION STATUS? MOVB I.FCN+1(R3),R1 ;GET I/O REQUEST FUNCTION CODE (HIGH BYTE). .IF DF T$$SPL- MOV U.TAPR-U.TSTA(R5),@#KDSAR5 ;MAP THE UCBX , MOV #120000,R4 ;SET VIRTUAL ADDRESS OF UCBX .IFTF ;T$$SPL .IIF NDF T$$SPL, N$$SPL=0 .IF DF T$$MOD!N$$SPL.;TC; NOTE - HERE WE ASSUME NUMERIC VALUES FOR FUNCTION CODES ACCORDINGE'; TO WHAT IS DESCRIBED IN MODULE TTDAT!W;5 CMP R1,#IO.RPR/400 ;IS REQUEST ONE OF THE FOLLOWING:3- ; IO.RPR, IO.RTT, IO.EIO, IO.RSD, IO.WSD?W9 BHIS 50$ ;IF HIS, YES...REQUIRE UCBX AND DO MODEM CHECKE0 CMP R1,#IO.ATT/400 ;IS IT ONE OF THE FOLLOWING:% ; IO.DET, IO.GTS, SF.GMC, SF.SMC?S6 BHI 91$ ;IF HI, YES...DON'T NEED UCBX OR MODEM CHECK4 ;OTHERWISE, REQUEST IS IO.ATT, IO.WLB, OR IO.RLB .ENDC ;T$$MOD!N$$SPL. .IF DF T$$MOD8 BEQ 60$ ;IF EQ, IO.ATT...NEED UCBX BUT NOT MODEM CHECK .IFTF ;T$$MOD50$: .IFT ;T$$MODA BITB #US.DSB!US.CRW,U.STS-U.TSTA(R5) ;IS THE LINE DISABLED OR...R0 ; ...WAITING FOR CARRIER (CHECKED ONLY ON...0 ; ...IO.RLB, IO.WLB, IO.RPR, IO.RTT, IO.EIO,% ; ...IO.RSD, AND IO.WSD REQUESTS)W+ BEQ 60$ ;IF EQ, NO...REQUEST CAN CONTINUE, BIT #S4.DLO,6(R5) ;IS THIS A DIAL-OUT LINE?0 BNE 60$ ;IF NE, YES...LET THE REQUEST BE TRIED: MOV #IE.DNR&377,R0 ;ELSE, RETURN "DEVICE NOT READY" ERROR( JMP 910$ ;SKIP TO COMPLETE THE REQUEST60$: .ENDC ;T$$MOD .IFF ;T$$SPL. CALL ALUCBX ;ALLOCATE UCBX IF IT ISN'T THERE. BCS 105$ ;IF CS, NO FREE POOL...RETURN ERROR .ENDC ;T$$SPL .IF DF T$$EIO6 CMP R1,#IO.EIO/400 ;IS THIS AN EXTENDED I/O FUNCTION?* BNE 90$ ;IF NE, NO...CHECK NEXT FUNCTION< MOV U.TIXL-U.TSTA(R5),R2 ;GET POINTER TO FIRST IOPX IN LIST70$:< CMP I.XIOP(R2),R3 ;IS THIS IOPX FOR THE CURRENT I/O PACKET?% BEQ 73$ ;IF EQ, YES...EXIT THE LOOPC ASSUME I.XLNK,0' MOV (R2),R2 ;GET POINTER TO NEXT IOPX4 BR 70$ ;CHECK THIS ONE (IT MUST BE HERE SOMEWHERE)73$:; BIT #TF.RDI,I.XMOD(R2) ;READ WITH DEFAULT INPUT SPECIFIED?. BEQ 80$ ;IF EQ NON< MOV I.XDBL(R2),U.TDIC(R4) ;SAVE DEFAULT INPUT BUFFER LENGTH4 MOV R1,-(SP) ;SAVE R1 IN CASE THIS IS USER TASK EIO= CALL $TSTBF ;SHOULD WE ATTEMPT TO BUFFER THE DEFAULT INPUT?S BCS 77$ ;IF CS NO;PF; ATTEMPT ALLOCATING AND FILLING TTDRV BUFFERS WITH DEFAULT INPUT DATA; ' BIS #S1.IBF,@R5 ;ASSUME BUFFERED INPUT1 MOV R2,-(SP) ;SAVE IOPX POINTER ACROSS ALTB CALL 5 CALL ALTB ;ALLOCATE A BUFFER TO STORE DEFAULT INPUTB* MOV R2,R0 ;PASS THE BUFFER ADDRESS TO R0) MOV (SP)+,R2 ;RESTORE IOPX ADDRESS TO R2I/ BCS 77$ ;IF CS, NO BUFFER IS AVAILABLE - JUMPE; MOV R0,U.TDIF(R4) ;SAVE FIRST DEFAULT INPUT BUFFER ADDRESSC= MOV #T$$BFL-4,U.TDIP(R4) ;SET SIZE OF DATA PORTION OF BUFFERB; MOV R0,U.TDIP+2(R4) ;SET DATA POINTER TO FIRST DATA BUFFERV= ADD #4,U.TDIP+2(R4) ;POINT PAST BUFFER HEADER TO DATA ITSELFB'74$: CLR (R0)+ ;CLEAR BUFFER LINK WORDP3 MOV R0,R1 ;SAVE POINTER TO BUFFER CHARACTER COUNTFE MOV #T$$BFL-4,(R0)+ ;SET MAXIMUM DATA THAT CAN BE STORED IN 1 BUFFER975$: MOV I.XDBF(R2),KISAR6 ;MAP USER DEFAULT INPUT BUFFERS; MOVB @I.XDBF+2(R2),-(SP) ;GET CHARACTER FROM USER'S BUFFERR MOV $DALED,KISAR6 ;REMAP DRIVER3 MOVB (SP)+,(R0)+ ;INSERT CHARACTER INTO OUR BUFFERF4 INC I.XDBF+2(R2) ;UPDATE POINTER INTO USER'S BUFFER) DEC I.XDBL(R2) ;ONE LESS CHARACTER TO GON BEQ 79$ ;IF EQ ALL DONEA; DEC (R1) ;MORE CHARACTERS YET TO GO - IS OUR BUFFER FULL?18 BNE 75$ ;IF NE NO - INSERT MORE CHARACTERS INTO BUFFER7 MOV R2,-(SP) ;YES - SAVE IOPX POINTER ACROSS ALTB CALL; CALL ALTB ;ALLOCATE ANOTHER BUFFER TO STORE DEFAULT INPUTM* MOV R2,R0 ;PASS THE BUFFER ADDRESS TO R0) MOV (SP)+,R2 ;RESTORE IOPX ADDRESS TO R2R3 BCS 76$ ;IF CS, NO ADDITIONAL BUFFER IS AVAILABLEF) MOV R0,-(R1) ;LINK OLD BUFFER TO NEW ONEO* BR 74$ ;STUFF CHARACTERS INTO NEW BUFFER;CL; COME HERE IF NOT ENOUGH TTDRV BUFFERS COULD BE ALLOCATED TO CONTAIN ALL OF,; THE CHARACTERS OF THE USER'S DEFAULT INPUT;E676$: MOV R2,-(SP) ;SAVE IOPX POINTER ACROSS DELTB CALL7 MOV U.TDIF(R4),R2 ;GET ADDRESS OF FIRST OF 0PEOV1RSX11MPBL58 00010001000100 00000 00000 004143DECFILE11A PPEOV2U0414404144 M 00 P

le, ~ n n-00q  %fW @fv1 wje  wفW @ 5 N1 4wj%% wLق ncepe :e?eeee 5xe je2 Ne7 ^e pcNehebLe7`He(ewb0`` b b e 1 wd7`d 5  5rb55ew<Bm @m  wd@P dZdVdRdRd b f Vd0d app6dH  "dadmddc acwc/ar5Lc Jc>c -@c4c \da@`B` " " c 1vc eacB f& a`cm^cZceW"      l r)bb b-b b-b zbb & b7bb   ~ b:- bhbb b w:ք  N >`eB % zw R   l&  -b_a r)r)7a a a a5a aa -aa& %_``   0a``   a7aw`aeBl " f 4a?D_@_|a a`   V O_lamjafada&^VamPa Ja`?@a6ae x`^a a a aa/^  ^^`^`m``e  f  l~e w H^@` t` n`& & %-V` 5P` B`2 &e0`(`2 f:`7 `ew]0 "`3& `?]]_ ]_b C``C C" " 7_m__ J]-_& _/0] "]~_m|_x_w]0 h_3" Z_bHe7N_`J_``  00qDA A555512 3"  r\4_ 0& \\^ \^m^^ f6 6  16d\"wt aa > wP 7N a `Ҷ -$e 3 ,% ' e~aa la3[e e [e~& T[e 4 = ;X]R]- # w(]] ]-] ]-] ] p8[e] heGv a a e N 7 Z%e5~ZZ" aa e N H 7 DZ4\Z0 0" ewZV, f  hVdV@wD ߚ\  \e B|\@m!=/Z:/Z6YBmem>\@1 &*\m&e fe\\e Hш[e:[ a p[:[4[ [ [-[ [-[ [ lZw,[ a[ ^e ewϦ)l[`@[:[X  K([$[f Zn BKZZ2 a a f eLZ Zp o^X` aa 2Z0enZ "X- N jZHZ e % efW p0 &N` pef1 w,S N`f %w\́   @  w4͂  f F  eN d %f a  $eS6, >` RR w̦)6  r) w `V451 D& *6mXXmnX m5BX  NXe- ހ` %5X -UU D& 6mWmW  We%WW  @  >%& 3%w a=˕ `& ڢ ˖%׬-  `N`c& 1c9 ac@eA&  fc c e e e   e35vR T~& 5RR~& 7 T2Rf5(R)7 "RvWpW5bT NV & ޖ% FT 2V & ޖ%w6W7 (Tf  d @w" -(T TU r) ^V6 6 n6 LVFVme8Ve ר ע   Q Iɕ @mV & N& a6!4C ע  r)' r)r)   Br)  r)  N& a e% v! ~W r) \r)fr)  r) %  -wW r) r)fr) p R %e wZ"4[3& Ν[& & & &  D& ewXEmN  E W W  E  ! aaKW/ E W W W/aaD Z"(a,a0a4a 6,6 &5,w^ (w wv6 "*e1* aa aa"  .a2a,2a Ne o a lǁ4W  N2a `af f(a& e f, e 5,@aaHNatLa@`& Ɩ%Z":a>aBaFa 6>e( 00e Z":a>aBaFa H6>ew5"  wj (w~5"?  @t@a`@ 6a`& v (" ؎.e0 Z"2a6a:a>a 66e $5$/5, -0  .6 $.0 @ \Z"2a6a:a>a .66e 5"[6 (e1.a2a2a e B  .!  r  ׎.0 ف2  ց W  "Z"2a6a:a>a v66e   p ( "w& 6 ( P~ 2 DZ"&   2B  &- Q<- ree)5*/  E -e Z"a a >e  %wà   , 5A C,~  fN,-& Le w N a j X   a,-& e &- -a Da00qLA@557i:)*N& e ~" O O N    aa  `a 2~a  faa a a fe`a Xe%eW a&-  &-T | T&- –%,-&-a deeN,- M  - M &- ZN&- ewD0a ~42- n aN& e e w 6a 0:a  5w4 aN& e M a 8  L L L - -  "aL L 8$aN& 6e 5  "J,a %aa <-XL4%D"a$a $aT f  T(a %%ew &aI 6 < x  e ewb5dI.VK+  &Hr)B 5ZI-K45J J5JH& Pe w0-H  6 J -HHJfH`H & N& 0% C r)@HeD!Da !P-VJH   |-HG I f5 J P (7 2J%JmJ x xP '3&  a` & FF a ·m Ie6  @`a`&  H v Gm  qGm-I=& ΝIR& e / -& ΝI LIVI HV 0  H7H a`7H7 hI7 H%5w&FF&` aF   `H7 rHG`lF`He  ewa % wZ& e l(El(E5 FH & Ж%7 GG7 "Hse E`6 E zW?o5k W?g W*   @ ' "  CA!f6% G&   0߷`\JTJ a e  &a  e f  fG\G l(Dl(Ce L8G& e & N ` %C.7 C5& ΟC R f`  e fd e f e`C`C ew-FCBCw| D#ׯ(C  CׯC) FD7 \D 6  a ! 6 w(ׯB(     W!w%wa E- D  hED-  ^BbE LB ~ 6a 6 . 6-B B B " ' ) A a 6   ^f %~     vp w(C 5 vpv ) @  ^ 5"I b W!e8%:BAv   lhw *A 7 $D N A  5"  & W!e @e5C%%wx e Ar і%C & & ef NC - 7 pFC-A A  TF  ږ% & zC% f z wfC ˁwj   lt tw  ` j ptte _& e PR   B  @԰tt @Ԁ 5 /   " ptt     ptt  .JOU;>&QUIT/SAVE!.TMP.TMP* $J .  ,          *::::JJJJ Zjjjjj zzzz  )9999IIII Yiiiii yyyy LF VT CRESCDELINDNELSSAESAHTSHTJVTSPLDPLURISS2SS3DCSPU1PU2STSCCHMWSPAEPACSISTOSCPMAPC!!C/L-Y-S0X0C0a_<<0^+-2^3^/UP!.^1^o_>>1412??A`A'A^A~A"A*AEC,E`E'E^E"I`I'I^I"N~O`O'O^O~O"OEO/U`U'U^U"Y"ssa`a'a^a~a"a*aec,e`e'e^e"i`i'i^i"n~o`o'o^o~o"oeo/u`u'u^u"y"Gŧ`y` d'@Bʚ; TvHrN @zZtH^Zb K[00qTA A555512K:[?8h[?8l,,2"*Additional information available: D-C.RESETADVBACK*  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy6V'&1 K=@ K=@ K=L K=nc K=>k K=@ K=@ K=@ K=C K=C K=D K=lH K=H K=dI K=I xK=^K pK=V hK=V `K=&W XK=W PK=W HK=X @K=TY 8K=VY 0K=(Z (K= [ K=d K=g K=pv K=@ K>G J>rK J>@ J>L J>@ J>@ J>r@ J&> J8> J8> J8>H J8>ڀ J8>* J8>N J8>P J8>h J8>؂ xJJ> pJJ> hJJ> `JJ> XJJ>25ew z, Bv     5Bwn 50  (r- DUt-E D  E E ܁&wxE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f  5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&ff f헯 Ҕ7 EtE@ @<` 2u w7~7 x7 rtE  lt lz Vs} B} t } N y   R/ a D *j g R c ` ]Հ W :-T &&  JA #> R/ >a 7 &e& &  . ՀZ   *-   \ <& |  (55@5:7 w^ W X7 X @  lRt $ R/ j` p{N` Rw ڊ7 J/ ^ d cX s7 w5  b^/ `% wj NHHB :e, a ]B`   r7 rwz5j  ^/ _%wh    -r) 7 es ڄf ^/ R_ >r~N`a ] a& r^e w P 7  ^/T ^  q_f 0 #  V  Of  n   :7 T7f 7F / ^/ p^Nf& W  l|td 8q7  ^/ 0^ 6eMe PBf b v eJ/ ]e4 , .a ] 5 l J/ B\% a ]  e }e BdB,  ԏ`ȋȕ   R/ L]N Nf Jd peHff % BV  TR/ \e \`ȋȕ  &V o 7 w5p  ^/ \e e wZ >WD @  lt ĎA5 @l& f-4a-4\ Y5$5 X7 -4H5 5 67  J/ ΁% 2 (-4)W D je `B&f le    D wYa YNa& Ze t n  aaf p  e0 j % & Fn`& &Ze s j ew Y  % GE 5= 0h5 00q\A@557i:)*:2e $ fav1v &e r p`  B 5 ` ` w0X   %@ lt % T %B %  wW f |% w&ft& Xe ft& Xe 2ft& Xe 5&& & rfe j0"7 N k -R$7  4  g 6 5< 5 k 6 "ea XSaH z  ge / Wp aa jm% e a RaH @z  :gewd Wq vaa im% e D6  62.2a,a a5wN"a (R6 7  w^-.45pwR a V5aSݎ  a QTCe` a y "a$a P%W!< aH x N7 H @Wq w8 a a ,hm" % % wmW 6 0146 (*($,e,,a6a _5D  ( * , 6`ew5<a& X_5@a i  dew5$ae& Qe ڰ-  dU@5 B<a& ^ 65-pۺ  & j -NF 2d<5. * `(at hb% @a h eN6a h e e05F 6 t sa 7eewN`ɋɕ &&  R/ ^P d{ef@ ȋȕ f h / |R/ Pl ^   | -4  ^/@ O zN %efW  b  W f  wM 6 & 6 6  > Vb ` vaa \5 R/ Op b e 6  Iaa :\5e6 t\ & & \5H"a tf eK-r)؎# |ve V & & [ Ha f e5LJa e  a*e ew4L ^;`f uԺԖ%w5 - 2 _-& ݨe3a "L Ν3a L a Ke&- >s% -h\  lt  33N`& N `5 r)Ll( t %55 l(l(! : ce r R/ L  ewJJ 2a jL$ fR/ RL & ._ Y5e <֎ La Jf`Էa\ %a tJ uwD @af K v "R/ K  eG a $Nba &Jt  YN 6-&42 / &   b d f50 N   vV ^ew5 Pv5 NV v\a $Bӷa> u5 ,$e`Za PI ^ \ ]N^a *INna I00qdA A555512e N&a H5 W&a`a 6p %5" z-4  lV ]e&g Nu & ( * >5 }jat ` tt ].a`& He t \.at e Z.aja& He  e,eJwfG aa N|% 2 fe IZ8T tf pa a $|, s5 oe  %5 n\64 y($ s nfЀ77 rs w fswF R/  Z z@`ȋȕ  ^R/ FN @ ewn(<6 6 $6a a S wZ  % "T !-04( C t <- Y X &] և50 y ^/| F &q S a& TSe a ] .a& Se a ] ؤw R/f E pea J]7eef5~ a C~a Ce @`ȋȕ  lR/ EN T eq o ώ 7 W$S7 P-az }7 t--5  u Z VU̖%y--5x  u Z U̖%7 ^W,wVRB Xw,P w -<-8z.w*4@   T '& ~ !w ~W,Xw-7 -7 cv @ *` ΐ a ta t  :& DAwV ,TwX)7 R&W,ww7 x(7 "  7 7 wECW!w   lu s 3&3F3 f3333    uf` >eeJf&f` >%}v E  6B  W W d R   6! ^@ *`B af saf r w` 9&f ?ɖ%wr n*wh d$ff %7 Bd *R fG4& Ν e ew<=6 6 >5hv aa L5 5>a vV {& & K5 a LVepe5j*| x& & K5 a Ve N7 , B** nq e 7 &7 6v aa @K $a* q $Ŏ$f =%V Pee ew; @   lw ow(  = Me%& $ P Meu& "* Lu rP hN e "  lw To uu :P%w*u  lw ouuu uu O%5uu O u O ud  lx nuv v v bO%5vv BO5&v 0v $O5 N Lew"A @* &f{5R 5>& DH 3v&a u% #@ 7 De C 0 K%m&7  2L J C |& * w  M: pJYV v M%v00qlA@557i:)*b v M%vS bv M%vy v M%v-v rM n  ww[ TL @K w  w .M%w 6w=w M L$w L K J w 0w L%2w 8w L%:wz5B>w qHww@   lx k 3&3F3 f3333 B7 , C " I%m7  J H C A A* B7  C w \I%m7  I BH C 5fPw1\w .5PfwwlwwF704 % mpw vK  -|ww VK LI%S 7 " C  H%m7  I ~G C  I.w Jf J Hw J =w fb& J He wx5  z /y  `W"#fa q%  `exf`&  5e ee w5 p R/ 6 er  7   15-5*5'-4 5 C5& 5  r^/ 6 % P i d H hN a p4"  a{ N Ge ^/ 5 `e e&&&& Zew3$e 7 T6  6 v`v V-6R -,D@mb6 >5p:552fv1:& {e %f l% c&ȼ lC1>   mÖ%5& N 5"-r vGp W!r)\ rbp 5 6K%ef  7 z 4_-ܾ4 j5f& N <_% d F ֻ r) ƻw"2)@`ȋȕ r R/ 3N w 6  w-44s,e6  va v!W  W  & Da Awpa DBaW 7  r   C  r  fer) 2`- e& FAr) ` e  ]e w05½w HIPaa ve% Pf 42r)B` Ҕ Ca  @  a w Ha a eePa a d% V D w 5v5!fa I% ɕQ& N 0T - 7*#T PS5v B3& Νbf aP "3  N S2e  C$f aWYWN WAWQ  C Pa a c% e--P{{ H B7 7 %Fwj. * d C V ,f `fa /  h3a /Z"a3& Ν4& & & & : D& xGeZ"& $ B Bea4 z/e e w-)f f< 4f f5 ,eaa Db  Vrp7f` .e%w-)  ; ,@, 6ea6a a%%"P@,`6tfZz0 J*JP``,T"",,TNoMAINPASTE line deleted lineMAIN line moved copied time line resequenced=> r (`Tz  ,4<4< ,4:HNV &, linesNoneUpperLowergeneralexactwpscase insensitivediacriticical insensitive begin end unboundedUnknownVT52VT100Hardcopy, scroll, noscroll, eightbit, noeightbit, edit, noeditV3.10-00 COPYRIGHT DIGITAL EQUIPMENT CORPORATION 1980 & 1984 COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1980 & 1984nonumbersnoverifynotruncatenokeypadnowrapChangeLinenoquietnotabtab size ; tab level norepeatnofnfnosummarysummarynodelimiter delimiter nowps wps Help file name: autorepeatnoautorepeatInput File: Output File: **Readonly**t6"8Rp,F ":h 00qtA A555512$.$ &,GOLDW.BL.EL.L.C.UNDC.UNDW.UNDL.EX.BR.ER.CUTSR.PASTE.CUTSR=DELETE PASTE. APPENDSR.?'Search for: '."".ADV.BACK.-V.+V.+C.-C.SEL.D+NL.DEW.D+C.(^M-C).D+EL.DBL.DBW.PAGETOP.(16L).D-C.TAB.TD.TI.TC.^M.^L.EXT ?'Command: '.REF.(CUTSR=DELETE PASTEKS"").RESET.ASC.CHGCSR.HELP.SHR.SHL.FILLSR.DEFK.TADJSR.(-16L).(+16L).(27ASC).,-./0~128345\6F7z89:;<=>?@A6 !>"#8$4%0&@'(X)H*F+f001&2 345 ` f,~589FHfIKN,F6f@8nv ,-./80~1234z56F789:;<@A6 !>"#@$4%0&'(f) *F+&,H-.8/\0045X ` f,~589:XFHfIKN, substitution[?3l[?3h &> 8>H J> J>f7 \  f7 & 4 4ׯ0; (ׯ"!= ~  D  ql( Zu Ps%^l( q ^ q *s0  s! w_ @ `  ҃ -& N$fe%& `e W# P% p$ ~ 0A  wt_ peMjğfuEŸZE R  H D  lP <- % ۇ^ &(P S 7(P F    ( 5.   & Ο  E 7(PeMCe B f "%    w*^df`b-F ->  "@ <.7 &W 04W 91N- 4^f- p] 0 6 6  a- \ ee7W %W AW Z W W W &W #7 W %z Vfp FVWW _kW "W '`5P_5 '7 ( * &-  ?- r7> R7 P ҁ   8`& >^ &e 7 d ` W ! Tr7p lef VFW  *p 6 -! E7 7f 6f h]p e f -te.& f [ e@ w>[  ;w lP Z 87 (B.f r7(% ~W W _[ H7% i-x-ew0k&e V%lZ N g 8% ^7= bxhwr^ph MI: % ,$p1 -  w uw vw  wu-B ,% ~- Yׯ.1x'606 6 Wpe`Na a X a- PXe   w& p7% 07%!@1 w-5j g5 7 & % Mp-xlAp `1  7    7 d,!1 ҄ 7  1q7 r oo5 ڋ7 wH  5$-:: 2.  W W W /W "W 'CC wdz߁p w2bVP $-4!-,;>B r5nwH & H% 1 vt<pP| -fe V -& e Ve]WQ-@ = ~:rpA-h0 b- ^*RP1&->   -b)h%!., t *7  ewS  lU 8- 40-  T6Q`5pɵ rCE CtE &P&N`& *Te  #RO@NM6QH KZY ]\UT1S5W4VX -q,/k3O*O29'('`|.`(`'1`&*`j/$ "y#%$` _[a( ' orlt3m1;-9+?,.)2# 2#! nJL^I`he4'($%&./* /if576@A?" . 1" 0`  , b  "  31"- +,)2F#*+d0 )` ,`&*)0! +` -` 9` 8` ;` :` 4` 3`  ,4'($%&.#/*#c 6L 5g 7>`&;`:>78&N=`E=<GsJ:8P  D6`;0`%87")9) % $ 'J & J?32{ "!z~uA}:vxw #" (%+% <"+`h1;90c*A4CbHu rNLQ#U27;%JS'4@^l6&pvDtn\~J&FpdXFxjZR>NV^<  p^.DVvf>(b.aCHANGEBCOPYcDEFINEaDELETEBEXITAFIND;FORAHELPsINCLUDEaINSERT1KEYaKEYPADNOKEYPADAMOVEQPRINTDQUITqREPLACERESEQUENCE2SETBSHOWSUBSTITUTEATYPERWRITEaVERIFY#*TOLTHRU-,ANEXT;AND+=.jBUFFER9ENDYBEGINILAST9ALL:IRESTkBEFOREYWHOLE/QQUERYQBRIEFSEQUENCEDUPLICATEcNOTYPEBSAVEBSTAYrNUMBERSNONUMBERSBCASEREXACTbSEARCHqGENERALrBOUNDEDUNBOUNDEDTERMINALQUPPERQLOWERANONEDVT52UVT100DHCPYaCURSORAGOLDsCONTROL"ASNOVERIFYTRUNCATENOTRUNCATErVERSIONAWRAPAWORDcNOWRAPbSCREENQLINESAMODEQMACRObENTITYCPAGESENTENCEPARAGRAPHRCLEARORIGINALQQUIETsNOQUIETaSELECT2TABSNOTABCFILLaADJUSTcDELETEcREPEATNOREPEAT3FNFUNOFNF3WPSrSUMMARYNOSUMMARYaPROMPTDLINEfKEYPADNOKEYPADHCCHANGEfINSERTwINSERTNUQUERYCTEXT3ENDBPAGEBWORDDELIMITERNODELIMITERPARAGRAPH2WPSTNOWPSAUTOREPEATNOAUTOREPEATwCOMMANDRFILESDIACRITICALINSENSITIVE"CI"DIFUNCTIONfSCROLLNOSCROLLEIGHTBITNOEIGHTBITDEDITfNOEDIT+)(?FV@<W61vd}:JAcS^ -+5. $wsh|UPG`[|v83Ml` -"Z!`Mlfq0E= &>w` t ֔  37 JT p ׯ8! ܥ 5& 7  5 ^  t w-@-:& w!5567 T ă p7 -w: lrv$  -*4& t%r)Pr) t[ q Ο: q] q*7 (  f t s71(l(p) py N ׭^ ׭Z׭z7el(7`2g3& Νl(p) b7el(5 ^ ^Z V h  Nl( B C e d552  l > 5  ƁW!F & yN @4%  lxv$  5X Ğ  by%5 \ l(l) @m  ! &m - l(Z -  l %*^5 wR 8ؤZh r) l(! 7 ! 5L \, Pb7H ~v vz% -84r)j %7 -Vr)  HD > J 47 &7 7`r) ^eer) T7 er)7 nw\ a % $ 5  B  B ef ne  w[) a " r j l(@5tv v0& 5 ~W 5~ N& % G%WN  a % .W W ,W ܃5.I& 00qA A555512N& & eN  a % %jj% j l(X5%%w %wrZ * na  h   &a Z { 6 5Z 8  9 : ;> @ wbv& e wB ^na ~ w }WW -n5 j 5 x na < h J G C-*$ f N&  ma  %C- -  Ο W  l(%;%WW W W a  W W W a  N`ew  f 587 |7 07 *prdl nwd@&X s%-  >l( 5   l)  e wW 7 f& :s-v-v q 7 %~ - Z rv xqe f& r t% B m er) &  %v $q k%-  "   lvvv p%    lvvv p% ,k-dd  Vf -V   5 -- r)+ׯ  # x  --r)   J b  \@ > N  z wU  a ~ 9 Wp B`B0 c  ? O [ ~e  ܢv#e,    f5+- ~e- v0r0 \o% \ev0v0  1 D P J&1>#&,, Ve5&3F3ȋ `&  n i%f (Y f 2yW"W"W" w h  f 5HB  o%W ^ e e@ f e h  wT)!P W  1& +W W W a --D >(W D " l)Rf  b |a  %f-R/5+--#v m N 6g; d &gr ~d7 7 w޷ޖ% -J4  D f  Я\   7  w I7  -     wH  77 -ш ~   xjr7 p-b^ XT   R NN-#x z 5^zz Nb% p| { 4b% >   & e54zz a7 ewGЄ 7& YW 0~З) 5  W  7H XW  .з`*  @ w~G >      lh} \{W AIW ^Ff|A W B>W W;<}B @`e{ C -D``7    &6  C!5 ~E`NA wF 8 =G-..C &"-  _  Z ,  x<Ў j * V w r%χ--Pl}t} _ >Z7 7 і%|} _7 Pі%wE. <:86 ke5dwT  " l} py3b, R*, +t* 5 pf w$ *@a %w7 jxfb~^7 x[\ pw e   Ae, DeVt &,6(,$ ! 8 |Je, |De  Dg y  ~,  \  Ta pwp y   r l o j ge- |  r-n f7 `R58IFE-r) wp~f z 1 njaa bv%m 7rJ "  Q ! 7r*7(z"  7` ] -- 2xؤ X r) T 7 L<- 7 .er)(5>@& D %9 Jle, B\.L e7 7  ( ,  lQ  ,  ,w  7 ̀ ewAv1v1& & ( We a A|   aea @   @     $e# 21J R< VC~e   e ew@7   {7 b`e Ph% h ~  ʠ r @m  `| *me& Ο % ߼m7˷ 6m O 0 2 lW  ,   $& ` \-X T-P J   z| w?  ,u5 p l(J Ql(:l)6v& & a&  e wh  &N  @l(e "(& & P a&  e% lN l(ewW A1W ,W N&  * ehl)fǖ%W  -Vl( N ΟH xW l(2 N $  a -l(l(l( ,5 %   5 l(l( | hY ,a N e %w=-V4 W @m     &f %     !:7 j@- bɎ & X7 jh7 f `% lW . U ׯ!  L ׯ!  T-Pa a q% V Q7  Nr O `  4QT `a L a 7 D˦ a Vaa q%`B &* v_ P7 N7 e & aa ^pa e w<-}}a =7   r  a & s-}} Ua & ewP 7 b> & X V,(7@ǀ %o   a ( a & nr00qA A555512%O I e I   M( rde0v rdC r e0v  r @e06!a& q% M r M f M@ Z N%w-f}} 6T Ne ew:)f H 4f f5 ,eaa n  Vp7Ŏ` j;e%w9)  `H ,@, 6ea6a Vn%%wR9(&  <& W!)H` 6_%  d w$ ׯ e7  e7 !|} Ze 7 Z} :e „:P!M!J!GA r l}r)<& 7 5 W! &*&     e h & 6&    % "a ea $86 w "G wAm Gl"~  5} 6 -4    V ` a  w   ׯ  | ׯ   j s-|4% n ,-l4. 6 M F-N4   p -24 b\ w8-4  ->: .(`r) X5whC n-r)  45g꿃 c޿r)r)Կ[J& W!  DD(& &    7 2&    57  p п ` : h  %) 2w  4~v1N   5 !"  n ew-,( XF lz~7 H  -@ 780 0F l~  |7 h6 !   v -B v1z   ^ f  +7 ( : !  !!!  l v  b |ew05 - Bw, C!!=A r  l~ g0b, J 7L,P * PP7( +  7%W!7 reaa 25 aLea 2%    V ,a"a 4.a &% a *a  l~-M x  wb,a"a % v μ2  ,a"a % q *a ZhW!)^wB ^-na 2  T   y-<*a ze, "2໲rн %& d%D R O (   V ށ E ,7 d 8 5(er) d! pw4 "  b (  g w 7     xe w ֺ !  X 4 (owֺ(er) R r)  Z] :m ;  \  \ - ܼm % r)& Οļer) 2 Οer) 1 ߠ7`ڹ Xr)ι _e w& 5   8 we  e,w/ vv  er)^ Pr) ? e v  ʹ  wX/ ҝ    v ҟ ؁ v  v  x w./     Jҁ B N`& N&  X7           D  ׁ D ew. - B-4qׯ" -r) x & Οp&  5 X  nׁ B ׯ̷ 6-ķr)2 T - J / Lׯ -r) 8  & Ο& H5    ց B   be f     , ׯ  ց -r)ׯ  f ~  z  @w -r) -ȶ)! @     ?`%r)f Zwp `N %w, r ~ @ۖ%  B  r ~ ۖ%     z # -5 xׯڵ 5ׯʵ  Z b X fr)7  -& Οf j>@`w % zw%fr)7 w ` & N 0>m7޵% ]  Rη̷ ]7tз0 NTe +H0 ew+  00qA@557i:)*   l~ _  Cxʐ  f 5-ִ1 6` $Na F %DW r) Rf f a V 7 R GOLDJK pqrstuvwxyQRABCDnSmlPM[>   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy"  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY=>\<[?6l)0\>DD &&&FFFFbb P2  ־&>w`$ ^- Ѓ7 Pr)e, ` 5B5 r aa P, -8` -  N7 & 7 J6  5 r) a ~7    Z,& `e - ,, J6 v-,Z& `e  6 5 w67 wv-L-"-5 ,$a b_,,.a p^.%,$a ,_6 $a,.a ,^52 . . r)(a |M vr) f& Nf6f-5N EN N @*r) @& fr) @& @ & Be e 5 l5e-a-] f N NE&6f(C j`bf NN C<>4 N, f & ^e 5 85&  .#5! &  e &  e  5 n    lT^ l.    > 2         5 %5     6  5 5c5 _ N\   v      ! -L F 78&  de   55N \  r  5 5w5 w n 66 6 7 j 5d55 ta 65 V C5-5 @& a R 5   &  D e %5  00qA A555512  ܍  5v5Q -d 4 -r 7  r  ~ e& Ο y6 T H %    5w55   5w:66 5 7 7 7 7 7 7 7 8  |  xLne, X5 e& Ο xFB (a 2v70 "&%55w  6    -754 "    .e& Ο$ Bx6 6` -4%     6 @!,5)   J Ne& Ο w6m(%  ,Z& We l,, z~ Z, WY ,.a V0a,& We w R . .-. 0-0 2 0a,& FWe @m7  Z, \V%%5S %  w      w w @m7  5X5~"7 nh7 b\ C  C m7 :5/  m(7  6  0 C  C        6B!7 5   5 555 55      N V7 * w6Ub 65  & toL^ nߎ & ZoN^ m & Bo 57  H   ؇z 7߷ ;߄  6  & n-P^R^ Zm5&7 F*H 7 @ P  \ * LJH߁ ew88555D7 -޸& $   憎 ޷      -vޠ jޔ޷޷7 <7 vn7 28BBގ m *޷& u fer)e2w R m r     q7\-- } 5f#݀  N -ݞ& f 2 & lZ^ Vk zqwt r-> `q \  N  4<&& & p e(& & \l- \^^^ j7  Nw܎&   e y w5r/z -)5`& d H|& k`^hD (< & kd^ Hj lp7h r-2$&   ܎ & rkf^ j7 ۷ & rwۖ% &  > 7 7e %wO ΃ f&  & j le JmH r`ۀ _-6[5  H& Bێ 8& jh^ &i#7 ہ w ڎ & djj^ h&  J eڦ&  07  e @{5j#5d & il^ zhR 6j& ip^ Xh ; v r (& & i-Jr^t^ h7  w,&  ^% &  F% - && & "e e -4r)D Z}%7 ׇwlMv P7 ` \f& h-lv^-Zx^ 4g 7 ٖ% -2  lh|^ fe f& Nh Bj% B  R-# ^ 5^^ f% ^ ~f%H F H , & i5~^^ Bf7 ef-H/5+--#^ f N ,`; ] `r t]7 7 w׷ז%--P^^ e `7 7 ז%f^ e7 0ז%wK5RwnZ,& nLe -:b,, r%r)a >iw6   l^ &0 @  Aw  @    Aw  w ֿw   @  Aw ֣6 p6   wv 6 m  6 e  wb6 l `րm   ev6 "00qA@557i:)* J\ m6    *\m6v6   @6 -W B  lQ Է շ\J@2  @ 26 `ȵ  - - ԃ 20B)`ˋ$  nF 2     |Է Dԁ  І5 D    5 w5w %e t Jf-  (t  - t -:4 {Ӏ   {  wG  5k i B`ʵ,  l^ {Ev LEʵf lg b b{ V X{ AC`v   6   C` v     6  ˕v  5A -^^ `X - ҷ Ӗ%wbFer)-zf,Xer) &%N,V e  xi XiBe m - %wF  \w & \<[?6l)0\  D a% D &¥  ¥ ¥/  p¥-¥N `¥O T¥J¥C D¥O(@¥R 2¥EK¥O[D Za%E  EUE  EUUEE r E U E L UEzE & U^UXENEH¥ ¥ ¥/¥ ¥=¥: ¥,  ¤  B  EDT>Invalid option switchSyntax error on command lineInvalid file nameNo input file namedJOURNALOMMANDREATEECOVEROw[e 7 7 7 7 \7 V7 P'& .(5wF'2't=L f? wB@ [e S5l5f'3   7/%v bxtjB'.׭nb'׭R'^Y}TJ'N(7 w Ze ,_'["WJ' " ;3'& & & & & & & & & Ε f7 6 6 6 6 Z, Y7 7 \7 P7 & =6 77 7 7 7 7 7 7 7 7 P7 cc7 00qA A5555127 7 7 7 7 7 7 @7 FB7 @<7 :7 7 7 7 7 \7 jl(|7 7 7 7 27 p7 . 0 ,e j x7 <-ؤ :h 6 a6 aa f5 U5  = e wNPa $q B U|N3 WN&3 WNF3 WNf3 WN3 WN3 xWN3 hW**a* *N >W%V ke(w0**a* 놎*N W%**a* ~ Ն*N V%**a* R N~ V%**a* & NT |V%**a* N* PV%& & *eN z N*6a ze V \je,#߲5H" JW  =TU.&e,@ ef& & de  i R -8 N o i%5  -  5& & ce N i  5x& & ce  Ri  =p$-R-@T Jx f& & rce l i n  d f5l L6 6 N=$ a& c5 la `m  e=7 & & b5 la m  aa b na l  e7 7 e-R-PNN m g7 $7 ߖ%wR aa ڇ5%M 1 1 waa 5e31 1 w 5a a `5  3 3 ؁ e % * C*   ?[EOB] .!?  PASTEMAIN)B.JOU;[?3l[?3h 8>w ڦ*8I f*=)98  eB &&  U **e *Nlv ΋*.2 h & #!)&eP(e && >e >E ,p* ww (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w *eB 8  w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff P &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( b *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 60 @0 &*0 @ & & e# eB&B ,B > d*  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p282e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E p (.8Ae f"( UCɗ&+(e$&% **f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ  \Mwtw BC "&0(*7e "fSYq00qA@557i:)*q1յ<pBՋ.p0p2&* 0=E%0=w141612epl2l0p   f b >5>Eu j  e6p 4 8 f 81416 ` L r &  ^ f p&* D*> =00l&8el2 0 *w eE D` bl lrw ʚ  B eE"s    s-  CslW=f(& e %&&eH =&e0  :U   E > >E(5E=uf p  weB  8 n$&w v*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  <  EU . B 8e2 ..8em,0l0!D0e6p 4.) &f | D Re) .  e6p 4 208*w=p!Օ^,*1 U8UMw w< B 00fep=& /e`pwP46f %8 E D/D!D l0l8epl0pɥ.ɕ w *) l0, *) $ )*)0,40,6 (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w  /$ ,:T < U@% DD%][%><w  w&1  %,,:4 w J*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    L*w R*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  ,DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w ʏ&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w    E r  l T          C" @@`e55  J5 N4%  File specification requiredNInput file could not be closed^Invalid entityn!Journal file could not be opened~No help available for that key/ORIGINAL line numbers no longer an EDT feature!Press the key you wish to defineSelect complete lines only5To return to the keypad diagram, press the return keyWrite file could not be closedIE.IFC - Invalid function code!IE.RSU - Sharable resource in use+IE.WER - File processor device write error/IE.FEX - Rename - new file name already in useIE.BDR - Bad directory fileIE.OFL - Device off line+IE.BCC - Block check, CRC, or framing error V n& V 3*&j jV dV3 )#6 B އ#6  ҇wT e4@ x9, U === =@we8@p@pp h* 7*df ` we@  w.*( 4%%geBfe h4A : 0,! H4 (e(Nv 04A A A . z0A ; j0 52~W W f?@  A ~N 2e %!)Nv 3: /Nv 3Nv |3%@ (  @ B  Ze& / 0 /  vPe0& / v~w r $! z& &  ew r ) N8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w hC#    D @)  6?0D)w ^p dn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e * e*w@)0,    ) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a ne0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,   wL $ JwB #  f  `* w)0406 l0 (B*A( (A (A(AD&(C00qA A555512p @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w Hl  0,0wT  w "l $0,0w. x46  )0406 0 ***0+1(e  %&p*w f( f)f )"(. = . B  E 0 (.8Ae f"( UCɗ&+(e$&%  *) l0, *) $ )*)0,40,6 e6p 4 8  81416  & L   8  **  DP5R RRR  \..8em,0l0!D0e6p 4.) <&f R  (e) .  e6p 4 08*w=p!Օ^> =00l&8el2 0 * 8   * X D 4 6 e6p 4&*&4&6= 664 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = 0,0, f 톇,, w f     .% eB U5UU plp & NeՀ)*8e2 141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ ~W]~H $$C˥.˥;  P$ ɥ.  C ɥ; ~H$ ѥ; H!  B~!R~!!~ѕ. ~ѕ; ~!!H7 ww@& SY&"D pAB% b! B~7 7 AB% >AB.& .  $@eB! < wn7*dwe7 ܰ 83@# +@  777j$ j U@ ʡġ*7С L we" T@   |tlj\   0  %# F#   ww wDe@&B#   B   we  we"ff& & & & f e @"  wefff& & ff& xe "@ !% ХTХMȥP=  0 w q*8I *=)98 L eB &&  U > **e *Nlv ΋*.2  & #!)&eP(e && >e >E p* 4w~ w p* 8B pB  b 0 B F w o( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB 8   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  b  P3)/ J #( P) @#*00qA@557i:)**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 R0 @0 &*0 @ & & e# eB&B hB L *  eBe>  # #D #=0/H#@&0 # = e0   80@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2eB  8 $&w j*(5<s1  U U@  < f&" Z)'&M'&&**%*%0 *&* \*5ND  ,<  EU   p (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w h*&fB IB D  ? 5   ,*+*1,\\1,^^pBBpDDpFFeB >eB 4 **p**0 B1 Bw 8 !Հ)w*wlw g*D D  wX82e&( n0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E R (.8Ae f"( UCɗ&+(e$&% ** b f F&* H*141612epl2l0p ~Mw   f V >5>Eu ^  e6p 4 h 8 X 81416 6 "  H   > =00l&8el2 0 *w dBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww VceE D` bl lrw c  B eE"s    s-  Cslw c(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w "a /$ ,:T < U@% DD%][%><w  w1  %,,:4 w ^`*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w f_*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5 00qArA555512 5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 8e2 ..8em,0l0!D0e6p 4.) &f | D Re) .  e6p 4 N08*w=p!Օ^,*1 U8UMw wZ B 00fep=& /e`pwn46f %8 E D/D!D l0l8epl0pɥ.ɕ w *) l0, *) $ )*)0,40,6 f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w X&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@0,0, f 톇,, w W     .% eB U5UU plp & NeՀ)*|,>!Y Y &[q Y A΍#SYSYSYSYTISYOVQ΍Z<=Q@00rA@557i:)*00rAA555512$!~$$!~$$!~$$!~$$!~$00rA@557i:)*$ |"$$) p4'V'9 j p4'J( 4'b( p4'X( p4'\( p4'Z( 4'^( 4'`( 4'n( p4'h(7A@@RTUC00rBA555512 LB:[1,2].HLPEDTHELPEDTHELPEDTSYS LB:[1,2].EDTEDTINI.EDT4<==@PF >== >>==Z@<=>=b>x@=*>=v>@>=<>=>@=N>=>@=>=>@@W@@|@<w CdD E DdE bEbH wC D EHwr&&    dA B dB b( @ A B N  Tf f &f &ff we~fC~w  ~@w  N @Ԁ %! - mC a  v  M z  h  V  D  2   f6D~  f6D~     f  @ P ``` m  : & : 3*&j : :3 )$6 Fpއ$6 6p҇we4@ $p9, : === =@wDe8@p@pp o* 7*f  we@ fo w00r B@557i:)* %%geBfe A : ." p (e(Nv XA A A . A ;  5|{W W f?@  A ~N e %!)Nv : $Nv Nv %@ (  @ B  Ze&  0   vPe0&  v~& & & & 2'P&f& Ε& Ε -dz\z^!Cפ:$P W[C W<CW>~W]~H $$C˥.˥;  P$ ɥ.  C ɥ; ~H$ ѥ; H!  B~ZV."R~""~ѕ. ~ѕ; ~"!H7 ƟwŸw@& SY&"D pAB% b! B~7 ̚7 ʚAB& >ABn& . : $@@eB! < kw7*w*e7 83@# k+@ М ̜777$ kU@ zt*7  we" T@  > 6,$   j0  %# jF# j  ww we@&B# Jj j B  lj wre  wXe"ff& & & & f e @" i wefff& & ff& xe "@ "% ХTХMȥP=  0 YYwe@ABeE D` bl lrw8e@A f B eE&s   s-  CslB  e@<t% ?,ڛe Bf@ e&& && & &&& 4'& Ε      X'& & &  &&& 4'& Ε & & & & &&& 4'& Ε & & & & 8'& 4'& Ε ܚؚϚ>f|-|-& & & & f|-& 4'& Ε & & & &&& 4'& Ε  X-R7 JED `we>'&ÝI#B & & & & & 4'& Ε  `ʝ㙀  j/s sw\e 7 $7 $7 $7 $7 &7 $ c & . wcw-.CD$wv7 Μ Rc f =М 5؜R 2 Cw:N5  aa N5!na e (=XH Daa e5 =  n a Z%y=g i4& Νvq4& Νt xa54& Νl4& Νj Xae &4& ΝN (:!2@=XD@5we& & & & ` e(P lT-5 R5R -U F U5$ L  5ܚ$e a-r   `CeewRš    z ~ (! 5w8 70 _5 _& R? Ιx-F - *ׯ!2  5-G3& Ν %  7 j7  ZR e He De5 0׭&!  _ D. ^  @ Z  5R$ l> B (֗(җ!ʖ w w7Bw   w( ll҃ '  N l|Z#ff& & & & New:"ff& & & & *"ff& |'/"6    l (w./ 6  6   (7    "&jb"&& & ( 7ZR5C-P5 "d& "h&& &  "&& & "&& & & & & " ee3#&ff & 00rBA555512 Fe%/#ff`X&  new z'w   l `'z(Z# (.:" "(" (#& aaff e 4  l & ("(#&f 5/$  - 7 ~ev  [ lZ#I:"F"C/ -<"& %5-  " e-5"蒦 5"& V e#&   l % "# %@ % e f  l % 8[e $%  ($  [fW  B%W ,W W W  W W )7  a a  e a &ef  ؕ  5֓ 9 wƖ7 %55!--l5\ C z  f-b0u 7 Z X&-N0u $- 7 07 .7 $7 "7 $7 "  7 w:5ʔZ  #a J! :@N \0 @ E  @1  V 1 W  A1%ef 4 .X @,--Г,&e >%f V NW @w W  5qW  g@Ҁ El^ Ne@V5tW  zf 6 -nF hCef t < l  ~> P%&< DX <@te0 9e "@Ee0 9e > w|  r e4  ؐ-Ҁ El#5~ eӦ  ԗ  ~ e@w V"-B7 <-6  (  @7  f5 A   ڑS-葺  ڑ  @7Α ȑđ|-|-~- &  e  de7 -|N H n  @7b \ | t 7 @w- N B B  r &  r fe0  |-|- |-ܑ7 ڑ%f-Α.ȑ w  5^ Z-  &  d%5f %-R 3 -^  w  & N V w 0+ ֏ @f %w6 & 6 6    l nT <() R  N(  C 5^ Z le j5 $() % ( %7 ޑKaa ( ~%7 e)7 BL & `( >0f7c Ne7 Pw  Ќ(:e(& Pe ׭! 5H( %e((܊!؊ewa  WpeBaf : Na a  %a ew|- a   ~       ` a af  W &e0  W  W   %W ӕ.% 7e|-mލ7ތ7֍e "P P w -$& R5z  5 e  "e 1 >  l   m.f N`7   ' 2N ,% #  |. . -ڌ  -ƌ < . ` b =t  aa $eew߁  & N f N jO@w6 & 6 6 5X aa 5i > "dW  f& ޾&e SW r  h  ^  T  J  @  6N`+ N` + T -J0u  @ -60u *eeewew݃  -  7  -։5  7%     7 w D A~  l4-p \  ( p-N[ `4   A B 200rB@557i:)*w B @ C @  1-f <  & -†[ @ N ^D B  HC w| tw pf |%7\-@h & >Xe- ~ < 8-4 0-, &%   ~%wہ    ʈ -ʅ[  %- Y Ne e - N 8 ;  $H wVTL w  -L F-->6w ,wA -a 5| zae "   l e@     AK  A @ D! D!1 D A ( D  A  @  - -  A e  @ew -ąHe- l)a j (΅       | x t%   d ` \e w؁ CB-HB w >80 -(7 "-(7 "- 7 - 7   w w6  6 &5 w- A  5 C  L " aa % V wZwFB` *w$w"   @pw CJ swMf  1 5rQnm 6 te" $m   66 + |%m    ^m 6 66 %    6  w w4-V w삀 ewzڂ7 ڂ7 ւ6  - --\n*v" '-7 <- Lef &5v  v"  ށ  7 ́%-,   % >F E 4F (F l-- 5 R%7 恇- ؁ 5΁ (%-0u 8-v0u , T$-    56 5*//ԃ 7 ̃7 %# C+a |+a j a  %fW @f1 we  wҁW @ 5 N1 Vw%% wn҂ | p :~? ~~ 5~ ~:3 Ne7 ~ pt|~~V|~7`~~w<|0`` | |n~ 1 w`~7`\~ 5  5{55ew^Bm @m  w0}@P }}}}} h{ f }} D{pp}H  }{v}mt}p}P} {B}wV}/zr5| || -|| \z@`B` " " } 1| ea|B f& fz|m||eW"      l )"|{ {-{ {-{ {B| & X|70|.|   ~ |z- $||{ { w\τ  N ye$ % zw R   l  -b{yZ{ ))7J{ { { {5{ {z -zz& %y``   0a``   :{74{w`0{eBl " f 4 {?xxz z`   V Orxzmzzz&^xzmz z`?zze `,xjz tz pz lzrz/x  ww0zwFzmDz@ze  f  l~e wBw@y y y& & %-y 5y y:3 &eyy:3 by7 |yew*w0 "|y300r$BA555512& py? wwBy vVyb C``C C" " 7ymyy v-x& x/v vxmxxwrv0 x3" ߼xbHe7x`x``   3"  u|x 0&  vvBx uVxmTxPx f6 6  :26u"wt aa > wP 70 a ˶ -~ ~(4 N% ' f~`aa a(48ue e $ue`& 6 ue 4 = ;vv- # wvw w- w w-w v ptev eGv a a e N 7 s%e5s` ^lZl wŦ)6  ) w o451 D& *6mqmq m5q  qe- ހ` %5jq -HoHo D& 6mDqmZq  Nqe%%' 3%w a=˕ `& H Ė%׬-  `N`c& 1c9 ac@eA& P c c e e e   e35k $n\& 5k\& 7 mkf5k)7 kpp5m o & ޖ% m o & ޖ%wp7 mf   @wD -mm"o ) o6 6 n6 oomeoe ר ע   Q Iɕ @mho & N& a6!4C ע  )' ))   B)  )  N& a e% v! ~W ) \)f)  ) %  -wW ) )f) p R %e w"D4Du/4& Νu& & & & t D& ewXEmN  E W W  E  ! aaKW/ E W W W/aaD "(a,a0a4a T6,6 &5,w^ (w wv6 "*e1* aa aa"  .a2a,2a Ne o a 4W  N2a af f(a& "e f e 5,@aaHNatLa@`& %":a>aBaFa 6>e( 00e ":a>aBaFa 6>ew5"  wj (w~5"?  @t@a`@ 6a`& v (" ؎.e0 "2a6a:a>a &66e $5$/5, -0  .6 $.0 @ \"2a6a:a>a 66e 5"[6 (e1.a2a2a e B  !  r  ׎.0 ف2  ց W  ""2a6a:a>a 66e   p ( "w& 6 ( P~ D"&  2B &-lj|- ree)5*/  E -e "a a 8>00r,B@557i:)*e  %w   0- 5A C,~  f0l-& ne w 0 a X   al-& e f-`-a fa0& e `"lh dh `h    aa  Ba λ2`a  Haa a a feBa ze%eW af- @ f-6 | 6f- 2%l-f-a dee0l- Zg `- @g f- ֺ Z0f- ewf0a 4r-  a0& 6e e w 6a R:a @ 5w4 a0& ܺe pf a 8  Tf Pf Lf - -  "a f e 8$a0& Xe 5  c,a %aa ^-e%D"a$a *$a6 f  6(a %%ew &ab X < x  e ew5b.d+  &>b)B 5b-d5`d Ld5.d b& re w0-a  6 c -NbHbdaa & N& 0% C )aeD!Da !P-ca   |-da`a Tc J'5nc 2 (7 c%cmxc x i g3&  a` & FF a ·m Dce6  @`a`&  H v `m  q`m-&QUIT/SAVE!.TMP.TMP* $J .  ,          *::::JJJJ Zjjjjj zzzz  )9999IIII Yiiiii yyyy LF VT CRESCDELINDNELSSAESAHTSHTJVTSPLDPLURISS2SS3DCSPU1PU2STS00r4BA555512CCHMWSPAEPACSISTOSCPMAPC!!C/L-Y-S0X0C0a_<<0^+-2^3^/UP!.^1^o_>>1412??A`A'A^A~A"A*AEC,E`E'E^E"I`I'I^I"N~O`O'O^O~O"OEO/U`U'U^U"Y"ssa`a'a^a~a"a*aec,e`e'e^e"i`i'i^i"n~o`o'o^o~o"oeo/u`u'u^u"y"Gŧ`y` d'@Bʚ; TvHrN @zZtH^Zb K:[?8h[?8l,,2"*Additional information available: D-C.RESETADVBACK*Error:  $*0Backup past top of buffer 1Consistency check failed, please check your file0!Error opening terminal for input@/For help on any other keypad key, press the keyPInput file could not be opened`Invalid option for that commandp'Keys cannot be defined in Nokeypad mode=No more than 65535 lines can be processed in a single commandOutput file could not be closedPrint file could not be closedSelect range is already active+Unexpected characters after end of commandWrite file could not be createdIE.PRI - Privilege violation-IE.WAT - Attribute control list format error)IE.RER - File processor device read error%IE.2DV - Rename - 2 different devicesIE.BVR - Bad version numberIE.BHD - Bad file headerIE.TMO - Timeout on requestIE.ILU - Invalid LUN ':' required)Cannot set terminal type from change mode"!Could not align tabs with cursor2!Error opening terminal for outputBHelp file could not be closedRInput file does not existb!Invalid parameter for SET or SHOWr'Line exceeded 255 characters, truncatedNo output file written!Output file could not be createdPrint file could not be created+Sequence increment must be less than 65536Unrecognized commandIE.DAO - Data overrunIE.WAC - Accessed for write%IE.CKS - File header checksum failure+IE.RAT - Illegal record attributes bits set+IE.RCN - Illegal record number - too large%IE.ISQ - Illegal sequential operationIE.EOT - End of tape detected'IE.NNC - Not ANSI 'D' format byte countAborted by CTRL/C/Change mode can be entered only from a terminal$CTRL/C ignored4Error reading from input fileDHelp file could not be openedU3Input file does not have standard text file formatdInvalid stringtMACRO or KEY requiredNo select range activeParenthesis mismatchQuoted string required'Sequence number must be less than 65536Unrecognized command optionIE.EOV - End of volume detected'IE.WLK - Write attempted to locked unit'IE.LCK - Locked from read/write accessIE.HFU - File header fullIE.BTP - Bad record type'IE.RAC - Illegal record access bits set'IE.FHE - Fatal harware error on device#IE.NFI - File ID was not specified)IE.EXP - File expiration date not reachedIE.BTF - Bad tape formatIE.IUI - Invalid UICIE.IDU - Invalid device or unitAdvance past bottom of bufferCommand buffer exhausted&'Destination for MOVE or COPY not found6Error reading from terminalF)Help File Index could not be initializedVInsufficient memoryfInvalid subcommandv=Max input line of 2814749767 exceeded, file input terminated No such lineParsing stack overflow'Range for RESEQUENCE must be contiguous)String delimiter must be non-alphanumericWork file failed to closeIE.IFU - Index file fullIE.NSF - No such file1IE.NBK - File exceeds space allocated, no blocks3IE.ILL - Illegal operation on file descriptor block-IE.DUP - ENTER - duplicate entry in directory-IE.STK - Not enough stack space (FCS or FCP)IE.DSQ - Disk quota exceeded 'AS' required9Command buffer exhausted during XLATE command processing(Editor aborted8Error writing to output fileH!Include file could not be closedX/Internal software error - please submit an SPRhInvalid value in SET commandxKMax line number exceeded; lines no longer ascending; resequence recommended-Now enter the definition terminated by ENTER+Please answ00rFile specification requiredNInput file could not be closed^Invalid entityn!Journal file could not be opened~No help available for that key/ORIGINAL line numbers no longer an EDT feature!Press the key you wish to defineSelect complete lines only5To return to the keypad diagram, press the return keyWrite file could not be closedIE.IFC - Invalid function code!IE.RSU - Sharable resource in use+IE.WER - File processor device write error/IE.FEX - Rename - new file name already in useIE.BDR - Bad directory fileIE.OFL - Device off line+IE.BCC - Block check, CRC, or framing error  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy6V'&1 zM>@ rM>@ jM>L bM>nc ZM>>k RM>@ JM>@ BM*>@ :M*>C 2M*>C *M*>D "M*>lH M*>H M*>dI M*>I M*>^K L*>V L*>V L*>&W L*>W L*>W L*>X L*>TY L*>VY L*>(Z L*> [ L*>d L*>g L*>pv L<>@ LN>G LN>rK zLN>@ rLN>L jLN>@ bLN>@ ZLN>r@5ew , Bv     5Bwn 50  (r- DUt-E D  E E ܁&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff P$d0 ,Xp l`d\00rDBA555512f {7 EtE@ @<` \ w77 7 E  lt J{zF 4Z} B} t } | ,j y r|  `/ AP D *j g R c ` ]Հ W :-T i && } JA #>R / >A 7 fe& &  . Հ   *-   \ |& |  (55@Z5z7 w> W y7 @  lRt y$ / j@ Nr{N` Rw q7P< / > wd wc Y7 w(5  / @% wj  qze, a =B` :  Y7 w5  4/ ?%wh   p -) 7 es kf / R? Y`N`a =$ a& r>e w .q 7  / > p X_f 0 #  4p  Of    p  :7 7f 7 / / p>Nf& W  l|td X7 B / 0> peMe PBf b v e/ =e4 , na = 5  / B<% a4 = |o e }e dB,  v`ȋȕ ` / L=N Nf rh Jd VeHff f% B  / l  w08  f %@ lt k% 2k %B %  k w7 >6f dc% w&ft& 8e ft& 8e 2ft& 8e 5f& & PMe 0"7 @N R -d7 ^ 4 |w L7 Fw r7 lB@ 7P  2 @$ e%a+ r%-t Hb% Bj oF  d8 ~o$70 0e 60 et& K  QX&&& P(5  zQ-^( q% f$&& Na% #V 0Q w  N B@6 5| 5 k 6 bea X3a* ~a  xNe / Wp aa Pm% e a 2a* a  Newd Wq vaa xPm% e D6  62.2a,a G5w0"a (26 7  w^-n5wR G 5aS.ގ  a 1TCeB a _ "a$a 0%W!< a* _ 7  Wq wx a a Om"`% % wNmW 6 000rLB@557i:)*:246 (j(d,e,,a6a F5  ( * , 6`ew5Z<a& 6F5@a P  Kew5$aZe& 1e Dڰ-  nKU@&5 l<a& E 65-  & Q - K|5n 2 G(at FI% @a O eN6a O e e05 6 t Za 7eew.&`ɋɕ &&  / ^0 Bbef@ ȋȕ f h /0 / 0 ^   | -  / / aN j%efW  I  W f  w- 6 & 6 6   > 4I ` vaa pC54 / / b e 6 r Iaa C5e6 RC & & B5H"a RM .eK-)َ# Z]e 4p h& & B Ha L e5LJa L  Gje ew4, xq;` f \Ԗ%w5 -F r E-& e3a ", Ν3a , a +ef-~ Z% -  lt nf 33N`& N G5 2 )(" [ %55 ((! n z ~Je  >/ ,.  ew*J  2a j,d f/ R, & F @5e <׎ La *Էa %a t* \w @af + ] b/ +R  eG a $0ba &*t  ?N 6-f2 / &   b d f50 N   vV Dew5 .]5 N \\a $ӷa~ \5 ldeBZa P) ^ \ xD0^a *)0na )e 0&a (5 >&a`a W %5" a-,  lV Ce&g ,\ & ( * >5& |djat ` tt C.aB& (e t C.at e A.aja& (e  e,eJwf' aa ,c% 2 fe )xє Zf Wa a cl Z5 ^Ve  %5 Tvt _hd lZ Ljfр77 PZ kw DZw&N / <( ~w0b b5 5 <@ 5 E  Et /l /` ' Ye J Y hE F:2 ӗ aa ;eZew% > @ @`ȋȕ  / & @ ewnh<6 6 d6a a : wZ  % ; !-ph C t |- ? ? D և5p ` / & X : a& 2:e a D na& 9e a ^D 0w> /f % |Wea (D7eef5` a #`a #e @`ȋȕ   / %N T eq ^V ώ |e Q  > /` $ Ve P V0a :#  -     / p$ TVaee .h / B$ &Vr-t t `> VxB   lXu ]k7 hd^ X~zv5W,w0@   lnu \*7 7 r7 l 7 ~R7 LTWdS7 ^P-,a"z }7 t-X-P5  u A 4<̖%8y- -500rTBA555512  u A ;̖%7 ^W,wVRB w, w -|-xznwj4@   ; '& ~ !@w ~W,Xw"-7 - 7 cv @ (+` ΐ a [a n[  :& D!wV ;w)7 &W,ww7 h7 b \ 7 V7 wECW!w   lu Y F3f33 3334    uf` eeJf&f` %}v E  6B  W W d 9   6! ^@ 0+`B af Yaf Y w` 9$&f ɖ%w *w $ff %7 Bd 9 f4& Ν( e ew<6 6 >5&hv aa 25 5~a T= {& & 25 a *=epe5* & & 25 a 5 3ew"A @&+ &f{5 5>& "/ 3&a \% #@ 7 e C p 2%mf7 ( 3 z1 C |& rh w  3: N1YV v 4%vb v 4%vS v 4%vy v l4%v-v P4   Bww[H 23 2 w F w 4%w vw=w 3Z 2$w 3H 2 1 w 0w 3%2w 8w 3%:wz5>w qHww@   lx ^R F3f33 3334 B7 l C "\ 0%mR7  0 f/ C A A.+ B7 & C w :0%m 7  0 / C 5Pw1\w .5fwwlwwF70D4 % mpw T2  -ww 42 *0%S:8 7 b C R v/%mH7  / \. C  /.w 1f 1 /w 1¿ =ʿw f& 1 /e wx ʿ z /y  `W"#fa X%  `exf`&  5e ee  wJ </ , er  7   15-5*5'-B 5 *5& 5  /  %  P d / 0 a pb  a{ N -e /F  Ge e,&&&& @ewde Z7 6  6 Hv`v V-vR -lD@m6 >5:552f1zf ce %f l% cf J*1~   m"Ė%5& N 5"-¼r T. W!) PIp 5 2%efҿ  7 F- 5&  F% d -  ) w")Z@`ȋȕ  >/ N w 6  w-tsle6 `va v!W  W  & *a ȾAwpa DBaW 7 > r   C  r  fe) `- K& $()ֺ G e  Ce 00r\B@557i:)*w5w &0Paa TL% P4f 4)B`Z Ҕ Ca  @  a ܼwؼ /мa a KePa a K% V p+& w 5v5>!fa 0% ɕQ& N ;̹ - 7j#T .:5 `)4& Νf aP   N :re  *$f HWYWN WANWQ>  r* Pa a J% e--P{{ h/ )7 к7 ʺ%wj * d ) V ,f Gfa   ݨ=4a "a/4& Νt& & & &  D& V.e"& < B b)eaD4 zXe e w )f D# 4f f5 ,eaa "I  Vp7` e%w )  " 0-@, 6ea6a H%%"P@,`6tfZz0 J*JP``,T"",,TNoMAINPASTE line deleted lineMAIN line moved copied time line resequenced=> r (`Tz  ,4<4< ,4:HNV &, linesNoneUpperLowergeneralexactwpscase insensitivediacriticical insensitive begin end unboundedUnknownVT52VT100Hardcopy, scroll, noscroll, eightbit, noeightbit, edit, noeditV3.10-00 COPYRIGHT DIGITAL EQUIPMENT CORPORATION 1980 & 1984 COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1980 & 1984nonumbersnoverifynotruncatenokeypadnowrapChangeLinenoquietnotabtab size ; tab level norepeatnofnfnosummarysummarynodelimiter delimiter nowps wps Help file name: autorepeatnoautorepeatInput File: Output File: **Readonly**t6"8Rp,F ":h $.$ &,GOLDW.BL.EL.L.C.UNDC.UNDW.UNDL.EX.BR.ER.CUTSR.PASTE.CUTSR=DELETE PASTE. APPENDSR.?'Search for: '."".ADV.BACK.-V.+V.+C.-C.SEL.D+NL.DEW.D+C.(^M-C).D+EL.DBL.DBW.PAGETOP.(16L).D-C.TAB.TD.TI.TC.^M.^L.EXT ?'Command: '.REF.(CUTSR=DELETE PASTEKS"").RESET.ASC.CHGCSR.HELP.SHR.SHL.FILLSR.DEFK.TADJSR.(-16L).(+16L).(27ASC).,-./0~128345\6F7z89:;<=>?@A6 !>"#8$4%0&@'(X)H*F+f001&2 345 ` f,~589FHfIKN,F6f@8nv ,-./80~1234z56F789:;<@A6 !>"#@$4%0&'(f) *F+&,H-.8/\0045X ` f,~589:XFHfIKN, substitution[?3l[?3hf7 2  f7  & 4 tׯp; hׯb!=    X(, 8\ .Z%( X ^ |X Zp ~ Y! w? N@RL`  ҃ "-(& N$fe%& @e W# P% pd ~ 0A  wt? eMğuEŸE  ߈   lP z. % ۇ^Z &(P SD 7(P8 F  "  ( 5.    & Ο  E 7(PeMCe B f "%    w*>- -~  " |n7 f\W 04W 91T0:. 4>H:. p=( 0 6 6  a:. < ee7W %W AW Z W W W &W #7 W %> V0p FWW _kW "W '`5_5`'7 h j f- T ?D-. 2700rdBA5555120*> 7  ҁ   x`& >> fe \V7 d ` W ! T27 ef W  jp v -!F E7* $7f 6 f h=p e f -teD.& f ; e@ w>;  ;w lP  v7 hnf r7h% ~W W _Z[ H7&% i-$x:. ew0k&e V%lZ N g 8% ^7= bwr MIz % ,dp1 -`TZR wLuF*w vw  wu:.$ h% `:. 9ׯ.1'606 6 WpeBNa a 8 a:. P8e   w& p7P% D0>27,%&2!,@ 1 w- 5j sg5 vs7 & % Mp-A `1  7    7 dl!1 ҄ 7  1q7 r o(o5< r7 2w   5$-zz rn  W W W /W "W 'CC w*p w2 $-t!-l;~B Zr5NnHwHR & H% 81 vt<pP| :.fe 6 :.& e 6e]WQ-@ = :A-0 - *1f-~|pe, W  cb`pe W  N Jw:s.w pe-4W0W -W *W W $W wj @pe- W W W W u ߊ@p-| W W hfpe W cwLJpeW W 8T 4P& z `fe 4`fe 41e e\ ׯ- -O   wpW r:~   -bV)hN%F!>.6,.& t *7  ew3  lU zn8- 40-  T6Q`5ɵ CE CtE &&N`& *4e  #RO@NM6QH KZY ]\UT1S5W4VX -q,/k3O*O29'('`|.`(`'1`&*`j/$ "y#%$` _[a( ' orlt3m1;-9+?,.)2# 2#! nJL^I`he4'($%&./* /if576@A?" . 1" 0`  , b  "  31"- +,)2F#*+d0 )` ,`&*)0! +` -` 9` 8` ;` :` 4` 3`  ,4'($%&.#/*#c 6L 5g 7>`&;`:>78&N=`E=<GsJ:8P  D6`;0`%87")9) % $ 'J & J?32{ "!z~uA}:vxw #" (%+% <"+`h1;90c*A4CbHu rNLQ#U27;%JS'4@^l6&pvDtn\~J&FpdXFxjZR>NV^<  p^.DVvf>(b.aCHANGEBCOPYcDEFINEaDELETEBEXITAFIND;FORAHELPsINCLUDEaINSERT1KEYaKEYPADNOKEYPADAMOVEQPRINTDQUITqREPLACERESEQUENCE2SETBSHOWSUBSTITUTEATYPERWRITEaVERIFY#*TOLTHRU-,ANEXT;AND+=.jBUFFER9ENDYBEGINILAST9ALL:IRESTkBEFOREYWHOLE/QQUERYQBRIEFSEQUENCEDUPLICATEcNOTYPEBSAVEBSTAYrNUMBERSNONUMBERSBCASEREXACTbSEARCHqGENERALrBOUNDEDUNBOUNDEDTERMINALQUPPERQLOWERANONEDVT52UVT100DHCPYaCURSORAGOLDsCONTROL"ASNOVERIFYTRUNCATENOTRUNCATErVERSIONAWRAPAWORDcNOWRAPbSCREENQLINESAMODEQMACRObENTITYCPAGESENTENCEPARAGRAPHRCLEARORIGINALQQUIETsNOQUIETaSELECT2TABSNOTABCFILLaADJUSTcDELETEcREPEATNOREPEAT3FNFUNOFNF3WPSrSUMMARYNOSUMMARYaPROMPTDLINEfKEYPADNOKEYPADHCCHANGEfINSERTwINSERTNUQUERYCTEXT3ENDBPAGEBWORDDELIMI00rlB@557i:)*TERNODELIMITERPARAGRAPH2WPSTNOWPSAUTOREPEATNOAUTOREPEATwCOMMANDRFILESDIACRITICALINSENSITIVE"CI"DIFUNCTIONfSCROLLNOSCROLLEIGHTBITNOEIGHTBITDEDITfNOEDIT+)(?FV@<W61vd}:JAcS^ -+5. $wsh|UPG`[|v83Ml` -"Z!`Mlfq0E=w@  {  3"7 T Nk ׯx!  5Xf 7 H 5 B [ w--zfP2 w!55v7 T j V7 -*w: lrv$  -j& [%)) [[ W Οz W] Wj7 h  ^f `[ Z71(() N` N" ׭^ ׭ Z׭z7e(7`23& Ν() I7e(5 ^  5  hW! & `N t%  lxv$  5 F@ @`%5 \ () T  ! T - y( - y S %+5 wR x< ) ((!" (7 ! 5 6- .I7 ~v ]% J -x) ^s%7 .-)   ~ (p2 7 f7`7]X`) >eB>e)8 27 &e) 7 w< a b% $ 5  B  B ef Pe  w;) a " r Q (5tv 0f 5 eW 5 N& % G%WN  a % .W W ,W ܃5nI& N& & eN  a % %% P (5%%w %wr: j Ua  h   &a Z { v 5 8  9 : ;> @ wbv& e wB 8&  %v X vR%-  b   lvvv W% 4   lvvv W% R-  f -   5 --`)+ׯV  #   --,)    b  \@ > ,i  z w5  a ~ 9 Wp B`B0 c  ? O [ ~e  ܢv#e,    f5+-@B \L-46 ,00 :V% \e00  1 D  f1~#&7-6- 6e50f33ȋ `&  U O%f @ f `W"W"W" ^ O  f N5 6 V%W ^ L e@ f L pO  w4)!P W  1& +W W W a --D >(W  " )Rf  I a  %f-/5D+-B-<#v S N N; lK Nr \K7 67 4w޷ޖ% - f D f  Я   7 |e)v7 h00rtBA5555127 j7 ߇--)5v ,S% P\ 0  \& Vv R nM >ew2 ` (` " `  D (    %!   !  fN %  wR1mP r $ 3-& * "۷`Nf 2f 2 f) 8H "I w B` w )7  -     w(  77 -    Ѳ7 -ў     ,5-# z 5zz ,I% Nc { I%> >< >  & vL5tzz H7 ew'Є 7& ?W 0З) v5  =  7 ?W  nз`j  @ w~' > H     lh} :bW AIW ^Ff|A W B>W W;<}B @`e{ C -D``7    &6  C!5 ~E`A w& x =G-nnC fb-^^ T _ 8 Z u  _|Ў Q jJV twZ Y%T.Ї->-Pl}t} F A7 7 Җ%|} F7 і%w%. |zxv Re5dwT  " l} N`3,$ R*N,J+* 5 pf s w$ *@a %w7 jfb^7 [ w e  ds  Ae, $eΖVδ f,v(l$ ! 8 |e - |$e  "N n` * ~,  \ r Ta pwp y P   o j ge-  - 7 5xIE-RͲ) wpf z 1 jaa @]%mF 7r " q Q ! 7rj7hzb  7X` R] -"- _  )  7 |- 700r|B@557i:)* ne)h5~@&  %9 e, "n.̌ >Ne7 R7 T ( ,  J8  , H ,w  7 ̀ ew!N11& & ( We a !   aea   @     pe# 21 | VC~e   o e ew  7 "  o {7 Be .O% h e   Y6 T  ʼ Te& Ο % m07,̷ ( T l6 p r SW  ,   $&  - -   Xc w  \5 p zn( Q(z)v& & |na&  e wh  5  n(.e "h& & .n a&  e% J5 (HewW A1W ,W N&  i eh)ǖ%W  -Ǭ(  Ο xW (r N $  H -RǬ((D( ,5 %   5 ((P |PF F@ H N le %w- W @m     &f %     !z7 - Ɏ & ?7 7 xG% J> D. < \ׯ"! , h3 ׯ ! ^ .T-NPa a X% V t87 Z ,Y 6 F j TF 77 7 >e & aa / 0-@, 6ea6a 4U%%wR(&  <& W!)H` F%  d g w$ ׯ e7  e7 !} &    57     : h  %) 2w  4~1ؿ   5 ` !b  n ew-Bl( 6- lz~7  -H@ 7xp - l~  7 h6 !   v -B 1     +7 ( z !  !!!   v  b bew05 - Bw, C!!=A r  l~ N0, J 7N,P * PP7hJ+  7%W!7 Jeaa 5 aea %     ,a"a .a &% a *a  l~-RM   w,a"a % v 00rBA555512r  ,a"a % q Լ*a ZhW!)^wB ^-a 2H  T  0 `-|*a z0e, "  ½ҽ%& d%D R O (   V ށ E ,7 8 5(e) d! pw4 "  b (  M w H7 `    _e w 82 !  > 4 Vw(e)  ) к 8D T ;  C  C - mV %L)& Οe)  Οe)  7` |?) Fe wf 5   x ^e  e,w v  e) ) & e v    wX ҝ    v ҟ0 ؁ v    x w.:4     Jҁ B N`& N&  X7           D  ׁ D ew - B-0qׯb -Z)  & Ο&  5 ߘ  nׁ B ׯ 6-)2 T - J / Lׯ -ڷ) 8 D & Ο<& H5  $  ց B   be f     l ׯT  ց -F)ׯ>   ~  z  @w ) -)! @     ^&`%)f ZRwpJ`N %w  r ~ @ۖ%  B  r ~ ۖ%      # -005 xׯ 5ׯ  Z b X f)7 * -޵ڵ& Οҵf H%@`w X% w%f)7 8w & N* %m"7% DB  94 zD 70 0e 0 ew      l~ E  Cxʐ  f .5-1 G 5a F %W ) Rf f a V 7  GOLDJK pqrstuvwxyQRABCDnSmlPM[>   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy"  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY=>\<[?6l)0\>DD &&&FFFFbb P2 w@$ - j7 )e- @ 55 r aa rzl -x\ -^  N7 f 7 6 2 5 ) a d7T P B D <-& @e -  -- (n6 - -<& @e  6 5 wv7 Lwv--b8-Z5 -$a b?--.a p>..F%-$a ,?6  *$a,.a ,>52 . . )(a vcM ) f& Nf6f-5N EN N @j) @& fN) @& @ & Be xe 5 l5e- a-] f N NE&6f(C f N C|~t Nl f & ^e 5 8586&  .#5!  &  e &  e  5 n    lT^ Jw.    ~ r     J  @  5 %5.     6  5 5c5 _ \   v      ! -  7x&  de  T 55N <  r  5 5w5 w  66 6 7  5d55 Rua 65 4u C5-5 u& a R 5   t&  D e %5    t  5v5Q - 4 - 7  r  \t  e& Ο `6 2t &t %    5w55   5w:66 5 7 7 7 7 7 7 7 x  |  fse- 85 e& Ο _ , Z(a ]7p bf%55wL 6    -754 "   r ne& Οd _6 6` -P%     v @!,5)   J e& Ο ^6mh% Z  -<& 7e l -- Xe < - 7Y -.a 60a -& 7e w  . .-. 0-0 2 0a -& F7e @m7 8 < - \6%%5S Z%R  w  F    w w @m7  5X5"7 7  C  C m7 z5/  mh7 Z ^NFF6  p C  C  J >    6B!7 5   5 555 55    bo  N 67 j w6U 650 8 & RVL^ T4 & 8VN^ T & V 57  H   n 7 ;߄  6  & U-P^R^ 8T5f7 j߈ 7  P  :n * ߈߁ ewxx555D7 -& $   m ߷      m- ޷޷7 |7 ޮ7 rxPނގ tT j޷f |\ pMX e)e2w 2 \ m r     X7$\-- }  5#݀  N -& f 2 & SZ^ 4R XXw r-~00rBA555512 >X  N  4|&& & p e(& & :S-J\^^^ Q7  Nwݎ&&   e y w5/ -)5&  H& R`^ (| & Rd^ &Q JW7 r-r$&  ZL܎ & PRf^ P7 6ܷ f4 rw,ܖ% F&  > 87 &7*e %w/ j f&  & Q Se m rۀ _-v[5` & ێ x& tQh^ P#7 Tہ6T wL>ێ & BQj^ OR&  J e>ۦ&  0*7$   e @{5#5 & Pl^ XO 6& Pp^ 6O ;  r (& & zP-r^t^ N7 RV2P wHl&  ^% N&  F%@ -6 && & "e e $ -R) 8d%7 ؇wl- 7 f& O-v^-x^ N 7 Lٖ%B -r  JO|^ Me f& ,O Q% B  v9-*# ^ 5^^ vM% g ^ \M%   , & P5^^ M7 ,ef-/5:+-8-2#^ L N G; bD Fr RD7 ,7 *w׷ז%--P^^ L F7 7 ז%^ bL7 pז%w+5wn<-& n,e -zע-- Y%)a Pw6   l^ f0 @  Aw 6  *@    Aw  w ֿw   @  Aw ֣6 6   wv 6 8mL 6 :e  wb6  րm   ev6 " (C m6    Cm6v6   @6 -W B  Q >շ XշJ@2  @ 26 `ȵ RD @-< 8-4 .Ճ 20B)`ˋ$  F 2     Է ԁ  І5 D    5 w5w %e t Jf-  [  - [ -z bӀ   b  w'  5k i B`ʵ,  l^ hbEv LEʵf JN  @b  6b AC`v   6   C` v     6  ˕v  5A -^^ jG - ҷ Ӗ%wb&e)-f-e) &%N, e  VP 6Pe T - %w&  \w B& H O A5 W I1 %w. m  B @  @  6Ҁ6 m*e7 5& >6 % E 0 - -v& pDbe\!   ``D  ! !~, ) F -d *  =!   _%v6 j -b 6 [-zФ & -xV05 `fB VF %5 P-J.D J?8?2ѷ . -*  $& << `  ! !~& =6 % a 6 Z- ) -#-В-Ͼ 5 f zE %& ; +5-TZ6& DE 8G% -< V; " E * 5- & D% F @ B  11 e IM60MIM MIMJ=>\<[?6l)0\87 8607 02,7 ,*$7 $E$ UUwh U  n'7¥,¥ w:  L7¥  UwD I%w D jI%w¥ ¥  4¥/  f¥/,¥ )¥ &¥ #¥=  ¥,¥( ¥) ¥[ ¥] ¥< ¥>  D H% D &¥  ¥ ¥/  p¥-¥N `¥O T¥J¥C D¥O(@¥R 2¥EK¥O[D 8H%E  EBU8E  EUU EE r E U E L UEE & UUEE¥ ¥ ¥/¥ ¥=¥: ¥,  ¤  B  EDT>Invalid option switchSyntax error on command lineInvalid file nameNo input file namedJOURNALOMMANDREATEECOVEROw;e 7 7 7 7 7 7 Z'& twn(5 wF(r'= f? w@ e 552(s   wo% !'.׭'׭''h7 w :e lgb' b X{Ps'& & & & & & & & & Ε f7 6 6 6 6 < - 97 7 7 7 f =v 77 B7 ::67 7 4H7 F7 D@7 >7 <87 < P7 XTPcc7 7 7 27 7 $7 7 (7 7 7 |7 z7 7 7 7 7 7 (7 7 27 07 r7 7 n 0 0-e j x7 D|-RP O 6 a6 aa M5 U5>  = e wNPa X  U|NF3 7Nf3 7N3 7N3 7N3 7N3 x7N4 h7**a0+ r *NZ >7%V nRe(w0**a2+ r 놎*N 7%**a(+ \r Ն*N 6%**a*+ 0r N 6%**a,+ r N |6%**a.+ q Nj P6%H& & LN pa (,N+6a ae V :Qe,#5" (hW  =Unfe,@ ef& & dKe  P :7 -x N U dP%5` - VP  5& & Je N ^P 6 5& & Je  0P 6 =$--T (_ f& & PJe l O V6  Bp f5 *o6 6 N=,$ a& I5 la >T 5 e=7 & & I5 la S 5 aa fI na S h5 e7 7 :e--PNN S pN7 d7 ^ߖ%w2 aa n5%M 1 1 w>aa n5e31 1 w 5a a >n5  3 3 ؁ e % * C*   ?[EOB] .!?  PASTEMAIN)B.JOU;[?3l[?3h`00sBA555512|,?a!Y xY &[q$Y A΍gSYSYSYSYTISYOVQ΍Z9:Q00sB@557i:)*00sBA555512~!>!~!>!~!>!~!>!~!>!  <v!\!) p#$9 j p# % #"% p#% p#% p#% #% # % #.% p#(%7A@@RTUC00sB@557i:)* LB:[1,2].HLPEDTHELPEDTHELPEDTSYS LB:[1,2].EDTEDTINI.EDTL19::܂, &[q &[q`::: :::T< :::h< <:;:<(:;:!<: ;:#<@:2;:%<:D;:'< :V;:)<|:h;:+<`:z;:-<:::/?;:;/@;;.<;|;@<;<@;;;<::@a@x@rp<Backup past top of buffer 1Consistency check failed, please check your file0!Error opening terminal for input@/For help on any other keypad key, press the keyPInput file could not be opened`Invalid option for that commandp'Keys cannot be defined in Nokeypad mode=No more than 65535 lines can be processed in a single commandOutput file could not be closedPrint file could not be closedSelect range is already active+Unexpected characters after end of commandWrite file could not be createdIE.PRI - Privilege violation-IE.WAT - Attribute control list format error)IE.RER - File processor device read error%IE.2DV - Rename - 2 different devicesIE.BVR - Bad version numberIE.BHD - Bad file headerIE.TMO - Timeout on requestIE.ILU - Invalid LUN< ':' required)Cannot set terminal type from change mode"!Could not align tabs with cursor2!Error opening terminal for outputBHelp file could not be closedRInput file does not existb!Invalid parameter for SET or SHOWr'Line exceeded 255 characters, truncatedNo output file written!Output file could not be createdPrint file could not be created+Sequence increment must be less than 65536Unrecognized commandIE.DAO - Data overrunIE.WAC - Accessed for write%IE.CKS - File header checksum failure+IE.RAT - Illegal record attributes bits set+IE.RCN - Illegal record number - too large%IE.ISQ - Illegal sequential operationIE.EOT - End of tape detected'IE.NNC - Not ANSI 'D' format byte count<Aborted by CTRL/C/Change mode can be entered only from a terminal$CTRL/C ignored4Error reading from input fileDHelp file could not be openedU3Input file does not have standard text file formatdInvalid stringtMACRO or KEY requiredNo select range activeParenthesis mismatchQuoted string required'Sequence number must be less than 65536Unrecognized command optionIE.EOV - End of volume detected'IE.WLK - Write attempted to locked unit'IE.LCK - Locked from read/write accessIE.HFU - File header fullIE.BTP - Bad record type'IE.RAC - Illegal record access bits set'IE.FHE - Fatal harware error on device#IE.NFI - File ID was not specified)IE.EXP - File expiration date not reachedIE.BTF - Bad tape formatIE.IUI - Invalid UICIE.IDU - Invalid device or unit<Advance past bottom of bufferCommand buffer exhausted&'Destination for MOVE or COPY not found6Error reading from terminalF)Help File Index could not be initializedVInsufficient memoryfInvalid subcommandv=Max input line of 2814749767 exceeded, file input terminated No such lineParsing stack overflow'Range for RESEQUENCE must be contiguous)String delimiter must be non-alphanumericWork file failed to closeIE.IFU - Index file fullIE.NSF - No such file1IE.NBK - Fi00sB@557i:)*le exceeds space allocated, no blocks3IE.ILL - Illegal operation on file descriptor block-IE.DUP - ENTER - duplicate entry in directory-IE.STK - Not enough stack space (FCS or FCP)IE.DSQ - Disk quota exceeded< 'AS' required9Command buffer exhausted during XLATE command processing(Editor aborted8Error writing to output fileH!Include file could not be closedX/Internal software error - please submit an SPRhInvalid value in SET commandxKMax line number exceeded; lines no longer ascending; resequence recommended-Now enter the definition terminated by ENTER+Please answer Y(es), N(o), Q(uit), or A(ll)MRange specified by /SEQUENCE would cause duplicate or non-sequential numbersString was not foundWork file failed to open!IE.NOD - Caller's nodes exhaustedIE.DFU - Device full3IE.NBF - OPEN - no buffer space available for fileIE.RBG - Illegal record sizeIE.BDV - Bad device nameIE.BBE - Bad block on device#IE.NDR - No dynamic space available< +Attempt to CUT or APPEND to current buffer!Command file could not be closed*1Entity must be WORD, SENTENCE, PARAGRAPH or PAGE:File attributes errorJ!Include file could not be openedZInvalid buffer namejI/O error on work filez-Max number of lines for this buffer exceededNumeric value illegalPass bad status to caller+Record too big, truncated to 255 charactersThat key is not definableWork file overflow!IE.LUN - No file accessed on LUN%IE.CLO - File was not properly closedIE.FOP - File already openIE.BNM - Bad file nameIE.ULK - Unlock failureIE.WCK - Write check failure< Attempt to PASTE current buffer!Command file could not be opened,Error in command option< File name:LInclude file does not exist\Invalid character codel!Journal file could not be closed| No definitionNumeric value requiredPress return to continue Search string cannot be null%To exit from HELP, press the spacebarWorkingIE.DNR - Device not readyIE.VER - Parity error on device#IE.SNC - File ID, file number check'IE.SQC - File ID, sequence number check%IE.RNM - Can't rename old file systemIE.BDI - Bad directory syntaxIE.ALC - Allocation failure<Attempt to re-enter EDTCommand file does not exist.Error in range specification>File specification requiredNInput file could not be closed^Invalid entityn!Journal file could not be opened~No help available for that key/ORIGINAL line numbers no longer an EDT feature!Press the key you wish to defineSelect complete lines only5To return to the keypad diagram, press the return keyWrite file could not be closedIE.IFC - Invalid function code!IE.RSU - Sharable resou00sBA555512rce in use+IE.WER - File processor device write error/IE.FEX - Rename - new file name already in useIE.BDR - Bad directory fileIE.OFL - Device off line+IE.BCC - Block check, CRC, or framing errorfꗯ {7 EHE@ @<` \ w7~7 x7 rtE  lH J{z 4Z} 6 }  } | ,j R y r| P   R, A D > j g  c ` ]Հ W  T i&& v| A > R, >A 7 &e& d&  ՀZ    $   <&   55@5:7 w> W yX7 X @  l I y$ R, j@ Nr{N` Rw q7 J, > wd wcX Y7 w5  b^, @% wj NHHB q:e) a =B`   Y7 rwz5j  ^, ?%wh   p -r& 7 es kf ^, R? YN`a = a& r>e w .q 7  ^,T > p X_f 0 #  4p  Of  n  p  :7 T7f 7F / ^, p>Nf& W  lJId X7  ^, 0> peMe PBf b v eJ, =e4 , .a = 5 l J, B<% a = |o e }e BdB,  v`ȋȕ   R, L=N Nf rh Jd VeHff f% BV  TR, WD @  lPI uA5 @l& f-^a-^\ Y5$5 6n7 -^H5 5 n7  J, h% 2 (-^)W D tje `B&f ‰e    D w9a 9xa& :e zI lU  aaf nW  e0 Q % & $U& &:e s hQ ew 9  e% GE 5= O5 k :2e $ fav.v |e r p`  B 5 >l ` w08  f %@ l|I k% 2k %B %  k "P@,`6tfZz0 J*JP``,T"",,TNo ;4J ;L ;RL ;L ;hM ;M ;dP ;&Q ;rR ;R ;N ;,O ;nO ;4J ;K ;dL ;L ;N ; P ;R x;R p;4Jw6 f b% w&fV& f7e fV& L7e 2fV& 27e 5& & Ke 0"7 N pQ -7 4 w 7 w 7 "B@ 7  2 @$ e%a' Nq%-vV `dd"ޖ%T h >n  6cpn n7Zr0 Fxe ,50 "e& fJ  :P&&& z500sB@557i:)*  P-( xp% fz&& _% d#V O wN gxa n4 "R, 5  e E  5 & d    0 c g aV V O |Max& 4 e e ( 5 RwD3 & aa n%  \3eV NA ڷ kw fٷ Kwٷnl؀ 3a a ne!-<8l%*l%&!ew~25nw QPaa n% Pہf 3r&B` Ҕ Ca  @  a HwD NQ<a a mePa a `m% V M w 5v5!fa hR% ɕQ& N \8 - 7#T [5" K0& Νf aP ;  N `\e  fL$f 2jWYWN WAWQ  L Pa a \l% efl@ ȋȕ f h / FR, 16 (   F -|^  ^, 1 cN v%efW  PK  W f  w/ s;`(f `Ֆ%w5 -b  FI-*& e0a ~/ Ν0a f/ a >/e&* x]% -  lV i 00N`& N J5 N r&l%> 2_ %55 l%l%! 0p  Me  ZR, /J <  ew".J (2a / fR, / & hI D5e <0׎ La .Էa %a - 2`w @af 8/ a ~R, /n ` eG a $xba -t  ZCN L 6-^2 / &  b d f50 N   vV PHew5 `5 N >`\a D$ӷa &`5 eZa , ^ \ Gx^a ,xna t,e x&a X,5 6B&a`a pZ %5" d-H^  lV FGe&g _ & ( * >5B gjaV VV TG.a& T,e V (G.aW de E.aja& ,e  e,eJw* aa f% 2 *f$e b,Ѱ <^f 0[a a ^f ^5 Ye  %5 XX >cӀ < ] kf,р77 ] mw ]MAINPASTE line deleted line moved copied timew606 $6 6 ,6 (  ~R, 8F d eU\C6  D    D=> Q 6 5 5 k 6 ea 6ar >d  8Qe / Wp aa Sm% e a 5ar c  Pewd Wq vaa 8Sm% e D6  62.2a,a J5wx"a 46 7 L w^-^50wR J f5aXSݎ  a 4TCe a b "a$a t3%W!< ar lb 7  Wq w a a Qm"% % wmW 6 0.46 ((,e,,a6a BI5  ( * , ߠ6`ew5<a& H5@a VS  vNew5$ae& 3e ٰ-  .NU@5J00sBA555512 n<a& jH 65-0z t ,xF& T - M5 h5 J(aV ^ L% @a `R eN6a JR e e05 6 V H]a 7feew~1`ɋɕ &&  R, 3 eewf1\@  # lV~7 ~w xB   lW lk7 hd^X~zv5xW,w0@   l,W k*7 r7 f47 .JF 7 @7 W&S7 P-az }7 t--5 V P 6Kؖ%y--5z V P Jؖ%7 ^W,wVRB Zw,R w ->-:z0w,4@   J '& u !w ~W,Xw-7 -7 cv @ '` ΐ a ja pj  :& F0wV JwZ)7 T&W,ww7 z*7 $  7 7 wECW!w   l>W h 0&0F0 f0000    Vf` -eeJf&f` -%}v E  6B  W W d H   6! ^@ '`B af haf h w` 9&f .Ֆ%wt p*wj f$ff %7 Bd H fG1& Ν e ew>,6 6 >5hv aa A5 5@a VL {& & A5 a ,Lepe5l*~ z& & A5 a Ke N7 . D'' Ng e 7 (7 "6v aa A $a' f $ю$f ,%V Fee ew* * d NF V ,f dfa X,  0a >,Za0& Ν& & & & D1 D& JeZ& 2 B Eea1 +xe e lineMAIN=> r (`Tz  ,4<4< ,4:HNV &,w6 6 & 6 6  > Q ` vaa ,L5 <R, 7,  e 6 y Iaa K5e6 L & & K5H"a V eK-r&ގ# fe 4w q& & BK Ha U e5pLJa U  Pe ew4 r R, 6 w0 q5 5 J@ 5 $T  T ^, R, (6 he n *h S F. ,ޗ aa IeLew3 > `O @`ȋȕ 6 R, b5 ewn<6 6 6a a >I w L: f % dI !-^ C \V <* BN >N hR և5 *o ^, 4 hf H a& He a R a& bHe a R Twb R,f 3 eea R7&eef5 a H2a 62e @`ȋȕ D R, p3N eq d  ێ e `  M R, (3 ee P 8exa 1 z -^     ^,0 2 daee t R, 2 d2*^V dV L Jeew0$ R, P200sB@557i:)* er  7 rځ  15`-5*5'-^ 5 jF5& 5  &^, 1 %  Hl d xK x a $0  apV  Ie ^, ^1 Bce e&&&& \ew/e 7 6  6 v`v V-R -D@m6 >5$:552fv. ~e %f l% cئ| E.   Zmܖ%5& N 5"-6r J$ W!r& elp 5Z M%efF  7 . a-^ 5&  a% d rI  r& zԇw-)@`ȋȕ & R, R/N w 6  w-^se6 va v!W  W  & Fa c e  _e w,5vw KPaa h% PՁf -r&B` Ҕ Ca  @  a PwL VKDa a gePa a hg% V $G w 5v5!fa pL% ɕQ& N V@ - 7#T U5* E0& Νf aP 5  N hVe  nF$f :dWYWN WAWQ  &F Pa a df% e line resequenced substitutionw6 @   lT pqw(  v= Ne%& $ :R FQ  nP dNew"A @' &f{5  5>H& I 30&a ~|% #@ 7 e C  NM%m7  M 4L C |& w  N: LtY`V p"S O%$Sb f,S bO%.SS 4S DO%6Sy X>S &O%@S-@FS O (  LSRS[ M L w VS N%XS ^S=dS N MnS N M |L w fzS jN%|S NS PN%Sz5S qSw@   lZT m 0&0F0 f0000 B7  C " :K%m7  K J C A A' B7  C w J%m7 H pK I C 5 S1S .5 SwSwF701 f% mS M H4 -6SS L J%S 7  C  0J%m7  J I C  J.b`S Lf L vJS pL< =DS f& HL >Je w20 D W /U  `W"#fa tx%  `ehTf`&  u5e ee w/ * d 4K V ,f hfa >1  ݮ0a $1Za0& Νz& & & & *6 D& OeZ& 7 B Jea1 0^e e linesNoneUpperLowergeneralexactwpscase insensitivediacriticical insensitive begin 00sBA555512 end unboundedUnknownVT52VT100Hardcopy, scroll, noscroll, eightbit, noeightbit, edit, noeditV3.10-00 COPYRIGHT DIGITAL EQUIPMENT CORPORATION 1980 & 1984 COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1980 & 1984nonumbersnoverifynotruncatenokeypadnowrapChangeLinenoquietnotabtab size ; tab level norepeatnofnfnosummarysummarynodelimiter delimiter nowps wps Help file name: autorepeatnoautorepeatInput File: Output File: **Readonly**t6"8Rp,F ":h $.$ &,GOLDW.BL.EL.L.C.UNDC.UNDW.UNDL.EX.BR.ER.CUTSR.PASTE.CUTSR=DELETE PASTE. APPENDSR.?'Search for: '."".ADV.BACK.-V.+V.+C.-C.SEL.D+NL.DEW.D+C.(^M-C).D+EL.DBL.DBW.PAGETOP.(16L).D-C.TAB.TD.TI.TC.^M.^L.EXT ?'Command: '.REF.(CUTSR=DELETE PASTEKS"").RESET.ASC.CHGCSR.HELP.SHR.SHL.FILLSR.DEFK.TADJSR.(-16L).(+16L).(27ASC).,-./0~128345\6F7z89:;<=>?@A6 !>"#8$4%0&@'(X)H*F+f001&2 345 ` f,~589FHfIKN,F6f@8nv ,-./80~1234z56F789:;<@A6 !>"#@$4%0&'(f) *F+&,H-.8/\0045X ` f,~589:XFHfIKN,f7 \  f7 & 4 4ׯ0; (ׯ"!= ~  D  Xl% 8\ .Z%^l% X ^ |X Z0  Y! w? @ `  ҃ -& N$fe%& @e W# P% p$ ~ 0A  wt? peMjğfuEŸZE R  H D  lP z* % ۇ^ &(P S 7(P F    ( 5.   & Ο  E 7(PeMCe B f "%    w*>df`b-F ->  "@ <.7 &W 04W 91x* 4>* p= 0 6 6  a* < ee7W %W AW Z W W W &W #7 W %z Vfp FVWW _kW "W '`5P_5 '7 ( * &-  ?- r7> R7 P ҁ   8`& >> &e 7 d ` W ! Tr7p lef VFW  *p 6 -! E7 7f 6f h=p e f -te+& f ; e@ w>;  ;w lP Z v7 (B.f r7(% ~W W _[ H7% i-x*ew0k&e V%lZ N g 8% ^7= bxhwr^ph MI: % ,$p1 -  w uw vw  wu*l h% * 9ׯ.1x'606 6 WpeNa a 8 a* P8e   w& p7% 07%!@1 w-5j sg5 vs7 & % Mp-xlAp `1  7    7 d,!1 ҄ 7  1q7ݷ r oo5 r7 wH  5$-:: 2.  W W W /W "W 'CC wdz܁p w2bVP $-4!-,;>B r5nwH & H% 00sB@557i:)*1 vt<pP| *fe 6 *& e 6e]WQ-@ = ~:rpA-h0 b- ^*RP1&->   -b)h%!., t *7  ew3  lU zn8- 40-  T6Q`5pɵ rCE CtE &P&N`& *4e  #RO@NM6QH KZY ]\UT1S5W4VX -q,/k3O*O29'('`|.`(`'1`&*`j/$ "y#%$` _[a( ' orlt3m1;-9+?,.)2# 2#! nJL^I`he4'($%&./* /if576@A?" . 1" 0`  , b  "  31"- +,)2F#*+d0 )` ,`&*)0! +` -` 9` 8` ;` :` 4` 3`  ,4'($%&.#/*#c 6L 5g 7>`&;`:>78&N=`E=<GsJ:8P  D6`;0`%87")9) % $ 'J & J?32{ "!z~uA}:vxw #" (%+% <"+`h1;90c*A4CbHu rNLQ#U27;%JS'4@^l6&pvDtn\~J&FpdXFxjZR>NV^<  p^.DVvf>(b.aCHANGEBCOPYcDEFINEaDELETEBEXITAFIND;FORAHELPsINCLUDEaINSERT1KEYaKEYPADNOKEYPADAMOVEQPRINTDQUITqREPLACERESEQUENCE2SETBSHOWSUBSTITUTEATYPERWRITEaVERIFY#*TOLTHRU-,ANEXT;AND+=.jBUFFER9ENDYBEGINILAST9ALL:IRESTkBEFOREYWHOLE/QQUERYQBRIEFSEQUENCEDUPLICATEcNOTYPEBSAVEBSTAYrNUMBERSNONUMBERSBCASEREXACTbSEARCHqGENERALrBOUNDEDUNBOUNDEDTERMINALQUPPERQLOWERANONEDVT52UVT100DHCPYaCURSORAGOLDsCONTROL"ASNOVERIFYTRUNCATENOTRUNCATErVERSIONAWRAPAWORDcNOWRAPbSCREENQLINESAMODEQMACRObENTITYCPAGESENTENCEPARAGRAPHRCLEARORIGINALQQUIETsNOQUIETaSELECT2TABSNOTABCFILLaADJUSTcDELETEcREPEATNOREPEAT3FNFUNOFNF3WPSrSUMMARYNOSUMMARYaPROMPTDLINEfKEYPADNOKEYPADHCCHANGEfINSERTwINSERTNUQUERYCTEXT3ENDBPAGEBWORDDELIMITERNODELIMITERPARAGRAPH2WPSTNOWPSAUTOREPEATNOAUTOREPEATwCOMMANDRFILESDIACRITICALINSENSITIVE"CI"DIFUNCTIONfSCROLLNOSCROLLEIGHTBITNOEIGHTBITDEDITfNOEDIT+)(?FV@<W61vd}:JAcS^ -+5. $wsh|UPG`[|v83Ml` -"Z!`Mlfq0E=3w@e Fw@e  # < . ! 6 j ` l|*&j ` ` R|wb@e   wD@## ¥ ¥ ¥/0¥  ¥ (¥ %¥/"¥ D##P Je w{#f y% ~7 7 j7 j7 n7 f "ԇV7T¥=H¥,¥ m<67 64.7 .w . "7 U¥=&¥ N7 7 7 7 E UUwh U  n'7¥,¥ w:  L7¥  xUzwD I%w N D jI%w¥ ¥  4¥/  f¥/,¥ )¥ &¥ #¥=  ¥,¥( ¥) ¥[ ¥] ¥< ¥>  D H% D &¥  ¥ ¥/  p¥-¥N `¥O T¥J¥C D¥O(@¥R 2¥EK¥O[D 8H%E  EUE  EUUEE r E U 00sCA555512E L UEzE & U^UXENEH¥ ¥ ¥/¥ ¥=¥: ¥,  ¤  B  EDT>Invalid option switchSyntax error on command lineInvalid file nameNo input file namedJOURNALOMMANDREATEECOVEROw;e 7 7 7 7 \7 V7 P$& tw.%5wF$2$t=L f? wB@ [e S5l5f$3   7/%v bxtjB$.׭nb$ބ׭R$^Y}TJ$N(7 w :e ,_'["WJ$ " ;3$& & & & & & & & & Ε f7 6 6 6 6 ) 97 7 \7 P7 & =6 77 7 7 7 7 7 7 7 7 P7 cc7 7 7 7 7 7 7 7 @7 FB7 @<7 :7 7 7 7 7 \7 jl%|7 7 7 7 27 p7 . 0 )e j x7 <* O 6 a6 aa M5 U5  = e wNPa X B U@N0 7DN&0 7FNF0 7HNf0 7NN0 7^N0 x7bN0 h7**a' r *fN >7%V nRe(w0**a' r 놎*lN 7%**a' \r Ն*rN 6%**a' 0r zN~ 6%**a' r ~NT |6%**a' q N* P6%& & LN pa N'6a ae V :Qe,#ܲ5H" (hW  =TU.&e,@ ef& & dKe  P :7 -8 N U dP%5  - z 5& & Je N ^P 6 5x& & Je  0P 6 =p$-R-@T (_ f& & PJe l O V6  Bp f5l *o6 6 N=$ a& I5 la >T 5 e=7 & & I5 la S 5 aa fI na S h5 e7 7 ew:3 aa n5%M 1 1 w:aa n5e31 1 w 5a a zn5  3 3 Ձ e % * C*   ?[EOB] .!?  PASTEMAIN)B.JOU;w CdD E DdE bEbH wC D EHwr&&    dA B dB b( @ A B N  Tf f &f &ff we~fC~w  ~@w  N @Ԁ %! - mC a  v  M z  h  V  D  2   f6D~  f6D~     f  @ P ``` m  : & : 3*&j : :3 )ڝ 6 2Wއ 6 "W҇we4@ W9, : === =@wDe8@p@pp V* 7*f  we@ RV w00s C@557i:)*xtr %%geBfe A : v p (e(Nv XA A A . A ;  5|{W W f?@  A ~N e %)Nv : $Nv Nv %@ (  @ B  Ze&  0   vPe0&  v~& & & & #P&f& Ε& Ε -dz\zCפ:$P W[C W<CW>~W]~H $$C˥.˥;  P$ ɥ.  C ɥ; ~H$ ѥ; H  B~R~~ѕ. ~ѕ; ~H7 ww~@& SY&"D pAB" b B~7 7 AB" >AB.# . \:X $@eB < Rwޛ7*ԙw*e7 L 83@# R+@  7~7v7tj! R^U@ :4*7@  we" T@   ܘژ̘  Q0  %# QF# Q  wjwf we@&B# 6Q pQ B  XQ wre  wXeff& & & & f e @ P wefff& & ff& xe "@ % ХTХMȥP=  0 YYwe@ABeE D` bl lrw8e@A f B eE&s   s-  CslB ̘ e@<t% ?,e Bf@| e&& && & &&& #& Ε  N D   $& & &  &&& #& Ε & & & & &&& #& Ε Η& & & & #& #& Ε ݘݏ>fL<*<*@& & & & f<*& #& Ε & & & &&& #& Ε  -7  we#&Ý #B & & & & & #& Ε  `ʝ  j/s Psw\e 7 7 7 7 7 7 M & . w~Mw-CDwv7 6M f = 5R 2 Cw:5 P Laa N5!na e (= aa e5 = n a Z%y=g )1& Ν611& Ν4 L5?1& Ν,G1& Ν* Ke f&G1& Ν K5 & -5v$ l%l%!=5hwe& & & & XK e(P l-5ʗR5R -|U F U5 L  5$e K-2   JCleewR    z >b \l%ƕ! 5Жw8 70 JJ5 J& @ x- -| *ׯ^!2  5-0& Ν %  Ȗ7 *7 r   e e e5 ׭!  I + jI  Z N 5$ ? B l%l%! ww7w   w( l҃ '  N l ff& & & & Newff& & & & *ȒZff& |'/"6    l (w./ 6  6   (7 T   Z&*"Z&& & b% 75C-5 Z&ޑ֑ Z&& &  Z&& & Z&& & & & & " ee3z &ff`X & 00sCA555512 Fe%/z ff &  new z'w   l `':% J% R%Z B%z & aaff e 4  l & R%ZB%z &f 5/$  R-N 7 >ev  [ l IFZC/ -Z& %5- ZЏȏ e-5Z 5Z& V ez &   l % Zz  %@ % e f  l % 4Ee $%  ($  EfW  B%W ,W W W  W W )7 J a a  e a &ef    5 : w7 x%55v!-hj-bd,5L JC :  &-"0u 7  -0u $-̏ 7 7 7 7 7 7 ҏ 7 ȏwܑ5Z  #a J! L:@N \0 @ E  @1  V 1 W  A1%ef 4 C @--)&e >%f V A @w W  5~qW  g@Ҁ El^ Ne@V54W  :f  -.F (Cef t < l  ~> P%&< DX <@te0 9e "@Ee0 9e > w|  r e4  ߘ-Ҁ El#5> eӦ  ԗ  ~ e@w V"-7 -Ȏ Ž 莁  @7܎ ֎ f5ʏA Ə  S-z t   @7 <*~<*>* & ڎ ՎeV  T$e7 B-<  .  @7"  | t 7 w- N B B  r &  r fe0  <*<* <*7 %f-* wx t 5 -h @ &  d%5& %-b 5 -  w  & N V w '  @f %w6 & 6 6  ֊  l nT <l%p&   Nl%  C 5^ Z ,e j5f $l%p& % l% %7 Kaa |l% ~%7 `e)7 B  ^& `l% >&7# Ne7 wv  (ej%& Pe ׭؆!҇ V 5l% %el%l%!ewa  Wpeaf : Na a  %a ewl<*Ҋ a          ` a af  W &e0  W  W   %W ӕ.% 7e<*m힊77e : ; w -^& R5:  ĉ5X Te  "e 1   l   mf N`7   ' 2N ,% # l . . -  - < p0 ` b =4  aa $eew߁  & N f d9 F:@w6 & 6 6 5 aa 5i > "dW  f& ޾&e SW r  h d ^ \ T T J L @ D 6N`' N`'  - 0u   -0u eeewew݃  -  7 n ^ -5V  7z%  p hb  7 R w LD DA>  ,4-0   ( p-[ `   A B 200sC@557i:)*ƅwą B @ C @  1-f <  & -[ j@ N ^D B  HC w< 4w 0f |%7-( & >e) ~  - - 愖%؂ & ( ~%wہ     -[  %-r Y Ne e -P N 8 ;  $H w w  - -^^-w wA )a 5| zae "   l, e@     AK  A @ D! D!1 D A ( D  A  @  - -  A e  @ew -He) ,r&a j (z    T   < 8 4%   $  e w؁ CB- w 0 -7 -7 -7 ځ-́7 Ɓ  Ɓw Pw6  6 &5 w- A  5 C  L F aa % ԀV wZwB` ww   Ҁ@pwȀ CJ swMf  1 52Q.mD 6 4e" $m   66 + |%m    ^m 6 66 %    6  w w4-^ w ewz7 7 6 ) )-n*v" '-d7 ^)  ef &56@  v"  ~ 2 7 ~%-|  |~ 6 h~% 1 ~0 1 1 lF-|-~ 5~@ R%7 ~-~| ~ 5~: (%z~-@|0u 8-6|0u , T$-Ȁ    5{ 5{/p, 7 7 {%# C'a |'a j a  %fW @fv. wրe  wҁW @ 5 N. VwȀ%% wn҂ y{p{ :{?{{{{ 5{ {/ Ne7 { p4yp{{yn{7`j{J{wx0`` x x.{ 1 w {7`{ 5  5x55ew^Bm @m  w0z@P z|zxztztz (x f xzRz xppXzH  Dzw6zm4z0zz wzwz/wr5ny ly`y -byVy \w@`B` " " y 1y eayB f& &wymy|yeW"      lJ r&xx x-x x-x xy & y7xx   ~ x:* x~xx x w\τ  N `vel % zw R   lP  -"xux r&r&7 x w w w5w ww -ww& %u``   0a``   w7ww`weBl " f 4w?fubuw w`   V O2uwmwww&uxwmrw lw`?bwXwe `t*w 4w 0w ,w2w/t  ttvtwmwwe  f  l~e wBjt@v v v& & %-xv 5rv dv/ &eRvJv/ "|\v7 wP 7x a ˶ -F{ 0 N% ' &{aa a0qe e qe& ~qe 4 = ;zsts- # wJss s-s s-s s pZqes eGv a a e N 7 p%e5pp" aa e N H 7 fp^ sp0 0" ew|l, f  ll@wf ߼r  re Br@m!=/(p:/"p6pBmem`r@1 &Lrm&e e4r(re jʈqe:r a q\qVq q q-q q-q q l qwNq aq e ew2Ȧ)q`bq\qo  KJqFqf Zn BK qq/ a a f eLq B pp on` aa 2p0ep Dn- N pjp e % efn p0 &x` " pef1 w,i N`f Ȗ%w~Ɓ   @  wVƂ  f F  eN %f a  $e:i6, >` ii wŦ)6  r& w l451 D& *6mznmn m5dn  pne- ހ` %5*n -ll D& 6mnmn  ne%mm  @  >%# 3%w a=˕ `& 4 Ė%׬-  `N`c& 1c9 ac@eA& < c c e e e   e35h j\& 5th\& 7 jThf5Jh)7 Dhmm5j pl & ޖ% hj Tl & ޖ%wXm7 Jjf   @wDZ1s0& Ν@s& & & & D& bewXEmN H E W W  E  ! aaKW/ E W W W/aaD Z(a,a0a4a 6,6 &5,w^ (w wv6 "*e1* aa aa"  .a2a,2a Ne o a 4W  N2a af f(a& e fV e 5,@aaHNatLa@`& %Z:a>aBaFa 6>e( 00e Z:a>aBaFa N6>ew5"  wj (w~5"?  @t@a`@ 6a`& R n v (" ^ڎ.e0 * FZ2a6a:a>a 66e $5$/5, -0  .6 $.0 Z2a6a:a>a 466e 5"[6 (e1.a2a2a e B  pX! D `  r  Lَ.0 Bہ2  ׁ W  "Z2a6a:a>a |66e   ( "w& 6 ( ~  Z&   B  -h<* ee)5*/  E -e Za a >e  %fx,*& *e w x a H    a,*& ܾe &* *a "ax& e "f f f    aa a 2a v aa a a fea 6e%eW a&*00s,C@557i:)* &*~ 8 ~&* %,*&*a deex,* e  * x e &* x&* |ew"0a \42* L ax& e e w 6a :a  5w4 ax& e d a  d d d - -  "ad vvd $ax& e 5  b,a %aa -6d^%D"a$a $a~ "  ~(a κ%%ew &apa  x e e-:a-Pz X7 c7 c%bwڹ)f 4f f5 ,eaa p  Vbp7b` 6e%wR)  )@, 6ea6a %%w -$``a r& Zb6 6 n6 HbBbme4be ר ע   Q Iɕ @mb & N& a6!4C ע  r&' r&r&  Br&  r&  N& a e% v! XW r& zr&fr& r& %  -wW r& :r&fr& J p %e w   |) 5A C,~  ^ -`^r&] %7 r^w ` _7 ` `f& F-^-^ 7 _%_ -] _  e f& ږ% B  -]#l]  5R] ז% B  ז%^ ^ ^ , & j5(] 7 ^ef-\/5^+-^-^# ց N ; Ύ r 7 ^7 ^wZ^V^% H7 ^% 4^%wda % w& e l%Zl%Z5 ] & 4 ( @Ж%7 ]]7 ]se E`6 E zW?o5k W?g W*   @ ' "  CA!f6% b]&   ޷``_ a > e  &a  e f  ]] F l%Yl%Ye L\& ( 8e & N %xY.7 lY5& Ο^Y  f je f Pe f e Y Y ewb-XXw| v :Z#ׯX  XׯX)[VZ7 Z 6  a ! 6 w(ׯX(     W!w%wa N[- Y  [Y-  X [ W ~ 8 6a 4 6 .  6-WW ߮W " ' ) W a 6   ^f %~     vp wX 5 vpv )  5"I W!e8%:Vv   lw V $ 7 Y 0 N t V  8 5"  & ( W!e @e5rY%%wx e W xі%Y & & ef lY - 7 \\Y-vW nW  [ hږ% & 4$Y% f wY fˁw   l w   j pe _& Ȱe PR   B  @԰ @Ԁ 5 /  X " p   (  p  w   E r  l            C" @@`e55  f jɖ%  X D @``   .JOU;>&QUIT/SAVE!.TMP.TMP* $J .  ,          *::::JJJJ Zjjjjj zzzz  )9999IIII Yiiiii yyyy LF VT C00s4CA555512RESCDELINDNELSSAESAHTSHTJVTSPLDPLURISS2SS3DCSPU1PU2STSCCHMWSPAEPACSISTOSCPMAPC!!C/L-Y-S0X0C0a_<<0^+-2^3^/UP!.^1^o_>>1412??A`A'A^A~A"A*AEC,E`E'E^E"I`I'I^I"N~O`O'O^O~O"OEO/U`U'U^U"Y"ssa`a'a^a~a"a*aec,e`e'e^e"i`i'i^i"n~o`o'o^o~o"oeo/u`u'u^u"y"Gŧ`y` d'@Bʚ; TvHrN @zZtH^Zb K:[?8h[?8l,,2"*Additional information available:[?3l[?3hJ=>\<[?6l)0\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy6VError:  $*0'&1 f`: ^`: V`:P N`: F`: >`:$ 6`:d .`:0 &`: `:, `:X `:p `: _:l _:` _:d _:\ _:< _;< _ ;< _2;< _D;< _V;< _h;< _z;< _;@ _;@ _;TN _;lT ~_;P v_ <@ n_ <@ f_<G ^__: 6_:` ._: &_<@ _ 5  hW!F & `N 4%  lv$ r 5X 2  @`%5 h †l%l& T  ! T - yl%Z X- y S %'^5 wR  J 8Zh r& l%! 7 ! 5L \) .I7H w<5.+  &nr&B 5-^5 |5^<& =e w0-   6 * -~xF & N& U% C r&eD!Da !P- T  f e-  l5 v \7 %m ] '0& p\  a` & FF a Gm te6  @`a`&  f v ,m jQ  q*m-l=& ΝBv& Fe / -& Ν" ^f  ]  v [  00s @ wbv& e wB Ra  w aWW -n5 j 85.  Ra  h J G C- f `N&  BRa R %C- -~ x Οr pW  l%Zܖ%;%WW W W a ^ W W W a : N`ew  f 57 7 7  ~w@& (X%-ی  $l%z 5  ^۷ ZۇPl&  Te m>:6er&0 *܇&  %v 4V P%-  T   lvvv U% &   l"vvv U% f B^W"W"W" ] M  f @5ztێ ( T%W ^ J e@ f J M  wD2)!P W  1& +W W W a --D >(W v " l&Rf  G a  % &z-^ He R f  Я   H7 er&7 7 7 lڇ-"-)5"v Q L P=ew0 ` (` " `  D 6    l %!   !  fN %  w/m r : 3-Z^& ַ`|zNfp |1f p1 fr& F G w `e  f(r&r&f `  r& 1& F N er&Ֆ%w2/) -^  mr&  rr&& _ pV aa j% I  fhզ p0N  Ee Fw fr& D0a a ^je Jbr& qr& ^շm  p ba%  q o%w.  f T % &F --wԎ / N >r& Dle f7 Ja <^w 6a%wp-2Ԃ & F    Cr& \ , B Ӧ  R %w - a     a ` w v    v    B ^5   \ Q l1 & r& f %57 @ׯ  -r& %     ң(ӎ & Ο a Z  e w+ ->^  ^ M (@m` r z x_ 5 Zw0er&**r& *-Ner& -f BN s5 5 _ Z  H^e w.+  5-Ѷ פ .-n^* v$ ߘ   l@y e@v@v 00sDCA555512 @w@w@x@x Vф   \  6! 2s  2, Ze s tѦ , r& ew&*-Z/ r&w & N C`% 4 ׯ    -r& w`w)& Jy*l Be me!! ҁcmHfZ `ye ~Ёp  : e  `\  p?  ߞme ! \   @?  de Z҃` % a V ׯj-7 ׯ\+  @ f7 :-.. 0ׯ  ׯ^ WZWze ͷ w.(  ͗ !    Wp `@0  ߒ > w'x|7 zn -dd  \X   Rw' >: 767 4-*&    7 -    w8'̄ 7& 2?W 0̗) Vv5  0=  7 >W  p̷`l  @ w& > J     l| |aW AIW ^F{A W B>W W;|B @`eJz C -D``7    &6  C!5 ~E`A w% z =G-ppC hd-`` V _ : Z t  ^~̎ P lLV tw\ X%V0̇w(%.  FRe5dwT  " l| _3b)v R*)d (*d 5 df s w$ *@a %w7 j fb^7 [ w e  ns  A*e) \$e ,($ t! 8 |e) $e  M ` | ~,  \ r Ta dwp y    o  j ge-   - 7 5IE-r& wpf  1 jaa \%m 7r " q Q ! 7r7z  7` ] -t-lX ^L jV r&  7 <* .7 er&5@&  l%9 e) 0" e7 7 ( ,  7  ,  ,w  7 ʀ ewN!v.Dv.6& &  WDe a t!  (  aea l        pe# &.  XC~e   o e ewR \7 t  o {b7 8e N% h c  2 $Y$ S   Sde& ΟZ % Nm7~ȷ z S 5   PSW    &  - -   x .a wV  [5b p nl% Ql%l&& & na&  e wh  4  (nl%e "& & 8n a&  e% 4 l%@ewW A1W ,W N&  i ehl&Ö%W  -l%  Ο W l% N &  ZH -l%l%l% c5 %   bd5 l%fl%b ~ ? G N le %wf-^ W @m     &f %     !7 -" Ŏ & 8?7 7 G% = + L< ׯt! ~ 2 ׯ^! h T-Pa a JX% V 87  X \6 F Xm 7T Ga  a 7 Ǧ a &=aa W%  E ,77 7 e & aa Va e w-}}a 6l7 hD  ve  e a & X-P|| ;a ewP 7  & J? c7À %o  00sLC@557i:)* a  a & bW%O :0 e ,0  pk d4( rde0v rdC r e0v  r @e06!a& V% 4 k 4 k 3@ j B5%w-|| : 5e ew(&  <& W!)H`FD F%  d h w$ ׯ e7  e7 !"} (ie 7 tҾ&} ie R:P!M!J!GA r l*}r&<& 7 5 W! &'&     e T& &    % "a lea 6 w x. ! pw4 "  VZ (  X zw 7     `e w pNj !  X? 4 TwN(er& Y6ʷ r& $ D R ;  D  D - Tm %r&& Ο   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy"  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~AAAAAACEEEEIIIINOOOOOOUUUUYAAAAAACEEEEIIIINOOOOOOUUUUYASCADV APPEND&BELL"BACK CUT2-CLSS:CHGLBCHGUJCHGCDZ(DUPC`*DMOVh)DLWCp%DEFKx'DATE+DESELEX#EXTFILLHELPI$KS PASTEQUITRREF SSNSHRSHL SELSSEL"TI!TD TCTOPTAB"TADJ*,TGSELUNDW<UNDLDUNDCXLATE^*R2LT^BW%BR BLBPARBSEN!BPAGECEWEL'EREPARESEN#EPAGE L NLPARPAGE+SR SENVW &.4z(BPzvp0L`pv~&,GKEYPAD VT100 KEYPAD VT52 BACKADVJPPPXXX44hhh66>>DD &&&FFFFbb P2 w@$ ^- j7 Pr&e) @ 05B5 N aa rzP, -8` -  7 & 7 J6  5 r& a d7    )& @e - )) (n6 v-)& @e  6 5 w67 wv-L-"-5 )$a b?)).a p>.%)$a ,?6 $a).a ,>52 . . xr&(a vcM vr& f& Nf6f-5N EN N @*r& @& fr& @& @ & e xe 5 l5e-a-] f N NE&6f(C j`bf NN C<>4 N, f & :e 5 85&  #5! &  e &  e  5 n    l0\ Jw.    > 2         5 %5     6  5 5c5 _ N\   v      ! -L F 78&  @e   55N <  r  5 5w5 w n 66 6 7 j 5d55 Rua 65 4u C5-5 u& a R 5   t&   e %5    t  5v5Q -d 4 -r B7  N  \t e& Ο `6 2t &t %    5w55   500s\C@557i:)*w:66 5 7 7 7 7 7 7 7 8  X  fsxLne) 85 e& Ο _FB (a ]70 "&%55w  6    -754 "  r .e& Ο$ _6 6` -^%     6 @!,5)   & Ne& Ο ^6m(%  )& 7e l)) Xe ) 7Y ).a 60a)& 7e w R . .-. 0-0 2 0a)& F7e @m7  ) \6%%5S %  w      w w @m7  5X5~"7 nh7 b\ C  C m7 :5/  m(7  6  0 C  C        6B!7 5   5 555 55    bo  N 67 * w6Ub݄ 65  & RV(\ T܎ & 8V*\ T & V 57  |   nz 7ܷ ;܄  6  & U-,\.\ 8T5&7 F*H |7 @ ,  :n  LJH܁ ew88555D7 -۸& $    m ۷     t  m-v۠ F{j۔۷۷7 <7 vn7 28BBێ tT *۷& |\ pMer&e2w 2 m r     X7\-- } 5f#ڀ  N -ڞ& f { & S6\ 4R XXwt r-> >X \  N  4<&& & Le(& & :S- 8\:\ Q7  ywَ&  e y w5r/z -)5`& d z|& R<\hD ~z< & R@\ &Q JW7h r-2$&  d َ & PRB\ P7 ط & xwؖ% &   7 7e %w/ j f&  & Q Se JmH r`؀ _-6[5  H& B؎ Zy8& tQD\ P#7 ؁ ww ׎ & BQF\ O&  & eצ&  7  e @{5j#5d & PH\ XOR xj& PL\ 6O ; v r (& & zP-JN\P\ N7  vw,&  :% &  "% - && & e ew-5vwn)& .e -^ֆ)) [%r&a @Rw6   lR\ (h0 @  Aw   @    Aw  w տw   @  Aw գ6 6   wv 6 m0 6 e  wb6  Հm   ev6 " LE m6    ,Em6v6   @6 -W B  Q "Է <ԷJ@2  @ 26 `ȵ 6( $-  - ԃ 20B)`ˋ$  F 2     ӷ hӁ  І5 D    5 w5w %e t nf-  *]  - ] -^^ dҀ   d  w)  5k i B`ʵ,  lX\ dEv LEʵf nP  dd z Zd AC`v   6   C` v     6  ˕v  5A -\\00sdCtgC555512b\ I| - ѷ Җ%w(er&-f)|er& &%N)z e  zR ZRfe V - %w:(  rw && >J R D5 W L1 %w. m  B @  $  р6 me7 5& @6 % E 0 - -Z& T(Fe@!   *b`(  ! !~, ) I -H *  $?!   a%v6 j -b 6 [-^ψ & -\:05 DJ& zH %5 4-.*( nA?з  -  & `> `  ! !~& 6?6 % a 6 Z- ) -#-v-x΢ 5 hnJ G %& = +5-8>& hG \I% -  z=  >G * 5- & G% H @ B  11 e IM60MIM MIM82FaG`|)!,w Y T ;?TISYSYSYTICLTILBLBSYOVTr ""_MҤ> @0Τ* 6 D$ . +~0  B~ $Ңw4Q$wvwty5`ҕҝ 5 Lҕҝ G~wC~$ E5  @wL7 wfTI f&>5Tw ffwdA  1&ڳ |x U%&wwЕȕ5<ȕЕȕ5@& ȕ ЕȕЕȕ NZ5@ 7 N wT F &  BaB~5 555 5@zw$@77 @ w v& RL2,$& Ε00tlC@557i:)*TZ&& - - TwT & & & & ΢e -Y j-Y>w w & )5d& & +-.Yw @sL΢eK!sf )&0'&0'&77 &  &  7 x7 v ħD  RRa! <Ra!PPH    +LB0:[1,6]ERRORS.LOG;0ERRORS.ACCTY@̩LOBARESHHLSL ƩLI@SWAPDE NV@ZEUPNE CUHI~Pҩ ' ELI>PSY: @@@AA@DD@@00(hH  h"$&(*SOPRSYMEPECOERALL %R -- %VA"0 b  `@w*wx fJ  "wJ QU~Jȕ z"5559{1s kjvfY7 \ "P$# !wpʱwhw`wXwPEJ6 !Tw*AB @5 5EU5@ 5@E@zUtpE<5 w   Bє~ B є~X Bє~PTwP. : Q.R~ʕ &. &T J6 zbw <Ew0jTw \|-R  ޲ww5V2E$~5:EpE?f5UV5UH«-@ 5%2 25 5 "  &x5lwdw, 6ҩ7 ͋W"  -W"׭" Tҩ  >WPWS- P]077 ~̋ , " j  7` 7P7N7F-%16<%I%M./%M.%16>%T. %I(Offline)=^O ^n55 50ֻ  Ý~ ~F.ػ ^ *5n0ֻbh=V  Ý)$R~кػ^ ^պ 7 7 7  Ջԋ    R)* O&* ^  ~ <  5& & &  f& & & Ε p  ~5@  8Ċ %VA System %12S%VSCounts last zeroed %3Z%VS%YError Counts%20SCounts last updated %3Z%VS%Y %2A%O: Memory Parity: %M%15S Unknown Interrupts: %M %R -- %2A%O: is not in the system. %R -- %2A%O: is not an error logging device or is offline. *** SHOW ERROR command was aborted. This output file was terminated prematurely.R:(Ƶ> T޶CurrentHistoricalUnrecovered I/O Error Recovered I/O Error Spurious Interrupt Hard Timeout Error Soft Timeout Error Block Replacement 57Z55 b 4 > "# @> "$# , w . >Z  L dN  5 > w:| / xp777ԋ  )ھBb>^: . < 7 7 1E7  7"e   E ` b e Pwh #  " $# w 5 p0  h  p vھ5Rھ :86-(  Phھ  ھ-  Pھ | J` Е HH-D:2es(E wȿھ   -# Е AaA . Е  d 7avvrw jfҿھ P  5 x 5feSp H  H 6w54& & &  f&& & & 00t|C@557i:)*Ε p wtABDEFIMNOPQRSTUXYZ<><D^~``T JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC w | ť ť 0B Aaw J&& D¥%  B&ХVA C e(!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e 6& e /& e*AHŀ ȕ Е Е Е & e & e Е A %& e` A Е A EA $EЕ A A   $Е.  AЕ;    w ` ' UD$BA &( U BQ Е*  & & @( f  e ee e w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   B&3&f& v w x5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp ^C*8֋ z88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ NDlljaCeH###33 & 08 *ˇw ^ 8jDl@ TeBT85l@ @( D eB&  & @#  & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@k?==&   '&1 2 2 2 > > J V > >N > 25ew (, Bv     5Bwr 5  5 2  UE   ռRE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A XW e00tCgC555512`fÊ    E &f w R( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e r4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ x& & e x* P eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w ( D n 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# Pw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) d@#**fff  .&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B  *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2&ff 141612epl2l0p82e&( |0 0 0 80 B0 0 0 0)#0. Mw  f &* *W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w d@&!d2*`&>/ &J5l&V6&2w &*D L  w`8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w. f( f)f **&   `@ ` B   & A @    w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w w d \ww T Lww F >wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ 8e2    f >5>Eu   =p!Օ^46f %8 E D/D!D l0l8epl0pɥ.ɕ w~(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e00tC@557i:)* E 5  e0R > =00l&8el2 0 *e6p 4 8 N 81416 L     *..8em,0l0!D0e6p 4.) &f L  *e) .  e6p 4 l08*w jU8UMwv w w eE D` bl lrw d  B eE"s    s-  Cslw n w d& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  *) l0, *) $ )*)0,40,6 ,*1 B 00fep=& /e`pw0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*eB  8 $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* l*5ND  <<  EU   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w .*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    D*w 6*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  hDEe    *1  ˕03 "   ˔Ӕ ʥ75%& w t&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X00tCgC555512 נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ 蟇#( P) (@#**fff d &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B v氕* N eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w n ) 8C 0* ) *w*    Jep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 "p  , J *` C# h   D @)  6?0D)w ) 8C * ) *wf*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w C#    D @)  6?0D)w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   8v Ε f e * e*wl@) *0,    ) .)% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,  N &w0  J B #  f  `* \wL)0406 l0 ,&f 00tCuC557i:)*D E/fC A B f&  BeA @0 (@0 a@eA  B0 AB  f  C @*w `  w@ * > ,,  *w j ) * jw46l0w &*f f b! fP ^ŀ)B  DP5R RRR  8   J** 8  **=D `p46 tf 64/=  @) 0  8w 46 8 e*w )  f Nw  ) 2  fU %  BA `6p 4p`4 %60 4)"(. N= . B  E v (.w n*8I *=)98 n eB &&  U `**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w)"(. z= . B  E (.f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e|)!,??Y &[q$Y ` TISYSYSYTICLTILBLBSY`"n`~ TISYSYSYTICLTILBLBSY(?PHu)!|00uCgC555512""_Mޤ"J @ <ڤ""* B D$ : '(0  B~ 0ޢw4Q$wvwty5`ҕҝ 5 Lҕҝ G~wC~0 E5  PwL7 wfTI f&J5`w ffwdA  && |x U%&wwЕȕ5<ȕЕȕ5@& ȕ ЕȕЕȕ NZ5@ 7 N wT F &  BaB~5 555 5@w0@77 @ w v& RL2,0& ΕT Z&& - &- `wT & & & & ڢe -Y v-YJw &w & )5d& & +-"Yw @sXڢeK!sf )&03203277 2  2  7 x7 v ЧDȧ RRa! ȧHRa!PPH  "& +"& 7LB0:[1,6]ERRORS.LOG;0ERRORS.ACCTY@*ةLO(BA(RE(SH(HL(̩SL (ҩLI@(SW(AP(DE (NV@(ZE*UP*NE *CU*HI*Pީ 'Ī ELI>PSY: @@@AA@DD@@00(hH (*,h.0246SOPRSYMEPECOERALL %R -- %VA.0 b  `Lw*w fV  wV QU~Vȕ 5559{1s kjfY7 \ "\$# dwpֱwhw`&wXwPEVB `w*AB @5 5EU5@ 5@E@zUtpE<5 w   Bє~ B є~X Bє~P`wP. : Q:R~ʕ &: T JB znw <Ew0j`w \-R  ww5V2E$~5:EpE?f5UV5UHΫ-@ 5%2 25 5 .  &x5lwdw ~ީ7 ͋W"  -W"׭" `ީ  >WPWS-* P]077 ~̋ , " j  7` 7P7N7F-%16<%I%M./%M.%16>%T. %I(Offline)=zk z55 50  Ýb ~F. z *5^0"RX! F  Ý $R~zٴ z 7 7 7  Ջԋ  ( R)Fvη k26 ;9z  ~   T5& & &  f& & & Ε p D 5@  (Ċ %VA System %12S%VSCounts last zeroed %3Z%VS%YError Counts%20SCounts last updated %3Z%VS%Y %2A%O: Memory Parity: %M%15S Unknown Interrupts: %M %R -- %2A%O: is not in the system. %R -- %2A%O: is not an error logging device or is offline. *** SHOW ERROR command was aborted. This output file was terminated prematurely..DZ\p.CurrentHistoricalUnrecovered I/O Error Recovered I/O Error Spurious Interrupt Hard Timeout Error Soft Timeout Error Block Replacement 57Z55 b $ J "# LJ " $# w  J*Z <* p>  5 <J , w*| / xp777~ԋ  !E*rBR>N: * < 7 (7 1E7  7"e  < E ` b e Pwh z# D "$# w ~5 fp0   v5B nlj-\  PLJH* 8 * :86-(  P* * J` *Е HH-D:2es(E w z ** -Ժ#* Е AaA . V Е ** d 7avvrw jf* *  5v 5VSp  &w 5$& & &  f&& & & Ε p V wtf T &  m55 5 DRDBDD DL$MU(DY*DU.MS:DM<d 00uCgC555512 h# 2` "$# M "$# Df  &*f0  4fff0  x  `w0 &f& v w  5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w 2 jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ jDlljaCeH###33 & |8 *,ȇw  8jDl@ @TeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@k?$   =f=v('&1 : 2Ө *ӄ "Ӏ 8 <  |   Ӝ   , X  $ L H5ew z, Bv     5BwZ @_`|.-. D- E %     U EU 500uCvC557i:)*  $5$UW       E5 E  W ч5  ,E 2`&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff  &[q &[q &r [q} ӺE`W""_M,Wn QY f 3?LBTICOSYTICLLBLBSYOVXfr LBTICOSYTICLLBLBSYOV(nmvX_M""X @ ""_M @LB0:[1,6]LOG.ERR BACKUP.ERR** WARNING: Device %2A%O: reached %4A limit (%M.) **HardSoftError and QIO counts reset for %2A%O:%2A%O is not in the system.%2A%O is not an error logging device or is offline.No Device_ID SubpacketFailed to assign lunLog file error - logging continuing on backup fileBackup file error - logging discontinuedError Log packet too longError closing log fileInsuffici00vCgC555512ent coreERRLOG -- %I%I v**D$&$"^ 8EL ?  ?? ?   w8"#U U2̡NTNNe $Bw    ?  v Ƨ Nw7  r6 . w\ ̡5   E p 55bE F5P < w5. !̡7 жt% жC ĶC Ķ5Ķ7 &Ce7 e7 Ķe " " ы Ķ Ce    w 4-- j FD7%` !jE7^ @P0  8nW! (W! WqFe&Ec  a P0  ;P *4̡-  > ҥ7Ȧҥ> > &  ȥeG̡ zҥ--p >P U ~   (Q̡Ȭ?-Ħ2&5\ ^- w , >ҥ v> 5w  %55A   `7  @ Eҭ j l~  & TI U ( |$DJ@F4,,  J ̡E <6/  R%$̡Jp 8 L17 %x p 8 "$ #> F F#  &U F# R z 8\    Fr X r FPPXPPH U4 y <j X#U `n7;"$ #># B . xXE    c @  x 0wv5v  X R  B f &Ջp ՋՋp 4 .7S2"Pҥ7 ~lҥ~vDn RRa!2 nRa!2PPH  Ȳ̲ ѲȲ̲ ݲLB0:[1,6]ERRORS.LOG;0ERRORS.ACCNo Task subpacketLogging not activeUnknown command packet subtypeNo Data subpacketUnable to open fileFile I/O errorPrivilege violationTask subpacket corruptedLogging already activeBad Backup filenameError Logging initializedError Logging stoppedʣ* File Created ** Error Logging Started *Memory Parity Error* Error Logging Stopped * Recoverable I/O Error On Device "Unrecoverable I/O Error On Device Hard Timeout Error On Device Soft Timeout Error On Device Mount Request On Device Dismount Request On Device Device Error Count Reset For "Unknown Interrupt Error, Vector = (Unsolicited Interrupt Error From Device Block Replacement On Device #The EMB Packet Was Not Recognized: &Unrecoverable Error Limit Reached For $Recoverable Error Limit Reached For 4T𵬵̵t8?? %3Z%VS%Y %VA %VA%VA%O: %VA%VA%P%VA%2B %VA%2A%O:*"T  5 Tw7Z7V7R7 N7 J> w  7n 6ʣ"$ #>8 F# z*׭H# L( #U > 6w  w w 7 N("# > wR `Aʣ"$ #> 8 "F# nU F# D ( "> @w wʣ( &  (*׭ ( l"R ( "( H"#>U 2 ԋ> $(j> B >#U |w4ҥ 5 ԋ   >ԥҥr Z > 2Z  w  t!"$ #>F#  #   5E :ҥ&0 ȕ |U%  U%U%5Tfҥf B`&B~%~5E f  & > $:m@55 5 DRDBDD DL$MU(DY*DU.MS:DM<d  P# `P "$# jMP "$# ND  DHP0  4"4P0  " 0P Nw0  @ HH:MM:SS V=  Е: Е: ȕ Ћ 7ȕ  & +&  )@)W Е0 w\W,VT  0 1ABDEFIMNOPQRSTUXYZ<>;?JVP|JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw <' UD$BA V&( U 00vCgC555512BQ Е*  w  ť ť 0B Aa & & @( f  e ee e w b&& D¥%  B&ХVA < C e!  aetbE  Е%̥V A6D Ћ  AP AЕ Bf 8 & e6& e/& e0*AHŀ ȕ Е Е Е & e & e Е A %& e A F Е A bEA EЕ A A   $Е.  AЕ;    w xD&& bЕ- eaePPPЕ-$w HD  &Е. ce | Е:   p B&3&f& v ====='&1 5ew 0, Bv     5Bw8 f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 eѷ5  5 2  UE  nL ׬|lE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew F    Е-   0@A rW e`fÊ   00vCC557i:)* E w *D L  w`8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w. f( f)f **eB  8 $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* $*5ND  <  EU  P 0w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce   *=p!Օ^8e2    f  >5>Eu   > =00l&8el2 0 *e6p 4 8 < 81416 D    ..8em,0l0!D0e6p 4.) &f  Le) .  e6p 4 Z08*w46f %8 E D/D!D l0l8epl0pɥ.ɕ Lw< U8UMw w\ *) l0, *) $ )*)0,40,6 ,*1 PB 00fep=& /e`pwJ0,0, f 톇,, w      .% l eB U5UU \ plp & NeՀ)*82e&( 0 0 0 80 B0 0 0 0)#0.w  * 8B "pB ( 0 B w *8I ^*=)98 T eB &&  U F**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* `ww (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  v1 >(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w  %ҥ[֥< , (e  5 s  D wr&   `@ ` B   & A @    w eE D` bl lrw \  B eE"s    s-  Csl&f w  ) 8C 0* ) *w* h   Xep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 0p  , J *` C#    D @)  6?0D)5%& w &&Ba +- ʥ# . U 0   b   `     f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w . n832cd& & & B  2OΕ   N Υ$Ε00vCgC555512  22Υ   * v Ε f :e <* e*wj@) F*0, \   ") ,)% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,  N Xw0 4 J B #  f  `* ZwJ)0406 l0 &ff w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wf141612epl2l0p f &* ﰕ*w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w 0 /$ ,:T < U@% DD%][%><w$  w1  %,,:4 w l*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ )"(. = . B  E | (.w  2  w n  b,,  *) r " 8   **  DP5R RRR  Mw(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@=D `p46 f 64/=  6@) 0  8w 446 8 e*w &f D E/fC A B f&  BeA @0 (@0 a@eA  B0 zAB  df  :C @*w  ) V fU f%  BA `6p 4p`4 %60 4 Uz++z.z0Tnw ( D L 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<## d  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  N P3)/ 6#( P) @#**fff  00vCwC557i:)*&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ |& & e# eB&B 4B L 0氕* 6 eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2W=f(& e %&&eH =&e0  U   E > >E(5E=uf Tp  ww ( D L 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e 4p8q  (#4=A#@)( * *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e 簕* eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w*,bb 1Y Y XSYv<Xڠ6BtSY(baЊWw<w* @ @vn-$>LLNRTrv  "*,.Df$&(x`rOl|  00wCgC555512  x00wCC557i:)*:e 7 n &w` C5E@&?  27(7 $Er>7 B @&? N@ ^d(fm,ŠƠ>4~njZv(    !!!&!  (# !! !&! JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECZXXXfffZӲҒҢ$ )4?IT_iti*m<<JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC&ff pn f 7PeU lD7d B~ڠ@ % 7T 6 & ,D   67,  B~H¦&@ CH¦CD t߀ @߇h VJE 7 5( m  lmAWpm  h W ,t7pއ އ7$7&5f&f&ÿzmxpއ $ΡEmbަDCmV’   CeB U%   -#S EmDm 4 eE >&BmJEmDBCEmCcB  %BeɊD   5a aB     ( % ?dv݇  5  BCE 54xw e@E&  E C Q$ ~ Xܦ .P CaC S܁ wHD@737 Z7 X4PHDDЊ@eT TR n ۗh5y7 Ƅ `_ \5@4( M7 4ܐ Z D PЕ  b` B 25@ 74 ( @e  @ ~ۇ  ՀWՀ  5   $ e  5@  @   ~w `EBCP  A2  6ڇ V wEw  2w6e`0@e 7@BC&& ` X ڇ7  *5 7A@Wt w& ǿهF ǿه C )2w`2-*u5`u t5`  ׭8&5~OA 0, 7 &l7 0   DmɐAE Up w: ZxW l A lmʐ B~ (7JB   B܀  7 n B7 b"  mj v\D?V؇ :  mJKL0B؇Hlɿ0mؿ ؇ m ׁ m׀b ׇCWpmf :7\ׁ:D @@ w000wDgC555512& & & ΕE5 %G5  .A fm5 mւ C55& & & && & & & Ε@ w!7 w!7 w!7 w!7  , >& %  (p5 >VևV7 P7 w h$x %x  ] %%  $׭`XZEew 5- -  $5|~z & P J%I~ ʋ B E5*UE5@U> 4Ԑ  P~eННȝ ȝȕ%%%,5 ,///e6b^(v(p*5@B*& & & Ε6az  Uw4Be,W h %^%~f -Z21 H2*&Eh-  CE 2    % " $m&B @@d~  C@," &7 5255t-d2-V 2-07 "2 7 (Ҁ* %&e EC   2 2 b  7 ѷ чEѷ       F f @e fNE7V7P $ "   %&   % e~3eB % 0 #Ӥ cB ,, P &= *Wpe{SSS % ~% r e0e0SCPKL W H Wpe? @ 26 4@A5@5EAwE ex@`׬ & & & &  x !@  p$  @e TTTR   C~&_ [%XWpe?WOPBN@A&fe 5  ʋ $50EAwE ex` ׬ & & & & f ׬  be $  ቖ%EEU &&  ,w  ,d Rw& & Ae V%=73 $w 7 h7 f j W   0-V ^   ɝ @``  W x 5@  ," 07 w ex yfP * m h  \  |L lB e@   ` &&  `H $&f    vɝ Dff f -( ~ p   t n77 &   `@ ` B   & A @     ݣ e@ -̌& N N` 'D DABAeBcA H     `u $ &BA  *7 &7  7 ڀ r `B f :t `Et @rw& t n 0=&x-B N@ 7 d!x ~4  @"@70 h ~ ` Et` E- && zP~tPP pe     B pp C `p Q$~&Ӥ `B  ~  f@f f P%$ @ 5 B5T& 5 W  5P , t ( (* b+%) f v΋B  %  C WEB EBEP UC E6D -L$ nr& jB%  %݉7 e  ,w&l@-:  2!"ȑ& & f&  & Ε&   %'1W x! ! % ! 45@, J鴊/ -7 LJe -- @,,f" $ &@& jwx t r-BCwl@e00w DC557i:)*TTTT   ڡCE 5B`eRRRR%%ww5% ZV7 T w:  5@   `ƇV77Է 7 E ,  C`B f&Ń  4 |RPE@e~ `B wn `5 wC B ڡff50 5N U . & hų U V  5 扇B~ 58ڡ  ڡ& ,2 &  55  fҡ S @ PR  ~7xt5  u,u,u, 5u, 5f fχ5B50% w,w,ĸw 7İB,7 7 &&ff  r `) @      B 6ve .  @  ( c 7 7 w|÷z L9Hà  e "-  -fb RE  m"m"2Â'  !07 7 ¬ W j   0 @  R!!!!!BfBRHmHBCU 0   4  sµ2 µ!µ@·>¬µµX  L7" 0 .. 0 @U   UnlWt  Ee@ ~`0t .t`.fJe@A  e "/P7"N H r el%t% HBC@A 0  PU   @ @ %j I fxE -" J j@e e R, " ( &4߷%7 r W$.  W$  ZW,W 7 :x.ƿ w¿@4 3,  (~ 5mؿ Q , ~  Aez N@A4w@e$TTR7 -1 (  UՀKܾ&* #Հ wd fff F  P wJ@eT TR T@& J x7@@ J & *(5 5 dU "" 1"ҽepd$pb&p $!l1lI   \ 5 U5 50 &  ( 5-62-(2<4" "5(  ּ(  `   $7zxڠ j ʕ7 7 7 7 7 ƀ{5  L) BB |"  & B ^1l1lq 0 "" nֻ@e ` TTR[ @ 5  :  <@e=פ:פ7( C `'˵ӵ!Ӌ @ l   ( 0.@A 555 %7,w* Pew" B ``wĺ w r7"Ȣ  κ̺fP 7w5nˋ  D.eX TH Ԁdb@ #7 T7 R \Z  7 N7HLF(  Ԃ `@ 7 w ("`w ̹ʹ N N cw eĹ&VP7 7 wr\e\DȘp`H . >   -b  2 ŀP#ՀBԸ& llv  wjww   .0  RTP7 > v44" r v 7 x PW$.  W$  FW,W  7  "  dt     B ~{ | p& <4j1"p C@FBlClB fd `$`&p $7.&,00wDxD5555127>w w:C . ֶ$ 7̶˶&& |  l6lN    *~, ؇ j5  ] w , F4%8+%2'%z #%585 , ,(,* @  5 Z ,%ȵ(%µ$%z %5@,,Us s(s * w@LEe wv > t  Lwf  s J$5 _ ڡE85  ljGC < T!ʴ,8 U  v.x~B ~F  ~3 3U C~ jw@ jڠ$ :%2 L8 /e5@7   <4 *E8*/ 7س /U@/@  &   "  , 7,U pwFU7| :@, b  Z x > % t% %B`  ; '    wF 7  Հ 8vE w ;bK h ݟ e   B~&pnf W wTC`B `Њe 7 J ̱>7 ,7,w*ұ  p z Bew  4 HwW=  @eT TT TTA5w  n $pܱp B~C5/   d%  ~%  p  B@< $   mB 77 7 | 8 1"hepd$pb&p $ la lF   25U"44"<7 7   K B e4$ 4& &  a e~ t"f v @e@  ~`0t.й  7 Ĺw f eCXCXCXCX    w,e eB e: f  @ @ C: H`UC 2B d `eq XW dUf   <a @&  W f r eeUUU \ 'e %< f< f x@   e @e0e0Uw EeW ɕ0ы~(eɋ e % % % & 11 `    B 5 %  Ce z  ` %# #$)  Ae@ Ct% . fU U U M U B eU M eU U M  D0% %D0%  a a &f!  E D  E E C B Ί Aw AUUUU    T T T T ee(e(e(e(T $)T T TU U U U  |x',EE Y  TITISYSYSYSYSYSYOV00xDC557i:)*0bp!" 00XXX --FLX Version   Z    pp pp&-813 6 wx 78  ʋ  F !Fr &  ww`BJjFLX -- Device size exceeds 65K blocksؙP'p XXX>Px'@8SYx']SY NTIIDDEDILIZEUINUSP FC@FAFBIMCOBLBSVE RS@DORTDRW< JJJ J JJ  <  @ ....)00x$DD555512Jan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- ^Ky_"S"xz#a&f& v &3'&1 z`&9 r`&9 j`&9 b&N; Z&@ R&A J&D B&nE :&@ 2&A *&@ "&tA &A &@ &C &@ '@ '@  '@ '$C 'A '>B '@ '@5ew 0, Bv     5Bwr 00x,DC557i:)*Po!d"5  5 2  UE  $ "d"$E U 5@*& E& & f&ËDef Ë )̋U&f &ff &  m  f A N  %=p!Օ^46f %8 E D/D!D l0l8epl0pɥ.ɕ wtf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ ** '$%' $$' $$'p$$%!T/X$$"T/`$$#T/`$$$'%$@%(.%%*.%(%,.%4%..D%%/'L%$$3h.@%X%4h.<@%d%5h.H@%p%6h.@%|%7h.x@%L%83%$&83%%93%%%;6%%<6%%=6%%>3p%%?3%%B3%%D3%&G3% &I3%&J3%%KX8$0&&L|9$&<&N|9$&H&P|9$&T&R|9$&`&T|9T$&l&X|9x&$&&Z=l&&[=xl&&\=l&x&]|9$&&_|9P$&&b|9l$&0&d@&'d@(&&g@&&h@D&&k@&&m@&'n@L&'q@& 's@,'&'tlA8' 'P'uHB,'D'vHB,'8'wlAP\' ''xAP'h'yAt'P'\'ztC`h''{tCh't'|lA`' ''}B''B''lA ','@|&'@&&E$eB  8 $&w 6*(5<s1  U U@  2f&" P)'&M'&&**%*%0 *&* *5ND  <  EU z  fw w"w  |ww  nwJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ :z  DEe    *1  ˕03 "   ˔Ӕ ʥ7w *f f ! fP ~ŀ)Bw *D   ww BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wP   f . >5>Eu   0,0, f 톇,, w l     .% eB U5UU b plp & NeՀ)*8Ae f"( UCɗ&+(e$&% (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w(  w:1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    H*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%00x4DD555512w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` D*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 0+1(e  %&p*w f( f)f &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@(e( 1  `((   >: 5 eCe5%& w (&Ba +- ʥ# . U 0   b   `     w V*8I *=)98  eB &&  U **e *Nlv ΋*.2 R & #!)&eP(e && >e >E p* Xww &eE D` bl lrw   B eE"s    s-  Csl8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wt f( f)f P82e&( 0 0 0 80 B0 0 0 0)#0.)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) &f  he) .  e6p 4 08*w141612epl2l0p,*1 U8UMw w|0,0, f 톇,, w      .% N eB U5UU > plp & NeՀ)* $^/ $J0 $T/ $0 $40 $B0 $H0 $N0 $f/ $0w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  H P3)/ 0#( P) .@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( | *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B r * h eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w @BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w141612epl2l0p8Ae f"00x =00l&8el2 0 *w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  01 >w eE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  `U   E > >E(5E=uf ,p  w 0 f &* * Mw   f >5>Eu   w *eB 8 Z e6p 4 8 & 081416  *  ^8e2   =00l&8el2 0 * *) l0, *) $ )*)0,40,6 ,*1 `B 00fep=& /e`pwz0+1(e  @%&p*wN f( f)f *8Ae f"( UCɗ&+(e$&% w j )  fU &%  BA `6p 4p`4 %60 4)"(. = . B  E  (.&   `@ ` B   & A @    00xDDD555512w f ) 8C 0* ) *wz*   ep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  , J *` C# <   D @)  6?0D)  DP5R RRR  8   &**)  N 6w f Pn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e 4* e*w@) <*0, |   d) )% ȥ  = ȥ l 0l  Dȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ% & ,   N Pw0  J \B # R f  `* w)0406 l0  DP5R RRR  8   X**)  hw f z) 8C * ) *wz*  4ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w C# <   D @)  6?0D)  DP5R RRR  8  6**w f ) R* w46l0OPzLB  *00xLDC557i:)*w & LB&`  '  V111 D J M >  v (U%   Z tM D  E e(@P   & SY&   & SY& 5 (%  ( )ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw t&& D¥%  B&ХVA . C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& eY*AHŀ ȕ Е Е Е & eF & e`Е A %& e0A  Е A bEA EЕ A A   $Е.  AЕ;    w D&& bЕ- eaePPPЕ-$w ZD  &Е. ce | Е:   FB X%h. d%h. p%. |p%n. tp%. lp%. dp%. \p%. Tp%h.w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w  ť ť 0B Aa & & @( f  e ee e  5 ߥ& *  + 23E Ew z   Е-   0@A W e`fÊ    E  &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e 00xTDD555512j43j43j43j43j43j43j44j4)4j4=4j4U4j4h4j44j44j44j44j44j45j415j4>5j4U5j4k5l45n45t45p45r45n45l45p45p45v45x45x43z4343~4343~44z4+4z4I4|4Z444z44444545~4754U54U54p54U54  y333X4n5n5p5p5p5 J? 7 fJ  JXԀe7 D ΃sKEE$s I!D%  f4&b4 *BJ @ J $A  $f4b4  BJ  8 @J \ 0p fχB`  B$> ̿J \0p  B` J %A%%D$҇ 5 :5B z@ h̡5 P T5f43  D  J-X   z\ HD x X-( - 5ҡ3 V%. N%6 F%6 >%6 6l&: .x&"= &x&= &=p  ~7X w3 X727 Ї V3x f  7 Ђ7 ЂZ4> &|9 x&; p'B F%7\ & 4 z D & Z4d |B`  f6h  C & Z4 P%.\J Bppw7 7 \J 7 <7 @J   830f# B $&eB DJ 4 > ( *4w( L%( D$( <$4( 4$D* ,$0 $`&9 X* 4B`    4| %. %.w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj 00x\DC557i:)*ɥ@@aujk,bp 5f fˇ ȕ n‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *^525w  8jDl@ hTeBT85l@ @( D (eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ $' $( $* $4( (%. $T/ 4%/ x4%. p0&|9 h<&|9f 50 $& l* L'Bѝѝa(  2w/ыw((RRR   rf$&  5wz T ҇3 *43B0 $p&55 $$    < eE  B ѝѝa( >w  7 N G > w`A -50 -55   50 ѡ- w5  $wN4 wE  B % 1   7 n A 2-" 5I50 4ѡ $( T&9 T&< T&|9 T&: zl&|9 r&|9 8 7n&he   Bz6f ͡ 8 T -\B V4V   7&e   fF B7 V4 BJ $P l&4 2C @ 77 ^*76  HZBY:9 Z&uBR7 ,R7 87R$$R$"R$ R$Rf r,   9 #3B  b̾V4  B <퇱 86&0e T Hw%8&e 6 *w B8&e  wf $ w$&f7B f7Cf7" Z:R7 N  D7 7w`R7X  r7)" f73 R7 $7R7 НННˇ 7" FLX -- End of volume on cassette8 Mount new cassette? (Y, Z (output only), or CR) XXX> FLX -- File not found FLX -- File already exists FLX -- Bad responseCommand syntax errorInvalid switchIncorrect # IN/OUT specsInvalid deviceUndiagnosable requestI/O error on command inputCan't open @ file@ file syntax error@ file nesting exceededBad list file specUnable to open list fileI/O error on list fileRequest terminated -- last block not writtenOutput file spec not allowed* in output UIC not allowed* in version number not allowedOutput device fullDT: UFD fullDevice handler missingIllegal density valueI/O error deleting linked fileUnable to open00xdDD555512 fileI/O errorUnable to allocate fileInvalid RSX file specI/O error initializing directoryI/O error on FLX temporary fileFile not foundWARNING -- Input file out of sequenceIllegal /BS size -- use 0ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 00xlDC557i:)*-4 BJ@ `Z4  @`7 & xwϡ\7p Ԇ4N EC %X%X-%O%D.%A<%O>%D. C Directory %. @%+ %.(< J1*, ) '5"z 4 4 tt < &EU  <*8  $ffU !f1 1    ,, $*   5* &$& 5o 4f 0k%N 54-54- 1111 7e"Е[ ׬A    Е] pf f C 5 333*50 5  % &&e Je" S%Ue" K%U w $Cʥ< ʕ[fҥ>]G~ҥ[ ʥ*] ,  ] C~ ͥ*D b5 H (& .  $( X%n. L%h. $8) d%h. p%. $ 3,::v::H: . 6w  &Ɏ Ɏ  %3%4%J4-lCEDE ?!? 7 jҋ ||9   **ʷɱ7 ȇťť  $B$$ ť*+ĝ Dĥ fĕ ĕ ĥ  $*+@`֥ ĥĥBĥ ĝ:$ĥĝ$$eB  B " ĝ$$P?kz?TLBI/O Error Code %D.QI/O Error Code %D.SY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA%VA%VA%Imĩ 0& U  Ue U= + f f -5 F e lPUe ՝՝     e <U ՜ ՜  W# e     w X%h. L%h.-> +   C-   Ăf4Ń   - e 5@  3 3 3 33 f&fE zeFR 5j A#A&&e# # #  L  e 4e & 33 33 w 8p%. 0d%h. $.  }H=T==C ^4Jp  p  d4Bv2i25  ",, 5,  %. %.( %0 SY2 CD  ŔE @a 2%( B\^ &wl& & & & & & & & & Ε&P f&7 %CT n ( bͷ5  0 5  0 5@ w5w5@s<  "EB"e DZ DUEsp% 1, B A77% $%DT@@%DK5&@ ( 5 55 7 (  f ƀe 5#MM#MT#MS#MF#MU%CT e & & &  %& & & Ε ) 7 j7 "58 y;6<<8<<<<<<   &7; 5 J 8\J  0p 4Ł`   l  B?> Z4C BM M M M M PPDL(LPMiMXYYSSUZ %6 z%.TH7 D `+ 7 4(( | 111 $)( - "4 X5#/7m5"5 57mem75 t,t,5t,  `   L Rͷ : f eDͷH fǁTZ4   ^4f-xb4 Ż fmJw `aw N Ba5l  BC J5afw RA!w^̇aI3 W2wl00x|DC557i:)*D emՇ VB ;Ք nlʄ Ք 0p  nB0    Directory B 0p  7 z b5$ѕ 5-7m˷   . P t R  BBp 3< e < Unused >< # VЕ.d *= % b %e ee e P (@f e:  =5<"fE  e~% Е Е-PPPPeH  Е  %6 %. 'B 'B jJ -7 B%J  J D VJ P-<P-. $R@ wLJ :l F6΄% = D$7 7 ͟-7  - !VPJ J PaE%j"% bW W7 z-D  -V  7 Vͩ3|  7 7 & xj -* W  4wǎ 5 MJ -2J P dBJ lJ̃ R$ ( h-d "B: F7 <B *   mB |-D :%% 4 E& ` - 2 ,7@ Z 7 %P J P- % $77   %3 %3    J ?Rȗ#|Jȷ&fL LL{tJ =wLF &m%5 lPw,H  ]UŇ  \ & & & & & & & & & Ε 7 7 7 J 80 b @0h0f tf+3 `3 b3 R3 B4 f3 4    7 7 p7 7 7 7 @ȕD }@ 7 d7 ķ<8ľ l7 7 7 7 @ȕD Pķ  4 @ @ D B57 :5@9P458%  %j%@P55B53  3  3 3 w5 3 E  55@ 5wT wD ׁ7Î5$555U@ 5  J 2U@U@÷$Be ¢5n”7 7 @0h0f 7 vjCbCB$ @7lW  5 65.3h5 B5B$ EDw7á333\ : 6 . * " ^Bwl $T/ d%h. $' %3 `&9 0&|9 <&|9 ܜ&|9 T&< ܠ%3 $&85 5E E    3wH3w@5 5\E PE   @3w3w d`&900xDD555512&U5\ ,5 5  5  54  7 *7 @ | G q  7 , SY ( w4 }A }AAAAAAAAAw j Tw wLABBAAZBBBw^  BJ V  J  )&j  RB ƃ   ƿ  4 h   \wX 4 65D  7 --)Bm @~ & pfe8? $eP  jtmF  ww B5  89f"e\e!e R 5f z2* eA  7 4   ,  eBzdB `T Ç&|&  f&&  e#e|& f&&G& & & & && '&& H&: $&8 ݜ&; ݸ%6 l&: `&9 H&|9 l&: $' ݨ&: ݨ&; ݨ&: ݨ&9BAeUT 7fx@3x@AB@@CNCNCJ   Be  W,%  U 4eB eB    %   B͇E C Ae @  @< e 0 e ZXVb C   (f eAaP  vw zJ  C  CS8 :5 ?eDAD eD B eCeD $D о4(  DBj   5  +@ n!5 P X5 @  .43|KBAeU, @7>59J n   E e  > euea 43ؽ ޜ&|9 %4d5 U T@0h0f Z$  Ơ(3w3w  ȕD e  0B B$$& B $& #J   d (B J7D N7 .7 P7 7 7 7 ^.B SY `&9 z$( r$* j$4( b0&|9 Z<&|9@0h0f 7 X Tw2 WPw3wN4 7 t@ȕD D$eP  @ĵ7 4 B$ "ʇ dž7 LB$ J7e77 7 ( 4$ J-z7B~e7n`7Re7 7 RBD@e /72mX 5 1"1,51, 111 (j    6I% eŷ ź Xe (7m  "4 wBZHOp 7\? ڇ@J  %"\ 642@ hmHʼn@  pwa (e@  H ߅ \pJ  eJ $eTB pJ  4 w 3 7  7 w l BJ J ߇J H D 7!8 7, BJ J @ HmD v   F nmLAwī ޜ&|9 `&9 %4 %4 %. ݸ%6 H&00xDC557i:)*: %. ݠ%3 `&9 0&|9 <&|9 H&|9 ݸ%7 ݸ%"7 ݜ&; j5D  * 4X 7 H7 @7 7 :7 7 2 ~W  ( @ȕD D7eP  ,ĵ7 5   D7 B7 8  2 |-r 4 t x]jr]-ZT75N % bU%  S5' 55KU  55AUE   57w@šP    ˋ UU>4̿B4ĿF4J4 h7t- JJ b e&P  ߬%6 ߨ&9 %x5 l&: `&9 <&|9 |߬%6 t$&8 lߜ&; > | 4 58 v h  J  6 (j 6  2 N ,'lA \'A x\'A ph'A h'B `'B X'B P'lA55 ŝĝw7$Q$$P 77777ơ5hxAŒ7 xABn.BBBB&B&BB>B6BBBBBB 3dw %d4 8'C 8'C 8'HB ~D'HB vD'HBJ7Fe7<87 67 $ JB  @jm  C$$ " eW %J eŷ  ŷ ~xJš.4r3d7 T-HN1 H\J< j$ >e"~- ;%ŷ, , .4Jj  ,e ķ \- 5lB W  5 rwp~ w&4v ސ&= ބ&= ސ&= H&|9Fł7 d7 b ^T nwTw h@L@# 7`2 :  $&=Cw3 f  W J%ıEw C $ Awvj  ć ķ  &  REW"El  5El n ͷ RL PPW J4 eHķLķ (  ͷ ķ ăw ި&: ެ%7 ި&; ި&: ި&j; :wƷƇf&f "wƷ7 ƃB %3 %300xDD555512 ~C   ꆇ:4w d ŝ-5( BBhB$B  & 8     &憇 w +*  ' ## !  Ea C    ҆64w x:9ŀ -( %    6ŀ h  H  24wF   f5 ( ć (`&9 ߴ&: &4 & -Aƃmmƃŝ-V5M}Cw  lƷd  ↇ ŀ   f ꆇ W W W -Ʒ A8ҕ  zҕ  CJRa E`Daa  f @R ŷw f ↇ5(w<wP4BBBw,&jf5  * NLŇ " jߴ&: bߴ&; Zt'tC R߀' D J߀'vC% -wķ ġ87/*@ B GQ   0 e B a  0  7 ı P7wzd7 Z7jR@ķ :- (īH1P- |ķ |$enj fe 7  & *7 30  7% H&: H&|9 p&   <4   F%w7A7 wĄ   3~xĎ -÷cr wfe  @ : 87 , j`&9% -wƷ ơ@772@ B GQ "  0 e B a  0  7 Ʊ P7wl7 b7rZHƷ B- 0ƫP1P- Ʒ ,evr ne 7 & *7 3ƿ8  7- H&: H&|9 D5DPbwJX-w V7 ~7 J 7 t5-, "7XwRŁ  p5(f    7 $5Uw<% e 7 ć &7d ?%m-& & ? e7 @7he  0N  B  7!4A ?f&f 70   ww$7` w vP  ġC B   & . 2e>R4 &3 ݴ&|9 H&: H&|9 'v$mjmhŃmm ŷ ł@78 X b܆wNJ\eT 7 P B@m8""7"?eKW  .      @m ?   ?   p@jm  \C$$ "(eW   :RX V jL ķ 0 FÇ.4 B޴&: :޴&; 2޴&: *޸%6 "޸%6 H&|9 ޸%7 ޸%"700xDyD557i:)*    f :  n(ކ43&7 0  Z$  B &$$ #J  .Ƈ36B 85@0 B $& j@# T2 C @777  5F 2 4  3  &  \  ؾ4 @ j F%w"7A7 wń   :3ξĎ -ķc we  @ 87 D ޼$( $4( $' ޼$* ޼$D* `&9 &3Z@0h0f D7 R W7 TLJ "4 3wN4 @ȕD D0eaW $ @ĵ7 47 B Ӈ5f7 L7B$,Ʒ( Q4 7 $  Q fT N < n  ŀ Rō7 *&Z4f &|9 `&9 &: `&9 0&|9 <&|9 x%5 p&9a7 h7 7 07 .7 ~O B >5 *< 89f"e\e!e  5f 2* eA   ze  557   T-<s-4o7 47 87 &E7 54- V R 6  0r7 ^m ( DE Bpp U- g  7 ,H  DD Bpp 0w3 N4 J -2  v ( W W f4 wJ  -    P N4 B-Į b J -   ㇵ (lĵ B(  -6 D  - <òw&|&  f&&  e#e|& f&&G& & & & && '&&%N Total of %D. blocks in %D. files%N%N %M. Free blocks*.*; x&"= l&n: ݬ%6 $' |ݨ&9 tݨ&|9 lݼ$* d%x5 \%4 Tx&= Lݨ&< Dݐ&= <ݐ&= 4@%+ ,%. $l&: ݐ&= ݨ& < `&9 <&|9 H& ; %5 ܬ%6 ܜ&;|x',&& Y &[q Y HTITISYSYSYSYSYSY00yDD5555120^*00XXX --FLX Version 66 :==  t & 2(pp pp&-,1U >w 7<> ʋ  <x:; .<f:   t wX_w2 ^f!Z!Zcg $74'dk,lFLX -- Device size exceeds 65K blocksy D ;? ;7 :B:=> F=*;e7;>>D sKEE$s I!>D%  4V 0V *>>B>@ |>$A:  $4V0V >>B> 8 $>: 0p nχB` >>B$> >:0p ( B` B%Az9%n9%D$d9 5 z88>5>B ^>@ L5 >P 854VUx >D87 >F-8  h h: 88 > -8 8-8 5`767|8U(8 B9< 78 wxU9< 777 7 #xU 7f> 0= $7 j77 `7(Vd u 87%77: F& U* t77>>D & (V t7f7=  t7Z7> >>C L& (V:F Bppw7 67 6:F 7 67 6:B  830f# B $&eB 4F $ . ( Uw 9 * U9`   Uz9@:=B0 4 50 $& m* 6m'<<ѝ 0ѝ0a(  8ow_5ыwX5@:=RRR   r=$& ^l 5w/ T $4UUU^:90 $p&5353 P<$  ~  < ~ eE  < ѝ/ѝ /a( Dnw  7 ~3 w3 n3 w`A|: -450 - 455  3 350 3-39@:< 3w52  $wxVh w E  < % 1   7 2 A|: P~-R3 5I50 d2 p=b3>Z3%===wF3<37637 033m3"33 -22c 3 w 7 2 Hp 2 > " 2CD  Ub-24> >B22F3<3 (V2  @`73 & &|w322:272p }ԆU poEC {eFpp5pA#eAeՕ- @ {U0U0S {U0U0eS-1> >B1$2 (V: 271p {U\ x . w  + ++ @nr+%hU%U%V-Z+T+~,,CEDE  ! 7 jҋ |  x8 6k,4,7 *ťť  >9;$9<$ ť*+ĝ1 D9ĥ /ĕ ĕ ĥ  ;$*+@`֥ ĥĥ9ĥ ĝ0;$ĥĝ0@:;$eB  9 / ĝb0<$^:&/}/? B/-///.0/. PU.B //.D/.-V)7.-I)7.@:7 .-.." .:.B -x.  6 7 j.7 n.>>  O4V5 "!, , 5, 55,f>  8W00yDD557i:)*-- +  >>C--   4V    -z- e Pk5@6,  3 3 3 33 f&fE veFp 5p A#A&&e# # #  2x  e je j j33 33 w i=x,J,  if,=*,,}>>C X ,VD,p  v p  vUh<*2*25  ",, 5, >%9>SY2 CD  ŔE @a 29@:%>9^:\^ &wl& & & & & & & & & Ε&P f&7 P*%CT * >*8*5) ( >5v)  >5@h) w5L)w5@B)s  "EB"e DZ DUEsp% 1, B A7)7)% $%DT@@%DK5j)&@ >5( 5(5( 78$> >>f> e 5#MM#MT#MS#MF#MU%CT e & & &  %& & & Ε ) 7 )7 (5' y$& > >&7 5' >>8:> 0p Ps ~(U` >>  (?( @((VC BM M M M M PPDL(LPMiMXYYSSUZFB'7 >'> `+ 7 .'"'"'>@: | 111 $)= &-& HU R0&&5#/7m&5&5 57m&em07&5 t,t,5t,  Z& /  F& L& 4& f e>&B&|= F&(V > j,Vf-r/0V% T/% cfmD/w `aw N Ba5l  BC F5afw RA!wX%aI3 W2wl>% em. c9 Ք h#f# Ք 0p p$ H90  o  Directory b9 0p o z$7 t$ b5!ѕ 5-7m$ $  . P t R  H  B9p ToU:^ e < Unused >~ # VЕ.d  % b %e ee e P (@f e:  La>#-#7 #>B>%># #># >V>#L##-l#P-^# T##@ wp ` j#l> Ff#% #=L#H# .#@#$#D$6#7 .#7,# $#-# #7 # #-" #!VP> >LaE%""% "W >W7 "-t"  -H#V  7 "U tm 6 b` \`>?Z##|R#&f8 0`88'# #|>=#wT!F k"&m"%5" lpw4H!  ]"U : rl: jl& & & & & & & & & Ε x8;7 7  7 @ 80 b t_@0h0f *ltf+lU `|U U U 4 fU     7  7 x7  7 7  7 @ȕ; k}@ 7 l7 D@T= l7 7 7 7 @ȕ; FkPV= 4 @ @ D B57 :5@9P45@%  %j%@P55B5pU U pU tU w5 hU tE  55@ 5w w ׁ7$5$55t=5U@ 5  >:U@U@56pU5" J5<< W EDw7UUxU00yDD555512|: h h: h hx8 h nTJw i5 5BE :E    *tUwv|Uwn5 5E E   tUw6|Uw.&U5> R5 5 V X5  5 7 7  @ xS<G =q  j 7 d>SY >wZ }! @}v!!!!!!!!!w> > zw&>wr!r"r"!!@"!!w^l >!@V  :@> ,)>&>  8" t >  > U > ߂  w> U f5DD  7  p--P)ZBmJ @~ d& dfe8?X >P<>$eP  H>,m  ww9 e95  89f"e\e!e Fe 5f e2* eA ^: 7  N  ,@ R:  eB2B .`F `9AeU D7x:$xUHއ0$J$%0$0$&&&> >>Be > W,%  U UeB eB    %\V  > ͇>E C Ae @  @< e 0 e ZXV C   Ff aeAaP>> Fw z> C >>CS8 5> ?eDAD eD B eCeD $D Uۇ>> D>B>  r f5>> R+>@| >!5n >P (5>  > UTULK9AeU @7x=59@   E e   euea=> ZUxU 5  L \7X 7 7 7 *7 7 :7 2 L; W   @ȕ; `D7b<eP  ĵ7 5<  D7 7   2 Bᨇ- NU . |]tt]tnP-7B5 % U%  S<5' 55KU  55AUE   57wq   p ˋ \U8U VVVV "7 - \QFJ $ eb=&P  >   5    r p 46؇    ؇^:@:5\5V ŝXĝTwo7j$Q$$P 7n7X7d7N7H H*5x*b07 x*+z+++++++,,+++++ xUpw݇J7e7 7 7 P <>$ FB  @>m  C$$ " eW %F e^ \ P NHFjUU7 $-1 :F  >$ e"N-  , , U6F>   e  :-p 5< W  5 rw@N &wBUb7 7 ~> HF wpZ=w @h@# 7`N   @B=Cw8U: f W J%Ew C $ Aw>    8 &  FEW"El \  5El F  F PPW JP edh D  . .w `wf&f hw7 B `XC   ꆇVw.rl d ŝj-5p( ./,/.  & X     8憇 w( +*  ' ## !  Ea C    ҆VwR x:9ŀ - %    6ŀ B  Z  00yDD557i:)*Vwܡ   f5   4   &  -  P0 m m ŝ -` 5 M}1w  v n   ↇ ŀ   f ꆇ W W W -    Q08ҕ  zҕ  CJRa E`Daa  f @R   w f ↇ52 w/w<0:10w6 &t p 5   / X V 8;% :   -,  w  &  l  7c ^ @ B GQ N  0  e B a &  0  7    P7 w  7 7  t n -J  \ | 1P4>  -(   X e B e < 7 6 : 7  U`d  7Y  \5  w - w& .7 7 @7 5L -h ^ 7 w  >5 (    7 ` 5 U< w<% F eB 4 0 ,  7 ( &7 d ?% m -b  & ؄? e7 | 7(  e  0  B   7!p A ? &f օ70T   BwR w` 7L ` wF  P  \ C B   & J "ր0 ez  Vj X'$mmmm  7 0,܆w,J=4>eT 7  `@m""7"V?eKW   Zb V  @m6$ J?    ? d  @>m  C$$ "(eW  *  b  f b RU=>  L>=f  6 *vކUxUpˇ.@0h0f Q7  ;W7  &U xUwV @ȕ; ~QD7  ު Ql fF = ʁ   > 7 <(V0ʌzؙ8'9.9 XXX>PZ;x;x'@8SYx']SY NTIIDD=DED=DID=LID=ZED=@J@ > >....)00yDD55551200yDD557i:)*Command syntax errorInvalid switchIncorrect # IN/OUT specsInvalid deviceUndiagnosable requestI/O error on command inputCan't open @ file@ file syntax error@ file nesting exceededBad list file specUnable to open list fileI/O error on list fileRequest terminated -- last block not writtenOutput file spec not allowed* in output UIC not allowed* in version number not allowedOutput device fullDT: UFD fullDevice handler missingIllegal density valueI/O error deleting linked fileUnable to open fileI/O errorUnable to allocate fileInvalid RSX file specI/O error initializing directoryI/O error on FLX temporary fileFile not foundWARNING -- Input file out of sequenceIllegal /BS size -- use 0VR@VRVR>V*SDVKSFVKSFV{SHVlSPVSLVlSRVSLVSHVSHVTJV,TNVRTHVTNVTNVTPVTLV UVV'UVV'UTVBUXV'UXV  OPzLB  Xskz?TLBq >qn&he   >>B q T>->B ̧$V>> >q&e   f>>Bdq l$V>>B@$\N@ 4&[ >C  dq7 n]j6  ZY9> Zu>B(q ,(q 8dqR$$R$"R$ R$Rf r,  >9 >#U>B  *$V| > >B 퇱q6&0e T Hwq&e 6 *w >r&e  wf; >< w$& DZ] Z]w`(qX 0 42Hq)" BUrݷv-P S |   @ݷ D:< V@:-   v; ( <- 5  =  - Zr  ܡ> dr5<"fE  ep% Е tЕ-PPPPeH ^ Е   7 7 & j> x-D W  hUw 5 M@~-L@Np d>BJ NJۃ R$ ( -~ ">B Ο7 V>B    m>B>-^ T%% N E& ` -( :L F7*2@ $ 7 %N$@N- % $77   x5 U h@0h0f l%<  ٴ(Uw:Uw2 ;ȕ; ,%e  vr 9<$;& B ":$& j$#@ R$ f$ nr L$7,;; `$7 B7 d7 7 7 7 a7 $7 7 7 7 :;O 9 #5 < 89f"e\e!e # 5f $2* eA  V# #<6e  557   П-s-o7 7 7 ` r7 5J4- V@:9< R 6 ^ r7 R m ( rr@= "9pp :"U-V g 7 (H h xrr= "9pp !0wxU >V 4>>-   > 6 W W 4V w> -  :  @:9< V -tj b f:^> @:->   ㇵ ((ֵ <=  - r  - Բw@0h0f 7 w2 $;WwxUwV 7 @ȕ; D<eP n ĵ7 v L9< ةʇ dž7V 9^:< vJ87ne7hd7 b7 >$<> F-70Be7$7e7 7 e /7m ^:5 1"1,51, 111 (>   ` tI%F zerԷ F>Ժ М*e (7mL   U w<Hp 7? Xڇ@ %\ @ mӉ@  Ρwa e@ 0 (H  :p@ e@$heTB p@ U w U 7  07 $w >>B@J ߇@ D 7! 7>>B@J @ zmrD    xmLAwҫ9@:&7 >0  h<@:9  B &9$ #> ачUT9 5@|0 B ":$& @# 2 s 7Z7V7 N 5 F U U ؟ "& =>  <U   F%===w7A7 wЄ   UxЎ -Ϸcr w"fe  @ 87 | N  D  >C    .%  2 2 2 2 W  0V4V% ʋ>C*  z l& U  Ue | UZV + Lf @f 4-5 F ze lpUe ՝՝|     e U ՜ ՜  W# e     wI/O Error Code %D.QI/O Error Code %D.SY%X%N%VA%VA%N%VA%VA%N%00yDD557i:)*VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA%VA%VA%IJan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- ^Ky_"S"xz#a `q" FLX -- End of volume on cassette8 Mount new cassette? (Y, Z (output only), or CR) XXX> FLX -- File not found FLX -- File already exists FLX -- Bad response%X%X-%O%D.%A<%O>%D. C Directory tr SY%N Total of %D. blocks in %D. files%N%N %M. Free blocks*.*; s XsSY0oo pp-p%pOpGp w @H& LB&`  dV  V111 D J  M >   VU%    tM D  E eV@P  & SY&  r& SY& X 5 V%  V 0)8 * &  sXX @ X V X B \  Xs :0 V XXR~XX (< 1*, ) '5"z 4 4 tt < >&EU ~ <*8  $ffU !f1 1  j  , *   5* &$& 5o f k%N 54-54- 1111 7e"Е[ >׬A . &  Е] pf f C 5 333*50 5  % &e Je" S%Ue" K%U w Cʥ< ʕ[fҥ>]G~ҥ[ ʥ*] ,  ] C~ ͥ*D 5  &  B X &o o   %ܿ Y7   YUfUhY&& Y Е ȕ-ȕ  FY  . o  FYBFYoPe 5)E$ %& e eUUo % o!e e\^$% 5R  oeH~Y -- pYY oVY@ A"s & & & & fV& & & Ν )  % UoY 2FYjp BFYpeD eYP Е; ~ &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e &f& v w  (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ & & @( f  e ee e w f 5 funhj uhdB$ 0jwaw< 8 v8w &  > *AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@  ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *}}w L 8jDl@ TeBT85l@ H @( D N eB&  & @# & V An5jP a@@` > ~ &00yDzD555512@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@('&15ew , Bv     5Bw  )*F-y D- E %     U EU 5  5U  *E U *5@*& E& & f&ËDef Ë )̋U&f &ff &  m  f A N  %5%& w &Ba +- ʥ# . U 0   b   `     ,, L`  X$L8<HP4T\|t|x',>>Y &[q$Y  cTITISYSYSYSYSYSYOV0b#$ 00XXX --FLX Version @  Z Z &  pp pp&-(00zDD557i:)*1-  w  7H  ʋ  V V   :wnw<4\dLTFLX -- Device size exceeds 65K blocksؙ`' XXX>Px'@8SYx']SY NTIIDDEDILIZEUINU SP FC@FAFBIMCOBLBSVE RS@DORTDRWL ZZZ Z ZZ  L  P ....)00zDD555512Jan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- ^Ky_"S"xz#a&f& v w \ (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA * EAa$ & & @(  f  e ee e '&1 & & |&, t&, l& d&L \&` T& L& D&X <&$ 4& ,&L $&8 &< &H &P &4 & & &T & p'R3 p' 3 p'63 &\ & & & '4 (9 (: (= &| |(^> t$(9 l$(: d6(9 \6(d: T6(p: L&t DH(9 <H(< 4Z(9 ,l(9 $~(9 (9 V)< h): h).; z)9 )95ew , Bv     5Bw 00zDD557i:)*#$50  (r- DUt-E D  E E ܁ %$$%&wBE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &ff &  m  f A N  % &[q &[q`&%% %&%) %&%) )>&P&,&)l,&>&,&H-b&:'P&H-P&t&P&H-&P&&P&H0t&&P&H0t&&P&H0t&&P&H-`P&&P&H-lP&&P&!H-P&&P&#H-P&'P&&H-P&'P&(H-P&('P&)H-P&b&P&*2 L'(:'+3t:'^':'-3:'p':'/3:'':'33':'':'56'':'66h'':'76'':'83:'':':3H:'':'=3l:'L':'?9()(?9($((B9(6((C9(H((E9(Z((G9l(l((H9,(~((K9x(((M9((z)(N\:((((O8;(((P8;(((Q\:P((2)(R:(((S:)(((Td<`( )(Ud<()(V\:`D)(h)(W;2)V)(Y;2)D)(Z\:(((\9l()(]9\(((`>,&)%%OPzLB  ,w b& LB&`  )  V111 D J M >  v *U%   Z tM D  E e*@P   & SY&   & SY& 5 *%  ) ).J-._-.n-.-.-.-.-.-.-.....1..H..u...........././.:/.p/$.:/ .N/".N/.N/.N/ .X/ ./&./(./(.Y-*.J-2.-..J-4.-..-*.-*.-,. .0.0.*.f.0..0..2.....8./8./6. /:./:.  yL-\-^-.// / / / Z? 7 Z & Zhۀe7  D jԃsKEE$s I! D%  6..z *  BZ @ Z $A  $..."   BZ  8 Z l 0p dχB`   B$> ZӿZ l0p  B` Z %Ad%X%D$Nه 5  5 B 00zED555512 @ ҡ5  P 5.-  .  Z-   rl  p P- |-z 5J fء-t &0 z&H0 r&n0 j'Z4 b'6 Z'6 R'$7 " ~7 wZ- " X77 Fׇ VZ- 6f r f7 ׂ7 ׂ . '3 '|5 ~(; P$% 7l & - t  D z&  . @p  ,x   C "&  .vlZ Bppw7 7 lZ 7 7  Z   830f# B $&eB HZ 8 B ( .-w p'.3 * -R`   x-w D5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  l P aAAf@pnp JC*8֋ ,88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ xŀajTI& af* n*`V @e,w hjjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ :DlljaCeH###33 & 48 */.w * 8jDl@ TeBT85l@ @( D eB& Z & @# B& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@00z ED557i:)*vr 50 $& d* D'"Rѝ;ѝ4a(  *wыw8RRR   rv$&  5w T Tه--x-pR0 $p&55 4$  r  < ^ eE  R ѝCѝ<a( 6w  7   w`A X-L50 -:55  L D50 8ء-" w5  $w-* wE  R % 1   7 A - 5I50 ס ^'3 ^'5 ^'3 ^'B4 '3 '31  a1n&he     B Pԡ1 T - B d.   F a1&e   fF  B>1 .V  BZ $b`F &.  C  >17 ^06  HZBY:9  LZ&u B1 .,1 8>1R$$R$"R$ R$Rf r,  9  #~-4 B  Ҿ.   B 퇱16&0e T Hw1&e 6 *w  1&e  wf,  4 w$&1 1C1" Z:1 N   D0 0w`1X  "1)" 13 1 $11 НdНaН^҇ :1" FLX -- End of volume on cassette8 Mount new cassette? (Y, Z (output only), or CR) XXX> FLX -- File not found FLX -- File already exists FLX -- Bad responseCommand syntax errorInvalid switchIncorrect # IN/OUT specsInvalid deviceUndiagnosable requestI/O error on command inputCan't open @ file@ file syntax error@ file nesting exceededBad list file specUnable to open list fileI/O error on list fileRequest terminated -- last block not writtenOutput file spec not allowed* in output UIC not allowed* in version number not allowedOutput device fullDT: UFD fullDevice handler missingIllegal density valueI/O error deleting linked fileUnable to open fileI/O errorUnable to allocate fileInvalid RSX file specI/O error initializing directoryI/O error on FLX temporary fileFile not foundWARNING -- Input file out of sequenceIllegal /BS size -- use 0%D. C Directory (< 1*, ) '5"z 4 4 tt < &EU  <*8  $ffU !f1 1    ,D <*   5* &$& 5o f Nk%N 54-54- 1111 7e"Е[ ׬A    Е] pf f C 5 333*50 5  % &e Je" S%Ue" K%U w Cʥ< ʕ[fҥ>]G~ҥ[ ʥ*] ,  ] C~ ͥ*D H5 ^ & < 25%& w &Ba +- ʥ# . U 0   b   `     3,44243 . w 0 ώ ώ 8 |%J-%-%--d^CEDE 9!9 7 jҋ |3   *з>б7 χťť   ,$R4$ ť*+ĝ( Dĥ ĕ ĕ ĥ  ,$*+@`֥ ĥĥRĥ ĝ,$ĥĝ,$eB  R  jĝl4$8kz?TLBI/O Error Code %D.QI/O Error Code %D.SY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA%VA%VA%I6566=656_6W6 B 4 &5 5  %ˇ 57 6   &00zED557i:)*5UfUh5&& 5 ZЕ ȕ-ȕ  :5  J 5 " :5B:55Pe5)E$ %& e ezUU5 % 5!eF e\^$% 5R  5eH~z5 -- pz5z5 5*5 A6 *& & & & f*& & & Ν.( )  % U55 2:5z6 B:56eD e5P Е;  &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e b&H- 'H- 'H- >&, 6(9 }3,3b333333? (- 6-"Z Z<7/77 -Ԁ"  zZ -^  6 7 P7 T   2 .|5 "!, , 5, 55,f   W}44445555558wxe% 2d`m 5 ",5,  (8   e% H mR  3МВҚ Z Uҷ- S   vҷ z r -V  0 ; (@R- 5  8  - `6  ѡ &&H- '6 '6 '6 '6 '87 '$7 'Z7 F <  C   >˃ .%  2 2 2 2 W  V.D.8% ʋ C*  ʩ & U  Ue tU6 + f f -5 F e l`Ue ՝,՝&     e U ՜ ՜  W# e     w- +    C-   *˂.x˃   -@ e d5@  3 3 3 33 f&fE 4eFb 5z A#A&&e# # #    e e  33 33 w J4x  2,XH}667  C  .jZ@p  p  -(R225  ",, 5, 8 %@ SY2 CD  ŔE @a 2%8 R\^ &wl& & & & & & & & & Ε&P f&7 %CT  8 ӷ5\ ^ @ 5>  @ 5@0 w5w5@ sj6  "EB"e DZ DUEsp% 1, B A7b7^% $%DT@@%DK52&@ 8 5d 5v5d 7 8  f  ̀e 500z$ED555512#MM#MT#MS#MF#MU%CT e & & &  %& & & Ε ) 7 7 5 y555555555   &7x5 5f  Z 8lZ  0p $ F-V́`    ?  .C BM M M M M PPDL(LPMiMXYYSSUZ &0d7  `+ 7   | 111 $)8 b-p - @B5#/7m55 57m em75 t,t,5t,  P   ӷ  f eӷ ́d .  .f-.T JӇ ffmw `aw N Ba5l  BC Z5afw RA!w҇aI3 W2wl em:܇ R 5Ք Є Ք 0p B nR0    Directory ZR 0p V 7 b5ѕ 5-7m8ҷ 6  . P t R  LBRp z-JR6 e < Unused >r6 # VЕ.d 6 % b %e ee e P (@f e:  :75<"fE  e% Е Е-PPPPeH  Е  L&0 D~(; <~(; Z D-7 8 B %Z $ Z  T VZ `-P- @ wJ· Z l xFԄ% h=Ԑ vlD$~7 v7t lԟ-dR7 \ V-  J!VPZ Z `aE%"% W W7 -  -V  7 ө-  7 P7 p& j h- W L -w͎ 5 RMZ -Z ` d BZJz lZ6Ӄ R$ ( - " B:8 7  B    m B - %%  E& ` -  7@ ~7 |%`Z z`rn-( % ,$B7<7 6  "&H- &-   Z ?rϗ#|jϷ&f\ \\?ϛ8ϔZ =wlF \&m%5 l`wLH.  ]U͇   l & & & & & & & & & Ε &7 7 7 Z 80 b @0h0f Ntf+N- h`&f- Jj- :n- *4 fb-  "   7 7 7 7 "7 7 @ȕT }@ 7 7 ˷\X l7 7 7 7 &@ȕT jP˷,( 4 @ @ D B57 :5@9P45X%  %j%@P55B5R-  -  R- V- w5 J- E  55@ 5wt wd ׁ7<ʮ5$555U@ 5  Z RU@U@ʷ4Be 5ɴʰ7 7 @0h0f 7 C00z,ED557i:)*CR4 @7W  5 V5NR-5: b05 R4 z EDw772ʡ-6-.Z-&l    6bw| &H- p'R3 '3 ^'5 t&H- :'25 5E E    V-wH^-w@5 5|E pE   `V-w^-w Pp'L3&U5| L5 5  "5 $ "5T  7 J7  @ G q  7 < SY 8 wT }: }:::::::::w   tw wl:|;|;::J;::w^  :Z V  4LJZ  &) &z  B; ̓    -   Ƃ  w - 5D  v7  --)Bm @~ & fe8? \$eP  zmf  ww R5  89f"e\e!e 5f 2* eA  (7    , r eBB X`d V ʇ zL'84 r:'2 j'|5 b&H0 Z'Z4 Rp'R3 JL'3 B'4 :' 4 2'5 *'4 "'3RAeUt 7x9Z-ȇ99;99p<><><Z    Be  W,%  U - eB eB    %   b͇ E C Ae @  @< e 0 e ZXV C   (f 4eAaP  w zZ  C   CS8 Z5  ?eDAD eD B eCeD $D -HƇ   D Bz  0 5   + @: !5,  P x5  `   N--KRAeUL @7^59Z    E e  ^ euea -Z- '3 &@.5 U t@0h0f 4  (r-wv-w  &ȕT De   ; R4$& B $& #Z  j⪇ ~ ; d78&T x7 N7 p7 $7 (7 7 ~; SY np'L3@0h0f 7 x tw2 &WpwZ-w- 7 t@ȕT PD4eP  `ĵ7 T R4 "ʇ dž7 <R4 Z7 e77 7 H $ Z-7Be77re7 7 rbd`e /7Rmx 5 1"1,51, 111 (z    .I% eͷ ̺ 8e (7m  00z4ED555512- wRzHop 7|? ڇ`Z  %B\ VTR@ hmh̉@  hw$a He@ \ TH 2 lpZ  eZ $eTB pZ  J- w - 7  7 w   BZ J ߇Z h D 7!X 7L  BZ J @ HmD  > >. Nm&LAw&˫ '3 p'L3 &p. &@. &H0 L'84 t&H- p'R3 L'3 &0 &0 '|5 5d  * 4X 7 h7 `7 7 Z7 7 *& W  H @ȕT :D7"eP  Lĵ7 @5   D7 b7 X  2 |- - t ͘]̒]-zt75n % U% 8 S5' 55KU  55AUE   57 w`̡p    ˋ UU---- h7-( 4ZZ  e&P  &H0 '.3 &(/ '4 xp'R3 p&x0 h:'2 `'|5 >  T 5X v h  J 4 6 (ȇ 6  2 nȇ t(\: l(: d(: \(: TD); LD); DV); )= 6 )f<%&  -w ̷ ̡ X7OJ@ B GQ :  0 e B a   0  7 ˱ P7w˄7 z7r`˷ Z-6 H˫h1P- ˷ Deˊ .e (7 " & *7 -P  7E L'84 L'3 &  ,  \-   F%w7A7 w˄    -ˎ -ʷc we  @ : 87 , Vp'R3%.  - wη Ρ`7WR@ B GQ B  0 e B a   0  7 α P7w͌7 7zhͷ b-> Pͫp1P- ͷ Le͒ 6e 07 * & *7 -X  7M L'84 L'3 d5dp̂wjx-w v7 7 Z 7 50-L B7xwŕ  5(    7 D5U w<%*e& 7 ̇ &7d ?%m-F & ? e7 `7 e  0n  B  7!TA ?&f 708   &w6wD70` w*P  @ˡC B   & . 2e^. ('H- '3 L'84 L'300zDE{KE555512 '$mm̃mm ̷ ̢`7X X b܆wNZleT 7 P,b@mX""7""?eKW  .  &.  "  @m ?   ?   @zm  |C$$ "(eW   :rx V jl 2˷ .P Fˇ-" .'4 &'4 '3 &0 &H0 L'3 &0 &0    f Z  Hކ--LJ&7 0  j4  B &4$ #Z  N ͇-VR X5@0 B $& @#  ~2 < 777  5f R 4- <-  &  |  - ` j F%wB72A7 (w(̄   Z-ˎ -<6˷c w$e  @ 87 < p'R3 ('z-z@0h0f 7 r &W7 t· - Z-w- @ȕT ND@eaW 4 `ĵ7 T7 R Ӈ57 l7R4LͷH QT 7 D  Q0 rfd N \ǁ   ̀ r̍7 JF . '3 p'L3 '4 |p'R3 t&d/ l'3a7 7 7 P7 N7 &O> &R R5 J< 89f"e\e!e 5f 2* eA  "e  557  L  -\s-To7 T7 X7 F>~=:7 >54-" V" R 6  r7 m ( \T=j= BRpp U- g 8 7 ~H  R<$= Rpp `0wZ- 8- . Z -R     , W W . wZ 4 -     " f- - b  Z P-   Bㇵ (˵ R8  -V J=  -: \ʲw%N Total of %D. blocks in %D. files%N%N %M. Free blocks*.*; '6 '4 &H0 '.3 '3 &(/ &p. '6 '5 '87 'Z7 '4 '$7 '5 p'R3 L'4 &d/ &x0 ~'|5|',ii} Y A~G00{LED557i:)*SYTISYTITICLOV~~~Z\|7 7 7 7 7 7 7 7   7 Yf w L L wX wV ы T 5wQ7QwQU-. e w  -Q-Q$SSRRRlQ fQR @TE B V T  Tw  T  TkY~g>TM z7 P7 P7 P%DUD 0T FR%DU4 T;7  6P nSEPT "V S S 7PT w`) wd$PwPT%`Zxp7k87"b$  _1%DB6%6t7 ,( BXЕ._w&_P_z T5 5 uЋ f%TL Pf  FMT -- Syntax errorDevice does not support formattingDevice not in systemFailed to attach device Start formattingDevice offlineUnrecoverable error - Device write lockedDevice not ready Start verification Operation complete Device driver missing Entering manual modeCylinder = Track = Sector = Manufacturer's Bad Sector File corruptDisk is an alignment cartridgeFatal hardware errorFailed to read Manufacturer's Bad Sector FilePrivilege violation ** WARNING - Data will be lost on : ** FMT>Invalid value for the DENSITY switchFailed to format -- volume has been alteredMedia format error -- volume has been alteredVerify Operation of FMT failedInvalid OperationParity error on deviceBad Block on deviceInvalid switch combinationCommand I/O errorCommand too long Continue? [Y OR N]: Response out of rangeMarked bad in Manufacturer's Bad Sector File Error reading dataBlock = Header compare error Error writing header Error reading header Error writing data Start badblock utilityBAD :/LI/OVRUnable to run badblock utilityError limit exceededDisplacement = No track descriptor foundInvalid switchError setting diskette densitySkip displacement = ECC position = Error reading track descriptor recordError writing track descriptor recordTrack descriptor record: Manual defect information: Unable to read any Skip Sector FileSkip Sector File is corrupt, reading nextMarked defect in Skip Sector File ** WARNING - Error rate may increase**WLT switch missingbZ&L  dL ^LЕ L `H KEHTwzOwR)00{TEKE55551200{\ED557i:)*00{dEKE55551200{lED557i:)*00{tEKE555512 F T F | F DK [DB\DB2/\DMi [DM/ [DR`7 [DR/ [DR7 \DRD/" \DRav 2 \DL( [DLP [DY\DY\DY\DP@ \DP8 \DU(\??w W      &7v Ү  %w %W % %DMx  Qk rT & ~%DRJ5 u * NRT  W Tѝɝ  䴱Q  Е.Qw: 0@` m$@ 76w4%DL%DYt" Dw |w 2w lw Q  w Tw  R j L ȥ# H F‹>7 7 h L w`Д&  m %$ 7 ̳ 3L L az Ћ w,RV pVXVxdVp %DKh%DP`  7 H 7 7!B'1<R z ew t 4 0( @R     7 7 7 nQ$W"CE f%w@B  z-%7   -x -n-h7 ` Z-V НıН ݼ w?:RL PPPP L   ew %RP ew w ' UD$BA "&( U BQ :Е*  w z ť ť 0B nAa&3'&1 ^(_ ^(_ ^(_ ^(_ ^Ve ^4_ ^4_ ^`_ ^P_ ^(_ _(_ _(_5ew 4, Bv     5Bw^ 5  5 2  UE ^[ \\0\^E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f 00{|ED557i:)*&  m  f A N  %&   `@ ` B   & A @    &ff  (_^^0(_^^3(_^^4(_X^^6(_^^7(_H ^^=(_H^^?(_H^^@(_^_A(_4^_B(_H^_C(_^^J 3L L ɋɥ ɥ ɥ ѕ 7۬ ֬Ŭw `cL c7 f  T wulxw f_7 \T75E7+%DY4A%DL,=%DU$9 %DM%DR.%DU*%DY%DU߫%DY7ѫثѫʫzëR wDYR HB%DM%DRx%DLpYWw% >7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &fb     8  " .$ B  8̥ZḀ90     VEVERIFYNOVENOVERIFYMANMANUALOVRDENSDENSITYWLTERLBADVEVERIFYDOUBLEHIGHSINGLELOWbcc ccc!c%c*c2c6c:c>cAcHcOcTc[c҂_҂__c:_/ccccccccc:dBd-c@,d4dcc`c_c_c"`c=@`c@`cV`cV`c‚d`:‚l`:‚t`:†|`cY`c`c=̆`c=̆`cw * w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  JL  f @ 5 6w ެ ¬  f H-D ׆ >: L   L t e  x     -FL   ` 7 $ (  m|w vL   lL @  5wޥ  ۆ  7 L ,A R  -p7 L Ĥ 5w^  e ^L , T  n e7 j $L ^A  R       2 H-* 7 Z%"7 7 7 L 2 d L Z ƣ  L $䆇T ]U@@E@P -7 RT& ~D aaeL EPCDU L-H7 @  w  7 0L Z-r RجRT @W T0ɝ0ьѝ(ѝ"Iѝ e,w &  d 00{EKE555512/1 @/ 7צצB_  J@:_  ~B_  J_ (7 L  m L 7 n  -r7 L ƞ F6472m*, 7!$ ewm 4 LL , # 5-5-5- &f  #mm rm-xEURT EP-f_Re U -U m7 B_ 7 n7 l7 jL wp m RT FMUu     l݆xCtp R_T_ ֛ ew ' wfT_ @P j_ 0H -T7 DL <  L " -7 L dZ_T 5wj6 , ewm T   - ߫h b ,j7 b L  <L  :6   |" x , h^cX "F><7:m24 7!, ewm < TL , #5-  5-5-&f mm DeXwR -,"w x /}- U h URT EP0 0 m$7% L w  R%Uxr5 5  & N $ ԩ00{E|E557i:)*The RP07 is not supported at this time (_  7 H v,P d' :L ˬ-7 FwD7 V7 P $ 2F B a  w4L E   4 ֤ L U$  L  :L d > 6wЬ j L edw^eR ҆ 4$ L z ewe L 4 ` "1,1, Lee ew    ]m~ ܫ<vThe RA80 is not supported at this time (_  & & & & f&& F & ΕH 4ڬ4ҬwT¬ wDw4zw$6wwwS:M v7 _ 7 7 L  8 &  e B dw7~TQHثdwZȫwJdw:w*_ww xwhwX Pwڪ  |(,K Y ^TITISYSYSYCLOV~0~Z45|0005.03  6 " " " "5@d5\ D "5Lj 4t n E@7 :7\w`" 00|EKE555512  ?z7v j7dpbeBe RRRRRRRRRRw 4 E DW!d! EP V` ~! $xP A x& & &  f&& & & Ε )!%F>6 v3 n3 f3 " w 4 * ` w@,Arw 3&flj &5  HBBl D`7 1,1,7&&672beBe 22,5 b,# p5`  25b.f&%67~5    > \8 n3`    1BSYSYSYSYTICL8' FTB>P=Oo+[.Lh@]| " < S !A!v!!!!!*"d""""#R####^SY0 N DAJ LB J j ` p xQSY d  SPABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw +&& D¥%  B&ХVA $ C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf 82 & e26& e2/& e.*AHŀ ȕ Е Е Е & e1 & e1Е A %& e1A  Е A EA <EЕ A A   $Е.  AЕ; 1    &3w 25 funhj uhdB$ 0jwaw< 8 v8w &  3*AdBbAep& f  2 P aAAf@pnp $6C*8֋ 288*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ (ŀajTI& af* n*`V @e,w 0jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ V'DlljaCeH###33 & -8 *>w ~/ 8jDl@ -TeBT85l@ &@( D 'eB& / & @# 0& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ w % ť ť 0B 4%Aaw X%D&& bЕ- eaePPPЕ-$w (%D  &Е. ce $ Е:   +Bw $' UD$BA 07&( U BQ +Е*  00|EE557i:)*& & @( >$f  e ee e SY6TDAPEAPFP@PMMPCPPFTB -- *DIAG*-Illegal Get Command Line error codeCommand syntax error%N%VARequired input file missingIllegal switch%N%VANo dynamic storage availableIllegal error severity code %P %P %PCommand I/O errorIndirect file open failure%N%VAIndirect comand syntax error%N%VAIndirect file depth exceeded%N%VAI/O error on input file %XOpen failure on file %XFile %X has illegal formatModule %2R multiply defines P-section %2RModule %2R multiply defines XFR addr in seg %2RModule %2R illegally defines XFR addr %2R %PP-section %2R has overflowedModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2RSegment %2R has address overflow: Allocation deletedAllocation failure on file %XI/O error on output file %XLoad addr out of range in module %2RTruncation error in module %2R%D undefined symbols file %XInvalid keyword identifier%N%VAOption syntax error%N%VAToo many parameters%N%VAIllegal multiple parameter sets%N%VAInsufficient parameters%N%VATask has illegal memory limitsIllegal logical unit number%N%VAIllegal number of logical units%N%VAIllegal number of active fields specified%N%VAIllegal filename%N%VAIllegal device/volume%N%VALookup failure on file %XIllegal directory%N%VAIncompatable reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%n%VARequired partition not specified%2NIllegal PAR reservation%N%VAComplex re00|EKE555512location error-divide by zero: Module %2RResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask requires too many window blocks%2NLibrary references overlaid library%2N%VA%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NSymbol %2R not found for patch %NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NFTB -- *FATAL*-'&1 R*S R`V RR zR\ rRRh5ew , Bv     5Bw" f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ F$ WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e00|EE557i:)**4*5V5  5 2  UE zR$ 55f$xRE U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&f w *8I *=)98 6 eB &&  U \**e *Nlv ΋*.)  & #!)&eP(e && p* dww v(CB C DBe ?DBe(e$2e  %[]%<>  (1 >w  ) h 8C * ) *w*   n ep p  ȥC  =  ȥ 0*ȥ = Eե^ Aȥ e@ v Ep |p  , J *` X C#   D w B( D 8"!#($ĥ ĥ w  0 *0 @Q$    0 40 60)) @  wx#  wf&*w d #( P) @#**fff  &*wF. J35(8e$8w22&(e j %p8q #( Z *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u (# eB&B l B P *  eBe>  # #D #&0 #   |0@e 6@#040 6w0!p2w  ) J * w46l0 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E 82e&( J 0 0 0 80 B0 0 0 0)#0.0+1(e  \%&p*w f( f)f ) . d .8Ae f"( UCɗ&+(e$&% &ff **f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ eB  8 $&w 8*   w *D  w@w ( D ~ 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   wx#  wf&*w #( P) @#**fff  h&*wF. J35(8e$8w22&(e %p8q #(  *O*)@#0l @# 02ȕ00|EKE5555128 ^00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ u # eB&B "B  d* Z eBe>  # #D #&0 #   20@e 6@#040 6w!p2w ) 68C * ) *w* Lep p  ȥC  =  ȥ 0*ȥ = Eե^ Aȥ e@  Ep p  8 V *`)wZ C# `   D *) l0, *) $ )*)0,40,6 w   |w `  T,,  *e6p 4 b8    )  8   **  DP5R RRR 141612epl2l0p `Mw    f 8u   f &* *. 00l  0 *w eE D` bl lrw   B eE"s    s-  Csl0f(& e %&&eH U   Ef p  w 6 p 4 0`p df 64 46 h e*w. &   `@ ` B   & A @     ) !f z T e) . e6p 4 08*w*@<#8w x /$ ,:T < U@% DD%][%><wZ  w1  %,,:4 w *D !UqqC ӥ:  Ce    *w 4*  )Ĕ%.&%;D  5)5@DD ͥ*Ce a%wUX5@ 5U U*U  5@XU@5 U*U  ʥ*%C!.D` *weC5U5  5 5@e*w BC "&0(*5e "fSYqq1յ<pBՋ.p0p2&*E%0*w> 8  0**w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  b&f D E/fC A B f&  BeA @0 (@0 a@eA  B0 AB  |f  RC @*,*1 : 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe00|EE557i:)*    : $ L ( La Ta  @ `W!ZW!AW!9W!0@ RRzR*RzRR4R,zRRKR0zRR_SSSSS SODT.OBJLB[1,1]SYSLIB.OLBw N < pwR `R  $UFR  U@Xt7 n  w hF0 b 7H7J d & 9` 5bR S&$p$ p$ bw`9w:  ~R rXR 7采eB$&5 bR<wf   9` ƭ,\NLa XBAbpd fwh` ҥ/ ʥ -ʥ*ʥ/$T`¥¥¥ ¥ ¥ef Ṵ~NU?̯NU& & Am 7 7 f7 T7 7 H7   w81 F ֭7 X P   7 7 $$N7 (7 &0 bt0 bRbͫeAXVw 7 ~h7 7 7 7 ? ߀ ߨ5b j f  w~` HB X` e5vd p7  ^ȥ;(d ¥=7e)ct#t-e !d87  ȋ-ȥ;*E(d   ¥,¥! ¥;¥: 5 r !T (dX &  ¥;¥!ww vw lN p r7"7,97EX03"3,'5@5E-    B`   E  A $΋  $pp@Up ^7Z1$p B ̪w |@pdf *5 @ B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e ƨ& ĵ V 11@ Be  AZ    4ȋ*& ȥ+ȥ-  U w f  u  x u l ¥ ¥ ȥ ȥ  ?_?=F7\bpm  %X V 1p5(5x$ F5  =   wR&Q " 5ު% 5Ҫ5݅ZZ=ՀZ 7Z ZقmZΩ 2܂ZZ  & & X*5@t[5t[  N N65<- 5 J!t\JH 5  Z BZ.     ЀZ w Fw@ :pp55 5@U@p` p`|\[[[ A ĥ^Y5 NE B B B B   Z ŒZ0Խ7be 7\ SYBe \eB e  yB,D.& C! U@5~    wp <D*# Lb V , c5KUU5U5 U@Q$@P  5U@  e)\5555u u C55a 5a ` V w%E7 \ 07 PG^A5RUN5@$5 X^^`^ 52PA=&2B Be@E?B B B@$5  =C\ #qwئ\ AmgwAw`_C5 55E R,  U%P  x V V0EU5U Up (e)w\QQ &$&&$\& (&$% Be>w: b7 w P  Fw @eB$&wROUdj`RWTdj`SVUdk`VdB .bb  &• H  00|EKE555512 ; w ; !,:& u@5e, RNOWE 5& , ! [ ]   )@ 55 ,.@ XN` ``ȕf *5 5@ Tw hw `w^ -ЋSVY&ZYYYYYYYY4ZYY4ZYYp``Yp``YaaaaYaY4ZYLB[1,1]w΢@$  7"27$7  e |?7 PAPАP 0we)A  0 "@Rw2w wwww#W#w1Twƞ&a$b?  a*b#LwabQa~b:dab%SaXcjLpbXc[q% bXc[qjL bXczjLbRc[qzbRcyxb\c;}Dbdcybnc/^d Enter Options: FTB>w ф(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$f&  (‡w w:w w0w w(B[E 7BeB[w2w 5>0[ 6  7:5  4 | V ([pnZ4 7  @[7e e? m "f&$E%$| 7 B[EI- q- b- *.J- r- @ C` EP" ,eB  47ʰ      w`  ĭv n  IP @mLw J>JBm4, 4 $ eB[B & f& & B[& [& Ε )` w[0 0[&    2  ,w[R [B1  UUVW WW&VYYY[44!1`wV,   Bµ µ "[5 TF j8 v[ppp p  & B 2,2,1&LEE[ ^ ֪eB  7% 25r%F z l5R [[ wƪCœ5.5µ tl B55U5 EE  l w'5ĭ5 5  > w[ ҩwN r z|pN -\[ L55$ 55e ̨  5 ެ7ڬ1$p  @ & H  "55 5Ո P 5PHww C5% Χ H ! jhJ   .C %p`$ ֧ p ݃; p p5  ~  r & 4ww 07 sN0 t00|EE557i:)*00|EKE55551200|EE557i:)*w 5`%BVE@& ŀ05  e5#w l,0# ` $Eز  77Е `SZSw 5 (TS  df c 0e %5w z wH wJZ77l7 "mDx" 77S=S  e>7z7`tlH` %  V īExN Ʈ em,@7e 7`e5b $5bemd^   6%p SSVmNm \  %Ү̮5b@ʨ7D kCD5EeSB X eSEE@Ce% &%([q  Cek7 %0CD5EfeSm   j` TEC ” eST  8? LkCD5EB r S  U& && & S& U& Ε )$ `wL*** Root segment: %2R%3NR/W mem limits: %P %P %P (%U.)%NDisk blk limits: %P %P %P (%U.)%NOdt xfr address: %P%NPrg xfr address: %P%N%FFile %X memory allocation map%Nthis allocation was done on %Y%Nat %2Z by FTB version %6A%4NStack limits: %P %P %P (%U.)%N%4N************%2NUndefined references:%2N %2R%NIdentification : %2R%N%2NProgram section allocation synopsis:%2N<%2R>: %P %P %P (%U.)%N>>>>>>>>>> Undefined reference: %2R File: %X Module: %2R%2N  B7X (Y :=Y (eeYw w HXTRY   Y  m쩊 mY 5 ƶĶ ?Y PDZ r%aY 2%wY [Z zE$XRRJJ  b mpmlZ *  eBRRR R RXx 8`xp J` Xw Z $E%$wFwBb -XTPZ X Rw :, w 0w ,$m ew0f& BUE m ,e@  7@ew 7 $7+wɵ#ɵ"wt6pe4e6 ($e2h r ɕ m %e4e6 (e0  < )63 wɋ wpe4e6 ($e2h  w` )0`w^                                  )ފgsw &5@H# ` ` ܙE@5X Nm 5@E5> 89f"e\e!e 5f F2* eA  j5  X͇w >5@Μ    $5?E;C $  <$ m؛ Kl l 0 U5P%J%` x ` l V5@ ^   Al m6 w 2m $@ 7* 7, e7̧    " h3 3 N333  E@ (33 53 @` D`D@D& EʚP\(\*\,\.S$SS SSS"UU p<S:SSlSSSSvSS S UUUSpU<VNTI\~TI\CL VNSYVNSY[gNSY[hNSY&|&  f&&  e#e|& f&&G& & & & && '&&@GVhjTCf** aB ¥*W W c@ %f& )Pp")&y@G\ xClcp\,1z\?y\5!\w l Fn832cd& & & B  2OΕ   N Υ$Ε  22Υ   ؃v Ε f ڃe * e*w0,  <  P00|E}E557i:)*) ) ȥ ȥ l 0l  ȥ ćȥ ȥ ee@ r- d& E ep ) w ȥ,  jw  Jwr݇B # f  `* VwFϱ)0406 l0 w 0,0w  8 !Հ)w@*ww L$0,0w 46  L)0406 0 * 8   * `  4 6 e6p 4&*&4&6 64 wr%64 2 6  l0 & Z46 ݰ64 :)0406 0 *0e6p 4  |(,?\?\q Y &[q Y JTITISYSYSYCLOV0Zd+-0005.03  -    5@d5\ D 5Lj ,t ,n E@7 :7\w`"   ? 7   7 pbeBe RRRRRRRRRRw + E DW!d! E` f` !e P A +& & &  f&& & & Ε )!%F>6 + z+ r+ w ~+ * ` w@,Aw *&v|z &5  HBBl D`7 1,1,7& &672beBe 22,5 b,# n*`  25b.f&%67~5    > * )`    )SYSYSYSYTICLH' FTB>P #?Sp &>Y*Q!AZsI_z@r 1N00}EKE555512An5 ^SY*@ ^ DAZ LB Z z p xQSY d  $ SP#w *$5 funhj uhdB$ 0jwaw< 8 v8w &  R$*AdBbAep& f  &$ P aAAf@pnp $C*8֋ #88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ "ŀajTI& af* n*`V @e,w N"jjlj ɥ@@aujk,bp "5f fˇ ȕ "‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ !DlljaCeH###33 & !8 *  w ! 8jDl@ !TeBT85l@ $!@( D !eB&  ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@SYF&DAEAFP@MMCPFTB -- *DIAG*-Illegal Get Command Line er00}EE557i:)*ror codeCommand syntax error%N%VARequired input file missingIllegal switch%N%VANo dynamic storage availableIllegal error severity code %P %P %PCommand I/O errorIndirect file open failure%N%VAIndirect comand syntax error%N%VAIndirect file depth exceeded%N%VAI/O error on input file %XOpen failure on file %XFile %X has illegal formatModule %2R multiply defines P-section %2RModule %2R multiply defines XFR addr in seg %2RModule %2R illegally defines XFR addr %2R %PP-section %2R has overflowedModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2RSegment %2R has address overflow: Allocation deletedAllocation failure on file %XI/O error on output file %XLoad addr out of range in module %2RTruncation error in module %2R%D undefined symbols file %XInvalid keyword identifier%N%VAOption syntax error%N%VAToo many parameters%N%VAIllegal multiple parameter sets%N%VAInsufficient parameters%N%VATask has illegal memory limitsIllegal logical unit number%N%VAIllegal number of logical units%N%VAIllegal number of active fields specified%N%VAIllegal filename%N%VAIllegal device/volume%N%VALookup failure on file %XIllegal directory%N%VAIncompatable reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%n%VARequired partition not specified%2NIllegal PAR reservation%N%VAComplex relocation error-divide by zero: Module %2RResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask requires too many window blocks%2NLibrary references overlaid library%2N%VA%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NSymbol %2R not found for patch %NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NFTB -- *FATAL*-'&1 < ./ 4 .2 , ./ $ .^9  .D5ew , Bv     5Bw 00}FKE555512!c+d,5  5 2  UE z.v -- x.E U 5@*& E& & f&ËDef Ë )̋U&f &ff  /.z./$z.."/-z..9/z.. | H,X $L8<_///// /ODT.OBJLB[1,1]SYSLIB.OLBw < pw,/ `/  $UP/  U@4^5t7 n  w` 0 b 7H7J d  9` &5bj/ v/&$p$ p$ bw`9w  ~/ rf5H/ 7采eB$&5 bH/<w   9` f,\NL,a BAbpd fwh` ҥ/ ʥ -ʥ*ʥ/$1`¥¥¥ ¥ ¥ef UlԱ0\1?l1& & Am&X*N 7 7 7 7 V7 v7 PL  w1  v7 h P   7 7 447 7 V0 b0 bRbͫeA2w t,:7 " P7 7 7 .7 ,? ߀ H5b j f . RwJҷp H&B X` e5vA p7  ^ȥ;@ ¥=7e)@t#t-e !@87  ȋ-ȥ;*E@   ¥,¥! ¥;¥: 5 r !1 8Ξ@X &  ¥;¥!ww vw l  r7"7,97Eh03"3,'5@5E-    B`   E  A $΋ Z pp@Up 714p  l·w @pdf d, B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e f̱& ĵ V 11@ Be 6̱ AZ    4&BBȋ*& ȥ+ȥ-  U w f  u  x u l ¥ ¥ ȥ ȥ  ?_?=.7\b00} FE557i:)*^mX  % V 1<5 (5$ $F5  =   wͷQ  5~% 5rV566=4TՀ6 76ʹ 7قm6n 266  & & h*5@t85t.8  N N65- 5 J!tp8JH 5  6 B6.     6 w Fw@ :pp5^5 5@U@p` p`|8 888 A d5^ :̇E B B B B   6 Œ607be N7b9 SYBe b9eB e  yB,D.& C! U@5    wp <D# b V c5KUU5U5U@Q$@P  5U@  e)h9555`5u u C55a 5a   w%^E7 \ 07 PGJ;A5U5@$5 X\;R;<\; 5PA=&2B Be@E?B B B@$5  =Cl #qwx\AmgwAw`_C5L 55E ,  U%P    0NEU5U Up (e)wh9QQ &$&&$b9& (&$% Be>w b7 ɇw  `w eB$&w@RO@>  &• H   ; w ; !,:& u@5e, RNOWE 5& , ! [ ]   )@ 55 ,.@ :< D<ȕf d, 5@ 1wPķ w w^ -ЋSVd66d6d6d6d6d6d6d6d66j6d66j6j6(>d6 >d66d6LB[1,1]wnƇ@$  7"7$7  e ?7 PAPАP 0we)A  ppp p7b@ ; D:$5?15?-B B B @5 $= 55  wrwpwŷŇ@Rw2`w wNƇwVwTƇw#W#wŇ11wf&N>>?  Q>>#Lwc>>Qf>>:dh>(?%So>?jLpu>?[q%{>?[qjL}>?zjL>?[qz>?yx>?;}D>?y>?/^A Enter Options: FTB>w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA .EAa$f& &  m  f A N  %,T8 $[7E 7Be7w2w 57 6 7:5  4 |  (7XVd74 7  77e e? m "f&4E%4| 7 7EI- q- b- *.J- r- @ C` EP" ,eB  <47j 6     w`  dфv n  IP *@mLw J>JBm4, 4 $ e7B & f& & 7& 7& Ε )` wб70 07&    J2  ,w7R 7B1  <2N2r23342@6Z6^6744!1ւ`w,   Bµ µ 75 T 8 7ppp p  & Ѐ B00}FKE555512 2,2,1&LEE7  veB  7% B5% Ђ l5R 77 wfCœ5.5µ tl 55U5 EE  l 4w'5d5 5  >B w7 rwN r z|pN HЃ-\7 "L55 55e l  5 ~7z14p  ̓ &  "55 5Ո ` 5PHww C5% n  H ! RPJ   .C %p`$ v p ݃; Zp p5     & 4ww 07͇ sN0 t00}FE557i:)*00}$FKE555512&  m  f A N  %w (5%E@& ŀ05  e5#w 0# F ` Ex  67V7PЕ //w r5J /  df c 0e HҖ %5w  wHwJ77T7 m" 77&0=,0  e>7z7`t|H` %4  V dE6 f pem,@7e 7`e5b $5bem2   % 60<0mmD  %rlҡ5b@Z7D $HCD5EeT0B h eT0EE@Ce% &%([q  CehH7 %CD5EfeT0m   jp TEC ” eP0T  8? HGCD5EB r T0  T2& && & T0& X2& Ε00},FE557i:)* )$`w L*** Root segment: %2R%3NR/W mem limits: %P %P %P (%U.)%NDisk blk limits: %P %P %P (%U.)%NOdt xfr address: %P%NPrg xfr address: %P%N%FFile %X memory allocation map%Nthis allocation was done on %Y%Nat %2Z by FTB version %6A%4NStack limits: %P %P %P (%U.)%N%4N************%2NUndefined references:%2N %2R%NIdentification : %2R%N%2NProgram section allocation synopsis:%2N<%2R>: %P %P %P (%U.)%N>>>>>>>>>> Undefined reference: %2R File: %X Module: %2R%2N  B7L5 (5 :=6 (ee@6w w L5<:t5   5  m͊ mH]6 5<  5 `6 %5 B%5 6 z E$L5RRJJ  b mm 6 *  eBRRR R RL5 p ` L5w f6 4E%4wFwBb -XTP6 L5 RRJ7wXw BI - % U%@eA DA 6 Bpp0 e U%H !  rD   ?|7x zen *݂be@5e5e,e"7 l eL HD  " P  aU%nIe =   }l=lf˷ bIAe    7ʶʸܰmʪ7 7Ӏ !m  d2B% %  `lm<ʇaa   H ! vtPP A Bw   %% x;6@;;d<=;@5@.;T ;  ; 55Z5Rw5ɪ@. lm7 `w kgw K_mPAQ  `RRRRRRRRRRRRRRRR w `RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR w|VL B J Bm4J wN@  ww<5 @7  Dm  =w w|6@===>>>>>> >6@&>F>L>>2> @@lm9 R8 @@- :) . (    & @@e   AA@`TB50ZB5 &fe ÁI rw AA@`7@ lm7mv jmƀ w\)0@   ? wD?H?F?d?j?R?`?X?L?N?@?6@6@???? d. J J D(Db@T"@  H ‚  I  J    w    @ NeA @ : @@@`"  %wT d @m\   ׂ` " 0   @ mA @l;QQQQ;Ă  p`\5@ @w T5(  <D PE&mNĀee@  @@  ĂfE w 0%7 | JDÁ ҋd  L AA0B ʋʵ#ʵ"2հA4e6 (AD   7 H w >w :, w 0w ,$m ewпf& BUE m˂ A@  7@ew 7 $7+wɵ#ɵ"wtpA4e6 (AD | ɕ m %A4e6 (A0  .< )63 wɋ whpA4e6 (AD  w` )`w0^                                  )ފ(Dsw "5@# ` |E@5X Nm\ 5@E5> 8900}4F~7F555512f"e\e!e D 5f j2* eA * 5  w 5@n    $5P? E;C $  ܽ$ mx Kl l 0 U5%J%`  Ђ`   5@ ^ D  Al m־ w m^ $@ 7 7С e7LJ    ¼ h3 3 N333  E@ (33 53 @` D`D@D& Ej`T9(V9*X9,Z9.P0$.0>0 <0@0,0"V2V2 <H0:00K0|S0.F0B0D0&0N0 L0 ^2*T2\2<0`2<VNTI\~TI\CL VNSYVNSY[gNSY[hNSY@GfxzdC*f** a&B ¥*W W c@ %f& )P")&y@G\9 xCHcpT9,1zV9?yX95!Z9&  m  f A N  %\0t|(,]]wY &[q$Y  KTITISYSYSYCLOV0Z,.0005.03   2 6 j ~5@d5\ D 5Lj t n E@7 :7\w`"   ? 7   7 pbeBe RRRRRRRRRRw 0- E DW!d! E` f` !e P A & & &  f&& & & Ε )!%F>6 l d \ w h * ` w@,Aw ,&v|z &5  HBBl D`7 1,1,7& &672beBe 22,5 b,# X`  25b.f&%67~5    >  `    SYSYSYSYTICL00~P #?Sp &>Y*Q!AZsI_z@r 1NAn5 ^SY*@ ^ DAZ LB Z z p xQSY d  $ SP#w ~%5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp &C*8֋ X88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w #jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *  w d" 8jDl@ TeBT85l@ @( D eB& & & @# F& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@00~DF7F555512SYF&DAEAFP@MMCPFTB -- *DIAG*-Illegal Get Command Line error codeCommand syntax error%N%VARequired input file missingIllegal switch%N%VANo dynamic storage availableIllegal error severity code %P %P %PCommand I/O errorIndirect file open failure%N%VAIndirect comand syntax error%N%VAIndirect file depth exceeded%N%VAI/O error on input file %XOpen failure on file %XFile %X has illegal formatModule %2R multiply defines P-section %2RModule %2R multiply defines XFR addr in seg %2RModule %2R illegally defines XFR addr %2R %PP-section %2R has overflowedModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2RSegment %2R has address overflow: Allocation deletedAllocation failure on file %XI/O error on output file %XLoad addr out of range in module %2RTruncation error in module %2R%D undefined symbols file %XInvalid keyword identifier%N%VAOption syntax error%N%VAToo many parameters%N%VAIllegal multiple parameter sets%N%VAInsufficient parameters%N%VATask has illegal memory limitsIllegal logical unit number%N%VAIllegal number of logical units%N%VAIllegal number of active fields specified%N%VAIllegal filename%N%VAIllegal device/volume%N%VALookup failure on file %XIllegal directory%N%VAIncompatable reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%n%VARequired partition not specified%2NIllegal PAR reservation%N%VAComplex relocation error-divide by zero: Module %2RResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask requires too many window blocks%2NLibrary references overlaid library%2N%VA%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NSymbol %2R not found for patch %NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NFTB -- *FATAL*-'&1 0 0 /| / / /H 0 0, 0T (01 (0<4 /8 / / / 0 /$ :00 0\ /0 z L0: r / j / b 0t Z L0.F R /X J /L B /<5ew &, Bv     5Bw 00~LFE557i:)*!,-50  (r- DUt-E D  E E ܁/v .:.v!/&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &ff  &[q &[q`/// /0/`0 ///t0 0(00000:00#0-0L00:00(00//_00000 0ODT.OBJLB[1,1]SYSLIB.OLBw < pw0 `0  $Uz0  U@6t7 n  w z0 b d7H\7JX d Z 9` 5b0 0$&$p$ p$ bw&`9wn  ~0 r60 7采eB$&5 b0<w  ~ 9` ,\NLa BAbpd fwh` ҥ/ ʥ -ʥ*ʥ/$~2`¥¥¥ ¥ ¥ef LUӱ]*3?*3& & Am 7 7 7 7 7 7   wl1   7 h P   7 :7 :4N4JH7 \7 Z0 b0 b(RbͫeA44w \47  7 7 7 7 ? ߀ 5b00~TF7F555512 j f  wзp H&B X` e5PvBD p7 : ^ȥ;B ¥=7e)nAt#t-e !A87  ȋ-ȥ;*EB   ¥,¥! ¥;¥: 5 r !~2 ̞BX &  ¥;¥!ww vw l  r7"(7,"97Eh03"3,'5@5E-    B`   E  A T$΋  Xpp@Up 714p  ͇w @pdf - B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e ʱ& ĵ V 11@ `Be ʱ AZ    4! ȋ*& ȥ+ȥ-  U w f  u  x u l ¥ ¥ ȥ ȥ  ?_?=7\bm  % V 15(5$ F5L  =   w̷ZQ V 5% 55a8\8=Հ\8 7h88̴ n8قmh8 2^8\8  & & h*5@t95t9  N N65p- 5 J!t9JH 5  ^8 B\8.     \8 w Fw@ :pp55 5@U@p` p`|`:x9p9p9 A 5 ʇE B B B B   ^8 Œ\80P7b2e 7: SYBe :eB e  yB,D.& C! U@5    wp <D^# lb \V ` c5KUUJ5U5>U@Q$@P  5U@  e):5555u u C55a 5a  0 &w%E7 \ 07 PGwn b7 "ȇw  w eB$&wRO1BF>RW0BF>SV1BG>2BB .??  &• H   ; w ; !,:& u@5e, RNOWE 5& , ! [ ]   )@ 55 ,.@ *> <>ȕf - 5@ ~2w· w w^ -ЋSV7877777777877877L>>7L>>7>>??7?787LB[1,1]wŇ@$  7"f7$7  e ?672 PAPАP 0we)A d pppp >p7b@ ; :$5?15?-B B B @5T $(= 5:52  wwwrķFVć@Rw2w wćwwćw#W#w&ć1~2w&?@?  ?@#Lw?\@Q?Z@:d?@%S?4AjLp?4A[q%?4A[qjL?4AzjL?.A[qz?.Ayx?8A;}D?@Ay?JA/^B Enter Options: FTB>w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA .EAa$f& &  m  f A N  %00~\FE557i:)*f]9E 7Be9w2w 5r 9 6 T7:5  4 |  (884 7  97e e? m "f&4E%4| 7 9EI- q- b- *.J- r- @ C` EP" ,eB  47    j \ w`  τv n  IP *@mLw J>JBm4, 4 $ e9B & f& & 9& 8& Ε )` w<ϱ80 08&    2  ,w8R 8B1  33344n54777844!1$Ղ`w,   Bµ µ 85 T 8 8ppp p  & Jπ B 2,2,1&LEE8  eB  7% B5% ΂ l5R 88 wCœ5.5µ tl v55U5 EE  l w'55 5  > $w8 wN r z|pN ΃-\8 L55X 55e   5 714p 4 t̃ & |  "55 5Ո ` 5PHww C5%   H ! J   .C %p`$  p ݃; p p5    & 4ww $07Ṙ sN0 t00~dF7F55551200~lFE557i:)*&  m  f A N  %w 5%VTE@& ŀ05  e5<#w T0# ` XE  77Е <161w Z5 01  df c 0e Ж %00~tF7F5555125Lw b HwH@wJ<777 Vmx" L771=1 H e>7z7`t2|H` %  V E  pem,@7e 7`e5b $5bem   j% 1HBR1 mmT  %ѡ5b@7D ICD5Ee1B h e1EE@Ce% &%([q  CeI7 %dCD5Efe1m   jp TEC ” e1T  8? (ICD5EB r 1  3& && & 1& 3& Ε )$`wL*** Root segment: %2R%3NR/W mem limits: %P %P %P (%U.)%NDisk blk limits: %P %P %P (%U.)%NOdt xfr address: %P%NPrg xfr address: %P%N%FFile %X memory allocation map%Nthis allocation was done on %Y%Nat %2Z by FTB version %6A%4NStack limits: %P %P %P (%U.)%N%4N************%2NUndefined references:%2N %2R%NIdentification : %2R%N%2NProgram section allocation synopsis:%2N<%2R>: %P %P %P (%U.)%N>>>>>>>>>> Undefined reference: %2R File: %X Module: %2R%2N  B76r (i7 :=7 (ee7w w 66   6  m ̊ m7 5 B@ 7 ` 8 %=7 B%S7 78 z E$6RRJJ  b mmb8 *  eBRRR R R6 p ` $6w N7 4E%4wFwBb -XTP7 6N RpRJz8wXw J - % U%@eA DA  pp0 e U%I !  rD 2.  ?7 e ۂbe@5e5e,e"7 l e ,JD  " P  aU%Je =   }l=l~ɷ 0KCe $   7:ɶ4ɸڰm(ɪ7 7(Ҁ !m  3B% %  `lmȇaa $  H !  PP A w v   %% xL=AZ=,==>,=A5@=T = N = l55Z5Rw5LȪ@. lm7 `w kgw K_mPAQ  `RRRRRRRRRRRRRRRR w `RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR w|VL B J Bm4J wN@  ww<5, @7  Dm  &?w w|AH?\?b?t???@*@J@?A???d@? @@lm,9 R8 @@- :) . (    & @@e   AA@`C50C5 &f*e fI rw AA@`7@ lmF78m jm(ŀ w\)0@   @ w@@@@@@@@@@nAhAAA$A4A A.A d. J J D(Db@T"BB  H   K  J    w    @ eA @ : @@@`"  %wT d H @m  Ղ` 0   @ mA @l=QQQQ=   p`Z5@ @w <5  <00~|FF557i:)*&F PE&m€ee@  @JB  ‚fE w 0%7 |  ҋd  L CA0B ʋʵ#ʵ"ӰB4e6 (CF  7 H w >w :, w 0w ,$m (ewdf& BUE mrʂ C@  7@ew 7 $7+wɵ#ɵ"wtpB4e6 (CF z ɕ m4 %\B4e6 (B0  ,< )63 wɋ wpB4e6 (CF w` )`wļ^                                  )ފEsw j"5@|# | ` E@5X Nm 5@E5>: 89f"e\e!e 5f h2* eA  5 4 هw 5@    $5? E;C $  p$ m  Kl l 0 U5%J%`  |ς`  5@< ^ ػ  Al mj w v2m $@ 7 7Ρ e7HƇ    V h3 3 N333  E@ (33 53 @` D`D@D& JE`:(:*:,:.1$11 111"33 <1:11|1.11111 1 3*3313<VNTI\~TI\CL VNSYVNSY[gNSY[hNSY@GfxzdC*f** aB ¥*W W c@ %f& )P")&y@G: xC pE;p&  &ftl  7wl7wle@E?cs%&1w*?T, )0Y  SYSYSYSYTICLOV~T0Z(|SYSYSYSYTICLOV( 0/0T?Tw*0XXw*vRw*wRw*xRZ < %3Z  ŀ x w `` e |FЕ=e |e ( Е Е-Е-Е  E `AI 8Ý --@C C& & &  && & & Ε@ C& & &  && & & Ε@  wABDEFIMNOPQRSTUXYZ<> HPjll` JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC & & @( f  e ee e w && D¥%  B&ХVA  C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf V & e86& e$/& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA F Е A EA EЕ A A   $Е.  AЕ; (     w  ť ť 0B00FF557i:)* Aaw nD&& bЕ- eaeMPPPЕ-$w >D  &Е. ce X Е:   RBw ' UD$BA &( U BQ JЕ* MCO))'&1&wLw R,D B A, ,5eaE5 EE f & & 1     &w*5  5U  @4 E U *5@*& E& & f&ËDef Ë )̋U&  m  f A N  % 5 ߥ& *  + 23E Ew Z   Е-   0@A lW e`fÊ    E &f &ff &   `@ ` B   & A @    < w*?T< `  w*vR<  * w*wR< @ w*xR%R%O: ** DISMOUNT COMPLETE **< MOUNT %2R %2R ON DRIVE %R%O:PLACE DRIVE %R%O: ON-LINEWRONG VOLUME MOUNTED ON DRIVE %R%O:EXPIRATION DATE NOT REACHED ON VOLUME %2R ON %R%O:%N MOUNT ANOTHER VOLUME ON DRIVE %R%O: OR PLACE ON-LINE TO USEREQUESTED ACTION FOR DRIVE %R%O: NOT COMPLETEDREQUESTED ACTION FOR TASK %2R ON DRIVE %R%O: NOT COMPLETED%N PLEASE COMPLETE OR ABORT TASK< Y s  7 |2,Rv Y d H?TISYCOSYTICLTILBOV00FF555512dbt *6Hjnprv*,.0j2DFvz"$&j1 HEL -- Command input error ֡  ġ() ApY5 U 7Gԡ wp] ֡7,& 5 UءХL U)ȥL&ȥP5\RE @E E wU *\ U5@ 2\wX xN5J FA<   w U E 0 0 5Hm"  &  jLU :E 5@5 Nxwt ы ȕ 4 tw L< &f) (% 4YWt7 \?60 0&  0fB5 %HTE!? [0,0]RSX11.SYSw 2(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA PEAa$ w  ť ť 0B Aaw v' UD$BA :2&( U BQ Е* &3'&1  Ʒ J5ew , Bv     5Bwb 00FF557i:)*dsh5  5 2  UE  ֮ ²hE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew v   Е-   0@A W e`fÊ    E &ff &f  d& dT( d,27 &>< &JB&VC&2 (   ' f  @ HH:MM:SS F=  Е: Е: ȕ Ћ 7ȕ  & +&  )@)W Е0 w(& ,lE Е:    & .  ¥8¥9M@BCAf } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~   6  < (  .   "    x  l l&f&D%% %% v  % %%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5  n eV?@e[ C 6 6 5 ?  ~fmfF, d ,#ASN XXNN:=SY:/LOGINASN =SYS$LOGIN/LOGIN/FINALAccount or name: Password: V BL [XXX,XXX] ] System Logged on Terminal XXXX as XXX123456 HEL -- Privileged user logged in without UAB HEL -- Cannot allocate UAB HEL -- Account00FF555512 file record(s) lockedGood Morning Good Afternoon Good Evening Login user HEL -- WARNING - Unable to execute login commandfile HEL -- Invalid RSX directory. Default set to  HEL -- Syntax error HEL -- Password cannot be validated HEL -- Invalid account HEL -- Terminal allocated to other user HEL -- Other User Logged On HEL -- Account file open failure HEL -- Logins are disabled HEL -- Message file error -NNNNN HEL -- Timeout on response HEL -- CLI not in system HEL -- Cannot set CLI HEL -- Assign failure HEL -- Spawn failure HEL -- Cannot find physicaL LB: HEL -- Low pool - Nonprivileged logins disabled HEL -- Insufficient Secondary Pool for user logical table HEL -- Warning ** Default device not in system 000000 ||  ,֡ ,A ,/$ , + , ,~  h z Q|b Q|b2 @R M 4SY0:LB0:[1,2]LOGIN.TXTNOLOGIN.TXTBATCH.TXTQ@LOGIN.CMD [000,000][]%Y %2Z JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC[CPRSX$VMS][CPRSX$DEF][CPRSX$LOG][001,002]@LB:[1,2]SYSLOGIN.CMD<#7 5 t wpAw^50w$7 7 5@' 45UU5 E(7q5eU(,VT ~7 r7 t5 j5 0 tp w wr֡ p  t `֡6 <  w7 /7>/S5K7 .mA'B5! x53 mڃ4 / @ v ֡' ֡( w\֡5@l4Pڗ,LB6  \ڀlE67 w7 Tަf-8X-86 < -w) z B w b X8w N D8wz@mD L5<0ef fѥ,i0 *wJf0 w8dPѥ]d7- 55@w7<r7476 ~  znpjl x72>7>: wN&& ¦e5<UE5@(pX5@8 NE 5 5U@  U  U u w4w"wr SY005Hfe.7x7v< 7 5$J Fy ~ "| Z R~JE 4Е,E $ƽP S z9н  N  B Е Е н {W W  5@x .ʴP  e P Е Е[ \ LЕ, N <Е]Е 2  (f  T N0  7 :    f& *8 w֡56*5&6  Е:dP~LP~27r555@, &SY&-ը-բH - kX  t   | ; n–d †5@r 5\EWE 5E   JE <~< t q5@ %U +H%hX J  %hö qы 7z1 T F^nj$%hFqД <Ӈ ^ձw1w h W~wrppwd00FF557i:)*bwTwHۿFw:8w*w8wSw8wwUwww&f5UW  `5<Ve@@ѥ]5@OW LUzf&G RÀ EXeR*]À E> Te.77 G:00w$ f&& %wdB~fD~4 t /  mɝf7 t / | bmÝmנ ננ ߃" נʕ 7 * p\[&  & 2w^/W ,,/& ^w>W ; * ] //&f c !lӕ  l   / 5@E<# <&#  χ < &f)&6& <& +\ R)& )wЕ ННННЕ:Е dP~Е Te ɥ P~ Е?Е?Е *ePɥ ?Е ȕP\ЕNȕPЋЕ ȕS5ЕNȕSЋЕ ȕT ȕBȕV & ߂ʕ x Е AZ"09$'!-. _ `z  A A A Eȕ0PЇ7 *4  >7 7fe l -@-:-47f  j/e˂%7 et ׭%|wH ) Xl5"e.&'7ע ע/ ע`עz 7f R\5  w2 2 2 Ҕ~ר:ʕ:Ҕ~5   l  f%wX=5|e& ȭ Нȭ Нȭ НННН P  X dȕ & && & & @N  q & ѕ> "ȥ  ~~ $< p$#0֡ 2  E <@<֡ ֡` %    ! V**W -$0  Е. L< l7 ʇ55w  498m 5Zd525> %  ¥/ @F &fv v5.u0B5 J2X5:FHD嶥De Ҽ~ 6 r & 7Bm ew &  ۃd BmPȂ+m@/   ۰2  t( hB T6 j5 Jȼ%м #% 5zыѝrѝoɝl <  ʴ .ܡ &55e 5! l~~f VLJ 0 - (% Z80( S  S S0 ǀ0`e c c cRɋ ы ɋ% \ XUƇ0?, e1e4q& T& ?we D7eSŮl   5 `e&Ee?Wt UŇ>^?Z e1e 5eqe 5 eq`5ee є~ є~& f& w&f& v  "2 2f > J00FF555512hSY:HELP[1,2]HEL -- Cannot initialize file storage region correctly HEL -- Unknown HELP qualifier HEL -- Syntax errorQ3LBSY:<~HLP .<` (h \- ֡777<"p& (֡a  - X ֡` x4!ڡ/p< <` :w wX? HEL -- Syntax error - mutually exclusive switches HEL -- Illegal switch - not logged in HEL -- Cannot open output file ??? -- HELP file nesting depth exceeded ??? -- HELP file error -NNNNN ??? -- Ambiguous HELP qualifier ??? -- Improper HELP file format ??? -- Unknown HELP qualifier ??? -- Indirect HELP file syntax error ??? -- Indirect HELP file open error -NNNNN ??? -- HELP synonym not found ??? -- Ambiguous HELP synonym ??? -- Excessively nested or recursive synonyms ??? -- Help file is unavailable for   LBDCHH.MAIN.  7 7 76<75Bjhfb| lw$x 07 bԋ  @w67 27 * X L=7F 7 *E p <9|6q  cwh[X7Q V f4۹ T `  wC `n .O 0wr » H  !N    p   цwB» P &5 P p߇ ^܇74ق&7 % @<wȥ ȥ ȥ*  "ȥ$ȥ/ ̥/  ( W 7 7     ¥ ¥ ¥/"p$&##» hR ܼ  p2 U H 1ȥ9C ʥ ʥ ҥ@w> p    w:ȕ2  eBJ 7 5184P-*X 7 f7 d5!2* J:FH  w0  w   J T%'*    wJH >Е." w& \^\DBw<6W! pBpDp\p^wdwb   CBw C 7ʥ ʥ Oҥ=#&   v -   7Ow07aA7WU7RK7> "  4 ( `Jh  O , 8|* Е.y ыѝѝɝwы4 t&7 &fw 7 7 @,q `-KacJE[ !mxt@  ) 00FF557i:)*L R  @7@ f@  &  5]U E :&@E A  ̆  E vE c  @  . h&f`Z  x  |   8  " .$   ̥ZḀ90     w &&E  Aw    j2*-  (@ep@ D  e  ` e    |  V R#R-w   @.  ʥ*7 ~  7 ` 8/0    J "$ &n 営  a~ ~   X#  &f0 H܅X^L  / d\ pe5P &f > ۅ  ָ" wZۇ &f& v HELPLOCGROCLIMCRDCLFILOUT ɀ"/.Ɂ2"ɂH"ɃfɄ"Ʌ"Ɇrɇh:Ğ":ȟɾ":ȇ"%2Ȩ,ȲȇV_$:[,΀]> 2 2f 2 > > >x > > J Vw &w* t5)%Eefffff f% EDD%][%>< D 1 w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w (e(&&& e"4 &fff& & "&eW!  eW!eW   p*ŋ**ABDEFIMNOPQRSTUXYZ<> HPjll` JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC & & @( (f  e ee e w && D¥%  B&ХVA C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf ,Ձ & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA F Е A bEA EЕ A A   $Е.  AЕ;    w D&& bЕ- eaePPPЕ-$w lD  &Е. ce  Е:   dBw *D L  w`8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w. f( f)f **&   `@ ` B   & A @    w t ww d ww V wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ 8e2    f l >5>Eu t  =p!Օ^46f %8 E D/D!D l0l8epl0pɥ.ɕ .w(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R > =00l&8el2 0 *e6p 4 8  81416 L     *..8em,0l0!D0e6p 4.)00FF555512 &f L  *e) .  e6p 4 08*w U8UMw ww eE D` bl lrw `  B eE"s    s-  Cslw  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  *) l0, *) $ )*)0,40,6 ,*1 FB 00fep=& /e`pw@0,0, f 톇,, w 2     .% b eB U5UU R plp & NeՀ)*eB  8 6$&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  T<  EU   (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  BDEe    *1  ˕03 "   ˔Ӕ ʥ7&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w bBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w141612epl2l0p(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w@  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce P   z*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 5%& w &Ba +- ʥ# . U 0   b   `     f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X00FF557i:)* נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0w L( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# Dw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) X@#**fff h "&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ d& & re# eB&B B  *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w f(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w f &* 氕* 0MwH82e&( 0 0 0 80 B0 0 0 0)#0.w  ) 28C 0* ) *w*    zep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 Rp  , J *` C# h   D @)  6?0D)w ) 8C * ) *w6*  *ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w C#    D @)  6?0D)w T n832cd& & & B  2OΕ   N Υ$Ε  22Υ   8v Ε f 8e :* Xe*w<@) *0,    ) )% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a &e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,  N Vw0 2 J B #  f  `* ,w)0406 l0 &f 00FF555512D E/fC A B f&  BeA @0 (@0 a@eA  B0 AB  f  VC @*w Z 0  w * > ,,  *w  ) * w46l0w ̸*f f ! fP ŀ)B  DP5R RRR  8   ** 8  **=D ( `p46 f 64/=  @) 0  8w 46 88 e*w6 )  ~w @ )  ~ fU %  BA `6p 4p`4 %60 4)"(. ~= . B  E (.w *8I J*=)98 > eB &&  U 0**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w82e&( P0 0 0 80 B0 0 0 0)#0.)"(. \= . B  E (.f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e|2,TY &[q$Y t .TISYCOSYTICLTILBOVtb TISYCOSYTICLTILBOV(uH2|*6Hjnprv*,.0j2DFvz"$&j1 HEL -- Command input error   ԡ()00FF557i:)* AY5 U 7G wpz] 7,& 5 UХL U)ȥL&ȥP5l&RE @E E wU n *l U5@ 2\w N5J FA<   w U E 0 0 5Hm" &  j,LU :E 5@5 Nxw ы ȕ 4 tw LL &f) (% DYWt7 \?60 0&  0fB5 %HTE!? [0,0]RSX11.SYSw 4(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA PEAa$'&1 f T| fT T f T |f tT lf, dT \T TT LL DT <f( 4fH ,: $f T TL T8 T< TH T@ TD T$5ew , Bv     5Bw 00FF55551250  (r- DUt-E D  E E ܁ BF$6@&w"E U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &ff  &[q &[q`TBB BfB BTBĴ xx ش|(xx شxx.. T( z  B <( bf $ @04 HH:MM:SS = 4 Е: Е: ȕ Ћ 47ȕ  & +&  )@)W Е0 w"& lE Е:    & .  ¥8¥9M@BCAf } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~   6  < (  .   "    x  l l&f&D%% %% v  % %%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5  n eʻ?~@e[ CU f6 l6 5r R0?,  ~fm".JFF," d ,#ASN XXNN:=SY:/LOGINASN =SYS$LOGIN/LOGIN/FINALAccount or name: Password: V BL [XXX,XXX] ] System Logged on Terminal XXXX as XXX123456 HEL -- Privileged user logged in without UAB HEL -- Cannot allocate UAB HEL -- Account file record(s) lockedGood Morning Good Afternoon Good Evening Login user HEL -- WARNING - Unable to execute login commandfile HEL -- Invalid RSX directory. Default set to  HEL -- Syntax error HEL -- Password cannot be validated HEL -- Invalid account HEL -- Terminal allocated to other user HEL -- Other User Logged On HEL -- Account file open failure HEL -- Logins are disabled HEL -- Message file error -NNNNN HEL -- Timeout on response HEL -- CLI not in system HEL -- Cannot se00FF557i:)*t CLI HEL -- Assign failure HEL -- Spawn failure HEL -- Cannot find physicaL LB: HEL -- Low pool - Nonprivileged logins disabled HEL -- Insufficient Secondary Pool for user logical table HEL -- Warning ** Default device not in system 000000 || j   >A `/$ v + ƥ <@ E< Q| Q|¦ <@  \4ZSY0:LB0:[1,2]LOGIN.TXTNOLOGIN.TXTBATCH.TXTQ@LOGIN.CMD [000,000][]%Y %2Z JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC[CPRSX$VMS][CPRSX$DEF][CPRSX$LOG][001,002]@LB:[1,2]SYSLOGIN.CMD8T<#7 5 t w Aw^5w$7 J7 5@' 5UU5 E(7q5eU(&,VT ~7 r7 t5, j5& x tNp w wr p   6 <  w7 /7>/S5K7 .m`A'B5! x5j3>m6ڃ4 /h @ v N' ( w\桒5@4ٗ,LB6  ـlE67 w7 ݦf-l8X-V86 < -w ) z B w b 7w N 7wz@m L5<0e wѥ,0 (wJ0 w8vؽPѥ]ؽ7- 55@w7<r7476 ~  znpjl x72>7>: wN&& fæe5<UE5@(X5@ NE 5 5Uf@ U  U u w4w"wr SY005Hfe.7x7vL >7 5$J Fy n "  R~"E Е,E :P 3S z9D h N q B Е Е D RW W  25@ .>P  e P Е Е[ \ "Е, N Е]Е 2  (f  T  Y 7 :    f&  w56*5& ݰ ^Е:ؽP~P~妽7555@ &SY&-:D-4> -   t   | ; n8Öؽ kÆ5@ 5EWE 5E   E L t q5@ %kU +%X ~ J  n %ö ы 71 LT nj$j%FД ҇P+ Ա:w.,w h ˿w ww,wOwlwwwwwwɾwt0rwfbdwX&f5U\W v @X`5<Ve@@ѥ]5@~OW LUzf& À EXeR*À E> Te.77 G:00w$f&& %wؽB~fD~4 t v/  m00FF555512ɝf7 t @/ | bmÝmנ ננ ߃" נʕ 7 * p\[&  & 2w^/W ,,/& ^w>W ; * ] //&  ܀!ӕ     / 5@,EbL# Z L&# D ~χ xL ۇ&f)&6& <& +\ R)& )wЕ ННННЕ:Е ؽP~Е Te ɥ P~ Е?Е?Е *ePɥ ?Е ȕP\ЕNȕPЋЕ ȕS5ЕNȕSЋЕ ȕT ȕBȕV & ڂʕ x  Е AZ"09$'!-. _ `z  A A A Eȕ0PЇp7 *4  >7ƥ 7fe  -@-:-47f  j/e˂%7 et ׭%|wH  ) X5"e.&'7ע ע/ ע`עz 7f R\5  w2 2 2 Ҕ~ר:ʕ:Ҕ~5     f%w=5|e&? ȭ Нȭ Нȭ НННН pP  ȕ & && & & @N 8j T & ѕ> ȥ  ~~ L p$#0 2 E <@L |` %   @ ! **W -$YE  Е. LL 7 ʇ5~5w0  498vm 05Zd525> %  ¥/ @ 2&fv v5.u0B5 25:FHDƥDe zF~ r & R7Bm, ew &P ۃd0 BDmǂ+m/(  ۰2 0 t( B 60 j5 J<%D2 #%}5ыѝѝ ɝ ~> .ܡ &55e 5! ~,~&f Ƈ 0 - (%+ Z80(2? S  S S0 ƀ0`e c c cRɋ ы ɋ%  U.Ƈ? e1e4q& T& x?twe D7e\SLdŮf h  5 `e&Ee?Wt &U`Ň>? e1e 5eqe 5 eq`5ee є~ є~J& f& ZTw & & @( jf  e ee e &f& v ܴ00FF557i:)*SY:HELP[1,2]HEL -- Cannot initialize file storage region correctly HEL -- Unknown HELP qualifier HEL -- Syntax errorQ3LBSYL򶐷HLP HL` (ܴ z 777L"p& RNa  - ̷ ` 4!/ L L` w^Vu jw?* HEL -- Syntax error - mutually exclusive switches HEL -- Illegal switch - not logged in HEL -- Cannot open output file ??? -- HELP file nesting depth exceeded ??? -- HELP file error -NNNNN ??? -- Ambiguous HELP qualifier ??? -- Improper HELP file format ??? -- Unknown HELP qualifier ??? -- Indirect HELP file syntax error ??? -- Indirect HELP file open error -NNNNN ??? -- HELP synonym not found ??? -- Ambiguous HELP synonym ??? -- Excessively nested or recursive synonyms ??? -- Help file is unavailable for   LBCH.MAIN.  7 7 76<75Bjhfb| lw$xb 07 bԋ  @w67 27 * X L=7F 7 *E p <9|6q  cwh[X7Q V f4O T `  wC `  .Tü 0wr 6  !¼    p  цwB6 (P &5 P p߇ ^܇74ق&7 %- @<wȥ ȥ ȥ*  "ȥ$ȥ/ ̥/  ( W 7 7     ¥ ¥ ¥/"p$&##6 ܻR P  p2 U H 1ȥ9C ʥ ʥ ҥ@w> zp n  w:ȕ zeB 7 5184Ĺ-*X 7 f7 d5!2* J:F  w0  w   T%'* W  2 wJ Е. w& Z\^\DBw<6W! pBpDp\p^wdwb   CBw C 7ʥ ʥ üҥ=T#&   v -   7üw07aA7WU7RKT7> "  4 (b `Jܻ  pú ,T 8|* rЕ. ыѝѝɝwыb4 t&7 &fw 7 7 @,q `-KacJE[ !mxt@  ) L R  @7@ f@  &  5]U E :&@E A  ̆  E vE c  @  . h&f`Z8  B 4  8  " .$   ̥ZḀ90     w &&E  Aw l   j2*-  \(@ep00GG555512@ ND  (e  ` e      R#R-w   . ʥ*7   7 ` 8/    J "$& & n     a    ̷# * &f\ ۅ̷^L  / d\ pe5 &f} bۅ  J lwڇ &f& v HELPLOCGROCLIMCRDCLFILOUT`eimquy}ɀ/ʁ$ɂ$ɃɄ$Ʌ$Ɇɇ:Ğ$:*ȟ2$:FȇNȖ%$.ʎBʠ&ȇZ.._.$.:[LV,TV΀]Z4|,??yy Y 2 c?SYCOSYSYTICLTICL00 GF557i:)*00GG55551200GF557i:)*00$GG55551200,GF557i:)*004GG555512X f SYCOSYSYTICLTICL(?yxX|400 3$-w , (3 5 5 3 5 5 355%%7t5s ssm l @5w F, w  3 w , X 3 5 w +D $  35 @ 7t@ 7t @m~?w + & H w + h2 `H` | n&md?`mteJeJ%e6$m^B@  %w *@ &   n   5w *C@m7t? &t& &A5n% % B Bl 냞   l w * N  B  2 E E 77($C  .E ~  !% @ Ae X%%MK 55 5 & m@%߇ 6666666LhltNeE DfEfNB&& Dmm5 m&E% ! %E& ΊBm  K & 6 T B  6 JN ~ 6 #N& B  :&f   v6 -E  " Z eA0A 5(0(0(08wwzw:w %vw w %v ܇ P v 5  <0U w %&  U U@  ^  e m5U f&w 0%f 55U% U (U  U@ J `U E5U mɵU@& (%MK P %BS 5 5^5  5@&   B PmNmP5P m>8 P  7j   PP7 JH  5,RD,VTH 7   ? E$& I5H&&( e  &Hm:5Bm(95 Bm%MK%BS$ "   f m  !     5@Cm5 m Š D4zOM  A &f B~  %CP%MKe%BSe ,m (%MK!%BS 555  5b?= %ćABCDEFHJKLMNPRSTUVWXYZw ! + C%m:5 m, !   e@ w  w  85m5m`` 5" E57>wR@:~%Ae % (U7  H J Ae   \wLdwBw 6 e ~w`~w^6w`j Jw5T& ΟfH6Z ww`2   w 7  (  6# r w`  jbw@Re CPssB 3 3Pw< w h&Qѐ     Tw <& @A h@m&00LGF557i:)*6P e &7 7 =mLmJ@5  m0*  !ET$7x Pje$5-*e* 5@ ,EP   I f bp EpP5* @ P5 <0tUw 5U &E \U mK U U@ɦ&@ CɦCD  jw ܽPPH- H e w ZܽH"Ww zRw 0ҽPPH7 6    #a5 E e  e   $77 T@(   1 1& z- r) j% b!E N~5 :   (~   `wwF m  Lp  8&  k   L8x ([%CPR   L^  \8:N f B? @&`4321/.Fw&m  8& r   L8 N f V eA& & 332& Ľ& Εf -eA& & 22& Ľ& Εf & & & & 22& Ľ& Ε 2@m  &B : 6&),,  m m/  % s!  t>  J F B& 1,,% '   m mC -e  l t>   &- '`'%#w5O u hw~ *EUwF Z *&5QE J  @e 4EB Rk 0  f ]%LE %G =5 U5,)%     VE  tE U E1P@ ]  O K#!   %M %    FE XEm`e|& e    j    w \ B %%f&""ۅ%CPII& AE,KAE@; @a 7& AJ,C5  ECpClm  N&    J "VT%II N w*&`!h_aw5  C bhgw P I>& n6  J15.U " 1  4     t5  UE @ fN  E1P  m& 5m؄'5 & Bw XU^7 w <  J IFAml5@5 %MK%BS3  & AE&&D R L h  e% Am L"\eX U5 5v 5 I @A < 9f 1S~   B J 4UB7 &f 53A5D &D  "֦mք"mʋm5 mʵmJ e w ,5w g5 `)&& &mL5m>#   > n U  (%%  % EeeU VBe00TGG555512 E55?w  * %#%II0 5&  ނ-UE f m eE w x  b m Z 4F5@62/3 5:% p">:4<7  rE`ƿ$ Ӈ?,$?< Jl \Ÿ ¥‹?< & x  e  Ÿ‹ ?~v&  8J@a5 ? @ Ҟˋ1 v(5^ ?= ( K?=    ?M ҇& && +& &'e5& &&f Pm2,P mD5]-0X>wZ~򋱱   &p$ -E Ŋ5ް $ j$=#<"5  e ^UfE5%#   % " %  !  U5 5   5 5  |5#5U @E(%$% $% %$AE UU $2 @E5 2$5 @ UQ$U@ E oE̳7 D7 B@Av WtEtEp@tEp(`E`f %d  %d5p(p(%d5 p(5p(`5`|p@`tա5@' $  B~ߕߕߕ )%Hi7 P7 N7 L7 J7 H& "    \   Wpm -,e%"ݦ%RD %SYw4 & U& & s& & & & f&& & & Ε z*@ j$6f`&E`v  ɋ B`   (&P" %6` ^  E5    E :%& ~ F w`¥¥¥  E5At? ;57B 2 . +5't %% !5 @4P.̿P,% 5  @ P   l~hhhrhh"hhhhh<$=CQ.;-+*BEFGLNPSVWX!:&#? 0*0**&0~, (> H>l7 p7  r77P7 \   L" DD T:  , ? 7 " v7  7 & : 7 F "7tm  2  w  ? w De w %.eDl r w ׭ D F 5$ 4  t@  z%F l (f MPODcJ BE7IOILEMTRFPzw 7 w   T  L  % R 08\dlt| p 43 8  N (  >  @ @   J 6 (f&f)w bh 8j w Lb%4 < % ! %44 >7`$-  z@@@Pr@ @em 7X wRPw   @f   m77  ` `  07Eu` A A ы <>  ( &5  &% J)  7 J)   w $ az +D f< &%&% #$ h%  ~U wH N, @ e0 2 @7^ >7N 7 @7<&e N @ e0  w^P  @ e ee e @( `ADD SUB MOV CMP 0BIT @BIC PBISBRBNEBEQBGEBLTBGTBLEBPLBMIBHIBLOSBHISBVSBCCBCS CLRF COM INC DEC NEGF ADC SBC TST RORF ROL ASR ASL SXTpMULrDIVtASHvASHCxXOR~SOBEMTJSRSWABRTSFJMPBPTCLCCLVCLNSECSEVSENSCCCCCNOP~ p`B @Zl@`l f&Bwp~KWtED Ktpe 4e0 &tt` )  a    xXt(pex @ 8 S  @ÝE 2Ý 3t8pe  ѕ,Ýt v Ý` ÝT Vѕ,J E tpe ѕ,  єєєє &&f L$q   D!De    ѕ+ : ~ ѕB00dGhG555512ѕ rnl r Zѕ & v5vѕ0 tEe0v & r e.e e ~&f &ѕ  D~ѕ( ѕ) ѕ@ Ý r Ý`  | ѕ+ѕ#ѕ- & D ! !E7Q09x$v J~ %  6!   6!    D   !?7Qf  +-'"A) N4 Ft0P pA h b Z TtP J ` Z   & , ff  P>&f @ #!-((- >( !U, D7& \)U0 ~ !  j 8U  ,+ U F U&(  " )  P! tP: "5 u7Q&   U  ^ x -- &7 5 ҋ⋗B* &h    EE  *h&f 0 $q ePf wB w$q ,,e 8  .$ 09AZ ~׭<.   ׭,$׭$A~ %$ %.@e.Wp(`~&Z7 "q|| ,88G Y `Y @pe 7TITISYSYTISYSYSYSYSYOV?pj ?&$   ..~%   ¥8¥9w h&&E  Aw 4   j2*-  |(@ep@ D  He  ` e      R#R-w v  . l ʥ*8A? +TRvDEvMC@sCL@sLO vLB00lGF557i:)*ER@DE F:T 0t:IND V9.2,NPR,FMS,MPL. Task built: + ({,*SY[],,RSX11 ,SY&RSX-11M-PLUS@  ..SY @SYTI@SY@SCB L  : SYS$LOGIN:SY:SY`flr  @  @Y a H & ( x h h l | h l b'SY  * Ŀ6D 6 B* '6N#6Z/( 6Be **h*h  *wx<)0 #5[[?3l[?3h#6#3#5[?5h[?5lDM^+ , )`) ,--c+4([cO+0,A*B*C*D:+M,P$)R<*Sd*Q,*,S[SOS2A*B*C*D:+123#4[5c6k0,~,7890,~@,0,~H,0,~P,0,~,013456 890,~X,0,~`,0,~h,0,~`)0,~,0,~p,0,~,0,~,0,~,1;2C3K4S0,~,0,~,0,~,0,~,0,~,0,~,0,~,0,7800tGhG5555120[?26*1*;*:[124;28B1JB2L3&bL |  #6##`6p6# )`))""j!N"v!!1457,,-*,@,H,P,X,`,h,p,x,,,,,,,,,,,,A@/C/9|/N/X00 !A[$%././0:w J 0 0,0w  >w $ww 8   * v 4 6 e6p 4&*&4&6= 64 wz%!64=5 ؿ2 6  l0 & Z46 8ɰ64 :)0406 0 *0e6p 4 = bcdefghijklmnNO HELP AVAILABLEALPHABETIC REQUIREDNUMERIC REQUIREDALPHANUMERIC REQUIREDSIGNED NUMERIC REQUIREDNON-DISPLAYABLE CHARACTERFULL FIELD REQUIREDINPUT REQUIREDw  EuB 5 CeeO%UU A" wMe 5 =%*   85 :ue   5  |Aej~UU BeXPCeL eVe 0 BCe~U   F  H xE@& J n N rBe$R~ D~   Pu u 5-5    P  q q @, 1 5 @A- 5 B5%B@mBAmBu   `  U  JE~ & 50  w  %UU444 r     t4v   UU     & w  %@mB   $  (E~  w@0  ` Ce2`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E% W @&  &D5@  $D  K se~ ~ e 4w W C B =5 .+s eAe3eO3ssqIt D4 .%56 9 (   ~fe &4~ 5 U5@  eP ~  E  ҁ B~e• D`~ E5@  w\ KmB3eC-4 H w.B6 2% RR 8D~ (D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~meI~ ~ 5!6̇U @E5`u- ^  t   4 5@ & F2   rꆇe B` P : 2@   @ &B` 톇   ҋ  %UU u A 8˥*  >0e L=  0  1 & pL= x <   !  1@ *B8  5   C2 4 C@ pL=wX > !5C@  1e1 1  0 W W C@& L=@0e "  @2"e .5@  $  d&  L=eH~ l     4&@`   2 0  lw `ҔD~ "    .&@`    r t w C`~ D~    eC~L=l b5@ & B@ ;  r 5 : < w  J 2 L=6 w   C~ D-6L=66  h  wB@ʢ    1w B ~l 00|GF557i:)*Z w * b f #N \B` e~ . C6#    e a~ 0 e  & ^ D4 V D-65@  5   E  C` R(  w ” B  ~a z 5@0!0 :Aw  B5  8DV , 5B~mB`B~ F z~05>5  ѥ ~eB'@ >~! N ` e  @ ~ 5@  5+5õ@ ~  (0 j ;BC Z m N õ r f @   5  z :  = BVfP D %*!t-<%:+%^+  <%4(#t-<. C@%,C@ &C@  wFFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & 2J   54,   ɋQ$A5f l &5-5 'm![B< q~  V& JB<G Q~f:  t-<4Am< H5  5t-<5 B5@  %6U :wz5  05  P @<wR>wH@w>w f 5@  25@ &L=%5@ & |l <6 6Bww F$5@  &5@ L=6 6Dwb5@   Fw:5@   Hw 5@  Jw t-<  Lww B> <t-< e `  w B> <e `   >` . <  <  < Nw@P <E ~Bm< 5#5A< C~ f:  % V A<C~ D5 0 05 f: $  zUPw `!~B-<  U  1w2w3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR  B  Bw 5 Ue B` B`  ^Ef:fBAe*Bҥ ~ ^5%  nU  j%, BEAe 4 = Rww  f:Ae$   | 5 0UC2 (EC@ w   5E5 <e  U5<e`  B<w zu :u ; Nw Df: 5  4E  *f@ f D~ XU   5 : Am< U Ef5   4  eыAm> e$ TwL AZ az Vw09  Xw f-+ +- . ɠ ~ 5Nm>V  Zw \wr   ~5 5  ^w0`w&"C2L=  5 f h ~  F5 : : uew %UU  U@ t " P %,4, 5 :& *; j  H X: `w V d1 0 C    e0 e0 ;= u- @e5 5 f@ A~R  B       Bɋ W]W: mKɋ d((p"eB& # *5WYWVWS*  Br, 55 >f1A%& pp4e6 t- *%%b'  1 . v  1  `Br0 J2 @A14 ,00GhG5555126 "w ( ,AHCCHeEfD & p4e6 ɇ Ƈ%FuJ `Dw  E) B ",e$FFJ% 4 xC-C`AleC ",e%uDH UBE`JF R5HX&   85"   @,e fe N,Nv v  18 H  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B f& EBa & & ̋•v ` nE ^4 U & LU E f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &fh  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭W1 w [?2l \HJY7 KKBY7oY( ) & & (t*t*#$AL'BR'Cr'D'M)P%R&S$'Q)([O.AL'BR'Cr'D'(78./L.\ !n 22!\& && 2 H))t*()))) )()0)8)@)H)P)X)`)h)p)x))))A+C2,9,NJ,X,, !A[$%././0:w 0 0,0w F >w Ƽww 8   * @  4 6 ¾e6p 4&*&4&6= 64 wz%!64=5 z2 6  l0 & Z46 ʰ64 :)0406 0 *0e6p 4 = 1K_NO HELP AVAILABLEALPHABETIC REQUIREDNUMERIC REQUIREDALPHANUMERIC REQUIREDSIGNED NUMERIC REQUIREDNON-DISPLAYABLE CHARACTERFULL FIELD REQUIREDINPUT REQUIREDw  EuB 5 CeeO%UU A" wMe 25 =%* R h5 :ue t B 5  Aej~UU BeXPCeL eVe 0 BCe~U  4 j  l E@&   ~ Be$R~ D~  Pu u @A- 5 B5%B@mBAmBu     U F E~  r50 nv w  %UU444UU4 . w %@mB   0 ( 4E~  w@0  ` Ce2`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E% W @&  &D5@  $D  K se~ ~ e 4w W C B =5 .+s eAe3eO3ssqI D4 :%56 9 (   ~fe &4~ 5 U5@  eP ~  E  ҁ B~e• D`~ E5@  wh KmB3eC-4 T w:B6 >% RR DD~ 4D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~00GF557i:)*meI~ ~ 5!6̇U @E5`u-x z  t  ^ 4 5@ & F2   rꆇe B`  : 2@   @ B` 톇   ҋ  %UU u A j˥*  >0e L=  0  <1z B pL= x <  X !  1@ *B8  5| ~ C2 4 C@ pL=wX  !5C@  1e1 1 x 0 W W C@& |L=@0e   @2"e 5@    p&  L=eH~ l     & C` H  w `ҔD~ :    & r b <w C`~ D~    eC~L=l 5w p  e~@~ w B  2 L=6 P w  ^ C~ D-6L=66  h  *wB@ʢ    1w  l w z f #N \B` 0e~ r C6#    e a~ 0 e    D4 V D-65@  5   E  C`  v w l” B  ~a z 5@0!0 :Aw  B5  DV , 5B~mB`B~  z~575 ѥ ~eB#@ D~ e  @  ~ ( 5@  f @ 5  h :  = BVfP 2 %r'!t-<%'%(  <%$#t-<. C@%(C@ &C@  wFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & J   5(   ɋQ$A5. l &5-5 'm![B< q~ | V& JB<G Q~f: V t-<4Am< 5  5t-<5 5@  %6U wR5  05  P @w*w ww . 5@  25@ &L=%5@ & 8l 6 6ww $5@  5@ L=6 6w:5@   w5@   w 5@  ^w t-<  ww B> <t-< e ` v w B> <e ` P  >`  <  < j < w <E Bm< 5#5A< C~ f: \ % V A<C~ : D5 0 05 f:  BUwzz `!~B-<`  v U  v 1w2w3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   w 5 Ue B` B`  LEf:fBAe*Bҥ ~ ^5% 6U  j%) BEAe 4 = ww f:Ae$  ` " < 5 0 UC2 Ew   5E5 <e J U5<e` * B<w Tu :u ; (w f: 5  E   D~U   5 : Am< U E00GhG5555125   4  eыAm> e$ wL AZ az w09  w f-+ +- . ɠ ~ 5Nm>V  w wrr V  ~5 5  w0w&C2L=  r5 f L   F5 : uew %UU  U@ P l %)( 5 :& e de X: `w V d1 0 C    e0 e0 ;= u- @e5 5 f@ A~ . B T      Bɋ W]W: mKɋ d((p"eB& *# 8*5WYWVWS  Br 55 >f1A%& pp4e6 J- j*%%b'  1   1  ؑBr Z PA1 < 2w ( ,AHCCHeEfD & p4e6 ɇ Ƈ%FuJ `Dw  E) B ",e$FFJ% 4 xC-C`AleC ",e%uDH UBE`JF R5H&   85"   @,e fe N,Nv v  1 X  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B ^f& EBa & & ̋•v ` nE ^4 U & LU E f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &f  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭(W1 w NT&:)uE@ %:a `u>MN[[e  D(e:(C(  5@5*6 T @2ȋ eT5 |N ) @   J 5 wL DC uw  E  @e:(w5 CD>%  6  ^p + 6k5e d ^ [U5@ D(  G "uɥ;5<5-Ԩ  5@ u5 Fɥ@5ub , H5w E 5 @  @8jMABAe @&PPP@C&5 A  Z88Ue 6 &8 "@0 *_%`AB wz@ 8u j  5 , ɥ/b J  1ECe, e   ' @%7U @ E $  , D(@e , 5@@e,C& : t K fs@w,@&p h> :9%%ȕp*f  ȕp* ޤeBEETH EBe @Z5    *O 2Ȟe(5 @&B B 2=2 D(:(@$8 &SY e2edE_$8$8$8w 5W E5W sW s W ! W 8W >W EW W W W Ō $|e VeE @v&~mZ  N F <be?E? & f YBEGINENDInvalid answer or terminatorString length not in rangeValue not in range? [Y/N [S [OYNSMHENABLEDISABLEDATAGLOBALLOCALSYMBOLNumeric under- or overflowSyntax errorFile not foundNo pool spaceFile read errorString expression larger than 132. bytesMaximum indirect file depth exceededInvalid keywordRedefining a read-only symbolString substitution errorSubroutine nesting too deep.RETURN without .GOSUBIllegal file numberFile already openFile not openBad range or default specificationIllegal nestingNull control stringSpawn failure. DSW = Line too longToo many concurrent .XQT'sLabel not at beginning of lineInitialization error. Code: Command file open errorSymbol table overflow Undefined symbol Undefined label .Data file error, Code Redefining symbol to different type Symbol type error @ Internal error, Please submit SPRFile attributes not availableLogical name translation error.EXIT without .END||.|`|R|F|LBgTAg  <SYBl֠֠֠֠.ONERR COMMAN EQ=GE>=LE<=NE<>LT<GT> COMMAN COMMAN " " P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 Pausing. To continue type "" >ContinuingDelayingValue not in rangehhhhhhMCR UNS MCR RES START CONTINUE '%DMOSRLZCXV.BjHjRj\jfjjjjjjjjjjjjjjkkkk k&k,k6k@kJkTk^kfkpkzkkkkkkkkkkkkkkl ll&l0l8lBlNlpjxjxQdsƁ{84S;" pp062ZZ L^ u~a!afa vLOqw<OqBx:Ayz}z8.&""b&0"bRBxzX4zyK#<}#d$&&0 zX""`w"Y<}@%w""Zb""wb""b#" a't b|~Şb8{~d*k~M*k~,*P[M ,!&r &zC;4z<@u~@z6 zjL_M_M00GhG555512\X\XY 'xx (T[zd"a &Cy$z. Zx.~@0Zlt,0dLd\dkd|ddfdff~fffdffde4eLeaeteeeeeeef/fMffg$gCgcg   F5r-l 5e^ !70 0  G &7 w wГwLʓ` wP5 a[ 7QE  C9w.|ܒ" G xפ:[@S  ֓Mϓw,@Ó#%|Mc .̓%|Jjc .  J%|M<c .%|J$c j.ZnjFT? 5@/71Ed.;= " r  Г107 Z) ȥ|ȥ. ;w < 4Bu  .@ Zw*A*ww  8ʥa ΥaE ʋŕŕ7HwV7m7d7^7[7Y(4  T 0ғB7  R' \׭w- >Շw$w -ޖ5 wlf&f AB M5 u 5 5az & ff b7v  % (5 E4uE  5  |M$tAB 7 |wwؐw Lsn%ȥ - E U-5-%*ȥ &7rBm \ G:7Y  ȥYȥNccw +׭ 7'  cGw h) ߆ &# 5`”.ҕ.  5@ ȌD. 7 txz x5jc Z$7N7K7 D7D7A7>5ΐ00 [u&  o7 &w:c &w ړ]W WwʓԐΓ L + 7 P&wݰ = 7 0&A Ew  & *wwwl d B_ =wTP ¥S B¥M8¥H]0Х:]  Х:] ӕ*ӕ Х   fЏc t"@&c h"׭ OD@Е ЕRЕ:v Е-l m&Е ЕDЕ:׭`L -N:Pc 5 (Е" PЕ"57 Е ЕTЕ: dH PcЕ]Е:Е lN Ƒ :H (HЕ.7 xnRrnv7 tn_b\ "AQ)& +7"'5 7= ފ7 ފ)7 aԌ  Ίϐa׭ 57ԍ w&     N x!w LT&.W;T Gc Jӥ  Cd > : :     \&.#c Tӥ  d < åaE Ѡɋ&  { ya >!s&C`Br` A`  . |bl7 hL #Yw\ 8D PQ ċ  P @   @   @ EPEE0U     E U  ¥,  w %8Vw 8 6 d * 0G`w %%e @@R D6 :   w!,A w6fw w!%w Bo%>00GF557i:)*B  Eo}xg BL e ZP DЕ. Е:hЕ<A "8A 8  FЕ>K2jC F+<: V ։B T" `ڈ 4  ؈ ߇7 w"~  L0w 1 F% `5 n5fm b  mF7 X&m| # *( ` R 품- 5ez pj7 ĆvƆ5 TV7 EU]$Ey ih0bw  7 7 Е/ЕLЕBЕ: 5 5҇g Dw, j  Nq[7 A`5@ XQ   !@ B f `@A @ ʆe,D1 e@"$7   wІw"Ά NqZp L8h d7 5 ȕgf  = @ Jȕg :B>: `@eBڅeg$&ĝ e? g7*    e, @w@*< JFF# @* :< I3#𝩅wf J!# V z  @  < IeB 0A D*  <6@ hD  @ .r :  <1 L .1t   ¥ ¥ ¥ ¥   Bʋҥ! BJe D$9܃g  U>@w 45 : `=2}ʄ 2M  >eb p ؃&  ZV7w~|w1WŀaWWWW=  U   eF A 5; `9   7ew.͂€  AƀU7 7  |xxw :    7  Te AT w:ځ-Ё/ Ї x &g ( @   JAU7 wtwj7! & 7X7 @    :    T --   [ n2 28 @2 8 .23 h F ~z7 ~ 5 R~ E~]>~:6Jы g  7 }Uz~w W7RS~G7D|  &6E %IF a l (` d|l. ڂӂЂww         7&  ) >O&   F&   =&    f֋w & }7} } }:~fw:w.w:ӁЁˁȁ7&  $ a n B` y<`F` w &w wwpwl f m k g eE& W  5}w3 ^   FA-!; 8 653f AEECr$ 6f e CՄE  T  T|BwR|P|}@@w!; / 5@|! .B?7?}C`ר-|&& & &  5|5 |@ |&a  ^)wz7 z  ww h|{B T|zf 7V|@LB: C5,} A  @:[ $/R ɕ@T| B8 08 & B`ɕ]{B8 8 ( 2-  7{5^{U 7 *yh{Eyы h { (w8*{@{-@+% & &Y&?7zbw zB`z`*y`8yz-z " 00`z`z`z`00GhG555512.|{*|{p&& & & V) X{ $D> %s %[]z C"(& (-s  { & -sd{`{ ds 4 n Bs({&{4{2{ 8  Khy vv!C  ʕ !   h7 y7 j|7 \| wR|JJ|R wB|w<|o7 4| B!ȋ=Х! ||| | |{{   {{{ {{ x7 {x &{{  %{{ {௖{-{x m{ ~{  @x7 :x 2w xIh   w w&& & & %Q%r% h @(v %fh w lph w > ȥ#Ћ rD T  S M H{h b & f&%p& )h Z n5@v ` 2 \uZu v $ww |  wnvwv  v  w vtC5w%uu& v & & uzu& & && & & & |  %o%o& )cv nwVvu wfo ,tBu8t4ttt tttttte  X0&f &"e"""sss❮sFu 0us s Du-u%e-t PtB`-t  <`tB`-tb&f AB 4/fE ftwt ew!~ttntmltjt-twt |T&6E %IF P 8t  lT0 W W t$sw|  & #ȋ!ע:&ע0ע$עZעA ע9עaעzӋW RfE# ^s  wb bf Ds  fE֭s+  's5@q(s$s sesdsbsls5 Zs5  7@s d A E5r fEws 6s  #  ` T @ l wr &¥;¥! J Dp prppEor  #r w  ! wJrwBp ¥!wq7!r7u7r7 ur;tro/! ttt' ' t7 t tqɕ & f < 0 t> q?f7 ~t7 t7 zt7{t0ntB (^tȥa h և h6BE< C@!t?pwwqpAs sPs E x*s sЕ.xph5i ss% #` Bp   6  ӕ  6  pFs 7!8p2p9p7(p%sѕ    ѕ 7 rw oown wn  ՇU7rr &d UUe 0r Et4 *@ I`E3A >@7n74oB u&f Af #5 5 ffn7n @  f% wnwnwnn 7 n!n \nFn@n 4nlD! -xn-tne& 7Vn7Tn7Qn .  * '~ 7 4n70n*n$n<n $ n $ wnnm> V & ,& xf   fv   t  ȥ/ȥ$ȥ. Хa f.mm,m      ~'ʋ5DkGmAml!(mkewV k( k# k&l k k  i  BlB klW;Hlb l8l zk rk$jk7lw^k\k%e Pk ׭Jk1+.k5k5k U5k #k k kwk Ie   ew k1 &&& & & @|kpke`f! ~ɥ ɥ  N  >  *ff& e w!jw!jUU  ҋ ʋ ^N`  m؛e JNa ^ ^ 8& $  l@    00GF557i:)*\ G& $6>wl;w" N N@N 3 A N NPN ,ll#l{uwzlw A ^5j  7 Rl^j ]w %&  J Hi y$i09# 8wl> [ȥ*d  \W .wd)Х](  F!dFb f7 >b7d@, ,b(b@bb b |ww (C  3 ¥ ¥   w 2+7Bbd5aBCB@ &  c& &p&f&& Ε & &p&f&& Ε  5c7ca@aJi  7wl7Oa 7,a7% a4au ~a` `` 7 `@ f Aⷁ b``(UEGz`v`^Ul``&?7^7^7^t: v< `R`&   4` w^^$` zw^ =U__=7___:`@?^5`^_¸_U_9%DY%:YE_biN^ 7_` 7_a  ^a^a7_5^_ 5U_ SY0 ]ݼ]5^  ]ݐ]& Ba v]<_r]8_%Q%PMr eD D` D`  D`: D` D`em\em0^&^e?E? & &Y`]E] >m\]( dw`]]]],\]]]2\]   7]@ @ Е   @ ɡL]b]1 `p" ]]7"]  7]] ] 7]`7]7\ 4H\78[7\`7\7\\7\e7\e$7\e7\e7\7[ w`\: w`|\x\x\ 2ɥ@%& #F\ S fiє1"# $ɥ. ѕ \є ti%Zl( CeE-&\-"\`\0 Eni CeE[ T [D|Zl  [ ǡB ʵuG[Eʋ  $#[wLJ w w wz w]]P w     fZ& & Bf.AeJP Е,A A xЕ,A lCeЕ00GhG555512,e  \A6 FЕ,Е,    B~BBeʋ w Zf=% Е0e JYf=e `YQ3 5[ && & &   wYwY 7 Y7 Y7YYwY5Y YYYwE T "6YV    &wt w ZE  wJY) 8)fŕ,`  P P P$ P% P% P( P Pw7X!7XfEeD C VЕ, w%BA%SL%IN5w :[0 .[+7 *[7 $[A [wl[ XEWmWWWJ EWJwnwLf p f  Z~ f &5|ZUbW5nZp^Z&ʝKZ j nwPl̋   Е,wf W GD,fWE |e fVA A f 4v@eV  -VR  eVw!nV7V`Vw!ZV -T%  5.V  m B D.n wnPY"V\nRn& &Y  &5YUU5YpX&ʝX & V VV UUrn \XUXUw(S H  1 pU"U ¥,   ¥, & "B  Sե  5 B \n& |ȥ0ȥ9 P  A \no % C`\&   &%  %\n o&   & %\n o&   @  %\no\\\\&f V J &fwS > fE%`    w1ow <(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$w ' UD$BA &( U BQ B Е*  w \  ť ť 0B b Aaaz   & & @( . f  e ee e w D&& bЕ- eaerPPPЕ-$w D  &Е. ce  Е:   B&3&f& v f& w <EH\  P] A^ Е:%ʋ B$    5RЕ" eD pe d[Е"AH 2 AJ (AL Е.AN Е;AP  (    HХ"Е" EzAzyr#rur]{~iϡ瞯 Ey= 3y}?=7AGOTOSETSSETNGOSUBDATADISABLEENABLESETFSETTINCSETLASKNRETURNASKSASKERASECLOSEPARSETESTFILETESTDEVICETESTPARTITIONTESTDECOPENAOPENROPENENDEXITSETOBEGINCHAINPAUSEONERRREADSETDTRANSLATEXQTWAITDELAYSTOPFORM$v f֧f.Ĩԥ '&1 YB XN XZ5ew , Bv     5Bw< f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A 00GF557i:)*U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB45  5 2  UE E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew 4   Е-   0@A DW e`fÊ    E &  m  f A N  %w eE D` bl lrw \  B eE"s    s-  Csl&f w "*8I *=)98  eB &&  U t**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* jww wTw wJw wBw (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w " ,) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w\ C# D   D @)  6?0D)w x ) * wF 46l0w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# & w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) : @#**fff ~  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 F00ĥ݇AĥĊ  ȕ000 | 0 @0 &*0 @ & & e# eB&B B *  eBe>  # #D #=0/H#@&0 # = e0   $0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2eB  8 V $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *500GhG555512ND  t<  EU ,  @  f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w   n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e H * e*w@)0,    N) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a he0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  wL   JwB #  f  `* w)0406 l0 &ff (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R &   `@ ` B   & A @    82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. J = . B  E N (.8Ae f"( UCɗ&+(e$&% **w > w 4& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &   f  >5>Eu   w VBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wd *) l0, *) $ )*)0,40,6 e6p 4 8  81416 r   l L 8  **  DP5R RRR =D  `p46 f r64/=  @) 0  8w 46 28 e*wR > =00l&8el2 0 *141612epl2l0p Mw f &* ~*W=f(& e %&&eH =&e0  TU   E > >E(5E=uf p  w*@<#8w 6 /$ ,:T < U@% DD%][%><w  wv1  %,,:4 w r*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    6*w z*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce Re%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` 2*weC5U5  5 5@e*=U00GG557i:)* Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  ..8em,0l0!D0e6p 4.) &f T be) .  e6p 4 L08*wd=p!Օ^8e2 ,*1 U8UMw  w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ Hw8w  ) (  fU %  BA `6p 4p`4 %60 40,0, f 톇,, w      .% @ eB U5UU 0 plp & NeՀ)*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@|| ,77G Y hhY &[q Y @ޯe 6hTITISYSYTISYSYSYSYSYOV?ޯj0 ?&4 0 @.~%   ¥8¥9w &&E  Aw    j2*-  D(@ep@ D  e  ` e      R#R-w   . P ʥ*H7A? +TRDEMC@CL@00GhG555512LO LB"ER@DE V:d 0t:IND V9.2,NPR,FMS,MPL. Task built: + (̻,,*SY[],,RSX11 ,SY&RSX-11M-PLUS@  >>SYPSYTIPSYPSCR \  J SYS$LOGIN:SY:SY+*~F+*~N+*~n+*~v+*~~+*7800GG557i:)*[?061;[124;081ll01LL~`*<"!2"55"(((x!! $ 1457++b,****++++&+.+6+>+F+N+V+^+f+n+v+~+A-CH.9*.N`.X.. !A[$%././0:T.BSiNO HELP AVAILABLEALPHABETIC REQUIREDNUMERIC REQUIREDALPHANUMERIC REQUIREDSIGNED NUMERIC REQUIREDNON-DISPLAYABLE CHARACTERFULL FIELD REQUIREDINPUT REQUIREDw  EuB 5 CeeO%UU A" wMe 5 =%*   85 :ue   5  |Aej~UU BeXPCeL eVe 0 BCe~U   F  H xE@& J n N rBe$R~ D~   Pu u 5-5    P  q q @, 1 5 @A- 5 B5%B@mBAmBu   `  U  JE~ & 50  w  %UU444      t4   UU     & w  %@mB   $  (E~  w@0  ` Ce2`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E% W @&  &D5@  $D  K se~ ~ e 4w W C B =5 .+s eAe3eO3ssqIt D4 .%56 9 (   ~fe &4~ 5 U5@  eP ~  E  ҁ B~e• D`~ E5@  w\ KmB3eC-4 H w.B6 2% RR 8D~ (D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~meI~ ~ 5!6̇U @E5`u- ^  t   4 5@ & F2   rꆇe B` P : 2@   @ &B` 톇   ҋ  %UU u A 8˥*  >0e L=  0  1 & pL= x <   !  1@ *B8  5  C2 4 C@ pL=wX > !5C@  1e1 1  0 W W C@& 0L=@0e   @2"e .5@    d&  L=eH~ l     4&@`   2 0  lw `ҔD~ "    .&@`     r t w C`~ D~    eC~L=l b5@ & B@ ;  r 5 : < w  J 2 L=6 w   C~ D-6L=66  h  wB@ʢ    1w B ~l Z w * b f #N \B` e~ . C6#    e a~ 0 e   ^ D4 V D-65@  5   E  C` R  w ” B  ~a z 5@0!00GhG5555120 :Aw  B5  8DV , 5B~mB`B~ F z~05>5  ѥ ~eB'@ >~! N ` e  @ ~ 5@  5+5õ@ ~  D0 j ;BC Z m N õ r f @   5  z :  = BVfP D %`)!t-<%)% *  <%&#t-<. C@%*C@ &C@  wFFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & NJ   5*   ɋQ$A5f l &5-5 'm![B< q~  V& JB<G Q~f:  t-<4Am< H5  5t-<5 B5@  %6U wz5  05  P @wRwHw>w f 5@  25@ &L=%5@ & |l <6 6ww F$5@  &5@ L=6 6wb5@   w:5@   w 5@  w t-<  ww B> <t-< e `  w B> <e `   >` . <  <  < w@P <E ~Bm< 5#5A< C~ f:  % V A<C~ D5 0 05 f: $  zUw `!~B-<  U  1w2w3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR  B  Bw 5 Ue B` B`  ^Ef:fBAe*Bҥ ~ ^5%  nU  j%+ BEAe 4 = ww  f:Ae$   | 5 0UC2 (EC@ w   5E5 <e  U5<e`  B<w zu :u ; Nw Df: 5  4E  *f@ f D~ XU   5 : Am< U E5   4  eыAm> e$ wL AZ az w09  w f-+ +- . ɠ ~ 5Nm>V  w  wr   ~5 5   w0w&"C2L=  5 f h ~  F5 : : uew %UU  U@ t " P %+* 5 :& *; j  H X: `w V d1 0 C    e0 e0 ;= u- @e5 5 f@ A~n  B       Bɋ W]W: mKɋ d((p"eB& z# v*5WYWVWS  Br 55 >f1A%& pp4e6 - *%%b'  1  v  1  Br J @A1 , "w ( ,AHCCHeEfD & p4e6 ɇ Ƈ%FuJ `Dw  E) B ",e$FFJ% 4 xC-C`AleC ",e%uDH UBE`JF R5H&   85" 00GG557i:)*  @,e fe N,Nv v  1 H  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B f& EBa & & ̋•v ` nE ^4 U & LU E f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &f  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭W1 wh [?2l \HJY7 KKBY7oY& F( L%$ '")")?#A%B&C &D&MF(P$R%S%Qd('/[/O/6-A%B&C &D&'78N-.PvD j11 L%$L%FF(d(")''''''''''''((((&(.(6(>(A*C*9*N*XT+T+ !A[$%././0:Tnopqrstuvwxyz NO HELP AVAILABLEALPHABETIC REQUIREDNUMERIC REQUIREDALPHANUMERIC REQUIREDSIGNED NUMERIC REQUIREDNON-DISPLAYABLE CHARACTERFULL FIELD REQUIREDINPUT REQUIREDw  EuB 5 CeeO%UU A" wMe 25 =%* n h5 :ue " B 5  Aej~UU BeXPCeL eVe 0 BCe~U  4 j  l E@&   ~ Be$R~ D~  Pu u @A- 5 B5%B@mBAmBu     U F E~  r50 n$ w  %UU444UU4 . w %@mB   0 ( 4E~  w@0  ` Ce2`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E% W @&  &D5@  $D  K se~ ~ e 4w W C B =5 .+s eAe3eO3ssqI D4 :%56 9 (   ~fe &4~ 5 U5@  eP ~  E  ҁ B~e• D`~ E5@  wh KmB3eC-4 T w:B6 >% RR DD~ 4D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~meI~ ~ 5!6̇U @E5`u-& z  t  ^ 4 5@ & F2   rꆇe B`  : 2@   @ B` 톇   ҋ  %UU u A j˥*  >0e L=  0  <1( B pL= x <  X !  1@ *B8  5* , C2 4 C@ pL=wX  !5C@  1e1 1 x 0 W W C@& L=@0e .  @2"e 5@  0  p&  L=eH~ l   00HhG555512  & C` H  w `ҔD~ :    & r b <w C`~ D~    eC~L=l 5w p  e~@~ w B  2 L=6 P w  ^ C~ D-6L=66  h  *wB@ʢ    1w  l w z f #N \B` 0e~ r C6#    e a~ 0 e  2  D4 V D-65@  5   E  C` 4 v w l” B  ~a z 5@0!0 :Aw  B5  DV , 5B~mB`B~  z~575 ѥ ~eB#@ D~ e  @  ~ ( 5@  f @ 5  h :  = BVfP 2 % &!t-<%&%&  <%##t-<. C@%'C@ &C@  wFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & J   5'   ɋQ$A5. l &5-5 'm![B< q~ | V& JB<G Q~f: V t-<4Am< 5  5t-<5 5@  %6U FwR5  05  P @Hw*Jw Lww . 5@  25@ &L=%5@ & 8l 6 6Nww $5@  5@ L=6 6Pw:5@   Rw5@   Tw 5@  ^Vw t-<  Xww B> <t-< e ` v w B> <e ` P  >`  <  < j < Zw <E Bm< 5#5A< C~ f: \ % V A<C~ : D5 0 05 f:  BU\wzz `!~B-<`  v U  v 1w2w3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   w 5 Ue B` B`  LEf:fBAe*Bҥ ~ ^5% 6U  j%d( BEAe 4 = ^ww f:Ae$  ` " < 5 0 UC2 Ew   5E5 <e J U5<e` * B<w Tu :u ; (w f: 5  E   D~U   5 : Am< U E5   4  eыAm> e$ `wL AZ az bw09  dw f-+ +- . ɠ ~ 5Nm>V  fw hwrr V  ~5 5  jw0lw&C2L=  r5 f L   F5 : uew %UU  U@ P l %F(' 5 :& e de X: `w V d1 0 C    e0 e0 ;= u- @e5 5 f@ A~. . B T      Bɋ W]W: mKɋ d(00 HG557i:)*(p"eB& # *5WYWVWS6  Br8 55 >f1A%& pp4e6 - *%%b'  > 1 :  1  Br< Z> PA1@ <B 2w ( ,AHCCHeEfD & p4e6 ɇ Ƈ%FuJ `Dw  E) B ",e$FFJ% 4 xC-C`AleC ",e%uDH UBE`JF R5H"&   85"   @,e fe N,Nv v  1D X  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B ^f& EBa & & ̋•v ` nE ^4 U & LU E f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &f2  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭zW1 w T&:)uE@ %:a `u>MN[[e  D(e:(C(  5@5*6 T @2ȋ eT5 |N ) @   J 5 wL DC uw  E  @e:(w5 CD>%  6  ^p + 6k5e d ^ [U5@ D(  G "uɥ;5<5-Ԩ  5@ u5 Fɥ@5ub , H5w E 5 V@  ߇@8jMABAe @&PPP@C&5 A  &88Ue  8 "@0 *_%`AB wz@ 8u j  5 , ɥ/b J  1ECe, e   ' @%7U @ E $  , D(@e , 5@R@e,C& : 4 K &s@w @&p > :9%%ȕp*f  fȕp* JeBEETH EBe @Z5    *O 2de(5 @&B B 2=22ݵ D(:(@$8 &SY e2edE_$8$8$8w 5W E5W sW s W ! W 8W >W EW W W W Ō $|e f`eE @&\mj`  ^` V` L`be?E? & f YBEGINENDInvalid answer or terminatorString length not in rangeValue not in range? [Y/N [S [OYNSMHENABLEDISABLEDATAGLOBALLOCALSYMBOLNumeric under- or overflowSyntax errorFile not foundNo pool spaceFile read errorString expression larger than 132. bytesMaximum indirect file depth exceededInvalid keywordRedefining a read-only symbolString substitution errorSubroutine nesting too deep.RETURN without .GOSUBIllegal file numberFile already openFile not openBad range or default specificationIllegal nestingNull control stringSpawn failure. DSW = Line too longToo many concurrent .XQT'sLabel not at beginning of lineInitialization error. Code: Command file open errorSymbol table overflow Undefined symbol Undefined label .Data file error, Code Redefining symbol to different type Symbol type error @ Internal error, Please submit SPRFile attributes not availableLogical name translation error.EXIT without .ENDj <."LBTA  <SYxH.ONERR COMMAN EQ=GE>=LE<=NE<>LT<GT> COMMAN COMMAN " " P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 Pausing. To continue type "" >ContinuingDelayingValue not in rangeMCR UNS MCR RES START CONTINUE '%DMOSRLZCXV.4 TRUEFALSE -- +-*/!&()#ۚ۸ $,ܩ|,,,NSPSYSUSRin-)H7=P@INDINI  *4>HR\fƪЪڪ &,6@JT^fpzīΫث &08BNpxxQdsƁ{84S;"  pp 062ZZ  L^ u~a!a fa vLOqw<OqBx:Ayz}z8.&""b&0"bRBxzX4zyK#<}#d$&&0 zX""`w"Y<}@%w""Zb""wb""b#" a't b|~Şb8{~d*k~M*k~,*P[M ,!&r &zC;4z<@u~@z6zjL_M_M\X\XY 'xx (T[zd"a &Cy$z. Zx.Z^b 6HPr tB,~&$.(2DF=DL=XQ=GS=ST=CN=UI=T TT Tb  T X T T T TT TT T TX X Tb T X TX TX TT T T TALLANYCLSCSHDATGETGSCLSTOPNPALPSCPU00HG557i:)*TRALRTNSHOSPFSPNTRM "$&6Ĭ֬ :DzĬέέXFMS Unable to initalize itselfFMS-11 does not support your terminal typeVT200 series terminal must be in VT100 mode for FMS-11Missing Required ParameterIllegal sub-functionVariable not found or of the wrong typeThe .NET command is not supported in this version of INDIRECT">L\k|̤f~ݤ4Latͥ/M$Cc   F5V-V 5eV !7VT*0 0  F &7 Vw wTwUS` wP5S VV 7VES  wVmVw"SS.S|S"?TG xפ:'T[@TT8TS  .T TMTw,@S#%|MR .T%|JR .SS SS JS%|MpR .S%|JXR j.ZSSzSTsS iS@cS7eUER.;= "GU r  T19U070U Z) ȥ|ȥ. ;w < 4Bu  .@ `Fw*TA*ww R 8ʥa ΥaE ʋŕŕ7|WwT7T7T7T7T7T\WhT  T 0TB7 6S R' \׭.Sw- >Շw$&Ww W-W5 wlf&f AB zE5 u 5 5Qaz & ff+S b7v  % (5 EhSuE  5  D$@RB RR7 RRwRw QwQ DRQ%ȥ -Q E QUQ-Q5P-%*ȥ &7RRBmDR R {UnU7R  ȥYȥNcw +׭NR 7[R9U3U &U Gw.R h) ߆ &# 5QT.ҕ.  5tQ LD.Q 7Q TTTQ x5QУ Z$7T7T7 xT7xT7uT7rT5QdTdQ [BTu&  o74T &w"T.Q(T:c &w T]W WwSQT L + 7S P&wSPS = 7S 0&A EwS  & *wЫSwS d BS BwSS ¥S vS¥MlS¥H]dPХ:]  Х:] OOӕ*ӕ Х   fP t"@& h"׭O ORD@RЕ ЕRЕ:R Е-R R&Е ЕDЕ:׭OR -OnRP iR \RЕ" PЕ"MR5N7?RЕ ЕTЕ:*R @ RPЕ]Е:Е NN Q @ @Е.7 KKKNKKQK7 KQKQ_b\ "AQ)& +kQ"'5>K7qN K7 K)7M K!QaM  KQa׭L 5K7N Jw&K   K K N x!w* L?T8M&.W;T {K Jӥ  C > OK: :    L \&.#L Tӥ   < J åaE Ѡɋ&  { y >!s&CBr AƠ  .@L|8LbJ7 JL #YwJ 8D JQ K  P @   @   @ EPEE0U    * E U  ¥,  w %lKJIw 8 6 * 0G`8Kw 2K%%e @tII DjI :   NIw!`IA w6fJwJ w!J%w=KBr%>B.KJ  E}x BJ eHJ ZP t<Е. Е:JЕ<A 7A 7  zJЕ>H2JwH zH+pHnJ V JB TVJ GI I 4,J  IIH :JH7 Hw"I 3GI LII0Iw I1 GzIGII%IG `5 G5Gm.I b  mIzG7 G&FmFF.H NI# KI*\G ` R HH-H 5eH HH7 FHF5 H00$HhG555512HF7 FFHFFEUF]XHFHLHLHEFHH>H:HHH0Hw 56H 5 Е/ЕLЕBЕ: T5 N5H Dw, j JH Nq[7 JFA`5@$I 9   !@ 9H 9  w*H= OOȋХ  EFBwG ::&pG <  !@ l9w*GW*5"GW*7GwrrGf `@A @ Fe,D1 Fe@"$7 (G  wGw"GI NqFp 8h d7 I5TFȕf  8 @ Jȕ t8B>: &G`@eBFe$&ĝFI e? E Ƨ7*8FE I   Ee, 7w@*< 7FF# @* :< 73#Ewf J!# V z :E @ E  < 7eB 7 7* * 5@ 6 D @ b@D :  <1 L .1t   ¥ ¥ ¥ ¥   Bʋҥ! B~De xB$mDD֧(C  ;BUrA@-B(BHBw* 4 : C`=V=D 5  5eb D  D& C BB7CCw~Cw5WŀAWWWWqC  U   eF A 5B; `9   B7Bew.C@ * 4@@U@7 @7@  B@B@B@@@w :    DB7@B Te* 4T w:B-B/ Ї x &8B ( @  * 3AU@7 ??wAwA7!? & 7A7?* 3    :    T2A --   [ nfA *@28 1 8 13.A h F ?@7 ? 5 @> E>]r@>n@j@~@ы   7 ">U>w@ W7C>{C7xC|  &6E %IF  l ( d|l. CCCww         7BB&  ) >O&   F&   =&    f֋w & L=7I= @= ;=:>fw:w.w:BBAA7A&  $  n Bڠ ywgA ^  OA FA-!; 8 653Af AEECr 6@f e CՄE  T  8I   8 *8&& & & %Q%r%  @\6 *%f 7 |p w > ȥ#Ћ 3D T  S M H{ b & f&%0& ) Z ~5@7 ` 2 55 6 X7R7 |  wn677.7  6  w 6*5C57%55& 6 & & 55& & && & & & |  %/%/& )6 ~w6 6 wf/ `4B5l4h4N4J4T4N4H4N4H4B4e  X0&f &"e"""3333z5 d53 3 DJ5-D5%e-,5 P$5B`-5  <`5B`-5b&f AB &fE f4w4 ew!444m44-4w4 |T&6E %IF P l4  lT0 W W :4X3w|  & #ȋ!ע:&ע0ע$עZעA ע9עaעzӋW RfPE#P ^3  wb bf D3  fE֭3+  '35@1\3X3T3eN33335 35  7t3 d A E52 fEwF3 6<3  #  ` T @ l w2 &¥;¥! J D0 0200E/2 * "2 w  ! w~2wv0 ¥!w27U27J57J27 8562;25r00/! 555' ' 47 4 41ɕ & f < 0 4> 1?f7 47 47 47404B (4ȥa Ȩ և 6BE< C@U4?1wwI10A04 $#4P4 E <# 4 3Е.05 33% #` v0   6  ӕ  6 @0z3 7!l0f0m07\0Y3ѕ    ѕ 7 *3w /0/w. w.  ՇU722 l!d UUe 02 Et @ I`E3A >@7/7h/B u&f Af #5 5 ff.7. @  f% w.w.w.. 7 .!. \.z.t. h.,D! -.-.e& 7.7.7. .  * '~ 7 h.7d.^.X.<N. $A. $ w8.6...> V & ,& xf   fv   P  ȥ/ȥ$ȥ. Хa fb-m`-      ʋ5x+{-u--!\-$,ewV H+( B+# 8+&, H+ B+   B,B +-W;t|,b ,l, + +$+7,w++%% + ׭~+1+b+5,5+ U5+ #D+>+ +w+ Ie   ew +1 &&& & & @++e`f! ~ɥ ɥ  N  >  *ff& e w!,+w!*+UU  ҋ ʋ ^N` @-e JNa ^ ^ 8& .  l@    \ G& 6>w,;w" N N@N 3 A N NPN ,,,#,{uw,w A ^5B*  7 ,* ]w &  J H y$09# 8w<,> [ȥ*$  \W .w$)Х](  F!$z" f7 r"7$@, `"\"@bP"@" |ww C  3 ¥ ¥   w 7v"L$5!BCB@ &  ($& &p&f&& Ε & &p&f&& Ε  5#7#!@aJ  7wF,7! 7`!7%T!h!u 6!0! ,!(! 7 $!@ f A **0#  (UEG  U  &?777t: L  &   ^h wX  zw =U  =7 n P?i U9%h%^Eb 7 7  " @!<!754 5UF SY0 5 ( & v! pl%Q%PMr $eD D` D`  D`: D` D`ememdZe?E? & &Y`2E( m( w` `f   7P. @ BЕ   :P ɡ1 `p" RH7V  784@ 7:`787 4H7l7`777e7e$7e7e77B &w`: w`* 2ɥ@%& #z S fє1"# $ɥ. ѕ Fє t%Z( CeE-Z-V`H0 En CeE T D|Z   ǡB ʵu{Eʋ  $WwLJ wB  w  w  w8 ` w  r   f& & Bf.AeJP Е,A $A xЕ,A lCeЕ,e  \A6 FЕ,Е,   B~BBeʋ w Hf=% Е0e &f=e  Q3 5H && & &   ww2 7 7 7/"w5  wE T "jf    &wt wTE  w~) 8)fŕ,p  P P P$ P% P% P( P Pw7!7 fEeD C VЕ, 00 fE%`    w1w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA FEAa$az   & & @( f  e ee e &f& v f& w EH\  P] A^ Е:%ʋ B$    5RЕ" eD pe d[Е"AH 2 AJ (AL Е.AN Е;AP 2      HХ"Е" ÝӍӑ!soӅyU[Q9E͝ދ߿!Yc[GOTOSETSSETNGOSUBDATADISABLEENABLESETFSETTINCSETLASKNRETURNASKSASKERASECLOSEPARSETESTFILETESTDEVICETESTPARTITIONTESTDECOPENAOPENROPENENDEXITSETOBEGINCHAINPAUSEONERRREADSETDTRANSLATEXQTWAITDELAYSTOPFORMRBB ^'&1 h^ `j Xv5ew <, Bv     5BwH 5  5 2  UE E U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&f &ff 0($Lx $, T8<|Hlt4\|| ,77IY ppY &[q$Y @ޏe 7pTITISYSYTISYSYSYSYSYOV00DHhG555512?ޏj0 TITISYSYTISYSYSYSYSYOV(W`_ppoH?| |&4 0 ԗ.~%   ¥8¥9w צ&&E  Aw fצ   j2*-  (@ep@ XD  e  ` e    X  R#R-w   . ʥ*7A? +TRDEMC@CL@LO LB"ER@DE V:d 0t:IND V9.2,NPR,FMS,MPL. Task built: + (̛,,*SY[],,RSX11 ,SY&RSX-11M-PLUS@  >>SYPSYTIPSYPSCR \  J SYS$LOGIN:SY:SY0e L=  0  1J & pL= x <   !  1@ *B8  5L N C2 4 C@ pL=wX > !5C@  1e1 1  0 W W C@& L=@0e P  @2"e .5@  R  d&  L=eH~ l     4&@`   2 0  lw `ҔD~ "    .&@`    r t w C`~ D~    eC~L=l b5@ &q B@ ;  r 5 : < w  J 2 L=6 w   C~ D-6L=66  h  wB@ʢ    1w B ~l Z w * b f #N \B` e~ . C6#    e a~ 0 e  T ^ D4 V D-65@  5   E  C` RV  w ” B  ~a z 5@0!0 :Aw  B5  8DV , 5B~mB`B~ F z~05>5  ѥ ~eB'@ >~! N ` e  @ ~ 5@  5+5õ@ ~ q 0 j ;BC Z m N õ r f @   5  z :  = BVfP D %)!t-<%h*%*  <%b'#t-<. C@%D+C@ &C@  wFFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & J   5b+   ɋQ$A5f l &5-5 'm![B< q~  V& JB<G Q~f:  t-<4Am< H5  5t-<5 B5@  %6U hwz5  05  P @jwRlwHnw>w f 5@  25@ &L=%5@ & |l <6 6pww F$5@  &5@ L=6 6rwb5@   tw:5@   vw 5@  xw t-<  zww B> <t-< e `  w B> <e `   >` . <  <  < |w@P <E ~Bm< 5#5A< C~ f:  % V A<C~ D5 0 05 f: $  zU~w `!~B-<  U  1w2w3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR  B  Bw 5 Ue B` B`  ^Ef:fBAe*Bҥ ~ ^5%  nU  j%$, BEAe 4 = ww  f:Ae$   | 5 0UC2 (EC@ w   5E5 <e  U5<e`  B<we zu :u ; Nw Df: 5  4E  *f@ f D~ XU  Q 5 : Am< U E5  00\HBH557i:)* 4  eыAm> e$ wL AZ az w09  w f-+ +- . ɠ ~ 5Nm>V  w wr   ~5 5  w0w&"C2L=  5 f h ~  F5 : : uew %UUD  U@ t " P %,b+ 5 :&q *; j  H X: `w V d1 0 C    e0 e0 ;= u- @e5 5 f@ A~  B       Bɋ W]W: mKɋ d((p"eB& t# p*5WYWVWSX  BrZ 55 >f1A%& pp4e6 |- ~*%%b'  1 \ v  1  Br^ J` @A1b ,d "w ( ,AHCCHeEfD & p4e6 ɇ Ƈ%FuJ `Dw  E) B ",e$FFJ% 4 xC-C`AleC ",e%uDH UBE`JF R5H*&   85"   @,e fe N,Nv v  1f H  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B f&6 EBa & & ̋•v ` nE ^4 U & LU E f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &f:  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭W1 wX [?2l \HJY7 KKBY7oYL' ( %N% ())"$Az&B&C&D('M(P%R*&SR&Q(([O-Az&B&C&D('(78DD-/HH z\&8J 2&2> %N%%0` v(()(.(6(>(F(N(V(^(f(n(v(~(((((((((A+C`+9B+Nx+X++ !A[$%././0:  1G_yNO HELP AVAILABLEALPHABETIC REQUIREDNUMERIC REQUIREDALPHANUMERIC REQUIREDSIGNED NUMERIC REQUIREDNON-DISPLAYABLE CHARACTERFULL FIELD REQUIREDINPUT REQUIREDw  EuB 5 CeeO%UU A" wMe 25 =%*  h5 :ue  B 5  Aej~UU BeXPCeL eVe 0 BCe~U  4 j  l E@& D  ~ Be$R~ D~  Pu u @A- 5 B5%B@mBAmBu  Q   U F] E~  r50 n w  %UU444UU4 . w %@mB   0 ( 4E~  w@0  ` Ce2`54 p ` 6 E@t0  t0 5 <6U& , t0 5NB& E% W @&  &D5@  $D  K se~ ~ e 400dHhG555512w W C B =5 .+s eAe3eO3ssqI D4 :%56 9 (   ~fe &4~ 5 U5@  eP ~  E  ҁ B~e• D`~ E5@  wh KmB3eC-4 T w:B6 >% RR DD~ 4D~ 80 C2 4QA8B 5@  ` ` VD45@ +  b  &f  m ~ 8C~meI~ ~ 5!6̇U @E5`u- z  t  ^ 4 5@ & F2   rꆇe B`  : 2@   @ B` 톇   ҋ  %UUD u A j˥*  >0e L=  0  <1 B pL= x <  X !  1@ *B8  5  C2 4 C@ pL=wX  !5C@  1e1 1 x 0 W W C@& (L=@0e   @2"e 5@    p&  L=eH~ l     & C` H  w `ҔD~ :    & r b <w C`~ D~    eC~L=l 5w p  e~@~ w B  2 L=6 P w  ^ C~ D-6L=66  h  *wB@ʢ    1w  l w z f #N \B` 0e~ r C6#    e a~ 0 e    D4 V D-65@  5   E  C`  v w l” B  ~a z 5@0!0 :Aw  B5  DV , 5B~mB`B~  z~575 ѥ ~eB#@ D~ e  @  ~ ( 5@  f @ 5  hj :  = BVfP 2j %&!t-<%('%L'  <%"$#t-<. C@%(C@ &C@  wFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & <J   5"( j  ɋQ$A5. l &5-5 'm![B< q~ | V& JB<G Q~f: V t-<4Am< 5  5t-<5 5@  %6U wR5  05  P @w*w ww . 5@  25@ &L=%5@ & 8l 6 6ww $5@  5@ L=6 6w:5@   w5@   w 5@  ^w t-<  ww B> <t-< e ` v w B> <e ` P  >`  <  < j < w <E Bm< 5#5A< C~ f: \ % V A<C~ : D5 0 05 f:  BUwzz `!~B-<`  v U  v 1w2w00lHBH557i:)*3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   w 5 Ue B` B`  LEf:fBAe*Bҥ ~ ^5% 6U j j%( BEAe 4 = ww f:Ae$  ` " < 5 0 UC2 Ew   5E5 <e J U5<e` * B<wb Tu :u ; (w f: 5  E   D~U  V 5 : Am< U Ep5   4  eыAm> e$ wL AZ az w09  w f-+ +- . ɠ ~ 5Nm>V  w wrr V  ~5 5  w0w&C2L=  r5 f L   F5 : uew %UUD  U@ P lj %("( 5 :&g e de X: `w V d1 0 C    e0 e0 ;= u- @e5 5 f@ A~ . B T      Bɋ W]W: mKɋ d((p"eB& # *5WYWVWS  Br 55 >f1A%& pp4e6 - *%%b'  8 1   1  Br Z PA1 < 2w ( ,AHCCHeEfD & p4e6 ,ɇ .Ƈ%FuJ `Dw  E) B ",e$FFJ% 4 xC-C`AleC ",e%uDH UBE`JF R5H&   85"   @,e fe N,Nv v  1 X  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B ^f& EBa & & ̋•v ` nE ^4 U & LU E f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &f  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭W1 w T&:)uE@ %:a `u>MN[[e  D(e:(C(  5@5*6 T @2ȋ eT5 |N ) @   J 5 wL DC uw  E  @e:(w5 CD>%  6  ^p + 6k5e d ^ [U5@ D(  G "uɥ;5<5-Ԩ  5@ u5 Fɥ@00tHhG5555125ub , H5w E 5 ƿ@  :@8jMABAe @&PPP@C&5 A  88Ue  8 "@0 *_%`AB wz@ 8u j  5 , ɥ/b J  1ECe, e   ' @%7U @ E $  , D(@e , 5@½@e,C& : K s@w@&p ~> :9%:%2ȕp*f  Pȕp* 4eBEETH EBe @Z5    *O 2Լe(5 @&B B 2=2 D(:(@$8 &SY e2edE_$8$8$8w 5W E5W sW s W ! W 8W >W EW W W W Ō $|e feE @&|mj  ^ V Lbe?E? & f YBEGINENDInvalid answer or terminatorString length not in rangeValue not in range? [Y/N [S [OYNSMHENABLEDISABLEDATAGLOBALLOCALSYMBOLNumeric under- or overflowSyntax errorFile not foundNo pool spaceFile read errorString expression larger than 132. bytesMaximum indirect file depth exceededInvalid keywordRedefining a read-only symbolString substitution errorSubroutine nesting too deep.RETURN without .GOSUBIllegal file numberFile already openFile not openBad range or default specificationIllegal nestingNull control stringSpawn failure. DSW = Line too longToo many concurrent .XQT'sLabel not at beginning of lineInitialization error. Code: Command file open errorSymbol table overflow Undefined symbol Undefined label .Data file error, Code Redefining symbol to different type Symbol type error @ Internal error, Please submit SPRFile attributes not availableLogical name translation error.EXIT without .ENDj <."LBTA  <SYxH.ONERR COMMAN EQ=GE>=LE<=N00|HBH557i:)*E<>LT<GT> COMMAN COMMAN " " P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 Pausing. To continue type "" >ContinuingDelayingValue not in rangeMCR UNS MCR RES START CONTINUE '%DMOSRLZCXV.Ҷ4ض TRUEFALSE -- +-*/!&()#һ $,|,,,NSPSYSUSRin-)7=P@INDINI  *4>HR\fƊЊڊ &,6@JT^fpzċ΋؋ &08BNpxxQdsƁ{84S;"  pp 062ZZ  L^ u~a!a fa vLOqw<OqBx:Ayz}z8.&""b&0"bRBxzX4zyK#<}#d$&&0 zX""`w"Y<}@%w""Zb""wb""b#" a't b|~Şb8{~d*k~M*k~,*P[M ,!&r &zC;4z<@u~@z6zjL_M_M\X\XY 'xx (T[zd"a &Cy$z. Zx.Z^b 6HPř tΆ΄B,~͚Π&$.(2DF=DL=XQ=GS=ST=CN=UI=T TT Tb  T X T T T TT TT T TX X Tb T X TX TX TT T T TALLANYCLSCSHDATGETGSCLSTOPNPALPSCPUTRALRTNSHOSPFSPNTRM "$&6Č֌ :DzČ΍΍XFMS Unable to initalize itselfFMS-11 does not support your terminal typeVT200 series terminal must be in VT100 mode for FMS-11Missing Required ParameterIllegal sub-functionVariable not found or of the wrong typeThe .NET command is not supported in this version of INDIRECT">L\k|̄f~݄4Latͅ/M$Cc   F5v-v 5ev !7vt*0 0  G &7 vw wtwus` wP5s vv 7vEs  wvmvw"ss.s|s"?tG xפ:'t[@tt8tS  .t tMtw,@s#%|Mr .t%|Jr .ss ss Js%|Mpr .s%|JXr j.ZsszsTss is@cs7euEr.;= "Gu r  t19u070u Z) ȥ|ȥ. ;w < 4Bu  .@ Dw*tA*ww r 8ʥa ΥaE ʋŕŕ7|wwt7t7t7t7t7t\wht  T 0tB7 6s R' \׭.sw- >Շw$&ww w-w5 wlf&f AB C5 u 5 5qaz & ff+s b7v  % (5 EhsuE  5  JC$@rB rr7 rrwrw qwq Brq%ȥ -q E qUq-q5p-%*ȥ &7rrBmDr r {unu7r  ȥYȥNcw +׭Nr 7[r9u3u &u Gw.r h) ߆ &# 5qt.ҕ.  5tq lD.q 7q tttq x5qЃ Z$7t7t7 xt7xt7ut7rt5qdtdq [Btu&  o74t &w"t.q(t:c &w t]W Wwsqt L + 7s P&wsps = 7s 0&A Ews  & *wЫsws d Bs @wss ¥S vs¥Mls¥H]dpХ:]  Х:] ooӕ*ӕ Х   fp t"@& h"׭o OrD@rЕ ЕRЕ:r Е-r r&Е ЕDЕ:׭or -onrP ir \rЕ" PЕ"Mr5n7?rЕ ЕTЕ:*r k7qn k7 k)7m k!qam  kqa׭l 5k7n jw&k   k k N x!w* =T8m&.W;T {k Jӥ  C > Ok: :    l \&.#l Tӥ   < j åaE Ѡɋ&  { y >!s&CBr Aƀ  .@l|8lbj7 jL #Ywj 8D jQ k  P @   @   @ EPEE0U    * E U  ¥,  w %lkjiw 8 6 * 0G`8kw 2k%%e @tii Dji :   Niw!`iA w6fjwj w!j%w=kBr%>B.kj  E}x Bj ehj ZP :Е. Е:jЕ<A 7A 7  zjЕ>h2jwh zh+phnj V jB TVj gi i 4,j  iih :jh7 hw"i 3gi Lii0iw i1 gzigii%ig `5 g5gm.i b  mizg7 g&fmff.h Ni# Ki*\g ` R hh-h 5eh hh7 fhf5 hhf7 ffhffEUf]XhfhLhLhEFhh>h:hhh0hw 56h 5 Е/ЕLЕBЕ: T5 N5h Dw, j Jh Nq[7 JfA`5@$i R8   !@ F8h 68  w*h= OOȋХ  EfBwg ::&pg <  !@ 7w*gW*5"gW*7gwrrgf `@A @ fe,D1 fe@"$7 (g  wgw"gi Nqfp 27h d7 i5Tfȕf  7 @ Jȕ 6B>: &g`@eBfe$&ĝFi e? e Ƈ7*8fe i   ee, <6w@*< 26FF# @* :< 63#ewf J!# V z :e @ e  < 5eB 5 5* * 06@ j5 d @ b`d :  <1 L .1t   ¥ ¥ ¥ ¥   Bʋҥ! B~de xb$mddև(c  ;bUra@-b(bHbw* (5 : c`=V]d ,4  *4eb d  d& c bb7ccw~cw4WŀaWWWWqc  U   eF A 5b; `9   b7bew.c` * b3``U`7 `7`  b`b`b```w :    Db7@b Te* 2T w:b-b/ Ї x &8b ( @  * 22aU`7 __wawa7!_ & 7a7_* B2    :    T2a --   [ nfa *`28 42 8 "23.a h F _`7 _ 5 `^ E^]r`^n`j`~`ы   7 "^U^w` W7c^{c7xc|  &6E %IF  l ( d|l. cccww         7bb&  ) >O&   F&   =&    f֋w & L]7I] @] ;]:^fw:w.w:bbaa7a&  $ 00HBH557i:)* n Bڀ yXI   X *X&& & & %Q%r%  @\V *%f W |p w > ȥ#Ћ SD T  S M H{ b & f&%P& ) Z ~5@W ` 2 UU V XWRW |  wnV7W.W  V  w V*UC5W%UU& V & & UU& & && & & & |  %O%O& )V ~wV V wfO `TBUlThTNTJTTTNTHTNTHTBTe  X0&f &"e"""SSSSzU dUS S DJU-DU%e-,U P$UB`-U  <`UB`-Ub&f AB >%fE fTwT ew!TTTmTT-TwT |T&6E %IF P lT  lT0 W W :TXSw|  & #ȋ!ע:&ע0ע$עZעA ע9עaעzӋW RfPE#P ^S  wb bf DS  fE֭S+  'S5@Q\SXSTSeNSSSS5 S5  7tS d A E5R fEwFS 6 Q?f7 T7 T7 T7T0TB (Tȥa Ȉ և 6BE< C@UT?QwwIQPA0T $#TPT E ! T SЕ.P5 SS% #` vP   6  ӕ  6 @PzS 7!lPfPmP7\PYSѕ    ѕ 7 *Sw /POwN wN  ՇU7RR d UUe 0R Et @ I`E3A >@7O7hOB u&f Af #5 5 ffN7N @  f% wNwNwNN 7 N00HhG555512!N \NzNtN hNLD! -N-Ne& 7N7N7N .  * '~ 7 hN7dN^NXN<NN $AN $ w8N6N.N> V & ,& xf   fv   P  ȥ/ȥ$ȥ. Хa fbMm`M      ʋ5xK{MuMM!\M$LewV HK( BK# 8K&L HK BK   BLB KMW;t|Lb LlL K K$K7LwKK%E K ׭~K1+bK5L5K U5K #DK>K KwK Ie   ew K1 &&& & & @KKe`f! ~ɥ ɥ  N  >  *ff& e w!,Kw!*KUU  ҋ ʋ ^N` @Me JNa ^ ^ 8&   l@    \ G& 6>wL;w" N N@N 3 A N NPN ,LL#L{uwLw A ^5BJ  7 LJ ]w &  J H y$09# 8w [ȥ*D  \W .wD)Х](  F!DzB f7 rB7D@, `B\B@bPB@B |ww C  3 ¥ ¥   w r7vBLD5ABCB@ &  (D& &p&f&& Ε & &p&f&& Ε  5C7CA@aJ d 7wL7A 7`A7%TAhAu 6A0A ,A(A 7 $A@ f Aց **0C@@(UEG@@?U@@&?7?7?7?t: L @&   h@ w>>X@ zw> =U@@=7@??n@P?>i@>??U?9%h9%^9E?b> 7?@ 7@ B @>A<>A7?54>? l5UF? SY0 ==5? ( ==& vA =p?=l?%Q%PMr eD D` D`  00HBH557i:)*D`: D` D`em=emd>Z>e?E? & &Y`2>E(> Hm<>( nw`> >>=`<===f<=   7=P. @ Е   P ɡ==1 `p" R=H=7V=  78=4=@= 7:=`78=7= 4H=7l;7=`7=7<<7=e7>` w  r   f;& & Bf.AeJP Е,A $A xЕ,A lCeЕ,e  \A6 FЕ,Е,   \ B~BBeʋ w H:f=% Е0e 6 &:f=e $  :Q3 5H; && & &   w9w2: 7 :7 :7/:":w:59  ::9wE T "j9f    &wt wT:E  w~9) 8)fŕ,p  P P P$ P% P% P( P Pw79!7 9fEeD C VЕ, w%BA%SL%IN5w n;0 b;+7 ^;7 X;A L;wlH; P8E"8m 888J E8JwnwLtv p v  t: v &5:U75:p:&ʝ: j nwP̋   Е,wf ?7 GD,fB7E |e f7A A f 4v@e6  -6R  e6w!6766w!6 -4%  5b6  ҍ B D. w9V6\R& Z9  &5D9U6569p&9&ʝ9  K6 ?676 /6'6r \8686w((4 H  1 pUV5 ¥,   ¥, & "B  Sե  5 B \֎& |ȥ0ȥ9   A \֎ % C`\&   &%  %\֎ &   & %\֎ &   @  %\֎\\\\&f V J &fw3 > fE%`    w1w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$az   & & @( f  e ee e &f& v f& w EH\  P] A^ 8Е:%ʋ B$ \   5RЕ" eD pe d[Е"AH 2 AJ (AL Е.AN Е;AP       HХ"Е" ͣ!soyU[Q9Eþߟ!YÝc߮[GOTOSETSSETNGOSUBDATADISABLEENABLESETFSETTINCSETLASKNRETURNASKSASKERASECLOSEPARSETESTFILETESTDEVICETESTPARTITIONTESTDECOPENAOPENROPENENDEXITSETOBEGINCHAINPAUSEONERRREADSETDTRANSLATEXQTWAITDELAYSTOPFORM̫RBDzB ^ȠȰ'&1 h:j `:j X:j0 P:|( H:|$ @:j 8:j 0:jL (:j :jx :| :j$ :|, :| 9|T 9j8 9j< 9j 9j| 9jH 9| 9jl 9jt 9j 9| 9j4 9j 9j 9j 9j x9@ p9j h9jT `9@ X9jX P9|h H9|8 00HH555512@9@ 89j\ 09j5ew , Bv     5Bwn 50  (r- DUt-E D  E E ܁&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&  m  f A N  %&f &ff |y:, AY <d;TISYTIOVrD̀dNpTISYTIOV(mDe4|   XXVolume mounted Files-11I/O error sizing device - DDNNAllocation for SYS file exceeds volume limitBitmap too large - increase clusterfactorHomeblock allocate write errorDevice write locked - DDNNWARNING - Boot Block write errorIndex file bitmap I/O errorBad block header I/O errorMFD file header I/O errorNull file header I/O errorCheckpoint file header I/O errorMFD write errorMagtape label must be specifiedMagtape device error - DDNNMagtape write error - DDNNSearching for bad block descriptor fileInvalid block number - 00000000000Duplicate block number - 00000000000Storage Bitmap file header I/O errorWARNING - Block 0 is badDisk is alignment cartridgeFailed to read bad block fileVolume name too longUnrecognized disk typeBad block file fullIllegal argument valueVolume mounted foreign with ACPPublic device - DDNNDevice not allocated to this terminal - DDNNValue of (/INF + 5) exceeds /MXFManufacturer's bad sector file corruptFailed to read manufacturer's bad sector fileFailed to read software bad sector filePreallocation insufficient to fill 1st Index file headerPreallocated too many headers for single header Index filePreallocation insufficient to fill 1st and 2nd Index file headersWARNING -- This volume is not backwards compatible MXF too large for existing bitmapMXF less than or equal to the existing valueFailed to find Home blockFailed to place alternate Home blockIllegal operation for magtapeIllegal MXF value for single directory volumeMutually exclusive switches specifiedSwitch is not legal for this device typeSwitch is not legal in this modeDevice is not mounted foreign y:c00HBH557i:)*R*D$&)Jwv 5    Ġ 2 ְo@ 7~{vHsrpm͡heb_9\ZYjVSN1IoFC@=գ:74 015],b'$9!t :Ty Ŧ 5ww  7 jwfEbN -- E 1f& N #N V H%6  NW!.W! %%U%16.4̧0(www ) PU$ MCR>-- e4MFMUMMMS@DY@Command I/O errorSyntax errorDevice not in systemDriver not loadedIllegal UICIllegal keyword valuePrivilege violationFailed to attach device - DDNNNot file structured deviceCommand too longUndefined density selectionUnit does not support density switchUnit does not support high/low density selectionUnit does not support 800 BPIUnit does not support 1600 BPIUnit does not support 6250 BPIDevice not ready - DDNNHome block I/O errorIndex file I/O errorStorage bitmap file I/O errorUnit is not at low densityUnit is not at high densityI/O error on device - DDNNDevice offline - DDNNWrong volume labe00HH555512l *** Attention ***This volume is operating with a replacement home blockPlease take the action outlined in the documentationThis program must be invoked as an MCR function\&%IN7 %HO|Uw/w  !נ נА w-: ܇&w 8IF& & &  f&& P& Ε 1.R`  & P¥"N  •   P ׭`3VSPƵMصJGD(<-<H9Y6u30˶-*'':?TiԷ ٷ  Dw*  НН  Е:P\wP@ V @T6\ 2 ѕ ѕ-ѕ-ѕ ;ȋ "ȋ" 7 7 ȥ/ȋw8v- wB095@"%DY55w5w55wV5wPC5  55A E w w w w wwfv- B5@ & & & & & & & & ΕP 8w& lE Е:&3'&1 l ƿ  L Ԧ5ew , Bv     5Bw^ 5  5 2  UE  Z~E U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  % 5 ߥ& *  + 23E Ew Z   Е-   0@A lW e`fÊ    E &f &ff   % + d ** Volume information for ** Label = (was: /Bad = [OvrAutoNoautoMan /Cha = [AtchDcf /Dens = 80016006250HighLow /Ext = /Fpro = [ /Indx = BegMidEndBlk: /Inf = /Lru = /Mxf = /Pro = [ /Uic = [ /Win = RWED,RWED,RWED,RWED] Theoretical maximum files = Maximum possible files = Volume initialized as single directory device /Access = (space) /Owner = The Homeblock revision count is , Last revised on Volume created on Volume initialized with P/OS defaults|h  Tӕӕt 7 x7 7 Vw >  w7 5 F#>ED6E<wxT  ЕЕ R n5  5 -DT -DD-EM n X5@  5.5%we7 zw n% %c w%c w~%wz ~v|rx^`\ НН}z dЕ:-d\Е Е( $Е) @\ 65  wn\ | P  55  * P  Е)\ 5 Lw5>\, 5(Н7 \ zw 8\ `5  L$ >5Е, &5Е,* Е]\ \-  5X6  5B  Е,: Е]\ %DY&=\= %DY5 %MF FIM 5ZUQ B\ 85wB\X  ݎ Е.\ \` b \ XK\j 5"s 5v 5y  |  Е.\ l\ \ 2Е.\ D\ 4  Е.\ \ | Е.\ 5r\ : \ \5>>    nЕ, `Е]\ Z5wL\ > Е.Е \00HBH557i:)* "\   Е.Е Е \ 5l'\. Е Е \ \Е Е % Е Е \ B\H! v L i Z" z\ H\{ 86 XЕ ЕaЕtЕ PPЕ:PPЕ:PP\ P    PPЕ-PPPЕ-PP=HKNQTWZ]`cfiJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC7 n6jd\ \ EPeJw Dw d% % -@ j :@ Z  Be|5xR w~5\ *~ h|RT U4A ( w25-w2w-w,Uw5 Uw5 Uw 55"U|x"Uw"h5`$Utw$P5dI,UXw,95H,-U<w-5, ..Uw.6De<~5&fe/e  A.UUU p 65@w6^De/"~ t5w5@e& Е  hʋ 5 Zfef  ) ޝ f   ޝ@ @ dpw8-  w" ` XO P  e@ d7w d dd$  d dٱ* ՝՝ d 7  &fw 7 7 @,q `-KacJE[ !m@  ) L R  x7x f@  &  5]U E6 :*&@E A  ̆  E vE c  @  . &fJ       8  " .$ P  F̥ZḀ90     ׇЇЇЇ7 ܠwؿwB 8w`w:@w* wׂ5 U55 wBwB,ww&5@w$wN F5UR <w& &5U&f C B RַP 4 eA e A EB B  w -F@  -   j&-fDF"Vd7 t x w`X`X`Xշ`$wޅՇ5  w% % w|R UUUw`w  Uw~ԇ%fwz\lwZxw7 7 U2 7 U"iԷ zU lh5 ( ]-Ƈ@S -Թ F5@ Z>%0U % w|hR p Un5wwP~Ӈ5vwUjӇ5`wwPVӇ0(%ww U E wXU5 tw$}w݇7 7 7 7 7 EE E@EU| pMplw jMf`]^Z7 X7 VU@F҇<귊7 ҇ w"7    Н 7`e vw7 58 RҌ7 &w5 x6p7 wv55 w% Uj!50`w5TUF%ѱѷ 7 az  #$@w*U Ї{wUЇ  w ۇ%c % ч5    %d% %c cc@"Їw ' UD$BA ,&( U BQ ZЕ* ACCESSBADCHADENSEXTFP00HH555512ROINDXINFMXFOVROWNERPROUICWINLRUVINAMESDIPOSNOAUTOAUTOMANOVRATCHDCF16008006250HIGHLOWBEGMIDENDBLK׭ױ׵׺׾  %*.26:4҂<҂DLЖ:TRҮ"0R/4Ѐف"قJكfلمن֚ه־وىpڊًٌ6ڍJڎُRڐXڑvڒ|ĂL="0=[BٔBٕBٖBĂ,&]=[(^٘ ^Ă,N]=ҙҮؚҮ؛Ү؜Ү؝ҮĂ=†Ү==Ӯ؟Ӯؠ(ӮءĂ:†:Ӯ=†TӮ=†hӮ=[<"0Fծծ=†Ӯ=~[]ծ,RWECD*=[‚P,‚X]=†4Ԯ(ծ=Ӯ"0ӮӮӮӮ&   `@ ` B   & A @    w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C DMi DM/ DL(( DLP( DRD/"" DRav 22 (DR7  DR/ DR`7   ֿF   `DTSK>LBN(S)= d d ƿҝtp7  -Xe-P-J7r%DU27 7 5 wLbH^hJ5C, 5:d7( $ⷋW! x    9 d  %` Z ehʿ  5850 ʿ  5wPUєєє$ bW LHP3ֿֿ7(ʿ (¥: ο  ! W"Cʿ fD`N % 7!  ȋ %Ҕ  &@  % 4  hֿЕ Е ʿ1  A 2 f Е:    Jֿ 6% w7 0E ݜ ʨh 6w ʪ &w  Tw ʋ UVVf , $ W!f    0  a ff a Q % %ea e`q  ¥#Ћ ¥.Ћȋȥ ȥ ȥ:ȥ,Ћȥ ȥ ww Pew   - w`w p cW xptlԝ`ԊZ% 4 e7J  cW t %գwR ݰ h  A B %  wݷֿ .    oww Xew 5$ wݷ|< ZpVl wdݷ^ )ֿwwR%  ֿRRRR% % ؤwAE @@` tC e@ 7wʿ f  w ' UD$BA P&( U BQ xЕ* &   `@ ` B   & A @   00HBH557i:)* d   p ~  7X ^  xm@etro  L LwEeK 5 eK f&f¿ 2 ɜ   4wʨĝ H ʪĝ 4ĝ &Se dw vrV  JHew .,   7 ~   ~U%   rAd ^    2 d D 7ʨ j ʪ \ T  v p%t7jrn Lw   "$    E &f&fd@     ҂  `d 2 wbr1drAd     % zeL  j݇=filorux{~ŁńŇJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECDECFILE11A7 D7 Bp4 5 <d d|x. f% R e|R ., $""$!,-D&e<e  ALUUU e   e< T e$Е e |ʋ eՕ[f  k fޝXՕ,f  T PޝBՕ]eP  > 2dhd NwH j՝՝ d e _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM *** VOL1D%B000HDR100010000000100 00000 00000 000000DECFILE11AEOF14444444444324410 P4 fw%MS \ 5lw5`wU &wd  | N߮W) ~BE#ȁ  [   H 1|Ý 3 wd  Zy| N Bˋ (wd ( w .w B 4 .ˋД  @Pd & ) ݱ&f d Xe0 He0e0 &fPЕ &   `@ ` B   & A @    00HH55551200HH557i:)* t:#z xQz kzNNz*O:zt:#zt:#z kz VU%U U` UfӖx\ӌw|  % wFB  e    S ee@ 7w wr j 4  e ݐҁ @ pS 3ee@  ,wd  w` w P   w wB  w: %1 e & S ee@ 7w~ Bw " 0 %% e & HFDS ee@   w  wXd $  w w*  x ȿb  RՇC  <ʇ Lw Ӂ UU W XЄTЀ wه .H B@ : D D Daee T D Da%4% -%%%! %  % Bm\tw ndwZ@ @ d  |:,SS Y d.?SYTISYnTXJlSYTISY(SRXTǃ:|X& <.  ;¥8¥9& ɋ=          1 07 EI q   P 37 7 <   7,XAAq vw &# & 5 , H+ {xީ?7IЋ V; Ћ w)5 :E 2 d5nm U7  Ң8n* 5 A@,1R&w:!$$ک ک$eq ! R`& ?e 5 o5AAl6 M&%FFD  *Ut6?2N3e00HH555512&@ (S & "& ?w % d Q J%D  U?P3e&@ S X& "& 2D?@p2%0 76 w: w4 , Dw ʲ5 5 D 4 $w( C 3 /  w~B3e$@ 8ȕ P;ȕf  4>܇@<eB$C3 3  :C*y*r*t*g*WY&f (D*Q_<5 w5B5DQ7"x w| ܲA 1x * r 6r n uj ^ " e>   o 5   %&f U  ?  e11"/b & f& P P ?L  b *Q1eDeB￿ & f&   ? w w w     w   w&,e?Wt c?>     0 0, 05@ 05~e 0 l@,A1 A@,1U\ nrv*,.0j6DHvz $$&FL^*0246:2l    $ INS -- Task image I/O errorSYLBlf&:62 RESFSLmA㱸B+ڰt INS -- Command I/O error INS -- Syntax error INS -- File not found INS -- Illegal device/volume INS -- File not contiguous INS -- Device not mounted INS -- Device not in system INS -- Command too long INS -- Device offline INS -- File protection violation INS -- File not properly closed INS -- No pool space INS -- Task image I/O error INS -- CPRSX$SYS exceeded page file quota INS -- CPRSX$SYS exceeded working set limit INS -- CPRSX$SYS exceeded virtual address space INS -- CPRSX$SYS exceeded byte count limit INS -- CPRSX$SYS section table full INS -- Remote install error - VMS error code: j$&  Q 5  jE%w2֩$ Bک7 e ` \s$5 ,: u5Vc  & 77 Y5:2 *3lE7 7 %? Bte9Ee0P \2d ,(t "(tW-| s3ss| ej7  7~ xw $ < e>$ &:`& e e w 5  w-w-wd  xwvwrX3&7 & 55E@B&5v*7"m5@   5 Z5Rw 5 Bm w (5h 5 U 7 s<5@ 5w. U55 w U7 7 A5wt wv A A A A 55W W B.w  65?3w lAm &AeEA A A A B 5  B 5$5 5 ` w 5@5 5 "735/ 5(5$5 # ( le B U@5  w w U 5 U5Us:55@ w 54U05nY5 5 5  $ w"5@B655:5 (5&$55 5&m5 55a5\5W55 O5xK Hf 5? 5X5@P55 5w eU050 5d et`(N`&%wzs2E@s`(s`<5 55 w55U > T32$5xEW  ~5 ׬22 5mmU5@ 5 U0%%|5@U0555U%|w5 weT ^\  AmwwT7 DUœ2` 4 eE wPw wwn5 d& T(li5 8&mB_(82# N  M  &A G(U03:5 8*e?E?      w^s`<70R3l0<m  .lTwwU   m7  www07 $̽AA,f(" p "! p!$ Aq N 7ӂ # vDT 2,""2!! $ C N BJ,5 5@5 E@2 5  r0 5 U 015 0U 0w # eEl e & e e w &R7 7 "eE7l&N N m&N N &N N ew zwTU 0 Tw:De  e)  U%55e) U%-v&4 V7p  `U@ ,7H44 e 54 $ P$|mp  H$    67  " N efeEew-0w 7  w we Nک$ fAT(  Z  LD, f  < . 1P ww4 q~q 5  FLp-p-  06<wt5 m2ffm@ R u-A- 5E2@5A f>55w5    5 & <7 55w>5wEw >wwR bT w-w-5w 8AwT | wީ$ 5 5w-w-2nkhedFaq\YVSP)MA KqFE@?7:\7f&eU \# n%X{  5U wЋ A xA p%Y E A A A A A A  fA TB A5^T t @A N `" bU5E BߡA A A A E 00HH555512  E w 5e PT @E? L^ 7 6w     p-p-5 ewjE 20 W r  r %|%5 w wrC eӑ$~7 T`7 57 7 7 SYJ7 d "E$ AW P W yWvW$W$3AW kWhW/ ZU W$W:w7 55zW  P Շww ^5TUL7UB&Е[,5( !Е, 5  Е]5 a- w  rHE$ fW OW LW v` @Z$ӥ*W \U S 5@7H7J7B7D7Fwwww (5 E UwZ#t d" "  w\& & & &  & & & Ε @5F5>75Ef, >e UEUEPɋ AW WW W/ P w @ ^4 @U505(U / Uwww A  w% Uv}w W wt#l UFyU >sU2@mU&g U@ ^` rL jt ww,[ wyW 򂗠, wb W ]www*$UU@UtU r@Uf U\ʩ̩ YNЋKPK@wN RE MU w$w" e E 5W wwxUwUpХ[m,g¥]¥,$¥R6¥W7¥E8¥D9¥*RU JMw M]wx7    7 ~7 z7 v7 r h)EbE ZE@REJ|7 &7݇ ~^݁  3 L` w57 Х[ "¥CХP ɋB B P¥,¥]wr¥UХBU* U*¥"¥ wD$B¥ ¥bB¥" (ȥ""Ћ ҝ6(,Ћw ¥S&& ¥M&< C 7w܀ww5 z5 5  wUH L7& ((0 e   pEU5 A A A A EpPE5U@U""b 5 5UF50 $ 7$4^> 8H xj X Pv@A 1-1- 0tLV &7 6w     w4$֩eq  $ @:4   < e> Xw:w<5T T=  6W#OV$wt wp  0  F v50T@& NA ` LӔ B < | v e  TB TD TF% 4T T$ک e ep e,qe5  qQ$5 5zqQ$  5jm 6 8UU@5@E@e& X؀ j0 --|AY~",AD $ B 2 150   ,1,ew.Uw.5d? vfA HׇRA |FLœ5<7  7  7 7 7! 7  7  7 7 PK D  5 5(   5hU ?և?%--/W!$ $֩eq  "ч$"8N&ePP A Е:U pχl wXϖ, INS -- Task name already in use INS -- Partition not in system INS -- Specified partition too small INS -- Task and 00HH557i:)*partition bases mismatch INS -- Length mismatch common block INS -- Base mismatch common block INS -- Too many common block requests INS -- Checkpoint area too small INS -- Not enough APRs for task image INS -- File not task image INS -- Base address must be on 4K boundary INS -- Illegal 1st APR INS -- Common block parameter mismatch INS -- Privileged command INS -- Common block not loaded INS -- Can't install privileged task from non-privileged terminal INS -- Task image virtual address overlaps common block INS -- Task image already installed INS -- Addressing extensions not supported INS -- Partition XXXXX not in system, defaulting to GEN INS -- Checkpoint space too small, using checkpoint file INS -- No checkpoint space, assuming not checkpointable INS -- Warning - privileged task not mapped to I/O page INS -- R/O partition not in system defaulting to task's partition INS -- No pool space INS -- Illegal use of XXXXX partition or region INS -- Access to common block denied INS -- Task not installed with an external header INS -- User D-space not supported INS -- Task may not be run INS -- Illegal slave attribute INS -- Can't run a common block INS -- Supervisor mode library not supported INS -- Fast map not supported INS -- Cannot install shared region with increment INS -- Deferred binding not supported INS -- Deferred binding (DFB) may not be overridden)t^xڶ}Ɂ6ʅڦʉnɍBʑʕ*ʙ$ʝtɣʧ ˫$̯zɳڪɸچɼڒڞڐNZfPRITASKUICCKPRUNPARPMDINCSLVESTROPARRONPROAFFIOPSYNCXHRSECCLICMDTIMEWBFMAPDFBABCDEFHJKLMNPRST INS -- Syntax error INS -- Invalid keyword INS -- Illegal priority INS -- Illegal UIC INS -- No room available in STD for new task INS -- Low pool, try later INS -- File not found INS -- Task name already in use INS -- No pool spaceXX  INS -- Illegal UIC INS -- Too many LUNs INS -- Illegal device INS -- No pool space INS -- Task may not be run INS -- Task activeQ| x|<~WF4|R)|z_Mx|:f|. q|2Z|XQ|R w D  ť ť 0B Aaw  (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA : EAa$ & & @(  f  e ee e &3&f& v f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ B WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e ee00IH555512ȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4 5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&   `@ ` B   & A @    &f w @(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  .1 >eB  8 $&w n*(5<s1  U U@  *f&" )'&M'&&**%*%0 *&* *5ND  <  EU r  ^   f  >5>Eu   w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff *@<#8w /$ ,:T < U@% DD%][%><wL  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce 0   &*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` l*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wb0+1(e  @%&p*w6 f( f)f 8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DDEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   00 I I557i:)*b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@**|:,RRL Y 2 t!zTITISYTITITIOV|ǘ 4!| N H n -  n  T! P .F *- 6 n# B  B      6.#{  eJ w H w F eB w @ w > !s ~7  &  X) Υ  v # x )wh * # P 7 v       2"  5w%DT6.#3 y w7 6! $wee*E%,%CT 7 XV# j5 UR^7Rx# D w E$% et 0# % U % 5Uw  w5Ce*5. 5@0l2p  0"0$    5 5 U5Uw43,p * V5@ 0l20,  0 436 % * f  V @ wEee*%%@ %@ @ 0# U@w*+5  *., * :*5 E00(.. ``00`! U(.w t n# 7  7  D ) 6   & y7s  r )ew w 7 : : D     N&    wt% Z@w5vOU : 8   Q$ %  e 4    ew  & %M : N 0,<8  Ne \w5 *E%$0l. p "p $ep ep 5%% ,. $  DCE0Ԥ 5 : 8 ew  b , >    % P% % ͘     , H e    ,.0< % Ԥ$   h z4 X0,<8 wZw%% w~",$%.e AeB p 00IH555512 &&e%%%.e  L  pp& %  A  B $ &" 7   `m w T  w& `wwww~wBwwwwwwwwZw.w wwf& 7&"PH"&"   5Z j0 >#3 -3.` 3e3, 3*++30  3 33 @  wf bc Te <%  .7 #1 )     *aa  v r% { d  wf6" f vv7 (  " B Q 7   |"C "B rK  F % R  ȥ= ЋCɋ!ы  ыɋ C ! @e  z7 6 0##7  j w%bwf% Vwbl27 ,&&%% $ 5"  pw`ew @  N@etr :@eA AeB @   l$A l"p0% %    `A aB Bm D u U%'&1 BD% :D& 2P6 *d6 "z5 r5 V5 x6 6 5 H5 N5 6 D6 (p6 (6 (47 45 p 8 | 8 8 8 l8 J8 `8 z 8 r8 jt9 b < Zf: R|9 Jt9 B9 :t9 2t9 *9 ": t9 H: t9 N: t9 $t9 $9 0t9 <9 <$: <: Hz9 Ht9 T9 Tt9 `t9 l: l9 l9 lt9 zl<: rl : jl9 bl: Zl; RlH: Jl9 Bl9 :lT: 2l: *l: "l9 l: l2; lB: l: lN: l: l: xt9 x9 x: t9 t95ew , Bv     5Bwr 5  5 2  UE ! LE U 5@*& E& & f&ËDef Ë )̋U&ff 46f %8 E D/D!D l0l8epl0pɥ.ɕ w8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w. f( f)f ** D% D%,D% 8D% DD% PD%X\ t*Ph*P\ D%0 !t%t#t%t%D% ,',',*,-,/20313(23x00I I557i:)*33P45d45(65485D@95L:5`X<5= 8p= 8d|> 8d? 8Pd@ 8hdA 8dpBt9Bt9Et9Ht9tKt9Mt9Ot9,Qt90 $R9U9 Xt9$0Zt9<9H^t9Tbt9t`ct9let9xgt9it9lt9\n\APx8` ((H@Ph08@HXABORTBADBLOCKSBUFFERSIZECOMPAREDATACONFIGURECONTROL_CDENSITYDESELECTERRORLIMITEXECUTEEXITFILES11HELPIDENTIFICATIONINTERLEAVELOGFILELOOPBACKPARAMETERLISTPATTERNPRINTSUMMARYPROCEEDRANDOMRANGERECORDSREGION_IOREPORTERRORSRESTARTRETRIESRUNTIMESELECTSPYSTARTSUMMARYTIMETEMPORARYFILEUDBVERIFYVOLUMECHECKWAITWRITECHECKUUm۶VVm[mے$II""""UU !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@@ !!ky0M did not respond is not ready unrecoverable error at block is write locked is offline data overrun at block I/O request aborted privilege violation bad block, fatal hardware error end of tape detected write check error at block unexpected error #Fatal file system error. F.ERR= ^COnly ^C allowed error threshold exceeded (octal) (decimal) data compare error at block Good Data: Bad Data: Word position: Buffer contained . additional errors Byte position: ,Fatal system error. DSW= PC+2= unexpected request to queue I/O - request aborted...IOX -- READWRITEREWINDWRITE CHECKWRITE REVERSEREAD REVERSESPACE REVERSEWRITE EOFUNKNOWNNo buffer space availableAborting due to user command No activity remains - abortingUnable to create/delete/map dynamic regionNo such command - type H for helpCommand not unique16.08 with terminal support and regions: j E"""\A#  P #< #$  ##Q $$'%# IOX>P IOX> f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  000$IH555512f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew r w h& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  2 2 2 J3 3 3 >4 8   * `  4 6 e6p 4&*w 0,0w \ w d$0,0w 646 0 d)0406 0 *=D h `p46 f 64/=  x@) 0  8wz 46 8 e*wZ w ) H* Jw46l00,0, f 톇,, w 4     .% eB U5UU plp & NeՀ)*w  ) ` fU p%  BA `6p 4p`4 %60 4)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) &f |  Re) .  e6p 4 08*wp=p!Օ^,*1 U8UMw w` \* h* h+ 3eB  8 $&w 0*(5<s1  U U@  xf&" )'&M'&&**%*%0 *&* J*5ND  <  EU   &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w  w* :5)%Eefffff f% EDD%][%><  T1     f e  C C C e`(e( 1  `(( D  >: 5 eCew DBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w (e(&&& e"4 &fff& & "&eW!  eW!eW   p*ŋ(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &00,I I557i:)* X\5w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  3 Xr5w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce &   **@<#8w /$ ,:T < U@% DD%][%><wt  w1  %,,:4 8  ** 2 3 3w ( ) 8C * ) *w&*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 Dp  8 V *`)w C# <   D @)  6?0D)  DP5R RRR  2 4 3 >4 3 3w  n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f 8e * e*wp@)0,   ) J)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a &e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  RwL Z JwB # n f  `* |wl)0406 l0 =p!Օ^  DP5R RRR 004IH555512 3 3 (B7 X5W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w $ f &* *w p*eB 8  w F(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  L1 >82e&( 0 0 0 80 B0 0 0 0)#0.w FBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w zMw  ' $& zx& rd% jPd% b2 Z3 R>4 J3 B3 :3 2(7w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( < *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ ,& & :e# eB&B rB  * eBe>  # #D #=0/H#@&0 # = e0   `0@e 6=#02/002# @#?@#040 6wH/!0/ l0/!p!0 .=p0p2w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w` Mw  ' $& zx& rd% j2 b3 Z>4 R3 J3 B3 :(7w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# &w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  H P3)/ 0#( P) 6@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( \ *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ T& & be# eB&B B  F*  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6wp/!0/ l0/!p!0 .=p0p2w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w Mw*00e >E p* w" 8 !Հ)w*w)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) &f h e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*1 U8UMw w0,0, f 톇,, w      .% eB U5UU p plp & NeՀ)*8e2 141612epl2l0p *) l0, *) $ )*)0,40,6 ,*1 U8UMw ww (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA bEAa$ & & @( :f  e ee e &  m  f A N  %&f e6p 4 f8 81416   f : B 00fep=& /e`pw> =00l&8el2 0 * ..8em,0l0!D0e6p 4.) R&f j & @e) .  e6p 4 v08*w0,0, f 톇,, w (     .% eB U5UU plp & NeՀ)* P&   f >5>Eu   Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ Nz  DDEe    *1  ˕03 "   ˔Ӕ ʥ7 0%%u M 5   D , 8 S |7 7 ? ? %  : 7 b $ e e7 T=5& *%*E -e  % nf $v  H#  6@$67 B&@?( @ wt *w  wd7 fA 77$7 pԇ 3 % 4 5 ߥ& *  + 23E Ew Z 00DIH555512  Е-   0@A W e`fÊ    E &f  does not support the commandww `we Jp6 6+ %@ 27*5 7=vr75 .#y{@  s!% %U ;@60 6 pU !%w"e l  T& &Y@ w` (eEA A A A "w "we?E? @ @"K3   "U " e  KE %DT4"  %V"U p   %DT  0 3 2"&3w eE D` bl lrw \  B eE"s    s-  Csl&f >7 87 @A *C57    llC bA  e0 0 ĕ, e X6 ĕ0 7 xՇ?    AmC Cm u  Mw>@zZrN vH Tʚ;@B'd e7 t6 Hԝnj< %DT 0$ s 3 3   @   2 Ees ,Ӈ,  e  7 6  515 .7 \f6'5!5z7 V~6r q gE $ ..  66 p666@V5Vj5N ~5F5>56w.r7 p  E UE@ U@E UE  U E  U 77 ׇ 7 >L,e%" 1> x%:1 1 Q$ `   :p"p$   " ," 1,$pp p"p,  % 0  a ff a Q ea e`q  ¥.Ћ $ ȥ:ȥ,Ћ ȥ; BJ8 : 855NOYESMM @MFj@MUj@MS@MT,  w  ť ť 0B Aa h45%& w :&Ba +- ʥ# . U 0   b   `     f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w B %ҥ[֥< , (e  5 s  D w&f 00LI I557i:)*   N # Fԇ o6 .#33 y54L4 460 0 *% @6 0 0 *5** U%DT *5U* 3 ~0 U 6.#{ (D&T9     &; 8U 57 98  !  $8 ` 0 E BӇ 5 r5 |$L: I/O is unsatisified at timeout - function:    Ћ &   ¥. Kȋȥ ȥ ȥ;  PB9% "9@AZA Z r h¥:59" B9 p%ee>e  A@az ԋ 0X5 (X5 is not configuredSyntax errorDB377: is not configured 8 <9 77 *9 ұ%DYP  @ l0 0  P9 0 0   %M 5 E%4 (@ wh7 dV9n LJ :, 2r5 failed to detach failed to attachDriver for DB not loaded n99j 9 @Е  d7b$\7HJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw D&& bЕ- eaePPPЕ-$w `D  &Е. ce 2 Е:   B `6 X4&f = 9&"! 2 ,T= 7<" %|-T T   9%#$  > ewZL ҕ ҕ-ҕ-ҕ 9%h s%  $ h4 ژn&  4 D6System does not support AST'sCTDBDDDFDKDLDMDPDRDSDTDUDXDYEMMFMMMSMTMUSYTTAX=?X=00TIH555512 7 mZ\w ZmRTm>Bw @m6:w 8m.27p ` h < >= 6> 0 (<   ,=  = = ~8=  w45e e  > > %%%%  4  >= l'0l p p 0l"p 0l$e Xe%%% F  =!%. 5  %DT W=%DT~= e: e a=p= % %  Jv= w j f= ~XR LJ = V= R ^ = <= =  B> U V7 `> E D L # 7 7 7 h7 f7 d7 n7 l7 j7 h7 f7 N7 L7 J7 H7 F7 Dw ڠ 8 45 d6 45 45 6Summary of exerciser activity at A C C U M U L A T E D T O T A L S : - - - - - - - - - - - - - - - - - - min.. R/W requests totaling . blocks with no errorswith errors. records . bytes AST's executed: . Idle-loop iterations: Unreported error count: TIME -- Run: min. Elapsed: min. Remaining: --   7 \ w  F = T= Lѷ 0$dѕ  <$$&=5"=5=  -$%. .v>$p)% 5 0%DTB "%$ = %%  .N$55*= z5/= b55 4= J 5 #H= 25@9= C= %2 = v r>= %< = ?VR`$Z wP7 "G  > .> Ϸ   7e= xq>% z>  > T= Le ?  *R= >>  T=  =  r W= [=% T=    >  " t" !m Q$^= z\A D> : 6 2 ^ t= RL  @R= 6wT% =w(=  Zd6 R45 J 4 B6 :D6 . -> .:.VFYSELF11COM RET WRI RAN ERR=INT=LOOPBACK = YESNO Buffer space usage= Maximum effective BUFFERSIZE= Device Mode Buffersize Filesize/Records/Range Parameters------ ---- ---------- ---------------------- ---------- Task Status Command line---- ------ ------------SV ERRORERROR WARNING SUCCESS ACTIVE QUEUED _>h>V>M>M>""D"x""""" |"l")r"~"j""h"x"p"9n"Ez"Jw &w: w7  L J7w; *wȥ= Ћ ;; v؇7|@ ч C "3Z+O &%>  2 7 ,  "; 67-" K %DT>  ݴ< ( ȥ=  wt<НzНw Е: t< w7 VNF H< , P<  X< d< ϡ  w6 d< n   ۈJ8 6 6 ۈ 8;";;DISKTAPETERMINAL is already configured specified device type is inconsistent device type not specified - defaulting to 'DISK' Disks: Tapes: Terminals: DB377:00\I I557i:)*;7  a wZ wr%Qf%^  Z%|R|J  ЋMm EA ,B@ " B@ QeI%ɕ ̥#̕  z ( "" % @<1181e 1e1f  ;%tz;%h;%\h; Fw&< )% e< ; %>< .A (<  8C@B@ %% $: %> , С L5 d6 r5 ܈J8 x6 ܈8 \5 illegal density syntax error is already selected???? Density= BPI Characteristic Word= MM @MFj@MUj@MS@MT, N=s! )=<=<ȋ > " X p= 8 = * = Ve  _  -t= $ w T Dx    $ b   wF     `0 jw G> ,@ >eE"H?     /"&  0  Rw Z .  0w w \wfwVwLwBw8-# # ##e?E? A Ar+  735 >=8475 u5 U#;.#2  2 2 2 u5 w .#w44  eRSS7 d ^%e7 fSS x6 xڈ8 pڈ&8 h6Syntax errorCommand valid only in Command ModeInvalid pattern numberUnits are selected - command ignoredEffective BUFFERSIZE is too large 000lI I557i:)* = Random Data 1 = 2 = 3 = 4 = 5 = 6 = 7 = 8 = 9 = 10 = 11 = 12 = *============7 7 h f  wPч77? u  v U2w<2.00`.` TU@ VU LU  BU 8U  `?H? ҡ  |E`  77w:A@wKU 7    jo . 2wVp,b%DY \ &A%  Z "Awf %CT:%DT6 &3 05,( nBA .g@ @å@å@   F   5 U JjE  %@  N?  3@ ~,  60 ,w~.,0 ,w· %  <  \P@BAs3 3>  χ B t& ?@ &A RG#. Al"` "?wneEB%DT`?0 T" "%DT? \ k?  w? v?%DT%CT hb?5 R?5 .A @bw? ^%DT%CT ,A '0 p*A" ?w2 4? < @ & mw L@6 ؈8 L5 @5 (7 @Z5 5 (5 L85 p48 L5 ؔ 8 zr5 r(6 j@5 bL 5 Z؈J8 RL(5 JL5 B؈8 :L6 2(5 *(6 "(6 ؈ 8 ؔ8 L05 \5<4==F>>.>J=<=b===BUFFERSIZECOMPAREDATADENSITYERRORLIMITINTERLEAVELOOPBACKRANDOMRANGERECORDSRETRIESVOLUMECHECKWRITECHECK buffer size is greater than default is already selected LUN asignment failure is logged in buffer size being reduced to typeahead buffer size VOLUMECHECK failure. Unit contains a home block syntax error is not mounted or allocated for NFS operations error while reading home block is not ready illegal range illegal densitySY 0A r7 d % XӇ7T 7L%Dw678 b 542 5E ` 6 ,. &( 0 ,   :   0 0 l ` 45 T ~ tС *:  (7 , (5 |88 r5 (6 ܔ8 - unit now deselected is not selected7 r pwdч\ w77 = P wn7f7d7^8== H wJ> 0 CKU ` wjp4U` 4eB&:ږ< V T<2 U U@ << h  $  4X"Le`# x Z( ^  ;R< ww < T! w t # l7 Tb < ! ϡ M7< 5 8 3 V="$  &% @N= <V=p"p$pp N= B<t>= "%"%$ FB= %% 2H=  8L@6 0L5 (r5 @5 ۈJ8 45 L6 ۈ&8 \5No activity to startSyntax errorCommand valid only Command ModeIOX Version Command valid only in Interactive Mode syntax error illegal range is not selectedUnits are selected - command ignoredREGION_IO command is not supported . -> . ;  | l<%;%; T L>;7  > :; 2% * *; ` 7 7 ~ t pN`  wZ` LeBSYTP_M $d"f#  * .# z&;W;  T DA<% ; 8 甁 Fx;f# $W;w Lܠ 8 D, <d6 4ܼ- ,P' $-Failed to open log fileFailed to close log fileFailed to open existing log fileFailed to truncate/close log file. F.ERR= -. ******** EXERCISER STARTED ******** ******** EXERCISER TERMINATED ******** ******** EXERCISER ABORTED ******** ******** LOG FILE TERMINATED ******** ******** LOG FILE STARTED ********i$b8%d \` > >?$?$m  ȋww 5 funhj uhdB$ 0jwaw< 8 v8w &  P*AdBbAep& f  $ P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp z5f fˇ ȕ f‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *;;w  8jDl@ hTeBT85l@ @( D (eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ ؈ 8 , P% ؼ- ؀% ؘn& D.' ,D% 8D% D'w *D  wCommand input I/O errorFailed to open indirect command fileIndirect command file syntax errorIndirect command file nesting level exceeded r rE Z< J ^;577 61&*$Е Е <1  2  Е:   $7  7<  ¥: <   W"C< ȋk<<Lw7F@wDw@D 8< < &9eL   x  t`L d  `W 3 s6  `W s)C(eee V C& tr C&( vR&00|I I557i:)*p(Fw ' UD$BA &( U BQ Е*  l 7 dL6 \r5 TۈJ8 L6 D\5&   `@ ` B   & A @    &f  is not selected invalid block number duplicate block number syntax error block number out of range00II555512|:,@@ Y &[q Y 2 !VTITISYTITITIOV&|ǘ >$!| N H n * "-""    .*-! B  B h f   6!{  ew w ew w !s ~7 " & , X) Υ  " x )w :! P 7           5w%DT6!3 y w7  $wee*E%,%CT 7 ! j5 HUb7! D w E$% et 0# % U % 5Uw  w5Ce*5. 5@0l2p  0"0$    5 5 U5Uw43,p * 5@ 0l20,  0 436 % * @ @@ wEee*%%@ %@ @ 0# U@w*+5  *., * :*5 E00(.. ``00`!F U(F.w  $ ! 7  7 V  D ) 6 `  & 7   )e w w 7      n  ~&    ( w%  @wv5vOU : 8 r  Q$ %  te 4    eLw J & 00I I557i:)*% r  0,<8  e lw5 *EF%T$0l. p "p $ep ep 5%% ,.n $  DCE0Ԥ 5 : 8 eTw R b , v$  8  % % % ͘C  LV  @ dd e    *,.0 % Ԥ$  { h  X0,<8 wZw%% w",$%.e AeB p  &&e%%%.e  L  pp& %  A  B $  7   `m w T  BwV `wwwwwrwwwwwwwFwwfwBwNwf& 7T PHr     5 j0 !3 -3.p 3e3, 3*++30 : 3 33 x  wf c e <%  .7 "1 ) \ ` b ^ *  v r%  d  wB f6R! f vv7 (  J! B Q 7   N!C J!B rK X  v %   ȥ= ЋCɋы  ыɋ C  @e  2z7  0*"*"7  j %w% w7 |&&%% $ 5"  pw`ew @  N@e :@eA AeB @   l$A l"p0% %    `A aB Bm D u U% & & @( " f  e ee e '&1 6p$ .p$ &p$ p# p# p% p % p# p# p# p$ p$ |$ |$ # & & & & p& N& d& & ~& vx' n* fj( ^ ' V x' N' Fx' >$x' 6$' .0( &0x' 0L( <x' <R( Hx' lx' l' xx' ' (( ( ~' x' ' x' x' ( ' ' x' @( ~( v' n( f) ^L( V' N' FX( >( 6( .' &( 6) F(  ( R( ( ( x' ' ( x' x'5ew (, Bv     5Bw~ =>5  5 2  UE !X8 >VE U 5@*& E& & f&ËDef Ë )̋U00II555512&ff &  m  f A N  % #d#p#ld|#@d#Dd#d#`dp&&&&P&h&Tx'x' !x'$x'l$'x'0)x'\<+x',H-x'0Tl.'H`1'HT4x'x6x'7x':x'>x't?x'Ax'Cx'Ex'Hx'J`/X|Xx`hh(@8PHp8@ xX0ABORTBADBLOCKSBUFFERSIZECOMPAREDATACONFIGURECONTROL_CDENSITYDESELECTERRORLIMITEXECUTEEXITFILES11HELPIDENTIFICATIONINTERLEAVELOGFILELOOPBACKPARAMETERLISTPATTERNPRINTSUMMARYPROCEEDRANDOMRANGERECORDSREGION_IOREPORTERRORSRESTARTRETRIESRUNTIMESELECTSPYSTARTSUMMARYTIMETEMPORARYFILEUDBVERIFYVOLUMECHECKWAITWRITECHECKUUm۶VVm[mے$II""""UU !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@@#(#(5AO.\jt -BWdz did not respond is not ready unrecoverable error at block is write locked is offline data overrun at block I/O request aborted privilege violation bad block, fatal hardware error end of tape detected write check error at block unexpected error #Fatal file system error. F.ERR= ^COnly ^C allowed error threshold exceeded (octal) (decimal) data compare error at block Good Data: Bad Data: Word position: Buffer contained . additional errors Byte position: ,Fatal system error. DSW= PC+2= unexpected request to queue I/O - request aborted...IOX -- READWRITEREWINDWRITE CHECKWRITE REVERSEREAD REVERSESPACE REVERSEWRITE EOFUNKNOWNNo buffer space availableAborting due to user command No activity remains - abortingUnable to create/delete/map dynamic regionNo such command - type H for helpCommand not unique16.08 with terminal support and regions: j EJ!N!R!`/#  Pj!< b!|"  f!*"Q |"X#'x#*" IOX>P IOX>  0%%u M 5   D , 8 S % & ? ? %  : 7 |" e e7 =5 *%*E -Fe F \% B: |"J 2 !  @|" 7 &@? @ w *w  w7 fA 77|"7 w |(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$&f 0 does not support the command00I I557i:)*w*w$ 4we Jp6 6+ %@ 27*5 %=75 !y{@  % %U ;@60 6 pU |%wFX!e " 4 T& &Y@ w` (eEA A A A w jX!we?E? @ @ K3   !U   e  KE %DT  % U p   %DT  0 3 ($>7 87 l@A *Cl$7    llC bA  e0 0 ĕ, e $ ĕ0 7 ?    AmC Cm u  Mw>@zZrN vH Tʚ;@B'd e7 t"% ԝnj< %DT 0$ s 3 3   @   2 Ees ,Ӈ,  e  7 "%  515 .7 \$'5!5z7 V %r q gE $ ..  4%(% p4%8%(%@#V#N  $F2$>$6w.% p  E UE@ U@E UE  U E  U %%  % >L,e%" 1> x%:1 1 Q$ `   :p"p$   " ," 1,$pp p"p,  % 0  a ff a Q ea e`q  ¥.Ћ $ ȥ:ȥ,Ћ ȥ; N& &f$Z$NOYESMM @MFj@MUj@MS@MT,    " R o6 !33 y544 460 0 *% f@6 0 0 *5** U%DT *5U* 3 0 U 6!{ '     ; 8U 57  ''  !  $& l 0 E N pV$ p# lP( I/O is unsatisified at timeout - function:  00II555512  Ћ &   ¥. Kȋȥ ȥ ȥ;  PF'% &'@AZA Z r h¥:9'R! F' p%ee>e  A@az ԋ is not configuredSyntax errorDB377: is not configured 8 @' 77  .' %DYP v @ l0 0  P' 0 0   %M 5 E%4 0@ wh7 dZ'nه p# failed to detach failed to attachDriver for DB not loaded r'N&R& Е  7|"7=R& 84  f `H+ 7*B %|-.T ,T " #"$  > ewL ҕ ҕ-ҕ-ҕ # s%*w 7 L+& & A%7 L & &Y l Un!;!w" h <2 &    W !   7 @+H+`/wf  Eb/@b7eE@ @ @ @ 7 e 77 R!*  ԁ`Ћ@ b@  (Bw   8eEw,W w 7 7 LJ!H7 FN!B7  7 7 7 7 7  Ew w$* %%  R! e@111%DT>  $ p$System does not support AST'sCTDBDDDFDKDLDMDPDRDSDTDUDXDYEMMFMMMSMTMUSYTTAL+?L+ 7 mw mmw mw m7p l h * J+ B , < 4* ,  , ,(+  + , ~<+  w45e e  , , %%%%  4  B+ x'0l p p 0l"p 0l$e Xe%%% F  +!%. 5  %DT [+%DT+ e: e e+t+ % %  Jz+ w  +   + b+ ^xrl ^`XP + , <PJD<60+  +  , U 7 , E  # 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 w & @$ p$ # # p$Summary of exerciser activity at A C C U M U L A T E D T O T A L S : - - - - - - - - - - - - - - - - - - min.. R/W requests totaling . blocks with no errorswith errors. records . bytes AST's executed: . Idle-loop iterations: Unreported error count: TIME -- Run: min. Elapsed: min. Remaining: --  00I I557i:)* XR 7 T w  > + `+ X (|"dѕ  H" "+5+5+  "%. .")% 5 0%DT "%$ + %%  .r"l55&+ 5++ n55 0+ V 5 #D+ >5@5+ $?+ %2 + :+ %< + ?|" wP7 N!G   , *, zt | t7`ej + m,% v,  , ` + Xe ?  "N+ *,,  P+  +   S+ W+% P+    ,  X! t" !m Q$Z+ `/ D, : 6 2 N V : p+ ^  0 8N+ Bw`% +w4 + ,  p$ # p$ p$ . -> .:.VFYSELF11COM RET WRI RAN ERR=INT=LOOPBACK = YESNO Buffer space usage= Maximum effective BUFFERSIZE= Device Mode Buffersize Filesize/Records/Range Parameters------ ---- ---------- ---------------------- ---------- Task Status Command line---- ------ ------------SV ERRORERROR WARNING SUCCESS ACTIVE QUEUED [,d,R,I,I,!h!  !,$![ !t! s     4 > S   w &wF w7  X V7w) *wȥ= Ћ )) ؇7|@ ч C R!3Z+O &%>  2 7 ,  ") 67-R! K %DT>  ݴ* ( ȥ=  wx*НzНw Е: x* w7 VNF L* , T*  \* h*   w6 T `h* z   N& p% p$ &)&))DISKTAPETERMINAL is already configured specified device type is inconsistent device type not specified - defaulting to 'DISK' Disks: Tapes: Terminals: DB377:x*7  Ha wZ w%Q%  %||  ЋMm EA ,B@ N! N@ QeI%ɕ ̥#̕   "N! % @*11H1e 1e1f  dW*%p*%d*%X) Fw2* )% e* !* %* A *  *ww (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA nEAa$ N& &&f unable to executenot installedcurrently activecompleted. Status=WARNINGSEVERE ERRORSUCCESSERROREXECUTE command is not supportedInvalid task name 4*I*Q*<*<* Q|Task " " is 7 $ȋ   r |     L) N N) B8) :g)4)5 K)0)5,)   %% S) {) o)\) >) Q7B%< ) % !$)   E%3|"|" V‹T )) * e@  pV$ p# p % zp% r#VFYSELF11Mode= Function= LBN=. I/O=AST queued VBN=In progre00II555512ssIdle is not selected -- / ??   ȋ% ~Ћ T' `'' IOX Command Summary: ABORT ;abort exerciser run ABORT task ;abort executing task ABORT /ALL ;abort all executing tasks BADBLOCKS ddu: val ;identify a unit's bad block(s) BADBLOCKS ddu: ;print a unit's bad block list BUFFERSIZE val ;set default NFS buffer size COMPAREDATA YES/NO ;compare the read/write buffers CONFIGURE unit(s) ;add unit(s) to test configuration CONFIGURE ;list all configured units CONTROL_C YES/NO ;set ^C AST mode DENSITY ddu: val ;set density for a magtape unit DENSITY ddu: ;list density for a magtape unit DESELECT ddu: ;de-select a unit ERRORLIMIT val ;set maximum unit error limit EXECUTE task string ;execute ancillary task EXIT ;exit to operating system FILES11 ddu: commands ;select Files-11 unit with "commands" ;overriding existing defaults INTERLEAVE val ;set interleave value LOGFILE YES/NO ;output messages to a log file LOOPBACK YES/NO ;loop transmit/receive terminal data PARAMETERLIST ;display exerciser parameters PATTERN val ;set read/write data pattern PATTERN ;list available data patterns PRINTSUMMARY ;print summary report immediately PROCEED ;proceed from ^C state RANDOM YES/NO ;random disk access mode' RANGE ddu: low:hi ;set LBN test range for NFS unit RANGE ddu: ;list a unit's LBN test range RECORDS val ;set magtape record count REGION_IO YES/NO ;use memory region for data buffers REPORTERRORS YES/NO ;report errors to TI: RESTART ;restart exerciser RETRIES YES/NO ;set retry mode for NFS units RUNTIME val ;set exerciser run time SELECT ddu: commands ;select NFS unit with "commands" ;overriding existing defaults SPY ddu: ;spy on a unit's current activity SPY ;spy on all unit's current activity START ;start the exerciser and all tasks SUMMARYTIME val ;set summary report interval TEMPORARYFILE val ;set default Files-11 file size VERIFY ddu: commands ;verify (read check) a NFS unit with ;"commands" overriding existing defaults VOLUMECHECK YES/NO ;check NFS units for file structure WAIT YES/NO ;use WTSE$S directive in idle loop WRITECHECK YES/NO ;set write check mode for NFS units All commands may be abreviated to as many characters asneeded to be unique. "val" is a decimal number. "YES/NO"may be abbreviated. "ddu:" is the device name and unit number."commands" are certain commands which are used to overrideexisting default parameters. 00I I557i:)*ȋ B)0,7 &4)ȥ/;7 ( (w w  %Q%%| N!)7,7, N   ЋХAХLХL $ )N!F b %%8%%Q%%|+%|A * RA p))) )@%  $@w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ (N&&f Syntax errorTask never executedNo tasks to abortCommand valid only in Interactive Mode Q|)* ABO ~%CT%DT W7 ! ( HEvF) h v8(Z(N( ( (  ,e >C@B@ %% $( %> , 8n$ 0p$ (p# N& p% "& p# illegal density syntax error is already selected???? Density= BPI Characteristic Word= MM @MFj@MUj@MS@MT, R+ -+*+*ȋ , " X" t+ D + 6 + e    -+ $ w  D  <  $    w&     l vw "G, ,@ >eE"?     /":&  0  Rw$ Z .  0w w \wfwVwLwBw8-n! ~! n!~!e?E? A Ar+  >:735 ,=8475 u5 U^n!;!>2E  2 2 2 u5 w !wV  eSS7 p j%e7 rSS p% "& *& p$Syntax errorCommand valid only in Command ModeInvalid pattern numberUnits are selected - command ignoredEffective BUFFERSIZE is too large 0 = Random Data 1 = 2 = 3 = 4 = 5 = 6 = 7 = 8 = 9 = 10 = 11 = 12 = *++++++++++++7 7 t r  w\77- u  v Uw:<2&.&00`. U@ U U  U U  d-L- 塇  |E`  77w>/.wKU X7    jo . 2wVp,b%DY \ */%  Z " /wf %CT:%DT6 &3 05,( nF/ .k. .å.å.   R   5 U JjE  ).  N-  7. ~,  60 ,w~.,0 ,w %  <  P@F/s3 3>   B & -@ */ RG#. Al"` "4-wneEB%DTd-0 T" "%DT- \ o-  w- v-%00II555512DT%CT hb-5 R-5 2/ @b{- ^%DT%CT 0/ '0 p*/" -w2 4- < . & mw "$ & n$ p$ |% # p4$ |h$ # 8& F$ & p# |h% # # N& # # "& $ z|# r|% j|B% b& Z& R# Jp#*8++J,,2,N+*+f+++BUFFERSIZECOMPAREDATADENSITYERRORLIMITINTERLEAVELOOPBACKRANDOMRANGERECORDSRETRIESVOLUMECHECKWRITECHECK buffer size is greater than default is already selected LUN asignment failure is logged in buffer size being reduced to typeahead buffer size VOLUMECHECK failure. Unit contains a home block syntax error is not mounted or allocated for NFS operations error while reading home block is not ready illegal range illegal densitySY 4/ ~7 d <% d7T 7L%DwB78 b 542 5E ` 6 ,. &( 0 ,  x (   0 0 X 45 L ~ "(  |% |h$ <& p# |B% & - unit now deselected is not selected7 ~ |wp w77  + P wn7f7d7^<+ + @ wJ> 0 CKU ` wjp4U` 4eB&:ږ<  <p2 dU FU@ ** h  $  4X"Lep#  ( ^*wU p. & p,  6 5E4 `40 4E f% 0 0 n e  X*l d : X hL L采@e< Tᇇ0e2 Dه z& rp4$ j|h$ b8& Zp# R# JN& B# :"& 2|# *|% "|B% & p# `))*))COMPAREDATAERRORLIMITINTERLEAVERANDOMTEMPORARYFILE syntax error failed to open temporary file is already selected LUN assignment failureSY F $! 7 :  0 ! ! !! x*k**+         * ' $ !  F  x       wJ   6$" K % J  V;V* ww * & w " x7  * 4 M7* &5 8 3 Z+"$  &% @R+ *Z+p"p$pp R+ B*tB+ .%"%$ FF+ %% 2L+  $ xF$ pp# h# `N& X# P$ H*& @p#No activity to startSyntax errorCommand valid only Command ModeIOX Version Command valid only in Interactive Mode syntax error illegal range is not selectedUnits are selected - command ignoredREGION_IO command is not supported . -> . X; T l*%)%) `" TB)7  J F) >% * ") &` 7 7  N`  w` eBSY_M |"d"f#  * .# z*)[) , ` DE*% ) D  F|)f# $[)w & p$  D\Failed to open log fileFailed to close log fileFailed to open existing log f00I I557i:)*ileFailed to truncate/close log file. F.ERR= -. ******** EXERCISER STARTED ******** ******** EXERCISER TERMINATED ******** ******** EXERCISER ABORTED ******** ******** LOG FILE TERMINATED ******** ******** LOG FILE STARTED ********"4b#d \` , ,,-m|v ȋ ww 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w 6jjlj ɥ@@aujk,bp 5f fˇ ȕ n‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *))w  8jDl@ pTeBT85l@ @( D 0eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ 4& ,X $L8<HCommand input I/O errorFailed to open indirect command fileIndirect command file syntax errorIndirect command file nesting level exceeded ~^ E )  j;57r7p 1b&*|"Е Е (*1  2  Е:   |"7  7(* T ¥: ,* D  W"C(* ȋ))w7wwD D * ) &9eL  b`   t`L p  `W 3 s6  `W s)C(eee V C&  C&( &p( % p# N& p$ p# is not selected invalid block number duplicate block number syntax error block number out of range00II555512|:,CCY &[q$Y 2 !X00I I557i:)*TITISYTITITIOV&|ǘ $!| N t!H n ! !-!! ^! !T" @! !.6!*-!!&!n$ B  B ! !   6.${  e:!w 8!w 6!e2!w 0!w .!!s ~ 7 & ! X) Υ  f !$ x )wX  v!:x!$ P 7 f!       2#  5w%DT6.$3 y w7 6" $wee*E%,%CT 7 H V$ j5 UbN 7B x$ D w E$% et 0# % U % 5Uw  w5Ce*5. 5@0l2p  0"0$    5 5 U5Uw43,p * F5@ 0l20,  0 436 % *  @ wEee*%%@ %@ @ 0# U@w*+5  *., * :*5 E00(.. ``00`! U(.w  @ l n$ 7  7  D ) z6   & i7c  b )ew w 7 * * 4  \   &  8  w % @w5vOU : 8   Q$ %  e 4    ew  & %M    0,<8   e lw5 *E%$0l. p "p $ep ep 5%% ,. $  DCE0Ԥ 5 : 8 ew  b ,     % % % ͘    x !H! e :  V b,.0, % Ԥ$  ! h 4! X0,<8 wZw%% :w",$%.e AeB p  &&e%%%.e  L  pp& %  A  B $ &# 7   `m w T v w j`wwVwZw&www w.wZwFw:wwwwzwwrf& 7&#PH#&#   5Z j0 >$3 -3.p 3e3, 3*++30  3 33 !  wf Rc De <%  .z7 z$1 )     *a a! T! v r% {! d  (wf6# f vv7 (  # B Q 7   $#C #B rK   %   ȥ= ЋCɋ"ы  ыɋ C " @e  z7 x& 0$$7  j g%00II555512Rw6% Fw2\"7 &&%% $ 5"  pw`ew ~@  N@edb :@eA AeB @   l$A l"p0% %    `A aB Bm D u U% & & @( f  e ee e '&1 <  4  , | $     0   @|' @' @& @& @& @' @' @D& @t& @z& @.' @p'  (  $ R' R0' dJ& |( t( l d \) TR) L) D( <( 4( ,  $N)     * , * * * ** <* <* N* N* `+ `* `* r* r* * * * |* t** l* d(+ \ * T* L* D* < ` 4  ,* $&* &8* &2* &* &* &* &&* &+ &+ &* &>* &d* &* &f+ &6+ &,* &P+ &+ &* &* &* |&* t&* l  d D \ \ T8* L8* D8^+ <J* 4 , ,X $$ L 8 < H  \*5ew , Bv     5Bw 50  (r- DUt-E D  E E ܁!8&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff &  m  f A N  % &[q &[q`    D&.D&@.D&L.R.D&0.d.D&D.v.D&..D&`.@.((((@(` (D!*n!**#*<&*lN)*`+*\r-*$/*004*34*6*8*9*<*@*lA*&C*8E*JG*x\J*L1n0pPh 8x@ ABORTBADBLOCKSBUFFERSIZECOMPAREDATACONFIGURECONTROL_CDENSITYDESELECTERRORLIMITEXECUTEEXITFILES11HELPIDENTIFICATIONINTERLEAVELOGFILELOOPBACKPARAMETERLISTPATTERNPRINTSUMMARYPROCEEDRANDOMRANGERECORDSREGION_IOREPORTERRORSRESTARTRETRIESRUNTI00I I557i:)*MESELECTSPYSTARTSUMMARYTIMETEMPORARYFILEUDBVERIFYVOLUMECHECKWAITWRITECHECKUUm۶VVm[mے$II""""UU !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@@!!!!!!!!! ""ky  0 M did not respond is not ready unrecoverable error at block is write locked is offline data overrun at block I/O request aborted privilege violation bad block, fatal hardware error end of tape detected write check error at block unexpected error #Fatal file system error. F.ERR= ^COnly ^C allowed error threshold exceeded (octal) (decimal) data compare error at block Good Data: Bad Data: Word position: Buffer contained . additional errors Byte position: ,Fatal system error. DSW= PC+2= unexpected request to queue I/O - request aborted...IOX -- READWRITEREWINDWRITE CHECKWRITE REVERSEREAD REVERSESPACE REVERSEWRITE EOFUNKNOWNNo buffer space availableAborting due to user command No activity remains - abortingUnable to create/delete/map dynamic regionNo such command - type H for helpCommand not unique16.08 with terminal support and regions: j E###1#  P $< $%  $$Q %%'&$ IOX>P IOX>  0%%u M 5   D , 8 ! S n( (! ? ? %  : 7 F % e e7 8=5 *%*E -e  % B: %J 4 ,$  @% 7 &@? @ w *w  w7 dfA 77%7 Tw |(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA \EAa$&f  does not support the commandww 4we Jp6 6+ %@ 27*5 `(=75 .$y{@  s"% %U ;@60 6 pU "%w6#e $ T& &Y@ w` (eEA A A A w j#wLe?E? @ @#K3   #U # e  KE %DT4#  %V#U p   00II555512%DT  0 3 2#>7 87 @A *C '7    llC bA  e0 0 ĕ, e ' ĕ0 7 \?    AmC Cm u  Mw>@zZrN vH Tʚ;@B'd e7 t' ,ԝnj< %DT 0$ s 3 3 |  @   2 Ees ,Ӈ,  e  7 ' f 515 .7 \''5!5z7 V'r q gE $ ..  '' p'''@&V&N &F&>&6w.( p  E UE@ U@E UE  U E  U @(<( t H( >L,e%" 1> x%:1 1 Q$ `   :p"p$   " ," 1,$pp p"p,  % 0  a ff a Q ea e`q  ¥.Ћ $ ȥ:ȥ,Ћ ȥ; h( `('&NOYESMM @MFj@MUj@MS@MT,    $ o6 .$33 y544 460 0 *% 8@6 T0 0 *5** U%DT *5U* 3 0 U 6.${)     ; 8U .57 ))  !  $f) 0 E F@& >@& 6* I/O is unsatisified at timeout - function:    Ћ &   h ¥. Kȋȥ ȥ ȥ;  P)% )@AZA Z h¥:)z# ) p%ee>e  A@az ԋ is not configuredSyntax errorDB377: is not configured00I I557i:)* 8 ) 7 7 6 ) "%DYP @ l0 0  P) 0 0   %M 5 E%4 @ w`7 \)fև @& failed to detach failed to attachDriver for DB not loaded )(( Е  7%7=(&#L"  - `7^-V#!%|-BT ~T  !9&$$  > ewL ҕ ҕ-ҕ-ҕ 9& s%d@-w 7 -& & A%B7  & &Y U $;.$w6 *&# PF40,  : 02 "# W #2#  V#7 .-T-1wf E1@b7eE@ @ @ @ 7 e 77 #j-  ԁ`Ћ@ R@  Bw   LeEw@W w47 ,7 `#\7 Z#V7  Z7 7 7 7 7  Ew .wj- %%  # Ne@111%DT>  $ \@p'System does not support AST'sCTDBDDDFDKDLDMDPDRDSDTDUDXDYEMMFMMMSMTMUSYTTA-?- 7 mw mmw mw m7p h x- - . ! V-  @ ,<k. *{. r . ^ ~- N w45e e  .  . %%%%  4  - '0l p p 0l"p 0l$e Xe%%% F  .!%. 5  %DT -%DT. Pe: e -. .% %  J. w  P.   5. ".  ^tld 5. <d^XPJD7. | 5. l  . VU 7 . DE  # 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 w n( fd& ^@' VdJ& NdD& F@.'Summary of exerciser activity at A C C U M U L A T E D T O T A L S : - - - - - - - - - - - - - - - - - - min.. R/W requests totaling . blocks with no errorswith errors. records . bytes AST's executed: . Idle-loop iterations: Unreported error count: TIME -- Run: min. Elapsed: min. Remaining: --  lf 7 T w  > . Y. (%dѕ  $% -5-5- -%%. .>%)% 5 0%DT "%$ - 0%%  .N%55- 5- 55 -  5 #- 5@- - %2 - ~ - l%< - \?% wP7 #G  . &. ߷ z 00JI555512 7te~- .% /   / - e ?( 4  "- /8/  - - z  - -% N- F >   f/  # t" !m Q$- 1 Dl/ : 6 2 b V N -   D 8- w% -w-  @' dJ& @.' @p' . -> .:.VFYSELF11COM RET WRI RAN ERR=INT=LOOPBACK = YESNO Buffer space usage= Maximum effective BUFFERSIZE= Device Mode Buffersize Filesize/Records/Range Parameters------ ---- ---------- ---------------------- ---------- Task Status Command line---- ------ ------------SV ERRORERROR WARNING SUCCESS ACTIVE QUEUED .....##D#x##### |#l#)r#~#j##h#x#p#9n#Ez#Jw &w w7  7wh, *wȥ= Ћ T,N, ؇7|@ jч C #3Z+O &%>  2 7 ,  ", 67-# FK %DT>  ݴ, ( ȥ=  w-НzНw Е:! z- rwj7 VNF , F , , 6  , & , ߡ  w6  h t,   f( ^@' V@.' N(+++DISKTAPETERMINAL is already configured specified device type is inconsistent device type not specified - defaulting to 'DISK' Disks: Tapes: Terminals: DB377:-7  Ha wZ w%Q%  %||  ЋMm EA t,B@ # @ QeI%ɕ ̥#̕   "# % @2-11H1e 1e1f  x,%,%,%|, Fw(- )% e- , r j %R- 6A 0- J! BL-w:w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA ^EAa$ <( 4(&f unable to executenot installedcurrently activecompleted. Status=WARNINGSEVERE ERRORSUCCESSERROREXECUTE command is not supportedInvalid task name ,,,,, Q|Task " " is 7 ȋ         L, , + ++5 ++5+   t%% + `+ ++ D+ < Q7:%4 , % $$,   E%3%% ‹T !,,  e@  @& @& @' @' dJ&VFYSELF11Mode= Function= LBN=. I/O=AST queued VBN=In progressIdle is not selected -- / ??00 J I557i:)*   ȋ% Ћ r4* j4*:* IOX Command Summary: ABORT ;abort exerciser run ABORT task ;abort executing task ABORT /ALL ;abort all executing tasks BADBLOCKS ddu: val ;identify a unit's bad block(s) BADBLOCKS ddu: ;print a unit's bad block list BUFFERSIZE val ;set default NFS buffer size COMPAREDATA YES/NO ;compare the read/write buffers CONFIGURE unit(s) ;add unit(s) to test configuration CONFIGURE ;list all configured units CONTROL_C YES/NO ;set ^C AST mode DENSITY ddu: val ;set density for a magtape unit DENSITY ddu: ;list density for a magtape unit DESELECT ddu: ;de-select a unit ERRORLIMIT val ;set maximum unit error limit EXECUTE task string ;execute ancillary task EXIT ;exit to operating system FILES11 ddu: commands ;select Files-11 unit with "commands" ;overriding existing defaults INTERLEAVE val ;set interleave value LOGFILE YES/NO ;output messages to a log file LOOPBACK YES/NO ;loop transmit/receive terminal data PARAMETERLIST ;display exerciser parameters PATTERN val ;set read/write data pattern PATTERN ;list available data patterns PRINTSUMMARY ;print summary report immediately PROCEED ;proceed from ^C state RANDOM YES/NO ;random disk access mode:* RANGE ddu: low:hi ;set LBN test range for NFS unit RANGE ddu: ;list a unit's LBN test range RECORDS val ;set magtape record count REGION_IO YES/NO ;use memory region for data buffers REPORTERRORS YES/NO ;report errors to TI: RESTART ;restart exerciser RETRIES YES/NO ;set retry mode for NFS units RUNTIME val ;set exerciser run time SELECT ddu: commands ;select NFS unit with "commands" ;overriding existing defaults SPY ddu: ;spy on a unit's current activity SPY ;spy on all unit's current activity START ;start the exerciser and all tasks SUMMARYTIME val ;set summary report interval TEMPORARYFILE val ;set default Files-11 file size VERIFY ddu: commands ;verify (read check) a NFS unit with ;"commands" overriding existing defaults VOLUMECHECK YES/NO ;check NFS units for file structure WAIT YES/NO ;use WTSE$S directive in idle loop WRITECHECK YES/NO ;set write check mode for NFS units All commands may be abreviated to as many characters asneeded to be unique. "val" is a decimal number. "YES/NO"may be abbreviated. "ddu:" is the device name and unit number."commands" are certain commands which are used to overrideexisting default parameters. ȋ VA,D@07 :H,ȥ/;7 ( (w w  %Q%%| #,7,7, N  v ЋХAХLХL $ /,#F v 4%%8%%Q%%|+%|A , A ,)l, 6)@%  @w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ (&f00JI555512 Syntax errorTask never executedNo tasks to abortCommand valid only in Interactive Mode Q|v,, ABO %CT%DT3 W7 ! 9+ Ev+ h v8+Z++NS+ ~+ N+ x ,e >C@B@ %% $_+ D%> , 0 ' @' @& ( @' ( @& illegal density syntax error is already selected???? Density= BPI Characteristic Word= MM @MFj@MUj@MS@MT, -s" ---r-ȋ 0. " X6 . "u. x. Ve  _!  -u. l $ w  D  P  $    w      wT 6G. ,@ >eE"?     /"N&  0  Rw8 Z . & Z 0w Jw \wfwVwLwBw8-$ $ $$e?E? A Ar+  RN735 .=8475 u5 Ur$;.$R2Y  2 2 2 u5 w .$wj  eRSS7 %e7 SS B@' :( 2( *@.'Syntax errorCommand valid only in Command ModeInvalid pattern numberUnits are selected - command ignoredEffective BUFFERSIZE is too large 0 = Random Data 1 = 2 = 3 = 4 = 5 = 6 = 7 = 8 = 9 = 10 = 11 = 12 = *..%.-.5.=.E.M.U.].e.m.7 7   w770 u  v U2wN<2:.:00`. U@ U U  U U  // z⡇  |E`  77w10wKU l7    jo . 2wVp,b%DY \ 1%  Z "1wf %CT:%DT6 &3 05,( n1 .0 71å1åg1    .  5 U JjE  0  N%0  0 ~,  60 ,w~.,0 ,w.އ %  <  P@1s3 3>  x߇ B & 50@ 1 RG#. Al"` "Hd0wneEB%DT/0 T" "%DT;0 \ /  w.0 vC0%DT%CT hbW05 RK05 1 @b0 ^%DT%CT 1 '0 p*1" 0w2 4%0 < )1 & mw l' x) ' v' |R<( tv& l@& dR' \d& T( L& D( <@& 4R( ,vD& $L& ( T& D& ( @' RD& R' R' ( $) \& @&J--^....-,---:..BUFFERSIZECOMPAREDA00J I557i:)*TADENSITYERRORLIMITINTERLEAVELOOPBACKRANDOMRANGERECORDSRETRIESVOLUMECHECKWRITECHECK buffer size is greater than default is already selected LUN asignment failure is logged in buffer size being reduced to typeahead buffer size VOLUMECHECK failure. Unit contains a home block syntax error is not mounted or allocated for NFS operations error while reading home block is not ready illegal range illegal densitySY 1 7 \ P% 7L 7D%<w70 b 542 5E ` 6 ,. f&( T0 ,  x Z@+ N  0 0 X 45 L| v ߡ "W+  R<( |R' t( l@& dR' \$) - unit now deselected is not selected7 w\ w7r7l - P wV7N7L7F-- @ wJ& 0 CKU ` Fwjp4U` 4eB&:ږ<  <2 xU ZU@ -- @h  p$  4@"4ep#   ^`-wU p. & p,  6 5E4 j`40 4E % 0 0 re  lR-T d @ h4 L采(e< Tᇇe2 Dه x) @& R' ( @& L& ( D& ( RD& R' R' ( @&h,,,t,6,COMPAREDATAERRORLIMITINTERLEAVERANDOMTEMPORARYFILE syntax error failed to open temporary file is already selected LUN assignment failureSY Z # 7 N  D# #### -,--        #*~#'x#$z#!|#r# F  h# l#p#n#j#   wJ   J$6 K %  ( j;, ww 1- :T" wb $$ 7 ! d$- \" Pߡ 4M7u- 5 8 3 -"$  &% @- X--p"p$pp - Bf-t- %"%$ F- %% 2- v l' & @& vD& ( dJ& @' ( @&No activity to startSyntax errorCommand valid only Command ModeIOX Version Command valid only in Interactive Mode syntax error illegal range is not selectedUnits are selected - command ignoredREGION_IO command is not supported . -> . l; h! l,%2e,%&=, 6 &+7 *!  , % * ", ` r7 7  N` P fw` eBSY_M %d"f# & * .# ++ @! D,% ,  +f# +w ( @'Failed to open log fileFailed to close log fileFailed to open existing log fileFailed to truncate/close log file. F.ERR= -. ******** EXERCISER STARTED ******** ******** EXERCISER TERMINATED ******** ******** EXERCISER ABORTED ******** ******** LOG FILE TERMINATED ******** ******** LOG FILE STARTED ********00$JI555512%Hb8&d \` . /+/N/m ȋ!ww 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  V P aAAf@pnp 4C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ jŀajTI& af* n*`V @e,w &jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ ,DlljaCeH###33 & 录8 *@,,w  8jDl@ TeBT85l@ @( D eB& l & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ (Command input I/O errorFailed to open indirect command fileIndirect command file syntax errorIndirect command file nesting level exceeded  E 8,  ;57b7` 1R&*%Е Е ,1  2  Е:   %7  7, T ¥: , D  W"C, ȋI,w,w7wwD , &_, &9eL  RP   t`L   `W 3 s6  `W s)C(eee "V C&  C&( &p( ' |@& t( l@.' d@& is not selected invalid block number duplicate block number syntax error block number out of range00,J2J557i:)*|:,?? AY 00Y  0TITISYSYTICL004JI555512tXVp XtX:OPzLB kz?TLBZ$~t' IPP>P(SY>2 SYP o d005W E5W sW s W ! W 8W >W EW W W W Ō $|e 6 5  5*+5U5 5   BBCU% B  v $5 %```` 7 ]   ]BUfUhB&&^] B  Е ȕ-ȕ        B͡Pe2]5)E$ %& e e]UUΡ % ͡!e\ e\^$% 5R \ z\СeH~ --  ͡f\ A $ & & & & f& & & ΝJD 6)  % $U͡ 2P Bw \& LB&`  J  V111 D J B\ M >  \ U%   \ tM D  E e@P  [& SY&  [& SY& [ 5 %  h n[)v]B  &j }  F %j]b]ANDqASK>ASKN;ASKS=BEGINMCHAINNCLOSE@DATA4DECFDELAYVDISABLE5ENABLE6ENDJERASE?EXITKFORMXGOSUB3GOTO0IFzIFACTuIFDFoIFDISABLEDyIFENABLEDxIFFmIFINSsIFLOAvIFNACTtIFNDFnIFNINSrIFNLOAwIFTlINC9ONERRPOPENIOPENAGOPENRHORpPARSEAPAUSEOREADQRETURNSTRLENFSUCCESJSYDISK\SYMTYPESYSDEV]SYSID@SYSTEM?SYSUICcSYTYPmSYUNITDTICLPPXTICWIDYTIME`TIMOUT:TISPEDWTITYPEVTRUEOUICaVERSNnWARNINKABDEFIMNOPQRSTUXYZ<>-hp2 2-7JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECYi *["[ 7[ d\YwTY&JY7 DY(  &Y5[.Y [LX> ߇5~[[T#  `cX[0\[,\[(\[#H > :}pXwTX7fXHHpYT  *'   x  <wT;! ?' \" " (W:   ҕ  7W '  'VwV H  WW Fw2V Ǡ|VT fVw*,VFVw* ,V&Vf|VVX&W"W f~V7Uݩ WWWV` A5@E (/̋Uե>700DJI555512W UU7t,7 UU7;#7?717U7 Vw VmV7 |Vw xVtV-pV ҝGU@7'   F 7Q(U UwW#A!@ B5  D &ffE ̋E V V   w  ť ť 0B xAa & & @( \f  e ee e w V&& D¥%  B&ХVA < C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & eL & e8Е A %& e A F Е A EA EЕ A A   $Е.  AЕ;     f& w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp !C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w (jjlj ɥ@@aujk,bp >5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & r"8 *Hw  8jDl@ l"TeBT85l@  @( D T!eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@w D&& bЕ- eaePPPЕ-$w D  &Е. ce v Е:   pBw h' UD$BA J&&( U BQ hЕ* &f& v f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0 eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e&f w *00LJ2J557i:)*8I *=)98  eB &&  U ~ **e *Nlv ΋*.2  & #!)&eP(e && >e >E p* t w w x N) 8C 0* ) *wr * ^   ep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  , J *` 0C# f   D @)  6?0D)w  ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  , P3)/ #( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 h00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B  *  eBe>  # #D #=0/H#@&0 # = e0   .0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w . n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e D* e*w@) l*0,    ) L)% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,   N `w0  J B # d f  `* zwj)0406 l0 (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R &ff &  m  f A N  % 5 ߥ& *  + 23E Ew    Е-   0@A lW e`fÊ    E 82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E < (.8Ae f"( UCɗ&+(e$&% **(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &eB  8  $&w *(500TJI555512<s1  U U@  vf&" )'&M'&&**%*%0 *&* d *5ND  4 <  EU   w *D  ww f( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &   w,# $ w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) 8@#**fff Z &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( l *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 @0 @0 &*0 @ l& & ze# eB&B B v * & eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w./!0/ l0/!p!0 .=p0p2w ) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w  C#    D @)  6?0D)w D(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w ) H * Lw46l0 *) l0, *) $ )*)0,40,6 w ,  w B  6 ,,  *e6p 4 b8 , 81416    z Z )  8   R**  DP5R RRR 141612epl2l0p Mw   f >5>Eu   f &* *> =00l&8el2 0 *w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w:w HeE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  (U   E > >E(5E=uf p  w ..8em,0l0!D0e6p 4.) h&f v > Le) .  e6p 4 &08*w&=p!Օ^&   `@ ` B   & A @    8e2 w t w j& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C *@<#8w /$ ,:00\JbJ557i:)*T < U@% DD%][%><w  w.1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    d*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  8  **f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ =D  `p46 f 64/=  @) 0  8w 46 8 e*wP &f D E/fC A B f&  xBeA @0 (@0 ta@eA  B0 \AB  Ff  C @*,*1 U8UMw wv B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w0,0, f 톇,, w      .% eB U5UU | plp & NeՀ)*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  zDEe    *1  ˕03 "   ˔Ӕ ʥ75%& w V&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w R ) ^ fU n%  BA `6p 4p`4 %60 4|:,?? AY XXY &[q Y  XTITISYSYTICL00dJI555512tXV XtX:OPzLB kz?TLBZ®~' IPP>P8SYNB SY`  00lJbJ557i:)*IPP Version M01.02 (ANSI)IPP -- Illegal switchNo lists or wild cards allowedNo input file specifiedOpen failure on input fileOpen failure on output fileI/O error on input fileI/O error on output fileClose failure on output fileClose failure on input fileInput file directory not foundOutput file directory not foundGet Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ FileSY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VAI/O Error Code %D.QI/O Error Code %D.:?TSYۡӡ 5- _  0 b  f    =w p`` ` ` ;,y"W(%vbnbxc&7 ._7 ,_7 *_6f  4%1  11 1 1 11^^^ &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e 6 5  5*+5U5 5   BBCU% B  v $5 %```` 7 ]   ]RUfUhR&&n] R f Е ȕ-ȕ       B͡PeB]5)E$ %& e e]UUΡ % ͡!e\ e\^$% 5R \ \СeH~ --  ͡v\ A & & & & f& & & ΝJD 6)  % U͡ 2P Bw \& LB&`  Z  V111 D J R\ M >  ,\ U%   \ tM D  E e@P  [& SY&  [& SY& [ 5 %  x ~[)]B  &j }  B %z]r]ANDqASK>ASKN;ASKS=BEGINMCHAINNCLOSE@DATA4DECFDELAYVDISABLE5ENABLE6ENDJERASE?EXITKFORMXGOSUB3GOTO0IFzIFACTuIFDFoIFDISABLEDyIFENABLEDxIFFmIFINSsIFLOAvIFNACTtIFNDFnIFNINSrIFNLOAwIFTlINC9ONERRPOPENIOPENAGOPENRHORpPARSEAPAUSEOREADQRETURNSTRLENFSUCCESJSYDISK\SYMTYPESYSDEV]SYSID@SYSTEM?SYSUICcSYTYPmSYUNITDTICLPPXTICWIDYTIME`TIMOUT:TISPEDWTITYPEVTRUEOUICaVERSNnWARNINKYi [[ R7[ YwY&Y7 Y8 B Y5\.Y [LnYN ߇5[.\d# |3 `c(Y\\\\\\f\#X 63 :}XwX7XXXYd  *Xwe  X! X| *    7A`X \X  . '  w;w :! XX]   x  <wT;! ?' \" " W:   ҕ  7vW '  'HWwBW X  >X6X `w2W V1ǠVd @1Vw*,VVw* ,VVf|VVXWW f~sV7pVݩ~WzWvWpW` A5@E (/̋4Vե>7W &V V7,7 V V7#777U7 Vw VmV7 Vw VV-V00tJwJ555512 ҝU@7   F 7QU UwW#A!@ ,5  D &ffE ̋E V V   & & @( f  e ee e f& w |5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp hC*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ -ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp  5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ d,DlljaCeH###33 & N 8 *w b 8jDl@  TeBT85l@ +@( D +eB& + & @# x+& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@&f &ff &  m  f A N  %|bK,?7?7z Y  STITISYSYTICLOVTIOVdb d<0  J 65 D5  *5 p5@ 65 $5 Jw>wAB w DeB$&< 60# 4&f C&f&    `D D` A      D C   DLfE  %J|Ǫ^00|JbJ557i:)*kQ0&# Pw R w  4   % T T  % Tw N L$ /3#pe '&` E <   A > 0# 0-  A w ~E7 &RRw V e  ` 0!p!2  7  LBR>_"S" p b v SY  "0306<BHNTZ`f6<BHNTZ`flrx~      & , 2 8 > D J P V \ b h n t z      w @pdf  B$ĵ4ĵ!%'% %E$e@ P  *e ,e +e & ĵ V 11@ Be w  pE 4 A B` 7pA .wf. hf , TeE  B< B  @`   B` vp 4e6(   d> > p 4e6(   "䇇7 ~wx te|)w\ 7 Z - Jw E D 4 B ` p 7A @ae   0 B `  w f, 4  & D -N  ^  ` ,  < ,,  &3f& &f& v '&1 X X,! dt p pj | |" ~|$ v|&" nt# f ^! V D) ND) F@3 >$d) 6TD) .T . &`x) `l+ `+   ,5ew h, Bv     5Bw  eeȵe ~ zo DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB400JwJ5555125  5 2  UE  L> JE U 5@*& E& & f&ËDef Ë )̋U&ff w eE D` bl lrw \  B eE"s    s-  Csl&f (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  & pXpTLdptLpp,L|p Lp(L#pLX'('(t(()(*(D+(0,(-(x.D) L.D)|2D) $8D) 0=D) <TD60HE60<FD) `LD)p 0&6.^dkQdydw vBe,W  x5 5 :!w7  P5;5 wx5 D 7 ^3ȋ l s   >e 7 4w: wz  555wZw U@5x 7~ r 5 0  L e \ e    5 %   n̥ (# # yȥ$$ $ H )pwn7 \ L ( `wDw  U    p Ue  @%NModules deleted:%N%NEntry points deleted:%N%2R%Nw  @   :@!A ;U@ 74. , #  %* 7 7   w t5 funhj uhdB$ 0jwaw< 8 v8w &  $*AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ DŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp N5f fˇ ȕ :‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *!!w Z 8jDl@ lTeBT85l@ n@( D LeB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@? A D)  , z$d) r$z* j0d) b0 / Z0. RTD) JT . BT. :`P*w w 0ZwZwwwHrDnp&=&6  @mLP &m:DUw2w @ r  U f e  w "" wj "7  7   ,$   w7J  U `d7 bB57 07 . f L  w7 B~  0*wn2bEw" wHw,w  w^ j bAB ~e<0p lC Z  X*M B" h 2  @ <p 64Lpp ӆ( "7 7 7 Uw|`w僔  % U f  ߄ 2!ւ 2a aEe7 w  jU r v"~""SY"""#8# ( ( ( ( ) ( ( 0d) 0+ 0 / 0. `P* Module "%2R" replaced MACROREPTIRPCIRPENDMENDRw n w <w |N b P7 w  "w 7P ( */ `w~&   5b $  n*w 00 6wX &  $* "(0 0   * /  *' dqq p00JwJ555512p w 0 5@   Z JB@ B cB C f=6TSTSTSSSK,N  ?# 8TNTPNe $|w X~ twh BC6 bw0 <w-w" w&  & ,  7 7 ~w^  wR7 d ɥɥ NEl E P r5H Nwwe _7   6wND! P   E %% "% %,%;|w  % % %,%;wDw>P p ( N 5   5h w`ר; w  wDwC`U |W.  w 4E Z W:W=E U  D&fBʋRe V   aa   C W; W W  ר ע   @7 p(Fp Nˋ(THLJ  .|wP 7 5    U߇%%%SY%%%%6&T&IN@P&\ RPP&] SZP&SS@P&EPQ&az   r( j ( b( Z( R( J( B( :( 2( *@3 "$z* 0d) 0+ 0 / 0. `P* `l+w \w6w"0+1(e  @%&p*w f( f)f `8Ae f"( UCɗ&+(e$&% **   %F%2NDirectory of file %X%N%VA library created by: LBR V%2R%NLast insert occurred %Y at %3Z%NMNT entries allocated: %D; Available: %D%NEPFile space available: Recoverable deleted space: words%N%2NUNI LIB DEF filetype:%R%N%N** Module:%2R Size: Inserted:%Y Ident:%R%R%N%P%N Attrib:SSContiguous, %2R OP info:%2R %2R %2R %2R%N User file attrib:%P %P %P %P%N %SObject moduleMacroUniversalw   *%8$  6 `w7@"  4`  et 2 6 N   F  V ZC R  ' R :C 0P^   `e w` |7< 5dj w 5Lce  `w{ 2 6     q  c   H@ PB l eB N 5xw  ~   %  L  rwL 5 > 89f"e\e!e  5f 2* eA  l~ Zw  N   *&  A 7  56$8$ 5 U % F @ wT5    U### NSY8$J $$$$LIFULESP&|&  f&&  e#e|& f&&G& & & & && '&& (  ( ( ( ( ( @4 `) ` * `P*00JbJ557i:)*XX^kQؙSY:w 40  "  : hb wx' 77 ȥ: Dwzp+w5b @N" z  \@wA B(A!  eff jwzu57(w$|wrfa\ zxmNp lmFh%b Z7 X B0 0 p(D > wR w %   ZwzP  1& ,p w 5`   pp dwv t7 @> ^07  w  %w@ w"eff ,w0@e e˥#   $!w  ~ 0@ X t5B    U."|""SY"""#6# w  ť ť 0B Aa ( ( ( ( ( z$z* r0d) j0+ b0 / Z0. R`) J` * B`P* :`+w wlwX&  m  f A N  %0+1(e  @%&p*w f( f)f `8Ae f"( UCɗ&+(e$&% **7 5 @7    2  p چ`w 0 0+ `)w @ ^0p 7 ѥ ѥ   e  `wD 8   */ 7j7f  d0d) \0.w BÝ.,F w (ÝNzU wRe ?f7  4 B  7"x+r"p >e ` R  Xـ <    A `w  * 0d) 0.5@jE@w 8$   pD= f b&  ENp0 4 e f` fB fB0   0 <0 Z`w  D* w @D߅ DDA D 4߄ 7(w&߇ 0+ 0.00JwJ555512w F 0 0  $  x 4 ZS   h#` Vmc m   00 `wLw BC%    ^0@ <L  :w V:8م`D BE  Aa 0d) 0+ 0. 3  w :%@ f@A &+    =E e CU@@܇z`wz  % b&  R &  2&$"`e&&%&%0%0#  &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew | w r& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  E D  3f 4 ~ 3! 47 v7pf P PPPP A) f *F*Z*v*****+"+G+\++++++,8,J,b,z,,,,-$-R-i-----.6.V...../W/o/////0Illegal Get Command Line error code%NInput error on %X%NCommand syntax error%N%VA%NOutput error on %X%NIllegal switch%N%VA%NInsufficient dynamic memory to continue%NInvalid library type specified%NCommand I/O error%NIndirect file open failure%N%VA%NIndirect command syntax error%N%VA00JbJ557i:)*%NBad library header%NIndirect file depth exceeded%N%VA%NI/O error on input file %X%NOpen failure on file %X%NInvalid EPT and/or MNT specification%NPositioning error on %X%NEPT or MNT exceeded in %X%NDuplicate module name "%2R" in %X%NGet Time failed%NNo module named "%2R"%NInvalid name -- "%6A"%NLibrary file specification missing%NIllegal switch combination%NNo entry point named "%2R"%NDuplicate entry point name "%2R" in %X%NToo many output files specified%NExactly one input file must appear with /CO%NFatal compress error%NEPT or MNT space exceeded in compress%NError in library tables, file %X%NInvalid format, input file %X%NOpen failure on LBR work file%NMark for delete failure on LBR work file%NToo many input files%NMissing output file specifier%NInvalid operation for object and macro libraries%NInvalid RAD50 character in %6A%NCannot modify header%NMultiple module extractions not permitted for UNI modules%NInvalid module format in %X%NRMS module cannot be extracted to record oriented devices%NInvalid filetype %3A%NIllegal filename%N%VA%NIllegal device/volume%N%VA%NIllegal directory%N%VA%NWork file I/O error%NVirtual storage requirement exceeds 65536. words%NPrivilege violation on file %X%NABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e & e|Е A %& ePA Е A bEA EЕ A A   $Е.  AЕ;     w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   4B & & @( f  e ee e w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA "EAa$ w | ť ť 0B Aa --*DIAG*- --*FATAL*- ( 5 ߥ& *  + 23E Ew 煐   Е-   0@A DW e`fÊ    E &  m  f A N  %eB  8 D$&w "*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  b<  EU  " w *D  ww BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w8Ae f"( UCɗ&+(e$&% *@<#8w /$ ,:T < U@% DD%][%><wj  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce N   B*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"00JwJ555512   ˥" Ք     Օ 0+1(e  %&p*w. f( f)f **(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@   f >5>Eu   <.6 <6 H 6 H6w " ) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w* C#    D @)  6?0D)w fn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e * e*w@) *0,    ) )% ȥ  = ȥ l 0l  Hȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ% * ,   N $w0  J B # h f  `* w)0406 l0 w ~) * zwL46l0&  m  f A N  %**=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8   (** 8  **=D & `p46 f z64/=  @) 0  8w" 46 8 &e*wv w T >  Lw  > ,,  *)  > =00l&8el2 0 *141612epl2l0pw 6 ) B fU %  BA `6p 4p`4 %60 446f %8 E D/D!D l0l8epl0pɥ.ɕ >w.)"(. z= . B  E (.0,0, f 톇,, w      .%  eB U5UU plp & NeՀ)* &f D E/fC A JB f&  2BeA @0 @ (@0 .a@eA  B0 AB  f  C @*0+1(e  @%&p*00JbJ557i:)*w$ f( f)f 8Ae f"( UCɗ&+(e$&% 8e2 &   `@ ` B   & A @    e6p 4 8 81416 r  T 8  .U8UMw w,*1 ~B 00fep=& /e`pwn ..8em,0l0!D0e6p 4.) &f `  6e) .  e6p 4 \08*w,*1 U8UMw" wfw B( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB j  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  p P3)/ X#( P) @#**fff  &*wp. tB5(8e$8w2A&(e |4p8q  (#4=A#@)( V *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 &0 @0 &*0 @ :& & Ve# eB&B xB  *  eBe>  # #D #=0/H#@&0 # = e0   |0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w |(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  :1 >w *eB 8  f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w ,BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wZ141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( `0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416  . 00JJ555512 T  ,*1 ,U8UMwF w NB 00fep=& /e`pwv46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6   )f  J! t   7 D l wPD)2 r'&1t)_ &7ڷV7J\) LBR -- *FATAL* -- Run aborted ( d!w 6*8I (*=)98 x eB &&  U j**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w@w  J 0,0w{  Xw $$0,0wU 46 P $)0406 0 *0,0, f 톇,, w d     .% eB U5UU plp & NeՀ)***8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( 0 0 0 80 B0 0 0 0)#0. 8   *  4 6 e6p 4&* *) l0, *) $ )*)0,40,6 )"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) &f (  e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ 8w( lU8UMwx w |bK,?L?L11 Y &[q Y *TITISYSYTICLOVTId^|GbJd<0 FJ | <5 5  5 $5@ 85 5 !wF!wIAB w tIDeB$&< I0# I&f C&f&    `D D` A    00JbJ557i:)*  D C   DLfE J8 68%J|Ǫ^`kQ@,+ \w D w\B; 4  R: % T T 6: % Tw CN L$ /3#|e '&` E 2 1A 20# 0-  A w .CE7 &RRw C e  ` 10!p!7/V7//5 e ` R - \0  <    A F0`w  dA*5@ZjE@Rw @"  pD= f .&  E"p0 @4 e f` 7B 7Bj"0 @  0 <& n@`w  `@* w ?" DDA D  7ww z? : 0 0  . j L x 4x ('S   !#! $'mLc mD   ? <0 ?`ww >BC%   ! Z?<@ @?  6?w >`D BE  Aa 3  w V>%@ f@A +    =E z-e * 0 C*(U@l`w  h5% bB  R B  &-B$`e&&%B%0%0#  E D8  .Bf &4B 4B!B7 76P PPPP Aj0 h=6  )6 J!0 t$ 4=  =7  =J *0wl42 r'&1d_ &7V7JL<2':'^dkQdydw ;Be,PW $ +5 5 :!w7  *5;5 wx5 D 7 'ȋ 1 Ps P  e 7 w: wz r**555wZw U@5 7  5 &P  0L e \ e    5 %  r*|̥ (# # yȥ$$ $ `0 )w7 . L( `ww 9 0U   /  Ue  @%NModules deleted:%N%NEntry points deleted:%N%2R%Nw 69 Z  X@!A V00JJ555512;U@e&&   Z( b% (B( % @A U@Z0 0  (  B(e)Bw|U@*5"   U Ld-0 7w w & (w j(B$Bg&7>  )@  w 7w L&www&=&' Z @mlpB &mZdUww* @  U f e  w 6* * `&w "7 L 7r*  ~  w7$'   U `d7 b>'57 P7 N f z' 0 x(w7 B  6*wn2Ew" wHw,w  w j bAB e\<p 5C: 6  5*M 5" h 5  @ <| |564|p Z5ӆ( l57 L7 7  U4w`w^  % U f  * 2!ւ 2a aEe7 w  U X# Module "%2R" replaced MACROREPTIRPCIRPENDMENDRw n3w LNw Z |b "7 wx   4rw jx 7 x */ `wB   5b   L3*w << 3wj <3  3* ":0 0  2 3* |/ 2 *' vV qq pp f2w < 5@   (' `2B@ B cB C <f='TSTSTSSSK> Z  ?# z8TNTPZe $8w T 1w  BC6 @1w< 1w-(w" 'wB \B >  07 7 ~w^ 0 vwR7 d ɥɥ NEl E ' |5' Xwwe _7   $0wND!X P T >& %E %% "% %,%;8Tw % % % %,%;wDw>T' z ( N 5   5> w6ר; w  wwC`U |W.  w 4v|E Z W:W=E U  D&fBʋRe V   aa   C W; W W  ר ע   @7 |(, ZˋTHLJ  ~8wb' 7  Ta f%F%2NDirectory of file %X%N%VA library created by: LBR V%2R%NLast insert occurred %Y at %3Z%NMNT entries allocated: %D; Available: %D%NEPFile space available: Recoverable deleted space: words%N%2NUNI LIB DEF filetype:%R%N%N** Module:%2R Size: Inserted:%Y Ident:%R%R%N%P%N Attrib:SSContiguous, %2R OP info:%2R %2R %2R %2R%N User file attrib:%P %P %P %P%N %SObject moduleMacroUniversalw + ` *%/   `w`7" *  ` * e ' ' '( S *' V $' Z  '  m  ' : ,' %  Z`e w` 7< 5*  5ce  `wF > B "   E 7  )    L .\B lN @eB N% 5>w%  D   %%  F % w 5> 89f"00JbJ557i:)*e\e!e ) 5f )2* eA ~  \)D w ( N x  b)&  A L)7 5// 5 U  j  (> (wXX^kQؙSY:w '0  R"   , w#D'b ,#77 ȥ: n(wz#+wR #5b @N"   @wA HB(A!  eff z wu57(wF >'zxmp lmh%b Z7 X B0 ~Q0 |(4ݢ  &w 0w &%   wzL\  1& h,| %wB 5` % & pp %>w %7  07 f w $ J%w weff <wt<Le e˥#   V$4&w:   $<@ $ $)v)7) LBR>)))SY *))R*p*_"S"*x**SY***+2+F+:,,,@,SY,+T,`,,,IN@,.RP,.SZ,SS@,EP,--$-SYd-8-D---CRD.COZ.IN@.RP.SZSS@LIFULEDE .DF h.DG /EX.EPMHn.&'<BHNTZ`flr' ''''"'('.'4':'@'F'L'R'X'^'d'j'p'v'|''''''''''''''''''''''(( (((($(*(0(6(<(B(H(N(T(Z(`(f(/// NSY/J//*0H0LIFULESP001 151K1u111112*2G2a222222 3$3I3f333334;4^4~4444535T5k5556616N6g6}66Illegal Get Command Line error code%NInput error on %X%NCommand syntax error%N%VA%NOutput error on %X%NIllegal switch%N%VA%NInsufficient dynamic memory to continue%NInvalid library type specified%NCommand I/O error%NIndirect file open failure%N%VA%NIndirect command syntax error%N%VA%NBad library hea00JJ555512der%NIndirect file depth exceeded%N%VA%NI/O error on input file %X%NOpen failure on file %X%NInvalid EPT and/or MNT specification%NPositioning error on %X%NEPT or MNT exceeded in %X%NDuplicate module name "%2R" in %X%NGet Time failed%NNo module named "%2R"%NInvalid name -- "%6A"%NLibrary file specification missing%NIllegal switch combination%NNo entry point named "%2R"%NDuplicate entry point name "%2R" in %X%NToo many output files specified%NExactly one input file must appear with /CO%NFatal compress error%NEPT or MNT space exceeded in compress%NError in library tables, file %X%NInvalid format, input file %X%NOpen failure on LBR work file%NMark for delete failure on LBR work file%NToo many input files%NMissing output file specifier%NInvalid operation for object and macro libraries%NInvalid RAD50 character in %6A%NCannot modify header%NMultiple module extractions not permitted for UNI modules%NInvalid module format in %X%NRMS module cannot be extracted to record oriented devices%NInvalid filetype %3A%NIllegal filename%N%VA%NIllegal device/volume%N%VA%NIllegal directory%N%VA%NWork file I/O error%NVirtual storage requirement exceeds 65536. words%NPrivilege violation on file %X%Nw 0 pE 4N A B` @7:pA .wf. f 8 ΁eE  B B  @`   B` vp2+4e6(6+  d> >t p2+4e6(6+  "䇇7 .w( $e,)w 7  - ͇w E D  B ` p 7A @ae  @+0 B ` @+hw $f8 4@+ & D -N    ` 8 2  ,  w f@pdf |H B$ĵ4ĵ!%'% %E$e@ P  *e ,e +e ˱& ĵ V 11@ bBe ˱ 2BAbpd fwhʁ`  %/ -%/*%//$`¥¥¥  ¥ ¥ef Uȱw *7 *7 $7 $8 W,( 7 7 L#  %* 7 2 7 * H  &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w 5 funhj uhdB$ 0jwaw< 8 v8w &  b*AdBbAep& f  6 P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ : ŀajTI& af* n*`V @e,w  jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *>>w  8jDl@ TeBT85l@ d @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA B EAa$az00JJ557i:)*   & & @(  f  e ee e f& &f& v  --*DIAG*- --*FATAL*- LBR -- *FATAL* -- Run aborted?R7AR7('&15ew , Bv     5Bw" \C{G|HIB-|PK D- E %     U EU 5  5U RKB zJ$JCIE U *5@*& E& & f&ËDef Ë )̋U&ff &f &  m  f A N  %, |($$H8 `XL<Tt|bK,?/?/xY &[q$Y  4TITISYSYTICLOVTIOV00JJ555512db\ d<0   5 5  5 p5@ 5 5 Jw6wPAB w bDeB$&< 0# &f C&f&    `D D` A      D C   DLfE  %J|Ǫ^kQ%" `w  w v 4   % T T  % Tw N L$ /3#e '&` E <   A > 0# 0-  A w E7 &RRw  e  ` 0!p!B  7  LBR>_"S"  r SY   !@C@FLRX^djpvFLRX^djpv|      $ * 0 6 < B H N T Z ` f l r x ~        w p @pdf \ FB$ĵ4ĵ!%'% %E$e@ P  *e ,e +e & ĵ V 11@ Be w pE 4 A B` 7pA .wf. hf < TeE  B< B  @`   B` 00JJ557i:)*vp 4e6(   d>P > p 4e6(  ~ "䇇7 ~wx te|)w\ 7 Z - Jw 8 E D 4 B ` p 7A @ae   0 B `  w f< 4  & D -N  ^  ` < 0  ,  w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$f& '&1 2z, *z "z h| h8 h h h z( z$ \   z` z hX h$ hL h< hH   h  zhT rd j0" b$ Z! Rh Jzt B# :h 2 *$! "h ' '5ew , Bv     5Bw <[\50  (r- DUt-E D  E E ܁ VzT&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff &f &  m  f A N  % &[q &[q`hVV VzV VhV  L|"%x& %x&d . &x& @ 'x&  R (x&4 d )x& v *x&  +x&x  ,','X0' BB@6F>^dkQdydw `Be,<W  5 5 :!w7  5;5 wx5 D 7 Cȋ 0 <s <  e 7 w: wz  555wZw U@5 7   5 @<  L e \* e    5  %   ̥ 2(# 0# yȥ$$ $ 00KJ555512 )w7  d( `ww  U     Ue  @%NModules deleted:%N%NEntry points deleted:%N%2R%Nw < @   :@!A n;U@e&& Z  ,%  B( %  @A U@r0 0    B(e)BwU@B5:  U&CR, COB IN@l RPm SZSS@LIFULEDE  DF P DG  EX EPMHV x& & .~& @|& @& Rx& dx&/ 0 7w vw n@ TwR  $$g&7  @   (BAbpd fw|hv`  %/ -%/*%//$`¥¥¥  ¥ ¥ef Uw 7 7 7 < W,( X7 L7  # R %* 7 7   w :5 funhj uhdB$ 0jwaw< 8 v8w &  ,*AdBbAep& f  P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w ^jjlj ɥ@@aujk,bp 5f fˇ ȕ j‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *d!8!w  8jDl@ tTeBT85l@ 6@( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@? A w w r@w @ww &=&F  @Bmh &"mUw2wP @  U f $e  w \"^" jw 7  7 v   8 w7JZ  D U `d7 bdR57 7 f D\  w7 B~  p*wnFEw"L wHw,@w  w j bAB ~e>@p C   *M z"  j  @ < 86Lp Fӆ( "7 r$ 7 7  UZw|`w僔  % 0 U f  P 2!ւ 2a aEe7 w  U00 KJ557i:)* " ""SY^"2">""" *.~& "@|& @& Rx& R~' d ' dh' Module "%2R" replaced MACROREPTIRPCIRPENDMENDRw  w w ^ b 7 w  ~w 7 */ `w"&   5b  B@ &*w B@@ w   * "0 0  T * / *' ^qq pp `w @ 5@   j B@ B cB C  f=FTSTSTSSSK^  ?# P 8TNTP^e 4$w ~ ,w#F@ BC6 w@ w-w" w&&  ,"&   7 7 ~w^ wR7 d ɥɥ NEl E ` r5X Nwwe _7   wND!( P $  E %% "% %,%;$wH J % % %,%;wDw>$` p ( N 5   5h w`ר; w  wDwC`U |W.  w 4FLQVZ_E Z W:W=E U  D&fBʋRe V   aa   C W; W W  ר ע   @7 ( ^ˋ(THLJ  w` 7 5,    U4%&%:%SYz%$N%Z%%%IN@%l RP%m SZ%SS@%EP%az   x& & .~& @|& @& Rx& dx& vx& v2'  %F%2NDirectory of file %X%N%VA library created by: LBR V%2R%NLast insert occurred %Y at %3Z%NMNT entries allocated: %D; Available: %D%NEPFile space available: Recoverable deleted space: words%N%2NUNI LIB DEF filetype:%R%N%N** Module:%2R Size: Inserted:%Y Ident:%R%R%N%P%N Attrib:SSContiguous, %2R OP info:%2R %2R %2R %2R%N User file attrib:%P %P %P %P%N %SObject moduleMacroUniversalw >  *%#   `w 7" v ` (& e B, MF ^n  pV  f Z b   b : n k  `e w` 7< 5  5ce  `w B F /  (- 2  < J ? / SP t`B l eB Nk 5wk    M %k  00KJ555512 k w 5> 89f"e\e!e 5f 2* eA   w : N 6*  &  A 7 T V5## f5 U    w5^   UJ~#p## NSY#J## $*$LIFULESP x& & .~& @|& @& |d ' tb( lr(XX^kQؙSY:w 40  L"    w'x 77 ȥ: 2wz+wh5b @N"   @wA ^B(A!  eff wu57(w< zxmp lmh%b Z7 X B0 g0 (JD  w w %   wz`  1& ~, w 5` 6 pp w$v D7  <07 | w   %w weff nw@Pe e˥#   l$"!wP   @@  D5  U"""SY\"0"<""" ..~& &@|& @& d ' dh' b( r(7z vp5 :7`   N " > p چ`w0 4(w v ^@p 7 ѥ ѥ   e  `w  8  */ 7j7f  0w xÝV w ^Ý^U we ?f7     J7"x+r" >e ` R " ڀ <    A `w  *00KJ557i:)*5@:jE@2w n6  pD= f &  Ep0 z4 e f` vB vB0 <  0 <@ `w  * w v> DDA D 7ww | N 0 0  ` ` x 4 jS   # fm`c mX   ^ @0 \`ww BC%    @@   w څ`D BE  Aa 3  w p%@ f@A +    =E e \ CU@݇`w  *% b"& N R :*&  ,&$6`e&&%&&%0%0#  &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  E D  ..f . .!.7 7v P PPPP A(( v ((((( )3)T)h)))))**F*`*|*****+$+A+j+++++,<,\,,,,,-)-e----- .%.;.n.Illegal Get Command Line error code%NInput error on %X%NCommand syntax error%N%VA%NOutput error on %X%NIllegal switch%N%VA%NInsufficient dynamic memory to continue%NInvalid library type specified%NCommand I/O error%NIndirect file open failure%N%VA%NIndirect command syntax error%N%VA%NBad library header%NIndirect file depth exceeded%N%VA%NI/O error on input file %X%NOpen failure on file %X%NInvalid EPT and/or MNT specification%NPositioning error on %X%NEPT or MNT exceeded in %X%NDuplicate module name "%2R" in %X%NGet Time failed%NNo module named "%2R"%NInvalid name -- "%6A"%NLibrary file specification missing%NIllegal switch combination%NNo entry point named "%2R"%NDuplicate entry point name "%2R" in %X%NToo many output files specified%NExactly one input file must appear with /CO%NFatal compress error%NEPT or MNT space exceeded in compress%NError in library tables, file %X%NInvalid format, input file %X%NOpen failure on LBR work file%NMark for delete failure on LBR work file%NToo many input files%NMissing output file specifier%NInvalid operation for object and macro libraries%NInvalid RAD50 character in %6A%NCannot modify header%NMultiple module extractions not permitted for UNI modules%NInvalid module format in %X%NRMS module cannot be extracted to record oriented devices%NInvalid filetype %3A%NIllegal filename%N%VA%NIllegal device/volume%N%VA%NIllegal directory%N%VA%NWork file I/O error%NVirtual storage requirement exceeds 65536. words%NPrivilege violation on file %X%N & & @( nf  e ee e --*DIAG*- --*FATAL*- x&00$K%K555512  )v  J! t &  7   w'2 r'&1'_ &7OܷJV7>J'1 LBR -- *FATAL* -- Run aborted H.|& @z!|YM,޿ AY 2t3TISYSYSYTIOV>t V\TISYSYSYTIOV(z>YM|tr*,.DL\jlnx $&0BT$&<> \'  D†5B5 ?wD&` dť  ~ť/ w vUw( b hNw Tť:G :wnť/? 6:< 5 "0.  )ť=&  !w  w   0 P yť,w N   ť= J e?߇ wJ  ^·  6  8~ $ |   ť=  .w $w w   B777 %w | r   w ,:E"w-@D5N*  =* ww%<    w: w ť ЋWAťZ |2 |0   je  b N 6 Bw ,4 Z>w" ABCDEFHJKLMNPRST ,7 57 &w7, 7 ( 6  /C '  0 pfwNCe\H D   pΊ |@-   B-7  "  $M$  5  e` 7  ֩ >*5n)G*%$ mj 5 XLR?DJ<B8 ><:& XRw@G  eA$w %5  m | v-l~zve f f&h^ ,P 2D B:66,  & :&. ,  m , e @eP %R- x Zm\e fb u$   Ie " $b c %LHw  5%% 5 $ ނffe%F    ß mB< W NH7 XR F@@ 7,00,KJ557i:)*  0$ A%BSB@@A1- `5 AmB\ e &<"\"f 7@m   IvSbDS, H` !H CE wV%e $fTBT\T6T5 ZT6TPT*TA&TTUE$TT TT Af e e w0P  ՕՕ. %e  f l7S7dS57S7dSeE$55 555  7 J W NW PW |   %    F % w"wp  p  ((((*((& $  N #-@C #C(#F5C P%|-(y Х$@ %O" 5 $% I JwwK|(z 4Q    (5  % džH 5  -- \v P ~$   l ]E& ,w4 %% w . &&f DE%\   Д J > 7 fLť F .wB"P)wf  F  *  w277 & U @ @) 2 %&,1")(wлЕ[  Е,  Е]л7&jAE7 A  Deaw7  7!  </j4d^&A&UU Z/6? *A&EE  Command I/O errorFile %X not a valid driver task imagePrivileged commandI/O error on input file %XFile %X has illegal STB formatSyntax errorDevice %2A%O: not in systemPartition/region %2R not in systemDevice not mountedFile %X not contiguousOpen failure on file %XTask image I/O error in file %XPartition %2R too smallIllegal driver task APR usagePartition/region %2R is a commonDriver already residentDriver being loaded or unloadedInsufficient pool spaceLoadable driver support not in systemDriver not loadedDriver cannot be unloadedDevice %2A%O: is attached, busy, online and/or mountedInvalid driver data base at offset %P in file %XDriver built with wrong executive STB fileWarning - KRB %3A interrupt vector %O too highInsufficient ICB pool space for CPU %1AWarning - KRB %3A interrupt vector %O in useSymbol %2R is undefined in file %XSymbol %2R is doubly defined by file %XIllegal value for symbol %2R in file %XDriver dispatch table is inconsistentCTB %2A is not supported by driver -- not loadedCannot load/unload a pseudo deviceToo many symbols of the form %2R in file %XCTB %2A does not existDCB table for CTB %2A is fullKRB table of CTB %2A will not accept KRB %2RKRB %2R not in loadable data baseCTB name %2A is a duplicateWarning - loadable driver larger than 4KPartition/region %2R is not a commonKRB %4A is not offlineIllegal use of partition or region %2RPartition/region %2R already004K%K555512 loadedPartition/region %2R cannot be loadedPartition/region %2R cannot be unloadedPartition %2R not in system, defaulting to GEN\n´ -@Woŵ6\nJr·8iϸ &Fe(itz(JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw n(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w  ť ť 0B Aa & & @( rf  e ee e w j&& D¥%  B&ХVA < C e`!  aeJbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e` & eLЕ A %& e A F Е A pEA EЕ A A   $Е.  AЕ;     &3w r D&& bЕ- eaePPPЕ-$w B D  &Е. ce  Е:   Bw ' UD$BA &( U BQ Е* r 4<>BZ^`bdf\}˜U}˜YM˜| ˜<"˜t!$˜z&˜(˜%*˜g',;@.; 0;2;4;@6;%8;2:;><;D>;K@;@QB;WD;dF;pH;vJ;}L+{p:^=&D:L Net^vv""v?T8r|e쩔666Ԁ747f7&T|TqZ[Mz}U#NPARCTBSIZEHIGHABCDEFHJKLMNPRSTVECLOA -- '&1 L   R ~ >PӦ5ew p , Bv     5Bwb L[P5  5 2  UE  P҇E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew    Е-   0@A nW e`fÊ    E w *8I *=)98 t eB &&  U f**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* \ww (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  41 >w  X) 8C * ) *w*  Bep p  |00&2+<&/LH wb 20  +ť=(& $ ť/ ڻ0 ȕ  XpPk xw< ť/^  "  t  w"W  D  &ť= e?߇ Wtwe  ͇  Ƈť= w[  ϱ~  NT Ϡ  ϙť= zϓ  w www> Y>w ̋,,   PARSIZEVECHIGHEXPFLAGSf&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ 00DK%K555512CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew F w <& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C XXCOM2 mw %%%5@ -ݢ 23.whX ZX V  n  D\ *,7 5d    f LF7!7A-糂%%U  7  >*w70 0 pp0 p V0 0 0 ^ 0 e 0 "DB J D@E C 7pp DB BlC Cm .* p7 p pm 4 m|ˇw$w (ߕ  lݿ l# R MȝKF w w b  :wVwwwޡ 7 ط^E5"5,v ^E5"5,w%7 h>*7~AwdD7X7V7P7`JwNDN K2w e? wz  Ð `w 2Ee22     ew 2ٷp7 <zP*I v` .  S* R*v&  $eΊ  e %Q*  & QffS6M"www fe ,T7~ , rKwe  Rse% N %w5ANE Q we  R 4oe fBdUe r2  e e)  ?n jE%BSCCD, DmÊ J D5@l e e 2B%% R V PwD& e7,)0 e"5e p & N 7 Aaw ewdA&f E z@!IeE% `5qelE @q B Xƅ`mFBƅ`E  %  "m JƷmƾ5mfENA% US Ίlw$wf&wdm^X,fe$ E$ tq$NC% `Ke RK5@ e% 6Ke  D22wH5w!w!6&Na%,݂&  &eP!Ί  w% jd n$XX:-77 ewx Ke zȝ| Ke ~ FĻ T .# . nF 1  HLD)>&;$"7wP4!*15  ! 5 Ļ лF#"wd & 2w pww `ww z Rw    f : >5>Eu B 00LKJ557i:)* w $BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=weB  8 N$&w b*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  l<  EU   Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ vz  lDEe    *1  ˕03 "   ˔Ӕ ʥ7(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w D /$ ,:T < U@% DD%][%><w  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce b   v*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@(e( 1  `(( n  >: 5 eCe5%& w D&Ba +- ʥ# . U 0   b   `     w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# Xw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  N P3)/ 6#( P) l@#**fff  6&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( 4 *O*)@#0l @# 02ȕ8 @00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ F& & Te# eB&B B H * eBe>  # #D #=0/H#@&0 # = e00TKWK5555120   z0@e 6=#02/002# @#?@#040 6w$/!0/ l0/!p!0 .=p0p2W=f(& e %&&eH =&e0  RU   E > >E(5E=uf p  w f &* x* Mw> =00l&8el2 0 *& RD&& & & & & L& Ε & M,1  Y FJ?SYCOSYSYTICLOV~<Z0f|<$& 06     K֤Ol|!!!+)  He>k6   L  8c 7ee %Ol0J%|*F$     "%}    ) \SΡ sΥ;Υ8:7  4 7  ) : ) s< )  ):6 * p Dw T7" l @nF00 E3FGOl|Ol|7 hAbq`׭d[100\KJ557i:)*'&1 l  J    ī Ы@ Ы4 ܫ.  ,  5ew , Bv     5Bwb  /$5  5 2  UE |J ~$ʦzE U 5@*& E& & f&ËDef Ë )̋Uf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff   |p|< |XX|īp |Ы&|ܫ/| 1Юܫ5Юܫ9Юܫ>| N p 1%OlT%|NHH@:,hdf5 !2 & 7zdD F5.VHF700 E$vFUTLBBPBBPBBP„PPP P 4PH\PpPP [0"z [2"z [0"z [0"z [2"z [2"z [0"zcc[1!}c?21 J15m1;66r3g14;22;30;38;46;54;62;70;78;86;94;102;110;118;126;134;uwm7 7 7 7 7]7R7 B=4 ݨ. `$ŀ    |ˋ7 jeTv Tvv\.*& 1 1 -FN7Ρ D>% wU7 |4& | B e& NԷwA% a   x BҋB 7w7  )+ H GOl|Ol|׭ e " 7   B77@fa8-hL1B   Ʒس .jfh7^| $00dKWK5555127 v  w`^LNHŗ&ť1 ! P 8ĝ7Dճ  ҳ7Bس7 Z m|B`7 rDW W  $ W  JW  n7F  @8 41 &  "7  ׭  r 7&f  @` Ew wf " ŭ  2w|B س X e    A>f Be $ -w ~ ,~ W!F~-wwz  &f& v  5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %w *8I *=)98 0 eB &&  U "**e *Nlv ΋*.2  & #!)&eP(e && >e >E ~p* wb&f 82e&( B0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. J= . B  E  *(.8Ae f"( UCɗ&+(e$&% **w eE D` bl lrw B  B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) ^&f (  e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w U8UMw w&0,0, f 톇,, w Z     .% eB U5UU plp & NeՀ)*RWMTEQ-S7 7  7 7 d# *w! w  7 f7 7 7 (Zwj\1  5 vҕ[Ҕҕ]v vVvL    ~zvlh1 1  7"7(w WEw EwE    wP    wP    wPE N FX >Xw *8I *=)98 . eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E |p* w`w lw82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )00lKJ557i:)*"(. = . B  E z (.8Ae f"( UCɗ&+(e$&% ** (e(&&& e"4 &fff& & "&eW!  eW!eW    p*ŋw eE D` bl lrw   B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) &f   8e) .  e6p 4 08*w=p!Օ^w lBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w,&f 141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ hwX 2U8UMw> w0,0, f 톇,, w      .% eB U5UU plp & NeՀ)** 5)%Eefffff f% EDD%][%>< R 1 w ww v ww h w Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ vz  DEe    *1  ˕03 "   ˔Ӕ ʥ7   f >5>Eu   (e( 1  `((   >: 5 eCe&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e H4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 P0 @0 &*0 @ :& & He *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w r(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  `1 >> =00l&8el2 0 *e6p 4 8 ` 81416   ^ ZB 00fep=& /e`pw *) l0, *) $ )*)0,40,6 00tKWK555512ŀ7@C<;9,& & & & & & & & & Ε   )) 27 7 z7 z r r7׭'% d׭ X  R-DL2 & ׭׭ 7  $, w#A B `E`W!F ABC 0w 7 7   7 w H) <* w46l0**=D  `p46 4f 64/=  @) 0  8w H46 8 e*w > =00l&8el2 0 *141612epl2l0p *) l0, *) $ )*)0,40,6 w  )   fU 6%  BA `6p 4p`4 %60 4e6p 4 88 481416  n  H b46f %8 E D/D!D l0l8epl0pɥ.ɕ w)"(. 8= . B  E  (.0,0, f 톇,, w      .% eB U5UU 2 plp & NeՀ)*0+1(e  @%&p*w f( f)f z8Ae f"( UCɗ&+(e$&% ,*1 U8UMw" wf *B 00fep=& /e`pw8e2 ..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 08*w=p!Օ^   " Z . 72 $7 ,  wŗ&ť1 !  ĝ7~D  7fB"7 ZJ < m2B`7 (DW W  $ W  JW  n7    7  ׭  r 7&f ݎ @` Etwo wfXf " ŭH < 2w2B "  e   f Be  -~w ~ ,~ W!F~-ppwhwf0nlj  7 a^<&A ,v^ H BvA 6C H HJLNP B` ׭  &)_&& & &  & && && Ε @ 61&  1 )ȋ& & & & & & & & & Ε   1 &   a@ =x%X%P:%P file ID-%6A-- Open error #%D. on file- %2A%O:%VA%6A-- Print error #%D. on file- %2A%O:%VA%6A-- I/O error #%D. on file- %2A%O:%VA%6A-- Job limit of %D. pages exceeded on file- %2A%O:%VA%6A-- Attempt to space %D. pages beyond EOF on- %2A%O:%VA%6A-- Printer hardware failure code=%D on file- %2A%O:%VA%6A-- LAT connect failure code=%D on file- 00|KJ557i:)* %2A%O:%VAABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& ex/& eJ*AHŀ ȕ Е Е Е & e> & e*Е A %& eA Z Е A EA EЕ A &A   $Е.  AЕ; |    &f& v  w  ť ť 0B Aaw D&& bЕ- eaesPPPЕ-$w pD  &Е. ce  Е:   B & & @( :f  e ee e &  m  f A N  % 5 ߥ& *  + 23E Ew Z   Е-   0@A lW e`fÊ    E &f Ew̭ҭ;    ŋ  Eww w c ŕ  ɕ  E!ŕ  7,@He&f@ 7@ ŋ$ť1ť+׭  ť0  ť$E`͕ w** 0w*w   ȭ .zvx7n $7  wpn\^Xŗ&ť1 ! P 8ĝ7Dŭ  ­7Bȭ7 Z mB`7 DW W  $ W  JW  n7V  PH DA 6 027(  ׭   r 7&f  @` Ew wf " ŭ  2wB ȭ h e    QNf Be 4 -w. ~ ,~ W!F~-ww  &f& v  5 ߥ& *  + 23E Ew 0   Е-   0@A DW e`fÊ    E &  m  f A N  %w t) 8C * ) *w*  ^ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 6p  8 V *`)w C#    D @)  6?0D)w L z00KWK555512) n* wH46l0&f  *) l0, *) $ )*)0,40,6 e6p 4 8  z81416      8  H**  DP5R RRR **=D  `p46 f 64/=  8@) 0  8w 46 8 e*w> > =00l&8el2 0 *141612epl2l0p,*1 U8UMw wV B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 w \ ) v  fU %  BA `6p 4p`4 %60 4)"(. h= . B  E 2 (.0,0, f 톇,, w \     .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wz f( f)f V ..8em,0l0!D0e6p 4.) ,&f f . <e) .  e6p 4 08*w=p!Օ^ \7  l ^ r f  T7 &f& v  諈 . ܲ01234567890123456789%4S V %4S%4S%Y%4S%3Z%X/FI:%P:%P%4S01234567890123456789COPY %D OF %DDELETION %VANOT SPECIFIEDЮ P %ޮP %^ !Օ w\]^ Е: V rpД :eHeB= vme!=. RG H7% :@ eӥ. %| ^&RS &mm ! RS m_ 2 ʝ &mm z ~ dABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf R & e46& e /& e`M*AHŀ ȕ Е 00KJ557i:)*Е Е & e & eЕ A %& eA 8 Е A EA EЕ A A   $Е.  AЕ; $     w  ť ť 0B Aaw jD&& bЕ- eaePPPЕ-$w :D  &Е. ce @ Е:   NB & & @( f  e ee e  5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f &  m  f A N  %01234567890123456789%4S V %4S%Y%4S%3Z%VA%3R - LIMIT:%D PP.%VA%3R - NO PAGE LIMIT%4S01234567890123456789FORM #%D - %D LINES PER PAGEFORM #%D - NORMAL HARDWARE FORMSFORM FEED IMPLIED AFTER %D LINESNO IMPLIED FORM FEEDJOB CONTAINS ONE FILE/FI:%P:%PJOB CONTAINS %D FILESPECS&Ю P )ޮP % %Օ wV;v2H2J2Lj Q 6me%=2 h 7%( f"> R eHA eJA vAL l >  % &RST &mBm>m:% RST m 2 ʝ  &mʝa ߯ m-     ABDEFIMNOPQRSTUXYZ<> HPjll` JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC & & @( f  e ee e w ~&& D¥%  B&ХVA  C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf @ & e"6& e/& eL*AHŀ ȕ Е Е Е & e & eЕ A %& eA F Е A EA EЕ A A   $Е.  AЕ;      w  ť ť 0B Aaw XD&& bЕ- eaeMPPPЕ-$w (D  &Е. ce B Е:   <B&  m  f A N  % 5 ߥ& *  + 23E Ew Z   Е-   0@A lW e`fÊ    E &f .c|1!_1Cx! !B.cB]C!w1g1cB.X}1A>!c1cc1FET1*B>.:#B]FRѹ^A.Fs1z1N!!GB     `    7 C &f& AZAЮJ090D?.p8;v2:|,]&[ ,$'!- &# df VeaDE E e0  ҀDА  %w D Е  w   @f2   L%Fw ĝ%! 2 |  V2 X*>2 @&&2 ( Z 2      2 J . 7" $7   wŗ&ť1 ! 00KWK555512 zĝzr7nD/  ,7VB27 v Z: , m"B`7 DW W  $ W  JW  n7    7  ׭  r 7&f ~ @` @Edw_ wVHf " ŭ8 , 2w"B 2  e   f Be z -nwr ~ ,~xt W!F~-``wXwV ^\Z  &  m  f A N  %GOl|Ol| ?A : %7 weH  % f% %MfVT% N%xQ  z7׭bS1&@4717!z* r& & & & & & & & & Ε 3w ,*8I *=)98 V eB &&  U H**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* >ww * 8B pB  l0 B P82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E 0 (.8Ae f"( UCɗ&+(e$&% **  f &* *eB  8 $&w 4*(5<s1  U U@  tf&" )'&M'&&**%*%0 *&* $*5ND  <  EU   w LeE D` bl lrw   B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) B&f   he) .  e6p 4 08*w2=p!Օ^ Mw   f >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w > /$ ,:T < U@% DD%][%><wf  w1  %,,:4 w z*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce J   &*w *  ע"wf)Ĕ%.&%;D  500KK557i:)*)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w nBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wF&f 141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ wr LU8UMwX w0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  nDEe    *1  ˕03 "   ˔Ӕ ʥ75%& w V&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@M,Iz Y &[q$Y F(SYCOSYSYTICLOV<(Z(SYCOSYSYTICLOV(zyH<M$& 06     &KȧOl|!!!+)  h eNk6     c 7ee %OlJ%| F  z    "%}    )  Sޡ sΥ;Υ8:7  &D 7  ) J ) sL 00KWK555512)  ):6  *  w 7"  ~F00 E3FGOl|Ol|7 JADqB׭T[1  & " .$fbd7Zx $7 r  w\ZHJDŗ&ť1 !  ĝ7D  7B7 Z$ mxB`7 nDW W  $ W  JW  n7B  <4 0- " 7  ׭  r 7&f  @` Ew wf " ŭ  2wxB  $T e   =:f Be  -w  , W!L-wwX  &f& v '&1  б  б  | tT lH d0 \H T Lⱞ D$ < 4L ," $ d ⱴ |   ⱆ B 5ew , Bv     5Bw 50  (r- DUt-E D  E E ܁rHZ&w*E U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&  m  f A N  %&ff  &[q &[q`   0б 0Ȿ0 0 бtt00KK557i:)* 2^ p20 201%Ol2%|,&&ҧ d`b5 !., 7v`D4F5.R\F700 E8FUh\BBPBBPBBP„PP P  P4HP\pPPP [0"z [2"z [0"z [0"z [2"z [2"z [0"zcc[1!}c?21 J15m1;66r3g14;22;30;38;46;54;62;70;78;86;94;102;110;118;126;134;uwi7 7 7 7 7Y7N7 >90 ݆* ` ŀ   |ˋ7 HC2 冡 b  1 1 -2H7ޡ @:% w뷊Q7 |0& | B e& NԷwA% ?   t BҋB &7w7  )NWITAQ-M7 7 k n7 7 d# **w!  w  7 D7 7 7 Vwf b1  5 ҕ[Ҕҕ] fR冡H x~zv r n N\XTJF1 1 +ŀ#7<9& & & & & & & & & Ε   )) 27xw7 7  P7M ׭%׭  - & ׭[׭Q ~7 x t$ w#f`A B `E`W!L ABC w 47 X7 n  @7 z sw ; @ "7   ŋ!  Eww |w Pc ŕ  ɕ  E!ŕ  7,@ve&f@ 7@Nŋ$ť1ť+׭H; ť0  ť$E`͕ w ** 0w*wGOl|Ol| A :mhg 7 wbeH D % f% %MfVT% N%xQ6  v7C׭H1@77 & & & & & & & & & Ε 3+ & GOl|Ol|׭\ 6e Z7b_ Է ~7K6)ơu@-G1 7 &A *|^ H %A ^C  H HJLNP B` ~׭2  &)_&& & &  & && && Ε @ 61&  1 )ȋ& & & & & & & & & Ε   1 &   a@ 0[(d%X%P:%P file ID-00KWK555512%6A-- Open error #%D. on file- %2A%O:%VA%6A-- Print error #%D. on file- %2A%O:%VA%6A-- I/O error #%D. on file- %2A%O:%VA%6A-- Job limit of %D. pages exceeded on file- %2A%O:%VA%6A-- Attempt to space %D. pages beyond EOF on- %2A%O:%VA%6A-- Printer hardware failure code=%D on file- %2A%O:%VA%6A-- LAT connect failure code=%D on file- %2A%O:%VA 7"7(w WEw EwE    wP    wP    wPE 7   ,   7 01234567890123456789%4S V %4S%4S%Y%4S%3Z%X/FI:%P:%P%4S01234567890123456789COPY %D OF %DDELETION %VANOT SPECIFIED P P 2Ҵ% !Օ 2w\]^ ~Е: V Д  eHeB 42me!´=´  7%2 :@ eӥ. % 2:RS :mm ! RS ´m1 2 VʝQ P´:m? L .P "01234567890123456789%4S V %4S%Y%4S%3Z%VA%3R - LIMIT:%D PP.%VA%3R - NO PAGE LIMIT%4S01234567890123456789FORM #%D - %D LINES PER PAGEFORM #%D - NORMAL HARDWARE FORMSFORM FEED IMPLIED AFTER %D LINESNO IMPLIED FORM FEEDJOB CONTAINS ONE FILE/FI:%P:%PJOB CONTAINS %D FILESPECS&e, P s(P 2N%|e p%Օ 2wV:2H2J2L0  "2me%:=|:  7%2 fz"Nܧ R eHA |eJA pAL f N  % d2:RST :mBm>m:% RST :m 2 ʝXVHʷ : :mʝ' ) m- ^:z >: T .c|1!_1Cx! !B.cB]C!w1g1cB.X}1A>!c1cc1FET1*B>.:#B]FRѹ^A.Fs1z1N!!GB     `    7 C &f& AZAJ090?.D8;J2:P,]\&[V ,b$n'!t-zh &# f eaDE E e0  ҀDА  %w D Е  w   @f $  L%Fw ĝ.%!  |$  2 X*$~ @$:f ($ H $  & & @( f  00KK557i:)*e ee e |kQ,hh Y h cTITISYSYTICLWKOVSӳh f13 ӳSӳ  B   B  +-,,,+4+<+,++-J*f/8&B!+-"'%<4^@C`DdOhB~FR\Xxd@yuuuuXu0u !"#$%&'  @ @%+2@8>DK@QW]d@jpv}@@@@΀@(Px@h0X Hp8`(Px   @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@LI<r NL< CR EN( DS(* .00KWK555512MACRO V05.05  D   D  pHP70 MAC>p0 MAC>    w H   B  w w wZ EU w wfC whC w wlPU w %f6  RRRRRRRRR⋇ rn (&  > $ ~! z˵&ԝԝb >7   ( e$  " n  "  ݟ j% x * : Č 5(2y  p\ZYw-N  j D6 @a  jw 5 0ҝ@ċ( ĝĵ ҕĵ@ ^ċҝĵ ҝҝΊހ 7   , ҝ~ҝ{ѝv ѝow wanjҔҔҔҔ% ( -5 x|v `\eV&mN   :  < l j   #  8 Q  U 8 W!> w  H& L c7 ^ *eeee l  4    ~ `!6w    J5%~<6 wH  > 6 7`2.7 00KK557i:)*& z7 D x t   B C p  7P[w(8.7      w n-f @ U b dd7 d  U@ H@7:~ D =*D` W! W! W!   R E@X 5@5 JU H257$D N  wl> ~ em VŋW! h-w! & @eD & w7U wT! U@ ŋŵ`  e  @X5& L7, fH@C\>H8@3>. fA5 (ʕ R fA5 # eʕ Jҋ A @ 9eURJHD ĝ:7 6 ]+ (N f` B*   ҕ-     BR ?  X T    7 H  < 6  @ :w( 7" (7&77 ee & ^ #5 5 7 -B ZX X E`m| "zaE`'--  XB & D> .4^v. l$7 `w$7R7P    w% -UaA ` D`U lW!  `A8*2 ( - &   ,4, %N  wP7N   # `B w(7& sT%   7  @e8* ~   C [$@D"&W!  R7 De ^ T #h*uh* u8*   fh*&8*0 8*0 h*0 T X @ H78 f,A8*Bh*CP*  * f e0R& @    &   `@ rpf0f ! ! VX!@  D@ l 4@ ` (W  & e @  vvC0     & N`U  U` ew    U @X  5 U- F>X ,U  7 E  X @X ŋ x rX $ ZZ   b <* p *p Rw z~   p  vRww)5Z3 x0-& ЭL   7 pnf` F7    LD .  ]@ BXB4@CDD Օ  Օ   e  w"f     p \ j    4D * zff  7 PNw  w ( U 2D  7 <>C!W!^ 8X! r  VC D \ C!D! l UUP: 7 x H 7 7f  eE  w &ew  FE  A B` t7npA \wR BH! B  @` * B`7 mew hE R  B ` p 7A7 @ae   0 B ` `7\h X H &"谊 &&  p4e6(  xH   Hp4e6( h 2r 䇷  7 RwL He܇)w0 7 .  w f ~ T  !& fY w`K`5W   & D -N    `   RR "  r,UR zw&&7  #-%00KWK555512L! e f& 078P8P*07 x7P8r8HP*H7<o !!Wednesday dd-mmm-yy hh:mmCR$+DSENL,LI,NL ABDEILMNOPQRTUZ Page  '&1 6< 6; 6^= 6L> 6? 60@ 6B 6C 6N 6NN 6= 6`> 6> 6? 6|A 6@ x6&B p6B h6LB `6FB X6@B P6A H6^B @6C 86C 06>D (6D 6F 6F 6`E 6E 6E 6F 6D 6D 6G 6I 6 H 6I 6K 6M 6M 6,N 6FO 6N 6N 6lO 6zN x6O p6O h6P@ `6r@ X6pV P6:U H6T @6lT 86U 06U (6V  7V  7.Y  7\  7\  7S  7$T  7V 7S 7S5ew :, Bv     5Bw z-125  5 2  UE  6* 43$-6E U 5@*& E& & f&ËDef Ë )̋U&ff 5%& w &Ba +- ʥ# . U 0   b   `     w @eE D` bl lrw   B eE"s    s-  Cslw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w&f ** 076607t666(M66+M66-0766:078 66@`R6"7@`Rp 66E`R6 7Q`R67Z`R 66`h6kQ gOqzw"" @PAl7MLENr7DS 7         " & * . 2 6 : > B F J N NSY^SYLI68NLt8SP@ CR8EN8DS 8r v z ~                                         " & * . 2 6 : > B F J N ?9 K00KK557i:)*KLLL@ LL LLLL =% R G @X kQSYMAC -- Errors detected: &|&  f&&  e#e|& f&&G& & & & && '&& @f 2 Rw4ffw w@ 0 B$ wkQ5"S6 Sqfi Rg%NL\`W N &"5@]r5U@`e 5# 7\7^K7{ HK&0## RR p 0 $0 &R  #  B feB&< f0 e҇ _ # LBA4F# 8-# *tD wzkQ f=1 56  j D  VRw$ 7 J7 7 D "9&(w)eHqqaaa# ABCwxW!L7 n 0SwZ *0 @ 5w( TeB   bd `ES"cSS ,w 7  0f0h R w҇4f $8 7 "7& ؁b z7 nf X7^ "7&1q 8 7   To@ eB 1p   `]0 *%"ˇ7 5H!eH 7eH R 0 PN" R ϐϋφD 9  ( $ K   #K 5 7K 5 KK 5J _K :e zjK t rK h5jΡ E zA >_K 8A 0jK * RK5$K 5 9K-f K-Z -RK K 5  D r BfEhBa @ \ `9D N ҕ ҕ A | D ?"eB$9Ĕ`fe5@nPʝȁ > P 6  %7 d7^e 5@  w D D A L T  7 8C wѕ a EU l5 X v zl7 N 7 B JŇ5@ni>E^UX&  7$ U0 6w |  5`7X Ⱥ5 ƶ5L 7 L7 7 0  3  >ͷ h  e- D 5$Ӥ46",$     w 7-P ,T9 5 BL5 Q rҕ  h ɥa ҕ mtv ^%be` T eN FF>e8 t j ~ҕ  ҕ  ҕ ҕ(.9 74 ҕ,) e  D >D 4ο  wR h @&  `e# 3mf Ce&&&& w  #- Cew  wmw& w  X J  & T!J 8  w  7@re'  tDl mT7`TTTTf 8TTTT 4, ~e N  hew %   n awwN"Lww ` > R@ 79nȽjĽ & :Hvv Yhz      ToD75d35@\ nJHH  5 < 5 . F" 2>< 2  F ʇ# j9ҕ ` ̊ҋ59@ы& 9R &mX 00KWK555512 e $e&@ ( @ !  e ee e w w|"      NJ7 J7 D7 D W,@ L7$ @7  # r    2 0   7 ź 7 w&3 89f"e\e!e  5f x2* eA SY0:MACTMP*** Assembler statisticsWork file reads: Work file writes: Size of work file: Words ( Pages)Size of core pool: Operating system: Operating system: RSX-11M/M-PLUS (Under VAX/VMS) (Under RSTS/E) (Under P/OS) Elapsed time: RORWDIGBLLCLRELABSOVRCONSAV -- Internal errorSymbol table****** 6M 6U 6U 6U 6HV 6U 6V z6`R r6&W j68] b 7D\ Z7R R7T J7PZw *eB 8   Mw 0+1(e  @%&p*wj f( f)f F8Ae f"( UCɗ&+(e$&% w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ n‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *jO>Ow  8jDl@ hTeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ 6V 6`R 6Z 6\ 68] 7V 7r\ 7D\ 7T 7RW!M0NkQSY kQ LW! OлM    M  w pUeBUUUUU "S` 0OeB VѵM *ȕf 2 8MeB$&< #   w.BU W!<& ~ƌ  @B! hX w! -- .INCLUDE directive file error! -- .LIBRARY directive file error 6V 6`R 68] 7r\ 7T 7PZ00KK557i:)* TCBnkC!B+B,B.B8jCKBKB NBWUC&XBHXB[BBhBiB֯֯zdzxd ձ gskQxLB7[1,1] qD~~~K@K#K-K(\,Ix8-rx8x8Wx8(x8,x8xKx8Kx8Mr8Qx83fbOqx8` %2[MQQR Rwyz[-K7 χ 7 7 v -%?Sb r! bj%= 8hX M̷C&  U$ * C 7 f7w&z8X7 Y  S ˷ F %\x 4 %%=, 'ŝ   @  V : %,  X \U   HЮ Z  7  dÝA>    f  ,5Uʇ X V7 f xv 8 0T́ W ϊ wFe/uf ԕ$ h7 7( `f % ee0T7 "T r  &VF ;  Ϸ ` U  -֯D v     @ 8 *  " >W!'  ׽ z  ߨ jf' 7 VΗ  $RR FH7@:Ύ` ^  7   wd谊 \ p v7 -- T.* N PRRRRR x7 l HP A wV  7 <  eB B 77 p # \p  ,  W!$ rW!=W!: `W!: Vׯ.  "  U@ &   7 7 LJ  F dD  " | D <57.͇ !  C 7w  f L UƇ d& 7w & f  "  0    V v $ *7 v  &  4 f с     e 4C"ƇUŇ w J  0. wwC8 d!L  P R  7 ZzC X R`Œ  %A  w m| u * 5 7 7  7ww   "ҝ7 x  ^ĝ T mnUf L 7 P-nJ UR<\8X 2 f Ŕ Uć  5  7   PU@U n  %~ n RR ȇ %, 2 5^w7 w  )È p fDW"* ! ! C  7 D  5 7UÇU Ç ]  IU  LC B :    >߂ W!$ f ڂ h 5@  C BW!&W!!B  C  . 0.U0‡ H  6 @B   D5 @X @X ՋC wN v7 T   X  ݇ X \  ` < 6 >  5Uf7w" BW!< @B!  4 XU & # & ь   (U& l݀e  W      B 58EU@  ~  NwnN 7$D & &^@   U> ]w  з B P  wP$ U7 V ҕ  J W U ҋ bҕ ` j* b˷ć ~ RZ 4ݗ 5@FO8LL bF# P   d  8- ,   eBfff :    e0J UԾU̾ |  ՇCU <  ̷ F > C!w  U<"E4 n00KWK555512 N5P˵ ŀ Հ U4 -:U N57  5EP vW!:U@ h d5 EU P5-ʭ۽  5 UU5U  & b 6 p]I W!:W!=R .5 d 4  wN W!$ W!: fՖ 5   x t  hX7 w  5U >X 2& W!=@ "W!: Uff ̑& F 5@tUR& TՌ#  5 5 U 5U@U5@5 @5EPE?UW" 5 fڇ ˵`7U滇 55 UĻ5 &  7^ wEwv & f7 A7fE Jw Ί 7P ǁ-   r 5rE%P*E%%E%x 5E%pE%E%% A A 5Uº :5UE    UE & .˷ \   B 6     0U @ ~ŷ & 8 VH UUW#ŀB5%   UcW!(3Հ U ] ŀ W!+Հ W!+ U>5U8 PU0- W!(5( 5UU7 5U E > ŀh PU0 $ U Z W!)wLUȸ R <P ޸,˵ ˵@KQ˵ JыE  P˵P7˵@1Q#ыʋ *ы   e f&:* $7876 7 2 m2  ыJ ԋ  ~ Հ    ` 7 ط7 ַ Ç ! 8 B  PX0R@J PB Un >  ~Нsn7 >t7޹ B7  \ 8Sb &$ D   UD  05ӝ1 ӷ ӕ ӝ   6#6 6T X  5,7 we UT Hg (7 N7 L 5   w 0 )  "  B  P0@0 D` PU | 5l5d "  U t &,@@8K@BaTq rtvYD 77.MAIN.Table of contents  .6V &6`R 68]  7~R  7S  7$Ti67@S@AY P@`  s@@ z@s:  D zQD n+\! 0 @@ @P   eot J r@ r @ OX %@ y~T@p~@rw wss@ @t;:Y;wwwwLyz j@xS @  s:  @ @r @r OX % @w J D  @@ @v vovK M@42} wK@R@8@ @R@@Rv@R}pT@8 pTpTv[q`"\qYz d};1;B;|,\E+\XHi}D,d,֯L,֯+֯x+֯֯ׯ}گr,ޯp!P$^ ,?`,,l!+n+n!+n%+n++n,+n.+nK+nK+n N+n&X+nHX+n[+n}+n}+n+q%+vL+QD+zd\+zxd鰼Rt,y, |+ ,T+ %!t+ |1q,%34%|@ he~|$|(d|W*|Xj|d:|hez|D0M/|D9Mo|DM?|DM|D`Y+|DiYk|DZ-|D Zm|De;|De{|D0f,|D9fl|~d=|~he}|[M |[M(`|P|P|P|P@|P|P|P|P@|,P0|,P1|,P2|,P@3|,P4|,P5|,P6|,P@7||Q%||Q(e|S|S(X|Sp|SqY|Sx}|S}Z|Td<|The||9wW"|9wXb|x!|x(a|AyW#|AyXc| zW)| zXi| zd9| zhey|@7RR RR W P@ LF A  707p& & ikQ & hw h!r!% &?fW @W >5W E5 W ! W 8W >W EW W W W Ō  $|,e  & & @( f  e ee e f** apB ¥*W W c@ % w  ť ť 0B Aa 6V 6Z&  m  f A N  %h?LTALT   -- I/O error on output file -- I/O error on input file -- Command syntax error -- Invalid filename -- Invalid switch -- Open failure on output file -- Open failure on input file -- Command I/O error -- Command file open failure! -- Indirect command syntax error -- Indirect file depth exceeded# -- Invalid format in macro library# -- I/O error on macro library file -- Insufficient dynamic memory -- I/O error on work file -- 64K storage limit exceededh?JU b ṗe`7H f&7 ` ;?к0 =8@`/@`  e eD t " 1 8*1 h*1 T 7wSwHb h T   U5 e7 R7 $weE& & YhR&dR blST)T wZ/S6VB НعНչНҹP  B (* D Bҋ B hf|wpR@ p 0p  n d %~ڳh b wwf~ %T ӬӮ ڳw :ݪ6I 26Ew *8I *=)98 $ eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E rp* w8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f 82e&( r܀0 0 0 80 B0 0 0 0)#0.)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) ^&f (  e) .  e6p 4 &08*wܱ=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w FU8UMwR w0,0, f 톇,, w *     .% eB U5UU plp & NeՀ)*00LWK555512w ( D L 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# 8 w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ x#( P) L@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B  v* t eBe>  # #D #=0/H#@&0 # = e0   B0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w H( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e <4p8q  (#4=A#@)( . *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 n 0 @0 &*0 @ & & n e *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w` 0 f &* * Mwb   f  >5>Eu *  e6p 4 8  81416  (  w t*D 8  weB  8 ؇$&w 6*(5<s1  U U@  $f&" B)'&M'&&**%*%0 *&* װ*5ND  ׃<  EU l  Xf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ 141612epl2l0p8e2 8Ae f"( UCɗ&+(e$&% 46f %8 E D/D!D l0l8epl0pɥ.ɕ w(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:00 LK557i:)*  Ce 0   L*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 0+1(e  <%&p*w f( f)f  ,U8UMw w82e&( π0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 * *) l0, *) $ )*)0,40,6 ,*1 >B 00fep=& /e`pw(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@ TTHP |xtww mB 7 & HP0 \ T| @   8 r J7%7%炷 B BHP :  & 0 # X % F 4 L B< * SSw޽ " 5   7  ޱ  ̷ س ȳ  ^RUlRL t  h d lRtR! W dRA&%+%- X5  \ 0bab b b m %.w ށ%E  r `7`@@T@T@Th 1"3  e | x   5  B < 8 e,'UL b(J  5@  UlRr lR  U m7 7  7 wh" 0 B $  4 $ la      b b b w> %+%-  0W! W  UF bw 5 8 L *La L   ̷  7 w 0  J6< B6@ :6I 26Lw ) 8C * ) *wj*  @ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w ,C# \   D @)  6?0D)w @ >n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f |e t* e*wp@)0,    ,) J)% ȥ 00LWK555512 = ȥ l 0l  |ȥ (ȥ- ȥe&=Ba@a Fe0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ^, P  wL  JwB # \ f  `* |wlڱ)0406 l0 w * H) D* w46l0w h 0,0w^  vw B$0,0w8 46  B)0406 0 *e6p 4 ~8  81416   ,   ..8em,0l0!D0e6p 4.) &f ~ h e) .  e6p 4 "08*wz&  m  f A N  %0,0, f 톇,, w      .%  eB U5UU  plp & NeՀ)*=p!Օ^141612epl2l0p8e2 *) l0, *) $ )*)0,40,6 46f %8 E D/D!D l0l8epl0pɥ.ɕ Jw:փ  DP5R RRR  8  և**=D ( `p46 f 64/=  @) 0  8w 46 P8 e*w4  U8UMwb w> =00l&8el2 0 * 8   * n * 4 6 e6p 4&*,*1 `B 00fep=& /e`pw0+1(e  @%&p*w f( f)f |8Ae f"( UCɗ&+(e$&% w  ) Ӈ  fU &%  BA `6p 4p`4 %60 4)"(. d= . B  E :(.FTOTT$T,T6T?T:Yw/M zTw¾*ffff Z*Mm e< e< eA ҕ:A ҕ:A ҕ.A 5XN*f=*@4HD E& c `5%E mnR AnR ҕ * fҕ- ceSTRRRҕ- H  ҕ * 4ҕ: * 5*S f T W ҕ0wz&f& v Weekday dd-mmm-yy hh:mmVnn.nna MondayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSepOctNovDecUnknown z6Ef&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B00LL557i:)* N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e r %&$@A 55@558 eBeeeȵee&e e4   QB4w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &|kQ,22S Y Y &[q Y TĄ 9TITISYSYTICLWKOVSӳT*f ӳSӳ00$LWK555512MACRO V05.05 *  7 , MAC> v  MAC>   v^-$݆ .8ݞ<o ԖWednesday dd-mmm-yy hh:mm  T lߢ L 4 )( )@( .T.X|.T.tLd1T.Lp4T.LX6200,LL557i:)*kQSYMAC -- Errors detected: kQ gOqzw"" @PAMLENDS                     NSY^SYLINLSP@CREN"DS L   $ ( , 0 4 8 < @ D H L P T X \ ` d h l p t x |                               ? J(M(P(R(T(@X(\( `(d(h(l( =% R G @X @f  .w4ffw w@2 0 BwkQ5"S (/qfi /g%NL\`W N &"5@] B5U@0e 5# i7\7^N'7K HR'&0## /  0 $0 &. | #  B feB&< xf0 e / # FLAvF# 8X-r# *DwJkQ f=1 5    /w: ܩ7 r 7"&|(w)eHqqaaa# TABCwHW!7 > B\0(/wZ *0 @ 5w( $NeB 2 @ b~ d ` `]/"{// J w 8 7 0f0h T . * w4f z 7v ":& ؁2 z7 >6 X7. "&1 X 7 \  T?@2 eB "1   v] %7 5!peH 7leH R 0 PN" / vql   ( $X'    q' 5r ' ֦5Z Ķ ' 5v '  e ' ' ~5: E A T' NA F' @ R'5' (5v (- +(- -( 9( 5 ^  @ BfEhBa @ r 0  ҕ ҕ A  2?r"eBzĔ`fe5@>Pʝ   %7 47.e 5@~ d w  A $   7    Swѕ a EzUt8 5 ( F <7  7 R X 5@>9E.U(  7$b UN Lw֣ Į L  507( ĥj5 j(b 7 7 ^7  2  $3 ޱN T  Ĺe- 5Ӥ\pjz^r ^ @  B< Fw2 7<::*,-*P" , R5 (5 VQ ҕ  ~ Sɥa ҕ m %e  e e tl jd ~ҕ T ҕ Q *ҕ ҕ( 74 Ρ ҕ,) e     T 4 2N wR @&  `e# 3mf Ce&&&& w  ζ ķ#- Cew 6 Tw$mPw& w  n J  & T!J  p w 0 7@e'  DD m7NTTTTf TTTT z e N h` ~ew R% @  aw(wNp(ww v T h@004LWK555512 7h >: & %F Y8ujf VT     T?ݒ75435@, n  5  5  F 2 2  F #` jV ҕ ` ̊ҋ5 @ы&  R &m(  e :e&N@ ( @ !R 2  e ee e w wL       7 7 7 `  W,@ b7 V7  #  ,    0  . 7   7 wSY0:MACTMP*** Assembler statisticsWork file reads: Work file writes: Size of work file: Words ( Pages)Size of core pool: Operating system: Operating system: RSX-11M/M-PLUS (Under VAX/VMS) (Under RSTS/E) (Under P/OS) Elapsed time: RORWDIGBLLCLRELABSOVRCONSAV -- Internal errorSymbol table****** d ) \X1 TX1 LX1 DX<2  ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@,X L8<H!&))kQSY kQ W!L <+nķL)  .  L)  w hUeBUUUUU܇ "S` 0^+NeB ƨ ) *ȕf  8L)eB$&< #  pw.BU> W!<&   @B! تN pw! -- .INCLUDE directive file error! -- .LIBRARY directive file error, L800 W ϊ w0e/uf ԕ$ 7 |7w( f % ee0T7 >  V@0 ֿ% , U  -֯ 0 *   @ 8 Z  " nW!'   d L ߒ Tf' 7 @  $<< 027*$` ^  Կ7 *  w   -- T.*n NN XRRRRR 7 V  A w@  7 & · 2 eBN B   #   \  ҹW!$ W!=W!: W!: ׯ.  R  U@ &  v 7 7   v Np Rn fp :&57 N! Լ @ C 7w f | U & ֲ 7w & f J R  0    V N $ 7  V ޺ 4 Df  l    e 4l U ̱w z  ` wwCN d!TL  P  B7 : Z2dC B RJ   %A  w m Du Z 5 7 7  7ww  z H "ҝ7 b N ^ĝ T BmXUP L 7 :-X4 U<&F"B  Ŕ U L 5  7  U@U  %$RR  %, b L5Hwl7 ~ w  )vr p fW"* ! ! C  7   5 7UU 8]  2IU  |C r j   L n W!$ :f  5l@  C BW!&W!!B  C  ^ 0.U H2  Ʒ 2 @B   D5 @N @N ՋC w~ v7  "  <  L ` & n , 5UP7wR BW!< @B!   4 ڳNU & # &    (U& e  W      B ڮ58EU@ 4 h 2 ~wXN 7$. & V^@   ෿U(߻ ]w  , P N8w. BUއ7ބ Bҕ  J W U ҋ ҕ   b h RZ d 5@0O"L6 LF# P  . @  N  8- ,  ī eBfff T   e0J UU 00DLWK555512  CU݇ l  & 0  ( C!w8  U&"E   ~5P˵ ŀ Հ HU -$U N57 ,R 5EP W!:U@ 5 EU P5-ʭ  5 UU5U  V f 0Z]I W!:W!=R ^5 N ް4 ҰwN W!$ ԯW!:  5  & t  NN ĝw  ت5U nN b& W!=@ RW!: HURff && v (5@^UR& #  5 5 U 5U*U5@5 @5EPE?UW" 5 ˵`7ڇUڇR ^55 U5 &  7^ ڷwEw` & f AfE (w Ί 7P Ĝ-z ( ܱl 5\E%P*E%%E%x 5E%pE%E%% A A 5Uه j5UE @٧ـ   UpE && ^ F   r f    ԟ ʟ0U @ Ě & L ެVH UUW#ŀ,5%   BUcW!(3Հ U ] lŀ ڪ 2W!+Հ  W!+ U>5U8 PU0- ȞW!(5( 5UU7 5UE > ŀR PU0 $  U W!)w|Uׇ l. ,˵ ˵@KQ˵ JыE N 8#.˵(.7˵@1Qs#ыʋ *ы   e@ f&6  ֮ $7"7 7 ׀ m  ыJ ԋ  Հ  2 ȝ  ` x7 7 ؘ ! h B  |PB0<@4 P, tփUXև  $Н]X7؇ t7 r7  "Sb V D  @ LUD D `5ӝ1  , & Bӕ ӝnX   f#P6 6> NX P57 wBe U>Շ 2Q (7 87 6 5ٞ *  > w8 ` ) R  B  P0@ٗ0 D`~ PrUԇ f |5V5N   U ^ԇ &,@@8K@BaTq rtvY.MAIN.Table of contents  dr. d/ d0, iS@AY P@`  s@@ z@s:  D zQD n\! 0 @@ @P   eot J r@ r @ OX %@ y~T@p~@rw wss@ @t;:Y;wwwwLyz j@xS @  s:  @ @r @r OX % @w J D  @@ @v vovK M@42} wK@R@8@ @R@@Rv@R}pT@8 pTpTv[q`"\qYz d};1;B;\E,\XHi}ދ޳֯֯\֯x$֯֯ׯ}گrtޯp!P$^|?Ê`ޝl!4nn!n% n+n,n.nKnKn Nn&XnHXn[n}n}nq%vQzdzxd鰼Ry  , %! |1q34|@ he~|$|(d|W*|Xj|d:|hez|D0M/|D9Mo|DM?|DM|D`Y+|DiYk|DZ-|D Zm|De;|De{|D0f,|D9fl|~d=|~he}|[M |[M(`|P|P|P|P@|P|P|P|P@|,P0|,P1|,P2|,P@3|,P4|,P5|,P6|,P@7||Q%||Q(e|S|S(X|Sp|SqY|Sx}|S}Z|Td<|The||9wW"|9wXb|x!|x(a|AyW#|AyXc| zW)| zXi| zd9| zhey|NRR RR W     7p& & ikQ & ,wE b^^Z% &?fW @W >5W E5 W ! W 8W >W EW W W W Ō  $|,e  & & @( f  e ee e f** aB f¥*W W c@ % X2&  m  f A N  %22?X.AX.   -- I/O error on output file -- I/O error on input file -- Command syntax error -- Invalid filename -- Invalid switch -- Open failure on output file -- Open failure on input file -- Command I/O error -- Command file open failure! -- Indirect command syntax error -- Indirect file depth exceeded# -- Invalid format in macro library# -- I/O error on macro library file -- Insufficient dynamic memory -- I/O error on work file -- 64K storage limit exceeded?U he`7` f` &7 ` &;?0 @`@`C e eD * ʯ 1 4 1 d 1 7Bw0w@@  ^U5e7 R~7 wԡeE& & Y.&|. bX0&0A0@ wZG/*2BpНННP pB ( Bҋ B hf.w.@  0 2 L BN %$Ԍ fw=rLw^$ % ^`Է w Fr& >4N#00 |xtww mB 7 & 0 T. ʣ@ `  8 r $7%B7%>炷 8ٮ :  & 0 # X %  , L Ԫԇ ܦ* //w֔ " 5   p 7   ܢ  4 zԇ  l.UB\.L l  ҷ  B\.d.! W T.A"%+%- ƥN5  \ 0bab b b m %.w ށ%E  jR L XD7`@@T@T@Th 1"3  e~ x t   5  > 8 4 e(#U b(J  5@  U\.r \.  U m7 7 Ѐ7 w`" 0 B $  4 $ la      b b b w6 %+%-  :0W! W  ֣Uχ w 00TLWK5555125 8 L *La L  7 w z0  V4P N4F F4& >4*LH0!0///00:Yw/M L0w ffff Z Mm e< e< eA ҕ:A ҕ:A ҕ.A 5 N f= @4HD E& c `5%E mb. Ab. ҕ   fҕ- ce%0RRRҕ- H  ҕ   4ҕ: * 5d /  / W ҕ0wrWeekday dd-mmm-yy hh:mmVnn.nna MondayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSepOctNovDecUnknown 4N# (d$tݤzìݜ+-6*R/$&.!+-"'%< ^,CLDPOTBjFrRHXxd@yuuuuXu0u !"#$%&'  @ @%+2@8>DK@QW]d@jpv}@@@@΀@(Px@h0X Hp8`(Px   @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@LI< NL<T CR EN( DS(  Jw@ H   B > w" w w EU wx wC wC w& wFC @UT> wP* %NNSRTf6  RRRRRRRRR⋇ ,H(H &   @$ 8C! z˵&ԝpEԝC >7 rD dD (\D e$ r= B n  "  Y= $@% 2= * : Č B5A(3=?  p===}?w-=r?  j D< @B@aD < $Bw D5dA< 0ҝ<@tDċ(杔< ĝ<ĵ ҕĵ@ ^ċҝe<ĵ ҝX<ҝU<Ίހ 7 <<   , ҝ8<ҝ5<ѝ0< ѝ)NҔҔҔҔu>\A%C (C -@A5@ 2AC CACAeA&mAxC  @e@5@ :NUX;@FA6>9 B D;-΋25 *;% ?"$5?F;;5?; B5?E:DM?=?:  :n: : "7 A nAV?: % H H5`?  ʕ ҕ @5@8?  ҕ D5?5?  ҕ  A : " ?: @ 5>  z :7 :7:9!EC F?7ы7 9R@ | x 797 9p@ L 5 ʕ'5@ʕG5ʕC  *  `   X9   D9 7 >97 >9 U9.9 $99Հ9 4 !& RH  .E5 8 U8 ՀU&fffff  (ʋ̋ p  R$ ^ P 7 p8db(5500\LL557i:)*  ( J8̵E єJ BR&  N 4C@   N C   E7 75  7 7wd K-7 #5E " 5Ul755@cU@Z7E@]XN BT> V> = 5;UPU@7 "5; 38 C W!.U 6W!.W!$ U6   n W!. 6U@6 p e <ş˵@ ; ;  < b j   #  8 Q  U 8 W!> w  H& L c7 6 *eeee77 l7  4    ~ `!?wR   ;5%~:6 wH  > 7 7`777 7 487 725n.5 V7  B C   7P>5[6w(997<  <  6[9 6 w (:-7 : <7@ U4 4b 777 7 X< PN ,U^,  ^,7 ^,p,V,Ef,b,  \, N J, @N ŋ 2, ,,N $ ,,  2 F <*  * .w z$  2 p .ww55 )/503 2.00-&0Э2  7/*+(+-- ++l0 F7j/    L* *  ]*@ BNB4@CDՕ  Օ   e  wfH/     */ \ j    4. * zNff v 7 **wD . w ( U) 2D  7 z1b<>C!W!^ 8N! r R1 VC D \ :1C!D! &1 UU^)+P: 7++ x H 7P) 7+f `  eE  w (b3&eZ3w  FE <3 A B` .37(3pA \wR B3! B  @` 2 B`7 2m2e22w zE R00dLhL555512 2 B ` p 2722A7~2 @ae 2 x2 `2  Z2 0 B<2 `  272h X H &1 &1&1 p 4e6(   xH 1 1 Hp 4e6(  D 2,1 䇷 J1 B17 1w1 1e)w0 7 0  jw f` T  !& fY w`T0K`5W    & D -N  N0  ` ` F XNRR "  |(r,U%R zwR&&7 >, #-%-! e@  f& CRDSENLINL ABDEILMNOPQRTUZ Page  '&1 6z 6 x64 p6" h6 `6 X6h P6b H6(H* @6() 864 064 (64l 64 648 64@ 64 64 54 54 54 54 54 54! 54! 54! 54! 54$ 54z$ 54# 54# 54X# 54$ 54" x54" p54$ h54& `54% X54p' P54L) H54j+ @54+ 854+ 054- (54L, 54p, 54(- 546, 54- 54<- 4@ 4@ 4Xd2 4X.1 4X0 4X`0 4X1 4X1 4d/ 4d0 4d2 4p/ 4p.5ew , Bv     5BwH 5  5 2  UE E U 5@*& E& & f&ËDef Ë )̋U&f &ff  $0($|kQ,33UY Y &[q$Y T 9TITISYSYTICLWKOVSӳT*f ӳSӳ00lLL557i:)*MACRO V05.05 *  7 , MAC> v  MAC>   &F.$6 nFh.8N<o Wednesday dd-mmm-yy hh:mm  Tr00tLhL555512 &[q &[q`( : (( <^L <DpLL)l^L)`^pL<LL(< L^L....t1.t4.6h3LkQSYMAC -- Errors detected: kQ gOqzw"" @PArMLENxDS                     NSY^SYLI<NLzSP@CRENDS    $ ( , 0 4 8 < @ D H L P T X \ ` d h l p t x |                               ?z (()))@) ) )))) =% R G @X @f  >/w4ffw w@2 0 BwkQ5"S /qfi /g%NL\`W N &"5@] 5U@e 5# 7\>7^:'7 H(&0# # /  0 $0 &/ | # ʣ B feB&< &f0 e  # rLbATF# J87-# .*wkQ f=1 5V T Лd @ ⢇/w ,7 P6 7,"\&(w)eHqqaaa# ABCwW!7 ~0/wZ *0 @ 5w( tNeB @ b~ d ` `/"0=0 J Lw֡8 7 0f0h g/ * w4f * 7 "& ؁ z7  X7~ "&1  (7 >8  T @2 eB B1  D  ƕ]P J%B7 5h!eH 7eH R 0 PN" /  n d ( $( V   !( B5 0 5( &5  I( 5j ]( Ze h( څ p( ΅5 E A ]( A h( R(5D( x54&(- (- -( @ ( 45 ^  ؐ@ BfEhBa @   n ҕ ҕ A  ??"eB*Ĕ`fe5@Pʝ p  B%7 7~e 5@< d wP  A t   7   f Swѕ a EU8 ҅5 x  7 n 7  j5@E~UxF  7$b UPN w&   6 P57x 5 3)b 7 l7 7 P ` t3 .N  e-  5DӤpjz^r ^   B< Fw2 7<::*,-*P" ,Z R5 @)5 Q ؁ҕ  ΁ Sɥa ҕ m %e  e e tl jd ~ҕ T jҕ Q zҕ ҕ(4 748  ҕ,) e00|LL557i:)*      4 N wR ,@&  `e# 3mf B 8Ce&&&& w   #- Cew 6 w$mw& w   J  & T!J X  w ^7@e'  D m7NTTTTf TTTT z e N h` Εew R% & @ ԕ aw(wN )wHw Ɣ @ 7h & % 2Y      Tܒ7535@| njhh  5 \ 5 N FB 2$ 2  F #` jVҕ ` ̊ҋ5@ы& R &mx  e e&N@ ( @ !R  e ee e w w       nj7 j7 d7 d`  W,@ 7D 7:4 { #      0  ~ 7  b 7 NwSY0:MACTMP*** Assembler statisticsWork file reads: Work file writes: Size of work file: Words ( Pages)Size of core pool: Operating system: Operating system: RSX-11M/M-PLUS (Under VAX/VMS) (Under RSTS/E) (Under P/OS) Elapsed time: RORWDIGBLLCLRELABSOVRCONSAV -- Internal errorSymbol table****** p) t2 X2 2 2 2 /w N5 funhj uhdB$ 0jwaw< 8 v8w &  P*AdBbAep& f  $ P aAAf@pnp :C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ pŀajTI& af* n*`V @e,w rjjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ 2DlljaCeH###33 & d8 *F++w 4 8jDl@ TeBT85l@ @( D XeB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@!) *kQSY kQ W!L +n)    )  wn ēUeBUUUUU܇ v"S` 0+NeB f) Ȓ*ȕf  8)eB$&< r# n pw.BU W!<& }  @B!00LhL555512 xN pw! -- .INCLUDE directive file error! -- .LIBRARY directive file error !N!n!!4!+>!,G!.>!8!KF!K?! NF!W!&XO!HX5![5!4!h.!i/!֯֯zdzxd ձ gskQxLB[1,1] qģD~~~*@2*#P*-f*(tIn rnnWn(n,nxKnKnMhQn3fNOqn` %2[MQQR Rwyz[-K7 l n7 7  -%?S j ! %= J  8.C`  U^ d C 7 Z f7:w:&<X7 6Y  S $  %\x 4 h%%=, \'ŝ   @ V : %, z N U X    \  7 H Ý{x    $f 2 5U ؜ ֏7 f x 8  W ϊ we/uf ԕ$ 虅7 7( f % ee0T7 \   &u | H U0  -B֯D  z   @ 8  " W!'  h  f' 7  $ 7zt` ^Z $7P z  bw䜰 ܟ  l -8-4 T.+*  NN RRRRR 7   A w  7 v  2 eBN B  ҡ # Ρ   "W!$ W!=W!: W!: ֙ׯ2.   U@ &  v 7 7  d Ɩ (p  p v5>7h ! $ D C  7:w: Ff ̉ U$ & & 7w & f   0 \    V  $ d7 T . 4 f p  Zl B   e 4l\U( 4w ʛ   wwCN d!TL  P Ҕ  7 : Z2C  R   X%A  w m u P,L( P5 @7 :7 84 7ww   "ҝ7  N N ^ĝ T mU B L 7 - Uvr l F Ŕ UX  h5 XT 7 J B ЖU@U  %$RR j %,  5w7 Lw  ) p fW"* ! ! 82C . $ 7   5* R7JU>UD ] 8 IU  ̇C ‡   N   W!$ f N Z 5@  C BW!&W!!B L C  <0.Uj    p @B   D5 @N @N ՋC wΖ v7  r  ، ܆ ` v p  | 5U߀7Jw BW!< n@B!  R 4 *NUX & # &    (U(& 쑀e  W    @ 00LL557i:)* FB *58EU@   ΕwN 7$~ & : ^@  > >N 0Ux޻ ]Rw b  | P ZN8w:.^  U*އ72 ֑Bҕ  J W U ҋ ҕ   b RZ 5@OrL F# .  D ` F  8- ,  0 FeBfff t   fe0J UU  CU܇  v j x C!w   Uv"En  b~ ΋5VP˵ ŀ Հ Un -tUZN57 |R 5EP W!:U@ }5 4EU P(5-ʭ  5 UU5U   ۪V]XI W!:W!=R 5  .4 N "wN TW!$ $W!: 扖 85  v t   NN }w  (5U N & W!=@ W!: URff v& Ƈ x|5@UR& ԉ#  5 5 U 5UzU5@5 @5EPE?UW" n5 掇 X˵`M7HڇU ڇR ^55 U5 &  7T^ |ٷw<Ew & f AfE D)w Ί 7P |- x , P5E%P*E%%E%x 5E%pE%E%% A A 5U؇ 5UE ؀   UE vz&    8 z z    $ 0U F@ z y D&  .VH UUW#ŀ|5%   ~UcW!(3ՀP U ] =ŀ4 * W!+Հ j W!+ dU>5U8 PU0- : ~W!(5( 5(UU7 5UFE > pyŀ PU0 $ Vy U ڊ W!)ẘUׇ x x. ,˵ ˵@KQ˵ JыE x x.˵.7˵@1Q#ыʋ *ы   e@ f&6  & $7r7p 7 lRր ml  ыJ * ԋ  | Հ   }  Dx` 7 7  (x 6!  B  P0@ P| ՃUՇF  $Н7(؇ t7 7 @ ܅ rSb ^ZD   UD 5ӝ1 l |  v ӕ ӝX T P #P6 6 ؅ ^NX v5f7 8we Uԇ  (7 7  5.ٞ zx  v wv  N) H   B  P0@ؗ0 D` PUӇ  55 \ X RU Ӈ &,@@8K@BaTq rtvY.MAIN.Table of contents  "/ 80 0iBS@AY P@`  s@@ z@s:  D zQD n\! 0 @@ @P   eot J r@ r @ OX %@ y~T@p~@rw wss@ @t;:Y;wwwwLyz j@xS @  s:  @ @r @r OX % @w J D  @@ @v vovK M@42} wK@R@8@ @R@@Rv@R}pT@8 pTpTv[q`"\qYz d};1;B;\EԾ\XHi}\|ʣ֯d֯֯x̾֯֯ׯ}گrޯp!P$^$?`4,l!ܾnn!n%00LhL555512n+n,n.nKnKn Nn&XnHXn[n}n}nq%ľvdQ\zdtzxd֣鰼Ry  ,l %! |ܣ1q34|@ he~|$|(d|W*|Xj|d:|hez|D0M/|D9Mo|DM?|DM|D`Y+|DiYk|DZ-|D Zm|De;|De{|D0f,|D9fl|~d=|~he}|[M |[M(`|P|P|P|P@|P|P|P|P@|,P0|,P1|,P2|,P@3|,P4|,P5|,P6|,P@7||Q%||Q(e|S|S(X|Sp|SqY|Sx}|S}Z|Td<|The||9wW"|9wXb|x!|x(a|AyW#|AyXc| zW)| zXi| zd9| zhey|LNRR RR W \    7<p& & ikQ & ,w x^% &?fW @W >5W E5 W ! W 8W >W EW W W W Ō  $|,e  & & @( f  e ee e f** adB ¥*W W c@ % 63&  m  f A N  %h3h3?.A.   -- I/O error on output file -- I/O error on input file -- Command syntax error -- Invalid filename -- Invalid switch -- Open failure on output file -- Open failure on input file -- Command I/O error -- Command file open failure! -- Indirect command syntax error -- Indirect file depth exceeded# -- Invalid format in macro library# -- I/O error on macro library file -- Insufficient dynamic memory -- I/O error on work file -- 64K storage limit exceeded?\U2t Ȃe`7Z` f` &7 ` V;?0 OJ@`A@` 2e eD   1 4 1 d 1 7w0wr@  U5e7 R~7 6w4eE& & Y /&/ bX000@ wZ/2BpНННP pB (< Bҋ B hfw(/@  0 2 |zp rN %$ qwլwp$ % 8ھ4ӷ w ^"' #00 |xtw.w (mB 7 & 0 hT *@   8 r 47%7%炷 Tپ   & 0 |# X % X  L TԪNԇ <* 0^0w6t L"  5   7   < 삷  bӇ  /U.L s  zѷ v Xs./! W .A"%+%- &N00LL557i:)*5  \ 0bab b b m %.w ށ%E  ʄ w7`@@T@T@Th 1"3  e~ x t   5  > 8 4 e(#U^ b(J  5@,  U.r .  U m7 $7 Ѐ7$ w" 0 B $  4 $ la      b b b wq \%+%- @ 0W! W  6UXχ tw 5 8 L *La L ^q  肷 & b7 &"w ڂ0    ' >+0000000:Yw/M v0wu ffff Z Mm e< e< eA ҕ:A ҕ:A ҕ.A 5jN f= @4HD E& c `5%E m/ A/ Vtҕ   fҕ- ce0RRRҕ- H x ҕ   4ҕ: * 5 n0 s 0 s W ҕ0w҃Weekday dd-mmm-yy hh:mmVnn.nna MondayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSepOctNovDecUnknown # (Կ̿̽$z,+ݩ-6*R/$&.!Ш+-"'%< ^,CLDPOTBjFrRHXxd@yuuuuXu0u !"#$%&'  @ @%+2@8>DK@QW]d@jpv}@@@@΀@(Px@h0X Hp8`(Px   @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@LI< NL<T CR EN( DS( F w` H   B ^ w w, w EU w  wC wC w wFc `UT^ w* %NNSRTf6  RRRRRRRRR⋇ ,h(h T&  r `$ 8c! z˵&ԝpeԝc >7 rd dd (\d e$ r] b n  "  Y] $`% 2] * : Č b5a(3]_  p]]]}_w-]r_  j D\ @b@ad \ $bw d5da\ 0ҝ\@tdċ(杔\ ĝ\ĵ ҕĵ@ ^ċҝe\ĵ ҝX\ҝU\Ίހ 7 <\   , ҝ8\ҝ5\ѝ0\ ѝ)\wa wa(\$\^NҔҔҔҔu^\a%c (c -@a5` 2ac cacaea&maxc  `e`5` :NUX[`Fa6^9 b D[-΋25 *[% _"$5_F[[5_[ b5_EZDM_=_Z  ZnZ Z "7 a naV?Z % H H5`_  ʕ ҕ @5@8_  ҕ D5_5_  00LhL555512ҕ  a Z " ?Z ` 5^  z Z7 Z7ZY!Ec F_7ы7 YR@ | x 7Y7 Yp` L 5 ʕ'5@ʕG5ʕC  *  `   XY   DY 7 >Y7 >Y UY.Y $YYՀY 4 !& RH  .E5 X UX ՀU&fffff  (ʋ̋ p  R$ ^ P 7 pXdb(55  ( JX̵E єJ BR&  N 4c@   N c   E7 W5  W Wwd K-W #5E " 5UlW55@cU@ZWE@]XN BT^ V^ ] 5[UPU@W "5[ 3X C W!.U VW!.W!$ UV   n W!. 6U@V p e \ş˵@ [ [  < b j   #  8 Q  U 8 W!> w  H& L c7 V *eeeeWW lW  4    ~ `!_w@R   [5%~Z6 wH  > W 7`WW7 W 4X7 W2Un.U VW  B C   7P>U[Vw(YY7\  \  V[Y V pw (Z-W Z  SS@RSRSR@RRR fA5 W(ʕ R fA5 rW# eʕ Jҋ A @ 9eU YYYX ĝX7 X ]+ T(^]TfW TH T  Tҕ-T  B b  BR ?  N ^ pY  dY 7 |Q~QxQT  S S  @ :wS 7"LQ (7S&7N ,U^L  ^L7 ^LpLVLEfLbL  \L N JL @N ŋ 2L ,LN $ LL  2 <*  * K/w z$  2 p ./wwUU )O5P3 2N0P-&PЭR  7O*K(KMM KKlP F7jO    LJ J  ]J@ BNB4@CDՕ  Օ   e  wfHO     *O \00LL557i:)* j    4N * zNff  7 JJw N w ( UI 2D  7 zQb<>C!W!^ 8N! r RQ VC D \ :QC!D! &Q UU^IKP: 7KK x H 7PI 7Kf `  eE  w tbS&eZSw b FE L #-%M! e@  f& CRDSʣENdLINLУ ABDEILMNOPQRTUZ Page  '&1 V: V($ xV(0 pV( hV( `V:( XV:$ PV:, HV: @V(8 8V( 0V^* (V^ V: V(H V^ V(| V^ U^@ U:p U:t U^ U^ U^! U:` U(X U: U(L U(< U* U** U< U U xUz pU hU `U XU PU HU @U 8UP 0U (U\" U0" U" Ut" UH% U*% T# Tf$ T$ T2% T<# T:# Tz% T' T& T ( T) T, TN, T, T- T, xT - pT- hT, `TP. XT- PT\ HT~ @T( 8T3 0T1 (T 1 T1 Tt2 TX2 T0 T0 S2 S:0 S/5ew , Bv     5Bwn 50  (r- DUt-E D  E E ܁&wpE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &ff |oQ, Y 2"SYSYSYSYTICLz0zVxSYSYSYSYTICL(w0oQ|00LhL5555120MAG - Get Command Line failureMAG - Syntax errorMAG - Invalid device or unitMAG - Device not mounted or mounted foreignMAG - Privilege violationMAG - Operation is only valid for unlabeled tapesMAG - Operation is only valid for ansi tapesMAG - Illegal switch valueMAG - Required executive support missingMAG - Fatal I/O device errorMAG - Fatal directive errorMAG - Illegal file attributes combinationMAG - Illegal combination of switchesMAG - Requested operation inconsistent with tape state'< MAG>P*D$&0 b `w& & &  z& & & Ε fhd  & & &  & & & Ε < w\ > wN& & &  & & & Ε wo@ 65 Ae   ! D BA0u` 0ff &a(B0`B EeB `B EeB ` Ae Q I uAe!a a Q Q  fͥ" ̋&   @  % ff&QE e @ `NA`c<2. wՀ,ŀ(@ L @   @U@   u G   53 : ~̋    p  6݇u    5 & 5  5  56   AAaf ΊP   @ P  6 w ̋ xe%  @ Хȥ   AA wAf f`E  5 _Х*  BC  5 T   f : azE  + $& .! _0 7 9A  F Z5  ע ע  " 6 POS=X0000 %'g> 5 5 %55 nj`ƢX+T55   ,1( ;,5 , 5 E 5w5@  ࣴ)5- ࣐)-tz)v 5PJ5@@5 65$.5@05  IEw65"E#?p e4  eev w5w#5E-w5E-wE-w.v6r jJ5G .T# ȕR5ȕ0 * " <8  J Tlţw 5 funhj uhdB$ 0jwaw< 8 v8w &  p*AdBbAep& f  D P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp Z5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *pDw  8jDl@ TeBT85l@00LL557i:)* 0@( D eB& L & @# `& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@&f& v (SETBSCCRSINITIALIZEREWINDPOSEOFEOTEOVFORTRANLISTNONE 0ҳ. 0 ҳ!0. 0 +- Ҧ# ئij``. +- Ҧ# <3R 2`h`ij:/: Al2RD 2RGn@2RJ2R޴U2R2\r2R`2R2d2R2h2R2:=*2:=m8R2u8R2z2=:" x2" 8" 82} A>} 7}t%.BevJ az" #$@C %vAJ  ~ u '&15ew , Bv     5Bw f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ ( WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e8-A D- E %     U EU 5  5U  ؿصE U *5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f &  m  f A N  %w @ *8I , *=)98 eB &&  U **e *Nlv ΋*.2 .  & #!)&00LhL555512eP(e && >e >E p* w eB  8 $&w  *(5<s1  U U@  R f&" p )'&M'&&**%*%0 *&* *5ND  <  EU   w *D x  ww ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff $ p &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( 6 *O*)@#0l @# 02ȕ8 H 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ B& & Pe# eB&B B *  eBe>  # #D #=0/H#@&0 # = e0   v0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w  ) 8C * ) *wp*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w  C#   D @)  6?0D)w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >&ff w ) * * wd46l082e&( H0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E & v (.8Ae f"( UCɗ&+(e$&% **(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w 0 /$ ,:T < U@% DD%][%><w  wR 1  %,,:4 w l*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce   &*w t*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce . e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D`  *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք    00LL557i:)*  Օ w `BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wr141612epl2l0p $Mw<   f >5>Eu   e6p 4 8 X 81416  N t (  ^ f B&* D*> =00l&8el2 0 *w eE D` bl lrw b  B eE"s    s-  CslW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w *) l0, *) $ )*)0,40,6 8  **  DP5R RRR f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ =D \ `p46 f x64/=  @) 0  8wt 46 8 e*w: w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 8e2 ..8em,0l0!D0e6p 4.) &f .  e) .  e6p 4 08*w<=p!Օ^(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@,*1 4U8UMw@ w HB 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ ~wnw  ) ^ 4 fU D%  BA `6p 4p`4 %60 40,0, f 톇,, w      .% v eB U5UU f plp & NeՀ)*TPNUMBQ|z:d YTISYSYSY00LhL555512<0NTISYSYSYU0<|Q0``brv*0j26@DFHprtvz  4$&BFLVX^`bdpr46BF>< 7  RRRRx/ .5!62B$%e   U %V   6w$ 7 7 we7DQ: Fwk [qr'Uqv ,4F l [a'VNE`:dIqLqswyjz4};}u~,K d4y:Tqwxy y'+4CYZ7 >Q`$'5\ ׭N E 58ܥEm 6  7H%UX 2#,<5 &:5,mU wvQ| K|5 5w w w55 55 ,h xE5U@D5zZ T U5w-UЪ-(4   @5& \?X5L/D W5'R5(?$ N %|?777 ,x5 @5 5@E@U 5Pw @ :D w" m @m x7 5w 7U wrnDEm5@55oܡ   5 d 5f5 \e `e ~5 ӕӕ[e 2 ڡ)%& +5` 7 ڡ) 7 x &? mJ %    t ^ f ? xRe Zfm4  ` ` 5 Ф~f5K  - 5j55 ߕ w5 5g- ȕ $UV5— t%-7 & ˥;=W"&΋v+W 0W-"W W W W!N  WaWz P t  wȕ  `   JbU@v^Pȥ@UdU ^gwL¥ U D¥ ¥¥/U*AZ僗09߃@ U%2%_M2wUȥA CC Uȥ/U5 p5Ue V @eNWt.7 * j7@% ί2 2 & 2 eU00LL557i:)*ҔB~ҕ +34JKRS[bdj}""_M~Wx|Q|f4|XR)|Nz_Mdx|f|v q|Z|ʡQ|¡z#_7 7 n l{ wx5%UqP[Lwf7 D bwX5p  7, 7,5 l,-vH5 wwwwww-'X5 %|%w@&55 އUU U &@ pw5@&55@&  E@w0w2w"www@&555 155 w w,w,5 55 `-wn U ,IC,IP,IS57|tF6vEβܡ   TLڡl 27l(rf@ f@N,F hC|-  2E2&E  %5 0A&5&5  @,A1 ~ t@*  ,4,e7-5$ E $ D56e 5@ d,@  Z$@$5& @W,VT  Ve%Wt 5'De@ ffB, E@@ v j5v @$ ?"?"w"@f& 25w^@&Uf1 1 f&,A @  p &@ ,p wH5 n "R,Le  w6w>w6w:w5@w5 U@EE $& ,  EE@!@-  ,!-  55 l5&@ 7 ?"F?">7  w. W( RV5  ?0  ?;A5@5 2 /- v5)f1 <U 55 E1@wwww~wf *ķ U:?I1& &$ hև D0w : 6 2 . * & "        Eww5w` ?55 @,bw   / -~js jXj?XN?  ,j 5rEe?Wt "@e 0@e 0@e, 05@e@ 05@mZ 0E0U60v-XfU~'D ', $ EE@!@-   ! - 0*"f. %"  B& 1&p(pp(e 5@p2"  7,H7,B @"A L^&@ e xe T^tX 5&7,"@A 501,""1,$$U0 , &T $ %(e # J Հ x $ &.b\$ /fe ??ŀ.CLICPUDZ11GENIOLUNLUNSMCR...POOLSECTIUIC32K(W,VT w7ID p :<7Е N?[PW Q Е Е-Е-Е &  ܡ@  @ ڡ+<'& +F'5 R7 RڡB@) n7 . bw F  <  ѥ ɥ ɋ WAWZ nfʋR ҋ |||Ŀ/REG/RONUqv'[qkr@7 z #  Vȥ/  S x S Cd$R w|@d{ʾܾZ dwTZ @e_ 0 w /  ȥ xHw&ɋ ~W f| PMDTERM@|@S6v( /7 f7 7 @ ȥ DХ/ w x 00LhL555512eыɋ<\\T%  ¥=: ¥=x t )5&w    w5  t%kjcfw 7,ULwAAq w w 5 w-ww-wz5 +w5www-ZڡwwbT-T- w8 5@<w"  ~w5 lw75Z 55 5 W-| + Pb (A^ 5@`@AeE&5 e ߇Jrw4=  1 \ W  wn~W,\׭>߅Eh.w$ @%rLE555  + U&ncJ_a7 & &  " % ,| s 6 -,5(- dQtlw ^ ^A,* E& 5(?>  5ݎ` ݃   dwX&7`zmt 2݀mj &- p7 l U -׭U ttA7 5   S  5L 7: E ;& # # @7 P  N s v| Z b X 5 7 % %6& ɋ=     4.1& F b5pΥ: Υ ΥΥ/Υ   X ^  m 5 $   Q3+ HA  톃<" 2-B |"rr l vR 3 W s:    @\0  ZlE%? Bte9Ee0P  @ @ASSIGNDCLDEASSIGNDELETEHOLDINITIALIZERELEASESETSHOWSTARTSTOPw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA @EAa$ w N ť ť 0B Aa & & @( f  e ee e  5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&f  r y,,:Y Ksw~Wz@}r|AK":)_spe^_z}:)M:pe"p;}D`p:z}:`:""`a\gr:)K";}D`;;}D +};}D`se;}D`zd;}DM̖;}Dv2OG:@;}D`';}DH:d|~:? }WLH!;}D +<YgfK+d@: Lq;""`_N`FXz}_XN`FXz}% :""`YVNvVNm}%w@fRKq}_sp{Lv~+"Y>@:) ?#`_A!h~Lq;""`;}G:4}Kvsw~W)-!r{YWsw~WAy=YL;! S@g h[ z:d|~:v8?}"q:K:)8:d|~:4Iq #y8? }WLH!_Ma}f] _t@8ez8^i'HX`f] o8Yk~%S? }WLH!;}D8 YIqyY-ZEy. 9=^yp`p:z}Tx~rK"w:?}Ѕ`,:Y Ky&XSd99:;}DH`YYeT]y&X@}R Y(&$y@84[Me Oq:jWSWM̖Oq:jWSW`'xo@;}D`;f&"q:Kw_`Usw~W~`H S99SM!Zo}RA"}C vp_`[qap:=vKw_) _,9^w~W;}DpYU̖,:Y Kw^[qaz}4Iq #yQEQp%{L4Iqfw}Avy)}%rWv;}D`ChL8"Y+ }K"]vv[@;}DpYU\C^YSE˖iH%S00LL557i:)*m[q%rW/U, W{y8L:v8_y@Q%T8w~W˖iHYM%T8w~W˖iHYv_Ay%Sv[@YvmHqUq`%rW:)_tv1 RKqjMe^ };htE`p:%:Y[S`"k4}rST"q:K,:Y Kw% Nf}w~We^Yf}w~Wd99'6F9E*_sp.`}R ZZ r}R Y, W:y@D `"`%:(_Yq8"_M8KM fsVNv` !:eUw;}DoQIv%!}qQWP$ i;_]v`|Q #yX_qQWP$ i;_Yt%)NXX,QXE~pysw~W`,L;vMy?}%K/4[Me y&-ZQj]pw:Ya 2W!htp:qQWP$ i;_;}Dpa _p:fv%]w::C~`"u:%rW9d:) ^1R:);htEy.8w~W:)%:1REy.8w~W:)%:9dEy.8w~W:)%:us_Ey.8w~W:) ^1R!;K}XQ|4Iq:4}Kw_gY4oM;}D`p:R`Oq:? }WW!ht (0 DT`jr| " 6@FR f z &2>B \j  <JTbl  " 6 L ` t  4>F \j ~   & @ Tpz   ,< V p .J b |  ,|Q,+AY ̤NTICLSYTITICLOVBDT^`p|2xzl (ee& 4e etepeUv dh?HZXRA$HlBd7\772 fxߥ25& ?e 5JJ ?f p?e500LhL555512 E&@  j  _TLD >o5AA*$o5    @ @'&1&wLw ,D B A, ,5eaE5 EE f & & 1     &w*5  5U ৊ԦE U *5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&ff  zrtĨz0a Ԩ""0ay0a0a40a DF 0a\$W 0a!\@ 4X 0a(\ Y 0a- Tp0a2 dl 0a9Xtu~0a<0aID;}0aU@s0aYds0a[ ĩE`0abԩ4y0agDĩRy0aiDĩy0aqD ĩz0awDĩw0aD0ĩ$z0aD$ĩԩz0aPD0aTjz0atda'0adt0a ,0aVN0a 0al ,F l F F a'VN:dsw4}l ;}u~44[E`E`IqLq4yjzspy+C)7 7 ƫ׭6^E  he2775m27ȫW W ]R ʕ w-ƫOȫT$ w  AZ󃗠09wZ  l j ` 5 w4PPPT X Pw   7wJ e w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA pEAa$&3&f CLICPUDZ11GENIOLUNLUNSMCR...POOLSECTIUIC32KW,VT w7-( p @Bh7Е ?[PW Q LЕ Е-Е-Е & 4  @  @ +'& +'5 $7 $) 7 hw F  <  ѥ ɥ ɋ WAWZ ܪfʋR ҋ _a & & @( |f  e ee e r y,,:Y Ksw~Wz@}r|AK":)_spe^_z}:)M:pe"p;}D`p:z}:`:""`a\gr:)K";}D`;;}D +};}D`se;}D`zd;}DM̖;}Dv2OG:@;}D`';}DH:d|~:? }WLH!;}D +<YgfK+d@: Lq;""`_N`FXz}_XN`FXz}% :""`YVNvVNm}%w@fRKq}_sp{Lv~+"Y>@:) ?#`_A!h~Lq;""`;}G:4}Kvsw~W)-!r{YWsw~WAy=YL;! S@g h[ z:d|~:v8?}"q:K:)8:d|~:4Iq #y8? }WLH!_Ma}f] _t@8ez8^i'HX`f] o8Yk~%S? }WLH!;}D8 YIqyY-ZEy. 9=^yp`p:z}Tx~rK"w:?}Ѕ`,:Y Ky&XSd99:;}DH`YYeT]y&X@}R Y(&$y@84[Me Oq:jWSWM̖Oq:jWSW`'xo@;}D`;f&"q:Kw_`Usw~W~`H S99SM!Zo}RA"}C vp_`[qap:=vKw_) _,9^w~W;}DpYU̖,:Y Kw^[qaz}4Iq #yQEQp%{L4Iqfw}Avy)}%rWv;}D`ChL8"Y+ }K"]vv[@;}DpYU\C^YSE˖iH%Sm[q%rW/U, W{y8L:v8_y@Q%T8w~W˖iHYM%T8w~W˖iHYv_Ay%Sv[@YvmHqUq`%rW:)_tv1 RKqjMe^ };htE`p:%:Y[S`"k4}rST"q:K,:Y Kw% Nf}w~We^Yf}w~Wd99'6F9E*_sp.`}R ZZ r}R Y, W:y@D `"`%:(_Yq8"_M8KM fsVNv` !:eUw;}DoQIv%!}qQWP$ i;_]v`|Q #yX_qQWP$ i;_Yt%)NXX,QXE~pysw~W`,L;vMy?}%K/4[Me y&-ZQj]pw:Ya 2W!htp:qQWP$ i;_;}Dpa _p:fv%]w::C~`"u:%rW9d:) ^1R:);htEy.8w~W:)%:1REy.8w~W:)%:9dEy.8w~W:)%:us_Ey.8w~W:) ^1R!;K}XQ|4Iq:4}Kw_gY4oM;}D`p:R`Oq:? }WW!ht&.6 JZfpx̭֭ޭ ( <FLX l  ®Үڮ,8DH bp ʯԯ  $BPZhr° ڰ ( < R f z ȱ ڱ :DL bp  Ʋ ڲ  , F Zv Ƴ  2B \ vִ 4P h  ҵ &2@O  ҕ B & & Rf& ΕwTASKSSTATUS: OUTCKPCKR-CHKFXDCAFLIONSFCOMLFRPERNWBDELCHEPICRONDRVLDD7 @ r  %  U zM/  *R  ,@  6wJw| v8 X Vއ f46A TA NЕ Е A Е AЕ  Е  \A A " tpЕ A A AЕ Е Е  >  <  ww<4 &7 n5 w-*w-&SSSBSS 7 A ( BB AEx &  Е   7ɋP&B     w f(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA 4EAa$ & & @( f  e ee e  5 ߥ& *  + 23E Ew Z   Е-   0@A tW e`fÊ    E &f 00MhL555512̪ >U)&PRIRPRITERM= @Bj7 h¥ w <% % U  M /7  v  h ^ԇ l = w ¥/ * 8¥ w -8  Fw 5m7,i 5b _D5w>,pTN  p 1r@&5  e (  wzwvrª h-Sw\ ww&B )  5 vwp%  . V   w*2A5@ @ 8 : wt,VT`S =i  d_,VTMKJ  P%TI85 0@%TI.0 5@ !5 A@  tw f b ^ Z V R N J FB74    -VT 5 j  m  E,VT5 4 *wp )8>A7w w, 7 5|5 0 05@+1 5LBf@ lE7f h 569    >41& F b5Υ: Υ ΥΥ/Υ   X> ^  m5N$ P N Q3+A  \톃<" 2-B"rr l v 3 W s:LocalGlobalLoginFinalGroup)0+&AqrY U@X 5tuwX 5\W 7 P7l2 B-:P1)-P1  w  ť ť 0B Aaf& ͥ`̋  @  % ff&QE eN w `NA`c<2. wՀ,ŀ(@ L @   HU@ (  u G   53 : ̋    t  6݇u    5 & 5  5  56   AAaf ΊP   @ P   6 w ̋ xe%  @00 ML557i:)* Хȥ   AA wAf f`E  5 _Х*  BC  5 T   f : azE  + $& .! _0 7 9A  F Z5  ע ע  5 @Ae   A D BA0u` 0ff &a(B0`B EeB `B EeB ` Ae Q I uAeAa a Q Q  洊. !洊. +- ,# 2``. +- ,# H &f TPNUMB(AS1ST vRAS2ST ֵ`@8B  $ ffv&vu5 8 5F'5>%"52 516,5 55!:C wwwwwM5,TIp5/X5 5Ce : X 5u 55  t5t5  d `w>5NwB2@) p-ppp-  p ^f1 n R  L G h5 ;D%VT1  P@ 4 * 5@4 5@( &&f5@f& N` PZ  ^ 7@U &f@P~ACCmBW W W" C W" PW= W/ W W  R CCuB  W-R  C  RW"W"  ffaz 8Wt7  ?0eCf r5  5z5xv  p& )r ?f &&f& v ALLGBLSYSTEMLOGINGRPFINALTERM= = ^a a  ʽ! V`/ bbҽ WfbҽWjbҽWqbҽWwbҽWz{bҽWbҽWda ⽀=a f = ິja 2  R! F!`fؾ R!4 F!`歖 R!4 F!`歰 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E xAnww0  w 7 78 X  4,7  5  Z!- F : .  "  .w.w7 @,BEA : C $ @ $r eW >  b `&f?wH W-$9 O/ J! B ? fEEee E @L+f&& e f?beV C  ` &f&f d5Z  rɥ* ы D$"ɥ*ɥ% CaDSыɥ%SѤ   (ѥ*~ wZVReL-FF ͭPk%N(System Logical Table)%N%N(Group %O Logical Table)%N%N(Session Login Logical Table for %2A%O:)%N%N(Session Local Logical Table for %2A%O:)%N%5S"%VA"%N%VS=%3S"%VA"%SFinalType=%O,l R&f  O~4$ҝh w ZҝI w`Е[.  w`n %Е,B$ Pw`6 %Е]`"7 n , &  &  B~  &f$-fP^ lE@& ` DP vw\J ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥% 00ML557i:)* B&ХVA C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf l & eN6& e:/& ex*AHŀ ȕ Е Е Е & e & eЕ A %& eA R Е A bEA EЕ A A   $Е.  AЕ; >    w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   Bw x' UD$BA :&( U BQ Е*  & & @( @f  e ee e  5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E &   `@ ` B   & A @    )A@ .w85   BU 8M w w 4Uw w eC N ^Y,VTSs8 O55 Hn5$ $ @F 7D   5 !5"ȫ ! 8M" .uw: w~w~   , p!<H e>D5@ ew  l55  0 zv05|v ww5@Z )d %,% Kf  Uz?vF3e&@ S D& "& j0?,wN% f  $U?G3e&@ S & "& ?w6%& w& ^.  R¥8¥9\4Ұ1& F b5Υ: Υ ΥΥ/Υ   X\ ^  m50$ 2 0 Q3+|A  >톃<" 2-B"rr l vx 3 W s: A7 5   pS  f 5L 7l E ;& ر# # @7 p ӱұ N s | Z  5 7 %v %6@0  lE%? Bte9Ee0P w Z(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w  ť ť 0B Aa 5 ߥ& *  + 23E Ew Z   Е-   0@A &W e`fÊ    E &f (80 Status: Pri - Dpri - TI - IOC - BIO - Eflg - PS - PC - Regs 0-6 None Parent task name - Blcnt - -EXERDNMSGCIPRUNRSWBLKCKRASTDST-CHKREXSEFSIOHLTABOSTPASTPSPNASPNWFRAWFRACP-PMDREMPRVMCRSLVCLIRSTNSDCALROVNETMPCCMDGFLDFBFMPMUTLDDPROPRVDDSPSNCOUTCKPXHRFXDCAFALLTERM=7 7 @ ]¥/ w K  %  p U f M Hކ 500$MhL555512Aq w V7,X7,R  7H& 74 . 5  ` 8  )  @6 ) wwBA  A  |CЕ Е( Е) ՇAw` ȕ 5+fA A A A ȕ0Е-A 8 ȕ0 AE  Е.ê AE Е.   2 BA E* 0A &A Aw E f( N  ŇTͪ 0C $ ֪ A JЕ.ߪ A 6Е. A A 5@%5! A f w( A J A 8  Z  zA ,A & 8Շ w Е & Е   ^7\J )NnɋP   57   "Z6  A6 &*' 5  !< &η ~ η  41& F b5Υ: Υ ΥΥ/Υ   X> ^  m5N$ P N Q3+A  \톃<" 2-B"rr l v 3 W s: A7 5   S  5L 7 E ;& # # @7 p  N s (| Z  5 7 % %6@0  lE%? Bte9Ee0P Nw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w : ť ť 0B Aa & & @( f  e ee e &f& v  5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f jJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC7 @ȥ w5 @ 5@ & b ¥/ w Lw ¥/  ¥- ¥: ¥  & =TT w+www5'Ux u¥/       u¥ ¥ 5+UĪ ! Х-       4u¥ ¥ 5JUB5  u¥ ¥ ¥:  u ¥ ¥ =wJAe Е A  ww&6%SYwȥ ХNȥ ХCȥ iWtR 7 ?X & *, Z? &7< e, & =ww eĪPPP  ( )& ʋ  ҋ       JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC w  ť ť 00,ML557i:)*0B Aaw D&& bЕ- eaePPPЕ-$w PD  &Е. ce H Е:   B&f  5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E FMountedMarked for dismountOffline- PrivatePublic- Logged in ForeignLoadedUnloadedSpooledNowriteLabel= Type=unknown Cached Overlapped_Seeks Seek_Optimization=C-ScanNearestElevatorOddEvenLOG p>.B Not logged in CLI = MCR BUF = HFILL = SPEED=( LINES = OWNER = none TERM = Loaded Unloaded CHAR_LENGTH = PARITY = NOPARITYPRIVCRTFDXHOLDSLAVEVFILLRPAREMOTEEBCHHTLOWERESCECHOTYPEAHEADCTRLCAVOANSIDECEDITREGISSOFTBLKMODSERIALHSYNCFORMWRAPBROABAUDPASTHRUTTSYNCPRINTER_PORTunknownASR33KSR33ASR35LA30SLA30PLA36VT05BVT50VT52VT55VT61LA180SVT100LA120scriptLA12LA100LA34LA38VT101VT102VT105VT125VT131VT132LA50PC3xxVT2xxLN03DTC01LA210LQP03LQP02LQP01LA75LA2xxƭ˭Э׭ݭ #QK(.49?EW\gfA )$( ! ' 457 XSRTUVY" ZB?d~oN ڬ߬[ ` $*.37¥/ 377Х:  !) wrvÍ.%TIxVv B w8 jw, @ d )vw& wED  BC  -w5w5 55 w Е 5@%HTe. % ДB~ Е ` 5 d5wB5E5 AЕ 7Е[ : !  Е,  Е]e Е  Е[7z p Е, b Е]& ᪂5w*5wVڪ  Е ЪЕ Ȫ"mA 55x< 5@ Е 5>  Е b&5 T5P@  Е  2A@=5 63, , )Е  Д  55@eЕ   Д  5@ 5Е   dw  F5@5 w. - v) v6 6 @Е , (Kmp5@0mfɵ*-Е F mF5Z Е:E bЕ. m5iam5 5 -`Е 4 b H @   wwDmw &) Tw7)" wPɋ  &B ĵn v ~E  B-S E^E 5@) v  v v6 6    $ ,5)|m|A` [ ] , ݧ %   ~ѕ ~v5`m&d 6 N : ! Е, Е]eЕ    Е  6 Е Е Е  Е НЕ.Е ̫P~ 5L5 8Е 7Е[ : !  Е,  Е]e Е  Е[7 Е, Е] F tЕ Ȫ ` >U T7 F7 D  $  _   c   x Е.m  ݽe0P&5 .5@ *x  004MhL555512 , y w  |Е:A pЕ) HB> d F # Е. . %  Ab 5     Ь Ŭ rv jf  i   >W-  J w< jЕ W 'ЕNЕOA 2   w7w)w7 -E |& & & +-fE׭v . * < !(&  wTASK DEVICEDRIVERRO COMRW COMMAIN CPU SEC POOL[]<>8  0  w w @v wLfA A  A $Е ¥/  8 d\w\ Ԫ %  U U ¥/ ߇Ҫ  5  7ڪ w7h D. ~ 8 . ƪ  )B 6@z   hw7 ^w^A A Е ,@F HA A] w ƪw 8 ) % %Е Е Е Е Е Е Е   Е A A Е AW cЕ W Е  RЕ.Е A•05$55p 5 558 ȕ0Е 5@ªД C \ Е-AՋEA ~ xA A BAA B EU0A V Е 55@Pɋe@7")n bwA A A BEU0| wn7 h) Ҫ  257   "  C d5 D !-4$ L500 5L 7D E ;& # # @7 2  XN Rs | Z  5 7 %N %6w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w > ť ť 0B Aa & & @( f  e ee e &f& v 00DMhL555512  5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f TSMH'DRSIUICESTYESNOINS/RUN=REM |:8  @8 ww Nu Du /å å å/$Cn  W-|W-kå å å/wr5 5Z ȥȥ ȥ/ wR6eϪ ,Be Cb*me Ӫ ѝJeުw-Sw-Swwp T7 r5w h5  w @ 5xA1&mA& Br7("6ć 7 E/T  w Pw:0.9+ %$ >8:W e UW ; ¥:  |UW ;www   B 񋪪wu "Ī w ևمe ҇  Ʌ5.&P A|7p A j [i T5u\wK¥,L 5pu?ȮwH^.¥]/@5 5.r-,5  &w* 7, P  w̪ Ȫ x fV] w lU  󋪪Üʋ& <.  0¥8¥9& ɋ=     @l0  $lE%? Bte9Ee0P w Z(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA tEAa$ w  ť ť 0B ,Aa 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f  +DO    ( 6 iw,w @@] w2    @5 mA lp5Uw Bwwu P    mAí$ m u`u 5`Ce    m mg%  fu`u 5` #   rw8 Tm i5b75^5 AHD<AUC 5m \ 5l+)5b B 0 x5< m |^m f p w 7V n wL88 V5@5  & f  m0& v 6`NA B  u 5 BA u5P f54  55 00LML557i:)*2& ^*@>\%/."'ABCDEFHJKLMNPRSTTASKREGKNLDRVKNLIKNLDAFFCPUTASKDTASKI J0LMNS @ 0 *, P)7 7 w . nw, *w$wbw wlw0¥/ 7 7  F h x  l ޅw \ օu P Ѕw@ @ ȅw 0 H &   / ww5wwwCPנAנDA쁃 m >w 4w7,wv5Z w^/w wJw7  8 (5 t 7"w507 &5p5\7&pp5b&6Х:` \ ,57 ( ;D6 8= x:ԭ ,3,75 5w4 n j f b ^ Z V R N J Fww.8  jw5o55h 25a HЕ & XЕ/ <Е &t@$p IdVhPd 9k 1\0`K7 7 >7 tew w@ +   w`7 @ , ( $     7w  |tƯƯxEw wew ) \w  7 nV7  ew w` w  ȥw E Е  ݎ xЕ w % ws¥ w  W wwTPwȥ6 Е w wwȥ Е w` Vwrwvȥ  Е w< ,wNwRȥННЕ w707-w,ȥНЕ & @ w~7 w( 7  P wh7 NhX ~wxf5z A 5f5\   w4@ @ @ @ @ EBEwE? ׭llE%  Xx5t 5  gwXP  wmBFU:2   *wwl B $     e *  vwl@ ,@ FBUN bDZe B   +-w Z07) %Vjb w w ƪ ̋ƪ ¥ ¥ EvjE?   `\X 7 ZХ[+ N ¥CХP! <֪ɋB֪ B P¥,¥] ¥UХB |"!54  6-.K-&K V MNFN>hW,TT+ Dr C`5 -JO - w<Pw DEE  D E C   ECE E  E C &   e0А  D E C    1 07 EI q   P & ɋ=     w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA bEAa$ w  ť ť 0B Aa & & @( f  e ee e  5 ߥ& *  + 23E Ew Z   Е-   0@A fW e`fÊ    E &f PARITYPARSPEEDUICPUCBUFPOOLWCHKPUBSYSUICLIBUICMAXPKTMAXEXTLOGONCLIDCLMCRCOLOGOVLPVTLOGONSLAVEPRIVLOWERCRTESCSEQHOLDREMOTELINESWRAPVFILLHFILLFORMFEEDTYPEAHEADECHOFDXEBCRPAHHTTERMTOPMAINNETUICOPTBROABAUDPASTHRUTTSYNCSERIALSECPOLRNDCRNDHRNDLSWPCSWPRPLCTLCEXCRASH_DEVICECRASHDEVPASSWORDCTRLCAVOANSIDECEDITREGISSOFTBLKMODINQUIREHSYNCHOSTDEFNAMEDDPROPRINTER_PORTCACHECHAR_LENGTHASR33KSR33ASR35LA30SLA30PLA36VT05BVT50VT52VT55VT61L00TMhL555512A180SLA120VT100LA12LA100LA34LA38VT101VT102VT105VT125VT131VT132LA50PC3XXVT2XXLN03DTC01LA210LQP03LQP02LQP01LA75LA2XXQ() $! '475B?fdAXSRTUVY"Zgj   !"#$ !"#$%&'()+-./789;=>?AHIQefghiklmnop~  pޮ ޮʮRyF7 DP772 xD . * & "        " Z7 t7nwnɋP     7)7 @   0   wP> -O1 K W   W ڱ@:C ֯ ,TIB,VTjEʋ& .  ¥8¥9    |41& F b5tΥ: Υ ΥΥ/Υ   X| ^  mβ5$   Q3+β\A  톃<" 2-Bβv"rr l vX 3 W s: w . ť ť 0B 0Aa&f ൴wzwzz wyyyzzyy y yyyyyyw www w www w w w w ww w w w w wzzzyw w w w w yzzzzzzzzzzw w w w w w w w ww zzz zw zwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww@8   7  J/wN O "U :5C bы ɋwpUBՔ w4zWqeFR 䮷7 Pwn& ɋ=     ^ʹBnڽABCDEFHJKLMNPRSTDBDFDKDMDPDRDSDLDDDUEMG,| ,|SHOW SET VOLUME/DATA_CHECK=NOWRITE 55Y5 w^@ C we? E   2 1W 5*W '̴, p ` R`L2Zwww l  Е=e? E  Е:N  El1!DA ` Е.Е:A P Е.7 wn5~Wf `!5@%ܳ    5F  v -M` 5 )5@\5@5n $5wwzw 2 -VT25@'5#n $$5 ЕNЕO  ~Е=C l mD- w,NEARELEVCSCAN5"{ M5@Pe5AA, "5 W5 AmŀEAm5@@Х:A >Х:9 T:%00\ML557i:)*7D) PEBm@ՀBm4E  wDힷBm UUwwww&ww : <5@Rd5`A*Bm5@Q R BmʵHЕNЕOBmʵ= Е=C  / ABm`5 BmR5U  C|) zw& EЕ:  Е. mD- w5.5N@w5BF5 w M5@8w|5Aq  5@ (ww$w@  -VT25@*55j ЕNЕO   TЕ=C B rmD- xw5@:w5w5  M B w D  Е=$ tЕ.Е: bЕ. w5w$5w|5 M5 w v dЕ=  ~ w bP5w F5 w5*w ` @7  P5@% w5wT5y <5r %jkE v 3   6K .s TQ65z5 A58D %j/E ,&LJ5  '5!%TIVP"L %&D %D%D wMwwwwnw.w&w  5I%COE C!; mE7 7 77#-R z D FЕ= 6 . T JN @ Nm, Vw5+@ 8 ww55@ @ 5U E ww( 5@-e5%5V ЕNЕO5 5  FЕ=Ae^P V w5B5>5@<tDl@:pd7r070 2  Е= bЕ.Е: PЕ.Е: >Е% wfwlw5@+@ /   | -A -|A -tA w wwwww @ 8ҋʋ  @: C N֯ 5  2Wt 7 f  \?N0eC < *pe& f H?> :   U?Ke 1& & Ї,|e?> ?7 ?S PP@Д E ? r ?rAJe b l?)'5> 7 J?52:; 8U6 L4:/76* 5[        wf:%z%ƺ9 r: 0 w wA#EA, MA, Du @  wwwww Hw07 V % 5W W  l5W wnw  ,χ ˂l Ƃe? ,w.D4, lt 9 9wD64, AAm ,l" l u! C l l 4! wwwAAm  l E- E , F^ wjh E(l 5 w,3 D 8 w3 bs sUUU5 @$ ,,3D00dMhL555512!EB w6w`7   &  T ww 5&w: 0wD *5 Е=-  ^ X  dЕ: X- Е:5- -  wx@:5.5z*5 &C  r¥: ȥ- ȥ+ ȥ*  e¥ www55w65 w@ ^Df5 Z5 5 F EU7 *7 " xRRNJwpA A Е:5 &    7 7w !      S      S 5& x8 w7 :: 1"1,-F-@1"1, Z 7,7,Ժ κ ЋC~m ?0ЋC~7  r lʋ3  K s 7 NХ[+ B ¥CХP! 0JɋBJ B P¥,¥] ¥UХBD& W  K& 5D & 6 1, ,f'&f C Pf C L,f E ` f ED ,  & EEA!A-    C E( W!V5Rv:M,u,A5@, 15/U%B  Bl'Bl#Cl B,& D-  V B @    C ClE DAE ElC! B w67ww (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA JEAa$ & & @( "f  e ee e  5 ߥ& *  + 23E Ew ~   Е-   0@A W e`fÊ    E N"иP$ V 19200EXTBEXTABA9600720048003600240020001800120060030020015013411075500óȳ̳гԳسܳODDEVENZAHJK L C Z ` B    23:$  ޮ<& 7gVYHJ[@54L5,H  > M5Aq wb p5.5 5w @  25%VT M7wГws w:  Е=ДД <Е: \ Е. w@5Pwx 0 ^ M w&`5 5 5E U www5o @ (%MAW,LPe@@@5Mz ]r @5 ww5; M$f7c5tU M x5TP ЕЕ\rq l`T bww@wwwww55 MAq w455 5@  *F5    w,wD` :> ` EmE ʮЕНЕȝw H 6Е=v  | M ݝ wz Е:   w5& Mw M  B l M7[wWHw\5bwP v dЕ= D A* AEe0P Z rw5 PMw 5 @`E7xw7 ,,@ * 7 rݹl7 f5 Z Mw|5wzwFw*5x \ ^M # & ȥ0ȥ9 %݇wj ҆%ӂ7 4|]: 2 Е=ДД Е:v fM ݋ L     w5  X7 V5 J7  Mw`5pw^ M?8 Mw.5>w, MD5@d%HTw|lhV^> TIj7 hVwfb^Tʮ9:7TV M7 J00lML557i:)*9~2 p( `  , ~+ʮҕRRwv>TI7 V wlwvu)Xl& & +&  p)JI F %?  (/7$[6?3 C   ;"3c! 0   pVʮ ɮ  ;  R5Sʮ 7  1# ; L 5ʮtUʮ %% # 5ʮ 5D5 : 2517   *` ʮЕ!5p wЕ Е>ݬwMw2wwwÊŠwZ5F;5> 6 37 ` l -  T'wBʮЕ5 (wrЕ Е@ JwTwMwwBw5/ j lMR7O5`C >9e  | ww7 5ҾrwB  ݧ A" 5G5C  M5Aq w 05 5wL   7 8 .  7KwGj@wxwD: f TЕ=ДД Е:Е75, V nw5C ,5  %j,E r:2V-? Ư-?a^f5 8Ev(U& & +? TI7 V%f׭׭ v׭  b ׭r(,U E ֯ C D & V-> Ư-><9^& & +Z>TI7 V x%f ׭ r׭b 7\wz  B 5%VTf D %r%f%b m %LP 7&f mE7ށ     4 x f` < <ЕNЕO Е= @ ҋʋ  ʋj4 ы % ` !,f@@@= 52 5( F Z m 5&f> l  ݓ x x5jf@` . U \Е.B& lE ,Е: 5 ߥ& *  + 23E Ew d   Е-   0@A pW e`fÊ    E @H |g |pƵ Q|Ƶ4)SHOW SET DEFAULT UIC PROCESSUNL /EXP=CRSHLOA /EXP=CRSH/HIGH/PAR=GENASN XXNNN:=SY:SET -- WARNING, System disk chosen as crash deviceSET -- Crash device : is being unloadedSET -- Crash device : has been successfully loadedSET -- ERROR, Unable to load new crash deviceSET -- ERROR, Task LOAD is not installedSET -- ERROR, Task UNLOAD is not installedSET -- WARNING, Crash dump support is inactiveSET -- ERROR, Task PSW is not installed Named Nonamed []Protection UIC: [Default UFD: [ @5;5 wbȥ  TB l fwC , T l Ywf v  4 t"%F1%E  |2|. . wh5r  Y x wB|XM t"%jE1%ZE  |YM   0 Hw-  ״ "w0   ? lz zAm&d? XXT e0Tw. Z :Y B 8Е=ПППЕ:   > VwT%,D1%D    wjE5@Ew5w7 \ ~ ʵ& ׭C%[]B]5NwJBҥ B & (쵦f&& Ε  5 & & & & & 2쵦f& Ε& Ε ׭C f f *5@/ͥ[+8Rͥ ե: ҕ:ҕ=ҕSҕYҕ:ʕ@4B(f  V7P  @Qw*&  "'  w z6w7 ȥ[wֵ ȥ]~w w B᷊&ֵ& AAw %5@8 ѕ0~ ~-6 S  ww :wʵ& PAwb15@6w V  PA Е[E Е,AE Е]ʵm ʵ    w Jw*tE5@$ʵЕ[E bAE TЕ]ʵ&  XA5 %t5@< v nֵʵՕ,ֵ T7 w??wե_ 5w5@   7B5h?ʵЕ[E fE Xȕ]ʵ& X?P?wb5@>jʵ n7_&  ʵ&  ?@%[]<ʵ 7s5@/EֵЕ[E Е,AE Е]ֵD 7< n  ֵ 7& h>`>wr5@N w45 w5w Ĥ&  ʵ& >%[]5w Ĥ 5 w<@: LJ[ Z5@f   f 7ֵ  xu W , bMwW ] Ĥ l(5 w% wj{Ĥw >5@n¥:k< M5 Aq 5wF:u I@ ww5 w5~ 5 q5@ FAʵf q)#5@P  ֵ 7 ww5@ w 6 % & wB Ĥ  A BЕ Е  A (  zЕ=Е[ĤA w2E PЕ,AE @Е]f&7Х[# •, DC ȥ,Ћ•] & PХ]  0W WpAa %%& SYֵНhНeb Е:Х: ȥ:ȥ     w  @ w ԕ  7 w ZWt 7  ?0eC-pe& fP ~?Dt VT~T Tե]& lE NЕ:&f& v  5 ߥ& *  + 23E Ew 셐   Е-   0@A "W e`fÊ    E 00|ML557i:)*"n X|rHost=:: RSX-11M V4.1RWED)/DEFAULTSHOW PROTECTIONSET PROTECTION=(SYSTEM:OWNER:GROUP:WORLD:5L5J  T @ʥ  Е Zl Е ЕVhЕ ЕBЕLdZ  h w ww  TTwT  B¥ %¥A ¥Z ¥0{¥9 %s¥:pե:m %h   %_ :%Y&  eeL BP 9 T& ,4RҕRRRMT ˥:Ҕ ҕ E̤f@ʕ `rPʯHBwSystem:%I, Owner:%I, Group:%I, World:%INo AccessNo user default protection specifiedpv|`7 EE EE5t5zAW  E@7 mrw5u: SmR  w wm45@9  8ѕ, ,ѕ, ѕ, ڳ w l ֳ1Q ~ww mw5@  w\ w p  h7 mLw B7 ӕR7 ӕW7 ~ӕE7 t˕D 8 h  b zw7 fȸ 5 C@ 5Aq 5@35 /w+<7 f`?Z6ܸ~} } A% } } 75 % C3 @ S xK  @$ @  @ A w<nw\6`5nj6 5+wAե  E@,$7 "2d5uv rw ! j 5 5RwR)4w45 R w  5@55 1C - jv@5J 5@ЕNЕO BЕ=C  `mD- hwWte5 ep 5&9wB 75w"5ww &7w 5 ~ 7r1fuwU5v000 0  p`  p`  p`0 0 0 0  p`0 0 `000 "p`"0 $0m$0'0&(p`0 (t(*UE4 4 7 z%B%BbZRLx2(:ܸ")d p"Pt wyz wx{l wj w^ w\R wPzF wD "H?V7 Wt 7 ( d ?&0eC-pe& f ? & lE Е:r @ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf >  & e 6& e /& et*AHŀ ȕ Е Е Е & e & e Е A %& e A N Е A EA EЕ A A   $Е.  AЕ;     w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA dEAa$w $' UD$BA  &( U BQ r Е*  & & @( f  e ee e w D&& bЕ- eaePPPЕ-$w VD  &Е. ce j Е:   XB&f& v 00MhL555512f& ͥ`̋  @  % ff&QE eN w `NA`c<2. wՀ,ŀ(@ L @   HU@ (  u G   53 : ̋    t  6݇u    5 & 5  5  56   AAaf ΊP   @ P   6 w ̋ xe%  @ Хȥ   AA wAf f`E  5 _Х*  BC  5 T   f : azE  + $& .! _0 7 9A  F Z5  ע ע  5 @Ae   A D BA0u` 0ff &a(B0`B EeB `B EeB ` Ae Q I uAeAa a Q Q  REGIONCREATEDIRECTORYOVERLAYVIRTUALLOGICALREAD_AHEADDEFER_WRITESNODIRECTORYNOOVERLAYNOVIRTUALNOLOGICALNOREAD_AHEADNODEFER_WRITES 趁JȠ[* ` Ȁ,* v Ȁ,*   ɀ,*  @ɠ]R[W[E[C[D[ R[W [E@[C@[D[ R[ W[ E[ C[ D[ R[@W [@E@[@C@[@D[@ ` ڹ([ɬɁɁ,)]R@g\Rg\Rg\Rg\Rg\Rg\Rg\!R g\!Rg! Rg! R$g! Rg! Rg!) R g܀=:`ָ湀=: `ָ: `Ҹ: ڸ =: ޸=: ฤ=: ܸ=: ߸=: ݸ8zZˡ. zǁZ!8zǀ. zǁ ǀ+- # "L``. ǀ+- # 8n  5 ߥ& *  + 23E Ew l煐   Е-   0@A xW e`fÊ    E &   `@ ` B   & A @    TPNUMB z\ ª %+18;>ADGJMPSVYScheduled at Reschedule interval Hours Mins Secs TicksJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC ww  &Tb~7 > %׬׬ҜRR   އ@%6  Е  n7& ~  T7& 5 (e% xrw wDf )$m 6&  & m m6"m6e! DЕ- Е- .eЕ Е: Е: Е:  W Е0    & 2 % j ̪ P  AΪPPP & & @( f  e ee e  5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E &   `@ ` B   & A @    &f 00ML557i:)*R ª Ы @ @.SETCLRDIS 1 0 5 @   { >7wª @ª7wX% ؇ΫP χ@ Ƈ0\Vw: l / A & E  I   ɋ- A 1 07 EI q   P  5 ߥ& *  + 23E Ew Z   Е-   0@A :W e`fÊ    E &f CREELIMDEL 5LG@ 8f ^W A7 Bw>/: 7 \v 7 5 7"w>׭T׭T׭T ׭T> +X '&w7 @ w` Z8 < :χ J A Е wA xЕ A lЕ A `Е  |7w$  BwP  SSSSS EɋPR  8 &B      w  ť ť 0B Aa 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f + 7 @: # ȥ  K s¥ B A5?5=5p 5 2 .0 0 AeBA Hu@ &  w@7w zzA7 5   S  5L 7 E ;& # # @7 p  N s F| Z 2 ( 5 7. % %6@0  lE%? Bte9Ee0P w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f "ASN DDNN:=LOGICAL NAME/TERM=DDNN: MCR -- Now allocatedTERMTYPE 5> ^@ 7r "  5  >= /.8Ce   )) %u t=7 ^臗/: L  @  w lwj5 C  d5PE@D7 *m7 5CªC Е=N ¥/:-ԕ/=C Fԕ 7bTePHePF 0 ww Lыɋ¥/O  {d71 < 85 + .8 B ) #7Q\u71N7QH5  u tu    t ȭAqCe   :   ) u $5 H  $AqRAB%VTA w%NL z58 r 5 + eC5& [A,A 00MhL555512q-5 F6 >55 5 5@ T ' 7 5@9 5 B 5 5 : AABlB, ,G Au5"A5@DCe &S  K @G & `lE Е:    7Е Z?N "Е Е-Е-Е Ћ8 @ +H'& +R'5R 7 )7 H& ɋ=     _a41& F b5jΥ: Υ ΥΥ/Υ   X ^  mز5$   Q3+زRA  톃<" 2-Bزl"rr l vN 3 W s:w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w  ť ť 0B Aa & & @( f  e ee e  5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f @: #   PS FS w8 570  0 w55 wx wb   8 ,   5!fU""NP ֭$F ֭ ! >EU" 0U$ &@F f).& D<Ce>C 5 P A Е: xȕ   vЕ.7 >  C! T C!ч J   wwL ev w5@hw8 )V ejw d%rrJ  U?F3e&@ &S R& "& x>?:w,\% w) w& lE Е: A7 5   nS  d 5L 7j E ;& گ# # @7 p կԯ N s | Z  5 7 %t %6@0  lE%? Bte9Ee0P w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ 5 ߥ& *  + 23E Ew Z   Е-   0@A `W e`fÊ    E &f 00MM557i:)*~INITIALIZEENABLEDISABLEELIMMESSAGESHOWUNOVRNULLMESSAGELGODISABLEPRIVQUIETRESTRICTPROMPTSNGLCTRLCTASKCPRDPR@ V~a`_^]\.@+>C7 7 5~B@ @¥/=7 7 @%0%- 7  wd  w\ F|pw7Sdwdf5  J F B > : 6 2 . *諷 "       n B&j ~ >nҕҕ ҕ p˥/ ˥  fփҔ^ҕ> t-¥/ު  %<,x\,p %<,`\,X% f 8 H ~w8wj 8  lz| ~/`}&5 h U5o5%|] ^Ý|`` X& &fzНTН.Ho5P) P;&f54 0&  " wtw|w|wwlwt 6%   *^X ȥ A8 AD ͇w< 1n& n,-& 5 `Ç&f7  0 :f  ww~wS L& Dm 5 &f~Dm5 2 J0  < " F 56 5EUww 0¥: $¥" Х   "  %ih Re5nL @RJA `"l8 &A5??peQWt & &fh B    2.,e Zf   wwww\ȥ 9E5@/ &U? e11 & & чw  ȥ 8rP *& 5 "&fB 0& hf E%U wwwZACTPRVDSBRSTwwwȥ %ȷ2 n< @ ȷ40  & H27 xhZm"5 h&n   " wA 6A 0Е A &A Е C  n Ջ C5 5 5 :7L b 0wR && B ɋ % ыɋ%¥= ¥/¥  wh0 0 p   tw jw !¥< ȥ ̥  ¥>%̥ S   w>v 56 @E5  n@m  & c e )% )wЕ PPP     6    f w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w : ť ť 0B Aa & & @( f  e ee e &f& v  5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f , A@Y !00MM5555122$$$$$&$l̠$& fJT7T Te e h@e E5!f@e&e &U@j  p Rfep@BA@e X @pU mȋ ʋέ&    ʋέȊ u"U"a"A"o"O"ssSOSosOso++#aa@AA@(([))]//\(-{)-}/^|!!c/C/c|C|L-l-L=l=Y-y-Y=y=xoXOxOXocoCOcOCoa_A_<<0^+-2^3^P!p!.^1^o_O_>>??A`A'A^A~A*C,E`E'E^E"I`I'I^I"N~O`O'O^O~O/U`U'U^Y"a`a'a^a~a*c,e`e'e^e"i`i'i^i"n~o`o'o^o~o/u`u'u^y"1412/u/UAEOEaeoe)1)Bf&  e0e0f0, ʋ   0` U~N xpph` 0 B V҇,?? A@Y !2$$$$$&$l̠$& fJT7T Te e h@e E5!f@e&e &U@j  p Rfep@BA@e X @pU mȋ ʋέ&    ʋέȊ u"U"a"A"o"O"ssSOSosOso++#aa@AA@(([))]//\(-{)-}/^|!!c/C/c|C|L-l-L=l=Y-y-Y=y=xoXOxOXocoCOcOCoa_A_<<0^+-2^3^P!p!.^1^o_O_>>??A`A'A^A~A*C,E`E'E^E"I`I'I^I"N~O`O'O^O~O/U`U'U^Y"a`a'a^a~a*c,e`e'e^e"i`i'i^i"n~o`o'o^o~o/u`u'u^y"1412/u/UAEOEaeoe)1)Bf&  e0e0f0, ʋ   0` U~N xpph`1 & e4j B 6‡ +!# " '5/~) <-34 >(: ^*01 ,A@BECDFGJIKLNMOP QSRTVUWYXZ[_ ?a`becdfgjiklnmop qsrtvuwyxz{9 00MM557i:)*, A@Y !2$$$$$&$l̠$& fJT7T Te e @e E5!f@e&e &U@j  p Rfep@BA@e  @pU ¥[Cʋ   1 ̡! ʋ0έA  ʋέ+0 {@}\#[]|^~磰^"%%~A%N%O%a%n%o%^^^^ ^u"U"a"A"o"O"ssSOSosOso++#aa@AA@(([))]//\(-{)-}/^|!!c/C/c|C|L-l-L=l=Y-y-Y=y=xoXOxOXocoCOcOCoa_A_<<0^+-2^3^P!p!.^1^o_O_>>??A`A'A^A~A*C,E`E'E^E"I`I'I^I"N~O`O'O^O~O/U`U'U^Y"a`a'a^a~a*c,e`e'e^e"i`i'i^i"n~o`o'o^o~o/u`u'u^y"1412/u/UAEOEaeoe)1)f&8  e0e0f0, ʋ   0` U~ȣ xpp`1 && ej  6‡. +!# " '5/~) <-34 >(: ^*01 ,A@BECDFGJIKLNMOP QSRTVUWYXZ[_ ?a`becdfgjiklnmop qsrtvuwyxz{9 , A@Y !2$$$$$&$l̠$& fJT7T Te e @e E5!f@e&e &U@j  p Rfep@BA@e  @pU ¥[9ʋ! ʋ0έ;  ʋέ%0 |\{[}]~@ߧ%%~A%N%O%a%n%o%u"U"a"A"o"O"ssSOSosOso++#aa@AA@(([))]//\(-{)-}00MMM55512/^|!!c/C/c|C|L-l-L=l=Y-y-Y=y=xoXOxOXocoCOcOCoa_A_<<0^+-2^3^P!p!.^1^o_O_>>??A`A'A^A~A*C,E`E'E^E"I`I'I^I"N~O`O'O^O~O/U`U'U^Y"a`a'a^a~a*c,e`e'e^e"i`i'i^i"n~o`o'o^o~o/u`u'u^y"1412/u/UAEOEaeoe)1)f&  e0e0f0, ʋ   0` U~ xpp£`1 & ej  6‡ +!# " '5/~) <-34 >(: ^*01 ,A@BECDFGJIKLNMOP QSRTVUWYXZ[_ ?a`becdfgjiklnmop qsrtvuwyxz{9 |Q, AY SYSYSYSYTICLzt0zVx0t066eL D~  D~ 0W  .  3]   ) 5 TIMDM -- Invalid command line. Default $TTPRM preserved|DR,??b AY BSYSYSYSYTICLSYOV00MM557i:)*Bv>FXP"P6 P!@P6v6dP PP!8 P$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw 7' UD$BA "8&( U BQ :7Е*  w z7 ť ť 0B n7Aaw H7D&& bЕ- eae)PPPЕ-$w 7D  &Е. ce 7 Е:   ,6B&f& v 7%7%/%J4%7 %7 %7 %0& 2'*3(7 )j5*6,7 -w" &, 7M MNMepM&fV B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J & J @ EͥAA I531/-+)'%#!   erwf&f e q(q,ff e@E@!f&f e =rP& ff e@U@N! %l5@>! <l+|+\+t+54':5'5G754':d+d+=!!99 p ~   p @A  @A   XTDLX DDCMP TRACE OUTPUT -- Unformatted data -- Completion status: Secondary code = Unknown error code =   Transmit Receive Open Close Initialize Control transmit #<L[SuccessInput argum00MMM55512ent validation errorOperation errorLine initialization errorTransmit failureReceive failureSoftware errorpWrong number of arguments---> <---  CONTROL MESSAGE -- DATA MESSAGEMOP MESSAGE -- ERRORACKNAKREPSTARTSTACKUNKNOWN XTDLX STATUS AT ; STARTED AT RQ=, TQ=, WQ=; TIP=, RIP=, RST= BUFU=, NRSE=, NLSE=, ALF= Data errors outbound = Data errors inbound = Local reply timeouts = Remote reply timeouts = Local buffer errors = Remote buffer errors = Data messages received = Data messages sent = Data bytes received = Data bytes sent = Error flag word =  $R3   > $=$     t<cV& ~ B j i RV De H %e  3cv -  :l  %e  Е 7    Е 7 v   "Rc  A  A j  R N$f=  &  %e  rwpcP  r Fe X 0e % >a D) &a ,. a 3 a ; a A a  G a M a T xa ~[ `a f a Da J z (a . v a  Z a > a " a  e  e + pe E Ze _ Da J %e& ~Е  7x&lP7d&fVЕ A Z?7B&f0Е A Е. 7l h&f EC  j f$& ff e tff he @ftff :e @ft ef$ eXTDTRC.LOG X9 , )5 5 5  & t # 7` & R # 7>  6&7 EzvE%w%  p & f& & & & & & & " & Ν & & & & & & & " & Ν ?; F; 85&   )U > ~7 5 v x   ! ^B5V( &E6  5&&   ) & & & & & & & " & Ν~t &f!\R  &f& W%D5rOEz %3#e7^7ZJ %p6"%E#e7,7(J B 6 &"b  J B 6 !b rhf`* b^50 NJ׭h5w f 7   6 T&   )A& & & & 8 & " & Ν  +'& ~z &   )h[a r  Vfewwzr7~few\wXJBH76 p 5'95'977  " 00MM557i:)* "   [1!~ [1;1!~9 STATUS XXXXXX    :  -0 *@!.P>!%`d!%p! !/ Undefined error An invalid message format has been reported The selected operation has been rejected An out of sequence message has been reported A data link error has been reported An internal error has been reported RMS error A communications service internal abort has been reported This operation is not supported by the server@~b"~b"0~L"~L"0}:" }:"}:"Pz:"l{v"' - File not found - Directory not found - Volume not found - No files matching this wildcard spec "# l l v 6@ & SY& SYfv  /*4 -f .( ,7r& cf Ne e >  : w E0 U f( e  f & (c:ff e e 6 @fv\.(u ,7\v"!E5 U& cf e ew E0U  6f e 6 &f6&% 2 lrr r-ҥ[ (,0"9 ЕA]ЕA ◠Alr ◠Alr & (- -  cPf e e 6 f&5F 5>.5 ,%vcf beff Fe eE0flff e @fBCe7(,& c"ff e e` @&8:2m&3$rT'&1 ZWHX ~~Wv v~Wj~ n~W f~W$ ^~Wƅ V~Wn N~Wk F~W >~W 6~W .~W &W WX WX W W W W WJ W W WԲ W W W W W W Wа W W W, ~W2 vW2 nW fWڱ ^W VW NWt FW >WN 6WV .W\ &Wd W Wp W W@ W W` W` W W: WR WX Wҳ W W^ X5ew 4, Bv     5Bw^ XT Host File Transfer Program/J4x000MMM55512 2*3j56PR88 PR877888 MFT>TI:CMI.CMDR9R'9d9f9;Z<9;;<;P"R<P;SY:.FLBb<5  5 2  UE NW + >b> -LWE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f &  m  f 00MM557i:)*A N  %&   `@ ` B   & A @    &ff +++,, ,+,L,\,l,T,d,t,|,,,,,,,,,,,-,,,D,,$,,<,4,,,+++,+++++++00MMM55512 p@Wp r Z `'0))+@ Z Z HXZWW-HX<fWNW~W.YZWrW>(X>b>(X>D9b-D9b-D9V`x&YHY%%%%|4,TI$TICO%eU#  55 &.Yޱ xއ.Y ޱPXXYX  FY9?LY FfW(h >fWg 6rWdbfEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   z0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  p2 && ˥A˥Z˥a˥z ˥*˥% ˥$˥_  ˥0 ˥9 ˥7 U   ˋ˥ ˥ &f\s(,f ʮeR\  PR\r\P7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U 00MM557i:)*E( :&@E A  ̆  E vE c  @  . &f^  d h  8  " .$ B  8̥ZḀ90     w 5 u u (ww  & & 2- @3& & & & & & & && & ABAe& & & & f& & & &  P AA@ppf& e֋ A3& & & & & & & & & Nf E` l#f& WaWz WWW W  ɥ"N ~ mu-w<ɥ;d1wbנ*å2@   8wn ff eŀTI&  V @@&Ew J ɥ@4u bSYu(,ff ?'#  PROXX TTXXX Command Syntax: output filespec=input filespec Copy from Host to RSX Server: filename/REM=filename Copy from RSX Server to Host: filename=filename/REM Delete file on RSX Server: filename/REM/DE Copy from Host to PRO: filename/PRO=filename Copy from PRO to Host: filename=filename/PRO Delete file on PRO: filename/PRO/DE Delete file on Host: filename/DE Wildcard is supported for filename, file type, and version MFT VERSION VXX.XX9%B9 9.& TIA70 wz7 77 77 7 7 7 E rr B w*5w$]7w  N V5 5 u5 | nE>5h Uv . f bU^ .f J\. f :5U0]58UE5U 5UB΢57 75 ^gB/wœB~UE͡p e wLwJd :&  p> ^p dpdw:6dw5zp5@dq 5N*q;dwH̀xdw05 eq^,Zdw5 q>/:dw>6 @9 e*ȝ(&"U9  5d :d 0  0ddwl>ddwNf  e  eb^d d7 ^ MFT - I/O error during input of command line MFT - Unable to open command file MFT - Syntax error in command file name MFT - Maximum indirect command file nesting exceeded MFT - Command line too longo.p$2p)[p6p FATAL ERROR --> XXXXXXX MFT - Syntax Error MFT - Illegal switch MFT - Invalid node MFT - Invalid switch combination or blank input filespec MFT - Too many entries - last one ignored MFT - Illegal output wildcard specification IDDELETELINKENCODETRUNCATELINKSHOWHELPDEBUGONOFFFORMqqqqqqqqqqqq.sm$rm.rȇZr n6r=LgBrʄmHrnȇZrnVrʄ*n`r/jr2n`rr`rr`rr`rs`r&s`rȅr`r LgLgr:r҆nr҆nrnrržnLgrPrRrRrOrErMd-rdnLgrLgr"s"sО8nLgss:s1LgLgn4sHssss/s LsPPsRTsOXs†n^s bs҆nhs҆nnsnxsxs†n~sʄʆ2oʆo soo7w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C fEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   z0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  p2 && ˥A˥Z˥a˥z ˥*˥% ˥$˥_  ˥0 ˥9 ˥7 U   ˋ˥ ˥ &f\s(,f ʮeR\  PR\r\PMENU INFILEOUTFILVERSON . PROTO ->XTFILXXTEND SYS$PFTFORM Working .... Exiting per user request. Error -> Press ENTER key to continue. Please provide a file specification. Error in file specification. Illegal wildcard specification. 00MM557i:)*f&f j7\ . 2 '7( &" 7   z  ]   p4 f&f  *5@ (]   & \]0 $  L]    `\0\   W Q K%I%\0\   v2 %%\0\   >ĥp]    E7 n\0\   W Q K%J%\0\   2 %%%+\0\   Rp]   4 !U,ȡ7  ^\  o%\ W   X%W%5 p]   @ ^\  1  p %% ]   > ]    5. &,b . LHb\. =]58Uơ]   ̇&,b . 58nUơ-R TB& & & & & & & $^& Ε   ^^ ^*^p&f&f  55  X ,b  &f&f  5  Hb  EE@%% U|%UpUh% U\U@ &&f\  :\  *V\\   &P CD \ CD L C D < CD , CD  CD P   &f,bHb5w5 *y55 11UE 5 B*U55 11UE5 B*155 11UE5111111EP<)0 #5[[?3l[?3h#6#3#5[?5h[?5lDMj  $ \jjz[jOjvAҊB؊CDMPjRSQ<pj[jOjFAҊB؊CD1k2Ik3k4k5k6kv~71k89k9Akv~v~v~v~0qk1yk3k4k5k6k8k9kv~v~v~v~v~\v~v~<v~ƌv~1k2k3k4kv~Όv~֌v~ތv~v~v~v~v78)l-lvz[-l?5lF6pz1Alpz;IlpzzMl[Ml1Ml2Ml4Ml;mlMlF8z1zzxx^{{l~`€&Ԁ*|ʃ&$$@*1457<pƌΌ֌ތAC9NXTT !A[$%././0:0@0&8:XTFHLPM 8File transfer for an RSX/VMS host to/from a Professional Version SENDa file to a Professional9Normal@Protocol RECEIVEa file from a Professional9EncodedAProtocol DELETEa file on a Professional DELETE a file on the host EXIT . File specification: ![ J]Change file specification: [J]5Move the pointer to your selection using the TAB key.1Select the transfer operation with the ENTER key.8Move the pointer to the protocol type using the TAB key.,Select the protocol type with the ENTER key.-Type in the file specification and press TAB.EType in a new file specification if desired and press ENTER to start.4For HELP, press the PF2 key on the far right keypad.VERSON( XXXXXXVMENU  XX next to one choice, press ENTER to continue.VVPROTO 5 XX next to one choice, press ENTER to continue.VnINFILE " ((XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.Sample: DB0:[321,12300NMM55512]MYFILE.MEM. Press ENTER.n|OUTFIL" ((XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0e L=  0  1bv & pL= x <   !  1@ *B8  5dv fv C2 4 C@ pL=wX > !5C@  1e1 1  0 W W C@& lL=@0e hv  @2"e .5@  jv  & 00 NM557i:)* L=eH~ l     4&@`  zj 2 0  lw b`ҔD~ "    .&@`  }j  r t w C`~ D~    eC~L=l b5@ &Sj B@ ;  r 5 : < w \ J 2 L=6 w ,  C~ D-6L=66  h  wB@ʢ    1w  ~l Z w  b f #N \B` e~ . C6#    e a~ 0 e  lv  D4 V D-65@  5   E  C` Rnv  w ” B  ~a z 5@0!0 :Aw  B5  8DV , 5B~mB`B~  z~5>5  ѥ ~eB'@ >~! N ` e  @ ~ 5@  5+5õ@ ~ Sj l0 j ;BC Z m N õbj r f @   5  zj :  = BVfP Dj %!t-<%%  <%z#t-<. C@%\C@ &C@  wFe B ɥ. ы~APBV1 2 UE U@E122A& `1e2= & lJ   5z j r ɋQ$A5 l &5-5 'm![B< q~  V& JB<G Q~f:  t-<4Am< H5  5t-<5 B5@  %6U vwz5  05  P @vwRvwHvw>w 5@  25@ &L=%5@ & |l <6 6vww R F$5@  &5@ L=6 6vwb5@   vw:5@   vw 5@  vwR t-<  vww \ B> <t-< e `  w , B> <e `   >` . <  <  < vw@ <E ~Bm< 5#5A< C~ f:  % V A<C~ D5 0 05 f: $  zUvw `!~B-<  U   1w2w3w4w5w7w:w<w=w?w@wAwBw!wz"wr#wj$wb%wZ&wR   Bw : 5 Ue B` B`  ^Ef:fBAe*Bҥ ~ ^5%  U j j%< BEAe 4 = vww | f:Ae$   | B5 0UC2 (EC@ w    5E5 <e  U5<e`  B<wGj zu :u ; Nw f: 5  4E  *f@ f D~ XU  3j 5 :* Am< U El5   4  eыAm> e$ vwL AZ az vw09  vw `f-+ +- . ɠ ~ 5Nm>V  vw vwr   ~5 5  vw0vw&C2L=  5 f h ~ V F5 : : uew D%UU&j  U@ t " Pj %z 5 :&Sj 00NMM55512 *; j  H X: `w  d1 0 C    e0 e0 ;= u- @e5 5 Zf@ A~j  B    Epv p Brrv \55 f1A% & C **%%b'   1 tv p 1  Brvv xv A1zv |v w ( AHCCHeEA& fD  ~ԇ%FuJ `Dw  E) ƇB ",e$FFJ% 4 C-C`AleC ",e%uDH UBE`JF Q5Hk&   5   @,e fe N,Nv v  1~v  EF 0 JEJ@JeJF  @J J F F5 H   e  &    b $B bf&m EBa & & ̋•v ` pE `4 U & NU E Ӌ 0 0 (,H131 ff 2teA&m$ $$$$$3 f se22 0 f seF&&p&(f& se< f& f& &f&f &  l& & & & & f& Ε(   0& & & & & & f& Ε  <  << 9 & & & & & f& Ε  &fg  w ѰB   f& & & & && f& Ε( `  ,& & & & f& f& Ε( f& &  ׭gW1 fEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   z0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  p2 && ˥A˥Z˥a˥z ˥*˥% ˥$˥_  ˥0 ˥9 ˥7 U   ˋ˥ ˥ &f&fef  :%4%.5Me &f f 5@     PfPfLgLgLgLgLgLgVgrgggggggVgrgggghhhdhgkkkl  @     @AAŁ@ Aρ@ ʁ@  AAہ@ށ@Aԁ@AAс@01A3@26@754A<@=?>A:;A9@8(@)+*A./A-@,$%A'@&"@#! A`aAc@bf@gedAl@monAjkAi@hx@y{zA~A}@|tuAw@vr@sqpAP@QSRAVWAU@T\]A_@^Z@[YXAHIAK@JN@OMLAD@EGFABCAA@@jf&fZwj\IEOՕID ebw \ V T7`Xw R L00NM557i:)*H@՝ ՝ՕB zUUB `cf&ff_ Zlb4 4 .tZ lՕc @ wSe[@7?UL)U՝3/1՝*Օ UU   4@2\ n@"  Z s&\ mZ l\ mϩ  x𝘩 n &f&f^ mwe w7 hʥ  Ew  @%9 @ 7 w^wn(ͥ 7ͥ եW͋UҨA [7  s UU|UnU` 2` ff4 m -%o&  U i4 եdAEBEPet & -ew  ꧀ 7`w  ܧاee U *Ez4 4 ' 4 ^ 8eʥw E  f h[C0 BL~ ~ wT"Ϧ k (  H57  Mɨƨ¨7 n 8e |Ew&f&f^ mwwD^ l sf4  ”¥¥H~4 :@ ҔB~4 m 4 @%)   *[ nҥ EEPe t wΤwf TФɤwbwH ZwF ,ĤwB Lw0 w0 :w *ww w^ l m  $waw>8 0wfBE[C  +~ ~ wTL¥j T7ޣ@أf n@ʣ wԣU k ww^ l m fAfA&Ý^T`C`.0 B?e֠w,,@f n@  Ί Ϣf&&Т m 1   x𝈢 n}f`t~fX m- 1%1 ˥enw h b `  l Vw P JF & l$ %xp n  l % x𝞡 nf&ʊ>   b&Z ^ m   r7;4@.f n@ *[ nf 1 %xp ne  l % &f&f @ `[ s <a *O  =rl &"j \ m n \ l&fc7  ~-e-e fc C14 -Nefct -*ec  - e-ef 2e& c & & & & &&~a& ؞  L&E e e 44 4 4  fX 8fem  & c @\ n@& & & & fb&  & & & ̝f& & ΝƝΝ  BȆ&E e e & J1 &f ExE E[Ay K?Do Po Zo`odo poto ~o5:94':94'5'9'95:9G7:95:94':94'9   f0 `p𝠜 n Zlttttt X l Z b w A 1  lAɋ A%tp n %  ) n 00$NMM55512  $4 4tt t tt X l  f n x8A 1Aɋ A %tp n   9Q2p6 n Zl%tt t ttA e Z l _ A 1  lAɋ A%tp n % ) n   92ph n Zl%tt t tte A ^ l m A 1  lAɋ A%tp n % ʙ) n  2 tt t tt xA 1A %tp nB%A @ 58>.J P~% w "w@- % w ܘ ˜ w @ -\ wz @ -* f w\Be 1 1 1 7 07 .7 .7 (fo n.ޙ% %ڗ n E%!E|%   f % L%TTܙT > %VH& & & & &f& & Ν4<p  n&ʥE%5J  n f Ԗ 0o% %TT" :oo%&o`& & & & ff& & Ν   n&ʥ ʥ E%J5 B0 n f& c  & & & & & & & & Ν   n&ʥE   eV f % L%TTT > %tH& & & & &f& & ΝRZ   n&ʥE,& & & & o& & Ν    n%58 ֔ n   r7ؔ7ՔĖ~  ln  n Zl4 4  tte^ l _ m  77X m iDZ L\ D^ < xtp nȕ    && m b i  lp nen Ք~ ^ VZ L\ B՝D՝A՝;e ~ 1`Ք~& c  ef  Af&fÝTĝND A50 `-fѕѕ . ѐ ÝĝD A5%RB/Ýѐ BB f ɥ wNf&f ~6z% %%w6Dz\zLzTzfze@` ..  D @ S ef&f5 ÝĝD A5B ?fѕɕ . ̳5| ɕ5pɕ\. ݫ ѐ ÝĝD A5%B/Ýѐ BB &f&f  X7~zrv! \7VR&f&f >(7" !//  / //& c 5J  eV // / & c  "555 e e ef&f fѕ% 7BB ( BB & r}ɥ wf 4% %%w }}}}@ef&f 2 &fb~氘ᰓ  bWW wD f&f ыы& Nv#www @@w  0x u pr5ܮ .l-ÝR~\.-ÝR~ ..Q5  ܌ ..H " ..-.\.. (=ErUl7 ̯7 ʯ    5F& 榗#5,    #5  t  $w } `z5̭ .l-ÝR~\.-ÝR~ [ H X5  Q  ..-.\.. EdE^7 5 56& ֥#% 00,NM557i:)*~\..5  z ɥ  # T     j   U  L  U5x X "  &U% U>505(( X%e~w |E  . 2&f  5  UΫ5«ew  NE  U &f 7 5 &f&f e A B ~ A B. ~ D= P ݺ      5  ݔ n 5| t J 5\ T & Pཐ    f&f fѕѕѕ.єєєєBB f&f H'fEѕ-RLUBѕ.єєєє,`(є BB ZWW Sw<f&fEL NB` ыJCK.& T B % ы  B -^X-XR/B  T7p UƨU@ұw5t$5l .l-ÝR~ > .. .. ..5.p\  f .6B~ L. + (5 .l-Ý4R~**   V z ɥ > vf &7B  ff #Dwezv ׭   e X f\  ff.ffwD w46 W r h \E T $ffw w W   E  fflwpj vW ̧ b§ V ..VN/.ZX..V/jP/..~z|.T{.{f&f ffѕ~ !"#$%    3 e s ќ ќ ќ ќ ќќ10Xќќ BB WW wwf&f %q ыnrr r!r"r#rrrr$r%r r r r SSSSSKr1r0rrrrerr f. l/  ,"Be >eRR  @U w  f  &  T  e& !Ƥ , T hfEe jBe&f  ~5 &6f\ <40fͥ B  ߀@@Uбf Le f&fW "B` ы @@B  D .! SB %@ @Uw44&ff]4WtEE EU0PEU@P Е ]4ffem  4 & c ;@\ n@7 N& & & & f2&  I J&E Be>4ʥ2 & & & tf& & Νnv  &E e ˇ4 e &f&fe!wZm m X44 & & & & f2& ~  s@ EEW!0%70WuwW!@%_@]P 4-  CPU  ,, &. 0 0   ,`w3   f %w C55  |`0 VC 3 5  @ss   1 1 5 5 "` 0 1 1      &V  A  B,D 5  5 A     d 8004NMM55512 1 1 1   "& d   @@ @ 9C@&e$e& Μ N<B>& 2mB>o  o "j d `[ ]Ҭ V  Ue  5`昃`$EEˊˊE & ˤ!%   cc   9e    A>55,<lɥ fEÊ֥  P  "` &&   f&& ע , , A`  &    eAm:CEeB@ & &  CR  &VPn flf wjs$e$,fL " . {"{^{`wwh +3 3@    #  .0 µ1!0  5 55  " e5& Y5 T SP K  E > >5&@@   () % e  C   r  &V p 0 p 0    5w     @  ppp 0 0 0  1 1 1 . (f& t1, 1, & 4 A`! 0 && &V veN*PU5D e0  S  ,rw ` @@ % %P! < f05E 505@u65Q M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTSEEuB 5 =/5 *@ %E E E  M͊    ` ͊ udEE5 p U 5@\ .% - / ,3e"5550% @L P@ R , %P Eewup1 b5 E #  *  P P &1u A  ) fL .H@ D,  4  .   &f .D̥  w f 2 & 2r  4  8 <0w d& l   &ap aB#E   *   uD5e`w eE< .f 2  , ,p l J a b! jP PH  HP PH f ` %5w  #5 ȥ ȋ5ȋ1 1 ".#Հ && rpp  f '`0  0   &f 0 &V &  K&1 . 1  `̥ @ $ ! 1  ŀ f&& h pp  5 84 595 - 9\  I' Q5KA@!Af9f:: 9 :9 !g9$5 : t9 f&&  5K $ņ%!*5 86 55 A@ tt  `B9- t Bt 5 :w "`4  554 5 <>B@ Dt `5 : T&D4 4  Bm@.C@# UE;C@ .@<’  4-   t4    0  && 5fLV  00 h     t 59&& &l :U,:` 9wCm: "9wh:5: < s>59wB9œE  e` D˵˵˵em <B@ ,W m emv` <N  8A@A E mv` ˵’ee`ef v` <  ~9 5,mweE,C:6`” A@µEe   A@ ˊפ ` El `: ff f4   e4    6 "`  84 ee&5EU@5 @% eE5 UpʥIʵ5 t $Uʥ 55 u"-e.Iaat EUb8bbbr' w@5 bJ G eB   e4 U5Up6"PAHX*U‹UA!BU```wUU Ke eB ʥe  xЇ@  H5G %`f 5  f   !&& & 4eP 5  5f z b @5 f t(( w 4 "4 &$ w`e PPH 85 85 :5 <5 @CC  a # C ˥ C<  z33   A8 ^ @ e 5,@ ,ͥw pwwww<3 Q4%&& f f&     & Q4    ! N N`e ! & f N  & %t"   v ` cQ$    $ & 0gB:  ^ Y :A<W" 1t F 1c5:ee B3e "43"B Ί  c! ! Q4%8   &fA8   -5@  u8 %`6%   $  U@`Bf@ΥY!T55W Υ5  A > d ;`e Υ b 1 J % Υ V Υ##e  $ APPH 8    5@f >:55&HJ1B(ҔȊ 1E c0 1 p   ` %lEw0F5%$&Bl, @%  : E͵L `Ӵӕ, J :؆*l,ʘ `Bp585Υ  ` % 51 1 5BBl>ʥ]ʥ: N Nҕ. L&Bl.0Ҕ lȊ " `Ewe  w @ ( C a   e%/e.Ґqӥ0    eE@T5  9 H6 @3 8 . ' P& &e` | 0e   (@% 00DNMM55512 w !,8! U1(5E55e(5  B" " e"J B) u IuI55 ,5 p%Ue&  55  U  5wb U@E߁ wJC5 @C E5,$n  N(C&% # &  ͥm   wV e  e N `t N,C,  $   #4   eN % `  [q11 e"@eLͥm[ % %ee  %1wR5!.R*&@C f",1 1 }eN @5@5p5!*.eJՀ& &  , 5558 % %ee &$"J!Eeb && 5eLddd e  w PCe4 e e B  5U@5U: EߌPA5@  5 5 5 05 5  5 U Hȕ5UU & 5 0%#@  uՀ5 U@ ATU  0!. 'p#!¥ U B%) 5   B:Af ~ >%8 5`0+&! u  0   P 0 & b%  5U e G 16 z,* M` 4 ʥ,  , 0<U: .% 0e  8`ee 08 6D Bʥ-  % 17ʥ* 1Y%V&5 '& eCʥ9@& 0c R  ʥ72& 0cV +  42% x`0. ,5%5  ʥ*5   0  # # # % 8w n 1ʥ* ʥ%%Z$@e.!%'  & e a  A ҥ*B 40 Jʥ*ʥ7  ˕ ʥ" ʥaʥz‹  C^6 BBd&5; '& Ee0 &  N #  e0 `IҐ `e   8*I )@`e( @ 9  2 %` 5 b :et 4"4$4 &45"45 4  eLwj ΋wxbw.4  &   5  Dbw f%` 5 p  b |߀m664 \j%ه!  ˇ < AF  @((  eХȋȥe  B N,v,  w1   55@  ͥ#@>E5uu  < 5@[W& AɥNfv & fA5e&5 4Q4 ea  5  #5 55U  u  5 wl 5uwL 5 , L , z L L * wPuLuNfV 0L5 @eL ,    `1! W-,00LNM557i:)* A , LœE¥" t4 Fw   e t 4 @eLW-, t 4  4 && G "Q5 ,,@  4  ,  LB&   HwW-L0 uLuNwl *p xH Wp&V dbD JD/5% %%  S0Ԋ8cP @"s JD%b p w w5 tBh?lYjU@055   w@pK5˥t)) ‹5Up55AɥAeu@A55U4 H t &fw51 e !`Be`@&  Ae G`5 ?  >9.E*551 w 5e JCœ 5œ  bw\53 3 & U U@ UG3  >& Nf  * && @& & Nf8 o &0Zwp V5D% .A VwlJ\w e   >w  nBA%&  ^% 5E     ,@ DAD`wU5 2wRBe,  'SY !@ʥ_ e 0ε%wX ,@   .ҕ: B n  W1SΕ[ B C`Δ > Ef&Nf& "W<W>W[W]CB`ק&ק&w ?ҕ[e zҕ, pҕ] * ͋ 5 D wѕ. B@ⳐB15   r; <( F BU1 1 1  w58Be8bbbeJbb#1 AA ܃ BP5U ueLEew\h@B 0 %!w. TwDwtק&ק&@w .E5BAw ևB  u BEC`"  D ccє D ɔɥaɥzɥ ۇ&e # .5e˔Ee0  fEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  A &5 ˥A˥Z.˥a˥z(˥ ˥ ˥˥˥ ˥*˥% ˥$˥_  ˥0 ˥9 ˥7 U   ˋ˥ ˥ E\C W-L05 5  "$0 & uLuN 4 e    5 E%44 4twD& e &  (eL5 N & &   &  w  j ͥ+ ,-..  .U.m. Up. ]<  ΊUE A .   6  X6 6 ev 66 `@ .4.m t  `0 4"4 $e$t "4 &&e  0 Dwt&D& %%%p5  1 B55pw  e@ 4 t 4 0f&  & eV #5  r 2EN& f5( B800TNMM55512 ׃%`%1 && ݰ 5  q8qm8 & q8t C `54ul4U C `5L H& && 5 r, r, ` ^ E e(" eb `vl %  & ̥ 4 f f Q Ɋ  !5p,p, -f& & & C B ,.6..66  0ۖ5555 B    ۂ && ۰ 0 .   be q r,r,   Ê @eL  < 1 1 &V @ZT O   ALA4  42$"2&' 1 Ɋ 8 4 & ڀ 5 4 uwF   m@ w  C A @   f A #  &  m 5 f eC  D  455   0   (        w50- "0- $0-&U?0B%7CBe&ҔҔҔҒr`b  # A  @ B@ f p P eC P   uNJ!F A B C  0f @`@ C  @ C B B V A f@   e@ C u&5( ,w A W !  @  4 f %/ 5 4$ 4" 4&0- "0- $0-&wr wZ@4 wP R 55!w @31  4 UB8 (_3% C7 B" 27  `   Vw<@3 44 4  8   m5 4 w4 4 47eC<7*6 W9W^w0 ` C` ::  2 7  )u`:NCA" &&   5w   wE5 .5 <A f "b <.w  . < 8 23 u u<u<76 E  \ 8& t:tm<5 5 5 z555 5 5 5 &5 (<5@  3(A@ 33u   J`. <3 u-<Q.u < <5.3 e t @4@84 wC4#3 ` f ꆖ @4 76 `Х^  7 8ww H B3. 6fw]V!' 5 5 ͥIu @ A B&VP 853'3 & & &&Ef&5   EH55JwDE@ 3U@3  4 4 4EP  wjBe2   4   e@ 4 t 4 0f&  & eV #5  r 2EN& 5( B8 ߃%`%1 &&  5  q8qm8 & q8t C `54ul4 t, t,  :   01 `Cm: > 4 C:Cm@ 4w4 4  Bl2 B-@ v 6цBm :A7=60B`@@ e0b e0I@7C:C0B" &  pŠ5wF %B>C< T :7   6 w76 00\NM557i:)*EB r C2776   P < D OE& 5 0 "0 $0&s-<s<5@u7BB:   m@m:55 5 5 555 5 5 5 &5 (u 4B C4C# 2  ꆖ `` e @ w2 "r $ &  B @u>u<5256758*A-<?A-<9¥e¥  )`e¥ B< Bm>   u:Am<p u@ 75 :  Znq8 2 B"    2775 :B< Bm> <2 <C> > <נ+נ$ נ1ѕ נ0 :B>f<C4C#   |  . j555 5 5 5@u : u 4 .ѐ :ʋ  :: :C . H 84  S(LwG0-"0-$0-& 44 4 ! efff@e w  EwU rC `5L H& && 5 r, r, ` ^ E e(" eb `vl %  & ̥ 4 f f Q Ɋ  !5p,p, -f& & & C B ,.6..66  ݖ5555 B    ݂ && vݰ 0 .   2e q r,r,   Ê @eL  1 1 &V & & &4 4 4 1- 1-  rB  W7  u-.8 ) Dm :I@0. 7 C:C0B"B : B>C< ,55  5 5 5&C4C#.  f   u-.8W7w` 5.5-@p7 !vw 4 wF B$  <w|A  ( f  )e l*t5 5 5  444  4 w߃ w ( wX  | w p?  l@ 4( AN &f 6 t%w ߎ T     0   l@ < w  l@       Ü( w@  C A @   f A #  &  m 5 f eC &&e PeLPuw "wE  u@!p@  &  >& xB  ʥ . B B <@   )@ je , V 5 w: @  . t %` v . f t P A85 8A:5 :   .  u8   5E- 5f@6   N2   B2 6  5 .    @ <. 6 6 Q66 6 6 v `A-<u< "A< vu:  85>vm>  @   w. 66 6 x \6B  '5 >5@ B ^5 > @5@r> r@ /0$p00dNMM555120"r %@@ "* (A:@>  UUU3@̥ q"q $e$q "f&   R5 f   e v ," ,$  J  ," ,$ p $p"$"    x&V @5 N&]0N  m  4  LuLuNw̥ &$ &"& & & ,.6.  .( .66  5 5-6@eL 555 VL <$p"r U 4  e4    @ L ^t5 N  5 2 &w4 4 4 e t w& & B 5 ͥ9ͥIeA @ A BW-25@  4t5 u 5&u( PwD,,(C@, 0  @tu Le@ C 2 r 4 &f %wB, _t mW-2 5 ȵȵ-55 ȵȵ et w@ȵ ȵP  V4 U@LuLuNfLV L5 NE@4 4 5 5 5 5 &5 ( L`L Xw w m 0u.0 )A"` 5@ =u>C5   CA z  4 4 e t W- 5 NLuLuNE@wz%LL 5 @L4 4 5 5 5 5 &5 ( 4  0W& 55Be,( * E    RR @L&f(`@ ,",$wf&   LR  N t  L4542p$2r" >#"-$4  %W-2 @LL4 L4  fw<e 5 "`  W,  5 L W,  U  fLfN p bNL 0W:@Ae,( * EQ    QQQ *A-<A-<L bw4 4  W mѕ0Q<Q=0 )CmѐѐCB" B C<B> 4   4 4 e t L@uLuNw4 4 5 5 5 5 &5 (4  H&]]Z0N S ZN mѕW0Q<Q=0 )CmѐѐCB"` B>C<  4 5 5 5 | LuLuNwL5 5 5 AAe@e@ BB& )`e %3@% .eRJ$     B( & j ߦ9 eLuw  J  Ȋet """$""0h Z  && ߰wr4  `Ete  E 4 bAe:uAH `@ e K(@AɥIBu u IEU Pul u ul K  w BB0A5E W ݂C˥w < ͇H& Ȝ `Ȝ Ȝ  Bʥ ppN0ȋ е%8М 4 "H "H!fN0#&ee& e U E"% J# w N`vcQ`dH#H -%#҇wN j e$ Im a Im C˥DœAFH Š ef%ef  e Js AR4rrr R  R ֜ 0f t=p t& C˥we045   =0΋K s (00lNM557i:)*E&ŀ&f& fS  y e e4Q4 6dJ d΋H<!b 8=$" P`H ` 3X 8 V> .0(0 0 A<pp wv& AFN 8 $  &54(AF ڈeLwX     Ȋ 6+wNwhw @ 55wv  >4 w8u>@ @ h0 Ap `  Z u<U R84  2 (5 :  58 %UBB@ E<u> B@ - "` R†wZ@- 9 95 w&5 U t@99A@B:` ʵ R5 <e& &2õE`e `& N e !& & Ee ֵ$ u .u0  : wt 4 t%P e%<4  2  .fLV @ A B4tE@P 4   $ &  T.5 <fLV f@&  E `9J@m:ȵPD& & EeeҔ ȵ    &74  v&  - @eL.4  0 .e&& @  fLV @4 ` .@0 5 354444w +@w &4Hw wnwd5545 5 5 %@ % ^w" 5@4  W-`  hP4 whBm:@@4 Ee4 e @EC% >@t<@  ` 't< 4  t t  t. t0 t24445 5 55B>  55 59P 5@=  (4    A@ uwz  444A 4 v5 3mu4wL95-! A@B C4@ `Հ ˕ 㕙wt-4nk1- 1- 5 <5>5 : r j#4      %` C@ D  " wC@5 <u3<u4>9#B:`  ifEeֵB`e&  9T4  &HC@  f hA%`%P884  , $"5 :  # 585 <u3<u4>U 6B@ - "` nȆw5 <p-2A@B:`9' )9 v@  h5 <9B:`ʵw"w( d7b9 6 t-< <@ <B6< ! < H4 f< <>4 t%P%T : 585 <u3<u4>U "`8  4 97z<4 %u .u0fL L .0 fLV Ee& &   t A@B:c2õE`e `& N eH& & Ee ֵ$& &2LwF8W8  `     pwt  Lde@  LV85N`v ,,f -68C .024 r`r    "`&&  fLfN p .&& t  N4 &V , ,%,,  "2 2  2 2 w Q 00tNMM55512 w   vt + f 1 @ 5@@ @5@ @ f1N1Ewn& & $ . & .  "ewP 6" *(% $"e$s "3 &wb "` && x "`   0& B  p p- 5! @0 @A  585 : JB@ - "` ֆ-P9!.p0 && 4  p#`  T 9 Am:CE`e& J@Du>u<*A-<[A-<U   ¥A-<@p-<< 9   <9&  595 44 4 4 4 44 5 4 w  t  %wn ,w\  4  09t `w.wf65 6 % 6 , p  2w5@4@@ D/p-<* 9$:w ,w6 w/, w5@5 5 55 @ .55hwuLuN5 5 5 4 jA4  N  p t@4w@u:69A 9=A@C:`˵1. A@ ! 0 Z%`&4  t݇ F9 w ,u4t@m:e &@@u-,   95 4w6 & , w&  uLuNw 5 , 595!wwf65 6, wj5@4u<u>`f @f 5 Lp-<* R 9$w ,Bw0 "w), w5@ @  uLuN A4 t 4 5 4 4  @wfE5,5-u,u:69? 9;A@. A@  !  %`&4  t ww9f 2lfu<u>A4  %p-,p-< >p-< n 92A@L%% @@ Nt4u:.Lw 54u.:@m:e 6 W X XF X* ڃXB ҃X ʃXf5,6w6w~,w.whf,5- & w,, x@0A.W8,@4A2 wt 6f,5- >,w`4   < t 4G8`w>,p.p0 p2p4 ,`BmC:m @e  m e,,L5-W-LfLfN 4  |  4 5 6,&# ,  tt ,t4t2t0t. 4 u6  ,  wH wP䴕.Bm:ea \,4  u6 p pw4 L5-efLV B@ ѕeQ- ,ѕѕ Ce QQCB |Wh tWF lW` dW \W^4 6 EW6 @eAWe6@@5 v 66 6 6 6 6 66`C:`!$ 9 9˵eE `:ev:66l ˵˵˵mm m e@m:@f A mf>>m > >v`˵r˵@oe@@@%!l00|NM557i:)*mv` Fނr19  CCeeu,B`` ѕQ,5,6 r :5:B:m e e e m mw 9- Am:ewB,Am:u- CC eeweeB` ` p0v6, w !!  9B@ 0 Fwm0 m  m A:`ѕeQ- e  4QQBC  9mm mv 8$,% me m 8,v 8 ,8, 9,  ,8,    tF 6Ce # ,7lѕ ѕ,2Ba.Ba ߂r,,eѕeeCm: ,,` E m ev`e 5e.Ba ރ$ ށBm` ނ ep0%Abe ހe BmC: \ް 66`wB@ e   W8,W8   33 s.s0 eW8 ,B:m` e wW8=,92Bal-&ѕѕQQCB 6p0,0,1 m), 0,`.Ba- B:m ܀p0Llev eE¥ @@`  &&4 ,}`   |2"`. &B 1 t5 : 4 9    4 ^9lA:`eCe2 - -,8 5 B   U,4 e  4 5,E,LLu<u>fLV  N4 6 6 A@5CC A Ev `L66 6l 6 v66 6 6 u-:65,:9 95:u:6v6!, t  !! 9 A@ , RAm6u-:6  , f6,N &0  0%,, B:m ,, , 5,">w 5 6ww 8 r6B@ @0A. h'tF ~6  wV   &  56,D:lBm: $ ʵEe`eA@C EA m  Bm: p.p0 u6  e"&&,A65 6 4 4 &V &:66`e  2 B:`  u-:6&@@ mm  ɵCeeC` 6 v: mlBm0 a ߇u-:6 mm`BmC:- u-:6ѕќ&@@ѕѕќm Va އtF 6 n   33 ,B:m`6 v: p: bހp0 ,1e B:`C:p: e&@@ʵ, ݀p0 ,u-6: Am:00NMM55512 :Am6 A65 6 (  ,L6w\,wBwDE8 @@8A6 w t 6  B    33 p6p8 w4  YC@    tt  0wlE8 (1 h@8A6 &&t >6E nTw564  |5 6e&V B@  T  ,#ѐ   ` , "C@ E ,,-B mf m C:  lp0ѐeBe. J,,ѐeBe2 B@ Ev .Ba ,` m62Ba ,,` m6 Bm:e6,m  C@5œ   6,  C:B`ll0  H ,A:B,B mm ,, ,B mm B mm @,, ,Հ,v C:B:`@,,  mm e0 ^߂r,?@,; s: , mm, , mm``0 8 *wr@,9,5 `, mm, , mmC:`0 h  w A:`e, > p0e B mm  p0lBm0 e @,,  Al R p0mmlB`0   `A m ,u6.u8056 , B@   p6p8 ee ѐ ܂ C@Ü El Be. ѐ ܃ m ~܀p04 &  w,  r6 r8 AF  "`&& fܰ4 fLfN bNL5 6C@s6s8  5 64 fLfN  ݵNL, ݇ A@A 85 : "` b9pL5 N Pw,  .&&A6 \5 6 .4 &V n&  zw|5 A@,   K  TC.`,U@ ”Ee >& & Д 1  #.504  j@0A.B> V@m: 554  & 4w5 0 ; : .984   5 : 58U BB@ "`B@-   jw p-x9#W-00A@  V x9 @Q0 tA@B6`eõE`e& N e @,A6`B:` pf:` 6 d w B6J2ҵ   .0 4 fNfL h%fLV Ee& &   t 5 5 5 ,25 4\wf@&  E `9J@m:ȵPD& & EeeҔ ȵ    &74  v&  \- @eL.4  "0 00NN557i:)*.e&& @  vfLV C@f44 4  wt& 24w@C@5-DwC@E8- Cu6.u80wC@E8- +C@  L"u.6u08wC@Ef885- <8- wrC@œ @8A6 b & xp- C@W-  u62u84 p6p8 1 0 e.Ba C@œ Š%EfÜ Êp5ŀɕ C@œ @0A. 8\ &C@ 0  p.p0  Ar.Tr0V A@q r2 r4   n ` C@s2s454fLfN (ݵNL  އ&& ܰt R4  u@.2&  5 . p-< B 9 r A4 1-1- 5 4 J N u 45 4 A6`B:` p 5 =7 3 -:p-:& .B6`Ee & &   t u6:u6.0 C.`eE<<=>A@q-<G 9A A mf >>5 <5 <4 u4 5 4  C45 4  &t D  65 4\ lB  u>u<¥*A-<'A-<!   ¥A-< p-< 4 KSs??  A@Y !DF@eep&e e&6ee(6?n?l? |?z? \? l? b? VR *wb @.Ee0! ~tB ¥   ͋o%U 5@5g5(c5^? ee  ~  U0N r@A~5  00 U  *e _ 0 5@5   U   w00NMM55512|S,??) Y  6?TITICOSYTICLTIOVCL𖢖r TITICOSYTICLTIOVCL(?)(ͭS|& ʣ , 7b^ZV RNJF:J| ,.7 ,(2$d&"  e:7 X7  85 4 5 x*  wcsF11ACPMTAACP<  `:z| BYw$ +I]'s! $D'["$#9R#m,"#%#&'I p%+%3!T'l+#%C^x%'="d%̿̾+ ͽ4ͼJͻ_ͺ|͸#ͷ$Ͷ'͵)δ.γ'Fβmα8ΰ%ί7ή ϭ ;Ϭ[ϫvϪϩϨ+ϧ%ϦХ%.Ф'SУzТСРПОtQ$wVɋ BA6WSEIF??? P6N&f%wp%7 wTTR 575 7 w65@ >ѕ ѕ--5xѕ%5l Ý|Êѕ-5PE(5< ѕ-00NN557i:)*e Ê5%6 5@ѕ,ѕ ÊΥ` Ê6& & &  f& & & Ν  & & &  f& & & Ν  l f5bEXT3&@f?&%| &   ɥT ɥVɥH  Please mount volume on : and UNStop (MCR) or STARt (DCL) : and RESume (MCR) or CONTinue (DCL) when ready or to reject request  &f     5  &f v @  ( `j0 "0 $0 &~ ԜTT&& &  @TO%  t &0 .?X&e T ~T T   >t7P b  f  f dT   BP< B #"f8&   PP$  -$ ~ &50"5   O5 75 OO  TO  ( S ( lZA9 0 $. @`55< 7~:R`7 Z  LD@:0 w! U%AM  2  : w! U%A5 A Bm@5m2 B!55 M0N& & & && & `& Ε@ ^]MhN5@xv5Fsx:P vp *$ƭ P ННȝХ0 Н58|P X&?& p  j  Py& & & & &x& `& Ε@ f`q5-Nw$w X=L0S& </& & & x& `& Ε ,& & & & & & & & & Ε  JD); . hf^X PH &  ) &w *Wte5^ep 5&9wR 7n5w25w&w&7w5 w 7,Uص E5? 000 0  p`  p`  p`0 0 0 0  p`0 0 `000 "p`"0 $0m$0'0&(p`0 (t(*UE4 4 7 0(%,J%$JJ50(fI v   A U @Ie b--->MODULE : XXXXXX r%dr$*,0DfVt$&`$4  INPUTERRORSYNTAXϺAMBIG" NOSUCHDEV*NODRIVER2 OFFLINE:+INUSEBGNOTMOUNTJ[IOERRR# n INVSPODEVZ$ INVDEVb) INCOMDEVj1޻ DUPDEVr&NONSHAREz.5NOPRIV-cNOPOOL+NOACP INCVOLLABEL ѼSETVALFAIL$NOTANSINOF11MSG"'STSCHANGINOTREADY YHARDERROR qNODENSITYNOMULVOL.CONFLICTݽINUSE$ CASSETTES.NOHOMEE INCVOLID `!INCSETID}"NOTFIRST%NOCACHE#0$MISMATCH+1%DEFAULT0+&NOMAIN;&J'NOCACHE@9p(NOPOOLH))NOMEMORYҿDEBUGNODEBUG  AINTLOGERR"4J^rҷ 0BZpָ&& TI& & &  ~& & Ε )'&1  ņ  (h (ł 4& 4 4Ŵܦ5ew , Bv     5Bw^ 5  5 2  UE   @ŇE U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  % 5 ߥ& *  + 23E Ew Z   Е-   0@A lW e`fÊ    E &f &ff  P1PѴ(&P4*P<IE.BAD - bad parametersIE.IFC - illegal function codeIE.DNR - device not readyIE.VER - parity error on deviceIE.ONP - hardware option not presentIE.SPC - illegal user bufferIE.DNA - device not attachedIE.DAA - device already attachedIE.DUN - device not attachableIE.EOF - end of fileIE.EOV - end of volumeIE.WLK - write attempted to locked unitIE.DAO - data overrunIE.SRE - send/receive failureIE.ABO - request terminatedIE.PRI - privilege violationIE.RSU - sharable resource in useIE.OVR - illegal overlay requestIE.BYT - odd byte countIE.BLK - logical block number too largeIE.MOD - invalid UDC module numberIE.CON - UDC connect errorIE.NOD - insufficient dynamic memoryIE.DFU - device fullIE.IFU - index file fullIE.NSF - no such fileIE.LCK - lock conflictIE.HFU - file header fullIE.WAC - accessed for writeIE.CKS - file header checksum errorIE.WAT - attribute control list format errorIE.RER - file processor read errorIE.WER - file processor write errorIE.ALN - file already accessed on LUNIE.SNC - file ID, file number checkIE.SQC - file ID, sequence number checkIE.NLN - no file accessed on LUNIE.CLO - file was not properly closedIE.NBF - no buffer space available for fileIE.RBG - illegal record sizeIE.NBK - file exceeds space allocatedIE.ILL - illegal operation on file descriptor blockIE.BTP - bad record typeIE.RAC - illegal record access bits setIE.RAT - illegal record attributes bits setIE.RCN - illegal record numberIE.ICE - internal consistancy errorIE.2DV - two different devicesIE.FEX - new file name already in useIE.BDR - bad directory fileIE.RNM - can't rename fileIE.BDI - bad directory syntaxIE.FOP - file already openIE.BNM - bad file nameIE.BDV - bad device nameIE.BBE - bad block on deviceIE.DUP 00NN557i:)*- duplicate entry in directoryIE.STK - not enough stack spaceIE.FHE - fatal hardware error on deviceIE.NFI - file ID was not specifiedIE.ISQ - illegal sequential operationIE.EOT - end of tapeIE.BVR - bad version numberIE.BHD - bad file headerIE.OFL - device offlineIE.BCC - block check, CRC, or framing errorIE.ONL - device onlineIE.NNN - no such nodeIE.NFW - path lost to partnerIE.BLB - bad logical bufferIE.NDR - no dynamic space availableIE.URJ - connection rejected by userIE.NRJ - connection rejected by networkIE.EXP - file expiration date not reachedIE.BTF - bad tape formatIE.NNC - not ANSI "D" format byte countIE.NDA - no data availableIE.NLK - task not linked to specified ICS/ICR interruptsIE.NST - specified task not installedIE.FLN - device offline when offline request was issuedIE.IES - invalid escape sequenceIE.PES - partial escape sequenceIE.ALC - allocation failureIE.ULK - unlock errorIE.WCK - write check failureIE.NTR - task not triggeredIE.REJ - transfer rejected by receiving CPUIE.FLG - event flag already specifiedIE.DSQ - disk quota exceededIE.IQU - inconsistent qualifier usageIE.RES - circuit reset during operationIE.TML - too many links to taskIE.NNT - not a network taskIE.TMO - timeout on requestIE.CNR - connection rejectedIE.UKN - unknown nameIE.SZE - unable to size deviceIE.xxx - unknown I/O error codeTPNUMB??????`fP 5 @ 5 @$ @  @ A w<,(w\ } } A%} } 7-Q$wч JF҇A @%  w6 w. % @ CS K $ ҇< p%@C `% 9z ^AR ч% " %% V% RH  Ї Ї ~eЇ eЇC `% "зAR Ї% 7 зЇ% Rз Ї 7 w  w w w A0wPzЇ\uh }5 5%:z 5 R5JXWPOѡ -\ ҕ[    -8 ҕ]  ҕ]N41& F b5XΥ: Υ ΥΥ/Υ   XN ^  m5$   Q3+A  톃<" 2-Bh"rr l v0 3 W s:j&?&%| B& :  ɥT ɥVɥH ѕ>lwR%(;*(>˥ ˥ ˥/ /˥ ˥  % }є -y (% * 7 _$l& &f& `& Ε  2v0& & & $pl& `& Ε  B$& & & & &f& `& Ε *΀`-  1 BBC& ˥"N ˥ ˥  ѕ ɥaɥz ђ wB@ w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w t ť ť 0B |Aaf& ͥ`̋  @  % ff&QE eN w `NA`c<2. wՀ,ŀ(@ L @   HU@ (  u G   53 : ̋    t  6݇u    5 & 5  5  56   AAaf00NMM55512 ΊP   @ P   6 w ̋ xe%  @ Хȥ   AA wAf f`E  5 _Х*  BC  5 T   f : azE  + $& .! _0 7 9A  F Z5  ע ע  5 @Ae   A D BA0u` 0ff &a(B0`B EeB `B EeB ` Ae Q I uAeAa a Q Q  ACCESSEDACPBLOCKSIZEBSBYPASSCACHECARRIAGECONTROLCCCHADEFAULTDENSITYEXTENSIONFOREIGNFPROFILEPROTECTIONHDR3LABELLRULOCKNOCACHENOHDR3NOLABELNOSHAREABLENOWAITNOWRITEOVROVRACCOVRFSIDOVREXPOWNERUICPACKSERIALNUMBERPARMENTERPROPROCESSORPROTECTIONPUBRECORDSIZERSSILENTSHAREABLESHOWSYSTEMTRANSLATIONUICUNLOCKVIVOLUMEIDENTIFICATIONWINDOWSWAITWRITEUNIQUEREGIONCREATEDIRECTORYOVERLAYVIRTUALLOGICALREAD_AHEADDEFER_WRITESNODIRECTORYNOOVERLAYNOVIRTUALNOLOGICALNOREAD_AHEADNODEFER_WRITESFORTRANLISTNONEATCHDCFFORVIRTUALNOUNLOADSOFTWAREUNLOADHARDWARE62501600800HIGHLOWSYSTEMOWNERGROUPWORLDOVERRIDEACCESSIBILITYEXPIRATIONIDENTIFICATIONSETIDFULLINDEXUSERFULLNONEEBCDICUT1UT2UT3R!;R(2v2၅)2h(V၅)Vj ; `P8Ҁ`Q8Ҁ(Rnҁ, Ҋ) Ҁ:ҁ, ! ` , 6" Ӏ" " ! `/8RTRTR!RRL/26R>\FR!P RXJ@R]J@R!l !q@wR{R!! R!@R!R!@!R!ހR!R!ހR!RnRHRHR! R XRXR!߀U!"R!, R!1R8R8D!HR!O RRRgR!o@R!t@Ҁ=:{R!8R@"8R"=: ([!l䁅l,\ ) ]@R>RJRxRRRR! R!! ! $! ! !  Ҁ=:`6Ҁ=: `6: `2: @@ =: DPҀ=: FPҀ=: BPҀ=: EPҀ=: CPҀ=:+ӡ+S!+S!=:[%R*R. R@, ]=;:;ӡ3!;;S!D;S!M;S!T;S@=:^R!cR!hR!lR!qR@=: NԡT!TԀ[,T,,](怋怃, )v}P@=:RhWhEhChDh =:RhTW hTE@hTC@hTDhT =:RhWhEhChDh =:RhW hE@hC@hDh =:[MnҀ,LnҠ]=:(!၅)=:(!Z聅Z,L )R!R!R!R@=:衏 " Ԁ" 2Ԟ" 2Ԟ =:NnҀ=:@Ҁ=:RhҀ=:Oh!O!(, )PQ=:h!Ҁ=:R!R!R!R!R=:ҁҁ `Ԇ` . ݁!݀. ݁ R݀+- j# p``. R݀+- j# 00NN557i:)*MTMMMSMFDY:w!@AU% f&.%.*,7h7~5 U57:fw!2/W!: NTԷ P UD D MlMEe00  5 !N $«5E߿%@% @ownhfwb]5 -hO 5H% qD%|@J 5UJ E>U,w @ wwwdm*%5lvU\f\UDU<:Dew!B C3!e 05d   55  %CT    j vj  5]H `    |Y|7 % Oj me7^"Z@7yJtBp8l4h5@U P5UB5U45U&5U5 5 5 ۱7x0` 5\"5P:F1Q$NAACPQ$:F1  >d8@525 ej hR# |@r ϰ \ Lm)&5 % %  |p *  Hڱ .7 0( 5Z0 555! vxvdB @!$&"%w٨ @`Volume InformationClass: ForeignClass: Files-11Class: ANSI labeled tapeClass: Unlabeled tapeDevice: Fileset ID: SETID Volume ID: VOL ID Volume label:LABEL Pack serial: BCD CODE Owner: [200,200] 4Protection: [RWCD,RWCD,RWCD,RWCD] 4Default: [RWED,RWED,RWED,RWED] Processor: F11ACP,& & & & & & & `& Ε *P 5577 7 7 7 x  UZc :ДДДД$  NPE Ae 2BPG & & @ A N @ A N @ A N e0  9 . JD( ~qA*w A, 7Ae+RPRPRPRPRPRP De e  ED HeAw Aw  `& & & & & & & `& Ε *5l(77 w+ P | .+P Е  7wP Е  wd72 jЕ,  \Е]Е  mUwd&e   Е Е Е Е Е Е Е Е Е Е Е Е Е Е Е Е 5 $&@`   & & &  f&& `& Ε *7 7 54]̂     x$7 j% $7 %v5%< |7 .wf%| %X TP ̡# {p@7q ia7[O565.  :\P Pٱ& 5"5:F1Q$AACPQ$:AP L L Bw&76% eP .͈p0z͊UplHfb͇5@*7 ,,5@5@  5500NNM55512 &p5&5p5 p5@p&wA z&wpee: b5 Yɝ5  P  5 *~@2phe ɺ < IɝEP  .0 |˰ 7 " ~m)*~9R 6N~:E5U50 55e ׇ.% 5% /%)% % %%% bw-7 Z jձw 4$ eee e%7  Z@ @1 1  8 & tԇ @ 5X]Ǧ     J< <^VPD DԱ52wt 52@   L 5|5w >xv@S M B FP1eplP "P E5U0 5|0 55|& & & & Ε ұ5h5|7 %  7 7@Ơ^ގ ! @d  ư bLD :)@+ E5U5(0 5t5d *w4m& & & & & & & `& ΕP {6z50s5 (-5 & & & & & & & `& Ε XW& J)D U5vU@& & & & & && `& Εp =&& & & x& `& Ε J *:2,  w  ť ť 0B Aa;Ts??  A@Y !DF@eep&e e&6ee(6?n?l? |?z? \? l? b? VR *wb @.Ee0! ~tB ¥   ͋o%e E% D z r 5    U0N :et ~e _ 5h  !' ȋwN ȋEe:54500NN557i:)*E% %U   waT,6h 1Y XSYSYOVn|ǀJ2lSYSYOV(po|aT  6   B~ZA90$ .@(w f    @SqAa ߇  ^e   R "A5@ -#-  wJ 7< d  4  3B7 R Ep% 8% -1% -#-4- 4-  7 p 5 #w    W-  A W @ e މ5-w `P&5 5 ""fE5@ " 4 ,E 4, w n4  w ^`&3t  70%BŠ‹ ΋ ‹΋΋A n&Vf1@A rDf$&r@D&iwhw*?T4 U7% wN W1׭U׭~- -mb\NJV'&1 N*` F*b >6d 6 . & ޫ  >~ > > b b b b ¬ ά "5ew R, Bv     5Bw^ 5  00NNM555125 2  UE Ҩ JE U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&f &ff  ` *`h6 `,B N6~ BZ,fBNZr(Zf6B`~`~`4*dƫޫDҫ ,ƫ$(ꫢ%ޫ'ޫ*>,L&-,.(213Jb5>V7(>J:n;8,zbd(nzA8bnC ClD䵬¬E䵨άFڬG欞G䵤ڬH䵴ڬI䵌JJH "L .N :PP FR RS c  H 4$4##  e l &&fe< &= e4$@4"BK 5h& " w  w  " #4# z Zw   ##@  $# 5p   w&&  #- 6-a  ~ \ e4 D4 F  <Ձ 8wEp0  & 6֤VOL1PPPЕ C~ЕD%B4444& 1   C~ 3  &&  .  Jw R4 D4 F b Fw 8" ,w &` J w  6w ¬    j "p "H " " . : :|@ E x` B ~@eTT@  & ܭh,nڭڭڭڭڭڭڭڭe  `  D h     R@&? @5E6h5-ۉ` "##5h#w" w " wRA*w$w  FB5h  ^EhLw T " 2w : "7 Uhw " 7w` #t( &tF D @#t`(t &t`Ft D IFtu* *Bw|w "- xw   * T ~׭ Jw R "B`wLfAW B    ?5h Ehw "  #4* Uh4 &4 (4 D4 F  " tw | " ,Uh4&@ C4CD   N N N N N Z f f f "H "T00NN557i:)*&fve" ɕ 4 ɋɊw 7>7<.V7 . H    " $w , " &f@e\8J 1*#-%    Rw|    -~ % &f7 7*N&  "70w 8  w $ ""  &7  4    t4 4 &4  8 :5L # w `w ~   f5  , $ "0 " #  w rس  d"`! -EO׭V W- W-   ׭F # 5h f  &fe< h&=: @e:4$@4"BK 5h& " w  ~w "&&  #- 6-a  ~ d le4 D4 F  <Ձ 8wEp0  & >֤VOL1PPPЕ C~ЕD%B4444& 1   C~ 3  &&  .  6Jw R4 D4 F b Fw 8" ,w &` J w  6w ¬    j  "p "H " "` . : x: J L%޲ B~&= $ 7e.&feH޲S~e0S~% 1  $  r r5p%å  V%r 04.0e   >  j . .D ~.l v: nF fR 00NNM55512ܭF@5@eTTTR  e ~W K ɬɋ e#  " $w  j&@ hCCD N .  #i& A&   : 5( w f`w ^2 2 @UE2  ^  D 0@A 0  77~#5&  4  " $4*E*4  Et *  7 4 4  fw )7w p`w& <-VO-L1 S132 * "׭ 5p   Ef0 f & ڤ ڤ  ~P~WD+W$%B( @0  \`~d&f& E .K a ">WDW$D% W% E&Հ w %%a 5& TT%  x 5& R~R~%5&r5&f`0  @EUw 7 4" P H"H @" 8:&@ hCCD N . 7   ^D 6 -*wr fw8 58wLZ wB T  4-*  - w L Dw @eTTTT @ CE \A7 @5E%0Z P~PPPZ # 5*0 Tw&  l z R ~  w -  "t*5 @Ee  * 4* *5*55 &fZetX~5  5-25-45-6 55-8 5  5-:-   0w&f5&:et~U%  e2~&fe" ɕ 4 ɋɊw 7X7VHV%PO%S=f&ȥR fw8 ȥ0 & ȥ0Х9  % L &w .   &  "V7w  tw "" b\ &L7 J 4    |4 4 &4  5 # w .`w &  f5  "0 " : :00NN557i:)*@e T TR@#4 &4 ( &&   ZƫX Rҫı&fe" ɕ 4 ɋɊ.w 6 77V &f@e\8R 1*#-%    Rwt :   -~ % &f7 7*N&  "7(w 0  w  ""  &7  4    t4 4 &4  0 25D # w ~`w v  f5  $  "0 "  Re. N-.  &&. H% B :B e<׬e: J rœ  e @B bB    &  P   8J&f  H  0H0 .t.   ֤԰ P ~PR~ n ~ =@#7*" w " ,f&r  m(N m&(&-V1   D7l7 h7b7^r U7J7HH70De2P~e< ̰ ~000000 5h& " w  w "XN ;r5p + &COBL W H  Wpe @5# /@A5  5 EAwE exn@`  $  @5 8%&v7 t 4    4 4 &4  5 # w X`w P  f5 ~&&  #- 6-a  ~ J e4 D4 F  Ձ wr | t l"p d"H \" T"` L. D: <: 4: ,F $R & @&? }#@@eT TR ?Q A8@     @& É4hj Uh6eh t 4 &4 ( 5h& " w  w " Ư B00NNM55512@#" w " P ~-EO9-F1*&feD  ׭ 0w 8 "w "4" -V1  *&fe" ɕ 4 ɋɊw 7h7fXV &f@e\8 j1*#-%    Rw :   -~ % &f7 d7*N&  "t7w  Vw "" D> H&.7 , 4    4 4 &4  5 # w `w   f5 ~&&  #- 6-a  ~ Z e4 D4 F  Ձ w* < 4 , $"0 " "p "H " "` 77V7    .  " w "& N "7w  pw x ""   ,"  TPe. -.  &&. %  Z e<׬e J rœ  e @ \    &  P   ~000000 7 &CL?NW K Wpei @ 8! 2@A5   5 EAE e` $  @5 pV J L%ư B~&=   7e.&feHưS~e0S~% 1     r r5p%å  V%r 04.0e   >  j . .D .l : F ~R "`! -EO׭V W- W-   ׭F # 5h f  &fe< h&=" @e"4$@4"BK 5h& " w  w "&&  #- 6-a  ~ d le4 D4 F  TՁ PwEp0  & >֤VOL1PPPЕ C~ЕD%B4444& 1   C~ 3  &&  .  6bw j4 D4 F b Fw P" ,w >` b w  Nw ¬    j  "p "H " "` . : :&A E@eT TR# `4#-5h pw x   @&? = 4 e&   e<  -4- w T"   z  w. %t,w-x&f ׬ ׬ D 2#  tw&fe" ɕ 4 ɋɊ:w B 77V&  "F7w  w "" rl &\7 Z 4    |4 4 &4  5 # w >`w 6  f5 V  d " 00ONM55512"`! -6EO׭0V W- W-   ׭F # 5h f   &fe< h&=  @e 4$@4"BK 5h& " w  w "&&  #- 6-a  ~ d le4 D4 F  lՁ hwEp0  & >֤VOL1PPPЕ C~ЕD%B4444& 1   C~ 3  &&  .  6zw 4 D4 F b Fw h" ,w V` z w  fw ¬    j  "p "H " "` . : : lOe. -.  &&. % ְ rΰְ e<׬eΰ J rœ 籗 e @ְ \ְ *   &  P   ̰ް~000000 7 &CL?NW K WpeQ @ 8! 2@A5   5 EAE e` $  @5 Xn J L% B~&=籁  7e.&feHS~e0αS~% 1籁    r r5p%å  V%r 04.0e   >  j . .D .l : F R ~## "ډw@7 UhEh  4 .Eh@A ( & P(,# ߕNQ 1,# wWW4 ׭jw "w -Fe(t &eFt D  * " "7* z zd J#  w  d"`! -^EO׭XV W- W-   ׭.F # 5h f  4&fe< h&=⯁ @e4$@4"BK 5h& " w  w "&&  #- 6-a  ~ d le4 D4 F  Ձ w Ep0  & >֤VOL1PPPЕ C~ЕD%B4444& 00 ON557i:)*1   C~ 3  &&  .  6w 4 D4 F b Fw " ,w ~`  w.  w 0¬ (   j  "p "H " "` . : : Pe. -.  &&. %   e<׬e 0J (rœ  e @ \ R   &  P   d~000000 7 &CL?NW K Wpe) @ 8! 2@A5  h 5 EAwE exn` H$  @5 0 J L% B~&= ̰ 7e.&feHS~e0S~% 1  ̰  r r5p%å  V%r 04.0e   >  j . .D .l : F R >BB               [.<(+]& !$*);^-/ |,%_>?_ `:#@'=" abcdefghi jklmnopqr ~stuvwxyz {ABCDEFGHI }JKLMNOPQR \ STUVWXYZ 0123456789 7-./% <=2&?'"5@Z{[lP}M]\Nk`Kaz^L~no|JO_myjС7-./% <=2&?'"5@Z{[lP}M]\Nk`Kaz^L~no|JO_myjС8 % B4 , B# zJb`&ffNJABEB!C D`~Be fƥH7@ 7!@w b`7"@̥fA& xEWp(EeP 5 "M&fƥ @e &   PR䵓  S S  8EWp(E`S b00ONM55512&f&fƥ#e & S S  tEWp(E`SS      @,Af&fƥH7 & % f̥$ ̥fA& VEWp(EeP | be @7,@7xA85%& w &Ba +- ʥ# . U 0   b   `     w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C f& L&4 > 14 0p Be e  e Aw @ w 6w , @ rf    e0MA UFDDU  5p 5 p ֤4v,&$P 7 ""w  ׭7 b֤ ֤ ֤HDR1et ~e2 ~  Е.8 aP~    :  rd C  e< ~rr'f p p5 p DECFILE11A&HDR2HP. 60 .IePHЕ0Е0Е200vHDR3eD&e      ~Ee0%9eP  f( C~ V1V2V3@ ,EOF1EOF2EOF3w w w 4"  Fw  Tw & & @( f  e ee e  w 4"w w " d-EO -F1 -V1wX  2   < *""7 ~7 t֤ 7 v7 &Pw ׭ ׭׭|"%Pj 4 @- HD-R1 7 77  7!f&e `  X7! 7- 7- "PR4"4 "w  w @  w 4 Հ00ON557i:)* N P5`    w wT7zw p5p T-VO-L1  5p  zw f֤e    ~R~~0 4" w @ w 6w , @ rf    e0JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC&D ȕ: |f& ȕ: f & N      v efЕ A  & & Μe   l e&f  ~ Be Ce `hbbPPP JCe @K# " bbbe&: c w & ť ť 0B Aa & & @( f  e ee e .-!"%&'()*+,/:;<=>? &f4 44 6ڤ & Ft2  :t4 .t6 . t8etf~ h&f& & ڤW%W!   &fWpdK&  je : w&f ft< \t> Rt@ HtBU&pf&4..40.H4II4&%HD%R2w6EpX&  e.+  a CHIrנU4HנDHŝ"DE׬C"OSYW UWA I%DEG%DED%CFA%IL>%E1;%1A8E p& K %Hv%HD!%R3EpeD&fe@ " #@  M~AEffCE !W AW ZW 0W 9W aW zE ʋR?P~ Pm<<JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw EeW ɕ0ы~(eɋ e % % %  11 `    B 5 %  Ce z  ` %# #$)  vAe@ Ct% . fU U U M U B eU M eU U M  D0% %D0%  a a &   `@ ` B   & A @    &f!  E D  E E C B Ί Ai*JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw f eCXCXCXCX    w,e涂 8eB e: (  @ @ C: `UC B d `eq XW dUf   <a @  W f r eeUUU \ 'e޶ T%< Nf< Df :@   e :e0e0U jAUUUU    T T T T ee(e(e(e(T $)T T TU U U U  &f& v 00$O(OM55512Ts A@Y !DF@eep&e e&6ee(6?n?l? |?z? \? l? b? VR *wb @.Ee0! ~tB ¥   ͋o%7 p7 n P wH0%8@ <w : 4w 2 ,w * $w " w  w 2 5 mr mC   JmR mJ (R2 &   ~ 4 p% `"  4 4 U0N     "%2et L~ e _ 0  - f E UU %i % ף$$ %ף w0f22f CRASH -- I/O [SA] DEVICE ERROR; CRASH -- I/O (P.STS) DEVICE ERROR;| "<8  J Df T5 a"e@  2vp( vJ n$ 6* PAT>P^SY00,ON557i:)*f 6 eE   1,1,J  1,1, 8J# , # zeH  &3'&1 ( x( n p4 v h@ t `L v XX ^ P  H  @ R 8 L5ew , Bv     5Bw |6CSD 5  5 2  UE  0  E U 5@*& E& & f&ËDef Ë )̋U&ff w eE D` bl lrw \  B eE"s    s-  Csl&f  ( d  <  4 $ @   L   X   ( p d |  d h d %d ) d /d 2 d p 7x" w . R,2  JV`| $ jbL4 PJ  J χU  v fU@7 7  <  U|rre,w  @B  $&< Bevx"A ?    Af E PAT>&ef j bpd `$ " fB` w (@f | Bĵ'ĵ%% %e$e e e & ĵ V 11@ Be w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ 8ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp B5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *X,w  8jDl@ pTeBT85l@ b@( D 0eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ p 2 p  | 0 | F |    >    z Rf&f E^`  UQ  UQ ËUI U `e004O(OM55512 ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C w 7 X V: %2   n  %    %  7 w 7  # 2 L "P &*2p p  , ,eF" t2:7    F * 277 & U : > 2  *  " > h h < h b f f f f f f f f < f f f f f f f f f f < f f f f f w 7 H F: ~%2   ^  %    %  7  h2 2 X 7ee%VM% \,  \ jp ee@wzN^e   6 * 277 & U J  B > h h h b f f  < f f f f f f f f f f < f f f f f w 7  : &%2 >    % L    % ^  7 p 7  n Z2 r E A &z7vB P \ V ^740  BB#44,0ޝ  :7@eeX!e\ NŗŗB  \weeeN,^e   6 * 277 & U  > h h h b f f X X X < f f f f f f f f f f < f f f f f 00  *2eHeH5 Jp  `HP 7>W!x B  &  &W @E .@)  `Q@&  @m1E@c  2 h > `  X  P l H &f& v f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0 eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &w 0 w && W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C eB  8 p$&w *(5<s1  U U@  &f&" D)'&M'&&**%*%0 *&* *5ND  <  EU n  Zw *D `  wNw (ww ww ww BC "&0(*7e "fSYqq1յ<pBՋ.p0p200DO(OM55512&* 0=E%0=w   f h >5>Eu J  8Ae f"( UCɗ&+(e$&% (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w j /$ ,:T < U@% DD%][%><wj  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce N   *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 0+1(e  %&p*w. f( f)f **(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w ~&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w 2( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB @  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  F P3)/ .#( P) @#**fff  &*wp. tB5(8e$8w2A&(e l4p8q  (#4=A#@)( , *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & ,e# eB&B NB  V*  eBe>  # #D #=0/H#@&0 # = e0   R0@e 6=#02/002# @#?@#040 6wh/!0/ l0/!p!0 .=p0p2w l(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w FBC "00LON557i:)*&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wZ141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( z0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416  . T  ,*1 ,U8UMwF w NB 00fep=& /e`pwv46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6 w 2 H) <* w46l0**=D  `p46 4f 64/=  @) 0  8w H46 8 e*w > =00l&8el2 0 *141612epl2l0p *) l0, *) $ )*)0,40,6 w  )   fU 6%  BA `6p 4p`4 %60 4e6p 4 88 481416  n  H b46f %8 E D/D!D l0l8epl0pɥ.ɕ w)"(. 8= . B  E  (.0,0, f 톇,, w B     .% eB U5UU 2 plp & NeՀ)*0+1(e  @%&p*w f( f)f z8Ae f"( UCɗ&+(e$&% ,*1 U8UMw" wf *B 00fep=& /e`pw8e2 ..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 08*w=p!Օ^w 2 b) 8C * ) *w\*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 Zp  8 V *`)w00TO(OM55512 C# $   D @)  6?0D)w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   Pv Ε f ne p* ~e*wb@)0,    n) <)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a |e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  wL  JwB # $ f  `* nw^)0406 l0 &  m  f A N  %**=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  0**> =00l&8el2 0 *e6p 4 8 81416   6  ..8em,0l0!D0e6p 4.) &f Z he) .  e6p 4 08*wz141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f w 2*8I *=)98 8 eB &&  U ***e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w**8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( R0 0 0 80 B0 0 0 0)#0.)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) ^&f (  e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w FU8UMwR w0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*00\OaO557i:)*==B . %NPAT -- *DIAGFATAL*- w D\$ NWF f2  H B Bl 2)\%NF>w4wf&ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & eh & eTЕ A %& e(A 8 Е A EA EЕ A A   $Е.  AЕ;      w  ť ť 0B Aaw nD&& bЕ- eaePPPЕ-$w >D  &Е. ce  Е:   B & & @( ^f  e ee e  @]|   2 QyJl)GlIllegal error-severity code %P %P %P %P %2NFile %X has illegal format%2NError during close: file: %X%2NError positioning file %X%2NUnable to locate module %2R%2NIncompatible reference to global symbol %2R%2NIncompatible reference to program section %2R%2NSymbol %2R is multiply defined%2NUnable to open file %X%2NUnable to find file %X%2NInput module checksum is %P%2NCorrection input file checksum is %P%2NError in file %X checksum%2NI/O error on output file %X%2NI/O error on input file %X%2NCommand line error%2N%VA%2NIllegal indirect file specification%2N%VA%2NMaximum indirect file depth exceeded%2N%VA%2NIllegal switch specified%2N%VA%2NIllegal file specification%2N%VA%2NIllegal device/volume specified%2N%VA%2NCommand syntax error%2N%VA%2NIllegal directory specification%2N%VA%2NMultiple output files specified%2N%VA%2NInvalid file specified: %X%2NRequired input file missing%2N%VA%2NCorrection input file missing%2N%VA%2NToo many input files specified%2N%VA%2NNo dynamic storage available %P %P%2N 5 ߥ& *  + 23E Ew ꅐ   Е-   0@A DW e`fÊ    E &  m  f A N  %|P  ^SYf  |eE   1,1,J  1,1, 8Z# n< # TeH  '&1 * " |  $   ,  T     8   X  $  L  <  H  6  >  <  (  >  0 ( & z rL & jL 5ew :, Bv     5Bw FCST 50  (r- DUt-E D  E E ܁ 2   &wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff  &[q &[q`  r   :  H       (   L ^ : : L : x ^   w . ,B  Jf 4 jbL4 PZ  Z χU Z v fU@$7 7  <  Ue,w:  B  $&< BexA ?    Af E PAT>&ef 2bpd `L$ " fB` w (@f  Bĵ'ĵ%% %e$e e e & ĵ V 11@ VBe zw 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  P aAAf@pnp C*8֋ p88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ00lOaO557i:)*;]a)wנ"å.@j  a Bw@ tŀajTI& af* n*`V @e,w .jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ 6DlljaCeH###33 & h8 * w  8jDl@ $TeBT85l@ @( D eB&  & @# v& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ L &&f w 7 X V: %2 ^  n  % l    % ~  7 w ^7  # B  >2P &*B8 8  , ,eV2 B:7    * B77 & U 0 0 0 * . . . . . . . .  . . . . . . . . . .  . . . . . &f w 7 H F: ~%2 N  ^  % \    % n  7  hB B h 7ee%fM% l,  l p ee@w^ne   * B77 & U N 0 0 0 * . h . h  . . . . . . . . . .  . . . . . &f w 7  : &%2     %     %   7 p 7   ZB : E A &7B P  Hf ^740  BB#44,0ޝ\ X 7@eeh!el ŗŗB  $ lwFeee^,ne   * B77 & U \ 0 0 0 * . j .  j    . . . . . . . . . .  . . . . . &f 00tOyOM55512w Pl5 4   fP2T    .w  V ^ fn W!   dl  , ? N w 2T Pw J? r " & 2 *dpa ^ [  6 ( Z F eH $ & e77   7 >  *BeHeH5 DZp  `HP 7>W!x B  &  &W @E .@)  `Q@&  @m81E@c  B&f  p %NPAT -- *DIAGFATAL*- w 8D$ NWF fp   B pBl 2)\%zwpwf&V+\ ~   5So9W;Illegal error-severity code %P %P %P %P %2NFile %X has illegal format%2NError during close: file: %X%2NError positioning file %X%2NUnable to locate module %2R%2NIncompatible reference to global symbol %2R%2NIncompatible reference to program section %2R%2NSymbol %2R is multiply defined%2NUnable to open file %X%2NUnable to find file %X%2NInput module checksum is %P%2NCorrection input file checksum is %P%2NError in file %X checksum%2NI/O error on output file %X%2NI/O error on input file %X%2NCommand line error%2N%VA%2NIllegal indirect file specification%2N%VA%2NMaximum indirect file depth exceeded%2N%VA%2NIllegal switch specified%2N%VA%2NIllegal file specification%2N%VA%2NIllegal device/volume specified%2N%VA%2NCommand syntax error%2N%VA%2NIllegal directory specification%2N%VA%2NMultiple output files specified%2N%VA%2NInvalid file specified: %X%2NRequired input file missing%2N%VA%2NCorrection input file missing%2N%VA%2NToo many input files specified%2N%VA%2NNo dynamic storage available %P %P%2N&f |xe,JJ+ Y 2BUTITISYSYSYCLOV~0BZ:|00xeſl00|OaO557i:)* ',| PIP>PSY~J  # #PIP Version M1900 (ANSI)PIP -- xe?TSY<\DLT $,4DILIBRFUTBDESD PU@RMIDTDDDDFEXUN PR@SPREENMEAPUP FR@TREO UFCOSBWOGR OW@SYBSRWFIBLNVSU FO@CDLDNMSR  HMRW\d^`fhNABERARPYANULUGUPETCVOCEww% B0, 8  *M- 1-f 8   - H  ~ s*wFV&  TflZ  r 5 $  1- *  -5R&RE%&V  pp e& H 2 <   <  eB  5 qU$e eB ҭw58R 58R DeB V) 5 q^U$e ff1 1  $ eB$&e*5 |.8*.0 /k-5 *0 *5 ,00**[0 ;0 w  "f( (7w!t0 w (zt 7 n 4  & ˥"Uy 6 n Ĕĥ.ĥ;+ĥ*ĥ% ~ 55&Ք Q5 5@HU@6  57U65@ -]W * %U]Օ*  e250 r T ( $  T0 L 50 I < 72 B & n %%% %%%Ee A D    5@Е.A      @a ;@ @*  %    B 6v(< 1*, ) '5"z 4 4 tt < <&EUff >$ q58* 5* &$& ˆ5w bf w%&E% 54-54- 1111 @e"%   f   C  Е[     Е]5 333*50 5  % 0&e V%e" S %%Ue" K %%U w Cʥ< ʕ[fҥ>]G~ҥ[ ʥ* ],  ] C~ 00OyOM55512ͥ*D ~5 " B& J  є~l&7 7 7 `f  0 %1  11 1 1 11$ w R5&e5 HJL   5 &1 51N ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e 6& e /& et*AHŀ ȕ Е Е Е & e & e| Е A %& eP A  Е A EA EЕ A VA   $Е. > AЕ;    w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$w t ' UD$BA &( U BQ 0 Е*  w   ť ť 0B Aa & & @( f  e ee e w D&& bЕ- eaewPPPЕ-$w j D  &Е. ce V  Е:   B&f& v '&1 %& %' %( %6 %J9 %X9 %0 |&= t&= l&< dB&= \N&< TN&< LZ&< DZ&< <Z&? 4Z&@ ,Z&A $f&d= f&tB f&NC r&? r&= r&D< r&< r&>5ew  , Bv     5Bw f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB45  5 2  UE %t Rd%E U 5@*& E& & f&ËDef Ë )̋U(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w  %ҥ[֥< , (e  5 s  D wp 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E w eE D` bl 00OaO557i:)*lrw \  B eE"s    s-  Csl&f 5%& w &Ba +- ʥ# . U 0   b   `     f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C &  m  f A N  %&   `@ ` B   & A @    (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  & &%&& %%% 2$ %% 2%%$&%%,D<&~&,D< &&2D<*&&B&5LA(&6&9LA&*&;D5>Eu   > =00l&8el2 0 *e6p 4 8  81416 D    ..8em,0l0!D0e6p 4.) &f  Le) .  e6p 4 <08*w46f %8 E D/D!D l0l8epl0pɥ.ɕ Lw< U8UMw w\ *) l0, *) $ )*)0,40,6 ,*1 PB 00fep=& /e`pwJ0,0, f 톇,, w 6     .% l eB U5UU \ plp & NeՀ)*141612epl2l0p*@<#8w \ /$ ,:T < U@% DD%][%><w  wh1  %,,:4 w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` |*weC5U5  5 5@e*00OyOM55512=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `(( L  >: 5 eCe&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w r( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( & *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B hB  $* j eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w *8I *=)98 eB &&  U **e *Nlv ΋*.2 f & #!)&eP(e && >e >E *p* whw * 8B pB Z F0 B 0Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  (DEe    *1  ˕03 "   ˔Ӕ ʥ7w X (ww H ww : w~w ,BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wdw (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  z1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w b f &* H* \Mwt82e&( 0 0 0 80 B0 0 0 0)#0.)"(. = . B  E t (.w r ) j8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)wL00OaO557i:)* C#    D @)  6?0D)w  n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e * e*w@)0, 0   ) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a Pe0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  wL  JwDB # f  `* w)0406 l0 w ) * dw46l0w *f f ! fP zŀ)B  DP5R RRR  8  **=D 8 `p46 f 64/=  n@) 0  8w 46 \8 e*wZ w  ) J  fU %  BA `6p 4p`4 %60 4)"(. 0= . B  E <(.t3kz?TLBOPzLB  )SY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA%VA%VA%II/O Error Code %D.QI/O Error Code %D.Command syntax errorIllegal switchToo many command switches - ambiguousOnly [*,*] is legal as destination UICIllegal commandIllegal "*" copy to same device and directoryBad use of wild cards/characters in destination file nameExplicit output file name requiredAllocation failure - no contiguous spaceAllocation failure - no space availableAllocation failure on output fileI/O error on input fileI/O error on output fileIllegal use of wild card version or latest versionFailed to create output UFDInput files have conflicting attributesWARNING -- File may contain corrupt data. VBN=%B,%PFile block has Forced Error Bit setOpen failure on input fileOpen failure on output fileClose failure on input fileClose failure on output fileFailed to detach output deviceDevice not mounted or other privilege violationOutput file already exists - not supersededFailed to mark file for deleteFile is lostVersion must be explicit or "*"Error from parseFailed to delete fileFailed to attach terminalIllegal response - try againCannot exclude *.*;*Cannot find directory fileFailed to attach output deviceFailed to get time parametersNot a directory deviceFailed to write attributesFailed to read attributesFile not lockedFailed to enter new file nameFailed to restore original directory entry - file is lostCannot rename from one device to anotherFailed to spool file for printingFailed to open storage bitmap fileFailed to open index fileFailed to find file(s)Cannot find file(s)No such file(s)Failed to remove directory entryDirectory write protectedNot enough buffer space 00OyOM55512availableFailed to truncate fileCannot truncate this file typeIllegal EOF value))))))** 6 5  5*+5U5 5   BBCU% B  v $5 % &7 (   <'UfUh<'&&< ^<' Е ȕ-ȕ  &   d*  &B&)Pe5)E$ %& e elUU) % )!e8 e\^$% 5R  )eH~& -- && )'& A0 & & & & f'& & & Ν )  % |U)& 2&)* "B&C*eD eD'P Е; B N' 8&L* _*  %80чw v& LB&`  l'  V111 D J P M >  * 'U%    tM D  E e'@P  & SY&  & SY& 5 '%  ' |) &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e Get Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ FileGet Command Line - "@ File" must be only command on line  7SY62 w,& & A&?mE77E 7 !t0 ~t H7 X7 V7 (  7w 7 "]0ȕ` Eȕ` mƢ D[ h  E7 7 7 7  AEl 35tElhd`55V5 @E : 80N   X 8*%*w 5 f@apunhj uhlB$ waw 8 8wn&  *AdBbAet& f  P aAAf@pnp C*8֋ p88*ËhAB ArBpuhɥ@&@af& ѥ"N  &  @aur pɥ@x`f Va`& WaWz  ɥ"N  ajou-nhwfɥ;fa)wNנ"å.@j  a bwb@ RŀajTI& af* *`V @e,@aw >@ajjlj ɥ@Gaujk,bp 5f f‡ ȕf  ق eSY e,5 funhw@e,aja`W- f`nwuhnw@ Dllja!CeH###33@#  & 8 *2AAw @a 8jDl@ TeBT85l@ N@( D 4eB&< 0# 4An5j)f & 2/      RՀa@|  0 b l f   w `````D<(,< "`<(<8<&3 %N3 %: %6 %' %& % 2 % 2 %7 %7 %$5f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.00OaO557i:)*  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0|CECw`m~zEt5U 5s* `*V  ht7V jlJ# 5* w &*$ -5058BE%8 %05 9+E7 E85 5(<  "U+5Ufw8wD0 >**,+-5,w.&  * f'+%y(w+t!+w+k#, f w e| w z  L3*. ,^A vf<*8&,$( ** e+E8J . 587 E&(B, ŋ5T  | Ȃ b7 f E,w@ 6w>5  >B TȂ $w20 >* Hˤ7*,DB& | e7 f&eB .fee e< 77 ă X ā<&eV5@  7 fĖ% .%5 &%& *&A *&dA 6&lC 6&pA  n w7PU5 5 U85 UX ؿRP D w7 B:5;eH 5  |5< 58-*5t 50l   d2,w7 Ҿ<5f2-.- *5z&!վ"!mfpl-- \$58 L&<ew U G5 !70x-pr> b`l0e!t0 X p    5 p# wh0 >f Łw5L  77= 5 eȵRRRJeb 2  EDfVX5     5 5vR 8w58 xE, n * ^r j< L*5> b@wbX VXeH <B~ f&  ہ D<# $ H,  f 0 @50 v   pN5 5x  p# )5X# & 0  0 F# ~w27=7f  !i w 55f&ֵ!f  w*w'57, =ֵ \ELf&'c,55>E# #  fN  f8w278eB2!LA )𝊺* %6 %' % 2 %X900OyOM55512  0 > 65 (5(U  & T   5f!,&P7     vBeAeB  U U w* 0nA |w2fwB@ : 辆~ ,w (,ŒE 7  7 jf C!C& wF4f J&f  *wH `w  w7"0 *LA)D* ->&*%* *1* % 2 |%7 t%|4L%X(%P,%P)[%O,%O](%M.)%X(%P,%P)[%O,%O](%D.)  Vl(8$D@  TD@lX5~, (7   >7 7  be77X< ~E7Pf B we7e 7e7f J5 .7P. !0 >5 >E505 fN 505BU    7 5 7  zJ< ~ 5U5U8UT 8V0,(e(BAPP~  . w.58 9+# f w ~wJ &(e( ~ Е Е  PPP& <5X< Җ% BA B~en< 5 Ħ=< rЕ Е P~ < Ne1" " " " " "  TTT T = d=et=K= Е Е 7E%0 A507 J.,wb58ο5 Ef  \w  2J7 D rRPPPtP~5'H ,7)$7 "& & & & t& & Ε &.58 tfe<5=tbbebe 5"w55 Е Е = *=  f hhFZ  %5 @A  5 @A JH   w`@ 7`mw m\A 5 @7!XR%Q <  4w 8< (@h t :w7 ,5  4<F< .% 7 2f fw f$ZW lT 5 w 5Rf,0 &-~ =T< Е  P "wHJ<XE$50 9+5f wfHBx5$ 1H1J1L x51N x5  1 5,5R1P@x555@ 1V1X1Z1B1D1Fd51  *%&)/5 f 9F/f w  ww 7 8UP  pl .7P@Z4P &ME X%+H HAl 2  Hv71e00OyOM55512 U ` ~ T~$Ņ&  |f F / ɞ 8 hȆw D< s* LJ<  7 U&  FD7P$>P ,E >)fe4e ͵@@& f es*5 / / ȿ ǰw bUt 4w^7PthP Z%EJW d&B#  B w z l 2  \  ,!/ whwf&eB >.f$e$e  e< 77 ƒ V<&eV5@>  7 –% 89f"e\e!e 0 5f 2* eA  %:9 %6 % 2 %& xQzSYt:#zSY< < [0,0]. blocks free, . blocks used out of %N%N%2A%O: has Largest contiguous space = . blocks%N. file headers are free, . headers used out of 7 6 wD5Dw8 Df$b<&< Z<  b@wb!# "/p  p 0 w *wVnыѥ ww w7 " C CC%~ `eeww f  f$<&< B<  J(wJ!# /p  p 0 0 46 ? <<T  FwA A 0 4p6w7 w wZ< e\^< ws*+f Ӂ < lj f Ֆ%< ~T< Е.Е Е & & & & && & & Ε {) = $L< '= & & & & && & & Ε O) v|L< 2= D< L= H< Е.Е Е & & & & && & & Ε )& R N  6  7 7 7 7  `A  ~  N@ =ܿ m~A mxhw b JOw r  e,w &  ~w~ \--7 7 xU JE7PP t;Ed< eB e6p 4&* 05l5dSY  s*5@ 54 2wt < wwȇ ~·5% ( l( (s* 55w7s*$0 &eBC $    * 7:wA  1 PH50 E%87h.7 Ƿ57%wl7-7 57s* X F |{roid00OO557i:)* ^YSNEw7=(*"-!--& ΄̋   ԋ4 57s*&=.wT77ƀ 77ƀ 77 05w %( %.|xe,  66 Y ``Y &[q Y 2x `TITISYSYSYCLOV0x Z * 00xeſRWECD@'` PIP>PSY\  #  #kz?TLBOPzLB  @ L P \ ` Delete file [Y/N/G/Q]? The following files have been deleted:  xQz00OyOM55512SYt:#zSYN *     @ \ |\ L \ @ PIP Version M1900 (ANSI)PIP -- SY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA%VA%VA%II/O Error Code %D.QI/O Error Code %D.Command syntax errorIllegal switchToo many command switches - ambiguousOnly [*,*] is legal as destination UICIllegal commandIllegal "*" copy to same device and directoryBad use of wild cards/characters in destination file nameExplicit output file name requiredAllocation failure - no contiguous spaceAllocation failure - no space availableAllocation failure on output fileI/O error on input fileI/O error on output fileIllegal use of wild card version or latest versionFailed to create output UFDInput files have conflicting attributesWARNING -- File may contain corrupt data. VBN=%B,%PFile block has Forced Error Bit setOpen failure on input fileOpen failure on output fileClose failure on input fileClose failure on output fileFailed to detach output deviceDevice not mounted or other privilege violationOutput file already exists - not supersededFailed to mark file for deleteFile is lostVersion must be explicit or "*"Error from parseFailed to delete fileFailed to attach terminalIllegal response - try againCannot exclude *.*;*Cannot find directory fileFailed to attach output deviceFailed to get time parametersNot a directory deviceFailed to write attributesFailed to read attributesFile not lockedFailed to enter new file nameFailed to restore original directory entry - file is lostCannot rename from one device to anotherFailed to spool file for printingFailed to open storage bitmap fileFailed to open index fileFailed to find file(s)Cannot find file(s)No such file(s)Failed to remove directory entryDirectory write protectedNot enough buffer space availableFailed to truncate fileCannot truncate this file typeIllegal EOF valueGet Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ FileGet Command Line - "@ File" must be only command on line File ID %P,%P,%O%N%X Read attributes error - Storage used/allocated for Directory %2A%O:%N%Y %2Z excluded%N%N%NTotal of %T./%T. blocks in %D. files%N%NGrand total of %T./%T. blocks in %M. files in %D. directoriesDates from %Y through %YDates before %YDates after %YDay of %Y%N%12A%5A%3S;%9<%Q%3S%9>%X(%P,%P)[%O,%O](%M.)%X(%P,%P)[%O,%O](%D.)[0,0]. blocks free, . blocks used out of %N%N%2A%O: has Largest contiguous space = . blocks%N. file headers are free, . headers used out of xe?TSYÌЌЌЌpDL٪הTd>DIBLIBBRBFUB TBBDEBSD BPU@BRMBIDBTDBDDBīDFBEXBUN BPR@BSPDREDENDMEDAPDUP DFR@DTRDEODUFFCOFSBFWOF̫GR FҫOW@FثSYFޫBSFRWFFIFBLFNVFSU FFO@FCDHLDHNMHSRH  |&00OO557i:)*(*LP dNABERARPYANULUGUPETCVOCE-%Df @w%&E% 54-54- 1111 @e"%   f   C D@ Е[ P= H= @=  Е]5 333*50 5  % =&e V%e" S %%Ue" K %%U w >Cʥ< ʕ[fҥ>]G~ҥ[ ʥ* ],  ] C~ ͥ*D =5 > H;& ; > є~M&7 N7 N7 Njf  l>%1  11 1 1 11fNbN^Nw `=R5&e5 HJL   5 &1 51N 6 5  5*+5U5 5   BBCU% B  v $5 %LLLz ,7 M   MUfUh&&,H ^ 9Е ȕ-ȕ  V   ݠ < VBVPeM5)E$ %& e eLUU  % !eL e\^$% 5R fG `G"eH~ --  @,8L AL ;& & & & f@& & & Ν   )  % ;U, 2V \;BVeD eP Е; ,;B  8&Š ؠ  : %  K @U%   |K tM D  E e@@P  BK& SY&  ,K00OyOM55512& SY& K 5 @%  ( J)L &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e HFKG ,9 7ESYHH "9wH& & A&?mEHE7~HxHzH7xHE 7dH !G 8G $ 7 G7 GH7 H FF x87Fw 7 G]|Gȕj X8Eȕj @8m^GD>F6F 8[BGG   E,G7 zG7 (G7 &G7 $G A GfGEGNGNG 35FEFFFF55F5 @E F F:X   X %w p65 f@apunhj uhlB$ waw 8 8wn&  h6*AdBbAet& f <6 P aAAf@pnp 6C*8֋ 588*ËhAB ArBpuhɥ@&@af& ѥ"N  &  @aur pɥ@x`f Va`& WaWz  ɥ"N  ajou-nhwfɥ;fa)wNנ"å.@j  a bwb@ 4ŀajTI& af* *`V @e,@aw "4@ajjlj ɥ@Gaujk,bp 45f f‡ ȕf  `4 eSY e,5 funhw@e,aja`W- f`nwuhnw@ 3Dllja!CeH###33@# 3 & 38 *w 2@a 8jDl@ 3TeBT85l@ 2@( D H3eB&< 2# P3An5j)f & 2/      RՀa@= < /0 b l f   2w 1`````TA, "p(8vA==j=lf=>? >?LAHA >AA=4=5>nAN?jAJ?7 *E  7 E7 E e7ZA7DX  ~,AE7P@  @w:=De7Ae 7Ae7A = 5,A J7Pp@ !0 >5N@>E@@505 fN 505=U    D7 D5P= <C7 C  zJ  ~ C5 =U=<<5J<U8BO B/%; ::BA $/ B~e /5N> >={ .Е Е > <.P~  .>1" " " " " "  >TT T 3 e$ f.Е Е A7AH:E%0 A507 A Jtw58:5b=EZ=  w  @AXA7 RA 9=PPPP~5<'9 n=7k=`=f=7 d=& & & & & & Ε &p958R9 8e05;=bbebe -5d<w5:5L<Е Е 8l *`   hh<8  g85 @A  O85 @A 88X8   w`?@ 7`?m^8?w ?mR8?7A 5 ;;7!77%Q7 <  4w F?H75 .@7 H?w7 :?5; ? *?v;F +%> 7? v lw ,$RW L 5T7 >w> > 5:: &->T +Е  P "wJ X Rd RdRdr RdRdr 7V>f:26@7(6R~  6>5: 7 6 66: +7 >w h6 5qU9 7*t6p*): :::w (&C ``5c5 Ve ) 00OO557i:)* 5&Е( )Е, )Е) eff ]    e 5 Е/ fe e :Е CЕ @ L e 5y Е Е  a& Μ& Μ  (e &Е[ 5ЕR5ЕW5ЕE5ЕDЕ,Wt~]&% . d % e `fe i X(e&Е Е Е  e& $ fAЕ C~&ɋPPЕ-PPPЕ-PPЕ PPЕ:PP& 8(Е.w P&&CDl5o5 oe ' z 5&Е( h'Е, Z'Е) Feff ]    e 5 Е/ fe e Е 4CЕ @4L eE 5x Е Е  ~z& Μ0& Μ1 &e `&Е[25ЕR5ЕW5ЕE5ЕDЕ,Wt~]R%6.  %6e8 `fe6 %eRЕ Е Е  eR $ fAЕ C~&ɋPPЕ-PPPЕ-PPЕ PPЕ:PP& %Е. p169E09:0487 8 T 0w 4ww|4 JUX4 4v8444f8544 E8w5@4w&D0 fw5  hw5 3wT8U d8  5N8*8 3w5 3wr f~| ~ e4wp P~| H %%( P~:|  $fwfw% /Uf7/UV72Ť2 ~/5<7_wYt/2yl/.Nd/Qn\/MQT/w\qH/wPG:$ |f " \:|7 155 F17 H1 H550101w5 55 55w>1 !3U01 UE- fff f & & f1  wRE0,vE061  vE0f  E8U,URq QE,  C6 UR f=E,6 f1 f1  !5,5h45^4 2&ff+ +w*+    * w+ee wl+vvv v v vММ Е:5@>+  +,,,  B~ n  Е. ZЕ; `  53  '0f|Е PU2 5 f.. +Y +++~++l  :$l&  &.w&5+ *5U8 6&35  5U-$&   *&+*"+*Uz- < w J7Ph--*)-))(w56- )5 zw5|*  )5U85, zwPp),P w>E,:$50 95, w|Bx5$ 1H1J1L x51N x5 ( 1 5@,5R1P@x5",55@ 1V1X1Z1B1D1F:x(5+1  *%&5+  9 w ( ww 07+ N:Ud+ & l J7PT+n'H+P c#p # p 0 0 46 P? R<'# + F+w+++A A 0 4p6wr+7 ^+wZ+ N+wH+  e\^ w`f 2  ++ f l%   VЕ.Е Е & & & & && & & Ε {)é   ߩ & & & & && & & Ε O),*.*$*&**"* ***     ~   jЕ.Е Е & & & & && & & Ε )& ) !))  ~)z!)z)  )7 `)7 ^)7 \)7 Z) H!`A  ~  @ = !$ m)A m))w ( JOw H $  e(w (  ~w~ (-((((((-(((~(7 |(7 z( :U# E7P##P ;E#J eB * W3  q, q,# H׭H    f Z:% w8w> :U" e7P""P _E"# Y& & & & T |& & Ε cRN " " "00 e p 0 -h"-^"$%X"6N" J"F" | /` L' v$Z: "" "-" -!e!w ! C z7 !7 !7 ! wwC BA 5F5>SY!!! 5 5 2w: < w!w! Zˇ5% \ \ X \ 55w7t!:$0 &eBC $  p   * 7!w(A . 1 P|50 E%87 7 57 % wH7 h7  d57  X F \ [ R O I D  > 9 3 . % w7 (*"-!--& R̄̋   ԋ4 57&=-w077 77 7|7{q 5wZ E$Z $w` $ $m$$#E5nUf5  Yb  7 @:# 5* 0w6 d&3$ -5058BE%8 %05 9E\7 TE85L 5(  "Ρ5Uzw^wH0 >**t+5(,wX&v  * f'%y(t!?wwk#7 fp"t"l"p"`"n"X"f"T" w^"F" e<" @"w :" D" T :3*.   !!!!!!!!** e`E8 5v!7 `XEd!(B,N! >* Ť7*FZB&  *e7 N  8w7PU5\ p5 U85tUF @P  w7 54;eH 5: 5Z 58-h5 50  8 d2w7 d :<52-z.-r*5&!="!-j-d $5 &ew (U G5l !7000OP557i:)*- l0e!F^ X p    5 p# wt0 >f ~w5  $77= 5 eȵRRRJeb 2  EDfVX5V     52 5(xvR: 8w5 Ev: 2 * j < L*5 w̾ VXeH  B~ f&   Z # *  p :f 0 @50    pN5  5 p p# )5# & 0  0 F# w>7=7 : ! w 5X5L&:ֵ! : w*wfa\57,ZV=ֵ F\ELf&'ܢ55>E# #  f  fw7eB! )*0 > 65 5U|rrj& ܿ   :5>::!,&P7     BeAeB  U U wT 0 Nw\:wB@  n f* w  (,@v<E 76  7 TP C!C& w0 J&f >: *wr `w 840w,7"0 * )* -&*%* *1*w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA |EAa$ & & @( Tf  e ee e &f& v '&15ew , Bv     5BwD 5  5U E U *5@*& E& & f&ËDef Ë )̋U&f 5%& w &Ba +- ʥ# . U 0   b   `     &ff &  m  f A N  % ,XX($4T\8<d| $LH0PdpT\4lt8xhL|xe,3lY Y &[q$Y 2ɀ.TITISYSYSYCLOV00PyOM555120XZ, J TITISYSYSYCLOV(:kH0xe|0xeſ.'N PIP>PSY  # #kz?TLBOPzLB  ( , + , r jܾ &[q &[q` r r  r r p  r r  \      x  \    & , 8 $ l J )  + \ ` ` Get Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ FileGet Command Line - "@ File" must be only command on lineW >7uSY 4w& & A&?m\E77E 7 !R B J7 &7 $j7 h  7w 7 ]ȕ jEȕ Rmp *[00 PP557i:)*   E7 7 7 ~7 | AdE\ 35BE:62.55$5 @E  r   X %w 5 f@apunhj uhlB$ waw 8 8wn&  z*AdBbAet& f Nʖ P aAAf@pnp C*8֋ 88*ËhAB ArBpuhɥ@&@af& ѥ"N  &  @aur pɥ@x`f Va`& WaWz  ɥ"N  ajou-nhwfɥ;fa)wNנ"å.@j  a bwb@ ŀajTI& af* *`V @e,@aw @ajjlj ɥ@Gaujk,bp 5f f‡ ȕf , rȂ eSY e,5 funhw@e,aja`W- f`nwuhnw@ Dllja!CeH###33@#  & Ƚ8 *Zw f@a 8jDl@ TeBT85l@ Ƈ@( D ZeB&< # rLJAn5j)f & 2/      RՀa@H * 0 b l f   $Ʊw T````` , " ( 8* Ew`rmLHEB5U5~ .Yx  j7$ l(# 5* Ծwڻ &3$ -5058BE%8 %05 9E7 E85 5(   "5\Uw(w40 >**t+5,w&  * f'—%y(t!?wwk#7 f wv el pw j t <3*.  4,(** e`E8 0 587 E&(B, 5"  JN  b7 ` Ew0 8w.5   V $w40 >* J7*ZÝB&  e7 f&eB Ƀ`űfee e< 77  &  &eV5@  7 4%       w7PUr5 5 U85U64~ 0P V w7 5;eH 5 Z5n 58b-h5R 50J   d2w7 <5z2-.-*5X&!"!KNJ-~-x ~$5 *&ew йU G5 !70- rpl0e!4 X p    5d p#b wx0 >f &w5*  77= 5 eȵRRRJeb 2  EDfVX5     5 5R( 8w5H E<(  * nP |< 4L*5 twt6 VXeH  B~ f&  Ł  # j 00PyOM55512  x(f 0 @50~    pN5 ^ 5V  p# )56# & 0  0 F# wB7=7 ( !G w 55&(ֵ! ( w*w5l7, =ֵ  \ELf&'€55>E# #  fN  nf8w278eB2! )h*  0 > 65 858U0$& f   $(5(!,&P7 f    BeAeB  U U w: 0 wB(wB@ & d\ Hw (,E 7lj h 7 jf C!C& wF4 J&f $( *wX `w w7"0 *)"* -&*%* *1*  File ID %P,%P,%O%N%X Read attributes error - Storage used/allocated for Directory %2A%O:%N%Y %2Z excluded%N%N%NTotal of %T./%T. blocks in %D. files%N%NGrand total of %T./%T. blocks in %M. files in %D. directoriesDates from %Y through %YDates before %YDates after %YDay of %Y%N%12A%5A%3S;%9<%Q%3S%9>%X(%P,%P)[%O,%O](%M.)%X(%P,%P)[%O,%O](%D.)  \xXZ    5F7   :7 7  ^e77  ~E7PN > Hwe7e 7e7 n 5 J7P !0 >5>E505 fN 505 U    7 5 7  z  ~ 5U5U8U( 8V0,b(e(BAPP~( ʺ *w*58 9# Pw zw (e( ~ YЕ Е  PPP&  5  ɖ% kzBA d B~e F5 H=% *Е Е H P~ . -1" " " " " "  TT T   e  Е Е 7E%0 A507 Jtw^585E  Xw  ,D7 > :PPPP~5' 77 & & & & & & Ε &58 .e 5 bbebe \5w5P5Е Е V> *2   hh"  5 @A  5 @A    w`@ 7`mw m$A 5 V7! %Qp <  4w 2 $@0 · 4w7 &500PP557i:)*  :  % 7 . bw $W  5 w 5z &-xc  VЕ  P "wD  Rd RdRdr RdRdr 7Bf$@7R~  "5 7( |7 w  5qUT Һ7*p*) w &C `2555 e 6  5&Е( Е, Е) eff ]    e 5 Е/ fe e :Е CЕ @ L e 5y Е Е   & Μ& Μ  e &Е[ 5ЕR5ЕW5ЕE5ЕDЕ,Wt~]&% . d % e `fe  e&Е Е Е  e& $ fAЕ C~&ɋPPЕ-PPPЕ-PPЕ PPЕ:PP& Е.w &CD>5A5 e z 5&Е( Е, Е) Feff ]    e 5 Е/ fe e Е 4CЕ @4L eE 5x Е Е  ~$& Μ0& Μ1 e `&Е[25ЕR5ЕW5ЕE5ЕDЕ,Wt~]R%6.  %6e8 `fe6, :eRЕ Е Е  eR $ fAЕ C~&ɋPPЕ-PPPЕ-PPЕ PPЕ:PP& ZЕ. Delete file [Y/N/G/Q]? The following files have been deleted:  DE(Lhx7 r  bw wVw JU ".5 ξE8w5@w& w5  hw5 hw U   5 8w5 wr f~j ~ 6e4w P~j H %%( P~(j  $fwfw% "UUT2 5_wY2y.NQnMQw\qwPG g ķwE UU  ~ e~ d1E5f ʁ95< Xe4Eh5$5Z =5Vw ŝVť-ť*45  wv>($ jf ˱ \(j7 &5 7 5zw5 `B 5Lw 3Uj1 UE fff f & & f1  lwRE$NvEZ61  vE@f  E8UURq (w5v 5 w5  5U850 wP*P Pw>E($50 95 wBjBx5$ 1H1J1L x51N x5  1 55R1P@x5b55@ 1V1X1Z1B1D1F(5 1  .*%&5  9 lw  Z w*w 7( (U  l J7PP MEj %+j HAt2  jv71&e U ` ~ T~x& p \(f F `z( R 𹆆w   L  x7 (Uz n λD7PxlP ,EN >)ne4e ͵@@& f e5  z( x wD (U w^7PP %EW d&B# 8 ɰB w h    Z(! twhwf&eB ,ȃ`űfxexe tep< X7UJP7 N 6 1.) &eV5@  7 % xQzSYt:#zSY [0,0]. blocks free, . blocks used out of %N%N%2A%O: has Largest contiguous space = . blocks%N. file headers are free, . headers used out of 7 6 wD5w8 F$ &$ \<  dwd!# "Ap j p 0 .w ,w$<ыѥ ww w7 " C CC%~ `eeww f 4˷ $ &zv$ D<  LwL!# cp R p 0 0 46 ? < "  FwA A 0 4p6w7 w w  e\^O w`¦f vʁ )  dlj f ʖ%9  <  Е.Е Е & & & & && & & Ε {)_    {  & & & & && & & Ε O) v|    d    P  Е.Е Е & & & & && & & Ε )& R     7 7 7 7  `A  ~  @ = m~A mxhw b JOw  @  e,w &  ~w~ \--7 7 z(UX LE7P\vPP v;E2 eB , W3  q, q,# ׭ V \ " LZ(% Զw8w (U~ re7P~P _E`# Y& & & &  j& & Ε c   00 e p 0 --$%6   J/` ' 2$Z00,PP557i:)*(  - -evw t C z7 \7 Z7 X wwC BA 5:52SY 5 5 2w( < fww 5% J nJ · P 55w7b($0 &eBC $  Կ Dβ  * ܾ 7wڻA  1 Pj50 E%877 57%wn7h7 X57w X F JI@=72 ,'!w7 (*"-!--& ̋   ԋ4 57&=-wV77 7u7t 7j7i_ ^5wPIP Version M1900 (ANSI)PIP -- SY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VA%VA%VA%II/O Error Code %D.QI/O Error Code %D.Command syntax errorIllegal switchToo many command switches - ambiguousOnly [*,*] is legal as destination UICIllegal commandIllegal "*" copy to same device and directoryBad use of wild cards/characters in destination file nameExplicit output file name requiredAllocation failure - no contiguous spaceAllocation failure - no space availableAllocation failure on output fileI/O error on input fileI/O error on output fileIllegal use of wild card version or latest versionFailed to create output UFDInput files have conflicting attributesWARNING -- File may contain corrupt data. VBN=%B,%PFile block has Forced Error Bit setOpen failure on input fileOpen failure on output fileClose failure on input fileClose failure on output fileFailed to detach output deviceDevice not mounted or other privilege violationOutput file already exists - not supersededFailed to mark file for deleteFile is lostVersion must be explicit or "*"Error from parseFailed to delete fileFailed to attach terminalIllegal response - try againCannot exclude *.*;*Cannot find directory fileFailed to attach output deviceFailed to get time parametersNot a directory deviceFailed to write attributesFailed to read attributesFile not lockedFailed to enter new file nameFailed to restore original directory entry - file is lostCannot rename from one device to anotherFailed to spool file for printingFailed to open storage bitmap fileFailed to open index fileFailed to find file(s)Cannot find file(s)No such file(s)Failed to remove directory entryDirectory write protectedNot enough buffer space availableFailed to truncate fileCannot truncate this file typeIllegal EOF valuexe?TSY<<<<\\\d ܄|۔tl ۬ۼDI0LI0BR0FU0BTB0DE0SD 0PU@0"RM0ID0TD0DD0DF0EX0UN 0PR@0SP2(RE2EN2ME2AP2UP 2FR@2TR2EO2NUF4CO4SB4WO4GR 4 OW@4SY4BS4.RW4FI44BL4HNV4SU 4FO@4CD6LD6NM6SR6  joty~:>~NABERARPYANULUGUPETCVOCE-%D]G~ҥ[ ʥ* ],  ] C~ ͥ*D r 5  &   є~81&7 P27 N27 L2f , %1  11 1 1 11111w 6 R5&e5 HJL   5 &1 51N 6 5  5*+5U5 5   BBCU% B  Tv $5 %D0<040T 7 1   1UfUh&&+ ^ NЕ ȕ-ȕ  >     >B>Pe05)E$ %& e ed0UU  % !e00 e\^$% 5R * *"eH~~ -- ~~ (/ A & & & & f(& & & Ν )  % U 2> B>eD eP Е; vB  8&   4 %--w 2/& LB&`    V111 D J H/ M >  "/ (U%   / tM D  E e(@P  .& SY&  .& SY& . 5 (%   t.)|0 &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ & & @( f  e ee e &f& 00 \/J T/J F L/J 5ew D, Bv     5Bwn 50  (r- DUt-E D  E E ܁&w8E U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f 5%& w &Ba +- ʥ# . U 0   b   `     &ff &  m  f A N  % f|,H Y /SYSYTISYOVvdvRtd < \[1,4]%NPMD -- File open error %D. on file %X%N%NPMD -- Task image I/O error %2R%N%NPMD -- I/O error %D. on file %X%N%NPMD -- Bad address %P%N%N SNAP TERMINATED - REQUESTING TASK ABORTED%N%F%25SPOST-MORTEM DUMP%3N%F%25SSNAPSHOT DUMP ID: %D%3NTASK: %2R%37STIME: %Y %2Z%N,2l"&*,0$&L\`t΢ Y$# v wx |z RR= h5L f 5< ^ 5, ^ 5  J 50 J (  TnE  +D&55@ @ ĝ eA   z P@ w RJ! *B-75@ G 6G\ \ p w&\ \p  w`7&E7 7  mz1 1   d  Z &A&5 8JEw&e&B w7  @5$l l $   500DPyOM55512l<&l Ee & $v  %w F&fp@ t@l  <m:@ 7w&f(B E EtCe @7 E`7eB 7 t $ B&57  77lw |V1>?LBZ f @ @'&1 lܱ l¶ xb xܲ  > 0 f   r Z ̱ھ5ew , Bv     5Bwb x|5  5 2  UE ` ְ|"^E U 5@*& E& & f&ËDef Ë )̋U&ff  l` ܱ`xܱ`ܱ`ܱ` `l"<%<'<)<̱+  # #D #=0/H#@&0 00LP?P557i:)*# = e0   0@e 6=#02/002# @#?@#040 6w /!0/ l0/!p!0 .=p0p2w |(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w HeE D` bl lrw   B eE"s    s-  Cslf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wZ141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416 h x  R 2eB  8 $&w *(5<s1  U U@  .f&" L)'&M'&&**%*%0 *&* @*5ND  <  EU v  b&f ,*1 U8UMw w B 00fep=& /e`pw,46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6 (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w (*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w f00TPyOM55512&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@&|&  f&&  e#e|& f&&G& & & & && '&& 89f"e\e!e ( 5f 2* eA w b*8I *=)98 8 eB &&  U ***e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w**8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( ~0 0 0 80 B0 0 0 0)#0.)"(. = . B  E p (.w |eE D` bl lrw 8  B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) r&f <  e) .  e6p 4 :08*w:=p!Օ^&f 141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ ZwJ U8UMw w.0,0, f 톇,, w $     .% eB U5UU plp & NeՀ)* ) ̫ ~7 F5 5@ 5@wtSE* *e 5@ D ~4  `Ϋ L·755@U &7U 40 Z  5ܱ,@7 7 w!w"5fmn hD&e T N7z p H P,l3XLTq$> A jA b / .$Ћ~W ѕXW ѕ  wD w>7 7 vw<x vv > 05A<E Wt`R~7 w<" e> ^ v<  wP50NB47 2hf&f̧z B~ZA90$ .@(w f &"   @&fA EAa Ƶׇ   & & @( f  e ee e (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R &f 00\P?P557i:)*ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf h & eJ6& e6/& eL*AHŀ ȕ Е Е Е & e & eЕ A %& eA Е A EA EЕ A A   $Е. h AЕ; :     w  ť ť 0B Aa & & @( ~f  e ee e w 8D&& bЕ- eaeMPPPЕ-$w D  &Е. ce  Е:   Bw  n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e * e*w@)0, J   ) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a &e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  b, T  (wL  Jw B #  f  `* w)0406 l0  5 ߥ& *  + 23E Ew Z   Е-   0@A LW e`fÊ    E &f **=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  0**> =00l&8el2 0 *e6p 4 8 81416   6  ..8em,0l0!D0e6p 4.) &f Z he) .  e6p 4 08*wz141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w >     .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f %NPC: %P%10S%VR%2NREGS:%5SR0 - %P%3SR1 - %P%3SR2 - %P%3SR3 - %P%2N%10SR4 - %P%3SR5 - %P%3SSP - %P%3SPS - %P%2NTASK STATUS: PRIORITY: DEFAULT - %D. RUNNING - %D.%3SI/O COUNT: %D.%3STI DEVICE - %VA%S%2NLOAD DEVICE - %VA%5SLBN: %O,%P%N%NPROCESSOR: %A%N%NEVENT FLAG MASK FOR <%D-%D> %P%N%NCURRENT UIC: [%B,%B] DSW: %D.%2N-EXERDNMSGCIPRUNBLKCKRASTDST-CHKREXSEFSIOAFFHLTABOSTPASTPSPNASPNWFRAWFRACP-PMDREMPRVMCRSLVCLIRSTNSDCALROVNETMPCCM00dPyOM55512DGFLMUTLDDPROPRVDDSPSNC e@eC~eB@l xR C  < O ^  \ .A XA LA @A0 4Е Е \ Aeu 8/eeu 8(e^u 8!eeu 8ĝs d v eeu 8e u 8 e?R6 b  ÝÐ  r  r rC j  C$ T r!R" fmp෗$eA, r Е   ~&f 刿& >lE Е:{YWrp}}4#;v}%P R"""`5aarL]%:d^,y``"daR``-w(\s" y f&@e Cn,rJ R N`E%E`A&@ dC:E2 ! ʾ C C`e >N` 2N`5  "N` N`Е Е e ew& /~/t/&,5(? \A$ C 5<l<% Ee?*U  & lE `Е:%2NTASK STACK%2N%5SADDRESS CONTENTS ASCII RAD50%2N%6S%P %P %2E%3S%R%N%6S%P BAD STACK ADDRESS%N< 8M 0> $  e  7 ,wp e  %2NOVERLAY SEGMENTS LOADED AND RESIDENT LIBRARIES MAPPED%2NSTARTING RELATIVE BLOCK: %P BASE: %P LENGTH: %P%NSTARTING RELATIVE BLOCK: %P BASE: %P LENGTH: %P NAME: %2R%NSTARTING RELATIVE BLOCK: %P BASE: %P LENGTH: %P D-SPACE SEGMENT%NRESIDENT LIBRARY %2R: BASE: %P LENGTH: %P NAME: %2R%N@,We we D$ J- 5@ &e 7` Fw :7 5@ . $  ( d@,e D 5@ 5uw45@ .  EmRe wERe R`- 3e Re J5@ e v@e j@e `re Tr! ` 5e *EmjRe Re Rٿ m>e 5e%3N%20STASK IMAGE%N%F%3N%4SPARTITION: %2R%4S%A-SPACE VIRTUAL LIMITS: %P - %P%2NID%P %P %P %P %P !%R %R %R %R!%N%7S%2B %2B %2B %2B%18S!%2E %2E %2E %2E!%N%P %2B %2B %2B %2B%5S!%2E %2E %2E %2E!%N%N*** DUPLICATE THROUGH %P ***%2N5rP ~< v X5>FB # 5L, 77 w7 e n17l`ܫXTwZETwP  : >  * ' ­ 5n, -- 2,7ep~77 -7x7 d7 bR\\5@ Du Dr 6 S 6 KTew J 6>$C 3 n58 6 2 E 25 6 2 F5 6>B  @  e7 (00lPmP557i:)*%2NEXTENDED ARITHMETIC ELEMENT%2N%5SSHIFT COUNT - %P AC - %P MQ - %P%N%2NFLOATING POINT UNIT%2N%5SSTATUS - %P%2N%5SR0 - %P %P %P %P%Nξi7 e%"5 1< ̧~^ "0 ̧  &ed E(R E~ j f|,M{Y &[q$Y (SYSYTISYOVd(RܯDSYSYTISYOV({zHd| f < lơ[1,4]%NPMD -- File open error %D. on file %X%N%NPMD -- Task image I/O error %2R%N%NPMD -- I/O error %D. on file %X%N%NPMD -- Bad address %P%N%N SNAP TERMINATED - REQUESTING TASK ABORTED%N%F%25SPOST-MORTEM DUMP%3N%F%25SSNAPSHOT DUMP ID: %D%3NTASK: %2R%37STIME: %Y %2Z%N,2l"&*,0$&L\`tޢ   Y $# w |z RR= h5L 5< 5, 5  50 (   dnE  +D&55@ @ ĝ eA    P@ wˡ RJ!*R=75@ W 6Wl <l p w&l  lp  w`7&E7 7  mΩz1 1   d  Z 6A&5 8JEw&e&B w7  @5$l l Ω$   5l<&l Ee & $Ω  %w F&fp@ t@l  <m:@ 7w&f(B E EtCe @7 E`7eB 7 t $ B&57  77lw |f1>00tPyOM55512?LBj f& tlE xЕ: @ @'&1 T Lp D < 4 ,0 $ x    Ȳ Ȳ Ȳ Ȳ5ew , Bv     5Bw ̭ۯܰ50  (r- DUt-E D  E E ܁nެdܰvl&wzE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff  &[q &[q`nn nnܲ nn   Ȳ ZZ ) ܫ ~7 ."5 5@ 5@wtSE* *e 5@r xDj fA b A Z  / .$Ћ~W ѕXW ѕ  w, w&7 $D&5 t=   J C5lCm<df&e  && 2&R~z e>LR~ VN7 ^w<` ^ > 05A<E Wt`R~7 w<  e> F L  pwLLmL`R~~ N850^*7 Pf&fܧR B~%NPC: %P%10S%VR%2NREGS:%5SR0 - %P%3SR1 - %P%3SR2 - %P%3SR3 - %P%2N%10SR4 - %P%3SR5 - %P%3SSP - %P%3SPS - %P%2NTASK STATUS: PRIORITY: DEFAULT - %D. RUNNING - %D.%3SI/O COUNT: %D.%3STI DEVICE - %VA%S%2NLOAD DEVICE - %VA%5SLBN: %O,%P%N%NPROCESSOR: %A%N%NEVENT FLAG MASK FOR <%D-%D> %P%N%NCURRENT UIC: [%B,%B] DSW: %D.%2N-EXERDNMSGCIPRUNBLKCKRASTDST-CHKREXSEFSIOAFFHLTABOSTPASTPSPNASPNWFRAWFRACP-PMDREMPRVMCRSLVCLIRSTNSDCALROVNETMPCCMDGFLMUTLDDPROPRVDDS00|PmP557i:)*PSNCZ8 e@.eC~e@l2 R C   x2 d$  PlQ ZBA XA LA @A0 4Е Е l Aeu 8/eeu 8(eu 8!eeu 8ĝJ  v eeu 8e u 8 eR6 ~  NÝQÐ Z` r  r rCR j, "C$ T, r!R" fm緗$eA,з Е   ~&f, D,%2NEXTENDED ARITHMETIC ELEMENT%2N%5SSHIFT COUNT - %P AC - %P MQ - %P%N%2NFLOATING POINT UNIT%2N%5SSTATUS - %P%2N%5SR0 - %P %P %P %P%N i7 e%"5 1R ܧ~t "0 ܧ  &ed E(R E~ʻ d{YWrp}}4#;v}%P R"""`5aarL]%:d^,y``"daR``-w(l;" A f&@e Cn,:J RG N`E%E`A&@ C:E2 V!  C C`e FN`N :N`5 n *N`Y N`Е Е e ew& h岴//t/&,5(? A$ C 5l<% Ee?rU  %2NTASK STACK%2N%5SADDRESS CONTENTS ASCII RAD50%2N%6S%P %P %2E%3S%R%N%6S%P BAD STACK ADDRESS%N  &N6 $  e  7 wڶ e  l%3N%20STASK IMAGE%N%F%3N%4SPARTITION: %2R%4S%A-SPACE VIRTUAL LIMITS: %P - %P%2NID%P %P %P %P %P !%R %R %R %R!%N%7S%2B %2B %2B %2B%18S!%2E %2E %2E %2E!%N%P %2B %2B %2B %2B%5S!%2E %2E %2E %2E!%N%N*** DUPLICATE THROUGH %P ***%2N50 < 4 5~N # 5 , 77 w7 e n17l`XTwZETwP  : > e 5ef|,77 Y  SYSYSYSYTIv~𺣊RtSYSYSYSYTI(76~|f<!'B<ܪ @~ @J S =J&$lrND`r 0x<~Wf|TT -- Warning -- Pool is critically low Total free pool = . bytes Largest fragment = . bytes -- Low pool - Please exit active tasks -  -- Warning -- Free pool exhausted Abortable tasks in memory:  P I/O=000. :Enter a task to abort, or press RETURN to exit: Task not installed, try again: Task not aborted, try again: Press LINE FEED for an updated task list, " " aborted Remove and reinstall PMT to restore Pool Monitoring \75&~zH 5 7 B53  EC7$E"U  E"  ?7 rw-n 3  7 > _tn"a<Z? 5L- fU  eȕ 5ȕPe  5`   w2 & w-$BNN  ΊBmE Е PP NЕ:  8* *g &Eɢ " 7 07 .   T \w N w  :BEeB|rR ? |? ? w ?  X 5 j w w  *R9 pj dw j < ewwc $vesrJ D |eBwJ  ЕЋw  (wX ߋp—rvŀ   ` W |g ߋprŀ ߋp00PP557i:)*rŀf`{MDvߋtɋ7wȠ& +555? 5 AW,CO5pt p t TT7wT 5Hbves 2  | 7 vr "?ZA90$ .@(JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw f ( &"   @&fA EAa .ׇ   & & @( rf  e ee e w jD&& bЕ- eaePPPЕ-$w :D  &Е. ce  Е:   BCO! 5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&f |g,??s Y H+?TISYCOSYTICLTIOVXH^XXOld password: New password: Verification: SET -- Old password validation error - password unchanged SET -- New password verification error - password unchanged SET -- Illegal password syntax SET -- Account file open failure SET -- Cannot file physical LB: SET -- Account file record(s) locked SET -- Timeout on responseLB?Ģ " $ "< N䢆&\F(P@j• Dz• 8 &lp h` P xLF! 4 \0,-&&  wFw5@60B*,LB6  lE6 fwxU-ZL-Z7 7  -w&) b w NJP  w J*Uw'ҕ ( ,w%  f fTt Y  xjÝmנ ננ " נ .  w7 84  ,-h-b-\ 7f j/e%7 et ׭%wp 2) pX  %AZ09$'!- . `z &00PPM55512f)&6& <& + T)& )w^&#  ыl4 twD1lVɡ  2 4 X8U5@(Uwv [0,0]RSX11.SYSM@BCAf } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~   6  < (  .   "    x  l l&f&D%% %% v  % %%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5  n ew *(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ w  ť ť 0B Aaw n' UD$BA &( U BQ Е* &3'&1 b\ zѦ5ew , Bv     5Bwb 00PP557i:)*5  5 2  UE J& VHE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew v   Е-   0@A PW e`fÊ    E &ff &f  VbJќ Vnј Vz%ѼV&VbABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw :&& D¥%  B&ХVA P C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & et & e`Е A %& e4A x Е A EA EЕ A DA   $Е. , AЕ;     & & @( 6f  e ee e w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   Bw h*D L  w`8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w. f( f)f **&   `@ ` B   & A @    w FBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w w \ww Lww >wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ 8e2    f >5>Eu   =p!Օ^46f %8 E D/D!D l0l8epl0pɥ.ɕ w~(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R > =00l&8el2 0 *e6p 4 8 2 81416 L     *..8em,0l0!D0e6p 4.) &f L  *e) .  e6p 4 P08*w jU8UMwv w w peE D` bl lrw ,  B eE"s    s-  Cslw  w & W+W- Ba.00PPM55512 W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  *) l0, *) $ )*)0,40,6 ,*1 B 00fep=& /e`pw0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*eB  8 $&w T*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* l*5ND  <<  EU  , 141612epl2l0p(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w  /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w >*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w F*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  6DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# w&* =*ȥwl `p!2 EW!p0p00PP557i:)*2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff h &*wp. tB5(8e$8w2A&(e ^4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 v0 @0 &*0 @ d& & re# eB&B RB  *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w l f &* R簕* 0MwH82e&( 0 0 0 80 B0 0 0 0)#0.w ) 8C 0* ) *w*    ep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  , J *` C# h   D @)  6?0D)w  ) n8C * ) *w6*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w C#    D @)  6?0D)w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   8v Ε f e * Xe*w<@) *0,    ) )% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ% | , n  N w0  J |B #  f  `* ,w)0406 l0 &f D E/fC A B f&  BeA @0 (@0 a@eA  B0 AB  f  VC @*w 0  w * > ,,  *w | ) * :w46l0w 8*f f 2! fP .ŀ)B  DP5R RRR  8   ** 8 00PPM55512 **=D `p46 Df 64/=  @) 0  8w X46 8 \e*w )  6 w  )  ~ fU %  BA `6p 4p`4 %60 4)"(. = . B  E F (.w *8I J*=)98 > eB &&  U 0**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w82e&( 0 0 0 80 B0 0 0 0)#0.)"(. = . B  E $ (.f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ x WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e|g,??mm Y &[q Y TTISYCOSYTICLTIXTZTISYCOSYTICLTI(?mlHXg|XOld password: New password: Verification: SET -- Old password validation error - password unchanged SET -- New password verification error - password unchanged SET -- Illegal password syntax SET -- Account file open failure SET -- Cannot file physical LB: SET -- Account file record(s) locked SET -- Timeout on responseLB?Т . $ .< Z200PP557i:)*\F4\Lv• 0z• $ &l| h` P xLF- 4̣ \0,-&& ̣ wFw5@60N*,LB6  lE6 fwxU-ZLƢ-Z7 7  -w&) b w( NJP  w" :*Uw^'ҕ ( ,w% ( f f`t Y  xjÝmנ ננ " נ .  w7 84  ,-h-b-\ 7f j/e%7 et ׭%wp 2) |X  %AZ09$'!- . `z &f)&6& <& + `)& )w^"&# f7 ыx4 twD=xVա > 4" 78U5@(Uw^ [0,0]RSX11.SYSM@BCAf } f&  GRR@ 3   &$&~ & e% ~ԥ ~F` F` f&Pe e  @  veT % % % %% % %@ABCD f @  f% % % % '&f&f`%  > BBe   *uuuuFE@aaH~   6  < (  .   "    x  l l&f&D%% %% v  % 00PPM55512%%% Z %% %% D   % %%% " eTTTT@A% X@Ae BA 2`u u `u @A `u u `u p B` `ee% ; vu u 5 5 w6%%% %e;u u u  x ueM u u  ueM u  ueM ue eeeeeeeeeeeeuuuu%&D   5  5  n e&f& v ('&15ew , Bv     5Bw ڹ4-XF* 4D- E %     U EU 5  5U ,8 HXE U *5@*& E& & f&ËDef Ë )̋U&ff Ol|,υ Y KZ2?SYSYSYSYCOOVz ZVºx H*,$&.0`r"R   0- l h 3e 5@  "nj@ p@ R 5@R> D <~zu Di b ^ O L7J  A A 1¢d @lƢ 5XE    EPfff wr& ffGff & ^0΢v~nf^θƸ޸5VָZ7 L WR & & s& DffG77 @J@B £lf \rVnJJDZ>V7J>0 & &00PP557i:)* ef̤@ DA$ Ф̤ 1 $  B N@wlw 7\&pp6  w|&@pa(& pH1A@ ФФfZ &&=M T \ 077ew "w w w :w 47w\AN ffS1  e AN  ReD   e  7 pr   7)   e , $ D  d H f xB B , E  lw4w & &f w00PPM55512ȵԋ ȵ εД ض ڵ@D T 0P (f AP  Е.C dDe v pwjf=e  e w&)_&& & &  & && && Ε@ 61& 1)ȋ& & & & & & & & & Ε  1 &  a@      f bKLOL\}˶HH:MM:SS QMG -- , aborted job = in queue Queue file fullI/O error on queue file, code = Exec directive failure, code = Unexpected exit processor Open job deleted: Error code 0l6RhJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC & & @( f  e ee e &f& v w D&& bЕ- eaeQPPPЕ-$w ^D  &Е. ce d Е:   VB'&1  p     B < z r8 j8 b Z R J BV :V 2 *, "        F      V , æ5ew 8, Bv     5BwR 5  5 2  UE  ں6E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew v   Е-   0@A tW e`fÊ    E f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w " 0,0wF H &ff w wwrw $0,0w 46  )0406 0 *&f &  m  f A N  % 8   *   4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 H64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 0+1(e  %&p*w f( f)f 0,0, f 톇,, w      .% eB U5UU  plp & NeՀ)***8Ae f"( UCɗ&+(e$&%  ! ɔL! #,'X(ʠ)l*PB?& & & 6& &&6 p5e ` @` T  c BⰕ "#$ x&& &  ^  R && &  :W ܤW  䤗  ܤ Ԥzf6w t  ,h 4&f̤TW Ф  #eq1   er1 @ fN\ N\V\   00PP557i:)*C Ce  wB@   R  wJwN0  f D  Re   `wf Fe0e:F ! Q@11  : <2 & 6He 7&v7rF feB7 B7 07 6 ,2   fF&%  e  ff展7 뗥7 @  Fe~ Հ p ; $@0  J J0 @  , e   2  5H~!1( 1* 1,1.111~1&11!&11 , `~ \ڇnppp2!|! !C U  <& FG w*܇׭818Ow 6! Da D` 4 &f   &  r & e 77~7z LZ zۇV ۇz ff UP7W) &    e &(    J"r,e @f& %eE  `e B  % ~  Q rpwx &&Ee ^ڄE ` &Ee :ڄE ` v j7 \@F78?AG pp@ +Ν  ` p` ! 11  " ff  @ (+BD ))@1 E@1 , E0 $ @ *CE[\? ~ȇCD$ 1f' ׭s1sQ1Q  B 8 V \s1sA1AHM   @4 @   B, 6 2e w\NQhBfF  8df BއہUqQ[!h bb ZJ JH&&& SPT]D r,f4 z &P5X5T A 5H5A5=S 8R2U-&5] # kΕh55 ΕipΕX & ӀY#4UUt ŝb<.  & & ׭~1Y fB w> 7& $6 6" 6#6$6 6"6#6$N6 ֆ%֋  w  ť ť 0B Aa ((( %   |  u  m\BDM?C vBÝ׭ w@}EנT Oנzxo נ?Õ  < , åÕ {,NXN,,,ˡMN   wFw > 0 ?CEנ؂Ë           l0 XB T  p \׭@00PPM555125/,) p p .4ŀ   p  9`w | B` Z%0w\`   ׭.B  @  X  7V ^   #   eD  z $  ,  |e  .7& 2$6 6" 6#6$6 6"6#6$N6 ֆ%֋ XXXXXX(wwwww   $ 2 !%% %:< P 5 5 B 2 / &D 6~(*,.e0 ~ ~p(p*p,p.e0 P~:0 &  V 5 b& MMww H777V  3 7 0 #   F  L  J  f\BDIJK     & V 퇇ɐ  Z <w 4w ̇  ɇ  02%  & f |w B  <&fe0 P~D(@*<,8. ^w 7,($ K G0 (0 *0 ,0 ,C.00567j/m /~d F跊zt(* ,.&f ȱe0P~  w  &e P U - 2.&eB0 ŀ &&& & p ֵŀ 0 f N#Ew ,VT @ ,2,wReHf Ew(f  eH0 e %H@7973 e@  w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA XEAa$ @zf &&'pECĔaĔ E  aa2  :< 5%%  ) %N 000" 4 \   w\BJefV z `  r (w2    ۇ  w  ͇5 ŀ Հ 5 ŀ݊ r% D& x  H&  ذ & b CB J `4w>   V 6K    Awf z   @)*   *  T a F 6+wwwww7=׭7킇w 7,"w  w w w 7, 7,7,7,?,ALzn̤IqQ$IqQ$ $@` 111 @``  $ f>`>Emv`! 111 @imzLB "[001,007]f 7 "  ,VT e 6 .w eBR `# b C*i# `L "|xt7    00PP557i:)*  Ԥ ܤ   7W)D&PPP7 77L P3 8 0 (    w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB 8  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ h#( P) .@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( | *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 r0 @0 &*0 @ r& & e# eB&B B  * , eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2141612epl2l0pW=f(& e %&&eH =&e0  LU   E > >E(5E=uf p  w " f \&* *   f >5>Eu "  vMw82e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  j1 >w reE D` bl lrw .  B eE"s    s-  Cslw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=we6p 4 8 D81416    r8e2 46f %8 E D/D!D l0l8epl0pɥ.ɕ nw^ U8UMw$ wB,*1 B 00fep=& /e`pw00PPM55512w &ww *8I f*=)98 z eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E >p* wB (e(&&& e"4 &fff& & "&eW!  eW!eW  :  p*ŋ* 5)%Eefffff f% EDD%][%><  ^1 82e&( 0 0 0 80 B0 0 0 0)#0.)"(. = . B  E  (.w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7w 8eE D` bl lrw   B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) &f   Le) .  e6p 4 08*w=p!Օ^&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@   f >5>Eu   141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ `wP U8UMw w4|m,?P?PuA Y 2f{SYTITISYOVv<0fR8t0<0fZGOl|GOl|Ol|*/Ol| Ol|Ol|  SY)00PP557i:)**?*2\ PRINT BATCH CO000:!2 !2 ` NSYSYzl p u SP0:[1,7]XXXXXXXXX.XXXfZ PRIQUESUBXXX - Job , name "", submitted to queue "AF^FLFO~HOLEPIO RECOlJO@PAMLO ADCOlDETRMAS.BR4DLYCR RBA@UBAFU4HOIN@@KLLI4MOPARL SP@SA>SOHDA.USPAF^COlEX@FLyFIrFO~ENLEPIO RSSHALLO MJO@PIN@PAQUTEAF^HOPIO REMLO PIN@DEMTR BAFW NE@PAQQURETOEEQQUABALVALDQBP  (     c&LW Pɥ ѥ/ ~I&7`"7  , 5% 8wp% /w^%~$ l&5<5: w FfZw ( 8*w z! w  wR~ fh-h/LZ %w<9"w2 V|`00QPM55512 -  } w 5׭ 1 x.   P     P   Е" 7w d(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ & & @( f  e ee e &3'&1 $ # v# ( X 5ew , Bv     5Bw8 f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  05  5 2  UE v PE U 5@*& E& & f&ËDef Ë )̋Uf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ  5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&f w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >&ff  p(T `/ 4X6,*(@D,*p(LF,*(4HdL#XpN#|XdP'<pR'pS'|pT'|p|V ]*k*m*oEoEp uEwE  CLI -- PRI -- QUE -- SUB -- Bad command line Bad spool device type Invalid file spec syntax Bad file spec switch value Invalid job syntax Bad job switch value Bad modify value Bad queue name Bad switch for this function Bad processor name Message not sent Bad switch type Bad switch value Directive failure Uic not allowed Spool device does not exist Cannot delete device's queue File entry not in job Illegal argument value *Illegal operation on an active batch job Intermediate device busy Illegal function code ,Illegal or nonexistant intermediate device 'Operation inconsistent with job state !Intermediate device not mounted I/O error on queue file Job already exists Job name not allowed Job does not exist QMG marked for exit Multiple functions detected QMG error !Mutually exclusive switch/value QMG not active Spool device not available No file name given No function specified Queue file full Invalid entry number No job field g00 QP557i:)*iven No pool space Processor task not installed Must use /NOPRINT/NOTRANSFER No switches allowed No such command !Virtual terminals not supported Spool device offline Privileged command Queue directory full Queue already exists Queue marked for delete Queue does not exist QMG not installed QMG did not start Queue/device not allowed Queue/device not specified Spool device redirected #Request failure on processor task Redundant operation Processor directory full Processor already exists Processor marked for delete Processor does not exist &Queue and processor not of same type .Unable to locate file - check directory spec Spool device unloaded Unable to open queue file  ( ) O 1O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O !O O O O O O O O O O O O O O O O O O O !#""A#"##!"\# "WK}!#" !&!" O O O O O O O ! vO IE! I7 %Ý%%Ý %/ÝÝ# #A  @$%O # #7w#D܇H    /Ol|GOl|r!Ol|t!Ol|** SPOOLED DEVICES **** BATCH PROCESSORS **** INPUT SPOOLERS **MARKED FOR DELETESTOPPEDACTIVEFORM:FLAG:LOWERENTRY:PRINT:SUBMIT: TERMINAL:FLUSHINGCURRENT JOB: OFFLINENO#!w|wQ~f w7 5&7 "r4e6 c!Bh>!" U :5@|$"r4e6 |;!0!" - 5,$0"r4e6 ,"!" 6 z݅!<!-0!,!!%-x!77" "r  #w} wWܱrW r 5 4w"0w,* 5BE- e$ԕ C$f e  `Е(  <"B@Е,("BЕ) wЕ<Е=rw:7 ~1 b$7$!^$ԕ C-Е Е( 8 0   Е)e $7$!$ԕ C.:b"B^"BeeN"B  eV"BEe0P$7$ ! O` GZ$ԕ C."BЕ[C  bЕ,E PЕ] 00QPM55512  e:f"B $t7r$l! $R7P$J!$ԕ C.n"B  ~ev"B f ^e"BММ  p Е:@w$7$!$ԕ Cf"B$7$|!f E er- ww"r4e6 " xw "( D j 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB 0&*   wX . VB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 b0 @0 &*0 @ ,& & e *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w4/!0/ l0/!p!0 .=p0p2w  0,0w  w lww141612epl2l0p82e&( v0 0 0 80 B0 0 0 0)#0.e6p 4 J8 ` 81416 ` p  J *0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% > =00l&8el2 0 *w FBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w**w eE D` bl lrw   B eE"s    s-  Csl 8   * &  4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 ,*1 4U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 0,0, f 톇,, w      .% eB U5UU  plp & NeՀ)*H 00QP557i:)*   /Ol|GOl|!Ol|!Ol|** PRINT QUEUES **** BATCH QUEUES **MARKED FOR DELETESTOPPED ACTIVE ON WAITING SINCE HELDBLOCKED UNTIL UNDER CREATION FID:(BLK:COP:FORM:DELETEPRI:LEN:PAGE:FLAG:NONEJOBFILEBOTHLOWERLOGPRINTENTRY:RESTARTNOr#!w2wFQ~f h7 5t-7 ~z# 4e6 |I!"!# ;5$  5@+# 4e6  "!# ( 5  0R݅!<!-0!,!!%-!77T# h#  #w} wWܱ$Ee @E A7 5f•% b B )A e xW W W  W    W  5@vw"rw,l e~:ԕ C:f Ne B `Е(  44"B@Е, "BЕ) Е=Е>w97 0 x:7~:x!:ԕ CCЕ Е(   Е)e ~:7:!5 HA    A5 A   A5A  A A5 A  Z A5 A  8 xA YfL"BA E efA tA j  :7:!wN D7 D .%:7:!  Ph"B:7:!  $n"BC EeMwEw Ew w EwPEEwx. j  :7:! : *~"B:7:! 5 w,w5 w,qw,mw,i% 25 -w!Y!U:ԕ C<Е[C  Е,  Е]F b Z RP&"B b]% !5 "B ! 0hC5w:ԕ C@h"B  e% J"B  e4"B e`#BJ#Be% N"B@"B"B"B"Be#B"BeH"B % 3#Bl"Be t#BN"B@"BЕ:: X< P:7:!5" f(7 (A w  A C:ԕ CB->7  .    Е:  CЕ[ eP~  Е,  Е] b Z R  Е. :  Е; 6"B  >Е,  0Е)% X5jR"B   5 v #B$"B:876:0!f E e-\ wVwP# 4e6 R# nJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw D&& bЕ- eaePPPЕ-$w D  &Е. ce ` Е:   Bw ( D ^ 8"!#($ĥ ĥ 00$QPM55512w 0 *0 @Q$    0 40 60))eB 0&*   wX . VB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 b0 @0 &*0 @ ,& & e *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w4/!0/ l0/!p!0 .=p0p2w  0,0w  w `ww141612epl2l0p82e&( v0 0 0 80 B0 0 0 0)#0.e6p 4 J8 ` 81416 ` p  J *0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% > =00l&8el2 0 *w :BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w**w eE D` bl lrw |  B eE"s    s-  Csl 8   * &  4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 ,*1 4U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 0,0, f 톇,, w      .% eB U5UU  plp & NeՀ)*%2A%O:%VA%X %2A%O:%VA%VA  "58fZ  w w7 X,j fX cPwh >wV h#(w@&# w R {5  4 w5  E2T  5%U% 2  PPPH$U$0 5| ^c&7~w|  P0  zwpB~h%# ^Z LFHBD>@:<6F"B& z&wABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw ~&& D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A00,QP557i:)*6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& e^A ( Е A EA EЕ A A   $Е.  AЕ;    f&  w v ť ť 0B Aaw DD&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   Bw ' UD$BA &( U BQ Е* &f& v  PRI -- No such file -  PRI -- Unable to copy file - P4* H@V+ @L,* 8L* 0E xeeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &&   `@ ` B   & A @    w T w J& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 5 ͥ*7 7 7 آ؞ؚ BwUJ t֡56 wn5w 77 wwf5wZ  &# Vw4u      Е.  u 7, p  V*[ .* HBN L 60Epppppp p  ($! Y& : N#      W8~  um hd&`x\tXpTlPhL;5 %~w,5Հ 7 w  ԇ ( f~ e~ Ew t*8I P*=)98  eB &&  U **e *Nlv ΋*.2 R & #!)&eP(e && >e >E p* ww X* 8B pB  0 B w ( D f 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) J*<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##Uf004QPM55512E @#U  B  P3)/ * #( P) @#**fff  j&*wp. tB5(8e$8w2A&(e 04p8q  (#4=A#@)( 0 *O*)@#0l @# 02ȕ8 B00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ `& & ne# eB&B B  *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w"/!0/ l0/!p!0 .=p0p2w 8  0,0w  w www t$0,0w 46 * t)0406 0 *82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E t (.8Ae f"( UCɗ&+(e$&% **  f |&* ~*eB  8 $&w *(5<s1  U U@  v f&" 0)'&M'&&**%*%0 *&* *5ND  <  EU   141612epl2l0p HMw`   f >5>Eu (  e6p 4 F8 X 81416 "  "  > =00l&8el2 0 *w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww "eE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  xU   E > >E(5E=uf Dp  w& 8   *   4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8e2 ..8em,0l0!D0e6p 4.) &f j 2 @e) .  e6p 4 b08*w=p!Օ^*@<#8w  /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w N*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w V*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U 00: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@+=hd ^FTV+ *w¥-W 6Sȥ-PfХ-L w  ,&+ E>->+: 7r nh -d<+Z T-P F @+M T \ 077֡>J&zQQAA wL^Y,ȕ  w w w wZ7 X¥: wFswg p w&  w w¥=¥/wU5%wr%<wf w\5 5@@5( %Fw<֎5 5ph5 %w S5 % %a%w(5\ 5VŀՀ5%A5(5"H5@ 5@5 5 5@Ոӡ*w  w< O*w~&f ȥ]ȥ* ȥ], ȥ, ȥ*] h ȥ]U g4 tt4 4 1  :4 t"581" (** #f && 2&& $1111 4--N  $& &e &eeTTT F $Ee  W* 00NW7P te ȥ0 ȥ7 ¥ ,E $Fw *D  w 0+1(e  @%&p*w f( f)f `8Ae f"( UCɗ&+(e$&% **"5 8wz,ȕ f  PwH $wx7 v¥: wd5 4 4&f& v  pd$ hp$ eeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB400DQPM55512f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C w PʥJԋC&& :ʥ-  ʥNO  R5 -  2 E  SE  C D!ŋ E & 5% e56 (_% dwV w  w w5|UHEn5fE^U*EP1 nw0 H*4 V2Nw5$[5S : Ep<.*UC RۼN۸U@sܦU _ (۔$ې یUz5 xUfE@`BERPE@BUn$ D@U 6IWE(BGEP7E@Uܡ Ew PʥJԋC&& :ʥ-  ʥNO  R5 -  2 E  SE  C D!ŋ E & 5% e550'Ew\5h'Ew65 8'E w 5Q  `'Ew P'Erw5h X'E\w5Lp'E@w56@'E*wd5@ 'E@5@'E@wL5x'Ew&5'Ew5'Ew5 H'E w5@'E@w w$ d!w( 6 v-ی %~!lwrn۴ 6w  *w wz5Iw5! w~% wl7 40, d!wPKkw>9w,5w%!w  |( ' X( *( ' ' ( ' ' ) x) ( ' P( B) E(= FT+ w¥-W Sȥ-PfХ-L w  ,( E>-(: 7r nh -d(Z T-P F @(M T \ 07>78١>J&zQQAA wL^Y5wp7 $5 wU5& 5 @U@5Z %xwLnU5: %^w,TٝU 5 %B %8%2w"fU@h5 500LQP557i:)*ՀFUL5 %w/U,5@X5@R   w wU5xU5  5 U fwXE47 5*U>ؐ5 U5Ut lZ w w L ť ť 0B Aa@ wnwf, wZwR wFw>5 ww wwB\ N dww :IPH F2>w5a"$w\AO w|wt5 2 w`wX55 5|"w w h> 2wX5Oa"w>n&%M"w"w5  ww5hnS5 RXڲH5@<@5,2ڌ55ڣq-i5%DwIKC5%w*5ՀE [ w&%|"w ww|"w 5@'55 %Dw5 %Dw5 lEL0`|w lwwx|"Vwj *FwZ~y 0wDw<|"w.RM wB w8 w* w 77 w  w ww |"w zww|"dwxעמ l DwXwP|".wBjlfh 6^ׁ -T -PRw8 w w7  w ׇ w  ť ť 0B Aa%2A%O:%VA%X %2A%O:%VA%VA  "58~znj& SY* w Nw7 ,fX >cw w #w&p$ .wV !5 : 677 6w5E!w0  5 fw5j J 2 4@7v wmE&2T  5%U% 2  |PPPH$U$4v0 5 cR&7w l V  zwB~%$  Hnj& &wABDEFIMNOPQRSTUXYZ<><D^~``T JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC w  ť ť 0B jAaw && D¥%  B&ХVA C e(!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& enA 8 Е A vEA EЕ00TQPM55512 A A   $Е.  AЕ;    f& w D&& bЕ- eaePPPЕ-$w `D  &Е. ce  Е:   >Bw ' UD$BA &( U BQ 6Е* &f& v  SUB -- No such file -  SUB -- Unable to copy file - >+  , * + |E xeeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &&   `@ ` B   & A @    w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 5P; ͥ*7 7 7 plh wU ա5 w<5@wz 7875 w.wT54wH4 u | v p j  Е. X  u 7*kX p  6*[4 * (N , E4pppppp p v4 n|׆xׂxPtLpHlDh@dSY&4  .$ 0 > 6 .   W8~   `\XԾ6ֺ2ֶ.ֲ*֮&֪5$ՀBԅ7< 0w ) ԇ ( 2f~ e~ vEw *8I P*=)98  eB &&  U **e *Nlv ΋*.2 R & #!)&eP(e && >e >E p* ww * 8B pB  0 B w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) J*<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  B  P3)/ * #( P) @#**fff  j&*wp. tB5(8e$8w2A&(e 04p8q  (#4=A#@)( 0 *O*)@#0l @# 02ȕ8 B00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ `& & ne# eB&B B  *  eBe>  #00\QP557i:)* #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w"/!0/ l0/!p!0 .=p0p2w  0,0w  w www ~ t$0,0w 46 * t)0406 0 *82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E t (.8Ae f"( UCɗ&+(e$&% **  f |&* ~*eB  8 $&w *(5<s1  U U@  v f&" b)'&M'&&**%*%0 *&* *5ND  <  EU   141612epl2l0p HMw`   f >5>Eu (  e6p 4 F8 X 81416 "  "  > =00l&8el2 0 *w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww eE D` bl lrw \  B eE"s    s-  CslW=f(& e %&&eH =&e0  xU   E > >E(5E=uf Dp  w& 8   *   4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8e2 ..8em,0l0!D0e6p 4.) &f j 2 @e) .  e6p 4 b08*w=p!Օ^*@<#8w /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ ,*1 U8UMw wJ B 00fep=& /e`pw^46f %8 E D/D!D l0l8epl00dQPM555120pɥ.ɕ w(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@+= FT+ ,w¥-W Sȥ-PfХ-L w  ,+ E>-+: 7r nh -d+Z T-P F @+M T \ 077֡>J&zQQAA wL^Y,ȕ www Rw7 ¥: f&" \)'&M'&&**%*%0 *&* t*5ND  D<  EU   rw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w . /$ ,:T < U@% DD%][%><w  wt1  %,,:4 w j*D ]Xf(e<5"ӕ_ S :ӕ00lQsQ557i:)*: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w r*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce Pe%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` 0*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ **(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@   f >5>Eu   0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w  (ww ww ww BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wH   f >5>Eu .  **0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% w ց %ҥ[֥< , (e  5 s  D w5%& w &Ba +- ʥ# . U 0   b   `     f|,??  Y F*00tQwQM55512SYf0*zBd00MzGOl|GOl|Ol|/Ol| $ ׭wH׭w<~7R7D7L7>e7Y77("z v     W8~ , (       B   :8 ׭1M ׭ 1z&ffw & & @( :f  e ee e &  m  f A N  %Ol|,ٿY &[q$Y Kf SYSYSYSYCO fRSYSYSYSYCO(fH |Ol H*,$&.0`r.^ / / 0- l h H33e 5@  "nj@ p@ R 5@R> D <~zu Di b ^ v$O L7J  A A 1΢d @lҢ 5XE    EPfff wr& ffGff & X0ڢ 6vڿڿxðòǵp̞FΖ8AbPPPŖZ7 L WR & & s& PffG77 @J@B Σlf \rVnJJDZ>V7J0 & & efؤ@ DA$ ܤؤ 1 $  B N@wlw 7&pp6  f0w|&@pa(& pH1A@ ܤܤ00|QsQ557i:)*fZ &&=M T \ 077ew "w w w :w 47wVAN ffS1  e AN  eD   b e  7 p~   7)   e , $ D  d H f B B , E   ww $& &f wԋ Д  @D T  P (f 1P  Е.C r De  wf=e  H e w&)_&& & &  & && && Ε@ 61& 1)ȋ& & & & & & & & & Ε  1 &  a@      f bB?& & &> 600QwQM55512& &&6> p5e ` @`  c  "#$ x&& r& h ^ \ R && L& D :W W    褗 f6w    &fؤW ܤ d  l #eq1   er1 @ fN\ N\V\   C Ce  wB@   R"  w w0  f D  Re \  wf 4Re0e:R ! Q@11  : <2 & Te r7&7R feB7 7 7  * ,2   fR&%  e  ff展7 ,7 @  Re~ Հ p ; |@0  J J0 @  , e   2  5>H!1( 1* 1,1.1111&11!&11 , ` zppp2!|! !C U  & RG w׭C1COw 6! Da D` &f   \&  r H& e 77~7zPX L z pff UP7KW)? &    e &(    J"r,e @f& <%6.*eE  `e B  % ~  Q pw &&Ee E ` &Ee E `7 n4\@F7?AG pp@ +Ν5/!  ` p` ! 11  4 ff 0 @ :+BD ))@1 E@1 , E0 6 @ <CE[\? ȇCD$ 1f' ׭s1sQ1Q  B J h ns1sA1AHM   @m? 2@ i  B H De w\NQhBfR+g%  f8df TއہUqQ[!  V VH&&& SPT]D ,f4 P5X5T A 5H5A5=S 8R2U-&5] # kΕh55 ΕipΕX & ހY#4UUt ŝb<.PLHD@; 6 &b"^ZVRM H (& $& ׭<Y! fB w ((( %  <   |  u  m\BDM?C BÝ-׭( w@}EנT Oנ נ?Õ  l , åÕ {İİİİġMN UT <wvw >p "0 ?CEנ؂Ë         L  0 ,XB T p ׭@5/,) pp p ^o4ŀ 2 > 4p ( 9`\w 00QsQ557i:)* B` %0w` @  ׭B  p    *7   #   eD    T  \  e  ^7& b$6 6" 6#6$6 6"6#6$N6 ֆ%֋ & ,XXXXXX4wwwww   $ 2 !%% %:< P 5 5 B 2 / &D (*,.e0 ~ p(p*p,p.e0 P~:0 &  "V 5 b& MMwNwJ H74707,V  3 7 0 #   * `   f  d  \BDIJK     & p 퇇ǐ  v   w  w ̇  ɇ  802%   & f w B ,󐅐 <&fe0 P~(*,. xw 7, K G0 (0 *0 ,0 ,C.005n67P/TmJ /fd 귊(*~,z.&f Աe0P~  w  &e P U ynj-r4:&eB0 ŀ &&& &  ֵŀ 0 f h#Ewp2 ,VT @ ,2,wef Ewf   eH0 e %H@77 $e@   @zf &&$ 'pECĔaĔ E  aa2  :< 5%% r ) %N 000"    wd\BJefV z `  r 4w    ۇ  p fw\  ͇5 ŀ Հ 5 ŀݖ l ~% P& j x  H& N &հ &  CB J `@w   V 6K    Awf z   )*    ` a R B+wwwww7I׭C킇w j7,.w \ w Tw Lw D7, 7,7,7,?LAlZؤIqQ$IqQ$ @` 111 @`` @D F/@/Emv`! 111 @imzLB B[001,007] 7   ,VTe  > w eBR l# fN C*i# B`X lh d`7           7 W)P2PPP7 77އL <3KLOU&& ݦ) f`w &fn n) , i~ )t`w |   %E7  ~JB~807&7 777 f H& b p 5 -v -pj 7 U@5 wB w  mVA mNeA S ~d2d.`~PPLeFw @&f& 77 7 ~  7 t Uw  `NW K H sUB5 CE-B -:~R" j' $ (% 7  ,U A  *\"TePw J  e6w 0&f&"   H `@ S &\<,b V Н\ НW P H &f >mb 1 5 $!mR U &-2 -, 7 U |%~ 5 2 tE& ~5b` l ?6 |&   `@ ` B   & A @    |r,uQY ?00QQM55512TITISYSYTIOVzzVҵxTITISYSYTIOV(،r|SY ALL JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC w  ť ť 0B tAaw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$w L' UD$BA ^&( U BQ Е*  & & @( nf  e ee e w D&& bЕ- eaeaPPPЕ-$w ~D  &Е. ce  Е:   B&f& v RMD - Segment '' not foundRMD - Terminal type not yet supportedRMD - Terminal/page combination not yet supportedRMD - Page does not existRMD - Terminal type not definedRMD - Allocated screen buffer too small for this device}RrqX]_QUq..M..I..P..CMDHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLATHLCGCDHLHLHLHLIOHLHLHLMDHLHLHLHLHLSSTHHLHLHLHLHLHLHLHLHLHLHL$:\^lr&*,Dr "$&(6<BN`* b   (%  M1  ~    7  p  ))<ZF8R N>W,TI,F7T! > w> lw w p wr w:785V0::ѥ  ) 'Cӥ,   @E 5@ <7jwdwa  \Z27<7;7:797-7,7+7*$ w' w* w- ww w w ~  w R  T7  X w ,F @ w!jf "^ RN* _ a4  3z w 37E%4%1%DE 5@ <7<੔!xszt!XsX5 .H!,s `."!s 03%  M%_R3j3333ʧ3 F 6 ,eBEŊlf&D lΊ L00QQ557i:)*'&1&wLw \,D B A, ,5eaE5 EE f & & 1     &w*5  5U n굔޴lE U *5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f &   `@ ` B   & A @    &ff ~rW!n}R@n~rqPZPPP,PPηPP޷`P,LPP,PPSZ(P.,,H>,QHNQH^QHnSQH~LPQH`Q ,3,m ,M~!θ,m"޸,#,:$`,y%`y&``y'`.LPy(>:)N:*^`:+nS:,~LP-`./LPm0`m1ιm2޹M~3M~4LPM~5`M~6m 7.m 8>Sm 9NLPm :^`m ; n3< ~3= S3> LP3? `3@hNZPP@hκ,_Ahd޺Q_Dh3_Ehc _FhPC~_GhTc_Jh._Lh>:_Mh8y_N^nZxPN8NnUqON~,XPXNQXSƬ NQ]ZNQQ]<N3X_Nλi X`N޻I~XbƌNiXdƐNXetN:XgNyXh N.y]mưN>yQol NN:]tƜN^:QvƬ Nn]|ƐN~Q~ Np]ƄNcQƴ NP~]8NC~QƼNμp ]N޼c QN3]N ,]N^,Q00QQM55512 p( R{99999LPSLP`LPJwLPLPLPLP``````LPLPLP``VWXYZ-B`.LP5#5*&&5 LPV5 FS> 7.4M,  7Y)7i> Е )w YW! \U 7 P7 J>F@mx yе Cm Bíz?mĝ D &fex  txmf^  ex  LxÝyW!   W! Օ x CW! fU ŀW! R ȵ W! 0Օ $ &w^ YW! U w-.w-?1.PHHJY P P PHHJ00QQ557i:)*H  %,/:D&&&&33    FEEE%,/:D #(5(5  FE!$.8 #(5  BABB%,/:D&&&&33    FEEE%,/:D&&&&33    FEEE00QQM55512,6,<,<     , E , E-;(9(9(9(9(9,6,<,<     , E , E-;(9(9(9(9(900QQ557i:)*,6,<,<     , E , E-;(9(9(9(9(9:D !!,,??          ! ! !!!!! ! !!!!, , ,,,,, , ,,,,7 7 77777 7 7777? ? ????? ? ????K K KKKKK K KKKK:D !!,,??      !! !! ! !,, ,, , ,77 77 7 7?? ?? ? ?KK KK K K:D !!,,??          ! ! !!!!! ! !!!!, , ,,,,, , ,,,,7 7 77777 7 7777? ? ????? ? ????K K KKKKK K KKKK4> !!,,         ! ! !!!! ! !!!, , ,,,, , ,,,7 7 7777 7 777>H)05:CL)05:CL, $05:?L $05:?L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L>H)05:CL)05:CL, $05:?L $05:?L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L>H)05:CL)05:CL, $05:?L $05:?L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L     $ 0 5 : ? L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L $05:?L00QQM55512>H#:#$2>L    0G: ".:F)5AM   ) 5 A M   ) 5 A M   ) 5 A M   ) 5 A ".F)5M)5M ".:FBBBB>H#:#$2>L    0G: ".:F)5AM   ) 5 A M   ) 5 A M   ) 5 A M   ) 5 A ".F)5M)5M ".:FBBBB>H#:#$2>L    0G: ".:F)5AM   ) 5 A M   ) 5 A M   ) 5 A M   ) 5 A ".F)5M)5M ".:FBBBB0:  ) *5@ -:G /<C     ( , ( ,(,(,(,(,(,(,(,(,(,(,(,0:) *5@ -:G /<C0:  ) *5@ -:G /<C     ( , ( ,(,(,(,(,(,(,(,(,(,(,(,0:  ) *5@ -:G /<C     ( , ( ,(,(,(,(,(,(,(,(,(,(,(, 0:!!!!      !      !      !      !      !!!!!!!!!!!!00QQ557i:)* 0:!!!!      !      !      !      ! 0:!!!!      !      !      !      !      !!!!!!!! 0:!!!!      !      !      !      !      !!!!!!!!!!!!!0:!!!!      !      !      !      !      !!!!!!!!!!!!55 55 00QQM555125#VmTw :2 7r - m. " m }      S& FlEf Е:00QQ557i:)*[RRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠƠơơƢƣƣƤƥƥƦƧƧƨƩƩƪƪƫƬƬƭƮƮƯƯưưƱƱƲƲƳƳƴƵƵƶƷƸƹƺƻb/  r `e>s 7 j 00QQM55512UP POOL=SECPOOL=TASK=FREE=IN:OUT:PARSERRSEQD `  nWtE5owPD<~ߑP5M5D  W t z  2,e z + 15@55 w!w!w!w!q1  e  e| 2ҕ ҕV ҕ ҕBҕL ҕ R 4 ɋ ҕ(R ʕ)  Wt ȕKR R R R R R 5@ R Ew$   Bmӕ*ԕ- p  Bӕ*ԕ-  L 87.(7 "7 C` r :m  em C!mp  `emC!R R  zmɕEzɕE mȕPȕPR%~W! @ ^ X7NЕ:НFm mȝ.ȝ$BWpw>B ѥ ՀJ| BWpwXL/vz(߇8| |?  \* =:Ÿ j ` \%mmv̋? ml mb *ee     4"0m 5@߈ބ]7777$77$7~7$|7txDp@~D*5@&@ .201e  $e       HA 5 B&5 lw  lw ݎ %@>  7hw8 & T   m 5H5  ()K&]!!?5@@  5jfV++<>5[]5U "m m mW!rw 5G5>)5 =m܈76505D&&  B 555 58<68= d   DRrՀ  . R  RrՀ  E  X  @r<w rw7  Е:  Е:  x vRrՀ 5ğe@7@:   } 4НnНk%x %xAx XAz P *IDLE**OFFL*RrՀ  5  r  RЕ.Е:`  >Е.Е:N ,ȕ.bRrՀ  L5  2Ձ  Е.Е: Ձ  Е.Е: ȕ.RrՀ 5@}pd7r7-Ԛ7 3  p JЕ.Е:\ 8Е.Е: &ȕ%bRrՀ  L3  2 Е.Е: Е.Е: ȕ%R00QQ557i:)*rՀ    F x3PtAv lЕ:Cw {",h@N\aa rȕ.ЕDЕMȕO ЕFЕOЕRЕOЕFЕL RrՀ  : 4 0 RrՀ  8              B  PȕKRrՀ   ~ zJ bRrՀ  L; > : 6 2            B  ȕKRrՀ %-@ @e ,7  m00  j mmm L x" ^ Z V. ȕ.FRrՀ %w @,w$ <  wC( C !w,w,CCl  C4Cl`  mm=- w" /&f)A сA aMMՀm w,: ( $&aȥ ȕ Հm  1  HHՀ e w 1  ȭȝՀ HHՀ ȥ ȕ Հ  &aȥ ȕ Հm ȥ ȕ Հ    0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C wn&j\XJ8F8Z44&z"hɥF ɥRZɥBiɥTw w:ɋɥ1ɥ4= E EWqD e ¥:%܇7   <,5@ 55  nez 2Uɋcɥ=  ɋ[@  Vw؇ɋQѥ=ɋL@ G rfw `Z w#ɋ/ѥ=ɋ*@ % .Z"w w  wRN F-B7 <ءw3The following commands are available for this page:1FREEn=ddn: to change free entry 'n' (1-4) to ddn:/RATE=s to change replot rate to 's' seconds1BOTTOM=x to set bottom of display to 'x'K words.TOP=x to set top of display to 'x'K words to returnUse the following keys to switch display pages:A - Active Task DisplayC - General Cache Statistics DisplayD - Detailed Cache Statistics DisplayH - Help Display (this page)I - I/O Counts DisplayM - Memory DisplayS - System Statistics DisplayT - Task Header Display lets you enter a setup command if any setup commands are available for that display page replots the current display page or exits RMD  Rɋ mW  Rɋ mW  Rɋ mpW >B ѥ Հ00RQM55512 Name Length TI Pri I/O Status flags b 2Е ЕV  Е ЕBЕL Е P   ЕK>ЕOЕWЕNЕ=PPPPPPP >B ѥ Հ| Task: Partition: Status: Own: I/O: Dpri: Pri: Spri: Len:R0 = R1 = R2 = R3 = R4 = R5 = PC = PS = SP = $DSW = Eflg = LUN File LUN File--- ---- --- ----   B $ xL(3THE FOLLOWING COMMANDS ARE AVAILABLE FOR THIS PAGE:-RATE=s TO CHANGE REPLOT RATE TO s SECONDS'TASK=t TO DISPLAY HEADER FOR TASK t TO RETURNILLEGAL COMMANDILLEGAL TASK NAMECOMMAND > %7 7 ٱ ~ 2Е ЕVv Е ЕBЕLL Е P 4  ЕK  P ~ n ^ >B ѥ Հ:nVJ V BL Cache Statistics (Detailed)Device Name:Region Name:Region Size:Cache Status:Requests Being Cached:VirtualReadaheadDirectoryLogicalOverlayTotalReadsRead Hit RateRead Load RateRead OverlapExtent Too BigMax Extent SizeWritesWrite Hit RateWrite OverlapTotal I/OPrimary Pool Allocation Failure Rate (as a % of Total I/Os):Cache Pool Allocation Failure Rate (as a % of Total Read I/Os):Read Load Failure Rate (as a % of Cache Load I/Os):Deferred Write Rate (as a % of Total Write I/Os): -;RZdnv~DŽNJǘǧǴ>~Ȳ B "  R z  N,  z $ &5@5 5 w!q1   eC z    fȕ:R5 >B ѥ Հ V BL Cache Statistics (General)Cache Region Name:Region Size:DeviceTotalHitFailLoadTotalHitFailDeferTotalCacheNameReadsRateRateRateWritesRateRateRateI/O OpsUsed%,26;@FJOU[aflqv{ǂLJnjǑǙ : "6  R  "2C >B ѥ Հ V BL DeviceNameI/O CountI/OPer SecCylindersPer I/OWordsPer SecErrorCount/limitlastavgsofthard "*0<<<<<B ѥ Հ00 RQ557i:)*2 V BL Total tasks run:Total logons:Shuffler runs:Error sequence:Current tasks:Current users:System pool:Secondary pool:Memory utilization:Checkpoint utilization:ItemTotalLastAvg/SecDirectivesQIOsCPU ticksZero CPU intervalsCheckpointsƠƦƪǮDz&Ƕ5ǺDǾQau , "  R A@P >B ѥ Հ & ߌ߄5.?@,;">:62. *&"40,($$ 27 ޷ *   z 4"0m 5@jޚޒRޔ\ 47w7 7  p7nlwj    AmB DmC E<: ހ `A  wh `݀ `A  w $~z  ~z=    RrՀ    |RrՀ ^D6 1  D . BRrՀ  FBRrՀ e *5  j  Е.Е:X  Е.Е:F ȕ.RrՀ  =5@9 pd7r&   8Е.Е: &Е.Е: ȕ%VRrՀ  B+ Bd rC  ȕ%RrՀ  7 J ЕNЕ/ЕAd(& C  Fȕ%RrՀ  w z>p T \RrՀ  L>x  .RrՀ  >  RrՀ  >  RrՀ  >  | RrՀ  nBt F PRrՀ  @B|  "RrՀ  B  RrՀ  B  RrՀ  B  n RrՀ zvrn^Zrn^Z~7 C B &fƁ N.d C    Е Е0Е.Е0Е0f' &' &@Е Е   ,   0 "  Е Е Е Е  &   B A @  E A     0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C wpnj\X:JF84l&"ɥRwɋɥ=  ɋ@ wهw^1The following command is available for this page:/RATE=s to change replot rate to 's' seconds to return00RQM55512$Offline Dismounted ߢߚzpzߘ<?@A0r+材李杉杇BB'&%$ e.e 1 ,1 ,r j߀ `A  w= v   VRrՀ  @  RrՀ  p4X& e ~B}}*AB ȕ. RrՀ / RrՀ   RrՀ  RrՀ  ,uu u uu u"D(@*@ ,.& e ~'}#}&fDee BRrՀ RrՀ @ ,.& e ~'}#}&fDe e  RrՀ  RrՀ V ,D& e ~=}9}5B* A(B܀ `A 8 Bw&fDee RrՀ RrՀ @ ,.& e ~'}#}&fDe e  RrՀ  RrՀ V ,D& e ~=}9}5~m5@,ABB Aw&fDee  RrՀ  RrՀ V ,D& e ~=}9}5~m5@,ABB Aw&fDee  RrՀ  RrՀ 4Z& e ~D}@}<~mX53l/ ru%$*d _ A%  Е/ A$   RrՀ  RrՀ @Z& e ~D}@}<~m53/ u'&*  A'  @Е/ A&  . RrՀ  RrՀ & e},ee. wpqqq qqqe. ^ZC B &fƁ N.d C   4 Е Е0Е.Е0Е0f' &' &@Е Е     0 "  Е Е Е Е  &   B A @  E A     0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C wnHj\XJZF(84&"ZɥDɥRPwnɋɥ1ɥ6= EED e ¥:%7 Hf  v ,5@  $ fWqez tUWq.5 ‡ɋɥ=  ɋ@ F wهw3The following commands are available for this page:5DEVICEn=ddn: to change device entry 'n' (1-6) to ddn:/RATE=s to change replot rate to 's' seconds to returnTotal (No such cache region) . disk blocks)  l7 ,4 J"55  B߿ؕ6 7ޮ5 E wf`   pl w\ <-h-b &&>, 6   w00RQ557i:)*&  @`4 L? 5 eC`A C`A67>l@eAe @eAe @e,Ae @eTAe @e@Ae AeIqImq qmQmI Im@ehAe  N@e|Ae >@eAe .@eAehBe H@eAe uuA E eQ Nw= 2  2(RrՀ  2 2RrՀ 2d .^ &2RrՀ l%47 2lP 2A0 nЕ Е( ( ZP 2RrՀ RRrՀ   le  1e, bq 1l $Q$ A "E d  R CBED CBED CBED ~CBE D  dxCBE D  J^CBE D  0DC"B$: ,"eE @LRrՀ 2e, '2lP 2PPA |Е:2RrՀ  :e  |BA  6he  XA  He  8A  (e  A p e  B A   e  A , Re  A  2e  A  e  tBA   .`e  PA  >e .e e e e |e e \e Le <e le   4wxlRrՀ lRrՀ  lRrՀ &f7 AQ *&fd wd C `2 vЕ. 2RrՀ & 2Е 2  H Е%Е.2RrՀ f' &' &@Е Е     0 "  Е Е Е Е  &   B A @  E A  1 dq 1d dq 1d dq 1d dq 1d   2RdJ Rd   0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C wn@j\XJRF8r4&"LɥRwtEAEw`ɋѥ=@Ћ @%@ D E7 D4 sp 55  4 ɋɥ=  ɋ@ N wهw3The following commands are available for this page:0REGION=name to change the displayed cache region0RATE=s to change replot rate to 's' seconds to return\(Offline) (Dismounted)(Not Cached)(No UCB[X]) EnableActiveDefer zl,Rb^ZMM@M0<44; 1@-}<x>@BjDeF`H[JVLB,l  l Jw ?w @eAe J@eAe :@e,Ae *@eTAe @e@Ae @ehAe @e|Ae @eAe @eA00$RQM55512ehBe$ @e$Ae8 Ae$ڕ A<;CBEDp0 -*|CBED p0 F-@4C B"E D "p 0 f-gfC$B&ED$&p0 -U C(B*ED(*p0 n-h\"CBEDp0 &- C,B.ED,.p0 F-EIC0B2ED 02p0 -8C4B6E D46p 0 N-H<C8B:ED8:p0 n-ptC<B>ED<>p0 &-croCBEDp0 v-p8dCTBVEDTVp0 .-(CXBZED XZp0 N-N\C\B^E D\^p 0 -KC`BbED`bp0 V-PDCdBfEDdfp0 v-CBEDp0 .-,5C@BBED@Bp0 ~-x$lCDBFED DFp0 6-0$CHBJE DHJp 0 V-W`CLBNEDLNp0 -OCPBREDPRp0 ^-XLCB ED p0 ~ -  C|B~EhDj|~ph0j 6-~ONCBEpDrpp0r -8tCBEtDvpt0v >-8,CBEDp0 ^-uyCBEhDjph0j -c/3CBEpDrpp0r f-`TCBEtDvpt0v - CB ED p0 >"-""^CBE8D:p80: -H|BCBEDp0 F-@4CBEDp0 f -CBEDp0  -r= `   @RrՀ  * l RrՀ &a  ݻ6C  >RrՀ ? RrՀ / RrՀ  RrՀ  RrՀ l 7 B:@5 0# /7A>t> DA@t@ 8RrՀ >RrՀ : (47> ABtB0 ZRrՀ >RrՀ ZV FD"P> A<5*ǐ 5@5Е,Е 1ǐ 5 ,8ǐ RrՀ >RrՀ r `pl7j> A<t<5ЕDЕiЕrЕ,5ЕOЕvЕrЕ,5ЕVЕiЕrЕ,5ЕLЕoЕgЕ,5ЕRЕdЕhЕ, RrՀ >RrՀ  $7BAt 2   z7BA t   f J7B A t  j8 7BAt  :  h7bBAt r  7|BAt B  0 7*A P  f  7A , rj B  7A  NH   7A  00,RQ557i:)**&  7A    7A   ] 7WA x  : 74A T  j  7A 0 v| F  7A  RZ "  7A  .8  7A    7A   g 7aA |  D 7>A X  n ! 7A 4 z J  7A  Vl &  7A   2J   7A  (  7A   q 7kA   N 7HA \  r + 7%A 8 ~ N  7A  Z~ *  7ADtD  2X   7AFtF  2  7AHtH     7AJtJ n  m 7gALtL F  b7BhAjhtj   27BpArptr  Rd 7BtAvttv  "6 7BAt Z  \ 7VA h  ~ : 74A D  Z  7A  f 6  7A  B 7B$A&$t&  2Z 7B(A*(t* j , 7B,A.,t. :  [7UB0A20t2   R,7&B4A64t6  r "7B8A:8t:  Bt  7A  R  7A  0 p 7jA p  M 7GA L  b ! 7A ( n >  7A  J   7A  &j  7A"  >RrՀ  >RrՀ &f7 AQ *&fd :wxd C `` vЕ. RrՀ & Е   Е%Е.RrՀ f' *&' &@Е Е   v   0 "  Е Е Е Е  & ,Շ  B A @  E A  1 dq 1d dq 1d dq 1d dq 1d   2RdJ Rd   0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C wn8j\XJJF 8d4&"@tɥDɥRHwnɋѥ=ɋ De ¥:%7 ^X  ,5@5 ( "#fWqez UWq.5 ‡ɋɥ=  ɋ@ V wهw3The following commands are available for this page:*DEVICE=ddn: to change device entry to ddn:1RATE=s to change replot rate to 's' seconds to return`ȼ^Bξ^B^B^~~~~~~~~~~~Task not in systemTask inactive or out of memoryNo task specifiedNone  60  5 &5 v7 004RQM55512 ? 7(Q Ջ 0`U:% $% &&A l< & <%Ce>E   7 /=  ,  RrՀ    ~RrՀ z t xRrՀ 0 5 J" 4H P(RrՀ     w  (RrՀ A%w A RrՀ  ze( A AE* A &8RrՀ - ) P(RrՀ   =   . ,C6N wb   JЕ. ǂRrՀ      >  8&*RrՀ  RrՀ  RrՀ   RrՀ #RrՀ   RrՀ  RrՀ  7(7&C RrՀ  77A Е0Е0 RrՀ     A Е. RrՀ  ArE`A RrՀ   A Е. RrՀ  ArE`  A ^Е. RrՀ ww~7|?w  \ wJHDv-   ZȐ #RrՀ -EXERDNMSGCIPRUNRSWBLKCKRASTDST-CHKREXSEFTIOAFFHLTABOSTPASTPSPNASPNWFRAWFRACP-PMDREMPRVMCRSLVCLIRSTNSDCALROVNETMPCCMD& Е   Directive error: FID = SY  w AA,5@ т53 ://6%)%e A5Cl2A&5Cl .*&7 7 7 ]]w U0,5]].    Е.  Е; 2!А- 8Е.А(V Е,J Е)   0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C w`nj\XJF84&"ɥRɥTɋɥ=  ɋ@ ‹wهɋɥ=  ɋ@ wP wF١3The following commands are available for this page:/RATE=s to change replot rate to 's' seconds)TASK=t to display header for task 't' to return   . -0 -700 HRrՀ  !% %> ԥ  ՀHA A HRrՀ H   AS  <Е0Е0HRrՀ HPP   A HRrՀ H   A Е.HRrՀ H   A rЕ.HRrՀ  H ~A "AE* A 'HRrՀ w8-EXE RDN MSG CIP RUN RSW BLK CKR AST DST -CHK REX SEF TIO AFF HLT ABO STPA STP SPNA SPN WFRA WFR ACP -PMD REM PRV MCR SLV CLI RST NSD CAL ROV NET MPC CMD &     0 $ R( COMMAND > RMD - Illegal command - ѥ,  C w7ރ  x RZV D   . fRP ::ǰ7ʥ ʥ` C w~n j\XJF8>4&d"^ɥR ɥPɥT(ɥOMɋɥ=  ɋ@ ‹wrهɋɥ=  ɋ@ ‹)w8هɋ$ɥ=  ɋ@  w ȋ wTH~܇wɋѥ=De $¥:=7  %TI &7؇ ؇ n h   %TIz  @ T͕:ALL7 HALDL @ <؇3The following commands are available for this page:/RATE=s to change replot rate to 's' seconds6PRI=p to change maximum priority displayed to 'p'=OWN=ddn: to change owning terminal to ddn: ("ALL" to reset))TASK=t to display header for task 't' to returnƇ00DRQM55512| ,44X r[q$X x8SYSYSYSYTICLSYOVN((W(Wx^ !DUDUDUDUTICLDUDU4R,/^(N |(i*w fe 5teB e:   @ @ C: `UC B d V`ef   d     ;a @  W f Е- eePPPЕ- Е 50e %< f< f @ (Օ: 5Օ: @e e0e0U&@  %0 AUUUU    T T T T ee(e(e(e(T $)T T TU U U U  &f!  E D  E E C B Ί A @    e  T T T T H1CdT T L $)dL t dL d  JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC&  m %4P4PSY:CMI.CMDCMI >P"@P& P#@xPP8 Pw ' UD$BA &( U BQ $Е*  w > ť ť 0B DAa & & @( (f  e ee e <wZ &f& v 00LRQ557i:)*TI0:RMSBCK.LIS \ . ff . 5ff e.  & & &  &f& & & Ε . 5& |. f.  & & &  &f& & & Ε . &f w   w*&f d1e? ww & fYw  nw`j  54A ? SY:SY:eE @ &8 m    be?E? & f YABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw P && D¥%  B&ХVA C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf 8 & e6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA Е A bEA EЕ A A   $Е.  AЕ;     w fD&& bЕ- eaePPPЕ-$w 6D  &Е. ce N Е:   pB v*,nwZ4 NJC3 3  ,, UEs3wD&f B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J J @ EͥAA I& TI& TI h& ,& C 8'&7 7 7  ~vv7t   0^5 5 x  F!& : ee  eX eX & & &  ),& & & Ε Z 7 PJ7B  BCK>%BCK-I-ID, RMSBCK Version 2.106 (1988) '&1  \!  !  #  !  `! & ! n -5ew t, Bv     5Bw 50  (r- DUt-E D  E E ܁f&wE U &W )& #  4 &9U3uE00TRQM55512 uU.5`.U & E& & f&ËDef Ë )̋E U 5 ߥ& *  + 23E Ew 4   Е-   0@A DW e`fÊ    E &  m  f A N  %w eE D` bl lrw \  B eE"s    s-  Csl&f &   `@ ` B   & A @    &ff r[qr[q|:H VZ^bLRHH`@ !@!@2!F! \!n \! \! \! & \!<8 #& J  # & \ &#& 8 '- n (.n n +.n n /.n n 2.8n n 4.n n 54   jjjj!& & & & f& & & Ε !3"#$Y% RMS-11 Backup Utility Function: Backup RMS-11 files Format: outfile[/option(s)]=infile[/option(s)][,infile[/option(s)]...] For magnettic tapes, the output file specification must not contain any wild carded fields. For disk files, the filenam and extension must be wild carded, that is *.* Global options: ? or HELP type this help message ID identify current version number [NO]QU enable or disable query mode SL[:filespec] write a summary listing [to the specified summary listing file] Outfile options: NV create new versions of output files RA read data after writing RC read and compare data after writing RW rewind the output magtape before writing SU supercede existing files Infile options: CD:dd-mmm-yy select files based upon date of creation RD:dd-mmm-yy select files based upon date of revision Date strings are matched exactly by default. However, dates which occur either before or after that specified can be selected by adding the date modifiers :A (after) or :B (before) after the date string. The /CD and /RD options cannot be used together on the same input file specification. File specifications are in standard format: device:[directory]filename.type;version Wildcard characters such as '*' or '%' are valid in the directory, filename, type, and/or version fields of the input file specifications. ,w00w(w Hw8www& ŀ Ћ az  w v0 00 ppM $w`w \    .%w0"0 ep" lp0  *" ` D `WaWz 0,wɥ;&ww%7   Hw ŀ&  Հ &^&` 00\RQ557i:)*`^V `W-ŀ `w4wrw  ɥ@0 p @ @  ^ 0 00w&^&` `^w T-00 00000Uj0 0000% w r \" |0 U%  eE 4`0  (e)Ej0`0^ 0n5j ^h h U% e)0)f & 2נ/נ נ   נ נ RՀC7 &fw 7 7 @,q `-KacJE[ !mfb@  ) L R  .7. f@  &  5]U E :&@E A  ̆  E vE c }xu @  . V&fNH"&     8  " .$   ̥ZḀ90     fxeEe\  0 pVR0 0 @6e0R  5 eU 5 eU 5 veU5\eU5@BeU@5(eU5eUt5leUZ5 ReU @5@8eU@&5@eU 5eU*-ef-  eL-dl-d7 7 7 v njjbde 7 ` A18 4 07 7 ]7 |zrp. B b7dRNLDIDENTIFICATIONVERSIONCDEDIDENTIFICATIONNOQUQURDSLVERSIONJANUARYFEBRUARYMARCHAPRILMAYJUNEJULYAUGUSTSEPTEMBEROCTOBERNOVEMBERDECEMBERIDENTIFICATIONNOQUNVQURARCRWSLSUPERCEDEVERSION(&7&?&B&E&T&Y&\&_&b&j&r&{&&&&&&&&&&&&&&&&&&&&8'V*|'8'l'%T'ʄȅ'Z',%T':)Z'ʆ%ȁ'*p'=/$$N%`( '('('* '% '? '.';@(-@ '$@ '_@ '@ '@ 'Z(* '% '? '.@(;@(- '$ '_ ' ' 'Z(* Z(- @( @(b%_n(:ȅx(x($x(_x(:x(Ԅx([(((&%($%(!%(#%( ( %% (* ( (,% (* ( (]%)%[%%@ )*@ ) ) ). )- )]%/>)# z)# z)$ $@$# z)$>*$:̂$- ) ) ) ) ) ) ) ) ) ) ) )-̂%:)A B /$ $&$@$Z$t$$$>*$$:F*%ȃ'b%%?j*HEL Pʜ w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C ,w00w(w ww w& TI wN &5,e5(ff e ff beTXTu7P7H5,e5(ff އ77 7 77 Uff e%lj %-eff eE - FĆ--ff Leff 4e5  J 8f ff e00dRQM55512   8 # J & \ # n -/5,eu(ff e Q(2< 2585I75 7\`\37T5,e5(ff Le 82& n -@@ @@ hlwP TX`dwf( `20 R  2 5 , f  www   e     &BACKUP ePE$  8P P P10e0$PPPP P PPPPPPPPН^НZVe\PUKCAB Bd@ Ýᗢ:ҋ Ý& 5@ 4 0ff he5 ~w  ҝyp-&&&-X&&&>7 :p& . < %%R-S-PROCOM, File %VA (%I) backed up with %I%D blocks%D blockemptyno errors%D error%D errors7 $e~ \8ff Ze j=7 nf8V:8 <w2w  75x  7\  &(7 ff Pe  %%  w w w eew 5 &5 (ff eB&>( b 0(& & &  5D)& & & Ε & & & & & & & & Ε w|@Aff 6e u  5B 7 |w& ~5 z |bw\Vx0).$,'~---%'* %BCK-I-NXTVOL, Additional output volume required 5,e5(ff e ff e.5E5U5 Uff Xe f7 Pf7 d(ff $e6w,w0 -2,  2,  R,  R,2, ^(5Ҝ  ҜҜ5@Ҝr,, ,) )(u,%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA8mff ? <.8. . " .  .  .2 7% . R/ e . ̵   \/. f C$ss ̵J, R(C&̵ʜ ̵ʜ ̵42 ?BCK-F-%I?BCK-F-UNKERR, Unknown error code %POPNINP, Error opening %VA as inputCREOUT, Error opening %VA as outputPARERR, File specification %VA in errorNOFILE, No files matching %VAOUTDEV, Output files can reside on disks or tapes onlySYNTAX, Syntax error "%VA"CONOPT, Conflicting option "%VA"CMDOPE, Error opening %VA for command inputCMDGET, Error reading command from %VAGCMLER, Command processor errorDEPEXC, Command file depth of 4 exceededGCMFIL, Error in command file name %VAWCDERR, Wildcard processing error %VABADSUP, Output files on tape cannot be supercededBADREN, Output files on disk cannot be renamedBADREW, Output option /RW (rewind) appropriate for tapes onlyINPDEV, Input files can reside on disks onlyCONFAL, Stream access to file %VA failedWRTERR, Error writing to output file %VAREADER, Error reading from output file %VARCHKER, Check failure on file %VA block %D////0K0g00000)1Q1x1112H2r2223 5% . . e 7E̵ Jr.. -RMS-E-ER$%I-RMS-E-ER$???, Unknown error: STS=%P, STV=%PACC, Access errorANI, Not ANSI "D" formatATR, Attribute read errorATW, Attribute write errorBKS, Bucket size too largeBUG, Internal RMS error condition detectedCHK, Bucket header corruptedCRE, Could not create fileDEV, Bad device or inappropriate device typeDIR, Error in directory nameDME, Dynamic memory exhaustedDNF, Directory not foundDNR, Device not readyENT, Enter function failedENV, Required RMS support not presentEXT, File extend failureFEX, File already existsFID, Invalid file-IDFLK, File is locked by other userFND, Find function failedFNF, File not foundFNM, Error in file nameFUL, Device or file fullLBL, Not ANSI labeled tapeOPN, Open function failedORG, Invalid file organizationPLG, Error in file's prologuePLV, File prologue version level unsupportedPRV, Privilege violationRAT, Illegal record attributesRER, File read errorRFM, Invalid record formatRPL, Error while reading prologueRTB, Record too big for user's bufferSYS, System directive errorTYP, Error in file typeVER, Error in version numberWCD, Wild-card encountered where not allowedWER, File write errorWLK, Device is write-lockedXTR, Extraneous field in file specification&/9/`S/Pn/@////@ 00:0 X0w00000`1X1@510X1 s1111P101 212_2y22p2223`2300tR{RM555120K3i33332 5%  .. ݇ J.-RSX-E-IE.%I-RSX-E-IE.???, Unknown code %PVER, Parity error on deviceEOV, End-of-volume detectedWLK, Write attempt on locked unitABO, Request terminatedRSU, Shareable resource in useBYT, Odd byte count of virtual addressBLK, Logical Block Number too largeNOD, System dynamic memoryIFU, Index file fullLCK, Locked from read/write accessHFU, File header fullWAC, Accessed for writeCKS, File header checksum failureRER, File processor device read errorWER, File processor device write errorSNC, File ID, file number checkSOC, File ID, sequence number checkCLO, File was not properly closedNBK, File exceeds space allocated, no blocksBDR, Bad directory fileRNM, Cannot rename old file systemBBE, Bad block on deviceFHE, Fatal hardware error on deviceNFI, File ID was not specifiedEOT, End-of-tape detectedBHD, Bad file headerOFL, Device is off lineBCC, Block check, CRC, or framing errorNDR, No dynamic space availableBTF, Bad tape formatALC, Allocation failureULK, Unlock errorWCK, Write check failure./$/F/^/}/////010I0k000001K1c1111112)2Q2q2222fEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  v5 &) ˥A˥Z"˥a˥z ˥*˥% ˥$˥_˥-  ˥0 ˥9 ˥7 U   ˋ˥ ˥ w & & &~ lP/D5% Wqmae &  NaB a D eD <R~. t @ A B C @ D eA B C eB C   a%daAaB C U:Yw/M|,&&YX r[q$X B  ^00|RQ557i:)*SYSYSYSYTICLSYOVPγ(x(xB b DUDUDUDUTICLDUDU&,/9 γP|γP@0(FILE.DATP@P@ FILE.DATPP RMSCNV.LISPhP RMSCNV.CMDP2PTLFILE.DATP4PtFILE.ERR,ww$ww0w4w8w<whlw| CNVCTL. 0 t_ T 8N :D50 T @;5 "4 D15 > B  Z D X 2 >5 h 5@ b L5  4 ( & TI:TI:@ D H L P T X _ CNV> 5~!@wn5lew&f5T       e Pe 2 5 7  &f 7 7  Rw jwxwwwtww\ww@&ff w f f   w&f RBf f  <7fe? ww xre? & fY w R 4w`0 P 5d i5VH  (-7   F >wR4 C3 3  ,, UEs3wpr&fL B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J J @ EͥAA I  P '&1  00R{RM55512( 0( B( B B B T( f0 x( ( ( J | t  ln d \( T$ LH Dr < 4 , $ L r T ` z   . ,! P5ew \, Bv     5Bw 50  (r- DUt-E D  E E ܁  b &wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E Uw eE D` bl lrw \  B eE"s    s-  Csl&f &ff r[qr[q h  H   `@@@ (  (D 0 ( B ( T (  f ( x (0  (  ($  (  $(  &( *, , -(  1,1(>3P6b,8!Pt;!P=!P?!P@!<PB!(PD!\PF!4PH!hPJ!PL!P(N!xP:P!0PLR!P^T!PpV!HPX!PZ! Pb[& bbbbbbbL CNVCMD r  @7XwX=Jw=>wt=2wl-UW UU/   f wwUwt5  ׭~w22 ff e /:8ff e% w w,2ff eE wwm-w,%7  5 3wB  ŀ"D az    \ T P@;w54w0m.ȕ 51 2 5(,ff e  ff eUwp vwdwvrwȕ U7 7 t lEfD h`^ 0PNLwjm>  Ҕ " Ҕ  7w     w 5  $ $) d" ~! v "00RQ557i:)* CNVPARrp<W (W , 3b\  7 =% " ^6.  " ?U: w7 V+DOFNM&fB> !v "fv   r &P    +DOSWI =/  0ALAPBL@CA@EOER@FOHEID IEIM@KNKRLOMAML@PD`PD@RMSL@SS SU@TRWF +ONESWD \/Y  fd"e ]"<L:\5: 757&f5  =5 5 \  5  e ,  $     '@7HELP L>p D> <> 4>v ,> $> >| >P >@ > > >*! > >@! CNVCAT5i zt(p,X(T, :5@p""ff e5  2 5@"5  :@5 f ff De5C D  2 C C C CCC$$C..C D" 2" C00 C11 CNVINI78  5*-SYTI 0CNVVAL 828<e5@U t j50 *- J HBD>7 <7 :@@@@@ C@ RCNVWWW   )&f&?7l,|7`7X7~  ^ n T PeE 7 & |%R> T,` Lb# Dd" <! 4 " CNVHLP5 &5   G8 @ r RMS-11 Convert Utility Purpose: To convert files from one organization to another. Command syntax: outfile[/switches...]=infile[/switches...] Switches (all are global): /AP - append SEQ output /BL[:value] - tape output blocksize /CA[:filespec] - copy file attributes /EO - change end-of-file format /ER[:filespec] - produce exception records /FO:org - define output file organization /ID - display CNV version /IM - copy files in IMAGE (block) mode /KN:keyname - read file based on key name /KR:value - read file based on key number /LO - honor indexed fill factor /MA - load using indexed mass insert /ML:value - set memory limitation for buffers /PD[:value] - pad 'short' records [with this byte] /SL[:filespec] - produce a summary listing /SU - supercede output SEQ file /TR - truncate 'long' records /WF - read and write VFC fixed headersw CNVOPN5wz5@"!"!5: %BU5@ %( Uw(,   w  (,5& 5..ff e B wf 25 8 -| r5\   00 %p wu ~   i5Gh(*-,  l ff00R{RM55512 e E< Lff e h'  P 7:7 f5 ff e (,/  ( ff e  2502w3 j  L, Dd" <! 4" CNVSL15  8<55ff e e$/Se$'  @'"Ib}@ @<VRMS-11 Convert -- Version 2.0 Summary Listing Options in effect: Append sequential output (AP) Set magtape blocksize (BL) Create copying attribute data (CA) Interpret embedded Control/Z EOF (EO) Produce exception records (ER) Ignore certain errors (IE) Copy files using image mode (IM) Select key by name (KN) Select key by number (KR) Honor index fill factors (LO) Use indexed mass insert (MA) Buffer limit specified (ML) Pad 'short' records (PD) Enable /PD:0/TR (SS) Supercede output (SU) Truncate 'long' records (TR) Process VFC headers (WF) CNVSL25Q&&& ff e 7 l&&& ff e  0ff e  !2 x h h  E%"Rw%-B  " 827 27"*z"w`U 7wPrn2 2 1 1ҋ5w  Ew%7w%  v7rhw%V7 T70N  D7@6w|4(  7wX= E Uw:%\w*%ww%w w&ft uff e  File organization: %ISequentialRelative%I, maximum record number = %TIndexed, using %M key(s) File attributes: Allocation=%T, Extend=%M%I, Bucket size = %M%I, Contiguous Record format: %IUndefinedFixed length %M byte recordsVariable length%I, maximum %M bytesVFC, %M byte header%IStream%I Record attributes: %INone Fortran carriage control Carriage return Print file format Non-spanned Message summary: b# CNVSL3 ff e 5 5ff e z 5ff e _5( Z5ff te @5 5ff 6e !58 #5#ff e  Processing summary: Records read: ????????? Records written: ????????? Records padded: ????????? Records truncated: ????????? Exception Records: ????????? b"00RQ557i:)*&f& v  CNVALC5@~D5x@5pk 7 f 7 s v$ h/5^5  V %(   \ 7wf  r  sTotal of %D %I allocated for input fileTotal of %D %I allocated for output filebucketsblocksTotal of %D memory blocks free (unallocated)%N 2CNVCMR5@w55@ %w~@ n1 leGn $ B V x  d`Z7 TP Z R{ P, 7 & 0j  eP 7 WP V 7 FP 4 &7P  4-P  7 P  P  P  f$(2  `   &  e f$ 2#e.E.. .p.   B. `  `w.7 f$& N1& ~ % $15<e R N H7 D`7< t ,(e  7 `7 f `  CNVCON Pff 0e  ff e  CNVKEY5@Z1 - f <@5.0&$R 7  !5 t   " CNVSET5@wB @  5 |/5-$$#5Z5N>Ew%  5-$$5$w5-A    P577wm wP5  %U5  U   D&5 PZf5& 7 F봓ff e  -$676  PU@7 7 5(E@w0E@ 70 U@0# $ m5E@7 0$  1 p$8 ,` b# " CNVCLN r mt% (5 ( rb-J(5 ( \Wh RR:P \^ZmR  ' **5 B(  A, 5 (5,C&    ~3 3   CNVCLS  ff e `  pE 5 .ff e E  ff eh  Eff fe t  E (ff 4e w3 0  CNVDISP  ff e %  ff e   ff e  ,  " L$CEXCI% Zm x0Am  f)7mw7"ff e  $CEXCO @At%%%%1$ ~2= n 7o ^  T5$W @+@ 9J+wT7R,ew  5w5w< ft <0:(6, (, \ff e r 6ff e a00R{RM55512K"t25uff pe>2Dx + t9J&f r u ff e5uff e w&f  ~ B ȕ? $w 3g_ w 5Mw 6;4/Record out of sequence%IDuplicate key where not allowed%IRecord too short for primary key%IRecord too long for bucketsize%IRecord doesn't fit fixed length%IRecord too long for maximum record size%IRecord contains an illegal data type%IException record: %I, truncated%I, non-printing%I000:&f& v  CNVCPYP ff e  %L 2 Jew @AB"  t 5,  t 5(  lff `e  R  ew  %5" 5u"5P mJ m84 &DC`ӝ  b# d" ! LCNVEOF P5&u(ff ne%  BC e~w xmA )B &fmN Ez*   ̋ (&ff e \A` ff je C  @& A(   - 5%& 5`&u ( xlmh&u (ff e    &VP5&u( ff e  BD`  LCNVIMG P5&u(ff ne%+ *ew B5&u(ff ,e  e^w XmvA *** Block copies in %D unitsReading block %T--- %D bytes read*** Odd address trap*** Memory protection violation*** Breakpoint or T-bit trap?RMS-F-ER$LIB, Error mapping RMS resident library*** IOT instruction trap*** Reserved instruction trap*** Non-RSX EMT*** Your 11/40 FPU is acting up*** Call/Jump through address 0*** Stack limit exceeded&(1e&=+&z#]"&& &&&3 5& & i&& & iw U efы  2 r  wJP2ht%NRegisters:%N R0=%P R1=%P R2=%P R3=%P R4=%P R5=%P%N SP=%P PC=%P PS=%P%N%NTrace Control:%N T$CBIT=%P T$STAK=%P T$BASE=%P T$LAST=%P T$MODE=%P%N TR$REM=%P*%N%NRMS Structures: %P/ (FAB) SID=%P IFI=%P STS=%P STV=%P%N%18SFile=%VA %P/ (RAB) SID=%P ISI=%P STS=%P STV=%P%NMemory Control:%N GSABAS=%P GSAMIN=%P GSAREQ=%P GSAPLH=(%P,%P)%NPool Management (Detail): %P/ %P %P (%D. bytes)%NModule Trace: %P (%VA) R0=%P R1=%P R2=%P R3=%P R4=%P R5=%P%N%2100RQ557i:)*SSP=%P EP=%P RA=%P DS=%P%NCurrent stack: %P/ %P %P %P %P %P %P %P %P *** Odd address in list, section terminated *** *** Stack value corrupt, resetting to 002000 *** *** Link to oblivion, section terminated ***   2 J D   J v    Z P""$=  ,"E"" & `  g  H52 &  `5 ee   & hs Z PA F5-  .E R& 7   w   b# $CNVRXBf%P    Ae f f   Af B :5  CNVXAB     &ȕ 0 5 vf  f5 # X `55ȕ80 e8p     X655ȕ0  Au   5N ff e% %H%f5 ff Zeff ^e@( 00 0 0 0 fee"  @ 0 0 0 0 0 &A!?!e?E? & f YeE !&.!m    b w V ť ť 0B DAa GETSTR&f "D  /=  /&6m"W"    P   JGETNUM&f#  *GETOCT&f#  &6E=/ W! W! e|Evwrefwlawb^W!]7V&f A OL L7wE E7 w> >7w7w45 3W!0&&f A "I R S  7wfEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  v5 &) ˥A˥Z"˥a˥z ˥*˥% ˥$˥_˥-  ˥0 ˥9 ˥7 U   ˋ˥ ˥ &  m  f A N  %&f&f &ADwR{E$@& 7 0w,*w(& 77 7 !p ! 8ww`!#%')+-/13 4 1 . + ( r% "           F   P   &   6 &fe  &fr vwt 5Dh (uff e  鯇  驇 f I W00R{RM55512Fw \wV (2 ` 0P b# t! tb$ |<$ t! l! d! \! T! L! D! <! 4! ,(! $:! L! ^! p! ! w ~ ť ť 0B ^Aaw L' UD$BA &( U BQ lЕ*  & & @( f  e ee e ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw L&& D¥%  B&ХVA C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e *AHŀ ȕ Е Е Е & eb & eNЕ A %& e"A Е A bEA EЕ A A   $Е.  AЕ;    w bD&& bЕ- eaePPPЕ-$w 2D  &Е. ce $ Е:   B 5 ߥ& *  + 23E Ew 념   Е-   0@A W e`fÊ    E &   `@ ` B   & A @    &  m  f A N  %! "L"""" #e## # 1$@?%R-F-TPM, Switch /TR or /PD or both required for this CONVERT?%R-F-ER$XTR, File string %VA contains extraneous characters! "J""""p4#`P#P#@#8$>?%R-F-ER$CHK, Bucket header check error; file %VA is corrupt??%R-F-ER$CLS, CLOSE file processor error on file %VA, code=%P9?%R-F-ER$COD, Invalid XAB present for file %VA, code=%P0?%R-F-ER$CRE, Error creating file %VA, code=%PB?%R-F-ER$CUR, Improper record context for operation for file %VA?%R-F-ER$DAC, Unused error:?%R-F-ER$DAN, Undefined data area reference for file %VA:?%R-F-ER$DEL, Referenced record was deleted for file %VA=?%R-F-ER$DEV, Bad or inappropriate device type for file %VA:?%R-F-ER$DFW, Deferred write error for file %VA, code=%PB$)T$*$+$,$-?%R-F-TNF, No EOF (Control/Z) found in file;%%R-I-EOE, EOF (Control/Z) established at VBN %T, byte %D!%%R-W-EXC, Exception record: %I%%R-I-REC, %VA00RQ557i:)*! " O" y""""#C#b##C?%R-F-ILO, Illegal use of /KN, /KR, or /LO with file organization*?%R-F-RAM, Required argument missing %VA%?%R-F-ANA, Argument not allowed %VA7?%R-F-LSW, Illogical switch in context of command %VA'?%R-F-ISP, Illegal argument value %VA?%R-F-ISS, Invalid switch %VA(?%R-F-COR, Not enough memory available?%R-F-RCR, Release core error'?%R-F-IOR, I/O error on command inputF?%R-W-FQL, Output indexed file fill quantities will not be preserved! "<"""""0#j###0?%R-F-MDE, Command file nesting depth exceededW?%R-F-MLE, Block value of /ML switch exceeds limit or available memory for image copy?%R-F-CSE, Syntax error %VA"?%R-F-MMQ, Mismatched quotes %VA%?%R-F-UIF, Utility internal fault%N9?%R-F-ACE, Error accessing file %VA, directive error %P:?%R-F-APR, File %VA is not empty, /AP switch is requiredJ?%R-F-FTL, Fatal RMS error; PC=%P, STS=%P, STV=%P,%N file %VA-?%R-F-ISS, Illegal switch specified - '%VA'5?%R-F-IFL, Incorrect file organization for file %VA! " :"!{"""#"$##%U#&#'#(#.?%R-F-CSW, Conflicting switch specified- %VAA?%R-F-SSO, Illegal use of /EO with organiztion or record format.?%R-F-IKR, Invalid /KN or /KR argument value0%%R-I-IKY, Input key of reference is #%M (%VA)J?%R-F-VFC, Input and output fixed control header sizes do not correspond2?%R-F-IWF, Illegal use of /WF with record format9?%R-F-ONE, Output RELATIVE or INDEXED file is not empty%%R-I-ID, Version 2.005(?%R-F-ISP, Illegal argument value- %VA3?%R-F-ONA, Too many files specified for operation! "("pd"`"P"@#0Q# ##$?%R-F-ER$STK, Unused error?%R-F-ER$SEQ, Record not in proper key sequence for file %VAC?%R-F-ER$SHR, Illegal file sharing options specified for file %VA7?%R-F-ER$SIZ, Invalid key size specified for file %VA! "B"|"""p#`K#P#@#0 $6?%R-F-ER$RAT, Invalid record attributes for file %VA:?%R-F-ER$RBF, Invalid record buffer address for file %VA/?%R-F-ER$RER, Read error on file %VA, code=%P;?%R-F-ER$REX, Relative record already exists for file %VA3?%R-F-ER$RFA, Illegal RFA referenced for file %VA2?%R-F-ER$RFM, Illegal record format for file %VAD?%R-F-ER$RLK, Record locked by another stream or user for file %VAA?%R-F-ER$RMV, REMOVE file processor error for file %VA, code=%P;?%R-F-ER$RNF, Record does not exist for file %VA, code=%P8?%R-F-ER$RNL, Record not locked by stream for file %VA!`"PC"@"0" "#W####*$3?%R-F-ER$NPK, No primary key defined for file %VA??%R-F-ER$OPN, OPEN file processor error for file %VA, code=%P1?%R-F-ER$ORD, Illegal XAB ordering for file %VA1?%R-F-ER$ORG, Illegal organization for file %VA3?%R-F-ER$PLG, Error reading prologue for file %VA@?%R-F-ER$PLV, File prologue version for file %VA not supported;?%R-F-ER$POS, Key position not within record for file %VA=?%R-F-ER$PRM, Illegal date information present for file %VA/?%R-F-ER$PRV, Privilege violation on file %VA,?%R-F-ER$RAB, Not a valid RAB for file %VA?%R-F-ER$LCH, Invalid logical channel specified dor file %VA9?%R-F-ER$LEX, File extension not necessary for file %VA8?%R-F-ER$LOC, Invalid placement specified for file %VA>?%R-F-ER$MEM, String buffer spans memory limits for file %VA?%R-F-ER$MAP, Unused error@?%R-F-ER$MKD, ERASE file processor error for file %VA, code=%PF?%R-F-ER$MRN, Maximum record number invalid or exceeded for file %VAB?%R-F-ER$MRS, Illegal maximum record size specified for file %VA?%R-F-ER$ATW, Error writing attributes for file %VA, code=%P/?%R-F-ER$BKS, Illegal bucketsize for file %VA4?%R-F-ER$BKZ, Illegal area bucketsize for file %VA?%R-F-ER$BLN, Unused error7?%R-F-ER$BOF, Beginning-of-file detected for file %VA8?%R-F-ER$BPA, Illegal buffer pool address for file %VA5?%R-F-ER$BPS, Illegal buffer pool size for file %VA;?%R-F-ER$BUG, Internal RMS-11 error detected for file %VA;?%R-F-ER$CCR, Multistream access not allowed for fi00RRM55512le %VA@?%R-F-ER$CHG, Illegal record key change attempted for file %VA! "("Y"""",#h#p#`#?%R-F-ER$ABO, Unused error1?%R-F-ER$ACC, Access error on file %VA, code=%P9?%R-F-ER$ACT, Activity precludes operation for file %VA,?%R-F-ER$AID, Invalid area ID for file %VA4?%R-F-ER$ALN, Alignment options error for file %VA:?%R-F-ER$ALQ, Allocation quantity too large for file %VA?%R-F-ER$ATR, Error reading attributes for file %VA, code=%P LCCNMA$&fC&  x ~3s3 CCNMD$&fC&     43 3 CCNMT$&fC&  eEBN`  @`㳐  jCCNME$&f@&w7 7w,w(|,?M?M5X r[q$X NSYSYSYSYTICLSYOVN((d(d^&$3DUDUDUDUTICLDUDU?M54,/(N|( M & & A E 7 f j%fe? & fY dw`` $w$7 &fw 7 7 @,q `-KacJE[ !m@  00RQ557i:)*) L R  `7` f@  &  5]U E :&@E A  ̆  E vE c  @  . &fz  # #  8  " .$ 8  .̥ZḀ90     PP$NGSY:CMI.CMDCMIP >TI:PPPPr ׭"#zf& mj      | f  efr  ef"  ef leL3 pf  re \5Jf  BeEf  w0 f   , ע   8  de0 0D  <   " uf"  le5 Jf  BeEf||p &$ wEU@f&|  @  Y |M@   @ &.e6% 4% 4%04 f   w. .eF w^,wd0w\wT4wLHwD8w<w4w,<w$&f& v &e f&b%$&&&F f&ee  $1r (& T & & & & & & & & & Ε f ef"  eU  P  3& VUP    46& U5wf"  ef ef"  e, wp   f e,w6  t & H  w >z tw   This is the RMS DEFINE utility, version 2.001 Error in LUN assignment Maximum nesting depth exceeded in indirect file Open error in indirect file Syntax error in indirect file specification I-O error in processing indirect file File specification is too long Error with indirect file Illegal value. Type ? for help If the file already exists, do you want to supersede it (NO)? YES means that the existing file will be deleted and the file you have just specified will be created in its place. NO means that the file you have just specified will not be created and you will have the chance to begin again. This file can not be created since the file already exists and you did not specify supersede. Your file has been created -- Your file has been processed and a command file generated -- NO DEFAULT: You MUST enter a value This file cannot be created RMS status code = System code = ** Privilege violation ** ** Dir00RRM55512ectory not found ** ** Device not available ** ** Device is full ** Do you want to re-enter the entire file specification (YES)? There is an error in the device or account number field of the file specification you entered. YES means that you want to enter a correct file specification for RMSDEF to process again. NO means that you do not want to re-enter the file specification and want to restart the process or terminate the utility. ; You originally gave a bad file specification which was output to ; your command file. You must edit the change in yourself. ; ?DEF -- Indexed files can only be created with RMS11K Invalid data in command file. You have specified a virtual block number which is not within the boundaries of the file. The file wasn't created since you specified a block which is in use. will you now accept an approximation of that location (YES)? You requested RMSDEF to start the file or an area exactly on a block you specified, but that block is not available. YES means you will now accept the best approximation of that location. RMSDEF will try to create the file again. NO means that you do not want the file created and want to restart the process or terminate the utility. &f&8  @H   w\`v^v@j w w    wxI? xNwb Y" &0      P w ? $   w Y  wNw?   w P TITI  B w4 dp l C3 3  ,, UEs3w1$ &f1 B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J J @ EͥAA Iw  0 00 ppM $w`w \    .%w0"0 ep" \ lp0 $ *" ` D `WaWz 0,wɥ;&ww%7   Hw ŀ&  Հ &^&` `^V `W-ŀ `w4wrw 8  ɥ@0 p @ @  ^ 0 00w&^&` `^w T-00 00000Uj0 0000% w  \" 0 U%  eE 4`0  (e)Ej0`0^  0n5j . ^h h U% e)0)f & 2נ/נ נ   נ נ RՀC8"/:>UD?;@R@i@/AcA|?}@BaCEFA%ACFQ)H IPJYKE-6>@ACT>A]DK?xBxBBDEI(F[FG@[<`9=Lm"Ql3/")D8;);U. ewf  efr  e 0 EӇ  ve  pe>> >ewB0x 7 52e7 w>- eEhr r,,1,fr  er , R F ef  e2 bw"?> 8ew7 <7 :3 5w" t `e Re L-   -   nl -` N3 7 dχe 0-,e-v eZ@   e `-&2, Vч`?5w?? ʇ RMS-11 Define Utility Type a question mark (?) for help at any time. All numbers will be decimal, unless explicitly specified otherwise. Defaults will be shown in parentheses. Type a carriage return to show them. YES means a command file containing your correct responses to the upcoming questions will be generated for your future use. NO means a command file will not be created. Enter file specification: The file specification should be entered in the following format: DEV:[PRJ,PRG]FILE-NAME.TYP;VER See your system user's guide for defaults. The PROJECT and PROGRAMMER numbers of the UIC and the version number are OCTAL Illegal file specification, try again WARNING - be aware that the filename has been truncated. Processing continues. WARNING - be aware that the file type has been truncated. Processing continues. Bad UIC, try again Illegal device, try again YES means that the command file you have been using will be closed and you can stop the utility, specify another command file, or just create a file. NO means you may define another file, adding its specifications to those already in the command file. You may also terminate the utility and the command file will be automatically closed. YES means you want define to create the file being specified as well as the command file. NO means only the command file will be created. Do you want to close the command file (NO)? Do you want to generate a command file for future use (NO)? Enter file specification for command file: Do you want to create the file you will be describing (NO)? ; The first question asks for the file specification.HELPID??"4?44?V@D4*AV@NV@Y^4??V4? ?4*A4??4?/t@4?5V@"5V@N"5V@Y@?4? ?*5*A @?06@@@5.@@5*AV@NV@Y5V@?5.@ .@6*A V@?06V@@5V@B6? ?6b6$A07@88@:l7@:$A7@A@l8@$A8@8@.8@86$A 8@;8@8@8@86$A8@886$A[07AJ8†V8A,†V8A]8\6*A33 ЇSEQRELIDXVARFIXSTMUDFVARFIXUDFVFCVARFIXVARFIXSTRPACINTBIN333333333333333333399$4?93Y9$4N$4 3949^4?9$49^4:59f6 $4ȅd49994?v9d494F94&94N:4z54 d4ȅ<54ȁ\5ȁ4ȅ599?>94Y9NF::44ȁ\5ȅ4ȅ59995?9595F94N:4 5N99?9<59 <599 \5?9\5&:00RQ557i:)* \5~999?V956: 5:969?:5Y69N5 5.:9?^95Y>:N 5ȅ699986?.96986F986z586 6ȁ\5ȁF6ȅ5n99?9F6f9 F6ȅl69996?9l696F96 l6ȅ<56ȁ\5ȁ5ȅ6^;9ȅ66ȁ8ȁ8ȁ7:9?:6Yf;N 6:9F;?:6NF;Y6;$7 6ȁ8ȁ8ȁ7v;9f;^7?:07Yf;^7N7 07n;9;7?;^7Y;7N7 ^7;9:6?^:7N:6Y7 7;67:9 7?;7#7~:6 7:6 7:9?;7::9 8?V:8f:88(;x8V;88;D8 8.; D8?:D8;l8(:8V;D88>; D8;8V;88v:8);D8,x8v:8:8V;D88:D8,8)N;)V;D8)8:D8&;9?:8~;:n: 8 2< 2< 2z= 2< 2"= 2^> 22< 2< |2:= t2= l2|> d2 > \2> T2< L2= D2; <2; 42; ,2L= $2> 2> 2h< 2= 2*= 2> 2< 22= 2^= 2f= 2> 2; 2D> 2V> 2; 2< 2n= 2j> 2= 2> 2:< |2= t2n< l2@ d2v< \2A T2? L2@ D2P@ <2A 42? ,2A $2xA 2@ 2= 2< 2b@ 2? 2DA 2&@ 2? 2r> 2 @ 2X< 2= 2@ 2@ 2> 2\A 2< 2; 2= 2? |2> t2V? l2; d2j@ \2@ T2v@ L2A D2@ <2= 42@ ,2< $2@ 2@5 wl>! FewJ  GDw5  C: ew,  eU f  e5 Uˇ N xewR? HewL!www%A! eFA eww e eP  UɇB( HewL -eU0:C' ew feU|R J"E- ewUF. ewUv@ ~e ˇU Enter file organization (SEQ): Enter SEQ for sequential (DEFAULT) REL for relative IDX for indexed Since you specified a non-disk device, your file organization MUST be sequential. Enter record format (VAR): Enter VAR for variable (DEFAULT) FIX for fixed STM for stream VFC for variable-with-fixed-control-area UDF for undefined Enter var for variable (DEFAULT) FIX for fixed UDF for undefined Enter VAR for variable (DEFAULT) FIX for fixed VFC for variable-with-fixed-control-area Enter VAR for variable FIX for fixed Enter maximum record size (0): Enter maximum record size: Enter the maximum number of bytes in any record in the file. Zero means that RMS will not limit the size of the record. Enter the maximum number of bytes in any record in the file. Since you have specified either a relative file or fixed-length records, there is no default. Enter size of fixed control area (2): Enter the number of bytes in the fixed control area of each record. The number must be between 1 and 225. Zero means the default of 2 bytes. Enter maximum number of records (0): Enter the largest relative record number to be used with this file. Zero means that 00SRM55512RMS will not limit relative record number. Will you allow records to cross block boundaries (YES)? YES means that records can cross block boundaries: - the file will be optimally dense - records may be longer than 512 bytes NO means records must be wholly contained in one block. Since you specified fixed length records, you must have a maximum record size less than 512 bytes (the size of one block) or you must allow records to cross block boundaries. Please change one of these. Do you want carriage return control (YES)? YES means each record will be preceded by a line feed and followed by a carriage return when it is written to a carriage control device. NO means carriage return control will not be applied at any time. Do you want fortran character control (NO)? YES means that any printer controller will expect the first byte of each record to be a fortran carriage control character. NO means that fortran character control will not be applied at any time. ; The next questions deal with file organization & record attributes \oL( 7 L52 F e-* 4"w8 6 71  A18eH 7A 7 Tew e -  ex7    ʷP B (ew,-w z-v n BmR݀ wRW->  \eWW-- -" f  eUɇR  Re7 ,  ,e7 le -VwXx me>-f ^  Re-D6-:6w~ - e  mlemۀ wmRe"ɝ-  De-  &ee" 7m 7   pewJ bwe" -F7 >7 8e ee wfne" wPH( FewJ 8 .e0  J0 ̇E ew  1  P F& ewH' eH' ew~[J/ `ewdXeL" 2ew6 eUz w* l-heUzP lL  |wL ew It's time to define the primary key Enter position of key: Enter the position, within the record, of the key's first character. The first byte of the record is position 0. If the key is segmented, you may enter up to 8 positions. The numbers must be enclosed in parentheses and separated by commas. Enter size of key: Illegal key size. Type ? for help. Enter the number of bytes in the key. If you specify a string, then the limit is 255 bytes. If the key is segmented, you may enter up to 8 lengths. Their sum must not exceed 255. The numbers must be enclosed in parentheses and separated by commas. If you specify an integer or binary then the key must be either 2 0r 4 bytes. If you specify a packed decimal number, the limit is 16 bytes. Too many segments You entered a different number of segments in the key position question. Segments are not allowed when the key is numeric. Key exceeds maximum record size. Sum of segmented key sizes is greater than 255. Enter name of key (NONE): E00 SQ557i:)*nter a maximum of 32 alphanumeric characters that will be associated with this key on RMSDSP's display. This name may also be used when specifying the key of reference to RMSCNV when reading indexed files. Will you allow duplicate keys (NO)? YES means more than one record in the file may have the same value for this key. NO means that no two records may have the same value for this key. RMS returns an error if duplication is attempted. Default is NO for primary, YES for alternate keys. Enter "YES" if you want an alternate key to be changeable during update. Do you want to define more keys (NO)? YES means you want to define another, alternate key. Up to 255 alternate keys are allowed. NO means all keys for this file have been defined. Will you allow duplicate keys (YES)? Will you allow keys to change (YES)? YES means the value in this key field may be changed during an update operation, that is, the value may be different when it is rewritten than when it was read. If you said "NO" for duplicate keys, you must enter "NO" here. NO means that RMS-11 will return an error if the value in this key field changes during an update. Do you wish to define a null key value (NO)? If you want a null key value, specify a single character. If a record contains only that character throughout the entire key field, RMS will not create an entry for that record in the associated index. Enter C for any printing character except #, @, and ? #43 for # #77 for ? #100 for @ #N for any non-print character (N is an OCTAL number less than 377) Enter null key value character: Too many keys! Just finished alternate key number 0; The following questions deal with keys Enter data type (STR): Enter STR for string (DEFAULT) INT for integer PAC for packed decimal BIN for binary 5 2e N73wV7 e jp1 UӇwR7 4e66 "e 7 e97 eEdU\ETELEDE<7 6E07 *U$EE E@ EEUEEEEEU UEE E@E5 r5" e5 և jU҇ Z-Ve-H e6.UP҇77 "· Enter magtape block size (512): Enter the number of bytes in each magnetic tape block. The number must be 0 or between 18 and 8192. Zero means the system default of 512 bytes. Enter any combination of R (read), W (write), E (extend), D (delete) to grant those privileges to the class prompted. Enter "NONE" to disallow all privileges. Specify protection by class: Owner (RWED allowed): Group (RWED allowed): System (RWED allowed): World (R allowed): ; The following questions deal with file protectionNONENONENONENONE7777ȁ8ȅ7t3738R47?37^47Rj47Wr47Ez47D477 738"4B8?37*4B8R248W:48EB48DJ48B8 73848?3B848R4\8W4\8E4\8D4\88 B8484?3843R48W48E48D483 84?585 833 ЇLBNCYLLBNVBN33337 474?73Y&83N74 3ȇ 4v73N77"6?73Y74N"6 3ȁ5ȁ5ȁ5ȁ5ȇ5v73ȅ 4B6ȁ64ȁ5ȁ5ȁ5ȅ57?&764Y74N 64874?.8b4F74 b477>84?74>8474 4>8687 4?V8484 4>7?f74Y7N 477?&75YV5N 587V5?.825F7V5 2577>84?7V5>800SRM55512474 V5V775?75675 57^7?7585 57?75N8 5~7?75NY8 5F8B6B6?.7"6n7B6 "686v887r6?8R68r6 R6ȁ68796?~8v6n86 v6ȁ6f8J68J6?868J68v6 68v8ȁ6ȅ6687?^8686 6878?8686 6 2 < 2= 2; 2= 2< 2x; 2@; |2: t2; l2= d2; \2= T2: L2> D29 <2 ; 42; ,2< $2; 2< 2; 2= 2; 2= 2: 2; 2: 2: 29 2:> 2f; 2 = 2B> 2&; 2j9 28; 2L; 2; 2= |2> t2^; l2< d2: \2F: T2x9 L2>: D2< <2 < 42< ,29 $2L= 29 2< 2; 2~; 2.; 2: 2,: 2: 2: 2; 29 2d:FILEFILEFILEFI^ LEZ FIx LEt FI LE FI LE -AREAAR@EA<ARhEAdAR EA AR EA AR EA AR EA VDBw J. :+ Rp p p1p 7 5 1 1 111 E- wH 7  A1eH 77 7   pwb`>$ \ew`YD) BeVD<    :χ5 D& ew EL ewDF ewF ew| nG! bewfVJ>k@ ew t e-f  e - 61*UDˇ 0 eB`     Xe- 5 A2 ew fe \UvwL @1@  ,݀   eU.5  r tB+ fewj eUɇ5 ?* $ew( x p 5 C& ew U Do you want to define areas (NO)? YES means you want to divide your file into two or more independent areas with their own initial allocation amounts, default extension quantities, fill numbers, and so on. These areas will be associated with the data and index portions of keys later. NO means you want your file created and used as one area. Enter initial allocation in blocks (0): Enter the number of blocks you want in the when it is created. A reasonable (non-zero) quantity speeds processing. Enter bucket size (1): Enter the number of blocks contained in each bucket of the . Zero means the default of 1. Each bucket must be big enough to hold at least one record. The number of virtual blocks per bucket is not big enough given the maximum record size you specified. Enter default extension quantity in blocks (0): Enter the number of blocks you want added to this when it is extended. DEQ must be a multiple of bucket size. A reasonable (non-zero) quantity speeds processing. The default extension quantity must be a multiple of the bucket size. Enter file default extension quantity(0): Enter the number of blocks you want added to any area with a DEQ of zero when it is extended. A reasonable (non-zero) quantity speeds processing. Do you want a contiguous (NO)? YES means you want your to be created in physically contiguous blocks. NO means physical contiguity is not required. Too many areas. Just finished area number 0 Do you want to define more areas (NO)? ; The next questions deal with allocation and placement attributes Do you want placement control (NO)? YES means that you want to control t00SQ557i:)*he physical location on disk of your . NO means that you accept the operating system's placement of it. If you want to specify volume, enter its number within the volume set(0): If you are using the VAX-AME, volume placement control is supported. Enter location: Enter a number representing the starting address of the on the specified volume. exactly (NO)? YES means that if the exact block you specified is not available, you do not want the file created. NO means that if the exact block you specified is not available, you will accept a block as close as possible. Enter type of alignment (LBN): Enter lbn if you intend to specify a logical block number as a location for the first block of this area. VBN if you intend to specify a virtual block number as a location for the first block of this area. LBN numbers the block within the disk. VBN numbers the block within the file. -  GF2wч yFG  52=8 e- 752e X=, >D =5 7673e>7 "ew& -|eUd dA8 ew @-<e*  P  DA ew7 n -rZeb B   T@0 0 P ,P ev w 7 e f  6e,qf  eU2̇ -~ t7|v7pef ?ʕ .W Sx? c?I &77}ew" | e :b    e6UPˇ& 1     -yB+r xBʕ .W SoB ZBJ 277ew.  e Fn    eB -UNʇ ,P   It is time for area numbers and fill factors for keys. These questions are for the primary key: These questions are for alternate key number 0 Enter area number for data buckets for this key (0): Enter the number of the defined area where you want the data records (level 0) of this key to be stored. Level 0 of the primary index contains the actual data records, while level 0 of each alternate index contains pointers to the data records in the primary key. The bucket size is 0 block Enter fill number for data buckets (0): Enter the fill number for this area as a number of bytes less than or equal to the area's bucket size. This number controls the amount of data actually written into a bucket by RMSCNV or another task honoring fill numbers. It may be used when the file is initially populated, leaving room for other records to be added easily later when the number is being ignored. The bucket fill size is greater than the actual bucket size. Enter area number for index buckets for this key (0): Enter the number of the defined area where you want the upper index levels (2+) of this key to be stored. The area for the lowest index level (level 1) is entered in the next question. the bucket size is 0 block Enter fill number for index buckets (0): Enter the fill number for this area as a number of bytes less than or equal to the area's bucket size. This factor controls the amount of data actually written into a bucket by RMSCNV or another task honoring fill numbers. It may be used when the file is initially populated, leaving room for other records to be added easily later when the number is being ignored. Enter area number for the lowest index level for this key (0): Enter the number of the defined area where you want the lowest index level (level 1) of this key to be stored. The bucket size of this area and that of the area containing the00$S%SM55512 upper index levels must be equal if they are different areas. You can put the lowest index level in area 0 only if levels 2+ are in area 0 also. The area associated with the lowest level index bucket has a different bucket size than the area associated with the higher index bucket. Try both again. ; The next questions ask about fill sizes for keys; The next questions deal with associating keys to areas and fill sizes|,??Q9X r[q$X >* uSYSYSYSYTICLSYOVX(l(l>*^LSDUDUDUDUTICLDUDU?YX,/ XV"|48 w,Lf& hL&e? %& fY 5w` 5& KwL w $M' UD$BA TK&( U BQ JЕ*  w L ť ť 0B KAa,w 0w 4w Hw 8w w <w \w >>>>>>>???*?0??,D?R?l?x?????? ?????@ @"@@ 1(@6@N@P@V@b@t@@@@@@@ @@AA .A(ADAHAVA`ArAAA AAAAA AAAA B BB*B,B 2B:BNBXBB BBBB0 BBBB CC&CDCTC~CCCCC CCCCD6D@DVDZDhDrD~DDD DDDDDDDE EE$E2EHEJEPE\EpErE"xEEEE EEEE# EEEE EFFF$ F.FDFFF LFXFlFnF%tFFFFFFFF&FFFFFGGG'G*G@GBGHGTGhGjG(pG~GGG GGGG)GGGGd GGHH H$H;<8 F<8!t p #<8f <8 3V  N <8   v <8@m, f ^ ׭@  |Mz && ze .<8` mZ  D & Be J       2pe<8T 2e W!   . e -(  -,  --:f l"= .x%6&J0=2J"6  % -.>J!  % -004S%SM55512vJJw2=`; f& && e Gr7\X BԦf   \`; 0`; !N4ff& 4     . eee   % -ef<8m& W? V  0 %w& -< -Z  -5-Z a@ T2Caa&f f - - 5-Z*& TIe 6=& & & & & & &  f& a e-(w@- j%   @- Z ew|  w2 <8m\& ŒW[<8m:]   <8m %W(!<8mv)   W!<8XmL %  6<82m( V  8=f<= ef& f< x>=< heef  !<8m$& - H `e% f?dd@wth - q- 2o <8@m  te<8nw@ 7w D@= B<8m.& f& e `X%-P  Lje<8d %  -r  W  X&e<8  %wvWp .w2- - 2w  48|  77& 8f ɕ81e vȕl ȕ8jbe8\XXe RNNeH @tm:fE& 0e W  ` e  mɕ  dd Wp@ . . .e   %- Wp@ w.  w.  w.h h  wDeW!  Wp w,.  AWpD 48. X3 . 1 . 1 .@ w^R -q- 2 o <8@mh  Re<8 nw@ 7w DD= B<8m & f& e Pph %-@  *He<8Bh %.   -P    6 ze<8 %y 3`   2 FK S48 77& f ɕ|ev @tmjfE& Pe W B  <3 63w34e.?*e  R %-L  @ 73@@ 73  $ wN)W!  @ 7,3 E e1v  3eĕ @ 3eE  W >483 v3 3 3 3@eF '--d 7 * w~<8m&  87= dn; x7 l.> V=Q=N=J=J=2J =>J=rvJxh*=%-V===>>>-*>> >&> %- 8<8 mz .7;,> ;  0e  -  &  -R>T R`>FDr>n< x%   n< hy< N% " < >n<[ <  %< %  < < %n<%7< % | < N< %n< n%%V<& e w4~-T> N   7 Lr< Z%n</ a7 \& & & && 7 w< %n< e f- -"<8 %> F  <8 % j ݢ !Z ;W @f > N-B-Ff8 l>J> ) !& !#W   ! ! *W 00hALL // ALLALLAREACLEARCOMMANDSCREATEEXIT_SUPERSEDEFILEGETHELPKEYQUITRECORDSAVE_SUPERSEDESECTIONSSETSHOWSYSTEMCOMHELHLSECHLCOMFILSYSRECKEYARECOMCLCOMESCOMEXCOMQUCOMCRCOMSECOMSHCOMSSCOMSACOMGECOMHEHL"0>LZntLB:RMSDES.HLPLB:[1,2]RMSDES.IDX Press RETURN to continue: DES: "(.BnHNThnTarget Target: RSXSYTARRSTSRSXVMS>>>Source Source: RSXSYSOURSTSRSXVMS???Name Name: 0FINAM Organization Organization (Seq): SEQUENTIALFIORGINDEXEDRELATIVE SEQUENTIAL~? ?? Allocation Allocation (0): 0FIALL Extension Extension (0): 0FIEXT Bucket_Size Bucket_Size (1): 1FIBUC Cluster_Size Cluster_Size (0): 0FICLU Protection Protection: (SYS:,OWN:,GRO:,WOR:)FIPROGROUPOWNERSYSTEMWORLD@@@@ Owner Owner: [0,0]FIOWNMagtape_Blocksize Magtape_Block_Size (512): 512FIBLORewind_Magtape Rewind_Magtape (No): NOFIREWNOYESNARAMax_Record_Number Max_Record_Number (0): 0FIMAX Contiguous Contiguous (No): NOFICONNOYESAA Supersede Supersede (No): NOFISUPNOYESBBSize Size (0): 0RESIZFormat Format (Var): VARIABLEREFORFIXEDSTREAM UNDEFINEDVARIABLEVFC^BdBlBvBBControl_Field_Size Control_Field_Size (0): 0RECON Block_Span Block_Span (Yes): YESREBLONOYESCCCarriage_Control Carriage_Control (CR): CARRIAGE_RETURNRECARCARRIAGE_RETURNFORTRANNONEPRINTZCjCrCxCName Name: KENAMType Type (String): STRINGKETYPBIN2BIN4DECIMALINT2INT4STRINGCCDDDDNull_Key Null_Key (No): NOKENUKNOYES`DdD Null_Value Null_Value (0): 0KENUV Duplicates$ Duplicates (Yes if alternate): YESKEDUPNOYESDDChanges Changes (Yes): YESKECHANOYESEE Seg0_Position Seg0_Position: 0KESPO Seg0_Length Seg0_Length: 0KESLE Seg1_Position Seg1_Position: 0KESPO Seg1_Length Seg1_Length: 0KESLE Seg2_Position Seg2_Position: 0KESPO Seg2_Length Seg2_Length: 0KESLE Seg3_Position Seg3_Position: 0KESPO Seg3_Length Seg3_Length: 0KESLE Seg4_Position Seg4_Position: 0KESPO Seg4_Length Seg4_Length: 0KESLE Seg5_Position Seg5_Position: 0KESPO Seg5_Length Seg5_Length: 0KESLE Seg6_Position Seg6_Position: 0KESPO Seg6_Length Seg6_Length: 0KESLE Seg7_Position Seg7_Position: 0KESPO Seg7_Length Seg7_Length: 0KESLE Data_Fill Data_Fill (100): 100KEDFI Data_Area Data_Area (0): 0KEDAR Index_Fill Index_Fill (100): 100KEIFILevel1_Index_Area Level1_Index_Area (0): 0KELAR Index_Area Index_Area (0): 0KEIAR Allocation Allocation (0): 0ARALL Extension Extension (0): 0AREXT Bucket_Size Bucket_Size (1): 1ARBUC Contiguous Contiguous (No): NOARCONNOYESTIXIPosition Position (None): NONE 0ARPOSCYLINDERLOGICALNONEVIRTUALIIIIExact_Positioning Exact_Positioning: NOAREXAN00LSQ557i:)*OYESIJ.Jf*Fb~ &B^z">Zv:Vr 6 R n SY:FILE.DESALLAREAFILEKEYRECORDSYSTEM-->----3---%DES-I-ID, Version 2.004?CLEARCREATEEXIT_SUPERSEDEGETHELPQUITESAVE_SUPERSEDESETSHOW'&1 Q ,R(T ,RU tR0x R x R(x |R| tR l lRl dS \S@ TS L(S@ D(S։ <:S@ 4:S@ ,LS@ $LS ^S@ ^S pSʋ pS@ S@ S S@ S S@ S5ew (, Bv     5Bw 50  (r- DUt-E D  E E ܁QRR7(TR,RR7lbRRPR7l tRPRRPR> xbRRPRA x bRRPRG xRbRtRPRI|$ RRPRPlRPRbRPRPl RRPRVltRRPRX@SRRX@RSRZ@R(SR\@`R:SR^@$RLSR`@R^SRc@RpSRf@RSRi@RSRl@RSRo@|RSRLMMSMLSLLLLLLHQPPPPj&   ڷe wָ -t>JD -6 AWp .8f ̅  6Wp .$WpD . 1.  p..  3 ..2 .1 .0 .  -vJ4 - A 3)f ΅   4  B4 3  2431 40 4  t J 2J J+ 7JF%   f<8 @<8*w   m7e w`J  eJ7(w  lJk&2 F7b-H  -:w  f wv B7rw T X ݞ& k&8& e -V p w C -  $$e1 @   3 eD D    Kwp & \ l-&d-&2$&2 7&-  -   .x 7   w +  J7| <8mxW f& 0wm  & e 7 ~ew&2 F7b-F  00TS%SM55512 vHW -$   T e <8VmL z7i. d-&7 n7 7 tm&E& H<8mh7 k ~ W wr n7`-.2TP*L* IJ8t,*$7 $%ewF`-B -& 7 @ 78w@  7    4Ԗ%-& -&2 7 w 66 -(  w4<8mN&) 6    b  6w  @ta`fE e W 6-w݀m t      e i  : 6   t$  ReAbݎ 6& &   <&40&2 $ -,  ePe @t,aafE e v   - w @af     ^N0  ,vewv"6#-"),-",$A-"R6 !-"W-"E-"D 0 *m**t0a@`*E& ze%w-< -<2 3 , % "y-< b U  H ;wew ڷ 7 e-& -&2Ϸ -&7 w6 -& w ڷ  W![wL- H H7rw   ,Z -x  7>w- $L wP-   W! W!, 7  Ƚϖ%- z-  7wj l  ]76L -  7 T %w7  - 9 VR W!  BW!]*74  RΖ%-&  tm &E& ʬe5[-&WSׯ' p e7Z 7W  h7wD F z-8 '-0 #-.  e -&   E?  -& 7  P͖% n  p  t 6 z 6 z  =k& e ̦8k& ~e -^ 7  k& Re  4 w*fD!@ m8fn A?@ mfnA?P-&2wkf& e -7 ̦8k& e -p7  k& de -D7 f*kfn& 8e    t @h˦Bk&& e   < .    <8mX& 7 z WtmhN&E&  WtmHN&E h w.-& wFkf& &e ~-7 rʦ8k,& e N-7 B k& ʦe "-7 f*kf& e     @ɦBk& Ve <      x@ Wtmf&Elkf& e 7 : k& ¥e 7 f*kf& e @ȦBk& e  W W  W W  7wf Wtmf&E& 4ezew<<8m& \77 7 j  W!' W!'W!-  { mn7nLfQLp0Q-25<8m~ 74` , tm&E&  tm&E  %-  tmE tmE& %ew fe"fbkf& ne fe#fpkf& Le Ue$f~kf`& *e De%fkf>& e 3ve&fkf& e "Te'fkf& Ģe 2e)fkf& e ʋw$&6`l~p 00\SQ557i:)*H bKЂ tv| BB`@>`/K ew6  Wp .wF ԵP6 -*F< D e   ,&  -  h    } 6e6( e B  H66vd J6vvp~ 5Ct e   \&  -<   ֲeL  "  ݛ 6e6( e B f66vd h6vvp~ %we !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ Bucket_Size (FormatNull_Key OrganizationPositionTargetF$\  Seg0_Position Seg1_Position Seg2_Position Seg3_Position Seg4_Position Seg5_Position Seg6_Position Seg7_Position 6tR0x .R x &R(x R| R l Rlw -q#A(w V   "<8 |? t 7(  7   Wp .wF f7 e  7eׯ 7e 7e"7 7  ߮ -7`p   hwF& Vxern7R  - jw < D 7vJ *7 84Wp .!F  x7 e ?7e ?7e ?  e w<8 x?w Bd 07`w  "  %F` ^ezv7ZDje dJLWpm$mBe r75׭1)&   7w     F7wb`  X P<HF 7PwN~v bJrel fF ̭0ReLH7,<e 67  e r7 ( 7 l7wpB 47wv  |e>Ęn7e ^e~7ze tn7je d^ .w w re5wWt m 7r7   7w    >7w$vt $7rwp d^\Vw`R-TL& Lew2,.(7 -   7 7w(v 7 w7 @ 3NW KFf \e 66  26 vd  87v ne* Lwl@ l ` · V %e Areas defaulted: ARDEFNOYESBw FwBucket_Size (2): ARBCK!The primary index has a depth of  Key 7Average number of duplicates per record for this key? NUMDPThe index for alternate key  has a depth o00dS%SM55512f ,RHT ,Rg ,Rthwl$wdwД Ҡ <8~m&t 7<8^mҿ7 *bD* |NNJrೖ%-H  V- P-:%P &7 Wp @. 7e 7  3 7e Դejд'  . 7-veplexr 7-ex3-J R -8e2,?(40 3$ 73 ee  73ee3eU| 77e*?e-7-# ׭ ׭-,׭H@ :TPPL x H%N7(-$ L, -"w׭׭-(x %׭׭޲׭̲" @te|fE&e|fE& e Fe W ׭#@te|fE&e|fE& e e W ׭4#@te|fE&e|fE& ne e W ׭# @te|fE&e|fE& e \e W İ %e77V 7 b^Wp @. 7<e6? 2 @7 :6 3 7e? e SY:FILE.DAT ,Rthw  A ƥ ̠ W-d F)N- r&  Ԡ -: Xe<87 e  wVJ -"wW L  w>><8 ? .΁ .7   7   Dؾbe<8\7 x %%JF0 N7 \-`Q2J* 2-HE-4 >J г  -  } - !v qvJγ ³ _ aW T؁ ԣ ڞ  }-d) J 2J J >J vJ `N ~ - <e<87    |<8mR&ؽ W j S - `  x²eO Н I<8 6ğn?V 4 z -D `e<87( $ N < -  % wF7 α"7-̱>Jd7 -[ V  wT-ıd6 `=| H7xw86 ڻe<87^ Z * W  \e<87$ Bw  -.wd- wJ- & %7 <& J m7w7f7c-\\ TNN&& ~e w`7 0 e7   O LL f n d-Ldf : Ѕ7w  žVe<87ں ֺ-  *e<8 Я-Ư3Z  ,v 6 -Y^  -L &" mL76   B  @7e m770 7070ܮ &-  Į " -wt w7 >J˒e !w-vJ -   -wp7 .-fW Rl   -ld Z9$ 7 w  e<8 ֜W  Lָe<8и w | -ޭW-lS00lSQ557i:)*d M- f \% F mp7Z'7070|70x< -jy$  -Pl 7 vJe B  >JY vJV ݾ J 2JԂ X:w0Ԭ'w0Ь$w0̬!&& Te x 8 —-`  -  ($ mN78e SECTION: HLSEC File Placement: HLPLANOYESƁ ʁ ATTRIBUTE: HLFILHLRECHLSYSHLKEYHLARE VALUE: Seg0_Position Number of keys: NUMKYStarting Key  Number of Segments: NUMSG Number of areas: NUMARStarting Area SourceStarting FILE section Starting RECORD section Starting SYSTEM section ,RUwlw̔ ڠ W {   wH-d{ 0 Dd<8:m wT-U,7, x 4%E    , У -`@- % N  @-  8J( J( p2Jt( \>Jv`6( BvJ\ FN( (@- \%, J% wZ ->JW-ֳ7 7  ?-Wp .0{ F7 -l >  -c xt mp7Ze -\vJ`-R7 D@^67 40* H-&w 3:{ 7 '- IJ7<7< -S  m7e B   J  2J J87 vj { 2J{|f L847<^7<X& x-T   m7e File_Name: HLSFNKEY AREA FILE RECORD SYSTEM ЪRJ~wpD<8@m&f Nzf& ze  J eJ7J!@r p v -Td BN- r&  ~ - Fe<87ʻ ƻe 5J J r2Jv ^>Jxb8 DvJ^ HP\ eW Q p v V-Td)  J 2J J >J vJ N  -ܯ e<87   p  %wԎ 77@7 w7 w77 JJ `wt`` @ `nl7jh4 @ `nwDwB7?@ 7@60@ `nww@ 7@    X Wtmf&E& e $<-w7  l>z>T rw@~2 7T PL7T7Qe}74 <u m74e. (&2 6r@ mLBn7 "- "ԇ >T 7@m7eHf& tH e t,fHPw$-   8$86wևw ݾ w  @t a`B l&fE& e Ca@`ȕRB&fE& Ίe /a@`ȕW.&fE& e a@`ȕE&fE& ~e a@`ȕDa@`ȕ W  veB a`W a` v 6   ~e!  ~W   6 6  YW    6   (    6       6 m@acm mmm@```7eڇ ܇af؇&䇦*a؇fꇦ$:a؇(2Ja  e<\7 fyX~^zΩA @@7p-LA @@7\-ҩ00tS%SM55512XJ 6: 77( "-  77Hm7e H e$87ZpW ~W 'FwC'>B . 707.(\    Jm7e-V & TIe( & &  zt& 4 e*-,(JfF^R@- چ% 0  @- ʧ eID SECTION: HLSEC ATTRIBUTE: HLFILHLRECHLSYSHLKEYHLARE (Explicit) -1 , (SYSTEM:OWNER:GROUP:WORLD:) [,]VDT,B*ff(Px(Px(Px(Px ,Rf$ww   - Rv ̱7 Ь  -ddv F <8 u P<:J, -J6J -2*2J ->JȽ -vJ -e \u P<8 @80v<8j@`7 \ˠ@e<87 7   ׭ -v*<8"@` H7`~v 7>  @<D׭@  Ve<87$7  ʷ  f* f*<8m 7- w7Yh`, n% @  , ^c@- D%  @- 4,E@-  %V<8ld"-w@- ؝%.$  @- p@- %, %e*ȷ ;8<8 (<8@ m<8 b7z- r& 7b w<8X2 7  @- %, e6<8m. 7 -ν@- %, e8<8nmd 72 <-z@- ^%, Le<e7p    В7wμDew @- %, %¼-"޼ڼռм˼f*HF&ʹ2 vje(w̛we3we?we-2UUv 77wre*l?hwde-^nXwĻe- -ֻ7af %7,-( L, ܻl Ě%    8Wp w.e?w.e  ݛ  f @ 73e B P 8%H l-`7D| .p 7->e84eX+-( D 7-e -$  3 73ee7 %l n%t \%? 7 "-7 l7 Wp @.wH7heb? ^F F Be <& Ο2 Be< 6t 708e2. 7 d  d7w  j7w  e & Ο te ߨt 7^e7 d  7w~rtr 7Hwhf8 4  Vew7 JF 3 7e?  * 3    @- - -7 7 00|SQ557i:)* File_Name: HLGFNDATDEFDESDFNFDLjvnv!rv vv,zv7 SY:FILE.DAT h,RHT `,R(T X,RUw C$n   w-d2n `)- r& N !-T re<87: 6e !>J" -@&J  -(2Jܽ ->J j-vJ _!W T8n ̰ ҫ  -d)x JHn 2JNn JTn >JZn vJ`n X v!- 4xe<87 ! !̿ Ԧ&  f<8 Ȝ<8w&ʎ Pe SECTION: HLSEC ATTRIBUTE: HLFILHLRECHLSYSHLKEYHLARE ,RHT ,RU & & @( f  e ee e ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw v&& D¥%  B&ХVA hz C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf jā & eL6& e8/& e\y*AHŀ ȕ Е Е Е & e & eЕ A %& eA Е A bEA EЕ A A   $Е.  AЕ; <    w D&& bЕ- eaePPPЕ-$w \D  &Е. ce  Е:   BFpԈ"Jt ͉ .?%R-F-IFT, Illegal file type value specified6?%R-F-IBR, Illegal response given, must be YES or NO&?%R-F-ISE, Illegal section specified(?%R-F-AMS, Ambiguous section specified(?%R-F-ILA, Illegal attribute specified*?%R-F-AMA, Ambiguous attribute specified4?%R-F-ILN, Illegal response given, must be numeric%?%R-F-VOR, Value out of legal range%%R-I-NKD, No keys defined%%R-I-NAD, No areas defined )*Z+֊@%%R-W-CBK, Continuation buckets will be allocated for this key|%%R-F-NHF, Help file is not available. Check release notes for the location of RMSDES help file on your installation media8%%R-F-BRI, Bucketsize and Recordsize are incompatible F p ҈&Eo$?%R-F-IVS, Illegal value specified?%R-F-CSE, Syntax error%?%R-F-IPC, Illegal protection class4?%R-F-IRO, Illegal response, must be octal numeric ?%R-F-NKN, No key number given?%R-F-IKV, Illegal key number*?%R-F-KOR, Key number out of legal range%?%R-F-KNS, Key has not been defined!?%R-F-NAN, No area number given ?%R-F-IAN, Illegal area number܉1Nj݊ @z+?%R-F-AOR, Area number out of legal range?%R-F-ANS, Are00S%SM55512a not defined?%R-F-ILC, Illegal command?%R-F-AMC, Ambiguous command+?%R-F-KMA, Key missing corresponding area*?%R-F-NUS, Not a user settable attribute0?%R-F-IPO, Illegal protection option specified3?%R-F-FTL, Fatal RMS error; STS=%P, STV=%P, PC=%P:?%R-F-ICL, Incomplete command line within a command file$?%R-F-XXX, Unused error message 30FXLj2?%R-F-ER$WLK, Device or file %VA is write-locked=?%R-F-ER$WPL, Write error on prologue for file %VA, code=%P:?%R-F-ER$XAB, Invalid XAB address specified for file %VA>?%R-F-ER$XTR, File string %VA contains extraneous charactersFp !ډ" #=$%&'(;1?%R-F-CON, Conflicting switches on command line9?%R-F-NON, Cannot submit files which are not sequential2?%R-F-UDK, Key specified is not defined in '%VA'1%%R-I-KRN, Key of reference is #%M, named '%VA'J?%R-F-UGH, Input and output fixed control header sizes do not correspond2?%R-F-IWF, Illegal use of /WF with record format9?%R-F-FNN, Output RELATIVE or INDEXED file is not empty!%%R-I-CNV, RMSCNV Version 2.000(?%R-F-SYN, Null argument on %VA switch&?%R-R-040, Reserved error message 40FppȈ`P4@v0 &i?%R-F-ER$STK, Unused error?%R-F-ER$SEQ, Record not in proper key sequence for file %VAC?%R-F-ER$SHR, Illegal file sharing options specified for file %VA7?%R-F-ER$SIZ, Invalid key size specified for file %VAFpJp}`P@40o6?%R-F-ER$RAT, Invalid record attributes for file %VA:?%R-F-ER$RBF, Invalid record buffer address for file %VA/?%R-F-ER$RER, Read error on file %VA, code=%P;?%R-F-ER$REX, Relative record already exists for file %VA3?%R-F-ER$RFA, Illegal RFA referenced for file %VA2?%R-F-ER$RFM, Illegal record format for file %VAD?%R-F-ER$RLK, Record locked by another stream or user for file %VAA?%R-F-ER$RMV, REMOVE file processor error for file %VA, code=%P;?%R-F-ER$RNF, Record does not exist for file %VA, code=%P8?%R-F-ER$RNL, Record not locked by stream for file %VA`܊P@N0 #^ʌ3?%R-F-ER$NPK, No primary key defined for file %VA??%R-F-ER$OPN, OPEN file processor error for file %VA, code=%P1?%R-F-ER$ORD, Illegal XAB ordering for file %VA1?%R-F-ER$ORG, Illegal organization for file %VA3?%R-F-ER$PLG, Error reading prologue for file %VA@?%R-F-ER$PLV, File prologue version for file %VA not supported;?%R-F-ER$POS, Key position n00SQ557i:)*ot within record for file %VA=?%R-F-ER$PRM, Illegal date information present for file %VA/?%R-F-ER$PRV, Privilege violation on file %VA,?%R-F-ER$RAB, Not a valid RAB for file %VA?%R-F-ER$LCH, Invalid logical channel specified dor file %VA9?%R-F-ER$LEX, File extension not necessary for file %VA8?%R-F-ER$LOC, Invalid placement specified for file %VA>?%R-F-ER$MEM, String buffer spans memory limits for file %VA?%R-F-ER$MAP, Unused error@?%R-F-ER$MKD, ERASE file processor error for file %VA, code=%PF?%R-F-ER$MRN, Maximum record number invalid or exceeded for file %VAB?%R-F-ER$MRS, Illegal maximum record size specified for file %VA?%R-F-ER$ATW, Error writing attributes for file %VA, code=%P/?%R-F-ER$BKS, Illegal bucketsize for file %VA4?%R-F-ER$BKZ, Illegal area bucketsize for file %VA?%R-F-ER$BLN, Unused error7?%R-F-ER$BOF, Beginning-of-file detected for file %VA8?%R-F-ER$BPA, Illegal buffer pool address for file %VA5?%R-F-ER$BPS, Illegal buffer pool size for file %VA;?%R-F-ER$BUG, Internal RMS-11 error detected for file %VA;?%R-F-ER$CCR, Multistream access not allowed for file %VA@?%R-F-ER$CHG, Illegal record key change attempted for file %VAFpp`$Pc@0ۉ L8?%R-F-ER$IOP, Illegal operation attempted for file %VA=?%R-F-ER$IRC, Illegal record length encountered in file %VA??%R-F-ER$ISI, Invalid internal stream identifier for file %VA??%R-F-ER$KBF, Invalid key buffer address present for file %VA8?%R-F-ER$KEY, Invalid key value specified for file %VA@?%R-F-ER$KRF, Invalid key-of-reference speccified for file %VA7?%R-F-ER$KSZ, Invalid key size specified for file %VA:?%R-F-ER$LAN, Undefined data area reference for file %VA7?%R-F-ER$LBL, Invalid ANSI magtape label for file %VA3?%R-F-ER$LBY, Logical channel in use for file %VA =x"TȌ"?%R-F-ER$FNF, File %VA not found5?%R-F-ER$FNM, Invalid file name syntax for file %VA;?%R-F-ER$FOP, Invalid file options specified for file %VA??%R-F-ER$FSS, File string parsing error for file %VA, code=%P0?%R-F-ER$FUL, File or device full for file %VA;?%R-F-ER$IAN, Undefined index area reference for file %VA2?%R-F-ER$IDX, Index not initialized for file %VA=?%R-F-ER$IFI, Invalid internal file identifier for file %VA7?%R-F-ER$IMX, Illegal XAB series present for file %VA?%R-F-ER$INI, Unused errorFx툀-pPh`ӉXP'@a80Ҋ9?%R-F-ER$ESS, Illegal expanded string size for file %VA?%R-F-ER$CHK, Bucket header check error; file %VA is corrupt??%R-F-ER$CLS, CLOSE file processor error on file %VA, code=%P9?%R-F-ER$COD, Invalid XAB present for file %VA, code=%P0?%R-F-ER$CRE, Error creating file %VA, code=%PB?%R-F-ER$CUR, Improper record context for operation for file %VA?%R-F-ER$DAC, Unused error:?%R-F-ER$DAN, Undefined data area reference for file %VA:?%R-F-ER$DEL, Referenced record was deleted for file %VA=?%R-F-ER$DEV, Bad or inappropriate device type for file %VA:?%R-F-ER$DFW, Deferred write error for file %VA, code=%PЊV,pa`}?%R-F-ER$ABO, Unused error1?%R-F-ER$ACC, Access error on file %VA, code=%P9?%R-F-ER$ACT, Activity precludes operation for file %VA,?%R-F-ER$AID, Invalid area ID for file %VA4?%R-F-ER$ALN, Alignment options error for file %VA:?%R-F-ER$ALQ, Allocation quantity too large for file %VA?%R-F-ER$ATR, Error reading attributes for file %VA, code=%P|,00~X r[q$X 3SYSYSYSYTICLSYOVN((k(k^0DUDUDUDUTICLDUDU0B,/(N|00SQ557i:)*(i*w Jfe 5teB e:   @ @ C: `UC B d V`ef   d     ;a @  W f Е- eePPPЕ- Е 50e %< f< f @ (Օ: 5Օ: @e e0e0U&@ H %0 AUUUU    T T T T ee(e(e(e(T $)T T TU U U U  &f!  E D  E E C B Ί A B@    e  T T T T H1CdT T L $)dL t dL d  JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC&  m %4P4PSY:CMI.CMDCMI >P"@ P&  PP w ' UD$BA &( U BQ Е*  w , ť ť 0B 2Aa & & @( f  e ee e <wV &f& v TI0:RMSDSP.LIS&f f ff2 f 5ff ef D & & &  &f& & & Ε f 5(& |f ff D & & &  &f& & & Ε f &f w   w"&f \1e? ww & fYw  nw`j  50A ? 00SSM55512SY:*.*;SY:eE @ & m    be?E? & f YABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw B && D¥%  B&ХVA C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf * & e 6& e/& e*AHŀ ȕ Е Е Е & e & eЕ A %& e~A Е A bEA EЕ A A   $Е.  AЕ;     w XD&& bЕ- eaePPPЕ-$w (D  &Е. ce @ Е:   bB hr`wL4 @<C3 3  ,, UEs3w|&fV B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J J @ EͥAA I& TI& TI d h *& CZ#B#7 7 7  ~vv7t   0^5 5  n  <!& 0 ee  eX eX & & &  n& & & Ε b 7 XR7J  DSP>%DSP-I-ID, RMSDSP Version 2.103'&1  ( : :! : L ^ 8*5ew t, Bv     5Bw 50  (r- DUt-E D  E E ܁T&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U 5 ߥ& *  + 23E Ew 4   Е-   0@A DW e`fÊ    E &  m  f A N  %w eE D` bl lrw \  B eE"s    s-  Csl&f &   `@ ` B   & A @    &ff r[qr[qrT R`@0@D@Xl (:L^0p("^"0^"^#"^p&8*h'*L)*-*00TTTTTTTV& & & & f& & & Ε V UO!^" RMS-11 Display Utility Purpose: To display one of the following: 1. The attributes of a sequential, relative, or indexed file 2. The attributes of a disk-based backup file created by RMSBCK 3. The names and attributes of files stored within a tape-based backup container file Command syntax: [outfile[/option(s)]]=infile[/option(s)][,infile[/option(s)]] Options: /APpend - append output to an exis00SQ557i:)*ting file /BP - process input files as container files created by RMSBCK /BRief - produce output in BRIEF format /FUll - produce output including area and key information (indexed files only) /SUpercede - supercede the existing output file File specifications are in standard format: device:[directory]filename.type;version Wildcard characters such as '*' or '%' are valid in the directory, filename, type, and/or version fields ,wR0wJwBHw:8w2w*w"&&  ŀ  Ћ "D az  w v0 00 ppM $w`w \    .%w0"0 ep" lp0  *" ` D `WaWz 0,wɥ;&ww%7   Hw ŀ&  Հ &^&` `^V `W-ŀ `w4wrw  ɥ@0 p @ @  ^ 0 00w&^&` `^w T-00 00000Uj0 0000% w r \" h0 U%  eE 4`0  (e)Ej0`0^ 0n5j ^h h U% e)0)f & 2נ/נ נ   נ נ RՀC7 P&fw:6 7 .7,0 @,q `-KacJE[ !m@  ) L R  7 f@  &  5]U Ev :j&@E A VN ̆  E vE c  @  . &f"     8  " .$   ̥ZḀ90     feEe  0 p|7 vpfe`R  5NeU<52eU 5eU5eU5reU5XeU\7 7 Fe 7  A1IDENTIFICATIONVERSIONBACKUPBPBRIEFFULLIDENTIFICATIONVERSIONAPPENDIDENTIFICATIONSUPERCEDEVERSION""""""### #/#9#Z#$#Z##"x#ȅ#~#,"x#^$~#ʆ"ȁ#$#=/R"R"l"##$#*#?#%#_#$#-#.#;###|"_$:ȅ $ $$ $_ $: $Ԅ $(:$[:$%#$!&%:$*:$:$,:$-:$.:$:$)]/b$!!""R"R"/$!R"8"R"?$HEL $ Pʜ $ w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C ,wR0wJwB4w:w2w* w"E & TI@eu(5,54U5&ff e ff fe n2ff :e P 22ff (eff e7e5(5,7d5 ff e ه7 7 -5 ff e%l[  %5jep5652 2 5uff e00SSM55512 >& & &  f&& & & Ε   !5X  w w 5.  ff hewff Le5"ff   P  2%.X t7 L >&fm0  5u &fAB & J2&f 5F@& (R, 0 - Z\fhbd&& & f e7& el-e & e ev&  &  &f && @& 7J& . e & ~&  ^E&  ' '!' o' ^E)'3'9' B'^'o' 5Ze'y'&f & t & 5\'5Z''5Z' 5Z''y'z'f &  ff e%9  2Df--mDmeW$BAW$CKW$UPeW(ABW(KCW(PUe Ћ &&&&Contents of container file: %VA %VA%VS%T./%T.%VS%10S[%B,%B] [%IR%IW%IE%ID%I,%I] (%M)%10SOrganization=%I, Record_format=%I%ISequentialRelativeIndexedUndefinedFixedVariableVariable_with_fixed_controlStream (RSTS/E)(Unknown)%10S%IContiguous, %IDecimalNo_version (RSTS/E)OctalUnknown (Pre-V2.0)Version_number=%I 8* f &  H PH PH, P( 2'1 P7*,'  >#2   4& 6 *: 2 2 M' &f 7 4a' v B & 6 7 2 2 2 n' :&f L7H ' CTTT'  -'  H& 7 77' &f 7 b'  X j'  2 2 2"2$ &  `X & (      7*'  l5 (5(5(5( P 2 ` .&(  E%>(.%I(, ,"o( T(7 7", z(n7 hwb7 `wZ 4 & ( 2 ).(4 2 2 1( 1ҋ5(7* 6 D&  E=)&%G)%d) 7*% ) 0ҋ 7*) x7*)) ^ 00SQ557i:)* ) E )Z%)L%)> % *0*(  jf & v))%VA%I%VSRMS Prologue Version=%D Size: %T./%T.%VSCreated: Owner: [%B,%B]%VSRevised: (%O) File ID: (%O,%O,%O)%VSExpires: File protection: %ISystem:%I, Owner:%I, Group:%I, World:%IR%IW%IE%ID%I'''( File organization: %ISequentialRelative%I, maximum record number=%T, no maximum record number definedIndexed, using %M key(s) with %M area(s) File attributes: %IAllocation=%T, Extend=%M%I, Bucket size=%M%I, ContiguousMagnetic tape, Block_size=%D Record format: %IUndefinedFixed length %M byte recordsVariable length%I, maximum %M bytes, no maximum defined%IVFC, %M byte header%IStream%I Record attributes: %INone Fortran carriage control Carriage return Print file format Non-spanned (blocked) $w"8" p  "2f re f  (&&7 7& & dQ&# W ɋ" P"6-& F `& : @ r& & &  & p *f & &  W'4W'.W'$W'W'W'' 5Ћ 5 (  (5 ( $(5.(  8(ee"  4& &   Ԧf& N  &   '8(& 7 ' &  2Ћ-' 7 O' t &  3Ћ-' X h' L & *  Ћ,*' ( ( >70:7.6' p %IPrimary key:Alternate key number %D: Name=%VA, Minimum record length=%D Key information: Type=%VA, Length=%D, %VA, %VA%I Position(s) and size(s): Segment=%D, position=%D, length=%M Area information: Index: Area number=%D%I, not initialized Lowest level area=%D Bucket size=%D, Fill factor=%D Data: Area number=%D Allocation information: Root virtual block number=%T, Root level=%D First data bucket virtual block number=%TStringBinaryIntegerPacked_decimalUnknownDuplicatesNo duplicatesChangeableNo changes, Null=%O 7 ~ x  8wf5  , . 07 LN߱7 >ߡ   B* :* 2*- 7%  f L+& e .  ̵  & V+f ̵J, R(C&̵ʜ ̵ʜ ̵zx& ?DSP-F-%I?DSP-F-UNKERR, Unknown error code %POPNINP, Error opening %VA as inputCREOUT, Error opening %VA as outputPARERR, File specification %VA in errorNOFILE, No files matching %VAAPPERR, Error opening %VA for appendSYNTAX, Syntax error "%VA"CONOPT, Conflicting option "%VA"CMDOPE, Error opening %VA for command inputCMDGET, Error reading command from %VAGCMLER, Command processor errorDEPEXC, Command file depth of 4 exceededGCMFIL, Error in command file name %VAWCDERR, Wildcard processing error %VAREADER, Error reading backup file %VANOTBAC, File %VA is not a backup file|++++ ,3,O,q,,,,-9-`--00SSM555120 5% f +& e $ 7E̵& Jr+f -RMS-E-ER$%I-RMS-E-ER$???, Unknown error: STS=%P, STV=%PACC, Access errorANI, Not ANSI "D" formatATR, Attribute read errorATW, Attribute write errorBKS, Bucket size too largeBUG, Internal RMS error condition detectedCHK, Bucket header corruptedCRE, Could not create fileDEV, Bad device or inappropriate device typeDIR, Error in directory nameDME, Dynamic memory exhaustedDNF, Directory not foundDNR, Device not readyENT, Enter function failedENV, Required RMS support not presentEXT, File extend failureFEX, File already existsFID, Invalid file-IDFLK, File is locked by other userFND, Find function failedFNF, File not foundFNM, Error in file nameFUL, Device or file fullLBL, Not ANSI labeled tapeOPN, Open function failedORG, Invalid file organizationPLG, Error in file's prologuePLV, File prologue version level unsupportedPRV, Privilege violationRAT, Illegal record attributesRER, File read errorRFM, Invalid record formatRPL, Error while reading prologueRTB, Record too big for user's bufferSYS, System directive errorTYP, Error in file typeVER, Error in version numberWCD, Wild-card encountered where not allowedWER, File write errorWLK, Device is write-lockedXTR, Extraneous field in file specification>+Q+`k+P+@+++,@$,0R, p,,,,,-`-X7-@M-0p- ----P-0 . *.I.w...p../-/`J/0c/////. 5% & *f ( & J*-RSX-E-IE.%I-RSX-E-IE.???, Unknown code %PVER, Parity error on deviceEOV, End-of-volume detectedWLK, Write attempt on locked unitABO, Request terminatedRSU, Shareable resource in useBYT, Odd byte count of virtual addressBLK, Logical Block Number too largeNOD, System dynamic memoryIFU, Index file fullLCK, Locked from read/write accessHFU, File header fullWAC, Accessed for writeCKS, File header checksum failureRER, File processor device read errorWER, File processor device write errorSNC, File ID, file number checkSOC, File ID, sequence number checkCLO, File was not properly closedNBK, File exceeds space allocated, no blocksBDR, Bad directory fileRNM, Cannot rename old file systemBBE, Bad block on deviceFHE, Fatal hardware error on deviceNFI, File ID was not specifiedEOT, End-of-tape detectedBHD, Bad file headerOFL, Device is off lineBCC, Block check, CRC, or framing errorNDR, No dynamic space availableBTF, Bad tape formatALC, Allocation failureULK, Unlock errorWCK, Write check failure+ +<+^+v+++++,3,I,a,,,,,-6-c-{-----.).A.i.....|<9,?_?_}X r[q$X FU00SQ557i:)*SYSYSYSYTICLSYOV(P(PFvD5CDUDUDUDUTICLDUDU,/N9|PP4 ^ W SY:CMI.CMDCMI  IFL>&0 *l h \ _0ww<w w , ť ť 0B ,Aaw ,' UD$BA ,&( U BQ +Е*  & & @( @,f  e ee e 3w4e~f f &f &ff ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw 0+&& D¥%  B&ХVA ( C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf ) & e)6& e)/& e*AHŀ ȕ Е Е Е & e) & er)Е A %& eF)A Е A bEA EЕ A TA   $Е. < AЕ; (    w F)D&& bЕ- eaePPPЕ-$w )D  &Е. ce ) Е:00SSM55512   *(B 0'@42('w%4 4''C3 3  ,, UEs3w3`B&&f:B B * ͋'% ͥ!ͥE%,  D5  PB2 %pċ5J J J @ EͥAA I +3 3@    w&&  % `7 5  R$5| 5r w5 & & e5L 5J 7 \ FBRe:-6 & & & e # f*& & 67 , # G5+& &  # K,& & e׭ 37 0 * & "we4- & & & :e ~4 "#% n B /& & 7 z $# )] "0& & d R2& & R.57e 7 e n@`w 57e7eD 7 w3f& `" "  " %% B ރ% "-7 |ew-pfb wwp  7h  d  8' .w $ d%7, 7(  w $ .% w>   8' wD $ ew D+ w $ ee (< %$ eIFLP.TMPIFLA.TMPIFLA1.TMP P TtP PTTtP@^P PPdd PPT P>?00SQ557i:)*P|~PSY:???? TI:?IFL -- %IFatal RMS error - STS = %D, STV = %D%IFile access error on %VA%IOutput file must be an indexed file%IPrologue version number too high%IClose error on %VA%IFile access error on %VA%IRead error on file prologue %VA%IExtend error on output file %VA%IMemory exhausted%IInput file is not sequential, relative, or indexed%IRead error on %VA%IClose error on %VA%IOutput file fixed record size too large for bucket size%%IIFL-I-ID, Version 2.012%IBlock I/O write error on file %VA%ISyntax error%II/O error on command line input%IFailure to open command file%ISyntax error%ICommand file nesting depth exceeded%IUndefined GCML error%IUnknown switch %VA%IOutput file switch specified with input file %VA%IInput file switch specified with output file %VA%IMissing file specification%I/KR not allowed for sequential or relative file%IInvalid /KR value%IBlock I/O read error on %VAException record: record out of sequenceException record: duplicate key where not allowedException record: record too short for primary keyException record: record long for bucket sizeException record: record doesn't fit fixed lengthException record: record too long for maximum record sizeException record: record contains an illegal packed decimal key%N%4SNumber of input records: %T%4SNumber of output records: %T%4SNumber of exception records: %T%IInput and output fixed length record sizes unequal%I/TR and/or /PD required with fixed length output records%ISORTS error code in octal: %O%ICreate error on %VA%IWrite error on %VA%N%8SPrimary key%4SSort has started%4SSort merge phase has finished%IError with logical unit %VA%IIllegal device %VA%4SLevel-0 loading has started%4SLoading has finished%IError terminated input before expected, but continuing%8SAlternate key(s)%8SAlternate key %M%VA%P%P,%P%D%D,%UNumber of output records: ????Number of exception records: ????%IOutput file must be empty 0 L n !>!Z!~!!!!!""4"h""""##H#z###$H$$$$$$%`%%%%%%%&(&H&`&&&&&&&&&&'%19SRMS-11 Indexed File Load Utility%19S--------------------------------%11SFunction: to build indexed files%11SFormat: IFL outfile[/switch]=infile[/switch]%N%4SGlobal switches:%7S? or HELP%15SType this message%7S/ID%21SIdentify current version and patch level%N%4SOutput file switches:%7S/ER[:filespec]%10SWrite key of exception records to terminal%31S[or write records to filespec]%7S/LO%21SHonor fill numbers%7S/NOER[:S]%15SStop processing if input record is%31Sincompatible and delete the output file%31S[if :S is specified save output file]%7S/PD[:[#]x]%14SPad input records to outfile record length%7S/TR%21STruncate input records to outfile record length%N%4SInput file switches:%7S/CL:nnn%17SSet sort work files' cluster size (RSTS/E)%7S/DE:dvn1:[...dvn5:]%5SReassign devices for sort work files%7S/KR:n%19SKey-of-reference number%7S/NOSO%19SDo not sort input before loading'''"(X(l(((()B)`))))&*b*z***+00SSM55512'&1 ,B $ CfD  CH  CK  CFL  CN C2L CE TCX fCX CU CU5ew , Bv     5Bw 50  (r- DUt-E D  E E ܁B4d544B&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U 5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f &  m  f A N  %&   `@ ` B   & A @    &ff r[qr[q 00SQ557i:)*7VBNn+:,-268R X7NN`BBB@BBBBC@BBBC@BBBDBBBD 0D CCB#0D BCB)0D(B0CB10D<BCB CB4lITC0CxCB8D e (D e & & T e f51@D D–%0D 2–% |T n7 e5 PD % 5l"@D %^0D % 0  dT e 5$9@D % R>0D  <>0D b%  DT e >PD 0% 5"N@D %0D %  | >e 5`"@D %0D % ^   e 5"N@D |%0D j% r    e 5,w"& w#& w$& e5^$@D ̿%^0D % "  dT e7  5$N@D |%0D j% r  | e7 wLZV7 dϷ \5 Bd~^D e  &XD ޾e  &00SSM55512T e wԾ zW& Z% ZJwf<79wg471 @׭ 3 111,`,C`eD`AE "t  eeO~ `V R NF e ~ ݜt 7 ݏt 77 ǎ5~ǎzNJ7 7 |lƮ7 R5- & & & eT d\7 7  7  pe 2- & He 7 ź7 Ŭ &j e  w tm> && B%  ~`  Et1`e ~ wZ & % I  @7 J" J& % 5@lC~ ,~ W @7 w7ķ  @7 |wt7q 88,wbwZHwR8wJwBw  N @Ԁ %! - mC a  v  M z  h  V  D  2   f6D~  f6D~  fC~w^ŀ  ~@w 0 00 ppM $w`w \    .%w0"0 ep" lp0  *" ` D `WaWz 0,wɥ;&ww%7   Hw ŀ&  Հ &^&` `^V `W-ŀ `w4wrw  ɥ@0 p @ @  ^ 0 00w&^&` `^w T-00 00000Uj0 0000% w  \" `0 U%  eE 4`0  (e)Ej0`0^ 0n5j ^h h jU% e)0)f & 2נ/נ נ   נ נ RՀCfEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  v5 &) ˥A˥Z"˥a˥z ˥*˥% ˥$˥_˥-  ˥0 ˥9 ˥7 U   ˋ˥ ˥ w  zFW CB  & & & eW  & & & eW  & & & eW  & & & e & & & e7 Ƴ x׭pHG׭`?@RH& e dv&,7 @ *W:@ w$7 $00SQ557i:)*W:@ ҹw 7 WSWO@aWEWR& &oƟ7 sZ  W:v! W/W:  JJrW e  v! W:   WpeZBe e W Z׭ wPD % .& & N!eʉ7 7 7 7 & f ew5~5x 5r5l^e ef  B~7 P  B~ȁHELP?ID/IDERLONOPDTRCLDEKRNOhlw\w ( zK j f54b@Z80P0Kπ e7@:; Ze )T 7 |e5r  & & ͎ e w54 `&XTNv ɋNWvv5($eAE @pwe-  m*0D `e l  T e5E͘ee-" L H0D e   JT  <~e-0"  0D e  T e2 C ̓0:05̀e7,:' Fe )T 7 hώ& & ʎ e w0550 7 hbe$\7 VPe*J55&2,*      !  4s K 4JW 5& `W 6&W 7W 8f&N B8f&=W >Xm|EQ  ɕ-ɕ+  NtEe0 4Ee0 &~4 X ve  @ &.e6% 4% 4%04 f v  w .eF wN.e6@a "H,ww(wĦ   VP @PBPBmL B  .P C  PPBPC  .PBm OPC  PB OP OP0O 7 O4 O W!x.P3.P.Pt.PtPBPBPBPsBPsP4BPP7FP.Pw!FEtPe  O O VPW 4 VP 8 i&7&fd E ww wwB`e    !!w 0 `w0   `wn  N`wP D:m,W&tO`@D AP  7 7t.P`tBPwwEEwAaw w   & pz p\&ffO0Op O&O( raOr O0.PO,O,O OP6 2 p  fOP wf&0T ]brO U  OPj3 % ڻ4O p fOP wZ4O.PPtBP O4 O 4 VP w&fO0Op 0O&0O( taOt O <0.PP \  % w O O 4 VPSORT0D.TMPP#@ O P00TSM55512OfOOw yK@wwJ,w&w.@a "HvWSU% / D  ' K K@"d BB0 B B@AE`fS e!?  K" " zׯ @ .7(ׯ@ 7ׯ @ 7ׯ we`     W  W!W$$ SaDa zE  AaS``@aB`5aab""    (  =vWRU% D 7!f5e & 6%   : J   D VwbvWQ %7     vj Jwwz N  % ` ,  @ d& 4mWWmW7 8  W @ 7 7 7! W W W  5-tv W W EB#T >7 Z Vw &>  P5 W 4-0 < w&vWQ %U%ffw5ew  6 f  5 - $77 @md S7 j  vWR  B X  Tw$$   C B B  & cC   W B W%) W P "WC !7 WBW 0W$  7 wVXV^VdVjVpVvV|VVVVV 5ff  z7tJ2    h   rt > - " &7!.@Ww eE D` bl lrw   B eE"s    s-  Csl4w8w w ^ B~$7N׭ B5< 60,.$*ƺ$ d7lj  E~ 7 ^^^*7`N^^_~_z_v_r7 7 5t||zI 6e <(wN e f& w^ ww ^^   w8507 *55d^ w"whFB> 9 <%`, \P ~X &, &,PHF &,  &,PH2 /&̸e,ĸB`EUW W  HH ~AEA H ȕ H ~H^ w,jf ` \w-< 1& & & Ķe6^ Pw$CJ nD |w:4 0 ,J e w b^f ^ ^wb 'Re&& ;N e )%f^ wBNX j%hοN R%  T| e 7 PL  wN 52tNX eL ( T|X et  T ew`^5  @ <-5&5,7 &x  #Cc є  e - Զ]t5l-5 ,+5w$ -ֶ 5wȶ 5 - ׭I"Jm00 TQ557i:)*HDW @E @E !  ~ 4w8w w\ B~X Fe < &  e.&e  e & w7׭ 5 0,7eVZT B w··  | t@ @`7 xt 8\4]0],J*$7` Ĺ]]]]  ]"]5<ZVt I e (wtN e & wP\ ^wVwd\`\ XX 4e *w0  w  չ mָ#`,ȸa C~]W e$, W e$,IW e$, W  e$,3W 0e$Ze,RA`DEQנ נ  H DEB ȕ  C <] ww2- 1& & & Ve\ w~ N\b  ] JwN '>e&& >N e )(n\ wNX \%v ~N 8%  T  ve  (w&w,ʖ7 ѷ 5 Bd~6D @eL &0D e *  fT Xe w$`~ 7{ ` !E ,u,r? jf7@T26 r 2(w$Ѐ$D77 lI ^e  T   & & & e?  m r mmϔw mό   j `7r n  H` "r 2r w  5   C~  B~m   0  5&5N  , 6e*  & e$&TT ~e ^ % Uvfb mXnj f T 50 7 <-N6 n 387.7,."" 7  m(& De fB>*wpw6D e   .T e 77`x0D e  T e wƃ57  Wf t y6  6 a6e`ŀo-wd `B^ŀo a E`W`fTZ ~% S  f n 85( .% + Dӄ & ` 1    e a N`f he wwdw_wZwUW ~TnjB\& N ɝ"eĀoВММȜ  >5 rr r r W5f   e 77r6D e   T e wT  : h    •  •Õ •mÕ, Ȑ,TT e Re  ,ff fe e~ wmwlwgwbw]VR00TSM55512& % ,B~ 8 hj` %  w\57 7  5L,&&, *e* e$5 ݝ % % ~ "   ," w,   ,Fw m>7E77P@m"7E77׭ !a׭׭ Cעۂ!E ҂ ׭jc0\׭W$׭N ׭G@B:j @   5( 5 5 5p7 jÇbÇw@B& % ZĿCl S~-޿B, b% AB& P% 8Cl S~7 7 B, % B& % 6Cl S~ %  w8wwn׭T5eU e ( e (-Njvr^m7VeP5J D-@ 7 d4Fm`,-(~ & & & Ȼew V 7r7w7   2% ؆ּ Vм@m@`7 w@  `7nZwh7fwd7bw`RJlBb& :e" $4 , wx5 5w@55   de7 55 m- Ge5X5L zmܼ-j edeѕѝTѝPѝZѝWѝTѝQ5ѝѝL  b $ 5t @m`X7 \ mBm:..75 7 ~5D-5:w#5-°- 1"T ex :  z e>e w.e& ҝҝ&ҝ#   ˕J ˕ L6 ow,Di v  6 6 6 NeEe, @-"ov6 5   6  e 5B |e r ) e e4 -` ewn 5RNU el (& T|U ޯe  "T ew`~Ĺ5ʹ  ` \-5&5,7 &  #Cc є  e -@]5-&5> ,+5.w$ - 5w  5: ָи-ȸ ׭i"jmhdW @E @E !  ~ ,w4w8wwfm ؽ-Խ* & & & tewzʽƽ("7rʽ7w7  % ؆njh X|mj`w8 476 RX ~ 7w7w7w& eB >7 <7 7 NU % Nwjm dw bm\H meܽ5ҽʽ r5 wf577e7  5@5 < e00TT557i:)*7 $  AwR " TmT-3  e m軷(e" -* $m ȝ 7  zڼmڼ-h be1 ѕɝFѕѝ<ɕw484  wvѝpѝm ae ʶ mTpllhc5 mm7v5>7 85^5rV5Խ&7 Ƚ wz-°- 1T  e5!55 mbȝVSNI>7 <  e,NU Ⱆ%U а%5   e7 4Ne f-  -0wN-"~z70D ;6 ɝ(% ɝ6D ܯe N  70D e T ɝ ɝ ɝ ɝ6D @e L#  T zeHt mm<ɝ.+&!7  r[q? IX %  .w* w\w a ^ (0      $$ ((  ,0<84@D, H      C A @   f A #  &  m 5 f eC  CPU  ,, &. 0 0   ,`w3   f %w C55  B`0 VC 3 5  @ss   1 1 5 5  "` 0 1 1      &V  A  B,D 5  5 A     *8 1 1 1     p55    >      b  w" "& d   @@ @ 9C@&e$e& Μ N<B>& 2mB>o  o "j d `[ ]Ҭ V  Ue  500$TSM55512`昃`$EEˊˊE & ˤ!%   cc   9e    A>55,<lɥ fEÊ֥  P &&e BeLPuw w  "` &&   f&& ע , , A`  &    eAm:CEeB@ & &  CR  &VP5Lxn ff ea ENe LuH=w <E Aaa &EC ez.*Ee{XE" Qc & &f& e  fu%e.e.(P(eXw^`% N/,%e% PQ4& ߥ&1 & 8PKQr 8&9 %솀w +3 3@    #  .0 µ1!0  5 55   e5& Y5 T SP K  E > . 5&@@   ) % e  C   r  &V p 0 p 0    5w     @  ppp 0 0 0  1 1 1 . (f& H1, 1, & 4 A`!  && &V veN*PU5D e0  S R  ,rw@ ` u J AeLKUˊ#Q@ 6 P5.+ T (&05E 505@uB5 J HˋQ M ̥ I5 5A@p 8 ȥ 45  % D`P`_ ,/O&PXVUTSEEuB 5 =/5 *@ %E E E  M͊    ` ͊ ugEE5 p U H  5@\ .% - / &,3e"5550% @L @   %P Eew2up1  5 E #  | * j P PJ!  e.( 3  H &1u= (  4 FHE} H A  )    Hs3(f A-fL* .H@ D,*SAe@``f A 4  .   &f .D̥  w f 2 & 2r  4  8 <0w d& l   &ap aB#E   *   uD5e`w eE< .f 2  , ,p l J a b! jP PH  HP PH f  %5w  #5 ȥ ȋ5ȋ1 1 ".#Հ && rpp  f '`0  0   &f 0 &V &  K&1 . 1  ̥ @ $ ! 1  ŀ f&& h pp  @ BeE3   0 f .  @ B fE 2   U ZC `5L H& && 5 r, r, ` ^ E e(" eb `vl %  & ̥ 4 f f Q Ɋ  !5p,p, -f& & & C B00,T1T557i:)* ,.6..66  5555 B     &&  0 .   6e q r,r,   Ê @eL  1 1 &V & PB  p p- 5 84 595 - 9\  I' Q5KA@!Af9f:: 9 :9 D!g9$5 : 9 f&&  5K Jņ%!*5 86 55 A@ tt  B9- t t 5 :w "`4  554 5 <>B@ tt z5 : z&D4 4  Bm@.C@# UE;C@ .@<’  4-   t4   P V  R&& >5fLV f@&  E `9J@m:ȵPD& & EeeҔ ȵ    &74  v&  n- @eL.4  40 .e&& (@  \fLV   < "`  . %+%0  . C@ %    "`&& `%` fLV & 5@ b @@& e$cÒE eccBm>     t 59&& &l :U,:` 9wCm: "9wh:5: < s>59wB9œE  e` D˵˵˵em <B@ ,W m emv` <N  8A@A E mv` ˵’ee`ef v` < l P9 5,mweE,C:6`” A@µEe   A@ ˊפ ` El `: ff f4  & e4    @ "`  H4 |s,66X r[q$X ;SYSYSYSYTISYOVN(([([Zp!DUDUDUDUTIDUDU6Y,/5(Ns|004TSM55512(i*w Xfe 5teB e:   @ @ C: `UC B d V`ef   d     ;a @  W f Е- eePPPЕ- Е 50e %< f< f @ (Օ: 5Օ: @e e0e0U&@ V %0 AUUUU    T T T T ee(e(e(e(T $)T T TU U U U  &f!  E D  E E C B Ί A @    e  T T T T H1CdT T L $)dL t dL d  JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC&  m %0P0PSY:CMI.CMDCMI >P"@*P. / &P#@j-P- P4 -P,w ' UD$BA &( U BQ jЕ*  w  ť ť 0B Aa & & @( nf  e ee e <w &f& v &f w   w &f F1e? ww & fYw  nw`j  5L6A ? SY:SY:eE @ & m    be?E? & f YABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCT00%RST-I-ID, RMSRST Version 2.106 (1988) '&1  2 ! D ! D $ D 8" V ! h ! H/5ew t, Bv     5Bw 50  (r- DUt-E D  E E ܁^&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U 5 ߥ& *  + 23E Ew 4   Е-   0@A DW e`fÊ    E &  m  f A N  %w eE D` bl lrw \  B eE"s    s-  Csl&f &   `@ ` B   & A @    &ff r[qr[q|pt \tzpp`@ p!@!@!! !2 !  D ! V ! h !4z 2 #$h !# h z #|& $' (|& *H/ @! +40 .40 ! 240 ! 5408 .! 740 8L6 @!^T!^T!^^^^^`00DTSM55512!& & & & f& & & Ε  ""#/% & RMS-11 Restore Utility Function: Restore backup files written by RMSBCK Format: outfile[/option(s)]=infile[/option(s)][,infile[/option(s)]...] The output filename and extension must be wild cards, that is, *.* Global options: ? or HELP type this help message ID identify current version number [NO]QU enable or disable query mode SL[:filespec] write a summary listing [to the specified summary listing file] Outfile options: [NO]CV disable or enable version radix conversion FR alter protection codes NV create new versions of output files RA read data after writing RC read and compare data after writing SU supercede existing files Infile options: BD:dd-mmm-yy select files based upon date of backup OA:[dirspec] select files based upon the original account SE:speclist select specified files for restoration from the specified backup container file(s) Dirspec is an acceptable directory specification which may or may not contain valid wildcard characters. Speclist can either be a single file specification, or a series of acceptable file specifications enclosed by a parenthesis pair, and separated by commas. File specifications are in standard format: device:[directory]filename.type;version Wildcard characters such as '*' or '%' are valid in the directory, filename, type, and/or version fields. ,w0wwHw8www& ŀ Ћ az  w T0 00 ppM $w`w \    .%w0"0 ep" b lp0  *" ` D `WaWz 0,wɥ;&ww%7   Hw ŀ&  Հ &^&` `^V `W-ŀ `w4wrw n ɥ@0 p @ @  ^ 0 00w&^&` `^w T-00 00000Uj0 0000% w P \" |0 U%  eE 4`0  (e)Ej0`0^ 0n5j ^h h U% e)0)f & 2נ/נ נ   נ נ RՀC7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &f#     8  " .$ B  8̥ZḀ90     00LT1T557i:)*feEet 0 p0 0 eR  5PeU56eU5 eU 5zeUh5`eUN5@FeU@45&eU5eU5eU5feU5 LeU 5@2eU@5@eU~5veUd$b-\e-J  Be0-*dl -d7 7 7 e 7F x A1  7 7 7 7 ]vr7 p`4b2V*R(F 7 2.*(5 Em 5 F  7pe5ۀE 5 7|xvn&eIDENTIFICATIONVERSIONBDIDENTIFICATIONNOQUOAQUSESLVERSIONJANUARYFEBRUARYMARCHAPRILMAYJUNEJULYAUGUSTSEPTEMBEROCTOBERNOVEMBERDECEMBERCVFRIDENTIFICATIONNOCVNOQUNVQURARCSLSUPERCEDEVERSIONn'}'''''''''''''''''''''( ( (( (%(((+(.(1(4(>((+((((&(ʄȅ((,6&(*(ʆ6&ȁ(n+(=/%%%)()(P*(*(%(?(.F);)-@($@(_@(@(@()*F)%F)?F).);)-@F)$@F)_@F)F)F))*)-))&_):ȅ))$)_):)Ԅ)[*(*&&)$&)!&)#&)*&%****,%,**,*,*]&)&[&%@V**@V* V* V*. V*- V*]&/*0$*%$$4+$4%F+N%+%:̂%-,+,+,+,+,+,+,+,+ ,+ ,+ ,+ ,+-̆%:&ȃ(&$':(R+ȅ^+ȁ^+),R+&ȃ(&&/J$d$%~$$$$%%N%+h%%:+&ȃ(&&?+HELPʜw  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C ,w0wwww w& TI v wHh&5,e5(ff e ff leu775,e5(ff Fe Bއ7F7 L7 H7D7 U ff e%lW %-epff e7 bE -P &†->ff Ve nf ff 6e   @ 5 < Œ Ab_ z # $ H/~5I5@5 555 5T e5,e5(ff e N'2 D=75,e5(ff .e L#(2 85   2  5  H/00TTSM55512hlw7 ~ enj T4ff e .\7 7 7 4w  75l  7t f45 &5 ( L\&X(ff e<&8( e$w "*$x%D&L&$T&\&d&l&$ |& ' B) x ) p ) h |& ` H/4OL  %E ?e|w z \ r* '58* 5"5 @m,5Z h l5 (w5  5  w, &\ @7,: z ( r + j ' b (* Z H/@@ @@  F 5׭$ ( ,;  %B`ʕ 5Z 5  > & 5Z    (3,& 6 X&  R mW$BAW$CKW$UPeW$PUW$KCW$AB   ,   <5,e5(ff eD& )  ) >m@e B)  )) Ҝ 52 2ҜҜҜ5@L" " D%*  :D%(u,%VA%VA%VA%VA%VA PmR,  E5U5 5 ff Re% ff et7 r7 t5\ 5Z 5^5_5`5a05b15f 5d"5h5j77z7$7 75\5^5^5_5`$5d 5b 5l15m05n5p77 7 7f7h7j58V 5J 05 < |5.  WQZ .H` ` . 8.; . ". x. j & 鷓. m"Be . F  A / Be/ .5 l5 DE r!5 DE V5DE 8 Հ50U 65T     5@ &E%  X "!(!(!(. mBe .  e nD. (/ 6e$/ "(/ J" r, 2 [ 4< ,,   ]> Ћ & *0 !  ea   t p H/ !40 .!405 r5 ff e5@R wR sҝW- a'W'M'R -Hg'q'z'. ' J V%%R-S-PROCOM, File %VA (%I) restored with %I%D blocks%D blockemptyno errors%D error%D errors4   $% ~_ j@,zwJ,hw8,> 2 7e:w 8D&m&z&(ff e&( ew 645 5   00\T1T557i:)*%w~5h/@Auff   w,5    7 7   /0f& 8/y Do you wish to continue? // / 40 40 !405 7%N J0  e . ~̵   1J ^ f C$ss ̵J, R(C&̵ʜ ̵ʜ ̵ ?RST-F-%I?RST-F-UNKERR, Unknown error code %POPNINP, Error opening %VA as inputCREOUT, Error opening %VA as outputPARERR, File specification %VA in errorNOFILE, No files matching %VAAPPERR, Error opening %VA for appendSYNTAX, Syntax error "%VA"CONOPT, Conflicting option "%VA"CMDOPE, Error opening %VA for command inputCMDGET, Error reading command from %VAGCMLER, Command processor errorDEPEXC, Command file depth of 4 exceededGCMFIL, Error in command file name %VAWCDERR, Wildcard processing error %VAREADER, Error reading backup file %VANOTBAC, File %VA is not a backup fileSELUSE, Input option /SE (select) appropriate for tapes onlyBADOUT, Output file specification is in improper formatCONFAL, Stream access to file %VA failedWRTERR, Error writing to output file %VAREADER, Error reading from output file %VARCHKER, Check failure on file %VA block %DBADVAL, Bad option value "%VA"OUTDEV, Output files can reside on disks onlyINPDEV, Input files can reside on disks or tapes onlyILOGBD, Input option /BD (backup date) appropriate for disks onlyINPPRV, Insufficient Privileges to Create %VA as outputCLOOUT, Error closing %VA as output.1R1w11112#2P2x2222393`3334+4W4444 5L555 5% J0  e 7*E$̵ Jr0J x R -RMS-E-ER$%I-RMS-E-ER$???, Unknown error: STS=%P, STV=%PACC, Access errorANI, Not ANSI "D" formatATR, Attribute read errorATW, Attribute write errorBKS, Bucket size too largeBUG, Internal RMS error condition detectedCHK, Bucket header corruptedCRE, Could not create fileDEV, Bad device or inappropriate device typeDIR, Error in directory nameDME, Dynamic memory exhaustedDNF, Directory not foundDNR, Device not readyENT, Enter function failedENV, Required RMS support not presentEXT, File extend failureFEX, File already existsFID, Invalid file-IDFLK, File is locked by other userFND, Find function failedFNF, File not foundFNM, Error in file nameFUL, Device or file fullLBL, Not ANSI labeled tapeOPN, Open function failedORG, Invalid file organizationPLG, Error in file's prologuePLV, File prologue version level unsupportedPRV, Privilege violationRAT, Illegal record attributesRER, File read errorRFM, Invalid record formatRPL, Error while reading prologueRTB, Record too big for user's bufferSYS, System directive errorTYP, Error in file typeVER, Error in version numberWCD, Wild-card encountered where not allowedWER, File write errorWLK, Device is write-lockedXTR, Extraneous field in file specification00`0P1@61R1~11@101 2#2=2T2p22`2X2@203 343M3g3P303 33 4%4E4p[4w444`400dTkTM55512045C5Z5w5v4 5%   l0J  Jy0-RSX-E-IE.%I-RSX-E-IE.???, Unknown code %PVER, Parity error on deviceEOV, End-of-volume detectedWLK, Write attempt on locked unitABO, Request terminatedRSU, Shareable resource in useBYT, Odd byte count of virtual addressBLK, Logical Block Number too largeNOD, System dynamic memoryIFU, Index file fullLCK, Locked from read/write accessHFU, File header fullWAC, Accessed for writeCKS, File header checksum failureRER, File processor device read errorWER, File processor device write errorSNC, File ID, file number checkSOC, File ID, sequence number checkCLO, File was not properly closedNBK, File exceeds space allocated, no blocksBDR, Bad directory fileRNM, Cannot rename old file systemBBE, Bad block on deviceFHE, Fatal hardware error on deviceNFI, File ID was not specifiedEOT, End-of-tape detectedBHD, Bad file headerOFL, Device is off lineBCC, Block check, CRC, or framing errorNDR, No dynamic space availableBTF, Bad tape formatALC, Allocation failureULK, Unlock errorWCK, Write check failure0000 1)1P1t1111112=2d22222323K3o333333424J4\4fEB`F ~ . ӥ:  ӥ:@! $  @! U`eUU5U mɥ[ɥ<"@  ˥.   0Q UDeĤ _ Uċ5E  lU0 E pU5 . 5E0 U L. x; n Ċ- bU " & N ӥ"   U5CM% E A5Q`C _C&  v5 &) ˥A˥Z"˥a˥z ˥*˥% ˥$˥_˥-  ˥0 ˥9 ˥7 U   ˋ˥ ˥ w X& & &~ l0D5% Wqmae &  NaB a D eD <R~. t @ A B C @ D eA B C eB C   a%daAaB C U:Yw/M|s,MM8 Y 2` 00lT1T557i:)*TITISYSYSYTISYSYOV0`j 00w  5B`  w2/      5@         @!   &  ~ f   f @w    3f f &f &ff w   * . j    0 0     %& & i& 3 hw*fh  @fR eV w`F ew *  @f eV w` ew eV 6 e       f`f&  e|ewL @ $     @Ҁ- , j Bԁ B`m  B    ȋ  B ɋ  f-    7 7  pAz pt f-  W  | -@   Jl 7. * 7" W W  fF 7 m  me, @w@  7 ,b & "%  wAlAbeBeAbE ld 7,v,,0 bw fNaeN!whC -r  ` \ 7 Z 7T H @`@ E #@& eg $  %` (]Bme Dl% l&fe 9 6v  a! W,& f f 6  a %  )D E& Af e% Le wAmeC " B @AlB`65  D5 f  e 5CCl5C5 W, Clb"  5 `5e  D`  &f+ f& %) f&&& e vva e ew t4 ^< Bf& . ( `e C  JewmBD 2 @  Nm L m00tTkTM55512 ,T 7lvwpmZB\ @7Z`VR 57>7`:57.5&  l we (7 "6,b w  Zv@` @ d  7 E eD   e w 6v 6t &lb`e 6 `Ѥ   eb | <ewwaeewLFDCa@ Ew *C  > @    W  W W | en  hb `wF f v C W!W! mDm  6 D!  -m W!p  ,%wv    %w^ eEmp7 Z b mT7 >-@ d.** w "wА `-w &    eEB K  `ww w a V\ ERLRPTHHHHHHHH~nv&.@^'&1 |n" |) |* |* |/ z|V0 r|,1 jp3 b4 Z4 R7 J>B B0 = :0 > 20 ,> *0 T? "0 ? 0 ?  t3  8:  6;  ;  @  @  vB  D7  64  9  n@  +  !+5ew , Bv     5Bwb 5  5 2  UE  p. FnE 00|T1T557i:)*U 5@*& E& & f&ËDef Ë )̋U&ff  5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f &  m  f A N  % T!|,!T!p p3L | <0 $pDd&G(G*pD -I.I/Ix0I 1I(2pD 5pD$ 7pD9<\< ;@dH 0 ` =|C< T ?|C< H A@l 0 D(E` x E(E` F(Ex` G(E` H(E(` l I@0 < Lp3 | P8: S8:< Yp3x| ep3$|mT!P p|s+! !t4,  !4, !+ K8!pKT,!D!K,!8!wl  a@`AB S  & ew  5AEA5 ef F >  2N (@ew5’ @  B@A  @@P5e 5 c ׯH A E6   l1 T7 A ~ j  , d P r EcEc 8 < N   " 4  EcEcwlwahe   &w!NwHA@  ! l1NBe  eeW W  f qeW W  v l  h j e >} <    ~$H r{ } "}e wdwa`e _T EYe w4wa0e Ge `wwae9e8 : B7 "4 v1@mApEm" J  n p  f j r  R   - wj& ~j, T4 >E  &m? m< fAeW W   l <  fW W  V J   4     ׯL VwPJBpC4.7&&m Eme AAcBEEb >E wwae e xBlAb E B!5AAeA! 5  @ .E5EbB!W#T wlwaheee LAlBEEb |A! Ec A!W"\ | w wae       EcEcd 6߇f T  ,0 vee e2# Yde1@mNblCmVTlC  ަ& N 6 5e eEce#(ʆ5 W# z 65el &1, eeEc Ecef@ lB2 1 & \*  W  f > f f z  f x f x w"    nm  6`f New < a& x vA`f (f&& f& ew& -`   `  @!L z 5f @%f e m&E&  >ewp2&  a \$          m"'  a@`Em$@ m*&fE& He e &a ew ؗ-      lr255  5`  f $ w (  &af ` T , ,,"  e ! B` D` D  ҋ  D ыR     lz2D H       f ,ew@A %  `M M` @ A w w@ABC% % % %  `M u u U`M u `M `@ A B C 00TkTM55512w@   M u @ A   w  @M u u u @ A   wf   @ A D E !  we&&&&  @N v v v @ A   e @aP P P w     f   `ѕ- ae2ѕ-ѕ1ѕ9 4 ѕ  ѕ: ѕ: e e/ѐe:w    l2 1     8f N& `e 0.@3  e&   P    ff&& Xew ZEe0 9e Ҁ e0 9e %      wjӦ)@  l2 V  C @6 21/5 D1    b \ @D C  QP  2 f e  &   %w  l2 <BCwl 42- Մ @`eBw4a     Be&& ` >e *F`Bflrx &06<BHNlrrrrrx~BJJJJJJRBXXXXXX` "(JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC  &&,Z<`ABCDEFHJKLMNPRSTUV 4   4  <6 8 H= 4? |? ^< B C 3 X= = 8 D!K D!K D!L D!L D!L)iB L aaF8 e `8 J8 e -`8X8 J8 e  Җ%wϦ) lh8 ,     aaf Z- 6   e%w Ϧ)P  lj8 BX \C P6v  e aa  6 6   F&  E (&  = &   %/ V H  7 .&    7 -7 N Fe%w  BvAm@   )@W. W. B %@ N` t e%  wX  v8  E @S   e  >%ẃ Dm @W  @ B0  ˀ`% f  l8 k  w^y(! 74  wwP rG8 -7  pV& e - P8& te  t555@ wXeCTL>SY:ERRLOG.ULBLB:[1,6]LX:[1,6] z nCOMMANDINPUTOUTPUTUSERREPORTv8~8888RPT>V2.00xP4&B $(A >B 0 = 0 = 0 T? 0 ?**0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% ,*1 U8UMw" wf *B 00fep=& /e`pw8e2 141612epl2l0p *) l0, *) $ )*)0,40,6 e6p 4 8 B &81416    x Tw eE D`00T1T557i:)* bl lrw   B eE"s    s-  Csl82e&( <0 0 0 80 B0 0 0 0)#0.46f %8 E D/D!D l0l8epl0pɥ.ɕ Pw@w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  b P aAAf@pnp XC*8֋ "88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ PDlljaCeH###33 & 8 *>V>w  8jDl@ TeBT85l@ @( D eB& x & @# `& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@w€  5  `˵~c5˵ Ł@ \@*   lFw>Ҁ %58R @`1 V $   $   V-fЕ Е f& eew D:RNV e6  B۠D :D 2I * I " pD  E  >H I  pD $ pDw d )  fU %  BA `6p 4p`4 %60 4w ) F* "w\46l0w *D  wF=D f `p46 f 64/=  @) 0  8w 46 8 e*w$ ٬G xٸG pٸH hٸJeB  8 $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* 2*5ND  <  EU   5%& w ~&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w p /$ ,:T < U@% DD%][%><w^  wR1  %,,:4 Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ Pz  DEe    *1  ˕03 "   ˔Ӕ ʥ7(e( 1 00TkTM55512 `((   >: 5 eCe   f D >5>Eu   w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce 6   &*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` r*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w| I xI pI hI `I XI PI HI @ Iw ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  H P3)/ 0#( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & &e# eB&B zB * eBe>  # #D #=0/H#@&0 # = e0   L0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w00T1T557i:)*   f >5>Eu b  f &* * Mw$> =00l&8el2 0 *w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w *8I *=)98  eB &&  U D**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* lwpw z) J8C * ) *w$*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 ~p  8 V *`)w dC# <   D @)  6?0D)  DP5R RRR  8  **)"(. = . B  E (. ..8em,0l0!D0e6p 4.) n&f  e) .  e6p 4 "08*w=p!Օ^0,0, f 톇,, w      .% eB U5UU " plp & NeՀ)*f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  000TkTM55512f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C  & & @( nf  e ee e wƀ    7 DM    7**Ֆ%:jh֎ VwPַNeB$& 6e*aɋw 4wɋ& @   f 1 4@5 7 ԁ  <x<p7 v7 n7 l7 d7 ZԇwTł m 7 |Հ :wh dշb7 ^Հ ]7NշJշHDշ@շ>Շw Ԝ\Ԝ]^ ԕ:;& $@&f& ~H J L   ԕ.N   ԕ;P `e7ԇwBĀ @   B  * h1 *7 ҇f   `p   < X@ T |C T tD ` `@ ݜ (E ݨ @ ݨ 4A H C T C T ~D T FeB  8 $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* 2*5ND  <  EU   5%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w^  wR1  %,,:4 Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ Pz  DEe    *1  ˕03 "   ˔Ӕ ʥ7(e( 1  `((   >: 5 eCe   f >5>Eu   00T1T557i:)*w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce 6   &*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` r*weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w l ,E x (E ݄ (E ݄ .E ݄ 4E ݄ pE ݄ E ݐ (E ݜ 2Ew ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  H P3)/ 0#( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( 2 *O*)@#0l @# 02ȕ8 .00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & ~e# eB&B zB 2* eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w :BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w4W=f(& e %&&eH =&e0  *U   E > >E(5E=uf Fp  w   f b >5>Eu   f &* * Mw|00TkTM55512> =00l&8el2 0 *w :(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w J*8I *=)98 Z eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w(B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R w . ^$0,0w d46  ^)0406 0 *w ww 8   * @  4 6 e6p 4&*0,0, f 톇,, w      .% 4 eB U5UU t plp & NeՀ)*)"(. d= . B  E (. $..8em,0l0!D0e6p 4.) &f R  (e) .  e6p 4 08*w.=p!Օ^M Fa?  bӀ   e fe?E?@m & f N6Y 0w` )7 @  & f v C5l  1 Rt D| Bm/$ x2, d1,  P@ l91  v#@`"oBl Hl f@`"` [H X1RN5 f t 2  `f 1 /5 f 8 D`# tC ce  p 1# %B5 Ecl  % * 0 6` ~|ڰmh6e66:  v P>   e2 e f    , H m CCmeC!x@mmBb@& L22%e%C!WBe  eE`bee@ q   00T1T557i:)*$ x̀dEc@!$ X  p   &f XN FEmeZF *R" TITLEERROR99 ; *> 8!K 8!K 8!Mw^ɀ p  l? ̇ -& - ef2 V  Ve.f 0 f e% f ( wȂ  @   e0ɐ e  @w`uWx5p ^f*^& Z-VV5 LB.-B+' ,4  \w   7   @ 7 R 2 I7 (w ( @@beE -֖ 7 7 5~zveb7 b5X-VN-LD71%2 @@beE w@`7vwv7`r -jb  ,ʇT7 N7 Nׇ7^7 h bه2   .-"mևwxƦ)W W W ?? f 6  Gl?@A P@A P@A P@A H@  @TTTR@BDQBDQBDQBBQ  6 v       Z W R Obu u u lu u lu l  - <L? j,@- @ D 4.- @ tMDC   f $Җ%  N&&N e$ ew?f 0M u u u -# ff e w& C Ѐ  S   Z &2`$b & & @( f  e ee e 7 H<@< 20(((؇w ؃ C,DA "B@ @`H 7 w "J@wȁEB`&  JJ w"HleD Db1q\ RwN " Hl!plHB 5 f צ fN % w  Bm @ր b m    0 lN#  Hwp wRǃ $#`   ˋl`b@ f Ab  7Շw Ǧ)m6 0 4&ȋ+lDaEcm!a ԁf6  R b& (%c    %w^ƀ I @l@l44` eE`Ba CeEC`bc @ eec@  ɇwŁ1 B` eE`@@b 2 ewxŃ Ԃ  v  J x ,  7 TNԷJF R m4ԇw, T 6,lw  4&ɋ p 1  ,  @ wā C       l  H Z DZf f  r& ef 40w (Aw f  w &1-7C"A   p!l7-rwlwlwjEŷ ("Jwn  @&ȋ, A  2   f@$& r1  wæ)@e7  &  "f W e@@ vwn7lw`hde7 &  <:e 2O, :e!5``  `㉐   3 &fD Fs3 eee  eЖ%f    @7"7ѷ00TkTM55512ѷ7 7 ѷ  ̽  ā hD (  `Ė%N nD n z eAmB ĂBl Ķ`eeDDeD!  I`ev! f 65  C 5 av! d f z eC JӦ N P aef @   p0l BN`& N f l 1l Ae B Ŏ %DISPATENTRY & & @( f  e ee e w@ FA 7l X   l^At   eNP* -$ 7  *C 5L  f  & Ζ%  &\Af& eRw. -   7 , e@FA FA e0#9e T  P  L  H D @7@ e@: w4 wFA$ m  6e7   wJ΀  B 5 ї- 5(@7~VB~jAtp l  n 8@ *5AV@ * 7 ݇w  N  @m7  .7 x  \\ T܇fzfV 687 8ܷ 0 R 7 B ,7 6 NV we w 2 /BlAlD b ` `  F5   a  )`  llA " 4  &aa D a |e %f) v p&aa @m6  ϖ% fm (e N& B 7 @ 7 fW,ɋ4  w`   w 7mw\˦)W!  6v -r -l  0 `0w < 0Ζ%  C 9 0w lw> `\  C W F W E88 D(@ ltA7$ W FDzW Pu epW F LW Pb  a FZW C  %   G  7ٷW S L5`-T, p t7heW L  $ W P  B -67 wX< ̖%w\w 0 Bԗ ! w <#W!"   ~ eE-Tط \ Rww ԁ w`-T d ̦ ff ^7Ze wȦ)t    ` eE`B  @ ne2 & ^ N Be   6a % ,˖%wǂ|m ) W W ~ ^ W ePEJ-FT 2׷ .     & 7eT ʇw((B | nB&  |N& &  Z`-T e fn 7fef& h -L D L8 ( $& (ʖ% 7  CeAEcB \ EeB!   dEc f BEmeAAe |A! : j  $ @ V`Ec x x ~@& #B` ʵ ʵ  F  8PT ԃ       N D dȵӃe` ' e W   P @ DW  W    EmeEc%fez7 l ewb @eE@a H AAeA!  00T1T557i:)* weeAAe W#EcA! pN& %weeAAeBEcÐ  a T    EA! Ec A!W#  8Nf  ew2a 6O&e АЕ[m / А 0 Ce:АЕ:/ PW 0 e:P Е Е Е Е]Е    ( e. & "* v8!K n8!K f8!Mw n832cd& & & B  2OΕ   N Υ$Ε  22Υ   :v Ε f >e F* He*w,@)0,    ) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  z, l  ~wL T JwB #  f  `* 8w()0406 l0 ** *) l0, *) $ )*)0,40,6 e6p 4 8  81416   0   ..8em,0l0!D0e6p 4.) &f  T be) .  e6p 4 08*wt 8  f**  DP5R RRR =p!Օ^> =00l&8el2 0 *141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f wP 85m&&  X6e"-  C P e   e f6   f6   0  lA ҇   f ێf& ew f  B m ͂ `B lBB` ɵW e<QBaCa 5  @< \Da L@ D @ D E& NUe& NU D a"K `@#  B h ew, xC` 5 5  (5 5 5 f F@e # -  @  0  :    5!Jפ-G`!B*BBa JȢeNB NB&A#BB eפ-  ll d 5WW d5!!ע פ: F5<! ע פ:  (5< fפ  f  0W   $@`%00TkTM55512wf= P eff 111f Fewaf | :EB 2 eKkW"  aDA T EA N eQʐN  mm Jʵ : @`CB Ð r2 aa a  < H2< B2e  0 f  NB e p  : \ \ Nwl af  Bai*Cava>  Z5 ~ K J    D ew  lVB x &65 awf ta 6  C   S   8    v``W  Hf N&f` ~ |et n 4    `; D    N`f& (e 7B 2  B`  &f e ~   Bԗ a z %ewǦ)& & - 0v6v`   v6v`   E`D`  D!"6  # D!     He w   j  @C`B` 6   $ - . 0 ; A Z _ a zۃ [ פ] " פ" @  %wd lnB@T f ӎ f& ePlB&  a  R@ !\ "e `&&E f a ef * f ew| a-d ȗ- ȁm? ;&( / D!0!9"!A!Z@!a!z`!$ !.!  a %    ew ~B&  a a$&6   -v    +  l je ( !0!90 !A!Z7v l $DŽ *D @ 5 @P P P H  $f ew  l Ɨ     0W l & .@`%   lB pƇ  F  0 0  &  ` 0 0 0 %w &  w   M u @ A -#  wZ   @M u u u @ A B - #  w"f   E D @ A s     u&@eH p p eH p eH c (.Q<[y1OJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC 28R r2 4:FV@PwB  B 5 - 5(@7~vVz:vL#lh d  f 08 "5AV@ \* 7 w  N  @m7 ~ .7 p  TT LfrfV .07 0 ( J 7 : ,7 . NV we w 2 /BlAlD b ` `  >5   a  w  n832cd& & & B  2OΕ   N Υ$Ε  22Υ   :v Ε f >e F* He*w,@)0,    ) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a Pe0b eȥe@ ] V= E8 00T1T557i:)*el0  & 0 l0`p l064p 4 ep )wzȥ%  z, l  ~wL T JwB #  f  `* 8w()0406 l0 ** *) l0, *) $ )*)0,40,6 e6p 4 8  81416   0   ..8em,0l0!D0e6p 4.) &f  T be) .  e6p 4 08*wt 8  f**  DP5R RRR =p!Օ^> =00l&8el2 0 *141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f f E, &! V& T 7  , N ێ X Unimplemented error message-F- !4, !4, A2MODSTART, Starting module for execution not found.%STANOTIMP, Statement not implemented.3STANOTVAL, Internal error - invalid statement code.LISTNOTLS, Group referenced in SEARCH statement is not a LIST.HLISTNOMAT, Too many expressions in SEARCH statement for referenced LIST.CLISTNOEXP, No expression in LIST for corresponding SEARCH variable.MPOISETMOD, POINTER variable is from wrong module in POINT00TkTM55512ER ... LOAD or MOVE.RPOISETGRP, POINTER variable is not from correct group in POINTER ... LOAD or MOVE.CPOISETSIZ, GROUP too small for POINTER in POINTER ... LOAD or MOVE.=NOTDYNFIL, Dynamic file operation performed on invalid group.AFILNOTEXI, Internal error - declared dynamic file does not exist.=FILNOTCTX, Operation requires that dynamic file have context.HDECAGAIN, Group in declaration already declared. Redeclaration illegal.JDEFCASELS, No match for control expression in CASE conditional definition.&DEFNOSTAK, Declaration stack overflow.8DEFSTKUND, Internal error - Declaration stack underflow.IDEFNOCONT, Attempt to access data in variable in group with null context.CEXEINVCOD, Internal error - Execution stack entry has invalid code.6MATDIFTYP, Values of differing type cannot be matched.6MATVALSIZ, Values of different size cannot be matched.@WRITEACCV, Attempt to load a value into a non-writable variable.=VARNOTDAT, Attempt to load data into a BIT or FIELD variable.0ACCUDFVAR, Attempt to access undefined variable.R>>>*?n???@`@00T1T557i:)*@@@.AbA 2COPRINVLOG, Attempt to perform logical operation on an invalid type.#CONWRONGT, Cannot concatenate type.;SUBEXTBIG, Substring extraction end element exceeds string.9NUMINVOPR, Invalid numeric double-operand operation code.#DIVZERO, Attempt to divide by zero.$MODZERO, Attempt to modulus by zero.%OPRNOTIMP, Operation not implemented.'RELINVCOD, Invalid relational operator.:BITFLDSIZ, Bit or field too large in extraction operation.8ASCIIBIG, ASCII literal quoted string too long for type.;BITTOOHIG, Bit number too large for specified storage unit.8RAD50BYTE, Cannot convert a byte using RAD50 conversion..BADDIGIT, Invalid numeric digit in conversion.>INVRADCNV, Internal error - Invalid radix code for conversion.-VALUETYPE, Value in expression is wrong type.,VALUESIZE, Value in expression is too large.3HEAPOVERF, Heap too small to hold value. Overflow. VALSTKOVR, Value stack overflow.:FUNWRONGA, Incorrect number of arguments in function call.HFUNFIELDS, Invalid conversion code argument to time conversion function.8FUNSTRSIZ, Output string from string function too large.DFUNQUOODD, Quote string in STR$QUOTE function must have even length.;FUNINVPOI, Invalid string pointer value in string function.DFUNNOTCHA, Argument to STR$CHAR is not in valid range for character.FILERREAD, File read error.FILERWRIT, File write error.FFILINVCOD, Internal error - invalid file code for specified operation..FILINTOPN, Internal error - file already open.FILERCLOS, File close error.:FILERSPAN, Records in file are not allowed to span blocks.4MEMINIFAI, Memory allocation initialization failure.CMEMALLFAI, Memory allocation failure - insufficient virtual memory.@,,,,-B-h----,.h.../@/n///0J0001L1h11112X225- 0 ~ t - -$  w  BlAlB b`e C  f *ׁ`%7 v w 7   h0 d- `6 .heV@eeXN&6 ^.N&$ N &Nf  e lw& d 6 eVF2 e6 Z R-& 6  6 6 h  6 X .7 H   V  2  HeV 2 "e 0,eV mn2 eW!6!~ v 6!˃%%wՂ  @   e0ɐ e  @f7    T7 D  j7 ,   &  0(w (N@&ff eeewԁ@&N` WZ5 Z5 Dlbe@`bm @N` 8WZ5 ^Z5 V؀ 5 H؎ tZ5 6؎ b ew7 T  7   7   7  z r      BN  @ 8 \5 t׀    wRb5 Lׁ N vZ5 8@& bZ5 $N` WZ5 Z5 N` WZ5 Z5 N`  B@@l  \5 ֎ \ T%@f l AAl @7 b w ~ 7 HNn t 7 j  8    8 00TkTM55512  7   wт N` WZ5 Z5 Dle עZ5 |Z5 tՃ T8 \8 V Z5 FՎ vZ5 8@m N ^Z5 Վf  FZ5  b%fd8   r8   ~w "N eh `` X wЂҀ& Z5 zԀ P6 l Z5 \ԗ  r8 HԎ6 d. b+8 ,X@@l A 8N` WZ5 Z5 @@lb8 ӎ  8 t ll d8 \ TT L8   Z5 n  Z5 Pzt  p 8 * PZ5 r8 8Z5 Z"  9  Z5  Z5  ^ VV N-9  2 *@9 j    e  Free Module Current Start CALL Coroutine Conditional DO ... WHILE DO ... UNTIL WHILE ... DO UNTIL ... DO ENABLE SIGNAL SIGNAL_STOP j5t5|5555555555Numeric String ASCII RSXtime VMStime Pointer Logical 66"6*646>6H6&Error occured while processing packet The packet size is (octal). BSince this size would cause the packet to span the block boundary,@the following dump of the packet will end at the block boundary.$An octal dump of the packet follows:Execution stack dump:2Module name Procedure name Entry code Offset BlockDynamic memory allocation:(Type Size Mapcnt Name Ident CompilerTable Files  Error - overlap (bytes): Dynamic files:2Module name File name Code Size Recsiz Records Title Error Value stack: Entry Type Length Place OffsetHeap Module Unknown Unknown  Size Current Max usedGeneral Statistics:Execution stack Value stack Value heap ,Maximum heap used after garbage collection: Heap garbage collections: wwwaeK" w``AE5 e5e5 eE` `AE5e5br f-ff -K7 V $JW  W  Pw.C e AAcw w` w wmewDb`ww` n N A!5BBeB!5  0&  5EcA!W# ʹewfwabZwaV-K nj6.Ň-ZK  xJ77e:f , @lw`ā N@e  EcEc e AAeA! j ( S@Bll D` N` x``C``7!%W º% Bԁ `e  ӕ'f ӕ'ӕ,  -Hʖ% ׯ: ׯ2  |    f     7 ŇW W W  ew ι λw|7twrmjlwhm^b^eV jl w 0  ļ f  r *> j ^<00T1T557i:)*|s,EE Y &[q Y 2 aTITISYSYSYTISYSYOV0j> 00w  5B`  w2/      5@         @!   &  ~ f   f @w    3f f &f &ff Pw   * . j    0 0     %& & i& 3 hwfh  @fR e w`F ew *  @f e nw` ew e 6 e       f`f&  e|ew  @ $     @Ҁ- , j Bԁ B`m  B    ȋ  B ɋ  f- R   7 7  pAz pt f-  W  | -@   Jl 7. * 7" W W  fF 7 m  me, @w@  7 ,b & "%  wAlAbeBeAbE ld 7,v,,0 bw@ fNaeN!whC -r  ` \ 7 Z 7T H @`@ E #@& eg $  %` (]Bme Dl% lvfe 9 6v  a! W,& f f 6  a %  )D E& Af ^e% L00UkTM55512e wAmeC " B @AlB`65  D5 f  e 5CCl5C5 W, Clb"  5 `5e  D`  &f+ f& %) f&&& e vva e ewH t4 ^< Bf& . ( `e C  JewmBD 2 @  Nm L m ,T 7lvw0mZB\ @7Z`VR 57>7`:57.5&  l we (7 "6,b w  Zv@` @ d  7 E eD   e w@ 6v 6t &lb`e 6 `Ѥ   eb | <ewwaeewLFDCa@ Ew *C  > @    W  W W | en  hb `w f v C W!W! mDm  6 D!  -m W!p  ,%w6    %w eEmp7  b mT7 -@ d.** w "wА `-w &    eEB K  `ww w a  $0<PP' RPT>,8,8,8L& ERLRPTnf6v~@^'&1  ' ) D) x- . ~/ v1 n2 f3 ^5 V< N8 F8 >8 6: .H: &T: 1 (8 (9 4T: 4> 4? 4@ @5 L2 LJ8 L> d! !5ew , Bv     5Bwn 00 U1T557i:)*5  5 2  UE  ~ VE U 5@*& E& & f&ËDef Ë )̋U&ff  X1l7D!l7#1(@'84*8t (01`L81$@dB!pXCX" d|OX"dpS! XdZCZCT\Cw   a@`AB S  & New  5AEA5 ef   N @ew,5’ @  B@A  @@P5e 5c ׯ( A xE   lX0 47 A ^ J l  , D 0 R EcEc   .      EcEcwLwaHe   &w!.w(A@  ! ln0NBe  eeW W  ~ tf qeW W  V L  h j e >}     ~$H r{ } "}e wDwa@e _4 EYe f wwae Ge @wwae9e8 : B7 "4 v1@mApEm" J  n p  f j r  R   - wJ& ^J, 44 ~E  m? m< FAeW W   b l   FW W  6 *       ׯL v6w0*"pC7mEme AAcBEEb E wwae e XBlAb E B!5AAeA! 5   E5EbB!W#T wLwaHeexe ,AlBEEb \A! Ec A!W"\ \ wwae n      EcEcd f 4 ,0 vee le2# YDe1@m.BlCm64lC  n& N 6 5e eEce#ʆ5 W# Z l65el 1, ~eeEc Ecef@ l0 1 & \*  W  f > xf f z  f x f x w t b  Nm  `f .ew  a& X vA`f f&& f& ew&& -`   `  @!L Z 5f @%f e m&E&  ew|0&  a \$          m"'  a@`Em$@ m*&fE& He e &a pewٗ-   z   l055  5`  f  wt   &af @ 4 , ,,"  e ! B` D` D  ҋ  D ыR     l0D (       f ewj@A %  `M M` @ A wH w@ABC% % % %  `M u u U`M u `M `@ A B C 00UkTM55512w   M u @ A   w  @M u u u @ A   wf   @ A D E !  wTe&&&&  @N v v v @ A   e @aP P P w      f   `ѕ- ae0ѕ-ѕ1ѕ9 4 ѕ  ѕ: ѕ: e e/ѐe:w:    l1 1     8f N& `e ,1  e&   0    Ff&& Xewj :Ee0 9e Ҁ e0 9e %      w զ)@  lB1 `V  C @6 v 011/5 $1    B < @D C  QP   f e  &   %w$r  lL1 <BCwL 42- `ׄ @`eBwa     Be&& ` e *F`Bflrx &06<BHNlrrrrrx~BJJJJJJRBXXXXXX` "(JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC  &&,Z<`ABCDEFHJKLMNPRSTUV 4  x2 4 6 (; (= (= 4: 4:A 4NB @(2 @; @< Ld7 C @C $D |y(! 7  lwwP RG 7 -7  P& 4e - 0$7& e  T555@ w8eCTL>SY:ERRLOG.ULBLB:[1,6]LX:[1,6] z nCOMMANDINPUTOUTPUTUSERREPORT66667RPT>V2.00xP4&B ; < 7 7 : z:w R5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  r P aAAf@pnp 0C*8֋ 288*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ vŀajTI& af* n*`V @e,w vjjlj 00U1T557i:)*ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ 8DlljaCeH###33 & :8 *299w 8 8jDl@ TeBT85l@ @( D eB&  & @# x& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@wǀ  5 P `˵c5˵ (ˁ@ 4@*   w׀ %58 @`1  $ Z| t   zL-Ff Е Е f& xee nwh& DVVN >e $ ,X L8<H & & @( f  e ee e ẁ   r 7 FDM 8,  8, 7*ږ%: ܎ w۷eB$& e*aɋw~ wrɋ& @   fj 1 4@5 7 HځB  <<7 7 7 7 7 هwʂ m 7 ۀ :w ۷7 ڀ ]7ڷڷڷڷڇwf  Ԝ\Ԝ]^ Jԕ:;& b@&f& H J L   ԕ.N   ԕ;P e7هwɀ @   B  * 1 7 ؇f   `p     &  m  f A N  %48, \ pE &a? ( BՀ  e fe?E?@m & f 6Y w` )7 p@  & n f V C5l  1 2t $| pBm/ X2, D1,  0@ lN81  v#@`"oBl Hl f@`"` [H Xx1RN5 f T 2  `f 1 /5 ~f  j D`# TC ce  p 1# %B5 f   C   "N me `e  D 66 cH@ e%)w@m$:6  ~$ Bݰde eE` 0 ee@ l^8# &  N`N`  6 ,&e e 6 e t@B` E @  5W    E @`ʵ B`mBܰ  CE ,  Ecl  % * 0 6` ^\ܰmH6e66t8  v P>   e2 e f t , ( m CCmeC!x@mmBb@& 22%e%C!WBe  eE`bee@ q   r00$UkTM55512$ XπdEc@!$ 8 j P   &f 8N &EmeZF *R" TITLEERRORh8n8 4T: 4< 2C PC 4Ewʀ p  l6> · -& - ef V  6e.f 0 f 4e% f  wZʂ  @   e0ɐ e  @wUWX5P >F*>& :-665 ,".-"+'    7 H Bۇ   ~-nm؇wȦ)W W W &>.> f 6  Gl:>@A P@A P@A P@A H@  @TTTR@BDQBDQBDQBBQ  6 v       Z W R Obu u u lu u lu l  - <L&> j,@- @ P D 4.- @ ,MDC   f Ԗ%  N&&N e$ ew,&>f M u u u -# ff e w vC jҀ  S   : &2`$b&  m  f A N  % & & @( . f  e ee e 7 (  0ڇw ك C,DA "B@ @`H 7 w "J@wNʁEB`&  zJJt wl"HleD Db1q< 2w. " Hl!plHB 5 fئ fN % wR  Bm @؀ b m    0 lhhN#  HwP wȃ #`   ˋl`b@ f Ab  7ׇwȦ)m6 0 4&ȋ+lDaEcm!a ԁf6  R b& (%c    %wǀ I l@l@l44` eE`Ba CeEC`bc @ eec@  ʇwBǁ1 B` eE`@@b 2 ewǃ rւ  v  J X ,  7 4.ַ*& R mևw T 6,lw  4&ɋ p 1  ,  @ wLƁ C       l  H Z ɱf f  r& ef w Aw f  w &1-7C"A   p!l7-RwLwLwJEǷ x("Jwb  @&ȋ  A  2   f@$& r1  wĦ)@e7 &  f W e@@ vwN7Lw`HDe7 z &r  e O :e!5``  `㉐   3 &fD Fs3 eee  xenҨҖ%f    @7"7ӷ00,U1T557i:)*ӷ7 7 ӷZ \ v~ hƁ B v   @Ɩ%N B N Z eAmB łBl Ŷ`eeDDeD!  I`etv! f 65  C 5 av! D vf Z eC *Ԧ . 0 aef   x pp0l BN`& N F l 1l Ae B ǎ %DISPATENTRY&  m  f A N  % & & @( f  e ee e w@ ? 7l X   l?t   eNP* -$ 7  *C 5L  f  & Ж%  &?f& eRw -   7 , e@? ? e0#9e T  P  L  H D @7@ e@: w4 w2?$ m  6e7   wπ  B 5 lӗ- 5(@7f^b"^?TP LZ    5A@ * 7 ߇w8  N z v@mp7 f .7 X  l<< 4އfZf  7 ޷  2 7 " ,7  N  \we w 2 /BlAlD b ` `  &5   a  )`  l? x" 4  &aa $ a \e %f) V P&aa @m6  Ж% fm e  .& B 7 @ 7 fW,ɋ4  w`   w 7mw̦)W!  6v -r -l  0 z`0w < Ж%  C 9 0w lw> `\  C W F W E88 D(@ l?7$ W FDzW Pu epW F LW Pb  a FZW C  %   G  N7۷W S L5`-T, P 7HeW L  $ W P  B -67 bwX< Ζ%ww 0 Bԗ ! w <#W!"   ~ eE-Tڷ \ 2ww ԁ w`-T d ͦ fF ^7:e wBʦ)tt `   ` eE`B    ne2  ^ |N Be   6a % ͖%w~ɂ|m ) W W ~ ^ W ePEJ-FT ٷ      & 7eT ṅwB | NB&  \N& &  :`-T e fN ,7Fef& h -,  $   ,8 (  &  ̖%  7  CeAEcB < EeB!   dEc f fBEmeAAe \A!  J  $ @ V`Ec x xx ~n@& #B` ʵ ʵ  F  80T ԃ       N D DʵՃe` ' e W   P @ DW  W    jEmeEc%fbeZ7 L ewB @eE@a ( AAeA!  004UkTM55512 weeAAe | W#EcA! PN& %wleeAAeBEczÐ  a 4    EA! Ec A!W#  Nf  ewa 6O&e vҐЕ[m / А 0 Ce:АЕ:/ PW 0 e:P Е Е Е Е]Е    ( e. & "* bޠ2C ZޠPC Rޠ4E&  m  f A N  %0w 85m&&  X6e"-  C P e   e f6   f6   0  l^@ ԇ   f vݎf& ewf  `B m Zς `B lt@B` ɵW e<QBaCa 5  @< Da @ D @ D E& NUe& NU D a"K `@#  r@ h ew XC` 5 5  (5 5 5 f &@e # -  @  0  :    5!Jפ-G`!B@Ba JȢe@ @&A#@B eפ-  ll d 5WW d5!!ע פ: F5<! ע פ:  (5< fפ  f  0W   @`%wf= P eff 111f &ew~af \ Er@ 2 eKkW"  aDn@ T En@ N t eQʐN h mm Jʵ : @`C@ Ð r2 aa a  < 2< 2e  0 f  @ e p  : \ \ Nw af  Bai*Cava>  Z5 ~ K J    D ew  l@ x 65 awf ta 6  C   S   p8    fv``W  (f hN&f` ~ et n     `; D    N`f& (e 7B 2  B`  &f ne ^ x  Bԗ a z %ewɦ)& & - v6v`   v6v`   E`D`  D!"6  # D!     He w b  J  @C`B` 6   $ - . 0 ; A Z _ a zۃ [ פ] " פ" @  %w l@@T `f Վ f& eP@&  a  R@ !\ e `&&E f a ef * f ew a-d xʗ- hʁm? ;&( / D!0!9"!A!Z@!a!z`!$ !.!  a %    ew> @&  a a$&6   -v  00LISTNOTLS, Group referenced in SEARCH statement is not a LIST.HLISTNOMAT, Too many expressions in SEARCH statement for referenced LIST.CLISTNOEXP, No expression in LIST for corresponding SEARCH variable.MPOISETMOD, POINTER variable is from wrong module in POINT00DUkTM55512ER ... LOAD or MOVE.RPOISETGRP, POINTER variable is not from correct group in POINTER ... LOAD or MOVE.CPOISETSIZ, GROUP too small for POINTER in POINTER ... LOAD or MOVE.=NOTDYNFIL, Dynamic file operation performed on invalid group.AFILNOTEXI, Internal error - declared dynamic file does not exist.=FILNOTCTX, Operation requires that dynamic file have context.HDECAGAIN, Group in declaration already declared. Redeclaration illegal.JDEFCASELS, No match for control expression in CASE conditional definition.&DEFNOSTAK, Declaration stack overflow.8DEFSTKUND, Internal error - Declaration stack underflow.IDEFNOCONT, Attempt to access data in variable in group with null context.CEXEINVCOD, Internal error - Execution stack entry has invalid code.6MATDIFTYP, Values of differing type cannot be matched.6MATVALSIZ, Values of different size cannot be matched.@WRITEACCV, Attempt to load a value into a non-writable variable.=VARNOTDAT, Attempt to load data into a BIT or FIELD variable.0ACCUDFVAR, Attempt to access undefined variable.INVRADCNV, Internal error - Invalid radix code for conversion.-VALUETYPE, Value in expression is wrong type.,VALUESIZE, Value in expression is too large.3HEAPOVERF, Heap too small to hold value. Overflow. VALSTKOVR, Value stack overflow.:FUNWRONGA, Incorrect number of arguments in function call.HFUNFIELDS, Invalid conversion code argument to time conversion function.8FUNSTRSIZ, Output string from string function too large.DFUNQUOODD, Quote string in STR$QUOTE function must have even length.;FUNINVPOI, Invalid string pointer value in string function.DFUNNOTCHA, Argument to STR$CHAR is not in valid range for character.FILERREAD, File read error.FILERWRIT, File write error.FFILINVCOD, Internal error - invalid file code for specified operation..FILINTOPN, Internal error - file already open.FILERCLOS, File close error.:FILERSPAN, Records in file are not allowed to span blocks.4MEMINIFAI, Memory allocation initialization failure.CMEMALLFAI, Memory allocation failure - insufficient virtual memory.d"""#B#f####$P$$$$6%d%%%%$&n&&&*'p''''"(@(|((5- 0 ~ t -&" -P  w  BlAlB b`e C  f `%7 wl 7  N 0 - :, Ze@eeN&b ^.N&P N &Nf  e w&  , *er2 e, Z -RJH 6 42 6 ,   d-  TR- t D <   2  te 2 e \Xe m2 e+ x N ~+ d@& ~+ PN` FW~+ 6~+ .N` $W~+ ~+ N`  B@@l  +  \ %@f l AAl @.  w . tN  : 7  ( 4. @  D. (00TUkTM55512  @7 :  wۂ N` W~+ ~+ Dle ע~+ ~+ ߃ x. .  ~+ rߎ ~+ d@m N ~+ Lߎf  r~+ 4 b%f.   .   w NN eh ` wڂ݀& ~+ ހ t,  ~+ ޗ  ^. tގ6 . +. X@@l A .N` 0W~+ ~+ @@lb. ގ 2 . t l . \ T  / R  ~+   ~+ |   6/ V |~+ >d d~+ &N L */  0~+   ~+  ^ V -6/  2 vd/   ^ V Ne  Free Module Current Start CALL Coroutine Conditional DO ... WHILE DO ... UNTIL WHILE ... DO UNTIL ... DO ENABLE SIGNAL SIGNAL_STOP ++++++++++,,Numeric String ASCII RSXtime VMStime Pointer Logical 4,>,F,N,X,b,l,&Error occured while processing packet The packet size is (octal). BSince this size would cause the packet to span the block boundary,@the following dump of the packet will end at the block boundary.$An octal dump of the packet follows:Execution stack dump:2Module name Procedure name Entry code Offset BlockDynamic memory allocation:(Type Size Mapcnt Name Ident CompilerTable Files  Error - overlap (bytes): Dynamic files:2Module name File name Code Size Recsiz Records Title Error Value stack: Entry Type Length Place OffsetHeap Module Unknown Unknown  Size Current Max usedGeneral Statistics:Execution stack Value stack Value heap ,Maximum heap used after garbage collection: Heap garbage collections: wwwae0C" wV``AE5 e5e5 eE` `AE5e5b& f- -0C7  $W  W  PwCe ^ pAAcww` w wΦmΠewfDb`w|w`x n  A!5BBeB!5  z&  5EcA!W# ~eHwwawa -C Rnj͇-Z0C  ,J77e:f , l͆w`́ @e  EcEc e 6AAeA!  ¤ S@Bll D` N` x``C``7!Z%W vÖ% Bԁ `e  Zӕ'f ӕ'ӕ,  -4Җ% ׯ ׯ 8 0         7 t·W W W  ew  w407(w&m wme  l V w   x f  hʇ 24< *4:00\U_U557i:)*, A@Y ASYSYSYSYTICL2  ww `ww|x,ц Y AĤ;TITISYSYTICLOV~XĤ~ZF||XXx w  d T p&  T %N%R -- Invalid device%N %N%R -- Volume not mounted properly%N%N%R -- Bad volume type%N & Т6 2 &-\rzwF8 2 0 7" Z5@Y @Т  &-`\>wJ  0 7 ( ( p #p, A1, @  5Iآ f *,$&R%N%R -- Shadow Recording not in system%N%N%R -- Privileged command%N^ 5 .7 5# ^r   p  H :5 T  P E D @ wx (x8p, ~ (x8p%N%R -- Illegal parse data (internal error)%NABDEFIMNOPRSTUXYZ<>{Ʀ了@IVw &`w & & 00dUkTM55512&f&  ¥%   %B&ХVA ( C 2~ ĥ A  Е%V P~Е Bf ~\:\74[1Hŀ ȕ ~ `Е ~Ћ~ Е Е ~\Е A N  ~ \A ~Е ~Е A A   "Е. v AЕ; ~   A EA  E 6L  - QIOQI/OHRC...I/OCSRkz?TLBOPzLB ^'« SHA>P  ~ 0(I/O Error Code %D.QI/O Error Code %D.B  8& Ǯ  %ZRw  & LB&`  (  V111 D J M >   ^U%    tM D  E e^@P  `& SY&  J& SY& 0 5 ^%  F ) &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w F̢$ %  Е.  e&D EC@E EG` ?L`_ T T @T~ ہ %  E@wwedD 8  d&= C~` <p AA  87Tv X 5Aa@@`&f&fp Ћ p& ȥ ȥ    D ˥  𧓠Ĝa Ԥ  `ˋ ˥A˥Z  `UNKNOWN ERROR CODE =JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp tC*8֋ f88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ Dllj00lU_U557i:)*aCeH###33 & 8 *Ĵw  8jDl@ RTeBT85l@ $@( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@w f' UD$BA &( U BQ Е*  & & @( vf  e ee e w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   B&3&f& v '&1 t zt r j b Z R@ J B` :h 2 0 *8| "8 8@ 8" 8 8( 8 8 8 P@ P P\ 8: 8Ȧ5ew 0, Bv     5Bwr &E:5  5 2  UE  :йE U 5@*& E& & f&ËDef Ë )̋U&f &ff &   `@ ` B   & A @    &  m  f A N  % t!ttttt@@|@ #@ 8'0l,)0 *@|D.@TP3@ qʰ Psq w,0 b hf @w  9`/X 4* .(x(t\^ H P 8p NU f%N%R -- Maximum indirect command file depth exceeded%N%4S-- %VA%N%N%R -- Bad indirect command file specification%N%4S-- %VA%N%N%R -- Open error on input command file%N%4S-- %VA%N%4SFile=%2A%B:%X, %I%N%N%R -- Input error on input command file%N%4S-- %VA%N%4SFile=%2A%B:%X, %I%N %N%R -- Unknown command error%N%4S-- %VA%Naz  00tUkTM55512|     7 eeV*  (x(v 8p 27 Ze%N%R -- Illegal command%N%4S-- %VA%I%VA%N%N%R -- Syntax error%N%4S-- %VA%I%VA%N7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &f     8  " .$ B  8̥ZḀ90     STARTSTOPDISPLAYCONTINUEABORTTOTOĒėğĨĮıĀ~ā~ ł~xŃ~<ń ~.bbxbxbxbJTbx҂҂r:;!w  w |& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C G~ Q|*´*%N%R -- Start-up error%NINS $SHC/TASK=SHA/IOP=NO/RUN=REM/EST=NO%НН| ~% >! s%| 4w. *w&t%= (x8pw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ 8(%N%R -- Not a shadowed pair%N%N%R -- Catch-up in progress%Nw F z/@ %1 $1,  BA@  2 2  ^Ut (x8p Q| † %N%R -- Not a shadowed pair%N(%N%R -- Abort error%NABO SHAw l /@ $1 1, НН F0%L= @wJj (x8p s x8(%S%7SUMB%5SPRIMARY%3SSECONDARY%N%S%5S%P%7S%4A%6S%4A%N   B8tpEC ,C 8ph& `lE Е: J8f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! 00|U_U557i:)*D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C eB  8 $&w *(5<s1  U U@  &f&" D)'&M'&&**%*%0 *&* *5ND  <  EU n  Zf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w & (ww  ww  ww BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w"   f  >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w  /$ ,:T < U@% DD%][%><w  w$1  %,,:4 w D*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    d*w L*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ **0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@00UkTM55512 J : B & : 2,B * w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB 8  w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ h#( P) .@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( | *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 60 @0 &*0 @ J& & fe# eB&B B , *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  T1 >w eE D` bl lrw   B eE"s    s-  Cslw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wbf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ e6p 4 .8 D81416   J . r8e2 46f %8 E D/D!D l0l8epl0pɥ.ɕ wr U8UMw wV *) l0, *) $ )*)0,40,6 ,*1 XB 00fep=& /e`pw w  ť ť 0B Aaw ) 8C * ) *w<*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p00U_U557i:)*  8 V *`)w@ C#    D @)  6?0D)w 8*D n  w 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E  *) l0, *) $ )*)0,40,6 **8Ae f"( UCɗ&+(e$&%   DP5R RRR  8  b**0+1(e  :%&p*w f( f)f e6p 4 8 < 81416 P `  : 141612epl2l0p,*1 U8UMw w( B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ hwX8e2 w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f 8e :* He*w,@)0,    8) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  rwL N JwTB # f  `* 8w()0406 l0 **=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  0**> =00l&8el2 0 *e6p 4 8 81416   6  ..8em,0l0!D0e6p 4.) &f Z he) .  e6p 4 08*wz141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f 00UUM55512w *8I j*=)98 p eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E Zp* wxw |) * wJ46l0w p*eB 8 2  **w (BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wL  f &* *8Ae f"( UCɗ&+(e$&% =D  `p46 f 64/=  @) 0  8w  46 8 e*w 0+1(e  %&p*w f( f)f 82e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *)"(. = . B  E t (. Mw|   f >5>Eu D  141612epl2l0p *) l0, *) $ )*)0,40,6 w  )  fU b%  BA `6p 4p`4 %60 4e6p 4 88 481416     b46f %8 E D/D!D l0l8epl0pɥ.ɕ w|0,0, f 톇,, w |     .% " eB U5UU plp & NeՀ)*w eE D` bl lrw   B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) (&f |  Re) .  e6p 4 08*wR=p!Օ^,*1 &U8UMw w B 00fep=& /e`pwx|,TT Y <F/TITISYSYOVvXFvRtX00U_U557i:)*X %N%R -- Invalid device%N %N%R -- Volume not mounted properly%N%N%R -- Bad volume type%N & z  &-]r$ wF  0 7 Z5@Y @z  &-\>wJ  0 7 ( ( p #p, A1, @  5IŢ K r*$&R%N%R -- Send/Receive error%N  %[%[ %  8 & (8$p  ڤ%N%R -- System error%N%N%R -- Too many bad blocks. Volume cannot be shadowed.%N NЕ:尮7H :"BD# h¤ c: ^ @` W7p7m7 he 7^ :BD# Z 9 474"-~D D e"7(7$7 7  p  - 2  :  (8$p&%Y׭ @eɠ1! qqw `1~ %N%R -- I/O error on logical block %T.%N%N%R -- Catch-up completed%N Ȧ #\̥ euXA B6>B21   `u xvC A7 5`He( wWpu  Xew 2e p !w  Pjp p A r ^ u H~  p ( (Ȧ8$p&fWpu cu  f%:W% d [0,0]&3&f& v '&1 t L   D 0  ִ05ew , Bv     5Bwb 00UUM555125  5 2  UE v LtE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A XW e`fÊ    E &f &  m  f A N  %&ff  v ( v@v@ v00<ִlʴ l8"0$v %N%R -- No room available for UMB%N%N%R -- Volume currently part of shadowed pair%N D = 8| 7 7w ' B~̵?|1 p2 0 0 5V f(8px w"bX p&ABDEFIMNOPRSTUXYZ<>(:R{F@̷շLF,8ow &`w & & &f&  ¥%   %B&ХVA  C 2;~ P A  Е%V P~Е Bf j~Y:Y74_1Hŀ ȕ ~ `Е ~Ћ~ Е Е ~YЕ A N  ~ YA &~Е ~Е A A   "Е.  AЕ; Z~   A EA  ,E 6L  - QIOQI/OHRC...I/OCSRkz?TLBOPzLB I/O Error Code %D.QI/O Error Code %D.B  8&   @ %w r& LB&`    V111 D J . M >   U%    tM D  E e@P  & SY&  & SY& 5 %  Ҹ Z)b &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w Pv$ %*  `Е.  e& EC@E EG` ?L`_ T T @T~ ہ %b  FE@w:w5e"dDX d "&= C~` < AA  87v  5Aa@@`&f&f Ћ & ȥ ȥ    D ˥  |Ĝa Ԥ  `ˋ ˥A˥Z  `UNKNOWN ERROR CODE =JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw ' UD$BA X&( U BQ Е*  w F ť ť 0B :Aa & & @( f  e ee e w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   B&   `@ ` B   & A @ 00U_U557i:)*   qDPsqD*w  R Hw <( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) N*<##   w,# ~w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  @ P3)/ (#( P) @#**fff  \&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 B00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B r * h eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w eE D` bl lrw   B eE"s    s-  Cslw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wz141612epl2l0p   f | >5>Eu   **8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( ^0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416  . T  ,*1 :U8UMwF w NB 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w 8e2 *) l0, *) $ )*)0,40,6 w $( D f 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 b00ĥ݇AĥĊ  ȕ000 0 @0 00UUM55512&*0 @ & & e $* eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6wD/!0/ l0/!p!0 .=p0p2W=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w< f &* *w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 > Mwf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ  r X ʴveB  8 J$&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  h<  EU   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce <   n*5%& w &Ba +- ʥ# . U 0   b   `     Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ .z  DEe    *1  ˕03 "   ˔Ӕ ʥ7(e( 1  `((   >: 5 eCe&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք    00U_U557i:)*  Օ 5%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w $*8I *=)98 eB &&  U **e *Nlv ΋*.2 2 & #!)&eP(e && >e >E p* 8wp)"(. R= . B  E (. ..8em,0l0!D0e6p 4.) n&f  e) .  e6p 4 08*wp=p!Օ^0,0, f 톇,, w      .% : eB U5UU * plp & NeՀ)*w d n832cd& & & B  2OΕ   N Υ$Ε  22Υ   Lv Ε f e * ze*w^@) *0,    R) )% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,   N $w0  J B #  f  `* Nw>)0406 l0 w 2 n832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e * He*w,@)0, 0   8) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a fe0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  wL  JwB # f  `* 8w()0406 l0 **=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8   (** 8  **w   Lw   z,,  *)  > =00l&8el2 0 *e6p 4 28 P 81416 d t  N . B..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 n08*w=D  `p46 f 64/=  >@) 0  8w 46 V8 ~e*w~00UUM55512 J&f D E/fC A VB f&  >BeA @0 L (@0 :a@eA  B0 "AB  f  C @*141612epl2l0p,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ XwH8e2 0,0, f 톇,, w      .%  eB U5UU  plp & NeՀ)*w  ) b  fU 0%  BA `6p 4p`4 %60 4)"(. = . B  E ,(.&   `@ ` B   & A @    8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*w f( f)f x|,??aa Y ХTISYSYSYrXХrNpXXNP%N%3Z -- on %6A%N%12S%N%12SShadow pair: %4A %4A%N%12STask: %2R%N%12SLogical block: %T.%N%12SBytes in xfer: %U.%N%12SFile ID: %O,%O%N%12SFile name: %X%N%N%12S%M. errors lost due to saturation.r7 8e " ? Cڤ00U_U557i:)*~@7t 7@0b@0 X^RڤҤ$&Ƥ0 d̤V X=RRR  D w`dA w` ̤  w`0A w`Ƥ w`̤Ƥ& Ԥ" w` ̤ zR~ w`^ ~ ؤ r ew`D@ t ڤ vXwBw.  z z&uf@ uQ$f w%6XDFDXDIw   ʋ-"h%DK7 %DS%DL ԤABC# @`" `@ 7twrl%$  TBEE?Wt C  w:& 8lE jЕ:&)_&& & &  & && && Ε@ 61& 1)ȋ& & & & & & & & & Ε  1 &  a@ kz?TLBOPzLB [0,0]I/O Error Code %D.QI/O Error Code %D.~B « 8&    %w & LB&`    V111 D J M >   U%   j tM D  E e@P  0& SY&  & SY& 5 %   )ABDEFIMNOPQRSTUXYZ<><D^~``T JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC w $ ť ť 0B ,Aaw && D¥%  B&ХVA C e(!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e*AHŀ ȕ Е Е Е & eH & e4Е A %& eA ` Е A pEA EЕ A ,A   $Е.  AЕ;     &3w D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   Bw v' UD$BA &( U BQ Е*  & & @( >f  e ee e 00UUM55512&  m  f A N  % 5 ߥ& *  + 23E Ew Z   Е-   0@A lW e`fÊ    E &f &   `@ ` B   & A @    0PHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADP.,x30APR8922173030APR89221730Uc .,xX30APR8922173130APR89221731U.,78x30APR8922173330APR892217326UU.,x[q30APR8922173430APR89221733"V.,y12MAY8914173212MAY89141731.,y(12MAY8914173712MAY89141736WS.,y[q12MAY8914174112MAY89141740W@.,'(z30APR8922174130APR89221740&UXH.,z[q30APR8922174230APR89221742|X;.,}30APR8922174330APR89221743X?.,~30APR8922174530APR89221744ƧX|.,~(30APR8922174730APR89221746nY.,~[q30APR8922174930APR89221748ZK., ~30APR8922175030APR89221750 Z&3.,430APR8922175230APR89221751Z>.,T30APR8922175330APR89221752ZF.,&'|30APR8922175430APR89221753%ZIY.,|[q30APR8922175530APR89221755[.,@A30APR8922175730APR89221756?([{.,!"(30APR8922175830APR89221758 h[Q.,&'[q30APR8922180030APR89221759%[M.,30APR8922180230APR89221800ϯ[{.,30APR8922180330APR89221802\W.,:;30APR8922180530APR892218059\Z.,[q30APR8922180630APR89221806\PUFDTz,P.,zezy30APR8922181730APR89221817\wN.,ezz30APR8922181630APR89221814]^I.,V30APR8922181930APR89221818^@PUFDwvz P.: ODkQ30APR8922193630APR89221936`_;1. GzCkQ30APR8922184930APR89221849y_". Es ~kQ30APR8922182230APR89221822_l#. A""|skQ30APR8922184630APR89221846!_2.B Lp kQ30APR8922194630APR89221945_9.v I skQ30APR8922203830APR89222038 :`.V N33* kQ30APR8922200430APR892220042D`. N%%RkQ30APR8922213930APR89222138$w`. IxkQ30APR8922211330APR89222112`h.w N$$skQ30APR8922203930APR89222039#a%8. HskQ30APR8922182330APR89221823@a&. CdBkQ30APR8922182430APR89221824Ra$.= GMM$TskQ30APR8922193930APR89221938LVa`k.# P{2kQ30APR8922191530APR89221914aw. O=={~kQ30APR8922212530APR89222125.' Lh<}kQ30APR8922191930APR89221918b). OCCkQ30APR8922211830APR89222117Bbh. O''@`kQ30APR8922212630APR89222126&b*.M NBBskQ30APR8922195530APR89221955Abb. HskQ30APR8922182530APR892218247c1.k G;;dskQ30APR8922202630APR89222026:Lc$S. ?HqkQ30APR8922191030APR89221909c}.* Eh`kQ30APR8922192130APR89221921c:.@ CRdkQ30APR8922194230APR89221941cx . IVV skQ30APR8922211730APR89222116Uc}o. HhskQ30APR8922182630APR89221826c6. K>>skQ30APR8922184330APR89221842=cu\.> E kQ30APR8922194030APR89221940:d. C"p&kQ30APR8922182730APR89221827Cdb. P++wkQ30APR8922212330APR89222123*IdvF./ H kQ30APR8922192530APR89221925td5.D Gpp:kQ30APR8922194730APR89221947}dj. I((hLkQ30APR8922211330APR89222113'dZ. Gv`TkQ30APR8922190730APR89221907dL. BhxdkQ30APR8922191130APR89221911dW.g HskQ30APR8922202230APR89222021d0. L kQ30APR8922182830APR89221827d. F@kQ30APR8922182930APR89221828d.; GTTskQ30APR8922193730APR89221937Sd#y. I))@ykQ30APR8922212230APR89222122(AeE. OBB09kQ30APR8922211930APR89222118AjeY%.h DkQ30APR8922202330APR89222022eW.K H hkQ30APR8922195430APR89221953 e.\ K((jkQ30APR8922201030APR89222010'e.2 FH0 kQ30APR8922192830APR89221928ed. Pp:kQ30APR8922212230APR89222121 f.m MRhLkQ30APR8922202930APR89222028f . F fkQ30APR8922185030APR89221850 f.^ JykQ30APR8922201230APR89222012fa .] L P~kQ30APR8922201130APR89222011 f+. KkQ30APR8922211530APR89222115f7. O^kQ30APR8922212030APR89222119fZ. Kii kQ30APR8922213530APR89222134hg.S IGkQ30APR8922200130APR89222001+h.A z'kQ30APR8922194530APR89221942;h;i.  J`kQ30APR8922185530APR89221855jS._ KOOB:kQ30APR8922201330APR89222013N*j1.Z I##8 kQ30APR8922200830APR89222008"yj.q LX kQ30APR8922203330APR89222032j.< A!kQ30APR8922193830APR89221938j@. M08"kQ30APR8922190830APR89221907j .1 GkQ30APR8922192730APR89221927j.  EkQ30APR8922185430APR89221854j.4 @ XRkQ30APR8922193030APR89221929k.E SYYdgkQ30APR8922194830APR89221948X kx.  IpqkQ30APR8922191230APR89221912ek^1. J ykQ30APR8922182930APR89221829 vk9.o NUU"kQ30APR8922203130APR89222030Tk. GkQ30APR8922190330APR89221903kI.e I`kQ30APR8922202030APR89222019kp. A XkQ30APR8922184430APR89221844k_ . AykQ30APR8922184430APR89221843k!.. O,,fkQ30APR8922213130APR89222130+k2<.? I%%skQ30APR8922194130APR89221940$$lI. H$skQ30APR8922183030APR89221830Il:.I J`HkQ30APR8922195230APR89221952_l." ?XHqkQ30APR8922191430APR89221913al#.8 H%%jyZkQ30APR8922193430APR89221934$bl.5.N H## skQ30APR8922195630APR89221956"lP. G_kQ30APR8922191030APR89221910l.O KJJskQ30APR8922195730APR89221957Ily.  F$$ L!skQ30APR8922185330APR89221852#lUP.X Hj""`kQ30APR8922200630APR89222006mx).L ILL#"kQ30APR8922195530APR89221954K0m,. D "ZkQ30APR8922184730APR89221847 |m%.l Inn~#kQ30APR8922202830APR89222027mm5. A# XkQ30APR8922183230APR89221832m.c M;;#wkQ30APR8922201730APR89222017:mh.  F #_kQ30APR8922185330APR892218532n.9 K449skQ30APR8922193530APR8922193534n|.n Iy:kQ30APR8922202930APR89222029hn2.R J``y:~kQ30APR8922200030APR89221959_nnU. P~~6:kQ30APR8922213030APR89222129}n.u PllHskQ30APR8922203730APR89222037kLo.~ R\\,KskQ30APR8922204630APR89222045[o.b LiiPYMkQ30APR8922201630APR89222015hpe. H%%noMkQ30APR8922211430APR89222114$}p. NAAMskQ30APR8922210330APR89222102@p. G++MskQ30APR8922212830APR89222128*p. J222$NskQ30APR8922184830APR892218481q.P PXXhQkQ30APR8922195830APR89221958W@q. P,,bRkQ30APR8922185630APR89221856+q'. O~~4RskQ30APR8922190530APR89221904}q. GCCRskQ30APR8922183530APR89221834BBrv.6 I/SxkQ30APR8922193330APR89221932ra.T O[[LSskQ30APR8922200230APR89222001Zro.a ?XSHqkQ30APR8922201530APR89222015r[.7 GSZkQ30APR8922193330APR89221933r^.  KS`kQ30APR8922185130APR89221851s. S&&;TdkQ30APR8922213430APR89222133s%t/v.i L__-8;kQ30APR8922205130APR89222050{`a. H-`^kQ30APR8922205230APR89222052{ҙ. M/0kQ30APR8922205430APR89222053 |M.z O/8;kQ30APR8922204230APR89222042|h. Prr2kQ30APR8922210630APR89222105q.|#. M==3kQ30APR8922210530APR89222104<|. J4`kQ30APR8922210030APR89222100|>. M`5vkQ30APR8922205230APR89222051 |. N**92kQ30APR8922205330APR89222053)}}. Q559p5kQ30APR8922210930APR892221094*}J.x >*9>kQ30APR8922204030APR89222040_}xc. F~9KkQ30APR8922211030APR89222110 e}v. N<9kQ30APR8922210230APR89222101s}. DlkQ30APR8922190430APR89221904} J. G skQ30APR8922183830APR89221838 } . G zkQ30APR8922185730APR89221857}Y. N55PskQ30APR8922211630APR892221154}I. P ̖skQ30APR8922210830APR89222107}~.y 6ؖHqkQ30APR8922204130APR89222041t. FBBj skQ30APR8922204730APR89222047Au. GskQ30APR8922183930APR89221839) .` L kQ30APR8922201430APR89222014.s P**6ęskQ30APR8922203530APR89222034)].3 B fƙp:kQ30APR8922192930APR89221929 .r K((ЙHqkQ30APR8922203430APR89222033'.t M##Xԙh~kQ30APR8922203630APR89222036"CW PUFDwz PPUFDwz PPUFDwz PPUFDxz P. ^30APR8922220130APR89222200 jPUFDvz%P.%A G}30APR8922222630APR89222226zO.%?G}(30APR8922220330APR89222202`.%G `DkQ30APR8922220330APR89222203 ).%HzDkQ30APR8922223030APR89222229@.%ERD9ykQ30APR8922220430APR89222204.%?DjkQ30APR8922220530APR89222204.%ADkQ30APR8922220530APR89222205 ..%DD@,kQ30APR8922222830APR89222228ŀL.%E D:kQ30APR8922223130APR89222231 ـL.%DD:kQ30APR8922220630APR89222206"G.%FD:kQ30APR8922220730APR89222206RI.%ED:kQ30APR8922220730APR89222207cH.%ED:kQ30APR8922220830APR89222207bJ.!%A(D:kQ30APR8922220830APR89222208I.%%DTD:kQ30APR8922220930APR89222209K.%?DhzkQ30APR8922223230APR89222232.(%DHD}kQ30APR8922220930APR89222209 ^.+%? LErkQ30APR8922221030APR89222210 %.%C EykQ30APR8922222930APR89222228 2.,%?*DEy_kQ30APR8922221130APR89222210=g.%G .DEz_kQ30APR8922220230APR89222202 Bk..%EGEHSkQ30APR8922221230APR89222211L[.5%?NEkQ30APR8922221230APR89222212Q-.G%B liE.kQ30APR8922221330APR89222213 WX=.%@ iE]kQ30APR8922222930APR89222229 a2v.%@iEhzkQ30APR8922221430APR89222213m".%AoEhzkQ30APR8922221430APR89222214tD.%DrEkQ30APR8922223030APR89222230{q@.%?fsEkQ30APR8922221530APR89222214.%AsE'kQ30APR8922221530APR89222215'.%@ vEkQ30APR8922221630APR89222216 ?..%@ EhjkQ30APR8922221630APR89222216 5~.%?EkQ30APR8922221730APR89222217ē.%KEL;kQ30APR8922222630APR89222226\.%ET-FykQ30APR8922221830APR89222217с.%IFkQ30APR8922221830APR89222218Ձ :.%?bF zkQ30APR8922221930APR89222218.%AFKkQ30APR8922222030APR89222220T.%@AG@kQ30APR8922221930APR89222219.%CRG@kQ30APR8922222330APR89222222+.%C(GLkQ30APR8922222130APR89222221X.%?G8^kQ30APR8922222230APR89222222l.%K $Gp kQ30APR8922222130APR89222220  .%? G}kQ30APR8922222830APR89222227 .%CGkQ30APR8922223130APR89222231<.%?G kQ30APR8922222330APR89222223%.%?tG8kQ30APR8922222430APR89222223,H.%?lG@`kQ30APR8922222430APR892222241,q.%A hG kQ30APR8922222530APR89222225 6}#.-%C GkQ30APR8922221130APR89222211 @..%A*KkQkQ30APR8922222530APR89222225M#g.%lF "S30APR8922222730APR89222227S51PUFDz%P.%9DE D30APR8922223530APR89222235i.%4DEv30APR8922223530APR89222235j2.%:GEQ30APR8922223730APR89222237k;.%AF 30APR8922223430APR89222234l.%nF 30APR8922223630APR89222236m:.%(F`30APR8922223630APR89222236n.%&PJx30APR8922223730APR89222237oNPUFDOzP.2_Mp:30APR8922224030APR89222239qPUFD=pzP./  30APR8922224130APR89222240t.dp30APR8922224130APR89222241u .M,30APR8922224230APR89222242v{:.e"30APR8922224330APR89222242~-.2_Mp:30APR8922224330APR89222243z.N,UC;30APR8922224430APR89222244.bxH30APR8922224530APR89222244. *x30APR8922224530APR89222245".N hL(30APR8922224630APR89222245v.E22skQ30APR8922224730APR892222461.AkQ30APR8922224730APR89222247΂dN.J//xkQ30APR8922224830APR89222247.ӂm.@:3@kQ30APR8922224930APR89222248u.OyxskQ30APR8922224930APR89222249 $.N hLkQ30APR8922225030APR89222249 .NęskQ30APR8922225030APR89222250"@R.3 $ԙkQ30APR8922225130APR89222251 8C.""`30APR8922225230APR89222251CQ.w"30APR8922225230APR89222252GW. zv30APR8922225330APR89222252Kf.X+30APR8922225330APR89222253O_w.)u'Ԁ30APR8922225430APR89222254SV.Ry'Ԁ30APR8922225530APR89222254T.!y'Ԁ30APR8922225530APR89222255U.)y'Ԁ30APR8922225630APR89222255VN.22XMԀ30APR8922225630APR89222256WH.PfM+Ԁ30APR8922225730APR89222257Y<.N "Ԁ30APR8922225830APR89222257 r.<.kQ30APR8922225830APR89222258|x.6 ,wqkQ30APR8922225930APR89222259 (.; RVqMkQ30APR8922225930APR89222259 1.; L"wkQ30APR8922230030APR89222300  .7 :dwkQ30APR8922230130APR89222300 .wq30APR8922230230APR89222301].VqM30APR8922230230APR89222302ԃ ."w30APR8922230330APR89222303.:dw30APR8922230430APR89222303ZO PUFDzP.z,30APR8922240530APR89222311 p.X d1KX30APR8922240630APR89222405 a.i99wdd30APR8922240830APR892224078.sGGwF 30APR8922240730APR89222406FN-.P wf'30APR8922231030APR89222310 .B4z,30APR8922230930APR89222309˜.;$sQkQ30APR8922230930APR89222308{.O#(Ԁ30APR8922240830APR89222408-.N{QGwԀ30APR8922240930APR89222409.O{QrwԀ30APR8922241030APR89222409.Oy Ԁ30APR8922241030APR89222410U|. O>y2 Ԁ30APR8922241130APR89222411ĉ|PDATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATAP0UUNx|z:d Y id0䠖>0d|x0rDN $&>HJr@BDFʠ7 &U 7 x p7 ^::7 7 `]7 Ew@e 55 7HD We557* m5  5<584 wUP&B @`5 EWt  5 s5 R4 X7wb>7 n  j` R& &&  :   $WC COF & 7 5ܠBAKC ll N u! NܠA   >Nlc #  J!UtE w5B&, 3` 2EnC+ 5C U ww R E$e  ՕՕU  ՕՕ? dd \\ e@ Bچ nE$e`e```:   4 3EPE] œ  T U &:82$E$e e   xX,ll Y Ҧ TISYSYSYSYCLҦb TISYSYSYSYCL(lkXx& `lE Е: A7 5   S   5L 7 E ;& @# # @7 p ;: N s >| Z *  5 700UDATADATADATADATADATADATADATADATADATADATA % %6@0  <lE%? Bte9Ee0P xABDEFIMNOPQRSTUXYZ<>!,82^ijrJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA *EAa$ w 8 ť ť 0B Aaw && D¥%  B&ХVA C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & et6& e`/& e*AHŀ ȕ Е Е Е & e& & eЕ A %& eA  Е A EA EЕ A NA   $Е. 6 AЕ; d    &3&f& v w D&& bЕ- eaePPPЕ-$w D  &Е. ce x Е:   Bw h' UD$BA z&( U BQ Е*  & & @( f  e ee e $@75+5 W,TT@, wHPPPPPPF  0& &ԴЕIЕNЕSd7 R7 L h %"L w5J5 v 0& &ԴЕIЕNЕS{7 7  % wx7 vh wfW W  wPw H w>ew 2͵ wB 7z 7   2P Е Е  wfHC~ӕ ӕ U] .* - & f f  )wR RwL D7 b5 JU 7 \7 V5@t6 %5" &  &ԴЕSЕEЕT' 77 7  x7 7  %5" & &ԴЕQЕUЕE7 5 # &  &ԴЕSЕTЕO J  * " & &ԴЕEЕLЕIݶ U@ 5@   5  O /   ߕ5@  ml   e_ZET  M 8   jw&  D CC5@wŶ A AA P P5 p l ŶB:P& &ԴЕAЕCЕS鶷 L7 0  , R 5555@&5  ,@ E & &ԴЕDЕMЕO  ( F@& )Cm Ew,w:5 N ;b ƭEP~ C(O 0Е E& &ԴЕSЕHЕA -r  7= (J ׳ʕ  | 4 5v Nf  5<5 1w .v 6$ 0w & &ԴЕBЕYЕE  lĆ6 U @ 7 ы w 8),  8 .@ $  7 .P "YN'5@ 5  &ʴ ! &  $D    ,P 0 聇$f H  "h$  7 4z,TT ,RT,HTwB7 5@Z  w565 |D &p5%5& & & & ȸ& & & Ε&p NDʸ@4 ы tw]^&Wڸ1 W!.&   ) w=Wڸ Dʸ &A f) W!7  l w  & TIw .ҋ00UUN&E  V@ -M1'5\n : ȕ & )\E9AA55@5@  Hp5 & )1A,, Shut down program Enter minutes to wait before shutdown: Enter minutes between messages: XX-XXX-XX XX:XX Please finish up, XX minutes before shutdown -- Reason for shutdown: All further logins are disabled Enter minutes to wait before disabling logins: OK to shutdown? [Y/N]: Command ( ) Timeout - Continue waiting? [Y/N]: Logins are now enabled SHUTUP operation complete XX-XXX-XX XX:XX System is now shutting down -- Reason for shutdown: Reason for shutdown ( for none): SHUTUP can be run only by privileged user or from TT0: SHUTUP's TI: is a pseudo device SHUTUP - ACSRES.TSK not found and installed in system. SHUTUP - ELIRES.TSK not found and installed in system.BYEDMO DDNN:LLLLLL/DEV/LOCK=V ELI /NOLOG ACS DDNN:/BLKS=0. @LB:[1,2]SHUTUP STOP/ACCOUNTING SHUTUP SET /COLOG=OFF QUE /STO:QMG SHA ABORT DDNNN: INS $ACSRESINS $ACSINS $ELIRESINS $ELI/BLKS=0. /DEV/LOCK=V %Y %2Z Q|7 0"*,.0DFNT"$&,8R^`ܷ$  @    G,|Ol|||)!| B82Jbz @  @  @  @  @  @  @  @ 5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&f &   `@ ` B   & A @    |x,II& Y 8TITISYSYSYSYOV~XFZ(+|XX`00UDATADATADATADATADATADATADATADATADATADATA SLP -- Command file checksum is %P SLP -- *DIAG*-Error in command file %X checksum  :Z7 7 7 &J  U v w 7 d P* /j'wx  ɇ  U@    U      U5p]7 nw*7pej`    :-2T e Ebw w7N e=E7 5H 75 (5: 2   5   L| Nw4* wf  d ~ v<  -P eH\Z  w z' *$5%&/      55 7 4   57 zEU ;**-EW**w &*@E<E1E.E09EŠ$"EŠEŠEŠťNE E EEEŋዾ  * Ee   %7 *7 $w &E * ť DEe7!\w R P*# >`a abpd $ef  \5  X75-Z#  P*7:#`¥¥¥ ¥¥ef  d w $Z `5 V?" ""5@)~5:5@2 5 *  @@*" >%E@` 5 q*  55 .:" 2" W ''R Ћ #e " ` $-*! $" !&5X0  ~$ `:-62< Z$E ` .7 .!E  w P# E DW!!  ` ` ~F! & A   l"\   F !%*" ~ D" <L 4, w47w b )5   5 V J2  *` 0e |55 ~hp5p *B ɋW W UB 7 : *E05*w UB * Х U B B 5EeЕ  Е * B R @AAŁ@<(lxPDC@@UE  E  &@AU@@U w -" 7 7  -ĥ/7 $ ĥ, %#ĥ;ĭIĥ ĥ 7 ~ x r    "  @" < 4THSY >AU[ BF[CMZCSZTRZSQ ZRS@ZNSZ7X SLP>NX~+Kn8Y|"( NSYh<HDBZSP[ &?,-fW >500UUNW E5W sW s W ! W 8W >W EW W W W Ō $|e ABDEFIMNOPQRSTUXYZ<> HPjll` JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC & & @( f  e ee e w && D¥%  B&ХVA  C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & en6& eZ/& e*AHŀ ȕ Е Е Е & e  & e Е A %& eA F Е A EA EЕ A A   $Е.  AЕ; ^    &3f** aB ¥*W W c@ %w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp f C*8֋ h88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w Djjlj ɥ@@aujk,bp .5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ vDlljaCeH###33 & ^8 *w  8jDl@ XTeBT85l@ @( D *eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ 89f"e\e!e z 5f 2* eA  w  ť ť 0B fAaw \D&& bЕ- eaePPPЕ-$w ,D  &Е. ce  Е:   @Bw ' UD$BA &( U BQ 8Е* THZSYnzAU[ BF[CMZCSZTRZSQ ZRS@ZNSZD%N%1R -- *DIAG* -Open failure correction input file %XOpen failure line listing file %XOpen failure source output file %XPremature EOF correction input file %XIllegal Get Command Line error codeI/O error command input fileIndirect file open failure%N%VAIndirect command syntax error%N%VAIndirect file depth exceeded%N%VAI/O error source output file %XI/O error line listing file %XIllegal switch or filespec%N%VAIllegal filename%N%VAIllegal device name%N%VACommand syntax error%N%VAPremature EOF command input fileI/O error correction input file %XIllegal directory%N%VAI/O error command output fileIllegal error/severity code %P %P %PLine number error%N%VA%D lines truncated by audit trail%N%1R -- *FATAL* -%2N%VA%N'&1 j :p: b :>; Z :; R :6; J : ; B V:? : V:0B 2 b:Z@ * b:vA " 2:?  >:?  J:? J:B  b:?5ew , Bv     5Bw 00UDATADATADATADATADATADATADATADATADATADATA$ ()*. 5  5 2  UE :, +f+:E U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew Z   Е-   0@A <W e`fÊ    E &f w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  x1 >w  Bn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e * e*wp@) *0, l   H) 2)% ȥ  = ȥ l 0l  0ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,   N w0  J pB #  f  `* `wP)0406 l0 &  m  f A N  %f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &ff w *D   ww H) * w46l0**00VUN *) l0, *) $ )*)0,40,6 w   wd  < ,,  *e6p 4 b8 \ 81416 p   Z :)  4..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 `08*w 8   **  DP5R RRR =p!Օ^> =00l&8el2 0 *&   `@ ` B   & A @    0+1(e  @%&p*w f( f)f ~8Ae f"( UCɗ&+(e$&% =D  `p46 f 64/=  >@) 0  8w $46 V8 re*w &f D E/fC A 6B f&  BeA @0 , (@0 a@eA  B0 AB  f  C @*141612epl2l0p,*1 0U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 0,0, f 톇,, w      .% eB U5UU  plp & NeՀ)*w 0 ) Z fU %  BA `6p 4p`4 %60 4)"(. = . B  E H :(. p::&:p:::p:d::"?2::"? &:>:'?&:J:+?&:V:0?&:b:3?&:2:5 \ # ?5  z# l/ nE ` 5@ 85l5`d# ` d·eB$&< w @pdf ) B$ĵ4ĵ!%'% %E$e@ P    e e  e ͱ& ĵ V 11@ $Be pͱ 2:? >:? J:? J:E V:0Bt:w ?2t: * P ?> ? p: .· N  t` Eű   :%;` j-fZ7 `7 Z N)w F w < ;* ;BC ̋Ԥ DN7  5N 7 :w˷ &;R :;"; -Ĩ #x; -Ē  p: ̱w fm^p `7 X;wH R B 7 8N;4x;,;w"j(  ٝ 7 N%x; 7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . 00VDATADATADATADATADATADATADATADATADATADATA &f?  < .  8  " .$ B  8̥ZḀ90     ;,F?<ȁv?,8?;<ʆ<,f&" \)'&M'&&**%*%0 *&* t*5ND  D<  EU   rw bBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wD(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w :&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@   f d >5>Eu   w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# ,w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ z#( P) @@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 z0 @0 &*0 @ & & e# eB&B B  * v eBe>  # #D #=0/H#@&0 # = e00VUN0   @0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w 0eE D` bl lrw   B eE"s    s-  Cslw .BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  wP " f \&* *   f >5>Eu 4  Mw82e&( f0 0 0 80 B0 0 0 0)#0.&f& v f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e r %&$@A 55@558 eBeeeȵee&e e4   QB4w  w x& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &w j) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w00V"VTADATADATADATADATADATADATADATADATA C# "   D @)  6?0D)w < n832cd& & & B  2OΕ   N Υ$Ε  22Υ   Nv Ε f Je Z* e*w@)0,   ) )% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,  wL ` JwB # " f  `* w)0406 l0 8  **&|&  f&&  e#e|& f&&G& & & & && '&&w *8I 6*=)98 ( eB &&  U j**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* wxw *eB 8   w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w ~ f b&* d*82e&( 0 0 0 80 B0 0 0 0)#0. Mwd   f >5>Eu ,  w eE D` bl lrw x  B eE"s    s-  Csl|x,// Y &[q Y TITISYSYSYSYXRV+/XXl SLP -- Command file checksum is %P SLP -- *DIAG*-Error in command file %X checksum "a  abpd $ef  \5  X75-&  "P;.7&`¥¥¥ ¥¥ef  d w 'f `5 V?*& &&&5@)5:5@2 5 *  @@:.% E@` 5 q6.  55 .% % W ''R Ћ ķe^% l $-4.4% " 0%&50   `:-62~ ʶE ` .7 .$E  w & E DW!! * l `  !! A*  l!h  n F !%*" ~ d  ` w47w n )5   5 V Jf p *` 0e |55 ~hp5p 9.B ɋW W UB 7 : :.#E05*w UB :. Х U B B 5EeЕ  Е :. " ^ @AAŁ@<(lxPDC@@UE  E  &@AU@@U w H"-. 7 7  -ĥ/7 $ ĥ, %#ĥ;ĭIĥ ĥ 7 ~ x r    .  @. < 45  # ?5  z# / ܱE ` 5@ 855`# p` eB$&< fуw @pdf , бB$ĵ4ĵ!%'% %E$e@ P    e e  e & ĵ V 11@ Be w J?  :. P !> !   (  ` E  ,%:` j-fZ7 ~7 x N)w F w < 6:. :BC ̋Ԥ D(7 , 5( 7 w 6R" ,4": - # -   w fm^ ~7 X6wH p B 7 84,6w"DF  ٝ: 7 6(% 7 &fw  7 7 @,q `-KacJE[ !m@  ) L R  7 f@  &  5]U EF ::&@E A & ̆  E vE c  @  . &f^   x  8  " .$ `  00.V"VTADATADATADATADATADATADATADATADATAV̥ZḀ90     `TSYB`~AUg9BFgCMfCSf$TRfSQ fRS@fNSf87X SLP>Z&Ip 6 U u !!7!\!s!pdv NSYDBfSPg &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( f  e ee e f** aB h¥*W W c@ %w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  P aAAf@pnp "C*8֋ @88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ \ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp Τ5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *w x 8jDl@ أTeBT85l@ Ç@( D peB& r & @# 2& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@&f& v SY hAUg9BFgCMfCSf$TRfSQ fRS@fNSf%N%1R -- *DIAG* -Open failure correction input file %XOpen failure line listing file %XOpen failure source output file %XPremature EOF correction input file %XIllegal Get Command Line error codeI/O error command input fileIndirect file open failure%N%VAIndirect command syntax error%N%VAIndirect file depth exceeded%N%VAI/O error source output file %XI/O error line listing file %XIllegal switch or filespec%N%VAIllegal filename%N%VAIllegal device name%N%VACommand syntax error%N%VAPremature EOF command input fileI/O error correction input file %XIllegal directory%N%VAI/O error command output fileIllegal error/severity code %P %P %PLine number error%N%VA%D lines truncated by audit trail%N%1R -- *FATAL* -%2N%VA%N(;,!ȁ",!;8ʆ8,8!ȁ",!"/L!"/ "І!";ʄ/.".&P"/F".."Іh."+8`"+`"̆'&15ew * , Bv     5Bw2 006VV"VTADATADATADATADATADATADATADATADATAVγhb γVγ5pwLw@b7 TKB>$   @ %2>KWdp}8(ЬxhXбHgpzY  dDSYSYSYSYTICL<('TKB -- *FATAL*-Run aborted XNN  e , . 2 4 5 0 4 5  0  0 5~    w 5bC ŀ   Bl f50  -F <5.$  X 5 wVN wVPwd  $  f&f x7H nw77  `wh Xw\ 7,Z7,R  4     N@     $ $fE7 4`  8   5,5,   u$ \   1,1,J 1,1, &` e m 7B &6 e$$)d 5w b & \A 7@m7 *1 C7 pM  w"   7 / h *w  7w~ F `b TR efA   ^w8 l7,w*  x  z& &% N  V    2 T s ew    A |C  w CB * Z54w beC %E& 7 ,Bd  wddcAcAd 7A T&e Cm  &m`e` ` f`B` JN    (     `p f& `, ,, &  mV  B ce w eE D` bl lr  eE ,pJ`2 " &e# f (  & eB%e1be1^1\1H1J1L1N1P&&f t h e ew  E r A B` d7^pA wL w ~E p ( B ` p 7  A @ae  e?E? & f Y  |0 B ` |w f E @ jw`K`/| & D -N    `  0    B B  @`   B`x00FV`xL|`NLTxR \ t cL, xjx'ox'rx'u4 ` |$|~'h''$|`l383@ ,D34,P3 ,\3,h3 ,t3P,85t5t4JÐ4JĐ4JJSYxQSYySY^SY~xQSY_SYzjL_LB[1,1]SYCC@lDAlLB lcMPlSSlMAmDL`lSHNSPOCR@NMA WI NHDmPIlCOVLI VCPmDAlFP@lMMNPIlPRlSQNTRlXTNAClEA lHDmPM@lSL lMUlFUNROOALmCMlSEmIPWNMVCOVLI VSGWXHNIDNELVFMVCL VSBPFO@V<(Rt5b 6 we w |7 5 b$} e ˋ   ! " dwd w @pdf  B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e & ĵ V 11@ Be ~w *5 funhj uhdB$ 0jwaw< 8 v8w & 00NV"VTADATADATADATADATADATADATADATADATA Z*AdBbAep& f  . P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ *ŀajTI& af* n*`V @e,w Njjlj ɥ@@aujk,bp t5f fˇ ȕ `‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *6  w  8jDl@ TeBT85l@ T@( D ReB& t & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@&f& v  6( & 8P6 89 D3 P3 Pp8 PL9 \< \> \p> \7 h3 reeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &JA%?%2%%%LB[1,1]ODT.OBJODTID.OBJ`>@ w ]$,  wA b&&d3 3 %eB A  J\&%5bEU5 E5UT  Be H 3%s ]@@M@X7 7 &&$&! &&"e 5'U7\7^h&$PP `E@> $w  7w&4 P:N w$&4 be&ew B@P@P dbd7 ^  w,B &&&$v$ 55 &~%$ (b e5 | V&$7 B  xw4D$&`9  r ` ,\NL  < BAbpd Bfwh`  %/ -%/*%//$ `¥¥¥ ¥ ¥ef @U۱eE %&T%m    b   >,7 7 8 f |7 H %?l% 7 6 UU ^@7   tf ,wP  wh w^Ub THDڠw6w7e @ r7 5EE07 7 <هK w Xw      7 7 7  W,( 7 7 # D %* 7  7  .   %A B   X A J7Dއ  N ڇ && 9? LvePHHJ d 5@ T  wDT 2 ze5 H(b  ֆ9` &&5 b& >& P3 P"9 P3 \T5 \5 \5 \5 h3 h300VVl^SY7 %7 <e`'  @bp$$ 0 b (@ef7` ȥ;ȋ&'% % % % ¥:uu r v & W j e)&I#q-'eW '$0ef` ננe נ^נ  A5 ¥;U%E #w (w we) e)( r *e) e)) l  t* U% ¥;¥,Q d Xe)S#S- $ *I  $%QQ *& N&1 &f Je f  7" RRRAC`e R?j7f% ~' ܷ 'e`P  &,@ 3@8K@oMBaTq rt@,YeYxx@Y`Y5 D3 \T5 \7 \7 \7X[<$09AZ (),-*! ('('J(l('.(.(.(7 7 7 7 X7 x% P &%$& #&$$ :&B   r0%Iz'%%U^Z7 XO %J8D5M5IE   $ &ͥpͥ&Հ7 -A# ~ x( %3%2'եJ   H b#7 Ewͥ'Jn# %.wȋȥ;!&%  &9;5&H1H/H-HH)HH%u ' +w &W'(&W'  p''&  e)ȥ:2ȥ./ȥ[,ȥ<)ȥ/&W ! T & fAf J !.&dd,w& ȋȥ-ȥ)ȥ(ȥ* ȥ,  ȥ[ ȥ]  Z , p J A A N>,B &&5 b& &`90 p5@ w|l hrbf 6 %  e 2 $ ,8P6 $\T5 \5 \7 h31o?y`((|(((^)`(`()*R*% 0 77 5E% P &% L j @ ,% %!&@5h7H7L 5NW   C 78`7`& 5&@   2ܴ d ppp Ue t NAF  T 7rœEz'5U   5pppp f& fp5d& Np5Ufup 7w x ~< fwX2 5pppp u P wJ   z & .  D wwe@e |2 f5e  j5  D91 G@ dw e & Ne 5U `e5  ! 555U- r500^V"VTADATADATADATADATADATADATADATADATAZ5R 8u58 $uw8% *$) ] eE BEE R  v\T5 n\5++z+z+z+z+z+z+z+z+z++z+z+z+z+z+z+z+z+z+++++++++++++++(z+z+z+z+z+z+z+z++z++++z++++Z+b++Z+b++z+B+B+j+R++J+++++z+z+++z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+++++/+++z+z+z++++s%+&0pA&40}C&X0J&\0,M&0,s:O&z0/^ 2( Enter Options: TKB> @,AZ&w Z  5 ta.(R 7 H•! b& Ba mۀ  w^  f^ V  H ed7Ae R1΋ ,ۿ  ppU@pMx %e d >-  AF ߱ la   X݇w " vw  ln  r7"j7,d967EA3"3,'5@5E-V  #  B`  E   e3#3-  ڱw P&"P(V(T( &5 w & ڷ  H7w  h &  #% t D 00 01 <+ <+ <0 <0 H+ H1 H2 84 85 85 83 8^4 85 \T5 x\b7 p\7 h\\7 `\7 X\7 P\R7Sw  e wwׇ@$  "7$b7Z  e h?27. PAPАP 0wJ4$ww@ w^W# wׇTw 57 7 7 e EM M M Mwׇ e  ?\7X PPP 'z'eelA<  bppp< p0   ֿ   p H w.& wwև5 mwNLwFwD7 B- 4. .lw&7, 7,  U N&a nw&a Xw&a BUwU% W# wwwՇw:@ A @$5?75?3B B B @5 *`=% 55  5t7:78wxշ$շ"T@RwhW#wև5wT w$և6  AEBH(C C fՇ   AEBH(C C >ՇwwՇwwՇU% W# wwwԇ6wwՇХ[ 8¥,f (¥]U    ֱ& x¥. z n w#6W#w,ԇ1wBW#& W#Baw. ҇ ҇wW#W#wӇU&  ?7 PH p¥;m¥! ȥ;e' ¥=7e)b&t#t-e !'87  ȋ-ȥ;*E'  L ¥,¥! ¥;¥: 5 !a|   p'dw *&" PwV7PJ 00fVej1`  (e)wp+QQ &&$&&$+& &$% Be>w t,(7 Dw BAbpd 6fwh`  %/ -%/*%//$ `¥¥¥ ¥ ¥ef 4UԱ *'fB ++  5.U.5-'e&  z t@ ѥ  u N#N %7 mb҇ D3 zP3 r\< j\T5 b\5 Z\~5 R\9 Jh3? @`_?+Units set to maximum assigned---=5BF B w, H`e405*5& F5 \ =  w׷D׷BQ"  5`G5`+ 5T% "5ݻ++5ݻ++56Հ+Հ+ 7+27+.״ +̂m+ַb֮+^֬+ H555Ю+Ь+  & & 6d5@t-$5t- 5    c$A A+N ׇN65Z  5 5 %  5@5 B  f w2B sœ  vwth.w 5 5       ` `U@w< + Bw5|5++w 5T5 f 5Bw  +fwx    5 5Ь+ 5 +Ю+5 z4 $55 w w  w w w w pp5p5 5@U@p` p`|+ A ݜݎ ,5( zvӇE B B B B   + Œ55+ 7 E++w &fA< z7.& % ,4, %&f E U40, U 0,  5 g wihkh 5l ++ +  + Œдf00nV"VTADATADATADATADATADATADATADATADATAe  x+ Œ + ,( j7 R7 7 $7 B7 @7 H7 @7 H7 7 67 47 67 .7D7 7 r6 P ^ 75?. %A A A w > He & 5  5 5j5 @$ d.A h  L  AP  eA .   Հpp Zw \T5\"^""H*t*'ɪyN0tN sN0sN0 s, t ~, , ,3XRb*,,+w  n7| -x@ <5hH @ 5F v n5@6    Jw v  rw @e"Kr•@- Jr5;r5 5K5    ȵ d Re 5D'%B# -<5@0  év~he ` :5@ r 5 PH4 787 < 0 *PPh Vw  -D5J%Hȕ@@ @b \ @  07f ~?7wA  RwR ,7  z v  * `  7N7H & Uw ,&  " 7w  ^&  #%   7 7 7 7 Bfj& ~ 6vw7(e"eB$$$e((<Tw<L  w<B    0w<&$# z`  %W5@5 Of &F 6vwT7H7 *7<&5@   "  `     R f  77wv , 7% x0( H3^wFw w *e f6    fe ~54  91  N&n  &5EEEEE@E@EE &&fEE# %%2, %U2,  5 C & P &  7JV% J%,D7*%.?-~1n5X%e N l5Rrr   7 | xCœ5H5µ  (l 5) &5U5U5 EEw,, w,& m35Հ(n " 55 3l5 5-N ,h,be,5%ɪ%J';'%Jr;r%%uf6E% &%[q%( v w6w, 900vV:7 :70 dw\ 6Z   $%F  wE µs d ^n  wJf  55 5  B F' 7w p& L()t d .0 Հ% BH  .%8 .  wxf 27ܵ ߇w C57(5l  H ! & PPJ  ܇ xt rnf N`  "  r 3,5wR5w>55e5@2 5  5e w`55Հ m0 0  ,E L 5 Հ mx0 0  0 d V V ef z%4F e * 5PHtt vwN mَ  % fV D܁ 7 1 P5f] ܁w 6f . F  ! p` p ; p p  |5 -5@) N7 d  7 P &fR &B؄ww5- T%& F!5U     @ 7 @w eW! A T 5\5T5L5 x ,,ՈB  e&4e w  wFؔw wxe ff &w   w & f w<  R  & ff ,  N   ! U &f& v 1o :D3 2P3 *\< "\p> \T5"B"%%\&f"--\+ !!2"!J.//$/2" 7 \h&1h8 f  4  J57 7 $ 7  J  \0 h  07bf P?7wA   wl ,7p h ^ ZZ  * `  6727, & Uw & V  7w  6 &  #%   7 7 7 7 fj& ~ 6vwl`7\p(e"beB$$$e((*<8w<0  w<&    w< # L`  %W5@5 Of &F 6vw77 *7<&5@   p  `  D    R f 00~V"VTADATADATADATADATADATADATADATADATA 7wv  77 * Al .`  Xw $ F 7 2> 7 5 %5@f  t w  7 m@< (7 5~  few r  7w81 C ewBB1e? m e w jdwC 7` w  O  ` bE{Z &z3f7v67r& rM3  d$@e"    7&7"f "   w$&f& 7 E- - / ,- -  C` EP" , eB N  ^ `&fe l7|  ] j0 40 60  U]7 &  `     0n d@mhw f%bBmRH P @ m",B  `  |f~w"Q$w7     7 0%% h@   >B1  @   B<44  w` ,   D7 5W,W,sN5 5 j<wL x Beʵ *ʵ F5" 25v $ b-\f&F >B!FU@:& <@ >@"- < e 0 @>@K@0 N@w@7 < @ , ( % rj H>3wH@w @w8< e $f6  R>  fne 2 5  B91  |N&"  >&5EEEEE@E@EE &&fEE# %%2, %U2, 5 \ C & P &  *7% %,7߃l%p?- ^1n5X%e `N4 l5R<rr <  7 Cœ5H5µ  (l 5) &5U5U5 EEw,> w,8 mL35Հ(" " 55 3l5 5- ,,e5%ɪ%J';'%Jr;r%%uf6E% &%[q%( vD w6w* 9eeb 5@\ |Y-U5R5O5L5HjUB Z@R $ ۵ d T1Z   w r-jL 5@^   S J7L "5w5ww|ŀ7 nB-ی &f T bw:  ՀB 0 w 77w|7 |7r< w\ 6 T $%  w4E" µs d n  JwJfz H55 5 R lB *> X7.w0 H & L() d \p0 Հ%T   .%  | wxf 7ص< ۇw ZC57(5l  H ! & PPJ 00V55e5@ 5  25e w55Հ mn0 0  nE.  5F, Հ m0 0  0 d > Flef . %RF j e * 5PHtt w dmZ֎  %V fV ؁ 47 1 5f<] ؁w 6f . Z ! p` p ; Bp p  5 -5@) 7    7  &f . Ԅww5- %& !5U h@ \   >@ 7 dw *eW! A T 5555 nՈB :ޡ . &e&e <w  (ww we f &wxr 6߀  w *P& f w~ R  && ff l ,  ^ݖ N   !, U &f& v 1o D3 P3 \< \p> \T5:<VNTI VNSYVNSY[gNSY[hNSY?yOV\~TI\CL2VNCL@GdFH04CXbbbNPRTVXZ\^` ,3X s,w Zv 4  :D  (D  D   B U%@eA D `e U%l (%?%  D   ?j7f pedL 2  e hb7 5e@5` 5e5@e,e7   - 5v  eb5>5;F B5Q$BdBdBdwd&@mZ@d mT 705b@d@dET2D.W e75!5&5@e2e?E? E @`eE 7`  =P  eN  N  D   P  aU%5 % l%ddZ dC < 5bT@ e =  | 0=l 00V"VTADATADATADATADATADATADATADATADATA 85 j ^1 aa  H !  BPPPP *@e"A &b Z <A  pp0< @ dDe" >77%ɪ- K'wD-J'w8-;'w,-3&w -3&w-2&w-#&n <w & z  :7w  Z &  #% p 6 )PV")&y@G xCcbp,1z?y 5! ! ! H# z>2 rd$ jp% b\T5 Z\B PXR b?! w DCet BEA% p5f&"ŀ550 00 -J5 e$DCen h-5retn" 5\^5@T4 , 7r&e  7xf &e 5e w Hr Hb5@ wrDe rwx5De VDe H -n 4  TTT5 L5mZ55e5 Tdf  c 0e %w n7 l n 7^5Xp* 8 RB *54 2 5& 7 ,- m  V%  5 rL` 5Jm>(    ww@?  u~~@wCa 5HS@Cw^`a  l& A~m w fw` H 5*'Cw b a Z5b" 62H  .AB .5*ފ w~5~fe@ u߮  5 . tH T " 7޷ A~B& Kmހ&^ d  S& H Ee 7 &  7  5$  v   5&   w 5     w 7r ^ 7!5^ H 7!܇w  7 5b  CC T@w  w6w2( @ w5  & w 5   P V "uuf7 2@   A  lP $ & @@  -25  5A5 5~A5  : l55Ca XXJ  @  .55 B  @ uu|u~uw h`A  l f      b 77- v5`5`~ fAAAA R  8uuf L "w ww w J rr @A@A 2 2      @@ w3,@ (4`,3,-ڜ4,  4`, ew F l B\ ;w ]"]tU.5*5& w 8 75p w  7  &56 5 N5  5 05 7P`UZ5 UF E    45  5 5  7S5 5 H r-T  f xUA2 , ] ] %w-!] A  f@ $ . uft t5P 7S< 8 -Z׬  00VL22mF-f fm r` 3L F2lL 4F@5e&e5r& L 5 5D5D t /  @0 0 0  Zf&  73 3  77w( ( 33 43 t-`*h $& Հe33  3   RԀ H7F 55e  ( @ &< h 3 3 3 3 3  w @e L5 Cµ @@<5R5RµN~58"5 %Ncc 55  bdcc h  Jcc Tޖ @`!  @`A@  f  @e?  Be E0zӀ  0!   4 4дE @ @ @ 5& 55z2 jn% X% & ۂ "lmчfh >Xe"e    &f d  & pl5 5&% n&f5  Z&5 5plw plw X\T5!@@@  *(* ,.|!$T!f! d!h!\bR!"\ \V<t!:X!w!N!V!!^"r!j!l!hL!z! x! !X4!!&.d!0VL.n!p!!!!!5kw J,mMe m !D7zt`# J   2EA Y   \ e E   77Е     `D% |5mއmm5mޘmߚ|wRw F7 j 577Ebr! 0LP U U5U5xU5tU5` 0mp 7 m^7 l" f!  (0LP76m7,7 &7 5 5 5 m7mL!=R!  e>77`N `AW  %W V p emwe w`ze5` d5BemPT   :% ^!"d!5Um7 m   >5m !5  ܺݵ'\ b $ 5Xn(7 7 4 77 f Z5"&I 7 < X 0 D!"zet7  6 #^ Z7 7 $7 %00V"VTADATADATADATADATADATADATADATADATA7 ,CD5Efm Le  >ECf  &  e&A e   6 E'E@Ce5@8 % &%([qe   Ce- 5 7)  6ځ @e Re?E?  Ej  >e" b A @ m8ڡf w t 6  zt  w, h   ڇ P&!!4e6(# J l 7 @ 2 2 )2 2 -ج ؤe wۇ   j b\  ~  H7 :7 6P 2, .2`UE g  0&f  m   |!!4e6(#  $p!f&  )f` ! w \7 @7 > 7&!, .   27 7  4w & H5 aC|w  72 .ط ,aC`wv r xf`` ׷ b  R #f  ,&,!4e6(# d  %  U? a #  ! ` D4 P3 \A \A \T5év~ 1o rTw 5r{7  N7\5V,%T( -N5@B" er 6& e"n p `7 x7 7` &|  r 7 # e"A  x m   T @ H %T5F5>50 0* 7 5 eE@`   m7  ` bEw &P .#  xwzE B a $7 &  Z77 7 w F  m^777w " m5&ml   ~m7zl 7z5)m7blw mm 7Tm7:l 7:w   "$pl5b^mmw & F  7w  & &  #% |  w z 6  z  wL n   8 V&4e6(  l 7 @ 2 2 )2 2 - e w    |   h7 Z7 VP R, N2`U2E( g  6&f  m   |4e6( d $pf&  )`  w b7 `7 ^ 7F>" h , 87 *7 ( w & H5  aC|w  78 4 ,aC`w     R f  ,&$L4e6(   %  U? a    `7 7 7 7 fj& ~ 6vw7(e"e00V  R f  "75wv * N7 \A \A \T5-)4-())T.-))))**+&+V+(*-2***+B*++++++++++p,j,--$,0,^,*,w 7 7 '  5 r5 d5 ݷ N5 D R  t R R   7 >%% '5j \~'X lm7~' "W, W,s,4 %%  x #  nW, W,,  t l   j X [v܂` fw@5 :7 2mE  ~' ' w7  >&@A 0mڀep o g c & eZ & eP  M v E & e h% \"&ReHe?  eE  B B B P v7   f& be   T& Pe"5 5  &e  ۀ^  v& e7X &  @A mـe7(m w؁ mew)0 8   ' w d2 J J D,Db@T&~/ e H ۂ    J   ~ \w   1 A `A ~ & e "  %wL7[5G~' P  je v*  d@5m  p5@(  fA T@e j47 #  ~ E     sN  7 V P7 L F؆wm>:64ww"H؂` 4٦ ^ *  #A X55 5@ @@ mRւ 7t 7n n %1\%oVm N'   R  p` F6,,  %% L1Pe|-x =7:%  3 .ŀ+%~7~$%pw`l% ^7`%PR @ &D< e @ w 5bw`%pwBP 75R~'7f5`U`EQ 5Um   V  7E  ,y 55  " e55c p5@ ~'p eEp r frP   m 5245T, 5@" ~'p eEp rP rP  00V"VTADATADATADATADATADATADATADATADATA m D~' A e  `e -.  ' 55jD nD  ^5D  J5.e 8 e' "7257tp 5 7j H  5 77lw |e 7555ll5Rx &h eV7E dEn  r57 w8. Eb @5ZEVD :0%0%5e" .% m l R 5X7  e  U5@,%J%` m& m ؂eeA A ~'  ׇfE | @m5 @ @ @ 55~5"mp,>5 fE  B%  @a%:5& 75m A A A ,3X s,w 5-7 7 7 7 ' h7l 7&fEjEA @ 6A "$ &5 `eN F &8' lE R e 2Dm& e  * 8  Dm& R R  hw ' Hw' 8w~|5 Lf@& <' b'     2' 'PH   <PP' w Dm& ' z7fEjEhwA V LA "$ 5 ,,7lV VHP VH @me, w   R rT,` 'w'u u u u C eE P75 5 5 wn& e&b e & l  e hwE    f eA A* e5"5,$    &-P 7 PmVRPe &r mF  df w P B74, N5@2 #  ` E@ 7"7 5 &  zj  z5@  4whw Lne  00  w  5@), 500V# `  % W5@5 Of &F 6vw77 *7<&5@    r d`  V    R f  7Qwv F 7 \T5L b 5 mm  &&&  eJ   eBRRR R Rw $7  $Ýl3 XE` A "P5 $f dl *lp ` ^7 t$f &@ͥ 7 Zͥ  NՋ ->,7 7  3 t$-`4 :4 *ݡ  <ߊe 4 $=$"e< :5w \ dh -pZh4 T% w (Ee" 7,7(14 ;4$l zBl v-(55  m233    35m \> |\*:ODT xfr address: %P%NPRG xfr address: %P%NStack limits: %P %P %P %U.%NIdentification : %2R%NTask attributes: %VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%NTask address limits: %P %P%NTask Address limits: %P %P I-Space%N %P %P D-Space%NTotal task size : %T. Words%NTotal task size : %T. words, I-Space%N %T. words, D-Space%NPartition name : %2R%N%P %P %P %U. %VS%2R%N%P %P %P %U. I %VS%2R%N%P %P %P %U. D%2N%4N%X Overlay description:%2N---- --- ------%NBase Top Length%NTask UIC : [%O,%O]%NTask name : %2R%NTask priority : %M.%NMapped array area: %T. words%NTask extension : %T. words%NTotal address windows: %M.%NTask image size : %T. words%NTask image size : %T. words, I-Space%N %T. words, D-Space%NR-W disk blk limits: %P %P %P %U.%NR-O disk blk limits: %P %P %P %U.%N w    =3 ^ ) ") 00V"VTADATADATADATADATADATADATADATADATA*' ҝҝ) $|*  $ m@؊ vيh' rX%' dn%' R  (54Uwp = E5UB@@P+f/$A5R w= U% e U%  ' h$ 2+ $Y* $v T* $\ >8* r$5b'Z "~7 v7 t7 f7 d$ $''*  v* 5 -,2 -&,--$5 ''( '( ֊mx5  ֊mfZ( =( 5x4N 5B * Z5 (& + >' DwXmTZw TmHN  e  - x) ) ) 5 . w 6 $-*| " "    m %\\  5*.) & -*Ւ"    H) -AC,-AL,-CM,-CP,-DA, -EA,@-FP,-HD,-PI,@-PM,-PR,-SE, -SL,-TR,-MU,-ID,%N*** Root segment: %2R%3N*** Segment: %2R%3NR-O mem limits: %P %P %P %U.%NR-O mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NR/W mem limits: %P %P %P %U.%NR/W mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NDisk blk limits: %P %P %P %U.%NDisk blk limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%N%2NMemory allocation synopsis:%2NSection%44STitle Ident File%N-------%44S----- ----- ----%N%2R:(%VA%VA%VA%VA%VA%VA %P %P %U.%N%30S%P %P %U. %2R %2R %X%N%3NGlobal symbols:%2N%F) w &-d '-.'Pڶ 65-\("   5|( x~"   z -p-VXDJ' V5 ( (. < 5O"@I5J@J@   e ` (5B# 5J@J@   e ` ( !) C) c) l5e&e5c&  [ $ ,4 w w 5mx7  )7 x e (  rB x40( w R.J p5RaU%U% %$$ ) )w F $$; 5 5  mRmp bp5   )  w p7 ,s&-) e" b'' U  mN''$   <  (   f  H w Z |a 7  R  RO,RW,D,I,@GBL,LCL, REL,ABS,OVR,CON,SAV,$$$,%2NFile: %X Title: %2R Ident: %2R%N <%2R>: %P %P %P %U.%N >>>>>>>>>>>> Undefined reference: %2R%2N%7S)^()`)`)`)&)(((((()(f)w 5w J < . h  '' H 'B J X ( e <'w e"  f - Z  ' 5%܂` &   p`  7 e" ' 00V ' $   L$~&|&  f&&  e#e|& f&&G& & & & && '&&%%&&&&&%%%%%%&%%w ^ *  F  8%$ & $B  6 F% :` &77ww-l $RRB GD ŵŵ ŵ m*޷R &mwHŵ 7 ŀ07  m -\ݬ 7$  7 dܰp ` t$  5 `n$w N5@b5@V$PHPJPLPNPPPVPXPZP\P^5eН@ E@@3T D# 7P& E@` R 6'  $ 45 & w  5 j 89f"e\e!e ( 5f \2* eA  D3 ~P3 v\>sN 1o  ,  s, ,BJRZb  3X    s, wW!! !!!w  # n` (7b550~5t-lU fU^@ TT *  e" v5m47 \55-1 D b 45 5!-TTR5 ԕT -  d    50Z-P , -@  V b Cet< rA  1,1, 5m 5 | %H !B (@e nw7 Det= (+&  + w      e` ,wnw (JC*TEoU`5 TT  ""  , X<   ""w->3XJB a >&! - "  4pSA {RJ33m3 3d < 4 , @5\ e4  e&&  &   #wX   3 3 4@ 5 2w6  5 555  ~@e"4 t4- 8   7, erA  ",œԕ5   mE %  L5 5 D *555 Ur00V"VTADATADATADATADATADATADATADATADATAA TTԕ@ԕ f  B 7Tb \ *" 4 w 7:76 @w,v  $ I wB  7       7       ~7vW!i g bB w 8@   w @ 55 *@a \@@a R $ & . @  0w> ,w6      w6` "eP PPЕ %L !B zp " ` `w e  00  ^r&  @ p`    &      7  7^& e P=wD   w( &     m f Bw( -& & me > @l55 m  @  w z& . p 7w   &  #% <  . $   * `  d77 & U7 7 7 7 fj& ~ T6vw7(e"eB$$$e((޷<Tw<L  w<B    0w<&$# `  j %W5@5 Of &F 6vw(77 *7<&5@    & `   ~  R f  b77wv , 7 \> \T5RO)(3RW((3SV)(3SW((3*(B .++  &• H   ; w;! ,:/:& u@5e, R OW w5& & ),#!#[ ] / : # #  \#f ,(H: @ 55 ,.@ (; $!3ȕf  5!5!U,5U,3ȕf  5@ 00Vȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e r %&$@A 55@558 eBeeeȵee&e e4   QB4w V w L& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &w *8I 0*=)98 Z eB &&  U L**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w" 8 !Հ)w*w**8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( ׀0 0 0 80 B0 0 0 0)#0.)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) ^&f (  e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w FU8UMwR w0,0, f 톇,, w N     .% eB U5UU plp & NeՀ)*00V"VTADATADATADATADATADATADATADATADATA w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# (w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ v#( P) <@#**fff  &*wp. tB5(8e$8w2A&(e 64p8q  (#4=A#@)( t *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 D0 @0 &*0 @ X& & te# eB&B B : *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w *(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  X1 >w x*eB 8  w N*D   wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wZ141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( π0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416  . T  ,*1 ,U8UMwF w NB 00fep=& /e`pwv46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6 %2R %P%2A -R%F%X Memory allocation map TKB %2R Page %M%N%2R%15S%Y %2Z%4N%4N************%2NUndefined references: %2N %2R%N %2RTotal task size: %M. words%N%4N*** Task builder statistics:%2N%4STotal work file references: %T.%N%4SWork file reads: %T.%N%4SWork file writes: %T.%N%4SSize of core pool: %M. words (%M. pages)%N%4SSize of work file: %M. words (%M. pages)%2N%4SElapsed time:%3Z%N%Nf  сeE  ,*( e(  eRRR 6ئv2 pbeBeRRRRR R R  X&5@e "ppple5let · p34e6(3 H xH  · H p34e6(3 " ,䇷  ·7 w e·)w 7  I χ AZ    :ȥ: L8R8ȋ+& ȥ+ȥ-  U  f 00V*60\ghp w ` ť ť 0B Aaw .܄(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA zEAa$ & & @( Rf  e ee e w fD&& bЕ- eaeyPPPЕ-$w 6D  &Е. ce  Е:   vBw ' UD$BA &( U BQ nЕ* w && D¥%  B&ХVA C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf z & e\6& eH/& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA l Е A EA EЕ A 8A   $Е.  AЕ; L    w ) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w C# T   D @)  6?0D)w * ) R* w46l0w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   <v Ε f de * e*w@)0, R   Z) b)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,   0wL z JwvB #  f  `* w)0406 l0 w  0,0w b w f$0,0w <46 F f)0406 0 * 5 ߥ& *  + 23E Ew .҅   Е-   0@A W e`fÊ    E &   `@ ` B   & A @    **0,0, f 톇,, w $     .% n eB U5UU  plp & NeՀ)*=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  j**=D  `p46 f @64/=  R@) 0  8w 046 8 e*w > =00l&8el2 0 *e6p 4 28  81416  l  F  8   *  4 6 .e6p 4&* R..8em,0l0!D0e6p 4.) &f   Ve) .  e6p 4 08*w0+1(e  @%&p*00V"VTADATADATADATADATADATADATADATADATAw~ f( f)f Z8Ae f"( UCɗ&+(e$&% 141612epl2l0pw < )  fU %  BA `6p 4p`4 %60 446f %8 E D/D!D l0l8epl0pɥ.ɕ w)"(. = . B  E p <(.,*1 VU8UMw w B 00fep=& /e`pw8e2 w   lw eB$&w eB  8 R$&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  p<  EU   w (ww ww | ww nBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w"   f  >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w | /$ ,:T < U@% DD%][%><w  w$1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    d*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ **0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w :&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@00V7\7w77778H8{8888"9W99999:=:a:~::::;2;U;};;;;:>f>> -- *DIAG*- -- *FATAL*-  DC!n   ` ~ F 4 45!75 3l &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( f  e ee e ހ= ތ>Illegal Get Command Line error code%2NCommand syntax error%2N%VA%2NRequired input file missing%2NIllegal switch%2N%VA%2NNo dynamic storage available%2NIllegal error-severity code %P %P %P%2NCommand I/O error%2NIndirect file open failure%2N%VA%2NIndirect command syntax error%2N%VA%2NIndirect file depth exceeded%2N%VA%2NI/O error on input file %X%2NOpen failure on file %X%2NSearch stack overflow on segment %2R%2NPass control stack overflow at segment %2R%2NFile %X has illegal format%2NModule %2R ambiguously defines P-section %2R%2NModule %2R multiply defines P-section %2R%2NModule %2R multiply defines xfr addr in seg %2R%2NModule %2R illegally defines xfr addr %2R %P%2NP-section %2R has overflowed%2NModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2R%2NInsufficient APRs available to map read-only root%2NSegment %2R has address overflow: allocation deleted%2NAllocation failure on file %X%2NI/O error on output file %X%2NLoad addr out of range in module %2R%2NTruncation error in module %2R%2N%D undefined symbols segment %2R%2NInvalid keyword identifier%2N%VA%2NOption syntax error%2N%VA%2NToo many parameters%2N%VA%2NIllegal multiple parameter sets%2N%VA%2NInsufficient parameters%2N%VA%2NTask has illegal memory limits%2NOverlay directive has no operands%2N%VA%2NIllegal overlay directive%2N%VA%2NOverlay directive syntax error%2N%VA%2NRoot segment is multiply defined%2N%VA%2NLabel or name is multiply defined%2N%VA%2NNo root segment specified%2NBlank P-section name is illegal%2N%VA%2NIllegal P-section/segment attribute%2N%VA%2NIllegal overlay description operator%2N%VA%2NToo many nested .ROOT/.FCTR directives%2N%VA%2NToo many parentheses levels%2N%VA%2NUnbalanced parentheses%2N%VA%2NIllegal logical unit number%2N%VA%2NIllegal number of logical units%2N%VA%2NIllegal default priority specified%2N%VA%2NIllegal ODT or task vector size%2NIllegal filename%2N%VA%2NIllegal device/volume%2N%VA%2NLookup failure on file %X%2NIllegal directory%2N%VA%2NIncompatable reference to library P-section %2R%2NIllegal reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%N%VARequired partition not specified%2NInvalid APR reservation%N%VAComplex relocation error-divide by zero module %2R%2NWork file I/O error%2NLookup failure on system library file%2NUnable to open work file%2NNo virtual memory storage available%2NModule %2R not in library%2NIncorrect library module specification%N%VA%2NLibrary file %X has incorrect format%2NResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask build aborted v00VWTADATADATADATADATADATADATADATADATAia request%2N%VA%2NDisk image core allocation too large%2N%VA%2NInvalid window block specification%2N%VA%2NTask requires too many window blocks%2NTask has illegal physical memory limits%N%P %P %P%2NLibrary references overlaid library%2N%VA%2NTask image file %X is non-contiguous%2NVirtual section has illegal address limits%2N%VA%2NFile %X attempted to store data in virtual section%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NEnd of file reached before .END in %X%2NSymbol %2R not found for patch %2NSegment %2R not found for patch %2NSupervisor mode completion routine is undefined %2NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NIllegal system size specified %2NConflicting base addresses in cluster library %2NLibrary %2R not found in any cluster%2NIllegal cluster configuration %2NCluster library element %2R does not have null root%2NModule %2R contains incompatible autoload vectors%2NCluster library element %2R is not resident overlaid%2NSegment not found to address round%2N%VA%2NLibrary build not requested - ignoring option%2N%VA%2NIncompatible OTS module%2Ne"6JRJ w +$7! -bw "&f e"4J %w82 e"6JRJ w ޺ECF0J e-- z$ ' ĺ -:7",a(Q$ H"7`&ww A Rá D |~,??Y Y &[q Y 2x TITISYSYTICLWKOVVγxbn γVγ5pww00W #   @ %2>KWdp}8(ЬxhXбHgpzY  %bvDSYSYSYSYTICLLD$TKB -- *FATAL*-Run aborted XN^. e 5 5   5~   w  5bC ŀ B| f50  -F <5.$ r 5 wV^ wVPwd *   f&f 7H w77  `wh w\ 7,Z7,R  D   ^@    ~ $ $fE7 4` H  5,5,  " u$ \   1,1,J 1,1, &` e m 7B &6 e$$)d 5w & lA 7@m7 *1 C7 pM $ w"   7 /  *w p L7w~  X`b TR efA   ^w8 7,w* ~   z& &% N  V    2 T s zew ~   A |C  w CB  Z54w reC %E& 7 ,Bd | wddcAcAd 7A &e Cm  &m`e` ` f`B` JN    (     `p f& `, ,, &  mV  BB ce " &e#r X  (  & eB%e1be1^1\1H1J1L1N1P&&f t h eFB e:w  E  A B` 7pA wL &w 6E p  B ` p 7~A @ae n fe?E? & f Y :  40 B ` w lf lE @ jw`PK`/ & D -N  x  `      B B  @`   B` * J   v  m ` @ f& &('&1 D<2# <<& 4Tl' ,xx% $  X * , t >3 ~4 84 ,4 > >5ew &, Bv     5Bw|  00WWTADATADATADATADATADATADATADATADATA5  5 2  UE  $ ,"E U 5@*& E& & f&ËDef Ë )̋U&ff &f  $0 $x <$"0H"pT0x $H` $Hl $HT ",0<$(x((x,(x0$ $<$$0=(L(|,NR0 \0 t c\ j'o' r'u( 8t{ #PD,h~p(h8Pp(8\p(8D #,8(t434343x4355>>>H?$ |($SYxQSYySY^SY~xQSY_SYzjL_LB[1,1]SY,CC@DALB MPSSMADL`SH^SP_CR@^MAWI ^HDPICOfLI fCPDAFP@MM^!PIPRSQ^TRXT^'ACEA HDPM@SL MUFU^RO_ALCMSEIPgNMfCOfLI fSGgXH^ID^ELfFMfCL fSB`FO@f L828DV5b  we w x7 b5 b$$ e ˋ   $! " wd w @pdf  :B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e f& ĵ V 11@ Be 6w &5 funhj uhdB$ 0jwaw< 8 v8w &  0*AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w Jjjlj ɥ@@aujk,bp Z5f fˇ ȕ ~‡ 00W ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ H<R% @H# 858,X $L<HH?A"?"2###LB[1,1]ODT.OBJODTID.OBJl@ w ],  wA BbH&,#d3 3 "eB A P J\2#%5bEU5 E5UzH  Be H *3"s ]@@M4X7 7 &&$&! &&"e 5'U7\7^~&$.PP `E@2 w  7w4 P:N w$&4 be&ew B@P@P * 2dbd7 ^  w,B &&&$j$ b55 #~#$ (b e5 J& $7 6 f xw(8$&`9  B ` ,\NL 0 x BAbpd ~fwh`  %/ -%/*%//$d`¥¥¥ ¥ ¥ef 4UޱeE L"&8"m    b   2 7 7 ~8 f 7 H "?l% 7 6| UU ^@v7   hf wP  w\ wRUV T<8ݠw*w7e @ f7 5EE $7 7 L܇K w w      7 7 7  W,( 7 7 # | %* 7  7  f   %A ~ d X 4A J7Dއ 4dN ݇ \&& 9? F jePHHJ  5@ Hd w8H n ne5 b  ֆ9` &&5 b& & L5 D5 <5 4>3 ,t3 $3 3 `5uuuu w @ " &w*"Aq#q- T% `J$ xlB$֯J&1R_&}&߱`&'$3$ TKB>l^SY7 "7 0e`*$  @bp$$0 b d@ef7` ȥ;ȋB$% % % % ¥:uu j n & W e) $I#q-'eW *$$0ef` ננe 00WWTADATADATADATADATADATADATADATADATAנ^נ  A5 ¥;U%E #w (w we) e)( r 'e) e)) l  ' U% ¥;¥,Q \ Pe)S#S- $ *I  %QQ *& N&1 &f JRe f  7" RRR.AC`e R?j7f% ~' ߷ , ~*$e`P  &,@ 3@8K@oMBaTq rt@,YeYxx@Y`Y5 |>3 t5 l5 d5X[<$09AZ (),-*! %$,%$f%%$J%J%J%7 7 7 7 X7 l" P 8#"@# ##$$ :$B   r0"Iz4$%"U^Z7 XO "J8D5~M5vIxE   $ 8#ͥpͥ&Հ7 -A# ~ x( "3%2$եJ   H V#7 Ewͥ$Jn# ".wȋȥ;!#% <#9;5$H1H/H-HH)HH%u)$ +w 8#W/$D#W/$  p/$ $&  e)ȥ:2ȥ./ȥ[,ȥ<)ȥ/&W ! T & fAf J !J#dd,w& ȋȥ-ȥ)ȥ(ȥ* ȥ,  ȥ[ ȥ]  Z , p J LA A PN>,B &&5 b& r&`90 p5@ vwp \fbf 6 %d e 2  5 >3 t3 581o?y|%%%%%z&|%|%&'n'" 0 77 5E" P 8#"  ^ " %!8#@5h7H7L 5N~W   C 7,`7T$ 5 $4 > &ߴ d Lppp~ Ue h BAV  x P7fœEz,$5U   ~5pppp f& fp5X& Np5Ufup 7w  x < fwX2 5pppp u D w> z & " t zwwe@e p2 |f5e  ^5  D91 G@ ^ w e & Ne 5U Te5  ! 555U-f5N5F 8u5, $uw8% *$) "] eE BEE  >3 3(((((((((((((((((((((((((((((((((((%(((((((((((((((((v(~((v(~(((^(^((n((f(((((((((((((((((((((((((((((,(((((((((s"(+jLp #(+[q%#>+[qjL#(+zjL#"+[qz#"+!#T+t^"#p+:d&#+f,#*,yx.#>,[q1#F,|s00&W @,Av#w  5 haJ%F 7 <•! b& 6a mހ  w^  fR \ < *ed7Ae F1΋ ޿  FppU@pMl %e X 2-  AV j`a >d Lw Z vw P lb  r7"^7,X9F7EA3"3,'5@5E-V  #  B`  E   e3#3-  ݱw &2l%r%p% &5 w L& |ݷ  7w  ^&  #% t  f- ^. V ) N) F:- >- 6) ./ &/ 4 F5 N5 ^3 3 >5 >3 L5 5 F5 5 x5 <5Sw $ e wwڇ@$  "7$b7Z  e h?&7" PAPАP 0wJww@ wW# wڇTw 57 7 7 e EM M M Mwڇ: e  ?P7L PPP % %eeAL  bpppL p   ٿ   p w\& wwه5 mwNLwFwD7 B* 4. .lw&7, 7,  JU B&a w&a w&a ~UwU% W# www؇w:n@ A @$5?75?3B B B @5 *T=% 5|5  5t7.7,wlططT@RwhW#wه5wT wه  AEBd%C C Z؇  AEBd%C C 2؇ww؇ww؇U% W# wwwׇ6ww؇Х[ 8¥,f (¥]U  d ٱ& x¥. z n w#6W#w ׇ1wBW#& W#Baw. Շ ՇwW#W#wևUf^&  ?7 PH p¥;m¥! ȥ;e% ¥=7e)~#t#t-e !%87  ȋ-ȥ;*E%  L ¥,¥! ¥;¥: 5 !zap Td d%dw b&" wV7PJ fe& 2;/!,,:0 , ' R , : b :H% 4 :  5%dw 3 L5 5 5 5 <5LB[1,1]LB[1,1]++-+U,  8e 7( B5.5&GSYBe ~(eB e  yRB,5, D0 %Cwt7 D.& C! U@5    w: D# T  Dw" % Ced5(   p  c5bUU@5U5U@5 U hU @ @E @ @ @ 7TQ$@00.WWTADATADATADATADATADATADATADATADATAP  5U@  e)(555V5u u C55a 5a   w%A7 7 ~G(A5U@5@$5 X 5PA=LB Be@E?B B B@$5  =CJ #w6AW wvUn\DAmw:A w ww`:Xu-5ej1` (e)wp(QQ &$&&$(& &$% Be>w tH%7 8w BAbpd rfwh`  %/ -%/*%//$d`¥¥¥ ¥ ¥ef (Uױ *%fB ((  5.U.5-%e&  J D@ ѥ  u N#N %7 mbՇ & & @( |f  e ee e &f& v  5 ~>3 vn3 nh3&  m  f A N  % $? @`_?(Units set to maximum assigned***=56:0m&  %& V U- 1( NB w, H`e405*5& F5 P =  wڷ8ڷ6Q2  5TG5`+ 5T%"5((5((5*Հ(Հ( 7(&7("ڴ (̂m(ٷV(R( H555((  & & Fd5@t*$5t* 5    c$A A(N ׇN65N  5 5 %  5@5 B  f w2B sœ  vwt+w 5 5       ` `U@w< ( Bw5p5((w 5H5 f 5Bw  (fwx    5 5( 5 ((5 z4 $55 w w  w w w w pp5d5 5@U@p` p`|) A ݜݎ ,5( zvևE B B B B   ( Œ55( 7 E((w D&fA< 7.& % ,4, %&f E U40, U 0,  5 g wihkx 5l (( (  ( Œfe  x( Œ ( H% j7 F7 7 7 B7 @7 <7 47 <7 7 *7 (7 *7 "7D 7 *7 F P R L75?" %A A A w N He  5  5 5^5 @$ d.A x  L  AP  eA "   Հpp Zw >3(!!B"L))B'ɪyN0tN sN0sN0 s, t ~, , ,3X0*l+l+ +w  7| -0 <5  j5N vr n5@ h L ` Jw r T Dw @e"FKr•@- Jr5;r5vr 5K5 R006W% x0( H3ww w e Nf6    fe \ 65  l91 B 2N&  &5EEEEE@E@EE &&fEE# %%2, %U2, 5  C & P &  7JV% J%,D7*%.?-61~5h%e N l5Rrr   7 | xCœ5H5µ  (l 5) D&5U5U5 EEw,, w,& mv35Հ( " 55 3l5 5- ,h,be5%ɪ%J';'%Jr;r%%ufFE% &%[q%( v w6w 9eeb 5@,\ Y-U5R5O5L5HUB Z@`| ߵ d 1   w 0-(v 5@   S 7 5w5ww|ŀ7 $B- &f  bw: Հ|B 0 @ w 7TH7Fw>::7 :70 w\ 6  L $% X DwE µs d n  wJf H 55 5 | "B &h 7XwZ & L()B, d .0 Հ%   .% > F 2 wxf v7ܵ ߇w C57(5l * H ! & B PPJ  ݇ xt rnf .`  "  00>WWTADATADATADATADATADATADATADATADATA3,5wR5w>55e5@ 5  \5e w`55Հ m0 0  ,E  5V Հ m00 0  0 d  V ef X 2%|V e : 5PHtt .w mڎ  % fV ܁ ^7 1 5Df] ܁w 6f .  ! p` p ; lp p  |5 -5@)> 7 d  7 P Z&f j؄ww5- T%& F!5U     @ 7 @w eW! A T 5\5T5L5 x p,ՈB X e&e fw  Rwؔw bwxe f &w   w z& f w< H R  P& ff " ,   N   ! U &f& v 1o l>3$ H<h!!&%(%%!->-*@ l !,!-..|.! 7 \ ~0h8 f d 4 X t5P7 h7 $6 7 X J  0 h  07f 0?7wA J  @w^H@ ,7p h ^ Z  * `  727, & Uw &   Z7w  z &  #%  V 7 7 7 7 Hfj& ~ 6vw$7p(e"eB$$$e((<8w<0  w<&    w< # `  %W5@5 Of &F H6vwZ7N7 *7<&5@   ( 8 "`   <  R f  7wv  7 C & P &  7% %,7@l%p?-1~5h%e N4 l5Rrr   L7 Cœ5H5µ  (l 5) &5U5U5 EEw,> w,8 m35Հ(z " 55 3l5 5- ,,er5%ɪ%J';'%Jr;r%%ufFE% &%[q%( vD w6wr* 9eeb 5@\ 4Y-@ܒU5R5O5L5H"UB Z@ h Zܵ d T1   w r-j 5@   S J7L f5w5ww|ŀ7ZT B-D &f   bw:  ^ՀB 0 Dw 77w|7 |7r w\ 6 T $% ` w4E" µs d n @ wJf2 55 5  B T* 7w B& L() d p0 Հ%T   .%~ t wxf^ 7Nٵ H܇w VC57(5l * H ! &L VPPJ@  4ڇ xt rnf @`  "  D 3,5wR5w>55e5@x 5  5e w55Հ m&0 0  nE.  5F Հ m0 0  0 d $ef %z V " Re : 5PHtt w m׎  % fV ف 7 1 5f] ^فw 6f .   ! p` p ; p p  5 -5@) 7    7  &f r Մww5- %& !5UH  \   @ 7 dw &eW! A T 55500NWWTADATADATADATADATADATADATADATADATA5 nՈB ~ޡ  je&ze w  ww wBe f &w0* z߀  w &<& f w~ R  & ff ,  ݖ N   !, U &f& v 1o >3&  m  f A N  %$ Hp<VNTI VNSYVNSY[gNSY[hNSY?yOV\~TI\CL2VNCL@GtVX@DChb   ,3X s,w bZ nL ` jD N XD < FD `  B U%@eA D `e U% (%?%`  D LH  ?"7 (e B  e b7 5e@5` 5e5@e,e7p   - 5v jH Be^>*b5h>5;V B5Q$BdBdBdw&@m@d m 75@d@dE W e75!55@e2e?E? E @`eE 7`d  =  e    D   P  aU%5 D% $% C l 5bTXe =  | =l 85 "  1 aa * H !  BPPPP *@e"A ^ & $LA  pp0L \ @ dDe"& >77%ɪ- K'wD-J'w8-;'w,-3&w -3&w-2&w-#&n w & 2  ~7w  &  #% p z )Pf")&y@G xCcbp,00VW3&  m  f A N  % 0 0 `hb r? `w `>DCet BEA% |5f&"ŀ550 00 -5 eDCen h-5e! 55@ 8 7r&ep  7xf &ep 5vej w  T5@R wrDep rwx5(Dej VDep H2 - 4  TTT5 L5m55e5 Ldf " c 0e ( %w 27 l  7^5X0* RB 65@4 $2 5&& 7 , m  V%  5 jL`< 5m    ww@?  u~~@w` Ca 5^HS@Cw6a  l& A~m< w w H 5*'Cwa Z5" FH  AB 5 w5~fe@ u߮ 2 5 . tX T " $7 ߷ A~B& Km.߀& d  S& X Ee 7 b& f 7  5  v  x 5&   w6 5V     w 7 ^ 7ܘ z5 H 7ܘ f݇w  7 5p ^ CC @w  w6w2` @ wV5| H & w> 5   P V "uuf7 2@   A  x 0 & @@  -`ܲ5  5A5 5~A5  : l55Ca XXJ  @  .55 B  @ uu|u~uw A  x f      b 77-<ێ v5`5`~ fAAAA R  8uuf L "w ww w J rr @A@A 2 2 <     @@ w3<@ (4`<3<-r4<"  4`< ew  N ;w . ]8"]U.5$*5& w D 75 w  7 Z &5@ 5 N5 < 5 05 7P`UZ5h UF E    45@@  5 5 < 7S5 5 H -  @UA2 8 ] ] %w-!] A  f@ $ . uft t5\P@ 7S< 8 J-,  > UA2 ] ] %w-!] A  X@ |  ut t :  w N4 7 n 5\ w \3 <AA L5  U e   -xp   U V -LD    "5  V V KR R D  5t eE  Wt Fp >\22mV-< fBm r` 3\00^WWTADATADATADATADATADATADATADATADATA V2l\ 4V@5 e&e&5& X 5 55 t.  @0 0 0  ff& X 7L3 3 . 7&7Rw( ( 33 43 t-*x p$& Հe33  3   RԀ H7F 55e>  ( @ &L  3 3 3 3 3  w @e& L5 Cµ @@<55µN~5"5 %Ncc 55  bdcc t  Jcc `ޖ @`!  @`A@  f  @e?  Be E0Ӏ  0    4 ^4E @ @ @ 5 55 2 2~% h% & ۂ "lmp҇f Je"e &   &f p  & pl5 5&% z&f5  f&5 5plw plw R>3!@@@  :,(.*0,&. !$    lr "l lf<!: !^! !n2!  x  ! ! !hD! !6 > @f> !"!!!!5dkw <mMe m !D7`# J   EA Y r  h e ~E  7B7<Е     `$ D5mPP߇mDmZ5tm0ߘmFw^w 7 2 5Nb77Eb!0 0LP .U U5 U5U5U5 m 7 m7 |" f! V 0LP76`m7,7 &7 5 x5p, 5Z *mj7"m\ =  4 e>77`^ `AW  %W V  zemwe w`ze5` d5emTn   %   5Udm"7 mn   ><:5@,m" !5   ݺ޵'l r $ 5nf(7 7 4` 7xܒ7 f Z5I` Ph7 < X 0 x "Be<7  6 <#8& "7 (7 #7 %@7 CD5Efm Le  NECf  &  e&A e   F E'E@Ce5@8 % &%([qe   Ce-\ d5P &72) ځ @e Re?E?  E  >e"  A &@ mڡf w 8 6    w, 0   2ۇ &*!"!00fW |7&*!J,   7 7   Dw & H5 aC|w  7 ط ,LaC`wv r xf``t pط b  PR *#f  ,&,&!4e6(0# t  %  U? a *#  *! ` >3 \év~ 1o w 5*{7  7\5V,% ( n-5@ ^e & De" pV 7 x7 7` &  r 7 #` e"A r  mP    @ H % 5F5>50 0* 7 5eE@`    m|7z vH (` Exw " .P#  xwz*E B a 7 T&  77 7 w  m777w m5ml   ~m7zl 7z5)m7blw |mHm 7Tm7:l 7:w R   "$($5>mmw &   J7w  j &  #% | F w v 6  82  wL n   8p V&8 4e6(  l 7 @ 2 22 6)2 $2 .- e w$   ( |   h7 Z7 VP R< NB`U2E( g  6&f  m   | 4e6(  $p f&  )` ^  w ^7 `7 ^ 7F > " h , *7 *7 (JD w & H5@ aC|w  7 ,aC`w     R f  ,&ZL4e6(   %  U? a     `7 7 7 7 fj& ~ X6vwj^7Z(e"`eB$$$e(((<Rw<J  w<@    .w<$"# `  % W5@5 Of &F 6vw77 *7<&5@   n R D`  B    R f  f75wv * 7& f w` R  & ff ,  N   ! U   * `  77 & U ' P' ,' >3&  m  f A N  %\ $H.-P),0()P)-.-V)p)v))))***).-)(*:* +)4+8+6+T+Z+B+P+H+<+>+++.-.-++++w x7 7 ,'  >5 r5 d5 ݷ N5 D    " " \  7 %% >'5(j ,'X lm7' "W, W,s,4 %%  x p #  nW, W,,  R t <   : ( [܂` w@5H 7 mE  ' L' w7 &@A 0m ۀep o g c & eZ & eP  M v E & e % \"&ReHe?  eE  B B B P F7   f& 2e   T& ef!5 5  &xe  x܀^  v& e7X &  @A mـe7(m8 zBG:ف mxew\)0    n' w d2 J J D,Db@T&/ e H ۂ  &  J   ~ \w   j ,1 A `A ~ & e ~"  %wL7+5H' P  je 0v  x@5m  j5@(  fA @e j47 b \#  N E  |  r sN  7 & 7  ؆wm ww"؂` ٦ ^ *  #A l55 5@ @@ mւ 7t 7n n %1\%oVmN'    f  p` F,,  %% LV1eL-H =7:%  3 .ŀ+%~7~$%pw`l% ^7`%PR @ &D< he @ w 5bw`%wB 75b'7f5`U`nEQ 5Um    7E  , D' A e  0e -&.  ' 55D nD  ^5  J5e 8 eJ' 7257atp 5j 7   5 77lw e 7555lnjlb^5xh &h eV7E dE(n  B5x7O w00vW  z5@ P w,w H&e&  00  bw 5@P) 5<&e  00 x   d e d x5@ 5 R dP" | ~P 7R7 D7 Bw R 2.mj777w . m 52m*l   ~m&7l 75)m7lw mm 7m7l 7w   vxmjvmfr  ߔ $ $ * `  7h7b & Uw F& 00~WWTADATADATADATADATADATADATADATADATA < l7w  &  #%  h 7 7 7 7 Zfj& ~ $6vw6*7&(e",eB$$$e((<nw<f  w<\    Jw<@># `  %W5@5 Of &F Z6vwl7`7 *7<&5@   : 6 (`    N  R f  27Qwv F 7 & f w| R  & ff ,  N   !* U f** aB ¥*W W c@ % 8>' 8& 8r' 8' DX/ D$, P* \) h% >3 $H%2R %P%2A -R%F%X Memory allocation map TKB %2R Page %M%N%2R%15S%Y %2Z%4N%4N************%2NUndefined references: %2N %2R%N %2RTotal task size: %M. words%N%4N*** Task builder statistics:%2N%4STotal work file references: %T.%N%4SWork file reads: %T.%N%4SWork file writes: %T.%N%4SSize of core pool: %M. words (%M. pages)%N%4SSize of work file: %M. words (%M. pages)%2N%4SElapsed time:%3Z%N%NL b 5 m m  &&&  eJ   eBRRR R Rw 8F$#7 <  $#Ý,|# XE` A ">% $#f d| *|p &` 7 $#f &@ͥ 7 ͥ  Ջ -^77 z(# tj$#-V|NN$ :$ **ݡ  ފe $ $#=0#"e< (%w  d -# & w vEe"& 77$ )$$#| LB| ߇-v 55  m##    #5mN &  m  f A N  %0ODT xfr address: %P%NPRG xfr address: %P%NStack limits: %P %P %P %U.%NIdentification : %2R%NTask attributes: %VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%NTask address limits: %P %P%NTask Address limits: %P %P I-Space%N %P %P D-Space%NTotal task size : %T. Words%NTotal task size : %T. words, I-Space%N %T. words, D-Space%NPartition name : %2R%N%P %P %P %U. %VS%2R%N%P %P %P %U. I %VS%2R%N%P %P %P %U. D%2N%4N%X Overlay description:%2N---- --- ------%NBase Top Length%NTask UIC : [%O,%O]%NTask name : %2R%NTask priority : %M.%NMapped array area: %T. words%NTask extension : %T. words%NTotal address windows: %M.%NTask image size : %T. words%NTask image size : %T. words, I-Space%N %T. words, D-Space%NR-W disk blk limits: %P %P %P %U.%NR-O disk blk limits: %P %P %P %U.%N w (   =#( n * 2* :( ҝҝ* $#* r 0$# nm`׊ ؊h( Dh%( 6~%( $  5TUwp = E5UB@@P+V0$#A5R w= U% e U%  ( # ", $#I+ p$# T+ Z$#| >(+ D$#5'z "~7 v7 t7 f7 dD $#x(t(+ & f+ 5 -,2 -&,--$#500W: %P %P %P %U.%N >>>>>>>>>>>> Undefined reference: %2R%2N%7S*N)*P*P*P**))))))*)V*w 5w <    (v(  t(B J x ( e <t(w e"  f -*z  t( 5%ۂ` &  , p`  7 e" t( d BtR RRR ( f& 6  J z(-6N -H Hw,3&('  Dh ( (& > ( $#   v00WWTADATADATADATADATADATADATADATADATAh#~J$$@%@%@%@%:%Z$$$$$$>%$$w     ##  #B   # ` 7H7DGw:w6- #RRB BGD ŵŵ ŵ m߷ &mwŵ 7 ŀ7 z mZߐ-& 7#  7 &ݰp .` <#  5 #w v^5@b5@V#VPHPJPLPNPPPVPXPZP\P^5eН@ E@@3 J# 7P E@`  6h&  # N 5 . w x v5 j0p tsN FLP1o  ,  s, ,  3X    s, wWX \ x w  T# n` 7b55065t-$U U L.TT : hb` @e" v5m47 \55-1 D b 45 |5t!-jTTR5 ԕT -<  d.    50-  -   nb d.Cet< A  1,1, 5m 5b  % 2!.B (@e &w7 Det=> l+&  \+ Rw   (   e`r pwnw $CTEoU`5 TT   ""  , <    ""w-3XJv a &! -Z hl2V  4SA {RJ33m:3 3 < 4 , @5 eD   e&& Z &  >  #wX   3 3 4@ 5 2w6  5 55P5 H ~@e"D& t4-z |   7, eA  ",œԕ5   mE %  5 |5t D 555 UA TTԕ@ԕ f   7T  !  w ~\7:76T @w,  $ I wB  7       7       ~7vW!i g bB w 8@   w @ 55 @a \@@a RB $ & . @  0w> ,w6      w` eP PPЕ % .!,B p  ` |`w fe&  00  *&   p`    &      7  7^& e =wD   w( D& H     m f Bw( -t& & mje > @l500W  @  w z&  p 27zw~  R &  #% < . . $ @  * `  77 & U7 7 7 7 fj& ~ 6vw7(e"eB$$$e((h߷<Tw<L  w<B    0w<&$# `  " %LW5@5 Of &F 6vw77 *7<&5@    . `     R f  77wv , F73 0$HROE%X3RWD%X3SVE%Y3SWD%Y3F%B .((  &• H   ; w;! ,:/:& u@5e, R OW w5& & ),#!#[ ] / : # #  \#f &H%H: @ 55 ,.@ ; !F3ȕf  5!5!U,5U,43ȕf  5@ dwѷ w w -ЋSVWU @w  @w reB$&w 8,Tf Z ӁeE  ,*( e(  eRRR ٦vX pbeBeRRRRR R R  X&5fe "ppple5let ,Ї p434e6(83 & xH " ч~ H p434e6(83  ,䇷  Ї7 bw\ XeЇ)w@ 7 > I ч AZ   00WWTADATADATADATADATADATADATADATADATA :ȥ: 66ȋ+& ȥ+ȥ-  U  f  @u  4u ( ¥ ¥ ȥ ȥ  w 6ބ(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$&  m  f A N  %556 686X666667$7?7g77778C8s88889W9x9999:):F:c:::::;E;o;;;; <;.>e> -- *DIAG*- -- *FATAL*-  DC!n   ` ~ F 4 4t5!7|5 43| &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( Jf  e ee e ްh= ޼>&  m  f A N  %Illegal Get Command Line error code%2NCommand syntax error%2N%VA%2NRequired input file missing%2NIllegal switch%2N%VA%2NNo dynamic storage available%2NIllegal error-severity code %P %P %P%2NCommand I/O error%2NIndirect file open failure%2N%VA%2NIndirect command syntax error%2N%VA%2NIndirect file depth exceeded%2N%VA%2NI/O error on input file %X%2NOpen failure on file %X%2NSearch stack overflow on segment %2R%2NPass control stack overflow at segment %2R%2NFile %X has illegal format%2NModule %2R ambiguously defines P-section %2R%2NModule %2R multiply defines P-section %2R%2NModule %2R multiply defines xfr addr in seg %2R%2NModule %2R illegally defines xfr addr %2R %P%2NP-section %2R has overflowed%2NModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2R%2NInsufficient APRs available to map read-only root%2NSegment %2R has address overflow: allocation deleted%2NAllocation failure on file %X%2NI/O error on output file %X%2NLoad addr out of range in module %2R%2NTruncation error in module %2R%2N%D undefined symbols segment %2R%2NInvalid keyword identifier%2N%VA%2NOption syntax error%2N%VA%2NToo many parameters%2N%VA%2NIllegal multiple parameter sets%2N%VA%2NInsufficient parameters%2N%VA%2NTask has illegal memory limits%2NOverlay directive has no operands%2N%VA%2NIllegal overlay directive%2N%VA%2NOverlay directive syntax error%2N%VA%2NRoot segment is multiply defined%2N%VA%2NLabel or name is multiply defined%2N%VA%2NNo root segment specified%2NBlank P-section name is illegal%2N%VA%2NIllegal P-section/segment attribute%2N%VA%2NIllegal overlay description operator%2N%VA%2NToo many nested .ROOT/.FCTR directives%2N%VA%2NToo many parentheses levels%2N%VA%2NUnbalanced parentheses%2N%VA%2NIllegal logical unit number%2N%VA%2NIllegal number of logical units%2N%VA%2NIllegal default priority specified%2N%VA%2NIllegal ODT or task vector size%2NIllegal filename%2N%VA%2NIllegal device/volume%2N%VA%2NLookup failure on file %X%2NIllegal directory%2N%VA%2NIncompatable reference to library P-section %2R%2NIllegal reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%N%VARequired partition not sp00WWNecified%2NInvalid APR reservation%N%VAComplex relocation error-divide by zero module %2R%2NWork file I/O error%2NLookup failure on system library file%2NUnable to open work file%2NNo virtual memory storage available%2NModule %2R not in library%2NIncorrect library module specification%N%VA%2NLibrary file %X has incorrect format%2NResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask build aborted via request%2N%VA%2NDisk image core allocation too large%2N%VA%2NInvalid window block specification%2N%VA%2NTask requires too many window blocks%2NTask has illegal physical memory limits%N%P %P %P%2NLibrary references overlaid library%2N%VA%2NTask image file %X is non-contiguous%2NVirtual section has illegal address limits%2N%VA%2NFile %X attempted to store data in virtual section%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NEnd of file reached before .END in %X%2NSymbol %2R not found for patch %2NSegment %2R not found for patch %2NSupervisor mode completion routine is undefined %2NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NIllegal system size specified %2NConflicting base addresses in cluster library %2NLibrary %2R not found in any cluster%2NIllegal cluster configuration %2NCluster library element %2R does not have null root%2NModule %2R contains incompatible autoload vectors%2NCluster library element %2R is not resident overlaid%2NSegment not found to address round%2N%VA%2NLibrary build not requested - ignoring option%2N%VA%2NIncompatible OTS module%2Nbe"bb>RJ wN +l$7! -"tw n"&f e"> v%wķā `e"``>RJ wL ECV> e-- :$ ' -L7"F,Ba(Q$ H"7`&wwA Ρ D |~,AAcY &[q$Y 2x TITISYSYTICLWKOV00WWTADATADATADATADATADATADATADATADATAVγxbd γVγ5pww~r7z TKB>%   @ %2>KWdp}8(ЬxhXбHgpzY ^XDSYSYSYSYTICLL&TKB -- *FATAL*-Run aborted XN^.  e * , 0 : 5 N R 5  f  ^ 5~ N  F  F w |5bC ŀ X , B| f50  -F <5.$ r N 5 wV^ wVPwd *   f&f 7H w77  `wh w\ 7,Z7,R  D   ^@    ~ $ $fE7 4` H  5,5,  " u$ \   1,1,J 1,1, &` e m 7B &6 e$$)d 5w  & lA 7@m7 *1 C7 pM $ w"   7 /  *w p L7w~  X`b TR efA   ^w8 7,w* ~   z& &% N  V    2 T s zew ~   A |C J w l CB  Z54w F reC %E& 7 ,Bd | wddcAcAd 7A &e Cm  &m`e` ` f`B` JN    (     `p f& `, ,, &  mV  BB ce " &e#r  B(  & eB%e1be1^1\1H1J1L1N1P&&f t h eFB e:w  E  A B` 7pA wL &w E p f B ` p ^7~A @ae n fe?E? & f Y :  40 B ` w f E @ jw`PK`/ & D -N  Jx  `      B B  @`   B` * J   v  m ` @ 00WWNf& )'&1 : 2| * "( $ 8  , X  $  L < H ~% h( `  ) V'  j   z\ r j b Zd R0 Jp Bt : 2 *T "5 7 6  6 `A r A5ew , Bv     5Bw 50  (r- DUt-E D  E E ܁ &wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff &f  &[q &[q`    ( $$p VX&2X&DX& !$,h%+Vz)+V-+Vh1=>L|dN@R" \"T c@, .jl)@ol)Rrl).u v{%Hd~*hv*v*v%hdvT5N5|5X5*P8<P8*A`NANrNAN`NASYxQSYySY^SY~xQSY_SYzjL_LB[1,1]SYCC@`DA`LB `WMP`SS`MAaDL``SH^SP_CR@^MAWI ^HDaPI`COfLI fCPaDA`FP@`MM^PI`PR`SQ^TR`XT^AC`EA `HDaPM@`SL `MU`FU^RO_ALaCM`SEaIPgNMfCOfLI fSGgXH^ID^ELfFMfCL fSB`FO@fxL8Fh00WWTADATADATADATADATADATADATADATADATA5b  wxe w H7 5 b$q e ˋ   ! " wd w @pdf  B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e & ĵ V 11@ Be w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  | P aAAf@pnp bC*8֋ <88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ PŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & D8 **"!w  8jDl@ TeBT85l@ z@( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ ' & 8AA%?%2Z%\%a%LB[1,1]ODT.OBJODTID.OBJT2@ w ݌]zj,  w8A RbXݨTݜ&x%d3 3 $eB A  J\~%\%5bEPUJ5 E<5U.  Be H 3$s ]@@MX7 7 &&$&! &&"e 5'U7\67^2\&$PP `E@r XwX  <7w4 P:N w$&4 be&ew B@P@P dbd7 ^  `wf,B &&&$$ 55 h%~N%$ (b Ve5 &$7 f xw$&`9  B ` ,\NL  | `BAbpd fw^hX`  %/ -%/*%//$`¥¥¥ ¥ ¥ef UFܱeE $&$m    b   7 p7 2d8 f 7 lH Z"%?lv%n 7 h 60 UjUd ^@*7 L X `f `wP  Hw l^SY7 %7 e`v&  h@bp$$0 b @ef7F` ȥ;ȋ&% % % % ¥:uu j n & W e)X&I#q-'eW v&$0ef` ננe נ^נ  A5 ¥;U%E #w (w we) e)( r &*e) e)) l  ) U% ¥;¥,Q \ Pe)S#S- $ *I  %QQ *& N&1 &f Je f  7" RRR~AC`e R?j7f% ~'L BݷD | pv&e`P  &,@ 3@8K@oMBaTq rt@,YeYxx@Y`Y5 &5 8 V8 8X[<$09AZ (),-*! '>'x''''''''7 7 7 7 X7 % P %%% #&$$ :f&B   r0$Iz&%%U^Z7 XO %J8D52M5*I,E   $ %ͥpͥ&Հ7 -A# ~ x( %3%2h&եJ   H  #7 Ewͥh&Jn# %.wȋȥ;!&% %9;5^&H1H/H-HH)HH%uu& +w %W{&%W{&  p{&l&&  e)ȥ:2ȥ./ȥ[,ȥ<)ȥ/&W ! T & fAf J !%dd,wz& ȋȥ-ȥ)ȥ(ȥ* ȥ,  ȥ[ ȥ]  Z , zzp J ~A A N>,B Z&&5 bz& r&`90 p5@ *w$4 bf 6 % e 2 D8 <5 46 ,81o?y'('(((''8)*)% 0< 677 5E% P %%v  t `% %!%@5h7H7L V5N42W   C 7`7`& p5X& <  ܴ d ppp2 Ue  AV l  , 7œEzx&5U   25Lpppp f& fp5 & Np5Ufup h7Zw^  , H< fwX2 5pppp Fu  w P < z &  ( x .wwe@e $2 0f5ve : 5  DH91 G@  w :e & Ne 5U e5  ! 555U-500WWTADATADATADATADATADATADATADATADATA5 8u5 $uw8%^ *$) ] eE BEE r  5 r6**********************+************4(********************** +*******j****************************"/*********s$+ @,A%w  H5 a' 7 •!z b& a dFm<܀  :w^  f   ed7Ae 1΋ ۿ  ppU@pM %e -  AV T a  އw z vw p l ` r7"7, 9F7EA3"3,'5@5E-V  #  B`  E   e3#3-  ۱w &2''' &5 w l& 0۷  |7w  &  #% t x h 0 h0 zV+ zP+ z/ z(0 d+ N1 .2 6 7 7 5 6 7 5 7 V8 7 x8 p 8 h7Sw  e ww؇@$  "7$b7Z  e h?7 PAPАP 0wJhwDwB@> wW# wR؇Tw 57 @7 >7 <Le EM M M Mw4؇ e  ?7 PPP Z'V'eeAL z bpppL <pd   ׿   p | dwb& wBw@ׇ5 bmwNLwFwD7 BB- 4. .lw&7, 7,  U &a w&ja w&Ta UwU% W# wwwևw:"@ A @$5?75?3B B B @5J *=% 505  5t77w ַշT@RwhW#wև5wT wևj  AEBܰ'C C և@  AEBܰ'C C Wևw\wZևwzwxևU% W# wlwfw`Շ6wwLևХ[ 8¥,f (¥]U   ױ& x¥. z n w#6W#wԇ1wBW#& W#Baw. dӇ \ӇwW#W#wԇU&  ?7 PH p¥;m¥! ȥ;ed' ¥=7e)%t#t-e !P'87  ȋ-ȥ;*Ed'  L ¥,¥! ¥;¥: 5 !.a$  d'dw &" wV7PJ 00WWNfe& 2;/!,,:0 , ' R , : b :' 4 :  5%wB 6 7 8 V8 8 7LB[1,1]LB[1,1]--f/-U,  e 7+ B5.5&GSYBe ~+eB e  yRB,5, D0 %Cwt7 D.& C! U@5B    w: D# <  ,w" % Ced5(  J p  c5bUU@5U5U@5 U hU @ @E @ @ @ 7TQ$@P  5U@  e)+555 5u u C55a 5a  x w%A7 7 ~GH+A5U@5@$5 X 5PA=LB Be@E?B B B@$5  =CJ #w6AW w*U"\AmwA w ww`Xu-5ej1` 8 (e)wp+QQ &$&&$+& &$% Be>w t'7 wp TBAbpd fwRhL`  %/ -%/*%//$`¥¥¥ ¥ ¥ef U:ձ *d'fB 8+:+  5.U.5-^'e&  J D@ ѥ  u N#N %7 mbӇ & & @( |f  e ee e &f& v  08 (5 6 5&  m  f A N  %? @`_?@+Units set to maximum assigned,,,=5m  % V U- 1<+ @NB w, H`e4065*5& F5F  =  w@ط׷Q2  5G5`+ 5T%"5#++5#++5Հ+Հ+ 7.+7.+״ 6+̂m.+v׷t ++ H555++  & & Fd5@t -$5t- 5    c$A A(+N ׇN65  5 5 %  5@5 B  f \w2B sœ  vwt-w 5 5       ` `U@w< + Bw5$5++w 55 f 5Bw  +fwx    5 5+ 5 ++5 z4 $5h5 w w  w w w w pp55 5@U@p` p`|`+ A ݜHCݎ> ,5( zvԇE B B B B   + Œ5|5+ 7 E++w d&fA< 7.& % ,4, %&f E U40, U 0,  5 g wTihkx 5l ++ +  + Œf00WWTADATADATADATADATADATADATADATADATAe  x + Œ + ' j^7 7 7 7 B7 @7 7 7 7 7 7 7 7 7D7 z*v7 F P  75~? %A A A w ߸N He  5  5 55 @$ d.A x z L  AP  eA    Հpp Zw 5 P$R$$ <,h,)ɪyN0tN sN0sN0 s, t ~, , ,3XF V ,..- w  7| -4 <5d n5b v n5@R , 6 Jw B  w @e"Kr•@- Jr5;r5 45K5    ȵ d ne 5D'%^# -X5@L  év~he | V5@  5 |PH4 7T7 X 0 PPh Vw  -`5J%dȕ@@~ @b \ ~@  07f ^?7wA `  Fw^F ,7  z v( * `  7N7H & Uw `,& $ " p7w  &  #%  l 7 7 7 7 ^fj& ~ (6vw:.7*(e"0eB$$$e((<Tw<L  w<B    0w<&$# F`  %W5@5 Of &F ^6vwp7d7 *7<&5@   >  `    R  R f  677wv , 7% x0( H~3zwbw w| Fe f6  ~  fe 5P  91  N&b  ~&5EEEEE@E@EE &&fEE# %%2, %U2, 5 v C & P &  07JV% J%,D7*%.?-1~5h%e N l5R|rr |  "7 | xCœ5H5µ  (l 5) &5U5U5 EEw,, w,& m35Հ(b " 55 3l5 5-j ,h,beH5%ɪ%J';'%Jr;r%%ufFE% &%[q%( v w6wH 900WWNeeb 5@\ Y-hU5R5O5L5HUB Z@` > 0ݵ d 1   w 0-( 5@  f S 7 <5w5ww|ŀ70* B-p &fd n bw: 4Հ|B 0 w 7T7Fw>:7 :70| w\ 6v  $%b 6 wE µs d zn  dwJf b55 5  B *:) r7w b & L() d .0 Հ% ^d  .%T J wxf4 7$ڵ| ݇w C57(5l * H ! &" ,PPJ  ۇ xt rnf .`  "   3,5wR5w>55e5@N 5  5e w`55Հ m0 0  ,E h 5 Հ m0 0  0 d r X V `ef %PV (e : 5PHtt w m׎  % fV `ځ 7 1 l5f|] 4ځw 6f . t ! p` p ; p p  |5 -5@) 7 d  7 P &fn H ^քww5- T%& F!5U     ~@ 7 @w heW! A T 5\5T5L5 x ,ՈB Tߡ  @e&Pe w  wb֔w wxe f &w P  w h& f w< R  & ff ,  xޖ N   ! U &f& v 1o 5$6$''P(Z$//P- ##&$#>0z1z11&$ 7 \3h8 f  4  f57 7 $ 7  J .2 d0 h  07 f 0?7wA  w ,7p h ^ Zv * `  R727, & Uw & r  7w  T&  #%   7 7 7 7 fj& ~ v6vw|7xp(e"~eB$$$e((F<8w<0  w<&    w< # `  %*W5@5 Of &F 6vw77 *7<&5@    " `  `    R f 00WWTADATADATADATADATADATADATADATADATA 7wv  $7 w,8 mh35Հ( " 55 3l5 5- ,,e5%ɪ%J';'%Jr;r%%ufFE% &%[q%( vD w6w* 9eeb 5@\ Y-U5R5O5L5HUB Z@n ٵ d T1N   w r-jh 5@z   S J7L 5w5ww|ŀ7 B-٨ &f v  bw:  ՀB 0 2 w 7:7w,|7 |7r0 w\ 6 T > $% J 6w4E" µs d n  wJf : 55 5 n B ,Z 7JwL & L()4 d xp0 Հ%T   .% 0 8 $ wxf h7ֵ0 هw &C57(5l * H ! & 4 PPJ 00WWN ׇ xt rnf @`  "  3,5wR5w>55e5@ 5  N5e w55Հ m0 0  nE.  5FH Հ m"0 0  0 d ef J $%nV e : 5PHtt  w mvԎ  %r fV ց P7 1 56f0] ցw 6f . |  ! p` p ; ^p p  5 -5@)0 7    7  L&f \ް҄ww5- %& !5U 4 \   2@ 7 dw eW! A T 5555 bnՈB ۡ J e&e Xw  Dww Twe f &w ܀  w l& f w~ : R  B& ff  ,  ۖ N   !, U &f& v 1o B5&  m  f A N  % .<VNTI VNSYVNSY[gNSY[hNSY?yOV\~TI\CL2VNCL@GtVX@DChb  VVBDFHJLNPRT ,3X s,w Z J P  jD  XD  FD !  B U%@eA D `e U%` (%?%  D   ?7 e@ B  e6 b7 5e@5` 5,e5@e,e7   - 5v  eb5>5;V B5Q$BdBdBdw&@mv@d mp 7L5~@d@dEpN`JW e75!5B5@e2e?E? E @`eE 7`  =l  `eB  B  D   P  aU%5 % %Xv XC X 5bT4"e =  | L=l 00WWTADATADATADATADATADATADATADATADATA 85  1 aa * H !  BPPPP *@e"A &~  LA  pp0L @ dDe"& >77%ɪ- K'wD-J'w8-;'w,-3&w -3&w-2&w-#&n Xw &   7*w.   x&  #% p  )Pf")&y@G xCcbp,,1z.?y05!& 4# # l% b4 & ' 5&  m  f A N  %#"#" #`hb"#r?># hw 8DCet BEA% b 5f&"ŀ550 00 -65 eDCen h-l5^e`$ 5HJ5@@ *7r&e#  |7xf &e# 5e" w ^ N5@ wrDe# rwx5De" VDe# H"-Z 4  TTT5 L5mF55e5 Tdf  c 0e %w 7 l Z T7^5X,  RB 54 2 5& x7 P/ ~mt  V%p  5 rL`" 56m*ߊ h   ww@?  u~~@wtvCa 5HS@CwJLa  l& A~m w RwL H 5r*'CwNa Z5N" FH  AB 5vvw5~fe@ uܮ  5 . tX T " 7ܷ A~B& rpKm܀&J d  S& X Ee 7 ( n 7  5  v   h5& T  w 5   .  w~ 7t^ ^ 7,#5zJ H 7,#ڇw  \7 5N  CC $@w  w6w2 @ w5  & w D5   P V "uuf7 2@   A  <| R& @@  -5  5A5 5~A5  : l55Ca XXJ  @  .55 B  @ uu|u~uw TLA  f      b 77- v5`5`~ fAAAA R  8uuf L "w w|w twn J rr @A@A 2 2 2 "    @@ w3<@ (4`<3<-؈4<"  4`< ew X H ;w ]"]`U.5*5& hw f75\ @w >7  &5""5 N5 "5 05 7P`UZ5 UF E    45" 5 5 "7S5 5 H ^-@  R HUA2 *] ] %w-!] A  lf@ $ . uft t5P"7S< 8 -F՘  00XWNUA2 ] ] %w-!] A  @ |V  ut t " w & 7 n 5\ pw 3 <AA 2 5  U e   -x  t Ul ^ -TL  H  "50  "" K"" D z 5t eE  Wt Fp >\22mV-R fml r` 3\ V2l\ 4V@5ve&e&5^&  5 5050 tD1  @0 0 0  f&  73 3  77w( ( 33 43 t-L*x $& Հe33  3   Rр H7F 55e" ( @ &L T 3 3 3 3 3  bw @e& L5 Cµ @@<5>5>µN~5$"5 %Ncc 55  bdcc  Jcc ۖ @`!  @`A@  f  @e?  Be E0fр  0$#   4 4E @ @ @ 5 554 :~% h% & Jق "lmχfT De"e &   v R&f  L & pl5 5&% &f5 b &5 5plw plw 5!@@@  :,(.*0,&.#$x## ##lrv#"l lf<#:|##^#z##n2###xp## # #hD##6 >#@f@>##"####5kw <mMetvmv !D7f``#   E|A Y   Ze E  77Е     `h' L5mܼ܇mm5mܘmݚhww 7 : 577`Eb#"0LP U U5xU5dU5`U5L m\ 7 mJ7 |" f# "0LP76m 7,7 &7 5 5 5 m7mp#=v#  e>77`^ `AW  %|W V \ emwe w`ze5` d5.em5m #5  vzںz۵*l r $ 5Dn*7 7 4" 77 f Z5I"7 < X 0 h#"JeD7  6 %. *7 7 &&7 %00XWTADATADATADATADATADATADATADATADATA7 CD5Efm Le  NECf  &  e&A e   F E'E@Ce5@8 % &%([qe   Ce- 5 7+ "؁ @e Re?E?  EV  >e" N A @ m$ءf rw  6  f`  w, 8   ؇ &f##4e6(% " l 7 @ 2 2 )2 2 -֬ ֤e wه  p j b\  N  H7 :7 6P 2< .B`UE g  &f  m   |##4e6(% $p#f&  )f` # w 7 @7 > |7&#.   7 7 xrD w & H5n aC|w  7 ַ ,aC`wv r xf`` շ b  XR %f  ,&,#4e6(% L  %  U? a %  # ` b5év~ 1o w 5{7  7\5V,%p( -j5@^> ef R&$ e"b 8p 7 x7 & 7` &p  r| 7 # He"A   m   p @ H %p5F5>50 0*. 7 5(eE@`    m7  ` ~Ew l .%  xwz*E B a @7 &  77 7 w b ,&mz777w > m 5Bm:l   ~m67zl 7z5)m7blw mm 7Tm7:l 7:w   "$5~zmmw & b  7w  D&  #% |  w F 6    wL n   8 V&4e6( X l 7 @ 2 2 )2 2 - e w    |   h7 Z7 VP R< NB`U2E( g  6&f  m8   |T4e6(  $pf&  )`  w .7 `7 ^ 7F>$ h , 7 *7 (z Rw & H5 &aC|w  7T P ,aC`w      R f  ,&L4e6(  %  U? a    `7 7 7 7 fj& ~ 6vw7(e"e00XWNB$$$e((ݷ<Rw<J  w<@    .w<$"# `  F %pW5@5 Of &F 6vw77 *7<&5@    h B`     R f  75wv * j7%% )5j \r)X lm7r) "W, W,s,4 %%  x #  nW, W,,  t l   j X [ڂ` w@5 :7 2mE  r) ) w7  >&@A 0m؀ep o g c & eZ & eP  M v E & e % \"&ReHe?  eE  B B B P v7   f& be   T& Pe$5"5  & e  ڀ^  v& e7X &  @A m:׀e7(*m wց m ew)0 8   ) w d2 J J D,Db@T&r1 e H ق  L)  J   ~ \w   1 A `A ~ & e "  %wL7[5Gr) P  je vF  ߂@5m  5@(  fA ,@e j47 #  ~ E     sN  7 V P7 L F؆wm>:64ww"dւ` Pצ ^ 6*  #A 55 5@ @@ mnԂ 7t 7n n %1\%oVm(N)   t   p` bF,,  %% L1De|-x =7:%  3 .ŀ+%~7~$%pw`l% ^7`%PR @ &D< e @ w R5bw`%wBl 75nr)7f5`U`EQ 5$Um4   r  7E  ,y 55  " e55c 5@ r)p eEp r frP   m<5N45T, 5@> r)p eEp rP rP  00XWTADATADATADATADATADATADATADATADATA m Dr) A Be  `e -.  ' 55D nD  ^5`  J5Je 8* e) >7257tp 5 7 H  5 |77lw $e 7555ll5nx &hx eV7Et dEn  r5 7 w8. E~ @5Z*EVD V0%0%5e" .% m l R 5t7  e  U5@H%J%` m& m(ւeeA A dr)  ՇfE | @m5 @ @ @ 55$5>m,Z5 fE  B%  @a%:5$& 75m A A A ,3X s,w 5-7 7 7 7 ) h7l 7&fEjEA  A "$ &5 `eN F &48x) E R e 2Dm& e  F 8  Dm& R R  hw8 ) Hw) 8w~|5 Lf\& <x) bx)     2x) x)PH   XPPx) w Dm& ) z7fEjEhw*A  A "$ 5 ,,7lV VHP VH @me, w   n rT,` x)wx)u u u u C eE P75 5 5 wn& e&b e & l  e (hwE    f eA A* Re5"5,$    &-D 7 DmrFDe &r mb  dZ| w P B74H ^5@2: # ` E@ 7"7 5 B J >^  z5@  w,w e&  00  w 5@)H 5&00&XWN(e  z00 "   d e d 5@8 52  db% | "~ V7R7 D7 Bw  2z.m777w m^ 5ml   ~m7l 75\)ml7lw 4mm: 7mH7l 7w   vxmjvmfr  ߔ  * `  d7h7b & Uw F&  < 7w  f&  #%   7 7 7 7 fj& ~ 6vw7(e"eB$$$e((X<nw<f  w<\    Jw<@># `   %¥*W W c@ % (v) v4) v) v** 1 . F- + ( 5%2R %P%2A -R%F%X Memory allocation map TKB %2R Page %M%N%2R%15S%Y %2Z%4N%4N************%2NUndefined references: %2N %2R%N %2RTotal task size: %M. words%N%4N*** Task builder statistics:%2N%4STotal work file references: %T.%N%4SWork file reads: %T.%N%4SWork file writes: %T.%N%4SSize of core pool: %M. words (%M. pages)%N%4SSize of work file: %M. words (%M. pages)%2N%4SElapsed time:%3Z%N%NL b 5 mm  &&&  eJ   eBRRR R Rw (F%7 <  %Ý,|& XE` A "' %f d| *X|p d` 07 %f l&@ͥ 7 ͥ  Ջ -77 z(& tj%-VN& :' *ڡ  ܊e H' %=%"e< 'w . d -o& ( w Ee"& 77& &%| B| H݇-ڤ55  m&&$&  H  &&5m &  m  f A N  %ODT xfr address: %P%NPRG xfr address: %P%NStack limits: %P %P %P %U.%NIdentification : %2R%NTask attributes: %VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%NTask address limits: %P %P%NTask Address limits: %P %P I-Space%N %P %P D-Space%NTotal task size : %T. Words%NTotal task size : %T. words, I-Space%N %T. words, D-Space%NPartition name : %2R%N%P %P %P %U. %VS%2R%N%P %P %P %U. I %VS%2R%N%P %P %P %U. D%2N%4N%X Overlay description:%2N---- --- ------%NBase Top Length%NTask UIC : [%O,%O]%NTask name : %2R%NTask priority : %M.%NMapped array area: %T. words%NTask extension : %T. words%NTotal address windows: %M.%NTask image size : %T. words%NTask image size : %T. words, I-Space%N %T. words, D-Space%NR-W disk blk limits: %P %P %P %U.%NR-O disk blk limits: %P %P %P %U.%N w  :8  =(& n M- 2{, 00.XWTADATADATADATADATADATADATADATADATA:F+ ҝwҝp2- %(d- z0 X% 4mԊ "֊h&+ Lh%* >~%+ ,h  `5Uwp L= @E5U^B@@P+2%A5R w=6 U% e U%  ]+ & . %L- x%" T{- b% >- L%5' "~7 v7 t7 f7 d %**-  - 5 -,2 -&,--%5z **(, *, pӊm$5J  \ӊm+ h+ ^5$ 5 N. 45  r. * $wXmTZw TmHN0  (e  - , - , 5 b2 w h ^%-(NҘ" "    m %\\ v 5, -^Ѱ"$"    j , -AC,-AL,-CM,-CP,-DA, -EA,@-FP,-HD,-PI,@-PM,-PR,-SE, -SL,-TR,-MU,-ID,%N*** Root segment: %2R%3N*** Segment: %2R%3NR-O mem limits: %P %P %P %U.%NR-O mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NR/W mem limits: %P %P %P %U.%NR/W mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NDisk blk limits: %P %P %P %U.%NDisk blk limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%N%2NMemory allocation synopsis:%2NSection%44STitle Ident File%N-------%44S----- ----- ----%N%2R:(%VA%VA%VA%VA%VA%VA %P %P %U.%N%30S%P %P %U. %2R %2R %X%N%3NGlobal symbols:%2N%F) w 0 -B I+-.+F j5-+.4"   |5+ "   T -n-]+ 05` }+   |5BO@I5J@J@   e ` #,5#z 5J@J@   e ` tC, , , , 5e&e&5hc&  [ % , w w 5m$7  ,7 x e " R rB * 40( w 2J p5RaU%U% %$$ ?- )w dF %$; 5 5  tmRm bpt5  l  - w >7 ,s&*-&- e"& +* U  m^+*%   <  (    f  H w "  a 7    RO,RW,D,I,@GBL,LCL, REL,ABS,OVR,CON,SAV,$$$,%2NFile: %X Title: %2R Ident: %2R%N <%2R>: %P %P %P %U.%N >>>>>>>>>>>> Undefined reference: %2R%2N%7Sz,+x,,,,,++ , ,,+v,+,w d5w^ <    b+*  *B J  p+ e p<*w e" R  f -  * 5%ق` p ^&  2  p`  7 >e" * l006XWN JR RRR * f& >  J +-V -P Pw4;&+/  lh 4+ +& > ^+ %   ~%~&&'''''&''''''''w  (  J&&  &B  4 X& 8߂` $7H7DGw:w6-j $&RRB GD ŵŵ ŵ m(ݷ &mwŵ 7 ŀ7  mܐ-Zܪ 7$&  7 F ۰p J` ߇ &  5 ^&w f^5@b5@V0&PHPJPLPNPPPVPXPZP\P^5eН@ E@@3R # 7P E@` P 6(  x0& b 25 J Vw " 5 jsN 1o  ,  s, ,6>FNV  3X    s, wW""###w ~ # ` D7b5505t-U Uz\ TT :  e" 4v5m*47 \55-1 D b 45 5!-TTR5 ԕT -  d    50v-l H F-\   b Cet< A  1,1, 5m 5 $ %< !B (@e w7 Det= +&  + w      e` wnw fCTEoU`5 TT   ""  , <    ""w-Z3XJ^ a 2&! - 02  4dSA P{RJ33m3 3X < 4 , @5x eD  e&& &   #wX   3 3 4@ 5 2w6  >5 555  ~@e"D t4-   7, eA  ",œԕ5   mE %  h5 5 D F555 UA TTԕ@ԕ f   7TV P $ (" w N7:76 @w,j  & I wB  7       7       ~7vW!i g bB w 8@   w @ 55 F@a \@@a R $ & . @  0w> ,w6      wR` >e00>XWTADATADATADATADATADATADATADATADATAP PPЕ %@ !B p ` `w Xe&  00  &  b  p`    &      7  7^& e l=wD   w( &    v m  f Bw( -& >& 2mށe > @l55 m  @  w z& J߷ p 7w  ,&  #% <  . $  & * `  77 & U7 7 7 7 2fj& ~ 6vw7(e"eB$$$e((ܷ<Tw<L  w<B    0w<&$# `  %W5@5 Of &F 26vwD787 *7<&5@     `   &  R f  77wv , 7·7 bw\ Xe$·)w@ 7 > I Zχ AZ    :ȥ: h@ȋ+& ȥ+ȥ-  U  f  @u  4u ( ¥ ¥ ȥ ȥ  w ݄(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$&  m  f A N  %P8w888889)9M9t99999):G:w:::;';T;~;;; <+.>K>t>>>>$?D?i????P8o88889=9j9999:7:[:x:::: ;1;N;};;; <<H>r>>>>$?T?v????)@^@@@@ -- *DIAG*- -- *FATAL*-  DC!n   `  ~ F 6 68!78 5| &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( Jf  e ee e j*? b<A&  m  f A N  %Illegal Get Command Line error code%2NCommand syntax error%2N%VA%2NRequired input file missing%2NIllegal switch%2N%VA%2NNo dynamic storage available%2NIllegal error-severity code %P %P %P%2NCommand I/O error%2NIndirect file open failure%2N%VA%2NIndirect command syntax error%2N%VA%2NIndirect file depth exceeded%2N%VA%2NI/O error on input file %X%2NOpen failure on file %X%2NSearch stack overflow on segment %2R%2NPass control stack overflow at segment %2R%2NFile %X has illegal format%2NModule %2R ambiguously defines P-section %2R%2NModule %2R multiply defines P-section %2R%2NModule %2R multiply defines xfr addr in seg %2R%2NModule %2R illegally defines xfr addr %2R %P%2NP-section %2R has overflowed%2NModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2R%2NInsufficient APRs available to map read-only root%2NSegment %2R has address overflow: allocation deleted%2NAllocation failure on file %X%2NI/O error on output file %X%2NLoad addr out of range in module %2R%2NTruncation error in module %2R%2N%D undefined symbols segment %2R%2NInvalid keyword identifier%2N%VA%2NOption syntax error%2N%VA%2NToo many parameters%2N%VA%2NIllegal multiple parameter sets%2N%VA%2NInsufficient parameters%2N%VA%2NTask has illegal memory limits%2NOverlay directive has no operands%2N%VA%2NIllegal overlay directive%2N%VA%2NOverlay directive syntax error%2N%VA%2NRoot segment is multiply defined%2N%VA%2NLabel or name is multiply defined%2N%VA%2NNo root segment specified%2NBlank P-section name is illegal%2N%VA%2NIllegal P-section/segment attribute%2N%VA%2NIllegal overlay description operator%2N%VA%2NToo many nested .ROOT/.FCTR directives%2N%VA%2NToo many parentheses levels%2N%VA%2NUnbalanced parentheses%2N%VA%2NIllegal logical unit number%2N%VA%2NIllegal number of logical units%2N%VA%2NIllegal default priority specified%2N%VA%2NIllegal ODT or task vector size%2NIllegal filename%2N%VA%2N00NXUXTADATADATADATADATADATADATADATADATAIllegal device/volume%2N%VA%2NLookup failure on file %X%2NIllegal directory%2N%VA%2NIncompatable reference to library P-section %2R%2NIllegal reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%N%VARequired partition not specified%2NInvalid APR reservation%N%VAComplex relocation error-divide by zero module %2R%2NWork file I/O error%2NLookup failure on system library file%2NUnable to open work file%2NNo virtual memory storage available%2NModule %2R not in library%2NIncorrect library module specification%N%VA%2NLibrary file %X has incorrect format%2NResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask build aborted via request%2N%VA%2NDisk image core allocation too large%2N%VA%2NInvalid window block specification%2N%VA%2NTask requires too many window blocks%2NTask has illegal physical memory limits%N%P %P %P%2NLibrary references overlaid library%2N%VA%2NTask image file %X is non-contiguous%2NVirtual section has illegal address limits%2N%VA%2NFile %X attempted to store data in virtual section%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NEnd of file reached before .END in %X%2NSymbol %2R not found for patch %2NSegment %2R not found for patch %2NSupervisor mode completion routine is undefined %2NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NIllegal system size specified %2NConflicting base addresses in cluster library %2NLibrary %2R not found in any cluster%2NIllegal cluster configuration %2NCluster library element %2R does not have null root%2NModule %2R contains incompatible autoload vectors%2NCluster library element %2R is not resident overlaid%2NSegment not found to address round%2N%VA%2NLibrary build not requested - ignoring option%2N%VA%2NIncompatible OTS module%2Ne"ARJ 4w  +$7!  -w "&f Re"A %wd·^ e"ARJ 2w  ECVA e-- $ ' -f¸7",a(Q$ H"7`&w:w8A ̡ D z_M,??!! Y (?00VXWNTISYSYSYTICLzXzVxXX,7 r (nd7 v,   r6  J.:( e64 e`% Bd6ߵ4B 6 4 4ڣ 5@6  vp `ߵ* 3sœEa," 6<Cn e6 j".r~0^,,,,,,,,z_MnCOCOP   ( & wjxrܧ z RP84@>8 we,\i& &&& 8  ` &  d& U  57 ݲ X5@hE@` 5VEN 5B E:   6E&  -*Uf- E w Uje d& sU@je r& s5F f  nc6n w e  && 3,5ee? El f) ff. X 07 7 wCn@ 7  ݣ% ~ t n f u% Tbb wh f*  ^ f+  Hf/  p* @ Z* ww w    <板6n \wf-  P w>e $w.- e \Hr fdbHDB> T "   E V dpn# ZfF *Tެ|V lrw @>r  N @4  h f7    @ * @ X#f6       -<E条6n >wHe  fH  00^XUXTADATADATADATADATADATADATADATADATAfG w && 8#-&& FFFf    RB Ee`%  D~% b  % *DIAG* *WARN* *ERROR* *FATAL* I/ODSW???=ʱ -- DE-f fEĥЕЕڱб Е Е ?d H^ >ޱP Е.Е %  `-h7beڰ~ A 2 & & &  & & & & Ε )Feذ ,M f&P&N&L&J&H&^&e\&e*+ F h   Bf  f  * eq q"9q,4&& & 00  & & & & & & & Ε U)O  n<& ff& & & Ε ) *eq  f  hf  Tf  @ Hf  ,*. 3LB0:[1,6]SYSSCAN.TMP;1*. SYSSCAN.TMP;2zSY eBCrrU>p (f# Xf @ ^    r  rf TA ̸tι!Cv[ucHUAB not found in listNo startup transaction foundExiting due to errorBad transaction length.%N block(s) of secondary pool may be lostTransaction not in secondary poolUAB listhead not zero on shutdownTransactions follow SABExitingOn scan file openOn scan file PUT$Error during scan file renameOn scan file closeOn scan file deleteCan't write transaction fileUndefined message number %D. at PC %P Directive error. $DSW=%P PC is just before %P FCS %3A error code = %B %Nfile: %2A%O:[%3A,%3A]%X Can't close transaction fileCan't init new blocksCan't init new blocks. I/O error = %BCan't write attributes. I/O error = %BCan't write attributesCan't open transaction file (by ID)ABDEFIMNOPQRSTUXYZ<> HPjll` JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC & & @( Df  e ee e w && D¥%  B&ХVA P C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & ex6& ed/& e*AHŀ ȕ Е Е Е & e* & eЕ A %& eA F Е A EA EЕ A A   $Е.  AЕ; h    &f& v w D&& bЕ- eaegPPPЕ-$w D  &Е. ce  Е:   B w X ť ť 0B LAaw &' UD$BA j&( U BQ hЕ* 00fXWN 5 ߥ& *  + 23E Ew x   Е-   0@A vW e`fÊ    E w *8I *=)98 h eB &&  U Z**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* P ww * 8B pB  0 B ~w \( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# Hw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) \@#**fff  &&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & &  e# eB&B B * eBe>  # #D #=0/H#@&0 # = e0   4 0@e 6=#02/002# @#?@#040 6w /!0/ l0/!p!0 .=p0p2w v ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB &*   wX . VB5(8e$8w2A&(e > 4p8q  (#4=A#@)( > *O*)@#0l @# 02ȕ8 P 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ R& & `e * * eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6wN/!0/ l0/!p!0 .=p0p2w  n832cd& & & B  2OΕ   N Υ$Ε  2200nXUXTADATADATADATADATADATADATADATADATAΥ   v Ε f e * 8e*w@)  *0, 4   l ) )% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,  N w0  J DB # j f  `* w)0406 l0 w *&fB IB D  `? 5   L,*+*1,\\1,^^pBBpDDpFFeB eB  **p**0 B1 Bww w"ww  $0,0w 46  )0406 0 *&f &  m  f A N  %82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E  (.8Ae f"( UCɗ&+(e$&% &ff **  f |&* ~*eB  8 $&w *(5<s1  U U@   f&" 4 )'&M'&&**%*%0 *&* *5ND  <  EU ^  r  J 141612epl2l0p ,MwD   f  >5>Eu   e6p 4 8 X ( 81416    v V > =00l&8el2 0 *w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww eE D` bl lrw   B eE"s    s-  Cslw (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >W=f(& e %&&eH =&e0  U   E > >E(5E=uf vp  wt *) l0, *) $ )*)0,40,6 w   >w   ,,  *)  r..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 h08*w 8   **  DP5R RRR =p!Օ^ 8   * X  4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = 0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*&   `@ ` B   & A @    8e2 (eff NeP   #llD &eJ Ԕ %:ԕ: f"& 00vX|XNf&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w81  %,,:4 w 0*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    @*w 8*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ ,*1 U8UMw w B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ TwDf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ =D `p46 :f 64/=  @) 0  8w N46 L8 Le*w <&f D E/fC A B f&  pBeA @0 ~ (@0 la@eA  B0 TAB  >f  C @*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@w  ) d fU t%  BA `6p 4p`4 %60 4z_M,ÎY &[q$Y TISYSYSYTICL00~XUXTADATADATADATADATADATADATADATADATAX𠧊VTISYSYSYTICL( HX_MzX,7 r (~d7 v,   r6  Z.:( e64 e`% Bd6ߵ4B 6 4 4 5@6  vp `ߵ* 3sœEa," 6<C~ e6 j".r~@( n<<<<<<<<z_M~COCO`  Ƨ ( & wjxr  RP84PNH we<liʵ& &&& 8  p &  t& U  57 ݲ h5@hE@` 5VEN 5B E: ʵ  6E&  -*Uf- E w Uze t& sU@ze r& s5F f  nc6~ w e  && 3,5ee? E| f) ff. X 7 7 wC~@ 7  ݣ% ~ t n f u% Tbb wh f*  ^ f+  Hf/ δ x* P b* ww w    <板6~ \wf-  P w>e $w.-ʵ e lHr fdbHDB> T "   E V dδp~# 0fF *T|V lrw @>r  N @4  f7    P * δP n f6  ʵ     -<E条6~ >wHe fH  fG w00X|XN& X ʵ&& 8#-&& FFFf    RB Ee`%&  D~%& b ,  . &%& *DIAG* *WARN* *ERROR* *FATAL* I/ODSW???=ڱ -- DE-ffEĥЕЕ Е Е ?d ^ P Е.Е %  `-h7be~ A V& & &  && & & Ε )Fe M f&P&N&L&J&H&^&e\&e*+ F ʵ  Nf  f  ʵ ʵeq q"9q,4&& & 00  & & & & & & & Ε U)O  n<& ff& & & Ε ) *eq  f  hf  Tf  @ Hf  ,.:> CLB0:[1,6]SYSSCAN.TMP;1:> SYSSCAN.TMP;2*zSY <ʵeBCrrU>p &((f# xf @ ^    r  rf T!Qܸ޹η1SksȸHUAB not found in listNo startup transaction foundExiting due to errorBad transaction length.%N block(s) of secondary pool may be lostTransaction not in secondary poolUAB listhead not zero on shutdownTransactions follow SABExitingOn scan file openOn scan file PUT$Error during scan file renameOn scan file closeOn scan file deleteCan't write transaction fileUndefined message number %D. at PC %P Directive error. $DSW=%P PC is just before %P FCS %3A error code = %B %Nfile: %2A%O:[%3A,%3A]%X Can't close transaction fileCan't init new blocksCan't init new blocks. I/O error = %BCan't write attributes. I/O error = %BCan't write attributesCan't open transaction file (by ID) & & @( ff  e ee e &f& v ('&1 > >l , >d > , ,T ,ð ,À ,Ô >5ew , Bv     5BwZ |00XXTADATADATADATADATADATADATADATADATA-z? D- E %     U EU 5  $5$UW       E5 E  W ч5  ,E &&&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&  m  f A N  %&ff  &[q &[q, &r >[q}R ,E`Wf|,)) AY SYSYSYSYTICLz,XzVBxSYSYSYSYTICL()'X,|X  ?\)Q|| | || MCR && & & \ z t w4 :W0 WZ W9WA wn P   " x ZZ ZZw x SY:SYS$LOGIN:LB:CATCHALL%vQSYD \SY !% wd0 675@74x9%F \^400X|XNZ0+( ^ HЕ:\ J\Е Е@7Z\ H97 7 % 8 JA    ,2\ 97 7 %j   b  wN\ы W Pwb& & & &f\& & & & & & &  åå$ w<&7PPP&7 7Е  &7 7&7 7~eB8 N RUN $/TASK=/CMD=""\C x! j \\ W ? BWte9Ee0P     \wPɋ \ W Pw& & & &f\& & & & & & &  %%.E& f\& & & & &  $)wנwN T 7 r7l \ 4ȕ RwB\Х: ȥ: NFT~CA. -- Command lostXXXXXX -- Task not in systemTDX -- Unable to spawn MCR to process commandXXXXXX -- Line too longTDX -- Unable to spawn INDIRECT to process commandCVT -- Syntax error| xt6  VR% H-D  &"  2&  B } z XzxZgB U(s JvD$QT7RSTUVL5=D2@<</BZ^* v#6  ЋPj G~^VTOUH:AU:. TDX -- Version 14.00 wPIP TI:=ACT /TERM=? w06wf\ ȋ͋Q\ wSET /DEF=[SET /UIC=[w\ȋ @ȋ ,͋Q ѕ]\ww\ȋ @ȋ ,͋Q ѕ]\w\DEV /LOGSET /SYSUICQUE /FU:ALLACT /ALLSET /DEFSET /UICNCP SHOW KNOWN NODESaOX F;/&\ȋ\wMAI DIRMAI READ wPIP /FR/PU/DE/LI=TI: \ȋ͋Q ʋ\ wDH|Z yyx"!!T x 5Kp&y(xWzb"H! z;"x(.xs8@y PD wjZ(\ ~f\ Е.e  Е.Е,  Е.eЕ  eЕ   Е,  eЕ$" eЕ% eЕ" Е< A Е>  Е<  A Е>\\d7bwH|e7 7 7 7 eeee -t-r?`-^-T?H~v?t7 :/6 ,\V-?pJF:?6 ?r0?,/e/e 7 ׭+׭-׭, ׭ ׭e ee 7 ׭+׭|- ׭t,׭l>e eeeN-J? z<׭6>׭.+׭&-׭,׭ ׭eeee -? ee7 ez7 ne? b0t@`?J7ev? r4dp(`Z@  +-,0@*/І <ȇh0*/І @6R `Jn+-, -^hf$'"%ȁABCDEFІЂІȁ$.#8.  ҆$2A6 5 ߥ& *  + 23E Ew f   Е-   0@A W e`fÊ    E w d ww T pww F bweB  8 H$&w *(5<s1  U U@  `f&" ~)'&M'&&**%*%0 *&* *5ND  f<  EU   f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &  m  f A N  %&f    f  >5>Eu d  &ff w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w>(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w 6 /$ ,:T < U@% DD%][%><wt  w1  %,,:4 w r*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce X   *w z*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ w f w \& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 0+1(e  @%&p*w f( f)f `8Ae f"( UCɗ&+(e$&% **(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C`00XXN >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w @&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@|~,JJ\, Y 2h TITISYSYTICLWKOVVγhb TITIDUDUTICLDUDUo?M+γVMγ5pwLw@b7 TKB>$   @ %2>KWdp}8(ЬxhXбHgpzY  dDSYSYSYSYTICL<('TKB -- *FATAL*-Run aborted XNN  e , . 2 4 5 0 4 5  0  0 5~    w 5bC ŀ   Bl f50  -F <5.$  X 5 wVN wVPwd  $  f&f x7H nw77  `wh Xw\ 7,Z7,R  4     N@     $ $fE7 4`  8   5,5,   u$ \   1,1,J 1,1, &` e m 7B &6 e$$)d 5w b & \A 7@m7 *1 C7 pM  w"   7 / h *w  7w~ F `00XXTADATADATADATADATADATADATADATADATAb TR efA   ^w8 l7,w*  x  z& &% N  V    2 T s ew    A |C  w CB * Z54w beC %E& 7 ,Bd  wddcAcAd 7A T&e Cm  &m`e` ` f`B` JN    (     `p f& `, ,, &  mV  B ce w eE D` bl lr  eE ,pJ`2 " &e# f (  & eB%e1be1^1\1H1J1L1N1P&&f t h e ew  E r A B` d7^pA wL w ~E p ( B ` p 7  A @ae  e?E? & f Y  |0 B ` |w f E @ jw`K`/| & D -N    `  0    B B  @`   B`x * J   v  m ` @ f& &3''&1 H& @) 8P* 0$\( (T lv      D3 \T5 \6 \N6 \*: t4 :J `xL|`NLTxR \ t cL, xjx'ox'rx'u4 ` |$|~'h''$|`l383@ ,D34,P3 ,\3,h3 ,t3P,85t5t4JÐ4JĐ4JJSYxQSYySY^SY~xQSY_SYzjL_LB[1,1]SYCC@lDAlLB lcMPlSSlMAmDL`lSHNSPOCR@NMA WI NHDmPIlCOVLI VCPmDAlFP@lMMNPIlPRlSQNTRlXTNAClEA lHDmPM@lSL 00XXNlMUlFUNROOALmCMlSEmIPWNMVCOVLI VSGWXHNIDNELVFMVCL VSBPFO@V<(Rt5b 6 we w |7 5 b$} e ˋ   ! " dwd w @pdf  B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e & ĵ V 11@ Be ~w *5 funhj uhdB$ 0jwaw< 8 v8w &  Z*AdBbAep& f  . P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ *ŀajTI& af* n*`V @e,w Njjlj ɥ@@aujk,bp t5f fˇ ȕ `‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *6  w  8jDl@ TeBT85l@ T@( D ReB& t & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@&f& v  6( & 8P6 89 D3 P3 Pp8 PL9 \< \> \p> \7 h3 reeȵe ~ o DEP%(5 eȵPe< &e  %&$@A 55@558 eBeeeȵee&e e4   QB4(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &JA%?%2%%%LB[1,1]ODT.OBJODTID.OBJ`>@ w ]$,  wA b&&d3 3 %eB A  J\&%5bEU5 E5UT  Be H 3%s ]@@M@X7 7 &&$&! &&"e 5'U7\7^h&$PP `E00XXTADATADATADATADATADATADATADATADATA@> $w  7w&4 P:N w$&4 be&ew B@P@P dbd7 ^  w,B &&&$v$ 55 &~%$ (b e5 | V&$7 B  xw4D$&`9  r ` ,\NL  < BAbpd Bfwh`  %/ -%/*%//$ `¥¥¥ ¥ ¥ef @U۱eE %&T%m    b   >,7 7 8 f |7 H %?l% 7 6 UU ^@7   tf ,wP  wh w^Ub THDڠw6w7e @ r7 5EE07 7 <هK w Xw      7 7 7  W,( 7 7 # D %* 7  7  .   %A B   X A J7Dއ  N ڇ && 9? LvePHHJ d 5@ T  wDT 2 ze5 H(b  ֆ9` &&5 b& >& P3 P"9 P3 \T5 \5 \5 \5 h3 h35uuuu w  " &w*%Aq#q- '  .' &'֯.)1RC)a)߱`))'3' TKB>l^SY7 %7 <e`'  @bp$$ 0 b (@ef7` ȥ;ȋ&'% % % % ¥:uu r v & W j e)&I#q-'eW '$0ef` ננe נ^נ  A5 ¥;U%E #w (w we) e)( r *e) e)) l  t* U% ¥;¥,Q d Xe)S#S- $ *I  $%QQ *& N&1 &f Je f  7" RRRAC`e R?j7f% ~' ܷ 'e`P  &,@ 3@8K@oMBaTq rt@,YeYxx@Y`Y5 D3 \T5 \7 \7 \7X[<$09AZ (),-*! ('('J(l('.(.(.(7 7 7 7 X7 x% P &%$& #&$$ :&B   r0%Iz'%%U^Z7 XO %J8D5M5IE   $ &ͥpͥ&Հ7 -A# ~ x( %3%2'եJ   H b#7 Ewͥ'Jn# %.wȋȥ;!&%  &9;5&H1H/H-HH)HH%u '00XXN +w &W'(&W'  p''&  e)ȥ:2ȥ./ȥ[,ȥ<)ȥ/&W ! T & fAf J !.&dd,w& ȋȥ-ȥ)ȥ(ȥ* ȥ,  ȥ[ ȥ]  Z , p J A A N>,B &&5 b& &`90 p5@ w|l hrbf 6 %  e 2 $ ,8P6 $\T5 \5 \7 h31o?y`((|(((^)`(`()*R*% 0 77 5E% P &% L j @ ,% %!&@5h7H7L 5NW   C 78`7`& 5&@   2ܴ d ppp Ue t NAF  T 7rœEz'5U   5pppp f& fp5d& Np5Ufup 7w x ~< fwX2 5pppp u P wJ   z & .  D wwe@e |2 f5e  j5  D91 G@ dw e & Ne 5U `e5  ! 555U- r5Z5R 8u58 $uw8% *$) ] eE BEE R  v\T5 n\5++z+z+z+z+z+z+z+z+z++z+z+z+z+z+z+z+z+z+++++++++++++++(z+z+z+z+z+z+z+z++z++++z++++Z+b++Z+b++z+B+B+j+R++J+++++z+z+++z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+++++/+++z+z+z++++s%+&0pA&40}C&X0J&\0,M&0,s:O&z0/^ 2( Enter Options: TKB> @,AZ&w Z  5 ta.(R 7 H•! b& Ba mۀ  w^  f^ V  H ed7Ae R1΋ ,ۿ  ppU@pMx %e d >-  AF ߱ la   X݇w " vw  ln  r7"j7,d967EA3"3,'5@5E-V  #  B`  E   e3#3-  ڱw P&"P(V(T( &5 w & ڷ  H7w  h &  #% t D 00 01 <+ <+ <0 <0 H+ H1 H2 84 85 85 83 8^4 85 \T5 x\b7 p\7 h\\7 `\7 X\7 P\R700XXTADATADATADATADATADATADATADATADATASw  e wwׇ@$  "7$b7Z  e h?27. PAPАP 0wJ4$ww@ w^W# wׇTw 57 7 7 e EM M M Mwׇ e  ?\7X PPP 'z'eelA<  bppp< p0   ֿ   p H w.& wwև5 mwNLwFwD7 B- 4. .lw&7, 7,  U N&a nw&a Xw&a BUwU% W# wwwՇw:@ A @$5?75?3B B B @5 *`=% 55  5t7:78wxշ$շ"T@RwhW#wև5wT w$և6  AEBH(C C fՇ   AEBH(C C >ՇwwՇwwՇU% W# wwwԇ6wwՇХ[ 8¥,f (¥]U    ֱ& x¥. z n w#6W#w,ԇ1wBW#& W#Baw. ҇ ҇wW#W#wӇU&  ?7 PH p¥;m¥! ȥ;e' ¥=7e)b&t#t-e !'87  ȋ-ȥ;*E'  L ¥,¥! ¥;¥: 5 !a|   p'dw *&" PwV7PJ $fe& 2;/!,,:0 , ' R , : b :,( 4 :  5% w 8^4 \b7 \7 \7 \7 z\R7LB[1,1]LB[1,1]t.j./t.U,  e |7+ B5.5&GSYBe ~+eB e  yRB,5, D0 %Cwt7 D.& C! U@5    w: D#   w" % Ced5(   p   c5bUU@5U5U@5 U hU @ @E @ @ @ 7TQ$@P  5U@  e)+555b5u u C55a 5a  V Lw% A7 7 ~G+A5U@5@$5 X 5PA=LB Be@E?B B B@$5  =C: #w6AW wUz\PAmwFA w ww`FXu-5ej1`  (e)wp+QQ &&$&&$+& &$% Be>w t,(7 Dw BAbpd 6fwh`  %/ -%/*%//$ `¥¥¥ ¥ ¥ef 4UԱ *'fB ++  5.U.5-'e&  z t@ ѥ  u N#N %7 mb҇ D3 zP3 r\< j\T5 b\5 Z\~5 R\9 Jh300XXN? @`_?+Units set to maximum assigned---=5BF B w, H`e405*5& F5 \ =  w׷D׷BQ"  5`G5`+ 5T% "5ݻ++5ݻ++56Հ+Հ+ 7+27+.״ +̂m+ַb֮+^֬+ H555Ю+Ь+  & & 6d5@t-$5t- 5    c$A A+N ׇN65Z  5 5 %  5@5 B  f w2B sœ  vwth.w 5 5       ` `U@w< + Bw5|5++w 5T5 f 5Bw  +fwx    5 5Ь+ 5 +Ю+5 z4 $55 w w  w w w w pp5p5 5@U@p` p`|+ A ݜݎ ,5( zvӇE B B B B   + Œ55+ 7 E++w &fA< z7.& % ,4, %&f E U40, U 0,  5 g wihkh 5l ++ +  + Œдfe  x+ Œ + ,( j7 R7 7 $7 B7 @7 H7 @7 H7 7 67 47 67 .7D7 7 r6 P ^ 75?. %A A A w > He & 5  5 5j5 @$ d.A h  L  AP  eA .   Հpp Zw \T5\"^""H*t*'ɪyN0tN sN0sN0 s, t ~, , ,3XRb*,,+w  n7| -x@ <5hH @ 5F v n5@6    Jw v  rw @e"Kr•@- Jr5;r5 5K5    ȵ d Re 5D'%B# -<5@0  év~he ` :5@ r 5 PH4 787 < 0 *PPh Vw  -D5J%Hȕ@@ @b \ @  07f ~?7wA  RwR ,7  z v  * `  7N7H & Uw ,&  " 7w  ^&  #%   7 7 7 7 Bfj& ~ 6vw7(e"eB$$$e((<Tw<L  w<B    0w<&$# z`  %W5@5 Of &F 6vwT7H7 *7<&5@   "  `     R f  77wv , 7% x0( H3^wFw w *e f6    fe ~54  91  N&n  &5EEEEE@E@EE &&fEE# %%2, %U2,  5 C & P &  7JV% J%,D7*%.?-~1n5X%e N l5Rrr   7 | xCœ5H5µ  (l 5) &5U5U5 EEw,, w,& m35Հ(n " 55 3l5 5-N ,h,be,5%ɪ%J';'%Jr;r%%uf6E% &%[q%( v w6w, 9eeb 5@t\ Y-LU5R5O5L5HUB Z@` ߵ d 1   w 0-( 5@  J S 7 5w5ww|ŀ7 B-T &fH @  bw: Հ|B 0 rw 7T7Fw>:7 :70 dw\ 6Z   $%F  wE µs d ^n  wJf  55 5  B F' 7w p& L()t d .0 Հ% BH  .%8 .  wxf 27ܵ ߇w C57(5l  H ! & PPJ  ܇ xt rnf N`  "  r 3,5wR5w>55e5@2 5  5e w`55Հ m0 0  ,E L 5 Հ mx0 0  0 d V V ef z%4F e * 5PHtt vwN mَ  % fV D܁ 7 1 P5f] ܁w 6f . F  ! p` p ; p p  |5 -5@) N7 d  7 P &fR &B؄ww5- T%& F!5U     @ 7 @w eW! A T 5\5T5L5 x ,,ՈB  e&4e w  wFؔw wxe ff &w   w & f w<  R  & ff ,  N   ! U &f& v 1o :D3 2P3 *\< "\p> \T500XXN"B"%%\&f"--\+ !!2"!J.//$/2" 7 \h&1h8 f  4  J57 7 $ 7  J  \0 h  07bf P?7wA   wl ,7p h ^ ZZ  * `  6727, & Uw & V  7w  6 &  #%   7 7 7 7 fj& ~ 6vwl`7\p(e"beB$$$e((*<8w<0  w<&    w< # L`  %W5@5 Of &F 6vw77 *7<&5@   p  `  D    R f  7wv  77 * Al .`  Xw $ F 7 2> 7 5 %5@f  t w  7 m@< (7 5~  few r  7w81 C ewBB1e? m e w jdwC 7` w  O  ` bE{Z &z3f7v67r& rM3  d$@e"    7&7"f "   w$&f& 7 E- - / ,- -  C` EP" , eB N  ^ `&fe l7|  ] j0 40 60  U]7 &  `     0n d@mhw f%bBmRH P @ m",B  `  |f~w"Q$w7     7 0%% h@   >B1  @   B<44  w` ,   D7 5W,W,sN5 5 j<wL x Beʵ *ʵ F5" 25v $ b-\f&F >B!FU@:& <@ >@"- < e 0 @>@K@0 N@w@7 < @ , ( % rj H>3wH@w @w8< e $f6  R>  fne 2 5  B91  |N&"  >&5EEEEE@E@EE &&fEE# %%2, %U2, 5 \ C & P &  *7% %,7߃l00XXTADATADATADATADATADATADATADATADATA%p?- ^1n5X%e `N4 l5R<rr <  7 Cœ5H5µ  (l 5) &5U5U5 EEw,> w,8 mL35Հ(" " 55 3l5 5- ,,e5%ɪ%J';'%Jr;r%%uf6E% &%[q%( vD w6w* 9eeb 5@\ |Y-U5R5O5L5HjUB Z@R $ ۵ d T1Z   w r-jL 5@^   S J7L "5w5ww|ŀ7 nB-ی &f T bw:  ՀB 0 w 77w|7 |7r< w\ 6 T $%  w4E" µs d n  JwJfz H55 5 R lB *> X7.w0 H & L() d \p0 Հ%T   .%  | wxf 7ص< ۇw ZC57(5l  H ! & PPJ  |ه xt rnf ``  "  3,5wR5w>55e5@ 5  25e w55Հ mn0 0  nE.  5F, Հ m0 0  0 d > Flef . %RF j e * 5PHtt w dmZ֎  %V fV ؁ 47 1 5f<] ؁w 6f . Z ! p` p ; Bp p  5 -5@) 7    7  &f . Ԅww5- %& !5U h@ \   >@ 7 dw *eW! A T 5555 nՈB :ޡ . &e&e <w  (ww we f &wxr 6߀  w *P& f w~ R  && ff l ,  ^ݖ N   !, U &f& v 1o D3 P3 \< \p> \T5:00XXN<VNTI VNSYVNSY[gNSY[hNSY?yOV\~TI\CL2VNCL@GdFH04CXbbbNPRTVXZ\^` ,3X s,w Zv 4  :D  (D  D   B U%@eA D `e U%l (%?%  D   ?j7f pedL 2  e hb7 5e@5` 5e5@e,e7   - 5v  eb5>5;F B5Q$BdBdBdwd&@mZ@d mT 705b@d@dET2D.W e75!5&5@e2e?E? E @`eE 7`  =P  eN  N  D   P  aU%5 % l%ddZ dC < 5bT@ e =  | 0=l 85 j ^1 aa  H !  BPPPP *@e"A &b Z <A  pp0< @ dDe" >77%ɪ- K'wD-J'w8-;'w,-3&w -3&w-2&w-#&n <w & z  :7w  Z &  #% p 6 )PV")&y@G xCcbp,1z?y 5! ! ! H# z>2 rd$ jp% b\T5 Z\B PXR b?! w DCet BEA% p5f&"ŀ550 00 -J5 e$DCen h-5retn" 5\^5@T4 , 7r&e  7xf &e 5e w Hr Hb5@ wrDe rwx5De VDe H -n 4  TTT5 L5mZ55e5 Tdf  c 0e %w n7 l n 7^5Xp* 8 RB *54 2 5& 7 ,- m  V%  5 rL` 5Jm>(    ww@?  u~~@wCa 5HS@Cw^`a  l& A~m w fw` H 5*'Cw b a Z5b" 62H  .AB .5*ފ w~5~fe@ u߮  5 . tH T " 7޷ A~B& Kmހ&^ d  S& H Ee 7 &  7  5$  v   5&   w 5     w 00XXTADATADATADATADATADATADATADATADATA 7r ^ 7!5^ H 7!܇w  7 5b  CC T@w  w6w2( @ w5  & w 5   P V "uuf7 2@   A  lP $ & @@  -25  5A5 5~A5  : l55Ca XXJ  @  .55 B  @ uu|u~uw h`A  l f      b 77- v5`5`~ fAAAA R  8uuf L "w ww w J rr @A@A 2 2      @@ w3,@ (4`,3,-ڜ4,  4`, ew F l B\ ;w ]"]tU.5*5& w 8 75p w  7  &56 5 N5  5 05 7P`UZ5 UF E    45  5 5  7S5 5 H r-T  f xUA2 , ] ] %w-!] A  f@ $ . uft t5P 7S< 8 -Z׬  UA2 ] ] %w-!] A  L@ |j  ut t   w  7 n 5\ w 3 <AA @5  U e   -   U  -|  \  "5D    K  D  5t eE  Wt Fp >L22mF-f fm r` 3L F2lL 4F@5e&e5r& L 5 5D5D t /  @0 0 0  Zf&  73 3  77w( ( 33 43 t-`*h $& Հe33  3   RԀ H7F 55e  ( @ &< h 3 3 3 3 3  w @e L5 Cµ @@<5R5RµN~58"5 %Ncc 55  bdcc h  Jcc Tޖ @`!  @`A@  f  @e?  Be E0zӀ  0!   4 4дE @ @ @ 5& 55z2 jn% X% & ۂ "lmчfh >Xe"e    &f d  & pl5 5&% n&f5  Z&5 5plw plw X\T5!@@@  *(* ,.|!$T!f! d!h!\bR!"\ \V<t!:X!w!N!V!!00YXN^"r!j!l!hL!z! x! !X4!!&.d!0VL.n!p!!!!!5kw J,mMe m !D7zt`# J   2EA Y   \ e E   77Е     `D% |5mއmm5mޘmߚ|wRw F7 j 577Ebr! 0LP U U5U5xU5tU5` 0mp 7 m^7 l" f!  (0LP76m7,7 &7 5 5 5 m7mL!=R!  e>77`N `AW  %W V p emwe w`ze5` d5BemPT   :% ^!"d!5Um7 m   >5m !5  ܺݵ'\ b $ 5Xn(7 7 4 77 f Z5"&I 7 < X 0 D!"zet7  6 #^ Z7 7 $7 %7 ,CD5Efm Le  >ECf  &  e&A e   6 E'E@Ce5@8 % &%([qe   Ce- 5 7)  6ځ @e Re?E?  Ej  >e" b A @ m8ڡf w t 6  zt  w, h   ڇ P&!!4e6(# J l 7 @ 2 2 )2 2 -ج ؤe wۇ   j b\  ~  H7 :7 6P 2, .2`UE g  0&f  m   |!!4e6(#  $p!f&  )f` ! w \7 @7 > 7&!, .   27 7  4w & H5 aC|w  72 .ط ,aC`wv r xf`` ׷ b  R #f  ,&,!4e6(# d  %  U? a #  ! ` D4 P3 \A \A \T5év~ 1o rTw 5r{7  N7\5V,%T( -N5@B" er 6& e"n p `7 x7 7` &|  r 7 # e"A  x m   T @ H %T5F5>50 0* 7 5 e00YXTADATADATADATADATADATADATADATADATAE@`   m7  ` bEw &P .#  xwzE B a $7 &  Z77 7 w F  m^777w " m5&ml   ~m7zl 7z5)m7blw mm 7Tm7:l 7:w   "$pl5b^mmw & F  7w  & &  #% |  w z 6  z  wL n   8 V&4e6(  l 7 @ 2 2 )2 2 - e w    |   h7 Z7 VP R, N2`U2E( g  6&f  m   |4e6( d $pf&  )`  w b7 `7 ^ 7F>" h , 87 *7 ( w & H5  aC|w  78 4 ,aC`w     R f  ,&$L4e6(   %  U? a    `7 7 7 7 fj& ~ 6vw7(e"eB$$$e((p߷<Rw<J  w<@    .w<$"# `  * %TW5@5 Of &F J6vw77 *7<&5@     `   >  R f  "75wv * N7 \A \A \T5-)4-())T.-))))**+&+V+(*-2***+B*++++++++++p,j,--$,0,^,*,w 7 7 '  5 r5 d5 ݷ N5 D R  t R R   7 >%% '5j \~'X lm7~' "W, W,s,4 %%  x #  nW, W,,  t l   j X [v܂` fw@5 :7 2mE  ~' ' w7  >&@A 0mڀep o g c & eZ & eP  M v E & e h% \"&ReHe?  eE  B B B P v7   f& be   T& Pe"5 5  &e  ۀ^  v& e7X &  @A mـe7(m w؁ mew)0 8   ' w d2 J J D,Db@T&~/ e H ۂ    J   ~ \w   1 A `A ~ & e "  %wL7[5G~' P  je v*  d@5m  p5@(  fA T@e j47 #  ~ E     sN  7 00YXNV P7 L F؆wm>:64ww"H؂` 4٦ ^ *  #A X55 5@ @@ mRւ 7t 7n n %1\%oVm N'   R  p` F6,,  %% L1Pe|-x =7:%  3 .ŀ+%~7~$%pw`l% ^7`%PR @ &D< e @ w 5bw`%pwBP 75R~'7f5`U`EQ 5Um   V  7E  ,y 55  " e55c p5@ ~'p eEp r frP   m 5245T, 5@" ~'p eEp rP rP   m D~' A e  `e -.  ' 55jD nD  ^5D  J5.e 8 e' "7257tp 5 7j H  5 77lw |e 7555ll5Rx &h eV7E dEn  r57 w8. Eb @5ZEVD :0%0%5e" .% m l R 5X7  e  U5@,%J%` m& m ؂eeA A ~'  ׇfE | @m5 @ @ @ 55~5"mp,>5 fE  B%  @a%:5& 75m A A A ,3X s,w 5-7 7 7 7 ' h7l 7&fEjEA @ 6A "$ &5 `eN F &8' lE R e 2Dm& e  * 8  Dm& R R  hw ' Hw' 8w~|5 Lf@& <' b'     2' 'PH   <PP' w Dm& ' z7fEjEhwA V LA "$ 5 ,,7lV VHP VH @me, w   R rT,` 'w'u u u u C eE P75 5 5 wn& e&b e & l  e hwE    f eA A* e5"5,$    &-P 7 PmVRPe &r mF 00YXTADATADATADATADATADATADATADATADATA df w P B74, N5@2 #  ` E@ 7"7 5 &  zj  z5@  4whw Lne  00  w  5@), 5 e  L 00    d e d 5@ Z5  d# <l ~ 7R7 D7 Bw  d2^.m777w v mB 5zmrl   ~mn7l 75@)mP7lw mm 7m,7l 7w   vxmjvmfr  ߔ l ` * `  H7h7b & Uw F& h < (7w  H &  #%  $ 7 7 7 7 fj& ~ 6vw~r7n(e"teB$$$e((<<nw<f  w<\    Jw<@># `  % W5@5 Of &F 6vw77 *7<&5@    r d`  V    R f  7Qwv F 7 \T5L b 5 mm  &&&  eJ   eBRRR R Rw $7  $Ýl3 XE` A "P5 $f dl *lp ` ^7 t$f &@ͥ 7 Zͥ  NՋ ->,7 7  3 t$00&YXN-`4 :4 *ݡ  <ߊe 4 $=$"e< :5w \ dh -pZh4 T% w (Ee" 7,7(14 ;4$l zBl v-(55  m233    35m \> |\*:ODT xfr address: %P%NPRG xfr address: %P%NStack limits: %P %P %P %U.%NIdentification : %2R%NTask attributes: %VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%NTask address limits: %P %P%NTask Address limits: %P %P I-Space%N %P %P D-Space%NTotal task size : %T. Words%NTotal task size : %T. words, I-Space%N %T. words, D-Space%NPartition name : %2R%N%P %P %P %U. %VS%2R%N%P %P %P %U. I %VS%2R%N%P %P %P %U. D%2N%4N%X Overlay description:%2N---- --- ------%NBase Top Length%NTask UIC : [%O,%O]%NTask name : %2R%NTask priority : %M.%NMapped array area: %T. words%NTask extension : %T. words%NTotal address windows: %M.%NTask image size : %T. words%NTask image size : %T. words, I-Space%N %T. words, D-Space%NR-W disk blk limits: %P %P %P %U.%NR-O disk blk limits: %P %P %P %U.%N w    =3 ^ ) ") *' ҝҝ) $|*  $ m@؊ vيh' rX%' dn%' R  (54Uwp = E5UB@@P+f/$A5R w= U% e U%  ' h$ 2+ $Y* $v T* $\ >8* r$5b'Z "~7 v7 t7 f7 d$ $''*  v* 5 -,2 -&,--$5 ''( '( ֊mx5  ֊mfZ( =( 5x4N 5B * Z5 (& + >' DwXmTZw TmHN  e  - x) ) ) 5 . w 6 $-*| " "    m %\\  5*.) & -*Ւ"    H) -AC,-AL,-CM,-CP,-DA, -EA,@-FP,-HD,-PI,@-PM,-PR,-SE, -SL,-TR,-MU,-ID,%N*** Root segment: %2R%3N*** Segment: %2R%3NR-O mem limits: %P %P %P %U.%NR-O mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NR/W mem limits: %P %P %P %U.%NR/W mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NDisk blk limits: %P %P %P %U.%NDisk blk limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%N%2NMemory allocation synopsis:%2NSection%44STitle Ident File%N-------%44S----- ----- ----%N%2R:(%VA%VA%VA%VA%VA%VA %P %P %U.%N%30S%P %P %U. %2R %2R %X%N%3NGlobal symbols:%2N%F) w &-d '-.'Pڶ 65-\("   5|( x~"   z -p-VXDJ' V5 ( (. < 5O"@I5J@J@   e ` (5B# 5J@J@   e ` ( !) C) c) l5e00.YXTADATADATADATADATADATADATADATADATA&e5c&  [ $ ,4 w w 5mx7  )7 x e (  rB x40( w R.J p5RaU%U% %$$ ) )w F $$; 5 5  mRmp bp5   )  w p7 ,s&-) e" b'' U  mN''$   <  (   f  H w Z |a 7  R  RO,RW,D,I,@GBL,LCL, REL,ABS,OVR,CON,SAV,$$$,%2NFile: %X Title: %2R Ident: %2R%N <%2R>: %P %P %P %U.%N >>>>>>>>>>>> Undefined reference: %2R%2N%7S)^()`)`)`)&)(((((()(f)w 5w J < . h  '' H 'B J X ( e <'w e"  f - Z  ' 5%܂` &   p`  7 e" ' p pTR RRR ' f& dD r J '-" - wZ&' D h ' ('& > ' $   L$~&|&  f&&  e#e|& f&&G& & & & && '&&%%&&&&&%%%%%%&%%w ^ *  F  8%$ & $B  6 F% :` &77ww-l $RRB GD ŵŵ ŵ m*޷R &mwHŵ 7 ŀ07  m -\ݬ 7$  7 dܰp ` t$  5 `n$w N5@b5@V$PHPJPLPNPPPVPXPZP\P^5eН@ E@@3T D# 7P& E@` R 6'  $ 45 & w  5 j 89f"e\e!e ( 5f \2* eA  D3 ~P3 v\>sN 1o  ,  s, ,BJRZb  3X    s, wW!! !!!w  # n` (7b5006YXN50~5t-lU fU^@ TT *  e" v5m47 \55-1 D b 45 5!-TTR5 ԕT -  d    50Z-P , -@  V b Cet< rA  1,1, 5m 5 | %H !B (@e nw7 Det= (+&  + w      e` ,wnw (JC*TEoU`5 TT  ""  , X<   ""w->3XJB a >&! - "  4pSA {RJ33m3 3d < 4 , @5\ e4  e&&  &   #wX   3 3 4@ 5 2w6  5 555  ~@e"4 t4- 8   7, erA  ",œԕ5   mE %  L5 5 D *555 UrA TTԕ@ԕ f  B 7Tb \ *" 4 w 7:76 @w,v  $ I wB  7       7       ~7vW!i g bB w 8@   w @ 55 *@a \@@a R $ & . @  0w> ,w6      w6` "eP PPЕ %L !B zp " ` `w e  00  ^r&  @ p`    &      7  7^& e P=wD   w( &     m f Bw( -& & me > @l55 m  @  w z& . p 7w   &  #% <  . $   * `  d77 & U7 7 7 7 fj& ~ T6vw7(e"eB$$$e((޷<Tw<L  w<B    0w<&$# `  j %W5@5 Of &F 6vw(77 *7<&5@    & `   ~  R f  b77wv , 7YXTADATADATADATADATADATADATADATADATA D3 P3 \< \p> \> \T5RO)(3RW((3SV)(3SW((3*(B .++  &• H   ; w;! ,:/:& u@5e, R OW w5& & ),#!#[ ] / : # #  \#f ,(H: @ 55 ,.@ (; $!3ȕf  5!5!U,5U,3ȕf  5@  w<ѷ w w -ЋSVWU w  ť ť 0B HAa&f& v f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e eeȵe ~ o DEP%(5 eȵPe< &e r %&$@A 55@558 eBeeeȵee&e e4   QB4w V w L& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &00FYXNw *8I 0*=)98 Z eB &&  U L**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w" 8 !Հ)w*w**8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wj f( f)f F82e&( ׀0 0 0 80 B0 0 0 0)#0.)"(. <= . B  E (.8e2 ..8em,0l0!D0e6p 4.) ^&f (  e) .  e6p 4 &08*w=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w FU8UMwR w0,0, f 톇,, w N     .% eB U5UU plp & NeՀ)* w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# (w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ v#( P) <@#**fff  &*wp. tB5(8e$8w2A&(e 64p8q  (#4=A#@)( t *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 D0 @0 &*0 @ X& & te# eB&B B : *  eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w *(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  X1 >w x*eB 8  w N*D   wf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wZ141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=uf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( π0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 00NYXTADATADATADATADATADATADATADATADATA 81416  . T  ,*1 ,U8UMwF w NB 00fep=& /e`pwv46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6 %2R %P%2A -R%F%X Memory allocation map TKB %2R Page %M%N%2R%15S%Y %2Z%4N%4N************%2NUndefined references: %2N %2R%N %2RTotal task size: %M. words%N%4N*** Task builder statistics:%2N%4STotal work file references: %T.%N%4SWork file reads: %T.%N%4SWork file writes: %T.%N%4SSize of core pool: %M. words (%M. pages)%N%4SSize of work file: %M. words (%M. pages)%2N%4SElapsed time:%3Z%N%Nf  сeE  ,*( e(  eRRR 6ئv2 pbeBeRRRRR R R  X&5@e "ppple5let · p34e6(3 H xH  · H p34e6(3 " ,䇷  ·7 w e·)w 7  I χ AZ    :ȥ: L8R8ȋ+& ȥ+ȥ-  U  f  u  u ¥ ¥ ȥ ȥ  JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECABDEFIMNOPQRSTUXYZ<>*60\ghp w ` ť ť 0B Aaw .܄(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA zEAa$ & & @( Rf  e ee e w fD&& bЕ- eaeyPPPЕ-$w 6D  &Е. ce  Е:   vBw ' UD$BA &( U BQ nЕ* w && D¥%  B&ХVA C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf z & e\6& eH/& e*AHŀ ȕ Е Е Е & e & eЕ A %& eA l Е A EA EЕ A 8A   $Е.  AЕ; L    w ) 8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w C# T   D @)  6?0D)w * ) R* w46l0w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   <v Ε f de * e*w@)0, R   Z) b)% ȥ  = ȥ l 0l  ȥ (ȥ- ȥe&=Ba@a e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  ,   0wL z JwvB #  f  `* w00VYXN)0406 l0 w  0,0w b w f$0,0w <46 F f)0406 0 * 5 ߥ& *  + 23E Ew .҅   Е-   0@A W e`fÊ    E &   `@ ` B   & A @    **0,0, f 톇,, w $     .% n eB U5UU  plp & NeՀ)*=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  j**=D  `p46 f @64/=  R@) 0  8w 046 8 e*w > =00l&8el2 0 *e6p 4 28  81416  l  F  8   *  4 6 .e6p 4&* R..8em,0l0!D0e6p 4.) &f   Ve) .  e6p 4 08*w0+1(e  @%&p*w~ f( f)f Z8Ae f"( UCɗ&+(e$&% 141612epl2l0pw < )  fU %  BA `6p 4p`4 %60 446f %8 E D/D!D l0l8epl0pɥ.ɕ w)"(. = . B  E p <(.,*1 VU8UMw w B 00fep=& /e`pw8e2 w   lw eB$&w eB  8 R$&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  p<  EU   w (ww ww | ww nBC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w"   f  >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w | /$ ,:T < U@% DD%][%><w  w$1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    d*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U00^YXTADATADATADATADATADATADATADATADATA@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ **0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w :&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@5696X6p666667>7\7w77778H8{8888"9W99999:=:a:~::::;2;U;};;;;:>f>> -- *DIAG*- -- *FATAL*-  DC!n   ` ~ F 4 45!75 3l &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( f  e ee e ހ= ތ>Illegal Get Command Line error code%2NCommand syntax error%2N%VA%2NRequired input file missing%2NIllegal switch%2N%VA%2NNo dynamic storage available%2NIllegal error-severity code %P %P %P%2NCommand I/O error%2NIndirect file open failure%2N%VA%2NIndirect command syntax error%2N%VA%2NIndirect file depth exceeded%2N%VA%2NI/O error on input file %X%2NOpen failure on file %X%2NSearch stack overflow on segment %2R%2NPass control stack overflow at segment %2R%2NFile %X has illegal format%2NModule %2R ambiguously defines P-section %2R%2NModule %2R multiply defines P-section %2R%2NModule %2R multiply defines xfr addr in seg %2R%2NModule %2R illegally defines xfr addr %2R %P%2NP-section %2R has overflowed%2NModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2R%2NInsufficient APRs available to map read-only root%2NSegment %2R has address overflow: allocation deleted%2NAllocation failure on file %X%2NI/O error on output file %X%2NLoad addr out of range in module %2R%2NTruncation error in module %2R%2N%D undefined symbols segment %2R%2NInvalid keyword identifier%2N%VA%2NOption syntax error%2N%VA%2NToo many parameters%2N%VA%2NIllegal multiple parameter sets%2N%VA%2NInsufficient parameters%2N%VA%2NTask has illegal memory limits%2NOverlay directive has no operands%2N%VA%2NIllegal overlay directive%2N%VA%2NOverlay directive syntax error%2N%VA%2NRoot segment is multiply defined%2N%VA%2NLabel or name is multiply defined%2N%VA%2NNo root segment specified%2NBlank00fYXN P-section name is illegal%2N%VA%2NIllegal P-section/segment attribute%2N%VA%2NIllegal overlay description operator%2N%VA%2NToo many nested .ROOT/.FCTR directives%2N%VA%2NToo many parentheses levels%2N%VA%2NUnbalanced parentheses%2N%VA%2NIllegal logical unit number%2N%VA%2NIllegal number of logical units%2N%VA%2NIllegal default priority specified%2N%VA%2NIllegal ODT or task vector size%2NIllegal filename%2N%VA%2NIllegal device/volume%2N%VA%2NLookup failure on file %X%2NIllegal directory%2N%VA%2NIncompatable reference to library P-section %2R%2NIllegal reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%N%VARequired partition not specified%2NInvalid APR reservation%N%VAComplex relocation error-divide by zero module %2R%2NWork file I/O error%2NLookup failure on system library file%2NUnable to open work file%2NNo virtual memory storage available%2NModule %2R not in library%2NIncorrect library module specification%N%VA%2NLibrary file %X has incorrect format%2NResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask build aborted via request%2N%VA%2NDisk image core allocation too large%2N%VA%2NInvalid window block specification%2N%VA%2NTask requires too many window blocks%2NTask has illegal physical memory limits%N%P %P %P%2NLibrary references overlaid library%2N%VA%2NTask image file %X is non-contiguous%2NVirtual section has illegal address limits%2N%VA%2NFile %X attempted to store data in virtual section%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NEnd of file reached before .END in %X%2NSymbol %2R not found for patch %2NSegment %2R not found for patch %2NSupervisor mode completion routine is undefined %2NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NIllegal system size specified %2NConflicting base addresses in cluster library %2NLibrary %2R not found in any cluster%2NIllegal cluster configuration %2NCluster library element %2R does not have null root%2NModule %2R contains incompatible autoload vectors%2NCluster library element %2R is not resident overlaid%2NSegment not found to address round%2N%VA%2NLibrary build not requested - ignoring option%2N%VA%2NIncompatible OTS module%2Ne"6JRJ w +$7! -bw "&f e"4J %w82 e"6JRJ w ޺ECF0J e-- z$ ' ĺ -:7",a(Q$ H"7`&ww A Rá D 00nYXTADATADATADATADATADATADATADATADATA|~,??Y Y &[q Y 2x TITISYSYTICLWKOVVγxbn TITIDUDUTICLSYDUo?Б 3γV~|γ5pwwr7 TKB> #   @ %2>KWdp}8(ЬxhXбHgpzY7"bvDSYSYSYSYTICLLD$TKB -- *FATAL*-Run aborted XN^. e 5 5   5~   w  5bC ŀ B| f50  -F <5.$ r 5 wV^ wVPwd *   f&f 7H w77  `wh w\ 7,Z7,R  D   ^@    ~ $ $fE7 4` H  5,5,  " u$ \   1,1,J 1,1, &` e m 7B &6 e$$)d 5w & lA 7@m7 *1 C7 pM $ w"   7 /  *w p L7w~  X`b TR efA   ^w8 7,w* ~   z& &% N  V    2 T s zew ~   A |C  w CB  Z54w reC %E& 7 ,Bd | wddcAcAd 7A &e Cm  &m`e` ` 00vYXNf`B` JN    (     `p f& `, ,, &  mV  BB ce " &e#r X  (  & eB%e1be1^1\1H1J1L1N1P&&f t h eFB e:w  E  A B` 7pA wL &w 6E p  B ` p 7~A @ae n fe?E? & f Y :  40 B ` w lf lE @ jw`PK`/ & D -N  x  `      B B  @`   B` * J   v  m ` @ f& &('&1 D<2# <<& 4Tl' ,xx% $  X * , t >3 ~4 84 ,4 > >5ew &, Bv     5Bw|  5  5 2  UE  $ ,"E U 5@*& E& & f&ËDef Ë )̋U&ff &f  $0 $x <$"0H"pT0x $H` $Hl $HT ",0<$(x((x,(x0$ $<$$0=(L(|,NR0 \0 t c\ j'o' r'u( 8t{ #PD,h~p(h8Pp(8\p(8D #,8(t434343x4355>>>H?$ |($SYxQSYySY^SY~xQSY_SYzjL_LB[1,1]SY,CC@DALB MPSSMADL`SH^SP_CR@^MAWI ^HDPICOfLI fCPDAFP@MM^!PIPRSQ^TRXT^'ACEA HDPM@SL MUFU^RO_ALCMSEIPgNMfCOfLI fSGgXH^ID^ELfFMfCL fSB`FO@f L828DV00~YXTADATADATADATADATADATADATADATADATA5b  we w x7 b5 b$$ e ˋ   $! " wd w @pdf  :B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e f& ĵ V 11@ Be 6w &5 funhj uhdB$ 0jwaw< 8 v8w &  0*AdBbAep& f   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w Jjjlj ɥ@@aujk,bp Z5f fˇ ȕ ~‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ pDlljaCeH###33 & 8 *bw  8jDl@ TeBT85l@ @( D HeB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ H<R% @H# 858,X $L<HH?A"?"2###LB[1,1]ODT.OBJODTID.OBJl@ w ],  wA BbH&,#d3 3 "eB A P J\2#%5bEU5 E5UzH  Be H *3"s ]@@M4X7 7 &&$&! &&"e 5'U7\7^~&$.PP `E@2 w  7w4 P:N w$&4 be&ew B@P@P * 2dbd7 ^  w,B &&&$j$ b55 #~#$ (b e5 J& $7 6 f xw(8$&`9  B ` ,\NL 0 x BAbpd ~fwh`  %/ -%/*%//$d`¥¥¥ ¥ ¥ef 4UޱeE L"&8"m    b   2 7 7 ~8 f 7 H "?l% 7 6| UU ^@v7   hf wP  w\ wRUV T<8ݠw*w7e @ f7 5EE $7 7 L܇K w w      7 00YXN7 7  W,( 7 7 # | %* 7  7  f   %A ~ d X 4A J7Dއ 4dN ݇ \&& 9? F jePHHJ  5@ Hd w8H n ne5 b  ֆ9` &&5 b& & L5 D5 <5 4>3 ,t3 $3 3 `5uuuu w @ " &w*"Aq#q- T% `J$ xlB$֯J&1R_&}&߱`&'$3$ TKB>l^SY7 "7 0e`*$  @bp$$0 b d@ef7` ȥ;ȋB$% % % % ¥:uu j n & W e) $I#q-'eW *$$0ef` ננe נ^נ  A5 ¥;U%E #w (w we) e)( r 'e) e)) l  ' U% ¥;¥,Q \ Pe)S#S- $ *I  %QQ *& N&1 &f JRe f  7" RRR.AC`e R?j7f% ~' ߷ , ~*$e`P  &,@ 3@8K@oMBaTq rt@,YeYxx@Y`Y5 |>3 t5 l5 d5X[<$09AZ (),-*! %$,%$f%%$J%J%J%7 7 7 7 X7 l" P 8#"@# ##$$ :$B   r0"Iz4$%"U^Z7 XO "J8D5~M5vIxE   $ 8#ͥpͥ&Հ7 -A# ~ x( "3%2$եJ   H V#7 Ewͥ$Jn# ".wȋȥ;!#% <#9;5$H1H/H-HH)HH%u)$ +w 8#W/$D#W/$  p/$ $&  e)ȥ:2ȥ./ȥ[,ȥ<)ȥ/&W ! T & fAf J !J#dd,w& ȋȥ-ȥ)ȥ(ȥ* ȥ,  ȥ[ ȥ]  Z , p J LA A PN>,B &&5 b& r&`90 p5@ vwp \fbf 6 %d e 2  5 >3 t3 581o?y|%%%%%z&|%|%&'n'" 0 77 5E" P 8#"  ^ " %!8#@5h7H7L 5N~W   C 7,`7T$ 5 $4 > &ߴ d Lppp~ Ue h BAV  x P7fœEz,$5U   ~5pppp f& fp5X& 00YXTADATADATADATADATADATADATADATADATANp5Ufup 7w  x < fwX2 5pppp u D w> z & " t zwwe@e p2 |f5e  ^5  D91 G@ ^ w e & Ne 5U Te5  ! 555U-f5N5F 8u5, $uw8% *$) "] eE BEE  >3 3(((((((((((((((((((((((((((((((((((%(((((((((((((((((v(~((v(~(((^(^((n((f(((((((((((((((((((((((((((((,(((((((((s"(+jLp #(+[q%#>+[qjL#(+zjL#"+[qz#"+!#T+t^"#p+:d&#+f,#*,yx.#>,[q1#F,|sA#p,r P#,;}DR#,T#,X#,yZ#6-p]#P-}_#t-f#x-,i#-,s:k#-/^ N% Enter Options: TKB> @,Av#w  5 haJ%F 7 <•! b& 6a mހ  w^  fR \ < *ed7Ae F1΋ ޿  FppU@pMl %e X 2-  AV j`a >d Lw Z vw P lb  r7"^7,X9F7EA3"3,'5@5E-V  #  B`  E   e3#3-  ݱw &2l%r%p% &5 w L& |ݷ  7w  ^&  #% t  f- ^. V ) N) F:- >- 6) ./ &/ 4 F5 N5 ^3 3 >5 >3 L5 5 F5 5 x5 <5Sw $ e wwڇ@$  "7$b7Z  e h?&7" PAPАP 0wJww@ wW# wڇTw 57 7 7 e EM M M Mwڇ: e  ?P7L PPP % %eeAL  bpppL p   ٿ   p w\& wwه5 mwNLwFwD7 B* 4. .lw&7, 7,  JU B&a w&a w&a ~UwU% W# www؇w:n@ A @$5?75?3B B B @5 *T=% 5|5  5t7.7,wlططT@RwhW#wه5wT wه  AEBd%C C Z؇  AEBd%C C 2؇ww؇ww؇U% W# wwwׇ00YXN6ww؇Х[ 8¥,f (¥]U  d ٱ& x¥. z n w#6W#w ׇ1wBW#& W#Baw. Շ ՇwW#W#wևUf^&  ?7 PH p¥;m¥! ȥ;e% ¥=7e)~#t#t-e !%87  ȋ-ȥ;*E%  L ¥,¥! ¥;¥: 5 !zap Td d%dw b&" wV7PJ fe& 2;/!,,:0 , ' R , : b :H% 4 :  5%dw 3 L5 5 5 5 <5LB[1,1]LB[1,1]++-+U,  8e 7( B5.5&GSYBe ~(eB e  yRB,5, D0 %Cwt7 D.& C! U@5    w: D# T  Dw" % Ced5(   p  c5bUU@5U5U@5 U hU @ @E @ @ @ 7TQ$@P  5U@  e)(555V5u u C55a 5a   w%A7 7 ~G(A5U@5@$5 X 5PA=LB Be@E?B B B@$5  =CJ #w6AW wvUn\DAmw:A w ww`:Xu-5ej1` (e)wp(QQ &$&&$(& &$% Be>w tH%7 8w BAbpd rfwh`  %/ -%/*%//$d`¥¥¥ ¥ ¥ef (Uױ *%fB ((  5.U.5-%e&  J D@ ѥ  u N#N %7 mbՇ & & @( |f  e ee e &f& v  5 ~>3 vn3 nh3&  m  f A N  % $? @`_?(Units set to maximum assigned***=56:0m&  %& V U- 1( NB w, H`e405*5& F5 P =  wڷ8ڷ6Q2  5TG5`+ 5T%"5((5((5*Հ(Հ( 7(&7("ڴ (̂m(ٷV(R( H555((  & & Fd5@t*$5t* 5    c$A A(N ׇN65N  5 5 %  5@5 B  f w2B sœ  vwt+w 5 5       ` `U@w< ( Bw5p5((w 5H5 f 5Bw  (fwx    5 5( 5 ((5 z4 $55 w w  00YXTADATADATADATADATADATADATADATADATA w w w w pp5d5 5@U@p` p`|) A ݜݎ ,5( zvևE B B B B   ( Œ55( 7 E((w D&fA< 7.& % ,4, %&f E U40, U 0,  5 g wihkx 5l (( (  ( Œfe  x( Œ ( H% j7 F7 7 7 B7 @7 <7 47 <7 7 *7 (7 *7 "7D 7 *7 F P R L75?" %A A A w N He  5  5 5^5 @$ d.A x  L  AP  eA "   Հpp Zw >3(!!B"L))B'ɪyN0tN sN0sN0 s, t ~, , ,3X0*l+l+ +w  7| -0 <5  j5N vr n5@ h L ` Jw r T Dw @e"FKr•@- Jr5;r5vr 5K5 R  H ȵ d e n H5D'%# \-5@ < év~hTe  5@ *` 5N rjPH64 77 0 PPh V6w  -5J%ȕ@@ @b \ @  07LXf ^?7wA  w ,7  z v  * `  7N7H & Uw ,&  " 7TwX  , &  #%   7 7 7 7 fj& ~ 6vw7(e"eB$$$e((<Tw<L  w<B    0w<&$# `  N %xW5@5 Of &F 6vw 77 *7<&5@     `     R f  77wv , r7% x0( H3ww w e Nf6    fe \ 65  l91 B 2N&  &5EEEEE@E@EE &&fEE# %%2, %U2, 5  C & P &  7JV% J%,D7*%.?-61~5h%e N l5Rrr00YXN   7 | xCœ5H5µ  (l 5) D&5U5U5 EEw,, w,& mv35Հ( " 55 3l5 5- ,h,be5%ɪ%J';'%Jr;r%%ufFE% &%[q%( v w6w 9eeb 5@,\ Y-U5R5O5L5HUB Z@`| ߵ d 1   w 0-(v 5@   S 7 5w5ww|ŀ7 $B- &f  bw: Հ|B 0 @ w 7TH7Fw>::7 :70 w\ 6  L $% X DwE µs d n  wJf H 55 5 | "B &h 7XwZ & L()B, d .0 Հ%   .% > F 2 wxf v7ܵ ߇w C57(5l * H ! & B PPJ  ݇ xt rnf .`  "  3,5wR5w>55e5@ 5  \5e w`55Հ m0 0  ,E  5V Հ m00 0  0 d  V ef X 2%|V e : 5PHtt .w mڎ  % fV ܁ ^7 1 5Df] ܁w 6f .  ! p` p ; lp p  |5 -5@)> 7 d  7 P Z&f j؄ww5- T%& F!5U     @ 7 @w eW! A T 5\5T5L5 x p,ՈB X e&e fw  Rwؔw bwxe f &w   w z& f w< H R  P& ff " ,   N   ! U &f& v 1o l>3$ H<h!!&%(%%!->-*@ l !,!-..|.! 7 \ ~0h8 f d 4 X t5P7 h7 $6 7 X J  0 h  07f 0?7wA J  @w^H@ ,7p h ^ Z  * `  727, & 00YXTADATADATADATADATADATADATADATADATAUw &   Z7w  z &  #%  V 7 7 7 7 Hfj& ~ 6vw$7p(e"eB$$$e((<8w<0  w<&    w< # `  %W5@5 Of &F H6vwZ7N7 *7<&5@   ( 8 "`   <  R f  7wv  7 C & P &  7% %,7@l%p?-1~5h%e N4 l5Rrr   L7 Cœ5H5µ  (l 5) &5U5U5 EEw,> w,8 m35Հ(z " 55 3l5 5- ,,er5%ɪ%J';'%Jr;r%%ufFE% &%[q%( vD w6wr* 9eeb 5@\ 4Y-@ܒU5R5O5L5H"UB Z@ h Zܵ d T1   w r-j 5@   S J7L f5w5ww|ŀ7ZT B-D &f   bw:  ^ՀB 0 Dw 7700YXNw|7 |7r w\ 6 T $% ` w4E" µs d n @ wJf2 55 5  B T* 7w B& L() d p0 Հ%T   .%~ t wxf^ 7Nٵ H܇w VC57(5l * H ! &L VPPJ@  4ڇ xt rnf @`  "  D 3,5wR5w>55e5@x 5  5e w55Հ m&0 0  nE.  5F Հ m0 0  0 d $ef %z V " Re : 5PHtt w m׎  % fV ف 7 1 5f] ^فw 6f .   ! p` p ; p p  5 -5@) 7    7  &f r Մww5- %& !5UH  \   @ 7 dw &eW! A T 5555 nՈB ~ޡ  je&ze w  ww wBe f &w0* z߀  w &<& f w~ R  & ff ,  ݖ N   !, U &f& v 1o >3&  m  f A N  %$ Hp00YXTADATADATADATADATADATADATADATADATA<VNTI VNSYVNSY[gNSY[hNSY?yOV\~TI\CL2VNCL@GtVX@DChb   ,3X s,w bZ nL ` jD N XD < FD `  B U%@eA D `e U% (%?%`  D LH  ?"7 (e B  e b7 5e@5` 5e5@e,e7p   - 5v jH Be^>*b5h>5;V B5Q$BdBdBdw&@m@d m 75@d@dE W e75!55@e2e?E? E @`eE 7`d  =  e    D   P  aU%5 D% $% C l 5bTXe =  | =l 85 "  1 aa * H !  BPPPP *@e"A ^ & $LA  pp0L \ @ dDe"& >77%ɪ- K'wD-J'w8-;'w,-3&w -3&w-2&w-#&n w & 2  ~7w  &  #% p z )Pf")&y@G xCcbp,,1z.?y05!&  ^! " 1 # % >3&  m  f A N  % 0 0 `hb r? `w `>DCet BEA% |5f&"ŀ550 00 -5 eDCen h-5e! 55@ 8 7r&ep  7xf &ep 5vej w  T5@R wrDep rwx5(Dej VDep H2 - 4  TTT5 L5m55e5 Ldf " c 0e ( %w 27 l  7^5X0* RB 65@4 $2 5&& 7 , m  V%  5 jL`< 5m    ww@?  u~~@w` Ca 5^HS@Cw6a  l& A~m< w w H 5*'Cwa Z5" FH  AB 5 w5~fe@ u߮ 2 5 . tX T " $7 ߷ A~B& Km.߀& d  S& X Ee 7 b& f 7  5  v  x 5&   w6 5V     w 7 ^ 7ܘ z5 H 7ܘ f݇w  7 5p ^ CC @w  w6w2` @ wV5| H & w> 5   P V "uuf7 2@   A  x 0 & @@  -`ܲ5  5A5 5~A5  : l55Ca XXJ  @  .55 B  @ u00YXNu|u~uw A  x f      b 77-<ێ v5`5`~ fAAAA R  8uuf L "w ww w J rr @A@A 2 2 <     @@ w3<@ (4`<3<-r4<"  4`< ew  N ;w . ]8"]U.5$*5& w D 75 w  7 Z &5@ 5 N5 < 5 05 7P`UZ5h UF E    45@@  5 5 < 7S5 5 H -  @UA2 8 ] ] %w-!] A  f@ $ . uft t5\P@ 7S< 8 J-,  > UA2 ] ] %w-!] A  X@ |  ut t :  w N4 7 n 5\ w \3 <AA L5  U e   -xp   U V -LD    "5  V V KR R D  5t eE  Wt Fp >\22mV-< fBm r` 3\ V2l\ 4V@5 e&e&5& X 5 55 t.  @0 0 0  ff& X 7L3 3 . 7&7Rw( ( 33 43 t-*x p$& Հe33  3   RԀ H7F 55e>  ( @ &L  3 3 3 3 3  w @e& L5 Cµ @@<55µN~5"5 %Ncc 55  bdcc t  Jcc `ޖ @`!  @`A@  f  @e?  Be E0Ӏ  0    4 ^4E @ @ @ 5 55 2 2~% h% & ۂ "lmp҇f Je"e &   &f p  & pl5 5&% z&f5  f&5 5plw plw R>3!@@@  :,(.*0,&. !$    lr "l lf<!: !^! !n2!  x  ! ! !hD! !6 > @f> !"!!!!5dkw <mMe m !D7`00YXTADATADATADATADATADATADATADATADATA# J   EA Y r  h e ~E  7B7<Е     `$ D5mPP߇mDmZ5tm0ߘmFw^w 7 2 5Nb77Eb!0 0LP .U U5 U5U5U5 m 7 m7 |" f! V 0LP76`m7,7 &7 5 x5p, 5Z *mj7"m\ =  4 e>77`^ `AW  %W V  zemwe w`ze5` d5emTn   %   5Udm"7 mn   ><:5@,m" !5   ݺ޵'l r $ 5nf(7 7 4` 7xܒ7 f Z5I` Ph7 < X 0 x "Be<7  6 <#8& "7 (7 #7 %@7 CD5Efm Le  NECf  &  e&A e   F E'E@Ce5@8 % &%([qe   Ce-\ d5P &72) ځ @e Re?E?  E  >e"  A &@ mڡf w 8 6    w, 0   2ۇ &*!"!4e6(0# J l 7 @ 2 22 6)2 $2 .-b٬ Z٤Te wT܇$  h j( b\  F  H7 :7 6P 2< .B`UE g  &f  m   |*!"!4e6(0#  $p*!f&  )f` *! w 7 @7 > |7&*!J,   7 7   Dw & H5 aC|w  7 ط ,LaC`wv r xf``t pط b  PR *#f  ,&,&!4e6(0# t  %  U? a *#  *! ` >3 \év~ 1o w 5*{7  7\5V,% ( n-5@ ^e & De" pV 7 x7 7` &  r 7 #` e"A r  mP    @ H % 5F5>50 0* 7 5eE@`    m|7z vH (` Exw " .P#  xwz*E B a 7 T&  77 7 w  m777w m5ml   ~m7zl 7z5)m7blw |mHm 7Tm7:l 7:w R   "$($5>mmw &   J7w  j &  #% | F w v 6  00YXN82  wL n   8p V&8 4e6(  l 7 @ 2 22 6)2 $2 .- e w$   ( |   h7 Z7 VP R< NB`U2E( g  6&f  m   | 4e6(  $p f&  )` ^  w ^7 `7 ^ 7F > " h , *7 *7 (JD w & H5@ aC|w  7 ,aC`w     R f  ,&ZL4e6(   %  U? a     `7 7 7 7 fj& ~ X6vwj^7Z(e"`eB$$$e(((<Rw<J  w<@    .w<$"# `  % W5@5 Of &F 6vw77 *7<&5@   n R D`  B    R f  f75wv * 7& f w` R  & ff ,  N   ! U   * `  77 & U ' P' ,' >3&  m  f A N  %\ $H.-P),0()P)-.-V)p)v))))***).-)(*:* +)4+8+6+T+Z+B+P+H+<+>+++.-.-++++w x7 7 ,'  >5 r5 d5 ݷ N5 D    " " \  7 %% >'5(j ,'X lm7' "W, W,s,4 %%  x p #  nW, W,,  R t <   : ( [܂` w@5H 7 mE  ' L' w7 &@A 0m ۀep o g c & eZ & eP  M v E & e % \"&ReHe?  eE  B B B P F7   f& 2e   T& ef!5 5  &xe  x܀^  v& e7X &  @A mـe7(m8 zBG:ف mxew\)0    n' w d2 J J D,Db@T&/ e H ۂ  &  J   ~ \w   j ,1 A `A ~ & e ~"  %wL7+5H' P  je 0v  x@5m  j5@(  fA @e j47 b \#  N E  |  r sN  7 & 7  ؆wm ww"؂` ٦ ^ *  #A l55 5@ @@ mւ 7t 7n n %1\%oVmN'    f  p` F,,  %% LV1eL-H =7:%  3 .ŀ+%~7~$%pw`l% ^7`%PR @ &D< h00YXTADATADATADATADATADATADATADATADATAe @ w 5bw`%wB 75b'7f5`U`nEQ 5Um    7E  , D' A e  0e -&.  ' 55D nD  ^5  J5e 8 eJ' 7257atp 5j 7   5 77lw e 7555lnjlb^5xh &h eV7E dE(n  B5x7O w E 5FZ*EVD 0%0%5e" ".% m l R 57  e  U5@%J%` .m& m؂eeA p A '  V؇fE | @m85 @ @ @ 555m,5 fE  B%  @a%:5& 7]5Qm A A A ,3X s,w 5(7 7 7 7  ' h7l 7&fEjEA T JA "$ &5 `eN F &8 ' E R e 2Dm& e   8  Dm& R R  hw $' Hw(' 8w~|5 Lf& < ' b '     2 '  'PH   PPD ' w Dm& (' z7fEjEhwA j `A "$ 5 ,,7lV VHP VH @me, w    rT,` \ 'w 'u u u u C eE P75 5 5 wn& e&b e & l  e hwE    f eA ` A* e5"5,$    &j- 7 Tme &r m  d 00YXNw  P B74 2^5@2 #  ` E@ 7"P7 5  J >  z5@ P w,w H&e&  00  bw 5@P) 5<&e  00 x   d e d x5@ 5 R dP" | ~P 7R7 D7 Bw R 2.mj777w . m 52m*l   ~m&7l 75)m7lw mm 7m7l 7w   vxmjvmfr  ߔ $ $ * `  7h7b & Uw F&  < l7w  &  #%  h 7 7 7 7 Zfj& ~ $6vw6*7&(e",eB$$$e((<nw<f  w<\    Jw<@># `  %W5@5 Of &F Z6vwl7`7 *7<&5@   : 6 (`    N  R f  27Qwv F 7 & f w| R  & ff ,  N   !* U f** aB ¥*W W c@ % 8>' 8& 8r' 8' DX/ D$, P* \) h% >3 $H%2R %P%2A -R%F%X Memory allocation map TKB %2R Page %M%N%2R%15S%Y %2Z%4N%4N************%2NUndefined references: %2N %2R%N %2RTotal task size: %M. words%N%4N*** Task builder statistics:%2N%4STotal work file references: %T.%N%4SWork file reads: %T.%N%4SWork file writes: %T.%N%4SSize of core pool: %M. words (%M. pages)%N%4SSize of work file: %M. words (%M. pages)%2N%4SElapsed time:%3Z%N%NL b 5 m m  &&&  eJ   eBRRR R Rw 8F$#7 <  $#Ý,|# XE` A ">% $#f d| *|p &` 7 $#f &@ͥ 7 ͥ  Ջ -^77 z(# tj$#-V|NN$ :$ **ݡ  ފe $ $#=0#"e< (%w  d -# & w vEe"& 77$ )$$#| LB| ߇-v 55  m##    #5mN &  m  f A N  %000YXTADATADATADATADATADATADATADATADATAODT xfr address: %P%NPRG xfr address: %P%NStack limits: %P %P %P %U.%NIdentification : %2R%NTask attributes: %VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%NTask address limits: %P %P%NTask Address limits: %P %P I-Space%N %P %P D-Space%NTotal task size : %T. Words%NTotal task size : %T. words, I-Space%N %T. words, D-Space%NPartition name : %2R%N%P %P %P %U. %VS%2R%N%P %P %P %U. I %VS%2R%N%P %P %P %U. D%2N%4N%X Overlay description:%2N---- --- ------%NBase Top Length%NTask UIC : [%O,%O]%NTask name : %2R%NTask priority : %M.%NMapped array area: %T. words%NTask extension : %T. words%NTotal address windows: %M.%NTask image size : %T. words%NTask image size : %T. words, I-Space%N %T. words, D-Space%NR-W disk blk limits: %P %P %P %U.%NR-O disk blk limits: %P %P %P %U.%N w (   =#( n * 2* :( ҝҝ* $#* r 0$# nm`׊ ؊h( Dh%( 6~%( $  5TUwp = E5UB@@P+V0$#A5R w= U% e U%  ( # ", $#I+ p$# T+ Z$#| >(+ D$#5'z "~7 v7 t7 f7 dD $#x(t(+ & f+ 5 -,2 -&,--$#5 x(|() x() Պm5  ՊmJ) `-) V5Tn 5b + ,5 HF + p( wXmTZw TmHN  e  - h* * * 5 / w pV 6$#-JԜplr" Z^"    m %\\  5J* -$J"    b 8* -AC,-AL,-CM,-CP,-DA, -EA,@-FP,-HD,-PI,@-PM,-PR,-SE, -SL,-TR,-MU,-ID,%N*** Root segment: %2R%3N*** Segment: %2R%3NR-O mem limits: %P %P %P %U.%NR-O mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NR/W mem limits: %P %P %P %U.%NR/W mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NDisk blk limits: %P %P %P %U.%NDisk blk limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%N%2NMemory allocation synopsis:%2NSection%44STitle Ident File%N-------%44S----- ----- ----%N%2R:(%VA%VA%VA%VA%VA%VA %P %P %U.%N%30S%P %P %U. %2R %2R %X%N%3NGlobal symbols:%2N%F) w 8 -h: (-N(p 5-L) "   t5 l) "   L --( (5  )   t5OB@I5J@J@   e ` )5b# 5J@J@   e ` l) * 3* S* 5e&e&5c& B [ ,$# ,T w w 5m7  s*7 x e r  rB $40( w /J p5RaU%U% %$$ * )w lF $#$; 5 5  lmRm bp5   * w 7 ,s&-* e"& 00YXN(( U  m^((l$#   <  (    f  H w  a 7    RO,RW,D,I,@GBL,LCL, REL,ABS,OVR,CON,SAV,$$$,%2NFile: %X Title: %2R Ident: %2R%N <%2R>: %P %P %P %U.%N >>>>>>>>>>>> Undefined reference: %2R%2N%7S*N)*P*P*P**))))))*)V*w 5w <    (v(  t(B J x ( e <t(w e"  f -*z  t( 5%ۂ` &  , p`  7 e" t( d BtR RRR ( f& 6  J z(-6N -H Hw,3&('  Dh ( (& > ( $#   vh#~J$$@%@%@%@%:%Z$$$$$$>%$$w     ##  #B   # ` 7H7DGw:w6- #RRB BGD ŵŵ ŵ m߷ &mwŵ 7 ŀ7 z mZߐ-& 7#  7 &ݰp .` <#  5 #w v^5@b5@V#VPHPJPLPNPPPVPXPZP\P^5eН@ E@@3 J# 7P E@`  6h&  # N 5 . w x v5 j0p tsN FLP1o  ,  s, ,  3X    s, wWX \ x w  T# n` 7b55065t-$U U L.TT : hb` @e" v5m47 \55-1 D b 45 |5t!-jTTR5 ԕT -<  d.    50-  -   nb d.Cet< A  1,1, 5m 5b  % 2!.B (@e &w7 Det=> l+&  \+ Rw   (   e`r pwnw $CTEoU`5 TT   ""  , <    ""w-3XJv a &! -Z hl2V  4SA {RJ33m:3 3 <00YXTADATADATADATADATADATADATADATADATA 4 , @5 eD   e&& Z &  >  #wX   3 3 4@ 5 2w6  5 55P5 H ~@e"D& t4-z |   7, eA  ",œԕ5   mE %  5 |5t D 555 UA TTԕ@ԕ f   7T  !  w ~\7:76T @w,  $ I wB  7       7       ~7vW!i g bB w 8@   w @ 55 @a \@@a RB $ & . @  0w> ,w6      w` eP PPЕ % .!,B p  ` |`w fe&  00  *&   p`    &      7  7^& e =wD   w( D& H     m f Bw( -t& & mje > @l55 m>  @  w z&  p 27zw~  R &  #% < . . $ @  * `  77 & U7 7 7 7 fj& ~ 6vw7(e"eB$$$e((h߷<Tw<L  w<B    0w<&$# `  " %LW5@5 Of &F 6vw77 *7<&5@    . `     R f  77wv , F73 0$H00ZXNROE%X3RWD%X3SVE%Y3SWD%Y3F%B .((  &• H   ; w;! ,:/:& u@5e, R OW w5& & ),#!#[ ] / : # #  \#f &H%H: @ 55 ,.@ ; !F3ȕf  5!5!U,5U,43ȕf  5@ dwѷ w w -ЋSVWU @w  @w reB$&w 8,Tf Z ӁeE  ,*( e(  eRRR ٦vX pbeBeRRRRR R R  X&5fe "ppple5let ,Ї p434e6(83 & xH " ч~ H p434e6(83  ,䇷  Ї7 bw\ XeЇ)w@ 7 > I ч AZ    :ȥ: 66ȋ+& ȥ+ȥ-  U  f  @u  4u ( ¥ ¥ ȥ ȥ  w 6ބ(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$&  m  f A N  %556 686X666667$7?7g77778C8s88889W9x9999:):F:c:::::;E;o;;;; <;.>e> -- *DIAG*- -- *FATAL*-  DC!n   ` ~ F 4 4t5!7|5 43| &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( Jf  e ee e ްh= ޼>&  m  f A N  %Illegal Get Command Line error code%2NCommand syntax error%2N%VA%2NRequired input file missing%2NIllegal switch%2N%VA%2NNo dynamic storage available%2NIllegal error-severity code %P %P %P%2NCommand I/O error%2NIndirect file open failure%2N%VA%2NIndirect command syntax error%2N%VA%2NIndirect file depth exceeded%2N%VA%2NI/O error on input file %X%2NOpen failure on file %X%2NSearch stack overflow on segment %2R%2NPass control stack overflow at segment %2R%2NFile %X has illegal format%2NModule %2R ambiguously defines P-section %2R%2NModule %2R multiply defines P-section %2R%2NModule %2R multiply defines xfr addr in seg %2R%2NModule %2R illegally defines xfr addr %2R %P%2NP-section %2R has overflowed%2NModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2R%2NInsufficient APRs available to map read-only root%2NSegment %2R has address overflow: allocation deleted%2NAllocation failure on file %X%2NI/O error on output file %X%2NLoad addr out of range in module %2R%00ZXTADATADATADATADATADATADATADATADATA2NTruncation error in module %2R%2N%D undefined symbols segment %2R%2NInvalid keyword identifier%2N%VA%2NOption syntax error%2N%VA%2NToo many parameters%2N%VA%2NIllegal multiple parameter sets%2N%VA%2NInsufficient parameters%2N%VA%2NTask has illegal memory limits%2NOverlay directive has no operands%2N%VA%2NIllegal overlay directive%2N%VA%2NOverlay directive syntax error%2N%VA%2NRoot segment is multiply defined%2N%VA%2NLabel or name is multiply defined%2N%VA%2NNo root segment specified%2NBlank P-section name is illegal%2N%VA%2NIllegal P-section/segment attribute%2N%VA%2NIllegal overlay description operator%2N%VA%2NToo many nested .ROOT/.FCTR directives%2N%VA%2NToo many parentheses levels%2N%VA%2NUnbalanced parentheses%2N%VA%2NIllegal logical unit number%2N%VA%2NIllegal number of logical units%2N%VA%2NIllegal default priority specified%2N%VA%2NIllegal ODT or task vector size%2NIllegal filename%2N%VA%2NIllegal device/volume%2N%VA%2NLookup failure on file %X%2NIllegal directory%2N%VA%2NIncompatable reference to library P-section %2R%2NIllegal reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%N%VARequired partition not specified%2NInvalid APR reservation%N%VAComplex relocation error-divide by zero module %2R%2NWork file I/O error%2NLookup failure on system library file%2NUnable to open work file%2NNo virtual memory storage available%2NModule %2R not in library%2NIncorrect library module specification%N%VA%2NLibrary file %X has incorrect format%2NResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask build aborted via request%2N%VA%2NDisk image core allocation too large%2N%VA%2NInvalid window block specification%2N%VA%2NTask requires too many window blocks%2NTask has illegal physical memory limits%N%P %P %P%2NLibrary references overlaid library%2N%VA%2NTask image file %X is non-contiguous%2NVirtual section has illegal address limits%2N%VA%2NFile %X attempted to store data in virtual section%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NEnd of file reached before .END in %X%2NSymbol %2R not found for patch %2NSegment %2R not found for patch %2NSupervisor mode completion routine is undefined %2NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NIllegal system size specified %2NConflicting base addresses in cluster library %2NLibrary %2R not found in any cluster%2NIllegal cluster configuration %2NCluster library element %2R does not have null root%2NModule %2R contains incompatible autoload vectors%2NCluster library element %2R is not resident overlaid%2NSegment not found to address round%2N%VA%2NLibrary build not requested - ignoring option%2N%VA%2NIncompatible OTS module%2Nbe"bb>RJ wN +l$7! -"tw n"&f e"> v%wķā 00ZZN`e"``>RJ wL ECV> e-- :$ ' -L7"F,Ba(Q$ H"7`&wwA Ρ D |~,AAcY &[q$Y 2x TITISYSYTICLWKOVVγxbd TITIDUDUTICLDUDUo?Б3γV@Aγ5pww~r7z TKB>%   @ %2>KWdp}8(ЬxhXбHgpzY6)_XDSYSYSYSYTICLL&TKB -- *FATAL*-Run aborted XN^.  e * , 0 : 5 N R 5  f  ^ 5~ N  F  F w |5bC ŀ X , B| f50  -F <5.$ r N 5 wV^ wVPwd *   f&f 7H w77  `wh w\ 7,Z7,R  D   ^@    ~ $ $fE7 4` H  5,5,  " u$ \   1,1,J 1,1, &` e m 7B &6 e$$)d 5w  & lA 7@m7 *1 C7 pM $ w"   7 /  *w p L7w~ 00ZXTADATADATADATADATADATADATADATADATA X`b TR efA   ^w8 7,w* ~   z& &% N  V    2 T s zew ~   A |C J w l CB  Z54w F reC %E& 7 ,Bd | wddcAcAd 7A &e Cm  &m`e` ` f`B` JN    (     `p f& `, ,, &  mV  BB ce " &e#r  B(  & eB%e1be1^1\1H1J1L1N1P&&f t h eFB e:w  E  A B` 7pA wL &w E p f B ` p ^7~A @ae n fe?E? & f Y :  40 B ` w f E @ jw`PK`/ & D -N  Jx  `      B B  @`   B` * J   v  m ` @ f& )'&1 : 2| * "( $ 8  , X  $  L < H ~% h( `  ) V'  j   z\ r j b Zd R0 Jp Bt : 2 *T "5 7 6  6 `A r A5ew , Bv     5Bw 50  (r- DUt-E D  E E ܁ &wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&ff &f  &[q &[q`    ( $$p VX&2X&DX& !$,h%+Vz)+V-+Vh1=>L|dN@R" \"T c@, .jl)@ol)Rrl).u v{%Hd~*hv*v*v%hdvT5N5|5X5*P8<P8*A`NANrNAN`NA00&ZZNSYxQSYySY^SY~xQSY_SYzjL_LB[1,1]SYCC@`DA`LB `WMP`SS`MAaDL``SH^SP_CR@^MAWI ^HDaPI`COfLI fCPaDA`FP@`MM^PI`PR`SQ^TR`XT^AC`EA `HDaPM@`SL `MU`FU^RO_ALaCM`SEaIPgNMfCOfLI fSGgXH^ID^ELfFMfCL fSB`FO@fxL8Fh5b  wxe w H7 5 b$q e ˋ   ! " wd w @pdf  B$ĵ4ĵ!%'% %E$e@ P  7e :e 8e & ĵ V 11@ Be w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  | P aAAf@pnp bC*8֋ <88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ PŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & D8 **"!w  8jDl@ TeBT85l@ z@( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ ' & 8AA%?%2Z%\%a%LB[1,1]ODT.OBJODTID.OBJT2@ w ݌]zj,  w8A RbXݨTݜ&x%d3 3 $eB A  J\~%\%5bEPUJ5 E<5U.  Be H 3$s ]@@MX7 7 &&$&! &&"e 5'U7\67^2\&$PP `E00.ZXTADATADATADATADATADATADATADATADATA@r XwX  <7w4 P:N w$&4 be&ew B@P@P dbd7 ^  `wf,B &&&$$ 55 h%~N%$ (b Ve5 &$7 f xw$&`9  B ` ,\NL  | `BAbpd fw^hX`  %/ -%/*%//$`¥¥¥ ¥ ¥ef UFܱeE $&$m    b   7 p7 2d8 f 7 lH Z"%?lv%n 7 h 60 UjUd ^@*7 L X `f `wP  Hw l^SY7 %7 e`v&  h@bp$$0 b @ef7F` ȥ;ȋ&% % % % ¥:uu j n & W e)X&I#q-'eW v&$0ef` ננe נ^נ  A5 ¥;U%E #w (w we) e)( r &*e) e)) l  ) U% ¥;¥,Q \ Pe)S#S- $ *I  %QQ *& N&1 &f Je f  7" RRR~AC`e R?j7f% ~'L BݷD | pv&e`P  &,@ 3@8K@oMBaTq rt@,YeYxx@Y`Y5 &5 8 V8 8X[<$09AZ (),-*! '>'x''''''''7 7 7 7 X7 % P %%% #&$$ :f&B   r0$Iz&%%U^Z7 XO %J8D52M5*I,E   $ %ͥpͥ&Հ7 -A# ~ x( %3%2h&եJ   H  #7 Ewͥh&Jn# %.wȋȥ;!&% %9;5^&H1H/H-HH)HH%uu&006ZZN +w %W{&%W{&  p{&l&&  e)ȥ:2ȥ./ȥ[,ȥ<)ȥ/&W ! T & fAf J !%dd,wz& ȋȥ-ȥ)ȥ(ȥ* ȥ,  ȥ[ ȥ]  Z , zzp J ~A A N>,B Z&&5 bz& r&`90 p5@ *w$4 bf 6 % e 2 D8 <5 46 ,81o?y'('(((''8)*)% 0< 677 5E% P %%v  t `% %!%@5h7H7L V5N42W   C 7`7`& p5X& <  ܴ d ppp2 Ue  AV l  , 7œEzx&5U   25Lpppp f& fp5 & Np5Ufup h7Zw^  , H< fwX2 5pppp Fu  w P < z &  ( x .wwe@e $2 0f5ve : 5  DH91 G@  w :e & Ne 5U e5  ! 555U-55 8u5 $uw8%^ *$) ] eE BEE r  5 r6**********************+************4(********************** +*******j****************************"/*********s$+ @,A%w  H5 a' 7 •!z b& a dFm<܀  :w^  f   ed7Ae 1΋ ۿ  ppU@pM %e -  AV T a  އw z vw p l ` r7"7, 9F7EA3"3,'5@5E-V  #  B`  E   e3#3-  ۱w &2''' &5 w l& 0۷  |7w  &  #% t x h 0 h0 zV+ zP+ z/ z(0 d+ N1 .2 6 7 7 5 6 7 5 7 V8 7 x8 p 8 h700>ZXTADATADATADATADATADATADATADATADATASw  e ww؇@$  "7$b7Z  e h?7 PAPАP 0wJhwDwB@> wW# wR؇Tw 57 @7 >7 <Le EM M M Mw4؇ e  ?7 PPP Z'V'eeAL z bpppL <pd   ׿   p | dwb& wBw@ׇ5 bmwNLwFwD7 BB- 4. .lw&7, 7,  U &a w&ja w&Ta UwU% W# wwwևw:"@ A @$5?75?3B B B @5J *=% 505  5t77w ַշT@RwhW#wև5wT wևj  AEBܰ'C C և@  AEBܰ'C C Wևw\wZևwzwxևU% W# wlwfw`Շ6wwLևХ[ 8¥,f (¥]U   ױ& x¥. z n w#6W#wԇ1wBW#& W#Baw. dӇ \ӇwW#W#wԇU&  ?7 PH p¥;m¥! ȥ;ed' ¥=7e)%t#t-e !P'87  ȋ-ȥ;*Ed'  L ¥,¥! ¥;¥: 5 !.a$  d'dw &" wV7PJ fe& 2;/!,,:0 , ' R , : b :' 4 :  5%wB 6 7 8 V8 8 7LB[1,1]LB[1,1]--f/-U,  e 7+ B5.5&GSYBe ~+eB e  yRB,5, D0 %Cwt7 D.& C! U@5B    w: D# <  ,w" % Ced5(  J p  c5bUU@5U5U@5 U hU @ @E @ @ @ 7TQ$@P  5U@  e)+555 5u u C55a 5a  x w%A7 7 ~GH+A5U@5@$5 X 5PA=LB Be@E?B B B@$5  =CJ #w6AW w*U"\AmwA w ww`Xu-5ej1` 8 (e)wp+QQ &$&&$+& &$% Be>w t'7 wp TBAbpd fwRhL`  %/ -%/*%//$`¥¥¥ ¥ ¥ef U:ձ *d'fB 8+:+  5.U.5-^'e&  J D@ ѥ  u N#N %7 mbӇ & & @( |f  e ee e &f& v  08 (5 6 5&  m  f A N  %00FZZN? @`_?@+Units set to maximum assigned,,,=5m  % V U- 1<+ @NB w, H`e4065*5& F5F  =  w@ط׷Q2  5G5`+ 5T%"5#++5#++5Հ+Հ+ 7.+7.+״ 6+̂m.+v׷t ++ H555++  & & Fd5@t -$5t- 5    c$A A(+N ׇN65  5 5 %  5@5 B  f \w2B sœ  vwt-w 5 5       ` `U@w< + Bw5$5++w 55 f 5Bw  +fwx    5 5+ 5 ++5 z4 $5h5 w w  w w w w pp55 5@U@p` p`|`+ A ݜHCݎ> ,5( zvԇE B B B B   + Œ5|5+ 7 E++w d&fA< 7.& % ,4, %&f E U40, U 0,  5 g wTihkx 5l ++ +  + Œfe  x + Œ + ' j^7 7 7 7 B7 @7 7 7 7 7 7 7 7 7D7 z*v7 F P  75~? %A A A w ߸N He  5  5 55 @$ d.A x z L  AP  eA    Հpp Zw 5 P$R$$ <,h,)ɪyN0tN sN0sN0 s, t ~, , ,3XF V ,..- w  7| -4 <5d n5b v n5@R , 6 Jw B  w @e"Kr•@- Jr5;r5 45K5    ȵ d ne 5D'%^# -X5@L  év~he | V5@  5 |PH4 7T7 X 0 PPh Vw  -`5J%dȕ@@~ @b \ ~@  07f ^?7wA `  Fw^F ,7  z v( * `  7N7H & Uw `,& $ " p7w  &  #%  l 7 7 7 7 ^fj& ~ (6vw:.7*(e"0eB$$$e((<Tw<L  w<B    0w<&$# F`  %W5@5 Of &F ^6vwp7d7 *7<&5@   >  `    R  R f  677wv , 7% x0( H~3zwbw w| Fe f6  ~  fe 5P  91  N&b  ~&5EEEEE@E@EE &&fEE# %%2, %U2, 5 v C & P &  07JV% J%,D7*%.?-1~5h%e N l5R|rr |  "7 | xCœ5H5µ  (l 5) &5U5U5 EEw,, w,& m35Հ(b " 55 3l5 5-j ,h,beH5%ɪ%J';'%Jr;r%%ufFE% &%[q%( v w6wH 9eeb 5@\ Y-hU5R5O5L5HUB Z@` > 0ݵ d 1   w 0-( 5@  f S 7 <5w5ww|ŀ70* B-p &fd n bw: 4Հ|B 0 w 7T7Fw>:7 :70| w\ 6v  $%b 6 wE µs d zn  dwJf b55 5  B *:) r7w b & L() d .0 Հ% ^d  .%T J wxf4 7$ڵ| ݇w C57(5l * H ! &" ,PPJ  ۇ xt rnf .`  "   3,5wR5w>55e5@N 5  5e w`55Հ m0 0  ,E h 5 Հ m0 0  0 d r X V `ef %PV (e : 5PHtt w m׎  % fV `ځ 7 1 l5f|] 4ځw 6f . t ! p` p ; p p  |5 -5@) 7 d  7 P &fn H ^քww5- T%& F!5U     ~@ 7 @w heW! A T 5\5T5L5 x ,ՈB Tߡ  @e&Pe w  wb֔w wxe f &w P  w h& f w< R  & ff ,  xޖ N   ! U &f& v 1o 500VZZN$6$''P(Z$//P- ##&$#>0z1z11&$ 7 \3h8 f  4  f57 7 $ 7  J .2 d0 h  07 f 0?7wA  w ,7p h ^ Zv * `  R727, & Uw & r  7w  T&  #%   7 7 7 7 fj& ~ v6vw|7xp(e"~eB$$$e((F<8w<0  w<&    w< # `  %*W5@5 Of &F 6vw77 *7<&5@    " `  `    R f  7wv  $7 w,8 mh35Հ( " 55 3l5 5- ,,e5%ɪ%J';'%Jr;r%%ufFE% &%[q%( vD w6w* 9eeb 5@\ Y-U5R5O5L5HUB Z@n ٵ d T1N   w r-jh 5@z   S J7L 5w5ww|ŀ7 B-٨ &f v  bw:  ՀB 0 2 w 7:7w,|7 |7r0 w\ 6 T > $% J 6w4E" µs d n  wJf : 55 5 n B ,Z 7JwL & L()4 d xp0 Հ%T   .% 0 8 $ wxf h7ֵ0 هw &C57(5l * H ! & 4 PPJ  ׇ xt rnf @`  "  3,5wR5w>55e5@ 5  N5e w55Հ m0 0  nE.  5FH Հ m"0 0  0 d ef J $%nV e : 5PHtt  w mvԎ  %r fV ց P7 1 56f0] ցw 6f . |  ! p` p ; ^p p  5 -5@)0 7    7  L&f \ް҄ww5- %& !5U 4 \   2@ 7 dw eW! A T 5555 bnՈB ۡ J e&e Xw  Dww Twe f &w ܀  w l& f w~ : R  B& ff  ,  ۖ N   !, U &f& v 1o B5&  m  f A N  % .00fZZN<VNTI VNSYVNSY[gNSY[hNSY?yOV\~TI\CL2VNCL@GtVX@DChb  VVBDFHJLNPRT ,3X s,w Z J P  jD  XD  FD !  B U%@eA D `e U%` (%?%  D   ?7 e@ B  e6 b7 5e@5` 5,e5@e,e7   - 5v  eb5>5;V B5Q$BdBdBdw&@mv@d mp 7L5~@d@dEpN`JW e75!5B5@e2e?E? E @`eE 7`  =l  `eB  B  D   P  aU%5 % %Xv XC X 5bT4"e =  | L=l 85  1 aa * H !  BPPPP *@e"A &~  LA  pp0L @ dDe"& >77%ɪ- K'wD-J'w8-;'w,-3&w -3&w-2&w-#&n Xw &   7*w.   x&  #% p  )Pf")&y@G xCcbp,,1z.?y05!& 4# # l% b4 & ' 5&  m  f A N  %#"#" #`hb"#r?># hw 8DCet BEA% b 5f&"ŀ550 00 -65 eDCen h-l5^e`$ 5HJ5@@ *7r&e#  |7xf &e# 5e" w ^ N5@ wrDe# rwx5De" VDe# H"-Z 4  TTT5 L5mF55e5 Tdf  c 0e %w 7 l Z T7^5X,  RB 54 2 5& x7 P/ ~mt  V%p  5 rL`" 56m*ߊ h   ww@?  u~~@wtvCa 5HS@CwJLa  l& A~m w RwL H 5r*'CwNa Z5N" FH  AB 5vvw5~fe@ uܮ  5 . tX T " 7ܷ A~B& rpKm܀&J d  S& X Ee 7 ( n 7  5  v   h5& T  w 5   .  w~ 00nZXTADATADATADATADATADATADATADATADATA 7t^ ^ 7,#5zJ H 7,#ڇw  \7 5N  CC $@w  w6w2 @ w5  & w D5   P V "uuf7 2@   A  <| R& @@  -5  5A5 5~A5  : l55Ca XXJ  @  .55 B  @ uu|u~uw TLA  f      b 77- v5`5`~ fAAAA R  8uuf L "w w|w twn J rr @A@A 2 2 2 "    @@ w3<@ (4`<3<-؈4<"  4`< ew X H ;w ]"]`U.5*5& hw f75\ @w >7  &5""5 N5 "5 05 7P`UZ5 UF E    45" 5 5 "7S5 5 H ^-@  R HUA2 *] ] %w-!] A  lf@ $ . uft t5P"7S< 8 -F՘  UA2 ] ] %w-!] A  @ |V  ut t " w & 7 n 5\ pw 3 <AA 2 5  U e   -x  t Ul ^ -TL  H  "50  "" K"" D z 5t eE  Wt Fp >\22mV-R fml r` 3\ V2l\ 4V@5ve&e&5^&  5 5050 tD1  @0 0 0  f&  73 3  77w( ( 33 43 t-L*x $& Հe33  3   Rр H7F 55e" ( @ &L T 3 3 3 3 3  bw @e& L5 Cµ @@<5>5>µN~5$"5 %Ncc 55  bdcc  Jcc ۖ @`!  @`A@  f  @e?  Be E0fр  0$#   4 4E @ @ @ 5 554 :~% h% & Jق "lmχfT De"e &   v R&f  L & pl5 5&% &f5 b &5 5plw plw 5!@@@  :,(.*0,&.#$x## ##lrv#"l lf<#:|##^#z##00vZZNn2###xp## # #hD##6 >#@f@>##"####5kw <mMetvmv !D7f``#   E|A Y   Ze E  77Е     `h' L5mܼ܇mm5mܘmݚhww 7 : 577`Eb#"0LP U U5xU5dU5`U5L m\ 7 mJ7 |" f# "0LP76m 7,7 &7 5 5 5 m7mp#=v#  e>77`^ `AW  %|W V \ emwe w`ze5` d5.em5m #5  vzںz۵*l r $ 5Dn*7 7 4" 77 f Z5I"7 < X 0 h#"JeD7  6 %. *7 7 &&7 %7 CD5Efm Le  NECf  &  e&A e   F E'E@Ce5@8 % &%([qe   Ce- 5 7+ "؁ @e Re?E?  EV  >e" N A @ m$ءf rw  6  f`  w, 8   ؇ &f##4e6(% " l 7 @ 2 2 )2 2 -֬ ֤e wه  p j b\  N  H7 :7 6P 2< .B`UE g  &f  m   |##4e6(% $p#f&  )f` # w 7 @7 > |7&#.   7 7 xrD w & H5n aC|w  7 ַ ,aC`wv r xf`` շ b  XR %f  ,&,#4e6(% L  %  U? a %  # ` b5év~ 1o w 5{7  7\5V,%p( -j5@^> ef R&$ e"b 8p 7 x7 & 7` &p  r| 7 # He"A   m   p @ H %p5F5>50 0*. 7 5(e00~ZXTADATADATADATADATADATADATADATADATAE@`    m7  ` ~Ew l .%  xwz*E B a @7 &  77 7 w b ,&mz777w > m 5Bm:l   ~m67zl 7z5)m7blw mm 7Tm7:l 7:w   "$5~zmmw & b  7w  D&  #% |  w F 6    wL n   8 V&4e6( X l 7 @ 2 2 )2 2 - e w    |   h7 Z7 VP R< NB`U2E( g  6&f  m8   |T4e6(  $pf&  )`  w .7 `7 ^ 7F>$ h , 7 *7 (z Rw & H5 &aC|w  7T P ,aC`w      R f  ,&L4e6(  %  U? a    `7 7 7 7 fj& ~ 6vw7(e"eB$$$e((ݷ<Rw<J  w<@    .w<$"# `  F %pW5@5 Of &F 6vw77 *7<&5@    h B`     R f  75wv * j7%% )5j \r)X lm7r) "W, W,s,4 %%  x #  nW, W,,  t l   j X [ڂ` w@5 :7 2mE  r) ) w7  >&@A 0m؀ep o g c & eZ & eP  M v E & e % \"&ReHe?  eE  B B B P v7   f& be   T& Pe$5"5  & e  ڀ^  v& e7X &  @A m:׀e7(*m wց m ew)0 8   ) w d2 J J D,Db@T&r1 e H ق  L)  J   ~ \w   1 A `A ~ & e "  %wL7[5Gr) P  je vF  ߂@5m  5@(  fA ,@e j47 #  ~ E     sN  7 00ZZNV P7 L F؆wm>:64ww"dւ` Pצ ^ 6*  #A 55 5@ @@ mnԂ 7t 7n n %1\%oVm(N)   t   p` bF,,  %% L1De|-x =7:%  3 .ŀ+%~7~$%pw`l% ^7`%PR @ &D< e @ w R5bw`%wBl 75nr)7f5`U`EQ 5$Um4   r  7E  ,y 55  " e55c 5@ r)p eEp r frP   m<5N45T, 5@> r)p eEp rP rP   m Dr) A Be  `e -.  ' 55D nD  ^5`  J5Je 8* e) >7257tp 5 7 H  5 |77lw $e 7555ll5nx &hx eV7Et dEn  r5 7 w8. E~ @5Z*EVD V0%0%5e" .% m l R 5t7  e  U5@H%J%` m& m(ւeeA A dr)  ՇfE | @m5 @ @ @ 55$5>m,Z5 fE  B%  @a%:5$& 75m A A A ,3X s,w 5-7 7 7 7 ) h7l 7&fEjEA  A "$ &5 `eN F &48x) E R e 2Dm& e  F 8  Dm& R R  hw8 ) Hw) 8w~|5 Lf\& <x) bx)     2x) x)PH   XPPx) w Dm& ) z7fEjEhw*A  A "$ 5 ,,7lV VHP VH @me, w   n rT,` x)wx)u u u u C eE P75 5 5 wn& e&b e & l  e (hwE    f eA A* Re5"5,$    &-D 7 DmrFDe &r mb 00ZXTADATADATADATADATADATADATADATADATA dZ| w P B74H ^5@2: # ` E@ 7"7 5 B J >^  z5@  w,w e&  00  w 5@)H 5&(e  z00 "   d e d 5@8 52  db% | "~ V7R7 D7 Bw  2z.m777w m^ 5ml   ~m7l 75\)ml7lw 4mm: 7mH7l 7w   vxmjvmfr  ߔ  * `  d7h7b & Uw F&  < 7w  f&  #%   7 7 7 7 fj& ~ 6vw7(e"eB$$$e((X<nw<f  w<\    Jw<@># `   %¥*W W c@ % (v) v4) v) v** 1 . F- + ( 5%2R %P%2A -R%F%X Memory allocation map TKB %2R Page %M%N%2R%15S%Y %2Z%4N%4N************%2NUndefined references: %2N %2R%N %2RTotal task size: %M. words%N%4N*** Task builder statistics:%2N%4STotal work file references: %T.%N%4SWork file reads: %T.%N%4SWork file writes: %T.%N%4SSize of core pool: %M. words (%M. pages)%N%4SSize of work file: %M. words (%M. pages)%2N%4SElapsed time:%3Z%N%NL b 5 mm  &&&  eJ   eBRRR R Rw (F%7 <  %Ý,|& XE` A "' %f d| *X|p d` 07 %f l&@ͥ 7 ͥ  Ջ -77 z(& tj%-VN& :' *ڡ  ܊e H' %=00ZZN%"e< 'w . d -o& ( w Ee"& 77& &%| B| H݇-ڤ55  m&&$&  H  &&5m &  m  f A N  %ODT xfr address: %P%NPRG xfr address: %P%NStack limits: %P %P %P %U.%NIdentification : %2R%NTask attributes: %VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%VA%NTask address limits: %P %P%NTask Address limits: %P %P I-Space%N %P %P D-Space%NTotal task size : %T. Words%NTotal task size : %T. words, I-Space%N %T. words, D-Space%NPartition name : %2R%N%P %P %P %U. %VS%2R%N%P %P %P %U. I %VS%2R%N%P %P %P %U. D%2N%4N%X Overlay description:%2N---- --- ------%NBase Top Length%NTask UIC : [%O,%O]%NTask name : %2R%NTask priority : %M.%NMapped array area: %T. words%NTask extension : %T. words%NTotal address windows: %M.%NTask image size : %T. words%NTask image size : %T. words, I-Space%N %T. words, D-Space%NR-W disk blk limits: %P %P %P %U.%NR-O disk blk limits: %P %P %P %U.%N w  :8  =(& n M- 2{, :F+ ҝwҝp2- %(d- z0 X% 4mԊ "֊h&+ Lh%* >~%+ ,h  `5Uwp L= @E5U^B@@P+2%A5R w=6 U% e U%  ]+ & . %L- x%" T{- b% >- L%5' "~7 v7 t7 f7 d %**-  - 5 -,2 -&,--%5z **(, *, pӊm$5J  \ӊm+ h+ ^5$ 5 N. 45  r. * $wXmTZw TmHN0  (e  - , - , 5 b2 w h ^%-(NҘ" "    m %\\ v 5, -^Ѱ"$"    j , -AC,-AL,-CM,-CP,-DA, -EA,@-FP,-HD,-PI,@-PM,-PR,-SE, -SL,-TR,-MU,-ID,%N*** Root segment: %2R%3N*** Segment: %2R%3NR-O mem limits: %P %P %P %U.%NR-O mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NR/W mem limits: %P %P %P %U.%NR/W mem limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%2NDisk blk limits: %P %P %P %U.%NDisk blk limits: %P %P %P %U. I-Space%N%17S%P %P %P %U. D-Space%N%2NMemory allocation synopsis:%2NSection%44STitle Ident File%N-------%44S----- ----- ----%N%2R:(%VA%VA%VA%VA%VA%VA %P %P %U.%N%30S%P %P %U. %2R %2R %X%N%3NGlobal symbols:%2N%F) w 0 -B I+-.+F j5-+.4"   |5+ "   T -n-]+ 05` }+   |5BO@I5J@J@   e ` #,5#z 5J@J@   e ` tC, , , , 5e00ZXTADATADATADATADATADATADATADATADATA&e&5hc&  [ % , w w 5m$7  ,7 x e " R rB * 40( w 2J p5RaU%U% %$$ ?- )w dF %$; 5 5  tmRm bpt5  l  - w >7 ,s&*-&- e"& +* U  m^+*%   <  (    f  H w "  a 7    RO,RW,D,I,@GBL,LCL, REL,ABS,OVR,CON,SAV,$$$,%2NFile: %X Title: %2R Ident: %2R%N <%2R>: %P %P %P %U.%N >>>>>>>>>>>> Undefined reference: %2R%2N%7Sz,+x,,,,,++ , ,,+v,+,w d5w^ <    b+*  *B J  p+ e p<*w e" R  f -  * 5%ق` p ^&  2  p`  7 >e" * l JR RRR * f& >  J +-V -P Pw4;&+/  lh 4+ +& > ^+ %   ~%~&&'''''&''''''''w  (  J&&  &B  4 X& 8߂` $7H7DGw:w6-j $&RRB GD ŵŵ ŵ m(ݷ &mwŵ 7 ŀ7  mܐ-Zܪ 7$&  7 F ۰p J` ߇ &  5 ^&w f^5@b5@V0&PHPJPLPNPPPVPXPZP\P^5eН@ E@@3R # 7P E@` P 6(  x0& b 25 J Vw " 5 jsN 1o  ,  s, ,6>FNV  3X    s, wW""###w ~ # ` D7b5505t-U Uz\ TT :  e" 4v5m*47 \55-1 D b 45 5!-TTR5 ԕT -  d    50v-l H F-\   b Cet< A  1,1, 5m 5 $ %< 00ZZN!B (@e w7 Det= +&  + w      e` wnw fCTEoU`5 TT   ""  , <    ""w-Z3XJ^ a 2&! - 02  4dSA P{RJ33m3 3X < 4 , @5x eD  e&& &   #wX   3 3 4@ 5 2w6  >5 555  ~@e"D t4-   7, eA  ",œԕ5   mE %  h5 5 D F555 UA TTԕ@ԕ f   7TV P $ (" w N7:76 @w,j  & I wB  7       7       ~7vW!i g bB w 8@   w @ 55 F@a \@@a R $ & . @  0w> ,w6      wR` >eP PPЕ %@ !B p ` `w Xe&  00  &  b  p`    &      7  7^& e l=wD   w( &    v m  f Bw( -& >& 2mށe > @l55 m  @  w z& J߷ p 7w  ,&  #% <  . $  & * `  77 & U7 7 7 7 2fj& ~ 6vw7(e"eB$$$e((ܷ<Tw<L  w<B    0w<&$# `  %W5@5 Of &F 26vwD787 *7<&5@     `   &  R f  77wv , 7·7 bw\ Xe$·)w@ 7 > I Zχ AZ    :ȥ: h@ȋ+& ȥ+ȥ-  U  f  @u  4u ( ¥ ¥ ȥ ȥ  w ݄(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$&  m  f A N  %P8w888889)9M9t99999):G:w:::;';T;~;;; <+.>K>t>>>>$?D?i????P8o88889=9j9999:7:[:x:::: ;1;N;};;; <<H>r>>>>$?T?v????)@^@@@@ -- *DIAG*- -- *FATAL*-  DC!n   `  ~ F 6 68!78 5| &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e  & & @( Jf  e ee e j*? b<A&  m  f A N  %Illegal Get Command Line error code%2NCommand syntax error%2N%VA%2NRequired input file missing%2NIllegal switch%2N%VA%2NNo dynamic storage available%2NIllegal error-severity code %P %P %P%2NCommand I/O error%2NIndirect file open failure%2N%VA%2NIndirect command syntax error%2N%VA%2NIndirect file depth exceeded%2N%VA%2NI/O error on input file %X%2NOpen failure on file %X%2NSearch stack overflow on segment %2R%2NPass control stack overflow at segment %2R%2NFile %X has illegal format%2NModule %200ZZNR ambiguously defines P-section %2R%2NModule %2R multiply defines P-section %2R%2NModule %2R multiply defines xfr addr in seg %2R%2NModule %2R illegally defines xfr addr %2R %P%2NP-section %2R has overflowed%2NModule %2R ambiguously defines symbol %2R%2NModule %2R multiply defines symbol %2R%2NInsufficient APRs available to map read-only root%2NSegment %2R has address overflow: allocation deleted%2NAllocation failure on file %X%2NI/O error on output file %X%2NLoad addr out of range in module %2R%2NTruncation error in module %2R%2N%D undefined symbols segment %2R%2NInvalid keyword identifier%2N%VA%2NOption syntax error%2N%VA%2NToo many parameters%2N%VA%2NIllegal multiple parameter sets%2N%VA%2NInsufficient parameters%2N%VA%2NTask has illegal memory limits%2NOverlay directive has no operands%2N%VA%2NIllegal overlay directive%2N%VA%2NOverlay directive syntax error%2N%VA%2NRoot segment is multiply defined%2N%VA%2NLabel or name is multiply defined%2N%VA%2NNo root segment specified%2NBlank P-section name is illegal%2N%VA%2NIllegal P-section/segment attribute%2N%VA%2NIllegal overlay description operator%2N%VA%2NToo many nested .ROOT/.FCTR directives%2N%VA%2NToo many parentheses levels%2N%VA%2NUnbalanced parentheses%2N%VA%2NIllegal logical unit number%2N%VA%2NIllegal number of logical units%2N%VA%2NIllegal default priority specified%2N%VA%2NIllegal ODT or task vector size%2NIllegal filename%2N%VA%2NIllegal device/volume%2N%VA%2NLookup failure on file %X%2NIllegal directory%2N%VA%2NIncompatable reference to library P-section %2R%2NIllegal reference to library P-section %2R%2NResident library memory allocation conflict%2N%VA%2NLookup failure resident library file - %X%2NIllegal partition/common block specified%2N%VA%2NNo memory available for library %2R%2NPIC libraries may not reference other libraries%N%VAIllegal APR reservation%N%VAI/O error library image file%N%VARequired partition not specified%2NInvalid APR reservation%N%VAComplex relocation error-divide by zero module %2R%2NWork file I/O error%2NLookup failure on system library file%2NUnable to open work file%2NNo virtual memory storage available%2NModule %2R not in library%2NIncorrect library module specification%N%VA%2NLibrary file %X has incorrect format%2NResident library has incorrect address alignment%2N%VA%2NPartition %2R has illegal memory limits%2NInvalid partition/common block specified%2N%VA%2NTask build aborted via request%2N%VA%2NDisk image core allocation too large%2N%VA%2NInvalid window block specification%2N%VA%2NTask requires too many window blocks%2NTask has illegal physical memory limits%N%P %P %P%2NLibrary references overlaid library%2N%VA%2NTask image file %X is non-contiguous%2NVirtual section has illegal address limits%2N%VA%2NFile %X attempted to store data in virtual section%2NResident library mapped array allocation too large%2N%VA%2NInvalid reference to mapped array by module%2R%2NEnd of file reached before .END in %X%2NSymbol %2R not found for patch %2NSegment %2R not found for patch %2NSupervisor mode completion routine is undefined %2NLibrary not built as a supervisor mode library%N%VA%2NSupervisor-mode library reference error%N%VA%2NIllegal system size specified %2NConflicting base addresses in cluster library %2NLibrary %2R not found in any cluster%2NIllegal cluster configuration %2NCluster library element %2R does not have null root%2NModule %2R contains incompatible autoload vectors%2NCluster library element %2R is not resident overlaid%2NSegment not found to address round%2N%VA%2NLibrary build not requested - ignoring option%2N%VA%2NIncompatible OTS module%2N00ZZTADATADATADATADATADATADATADATADATAe"ARJ 4w  +$7!  -w "&f Re"A %wd·^ e"ARJ 2w  ECVA e-- $ ' -f¸7",a(Q$ H"7`&w:w8A ̡ D ~Wz:d?? Y n TIfd0nBdTI?>0dW~0=l,>*.DF @    f| t5@Z4!&@*5  5@ TMC5 E8E@e :T%$Lt@ e f@ 0% 0#  s xE <>TTL@ RP k7f xr B &A A  eBmeABE T ZW D50 4Ww7 zbD&5? BE: T  < W5@7 H, f,|    E E@@ w`B    & E@N%,[٭ B  w^ b~%M%J%G%<7 j7 hx 5  76727$7   Е 5 .$ Е-Е-Е D W!W!W! %%%Е" p hЕ" < -8-r w2`  , &@ :  T wЕ ȕ*Е ZЕ ȕ*Е   Е  w`7^W Е0 Е:!  \& +f'56 6) N B f&<44   PPЕ= H&  $& bE Е:ȕ   5 e00ZZN""D-5 >  5W,VT  ~0 V1 & & @( f  e ee e Odd address or other trap fourMemory protect violationT-bit trap or BPT executionIOT executionReserved inst executionNon-RSX EMT executionTRAP execution11/40 F.P. exceptionSST abort. Bad stackAST abort. Bad stackAborted via directive or CLILoad failure. Read errorCheckpoint failure. Read errorTask exit with outstanding I/OParity errorAborted via CLITI: virtual terminal eliminatedTask installed in more than one systemRequired bus runs are offline or not presentSST abort. Bad CSM parametersCPU time limit exceededUnknown program detected faultExecutive interface parameter errorOverlay load failedNot readySelect errorCheckpoint write errorRead failure. Check hardware statusDismount completeUnrecoverable errorLink downLink upCheckpoint file now inactiveUnrecoverable hardware device errorMemory parity error in partition Micro code loader not installedAccounting sec. pool allocation failure for Allocation failure on task account block for Task "XXXXXX" does not contain a debugging aidReplacement control task not installedWrite back caching data lost. Unit write lockedRemount verification task not installedI/O stalledI/O resumedReplace Command Failure Task "XXXXXX" terminated on processor "X"And with pending I/O requestsPostmortem Dump not possiblePostmortem Dump will be generatedTask load device dismountedCheckpoint space allocation failureR0R1R2R3R4R5SPPCPS ը 0FUjʩ%ElϪЪ'3BY}ҫ8e¬AMY 5 ߥ& *  + 23E Ew    Е-   0@A DW e`fÊ    E &  m  f A N  %&f |4,??aa Y d¥TITITITIr뀻¥dNpTITITITI(?a`4|`)00ZZTADATADATADATADATADATADATADATADATA?H * * * * * *08lnz*D$& DH, x7 .*Z 5R5 J5>F|>5*5hp,E%@5"7B5 5 @, @e    ȋ t5z'%|j%vN`UX RPR  8,0 N   0 U U U w 5= ww F bw 8w 0w ŝw WW w ֤w 5 Lkw veJ*~*w ֤JQ000U8w vr.׭ ׭׭*000E80 w 2ШrJ*~w VwfSYZ7 Xk]hg]dATɝRB % (W Qw WSEIF???6N&f%w4%7 wvUF 575ѕ%5 ^ÝXÊѕ-5Et5p ѕ-e Ê5R%ѕ,ѕ ÊΥ` Ê& & &  f& & & Ν  & & &  f& & & Ν   3  nINPUTERRORSYNAMBIG" NOSUCHDEV*( NOTFILES112DUPL:ENTERRBCREERRL1ATTERRRIPRIV\[IE.PRIb$nNOPRIVj IOERRORr INCVOLLABELz IOERRONEDIR ٮFEANOTSUPNODIRFAILDEL$/ILLFILET2FTdtĬڬ0command input errorcommand syntax errorambiguous keywordno such device availabledevice not Files-11 directory structureddirectory already existsfailed to enter directoryfailed to create directorywrite attributes failurevolume not mountedprivilege violationno privilege for attempted operationI/O errorincorrect volume labelI/O errorvolume is single directory onlyfeature not currently supportedDirectory not found on deviceFailed to delete directoryDirectory not deleted -- files existUFDw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$f& ͥ`̋  @  % ff&QE eN w `NA`c<2. wՀ,ŀ(@ L @   HU@ (  u G   53 : ̋    t  6݇u    5 & 5  5  56   AAaf ΊP   @ P   6 w ̋ xe%  @ Хȥ   AA wAf f`E  5 _Х*  BC  5 T   f : azE  + $& .! _0 7 9A  F Z5  ע ע  5 @Ae   A D BA0u` 0ff &a(B0`B EeB `B EeB ` Ae00ZZN Q I uAeAa a Q Q  ALLOCATIONENTRIESOWNERUICPROTECTIONDIRECTORYDELETECONTENTSLOGSYSTEMOWNERGROUPWORLDRrR jRRഠ/ 80C0K>TN_iRp Ry Rഀ=:pഀ=:lഀ=:bഀ[,쵀,,H](!, )~D:=RRWRERDR :=RRW RE@RDR :=RRWRERDR :=RRHW RHE@RHDRH lmn:r <[]>,<[. :!] : @.ֶ ]. :!> : @. >.P. P!..  +- # B``. +- # Ƴd f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ &f UFDPARTPNUMBpT|,Ř AY dSYSYTISYTICLz~̀Vhx~UML... - UNA ECO microcode load, controller %VAUML... - File access error = %D, file = %VA%VA%VAUML... - Microcode load error on controller %VAUML... - Partition UNAMC not foundN  LB:[1,1]UNAMC.TSKqQ7 ΡXUNU'N"UNqe %@ wwwwLU{LULiUdINt hj`& T3 ֡ &#  97  &4e6 N  !& d & & & & & Ε 00ZZTADATADATADATADATADATADATADATADATA׭ &*& <w` ,& & & v& & & Ε ֡ ֡& & &  &֡& & & Ε &* *J֡. j ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & ej 6& eV /& e*AHŀ ȕ Е Е Е & e & e Е A %& e A  Е A EA EЕ A ZA   $Е. B AЕ; Z     w  ť ť 0B Aaw D&& bЕ- eaePPPЕ-$w p D  &Е. ce * Е:   Bw  ' UD$BA &( U BQ |Е*  & & @( f  e ee e hg\w *8I **=)98  eB &&  U **e *Nlv ΋*.2 , & #!)&eP(e && >e >E p* ww (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  b1 >w ( D D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# (w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) <@#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B z R* | eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w 8  0,0w  w w:w& 5 ߥ& *  + 23E Ew Z   Е-   0@A W e`fÊ    E &f 82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E ~ (.8Ae f"( UCɗ&+(e$&% &ff **f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ 141612epl2l0p Mw&   f >5>Eu   e6p 4 8 X j81416      ^ f B&* D*>00ZZN =00l&8el2 0 *w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wLw eE D` bl lrw   B eE"s    s-  CslW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  weB  8 $&w *(5<s1  U U@  lf&" )'&M'&&**%*%0 *&* :*5ND  <  EU    8   * L 4 6 e6p 4&*&4&6= 64 wz%!64=5 2 6  l0 & Z46 64 :)0406 0 *0e6p 4 = *) l0, *) $ )*)0,40,6 &   `@ ` B   & A @    8e2 ..8em,0l0!D0e6p 4.) H&f | D Re) .  e6p 4 08*w=p!Օ^,*1 U8UMw w. B 00fep=& /e`pw^46f %8 E D/D!D l0l8epl0pɥ.ɕ w(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w&1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    D*w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ 0,0, f 톇,, w      .% j eB U5UU Z plp & NeՀ)*(e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w v&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@00ZZTADATADATADATADATADATADATADATADATA||, QY 2'?TISYSYSYTIOV>@ VF|@>@A B C D E F H J K L M N P R S T *,.DLjln $&.$"pFؼ )t| ؾ̯E5 @ί&` ,1ť  ť/wrw w ť: 5ť/  p  ~ \ Aw, N& w  ⣷x b,  7 R 7 F R J&z C4@   '7HmxB5<76mb0 ,?!& [~mFE! M Մ   rB  >,7m5m @@ EE@P5@Q7mߊ@] @ *&lU7.& NBw w\ @wp A W X f7 TH  B  6( 2 2   v- wA@,A1 `   4w   e   Fwh @e-^   z 44@-5 & 5E@ ` P  T C - 4~w-, ~Ћ^1NB2\,e f f& Df l Ί SbDS C&N` b Mb b"Sp55w0e ! 7 wV%e "4,ZX6X4PX*X5 NX*XDXXA&TTUE$TT TT Af e e w0  ՕՕ~ %e  f x7|W7XW57|W7XWeE$55 555  $XX:77 pew| `>He z : V & # "  .!!*.5n V !\ 5T0 jD: VVF#w *` z[= lTR  NMť=J& @F J ť/ P0 1ȕ `,XP ť/   ec~  ť/ p w H7V7R7 8r )( $ # @  w A@,A1  w[ Ъ wXwP ť Ћh,,    h1, .J $& !,  EEB!B-  ,!-  EK-s- Z[wd7 v W W W ؾ00ZZN   %      % w"wЫ  Ы  z:& $ p vN #-@C #C(#F5C %ؾ-(٫ Х$@ %O" 5 $% I JwwKܫ (z 0 Q n $p5\  % džH b5h --J| \Pr P  ڼ$   h 4]E& w %% wAE7 A  Deaw7  7!     *  w<77 & U 0 &&f DE%\   & Д  > 7  fLť  w0  B$P)wf)FЕ[  pЕ,  bЕ]F7nCommand I/O errorFile %X not a valid driver task imagePrivileged commandI/O error on input file %XFile %X has illegal STB formatSyntax errorDevice %2A%O: not in systemPartition/region %2R not in systemDevice not mountedFile %X not contiguousOpen failure on file %XTask image I/O error in file %XPartition %2R too smallIllegal driver task APR usagePartition/region %2R is a commonDriver already residentDriver being loaded or unloadedInsufficient pool spaceLoadable driver support not in systemDriver not loadedDriver cannot be unloadedDevice %2A%O: is attached, busy, online and/or mountedInvalid driver data base at offset %P in file %XDriver built with wrong executive STB fileWarning - KRB %3A interrupt vector %O too highInsufficient ICB pool space for CPU %1AWarning - KRB %3A interrupt vector %O in useSymbol %2R is undefined in file %XSymbol %2R is doubly defined by file %XIllegal value for symbol %2R in file %XDriver dispatch table is inconsistentCTB %2A is not supported by driver -- not loadedCannot load/unload a pseudo deviceToo many symbols of the form %2R in file %XCTB %2A does not existDCB table for CTB %2A is fullKRB table of CTB %2A will not accept KRB %2RKRB %2R not in loadable data baseCTB name %2A is a duplicateWarning - loadable driver larger than 4KPartition/region %2R is not a commonKRB %4A is not offlineIllegal use of partition or region %2RPartition/region %2R already loadedPartition/region %2R cannot be loadedPartition/region %2R cannot be unloadedPartition %2R not in system, defaulting to GENҰ 8Wdͱ;\tҲ5f8`ߴ.Ecε3Z~̶_  :ęsyLBFABDEFIMNOPQRSTUXYZ<>-hp2 2-7JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA zEAa$ & & @( Rf  e ee e &3 w 2 ť ť 0B Aaw ' UD$BA &( U BQ Е* w && D¥%  B&ХVA . C e!  aebE  Е%̥V A6D Ћ  AP AЕ Bf  & e 6& e /& e*AHŀ ȕ Е Е Е & e & ev Е A %& eJ A Е A bEA E00ZZTADATADATADATADATADATADATADATADATAЕ A rA   $Е. Z AЕ;    w D&& bЕ- eaeiPPPЕ-$w D  &Е. ce L  Е:   . Br 4<>BZ^`bdf\}vU}xYMz||<~t!z%g';@; ;;;@;%;2;>;D;K;@Q;W;d;p;v;}+{p :^=&D:L Net^vv""v?T8r |"e$쩔&6(6*6Ԁ,74.7f07&2T|4T6qZ8[M:z}ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ D  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e6E:5  5 2  UE  :ՇE U 5@*& E& & f&ËDef Ë )̋U 5 ߥ& *  + 23E Ew    Е-   0@A W e`fÊ    E &   `@ ` B   & A @    &  m  f A N  %&f w t*8I *=)98 * eB &&  U **e *Nlv ΋*.2  & #!)&eP(e && >e >E xp* wxw X(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w  00[ZN) P8C * ) *wz*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w jC#    D @)  6?0D)82e&( 0 0 0 80 B0 0 0 0)#0.0+1(e  %&p*w f( f)f )"(. = . B  E < (.8Ae f"( UCɗ&+(e$&% &ff **w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ  *) l0, *) $ )*)0,40,6 e6p 4 8  81416  6 \   8  **  DP5R RRR w eE D` bl lrw   B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) &f v e) .  e6p 4 &08*wB=p!Օ^141612epl2l0p,*1 U8UMw w> B 00fep=& /e`pwn46f %8 E D/D!D l0l8epl0pɥ.ɕ w0,0, f 톇,, w      .% T eB U5UU D plp & NeՀ)* 5լ լ $ՠeB  8 $$&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* r*5ND  B<  EU   Jĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ ^z  *DEe    *1  ˕03 "   ˔Ӕ ʥ7w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w0   f >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce b   d*w *  00[[TADATADATADATADATADATADATADATADATAע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@(e( 1  `((   >: 5 eCe5%& w &Ba +- ʥ# . U 0   b   `     w ( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff V f&*wp. tB5(8e$8w2A&(e x4p8q  (#4=A#@)( J *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B 0 8* b eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w " f \&* *   f l >5>Eu t  >MwV> =00l&8el2 0 *||,ŠQY &[q$Y 2TISYSYSYTI00[ZN>@RTISYSYSYTI( H@>||@A B C D E F H J K L M N P R S T *,.DLjln $&.$"pR t دE5 @گ&` ,1ť  ť/wrw w ť: 5ť/  p  ~ \ Aw, N& w  x b,  7 R 7 F R J& C4@   '7HmxB5<76mb0 ,?!& [mFE! M Մ   rB  >,7m5m @@ EE@P5@Q7mߊ@] @ lU7.& NBw w\ @wp A W X f7 T¤H  B  6( 2 2   v- wA@,A1 `   @w   Re   Fwh @e-^    44@-5 & 5E@ ` P  T C - 4w-, ~Ћ1B2\,e f f& Df lΊ SbDS C&N` b Mb b"Sp55w0e ! 7  wV%e "4,NX*X4DXX5 BXX8XXA&TTUE$TT TT Af e e w0  ՕՕ~ %e  f 7pW7LW57pW7LWeE$55 555  $XX:77 ew He 8 ȷ F b(  #  ȷ !*.5n b !\ 5T0 jDF VbRȷ #w *` z[= lTR  NMť=J& @F J ť/ \0 1ȕ ,XP ť/   ec~  ť/ p w H 7V7R7 8~ )( $ # @  w A@,A1  w[ ܪ wXwP ť Ћh,,    h1, .J $& !,  EEB!B-  ,!-  EK-s-t Z[wd7 4 W hW jW    % ʹ    % w"wܫ  ܫ  & $ . 4N #-@C #C(#F5C j%-( 8 Х$@ %O" 5 $% I JwwK(z 0 Q  , .5   %  džt Hp   5^ &V -F -B @ . \$ P ʹ$   h  ] E& w %% wAE7 A  Deaw7  7!   ȷ  *  w<77 & U < &&f DE%\  ,& Д > 7  fLť ȷ < wf ,B0P$)wf)00[[TADATADATADATADATADATADATADATADATARЕ[  R Е,  D Е]R7nCommand I/O errorFile %X not a valid driver task imagePrivileged commandI/O error on input file %XFile %X has illegal STB formatSyntax errorDevice %2A%O: not in systemPartition/region %2R not in systemDevice not mountedFile %X not contiguousOpen failure on file %XTask image I/O error in file %XPartition %2R too smallIllegal driver task APR usagePartition/region %2R is a commonDriver already residentDriver being loaded or unloadedInsufficient pool spaceLoadable driver support not in systemDriver not loadedDriver cannot be unloadedDevice %2A%O: is attached, busy, online and/or mountedInvalid driver data base at offset %P in file %XDriver built with wrong executive STB fileWarning - KRB %3A interrupt vector %O too highInsufficient ICB pool space for CPU %1AWarning - KRB %3A interrupt vector %O in useSymbol %2R is undefined in file %XSymbol %2R is doubly defined by file %XIllegal value for symbol %2R in file %XDriver dispatch table is inconsistentCTB %2A is not supported by driver -- not loadedCannot load/unload a pseudo deviceToo many symbols of the form %2R in file %XCTB %2A does not existDCB table for CTB %2A is fullKRB table of CTB %2A will not accept KRB %2RKRB %2R not in loadable data baseCTB name %2A is a duplicateWarning - loadable driver larger than 4KPartition/region %2R is not a commonKRB %4A is not offlineIllegal use of partition or region %2RPartition/region %2R already loadedPartition/region %2R cannot be loadedPartition/region %2R cannot be unloadedPartition %2R not in system, defaulting to GENް)Dcp±ٱ)Gh޲ Ar̳!Dl:Qoڵ(?fض_ ,F(ęsyLBRw (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ & & @( `f  e ee e &f& v r 4<>BZ^`bdf\}4U}6YM8|:<z@B%Dg'F;@H; J;L;N;@P;%R;2T;>V;DX;KZ;@Q\;W^;d`;pb;vd;}f+{pʹ:^̹=&ιD:йL NҹeԹt^ֹvعv""ڹv?Tܹ8r޹|e쩔666Ԁ747f7&T|TqZ[Mz}U#hUNL -- VECEXPVEC('&1 8 8 8, 8 &8 &< &$ &€ &| &¨5ew , Bv     5BwJ r-@ D- E %     U E00&[([NU 5  $5$UW       E5 E  W ч5  ,E  &wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&  m  f A N  %&f &ff  &[q &[q& &r 8[q}L &E`W`|,==b Y 2 ATITISYSYTICLOV< B ^<j~ T  :'Zz VFY>P{L}=VFY Version M0529 (ANSI)VFY -- [0,0]File ID %P,%P %X Owner [%O,%O]file ID %P,%P Summary: mult = %D. free = %D.00.[[TADATADATADATADATADATADATADATADATA bad = %D. Header map error I/O error reading file header - Error code %D. Bad file header %D. Lost files were found Rescan of volume to find all files with multiple allocation%NIndex indicates Bitmap indicates %N File header does not exist?TSYUPRRERFRRIDRDE0RLO@RDVRLIRRCRx HDRALR xQzSY SYt:#zSYz 4dwNwB0 p V \  6 R ~ Vd:&0    5 M~~500  J  E  5 5@ 2 _ `w @ 4 :5J- p*U<~ 1 7 * D .`ww%% *d zpmp!+ 05*5wPw,w,- -5@wD5@tww, > ` EVtv0 6 e p 0 m"p  85E %wvpppm  U- ,wFN Z5v B Bd"  w,f2*  2:8w5  (Dp  w tD % wrU5 n#5   beUp  aP~7 V7 x7 p7 nD <^]\]Z2JHF :5    ` D BC %  2 &3&f& v '&1 H @x 8 0 (  d  8     F$ + (6 L' L,5ew H, Bv     5Bwp 5  5 2  UE  6tE U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&   `@ ` B   & A @    w eE D` bl lrw \  B eE"s    s-  Csl&f &ff w 8! & &  $e**0+1(e  %&p*w f( f)f )"(. = . B  E " r(.8Ae f"( UCɗ&+(e$&% 8e2 ..8em,0l0!D0e6p 4.) ^&f (  e) .  e6p 4 &08*w,=p!Օ^141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ `wP >U8UMwJ w0,0, f 톇,, w      .% eB U5UU plp & NeՀ)* \ \@\(\\006[([N\ ""(@)54-5\(1"$ L6"p[1,3]The following files were not in any directoryFailed to open directory fileFailed to close directory fileI/O error reading directory file They have been entered in directory %VA They are still lost, could not find directory %VA Failed to enter file - Error code %D. File successfully entered as %X Error code %D. - Directory [%I] As a result, no files will be entered in %VAThe following directory entries were invalid[%I] File ID %P,%P,%P %X - %IFile not foundInvalid version numberReserved field was non-zero %D. Invalid directory entries were found %3A,%3A%VAE%&c%0#  pmv p܇xd j JEJd P 0:  "R~ ( dp\\p^^pVBpXDpZFNN7 Z5 5@w8$l r1 0 $p& w0 Fp%hd `[5"  .  2 w0 w@  -` &b&&&eH&&& )TTT\TTT NeB\ p *  te& 62* 2 5@*2l U 5 (!#   ` q 52l >& v 5, $)  *1 *2Y   & % ( "dm ( -  -  D`#;Ja  2 " J2 v\b   ȕ bW0W9 D!  R e ѥ  R2F }&  8" F$ ( * * 2+ Z, (6 (h8 L.Failed to find INDEXF.SYS;1 in MFD - Will open index by file ID 1,1Failed to find BITMAP.SYS;1 in MFD - Will open bitmap by file ID 2,2%NConsistency check of index and bitmap on %2A%O: Listing of index on %2A%O: Read check of files on %2A%O: - Blocking factor %D. Storage control block (VBN 1 of BITMAP.SYS) is corruptedContinuing with an approximation of the size of the volumeOnly the "blocks free" value is validThe "blocks used" value is valid in the line beginning "index indicates"The "blocks free" value is valid in the line beginning "bitmap indicates" B35w7 8~ & F5# # * D.%wBD   J . &  v 7w CC e  å~ `eBC    l ~ t5 ^P T~r5N l0F$& k7,\7,^U#  W m  J M5@D25 ~:5%e0E'f( p 7w  @7|26 "w&c%E%w1>&2, wf R  Ev 2E7  B`wP  5    fQ($  5"SY7 D# `   &R7 fd5(00>[[TADATADATADATADATADATADATADATADATA5 #5"# !# * D BD\ |$&4 . ~ vlpeb7 JeB$& ! e      % 8" N# F$ * 2+ (6 (h8 4`8 Failed to open file for read check - Error code %D. Error starting at VBN %O,%P, LBN %O,%P - Error code %D. Error at VBN %O,%P, LBN %O,%P - Error code %D. File ID %P,%P %X FR  `ˋk,,cjf!# B $eRB# # #  p!& T% ~%f 0 d N   B\  wD 3  %*1p sas &ff2  *  `e @   !  CbB a(2 z&5 t Te   BЕ.Е/e .Е.4w ( + (h8 L, LD, t Multiple allocation %O,%P Bad block number %O,%P Block is marked free %O,%P File is marked for delete I/O error writing file header - Error code %D.. blocks free, . blocks used out of %N%2A%O: has Delete this header [Y/N/Q/G]?  5 dŀ (  @ @`e  wN eB w &    ,=  <  ^w0  b Z w@   B   *w05 ( \5 w@   , CaB r w@ P x p  b  dmp    w d3 EH E    Bt@w5 M5@F\F $f82 f, )ĝĥY!ĥyĥNĥnĥQĥqU ĥGĥgU@&U| 5nmA  " 2 e\^8 wf4   $" f %" d Е. &    `A  ~ D w   ~  <F$ 4* ,(6 $L, LD,Get Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ File1>&wn  7& & A&?mfDE @χ7.,,7*oj o&o&d0 0 0 0 0 && &&D l f&&( 7 |7 B7 B7 f7 n w 47 H 8k$CD~CD~CD  ~T I DTr J7 7 R5 5^5P5H U@D5@:52%% \6 \0 b | f  @ : w X`` ` ` \,"x(%w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f00F[([N   P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w &jjlj ɥ@@aujk,bp z5f fˇ ȕ f‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *dw  8jDl@ TeBT85l@ *@( D peB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ 8" x' ( ( + 46 4`8 @" @f% @" @" L0* L+ L.w &(SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  T1 >w t ) * w46l0f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ  (N=eB  8 $&w *(5<s1  U U@  f&" )'&M'&&**%*%0 *&* &*5ND  <  EU   w ~*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce |   *w n832cd& & & B  2OΕ   N Υ$Ε  22Υ   8 v Ε f Je * e*w@) *0,   ) )% ȥ  = ȥ l 0l  6ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,  N w0 D J T B #  f  `* w)0406 l0 =D `p46 f 64/=  @) 0  8w2 46 88 ` e*w  > =00l&8el2 0 *w 0*8I *=)98 J eB &&  U <뉝**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* L wh   f F >5>Eu N  w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=ww ,*eB 8 J @w  Z  2w: F :,,  *w *D  w w *f f v! fP ŀ)BW=f(& e %&&eH =&e0  LU   E > >E(5E00N[[TADATADATADATADATADATADATADATADATA=uf p  w f &* f*w r wPw b wFw T w>5%& w (&Ba +- ʥ# . U 0   b   `      *) l0, *) $ )*)0,40,6 w 8 ) | f fU v%  BA `6p 4p`4 %60 4 Mw(  DP5R RRR (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w1  %,,:4 w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ  &f D E/fC A |B f&  dBeA @0 r (@0 `a@eA  B0 HAB  2f  C @*) R h P82e&( ߀0 0 0 80 B0 0 0 0)#0.e6p 4 8 81416 @  (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ z  DEe    *1  ˕03 "   ˔Ӕ ʥ7&fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@ B 00fep=& /e`pw$ 0 w B) ,8C 0* ) *w*   ep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  , J *` C#   D @)  6?0D)w d( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# rw&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  z P3)/ b#( P) @#**fff  P&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( d *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ l& & ze# eB&B B " * & eB00V[([Ne>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2 8   և** 0 w ) ,8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)wJ FC#   D @)  6?0D)w l( D 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff  x&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)( *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B J >* N eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6wB/!0/ l0/!p!0 .=p0p2 8  և**&7 7 7  f  %1  11 1 1 11~f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *00^[[TADATADATADATADATADATADATADATADATA W <W [W >W ] v(* 6 e :eeȵe ~ o DEP%(5 eȵPe< &e r %&$@A 55@558 eBeeeȵee&e e4   QB4w : w 0& W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &kz?TLBOPzLB  %Illegal deviceOpen failure on bit mapOpen failure on temporary fileFailed to allocate space for temp fileFailed to detach deviceFailed to attach deviceCommand syntax errorI/O error on input fileI/O error on output fileIllegal switchOpen failure on listing fileOpen failure on index fileNo dynamic memory available - Partition too smallClose failure on bit mapClose failure on index fileClose failure on temporary fileClose failure on listing fileIllegal response - try againSY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VAI/O Error Code %D.QI/O Error Code %D.''''@'8'b'Z' 6 5  5*+5U5 5   BBCU% B   v $5 %:2*v "7   "UfUh"&& &" &Е ȕ-ȕ  <"   '  <"B<"&Pe85)E$ %& e eUU& % &!e e\^$% 5R  &eH~|" -- |"|" &#"l A' & & & & f#& & & Ν )  % \U&" 2<"}' B<"B " 8&' '  h %܇w d& LB&`  "  V111 D J M >   #U%    tM D  E e#@P  & SY&  & SY& t 5 #%  # L)T &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e w tDEs'A  &A Е*C є~ABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf R & e46& e /& eb*AHŀ ȕ Е 00f[h[NЕ Е & e & eЕ A %& eA x Е A EA EЕ A DA   $Е. , AЕ; $     & & @( f  e ee e  w  ť ť 0B VAaw ^D&& bЕ- eaeMPPPЕ-$w .D  &Е. ce  Е:   B 5 ߥ& *  + 23E Ew ㅐ   Е-   0@A fW e`fÊ    E (B*A( (A (A(AD&(Cp @&(<p9&(5e(H&(*pDe* ffҕ[ :ҕ, 0ҕ]0 e E 5  e0R |,?P{L}< 00n[[TADATADATADATADATADATADATADATADATAkz?TLBOPzLB  VFY Version M0529 (ANSI)VFY -- [0,0]File ID %P,%P %X Owner [%O,%O]file ID %P,%P Summary: mult = %D. free = %D. bad = %D. Header map error I/O error reading file header - Error code %D. Bad file header %D. Lost files were found Rescan of volume to find all files with multiple allocation%NIndex indicates Bitmap indicates %N File header does not exist[1,3]The following files were not in any directoryFailed to open directory fileFailed to close directory fileI/O error reading directory file They have been entered in directory %VA They are still lost, could not find directory %VA Failed to enter file - Error code %D. File successfully entered as %X Error code %D. - Directory [%I] As a result, no files will be entered in %VAThe following directory entries were invalid[%I] File ID %P,%P,%P %X - %IFile not foundInvalid version numberReserved field was non-zero %D. Invalid directory entries were found %3A,%3A%VAFailed to find INDEXF.SYS;1 in MFD - Will open index by file ID 1,1Failed to find BITMAP.SYS;1 in MFD - Will open bitmap by file ID 2,2%NConsistency check of index and bitmap on %2A%O: Listing of index on %2A%O: Read check of files on %2A%O: - Blocking factor %D. Storage control block (VBN 1 of BITMAP.SYS) is corruptedContinuing with an approximation of the size of the volumeOnly the "blocks free" value is validThe "blocks used" value is valid in the line beginning "index indicates"The "blocks free" value is valid in the line beginning "bitmap indicates" Failed to open file for read check - Error code %D. Error starting at VBN %O,%P, LBN %O,%P - Error code %D. Error at VBN %O,%P, LBN %O,%P - Error code %D. File ID %P,%P %X Multiple allocation %O,%P Bad block number %O,%P Block is marked free %O,%P File is marked for delete I/O error writing file header - Error code %D.. blocks free, . blocks used out of %N%2A%O: has Get Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ FileIllegal deviceOpen failure on bit mapOpen failure on temporary fileFailed to allocate space for temp fileFailed to detach deviceFailed to attach deviceCommand syntax errorI/O error on input fileI/O error on output fileIllegal switchOpen failure on listing fileOpen failure on index fileNo dynamic memory available - Partition too smallClose failure on bit mapClose failure on index fileClose failure on temporary fileClose failure on listing fileIllegal response - try againSY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VAI/O Error Code %D.QI/O Error Code %D.?TSYUP`RE`FR`ID`DE0`LO@`DV`LI`RC`HD`AL` xQzSY SYt:#zSYz:)b-Delete this header [Y/N/Q/G]?  4, ww0 p x$ \  $ R ~& Vr&0 6$  >  5. M~~500 # # E  5 5@ @  `w n b/  :5- *U  } 7 v& D00v[h[N( .b``ww r z pm,p!+ 05*5w$ w,w,-L -F5@wF5@wrw 2  > ` EVtv0 6RN FBe p 0 mnp  85DE< "[\wvpppm ! U- ,l wF  Z5  Bd"  w,@*  @w5j f J!Rp F! w R !rXwrU5 #5     beU  aP~7 7 7 7 R <]]@. 5V h   ` D BC % BZ @ &50#   m ܇r  lEr n R r DR~& Jxrp\\p^^pVBpXDpZF\NdN`7 ^ Z5 5@wZ$N  1 0 $p&( wR Fp%hd ~[5     P 4w0, w@" P "-P &&&&eH&&& $)TTTTTT NeB p *   e  & X@* @ <5@ @N  U~ t5l (!# zl  ` XS  5 @N   5, )  *1 *@; 6b  ( & %  "rm F *-  -  D`#,C Z  @ " J@    ȕ W0W9 D!   e ѥ  R@ _&  B35jw7 (& F5># j# ^* DDw^BD  \(    v 7w CC e  å~ `eBC    tr  5>B  <05 & 0&T$& k7,\j7,^dU#  W m  J M5@z@!5\! :U5F%de0hE'f( d 7NwL F @7:2r w&5w:1@wf R Evj 2E7 L ( ZB`w V (5R  @  fQ\X 5SYB7 @R# .   x7 $r(5(5 #5"# !# * D BD |   *.e 7 eB$& ! e      .T  `ˋk,,c(!# B $eRB# # # xx p!& T %E ~%f 0D d N   B P wDD 3  %*1p sas &ff@  *  `e @   !  CbB a(@ XF&5 L} e   .Е.Е/e Е.wb  <5 rŀ ( z @ @`e  w eB w &XV T P ^ =   w0 0 Z w@    w05 \5 w@ Z    CaB 4 r Vw@N " x J  00~[[TADATADATADATADATADATADATADATADATA dmdp  h 2 w r3 E߄ E    Bt@wV5 M5@F $f8@ f, )ĝtĥY!ĥyĥNĥnĥQĥqU nĥGĥgU@ZUJއ 5<mA  " @ e\^R w^f  >, ݂ f %< r Е. J&( x   `A  ~ D (w  (  ~ 1`w: t7& & A&?m2E @χ77;6 AAr0 0 0 0 0 fYY PttR 6Z(N n7 H7 7 7 27 : w L7 j |k2CD~CD~CD  ~b 8I 4Db> 7 h \7  5 5* 55 U@5@5  D 0 b  f  D > w (`` ` ` `,"|(%ڡ&7 7 7 f `8 %1  11 1 1 11HD@6 5  5*+5U5 5   BBCU% B  v $5 %~vD 7   |UfUh|&& &| Е ȕ-ȕ       BPe25)E$ %& e eUU % !e e\^$% 5R  eH~8 -- 88 f A & & & & f& & & Ν )  %  U 2O D BB  8&i |  %F>ׇw l ^& LB&`    V111 D J  M >   U%    tM D  E e@P  & SY&  & SY& n 5 %   F)N &?,-fW >5W E5W sW s W ! W 8W >W EW W W W Ō $|e є~w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f   P aAAf@pnp  C*8֋ P88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *33w  8jDl@ TeBT85l@ @( D DeB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ & & @( tf  e ee e &f& v ('&15ew , Bv     5Bw `7_7`800[[N96-4; &D- E %     U EU 5  5U 6;6 ^:: 7~9E U *5@*& E& & f&ËDef Ë )̋U&f &ff &  m  f A N  %X P ,LP`, $4(8|$L<H\|,((VY &[q$Y 2 'TITISYSYTICLOV< R ^|<z( (d * J'j VFY>P{L}00[[TADATADATADATADATADATADATADATADATAx(VFY Version M0529 (ANSI)VFY -- [0,0]File ID %P,%P %X Owner [%O,%O]file ID %P,%P Summary: mult = %D. free = %D. bad = %D. Header map error I/O error reading file header - Error code %D. Bad file header %D. Lost files were found Rescan of volume to find all files with multiple allocation%NIndex indicates Bitmap indicates %N File header does not exist?TSYUPbREbFRbIDbDE0bLO@bDVbLIbRCb HDbALb xQzSY SYt:#zSYz Fnww0 p  \   R ~( Vt:&0    5 M~~500 Z D E  5 5@ B o `w   :5J- p*U< 1 7 *( D* .`www!! t zpmp!+ 05*5ww,w,- -5@w5@twZw > ` EVtv0 6 e p 0 m"p  85E h5!vwvpppm < U- ,.wF^ Z5v  Bd"  w,fB*  B:8w5  Tp  w T dL!r wrU5 #5   beUp  aP~7 V7 x7 p7 nT <^]\]ZBJHF :5  H  ` D BC % B &f& v '&1 *RX "R RP R R d d, dL dP d` R, d  ` d d$ d4  R    zL r j  b Z Rd( Jd BR8 :R| 2j * "R$ RL R< RH R ~# R\5ew , Bv     5Bw |{|50  (r- DUt-E D  E E ܁@"&>&wE U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&f &ff  &[q &[q`R@@ @d@ @R@. Dv DlvvDvvDvvDvvDxvvv ,,00[[N[1,3]The following files were not in any directoryFailed to open directory fileFailed to close directory fileI/O error reading directory file They have been entered in directory %VA They are still lost, could not find directory %VA Failed to enter file - Error code %D. File successfully entered as %X Error code %D. - Directory [%I] As a result, no files will be entered in %VAThe following directory entries were invalid[%I] File ID %P,%P,%P %X - %IFile not foundInvalid version numberReserved field was non-zero %D. Invalid directory entries were found %3A,%3A%VA &!0# j Tm 4܇:t  rErt  Xb  JR~( P2tp\\p^^pVBpXDpZFNN7 Z5 5@w`$T V1 0 $p&* wX Fp%hd [5J  V    :w0 w@  (- &J&&&eH&&& )TTTDTTT NeBD p v*  @e& ^B* B B5@RBT $U8 5& (!# &  ` Y 5BT f 5, L)  D*1 *BA <h . & % P "tm@  0-  -  D`##2I  B " JB DJ p j dȕ JW0W9 D!  R e ѥ  RBn e&  & & @( :f  e ee e &  m  f A N  %Failed to find INDEXF.SYS;1 in MFD - Will open index by file ID 1,1Failed to find BITMAP.SYS;1 in MFD - Will open bitmap by file ID 2,2%NConsistency check of index and bitmap on %2A%O: Listing of index on %2A%O: Read check of files on %2A%O: - Blocking factor %D. Storage control block (VBN 1 of BITMAP.SYS) is corruptedContinuing with an approximation of the size of the volumeOnly the "blocks free" value is validThe "blocks used" value is valid in the line beginning "index indicates"The "blocks free" value is valid in the line beginning "bitmap indicates" B35w7 `* & F5# # * D wBD D * r  N F v 7.w, CC $ e  å~ `eBC    T  5 8 |5v( 0(V$& 2k7,\7,^U#  W m  J M5@lBB5 :5%e0E'f( 7w  @72 Jw6&! w1!ZTHFwf R2 Ev 2E7 * B`wx l 5  V  fQPL < 5JSY7 T# D   B!z7 t*5((5 #5"# !# * D BDD !L V  e7 reB$& ! e      00[[TADATADATADATADATADATADATADATADATA Failed to open file for read check - Error code %D. Error starting at VBN %O,%P, LBN %O,%P - Error code %D. Error at VBN %O,%P, LBN %O,%P - Error code %D. File ID %P,%P %X Vz  `ˋk,,c*!# B $eRB# # #   p!& Ty% ~%f 0 d N   BD 0 w$D 3 %*1p sas &ffB  **  `e @   !  CbB a(B &5 , (e   Е.Е/e rЕ.\wB \ Multiple allocation %O,%P Bad block number %O,%P Block is marked free %O,%P File is marked for delete I/O error writing file header - Error code %D.. blocks free, . blocks used out of %N%2A%O: has Delete this header [Y/N/Q/G]?  5 tŀ (  @ @`e  wv eB w X&   { T= . d  w02 Z w@" B  j 0  Rw050 P \5 w@  ( F ,CaB x w@ ~ `   dmp  n 8 "w< t3 Ep E    Bt@w5 @M5@8FD. $f8B f, )ĝĥY!ĥyĥNĥnĥQĥqU ĥGĥgU@"U 5mDA  " B e\^  wf\  \ LJ f 6%  t Е. &*    `A  ~ J w b *  ~ Get Command Line - I/O ErrorGet Command Line - Bad @ File NameGet Command Line - Max @ File Depth ExceededGet Command Line - Failed to Open @ File1!w 7& & A&?mlE @χ7VTT7R8F ""t0 0 0 0 0 n3"3" XN"N"T >m"m"( 7 7 j7 j7 7 w& 7 H 8k4CD~CD~CD  ~d I DFd r.7 7 z5 55x5p U@l5@b5Z!c!4 \F 0 b | f  @ : w `` ` ` D,"`(%w Z5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  P aAAf@pnp zC*8֋ \88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w ~jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aj00[[Na`W- f`nw^uhnw@ DlljaCeH###33 & T8 *xLw @ 8jDl@ TeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@ & & @( Zf  e ee e   % z'&  m  f A N  % &7 7 7 . f | %1  11 1 1 11~kz?TLBOPzLB  Illegal deviceOpen failure on bit mapOpen failure on temporary fileFailed to allocate space for temp fileFailed to detach deviceFailed to attach deviceCommand syntax errorI/O error on input fileI/O error on output fileIllegal switchOpen failure on listing fileOpen failure on index fileNo dynamic memory available - Partition too smallClose failure on bit mapClose failure on index fileClose failure on temporary fileClose failure on listing fileIllegal response - try againSY%X%N%VA%VA%N%VA%VA%N%VA %N%VA%VA%N%VA%VA%N%VA:%VA%VA%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%I%VA %N%VA%VA%N%VA%VA%N%2A%O:%VA%VA%VA Command syntax error%N%VAI/O Error Code %D.QI/O Error Code %D.""""""## 6 5  5*+5U5 5   BBCU% B   v $5 % 7   lUfUhl&& &l Е ȕ-ȕ     [# r B"Pe85)E$ %& e eUU" % "!e e\^$% 5R  "eH~( -- (( "l Aj# z& & & & f& & & Ν )  % NU" 2)# BB t 8&C# V#  %^Vw d& LB&`    V111 D J M >   U%    tM D  E e@P  & SY&  & SY& t 5 %   L)T &?,-fW >5W E5W sW s W ! W 8W >00[[TADATADATADATADATADATADATADATADATAW EW W W W Ō $|e є~ & & @( :f  e ee e &  m  f A N  %|,?j?j Y LTITISYSYOVvLR^$%tTITIDUDUDU?j(@F :u~VNUqswPH4':dIqXLq`;}vv YM(|0&@ f > B 7  ^"5<d z 4 d %  rZ Zwfh`   W W W;W! E     P   ȕ  LR e  R W vW W  j  a( i ww n7 PBX & mM=& & 7$:   7 w % V7 wL >  8 m2% A & p n 7 7 l -wN`h  Xl DZ L 4 w : 27  mtMp. Z mP mF7> : 2&N`  m w7   X & X V7 x m b J &N`%w`w7B %.  e 7 $   w`^ w Z EE CC w H E E C & E   e0А  E C    ¥  ¥ Е PɋZw f   W K: d ^5R.:$ B8  "B w  f=& :  <3d  ZB(x  H"11 CBBl f:R B w>pbd  f`åfååå  åå `7d VMR>d 00[[Nd yff  7d z 4d # DD 7> 5"5,  t V- d . 76  uD 7 5"5, & & 7 |d D  7 n7z P 5"5, 7  w w  wd "5ym4v f 5$ %g` V   +  m  e& J  x  `E@e-BjE B` * l  0 hL w Ez  $ "  & N `N   C`@   w      mE B`eE  r l% !     w,D  7,6  &{}w  )  d Cw  m( % Dww 77|w L Dm PP&@A @mE Е:"8 d A:w ew d H  7 A Deaw w j 7!퇲 &  .  ¥8¥9& ɋ=     & Aa~@ 2WtEfd 7@  AaC  5C   p WaWz f&&7 8d 7Zp *w*z   f "$d  @ 5 Be Baʥ_  H B 7d @    e aB B %E Cנ0נ7 0t` %נ:ԥ: H  le0f  fBe vRF~U#@U]RBD:DH\}FH[JO_LBNTz}PR5sTVR9XxZT\ȩs^T.`""b5{rdϫxdfohcjiBxl.nL Npv:r+ t+{8|v,{2x&{8rz3{|0{G~3{3{(+{p+{P}St!I;UfH:d*}2g@wتlzHMsRX^RF^H HK[(rrirsPrhr;tSL:dODLTr644u~DFG gJ eĊBx C *6l;s-˪sAq:Dѫ# "ah $dh L&hh(lh.*(,Y.ѫO 0ѫBx2ѫh4ѫx6Z8f:l.<F>xZ@ӍBZDFHJ@LNPR@T:^CE=&D:L Net^vv""v?T8r|e쩔666Ԁ747f7&تT|TmQqZ[M̫xQz}00[[TADATADATADATADATADATADATADATADATAf& &3'&1 &(  &* &4 &9 & ) &.* &H* &J2 &~0 &) &"6 &7 &; &= &B &F &H &( z '( r 'b2 j '3 b (( Z $(. R $(6 J 0(+ B 0(- : H(K 2 H(K * H(L " H(rM  T(xI  l(T l(S  x(S x(T x(DW x(W (X5ew r , Bv     5Bw ]$R%5  5 2  UE &x %R%~&E U 5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&ff &f  (&<((t&&!(&&.(&&&3h1&&6h1&&>h1l&&Bh1|&&Ch1$&&E( &&V('&'Y- &'Z-&'[-0&('\-&4']-x&@'^-,&L'_-&X'c-&d'g-&p'i-&|'k-&'l-t&'m-&'n-x&'o-&'q-&'r( '&(wX2''X2L''X2''X2''(h (&$(*D((*`( ((0&0(( &&xIH(`(xIx<(T(xIL <(H(Sl(&Sl`(x(S`((S|`((S `((ȐS `(l(00[[N ݗ/gPdRaI^ ݗ=Y xW TwQ zN 0 Mؠ| Dw 8f   Aw w TBA b5 7| Ru*$ v>wt w ff  6L >( n6    Aw> w BA    5 7 |u@: Local TI: - GlobalSYSTEMGBLTerminal 7 ȥ=!7 7 ȥ/B 5"TIw"&|* 7|* ^'= D <s M&Cr* 8 78r*2:] Z/W* ,* "M Jd & wH5wz7L b D878  Jff  ؄7   IJw & xf `ׁ fb5R5 7 w Z  d 7l ƒ   , 5N_67  f  w7 NPPA Е:Е ffD7 w r <Е *΋* ֋7v Fwh ~ 8  | Vd 7BX DR72*@@ d AT~ D67  B(fCe Д~B Е Д~Е * \ Е Е(* DЕ) DeW >ƒw A¥Z fДД | Е:&B d &f:2H C 7@( Aa7@ n7 7 @߀7 ABE`eIWt ԃfd @B~Immtt&wRJ۷b d 74,@B Aa7@( 7 7 Vށw 6  w & 7 7 7 @%V7 XP P  %Y w1 f 1 U 11111211 V*1&X? @ -$6- 3̵ 0$ #-@3 -/%.(  %e%VeP"1wwegf&1eP( | ` wL   D *eH w 77 & U Loading Executive data spaceData space loading completedLB:=WK:/GBL Enter filename: t3zSYyIM 4a3 ww03pfCfph 1fȕ3 ww 3e3 F R  HZ# N &  VV %=SY7 337,\7^LB3 37,\b7^\  F 3 # w&w2Ӷ~ |%0 7 :؎ e2 e(ط~ WF\  $: T >  t 8 Zӡ e   0 eշ"e  -w  ҷ z\ r ,d l~˷z˷v˷rP.D L585@ J J J J J J 5?   wdw ַ 6"3eEC փJ`"e?E?JM ~J`ѷ8~\r dwfH V%7 % X "8   7" 0d , 5,  T <WK D T3SF w<f    L wh VX Z1\1^00[[TADATADATADATADATADATADATADATADATA3 T 6  T rh # Z` J ,l FRd ( "# ;   4e6  . e! * f| n73 t  t  `Z wDTSMHRSIUIC9  & "Ӏi9 Tt/3 \0%9" Q De:NW K UW ;E¥:B UW ;<  j /u 9 9 *)e !"[ uW ¥,  uW ¥]> =wĝ! &f" 7 d 0   7 |9 E C @   r  Fu`u 5`Ce    r l %  u`u 5` !   ~ 5 d 5cu ݷ у  t-t-  T!v 7 чBA Tu5P  ~U9ˋ9A B  u 5 & f   & @v 46`N H(K H(K H(rM l(S l(T x(S x(T x(S p(V h(S `(Sw 0 0,0w  >w ww 8   *  T 4 6 e6p 4&* *) l0, *) $ )*)0,40,6 0+1(e  T%&p*w. f( f)f **8Ae f"( UCɗ&+(e$&%  Offline Loaded Unloaded PublicRW COM RO COM <>[]()!!++DEVICE DRIVER MAINTASK CPUSEC POOL 7 7 6 7Х:s "p   )) w w- R (wL  ȕ 3!f&7>T 0 F  &( ( 55(  p(  b nw\ .) ~%&  j7 7   w w  w \ d -  %w - - )  @7-87-2 z rЕ A ^Е  Е Е (- wV(- w.(5ke5 ( fwp @ДЕ:Дle(5@( 6eД5@ 7 5@ 5  4 4  lw Д X PД5( Dfw v5eД  Дx H5 )5)       w0lF w1  jI q   PЕ0Е0PARITYPARTOPBOTSPEEDUICSYSUICLIBUICNETUICMAXEXTPUBBUFCHAR_LENGTHOPTPOOLSIZEPOOLPLCTLSECPOLWCHKRNDCRNDLRNDHSWPCSWPRLOGONTERMLINESHFILLVFILLTYPEAHEADCRTFORMFEEDWRAPLOWERESCSEQREMOTEABAUDBROECHOSERIALSLAVEPRIVFDXEBCHHTRPAAVOANSIBLKMODDECEDITREGISSOFTHSYNCTTSYNCPASTHRUPRINTER_PORTASR33KSR33ASR35LA30SLA30PLA36VT05BVT50VT52VT55VT61LA180SLA120LA12LA34LA38LA100LA50LN03DTC01LA210LQP03LQP02LQP01LA75LA2XXVT100VT101VT102VT105VT125VT131VT132PC3XXVT2XXDEVSYSCPUPOOLNEARELEVCSCANODDEVENDBDDDFDKDLDMDPDRDSDUEM     @  @    !"#$ HBHBHBPBPBBHP PPPBB0BBB0B0PB0BB0B0B0B0B0PB0PBPPPPPPPPP  +[050751101300[[N4.515020030060012001800240048009600EXTAEXTB5075110134.51503006001200180020002400360048007200960005075110134.515030060012001800200024004800720096001920038400ABCDEFHJKLMNPRST/AFF=T;24$4j:4444?=5v67;<">>h=p?p?p???>t95977777777777777777777777777777777777777777777777777777777777777777 d !/NO D, 5 |1ы ɋwC du w>u ww :U%ȥ*  D U p}:zȥ*  pUn He:f/ , Y/  da `^5H1 ] GJ= / #%=% 9^ 4 4 ~.   / 5@T    |7 wuvw2,7 ( #C U%¥: ȥ- ȥ+ ȥ*  e Bww~ { x¥A¥Zi[o W m Dj,c ~W aD_]Y- -  ^Q VD7R ؇ <7:4C \%VTw0- w n5!1 7extr z؇ C %VTn&w  C %VT R5 t %ׇw ؇5 2C %VT /5w -5 & 5"%%w ׇw Nw @ 6=C %VT 5wL b ->5  !  . 7U8E ׇw 4C %VT 5)w DmPEmL5@E nՀ$/L ȥ: \6/ŀ ևJw w\C %VT wl 5wN%rw26 e^/e%h/g%/%/7m " d %/%/7 ɷ  C S%/ %/  Df Շ  2 d 5 f5@ b%/0H5@ 0: H +1. I4BF BU / Bȥ 5r E CA  %7 ȷ 5BЍaw b C p%VT w>5 &Շ 6 e^/B B C C 03Cd Pd ԇ 8ȸC %VT wE5 ̣ ȥ0ȥ9 %/ M%/J. ы ɋ wEr//!F+E EEE WU & ee 0 4\0U E55*u& Ӈb B_C %VTw-d wZ p *5I5 H5@ D05@ 0 +1 ; H3 z#¥:  4) h 4B4B5@\  P7J7F ҇ bw6hC 4%VTw5EU@ E 2E@ ц  ЇwZ CeEtPp 5wPN"C %VTw5@5F/ $  PЇ w 5Jw56C %VTw5 w -  χD5Id ۴ Dۢ xDۖ f Х:   ,sd   !!M%W#TM%W%T%  Rχ5rww 5@BD5  EU \ ·(5 * 5W wڜ ·5L+5 V f| 6d &= 5A-AW >u05 7u4u&5 T+w"5@F$ p d , W uW M ͇5@wFww їK W   ʋw   W  K: d @^ w`@00[[TADATADATADATADATADATADATADATADATAV B(. D "11 CBBl fʷ B3  XK Ps l@ $ҋʋ  7 BХ[+ 6 ¥CХP! $x1ɋBx1 B P¥,¥] ¥UХB 4w, B ǂwʷ,  wɷ d mew % N& wɷ V &f& v  )t) ~)LB0:0 7 / 7( sȕ nkȕ xfc_z)) B (>)(( @3 B:97H7J7Br7Dn7Fj\)#)7w 7wP@!** #$" w 3J7(> d w ( %LB-T *7ww* )( w%vT ffe w fN5wt X015@(1^!-+z05t $z0-eI ! ` &.2 &1 z&1 r&h1 j&x1 bl(S Z(S R(V J(S B(U1212121031213131<3121H3124141r31N32T32Z3 2f32~323232"3PRITASKUICCKPPARPMDINCSLVROPARRONPROAFFSYNCIOPSECXHRCLIWBFMAPDFBUPDABCDEFHJKLMNPRSTR/d U55U /n1 A  W#"3 ww wW w~\/0V/ $ TwN Lw>wL[w. hwkw2W w(, JwLwW ߂]{ sU4U$8U2@=:U 4U@. U@U "@UU@U^/ җYN*ЋUE`/b/ d ne wl5%UR % :w4U`/7 07 .0$Х[+¥]¥,#¥R5¥W6¥E7¥D8¥*U Mw M]7 7 7 7 7 EE E@Ez 䍁7 jХ[% ^#¥C ХP L2ɋB2 B P¥,¥]w¥UХB BH(L00[[N :l(S,v0R- n|07e `wla weww+ + 2e2T/ R- 0&0 !5@w  1*!,-.01O  2U w5d7h \ e>`!e+& we e 57rU .5@ 5F5>545, 5 \  E : k7 Z  6 5 V5 LQ7Rh "d ww8N  4 R --"!-Z"Q!B$ ك\Ճ  5 " 5 +wX7 T(7 V- 4- 0-*wPV- 5w 75@( B55@U@55 5 Ul%|NwA ^ t5h7`5@  V 5 J5Bwfm:'m6$5% 75 5 U 7 5@5U wwwwww5 A A A 55\W W wBw 05?-w~  mf"^eE A A A B 5 @ B 58 5:^  w65 ?@   lB 5  5\ U  [ wrU@ E@5 P+w5 Uj5U\5B5tw5h U055Vc5 D 5<[5@   R5@NLf 85? 55@55 5weU5 5 et`N`4pJ ַ%wwE@hw`nw`~5~5@v5x5RU:L ~ 2:0 bx0 0U5@ 5 TU0%%| %K 5*U05@w<V- 6  lwwTU7 ~`  eE wrw\ w6wJwXwZ w`5 T l5 8&m* 2# N    p @d A U75 8*e?E?      ww`707l01010xlTwvwtU `m7 xw N wHeBE< 8w7 7 J&:W5* 7ߢ p5 &U 877f| 6ӷ7Tj \w.@V 5 U 7V70 ҷ7 wwJw27 ~7z "enEh7lb&N N m:&N N &N N ew ,wFU  e0  e /  Ѓ5-f/0 U@0 0  0 $0"0#/ F  tZmXH 0 $$  ^47PJ  ( 7 2 $ " eeEe,w  Bf 7  www/e5   wx7  e |0~+  w"N  ~w]$ ^XA,, wB5E 6 w55w5 f 5  :f 7  w5? 5:BE 0w  w w ~5 T Twf  5$6!7:;4< c Uf" XƂ wá A A A A A A 4 . TB 5<T @ N z bU5E A A A A E   E w> 5e BT @E? 00[[TADATADATADATADATADATADATADATADATAL?E 20 W r  r  74J d @777b* 4 -!-"!-<"3!B$ ̓>Ƀ  @1B > Zl(SQ|~W8|Kf|P q|Rx|,4|\R)|^z_M`x|bZ|TQ|VR-x0ea 8|78L+&O#QZr < @W#OV5Z1T0Cj1 ȕ:j1 X50ٷ xT@ CA ` pxT b \U%   ) 0we  . &  % X N+z0 67 7 2 g7|7d /2  7w X  77 xڷ7 =B &%7H7d   / 7Lwd V^  b X w50 J ؇&&d f/2 e 2"2# 7w ـ7e 7eU7 7 5 7e,7e@51 05~ 1 01 0m 01 "01 $0 j v} rd pf. Aw w HBAw2 5   p1 # 2!e% U 5  0 U 7hw r؇W!R/ R-v0eI hf 5? rwL&Nd f/2 e U2"2#  7w ׀  U5,@"51 0 0m 01 "01 $0 @<8 d 8`v 0"7 "AwD<R w &"Aw`V 5 t0@ U 7* Pء&& 7 d D  37Է r 7~ N @7: 7XԷp *d  le/$~ 7  H(rM l(Sf/0& ((pEU5  A A A EpPE5U@U""2 5 t5lU 0 $0"0#/"VT  |f/e C70 F? e  & ,7d /4  7Zp bd f/4 e  7.jD 6ۇ' w l(S,v0R- |07e `wa www+ >T/ R- 0&0 !5@wH7 z $Un $> ,>U Zw87@ 0R   e>!e+& be e 5Rh "d 5jxx 0 5  Z"  B hp <9 D 6]4%<" $0 wf b(wwwַt | l(S00[[N"S )R)( )zKƅ07 8 _5}5 w2f @ w&^< f B0) $ww 8 & SS"K! SSKwvwr7 rCe ( ,%50:5s-&  )IwPQ"I!?Mw(H"` 0`" @$f&7 5,w<f(ww0w2&w(@& lAw ~C  t @B Bm7!`+7\RmD7n >^ t . m7( $ w F`)R)  JR)(7)1.d ) ( )e1lI ( d1lI bPPPP L #wH!** D D D D D D V#6  ld ( j  BE@&  e \ * m( d @@ 2e@@ elw feD  d @w5:w5xU&\r ,w,ww  p)q-p)q-r)Q$4 ߁ Aa M A!R ߁ Aa%<   2p) 0d B Bm-'mv ^ Tw eTw wn?w< 6Vl &f P8  E5Ew 5 U5U5"5#w2J3( .5Wtw7  ww @w7&4 :4m::< e>`t$wJ4 566fet 4 8565n</ e?Wtt@7mt7e48d e<5$  B 5 Z  5tm@d  7 ( w \ d @ <PU5 U5@r"&7*f@ 2 w 5 55   7  w ܷ 55  !E mX7|wv Zݵ52 7Tj $ܵ5 J2H 5 e5,5.&U   8 , Ҁ wZ7 (  ȕ:( Z!J5 j !J5 ^ !J5 N !J5 @ d  d >d 8P\Tٷl d e6ۇ0  J37 ٷ$ ܷeJ37ط ڷe J3(ea  .37ww23 )( w"S 565 5w0dwlw"dw!\@$w& v5w>7 Zw| Lw@A @m75} z056  {5t)nkd 5 `e7lw J3e<5, 2?& 6 -5X  z Е:7 hw Z ȕ   Е.  . %$B w#*( J5 J35ea vUqv'Oqrz~Z 7 7 & (wɀ RX¥/ 7  \775757Z wW 'ȥ/  f7 a<7^\75Y V75 Fa 00[[TADATADATADATADATADATADATADATADATAV- W77 5 Z95w7w&D m:@mF`%d 7 7& 7 H; `@V  .HH|@Ȱ%Uq>%VN6 56%'&%v%|%   5 w$> wN 7w. D7B    R  f& vV  d  d uu 5 5e5 e Ud 7`v 0D- 5w wf D-  Tz$: fb* N  N  N \  5   ޶ uD-w n E55!&@!7hd~ 8BA @ `fE@ #>zT D-  5T -Ś-ŔwdBC 5w*5w0 B- Bww w   D& 2 u-,. d|ݒ LCh > fC  5 EU Lѷ6rL ѵ 6 +X ǀ 7 " A B &5 ,.e,. ЇAM  w0Q||Kf|P q|R~W8x|,4|\R)|^z_M`Z|TQ|V wzwNwPwPf  5N( @5X!5 > & D 2 f,5  k ~ r ۬ XÜ۪ xе  ^ 4vی Fϵ v :N= --e7 5l 7*@ 2j e?E? wlwM] R wf-Q-|. $w ΁ d 7 -^  N @†~ h.r HDw<7`dv 0f: CӃ @|V  ' w@5fB  B- , Ā&  W ͷ 5J Gw-lC٪ zuAw٢ pD-tي DuAw^ 4D- Nd u EU <  $ wF  b ̱fff Cfv :[7 ~@- R z5155-4-.Dl 5&BhB  *hBpppB)z@ e1lI @f lA ^A VЕ B BЕ 5+Е  V- w A A Е W cЕ W Е  Е.Е  A  5  0000ȕ0Е НRНOL Е:Е- Pһл B B B Ee0P  B ~ 4Е,  &Е)A- w 5B B w$ w:://--JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC;; c w0&   Z0w9w:¥- /;USFFUVFFUPFFU WU US ¥- RK 0E9A̋;:8¥ ¥ 2 7f| 6Ǝ 7F %5% j  "Ƈ jw~T 7 j VTLPF P̋Е AMu 6Е-A W  PYFPZFP[FЕ- wL  w&@ e0e0P7 YFʋ 00\[N% ҋ w⸡27, @7 -f 7 č  |H(K tH(L lH(fM dH(rM \H(L Tl(S Ll(T Dx(DW -F-MM-&-PP .-6-MS-&-CT,,DT,-MT-&-DU^-f-MU-&-DX--DYN-V-* *,$%DYvPH  * %DXR%DYJB*e-6$wC %MM%MUU׭ wd    @  h   !pp  !p!  -z! *<`, 5V7t7 * p ]) +F   2d  !:0  L '@ wZJ  T7F+-r 1+-Kw '- '- '- ('- 4'- @'- L'- |X'- td'- lp'- d|'- \'- T'- L'- D'- <'- 4H(K ,l(S $x(T x(DW7w ,-..@ eDɕɋ Sɵ    z   A0 e! z _ e W!D 4 @ a   U_7w ,-..@Dɕɋ Sɵ   d  bV '  e eW! , @ a   U_7$w -, A0 e! z _ e W!D 4 @ a   U  e  (11 50Uɕɋ Eɕ5W,ɋ eɕ_7tw -,V '  e eW! , @ a   U 11 Uɕɋ Eɕ5W,ɋ ɕ_00\[TADATADATADATADATADATADATADATADATA7ljw -,Nxɋ Ue> S  $  2!e   !     W! eee A0 e! z _ e W!D 4 @ a   U_7 w -,xɋ Ue8 S  $ !e   !    W! eeV '  e eW! , @ a   U_7FzRtԾnԆw ,-/r001f2 7w5#SMA#UMw 9U Pɋ R`5P 5 MeP7 JNe<7 >eCɋ.*7 ($ ɋ DE%%  UWE%Pm  E e4m  f E   6U T ~z 90 e! z> w8 _ e w!"D  @  2 a   U 9U Pɋ _2 a   U B B B B B D B D 77e<eeQCɋ7 7  ɋ DE%%  UjWpE%PmXR N EB _2 a   UR`1 5P 5 _2 a   UQ00t@KPsP0 f E 7eeePe~ vw`w 7`w`w 7`w`w 7`P H0  V  L% <%  & !  4 4  4m t  B@_7zt^nw ,-/F0012 7w5#SMA#UMw 9U Pɋ R`5P 5 MeP7 JNe<7 >eCɋ.*7 ($ ɋ DE%%  UWE%Pm  E e4m  f E   6Ujb T RN #: w4  e ew!  @  * a   U 9U Pɋ _* a   Ue7 eeCɋ7 7  ɋ DE%%  UWE%Pmtn j E^ 00\[N" _* a   UR`1 5P 5 _* a   UQ00r2>22KPsP0 f E 7eeePe~7wP H0 SK3s ~  t% d%  N !  4 4  .4m t  rp_ B,`t7.d & d +JJee@fefeU7J`B!  /  e 7&w xK+p ͇ %d /l.  E% % e w * 8, wze@_A  B,`t7.d & d +JJee@fefeU7J`B!  /  e 7&w xK+p ͇ %d /l.  E% % e w * 8, wze@_A 7Ԭw -,7 A0 e! z _ e W!D 4 @ a   U7F P ɕ ɕ  ɕ  I  ɕ I ~I z r a( fɋ `@ VS PS  @ E :@P!  $ɋ Q$e   ~w*DaD 5_7hw -,b7V '  e eW! , @ a   U7F P ɕ ɕ  ɕ  I  ɕ ~I tI p h a( \ɋ V@ LS FS  6 E 0@P!  ɋ Q$   w4DaD 5_00\[TADATADATADATADATADATADATADATADATA7Ԡw -,7 A0 e! z _ e W!D 4 @ a   U 5 U  7a7b D % D ``` ` U 5155 E 55q5  !mm5UU E_7lw -,b7jV '  e eW! , @ a   U 5 U  7a7b D % D ``` ` U 5155 E 55q5  !mm5UU E_7 w -,7 A0 e! z _ e W!D 4 @ a   UL0  KPsP7eeeZe vw`w 7`w`w 7`w`w 7`hP H0  4 ^! 4 4 4  < 4m t  _7԰w -,d7V '  e eW! , @ a   UL0R...  KPsP7eeeZe7whP H0 SK3s 4 ! 4 4 4  d 4m t  _p%T ffewFe%1 1 Qw"  "s  l ¥:e >wp¥/]1 [ rT N  I FP  ?C :1̋61 ¥,¥/  1ˋ!¤1e %EA <11 \11 \¥,w*1    N  e? w/1  ~x P1   ۺ  w( w  w w-"(w5) %0+0 0  w b wVnW wBחA¥Zd 7 |x7 j  db 7v F3  v$4 "- l*fLb Ĝe  1  e &   0 Jw6 ,,,%& 1)(0 w    *eH w77 & 00&\[NU\}/U}/YM/|/</t!/z00%0;@0; 0; 0; 0;@0;%0;20;>0;D0;K0;@Q0;W0;d0;p 0;v"0;}$0:^&0CE(0=&*0D:,0L N.0e00t^20v40v""60v?T808r:0|<0e>0쩔@06B06D06ԀF074H07fJ07&L0تN0T|P0TR0mQT0qZV0[MX0̫xQZ0z}\0U#^0 10ęsySY @ @PAR=CTB=SIZE=VECABCDEFHJKLMNPRSTUVWXYZ '4 '^2 '2 '2 |H(K tH(L ll(T dl(S \x(S Tx(TXXCOM mw %5@ -S0 zT~1wU1 `^  5J   & 7, d  A-%%y  1 wj7| \`7t |7d :B DmAwL "C  @B Bm7!w7  " ٵ u7w  eE  K *C@@  ,p 3@ e@ ew  Y2ȝQL V w" N w1 L w 7 L & w͡ >7 :  2͇w w67AwD7777`D g.,we? fwv  Ð`w d Eed d   v!d d   7,D 6` eFw @d 4.,"d qt w4 ׳  o1ww|``.0  pff qff v$eΊ  e jœVe<R %r 2 *׷w2$ww fw7 d  ,s7ww E , Kw|e  se% t "NwXn ( %w5e.  K .w 7eNԷ   TRe   wFw Bew Ue s3 e e Lz! B 0f= jrRh "DZ %BS wjĜ* - cĊ  Be 5@& l e e ,w7 N% % Re e w bwzT& 7^7v 0e,.+3 e$5!76e sΜ & : 7 Aaw &ew0A w7  f <@!Ke% "5s@ee s  w7 X s`N``   p% J T`5!2m޷*@ fENA% p UK e Ίaw7  wV l,0, w5w!Nw!&Na%zۂ&l& | (7Zp *&eDZ Β e7. K! eΊ e wP%з ̀&fBm  W@fe$ $ 2s$N %, K e x K e `5@e x N%  K te  wPϷḣ/  ^0 `0%0   % 7 z0r r  % ww<  <  >=L=L=L=L=N=L=L=.& $ / /N #-@D #D(#25/ `0%0-)< 6Х$@  % mw" 5y $% enfk.` . 6/-*O.  D%@ >00.\[TADATADATADATADATADATADATADATADATAP75B.5-. -p#-l j . &0$ ! / ~]xwwg<0( R0& 1 wR %% f& ^V  d  d uu 5 5e5 e Ud 7H^ D- 5w wf D-  Tb " fJ N  N  N \  5   ٞٴ n uD-w V E55!&@!7Pdf BA @ `fE@ #&b< D-   H(L H(L l(S x(DW x(WZ2d  %@V  {w5\C d 7 > 7,O7 Dd   ݆5vK  z  R mL x N  f tڇ  &7 TS  $LCe0 <- . 2f.w`Ce 1v re7   7 X e w-p    B- 2 p2p2`2 `"  &j^2  5  e` f&.8 $ h |5|V 1w 6d  m, u z r ٷf  2Dѝɝ7BX 7&*4 wew q`0 %R,   m u$   fe ؇Vl <& & H^ e7.շF ` .ׂc  $    w N؇eԷ m2`  0+k >w  5%% 5 $ ނfe%%_  ݦ % 1 11Z2&  Ý *w D" V`7 7 V7 VJE 5b2f 6ˁUr2 0Rd `v 0wRh " q%BSBffN"8 1 mΊ%%Imw  & fd  E @\ e & E <1b2\1r2f, $ (  I _ l(S v20p2 z2$XX:177 ZewR2 J.Ke .2ȝ (Ke F/00 0 2.# . |0 001  X2)HFD7wP !* "0 w/  ^0 `0%0   % 7 0   % wwh3  h3  44444444.& $ / /N #-@D #D(#25/ `0%0-)q3 Х$@  % mw" 5y $% enfk.` . n/-FbO.  D%@ >P75z.5-. -#-  f &0$ ! / ]wwgt30( R0& 1 *w %%  H(L H(L l(S x(S (S (S (U006\[NVECp%T ffewe%1 1 T% h ` X¥: +¥/^2 :~ xWn & 1XY wHϷ822 3w-(w"' z5 7 7  w-N Z& 杅Nmն 4   0 fd jN$: 7 & ٷ0 0   \ $-TJ 7 7,*7   |зz  L4 J+Fr Be  Rh Ze  4J < w( <P75.5-. -#-  v &0$ ! / ]wwgd70( R0& 1 8w %% _ H(L H(L l(T l(S x(S (S (SDISSETCONUNICPUFULFORCSRVECw w# %( E"Х  Х ( xK0KPDХ=  t¥,¥ (w >Х ( .SХ ( Х  D u(&  22eХA ( % Х  wr (* (X+ H(K l(S& 5 %55K%0 ,5@%9%6  /J- @% e` w:P 5֢5 ַ և  dwvABCDEFHJKLMNPRSTUVWXYZ* e%`ɋ w,% * Rl(SABCDEFHJKLMNPRSTUVWXYZ DRIVERONLOFLPDF CSR= VEC= PRI= @5 5 5 wx7  JPr  ?Е >+5:+ 5B+ Е  F+  rL+   ZR+ t  < @ wX&   B 5 " Е w & +L߷d m5m& %$m& . e Е Е >+:+ z 2+ l NwCPb  P+  & C!P HR  %  % +P+   %ЕCЕPЕUЕB+* , >НBН? 6 |Е:Е  M& % R V `00>\[TADATADATADATADATADATADATADATADATA &   e ` Ne*% @H(rM 8l(TPARITY=PAR=SPEED=UIC=[SYSUIC=[LIBUIC=[NETUIC=[MAXEXT=PUB=BUF=CHAR_LENGTH=OPT=LINES=HFILL=VFILLTYPEAHEADCRTFORMFEEDWRAPLOWERESCSEQREMOTEABAUDBROECHOSERIALSLAVEPRIVFDXEBCHHTREAD PASS ALLAVOANSIBLKMODDECEDITREGISSOFTHSYNCTTSYNCPASTHRUPRINTER_PORTTERM=ASR33KSR33ASR35LA30SLA30PLA36VT05BVT50VT52VT55VT61LA180SLA120LA12LA34LA38LA100LA50LN03DTC01VT100VT101VT102VT105VT125VT131VT132PC3xxVT2xxLA210LQP03LQP02LQP01LA75LA2xxPOOL=PLCTL=SECPOL=WCHK=RNDC=RNDL=RNDH=SWPC=SWPR=CPUSEC POOLDEVSYSNEARELEVCSCAN***ODDEVENDBDDDFDKDLDMDPDRDSDUEM     @  @  &&&&&&&&& & & & &&&&&&&& & &&&&&&&&&!&"&&&#&$ )))#)')0)5);)B)I)O)S)X)_)e)j)n)r)v)))))))))))))))))))))** ****$*)*/*4*9*?*E*K*Q*W*]*c*i*o*u*{*****-- ----- -$-(---7-A-K-P-U-- ---- -$-(---2-7-<-A-F-K--- ---- -$-(---2-7-A-F-K-Z-`-05075110134.515020030060012001800200024003600480072009600EXTAEXTB19200384002^12.*.F.b..4./(/22344D5D5D55540//r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0r0~{f- &B(# n &( R !(5(   Е,  Е]ww( R0  w( z hЕ.w( x Е75vw`d d mDm@ 5 h5@ >ЕNЕO .) PP y5Am Е:r 5f 5\ A* )  vЕ.w6$, ~  e+ed B @   8Е.wP) H ~FE+ R + ", Е  w 5%VT 6 e+b%&%P+%H+ l0F %P+%L+I 2    ߂%(+ )5%  ) JЕ.%@+ œ E 5@  ,,, , ( * t * V-  w( 7J PA   Е:A  x n 0000Е:5*5* t pw^( ^ BE E 5@(  , .Е:,, Е:,, Е:, w 5%VT5@  ЕNЕO ( +5 * *   d De? f DЕ:    ~=7`#3#1%0 (+")"'l$"bK  Е.Е:A Е.m~Е: w -6i w* l d A \Е. Е:wj d w Dx zC&d B X*  Е.Е: Е.Е:A Е%w  5@5+ $ ЕNЕO*  5 ЕNЕO( J T B  pd  &  *D*D*dz 4d ,*D*D  Е.w PPA Е: ЕNЕOA+ Е=l t f l Е: 0 Jw @ӂwշ 2> wշ pd m(ew R% & w`շx 2V LB:=WK:/GBL ::d 00F\[NwZ l_ 4 _7Z4 D- +@ 5*f ֍%C    $ @e   -eM~ wN wT BR7e? n$: @ B`6 V JN %&e 7 t%  5` N   `   w8ɀ&  7^t .6D 7F C      Ȃ@   @ @m 7 Ȗ% %w w C CA w N- w46 >w L 6 2 %*UU7Xn ` H^ P%a0 >" 0 "p u  h5 7& *w&A&   e>߸ `A ~ Հ6SF w 0a \ UU5pBm7(d> 0-Fe   w8 BA w -- e Me7 Җ% 8w @ = = = = = ===$=,=4=<=&Ca %-  ( . UU&78   w P;tݲ x Jw0 .N   MeP4݊  7 C C 7P;   H^ eP;7  - 7]j;x pnmdD   P; ' wl"8 N7N(  *  B Bm  B Bm oB-  iB- 7 – bA Am\ &@ @m  B  B `C  > 7 6– +A 4 u j5M F\ NM2 @( 6 wX$ ͍   wjA#w B-  $B Aw A AmB  dB  `7٪ d͡ @@m f& V  d x d uu 5 5e5 e fUXd 7 D- 5w wf D-  Tؤ tfت dN Nx NN nf PN \  5   h6rL  uD-w E55!&@!7d BA @ `fE@ # D-  &f& v  >H(fM 6H(rM .H(L &l(S l(T x(DW x(W&   `@ ` B   & A @     (00N\[TADATADATADATADATADATADATADATADATA7ww( )( w\"S <++6+ + & v | ^ duw06w>w"6w!.@$w&6 5w7 w w@A @m7 +3 2 0 wH* ' % + 57 $wշbx 2w H $> #*(Hw <0@++   +)ڇ"d + e7lw (@+p vN5!< e>% @+ea H (5|(@+w0 j  4w0F %TI[w ؗ=P w %TID%TT%NL? T6d 7 @7  -2B!7 z5! jB  7| Rq ߇C DEFGw l(S (SABDEFIMNOPQRSTUXYZ<>"Ba$ep|v$JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA  C ed!  aeNbE  Е%̥V A6D Ћ  AP AЕ Bf  & e6& e/& e1*AHŀ ȕ Е Е Е & ef & eRЕ A %& e&A 4 Е A fEA EЕ A A   $Е.  AЕ;      w  ť ť 0B &Aaw fڄ(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$ & & @( f  e ee e w D&& bЕ- eaePPPЕ-$w nD  &Е. ce  Е:   B 5 ߥ& *  + 23E Ew ؅   Е-   0@A nW e`fÊ    E w 5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  p P aAAf@pnp C*8֋ 088*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp Z5f fˇ ȕ F‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & |8 *>KKw  8jDl@ @TeBT85l@ @( D 0eB& * & @# & V An5jP a@@` > ~ &@ . eRa-eR 00V\[NBAnB X/   @   RՀaeRÕweRR)K@ x(S x(rW x(DW ׄ(S ׄ(V א(S א(X ל(Sw & :) 8C * ) *wL*  $ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)wj C# R   D @)  6?0D)w *D   w< *) l0, *) $ )*)0,40,6 e6p 4 8 V 81416 j z  T 4 8  H**  DP5R RRR **0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% 141612epl2l0p,*1 U8UMw w4 B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w 8e2 VT S w  $DE% hSJUT & WW   UUД BeeU zB<߳ f7 fLWW| - W Z @>wdH ,wBSPS)wVMR -- *DIAG*-*FATAL*-Illegal get command line error codeCommand syntax errorVirtual terminal errorIllegal switchTask has attached common regionsIllegal error-severity code %PCommand I/O errorIndirect file open failureIndirect command syntax errorIndirect file depth exceededI/O error on input file %XOpen failure on file %XIllegal file specificationFile %X has inconsistent dataFile %X has illegal formatIllegal functionSyntax errorDevice %2A%O: not in systemInvalid keywordInvalid UICDevice not terminalDevice not variable speed multiplexerIllegal keyword valueNonexistent memorySpace usedI/O error on output file %XWrite check not supported for devicePartition not in systemPartition already existsPartition or common region is busyUnknown main partitionNo pool spaceAlignment errorDevice not mountedFile not contiguousFile not foundIllegal device/volumeIllegal priorityNode deallocation error %P %P %P %PCommon block currently installedTask image I/O errorToo many lunsTask name already in useTask image currently installedFile not task imageSpecified partition for common blockSpecified partition too smallR/O partition %2R not in system, defaulting to task's Base address must be on a 4K boundryIllegal first APRNot enough APRS for task imageCannot install tasks or commons from other than LB:Common block parameter mismatch %2RCheckpoint area too smallTask and partition bases mismatchUndefined common block %2RCommon block is task partition %2RCommon block not loaded %2RLength mismatch common block %2RBase mismatch common block %2RToo many common block requestsInvalid time paramete00^\[TADATADATADATADATADATADATADATADATArTask or common region not in systemTask or common region already fixedTask is checkpointableTask or common region is not fixedNo lunsTI: redirect errorOld device attachedPseudo device redirect errorCircular redirect errorDevice not redirectableLUN out of rangePseudo device assignment errorLogical device not in systemI/O error on output deviceExecutive too largeTask activeTask is not multi-userAddressing extensions not supportedPartition %2R not in system, defaulting to GENLoadable driver support not in systemDriver built with wrong STB fileFile %X not a valid driver task imageIllegal driver task APR usageIllegal use of %2R partition or regionDriver already residentDriver requires running system for LOAd/UNLOAdDriver not loadedDriver cannot be UNLOAdedDevice %2A%O: is attachedCheckpoint space too small, using checkpoint fileNo checkpoint space, assuming not checkpointableReceive data or by reference list not emptyPrivileged task overmaps I/O pageKRB %4A interrupt vector %O too highKRB %4A interrupt vector %O in useLine not DZ11Invalid speedTask image virtual address overlaps common block %2RIllegal operation for saved systemSymbol %2R is undefined in file %XSymbol %2R is doubly defined by file %XIllegal value for symbol %2R in file %XInvalid record address for file %XPool link error at %P Block = %P %PCTB %2A is not supported by driver -- Not loadedDriver dispatch table is inconsistentInvalid driver data base at offset %P in file %XToo many symbols of the form %2R in file %XCannot LOAd/UNLOAd a pseudo deviceCTB %2A does not existKRB %2R not in loadable data baseKRB table of CTB %2A will not accept KRB %2RDCB table for CTB %2A is fullCTB name %2A is a duplicateData space file exceeds available space in system imageCPU partition illegal in one processor or saved systemCannot have multiple pool or CPU partitionsOperation cannot extend above first 124.K of memoryWrong CPU partition size, must be %D.K on %D. CPU systemLoadable driver larger than 4KPartition %2R not in systemCPU partition has not been createdNo ICB pool space for CPU %1ASpecified processor does not exist in system imagePartition %2R is too smallPartition %2R is not a commonTask or common is not in memoryCannot UNFIX a mapped common regionSystem image is not RSX11M-PLUSAccess to common block deniedOperation not allowed for %R partitionsTop of pool set to %O, requested amount not availableInstalled tasks or commons may no longer fit in partitionFeature not supported in system imageRequired switch missingIllegal %R specifiedIllegal or non-existant controllerIncorrect assignment of SY: or LB:Device optimization not supported for deviceDirective common(s) not installedTask not installed with external headerUser D-Space not supportedCannot FIX an I/D space taskIllegal slave attributeOptional directive common successfully loadedCannot UNFIX the directive commonNo table space for optional directive commonDirective common not contiguous with DIR11MSupervisor mode library not supportedTask not removed, CLI was not eliminatedTT redirect errorBus switch not loadedCannot install shared region with incrementFast map not supportedDeferred binding not supportedDeferred binding not overriddenCommand line too longSystem is not a saved system for /UPDeUUUUUUVV1VOVlVVVVVVWW-W=WIW]WWWWWWWX)XLXcXqXXXXXXXY#Y8YFY_Y~YYYY Z1ZCZbZZZZZ[4[P[q[[[[[\%\H\P\c\w\\\\\\],]@]L]c]]]]]#^A^h^^^^^^'_X______ `?`b`````aPavaaaa b/b\bzbbbc1cecccccdMdhddddde0efeeeeef9fffffffg.gPg}gggg h hLhchhhh H(I |T(TK00f\[Nw *8I b *=)98  eB &&  U **e *Nlv ΋*.2 $ & #!)&eP(e && >e >E ,p* ww j ) < 8C 0* ) *w*    ep p  |އȥ#= EW9ť^*0 ` Ca C  =  F ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 xp  , J *` ^C#    D @)  6?0D)w  z) * DwH46l0w Bn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f Ze \* de*wH@) >*0,    <) )% ȥ  = ȥ l 0l  ȥ ,ȥ- ȥe&=Ba@a e0b eȥe@ _ X= E8 el0  & 0 l0`p l064p 4 ep )wbȥ%  ,  N xw0 T J B # D f  `* 8w()0406 l0 **=p!Օ^ *) l0, *) $ )*)0,40,6 8Ae f"( UCɗ&+(e$&%   DP5R RRR  8   **=D * `p46 f 64/=  @) 0  8w& 46 \8 e*wP w   w  > ,,  *0+1(e  L%&p*w f( f)f z) @ 82e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 < 81416    Z  ..8em,0l0!D0e6p 4.) &f   e) .  e6p 4 Z08*wt)"(. = . B  E D (.141612epl2l0pw  )  fU %  BA `6p 4p`4 %60 446f %8 E D/D!D l0l8epl0pɥ.ɕ w0,0, f 톇,, w X     .% r eB U5UU plp & NeՀ)* F&f D E/fC A B f&  BeA @0  (@0 a@eA  B0 AB  zf  PC @*w "eE D` bl lrw   B eE"s    s-  Csl,*1 U8UMw w* B 00fep=& /e`pwL8e2 &   `@ ` B   & A @    00n\[TADATADATADATADATADATADATADATADATAf&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ-נ0נ9נAנZנ_נ:  ^נ[ȕ]נ<ȕ>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C w ( D  8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U   P3)/ #( P) @#**fff R b&*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 h00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B B  * n eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w /!0/ l0/!p!0 .=p0p2w (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >w *eE D` bl lrw   B eE"s    s-  Cslf&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=wZ141612epl2l0pW=f(& e %&&eH =&e0  $U   E > >E(5E=00v\[Nuf p  wh " f &* *   f | >5>Eu   **8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*w\ f( f)f 882e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416  . T  ,*1 ,U8UMwF w NB 00fep=& /e`pwv46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6 eB  8 R$&w f*(5<s1  U U@  f&" )'&M'&&**%*%0 *&* *5ND  p<  EU   w P (ww @ ww 2 ww $BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w"   f  >5>Eu   (eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w 2 /$ ,:T < U@% DD%][%><w  w$1  %,,:4 w n*D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    d*w v*  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ **0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w &Ba +- ʥ# . U 0   b   ` 00~\\TADATADATADATADATADATADATADATADATA    &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@,Ȣ A@Y ʣcSYSYSYSYTICLXDT -- Initialization complete and successfulXDT -- Sorry, couldn't allocate pool space -- Node address = XXXXXX -- XDT Address = XXXXXX00_!)w ,w &w w w w  _w EetEvxrlh_XDT -- XDT being unloadedeep&e"veee_,Ԣe,67 N  w 76eNP "ewlx&TewRewJee w,ew$ewe(e&Re%e Z75 e>eee:ߕX X5 RL78 *.5 e6- efe e9 ; ~!0 ~e* Ve<vedeefߕ  e e& & &  f&& &  ʋ&  m  f A N  %ʣޭ $vtD D | 01234567SALHCQFBGIR0BTd}~\/'"%! ^_@><$=CQ.;-+*,BGKLOPRSXID~x~xxxʬ&8DƬ櫦Ϋȫԫ:VP^h\n|JrL$0/$1/$2/$3/ $4/$5/$6/$S/ $6/@ 172352/172354/ 172372/172374/ MOVCMPBITBICBISADDSUBCLRCOMINCDECNEGADCSBCTSTRORROLASRASL !lagellI - BKRAMMARKDPFMMFPIDPTMMTPIlagellI - BTXSSXTMULDIVASH4XORASHCBPLBR BMIBNEBHIBEQfBGEBVCBLTBVSBGTkBLEuBLOSB(CC,HIS)B(CS,LO)NOPCLCCLVަCLZ榀CLN &2CCCSECSEV>SEZFNVSENbjr~SCCCLC!CLVCLC!CLZCLV!CLZCLC!CLV!CLZCLC!CLNCLV!CLNCLC!CLV!CLNCLZ!CLNCLC!CLZ!CLNCLV!CLZ!CLNSEC!SEVSEC!SEZSEV!SEZSEC!SEV!SEZSEC!SENSEV!SENSEC!SEV!SENSEZ!SENSEC!SEZ!SENSEV!SEZ!SENNOP(260)RTIBPTIOTƧRTTHALTWAITRESETSPLCSMTSTSETWRTLCKJMPJSRCALLRTSRETURNEMTTRAPSWABSOBILLEGAL %*/FADDFSUBFMULFDIVި %.7?HN_jpި稀èȨͨӨ٨CFCCSETFSETIFPP - SET?SETDSETLLDFPSSTFPSSTSTCLR(F,D)TST(F,D)ABS(F,D)NEG(F,D)MUL(F,D)MOD(F,D)ADD(F,D)LD(F,D)SUB(F,D)CMP(F,D)ST(F,D)DIV(F,D)STEXPSTC(FI,FL,DI,DL)STC(FD,DF)LDEXPLDC(IF,ID,LF,LD)LDC(DF,FD)nh@h X~|zp@̸ ̸̸"@( JPdܹܹ00\[Nܹܹ8HX@n ~~~@(f @p&@tLBD<>,F:8246LPJFRH  ; w ҤDe w ڤ%*eDl w,  5r 4  @@$i%,  ` %44B0 C tEtT  =  VT    D E= e0, T@  NF  H?j >7 XDT>7  77 0 7vw L  yvbt^SMwB7<4,  !7T 77w77%5 f  (   7m h x 7~7 |w f` .a7PN 7@ 74 eB` %& D_ & \ > R wPw EQMPB3!SON)w OD@w BED7#w IOFw IL|H~ w EMbJdg5-P7PPXW  , w%  &"  "%,47ĝ(zC zZK V t!TE w7i 08 0 e0B7D fM5Z&:@ 7  %BC      FNw7 %EM1F ^E%$BC5 e e z %p8 :K   77670U($E% K " "%,醟ذe?ldX ʤ55  e_Z7 | ? d? ^? ^7 `7 ^ \e7 P*7*7$ 00׭ wwU^f -- /--N 7 w  |L~Nv ~wV  %55  @e_Z7 $ jvn\ID% 7`-6  n @f (z  mr7n7h b c e  v0 7E ` wA A ы  %%EDK K5   7l d5  n5h%%&(HDf ??%% 447.%%De   <7 5&5 $JJE(ߋprE6&eZ  &0 E w $&%a%z + 5  ֌5^5 \3-tߋprŀΥ֥ ߋprŀ֥ـ? 4%L0  (& | &eZ @&eZ &>'D %"%b$%  ʤU  N, @ऀ e0 @ڤ  L Ne0,72 7 $7 &e N @ e0  >:4Է  z@ e ee e @(   ,TTB    5G 5=U hCACI%zwE E w4E @E% %% , <wN 4, w@pE Hw2dE? & zwAC@ Ew<%CEE % D, 4w ,, 0wCAEeCE  , wCE?%%wzCE?% ݥ @E wf  bCC wN D @ rw4E?%  "E% f, jwE% % Fw E~ (,.-@E wE6 UE .@ 00\\TADATADATADATADATADATADATADATADATAe- +@ w|Чۧԧ l w` \ wPE~ Xw@̧ <@E hw* & ~w &w @ :   ` ` @ @@ B fv @@C CE 55@ V@/` e\ 5  +-( )@E%&Re0%SPPC`# .e ee mee| & &Ee0  2#/f7 B7 @ X76 N7. D@::e4 7#7-%弼 ^Ŀ H RZ"A90$  .@KpD` $>`CxQbisiTtsehrsW)XT[8rWrVrXrݩWߩ^(.`666666߀6Ԁą߅Zn`&ϫyh:h:h:h:hP""%xd7MH HK(K5MsP\CT+ 2gRF^@w24&t̫̫pE̫sͫdz}xdfq,tuuoM 3w|쩔T|T:^W^ewWwKyۉcLeeeeeeWweweKyLH/H&HHwrrr!m2X5? تتتتتتf먃2먺3334Q5=&=&='='Cr Cy C C N~rتVNت4Mت5Mʫ,髲뫽c7eee7e8v?TvwRee68747f77&74F7F7FxGxG}mmV}CEWEXEC^KJ;dN^Ker l8Y*RGتeتމ''v?tNZeZqZتYeتت|K[MeMhMQN̫xQ̫SϫϫlZCJt eMeʫWʫt ʫxQD:DrDsKyktLkBMkZkeqzZq~ZqZuuzTzTzT{je{ne{xe{fQʫIʫʫʫ׃먗+K9!NDyaycL e qrR~KqR~.s6s8s;s=s+3Oqɪ+giyiy}#SSS:df}}}ʫL ʫTʫfʫy̫d̫+g GGG:d}wyfff4:7t'h>`CxQbisiTthrsW)XT[8rWrVrXrݩWߩ^(.`666666߀6Ԁą߅Zn`&ϫyh:h:h:h:hPse#{%{Q&{8r+{8|){+{p+{P},{20{G2{2{^3{3{3{(5{racHgciriBxorrrsL f^ 8^ d   q <}  cOLdOiOkOplO8YnOHnOHsOd@yl8YmxxnHpvv vvGvC[vv~vmvy:vavgvuuuX#I_#I(s#Iy&I8r(IHg)I8^/Ip&/I0Iq0Ir3I5Ir6Iah bhLch, chwdhzdhhhhih8^lh8YmhnhHohphqphrrh !rhQrhrshU<Brtv zPd>vx dfh,.46|\Z\^`b:>Vbdf.0(8j~&(:2N~"6<@4Zbd `b"&*FJlz "$Np >@t  X ^`rt.0HJLP0Hfh(4Z\^`B,~  "$&(*,0268: H    "#  $ *, 642"!$(<& @?0:5  "\J 00\[N|,?=?=s Y \;TITISYSYSYSYOV~X\~Z$Z|XXSY\'0 ZAP>P _~=|zbd  ` MX|7$7" "77077&~ - D* 7 z5x&fb~  N p 6 wX3wm@  JEe  E Jeww7z77r7pnhXhlfTe"eN@e7 64 6.e"/  57e7X6e- w 7 7|7 ~ 7rjm^bdR Df f &f &ff  w 5 funhj uhdB$ 0jwaw< 8 v8w &  b*AdBbAep& f  6 P aAAf@pnp C*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* n*`V @e,w 00\\TADATADATADATADATADATADATADATADATAjjlj ɥ@@aujk,bp J5f fˇ ȕ 6‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ DlljaCeH###33 & 8 *  w  8jDl@ 8TeBT85l@ @( D eB&  & @# & V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@wJ54 @ E7 7VVT :V 5h X R%G  3 ,  &@ N`VT V 5 eew ͇   %f @   w(a62 vp7n V beb e wFa5  ed Ne `w fɋP7w4 @6 vl  e.e e   ݀f z  v06 2bE Z V REL J @e0? .&  "0  No such relocation registerAddress not within segmentNo such segmentToo many argumentsNo such internal registerUnrecognized commandNo open locationCannot be used in byte modeError in file specificationOpen failure for task image fileError on command inputI/O error on task image fileNot a task image or no task headerVerify failureNot implementedSegment table overflowf <^vZAP -- (@'&1 *"v ""> .^ R`, R/ R/ * ^$* v3 R* R/ F* F, Rv/5ew , Bv     5Bwr #5  5 2  UE  rE U 5@*& E& & f&ËDef Ë )̋Uw w"ww *D t  ww (SB C DBe ?D1 J'&UBe(e$2e 4%[]%<>  1 >&ff 0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ 00\[N** ":t ., "*F*|:R* :^&* j:+3l ^v03L ^j5*:FAB&RO&LI&w \7 f7 d7 d7 d# $ q z0 b :`a \ L ȕ D@ȕ 840~#5# R e42,* ea =   wNw m  B  L>e 8-<<?& & AmE7 - ^w \z ~R ~ w wwr d%a|x e 7   %l5b 0 0 0 0 0 0 e^wdt) l 5@wX5 (4W  H  ?mp f0 0 0 w7 ,  W  5 7 77   7 ( 7 7  p f0 0 0 0 0 eH-D   0 n7lZ-VL F7lD @8 27 .e2x"6 6 W  5 5   C`D` E` ?6` v`  v`  l)˕5 7x7v > > 3@W˕5 7: > > 3@ :e  ׭M 5 AwH  A  ?mp0 0 0  M˕5 77 > > 3@ ~e  ׭ H0 0 0  <׭a ?wx˕5 7 > > 3@ ext  ׭ 5 AwH  A  ?mp0 0 0  pe ׭ H|0 0 0  . ׭Q 5 ?e   ,e Cl.*0 0 0  ׭ ?@e:e, j )hf X !Xfe DHf 8 5@m, "N 5h|)   ) () n N `) ) N @- tN  * ^N |N t B  ) >  @ V) * e%w 벇 e& \( 6ewd)  6E?`e 6e 5 Y m   @` ȕȕ 5@ ȕ 1 1  -xze f1 dde P1%H he>-:w . we   [ E1 qle 1 e 1 `   ɕɕɕ5@ ɕ  ep-l  d  % ]Le 8m@?622e 11qle 1 e 1 ` ɕ 5@ ɕ  e-D   V e 77 ~6|e h $ @e\e H% w. 8%e"  & ߖ% RootI-space rootD-space rootSharedI-space sharedD-space sharedI-spaceI- andD-spaceOverlayNo disk allocationNo disk allocation (I)No disk allocation (D)Null(((((((((() ) )8)P)ZAP Version COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1983Segment table: @ F* |F, tj3 l*00\\TADATADATADATADATADATADATADATADATAw.  5B`  w62/      5@         @!   &  ~ f     :w^47 7  7 7 7   l$@@m@  m @`7 $  l$ x7 o- \ 7$ 7p$F 7@ $$# 7 "7 ^7 \D4>;8N<F0( & -R - ep$$ 7  eb$7 w   |$ 7 f  7  mx +Ef5\T 7 L 7FW 0W 7 2 @`7&0 fɋ ɭ@ f72% %$E lP%w\ m lj% XPB: iW  5f  d7 Z7 TY@ lt%bm@X67NHm(@o m*e7"5,( 77 5 7W 57wJ%7 lqt & wL-R > |v 7j% b= "XEe0 , @E :p$wN-"(_  @N  > N f7 \ eA l%p$0 $1-  p$0 $"-~ |p$x$ `-0^  N %w#a 4.E 5   b$ $ &b$ j %% 7 7  wEm l% `Z : : D   .p  ,  Lp$ % $    Μ%  w l%NN n N N N (&e& # e e" 7 7 7 7 w -$- p$  Bp$  Dp$ :,;+-*.CQ$ACFHLMQX ^_@>ȋ@ w נ%נ*נ$נ_נ-נ.נ0נ9נAנZ݃Ƞ נ0נ7נ*נ,A oȠm k  tנ"A   &A fנ$נ%נ*נ0נ9נAנZנ_נ-נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (w>נ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#00\[N  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C w )  8C * ) *w*  ep p  |ȥ#= EW9ť^*0 ` Ca C  =  R ȥ 0*ȥ = Eե^ Aȥ e@  = Ep2!)8eE`l0  0 0/ &l0 `p l064p 4 p  8 V *`)w *C#    D @)  6?0D)w \ vn832cd& & & B  2OΕ   N Υ$Ε  22Υ   v Ε f e |* e*w@)0,    ) )% ȥ  = ȥ l 0l  pȥ (ȥ- ȥe&=Ba@a :e0b eȥe@ ] V= E8 el0  & 0 l0`p l064p 4 ep )wzȥ%  R, D  wL  JwB #  f  `* w)0406 l0 w F ) |* w\46l0w   0,0w-  w $0,0w |46  )0406 0 *&  m  f A N  %0,0, f 톇,, w      .% eB U5UU plp & NeՀ)*=p!Օ^ *) l0, *) $ )*)0,40,6  DP5R RRR  8  **=D < `p46 f 64/=  @) 0  8w8 046 8 e*w > =00l&8el2 0 *e6p 4 28 Z 81416 2    & 8   * P  4 6 ^e6p 4&* ..8em,0l0!D0e6p 4.) &f  H e) .  e6p 4 08*wT141612epl2l0pw  )  t fU %  BA `6p 4p`4 %60 446f %8 E D/D!D l0l8epl0pɥ.ɕ Dw4)"(. = . B  E (.,*1 6U8UMw w B 00fep=& /e`pw^8e2 00\\TADATADATADATADATADATADATADATADATAeB  8 &$&w *(5<s1  U U@  >f&" \)'&M'&&**%*%0 *&* t*5ND  D<  EU   rw BC "&0(*7e "fSYqq1յ<pBՋ.p0p2&* 0=E%0=w&(eff NeP   #llD &eJ Ԕ %:ԕ: f"& f&f& & Ε lle  &*@<#8w /$ ,:T < U@% DD%][%><w  w`1  %,,:4 w *D ]Xf(e<5"ӕ_ S :ӕ: & "& Ε4'& &*'&**UqqC ӥ:  Ce    *w *  ע"wf)Ĕ%.&%;D  5)5@DD ͥ*Ce <e%w U\5@ 5U U*U  "5@\U@5 5LU*U  ʥ*%C!.D` *weC5U5  5 5@e*=U Ee& REe  ӥ" wV ˥"   ˥" Ք     Օ (e( 1  `(( X  >: 5 eCeJĥ[ĥ<C` >C ҥ, ~4B *㨂 De $ $ $ >z  DEe    *1  ˕03 "   ˔Ӕ ʥ75%& w Z&Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@   f >5>Eu H  w ( D T 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60)) *<##   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  $ P3)/ #( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ |& & e# eB&B FB  (* 6 eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w eE D` bl lrw   B eE"s    s-  Csl141612epl2l0pW=f(& e %&&eH 00\[N=&e0  U   E > >E(5E=uf p  w < f &* "* $Mw82e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416 2 B h  &f ,*1 U8UMw wR B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ pw`8e2 *) l0, *) $ )*)0,40,6 w ( D T 8"!#($ĥ ĥ w 0 *0 @Q$    0 40 60))eB   w,# w&* =*ȥwl `p!2 EW!p0p2(2,2(<'##UfE @#U  $ P3)/ #( P) @#**fff  &*wp. tB5(8e$8w2A&(e 4p8q  (#4=A#@)(  *O*)@#0l @# 02ȕ8 00ĥ݇AĥĊ  ȕ000 0 @0 &*0 @ & & e# eB&B fB  (* V eBe>  # #D #=0/H#@&0 # = e0   0@e 6=#02/002# @#?@#040 6w/!0/ l0/!p!0 .=p0p2w eE D` bl lrw   B eE"s    s-  Csl141612epl2l0pW=f(& e %&&eH =&e0  U   E > >E(5E=uf p  w \ f &* B* DMw82e&( 0 0 0 80 B0 0 0 0)#0.> =00l&8el2 0 *e6p 4 8 81416 2 B h  &f ,*1 U8UMw. wr 6B 00fep=& /e`pw46f %8 E D/D!D l0l8epl0pɥ.ɕ w8e2 *) l0, *) $ )*)0,40,6 w *8I J*=)98 : eB &&  U |**e *Nlv ΋*.2  & #!)&eP(e && >e >E p* w82e&( ~0 0 0 80 B0 0 0 0)#0.)"(. = . B  E p (.w |eE D` bl lrw 00\\TADATADATADATADATADATADATADATADATA8  B eE"s    s-  Csl8e2 ..8em,0l0!D0e6p 4.) r&f <  e) .  e6p 4 :08*w=p!Օ^&f 141612epl2l0p,*146f %8 E D/D!D l0l8epl0pɥ.ɕ w TU8UMw w0,0, f 톇,, w >     .% eB U5UU  plp & NeՀ)*|,?'?'h Y &[q Y lTITISYSYSYSYOVXlZXXSYl' @ ZAP>P _<'|bd  ` MX|7$7" "77077& p- * 7 z5x&fb B xN  :600\[N wX3wm@  JEe  E Jeww7z77r7pnhXhlfTe"eN@e7 64 6.e"/  57e7X6e- w 7 7|7 ~ 7rjm^bdR Df f &f &ff , w l5 funhj uhdB$ 0jwaw< 8 v8w &  *AdBbAep& f  P aAAf@pnp 0C*8֋ N88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ jŀajTI& af* n*`V @e,w jjlj ɥ@@aujk,bp ܳ5f fˇ ȕ ij‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ ,DlljaCeH###33 & 8 *  w R  8jDl@ TeBT85l@ ҇@( D ~eB&  & @# @& V An5jP a@@` > ~ &@ . eRa-eR BAnB X/   @   RՀaeRÕweRR)K@wJ54 @ E7 7ffd :f 5h X R%G  3 ,  &@ N`fd f 5 eew ͇   %f  @   w(a62 vp7n V ber e wVa5  et Ne `w fɋP7w4 @(6 vl(  e.e e   ݀f z  v06 2bE Z V REL J @e0? .&  "0  No such relocation registerAddress not within segmentNo such segmentToo many argumentsNo such internal registerUnrecognized commandNo open locationCannot be used in byte modeError in file specificationOpen failure for task image fileError on command inputI/O error on task image fileNot a task image or no task headerVerify failureNot implementedSegment table overflowv0LnZAP -- (@'&1   5ew (, Bv     5Bw~ 00\\TADATADATADATADATADATADATADATADATA5  5 2  UE . 6fE U 5@*& E& & f&ËDef Ë )̋U&ff   T , AB6RO6LI6w 7 7 7 7  # q 0 b `a \ ԥL ȕ ȥD@ȕ 840#5# HR e ea    ww m  B  e -?& & AmE7 - w  ~R  dw>  VwHw* "a40 He 7 B   T%$H5< 0 0 0 0 0 0 ewd& $ ݗ5@wX5 (W  H\\  ?mFp f0 0 0 w7 ,  W  5 7 77   7 % p7 7 @ p 0 0 0 0 0 e-  : n7lZ-VL F7lD @8 27 .e20"6 6 W  5 5  N C`D`E` ?6` v`  v`  l4'˕5 7x7v > > 3@W˕5 7: > > 3@ :e~  ׭ 5 AwH  A  ?mp0 0 0  M˕5 77 > > 3@ ~e ׭K HFB0 0 0  <׭ ?twx˕5 7 > > 3@ e0,  ׭ 5 AwH  A  ?m\p0 0 0  pe ׭= H840 0 0  . ׭  5 ?\eVR   e Cl0 0 0  ׭ ?ee, " )hf  !Xfe Hf 5@m, "lN 5Zh& v p & ' v & N "' X &' LN - ,N   N 4N , B  0'  @ & @e%w  dbe& % ew)  6E?`e 6e 5 Y m   @` ȕȕ 5@ ȕ 1 1  -xze 1 dde 1%H he>-:w  we   [ E1 qle 1 e p1 `   ɕɕɕ5@ ɕ  ep-l   % ]Le m@?622e 11qle 1 e 1 ` ɕ 5@ ɕ  e-  `  e 77 ~|e  @e\e % w. 8%e"   % RootI-space rootD-space rootSharedI-space sharedD-space sharedI-spaceI- andD-spaceOverlayNo disk allocationNo disk allocation (I)No disk allocation (D)Null%%&&&$&4&D&L&T&\&d&x&&&ZAP Version COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1983Segment table: @00\\Nw  5B`  w2/      5@         @!   &  ~ f     :w47 7  7 7 7   l6"@@m@  m @`7  "  l>" x7 o- \ 7! 7!F 7@ "!# 7 "7 ^7 \D4>;8N<F0( & -R - e!" 7  e!7 w   |" 7 f  7  mx +Ef5\T 7 L 7FW 0W 7 2 @`7&0 fɋ ɭ@ f7" p"V"E l"w\ m l" \ iW  5f  7 Z7 TY@ l"bm@X67NHm(@o m*e7"5,( 77 5 7W 57w"7 lqt wL-R > |v 7j% b= XEe0 , @E :!wN-"(_  @N < p> hN f7  eA l"!0 !1-  !0 !"-~ |!x! -0^   %wD@!aRN 4.E 5  xpl ! ! &! j "% 7 7  |wEm l#  : :    .p  ,  L! r % $    Μ"  ~w l#NN & N XN NN l e& P! je e" 7 7 7 7 Twp -!- !  B!  D! :,;+-*.CQ$ACFHLMQX ^_@>MHCHjCHhCHjC:HCKHlD8HD:HDFHDrHEO HXE&H$GRH\G gHzH\}HJ4H|J@ HtJt HJ HJKH J;dH JVdHHJeH4J gHlJwHPJÅHJLHMsH[NsH zP\Hb:H!b\}H bHJRcL HeHeHeHveeHeHeĊHeHQiHisHiTtH*ziH k:H$k\}H#kHRl:HlHl:H&laHHl\}H%lHvSm:H)m\}Hn(mH Tp:Hz.p'MHp(MHzp@QHp\}H-pHTq'MHq(MHrH"r? H6rp Hrr HrH|rH0rH0rHrHrH4zrHrH.r2H`r HHr7!H8r#HNr#HNr-H@r.Hr:Hr1r'MHTr(MHdrxQHTr SH<rkHzr!mHrpHrYqH<r[qHRrsHVrvwHrwHr#yHrNyHrryHryHryHr\}H/rHr}H(zrHrHrHrHrH8Ut^HtqHuH:Vv?TH vHyfH*Hf `;H$ yHH"zsHsHp+sH,.sH6sH8sH ;sH0=sH&BxHrHC HH8rHVrHWrHzfHfHfH©FHߩ0 HeH |H$eH HXCTH,KH,KH,MH4:H6}Hz6H6H6ԀH6߀H 74H 7f00\\TADATADATADATADATADATADATADATADATAH 7&H 74FHD 7H8H"HngHsH-Hx~H|zɪ+gHn˪pHz˪sHժ:H8ժ\}Hx5ժHWת3HتHت4MH ت5MH تVNH تYeH تfH۪:HM۪\}H"Iz۪HWܪHV@ܪ:H @ܪ\}H =ܪHWݪKH ݪHV#HZH`H`H`H`@H`H`H`zH`@H`Hn-}HL -P}HH AXH AqHAsHFsHKQHKZHLHO`KHOKHO NHzOHR9HR,:HRR;HRSHT|H<Tz}HW|qHtktLHfkBMHjmQHq~ZH>qZHDuHbuHbzzTHtzTHjzTH}#H}eH6H [MH$eMHLhMHXxH@HH@wHyH‹HzH H }H*}HZ}HZH^H^H@H>&Ht'H &H(Hf(H,HvzʫL Hʫt HʫIH0ʫ,HʫWH8ʫyHʫH ̫H̫pEH̫dH̫+gHϫxdHϫfHϫyH$ѫ,xH`zѫBxHѫxHѫHnSH髭FHZHdfHz}H뫽HH:HlhHHFHGH6zGH6GH2xZHfH\}HHH`XsHxQH& sHlHlUH_H_HHXHXzHQH&RHRHRHSHRSHSHSHBTH~THTHUH$HnUHUzⰀHXHVHDWHWHxVHX)HX4H0XHfH9HLHS}Hd@yH mxxH znHHpHr{Hr{Hr{Hr{Hr{Hr{Hr{Hr{Hr{Hr8|Hr`|Hr|Hr|Hzr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hzr|Hr|Hr|HuHuHuXHvHvy:HvaHvgH&H &zH@&&H&Hd&H zd&H d&Hd&Hd&#Hd&#Hd&#Hd&4&Hd&NHd&THd&UH@d&gYHd&^Hd&eH@d&eHd&#Hz)NqH)rH )#H")ZH)faH)fH )wH)vyH)މH$)H)H).H,){:H)FH()Hz)KH)H)H )UwH:KwH:iwH:owH:wHP:wHz:xH :xHH:xHp:ByH:FyH :WyHH:yH :yH:yH@:yH:azH:zH :}H`:H:Hz:H(:H :+H :|H":AH0:iH:yH:H:H:$H@:CH(:dH`:hH :H:Hz:H:H:H@:ۑH:H:BH :DHp:H :HX:2H:H:1H;KH;@jH;vHz;wH ;LH;HT;HT;8HT;HT;HT;HT;H T;7HT;!HT;;"HT;I"HT;`HT;dHzT;4fHT;$qHT;sHT;wHT;DyHT; zHT;zHT;*}H T;HT;HT;3HT;HT;H<H {H?{0H?{pHz?{H ?{H?{pH?{NH ?{@H@{0H@{NH @{NHA{0H A{HA{HB{NHC{HD{0H E{HzE{HG{H}H?}HC}H}4H}yHR}H;} HD}H H>} HS} H5}kH"}H}>Hz}H&}Hi}Hj}H<}H=}H:}HT}H!}HU}!H }I"H}8&H4}](H#}(HG}2Hz}2H }T3H}3H$}5HZ}8Ha}O:H}:HW}D;H}KH}MH}vNH}xQHl}QHm}RHe}WHBz}KXH'}:YH}`YH }ZH}ZH}`H`}:dH}fHg}fH)}(gHf}iH8}jHk}pH}UqH6}qHVz}sH}HwH }JwH }wHY}wH}xH(}xH}xH}xH}yHb}yH}zHh}8}H%}V}H9}]}HAz}c}H@}~HX}Hc}HE}Hd}0H}փH*}׃H+}؃H,}كH-}ڃH.}ۃH/}܃H0}݃H1}ރH2z}߃H3}|H },H}HF}H}H7 ~L H ~ H ~GH ~I"H ~YH ~pH ~ qH ~)qH ~[qHz ~brH ~urH ~rH ~rH ~sH ~sH ~sH ~sH ~zH ~H ~5H@ ~H ~H ~$H@ ~:Hz ~H ~ۑH ~{H ~^H@HtaH*ayHa |Ha |Ha H2bSHczdHdfH d}H eg'Hzem'H>e Hg,H>hH>i8^Hk |Hl8 Hl Hl Hl Hl Hl+ H#lH!lH%lpH$zl.H>l8YHlQ\HllHllHllH"l00\]TADATADATADATADATADATADATADATADATAHlHlH lH$lH!lHlHmH(nHHznHoH>op&H6pH&pqHr<H rHBr|qH:sL H,sHs qH9s<}HsHs(HtHzt:H/tGH0uHuVYHuyHuyHuyHuyHuyHvӁHvHvH vH vH vH zvHvHvHvHvHvHvHfHԃt Hԃ4FHԃ LHԃZH@ԃgH. HHz. H2 H3 H4 H5 HHHHHHTHT*KHTSH@T^HTLHzH2@H H6g'H4 H0HhLHZH`Hz}H~HH*HH H zHHeH"ZH HHHH HHxdHHHH"@H#zk'H a(H sH/GH H!bH$zH"KHH2 qHŞHHfaH(fH*R;H DHD #H@D#HDKHD4fH D6qHzDCHDH!H"LH#~H&H)8^H,FH -H2H3KH4H5H6H7p:H z7R;H#H#֯H#H#H-H-'H-(H-?H-H-[H-H5|H5H5Hz5^H5fH 5ٱH 5$H55H5QH 2<6ep   7 @B@0"1 C&5@<E*X7   &waZw!w:bbbbbbbbF 3&w\C& $ `PPPPP7, 6         &e$) mѕ1e !  :  jwBll00]\N Ez&f  ~xrKN 7 N^ 0 w!&7 U705@ "    ;-B %f$ $ P%     VU@wHeUE@ E7 4` v w P -< r 38B*ff,l,ZXXXQj(dXkj      @ @ <<<JRSX11Mhwv w W- e i%ffffM3 3*B@ ׆' Bچ ~bD , H` !H $ $~bD &N` bb b"p SYSTEM CRASH AT LOCATION REGISTERS R0=R1=R2=R3= R4=R5=SP=PS= SYSTEM STACK DUMP LOCATION CONTENTS ULJD7LPP.ltH  C b C $C  ,W V H Dww• 6•    B B B e0  • %tfŀ fŀ͋瀵¥ %L   $   `< . W  , $ BP  D ]@YEC%  B-55   ۇH4t B ¥@ " 5¥  5 6-P uuu ՀB Dŀ4   JBeE@f  HD< @s s!3   BN B  &5f&D lΊ L  w ' $ X5 `$  r e 5 N V   Ae  \    ԃ t < ae>@0 %TI@&  m  f A N  %Ce@Be eB 5 B@@ w&& @ &  B E eaa E! @@@P@@@P &w @"c @   B  B B B  lEU w&A@c@   @  7le7 0  . "   PmA HB2"2, ĥ 0p!  : sp J0wC C s E1q@eE@EU  Z&&A1q 5@0 0 IB:Jb ZB*p2*p*7 Z'w@H p74 5 P@ W ^ wDw4 ,3, ZB* 2**Uwb@B  f %@B Blf Nm% 0tD>e 50E0  ~e355 5 (C p l B&5 IB6  e Q6  ɕe E  5 .w ' w w ~ffvE w  ! wJw l&  %Pc T dM  G  A 4De - m K  F N r a( w w     ) B! @  5  L `; 8-,47LGa r7 l d    ť   D  B' #  00]]TADATADATADATADATADATADATADATADATA   ~w !#%')+-/13579;=?AC@6<V< @40N|ppPrRNHp`"8T(P U0& xwww t d&$e %wC F K 5^  @w D&  D * enrRs  `   2  E  # !$eBeh &F m TE$ #w w ɋwr t @&D9 33E ~l s!f@ F D de<fQ$D @    7 @*wwbݶ ݇D  4B݃ ݂ ݇  w j   `㕀  e  ~SW f&$ B  ;b8#5f(  -m N " H $ e4 K e   U 5   U@ 4 U e B & 2 Xt Sf  mf&N @55:&@`2 5& 055' BU@  m6 eN```e  U@ f @ V&f& e&  <&f( *&f   w@ 5ew &f @5& & ׬ & v  TTT&& r&  T- /Ae e 0 0!00  h  w ε5-P @ 8T% $  l"d ! ` w V @ wTA5 EK0 wwweB&  H E5 A  r &  E& && & & & && 5 6 & & 5  VE" "Q  (0(5  & & @B  -6@B Bm -$4@2 l t U 5@ EE "  e  >55  5 A2B, A 5  Tcc ~@ 5Z$ 5  5 LU- U@ e @ e f5  f : 5  5 @,A1. e2 5 b@ wb骉" RB  0  0@wU  0 @ |SS 0 P  W  W eXAaeU4twXee " " E@  z,,5   E 20 W r  r  `!E @e2 ra!a e dE2eN!E $  `  !f 4  $ 0`   0GE M{s$i, !L"! Rsn      51 % y wp 5  & B  3 @P3  4e Jbbb % N\ Ur C 55@  wwJw F@ D   <5 *5`H5 5 >  6 5F15-55< p #w% r 5@ w     wp   l @ dwy wy\ % @mwJ$& ʕ uw J +55`5`u  @l e% 1 hOq 5@ q er r Mq 5E@ @2 4Jwrq r r  @4GM IE$C,G#$~%$ 00]\Ns## #1$  %#  ##5RUE w*  UB @P3  4eJbb  )wJw 4@  # &D 5   D   =   #3#5#4 rM#w(5  Am vw|  P%&'& Ns%%UL w@  B  e . D ( @P3s(@@-5  4 dE 5%w f JGeA  Jbbw Z@ D%‡ $ sX,((EuE?e@3 wf5E % fN 5 %5 5@  l55   %w  Zw w n   fvʋ  %  EUH%4J E?E? &E E@E@ U UrKO MUW$Y, 0x()*) rsT(     X(51 %d(Q w eV( \ J  3e 4B 3@ @P35   4e @ bb  ʋ A 55@  w2WO  WM@ww N@ C  5E@ D   V C @ @ 5 ( W( w / 555V 5?  ,w)   %k(l( w5 wF     V(  u 3W(  AA w5@ w5(55  N 0K 4wD5 Q  V(w.V( @mwl%wb uw u  rrrw 55`5`u BW(W( l(l(W( B $2M wwLW(c(l(&& ʋf U V(w. @mE5 5`u  5`w^ @l e% 1  ` F  Dw&  & %   "   E$C,G-v.&/x. `sh- l-1$  %-5RUE wNj- B߂ B d 3 P@ @P3  4 0eJbbb N 5 5w $ 55Jw |@ D E@ 4 D  9k-  j-55 k-4 ZU w   Am . wd  r  j-ɖɖr` ` d   a2 a2 GE M]li,y|qtyq{s$}Tu\ud/n1~2p1 sd/sh/1       $/f/ l51 %/w| @%/=U%/7U@3y wDf/   % !f& Nes & N  UCe@B U  4e Jbbb 5 2h/r C 55@  w>wR5 ʕ N\Jw @ 4D  5 "5 "Uʕ N\ @mE > w5E tH58  G5@ > w5`A 5".53 5F.5@"  5455w05"5    P   f/   l @ >w&wxy\" % @m%$& zʕ uw J   J"5@ ,j/l/Ug/5 ej/%p/j/3f/w g/wVg/j/j/ @4ʕG& N B B  & N 03BPt/5  te7ve00]]TADATADATADATADATADATADATADATADATA  w55`5`u @l& :e# 1   5 y ;[q ;U@ ;YW ;UU G` CY9[ Y9[@Pp66666775566V6(;;";|;;;;99996D9ؖضȅ""""::::D999:L::L:D9D9f9:L9:D9999999D9:5878 js44@ 344 e 4w4 "@"3 4 4 4 x43 4f#5@  E@ [#e"5 % 44W w\5 $E@ E E7u] Gw v E E7u] E A w%'5@ !"AeI I I I " qmqewu#@U5 EU5 UU345 45 Fr 4 @r" 2 2 r4EC ߕ"r U  w55 5 5 5 U E U 4 r 44 5  w U wB  dU w,,w `@ D4 BA"5 U E0 5@5@ y55 $E55 5@@ lw @<*5 55 y^5wf5 5 U 2 555 w 5 U y5E 54U % 44wV5 U 5 5  "wyD55 U@   ! 5 @3`44$Al4 5 5 5@   AA w.wA"4s"4s4s4"yD55!y5:5[5 ,4e155 4"44wE @ 5 5" E 5 U 05 ,,5 $wu U Al5 U 5 U E@  E  (w5N% 5 U  r NE% 5 U 5 5 U E 5 U 5 U f  f   Jсq "q 6сq q" CrAE@G@O@`A@I@ I@@Pp=?>? s<V@"4 <@ 3<@ <%DU@<1 E e =w43 <5 ҋw21q5 u1 wD 5@ 1 w25 1 Uu5 s<3 < EW,~5 G5@ r< < < ,oA 5UU`55 5E 5E@w E 55 < 2  ^$<4 JE@5 E 5 5@ʕ<5  Uw5@5"  U@  r  E%3 2 >U ^Z ^U  Dw"* ^Ce E    0 U@5#wE_}U E @$U+00']\N 1e8e0ew$5E  HDw5K5x  ;5   < U55 0 * '5 U A5 B@ w5? AΥ Υ )Υ (Υ *Υ HΜU w$U5 &  eaCEe3e e +(E5 e3 Ez a5 E ΋† 5 w Ce5@a ŀ4 wf˕6 _B R @ (T nΥ  BE U 9 Υ ΋ U >f*5*E u 8ԇՀ 5eΥ PC  ŁΥΥ, Ξ59UΕ\e wBΥ \CEsΥΥ}ΥUWCΥ U5xwU E5EB5@p 5. UE.T n PCe%PPE zCG.HHw ` t4ww`5. 4U@,U.w `t& e5`EΥΥ ΥwU EΜEwxEU sGU@DCe ILLLPNXNNNORP^PfP bQJ bQJ@ bQJjQJPbK`PnKPJ PJ@PHKPPZKpPHK jQJ (sI3 I3 I3I UI02 -5 ) :I@ 5UIEUIE e%Id IzUIAe EB BsIe r2 2er2 w.W- (5 @III5@ TI(IIIHusI 5@  w5 %3 IEU@IU5 U IE E=u] UIU U I5 IREW E W 5 UR5RJ J4ߕ ʋIUI U IKI,UI5I5@I 5 I5 IUI5  wʋ  E I{I 45I  IIw%LI;II3 I3 I I ILIU@I  ʿ 5 E@II II I I ww ޴@ 5IEI ~DI2 E#J#G'5 #5 5 5#, #  ,IU 5 E E%5U 3I5 I E- 5U 5U 5U 5U 5@U E I y*I5IQEI3 IE% I   %!Iwf5 ʥʥʥ"555I5 w55 {Iw\ I E%% 55I4E I  5 !UI@I 5  I IIh I`b IZIIOIIIII II13 I 8eII  5IIIII I I IEI IIw|Iw< ^PIU I 45 5 A _ IE T5 LPI !5=5@I#5 ;IQI  IIE U@  0QI I5 ,IIIII5 A EI xwF5I#f I   4q "q " q q" RQDB QQH2JRbR&RDB R&RH2JRJR+RRDK#bRRHRRRDK#RRHRR$4SSDL%RSHPvSSRSDL%4SRSHPvSvSSSDMn(SSHi T$TSDMn(SSHi T00/]]TADATADATADATADATADATADATADATADATA T" `TBTDP-$TBTH8TT~TDP-`T~TH8T T0TTDR/TTH`8UPUUDR/TUH`8U8UUnUDUT?8pkPUnUH:VUZVUDUT?8pkUUH:VV::VhKgVxVMU$x0kZVxV@V:V,@Kg&WVMM(x5xVV@WW6 WDWMSD"Ix&WDW@WfWW%RXWMT =xWW@WW4xX0XTT0HX0XH`X`X pXXTI xXXXXCO X0XXXCL X0XXXLB XQXSY XQ RSX-11M/RSX-11M-PLUS Standalone Copy System V04 АPP0֦ PRSe  * w X7 z e e j-fw^Xҫ `7ƫb<L f777 <2`@h%`X`VvvM0XmvMrPwxA@7XR ~'A'h"hi$@AfXtgngngNhfdh`hd,tgjHh(h%ThTh6 fPhhX`hThHG| qd q|hhd$PdNfX`hHHZhZh&i 2i8i2,`hj@i(\i,i,iz~ziiXXXXXX8i,i@?~ 2ii(g$P2=fX8i@@2i2ijj$j,8ijL8j(Hjjj f ʠjjX$jj87|Q Q|jjh$R+fX$j88jjjt:,$jjL4 k k_ @ B :dk:ZV0Nk_ @ n :d0kkFPU0kj:dpkkk kkKg_kkk kR%kk8d8e 007]\Ni8eddkdd>dPdd,j d(tdDdDdd<'dXXXXPdd2eFePeF,PdjAevf2(gf2,PejR(g(f|f|fz$Xzzrg$gXXXXXXf|fRQX$22g6gX$@2gXfRRffbgAhtgA,fj h(ghghgz~zzghXXXXXXtgxhgb~'A'h"hi$@AfXtgngngNhdh`hd,tgjHh(hThThfPhhX`hThHG| qd q|hhd$PdSfX`hHHZhZh&i2i8i2,`hj@i(\i,i,iz~ziiXXXXXX8i,i@?~2ii(g$P2BfX8i@@2i2ijj$j,8ijL8j(Hjjjf ʠjjX$jj87|QQ|jjh$R0fX$j88jjj,$jjL4 k k_ @ B:dk:ZV0Nk_ @ n:d0kkFPU0kj:dpkkk kkKg_kkkkR%kk8d8e00?]]TADATADATADATADATADATADATADATADATA00G]\N00O]]TADATADATADATADATADATADATADATADATA00W]\N6`TN2V2<*|ptP<<<<@6v¶<<<<$ l A1 f W, $   $ <"U 5< = 71 1 " ) lA@E3` @E L܃ < "er r" ܇ wv z1 $U e$,$$E @l s2 U  e& Հ  K KՀ"2 $  2  (ɇ e( S  tՀ   wF48 w.4P w "$&<0 DKU  <0 S    mBA m> v w&7$ <" $`r.1& "e$ v \wf& beH  AAŀՀt4 4ŀ 4  e \n_!"!@ !! ""`"x4,`@H/ ! "~)!!)"~"~i"r8B /00_]]TADATADATADATADATADATADATADATADATA(lw&5A55w,dE DD D   4`4 t55 U@w 50w*U4 Dw 5E0w &ws&    B@ 5@UUIe  55w.5w\5w 5w5@w j@EEC :  r{w8w5 E?~UeAf& Nl H   e pewf tՀ e " kEC  \e ef1  &0U@ @E5  7 0 Ut  |h va,,5   w~2U  1 1   @eeSK@ E w"E$UtC& 5@ tՀ f UIU& sq15 U U PU & 56U & %&e `B  5  U@5 U w@ U      E\    F & 0@e$f hf w5@ wwU  lU \ &  D\ V "% % E& w& tUw5 w U    \ @0 & w  w,$wQPQRQ*eQ0Q2Q4Q6QFQGQ(      @  e  E\w \w e f3 4ŀՀ t6ŀ DfE @3 E00g]\N1    s,s, wss4 X΢r_"!ȥ $P % % *% `p֦@ PҪ PP@!¥N  ʠfw5A%P  DD ,,  U5U D   ``4 550wU4 w5Epw fw^sȠ :  B . z7 ,e%  @7 ) 7D .  1 E 1@  &  5E EB@ 5@UUIe @ :55w5w5w 5w5w@EEC {wFw 5 E?~UeAf& k   e ew tՀ e x E5  7  0 Ut  xh  ra,,5   w2U t 1 1   @eeSKEˋU@ E whE$UtC& J5@ tՀ f UIU& sq15 U  , ,  5@    w~ pU      E΢ D@ E%E0 %E@ f , N w5@ w U ΢  j E & w B U ΢  % 1 (% E0 U & w5 wl5  JU ΢ P&f& <w w 5@  w U 1  U 1  U 1 1 ΢ B U@ E0 f   w w 5@  wf XU 1 U 1  U 1 1 ΢ ,  U@ E0 fw ΢w` e f3 4ŀՀ tؠŀ 0aՀ C3A Ew~H ex5 "5  U ΢ $&f& w& eH  AAŀՀt4 4ŀ 4  e w\ .aD @E ! %  E c U fA E%% U E0 @EW% C  q  J EwHU E p1 E 111q1 8w΢ w5EU Ϋ~ @ PEu u"@ E 5@UUE@ f E% EX   5 U 5 U 5 U %U &, @, pN wEw Bwe &f& ΢ w5EP xU 55U 5U E@ EUU, @, pfA %#%E& wEw w(e$ @Z  s@$ RZfFXW,MUBCEE C3!Cl Af$5%MUhED-f DlΊ 7 4DfE @3 E1    s,s, wss4 f ʠBdXj87|Q Ơ[qsu~nLqUq00o]]TADATADATADATADATADATADATADATADATA >Q  T6wVf׭ 7 :de n,dwbwt@E0 7bc2>P5 F$P WaWz SW WW w ($ D  <  0 5 W W   wJ e  w%] ) R1%& D7Е : Е Е-Е-Е  7 wB S/  ڢ@ 5 ڢ\ 1 ̢ qҢ& ilE J Е: 3 W +s:&a"rr􂄜l v|a     & & .  & ɋ=     f a-aawPra`` -``7 ` ` r  #  nS dS7 k7   V x OS =H ` CK 9%TI+@%TI%0 5@ !5 A@  t 8 ,2&D 55 &f&@  2eMt h h% hDe  &i@ w`TSMHRSIUIC  5 5  8`5D 1$ [// ~09 l%fN :EAC ~ ? @ :8 6 0 ~1u ~ݦ t"!e H  [ 8u¥, (u¥]wD " t .U M Ԧ ԦA٦  7 @E  H@@]   zV@wNfdw6 Nw*(w"u \      u`u 5`Ce ]   l%  u`u 5` #\\  x l5ArpU g  7 [  t4& f  & &cv c6`NA B  u 5 BA u5P 4 X]:://>J&zQQAA wL^Y;; c [d5 7   :/U9Ġ` FU , ¥ = ߕʠ=twZ[[Z5ZĠ? ߕZZZ6 Z̋ӕ AMu @ӕ-A A< ӕ- "> U U @ Dae0e0S   5 w 6T S (̋:w (@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA \`EAa$  *  + 23E Ew    Е-   0@A _W e`fÊ    E  w v ť ť 0B _Aa & & @( j_f  e ee e &f z~zVxXXXXXXj@?~ 00w]\N zPDB!؇DK$ևDL&DM)DPz.DRr1 DU:MM8ևMSMևMT @ևMU:f RSX-11M/RSX-11M-PLUS Standalone Configuration and Disk Sizing Program Valid switches are: /CSR=nnnnnn to change the default device CSR /VEC=nnn to change the default device vector /FOR=n to change the default magtape formatter number /DEV to list all default device CSR and vectors ) Device CSR Vector CSR StatusƄ) ------ ------ ------ ---------- Invalid device Device not in system") Only one device of this type is allowedP Input I/O errorf Input line too long Enter first device:  Enter second device:  Syntax errorȅ Invalid CSRڅ Invalid vector Invalid formatter number  Waiting for UDA to initialize0< Hit RETURN and enter date and time as 'TIM HH:MM MM/DD/YY'p FOR=Not Presentb  7 |  , j ֆ,w3 z7 p  p1 twfw^$ l":4/*3WaWz ыwRbwLw 7 h `7X7TԇߕЇ7 "|  X      N 2 V   `        "! a  rE55 ww @2ʋ55  i 5   @U 55 ( 5 @ @ ɖ5  q z7 PEDA@A    w7 7 -$ w77Q-w- -w~xn%MMdbwNwJ(  h F . 2( ąw 5  %:w`p 2օw%MM -www „ Q,W,MU OD7ZЕ PP%MM r B | Е  T ^Е   DЕ x  8} 07z e lwf   *  + 23E Ew    Е-   0@A W e`fÊ    E 7 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &fd  6 :  8  " .$ B  8̥ZḀ90     DEVCSRVECFORjnrv/܊҂҂:/Žʎ=†:=†j=†&f &  m  f A N  %w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C &ff fPBdXjHG| q 00]]TADATADATADATADATADATADATADATADATA 7 7 7 7 7 7 \e e@ wwww ]  "[wZjwZ7Y7W7T R  Jީ /w  (&    U  w  w 1  w  jwr5 -5@ wF55U5^ awDE`]N \Z p Bw;< R ,( 2 i  w(      w< ׭w^ wPU vEpU@jE]^$  v Hw 7>  wmZ42]5 -H<-B6 Z _m*@ S  $ 5 &|n^ jdw w >Ь$ _TU    z , " T7 w>3&&R  E  &f @B ݤ B &mA meA rwp7nWp>U&J J) "`w &f ) i )`w  ~v7l7 77f r<& b R 5 >-Xp -RjL 7 ^U"5 wB w  mA m eA S ew &f& 77 7 Z\T .w `<W 9 < zaU85 CE-8 -0F F  A   ew   ew &f&   6 `@ Spj &v0PHP@PJPKP H &f mj 1 5 $(!mZ*( lU &-: -4 7 (U % 5  &`E tx5`` kb &   `@ ` B   & A @    z~zzVxXXXXXXjxb~'00]\N7 7 7 7 7 7 7 7   7 ^Xf  w H H wX wV ы T 5wQ7QwQ U-. e w  -Q-Q$SSRRRlQ fQR @TE B V T  Tw  T  TkY~g:TM z7 P7 P7 P%DUD 0T FR%DU4 T;7  6P nSEPT "V S S 7PT w`) wd$PwPT%d^xp7k47"b$  [1%DB6%6p7 ,( mЕ.[w"[L[v T5 5 uЋ f%TH Pf  FMT -- Syntax errorDevice does not support formattingDevice not in systemFailed to attach device Start formattingDevice offlineUnrecoverable error - Device write lockedDevice not ready Start verification Operation complete Device driver missing Entering manual modeCylinder = Track = Sector = Manufacturer's Bad Sector File corruptDisk is an alignment cartridgeFatal hardware errorFailed to read Manufacturer's Bad Sector FilePrivilege violation ** WARNING - Data will be lost on : ** FMT>Invalid value for the DENSITY switchFailed to format -- volume has been alteredMedia format error -- volume has been alteredVerify Operation of FMT failedInvalid OperationParity error on deviceBad Block on deviceInvalid switch combinationCommand I/O errorCommand too long Continue? [Y OR N]: Response out of rangeMarked bad in Manufacturer's Bad Sector File Error reading dataBlock = Header compare error Error writing header Error reading header Error writing data Start badblock utilityBAD :/LI/OVRUnable to run badblock utilityError limit exceededDisplacement = No track descriptor foundInvalid switchError setting diskette densitySkip displacement = ECC position = Error reading track descriptor recordError writing track descriptor recordTrack descriptor record: Manual defect information: Unable to read any Skip Sector FileSkip Sector File is corrupt, reading nextMarked defect in Skip Sector File ** WARNING - Error rate may increase**WLT switch missingbZ&H  dL ^LЕ H `H KEHTwgwR)00]]TADATADATADATADATADATADATADATADATA00]\N00]]TADATADATADATADATADATADATADATADATA00]\N00]]TADATADATADATADATADATADATADATADATA B T B | B DK \DBZkDB2/ZkDMi ]DM/ ]DR`7 .kDR/ gDR7 .kDRD/" nDRav 2 nDL( D`DLP D`DYnDYnDYnDP@ zoDP8 zoDUp??s S      &7v Ү  %s %S % %DMx  Qg rT j ~%DRJ5 q & NR|T  W |Tѝɝ  䴱Q  `Е.Qw: 0@` m$@ 76w4%DL%DYt" Dw |w 2w lw Q  w Tw  R j H ȥ#  ‹>7 7 h H w`Д&  m %$ 7 ̳ 3H H az Ћ w,NV lVTVx`Vp %DKh%DP`  7 H 7 7!B'1<R z ew p 4 0( <R     7 7 7 nQ$W"CE f%w@B  z-%7   -x -n-h7 ` Z-V НıН ݼ wN?:RH PPPP H   ew %RP ew F 3H H ɋɥ ɥ ɥ ѕ 7 $ݰw ZvH ~v7 ʰ |  T ww 6~.w7 t&lOME7C%DYLA%DLD=%DU<9$%DM.%DR&.%DU*%DY%DU%DY7鯇鯇⯇ۯƯN w\Yh ^X%DM%DR%DLqow%* "V PH  5 wN ( V  - ׆ P H   H B "Z BLeB F     -H   ` 7 $ r  .A 1+mrm-:D&&EUR|T EP-ag U -U m7A ` 7 7 7 H w m R|T MUu < d : d` ݆¡C\tZpVaa e>w8 # w2fa @P a 0H -<-6G  $  dN 00*( @ߠmhw b , @V7 FH >  H " - 7  H d\_V 5wl8 , ewm V   - j d .l7 d H  >H  :8   |$ x , h`cZ "H><7:m24 7!, ewm > VH , #5-  5-5-&f mm FeZwT -.$w z /}- U j UR|T EP0 0 m$7' H w  R%Uz淔t5 5  ( P & ֝The RP07 is not supported at this time hn  7 y H ,P ڕ' H A-X7 w7 7 $  ]  wH E   Z0 L H U$  2 H . H   wz  ewe >҆ 0 H $ ewe * HH 0 ` "1,1, ee Xelwf 鴆 6  ],m( < The RA80 is not supported at this time lp d l000]]TADATADATADATADATADATADATADATADATA86& & & & f&& B & ΕH , ,wwtvwdҚ2wTšwDw<: 7 _ 7 7 H  8 &  e B `w7TQ H`ww`wzwjؙ[wZșwJw:w* Lw    *  + 23E Ew N   Е-   0@A LW e`fÊ    E w ' UD$BA 8&( U BQ \Е*  w  ť ť 0B Aa&37 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &fu  Z ^  8  " .$ B  8̥ZḀ90     VEVERIFYNOVENOVERIFYMANMANUALOVRDENSDENSITYWLTERLBADVEVERIFYDOUBLEHIGHSINGLELOWuuvvvvvv$v,v0v4v8v;vBvIvNvUv҂[҂[[v:[/vvvvvvvvv4w B4 5&UE * |- :-0  ` 5 |5EU7 7 4 4 5@   a 5@ 5ډUxvpwx0 Z0 7 d7 7 , 7 n X567  U, > '  *4  )4 E5 x> > >~4 7 ~4 7 55 .S '  ~4  (4  ~4 5 (7 H~4 ~7 ~ n5` 5\w5@HT~4 6~4 8 D&w ?wx7v5 5 7  7 -- g De@ w }}}4 }4 f } } x}e p}}R$݉ B} {B H}Z} ! 54-F`-<V 0}4  "}4 7 7 |4 }4 w~eeW-$w- w- w- Ae ww`ww 7 5׉ |v e 4 FUD,| z 4|F| " 7 7 wx wZ00]\NXT.$3D)^B8XXKrIOO&ee5R 5Hw =52W P3 & & ff& && Ε& &̋ )&V  Ve 00]]TADATADATADATADATADATADATADATADATA&& & ff& && Ε & 04  & & ff& && Ε &D& & & & & & & && Ε )e5#~ 5W P ! & & ff& && Ε &e 04    Up!  f&ȋ )>ȋ/ ȕ# 5U5# 5 5U ȋ   &V LމU   :UމU   5v5l"މ 5Z߉ e @E  5$57ɉDw-w- w- 558ȉ,w-w- 556ʉAe w`w 5܉ ̋ )̋! ̋ )̋U0!& & & & & f& && Εf & & & & & f& && Εf  & & & & & & & && Εf & & & & & & & && Εf` g  e  4 e tCw e&f<  [ 6M:5}v Mv : Mv :5h  / v L /\v -Vv ՋU@  6-: LW delN   5"C$ W A $e$ $<$<6wvIe JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC |L@    e  T T T T H1CdT T L $)dL t dL d  l  7Nnpq LmRN r "1,45EE@"5EE@@PU@5E@5U5@5- MMM M7 /MMM MMMMw M "1,&&&("DYo "DU o o p7M Hp LH"5 U5@ 5@U@ LeL LLL^V  ~L tL~L R 5f  VLҕ UJ-FL.c LBN(S)=DMi DM DL( DLP DR` DRa 2(DR DR_ .5   w   |zf!DU0 & & & & ff& && Ε&` &̋ )̋UX!$ !  Pe W#5 *   D%U!4  #̉  &6    Ή # ewwww   V5 `%5 V%w&> U4!&4 eB   ̉]5@U@D De 5 ,8 .[7.*E  ` C ZBm@  ~Ή\e!Їx4 4,   %67 2 $ pqq B5f`A  :ZeBB  ZU ZB YUw-w#[ G00]\NN`v 6`," -#(vv," -#Nv( e$w!*[3M uweއCC7 7 C|Cxf n b ZT  Y5   -f7 &C`BB  4  X Dj5E@a. 1 D  5 v  t nߚ 2 w @ @a4 wY $Y Y   BACKUP @ >Е:  W  e  Z? Е. L?Е; >AePD  R@ EҝERҝҝ j2\ ~ d e  ee ee eѝ@ѝ;6     PUKCAB:X J1 Xt`Zt \4`\X4 X4 5W4  w(W WWP  P     WwZw\W "w7ݡ&fWȋҕ-ҕ-ȋ ҕ ҕ:ҕ:HW  +2W4  IE W- Jwwjx5Vw4wTHwV>wX:wFB->dDe J 5V h  5,  ݲ5lȋ rVeE  ^V RU:E2FVeV . /  74e . U eU xGW-W-W- w-  CCHBp7GU   &  @@]   !EeB  4 W- W- W- 0sssswfwȋ 55 Be    5Е  T T  TeȕvTe[ȕjTe  9DTeЕ Be Be $PSeJPPPSSeT@S0  S>e\8S ( Ae &SeB zSeV  &bSeh!7ـ55&>Se>`4Sehلe4w 24  # 5ReF  r f -D-6ىedReAR  8,  p  4  +pRe dReFM`wW#d ^* 5*4ufQ 4 Qe:D   eB # 7 x ) >ff <+ 'QeZʕ77QeV vQe:M 4  r*   RQeVׁ>Qe:M 0Q (Qe  5Qe: (7 P  F&P 4 4 P 7 l4  m8Pvu ABP BCmB 6P GeOM X60 &&  Z= 4 e P >=4 W PW#EOW-F1'5@v5p4 w5`- 5L-r x̕%W-V14 P ÉW PW#EOW-V2E4 5@ 5EwV 55@ w 5 e  M7   e L7 &&5F9ȕ05& Oו G9ȕ0  l, ‰wH55   2w5@w51&&-Zd#ӸӴx|t7 *E^, %"ddE?:X PFLBӄӀ86PN62.*LeLeL4 L4 ىw 4 wP &5~  4  ( ÉP 5:0 L( B4 P 5  4   ̋ 55!߉E4 K 00]]TADATADATADATADATADATADATADATADATAe :    ډU| x-&&UT  L-r>w‰ ) $K4 K HDTR1Pf00 HDR2 ^ "4 &&X 7777777777 ФРАЌ.*.*tp5H5@< 7 E4< Z"5 5@7  X"EI4 J4 7 wÉW P C($  :0 EϷ e  H7  && (5d  r 9ȕ0 4P 8 +HDlR1hO9ȕ0 fЕ0 P( HDR2P  lU!U& EOEO> F1F20 V1V2"EE|g -7 P( ^P R   ! 7* E5@ w -. 4- "G  ,F  4 7 7e &Y&&e C͂ B Z %5zD  u`u 5`& 4  چ  lj v  w`>w P7 @E:6z>2  - + =W AƀaɋU h=eBCD q=== .& & & & f=& & & Ε -f7 ^ȱU Ul-!\- rn F>B-ȇ45&0 De<UU5  e5 W   U55 l lh5| X X 5 . ZTɇ d  5$  ɇ "ɇ    x   5   ̋4r# B Օ%ՕN L>eՔ  L> Ք  L>Ք 8 L>eՔ F>Ք Օ%ՕN L>e Ք \>e K\>Ք F>Ք  L>eՔ  &f D Dae  ae4 W fՊcB &VP̊̊ff&f @e    : 64  f&&e Cǂ B , ) v  w`w v ?p`  4  E`f     Un JE^Ƈ77h&&f$$ b> Z> n>÷ @ R  ?A W ~ЋP  P|z7 ÷ 7 7 B?e?e  w-w# A-B#ABCeD!W  Uxerwpw l. l= f T= L= - v h= mс  B @   B  e ,%-   p t  `· Z‡f   B `eBE  NՎ e@ &f  D aeDE  @  U% # `BECeB N`v @EN% 6 % @` %  7 8B ; eA w pb  mt ReE  \ 0  @  膇BCUG   Â7  wG  :7w   CeB  :Cb`f^ @ Fe% I P( -  0  P  @U⿇ p8pPphp;4  ;4 00]\Nee L Ї;4 ;e Ї Ux&&v n02; e XE4D;e$;e  `.w ,& "*&& *:4  T-"- w`w e χ4 4  $χ @e @aP   w: w.l:,z!" ""  -7   :e707.9e ȋ9e9e S   ӕ 9e ,   uu x9 - 7 ࿰5Fωω56ω4 409AC&BCmB 9e9 -#l׭f׭\ ڽ6 f  7f t %ԉmB 8  ̀ 6@a HjHj4  T -d!DB!DM7 Ⱦ !DR!DU7 -7 xQz kz7 p  p7ȻĻ 7e:1,  ,: ļe7e0P7eBP7e:P P7eJPx7ePPn7 h7ePPj7e4P`7e\ 7ڽP F7eh w"н7 7e  z X5f66& b̀mB ? 6 e  58& H xU" 0 ,4  f&&e  C B V %5ЫD fu`u 5`& 4  ׆  lj v  w`w v #   tE`f dTVPR  |  u`u 5` 4  ҉ w`6w 47`0$ T$  ̪ʪȪ P U&&$4 ~$ 5l5bA5TbW-5@X:$eZ7d7bwX2$ 55 B5W- 55FwDwکw ֩w ҩe 5Ew2 55F4 U#4 #4 w7 # w75Z"ER7 "7 |xR7 PT&& FXBT x 7 ިP 5  pl 0 " 455.j]W-eW-U-jP-d L-^ Hewr @ V7P8>" wV7T5mFXw Vm>PE n mHw Fm@ P  5U4 w55.5  |7 d)& & & & & & & && ΕP 7<d    5  qU5$5     UڦUԦ 5 '5 ؉ۉ)& & & & f& && Ε  #    5b-  5L-v F  @ F w&  )wԣ %7l7hUUĥ#   e eFBeAA  Bj U LePPJ eA  m2 , rB HL4 44 ! $KsSeK Ke"(ܢ0$U%Ks 0 0  f B t4 <& EeA w ` X/%\!CBPd@ d4 t d@ d@-A-ew!܇  &mB  < 7 ʡ ġ 5  mB  0;&fzf zf z e _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM *** <w r&ff=elC    5p   d     A &@d &@ &m M M` M`5u  | @ @ e@ M`u 5`BW @ `u  #;eu o efA eS S S 00]\NfB CeS S S A eS S S gB ee -RBw -FL<*6 e܃ ܃P _܃ P  e@܃ AP  5 wW L55 @  *  + 23E Ew    Е-   0@A W e`fÊ    E  w  ť ť 0B <Aa & & @( f  e ee e &3&f& v 7 X&fwB> 7 6748 @,q `-KacJE[ !m@  ) L R  7 f@  &  5]U E~ :r&@E A ^V ̆  E vE c&$   @  . &fl     8  " .$  ̥ZḀ90     w ' UD$BA v&( U BQ Е* DSC>ABDEFIMNOPQRSTUXYZ<>=MXd^)JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA B C ed!  aeNb A  Е%̥V P Е Bf n & ePB& e<;& eh6Hŀ ȕ  nЕ Ћ  Е Е & e & eЕ A %& eA d Е Е A FA   $Е. . AЕ; `    A &EA  HE 6Dw 4D&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   B P( ( (   @ @ @ @  P( P(RWDENSAPBADVECMPBL800160062501600MANOVRNOAUTOpppppppppppppp ȁ&q=.ȁ&qʄ҂F҂F\8qb:,&q/Xqd Nq> /Xq>  Nqq Nqq@ Nq Nqq=q:q( NqNq: Nq= q q :qNq=q:† Nq$q‚(:qq‚ ))q,q?????????~?~?~????????Z@Z@~?Z@Z@A@n@n@@n@n@n@>A&A AAA?????@@@:A@???????@@@@?:A:A&A??@AA@"@@@&A?&A?A~?~?~?~??-AWf~  %N%VA2 Conflicting dev. types%N%VA3 Mixed tape types%N%VA4 Illegal switch%N%VA5 File label too long%N%VA6 Syntax error%N%VA7 Dup. dev. name%N%VA8 Too many dev's%N%VA9 Dev. %2A%O: not in system%N%VA10 Dev. %2A%O: not FILES-11%N%VA11 Bad block syntax error%N%VA12 Bad block count too large%N%VA13 Bad block cluster out of range%N%VA15 Output tape %2A%O: full%N%VA16 Output tape %2A%O: not only reel in set%N%VA17 Tape %2A%O: not ANSI format%N%VA18 %2A%O: not DSC tape%N%VA19 Tape %2A%O: a continuation tape%N%VA21 Failed to find home block %N%VA22 File structure level on %2A%O: not supported%N%N%VA23 A%N%VA24 B%N%VA25 Code A%N%VA26 C%N%VA27 D%N%VA31 I/O error E on %2A%O:, File ID %N%VA32 Input device %2A%O: File ID %P,%P not present%N%VA33 Input device %2A%O: File ID %P,%P is deleted%N%VA34 Input device %2A%O: File ID %P,%P unsupported structure level%N%VA35 Input device %2A%O: File ID %P,%P file number check%N%VA36 Input device %2A%O: File ID %P,%P file header checksum error%N%VA37 Input device %2A%O: File ID %P,%P sequence number check%N%VA38 Input device %2A%O: File ID %P,%P segment number check%N%VA39 Directive error - %VA%N%N%VA40 F%N%VA41 I/O error I on %2A%O:%NFile ID %P,%P,%P,VBN %P,%P%N%VA%N%N%VA42 Verification error on %2A%O:%NFile ID %P,%P,%P, VBN %N%VA43 Bad data block on %2A%O:%NF00]^TADATADATADATADATADATADATADATADATAile ID %P,%P,%P,VBN %P,%P%N%N%VA44 Mount reel %D on %2A%O: and hit RETURN%N%VA45 Starting verify pass%N%VA46 Resume copying%N%VA47 %2A%O: is write locked. Insert write ring and hit RETURN%N%VA48 Input file on %2A%O: will be resynchronized%N%VA49 Output device %2A%O: full%NFile ID %N%VA50 Output file header full on %2A%O:%N- File ID %N%VA51 Output file header on %2A%O: not mapped - File ID %N%VA52 G%N%VA53 Failed to read file extension header on %2A%O: - File ID %N%VA54 Failed to allocate home block %N%VA55 Index file allocation failure %N%VA56 Output disk %2A%O: is not bootable%N%VA57 Invalid bad block data %N%VA58 Bad block file full %N%VA59 No bad block data found %N%VA60 Output device %2A%O: is a diagnostic pack. Do not use it!%N%VA61 Code B on %2A%O:%NFile ID %P,%P,%P%N - VBN %P,%P expected, %P,%P found%N%N%VA62 Code C on %2A%O:%NFile ID %P,%P,%P%N - VBN %P,%P%N%N%VA63 Code D on %2A%O:%NFile ID %P,%P,%P expected, %P,%P,%P found%N%N%VA64 Failed to map output file on %2A%O:%NFile ID %P,%P,%P, VBN %N%VA65 Output disk %2A%O: is too small - %P,%P blocks needed%N%VA66 C%N%VA67 H%N%VA68 J%N%VA69 Input tape on %2A%O: must be at BOT%N%VA70 Wrong input tape on %2A%O:%N Expecting "%VA", found "%VA"%N%VA71 Code E on %2A%O: after file ID %N%VA72 I/O error K on %2A%O:%NAfter file ID %N%VA73 I/O error L on %2A%O:%NAfter file ID %N%VA74 Input tape %2A%O: resynchronized at file ID %N%VA75 Tape file "%VA" not found %N%VA76 Expected extension header not present on %2A%O: - File ID %N%VA77 Code F on %2A%O: after file ID %N%VA78 M%N%VA79 Index file data not present %N%VA80 N%N%VA81 Volume summary data not present %N%VA82 I/O error O on %2A%O: - File ID %N%VA83 Bad blocking factor%N%VA84 Input disk not bootable%N%VA85 Input/output disks differ%N%VA86 Bad LBN #0%N%VA87 Output disk %2A%O: may not be bootableDevice not readyParity error on deviceDevice write lockedData overrunPrivilege violationBad block numberBad block on deviceFatal hardware errorEnd of file detectedEnd of tape detectedEnd of volume detectedDevice off-lineBlock check or CRC errorIllegal functionInsufficient pool spaceHandler not residentError code iss s8sNsis}sssss t,tStstttt u.ueuouyuuuuuu/vuvvv6wuwwwwx\xxxxy4y`yyyyzDzkzzzzz6{{{|L||||||}?}m}}}}6~_~i~~~~~&H[AAAAAAAlAlAlAlAlAlAlAlAlAlAAlAAAlAAAAlAlAlAlAlAlAlA"BA"BxAAAlAlAAlAAAxAAAAAlAAAAlAAAAxAlAAAAlAlAAAAAAAAAAAAAlAlAlAlAlA&   `@ ` B   & A @    &  m  f A N  %&f f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C &ff 0206402064/0 "*:*2:BJ2:BRZjj00^\N0rK XXXXXXXj?N98k0e0i#:.7 p7 7 7 7 v 7 7 h 7 ` 7 ^ 7 ^ 7 7 X 7 Z 7 X 7 V 7 T 7  F5 ;W55 5 FH 0FE V, >F@5 L;95 6, F0 ,, 0;54 0 500^^TADATADATADATADATADATADATADATADATA 7 <U   E5N EFU@U<5 25. 085j 7 UV 7 7 7 5 E dEwN,2UFDDECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJAN00^\NXX"= BRU>          (  D  `%N%VA%VR on %VA%O:%VA%D%N [%R,%R] %X Tape %M Disk %M . Press "RETURN" when done%NFile ID %P LBN %T.%N%NFile ID %P,%P LBN %T.%N File ID %P%NFile ID %P,%P VBN %T.%N%NFile ID %P,%P "BRU -- *FATAL* -- BRU -- *WARNING* -- BRU - I/O error code w 7 P D7  54E 525 "XPE,<"8%" #E 6U"TU00^^TADATADATADATADATADATADATADATADATA v7    LDND  4D6D|D~D 7 ! ("! "&" x"  C -" ѕ"D w5 b ~@"5 I" "7 ` V! "DҜ7 8! ! .(!3" !7  <" !7   ! " r!" h!7 -ߋR"P Е Е 78 4#0v7*+"! !7 ^w8 ` TPN" @%6 2 ,("p"! 7 7 7 w485`w %E 7 82އД  D  ( . W   " WAɥZы  &fRʋ  ҋ% BOTBPIBRUSYSBRUEOTIDINDEXF.SYSIOMFDOPENUFDRSXVBN,9^w~W`z}K# v_RuL`;Jm9ahw~WJm9a)&pt!w:<% N t!w:<0  \C^(}""` \C^K(KQox# v_RBx@}[MDv}[MDv`ԅ}[MDlr}[MD"h)""`YyHq&o~x%e}&i'XmnL9v<I qZI9r<R qZI9r<W8 kM}X:""`8|X88? }WLH!8?}Ѕ`z;rz`uqE_sp{DvWoLYZa\gIv,{Dlr{DqE_spmy&mnL9XkLe \C^vat!^t!^UNEX"` H}`' X""`K"w:K""`K"w:N`:w:""`Iqv+a \C^v""`Iqv+ &""`Iqv+ &2! =rp_sp""`uL`;# #t!w:vK%K/ \C^K&Hl"Iq_sp&Hl"ZI9r&IIquqE_sp&I} uHZZ ^K&I!s!NJ"""`&I4K`H fwL&M 'K@&N`' X2l*"h)""`2""`e4B[MDlre4B[MD"h)""`e4B[MDqE_sp,:Y Kw^z`)&pt:#&Hl"Iq_spt:#&WqE_spt:#vv,y:i~LQt99#"v8Wp`8;8}@:`8tvp`8:`vLT`fM+:`M sZL"K69#"_a\gUN@:" ""`:)e j)R:)!y;:)r}:)5OpMvQ1ZqQ`&Iv`ԅ4REplr4R""`R6x+_WSZSZE~pWE} uH,]a w!@~Y \C^(}&FaY&8"' XY% mnL9|X8v +-LqZZ ^Exss:`L;!@~Q]:FQ%:va\gxxge!X[qj@5aYs:)h;?WL 2@pm}%:dF%:lvKq`?}U  D  : 0  7 Z Em:7  % e@J ", @ 5V 5x 5x NX E` e .5 5 w5@ |n lj5`!5V ~   le1UH n۷ E@bۇ & e  R$ R$ ˉ դ5 0 tw(5@ w w 00'^\NP,5h r  4 4  4p7 5"5N J>50 2e@) e R$ 5R$ ˉ5 \T HЇ5 EE 5 E  > 5.77Z7 V & )7ѱw 7 Xdр D  llC  4+le  DE a@ e ѱw 4`t  x&4e "б2Ή[ ww  vC C`ve AE@ w`JB L00> @)e 2  ,ח,  , ,  e ww &f& f R@ee . " ee    e 11+e  trel5-\ -V 557 <ϡ5   525>U0z 5(U(d5UPN 5 UH2 U*և* 5U@%H#%p- e%5 bΡ5~  % % % wdM%w#@%w-8    U\2% % % K-s-s-% s-  %  s-  e55|5VR$* 5tXv:  : e:e v:Z: 8e : "!  e: e \ w P%NVOL%M. %VA%A%VA%A%Y %3Z%N[%R,%R]%N%X 5 D 5 x5x (5j \ 5Z JUJˇwɊ)7 7 Pd)tUdOzIɐP)7 7 P2)5J5@5B5> U7lw 7l 5v,5@n5d$5^ w :< 5H5@w ,<  wJPw ч%N%N[%R,%R]%N%N%X547 |5lD<< 4 wP%NTotal of %T. blocks in %M. files%N$  l4 %  e  * w f    ! aW ef eM  ft \~7 j PTFТ·e _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM *** & (>R 5@v$L> &$ϢώϷ> ~& E V7f e 7ELH:π5 \ \ U5DU@> 4 56 Uf5U@ t 5TUJY7 Ծ55 z ~ E@EU b6A~5 ,Ip5I`  5)  5 v=7 7 5ӼӸ ~ 5 $e5U`  E E7 ƞU<NξƲE( : ` )75 )5 ) )׭Z :> )׭6 .ۉ5T%5HU`B E 8E07 whUhzEN `͇&& d W c W  5 E 5҉U :62f 7&   wŇ  @ B   5;  l V  H  EeL77-߇V 7777   Rd  ,p ^77 H 6ć  *  + 23E Ew    Е-   0@A W e`fÊ    E  w  ť ť 0B * Aaw N ' UD$BA ` &00/^^TADATADATADATADATADATADATADATADATA( U BQ Е*  & & @( f  e ee e >/N/b/t/$/ /v..... . . // (/6/:/' ' ,':'J'X'f't'v'' '''''''' (( ((6(D( N(^(r(( ( (((( ((() )*) 6)D)R)f)v))))))) )* **$*4*D*\*p** *"***&* ++ +(+6+P+^+ h+ r+v+ +++ ++"+,.,@,P,d,x,,,,,,, ,, - -<-X- b-t- -$- --"-- . .. (.0.@. L.Z. f.ABDEFIMNOPQRSTUXYZ<>=MXd^)JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw :&& D¥%  B&ХVA p C ed!  aeNb A  Е%̥V P Е Bf  & e~B& ej;& e$6Hŀ ȕ  nЕ Ћ  Е Е & e & eЕ A %& eA Е Е A A   $Е.  AЕ;    A &EA  HE 6Dw PD&& bЕ- eaePPPЕ-$w D  &Е. ce  Е:   B'&1 lM` lMb lMd lM>b |lM6g tlMbg llMj dlMs \lM>w TlM4y L~M` D~M*j <~Mj 4~M"o ,~Mzn $~Mv ~Mx ~Mw M M( M$ M M M M M M M> MN5ew , Bv    5Bwn 5  (5(UW       wE5 E  W ͇5  ,E  ZMIKKJ&w@E U &W )& #  4 &9U3uE uU.5`.U & E& & f&ËDef Ë )̋E U&  m  f A N  %&f &   `@ ` B   & A @    &ff @NlMMr}(`@ZM~MeIqM6`ZMlMQpMsMZMZ]MF-MMFwzN]*MMee4N`m9`~$$h` 05b$0_p`ҳX )дʴĴw(:`= )~xrwW "HE7"DA%U ĭ U E/%+UE $"UF*$EOBF# 5pwwN5 `E X5@T5 HU @ Ʋ\5(  -h`-p` ) ) x7`r\a &56 L@" H.w$" $w5pwZwnֲwβ )&P wwh )e U777 xw R5$blVUΫ w5v ,0 4Uw_i c"75<" U5 5 5w\w pP T5 n5ޢw@7 5ĢU ptp n-jP^׭P%JB2aU5\ -b-^-Xr  %Enڢ`55w]5wPU$ >5 5ȡrUm5iEdw Vzd5<5@ԩ#5 wU̩<D.5 b ׭7 7 5@w` $%!7桫 wtUL^Ρ֡ \į&%#7<5@5 Р$ܞ P007^\NP7`5Sw~5 5U 5ҨP @ 5h 5   5J%E5 :M54 EpE f U^U Vw5  0 5ޟ5@(5ʟU505w ZЇ ) %`<Up. <"5 25  Uxb) Pڭ 8@̭ rEN )ȭ  熭 -P(tnf׭V%P  04 U0 P z%HD~%R1~4%R2~4%VO~K%L1~GҞ5 -~ >-~:-~6  )  ) x p )P \ j~  w@5tAVR$ 6׭   >P $%V1}%F1}B   5 xR$ U 5@R ׭&  B z 4 r & d4%P.%UF} [  7_P n jҪ7[%EO|n%F1|%V1| ؁  ^|||  ԩ5 Eԣܩh쩲h5l U,6 9!5B   )ީΛ` )%75 U&U@  EE%A5$5p 55Ԣp7 J`6 U )6U wmBw @5 PE~m&w $&fr w` w ^ 5Je0m^w 5@4 55ޙ5ڙwbE B5?UvRN Uԡ5Ρw )E`  W%|U  )E  ^%hZEvԠР pUV5Pw )E:Ƨ 4 %=U V )E  %)55-̇-LJ5Ҡ5ʠ7 Р5 LE UE5f5\wf*EFUU |Un z :E ZEVz zEBwU@8 E@.zwj Eڗ5җn5ȗU5}U  t5E ܟzh0n5ȟEw@Uw65jUb rUz 6zE05,E dwU \ h5@RJ0 笞E8/52 5 ( ,EU -E̖U  wj5EU LU؞5ԞE̞ F  0 U7 ž5j5f'5 )E4  w5t )Eb \ U@V5U B wĖ5&NF͉ ҕ&5 8w65!5e8w 2e0w *-$&- 5 55@wlE&7 FU 5w5|!%(&f$    Չ00$ wdUNf &5$%UFu%HEuωt zoEfefE ewZ P։Z%DADuT2Ef   B!e777 wa7ؔ7 7 :׉7 zrss f& & & & f& & & Ε  E #eBae5e0e0 w%(w $ 鉀5E5U5U 5Um54" ) \ %%w&ē֓碚E.7 6 )熡xف%NFile ID %P,%P LBN %T.%Ns ^5|5v 5@ š֚>D:@0z 5|5*5$cP 5ww55 7 7 7 z7 x x z 5ʑ Б̑ȑ#  %zҔ 1rP5C5z? t8v=  b/00bzRRR,z P B&x"t|z *   P  T  L-P%׭(%00?^^TADATADATADATADATADATADATADATADATA  UP  dT[eP Pe r:eP ^eP T P5D5<V R$  P  5D( _eZ=$ "^Pv= P%HD%R1bz005&0z %HD %R2&z l X5Z%5P5F )¥E͉R$  )#׭%% 5%[5@ޖ 553Ȗcz 5 D =,z P5 ($ '|z `\ |z :6    5ʍ lP beP XFp\zU@z%7|7z77,zP$   E  ) 7ۉ0 w77 7  VU< (a   AP  n%P 5 %  8%PZ%UF "%@ R%UF 6 )W waVOL1BACKUPD%B1111001001 HDR1HDR2 00010001000100 00000 00000 000000DECFILE11A U0414404144 M 00 EOF1EOF2EOV1EOV2 ТM ТM ТM ТM( ТM ТM$ ТM ТM|%NBackup file ID %P,%P LBN %T.%NRecovered `w Nv7 x5 ܭw-\5ƭRPV N -vwpU mf4w .&` V-NNi  Ҧ w펣  W!f_@_ `%ģ`D` D``` -HD`m m5`m~w x9m"mj5``e LHE@e C C` fe wޤ ֤ H---e w -ޢҢ-֢ʢ7 Ƣ Ȣ ¢w ԇw ~  `7 D-\E  * ^7 >77a e~wmtw ԇh  55f60裱w %7^7Z7 ң 7 HU 27>7:4,0(` pn扷 J eew  & & & &  w`& & & Ε w .Ӈw `V` & & & & f& & & Ε Uw ҇- ΢ Ȣ v C C`e   E `D 7!̠w!Ơe xr jҠ햠 @  555@ʩw50U @眠,,  U|5vw:Ej 4E^wbET \V؟H80 L皨 6U5wE Ew5 =E U6`2\EŲU ĨԨU V  |E E~wXU@ E@~w@ 5*\5 C5kU<b ɶ~Ξʞ5.E&wUw V U~ ~E| xwE ا x5@ΧJ \ n(E/5 5 EE -EHE  w5pEhU `ȦUT5PEH  ~U87 >5,oo5Ğ5 E w 5Eަ J w5@ƦwE& -D> c.* - mUF-mHE-lDA-2ny(5bw5V%(&f$    Չ00$ wjUf &5$%UFj~%HEb~ωt XoEfefE ew8 .։Z%DA"~T2Ef   B!e7v7v7r wal77 7 z ׉7 :`2jlj D& & & & f& & & Ε  E &eBae5Фee w%UFhUB4T wh5pwZwp75Vw wwĥwڥ50 5 (5"www ,З5(5@@5@  U,>p5 Ζ7 "5@Uwl ULH<7<,5@Ξ45 0$ 5  pp5s7s ܔ5777̤7`w2 5`-5 b5 2 5 5 E U w55 ,z vҔ55@̝*5ȝ:Uĝ50b 5Xw Ƈ֓ޓ5./5 j ʓ55!5UD~@7 7 ޣ,ڣ"5@  U@ ړrj,ʓE Ҝ EȜ wUƜj`R ׭(Βf^  箒 L Lw%UF t%HEt%ADt,5:UxؑΑ L -p  , 4 4  t7 n    d  Eet V d  Ʃ©--kx5n555N 5$r w$q 5ʑ- "q0(6b($7 ( 8@07 Eܘޘ֘U EvĘF% e F%H %z 7n7 p7 TL 2ef܏܏ ԏ w`̏7 ҄7 ~zhhdd5|PTLPU-P P  ]p ,V51@֎ V ؎" W,COW,NT e w!հw`f Á5 ew hЎ~̎z `缎E Ɨ \ :5b5% / 5 )%HEp%ADp!%UFo 5 p%UFo %HEo%ADo    Jef  w` 7`w E܍؍΍ԍʍčzv>BRUBACKUPVOLp5j wwHh )e Uv77 T5` ET\>hl2hw E :7 ҌΌ5@*  55@  D 7 ܌5:5@6Ȍ`X T, 7 0p:n  f.,*(.,vt %@ 2U@lw ڽw ƽ55 5@ FVRj55, CO,NT(  ~,ދ  * w :R$ w UU \7 ܔ$7 U` 8 00O^^TADATADATADATADATADATADATADATADATAR  P  ݮ 7  ݖ 7`  ro@`  f  we-v BwR  0 " &Up ċЋƋҋȋ  P P *mme7 7 $ZV P pl7jefd`ZT *w$ 7 2]4.ĉʝ hd  舲7 XEXw ƺ ` e v V"R 5U@55652 N xtl`h\ LDբ & Y5 7 Y  pl T Pw ȹ Ɖ5  R  T·ʇ Ƈw 7 5ʈ-  򇠇ew Uw \&  ̢M ̴M ̴M ̴M ̴M ̴M>7 UtEnԍЍ7 EV E8 D UJ!r!r! r!  r! U e > /4,j(bE@ hf\\  $mȌ ڌ>5v*? ܌t p E\555  + U7 ą wEU  w%pwwTXPL2F e5، e w%z %5e | 5@E@w 7ބ77E^7 7  " Ą܉wn7e ^7,Z5"S5 щ5Љw.5Ӊ7 pU E؋887.&"  55x  5@wU~5z, ʊ mȊƊ  w~E@$zvڃ؃Rԃ ~ ݉<P^HN Dw6<2@-. $  e5b %%z %e w5v EnȂU`-5^5N5F e 5,5" 5 4U d-ll.5 5 5m 5ډ5@̉-5z5 %DA.PE@ Ј7 ځ7 Ĉ b  e׉w؈  5`*, " ́ʁeā 52 Љ ,5Ӊw5щ5.5 5#PfE ee&f R Z B5 w  `5  5@wU|w5t w҇  h w&-w N5 5 5m00 *n|h5 5  w jE0U ~ w f5@~6~0@RRreE@ U U@5 R5L 5@ Ԇʆ5n羆ն މ v J5~ 5 ~m6:w 45~ $ 5 5~5@  5 5 ~5~5~ 5Ԇ 5~UĆ E p7h6L RP7 ̅5|w~wh̅ʅE  U%~ |vww5(E  e| Zw~P`~Uw5 }5}w#w D $w Lw#5} #w $ #w#5 j}5d} #w# #w#5 w  ̫w 50} # #5 }5}e E e  5%z%r? l 5 |5| Rw H 5| 5 |5||m„„ ʄȄ --  5|yUDU@mFFz :5@*-|z5{5 %DAJE@ w t&&R( UЃ:5ƃ00W^\N5 0 -5R{y@5B{ -ނ-ւj f ww 7 7 f E `w ze  Z)Td{5z5z  `%Z   7 {7 Ɔ{D{׉ w HEADDATANw   5~5 v5 *z5$z 5ze`e07 58,`znn-nhjE !  F``V 0`H V *R707a6 .5@΁e"ewm  55   22e55 ueef ryf!3 ` !5 43 df)%`  v7 p`y`  X5 5 w Tw >*$7 "U    7 dw^ee 5 Rx5Lx 5@x `5j00ժ0 `&  `e xvzpB ``ޏ^VJFD ^C7 dx:77f*4x7 x7 ~ x>x׉7 ވҏ ·& & & & f& & & Ε U ~ wew~E D7 ~  w`~e  & & & &  Ə& & & Ε H~H~F~-LD %w N%NFile ID %P,%P LBN %T.%NRecovered ؏ 7 5 r~5 v5 d~wp5 v}5 >~ 56~e U &~q q, U ~7 |7 zxvv-B}wht dtxbt$}Zt-}wB7 87 64v2 6U} | e q q,   ww ڥsB s @Cms s-- s@`   -sw [u@pw<jd d \ Xlt(u:u|N2uJ.u.u{؂ t{ t{u5|tU@|쁤s聠sss|s|ssePs ʁƁ *򝾁er$s$s 7 ~t7 s s7 rjtrresm~|smz|s5{E{5 s5~s N ~tZs @Rsrt {5{wPw5 Bs5{ l .`({7 7 7r7r7=r 5{  \`Ez $Uz5z5z-Xr,r Fre@r:re4r   e72ry5z $rrr7q7yrzw5fz ^5ZzwPw HzwX <58zw5,zw"5 zG7qEzzUz5 z*5 y&U@yXVqNqJUy <65yVqwEyU ypp2q 7`,q7`$q5yBUy 5|yqwEhyw~ ~7~  ~]~pphpʝdp50yE Op pJpF E ypppp7pwn5x-vp Ux bpbp\pXp wew85x= /  ԅ  }w!} pm}b } r} w} } o o}]}mop 6 oo}]}o*xow5xN5x^ʕeʝ1ononoo5w-joQ^oZo\oXoLoHo,p(p pp b Ewʝn2 2 oo5w1wvwElw5fw7owJ owBNwonE"8w5 U*w5$w=7oo  W D E E m 6 Z|(}V|$}` }w} meLUvLP m o- oo*w% "w-nvn mdm]bmw ^m)VmeNm-Jm @m-uw  zm7 dt l jmR{lN{l7lRm8t7 6t7 Jt >m ̛ 6m-la. fa jl`m XmЉUttTlsPl"tLlEtz]z    7 kkk5`t%kkkkkk5 tt-rkl  ^k`k kZkkRk7 k7 kyy7 Bk M0k4k,k0k"k&k    =eB py hyw5sw k jkjkjk5 swJ5@s00_^^TADATADATADATADATADATADATADATADATA> Xk Tk LkJkj>kj:kj0k5ss5 @k5:kUxskw ԛ  7r 4\` k E e jj * 5$s 8j5s:j1 w ~nkw"fke ffV\ wjwj k  e w 8rꇷ2r7 x  xe 5@r 6j4j*ji&jiji2E xrUvr jijU^r i `iiwViziLipi w5@2r 4ii0ii&iii i  CieB 5q5E@q5 q hjihbihZi h"7 h 7 hhh hhhhh-hh  |h~h w vhmjh=hhe^h-Zh-PhTh  @h 6h2h,h$h$hh-hhh h xmh=h?Mg Pw gw geg-g 7 gg.v*vmgr  g-gg uumngr J t$EDNp5 h5g|oxo U@"p5g TooPoo5p Eo  Uo  Nh . F(H*J, d5zoU@rowuzfuvfՀ UNo  `ee   `eѕѕ ptnt ft bt\tXt0 f 7ewe7eweeee  ҕeeN e%%J L 7ze w &reW   \edtXe`t NeVtJeRt cscr Ҡw 6w  w $w  w w   w d7 k7 kdwdk d ( ddl5@lE E2l*cZr&cVr pw& d rd2) NdFd5kr&VQobw @c ؃ `DA!  &c` v bw ׭bfbc b W!? e@ Ub ,b  W D E E .a ovporp`npwhp aeL Zw f ÝaE aa  BPaE E E `` eL  Jaw Da w 5vi, 5ji& n#7 o7 o P$nn-nDX F D tU*i5&iUi|nhh-vn  njnVh-dnObadh |E0ha4 7a hn  n5h w(7&e0 5 \`5V`=f&& 00"(&&  v`N 6,   p` a e % % ewF5he0B `%      7`w Jw w(  $(    `` ఐ    `d % l  $)7_e  $ ($) 47_e_ h `A Ae  `L $)& eP %wf l7l7l05f $ 7l 7`lw l _  ~ml 7 ^7 ^ w^w T^T T  w w7 ^.^w   `d $) A T  A @% A ``` ` w  We0,a  C`B W  R C`B H  Cw  w!Aapp&|j0 e   ^j ] ]  Tp pmH p m>p  6e -.jw d]`]7 i7 Ec?5 |di,i 5jd\iU\dmci%iO& ]E waiw i  5"d  $|\ Dc7\-\Z \R5c\\\\\e\5c&VQ00g^\Nw $-$\(i 7iwi5ceiwib\\\E B!WsSe8\e 0\w ڋ5Zc3, &`D 3 3 D  Kӊ KӊSe[#a#c[$ ӊS `@ e [e[w 6(e w[ ! w &KӊSl[ HȊe Ha` H7V[eP[ g%gO aw 抇w Р(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA 8EAa$ 4lMk ,~Md $lM(p ~Mg lMo ~Mng lMXn ~Mf lMTs ~MJ|5zlv=5tZ-z-DB9-DM5-DR1-DU-< z-ړDZ%-ғDW!-ʓ|--z׭z%׭z-zzU-vz׭qz5 ^zFZzB7 @U$&7 U7 ړ7 ؓ 7(5@F7V752eeST ʌƌ5J 5$7$5 ؄,,5ʄЄ-7-Ȅ5.e< P 5 (-d |- p6$2 5P7 7  5> 7 5,5$84-U ȑƑ |   nw,W 7w> măe5emmwxv(5 dW cW  N-xN-zN-pN5Lw ؋ e2    ~ _EeK x eK V0 hd&  -d , 5‰&  ʐƐ 6f&f "ɜ n  Lĝԕ b Ίĝ Nĝ @Se~fEbN -~-x E /f& N N  %6  NW!W!%%U%  wz ȎrĎnF  l e^w X  `  w;7 W ~  f U%E   qA `   W  1  F  d , V N   %h7^rȍrčn r   "$  b  E w h&  ~ r ҁ JF L`d wD oq1 qA ,$    % peL  pw ЯJRZbjrzt:#z xQz kzNNz*O:zt:#zt:#z kz Hz7 U\X w~ hew  jތ^ڌZ-6    ކ <~m me5le7w~ zxt   eZw TH  e@w :  xe   fd `^n  P4 P L e <: @ |S 3ee@  H w 8 يŠ  w` ^Z    w& 54{  & T   J UU W 5%e " 6. -  55Xu  5{  - 6D Daee T D Da -(- %-%! .-ԃ΃ -5X -  - e &  S ee@ 7nwljw'  W D E E `w jtѰwtQz9wl@ @ d NJB `@w : DMi DM/ DL(( DLP( DRD/"" DRav 22 (DR7  DR/ DR`7   Œ ҝ7 7 t7 r-DU `|rRyNy>y00o^^TADATADATADATADATADATADATADATADATA:y6 -Ne-,-&75LBN(s)=55iUx7 7 Pp}=L p F   V 2h.h xw .w ګw mwPPHw w w w w ğ nE @n5n n5n   S5 n {  n5nw7a   QT l5nnUdn l l5Tn5Nn-|llvlllU@6l8lE@(l5lw$X : h7l  ewB5kw X  @   jUtEkA5kLyPX5 kAyPX 7k  7k 7xk5bk"X xw Fw n7Vk b7Lk Urs7 lz͉ wv5 k  3 Pw k     @jW,w` ^ew Vw  7j5jUjXUjXX׽Ʌ JZw`<Cwh5i-2he-(hF׭z׭s>vepnwНlwȝdw `w-^wMFUq H$&5@ji5 bi 2 -0wMUEJi- wMU U6i E*i 7 ie7 if7 ib׽UJ Z-g geW!Mu׽0" W*  Tf ,M W*  4 u 00Ћ` 00w^\N ׽>W*  D% T W. W* @ Zu  W;  W*  5 C26 =B  B`   C lh*f 5gpfpL7 eZ68:<>2T W(  W) iZW: wg X i5fU fg g wg B0 1 . ,`*`(W.w xg  wng B0    `W8 W9W- w 8g  W0W9 Cwg W#  B0  e ff e U  %ee e`u W.   5,n  :  SӁ ԋˋ vf W( & W:HW:D &W-m Hppe eXUUUW-Q V EL dID0㕀e:UUW   e < (e e & <W:  <  W) Z Օ0 uU@ ^f (W!F U CBe`J& ȋ W,   W:weG  $7w  &7w׭4r!-r(r``- &az ȕ =3 /:,+-) 7 f wfe xS   j   `E    ` Eew W0WZW9WA &ȋPwFw n(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA ֨EAa$f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ0נ9נAנZנ_נ:  Vנ[ȕ]נ<ȕ>ȋ8 |נ%נ*נ-נ.נ0נ9נAנZȠ |נ0נ7נ*נ,A lȠj h  qנ"A   #A cנ$נ%נ*נ0נ9נAנZנ_נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (wZנ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C N<'XXXXj<qk lVb7 h7I7J7G7D7<7979 \^XZ& & A!?mE7 7%%% tf w7  %DYP 5 x7up B%DFhR7 7 cw  "c8w 2  -4e--$w  w,   77  p7 7 t b   mVw J 6  v ew   '00^^TADATADATADATADATADATADATADATADATA Е.  t p  ZV 7  d@:f  %DBE   --   ݸ   A B e  Cd '  BAD>P(m۶ t x DMiB DMB DRD"" DRa 22@ (DR`  DR  ` DR DL((( DLP(( ???? & 4 l !    7:  w  bЕ.wp & 7 7"$  m7  Е.mwFm e@ -`-ZP2 % C%DBHEv  ><  & PНН ( Е:Е P "5 5 uЋ f%>7r Pf `ZU(40 b f`!   Dw$ 2Cm w& $wN!W@ B C e(7& B  7  77v vwfW! W# E-Է-з  !9 4eB !VRmRLw FB e.w (  UV   ,    ,[ New mw &R%  RRRR% % nwAE, @@`$ Ce@ 74w2 f   BAD -- BAD -- Syntax errorIllegal deviceNot in systemFailed to attachBlock 0 bad - Do not use as system diskBad Block File overflowUnrecoverable error - Write lockedNot readyTotal bad blocks= 000000000Handler/Driver missingFailed to write Bad Block FilePrivilege violationManufacturer's Bad Sector File corruptis an alignment cartridgeFatal hardware errorFailed to read Manufacturer's Bad Sector FileBAD -- Invalid switchBad block found - LBN= 0000000000BAD -- Command I/O errorBAD -- Command too longBAD>LBN(S)= BAD -- Invalid block number - 00000000000BAD -- Duplicate block number - 00000000000Bad Block File not foundFailed to read Software Bad Sector File Volume label incorrectHome block not foundFailed to read BADBLK.SYS headerBAD -- Block already allocated LBN= 00000000000LBNS allocated to BADBLK.SYS= LBNS in bad block file= Allocation failure  &, - &wpw7 󷊑󷊌 % wnR `   v 4 w7J0@ -" % "  lȋ )I D  J 7 w7  r A $ Eew -f-`w* 000^\N :7@ Dw & BwBw>&$ e .%  (  ()I ȋ dM   ^%wL   e  7t7n4 X H w$XZTwdJF :\  @Uw P - TT ݴ  T B҂ `fTT ew$ DBC>E37J .¥:  &  W"C fNl fD`N %7! 0 % Ҕ  &@  Е Е 1  A 2  Е:      f%    0  a ff a Q % %ea e`q  ¥#Ћ ¥.Ћȋȥ ȥ ȥ:ȥ,Ћȥ ȥ ww Qew  欸⬴𷋨 - w`w  cW t.ԝԊ% 4 e"7  cW te%Uw  *  + 23E Ew    Е-   0@A W e`fÊ    E w x' UD$BA &( U BQ \Е* &37 &fw 7 7 @,q `-KacJE[ !m@  ) L R  j7j f@  &  5]U E( :&@E A  ̆  E vE c  @  . &f     8  " .$ B  8̥ZḀ90     w 5 funhj tuhdB$ 8jwaw< 8 v8w &  >*AdBbAep& f   P aAAf@pnp TC*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* v*`V @e,w "jjlj ɥ@@aujk,bp 5f fˇ ȕ :‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ Dllja!CeH###33@# & 8 *tHw  8jDl@ TeBT85l@  @( D HeB& # : An5j)f & 2/      RՀa@LIOVRMANUPDRETRYLISTOVERRIDEMANUALUPDATEPATPATTERNALOALLOCATE҂҂:/FLRXnFLRXtt^^    :   =‚ :† f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ0נ9נAנZנ_נ:  Vנ[ȕ]נ<ȕ>ȋ8 |נ%נ*נ-נ.נ0נ9נAנZȠ |נ0נ7נ*נ,A lȠj h  qנ"A   #A cנ$נ%נ*נ0נ9נAנZנ_נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (wZנ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N00^^TADATADATADATADATADATADATADATADATA{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 e,%;''&  m  f A N  %&f &   `@ ` B   & A @    w *8I <*=)98  eB &&  U **e *Nlv ΋*.)  & #!)&eP(e && p* weB  8 T $&w p* F  w T*D `  ww 6( D  8#"#)%ĥ ĥ w 0 *0 @Q$    0 40 60))eB \  :# & 3&*w #( P) @#**fff >  &*wL. P35(8e$8w22&(e %p8q #) *R*)@#0l C# 028 00ĥۇAĥĊ  000 < 0 @0 &*0 @ u D# eB&B pB T *  eBe>  # #D #&0 #   0@e 6@#040 6w0!p2w   ) 8C * ) *w* X ep p  C  =  0* = Eե^ A e@ ߇ Ep p  8 V *`)w ^C#    D w B(B C DBe ?D(1 >&ff w *) H* w46l0w  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C 82e&( n0 0 0 80 B0 0 0 0)#0.0+1(e  \%&p*w f( f)f |) .  .8Ae f"( UCɗ&+(e$&% *w *#   U@e l  e`w1  %,,  w &*D !UqqC ӥ:  Ce    *w *  )Ĕ%.&%;D  5)5@DD ͥ*Ce xa%wUX5@ 5U U*U  5@XU@5 U*U  ʥ*%C!.D` J*weC5U00^\N5  5 5@e*w ,BC "& <SY&*p0p21E%0*w(*e "f D CB.E141612epl2l0p xMw    f Pu   e6p 4 8 j  > Z  f t&* v*. 00l  0 *w feE D` bl lrw "  B eE"s    s-  Csl0f(& e %&&eH U   Ef p  wr *) l0, *) $ )*)0,40,6 8  ***  DP5R RRR  6 p 4 0`p f 64 `46  $e*w ) !f J $ e) . e6p 4 208*w(*Ge(  1 5&e  1-1- 111 rrrrr &  Be X 1 w* w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@,*1 U4 6w Bfep`pw8e2 0,0, f 톇,, w (     .%  eB U5UU 8 plp & NeՀ)*f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w * ҥ[, &]  5 s  D w1 z  d 1 1 1 1 1 1 DEee $ $ 78 bD 7 5"5,7 \bD7 J 5"5,7 Z bwN VwD  \wP5YmV 5%G`V  R m  e E@e B`  * l  b0 hJwEp     R` w8@     m*E B`eEJ  )p fbCw Rb % Dww 7|w  Dm PP&@A  @mE Е:& .  ¥8¥9& ɋ=     f& &3U#U]RO_tS _"_$-{fXu~ZDF\G g^H\}`J beĊdBxfC h6l;jsl-n˪sp#rtvAqxah zhh|lh.~phrR9Tz}x@(ϫxdϫfѫO ѫBxѫ00^^TADATADATADATADATADATADATADATADATAxѫhѫa Zfl.og,hFxZӍZȸ@κԼھ@:^&CE(=&*D:,e.t^0v2v""4v?T68r8|:e<쩔>6@6B6ԀD74F7fH7&JT|LTNmQPqZR[MTz}V'&1 *H "@  $   # V" B B& B^( NH N Nd! N$ N' ZP &H V# b b& n: zn r20 j,0 bh0 Z0 R,0 J8 B h8 : : 2 X: *"; ":h85ew , Bv    5Bw :i5  5U  E U *5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&ff &f HzH H HB$"%"**"6,".H N5Hp Zb#&Jf#&Vh#&2lH<nvHy,0y,0dz|,0<zh8h8< :::h::::h8` h8`"h8\.h8:h8p R闠/cP`R]IZ 6闠=U W PwM J d E| Lw Local TI: - Global ȥ=7 B7 @ȥ/$ r5"TIlJ .j=g  [ t M:T Q/NGKBHLE Bb7 ,  eD87 p |Jff  7 0 b TI00^\NJw 2& (f  55 7" f w  f  w7 8 NPPA 6 Е:Е ffD7 \w N BЕ *΋8 ֋7 "wr    @A¥Z w <7 7 %7   J %L wx $ x E (&&<(&&X2-H,-D)̵ & $ #-@  %( X> % e%JwwefR( l   T *eH w*77 & U Enter filename: . zSYyIM T  wwH pfCfph F1fȕ  8ww et DR  HZ# N &  V %=SY7 : B 7,\7^LB: B 7,\b7^\v HD  # Pww $n 2* e   0 H -w>#0 7 e e\ w  B* b&߷"p d  L%5R%^>w 0 4"P1eEC` 6J`"e?E?JM J`*n w %p7 jf    J HwTSMHRSIUIC#  & i# tt/3 \0%9" Q @e:NW K UW ;E¥:B UW ;<  j /u $  # *)e !"[ uW ¥,  uW ¥]> =wĝ! "&fj 7z b0  ~R 7V # E C @  ~ p Bu`u 5`Ce    pl~%  u`u 5` ! x  z P Pb5cu 6 2 | $t-t-^   8T!r7H (BA Tu5P  ~U#ˋ#A B  u 5 & f  ~& v z6`N 20 ,0 0 8 9 h8 h8 ; "h8 .8 :h8 Offline Loaded UnloadedCOMDEVDRIVERDYNAMICMAINSUB SYS TASK 7 7 7Х:k h    :w w- J  wbD  Pȕ 3!f&7 6 ( H d55Y  FQ  8 w 4` bw wF - 5  5  $ Е A Е   .Е "  Е  z-  x5 H- ^r5Xk5  JЕ Е-Е fw0t Е:Z 4Е Е(fw <  > 6Е)5c " - g 5     wH *wl1  I q   Е0Е0MAINSUBTOPBOTPARITYSPEEDUICSYSUICNETUICMAXEXTPUBBUFPOOLSIZEPOOLPLCTLWCHKRNDCRNDLRNDHSWPCSWPRLOGONCRTLOWERESCSEQREMOTESLAVEPRIVBROECHOASR33LA30SVT05BFORMFEEDHFILLVFILLTYPEAHEAD00^^TADATADATADATADATADATADATADATADATAFORMFEEDWRAPFDXEBCHHTRPAABAUDAVOANSIBLKMODDECEDITREGISSOFTHSYNCTTSYNCPASTHRUPRINTER_PORTASR33KSR33ASR35LA30SLA30PLA36VT05BVT50VT52VT55VT61LA180SLA120LA12LA34LA38LA100LA50LQP01LQP02LN03DTC01LA210LQP03LA75LA2XXVT100VT101VT102VT105VT125VT131VT132PC3XXVT2XXTERMLINESTASKCOMDEVSYSODDEVEN       @  @   HRrsHVrvwHrwHr#yHrNyHrryHryHryHr\}H/rHr}H(zrHrHrHrHrH8Ut^HtqHuH:Vv?TH vHyfH*Hf `;H$ yHH"zsHsHp+sH,.sH6sH8sH ;sH0=sH&BxHrHC HH8rHVrHWrHzfHfHfH©FHߩ0 HeH |H$eH HXCTH,KH,KH,MH4:H6}Hz6H6H6ԀH6߀H 74H 7fH 7&H 74FHD 7H8H"HngHsH-Hx~H|zɪ+gHn˪pHz˪sHժ:H8ժ\}Hx5ժHWת3HتHت4MH ت5MH تVNH تYeH تfH۪:HM۪\}H"Iz۪HWܪHV@ܪ:H @ܪ\}H =ܪHWݪKH ݪHV#HZH`H`H`H`@H`H`H`zH`@H`Hn-}HL -P}HH AXH AqHAsHFsHKQHKZHLHO`KHOKHO NHzOHR9HR,:HRR;HRSHT|H<Tz}HW|qHtktLHfkBMHjmQHq~ZH>qZHDuHbuHbzzTHtzTHjzTH}#H}eH6H [MH$eMHLhMHXxH@HH@wHyH‹HzH H }H*}HZ}HZH^H^H@H>&Ht'H &H(Hf(H,HvzʫL Hʫt HʫIH0ʫ,HʫWH8ʫyHʫH ̫H̫pEH̫dH̫+gHϫxdHϫfHϫyH$ѫ,xH`zѫBxHѫxHѫHnSH髭FHZHdfHz}H뫽HH:HlhHHFHGH6zGH6GH2xZHfH\}HHH`XsHxQH& sHlHlUH_H_HHXHXzHQH&RHRHRHSHRSHSHSHBTH~THTHUH$HnUHUzⰀHXHVHDWHWHxVHX)HX4H0XHfH9HLHS}Hd@yH mxxH znHHpHr{Hr{Hr{Hr{Hr{Hr{Hr{Hr{Hr{Hr8|Hr`|Hr|Hr|Hzr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hr|Hzr|Hr|Hr|HuHuHuXHvHvy:HvaHvgH&H &zH@&&H&Hd&H zd&H d&Hd&Hd&#Hd&#Hd&#Hd&4&Hd&NHd&THd&UH@d&gYHd&^Hd&eH@d&eHd&#Hz)NqH)rH )#H")ZH)faH)fH )wH)vyH)މH$)H)H).H,){:H)F|,BBn  X TITISYSYOV00^\Nv<0RjtTITIDUDUDUB  0<|0F P(:u~HVN (Uq8(swxp4'(:dIqLq;}@v0(vXYM`|h    7  !5 j   z J dw fh`   W W W;W! E     P   ȕ  R e   W vW W  4  a( imM?& &  7R  7< w % 7 w<  m%m.M*2v  lb mX mN7F z:&N`  .m(w$7v Vw |EE CC w jE E C & E   e0А  E C    ¥  ¥ Е Pɋ fw f   W K: b^e`  LB$  :"Br wd  f) N B'<  "11 CBBl fD B wT<pbd  f`åfåå å å 'b VMR>Pb78 bD 7 5"5,7 \bD7 J 5"5,7 Z bwN VwD  \wP5YmV 5%G`V  R m  e E@e B`  * l  b0 hJwEp     R` w8@     m*E B`eEJ  )p fbCw Rb % Dww 7|w  Dm PP&@A  @mE Е:& .  ¥8¥9& ɋ=     f& &3U#U]RO_tS _"_$-{fXu~ZDF\G g^H\}`J beĊdBxfC h6l;jsl-n˪sp#rtvAqxah zhh|lh.~phrR9Tz}x@(ϫxdϫfѫO ѫBxѫxѫhѫa Zfl.og,hFxZӍZȸ@κԼھ@:^&CE(=&*D:,e.t^0v2v""4v?T68r8|:e<쩔>6@6B6ԀD74F7fH7&JT|LTNmQPqZR[MTz}V'&1 *H "@  $ 00^^TADATADATADATADATADATADATADATADATA  # V" B B& B^( NH N Nd! N$ N' ZP &H V# b b& n: zn r20 j,0 bh0 Z0 R,0 J8 B h8 : : 2 X: *"; ":h85ew , Bv    5Bw :i5  5U  E U *5@*& E& & f&ËDef Ë )̋U&  m  f A N  %&ff &f HzH H HB$"%"**"6,".H N5Hp Zb#&Jf#&Vh#&2lH<nvHy,0y,0dz|,0<zh8h8< :::h::::h8` h8`"h8\.h8:h8p R闠/cP`R]IZ 6闠=U W PwM J d E| Lw Local TI: - Global ȥ=7 B7 @ȥ/$ r5"TIlJ .j=g  [ t M:T Q/NGKBHLE Bb7 ,  eD87 p |Jff  7 0 b TIJw 2& (f  55 7" f w  f  w7 8 NPPA 6 Е:Е ffD7 \w N BЕ *΋8 ֋7 "wr    @A¥Z w <7 7 %7   J %L wx $ x E (&&<(&&X2-H,-D)̵ & $ #00^\N-@  %( X> % e%JwwefR( l   T *eH w*77 & U Enter filename: . zSYyIM T  wwH pfCfph F1fȕ  8ww et DR  HZ# N &  V %=SY7 : B 7,\7^LB: B 7,\b7^\v HD  # Pww $n 2* e   0 H -w>#0 7 e e\ w  B* b&߷"p d  L%5R%^>w 0 4"P1eEC` 6J`"e?E?JM J`*n w %p7 jf    J HwTSMHRSIUIC#  & i# tt/3 \0%9" Q @e:NW K UW ;E¥:B UW ;<  j /u $  # *)e !"[ uW ¥,  uW ¥]> =wĝ! "&fj 7z b0  ~R 7V # E C @  ~ p Bu`u 5`Ce    pl~%  u`u 5` ! x  z P Pb5cu 6 2 | $t-t-^   8T!r7H (BA Tu5P  ~U#ˋ#A B  u 5 & f  ~& v z6`N 20 ,0 0 8 9 h8 h8 ; "h8 .8 :h8 Offline Loaded UnloadedCOMDEVDRIVERDYNAMICMAINSUB SYS TASK 7 7 7Х:k h    :w w- J  wbD  Pȕ 3!f&7 6 ( H d55Y  FQ  8 w 4` bw wF - 5  5  $ Е A Е   .Е "  Е  z-  x5 H- ^r5Xk5  JЕ Е-Е fw0t Е:Z 4Е Е(fw <  > 6Е)5c " - g 5     wH *wl1  I q   Е0Е0MAINSUBTOPBOTPARITYSPEEDUICSYSUICNETUICMAXEXTPUBBUFPOOLSIZEPOOLPLCTLWCHKRNDCRNDLRNDHSWPCSWPRLOGONCRTLOWERESCSEQREMOTESLAVEPRIVBROECHOASR33LA30SVT05BFORMFEEDHFILLVFILLTYPEAHEADFORMFEEDWRAPFDXEBCHHTRPAABAUDAVOANSIBLKMODDECEDITREGISSOFTHSYNCTTSYNCPASTHRUPRINTER_PORTASR33KSR33ASR35LA30SLA30PLA36VT05BVT50VT52VT55VT61LA180SLA120LA12LA34LA38LA100LA50LQP01LQP02LN03DTC01LA210LQP03LA75LA2XXVT100VT101VT102VT105VT125VT131VT132PC3XXVT2XXTERMLINESTASKCOMDEVSYSODDEVEN       @  @   00^^TADATADATADATADATADATADATADATADATA !"#$ HBHBHBPBPBBHP PPPBB0BBB0B0PB0B0B0BB0B0B0PB0PBPPPPPPPPP  +[05075110134.515020030060012001800240048009600EXTAEXTB5075110134.51503006001200180020002400360048007200960005075110134.515030060012001800200024004800720096001920038400$$V%^%*)%%%. / '+p+0-,d.d.d...-x'x'x'x'x'x'x'x'x'x'x'x'(x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'(&7  :/7NO t 5%<D25&  5%D |"ы ɋw & w(C u wu b  pw:~ r z X PrTݗ:oU%ȥ*  &l l  ^U\ Y:Vȥ*  T |T  FUD (=::         (#5l)    % |% n 58%lw pd/7 D+< :& 'C @ U%¥: ȥ- ȥ+ ȥ*  e w\ dww  C¥A¥Zb[d W b D_,X W VDT]N|-j -b5I8z ^97 J H.:+ j-P wF& 51$ 5 7e\ wN  C 5 %݇w / ,C 5w& 4-5 \ @5%%w 4w4wC Lj5w%nw, e e% 5d_7mF b% 7 ٷ  C S% %  ;  b5 ;5@ 7% 4"5@ ! * |" / | F awb%85x C 5 , e B B C C 03CbPb طC E5 ۿ ȥ0ȥ9 j %(! K%*! pы ɋ B؄En(!/!F+E EEE WU & eep! 4\!U E55+u& _ \C - w& j5K5 J5@ F4"5@ ! *|" f< 4 V$¥:! z* D &//5@  P77  bwdC 5EU@ E E@ ֆ  ׇ U ߇" ( !ȥ*2 T   e? `- j* FJwd ,ȥ*  큀 v5 %5% C ̆. Be?  hw `E Fl Tb7 >f -  N%  # PCM@`LT . f +q 7 w~d CEbP^ 5wP<&C 5@!5%DX%DY%MT%MM%MS  |݇wD5Hb$v Dd D"X  Х:   )sb   !M%W#TM%W%T%  ܇5TNwH5 EzUrnfԸ ܇(5R * V͇58W w&2x R܇5H*5 U B b < 5A-AW >u05 7u4u&5 R+w"5@D$ $ b& W uW M ۇ5@wHww 5@wv5,C 5 wh& -Z : "ۇ ݗK W   ʋ3  BK :s @ ҋʋ  h0 0 v1 8 900^\NLB  LB0:x" 7 d/ 7N ~sȕ |nkȕ lfc_$ 4  Tz 43 6:97H67J27Br7Dn7Fj#)7JwH7>w<P@!** #$" w t 7\ b wF %LB- 7ww )( wB R> P"5@"^!R" (R"eI ! ` RT# J# B*" :6# 28 *h8 "; .8 .8&##*##/##3#$7##;#>$?#~$C#2$G#$K#$O#&$PRITASKUICCKPPARPMDINCSLVIOPCLIFIX!   </ " A  < w&w( wVW w!! $ T{ L[p wtW q,e wiW f]ZUUU U@U@U!! LYN(O%UE SE  e wb5%UJ% w` 2h0 *8,N" .T"`wa www `!  " " !5@w ~*,-. 01O2 w|B e26657b : e> !e& ^we e 57U 5@ 55j5e5a5 \ *XE 7.r  7R bw 4 : -t-n"h#-8"/!B$ ZR  5 HU+wz7 t--w$P >|75@(5wp Z55@LU@l5>565UNA @  5  57mBm?5V%8 65 7 @7  w5 5 U 7 5@5U W-`v/ "qwwwwb ~fR5 A A A 55W W wB @5?=w 5  5 "A m,m(eE A A A B 5  B 55 5^ Dw<5 Edb    N%5  5J\ U ` [ wU@H5@E@:5 z+wE"5 U5U N5K55f 5? 555 5@5 5 w`5w`-ws"{ w| w} wv5 <54565UB 200^^TADATADATADATADATADATADATADATADATA ( u wz5@P X 5 5 A  llwwTU | eE| xwwe5  b w X7R  e T"2,  Y5WuV ,A  s- I, C5  P w AT :wT wN@5%5  BE 5678 9:;4<c wfס A A A A A A   TB p5R%T X  J R > TU5E  A A A A E E wz eT @E? L X8FBP"ea 7&(#*  W#OVC" ȕ:" dPT  U% @  ) Pwe     % F <R"  nЇ&7 7"e 7eU5^ 7(e2"7&e: 5B z1 "1"mn"1 "55V1"5H1"  b",p Aw w rBAw\ 5 64 Q!|U4, ~!W$h K!|z x!|b q!| P f!| 5 l F"D U 87Jw &5@~5v b" U b`bF xW!! N"eI (0 87 l Nb50www 0EU@5  A A A EpPE@  W  wv7 n5-b ^w-RwJk5B<7 6( R"   eE  L*w zCa u@@ le@@Be? w`e w`w z& "5z `%#%_ %_  :by P"  ~p, fX 'J 34fN wܡ 8 : X:"S  55  QQ"I!wHwJVH"` 0`" 7 5DmR̋2@$f&w(ww07 5w6(l ,B DmwwC6 A w B Bm7!xw=N- w T2 FE  m.7 .&|  8m 7H$? @, B w pT  P >p+)%"b >7lw PD #wd!** D D D D D D 5551&$ 0,% "77w71lI t& e 7 2w F b'zE d #N ҇ b@T  00^\NeAw  "7 mw  lb w&@T 5:um: u:"m:A< e>`u$C&7 zv7 fbVea eNJ` B7 @5 LW&bD w7 l, f w- Nmf f5 &< 5   5 5 5 (5 mDm  :2b xw}x d Xwe Ne7 64 dVz` E,U( &, 25fb> we &j w5U wJ6 5 ,7  z55E  &zme jjmJ pe Tf#bP   */ ,m &b@@ Ze@@ ew %eD cD J%f,rew ew  ^b 42eD 4b   U   m.D  BE@&  e Z7$h B7T D7 w  7 u w r  dM   $7ww$ )( nw"S &&& p&wrw"jw!b@$7 Fw 8w8@A R@m7&h&f )&&  dz&])WT@p& 7lw &$e<p&` f/& & p7$ w  t dȕ   Е. . %$B w#*( && &$r&ea < 7(H @ ( |> wn @0 8v1 08 (9 h8  :  X: .85wF wBEU 0 =59m2v D+7 ` @ mf5  7 : m5   D&7 fB CmjC  D t5 $C~ & fn  F8\B u& . b 74x A DAM w7 N C: f  7 p fff x x5J :q55  eNrX 5 0R8  $5W f |(W Q | W K |W ~ WW q |W x  | 7 wM] wW-QW-|L 0w , b 7t -@ ~ h7wwl )( wj"S  2! 00^^TADATADATADATADATADATADATADATADATAFIXEDFILE ID:( d7 7 & ,  w ȥ   w` bD7L D5   | w xw-pw-j ff(& N f&fA zA rЕ w\w"Xw!T7Kw!Dw"@&@$7^ wP wP@A @m7> w j%@R 5Dw&: 58m7 ~3 2!  #2!ppp ) @ PqmI . 4A <A 4Е B Е D w , A A Е W cЕ W Е  Е.Е  LA  <5  0000ȕ0Е НН pЕ:Е- `^ B B B Ee0P  V! \* "Е,  Е)P!5 2 w$ w:://--JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC;; c w0&   Z0w9w:¥- /;U$$U$$U$$U WU US ¥- RK 0E9A̋;:8¥ ¥ 2 7* 7$ %5%VVP h t jwr 7v h$ P̋Е AMu 6Е-A W  P$P$P$Е- wJ w&@ e0e0P7$ʋ % ҋ wڡ<7 8@7 (-Rf |7V  * ,0 h0 |0 t0 lv1 d8 \9 T.8 P   w b 5@L  wD <wBOOTDENS@p - * K:$5 !  7 lע/ 7 `  |ы ɋע wx ӕ VM =N < 6݇: %DX%DY  W   ע0ӥ9רAӥZDD( 0 MM@  PP MS@  CT@DTMT@  DUH P MU@  DX DY8 @  ,%DYn 7 7 P D %DX%DY e $w%DU C %MM%MUU׭@ wD    @     &  ! !pp  !p!  -! P`@ 5$w77 :!$  ` ]) F  2b!0  J'@ wZJ  T7F- 1-Kw *fx "rx ~x x x x x x z z x x x x x x 20 8 h8 :7w  !@ eDɕɋ Sɵ    z   C0 e! N z _ e W!D 4 @ a   U_00^\N7w  !@Dɕɋ Sɵ   d  bV '  e eW! , @ a   U_7(w   C0 e! N z _ e W!D 4 @ a   U  e  (11 50Uɕɋ Eɕ5W,ɋ eɕ_7tw  V '  e eW! , @ a   U 11 Uɕɋ Eɕ5W,ɋ ɕ_7pnw  Rxɋ Ue> S  $  2!e   !     W! eee C0 e! N z _ e W!D 4 @ a   U_7 w  xɋ Ue8 S  $ !e   !    W! eeV '  e eW! , @ a   U_7FR|vw  "Z##$N% 7w5#SMA#UMw 9U Pɋ R`5P 5 MeP7 JNe<7 >eCɋ.*7 ($ ɋ DE%%  UWE%Pm  E e4m  f E   6U T ~z 90 e! z> w8 _ e w!"D  @  2 a   U 9U Pɋ _2 a   U B B B B B D B D 77e<eeQCɋ7 7  ɋ DE%%  UjWpE%PmXR N EB _2 a   UR`1 5P 5 _2 a   UQ00t@KPsP0 f E 7eeePe~ vw`w 7`w`w 7`w`w 7`00^^TADATADATADATADATADATADATADATADATAP H0  V  L% <%  & !  4 4  4m t  B@_7|^vw  ".##$$ 7w5#SMA#UMw 9U Pɋ R`5P 5 MeP7 JNe<7 >eCɋ.*7 ($ ɋ DE%%  UWE%Pm  E e4m  f E   6Ujb T RN #: w4  e ew!  @  * a   U 9U Pɋ _* a   Ue7 eeCɋ7 7  ɋ DE%%  UWE%Pmtn j E^ " _* a   UR`1 5P 5 _* a   UQ00Z%&%%KPsP0 f E 7eeePe~7wP H0 SK3s ~  t% d%  N !  4 4  .4m t  rp_ ,b|7l!b & bJJee@fefeU7J`B!  "  e 7&w zKp ͇ %b "T!  E% % e w , " w|e@_A  ,b|7l!b & bJJee@fefeU7J`B!  "  e 7&w zKp ͇ %b "T!  E% % e w , " w|e@_A 00_\N7w  7 C0 e! N z _ e W!D 4 @ a   U7F P ɕ ɕ  ɕ  I  ɕ I ~I z r a( fɋ `@ VS PS  @ E :@P!  $ɋ Q$e   ~w*DaD 5_7hw  b7V '  e eW! , @ a   U7F P ɕ ɕ  ɕ  I  ɕ ~I tI p h a( \ɋ V@ LS FS  6 E 0@P!  ɋ Q$   w4DaD 5_7w  7 C0 e! N z _ e W!D 4 @ a   U 5 U  7a7b D % D ``` ` U 5155 E 55q5  !mm5UU E_7lw  b7jV '  e eW! , @ a   U 5 U  7a7b D % D ``` ` U 5155 E 55q5  !mm5UU E_7w  7 C0 e! N z _ e W!D 4 @ a   UL0  KPsP7 veR`J `R`J ` R`J `eee6edhP H0 (  4 `! 4 4 4  > 4m t  _V '  e eW! , @ a   U00_^TADATADATADATADATADATADATADATADATA" .#5wh T ~r F pe 8¥: w¥/w@1# ! 0   ¥= x ݇e?ڇ Jw# .#   ć¥= 辇  6w ,w dwR .w-5? 97  w-l, n,p NF ] w  wQVuW wD嗠A¥Zb37t VĜ3E x,   ,3 \5 7f  > t~ 7H 3  VR J"P : #! w %& 1)($" hw&   L *eH w*77 & U:~!!\}!:!a!YM!|!<!t!!%!v:!va!l:!la!h:!ha!j:!ja!z:!za!mƦ!Q!:^!CE!=&!D:!e!t^!v!v""!v?T!8r!|!e!쩔!6!6!6Ԁ!74!7f!7&!T|!T!mQ!qZ![M!z}!Z"<"ęsySYPARSIZE 2& 2# ># J# 20 h0 9 8 h8 :h8XXCOM >m(4w . |%05@8 :-""S$"m T Ul6"w"  5 -   ^ & 7~> b A  |-z%%k p 5 2 w7D5 5 "5 5 5 5 5 5  5~&mBm wD- w N7 @7U5 >7x8 R7h B DmAwP C l @B Bm7!XwL7$ R   u7(w 2C w-   w   *  eE  V *K@@ p Z>@ e@ e`w Z #ȝgb wN wH" "w(5n70o"  J wNۡ 7  ۇAwFww *w(777`D g we? w  ÐVT`Pw Jb>Eebb H  .!bb  7F ` ew b $7 b& ~77 Pe,+3 e$5!7e >sΜ &  7 Aaw &ewA  pwjw*7p  f @!Ke A!s X e s B!B7 te B! s  ΊaE Z7 ( RwwV ~j$" w00_\N5w!Lw!&Na%vۂ~!  !7 J!B B ~ %= wf) X )  *,*,*,*,*.*,*,*` $ ~!#-@n n(r5op e    l p R!&$ [ X w| $ D< ,5r w%TThn l ^ t %TTK427 d) ww-|,  $  \ v5** + 0+ +wD+J 6r0+>$6-%(   d  T J : 4  v  h t Pt vbBd f-,hd) dw- F 5@Q$5@Q$5 Q$5`׬* Q$w R,   pw d5@@555 < aF x  2Yz t e w2 wT &bL7L7B7 d) "w-, l -tz e ߁   $4 bw^ 7,z x  Xb*w$h :; P 7> 777  z5H  T 6w -TT Je7t - W wF yrݒwX%TTJ + 7Z #7ND+0+   zU%   `7b>5^Н 6 e 7 8z$Th b " n FlH . ߇d &  ȝB U4 ߇$_ @E  _ @"##### # ###!!!!!!!!!! 8 #"# #$XX:"77 ewr# d He !" <" .# t. |! ~*""1  d#)fdb7|wzP !* "$" w~!  !7 v!n n  %= wfz$  z$  $%%%%%%%` $ ~!#-@n n(r5op Fe  F   4p ,R!&$ [  z7 r¥: Q& "uXY jw>& Z w-5 w 7 77  4w- \ @A 6@mU, ~v4x V`[  b6F 7,0 0  \ x0 7 7E 7 HË t5 7,7z " P( w ,  ,5   e wN%TT@% " E> %TT\w ( " xwn' 9w- "5@Q$5@Q$5 Q$5@׬* Q$ |  6 J# "v ` # + n 7$h  5@@555  a, 7 7n' =w-, < D 3  n @ %TT F vxwbw6z B%w"  t % 7-  -&   f - EUP߷Nw z x w%TT65$2&&ĜwX* (3 ( $5% 70t   >ۅcĊ $XX:"77 ewz( d He !" <" v # b 4! d!* $" 2w~!  !7 !   %= wf*)  *)  ))))))))` $ ~!#-@n n(r5op e     p |R!&$ [  wR  5 ^ ЕNЕO \  J  Е.w  .  Е.w ,  eebB @   | Е.w O E R   Е  B wV  5P, eb%&% lZ %I 2    % œ E 5@  *\<  wN5! H D- w Z 7 N A @  Е:A ,  00'_\N 0000 ,D- #Е:\5 O5T  |V- X  5  D7 ww [ ~E E 5@d | \ Е:\ Е:< Е:< zw.  55@  2ЕNЕO "S :  d5 `   B bDe?  Е:  t p f=-`#)#'%& (!""l$bK   Е.Е:A Е.w -i w$ 6&j bA Е. Е:w 5@5j $ ЕNЕO+ F `f 8b  =D7D14\ b&IDCD > Е.wPPA Е: ЕNЕOAh Е=  Е:%w7 5%#%_ %_ vr x& R D- jD jD- `w Z w-2Ww-,S7> @f*    . 7B @N   - 6 & w b Rw V4 (fRt @ B`B%  N 1e - -      B` %%e?  N   x`  hw %\7Z <D7 . w L p·5! 5 &@ Cm&& (& 4x @ &f l7> 6 DD7 ~ 5! C    w  w@ w w@ @m 7L Fז% 4 Հ5 5 7 x 9| `0ww"w!@$7 N w @ w@A @m7$> #*(Hw )  |xt00/_^TADATADATADATADATADATADATADATADATA)ڇ~@ 7lFw @d@ 5!< e>% @ea d@w j  w" %TI[w 䗠=P w R%TID%TT%NL? r6b7~ @7 l -2B!7R 5!B B 6 7* q C DEFGw 88 0.8 w  ť ť 0B Aaw `(@f ťZ+ťAť9%ť0ť$ ť  ť.@&fA EAa$  *  + 23E Ew 煐   Е-   0@A HW e`fÊ    E  & & @( f  e ee e ABDEFIMNOPQRSTUXYZ<>=MXd^)JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECw && D¥%  B&ХVA C ed!  aeNb A  Е%̥V P Е Bf B & e$B& e;& e6Hŀ ȕ  nЕ Ћ  Е Е & e & eЕ A %& eA Е Е A A   $Е.  AЕ; 4    A &EA  HE 6Dw D&& bЕ- eaePPPЕ-$w D  &Е. ce . Е:   `Bw 5 funhj tuhdB$ 8jwaw< 8 v8w &  `*AdBbAep& f  4 P aAAf@pnp dC*8֋ 88*Ë7AB`f Va`& WaWz  ɥ"N  ajfu-nhwFɥ;]a)wנ"å.@j  a Bw@ ŀajTI& af* v*`V @e,w jjlj ɥ@@aujk,bp 5f fˇ ȕ ‡ eSY e,5 funhwe,aja`W- f`nw^uhnw@ \Dllja!CeH###33@#  & 8 *11w ^ 8jDl@ TeBT85l@ @( D eB& # xAn5j)f & 2/      RՀa@ B: : h8 ; "h8 "; .8 :h8w Z d) 8C * ) *wx* rep p  C  =  0* = Eե^ A e@ ߇ Ep p  8 V *`)w, C#    D w *D   w *) l0, *) $ )*)0,40,6 e6p 4 8 0  j  J 8  ***  DP5R RRR *0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% 141612epl2l0p,*1 U007_\N4 6w Bfep`pw8e2 8'8;(8O<8cP8wd8x8 8 w  HDE%h8!eD 8ywwwwwww8J :9Д & WW  :9Д Bee : rB< ^7 fLWWnW $t $<wB whB8P8)wVMR -- *DIAG*-*FATAL*- ݆ 2 ݒ2 ݶ: : : ~: v: n: f:et<Illegal Get Command Line error codeCommand syntax errorSystem image is RSX-11M-PLUSIllegal switchIllegal error severity code %PCommand I/O errorIndirect file open failureIndirect command syntax errorIndirect file depth exceededI/O error on input file %XOpen failure on file %XIllegal file specificationFile %X has inconsistent dataFile %X has illegal formatIllegal functionSyntax errorDevice %2A%O: not in systemInvalid keywordInvalid UIC:::;;;/;A;\;z;;;;;<;\;|;;;;; <& x 2,, 00G_\N *)  j. 00l  0 *e6p 4 8 (  b ~ B ) d!f 4  e) . e6p 4 08*w) . .0,0, f 톇,, w      .% P eB U5UU  plp & NeՀ)**&f D E/fC A B f&  BeA @0  (@0 a@eA  B0 AB  f  ZC @*141612epl2l0p,*1 U4 6w8 LBfep`pw8e2 0+1(e  @%&p*w^ f( f)f :8Ae f"( UCɗ&+(e$&% &   `@ ` B   & A @    f&f ` *  !נ נ  נננ"D נaנz E ѐEp(p נ$נ0נ9נAנZנ_נ:  Vנ[ȕ]נ<ȕ>ȋ8 |נ%נ*נ-נ.נ0נ9נAנZȠ |נ0נ7נ*נ,A lȠj h  qנ"A   #A cנ$נ%נ*נ0נ9נAנZנ_נ.  נ.נ; fנ0נ9 ]נ- X נ* QA  נ, Dנ=  >5 B>U (wZנ/* . .נ$נ-נ.נ0נ9נAנZ נ_ נ:  Dנ"  0f&f E^`  UQ  UQ ËUI U `e ccD    Ĕ%*.A U 0 0 W ,Uw@W /D D cBDaW- N WN WOD!B N{ CECCD! D! ΋5  e ΐ UpRpRpBC5D  KR΋KBAE:D0CĊ f eB  Dҁ CSĊ  WC E Cs Ε f)& 6 l(*  E 'W " =N  W :+W = 1 #W ,W / %W %W *Հ W <W [W >W ] v(* 6 ew  w & W+W- Ba. W#  B0  c  c S W %ec e`s  # 3  & ˥ Z ^C w D( D D 8#"#)%ĥ ĥ w 0 *0 @Q$    0 40 60))eB   :# 3&*w ,#( P) @#**fff b r&*wL. P35(8e$8w22&(e f%p8q #)  *R*)@#0l C# 028 0000O_^TADATADATADATADATADATADATADATADATAĥۇAĥĊ  000 0 @0 &*0 @ u # eB&B &B  *  eBe>  # #D #&0 #   :0@e 6@#040 6w!p2w (B C DBe ?D(1 >w eE D` bl lrw   B eE"s    s-  Cslw BC "& <SY&*p0p21E%0*w8(*e "f D CB.E141612epl2l0p0f(& e %&&eH U   Ef p  wV " f &* *    f bu   *8Ae f"( UCɗ&+(e$&%  Mw 0+1(e  %&p*wd f( f)f @82e&( 0 0 0 80 B0 0 0 0)#0.. 00l  0 *e6p 4 8 b f $ @ ,*1 lU4 6w Bfep`pw8e2 *) l0, *) $ )*)0,40,6 eB  8 X$&w $*   "w  (ww ww ww BC "& <SY&*p0p21E%0*w(*e "f D CB.E    f Pu   w *#   U@e   ew1  %,,  w r*D !UqqC ӥ:  Ce D   (*w *  )Ĕ%.&%;D  5)5@DD ͥ*Ce a%wUX5@ 5U U*U  5@XU@5 U*U  ʥ*%C!.D` *weC5U5  5 5@e**0+1(e  @%&p*w f( f)f 8Ae f"( UCɗ&+(e$&% (*Ge(  1 5&e  1-1- 111 rrrrr &  Be 0 1 w* w &Ba +- ʥ# . U 0   b   `     &fe    : $ L ( La Ta  @ `W!ZW!AW!9W!0@f&5ҕ[ "5ҕ, 5ҕ]E 5 5  e0Ґ w Tف ҥ[, &]  5 s  D w$1 z   1 1 1 1 1 1 DEee $ $ 00W_:`_Nw D*8I *=)98  eB &&  U **e *Nlv ΋*.)  & #!)&eP(e && ~p* w*8Ae f"( UCɗ&+(e$&% 0+1(e  %&p*wr f( f)f N82e&( J0 0 0 80 B0 0 0 0)#0.) . .w 0eE D` bl lrw   B eE"s    s-  Csl ) !f  b e) . e6p 4 08*w141612epl2l0p,*18e2  U4 6w0,0, f 톇,, w ^     .% > eB U5UU . plp & NeՀ)* .TITLE ACSUB  .IDENT /03.00/U ;OC; COPYRIGHT (c) 1982, 1983, 1984 BY DIGITAL EQUIPMENT CORPORATION.O; ALL RIGHTS RESERVED.;<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ; M. S. FOX 18-OCT-78R;H+; MODIFIED FOR RSX-11M-PLUS VERSION 2.1 BY:S;M; B. KRISHNAMURTHY; ; MODIFIED BY:;E; J. W. BERZLE 07-SEP-83 03.00;P2; JWB047 -- ADD BUGCHECK FACILITY AND ERROR CODES;E#; CPU ACCOUNTING COMMON SUBROUTINES ;U; MACRO LIBRARY CALLS;O  .MCALL ACNDF$,ABODF$,BGCK$A* ACNDF$ ;DEFINE ACCOUNTING BLOCK OFFSETS ABODF$ ;TASK ABORT CODESS W;+D; **-$QTRAN-QUEUE ACCOUNTING TRANSACTION TO SYSLOG (USE DEFAULT UAB)F; **-$QTRN1-QUEUE ACCOUNTING TRANSACTION TO SYSLOG (USE SPECIFIED UAB)O; **-$QTRN2-QUEUE ACCOUNTNIG TRANSACTION TO SYSLOG (NO UAB, PACKET IS COMPLETE)IM; **-$QACNT-QUEUE ACCOUNT BLOCK TO SYSLOG (THE BLOCK IS ALREADY IN SEC. POOL)I;AI; THESE ROUTINES QUEUE ALL THE ACCOUNTING DATA PACKETS TO THE SYSLOG TASKR; FOR PROCESSING;C ; INPUTS:A;F?; R0=VIRTUAL ADDRESS OF PACKET IN CALLING TASK'S SPACE ($QTRAN,T; $QTRN1, $QTRN2)A; R1=RELOCATION BIAS TO MAP UAB OR ACCOUNT BLOCK ($QTRN1, $QACNT) ;) ; OUTPUTS:;UA; BF.ERR SET IN $ACNFE IF ALLOCATION FAILURE OR SYSLOG NOT ACTIVEN;U ; REGISTERS R3, R4, R5 PRESERVED;(;-  K I .IF DF A$$CNT $ .ENABL LSBC*$QTRAN::MOV $TKTCB,R1 ;LOCATE CURRENT TASK2 MOV T.ACN(R1),R1 ;LOCATE TASK'S ACCOUNTING BLOCKS0 BNE $QTRN1 ;IF NE, THERE ARE ACCOUNTING BLOCKS RETURN ;NOTHING TO DO $QTRN2::CLR R1 ;THERE IS NO UAB)$QTRN1::TST $SABPT ;IS ACCOUNTING ACTIVEQ BEQ 45$ ;IF EQ NOR SAVNR ;SAVE R4, R5A MOV R3,-(SP) ;SAVE R3 CLR R4 ;% BISB B.LEN(R0),R4 ;GET PACKET LENGTHA MOV R1,-(SP) ;SAVE UAB ADDRESSL MOV R4,R1 ;LENGTH , ADD #77,R1 ;ROUND UP TO NEXT 32 WORD BLOCK1 ASH #-6,R1 ;CONVERT TO NUMBER OF 32 WORD BLOCKS 6 MOV R0,R5 ;SAVE VIRTUAL PACKET ADDRESS IN TASK SPACE& CALL $ALACC ;ALLOCATE SECONDARY POOL BCC 10$ ;IF CC SUCCESS TST (SP)+ ;POP UAB ADDRESS BR 40$ ;RETURN110$: MOV R0,-(SP) ;SAVE ALLOCATED BLOCK'S ADDRESSO' MOV R5,R0 ;GET VIRTUAL PACKET ADDRESSV& CALL $RELOC ;RELOCATE PACKET TO APR6& SUB #20000,R2 ;CONVERT TO APR5 OFFSET' MOV R4,R0 ;GET PACKET LENGTH IN BYTESD7 MOV (SP),R3 ;APR MAPPING BIAS TO SECONDARY POOL BLOCKE5 MOV #140000,R4 ;VIRTUAL ADDRESS OF DESTINATION BLOCK . CALL $BLXIO ;COPY PACKET INTO SECONDARY POOL2 MOV (SP)+,R1 ;ADDRESS OF PACKET IN SECONDARY POOL MOV00:e_^TADATADATADATADATADATADATADATADATA #KISAR5,R3 ;POINT TO APR5( MOV (R3)+,R5 ;SAVE CURRENT APR5 MAPPING( MOV (R3),R4 ;SAVE CURRENT APR6 MAPPING. MOV R1,(R3) ;MAP SECONDARY POOL NODE IN APR6! MOV (SP)+,-(R3) ;MAP UAB IN APR5T BEQ 20$ ;IF EQ, NO UAB5 MOV #B.HID+140000,R2 ;GET START OF ID INFO IN HEADER 215$: MOV -20000(R2),(R2)+ ;COPY WORD INTO SEC POOL2 CMP #B.HEND+140000,R2 ;ALL HEADER ID DATA COPIED? BHI 15$ ;IF HI NOL'20$: MOV R5,(R3)+ ;RESTORE APR5 MAPPINGO# MOV R4,(R3) ;RESTORE APR6 MAPPING BR 25$ ; $QACNT:: ; MOV R3,-(SP) ;SAVE R3625$: MOV #B.TIM,R0 ;GET OFFSET TO TIME FIELD IN PACKET CALL $TMSTP ;TIME STAMP PACKET" MOV #$SYLHD,R0 ;POINT TO LISTHEAD3 CALL $QSPIF ;INSERT PACKET AT END OF SYSLOG QUEUEQ6 BIT #BF.ERR!BF.STR,$ACNFE ;SHOULD SYSLOG BE UNSTOPPED BNE 30$ ;IF NE NO& MOV $LOGPT,R0 ;GET SYSLOG TCB ADDRESS BEQ 50$ ;IF EQ, NOT INSTALLED2) BIT #TS.EXE,T.STAT(R0) ;IS SYSLOG ACTIVE  BNE 50$ ;IF NE NOR/ BIT #BF.SLR,$ACNFE ;IS SYSLOG ACTIVELY RUNNINGE BNE 30$ ;IF NE YES CALL $EXRQN ;UNSTOP SYSLOG30$:40$: MOV (SP)+,R3 ;RESTORE R3 45$: RETURN ;EE50$: BIS #BF.ERR,$ACNFE ;INDICATE ACCOUNTING HAS STOPPED DUE TO ERRORT BR 30$ ;RETURN .DSABL LSBR A T;+6; **-$ALACC-ALLOCATE SECONDARY POOL FOR ACCOUNTING USE/; **-$ALTAB-ALLOCATE A TASK ACCOUNT BLOCK (TAB)$;PB; THIS ROUTINE DOES ALL SECONDARY POOL ALLOCATIONS FOR ACCOUNTING.C; A CHECK IS MADE TO INSURE THAT ACCOUNTING ALWAYS LEAVES A CERTAINFI; AMOUNT OF SEC POOL AVAILABLE. THE ALLOCATION WILL FAIL IF THIS MINIMUMNM; AMOUNT OF CANNOT BE LEFT AFTER THE ACCOUNTING ALLOCATION. IF AN ACCOUNTINGBH; ALLOCATION FAILS FOR ANY REASON, A TKTN MESSAGE WILL BE PRINTED ON CO:1; DESCRIBING WHAT TASK LOST ITS ACCOUNTING BLOCK.O;E;C ; INPUTS: ; 1; R1=SIZE OF BUFFER TO ALLOCATE IN 32 WORD BLOCKS 5; R4=TCB ADDRESS OF TASK TO RECEIVE TAB ($ALTAB ONLY)L;L ; OUTPUTS:;C; C=0 ALLOCATION SUCCESSFULO%; R0=APR BIAS TO MAP ALLOCATED BLOCK ; R1=NUMBER OF BLOCKS ALLOCATED; C=1 CANNOT DO ALLOCATION;I; REGISTERS R4, R5 PRESERVED;A;- .ENABL LSBE@$ALTAB::MOV #T.NTAF,-(SP) ;ERROR CODE FOR TAB ALLOCATION FAILURE BR 5$ ;JOIN COMMON CODE @$ALACC::MOV #T.NAAF,-(SP) ;GENERAL ACCOUNTING ALLOCATION FAILURE?5$: BIT #BF.ERR,$ACNFE ;HAS THERE BEEN A FATAL ACCOUNTING ERROR  BNE 10$ ;IF NE YES1 MOV $SECFR,R2 ;GET AMOUNT OF FREE SECONDARY POOLL& SUB R1,R2 ;ALLOW FOR THIS ALLOCATION2 CMP $APLIM,R2 ;WILL THERE BE ENOUGH LEFT AFTER IT BHI 10$ ;IF HI NOS& CALL $ALSEC ;ALLOCATE SECONDARY POOL$ BCS 10$ ;IF CS, ALLOCATION FAILURE" TST (SP)+ ;THROW AWAY ERROR CODE RETURN ;E!10$: MOV (SP)+,R0 ;GET ERROR CODEE SAVNR ;SAVE R4, R5C/ CMP #T.NTAF,R0 ;IS IT A TAB ALLOCATION FAILUREN BEQ 20$ ;IF EQ YES' MOV $TKTCB,R4 ;LOCATE CURRENT TASK TCBF220$: MOV T.NAM(R4),R5 ;GET FIRST HALF OF TASK NAME$ MOV T.NAM+2(R4),R4 ;GET SECOND HALF CALL $DVMSG ;REQUEST TKTNR SEC ;INDICATE ERROR RETURN; .DSABL LSB  U;+*; **-$TMSTP-TIME STAMP AN ACCOUNTING BLOCK;CD; THIS ROUTINE COPIES THE CURRENT TIME FROM $TTNS INTO THE SPECIFIED2; OFFSET IN THE ACCOUNTING BLOCK IN SECONDARY POOL;( ; INPUTS:T;R2; R0=OFFSET TO START OF 3 WORD TIME FIELD IN BLOCK%; R1=APR BIAS TO MAP ACCOUNTING BLOCK$;I ; OUTPUTS:;$; TIME FIELD OF BLOCK UPDATEDC;$; REGISTERS R1, R3, R4, R5 PRESERVED;T;- E+$TMSTP::MOV KISAR6,-(SP) ;SAVE APR6 MAPPING $ MOV R1,KISAR6 ;MAP ACCOUNTING BLOCK2 ADD #140000,R0 ;GET VIRTUAL ADDRESS OF TIME FIELD( MOV #$TTNS-14,R2 ;POINT TO CURRENT TIME!10$: MOVB (R2)+,(R0)+ ;COPY FIELDF/ INC R2 ;SKIP HIGH BYTE OF WORD FIELD IN SYSCMO! CMP #$TTNS,R2 ;COPYING COMPLETE? BHI 10$ ;IF HI NOO" MOV (SP)+,KISAR6 ;RESTORE MAPPING20$: RETURN ;R A;+-; **-$CPUTM-CALCULATE CPU TIME USED BY A TASKI5; **-$CPUT1-CALCULATE CPU TIME USED BY SPECIFIED TASK ;PF; THIS ROUTINE CALCULATES THE AMOUNT OF CPU TIME A TASK HAS USED SINCED; IT GOT CONTROL OF THE PROCESSOR. A VALUE OF ZERO IS ROUNDED UP TOF; 1/2 TICK BY COUNTING EVERY OTHER ZERO AS ONE TICK. THEREFORE A TASKB; WILL BE BILLED FOR AT LEAST 00:m_`_N1/2 TICK EVERY TIME IT GETS CONTROL.;; INPUT:;2:; R0=TCB ADDRESS OF TASK TO BILL CPU TIME TO ($CPUT1 ONLY); NO INPUTS IF ENTRY AT $CPUTM;R ; OUTPUT: ;$; NONE;L#; REGISTERS R0, R1, R2, R3 MODIFIEDP;-;- T .ENABL LSBE;YD10$: BGCK$A BF.ACC,BE.NCT,FATAL ;MUST BE ACTIVE TASK WITH ACCOUNTING;T*$CPUTM::MOV $TKTCB,R0 ;LOCATE CURRENT TASK! BEQ 10$ ;IF EQ, NO CURRENT TASKD8$CPUT1::MOV T.ACN(R0),R0 ;LOCATE TASK'S ACCOUNTING BLOCK$ BEQ 10$ ;IF EQ NO ACCOUNTING BLOCK% INCB $BILNG ;END CPU BILLING PERIODG4 MOV $ACCLK+2,R2 ;GET LOW ORDER PART OF CURRENT TIME# MOV $ACCLK,R3 ;GET HIGH ORDER PART4 SUB $STRTM+2,R2 ;CALCULATE TIME ELAPSED SINCE START SBC R3 ; SUB $STRTM,R3 ;4 MOV #B.CPU,R1 ;GET OFFSET TO CPU ACCUMULATION FIELD* MOV R2,-(SP) ;CHECK IF DIFFERENCE IS ZERO) BIS R3,(SP)+ ;CHECK BOTH HALFS OF NUMBERR BNE 30$ ;IF NE, NON-ZERO' MOV KISAR6,-(SP) ;SAVE CURRENT MAPPINGO1 BIT #BF.LSS,$ACNFE ;SYSTEM ACCONTING TURNED ON ?Q BEQ 15$ ;NO, IF EQ.I MOV $SABPT,KISAR6 ;MAP SABC/ ADD #1,@#B.RND+140002 ;COUNT ZERO CPU INTERVALE& ADC @#B.RND+140000 ;DOUBLE WORD COUNT15$:$ MOV R0,KISAR6 ;MAP ACCOUNTING BLOCK5 BITB #BS.ZER,@#B.STM+140000 ;PREVIOUS ZERO INTERVAL?, BNE 20$ ;IF NE YES4 BISB #BS.ZER,@#B.STM+140000 ;REMEMBER ZERO INTERVAL BR 50$ ;620$: BICB #BS.ZER,@#B.STM+140000 ;RESET ZERO INDICATOR, INC R2 ;COUNT A TICK, FOR 2 ZERO INTERVALS .IF DF X$$ACC&XA$$CTB' MOV (SP)+,KISAR6 ;RESTORE EXEC MAPPINGO(30$: MOV KISAR6,-(SP) ;SAVE EXEC MAPPING MOV $SABPT,KISAR6 ;MAP SAB. MOV R4,-(SP) ;SAVE R4 .IF DF M$$PRO) MOVB $PROC2,R4 ;GET PROCESSOR WORD INDEXV ASL R4 ;MAKE IT A DBLWRD INDEX6 ADD #B.CPUT+140002,R4 ;POINT PAST ACCUMULATION BUCKET .IFF 5 MOV #B.CPUT+140002,R4 ;POINT PAS ACCUMULATION BUCKETN .ENDC ; DF M$$PRO8 ADD R2,(R4) ;ADD LOW ORDER CPU TIME FOR THIS PROCESSOR ADC -(R4) ;K ADD R3,(R4) ;HIGH ORDER MOV (SP)+,R4 ;RESTORE R4' MOV (SP)+,KISAR6 ;RESTORE EXEC MAPPING .IFFK BR 40$ ;,30$: ;ADD CPU TIME INTO ACCOUNTING BLOCKS .ENDC ;+B; **-$ADATA-ADD DATA TO THE APPROPRIATE FIELD OF ACCOUNTING BLOCKSI; **-$ADATS-ADD DATA TO APPROPRIATE FIELD ASSUMING SINGLE PRECISION VALUEOC; **-$ADAT1-INCREMENT THE APPROPRIATE ACCOUNTING ACCUMULATION FIELDB;EI; THESE ROUTINES ADD THE SUPPLIED DATA TO THE ACCUMULATION FIELD OF EVERYPH; ACCOUNTING BLOCK LINKED OFF THE INITIAL BLOCK UNTIL END OF THE LIST IS>; REACHED. A STANDARD TWO WORD ACCUMULATION FIELD IS REQUIRED.;0 ; INPUTS::; (; R0=APR BIAS TO MAP FIRST BLOCK IN LIST.; R1=OFFSET TO ACCUMULATION FIELD WITHIN BLOCK3; R2=LOW ORDER PART OF TO ADD ($ADATA, $ADATS ONLY)D+; R3=HIGH ORDER PART OF VALUE ($ADATA ONLY)R;S ; OUTPUTS:;*; NONE;R4; ALL REGISTERS ARE PRESERVED ($ADAT1 DESTROYES R2);;- .$ADATA::MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING* MOV R0,KISAR6 ;MAP SUPPLIED INITIAL BLOCK!40$: ADD R2,140002(R1) ;ADD VALUEF+ MOV R3,-(SP) ;GET HIGH ORDER PART OF VALUEA/ ADC (SP) ;INCLUDE CARRY BIT FROM PREVIOUS ADD 3 ADD (SP)+,140000(R1) ;ADD HIGH ORDER PART OF VALUEE BCC 45$ ;IF CC, OK CALL OVFLW ;HANDLE OVERFLOWP645$: MOV @#B.PNT+140000,KISAR6 ;MAP NEXT BLOCK IN LIST BNE 40$ ;IF NE, THERE IS ONE50$:" MOV (SP)+,KISAR6 ;RESTORE MAPPING RETURNS E $ADAT1::MOV #1,R2 ;VALUE TO ADD$ADATS::MOV R3,-(SP) ;SAVE R3A, CLR R3 ;MAKE HIGH ORDER PART OF VALUE ZERO$ CALL $ADATA ;CALL ADDITION ROUTINE MOV (SP)+,R3 ;RESTORE R3P RETURNG R .DSABL LSBA A;+3; **-OVFLW-HANDLE FIELD OVERFLOW FOR $ADATA ROUTINE(;+@; THIS LOCAL ROUTINE GETS CALLED WHEN THE ADD, ADC, ADD SEQUENCE=; IN THE $ADATA ROUTINE RESULTS IN C=1 OUT OF THE SECOND ADD.;>; IF THE ACCOUNTING BLOCK IS A TAB AND THE FIELD IS B.CPU, THEC; TASK HAS EXCEEDED ITS TIME LIMIT. IT IS THEREFORE ABORTED, UNLESSA>; IT HAS ALREADY BEEN DEACTIVATED. THIS CAN HAPPEN BY THE CALL; TO $CPUTM OUT OF DREIF.C; ; INPUTS:L;D(; R1=OFFSET TO FIELD IN ACCOUNTING BLOCK;R5; THE ACCOUNTING BLOCK MUST BE MAPPED THROUGH KISAR6L;V ; OUTPUTS:;T; NONE;;-00:u_y_TADATADATADATADATADATADATADATADATA@OVFLW: CMPB #BT.TAB,@#B.TYP+140000 ;IS THIS A TASK ACCOUNT BLOCK BNE 20$ ;IF NE NO - CMP #B.CPU,R1 ;IS CPU TIME BEING ACCUMULATEDE BNE 20$ ;IF NE NOA/ MOV @#B.TCB+140000,R1 ;GET TCB ADDRESS OF TASKE TST T.STAT(R1) ;IS TASK ACTIVER BMI 10$ ;IF MI NO 5 MOV R0,-(SP) ;SAVE ORIGINAL ACCOUNTING BLOCK ADDRESS 2 MOV #S.COTL,R0 ;SET ABORT CODE OF OVER TIME LIMIT( MOV R2,-(SP) ;SAVE CPU TIME TO BE ADDED MOV R3,-(SP) ;U CALL $ABTSK ;ABORT TASKT MOV (SP)+,R3 ;RESTORE R3T MOV (SP)+,R2 ; MOV (SP)+,R0 ;P+10$: MOV #B.CPU,R1 ;RESTORE OFFSET TO FIELDU20$: RETURN ;$;+8;**-$ACINP-INCREMENT PROCESSOR SPECIFIC FIELD IN THE SAB!;**-$ACINC-INCREMENT FIELD IN SAB0;,@; THESE TWO ROUTINES WILL INCREMENT A FIELD IN THE SAB. IF ENTRYB; IS AT $ACINP, THEN THE FIELD IS INDEXED BY THE PROCESSOR NUMBER.;S ; INPUTS:.;L+; R0 = SAB OFFSET TO INCREMENT + 140002R#; (SP) = RETURN ADDRESS OF CALLERM+; 2(SP) = SAVED R0 PRIOR TO LOADING OFFSETM;( ; OUTPUTS:;E4; R0 IS RESTORED FROM PREVIOUS VALUE, STACK CLEANED;- .IF DF X$$ACC$ACINP:: ;REFERENCE LABEL .IF DF M$$PRO# MOV R0,-(SP) ;SAVE OFFSET INTO SABS) MOVB $PROC2,R0 ;GET PROCESSOR WORD INDEX ASL R0 ;MAKE IT DOUBLEWORD ADD (SP)+,R0 ;ADJUST OFFSET .ENDC ; DF M$$PRO$$ACINC::MOV KISAR6,-(SP) ;SAVE APR 61 MOV $SABPT,KISAR6 ;POINT TO SYSTEM ACCOUNT BLOCKE2 BEQ 10$ ;IF EQ THERE IS NONE, RESTORE AND RETURN* ADD #1,(R0) ;INCREMENT LOW HALF OF COUNT) ADC -(R0) ;AND HIGH HALF IF APPROPRIATER+10$: MOV (SP)+,KISAR6 ;RESTORE EXEC MAPPING-% MOV (SP)+,R0 ;RESTORE RETURN ADDRESSE' RTS R0 ;RESTORE R0 AND RETURN TO USER( .IFF ;X$$ACCI$ACINP::$ACINC:: .ENDC ;X$$ACC .IFF A$QTRAN::$QTRN1::$QTRN2::$QACNT::$ALACC::$TMSTP::$CPUTM::$CPUT1::$ALTAB::$ACINP:: $ACINC:: E .ENDC V A .ENDAR6 ;POINT TO SYSTEM ACCOUNT BLOCKE2 BEQ 10$ ;IF EQ THERE IS NONE, RESTORE AND RETURN* ADD #1,(R0) ;INCREMENT LOW HALF OF COUNT) ADC -(R0) ;AND HIGH HALF IF APPROPRIATER+10$: MOV (SP .TITLE AFSUBU .IDENT /01.01/ N; ; COPYRIGHT (C) 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; A; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDB9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;.; VERSION 01.01 ;; J. E. PROVINO 18-JUL-78W;A; MODIFIED BY:; ; B. S. MCCARTHY 10-JUN-81;L5; BM122 -- REMOVAL OF TASK HEADERS FROM PRIMARY POOL ;!; CPU AFFINITY COMMON SUBROUTINESD;1;+'; **-$TSTAT-TEST AFFINITY (SPECIFY TCB) '; **-$TSTAP-TEST AFFINITY (SPECIFY PCB)N(; **-$TSTAM-TEST AFFINITY (SPECIFY MASK);Q<; THESE ROUTINES DETERMINE IF A SPECIFIED RUN MASK IS VALID.;I ; INPUTS:A;C; R0=TCB ADDRESS ($TSTAT); PCB ADDRESS ($TSTAP)I; RUN MASK ($TSTAM);E ; OUTPUTS:;O; C=1 IF RUN MASK IS INVALID; C=0 IF RUN MASK IS VALID;-  .  .IF DF M$$PRO .ENABL LSB-&$TSTAT::MOV R0,-(SP) ;SAVE TCB ADDRESS# MOV T.RRM(R0),R0 ;GET TCB RUN MASKU BR 10$ ;GO TO COMMON CODEE&$TSTAP::MOV R0,-(SP) ;SAVE PCB ADDRESS# MOV P.RRM(R0),R0 ;GET PCB RUN MASKS BR 10$ ;GO TO COMMON CODES#$TSTAM::MOV R0,-(SP) ;SAVE RUN MASK 10$: MOV R1,-(SP) ;SAVE R1# MOV $URMST,R1 ;GET URM STATUS WORDE COM R1 ;COMPLEMENT ITD+ BIT R0,R1 ;ARE THE SPECIFIED RUNS ONLINE?  BNE 40$ ;NO IF NEF@ MOV #<-2>,R1 ;POINT TO TABLE ENTRY FOR LAST PROCESSOR$20$: CLC ;ASSUME RUN MASK IS VALID+ BIT $BTMSK(R1),$URMST ;IS THIS CPU ONLINE?M BEQ 30$ ;NO IF EQM4 BIT $CRMTB(R1),R0 ;IS MASK VALID ON THIS PROCESSOR? BEQ 50$ ;YES IF EQ*30$: SUB #2,R1 ;POINT TO NEXT TABLE ENTRY BGE 20$ ;MORE ENTRIES IF GE:40$: SEC ;RUN MASK IS INVALID:$50$: MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R0 ;W RETURNM .DSABL LSBE I;+3; **-SETAT-SET UP REQUIRED RUN MASK (TCB SPECIFIED)$3; **-SETAP-SET UP REQUIRED RUN MASK (PCB SPECIFIED) 6; **-SETAH-SET UP REQUIRED RUN MASK (HEADER SPECIFIED);LG; THESE ROUTINES SET UP THE REQUIRED RUN MASK IN THE CALLING TASK'S TCBB; ; INPUTS:0;S; R0=TCB ADDRESS ($SETAT)O; PCB A00}__NDDRESS ($SETAP)0; HEADER ADDRESS ($SETAH);E ; OUTPUTS:;$; T.RRM IS SET UP IN THE TCB;- U8$SETAT::MOV T.PCB(R0),R0 ;GET ADDRESS OF TASK REGION PCB$SETAP:: ;REFERENCE LABELS .IF DF X$$HDR( MOV KISAR6,-(SP) ;SAVE PREVIOUS MAPPING+ MOV P.HDR(R0),-(SP) ;GET ADDRESS OF HEADER " BNE 5$ ;IF NE HEADER IS RESIDENT0 MOV P.REL(R0),KISAR6 ;MAP TO NONRESIDENT HEADER0 MOV #140000,(SP) ;SET VIRTUAL ADDRESS OF HEADER/5$: MOV (SP)+,R0 ;GET VIRTUAL ADDRESS OF HEADERE+ CALL $SETAH ;USE HEADER SPECIFIED ROUTINE + MOV (SP)+,KISAR6 ;RESTORE PREVIOUS MAPPING RETURN ;T .IFF ; DF X$$HDRU( MOV P.HDR(R0),R0 ;GET ADDRESS OF HEADER .ENDC ; DF X$$HDR$$SETAH::MOV R1,-(SP) ;SAVE REGISTERS MOV R2,-(SP) ;( MOV R3,-(SP) ;S& CLR -(SP) ;CLEAR CALCULATED RUN MASK7 MOV H.WND(R0),R0 ;POINT TO THE NUMBER OF WINDOW BLOCKSP, MOV (R0)+,-(SP) ;SAVE THE NUMBER OF WINDOWS+ MOV (R0),R3 ;SAVE TASK REGION PCB ADDRESSR)10$: MOV (R0),R1 ;IS THIS WINDOW MAPPED?H BEQ 20$ ;NO IF EQ 1 BIS P.RRM(R1),2(SP) ;CALCULATE REQUIRED RUN MASKR)20$: ADD #W.BLGH,R0 ;POINT TO NEXT WINDOW. DEC (SP) ;ANY WINDOWS LEFT?R BGT 10$ ;YES IF GT$ MOV P.TCB(R3),R0 ;POINT TO TASK TCB TST (SP)+ ;CLEAN THE STACK9 MOV (SP)+,T.RRM(R0) ;MOVE CALCULATED RUN MASK TO THE TCBC MOV (SP)+,R3 ;RESTORE REGISTERS MOV (SP)+,R2 ;  MOV (SP)+,R1 ;B RETURNM ( .ENDC ; E .ENDMBER OF WINDOWS+ MOV (R0),R3 ;SAVE TASK REGION PCB ADDRESSR)10$: MOV (R0),R1 ;IS THIS WINDOW MAPPED?H BEQ 20$ ;NO IF EQ 1 BIS P .TITLE BFCTLP .IDENT /07/ E;N ; COPYRIGHT (C) 1974, 1978, 1979/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.E;AA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USEDV9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.R;B ; VERSION 07;.; D. N. CUTLER 26-DEC-73;N; PREVIOUSLY MODIFIED BY:A;R; D. N. CUTLER; T. J. MILLER;1; MODIFIED BY:;A; T. J. MILLER 9-MAY-77E;*; TM082 -- SAVE AND RESTORE R5 IN $BLXIO.;S; T. J. MILLER 14-AUG-77;T;; TM099 -- REMOVE UNEEDED CONDITIONALIZATION FOR RSX-11M+. ; ; J. E. PROVINO 24-JUN-79 ;I:; JP131 -- CHANGE CONDITIONALS FOR NEW REAL TIME DEVICES.;I;D; BUFFER CONTROL ROUTINESL;E; MACRO LIBRARY CALLSA;R .MCALL HWDDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS;+*; **-$GTBYT-GET NEXT BYTE FROM USER BUFFER;FB; THIS ROUTINE IS CALLED TO GET THE NEXT BYTE FROM THE USER BUFFERC; AND RETURN IT TO THE CALLER ON THE STACK. AFTER THE BYTE HAS BEENL0; FETCHED, THE NEXT BYTE ADDRESS IS INCREMENTED.;E ; INPUTS:D;N:; R5=ADDRESS OF THE UCB THAT CONTAINS THE BUFFER POINTERS.; ; OUTPUTS:; <; THE NEXT BYTE IS FETCHED FROM THE USER BUFFER AND RETURNEDC; TO THE CALLER ON THE STACK. THE NEXT BYTE ADDRESS IS INCREMENTED.$;H*; ALL REGISTERS ARE PRESERVED ACROSS CALL.;- .ENABL LSBB0$GTBYT::MOV (SP),-(SP) ;DUPLICATE RETURN ADDRESS* MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING ) MOV U.BUF(R5),KISAR6 ;MAP TO USER BUFFER 8 MOVB @U.BUF+2(R5),4(SP) ;GET NEXT BYTE FROM USER BUFFER* MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING. BR 20$ ;TAKE COMMON EXIT FOR ADDRESS UPDATE ;+(; **-$PTBYT-PUT NEXT BYTE IN USER BUFFER;D>; THIS ROUTINE IS CALLED TO PUT A BYTE IN THE NEXT LOCATION IND; USER BUFFER. AFTER THE BYTE HAS BEEN STORED, THE NEXT BYTE ADDRESS; IS INCREMENTED.; ; INPUTS:S;:; R5=ADDRESS OF THE UCB THAT CONTAINS THE BUFFER POINTERS.B; 2(SP)=BYTE TO BE STORED IN THE NEXT LOCATION OF THE USER BUFFER.;F ; OUTPUTS:;B8; THE BYTE IS STORED IN THE USER BUFFER AND REMOVED FROM2; THE STACK. THE NEXT BYTE ADDRESS IS INCREMENTED.; *; ALL REGISTERS ARE PRESERVED ACROSS CALL.;-1$PTBYT::MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING D, MOV U.BUF(R5),KISAR6 ;MAP TO USER BUFFER 3 MOVB 4(SP),@U.BUF+2(R5) ;STORE BYTE IN USER BUFFERE* MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING/ MOV (SP)+,(SP) ;COLLAPSE STACK REMOVING BYTE U. BR 20$ ;TAKE COMMON EXIT FOR ADDRESS UPDATE ;+*; **-$GTWRD-GET NEXT WORD FROM USER BUFFER;BB; THIS ROUTINE IS CALLED TO GET THE NEXT WORD FROM THE USE00_y_TADATADATADATADATADATADATADATADATAR BUFFERC; AND RETURN IT TO THE CALLER ON THE STACK. AFTER THE WORD HAS BEENR/; FETCHED, THE NEXT WORD ADDRESS IS CALCULATED.S;; ; INPUTS:T;P:; R5=ADDRESS OF THE UCB THAT CONTAINS THE BUFFER POINTERS.;( ; OUTPUTS:;)<; THE NEXT WORD IS FETCHED FROM THE USER BUFFER AND RETURNEDB; TO THE CALLER ON THE STACK. THE NEXT WORD ADDRESS IS CALCULATED.;;*; ALL REGISTERS ARE PRESERVED ACROSS CALL.;-2$GTWRD::MOV (SP),-(SP) ;DUPLICATE RETURN ADDRESS * MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING ) MOV U.BUF(R5),KISAR6 ;MAP TO USER BUFFER 7 MOV @U.BUF+2(R5),4(SP) ;GET NEXT WORD FROM USER BUFFERX* MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING. BR 10$ ;TAKE COMMON EXIT FOR ADDRESS UPDATE ;+ R(; **-$PTWRD-PUT NEXT WORD IN USER BUFFER;T=; THIS ROUTINE IS CALED TO PUT A WORD IN THE NEXT LOCATION INSD; USER BUFFER. AFTER THE WORD HAS BEEN STORED, THE NEXT WORD ADDRESS; IS CALCULATED.; ; INPUTS:D;O:; R5=ADDRESS OF THE UCB THAT CONTAINS THE BUFFER POINTERS.=; 2(SP)=WORD TO BE STORED IN THE NEXT LOCATION OF THE BUFFER.F; ; OUTPUTS:;(8; THE WORD IS STORED IN THE USER BUFFER AND REMOVED FROM1; THE STACK. THE NEXT WORD ADDRESS IS CALCULATED. ;T*; ALL REGISTERS ARE PRESERVED ACROSS CALL.;-1$PTWRD::MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING , MOV U.BUF(R5),KISAR6 ;MAP TO USER BUFFER 1 MOV 4(SP),@U.BUF+2(R5);STORE WORD IN USER BUFFERN* MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING/ MOV (SP)+,(SP) ;COLLAPSE STACK REMOVING WORD 610$: INC U.BUF+2(R5) ;CALCULATE ADDRESS OF NEXT WORD 320$: INC U.BUF+2(R5) ;INCREMENT NEXT BYTE ADDRESS H2 CMP U.BUF+2(R5),#160000 ;OVERFLOW 28K BOUNDARY?  BLO 30$ ;IF LO NOX% SUB #20000,U.BUF+2(R5) ;REDUCE BY 4KL+ ADD #200,U.BUF(R5) ;ADJUST RELOCATION BIAS30$: RETURN S .DSABL LSBE;+2; **-$GTCWD-GET NEXT WORD FROM USER CONTROL BUFFER;C; THIS ROUTINE IS CALLED TO GET THE NEXT WORD FROM THE USER CONTROL E; BUFFER AND RETURN IT TO THE CALLER ON THE STACK. AFTER THE WORD HAS 4; BEEN FETCHED, THE NEXT WORD ADDRESS IS CALCULATED.; ; INPUTS:U;F:; R5=ADDRESS OF THE UCB THAT CONTAINS THE BUFFER POINTERS.;0 ; OUTPUTS:;BD; THE NEXT WORD IS FETCHED FROM THE USER CONTROL BUFFER AND RETURNEDB; TO THE CALLER ON THE STACK. THE NEXT WORD ADDRESS IS CALCULATED.;*; ALL REGISTERS ARE PRESERVED ACROSS CALL.;-1 .IF DF A$$D01!A$$F11!I$$CAD!U$$ADM!I$$PAD!I$$P14 0$GTCWD::MOV (SP),-(SP) ;DUPLICATE RETURN ADDRESS* MOV KISAR6,-(SP) ;SAVE CURRENT MAPPING 1 MOV U.CBF(R5),KISAR6 ;MAP TO USER CONTROL BUFFERR7 MOV @U.CBF+2(R5),4(SP) ;GET NEXT WORD FROM USER BUFFERH* MOV (SP)+,KISAR6 ;RESTORE CURRENT MAPPING5 ADD #2,U.CBF+2(R5) ;CALCULATE ADDRESS OF NEXT WORD S/ BIT #20000,U.CBF+2(R5) ;OVERFLOW 4K BOUNDRY? N BEQ 10$ ;IF EQ NOW+ BIC #20000,U.CBF+2(R5) ;CLEAR OVERFLOW BITR+ ADD #200,U.CBF(R5) ;ADJUST RELOCATION BIAS 10$: RETURN ;  .ENDC;+; **-$BLXIO-MOVE BLOCK OF DATA.L;TC; THIS ROUTINE IS CALLED TO MOVE DATA IN MEMORY IN A MAPPED SYSTEM.C;R ; INPUTS:M;T; R0=NUMBER OF BYTES TO MOVE..; R1=SOURCE APR5 BIAS.; R2=SOURCE DISPLACEMENT.M; R3=DESTINATION APR6 BIAS.E; R4=DESTINATION DISPLACEMENT.;L ; OUTPUTS:;O!; DESCRIBED MOVE IS ACCOMPLISHED.(; R0 ALTERED D; R1,R3 PRESERVED 8; R2,R4 POINT TO LAST BYTE OF SOURCE AND DESTINATION + 1 ; ?; NOTE: THE COUNT INPUT IN R0 MUST NOT BE ZERO AND IT MUST NOT ;; BE LARGE ENOUGH TO CROSS APR BOUNDARIES (THIS TYPICALLY D!; MEANS A MAXIMUM OF 4K-63). ;- !$BLXIO::MOV R5,-(SP) ;SAVE R5 T( MOV #KISAR6,R5 ;POINT TO KERNAL APR6 $ MOV (R5),-(SP) ;SAVE KERNAL APR6 / MOV R3,(R5) ;SET UP KERNAL APR6 FOR TRANSFER % MOV -(R5),-(SP) ;SAVE KERNAL APR5 P/ MOV R1,(R5) ;SET UP KERNAL APR5 FOR TRANSFER 2 .IF NDF N$$MOVY%10$: MOVB (R2)+,(R4)+ ;MOVE NEXT BYTE  DEC R0 ;MORE TO MOVE?U BNE 10$ ;IF NE YES .IFF MOV #1,-(SP) ;PUSH LOW BIT MASK" BIT (SP),R2 ;SOURCE ADDRESS ODD? BEQ 10$ ;IF EQ NOO" MOVB (R2)+,(R4)+ ;MOVE FIRST BYTE DEC R0 ;REDUCE COUNT+10$: BIT (SP),R400__N ;DESTINATION ADDRESS ODD? ( BNE 50$ ;IF NE YES, PERFORM BYTE MOVES)20$: SUB #N$$MOV*2,R0 ;MOVE ENTIRE BLOCK?F BCC 40$ ;IF CC YES# BIC R0,(SP) ;REMAINING COUNT ODD?  BNE 30$ ;IF NE NOO DEC R0 ;ADJUST NEGATIVE COUNTN-30$: SUB R0,PC ;INDEX INTO MOVE INSTRUCTIONSB40$: ;REF LABEL .REPT N$$MOV$ MOV (R2)+,(R4)+ ;MOVE A WORD, .ENDR BCC 20$ ;IF CC MORE TO GOU" BR 80$ ;EXIT THROUGH COMMON CODE50$: ASL R0 ;DOUBLE COUNT)60$: SUB #N$$MOV*2,R0 ;MOVE ENTIRE BLOCK?T BCC 70$ ;IF CC YES. SUB R0,PC ;ELSE INDEX INTO MOVE INSTRUCTIONS70$: ;REF LABEL .REPT N$$MOVN MOVB (R2)+,(R4)+ ;MOVE A BYTE .ENDR BCC 60$ ;IF CC MORE TO GOE80$: TST (SP)+ ;POP CONSTANTU BNE 90$ ;IF NE NO MORE TO MOVE! MOVB (R2)+,(R4)+ ;MOVE LAST BYTE090$: ;REF LABEL .ENDC( MOV (SP)+,(R5)+ ;RESTORE KERNAL APR5 ' MOV (SP)+,(R5) ;RESTORE KERNAL APR6 B MOV (SP)+,R5 ;RESTORE R5 E RETURN ; .END SUB #N$$MOV*2,R0 ;MOVE ENTIRE BLOCK?T BCC 7 .TITLE BSDRVR .IDENT /01.02/ ;P5; COPYRIGHT (C) 1981 BY DIGITAL EQUIPMENT CORPORATION2; ALL RIGHTS RESERVED.;O<; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.;N; VERSION 01.021;;; M. B. GROSSMAN 15-JUL-79;C; DT03/DT07 BUS SWITCH;C; MODIFIED BY:;;; B. S. MCCARTHY 1-FEB-802;)1; BM058 -- UPDATE COMPLEMENT TABLE ($CRMTB) WHENI(; UPDATING CPU RUN MASK TABLE ($URMTB); ; B. S. MCCARTHY 1-MAR-82;I'; BM242 -- DON'T LOG BUS SWITCH ERRORSY;H; MACRO LIBRARY CALLSQ;M .MCALL HWDDF$,PKTDF$,UCBDF$$ HWDDF$ ;DEFINE HARDWARE REGISTERS$ PKTDF$ ;DEFINE I/O PACKET OFFSETS UCBDF$ ;DEFINE UCB OFFSETSE;T;H0; DEVICE CONTROL STATUS REGISTER BIT ASSIGNMENTS; TMO= 100000 ;TIMEOUT ERRORPWF= 040000 ;POWERFAIL ERROR$EXTINT= 010000 ;EXTERNAL INTERRUPTCONN= 000200 ;CONNECT STATUSIE= 000100 ;INTERRUPT ENABLEREQ= 000001 ;REQUEST BITRES= 001000 ;RESET BIT;T; SPECIAL UCB OFFSETS2;-.U.ASTA=U.CNT+2 ;AST ADDRESS OFFSET (U.CNT+2)2U.ASTE=U.ASTA+2 ;AST ERROR CODE OFFSET (U.CNT+4); ; SPECIAL SCB STATUS CODES$PWFB=2 ;BUSY DUE TO POWER FAILURE!QIOB=1 ;BUSY DUE TO NORMAL QIO;; DRIVER DISPATCH TABLEE;T DDT$ BS,D$$T07S;+); **-BSINI-DT03/DT07 BUS SWITCH INITIATOR ;W;; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE WHEN28; AN I/O REQUEST IS QUEUED AND AT THE END OF A PREVIOUS 9; I/O OPERATION TO PROPAGATE THE EXECUTION OF THE DRIVER.C2; IF THE SPECIFIED CONTROLLER IS NOT BUSY, THEN AN1; ATTEMPT IS MADE TO DEQUEUE THE NEXT I/O REQUEST 6; IF THE CONTROLLER IS BUSY A RETURN TO THE CALLER IS 6; EXECUTED. IF THE DEQUEUE ATTEMPT IS SUCCESSFUL, THEN1; THE NEXT I/O OPERATION IS INITIATED. THIS CYCLE ); CONTINUES UNTIL THE I/O QUEUE IS EMPTY.S;C ; INPUTS: ;W:; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.; ; OUTPUTS:;T4; IF THE SPECIFIED CONTROLLER IS NOT BUSY AND AN I/O%; REQUEST IS WAITING TO BE PROCESSED,R0; THEN THE REQUEST IS DEQUEUED AND THE I/O OPER-; ATION IS INITIATED.M;- .ENABL LSBNBSINI:0 GTPKT$ BS,,,,T ;GET NEXT I/O PACKET TO PROCESS; ;R2; THE FOLLOWING ARGUMENTS ARE RETURNED BY $GTPKT :; '; R1=ADDRESS OF THE I/O REQUEST PACKET.E; R2=PHYSICAL UNIT NUMBER.; R3=CONTROLLER INDEX.); R4=ADDRESS OF THE STATUS CONTROL BLOCK. :; R5=ADDRESS OF THE UCB OF THE CONTROLLER TO BE INITIATED.;1; DT03/DT07 BUS SWITCH I/O REQUEST PACKET FORMAT:O; "; WD. 00 -- I/O QUEUE THREAD WORD.0; WD. 01 -- REQUEST PRIORITY, EVENT FLAG NUMBER.5; WD. 02 -- ADDRESS OF THE TCB OF THE REQUESTOR TASK.G=; WD. 03 -- POINTER TO 2ND LUN WORD IN REQUESTOR TASK HEADER. >; WD. 04 -- CONTENTS OF 1ST LUN WORD IN REQUESTOR TASK HEADER.1; WD. 05 -- I/O FUNCTION CODE (IO.RLB OR IO.WLB).E0; WD. 06 -- VIRTUAL ADDRESS OF I/O STATUS BLOCK.0; WD. 07 -- RELOCATION BIAS OF I/O STATUS BLOCK.; IF FUNCTION IO.DIS:,; WD. 12 -- TIMEOUT. (LESS THAN 254 SECONDS); WD. 13 -- CPU. (PORT NUMBER); IF FUNCTION IO.CON:1; WD. 00_y_TADATADATADATADATADATADATADATADATA12 -- RETRY COUNT (-1 MEANS INFINITE RETRY)4; WD. 13 --TARGET CPU (CLOSELY COUPLED CPU'S LETTER); IF FUNCTION IO.ATT:; WD. 12 -- AST ADDRESS.; IF FUNCTION IO.SWI:.; WD. 12 -- CPU (CLOSELY COUPLED CPU'S LETTER);E;;+=; THE FOLLOWING ROUTINE INITIALIZES THE I/O FUNCTIONS HANDLEDT8; BY THIS DRIVER. ( ATTACH,DETACH,CSR,CONNECT,DISCONNECT;; AND SWITCH) THE SWITCH FUNCTION COMBINES VARIOUS SEGMENTS ;; OF THE DISCONNECT AND CONNECT CODE ALONG WITH UNIQUE CODEE>; OF ITS OWN IN ORDER TO PERFORM A TRANSFER OF THE BUS BETWEEN?; TWO CLOSELY COUPLED PROCESSORS. IT FIRSTS BEGINS A DISCONNECTE@; FUNCTION STOPPING PRIOR TO RELEASING THE BUS FROM THE CPU THAT<; IS TO BE DISCONNECTED. IT THEN ISSUES A REQUEST ON THE CPU:; THAT IS TO BE CONNECTED. WHEN THE CPU TO BE DISCONNECTED;; RECEIVES AN EXTERNAL INTERRUPT FROM THE SPECIFIED CONNECTI;; CPU IT THEN COMPLETES THE DISCONNECT AND ALLOWS THE NEWLYS-; CONNECTED CPU TO RECEIVE CONTROL OF THE BUSA;-;T4 CMPB #IO.DET/^D<256>,I.FCN+1(R1) ;DETACH FUNCTION? BNE 10$ ;IF NE NOE" CLR U.ASTA(R5) ;CLEAR AST ADDRESS% CLR U.ASTE(R5) ;CLEAR AST ERROR CODEC' TST S.KRB(R4) ;IS PROCESSOR CONNECTED?F BEQ 15$ ;IF EQ NOS% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESSE BR 50$ ;DISCONNECT CPU910$: CMPB #IO.ATT/^D<256>,I.FCN+1(R1) ; ATTACH FUNCTION?V BNE 20$ ;IF NE NOU- MOV I.PRM(R1),U.ASTA(R5) ;STORE AST ADDRESSO+ MOV #1,U.ASTE(R5) ;STORE DEFAULT AST ERROR15$: JMP IOSUC ;COMPLETE I/OR.20$: MOV #IE.BAD&377,R0 ;ASSUME BAD PARAMETERS7 CMPB #IO.CON/^D<256>,I.FCN+1(R1) ; CONNNECT FUNCTION?U BEQ 110$ ;IF EQ YESD TST S.KRB(R4) ;CONNECTED? BEQ 44$ ;IF EQ NOT& MOV @S.KRB(R4),R2 ;STORE CSR ADDRESS 2 CMPB #IO.CSR/^D<256>,I.FCN+1(R1) ; CSR FUNCTION? BNE 30$ ;IF NE NOC' MOV (R2),R1 ;PREPARE FOR CSR TRANSFERC BR 15$;:30$: CMPB #IO.SWI/^D<256>,I.FCN+1(R1) ; SWITCH FUNCTION ? BNE 40$ ;IF NE NOD# MOV I.PRM(R1),R3 ;STORE CPU LETTERA BR 120$ ;START CONNECT PROCESS/40$: CMP #IO.DIS,I.FCN(R1) ;REGULAR DISCONNECT? + BEQ 50$ ;IF EQ YES, ELSE SPEC. DISCONNECT ! CMP #3,I.PRM+2(R1) ;PORT # LEGAL; BLO 44$ ;IF LO NOB, CMP I.PRM(R1),#254. ;TIMEOUT LESS THAN MAX. BLO 45$ ;IF LO NOS44$: JMP IOEND*45$: MOVB I.PRM(R1),S.CTM(R4) ;SET TIMEOUT BNE 48$ ;IF NE USE SPEC. VALUE, MOVB S.ITM(R4),S.CTM(R4) ;ELSE USE DEFAULT 48$: RETURNWPMATCH: ;REF LABELS#50$: MOV #IS.SUC&377,R0 ;SUCCESSFULD DISCON: BIS #RES,(R2) ;RESET BUS- BIC #IE!REQ,(R2) ;CLEAR INT. ENABLE AND REQ.P+ BIC U.CW3(R5),@$CPURM;UPDATE PROCESSOR URMQ5 BIS U.CW3(R5),@$CPCRM ;UPDATE COMPLEMENT OF RUN MASK+ CMPB #QIOB,S.STS(R4) ;REAL I/O? BNE 75$ ;IF NE NOR5 CMPB #IO.SWI/^D<256>,I.FCN+1(R1) ; SWITCH FUNCTION? BNE 70$ ;IF NE NOM6 MOV I.PRM+10(R1),S.URM(R4) ;RESTORE CONNECT CPU'S URM, MOV I.PRM+12(R1),S.KRB(R4) ;RESTORE CONNECT ; CPU'S KRB POINTER$ CALL $CFORK ;SWITCH TO CONNECT CPU% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESSI" BIT #CONN,(R2) ;IS CPU CONNECTED? BEQ 60$ ;IF EQ NOB JMP IOCMP+60$: MOV #IE.CNR&377,R0 ;CONNECTION FAILUREQ"70$: CLR S.KRB(R4) ;PUT SB OFFLINE BR 44$ ;ENDM"75$: CLR S.KRB(R4) ;PUT SB OFFLINE* TST U.ASTA(R5) ;IS AST ADDRESS SPECIFIED? BEQ 48$ ;IF EQ NOI" MOV #6*2,R1 ;LENGTH OF AST BLOCK$ CALL $ALOCB ;ALLOCATE AN AST BLOCK' BCS 48$ ;IF ALLOCATE FAIL JUST RETURNR TST (R0)+ ;SKIP OVER LINK WORD% MOV R1,(R0)+ ;SAVE SIZE OF AST BLOCKO& MOV R0,R1 ;SAVE BEGINNING ADDRESS OF CMP -(R1),-(R1) ; AST BLOCKI1 MOV #10*2,(R0)+ ;SAVE BYTES TO ALLOCATE ON STACK- MOV U.ASTA(R5),(R0)+ ;SAVE AST TRAP ADDRESS0, MOV #1,(R0)+ ;SAVE NUMBER OF AST PARAMETERS' MOV U.ASTE(R5),(R0) ;SAVE ERROR NUMBERT, MOV U.ATT(R5),R0 ;GET ADDRESS OF TASK'S TCB- CALLR $QASTT ;INSERT AST BLOCK IN AST QUEUEB;K/;THE FOLLOWING CODE INSURES THAT THE CPU TO BE .;CONNECTED IS ONLINE, HAS ACCESS TO THE SWITCH;AND THAT ITS KRB IS ONLINE.;S9110$: MOVB I.PRM+2(R1),R3 ;STORE CPU LETTER IF TARGET CPU  BNE 120$ ;IF NE YES & MOVB $PROC2,R3 ;STORE CPU WORD OFFSET BR 125$-120$: SUB #101,R3 ;CONVERT ASCII LETTER TO #T+ BLT 121$ ;CPU LETTER LESS THAN00__N 'A'- ERRORS ASL R3 ;CONVERT TO WORD OFFSET' BIT $BTMSK(R3),$URMST ;IS CPU ONLINE?G BNE 125$ ;IF NE YESB MOV #IE.OFL&377,R0 ;T121$: JMP IOEND 3125$: MOV $BTMSK(R3),R3 ;STORE TARGET CPU MASK WORDT MOV R4,R1/ ADD #S.KTB,R1 ;STORE ADDRESS OF FIRST KTB WORDT/140$: MOV (R1)+,R2 ;MOVE ADDRESS OF KRB INTO R2)) BEQ 121$ ;ADDRESS TERMINATOR? IF EQ YES1( BIT R3,K.URM(R2) ;DOES CPU HAVE ACCESS? BEQ 140$ ;IF EQ NO' MOV #IE.OFL&377,R0 ;ASSUME OFFLINE KRBT( BIT #KS.OFL,K.STS(R2) ;IS KRB OFFLINE? BNE 121$ ;IF NE YES;% MOV S.PKT(R4),R1 ;RESTORE I/O PACKET,5 CMPB #IO.SWI/^D<256>,I.FCN+1(R1) ; SWITCH FUNCTION?# BNE 150$ ;IF NE NO;M5;NOTE!!! THE PORT NUMBER OF THE DT07 THAT CORRESPONDSK9;TO A SPECIFIC CPU/KRB IS STORED IN THE LOW BYTE OF K.PRMK;W3 MOVB K.PRM(R2),I.PRM+2(R1) ;STORE CONN. CPU PORT #)7 MOV S.URM(R4),I.PRM+4(R1) ;STORE DISCONNECT CPU'S URMR9 MOV S.KRB(R4),I.PRM+6(R1) ;STORE DIS. CPU'S KRB POINTERE1150$: MOV I.PRM(R1),U.CW2(R5) ;STORE RETRY COUNTS+ MOV K.URM(R2),S.URM(R4) ;STORE URM IN SCB;. MOV R2,S.KRB(R4) ;STORE POINTER TO KRB IS SCB- CALL $CFORK ;SWITCH, IF REQ., TO PROPER CPU#% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESSE1 MOV #IE.BAD&377,R0 ;ASSUME CPU ALREADY CONNECTEDP" BIT #CONN,(R2) ;IS CPU CONNECTED? BEQ 160$ ;F EQ NOM, JMP IOCMP ;COMPLETE CONNECTION IF REQUIRED2160$: MOV S.PKT(R4),R1 ;RESTORE I/O PACKET ADDRESS5 CMPB #IO.SWI/^D<256>,I.FCN+1(R1) ; SWITCH FUNCTION?' BNE CONBS ;IF NE NOO' MOVB S.ITM(R4),S.CTM(R4) ;SET TIMEOUTS;M4;THE SWITCH FUNCTION ISSUES A CONNECT REQUEST ON THE3;CPU TO BE CONNECTED AFTER RESTORING THE DISCONNECTS4;CPU'S URM TO S.URM. THIS INSURES THAT THE INTERRUPT5;THAT WILL BE CAUSED BY THE DISCONNECT CPU'S EXTERNALD6;INTERRUPT BIT BEING SET WILL CALL THE DISCONNECT CPU.; 5 MOV S.URM(R4),I.PRM+10(R1) ;STORE CONNECT CPU'S URMD3 MOV I.PRM+4(R1),S.URM(R4) ;RESTORE DIS. CPU'S URM2 BIS #S2.ACT,S.ST2(R4) ;SET CONTROLLER ACTIVE FLAG BIS #REQ,(R2) ;ASSERT REQUEST* RETURN ;AWAIT CONNECTED CPU'S INTERRUPT-CONBS: MOVB S.ITM(R4),S.CTM(R4) ;SET TIMEOUTT2 BIS #S2.ACT,S.ST2(R4) ;SET CONTROLLER ACTIVE FLAG0 BIS #IE!REQ,(R2) ;ENABLE INTERRUPTS ASSERT REQ. RETURN .DSABL LSB ;+6; THE POWERFAIL ROUTINE ATTEMPTS TO RESTORE THE STATE <; OF THE SYSTEM PRIOR TO THE POWERFAIL. IF I/O WAS EXECUTING<; THE TIMEOUT IS RESET AND THE PREVIOUS OPERATION CONTINUED.:; IF THE SB WAS PREVIOUSLY CONNECTED TO THIS PROCESSOR AND;; NO I/O WAS EXECUTING A CHECK FOR CONNECTION IS MADE AND AA%; RECONNECT SEQUENCE BEGUN IF NEEDED.M;- T+BSPWF: TST S.KRB(R4) ;WAS SWITCH CONNECTED?S BGT 5$ ;IF GT YESL JMP BSINI,5$: TSTB S.STS(R4) ;IS SWITCH CURRENTLY BUSY BEQ 20$ ;IF EQ NOS) MOVB S.ITM(R4),S.CTM(R4) ;RESET TIMEOUTE 10$: RETURNR)20$: MOV @S.KRB(R4),R2 ;STORE CSR ADDRESSP) BIT #CONN,(R2) ;IS CPU CONNECTED TO BUS?U BNE 10$ ;IF NE YES- MOV #2,U.ASTE(R5) ;ASSUME FAILURE TO CONNECTV) MOVB #PWFB,S.STS(R4) ;SET STATUS TO BUSYO BR CONBS ;CONNECT SWITCH;++; **-$BSINT DT03/DT07 BUS SWITCH INTERRUPTSE,; INTERRUPTS CAN BE ISSUED BY THE BUS SWITCH*; FOR DEVICE POWERFAIL, A REQUEST FOR THE *; BUS BY ANOTHER CPU, TIMEOUT OF A REQUEST5; FOR CONNECT, TIMEOUT OF THE WATCHDOG TIMER AND UPON4*; RECEIVING A CONNECT TO THE SWITCHED BUS.;-6 INTSE$ BS,PR7,D$$T07 ;;;SAVE REGISTERS & SET PRIORITY' MOV U.SCB(R5),R4 ;;;GET ADDRESS OF SCB  MOV R1,-(SP) ;;;STORE R1;" CMPB #QIOB,S.STS(R4) ;;;REAL I/O? BNE 10$ ;;;IF NE NOU+ MOV S.PKT(R4),R1 ;;;GET I/O PACKET ADDRESS 7 CMPB #IO.SWI/^D<256>,I.FCN+1(R1) ;;; SWITCH FUNCTION?C BNE 10$ ;;;IF NE NO 3 MOV S.KRB(R4),I.PRM+12(R1) ;;;STORE CONNECT CPU'S  ;;; KRB POINTER; MOV I.PRM+6(R1),S.KRB(R4) ;;;RESTORE DISCONNECT CPU'S KRBM+10$: MOV @S.KRB(R4),R1 ;;;STORE CSR ADDRESSI, TST (R1) ;;;WATCHDOG OR REQUEST TIMER SET? BMI 60$ ;;;IF MI YES( BIT #EXTINT,(R1) ;;;EXTERNAL INTERRUPT? BEQ 50$ ;;;IF EQ NOE;;3;THIS SECTION INSURES THAT IF AN EXTERNAL INTERRUPT 6;BIT IS SET THAT IT WILL BE CLEARED IN TIME TO PREVENT8;THE TIMEOUT LOSS OF THE BUS. INITIAL PROCESSING IS DONE500_y_TADATADATADATADATADATADATADATADATA;AT PRIORITY 7 TO INSURE THAT THE TIME LIMIT WILL BE T6;MET AND THAT THE EXECUTIVE TIMEOUT COUNT IS NOT RESET;S" MOV (R1),-(SP) ;;;STORE CSR VALUE- BIC #EXTINT,(R1) ;;;CLEAR EXTERNAL INTERRUPTR MOV R2,-(SP) ;;;STORE R2G MOV R3,-(SP) ;;;STORE R3I, CMPB #QIOB,S.STS(R4) ;;;IS REAL I/O PENDING BNE 40$ ;;;IF NE NO$+ MOV S.PKT(R4),R2 ;;;GET I/O PACKET ADDRESST8 CMPB #IO.SWI/^D<256>,I.FCN+1(R2) ;;;IS THIS AN IO.SWI? BNE 20$ ;;;IF NE NOT# BIT #74,-4(SP) ;;; IS THIS A DT03?A BNE 30$ ;;;IF NE NOA BR 35$ ;;;<20$: CMPB #IO.DIS/^D<256>,I.FCN+1(R2) ;;;IS THIS AN IO.DIS? BNE 40$ ;;;IF NE NON!30$: MOV #4,R3 ;;;MOVE 4 INTO R3O& ASH I.PRM+2(R2),R3 ;;;CREATE CPU MASK' BIT R3,-4(SP) ;;;IS THIS CORRECT CPU?O BEQ 40$ ;;;IF EQ NO;;O:;THIS SECTION IS ENTERED ONLY IF THE PENDING FUNCTION IS A7;SWITCH OR DISCONNECT AND THEN ONLY IF THE CPU CAUSING R.;THE EXTERNAL INTERRUPT WAS THE SPECIFIED ONE.:;NOTE:IF SWITCH IS A DT03 NO CHECKING OF THE SOURCE OF THE7;INTERRUPT IS POSSIBLE AND THE BUS IS NEVER RELEASED IN09;THE CASE WHERE THE FUNCTION WAS A DISCONNECT AND THE BUS6;IS ALWAYS RELEASED IN THE CASE WHERE THE FUNCTION WAS ;A SWITCH.;235$: MOV (SP)+,R3 ;;;RESTORE R3R MOV (SP)+,R2 ;;;RESTORE R2C TST (SP)+ ;;;RESTORE STACK MOV (SP)+,R1 ;;;RESTORE R1O' CALL $FORK ;;;CREATE A SYSTEM PROCESS ) MOV S.PKT(R4),R1 ;GET I/O PACKET ADDRESSI% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESSP JMP PMATCH ;DISCONNECT40$: MOV (SP)+,R3 ;;;RESTORE R3S MOV (SP)+,R2 ;;;RESTORE R2O TST (SP)+ ;;;RESTORE STACK MOV (SP)+,R1 ;;;RESTORE R1H 45$: RETURNS%50$: BIT #PWF,(R1) ;;;BS POWER LOSS?R BEQ 120$ ;;;IF EQ NO;H5;THIS SECTION HANDLES THE CASE OF AN INTERRUPT CAUSEDS5;BY A POWER FAILURE ON THE SWITCHED BUS. PENDING I/O,R4;EXCEPT A DISCONNECT, IS TERMINATED AND A DISCONNECT;IS PERFORMED.;E' BIC #IE,(R1) ;;; CLEAR INTERUPT ENABLEC MOV (SP)+,R1 ;;;RESTORE R1,' CALL $FORK ;;;CREATE A SYSTEM PROCESSC) MOV @S.KRB(R4),R2 ;PUT CSR ADDRESS IN R2M/ CMPB #QIOB,S.STS(R4) ;IS REAL I/O IN PROGRESS?E BEQ 55$ ;IF EQ YES/ MOV #3,U.ASTE(R5) ;AST ERROR CODE=3, POWERFAIL; CLRB S.STS(R4) ;RESET STATUS; BR 75$O055$: MOV S.PKT(R4),R1 ;GET ADDRESS OF I/O PACKET+ CMPB #IO.DIS/^D<256>,I.FCN+1(R1) ;IO.DIS?  BEQ 45$ ;IF EQ YES) MOV #IE.ABO&377,R0 ;ELSE ABORT OPERATIONC MOV #401,R2 ;NO RETRY COUNTC CALL $IODON ;TERMINATE I/O2 MOV U.SCB(R5),R4 ;STORE SCB ADDRESS LOST IN IODON, MOV S.PKT(R4),R1 ;GET ADDRESS OF I/O PACKET% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESS. BR 75$I;E8;THIS SECTION HANDLES AN INTERRUPT CAUSED BY THE TIMEOUT:;BIT BEING SET. IF THIS WAS CAUSED BY A FAILURE TO CONNECT9;AFTER ISSUING A REQUEST, THE RETRY COUNT IS CHECKED AND 9;THE PROPER ACTION TAKEN. IF THIS WAS CAUSED BY A FAILUREQ6;TO RECONNECT AFTER POWERFAIL A DISCONECT IS INITIATED;AND AN OPTIONAL AST ISSUED.;N/60$: BIC #TMO!EXTINT!IE,(R1) ;;;CLEAR CSR BITSR MOV (SP)+,R1 ;;;RESTORE R1I' CALL $FORK ;;;CREATE A SYSTEM PROCESS/% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESS * CMPB #QIOB,S.STS(R4) ;WAS THIS A CONNECT? BEQ 100$ ;IF EQ YESY CLRB S.STS(R4) ;RESET STATUSF3 CMP U.ASTE(R5),#2 ;IS ERROR A POWERFAIL RECONNECT?I BEQ 75$ ;IF EQ YES3 MOV #1,U.ASTE(R5) ;SET AST ERROR =1, TIMEOUT ERRORF&75$: JMP DISCON ;PERFORM A DISCONNECT1100$: MOV S.PKT(R4),R1 ;GET ADDRESS OF I/O PACKETD" TST U.CW2(R5) ;IS RETRY COUNT =0? BEQ 110$ ;IF EQ YES " CMP #-1,U.CW2(R5) ;IS IT NEG. 1? BEQ 105$ ;IF EQ YESR$ DEC U.CW2(R5) ;DECREASE RETRY COUNT105$: JMP CONBS ;TRY AGAINS)110$: MOV #IE.CNR&377,R0 ;CONNECT FAILUREC BR 75$1 120$: MOV (SP)+,R1 ;;;RESTORE R1' CALL $FORK ;;;CREATE A SYSTEM PROCESSR% MOV @S.KRB(R4),R2 ;STORE CSR ADDRESSI( BIT #CONN,(R2) ;IS BUS PHYSICALY CONN.? BEQ 75$ ;IF EQ NO.IOCMP: BIS #IE,(R2) ;ENSURE INTERRUPTS ENABLED" BIS U.CW3(R5),@$CPURM;SET CPU URM5 BIC U.CW3(R5),@$CPCRM ;UPDATE COMPLEMENT OF RUN MASK;. CMPB #QIOB,S.STS(R4) ;WAS THIS A I/O CONNECT? BEQ IOSUC ;IF EQ YES CLRB S.STS(R4) ;RESET STATUSC& MOV #1,U.ASTE(R5) ;RESTORE ERROR CODE& MOV U.CW3(R5),$PFURM;POWERFAIL 00_B_NUNIBUS$ INCB $PWRFL+1 ; ATTACHED DEVICES RETURNL-IOSUC: MOV #IS.SUC&377,R0 ;I/O WAS A SUCCESSR)IOEND: MOV #401,R2 ;NO RETRIES ATTEMPTED2# CALL $IODON ;FINISH I/O OPERATION  JMP BSINI ;NEXT REQUEST(;+>; TIMEOUT IS USED BY IO.DIS TO LIMIT THE AMOUNT OF TIME WAITEDA; FOR A SPECIFIED LOOSELY COUPLED CPU TO ISSUE A CONNECT REQUEST..6; IF THE CORRECT CPU DOES NOT RESPOND A TIMEOUT ERROR 2; IS GENERATED. ALL OTHER TIMEOUT ENTRIES INDICATE; HARDWARE OR POWER PROBLEMS.3;-BSOUT: ;;;REFERENCE LABEL" MOV #IE.TMO&377,R0 ;TIMEOUT ERROR, MOV S.PKT(R4),R1 ;GET ADDRESS OF I/O PACKET1 CMPB #PWFB,S.STS(R4) ;IS THIS A POWERFAIL ENTRY? BNE 5$ ;IF NE NO CLRB S.STS(R4) ;CLEAR STATUSN BR 10$ ;DISCONNECT95$: CMPB #IO.CON/^D<256>,I.FCN+1(R1) ; CONNECT FUNCTION?D BNE 20$ ;IF NE NOO)10$: MOV @S.KRB(R4),R2 ;STORE CSR ADDRESST JMP DISCONC920$: CMPB #IO.SWI/^D<256>,I.FCN+1(R1) ; SWITCH FUNCTION?D BEQ 30$ ;IF EQ YES,R ; ELSE DIS. TO SPEC. CPU TMO# BIS #IE,(R2) ;RE-ENABLE INTERRUPTSN BR IOEND ;END WAIT330$: MOV I.PRM+6(R1),S.KRB(R4) ;RESTORE DISCONNECTS ; CPU'S KRB POINTER BR IOENDH;+,; CANCEL I/O WILL ZERO AN IO.CON RETRY COUNT4; OR SET S.CTM (TIMEOUT COUNT) TO ONE FOR AN IO.DIS.3; TERMINATION THEN OCCURS THROUGH NORMAL CHANNELS.B;-1BSCAN: MOV S.PKT(R4),R1 ;;;GET I/O PACKET ADDRESSD2 CMPB #IO.DIS/^D<256>,I.FCN+1(R1) ;;; DISCONNECT? BNE 10$ ;;;IF NE NOI& MOVB #1,S.CTM(R4) ;;;SET TIMEOUT TO 1 RETURN ;;; 310$: CMPB #IO.CON/^D<256>,I.FCN+1(R1) ;;; CONNECT?N BNE 20$ ;;;IF NE NOI+ MOVB S.ITM(R4),S.CTM(R4) ;;;RESET TIMEOUT ) CLR U.CW2(R5) ;;;SET RETRY COUNT TO ZERO20$: RETURN ;;;L E .ENDO.CON RETRY COUNT4; OR SET S.CTM (TIMEOUT COUNT) TO ONE FOR AN IO.DIS.3; TERMINATION THEN OCCURS THROUGH NORMAL CHANNELS.B;-1BSCAN: MOV S.PKT(R4),R1 ;;;GET I/O PACKET ADDRESSD2 CMPB #IO.DIS/^D<256>,I.FCN+1(R1) ;;; DISCONNECT? BNE 10$ ;;;IF NE NOI& MOVB #1,S.CTM(R4) ;;;SET TIMEOUT TO 1 RETURN ;;; 310$: CMPB #IO.CON/^D<256>,I.FCN+1(R1 .TITLE CEXBF - COMM EXECe .IDENT /01.16/s x;o; COPYRIGHT (C) 1985 BYl/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.";WA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED9; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ;s; J. PROVINO 3-AUG-78y;l; MODIFIED BY:; ; JF005 - J. FORECAST 28-MAR-79]:; ALLOCATE BUFFER SPACE DEPENDING ON CONDITIONAL ASSEMBLY; PARAMETERS.;u; JF006 - J. FORECAST 14-MAY-79a.; CHANGE ALLOCATIONS FOR NEW MAPPED COMM/EXEC;; JF007 - J. FORECAST 8-AUG-80; CHANGE ALLOCATIONS AGAINI; ; JF008 - J. FORECAST 9-JAN-817; CHANGE ALLOCATIONS FOR NEW BUFFER MANAGEMENT SUPPORTR;H"; BM244 - B. S. MCCARTHY 11-MAR-821; FINAL BUFFER SIZE ADJUSTMENTS FOR RSX-11M-PLUSU8; VERSION 2.0 (BASE LEVEL 10) AND ADD DESCRIPTIVE TEXT.;; JJ001 - J. Jackson 4-Jan-82R'; Adjust sizing for DECnet 3.0 releaseO;O; JJ002 - J. Jackson 28-Feb-83(; Increase size for multiprocessor case(; to include DLC support (for Ethernet);C; WD001 - W. Daley 2-Jul-84-9; Combine Comm/Exec modules (CESCH, CELLC, CEDLC, CEDDM,C; CEBUF, CELOG, CETIM).3; Remove L$$SI1 and remaining M$$MGE conditionals.M8; Change conditionals for N$$EVL, N$$OPT, and X$$MDC to&; generate code if R$$MPL is defined.;; Remove INHIB$, ENABL$, SAVMAP, RESMAP, and MAP - replaceJ; with in-line code.j*; Change SAVRG and RESRG to local macros..; Change all I/O page references to absolute.4; Append CESUB module with similar changes to 4.02..; Remove SCBDF$ and CLKDF$ macros (not used).(; Add DLC$OV and CRC$OV global symbols.B; Add $CEX global entry and M$$NET (network support) conditional.;M'; LA001 - Remove saving of SP in $INTSXa;f=; WD002 - Add performance monitor hooks (CHANGED BY LBM004) ;i(; LAA002 - Remove conditionals in .TITLE;P#; LAA003 - Add $CXFLG global symbol ;e4; WD002 - Modify $CNV22 for Q-bus I/D space support; D; LBM004 - CHANGE SPM HOOKPOINT IMPLEMENTATION FOR RSX-11M-PLUS V3.0; ; GS001 - G Strevell 4-Mar-00B_y_TADATADATADATADATADATADATADATADATA85?; Change $CNV22 to use APR bias only when entered with R3 = 0 ;b"; 1.14 WMD001 - W. Duane 30-Apr-85%; Add $CEXND symbol to end of CEXBF.M; '; 1.15 BM369 - B. S. McCarthy 27-Aug-85f; Reformat SPM hookpoint ;i$; 1.16 WJD001 - W. Daley 06-Oct-869; Add Global labels and space for NTINIT run time fix ofd<; SLT offsets and buffer wait code for DECnet-11M-PLUS V4.0;D2$CEX:: ; THIS SYMBOL MUST ALWAYS BE DEFINED FOR( ; MCRS "SET /NOCEX" COMMAND TO BUILD ; CORRECTLYl .IF DF M$$NET n $ .SBTTL Macro Definitionsw; ; Macro Library Callsb; # .MCALL CCBDF$,OPTDF$,PDVDF$,SLTDF$A" CCBDF$ ; Define the CCB offsets+ OPTDF$ <=>,<:> ; Define COMM/EXEC options" PDVDF$ ; Define the PDV offsets" SLTDF$ ; Define the SLT offsets;o; Local Macro DefinitionsI;  .IF DF K$$DAS .MACRO DDFDF,FNC,ARG1 MOV R3,-(SP) ; Save R3M! MOV #FNC,R3 ; Get function codeS .IF B Y; BR DDCM1 ; Common processing for non-CCB control function  .IFF ; B  .IF IDN ,.: BR DDCM2 ; Common processing for modem control functions .IFF ; IDN , .IF IDN ,e BR DDCM4B .IFF ; IDN ,= BR DDCM3 ; Common processing for control functions with CCBs .ENDC ; IDN ,T .ENDC ; IDN ,a .ENDC ; B .ENDM DDFDF .IFF ; DF K$$DAS, .MACRO DDFDF,FNC,ARG1 .IF B V> JSR R3,DDCM1 ; Common processing for non-CCB control function .IFF ; B  .IF IDN ,o= JSR R3,DDCM2 ; Common processing for modem control functionso .IFF ; IDN , .IF IDN , JSR R3,DDCM4> .IFF ; IDN ,@ JSR R3,DDCM3 ; Common processing for control functions with CCB .ENDC ; IDN ,t .ENDC ; IDN ,, .ENDC ; B N10$: .WORD FNC .ENDM < .ENDC ; DF K$$DAS . .MACRO SAVRG LIST .IRP R, MOV R,-(SP) .ENDM .ENDM .MACRO RESRG LIST .IRP R, MOV (SP)+,R .ENDM .ENDM > .SBTTL Symbol Definitions;,7; These symbols are global for use by DECnet processes..; 1DLC$OV == 8. ; Data link layer overhead (bytes),%CRC$OV == 4. ; CRC overhead (bytes)RA$CXFLG == CF.MDM!CF.DDM!CF.DYN!CF.EIS!CF.LOG ; Comm exec options;;;K.CSR == 0 ; ???;CF; Define offsets to saved PSW from $INHIB. This offset is used by theK; FAIL entry (refer to BUFGT) to set the C-Bit so that failures to allocateM7; an RDB, LDB, or SDB will set the C-Bit on the ENABL$.+; .IF NDF M$$PRO>%PRIOFF=0 ; Offset to Saved Priorityh .IFF ; NDF M$$PRO5PRIOFF=2 ; Extra word on Stack for Multi-ProcessorsD .ENDC ; NDF M$$PROa t8 .SBTTL $INTSX - Comm Exec Device Interrupt Save Routine;+3; **-$INTSX-COMM EXEC DEVICE INTERRUPT SAVE ROUTINE;;S; Called by: JSR R4,$INTSX;f ; Inputs:e=; R5 = Pointer to priority specification in device line tablee; ; Outputs:=; The System Stack Depth is decremented, and if zero a switch "; to the System Stack is effected.;0; R5 = Pointer to word following device priority;-$INTSX::;+; ** W a r n i n g **E;a; SPM hookpoint number 36.;s); Do not change the instruction followingI; label without checking SPM;-+$SPH36==. ;SPM changes the instruction atI ;the location of this labell1 DEC @#$STKDP ;;; Decrement Stack Depth Indicatort0 BIC (R5)+,PS ;; Lower priority to device level .IF DF M$$PRO+ CACHE$ SAVE ;; Save bypass state of cacheo .ENDC ; DF M$$PRO CALL @R4 ;; Call caller back .IF DF M$$PRO0 CACHE$ UNSAVE ;; Restore bypass state of cache .ENDC ; DF M$$PRO! MTPS #PR7 ;; Inhibit Interrupts 1 .IF DF K$$DAS ;; Slightly different for RSX-11M+ ( ;; with Kernel Data Space enabled< MOV 4(SP),@#KINAR5 ;; Restore previous I-Space APR Contents< MOV 6(SP),@#KISAR5 ;; Restore previous D-Space APR Contents" ;; Current contents of stack:* ;; R4 (Saved by JSR R4,$INTSX in DDM)0 ;; R5 (Saved by JSR R5,'ISR' in Line Table)$ ;; KINAR5 (Saved in Line Table)$ ;; KISAR5 (Saved in Line Table) ;; PS (Saved by00B__N Interrupt)C ;; PC (Saved by Interrupt)h/ MOV (SP)+,2(SP) ;; Move saved R4 down on stackd/ MOV (SP)+,2(SP) ;; Move saved R5 down on stacka0 ;; Contents of stack (necessary for $INTXX)* ;; R4 (Saved by JSR R4,$INTSX in DDM)0 ;; R5 (Saved by JSR R5,'ISR' in Line Table) ;; PS (Saved by Interrupt)  ;; PC (Saved by Interrupt)i .IFF ;; DF K$$DAS4 MOV 4(SP),@#KISAR5 ;; Restore previous APR contents" ;; Current contents of stack:* ;; R4 (Saved by JSR R4,$INTSX in DDM)0 ;; R5 (Saved by JSR R5,'ISR' in Line Table)$ ;; KISAR5 (Saved in Line Table) ;; PS (Saved by Interrupt)s ;; PC (Saved by Interrupt)o/ MOV 2(SP),4(SP) ;; Move saved R5 down on stack4. MOV (SP)+,(SP) ;; Move saved R4 down on stack0 ;; Contents of stack (necessary for $INTXX)* ;; R4 (Saved by JSR R4,$INTSX in DDM)0 ;; R5 (Saved by JSR R5,'ISR' in Line Table) ;; PS (Saved by Interrupt)s ;; PC (Saved by Interrupt)c .ENDC ;; DF K$$DAS : JMP $INTX1 ;; Return through RSX Interrupt exit ;sjp0005 n' .SBTTL $INTX7 - Level 7 Interrupt Exita;+%; **- $INTX7 - LEVEL 7 INTERRUPT EXIT ; @; This routine is used by Driver ISRs that run at priority level?; 7 during some portion of Interrupt Service. Drivers ISRs may :; only push one item on the stack during level 7 interrupt?; service, and must call $INTSX (to drop priority and switch ton,; the system stack) to post any completions.;;0; Inputs: (stack must be formatted as follows:); R5 (Saved in line table)2; * KINAR5 (Saved in line table for RSX-11M+ only); KISAR5 (Saved in line table); PS (Saved by interrupt)R; PC (Saved by interrupt)i;-$INTX7:: MOV (SP)+,R5 ;;; Restore R5) .IF DF K$$DAS ;;; Different for RSX-11M+S( ;;; with Kernel Data Space enabled3 MOV (SP)+,@#KINAR5 ;;; Restore Kernel I-Space APR5c .ENDC ; DF K$$DAS9 MOV (SP)+,@#KISAR5 ;;; Restore Kernel mapping register 5p RTI ;;; Return from Interrupt (: .SBTTL $PDSPL - Set Up a Process Level and Dispatch to it;+5; **-$PDSPL-SET UP A PROCESS LEVEL AND DISPATCH TO IT ;A<; This subroutine is called to set up the level of a processG; and dispatch to it. This routine assumes that the stack is formattedDG; properly for a pass through the scheduler when the dispatched processa; exits.;P ; Inputs: ; R2 = PDV Index (word index)c; R3 = Address of function code+"; R4 = Address of a CCB (optional)); R5 = Address of a Line Table (optional)u; ; Outputs:@; The new process execution priority is established and dispatch'; is performed by the routine '$PDDSP'.I;;-)$PDSPL::MTPS #PR7 ;;; Disable Interruptse MOV R2,R1 ;;; Copy PDV Index- ADD $PDVTA,R1 ;;; Point into PDV Index Tableo- MOV (R1),R1 ;;; Get address of process' PDVe. BICB Z.SCH(R1),PS ;; Set priority of process & .SBTTL $PDDSP - Dispatch to a Process;+!; **-$PDDSP-DISPATCH TO A PROCESS4;A ; Inputs: ; R2 = PDV Index (word index)o; R3 = Address of function code "; R4 = Address of a CCB (optional)1; R5 = Address of a process line table (optional)m;b; Outputs to the Process:=; Based on the PDV Index in R2, the process is entered at the =; entry point specified by the function code pointed to by R3l; with:($; R3 = Subfunction code (word index)"; R4 = Address of a CCB (optional)/; R5 = Address of process line table (optional)a;o;; R2 through R5 need not be preserved by the called process;-$PDDSP:: ; ref label2 MOV $CMPDV,-(SP) ; Save Current Process PDV Index+ MOV R2,$CMPDV ; Load new Process PDV Indexs+ ADD $PDVTA,R2 ; Point into PDV Index Tablee MOV (R2),R2 ; Get PDV Addressd/ MOV @#KISAR6,-(SP) ; Save current Kernel APR 6 2 MOV @#KISAR5,-(SP) ; Save current process mapping  .IF DF K$$DASS, MOV @#KINAR6,-(SP) ; Save instruction APR'S MOV @#KINAR5,-(SP) 6 MOV (R2),@#KINAR5 ; Map process in both I and D space .ENDC ; DF K$$DAS$ MOV (R2)+,@#KISAR5 ; Map to process0 MOV (R2),-(SP) ; Save address of dispatch table3 MOVB (R3)+,R2 ; Get function code (no sign extend)e7 ADD (SP00B_y_TADATADATADATADATADATADATADATADATA)+,R2 ; Form address of entry in dispatch tablee5 BIT #1,(R2) ; Is this a dispatch to an odd address?R' BNE 10$ ; If NE, yes! - bad dispatch.V( MOVB (R3)+,R3 ; Set up subfunction code CALL @(R2)+ ; Call process .IF DF K$$DAS. MOV (SP)+,@#KINAR5 ; Restore instruction APRs MOV (SP)+,@#KINAR6M .ENDC ; DF K$$DAS6 MOV (SP)+,@#KISAR5 ; Restore previous process mapping5 MOV (SP)+,@#KISAR6 ; Restore previous APR 6 contentst6 MOV (SP)+,$CMPDV ; Restore previous process PDV index RETURN ; And return to caller;o ; at crash:s1; R2 -> computed address of dispatch table entry. ; R3-1 -> byte of function code.!; R3 -> byte of subfunction code.); R4 = optional CCB address.#; R5 = optional line table address.F; 10$: IOT ; Crash on odd dispatch.n uC .SBTTL $PDQUE - Queue a CCB (Chain) to a List and Schedule ProcessK;+<; **-$PDQUE-QUEUE A CCB CHAIN TO A LIST AND SCHEDULE PROCESS;r ; Inputs:AH; R3 = PDV Index (high byte) and channel number (low byte) ($PDQUE ONLY)A; R4 = Address of first CCB in a chain. The last CCB of the chaina#; has a zero next CCB pointer.3;- ; Outputs:C; The PDV Index and channel number parameters are stored in the CCB A; and the CCB (or chain) is linked to the operation queue for theCB; process defined by the PDV index and a schedule request for that; process is set. ;c; Registers modified:U ; R3 and R4I;-=$PDQUE::MOV R3,C.LIN(R4) ; Store PDV index and channel numberi&$PDQU1::MOV R5,-(SP) ; Save callers R5' MOV R4,R5 ; Copy address of first CCBn10$:. BIC #CS.LST,C.STS(R4) ; Clear last CCB marker& MOV R4,R3 ; Copy current CCB address$ MOV (R3),R4 ; Get next CCB address BNE 10$ ; If NE keep going/ BIS #CS.LST,C.STS(R3) ; Mark last CCB of chaino1 MOV #$CMFRK+4,R4 ; Set address of queue listheadx( MOV @#PS,-(SP) ; Save current priority& MOVB #PR7,@#PS ;;; Disable interrupts .IF DF M$$PRO/ CALL $MPLCK ;;; Lock access to process queuec .ENDC ; DF M$$PRO 1% MOV R5,@2(R4) ;;; Link first to lastR& MOV R3,2(R4) ;;; Set new last pointer0 CMP -(R4),-(R4) ;;; Fork block already in use ?$ BNE 20$ ;;; If NE, yes - just exit+ TST $CXOPT ;;; Are we in fork processing?1$ BMI 20$ ;;; If MI, yes - just exit& CLR (R4) ;;; Clear next link pointer C .IF DF R$$MPL .IF DF M$$PROl5 MOV -(R5),-2(R4) ;;; Set up required Unibus Run MaskV .ENDC ; DF M$$PRO & CALL $QFORK ;;; Queue the fork block  .IFF ; DF R$$MPL . MOV R4,@$FRKHD+2 ;;; Link to end of fork list) MOV R4,$FRKHD+2 ;;; Set new last pointer4 .ENDC ; DF R$$MPL t20$: .IF DF M$$PRO; CALL @(SP)+ ;;; Co-routine return to unlock process queues .ENDC ; DF M$$PRO ;% MOV (SP)+,@#PS ;;; Enable interrupts  MOV (SP)+,R5 ; Recover R5 RETURN ; Return to caller i+ .SBTTL $CEPWR - Powerfail Recovery RoutineM;+&; **-$CEPWR-POWERFAIL RECOVERY ROUTINE;MB; This routine is dispatched from the executive powerfail recovery<; code. It will dispatch to the AUX process with a powerfail; recovery function code.2;-$CEPWR:: .IF DF R$$MPL. MOV $DDFNC,-(SP) ; Save current function code4 MOV #FC.PWR,$DDFNC ; Set up powerfail function code .ENDC ; DF R$$MPL; MOV #$DDFNC,R3 ; Point to powerfail recovery function codee0 CLR R2 ; Set up PDV index (AUX is always zero)- CALL $PDSPL ; and dispatch to the process* .IF DF R$$MPL1 MOV (SP)+,$DDFNC ; Restore current function codef .ENDC ; DF R$$MPL RETURNo y6 .SBTTL $LLCRQ - LLC to DLC Request Queuing Subroutine;+4; **- $LLCRQ - LLC TO DLC REQUEST QUEUING SUBROUTINE;$>; This routine is called by a LLC process to queue requests to>; a DLC process. Note that the callers context is saved as if; an interrupt had occurred.;r ; Inputs:r(; R4= Address of CCB (or first in chain); The CCB must contain a valid:P(; C.FNC & C.MOD - Request function code3; C.LIN - LLC channel number (logical line number)u;i ; Outputs:5; The request is dispatched to the proper DLC processt;L; Registers modified:u; None;-$LLCRQ:: .IF DF M$$PRO# SAVRG ; S00B__Nave registersu* MOV $CMPDV,R1 ; Get current LLC PDV index+ ADD $PDVTA,R1 ; Point into PDV index tablel+ MOVB C.LIN(R4),R3 ; Get LLC channel numberd ASL R3 ; Make it a word index 8 ADD (R1),R3 ; Point to LLC channel mapping table entryA MOV Z.MAP(R3),C.LIN(R4) ; Store SLN and station address into CCBC* ; Note - bit15 will always be clear to) ; flag destination process as a DLCt+ MOVB C.LIN(R4),R1 ; Get system line numberi ASL R1 ; Form word offset3 ADD $SLTMA,R1 ; Point into system line index table6 MOV (R1),R1 ; Get address of system line table entry;+; ** W a r n i n g **a;l2; DECnet-11M-PLUS V4.0 NTINIT hookpoint number 01.; G; Do not change the instruction following label without checking NTINITb;-.$RTF01:: ; NTINIT changes the instruction at ; the location of this label' MOV L.KRBA(R1),R1 ; Get pointer to KRB 1 MOV K.URM(R1),C.URM(R4) ; Set up unibus run mask16 CALL $PDQU1 ; Queue request CCB and schedule process8 MTPS #0 ; Drop priority to 0 and clear condition codes% RESRG ; Restore registerse RETURNt  .IFF ; DF M$$PROn0 SAVRG ; Save all registers* MOV $CMPDV,R1 ; Get current LLC PDV index+ ADD $PDVTA,R1 ; Point into PDV index tablebB MOVB C.LIN(R4),R3 ; Get LLC channel number without sign extension ASL R3 ; Make it a word index18 ADD (R1),R3 ; Point to LLC channel mapping table entryA MOV Z.MAP(R3),C.LIN(R4) ; Store SLN and station address into CCBu* ; Note - bit15 will always be clear to( ; flag destination process as a DLC; CALL $STDLC ; Set up DLC PDV index and line table addressA CALL $PDSPL ; Dispatch to DLCl8 MTPS #0 ; Drop priority to 0 and clear condition codes. RESRG ; Restore registers! RETURN ; Return to calling LLCn e .ENDC ; DF M$$PRO n6 .SBTTL $LLCRS - LLC to LLC Request Queuing Subroutine;+4; **- $LLCRS - LLC TO LLC REQUEST QUEUING SUBROUTINE<; **- $DLCRS - DLC TO LLC REQUEST QUEUING SUBROUTINE FOR X25K; **- $NMCRS - LLC TO DLC REQUEST QUEUING SUBROUTINE FOR NETWORK MANAGEMENT ;D?; This routine is called by a LLC process to queue requests to A; another LLC process. Note that the callers context is saved asi; if an interrupt had occurred.R;;J; The $DLCRS entry point is supplied for use by the X25 data link mapping.;J; The $NMCRS entry point is supplied for use by Network Management so thatG; it can fill in the Unibus Run Mask Before issueing a request to a DLCS ; for line/circuit counters etc.;N ; Inputs:T(; R4= Address of CCB (or first in chain); The CCB must contain a valid:e(; C.FNC & C.MOD - Request function code'; C.STA - Destination LLC's PDV indexa$; C.LIN - Option calling parameter;a ; Outputs:>; The request is queued and the appropriate level is scheduled; ; Note:aA; A LLC process can determine if a completion has come from a DLCb@; process or another LLC by examining the MSB of the C.LIN/C.STA; cell in the CCB.;e6; MSB=0 The request came from a DLC and the byte C.LIN4; contains the LLC's channel number for the logical ; line that had the completion.6; MSB=1 The request came from a LLC and the byte C.LIN2; contains an optional calling parameter from the; requesting LLC.;:; Registers modified:e; None;- p$DLCRS::$LLCRS:: .IF DF M$$PRO6 CLR C.URM(R4) ; Allow process to run on any processor .ENDC ; DF M$$PRO s'$NMCRS::SAVRG ; Save R3 and R4t8 BIS #100000,C.LIN(R4) ; Flag destination process is LLC: BISB #200,C.BID(R4) ; Mark CCB as coming from another LLC n6 CALL $PDQU1 ; Queue request CCB and schedule process# RESRG ; Restore registers % RETURN ; And return to calling LLCo o? .SBTTL $LLCLC - Process to Process Direct Call Interface (CCB)rB .SBTTL $LLCAL - Process to Process Direct Call Interface (No CCB);+?; **-$LLCLC-PROCESS TO PROCESS DIRECT CALL INTERFACE (WITH CCB)P4; **-$LLCAL-PROCESS TO PROCESS DIRECT CALL INTERFACE;0G; This routine is called by a process (typically an LLC) to dispatch toMB; another process (typic00B_y_TADATADATADATADATADATADATADATADATAally another LLC) via it's dispatch table.;C ; Inputs:u8; R0 = Optional calling parameter to destination process5; R1 = " " " " " "o&; R2 = Process PDV index ($LLCAL only)-; R3 = Address of function code ($LLCAL only)t#; R4 = Address of CCB ($LLCLC only)L; C.FNC - Function code; C.MOD - Function modifier ; C.STA - Destination PDV index;C'; Outputs: (to the destination process)a; R3 = Subfunction codel ; R4 = Address of CCB (optional); C.STA - Source PDV indexr-; R5 = Address of process database descriptor;0; Registers modified:a; R0, R1, R2, R3, R4;e; Note:=A; If the $LLCAL call is being performed from a task in an I and DV@; space system, the word pointed to by R3 will not be accessableB; by $PDDSP because it will be mapped via Kernel Instruction APR5.@; To work around this mapping problem, the word pointed to by R3*; should be in DSR or on the Kernel Stack.;-5$LLCLC::MOV R4,R3 ; Compute address of function code  ADD #C.FNC,R3 ; .... MOVB C.STA(R4),R2 ; Get destination PDV index- MOVB $CMPDV,C.STA(R4); Save source PDV index36$LLCAL::SAVRG ; Save current database descriptor MOV R2,R5 ; Copy PDV index+ ADD $PDVTA,R5 ; Point into PDV index tablel MOV (R5),R5 ; Get PDV addresse6 MOV Z.DAT(R5),R5 ; Get address of database descriptor' CALL $PDDSP ; Dispatch to the processr* RESRG ; Recover database descriptor RETURN  c6 .SBTTL $STDLC - Set up DLC Parameters for a Given SLN;+<; **-$STDLC-COMPUTE DLC PARAMETERS FROM A SYSTEM LINE NUMBER; **-$STDL1-(ALTERNATE ENTRY;A ; Inputs:s0; R2 = System line number (alternate entry only)1; R4 = Address of a CCB with a valid SLN in C.LINd; (Main entry only);t ; Outputs:; R2 = PDV index (word offset)+; R3 = Address of function code cell in CCBd ; R5 = Address of DLC line table; ; Registers modified:r; None;- $STDLC:: .IF NDF N$$1LNt+ MOVB C.LIN(R4),R2 ; Get system line number  .ENDC ; NDF N$$1LNn N$STDL1:: .IF DF N$$1LN8 MOV @$SLTMA,R2 ; Get address of system line table entry .IFF ; DF N$$1LNn ASL R2 ; Form word index3 ADD $SLTMA,R2 ; Point into system line index table 6 MOV (R2),R2 ; Get address of system line table entry .ENDC ; DF N$$1LN* MOV L.DLS(R2),R5 ; Get line table address/ MOVB L.DLC(R2),R2 ; Get PDV index (word index)i4 MOV R4,R3 ; Compute a pointer to the function code ADD #C.FNC,R3 ; ... RETURN ; Return to caller s 5 .SBTTL $ASCMP - Asynchronous Completion to LLC LevelD;+E; **- $ASCMP -ASYNCHRONOUS COMPLETION TO LOGICAL LINK CONTROL MODULES ;F?; This routine is called by Data Link Control processes to pass A; asyncronous status/error information to higher level processes.e;b ; Inputs:.,; R2 = Station number and system line number ; R3 = Asynchronous status/error;; ; Outputs:=; A CCB is allocated on behalf of the caller and based on theo:; system line number, is queued to the appropriate Logical; Link Control process.A;c; Registers modified:L ; R3 and R4;- .ENABL LSBN%$ASCMP::CALL $CCBGT ; Allocate a CCBO BCS 30$ ; If CS erroru@ MOV #FC.CCP+FS.AST,C.FNC(R4) ; Set error complete function code= MOV R2,C.LIN(R4) ; Set up station address/system line number BR 10$ ; Finish in common code y m/ .SBTTL $XMCMP - Transmit Complete to LLC Level;. .SBTTL $CTCMP - Control Complete to LLC Level. .SBTTL $RCCMP - Receive Complete to LLC Level+ .SBTTL $KLCMP - Kill Complete to LLC Leveli;+?; **-$XMCMP-TRANSMIT COMPLETE TO LOGICAL LINK CONTROL PROCESSES.; **-$CTCMP-CONTROL COMPLETE; **-$RCCMP-RECEIVE COMPLETE; **-$KLCMP-KILL COMPLETEC;P ; Inputs:N"; R3 = Operation completion status/; R4 = Address of CCB (or first ccb in a chain)s+; the CCB contains a valid line numbero;o ; Outputs:9; The appropriate function code is inserted into the CCB,C<; the line number is used to find the PDV specification, and(; the CCB is added to the process queue.; ; Registers modified:; R3;- MD$XMCMP::MOVB #FC.XCP,C.FNC(R4) ; Set trans00B__Nmit complete function code BR 10$ ; Join common codeE VC$CTCMP::MOVB #FC.CCP,C.FNC(R4) ; Set control complete function codei BR 10$ ; Join common codeA e@$KLCMP::MOVB #FC.KCP,C.FNC(R4) ; Set kill complete function code BR 10$ ; Join common codet C$RCCMP::MOVB #FC.RCP,C.FNC(R4) ; Set receive complete function codee#10$: MOV R2,-(SP) ; Save callers R2c+ MOVB C.LIN(R4),R2 ; Get system line number 520$: MOV R3,C.STS(R4) ; Store operation status in CCBP6 BICB #200,C.BID(R4) ; Mark message from a DLC process ASL R2 ; Multiply SLN by 2/ ADD $LLCTA,R2 ; Point to reverse mapping tablec< MOV (R2),R3 ; Get SLN & station to PDV & channel map entry5 BPL 25$ ; If PL, got PDV & channel (point to point)f( ; Else, pointer to station table map< MOVB C.STA(R4),R2 ; Get station number (never sign extends)6 ADD R3,R2 ; Compute half mapping table entry address& ASL R2 ; Make a word aligned address2 MOV (R2),R3 ; Get PDV & channel for this stationA25$: BIS #100000,R3 ; Indicate that cell contains a PDV & channelL  .IF DF M$$PRO6 CLR C.URM(R4) ; Allow process to run on any processor .ENDC ; DF M$$PRO . CALL $PDQUE ; Queue CCB and schedule process MOV (SP)+,R2 ; Restore R2 CLC ; Clear C-bit 30$: RETURN ; Return to caller .DSABL LSB4 2 .IF NDF X$$NDMm$ .SBTTL $DD??? - DLC to DDM Requests;+; General Requests with CCBy;d; Format of call:k ; CALL $DD???d;d ; Inputs:($; R4 = Address of first CCB in chain&; (All CCBs must contain a valid SLN); ; Outputs to DDM: $; R4 = Address of first CCB in chain ; R5 = Address of DDM line table,; R2 & R3 - Available for use without saving;Q; Registers across call:*; R0,R1 - Must be preserved by DDM if used#; R2,R3,R5 - Preserved by Comm Execu; R4 - May be modified;S; On return to DLC:D3; C-bit clear - Request has completed synchronouslya; R4 = Address of CCB; 2; C-bit set - Request will complete asynchronously ; R4 = 0s;-;+; Special requests without CCB;t; ; Format of call: ; CALL $DD??? ; ; Inputs:s; R3 = System line number5(; R4 = Optional calling parameter to DDM;i; Outputs to DDM:u*; R4 = Optional calling parameter from DLC ; R5 = Address of DDM line table,; R2 & R3 - Available for use without saving;-; Registers across call:+; R0,R1 - Must be preserved by DDM if used #; R2,R3,R5 - Preserved by Comm Execr; R4 - May be modified; ; On return to DLC:t; C-bit always clear-; R4 = Optional returning parameter from DDMB;- +$DDXME::DDFDF FC.XME,SUB ; Transmit enablen*$DDRCE::DDFDF FC.RCE,SUB ; Receive enable.$DDMAN::DDFDF FC.MAN,SUB ; Network management/$DDXKL::DDFDF FC.KIL+FS.XKL,CCB ; Transmit kill.$DDCRA::DDFDF FC.KIL+FS.CRA,CCB ; Receive kill;$DDKIL::DDFDF FC.KIL+FS.KIL,CCB ; Receive and transmit kill'$DDSTR::DDFDF FC.CTL+FS.STR,CCB ; Starte&$DDSTP::DDFDF FC.CTL+FS.STP,CCB ; Stop5$DDGET::DDFDF FC.CTL+FS.GET,CCB ; Get characteristics-5$DDSET::DDFDF FC.CTL+FS.SET,CCB ; Set characteristicsf/$DDRNG::DDFDF FC.CTL+FS.RNG,MDC ; Look for ringm-$DDENB::DDFDF FC.CTL+FS.ENB,MDC ; Enable line .$DDDIS::DDFDF FC.CTL+FS.DIS,MDC ; Disable line"$DDXON::DDFDF FC.CTL+FS.XON ; Xon#$DDXOF::DDFDF FC.CTL+FS.XOF ; Xoff 1$DDMSN::DDFDF FC.CTL+FS.MSN ; Sense modem statusK .< .SBTTL DDCM1 - Common Process for Special Non-CCB Functions;+9; **-DDCM1 - COMMON PROCESS FOR SPECIAL NON-CCB FUNCTIONST;D ; Inputs:F; R3 = Address of function code+; R4 = Unspecified calling parameter to DDMe; Stack contains::*; 00(SP) = Line number (originally in R3)); 02(SP) = Return address to calling DLC ;D; Outputs to DDM:F$; R3 = Subfunction code (word index); R4 = Same as on entry; R5 = Line table address ;X; Outputs on return to caller:; Function has been performed3; R4 = Unspecified return parameter to DLC from DDMn;o; Registers across call:; R2,R3,R5 preserved; R4 may be modified by DDM;- .ENABL LSBeDDCM1: .IF DF K$$DAS1 MOV R3,$DDFNC ; Store function code in data areao+ MOV #$DDFNC,R3 ; Point R3 at 00B_y_TADATADATADATADATADATADATADATADATAfunction code  .ENDC ; DF K$$DAS u MOV R2,-(SP) ; Save R2  MOV 2(SP),R2 ; Get line numberS. BR 22$ ; Join common code to dispatch to DDM : .SBTTL DDCM2 - Common Process for Modem Control Functions;+7; **-DDCM2 - COMMON PROCESS FOR MODEM CONTROL FUNCTIONS ;a5; If the specified line has modem control enabled the 7; function request is derailed to the modem controller.N4; On return from the modem controller the request is4; routed to the proper DDM as usual. If the line is6; hardwired the request is routed directly to the DDM.;( ; Inputs:R; R3 = Address of function codee; R4 = Address of CCBm; Stack contains: ; 00(SP) = Caller's R3D); 02(SP) = Return address to calling DLCt;s; Outputs to modem controller:; R3 = Subfunction codeI; R5 = Line table addressd;n; Outputs to DDM: ; R3 = Subfunction coder; R4 = Same as on entry ; R5 = Line table addresst; ; Outputs on return to caller:0; C-bit clear - Function performed synchronouslyA; C-bit set - Wait for asynchronous report of function completion.;(; Registers across call:; R2,R3,R5 - Preserved; R4 - Modified ;-DDCM2: .IF DF X$$MDC!R$$MPLs D .IF DF K$$DAS5 MOV R3,$DDFNC ; Store the function code in data arean+ MOV #$DDFNC,R3 ; Point R3 at function coden .ENDC ; DF K$$DAS . MOV (R3),C.FNC(R4) ; Put function code in CCB MOV R2,-(SP) ; Save R2 .IF DF N$$1LN3 MOV $SLTMA,R2 ; Point into system line index tablea .IFF ; DF N$$1LNd+ MOVB C.LIN(R4),R2 ; Get system line numberr ASL R2 ; Form word index3 ADD $SLTMA,R2 ; Point into system line index tableP .ENDC ; DF N$$1LN3 BIT #LF.MDC,@(R2)+ ; Does line need modem control?4 BEQ 20$ ; No - join common code to dispatch to ddm MOV R5,-(SP) ; Save registerR- MOV R3,-(SP) ; Save address of function codeD4 CLR R2 ; Get auxilary process PDX index (always 0)6 MOV @$PDVTA,R5 ; Get address of auxilary process' PDV) ; that works since it's PDV index = 0= MOV Z.DAT(R5),R5 ; Get address of data base descriptor blocke, CALL $PDDSP ; Dispatch to modem controller MOV (SP)+,R3 ; Restore R3; MOVB C.LIN(R4),R2 ; Obtain line number (no sign extension)n7 BIS #100000,C.LIN(R4) ; Indicate modem control request 3 CALL DDMDSP ; Dispatch to the device driver (DDM)M0 BCS 25$ ; Request will complete asynchronously, CALL $CCBRT ; Otherwise return CCB to pool? CLR R4 ; Modem controller will return asynchronous completion , SEC ; Set C-bit, line is modem controlled BR 25$ ; Join common codet .ENDC ; DF X$$MDC!R$$MPLC 5 .SBTTL DDCM3 - Common Process for Functions with CCB 6 .SBTTL DDCM4 - Common Process for Functions with CCB;+2; **-DDCM3 - COMMON PROCESS FOR FUNCTIONS WITH CCB2; **-DDCM4 - COMMON PROCESS FOR FUNCTIONS WITH CCB;e ; Inputs: 7; R3 = Address of function and subfunction code (DDCM3),; R3 = Address of function code only (DDCM4); R4 = Address of CCBl; Stack contains:n; 00(SP) = Callers R3); 02(SP) = Return address to calling DLC; ; Outputs to DDM:c$; R3 = Subfunction code (word index); R4 = Address of CCBP; R5 = Address of line table;.; Registers across call:; R2,R3,R5 - Preserved; R4 - May be modified;-DDCM3: .IF DF K$$DAS1 MOV R3,$DDFNC ; Store function code in data areaH+ MOV #$DDFNC,R3 ; Point R3 at function codei a .IFTF ; DF K$$DAS9 MOV (R3),C.FNC(R4) ; Put function and subfunction in CCB4 BR 10$ ; Join common codeoDDCM4: .IFT ; DF K$$DASr2 MOV R3,$DDFNC ; Store function code in data area+ MOV #$DDFNC,R3 ; Point R3 at function code  .ENDC ; DF K$$DASA e/ MOVB (R3),C.FNC(R4) ; Put function code in CCBe10$: MOV R2,-(SP) ; Save R25 20$: MOVB C.LIN(R4),R2 ; Get SLN22$: MOV R5,-(SP) ; Save R53 CALL DDMDSP ; Dispatch to the device driver (DDM)M25$: MOV (SP)+,R5 ; Restore R5 MOV (SP)+,R2 ; Restore R2 MOV (SP)+,R3 ; Restore R3! RETURN ; Return to calling DLCC .DSABL LSB & .SBTTL DDMDSP - Dispatch to DDM Level;+!; **-DDMDSP-DISPATCH TO DDM LEVEL ;dF; This subroutine is called to dispatch down t00B__No the ddm level. ProcessH; dispatch will occur at the current priority or at the process priority; dependent on a PDV flag.;. ; Inputs:;; R2 = System line numberS;;; Registers modified: ; R5;-@DDMDSP: CALL $STDD1 ; Set up DDM PDV index & line table address CLC ; Save current priority! MFPS -(SP) ; with C-bit clearn" SAVRG ; Get a free register MOV R2,R0 ; Copy DDM PDV index+ ADD $PDVTA,R0 ; Point into PDV index table " MOV (R0),R0 ; Get pointer to PDV BIT #ZF.DVP,Z.FLG(R0). BEQ 10$ ; If EQ, run DDM at current priority& MTPS #PR7 ; Raise processor priority/ BICB Z.SCH(R0),PS ;;; Drop to process priority210$: RESRG ; Restore register # CALL $PDDSP ; Dispatch to the DDM$% ADC (SP) ; Update C-bit in saved PSe) MTPS (SP)+ ; Restore processor priorityM RETURN  5 .SBTTL $DDAST - Asynchronous Completion to DLC Level;+8; **-$DDAST-ASYNCHRONOUS COMPLETION TO DATA LINK CONTROL; B; This subroutine is called by device drivers when an asynchronousE; condition must be returned to a data link control module and no CCBa$; is available at the device driver.;S ; Inputs:o8; R3 = Asynchronous completion status (moved into C.STS); R4 = System line numbert;h ; Outputs:3; A CCB is allocated on behalf of the device driverR.; and the asynchronous status is queued to the ; Data Link Control module with:; C.FNC= FC.CCP; C.MOD= FS.AST;O; Registers modified: ; XXXN;- .ENABL LSBs'$DDAST::MOV R4,-(SP) ; Save line numbera CALL $CCBGT ; Allocate a CCB BCS 5$ ; If CS error- MOV (SP)+,C.LIN(R4) ; Set line number in CCBa@ MOV #FC.CCP+FS.AST,C.FNC(R4) ; Set error complete function code BR 20$ ; Finish in common code"5$: MOV (SP)+,R4 ; Clean the stack RETURN ; Return to caller / .SBTTL $DDXMP - Transmit Complete to DLC Level . .SBTTL $DDRCP - Receive Complete to DLC Level. .SBTTL $DDCCP - Control Complete to DLC Level+ .SBTTL $DDKCP - Kill Complete to DLC Level;+2; **-$DDXMP-TRANSMIT COMPLETE TO DATA LINK CONTROL; **-$DDRCP-RECEIVE COMPLETE; **-$DDCCP-CONTROL COMPLETE; **-$DDKCP-KILL COMPLETEC'; **-$LLCSP-SPECIAL ENTRY POINT FOR X25r; 6; This subroutine is called by Device Drivers to queue8; completion notifications to Data Link Control modules.; J; The $LLCSP entry point is provided for use by the X25 Data Link Mapping.;- ; Inputs:m"; R3 = Operation completion status; R4 = Address of CCB to queue+; The CCB contains a valid line number;;* ; Outputs:'; The CCB is queued to a DLC list based$7; on the system line number parameter in the CCB with a*-; transmit or receive complete function code.R;O; Registers modified:s; XXXt;-D$DDXMP::MOVB #FC.XCP,C.FNC(R4) ; Set transmit complete function code BR 20$ ; Join common code C$DDRCP::MOVB #FC.RCP,C.FNC(R4) ; Set receive complete function code. BR 20$ ; Join common codea@$DDKCP::MOVB #FC.KCP,C.FNC(R4) ; Set kill complete function code BR 20$ ; Join common codee9$DDCCP::TST C.LIN(R4) ; Special modem control completion?e BPL 10$ ; If PL no) CALLR $CCBRT ; Yes - return CCB to poolr+ ; Modem controller will post completionO@10$: MOVB #FC.CCP,C.FNC(R4) ; Set control complete function code$LLCSP::$DDSPC::-20$: MOV R3,C.STS(R4) ; Set completion statusd .IF DF M$$PRO& MOVB C.LIN(R4),R3 ; Get system line # ASL R3 ; Form word offsetJ3 ADD $SLTMA,R3 ; Point into system line index tableS0 MOV (R3),R3 ; Get address of system line table;+; ** W a r n i n g **.;(2; DECnet-11M-PLUS V4.0 NTINIT hookpoint number 02.;fG; Do not change the instruction following label without checking NTINITr;-.$RTF02:: ; NTINIT changes the instruction at ; the location of this label' MOV L.KRBA(R3),R3 ; Get pointer to KRB( MOV K.URM(R3),C.URM(R4) .ENDC ; DF M$$PRO/ CALLR $PDQU1 ; Queue CCB and schedule processF .DSABL LSBJ .ENDC ; NDF X$$DDMt t9 .SBTTL $STDDM - Set DDM PDV Index and Line Table Addresss;+4; **-$STDDM-SET DDM PDV INDEX AND LINE TABLE ADDRESS; **-$STDD1-(ALTER00B_y_TADATADATADATADATADATADATADATADATANATE ENTRY) ;bC; This subroutine is called to set up a Device Driver PDV index andh3; line table address based on a system line number. ;t ; Inputs:0; R2 = System line number (alternate entry only)5; R4 = CCB address with a valid system line number in.; C.LIN (Main entry only);; ; Outputs:; R2 = PDV index#; R5 = Address of device line table$;t; Registers modified:S; R5;-$STDDM:: .IF NDF N$$1LNs/ MOVB C.LIN(R4),R2 ; Extract system line numberE .ENDC ; NDF N$$1LN-$STDD1:: .IF DF N$$1LN2 MOV @$SLTMA,R2 ; Get address of system line entry .IFF ; DF N$$1LNt ASL R2 ; Form word index3 ADD $SLTMA,R2 ; Point into system line index tablen0 MOV (R2),R2 ; Get address of system line entry .ENDC ; DF N$$1LN 1 MOV L.DDS(R2),R5 ; Get device line table addressu= MOVB L.DDM(R2),R2 ; Get device driver PDV index (word index) RETURN ; Return d( .SBTTL $CCBGT - Allocate a Standard CCB;+$; **-$CCBGT- Allocate a Standard CCB;mG; This subroutine is called to allocate a CCB from the CCB pool. If the A; assembly option is chosen, the CCB may be allocated from SystemF*; Dynamic Memory if the CCB pool is empty.;t ; Inputs:e; None.;V ; Outputs:.; R4 contains the address of the allocated CCB6; C-Bit is CLEAR if the CCB was successfully allocated0; C-Bit is SET and R4=0 if the allocation failed;-$CCBGT::CLC ; Assume Success' MOV @#PS,-(SP) ; Save current priorityd& MOVB #PR7,@#PS ;;; Disable interrupts .IF DF M$$PRO3 CALL $MPLCK ;;; Lock Access to CommExec Resourcesp .ENDC ; DF M$$PRO CALL CCBGT ;;; Allocate a CCBb .IF DF M$$PRO7 CALL @(SP)+ ;;; Co-Routine return to unlock resources  .ENDC ; DF M$$PRO< MOV (SP)+,@#PS ;;; Enable interrupts (and load final C-bit) RETURNs E( .SBTTL $LDBGT - Get a Large Data Buffer;+$; **-$LDBGT- Get a Large Data Buffer;lA; This subroutine is called to allocate a fixed length Large DatarA; Buffer. Large Data Buffers come out of the same pool as Receive$B; Data Buffers. The difference is that Large Data Buffers are for@; use by non-DDM processes and there must be a minimum number ofA; buffers remaining in the pool or the allocation will fail. TheDA; minimum number reserved for DDM processes is the RDB threshold.-;) ; Inputs:; None.T;L ; Outputs:2; R4 contains the address of buffers allocated CCB:; C-Bit is CLEAR if the CCB/LDB was successfully allocated0; C-Bit is SET and R4=0 if the allocation failed;m; Note:t2; The caller's APR6 is preserved across this call.;-?$LDBGT::CMP $RDBCT,$RDBTH ; Is pool minimum threshold exceeded?d1 BHIS $RDBGT ; If HIS, No ... go allocate buffern5 INC $LDBAF ; Increment count of allocation failuresi! RETURN ; Return with C-Bit SETs * .SBTTL $RDBGT - Get a Receive Data Buffer;+&; **-$RDBGT- Get a Receive Data Buffer; >; This subroutine is called to allocate a fixed length Receive; Data Buffer.;d ; Inputs:s; None.R; ; Outputs:3; R4 contains the address of allocated buffer's CCBe:; C-Bit is CLEAR if the CCB/RDB was successfully allocated0; C-Bit is SET and R4=0 if the allocation failed; ; Note:o2; The caller's APR6 is preserved across this call.;-6$RDBGT::MOV @#KISAR6,-(SP) ; Save current APR6 mapping' SAVRG ; Save some registerst CLC ; Assume successful' MOV @#PS,-(SP) ; Save current priorityo& MOVB #PR7,@#PS ;;; Disable interrupts .IF DF M$$PRO3 CALL $MPLCK ;;; Lock access to CommExec resources  .ENDC ; DF M$$PRO CALL CCBGT ;;; Allocate a CCB-# BCS 10$ ;;; If CS, None availables7 MOV #CF.LB,C.FLG(R4) ;;; Set-up last buffer indicator 8 MOVB #CB.RDB,C.BID(R4) ;;; and buffer ID fields in CCB/ MOV $RDBSZ,C.CNT(R4) ;;; Load size of RDB/LDB; MOV $RDBSZ,C.CNT2(R4)> MOV #$RDBLH,R5 ;;; Point to listhead in allocation crtl block- CALL BUFGT ;;; Allocate a Large Data Buffert BCC 10$ ;;; If CC, Successfuln& CALL CCBRT ;;; Else, release the CCB CLR R4 ;;; No CCB availableo10$: .IF DF M$$PRO8 CALL @(SP)+ ;;; Co-Routine return to unlock resources 00B__N .ENDC ; DF M$$PRO< MOV (SP)+,@#PS ;;; Enable interrupts (and load final C-bit)% RESRG ; Restore registersD3 MOV (SP)+,@#KISAR6 ; Restore previous APR6 mappingo RETURN ; Return to caller )- .SBTTL $RDBRT - Return a Receive Data Bufferc+ .SBTTL $LDBRT - Return a Large Data Buffer ;+); **-$RDBRT- Return a Receive Data Buffers'; **-$LDBRT- Return a Large Data Buffere;BD; This routine is called to return a data buffer to the large bufferE; pool. If the waiters count is zero or a buffer is already queued to(F; the system process to satisfy a wait request, the buffer is returnedA; to the pool. Otherwise, the system return process is scheduled. ;p ; Inputs:R); R4 contains the address of buffer's CCB-7; Note that C.BUF2+2 must contain the original Virtual <; Address of the buffer, and C.BUF must contain the original; Bias of the buffer.r; ; Outputs:; None.B;-$LDBRT::.$RDBRT::SAVRG ; Save some registers' MOV @#PS,-(SP) ; Save current prioritye& MOVB #PR7,@#PS ;;; Disable interrupts MOV C.BUF2+2(R4),C.BUF+2(R4) ) ;;; Copy the buffer's Virtual Addresst> MOV #$RDBCT,R5 ;;; Point to count in allocation control block6 TST $RDQCT ;;; Are any processes waiting for an RDB?; BLE RELBUF ;;; If LE, no waiters or buffer already queued > MOV #100000,R3 ;;; Else, send to buffer return system process3 BIS R3,$RDQCT ;;; Mark a buffer return in progressL MOV #FC.RCE!FS.RTN,C.FNC(R4)> .IF DF M$$PRO8 CLR C.URM(R4) ;;; Allow process to run on any processor .ENDC ; DF M$$PRO5 CLR (R4) ;;; Clear link word (only return 1 buffer)e0 CALL $PDQUE ;;; Queue buffer to system process! BR CMNRTN ;;; Enter common codeb k .SBTTL $CCBRT - Return a CCBe;+; **-$CCBRT- Return a CCBR;U6; This routine is called to deallocate a standard CCB.;0 ; Inputs: $; R4 contains the address of the CCB;s ; Outputs:; None.M;-.$CCBRT::MOV @#PS,-(SP) ; Save current priority& MOVB #PR7,@#PS ;;; Disable interrupts .IF DF M$$PRO3 CALL $MPLCK ;;; Lock access to CommExec resourcesC .ENDC ; DF M$$PRO CALL CCBRT ;;; Return the CCBC .IF DF M$$PRO7 CALL @(SP)+ ;;; Co-Routine return to unlock resourcesn .ENDC ; DF M$$PRO% MOV (SP)+,@#PS ;;; Enable interruptsR RETURNC 2 .SBTTL $CSBGT - Get a CCB and a Small Data Buffer;+.; **-$CSBGT- Get a CCB and a Small Data Buffer;eC; This routine is called to allocate a CCB and a Small Data Buffer.uD; The routine also sets up the buffer descriptor in the CCB to point1; to the buffer as well as the proper byte count.r;C ; Inputs:D; None.;C ; Outputs:-; R4 contains the address of the buffer's CCBP:; C-Bit is CLEAR if the CCB/SDB was successfully allocated'; C-Bit is SET if the allocation failedr;t; Note:R1; APR6 is mapped to the allocated buffer on exit. ;- .ENABL LSB$.$CSBGT::SAVRG ; Save some registers CLC ; Assume successl' MOV @#PS,-(SP) ; Save current priority & MOVB #PR7,@#PS ;;; Disable interrupts .IF DF M$$PRO3 CALL $MPLCK ;;; Lock access to CommExec resourcesc .ENDC ; DF M$$PRO CALL CCBGT ;;; Allocate a CCBc* BCS 20$ ;;; If CS, CCB allocation failed# MOV #CF.LB!CF.SOM!CF.EOM,C.FLG(R4)s- ;;; Set last buffer and single message ini= MOVB #CB.SDB,C.BID(R4) ;;; in flags and load ID of CCB/SDBf+ MOV $SDBSZ,C.CNT(R4) ;;; Load buffer sizeR MOV $SDBSZ,C.CNT2(R4)> MOV #$SDBLH,R5 ;;; Point to listhead in allocation ctrl block$ CALL BUFGT ;;; Allocate the buffer6 BCS 10$ ;;; If CS, SDB allocation failed, return CCB$ BR 20$ ;;; Else, enter common code ;5 .SBTTL $CSBRT - Return a CCB and a Small Data Buffer$;+1; **-$CSBRT- Return a CCB and a Small Data BufferM;.D; This routine is called to deallocate a CCB and a Small Data Buffer@; which is pointed to by the first buffer descriptor in the CCB.;, ; Inputs:;$; R4 contains the address of the CCB6; Note that C.BUF+2 must contain the original Virtual<; Address of the buffer, and C.BUF must contain the original; Bias of the buffer.t; a ; Outputs:; None. ;-00B`y_TADATADATADATADATADATADATADATADATA.$CSBRT::SAVRG ; Save some registers' MOV @#PS,-(SP) ; Save current priority+& MOVB #PR7,@#PS ;;; Disable interrupts> MOV #$SDBCT,R5 ;;; Point to count in allocation control blockRELBUF:D .IF DF M$$PRO3 CALL $MPLCK ;;; Lock access to CommExec resourcesh .ENDC ; DF M$$PRO2 MOV C.BUF(R4),R3 ;;; Set up address of the buffer3 MOV C.BUF+2(R4),R2 ;;; as an address double word # CALL BUFRT ;;; Release the buffer 10$: CALL CCBRT ;;; Release the CCB20$: .IF DF M$$PRO7 CALL @(SP)+ ;;; Co-Routine return to unlock resources .ENDC ; DF M$$PROCCMNRTN: MOV (SP)+,@#PS ;;; Enable interrupts (and load final C-bit)B% RESRG ; Restore registersc RETURNo .DSABL LSB F: .SBTTL $RDBWT - Queue a Request for a Receive Data Buffer;+6; **-$RDBWT- Queue a request for a Receive Data Buffer;s@; This routine is called by DDM processes after a failure of the>; DDM to allocate an Receive Data Buffer ($RDBGT) has occured.@; The system line table flags word is updated to mark the buffer5; wait request and the global request is incremented.M;N ; Inputs:,$; R4 contains the System Line Number;l ; Outputs:; None.R;-%$RDBWT::SAVRG ; Save a registerB .IF DF M$$PRO CALL $MPSAV ; Bypass the cache .ENDC ; DF M$$PRO% ASL R4 ; Convert SLN to word offsetc3 ADD $SLTMA,R4 ; Point into System Line Index Table ;+; ** W a r n i n g **f;e2; DECnet-11M-PLUS V4.0 NTINIT hookpoint number 03.; *; Do not change the instructions following; label without checking NTINIT ;-/$RTF03:: ; NTINIT changes the instructions atN ; the location of this label: INCB @(R4)+ ; Increment wait request count for this line& NOP ; Space for NTINIT runtime code NOP:; MOV (R4),R4 ; Code replacement for DECnet-11M-PLUS V4.0; INCB L.BFWT(R4) ; ...o% INC $RDQCT ; Increment global county .IF DF M$$PRO* CALL @(SP)+ ; Restore state of the cache .ENDC ; DF M$$PRO# RESRG ; Restore the registert RETURNh n( .SBTTL $RDBQP - Purge Buffer Wait Queue;+$; **-$RDBQP- Purge Buffer Wait Queue;eC; This routine is called to cancel all requests in the Receive Data+8; Buffer Wait Queue for a particular system line number.;e ; Inputs: $; R4 contains the system line number; ; Outputs:; None.t;-,$RDBQP::SAVRG ; Save some registers .IF DF M$$PRO CALL $MPSAV ; Bypass the cache .ENDC ; DF M$$PRO' ASL R4 ; Convert SLN into word offsetR3 ADD $SLTMA,R4 ; Point into System Line Index TableB;+; ** W a r n i n g **a;Q2; DECnet-11M-PLUS V4.0 NTINIT hookpoint number 04.;h*; Do not change the instructions following; label without checking NTINITi;-/$RTF04:: ; NTINIT changes the instructions atu ; the location of this label1 MOV @(R4)+,R3 ; Get System Line Table flags wordA0 BIC #^C,R3 ; Isolate wait request count0 BIC R3,@-(R4) ; Clear wait request count in SLT NOP NOP:; MOV (R4),R4 ; Code replacement for DECnet-11M-PLUS V4.0; CLR R3 ; ...n; BISB L.BFWT(R4),R3 ; ...; CLRB L.BFWT(R4) ; ...n7 SUB R3,$RDQCT ; Reduce global wait count by same valuec .IF DF M$$PRO* CALL @(SP)+ ; Restore state of the cache .ENDC ; DF M$$PRO# RESRG ; Restore registersu RETURNh o& .SBTTL CCBGT - CCB Allocation Routine;+"; **-CCBGT- CCB allocation routine;L@; This subroutine is called within this module to allocate a CCBB; from the CCB pool or from System Dynamic Memory. This routine isA; always executed with interrupts inhibited (and multi-processors; ; locks set).B;( ; Inputs:; None.,;Q ; Outputs:*; R4 contains the address of allocated CCB6; C-Bit is CLEAR if the CCB was successfully allocated'; C-Bit is SET if the allocation failedr;e; Notes:E; Before this routine is called, the calling routine must have issuedCD; a CLC instruction followed by an INHIB$. No other values must be E; stored on the stack because if the allocation fails, the FAIL: code.D; will reach back on the stack and set the C-Bit in the saved PSW soD; that when the calling 00B `_Nroutine executes an ENABL$ the C-Bit will be); set to indicate the allocation failure.C;-CCBGT: .IF DF N$$OPT!R$$MPL 9 TSTB PRIOFF+2(SP) ;;; Can we dynamically allocate a CCB?i BMI 10$ ;;; If MI, Noo; CMP $CCBCT,$RDBTH ;;; Else, are we below the RDB thresholdC. BHI 10$ ;;; If HI, No ... allocate from pool= CMP $CCBAL,$RDBNM ;;; Have we allocated enough dynamic CCBs?c BHIS 30$ ;;; If HIS, Yes) SAVRG ;;; Save some registersC0 MOV $CCBSZ,R1 ;;; Get size of block to allocate .IF DF M$$PRO1 ADD #2,R1 ;;; 2 more bytes on a Multi-Processorl .ENDC ; DF M$$PRO/ CALL $ALOCB ;;; Try to allocate a dynamic CCBS. MOV R0,R4 ;;; Copy adress of allocated block' RESRG ;;; Restore registersH* BCS 10$ ;;; If CS, DSR allocation failed .IF DF M$$PRO) TST (R4)+ ;;; Skip over Unibus Run Mask, .ENDC ; DF M$$PRO0 INC $CCBAL ;;; Count dynamically allocated CCB BR 20$ ;;; Enter common code .ENDC ; DF N$$OPT!R$$MPLC10$:3 MOV $CCBLH,R4 ;;; Get address of first CCB in listA" BEQ 30$ ;;; If EQ, list is empty) MOV (R4),$CCBLH ;;; Unlink CCB from listA/ DEC $CCBCT ;;; Reduce count of available CCBs,20$:1 MOVB #CB.CCB,C.BID(R4) ;;; Set up buffer ID byte  .IF DF M$$PRO8 CLR C.URM(R4) ;;; Allow process to run on any processor .ENDC ; M$$PRO4. CLR (R4) ;;; Zero next pointer (clear C-Bit) RETURN ;;; Return to caller30$:* INC $CCBAF ;;; Count allocation failures2 BR FAIL ;;; Enter common failure processing code L( .SBTTL CCBRT - CCB Deallocation Routine;+$; **-CCBRT- CCB Deallocation Routine;4B; This subroutine is called within this module to deallocate a CCBE; to the CCB pool or to System Dynamic Memory. This routine is alwaystE; executed with interrupts inhibited (and Multi-Processor locks set).o;s ; Inputs:;/; R4 contains the address of the CCB to releasea;- ; Outputs:; None.e;-CCBRT: .IF DF N$$OPT!R$$MPL; .IF NDF R$$MPLa2 CMP R4,#$CEAVL ;;; Is CCB from the internal pool? BHIS 10$ ;;; If HIS, Yes .ENDC ; NDF R$$MPLiA TSTB PRIOFF+2(SP) ;;; Were we called from Device Priority Level?s3 BMI 10$ ;;; If MI, Yes ... can't interlock $DEACBt3 CMP $CCBCT,$RDBTH ;;; Can we satisfy RDB requests?s, BLOS 10$ ;;; If LOS, No ... return to list, TST $CCBAL ;;; Any dynamic CCBS allocated?* BEQ 10$ ;;; If EQ, No ... return to list, SAVRG ;;; Save some registers# MOV R4,R0 ;;; Copy address of CCBF2 MOV $CCBSZ,R1 ;;; Get size of block to deallocate .IF DF M$$PRO0 ADD #2,R1 ;;; 2 more bytes on Multi-Processors+ TST -(R0) ;;; Backup over Unibus Run Maskr .ENDC ; DF M$$PRO$ CALL $DEACB ;;; Deallocate the CCB. RESRG ;;; Restore the registers1 DEC $CCBAL ;;; Decrement count of dynamic CCB'su RETURNt .ENDC ; DF N$$OPT!R$$MPLc10$:6 MOV $CCBLH,(R4) ;;; Set first pointer in returned CCB( MOV R4,$CCBLH ;;; Set new first pointer1 INC $CCBCT ;;; Increment count of CCB's in poolS RETURNG s. .SBTTL Allocation Control Block Documentation;+>; Allocation Control Blocks are used to control the allocation8; of fixed length blocks from double link lists (address=; doublewords). The control blocks have the following format:e;g!; .WORD <# of buffers available>c$; .WORD 0,0 ; Allocation listhead#; .WORD <# of allocation failures>V;- ,1 .SBTTL BUFGT - General Buffer Allocation Routine,;+-; **-BUFGT- General Buffer Allocation RoutineI;e<; This subroutine is called within this module to allocate aD; buffer from a doubley linked list. This routine is always executed<; with interrupts inhibited (and Multi-Processor locks set).;l ; Inputs:aA; R5 contains the pointer to listhead in Allocation Control Blockt; ; Outputs:+; R2 contains the Virtual Address of bufferA$; R3 contains the APR Bias of buffer9; C-Bit is CLEAR if the buffer was successfully allocatedA'; C-Bit is SET if the allocation faileda;u; Registers Modified:I; R5$; APR6 will be mapped to the buffer.;o; Notes:E; Before this routine is called, the calling routi00B`y_TADATADATADATADATADATADATADATADATAne must have issuedxD; a CLC instruction followed by an INHIB$. No other values must be E; stored on the stack because if the allocation fails, the FAIL: codetD; will reach back on the stack and set the C-Bit in the saved PSW soD; that when the calling routine executes an ENABL$ the C-Bit will be); set to indicate the allocation failure.S;- BUFGT: CLC ;;; Assume success, MOV (R5)+,R3 ;;; Get next buffer's APR Bias3 MOV (R5)+,R2 ;;; Get next buffer's Virtual Addresss. BEQ 10$ ;;; If EQ, No more buffers available/ MOV R3,@#KISAR6 ;;; Map APR6 to the new bufferh' MOV 2(R2),-(R5) ;;; Unlink buffer from # MOV (R2),-(R5) ;;; the free listF* MOV R3,C.BUF(R4) ;;; Load the Buffer Bias MOV R3,C.BUF2(R4)7 MOV R2,C.BUF+2(R4) ;;; Load the Buffer Virtual Addressa MOV R2,C.BUF2+2(R4)4 DEC -(R5) ;;; Decrement count of available buffers RETURNL10$:6 INC (R5)+ ;;; Increment count of allocation failures=FAIL: INC PRIOFF+2(SP) ;;; Set C-Bit in saved PSW for ENABL$.Q- SEC ;;; Indicate buffer allocation failureV RETURNA ;3 .SBTTL BUFRT - General Buffer Deallocation RoutineU;+/; **-BUFRT- General Buffer Deallocation Routines;B; This routine is called within this module to deallocate a buffer>; to a doubley linked list. This routine is always called with7; interrupts inhibited (and Multi-Processor locks set).b;b ; Inputs:T+; R2 contains the Virtual Address of bufferf$; R3 contains the APR Bias of buffer;; R5 points to the buffer count in allocation control blockI;c ; Outputs:; None. ;-:BUFRT: INC (R5)+ ;;; Increment count of available buffers1 MOV @#KISAR6,-(SP) ;;; Save current APR6 mappingt: MOV R3,@#KISAR6 ;;; Map APR6 to the buffer being returned( MOV (R5)+,(R2) ;;; Link buffer to start' MOV (R5)+,2(R2) ;;; of the free list 5 MOV (SP)+,@#KISAR6 ;;; Restore previous APR6 mapping & MOV R2,-(R5) ;;; Set new first buffer MOV R3,-(R5) ;;; pointer RETURNa " .SBTTL $CELOG - Log Network Event;+; **-$CELOG-LOG NETWORK EVENTo;o ; Inputs:c; R0 - Event class and type; R1 - Event control word: ; Low byte:(; Bit 0 1 => R4 is address of a CCB$; 0 => R4 is a data area pointer;A*; 1 1 => Line-ID is SLN & Station#; 0 => Line-ID is PDV & Channels;t1; 2 1 => Event is associated with a lineP.; 0 => Event is not associated with a line;V8; 3 1 => Event is associated with a remote node5; 0 => Event is not associated with a remote nodet;+4; 4 1 => Event is associated with a circuit1; 0 => Event is not associated with a circuit:; 3; 5 1 => Event is associated with a module0; 0 => Event is not associated with a module; &; 6 1 => Use line-id from CCB2; 0 => Use line-id from event descriptor block;n ; High byte: ; # of bytes of data to copy;o); R3 - Pointer to event descriptor block:1; 3; Word 1 Line-ID (SLN & station or PDV & channel)e ; 2-4 Event dependent data; 5 Node address1"; 6 Module ID (Coded value); 7 Port #t; 8 Logical channel #;:*; R4 - Pointer to CCB or data area pointer;h; Registers modified:E; R0, R1, R2, R3, R5;-; $CELOG:: .IF DF N$$EVL!R$$MPL 1 MOV $LGPDV,R2 ; Get PDV index of logging process  BEQ 10$ ; If EQ, no loggingy2 MOV $CMPDV,-(SP) ; Save calling process PDV index6 MOV R3,-(SP) ; Save address of event descriptor block( MOV R1,-(SP) ; and event control word- MOV SP,R1 ; Set up pointer to control blocks# SAVRG ; Preserve CCB address)0 MOV $LGDDB,R5 ; Set address of logging database* MOV #$CELFN,R3 ; Set up dispatch function1 CALL $PDDSP ; and dispatch to logging process " RESRG ; Restore CCB address% CMP (SP)+,(SP)+ ; Clean up the stackx TST (SP)+ ; ... .ENDC ; DF N$$EVL!R$$MPLn10$: RETURN ; And return i" .SBTTL $TSTIM - Timeout Processor;+; **-$TSTIM-TIMEOUT PROCESSORb;kD; This subroutine is called to test and decrement a timeout count inE; the first byte of a process line table. If the count00B`_N is decremented,@; to zero, the process is dispatched at it's timeout entry point#; with a 'FS.LTM' subfunction code. ;p ; Inputs:g; R2 - PDV index of processR$; R5 - Pointer to process line table;e ; Outputs:; Only R4 will be peserved;-#$TSTIM::MOV R2,R3 ; Copy PDV index + ADD $PDVTA,R3 ; Point into PDV index tableP* MOV @#KISAR5,-(SP) ; Save current mapping> MOV @(R3)+,@#KISAR5 ; Map to process (for mapped line tables)# MTPS #PR7 ;;; Disable interruptsc$ TSTB (R5) ;;; Is the timer active? BEQ 10$ ;;; No ... just exit, DECB (R5) ;;; Yes ... decrement time to go( BNE 10$ ;;; If NE, timer still running% CALL $DSPTM ;;; Dispatch to process 10$: MTPS #0 ;;; Restore priority' MOV (SP)+,@#KISAR5 ;;; Restore mapping RETURNT;: + .SBTTL $DSPTM - Dispatch a Process Timeouti;+&; **-$DSPTM-DISPATCH A PROCESS TIMEOUT; ?; Dispatch a process timeout at it's timeout entry point with am; subfunction code of 'FS.LTM';; ; Inputs:t; R2 - PDV index of processt$; R5 - Pointer to process line table;s ; Outputs:; Only R4 will be preserved ;-)$DSPTM::MOV R4,-(SP) ;;; Save caller's R4i0 MOV #$LTMFC,R3 ;;; Get address of function code% CALL $PDSPL ;;; Dispatch to processP% MOV (SP)+,R4 ;;; Restore caller's R4R MTPS #0 ;;; Enable interruptsa RETURNc 0 .SBTTL $CMQIN - Queue a Chain of CCBs to a List;+-; **-$CMQIN - QUEUE A CHAIN OF CCBS TO A LISTt;t?; This subroutine is called to add a CCB or a chain of CCBs to "; the end of a single linked list.;i ; Inputs:c#; R3 = Address of two word listheady$; R4 = Address of first CCB in chain; ; Outputs:*; The CCB is queued to the end of the list;r; Registers modified:C; None;- '$CMQIN::SAVRG ; Save registerse"10$: MOV R4,R5 ; Copy CCB address4 BIC #CS.LST,C.STS(R5) ; Clear last CCB in chain bit0 MOV (R5),R4 ; Get address of next CCB in chain" BNE 10$ ; Loop till end of chain3 BIS #CS.LST,C.STS(R5) ; Set last CCB in chain bitC- MOV (SP),@2(R3) ; Link chain to end of queuei< MOV R5,2(R3) ; Update listhead pointer to last CCB in queue# RESRG ; Restore registersp RETURN ; Return e3 .SBTTL $CMQRM - Remove a Chain of CCBs from a List;+0; **-$CMQRM - REMOVE A CHAIN OF CCBS FROM A LIST;5; This subroutine is called to remove the first entryR; from a singly linked list.; ; Inputs:4#; R3 = Address of two word listhead;E ; Outputs:; C-bit clear:6; R4 = Address of first in chain or only CCB dequeued ; C-bit set:; Queue is emptyo;d; Registers modified:3; R4;- s5$CMQRM::SEC ; Set C-bit just in case queue is emptye1 MOV (R3),R4 ; Get address of first CCB in queueC$ BEQ 40$ ; Return if queue is empty! SAVRG ; Save a registerA110$: MOV R4,R5 ; Copy first CCB in chain addressl; BIT #CS.LST,C.STS(R5) ; Is this the last CCB in the chain?% BNE 20$ ; Yes - update the listheado5 MOV (R5),R4 ; No - get next CCB - is this the last?d' BNE 10$ ; No - loop till end of chainu:20$: MOV (R5),(R3) ; Set address of new first CCB in queue( BNE 30$ ; Branch if queue is not empty' MOV R3,2(R3) ; Otherwise close up list,=30$: CLR (R5) ; Clear link pointer in the last CCB of chain " RESRG ; Restore register40$: RETURN ; Return ,1 .SBTTL $CNV18 - Convert to 18-Bit Unibus AddressT0 .SBTTL $CNV22 - Convert to 22-Bit Q-bus Address;+,; **-$CNV18-CONVERT TO 18-BIT UNIBUS ADDRESS-; **-$CNV22-CONVERT TO 22-BIT QBUS-22 ADDRESSB;1<; This subroutine is called to convert an address doubleword=; to an 18-bit Unibus virtual addres or a 22-bit Qbus virtual ; addressy;M ; Inputs: ; R2 - Virtual address-; R3 - Relocation bias (physical address/100)l; ; Outputs:*; R2 - Low order 16 bits of Unibus address3; R3 - Bits 16 & 17 of Unibus address in bits 0 & 18;t;- .ENABL LSB.$CNV22:: ; Reference label .IF DF,K$$DAS$ MOV R2,-(SP) ; Save virtual address, TST R3 ; Buffer from exec, or common pool?6 BNE 5$ ; If NE, from common pool - use bias supplied. MOV R2,R3 ; Get virtual in required 00B%`y_TADATADATADATADATADATADATADATADATAregister CLR R2 ; Set up for left shift3 ASHC #3,R2 ; Shift active page field from virtuald ASL R2 ; Make it a word indexs/ ADD #KDSAR0,R2 ; Calculate D-space APR addressd# MOV (R2),R3 ; Get contents of APRB BR 5$ ; Join common code .ENDC ; DF,K$$DAS$CNV18:: ; Reference label* TST R3 ; Buffer from exec, or comm pool?! BEQ 10$ ; If EQ, it's from execT ; (in the low 16 or 20 K)m2 ; Exec phys addr = virtual addr = unibus addr)6 ADD $PUMR,R3 ; Add starting UMR bias to block address MOV R2,-(SP) ; Save virtual5$:i; BIC #160000,(SP) ; Clear APR selector from virtual addressL" CLR R2 ; Initialize 18 bit value .IF DF R$$EIS* ASHC #6,R2 ; Align as an 18 bit quantity .IFF ; DF R$$EIS .REPT 6 ASL R3 ; Shift low order bitsD4 ROL R2 ; into high order 2 bits for 18-bit value .ENDR .ENDC ; DF R$$EIS8 ADD R3,(SP) ; Add low 16 bits to saved offset in block' ADC R2 ; Add overflow to bits 16 & 17 ) MOV R2,R3 ; Get high order bits into R3U+ MOV (SP)+,R2 ; and low order bits into R2e10$: RETURN ; Return .DSABL LSBl ; .SBTTL $MVTBF - Move from Mapped Buffer to Unmapped Bufferb;+9; **- $MVTBF - MOVE FROM MAPPED BUFFER TO UNMAPPED BUFFERn;y=; This routine is called to move a block of memory (less thant;; 4k words) from a buffer that is currently mapped( (eitherN;; in system dynamic space or in the Comm Buffer Pool) to ansE; unmapped buffer. Note the mapped buffer can not be in the process's,A; space mapped via APR5 since it uses APR5 to map to the unmappedb ; buffer.e;0; Calling format:n; JSR R1,$MVTBF ;. ; Inputs:F.; R2 = Virtual address of mapped "from" buffer,; R3 = Number of bytes to move on the stack: ; ----------n1; ! R1 ! Original contents of R1 before calle ; !--------!t<; ! VA ! 16-bit virtual address of unmapped "to" buffer ; !--------!y5; ! BIAS ! Relocation bias of unmapped "to" bufferp ; ---------- ; ; Outputs:D; R2 = Updated address of "from" buffer points to last byte moved +1 ; R3 = Zeroo;e*; Still mapped to "from" buffer via KISAR6;; Registers modified: ; R2 & R3 ;- .ENABL LSBs7$MVTBF::MOV KISAR5,-(SP) ; Save current process mappingo& MOV 6(SP),KISAR5 ; Map to "to" buffer# MOV R1,6(SP) ; Save return addressl/ MOV 4(SP),R1 ; Get "to" buffer virtual addressa6 CMP #140000,R1 ; Is the "to" buffer in the exec pool?< BHI 10$ ; If HI, yes then don't alter the virtual adddress+ SUB #20000,R1 ; Set VA for bias via KISAR5f10$:0 MOVB (R2)+,(R1)+ ; Move buffer a byte at a time SOB R3,10$ ; Loop till donef BR 20$ ; Join common exit code i= .SBTTL $MVFBF - Move from Unmapped Buffer to a Mapped Buffer;;+;; **- $MVFBF - MOVE FROM UNMAPPED BUFFER TO A MAPPED BUFFERu;r=; This routine is called to move a block of memory (less than"A; 4K words) from an unmapped buffer to a buffer that is currentlyhE; mapped (either in system dynamic space or in the Comm Buffer Pool).e@; The routine unmaps the requesting process and uses ARP5 to map ; to the unmapped "from" buffer.;e; Calling format:o; JSR R1,$MVFBF ; ; Inputs:m,; R2 = Virtual address of mapped "to" buffer(; R3 = Number of bytes to move on stack: ; ----------V1; ! R1 ! Original contents of R1 before callh ; !--------!a>; ! VA ! 16-bit virtual address of unmapped "from" buffer ; !--------! 7; ! BIAS ! Relocation bias of unmapped "from" bufferm ; ----------o;n ; Outputs:B; R2 = Updated address of "to" buffer points to last byte moved +1 ; R3 = Zero ;t(; Still mapped to "to" buffer via KISAR6;m; Registers modified: ; R2 & R3s;-7$MVFBF::MOV KISAR5,-(SP) ; Save current process mapping ( MOV 6(SP),KISAR5 ; Map to "from" buffer# MOV R1,6(SP) ; Save return addressR1 MOV 4(SP),R1 ; Get "from" buffer virtual addresst8 CMP #140000,R1 ; Is the "from" buffer in the exec pool?; BHI 15$ ; If hi, yes then don't alter the virtual address + SUB #20000,R1 ; Set VA for bias via KISAR5a15$:0 MOVB (R1)+,(R2)+ ; Move buffer a byte at a time SOB R3,15$ ; Loop till done 20$:+00B-`_N MOV (SP)+,KISAR5 ; Restore process mapping MOV (SP)+,R1 ; Restore register TST (SP)+ ; Clean up stack RETURN ; Return .DSABL LSB  "' .SBTTL $CALLX - Mapped Subroutine Call ;+5; **-$CALLX-MAPPED SUBROUTINE CALL TO ANOTHER PROCESSt;C; Calling sequence:e; JSR R5,$CALLX (; .WORD