PVOL1BACKUP D%B1111001001 1Pe _vߋt&x tR 5@H |x ܂r& BL7P e>7EЉB6R2$ ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM ***   *  + 23E Ew    Е-   0@A W e`fÊ    E  w t  ť ť 0B  PHDR111SKIT 00010001000100 00000 00000 000000DECFILE11A PPHDR2U0414404144 M 00 PP11SKIT11SKITT %<:VE-.16JAN84181113DECNPe _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM *** VOL1D%B000HDR100010000000100 00000 00000 000000DECFILE11AEOF14444444444324410 Pv fwp%MS \ 5(w:5w(U &w(H " | Pm)' DEz_kQ?G}(@DkQADkQBD9ykQCDjkQDDkQED@,kQFD:kQGD:kQHD:kQID:kQJD:kQKD:kQLD:kQMDhzkQND}kQOErkQPEykQQDEy_kQRGkQSGEHSkQTNEkQUiE.kQViE]kQWiEhzkQXoEhzkQYrEkQZsEkQ[sE'kQ\vEkQ]EhjkQ^EkQ_EL;kQ`-FykQaFkQbF zkQcAG@kQdFKkQeGp kQfGLkQgG8^kQhRG@kQiG}kQjGkQkG kQlG8kQmG@`kQn*KkQkQoG kQpG}qF "Ss kQ%u~ kQ&`fkQ'`kQ(``kQ)`kQ*`""kQ+`2kQ,`PKkQ-`KkQ.`kkQ/` qkQPUFDz%PrF sE DtJxuF vF`wDEvxGEQGp kQfGLkQgG8^kQhRG@kQiG}kQjGkQkG kQlG8kQmG@`kQn*KkQkQoG kQpG}qF "Ss kQ%u~ kQ&`fkQ'`kQ(``kQ)`kQ*`""kQ+`2kQ,`PKkQ-`KkQ.`kkQ/` qkQPUFD z%PyF zE D{DEv|F }F`~JxGEQGp kQfGLkQgG8^kQhRG@kQiG}kQjGkQkG kQlG8kQmG@`kQn*KkQkQoG kQpG}qF "Ss kQ%u~ kQ&`fkQ'`kQ(``kQ)`kQ*`""kQ+`2kQ,`PKkQ-`KkQ.`kkQ/` qkQPUFD OzP1KX_8K:;Kd:Ka_GEQGp kQfGLkQgG8^kQhRG@kQiG}kQjGkQkG kQlG8kQmG@`kQn*KkQkQoG kQpG}qF "Ss kQ%u~ kQ&`fkQ'`kQ(``kQ)`kQ*`""kQ+`2kQ,`PKkQ-`KkQ.`kkQ/` qkQPUFD OzP8K:;Kd:Kadda_GEQGp kQfGLkQgG8^kQhRG@kQiG}kQjGkQkG kQlG8kQmG@`kQn*KkQkQoG kQpG}qF "Ss kQ%u~ kQ&`fkQ'`kQ(``kQ)`kQ*`""kQ+`2kQ,`PKkQ-`KkQ.`kkQ/` qkQPUFD Oz,Pƚƺ~t:'^:Kadda_GEQGp kQfGLkQgG8^kQhRG@kQiG}kQjGkQkG kQlG8kQmG@`kQn*KkQkQoG kQpG}qF "Ss kQ%u~ kQ&`fkQ'`kQ(``kQ)`kQ*`""kQ+`2kQ,`PKkQ-`KkQ.`kkQ/` qkQPUFD wvz PYqwkQ:kQ skQp:kQskQzkQ8skQkQ.skQ@kQzkQMskQ8"kQ$skQfskQxkQfskQskQBkQTskQskQskQskQ6d8kQskQkQkQ kQskQ0 kQskQkQkQhLkQfkQykQ~kQkQkQGkQ`kQ8 kQ!kQLSskQykQ hkQskQ""`kQTskQz kQ8@QkQ:_kQsQkQ;;_kQ<;skQLskQskQE.Al"" kQ16JAN8416384916JAN84163848[.A""?TkQ16JAN8416385016JAN84163849>.A|'pkQ16JAN8416385116JAN84163850Sg.A'kQ16JAN8416385116JAN84163851.H(-LkQ16JAN8416385216JAN84163851.A,ZkQ16JAN8416385216JAN84163852e.KE`kQ16JAN8416385316JAN84163852 .J<LykQ16JAN8416385416JAN84163853.C Q kQ16JAN8416385516JAN84163854.WGGE` kQ16JAN8416390016JAN84163855F&p. Of kQ16JAN8416390116JAN84163900m.!A Lq kQ16JAN8416390216JAN84163901sY."C Uq kQ16JAN8416390316JAN84163902 |#.#Kvs kQ16JAN8416390416JAN84163903ʮ.$Bs kQ16JAN8416390616JAN84163904H.%Gu~ kQ16JAN8416390716JAN84163906`.&Q `fkQ16JAN8416390816JAN84163907.'AV`kQ16JAN8416390916JAN84163908.(R<``kQ16JAN8416391116JAN84163909`.)Mz`kQ16JAN8416391116JAN84163911.*O``""kQ16JAN8416391316JAN84163911\.+V..`2kQ16JAN8416391616JAN84163913-.,QBB.`PKkQ16JAN8416392016JAN84163916A .-O&`KkQ16JAN8416392216JAN84163920b3..O `kkQ16JAN8416392216JAN84163922z./O` qkQ16JAN8416392416JAN84163923.0P>8xfkQ16JAN8416392516JAN84163924.1J 8xkQ16JAN8416392616JAN84163925 ة.2QMM8xkQ16JAN8416393016JAN84163926L.3H 8x`kQ16JAN8416393116JAN84163930.4O68x""kQ16JAN8416393216JAN84163931.5Q~8xKkQ16JAN8416393316JAN84163932s.6F`8xkkQ16JAN8416393416JAN84163933c.7WDD~WkQ16JAN8416393916JAN84163934C@ .8@wu~kQ16JAN8416394016JAN84163939^9).9* &^16JAN8416394116JAN84163940ec/.:LMr}_16JAN8416394616JAN84163942Kyx.;jkrxQ_16JAN8416395216JAN84163946ig.<*x:^16JAN8416395316JAN84163953/f}.=*x:^16JAN8416395416JAN841639530} PUFDvz%P.>G .DEz_kQ16JAN8416395516JAN84163954 1/.??G}(16JAN8416395516JAN84163955;.@G `DkQ16JAN8416395716JAN84163956 B.AHDkQ16JAN8416395916JAN84163957Nӣ.BERD9ykQ16JAN8416395916JAN84163959f.C?DjkQ16JAN8416400016JAN84163959kr{.DADkQ16JAN8416400116JAN84164000 qԅ.EDD@,kQ16JAN8416400316JAN84164001Ğ.FJ D:kQ16JAN8416400416JAN84164003 .GDD:kQ16JAN8416400516JAN84164004.HFD:kQ16JAN8416400616JAN841640054.IED:kQ16JAN8416400616JAN84164006E.JED:kQ16JAN8416400716JAN84164006D.KA(D:kQ16JAN8416400816JAN84164007i.LDTD:kQ16JAN8416400916JAN84164008.M?BDhzkQ16JAN8416400916JAN84164009j.NDHD}kQ16JAN8416401116JAN84164009 *.O? LErkQ16JAN8416401216JAN84164011 .PC EykQ16JAN8416401316JAN84164012 .Q?*DEy_kQ16JAN8416401416JAN84164013.RC GkQ16JAN8416401516JAN84164014 i.SEGEHSkQ16JAN8416401616JAN84164015 ~.T?NEkQ16JAN8416401616JAN84164016r.UB liE.kQ16JAN8416401716JAN84164016 .V@ iE]kQ16JAN8416401916JAN84164017 2.W@iEhzkQ16JAN8416402016JAN84164019*.XAoEhzkQ16JAN8416402116JAN841640201.YD ZrEkQ16JAN8416402416JAN8416402184.Z?fsEkQ16JAN8416402516JAN84164024X,{.[AsE'kQ16JAN8416402616JAN84164025\.\@ vEkQ16JAN8416402716JAN84164026 `.]@ EhjkQ16JAN8416402816JAN84164027 k.^?EkQ16JAN8416402816JAN84164028w(._KEL;kQ16JAN8416403016JAN84164029|.`ET-FykQ16JAN8416403116JAN84164030.aIFkQ16JAN8416403316JAN84164031d.b?bF zkQ16JAN8416403316JAN84164033.c@AG@kQ16JAN8416403516JAN84164034s.dAFKkQ16JAN8416403516JAN841640351.eK $Gp kQ16JAN8416403616JAN84164035 ,.fC(GLkQ16JAN8416403716JAN84164036^.g?G8^kQ16JAN8416403916JAN84164038.hCRG@kQ16JAN8416403916JAN84164039.i? G}kQ16JAN8416404116JAN84164039 .jAGkQ16JAN8416404216JAN84164041t.k?G kQ16JAN8416404316JAN841640422z.l?tG8kQ16JAN8416404416JAN84164043.m?lG@`kQ16JAN8416404516JAN84164044.nA*KkQkQ16JAN8416404616JAN84164045p.oA hG kQ16JAN8416404716JAN84164046 .pA G}16JAN8416404716JAN84164047ů.qF "S16JAN8416404916JAN84164047(PUFDz%P.rAF 16JAN8416405016JAN84164049#L.s9DE D16JAN8416405016JAN84164050$0.t&PJx16JAN8416405116JAN84164050%.upF 16JAN8416405116JAN84164051&}O.v(F`16JAN8416405116JAN84164051'>9.w4DEv16JAN8416405216JAN84164052(|H.x;GEQ16JAN8416405216JAN84164052)PUFD z%P.yAF 16JAN8416405316JAN84164052*E.z9DE D16JAN8416405316JAN84164053+3.{4DEv16JAN8416405416JAN84164054,J.|nF 16JAN8416405416JAN84164054-R.}(F`16JAN8416405516JAN84164054.P<.~&PJx16JAN8416405616JAN84164055/ѩ.:GEQ16JAN8416405616JAN841640560'PUFD OzP .1KX_16JAN8416405816JAN841640561./8K16JAN8416405816JAN84164058Go.@:;K16JAN8416405916JAN84164059Hr.0d16JAN8416405916JAN84164059I~.A:K16JAN8416410016JAN84164100Jd.a_16JAN8416411016JAN84164100K PUFD OzP .+8K16JAN8416411116JAN84164110d.@:;K16JAN8416411116JAN84164111Wh..d16JAN8416411216JAN84164112t.?:K16JAN8416411216JAN84164112h.aadd16JAN8416411416JAN84164112 PUFD Oz,P.ƚ16JAN8416412416JAN84164114<.ƺ~16JAN8416413516JAN84164124A.* Jt:'^16JAN8416413616JAN84164135 @PUFD wvz P.VVV! kQ16JAN8416414516JAN84164136UJ-}.I!!&#pkQ16JAN8416415016JAN84164145 .M#8;kQ16JAN8416415216JAN84164150.UGG*$` kQ16JAN8416415716JAN84164152Fm.I*&dkQ16JAN8416415816JAN84164157  .U)kQ16JAN8416421716JAN84164158, R.K''H)XkQ16JAN8416422016JAN84164217& '.A*kQ16JAN8416422116JAN84164220 J.Q-kQ16JAN8416422316JAN84164221 T.>-8;kQ16JAN8416422416JAN84164223 .H.-`^kQ16JAN8416422616JAN84164224 C.M/0kQ16JAN8416422716JAN84164226! .J R/8;kQ16JAN8416422816JAN84164228 3 ].N__^2kQ16JAN8416423516JAN84164229^@ .K//J3kQ16JAN8416423916JAN84164235. f[.R4`kQ16JAN8416424116JAN84164239 .V++ 92kQ16JAN8416424416JAN84164241* .>9>kQ16JAN8416424616JAN84164244 .? D9KkQ16JAN8416424716JAN84164246  .VR9kQ16JAN8416424916JAN84164248 d.LDD skQ16JAN8416425516JAN84164249C4 "~.I skQ16JAN8416425616JAN84164255x .NZZ,KskQ16JAN8416430316JAN84164256Y 7A.O:skQ16JAN8416433616JAN84164303 w.N2MskQ16JAN8416433816JAN84164336 .N++skQ16JAN8416434516JAN84164338* .R$skQ16JAN8416482416JAN84164737S.KXX#kQ16JAN8416483316JAN84164824W7.O skQ16JAN8416483416JAN84164833 1.P4skQ16JAN8416483716JAN84164835#:.P== skQ16JAN8416484316JAN84164837<4rl.Evs ~kQ16JAN8416484516JAN84164843qKK.Nxx&YqwkQ16JAN8416490216JAN84164845 v .P77@:kQ16JAN8416490816JAN841649026.PUUV skQ16JAN8416491916JAN84164908T2,.Gp:kQ16JAN8416492216JAN84164920.I<<^skQ16JAN8416492716JAN84164922;?x.O44zkQ16JAN8416493216JAN841649273u.M8skQ16JAN8416495116JAN84164932  .KkQ16JAN8416495316JAN84164951d.J11X.skQ16JAN8416495716JAN841649530.FL@kQ16JAN8416495816JAN84164957 x.A DzkQ16JAN8416500016JAN84164959 @.PJJMskQ16JAN8416500516JAN84165000I?.M 8"kQ16JAN8416500616JAN84165005 f.NH$skQ16JAN8416500816JAN84165006rN.NfskQ16JAN8416501016JAN84165008 ..OooBxkQ16JAN8416501916JAN84165010nK.N fskQ16JAN8416502116JAN84165019 .PNskQ16JAN8416502216JAN84165021ZC.ClBkQ16JAN8416502316JAN84165022%@.N;;TskQ16JAN8416502616JAN84165023:)p.NBB&skQ16JAN8416503216JAN84165027Ad|.NrskQ16JAN8416503416JAN84165032+L.NskQ16JAN8416503716JAN84165035Q.G 6d8kQ16JAN8416503916JAN84165037Z.NskQ16JAN8416504116JAN84165039CZ.E^kQ16JAN8416504216JAN84165041 .H kQ16JAN8416504316JAN84165042yP.L8 kQ16JAN8416504516JAN84165043 <.K<<xskQ16JAN8416505216JAN84165045;z.O:0 kQ16JAN8416505516JAN84165052K.NMMskQ16JAN8416510416JAN84165055Lb.DkQ16JAN8416510616JAN84165104 q.O..tkQ16JAN8416511116JAN84165107+.JbhLkQ16JAN8416511216JAN84165111.N ~fkQ16JAN8416511416JAN84165112 7.JykQ16JAN8416511516JAN84165114~C.H~kQ16JAN8416511716JAN84165115JN.KkQ16JAN8416511916JAN84165117u\.K::PkQ16JAN8416512316JAN841651199!.I GkQ16JAN8416512516JAN84165123 [O.K`kQ16JAN8416512716JAN84165125fxi.I>8 kQ16JAN8416512816JAN84165127.D\!kQ16JAN8416513016JAN84165128.N\\LSskQ16JAN8416513516JAN84165130[&.J ykQ16JAN8416513616JAN84165135M.I hkQ16JAN8416513816JAN84165137.K$$`skQ16JAN8416514316JAN84165138#xh.HDD""`kQ16JAN8416514916JAN84165143C%mv.OTskQ16JAN8416515116JAN84165149i.Ouubz kQ16JAN8416515916JAN84165151t6.J8@QkQ16JAN8416515916JAN84165159D.H:_kQ16JAN8416520016JAN84165159yN.QsQkQ16JAN8416520116JAN84165200jw.F;;_kQ16JAN8416520116JAN84165201 F.L f<;skQ16JAN8416520316JAN84165201 x.O$$LskQ16JAN8416520616JAN84165203#+.F))skQ16JAN8416520816JAN84165206(O .M]]hLkQ16JAN8416532416JAN841653212 %g^.O..tkQ16JAN8416532716JAN84165324-1.RLskQ16JAN8416534016JAN84165327_%.K VkQ16JAN8416534116JAN84165340 6 <].6p:kQ16JAN8416534116JAN84165341B b.P00QkQ16JAN8416534416JAN84165341/C .M!!#wkQ16JAN8416534616JAN84165344 s t.P,,RkQ16JAN8416534916JAN84165347+ /C.NL!skQ16JAN8416535116JAN84165349 ]i.G++MskQ16JAN8416535416JAN84165351* .J22T$NskQ16JAN8416535716JAN841653541 .HXRkQ16JAN8416535816JAN84165357 1!:.O||~4RskQ16JAN8416540616JAN84165358{?!4PUFDzP.cUUvz,16JAN8416435716JAN84164345T m.cw#16JAN8416441216JAN84164357p `F.h6wd16JAN8416442816JAN84164412\}.Xw:16JAN8416443216JAN84164428;.Q\w 16JAN8416443916JAN84164433\.T (@16JAN8416444016JAN84164439w.Z--w8v16JAN8416444516JAN84164440,XC.bFFdwF 16JAN8416445216JAN84164445E=.Vd1KX16JAN8416445416JAN84164453 ߲.]wd16JAN8416445616JAN84164454PUFDOOzP. skQx16JAN8418085216JAN84180840!. ./#jL_16JAN8418085516JAN84180852-"C. *M^16JAN8418085616JAN84180855". @A#Q"S16JAN8418085916JAN84180856?"{.  zjL_16JAN8418091116JAN84180900*#.! W &[qkQ16JAN8418091216JAN84180911 $." *$$f#l^16JAN8418091516JAN84180912#$.# *zz^16JAN8418091616JAN84180915>$.$ * @~^16JAN8418091616JAN84180916D$.% *E,K^16JAN8418091716JAN84180916E$.& *` ^16JAN8418091716JAN84180917I$.' *jZg^16JAN8418091816JAN84180917J$qD.( *HZg8^16JAN8418091916JAN84180918M$A.) * Zg9;^16JAN8418092016JAN84180919S$|.* *M^16JAN8418092016JAN84180920\$.+ * t^^16JAN8418092116JAN84180921a$o., *Zgd^16JAN8418092316JAN84180922 j$*PDATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATAP00^ 3Zg .IIF NDF $SIP .NLIST ;  .IDENT /01.1/;SA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.E; COPYRIGHT (C) 1981;A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE @; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.B;1@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COM+ .TITLE KFLT16 FLOAT 2'S COMPLEMENT INTEGERD .IDENT /M01.00/;0; COPYRIGHT (C) 1977, 1978/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.R;>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THES .TITLE REQSB .IDENT /13.64/) M; 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.;L; VERSION 13.64+;5; D. N. CUTLER 10-AUG-73;(; PREVIOUSLY MODIFIED BY: ;U; D. N. CUTLER; T. J. MILLER; P. WANNHEDEN ; CHUCK SPITZB; M. S. HARVEY;I; MODIFIED BY:;C; M. S. HARVEY 23-JUL-797; MSH008 -- CORRECT CONDITIONAL F.;.; MODIFIED BY:.; .; E. A. FLOYD 14-OCT-80/.; EF020 -- FORCE CREATION OF SAVED ANSWER FILE.;).; EF021 -- UPDATE TO RUN ON VAX/VMS HOST.;/.; EF026 -- UPDATE VERSION NUMBER AND COPYRIGHT.;.; E. A. FLOYD 15-JAN-81>.; EF038 -- REMOVE IAS REFERENCES - NO LONGER A SUPPORTED HOST.;.; E. A. FLOYD 4-FEB-812.; EF039 -- ADD MS AS POSSIBLE DISTRIBUTION DEVICE.;.; E. A. FLOYD 11-FEB-816.; EF041 -- REMOVE FOR COMPATIBILITY WITH SYSGEN SETUP.;.; P.J. KOBAR 30-MAR-81.; PJK11S -- POST BL30 CLEANUP.;.; M.E. MACKAY 28-APR-81..; MEM023 -- ADD LIMITED SUPPORT FOR TARGETING.;.; M.A. JOHNSON 13-MAY-81E5.; MJ014 -- FIX VAX TASK ASSIGNMENTS (11MTKB, 11MVMR)N.;.; M.A. JOHNSON 26-OCT-81EM.; MJ024 -- FIX UP SOME OF THE VAX & TAPE PROC. PARTS (AT BL31E BUT SET BL32) .; .ENABLE SUBSTITUTIONF .ENABLE GLOBAL- .DISABLE LOWERCASED .TEST ! .SETS $SGNUC [2:-1] .SETT $11SGNO .SETF $MPLUSI .SETF $VAXG .SETF MSYS .IF EQ 1 .SETT MSYSK .IFT MSYS .GOTO 10N .IF EQ 6 .SETT $MPLUS .IFT $MPLUS .GOTO 10D .IF EQ 5 .SETT $VAXM .IFT $VAX .GOTO 10E ;E ; You are trying to do an RSX-11S system generation on a host systemOC ; which is not supported in the RSX-11S system generation process.A? ; Only RSX-11M, RSX-11M-PLUS, and VAX/VMS are supported hosts.A ; /#.10: .IFT MSYS .SETS HOST "RSX-11M"S& .IFT $MPLUS .SETS HOST "RSX-11M-PLUS" .IFT $VAX .SETS HOST "VAX/VMS"G; ;; RSX-11S Version 4.0 BL32 System Generation done on 'HOST'1;; Copyright (C) 1979,1981P/; Digital Equipment Corporation, Maynard, Mass..; All Rights Reserved.;O .SETS UIC .SETF $MCRd3 .IF EQ "DCL" .OR .IF EQ "MCR" .GOTO 14w;h2; SGN -- Procedure can only be run from MCR or DCL;e".14: .IF EQ "MCR" .SETT $MCR .IF EQ "MCR" .GOTO 18;A; Setting the CLI to MCR;S SET TERM MCRS.18: .IFT MSYS .GOTO 65R;1*; RSX-11S system generation set-up section;C; The system device is the disk on which all of the host's, 'HOST',oG; system files are stored. If your 11S target disk is the system deviceJ; then there may possibly be a conflict in some file names (e.g., SYSLIB).; .IFT $MPLUS ;QI.IFT $MPLUS ; Your target disk will be SY: which is currently assigned toe&.IFT $MPLUS ; to '''': .IFT $MPLUS ;RD .ASK Z Is the target disk, '''':, the system device .IFF Z .GOTO 22 .IF $SGNUC EQ "2,200" .GOTO 22 ;-G; The system generation procedures will be put in [2,200] 008=TADATADATADATADATADATADATADATADATAsince you ares1; targeting to the system disk on a Non-11M host.t;e SET /UIC=[2,200]m .SETS $SGNUC "2,200"m .TESTFILE [0,0]002200.DIR! .IF NE 1 UFD SY:[2,200] .GOTO 22U.2:;T/; Group number 2 is reserved for 11S SYSGEN useu;n.22:K .IFF Z .ASKN [1:10:1] $SYGRP What is the group number for the system filessN .IFF Z .ASKN [1:11:11] $UIC What is the group number for the executive filesK .IFT Z .ASKN [3:10:3] $SYGRP What is the group number for the system fileseM .IFT Z .ASKN [3:10:3] $UIC What is the group number for the executive filest* .IF $SYGRP EQ 2 .OR .IF $UIC EQ 2 .GOTO 2 .SETF $TARGTI0 .IF $SYGRP NE 1 .OR .IF $UIC NE 11 .SETT $TARGT .SETS TEMP ""- .IFF $VAX .SETS P1 +"''"+":"S' .IFT $VAX .ASKS P1 Target device name1+ .IFT $VAX .SETS TEMP P1[:]s* .IFT $VAX .IF TEMP NE ":" .SETS P1 P1+":" .IFT $VAX SET DEFAULT 'P1't .IFT $VAX ASN 'P1'=SY:  .IFT $VAX ASN 'P1'=SY0: .IFT $VAX ASN 'P1'=LB:r .IFT $VAX ASN 'P1'=LB0: .IFT $VAX ASN MP:=MP0:a .IFT $VAX ASN TK:=TK0:  .IFT $VAX .SETT $MPLUSF. .IFT $VAX ASN 'P1'['$SYGRP',54]11MTKB.TSK=TKB. .IFT $VAX ASN 'P1'['$SYGRP',54]11MVMR.TSK=VMR .SETS $EXC ""A .ASK COPY Copy the RSX-11S distribution files to the target diskX .IFF COPY .GOTO 65i9 .ASKS $EXC Enter device for the RSX-11S distribution kitF .TEST $EXCM$ .SETS TEMPS $EXC[:]% .IF TEMPS NE ":" .SETS $EXC $EXC+":"Y .SETF TAPEX .SETS SKIT $EXC[1:2]VF .IF SKIT EQ "MM" .OR .IF SKIT EQ "MT" .OR .IF SKIT EQ "MS" .SETT TAPEJ .IFT TAPE .ASK $T2400 Is the RSX-11S distribution kit on a 2400 foot reel .IFNDF $T2400 .SETF $T2400V .SETS MEDIA "disk"5 .IFT TAPE .SETS MEDIA "tape"".60:;O-; Place the 'MEDIA' labeled 11SKIT1 on '$EXC'a;t& .ASK Z Is the 'MEDIA' ready on '$EXC' .IFF Z .GOTO 60 .IFF TAPE MOU '$EXC'11SKIT1 .IFT TAPE MOU '$EXC'/FORS .SETS UTIL "PIP"L .IFT TAPE .SETS UTIL "FLX"  .SETS NV "/NV". .IFT TAPE .SETS NV "/RS"C .SETS INSW "" .IFT TAPE .SETS INSW "/DO/RW" .SETS DENS ""# .IFT $T2400 .SETS DENS "/DNS:1600"07 'UTIL' 'P1''NV'='$EXC'[200,200]11SCOPY.CMD'INSW''DENS'F @11SCOPY.CMDF.;.65: @'UIC'SYSGENisk"5 .IFT TAPE .SETS MEDIA "tape"".60:;O-; Place the 'MEDIA' labeled 11SKIT1 on '$EXC'a;t& .ASK Z Is the 'MEDIA' ready on '$EXC' .IFF Z .GOTO 60 .IFF TAPE MOU '$EXC'11SKIT1 .IFT TAPE MOU '$EXC'/FORS .SETS UTIL "PIP"L .IFT TAPE .SETS UTIL "FLX"  .SETS NV "/NV". .IFT TAPE .SETS NV "/RS"C .SETS INSW "" .IFT TAPE .SETS INSW "/DO/RW" .SETS .;  .;. .; MODIFIED BY: .;  .;6 .; E. A. FLOYD 3-JUL-80* .; EF015 -- ADD DIRECTIVE COMMON SUPPORT .;M .; E. A. FLOYD 15-OCT-80i, .; EF022 -- REMOVE COMMENTS CONCERNING PDT .;l .; E. A. FLOYD 29-OCT-80K3 .; EF023 -- ADD CDA BUILD SUPPORT FOR NON-M HOSTS$ .; - .; EF024 -- ADD BLDLAINIT BUILD SUPPORT AND$ .; RELEVANT FOR INCLUSION IN VMR .;P4 .; EF025 -- ALWAYS USE MAC AND TKB (NO MORE "BIG") .;A1 .; EF026 -- UPDATE VERSION NUMBER AND COPYRIGHTS .;  .; E. A. FLOYD 14-NOV-80.5 .; EF029 -- ADD ISA AND SETTIM SUPPORT, CLEANUP CDA0 .;  .; E. A. FLOYD 24-NOV-80M4 .; EF031 -- CHANGE LENGTH OF OTL IN OTLBLD.CMD AND .; PERTINENT COMMENTSR .;P .; E. A. FLOYD 25-NOV-8091 .; EF032 -- SET SYMBOL FOR M HOSTS AND CLEAN UPO .;O8 .; EF033 -- CHANGE COMMENT SO GEN PARTITION IS DEFINED* .; AS EITHER TASK OR SYSTEM CONTROLLED .;  .; E. A. FLOYD 26-NOV-80D- .; EF034 -- CHANGE SYMBOL FOR RSDEMO GBLPATE .;I .; E. A. FLOYD 15-JAN-81.3 .; EF038 -- REMOVE REFERENCES AND SUPPORT FOR IAS  .;E .; E. A. FLOYD 4-FEB-81. .; EF040 -- REMOVE SINGLE RL SUPPORT AND ADD, .; PRVDSK SYMBOL FOR OBJECTS DISK' .; AND MOVE EXEC AND FDX TTDRV OLBSL) .; AND BLD.CMD FILES TO PRVDSK FOR RKR .;S .; E. A. FLOYD 12-FEB-81 1 .; EF042 -- FIX ISA LIBRARY INSERTIONS AND USERD .; WRITTEN DRIVER COMMENTS .; E. A. FLOYD 13-FEB-81A1 .; EF044 -- REMOVE TU58 SUPPORT FOR 11SKIT TYPE  .;O .; E. A. FLOYD 16-FEB-81L1 .; EF045 -- ADD SUPPORT FOR 00@ 3Zg3RD FLOPPY: 11SKIT3  .;R .; E. A. FLOYD 19-FEB-81 # .; EF048 -- MISCELLANEOUS CLEANUPS .;  .; E. A. FLOYD 10-MAR-81 ( .; EF051 -- FIX LOADING OF RELEASE KIT .;D .; P.J. KOBAR 26-MAR-81/ .; PJK043 -- REMOVE TU58 SUPPORT AND CLEAN UP .; .; P.J. KOBAR 9-APR-81 3 .; PJK044 -- LOWER CASE, 11MTKB AND MORE CLEAN-UP .;  .; P.J KOBAR 15-APR-814 .; PJK049 -- FIX CDA BUILD CODE; UPDATE TASK SIZES .;R .; P.J. KOBAR 16-APR-81. .; PJK050 -- FIX RSX-11M KIT DETECTION CODE .;  .; P.J. KOBAR 16-APR-81- .; PJK051 -- FIX RSX-11S KIT DETECTION CODE  .;L .; M.E. MACKAY 28-APR-81 0 .; MEM023 -- ADD LIMITED SUPPORT FOR TARGETING .;L .; M.A. JOHNSON 13-MAY-812 .; MJ013 -- FIX SO THAT DRIVERS MAY BE BUILT W/O1 .; BUILDING THE EXEC. AND ADD VMS ASSIGNMENTSK .;- .; M.E. MACKAY 26-MAY-81E< .; MEM024 -- FIX MAC LINE LENGTH PROBLEM VIA "MAC @TKNASM" .;B .; M.A. JOHNSON 15-JUN-814 .; MJ019 NUMEROUS CLEANUPS INCLUDING MAP SPOOLING,, .; RK05 SPACE CLEANUPS, TASK INSTALLATION+ .; CHECKING FOR ON-LINE GENS, MISC. ETC.T .;N .; M.A. JOHNSON 17-JUN-816 .; MJ020 COPY SYSLIB AND EXELIB TO THE BASELINE FROM1 .; PRVOBJ FOR RK05 DIST. KITS. COMMENT OUT ALL3/ .; COPYING FROM FLOPPY DISK KITS (DX & DY) -B2 .; THEY NO LONGER EXIST. FORCE DELETION OF THE0 .; 11S KIT FILES FOR RK05 DIST. KITS WHEN THE5 .; USER IS READY TO CONFIGURE THE SYSTEM WITH VMR.O ;6 ; RSX-11S Version 4.0 BL32 System Generation Phase II ; ; Copyright (C) 1975, 1981N/ ; Digital Equipment Corp., Maynard, MA. 01754E ; All Rights Reserved. ;- ; Build The Executive And All Required TasksA ;E ; This command file will produce the target system on your SY: disk.UF ; If it is an RK05 or an RL01, this command file will delete a numberF ; of files from this disk to make room for those required to complete= ; this 11SGEN. You must be running on an expendable copy ofH< ; your disk. Note however, that the disk will be left in a> ; state such that RSX-11S sysgens may be performed at a later> ; date. In addition, the sysgen itself may be terminated andA ; may be restarted at just about any point to rebuild particularl ; pieces of the system. ; .ENABLE SUBSTITUTION  .ENABLE GLOBALa .SETS UIC .SETT $11SGNl .SETS SMAC "".0A:5 .ASKS $SGU In what UIC is SGNPARM.CMD if not ''o4 .IF $SGU EQ "Y" .OR .IF $SGU EQ "" .SETS $SGU  .;l .; REMOVE BRACKETS IF SUPPLIEDo .;, .TEST $SGUk .SETN TEMPN 1 .SETN TEMPN2  .SETS TEMPS2 $SGU[1:1]f% .SETS TEMPS3 $SGU[:], .IF TEMPS2 EQ "[" .INC TEMPNn .IF TEMPS3 EQ "]" .DEC TEMPN2 .SETS TEMPS $SGU[TEMPN:TEMPN2]p .SETS $SGU TEMPSe .TESTFILE ['$SGU']SGNPARM.CMD .IF EQ 1 .GOTO 0Ba:; 11SGEN2 -- SGNPARM does not exist in ['$SGU'] ---- Retry .GOTO 0An.0B: @['$SGU']SGNPARM.CMDo.;.;DETERMINE CLI .; .SETF $MCRG6 .IF EQ "DCL" .OR .IF EQ "MCR" .GOTO 0B00A;L2; SGN -- Procedure can only be run from MCR or DCL; %.0B00A: .IF EQ "MCR" .SETT $MCRE .IF EQ "MCR" .GOTO 0B00B,;.; Setting the CLI to MCR; SET TERM MCR".0B00B:E TIM .SETT UFDX$ .SETT TKBXP .SETT PIPX$ .SETT LBRX. .SETT EDIXG .SETT FLXXD .SETT MACXR .SETT VMRX0 .SETS P1 "" .SETF MSYSe .IF EQ 1 .SETT MSYSt .IFT MSYS .SETN $SYGRP 1S .IFT MSYS .SETN $UIC 11# .IFF $ONL .OR .IFF MSYS .GOTO 0B03<. .SETS ALLTSK "UFDTKBPIPLBRLOAEDIUNLFLXMACVMR" .SETN FRONT 1 .SETN REAR 3l(.0B01: .SETS TASK ALLTSK['FRONT':'REAR'] .IFNINS 'TASK' .GOTO 0B02 .SETN FRONT FRONT+3 .SETN REAR REAR+3 .IF REAR LE 36 .GOTO 0B01 .GOTO 0B03.0B02: .SETF 'TASK'X ;C ; You must install 'TASK' and any of the following tasks which areXB ; not installed on your system if you are performing your 11SGEN2# ; on-line: UFD TKB PIP LBR LOA EDIE ; UNL FLX MAC VMRS ; ; Please install them now.. ; .PAUSEO .GOTO 0B01S.0B03: .IFT MSYS .GOTO 0B1# .IFDF $UIC .IFDF $SYGRP .GOTO 0B21R; A; The system device is the disk on which all of the host's sys00H=TADATADATADATADATADATADATADATADATAtem @; files are stored. If your 11S target disk is the system deviceJ; then there may possibly be a conflict in some file names (e.g., SYSLIB).;d .SETT ZR .IFNDF $SYGRP .ASK Z Is the target disk, '''':, the system device .GOTO 0B22.0B2:i; /; Group number 2 is reserved for 11S SYSGEN use;;;.0B22:K .IFF Z .ASKN [1:10:1] $SYGRP What is the group number for the system files.N .IFF Z .ASKN [1:11:11] $UIC What is the group number for the executive filesK .IFT Z .ASKN [3:10:3] $SYGRP What is the group number for the system fileseM .IFT Z .ASKN [3:10:3] $UIC What is the group number for the executive files., .IF $UIC EQ 2 .OR .IF $SYGRP EQ 2 .GOTO 0B2.0B21: .SETF $TARGT<0 .IF $SYGRP NE 1 .OR .IF $UIC NE 11 .SETT $TARGT( .IFT $TARGT .SETS SMAC "RSXMAC.SML/ML,".0B1:17 .IFNDF $MAP .ASK $MAP Are you building a mapped system  .IFNDF $SPL .SETS $SPL "/-SP" .IFNDF $PWI .SETT $PWIA .IFT $MAP .SETT MPD .IFF $MAP .SETF MPD .IFT $STT .SETT SETTIM .IFF $STT .SETF SETTIMY .IFT MPD .SETS S "4"u .IFF MPD .SETS S "0"e .TESTFILE [0,0]00106'S'.DIR .IF EQ 1 .GOTO 00A .SETT UFD .IFINS UFD .GOTO 00 .SETF UFD INS SY:$UFD.00: UFD SY:['$SYGRP',6'S']G .IFF UFD REM UFD1.00A: .SETT UFD1 .IFNDF $MPD .SETS $MPD "SY:"E .;A/ .; FIND OUT IT MAP DEVICE HAS TO BE MADE READYP .;yG .IF $MPD EQ "SY:" .OR .IF $MPD EQ "LB:" .OR .IF $MPD EQ "NL:" .GOTO 01ID .IF $MPD EQ "" .OR .IF $MPD EQ "TI:" .OR .IF $MPD EQ "TT:" .GOTO 01 ;M ; The map device specified must already be mounted with UIC ['$SYGRP',3'S'].0@ ; If it is not, respond to the next question with ^Z and do so. ;.01: .IFNDF $MPLUS .SETF $MPLUSU* .IFF $MPLUS .IF = 6 .SETT $MPLUS .IFNDF $VAX .SETF $VAX0& .IFF $VAX .IF = 5 .SETT $VAX .SETF MSYS .IF = 1 .SETT MSYS.1:E .IFNDF $UIC .SETN $UIC 11& .IFT $VAX .ASKS P1 Target device name, .IFT $VAX .SETS TEMPS P1[:]+ .IFT $VAX .IF TEMPS NE ":" .SETS P1 P1+":"  .IFT $VAX SET DEFAULT 'P1'c .IFT $VAX ASN 'P1'=SY:n .IFT $VAX ASN 'P1'=SY0: .IFT $VAX ASN 'P1'=LB:s .IFT $VAX ASN 'P1'=LB0: .IFT $VAX ASN TK:=TK0:0 .IFT $VAX ASN MP:=MP0:$. .IFT $VAX ASN 'P1'['$SYGRP',54]11MTKB.TSK=TKB. .IFT $VAX ASN 'P1'['$SYGRP',54]11MVMR.TSK=VMR .IFT $VAX SET NOON .SETS TKBTM "TKB" .;ML .; A new version of the task builder which contains the "no message" switchF .; must be used on an MPLUS V1.0 system so that executive commons, ifC .; they are chosen, will task build without error messages. Since J .; executive commons are task-built separately from the executive itself,H .; they produce unresolved symbols which are later resolved by building .; the exec.' .;  .IFT $MPLUS .SETS TKBTM "TKM" .IFINS 'TKBTM' .GOTO 1A .SETF TKBXR3 .IFT $MPLUS INS SY:['$SYGRP',54]11MTKB/TASK=...TKM .1A: .SETT $11St .SETF DEVXh .SETF LOAXt .SETF LPX .SETF UNLX. .SETS PRVDSK "" .SETS $PRV "SY:"m .IFDF $RL .SET'$RL' $2RL  .IFF $MPLUS .GOTO 1A1 .SETT $BGDSKd .SETF $2RLr .SETF $2RKi .GOTO 1Cx.1A1: R .IFNDF $BGDSK .ASK $BGDSK Do you have the RP04/5/6, RM02/3 or RK06/7 RSX-11M Kit .IFT $BGDSK .SETF $2RLa .IFT $BGDSK .SETF $2RK .IFT $BGDSK .GOTO 1C.< .IFNDF $2RK .ASK $2RK Do you have the dual RK05 RSX-11M Kit .IFT $2RK .SETF $2RLS .IFT $2RK .SETS PRVDSK "PRVOBJ"H .IFF $2RK .IFNDF $2RL .ASK $2RL Do you have the dual RL01/2 RSX-11M Kit .IFT $2RL .SETS PRVDSK "EXCPRV"! .IFT $2RL .OR .IFT $2RK .GOTO 1B =; 11SGEN2 -- No RSX-11M/M-PLUS host kit was selected -- Retry$ .GOTO 1A1.1B:7 .ASKS $PRV In which device is the 'PRVDSK' disk [DDU:]/ .IF $PRV EQ "" .GOTO 1B+ .IFT $2RK .OR .IFT $2RL MOU '$PRV''PRVDSK'. .IFT $2RK ASN '$PRV'=LB:O.1C: .IFF $2RK ASN SY:=LB: ;D ; Expanded comments provide a complete description of every step in? ; this 11SGEN command file. On the other hand, short comments ) ; provide virtually no explanatory text.L ;% .ASK D Do you want expanded comments .SETT PIP .IFINS PIP .GOTO 1D .SETF PIP INS SY:$PIP.1D: .IFT $BGDSK .GO00P 3ZgTO 1E1 .IFT D ;.? .IFT D ; Make room on the baseline disk to complete the 11SGEN .IFT D ;  .IFT .SETS SYS "4" .IFF .SETS SYS "0" SET /UIC=[1,1]O PIP ['$SYGRP',3'S']*.*/PU/NM;K PIP ['$SYGRP',5'SYS']CTDRV.TSK;*/DE/NM,DBDRV.TSK;*,DPDRV.TSK;*,DRDRV.TSK;*iK PIP ['$SYGRP',5'SYS']CTDRV.STB;*/DE/NM,DBDRV.STB;*,DPDRV.STB;*,DRDRV.STB;*l PIP 'UIC'SYSGEN2.CMD;*/DE/NM.6 .IFT $2RK PIP SY:/NV='$PRV'[1,1]EXELIB.OLB,SYSLIB.OLB2 .IFT $2RK PIP SY:[1,1]EXELIB.OLB/PU/NM,SYSLIB.OLB PIP /FRP.1E: .IFNDF $FUD .ASK $FUD Was the full duplex terminal driver chosen in Phase IG .IFNDF $LPR .ASK $LPR Are you running on a machine with a line printer" .IFT $LPR .SETT LPT .IFF $LPR .SETF LPT .SETS PIPDEV "TI:=" .SETS PIPSW "";.2:N) .IFT LPT .IFINS PRT... .SETS PIPDEV $MPDP) .IFT LPT .IFINS PRT... .SETS PIPSW "/SP"T? .IFT LPT .IFNINS PRT... .OR .IFT $VAX .SETS PIPDEV "LP:="+$MPDF5 .IFT LPT .IFNINS PRT... .OR .IFT $VAX .SETS PIPSW ""F.5: .;' .;DETERMINE DEVICES INCLUDED IN SYSTEMP .;R- .IFNDF $DEV .IFNDF $DV2 .IFNDF $DV3 .GOTO 15x .SETS DEV "$DEV"o.6: .TEST 'DEV' .SETN TEMPN 1.7:  .IF TEMPN GT .GOTO 8 .SETN TEMPN2 TEMPN+1L$ .SETS TEMPS 'DEV'['TEMPN':'TEMPN2'] .INC TEMPN2 .SETN TEMPN TEMPN+3% .SETS TEMPS2 'DEV'['TEMPN2':'TEMPN']I .SETN 'TEMPS' 'TEMPS2'. .INC TEMPNT .GOTO 7.8: .IF DEV EQ "$DV3" .GOTO 15 .IF DEV EQ "$DV2" .GOTO 9 .SETS DEV "$DV2"P .GOTO 6.9: .SETS DEV "$DV3" .GOTO 6.15: .SETT LBR .SETT EDI .SETT FLX .SETT TKB .SETT MAC .20: .IFT D ;D/ .IFT D ; Create RSX-11S subset system library * .IFT D ; if you have not already done so. .IFT D ;  .IFINS LBR .GOTO 30 .SETF LBR INS SY:$LBR6.30: .IF NE "['$SYGRP',1]" SET /UIC=['$SYGRP',1]+ .ASK Z Have you already created 11SLIB.OLBP .IFT Z .GOTO 35 LBR LB:11SLIB/CR:30.:896.:320.O.35: .SETF DEVCOM"% .IFT $DSS .OR .IFT $DUC .SETT DEVCOMO% .IFT $IPE .OR .IFT $CDB .SETT DEVCOMS .IFF DEVCOM .GOTO 606 .IFT D ;TK .IFT D ; If you need FORTRAN run time support for the IP11/IP300, UDC-11, I .IFT D ; ICS-11/ICR-11, LPS-11, DRS/DSS-11, AR-11, or LPA 11 subsystems, ; .IFT D ; then you must add the support routines to 11SLIB.S .IFT D ;:A .ASK Z Do you want to add the FORTRAN run time modules to 11SLIBu .IFF Z .GOTO 60 .SETN TEMPN 0 .IF IC GT 0 .INC TEMPNL .IF IS GT 0 .INC TEMPN: .IF UD GT 0 .INC TEMPNS .IF IP GT 0 .INC TEMPNO' .IF AR GT 0 .OR .IF LS GT 0 .INC TEMPNS .IF TEMPN EQ 0 .GOTO 50 .IFF $ISA .GOTO 50  .IF TEMPN GT 1 .GOTO 40! LBR LB:11SLIB/RP='$PRV'PURISA19.IF IC GT 0 .OR .IF IS GT 0 LBR LB:11SLIB/RP='$PRV'PURICRr0.IF IC EQ 0 .IF IS GT 0 LBR LB:11SLIB/DE:.ICRDI>.IFT $CDB LBR LB:11SLIB/RP=['$SYGRP',2'S']ICOM.ICR,ICTAB.ICR?.IFT $DSS LBR LB:11SLIB/RP=['$SYGRP',2'S']ISCOM.IDS,DSSDI.IDS0+.IF UD GT 0 LBR LB:11SLIB/RP='$PRV'PURUDC.5.IFT $DUC LBR LB:11SLIB/RP=['$SYGRP',2'S']UDCOM.UDCI+.IF IP GT 0 LBR LB:11SLIB/RP='$PRV'PURPCST?.IFT $IPE LBR LB:11SLIB/RP=['$SYGRP',2'S']IPCOM.PCS,IPMAP.PCS..50:6.IF AR GT 0 .OR .IF LS GT 0 LBR LB:11SLIB/RP='$PRV'LPS(.IF LA GT 0 LBR LB:11SLIB/RP='$PRV'LPA.GOTO 60.40:+.IF IC GT 0 LBR LB:ICSLIB/CR='$PRV'PURISAR+.IF IC GT 0 LBR LB:ICSLIB/RP='$PRV'PURICRS*.IF IS GT 0 LBR LB:ISLIB/CR='$PRV'PURISA*.IF IS GT 0 LBR LB:ISLIB/RP='$PRV'PURICR$.IF IS GT 0 LBR LB:ISLIB/DE:.ICRDI>.IFT $CDB LBR LB:ICSLIB/RP=['$SYGRP',2'S']ICOM.ICR,ICTAB.ICR>.IFT $DSS LBR LB:ISLIB/RP=['$SYGRP',2'S']ISCOM.IDS,DSSDI.IDS+.IF UD GT 0 LBR LB:UDCLIB/CR='$PRV'PURISA.+.IF UD GT 0 LBR LB:UDCLIB/RP='$PRV'PURUDCS5.IFT $DUC LBR LB:UDCLIB/RP=['$SYGRP',2'S']UDCOM.UDCL+.IF IP GT 0 LBR LB:PCSLIB/CR='$PRV'PURISAI+.IF IP GT 0 LBR LB:PCSLIB/RP='$PRV'PURPCSI?.IFT $IPE LBR LB:PCSLIB/RP=['$SYGRP',2'S']IPCOM.PCS,IPMAP.PCSI9.IF AR GT 0 .OR .IF LS GT 0 LBR LB:LPSLIB/CR='$PRV'PURISA 6.IF AR GT 0 .OR .IF LS GT 0 LBR LB:LPSLIB/RP='$PRV'LPS(.IF LA GT 0 LBR LB:LPALIB/CR='$PRV'LPA.60: .IFF LBR REM LBR, .SETT LBR .SETF LPN' .IFDF $MPD .IF $MPD EQ "LP:" .SETT LPNRI .IFNDF $MPD .ASK LPN Did you spec00X=TADATADATADATADATADATADATADATADATAify LP: as map device in Sysgen Phase II0.70: .ASK EXEBLD Have you already built the Exec .IFT EXEBLD .GOTO 285 SET /UIC=['$SYGRP',2'S']S.220: .IFT D ;B .IFT D ; Purge Exec build command files and assembly prefix files .IFT D ;G PIP RSXBLD.CMD/PU/NM  PIP ['$UIC',10]RSXMC.MAC/PU/NMR.230:OL .IFNDF $UWD .ASK $UWD Do you wish to add User-Written driver(s) to the Exec .IFF $UWD .GOTO 260Q .IFNDF $LOD .ASK $LOD Was loadable driver support selected during Sysgen Phase IM; ; Build user-written driver(s);d@; You must edit the Executive build command file RSXBLD.CMDH; to include your user-written driver and data base in your system.;A; If you are including a resident data base, locate the line=; in which the module SYSTB is referenced and add :USRTBU); immediately after it, for example: .SETS TEMPS ""j; LB:['$SYGRP',2'$GRP']RSX11'$SYS'/LB'TEMPS':SYSTB:USRTB:SYTAB:INITL,LB:['$SYGRP',1]EXELIB/LB/SSB; If you are not including a resident data base, add the line; GBLDEF=$USRTB:0e; to the file instead.B;C8; For each resident driver, add a line of the form:5; LB:['$SYGRP',2'$GRP']RSX11'$SYS'/LB:xxDRVeG; where other drivers are referenced (where xx is the device name,e; for example DK)..IFF $LOD .GOTO 240tB; NOTE: For each loadable driver, do not add a corresponding&; line to the build command file..240:L;: .IFT D ;]J .IFT D .IFT $LOD ; Your non-loadable drivers will automatically be linked= .IFT D .IFF $LOD ; Your drivers will automatically be linkedB. .IFT D ; with the Executive you are building. .IFT D ;r.260: B .IFT $2RK .IF NE "['$SYGRP',2'S']" SET /UIC=['$SYGRP',2'S']= .IFT $2RK PIP LB:/NV/NM=RSX11S.OLB,TTDRV,RSXBLD.CMD,TTDRVBLD A .IFT $2RK PIP RSX11S.OLB;*/DE/NM,TTDRV;*,RSXBLD.CMD;*,TTDRVBLD;*a .IFF LBR REM LBRt .SETT LBR .IFF LPN .GOTO 270  .IFLOA LP: .SETT LPXl .IFINS LOA .SETT LOAX .IFT LPX .GOTO 270  .IFF LOAX INS SY:$LOA .IFT $2RK ASN SY:=LB: LOA LP: .IFT $2RK ASN '$PRV'=LB:i .IFF LOAX REM LOA .SETF LOAXB=.270: .IF NE "['$SYGRP',2'S']" SET /UIC=['$SYGRP',2'S']2 .IFT D ; $ .IFT D ; Now we build the Executive? .IFT D ; If you must make changes to the Executive build files,? .IFT D ; answer yes to the following question. Edit RSXBLD.CMDS@ .IFT D ; by issuing the command EDI LB:RSXBLD.CMD. 11SGEN2 will> .IFT D ; build the Executive after you resume from the pause. .IFT D ; 4 .ASK Z Do you wish to edit the Executive build file .IFF Z .GOTO 273K .IFINS EDI .GOTO 272 .SETF EDI INS SY:$EDIC.272: .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE".F .PAUSE." .IFT $VAX ; 11SGEN2 -- continuing .IFF EDI REM EDIs .SETT EDI.273: .IFINS 'TKBTM' .GOTO 280 .SETF TKB INS SY:$TKB.280: 8 .IF NE "['$SYGRP',2'S']" SET /UIC=['$SYGRP',2'S'] 'TKBTM' @LB:RSXBLD, .ASK Z Did the Executive build successfully .IFT Z .GOTO 285e ;9 ; We will pause now so that you can correct the problem.x5 ; After resuming, we will build the Executive again.T ;> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSEo" .IFT $VAX ; 11SGEN2 -- continuing .GOTO 280.285:2 SET /UIC=['$SYGRP',6'S'] Q .IFNDF $LOD .ASK $LOD Was loadable driver support selected during Sysgen Phase I.1150: .IFF $LOD .GOTO 1179]5 .ASK Z Do you want to build any loadable drivers now  .IFF Z .GOTO 1179 .IFINS 'TKBTM' .GOTO 1160 .SETF TKB INS SY:$TKB.1160: .SETS $TKBX TKBTM @'UIC'SGNBLDDRV.CMD .IFT $LPA11 @['$SGU']BLDLAINITd .IFF TKB REM 'TKBTM' .SETT TKB.1179:8 .IF NE "['$SYGRP',2'S']" SET /UIC=['$SYGRP',2'S']2 .IFF $DUC .IFF $CDB .IFF $DSS .IFF $IPE .GOTO 340 .IFT D ;/A .IFT D ; Now we build the IP11/IP300, UDC-11, ICS/ICR, OR DRS-11p .IFT D ; device common block.= .IFT D ; The device common block resides on the I/O page andd= .IFT D ; is referenced whenever a task directly accesses any  .IFT D ; I/O modules. .IFT D ;B .IF $SYGRP EQ 1 .GOTO 1182@;CI; FILES IPBLD.CMD, UDCBL00` 3ZgD.CMD, ICBLD.CMD, AND ISBLD.CMD ARE USED TO BUILD.E; THE DEVICE COMMON BLOCKS. YOU WILL HAVE TO EDIT THESE FILES SO THATSF; ALL REFERENCES TO UFDS WITH GROUP NUMBER 1 ARE CHANGED TO REFERENCESD; TO UFDS WITH GROUP NUMBER '$SYGRP'. FOR EXAMPLE IF USING EDI, TYPE; THE FOLLOWING COMMANDS:.; ; >EDI IPBLD.CMDo; *PA/[1,/['SYGRP',; *EX;n<; WE WILL PAUSE NOW TO ALLOW YOU TO EDIT THESE COMMAND FILES; > .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSE " .IFT $VAX ; 11SGEN2 -- continuing%.1182: .IFT $IPE 'TKBTM' @'$PRV'IPBLD .IFT $DUC 'TKBTM' @'$PRV'UDCBLD .IFT $CDB 'TKBTM' @'$PRV'ICBLDS .IFF MPD .IFT $DSS ;FA .IFF MPD .IFT $DSS ; You must edit the DSS11 device common blockOG .IFF MPD .IFT $DSS ; build file to set the base address to the nearestNF .IFF MPD .IFT $DSS ; 32-word bus address at or below the DSS11 module> .IFF MPD .IFT $DSS ; address specified during 11SGEN Phase I. .IFF MPD .IFT $DSS ;nB .IFF MPD .IFT $DSS .IFT D ; Example of base address modification: .IFF MPD .IFT $DSS .IFT D ;D .IFF MPD .IFT $DSS .IFT D ; If the base physical bus address of theE .IFF MPD .IFT $DSS .IFT D ; DSS11 is 160010 and only one such moduleuC .IFF MPD .IFT $DSS .IFT D ; is installed, then the commands to thei( .IFF MPD .IFT $DSS .IFT D ; editor are: .IFF MPD .IFT $DSS .IFT D ;% .IFF MPD .IFT $DSS .IFT D ; *L PAR=u2 .IFF MPD .IFT $DSS .IFT D ; PAR=ISCOM:XXXXXX:4005 .IFF MPD .IFT $DSS .IFT D ; *R PAR=ISCOM:160000:100$! .IFF MPD .IFT $DSS .IFT D ; *EDs .IFF MPD .IFT $DSS .IFT D ;! .IFT MPD .OR .IFF $DSS .GOTO 300  .IFINS EDI .GOTO 290y .SETF EDI INS SY:$EDI3.290: .IFT $DSS .IFF $BGDSK PIP /NV='$PRV'ISBLD.CMD 0 .IFF MPD .IFT $DSS EDI ['$SYGRP',2'S']ISBLD.CMD .IFF EDI REM EDI .SETT EDI.300: .IFT $DSS 'TKBTM' @ISBLD.340: .IFF LPN .GOTO 350 .IFT LPX .GOTO 350. .IFINS UNL .SETT UNLX .IFF UNLX INS SY:$UNL .IFT $2RK ASN SY:=LB: UNL LP: .IFT $2RK ASN '$PRV'=LB:  .IFF UNLX REM UNL.350: .SETF LPX. .SETF UNLX$ .IFF TKB REM 'TKBTM'F .SETT TKB# .IFF $BGDSK PIP RSX11S.OBJ;*/DE/NM .IFT D ;< .IFT D .IFF $DRC ; You now need the Executive map to layout= .IFT D .IFT $DRC ; You now need the Executive maps to layoutD, .IFT D ; the partitions in your new system. .IFT D ;II .IF $MPD EQ "TT:" .OR .IF $MPD EQ "TT0:" .OR .IF $MPD EQ "NL:" .GOTO 390 I .IF $MPD EQ "TI:" .OR .IF $MPD EQ "LP:" .OR .IF $MPD EQ "LP0:" .GOTO 390: .SETF Z- .IFF $DRC .ASK Z Do you have the map alreadyL. .IFT $DRC .ASK Z Do you have the maps already .IFT Z .GOTO 390B .IFLOA LP: .SETT LPX1 .IFT LPT .IFT LPX .GOTO 360 .IFINS LOA .SETT LOAX .IFF LOAX INS SY:$LOA .IFT $2RK ASN SY:=LB: .IFF LPX LOA LP:d .IFT $2RK ASN '$PRV'=LB:u .IFF LOAX REM LOAC.360: .IFF $DRC .IFF Z PIP 'PIPDEV'['$SYGRP',3'S']RSX11S.MAP'PIPSW'$T .IFT $DRC .IFF Z PIP 'PIPDEV'['$SYGRP',3'S']RSX11S.MAP'PIPSW',EXCOM1.MAP,EXCOM2.MAP .IFT LPX .GOTO 380P .IFINS UNL .SETT UNLX .IFF UNLX INS SY:$UNL .IFT $2RK ASN SY:=LB: .IFT LPT .IFF LPX UNL LP: .IFT $2RK ASN '$PRV'=LB:  .IFF UNLX REM UNL.380: .SETF LOAX .SETF LPX .SETF UNLX3.390: .IFT D ;C .IFT D ; Look in the map of the Exec for the symbol "$SYTOP" which A .IFT D ; indicates the last address allocated to the Exec. UserFB .IFT D ; partitions may start at any location beyond this addressE .IFT D ; as long as they fall on a 64 byte boundary. See the RSX-11M2G .IFT D ; Sysgen manual for a description of how to set up partitions. LF .IFT D ; You may wish to stop at this time to layout your partitions. .IFT D ;..391: .IFF $FUD .GOTO 399T> .ASK Z Have you already built the full duplex terminal driver .IFT Z .GOTO 399E.392: .IFT D ;"7 .IFT D ; Now we build the full duplex terminial driverc .IFT D ; .IFT D ;FI .IFT D ; The task build command file for the full duplex terminal drive F .IFT D ; specifies that it run in partition TTPAR, having a length of .IFT D ; 40000 octal. .IFT D ; J .ASK Z Do you wish to edit the build command file for the terminal driver .IFF Z .GOTO 394i .IFINS EDI .GOT00h=TADATADATADATADATADATADATADATADATAO 3931 .SETF EDI INS SY:$EDI.393: EDI LB:TTDRVBLD.CMDt .IFF EDI REM EDIr .SETT EDI.394: .IFINS 'TKBTM' .GOTO 395 .SETF TKB INS SY:$TKB.395: 4 .IF NE "['$SYGRP',24]" SET /UIC=['$SYGRP',24] 'TKBTM' @LB:TTDRVBLD.CMDl2 .ASK Z Did the terminal driver build successfully .IFT Z .GOTO 396 .IFT D ; 9 .IFT D ; We pause so you can correct the problem. Aftera< .IFT D ; resuming, we will build the terminal driver again. .IFT D ;e> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSE" .IFT $VAX ; 11SGEN2 -- continuing .GOTO 395.396: .IFF TKB REM 'TKBTM' .SETT TKBI .IF $MPD EQ "TT:" .OR .IF $MPD EQ "TT0:" .OR .IF $MPD EQ "NL:" .GOTO 399'I .IF $MPD EQ "LP:" .OR .IF $MPD EQ "LP0:" .OR .IF $MPD EQ "TI:" .GOTO 399e, .ASK Z List full duplex terminal driver map .IFF Z .GOTO 399 .IFLOA LP: .SETT LPXo .IFT LPT .IFT LPX .GOTO 397 .IFINS LOA .SETT LOAX .IFF LOAX INS SY:$LOA .IFT $2RK ASN SY:=LB: .IFF LPX LOA LP:; .IFT $2RK ASN '$PRV'=LB:n .IFF LOAX REM LOA/.397: PIP 'PIPDEV'['$SYGRP',34]TTDRV.MAP'PIPSW' .IFT LPX .GOTO 398F .IFINS UNL .SETT UNLX .IFF UNLX INS SY:$ULN .IFT $2RK ASN SY:=LB: .IFT LPT .IFF LPX UNL LP: .IFT $2RK ASN '$PRV'=LB:R .IFF UNLX REM ULN.398: .SETF LOAX .SETF LPX .SETF UNLOAC.399: .ASK Z Do you want to continue and build the privileged tasksS .IFT Z .GOTO 400  ;? ; We will exit now. When you are ready to resume the building.8 ; of the system, execute this indirect command file and& ; answer Y to the following question:- ; >* Have you already built the Exec? [Y/N]:  ; .GOTO 1240.N.400: .IFT $2RK .OR .IFT $2RL PIP ['$SYGRP',1]/NV='$PRV'['$SYGRP',1]11SLIB.OLB# .IFT $2RK .OR .IFT $2RL DMO '$PRV'V$ .IFT $2RK .OR .IFT $2RL ASN SY:=LB: .IFT D ;E> .IFT D ; Prepare to assemble and build the RSX-11S privileged .IFT D ; software components. .IFT D ;0I .IFT D ; The tasks TKTN, BASMCR, OTL, and SIP must be assembled, and the;L .IFT D ; task build command files possibly edited before they can be built.I .IFT D ; The tasks RSDV05, RSDV52, and RSDV1H need only to be built, butOG .IFT D ; their command files may also be edited before they are built.,B .IFT D ; It is not necessary to save/print the assembly listings;C .IFT D ; However, we recommend that you save/print the task build u= .IFT D ; maps. This is especially important when generatingFA .IFT D ; an unmapped system -- without maps it will be difficultm( .IFT D ; to determine partition limits. .IFT D ;s.401:  .DISABLE LOWERCASEbE .ASKS ALD Assembly list device for privileged tasks (DDNN:) [D: NL:]e .ENABLE LOWERCASE .IF ALD EQ "" .SETS ALD "NL:" .SETF LST .TEST ALD# .SETS TEMPS ALD[:]s# .IF TEMPS NE ":" .SETS ALD ALD+":"g" .IF ALD EQ "LP0:" .SETS ALD "LP:") .IFF $ONL .OR .IF ALD NE "LP:" .GOTO 403 C; 11SGEN2 -- Listing files can not be sent directly to LP: -- Retryn .GOTO 4010.403: .IF ALD EQ "LP:" .IFF $LPR .SETS ALD "TI:"0 .IF ALD EQ "SY:" .OR .IF ALD EQ "LB:" .SETT LSTE .IF ALD EQ "LP:" .OR .IF ALD EQ "SY:" .OR .IF ALD EQ "LB:" .GOTO 405gE .IF ALD EQ "TI:" .OR .IF ALD EQ "TT:" .OR .IF ALD EQ "NL:" .GOTO 405DF .ASK Z Is 'ALD' mounted as a FILES-11 volume with UFD ['$SYGRP',3'S'] .IFT Z .GOTO 405T ;; ; We will pause now to allow you to mount and/or UFD 'ALD'R> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSEd" .IFT $VAX ; 11SGEN2 -- continuing.405:  .DISABLE LOWERCASE < .ASKS MPDV Map device for privileged tasks (DDNN:) [D: SY:] .ENABLE LOWERCASE .IF MPDV EQ "" .GOTO 408" .TEST MPDVE$ .SETS TEMPS MPDV[:]% .IF TEMPS NE ":" .SETS MPDV MPDV+":":$ .IF MPDV EQ "LP0:" .SETS MPDV "LP:"* .IFF $ONL .OR .IF MPDV NE "LP:" .GOTO 408:; 11SGEN2 -- Maps can not be sent directly to LP: -- Retry .GOTO 4052.408: .IF MPDV EQ "LP:" .IFF $LPR .SETS MPDV "TI:"E .IF MPDV EQ "LP:" .OR .IF MPDV EQ "" .OR .IF MPDV EQ "LB:" .GOTO 410iH .IF MPDV EQ "TI:" .OR .IF MPDV EQ "TT:" .OR .IF MPDV EQ "NL:" .GOTO 410G .ASK Z Is 'MPDV' mounted as a FILES-11 volume with UFD ['00p 3Zg$SYGRP',3'S']E .IFT Z .GOTO 410M ;< ; We will pause now to allow you to mount and/or UFD 'MPDV'> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSE." .IFT $VAX ; 11SGEN2 -- continuing.410: .IFNDF $TKT .GOTO 413t .SETF TKN( .ASK Z Have you already built task TKTN .IFT Z .GOTO 417M .SET'$TKT' TKN. .IFT TKN .SETS INTKN "" .IFF TKN .SETS INTKN "not " ;C ; Task TKTN will 'INTKN'be included in your 11S system as a result ' ; of your selection in 11SGEN Phase I.t ; .GOTO 417.413: ;.H .IFT D ; TKTN is the task which interfaces with the Exec to control theK .IFT D ; output of task termination and device not ready messages. It canAM .IFT D ; not be included if during Sysgen Phase I you indicated that you didTG .IFT D ; not want task termination and device not ready messages. TheTD .IFT D ; RSX-11S version is produced by conditional assembly of the@ .IFT D ; RSX-11M source, which is included in the RSX-11S kits. .IFT D ;o* .ASK TKN Do you want to include task TKTN.417: .IFT D ;K .IFT D ; The privileged tasks BASMCR, OTL, and SIP were specially designedFL .IFT D ; for use in the RSX-11S environment. Their inclusion in the systemJ .IFT D ; is optional. If desired, they will be assembled and built under' .IFT D ; control of this command file.e .IFT D ;aC .ASK PRV Do you wish to include BASMCR, OTL, or SIP in your systemn .IFT D ; F .IFT D ; The tasks RSDV05, RSDV52, and RSDV1H dynamically display theF .IFT D ; the status of memory on a graphics terminal and can be builtC .IFT D ; for the VT05B terminal, VT52 terminal, and VT100 terminaldF .IFT D ; respectively. These tasks display which tasks are in memoryB .IFT D ; and where in memory they reside, which task is currently* .IFT D ; running, and the status of pool. .IFT D ;n .SETF V05 .SETF V52 .SETF V1H: .ASK RSD Do you want to include RSDV05, RSDV52, or RSDV1H .IFT D ;FB .IFT D ; The RSX-11S subset file control services (FCS) are dist-E .IFT D ; ributed as a single file containing the concatenated objectF .IFT D ; modules. They cannot be placed in the RSX-11M system objectD .IFT D ; library (SYSLIB.OLB). However, users who require this FCSD .IFT D ; should link with the RSX-11S subset of SYSLIB (11SLIB.OLB)% .IFT D ; created during this Sysgen.. .IFT D ;n7 .ASK FCS Do you wish to include the RSX-11S subset FCSn .IFF MSYS .IFT D ;R9 .IFF MSYS .IFT D ; The RSX-11M crash dump analyzer (CDA)f7 .IFF MSYS .IFT D ; may also be built to run on a non-Ms7 .IFF MSYS .IFT D ; host system for analysis of RSX-11S .IFF MSYS .IFT D ; crash dumps. .IFF MSYS .IFT D ;e .IFT MSYS .SETF CDAA .IFF MSYS .ASK CDA Do you wish to build CDA for your host system : .IFF TKN .IFF PRV .IFF RSD .IFF FCS .IFF SETTIM .GOTO 700$ .IFT $MPLUS .OR .IFT $VAX .GOTO 700 .IFT D ;nI .IFT D ; If you have previously done an RSX-11S Sysgen on this disk, all F .IFT D ; of the files were transferred to the UFD [2,20]. These wereF .IFT D ; optionally deleted by the Sysgen process. Therefore, unlessA .IFT D ; it was specified to delete the files or they were laterpD .IFT D ; deleted independently, there is no need to copy all of the+ .IFT D ; files from the release kit again. .IFT D ;I: .ASK Z Do you have to copy the files from the release kit .IFF Z .GOTO 700O.420: .430: .; .SETF DXK .; .SETF DYK .SETF DMK .SETF DKK .SETF DLK .SETF MTK .SETF MMK .SETF MSK .SETF DLV .SETF MDV .SETF LDV .SETS INSW "" .SETS OUTSW ""y.435:dD .ASKS DEV Enter device and unit of RSX-11S distribution kit (DDNN:) .IF DEV EQ "" .GOTO 435 .SETS D11S DEV[1:2] .IFNDF 'D11S'K .GOTO 540t .SETT 'D11S'K% .IFF DKK .IFF DMK .IFF DLK .GOTO 450m.440:  ;> ; Place the RSX-11S release kit cartridge disk in drive 'DEV' ;( .ASK Z Is the disk ready in drive 'DEV' .IFF Z .GOTO 440F .IFT $2RK .IFT DKK .GOTO 470 .IFT $2RL .IFT DLK .GOTO 470M+ .ASK LDV Does the driver have to be loadedF .GOTO 470.450: .SETT LDV .; .IFF DXK .IFF DYK 4 .GOTO 480.460:  ;> .; Place RSX-11S release 00x=TADATADATADATADATADATADATADATADATAkit floppy number one in drive 'DEV' .;O,.; .ASK Z Is the floppy ready in drive 'DEV'.; .IFF Z .GOTO 4601.470: .SETS COPY "PIP" .SETS FIL "" .SETT MDV .GOTO 550.480: .SETS COPY "FLX" .SETS FIL "*.*"*.520: .IFF MTK .IFF MSK .IFF MMK .GOTO 540.530:  ;7 ; Place the RSX-11S release kit magtape on drive 'DEV' ;+ .ASK Z Is the magtape ready on drive 'DEV'e .IFF Z .GOTO 530l .SETF T2400 .IFT MSK .SETT T24001 .IFT MMK .ASK T2400 Is the tape a 2400 foot reel # .IFT T2400 .SETS OUTSW "/DNS:1600"e .GOTO 550.540: ;<; 11SGEN2 - you have not chosen one of the standard RSX-11S 8; distribution kit media. We will repeat the questions. .GOTO 430.550: .IFF LDV .GOTO 560 .SETS LDEV "" .IFT DKK .SETS LDEV "DK:" .IFT DMK .SETS LDEV "DM:" .IFT DLK .SETS LDEV "DL:"% .IFF DKK .IFF DMK .IFF DLK .GOTO 552 .IFLOA 'LDEV' .SETT DEVXy.552: .IFLOA 'D11S': .SETT DEVX3 .IFT DEVX .GOTO 560 .IFINS LOA .SETT LOAX .IFF LOAX INS SY:$LOA% .IFF DKK .IFF DMK .IFF DLK .GOTO 555T .IFT $MAP LOA 'LDEV'/PAR=GEN0 .IFF $MAP LOA 'LDEV' #.555: .IFT $MAP LOA 'D11S':/PAR=GENr .IFF $MAP LOA 'D11S': .IFF LOAX REM LOA.560: .SETF LOAX SET /UIC=[2,20] .IFINS UFD .GOTO 5705 .SETF UFD INS SY:$UFD.570: UFD SY:[2,20] .IFF UFD REM UFDV .SETT UFD PIP *.*;*/DE/NM .IFT MDV MOU 'DEV'11SKIT1" .IFT MDV .OR .IFINS FLX .GOTO 580 .SETF FLX INS SY:$FLX(.580: 'COPY' SY:'INSW'='DEV''FIL''OUTSW' .IFT MDV DMO 'DEV'.; .IFF DXK .IFF DYK .GOTO 680.590:  .;L> .; Place RSX-11S release kit floppy number two in drive 'DEV' .;,.; .ASK Z Is the floppy ready in drive 'DEV'.; .IFF Z .GOTO 590 .; .GOTO 640.600: .;%.; .640: .IFF DXK .IFF DYK .GOTO 680G.; .IFT MDV MOU 'DEV'11SKIT2%.; 'COPY' SY:'INSW'='DEV''FIL''OUTSW'E.; .IFT MDV DMO 'DEV'P.; .IFF DXK .IFF DYK .GOTO 6801.650:  .; @ .; Place RSX-11S release kit floppy number three in drive 'DEV' .;:,.; .ASK Z Is the floppy ready in drive 'DEV'.; .IFF Z .GOTO 650K".660: .; .IFT MDV MOU 'DEV'11SKIT3%.; 'COPY' SY:'INSW'='DEV''FIL''OUTSW'w.; .IFT MDV DMO 'DEV'.680: .IFF LDV .GOTO 690 .IFT DEVX .GOTO 690 .IFINS UNL .SETT UNLX .IFF UNLX INS SY:$UNL% .IFF DKK .IFF DMK .IFF DLK .GOTO 685. UNL 'LDEV'D.685: UNL 'D11S':Y .IFF UNLX REM UNL.690: .SETF DEVX .SETF UNLXV .IFF FLX REM FLXF .SETT FLX.700: .IFF $2RK .GOTO 705c .IFT D ;e? .IFT D ; Make room on the baseline disk to complete the 11SGENt .IFT D ;e PIP 11SGEN.CMD;*/DE/NMF PIP 11SGEN2.CMD/PU/NMJ.705: .IFF TKN .IFF PRV .IFF RSD .IFF CDA .IFF FCS .IFF SETTIM .GOTO 11409 .IFF TKN .IFF PRV .IFF RSD .IFF CDA .IFF FCS .GOTO 111060 .IFF TKN .IFF PRV .IFF RSD .IFF CDA .GOTO 1090& .IFF TKN .IFF PRV .IFF RSD .GOTO 1089!.720: .IFF TKN .IFF PRV .GOTO 750 SET /UIC=['$UIC',10]0 .IFINS UFD .GOTO 730L .SETF UFD INS SY:$UFD.730: UFD SY:['$UIC',10] .IFF UFD REM UFD .SETT UFDF.740: .ASK Z Do you wish to make corrections to RSX-11S source modules .IFF Z .GOTO 750N SET /UIC=[2,20] ;= ; We will now pause to allow you to apply any changes and/orE- ; corrections to the RSX-11S source modules.I ;> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSE0" .IFT $VAX ; 11SGEN2 -- continuing.750: .IFF TKN .GOTO 800 .IFINS MAC .GOTO 760I .SETF MAC INS SY:$MAC.760: SET /UIC=['$SYGRP',2'S']. .SETS TEMPS ",'ALD'['$SYGRP',3'S']TKTN'$SPL'" .IF ALD EQ "NL:" .SETS TEMPS "" .OPEN TKNASM.CMDrW .DATA TKTN'TEMPS'=LB:['$SYGRP',1]'SMAC'EXEMC/ML,SY:['$UIC',10]RSXMC/PA:1,SY:[2,20]TKTNn .CLOSEt MAC @TKNASM PIP TKNASM.CMD;*/DE .IFF MAC REM MACs .SETT MAC9 .IFT $2RK .IFT LST PIP 'ALD'['$SYGRP',3'S']*.LST;*/DE/NM  .SETS TEMP "" .IFF MPD .SETS TEMP "-" .SETS BASE "0"2 .SETS TEMPS3 "" .IFF $PWI .SETS TEMPS3 "/-WI" .IFF MPD .SETS BASE "20000"7 .SETS TEMPS2 ",'MPDV'['$SYGRP',3'S']TKN'TEMPS3''$SPL'""" .IF MPDV EQ "NL:" .SETS TEMPS2 "" .OPEN TKN11SBLD.CMD .ENABLE DATA:['$SYGRP',6'S']TKN/PR/'TEMP'MM'TEMPS2'=['$SYGRP',2'S']TKTN8LB:['$SYGRP',1]EXELIB/LB,SY:['$SYGRP',6'S']RSX11S.STB/SSLB:['$SY00 3ZgGRP',1]SYSLIB/DL//PRI=248 UNITS=1AASG=TI:1STACK=25PAR=SYSPAR:'BASE':3700 TASK=TKTN3/] .DISABLE DATA .CLOSEM .IFT D ; G .IFT D ; The task build command file for TKTN specifies that it run inT: .IFT D ; partition SYSPAR, having a length of 3700 octal.C .IFT D .IFF MPD ; For unmapped systems, its base address is 'BASE'MD .IFT D .IFF MPD ; octal. If you must alter the starting address, or: .IFT D ; If you must change the partition name or length,< .IFT D ; you will have to edit its task build command file. .IFT D ;N@ .ASK Z Do you have to edit the task build command file for TKTN .IFF Z .GOTO 780. .IFINS EDI .GOTO 770F .SETF EDI INS SY:$EDI.770: EDI TKN11SBLD.CMDs .IFF EDI REM EDI. .SETT EDI.780: .IFINS 'TKBTM' .GOTO 790 .SETF TKB INS SY:$TKB.790: 'TKBTM' @TKN11SBLD.CMD .IFF TKB REM 'TKBTM'E .SETT TKB.800: .IFF PRV .GOTO 1081s .IFT D ; G .IFT D ; BASMCR is a privileged task which supplies a subset (or basiclE .IFT D ; set) of the RSX-11M MCR commands. It can not be included if.G .IFT D ; during Sysgen Phase I you indicated that you did not want anyNE .IFT D ; terminal devices. Its size, depending upon options, ranges@ .IFT D .IFF MPD ; from 6300 to 12500 octal on unmapped systems.> .IFT D .IFT MPD ; from 6400 to 14000 octal on mapped systems. .IFT D ;C, .ASK BMR Do you want to include task BASMCR .IFF BMR .GOTO 890 .IFINS UFD .GOTO 810A .SETF UFD INS SY:$UFD.810: UFD SY:[16,10] UFD SY:[16,2'S'] $ .IF ALD NE "NL:" UFD 'ALD'[16,3'S'] .IFF UFD REM UFDd .SETT UFD SET /UIC=[16,10]  PIP BMPRE.MAC;*/DE/NM PIP *.MAC;*/RM/NM PIP [16,*]*.*;*/DE/NM PIP [16,10]=[2,20]BMPRE.MAC< PIP [16,10]/EN=[2,20]ABOBAS.MAC,ATLBAS,BRKBAS,ERRBAS,ERRMSG9 PIP [16,10]/EN=[2,20]FMTDV.MAC,FNDUCB,GNBLK,GETNUM,KEYWD ; PIP [16,10]/EN=[2,20]LKLST.MAC,MCRBAS,OPEBAS,PRSBAS,REDBASw5 PIP [16,10]/EN=[2,20]REMBAS.MAC,RPSBAS,RUNBAS,TIMBASN SET /UIC=[16,2'S']E .OPEN BASMCRASM.CMD .SETS TEMPS1 "16" .SETS PRE "BMPRE," .SETS TEMPS "ABOBAS"A .GOSUB ASMBLD .SETS TEMPS "ATLBAS"T .GOSUB ASMBLD .SETS TEMPS "BRKBAS"C .GOSUB ASMBLD .SETS TEMPS "ERRMSG"* .GOSUB ASMBLD .SETS TEMPS "ERRBAS"M .GOSUB ASMBLD .SETS PRE ""S .SETS TEMPS "FMTDV" .GOSUB ASMBLD .SETS TEMPS "FNDUCB". .GOSUB ASMBLD .SETS TEMPS "GNBLK" .GOSUB ASMBLD .SETS TEMPS "GETNUM", .GOSUB ASMBLD .SETS TEMPS "KEYWD" .GOSUB ASMBLD .SETS TEMPS "LKLST" .GOSUB ASMBLD .SETS PRE "BMPRE,"D .SETS TEMPS "MCRBAS". .GOSUB ASMBLD .SETS TEMPS "OPEBAS"S .GOSUB ASMBLD .SETS TEMPS "PRSBAS"S .GOSUB ASMBLD .SETS TEMPS "REDBAS"S .GOSUB ASMBLD .SETS TEMPS "REMBAS"G .GOSUB ASMBLD .SETS TEMPS "RPSBAS"S .GOSUB ASMBLD .SETS TEMPS "RUNBAS"E .GOSUB ASMBLD .SETS TEMPS "TIMBAS"S .GOSUB ASMBLD .CLOSE .IFT D ;EB .IFT D ; The size of BASIC MCR is dependent upon the inclusion ofB .IFT D ; conditional assembly code. The inclusion of the code isC .IFT D ; controlled by symbol definitions appearing in an assemblyS= .IFT D ; prefix file. The default for these conditionals isBC .IFT D ; exclusion. The following options, along with the corres-T1 .IFT D ; ponding control symbols, are available:S .IFT D ; # .IFT D ; R$$ATL - ATL/TAL COMMANDSU% .IFT D ; R$$ERM - ERROR MESSAGE TEXTU .IFT D ; R$$OPE - OPEN COMMAND. .IFT D ; D .IFT D ; To include an option locate the desired conditional symbolE .IFT D ; and remove the semicolon at the beginning of the line. Ford .IFT D ; example: .IFT D ;g .IFT D ; *PL ;R$$ATL # .IFT D ; ;R$$ATL = 0 ;INCLUDE ATLs .IFT D ; *C /;//" .IFT D ; R$$ATL = 0 ;INCLUDE ATL .IFT D ; *g .IFT D ;oE .IFT D ; Repeat this for all desired options. Note that the symbolsH .IFT D ; appear on consecutive lines in alphabetical order in the file. .IFT D ; ? .ASK Z Do you wish to edit the assembly prefix file for BASMCRi .IFF Z .GOTO 830e .IFINS EDI .GOTO 820. .SETF EDI INS SY:$EDI.820: EDI [16,10]BMPRE.MAC .IFF EDI REM EDIF .SETT EDI.830: .IFINS MAC .GOTO 840 .SETF MAC INS SY:$MAC.840: MAC @BASMC00=TADATADATADATADATADATADATADATADATARASM.CMD .IFF MAC REM MAC. .SETT MAC3 .IFT $2RK .IFT LST PIP 'ALD'[16,3'S']*.LST;*/DE/NM  SET /UIC=['$SYGRP',2'S']i PIP [16,10]BMPRE.MAC;*/DE/NMb PIP [16,10]*.MAC;*/RM/NMo PIP BASMCR.OBJ=[16,2'S']*.OBJ PIP [16,2'S']*.*;*/DE/NM  .IFINS LBR .GOTO 850 .SETF LBR INS SY:$LBR&.850: LBR BASMCR/CR:21.:64.:64.=BASMCR .IFF LBR REM LBR2 .SETT LBR PIP BASMCR.OBJ;*/DE/NMD .SETS BASE "0"C .SETS LENGTH "14000". .IFF MPD .SETS BASE "20000" .IFF MPD .SETS LENGTH "12500" .IFT MPD .SETS TEMPS "" .IFF MPD .SETS TEMPS "-"T .SETS TEMPS3 "" .IFF $PWI .SETS TEMPS3 "/-WI": .SETS TEMPS2 ",'MPDV'['$SYGRP',3'S']BASMCR'TEMPS3''$SPL'"" .IF MPDV EQ "NL:" .SETS TEMPS2 "" .OPEN BASMCRBLD.CMD .ENABLE DATAQ['$SYGRP',6'S']BASMCR/PR/'TEMPS'MM'TEMPS2'=['$SYGRP',2'S']BASMCR/LB:MCRBAS:ERRBASB['$SYGRP',2'S']BASMCR/LB['$SYGRP',6'S']RSX11S.STB/SSLB:['$SYGRP',1]EXELIB/LBLB:['$SYGRP',1]SYSLIB/DL/EPAR=MCRPAR:'BASE':'LENGTH'STACK=32 TASK=MCR....PRI=150SUNITS=1HASG=TI:1 TSKV=$SSTAB:7 /P .DISABLE DATA  .CLOSEP .IFT D ;EB .IFT D ; The task build command file for BASMCR specifies that itM .IFT D .IFF MPD ; run in partition MCRPAR, length 'LENGTH' octal (unmapped).NK .IFT D .IFT MPD ; run in partition MCRPAR, length 'LENGTH' octal (mapped).YC .IFT D .IFF MPD ; For unmapped systems, its base address is 'BASE'P= .IFT D .IFF MPD ; octal. If you must alter that address, orS: .IFT D ; If you must change the partition name or length,< .IFT D ; you will have to edit its task build command file. .IFT D ;.B .ASK Z Do you wish to edit the task build command file for BASMCR .IFF Z .GOTO 870 .IFINS EDI .GOTO 860i .SETF EDI INS SY:$EDI.860: EDI BASMCRBLD.CMD) .IFF EDI REM EDID .SETT EDI.870: .IFINS 'TKBTM' .GOTO 880 .SETF TKB INS SY:$TKB.880: 'TKBTM' @BASMCRBLD.CMD .IFF TKB REM 'TKBTM'' .SETT TKB.890: .IFT D ;L .IFT D ; OTL is a privileged task which is the RSX-11S on-line task loader.J .IFT D ; It performs the install, load, and fix functions for tasks whichK .IFT D ; were created on a host development system and copied via FLX to alI .IFT D ; load medium. Depending on the number of load devices, etc, OTLSG .IFT D .IFF MPD ; ranges from 6200 to 10600 octal on unmapped systems.IE .IFT D .IFT MPD ; ranges from 8000 to 15000 octal on mapped systems.B .IFT D ;F) .ASK OTL Do you want to include task OTLD .IFF OTL .GOTO 980a .IFINS UFD .GOTO 900i .SETF UFD INS SY:$UFD.900: UFD SY:[20,10] UFD SY:[20,2'S']l$ .IF ALD NE "NL:" UFD 'ALD'[20,3'S'] .IFF UFD REM UFDe .SETT UFD SET /UIC=[20,10]s PIP SY:OTLPRE.MAC;*/DE/NM PIP SY:*.MAC;*/RM/NMu PIP [20,*]*.*;*/DE/NM PIP [20,10]=[2,20]OTLPRE.MAC0 PIP [20,10]/EN=[2,20]OTL.MAC,OTLCD,OTLCM,OTLERR8 PIP [20,10]/EN=[2,20]OTLHD.MAC,OTLLB,OTLLD,OTLQIO,OTLRD SET /UIC=[20,2'S']a .OPEN OTLASM.CMDF .SETS TEMPS1 "20" .SETS PRE "OTLPRE," .SETS TEMPS "OTL" .GOSUB ASMBLD .SETS TEMPS "OTLCD" .GOSUB ASMBLD .SETS TEMPS "OTLCM" .GOSUB ASMBLD .SETS TEMPS "OTLERR"  .GOSUB ASMBLD .SETS TEMPS "OTLHD" .GOSUB ASMBLD .SETS TEMPS "OTLLB" .GOSUB ASMBLD .SETS TEMPS "OTLLD" .GOSUB ASMBLD .SETS TEMPS "OTLQIO" .GOSUB ASMBLD .SETS TEMPS "OTLRD" .GOSUB ASMBLD .CLOSET .IFT D ;TH .IFT D ; The size of OTL is dependent upon the inclusion of conditionalH .IFT D ; assembly code. The inclusion of the code is done in two ways,D .IFT D ; by a single symbol definition and by macro calls appearingG .IFT D ; in an assembly prefix file. The first controls the inclusion D .IFT D ; of error message text. To include this option, locate the D .IFT D ; symbol R$$ERM, and remove the semicolon from the beginningH .IFT D ; of the line. The default for error message text is exclusion. .IFT D ; For example: .IFT D ; d .IFT D ; *PL ;R$$ERM .IFT D ; ;R$$ERM=0. .IFT D ; *C /;// .IFT D ; R$$ERM=0t .IFT D ;dE .IFT D ; The other type of option concerns the exclusion of unwantedcA .IFT D ; device support. For each of the OTL load devices whichnH .IFT D ; were included in Sysgen 00 3ZgPhase I, corresponding support will beI .IFT D ; generated in OTL. Naturally, support will not be generated foreK .IFT D ; those OTL load devices which were not included in Sysgen Phase I.lH .IFT D ; The following devices along with corresponding control symbols" .IFT D ; may be supported by OTL: .IFT D ; , .IFT D ; PR11 - PAPER TAPE READER ------ PR, .IFT D ; RX11 - RX11 FLEXIBLE DISK ----- DX, .IFT D ; RX21 - RX211 FLEXIBLE DISK ---- DY, .IFT D ; TA11 - CASSETTE TAPE ---------- CT, .IFT D ; TC11 - DECTAPE ---------------- DT, .IFT D ; TM11 - TM/TMA/TMB11 MAGTAPE --- MT, .IFT D ; TS11 - TS04 MAGTAPE ----------- MS, .IFT D ; TU16 - TJ/TWU16-45 MAGTAPE ---- MM, .IFT D ; TU58 - TU58 CARTRIDGE --------- DD .IFT D ;lK .IFT D ; To exclude OTL support for a device which has been generated into.H .IFT D ; your RSX-11S Executive, locate the corresponding device symbolK .IFT D ; and place a semicolon at the beginning of the line. For example:F .IFT D ;- .IFT D ; *PL PR110 .IFT D ; INCLUD PR11,P$$R11 ;PC11/PR11 SUPPORT .IFT D ; *C //;/11 .IFT D ; ; INCLUD PR11,P$$R11 ;PC11/PR11 SUPPPRT0 .IFT D ; *- .IFT D ;I .IFT D ; Perform this for all of the above devices which will be part ofGC .IFT D ; your RSX-11S Executive, but for which you do not want OTLvH .IFT D ; support. Note that the symbols appear on consecutive lines in) .IFT D ; alphabetical order in the file. .IFT D ; < .ASK Z Do you wish to edit the assembly prefix file for OTL .IFF Z .GOTO 920P .IFINS EDI .GOTO 910U .SETF EDI INS SY:$EDI.910: EDI [20,10]OTLPRE.MAC. .IFF EDI REM EDI1 .SETT EDI.920: .IFINS MAC .GOTO 930 .SETF MAC INS SY:$MAC.930: MAC @OTLASM.CMD  .IFF MAC REM MACh .SETT MAC3 .IFT $2RK .IFT LST PIP 'ALD'[20,3'S']*.LST;*/DE/NMh SET /UIC=['$SYGRP',2'S']. PIP [20,10]OTLPRE.MAC;*/DE/NM PIP [20,10]*.MAC;*/RM/NMv PIP OTL.OBJ=[20,2'S']*.OBJt PIP [20,2'S']*.*;*/DE/NM. .IFINS LBR .GOTO 940u .SETF LBR INS SY:$LBR!.940: LBR OTL/CR:21.:128.:64.=OTL  .IFF MPD LBR OTL=[2,20]BLXIOU .IFT MPD LBR OTL=[2,20]BLXIOM .IFF LBR REM LBR. .SETT LBR PIP OTL.OBJ;*/DE/NM .SETS BASE "0". .SETS LENGTH "15000"I .IFF MPD .SETS BASE "20000" .IFF MPD .SETS LENGTH "10600" .IFT MPD .SETS TEMPS "" .IFF MPD .SETS TEMPS "-"E .SETS TEMPS3 "" .IFF $PWI .SETS TEMPS3 "/-WI"7 .SETS TEMPS2 ",'MPDV'['$SYGRP',3'S']OTL'TEMPS3''$SPL'"[" .IF MPDV EQ "NL:" .SETS TEMPS2 "" .OPEN OTLBLD.CMD .ENABLE DATAH['$SYGRP',6'S']OTL/PR/'TEMPS'MM'TEMPS2'=['$SYGRP',2'S']OTL/LB:OTL,OTL/LB.LB:['$SYGRP',1]SYSLIB/LB:CAT5:SAVRG:SAVAL:CBTA5['$SYGRP',6'S']RSX11S.STB/SS,LB:['$SYGRP',1]EXELIB/LBLB:['$SYGRP',1]SYSLIB/DL/TSTACK=32UNITS=3PASG=TI:2 TSKV=$STVEC:7FPAR=OTLPAR:'BASE':'LENGTH'/F .DISABLE DATAP .CLOSEF .IFT D ; ? .IFT D ; The task build command file for OTL specifies that itEM .IFT D .IFF MPD ; run in partition OTLPAR, length 'LENGTH' octal (unmapped).TK .IFT D .IFT MPD ; run in partition OTLPAR, length 'LENGTH' octal (mapped).EC .IFT D .IFF MPD ; For unmapped systems, its base address is 'BASE':= .IFT D .IFF MPD ; octal. If you must alter that address, orX: .IFT D ; If you must change the partition name or length,< .IFT D ; you will have to edit its task build command file. .IFT D ;? .ASK Z Do you wish to edit the task build command file for OTLT .IFF Z .GOTO 960E .IFINS EDI .GOTO 950n .SETF EDI INS SY:$EDI.950: EDI OTLBLD.CMD .IFF EDI REM EDII .SETT EDI.960: .IFINS 'TKBTM' .GOTO 970 .SETF TKB INS SY:$TKB.970: 'TKBTM' @OTLBLD.CMDe .IFF TKB REM 'TKBTM'r .SETT TKB.980: .IFT D ;D .IFT D ; SIP is a privileged task which performs the RSX-11S systemE .IFT D ; image preservation duties. It replaces the RSX-11M SAV MCRiE .IFT D ; command. Depending on the number of load devices, etc, SIP F .IFT D .IFF MPD ; ranges from 3500 to 6700 octal on unmapped systems.D .IFT D .IFT MPD ; ranges from 3700 to 7400 octal on mapped systems. .IFT D ;E) .ASK SIP Do you want to include task SIPE .IFF SIP .GOTO 1081 .IFINS UFD .GOTO 990M .SETF UFD INS SY:$U00=TADATADATADATADATADATADATADATADATAFD.990: UFD SY:[21,10] UFD SY:[21,2'S']I$ .IF ALD NE "NL:" UFD 'ALD'[21,3'S'] .IFF UFD REM UFD .SETT UFD SET /UIC=[21,10]t PIP SY:SIPPRE.MAC;*/DE/NM PIP SY:*.MAC;*/RM/NMo PIP [21,*]*.*;*/DE/NM PIP [21,10]=[2,20]SIPPRE.MACI1 PIP [21,10]/EN=[2,20]SIP.MAC,SIPBOO,SIPCD,SIPERRa& PIP [21,10]/EN=[2,20]SIPLD.MAC,SIPQIO SET /UIC=[21,2'S']o .OPEN SIPASM.CMDe .SETS TEMPS1 "21" .SETS PRE "SIPPRE," .SETS TEMPS "SIP" .GOSUB ASMBLD .SETS TEMPS "SIPBOO"  .GOSUB ASMBLD .SETS TEMPS "SIPCD" .GOSUB ASMBLD .SETS TEMPS "SIPERR"I .GOSUB ASMBLD .SETS TEMPS "SIPLD" .GOSUB ASMBLD .SETS TEMPS "SIPQIO"/ .GOSUB ASMBLD .CLOSEP .IFF OTL .GOTO 1000 .GOTO 995.ASMBLD:2 .SETS TEMPS2 ",'ALD'['TEMPS1',3'S']'TEMPS''$SPL'"j .DATA 'TEMPS''TEMPS2'=LB:['$SYGRP',1]'SMAC'EXEMC/ML,SY:['$UIC',10]RSXMC/PA:1,SY:['TEMPS1',10]'PRE''TEMPS' .RETURN.995: .IFT D ;E .IFT D ; The size of SIP is dependent upon conditional assembly codeSH .IFT D ; in exactly the same manner as OTL. There are only a few minorD .IFT D ; differences. OTL supports the paper tape reader using theH .IFT D ; control symbol PR11; SIP on the other hand supports the paperD .IFT D ; tape punch using the control symbol PP11. In addition, OTLF .IFT D ; supports DECtape II cartridges using control symbol TU58 andB .IFT D ; TS11 magnetic tape drives using the control symbol TS11.K .IFT D ; Edit SIPPRE.MAC in the same way described for OTL. For example: y .IFT D ;F .IFT D ; *PL PP110 .IFT D ; INCLUD PP11,P$$P11 ;PC11/PR11 SUPPORT .IFT D ; *C //;/e1 .IFT D ; ; INCLUD PP11,P$$P11 ;PC11/PR11 SUPPPRT. .IFT D ; *o .IFT D ;1 .GOTO 1010e.1000: .IFT D ;rH .IFT D ; The size of SIP is dependent upon the inclusion of conditionalH .IFT D ; assembly code. The inclusion of the code is done in two ways,D .IFT D ; by a single symbol definition and by macro calls appearingG .IFT D ; in an assembly prefix file. The first controls the inclusionxD .IFT D ; of error message text. To include this option, locate theD .IFT D ; symbol R$$ERM, and remove the semicolon from the beginningH .IFT D ; of the line. The default for error message text is exclusion. .IFT D ; For example: .IFT D ; d .IFT D ; *PL ;R$$ERM .IFT D ; ;R$$ERM=0. .IFT D ; *C /;// .IFT D ; R$$ERM=0t .IFT D ;dE .IFT D ; The other type of option concerns the exclusion of unwantedcA .IFT D ; device support. For each of the SIP load devices whichnH .IFT D ; were included in Sysgen Phase I, corresponding support will beI .IFT D ; generated in SIP. Naturally, support will not be generated foreK .IFT D ; those SIP load devices which were not included iN Sysgen Phase I.lH .IFT D ; The following devices along with corresponding control symbols" .IFT D ; may be supported by SIP: .IFT D ; ! .IFT D ; PP11 - PAPER TAPE PUNCHh# .IFT D ; RX11 - RX11 FLEXIBLE DISKx$ .IFT D ; RX21 - RX211 FLEXIBLE DISK .IFT D ; TA11 - CASSETTE TAPE .IFT D ; TC11 - DECTAPE% .IFT D ; TM11 - TM/TMA/TMB11 MAGTAPEr$ .IFT D ; TU16 - TJ/TWU16-45 MAGTAPE .IFT D ;nK .IFT D ; To exclude SIP support for a device which has been generated intodH .IFT D ; your RSX-11S Executive, locate the corresponding device symbolK .IFT D ; and place a semicolon at the beginning of the line. For example:t .IFT D ; .IFT D ; *PL PP11+ .IFT D ; INCLUD PP11,P$$P11 ;PC11 SUPPORTR .IFT D ; *C //;/, .IFT D ; ; INCLUD PP11,P$$P11 ;PC11 SUPPORT .IFT D ; *E .IFT D ;.I .IFT D ; Perform this for all of the above devices which will be part ofUC .IFT D ; your RSX-11S Executive, but for which you do not want SIPtH .IFT D ; support. Note that the symbols appear on consecutive lines in) .IFT D ; alphabetical order in the file.l .IFT D ; B.1010: .ASK Z Do you wish to edit the assembly prefix file for SIP .IFF Z .GOTO 1030 .IFINS EDI .GOTO 1020 .SETF EDI INS SY:$EDI.1020: EDI [21,10]SIPPRE.MAC .IFF EDI REM EDI1 .SETT EDI.1030: .IFINS MAC .GOTO 1040 .SETF MAC INS SY:$MAC.1040: MAC @SIPASM.CMD .IFF MAC REM MACl .SETT MAC3 .IFT $2RK .IFT LST PIP 'ALD'[2100 3Zg,3'S']*.LST;*/DE/NM  SET /UIC=['$SYGRP',2'S']  PIP [21,10]SIPPRE.MAC;*/DE/NM PIP [21,10]*.MAC;*/RM/NM  PIP SIP.OBJ=[21,2'S']*.OBJd PIP [21,2'S']*.*;*/DE/NM  .IFINS LBR .GOTO 1050 .SETF LBR INS SY:$LBR!.1050: LBR SIP/CR:20.:64.:64.=SIP0 .IFF LBR REM LBRT .SETT LBR PIP SIP.OBJ;*/DE/NM .SETS TEMP "" .IFF MPD .SETS TEMP "-" .SETS BASE "0"I .SETS LENGTH "7400" .IFF MPD .SETS BASE "20000" .IFF MPD .SETS LENGTH "6700". .SETS TEMPS3 "" .IFF $PWI .SETS TEMPS3 "/-WI"7 .SETS TEMPS2 ",'MPDV'['$SYGRP',3'S']SIP'TEMPS3''$SPL'"'" .IF MPDV EQ "NL:" .SETS TEMPS2 "" .OPEN SIPBLD.CMD/ .ENABLE DATAJ['$SYGRP',6'S']SIP/PR/'TEMP'MM'TEMPS2'=['$SYGRP',2'S']SIP/LB:SIPBOO,SIP/LBLB:['$SYGRP',1]SYSLIB/LB:CBTA:5['$SYGRP',6'S']RSX11S.STB/SS,LB:['$SYGRP',1]EXELIB/LBTLB:['$SYGRP',1]SYSLIB/DL/.STACK=32UNITS=2 ASG=TI:2 TSKV=$STVEC:7SPAR=SIPPAR:'BASE':'LENGTH'/" .DISABLE DATAT .CLOSE0 .IFT D ; ? .IFT D ; The task build command file for SIP specifies that itSM .IFT D .IFF MPD ; run in partition SIPPAR, length 'LENGTH' octal (unmapped).QK .IFT D .IFT MPD ; run in partition SIPPAR, length 'LENGTH' octal (mapped).PC .IFT D .IFF MPD ; For unmapped systems, its base address is 'BASE'1= .IFT D .IFF MPD ; octal. If you must alter that address, orX: .IFT D ; If you must change the partition name or length,< .IFT D ; you will have to edit its task build command file. .IFT D ;? .ASK Z Do you wish to edit the task build command file for SIPI .IFF Z .GOTO 1070 .IFINS EDI .GOTO 1060 .SETF EDI INS SY:$EDI.1060: EDI SIPBLD.CMDp .IFF EDI REM EDIT .SETT EDI .1070: .IFINS 'TKBTM' .GOTO 1080 .SETF TKB INS SY:$TKB.1080: 'TKBTM' @SIPBLD.CMD .IFF TKB REM 'TKBTM' .SETT TKB.1081: .IFF RSD .GOTO 1089 SET /UIC=['$SYGRP',2'S']s) .IFT MPD PIP RMD.OLB/NV=[2,20]RMDMAP.OLBr) .IFF MPD PIP RMD.OLB/NV=[2,20]RMDUNM.OLBh, .ASK V05 Do you want to include task RSDV05 .IFF V05 .GOTO 1083 .SETS TEMP "V05"a .SETS TEMPS1 "41401"o .SETS TEMPS2 "41003"0 .GOSUB RSDBLD .IFT D ;> .IFT D ; The task build file for RSDV05 specifies that it run4 .IFT D ; in partition RSDV05, length 40000 (octal).K .IFT D .IFF MPD ; For unmapped systems, its base address is 20000 (octal)..? .IFT D ; If you must change the partition name or length, you 8 .IFT D ; will have to edit the task build command file. .IFT D ;[B .ASK Z Do you wish to edit the task build command file for RSDV05 .IFF Z .GOTO 1083 .IFINS EDI .GOTO 1082 .SETF EDI INS SY:$EDI.1082: EDI RSDV05BLD.CMD .IFF EDI REM EDI. .SETT EDI2.1083: .ASK V52 Do you want to include task RSDV52 .IFF V52 .GOTO 1085 .SETS TEMP "V52"  .SETS TEMPS1 "43001"M .SETS TEMPS2 "42403"m .GOSUB RSDBLD .IFT D ;0B .IFT D ; The task build command file for RSDV52 specifies that it8 .IFT D ; run in partition RSDV52, length 40000 (octal).K .IFT D .IFF MPD ; For unmapped sysetms, its base address is 20000 (octal). > .IFT D ; If you must change the partition name or length, you8 .IFT D ; will have to edit the task build command file. .IFT D ;TB .ASK Z Do you wish to edit the task build command file for RSDV52 .IFF Z .GOTO 1085 .IFINS EDI .GOTO 1084 .SETF EDI INS SY:$EDI.1084: EDI RSDV52BLD.CMD .IFF EDI REM EDI .SETT EDI2.1085: .ASK V1H Do you want to include task RSDV1H .IFF V1H .GOTO 1087 .SETS TEMP "V1H"0 .SETS TEMPS1 "43001"F .SETS TEMPS2 "42403"e .GOSUB RSDBLD .GOTO 108A0.RSDBLD: .IFT MPD .SETS MMSW "MM"n .IFF MPD .SETS MMSW "-MM" .SETS BASE "0"  .IFF MPD .SETS BASE "20000" .SETS TEMPS3 "" .IFF $PWI .SETS TEMPS3 "/-WI"= .SETS TEMPS4 ",'MPDV'['$SYGRP',3'S']RSD'TEMP''TEMPS3''$SPL'" " .IF MPDV EQ "NL:" .SETS TEMPS4 "" .OPEN RSD'TEMP'BLD.CMD: .ENABLE DATA+['$SYGRP',6'S']RSD'TEMP'/PR/'MMSW''TEMPS4'=.L['$SYGRP',2'S']RMD/LB:RMDEMO:RMDRIV:GBLCHA:'TEMP'CHA:GBLGBM:GBLMDM:'TEMP'MDM(['$SYGRP',2'S']RMD/LB:GBCOM:MDCOM:RMDXCMC['$SYGRP',2'S']RMD/LB:REMAP:GBINIT:MDINIT:GBPAGE:MDPAGE:GBCMD:MDCMD 8LB:['$SYGRP',1]SYSLIB/LB:CATB:CAT5:CBTA:CDDMG:C5TA:EDDAT9['$SYGRP',2'S']RMD/LB:NUL11S,['$SYGRP'00=TADATADATADATADATADATADATADATADATA,6'S']RSX11S.STB/SS.LB:['$SYGRP',1]SYSLIB/DL/M ASG=TI:1:2PRI=225,EXTSCT=$SCRN:6140SPAR=RSD'TEMP':'BASE':40000TASK=RSD'TEMP'4;CLEAR OUT PAGE TABLE TO PREVENT TASK FROM TRYING TO3;LOAD IN ANOTHER PAGE. ALL KEYS REPLOT CURRENT PAGEL$GBLPAT=RMDEMO:$PGTBL:0:0:0:0:0:0:0:0'GBLPAT=RMDEMO:$PGTBL+20:0:0:0:0:0:0:0:0B'GBLPAT=RMDEMO:$PGTBL+40:0:0:0:0:0:0:0:0E'GBLPAT=RMDEMO:$PGTBL+60:0:0:0:0:0:0:0:0M(GBLPAT=RMDEMO:$PGTBL+100:0:0:0:0:0:0:0:0(GBLPAT=RMDEMO:$PGTBL+120:0:0:0:0:0:0:0:0(GBLPAT=RMDEMO:$PGTBL+140:0:0:0:0:0:0:0:0(GBLPAT=RMDEMO:$PGTBL+160:0:0:0:0:0:0:0:0; TAILOR DISPLAY TO 11SAGBLPAT=RMDEMO:$MDFRH:0GBLPAT=RMDEMO:$MDFRE:0:0:0:0GBLPAT=RMDEMO:$MDOTH:0GBLPAT=RMDEMO:$MDOTN:0GBLPAT=RMDEMO:$MDOTK:0GBLPAT=RMDEMO:$MDPRH:'TEMPS1'TGBLPAT=RMDEMO:$MDPRL:'TEMPS2'"GBLPAT=RMDEMO:HEADER+6:20123:31126GBLPAT=RMDEMO:$MDERH:0GBLPAT=RMDEMO:$MDERR:0// .DISABLE DATAL .CLOSE: .RETURN.108A: .IFT D ;PB .IFT D ; The task build command file for RSDV1H specifies that it8 .IFT D ; run in partition RSDV1H, length 40000 (octal).K .IFT D .IFF MPD ; For unmapped systems, its base address is 20000 (octal).0> .IFT D ; If you must change the partition name or length, you8 .IFT D ; will have to edit the task build command file. .IFT D ;TB .ASK Z Do you wish to edit the task build command file for RSDV1H .IFF Z .GOTO 1087 .IFINS EDI .GOTO 1086 .SETF EDI INS SY:$EDI.1086: EDI RSDV1HBLD.CMD .IFF EDI REM EDI .SETT EDI .1087: .IFINS 'TKBTM' .GOTO 1088 .SETF TKB INS SY:$TKB&.1088: .IFT V05 'TKBTM' @RSDV05BLD.CMD .IFT V52 'TKBTM' @RSDV52BLD.CMD .IFT V1H 'TKBTM' @RSDV1HBLD.CMD .IFF TKB REM 'TKBTM' .SETT TKB.1089: .IFF CDA .GOTO 1090.;/.; Set up symbols for CDABLD "BLD" file, MAPPEDb.; SET /UIC=['$SYGRP',24]T .SETT $FCSTKu .SETT $11M .SETF $11MPLc .SETS $TYP1 ""S .SETS $TYP2 ""T .SETS $LIBOP "" .SETS $CL "". .SETS $MMSW "/MM" .SETS $TK "SY:['$SYGRP',64]". .SETS $MP "['$SYGRP',34]" .SETS $OD "SY:['$SYGRP',24]"0 .SETS $LI "SY:['$SYGRP',20]"1 .SETS $GENB "GEN:0:70000" .SETS $COM "ON A MAPPED SYSTEM" .SETS $RSLIB "SYSLIB" .SETS $BLDID "11SGEN2.CMD" @CDABLD.BLD ;G ; It may be necessary to edit the task build command file and ODL file"B ; to build CDA for the non-M host. Change the partition name andI ; base address to match that of the partition (on the host system) into "E ; which CDA will be installed. You will also need to change the ODL .E ; file to reference the correct device on the host where SYSLIB and YA ; EXELIB reside. The files are named CDABLD.CMD and CDABLD.ODL.P< ; We will now pause to allow you to edit the command files. .;@> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSEe" .IFT $VAX ; 11SGEN2 -- continuing .;o .IFINS TKB .GOTO 89Aa .SETF TKB INS SY:$TKB.89A: SET /UIC=['$SYGRP',64] TKB @['$SYGRP',24]CDABLDm .IFF TKB REM TKBC .SETT TKBH ; The CDA.TSK file resides in ['$SYGRP',64] on your RSX-11S sysgen disk% ; and can be run on the host system.BC.IFT $VAX ; CDA must be run in compatibility mode on VAX/VMS hosts.O SET /UIC=['$SYGRP',2'S']t.1090: .IFF FCS .GOTO 1110 .IFT D ;= .IFT D ; Add subset FCS to the RSX-11S system object libraryN .IFT D ;S SET /UIC=['$SYGRP',1] .IFINS LBR .GOTO 1100 .SETF LBR INS SY:$LBR$.1100: LBR LB:11SLIB/RP=[2,20]FCS11S .IFF LBR REM LBR@ .SETT LBR PIP LB:11SLIB.OLB/PU/NM.1110: .IFF SETTIM .GOTO 1140f .IFT D .IFT SETTIM ;'F .IFT D .IFT SETTIM ; Support for the Set Time directive was chosen inG .IFT D .IFT SETTIM ; Sysgen Phase I. Produce the SETTIM object module.S .IFT D .IFT SETTIM ;  SET /UIC=['$SYGRP',2'S']0 .IFINS MAC .GOTO 1120 .SETF MAC INS SY:$MAC6.1120: .SETS TEMPS ",'ALD'['$SYGRP',3'S']SETTIM'$SPL'" .IF ALD EQ "NL:" .SETS TEMPS "" .OPEN SETTIMASM.CMDR .DATA SETTIM'TEMPS'=['$SYGRP',1]'SMAC'EXEMC/ML,['$UIC',10]RSXMC/PA:1,[2,20]SETTIM .CLOSE/ MAC @SETTIMASME PIP SETTIMASM.CMD;*/DE  .IFF MAC REM MACF .SETT MAC> .IFT $2RK .IFT LST PIP 'ALD'['$SYGRP',3'S']SETTIM.LST;*/DE/NM.1140:00 3Zg SET /UIC=['$SYGRP',6'S']d.1170: PIP *.*/PU/NM PIP ['$SYGRP',2'S']*.*/PU/NM .IFT D ;=A .IFT D ; The operation left to be performed is that of the finalB .IFT D ; configuration of the virgin executive using Virtual MCR. .IFT D ; @ .ASK Z Do you want to configure the Exec at this time using VMR .IFF Z .GOTO 1240 .IFT $2RK .IFT D ;]I .IFT $2RK .IFT D ; Provide enough space for the system image by deleting = .IFT $2RK .IFT D ; libraries copied earlier to the baseline.E .IFT $2RK .IFT D ;43 .IFT $2RK PIP [1,1]SYSLIB.OLB;*/DE/NM,EXELIB.OLB;*P .IFT D;D .IFT D ; The contents of your RSX-11S release kit currently residesI .IFT D ; under the UFD [2,20]. If your SY: disk is not an RK06/07 or anvA .IFT D ; RP04/05/06 you may want to delete these files. LeavingtI .IFT D ; them on the disk will save the time of re-copying them the next.K .IFT D ; time you perform an RSX-11S Sysgen. If your SY: disk is an RK05,F- .IFT D ; they will be automatically deleted. .IFT D ;F .IFF $2RK .ASK Z Do you want to delete the RSX-11S kit from this disk+ .IFT Z .OR .IFT $2RK PIP [2,20]*.*;*/DE/NMR .SETS SIZE "/NV"c# .IFDF $TME .SETN BLKS ($TME*4.)+2. , .IFDF $TME .IF BLKS GT 498. .SETN BLKS 498.; .IFT MPD .AND .IFDF $TME .SETS SIZE "'SIZE'/CO/BL:'BLKS.'"i# .IFDF $TME .OR .IFF MPD .GOTO 1190 .IFT D ;a@ .IFT D ; You now must specify whether the memory size which you? .IFT D ; specified for your target system in SGN during Sysgenh, .IFT D ; Phase I is greater than 32K words. .IFT D ;K3 .ASK Z Is your target system larger than 32K wordsi .IFF Z .GOTO 1190 .IFT D ;ID .IFT D ; If you ever wish to have tasks fixed above 32K words in an? .IFT D ; image of your target system, you must create a larger 4 .IFT D ; copy of your system with PIP at this time. .IFT D ;O: .ASK Z Do you wish to create a larger copy of your system .IFF Z .GOTO 1190 .IFT D ;wB .IFT D ; At this time we will invoke PIP to allow you to create aD .IFT D ; larger copy of your system. To do so, enter the following .IFT D ; command: .IFT D ;r/ .IFT D ; PIP>RSX11S.SYS/NV/CO/BL:N.=RSX11S.TSK .IFT D ; PIP>^Z .IFT D ; G .IFT D ; To create a system image in which task images may be fixed upsC .IFT D ; to M Kwords, you may calculate a value for N in the aboveP .IFT D ; command as follows:S .IFT D ;w .IFT D ; N=(4*M)+2r .IFT D ;uG .IFT D ; For example, for the ability to fix tasks in the system imagei* .IFT D ; up to 40K, the command would be: .IFT D ;p1 .IFT D ; PIP>RSX11S.SYS/NV/CO/BL:162.=RSX11S.TSK. .IFT D ; PIP>^Z .IFT D ; PIP .GOTO 1200S.1190: .IFT D ;R7 .IFT D ; We will now make a copy of your target systeme .IFT D ;m PIP RSX11S.SYS'SIZE'=RSX11S.TSK.1200: .IFT D ; F .IFT D ; If you wish to make a copy of your task or system image fileD .IFT D ; on another device we will pause now to allow you to do so. .IFT D ;o9 .ASK Z Do you wish to copy your system to another devicei .IFF Z .GOTO 1210 ;6 ; We will now pause to allow you to perform the copy. ;> .IFT $VAX ; 11SGEN2 -- Pausing. To continue type "CONTINUE". .PAUSES" .IFT $VAX ; 11SGEN2 -- continuing SET /UIC=['$SYGRP',6'S']a.1210: .IFT D ;FL .IFT D ; RSX11S.TSK is a backup copy of the 11S system you have just built.A .IFT D ; If you do not wish to retain it, we will delete it now.a .IFT D ;c? .ASK Z Do you wish to delete the system backup file RSX11S.TSKo .IFT Z PIP RSX11S.TSK;0/DE/NM .IFT D ;vJ .IFT D ; Your target system is now ready to set up partitions and install: .IFT D ; the required tasks. The procedure to follow is: .IFT D ; 1) Run Virtual MCR9 .IFT D ; 2) Extend POOL space to base of first partitiona# .IFT D ; 3) Set up your partitionsTD .IFT D .IFT DEVCOM ; 3A) Setup common block for DSS, UDC or ICR/ICS+ .IFT D .IFT $LOD ; 3B) Load needed driverstC .IFT D .IFT $DRC ; 3C) Set up a partition for the Directive Commonu3 .IFT D .IFT $LPA11 ; 3D) Install the LPA11 modules.3 .IFT D ; 4) Install tasks (BASMCR, OTL, SIP, TKTN)o, .IFT D ; 5) Fix tasks into (virtual) memory; .IFT D ; 6) Optio00=TADATADATADATADATADATADATADATADATAnally set the time and save a copy of THEn( .IFT D ; system on a bootable mediumA .IFT D ; 7) Exit from virtual MCR and boot in your target systemT ;B .IFF D ; Setup the target system basing commands on the following ; VMR example:  ; ; >VMR ! RUN VIRTUAL MCR 9 ; ENTER FILENAME:RSX11S.SYS ! VMR PROMPTS FOR FILE NAMEo: ; VMR>SET /POOL=XXX ! EXTEND POOL TO FIRST PARTITION BASEO .IFT $FUD ; VMR>SET /MAIN=TTPAR:XXX:XXX:TASK !SET UP FULL DUPLEX TT PARTITIONvI .IFT $LOD ; VMR>SET /MAIN=DRVPAR:XXX:XXX:TASK ! SET UP DRIVER PARTITIONnE .IFT $DRC ; VMR>SET /MAIN=EXCOM1:XXX:XXX:COM ! SET 1ST EXEC. COMMONu: .IFT $DRC ; VMR>INS EXCOM1 !INSTALL 1ST EXECUTIVE COMMONE .IFT $DRC ; VMR>SET /MAIN=EXCOM2:XXX:XXX:COM ! SET 2ND EXEC. COMMON;: .IFT $DRC ; VMR>INS EXCOM2 !INSTALL 2ND EXECUTIVE COMMON= ; VMR>SET /MAIN=SYSPAR:XXX:XXX:TASK ! SET UP TKTN PARTITIONO< ; VMR>SET /MAIN=MCRPAR:XXX:XXX:TASK ! SET UP MCR PARTITION< ; VMR>SET /MAIN=OTLPAR:XXX:XXX:TASK ! SET UP OTL PARTITION< ; VMR>SET /MAIN=SIPPAR:XXX:XXX:TASK ! SET UP SIP PARTITION@ .IFT V05 ; VMR>SET /MAIN=RSDV05:XXX:XXX:TASK !SET UP RSDV05 PAR@ .IFT V52 ; VMR>SET /MAIN=RSDV52:XXX:XXX:TASK !SET UP RSDV52 PAR@ .IFT V1H ; VMR>SET /MAIN=RSDV1H:XXX:XXX:TASK !SET UP RSDV1H PAR= ; VMR>SET /MAIN=GEN:XXX:XXX:SYS ! IF SYSTEM CONTROLLED PAR.N@ ; VMR>SET /MAIN=GEN:XXX:XXX:TASK ! IF USER CONTROLLED PARTITION9 .IFT $LPA11 ; VMR>INS LAINIT !INSTALL THE LPA11 MODULESN .IFT $LPA11 ; VMR>INS LAIN0 !: .IFF DEVCOM .GOTO 1220I$ .IFF $DSS .IFT MPD .SETS BAS "7710"$ .IFF $DSS .IFF MPD .SETS BAS "1710"$ .IFT $DSS .IFT MPD .SETS BAS "7610"$ .IFT $DSS .IFF MPD .SETS BAS "1610" .IFF $DSS .SETS BAS "1710"T= .IFT $CDB ; VMR>SET /MAIN=ICOM:'BAS':10:DEV ! SET UP COMMONS; .IFT $CDB ; VMR>INS ['$SYGRP',1]ICOM ! SET COMMON RESIDENTE> .IFT $DUC ; VMR>SET /MAIN=UDCOM:'BAS':10:DEV ! SET UP COMMON< .IFT $DUC ; VMR>INS ['$SYGRP',1]UDCOM ! SET COMMON RESIDENT= .IFT $DSS ; VMR>SET /MAIN=ISCOM:'BAS':10:DEV !SET UP COMMONC< .IFT $DSS ; VMR>INS ['$SYGRP',1]ISCOM ! SET COMMON RESIDENT= .IFT $IPE ; VMR>SET /MAIN=IPCOM:'BAS':10:DEV !SET UP COMMON1; .IFT $IPE ; VMR>INS ['$SYGRP',1]IPCOM !SET COMMON RESIDENTS,.1220: .IFT $LOD ; VMR>LOA XX: ! LOAD XXDRV/ ; VMR>INS TKN ! INSTALL TASK TERMINATION TASK[" ; VMR>FIX TKTN ! FIX INTO MEMORY& ; VMR>INS BASMCR ! INSTALL BASIC MCR$ ; VMR>FIX MCR... ! FIX INTO MEMORY, ; VMR>INS OTL ! INSTALL ONLINE TASK LOADER! ; VMR>FIX OTL ! FIX INTO MEMORYC2 ; VMR>INS SIP ! INSTALL SYSTEM PRESERVATION TASK! ; VMR>FIX SIP ! FIX INTO MEMORYE* .IFT V05 ; VMR>INS RSDV05 !INSTALL RSDV05+ .IFT V05 ; VMR>FIX RSDV05 !FIX INTO MEMORYI* .IFT V52 ; VMR>INS RSDV52 !INSTALL RSDV52+ .IFT V52 ; VMR>FIX RSDV52 !FIX INTO MEMORY* .IFT V1H ; VMR>INS RSDV1H !INSTALL RSDV1H+ .IFT V1H ; VMR>FIX RSDV1H !FIX INTO MEMORYV- ; VMR>TIM 10:45 11/10/77 ! SET TIME AND DATEM1 ; VMR>SAV DX:RSX11S ! SAVE SYSTEM ON RX01 FLOPPY # ; VMR>^Z ! EXIT FROM VIRTUAL MCR  ; .IFT D ; End of VMR example .IFT D ;Y .IFT D ;V .IFT D ;@ .IFT D ; Now we will run Virtual MCR so that you may initializeA .IFT D ; your system. Be sure to define all required partitions5A .IFT D ; at this time, because the SET function is not supported < .IFT D ; in RSX-11S BASIC MCR. Furthermore, if you plan to= .IFT D ; include BASIC MCR and OTL in your system, they must0; .IFT D ; be installed and fixed into memory. Other tasks,O; .IFT D ; such as SIP and TKTN may be loaded into a runningF# .IFT D ; RSX-11S system using OTL. .IFT D ;D .IFT D .IFT $LOD ; NOTE: Since LOAD and UNLOAD are not supported onC .IFT D .IFT $LOD ; a running RSX-11S system, all required loadablei5 .IFT D .IFT $LOD ; drivers must be loaded using VMR.i .IFT D .IFT $LOD ;F; .IFT D .IFT $DRC ; NOTE: You have requested to include theF; .IFT D .IFT $DRC ; directive common. You must install the.8 .IFT D .IFT $DRC ; common prior to exitting Virtual MCR9 .IFT D .IFT $DRC ; or your RSX-11S system will not boot.n .SETS VMRTM "VMR" .IFT $MPLUS .SETS VMRTM "VMM" .IFINS 'VMRTM' .GOT003ZgO 1225 .SETF VMRXd .IFF $MPLUS INS SY:$'VMRTM'7 .IFT $MPLUS INS SY:['$SYGRP',54]11MVMR/TASK=...'VMRTM'd.1225: 'VMRTM' ;; ; When this command file completes, your RSX-11S system is$ ; ready to run. ; .IFF VMRX REM 'VMRTM'.1240: .IFF PIP REM PIP. .SETT PIP .IFF UFDX REM UFD .IFF TKBX REM 'TKBTM' .IFF PIPX REM PIP .IFF LBRX REM LBR .IFF EDIX REM EDI .IFF FLXX REM FLX .IFF MACX REM MAC SET /UIC='UIC't TIM0.1250: .IFF $MCR ; Resetting the CLI back to DCL .IFF $MCR SET /DCL=TI:5 ;SETF VMRXd .IFF $MPLUS INS SY:$'VMRTM'7 .IFT $MPLUS INS SY:['$SYGRP',54]11MVMR/TASK=...'VMRTM'd.1225: 'VMRTM' ;; ; When this command file completes, your RSX-11S system is$ ; ready to run. ; .IFF VMRX REM 'VMRTM'.1240: .IFF PIP REM PIP. .SETT PIP .IFF UFDX REM UFD .IFF TKBX REM 'TKBTM' .IFF PIPX REM PIP .IFF LBRX REM LBR .IFF EDIX REM EDI .IFF FLXX REM FLX .IFF MACX REM MAC SET /UIC='UIC't TIM0.1250: .IFF $MCR ; Resetting the CLI back to DCL .IFF $MCR SET /DC .NLIST;;FA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.,;1A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEl@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.P;.@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;E;; THIS IS THE BASIC MCR PREFIX FILE. IT IS USED TO CONTROLB%; THE COMMANDS INCLUDED IN BASIC MCR.P;G3; TO INCLUDE THE ATL AND TAL COMMANDS DEFINE R$$ATLM@; TO INCLUDE ERROR MESSAGES AS WELL AS ERROR CODES DEFINE R$$ERM+; TO INCLUDE THE OPEN COMMAND DEFINE R$$OPEO;;R$$ATL = 0 ; INCLUDE ATL%;R$$ERM = 0 ; INCLUDE ERROR MESSAGES ;R$$OPE = 0 ; INCLUDE OPEN  .LISTUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;E;; THIS IS THE BASIC MCR PREFIX FILE. IT IS USED TO CONTROLB%; THE COMMANDS INCLUDED IN BASIC MCR.P;G3; TO INCLUDE THE ATL AND TAL COMMANDS DEFINE R$$ATLM@; TO INCLUDE ERROR MESSAGES AS WELL AS ERROR CODES DEFINE R$$ERM+; TO INCLUDE THE OPEN COMMAND DEFINE R$$OPEO;;R$$ATL = 0 ; INCLUDE ATL%;R$$ERM = 0 ; INCLUDE ERROR MESSAGES ;R$$OPE = 0 ; INCLUDE OPEN  .@ .TITLE ABOBAS - ABORT, CANCEL, AND RESUME MCR COMMAND PROCESSOR .IDENT "01";E;P;T8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;IA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE @; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.O;@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;O?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYM?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N; ;I;S ; VERSION: 01N ; BY: H. LEVU; DATE: 08/28/73B7; MODIFIED 12/30/74 ABOOV WAS MODIFIED INTO THIS MODULEL;O;S;N5; THIS MODULE PROCESSES THE ABORT, CANCEL AND RESUME ; MCR COMMANDS.; .MCALL DIR$,DEVDF$,TCBDF$, DEVDF$ ; DEFINE DCB, UCB, AND SCB OFFSETS TCBDF$ ; DEFINE TCB OFFSETS I .SBTTL LOCAL DATA;I; ERROR TABLES;;7; THIS TABLE CONTAINS ERRORS WHICH MAY BE RECEIVED FROMB+; THE DIRECTIVES ABORT, CANCEL, AND RESUME.H&; THE POSITION IN THE TABLE IS USED TO; INDEX INTO THE ERROR TABLE; ERCOD: .WORD -2. ;7 .WORD -7. ;1 .WORD -8. ;A;I;; THIS ERROR TABLE CONVERTS DIRECTIVE ERRORS INTO CODES FORH); MESSAGES GENERATED BY THE ERROR OVERLAYS;%ERROR: TRAP 11. ; TASK NOT IN SYSTEMF TRAP 13. ; TASK NOT ACTIVE TRAP 15. ; TASK NOT SUSPENDE00TADATADATADATADATADATADATADATADATADOERR1: TRAP 2. ; SYNTAX ERRORA I1DPB: .BLKW 3 ; DPB FOR ABORT, CANCEL, AND RESUMEO;W; DIRECTIVE CODESD;OABO: .BYTE 83.,3. ; ABORTCAN: .BYTE 25.,3. ; CANCELORES: .BYTE 47.,3 ; RESUME  .SBTTL PROGRAM CODE;E;+.; *** - $ABOEP - ABORT MCR COMMAND ENTRY POINT/; *** - $CANEP - CANCEL MCR COMMAND ENTRY POINTV/; *** - $RESEP - RESUME MCR COMMAND ENTRY POINT ; ;O8; THIS ROUTINE PROCESSES THE ABORT, CANCEL, AND RESUME <; MCR COMMANDS. IT SETS UP A DPB WITH THE CORRECT DIRECTIVE; CODE AND ISSUES IT. ;O;-;; ABORT ENTRY POINTO;B%$ABOEP::MOV ABO,-(SP) ; GET ABORT DICV BR COM ;;B; CANCEL ENTRY POINT;&$CANEP::MOV CAN,-(SP) ; GET CANCEL DIC BR COM ;;E; RESUME ENTRY POINT;O&$RESEP::MOV RES,-(SP) ; GET RESUME DIC;A ; COMMON CODE;*&COM: CALL $PRSR ; PARSE OFF TASK NAME" CALL $NNBLK ; GET NEXT NON-BLANK BCC ERR1 ; SYNTAX ERROR" MOV #DPB,R2 ; GET ADDRESS OF DPB MOV (SP)+,(R2)+ ; SET DIC" MOV $MPARS,(R2)+ ; MOVE TASK NAME MOV $MPARS+2,(R2) ; INTO DPBI;E:; CHECK THAT COMMAND CAME FROM TERMINAL WHICH STARTED TASK ; OR FROM A PRIVILEDGED TERMINAL;" MOV $MPARS+4,R0 ; GET TCB ADDRESS( MOV T.UCB(R0),R0 ; GET TASK UCB ADDRESS" MOV $MUCB,R1 ; GET TI UCB ADDRESS. CMP R1,R0 ; TASK STARTED FROM THIS TERMINAL? BEQ 4$ ; YES< BIT #U2.PRV,U.CW2(R1) ; NO, IS THIS A PRIVILEDGED TERMINAL? BNE 4$ ; YES" TRAP 6. ; NO, PRIVILEGED COMMAND 4$: DIR$ #DPB ; ISSUE DIRECTIVE BCS 10$ ; SKIP IF ERRORR RETURN ; RETURN TO DISPATCHER;+"; ERROR DETECTED DECIDE WHAT IT IS;M10$: MOV $DSW,R0 ; GET DSW  CLR R1 ; ZERO ERROR INDEXV(20$: CMP R0,ERCOD(R1) ; IS THIS THE CODE BEQ 30$ ; YESM# TST (R1)+ ; NO, INDEX TO NEXT ONES BR 20$ ; LOOP 30$: JMP ERROR(R1) ; ISSUE ERROR .ENDTBFI8900,10;?<; THIS TABLE CONTAINS ERROR CODES RETURNED BY THE DIRECTIVES;GED TERMINAL? BNE 4$ ; YES" TRAP 6. ; NO, PRIVILEGED COMMAND 4$: DIR$ #DPB ; ISSUE DIRECTIVE BCS 10$ ; SKIP IF ERRORR RETURN ; RETURN TO DISPATCHER;+- .TITLE ATLBAS - ACTIVE TASK LIST MCR ROUTINEM .IDENT "03"; ; ;CA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.EA; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.;;OA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE?; ; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.A;>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; ;E ; VERSION: 03N ; BY: H. LEV ; DATE: 09/06/73 -; MODIFIED: 12/10/74 ADD PMD TASK STATUS FLAGI+; 3/10/75 LOCK SYSTEM LISTS WHILE RUNNINGH; 5/23/75 REFORMAT PRINT OUT"; 6/4/75 CONVERT ATLOV TO ATLBAS;O;N;I0; HJL025 3/7/76 CHANGE PCB, TCB AND TASK HEADER ; JAK028 8/3/76 ADD PRI AND DPRI;M4; THIS MODULE PROCESSED THE MCR ATL AND TAL COMMANDS;S E .IF DF R$$ATL & .MCALL CALL,PCBDF$,DIR$,RETURN,WTSE$S A .SBTTL EQUATED SYMBOLSNEFN1 = 1 ;EVENT FLAG TO USE LUN1 = 1 ;LOGICAL UNIT FOR "TI"SPA = 040 ;BLANKA PCBDF$ ; DEFINE PCB OFFSETS 4 .SBTTL LOCAL DATA ATI: .ASCIZ / TI - / ;EPRI: .ASCIZ / PRI - /DPRI: .ASCIZ / DPRI - /IOC: .ASCIZ / IOC - / ;EFLG: .ASCIZ / EFLG -/ ;PCTR: .ASCIZ / PC -/ ;CPS: .ASCIZ / PS -/ ;REGS: .ASCIZ / REGS 0-6 / ;INONE: .ASCIZ /NONE/ ;STAT: .ASCIZ / STATUS - / ;N;<; STATUS FLAG NAMES. IF F003ZgLAG IS SET IN T.STAT, T.ST2, T.ST3 ; THE FLAG NAME WILL BE PRINTED.;F = ; T.STAT BITS  U2STABLE: .ASCIZ /-EXE/ ; NOT IN EXECUTION (100000)0 .ASCIZ /RDN/ ; I/O RUNDOWN IN PROGRESS (40000)7 .ASCIZ /MSG/ ; TASK STOPPED FOR ABORT MESSAGE (20000)P= .ASCIZ /NRP/ ; TASK MAPPED TO NONRESIDENT PARTITION (10000)G .BYTE 0 ; (4000) .BYTE 0 ; (2000) .BYTE 0 ; (1000), .ASCIZ /OUT/ ; TASK IS OUT OF MEMORY (400)+ .ASCIZ /CKP/ ; TASK IS CHECKPOINTED (200)U0 .ASCIZ /CKR/ ; TASK CHECKPOINT REQUESTED (100) .BYTE 0 ; (40) .BYTE 0 ; (20) .BYTE 0 ; (10) .BYTE 0 ; (4). .BYTE 0 ; (2)T .BYTE 0 ; (1)E ; ; T.ST2 BITS ) .ASCIZ /AST/ ; AST IN PROGRESS (100000)R1 .ASCIZ /DST/ ; AST RECOGNITION DISABLED (40000)B1 .ASCIZ /-CHK/ ; TASK NOT CHECKPOINTABLE (20000)T/ .ASCIZ /CKD/ ; CHECKPOINTING DISABLED (10000)02 .ASCIZ /BFX/ ; TASK BEING FIXED IN MEMORY (4000)/ .ASCIZ /FXD/ ; TASK IS FIXED IN MEMORY (2000)P4 .ASCIZ /TIO/ ; TASK WAITING FOR TEMINAL I/O (1000): .ASCIZ /CAF/ ; CHECKPOINT SPACE ALLOCATION FAILURE (400)+ .ASCIZ /HLT/ ; TASK IS BEING HALTED (200)Y/ .ASCIZ /ABO/ ; TASK IS MARKED FOR ABORT (100): .ASCIZ /STP/ ; TASK STOPPED WITH PRI=0 IN PARTITION (40)) .ASCIZ /STPA/ ;TASK STOPPED IN AST (20)S6 .ASCIZ /SPNA/ ; SAVED TS.SPN ON AST IN PROGRESS (10)# .ASCIZ /SPN/ ; TASK SUSPENDED (4)05 .ASCIZ /WFRA/ ; SAVED TS.WFR ON AST IN PROGRESS (2)/ .ASCIZ /WFR/ ; TASK IS IN A WAITFOR STATE (1) S ; T.ST3 BITS 6 .ASCIZ /ACP/ ; ANCILLIARY CONTROL PROCESSOR (100000)8 .ASCIZ /-PMD/ ; DUMP TASK ON SYNCHRONOUS ABORT (40000), .ASCIZ /REM/ ; REMOVE TASK ON EXIT (20000)+ .ASCIZ /PRV/ ; TASK IS PRIVILEGED (10000)T? .ASCIZ /MCR/ ; TASK REQUESTED AS EXTERNAL MCR FUNCTION (4000)T' .ASCIZ /SLV/ ; TASK IS A SLAVE (2000)E> .ASCIZ /CTL/ ; TASK WAS ACTIVATED BY CONTROLLING TASK (1000)) .ASCIZ /RST/ ; TASK IS RESTRICTED (400)S+ .ASCIZ /NSD/ ; NO SEND DATA ALLOWED (200)I? .ASCIZ /CAL/ ; CHECKPOINT SPACE ALLOCATED IN TASK IMAGE (100)C0 .ASCIZ /ROV/ ; TASK HAS RESIDENT OVERLAYS (40). .ASCIZ /NET/ ;NETWORKS PROTOCOL LEVEL 2 (20) .BYTE 0 ; (10) .BYTE 0 ; (4)0 .BYTE 0 ; (2)V .BYTE 0 ; (1)I .EVEN TSKFLG: .WORD ; TASK LIST FILE* ; 0 - ALL TASKS, 100000 - ACTIVE TASKS S;+9; *** - $ATLEP - ACTIVE TASK LIST MCR COMMAND ENTRY POINTA; ?; THIS ROUTINE FINDS ALL ACTIVE TASKS AND PRINTS OUT DATA ABOUT47; THOSE TASKS INCLUDING PS, PC, R0-R6, AND STATUS FLAGSI(; FOR EACH ACTIVE TASK, IT IS PRINTED ON; DEVICE "TI".;.@; *** - $TALEP - TASK LIST MCR COMMAND ENTRY POINT. THIS COMMAND2; LISTS ALL TASKS IN THE SYSTEM IN THE SAME MANNER ; AS ATL.0;.; OUTPUT FORMAT:>; TNAME TCBADD PNAME PCBADD LLLLLL-HHHHHH PRI - NN. DPRI - NN.; STATUS - [STS...]0F; TI - XXN: IOC - I. EFLG - EEEEEE EEEEEE PS - SSSSSS PC - PPPPPP=; REGS 0-6 000000 111111 222222 333333 444444 555555 666666N;O; WHERE:; TNAME - 1-6 CHAR TASK NAME; TCBADD - TCB ADDRESS; PNAME - PARTITION NAME; PCBADD - PCB ADDRESS$; LLLLLL - BASE ADDRESS OF PARTITION#; HHHHHH - TOP ADDRESS OF PARTITIONH; PRI - NN. IS TASK'S PRIORITY'; DPRI - NN. IS TASK'S DEFAULT PRIORITY0N; [STS] - OPTIONALLY ZERO OR MORE 3 CHARACTER CODES INDICATING THE TASK STATUS; XXN: - TI TERMINAL; I. - I/O COUNT; EEEEEE EEEEEE - EVENT FLAGS ; SSSSSS - PROCESSOR STATUS WORD; CCCCCC - PROGRAM COUNTER; 000000 - 666666 REGISTERS 0-6O; ;-:$ATLEP::MOV #TS.EXE,TSKFLG ; SET TO LIST ONLY ACTIVE TASKS BR ATL ; +$TALEP::CLR TSKFLG ; SET TO LIST ALL TASKS  R&ATL: MOV $MUCB,R0 ; GET TI UCB ADDRESS$ TST U.ATT(R0) ; IS DEVICE ATTACHED? BNE 7$ ; YES, ERRORI" MOV $MBUF,R0 ; GET BUFFER ADDRESS MOV R0,$MDPB+14 ; SET ADDRESS* MOV #IO.ATT,$MDPB+2 ; SET ATTACH FUNCTION CALL $DOIO ; ISSUE ATTACHC BR 10$ ;,7$: TRAP 26. ; LISTING DEVICE NOT AVAILABLE;A>; TERMINAL IS ATTACHED, DPB IS SET UP, NOW START SEARCHING STD;-%10$: CALL $LOCKL ; LOCK SYSTEM LISTSG) MOV $TSKHD,R5 ; GET ADDRESS OF FIRST TCB;3ATLNXT: TST T.TCBL(R5) ; IS THIS THE NULL TASK TCB?R BNE 1$ ; NOB/ J00TADATADATADATADATADATADATADATADATAMP ATLEND ; YES,NULL TASK IS END OF TCB LISTI61$: BIT TSKFLG,T.STAT(R5) ; IS THIS TASK TO BE LISTED? BEQ 5$ ; YES0 MOV T.TCBL(R5),R5 ; NO, GET ADDRESS OF NEXT TCB BR ATLNXT ; LOOP;I; PRINT LINE ONE;S%5$: MOV $MBUF,R0 ; GET BUFFER ADDRESS + MOV T.NAM(R5),R1 ; GET TASK NAME CHARS 1-3I CALL $C5TA ; CONVERT TO ASCIIA- MOV T.NAM+2(R5),R1 ; GET TASK NAME CHARS 4-6S CALL $C5TA ; CONVERT TO ASCIIT MOV R5,R1 ; GET TCB ADDRESS 1 CALL CONSPA ; CONVERT TO OCTAL AND INSERT SPACE1& MOV T.PCB(R5),R4 ; GET ADDRESS OF PCB MOVB #40,(R0) ; SPACE MOVB (R0)+,(R0)+ ; ( MOV P.NAM(R4),R1 ; PRINT PARTITION NAME CALL $C5TA ; MOV P.NAM+2(R4),R1 ;S CALL $C5TA ; MOV R4,R1 ; GET PCB ADDRESSI CALL CONSPA ; CONVERT TO OCTAL F  .IF DF M$$MGE M .IFF  E. MOV P.REL(R4),R1 ; GET PARTITION BASE ADDRESS1 CALL CONSPA ; CONVERT TO OCTAL AND INSERT SPACE 1 MOV P.REL(R4),R1 ; GET BASE ADDRESS OF PARTITION * ADD P.SIZE(R4),R1 ; ADD SIZE TO GET TOP+1 DEC R1 ; GET TOP OF PARTITIONT MOVB #'-,(R0)+ ; PUT IN DASHB% INC R2 ; SET TO PRINT LEADING ZEROSR CALL $CBOMG ; CONVERT TO ASCII T .IFTA , MOV #$MPARS+4,R1 ; SET ADDRESS OF WORK AREA0 MOV P.REL(R4),(R1) ; GET PARTITION BASE ADDRESS MOV #SPA,(R0)+ ; PUT IN BLANK CLR 2(R1) ; ZERO HIGH PART1 CALL CON32W ; CONVERT FROM 32WD BLOCKS TO BYTES) CALL .C2BTO ; CONVERT TO 18 BIT ADDRESS  MOVB #'-,(R0)+ ; PUT IN HYPHENA0 MOV P.REL(R4),(R1) ; GET PARTITION BASE ADDRESS CLR 2(R1) ; ZERO HIGH PART5 ADD P.SIZE(R4),(R1) ; ADD PARTITION SIZE TO GET HIGH ADC 2(R1) ; ADDRESS 1 CALL CON32W ; CONVERT FROM 32WD BLOCKS TO BYTEST' SUB #1,(R1) ; SET LAST ADDRESS IN USER SBC 2(R1) ;A, CALL .C2BTO ; CONVERT FROM BINARY TO OCTAL S .ENDC , MOV #PRI,R1 ;GET "PRI - "R CALL MOVE ; CLR R1 ;( BISB T.PRI(R5),R1 ;GET CURRENT PRIORITY! CLR R2 ;SUPPRESS LEADING ZEROESI! CALL $CBDMG ;CONVERT TO DECIMALN% MOVB #'.,(R0)+ ;INSERT DECIMAL POINTT MOV #DPRI,R1 ;GET "DPRI - " CALL MOVE ;A CLR R1 ;) BISB T.DPRI(R5),R1 ;GET DEFAULT PRIORITYG! CLR R2 ;SUPPRESS LEADING ZEROESO! CALL $CBDMG ;CONVERT TO DECIMAL  MOVB #'.,(R0)+ ;INSERT DECIMALA CALL PRINT ; PRINT THE LINE( MOV $MBUF,R0 ; GET BUFFER ADDRESS AGAIN$ MOV #STAT,R1 ; GET ADDRESS OF TITLE CALL MOVE ; MOVE IT INTO LINER% MOV T.STAT(R5),R1 ; GET STATUS FLAGSR* MOV #STABLE,R2 ; GET STATUS TABLE ADDRESS! MOV #16.,R3 ; SET COUNT OF BITS+ CALL STATUS ; PRINT OUT STATUS FLAG NAMES#' MOV T.ST2(R5),R1 ; GET STATUS WORD TWOC( MOV #16.,R3 ; SET NUMBER OF BITS IN IT+ CALL STATUS ; PRINT OUT STATUS FLAG NAMESO) MOV T.ST3(R5),R1 ; GET STATUS WORD THREE ( MOV #16.,R3 ; SET NUMBER OF BITS IN IT CALL STATUS ; DISPLAY IT+ CALL PRINT ; PRINT OUT THE STATUS MESSAGE ;E; PRINT LINE TWO;C, BIT #TS.OUT,T.STAT(R5) ; IS HEADER IN CORE?* BNE 15$ ; NO, THEN CAN'T PRINT REGISTERS) MOV P.HDR(R4),R4 ; GET ADDRESS OF HEADERE% MOV H.CSP(R4),R1 ; GET STACK POINTER  MOV R1,-(SP) ; SAVE ITM T .IF NDF M$$MGE  T0 ADD #10,(SP) ; CORRECT IT FOR REGS STORED ON IT T .ENDC T. MOV H.GARD(R4),R4 ; GET ADDRESS OF GUARD WORD R .IF DF M$$MGE  .IFT V2 SUB #20,R4 ; GET ADDRESS OF CURRENT PS IN HEADER I .IFFT C* SUB #10,R4 ; GET ADDRESS OF R3 IN HEADER& MOV (R1)+,-(R4) ; MOVE [R4] TO HEADER& MOV (R1)+,-(R4) ; MOVE [R5] TO HEADER$ MOV (R1)+,-(R4) ; MOVE PC TO HEADER$ MOV (R1)+,-(R4) ; MOVE PS TO HEADER  .ENDC R MOV R5,-(SP) ; SAVE TCB ADDRESS&15$: MOV $MBUF,R0 ; GET BUFFER ADDRESS MOV #TI,R1 ; MOVE IN "TI - " CALL MOVE ;D& MOV T.UCB(R5),R3 ; GET TI UCB ADDRESS BNE 17$ ; GOT IT+ MOV #NONE,R1 ; NONE ASSIGNED, PRINT "NONE"V CALL MOVE ;; BR 18$ ;!17$: CALL $FMTDV ; PRINT TI NAMET#18$: MOV #IOC,R1 ; PRINT " IOC - "3 CALL MOVE ;V CLR R1 ; GET I/O COUNT BISB T.IOC(R5),R1 ;) CLR R2 ; SET TO SUPPRESS LAEDING ZEROES)" CALL $CBDMG ; CONVERT TO DECIMAL& MOVB #'.,(R0)+ ; PUT IN DECIMAL POINT MOV #EFLG,R1 ; PRINT " EFLG - " CALL MOVE ;R# MOV T.EFLG(R5),R1 ; GET FLAGS 1-16; CALL CONSPA ; CONVER003ZgT TO OCTAL& MOV T.EFLG+2(R5),R1 ; GET FLAGS 17-321 BIT #TS.OUT,T.STAT(R5) ; IS TASK HEADER IN CORE?P% BNE 25$ ; NO, CAN'T PRINT REGISTERS; CALL CONSPA ; CONVERT TO OCTAL MOV #PS,R1 ; PRINT " PS - " CALL MOVE ; % MOV (R4)+,R1 ; GET REGISTER CONTENTSS CALL CONSPA ; CONVERT TO OCTAL MOV #PCTR,R1 ; PRINT " PC - " CALL MOVE ;V MOV (R4)+,R1 ; GET PC VALUE CALL CONSPA ; CONVERT TO OCTAL CALL PRINT ; PRINT IT;L; PRINT LINE 3;E" MOV $MBUF,R0 ; SET BUFFER POINTER" MOV #REGS,R1 ; PRINT " REGS 0-6 " CALL MOVE ;G% MOV #6.,R5 ; SET COUNT FOR REGS 0-5 ( ADD #14,R4 ; POINT TO ONE BEYOND REG 0'20$: MOV -(R4),R1 ; GET CONTENTS OF REG ! CALL CONSPA ; CONVERT AND STOREI DEC R5 ; DONE ?  BNE 20$ ; NO, LOOP$ MOV (SP)+,R5 ; GET TCB ADDRESS BACK MOV (SP)+,R1 ; GET SP$25$: CALL CONSPA ; CONVERT TO OCTAL CALL PRINT ; PRINT IT OUT 030$: MOV T.TCBL(R5),R5 ; GET ADDRESS OF NEXT TCB JMP ATLNXT ; TRY IT;R8; ALL ACTIVE TASKS HAVE BEEN DISPLAYED, DETTACH TERMINAL;S*ATLEND: CALL $UNLKL ; UNLOCK SYSTEM LISTS+ MOV #IO.DET,$MDPB+2 ; SET DETTACH FUNCTION4 CALL $DOIO ; DETTACHATLEXT: RETURN ; ) .SBTTL SUBROUTINES ;+7; *** - CONSPA - INSERT A BLANK AND CONVERT R1 TO OCTAL;E; INPUT:7; R0 - ADDRESS OF PLACE IN BUFFER TO PUT NEXT CHARACTERR; R1 - WORD TO BE CONVERTED ;O ; OUTPUTS:/; R0 - UPDATED TO NEXT AVAILABLE WORD IN BUFFER(;-0CONSPA: INC R2 ; SET TO GENERATE LEADING ZEROES MOVB #SPA,(R0)+ ; PUT IN SPACEE* CALL $CBOMG ; CONVERT TO OCTAL MAGNITUDE RETURN ; EXIT;+T; *** - STATUS - CONVERT ONE STATUS FLAGS TO 3 CHAR FLAG NAMES AND A PRECEDING BLANKB; THIS SUBROUTINE TESTS EACH STATUS FLAG AND IF IT IS ON, OUTPUTS5; A BLANK FOLLOWED BY THE THREE CHARACTER FLAG NAME.D;S; INPUT:/; R0 - ADDRESS OF NEXT AVAILABLE BYTE IN BUFFERB*; R1 - STATUS FLAGS LEFT JUSTIFIED IN WORD6; R2 - ADDRESS OF NEXT ENTRY IN STATUS FLAG NAME TABLEC; ENTRIES CONTAIN ANY NUMBER OF CHARACTERS AND END IN A ZERO BYTE.C(; NULL ENTRIES CONTAIN ONLY A ZERO BYTE#; R3 - COUNT OF STATUS BITS IN WORDT;S ; OUTPUT:O/; R0 - UPDATED TO NEXT AVAILABLE BYTE IN BUFFERI1; R2 - ADDRESS OF NEXT ENTRY IN STATUS NAME TABLE ; R3 - ZEROO;O;-STATUS: MOV R4,-(SP) ; SAVE R410$: TST R1 ; IS HIGH BIT SET?  BPL 20$ ; NO& MOVB #SPA,(R0)+ ; YES, MOVE IN BLANK..20$: MOVB (R2)+,R4 ; GET NEXT CHAR OF BIT NAME BEQ 30$ ; END OF STRINGI TST R1 ; IS FLAG SET BPL 20$ ; NO" MOVB R4,(R0)+ ; YES, MOVE IN CHAR BR 20$ ; LOOP FOR NEXT CHARR 30$: ASL R1 ; SHIFT UP NEXT BIT DEC R3 ; ALL FLAGS TESTED? BNE 10$ ; NO MOV (SP)+,R4 ; RESTORE R4 RETURN ; EXIT E;+>; *** - PRINT - COMPUTE LENGTH OF MESSAGE AND WRITE IT TO "TI"B; IF AN ERROR IS DETECTED THIS ROUTINE EXITS TO THE ERROR OVERLAY ; INPUTS:L%; R0 - ADDRESS OF NEXT BYTE IN BUFFERE,; $MDPB+14 - ADDRESS OF FIRST BYTE IN BUFFER; ; OUTPUTS:; NONE;-.PRINT: SUB $MDPB+14,R0 ; COMPUTE BUFFER LENGTH& MOV R0,$MDPB+16 ; SET CHARACTER COUNT7 MOV #IO.WVB,$MDPB+2 ; SET WRITE LOGICAL BLOCK FUNCTION  CALLR $DOIO ; ISSUE WRITES S;+2; *** - MOVE - MOVE A STRING OF ASCII CHARACTERS; ; INPUT:; R0 - BUFFER POINTERO; R1 - ADDRESS OF INPUT STRING;T ; OUTPUT: ; R0 - UPDATED; R1 - END OF STRING;T;-!MOVE: TSTB (R1) ; END OF STRING?0 BEQ 10$ ; YEST+ MOVB (R1)+,(R0)+ ; NO, MOVE NEXT CHARACTERS BR MOVE ; LOOP10$: RETURN ;  E -;+/; *** - CON32W - CONVERT 32WD BLOCKS TO BYTESV; INPUT:.; R1 - ADDRESS OF TWO WORD AREA FOR CONVERSION ; OUTPUT:L; R1 - ADDRESS OF 18 BIT NUMBERO;-%CON32W: MOV #6.,R2 ; SET SHIFT COUNT 10$: CLC ; CLEAR CARRY BIT! ROL (R1) ; SHIFT BIT INTO CARRYO& ROL 2(R1) ; AND CARRY INTO HIGH PART DEC R2 ; DONE? BGT 10$ ; NO, LOOP RETURN ; YES, DONEO .ENDC 1 .ENDD OF STRING?0 BEQ 10$ ; YEST+ MOVB (R1)+,(R0)+ ; NO, MOVE NEXT CHARACTERS BR MOVE ; LOOP10$: RETURN ;  E -;+/; *** - CON32W - CONVERT 32WD BLOCKS TO BYTESV; INPUT:.; R1 - ADDRESS OF TWO WORD AREA FOR CONVERSION ; OUTPUT:L; R1 - ADDRESS00TADATADATADATADATADATADATADATADATA' .TITLE BRKBAS - BREAKPOINT MCR COMMAND2 .IDENT "01";N;A; COPYRIGHT 1976, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.R;2; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.P;R>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I ; BY: H. LEVL; DATE: 12/13/74E ; VERSION: 01O;U2; MODIFIED FOR BASIC MCR BY: JO ANN KASSON 8/3/76;E; 7; THIS MODULE PROCESSES THE MCR BREAKPOINT TRAP COMMANDA;L@; IT IS USED TO PASS CONTROL TO XDT THE EXECUTIVE DEBUGGING TOOL?; IT WILL EXECUTE A BPT INSTRUCTION IF XDT HAS BEEN LINKED INTOT"; THE EXEC, OTHERWISE IT WILL EXIT;I .IF DF X$$DBT .MCALL CALL,RETURNR O B0$BRKEP::CALL $SWSTK,20$ ; SWITCH TO SYSTEM STATE, CMP #$TRACE,@#14 ; IS XDT LINKED INTO EXEC? BEQ 10$ ; NO/ BPT ; YES, EXECUTE BREAKPOINT TO WAKE UP XDT0$10$: RETURN ; RETURN TO USER STATE%20$: JMP $MCR ; AND GO TO DISPATCHERD .ENDC .END BREAKPOINT TRAP COMMANDA;L@; IT IS USED TO PASS CONTROL TO XDT THE EXECUTIVE DEBUGGING TOOL?; IT WILL EXECUTE A BPT INSTRUCTION IF XDT HAS BEEN LINKED INTOT"; THE EXEC, OTHERWISE IT WILL EXIT;I .IF DF X$$DBT .MCALL CALL,RETURNR O B0$BRKEP::CALL $SWSTK,20$ ; SWITCH TO SYSTEM STATE, CMP #$TRACE,@#14 ; IS XDT LINKED INTO EXEC? BEQ 10$ ; NO/ BPT ; YES, EXECUTE BREAKPOINT TO WAKE UP $ .TITLE ERRBAS-ERROR MESSAGE ROUTINE .IDENT /01/; 8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.; A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEU@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.W;,@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;S?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYM?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;E ; VERSION: 01 ; BY: H. LEVI; DATE: 08/23/73M2; MODIFIED: 12/30/74 EDITED FOR USE WITH BASIC MCR;T;T0; THIS MODULE PROCESSES BASIC MCR ERROR MESSAGES;H .MCALL CALL,DIR$,RETURN,WTSE$SC  .SBTTL ERROR PROCESSING;+.; *** - $ERREP-ERROR MESSAGE OVERLAY PROCESSOR;D4; THIS ROUTINE IS CALLED VIA THE TRAP INSTRUCTION TO%; ISSUE ERROR MESSAGES FOR BASIC MCR.U5; THE TRAP CODE IS USED TO INDEX INTO THE ERROR TABLE;F;S;- E .IF DF R$$ERM H .IFTF P%$ERREP::MOV (SP)+,R0 ; GET ERROR CODE $ CMP (SP)+,(SP)+ ; POP OFF PC AND PS4 MOV #IO.WVB,$MDPB+2 ; SET FUNCTION TO WRITE VIRTUAL MOV R0,-(SP) ; SAVE ERROR CODEI$ ASR (SP) ; CONVERT TO ERROR NUMBER D .IFTU W SUB #2,R0 ; CORRECT FOR OFFSET' ASL R0 ; CONVERT TO DOUBLE WORD INDEXL/10$: MOV $ERRTB(R0),R4 ; GET ADDRESS OF MESSAGEE2 MOV $ERRTB+2(R0),R5 ; GET MESSAGE LENGTH IN WORDS M .IFTF " MOV $MBUF,R0 ; SET BUFFER ADDRESS, MOV R0,$MDPB+14 ; SET BUFFER ADDRESS IN DPB# MOVB #15,(R0)+ ; PUT IN LEADING CR0 MOV $MCMD,R1 ; GET COMMAND NAME/ CALL $C5TA ; CONVERT NAME FROM RAD50 TO ASCIIT MOVB #' ,(R0)+ ; PUT IN SPACE MOVB #'-,(R0)+ ; PUT IN DASHA MOVB #'-,(R0)+ ; DASHO MOVB #' ,(R0)+ ; PUT IN SPACE MOV (SP)+,R1 ; GET ERROR CODE) CLR R2 ; SET TO SUPPRESS LEADING ZEROESM" CALL $CBDMG ; CONVERT TO DECIMAL G .IFTV R MOVB #' ,003Zg(R0)+ ; PUT IN " - " MOVB #'-,(R0)+ ;F MOVB #' ,(R0)+ ;R$20$: MOV (R4)+,R1 ; GET 3 MORE CHARS* CALL $C5TA ; CONVERT FROM RAD50 TO ASCII DEC R5 ; DONE? BNE 20$ ; NO, LOOP E .IFTF A-30$: SUB $MDPB+14,R0 ; COMPUTE LENGTH OF LINES" MOV R0,$MDPB+16 ; STORE IT IN DPB CALL $DOIO ; PRINT ITN JMP $MCR ; GO TO DISPATCHERO M .ENDC .END ; IN SPACE MOV (SP)+,R1 ; GET ERROR CODE) CLR R2 ; SET TO SUPPRESS LEADING ZEROESM" CALL $CBDMG ; CONVERT TO DECIMAL G .IFTV R MOVB #' , .TITLE ERRMSG-ERROR MESSAGE .IDENT /02/; ;,8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;;A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEP@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.N;A@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYM?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N ; VERSION: 02O ; BY: H. LEV ; DATE: 08/23/73T*; MODIFIED 12/30/74 MODIFIED FOR BASIC MCR;S;P ; LOCAL MACROO; :; THIS MACRO GENERATES ERROR MESSAGES IN THE PROPER FORMAT; FOR ERROV TO PROCESS.A; ,; NUM - IS NUMBER TO REFER TO ERROR MESSAGES; MSG - IS THE MESSAGE TEXTD;H N .IF DF R$$ERM A .MACRO .ERR NUM,MSG .PSECT .ERRTB .WORD ERR'NUM .WORD ERR'NUM'L/2 .PSECT .ERRSOERR'NUM:.RAD50 %'MSG'%ERR'NUM'L = .-ERR'NUME .ENDM E;+,; *** - $ERRTB - ERROR MESSAGE ADDRESS TABLE5; EACH ERROR MESSAGE HAS A TWO WORD ENTRY OF THE FORMD#; WORD1 - ADDRESS OF RAD50 MESSAGE%; WORD2 - LENGTH OF MESSAGE IN WORDSN,; *** - $ERRLN - IS LENGTH OF TABLE IN BYTES;- .LIST MEB .PSECT .ERRTB!$ERRTB::.ERR 1,S .ERR 2, .ERR 3,F .ERR 4,R .ERR 5, .ERR 6,! .ERR 7,G .ERR 8, .ERR 9,! .ERR 10,E .ERR 11,H .ERR 12, .ERR 13, .ERR 14,T .ERR 15,  .ERR 16," .ERR 17,) .ERR 18,S) .ERR 19,S' .ERR 20,  .ERR 21, .ERR 22, .ERR 23, .ERR 24, .ERR 25,I' .ERR 26, " .ERR 27, .PSECT .ERRTB$ERRLN == .-$ERRTB < .ENDC A .ENDT .ERR 15,  .ERR 16," .ERR 17,) .ERR 18,S) .ERR 19,S' .ERR 20,  .ERR 21" .TITLE FMTDV - FORMAT DEVICE NAME .IDENT "01";;RA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.7;EA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEN@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.T;Y@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION: 01 ; BY: H. LEVA; DATE: 3/10/75 T .MCALL RETURN D;+0; *** - $FMTDV - PUT DEVICE NAME AND UNIT BUFFER;S; INPUT:;T ; R0 - ADDRESS OF BYTE IN BUFFER; R3 - ADDRESS OF UCBD;T; OUTPUT: R0 - UPDATED ; R1,R2,R3 ARE USED AND MODIFIED;E00TADATADATADATADATADATADATADATADATA;-*$FMTDV::MOV U.DCB(R3),R2 ; GET DCB ADDRESS% MOVB D.NAM(R2),(R0)+ ; PUT IN DEVICE " MOVB D.NAM+1(R2),(R0)+ ; MNEMONIC# MOV R0,-(SP) ; SAVE BUFFER POINTERL MOV R3,R0 ; GET UCB ADDRESS 0 SUB D.UCB(R2),R0 ; COMPUTE RELATIVE UCB ADDRESS# MOV D.UCBL(R2),R1 ; GET UCB LENGTHE* CALL $DIV ; COMPUTE RELATIVE UNIT NUMBER1 ADD D.UNIT(R2),R0 ; COMPUTE ABSOLUTE UNIT NUMBER ! BIC #177400,R0 ; CLEAR HIGH BYTEI MOV R0,R1 ; COPY ITS& MOV (SP)+,R0 ; RESTORE BUFFER POINTER) CLR R2 ; SET TO SUPPRESS LEADING ZEROEST CALL $CBOMG ; CONVERT TO OCTAL2 MOVB #':,(R0)+ ; PUT IN COLON (DEVICE TERMINATOR) RETURN ; RETURN .ENDC# MOV R0,-(SP) ; SAVE BUFFER POINTERL MOV R3,R0 ; GET UCB ADDRESS 0 SUB D.UCB(R2),R0 ; COMPUTE RELATIVE UCB ADDRESS# MOV D.UCBL(R2),R1 ; GET UCB LENGTHE* CALL $DIV ; COMPUTE RELATIVE UNIT NUMBER1 ADD D.UNIT(R2),R0 ; COMPUTE ABSOLUTE UNIT NUMBER ! BIC #177400,R0 ; CLEAR HIGH BYTEI MOV R0,R1 ; COPY ITS& MOV (SP)+,R0 ; RESTORE BUFFER POINTER) CLR R2 ; SET TO SUPPRESS LEADI .TITLE $FDUCB - FIND UCB .IDENT "02";;V;';RA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;SA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE;@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.+; @; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYC?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E N ; VERSION: 02O ; BY: H. LEV ; DATE: 11/15/73T(; MODIFIED: 4/28/75 FOR USE BY BASIC MCR8; 3/10/75 SWITCH TO SYSTEM STATE FOR DEVICE LIST SEARCH; S;+-; *** - $FDUCB - FIND UCB FOR PHYSICAL DEVICE;H6; THIS SUBROUTINE PARSES THE DEVICE SPECIFIER FROM THEA; COMMAND STRING AND SEARCHES FOR THE DEVICE IN THE DEVICE TABLEST;; INPUT:; R0 - BUFFER ADDRESSE'; R3 - PARAMETER AREA ADDRESS - 2 WORDSS;O ; OUTPUT:T+; CARRY SET - UCB NOT FOUND OR SYNTAX ERRORS; R3 = 0 - SYNTAX ERROR$; R3 <>0 - COULDN'T FIND LCB OR UCB; CARRY CLEAR - UCB FOUNDI; R0 - UPDATEDS; R1 - ADDRESS OF UCB; R2 - ADDRESS OF DCB; R3 - PARM AREA ADDRESS"; (R3) - DEVICE MNEMONIC IN ASCII ; 2(R3) - UNIT NUMBER IN BINARY;O;-#$FDUCB:: MOVB (R0)+,(R3) ; GET UNITE MOVB (R0)+,1(R3) ; MNEMONIC CALL $COTB ; GET UNIT NUMBER CMP R1,#256. ; IS IT VALID? BHIS 55$ ; NO, ERROR MOV R1,2(R3) ; AND STORE IT$ CMPB R2,#': ; COLON MUST FOLLOW IT BNE 55$ ; ERROR, IT DOESN'TR; ; SCAN UCBS FOR DEVICE; ) CALL $SWSTK,60$ ; SWITCH TO SYSTEM STATE , MOV $DEVHD,R2 ; GET ADDRESS OF DEVICE TABLE.12$: CMP (R3),D.NAM(R2) ; IS THIS THE DEVICE ? BEQ 20$ ; YES3-15$: MOV D.LNK(R2),R2 ; NO, POINT TO NEXT DCBU BNE 12$ ; GOT ONE-! BEQ 50$ ; END OF DEVICES, ERRORI#20$: MOV 2(R3),R5 ; GET UNIT NUMBERL* CMPB R5,D.UNIT(R2) ; IS UNIT ON THIS DCB? BLO 15$ ; NO CMPB R5,D.UNIT+1(R2) ; MAYBE( BHI 15$ ; NO!T+ MOVB D.UNIT(R2),R4 ; GET FIRST UNIT NUMBER5) MOV D.UCB(R2),R1 ; GET FIRST UCB ADDRESSO* SUB R4,R5 ; COMPUTE RELATIVE UNIT NUMBER BEQ 45$ ; FOUND IT.30$: ADD D.UCBL(R2),R1 ; NO, POINT TO NEXT UCB DEC R5 ; FOUND IT YET? BNE 30$ ; NO, LOOP45$: MOV R1,4(SP) ; SET USER R1O MOV R2,6(SP) ; SET USER R2$ RETURN ; RETURN TO USER STATE!50$: MOV @$HEADR,R3 ; GET USER SP ' INCB 6(R3) ; SET CARRY BIT IN USER PSS55$: CLR R3 ; SEC ; SET CARRY60$: RETURN ;( .ENDAYBE( BHI 15$ ; NO!T+ MOVB D.UNIT(R2),R4 ; GET FIRST UNIT NUMBER5) MOV D.UCB(R2),R1 ; GET FIRST UCB ADDRESSO* SUB R4,R5 ; COMPUTE RELATIVE UNIT NUMBER BEQ 45$ ; FOUND IT.30$: ADD D.UCBL(R2),R1 ; NO, POINT TO NEXT UCB DEC R5 ; FOUND IT YET? BNE 30$ ; NO, LOOP45$: MOV R1,4(SP) ; SET USER R1O MOV R2,6(SP) ; SET USER R2$ RETURN ; RETURN TO USER STATE!50$: MOV @003Zg, .TITLE GNBLK - GET NEXT NON-BLANK CHARACTER .IDENT "01";S;5A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.IA; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.U;RA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE @; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.R;$@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYC?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION: 01 ; BY: H.LEV; DATE: 1/25/74;T=; THIS SUBROUTINE GETS THE NEXT NON-BLANK CHARACTER AND TESTSC; FOR END OF LINES;  .MCALL RETURN;Y; EQUATES SYMBOLSD;ICR = 15 ; CARRIAGE RETURNESC = 33 ; ESCAPESPA = 40 ; SPACEE T;+H; *** - $GNBLK - GET NEXT CHARACTER FROM BUFFER AND FIND NEXT NON-BLANKD; *** - $NNBLK - STARTING WITH CHARACTER IN R2, FIND NEXT NON-BLANK7; THIS SUBROUTINE GETS THE NEXT NON-BLANK CHARACTER ANDU.; TESTS IT FOR BEING AN END OF LINE CHARACTER.;S; INPUT:; R0 - BUFFER POINTER15; R2 - $NNBLK ONLY - THE FIRST CHARACTER TO BE TESTED ;R ; OUTPUT:E3; R0 - UPDATED TO POINT TO NEXT CHARACTER IN BUFFER; R2 - FIRST NON-BLANK FOUND$; CARRY CLEAR - NO END OF LINE FOUND5; CARRY SET - END OF LINE (CR, ESC) FOUND, ITS IN R2.E;C;-*$GNBLK::MOVB (R0)+,R2 ; GET NEXT CHARACTER"$NNBLK::CLR R1 ; ZERO BLANK COUNT 5$: CMPB R2,#SPA ; IS IT BLANK? BNE 10$ ; NO INC R1 ; YES, SET BLANK FOUND # MOVB (R0)+,R2 ; GET NEXT CHARACTERL BR 5$ ; LOOP UNTIL NON-BLANK010$: CMPB R2,#CR ; IS IT CARRIAGE RETURN (EOL)? BEQ 20$ ; YESE( CMPB R2,#ESC ; NO, IS IT ESCAPE (EOL)? BEQ 20$ ; YESH TST R2 ; ZERO BYTE?2 BEQ 20$ ; YESK CLC ; NO, SET NOT EOL FLAGO BR 30$ ;!20$: SEC ; SET END OF LINE FLAGC30$: RETURN ;2 .END;-*$GNBLK::MOVB (R0)+,R2 ; GET NEXT CHARACTER"$NNBLK::CLR R1 ; ZERO BLANK COUNT 5$: CMPB R2,#SPA ; IS IT BLANK? BNE 10$ ; NO INC R1 ; YES, SET BLANK FOUND # MOVB (R0)+,R2 ; GET NEXT CHARACTERL BR 5$ ; LOOP UNTIL NON-BLANK010$: CMPB R2,#CR ; IS IT CARRIAGE RETURN (EOL)? BEQ 20$ ; YESE( CMPB R2,#ESC ; NO, IS IT ESCAPE (EOL)? BEQ 20$ ; YESH TST R2 ; ZERO BYTE?2 BEQ 20$ ; YESK CLC ; NO, SET NOT EOL FLAGO BR 30$ ;!20$: SEC ; SET END+ .TITLE GETNUM - CONVERT A NUMBER TO BINARYG .IDENT "01";R; ; ;T8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.O; A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEA@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.N;S@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;N?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYC?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N ; VERSION: 01S; BY: H. LEV; DATE: 11/15/73A C .MCALL CALL H C I;+4; *** - $GTNUM - CONVERT AN ASCII NUMBER TO BINARY..; IF NUMBER ENDS WITH DECIMAL POINT INTERPRET0; AS A DECIMAL NUMBER. IF NOT, INTERPRET AS AN; OCTAL NUMBERT;H; INPUT:; R0 - BUFFER ADDRESSD;T ; OUTPUT:E; R0 - UPDATED BUFFER POINTER ; R1 - CONVERT NUMBER IN BINARY 4; R2 - LAST CHAR SCANNED (NOT DECIMAL POINT IF FOUND; BUT CHAR AFTER IT).; ;-*$GTNUM::MOV R0,-(SP) ; SAVE BUFFER POINTER( CALL $CDTB ; CONVERT DECIMAL TO BINARY& CMPB R2,#'. ; END IN DECIMAL POINT ? BNE 10$ ; NO% MOVB (R0)+,R2 ; YES, POINT BEYOND ITO BR 20$ ;*10$: MOV (SP),R0 ; RETIEVE BUFFER POINTER CALL $COTB ; CONVERT TO OCTAL,$20$: TST (SP)+ ; POP BUFFER ADD00 DATADATADATADATADATADATADATARESS RETURN: .END- BUFFER ADDRESSD;T ; OUTPUT:E; R0 - UPDATED BUFFER POINTER ; R1 - CONVERT NUMBER IN BINARY 4; R2 - LAST CHAR SCANNED (NOT DECIMAL POINT IF FOUND; BUT CHAR AFTER IT).; ;-*$GTNUM::MOV R0,-(SP) ; SAVE BUFFER POINTER( CALL $CDTB ; CONVERT DECIMAL TO BINARY& CMPB R2,#'. ; END IN DECIMAL POINT ? BNE 10$ ; NO% MOVB (R0)+,R2 ; YES, POINT BEYOND ITO BR 20$ ;*10$: MOV (SP),R0 ; RETIEVE BUFFER POINTER CALL $COTB ; CONVERT TO OCTAL,$20$: TST (SP)+ ; POP BUFFER ADD$ .TITLE KEYWD - GET AND TEST KEYWORD .IDENT "01";A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.E;TA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE @; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.C; @; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION: 01 ; BY: H. LEVA; DATE: 09/19/73Y;M .MCALL RETURN;H; EQUATED SYMBOLSC;CCR = 015 ; CARRIAGE RETURN SPA = 040 ; SPACE ;+K; *** - .KEYWD TEST KEYWORD - BLANKS INGORED BETWEEN KEYWORD + EQUAL SIGNSD;M ; INPUTS:E; R0-FIRST CHAR IN BUFFERI+; R1-FIRST CHAR OF KEYWORD YOUR LOOKING FORN; STRING ENDS WITH ZERO;P ; OUTPUTS:8; CARRY CLEAR & OVERFLOW CLEAR - GOOD KEYWORD FOUND WITH; EQUALS AFTER IT.O9; CARRY CLEAR & OVERFLOW SET - GOOD KEYWORD BUT NO EQUALS<; R0 - POINTS TO NEXT CHAR AFTER KEYWORD AND EQUALS IF FOUND/; R2 - LAST CHARACTER SCANNED (EQUALS IF FOUND)5$; CARRY SET - BAD KEYWORD - NO MATCH2; R0 - POINTS TO START OF INPUT FIELD ( NO CHANGE);O; ;-*.KEYWD::MOV R0,-(SP) ; SAVE BUFFER POINTER)10$: MOVB (R0)+,R2 ; GET CHAR FROM BUFFER  CMPB R2,#SPA ; BLANK ? BEQ 10$ ; YES, SKIP IT) CMPB R2,(R1)+ ; DO THE CHARACTERS MATCH?W BNE 50$ ; NO, WRONG KEYWORDH TSTB (R1) ; END OF KEYWORD?  BNE 10$ ; NO, LOOP'20$: MOVB (R0)+,R2 ; GET NEXT CHARACTERT CMPB R2,#'= ; EQUALS FOUND?D BEQ 40$ ; YES' CMPB R2,#CR ; NO, HOW ABOUT CR (EOL)?F BEQ 30$ ; YESE( CMPB R2,#33 ; NO, HOW ABOUT ESC (EOL)? BEQ 30$ ;N CMPB R2,#SPA ; SPACE ? BEQ 20$ ; YES, LOOP030$: TST (SP)+ ; POP STACK( SEV ; SET GOOD KEYWORD, BUT NO EQUALS BR 60$ ;(40$: TST (SP)+ ; POP STACK GOOD KEYWORD BR 60$ ;(50$: MOV (SP)+,R0 ; RESET BUFFER POINTER SEC ; CLV ;60$: RETURN ;N .ENDYWORD?  BNE 10$ ; NO, LOOP'20$: MOVB (R0)+,R2 ; GET NEXT CHARACTERT CMPB R2,#'= ; EQUALS FOUND?D BEQ 40$ ; YES' CMPB R2,#CR ; NO, HOW ABOUT CR (EOL)?F BEQ 30$ ; YESE( CMPB R2,#33 ; NO, HOW ABOUT ESC (EOL)? BEQ 30$ ;N CMPB R2,#SPA ; SPACE ? BEQ 20$ ; YES, LOOP030$: TST (SP)+ ; POP STACK( SEV ; .TITLE LKLSTR .IDENT /01/ ; A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.M;(A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEN@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. ;E@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION 01; ; D. N. CUTLER 28-FEB-75;UD; LOCK/UNLOCK ROUTINES TO PROVIDE SYNCHRONIZED ACCESS TO SYSTEM DATA; BASES.; ;+'; **-$LOCKL-LOCK SYSTEM DATA BASE LISTSE; H; THIS ROUTINE IS CALLED BY PRIVILEGED TASKS TO SYNCHRONIZE THEIR ACCESSI; TO SYSTEM DATA BASES. A SWITCH TO SYSTEM STATE IS EXECUTED AND THE LOCKMH; WORD $LSTLK IS TESTED. I003ZgF ANOTHER TASK CURRENTLY OWNS THE LOCK, THEN AJ; WAITFOR SIGNIFICANT EVENT IS EXECUTED. AT RESUMPTION OF THE CALLING TASKC; THE TEST IS REPEATED. ELSE THE CALLING TASK IS GRANTED OWNERSHIP.E;5 ; INPUTS:K;L; NONE.N;T ; OUTPUTS:;R7; $LSTLK IS SET TO THE TCB ADDRESS OF THE CALLING TASK.K;- S .ENABL LSBS#10$: BCS 30$ ;IF CS ACCESS GRANTEDD/$LOCKL::CALL $SWSTK,10$ ;SWITCH TO SYSTEM STATE3 TST $LSTLK ;LOCK CURRENTLY OWNED BY ANOTHER TASK?X BEQ 20$ ;IF EQ NO* CMP $TKTCB,$LSTLK ;OWNED BY CURRENT TASK? BEQ 20$ ;IF EQ YES) CALLR $TKWSE ;WAITFOR SIGNIFICANT EVENTU120$: MOV $TKTCB,$LSTLK ;SET CURRENT TASK AS OWNERI- MOV @$HEADR,R0 ;RETRIEVE SAVED STACK POINTERN2 INC 6(R0) ;SET CARRY CONDITION CODE IN RETURN PS30$: RETURN ;I .DSABL LSBT A;+); **-$UNLKL-UNLOCK SYSTEM DATA BASE LISTSS;G; THIS ROUTINE IS CALLED BY PRIVILEGED TASKS TO RELINQUISH OWNERSHIP OFS; SYSTEM DATA BASES.; ; INPUTS:E;Y; NONE. ;T ; OUTPUTS:;Q@; IF THE CALLING TASK IS NOT THE CURRENT OWNER, THEN A RETURN ISA; EXECUTED. ELSE OWNERSHIP IS RELINQUISHED AND A CHECK IS MADE TOMA; SEE IF ANY TASK IS WAITING FOR A SIGNIFICANT EVENT. IF ANY TASKIC; IS WAITING, THEN A SIGNIFICANT EVENT IS DECLARED. A RETURN TO THET; CALLING TASK IS EXECUTED.S;- T/$UNLKL::CALL $SWSTK,10$ ;SWITCH TO SYSTEM STATET' CMP $TKTCB,$LSTLK ;CURRENT TASK OWNER?L BNE 10$ ;IF NE NOI" CLR $LSTLK ;RELINQUISH OWNERSHIP7 TST $SIGFL ;ANY TASK WAITING FOR A SIGNIFICANT EVENT?F BEQ 10$ ;IF EQ NON* CALL $DRDSE ;DECLARE A SIGNIFICANT EVENT10$: RETURN ;R P .ENDINQUISHED AND A CHECK IS MADE TOMA; SEE IF ANY TASK IS WAITING FOR A SIGNIFICANT EVENT. IF ANY TASKIC; IS WAITING, THEN A SIGNIFICANT EVENT IS DECLARED. A RETURN TO THET; CALLING TASK IS EXECUTED.S;- T/$UNLKL::CALL $SWSTK,10$ ;SWITCH TO SYSTEM STATET' CMP $TKTCB,$LSTLK ;CURRENT TASK OWNER?L BNE 10$ ;IF NE NOI" CLR $LSTLK ;RELINQUISH OWNERSHIP7 TST $SIGFL ;ANY TASK WAITING FOR A SIGNIFICANT EVENT?F BEQ 10$ ;IF EQ NON* CALL $DRDSE% .TITLE MCRBAS-MCR DISPATCHER ROUTINET .IDENT /3.1/.;Q8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;F; COPYRIGHT (C) 1976; COPYRIGHT (C) 1980/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.E;N>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; VERSION: 3.1 ; BY: H. LEV ; DATE: 08/23/73 9; MODIFIED: 12/31/74 MODIFIED MCROV TO USE WITH BASIC MCRS;T; JAK028 8/3/76O;DC; JRK122 31-DEC-79 REWRITE COMMAND LINE CHECK TO PREVENT POOL LOSSI; ; ); THIS IS THE DISPATCHER FOR THE MCR TASKC;G1 .MCALL CALL,DIR$,MRKT$,QIO$,RETURN,SVTK$S,WTSE$S  .MCALL WSIG$S A .SBTTL EQUATED SYMBOLSOCR = 15 ; CARRIAGE RETURNESC = 033 ; ESCAPE (ALT MODE)HT = 011 ; HORIZONTAL TABSPA = 040 ; SPACEEFN1 = 1 ; EVENT FLAFLUN1 = 1 ; "TI" LUN.3  .SBTTL GLOBAL DATAE3$MDPB::QIO$ IO.WVB,LUN1,EFN1,,$DPBST,,<0,0,0,0,0,0>E"$MPARS::.BLKW 4. ; PARAMETER AREA#$DPBST::.BLKW 2 ; I/O STATUS BLOCKO#$SSTAB::.BLKW 6 ; SST VECTOR TABLEI! .WORD $ERREP ; TRAP ENTRY POINTF+$MBUF::.WORD 0 ; ADDRESS OF COMMAND BUFFER,$$MCMD::.WORD 0 ; RAD50 COMMAND NAME#$MUCB::.WORD 0 ; ADDRESS OF TI UCB='$MSTK::.WORD 0 ; INITIAL STACK POINTER "$MTERM::.WORD 0 ; LINE TERMINATOR P .SBTTL LOCAL DATA;F; UNPRIVILEGED COMMANDS1;1MCMDUP: .RAD50 /ABO/ ; ABORTB00 DATADATADATADATADATADATADATA .WORD $ABOEP ; .RAD50 /CAN/ ; CANCELD .WORD $CANEP ; .RAD50 /RES/ ; RESUMEA .WORD $RESEP ; .RAD50 /RUN/ ; RUN .WORD $RPSEP ; .RAD50 /TIM/ ; TIME  .WORD $TIMEP ; .WORD 0 ; END OF TABLE;U; PRIVILEGED COMMAND TABLE;DMCMDPR: .IF DF R$$ATLD! .RAD50 /ATL/ ; ACTIVE TASK LISTO .WORD $ATLEP ; .ENDC .IF DF X$$DBT .RAD50 /BRK/O .WORD $BRKEP ;BREAK .ENDC .IF DF R$$OPE .RAD50 /OPE/ ; OPENR .WORD $OPEEP ; .ENDC .RAD50 /RED/ ; REDIRECT. .WORD $REDEP ; .RAD50 /REM/ ; REMOVE. .WORD $REMEP ; .IF DF R$$ATL .RAD50 /TAL/ ; TASK LIST .WORD $TALEP ; .ENDC .WORD 0 ;T; ; PROMPT CHARACTER; GTSGN: .ASCII <15><12>/>/ ; .EVEN'MCR: .RAD50 /MCR/ ; NAME OF DISPATCHERRDISLEN: .BLKW 1 ; BYTE COUNT-1K S .SBTTL DISPATCHER CODE.;+;; *** - $MCREP-MCR DISPATCHERO;.>; THE MCR DISPATCHER OBTAINS COMMANDS FROM THE MCR UNSOLICITED?; MESSAGE QUEUE. IT EXTRACTS THE COMMAND VERB FROM THE COMMANDR=; AND SEARCHES THE UNPRIVILEGED AND PRIVILEGED COMMAND TABLES 9; FOR THE COMMAND. IF IT FINDS THE COMMAND IN THE TABLES$(; IT WILL JUMP TO THE COMMAND PROCESSOR.;M; SIDE EFFECTS-INPUT::;S4; $MCRHD-POINTS TO THE MCR UNSOLICITED MESSAGE QUEUE; ; SIDE EFFECTS-OUTPUT:; ; $MCMD - RAD50 COMMAND NAME*; $MDPB - QIO DPB SET UP FOR WRITE VIRTUAL#; $MBUF - ADDRESS OF COMMAND BUFFERI; $MUCB - ADDRESS OF TI UCBM; $MTERM - LINE TERMINATOR; ; OUTPUTS:;A6; R0-POINTER TO NEXT CHARACTER IN COMMAND BUFFER AFTER; COMMAND VERB.N;R;-;D; GET NEXT BUFFER TO PROCESS;N .ENABL LSBD0START: MOV SP,$MSTK ; SAVE INITIAL STACK POINTER)$MCR:: MOV $MSTK,SP ; RESET STACK POINTERP/ MOV #IO.WVB,$MDPB+2 ; DEFAULT TO WRITE VIRTUALM* MOV #40,$MDPB+20 ; RESET CARRIAGE CONTROL. MOV MCR,$MCMD ; SET MCR DISPATCHER IN CONTROL% MOV $MBUF,R0 ; DO WE HAVE TO PROMPT?D$ ; IF NON-ZERO, IT MEANS MCR JUST$ ; PROCESSED A COMMAND AND SHOULD$ ; ISSUE THE PROMPTING CHARACTER.. BEQ MCRP1 ; NO, WE WERE JUST CALLED BY EXEC.% MOV #84.,R1 ; GET LENGTH OF BUFFERB,5$: CALL $SWSTK,10$ ; SWITCH TO SYSTEM STATE% CALLR $DEACB ; RELEASE COMMAND LINE210$: CMPB $MTERM,#ESC ; LINE TERMINATED BY ESCAPE? BEQ MCRP1 ; YES, SKIP PROMPT*MCRPMT: CALL PROMPT ; ISSUE PROMPT STRING'MCRP1: CLR $MBUF ; SHOW BUFFER IS FREEC) CALL $SWSTK,40$ ; SWITCH TO SYSTEM STACKT& MOV $TKTCB,R0 ;GET MCR'S TCB ADDRESS+ ADD #T.RCVL,R0 ;GET RECIEVE QUEUE POINTERD CALL $QRMVF ; REMOVE A MESSAGE BCC 20$ ; GOT ONEO& MOV $TKTCB,R5 ; GET MCR'S TCB ADDRESS& CALLR $DREXT ; EXIT DIRECTLY TO EXEC;W; GET A COMMAND TO PROCESS;E'20$: MOV R1,$MBUF ; SAVE BUFFER ADDRESS MOV 2(R1),R0 ; GET UCB ADDRESSI& BIC #1,R0 ; CLEAR PROMPT REQUEST BIT/30$: MOV U.RED(R0),R0 ; FOLLOW REDIRECT POINTERI CMP R0,U.RED(R0) ; END OF LIST? BNE 30$ ; NO, CONTINUE DOWN IT MOV R0,$MUCB ; SET UCB ADDRESS,' MOV $HEADR,R2 ; GET OUR HEADER ADDRESSR5 MOV R0,H.LUN+<*4>(R2) ; SET LUN1 UCB ADDRESSA RETURN ; SWITCH TO USER STACK&40$: MOV $MBUF,R0 ; GET BUFFER ADDRESS) BIT #1,2(R0) ; IS THIS A PROMPT REQUEST?  BEQ 50$ ; NO;O; BUFFER IS PROMPT REQUEST;A, MOV #4.,R1 ; SET COUNT OF BYTES TO RELEASE MOV #CR,$MTERM ; SET TO PROMPTT BR 5$ ; RELEASE BUFFER;R; BUFFER CONTAINS A COMMANDE;350$: CMP (R0)+,(R0)+ ; SKIP TO BEGINNING OF COMMANDT0 MOV #80.,R2 ; SET MAX COUNT OF CHARS IN BUFFER MOV R0,R3 ; GET BUFFER ADDRESS .DSABL LSB, UMCR2: ;JRK122$ DEC R2 ; END OF BUFFER? ;JRK122 BGE 3$ ; NO ;JRK122' TRAP 2 ; YES, SYNTAX ERROR ;JRK122 13$: MOVB (R3),R1 ; GET NEXT CHARACTER ;JRK122 . CMPB R1,#'A+40 ; IS IT LOWER CASE? ;JRK122 BLO 5$ ; NO ;JRK122% CMPB R1,#'Z+40 ; PERHAPS ;JRK122$ BHI 5$ ; NO ;JRK1221 SUB #40,R1 ; YES, CONVERT TO UPPER CASE ;**-5;'5$: MOVB R1,(R3)+ ; AND STORE IN BUFFER,910$: CMPB R1,#CR ; IS IT CARRIAGE RETURN (EOB) ? ;**-3U BEQ 25$ ; YESS+ CMPB R1,#ESC ; IS IT ESCAPE ( ALT MODE )?  BEQ 25$ ; YES ;JRK122) CMPB R1,#IE.EOF00 &3Zg ; IS IT A ^Z ;JRK122  BNE MCR2 ; NO, CONTINUE SCAN*25$: MOVB #CR,-(R3) ; SET TERMINATOR TO CR MOV R1,$MTERM ; SAVE TERMINATOR CMP R0,R3 ; NULL LINE? BEQ RESTRT ; YES; ; GET COMMAND NAME; )30$: MOV $MBUF,R0 ; GET ADDRESS OF BUFFER# CMP (R0)+,(R0)+ ; POINT TO DATA CLR R1 ; PERIOD IS TERMINATORN' CALL $CAT5 ; CONVERT 3 CHARS TO RAD50S BCC 40$ ;R TRAP 1. ; ILLEGAL MCR FUNCTION;E3; SCAN THE COMMAND TABLES FOR THE COMMAND TYPED IN.Q;$; R1=RAD50 COMMAND NAMEP;1540$: MOV #MCMDUP,R2 ; GET UNPRIVILEDGED COMMAND TABLEN- CALL CMDSRC ; SEARCH THIS TABLE FOR COMMANDR TST (R2) ; DID WE FIND IT  BNE PROCES ; YES; ; SCAN PRIVILEDGED COMMAND TABLE;/ MOV #MCMDPR,R2 ; GET PRIVILEDGED COMMAND TABLED( CALL CMDSRC ; SEARCH TABLE FOR COMMAND TST (R2) ; DID WE FIND ONE?T BNE 50$ ; YES $ TRAP 1. ; NO, ILLEGAL MCR FUNCTION;49; COMMAND IS PRIVILEDGED , SEE IF TERMINAL IS PRIVILEDGEDM;D#50$: MOV $MUCB,R1 ; GET UCB ADDRESS$1 BIT #U2.PRV,U.CW2(R1) ; IS TERMINAL PRIVILEDGED?  BNE PROCES ; YES" TRAP 6. ; NO, PRIVILEGED COMMAND;T; PROCESS COMMANDN;*PROCES: MOVB (R0)+,R1 ; GET NEXT CHARACTER CMPB R1,#SPA ; IS IT A SPACE?A BEQ 5$ ; YES- CMPB R1,#CR ; NO, IS IT A CARRIAGE RETURN ? BNE PROCES ; NO, LOOPB DEC R0 ; YES, POINT TO "CR"D'5$: MOV (R2)+,$MCMD ; SAVE COMMAND NAME. CALL @(R2) ; PROCESS COMMAND$RESTRT: JMP $MCR ; GET NEXT COMMAND N .SBTTL SUBROUTINESD;+;M-; *** - CMDSRC-SEARCH COMMAND TABLE FOR MATCHC; INPUT:;E; R1 - COMMAND IN RAD50E; R2 - ADDRESS OF COMMAND TABLER;L ; OUTPUT:D;T; R1 - PRESERVED(; R2 - ADDRESS OF COMMAND ENTRY IF FOUND; (R2)><0 IF FOUNDP; (R2)=0 OF NOT FOUND;5;-*CMDSRC: CMP R1,(R2) ; IS THIS THE COMMAND BEQ 10$ ; YESO& ADD #4.,R2 ; NO, INDEX TO NEXT ENTRY TST (R2) ; END OF TABLEM# BNE CMDSRC ; NO, TRY NEXT COMMAND;10$: RETURN ; RETURN;+&; *** - PROMPT - ISSUE PROMT TO "TI";I; INPUT:; NONE; ; OUTPUT:C; NONE;A;-*PROMPT: MOV #$MDPB+14,R5 ; GET DPB ADDRESS& MOV #GTSGN,(R5)+ ; SET BUFFER POINTER# MOV #3,(R5)+ ; SET CHARACTER COUNTD CLR (R5) ; NO CARRIAGE CONTROL CALLR $DOIO ; ISSUE QION  .SBTTL GLOBAL SUBROUTINES;+&; *** - $DOIO - ISSUE QIO FROM $MDPB;; INPUT:%; $MDPB - QIO DPB USING LUN1 AND EFN1T;T ; OUTPUT:2 ; RETURNS TO CALLER IF NO ERRORS); OTHERWISE ISSUES ERROR MESSAGE DIRECTLYU;;- $DOIO:: DIR$ #$MDPB ; ISSUE QIO BCC 10$ ; NO ERRORS YETO& CMP #IE.UPN,$DSW ; OUT OF POOL SPACE? BNE 20$ ; NO BR 15$ ; YES#10$: WTSE$S #EFN1 ; WAIT TILL DONER BCC 30$ ; ALL OKAY) CMPB #IE.NOD,$DPBST ; OUT OF POOL SPACE?A BNE 20$ ; NO, ERROR$-15$: WSIG$S ; YES, WAIT FOR SOME TO FREE UPN BR $DOIO ; TRY AGAIN20$: TRAP 8. ; IO ERROR30$: RETURN ;P .END STARTSING LUN1 AND EFN1T;T ; OUTPUT:2 ; RETURNS TO CALLER IF NO ERRORS); OTHERWISE ISSUES ERROR MESSAGE DIRECTLYU;;- $DOIO:: DIR$ #$MDPB ; ISSUE QIO BCC 10$ ; NO ERRORS YETO& CMP #IE.UPN,$DSW ; OUT OF POOL SPACE? BNE 20$ ; NO BR 15" .TITLE OPEBAS-OPEN MEMORY ROUTINE .IDENT /02.2/;$; ; COPYRIGHT (C) 1975, 1976, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.W;$>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; ;E; VERSION: 02.2 ; BY: H. LEVE; DATE: 08/23/73U:; MODIFIED: 12/31/74 MODIFIED OPEOV FOR USE 00( DATADATADATADATADATADATADATAWITH BASIC MCR;T;2; HJL025 4/7/76 CHANGE PCB, TCB AND HEADER FORMAT:; JAK028 8/4/76 CORRECTION TO GETADD AND OPEN PAR SWITCH ;I; M. JOHNSON 04-JUN-81;; MJ018 -- FIX CONDITIONAL ASSEMBLY SO THAT .C2BTO WILL BE 5; ASSEMBLED IF EITHER R$$OPE OR R$$ATL ARE DEFINEDO;S; M. JOHNSON 08-JUL-81; MJ020 -- ADD 22-BIT SUPPORT;O;Q,; THIS MODULE PROCESSES THE MCR OPEN COMMAND;  .IF DF R$$OPE- .MCALL CALL,DIR$,HWDDF$,RETURN,TCBDF$,WTSE$S .IF DF M$$MGE .MCALL HDRDF$,PCBDF$  .IFTF  .SBTTL EQUATED SYMBOLSC;G ; CONSTANTSD;ACR = 15 ; CARRIAGE RETURNESC = 33 ; ESCAPE (ALT MODE)P;S(LUN1 = 1 ; LOGICAL UNIT NUMBER FOR "TI"EFN1 = 1 ; EVENT FLAGSPA = 40 ; SPACET$ HWDDF$ ; DEFINE HARDWAE REGISTERS TCBDF$ ; DEFINE TCB OFFSETS .IFTH& HDRDF$ ; DEFINE TASK HEADER OFFSETS PCBDF$ ; DEFINE PCB OFFSETS .IFTF  .SBTTL LOCAL DATA OPSGN: .BYTE 0 ; SIGN OF NUMBER'OPCHNG: .BYTE 0 ; CONTENTS CHANGE FLAGD ; 0 = NO CHANGED ; <>0 = CHANGEDF,OPCONT: .WORD 0 ; CONTENTS OF OPEN LOCATIONDOPCAD: 0,0 ; CURRENT OPEN ADDRESS ; MJ020W ; MJ020HP .IFT ; MJ020W ; MJ020T?OPPCB: ; PCB ADDRESS OF TASK OR PARTITION ;**-7;(OPNAM: .BLKW 2 ; TASK OR PARTITION NAME@OPDIB: .WORD 0 ; DISPLACEMENT IN BLOCK OF LOCATION TO BE OPENED7OPBLK: .WORD 0 ; BLOCK NUMBER OF LOCATION TO BE OPENED /OPOLD: .WORD 0 ; OLD CONTENTS OF OPEN LOCATION ,OPMOD: .BLKW 2 ; ADDRESS MODIFICATION WORDSOPOPEN: .BYTE 0 ; OPEN TYPE ; 0 = ABSOLUTE  ; 2 = PARTITION; ; KEYWORD VALUES; PAR: .ASCIZ /PAR/ ; .EVEN .IFTF; ; OPEN COMMANDS ; CMDTAB: .WORD ESC ; ESCAPEC .WORD OPEXIT ; EXITR .WORD CR ; OPEN NEXT .WORD OPECR ;2 .ASCIZ /^/ ; OPEN PREVIOUS .WORD OPEBK ;I .ASCIZ /*/ ; OPEN INDIRECT .WORD OPEAT ;P .ASCIZ /@/ ; OPEN INDIRECT .WORD OPEAT ;O .ASCIZ /_/ ; OPEN PC OFFSETO .WORD OPEOF ;C .WORD 0 ; END OF TABLE;R; TRAP ERROR INSTRUCTIONSP;NOERTAB: TRAP 2. ; SYNTAX ERROR= TRAP 12. ; INVALID ADDRESS TRAP 9. ; BYTE ADDRESS  .SBTTL PARSE THE COMMANDN;+&; *** - $OPEEP-OPEN MEMORY MCR COMMAND; ; FORMAT:;4; OPE[N] ADDRESS[+-N][/SW=VALUE]CR TYPED IN BY USER.; ADDRESS CONTENTS/[X]TERM DISPLAYED IN SYSTEM;; WHERE:'; ADDRESS-IS VALID OCTAL MEMORY ADDRESSOF; N - IS OCTAL NUMBER TO BE ADDED [SUBTRACTED] FROM ADDRESS-(OPTIONAL)2; [/SW =VALUE] FOR SYSTEMS WITH MEMORY MANAGEMENT=; OPTIONAL SWITCHES WHICH INDICATE ADDRESS COMPUTATION METHOD2; NULL - ABSOLUTE ADDRESS7; /PAR=PARNAM - ADDRESSES RELATIVE TO PARTITION PARNAMT; CR - CARRIAGE RETURN(; CONTENTS - CONTENTS OF MEMORY LOCATION6; X - NEW VALUE TO BE DEPOSITED IN LOCATION( OPTIONAL) ; TERM - IS ONE OF THE FOLLOWING(; CR-CARRIAGE RETURN-OPEN NEXT LOCATION; ^CR-OPEN PREVIOUS LOCATION '; *CR-OPEN LOCATION CONTENTS POINTS TOE'; @CR-OPEN LOCATION CONTENTS POINTS TO !; _CR-OPEN LOCATION AT PC OFFSETR; ESC-EXIT FROM OPENL;I; SIDE EFFECTS-INPUT:D ; $MBUF POINTS TO COMMAND BUFFER; $MCMD CONTAINS "OPE" IN RAD50M;A; INPUT:;T7; R5-POINTS TO NEXT CHARACTER IN BUFFER TO BE PROCESSEDN;- ; OUTPUT:F;M; NONE;N;-"$OPEEP::CLR R4 ; ZERO ERROR INDEX" CLR OPCAD ; ZERO CURRENT ADDRESSF CMPB (R0),#CR ; IS IT A CR? ; MJ020A BEQ 25$ ; YES, ERROR ; MJ020OW; ; MJ020EW; WE'VE PASSED THE COMMAND VERB, GET ADDRESS ; MJ020IW; ; MJ020F MOVB (R0),R2 ; GET NEXT CHAR ; MJ020C CALL OSGN ; SEARCH FOR NEXT NON-BLANK ; MJ020 A BCS 25$ 000&3Zg; ERROR, EOL ; MJ020 D CALL OCTAL ; IS IT AN OCTAL DIGIT? ; MJ020A BCS 25$ ; NO, ERROR ; MJ020DW ; MJ020 ? .IFT ; IS MEMORY MGMT AVAILABLE? ; MJ020 W ; MJ020SE CLRB OPOPEN ; SET OPEN DEFAULT TO ABSOLUTE ; MJ020 W ; MJ020IP .IFTF ; MJ020W ; MJ020 F MOV #OPCAD,R1 ; GET ADDRESS FOR 18 BITS ; MJ020F CALL .COT2B ; CONVERT TO TWO WORDS ; MJ020@ DEC R0 ; POINT TO CURRENT CHARACTER ; MJ020G10$: CLR OPSGN ; SET SIGN TO PLUS ; MJ020 D CALL OSGN ; SEARCH FOR NEXT NON-BLANK ; MJ020A BCC 12$ ; EOL ; MJ0200D JMP OPESIO ; CR, END OF LINE ; MJ020H12$: CALL OCTAL ; IS IT AN OCTAL DIGIT? ; MJ020A BCS 28$ ; NO, POSSIBLE ERROR ; MJ020 W ; MJ020P .IFF ; MJ020D CALL $COTB ; CONVERT TO BINARY ; MJ020W ; MJ020EP .IFT ; MJ020F MOV #OPMOD,R1 ; SET ADDRESS FOR ADDRESS MODIFIER ; MJ020E CALL .COT2B ; CONVERT TO TWO WORDS ; MJ020 P .IFTF ; MJ020W ; MJ020 @ DEC R0 ; POINT TO CURRENT CHARACTER ; MJ020C TST OPSGN ; IS SIGN NEGATIVE? ; MJ020 A BEQ 20$ ; NO ; MJ020#W ; MJ020 P .IFF ; MJ020@ NEG R1 ; YES, NEGATE DISPLACEMENT ; MJ020J20$: ADD R1, OPCAD ; ADD TO CURRENT ADDRESS ; MJ020W ; MJ020IP .IFT ; MJ020G SUB (R1),OPCAD ; SUBTRACT LOW PART ; MJ020 E SBC OPCAD+2 ; AND CARRY ; MJ020 J SUB 2(R1),OPCAD+2 ; AND HIGH PART ; MJ020K BR 23$ ; MJ020NK20$: ADD (R1),OPCAD ; ADD LOW PART ; MJ020 E ADC OPCAD+2 ; ADD CARRY BIT ; MJ020 J ADD 2(R1),OPCAD+2 ; AND HIGH PART ; MJ020W23$: ; MJ020 P .IFTF ; MJ020W ; MJ020 @ BR 10$ ; LOOP ; MJ020E25$: TRAP 2. ; SYNTAX ERROR ; MJ020 W ; MJ020 P .IFF ; MJ020D28$: BR 25$ ; IF NO MEM. MGMT, THIS IS AN ERROR ; MJ020W ; MJ020 P .IFT 008 DATADATADATADATADATADATADATA ; MJ020I28$: CMPB R2,#'/ ; KEYWORD COMING? ; MJ020 @ BEQ 30$ ; YES ;**-23@ BR 25$ ; NO, ERROR ; MJ020U ;**-5M .IFT ;I1; IF SEGMENTATION UNIT IS AVAILABLE THE FOLLOWING ; KEYWORD IS ALLOWED ; /PAR=NNNNNN ); WHERE NNNNNN IS THE NAME OF A PARTITION ; D30$: INC R0 ; POINT TO NEXT CHARACTER ; MJ020D CLR OPNAM ; YES, ZERO NAME ; MJ020C CLR OPNAM+2 ; FIELD ;**-1B MOV #PAR,R1 ; SEE IF ITS CALL .KEYWD ; "PAR" A BVS 25$ ; NO, SYNTAX ERROR ; MJ020 A BCC OPPAR ; YES ;**-1T@ BR 25$ ; ERROR ; MJ020U; ;**-1R8; GET PARTITION NAME FROM BUFFER AND SEARCH PCB'S FOR IT; -OPPAR: INCB OPOPEN ; SET PARTITION TYPE OPENN" CALL GETNAM ; GET PARTITION NAME BCS 20$ ; ERROR*1 CALL $NNBLK ; SEE IF A VALID TERMINATOR IS NEXTP BCC 20$ ; SYNTAX ERROR MOV #OPNAM,R3 ; POINT TO NAME% MOV $PARHD,R0 ; GET ADDRESS OF PCB'S 05$: CMP P.NAM(R0),(R3) ; IS THIS THE PARTITION ? BNE 10$ ; NO CMP P.NAM+2(R0),2(R3) ; MAYBE BEQ 20$ ; YES 310$: MOV P.LNK(R0),R0 ; NO, GET ADDRESS OF NEXT PCB " BNE 5$ ; LOOP IF NOT END OF PCBS$ BEQ OPER12 ; YES, END IS ZERO WORD$20$: MOV R0,OPPCB ; SAVE PCB ADDRESS BR OPESIO ;Y;E8; LOCAL ERRORS FOR MEMORY MANAGEMENT VERSION OF SOFTWARE;C*OPER12: TRAP 7. ; PARTITION NOT IN SYSTEM .IFTF  .SBTTL DISPLAY LOCATION;3/; END OF LINE FOUND, SET UP DPB FOR I/O TO "TI" ;'0OPESIO: MOV #IO.ATT,$MDPB+2 ; SET ATTACH FUNCTON CALL $DOIO ; DOITC;P(; DISPLAY LOCATIONS ADDRESS AND CONTENTS;0 OPEDIS: ;) MOV $MBUF,R0 ; GET ADDRESS OF MCR BUFFER5 .IFF E TST OPCAD+2 ; IS ADDRESS TOO BIG? ; MJ020CC BNE OPER8 ; YES, ERROR ; MJ020 7 MOV OPCAD,R1 ; GET ADDRESS OF LOCATION TO BE DISPLAYEDR BIT #1,R1 ; IS ADDRESS ODD ? BNE OPER9 ; YES, ERROR& CALL $CBOMG ; CONVERT TO OCTAL ASCII! MOVB #SPA,(R0)+ ; PUT IN A BLANK # MTPS #PR7 ;;; LOCK OUT INTERRUPTS( MOV @#4,-(SP) ;;; SAVE INTERRUPT VECTOR MOV #2$,@#4 ;;; SET NEW VECTOR CLC ;;;+ MOV @OPCAD,R1 ;;; GET CONTENTS OF LOCATION.! BR 3$ ;;; SKIP ERROR PROCESSINGT;B2; INTERRUPT COMES HERE ON NON-EXISTANT MEMORY TRAP;E2$: TST (SP)+ ;;; POP PC  MTPS #0 ;;; RESET PS SEC ;;; SET ERROR,3$: MOV (SP)+,@#4 ;;; RESET INTERRUPT VECTOR MFPS -(SP) ;;; GET OLD PSO MTPS #0 ;;; ALLOW INTERRUPTS$ BIT #1,(SP)+ ; CARRY SET IN OLD PS? BNE OPER8 ; YES, BAD ADDRESS CALL $CBOMG ; CONVERT TO ASCII BR 4$ ;) .IFT 0 MOV #OPCAD,R1 ; SET ADDRESS OF LOCATION ADDRESS BIT #1,(R1) ; IS ADDRESS ODD ?% BNE OPER9 ; YES, BYTE ADDRESS ERRORP) MOV PC,R2 ; SET TO PRINT LEADING ZEROESEK BIT #FE.EXT,$FMASK ; 11/70 EXTENDED MEMORY SUPPORT? ; MJ020 @ BEQ 2$ ; NO ; MJ020J BIT #177700,2(R1) ; ADDRESS ABOVE 2048. K? ; MJ020C BNE OPER8 ; YES, ERROR ; MJ020CE CALL .C22TO ; YES, CONVERT 22-BIT ADDRESS ; MJ020;? BR 3$ ; ; MJ020?M2$: BIT #177774,2(R1) ; ADDRESS ABOVE 128. K? ; MJ020RC BNE OPER8 ; YES, ERROR ; MJ020 ) CALL .C2BTO ; CONVERT TO 6 OCTAL DIGITS K3$: MOVB #SPA,(R0)+ ; PUT IN BLANK ; MJ020KA CALL OPEN ; GET CONTENTS OF LOCATION ;**-1  BCS OPER8 ; BAD ADDRESS 1 MOV #OPOLD,R1 ; GET CURRENT CONTENTS OF LOCATION ) MOV PC,R2 ; SET TO PRINT LEADING ZEROES  CALL .CBTO ; CONVERT TO OCTAL 00@&3Zg .IFTF;?; WRITE OUT LINE;1"4$: MOVB #SPA,(R0)+ ; PUT IN SPACE MOVB #'/,(R0)+ ; PUT IN /5 MOV #$MDPB+14,R5 ; GET ADDRESS OF DPB BUFFER POINTER + MOV $MBUF,(R5) ; AND SET ADDRESS OF BUFFERD( SUB (R5)+,R0 ; COMPUTE LENGTH OF BUFFER# MOV R0,(R5)+ ; STORE LENGTH IN DBPJ" MOV #44,(R5) ; SET LEAD LF, NO CR7 MOV #IO.WVB,$MDPB+2 ; SET WRITE LOGICAL BLOCK FUNCTIOND CALL $DOIO ; DO THE I/OT- MOV #IO.RVB,$MDPB+2 ; SET READ LOGICAL BLOCKE& MOV #80.,$MDPB+16 ; SET BUFFER LENGTH# CALL $DOIO ; READ IN NEXT COMMAND " MOVB $DPBST+1,R1 ; GET TERMINATOR CMPB #CR,R1 ; IS IT CR?' BEQ 5$ ; YES% CMPB #ESC,R1 ; IS IT ESC (ALT MODE)D BNE OPER6 ; NO, ERROR$-5$: MOV $DPBST+2,R3 ; GET COUNT OF CHARS READ5% MOV $MBUF,R0 ; GET ADDRESS OF BUFFERR& ADD R0,R3 ; GET ADDRESS OF LAST BYTE" MOVB R1,(R3) ; PUT IN TERMINATOR;B; NEXT COMMAND IS IN, DECODE ITK;N CLRB OPCHNG ; SET NOT CHANGEDT" CALL $GNBLK ; GET NEXT NON-BLANK BCS OPSKP ; EOL#4 DEC R0 ; BACK UP BUFFER POINTER TO FIRST CHARACTERD CALL OCTAL ; IS IT AN OCTAL DIGIT? ; MJ020A BCS OPSKP ; NO ;**-11 INCB OPCHNG ; YES, SHOW WE'RE CHANGING CONTENTS CALL $COTB ; CONVERT TO BINARY" MOV R1,OPCONT ; SAVE NEW CONTENTS BR OPSKPD S .SBTTL ERROR PROCESSING;***********************;1; ERROR PROCESSING WAS MOVED TO THIS SPOT SO THAT *; TRANSFERS TO THESE LABELS CAN BE MADE BY5; BRANCH INSTRUCTIONS, RATHER THAN BRANCH FOLLOWED BYE; JUMP INSTRUCTIONS.;T;***********************;A; ERROR PROCESSING; OPER9: INC R4 ; 8 BYTE ADDRESSO OPER8: INC R4 ; 7 ADDRESS ERROROPER6: ; SYNTAX ERROR CALL OPDET ; DETACH TTYN ASL R4 ; DOUBLE ERROR CODE% JMP OERTAB(R4) ; ISSUE ERROR MESSAGEV E* .SBTTL DETERMINE FUNCTION TO BE PERFORMED;S; TERMINATOR FOUND WHAT IS IT?; OPSKP: .IFFS# MOV OPCAD,R5 ; GET CURRENT ADDRESS  .IFTF/ MOV #CMDTAB,R3 ; GET ADDRESS OF VALID COMMANDSN"10$: CMPB R2,(R3) ; SAME COMMAND? BEQ 20$ ; YESN" ADD #4,R3 ; NO, BUMP TO NEXT ONE TSTB (R3) ; END OF COMMANDS? BNE 10$ ; NO, TRY NEXT ONE BR OPER6 ; YES, ERRORS#20$: TSTB OPCHNG ; CHANGE CONTENTSL BEQ 30$ ; NO CALL STORE ; YES .IFTO% MOV OPCONT,OPOLD ; SAVE NEW CONTENTSS .IFTF)30$: JMP @2(R3) ; GO TO COMMAND PROCESSORS.OPECR: ADD #2,OPCAD ; SET ADDRESS TO NEXT WORD .IFTO ADC OPCAD+2 ;N .IFTF BR OPECOM ;V2OPEBK: SUB #2,OPCAD ; SET ADDRESS TO PREVIOUS WORD .IFT3 SBC OPCAD+2 ; .IFTF BR OPECOM ;3 OPEAT: .IFF ! MOV (R5),OPCAD ; SET NEW ADDRESSD .IFT1 MOV OPOLD,OPCAD ; CLR OPCAD+2 ;S .IFTF BR OPECOM ; OPEOF: .IFFT MOVB (R5),R1 ; GET OFFSET  .IFT MOVB OPOLD,R1 ; GET OFFSETA .IFTF ASL R1 ; DOUBLE IT ADD #2,R1 ; ADD 2 TO IT & ADD R1,OPCAD ; ADD TO CURRENT ADDRESS .IFTO TST R1 ; POSITIVE? BMI 10$ ; NO ADC OPCAD+2 ; BR OPECOM10$: SBC OPCAD+2 ;  .IFTFOPECOM: JMP OPEDIS ;F0OPEXIT: MOVB #CR,@$MBUF ; PUT IN CARRIAGE RETURN$ MOV #1,$MDPB+16 ; SET OUT PUT COUNT% CLR $MDPB+20 ; ZERO CARRIAGE CONTROLD( MOV #IO.WLB,$MDPB+2 ; SET WRITE VIRTUAL CALL $DOIO ; AND ISSUE QIO CALLR OPDET ; DETTACH TTY   .SBTTL SUBROUTINES, .IFTO;+2; *** - OPEN - OPEN LOCATION ON A SEGMENTED SYSTEM; ; INPUT:9; OPOPEN - OPEN TYPE ( ABSOLUTE, KERNAL, PARTITION, TASK);,; TELLS HOW TO DETERMINE ABSOLUTE ADDRESS8; OPCAD,+2 - ADDRESS OF LOCATION TO BE OPENED ( 18 BITS)@; OPPCB - ADDRESS OF PARTITION CONTROL BLOCK FOR TASK, PARTITION;, ; OUTPUT:S+; OPDIB - DISPLACEMENT IN BLOCK OF LOCATIONG"; OPBLK - BLOCK NUMBER OF LOCATION; OPOLD - CONTENTS OF LOCATION;D;-HOPEN: CLR OPBLK ; ZERO BLOCK NUMBER ; MJ020G MOVB OPOPEN,R1 ; IS THIS OPEN ABSOLUTE? ; MJ020 B BEQ OPEABS ; YES ;**-1$ TST OPCAD+2 ; IS ADDRESS > 2**16 ? BNE OPEBAD ; YES, ERRORI BR OPEPAR ;NO, OPEN PARTITIONCOPEBAD: SEC ;R RETURN ;L;O; OPEN A00H DATADATADATADATADATADATADATABSOLUTEI;NOPEABS:UK BIT #FE.EXT,$FMASK ; 22-BIT MEMORY SUPPORT? ; MJ020O@ BEQ 5$ ; NO, BRANCH ; MJ020L BIC #177700,OPCAD+2 ; CLEAR BITS 6-15 OF THE HIGH WORD (ABOVE 22) ; MJ020K BR 8$ ; MJ020 O5$: BIC #177774,OPCAD+2 ; CLEAR BITS 2-15 OF THE HIGH WORD (ABOVE 18) ; MJ020?J8$: MOV OPCAD+2,R1 ; GET HIGH BITS OF ADDRESS ; MJ020C MOV OPCAD,R2 ; GET LOW 16 BITS ;**-1$$ BIC #177700,R2 ; CLEAR BLOCK NUMBER MOV R2,OPDIB ; SET DIB" MOV OPCAD,R2 ; GET LOW BITS AGAIN BIC #77,R2 ; CLEAR DIBE MOV #6,-(SP) ; SET SHIFT COUNTER ; MJ020 D10$: ROR R1 ; SHIFT FROM HIGH WORD THROUGH CARRY AND ; MJ020@ ROR R2 ; INTO LOW WORD ; MJ020B DEC (SP) ; DONE? ; MJ020A BGT 10$ ; NO, LOOP ; MJ0206C TST (SP)+ ; CLEAN UP STACK ; MJ020LC MOV R2,OPBLK ; AND SAVE BLOCK NUMBER ;**-5A, CMP R2,$SYSIZ ; IS ADDRESS VALID? (EXISTS?) BLO OPEMEM ; YESK BIT #FE.EXT,$FMASK ; 22-BIT EXTENDED MEMORY SUPPORT? ; MJ020GA BEQ 20$ ; NO, BRANCH ; MJ020 G CMP R2,#177600 ; YES, OPENING EXTERNAL PAGE? ; MJ020 @ BR 30$ ; ; MJ020I20$: CMP R2,#7600 ; NO, OPENING EXTERNAL PAGE? ; MJ020 I30$: BHIS OPEMEM ; YES ; MJ020 A BR OPEBAD ; NO, ERROR - BAD ADDRESS ;**-2 ;Y; OPEN PARTITION ADDRESS;B&OPEPAR: MOV OPPCB,R1 ; GET PCB ADDRESS MOV OPCAD,R2 ; GET ADDRESSR MOV R2,R3 ; YES , COPY ADDRESS BIC #77,R2 ;CLEAR LOW BYTE- CALL ROR6 ; CONVERT TO 32 WORD BLOCK NUMBER ( CMP R2,P.SIZE(R1) ; IS IT IN PARTITION? BHIS OPEBAD ;NO % MOV R3,R2 ; YES, COPY ADDRESS AGAIN !OPEPCB: MOV R2,R3 ; COPY ADDRESS ' BIC #177700,R3 ; CLEAR OF BLOCK NUMBER  MOV R3,OPDIB ; SAVE DIB BIC #77,R2 ; CLEAR OUT DIB CALL ROR6 ; ROTATE IT DOWN5 ADD P.REL(R1),R2 ; ADD PARTITION RELATIVE BLOCK NUM.D! MOV R2,OPBLK ; SAVE BLOCK NUMBERT BR OPEMEM ; OPEN THE LOCATION ;R;R; OPEN THE LOCATION ;Y0OPEMEM: CALL $SWSTK,40$ ; SWITCH TO SYSTEM STACK" CALL OPEADD ; SET UP SAR AND PDR& MOV @#4,-(SP) ; SAVE INTERRUPT VECTOR MOV #20$,@#4 ; SET NEW VECTOR MOV (R1),OPOLD ; GET CONTENTS BR 30$ ; SKIP ERROR PROCESSING;B-; INTERRUPT COMES HERE ON NON-EXISTANT MEMORY,;I20$: TST (SP)+ ; POP OFF PC MOV (SP)+,PS ; RESTORE PS$ MOV @$HEADR,R2 ; GET HEADER ADDRESS BIS #1,6(R2) ; SET CARRY BITD+30$: MOV (SP)+,@#4 ; RESET INTERRUPT VECTORM40$: RETURN ;C O;+3; *** - STORE - STORE NEW VALUE IN CURRENT LOCATION,; ; INPUT:; NON - SEGMENTED SYSTEM*; R5 - ADDRESS OF LOCATION TO BE MODIFIED; SEGMENTED SYSTEM+; OPDIB - DISPLACEMENT IN BLOCK OF LOCATIONP/; OPBLK - ABSOLUTE BLOCK IN MACHINE OF LOCATIONI; ; OUTPUT:R; ,; LOCATION IS MODIFIED TO CONTENTS OF OPCONT;(;- .IFFF&STORE: MOV OPCONT,(R5) ; SET NEW VALUE RETURN ;  .IFTD0STORE: CALL $SWSTK,100$ ; SWITCH TO SYSTEM STACK CALL OPEADD ; SET SAR AND PDR0 MOV OPCONT,(R1) ; SET NEW VALUE%100$: RETURN ; RETURN TO USER STACKO;+2; *** - OPEADD - SET UP SAR6 SO THAT THE REQUESTED!; LOCATION CAN BE READ OR ALTEREDN; ; INPUT:1; OPDIB - DISPLACEMENT IN BLOCK OF WORD REQUESTED &; OPBLK - BLOCK NUMBER OF WORD DESIRED; ; OUTPUT:R$; SAR6 IS SET UP TO READ THE ADDRESS5; R1 - CONTAINS ADDRESS BIASED BY 140000 TO READ WORD);S;-5OPEADD: MOV OPBLK,@#KISAR6 ; SET BLOCK NUMBER IN SAR61 MOV OPDIB,R1 ; GET DIBA0 ADD #140000,R1 ; MAKE IT LOOK LIKE ITS IN PAGE6 RETURNT .IFTF 0 .IFTF;+; *** - OPDET-DETACH TERMINAL;* ; INPUTS-NONET; ; OUTPUTS-NONE;Q;-0OPDET: MOV #IO.DET,$MDPB+2 ; SET DETACH FUNCTION CALL $DOIO ; DO IT RETURN ; RETURNW;+ 00P&3Zg ; MJ020EW; *** - OSGN-LOOK FOR SIGN AND SET OPSGN ; MJ020OW; ; MJ020 W; THIS ROUTINE SCANS THROUGH BUFFER LOOKING FOR NEXT NON-BLANK ; MJ020HW; CHARACTER. IF ITS A SIGN, IT SETS OPSGN TO 0 IF + OR -1 IF -. ; MJ020SW; IT THEN CONTINES TO SCAN THE BUFFER. IT STOPS ON A NON-BLANK AND ; MJ020 W; NON-SIGN CHARACTER. ; MJ020NW; ; MJ020 W; INPUTS: ; MJ020UQ; R0 - ADDRESS 1ST CHAR IN BUFFER ; MJ020 Q; R2 - CHAR IN BUFFER ; MJ020TW; ; MJ020AW; OUTPUTS: ; MJ020 Q; R0 - ADDRESS OF LAST CHAR LOOKED AT ; MJ020SQ; R2 - LAST CHAR LOOKED AT ; MJ020 Q; CARRY SET - CR FOUND ; MJ020 Q; CARRY CLEAR - NOT CR ; MJ020 W; ; MJ020 W;- ; MJ020 KOSGN: CMPB R2,#SPA ; IS IT A SPACE? ; MJ0202A BNE 10$ ; NO ; MJ020 C5$: INC R0 ; YES, SKIP IT ; MJ020 F MOVB (R0),R2 ; GET NEXT CHAR ; MJ020A BR OSGN ; LOOP ; MJ020 I10$: CMPB R2,#CR ; IS IT CR? ; MJ020 A BEQ 30$ ; YES ; MJ020 E CMPB R2,#'+ ; PLUS SIGN? ; MJ020 @ BEQ 5$ ; YES ; MJ020E CMPB R2,#'- ; MINUS SIGN? ; MJ020 A BNE 20$ ; NO ; MJ020 C COM OPSGN ; YES, NEGATE FLAG ; MJ020 ? BR 5$ ; ; MJ020 B20$: CLC ; CLEAR CARRY, NO EOL ; MJ020@ BR 40$ ; ; MJ020B30$: SEC ; SEC ; MJ020E40$: RETURN ; ; MJ020 W;+ ; MJ020 W; ; MJ020$W ; MJ020E W;+ ; MJ020 W; *** - OCTAL CHECK IF CHARACTER IS A VALID OCTAL DIGIT ; MJ020 W; ; MJ020 W; INPUTS: ; MJ020 W; ; MJ020 Q; R2 IS CHARACTER TO BE CHECKED ; MJ020 W; ; MJ020 W; OUTPUTS: ; MJ020 W; ; MJ020 Q; CARRY - 0 VALID DIGIT ; MJ020 Q; CARRY - 1 INVALID DIGIT ; MJ020 W00X DATADATADATADATADATADATADATA; ; MJ020 W;- ; MJ020 KOCTAL: CMPB R2,#'0 ; IS THE DIGIT 0-7? LT IS ERROR ; MJ020 A BLT 10$ ; NO ; MJ020 E CMPB R2,#'7 ; MAYBE, GT IS ERROR ; MJ020 A BGT 10$ ; NO ; MJ020 > CLC ; YES, CLEAR CARRY ; MJ020@ BR 20$ ; ; MJ020B10$: SEC ; SET CARRY ; MJ020E20$: RETURN ; ; MJ020TW ; MJ020 W ; MJ020TW ; MJ020 P .IFT ; MJ020W ; MJ020V;+ ;**-79#; *** - GETNAM - GET PARTITION NAME ; ; INPUT:; R0 - POINTS TO BUFFER ; ; OUTPUT: ); R0- UPDATED TO NEXT CHARACTER IN BUFFER ; CARRY ; SET - DID'T GET A PROPER NAME; CLEAR - GOT A GOOD NAME#; OPNAM,+2 - NAME GOTTEN BY ROUTINEJ; ;-&GETNAM: MOV PC,R1 ; SET ALLOW PERIODS CALL $CAT5 ; CONVERT TO RAD50M# MOV R1,OPNAM ; STORE FIRST 3 CHARS  BCS 10$ ; NO MORE TO GET CALL $CAT5 ; GET NEXT 3 CHARS MOV R1,OPNAM+2 ; STORE THEM TOO# BCS 10$ ; LESS THEN 3 CHARACTERS? ' MOVB (R0)+,R2 ; NO, GET NEXT CHARACTERN%10$: TST OPNAM ; DID WE GET A NAME ?B BEQ 20$ ; NO CLC ; YES, SET GOOD FLAG BR 30$ ;B 20$: SEC ;30$: RETURN ;T T;+%; *** - ROR6 - ROTATE R2 RIGHT 6 BITS%; *** - ROR4 - ROTATE R2 RIGHT 4 BITS ;-; INPUT:#; R2 - CONTENTS TO BE ROTATED RIGHT ;T ; OUTPUT:T; R2 - ROTATED REQUESTED AMOUNT ;S;-ROR6: CLC ; ZERO CARRY BIT ROR R2 ; ROR R2 ;ROR4: ROR R2 ;M ROR R2 ; ROR R2 ; ROR R2 ; RETURN ; RETURN TO CALLER P .ENDC ; MJ018W ; MJ018TP .ENDC ; MJ018;+W ; MJ018QP .IF DF M$$MGE ; MJ018W ; MJ018CP .IF DF R$$OPE ! R$$ATL ; MJ018W ; MJ018CW; THIS ROUTINE CONVERTS BINARY NUMBERS TO OCTAL ASCII DIGITS ; MJ020 W; ; MJ020$W; *** - .C22TO - CONVERTS A 22 BIT NUMBER TO OCTAL ; MJ020 W; *** - .C2BTO - CONVERTS AN 18 BIT NUMBER TO OCTAL ; MJ020RW; *** - .CBTO - CONVERTS A 16 BIT NUMBER TO OCTAL ; MJ020 W; ; MJ020IW; INPUT: ; MJ020 Q; R0 - BUFFER ADDRESS ; MJ020NQ; R1 - ADDRESS OF TWO WORD BINARY NUMBER ; MJ020OJ; (R1) - LOW PART ; MJ020J; 2(R1) - HIGH PART ; MJ020Q; R2 - LEADING ZERO FLAG ; MJ020 J; 0 = SUPPRESS LEADING ZEROES ; MJ020J; 0 <> ALLO00`&3ZgW LEADING ZEROES ; MJ020W; ; MJ020 W; OUTPUT: ; MJ020 Q; R0 - UPDATED ; MJ020 Q; R1 - UNCHANGED ; MJ020 Q; R2 - UNCHANGED ; MJ020MQ; R3 - USED ; MJ020 W;- ; MJ020 O .MCALL SAVNR,RETURN ; MJ020JO .ENABL LSB ; MJ020 H.C22TO:: SAVNR ; SAVE R4 AND R5 ; MJ020E MOV (R1),R4 ; GET LOW PART ; MJ020 E MOV 2(R1),R5 ; GET HIGH PART ; MJ020 G BIC #177700,R5 ; CLEAR BITS NOT IN A 22-BIT ADDRESS ; MJ020 G MOV #11.,-(SP) ; SET COUNT OF SHIFTS TO SET UP ; MJ020E@ CLR R3 ; ZERO DIGIT ; MJ020> SEC ; SET FLAG TO INDICATE END OF DATA ; MJ020C5$: ROL R4 ; SHIFT IN END MARK ; MJ020 @ ROL R5 ; SHIFT IN LOW BIT ; MJ020@ ROL R3 ; SHIFT IN DIGIT ; MJ020B DEC (SP) ; DONE? ; MJ020@ BNE 5$ ; NO, LOOP ; MJ020C TST (SP)+ ; YES, CLEAN STACK ; MJ020 A BR CBTO ; ; MJ020DW ; MJ020 H.C2BTO:: SAVNR ; SAVE R4 AND R5 ; MJ020E MOV (R1),R5 ; GET LOW PART ; MJ020ME MOV 2(R1),R3 ; GET HIGH PART ; MJ0200G BIC #177774,R3 ; CLEAR BITS NOT IN AN 18-BIT ADDRESS ; MJ020(@ BR 10$ ; ; MJ020W ; MJ020 G.CBTO:: SAVNR ; SAVE R4 AND R5 ; MJ020:E MOV (R1),R5 ; GET LOW PART ; MJ020(@ CLR R3 ; ZERO DIGIT ; MJ020D10$: CLR R4 ; ZERO LOWEST PART ; MJ020> SEC ; SET END FLAG ; MJ020@ ROL R5 ; SHIFT IN END MARKER ; MJ020@ ROL R3 ; SHIFT UP BIT INTO DIGIT ; MJ020W ; MJ020 HCBTO: CLR -(SP) ; SET COUNT OF NON-ZERO DIGITS SEEN ; MJ020D25$: TST R3 ; ZERO DIGIT? ; MJ020A BNE 30$ ; CONVERT IF NOT ; MJ020 B TST (SP) ; YES, ANY NON-ZERO DIGIT SEEN YET ; MJ020A BNE 30$ ; YES ; MJ020 @ TST R2 ; NO, SUPPRESS LEADING ZERO? ; MJ020A BEQ 40$ ; YES ; MJ020 H30$: ADD #'0,R3 ; NO, CONVERT TO OCTAL DIGIT ; MJ020F MOVB R3,(R0)+ ; AND PUT IT IN BUFFER ; MJ020B INC (SP) ; INCREMENT NUMBER OF DIGITS CONVERTED ; MJ020I40$: MOV #3,-(SP) ; SET SHIFT COUNT ; MJ020 @ CLR R3 ; ZERO DIGIT ; MJ020D50$: ROL R4 ; SHIFT LOW TO HIGH ; MJ020@ ROL R5 ; SHIFT HIGH TO CARRY ; MJ020@ ROL R3 ; SHIFT CARRY INTO DIGIT ; MJ020B DEC (SP) ; DONE? ; MJ020A BNE 50$ ; NO, LOOP ; MJ020DC TST (SP)+00h mDATADATADATADATADATADATADATA ; CLEAR COUNT ; MJ020 @ TST R5 ; DONE? ; MJ020A BNE 25$ ; NO, LOOP ; MJ020 @ TST R4 ; MAYBE ; MJ020A BNE 25$ ; NO ; MJ020TC TST (SP)+ ; YES, POP OFF ZERO COUNT ; MJ020 A RETURN ; ; MJ020 O .DSABL LSB ; MJ020 W ; MJ0200 BP .ENDC ; MJ018W ; MJ018 P .ENDC ; MJ018W ; MJ018B;+W ; MJ018 P .IF DF R$$OPE ; MJ018W ; MJ018 :; *** - .COT2B - CONVERT OCTAL NUMBER TO TWO BINARY WORDS*; THIS SUBROUTINE CONVERTS AN ASCII OCTAL%; NUMBER TO BINARY. IT ACCEPTS ONLY ; OCTAL DIGITS.; ; INPUT:1; R0 - ADDRESS OF NEXT DIGIT IN BUFFER FOR NUMBER ;; R1 - ADDRESS OF TWO WORD FIELD TO PUT CONVERTED NUMBER IN ; WORD 1 - LOW 16 BITS ; WORD 2 - HIGH 16 BITS;F ; OUTPUT: ; R0 - UPDATED BUFFER POINTER ; R1 - UNCHANGED; R2 - TERMINATING CHARACTER; ; CARRY BIT ; CLEAR - ONLY 16 BIT NUMBER ; SET - 32 BIT NUMBER; ;-(.COT2B::CLR (R1) ; ZERO OUT LOW 16 BITS# CLR 2(R1) ; ZERO OUT HIGH 16 BITST'10$: MOVB (R0)+,R2 ; GET NEXT CHARACTERT CMPB R2,#'0 ; IS IT <0 ? BLT 30$ ; YES: CMPB R2,#'7 ; IS IT >7 ? BGT 30$ ; YESN% BIC #177770,R2 ; STRIP OF ASCII BITSD MOV #3,-(SP) ; SET SHIFT COUNTW20$: CLC ; ZERO CARRY BIT  ROL (R1) ; ROTATE BIT 15 ROL 2(R1) ; INTO BIT 16  DEC (SP) ; DONE ?A# BNE 20$ ; NO, LOOP FOR THREE BITS  TST (SP)+ ; POP OFF COUNTER  BIS R2,(R1) ; PUT IT IN  BR 10$ ; GET NEXT DIGIT:.30$: TST 2(R1) ; IS THERE MORE THAN 16 BITS ? BEQ 50$ ; NO SEC ; YES, SET 32 BIT FLAGT 50$: RETURN ; RETURN TO CALLERN .ENDC ;**-2 .END ; STRIP OF ASCII BITSD MOV #3,-(SP) ; SET SH% .TITLE PRSBAS - PARSER FOR TASKNAME .IDENT "01";T; 8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;EA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEB@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.;.@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYM?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N; ;I ; VERSION 01 ; BY H. LEV; DATE: 08/28/73A:; MODIFIED: 12/31/74 MODIFIED PR1OV FOR USE WITH BASIC MCR;O; ; O; THIS IS THE PARSER FOR COMMANDS WHICH HAVE THE NAMES AS THEIR ONLY PARAMETER..;  .MCALL CALL,RETURNS;C; EQUATED SYMBOLS ;NCR = 015 ; CARRIAGE RETURNUSPA = 040 ; SPACE A .SBTTL PARSER CODEL;+5; *** - $PRSR - PARSER ENTRY POINT - GETS TASK NAMEI; FOR COMMANDS:S; ABO[RT] TASKNAME ; CAN[CEL] TASKNAME; REM[OVE] TASKNAME;P;E8; THIS ROUTINE OBTAINS THE TASK NAME FROM THE BUFFER AND4; CONVERTS IT TO RAD50. IT THEN SEARCHS FOR A VALID>; TERMINATOR WHICH IS ONLY 'CR'. IF IT FINDS IT, IT RETURNS TO1; THE COMMAND PROCESSOR . IF NOT FOUND, IT TRAPS.%; THE ERROR PROCESSOR (SYNTAX ERROR).A; ;B; INPUT:1; R5 - POINTS TO NEXT CHARACTER IN COMMAND BUFFERA$; $MBUF - CONTAINS A00 p!s3ZgDDRESS OF BUFFER9; $MCMD - CONTAINS COMMAND PROCESSOR NAME AND ENTRY POINTS;;A ; OUTPUT:N.; $MPARS, +2 CONTAINS RAD50 TASKNAME (2 WORDS); $MPARS+4 TCB ADDRESS;I;-5$PRSR:: CMPB (R0),#CR ; IS NEXT CHAR CARRIAGE RETURN?0 BEQ PRSRER ; YES, SYNTAX ERROR;M6; WE HAVE PASSED THE COMMAND VERB, NOW WE SHOULD BE AT4; THE START OF THE TASK NAME SO WE'LL TRY TO GET IT.;H520$: MOV #$MPARS+2,R3 ; GET ADDRESS OF PARAMETER AREA  CLR (R3) ; CLEAR ITR CLR -(R3) ; OUTF' MOV PC,R1 ; SET FLAG TO ALLOW PERIODSR CALL $CAT5 ; CONVERT TO RAD50E MOV R1,(R3)+ ; STORE THEM6 BEQ PRSRER ; ZERO MEANS NONE CONVERTED, SYNTAX ERROR BCS 40$ ; LESS THAN 3 CHARSD CALL $CAT5 ; GET NEXT 3( MOV R1,(R3)+ ; STORE THEM BCS 40$ ; LESS THAN 3 CHARSS* MOVB (R0)+,R2 ; 3 GOT, GET NEXT CHARACTER;D,; TASKNAME IS STORED IN $MPARS AND $MPARS+2..40$: MOV #$MPARS,R3 ; GET ADDRESS OF TASK NAME& CLR $MPARS+4 ; SET TASK NOT IN SYSTEM) CALL $SWSTK,45$ ; SWITCH TO SYSTEM STACK # CALL $SRSTD ; SEARCH STD FOR TASKO BCS 42$ ; ERROR NOT IN SYSTEMT# MOV R0,$MPARS+4 ; SAVE TCB ADDRESSM42$: RETURN ; RETURN TO USER45$: TST $MPARS+4 ; TASK FOUND?$ BEQ 50$ ; NO ERROR RETURN ; #50$: TRAP 11. ; TASK NOT IN SYSTEM PRSRER: TRAP 2. ; SYNTAX ERRORR .ENDVB (R0)+,R2 ; 3 GOT, GET NEXT CHARACTER;D,; TASKNAME IS STORED IN $MPARS AND $MPARS+2..40$: MOV #$MPARS,R3 ; GET ADDRESS OF TASK NAME& CLR $MPARS+4 ; SET TASK NOT IN SYSTEM) CALL $SWSTK,45$ ; SWITCH TO SYSTEM STACK # CALL $SRSTD ; SEARCH STD FOR0 .TITLE REDBAS - MCR REDIRECT COMMAND PROCESSOR .IDENT "01";C;D;S8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;FA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEO@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.S;A@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;C@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;E ; VERSION: 01 ; BY: H. LEVI; DATE: 10/9/73(; MODIFIED: 1/2/75 TO RUN WITH BASIC MCR;C;C;R0; THIS MODULE PROCESSES THE MCR REDIRECT COMMAND;S .MCALL CALL,RETURND I;R; EQUATED SYMBOLS;HSPA = 040 ; SPACECR = 015 ; CARRIAGE RETURNNESC = 033 ; ESCAPEA ;++; ***-$REDEP-REDIRECT MCR COMMAND PROCESSORL; 4; THIS ROUTINE PROCESSES THE MCR REDIRECT COMMNAND.-; IT CHANGES THE REDIRECT POINTER OF A UCB TOS; POINT TO ANOTHER UCB.W;H ; FORMAT:P; RED[IRECT] NUD_OLD;; WHERE:*; [1RECT] IS OPTIONAL REST OF COMMAND NAME-; NUD IS DEVICE AND UNIT NAME TO WHICH OLD ISR; TO BE REDIRECTEDS); _ IS THE REDIRECTION OPERATOR IT MAY BE ; EITHER "_" OR "="-; OLD IS THE DEVICE AND UNIT NAME WHICH IS TO=; BE REDIRECTED TO NUD; FORMAT OF NUD AND OLD:; DDNN: ; WHERER; DD - 2 MHAR DEVICE MNEMONIC ; NN - DEVICE UNIT NUMBERC;E;E;-*$REDEP::MOVB (R0),R2 ; GET NEXT CHARACTER CMPB R2,#CR ; END OF LINE? BEQ REDER1 ; YES SYNTAX ERRORR;]&; GET NEW AND OLD DEVICE UCB ADDRESSES;A' MOV #$MPARS,R3 ; SET PARAMETER ADDRESSN CALL $FDUCB ; GET UCB ADDRESST( BCC 20$ ; SKIP IF FOUND NEW DEVICE UCB TST R3 ; SYNTAX ERROR? BEQ REDER1 ; YES% TRAP 19. ; NEW DEVICE NOT IN SYSTEMT/20$: MOV R1,(R3)+ ; SAVE NEW DEVICE UCB ADDRESS " CALL $GNBLK ; GET NEXT NON-BLANK&25$: CMPB R2,#'= ; IS IT EQUALS SIGN? BNE REDER1 ; NO, SYNTAX ERRORP* CALL $FDUCB ; GET OLD DEVICE UCB ADDRESS BCC 30$ ; SKIP IF FOUND IT TST R3 ; SYNTAX ERROR? BEQ REDER1 ; YES% TRAP 18. ; OLD DEVICE NOT IN SYSTEMA/30$: MOV R1,(R3) ; SAVE OLD DEVICE UCB ADDRESSE- BITB #US.RED,U.ST2(R1) ; IS IT REDIRECTABLE?E BEQ 70$ ; YES ( TRAP 27. ; NO, DEVICE NOT REDIRECTABLE;9; NOW GET VALID TERMINATOR;&70$: CALL $GNBLK ; GET NEXT NON-BLANK( BCC REDER1 ; ANYTHING BUT EOL IS ERROR;00!x"|DATADATADATADATADATADATADATA; TEST DEVICE TYPESS; /80$: MOV $MPARS,R5 ; SET NEW DEVICE UCB ADDRESSC0 MOV $MPARS+2,R4 ; GET UCB ADDRESS OF OLD DEVICE1 MOV U.DCB(R4),R0 ; GET DCB ADDRESS OF OLD DEVICEQ" CMP #"TI,D.NAM(R0) ; IS IT "TI" ?& BEQ REDER7 ; YES, CAN'T REDIRECT IT.1 MOV U.DCB(R5),R0 ; GET DCB ADDRESS OF NEW DEVICE1' CMP #"TI,D.NAM(R0) ; IS NEW DEVICE TI? / BEQ REDER7 ; YES, CAN'T REDIRECT TO IT EITHER  MOV R4,R0 ; COPY UCB ADDRESS/83$: MOV U.RED(R0),R0 ; FOLLOW REDIRECT POINTER $ CMP R0,U.RED(R0) ; IS THIS THE END?" BNE 83$ ; NO, CONTINUE DOWN LIST- BIT #DV.MNT,U.CW1(R0) ; IS DEVICE MOUNTABLE?+ BEQ 85$ ; NO1 BITB #US.MNT,U.STS(R0) ; YES, IS VOLUME MOUNTED?D+ BEQ REDER8 ; YES, CAN'T REDIRECT IT THEN!S(85$: TST U.ATT(R0) ; IS DEVICE ATTACHED?% BNE REDER6 ; YES, CAN'T REDIRECT ITD'87$: CMP R4,R5 ; REDIRECTING TO SELF ?  BNE 90$ ; NO5 BIT #DV.PSE,U.CW1(R4) ; YES, IS IT A PSUEDO DEVICE ?8 BNE REDER5 ; YES, CAN'T REDIRECT PSUEDO DEVICE TO SELF BEQ 110$ ; NO, THEN DO ITR;.6; AT THIS POINT R4 HAS ADDRESS OF UCB TO BE REDIRECTED0; AND R5 HAS ADDRESS OF UCB TO BE REDIRECTED TO.;+7; CHECK THAT NEW DEVICE IS NOT REDIRECTED TO OLD DEVICEE(; TO PREVENT ENDLESS LOOP OF REDIRECTION;T!90$: MOV R5,R1 ; GET UCB ADDRESS -100$: MOV U.RED(R1),R0 ; GET REDIRECT POINTERI! CMP R0,R1 ; POINTING TO ITSELF?T& BEQ 110$ ; YES, END OF REDIRECT LIST; CMP R0,R4 ; IS THE CURRENT UCB THE ONE TO BE REDIRECTED ?;< BEQ REDER4 ; YES, THIS IS AN ERROR. IF WE DO THE REDIRECT% ; WE WILL HAVE A REDIRECTION LOOPA" MOV R0,R1 ; NO, COPY UCB ADDRESS BR 100$ ; LOOP;C); EVERYTHING IS OKAY, REDIRECT OLD TO NEWW;V@110$: MOV R5,U.RED(R4) ; REDIRECT, STORE NEW UCB ADDRESS IN OLD. RETURN ; RETURN TO DISPATCHER E;C; ERRORS;0(REDER8: TRAP 25. ; 8 OLD DEVICE MOUNTED%REDER7: TRAP 22. ; 7 TI REDIRECT ERR)REDER6: TRAP 21. ; 6 OLD DEVICE ATTACHEDP1REDER5: TRAP 20. ; 5 PSUEDO DEVICE REDIRECT ERR.E+REDER4: TRAP 17. ; 4 CIRCULAR REDIRECT ERRI!REDER1: TRAP 2. ; 1 SYNTAX ERROR  .ENDR RECTION! .TITLE REMBAS REMOVE MCR COMMANDA .IDENT /02.01/ ;O;;8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;U; COPYRIGHT (C) 1976,1980N/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.P;H>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I ; VERSION: 02B; VERSION: 02.01; DATE: 08/29/73UC; MODIFIED: 12/30/74 ALTERED FIXOV TO GET REMOVE CODE FOR BASIC MCRT;E; 7; HJL025 4/7/76 CHANGE PCB, TCB AND TASK HEADER FORMATA#; JAK028 8/12/76 CHANGE TCB FORMAT 1; JAK029 12/14/76 DEALLOCATE INTERNAL TASK HEADERO;E;D;O; E. A. FLOYD 27-MAY-80 &; EF007 -- ADD V3.0 CHANGE FOR SYSTEM!; CONTROLLED PARTITION SUPPORTO;B; E. A. FLOYD 24-MAR-81A-; EF053 -- DEALLOCATE ATTACHMENT DESCRIPTORSS;T;P/; THIS MODULE PROCESSES THE MCR REMOVE COMMAND;E .MCALL PCBDF$ PCBDF$ ; DEFINE PCB OFFSETS 4;+-; *** - $REMEP REMOVE MCR COMMAND ENTRY POINTE; /; THIS MODULE PROCESSES THE REMOVE MCR COMMANDR;R;-%$REMEP::CALL $PRSR ; PARSE TASK NAME " CALL $NNBLK ; GET NEXT NON-BLANK BCS 5$ ; GOOD, EOL TRAP 2. ; SYNTAX ERROR%5$: MOV $MPARS+4,R0 ; GET TCB ADDRESST TST T.STAT(R0) ; TASK ACTIVE? BMI 10$ ; NO TRAP 16. ; YES, ERRORE.10$: CALL $SWSTK,$MCR ; SWITCH TO SYSTEM STATE1 MOV #$TSKHD-T.TCBL,R2 ; GET ADDRESS OF TASK LIST815$: CMP T.TCBL(R2),R0 ; I00"#3ZgS THIS THE POINTER TO OUR TASK BEQ 20$ ; YESM% MOV T.TCBL(R2),R2 ; NO, GET NEXT TCB BR 15$ ; TRY AGAIN@20$: MOV T.TCBL(R0),T.TCBL(R2) ; YES, REMOVE TCB AND RELINK LIST# MOV T.PCB(R0),R5 ; GET PCB ADDRESSN) MOV P.MAIN(R5),R4 ; GET MAIN PCB ADDRESS  ;EF007@ BIT #PS.SYS,P.STAT(R4) ;IS PARTITION SYSTEM CONTROLLED? ;EF007 BEQ 27$ ;EQ => NO ;EF007 ;EF007! .IF DF M$$MGE&D$$YNM ;EF007S ;EF007 MOV R0,-(SP) ; ;EF007A' MOV R1,-(SP) ;SAVE R0,R1,R2 ;EF007S MOV R2,-(SP) ; ;EF007Q8 MOV T.PCB(R0),R1 ;GET ADDRESS OF PARTITION PCB ;EF0072 MOV P.MAIN(R1),R0 ;GET MAIN PCB ADDRESS ;EF007 ;EF007625$: MOV R0,R2 ;SAVE ADDRESS OF PREVIOUS PCB ;EF0073 MOV P.SUB(R2),R0 ;GET ADDRESS OF NEXT PCB ;EF0070! CMP R0,R1 ;TASK PCB? ;EF007R BNE 25$ ;NE =>NO ;EF00777 MOV P.SUB(R0),P.SUB(R2) ;REMOVE PCB FROM LIST ;EF007D MOV (SP)+,R2 ; ;EF007) MOV (SP)+,R1 ;RESTORE R0,R1,R2 ;EF0070 MOV (SP)+,R0 ; ;EF007, ;EF007 .IFTF ;EF0070 ;EF007427$: ADD #P.BUSY,R5 ;GET BUSY BIT ADDRESS ;EF007% BICB (R5)+,(R5) ; CLEAR IT ;**-17+ BICB -(R5),P.BUSY+1(R4) ; AND MAIN BIT TOOR ;EF007 .ENDC ;EF007R ;EF007; ; CANCEL SCHEDULED REQUESTS1;T MOV R0,R5 ; SAVE TCB ADDRESS* MOV #C.SCHD,R4 ; REMOVE PERIODIC REQUESTS CALL $CLRMV ;O TST (R4)+ ; REMOVE$ CALL $CLRMV ; SINGLE SHOT REQUESTS0 CMP (R4)+,(R4)+ ; SET TO REMOVE TYPE 8 REQUESTS% CALL $CLRMV ; REMOVE THESE REQUESTS ; .; REMOVE RECIEVE LIST ENTRIES AND FREE THEM UP;E MOV R5,R4 ; GET TCB ADDRESSB, ADD #T.RCVL,R4 ; POINT TO RECIEVE LIST HEAD(30$: MOV R4,R0 ; COPY RECIEVE LIST HEAD$ CALL $QRMVF ; GET A RECIEVE PACKET BCS 31$ ;SKIP IF NO MORE MOV R1,R0 ;COPY PACKET ADDRESS$ CALL $DEPKT ;REALEASE PACKET SPACE BR 30$ ;LOOP UNTILL DONE31$: .IF DF P$$LAS MOV R5,R4 ;GET TCB ADDRESS7 ADD #T.RRFL,R4 ;POINT TO RECIEVE BY REFERENCE LISTHEADT32$: MOV R4,R0 ;COPY LISTHEAD! CALL $QRMVF ;GET RECIEVE PACKETR BCS 40$ ;SKIP IF DONER# MOV R1,-(SP) ; SAVE PACKET ADDRESS MOV R5,-(SP) ; SAVE TCB ADDRESS2 MOV 10(R1),R5 ; GET ATTACHMENT DESCRIPTOR ADDRESS( CALL $DETRG ; DETTACH REGION FROM TASK# MOV (SP)+,R5 ; RESTORE TCB ADDRESSM& MOV (SP)+,R1 ; RESTORE PACKET ADDRESS$ MOV R1,R0 ; COPY ADDRESS OF PACKET$ CALL $DEPKT ; RELEASE PACKET SPACE BR 32$ ;LOOP UNTILL DONE .ENDC40$: .IF DF M$$MGE# MOV T.PCB(R5),R1 ; GET PCB ADDRESS:& MOV P.HDR(R1),R0 ; GET HEADER ADDRESS& MOV H.HDLN(R0),R1 ; GET HEADER LENGTH/ CALL $DEACB ; DEALLOCATE INTERNAL TASK HEADER ;EF007 .IF DF D$$YNM ;EF007; ;EF007, MOV T.PCB(R5),R0 ;GET PCB ADDRESS ;EF007, MOV #P.LGTH,R1 ;GET LENGTH OF PCB ;EF007( CALL $DEACB ;DEALLOCATE PCB ;EF007 ;EF007 .ENDC ;EF007 ;EF007 .ENDC) MOV R5,-(SP) ;COPY TCB ADDRESS ;EF053N. BIT #FE.PLA,$FMASK ;PLAS SUPPORTED? ;EF053# BEQ 100$ ;EQ=>NO, CONT ;EF053 MOV R5,R4 ;COPY TCB ;EF053&50$: MOV R4,R0 ;RESTORE R0 ;EF053. MOV T.ATT(R4),R5 ;GET ATT. LISTHEAD ;EF053" BEQ 100$ ;END OF LIST ;EF053- SUB #A.TCBL,R5 ;FAKE OUT LIST LINK ;EF053B' CALL $DETRG ;DETACH REGION ;EF053L BR 50$ ;LOOP ;EF053)100$: MOV (SP)+,R5 ;RESTORE R5 ;EF053  MOV R5,R0 ;ADDRESS OF TCBF MOV #T.LGTH,R1 ; SET TCB LENGTH% CALLR $DEACB ; RELEASE SPACE OF TCB5 .ENDT #FE.PLA,$FMASK ;PLAS SUPPORTED? ;EF053# BEQ 100$ ;EQ=>NO, CONT ;EF053 MOV# .TITLE RPSBAS - RUN COMMAND PARSERV .IDENT "02"; ; ;EA; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.E; COPYRIGHT (C) 1981;BA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USER@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.E; @; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CO00#|DATADATADATADATADATADATADATANSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;E?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYS?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N ; VERSION: 02O ; BY: H. LEV ; DATE: 08/24/73T2; MODIFIED: 12/31/74 CHANGED TO RUN WITH BASIC MCR;G; E. A. FLOYD 11-MAR-81N); EF052 -- FIX PARSING OF TIME AND UNITS ;V;D,; THIS IS THE PARSER FOR THE MCR RUN COMMAND;H& .MCALL CALL,CLKDF$,DEVDF$,DIR$,RETURN;I; EQUATED SYMBOLSB;OCR = 015 ; CARRIAGE RETURNGSPA = 040 ; SPACEESC = 33 ; ESCAPE;U; LOCAL OFFSETS INTO $MPARST; TASK = 0 ; TASK NAME IN RAD50TCB = 4 ; TCB ADDRESS%CLKQ = 6 ; CLOCK QUE ELEMENT ADDRESS2RUNTYP = 10 ; RUN TYPE; 0-RUN, 1-SYNC, 2-SCHEDULE$ CLKDF$ ; DEFINE CLOCK QUE OFFSETS, DEVDF$ ; DEFINE DCB, UCB, AND SCB OFFSETS 0 .SBTTL LOCAL DATA*TIM: .ASCIZ /TSMH/ ; VALID TIME INTERVALS"TIMCD: .BYTE 1,2,3,4 ; TIME CODES(RSI: .ASCIZ /RSI/ ; RESCHEDULE INTERVAL!UIC: .ASCIZ /UIC/ ; USER ID CODE  .EVEN;T ; ERROR WORDS ;SERROR: TRAP 2. ; SYNTAX ERROR# TRAP 10. ; INVALID TIME PARAMETERK TRAP 4. ; INVALID KEYWORDC TRAP 23. ; INVALID UIC 6 .SBTTL GET TASK NAME IF ANY;+%; *** - $RPSEP-MCR RUN COMMAND PARSER-&; THIS OVERLAY PARSES THE RUN COMMAND.5; IT ALLOCATES SPACE FOR A CLOCK QUE ELEMENT AND SETS05; UP THE TIME AND RESCHEDULE INTERVAL, IF ANY, THERE.I8; IT STORES THE TASK NAME IN $MPARS AND ALSO THE ADDRESS; OF THE CLOCK QUE ELEMENT.;: ; FORMAT:C;;9; RUN TASKNAME [[DTIME]![ATIME]![SYNC [DTIME]][/SW=VALUE]A;.; WHERE:&; TASKNAME IS 1-6 CHARACTER TASK NAME2; DTIME IS START TIME IN DELTA UNITS OF THE FORM: ; NNNNNU ; WHERE:; NNNNN IS A NUMBER; U = T-TICKS; S-SECONDS; M-MINUTES; H-HOURS,; ATIME IS START TIME IN ABSOLUTE TIME FORM ; HH:MM:SS!; WHERE: HH - IS HOURS 0<=HH<24,; MM - IS MINUTES 0<=MM<60; SS - IS SECONDS 0<=SS<60; SYNC IS SYNCHRONIZATION UNITE; WHICH MAY BE; H - ON THE NEXT HOURD; M - ON THE NEXT MINUTE/; S - ON THE NEXT SECONDT; T - ON THE NEXT TICKS;A ; [/SW=VALUE] OPTIONAL KEYWORDS-; /RSI=RTIME IS OPTIONAL RESCHEDULE INTERVAL+; FORMAT FOR RTIME: IS SAME AS FOR DTIME .; /UIC=[GRP,PRG] - GROUP AND PROGRAMMER CODES; GRP - IS GROUP CODEI; PRG - IS PROGRAMMER CODE;M;-)$RPSEP::CALL $PRSR ; PARSE OUT TASK NAMEM DEC R0 ; BACKUP BUFFER POINTER, MOV #$MPARS,R5 ; GET PARAMETER AREA ADDRESS CLR RUNTYP(R5) ; ZERO RUN TYPE ;-; ALLOCATE CLOCK QUE ELEMENT;H*50$: CLR CLKQ(R5) ; SET NO CLOCK QUE ENTRY) CALL $SWSTK,52$ ; SWITCH TO SYSTEM STACKA1 MOV #C.LGTH,R1 ; SET LENGTH OF CLOCK QUE ELEMENTE CALL $ALOCB ; ALLOCATE ITT BCS 5$ ; COULDN'T GET ONET MOV R0,CLKQ(R5) ; SAVE ADDRESSN$5$: RETURN ; RETURN TO USER STACK252$: MOV CLKQ(R5),R4 ; GET CLOCK QUE ENTRY ADDRESS) BNE 56$ ; GOOD, GOT A CLOCK QUE ELEMENTR54$: TRAP 3. ; NO POOL SPACEV 56$: MOV #C.LGTH/2,R3 ; GET SIZE$ MOV R4,R1 ; COPY CLOCK QUE ADDRESS57$: CLR (R4)+ ; ZERO WORDE DEC R3 ; DONE ?R BGT 57$ ; NO, LOOP+ MOV $MUCB,R4 ; GET UCB ADDRESS OF TERMINALS, MOV U.UIC(R4),C.UIC(R1) ; STORE DEFAULT UIC CLR R4 ; CLEAR ERROR INDEX; ; GET COMMAND PARAMETERS;D&60$: CALL $GNBLK ; GET NEXT NON-BLANK6 MOV $MPARS+CLKQ,R5 ; GET ADDRESS OF CLOCK QUEUE ENTRY BCS RUNIT ; EOLO CMPB R2,#'/ ; KEYWORD? BEQ 100$ ; YES L; ; TEST FOR TYPE OF TIME FIELDO;O380$: INC $MPARS+RUNTYP ;SET UP ERROR FLAG ;EF05213 CMPB R2,#'0 ; IS NEXT CHAR A VALID DIGIT ;EF052R BLO 95$ ; NO ;**-1T CMPB R2,#'9 ; MAYBE$ BHI 95$ ; DEFINATELY NOT! DEC R0 ; POINT TO THE CHARACTER)= DEC $MPARS+RUNTYP ; VALID CHAR FOUND, CLR ERROR FLAG ;EF052O;N6; DELTA TIME OR ABSOLUTE TIME, PROCESS DELTA TIME HERE;M- CMP #1,RUNTYP+$MPARS ; IS THIS RUN OR SYNC ?E BLT RUNER1 ; NO, ERROR DEC R0 ; BACKUP BUFFER POINTER CALL GETIME ; CONVERT TIME BCS 90$ ; NOT DELTA TIME86$: BR 60$ ;;;; ABSOLUTE TIME ;;)90$: CMPB R2,#': ; IS IT ABSOLUTE T00#$3ZgIME ?D BNE RUNER2 ; NOB MOV -(R5),R1 ; GET HOURSC% MOV R5,R3 ; GET CLOCK QUEUE ADDRESSA CALL $GETIM ; GET TIME FIELD CLR R4 ; ZERO ERROR CODET BCS RUNER2 ; SYNTAX ERRORR DEC R0 ; BACK UP TO TERMINATOR) MOV #2,$MPARS+RUNTYP ; SET SCHEDULE MODE BR 60$ ;;T; SYNCHRONIZATION UNIT;S(95$: TST $MPARS+RUNTYP ; VALID FOR SYNC? BNE RUNER1 ; NO, SYNTAX ERRORE TST R1 ; ANY BALNKS SEEN BEQ RUNER1 ; NO, SYNTAX ERROR 0 INC $MPARS+RUNTYP ; SET SYCHRONIZATION RUN TYPE CALL TIMCOD ; GET TIME CODEN BCS RUNER1 ; ERROR MOV R1,4(R5) ; STORE IT BR 60$ ; ; GET KEYWORD PARAMETERS; 100$: MOV #UIC,R1 ; IS KEYWORD  CALL .KEYWD ; "UIC" ?  BCC 110$ ; YES MOV #RSI,R1 ; IS KEYWORD CALL .KEYWD ; "RSI"N BCS RUNER3 ; NO, ERROR BVS RUNER3 ; ERROR;N; RESCHEDULE INTERVAL (RSI)P;+- ADD #C.RSI,R5 ; POINT TO RSI PARAMETER FIELDN CALL GETIME ; GET TIME" BCS RUNER2 ; ERROR, INVALID TIME TST -(R5) ; IS COUNT ZERO ?; BNE 86$ ; NO# INC (R5) ; YES, SO SET IT TO ONE!E" BR 60$ ; TRY FOR ANOTHER KEYWORD;(; USER ID CODE (UIC);;,110$: BVS RUNER3 ; NO EQUALS, KEYWORD ERROR CMPB (R0)+,#'[ ; BRACKET NEXT ? BNE RUNER1 ; NO, SYNTAX ERROR" CALL $GTNUM ; CONVERT GROUP CODE* MOVB R1,C.UIC+1(R5) ; TO BINARY AND STORE BEQ RUNER4 ; ZERO IS ERROR CMPB #',,R2 ; COMMA NEXT ? BNE RUNER1 ; NO, SYNTAX ERRORE' CALL $GTNUM ; CONVERT PROGRAMMER CODES( MOVB R1,C.UIC(R5) ; TO BINARY AND STORE BEQ RUNER4 ; ZERO IS ERROR CMPB #'],R2 ; TERIMNATOR ? BEQ 60$ ; YESB BR RUNER1 ; NO, SYNTAX ERROR(RUNIT: JMP $RUNEP ; EXECUTE RUN COMMAND  .SBTTL ERROR PROCESSINGRUNER4: INC R4 ; INVALID UICT"RUNER3: INC R4 ; INVALID KEY WORD(RUNER2: INC R4 ; INVALID TIME PARAMETERRUNER1: ; SYNTAX ERRORY' CALL $RLCLK ; RELEASE CLOCK QUE ENTRY ASL R4 ; DOUBLE INDEXT JMP ERROR(R4) ; ISSUE ERROR O .SBTTL SUBROUTINESO;+; *** - GETIME GET A TIME FIELDC;) ; INPUTS:Y); R0 - POINTS TO NEXT CHAR OF TIME FIELDCK; R5 - POINTS TO TWO WORD FIELD; WORD1-TIME MAGNITUDE, WORD2-TIME INTERVAL ; OUTPUTS:); R0 - POINTS TO NEXT CHARACTER IN BUFFERT; R1 - TIME IN MAGNITUDE; R2 - TIME INTERVAL CHARACTER*; R5 - POINTS TO WORD AFTER TWO WORD BLOCK; ; CARRY BITP; CLEAR-NO ERRORS; SET - BAD TIME FIELD;K;-GETIME:L CALL $CDTB ; CONVERT TO BINARY MOV R1,(R5)+ ; STORE DELTA TIME CALL TIMCOD ; GET TIME CODE+ BCS 30$ ; ERRORT MOV R1,(R5) ; STORE IT30$: RETURN ;T;+$; *** - TIMCOD - CONVERT TIME CODE; ; INPUT:; R2 - CODE CHARACTERG;U ; OUTPUT:I; R1 - TIME CODE NUMERIC;0; USED: ; R1;H;-'TIMCOD: CLR R1 ; ZERO INDEX INTO TABLE(10$: CMPB R2,TIM(R1) ; IS THIS THE CODE? BEQ 20$ ; YES ! INC R1 ; NO, INDEX TO NEXT CODE  TSTB TIM(R1) ; END OF TABLE? BNE 10$ ; NO SEC ; YES, ERRORC BR 30$ ;$20$: MOVB TIMCD(R1),R1 ; GET NUMERIC30$: RETURN ;I .END GET TIME CODE+ BCS 30$ ; ERRORT MOV R1,(R5) ; STORE IT30$: RETURN ;T;+$; *** - TIMCOD - CONVERT TIME CODE; ; INPUT:;  .TITLE RUNBAS - RUN COMMAND .IDENT "02";M;O8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.;O; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;E>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; ; VERSION: 02E ; BY: H. LEVE; DATE: 08/24/73U8; MODIFIED00$|DATADATADATADATADATADATADATA: 12/31/74 CHANGED RUNOV TO RUN WITH BASIC MCR;T;S3; HJL025 4/7/76 CHANGE PCB, TCB, AND HEADER FORMAT ; ;M2; THIS MODULE PROCESSES THE PARSED MCR RUN COMMAND;O! .MCALL CALL,CLKDF$,RETURN,TCBDF$ ; ;EQUATED SYMBOLS; (TASK = 0 ; TASK NAME OFFSET INTO $MPARSTCB = 4 ; TCB ADDRESS%CLKQ = 6 ; CLOCK QUE ELEMENT ADDRESSO2RUNTYP = 10 ; RUN TYPE, 0-RUN, 1-SYNC, 2-SCHEDULE$ CLKDF$ ; DEFINE CLOCK QUE OFFSETS TCBDF$ ; DEFINE TCB OFFSETS; ; LOCAL DATA; #ERRCOD: .WORD 0 ; ERROR CODE INDEX4;A; ERROR TRAP CODES;BRERTAB: TRAP 2. ; SYNTAX ERROR  TRAP 11. ; TASK NOT IN SYSTEMA TRAP 16. ; TASK ACTIVE TRAP 14. ; TASK BEING ABORTEDA ;+); *** - $RUNEP - MCR RUN COMMAND EXECUTORU;; THIS OVERLAY RECEIVES CONTROL FROM THE RUN COMMAND PARSERC.; WHICH SETS UP THE FOLLOWING AREAS FOR RUNEP: ; $MPARS, +2 TASK NAME IN RAD50; $MPARS+4 ADDRESS OF TCB(; $MPARS+6 ADDRESS OF CLOCK QUE ELEMENT0; $MPARS+10 RUN TYPE; 0-RUN, 1-SYNC, 2-SCHEDULE; CLOCK QUE ELEMENT; RUN AND SYNC; +0 - DELTA TIME COUNT; +2 - DELTA TIME UNITS; SYNC; +4 - SYNCHRONIZATION UNIT T ; SCHEDULE; +0 - HOURS4; +2 - MINUTESR; +4 - SECONDS 6; C.RSI,+2 RESCHEDULE INTERVAL UNITS AND CODE,; C.UIC UIC SPECIFIED ON COMMAND;C9; THIS OVERLAY USES THIS INFORMATION TO START UP A TASK.K;; IF THE START TIME AND RESCHEDULE TIMES ARE ZERO, THE TASKS9; IS STARTED BY A CALL TO THE EXECUTIVE SUBROUTINE $TSKRQC<; AND THE UCB ADDRESS OF THE REQUESTING TERMINAL IS PUT INTO6; THE TASKS TCB. IF ANY OF THESE TIMES ARE NONE ZERO,:; THE TASK IS REQUESTED BY MAKING AN ENTRY IN THE CORRECT ; CLOCK QUE. ;-'$RUNEP:: CLR R4 ; ZERO ERROR INDICATORR CLR ERRCOD ;/ MOV #$MPARS,R5 ; GET ADDRESS OF PARAMETER AREA & MOV RUNTYP(R5),R0 ; GET RUN TYPE CODE3 MOV CLKQ(R5),R5 ; GET ADDRESS OF CLOCK QUE ELEMENTE TST R0 ; IS IT RUN REQUEST ? BEQ RUN ; YESS DEC R0 ; NO, IS IT SYNCT BEQ SYNC ; YES& BR SCHED ; NO, MUST BE SCHEDULE THEN;T; RUNE;N .ENABL LSB "RUN: MOV (R5),R0 ; GET DELTA TIME BIS C.RSI(R5),R0 ; ADD RSI( BEQ 10$ ; IF ITS ZERO, THIS IS RUN NOW* CALL DTIME ; CONVERT DELTA TIME TO TICKS# CALL SETRSI ; SET RESCHEDULE TIMEC+ MOV $MPARS+TCB,C.TCB(R5) ; GET TCB ADDRESSF+ CALL $SWSTK,RUNXT ; SWITCH TO SYSTEM STACKN.RUNINS: MOV R5,R0 ; GET QUEUE ELEMENT ADDRESS# MOV C.TCB(R0),R5 ; GET TCB ADDRESSN% MOVB C.RQT(R0),R4 ; GET REQUEST TYPE; MOV C.TIM(R0),R2 ; GET LOW PART# MOV C.TIM+2(R0),R1 ; GET HIGH PARTH$ CALLR $CLINS ; INSERT IN CLOCK QUE10$: BR RUNIMD ; RUN NOWI .DSABL LSBI ) .SBTTL SYNCHRONIZE TASK+SYNC: MOV 2(R5),$MPARS+10 ; SAVE DTIME UNIT;' CALL SETRSI ; SET RESCHEDULE INTERVALI% MOV 4(R5),$MPARS+6 ; SAVE SYNC UNITSC" MOV $MPARS+10,R1 ; GET DTIME UNIT- MOV 2(R5),$MPARS+10 ; GET CLOCK REQUEST TYPES MOV R1,2(R5) ; SET DTIME UNITSA* CALL DTIME ; CONVERT DELTA TIME TO TICKS0 MOV $MPARS+10,2(R5) ;RESTORE CLOCK REQUEST TYPE+ MOV $MPARS+TCB,C.TCB(R5) ; GET TCB ADDRESS ! MOV $MPARS+6,R3 ; GET SYNC UNITSI+ CALL $SWSTK,RUNXT ; SWITCH TO SYSTEM STACKI10$: DEC R3 ; TICKS ? BEQ RUNINS ; YES MOV R3,R2 ; GET UNITS TYPE" ASL R2 ; MAKE IT INTO WORD INDEX% NEG R2 ; CONVERT TO NEGATIVE OFFSETR- MOV $TKPS+2(R2),R1 ; GET MAX NUMBER OF UNITS ; DEC R1 ; SUBTRACT ONE FOR CARRIES OUT OF NEXT HIGHER UNITM7 SUB $TTNS+2(R2),R1 ; COMPUTE UNITS LEFT TILL SYNC TIMEL MOV R3,R2 ; GET UNITS CODE CALL TICKS ; CONVERT TO TICKSY& ADD R1,C.TIM(R5) ; ADD TO OTHER UNITS ADC C.TIM+2(R5) ; ADD R0,C.TIM+2(R5) ;I5 BR 10$ ; LOOP UNTIL SYNC TIME IS CONVERTED TO TICKSC  .SBTTL SCHEDULE TASK 1SCHED: CALL $SWSTK,RUNXT ; SWITCH TO SYSTEM STACKK) MOV #2,-(SP) ; SET UNITS CODE TO SECONDS , MOV R5,R3 ; COPY CLOCK QUE ELEMENT ADDRESS ADD #6,R3 ; POINT TO SECONDS! TST $TTNS ; ANY TICKS CLOCKED ? , BEQ 10$ ; NO, THAN NO CARRY OUT OF SECONDS6 DEC -2(R3) ; SUBTRACT ONE FOR CARRIES OUT OF SECONDS10$: MOV (SP),R2 ; GET COUNT  ASL R2 ; MAKE IT A WORD INDEXR% NEG R2 ; CONVERT TO NEGATIVE OFFSETI MOV -(R00$3Zg3),R1 ; GET TIME. SUB $TTNS+2(R2),R1 ; CONVERT TO RELATIVE TIME BGE 12$ ; IF POSITIVE OKAYB ADD $TKPS+2(R2),R1 ; NEGATIVE MEANS CARRY OUT OF NEXT HIGHER UNIT CMP #4,(SP) ; IS UNIT HOURS ?  BEQ 12$ ; YESE/ DEC -2(R3) ; NO, SO SUBTRACT FROM HIGHER UNITT"12$: MOV (SP),R2 ; GET UNITS CODE CALL TICKS ; CONVERT TO TICKSS.15$: ADD R1,C.TIM(R5) ; ADD UP TICKS, LOW PART ADC C.TIM+2(R5) ; CARRY BIT# ADD R0,C.TIM+2(R5) ; AND HIGH PARTA# INC (SP) ; INCREMENT TO NEXT UNITE CMP (SP),#5 ; DONE ? BGT 17$ ; YES BLT 10$ ; NO, LOOP MOV $TKPS,R1 ; GET MAX TICKS1. SUB $TTNS,R1 ; COMPUTE TICKS LEFT THIS SECOND CLR R0 ; ZERO HIGH PARTE BR 15$ ; PROCESS TICKS17$: TST (SP)+ ; CLEAR STACK$+ MOV $MPARS+TCB,C.TCB(R5) ; GET TCB ADDRESS . CALL SETRSI ; SET RESCHEDULE INTERVAL IF ANY BR RUNINS ; START UP TASKI S .SBTTL RUN IMMEDIATE +RUNIMD: MOV $MPARS+TCB,R0 ; GET TCB ADDRESSC/ BIT #T2.HLT,T.ST2(R0) ; IS TASK BEING ABORTED?I BNE RUNER4 ; YES+ CALL $SWSTK,RUNXT ; SWITCH TO SYSTEM STACK1 MOV C.UIC(R5),R1 ; GET UICO4 MOV $MUCB,R2 ; GET UCB ADDRESS OF STARTING TERMINAL4 CMPB #33,$MTERM ; WAS TERMINATOR AN ESCAPE(ALTMODE) BNE 10$ ; NO3 BIS #T3.MCR,T.ST3(R0) ; YES, SET TO PROMPT ON EXITP 10$: CALL $TSKRQ ; REQUEST TASK) BCS RUNER3 ; ERROR, TASK ALREADY ACTIVE ( CALL RLCLK ; RELEASE CLOCK QUEUE ENTRY B ,RUNIM1: RETURN ; SWITCH BACK TO USER STACKRUNXT: TST ERRCOD ; ANY ERRORS2# BNE RUNERR ; YES, GO PROCESS THEMR&RUNEX: RETURN ; RETURN TO DISPATCHER O .SBTTL ERROR PROCESSING&RUNER4: INC R4 ; 4 TASK BEING ABORTEDRUNER3: INC R4 ; 3 TASK ACTIVE&RUNER2: INC R4 ; 2 TASK NOT IN SYSTEM&RUNER1: MOV R4,ERRCOD ; SET ERROR CODE'RUNERR: TST $STKDP ; ON SYSTEM STACK ?P$ BEQ RUNIM1 ; YES, THEN GET OFF IT.) CALL $RLCLK ; RELEASE CLOCK QUE ELEMENTC MOV ERRCOD,R4 ; GET ERROR CODEE ASL R4 ; DOUBLE IT% JMP RERTAB(R4) ; ISSUE ERROR MESSAGEU : .SBTTL SUBROUTINESR;+&; *** - TICKS - CONVERT TIME TO TICKS;E; INPUT:; R1 - NUMBER OF UNITS:; R2 - UNITS CODE 1-TICKS, 2-SECONDS, 3-MINUTES, 4-HOURS;A ; OUTPUT:E!; R0 - HIGH PART OF TIME IN TICKS2 ; R1 - LOW PART OF TIME IN TICKS ; R2 - ZERO4;R;-,TICKS: CLR -(SP) ; PUSH HIGH PART OF ANSWER' MOV R1,-(SP) ; PUSH LOW PART OF ANSWERT/10$: DEC R2 ; TICKS DON'T NEED TO BE CONVERTEDN BLE 30$ ; DONE( MOV R2,R0 ; NOT DONE, SO GET TIME CODE ASL R0 ; MAKE IT A WORD INDEXS$ NEG R0 ; CONVERT TO NEGATIVE INDEX= MOV $TKPS+2(R0),R0 ; GET NUMBER OF LOWER UNITS PER THIS UNITE MOV 2(SP),R1 ; GET HIGH PART & BEQ 20$ ; IF HIGH PART IS ZERO, SKIP MOV R0,-(SP) ; SAVE MULTIPLIERO CALL $MUL ; MULTIPLY" MOV (SP)+,R0 ; RESTORE MULTIPLIER MOV R1,2(SP) ; STORE HIGH PART 20$: MOV (SP),R1 ; GET LOW PART CALL $MUL ; MULTIPLY ADD R0,2(SP) ; ADD HIGH PARTS MOV R1,(SP) ; SET LOW PART' BR 10$ ; LOOP TILL CONVERTED TO TICKSO 30$: MOV (SP)+,R1 ; SET LOW PART MOV (SP)+,R0 ; SET HIGH PARTE RETURNA E;+:; *** - SETRSI - CONVERT RSI TO TICKS AND STORE IN CLOCK; QUE ELEMENTR; ; INPUT:#; R5 - ADDRESS OF CLOCK QUE ELEMENTO; C.RSI - RESCHEDULE COUNT ; C.RSI+2 - RESCHEDULE UNIT CODE; ; OUTPUT:R; R5 - UNCHANGED"; C.RSI - LOW PART OF RSI IN TICKS%; C.RSI+2 - HIGH PART OF RSI IN TICKSC; ;-(SETRSI: MOV C.RSI(R5),R1 ; GET RSI COUNT$ MOV C.RSI+2(R5),R2 ; GET UNITS CODE* BEQ 10$ ; IF ZERO NO RESCHEDULE INTERVAL CALL TICKS ; CONVERT TO TICKS(" MOV R1,C.RSI(R5) ; STORE LOW PART% MOV R0,C.RSI+2(R5) ; STORE HIGH PARTT1 MOVB #C.SCHD,C.RQT(R5) ; SET PERIODIC RESCHEDULE BR 20$ ; 5510$: MOVB #C.SSHT,C.RQT(R5) ; SET SINGLE SHOT REQUESTC20$: RETURN ; ;+3; *** - DTIME - CONVERT DELTA TIME TO CLOCK TICKS ;S; INPUT:#; R5 - ADDRESS OF CLOCK QUE ELEMENTP; 0(R5) - COUNT OF UNITS; 2(R5) - UNITS CODE;, ; OUTPUT:I; R5 - UNCHANGED'; C.TIM(R5) - LOW PART OF TIME IN TICKSF*; C.TIM+2(R5) - HIGH PART OF TIME IN TICKS;N;-$DTIME: MOV 2(R5),R2 ; GET UNITS CODE* MOV (R5),R1 ; GET NUMBER OF THESE UNITS CALL TICKS ; CONVERT TO TICKSE( MOV R1,C.TIM(R5) ; 00$%DATADATADATADATADATADATADATASAVE DELTA TIME LOW  MOV R0,C.TIM+2(R5) ; AND HIGH BIS R0,R1 ; IS IT ZERO ? BNE 10$ ; NO0 INC C.TIM(R5) ; YES, THEN FORCE TO DEFAULT OF 110$: RETURN ;  - .ENABL LSBL;+,; *** - $RLCLK - RELEASE CLOCK QUE ELEMENT; ; INPUT:,; $MPARS+CLKQ - ADDRESS OF CLOCK QUE ELEMENT; ; OUTPUT: ; NONE;K;-/$RLCLK:: CALL $SWSTK,10$ ; SWITCH TO USER STACK-7RLCLK: MOV #C.LGTH,R1 ; GET LENGTH OF CLOCK QUE ELEMENTE' MOV $MPARS+CLKQ,R0 ; GET ADDRESS OF ITC CALL $DEACB ; RELEASE IT10$: RETURN ; .DSABL LSB .END,C.TIM+2(R5) ; AND HIGH BIS R0,R1 ; IS IT ZERO ? BNE 10$ ; NO0 INC C.TIM(R5) ; YES, THEN FORCE TO DEFAULT OF 110$: RETURN ;  - .ENABL LSBL;+,; *** - $RLCLK - RELEASE CLOCK QUE ELEMENT; ; INPUT:,; $MPARS+CLKQ - ADDRESS OF CLOCK QUE ELEMENT; ; OUTPUT: ; NONE;K;-/$RLCLK:: CALL $SWSTK,10$ ; SWITCH TO USER STACK-7RLCLK: MOV #C.LGTH,R1 ; GET LENGTH OF CLOCK QUE ELEMENTE' MOV $MPARS+CLKQ,R0 ; GET ADDRESS OF ITC CALL $DEACB ; RELEASE IT10$: RET% .TITLE TIMBAS TIME AND DATE ROUTINE5 .IDENT "03";S;,; 8; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS.; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.-;L>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I ; VERSION: 02B ; BY: H. LEV ; DATE: 08/27/73 7; MODIFIED: 12/27/74 TO PRINT DATE IN FORMAT DD-MMM-YYE+; MODIFIED: 12/31/74 TO RUN WITH BASIC MCR ;T;E"; HJL026 4/7/76 CHANGE TIME FORMAT;;I; ,; THIS MODULE PROCESSES THE MCR TIME COMMAND;A; ; EQUATED SYMBOLSA;S; CR = 015 ; CARRIAGE RETURNTSPA = 040 ; SPACEEFN1 = 1 ; EVENTOLUN1 = 1 ; LOGICAL UNIT- .MCALL CALL,DEVDF$,DIR$,HWDDF$,RETURN,WTSE$ST! DEVDF$ ; DEFINE DEVICE OFFSETST% HWDDF$ ; DEFINE HARDWARE REGISTERS  O .SBTTL LOCAL DATA,TIMTIM: .ASCIZ $::$ ; VALID TIME TERMINATOR,TIMDAT: .ASCIZ $//$ ; VALID DATE TERMINATOR 3;4 ; DATE FIELDSA; DAT: .RAD50 /JAN/0 .RAD50 /FEB/E .RAD50 /MAR/ .RAD50 /APR/S .RAD50 /MAY/E .RAD50 /JUN/C .RAD50 /JUL/ .RAD50 /AUG/L .RAD50 /SEP/= .RAD50 /OCT/E .RAD50 /NOV/ .RAD50 /DEC/F;1'; VALID LIMITS FOR TIME AND DATE FIELDS.;L .EVEN-TIMLMT: .WORD 0,23. ; VALID LIMITS FOR HOURSE .WORD 0,59. ; FOR MINUTES  .WORD 0,59. ; FOR SECONDS  .WORD 1,12. ; FOR MONTH .WORD 1,31. ; FOR DAYL .WORD 0,99. ; FOR YEAR%TDFLG: .WORD 0 ; TIME AND DATE FLAGS ; BIT 0 - TIME IS BEING SET: ; BIT 1 - DATE IS BEING SET. 5 .SBTTL $TIMOV CODER;++; *** - $TIMEP - TIME AND DATE MCR FUNCTION;.#; FORMAT: TIM [HH:MM:SS][ MM/DD/YY] ;T9; WHERE: HH:MM:SS-IS OPTIONAL TIME OF DAY TO SET CLOCK TOR; HH=00-23 HOUR; MM=0-59 MINUTEI; SS=0-59 SECOND;;L/; MM/DD/YY-IS OPTIONAL DATE TO SET CALENDAR TO ; MM = 1-12 MONTH ; DD = 1-31 DAY1; YY = 0-99 YEAR;DA; IF NEITHER TIME NOR DAY IS SPECIFIED, THE CURRENT TIME AND DAYE&; WILL BE PRINTED ON THE "TI" DEVICE.2; IF ONLY TIME IS SPECIFIED THE CLOCK WILL BE SET6; IF ONLY DATE IS SPECIFIED, THE CALENDAR WILL BE SETB; IF TIME AND DAY IS SPECIFIED THE CLOCK AND CALENDAR WILL BE SET-; THE ORDER OF TIME AND DATE ON THE COMMAND T7; IS NOT SIGNIFICANT AND EITHER ORDER WILL BE ACCEPTEDN;;-;$TIMEP:: CMPB (R0),#CR ; IS NEXT CHARACTER CARRIAGE RETURN? 1 BEQ TIMDIS ; YES, DISPLAY CURRENT TIME AND DATE" MOV $MUCB,R00%3Zg1 ; GET TI UCB ADDRESS0 BIT #U2.PRV,U.CW2(R1) ; IS TERMINAL PRIVILEGED? BNE 10$ ; YESC$ TRAP 6. ; PRIVILEGED COMMAND ERROR;K3; THERE IS MORE IN LINE , DECIDE WHAT IS TO BE DONED;W-10$: CLR TDFLG ; INITIALIZE TIME/ DATE FLAGS ) MOV #$MPARS,R1 ; POINT TO PARAMETER AREAR MOV #6.,R2 ; SET WORD COUNTD 20$: CLR (R1)+ ; ZERO NEXT WORD DEC R2 ; DONE? BNE 20$ ; NO, LOOP30$: CALL $CDTB ; GET A NUMBERA$ CMPB R2,#': ; TERMINATOR FOR TIME? BEQ 40$ ; YESU CMPB R2,#'/ ; NO, FOR DATE ? BNE 80$ ; NO, ERRORS;B; GET DATE FIELD;; BIS #2,TDFLG ; SET DATE FLAG1( MOV #TIMDAT,R4 ; SET TERMINATOR ADDRESS/ MOV #$MPARS+6,R3 ; POINT TO DATE STORAGE FIELD 5 MOV #TIMLMT+14,R5 ; SET ADDRESS OF DATE FIELD LIMITSD CALL GETDAT ; GET DATE FIELD BCS 80$ ; ERRORE BR 70$ ;; ; GET TIME FIELD;0!40$: BIS #1,TDFLG ; SET TIME FLAGC- MOV #$MPARS,R3 ; POINT TO TIME STORAGE FIELDC CALL $GETIM ; GET TIME FIELD BCS 80$ ; ERRORR%70$: CMPB R2,#CR ; YES, END OF LINE  BEQ TIMSET ; YES CMPB #SPA,R2 ; SPACE ? BEQ 30$ ; YES80$: TRAP 2. ; SYNTAX ERROR;1G; TIME AND DATE HAVE BEEN CONVERTED TO BINARY, NOW SET CLOCK + CALENDARD; $TIMSET: BIT TDFLG,#2 ; SETTING DATE? BEQ 5$ ; NOA$ CALL TSTDAY ; YES, CHECK DAY VALUE BCS 30$ ; ERROR$&5$: MTPS #PR7 ;;; LOCK OUT INTERRUPTS8 MOV #$MPARS+14,R3 ;;; SET ADDRESS OF DATE STORAGE FIELD" BIT TDFLG,#2 ;;; DO WE HAVE DATE? BEQ 10$ ;;; NO+ MOV R1,$TKPS-10 ;;; SET DAYS IN THIS MONTH2 MOV -(R3),$TTNS-14 ;;; SET YEAR MOV -(R3),$TTNS-10 ;;; DAY;! MOV -(R3),$TTNS-12 ;;; AND MONTHA'10$: BIT #1,TDFLG ;;; DO WE HAVE TIME ?  BEQ 15$ ;;; NO8 MOV #$MPARS+6,R3 ;;; SET ADDRESS OF TIME STORAGE FIELDS# MOV #$TTNS,R1 ;;; GET TIME ADDRESSA MOV -(R3),-(R1) ;;; SET SECONDS MOV -(R3),-(R1) ;;; MINUTES MOV -(R3),-(R1) ;;; AND HOURS(15$: MTPS #0 ;;; ENABLE CLOCK INTERRUPT20$: BR TIMXIT ; GOTO EXITG30$: TRAP 2. ; SYNTAX ERROR;$; DISPLAY DATE + TIME-;;;S/TIMDIS: MOV #$TTNS-6,R0 ;;; GET ADDRESS OF TIMEE* MOV #$MPARS,R1 ; POINT TO PARAMETER BLOCK MTPS #PR7 ;;; INHIBIT CLOCK0 MOV (R0)+,(R1)+ ;;; GET HOURS MOV (R0)+,(R1)+ ;;; MINUTES MOV (R0)+,(R1)+ ;;; AND SECONDS! MOV $TTNS-12,(R1)+ ;;; GET MONTH; MOV $TTNS-10,(R1)+ ;;; DAYR MOV $TTNS-14,(R1) ;;; AND YEARR MTPS #0 ;;; ENABLE CLOCK, MOV #$MPARS,R5 ; GET ADDRESS OF TIME + DATE% MOV $MBUF,R3 ; GET ADDRESS OF BUFFER + MOV #TIMTIM,R4 ; GET ADDRESS OF TERMINATOR-10$: CALL CBT2A ; CONVERT PARAMETER TO ASCIIT TSTB (R4) ; END OF TIMET BEQ 20$ ; YESS* MOVB (R4)+,(R3)+ ; NO, PUT IN TERMINATOR BR 10$ ;;C ; PUT IN DATE(;+"20$: MOVB #40,(R3)+ ; PUT IN BLANK MOV (R5),R1 ; GET MONTH; MOV 2(R5),(R5) ; SWAP WITH DATE MOV R1,2(R5) ; CALL CBT2A ; GET DAY" MOVB #'-,(R3)+ ; PUT IN SEPARATOR MOV (R5)+,R1 ; GET MONTHO DEC R1 ; CONVERT TO INDEXR ASL R1 ; INTO DATE# MOV DAT(R1),R1 ; GET DATE IN RAD50 MOV R3,R0 ; GET BUFFER ADDRESS CALL $C5TA ; CONVERT TO ASCIIN! MOV R0,R3 ; COPY BUFFER POINTER)# MOVB #'-,(R3)+ ; PUT IN TERMINATORM CALL CBT2A ; GET YEART; 3; PRINT OUT DATE + TIME FORMAT: HH:MM:SS DD-MMM-YY.M; * MOV $MBUF,$MDPB+14 ; SET A BUFFER ADDRESS MOV #18.,$MDPB+16 ; LENGTHW CALL $DOIO ; PRINT IT OUT;C; EXIT;;TIMXIT: RETURN ; RETURN TO DISPATCHER V .SBTTL SUBROUTINESO;+'; *** - TMTSTL - TEST TIME DATE LIMITST;A ; INPUTS:T"; R1 - CONTAINS VALUE TO BE TESTED%; R5 - POINTS TO TWO WORD LIMIT ENTRY ; WORD1 - LOW LIMIT ON VALUE3; WORD2 - HIGH LIMIT ON VALUE;, ; OUTPUTS:; R1 - UNCHANGED"; R5 - UPDATED TO NEXT LIMIT ENTRY$; C - CLEAR GOOD VALUE LOW<=X<=HIGH#; C - SET BAD VALUE LOW>X OR X>HIGH ;U;-6TMTSTL: CMP R1,(R5)+ ; IS VALUE LOWER THAN LOW LIMIT ? BLT 10$ ; YES, ERROR. CMP R1,(R5)+ ; IS IT HIGHER THAN HIGH LIMIT ? BGT 10$ ; YES, ERROR CLC ; NO, GOOD VALUE  BR 20$ ; RETURNM10$: SEC ; SET ERROR FLAGC20$: RETURN ; ;D;+1; *** - CBT2A CONVERT BINARY TO TWO ASCII DIGITSW;M ; INPUTS:3; ; R3 - POINTS TO BUFFERL(; (R5) - CONTAINS NUMBER TO 00%&DATADATADATADATADATADATADATABE CONVERTED;U ; OUTPUTS:;L7; R3 - UPDATE TO POINT TO NEXT AVAILABLE BYTE IN BUFFERE*; R5 - POINTS TO NEXT WORD IN LIST ((R5)+);M;--CBT2A: MOV (R5)+,R0 ; GET NUMBER FOR DIVIDEND1 MOV #10.,R1 ; SET DIVISOR) CALL $DIV ; DIVIDE NUM BY 10.?* ADD #'0,R1 ; ADD ASCII BIAS TO LOW DIGIT+ ADD #'0,R0 ; ADD ASCII BIAS TO HIGH DIGITE! MOVB R0,(R3)+ ; STORE HIGH DIGITD MOVB R1,(R3)+ ; STORE LOW DIGIT RETURN ;  G;+8; *** - TSTDAY - CHECK DAY VALUE WITH RESPECT TO MONTH;A; INPUT:; $MPARS+6 MONTH; +10 DAYL; +12 YEAR;I ; OUTPUT:A; CARRY CLEAR - DAY OKAY; CARRY SET - DAY BADO; REGISTER R0 IS USED;;-#TSTDAY: MOV $MPARS+6,R0 ; GET MONTHD DEC R0 ; IS THIS JANUARY?I BNE 5$ ; NOV MOV #12.,R0 ; YES?25$: MOVB $DYPMN-1(R0),R1 ; GET DAYS FOR THIS MONTH DEC R0 ; IS THIS FEBRUARY? BNE 10$ ; NO( BIT #3,$MPARS+12 ; IS THIS A LEAP YEAR? BNE 10$ ; NO# INC R1 ; YES, IT HAS ONE MORE DAYS(10$: CMP R1,$MPARS+10 ; IS DAY THE 29TH? BGT 20$ ; YES: SEC ; NO, SET ERROR20$: RETURN ; ;+!; *** - $GETIM - GET TIME FIELDL; ; INPUT:+; R0 - ADDRESS OF BEGINNING OF MINUTE FIELDE; R1 - HOUR IN BINARY ; R2 - COLON!; R3 - PARAMETER ADDRESS FOR TIMEA;I ; OUTPUT:;; R0 - UPDATED; R2 - TERMINATORB; R3 - UPDATED;G; USED:O ; R4, AND R5;C;-9$GETIM:: MOV #TIMTIM,R4 ; GET ADDRESS OF TIME TERMINATORSS! MOV #TIMLMT,R5 ; GET TIME LIMITS"GETDAT: CALL TMTSTL ; TEST LIMITS BCS 50$ ; BADA MOV R1,(R3)+ ; STORE TIME! CMPB R2,(R4) ; CHECK TERMINATORR BNE 20$ ; NOT RIGHT+# INC R4 ; POINT TO NEXT TERMINATOR+ CALL $CDTB ; CONVERT NEXT FIELD TO BINARYM BR GETDAT ; LOOP20$: TSTB (R4) ; END OF FIELD?  BEQ 40$ ; YESD( TSTB 1(R4) ; NO, NEXT CHARACTER LAST? BNE 30$ ; NO, ERRORB CMPB (R4),#': ; TIME FIELD? BEQ 40$ ; YESC30$: SEC ; ERROR BR 50$ ; 40$: CLC ;50$: RETURN ;S .END#TIMLMT,R5 ; GET TIME LIMITS"GETDAT: CALL TMTSTL ; TEST LIMITS BCS 50$ ; BADA MOV R1,(R3)+ ; STORE TIME! CMPB R2,(R4) ; .IIF NDF $OTLEP .NLIST2; ;OC; COPYRIGHT (C) 1975, 1979, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.T;XA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEE@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.;:@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;O@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N; VERSION 01.02 ; BY: THOMAS J MILLER; DATE: 2/4/75C;B; MODIFIED BY:;U; J. H. MATTHEWS 22-JAN-79;C5; JM024 -- ADDED RT FORMAT SUPPORT FOR TU58 AND RX02I; AND TS11 SUPPORTN;Y; E. A. FLOYD 23-NOV-80A;N8; EF031 -- ADD TCB, LABEL BLOCK, AND HEADER DEFINITIONS; ;UO; OTLPRE - PREFIX FILE FOR ASSEMBLING MODULES OF THE RSX-11S ONLINE TASK LOADERE;A;+; N; WHEN APPRORIATE, INDIRECT REGISTER REFERENCES IN OTL MODULES, NOT CONTAININGP; SYMBOLIC OFFSETS, ARE ACCOMPANIED IN THE COMMENT FIELD BY A DESCRIPTION OF THEJ; EFFECTIVE ADDRESS OF THE REFERENCE FOR THE EXECUTION OF THE INSTRUCTION.H; THE DESCRIPTION CONSISTS OF A SYMBOL NAME ENCLOSED IN PARENS WHERE THEP; SYMBOL IS AN OFFSET IN A BLOCK OF DATA OR THE SYMBOL FOR AN OTL DATA LOCATION.;D;-;S; MACRO LIBRARY CALLSE;  .MCALL PCBDF$( .MCALL TCBDF$,HDRDF$,LBLDF$ ;EF031; PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS AND MASKSN0 TCBDF$ ;DEFINE TCB OFFSETS AND MASKS ;EF0317 LBLDF$ ;DEFINE LABEL BLOCK OFFSETS AND MASKS ;EF031O2 HDRDF$ ;DEFINE HEADER OFFSETS AND MASKS ;EF031;EL; CONDITIONAL ASSEMBLY VARIABLE FOR FULL ERROR MESSAGE REPORTING. WITH FULLJ; ERROR MESSAGE REPORTING, ERROR MESSAGES INCLUDE A NUMERIC ERROR CODE ANDO; A BRIEF ASCII DESCRIPTION OF THE ERROR CONDITION. WITHOUT FULL ERROR MESSAGE N; REPORTING, THE ASCII DESCR00&'3ZgIPTION IS OMITTED. FOR FULL REPORT OF ERRORS, THEL; SYMBOL "R$$ERM" MUST BE DEFINED HERE. IF FULL REPORT OF ERROR MESSAGES ISK; NOT DESIRED, THE DEFINITION OF "R$$ERM" MUST BE PRECEDED BY A SEMI-COLON.N+; THE DEFINITION LINE FOR "R$$ERM" FOLLOWS.O;T ;R$$ERM=0Y;A-; MACRO FOR INCLUDING SUPPORT OF LOAD DEVICESL; O; THE FIRST ARGUMENT IN THE INCLUD MACRO IS THE SYMBOL WHICH OTL MODULES USE TOEH; CONDITIONALIZE CODE SPECIFIC TO SUPPORT OF THE PARTICULAR LOAD DEVICE.Q; THE SECOND ARGUMENT IS THE SYMBOL WHICH IS PLACED IN THE ASSEMBLY PREFIX MODULEYO; RSXMC DURING SYSGEN TO INDICATE THE PRESENCE OF A DRIVER FOR THE DEVICE. THEEM; MACRO CAUSES THE FIRST SYMBOL TO BE DEFINED IF THE SECOND SYMBOL IS PRESENTI ; IN RSXMC.O;R .MACRO INCLUD A,B .IF DF BYA=0A .ENDC .ENDM;NO; EACH OF THE FOLLOWING INCLUD STATEMENTS CAUSE SUPPORT FOR THE DESIGNATED LOADYM; DEVICE TO BE INCLUDED IN OTL IF THE STANDARD DRIVER FOR THE DEVICE HAS BEENEO; GENERATED INTO THE SYSTEM. IF THE STANDARD DRIVER FOR A LOAD DEVICE HAS BEENTL; INCLUDED IN THE SYSTEM, BUT SUPPORT FOR THAT DEVICE IN OTL IS NOT DESIRED,J; THE CORRESPONDING INCLUD STATEMENT MUST BE PRECEDED BY A SEMI-COLON (;).O; NO DEVICE SUPPORT WILL BE GENERATED IN OTL FOR DEVICES FOR WHICH DRIVERS HAVEDM; NOT BEEN GENERATED INTO THE SYSTEM. THE DEVICES ARE LISTED ALPHABETICALLY.S;U& INCLUD PR11,P$$R11 ;PC11/PR11 SUPPORT! INCLUD RX11,R$$X11 ;RX11 SUPPORTD" INCLUD RX21,R$$X21 ;RX211 SUPPORT! INCLUD TA11,T$$A11 ;TA11 SUPPORTS! INCLUD TC11,T$$C11 ;TC11 SUPPORTS! INCLUD TM11,T$$M11 ;TM11 SUPPORTU! INCLUD TS11,T$$S11 ;TS11 SUPPORT ! INCLUD TU16,T$$J16 ;TU16 SUPPORTN! INCLUD TU58,T$$U58 ;TU58 SUPPORTA;-C; INSURE FORMATTED BINARY VARIABLE DEFINED IF PAPER TAPE TO BE USEDF;W .IF DF PR11R$$FB=0N .ENDC; :; IF CASSETTE OR MAGTAPE DEFINE SINGLE BLOCK READ VARIABLE;  .IF DF TA11!TM11!TU16!TS11R$$SBR=0 .ENDC;D; SAVE REGISTER MACROR;1 .MACRO SAVRG$ CALL $SAVAL .ENDM .IIF NDF $OTLEP .LIST1 ;TC11 SUPPORTS! INCLUD TM11,T$$M11 ;TM11 SUPPORTU! INCLUD TS11,T$$S11 ;TS11 SUPPORT ! INCLUD TU16,T$$J16 ;TU16 SUPPORTN! INCLUD TU58,T$$U58 ;TU58 SUPPORTA;-C; INSURE FORMATTED BINARY VARIABLE DEFINED IF PAPER TAPE TO BE USEDF;W .IF DF PR11R$$FB=0N .ENDC; :; IF CASSETTE OR MAGTAPE DEFINE SINGLE BLOCK READ VARIABLE;  .IF DF TA11!TM11!TU16!TS11R$$SBR=0 .ENDC;D; SAVE REGISTER MACROR;1 .MACRO SAVRG$ CALL $SAVAL .ENDM .IIF NDF $OTL .TITLE OTL1 .IDENT /02/;U;MA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.U;U; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.N;E>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; ; VERSION: 01E; BY: THOMAS J MILLER; DATE: 2/4/75 ;H8; OTL - MAIN CONTROL LOOP FOR RSX-11S ONLINE TASK LOADER;T ;O; MACRO LIBRARY CALLSO;A S .MCALL QIO$2$$$GLB=0 ;FORCE GLOBAL DEFINITION OF QIO OFFSETS QIO$U T; ; LOCAL SYMBOL DEFINITIONS;O E!TS$NHD=40000 ;COMMON BLOCK FLAGO T;T; GLOBAL IMPURE DATA;  P/$UIC:: .BLKW 1 ;UIC UNDER WHICH OTL IS RUNNING )$TCB:: .BLKW 1 ;POINTER TO ALLOCATED TCBO)$STKSV::.BLKW 1 ;STACK POINTER SAVE AREA ;+;5; *** - $OTLEP ENTRY POINT FOR THE ONLINE TASK LOADER ;4;- H; 7; 00'(DATADATADATADATADATADATADATASAVE UIC UNDER WHICH OTL IS RUNNING AND STACK POINTERT; O3$OTLEP::MOV $HEADR,R0 ;PICK ADDRESS OF OTL'S HEADERB MOV H.CUIC(R0),$UIC ;SAVE UIC" MOV SP,$STKSV ;SAVE STACK POINTER Y;+;F ; *** - $RSTRT OTL RESTART POINT;M7; RESTORE STACK POINTER AND DETACH PREVIOUS LOAD DEVICEC;.;- .$RSTRT::CLR $TCB ;CLEAR ALLOCATED TCB POINTER* MOV #IO.DET,$LQDPB+Q.IOFN ;SET FOR DETACH> CALL $QIOL ;DETACH OLD DEVICE (ERRORS ON DETACH ARE IGNORED) T;R"; INITIATE NEXT TASK LOAD SEQUENCE;  ( CALL $OTLCD ;GET COMMAND AND DECODE IT% CALL $OTLLD ;INITIALIZE LOAD DEVICER( CALL $OTLLB ;PROCESS FIRST LABEL BLOCK, BIT #TS$NHD,R4 ;IS TASK IMAGE COMMON BLOCK? BNE 10$ ;IF NE YES0 CALL $OTLHD ;PROCESS TASK HEADER AND LOAD TASK BR $RSTRT ;RESTART$10$: CALL $OTLCM ;LOAD COMMON BLOCK BR $RSTRT ;RESTART E .END $OTLEPCB POINTER* MOV #IO.DET,$LQDPB+Q.IOFN ;SET FOR DETACH> CALL $QIOL ;DETACH OLD DEVICE (ERRORS ON DETACH ARE IGNORED) T;R"; INITIATE NEXT TASK LOAD SEQUENCE;  .TITLE OTLCD .IDENT /02/;D;DA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.S; COPYRIGHT (C) 1980); DIGITAL EQUIPMENT CORP., MAYNARD, MASS.;EA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.C;E@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;C@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N ; VERSION: 02O; BY: THOMAS J MILLER; DATE: 2/4/75D;N; MODIFIED BY:;C; E. A. FLOYD 21-NOV-80G-; EF030 -- ADD INC SWITCH TO COMMAND DECODER;S;Y; P.J. KOBAR 1-JUN-81I+; PJK058 -- FIX PROBLEMS WITH PLAS SUPPORT ;S<; OTLCD - COMMAND DECODER FOR THE RSX-11S ONLINE TASK LOADER;B;S; MACRO LIBRARY CALLSY;G .MCALL EXIT$S;R ; LOCAL DATA; ; ;EF030SD; WORD FOR AMOUNT TO INCREASE TASK SIZE (IN 32 WORD BLOCKS) ;EF030 ;EF030 .IF DF M$$MGE ;EF030 ;EF030$INCAM::.BLKW= 1 ;EF030 ;EF030 .ENDC ;EF030 ; ASCII FOR DEFAULT EXTENSION ;TTSKASC: .ASCIZ /TSK/ ;;+;.1; *** - $OTLCD READ AND PARSE AN OTL COMMAND LINEA;U;- .ENABL LSB A$OTLCD::MOV #IO.ATT,$TQDPB+Q.IOFN ;SET ATTACH FUNCTION IN TTY DPBA CALL $QIOT ;ATTACH TTY11$: MOV #$FBBUF,R1 ;POINT TO COMMAND INPUT BUFFER; MOV (PC)+,(R1)+ ;MOVE IN PROMPT .BYTE 15,'O ;  MOV #"TL,(R1)+ ;E MOVB #'>,(R1)+ ;0 SUB #$FBBUF,R1 ;CALCULATE COUNT CALL $OUTMG ;PRINT IT:8 MOV #IO.RVB,$TQDPB+Q.IOFN ;SET TO READ VIRTUAL FUNCTION MOV #39.,R1 ;SET MAXIMUM COUNT CALL $QIOT ;READ COMMAND LINE  BPL 5$ ;IF PL NO ERROR* CMPB R0,#IE.EOF ;END OF FILE? (CNTRL/Z?) BEQ 4$ ;IF EQ YESO TRAP ER.IOE ;ELSE I/O ERROR 4$: TST $IOSB+2 ;ANY INPUT?" BNE 10$ ;IF NE YES, SYNTAX ERROR:$OTLXT::MOV #IO.DET,$TQDPB+Q.IOFN ;SET FOR DETACH FUNCTION CALL $QIOT ;DETACH TERMINALO EXIT$S ;EXITR+5$: MOV $IOSB+2,R1 ;PICK UP CHARACTER COUNTC& BEQ 1$ ;IF EQ NO INPUT, PROMPT AGAIN: MOV #IO.DET,$TQDPB+Q.IOFN ;SET DETACH FUNCTION IN TTY DPB CALL $QIOT ;DETACH TTY& MOV #$FBBUF,R0 ;POINT TO COMMAND LINE$ MOV #$FLBLK,R3 ;POINT TO FILE BLOCK8 MOV #$FLRAD,R4 ;POINT TO DESTINATION FOR FILENAME RAD50;R; OTLPS - COMMAND LINE PARSER ;SK; THIS IS A SPECIALIZED PARSER FOR EXTRACTING DOS FILENAME INFORMATION FROMDK; OTL COMMAND LINES. TWO BLOCKS ARE FILLED IN AS THE RESULT OF THIS PARSE. ; THEY ARE:O;I0; FILE-SPECIFIER BLOCK: WORD0= ASCII DEVICE NAME; WORD1= OCTAL UNIT NUMBER#; WORD2= UICO$; WORD3= FILE-NAME STRING POINTER); WORD4= FILE-EXTENSION STRING POINTERI;T7; FILE-NAME RAD50: WORD0= FIRST WORD OF FILE-NAME RAD50V*; WORD1= SECOND WORD OF FILE-NAME RAD50 ; WORD2= FILE-EXTENSION RAD50;E ; 00(3ZgINPUTS:S; ; R0=POINTER TO COMMAND STRING&; R1=CHARACTER COUNT OF COMMAND STRING$; R3=POINTER TO FILE-SPECIFIER BLOCK%; R4=POINTER TO FILE-NAME RAD50 BLOCKE; ; OUTPUTS:;I; BLOCKS ARE FILLED IN; R0-R4 ARE LOST; &OTLPS: MOV R0,R5 ;COPY BUFFER POINTER&7$: CMPB (R5),#141 ;LOWER-CASE LETTER? BLO 8$ ;IF LO NO CMPB (R5),#172 ;S BHI 8$ ;IF HI NO% BICB #40,(R5) ;CONVERT TO UPPER CASE $8$: INC R5 ;POINT TO NEXT CHARACTER DEC R1 ;CHARS REMAINING? BNE 7$ ;IF NE YESN% CLRB (R5)+ ;CONVERT STRING TO ASCIZR. CLRB (R5) ;SIMPLIFY DETECTION OF SINGLE CHAR: MOV (R0)+,(R3)+ ;INSERT DEVICE-NAME ASCII INTO SPEC BLOCK5 MOV #':-60,R2 ;INDICATE NEXT VALID NON-NUMERIC (-60)C/ CALL COTB ;INSERT UNIT NUMBER INTO SPEC BLOCKM$ TST (R3)+ ;BUMP SPEC BLOCK POINTER# MOV $UIC,(R3) ;TENTATIVELY SET UICO CMPB (R0),#'[ ;EXPLICIT UIC?  BNE 30$ ;IF NE NOO) INC R0 ;OTHERWISE POINT TO GROUP NUMBER$/ MOV #',-60,R2 ;INDICATE NEXT VALID NON-NUMERICR0 CALL COTB ;INSERT GROUP NUMBER INTO SPEC BLOCK* TSTB (R3)+ ;NULL GROUP NUMBER SPECIFIED? BNE 20$ ;IF NE NOL10$: TRAP ER.SYN ;SYNTAX ERRORD420$: MOVB #']-60,R2 ;INDICATE NEXT VALID NON-NUMERIC0 CALL COTB ;INSERT OWNER NUMBER INTO SPEC BLOCK TSTB (R3)+ ;NULL SPECIFIED?C BEQ 10$ ;ERROR IF SO% SWAB -(R3) ;REVERSE GROUP AND OWNERT)30$: TST (R3)+ ;POINT TO FILE-NAME ENTRYC.40$: MOV #$FLBUF,R1 ;POINT TO FILE-NAME BUFFER,45$: MOVB (R0)+,(R1)+ ;MOVE FILE NAME STRING" CMP R1,#$FLBUF+11. ;MOVED ENOUGH? BLOS 45$ ;IF LO NO! CLRB (R0)+ ;INSURE ASCIZ STRINGL& MOV #$FLBUF,R0 ;SET TO CONTINUE PARSE' MOV R0,(R3)+ ;INSERT FILE-NAME POINTER/ CLR R1 ;SET TO CONVERT TO RAD50 (STOP ON ".")R CALL $CAT5 ;CONVERT IT' MOV R1,(R4)+ ;MOVE IT INTO RAD50 BLOCK; BNE 50$ ;BR IF NOT NULL 3 TSTB -(R0) ;OTHERWISE DID WE TERMINATE ON A NULL? BNE 10$ ;ERROR IF NOT 50$: BCC 60$ ;CONTINUE IF CCB6 DEC R0 ;OTHERWISE INSURE THAT WE POINT TO TERMINATOR%60$: CLR R1 ;SET FOR NEXT CONVERSION+ CALL $CAT5 ;CONVERTO+ MOV R1,(R4)+ ;SET SECOND WORD OF FILE NAMES' BCS 70$ ;BR IF R2 CONTAINS TERMINATORP+ MOVB (R0)+,R2 ;OTHERWISE PICK UP NEXT CHAR<70$: MOV #TSKASC,(R3) ;TENTATIVELY SET FOR DEFAULT EXTENSION MOV (PC)+,(R4) ;V .RAD50 /TSK/ ; ;PJK058 .IF DF M$$MGE ;PJK058 ;PJK058S1 CLR $INCAM ;CLEAR THE INCREMENT VALUE ;PJK058  ;PJK058  .ENDC ;PJK058 ;PJK058E TSTB R2 ;AT END OF LINE? BEQ 90$ ;EXIT IF SO ( CMPB R2,#'. ;ELSE WAS LAST CHAR A "."?& BEQ 75$ ;PROCESS EXTENSION ;EF030' CMPB R2,#'/ ;ANY SWITCHES? ;EF030A# BR 77$ ;PROCESS SWITCH ;EF030U<75$: CLRB -1(R0) ;CONVERT FILE-NAME STRING TO ASCII ;EF0307 CLRB -1(R0) ;CONVERT FILE-NAME STRING TO ASCIZ ;**-1 + MOV R0,(R3) ;POINT TO SPECIFIED EXTENSION  CLR R1 ;SET TO CONVERT IT  CALL $CAT5 ;CONVERT TO RAD50' MOV R1,(R4) ;LOAD IT INTO RAD50 BLOCK ' BCS 80$ ;BR IF R2 CONTAINS TERMINATORA1 MOVB (R0)+,R2 ;ELSE PICK UP CHAR AFTER EXTENSION. ;EF03077$: ;EF030 ;EF030 .IF DF M$$MGE ;EF030Y ;EF030' CMPB R2,#'/ ;ANY SWITCHES? ;EF030U$ BNE 10$ ;ERROR -- SYNTAX ;EF030, CMPB (R0)+,#'I ;PARSING FOR "INC" ;EF030 BNE 10$ ; ;EF030C CMPB (R0)+,#'N ; ;EF030T BNE 10$ ; ;EF030 CMPB (R0)+,#'C ; ;EF030C BNE 10$ ; ;EF030D CMPB (R0)+,#'= ; ;EF030  BNE 10$ ; ;EF030B, CALLR INCPRO ;PROCESS INC SWITCH ;EF030 ;EF030 .ENDC ;EF030 80$: TSTB R2 ;AT END OF LINE? BNE 10$ ;ERROR IF NOTD 90$: RETURN .DSABL LSB ; ; COTB - CONVERT OCTAL TO BINARY; ; INPUTS:;E%; R0=POINTER TO START OF OCTAL STRING #; R2=ASCII OF VALID TERMINATOR - 600); R3=POINTER TO BYTE FOR CONVERTED NUMBER ; ; OUTPUTS:;E*; R0=POINTER TO CHARACTER AFTER TERMINATOR ; R1 IS LOST7; BYTE ADDRESSED BY R3 CONTAINS CONVERTED BINARY NUMBERE;$(COTB: CLRB (R3) ;INITIALIZE OUTPUT BYTE&10$: MOVB (R0)+,R1 ;PICK UP FIRST CHAR SUB #60,R1 ;CONVERT TO BINARY2 BITB #370,R1 ;VALID NUMERIC?00()DATADATADATADATADATADATADATA BEQ 30$ ;IF EQ YES$ CMPB R1,R2 ;ELSE VALID TERMINATOR? BEQ 40$ ;EXIT IF SO $20$: TRAP ER.SYN ;ELSE SYNTAX ERROR:30$: ASLB (R3) ;SHIFT CURRENT BYTE AND CHECK FOR OVERFLOW BCS 20$ ; ASLB (R3) ;T BCS 20$ ; ASLB (R3) ;E BCS 20$ ;R( BISB R1,(R3) ;ACCUMULATE BINARY NUMBER BR 10$ ;GET NEXT CHAR3 40$: RETURNV ;EF030 .IF DF M$$MGE ;EF030T ;EF030R; INCPRO - CONVERT A NUMBER TO BINARY (ASSUMED DECIMAL IF FOLLOWED BY A "." ;EF030!; OTHERWISE, OCTAL) ;EF030I(; INPUT: R0 = BUFFER ADDRESS ;EF0301; OUTPUTS: R0 = UPDATED BUFFER POINTER ;EF030S-; R1 = CONVERTED NUMBER TO BINARY ;EF030B<; R2 = LAST CHARACTER SCANNED (AFTER ".", IF FOUND) ;EF030; ;EF030) ;EF030INCPRO: ;EF030A ;EF030, MOV R0,-(SP) ;SAVE BUFFER POINTER ;EF030/ CALL $CDTB ;CONVER DECIMAL TO BINARY ;EF030 . CMPB R2,#'. ;END IN DECIMAL POINT? ;EF030% BNE 60$ ;NO, OCTAL NUMBER ;EF030 . MOVB (R0)+,R2 ;YES, POINT BEYOND IT ;EF030 BR 80$ ; ;EF030/60$: MOV (SP),R0 ;GET BUFFER POINTER ;EF030T. CALL $COTB ;CONVERT OCTAL TO BINARY ;EF030'80$: TST (SP)+ ;CLEAN STACK ;EF030A. ADD #77,R1 ;ROUND TO NEXT 32W BLOCK ;EF030* BIC #77,R1 ;CONVERT FROM BYTES ;EF030# ASR R1 ;TO 32 W BLOCKS ;EF030P# ASR R1 ;CLEAR SIGN BIT ;EF030L ASR R1 ; ;EF030 ASR R1 ; ;EF030 ASR R1 ; ;EF030 ASR R1 ; ;EF030) CMP R1,#2000 ;INCREASE BY 32K? ;EF030  BLT 100$ ;NO ;EF030 TRAP ER.INC ;ERROR ;EF0301100$: MOV R1,$INCAM ;STORE BLOCK COUNT ;EF030T% CMP R2,#52 ;END OF LINE? ;EF030  BEQ 120$ ;YES ;EF030E# TRAP ER.SYN ;NO, ERROR ;EF030O ;EF030120$: ;EF030R RETURN ;EF030 ;EF030 .ENDC ;EF030F .ENDASR R1 ;CLEAR SIGN BIT ;EF030L ASR R1 ; ;EF030 ASR R1 ; ;EF030 ASR R1 ; ;EF030 ASR R1 ; ;EF030) CMP R1,#2000 ;INCREASE BY 32K? ;EF030  BLT 100$ ;NO .TITLE OTLCMR .IDENT /02/; ;0A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;N; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.,;R>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; ; VERSION 02; BY: THOMAS J MILLER6; (BASED ON INSTALL COMMON BLOCK PROCESSOR BY H. LEV); DATE: 2/21/75;R; @; 002 14-JUL-76 JO ANN KASSON ;V3 LABEL BLOCK AND HEADER CHANGES;N; C; OTLCM - COMMON BLOCK PROCESSOR FOR THE RSX-11S ONLINE TASK LOADER ;H ;+;I6; *** - $OTLCM OTL COMMON BLOCK PROCESSING AND LOADING;J; FOR MAPPED SYSTEMS THE P.PDR AND P.NAPR ENTRIES OF THE PARTITION CONTROLM; BLOCK ARE SET UP. LABEL BLOCKS AND CHECKPOINT AREA ARE PAST OVER, THE TASK -; IMAGE IS LOADED AND THE TCB IS DEALLOCATED. B; THE FOLLOWING REGISTERS ARE ASSUMED TO BE POINTING AS INDICATED:; ; R2 -> P.STAT IN PCB $; R5 -> L$BMXZ IN LABEL BLOCK BUFFER;N;- R$OTLCM::   .IF DF M$$MGE O P E R .IFTF X S/ MOV #$PARRL,R3 ;POINT TO SAVED RELOCATION BIASL O C .IFTL  C# CMP (R3),#7600 ;I/O PAGE? ($PARRL)S E T .IFFR D N% CMP (R3),#160000 ;I/O PAGE? ($PARRL)  C R .ENDC L L BHIS 50$ ;IF HIS YES, DONE/ MOV -(R3),R0 ;PICK UP BLOCKS IN TABLE ($TBLBK) 10$: DEC R0 ;BLOCKS REMAINING?W BEQ 30$ ;IF EQ NOU00)*3Zg20$: CALL $RDBLK ;READ BLOCK: BR 10$ ;RETURN FOR MORE 230$: CMP R3,#$HDRBK ;ALREADY PAST CHECKPOINT AREA?% BEQ 40$ ;IF EQ YES, LOAD TASK IMAGEP: MOV -(R3),R0 ;ELSE LOAD COUNT OF CHECKPOINT AREA ($HDRBK), BNE 20$ ;IF NE THEN CHECKPOINT AREA EXISTS)40$: MOV $TSKSZ,R1 ;PICK UP SIZE ($TSKSZ)F   .IF DF M$$MGE 0 I$ MOV #140000,R5 ;SET VIRTUAL ADDRESS L B .IFF  F S# MOV $PARRL,R5 ;SET VIRTUAL ADDRESSO  T .ENDC K  CALL $RDBK1 ;LOAD TASK IMAGE&50$: MOV $TCB,R0 ;PICK UP TCB ADDRESS9 CALLR $DETCB ;DEALLOCATE TCB AND RETURN TO MAIN CONTROLD ; ($DETCB IS IN OTLERR)E  .END$ ;IF EQ YES, LOAD TASK IMAGEP: MOV -(R3),R0 ;ELSE LOAD COUNT OF CHECKPOINT AREA ($HDRBK), BNE 20$ ;IF NE THEN CHECKPOINT AREA EXISTS)40$: MOV $TSKSZ,R1 ;PICK UP SIZE ($TSKSZ)F   .IF DF M$$MGE 0 I$ MOV #140000,R5 ;SET VIRTUAL ADDRESS L B .IFF  F S# MOV $PARRL,R5 ;SET VIRTUAL ADDRESSO  T .ENDC K  CALL $RDBK1 ;LOAD TASK IMAGE&50$: MOV $TCB,R0 ;P .TITLE OTLERR .IDENT /01.02/ ;E;O; COPYRIGHT (C) 1979,1980 A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.O;TA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEB@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.;@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;O@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N; VERSION 01.02 ; BY: THOMAS J MILLER; DATE: 2/4/75C;B;O; MODIFIED BY:;N; J. H. MATTHEWS 29-JAN-79;O;; JM025 -- ADD SUPPORT FOR SYSTEM TYPE IN TASK LABEL BLOCKV;D; E. A. FLOYD 27-MAY-80!; EF008 -- ADD V3.0 CHANGES FOR !; SYSTEM CONTROLLED PARTITIONSI;A; E. A. FLOYD 21-NOV-80E(; EF030 -- ADD INC SWITCH ERROR SUPPORT;P; P.J. KOBAR 1-JUN-81S(; PJK058 -- FIX PROBLEMS WITH PLAS CODE;LI; OTLERR - ERROR HANDLER AND RECOVERY ROUTINE FOR THE RSX-11S ONLINE TASK; LOADER;S;1 ; LOCAL DATA;A; ERROR CODE MACRO;4 .MACRO ERRCOD NAMNAM==NN=N+1. .ENDM;2; ERROR MESSAGE MACRO-;D .IF DF R$$ERM .MACRO .ERR NUM,MSG .PSECT .ERRTB .WORD ER'NUM .PSECT .ERRS ER'NUM:.RAD50 %'MSG'%<'.-22> .ENDM .IFTF;A; ERROR CODE DEFINITIONS; N=2- ERRCOD ER.SYN ERRCOD ER.POL ERRCOD ER.NVK ERRCOD ER.DNS ERRCOD ER.PRV ERRCOD ER.PNS ERRCOD ER.IOEN=40.H ERRCOD ER.NBA ERRCOD ER.APR ERRCOD ER.NAP ERRCOD ER.CHK ERRCOD ER.BFB ERRCOD ER.EOF ERRCOD ER.BIG ERRCOD ER.COM ERRCOD ER.OVL ERRCOD ER.TAE ERRCOD ER.TND ERRCOD ER.BMM ERRCOD ER.NCB ERRCOD ER.PSZ ERRCOD ER.NFL ERRCOD ER.CTP ERRCOD ER.CNL ERRCOD ER.CBL ERRCOD ER.CBB ERRCOD ER.CBP ERRCOD ER.PNC ERRCOD ER.ILD ERRCOD ER.NVI ERRCOD ER.PBS ERRCOD ER.CTG ERRCOD ER.BSZ ERRCOD ER.FRQ ERRCOD ER.NVD ERRCOD ER.IWB ERRCOD ER.TKB ERRCOD ER.INC ;EF030;EO; *** - $STVEC SST VECTOR USED TO PROVIDE THE LINKAGE BETWEEN TRAP INSTRUCTIONSR; AND THE ERROR ROUTINEG;E $STVEC::.WORD 0,0,0,0,0,0,ERRTRP;T; ERROR MESSAGE PREFIX; OTLMS: .ASCIZ /OTL -- /R .IFT .ASCIZ / - /R .IFTF .EVEN;E; ERROR MESSAGE TABLER;B .IFT  .PSECT .ERRTBEERRTAB=.- ;DEFINE SO CODE ER.SYN INDEXES TO START OF TABLER .ERR \ER.SYN, .ERR \ER.POL,R .ERR \ER.NVK,<>$ .ERR \ER.DNS, .ERR \ER.PRV,<>' .ERR \ER.PNS,I .ERR \ER.IOE,3 .ERR \ER.NBA,T .ERR \ER.APR,T. .ERR \ER.NAP,/ .ERR \ER.CHK,S- .ERR \ER.BFB,R2 .ERR \ER.EOF,- .ERR \ER.BIG,>4 .ERR \ER.COM, .ERR \ER.OVL,( .ERR \ER.TAE,% .ERR \ER.TND,R1 .ERR \ER.BMM, $ .ERR \ER.NCB,7 .ERR \ER.PSZ,. .ERR \ER.NFL,. .ERR \ER.CTP,' .ERR \ER.CNL, , .ERR \ER.CBL,* .ERR \ER.CBB,/ .ERR \ER.CBP,V$ .ERR \ER.PNC, .ERR \ER.ILD,# .ERR \ER.NVI,R! .ERR \ER.PBS,  .ERR \ER.CTG,<>1 .ERR \ER.BSZ,I" .ERR \ER.FRQ,# .ERR \ER.NVD,R& .ERR \ER.IWB,+ .ERR \ER.TKB,2 .ERR \ER.INC, ;EF030 .ENDC;+;H$; *** - ERRTRP ERROR TRAP PROCESSING;CF; THE EXEC PASSES CONTROL TO THIS ROUTINE UPON THE EXECUTION OF A TRAP; INSTRUCTION WITHIN OTL. ;.; INPUTS FROM THE EXEC:R;.-; (SP)=LOW ORDER BYTE OF TRAP INSTRUCTION * 2,; ; OUTPUTS:;I?; AN APPROPRIATE ERROR MESSAGE IS PRINTED AND OTL IS RESTARTED.I;>;- .PSECT,(ERRTRP: MOV (SP)+,R5 ;PICK UP ERROR CODE% MOV $STKSV,SP ;RESTORE STACK POINTERS0 CALL CLENUP ;DEALLOCATE TCB AND FREE PARTITION- MOV #OTLMS,R4 ;POINT TO ERROR MESSAGE PREFIX' MOV #$FBBUF,R0 ;POINT TO OUTPUT BUFFER!10$: MOVB (R4)+,(R0)+ ;MOVE IT INI( BNE 10$ ;CONTINUE UNTIL END OF MESSAGE MOV R5,R1 ;PICK UP ERROR CODEN* ASR R1 ;DIVIDE BY 2 TO GET ORIGINAL CODE! CLR R2 ;ENABLE ZERO SUPPRESSION / CALL $CBDMG ;CONVERT ERROR TO ASCII IN BUFFERR .IF DF R$$ERM$15$: MOVB (R4)+,(R0)+ ;MOVE IN " - " BNE 15$ ;K8 CMP R5,#ER.IOE*2 ;ERROR IN SECOND RANGE OF ERROR CODES? BLE 20$ ;IF LE NOTA SUB #*2,R5 ;ELSE ADJUST FOR CORRECT TABLE INDEXE520$: MOV ERRTAB(R5),R4 ;PICK UP ERROR MESSAGE POINTERV% MOV R0,R3 ;DUPLICATE BUFFER POINTERC025$: MOV (R4)+,R1 ;PICK UP FIRST WORD OF MESSAGE* CALL $C5TA ;CONVERT AND MOVE INTO BUFFER$30$: CMPB (R3)+,#'. ;END OF MESSAGE? BEQ 40$ ;IF EQ YES5 CMP R3,R0 ;CHECKED ALL CHARS IN CURRENT CONVERSION?E BLO 30$ ;IF LO NO), BR 25$ ;CONVERT NEXT WORD OF RAD50 MESSAGE540$: MOVB #15,-(R3) ;CHANGE PERIOD TO CARRIAGE RETURN28 SUB #$FBBUF-1,R3 ;CALCULATE CHARACTER COUNT FOR MESSAGE. MOV R3,R1 ;PASS IT TO OUTPUT MESSAGE ROUTINE .IFFR1 MOVB #15,(R0)+ ;MOVE CARRIAGE RETURN INTO BUFFERN SUB #$FBBUF,R0 ;CALCULATE COUNT MOV R0,R1 ;PASS COUNT IN R1T .ENDC CALL $OUTMG ;PRINT ITP JMP $RSTRT ;RESTART OTL?;Q9; CLENUP - ROUTINE TO DEALLOCATE TCB AND UNBUSY PARTITION ;V .ENABL LSB3,CLENUP: MOV $TCB,R0 ;POINT TO ALLOCATED TCB+ BEQ 20$ ;IF EQ THEN ONE WAS NOT ALLOCATEDE ;EF008 .IF NDF D$$YNM ;EF008 ;EF008% CLR $TCB ;INDICATE NO TCB ALLOCATEDT ;EF008 .ENDC ;EF008 ;EF008& MOV T.PCB(R0),R1 ;PICK UP PCB POINTER BEQ 10$ ;IF EQ THEN NONE+ MOV P.MAIN(R1),R2 ;POINT TO MAIN PARTITION ;EF008 .IF DF D$$YNM ;EF008R ;EF008? BIT #PS.SYS,P.STAT(R2) ;IS PARTITION SYSTEM CONTROLLED? ;EF008N BEQ 7$ ;EQ => NO ;EF008;! MOV R0,-(SP) ;SAVE R0 ;EF008I8 MOV T.PCB(R0),R1 ;GET ADDRESS OF PARTITION PCB ;EF0083 MOV P.MAIN(R1),R0 ;GET MAIN PCB ADDRESS ;EF008; ;EF00855$: MOV R0,R2 ;SAVE ADDRESS OF PREVIOUS PCB ;EF008 3 MOV P.SUB(R2),R0 ;GET ADDRESS OF NEXT PCB ;EF008! CMP R0,R1 ;TASK PCB? ;EF008M BNE 5$ ;IF NE, NO ;EF0087 MOV P.SUB(R0),P.SUB(R2) ;REMOVE PCB FROM LIST ;EF008 $ MOV (SP)+,R0 ;RESTORE R0 ;EF008& BR 9$ ;SKIP BUSY BIT STUFF ;EF008 ;EF008 .IFTF ;EF008, ;EF008@7$: ADD #P.BUSY,R1 ;POINT TO SUBPARTITION BUSY FLAG WORD ;EF008E BICB (R1)+,(R1) ;SET SUBPAR00*+3ZgTITION TO UNBUSY (P.BUSY)(P.BUSY+1) ;**-18? BICB -(R1),P.BUSY+1(R2) ;SET MAIN PARTITION TO UNBUSY (P.BUSY)S ;EF008 .IFT ;EF008 ;EF008/9$: MOV $PCB,R0 ;PICK UP PCB ADDRESS ;EF008E. CLR $PCB ;INDICATE NO PCB ALLOCATED ;EF008, MOV #P.LGTH,R1 ;GET LENGHT OF PCB ;EF008( CALL $DEACB ;DEALLOCATE PCB ;EF008 ;EF008 .ENDC ;EF008F;+; (; *** - $DETCB ROUTINE TO DEALLOCATE TCB;B ; INPUTS:U;F; R0=POINTER TO ALLOCATED TCBR;; ; OUTPUTS:;N; TCB IS DEALLOCATED;Y;-$DETCB:: 10$: ;U .IF DF M$$MGE% MOV #T.LGTH+T.EXT,R1 ;SET TCB LENGTH0 .IFF  MOV #T.LGTH,R1 ;SET TCB LENGTHO .ENDC, MOV $TCB,R0 ;PICK UP TCB POINTER ;EF008( CALL $SWSTK,20$ ;SWITCH TO SYSTEM STATE CALLR $DEACB ;DEALLOCATE TCB20$: RETURN ;D .DSABL LSB  .END8 ;EF008 .ENDC ;EF008F;+; (; *** - $DETCB ROUTINE TO DEALLOCATE TCB;B ; INPUTS:U;F; R0=POINTER TO ALLOCATED TCBR;; ; OUTPUT .TITLE OTLHDS .IDENT /2.03/;-;;T; COPYRIGHT (C) 1976, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.T;>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I;; VERSION: 02.03;N; BY: THOMAS J MILLER5; (BASED ON INSTALL TASK HEADER PROCESSOR BY H. LEV)S; DATE: 2/14/75;T; MODIFIED BY:;HC; JAK002 14-JUL-76 JO ANN KASSON ;V3 LABEL BLOCK AND HEADER CHANGES 9; JAK003 29-APR-77 ; FIX - LOADING WITH TASK SIZE < 1000.;O; E. A. FLOYD 9-MAY-80; EF004 -- V4.0 TCB CHANGES;A; E. A. FLOYD 20-MAY-80O7; EF005 -- ADD TASK OVERLAID SEGMENT LOAD SUPPORT V3.0L;I; P.J. KOBAR 1-JUN-81E(; PJK058 -- FIX PROBLEMS WITH PLAS CODE;; P.J. KOBAR 4-AUG-81E8; PJK064 -- INITIALIZE OFFSPRING CONTROL BLOCK LISTHEAD ;**NEW**;S;BL; OTLHD - TASK HEADER PROCESSOR PROCESSOR FOR THE RSX-11S ONLINE TASK LOADER;A;;; MACRO LIBRARY CALLSE;H .MCALL ALUN$,DIR$;;; LOCAL SYMBOL DEFINITIONS; !LUN3=3 ;LUN FOR LUT PROCESSING ;4; DPB FOR ASSIGN LUN;ALUN3: ALUN$ LUN38;+;0J; *** - $OTLHD ROUTINE TO COMPLETE HEADER AND TCB PROCESSING AND LOAD TASK;L; CONTROL IS RECEIVED FROM THE MAIN CONTROL LOOP AFTER THE FIRST LABEL BLOCKK; HAS BEEN PROCESSED AND A TCB ALLOCATED. THE LUN TABLE IN THE TASK HEADERM; IS FILLED IN FROM SUCCEEDING LABEL BLOCKS AND REMAINING ENTRIES IN THE TASKAJ; HEADER ARE FILLED IN FROM THEIR INITIAL VALUES IN THE TASK IMAGE HEADER.K; THE TASK IS LOADED FROM THE FIRST BLOCK BOUNDARY AFTER THE HEADER AND THEI-; TCB IS COMPLETED AND INSERTED INTO THE STD.*; ;-$OTLHD:: .IF DF M$$MGE7 MOV #140000,$PARRL+2 ;REINITIALIZE ADDRESS DOUBLE WORDE .IFFE6 MOV $PARRL,$PARRL+2 ;REINITIALIZE ADDRESS DOUBLE WORD .ENDCC ADD #H.LUN-512.,$PARRL+2 ;BUMP ADDRESS DOUBLE WORD TO BEGINNING OFN ; OF LUN TABLE - 512 6 MOV $TSKSZ,-(SP) ;PUSH TASK SIZE TO CHECK FOR OVERRUN7 SUB #H.LUN,(SP) ;SUBTRACT SIZE OF FIRST PART OF HEADER  BCS 112$ ;IF CS, OVERRUN ;EF005 .IF DF P$$LAS ;EF005C ;EF005) TST $SGMT ;RESIDENT OVERLAYS? ;EF005: BEQ 10$ ;EQ => NO ;EF005? DEC $TBLBK ;READ LABEL BLOCKS UP TO SEGMENT LOAD BLOCK ;EF005A ;EF005 .ENDC ;P$$LAS ;EF005 ;EF005)10$: DEC $TBLBK ;LABEL BLOCKS REMAINING?R; BEQ 100$ ;IF EQ NO, PROCEED TO R00+DATADATADATADATADATADATADATAEAD IN TASK HEADER ;EF005S5 ADD #512.,$PARRL+2 ;BUMP ADDRESS DOUBLE WORD ;**-1.$ CALL $RDBLK ;READ NEXT LABEL BLOCK3 MOV R5,R2 ;INITIALIZE R2 (LAST NONZERO LUN ENTRY)0+ MOV $HEADR,R4 ;GET POINTER TO OTL'S HEADERE5 ADD #H.LUN+<*4>,R4 ;POINT TO THIRD LUN ENTRY1+40$: CLR (R4) ;INITIALLY CLEAR UCB POINTERL> MOV (R5),ALUN3+A.LUNA ;MOVE DEVICE-NAME ASCII INTO ASSIGN DPB BEQ 50$ ;BR IF NONEE8 CMP #"OV,(R5) ;LUN IS NAME OF OVERLAY DEVICE??? ;EF005 BNE 45$ ;NE => NO ;EF005R7 MOV #"LB,ALUN3+A.LUNA ;TASK LOAD DEVICE IS LB ;EF005 ?45$: MOV R5,R2 ;ELSE UPDATE LAST NONZERO ENTRY POINTER ;EF005L5 MOV 2(R5),ALUN3+A.LUNU ;MOVE IN UNIT NUMBER ;**-1T( DIR$ #ALUN3 ;ATTEMPT TO ASSIGN THE LUN! BCC 50$ ;CONTINUE IF SUCCESSFULR) TRAP ER.ILD ;ELSE ERROR, ILLEGAL DEVICE (50$: MOV (R4),(R5)+ ;MOVE IN UCB POINTER' CLR (R5)+ ;CLEAR WINDOW BLOCK POINTER 0 CMP R5,#$LBLBF+512. ;AT END OF LABEL BLOCK YET? BLO 40$ ;IF LO NO, CONTINUE?> SUB #$LBLBF-4,R2 ;CALCULATE NUMBER OF BYTES OF UCB ENTRIES TO2 ; WRITE (AT LEAST ONE ENTRY WILL BE WRITTEN)! CMP $TBLBK,#1 ;LAST LABEL BLOCK?  BEQ 90$ ;IF EQ YES& MOV #512.,R2 ;ELSE WRITE ENTIRE BLOCK790$: MOV #$LBLBF,R0 ;SOURCE OF TRANSFER IS LABEL BUFFERC9 MOV #$PARRL,R1 ;POINT TO DESTINATION ADDRESS DOUBLE WORDI* SUB R2,(SP) ;SEE IF ROOM FOR LUN ENTRIES BCS 112$ ;IF CS NO, OVERRUNR2 CALL BLXO ;MOVE LUN ENTRIES INTO PLACE IN HEADER5 BR 10$ ;BRANCH TO PROCESS ANY REMAINING LUN ENTRIESS;LN; READ IN TASK HEADER FROM TASK IMAGE AND INITIALIZE PS ENTRY. VERIFY HEADER.; 100$: ;EF005 ;EF005 .IF DF P$$LAS ;EF005I ;EF005' TST $SGMT ;TASK OVERLAID? ;EF005#0 BEQ 110$ ;EQ => NO, ROOT SEGMENT ONLY ;EF0057 MOV #$SGTBL,R5 ;POINT TO SEGMENT LOAD BUFFER ;EF0058 MOV #512.,R1 ;SET LENGTH TO READ (1 DISK BLOCK) ;EF005< CALL $RDBK1 ;READ SEGMENT LABEL BLOCK INTO BUFFER ;EF0053 MOV (R5),$TSKSZ ;GET SIZE OF ROOT SEGMENT ;EF005  ;EF005 .ENDC ;EF005M3110$: CALL $RDBLK ;READ NEXT BLOCK FROM TASK IMAGE $ DEC $HDRBK ;WAS HEADER BLOCK READ?2 BGE 110$ ;IF GE NO, LOOP TO PASS CHECKPOINT AREA( MOV H.HDLN(R5),(SP) ;SAVE HEADER LENGTH7 CMP (SP),$TSKSZ ;HEADER LENGTH GREATER THAN TASK SIZE?  BLOS 115$ ;IF LOS NO&112$: TRAP ER.NVI ;INVALID TASK IMAGE/115$: MOV H.NLUN(R5),R0 ;PICK UP NUMBER OF LUNSL' ASL R0 ;CONVERT TO BYTES IN LUN TABLE ASL R0 ;1 MOV $NWNDS,R3 ;NUMBER OF ADDRESS WINDOWS IN TASKF$ ASL R3 ;GET LENGTH FOR ALL ENTRIES ASL R3 ;EACH ENTRY IS 8. WORDS ASL R3L$ INC R3 ;INCLUDE WINDOW COUNT ENTRY! ASL R3 ;CONVERT LENGTH TO BYTESF% ADD R3,R0 ;ADDRESS WINDOW PLUS LUNSM% MOV R0,$NWNDS ;SAVE LENGTH FOR LATER* ;NUMBER OF WINDOWS NOT NEEDED ANY MORE3 ADD #H.LUN+<9.*2>,R0 ;ADD SIZE REMAINING IN HEADERV7 CMP R0,(SP) ;DOES CALCULATION CHECK WITH HEADER SIZE?N BNE 112$ ;IF NE NO7 ADD #H.LUN+<256.*4>+18.,R3 ;CALCULATE MAX. HEADER LEN.D. CMP (SP),R3 ;HEADER SIZE <= MAX.HEADER SIZE? BHI 112$ ;IF HI NO .IF DF M$$MGE& MOV #170017,H.IPS(R5) ;SET INITIAL PS0 BIC #160000,$TKBSA ;CLEAR APR FROM BASE ADDRESS .IFFF" MOV #17,H.IPS(R5) ;SET INITIAL PS .ENDC< MOV $PARRL+2,R1 ;PICK UP ADDRESS OF LAST LUN ENTRY TRANSFER/ ADD R2,R1 ;ADJUST ADDRESS TO END OF LUN TABLE  ;EF005 .IF DF P$$LAS ;EF005C ;EF0057 MOV R1,$WNDBF ;SAVE FOR EXTRA WINDOW TRANSFER ;EF005L4 ADD #2*<8.+1>,$WNDBF ;POINT PAST WINDOW 0 ;EF005 ;EF005 .IFTF ;EF005 ;EF0051 MOV H.GARD(R5),R3 ;PICK UP POINTER TO GUARD WORDC- SUB $TKBSA,R3 ;SUBTRACT BASE ADDRESS OF TASK BCS 112$ ;IF CS ERRORS/ CMP R3,(SP) ;GUARD WORD > THEN HEADER LENGTH?+ BHIS 112$ ;IF HIS YES - ERROR 2 MOV H.WND(R5),R3 ;PICK UP POINTER TO WINDOW COUNT ;EF005 .IFT ;EF005 ;EF005! MOV R0,-(SP) ;SAVE R0 ;EF005F! MOV R1,-(SP) ;SAVE R1 ;EF005;! MOV R2,-(SP) ;SAVE R2 ;EF005T! MOV R4,-(SP) ;SAVE R4 ;EF005  ;EF0051 CLR $WNDBF+2 ;INITIALIZE COUNT FOR XFER00+3Zg ;EF005;( ADD R5,R3 ;MOVE TO # WINDOWS ;EF0054 ADD #2,R3 ;ADJUST PAST COUNT TO 1ST WINDOW ;EF00521150$: MOV $PCB,R4 ;PICK UP PCB POINTER ;EF005+ ADD #20,R3 ;POINT TO 2ND WINDOW ;EF005V- BIT #4,W.BLPD(R3) ;WINDOW MAPPED? ;EF0054 BEQ 1155$ ;EQ =>NO, NO MORE MAPPED WINDOWS ;EF0056 CMP W.BPCB(R3),R4 ;WINDOW FOR TASK REGION 0? ;EF005 BNE 1155$ ;NE => NO ;EF005. ADD #8.*2,$WNDBF+2 ;#BYTES TO XFER ;EF005@ MOV P.ATT(R4),R4 ;PICK UP ATTACHMENT DESCRIPTOR POINTER ;EF0052 INCB A.MPCT(R4) ;INCREMENT THE MAP COUNT ;EF005< MOV $WNDBF,2(R1) ;POINT PARRL+2 TO 2ND WINDOW ENTRY ;EF0057 MOV #$PARRL,R1 ;GET PARTITION RELOCATION BIAS ;EF005R' MOV #8.*2,R2 ;BYTES TO XFER ;EF005#B MOV R3,R0 ;POINT TO HEADER WINDOW ENTRIES IN LABEL BUFFER ;EF0051 MOV $PARRL,-(SP) ;SAVE RELOCATION BIAS ;EF005D CALL BLXO ;TRANSFER ;EF0053 MOV (SP)+,$PARRL ;RESTORE RELOCATION BIAS ;EF005#? ADD R2,$WNDBF ;ADJUST TO POINT PAST WINDOW JUST XFERRED ;EF005E3 BR 1150$ ;GET NEXT WINDOW IF THERE IS ONE ;EF005  ;EF005*1155$: MOV (SP)+,R4 ;RESTORE R4 ;EF005$ MOV (SP)+,R2 ;RESTORE R2 ;EF005$ MOV (SP)+,R1 ;RESTORE R1 ;EF005$ MOV (SP)+,R0 ;RESTORE R0 ;EF005: MOV H.WND(R5),R3 ;PICK UP POINTER TO WINDOW COUNT ;EF005 ;EF005 .ENDC ;EF005  .IF DF M$$MGE- SUB $TKBSA,R3 ;SUBTRACT BASE ADDRESS OF TASK+ BCS 112$ ;IF CS, ERROR .IFFF! MOV R3,-(SP) ;PUSH COPY ON STACKA1 SUB $TKBSA,(SP)+ ;REDUCE BY BASE ADDRESS OF TASKT BCS 112$ ;IF CS ERROR;, TST (SP)+ ;REMOVE HEADER LENGTH FROM STACK .IFT 5 ADD #140000,R3 ;FORCE TO APR6 AND END OF LUN ENTRIESP) CALL $SWSTK,130$ ;SWITCH TO SYSTEM STATE ( MOV $PARRL,KISAR6 ;LOAD RELOCATION BIAS .IFTF120$:D# CMP R1,R3 ;LAST LUN ENTRY ZEROED?. BEQ 125$ ;IF EQ YES CLR (R1)+ ;ZERO LUN ENTRYK BR 120$ ;LOOK AT NEXTR125$:T .IFT1 RETURNE130$: .IFTF) MOV R5,R0 ;COPY BUFFER POINTER FOR BLXOS- MOV #$PARRL,R1 ;POINT TO ADDRESS DOUBLE WORD1 .IFT 0 MOV #140000,2(R1) ;SET BASE ADDRESS OF TRANSFER .IFF- MOV (R1),2(R1) ;SET BASE ADDRESS OF TRANSFERR .ENDC .IF DF M$$MGE ;EF005T ;EF0051 MOV $PARRL,-(SP) ;SAVE RELOCATION BIAS ;EF005 ;EF005 .IFTF ;EF005Q ;EF005- MOV #H.LUN,R2 ;SET TO TRANSFER THRULUN COUNT - CALL BLXO ;TRANSFER FIRST SECTION OF HEADER$ ;EF005 .IFT ;EF005 ;EF0053 MOV (SP)+,$PARRL ;RESTORE RELOCATION BIAS ;EF005 ;EF005 .ENDC ;EF005A ;EF005> ADD #H.LUN,2(R1) ;POINT TO LUN TABLE AT DESTINATION (PARRL+2)( ADD #H.LUN,R0 ;POINT TO LUN COUNT ENTRY, MOV $NWNDS,R3 ;GET LENGTH OF LUN TABLE PLUS ;WINDOW ENTRIES.;FD; SKIP OVER REMAINING ENTRIES IN THE HEADER. THESE INCLUDE LUN TABLE; AND ADDRESS WINDOW ENTRIES.U; ;N> MOV #512.-H.LUN,R2 ;SET R3 TO MAXIMUM NUMBER OF BYTES LEFT IN% ; CURRENT BLOCK FOR LUN ENTRIESE;140$: SUB #512.,$TSKSZ ;REDUCE TASK SIZE BY BLOCK LAST READ  BCC 145$ ; IF CC $TSKSZ > 0;5 ADD $TSKSZ,R2 ; REDUCE NUMBER OF BYTES USED IN BLOCKU CLR $TSKSZ ; ZERO TASK SIZE)145$:#> CMP R3,R2 ;DO THE LUN ENTRIES PASS THE CURRENT END OF BLOCK? BLOS 150$ ;IF LOS NO3 CALL $RDBLK ;ELSE READ NEXT BLOCK FROM TASK IMAGEN( MOV R5,R0 ;POINT TO BEGINNING OF BLOCK: ADD R2,2(R1) ;BUMP DESTINATION VIRTUAL ADDRESS ($PARRL+2)* SUB R2,R3 ;REDUCE R3 BY LUN ENTRIES PAST8 MOV #512.,R2 ;SET NEW CONSTANT OF BYTES FOR LUN ENTRIES2 BR 140$ ;BR BACK TO SEE IF END OF LUN TABLE READ+150$: ADD R3,R0 ;POINT TO END OF LUN TABLEU ADD R3,2(R1) ;($PARRL+2)U7 SUB R3,R2 ;CALCULATE NUMBER OF BYTES IN CURRENT BLOCK  ; AFTER LUN TABLEC .IF DF M$$MGE1 MOV $PARRL,-(SP) ;SAVE RELOCATION BIAS ;EF005  ;**-1M .ENDC6 CALL BLXO ;MOVE IN TASK IMAGE TO NEXT BLOCK BOUNDARY ;EF005 .IF DF M$$MGE ;EF0053 ;EF0059 MOV (SP),$PARRL ;RESTORE AND KEEP COPY ON STACK ;EF005R ;EF005 .ENDC ;EF0000+DATADATADATADATADATADATADATA5F ;EF0059 MOV 2(R1),R5 ;POINT TO BEGINNING OF LAST MOVE ($PARRL+2), ADD R2,R5 ;POINT TO END, ; ;EF005E .IF DF P$$LAS ;EF005 ;EF0054 TST $SGMT ;CHECK FOR PRESENCE OF OVERLAYS ;EF0050 BNE 155$ ;NE => YES, TASK IS OVERLAID ;EF005 ;EF005 .ENDC ;P$$LAS ;EF005 ;EF0052 MOV $TSKSZ,R1 ;SET SIZE OF REMAINING TASK TO LOAD CALL $RDBK1 ;LOAD THE TASK! BR 157$ ;COPY HEADER ;EF005 155$: ;EF0055 ;EF005 .IF DF P$$LAS ;EF005V ;EF005< CALL LDOVR ;LOAD REMAINDER OF ROOT AND ALL OVERLAYS ;EF005" CLR $SGMT ;CLEAR FLAG ;EF005 ;EF005 .ENDC ;EF005$;T5; CREATE A COPY OF THE HEADER IF THE SYSTEM IS MAPPED;J; AND INITIALIZE TASK NAME IN THE REGISTER SAVE AREA IN THE HEADER FOR ODT;E ;EF005157$: ;EF005  .IF DF M$$MGE* MOV (SP)+,$PARRL ;RESTORE RELOCATION BIAS0 MOV (SP)+,R1 ;PICK UP SAVED COPY OF HEADER SIZE) CALL $SWSTK,160$ ;SWITCH TO SYSTEM STATE $ CALL $ALOCB ;ALLOCATE A CORE BLOCK1 ROL (R4) ;SAVE C-BIT IN UNUSED LUN3 UCB POINTER0 ; IN OTL'S HEADERA+ MOV R0,$HDRBK ;SAVE A POINTER TO THE BLOCK  RETURN ;RETURN TO USER STATET$160$: MOV R1,R2 ;COPY SIZE OF BLOCK ROR (R4) ;RESTORE C-BIT & BCC 170$ ;IF CC, BLOCK WAS ALLOCATED- TRAP ER.POL ;ERROR, INSUFFICIENT POOL SPACEF.170$: MOV $HDRBK,R1 ;RETRIEVE POINTER TO BLOCK- MOV #$PARRL,R0 ;POINT TO ADDRESS DOUBLE WORDV& MOV #140000,2(R0) ;RESET BASE ADDRESS CALL .BLXI ;COPY HEADER: SUB $TKBSA,H.GARD(R1) ;RELOCATE HEADER GUARD WORD POINTER ADD R1,H.GARD(R1) ;4 SUB $TKBSA,H.WND(R1) ;RELOCATE WINDOW BLOCK POINTER ADD R1,H.WND(R1) ;C( MOV H.WND(R1),R0 ;POINT TO WINDOW COUNT7 MOV W.BPCB+2(R0),R0 ;TASK PCB PTR IS IN ADDRESS WINDOWI- MOV R1,P.HDR(R0) ;SET POINTER BACK TO HEADERA .IFFE$ MOV $PARRL,R1 ;POINT TO TASK HEADER .ENDC, MOV $TCB,R0 ;PICK UP TCB POINTER ;EF004 ;EF004! .IF DF S$$TOP!T$$BUF ;EF004E ;EF004> MOV H.EFLM(R1),T.EFLM(R0) ;MOVE EVENT FLAG MASK WORDS ;EF004: MOV H.EFLM+2(R1),T.EFLM+2(R0) ;INTO PLACE IN TCB ;EF004 ;EF004 .ENDC ;EF004. ;EF0041 MOV $TKSZ,T.TKSZ(R0) ;FILL IN TASK SIZE ;EF00400 ADD H.HDLN(R1),R1 ;POINT PAST HEADER GUARD WORD1 CMP -(R1),-(R1) ;POINT PAST REGISTER R1 LOCATION8 MOV T.NAM(R0),-(R1) ;MOVE IN FIRST OF TASK NAME ;**-18 MOV T.NAM+2(R0),-(R1) ;MOVE IN SECOND WORD OF TASK NAME;9; FINISH INITIALIZATION OF TCB AND INSERT IT INTO THE STDH;L MOV R0,R1 ;COPY POINTERF4 ADD #T.RCVL,R1 ;ADJUST TO POINT TO RECEIVE LISTHEAD- MOV R1,T.RCVL+2(R0) ;INITIALIZE BACK POINTER- ADD #T.ASTL-T.RCVL,R1 ;POINT TO AST LISTHEAD$- MOV R1,T.ASTL+2(R0) ;INITIALIZE BACK POINTERA .IF DF P$$LAS> ADD #T.RRFL-T.ASTL,R1 ;POINT TO RECIEVE BY REFERENCE LISTHEAD- MOV R1,T.RRFL+2(R0) ;INITIALIZE BACK POINTERI .ENDC ;PJK064V .IF DF P$$OFF ;PJK064 ;PJK064A( MOV R0,R1 ;GET START OF TCB ;PJK064/ ADD #T.OCBH,R1 ;POINT TO OCB OFFSET ;PJK064P7 MOV R1,T.OCBH+2(R0) ;INITIALIZE BACKPOINTER ;PJK064I ;PJK064C .ENDC ;P$$OFF ;PJK064E ;PJK064R& BIS #TS.EXE,T.STAT(R0) ;NOT EXECUTING7 BIS #T2.FXD!T2.CHK,T.ST2(R0) ;NOT CHECKPOINTABLE,FIXED BIS #T3.PMD,T.ST3(R0) ;NO PMD" ;NO PMD, NOT CHECKPOINTABLEE MOV #$TSKHD-T.TCBL,R1 ;MAKE STD HEAD LOOK LIKE A TCB AND POINT TO ITV) CALL $SWSTK,200$ ;SWITCH TO SYSTEM STATEP*180$: MOV T.TCBL(R1),R2 ;POINT TO NEXT TCB= CMPB T.PRI(R0),T.PRI(R2) ;PRI OF NEW TCB > THAN CURRENT TCB?,* BHI 190$ ;IF HI YES, INSERT NEW TCB HERE& MOV R2,R1 ;MAKE CURRENT TCB LAST TCB BR 180$ ;TRY AGAIN5190$: MOV R2,T.TCBL(R0) ;POINT NEW TCB TO CURRENT TCBG- MOV R0,T.TCBL(R1) ;POINT LAST TCB TO NEW TCBA .IF DF T$$KMG# CMP T.NAM(R0),(PC)+ ;IS TASK TKTN?O .RAD50 /TKT/ ; BNE 200$ ;IF NE NO CMP T.NAM+2(R0),(PC)+ ; .RAD50 /N/ ; BNE 200$ ;IF NE NO( MOV R0,$TKNPT ;ELSE UPDATE TKTN POINTER .ENDC200$: RETURN ;DONE;0G; $RDB00+3ZgLK - ROUTINE TO READ NEXT BLOCK FROM TASK IMAGE INTO LABEL BUFFERI;R-$RDBLK::MOV #$LBLBF,R5 ;POINT TO LABEL BUFFERT! MOV #512.,R1 ;SET COUNT FOR READO;TK; $RDBK1 - ROUTINE TO READ FROM TASK IMAGE AFTER INCREMENTING BLOCK NUMBER.T;E ; INPUTS:;F; R1=COUNT FOR READT; R5=BUFFER FOR READ;K=$RDBK1::INC $LQDPB+Q.IOPL+10 ;INCREMENT BLOCK NUMBER FOR READC CALLR $READ ;READ BLOCK2 .IF DF P$$LAS ;EF005;; ;EF005IV; UPON ENTRY TO THIS ROUTINE, A PORTION OF THE TASK ROOT SEGMENT HAS BEEN LOADED;EF005S; INTO MEMORY. LDOVR CALCULATES THE SIZE OT THE ROOT REMAINING ON DISK AND ;EF005FP; LOADS IT. LDOVR THEN INDEXES THE SEGMENT LOAD TABLE ($SGTBL) AND LOADS ;EF005P; EACH OVERLAY ADJACENT IN MEMORY TO THE ROOT SEGMENT. WHEN A ZERO ENTRY ;EF005Q; IN $SGTBL IS REACHED, ALL OVERLAYS HAVE BEEN LOADED: CONTROL IS RETURNED ;EF005R; TO OTLHD. ;EF005; ;EF005D;INPUTS: ;EF005 3; Q.IOPL+10 CONTAINS LBN OF HEADER BLOCK ;EF005TJ; R5 CONTAINS BYTE OFFSET INTO TASK PARTITION (DESTINATION OF XFER) ;EF0055; R2 CONTAINS BYTE COUNT FROM PREVIOUS XFER ;EF005F; ;EF005L; ;EF005H ;EF005LDOVR: ;EF005 ;EF005010$: JSR PC,$SAVAL ;SAVE ALL REGISTERS ;EF005 ;EF005< INC $LQDPB+Q.IOPL+10 ;POINT PAST HEADER BLOCK (LBN) ;EF005 ;EF005: MOV $PARRL,$SGMT ;SAVE PARTITION RELOCATION BIAS ;EF0054 MOV 2(R1),R5 ;POINT TO START OF LAST MOVE ;EF005$ ADD R2,R5 ;POINT TO END ;EF005 ;EF0055 MOV #$SGTBL,R3 ;POINT TO SEGMENT LOAD TABLE ;EF005Y2 TST (R3)+ ;MOVE PAST ROOT SEGMENT ENTRY ;EF00520$: ;EF0054 MOV $TSKSZ,R1 ;GET BYTES REMAINING IN ROOT ;EF005) ADD #777,R1 ;ADD CONSTANT AND ;EF005E7 BIC #777,R1 ;ROUND TO EVEN # DISK BLOCK READS ;EF005  ;EF005 ;EF00540$: ;EF005; MOV R5,$PARRL+2 ;BUMP DESTINATION ADDRESS (OFFSET) ;EF005M8 CALL $READ ;READ SEGMENT INTO TASK ADDR. SPACE ;EF005 ;EF005( SWAB R1 ;GET # BYTES READ IN ;EF0052 ASR R1 ;CALCULATE #DISK BLOCKS JUST READ ;EF005C ADD R1,$LQDPB+Q.IOPL+10 ;BUMP LBN TO BLOCK FOR NEXT SEGMENT ;EF005M ;EF005R; THE NEXT FEW INSTRUCTIONS MANIPULATE R1 AND $PARRL TO KEEP ADDRESS VALUES ;EF005R; WITHIN THE RANGE OF KISAR6 -- THAT IS WE WANT TO KEEP R5 LESS THAN 160000 ;EF005 ;EF005. MOV $TSKSZ,R1 ;GET #BYTES JUST READ ;EF005245$: CMP #4000,R1 ;IS R1 GREATER THAN 1K ;EF005. BHI 50$ ;NO, GO AHEAD AND UPDATE R5 ;EF005# SUB #4000,R1 ;REDUCE R1 ;EF0055? ADD #40,$PARRL ;AND UPDATE THE PARTITION RELOCATION BIA;EF005D* BR 45$ ;CONTINUE UNTIL R1 < 1K ;EF005 ;EF005250$: ADD R1,R5 ;BUMP DESTINATION ADDRESS ;EF005 ;EF0056 MOV (R3)+,$TSKSZ ;ANY MORE OVERLAYS TO LOAD? ;EF005 BEQ 100$ ;EQ => NO ;EF005S- BR 20$ ;PROCEED TO READ IN SEGMENT ;EF005S ;EF005 ;EF005 ;EF005; ;EF005 V;THE NEXT SECTION OF CODE MODIFIES DATA IN THE TASK. THE OVERLAY IMPURE POINTER ;EF005U;IS TAKEN FROM THE HEADER. THE IMPURE AREA IS SEARCHED FOR THE ADDRESS OF THE ;EF0055Q;SEGMENT DESCRIPTOR TABLE (LOCATED AT THE END OF THE ROOT SEGMENT) AND THE ;EF005IR;DATA WORD CONTAINING THE SIZE OF THE DESCRIPTORS. KISAR6 IS THEN REMAPPED ;EF005L;TO POINT TO THE SEGMENT DESCRIPTOR TABLE. THE TABLE IS INDEXED AND ;EF005O;A BIT IN THE STATUS WORD OF EACH DESCRIPTOR IS SET TO INDICATE THAT THE ;EF005 =;SEGMENT HAS BEEN LOADED IN THE TASK ADDRESS SPACE. ;EF005T ;EF005100$: ;EF005E? MOV $SGMT,$PARRL ;RESTORE RELOCATION BIAS ($PARRL) AND ;EF005F8 MOV #$PARRL,R1 ;POINT R1 TO ADDRESS DOUBLE WORD ;EF0057 MOV #140000,2(R1) ;RESET DESTINATION ADDRESS ;EF005NB ADD #H.OVLY,2(R1) ;POINT TO ADDRESS OF IMPURE STORAGE AREA ;EF0053 CALL $SWSTK,260$ ;SWITCH TO SYSTEM STATE ;EF005S2 MOV (R1),@#KISAR6 ;LOAD RELOCATION BIAS ;EF005 ;EF005. MOV $PARRL,R4 ;SAVE RELOCATION BIAS ;EF005 ;EF005? MOV @2(R1),-(SP) ;COPY ADDRESS OF IMPURE AR00+DATADATADATADATADATADATADATAEA TO STACK ;EF005;2101$: CMP #4000,(SP) ;IS THE VALUE > 1K? ;EF0054 BHI 102$ ;NO, CONTINUE THROUGH IMPURE AREA ;EF005- SUB #4000,(SP) ;REDUCE VALUE BY 1K ;EF005E4 ADD #40,$PARRL ;AND UPDATE RELOCATION BIAS ;EF005- BR 101$ ;CONTINUE UNTIL VALUE < 1K ;EF0055 ;EF005B102$: MOV (SP)+,R0 ;PICK UP ADDRESS OF IMPURE STORAGE AREA ;EF0056 MOV #140000,2(R1) ;RESET DESTINATION ADDRESS ;EF0059 ADD R0,2(R1) ;POINT DEST. ADDRESS TO IMPURE AREA ;EF0051F ADD #N.STBL,2(R1) ;BUMP TO POINTER TO SEGMENT DESCRIPTOR TABLE ;EF0057 MOV (R1),@#KISAR6 ;SET KERNEL APR 6 AND REMAP ;EF005N2 MOV @2(R1),-(SP) ;SAVE ADDRESS OF TABLE ;EF005= SUB #N.STBL,2(R1) ;BUMP BACK TO START OF IMPURE AREA ;EF005II ADD #N.SZSG,2(R1) ;BUMP TO WORD CONTAINING SEGMENT DESCRIPTOR SIZE;EF005 E MOV @2(R1),R2 ;KEEP SIZE AND USE FOR INDEXING SEG. DESC. TABLE;EF0050 ;EF0050 MOV R4,$PARRL ;RESTORE RELOCATION BIAS ;EF005 ;EF0056110$: CMP #4000,(SP) ;AT OR PAST 1K BOUNDARY? ;EF005( BHI 120$ ;HI => NO, CONTINUE ;EF0051 SUB #4000,(SP) ;DECREMENT OFFSET BY 1K ;EF005M; ADD #40,$PARRL ;INCREMENT BIAS BY 1K FOR REMAPPING ;EF0050+ BR 110$ ;LOOP UNTIL OFFSET < 1K ;EF005  ;EF005N120$: MOV #140000,2(R1) ;SET DESTINATION ADDRESS IN ADDRESS DOUBLE WORD ;EF005G ADD (SP)+,2(R1) ;POINT TO BEGINNING OF SEGMENT DESCRIPTOR TABLE ;EF005  ;EF005I MOV (R1),@#KISAR6 ;SET KISAR6 TO SEGMENT TABLE IN TASK ADDR SPACE ;EF005  ;EF005;130$: TST @2(R1) ;END OF SEGMENT DESCRIPTOR TABLE? ;EF005 ' BEQ 210$ ;EQ => YES, RETURN ;EF005 D BIS #20000,@2(R1) ;SET STATUS WORD TO SHOW SEGMENT IS LOADED ;EF005D ADD R2,2(R1) ;BUMP DEST. ADDR TO 1ST WORD OF NEXT DESCRIPTOR ;EF005 ;EF0051 CMP #160000,2(R1) ;OVERRUN INTO APR 7? ;EF005E BHI 130$ ;HI => NO ;EF005O3 SUB #20000,2(R1) ;DECREMENT OFFSET BY 4K ;EF005I ADD #200,@#KISAR6 ;INCREMENT KISAR6 BY DIFFERENCE FROM OFFSET (4K);EF005D, BR 130$ ;CONTINUE TO END OF TABLE ;EF005 ;EF005O; THE NEXT SECTION OF CODE FINDS ALL WINDOW ENTRIES IN THE TASKS HEADER ;EF005#J; THAT ARE FOR TASK REGION ZERO BUT ARE NOT MAPPED AT RUN TIME AND ;EF005(; INITIALIZES THOSE WINDOWS ;EF005 ;EF005D210$: MOV #$LBLBF,R5 ;GET PTR TO LABEL BUFFER (HEADER BLOCK) ;EF0053 MOV $SGMT,$PARRL ;RESTORE RELOCATION BIAS ;EF005C) CLR R4 ;INITIALIZE WORD COUNT ;EF005#. MOV #$PARRL,R1 ;GET RELOCATION BIAS ;EF005@ MOV (R1),@#KISAR6 ;SET MAPPING TO HEADER IN TASK REGION ;EF005+ MOV #140000,R5 ;SET DISPLACEMENT ;EF005S4 MOV #140000,2(R1) ;SET DESTINATION ADDRESS ;EF0055 ADD H.WND(R5),2(R1) ;POINT TO WINDOW COUNT ;EF005I8 MOV @2(R1),-(SP) ;GET #WNDWS FOR TASK REGION 0 ;EF005> ADD #22,2(R1) ;POINT PAST WINDOW COUNT AND WINDOW ZERO ;EF005 ;EF005?220$: DEC (SP) ;GET #WINDOWS FOR TASK LESS WINDOW ZERO ;EF005R* BEQ 230$ ;EQ =>NO MORE WINDOWS ;EF005> ADD #10,R4 ;GET WORD COUNT (OCTAL 10 FOR EACH WINDOW) ;EF005& BR 220$ ;ANY MORE WINDOWS? ;EF005 ;EF0059230$: MOV 2(R1),R3 ;USE R3 TO INDEX INTO WINDOWS ;EF005T# TST (SP)+ ;CLEAN STACK ;EF005R ;EF005-240$: CLR (R3)+ ;ZERO WINDOW WORDS ;EF005T% DEC R4 ;REDUCE WORD COUNT ;EF005D0 BEQ 260$ ;EQ => NO MORE WORDS TO ZERO ;EF005% BR 240$ ;CONTINUE ZEROING ;EF005S ;EF0057260$: RETURN ;RETURN TO USER STATE AND OTLHD ;EF005O ;EF005 .ENDC ;EF005O;UO; BLXO - ROUTINE TO TRANSFER DATA INTO USER ADDRESS SPACE WITH REGISTERS SAVED. ; BLXO: .IF DF M$$MGE .IFFN SAVRG$ ;SAVE REGISTERST .ENDC7 CALLR .BLXO ;SIMPLY JUMP THERE (THE MAPPED VERSION OFO' ; .BLXO IMMEDIATELY CALLS $SWSTK)E .ENDNT ;EF005D0 BEQ 260$ ;EQ => NO MORE WORDS TO ZERO ;EF005% BR 240$ ;CONTINUE ZEROING ;EF005S ;EF0057260$: RETURN ;RETURN TO USER STATE AND OTLHD ;EF005O ;EF005 .ENDC ;EF005O;UO; BLXO - ROUTINE TO TRANSFER DATA INTO USER ADDRESS SPACE WITH REGISTERS SAVED. ; BLXO:00, 3Zg .TITLE OTLLB$ .IDENT /02.07/;S;G; COPYRIGHT (C) 1975, 1981/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.A;D>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I;; VERSION: 02.07; BY: THOMAS J MILLER5; (BASED ON INSTALL LABEL-BLOCK PROCESSOR BY H. LEV) ; DATE: 2/4/75R; ; MODIFIED BY:;N; JO ANN KASSON 12-JUL-76A; JAK002 - V3 DATA STRUCTURES;; J. H. MATTHEWS 2-FEB-79O;E;; JM025 -- ADD SUPPORT FOR SYSTEM TYPE IN TASK LABEL BLOCKC;T; J. H. MATTHEWS 30-JAN-79; 2; JM026 -- CORRECT PROBLEM OF OTL NOT SETTING THE4; PRIVILEGE BIT IN THE TCB FOR PRIVILEGED TASKS;E; ; E. A. FLOYD 1-APR-80/; EF002 -- CORRECT OTLLB TO PROPERLY CALCULATE0); THE NUMBER OF WINDOWS NEEDED BY A TASKI;A; E. A. FLOYD 9-MAY-80!; EF004 -- MAKE V4.0 TCB CHANGES;O; E. A. FLOYD 20-MAY-80 8; EF006 -- ADD SYSTEM CONTROLLED PARTITION SUPPORT V3.0;.; E. A. FLOYD 28-OCT-80E8; EF027 -- FIX BUG SO WINDOW SIZE EQUALS TASK LOAD SIZE;C; E. A. FLOYD 5-NOV-80=; EF028 -- FIX BUG TO SET MAP COUNT IN ATTACHMENT DESCRIPTORE; ; E. A. FLOYD 21-NOV-80 ;; EF030 -- ADD INCREMENT SUPPORT FOR ALLOCATING PARTITION E; AND FILLING IN TCBP;E; P.J. KOBAR 12-APR-819; PJK045 -- CLEAR W.BPCB WHEN INITIALIZING WINDOW BLOCKS-&; OTHER THAN THE TASK REGION WINDOW.;; P.J. KOBAR 10-APR-819; PJK052 -- FIX PROBLEMS WITH CODE FOR UNMAPPED ASSEMBLY;; P.J. KOBAR 1-JUN-81E(; PJK058 -- FIX PROBLEMS WITH PLAS CODE;A; P.J. KOBAR 26-JUN-812; PJK063 -- FIX PROBLEM WITH MAPPED NON-PLAS CODE;I; P.J. KOBAR 4-AUG-81E4; PJK064 -- CORRECT ACCESS CODES FOR ATT DESCRIPTOR; B; OTLLB - LABEL BLOCK PROCESSOR FOR THE RSX-11S ONLINE TASK LOADER;.;B; LOCAL SYMBOL DEFINATIONS;R-MXWBLK= 10 ;MAX NUMBER OF TASK WINDOW BLOCKSE#RMPTKB= 4 ;TASK BUILT FOR RSX-11MP ; ;**-521;P; HEADER OFFSETS; WBLKS= 8.*2 ;WINDOW BLOCK SIZE#LIBLEN= 14. ;SIZE OF LIBRARY ENTRY--MAXLIB= LIBLEN*7. ;MAXIUM LENGTH OF LIBRARIES2;U; LOCAL STORAGE-;X$NUMLIB: .BLKW 1 ;NUMBER OF LIBRARIES; ;EF004EL; GLOBAL STORAGE FOR SYSTEM CONTROLLED PARTITION AND OVERLAY SUPPORT ;EF004; ;EF004HB$TKSZ::.BLKW 1 ;TASK SIZE FOR V4.0 TCB CHANGES FROM L$BMXZ ;EF004.$PCB:: .BLKW 1 ;POINTER TO SUB-PCB ;EF006 ;EF006 .IF DF P$$LAS ;EF006  ;EF006>$WNDBF::.BLKW 16. ;BUFFER FOR TASK REGION ZERO WINDOW ;EF006;$LIBBF::.BLKW 64. ;BUFFER FOR ALL LIBRARY WINDOWS ;EF006EF$SGMT::.BLKW 1 ;FLAG TO INDICATE PRESENCE OF RESIDENT OVERLAYS ;EF006 ;EF006 .ENDC ;EF006B;A; LIBRARY FLAGST;L+LD$ACC= 100000 ;ACCESS CODE IS READ/WRITE LD$REL= 4 ;PIC LIBRARY;SF; BUFFER FOR FILE NAME ASCII FROM PARSED COMMAND LINE. NOTE THAT THISE; BUFFER IS OVERLAID WITH THE TASK AND PARTITION PARAMETER SAVE AREA.B; BY THE TIME THE FIRST LABEL BLOCK IS READ IN THE FILE NAME IS NO; LONGER REQUIRED.;B$FLBUF::;F(; TASK AND PARTITION PARAMETER SAVE AREA;W$$TSKSZ::.BLKW 1 ;TASK SIZE IN BYTES'$TKBSA::.BLKW 1 ;TASK STARTING ADDRESSN'$HDRBK::.BLKW 1 ;HEADER RELATIVE BLOCKG-$TBLBK::.BLKW 1 ;BLOCKS IN LABEL BLOCK TABLE/+$PARRL::.BLKW 1 ;PARTITION RELOCATION BIASU0 .BLKW 1 ;WORD USED TO FORM ADDRESS DOUBLE WORD) ; (USING PARTITION RELOCATION BIAS) *$NWNDS::.BLKW 1 ;NUMBER OF W00,(DATADATADATADATADATADATADATAINDOWS IN TASK;+;T(; *** - $OTLLB OTL LABEL BLOCK PROCESSOR; I; THIS MODULE ALLOCATES A TCB AND READS THE FIRST LABEL BLOCK OF THE TASKPK; IMAGE. IT THEN PERFORMS CHECKS ON THE LABEL BLOCK, TASK AND PARTITION IN J; WHICH THE TASK IS TO BE INSTALLED. INFORMATION EXTRACTED FROM THE LABELK; BLOCK IS WRITTEN DIRECTLY INTO THE HEADER IN THE PARTITION WHERE THE TASKI=; WILL BE INSTALLED. ELEMENTS OF THE TCB ARE ALSO FILLED IN. ; ;-;R); ALLOCATE TCB AND READ FIRST LABEL BLOCKN;E $OTLLB:: ; .IF DF M$$MGE% MOV #T.LGTH+T.EXT,R1 ;SET TCB LENGTH .IFFL MOV #T.LGTH,R1 ;SET TCB LENGTH  .ENDC( CALL $SWSTK,10$ ;SWITCH TO SYSTEM STATE% CALL $ALOCB ;ALLOCATE BLOCK FOR TCBN MOV R0,$TCB ;SAVE TCB ADDRESSN BCC 5$ ;IF CC RETURN4 CLR $TCB ;ELSE ALLOCATION FAILURE, INDICATE NO TCB ; ALLOCATEDE5$: RETURN ;&10$: MOV $TCB,R0 ;PICK UP TCB POINTER' BNE 20$ ;IF NE THEN ONE WAS ALLOCATED-0 TRAP ER.POL ;OTHERWISE INSUFFICIENT POOL SPACE+20$: ADD R1,R0 ;POINT PAST ALLOCATED BLOCK25$: CLRB -(R0) ;CLEAR TCBB DEC R1 ; BNE 25$ ;& MOV #$LBLBF,R5 ;POINT TO LABEL BUFFER MOV #512.,R1 ;AND PASS SIZE$ CALL $READ ;READ FIRST LABEL BLOCK;T:; PERFORM INITIAL CHECKS TO DETERMINE IF VALID LABEL BLOCK;F3 BIT #176000,L$BLDZ(R5) ;LEGAL TASK SIZE? ;EF006C BEQ 27$ ;IF EQ YES ;**-126$:& TRAP ER.NVI ;ELSE INVALID TASK IMAGE27$:1 CMP L$BPRI(R5),#250. ;PRIORITY IN RANGE (L$BPRI)  BHI 26$ ;IF HI NOS7 MOV L$BPRI(R5),T.PRI(R0) ;PUT PRIORITY IN TCB (L$BPRI)E BNE 271$ ;IF NE HAVE ONE, MOV #50.,T.PRI(R0) ;SET TO DEFAULT PRIORITY271$:  .IF DF A$$PRI+ MOV T.PRI(R0),T.DPRI(R0) ;DEFAULT PRIORITY  .ENDC) CMP L$BBLK(R5),#2 ;TOO FEW TABLE BLOCKS?S BLO 26$ ;IF LO YES ;EF006 .IF DF P$$LAS ;EF006L ;EF0064 CMP L$BBLK(R5),#4 ;TOO MANY TABLE BLOCKS? ;EF006+ BHI 26$ ;HI =>YES, INVALID IMAGE ;EF006R ;EF006 .IFF ;EF006 ;EF006* CMP L$BBLK(R5),#3 ;TOO MANY TABLE BLOCKS? BHI 26$ ;IF HI YES .ENDC ;EF006;V; SET TASK NAME IN TCB;A .IF DF P$$LAS MOV R0,R1 ;COPY TCB POINTER)- ADD #T.ATT,R1 ;ADJUST TO POINT TO ATTACHMENTP ;DESCRIPTOR LISTHEAD, MOV R1,T.ATT+2(R0) ;INITIALIZE BACK POINTER .ENDC# ADD #T.NAM,R0 ;POINT TO NAME FIELDE' MOV R0,R3 ;SAVE POINTER TO NAME FIELDB8 MOV (R5)+,(R0)+ ;SET FIRST WORD OF NAME (L$BTSK)(T.NAM), BEQ 30$ ;IF EQ THEN NO NAME IN LABEL BLOCK4 MOV (R5),(R0)+ ;SET SECOND WORD (L$BTSK+2)(T.NAM+2) BR 50$ ;CONTINUE<30$: MOV $FLRAD,-2(R0) ;GET TASK NAME FROM FILE NAME (T.NAM)) BNE 40$ ;IF NE THEN FILE NAME SPECIFIEDC" TRAP ER.TND ;TASK NAME UNDEFINED?40$: MOV $FLRAD+2,(R0)+ ;SET SECOND WORD OF TASK NAME (T.NAM+2).,50$: CALL $SWSTK,55$ ;SWITCH TO SYSTEM STATE/ CALL $SRSTD ;SEARCH STD FOR TASK OF SAME NAME36 ROR (R5) ;STORE CARRY BIT IN LABEL BUFFER (L$BTSK+2) RETURN ;RETURN TO USER STATE-55$: ROL (R5)+ ;RESTORE CARRY BIT (L$BTSK+2)M0 BCS 60$ ;IF CS THEN TASK NAME NOT FOUND AND OK- BIT #TS$NHD,L$BFLG-L$BPAR(R5) ;COMMON BLOCK?E BNE 60$ ;IF NE YES, NO ERROR' TRAP ER.TAE ;ELSE TASK ALREADY EXISTSF;; FIND TASKS PARTITION;D>60$: MOV $PARHD,R2 ;POINT TO PARTITION CONTROL BLOCK LIST HEAD>70$: CMP (R5),P.NAM(R2) ;MATCH ON FIRST WORD OF NAME? (L$BPAR) BNE 75$ ;IF NE NOA= CMP 2(R5),P.NAM+2(R2) ;SECOND WORD OF NAME MATCH? (L$BPAR+2)L% BEQ 80$ ;IF EQ THEN PARTITION FOUNDT,75$: MOV (R2),R2 ;POINT TO NEXT PCB (P.LNK), BNE 70$ ;BRANCH BACK IF NOT AT END OF LIST478$: TRAP ER.PNS ;OTHERWISE PARTITION NOT IN SYSTEM80$:= MOV R2,$LBLBF+2 ;SAVE A COPY OF PCB POINTER IN LABEL BUFFER;E= CMP (R5)+,(R5)+ ;SKIP PAST PARTITION NAME (L$BPAR)(L$BPAR+2);$; SAVE TASK STARTING VIRTUAL ADDRESS;D8 MOV (R5)+,-(SP) ;SAVE BASE ADDR. FOR FUTURE USE (L$BSA);B ; PICK UP LABEL BLOCK FLAGS WORD;25 MOV L$BFLG-L$BHGV(R5),R4 ;PICK UP FLAG WORD (L$BFLG)I;T&; DETERMINE IF PARTITION IS APPRORIATE;I281$: BIT #TS$NHD,R4 ;IS TASK IMAGE A COMMON BLOCK? BNE 82$ ;IF NE00,03Zg YES- BIT #PS.COM,P.STAT(R2) ;IS PARTITION COOMON? BEQ 84$ ;IF EQ NO2. TRAP ER.COM ;ELSE ERROR, PARTITION IS COMMON82$:- BIT #PS.COM,P.STAT(R2) ;IS PARTITION COMMON?$ BNE 84$ ;IF NE YES2 TRAP ER.PNC ;ELSE ERROR, PARTITION IS NOT COMMON;SA; DETERMINE IF PARTITION IS ALREADY BUSY AND IF NOT, MAKE IT BUSY ;D ;EF006 ;EF006<84$: MOV R2,$PCB ;INITIALIZE THE PCB ADDRESS SYMBOL ;EF006 ;EF006 .IF DF D$$YNM ;EF006A ;EF0064 BIT #PS.SYS,P.STAT(R2) ;SYSTEM-CONTROLLED? ;EF006" BNE 105$ ;NE => YES, ;EF006 ;EF006 .ENDC ;EF006I ;EF0068 MOV P.MAIN(R2),R1 ;POINT TO MAIN PARTITION PCB ;EF006? ADD #P.TCB,R2 ;POINT PAST BUSY FLAG WORD IN SUBPARTITION ;**-1S. BIT #TS$NHD,R4 ;IS TASK IMAGE A COMMON BLOCK?7 BNE 100$ ;IF NE YES, IGNORE WHETHER IT IS BUSY OR NOTE( TSTB P.BUSY+1(R1) ;MAIN PARTITION BUSY? BPL 90$ ;IF PL NO0085$: TRAP ER.PBS ;ERROR, PARTITION ALREADY BUSY/90$: TSTB -(R2) ;SUBPARTITION BUSY? (P.BUSY+1)E BNE 85$ ;IF NE YES: BISB -(R2),P.BUSY+1(R1) ;SET MAIN PARTITION BUSY (P.BUSY); BISB (R2)+,(R2)+ ;SET SUBPARTITION BUSY (P.BUSY)(P.BUSY+1)N/ MOV $LBLBF+2,T.PCB-T.NAM(R3) ;POINT TCB TO PCB;.100$: MOV $TCB,(R2)+ ;POINT PCB TO TCB (P.TCB) ;PJK052  .IF DF D$$YNM ;PJK052E ;PJK052I BR 110$ ;PJK052O7105$: ADD #P.STAT,R2 ;BUMP POINTER TO P.STAT ;PJK052$ ;PJK052T .ENDC ;PJK052 ;PJK052;:; CHECK IF TASK IS OVERLAIDS;(110$:E ;PJK052Y .IF DF P$$LAS ;PJK052 ;PJK052B. CLR $SGMT ;CLEAR SEGMENT INDICATOR ;PJK052 ;PJK052U .ENDC ;PJK052 ;PJK052T8 CMP (R5)+,(R5)+ ;SKIP TO TASK LOAD SIZE(L$BMGV)(L$BMXV)6 CMP (R5)+,(R5) ;LOAD SIZE = MAX SIZE (L$BLDZ)(L$BMXZ)2 BEQ 115$ ;IF EQ YES, TASK NOT OVERLAYED ;EF006 ;EF006 .IF DF P$$LAS ;EF006K ;EF006? TST L$BSGL-L$BMXZ(R5) ;IS SEGMENT LABEL BLOCK PRESENT? ;EF006F3 BNE 111$ ;NE => YES, PROCEED WITH CHECKS ;EF006 TRAP ER.TKB ; ;EF006@111$: INC $SGMT ;OVERLAID TASK WITH SEGMENT LABEL BLOCK ;EF006- BIT #TS$RES,R4 ;OVERLAYS RESIDENT? ;EF006 7 BNE 115$ ;NE =>YES, ELSE OVERLAYS NOT MEM RES ;EF006E ;EF006 .ENDC ;EF006I ;EF006- TRAP ER.OVL ;ELSE TASK IS OVERLAID ;**-1V;E,; DETERMINE IF MEMORY FOR PARTITION IS THERE; 6115$: MOV (R5),$TKSZ ;SAVE LOAD SIZE FOR TCB ;EF004 ;EF004 .IF DF M$$MGE ;EF030  ;EF030' TST $INCAM ;ANY INCREMENT? ;EF030  BEQ 117$ ;NO ;EF030 ;EF030 .IF DF P$$LAS ;EF0300 ;EF030& TST $SGMT ;TASK OVERLAID? ;EF030 BEQ 116$ ;NO ;EF0301 TRAP ER.INC ;NO INC WITH OVERLAID TASK ;EF030  ;EF030 .ENDC ;P$$LAS ;EF030 ;EF030>116$: ADD $INCAM,$TKSZ ;UPDATE TASK SIZE BY INCREMENT ;EF030117$: ;EF030K ;PJK052F .IF DF D$$YNM ;PJK052 ;PJK052EF BIT #PS.SYS,(R2) ;IS MAIN PCB FOR SYSTEM-CONTROLLED PARTITION ;PJK052 BEQ 120$ ;EQ => NO ;PJK0527 SUB #P.STAT,R2 ;POINT R2 TO BEGINNING OF PCB ;PJK052E: CALL FIND ;ALLOCATE SPACE IN PARTITION FOR TASK ;PJK052@ MOV $PCB,$LBLBF+2 ;SAVE PTR TO SUB-PCB IN LABEL BUFFER ;PJK0526 MOV $PCB,R2 ;POINT R2 TO ALLOCATED SUB-PCB ;PJK0523 ADD #P.STAT,R2 ;POINT TO PCB STATUS WORD ;PJK052 120$: ;PJK052 .ENDC ;D$$YNM ;PJK052P ;PJK052Y .ENDC ;M$$MGE ;PJK052K ;PJK052( ;**-2F .IF DF P$$LASF ADD #P.ATT-P.STAT,R2 ;POINT TO ATTACHMENT DESCRIPTOR LISTHEADR LISTHE' MOV R2,2(R2) ;INITIALIZE BACK POINTER. ADD #P.REL-P.ATT,R2 ;POINT TO RELOCATION BIAS .IFF/ ADD #P.REL-P.STAT,R2 ;POINT TO RELOCATION BIASB .ENDC .IF DF M$$MGE .IF DF M$$EXT ;PJK058 ;PJK058T) CMP (R2)+,#170000 ;I/O PAGE? ;PJK058 ;PJK0580 .IFF ;PJK058  ;PJK058  CMP (R2)+,#7600 ;I/O PAGE?  ;PJK058  .ENDC ;M$$EX00,8DATADATADATADATADATADATADATAT ;PJK058 .IFFL CMP (R2)+,#160000 ;I/O PAGE?T .IFTF# BHIS 125$ ;IF HIS YES, SKIP CHECK2# MOV $SYSIZ,-(SP) ;PUSH SYSTEM SIZE# .IFT,< SUB -2(R2),(SP) ;SUBTRACT PARTITION RELOCATION BIAS (P.REL) .IFFA6 MOV -2(R2),R1 ;PICK UP PARTITION BASE ADDRESS (P.REL)' CALL DIV64 ;CONVERT TO 32 WORD BLOCKS2( SUB R1,(SP) ;SUBTRACT FROM SYSTEM SIZE .IFTF! BCS 78$ ;IF CS MEMORY NOT THERE7 MOV (R2),R1 ;PICK UP PARTITION SIZE IN BYTES (P.SIZE)  .IFF ' CALL DIV64 ;CONVERT TO 32 WORD BLOCKS6 .ENDC( SUB R1,(SP)+ ;SUBTRACT FROM SYSTEM SIZE! BCS 78$ ;IF CS MEMORY NOT THERE  BR 126$ ;PJK058.;%; CHECK IF TASK WILL FIT IN PARTITIONN;L125$:I0 MOV (R2),R1 ;PARTITION SIZE (P.SIZE) ;PJK058 ;PJK058D .IF NDF M$$MGE ;PJK058V ;PJK058K1 CALL DIV64 ;CONVERT TO 32 WORD BLOCKS ;PJK058 ;PJK058S .ENDC ;M$$MGE ;PJK058 ;PJK058 126$: ;PJK0588 CMP (R5),R1 ;MAX. TASK SIZE > PARTITION SIZE? (L$BMXZ) BLOS 130$ ;IF LOS THEN OK,+ TRAP ER.BIG ;TASK TOO LARGE FOR PARTITIONI.130$: BIT #TS$NHD,R4 ;LIBRARY OR COMMON BLOCK? BNE 220$ ;IF NE YES ! BIT #TS$PRV,R4 ;PRIVILEGED TASK?I .IF DF M$$MGE BEQ 140$ ;IF EQ NO .IFF  BEQ 220$ ;IF EQ NO .IFTF8 BIS #T3.PRV,T.ST3-T.NAM(R3) ; SET PRIVILEGED BIT IN TCB .IFFK0 CMP (R2),#60000 ;PARTITION SIZE > 12K? (P.SIZE) BLOS 220$ ;IF LOS NO6 TRAP ER.PSZ ;PARTITION TOO LARGE FOR PRIVILEGED TASK .IFTI140$:)' MOV (SP),R1 ;GET BASE ADDRESS OF TASKB3 MOV #17777,-(SP) ;PUSH CONSTANT OF 4K-1 ONTO STACK,) BIT (SP),R1 ;TASK START ON 4K BOUNDARY?F BEQ 160$ ;IF EQ YESR# TRAP ER.NBA ;INVALID BASE ADDRESSM"160$: ASL R1 ;CALCULATE FIRST APR ROL R1 ; ROL R1 ; ROL R1 ;+ MOV #8.,R0 ;ASSUME TASK IS NOT PRIVILEGEDT;I5; A PRIVILEGE TASK WITHOUT THE EXECUTIVE RESIDENT CANA; HAVE AN APR OF ZEROS;) TST R1 ;BASE = 0?O& BEQ 210$ ;IF EQ YES- APR CAN BE ZERO! BIT #TS$PRV,R4 ;TASK PRIVILEGED?4 BEQ 170$ ;IF EQ NO - ERROR;S8; IF R$$EXV IS DEFINED THEN AN EXTENDED EXECUTIVE EXISTS; - FIRST APR MUST BE 5 OR 6.;N .IF DF R$$EXV, CMP R1,#5 ;FIRST APR CANNOT BE LESS THEN 5 .IFFS, CMP R1,#4 ;FIRST APR CANNOT BE LESS THAN 4 .ENDC ;STARTING ADDRESS THE SAMEU BGE 180$ ;IF GE THEN OK%170$: TRAP ER.APR ;INVALID FIRST APRU6180$: CMP R1,#6 ;FIRST APR MUST NOT BE GREATER THAN 6 BGT 170$ ;IF GT ERROR 3 DEC R0 ;REDUCE NUMBER OF APRS FOR PRIVILEGED TASKR4210$: SUB R1,R0 ;CALCULATE NUMBER OF APR'S REQUIRED ;EF006 .IF DF P$$LAS ;EF006S ;EF006@ MOV -2(R5),R1 ;GET LOAD SIZE FOR CALCULATING APRS NEEDED ;EF006 ;EF006 .IFF ;EF006 ;EF006. MOV (R2),R1 ;PICK UP PARTITION SIZE (P.SIZE) ;PJK052B .ENDC ;PJK052 ;PJK052 6215$: CALL MUL64 ;CONVERT P.SIZE TO BYTES OR ;EF006* ;LOAD SIZE FOR OVERLAID TASKS ;EF006. ADD (SP),R1 ;ROUND UP TO 4K BOUNDARY ;**-1/ BIC (SP)+,R1 ;FINISH ROUNDING AND POP CONSTANTP1 ROL R1 ;CALCULATE APR'S NEEDED TO MAP PARTITION ROL R1 ; ROL R1 ; ROL R1 ;# CMP R1,R0 ;ENOUGH APR'S FOR TASK?  BLE 230$ ;IF LE YES ( TRAP ER.NAP ;NOT ENOUGH APR'S FOR TASK .IFTF220$: ;REFERENCE LABELN;P8; CHECK PARTITION BASE ADDRESS AND TASK STARTING ADDRESS;  .IFF: CMP (SP),P.REL-P.SIZE(R2) ;BASE ADDRESS & START THE SAME? ; (L$BSA)K BEQ 230$ ;IF EQ YES1/ TRAP ER.BMM ;TASK AND PARTITION BASE MISMATCH  .ENDC;G; PUT MAXIUM TASK SIZE IN TCBA;L230$: > MOV (R2),T.MXSZ-T.NAM(R3) ;PUT MAX. TASK SIZE IN TCB (L$BMXZ);,$; SAVE TASK AND PARTITION PARAMETERS;;# MOV #$TSKSZ,R1 ;POINT TO SAVE AREAP% MOV (R5)+,(R1) ;PICK UP TASK SIZE IN;$ ;32-WORD BLOCKS (L$BMXZ)($TSKSZ) SWAB (R1) ;CONVERT TO BYTESR ASRB (R1) ; ROR (R1) ; ROR (R1)+ ;E3 MOV (SP),(R1)+ ;SAVE BASE ADDRESS OF TASK ($TKBSA) ; MOV L$BHRB-L$BOFF(R5),(R1) ;HEADER RELATIVE BLOCK (00,@3Zg$HDRBK)N; SUB L$BBLK-L$BOFF(R5),(R1)+ ; AND MAKE IT RELATIVE TO LAST  ; LABEL BLOCK ($HDRBK)M6 MOV L$BBLK-L$BOFF(R5),(R1)+ ;BLOCKS IN TABLE ($TBLBK)- MOV P.REL-P.SIZE(R2),(R1) ;PICK UP PARTITIONS ;RELOCATION BIAS ($PARRL)% ADD (R5),(R1)+ ;ADD PARITION OFFSETT;IK; NOTE THAT A POINTER TO THE PCB FOR THE PARTITION FOR THE TASK HAS ALREADYQ; BEEN MOVED TO $LBLBF. IN THE FOLLOWING CODE DATA WILL BE MOVED INTO SUCCEEDING M; LOCATIONS IN THE LABEL BUFFER. EVENTUALLY THE ENTIRE BLOCK OF DATA WILL BESJ; MOVED INTO THE TASK HEADER IN THE TASK'S PARTITION. INDIRECT REFERENCESM; INTO THE LABEL BUFFER THROUGH R0 WILL BE LABLED IN THE COMMENT FIELD BY THEL.; OFFSET IN THE HEADER WHERE THEY WILL END UP.;I& CLR NUMLIB ;INITIALIZE LIBRARY COUNT ;EF006 .IF DF P$$LAS ;EF006T ;EF006@ MOV #$WNDBF+2,R0 ;POINT TO SECOND WORD OF WINDOW BUFFER ;EF0063 MOV $PCB,(R0)+ ;PUT PCB ADDRESS IN W.BPCB ;EF006  ;EF006 .IFF ;EF006 ;EF0069 MOV #$LBLBF+4,R0 ;POINT R0 TO THIRD WORD OF LABEL BUFFERK ;EF006 .ENDC ;EF006O ;EF006) BIT #TS$NHD,R4 ;LIBRARY OR COMMON BLOCK?E BEQ 240$ ;IF EQ NO JMP OTLLBC ;YES-240$:L. MOV (SP),(R0)+ ;MOVE TASK BASE ADDR. (W.BLVR) .IF DF M$$MGE ;EF006 .IF DF P$$LAS ;EF006 ;EF006& TST $SGMT ;TASK OVERLAID? ;EF006 BEQ 243$ ;EQ => NO ;EF006P@ MOV L$BLDZ-L$BOFF(R5),R1 ;USE TASK LOAD SIZE FOR W.BHVR ;EF006 BR 245$ ; ;EF0066 ;EF006 .ENDC ;EF006R/243$: MOV (R2),R1 ;GET SIZE (P.SIZE) ;EF006 -245$: CALL MUL64 ;CONVERT TO BYTES ;EF006B5 MOV R1,(R0) ;CALCULATE LAST VIRTUAL ADDRESS ;**-2B .IFF. MOV (R2),(R0) ;CALCULATE LAST VIRTUAL ADDRESS ;(P.SIZE)(W.BHVR) .IFTF9246$: ADD (SP),(R0) ;ADD TASK BASE ADDR (W.BHVR) ;EF006$ DEC (R0)+ ;(W.BHVR) ;**-1 .ENDC .IF DF P$$LAS MOV R4,-(SP) ;SAVE FLAGSR8 MOV #AS.RED!AS.WRT,R4 ;SET ACCESS CODE (R/W) ;PJK064: CALL SETATT ;GET ADDRESS OF ATTACHMENT DESCRIPTOR ;**-1 MOV (SP)+,R4 ;RESTORE FLAG WORD .IFF5 CLR (R0)+ ;ADDRESS OF ATTACHMENT DESCRIPTOR (W.BTT)R .ENDC ;EF006 .IF DF P$$LAS ;EF006M ;EF006& TST $SGMT ;TASK OVERLAID? ;EF006 BEQ 247$ ;EQ => NO ;EF006 C MOV L$BLDZ-L$BOFF(R5),(R0)+ ;USE TASK LOAD SIZE FOR W.BSIZ ;EF006R BR 249$ ; ;EF006 ;EF006 .ENDC ;EF006G ;EF006>247$: MOV (R2),(R0)+ ;SIZE OF WINDOW (P.SIZE) (W.BSIZ) ;EF006E249$: MOV (R5)+,(R0)+ ;PHYSICAL MEMORY OFFSET (L$BOFF)(W.BOFF) ;EF006D4 CLR $LBLBF ;CLEAR GARBAGE OUT OF HIGH BYTE ;**-2; MOVB (R5)+,$LBLBF ;SAVE NUMBER OF ADDRESS WINDOWS (L$BWND) 0 CMPB #MXWBLK,$LBLBF ;MORE THAN 8. WINDOW BLOCKS, BHIS 250$ ;IF HIS, THEN < 8. WINDOW BLOCKS TRAP ER.IWB ;TOO MANY WINDOWS(:250$: CMPB #RMPTKB,(R5)+ ;TASK BUILT FOR RSX-11MP (L$BSYS) BNE 260$ ;IF EQ, NOE% TRAP ER.TKB ;BUILT FOR WRONG SYSTEM 260$: .IF DF M$$MGE- MOV (SP),(R0) ;MOVE IN BASE ADDRESS (W.BFPD)O CALL SETAPR ;SET APR ;PJK063F .IF DF P$$LAS ;PJK063 ;PJK063UD MOV L$BLDZ-L$BSEG(R5),(R0) ;USE LOAD SIZE TO CALCULATE PDRS ;PJK063 ;PJK063P .IFF ;PJK063T ;PJK063S MOV (R2),(R0) ;GET MAX LENGTHW ;PJK063  .ENDC ;PJK063 ;PJK063T( CALL SETPDR ;CALCULATE NUMBER OF PDR'S ;AND CONTENTS OF LAST PDR  .IFFI- CLR (R0)+ ;CLEAR APR AND ACCESS CODE FIELDS0 CLR (R0)+ ;CLEAR CONTENTS OF LAST PDR (L$BLPD) .ENDC* TST (SP)+ ;POP BASE ADDRESS- CLEAN STACK; ; PROCESS LIBRARY REFERENCES;M .ENABL LSBG0 ADD #L$BLIB-L$BSEG,R5 ;POINT TO LIBRARY ENTRIESOTLLIB: 2 TST (R5) ;END OF LIBRARY REFERENCE BLKS.(R$LNAM) BEQ 140$ ;IF EQ YEST' MOV $PARHD,R2 ;ELSE POINT TO FIRST PCB  INC NUMLIB ;COUNT LIBRARIES620$:2 CMP (R5),P.NAM(R2) ;CHECK IF COMMON BLOCK MATCHES ;PARTITION NAME (R$LNAM) BNE 30$ ;IF NE NOE! CMP +2(R5),P.NAM+2(R2) ;(R$LNAM)R BEQ 40$ ;IF EQ MATCH00,HDATADATADATADATADATADATADATA,30$: MOV (R2),R2 ;POINT TO NEXT PCB (P.LNK) BNE 20$ ;BR IF ONE/ TRAP ER.NCB ;ELSE ERROR, INVALID COMMON BLOCK40$: MOV P.STAT(R2),R3 ;SAVE STATUS;" BIT #PS.COM,R3 ;COMMON PARTITION? BNE 50$ ;IF NE YES2 TRAP ER.CTP ;ELSE COMMON BLOCK IS TASK PARTITION750$: BITB P.BUSY(R2),P.BUSY+1(R2) ;COMMON BLOCK LOADED?; BNE 60$ ;IF NE YES1 TRAP ER.CNL ;ELSE COMMON BLOCK NOT LOADED ERRORS; ; CHECK LIBRARY PARAMETERS;3.60$: MOV P.SIZE(R2),R1 ;PICK UP PARTITION SIZE .IF NDF M$$MGEM' CALL DIV64 ;CONVERT TO 32-WORD BLOCKS( .ENDC3 CMP R$LMXZ(R5),R1 ;PARTITION LARGE ENOUGH?(R$LMXZ)D BLOS 70$ ;IF LOS YES+ TRAP ER.CBL ;COMMON BLOCK LENGTH MISMATCHR70$:8 CMP (R5)+,(R5)+ ;POINT TO START OF ADDRESS BLOCK(R$LSA) .IF DF M$$MGE .IFF/ CMP P.REL(R2),(R5) ;BASE ADDRESS SAME? (R$LSA)D BEQ 90$ ;IF EQ YES-80$: TRAP ER.CBB ;COMMON BLOCK BASE MISMATCH 90$: .ENDC;R-; SET UP PARTITION DESCRIPTOR FOR TASK HEADERI;U .IF DF P$$LAS ;EF006$ ;EF0068 MOV #$LIBBF,R0 ;POINT TO LIBRARY WINDOW BUFFER ;EF006 ;EF006 .ENDC ;EF006O ;EF006) MOV R2,(R0)+ ;STORE PCB ADDRESS (W.BPCB)C9 MOV (R5),(R0)+ ;STORE LOW VIRTUAL ADDRESS(R$LSA)(W.BLVR)( .IF DF M$$MGE& MOV P.SIZE(R2),R1 ;GET PARTITION SIZE CALL MUL64 ;CONVERT TO BYTES1 MOV R1,(R0) ;SET HIGH VIRTUAL ADDR4ESS (W.BHVR)L .IFFM5 MOV P.SIZE(R2),(R0) ;SET HIGH VIRTUAL ADDR. (W.BHVR)S .IFTF; ADD (R5)+,(R0) ;COMPLETE HIGH VIRTUAL ADDR.(R$LSA)(W.BHVR)E DEC (R0)+ ;(W.BHVR)P .ENDC .IF DF P$$LAS MOV R4,-(SP) ;SAVE FLAGS7 MOV #AS.RED!AS.WRT,R4 ;SET ACCESS CODE (R/W) ;PJK064S9 BIT #LD$ACC,R$LFLG-R$LHGV(R5) ;READ ONLY ACCESS? ;**-1U BNE 95$ ;IF NE NOL/ MOV #AS.RED,R4 ;SET ACCESS CODE (R) ;PJK064 95$: ;**-1 3 CALL SETATT ;GET ADDRESS OF ATTACHMENT DESCRIPTORT MOV (SP)+,R4 ;RESTORE FLAG WORD .IFFS4 CLR (R0)+ ;ADDR. OF ATTACHMENT DESCRIPTOR (W.BATT) .ENDC/ ADD #R$LOFF-R$LHGV,R5 ;POINT TO LIBRARY OFFSETR7 MOV P.SIZE(R2),(R0)+ ;SIZE OF WINDOW (P.SIZE)(W.BSIZ)6 MOV (R5)+,(R0)+ ;LIBRARY OFFSET IN PARTITION (R$LOFF) ;(W.BOFF)W2 ADD (R5)+,$LBLBF ;LIBRARY ADDRESS WINDOWS(R$LWND) CLRB $LBLBF+1 ;EF002$ .IF DF M$$MGE9 MOV R$LSA-R$LSEG(R5),(R0) ;SET TO CALCULATE APR (W.BFPD)*# CALL SETAPR ;CALCULATE AND POP R0T# MOV P.SIZE(R2),(R0) ;GET MAX. SIZER, CALL SETPDR ;CALCULATE NUMBER OF PDR'S AND ;CONTENTS OF LAST PDR  .IFF CLR (R0)+ ;CLEAR APR (W.BFPD) + CLR (R0)+ ;CLEAR CONTENTS OF PDR (W.BLPD)I .IFT(, TST -(R0) ;POINT BACK TO APR BYTE (W.BLPD)' TST (R5)+ ;SKIP TO FLAG WORD (R$LSEG)A* MOVB -2(R0),R1 ;PICK UP APR BYTE (W.BFPD) BIT #PS.PIC,R3 ;COMMON BLK PIC? BEQ 110$ ;IF EQ NO/ BIT #LD$REL,(R5) ;TASK EXPECTING PIC? (LIBFLG)( BNE 120$ ;IF NE YES 3100$: TRAP ER.CBP ;COMMON BLOCK PARAMETER MISMATCH.3110$: BIT #LD$REL,(R5) ;TASK EXPECTIN PIC? (LIBFLG) BNE 100$ ;IF NE YES, ERROR' SUB #UISDR0,R1 ;RECALCULATE APR NUMBER. ASRB R1 ;(3 BIC #177770,R3 ;EXTRACT APR NUMBER FROM PCB STATUS2 CMPB R3,R1 ;PARTITION APR MATCH LABEL BLOCK APR? BEQ 120$ ;IF EQ YES  TRAP ER.CBB ;ELSE ERROR)4120$: BIT #LD$ACC,(R5)+ ;READ/WRITE ACCESS? (LIBFLG)" BNE 130$ ;IF NE YES, ALREADY SET1 MOVB #2,(R0) ;ELSE SET FOR READ ONLY (H.PCBC+7)E130$:;/ TST (R0)+ ;BUMP POINTER TO NEXT LIBRARY BLOCKM .IFFA/ CMP (R5)+,(R5)+ ;MOVE TO DATE (R$LSEG)(R$LFLG)I .ENDC, CMP (R5)+,(R5)+ ;SKIP TO NEXT LIBRARY ENTRY TST (R5)+ ;(R$LDAT) # BR OTLLIB ;GET NEXT LIBRARY ENTRYN140$:R .IF DF P$$LAS ;EF006; ;EF0069 MOV $LBLBF,$WNDBF ;MOV #WINDOWS TO WINDOW BUFFER ;EF006E ;EF006 .ENDC ;EF006/ ;EF006? MOV $LBLBF,$NWNDS ;SAVE TOTAL NUM. OF WINDOWS REQUIRED BY TASKT+ MOV $LBLBF,R1 ;CALCULATE NUMBER OF WINDOWS+ SUB NUMLIB,R1 ;STILL NEEDED DEC R1 ;SUBTRACT ONE FOR TASK(" BEQ 160$ ;IF EQ NO EXTRA WINDOWS150$:.0 CLR (R0) ;CLEAR PCB ADDRESS (W.BPCB) ;PJK045, CLR W.BSIZ(R0) ;NEED ONLY CLEAR WINDO00,P3ZgW SIZE# ADD #WBLKS,R0 ;MOVE TO NEXT WINDOW  DEC R1 ;MORE?0 BNE 150$ ;IF NE YESM160$:B .IF NDF P$$LAS ;EF006 ;EF006! SUB #$LBLBF,R0 ;SIZE OF TRANSFER;) MOV R0,R2 ;MOVE INTO PLACE FOR TRANSFERS ;EF006 .IFF ;EF006 ;EF006G MOV #,R2 ;MOVE WINDIW 0 PLUS PREVIOUS WORD (#WINDOWS) ;EF006  ;EF006 .ENDC ;EF006E ;EF006, MOV #$LBLBF+L$BLUN,R5 ;ADDRESS OF LUN COUNT! MOV (R5),R5 ;GET NUMBER OF LUNS  ASL R5 ;CHANGE TO BYTESD ASL R5 ;/ ADD #H.LUN,R5 ;FIND END OF LUN TABLE IN HEADER ;NF; MOVE THE PARTITION AND COMMON BLOCK INFORMATION INTO PLACE IN HEADER;F .IF DF P$$LAS ;EF006, ;EF0061 MOV #$WNDBF,R0 ;POINT TO WINDOW BUFFER ;EF006E ;EF006 .IFF ;EF006 MOV #$LBLBF,R0 ;POINT TO BUFFER ;EF006 .ENDC ;EF006; MOV #$PARRL,R1 ;POINT TO FIRST WORD OF ADDRESS DOUBLE WORD, .IF DF M$$MGE$ MOV #140000,2(R1) ;SET BASE ADDRESS, ADD R5,2(R1) ;ADD OFFSET TO BASE ;PJK052 ;PJK052O ;PJK052E .IF DF P$$LAS ;PJK052 ;PJK052N ;PJK052E@ CALL .BLXO ;TRANSFER WINDOW 0 TO HEADER IN TASK REGION ;PJK052- ADD R2,2(R1) ;POINT PAST WINDOW 0 ;PJK05209 MOV $LBLBF,-(SP) ;GET #WINDOWS FOR TASK REGION ;PJK052 ( DEC (SP) ;SUBTRACT WINDOW 0 ;PJK0523 BEQ 170$ ;EQ => NO WINDOWS LEFT TO MOVE ;PJK052D. ASL (SP) ;CALCULATE # TASK WINDOWS ;PJK052& ASL (SP) ;LEFT IN HEADER ;PJK052 ASL (SP) ; ;PJK052O' ASL (SP) ;CONVERT TO BYTES ;PJK052 B170$: ADD (SP)+,2(R1) ;MOVE LIB ENTRIES PAST TASK WINDOWS ;PJK0527 SUB $LBLBF,$WNDBF ;GET # LIB WINDOWS TO XFER ;PJK052E& ;$WNDBF NO LONGER NEEDED ;PJK0522 BEQ 200$ ;EQ => NO LIB ENTRIES TO XFER ;PJK0521 MOV $WNDBF,R2 ;GET # LIB WINDOWS AND ;PJK052 % ASL R2 ;CONVERT TO BYTES ;PJK0520 ASL R2 ; ;PJK052  ASL R2 ; ;PJK052( ASL R2 ; ;PJK052N MOV #$LIBBF,R0 ;PJK052T MOV #$PARRL,R1 ; ;PJK052; CALLR .BLXO ;TRANSFER AND RETURN TO CONTROL LOOP ;PJK0521200$: RETURN ;RETURN TO CONTROL LOOP ;PJK052I ;PJK052B ;PJK052  .IFF ;PJK052  ;PJK052B; CALLR .BLXO ;TRANSFER AND RETRUN TO CONTROL LOOP ;PJK052S ;PJK052 .ENDC ;PJK052 ;PJK052P ;PJK052O .IFFT! MOV (R1),2(R1) ;SET BASE ADDRESS , ADD R5,2(R1) ;ADD OFFSET TO BASE ;PJK052; CALLR .BLXO ;TRANSFER AND RETURN TO CONTROL LOOP ;PJK052  .ENDC .DSABL LSB ;**-2; ; PROCESS LIBRARY LOAD;$HOTLLBC: CMP P.NAM-P.SIZE(R2),(R3)+ ;LIBRARY NAME SAME AS PARTITION NAME? ; (T.NAM) BEQ 10$ ;IF EQ MAYBE65$: TRAP ER.CBP ;ELSE COMMON BLOCK PARAMETER MISMATCH+10$: CMP P.NAM+2-P.SIZE(R2),(R3) ;(T.NAM+2)C BNE 5$ ;IF NE NO= MOV $LBLBF,T.PCB-T.NAM-2(R3) ;SET PCB POINTER IN TCB TO FREE, ; PARTITION ON ERROR1 ADD #P.BUSY-P.SIZE,R2 ;POINT TO BUSY MASK IN PCBL2 MOV P.MAIN-P.BUSY(R2),R1 ;POINT TO MAIN PARTITION9 BISB (R2),P.BUSY+1(R1) ;SET MAIN PARTITION BUSY (P.BUSY)I; BISB (R2)+,(R2)+ ;SET SUBPARTITION BUSY (P.BUSY)(P.BUSY+1) 0 ADD #P.STAT-P.TCB,R2 ;POINT TO PARTITION STATUS+ BICB #PS.PIC,(R2) ;ASSUME NOT PIC (P.STAT)C% BIT #TS$PIC,R4 ;IS COMMON BLOCK PIC?P .IF DF M$$MGE BEQ 20$ ;IF EQ NO  .IFF BEQ 30$ ;IF EQ NO( .IFTF/ BISB #PS.PIC,(R2) ;SET PIC BIT IN PCB (P.STAT)R .IFTU20$:0 MOV (SP)+,(R0) ;DEPOSIT START ADDRESS IN BUFFER1 CALL SETAPR ;CALCULATE APR BYTE AND ACCESS CODE+' SUB #UISDR0,-(R0) ;RETRIEVE APR NUMBER ASRB (R0) ;)2 BICB #PS.APR,(R2) ;CLEAR FIRST APR ENTRY (P.STAT)0 BISB (R0),(R2) ;AND SET NEW ONE IN PCB (P.STAT) .IFTF30$: .IFF.& TST (SP)+ ;POP BASE ADDRESS OF STACK .IFTF RETURNM .IFF2;ID; DIV64 - DIVIDE NUMBER IN R1 BY 64 (LOW 6 BITS ASSUMED TO BE CLEAR);. DIV64: ASL R1  ROL R1B ROLB R1 SWAB R1 RETURN0 .ENDC;01; SETAPR - CALCULATE APR AND SET ACCESS CODE OF 6C;UL; THE ADDRESS IN00,XDATADATADATADATADATADATADATA THE LOCATION POINTED TO BY R0 IS CONVERTED TO AN APR NUMBERP; IN THE LOW BYTE OF THE WORD POINTED TO BY R0 AND AN ACCESS CODE OF 6 IS PLACED<; IN THE HIGH BYTE. R0 POINTS TO THE FOLLOWING WORD ON EXIT; .IF DF M$$MGE SETAPR: ROL (R0) ;CALCULATE APR ROL (R0). ROL (R0) ROL (R0)I" ROL (R0) ;CONVERT TO WORD OFFSET/ BIC #177761,(R0) ;CLEAR ALL BUT APR NUMBER * 2R: ADD #UISDR0,(R0)+ ;CONVERT TO POINTER INTO USER APR TABLE RETURNA;R5;SETPDR - CALCULATE THE NUMBER OF PDR'S NEEDED TO MAPC$; AND THE CONTENTS OF THE LAST APR; ?; THE SIZE IN THE LOCATION POINTED TO BY R0 IS CONVERTED TO THE E; NUMBER OF PDR'S NEEDED AND THE CONTENTS OF THE LAST PDR. THE NUMBERWJ; OF PDR'S IS PUT IN THE BYTE PRECEEDING THE WORD POINTED TO BY R0 AND THE?; CONTENTS OF THE LAST PDR IS PUT IN THE WORD POINTED TO BY R0.R,; ON RETURN R0 IS POINTING TO THE NEXT WORD.;MSETPDR:A, DEC (R0) ;CALCULATE THE LOAD SIZE MINUS ONE6 ASL (R0) ;SHIFT APR'S REQUIRED MINUS ONE TO HIGH BYTE4 RORB (R0) ;LEN. OF LAST RANGE MINUS ONE IN LOW BYTE- MOVB +1(R0),-1(R0) ;MOVE INTO PLACE (W.BNPD)T SWAB (R0) ;IN HIGH BYE' INCB -1(R0) ;CALCULATE APR'S REQUIREDC! MOVB #6,(R0) ;INSERT ACCESS CODEW# TST (R0)+ ;INCREMENT TO NEXT WORDE RETURNW;O;E .IF DF P$$LAS;;O;N9; SETATT - GET ADDRESS OF ATTACHMENT DESCRIPTOR AND STORE L; IN THE POINTED TO BY R0. ON RETURN R0 WILL BE POINTING TO THE NEXT WORD.;E; INPUT:; R4 = ACCESS CODE ;ISETATT:Q MOV R2,-(SP) ;SAVE REGISTER MOV R5,-(SP) ;SAVEA MOV R0,-(SP) ;SAVE ! MOV $TCB,R5 ;GET ADDRESS OF TCB $ MOV $LBLBF+2,R2 ;GET ADDRESS OF PCB+ CALL $CRATT ;CREATE ATTACHMENT DESCRIPTORI4 BCC 10$ ;IF CC ATTACHMENT DESCRIPTOR WAS ALLOCATED TRAP ER.POL ;NONE ALLOCATEDR10$:/ INCB A.MPCT(R1) ;INCREMENT MAP COUNT ;EF028T MOV (SP)+,R0 ;RESTORE* MOV R1,(R0)+ ;STORE ADDRESS OF DESCRIPTOR MOV (SP)+,R5 ;RESTORE MOV (SP)+,R2 ;RESTORE RETURN .ENDC ;EF006 ;EF006 .IF DF D$$YNM ;EF006I ;EF006; ;EF006(I; FIND -- THIS ROUTINE ALLOCATES A PCB FOR THE TASK SUB-PARTITION ;EF006SI; AND CALLS $FNDSP TO ALLOCATE SPACE WITHIN THE SYSTEM-CONTROLLED ;EF006T; PARTITION. ;EF006T; ;EF006N; INPUTS: ;EF006'; R2 -- POINTER TO MAIN PCB ;EF0062; ;EF006R*; ALL REGISTERS ARE PRESERVED ;EF006; ;EF006R ;EF006FIND: ;EF006R, JSR PC,$SAVAL ;SAVE ALL REGISTERS ;EF006* MOV #P.LGTH,R1 ;SET PCB LENGTH ;EF0064 MOV R2,R5 ;SAVE POINTER TO MAIN PCB IN R5 ;EF0062 CALL $SWSTK,10$ ;SWITCH TO SYSTEM STATE ;EF006( CALL $ALOCB ;ALLOCATE A PCB ;EF006- MOV R0,$PCB ;SAVE ADDRESS OF PCB ;EF006 " BCC 5$ ;C = 0, RETURN ;EF006( CLR $PCB ;ALLOCATION FAILURE ;EF006 ;EF006 ;EF006+5$: RETURN ;IN USER STATE AGAIN ;EF006E ;EF006010$: MOV $PCB,R0 ;PICK UP PCB ADDRESS ;EF0060 BNE 15$ ;BLOCK SUCCESSFULLY ALLOCATED ;EF006* TRAP ER.POL ;INSUFFICIENT POOL ;EF006 ;EF006*15$: ADD R1,R0 ;POINT PAST PCB ;EF006, ASR R1 ;CHANGE BYTE TO WORD COUNT ;EF006%20$: CLR -(R0) ;AND CLEAR ;EF006V DEC R1 ; ;EF006 BNE 20$ ; ;EF0065 ;EF006 ;EF0064 MOV P.NAM(R5),P.NAM(R0) ;PUT MAIN PCB NAME ;EF006= MOV P.NAM+2(R5),P.NAM+2(R0) ;INTO ALLOCATED SUB-PCB ;EF0063 MOV $TKSZ,P.SIZE(R0) ;PUT SIZE IN SUB-PCB ;EF006E ;EF006 ;EF0063 CALL $SWSTK,100$ ;SWITCH TO SYSTEM STATE ;EF006N7 MOV R0,R4 ;USE R4 AS POINTER TO ALLOCATED PCB ;EF006T7 CALL $FNDSP ;ALLOCATE SPACE IN MAIN PARTITION ;EF006 1 MOV @$HEADR,R2 ;MOVE USER PS INTO R2 SO ;EF006D4 ADC 6(R2) ;THAT C BIT CAN BE PRESERVED FOR ;EF006( ;SUCCESSFUL ALLOCATION TEST ;EF006 ;EF0069 BIT #1,6(R2) ;BIT SET MEANS ALLOCATION FAILURE, ;EF006A0 BNE 100$ ;NE => SET, RETURN AND TRAP ;EF006- MOV $TCB,R1 ;PICK UP TCB ADDRESS ;EF0066/ MOV $PCB,R0 ;PICK UP SUB-PCB ADDRESS ;EF011S3 MOV R0,T.PCB(R1) ;PUT PCB POINTER IN 00,`-b3ZgTCB ;EF011R6 MOV R1,P.TCB(R0) ;PUT TCB ADDRESS IN SUB-PCB ;EF006; MOV R5,P.MAIN(R0) ;PUT MAIN-PCB ADDRESS IN SUB-PCB ;EF006N ;EF006 ;EF0068120$: RETURN ;RETURN TO USER STATE OR TO OTLLB ;EF006100$: ;EF006 9 BCC 120$ ;TEST PRESERVED C BIT -- C=0 =>SUCCESS ;EF006L3 TRAP ER.PBS ;C=1, TRAP -- PARTITION BUSY ;EF006A ;EF006 ;EF006 .ENDC ;EF006;V%; MUL64 - MULITPLY NUMBER IN R1 BY 64F;SMUL64: SWAB R1 ASRB R1 ROR R1  ROR R1F RETURNR .ENDC .ENDDRESS IN SUB-PCB ;EF006; MOV R5,P.MAIN(R0) ;PUT MAIN-PCB ADDRESS IN SUB-PCB ;EF006N ;EF006 ;EF0068120$: RETURN ;RETURN TO USER STATE OR TO OTLLB ;EF006100$: ;EF006 9 BCC 120$ ;TEST PRESERVED C BIT -- C=0 =>SUCCESS ;EF006L3 TRAP ER.PBS ;C=1, TRAP -- PARTITION BUSY ;EF006A ;EF006 ;EF006 .ENDC ;EF006;V%; MUL64 - MULITPLY NUMBER IN R1 BY 64F;SMUL64: SWAB R1 ASRB R1 ROR R1 .TITLE OTLLDR .IDENT /01.03/C;; COPYRIGHT (C) 1975, 1981); DIGITAL EQUIPMENT CORP., MAYNARD, MASS.E;IA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USEN@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.; @; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;.@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N; VERSION: 01.03; BY: THOMAS J MILLER; DATE: 2/4/75C;BB; OTLLD - LOAD DEVICE INITIATOR FOR THE RSX-11S ONLINE TASK LOADER;S; PREVIOUSLY MODIFIED BY:Y;H; J.M. MATTHEWSD; ; MODIFIED BY:; ; E.A. FLOYD 3-JAN-80 5; EF001 -- RT FORMAT SUPPORT ADDED FOR TU58 AND RX02D;H; P.J. KOBAR 8-JUL-81S0; PJK065 -- CORRRECT SPELLING OF E$SIZ FOR TS11;.; ;A; MACRO LIBRARY CALLST;F .MCALL ALUN$,DIR$,GLUN$;F"; DEVICE CHARACTERISTICS BIT MASKS;N,CB.FB== 1 ;RECORDS ARE IN FORMATTED BINARYCB.FIL==2 ;FILE NAME REQUIRED2(CB.SBR==4 ;SINGLE-BLOCK READS REQUIREDLUN1=1 ;LUN 1'E$SIZ=0 ;INITIALIZE TABLE ENTRY SIZEE;Y ; LOCAL DATA;H ; I/O ROUTINE DRIVING PARAMETERS;F.$FLGS:: .BLKW 1 ;DEVICE CHARACTERISTICS FLAGS; "; DPB'S FOR SETTING UP LOAD DEVICE;8JGLUN1: GLUN$ LUN1,$FBBUF ;GET LUN INFORMATION DPB FOR CHECKING REDIRECTIONCALUN1: ALUN$ LUN1 ;DEVICE AND UNIT FILLED IN BY PARSER (SEE BELOW)R;SJ; DESTINATION FOR INFORMATION FROM PARSER. NOTE THAT DEVICE NAME AND UNIT"; ARE PLACED IN THE ASSIGN LUN DPB;L+$FLBLK==ALUN1+A.LUNA ;FILE SPECIFIER BLOCKI .BLKW 3 ;A& .IF DF TC11!RX11!TU58!RX21 ;EF001 ;**-1 * .WORD 2000 ;RT PERMANENT FILE ENTRY CODE .ENDC!$FLRAD::.BLKW 3 ;FILE NAME RAD50N;L#; TABLE OF VALID LOAD DEVICE BLOCKSF;F%; THE FORMAT OF EACH DEVICE BLOCK IS:R; WORD0= DEVICE NAME IN ASCII;%; WORD1= DEVICE CHARACTERISTICS FLAGSE-; WORD2= ADDRESS OF DEVICE INITIATION ROUTINER"; WORD3= DEVICE-SPECIFIC PARAMETER;N; NOTE: @; THE DEVICE BLOCKS MUST BE ORDERED ALPHABETICALLY BY THE DEVICE:; NAME ASCII REVERSED. THUS, FOR EXAMPLE, PR PRECEDES CT.; $LODTB:: .IF DF TU58XXX= . .ASCII /DD/ .WORD CB.FIL .WORD DDINI .WORD 6 ;DIRECTORY START BLOCK E$SIZ= .-XXX .ENDC .IF DF TU16XXX= . .ASCII /MM/ .WORD CB.FIL!CB.SBR .WORD MTINI .WORD 14. ;LABEL BLOCK SIZED E$SIZ= .-XXX .ENDC .IF DF PR11XXX= . .ASCII /PR/ .WORD CB.FB .WORD PRINI- .WORD 0 ;DEVICE-SPECIFIC PARAMETER NOT USEDB E$SIZ= .-XXX .ENDC .IF DF TS11XXX= . .ASCII /MS/ .WORD CB.FIL!CB.SBR .WORD MTINI .WORD 14. ;LABEL BLOCK SIZEFE$SIZ= .-XXX ;PJK065 ;**-1  .ENDC .IF DF TA11XXX= . .ASCII /CT/ .WORD CB.FIL!CB.SBR .WORD CTINI .WORD 32. ;LABEL B00-hDATADATADATADATADATADATADATALOCK SIZEO E$SIZ= .-XXX .ENDC .IF DF TC11XXX= . .ASCII /DT/ .WORD CB.FILN .WORD DTINI .WORD 6 ;DIRECTORY START BLOCK E$SIZ= .-XXX .ENDC .IF DF TM11XXX= . .ASCII /MT/ .WORD CB.FIL!CB.SBR .WORD MTINI .WORD 14. ;LABEL BLOCK SIZEM E$SIZ= .-XXX .ENDC .IF DF RX11XXX= . .ASCII /DX/ .WORD CB.FIL .WORD DXINI .WORD 6 ;DIRECTORY START BLOCK E$SIZ= .-XXX .ENDC .IF DF RX21XXX= . .ASCII /DY/ .WORD CB.FIL3 .WORD DYINI .WORD 6 ;DIRECTORY START BLOCK E$SIZ= .-XXX .ENDC .WORD -1 ;TABLE TERMINATOR;.); *** - $OTLLD LOAD DEVICE INITIALIZATIONK;$M; THIS ROUTINE ASSUMES THAT THE ASSIGN LUN DPB IS ALREADY SET UP. IT ASSIGNSIJ; THE LOAD DEVICE LUN AND DOES A GET LUN INFORMATION TO ASCERTAIN WHAT THEL; (POSSIBLY REDIRECTED-TO) LOAD DEVICE IS. IT THEN SEARCHES THE LOAD DEVICEL; TABLE TO SEE IF THE SPECIFIED DEVICE IS A VALID LOAD DEVICE. IF IT IS THEK; TABLE ENTRY IS USED TO INITIALIZE THE FLAGS WORD AND CALL THE APPROPRIATESJ; INITIALIZATION ROUTINE TO PREPARE THE DEVICE AND THE LOAD DEVICE DPB FORI; READING THE FIRST LABEL BLOCK. IF THE FILE IS IN FORMATTED BINARY, THE $; FORMATTED BINARY BUFFER IS PRIMED.; 6$OTLLD::DIR$ #ALUN1 ;ASSIGN THE SPECIFIED LOAD DEVICE' BCC 10$ ;IF CC THEN SUCCESSFUL ASSIGNE( TRAP ER.DNS ;ELSE DEVICE NOT IN SYSTEM,10$: DIR$ #GLUN1 ;GET EFFECTIVE DEVICE NAME6 MOV #$LODTB-E$SIZ+2,R0 ;INITIALIZE LOAD TABLE POINTER)20$: ADD #E$SIZ-2,R0 ;POINT TO NEXT ENTRY  CMP $FBBUF,(R0)+ ;FOUND ENTRY? # BHI 20$ ;IF HI THEN NOT THERE YET  BEQ 30$ ;FOUND ENTRY. TRAP ER.NVD ;IF LT, THEN DEVICE NOT IN TABLE*30$: TST $FLRAD ;WAS FILE NAME SPECIFIED? BNE 40$ ;IF NE YES+ BIT #CB.FIL,(R0) ;ELSE FILE NAME REQUIRED?N BEQ 40$ ;IF EQ NOE. TRAP ER.FRQ ;ELSE ERROR - FILE NAME REQUIRED+40$: MOV (R0)+,$FLGS ;INITIALIZE FLAGS WORD:8 MOV (R0)+,-(SP) ;SAVE ADDRESS OF INITIALIZATION ROUTINE. MOV (R0)+,R5 ;SAVE DEVICE SPECIFIC WORD IN R53 MOV #IO.ATT,$LQDPB+Q.IOFN ;SET FOR ATTACH FUNCTION  CALL $QIOLR ;ATTACH DEVICE8 MOV #IO.RLB,$LQDPB+Q.IOFN ;SET FUNCTION FOR DEVICE READ .IF DF R$$FBV* CALL @(SP)+ ;CALL INITIALIZATION ROUTINE+ BIT #CB.FB,$FLGS ;FORMATTED BINARY DEVICE?F BEQ PRINI ;IF EQ, NO RETURNDE MOV #$FBBUF,$LQDPB+Q.IOPL ;ELSE POINT DPB TO FORMATTED BINARY BUFFERD* MOV #80.,$LQDPB+Q.IOPL+2 ;SET BUFFER SIZE1 CALLR $READ1 ;PRIME THE FORMATTED BINARY BUFFERN .IFFM4 CALLR @(SP)+ ;CALL INITIALIZATION ROUTINE AND EXIT .ENDC .IF DF TA11;O ; CASSETE INITIALIZATION ROUTINE;V7CTINI: CALL TINI ;REWIND TAPE AND SET UP FOR COROUTINE.&10$: CALL @(SP)+ ;READ NEXT FILE NAME+ MOV $FLBLK+6,R3 ;POINT TO PARSED FILE NAMEA' MOV #6,R2 ;SET BYTE COUNT FOR COMPARE  CALL COMPAR ;CHECK IF MATCH+) BCS 10$ ;GET NEXT FILE NAME IF NO MATCHB, MOV $FLBLK+10,R3 ;POINT TO PARSED EXTENSION' MOV #3,R2 ;SET BYTE COUNT FOR COMPARE  CALL COMPAR ;CHECK IF MATCH) BCS 10$ ;GET NEXT FILE NAME IF NO MATCH 4 CMPB (R4)+,(SP)+ ;POINT TO BLOCK SIZE AND POP STACK6 CMP (R1)+,(R1)+ ;POINT PAST CHARACTER COUNT IN $LQDPB2 MOVB (R4)+,-(R1) ;MOVE IN HIGH BYTE OF BLOCK SIZE# MOVB (R4)+,-(R1) ;MOVE IN LOW BYTE,, MOV #512.,R4 ;SET SIZE OF LABEL BLOCK IN R4;TF; MAKE SURE THAT BLOCK SIZE IS EVENLY DIVISIBLE INTO LABEL BLOCK SIZE.;IC20$: SUB (R1),R4 ;DECREASE LABEL BLOCK SIZE BY CASSETTE BLOCK SIZEV+ BEQ 30$ ;IF EQ THEN OK (EVENLY DIVISIBLE)O BGT 20$ ;IF GT THEN CONTINUE! TRAP ER.BSZ ;INVALID BLOCK SIZE30$: .IFTF;T@; PAPER TAPE INITIALIZATION ROUTINE (NO INITIALIZATION REQUIRED);U PRINI: RETURNV .IFT1; $; COMPAR - STRING COMPARISON ROUTINE;( ; INPUTS:N;W; R2=CHARACTER COUNT#; R3=PTR TO ASCIZ COMPARISON STRING$; R4=PTR TO FILE NAME READ FROM TAPE;I ; OUTPUTS:;L ; CC IF MATCHI; CS IF NO MATCH; R2,R3 DESTROYED A; IF CC, R4 POINTS PAST LAST CHARACTER COMPARED IN FILE NAME READY;V+COMPAR: CMPB (R4)+,(R3)+ ;COMPARE CHARACTER  BEQ 10$ ;CONTINUE FI EQUAL- CMPB -1(R4),#40 ;ELSE WAS00-pb3Zg LAST CHAR A SPACE?Z& BNE 20$ ;IF NOT, DEFINATELY NO MATCH0 TSTB -(R3) ;AT END OF ASCIZ COMPARISON STRING? BNE 20$ ;IF NE NO, NO MATCHE10$: DEC R2 ;DECREMENT COUNTA BNE COMPAR ;IF NE CONTINUE$ BR 30$ ;ELSE MATCH, RETURN WITH CC20$: SEC 30$: RETURN .ENDC .IF DF TM11!TU16!TS11;H ; MAGTAPE INITIALIZATION ROUTINE;N3MTINI: CALL TINI ;REWIND TAPE AND SET UP COROUTINE; MOV #IO.STC,(R5) ;SET FOR SET MAGTAPE CHARACTERISTICS FUNCN' MOV #4,(R1) ;SET UP CHARACTISTICS BITS CALL $QIOLR ;INITIATE FUNCTION%10$: CALL @(SP)+ ;GET NEXT FILE NAME $ MOV #$FLRAD,R3 ;POINT TO FILE RAD501 CMP (R4)+,(R3)+ ;COMPARE FILE NAME AND EXTENSIONM BNE 10$ ;B CMP (R4)+,(R3)+ ; BNE 10$ ;0 CMP (R4)+,(R3)+ ; BNE 10$ ;0! CMP (R4)+,$FLBLK+4 ;COMPARE UICS BNE 10$ ;1" TST (SP)+ ;POP COROUTINE ADDRESS@ MOV #512.,$LQDPB+Q.IOPL+2 ;SET BUFFER COUNT FOR TASK IMAGE READ RETURN .ENDC .IF DF TA11!TM11!TU16!TS11A;IL; COMMON MAGTAPE INITIALIZATION ROUTINE. UPON THE FIRST CALL TO THIS ROUTINEL; THE TAPE IS REWOUND, THE DEVICE-SPECIFIC WORD OBTAINED FROM THE LOAD TABLEL; (THE LABEL BLOCK SIZE) IS STORED IN THE BYTE COUNT WORD OF THE LOAD DEVICEM; DPB AND REGISTERS R1 AND R5 ARE SET TO POINT TO THE FIRST PARAMETER WORD OFLO; THE LOAD DEVICE DPB AND THE FUNCTION WORD OF THE LOAD DEVICE DPB,RESPECTIVELY$K; SUCCEEDING COROUTINE CALLS RESULT IN THE NEXT LABEL BLOCK BEING READ FROM; THE TAPE INTO $LBLBF.T;AATINI: MOV R5,$LQDPB+Q.IOPL+2 ;MOVE IN COUNT FOR LABEL-BLOCK COUNTA: MOV #$LQDPB+Q.IOFN,R5 ;POINT TO FUNCTION CODE WORD IN DPB* MOV #IO.RWD,(R5) ;SET FOR REWIND FUNCTION CALL $QIOLR ;REWIND TAPE< MOV #$LQDPB+Q.IOPL,R1 ;POINT TO FIRST PARAMETER WORD IN DPB CALL @(SP)+ ;RETURN TO CALLERH,10$: MOV #IO.RVB,(R5) ;SET FOR READ FUNCTION, MOV #$LBLBF,R4 ;POINT TO LABEL BLOCK BUFFER' MOV R4,(R1) ; AND SET IT IN THE DPBC CALL $QIOL ;READ FILE LABELL BPL 15$ ;IF PL NO ERROR  CMPB R0,#IE.EOF ;END OF FILE?$ BEQ 17$ ;IF EQ YES, FILE NOT FOUND TRAP ER.IOE ;ELSE I/O ERRORD15$: TST (R4) ;FILE NAME READ?O BNE 20$ ;IF NE YES.17$: TRAP ER.NFL ;ELSE ERROR - FILE NOT FOUND220$: CALL @(SP)+ ;RETURN TO CALLER WITH FILE NAME. MOV #IO.SPF,(R5) ;SET FOR SPACE FILE FUNCTION$ MOV #1,(R1) ;SET TO SPACE ONE FILE CALL $QIOLR ;SPACE FILE#' BR 10$ ;BRANCH TO READ NEXT FILE NAMEM .ENDC' .IF DF TC11!RX11!TU58!RX21 ;EF001D ;**-1L; <; RT TU58 INITIALIZATION ROUTINE (SAME AS RT FLOPPY ROUTINE);QDDINI: ;REFERENCE LABEL;E?; RT DECTAPE INITIALIZATION ROUTINE (SAME AS RT FLOPPY ROUTINE)E;SDTINI: ;REFERENCE LABEL;IA; RT RX02 INITIALIZATION ROUTINE (SAME AS RT RX11 FLOPPY ROUTINE)M;#DYINI: ;REFERENCE LABEL;C"; RT FLOPPY INITIALIZATION ROUTINE;IBDXINI: MOV #$LQDPB+Q.IOPL,R4 ;POINT TO FIRST PARAMETER WORD IN DPB: MOV #$LBLBF,R0 ;POINT TO LABEL BUFFER FOR DIRECTORY BLOCK# MOV R0,(R4)+ ;PLACE POINTER IN DPBN) MOV #512.,(R4)+ ;SET COUNT FOR ONE BLOCKT' CMP (R4)+,(R4)+ ;POINT TO BLOCK NUMBER# MOV R5,(R4) ;SET THE BLOCK NUMBERT2 BNE 10$ ;IF NE, ANOTHER DIRECTORY SEGMENT EXISTS,5$: TRAP ER.NFL ;ELSE ERROR, FILE NOT FOUND-10$: CALL DIRBLK ;READ FIRST DIRECTORY BLOCK TST (R0)+ ;POINT TO LINK WORDC# MOV (R0)+,R5 ;SAVE LINK WORD IN R5' TST (R0)+ ;POINT TO EXTRA BYTES ENTRY % MOV (R0)+,R2 ;SAVE EXTRA BYTES IN R2L BIT #177401,R2 ;LEGAL VALUE?F) BNE 5$ ;IF NE NO, REPORT FILE NOT FOUNDI' MOV (R0)+,R3 ;SAVE INITIAL START BLOCK 320$: CALL @(SP)+ ;MAKE SURE WE ARE STILL IN BUFFERE2 CMP (R0),#4000 ;LOGICAL END OF DIRECTORY SEGMENT? BNE 30$ ;IF NE NOT) TST (SP)+ ;ELSE FLUSH COROUTINE ADDRESSE/ BR DXINI ;BR TO HANDLE NEXT DIRECTORY SEGMENTSB30$: MOV #$FLRAD-2,R1 ;POINT TO PERMANENT ENTRY CODE AND FILE NAME140$: CALL @(SP)+ ;MAKE SURE WE ARE WITHIN BUFFER  CMP (R0)+,(R1)+ ;MATCH? BNE 50$ ;IF NE NON' CMP R1,#$FLRAD+6 ;AT END OF FILE NAME?E BLO 40$ ;IF LO NOT BR 60$ ;ELSE FILE FOUND+<50$: SUB #$FLRAD+6,R1 ;CALCULATE NEGATIVE OF BYTES REMAINING SUB R1,R0 ;POINT00-x.zDATADATADATADATADATADATADATA TO FILE SIZE,3 CALL @(SP)+ ;MAKE SURE WE ARE STILL WITHIN BUFFERI! ADD (R0)+,R3 ;UPDATE START BLOCKO8 CMP (R0)+,(R0)+ ;POINT TO END OF FIXED PORTION OF ENTRY* ADD R2,R0 ;POINT TO NEXT DIRECTORY ENTRY, BR 20$ ;BR TO PROCESS NEXT DIRECTORY ENTRY+60$: MOV R3,(R4) ;PLACE START BLOCK IN DPB($ TST (SP)+ ;FLUSH COROUTINE ADDRESS! RETURN ;RETURN TO CONTROL LOOPL;EF; THE FOLLOWING COROUTINE IS USED TO CHECK THE CURRENT POSITION IN THE6; LABEL BUFFER AND READ DIRECTORY BLOCKS AS NECESSARY.;I,DIRBLK: CALL $QIOLR ;READ A DIRECTORY BLOCK$ INC (R4) ;BUMP BLOCK NUMBER IN DPB#10$: CALL @(SP)+ ;RETURN TO CALLER+) CMP R0,#$LBLBF+512. ;PAST END OF BUFFER?A BLO 10$ ;IF LO NOE" SUB #512.,R0 ;ELSE ADJUST POINTER, BR DIRBLK ;BR TO READ NEXT DIRECTORY BLOCK .ENDC .END DPB($ TST (SP)+ ;FLUSH COROUTINE ADDRESS! RETURN ;RETURN TO CONTROL LOOPL;EF; THE FOLLOWING COROUTINE IS USED TO CHECK THE CURRENT POSITION IN THE6; LABEL BUFFER AND READ DIRECTORY BLOCKS AS NECESSARY.;I .TITLE OTLQIO .IDENT /03/;C;YA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.T; ; COPYRIGHT (C) 1976, 1980/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.;B>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I; ; VERSION: 03E; BY: THOMAS J MILLER; DATE: 2/4/75 ;H; ; MODIFIED BY:;H; JO ANN KASSON 30-AUG-76$; JAK002 - LOADABLE DRIVERS & QIOW$;O; E. A. FLOYD 1-APR-80S*; EF003 -- CORRECT OTLQIO TO SENSE DEVICE); CHARACTERISTICS TO READ SINGLE DENSITYU; FLOPPY FROM RX02 DRIVE ;C; E. A. FLOYD 27-MAY-80(; EF009 -- ADD V3.0 SUPPORT FOR LOADING; TASKS WITH RESIDENT OVERLAYSO;HC; OTLQIO - COMMON QIO PROCESSING FOR THE RSX-11S ONLINE TASK LOADERP;E;D; MACRO LIBRARY CALLS;  .MCALL DIR$,QIO$,WTSE$  .MCALL DIR$,QIOW$ .MCALL QIOW$C ;EF003;; LOCAL SYMBOL DEFINITIONS;JEFN1=1 ;EVENT FLAG 1QLUN1=1 ;LUN 1LUN2=2 ;LUN 2;0 ; LOCAL DATA;Q; STATUS BLOCK AND DPB'S;T"$IOSB:: .BLKW 2 ;I/O STATUS BLOCK-$TQDPB::QIOW$ ,LUN2,EFN1,,$IOSB,,<$FBBUF,,'$>A'$LQDPB::QIOW$ ,LUN1,EFN1,,$IOSB,,<,,,,>A; ; OTL BUFFERSE;E ;EF009( .IF DF M$$MGE&D$$YNM&P$$LAS ;EF009 ;EF0099$SGTBL::.BLKW 256. ;TABLE FOR SEGMENT LOAD LIST ;EF009$! ;DISK LABEL BLOCK 3 ;EF009. ;EF009 .ENDC ;EF009  ;EF009:$FBBUF:: ;FORMATTED BINARY BUFFER AND CONSOLE I/O BUFFER .IF DF R$$FBO .BLKB 80. .ENDC,$LBLBF::.BLKW 256. ;LOAD DEVICE READ BUFFER;+;B=; *** - $OUTMG ROUTINE FOR OUTPUTTING MESSAGES TO THE CONSOLEF;, ; INPUTS:,;(; R1=CHARACTER COUNT OF MESSAGE IN FBBUF;;-B$OUTMG::MOV #IO.WVB,$TQDPB+Q.IOFN ;SET WRITE VIRTUAL FUNCTION CODE;+;L+; *** - $QIOT ENTRY POINT FOR CONSOLE INPUTL;L ; INPUTS: ;F9; R1=MAXIMUM CHARACTER COUNT FOR MESSAGE INPUT INTO FBBUFE%; (FUNCTION CODE MUST BE ALREADY SET)E;N;-:$QIOT:: MOV R1,$TQDPB+Q.IOPL+2 ;SET CHARACTER COUNT IN DPB% MOV #$TQDPB,R0 ;POINT TO CONSOLE DPBE# BR QWAIT ;BR TO INITIATE TRANSFERG;+;FO; *** - $QIOLR ENTRY POINT FOR READS FROM LOAD DEVICE WITH UNCONDITIONAL REPORTO; OF I/O ERRORS.;;-$QIOLR::MOV R0,-(SP) ;SAVE R0I( QIOW$C IO.SEC,LUN1,EFN1,,,, ;EF003# CALL $QIOL ;READ FROM LOAD DEVICEO! BPL 10$ ;IF PL NO ERROR, RETURN 1 C00./3ZgMPB R0,#IE.OFL ;DEVICE NOT IN SYSTEM (OFFLINE)?B BNE 5$ ;IF NE NO( TRAP ER.DNS ;ELSE DEVICE NOT IN SYSTEM5$: TRAP ER.IOE ;I/O ERROR 10$: MOV (SP)+,R0 ;RESTORE R0T RETURN ;T;+;L4; *** - $QIOL ENTRY POINT FOR READS FROM LOAD DEVICE; ;-0$QIOL:: MOV #$LQDPB,R0 ;POINT TO LOAD DEVICE DPB;N;QWAIT - COMMON QIO CODE;RL; AT THIS POINT R0 IS ASSUMED TO POINT AT THE QIO DPB AND THE DPB IS ASSUMED;; TO BE SET UP. THE LAST INSTRUCTION BEFORE THE RETURN IS:I;L; MOV $IOSB,R0;K; THIS ALLOWS CALLERS TO USE BPL AS A NO-ERROR BRANCH IMMEDIATELY AFTER THE F; CALL. FURTHERMORE R0 CONTAINS THE STATUS OF THE TRANSFER ON RETURN.;(QWAIT: .IF DF M$$MGE$ MTPS #PR7 ;;;RAISE PRIORITY TO PR7) MOV $PARRL,UISAR6 ;;;SET RELOCATION BIAS: .IFTF" DIR$ R0 ;;;READ FROM LOAD DEVICE BCC 20$ ;;;CONTINUE IF CC  .IF DF L$$DRV# CMP $DSW,#IE.UPN ;DRIVER UNLOADED?H BNE 30$ ;IF NE YES .ENDC, TST $TCB ;;;ELSE HAS A TCB BEEN ALLOCATED? BEQ 10$ ;;;IF EQ NO, EXITH5 TRAP ER.POL ;;;ELSE ENTER ERROR ROUTINE TO CLEAN UPI10$: JMP $OTLXT ;;;20$: .IFT  MTPS #0 ;;;DROP PRIORITY .ENDC30$:& MOVB $IOSB,R0 ;PASS BACK ERROR STATUS RETURNI .END TO PR7) MOV $PARRL,UISAR6 ;;;SET RELOCATION BIAS: .IFTF" DIR$ R0 ;;;READ FROM LOAD DEVICE BCC 20$ ;;;CONTINUE IF CC  .IF DF L$$DRV# CMP $DSW,#IE.UPN ;DRIVER UNLOADED?H BNE 30$ ;IF NE YES .ENDC, TST $TCB ;;;ELSE HAS A TCB BEEN ALLOCATED? BEQ 10$ ;;;IF EQ NO, E .TITLE OTLRDP .IDENT /01.2/;R; A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.;P; COPYRIGHT (C) 1976/; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;O>; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I;; VERSION 01.02T; BY: THOMAS J MILLER; DATE: 2/4/75U;; MODIFIED BY:; ; THOMAS J MILLER 8-NOV-75;R5; TM001 -- CORRECT BUG IN CASSETTE AND MAGTAPE READS /; AND BUG WHICH ALLOWS SOME I/O ERRORS TO GO T; UNDETECTED.E,; JAK002 SET PDR FOR LOADING FROM PAPER TAPE;OF; OTLRD - LOAD DEVICE INPUT ROUTINE FOR THE RSX-11S ONLINE TASK LOADER; ;E>; LOCAL IMPURE DATA FOR PROCESSING OF FORMATTED BINARY RECORDS;O A O .IF DF R$$FBC S TAFBPTR: .BLKW 1 ;SAVE AREA FOR POINTER INTO CURRENT BINARY RECORDO9FBCNT: .BLKW 1 ;CURRENT COUNT REMAINING IN BINARY RECORDH&CHKSUM: .BLKW 1 ;CHECKSUM ACCUMULATOR R ;+;CD; *** - $READ1 FIRST READ FROM LOAD DEVICE FOR FORMATTED BINARY MODE;O ; INPUTS:E;T$; LQDPB ASSUMED TO BE ALREADY SET UP;A ; OUTPUTS:; ; R0,R1,R2,R3 DESTROYED ;T;- .ENABL LSBN+$READ1::CLR $IOSB+2 ;INDICATE EMPTY BUFFERD: MOV #-1,R1 ;MAKE IT LOOK LIKE AN ENTRY WITH A ZERO COUNT5 ; (COUNT IS INCREMENTED AFTER PROCESSING BINARYP ; RECORD HEADER)! CLR CHKSUM ;INITIALIZE CHECKSUMT% BR 50$ ;BRANCH TO PROCESS FB HEADERS ;+; #; *** - $READ READ FROM LOAD DEVICEC; ; INPUTS:1;R; R5=FINAL BUFFER ADDRESSR; R1=TRANSFER COUNTE;O; ALL REGISTERS ARE PRESERVEDE;O;- E  .IFTF  U$$READ:: SAVRG$ ;SAVE ALL REGISTERS TST R1 ;ZERO-LENGTH READ?A BEQ 25$ ;IF EQ YES, RETURN B E .IFTV 1 * BITB #CB.FB,$FLGS ;FORMATTED BINARY MODE? BNE 10$ ;IF NE YES R N .IFTF R S< MOV #$LQDPB+Q.IOPL,R3 ;POINT TO FIRST PARAMETER WORD OF DPB" MOV R5,(R3)+ ;SE00/zDATADATADATADATADATADATADATAT BUFFER ADDRESS  H .IF DF R$$SBR  *0 BIT #CB.SBR,$FLGS ;SINGLE-BLOCK READS REQUIRED? BNE 4$ ;IF NE YES  R R .IFTF S ' MOV R1,(R3) ;ELSE ISSUE JUST ONE READE3$: CALLR $QIOLR ;F ;K; DEVICES WHICH MUST BE READ ONE BLOCK AT A TIME ARE READ DIRECTLY INTO THE2L; DESIRED DESTINATION BUFFER WITH THE EXCEPTION OF THE LAST BLOCK READ IF ITK; IS LARGER THAN THE DESIRED BYTE COUNT REMAINING. IN THIS CASE THE ENTIREPO; BLOCK IS READ INTO $LBLBF AND THE DESIRED DATA IS MOVED INTO THE DESTINATION K; BUFFER. NOTE THAT THIS DOES NOT CONFLICT WITH 512. BYTE READS TO $LBLBF,?N; SINCE THEY WILL ALWAYS COME OUT EVEN AND THE ENTIRE TRANSFER WILL BE READ IN ; DIRECTLY. ;L Q .IFTF  24$: MOV (R3),R2 ;PICK UP CHARACTER COUNT FOR READ5$: SUB R2,R1 ;LAST READ?2 BEQ 3$ ;IF EQ YES AND READ IS EXACT SIZE DESIRED" BCC 6$ ;IF CC THEN NOT LAST READ4 ADD R1,R2 ;CALCULATE REQUIRED COUNT FROM LAST READ- MOV #$PARRL,R1 ;POINT TO ADDRESS DOUBLE WORDH5 MOV -(R3),2(R1) ;POINT TO FINAL DESTINATION OF INPUTR3 MOV #$LBLBF,(R3) ;DIVERT THIS READ TO LABEL BUFFERA CALL $QIOLR ;READ LAST BLOCK( MOV (R3),R0 ;POINT TO SOURCE FOR .BLXO7 CALLR .BLXO ;MOVE IN LAST PART OF TASK IMAGE AND EXIT/6$: CALL $QIOLR ;TRANSFER DIRECTLY INTO BUFFERE   .IF DF M$$MGE A 0 ADD (R3),R5 ;BUMP BUFFER POINTER BY COUNT READ CALL ADCHK ;CHECK THE ADDRESSE3 MOV R5,-2(R3) ;UPDATE BUFFER POINTER FOR NEXT READE  V .IFFL  I5 ADD (R3),-2(R3) ;UPDATE BUFFER POINTER FOR NEXT READF L S .ENDC  U BR 5$ ;BR BACK FOR NEXT READ R  .ENDC F A;CK; FORMATTED BINARY TRANSFERS ARE HANDLED HERE. THE FORMATTED BINARY BLOCKSRN; ARE FIRST READ INTO FBBUF. HEADERS AND CHECKSUMS ARE VERIFIED AND DISCARDED?; AND THE DATA IS MOVED INTO THE FINAL BUFFER POINTED TO BY R5.5L; BESIDES THE VALUES IN R5 AND R1 SET PRIOR TO ENTRY, THE FOLLOWING ELEMENTS#; DRIVE FORMATTED BINARY TRANSFERS:E;RC; FBPTR=CURRENT POINTER INTO FORMATTED BINARY RECORD. THE VALUE IN C; THIS LOCATION IS LOADED INTO R3 UPON ENTRY AND UPDATED FROMDC; FROM R3 UPON EXIT. R3 IS INITIALIZED AFTER EVERY READ FROMD-; THE LOAD DEVICE IN THE ROUTINE INBYT.S;EC; FBCNT=COUNT OF REMAINING BYTES IN CURRENT BINARY RECORD. UPDATEDNB; FROM THE COUNT FIELD OF EACH BINARY RECORD HEADER AS IT IS; ENCOUNTERED.;RC; CHKSUM=CUMULATIVE CHECKSUM COUNT FOR CURRENT BINARY RECORD. THISYH; LOCATION IS INITIALIZED TO ZERO UPON INITIAL ENTRY FROM $READ1.D; IT RETURNS TO ZERO AFTER EACH CORRECTLY READ BINARY RECORD.;T F D .IFT  R R,10$: MOV FBPTR,R3 ;PICK UP FB RECORD POINTER,20$: SUB #1,R1 ;DECREMENT DESTINATION COUNT' BCC 30$ ;IF CC, THEN MORE TO TRANSFERG, MOV R3,FBPTR ;ELSE UPDATE FB RECORD POINTER  R .IFTF T E(25$: RETURN ;RETURN, TRANSFER COMPLETE   .IFTE . R230$: CALL INBYT ;GET NEXT BYTE FROM BINARY RECORD8 SUB #1,FBCNT ;DECREMENT FB RECORD COUNT, CHECKSUM BYTE? BCS 40$ ;IF CS, YESR $ D .IF DF M$$MGE U $ MTPS #PR7 ;;;RAISE PRIORITY TO PR7) MOV $PARRL,UISAR6 ;;;SET RELOCATION BIAS:( MOV #77406,UISDR6 ;;; SET UP PDR LENGTH : B .IFTF C E' MOVB R2,(R5)+ ;;;MOVE BYTE INTO BUFFERH M  .IFTS G M MTPS #0 ;;;DROP PRIORITY# CALL ADCHK ;CHECK CURRENT ADDRESSE35$: T  .ENDC T S! BR 20$ ;BRANCH TO GET NEXT BYTER 40$: TSTB CHKSUM ;VALID CHKSUM? BEQ 50$ ;IF EQ YES" TRAP ER.CHK ;ELSE CHECKSUM ERROR50$: CALL INBYT ;GET NEXT BYTE  TST R2 ;HEADER RECORD? BEQ 50$ ;NO, SKIP NULLS  DEC R2 ;IS IT IT A 1? BEQ 70$ ;IF EQ YES'60$: TRAP ER.BFB ;BAD FORMATTED BINARY;70$: CALL INBYT ;GET NEXT BYTEF TST R2 ;IS IT NULL?5 BNE 60$ ;IF NE NOB% CALL INBYT ;ACCUMULATE RECORD COUNT0 MOVB R2,FBCNT ; CALL INBYT ; MOVB R2,FBCNT+1 ;& SUB #4,FBCNT ;ADJUST COUNT FOR HEADER) BCS 60$ ;ERROR IF COUNT WAS LESS THAN 4S$ INC R1 ;ADJUST COUNT FOR LOOP BACK) BR 20$ ;BRANCH TO PROCESS BINARY RECORD: .DSABL LSB; ;T;TL; INBYT - GET NEXT BYTE FROM BINARY RECO00/03ZgRD BUFFER AND REPLENISH IF NECESSARY; ; INPUTS: ; @; $IOSB+2=CURRENT UNPROCESSED BYTE COUNT IN BINARY RECORD BUFFER,; R3=CURRENT POINTER IN BINARY RECORD BUFFER+; CHKSUM=CURRENT CHECKSUM FOR BINARY RECORDC; ; OUTPUTS:;2; R2=BYTE FROM BINARY RECORD; $IOSB+2,R3,CHKSUM UPDATED ;J DINBYT: SUB #1,$IOSB+2 ;DECREMENT BUFFER COUNT, CHARACTERS REMAINING? BCC 10$ ;IF CC YES, CALL $QIOL ;READ INTO BINARY RECORD BUFFER BPL 8$ ;IF PL NO CMP R0,#IE.EOF ;END OF FILE?B BEQ 5$ ;IF EQ YESD TRAP ER.IOE ;ELSE I/O ERRORA+5$: CMP $IOSB+2,R1 ;DESIRED COUNT RECEIVED?R BHIS 8$ ;IF HIS YESI" TRAP ER.EOF ;ELSE UNEXPECTED EOF(8$: MOV #$FBBUF,R3 ;RESET BUFFER POINTER BR INBYT ;PROCESS FIRST BYTE%10$: MOVB (R3)+,R2 ;PICK UP NEXT BYTEN! ADD R2,CHKSUM ;CUMULATE CHECKSUMA RETURN  Y .ENDC I + .IF DF M$$MGE  N(ADCHK: CMP R5,#160000 ;PAST 4K BOUNDARY? BLO 10$ ;IF LO NOE& ADD #200,$PARRL ;BUMP RELOCATION BIAS SUB #20000,R5 ;ADJUST R5 BACK 10$: RETURNQ  F .ENDC T  .END ;ELSE I/O ERRORA+5$: CMP $IOSB+2,R1 ;DESIRED COUNT RECEIVED?R BHIS 8$ ;IF HIS YESI" TRAP ER.EOF ;ELSE UNEXPECTED EOF(8$: MOV #$FBBUF,R3 ;RESET BUFFER POINTER BR INBYT ;PROCESS FIRST BYTE%10$: MOVB (R3)+,R2 ;PICK UP NEXT BYTEN! ADD R2,CHKSUM ;CUMULATE CHECKSUMA RETURN  Y .ENDC I + .IF DF M$$MGE  N(ADCHK: CMP R5,#160000 ;PAST 4K BOUNDARY? BLO 10$ ;IF LO NOE& ADD #200,$PARRL ;BUMP RELOCATION BIAS SUB #20000,R5 ;ADJUST R5 BACK 10$: RETURNQ  F .ENMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;S@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N; VERSION 1.1; BY: THOMAS J MILLER; DATE: 3/28/75;N; MODIFIED BY:; J. GALLANT 27-FEB-81&; JG004 -- ADD SUPPORT FOR RX02 DEVICE;M<; SIPPRE - PREFIX FILE FOR ASSEMBLING MODULES OF THE RSX-11S#; SYSTEM IMAGE PRESERVATION PROGRAMN;S;EL; CONDITIONAL ASSEMBLY VARIABLE FOR FULL ERROR MESSAGE REPORTING. WITH FULLJ; ERROR MESSAGE REPORTING, ERROR MESSAGES INCLUDE A NUMERIC ERROR CODE ANDO; A BRIEF ASCII DESCRIPTION OF THE ERROR CONDITION. WITHOUT FULL ERROR MESSAGELN; REPORTING, THE ASCII DESCRIPTION IS OMITTED. FOR FULL REPORT OF ERRORS, THEL; SYMBOL "R$$ERM" MUST BE DEFINED HERE. IF FULL REPORT OF ERROR MESSAGES ISK; NOT DESIRED, THE DEFINITION OF "R$$ERM" MUST BE PRECEDED BY A SEMI-COLON.T+; THE DEFINITION LINE FOR "R$$ERM" FOLLOWS.O;T ;R$$ERM=0Y;A-; MACRO FOR INCLUDING SUPPORT OF LOAD DEVICESL; O; THE FIRST ARGUMENT IN THE INCLUD MACRO IS THE SYMBOL WHICH SIP MODULES USE TOEH; CONDITIONALIZE CODE SPECIFIC TO SUPPORT OF THE PARTICULAR LOAD DEVICE.P; THE SECOND ARGUMENT IS THE SYMBOL WHICH IS PLACED IN THE ASSEMBLY PREFIX MODULO; RSXMC DURING SYSGEN TO INDICATE THE PRESENCE OF A DRIVER FOR THE DEVICE. THE M; MACRO CAUSES THE FIRST SYMBOL TO BE DEFINED IF THE SECOND SYMBOL IS PRESENTE ; IN RSXMC. ;  .MACRO INCLUD A,B .IF DF B=A=0 .ENDC .ENDM;DO; EACH OF THE FOLLOWING INCLUD STATEMENTS CAUSE SUPPORT FOR THE DESIGNATED LOAD M; DEVICE TO BE INCLUDED IN SIP IF THE STANDARD DRIVER FOR THE DEVICE HAS BEENTO; GENERATED INTO THE SYSTEM. IF THE STANDARD DRIVER FOR A LOAD DEVICE HAS BEENNL; INCLUDED IN THE SYSTEM, BUT SUPPORT FOR THAT DEVICE IN SIP IS NOT DESIRED,J; THE CORRESPONDING INCLUD STATEMENT MUST BE PRECEDED BY A SEMI-COLON (;).J; NO SUPPORT WILL BE GENERATED INTO SIP FOR DEVICES FOR WHICH DRIVERS HAVEM; NOT BEEN GENETATED INTO THE SYSTEM. THE DEVICES ARE LISTED ALPHABETICALLY.T;A! INCLUD PP11,P$$P11 ;PC11 SUPPORT! INCLUD RX11,R$$X11 ;RX11 SUPPORTH- INCLUD RX21,R$$X21 ;RX02 SUPPORT ; JG004E! INCLUD TA11,T$$A11 ;TA11 SUPPORTA! INCLUD TC11,T$$C11 ;TC11 SUPPORTB! INCLUD TM11,T$$M11 ;TM11 SUPPORT ! INCLUD TU16,T$$J16 ;TU16 SUPPORTO .IIF NDF $SIP .LISTPONDING INCLUD STATEMENT MUST BE PRECEDED BY A SEMI-COLON (;).J; NO SUPPORT WILL BE GENERATED INTO SIP FOR DEVICES FOR WHICH DRIVERS HAVEM; NOT BEEN GENETATED INTO THE SYSTEM. THE DEVICES ARE001zDATADATADATADATADATADATADATA .TITLE SIPB .IDENT /02.3/;I;UA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.I;U/; COPYRIGHT (C) 1976, 1977, 1979, 1980, 1981 /; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.T; >; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A>; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE>; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR>; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE>; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH>; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE>; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC.;I?; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ?; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;O=; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFS9; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.I ; ;I;; VERSION: 02.3T; BY: THOMAS J MILLER; DATE: 3/25/75;; MODIFIED BY:; ; J. H. MATTHEWS 10-NOV-77;R:; JM003 -- MODIFIED IOCHK TO LOOK FOR SYSCM AS LAST ENTRY ; IN ATL.; ; J. H. MATTHEWS 30-APR-79; 0; JM035 -- SET UP USER PDR 6 IF A MAPPED SYSTEM;I; J. GALLANT 2-27-81'; JG004 -- ADD SUPPORT FOR RX02 DEVICEQ;M; J. GALLANT 7-23-81; JG005 -- ADD 22 BIT SUPPORT O;H>; SIP - CONTROL LOOP FOR THE RSX-11S SYSTEM IMAGE PRESERVATION ; PROGRAM ;D;; GLOBAL IMPURE DATA;S;$TRPSV::.BLKW 1 ;NONEXISTANT MEMORY TRAP ADDRESS SAVE AREAI9$SAVE:: .BLKW 1 ;TEMPORARY SAVE AREA FOR TCB POINTER ANDO ; KERNAL STACK POINTER($FLGS:: .BLKW 1 ;DEVICE FLAGS SAVE AREA$$UNIT:: .BLKW 1 ;DEVICE UNIT NUMBER;UJ; *** - $SIP ENTRY POINT FOR THE RSX-11S SYSTEM IMAGE PRESERVATION PROGRAM; ;$SIP:: MOV @#4,$TRPSV ;SAVE NONEXISTANT MEMORY TRAP ADDRESSB;P*; *** - $RSTRT RESTART ENTRY POINT FOR SIP;S8; GET AND DECODE COMMAND LINE AND INITIALIZE LOAD DEVICE;P($RSTRT::MOV #$BOOT,SP ;SET STACK POINTER) MOV #LUN1,R0 ;MOVE LOAD DEVICE LUN TO R0B9 CALL $DET ;DETACH PREVIOUS LOAD DEVICE (ERRORS IGNORED)E INC R0 ;CALCULATE TI: LUNB( CALL $DET ;DETACH TI: (ERRORS IGNORED)- CALL $SIPCD ;READ AND DECODE A COMMAND LINEE: CALL $SIPLD ;INITIALIZE LOAD DEVICE AND SET UP BOOTSTRAP;'; LABEL BLOCK AND BOOT BLOCK PROCESSING ;O MTPS #PR7 ;;;LOCK EVERYONE OUT) CALL IOCHK ;;;CHECK FOR OUTSTANDING I/ON; MOV #IO.WLB,$QDPB+Q.IOFN ;;;SET FOR WRITE LOGICAL FUNCTIONT/ MOV #512.,R0 ;;;SET BOOT AND LABEL BLOCK COUNT * CLR $QDPB+Q.IOPL+10 ;;;CLEAR BLOCK NUMBER# MOV $FLGS,R3 ;;;PICK UP FLAGS WORDN .IF DF M$$MGE+ MOV #77406,@#UISDR6 ;;; SET UP USER PDR 6  .ENDC .IF DF PP11' BIT #CB.PP,R3 ;;;IS DEVICE PAPER TAPE? 6 BNE 20$ ;;;IF NE YES, SKIP TO CHECK FOR QUIET SYSTEM .ENDC BIT #CB.TAP,R3 ;;;TAPE DEVICE?+ BNE 10$ ;;;IF NE YES, SKIP TO WRITE LABELH/ MOV #$BOOT,$QDPB+Q.IOPL ;;;POINT TO BOOT BLOCKD! CALL $QIOWT ;;;WRITE BOOT BLOCKF. INC $QDPB+Q.IOPL+10 ;;;INCREMENT BLOCK NUMBER610$: MOV #$LABBF,$QDPB+Q.IOPL ;;;POINT TO LABEL BUFFER& CALL $QIOWT ;;;WRITE THE LABEL BLOCK .IF DF TA11!RX110+ BIT #CB.MBB,R3 ;;;MULTI-BOOT BLOCK DEVICE?. BEQ 15$ ;;;IF EQ NOB? CALL (R5) ;;;CALL SPECIAL ROUTINE TO WRITE FIRST PART OF BOOT > MOV #$SETUP,$QDPB+Q.IOPL ;;;POINT TO SETUP ROUTINE FOR OUTPUT# BR 17$ ;;;BR TO OUTPUT LAST BLOCKP .ENDC315$: BIT #CB.TAP!CB.DX,R3 ;;;TAPE DEVICE OR FLOPPY?C+ BEQ 20$ ;;;IF EQ NO, BOOT ALREADY WRITTENQ/ MOV #$BOOT,$QDPB+Q.IOPL ;;;POINT TO BOOT BLOCKB!17$: CALL $QIOWT ;;;WRITE IT OUTU;; WRITE OUT SYSTEM IMAGE;B-20$: CALL IOCHK ;;;CHECK FOR OUTSTANDING I/OB7 MOV #$BTEND,@#4 ;;;POINT VECTOR 4 TO END OF BOOT BLOCK .IF DF M$$MGE .IF DF M$$EXT ; JG005; CLR @#SR3 ;;; DISABLE 22 BIT MODE AND UNIBUS MAP ; JG005T .ENDC ; JG005/ MOV #CMODE!PR7,@#6 ;;;SET TO TRAP IN USER MODEB. MOV #CMODE!PR7,@#PS ;;;SET PREVIOUS TO KERNAL& MFPI SP ;;;PUSH KERNAL STACK POINTER MOV (SP)+,$SAVE ;;;AND SAVE I00123ZgT; .ENDC( MOV -(R4),R1 ;;;PICK UP THE CSR ADDRESS" MOV -(R4),R0 ;;;PICK UP CORE SIZE .IF DF TA11!TC11!TM11!TU16U> BIT #CB.PP!CB.DX!CB.DY,R3 ;;; PAPER TAPE OR FLOPPY ? ; JG0045 BNE 85$ ;;;IF NE YES, SKIP UNIT SELECT LOGIC ;**-15 MOV R1,R4 ;;;COPY CSR ADDRESS % INC R4 ;;;POINT TO UNIT SELECT BYTE .IF DF TU16 BIT #CB.MM,R3 ;;;TU16?R BEQ 84$ ;;;IF EQ NO#/ ADD #31,R4 ;;;ADJUST UNIT SELECT BYTE POINTERP .ENDC-84$: BICB #7,(R4) ;;;CLEAR UNIT SELECT FIELD; BISB $UNIT,(R4) ;;;SELECT UNIT; .ENDC 85$: ;;;V( .IF DF PP11!TA11!RX11!RX21 ; JG004 ;**-1U? BIT #CB.MBB!CB.PP,R3 ;;;MULTI-BLOCK BOOT DEVICE OR PAPER TAPE?4( BEQ 100$ ;;;IF EQ NO, INVOKE BOOT CODE .IF DF RX11 BIT #CB.DX,R3 ;;;FLOPPY? BEQ 90$ ;;;IF EQ NOI$ MOV R0,R4 ;;;COPY NUMBER OF BLOCKS' MOV $UNIT,R0 ;;;PASS UNIT NUMBER IN R0  .ENDC:90$: CALL (R5) ;;;EXECUTE BOOT CODE TO WRITE SYSTEM IMAGE* ;;; (RETURN IS VIA A JUMP TO $RSTRT) .ENDC100$: ;;; ; JG004N .IF DF RX21 ; JG004F+ BIT #CB.DY,R3 ;;; RX02 FLOPPY ? ; JG004 & BEQ 110$ ;;; IF EQUAL NO ; JG004 .IF DF M$$MGE ; JG0047 TST -(SP) ;;; STACK POINTER MUST BE AT SAME ; JG004F) ;;; LEVEL FOR SAVING SYSTEM ; JG004B) ;;; AS WHEN BOOTING SYSTEM. ; JG004U .ENDC ; JG004 .ENDC ; JG004110$: ;;; ; JG0040- JMP $BTBEG ;;; EXECUTE BOOT CODE ; JG004T ;**-1 ;R); SUBROUTINE TO CHECK FOR OUTSTANDING I/O; ; INPUTS:;; %; TASK SWITCHING SHOULD BE LOCKED OUTF;B ; OUTPUTS:;;; R0 IS DESTROYED 6; IF I/O IS OUTSTANDING, AN ERROR IS REPORTED DIRECTLY;M8IOCHK: MOV $ACTHD,R0 ;;;PICK UP PTR TO FIRST ACTIVE TASK'10$: TSTB T.IOC(R0) ;;;OUTSTANDING I/O?  BEQ 20$ ;;;IF EQ NO;! TRAP ER.IO ;;;ELSE REPORT ERRORU.20$: MOV T.ACTL(R0),R0 ;;;GET NEXT ACTIVE TASK. TST T.ACTL(R0) ;;;CHECK FOR POINTER TO SYSCM. BNE 10$ ;;;IF NE, THERE IS ONE RETURN ;;;ELSE RETURN .END $SIPFOR  .TITLE SIPBOO .IDENT /02.5/; *; COPYRIGHT (c) 1981;; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.,*; ALL RIGHTS RESERVED;VH; 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.;GH; 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 ; ;S;W; VERSION 02.5; BY: THOMAS J MILLER8; (PARTS OF THIS MODULE HAVE BEEN TAKEN FROM THE PRESRV%; BOOT-BLOCK MODULE BY SCOTT SMITH.)O; DATE: 3/25/75; ; MODIFIED BY:;E;; JK002 JO ANN KASSON 26-JUL-76 ;ZERO UNLOADED MEMORY AND G#; ;ADD DELAY IN TM11 BOOTSTRAPT* ;TO ALLOW BOOTING ON MOS 45 OR 11/70;U;E; J. H. MATTHEWS 4-NOV-77I;A&; JM002 -- ADD SUPPORT FOR ODD CSR'S.; ; J. H. MATTHEWS 18-NOV-77;E7; JM004 -- MODIFIED COUNTERS IN ROUTINE TO ZERO MEMORY 4; SO THAT IF R2 > $SYSIZ, 1K OF MEMORY IS ZEROED.; ; J. H. MATTHEWS 20-OCT-78;N=; JM023 -- CORRECTED PROBLEM OF SIP ZEROING LAST 1K INCLUDED; IN $SYSIZ; ; J. H. MATTHEWS 3-MAY-790;J/; JM036 -- UPDATE RSX11S VERSION NUMBER TO 2.2G; ; J. GALLANT 2-27-81'; JG004 -- ADD SUPPORT FOR RX02 DEVICEM;4; E. A. FLOYD 10-JUN-80H%; EF014 -- AFTER SIZING SYSTEM, SIZED; LAST PCB TO EXTEND TO END; OF MEMORY;O; J. GALLANT 23-JUL-81%; JG005 -- ADD 22 BIT SUPPORT TO SIPR; =; SIPBOO - BOOT BLOCK AND SYSTEM STARTUP CODE FOR THE RSX-11SH"; SYSTEM IMAGE PRESERVATION PROGAM;O;E; MACRO DEFINITION002zDATADATADATADATADATADATADATASI;L .MACRO BEGBOO NAM,CONDS .IF DF COND $'NAM'BOO::3 .WORD /2 .ENDM .MACRO ENDBOO NAM,NOPAGE NAM'END:" .IF GT NAM'END-$'NAM'BOO-2-MX$LENMX$LEN=NAM'END-$'NAM'BOO-2 .ENDC% SIZCHK $'NAM'BOO+2,512.-$BTBEG+$BOOTE .IF B NOPAGEL .PAGE .ENDC .ENDM .MACRO SIZCHK ADDR,SIZE .IF GT .-ADDR-SIZEJ( .ERROR .-ADDR-SIZE ;BOOT-BLOCK OVERFLOW .ENDC .ENDM;N; LOCAL SYMBOL DEFINITIONS;S.MX$LEN=0 ;INITIALIZE MAXIMUM BOOT BLOCK SIZE; ; LOCAL MESSAGE DATA/; NOTE -- SYSID AND DEVNAM MUST BE WORD ALIGNED';: .PSECT BOTPRE .NLIST BEX>8SYSMSG: .ASCII <15><12>/ RSX-11S V4.0 BL/ ; JG004%SYSID: .ASCII /XXXX NNNK/ ;**-1M .IF DF M$$MGE .ASCII / MAPPED/<177> .ENDC .ASCIZ <15><12>/>/A DEVMSG: .ASCII <15><12>/DEVICE /+DEVNAM: .ASCIZ /DDUU: NOT IN CONFIGURATION/- .EVEN .LIST BEX .PAGE;N); DEVICE-SPECIFIC BOOT-BLOCK RELATED CODES;SL; THE BOOT-BLOCK RELATED CODE FOR EACH DEVICE CONSISTS OF ONE OR MORE OF THE; FOLLOWING THREE ITEMS:;MO; 1)EVERY DEVICE HAS A BEGBOO-ENDBOO PAIR. IF AT LEAST ONE INSTRUCTION APPEARS>I; BETWEEN THE BEGBOO-ENDBOO PAIR, ALL OF THE INSTRUCTIONS IN BETWEEN WILLF; BE MOVED INTO THE BOOT-BLOCK BUFFER AT $BTBEG AND THE BUFFER WILL BEJ; PADDED AT THE END WITH NOP'S. IF THESE INSTRUCTIONS CONTAIN THE DEVICE-D; SPECIFIC BOOT BLOCK CODE, THEN A COMPLETE BOOT BLOCK MAY BE OUTPUTN; FROM $BOOT, THUS PREFIXING THE DEVICE-SPECIFIC CODE WITH THE REQUIRED COMMONF; BOOT-BLOCK CODE. THE DEVICE-SPECIFIC CODE BETWEEN THE BEGBOO-ENDBOOF; PAIR MUST BE CAPABLE OF WRITING AND READING THE ENTIRE SYSTEM IMAGE.?; THE CODE WILL BE ENTERED AT $BTBEG WITH THE FOLLOWING INPUTS:W;D; R0=SIZE OF SYSTEM IN BLOCKS (THE BLOCK SIZE DEPENDS ON THE DEVICE5; AND IS CALCULATED BY SIP FROM $SYSIZ IN THE EXEC.)O=; R1=CSR ADDRESS (OBTAINED FROM THE SCB OF THE DEVICE UNIT.)LB; R2=READ OR WRITE COMMAND (OBTAINED FROM THE LOAD DEVICE TABLE.);PL; EXIT FROM THE DEVICE-SPECIFIC CODE IS VIA A TRANSFER OF CONTROL TO THE ENDG; OF THE CODE. CONTROL WILL THEN PASS THROUGH THE NOP'S TO $BTEND. ATDJ; THIS POINT R2 MUST STILL CONTAIN THE ORIGINAL COMMAND TO INDICATE IF THE!; SYSTEM HAS JUST BEEN BOOTED IN.O;YI; 2)IMMEDIATELY FOLLOWING THE ENDBOO FOR A DEVICE, THERE MAY BE A SPECIALBH; SUBROUTINE FOR THE DEVICE WHICH MAY BE ENTERED VIA A CALL AT THE FIRSTI; INSTRUCTION. SUCH A ROUTINE IS INCLUDED IF THE DEVICE DOES NOT USE THE 0; STANDARD SINGLE BOOT BLOCK BEGINNING AT $BOOT.;OI; 3)FOLLOWING THE SUBROUTINE MAY BE DEVICE-SPECIFIC BOOT-BLOCK CODE WHICHEK; IS OUTPUT BY THE SUBROUTINE AS REQUIRED BY THE DEVICE. THIS CODE WILL BETG; APPENDED BY THE COMMON CODE BEGINNING AT $BOOT, THUS PROVIDING USE OFOJ; THE SUBROUTINE SETUP UPON INPUT. ON INPUT, THE ENTRY POINT TO THIS CODEK; IS AT THE FIRST INSTRUCTION, AND ON OUTPUT THE ENTRY POINT IS PASSED BACKTG; IN R5 BY THE SPECIAL SUBROUTINE. UPON ENTRY FOR OUTPUT AND AFTER THEHH; CALL TO SETUP ON INPUT, REGISTERS R0-R2 ARE SET UP AS DESCRIBED ABOVE.;U .PAGE;B; DECTAPE BOOTSTRAPT;OH; THE FOLLOWING CODE IS MOVED TO THE BUFFER AT $BTBEG AND EXECUTED THERE;S BEGBOO DT,TC11 ;;;D .ENABL LSBM .IF DF M$$MGE% DEC R0 ;;;REDUCE BLOCK COUNT BY ONEU# ASL R0 ;;;DOUBLE NUMBER OF BLOCKS  .IFTF, SWAB R0 ;;;CONVERT TO WORDS (*2 IF MAPPED) .IFTE. MOVB R0,R3 ;;;SAVE NUMBER OF 32K WORD BLOCKS INC R3 ;;;! CLRB R0 ;;;CLEAR LOW ORDER BITSH! ROR R0 ;;;CONVERT BACK TO WORDSR% ADD #400,R0 ;;;READJUST BLOCK COUNT .IFTF& NEG R0 ;;;CONVERT TO TWOS COMPLEMENT .IFT 01$: MOV #100000,2(R1) ;;;SET COUNT FOR 32K WORDS DEC R3 ;;;DONE YET? BLT 29$ ;;;IF LT YES% BGT 2$ ;;;IF GT THEN NOT LAST BLOCKC .IFTF MOV R0,2(R1) ;;;SET WORD COUNT %2$: CLR 4(R1) ;;;START AT LOCATION 0T .IFT # BIT #60,R2 ;;;FIRST TIME THROUGH?;( BNE 15$ ;;;IF NE NO, SKIP BLOCK SEARCH .IFTF)DTSRC: BIS #4000,@R1 ;;;REVERSE DIRECTIONR%5$: MOVB #3,@R1 ;;;INIT BLOCK SEARCHJ7$: TSTB @R1 0023Zg;;;READY?F BPL 7$ ;;;IF PL NO TST @R1 ;;;ERROR?E BPL 5$ ;;;IF PL NODTERR: TST -2(R1) ;;;END ZONE?F BPL 30$ ;;;IF PL NO - FATALY)DTFWD: BIC #4000,@R1 ;;;CLEAR REVERSE BITF MOVB #3,@R1 ;;;SEARCH FORWARDF10$: BIT #100200,@R1 ;;;DONE?R) BMI DTERR ;;;IF MI YES - AND WITH ERRORO BEQ 10$ ;;;IF EQ LOOPT CMP 6(R1),#2 ;;;ARE WE THERE? BLT DTFWD ;;;IF LT NOT YET! BGT DTSRC ;;;IF GT WE PASSED IT:'15$: MOVB R2,@R1 ;;;START THE FUNCTION 20$: TSTB @R1 ;;;DONE?K BPL 20$ ;;;IF PL NO - LOOP TST @R1 ;;;ERRORS? BPL 25$ ;;;IF PL NOR' BIT #400,-2(R1) ;;;NONEXISTANT MEMORY?1- BNE 29$ ;;;IF NE YES, BR TO START UP SYSTEMY# BR 30$ ;;;ELSE BR TO HANDLE ERRORS25$: ;;;REFERENCE LABEL .IFTF. ADD #20,R2 ;;;BUMP EXTENDED BUS ADDRESS BITS& BR 1$ ;;;LOOP BACK FOR NEXT TRANSFER .IFTF 29$: SEC ;;;INDICATE NO ERRORS%30$: MOVB #1,@R1 ;;;STOP TAPE MOTIONI .IFTS* BIC #160,R2 ;;;RETRIEVE ORIGINAL COMMAND .ENDC! BCS 40$ ;;;IF CS THEN NO ERRORS  CMP R2,#5 ;;;BOOTING IN? BEQ . ;;;IF EQ YES, LOOP HERE,) TRAP ER.IOE ;;;ELSE PRINT ERROR MESSAGE;40$: .DSABL LSBT ENDBOO DT ;;;B .ENDC;O; CASSETTE BOOTSTRAP CODER;R,; NO CODE IS MOVED INTO THE BUFFER AT $BTBEG;E BEGBOO CT,TA11 ;I ENDBOO CT,NOPAGE ;A;RE; THE FOLLOWING SPECIAL CASSETTE BOOTSTRAP CODE IS EXECUTED TO OUTPUTML; THE FIRST BLOCK OF THE CASSETTE BOOTSTRAP. A SECONDARY BOOTSTRAP BLOCK IS; OUTPUT IN THE MODULE SIP.;B+ MOV #CTBOO,R5 ;POINT TO CASSETTE BOOTSTRAP; .IFTF .IF DF TA11!RX11 5MBB0: MOV -2(R4),4(R5) ;SET CSR ADDRESS IN BOOT BLOCK:" MOV (R4),10(R5) ;SET READ COMMAND8MBB1: MOV R5,$QDPB+Q.IOPL ;LOAD BOOTSTRAP ADDRESS IN DPB MOV #128.,R0 ;SET BYTE COUNTB< ADD #10.,R5 ;POINT TO ENTRY POINT FOR WRITING SYSTEM IMAGE& CALLR $QIOWT ;WRITE BLOCK AND RETURN .ENDC .IFTT; J; THIS IS THE CASSETTE BOOTSTRAP CODE. IT IS EXECUTED IN PLACE TO READ OR; WRITE THE SYSTEM IMAGE.;B(CTBOO: NOP ;REQUIRED FIRST INSTRUCTION" MOV (PC)+,R1 ;PICK UP CSR ADDRESS" .BLKW 1 ;FILLED IN BY SIP MODULE# MOV (PC)+,R2 ;PICK UP READ COMMAND4" .BLKW 1 ;FILLED IN BY SIP MODULE4 MOV #128.,R3 ;SET TO READ INTO NEXT BLOCK OF MEMORY# MOV R3,R5 ;SET TO READ 128. BYTES, CMP R2,#3 ;WRITE FUNCTION?- BEQ 35$ ;IF EQ YES, BR TO CHANGE BLOCK SIZEC10$: .IF DF M$$MGE( CMP R3,#160000 ;;;AT END OF APR6 RANGE? BLO 15$ ;;;IF LO NOC, MOV #140000,R3 ;;;ELSE RESET MEMORY ADDRESS/ ADD #200,UISAR6 ;;; AND BUMP RELOCATION BIASC15$: .IFTF MOV R5,R4 ;;;LTH OF A BLOCKF MOVB R2,@R1 ;;;START OPERATION+20$: TSTB @R1 ;;;WAIT FOR TRANSFER REQUEST BPL 20$ ;;;E DEC R4 ;;;MORE BYTES?E BLT 27$ ;;;IF LT NO - ILBS BIT #4,R2 ;;;READ? BNE 25$ ;;;IF NE YES MOVB (R3)+,2(R1) ;;;WRITE BR 20$ ;;;PROCEED '25$: MOVB 2(R1),(R3)+ ;;;STORE THE DATAM BR 20$ ;;;LOOP"27$: BISB #20,@R1 ;;;SET ILBS BIT30$: BITB #40,@R1 ;;;WAIT BEQ 30$ ;;;  TST @R1 ;;;ERROR? BPL 32$ ;;;IF PL NOA CMP R2,#5 ;;;BOOTING IN? BEQ . ;;;IF EQ YES, LOOP HERE;) TRAP ER.IOE ;;;ELSE PRINT ERROR MESSAGEE+32$: CMP #.+4,PC ;;;HAVE WE RELOCATED YET?E BEQ 40$ ;;;IF EQ YES& MOV #CTBOO,R4 ;;;POINT TO DESTINATION .IFTL MOV #2000,SP ;;;SET INITIAL SP; .IFF MOV #$BOOT,SP ;;;SET SP .IFTF5 CALL @#128. ;;;RELOCATE (AND SET UP KT11 IF MAPPED);235$: MOV #512.,R5 ;;;SET TO WRITE 512. BYTE BLOCKS .IFT; CLR @#UISAR6 ;;;CLEAR USER APR6, MOV #140000,R3 ;;;INITIALIZE MEMORY ADDRESS .IFF? CLR R3 ;;;RESET MEMORY ADDRESS .ENDC( BR 10$ ;;;BRANCH TO READ IN CORE IMAGE40$: DEC R0 ;;;MORE BLOCKS? BNE 10$ ;;;IF NE YES' TST (R2) ;;;EXIT VIA ODD ADDRESS TRAP. SIZCHK CTBOO,128. ;;;CHECK SIZE OF BOOT STRAP .PAGE .ENDC;,; MAGTAPE BOOTSTRAPF;I; THE FOLLOWING CODE IS MOVED TO THE BUFFER AT $BTBEG AND EXECUTED THERE.R;; BEGBOO MT,TU16!TM11 ;;;-$MMBOO==$MTBOO ;;;DEFINE FOR TU16 REFERENCE 5$: ;;;REFERENCE LABELI .IF DF M$$MGE002zDATADATADATADATADATADATADATA6 MOV #CMODE!PR7,@#6 ;;;SET TO TRAP IN USER MODE AT PR7 .IFFB# MOV #PR7,@#6 ;;;SET TO TRAP AT PR70 .ENDC0 BR 45$ ;;;BR FOR TM11 BOOT (THE LOW-ORDER BYTE0 ;;; IS CLEARED HERE FOR EXECUTING THE TU16 ;;; BOOT FIRST)P BR 15$ ;;;BR FOR TU16 BOOT710$: MOV #172440,R1 ;;;SET DEFAULT CSR ADDRESS FOR TU16O MOV #71,R2 ;;;SET READ COMMAND515$: MOV #40$-5$+$BTBEG,@#4 ;;;TRY MT ON MEMORY FAULTO# BIS #40,10(R1) ;;;RESET CONTROLLER =20$: MOV #-512.,6(R1) ;;;INIT FRAME COUNT REGISTER FOR WRITES,+ MOV #-512./2,2(R1) ;;;NO. OF WORDS TO READ. BIS R2,@R1 ;;;INIT OPERATION%30$: TSTB @R1 ;;;WAIT FOR COMPLETION  BPL 30$ ;;;IF PL NOT DONE- TST @R1 ;;;ERRORS? BPL 35$ ;;;IF PL NOC( BIT #4000,10(R1) ;;;NONEXISTANT MEMORY? BNE 70$ ;;;IF NE YES BR 62$ ;;;ELSE HANDLE ERRORD35$: DEC R0 ;;;MORE BLOCKS? BNE 20$ ;;;IF NE YES# BR 70$ ;;;BRANCH AROUND NEXT BOOT 340$: MOV #172522,R1 ;;;DEFAULT CSR ADDRESS FOR TM11C" MOV #60003,R2 ;;;SET READ COMMAND745$: MOV #10$-5$+$BTBEG,@#4 ;;;TRY TU16 ON MEMORY FAULT1* CLR 4(R1) ;;;SET TO FILL FROM LOCATION 0.47$: BIT #1,-2(R1) ;;;READY FOR FIRST COMMAND? BEQ 47$ ;;;IF EQ NO 050$: MOV #-512.,2(R1) ;;;NO. OF BYTES PER RECORD BIS R2,@R1 ;;;START A READ% MOV #25,R3 ;DELAY FOR THE SLOW TM11E55$: DEC R3 ;AND SOME MORE BNE 55$ ;D60$: BIT #1,-2(R1) ;;;TUR? BEQ 60$ ;;;IF EQ NO  TST @R1 ;;;ERROR?  BPL 65$ ;;;IF PL NO7# TSTB -2(R1) ;;;NONEXISTANT MEMORY1 BMI 70$ ;;;IF MI YES62$: BIT #12,R2 ;;;BOOTING IN?$ BNE . ;;;IF NE YES, LOOP HEREA) TRAP ER.IOE ;;;ELSE PRINT ERROR MESSAGEI$65$: DEC R0 ;;;MORE BLOCKS TO MOVE? BNE 50$ ;;;IF NE YES!70$: BIT #12,R2 ;;;READ COMMAND?1 BEQ 80$ ;;;IF EQ NOE( MOV R2,@#RDCMD ;;;ELSE INDICATE READ IN 80$: ;;;  ENDBOO MT ;;;E .ENDC; ; FLOPPY BOOTSTRAP CODE;:-; NO CODE IS MOVED INTO THE BUFFER AT $BTBEG.;T BEGBOO DX,RX11B ENDBOO DX,NOPAGE7;TG; THE FOLLOWING CODE IS THE SPECIAL ROUTINE WHICH OUTPUTS THE FIRST TWO I; SECTORS OF THE FLOPPY BOOTSTRAP. THE FINAL SECTOR IS OUTPUT BY THE SIPRK; MODULE. THE ROUTINES MBB0 AND MBB1 ARE IN THE SPECIAL CASSETTE BOOTSTRAPY ; ROUTINE.;2: MOV #$QDPB+Q.IOPL+10,R1 ;POINT TO BLOCK NUMBER IN QIO DPB9 MOV #DXBOO+128.,R5 ;POINT TO SECOND BLOCK OF FLOPPY BOOT< MOV #IO.WPB,$QDPB+Q.IOFN ;CHANGE FUNCTION TO WRITE PHYSICAL# MOV #28.,(R1) ;POINT TO SECTOR 28.T CALL MBB1 ;WRITE THE SECTORX- MOV #DXBOO,R5 ;POINT TO FIRST SECTOR OF BOOTC# MOV #26.,(R1) ;POINT TO SECTOR 26.W7 CALL MBB0 ;WRITE SECTOR AND CLACULATE ENTRY POINT FORI ;WRITING SYSTEM IMAGEU: MOV #30.,(R1) ;POINT TO SECTOR 30. FOR FINAL PART OF BOOT RETURN ; ;NI; THE FOLLOWING CODE IS THE FLOPPY BOOTSTRAP. IT IS EXECUTED IN PLACE TO#"; READ AND WRITE THE SYSTEM IMAGE.;  .ENABL LSB ;;;*DXBOO: NOP ;;;REQUIRED FIRST INSTRUCTION$ MOV (PC)+,R1 ;;;PICK UP CSR ADDRESS .BLKW 1 ;;;L MOV (PC)+,R2 ;;;PICK UP OP CODE .BLKW 1 ;;; +4$: TSTB (R1) ;;;WAIT HERE FOR DRIVE READYN BEQ 4$ ;;; TST R0 ;;;UNIT 1?E BEQ 5$ ;;;IF EQ NO' BIS #10020,R2 ;;;SET UNIT=1 IN COMMANDG#5$: MOV PC,R0 ;;;SET INITIAL COUNT01 BIT #2,R2 ;;;ARE WE BOOTING IN (READ FUNCTION)? 2 BEQ SKEW1 ;;;IF EQ NO, BRANCH TO BUMP PARAMETERS@ MOV #<3*256.>+1,R4 ;;;INITIALIZE TRACK ADDRESS TO TRACK 1 SEC 3, MOV #3,R5 ;;;SET TO RELOCATE AFTER 3 READS+ MOV #200,R3 ;;;SET INITIAL MEMORY ADDRESSS .IF DF M$$MGE MOV #2000,SP ;;;SET INITIAL SPW .IFF$ MOV #$BOOT-2,SP ;;;SET SP .IFTF, MOV PC,(SP) ;;;SET ADDRESS OF TRAN ROUTINE ADD #TRAN-.,(SP) ;;;;$ BR RESUM ;;;BR TO READ NEXT SECTORRESTRT: ;;;REFERENCE LABEL#10$: BIT #2,R2 ;;;EMPTY SILO? BNE 15$ ;;;IF NE YES 12$: CALL @(SP)+ ;;;WAIT FOR TR .IFTV' BPL BUMP ;;;IF PL DONE, CHECK ADDRESSO .IFFC BPL 30$ ;;;IF PL DONEO .IFTF MOVB (R3)+,(R1) ;;;FILL SILOL BR 12$ ;;;BR FOR MOREF 15$: CALL @(SP)+ ;;;WAIT FOR TR .IFTS' BPL BUMP ;;;IF PL DONE, CHECK ADDRESSP .IFFF BPL 30$ ;;;IF PL DON0023ZgED .IFTF MOVB (R1),(R3)+ ;;;EMPTY SILO BR 15$ ;;;BR FOR MOREX220$: SWAB R4 ;;;SWITCH TRACK AND SECTOR ADDRESSES> MOVB R4,(R1) ;;;MOVE IN TRACK OR SECTOR ADDRESS FOR TRANSFER- CMPB (R4)+,(R4)+ ;;;ADD IN INTERLEAVE FACTORF RESUM: ;;; .30$: CALL @(SP)+ ;;;INITIATE FUNCTION OR WAIT. BMI 20$ ;;;IF MI THEN ADDRESS BYTE IS NEEDEDB CMPB -(R4),-(R4) ;;;SUBTRACT INTERLEAVE FACTOR FROM TRACK ADDRESS# DEC R5 ;;;TIME TO ADJUST ADDRESS?  BLE SKEW0 ;;;IF LE YES2RESUM0: CMP R4,#<27.*256.> ;;;TIME TO WRAP AROUND? BHIS BUMP1 ;;;IF HIS YESRESUM2: ;;;REFERENCE LABELS"50$: DEC R0 ;;;MORE BLOCKS TO GO? BNE 10$ ;;;IF NE NO  BR DXDONE ;;;EXIT FROM BOOTR .DSABL LSB ;;; .ENABL LSB ;;;10$: TST -(R1) ;;;ERROR?& BMI DXERR ;;;IF MI YES, HANDLE ERROR SWAB R2 ;;;SWITCH FUNCTIONS$< CALL @(SP)+ ;;;RETURN WITH N-BIT CLEAR (FUNCTION COMPLETE)'TRAN: MOV R2,(R1)+ ;;;INITIATE FUNCTIONE 20$: TSTB -2(R1) ;;;TR OR DONE? BEQ 20$ ;;;IF EQ NOI BPL 10$ ;;;IF PL DONE#= CALL @(SP)+ ;;;RETURN WITH N-BIT SET (MUST ACCESS DATA REG) BR 20$ ;;;BR TO WAIT= SIZCHK DXBOO,128. ;;;CHECK SIZE OF FIRST BLOCK OF BOOT STRAPN .DSABL LSB ;;; .ENABL LSB ;;;/SKEW0: CMP R4,#<9.*256.>+1 ;;;TIME TO RELOCATE?) BNE 10$ ;;;IF NE NOR& MOV #DXBOO,R4 ;;;POINT TO DESTINATION0 MOV R2,@#RDCMD-$SETUP+256. ;;;SAVE READ COMMAND= CALL @#256. ;;;RELOCATE BOOTSTRAP (AND SET UP KT IF MAPPED)E! BR 5$ ;;;BR TO RESET PARAMETERS $SKEW1: MOV R4,R0 ;;;SET BLOCK COUNT15$: ASL R0 ;;;CONVERT FROM 256 WORD BLOCKS TO 64N ASL R0 ;;; WORD BLOCKS9 MOV #<17.*256.>+1,R4 ;;;ADDRESS SECTOR AFTER LABEL BLOCKI MOV #5,R5 ;;;SET SKEW COUNTER .IFT CLR @#UISAR6 ;;;CLEAR USER APR6, MOV #140000,R3 ;;;INITIALIZE MEMORY POINTER .IFFN% CLR R3 ;;;INITIALIZE MEMORY POINTER .IFTF( MOV #TRAN,(SP) ;;;SET COROUTINE ADDRESS BIT #2,R2 ;;;READING?A BEQ RESTRT ;;;IF EQ NO INC R0 ;;;MUST BUMP COUNTR SWAB R2 ;;;CHANGE FUNCTIONSS BR RESUM ;;;READ NEXT SECTOR'10$: TST R5 ;;;SWITCH TO EVEN SECTORS?R BEQ 20$ ;;;IF EQ YES, CMP R5,#-13. ;;;TIME TO SKEW TO NEXT TRACK? BNE RESUM0 ;;;IF NE NO6 MOV #DXDONE,@#4 ;;;SET TO CATCH NONEXISTANT MEM TRAPS! MOV #13.,R5 ;;;RESET SKEW COUNTI9 ADD #<4*256.>+1,R4 ;;;SKEW TO NEXT TRACK AND ODD SECTORSI/20$: ADD #<1*256.>,R4 ;;;SWITCH TO EVEN SECTORSP BR RESUM0 ;;;RESUMEE .IFT,,BUMP: CMP R3,#160000 ;;;OVERFLOWED APR6 YET? BLO RESUM ;;;IF LO NOS' MOV #140000,R3 ;;;RESET MEMORY ADDRESS;* ADD #200,@#UISAR6 ;;;BUMP RELOCATION BIAS BR RESUM ;;;RESUME .ENDC?BUMP1: ADD #-<26.*256.>,R4 ;;;WRAP AROUND TO BEGINNING OF TRACK; BR RESUM2 ;;;CONTINUE4 DXERR: BIT #2,R2 ;;;BOOTING IN? BNE . ;;;IF NE YES, LOOP HERE ) TRAP ER.IOE ;;;ELSE PRINT ERROR MESSAGE .DXDONE: BIC #10020,R2 ;;;CLEAR UNIT-SELECT BIT) SWAB R2 ;;;CREATE ORIGINAL READ COMMANDS. JMP $BTEND ;;;JUMP TO END OF BOOT PROCESSING8 SIZCHK DXBOO,256. ;;;CHECK SIZE OF SECOND BLOCK OF BOOT .DSABL LSB ;;; .PAGE .ENDC; ; JG0044; FLOPPY BOOTSTRAP CODE FOR RX02 DEVICE ; JG004; ; JG004'; SOME USEFUL INFORMATION: ; JG004; ; JG004K; THIS CODE MUST BE POSITION INDEPENDANT. WHEN SAVING THE SYSTEM, ; JG004AI; THE CODE IS MOVED TO THE BUFFER AT $BTBEG AND EXECUTED THERE. ; JG004-H; WHEN BOOTING IN THE SYSTEM, THE RELOCATION ROUTINE ($SETUP) ; JG004E; POSITIONS THE CODE BACK INTO SIP WHERE IT WAS ORIGINALLY ; JG004D+; LOCATED AND EXECUTED THERE. ; JG004C; THIS CODE EVENTUALLY GETS WRITTEN OVER WHEN BOOTING IN ; JG004CF; THE SYSTEM. THE STACK IS VERY SENSITIVE. THE STACK POINTER ; JG004D; MUST BE AT THE SAME LEVEL WHEN SAVING THE SYSTEM AS WHEN ; JG004D; BOOTING THE SYSTEM. CO-ROUTINE ADDRESSES ARE LOCATED ON ; JG004H; THE STACK AND MUST BE AT THE SAME POSITION ON THE STACK WHEN ; JG004;; SAVING THE SYSTEM AS WHEN BOOTING THE SYSTEM. ; JG004B; ; JG004E; WHEN DOING EMPTY/FILL COMMANDS, YOU MUST USE THE PHYSICAL ; JG0040I; ADDRESS FOR THE BUFFER. 002zDATADATADATADATADATADATADATA A VIRTUAL ADDRESS WILL BE INTERPERTED ; JG004 B; AS A PHYSICAL ADDRESS. THIS IS BECAUSE THE RX02 IS AN ; JG004D; NPR DEVICE. BLOCK MOVES ARE DONE TO EMPTY/FILL THE SILO. ; JG004; ; JG004G; WHEN BOOTING THE SYSTEM, IF THERE IS ANY ERROR WHEN TRYING ; JG004B?; TO ACCESS THE DISK, THE PROGRAM WILL LOOP FOREVER. ; JG004SK; SINCE THE SYSTEM IS NOT YET IN MEMORY, ERRORS CANNOT BE HANDLED. ; JG004I; ; JG004O; WHEN DOING A HARDWARE BOOT, ONE LOGICAL BLOCK (512 BYTES) IS BROUGHT ; JG004DK; INTO MEMORY STARTING AT PHYSICAL LOCATION 0 FOR THE RX02 DEVICE. ; JG004T>; FOR DOUBLE DENSITY DISK, TWO SECTORS ARE READ IN. ; JG004<; FOR SINGLE DENSITY DISK, ONE SECTOR IS READ IN. ; JG004; ; JG004H; ; JG004K; THE REGISTERS ARE USED AS FOLLOWS FOR SAVING AND BOOTING SYSTEM: ; JG004 ; ; JG004 ; R0 - BLOCK COUNT ; JG0044; 64 WORD BLOCKS FOR SINGLE DENSITY ; JG0044; 128 WORD BLOCKS FOR DOUBLE DENSITY ; JG004 ; R1 - CSR ADDRESS ; JG004!; R2 - COMMAND CODE ; JG004O<; WHEN SAVING SYSTEM,WRITE AND FILL COMMANDS ; JG004<; WHEN BOOTING SYSTEM,EMPTY AND READ COMMANDS ; JG004.; R3 - PHYSICAL ADDRESS OF BUFFER ; JG004I; TWO BITS IN THE CSR ARE ALSO USED FOR EXTENDED ADDRESSING ; JG004I1; (TO ACHIEVE 18 BIT ADDRESSING) ; JG0044+; R4 - TRACK AND SECTOR NUMBER ; JG004 G; TRACK 0 IS NOT USED. THIS IS TO BE COMPATIBLE WITH IBM. ; JG004B?; IBM DOES SOMETHING SPECIAL WITH THERE TRACK 0. ; JG004C!; R5 - SKEW COUNTER ; JG004W'; R6 - USER STACK POINTER ; JG004 /; SIP IS MAPPED TO USER APR 5. ; JG004R; ; JG004; ; JG004 ; JG004  BEGBOO DY,RX21 ; JG004; ; JG004Q; THE FOLLOWING CODE IS MOVED TO THE BUFFER AT $BTBEG AND EXECUTED THERE. ; JG0040; ; JG004 ; JG004  .ENABL LSB ;;; ; JG004 4DYBOO: NOP ;;;REQUIRED FIRST INSTRUCTION ; JG004 BR 2$ ;;; ; JG004:DENS:: .WORD 0 ;;; = 128. WORDS - DOUBLE DENSITY ; JG004- ;;; = 64. WORDS - SINGLE DENSITY ; JG004 <FUNCT: .WORD 0 ;;; FUNCTION CODE FOR I/O OPERATION ; JG004<BUFSIZ: .WORD 0 ;;; BUFFER SIZE INCREMENT IN BYTES ; JG004. ;;; 256. BYTES FOR DOUBLE DENSITY ; JG004. ;;; 128. BYTES FOR SINGLE DENSITY ; JG004.UNIT:: .WORD 0 ;;; CONTAINS UNIT # ; JG004;TRKBUF: .WORD 0 ;;; BUFFER FOR TRACK AND SECTOR # ; JG004O52$: TSTB (R1) ;;;WAIT HERE FOR DRIVE READY ; JG004$ BEQ 2$ ;;; ; JG004.' BIT #2,R2 ;;; BOOTING IN ? ; JG004  BNE 3$ ;;; YES ; JG004 ! TST UNIT ;;;UNIT 0? ; JG004O! BEQ 5$ ;;;IF EQ YES ; JG004R BR 4$ ;;; NO ; JG004 3$: ;;; ; JG004E: BIT #20,(R1) ;;; CHECK CSR FOR UNIT # - UNIT 1 ? ; JG004! BEQ 5$ ;;; IF EQ NO ; JG004N4$: ;;; ; JG004T1 BIS #10020,R2 ;;;SET UNIT=1 IN COMMAND ; JG004 5$: ;;; ; JG004R/ CMP #128.,DENS ;;; DOUBLE DENSITY ? ; JG004T BEQ 8$ ;;; YES ; JG004$B MOV #128.,BUFSIZ ;;; # OF BYTES TO BUMP BUFFER ADDRESS BY ; JG004 BR 9$ ;;; ; JG0048$: ;;; ; JG004NB MOV #256.,BUFSIZ ;;; # OF BYTES TO BUMP BUFFER ADDRESS BY ; JG004B BIS #400,FUNCT ;;; SET DOUBLE DENSITY BIT IN COMMAND WORD ; JG0049$: ;;; ; JG004 , JMP SKEW12 ;;; YES - BOOTING IN ; JG004'RSTRT: ;;;REFERENCE LABEL ; JG004;( CALL @(SP)+ ;;;WAIT FOR TR ; JG0041 BPL RSUM ;;;IF PL DONE, CHECK ADDRESS ; JG004I0 MOV DENS,2(R1) ;;; ISSUE SECTOR SIZE ; JG0045 CALL @(SP)+ ;;; DUMP SECTOR SIZE INTO CSR ; JG004 0 MOV R3,2(R1) ;;; ISSUE BUFFER ADDRESS ; JG0042 ADD BUFSIZ,R3 ;;; UPDATE BUFFER ADDRESS ; JG0044 BCC 14$ ;;; NO EXTENDED ADDRESSING NEEDED ; JG004; ADD #10000,FUNCT ;;; SET EXTENDED ADDRESSING BIT ; JG004 14$: ;;; ; JG004 BITB #240,(R1) ;;; ; JG0048 BEQ 14$ ;;; LOOP UNTIL SILO IS FILLED/EMPTIED ; JG004 BR RSTRT ;;; ; JG004 ;20$: SWAB R4 ;;;SWITCH TRACK AND SECTOR ADDRESSES ; JG004 & MOV R4,TRKBUF ;;; SAVE R4 ; JG0042 BIC #0023Zg177400,TRKBUF ;;; CLEAR HIGH BYTE ; JG004I MOV TRKBUF,2(R1) ;;; MOVE IN TRACK OR SECTOR ADDRESS FOR TRANSFE; JG004R7 CMPB (R4)+,(R4)+ ;;;ADD IN INTERLEAVE FACTOR ; JG004NRSUM: ;;; ; JG004,4 CALL @(SP)+ ;;;INITIATE FUNCTION OR WAIT ; JG0047 BMI 20$ ;;;IF MI THEN ADDRESS BYTE IS NEEDED ; JG004BI CMPB -(R4),-(R4) ;;;SUBTRACT INTERLEAVE FACTOR FROM TRACK ADDRESS; JG004 - DEC R5 ;;;TIME TO ADJUST ADDRESS? ; JG004T% BLE SKEW10 ;;;IF LE YES ; JG004;<RSUM0: CMP R4,#<27.*256.> ;;;TIME TO WRAP AROUND? ; JG004# BLO RSUM2 ;;;IF LO NO ; JG004M> ADD #-<26.*256.>,R4 ;;; WRAP AROUND TO BEG OF TRACK ; JG004'RSUM2: ;;;REFERENCE LABEL ; JG0040) DEC R0 ;;;MORE BLOCKS TO GO? ; JG004+# BNE RSTRT ;;;IF NE NO ; JG0040( BR DYDONE ;;;EXIT FROM BOOT ; JG004 .DSABL LSB ;;; ; JG004, ; JG004N .ENABL LSB ;;; ; JG004E10$: ;;; ; JG004 TST (R1) ;;;ERROR? ; JG0041 BMI DYERR ;;; IF MI YES, HANDLE ERROR ; JG004R( SWAB R2 ;;;SWITCH FUNCTIONS ; JG004D CALL @(SP)+ ;;;RETURN WITH N-BIT CLEAR (FUNCTION COMPLETE) ; JG004TRANSF: ;;; ; JG004 * CLRB FUNCT ;;; CLEAR LOW BYTE ; JG004/ BISB R2,FUNCT ;;; GET FUNCTION CODE ; JG004+6 MOV FUNCT,(R1) ;;; DUMP COMMAND IN CSR REG ; JG00420$: ; JG0044+ BITB #240,(R1) ;;; TR OR DONE ? ; JG004 BMI 22$ ;;; TR SET ; JG0040 BEQ 20$ ;;; LOOP TILL TR OR DONE SET ; JG004" BPL 10$ ;;; DONE SET ; JG00422$: ;;; ; JG004E CALL @(SP)+ ;;;RETURN WITH N-BIT SET (MUST ACCESS DATA REG) ; JG004 " BR 20$ ;;;BR TO WAIT ; JG004 .DSABL LSB ;;; ; JG004  ; JG004  .ENABL LSB ;;; ; JG004SKEW12: ;;; ; JG004O@ ASL R0 ;;;CONVERT FROM 256 WORD BLOCKS TO 64 FOR SINGLE; JG0046 BIT #200,DENS ;;; DOUBLE DENSITY FLOPPY ??? ; JG004: BNE 6$ ;;; YES - CONVERT ONLY TO 128 WORD BLOCKS ; JG004 ASL R0 ;;; ; JG0046$: ;;; ; JG004$B MOV #<17.*256.>+1,R4 ;;;ADDRESS SECTOR AFTER LABEL BLOCK ; JG004* MOV #5,R5 ;;;SET SKEW COUNTER ; JG004/ CLR R3 ;;;INITIALIZE MEMORY POINTER ; JG0046 MOV PC,-(SP) ;;; GET TRAN ADDRESS ON STACK ; JG0046 ADD #TRANSF-.,(SP) ;;;SET COROUTINE ADDRESS ; JG004# BIT #2,R2 ;;;READING? ; JG004L# BEQ RSTRT ;;;IF EQ NO ; JG0040& INC R0 ;;;MUST BUMP COUNT ; JG004( BR RSUM ;;;READ NEXT SECTOR ; JG004SKEW10: ;;; ; JG004L- TST R5 ;;;SWITCH TO EVEN SECTORS? ; JG0040" BEQ 20$ ;;;IF EQ YES ; JG0046 CMP R5,#-13. ;;;TIME TO SKEW TO NEXT TRACK? ; JG004# BNE RSUM0 ;;;IF NE NO ; JG004N/ MOV PC,R5 ;;; GET ADDRESS OF DYDONE ; JG004 @ ADD #DYDONE-.,R5 ;;;SET TO CATCH NONEXISTANT MEM TRAPS ; JG004 MOV R5,@#4 ;;; ; JG004, MOV #13.,R5 ;;;RESET SKEW COUNT ; JG004B ADD #<4*256.>+1,R4 ;;;SKEW TO NEXT TRACK AND ODD SECTORS ; JG004920$: ADD #<1*256.>,R4 ;;;SWITCH TO EVEN SECTORS ; JG004 BR RSUM0 ;;;RESUME ; JG004 ; JG004 DYERR: ;;; ; JG004' BIT #2,R2 ;;; BOOTING IN? ; JG004S" BNE . ;;; LOOP HERE ; JG004? TST (SP)+ ;;; POP STACK - PTR TO TRANSF WAS PUSHED ON ; JG004D4 TRAP ER.IOE ;;; ELSE PRINT ERROR MESSAGE ; JG004DYDONE: ;;; ; JG004M1 BIC #10020,R2 ;;;CLEAR UNIT-SELECT BIT ; JG004T3 SWAB R2 ;;;CREATE ORIGINAL READ COMMAND ; JG004O? TST (SP)+ ;;; POP STACK - PTR TO TRANSF WAS PUSHED ON ; JG004I .DSABL LSB ;;; ; JG004 ENDBOO DY ; JG004J .PAGE ; JG004 ; JG004  .ENDC ; JG004;O; PAPER TAPE BOOTSTRAP;E+; THE BUFFER AT $BTBEG IS FILLED WITH NOPS.;;O BEGBOO PP,PP11 ;;; NOP ;;;FILL BUFFER WITH NOPSI ENDBOO PP,NOPAGE ;;;R;EH; THE FOLLOWING CODE OUTPUTS THE SYSTEM IMAGE IN ABSOLUTE LOADER FORMAT.;  CLR R3 ;;;POINT TO LOCATION 0T@10$: MOV #$FBBUF-2,R4 ;;;POINT TO BLOCK LOAD POINT IN OUTPUT BUF' MOV R3,(R4)+ ;;;ENTER BLOCK LOAD POINTB*20$: MOV (R3)+,(R4)+ ;;;LOAD OUTPUT BUFFER! CMP R4,#$CKSUM ;;;END OF BUFFER?  BLO 20$ ;;;IF LO NOC CLR (R4) ;;;CLEAR CHECK SUMA- MOV #$FBBUF-10.,R002zDATADATADATADATADATADATADATA2 ;;;POINT TO OUTPUT BUFFERL30$: TSTB (R1) ;;;PUNCH READY?P BPL 30$ ;;;IF PL NOL TST (R1) ;;;ERRORS?D BPL 40$ ;;;IF PL NO TRAP ER.IOE ;;;ELSE I/O ERRORT"40$: MOVB (R2),2(R1) ;;;WRITE BYTE# MOVB (R2)+,R5 ;;;COPY BYTE INTO R5T$ ADD R5,(R4) ;;;ACCUMULATE CHECKSUM! CMP R2,R4 ;;;END OF BUFFER YET? BLO 30$ ;;;IF LO NOB* BHI 50$ ;;;IF HI THEN PAST CHECKSUM BYTE! NEGB (R4) ;;;CALCULATE CHECKSUM;! BR 30$ ;;;BR TO OUTPUT CHECKSUMO!50$: DEC R0 ;;;BLOCKS REMAINING?A BGT 10$ ;;;IF GT YES4 BLT 60$ ;;;IF LT, TRANSFER ADDRESS HAS BEEN OUTPUT# CLRB -(R2) ;;;RESET CHECKSUM BYTE1 .IF DF M$$MGE: MOV @#UISAR5,-(R2) ;;;CALCULATE PHYSICAL TRANSFER ADDRESS, SWAB (R2) ;;;CONVERT BASE ADDRESS TO BYTES ASRB (R2) ;;; ROR (R2) ;;; ROR (R2) ;;;. ADD #$BOOT,(R2) ;;;CALCULATE ADDRESS OF $BOOT/ SUB #120000,(R2) ;;;SUBTRACT APR5 VIRTUAL BASEE .IFF* MOV #SYSTRT,-(R2) ;;;SET TRANSFER ADDRESS .ENDC MOV #6,-(R2) ;;;SET BYTE COUNTM( MOV #1,-(R2) ;;;FORMATTED BINARY HEADER CLR -(R2) ;;;OUTPUT FOUR NULLS CLR -(R2) ;;;  BR 30$ ;;;OUTPUT ITM60$: JMP DONE ;;;RESTART SIP .PAGE .ENDC .PAGE;Y; COMMON BOOT-BLOCK CODE;  .PSECTN)$BOOT:: NOP ;;;FIRST WORD MUST BE A NOP4 MOV #$BOOT,R4 ;;;POINT TO DESTINATION OF BOOT BLOCK MOV R4,SP ;;;SET INITIAL SPB6 CALL $SETUP ;;;RELOCATE BOOT AND ENABLE KT IF MAPPED BR $BTBEG ;;;EXECUTE BOOTSTRAP;RA; SETUP - ROUTINE TO RELOCATE BOOTSTRAP AND ENABLE KT11 IF SYSTEM, ; IS MAPPED.;D ; INPUTS:D;; R4 = DESTINATION ADDRESS;S ; OUTPUTS:;;:; BOOTSTRAP IS RELOCATED AND KT11 SET UP FOR MAPPED SYSTEM; R0-R2 SETUP FOR BOOTSTRAPE; R3-R4 DESTROYED-;C/$SETUP::ADD R4,(SP) ;;;RELOCATE RETURN ADDRESS  .IF DF M$$MGE: MOV #PMODE!PR7,@#PS ;;;SET TO KERNEL MODE (PREVIOUS=USER)' MOV #KISAR0,R0 ;;;POINT TO KERNAL APR0T' MOV #KISDR0,R1 ;;;POINT TO KERNAL PDR0G% MOV #UISAR0,R2 ;;;POINT TO USER APR0  CLR R3 ;;;SET INITIAL OFFSET#10$: MOV R3,(R0)+ ;;;SET KERNAL APR. MOV R3,(R2)+ ;;;SET USER APRS% MOV #77406,(R1) ;;;SET UP KERNAL PDR 1 MOV (R1)+,UISDR0-KISDR0-2(R1) ;;;SET UP USER PDRY$ ADD #200,R3 ;;;BUMP R3 BY 4K WORDS$ CMP R0,#KISAR7 ;;;FIRST 7 APRS SET? BLOS 10$ ;;;IF LOS NO = MOV #177600,-(R0) ;;; POINT KERNAL APR7 INTO I/O PAGE JG005O7 MOV (R0),-(R2) ;;;POINT USER APR7 INTO I/O PAGE J**-1 ' INC @#SR0 ;;;ENABLE MEMORY MANAGEMENT  .IFTF' MOV PC,R2 ;;;POINT TO BOOT PARAMETERSR ADD #$BTDRV-.,R2 ;;;S .IFTV& MOV (R2)+,@#UISAR5 ;RESTORE USER APR5 .IFTF1 MOV (R2)+,R0 ;;;PICK UP BLOCK COUNT FOR TRANSFER+$ MOV (R2)+,R1 ;;;PICK UP CSR ADDRESS) MOV (R2)+,R2 ;;;PICK UP TRANSFER COMMANDC .IFTR' BIT #177000,PC ;;;RELOCATION REQUIRED?N BEQ 15$ ;;;IF EQ YES: MOV R2,(SP) ;;;SET RETURN ADDRESS FOR PAPER TAPE($BTBEG) BR 30$ ;;;BR TO EXIT15$: ;;;REFERENCE LABEL .IFTF CLR R3 ;;;POINT TO BOOTSTRAP20$: .IFTI- MOV (R3)+,-(SP) ;;;PICK UP WORD OF BOOTSTRAP' MTPI (R4)+ ;;;MOVE IT INTO USER SPACEU .IFF" MOV (R3)+,(R4)+ ;;;MOVE BOOTSTRAP .IFTF CMP R3,#1000 ;;;DONE YET? BLO 20$ ;;;IF LO NOV30$: ;;;REFERENCE LABEL .IFT. MOV #$BOOT-2,-(SP) ;;;PUSH USER STACK POINTER MTPI SP ;;; 4 MOV (SP),-(SP) ;;;DUPLICATE RETURN ADDRESS ON STACK3 MOV #CMODE!PR7,2(SP) ;;;SET TO RETURN IN USER MODE; RTI ;;;RETURN TO CALLER .IFFR RETURN ;;;RETURN TO CALLER .IFTF;3; BOOT-BLOCK DRIVING PARAMETERST;$BTDRV:: .IFTI .BLKW 1 ;;;SAVED UISAR4 .ENDC .BLKW 1 ;;;BLOCK COUNT .BLKW 1 ;;;CSR ADDRESSRDCMD: .BLKW 1 ;;;READ COMMANDO0 SIZCHK $SETUP,128. ;;;CHECK SIZE OF COMMON AREA;#; DEVICE BOOT CODE GOES HERE;P+$BTBEG::.BLKB MX$LEN ;;;DEVICE BOOT BUFFERI;RI; THE FOLLOWING CODE IS NOT PART OF THE BOOT BLOCK. IT IS EXECUTED AFTER;A; THE ENTIRE SYSTEM IMAGE IS READ IN. FIRST THE CLOCK IS SET UP.O;L .ENABL LSB ;;;+$BTEND::CMP R2,RDCMD ;;;WAS THIS A BOOT IN? BEQ SYSTRT ;;;IF EQ YES.ADONE0023Zg: MOV $TRPSV,@#4 ;;;RESTORE NONEXISTANT MEMORY ADDRESS VECTOR .IF DF M$$MGE .IF DF M$$EXT ;JG005O? MOV #60,@#SR3 ; ENABLE 22 BIT ADDRESSING AND UNIBUS MAP ;JG005  .ENDC ;JG005E CLRB @#6+1 ;;; .ENDC MTPS #0 ;;;DROP PRIORITY .IF DF TA11!TM11!TU161 BIT #CB.EOF,$FLGS ;END OF FILE MARKERS REQUIRED?I BEQ 3$ ;IF EQ NO5 MOV #IO.EOF,$QDPB+Q.IOFN ;SET FOR WRITE EOF FUNCTION  CALL $QIOWT ;WRITE TWO EOF'S CALL $QIOWT ; .ENDC3$: JMP $RSTRT ;RESTART SIP4SYSTRT: MOV #NODEV,@#4 ;;;SET NONEXISTANT MEMOR TRAP .IF DF M$$EXT ;JG005E> MOV #UBMPR,R5 ; POINT TO FIRST UNIBUS MAPPING REGISTER ;JG005+ TST (R5) ; DOES I/O MAP EXIST ? ;JG005. BCS 7$ ; NO - DO NOT INITIALIZE MAP ;JG005/ CLR R1 ; SET INITIAL ADDRESS TO ZERO ;JG005T; MOV #5.,R4 ; SET NUMBER OF REGISTER PAIRS TO LOAD ;JG005E ; (EXEC MAPPING) ;JG0055$: ; ;JG0054 MOV R1,(R5)+ ; LOAD LOW 16 BITS OF ADDRESS ;JG0053 CLR (R5)+ ; CLEAR HIGH 6 BITS OF ADDRESS ;JG005T+ ADD #20000,R1 ; ADVANCE 8K BYTES ;JG005R' DEC R4 ; ANY MORE TO LOAD ? ;JG005# BGT 5$ ; IG GT YES ;JG005M: BIS #HF.UBM,$HFMSK ; SET UNIBUS FEATURE MASK BIT ;JG005$ BR 8$ ; JOIN COMMON CODE ;JG0057$: ; ;JG0059 CLR $UMRPT ; INDICATE NO I/O MAP IN THIS SYSTEM ;JG005 < BIC #HF.UBM,$HFMSK ; CLEAR UNIBUS FEATURE MASK BIT ;JG0058$: ; ;JG005? MOV #60,@#SR3 ; ENABLE 22 BIT ADDRESSING AND UNIBUS MAP ;JG005  .ENDC ;JG005L .IF NDF L$$SI1A8 TST @$CKCSR ;;;IS THE CLOCK OF THE SAVED SYSTEM THERE? BCC 10$ ;;;IF CC YES$ MOV #172540,$CKCSR ;;;ASSUME KW11-P MOV #172542,$CKCNT ;;;U MOV #10.,$CKLDC ;;;+ MOV #1000.,$TKPS ;;;1000. TICKS PER SECONDM) MOV #$NONSI,@#100 ;;;RESET KW11-L VECTORC' MOV #$CKINT,@#104 ;;;SET KW11-P VECTORS TST @$CKCSR ;;;IS IT THERE?F BCC 10$ ;;;IF CC YES% MOV #177546,$CKCSR ;;;MUST BE KW11-L0 MOV #177546,$CKCNT ;;;L CLR $CKLDC ;;;& MOV #60.,$TKPS ;;;60 TICKS PER SECOND' MOV #$CKINT,@#100 ;;;SET KW11-L VECTORC) MOV #$NONSI,@#104 ;;;RESET KW11-P VECTORH .ENDC;I%; DETERMINE WHICH DEVICES ARE PRESENT ;1210$: MOV $DEVHD,R5 ;;; GET ADDRESS OF DEVICE TABLE/20$: MOVB D.UNIT+1(R5),R3 ;;; COMPUTE NUMBER OF#) MOVB D.UNIT(R5),R1 ;;; UNITS ON THIS DCB# SUB R1,R3 ;;;E- MOV D.UCB(R5),R4 ;;;GET ADDRESS OF FIRST UCBF<30$: MOV U.SCB(R4),R1 ;;; GET ADDRESS OF SCB FOR NEXT DEVICE3 BIT #DV.PSE,U.CW1(R4) ;;; IS THIS A PSUEDO DEVICE?#! BNE 50$ ;;; YES, THEN SKIP TESTM9 BICB #US.OFL,U.ST2(R4) ;;;TENTATIVELY CLEAR OFF-LINE BIT;( TSTB @S.CSR(R1) ;;;IS THE DEVICE THERE? BCC 40$ ;;; YES 2 BISB #US.OFL,U.ST2(R4) ;;;SET DEVICE OFF-LINE BIT2 MOV #DEVNAM,R0 ;;;POINT TO DEVICE NAME IN MESSAGE+ MOV D.NAM(R5),(R0)+ ;;;MOVE IN DEVICE NAME 4 MOVB D.UNIT+1(R5),R1 ;;;PICK UP HIGHEST UNIT NUMBER/ SUB R3,R1 ;;;CALCULATE NUMBER OF MISSING UNITB" BIC #177700,R1 ;;;FORCE MODULO 64% CMP R1,#7 ;;;TWO DIGIT UNIT NUMBER?I BHI 35$ ;;;IF HI YES, MOVB #'0,(R0)+ ;;;IF NOT, USE ONE LEADING 0(35$: CLR R2 ;;;SET FOR ZERO SUPPRESSION0 CALL $CBOMG ;;;SET UNIT NUMBER ASCII IN BUFFER JSR R5,OUTMSG ;;;PRINT IT .WORD DEVMSG ;;;+40$: ADD D.UCBL(R5),R4 ;;;POINT TO NEXT UCBP DEC R3 ;;;MORE UNITS?S BGE 30$ ;;;IF GE YES150$: MOV D.LNK(R5),R5 ;;; GET ADDRESS OF NEXT DCB; BNE 20$ ;;; LOOP UNTIL DONES;,!; SET UP PARITY CSR ADDRESS TABLEU;B .IF DF P$$RTY: MOV #$PARTB,R0 ;;;GET ADDRESS OF PARITY CSR ADDRESS TABLE$ MOV R0,R1 ;;;COPY ADDRESS OF TABLE2 MOV #1,(R1)+ ;;;INSERT A ONE IN FIRST TABLE ENTRY9 MOV #MPAR-2,R2 ;;;GET ADDRESS OF FIRST PARITY REGISTER-2U/ MOV #16.,R3 ;;;SET NUMBER OF PARITY REGISTERS;651$: ADD #2,R2 ;;;ADVANCE TO NEXT PARITY CSR REGISTER/ MOV R2,(R1)+ ;;;ASSUME PARITY REGISTER PRESENTM* TST (R2) ;;;PARITY CSR REGISTER PRESENT? BCC 52$ ;;;IF CC YES. MOV R0,-2(R1) ;;;POINT TO FIRST WORD OF TABLE!52$: DEC R3 ;;;ANY MORE TO SCAN?V BGT 51$ ;;;IF GT YES4 MOV (R1),R1 ;;;11/70 CACHE PARITY CSR SEARCH DONE? BEQ 53$ ;;;IF EQ YES2 MOV #MPCSR-10,R2 ;;;POI002zDATADATADATADATADATADATADATANT TO FIRST CSR ADDRESS -2% MOV #6,R3 ;;;SET COUNT OF REGISTERSR BR 51$ ;;;SEARCH FOR THEMS53$: ;;;REF LABEL .ENDC;#; DETERMINE SIZE OF SYSTEM; 8 CLR R1 ;;;CLEAR MEMORY SIZE COUNTER (IN 1K WORD UNITS)8 CLR R2 ;;;CLEAR MEMORY SIZE COUNTER (IN 32 WORD UNITS) .IF DF M$$MGE .IFFN% CLR R0 ;;;INITIALIZE MEMORY POINTERN .IFTF60$: .IFT , MOV #140000,R0 ;;;INITIALIZE MEMORY POINTER! MOV R2,UISAR6 ;;;INITIALIZE APR6S .IFTF TST (R0) ;;;MEMORY THERE?R BCS 70$ ;;;IF CS NOS! INC R1 ;;;ELSE BUMP R1 BY 1 (K);1 ADD #40,R2 ;;;BUMP R2 BY 40 32 WORD BLOCKS (1K) .IF DF M$$EXT ;JG005M+ CMP R2,#170000 ; END OF MEMORY ? ;JG005  .IFF ;JG005 ;**-1E! CMP R2,#7600 ;;;TO I/O PAGE YET? .ENDC ;JG005 .IFF! CMP R2,#1600 ;;;TO I/O PAGE YET?E .IFTF BHIS 70$ ;;;IF HI YESM# CMP R2,$SYSIZ ;;; SIZE > BOOT SIZEI BHI 62$ ;;;IF HI YES .IFFE# ADD #4000,R0 ;;;BUMP ADDRESS BY 1KE .ENDC BR 60$ ;;;TEST FOR MORE CORE62$: MOV #2000,R3 ;;;ZERO 1K OF CORE65$: MOV #0,(R0)+ ;;;STORE ZERO( DEC R3 ;;;FINISHED ZEROING?; BNE 65$ ;;;IF NE NO  BR 60$ ;;;TEST FOR MORE CORE470$: MOV R2,$SYSIZ ;;;SET CORE SIZE IN SYSTEM COMMON ;EF014! .IF DF M$$MGE&D$$YNM ;EF014F ;EF014! MOV R0,-(SP) ;SAVE R0 ;EF014F! MOV R1,-(SP) ;SAVE R1 ;EF014P/ MOV #$PARHD,R0 ;PICK UP PCB LISTHEAD ;EF014 371$: MOV (R0),R1 ;GET ADDRESS OF NEXT PCB ;EF0141& BEQ 77$ ;EQ => END OF LIST ;EF014 .IF DF M$$EXT ;EF014;< CMP P.REL(R1),#177600 ;YES, IS IT DEVICE PARTITION? ;EF014 .IFF ;EF014: CMP P.REL(R1),#7600 ;IS THIS A DEVICE PARTITION? ;EF014 .ENDC ;EF014  BHIS 77$ ;YES ;EF014 . MOV R1,R0 ;NO, GET NEXT PCB IN LIST ;EF0144 BR 71$ ;LOOP UNTIL DEVICE PARTITION OR END ;EF014A77$: BIT #PS.SYS,P.STAT(R0) ;SYSTEM CONTROLLED PARTITION? ;EF014B BEQ 79$ ;NO ;EF014M6 MOV R2,-(SP) ;YES, GET SYSTEM SIZE IN BLOCKS ;EF014= SUB P.REL(R0),(SP) ;COMPUTE SIZE OF LAST PARTITION ;EF014C+ MOV (SP)+,P.SIZE(R0);AND SET IT ;EF014T ;EF01479$: ;EF014$ MOV (SP)+,R1 ;RESTORE R1 ;EF014$ MOV (SP)+,R0 ;RESTORE R0 ;EF014 ;EF014 .ENDC ;EF014,;N8; PREPARE SYSTEM TO GO, PRINT SYSTEM ID MESSAGE AND EXIT; ! MOV $HEADR,R0 ;;;POINT TO HEADERS: MOV H.LUN+<*4>(R0),R0 ;;;POINT TO LOAD DEVICE UCB5 CLR U.ATT(R0) ;;;PREVENT EXEC FROM PERFORMING DETACHS, MOV #SYSID,R0 ;;;POINT TO SYSTEM ID MESSAGE. MOV $SYSID,(R0)+ ;;;MOVE IN SYSTEM BASE LEVEL MOV $SYSID+2,(R0)+ ;;;T) MOV (PC)+,(R0)+ ;;;MOVE IN SPACE, RUBOUT  .BYTE 40,-1 ;;;+8 MOV #-1,(R0) ;;;MOVE IN TWO MORE RUBOUTS OVER CORE SIZE+ DEC R0 ;;;POINT TO BEGINNING OF CORE SIZE1" CLR R2 ;;;ENABLE ZERO SUPRESSION( CALL $CBDMG ;;;MOVE IN CORE-SIZE ASCII1 MOV #$CMDBF,R0 ;;;POINT TO BUFFER FOR TI: OUTPUT>- MOV #SYSMSG,R1 ;;;POINT TO SYSTEM ID MESSAGEA280$: MOVB (R1)+,(R0)+ ;;;MOVE ID MESSAGE TO BUFFER BNE 80$ ;;;IF NE MORE TO GOD7 SUB #$CMDBF,R0 ;;;CALCULATE CHARACTER COUNT OF MESSAGE0 MOV $TRPSV,@#4 ;;;RESET NONEXISTANT MEMORY TRAP .IF DF M$$MGE CLRB @#6+1 ;;;3 MOV #CMODE!PR7,@#PS ;;;INSURE PROPER PREVIOUS MODEE3 MOV $SAVE,-(SP) ;;;PUSH SAVED KERNAL STACK POINTERR MTPI SP ;;;AND RESTORE IT .ENDC3 INC $PWRFL ;;;SIMULATE POWERFAIL TO RESET DRIVERS  .IF NDF L$$SI1># MOV $CKLDC,@$CKCNT ;;;SET UP COUNTE! MOV #113,@$CKCSR ;;;ENABLE CLOCKV .ENDC( CALL $OUTMG ;;;PRINT SYSTEM ID MESSAGE. JMP $SIPXT ;;;EXIT TO GIVE CONTROL TO SYSTEM .DSABL LSB ;;;; ; ENTRY FOR BUS ERROR INTERRUPT;%NODEV: BIS #1,2(SP) ;;; SET CARRY BITV RTI ;;; RETURN;;E; CONSOLE OUTPUT ROUTINE;$ ; INPUTS:;;U!; (R5) = POINTER TO ASCIZ MESSAGEP;P ; OUTPUTS:;E>; THE MESSAGE IS PRINTED TO THE CONSOLE TERMINAL IF ONE EXISTS ; R0 IS LOST;.5OUTMSG: MOV (R5)+,R0 ;;;PICK UP ERROR MESSAGE POINTER*10$: TSTB TPS ;;;WAIT FOR READY CONDITION$ BCS 20$ 00233Zg;;;IF CS, NO CONSOLE, EXIT BPL 10$ ;;;IF PL NOT READY% MOVB (R0)+,TPS+2 ;;;OUTPUT CHARACTERS" BNE 10$ ;;;IF NE THEN MORE TO GO20$: RTS R5 ;;;RETURN .END(SP) ;;; SET CARRY BITV RTI ;;; RETURN;;E; CONSOLE OUTPUT ROUTINE;$ ; INPUTS:;;U!; (R5) = POINTER TO ASCIZ MESSAGEP;P ; OUTPUTS:;E>; THE MESSAGE IS PRINTED TO THE CONSOLE TERMINAL IF ONE EXISTS ; R0 IS LOST;.5OUTMSG: MOV (R5)+,R0 ;;;PICK UP ERROR MESSAGE POINTER*10$: TSTB TPS ;;;WAIT FOR READY CONDITION$ BCS 20$ .TITLE SIPCDN .IDENT /01/;1; A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.$;;A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE @; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.M;L@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;N@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N ; VERSION: 01O; BY: THOMAS J MILLER; DATE: 3/23/75;NA; SIPCD - COMMAND INPUT AND DECODING FOR THE RSX-11S SYSTEM IMAGES; PRESERVATION PROGRAM;  M;O; MACRO LIBRARY LIBRARY CALLS ;D M .MCALL GTIM$S A;NH; *** - $SIPCD READ AND PARSE A SIP COMMAND LINE AND SET UP LABEL BLOCK.;O R($SIPCD::MOV #LUN2,R0 ;MOVE TI: LUN TO R0 CALL $ATT ;ATTACH TI: )1$: MOV #$CMDBF,R0 ;POINT TO INPUT BUFFER MOV (PC)+,(R0)+ ;MOVE IN PROMPT .BYTE 15,'S ;I MOV #"IP,(R0)+ ;  MOVB #'>,(R0)+ ; * SUB #$CMDBF,R0 ;CALCULATE CHARACTER COUNT CALL $OUTMG ;PRINT IT 0 MOV #IO.RVB,$QDPB+Q.IOFN ;SET FOR READ FUNCTION% MOV #15.,R0 ;SET MAXIMUM READ COUNT CALL $QIOWT ;READ COMMAND LINE& MOV #$CMDBF,R1 ;POINT TO INPUT BUFFER:2$: CMPB (R1),#141 ;PERFORM LOWER TO UPPER CASE CONVERSION) ; IS CHARACTER IN LOWER CASE RANGE?T BLO 5$ ;IF LO NO CMPB (R1),#172 ; BHI 5$ ;IF HI NO% BICB #40,(R1) ;CONVERT TO UPPER CASE++5$: INC R1 ;BUMP POINTER TO NEXT CHARACTER,' DEC $IOSB+2 ;MORE CHARACTERS IN LINE?F BGT 2$ ;IF GT YEST1 BLT 1$ ;IF LT, THERE WAS NO INPUT, PROMPT AGAIND% CLRB (R1)+ ;CONVERT STRING TO ASCIZ#, CLRB (R1)+ ;SIMPLIFY SINGLE CHARACTER CASE MOV #LUN2,R0 ;DETACH TERMINAL CALL $DET ; & MOV #$CMDBF,R0 ;POINT TO INPUT BUFFER7 MOV #$ALUN1+A.LUNA,R1 ;POINT TO LOAD DEVICE ASSIGN DPB % MOV (R0)+,(R1)+ ;MOVE IN DEVICE NAME) CLR (R1) ;INITIALIZE UNIT NUMBER IN DPBC010$: MOVB (R0)+,R2 ;PICK UP NEXT INPUT CHARACTER2 SUB #60,R2 ;ASSUME NUMERIC AND CONVERT TO BINARY! BITB #370,R2 ;WAS IT A NUMERIC?G BNE 20$ ;IF NE NOL* ASLB (R1) ;MULTIPLY CURRENT NUMBER BY 8.' BCS 40$ ;IF CS, UNIT NUMBER TOO LARGER ASLB (R1) ;S BCS 40$ ;E ASLB (R1) ;U BCS 40$ ; BISB R2,(R1) ;ADD IN NEW DIGIT BR 10$ ;GET NEXT DIGIT)20$: CMPB R2,#':-60 ;WAS CHARACTER A ":"?  BNE 40$ ;IF NE NO, ERROR& MOV #$LABBF,R1 ;POINT TO LABEL BUFFER430$: MOVB (R0)+,(R1) ;PICK NEXT CHARACTER FROM INPUT% BEQ 50$ ;IF EQ, END OF INPUT STRING0/ CMPB (R1),#'0 ;DETERMINE IF VALID ALPHANUMERIC  BLO 40$ ;IF LO NOM CMPB (R1)+,#'9 ;I BLOS 30$ ;IF LOS YES35$: CMPB -(R1),#'A ;B BLO 40$ ;IF LO NOS CMPB (R1)+,#'Z ;A BLOS 30$ ;IF LOS YES40$: TRAP ER.SYN ;SYNTAX ERROR4,50$: CMP R1,#$LABBF+12. ;LEGAL LABEL LENGTH? BEQ 70$ ;IF EQ YES AND AT END2 BHI 40$ ;IF HI NOR160$: MOVB #40,(R1)+ ;PAD TO 12. CHARS WITH BLANKSR BR 50$ ;BR TO CONTINUE PADDING=70$: MOV #"SI,(R1)+ ;INDICATE SIP CREATED FILE IN DEVICE NAME  CLR (R1)+ ;UNIT 0, DEVICE 0)" MOV #1,(R1)+ ;BLOCKING FACTOR = 1 MOV #512.,(R1)+ ;BLOCK SIZE0 GTIM$S R1 ;ENTER TIME AND DATE IN LABEL BUFFER! RETURN ;RETURN TO CONTROL LOOP P .END,#'Z ;A BLOS 30$ ;IF LOS YES40$: TRAP ER.SYN ;SYNTAX ERROR4,50$: CMP R1,#$LABBF+12. ;LEGAL LABEL LENGTH? BEQ 70$ ;IF EQ YES AND AT END2 BHI 40$ ;IF HI NOR160$: MOVB #40,(R1)+ ;PAD TO 12. CHARS WITH BLANKSR BR 004zDATADATADATADATADATADATADATA .TITLE SIPERR .IDENT /01/;:;VA; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;IA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE+@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.P;,@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E;N ; VERSION: 01O; BY: THOMAS J MILLER; DATE: 2/4/75D;N=; SIPERR - ERROR HANDLER AND RECOVERY ROUTINE FOR THE RSX-11SO$; SYSTEM IMAGE PRESERVATION PROGRAM.;H I;B ; LOCAL DATA;T; ERROR CODE MACRO;  F .MACRO ERRCOD NAMNAM==NN=N+1T .ENDM W;O; ERROR MESSAGE MACROD;T  S .IF DF R$$ERM N Y .MACRO .ERR NUM,MSG .PSECT .ERRTB .WORD ER'NUMS .PSECT .ERRSLER'NUM: .RAD50 %'MSG'%<'.-22>I .ENDM S O .IFTF E P;T; ERROR CODE DEFINITIONS;C N=2N ERRCOD ER.SYN ERRCOD ER.POL ERRCOD ER.NVK ERRCOD ER.DNS ERRCOD ER.PRV ERRCOD ER.PNS ERRCOD ER.IOE H SN=66. ERRCOD ER.FRQ ERRCOD ER.NVD ERRCOD ER.IOB ;AO; *** - $STVEC SST VECTOR USED TO PROVIDE THE LINKAGE BETWEEN TRAP INSTRUCTIONSM; AND THE ERROR ROUTINE ;R !$STVEC::.WORD 0,0,0,0,0,0,ERRTRP  A; ; ERROR MESSAGE PREFIX;B .SIPMS: .ASCIZ /SIP -- /R  N .IFTD % G .ASCIZ / - /N   .IFTF   .EVEN R; ; ERROR MESSAGE TABLE;=  .IFT  S  .PSECT .ERRTBEERRTAB=.- ;DEFINE SO CODE ER.SYN INDEXES TO START OF TABLE  I .ERR \ER.SYN, .ERR \ER.POL,<> .ERR \ER.NVK,<>$ .ERR \ER.DNS, .ERR \ER.PRV,<> .ERR \ER.PNS,<> .ERR \ER.IOE, R  .ERR \ER.FRQ,