nn(vLG.nfԠ` ,n!æЋ&./ , ff % & n?* Na@&  a d*f2 f & & f **%n7Nff5@ :.NE0Kaf0w v#آv$ K$$7  KZvLI*Ba vLIBaF*Ц 6* 즁`wʦ*EU5i$< Ewe*Z7 b7 |7 n7 7 77z7w,~{7 *^N$*& !æЋ&./ 9*L*ȧff % & f  %*-.TTh(8T(UC Wh1E.C _Xh)C _h-l u:hL0*h#hd.KhvLZ"hfShIIqh>"h.);h)h ) h)hw8TZ.^Z ^C ^O ^U \ No logins.& NewOld file name-- Ready ? L at line.Sh hz@6F@*`@3.*\}@@{D@j@%@4@@6@kQrWP %  %?r % ABEILMNOPQRTUZθiиgҸiԸcָ _ظ_ڸe*¸ *$ -  **ʗ-* xBp j',5 * ee De *6">w 7l<8B&*Ze, "7lee*~ "7w j-pw*tw  ʸ *ƘԸ& &$*&& &.  f%즃*Darwd- V*4 eP \ *XQ$Bܺ w . *|B/id7c޸B!*e޸ %llf*Ĩ^ X-XRVhDH7 D,XeH<7 8޸*޸@\ bz*2nr޸ed]f`*VrwN. " .2v@>cM@><}@>@@Q@.@ U@@\}@9P\}@9P@_X@@.Zu:@@w@u~@u~9@)@.974@(S(vYXhDh.h*@h*#h*Uh*^h .L"hV\&hU(h:y:hGEHqh..4F`Oh0[MDh~Z@hm h mh\.[qOqhH[qsh|[qsh^s@htsHhb.v@hvOqh8@whyHqhJhz\qh.*}Z hu~ ܸ_~`ĸ.޸]FƸ [LȸlU[ʸ0Slk̸vGW&@ P-Tw ^. u*`1ϸ . -F!;..! MACRO V004A 9 D@0C,w @pS! Sf^^,0ŝ(  *.777777 7 *2777y777777N*V7K7H7777777v*z7s7p7h777X7R7O7X*7U7O\|XzLH7 >*™7.7.7+7(7nfR*ʸ^`ʸw* !|wwwB!*.r|6/ Vh%X}*R #\P^ X f e  w2,NfwdwTB*tLQ$΋  D .  W0 c L U 9P&9P{.0U&f& c.V &@   &.| Հ U&*\}. ʋUU'ĝ>><}@\}&.#  w  e͐e͐ @\}RORS DETECTED: FREE CORE: . :WORDS # (, H&/5w & &,B&   e@ F  ^,h  ( jRR J<,& & pe5``&7%, L(ҕ 7 * * @R"ڊ  * ,7 *7 * z%7 *^%X%Z%  h%]f*w f,Bfw  $% * 7 P* % @,V( &R(&*ޛL0l0µ 0 Z*0  C ``*&77*Jm 7x*nw0- * .(7*.J)*7n.4L7m4.J7 .ڜL84L7m,82 *<!w w@9d@~!*&@޸@%ɥ wɥ7 L l ޸ "  Xb^q.f |޸ad@@޸޸w0^ 7X e% @޸@F* ޸ t޸j$l7P *ܬ7 L %,%e7; ׭7 7g* 7 2  e 7  I*$  7  b  ww *H7   7  G.l    ;w M |޸|  /. `  A`w Cw`*\}%%.ŝF@G5 UDCAF @\}G/.: 0ĝN RE {D @wNRt.` @5@ w 6CY  *\}@\}%%.   0< ,*\} @Q@ U"><}$>.s q7 7  ̋ ,Vv ̰`%    2 z)w|<,~ı\ 2 ff7 $ $v $-$$ w :) '‹ċ&'7 &&؋&̲2 )@! ! fi 2y kQ4d ~PA07* 7j$ (7`((7 (7 }"(7 ( $$7 ( 8B)>) ,)e(vG(N@2 (%5'U )@ *J:<@B¥/*nݫ¥#*%$ %"*7 7De*ڝ N zfH7o.F*",", -r*"7> @ɥN*Fw*  }*j,F_7 *2-47!z*x(B^4, |޸@޸޸@v *ȭr $l7X 7 T %7$< 7$8 Ћ<*7? ׭; $ww 6. f N` *$ 7 @ @޸޸,4 $l %@޸@ ޸*Z e7 @ @ P %*~< $$Ћ7 ׭ r*w f hf"  w>*Ʈw<}>.U4Kҋ $  N7 q4 @\} >&.| 2   l5A.De 5@5,j_X@$ hz3.jEA2` 55eh. E2  ew:w\S 2":.E ]P,p(~( U( /D D` W! ,W! W!  X(RE@ 5@5@<,#e JU( ( |'#5#7n'B,'  '' ! ! f, hh&'Q$  D B,F+f'  -z'z'  i,l⋁wf'U'5A ,U 'R wf h7 ) $U'& "& "H '%5,4 7pj**؞L d7`֋5 *>wT* v* C-`z7Z7"p*D!7,j-7#Z7-T-J,hB.vf)*& &**0wz~j*֟eEn!" e +*eweaee "9*" X    *2 f EULf&f` *V-\  wc f@r*zw0f 6 rwr wrq*w   E `ޯ |¯.  IЯy$ԯ.7   y* .  . /*e &e %ze %| *:"| wPe %b ܃&N $9P >.e bΊ%"bJ&  7p (o.MDtU& NN`ͭ> &@ ><}>.(w 2&@<I` '<$ b.N@B Bȋf  @\}.t ȋ@ $ w C( )%L. B w E (D `̋% * $֍'A ">55"''5""'*5"EB$h'="b'!ݺ# 5~",.x ҕ   *'$T&'~#  M?' %L,r5,"[  z  ), d5`ʕ'5@ʕG ,H H5! D&&ҕ &u, & Z ?z&<( A, P5$!  -@!@!8!8!,0w& !*(EeEE!"e *B|ee=jee Z*f^EeE (@7*7  ɵ^*1a( w|*Ҡww"Ը( } xQ*nԸء!* e   N {*D-.&f75*he 7 " P*^"\ w0.7 7 f*r n0 7Z rw" 0?*R Pe'D$1ʰR2޳8Dz6ްֳ̳Zص$vڶ,6T^x#_*.HT`jt޸@*R\VL@` *v  F`w`,w`*w`(w`(w`"w`(*w`  #.7R dd  B$  t . m m $ W%E{D'%. `   8&ȕ6F8$2v.2ȕ Uȕ<   :U 9P$:].Xw E%@w  w !9P"9P.~`H0 A H@Z9P\}(*\}/.  $H H5Z!  <,V󳠘ʕ ҕ 52! =,| ҕ 5!  f5`,ҕ'5@Gҕ  ' ,ȏ%E ы7 %R@ .&  7X 7 V :'   r,$]$= W!:VW!=R , ,4w  w` W!$  ,ZW!:  $5U$ 5 ,(R  5U$ N%lѕ ѕ *&ce 7 8݇*!?7XԸԸ*ԡ(MODULEѕ *Fѕ ѕ ,*ѕ<ѕ>ѕ ѕ V*@@ѕ ѕ w*dr"w Z7*$ʸw *wBg7 (@wRɥ:*Т< $!&%7 7 I*+޸#  Qt^ ^*~|޸7 n7B!,e*d&V@F*>wpwnwlwjwpwZ  G*b W"W"X&EP*@P@޸W  t^ ]^*²|޸7 7@޸ Q*%7 7 '   U u~@Q.   C">cM Zu:u~9$@\}L.1 UU0 j ><}$)(974 .  mz*\}*`&(.<211 N  0 0 w P2 >$@\}b2`1  2.(h(, W!= W!: R  K,̐;-~,%-  f ( 5l tE$U 7PZfV5L-V,FM=UP$U. B U,6:$ #>$w Vff  ,\ V5 $-$ Uff E,U  ыwwU@# h ,V f55 U#5 g,Α#   H# nw#Ew#, & f A fE  )"7 &B *@%C%n% %K*)w_޸ {,<@7ɥwwd*b& ޸i*R ( R7*$&B@%<%2%q*Σ %/wr ee *ݯ  *wwo*: ^|z*8$*  e @޸E*.P޸7# 7 $,R  .$M*xb 7>  h~I 6*"  nf Ře*7  hÃɥrwrwO*f e P" f&/*f&~   N*,Ε rwh *PCå å$ נA  +@2g@{D@.`@\!`@&@:t@:@&.:@><}@>@@Q@@\}@0.[MD@9P@m@[qOq@s@@m.v@v2g@vBx@vy@v@@.vOq@|C^@@@@.((( xh$bhzhf.&|h&Қh &\qh`&Tuh<&wh~.&h&T[h&\qh>&zh&h.b,h,hv,h,hp/h,,we# Ί z&1P l&@E,@%P%E% 5E%pg,fE%E%% A A 5U@", H2, N5U"E * ,  e5U"r,  " ׭a X  , FB> 6 v ,2  -eՔ*^ &f"Rw& 7TwR%*J N z좈 o*BC"meE $ʤN z֤Τ.>Th*褈Τ.>DDm DQ$(D *   Dd 7DQ$(DD*0(DQ$Dd 7DQ$(DDd*TDQ$4H7hDDd7R *xɥɥF> J w*Ba vLIBaF. *t  e`  v0*  Ëנ*e ee e ѐ  v[*@(  B *m -6t*(7 ee #0-j*L6]JT7 *pF#0- 6eh*e *e**e&e 2F/L.y:h:dwhZ:dwhT"qh`3qh\&.IqhIqh\qhp\qh\qh.\qhrhmwhuwh=qh.%vh}h}hhh l " ( ( (l  \` (\ J ((.? 6m o2A Bez}6 0 0U "@7 ,X 4"& W!@ 5U"U W!k,~# % ! b @U^W!- ,F!F! bW!( U SW!( W!q,ʓ+ >UF5U@ 5  m,W!(53 55@Q\,5UU7 |5U6!@,.1 nw w7p[,><} nm&s@p&&G.wxEfH`5  ׭e5"x @\} e.7 h  ŝxU4,7 DK˵@!QыʋыE&,Д e m#7r7p # mt 7 ^ ы ke,5ɋ UW KW KUL 2,&J J ԋ  U( |L ՀE ,T  4 5U@ [,z U  N X ZPRvwx , pH D  ^  V x5*4 eP \ *XQ$Bܺ w . *|B/id7c޸B!*e޸ %llf*Ĩ^ X-XRVhDH7 D,XeH<7 8޸*޸@\ bz*2nr޸ed]f`*VrwN. " *z? H&e a6*D& j L*h&jwlj*w`jwTjwj*wjw&E&*Էw7wXjwLjw*@jw~4jwr(jw5*fEwRjwF*@jjw0jw$^.djjjw&ʸʸ.&ԸԸ@$NP&7Ui hx$><}. pf4x $9P& &pf&x.0B^^mw E B ;|C^^^.V w   @ׇwwx  vOq\!`w"x.|1 xE@ 1f x(f.@e2`w  Nl vOq(l. W!7 tIw Z h H,ԕU v   $R` :w"PL 57 {:7 8 , b," `R    , 6 V,H   bU 7D,n ޱJҋ  q,ɕ w   R( p S,5 Q  8 B ,-   $"   e0J  QTABLE*w .rl*©wwdF.rw w*c? XNHB/ R * R2.(B/&  *. T7  *Rw%X7q7 n%fta*v\ l^  f e a*7X757 2<r w $F P*B *7$ * 7 7 Xw0F*EEEExQ#ظM^f*"\Mfyf$Ըn޸*F|.i*j'@G*l*Թ0?0=*,0zӫy*(G  tvOqZ. wrw 0 rw qr[qOq"r&.\re% W1eW! tXr(t.:t  uu7tu @tuut"u.`  7 h u 2  uG.7u  Pŝu 5\ w Yuu. w  Z \ F 7Z""""""" """"""DDDDDDD@@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"""""""""""""""""""""""""""""""""""""ADDB CvLGKuvLDKJ#^ckQrK&zkQN] kQyKkQP}kQ)z,K4$D͈,e 8& e , XI*w$ 77 r** >^ X f e  w2,NfwdwTB*tLT LINK11.OVR  < hM ,  ********** H*fUNDEFINED REFERENCES *LOAD MAP SECTION ENTRY ADDRESS SIZE  ľ,JKZ&Z. %w w @ [qOqvOq.  w ( P@ \B  vOq.P W1  ,fC @ w.DA  \\EV.jCAeE ` Z. Ll  5";Cl3.6i1hh e %2 l ihhLE OF CONTENTS3," 7     ,H rUU    C,nU   " C!w|,  P ` EU},J D (   U7(   ȵ8+,䗇   V` w, 7 H7 F n : BGW!<!,0 @@B!   E 0,V  ( ) M.f |޸ad@@޸޸w0^ 7X e% @޸@F* ޸ t޸j$l7P *ܬ7 L %,%e7; ׭7 7g* 7 2  e 7  I*$  7  b  ww *H7   7  G.l    ;w M |޸|  /^4, |޸@޸޸@v ˾ W(ξ ?LOAD MODULE EOM     :'.. ZO.L  x5,5, 5,.7iCi7h   ii"hL.( w &!"/7"d Lj+ vOqd&j.NeB"wjC wl  jl.tdhf T dhfb. Jl w B 2E   l[qOq.ofA 7 hwh& N P& v V,|   (U& je  F,W    U 9*ȘF UL n  H (2$옷   ! W Y, A%+%-j ,05 X  j 0bab b b m^,V:: %.w *ށ%E  W,| Ux ` 7`@@T@T@Thm, 1"3  e Q*ȭr $l7X 7 T %7$< 7$8 Ћ<*7? ׭; $ww 6. f N` *$ 7 @ @޸޸,4 $l %@޸@ ޸*Z e7 @ @ P %*~< $$Ћ7 ׭ r*w f hf"  w>*Ʈw><}&[MT,ș    5 ],     ,e|wUJ b(J  ,: 5p.  Ur *`  Um7 7 7g,h " 0  B $ , 4 $ la  ,К    b b b wH %+,, $   5wj7 xw ,)2. \ R W"  U*2 f EULf&f` *V-\  wc f@r*zw0f 6 rwr wrq*w   E `ޯ |¯.  IЯy$ԯ.7   y* .  . /*e &e %ze %| *:"| wPe %b ܃ P*^"\ w0.7 7 fV ;ZERO FLAG N =10  ;NEGATIVE FLAG .MACR SOB REG,DST .NLIST .IFL DST-.+174 .ERROR ;TOO FAR FOR SOB .ENDC .IFG DST-.-2 .ERROR ;SOB CANNOT GO FORWARD .ENDC .LIST  DEC REG  BNE DST .ENDM .MACR SPL PR  MOV #PR*40,@#PS .ENDM ; PROCESSOR PRIORITY BIT DEFINITIONS PR7 =340  ;PRIORITY 7, BUFFER ALLOCATOR PR6 =300  ; " " 6, DECTAPE, CLOCK, CARD READER PR5 =240  ; " " 5, DISK, TTY(DC11'S) PR4 =200  ; " " 4, TTY(KL11'SWD.w d4  E:h. w - t ww  {D$v@v.wwU :><}@Q.<E sU@U ^@\}><}9P"|C^.bw7߀ e` s@`. w  @  E@+.$$ $X ! ! (BC   7 ,d  UU   *|  l  IU !HX[.K&̷+ N,KH ț&Xɛ, < C 2  *   A,ԛ n 4 5r@  C BW!&W!-,!B  C C  p( , j   B  .Pf,F0` @V0`N  P@U8Y*r n0 7Z rw" 0?*R Pe'D$1ʰR2޳8Dz6ްֳ̳Zص$vڶ,6T^x#_*.HT`jt޸@*R\VL@` *v  F`w`,w`*w`(w`(w`"w`(*w`  %7 7 I*+޸# Z OR DL11E'S), HSP, HSR, LPT PR3 =140  ; " " 3, MONITOR AND FIP, EMT'S PR2 =100  ; " " 2, RUN-TIME SYSTEM PR1 =040  ; " " 1, EDITOR, INCREMENTAL COMPILER PR0 =000  ; " " 0, NULL JOB, ERROR HANDLER .IFDF JOBMAX  ;ONLY IF "CF" SEG BEFORE US... .SBTTL DEFAULT AND CHECK PARAMETERS SYSVEL = "4A   ;VERSION "4A" UNTIL FURTHER NOTICE CPU = 20.   ;PDP-11/20'S " " " .IIF NDF HERTZ HERTZ=60. ;ASSUME 60 HERTZ AC POWER [ ҦC @   . B` e\h] Z  h]"ZQ.w \EZh]\7\ZzZh]\ \&Z. ]w 6CÝt u ]]t"u.Fr w    r^.l7uwtw f FW 5 D Zu tvOq. AE` #& Bԋ %d Ӊ.b\ lG LI( NLsr U&Lw[M y%` QQR RK-[z  ε \,~C  ! z  B  P,0 @ P U  ڵ EN" DS ~CRʜF,ʜ  0  P ~"-XX Uh] Qt^ ^*~|޸7 n7B!,e*d&V@F*>wpwnwlwjwpwZ  G*b W"W"X&EP*@P@޸W  t^ ]^*²|޸7 7@޸ Q*%7 7 8$*  e @޸^ .IIF NDF KW11P KW11P=0  ;ASSUME KW11L .IIF NDF POWER POWER=0  ;ASSUME NO POWER FAIL .IIF NDF KB2741 KB2741=0 ;ASSUME NO 2741'S .IIF NDF KBFILL KBFILL=0 ;ASSUME NO FILL .IIF NDF KBLA30 KBLA30=0 ;ASSUME NO LA30S'S .IIF NDF KBLC KBLC=1  ;ASSUME U.C. TRANSLATION .IIF NDF KBXON KBXON=0  ;ASSUME NO XON/XOFF .IIF NDF KBODTT KBODTT=0 ;ASSUME NO ODT TRAP .IIF NDF KBAUTO KBAUTO=0 ;ASSUME NO AUTO MESSAGE .IIF NDF KBRUB KBRUB=0  ;ASSUME NO SCOPES .IIF NDF KB_Eas Ba v2g$v!.  w  & B&  [qOqM.Δe   Ѓ · s! " vBx&v2gh.*3  DE l7!`h_  v2gvy` h"_.P7`h_w EDEew f` h _&vOq!.v Le  E  vn. ~W e`lv@Qd@q, r E  w v&2R-  b v7 t-n,R H ^cN ѭ ,xT &  ҋUUR,"7%F ̰Rҕ ̰"ĝ" ưJw JȰ7 [ c v\JTHz"x4,`X fAʕ Rp,fA  aE*.P޸7# 7 $,R  .$M*xb 7>  h~I 6*"  nf Ře*7  hÃɥrwrwO*f e P" f&/*f&~   N*,Ε rwh *PCå å$ נA  *t  e`  v0bPRTY KBPRTY=0 ;ASSUME NO PARITY GENERATION .IIF NDF KL11 KL11=0  ;ASSUME NO KL11'S .IIF NDF DC11 DC11=0  ;ASSUME NO DC11'S .IIF NDF DL11E DL11E=0  ;ASSUME NO DL11E'S RCRK11 = 0 RCRP11 = 0 .IIF NDF RF11 RF11=0  ;ASSUME NO RF11 .IIF NDF RK11 RK11=0  ;ASSUME NO RK11 .IIF NDF RP11 RP11=0  ;ASSUME NO RP11 .IIF NDF RC11 RC11=0  ;ASSUME NO RC11 .IIF NDF SWRF11 SWRF11=0 ;ASSUME NO SWAPPING RF11 .IFNZ RC11 .IFNZ RK11 RCRK11 = RC11   ;IT IS RC11c bw .Ýh  b7 [qOq hv2g"b..b`_w fC& C b`_.  ` `_h De %C  (.4 `cCeS0_  e t`"&.Z  _ Ch `j  `. C & K W2\ 7 rw &deʕ@ Jҋ REE`,V w 5 4Z^5,|4  B B4 ,&  D 'VEEU,ȞQa7 nR n  5@j(ŭeE\UVErUlF,v 4 L 7  ;67  . w hAh END OF PASS 1~,J ʴ w f V we*  Ëנ*e ee e ѐ  v[*@(  B *m -6t*(7 ee #0-j*L6]JT7 *pF#0- 6eh*e *e**e&e 2F*ܵe e 2nf+RK11 SYSTEM DISK .ENDC .IFZ RK11 .IFNZ RP11 RCRP11 = RC11   ;IT IS RC11+RP11 SYSTEM DISK .ENDC .ENDC .ENDC .IFNZ RF11 .IFNZ RCRK11 ! RCRP11 .ERROR ; BOTH RF11 AND RC11 AS THE SYSTEM DISK .ENDC .ENDC .IFZ RF11 ! RK11 ! RP11 ! RC11 ! RCRK11 ! RCRP11 RF11 = 1   ;DEFAULT TO RF11 ONLY SYSTEM .ENDC .IIF NDF TC11 TC11=0  ;ASSUME NO DECTAPE .IIF NDF PC11R PC11R=0  ;ASSUME NO PAPER TAPE READER .IIF NDF PC11P PC11P=g $r. r rB f J 2B&E_rrJ2+.  @@l j E o. `C ``\h : `}. f&ef 6C ` N   `m.> W1 j v(W1  Jv"_.d ` \f \v`@ %`\&*  `e  p 6 Vh*pd X *5,D7$< <T5@P7 J7 , : $ r| V5 0^,؟x l dWɥa &ҕ N,ڇ 27 8 (  ҕ X,$ ҕ U   3J 4| =% R G @x******SYMBOL TABLE[,\   ĝ n  ,\ j 7 B`5 \Ei*e 7!  #2-*$7!e e  !*H!!!! @` 7 VB*l &  LINK-11 V00v*7A PASS 1 PASS 2 k*# ž*ضV`jwTj|!*07 .0(7 0%* wXjL*D& j Lj0  ;ASSUME NO PAPER TAPE PUNCH .IIF NDF CR11 CR11=0  ;ASSUME NO CARD READER .IIF NDF LP11 LP11=0  ;ASSUME NO LINE PRINTERS .IIF NDF LP11C LP11C=80. ;ASSUME 80. COLUMNS .IIF NDF LPTUPC LPTUPC=140 ;ASSUME ONLY LOWER CASE .IIF NDF LPSTAT LPSTAT=52 ;ASSUME THIS STATUS LPSTAT = LPSTAT & 071 ! 2 ;CORRECT ANY ERRORS .IFG LP11-2 .ERROR ;TOO MANY LP11'S .ENDC .IIF NDF TM11 TM11=0  ;ASSUME NO MAGTAPE .IIF NDF JCUNUM JCUNUM=0 ;DEFAULT TO NO JCU SERVICE .IFNZ Jk`p.DKho %@o @8@@.K@}@j@'@t'K@.2a@s:*}@[g5@[qOq@vOq@.c@ @t@((K( b.,8^ho'u~h8U(CyhKph xQchf q&fwh Iqh chZ C(Ks.p@.&d  .l$*a ʴ ƠC -<  ],ڠδ | x@a ߳` *ҴW 5H ҝ&$1@嶳   Dѝ ѝw| wa ^j b$ w-3 3fv*tH-嶳 w -,5U 娴m*h&jwlj*w`jwTjwj*wjw&E&*Էw7wXjwLjw*@jw~4jwr(jw5*fEwRjwF*@jjw0jw$^.djjjw&ʸʸ.&ԸԸ@$NP&*EEEExQ#nCUNUM .IFDF XXXX11 .IFNZ XXXXXX-"JC .ERROR ; BOTH JCU AND XX DEVICE SPECIFIED .ENDC .ENDC XXXX11 = 1.   ;SET UP JCU SERVICE XXXXXX = "JC XXXSIZ = 80. .ENDC .IIF NDF XXXX11 XXXX11=0 ;ASSUME NO SPECIAL DEVICE .IFZ XXXX11 XXXXXX = 0   ;NULL NAME FOR NO SPECIAL DEVICE .ENDC .IIF NDF XXXXXX XXXXXX="XX ;DEFAULT SPECIAL NAME IS "XX" .IIF NDF XXXSTS XXXSTS=0 ;DEFAULT TO R/W .IIF NDF XXXSIZ XXXSIZ=512. ;DEFAULT TO 512. BYTE BUFFER .IIF NDF XXXFRC oL$\*#"r >== = \-SBDN IICSELIFS .MAIN.&, ~f e0R&R,<@ ( @ !V <&b  e ee e \2̲\ֲ\7,  & VXRw E , UUU\j,Σ& 4 .U%\X T,$ e + -b*x/T&X! 7 D b$,b((5`5`5@5@2  ,@U  uANSFER ADDRESS: 0 LOW LIMIT: / HIGH LIMIT: ' >T LINK11.OVR  < hM ,  ********** H*fUNDEFINED REFERENCES *LOAD MAP SECTION ENTRY ADDRESS SIZE  ľ,J˾ W(ξ ?LOAD MODULE EOM v XXXSIZ = XXXSIZ -1 & 777 +1 & 1776 .IIF NDF SMLBUF SMLBUF=64. ;ASSUME 64. SMALL BUFFERS .IFNDF BIGBUF .IFNZ TC11 BIGBUF = 1   ;ASSUME 1 BIG BUFFER WITH DECTAPE .ENDC .IFZ TC11 BIGBUF = 0   ;ASSUME NO BIG BUFFER WITH NO DECTAPE .ENDC .ENDC .IIF NDF CORMAX CORMAX=8. ;ASSUME 8.K CORMAX TOPS .IIF NDF CORTBC CORTBC=12. ;ASSUME UP TO 12.K CORE .ENDC .SBTTL      ; MACRO DEFINITIONS ; GET A WORD OUT OF THE DATA AREwkGO(TSI2 yn.yi*EPATGAEDOVTA5DIEMA0WETXE TO 0 :.$MU2MUMU2DL xOTOGRORRENWhNzNEPR3 !KEEROFIFII> SOTU\TNIR .$DA TEZIMODNATMODNADAE EZI.7SDROCEDROCE TNUOCETESME4.]EMANE 6ECALPE pExE SSSTwJ BR,f&  N H@   ,N  & @  %,  &   `@ ,ؤ  5@l  5`^ 7 X ,7 X UjL 7  E7 8 5,$  . bw 7 - ,J 5U@55@GU ,pE@A`R  8U 5  },  U  (Z 'UW!e    :'.. zA AT RUN TIME - GWTXT .MACR GWTXT REG  MOVB (R5)+,-(R1)  MOVB (R5)+,-(R1)  MOV (R1)+,REG .ENDM ; NOTE - MACRO "LOAD" IS REPLACED BY "GWTXT" ; TRANSCENDENTALS .MACR TOPR1 OP,ADDR  MOV #ADDR,R0  JSR PC,PUSHF2  JSR PC,OP .ENDM .MACR MOVFLT ADR1,ADR2  .NLIST  .REPT FLTLEN  .LIST  MOV ADR1,ADR2  .NLIST  .ENDR  .LIST .ENDM .MACR FLTPP ARG  .NLIST  .REPT FLTLEN/2  .LIST  CMP ARG,ARG  .NLIS{ROTSErEMUSEjNRUTE THGI  W.(DNDN:HNNU8NU>EVAPPEELNG 'NI  $ECAPRQ   k%PAWPETtPOT SY^ 'BADNANALEPANEH   $EMI  !.!EMIO(NRSSELNB|,. W!$U  , ,W!. xU ~ * w 0c, +-&"&':%F w O,z  CDOB*F L w\eeeM,`\ pT X 8 N,Ʀ&&V! ! -- @  `A, &   N & 3,e @4 $ } .TITLE TT.P11 TERMINAL SERVICE ;COPYRIGHT 1971,1972 BY DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;VERSION: 04A  EDIT: 48 ;DATE:  31-AUG-72 BY: MHB/JDM  .MACR TTYVEC TYPE,PRI .REPT TYPE .NLIST .IFL UNITNO-16. .LIST .WORD TTIINT,PRI+UNITNO .WORD TTOINT,PRI+UNITNO .NLIST .ENDC .IFGE UNITNO-16. .LIST .WORD TTIIN0,PRI+UNITNO-16. .WORD TTOIN0,PRI+UNITNO-16. .NLIST .ENDC UNITNO = UNITNO+1 .LIST .ENDR .ENDM .ASECT . = 60~T  .ENDR  .LIST .ENDM .MACR FLTCLR ARG  .NLIST  .REPT FLTLEN-2  .LIST  CLR ARG  .NLIST  .ENDR  .LIST .ENDM ; VECTOR MACRO .MACR VECTOR ORG,ADDR,PR . = ORG .WORD ADDR,PR .ENDM ; ARGUMENT MACROS .MACR ARGS A1,A2,A3 .NLIST .IFNZ A3+0 .LIST .WORD A1*4+A2*4+A3 .NLIST .ENDC .IFZ A3+0 .IFNZ A2+0 .LIST .WORD A1*4+A2 .NLIST .ENDC .IFZ A2+0 .LIST .WORD A1 .NLEVASNKC.GOLNGNISLITNLARTIAELIH|mlETALROREq a.w..zP\* F.im{|ww 5>vOq".U 5EE E5.BUE`W0ċWw.h B %5 A ,8@    C0V,^   & N`  Ut,` ew   7 \U, @  5 U ,Ч-  F> ,U    7  E, ,  *, @@@@@@@@@@@@@@@@@.@@@@@@@@@&  UNITNO = 0 TTYVEC 1,PR4 . = 300 UNITNO = KL11+1 TTYVEC DC11,PR5 UNITNO = 1 TTYVEC KL11,PR4 UNITNO = KL11+DC11+1 TTYVEC DL11E,PR4 .CSECT TT .GLOBL TTYS20,TTYS30,CHRUSR,CHRU02,IOREDO ;INTERNAL .GLOBL TTYSER,CHOUTO,TTIN08,SLEEP.,IOWAIT .GLOBL TTICR9,TTICPO,TTYHNG,TTIIN1,TTOIN1 .GLOBL JBWAIT,JBSTAT,TTYCLK,TTILST,JOBTBL ;(TABLES) .GLOBL DEVTBL,TTOLST,JOBCLK,TTSLST .GLOBL SAVJOB,RTI3,FETCH,SAVREG  ;(MONITOR) .GLOBL IST .ENDC .ENDC .LIST .ENDM ; PUSH-POP MACRO .MACR .PPM PSHPOP,AD1,AD2,AD3 .BYTE PSHPOP .NLIST .IFNZ AD1+0 .LIST ME. = .+2 .BYTE AD1&177400/400,AD1&377 .NLIST .ENDC .IFNZ AD2+0 .LIST ME. = .+2 .BYTE AD2&177400/400,AD2&377 .NLIST .ENDC .IFNZ AD3+0 .LIST ME. = .+2 .BYTE AD3&177400/400,AD3&377 .NLIST .ENDC .LIST .ENDM ; LOOP MACROS .MACR .BLOOP NAME,COUNT NAME'1: DEC COUNT  ;BE R (. ``B ఠ N K.C q ,5Z .``5  55E *o @8o %.W!% E 5 .&5 50C`B &t'K.L( 'p$5  |t'K '.rAEJ  ş`( W xK,*A@NE@` j$,P ` V 7 R&v "U  $ M$5   E 7 r, C @ @   #1-,ڨ ` EQ$) D`[,`B ! #`B  s 0 THEN ADDR .ENDM .MACR IFTOKA REL,ARG,ADDR  JSR R5,TATEST  .WORD ARG  B'REL ADDR .ENDM BN UeB 1.B $B%U$U .EB( 5 5@55.U 0`0^ ˉ ``; .:# I 5 c# 5 Ep.`s   5 f5j te.e5 5e@b7 ŵ  .  f w?"(,.\ ,  * ,   U@  7 9, -F UZ    *,0& $7 7 &   I,V2   @ @ ,|f l * v  & @,wU  7 7 ,  I,ȫ%?S 8  |  , 7 & #- &   %*,\0   :   ~ -,: N NUMBER CHECK REQUIRED MOVB TTLINE(R1),R2 ; GET LINE NUMBER * 2 CMP R2,#KL11*2 ; IS THIS A DC11 OR DL11E ? BLOS TTYHN6  ; NOPE, FORGET DATASET HUNG CHECKS    ; THIS CONDITIONAL IS DEDICATED TO    ; DEC ENGINEERING WITHOUT WHOSE HELP IT .IF NE DL11E  ; WOULD HAVE BEEN UNNECESSARY CMP R2,#KL11+DC11*2 ; DC11 OR DL11E ? BLOS TTYHDC  ; BRANCH ON DC11 TTYHDL: MOV #100040,R2 ; DATASET STATUS CHANGE + IE ON DL11E MOV #10000,R4 ; CARRIER DETECTOR IS BIT 12 ON .MACR TBITT A1,ADDR  BITB #'A1,TOKE(R0)  BEQ ADDR .ENDM ; JOB DATA STRUCTURE. ; 1. JOB DATA BLOCK #1 (JDB) JDIOB = 0   ;POINTER TO THE SECOND BLOCK JDFLG = 2   ;JOB STATUS FLAGS JDIOST = 4   ;I/O STATUS OF JOB, ERROR CODES JDSP = 6   ;RELATIVE USER STACK POINTER JDCPU =10   ;CPU TIME IN SYSTEM TICKS JDCON =12   ;CONNECT TIME JDKCT =14   ;KILO-CORE TICKS USED JDDEV =16   ;DEVICE TIME USED (MINUTES) JDSIZ0 =20   ;C e$ w E& 5 2ar.B+-N  -B..  Up-͕hpa.D  `W!h퉗 t.j   h$  t ” j " . ” d” T• p.  Ѓ `E     .  BE5  5  }.  E  E zE 5H,`  7 U  nf,~ 8 > e?f, $   f,Ҭ e0w "U@ 5 ,, %X  b5 ,       c,D   ~ W!' n C!W!^,Z8  C D C!D!, UU`P:M, x7 x H 7& H{,̮7 f' 7 5R, > R <e- NG ON BIC (R3),R2  ; NORMAL DATA INTERRUPTS - CHECK IT. BNE TTYHN4  ; BRANCH ON POSITIVE HAPPINESS FACTOR TTYHN5: TST 2(R3)  ; ELSE TRY TO UNHANG THE ANIMAL BIC #140,(R3) ; TRY CLEARING IE'S INCB TTYHCT  ; AND SAY WE DID IT TTYHN4: BIS #140,(R3) ; INTERRUPT ENABLE INPUT CSR MOV (SP)+,R2 ; POP HANGUP FLAG BACK INTO R2 .IF NE DC11 ! DL11E ; SHOULD WE HANGUP DATASET ? BEQ TTYHN3  ; NOT THIS TIME BIC R2,(R3)  ; YES, CLEAR DATA TERMINAL READY RTS PC ATUS(JBSTAT), AND JOB WAIT(JBWAIT) ; REGISTER BIT ASSIGNMENTS. ;(JDFLG): JFSTOP =100000   ;STOP JOB ASAP, SET BY SCHEDULER JFTIM = 40000+JFSTOP  ;JOB IS TO STOP, QUANTUM IS UP JFHIBY = 20000   ;RUNNING IN RESPONSE TO "HELLO" OR "BYE" JFPCB = 10000   ;PC BACKED UP FOR I/O RE-DO JFGO = 4000   ;FORCE JOB TO RE-START JFCCC = 2000   ;ENABLED ^C TRAP FOR USER JFSYS = 1000   ;USER IS RUNNING PRIVILEGED JFIRST = 400   ;FRESH USER, NO COMMANDS AS YET JFCC = 2#X@:@`@X@y@$.@Ş@t'K@U(Cy@,X@.,\@,f@t:) @Kp@ N_`@.xQc@R@fa@[qOq@sH:@.ku @vOq@c@8HH8.HvH9H9LH.:H,.:vH; H>H>@HAHj.DHFHGfHG gHKH.LHOHX^Hɪ}HBvH>.TH TŞHL^HH,w ۏ7   & ,> ҴfR %,dR vڴ   @ , L D >7 h,th & F 5X %,֯ %  l  t!,h hh  d\Uz," L7 F7  b   . , 'H"zfxzzkQxR,踣 ; AND BAG IT TTYHN3: BIT R4,(R3)  ; CARRIER ON ? BEQ TTYHN2  ; IF NOT, THEN LEAVE IT ALONE BITB #TTWRC,TTSTS2(R1); ALREADY ENABLED ? BEQ TTYHN2  ; IF SO, THEN LEAVE IT ALONE ALSO MOVB TTLINE(R1),R2 ; ELSE GET LINE NUMBER AGAIN CLR TTYCLK(R2) ; CLEAR ANY TIME OUT TIMERS JSR PC,DDBSET ; AND ENABLE DC11 OR DL11E LINE .ENDC    ; DAT'S ALL THE DATASET STUFF TTYHN2: ADD #4,R3  ; BUMP R3 TO OUTPUT CSR BIC #4,(R3)  ; CLEAR MAINT. BIT ALWAYS BITB #TTHU00+JFSTOP  ;^C TYPES AT THE TTY BY USER JFABRT = 100   ;BAD ERROR, FATAL IT IS, ABORT JOB JFNOPR = 40   ;USER HAS NO PRIVILEGES JFKILL = 20   ;KILL THIS JOB JFRTS = 16   ;RUN TIME ERROR INDICATORS JFSWRR = 1   ;SWAP ERROR FOR JOB ;(JBSTAT)/(JBWAIT) JSRES =100000   ;IN-SWAP COMPLETED ON REQUEST JSDSK = 40000   ;FILE I/O IS DONE JSKEY = 20000   ;DELIMITER IN KEYBOARD BUFFER JSTEL = 10000   ;ROOM IN TTY OUTPUT BUFFER JSPTR = 4000   ;DEL}`;H`}d;HX.}n;H}s;H@8HfvHZH.pqH&|HH HH.فHD((n zh zh" .hrhjh_X_hq%hvZhr.wh~h~` h ~Thr ~ZXhT#.~~uh ~h~!hP~'h~OMh R.~dhv~ch~h~h`~ hzc~v~h0 hH @H d" %@  @@,`@%@@ @t@ @vD o,4 D J J ,ZY    w, v @@ @ @P @, 0 eoov,̹t  ,P;,  ,>%YNG+TTWRC,TTSTS2(R1); IS THIS TERMINAL HUNG ? BNE TTYHN1  ; NOT NOW INCB TTYHCT  ; YES, COUNT AS HUNG CLR 2(R3)  ; SEND A NULL TO UNHANG IT BIC #100,(R3) ; TRY CLEARING INTERRUPT ENABLE BIS #100,(R3) ; INTERRUPT ENABLE OUTPUT CSR TTYHN1: BIT #200,(R3) ; READY SHOULD HAVE COME UP BNE TTYHN0  ; MAY NOT HAVE ANY EFFECT ON DL11E'S BICB #TTHUNG,TTSTS2(R1); SAY HUNG FOR NEXT TIME TTYHN0: RTS PC  ; EXIT ;ROUTINE TO GET A CHARACTER FROM USER IMITER IN READER BUFFER JSPTP = 2000   ;ROOM IN PUNCH BUFFER JSDTA = 1000   ;DECTAPE I/O IS DONE JSLPT = 400   ;ROOM IN LPT BUFFER JSMTA = 200   ;MAGTAPE I/O IS DONE JSCDR = 100   ;DELIMITER IN CARD READER BUFFER JSTIM = 40   ;WAITING FOR TIMER TO FIRE JSFIP = 20   ;WAITING FOR THE FILE PROCESSOR JSXXX = 10   ;WAITING FOR XX DEVICE JSNUL = 1   ;WAITING FOR A SMALL BUFFER JSALL = JSKEY+JSTEL+JSPTR+JSPTP+JSLPT+JSCDR+JSTIM+JSXXX+JSNUL   P P t*p . t *   p Z h $,. h   $ ,id Z $ &2B. Z $   & 2n B.  B    x <M.     <  .      ?,d  % %Z,@ % @  ~@rx,~@~%@\!42}s:W,ֺ s: :@@AK,@K &@K8@K09@KK@K,"K@K@K@K@Kf@,HKK zQD @R@@R@8,n@ S@S%@S@S @pT,pT@8 T@pT@T%@OX, OX OXOX%BUFFER INTO R2 ;RAISE CPU PRIORITY TO 7 AND SAVE R3 ON SP STACK TTYS20: MOV (R5),R2  ;BUILD AN ABSOLUTE POINTER ADD R3,R2  ;TO THE CHARACTER WE WANT MOVB (R2),R2  ;AND GET THE CHARACTER BIS #PR7,@#PS ;DISABLE INTERRUPTS WHILE POINTERS MOVE JSR R3,@(SP)+ ;RETURN WITH R3 ON STACK ;INTERFACE FOR PROGRAMMED I/O TO AND FROM TTY ;ENTERED VIA .READ OR .WRITE ON A TTY CHANNEL TTYSER: CLR R2  ;SEE IF HE'S DETACHED BEFORE DOING TTY I/O .IFNZ DC11 ! DL11E BITB #TTWRC; CORE ALLOCATION BITS SWP = 100000 FRC =  40000 ; LEVEL THREE QUEUE (L3Q) TASK BIT ASSIGNMENTS QTIMER = 1  ;TIMER SERVICE TO BE RUN QFIP = 2  ;RUN FIP FOR THIS GUY QSCHED = 4  ;SCHEDULE SCHEDULER SCHEDULE BIT QSWAP = 10  ;RUN THE SWAPPER QFILE = 20  ;RUN THE FILE I/O DRIVERS QDTSYM = 40  ;RUN THE DECTAPE SYMBIONT QBUF = 100  ;BUFFER ALLOCATOR QBUFSM = 200  ;RUN THE SMALL BUFFER AVAILABLE ALERTER QDDCON = 400  ;DECTA.,1w E`B vOq.&  e@eeMPPeBP$E.LŀD Հ `ȋ.r e a AeM a( !' t'K+.  vw  At:) [qOqQ.5"4 L 54|$ 4XM"(4p.U 4w RE&4! 0@0 Y,[q`"r@ r @r r ,sssw w e,,;wwww w,R%w@8wK wwF,xy~Lyyyy@U,yh@y@y &@y&@y`'=,ļ@y@y@y@yfyt,꼀y} z@ z@ z%@s,Yz z d ,6 @ %@,TTSTS2(R1);IS THE KB ENABLED? BNE TTYS04  ;NOPE .ENDC CMPB DDJBNO(R1),JOB ;IF THEY MATCH, O.K. BEQ TTYS02  ;IF MATCHED, THEN NORMAL TTYS04: MOV @JOBDA,-(SP) ;ELSE GET ADDRESS OF IOB CMP R1,@(SP)+ ;AND SEE IF IT IS CONSOLE BEQ TTYS03  ;IF SO, THEN MORE CHECKING MOV #DETKEY,@IOSTS ;IF NOT, THEN IMMEDIATE ERROR BR TTRTI3  ;AND FAST EXIT TTYS03: BIT #JFHIBY,@JOBF ;RUNNING "LOGIN" OR "LOGOUT"? BEQ IOTEST  ;IF NOT, THEN CONDITIONAL JOB KILL BR IOKILPE I/O DRIVER COMPLETE QDACON = 1000  ;DECTAPE BLOCK ALLOCATOR COMPLETE QUECDR = 2000  ;CARD READER I/O DONE QMTACN = 4000  ;MAGTAPE BRING INTO CORE COMPLETE QMTADN =10000  ;MAGTAPE I/O DONE ;JCU DEFINITIONS JCOVFL =100000  ;OVERFLOW FLAG JCEATB = 40000  ;EAT BIT JCCATA = 20000  ;HELLO FAILED BIT JCLIVE = 10000  ;LINE LIVE BIT JCALLB =JCOVFL+JCEATB+JCCATA JCALL1 =JCEATB+JCCATA ; TRANSFER CONTROL BLOCK (XRB) ; USED BY USER I/O INTERFACE   4:4,\"R.   0, 5  ".0!pw ;w   N_`_Kp.V0: F, 5@w $#X.| ww n#  tsH:(Kp .0 "0 0 6085 4w щ ,%. ҉99ى  =  != "= .  ,,҉9 29).D  eŕ pp ZŕiEAR THE RF11 CONTROL MOV #RFDAE,R1 ;POINT TO HARDWARE ADDRESSES SWAB R2  ;MULTIPLY BY 256 CLR (R1)  ;CLEAR ENTENDED ADDRESS MOVB R2,(R1)  ;AND SET HIGH ORDER ADDRESS CLRB R2  ;NOW GET LOW ORDER ADDRESS MOV R2,-(R1) ;AND LOAD THE LOW ORDER ADDRESS .ENDC .IFZ RF11  ;***** IF RC11 .IFZ SWRF11 ASL R2  ;MULTIPLY BY 8 SINCE ASL R2  ;THE RC11 DISK WORKS IN ASL R2  ;32 WORD BLOCKS MOV R2,@#RCDA ;SET THE RC11 DISK ADDRESS MOV #RCBA+2,R1 ;SEIF POSSIBLE TTYS15: .IFNZ KBXON BITB #TTXOFF,TTSTS3(R1);WAS THERE AN XOFF SENT? BEQ TTYS19  ;IF NOT, THEN NO XON SHOULD BE SENT MOV #021,R2  ;IF SO, THEN GET THE XON CHARACTER JSR PC,CHO07 ;AND SEND IT BICB #TTXOFF,TTSTS3(R1);AND SAY THAT XON HAS BEEN SENT .ENDC TTYS19: MOV #JSKEY,R2 ;GO INTO DELIMITER WAIT IOTEST: BIT #JFNOPR,@JOBF ;IF HE'S NOT LOGGED IN, WIPE OUT JOB BEQ IOREDO  ;HE IS LOGGED IN BIT #PR1,7*2(SP) ;BUT ONLY IF EDITOR CALLED FOR KEYBOARD IOFILE WITH UNIQUE NAME FQDEF DLN ;DELETE A FILE BY NAME FQDEF REN ;RENAME AN EXISTING FILE ; ACCOUNT RELATED COMMANDS FQDEF LIN ;LOG A USER IN (UUO-INTERNAL) FQDEF BYE ;LOG A USER OUT (UUO-INTERNAL) FQDEF DIR ;GET DIRECTORY INFORMATION (UUO) FQDEF PAS ;CREATE A NEW USER ACCOUNT (UUO-INTERNAL) FQDEF DLU ;DELETE USER ACCOUNT AND ALL FILES (UUO-INTERNAL) FQDEF RAD ;READ ACCOUNTING DATA (UUO-INTERNAL) FQDEF CPK ;CLEAN UP A DISK PACK FQDEF CHU ;CHANGE PASSWOR.j  v  ;:ω . :  >  , @ ?. Zԕ :$ ! e n   w  . t  ` 4 Ӊ , Z(y.  `   r E & .2 l$ DF wf"Bd YF "=.X  D   &#T THE HARDWARE POINTER .ENDC .ENDC MOV (SP)+,R2 ;RESTORE R2 NOW DSKGO6: CLR -(SP)  ;NO SPECIAL FORM FOR FUNCTION DSKGPP: MOV (R4)+,-(R1) ;SET THE CORE ADDRESS MOV (R4)+,-(SP) ;GET SECTOR COUNT (+) SWAB (SP)  ;TIME 256. FOR WORDS CLRB (SP)  ;MINUS THE UNIT NEG (SP)  ;NEGATED MOV (SP)+,-(R1) ;AND SET... MOVB (R4)+,(SP) ;SET THE FUNCTION CLRB (R4)  ;CLEAR THE FAIRNESS COUNT MOV (SP)+,-(R1) ;LOAD FUNCTION AND GO MOV (SP)+,R1 ;AND FINALLY RES BEQ IOREDO  ;WASN'T EDITOR--MUST BE LOGIN CUSP IOKILL: BIS #JFKILL+JFABRT,@JOBF ;SAY HE WANTS TO DIE BR IOWAIT  ;AND FORCE A SCHEDULE ; .SLEEP EMT SLEEP.: MOVB JOB,R1  ;HANDLE .SLEEP EMT---------------------- MOV (SP),JOBCLK(R1) ;USER SUPPLIED # SECONDS IN R0 BEQ TTRTI3  ;IF SLEEP(0) THEN NO SLEEPING! MOV #JSTIM+JSKEY,R2 ;WAIT UNTIL TIME IS UP OR DELIMITER SEEN BR IOSWM  ;SET THE WAIT MASK ;ROUTINE TO MOVE A CHARACTER FROM MONITOR D FOR AN ACCOUNT (UUO-INTERNAL) ; COMPILER AND RUN-TIME SUPPORTED COMMANDS FQDEF CAL ;ALLOCATE USER AREA FQDEF CSI ;CALL CSI TO PARSE DEV:FILE.EXT (CHAIN?) FQDEF CAT ;INITIAL USER AREA SETUP ; FAVORS FQDEF SOK ;LOOK FOR *.BAS NON-EXISTANCE FQDEF UNS ;UNSAVE *.BAS FQDEF OLD ;LOOK FOR *.BAS EXISTANCE FQDEF RUN ;LOOK FOR *.BAC EXISTANCE ; DECTAPE COMMANDS FQDEF DTA ;ALLOCATE BLOCKS FOR DTA OUTPUT FILE (INTERNAL) FQDEF DTE ;DECTAPE SYMBIONT ERROR PROCE & .~ &#c  e . B` E CdÜ ʐaΉR  . 6]`c. ^ad _be> $ .$ 0@̕ <U 2CB`  R.J  B`l`  V$  (yQ.p  :  Z-" ! BC `TORE R1 RTS PC  ;AND EXIT .ENDC ;RK11 DISK DRIVER .IFNZ RK11  ;***** IF RK11 DISKDK: JSR R5,SAVREG ;SAVE ALL REGISTERS MOVB DSQUNT(R4),R2 ;AND GET THE UNIT NUMBER .IFNZ RF11  ;***** IF RF11 DEC R2  ;CORRECT UNIT NUMBER .ENDC MOV R2,DSQOUN(R4) ;SET PHYSICAL UNIT NUMBER ADD R2,DSQOUN(R4) ;AND MAKE IT TIMES TWO ASR R2  ;ROTATE UNIT NUMBER ROR R2  ;THROUGH THE CARRY BIT ROR R2 CHAIN BUFFER TO USER BUFFER ;CALL WITH R1 POINTING TO DDB ;  R3 POINTING TO RUN TIME LINK BLOCK ;  R5 POINTING TO BUFFER POINTER ;IF CHARACTER IS TRANSFERRED, ; C= 0 ON RETURN AND BUFFER POINTER IS UPDATED ;ELSE C= 1 AND BUFFER POINTER IS UNALTERED CHRUSR: MOV R4,-(SP) ;SAVE TIME OUT VALUE IN CASE WE NEED IT BIS #PR7,@#PS ;PRIORITY 7 WHILE PLAYING WITH POINTER JSR R5,FETCH ;GET THE CHARACTER + DDINP+FP ;FROM THE INPUT BUFFER BIC #PR4,@#PS ;AND DROP DOWN TO LEVEL 3 AGSSOR (INTERNAL) FQDEF DTL ;LIST A DECTAPE DIRECTORY (INTERNAL) FQDEF DTK ;KILL A DECTAPE FILE (INTERNAL) FQDEF DTK1 ;INTERMEDIATE "KILL" FUNCTION (INTERNAL) FQDEF DTN ;RENAME A DECTAPE FILE (INTERNAL) FQDEF DTR ;READ DECTAPE DIRECTORY ONTO DISK (INTERNAL) FQDEF DTS ;SHUT A DECTAPE FILE (INTERNAL) FQDEF DTO ;OPEN A DECTAPE FILE (INTERNAL) FQDEF DTZ ;DECTAPE ZERO FUNCTION (INTERNAL) ;MAG TAPE COMMANDS FQDEF MTO ;OPEN MAGTAPE FILE (INTERNAL) FQDEF MTC ;CLO" _. " D5!  Dam""Z" fa""(".   wx !   . "0  p  .?<%.叟f L.L#7! !,#7A.r ,f,.f  ;AND INTO THE HIGH ORDER ROR R2  ;3 BITS OF THE REGISTER MOV DSQDMA(R4),R0 ;NOW GET THE DISK SEGMENT NUMBER BR DISKK1  ;AND GO FIND THE REAL ADDRESS DISKK2: ADD R0,R2  ;ADD INTO THE REAL DISK ADDRESS ASR R0  ;DIVIDE THE ANSWER BY ASR R0  ;4 SO WE CAN ADD R1,R0  ;ADD THE REMAINDER TO IT DISKK1: MOV R0,R1  ;COPY THE NUMBER BIC #-17-1,R1 ;AND DIVIDE BY 16; GET REMAINDER BIC R1,R0  ;AND THE EXACT ANSWER BNE DISKK2  ;IF NON-0 THEN ADD IT IN ANDAIN BCS CHRU01  ;MONITOR BUFFER IS EMPTY CHRU02: MOV (R5),R4  ;GET USER RELATIVE BUFFER POINTER ADD R3,R4  ;CONVERT TO ABSOLUTE POINTER (C=0) MOVB R2,(R4)  ;STORE THE CHARACTER INC (R5)  ;UPDATE BUFFER POINTER .IFNZ JCUNUM CMP R2,#15  ;CR? BNE CHRU03  ;NOPE CMPB (R1),#TTYHND ;KEYBOARD TYPE? BNE CHRU03  ;NOPE CMP R0,#JCUN2 ;JCU? BLO CHRU03  ;NOPE BIS #JCEATB,@TTILST(R0);SET EAT BIT INCB BUFWAIT  ;ONE MORE WAITING CHRU03: CLC SE MAGTAPE FILE (INTERNAL) FQDEF MTU ;OPEN UTILITY ROUTINE (INTERNAL) ;ADDITIONAL COMMANDS FQDEF ZER ;ZERO A USER'S DISK AREA (UUO-INTERNAL) FQDEF ATT ;ATTACH TO A DETACHED JOB (UUO-INTERNAL) FQDEF DET ;DETACH FROM A JOB (UUO-INTERNAL) FQDEF MNT ;MOUNT A DISK PACK ON-LINE ; SYSTEM RELATED COMMANDS FQDEF UUO ;SYSTEM CALL TO FIP (UUO ONLY) FQDEF ERR ;READ AN ERROR MESSAGE FROM (UUO) FQDEF ASS ;ASSIGN DEVICE TO USER (UUO) FQDEF DEA ;DE-ASSIGN A hf f  BI. !  |  Uku Ş"C W&Ş . d! w N . !ԉ  +.0 r$1 b .V! J <  (,X.| $ l& P F*  W .   & w .e LOOP CMP R1,#12.  ;CHECK THE REMAINDER FOR OVERFLOW BLT DISKK3  ;AND IF NEEDED, THEN ADD #4,R1  ;CORRECT THE REMAINDER SO WE CAN DISKK3: ADD R1,R2  ;ADD IT TO THE REAL DISK ADDRESS MOV R2,DSQPDA(R4) ;NOW SET THE REAL PHYSICAL ADDRESS BIC #-17740-1,R2 ;CLEAR ALL BUT THE CYLINDER NUMBER MOV R2,DSQOPT(R4) ;AND PUT INTO OPTIMAZATION WORD JSR R5,RESREG ;GET OUR REGISTERS BACK JSR R1,QUEUED ;AND QUEUE THE REQUEST INTO + DSKQDK  ;THE RK11 DISK QUEUE    .ENDC CHRU01: MOV (SP)+,R4 ;RESTORE R4 RTS PC  ;RETURN ;------------------FIELD TTY INTERRUPTS-------------------------------- .IFGE DC11+KL11+DL11E-16. TTIIN0: MOV @#PS,-(SP) ;SAVE LINE NUMBER -16. ADD #16.,(SP) ;NOW CORRECT IT BR TTIIN1 TTOIN0: MOV @#PS,-(SP) ;SAVE LINE NUMBER -16. ADD #16.,(SP) ;NOW CORRECT IT BR TTOIN1 .ENDC TTIINT: MOV @#PS,-(SP) ;SAVE THE LINE NUMBER TTIIN1: MOV #TTIN,-(SP) ;ADDRESS OF TTY INPUT DEVICE (UUO) FQDEF RST ;RESET ALL I/O CAHNNELS EXCEPT 0 FQDEF DAL ;DE-ASSIGN ALL DEVICES, EXCEPT CONSLE TTY (UUO) ;.FQ HAS TABLE SIZE COMPUTING FACTOR (IN BYTES) ;.FQ0 HAS NON-RESIDENT OFFSET IN TABLE ;.FQ0 AND .FQ CANNOT BE REUSED ;I/O ERROR CODES-- SET IN JDIOST FOR EACH I/O OPERATION (@IOSTS) BADDIR = 2  ;DIRECTORY SCREWED UP OR ILLEGAL DIRECTORY DEVICE BADNAM = 4  ;BADLY FORMED FILE NAME INUSE = 6  ;FILE OF SAME NAME IS IN USE NOROOM =10  ;DIR" !" w 6ZՉ1"Z  Zh.w *R1" 1l"q e"O  R.1"  w  a r .:Ӂ  F l .` D  ^  .P 2  w!"7 &.^ C 7 07,& ^.ЉfpW!pu 6;AND FALL TO "DSKGDK" DSKGDK: MOV #DSKQDK,R4 ;SET UP A POINTER TO ARM POSITION JSR PC,DSKOPT ;AND FIND THE BEST REQUEST TO DO MOV DSKQDK,R4 ;GET THE BEST REQUEST'S ADDRESS MOV #RKDA,R1 ;NOW SET THE HARDWARE POINTER DSKGK1: MOV DSQPDA(R4),(R1) ;AND SET THAT ADDRESS ADD #DSQCMA,R4 ;POINT R4 TO THE OTHER PARAMETERS .IFNZ RF11!RCRK11!RCRP11 BR DSKGO6  ;AND CONTINUE .ENDC .IFZ RF11!RCRK11!RCRP11 DSKGPROCESSOR BR TTPOLL  ;NOW PICK UP THE LINE # TTOINT: MOV @#PS,-(SP) ;SAVE LINE # TTOIN1: MOV #TTOUT,-(SP) ;AND PROVIDE ADDRESS OF OUTPUT PROCESSOR ; BR TTPOLL  ;PICK UP LINE # ;ONCE UPON A TIME, TTY'S WERE POLLED, ERGO THE NAME. NOW THE LINE NUMBER ;FOR EACH TTY IS STORED IN THE STATUS WORD PART OF ITS VECTOR. WHEN IT ;INTERRUPTS, THE VECTOR IS LOADED INTO THE PSW, AND THE NUMBER IS EXTRACTED BY TTPOLL. TTPOLL: JSR R5,SAVREG ;SAVE R5-R0 MOV 7*2(SPECTORY IS FULL OR SAT IS EMPTY NOSUCH =12  ;FILE OR UFD DOES NOT EXIST NODEVC =14  ;NO SUCH DEVICE ON SYSTEM NOTCLS =16  ;CAN'T OPEN ALREADY OPEN CHANNEL NOTAVL =20  ;DEVICE NOT AVAILABLE TO USER NOTOPN =22  ;TRYING TO OPERATE ON UNINITTED CHANNEL PRVIOL =24  ;PROTECTION VIOLATION EOF =26  ;END OF FILE ON READ/WRITE ABORT =30  ;OPERATION ABORTED DATERR =32  ;DATA ERROR ON DEVICE HNGDEV =34  ;HUNG DEVICE FOR JOB HNGTTY =36  ;HUNG TTY FOR JOB (WAIT EXHAUSTED) FIE.7f# d    .! ! ! Be5| ! _  xQc4.D  awNpw $(U(CyC.j  Tw X : c"Xe.w TՉ  4  ^̕7 T.  Rw R\ $ w  \p.01EÜ-p1 EO6: CLR -(SP)  ;NO SPECIAL FORM FOR FUNCTION DSKGPP: MOV (R4)+,-(R1) ;SET THE CORE ADDRESS MOV (R4)+,-(SP) ;GET SECTOR COUNT (+) SWAB (SP)  ;TIMES 256. FOR WORDS CLRB (SP)  ;MINUS THE UNIT NEG (SP)  ;NEGATED MOV (SP)+,-(R1) ;AND SET... MOVB (R4)+,(SP) ;SET THE FUNCTION CLRB (R4)  ;CLEAR THE FAIRNESS COUNT MOV (SP)+,-(R1) ;LOAD THE FUNCTION AND GO MOV (SP)+,R1 ;AND FINALLY RESTORE R1 RTS PC  ;AND EXIT .ENDC .ENDC ),R0 ;GET THE SAVED PROCESSOR STATUS BIC #-37-1,R0 ;NOW GET ONLY THE LINE NUMBER ASL R0  ;NOW IS LINE NUMBER TIMES 2 MOV DEVTBL(R0),R1 ;GET THE TTY DDB MOV #TTILST,R4 ;BUILD POINTER INTO TTILST ADD R0,R4  ;THIS LINE'S ENTRY MOV (R4)+,R3 ;GET HIS INPUT CSR ADDRESS MOV (R3)+,R2 ;AND GET THE CONTENTS OF CSR .IFNZ DC11 ! DL11E ;CONDITION ON DC11'S OR DL11E'S BPL TTP03  ;PLAIN ORDINARY DATA INTERRUPT TST (R3)  ;MAKE SURE HE INTERRUPTS AGAIN .IF NZ DXST =40  ;FILE ALREADY EXISTS--DELETE IT FIRST DTOOOF =42  ;TOO MANY OPEN FILES ON UNIT BADFUO =44  ;ILLEGAL FIP UUO FOR JOB INTLCK =46  ;INTERRLOCK ERROR WRGPAK =50  ;WRONG DISK PACK MOUNTED NOTMNT =52  ;NO DISK PACK IS MOUNTED ON DRIVE PAKLCK =54  ;DISK PACK IS LOCKED OUT BADCLU =56  ;BAD CLUSTER SIZE SPECIFIED PRIVAT =60  ;PRIVATE PACK ILLEGALLY REFERENCED INTPAK =62  ;NON-CLEARED UP PACK MOUNTED BADPAK =64  ;BAD DISK PACK DETKEY =66  ;I/O TO DETACHED KEYB .Ü@015  .(p151C1`  E-.N` zp1 C & .tNΌa  n : 6! Ic.I*!U v C`! I. ! f 0!$N E %w . ᕿf ,&!&i. ≖% p ̕ U@w.2wa^afkQp0 .IFNZ RK11!RP11 ; RK11 AND RP11 SEEK DISTANCE MINIMUMIZER ;CALL: JSR PC,DSKOPT (CLOSED) ;  R4- POINTS TO CONTROL TABLE: ;   WORD 1 - DISK QUEUE ROOT WORD ;    2-N - ARM POSITION TABLE, 1 PER DRIVE ;  DSQFAR- FAIRNESS COUNT (BYTE) ;  DSQOUN- DRIVE(UNIT) NUMBER X 2 (WORD/BYTE) ;  DSQOPT- SEEK ADDRESS FOR ABOVE DRIVE (WORD) ;BACK: RETURNS AT INST FOLLOWING CALL. ; R0-R5- UNCHANGED ; TOP OF STACK HAS CONL11E  ;DL11E'S ARE WEIRDO INTERFACES CMP R0,#KL11+DC11+1*2; IS IT A DL11E ? BLO TTPDC  ; BRANCH IF NOT BIS #146,-(R3) ;SET IE'S+REQ TO SEND+DATA TERM RDY ASL R2  ;SHIFT RING BIT INTO BIT INTO BIT 15 BMI TTMRNG  ;BRANCH ON RING-ELSE CARRIER XITION BIT R2,#20000 ;CARRIER COMING OR GOING ? BEQ TTP06  ;IT WENT.GIVE IT 2 SECONDS TO COME BACK BR TTP05  ;COMING. FIX HIM UP .ENDC    ;END DL11E CONDITIONAL .IF NZ DC11  ; TTPDC: BIS #101,-(R3) ;MAKE OARD CTRLCE =70  ;^C PROGRAM ABORT SATTBD =72  ;CORRUPTED FILE STRUCTURE ; ERRORS (TRAP+COUNT ; COUNT = 53 TO 177) ; ERROR MODIFIERS FATAL = 200  ;FATAL ERROR (NO RETURN) POST = TRAP  ;POST AN ERROR PSTFLT = 2+JFSTOP ;FLOATING ERROR PSTFIX = 4+JFSTOP ;FIX ERROR PSTDV0 = 6+JFSTOP ;DIVISION BY 0 ERROR IOTERR = TRAP+1  ;GET THE FIP ERROR .MACR $ERDEF NAME NAME = TRAP+UNITNO UNITNO=UNITNO+1 .ENDM UNITNO = 52  ;ERRORS D!f P.Xp0Ջp0 EEfC`.~e ˵ Em% ˵ x .  jm  B. @ & N NaNdf ! ." f:f  f vfp& H ".2f p&E0 U0.<`6fU .bE  . w  ̤Ё`TENTS OF R1 ; QUEUE PASSED HAS BEST OPERATION AS FIRST ENTRY ;REGISTER USAGE: ; R0 - CURRENT QUEUE ENTRY ; R1 - BEST ENTRY SO FAR ; R2 - ENTRY BEFORE ENTRY IN R1, NOT THE NEXT BEST ; R3 - TEMP STORAGE ; R4 - POINTER TO QUEUE ROOT, TABLE TOP ; R5 - GOAL TO BEST ON DISTANCE ; R6 - (SP) - PERVIOUS QUEUE ENTRY, OLD R0 ; R7 - POINTER TO NEXT INSTRUCTION ; FIND SHORTEST SEEK DISTANCE DSKOPT: JSR R5,SAVREG MOV R4,-(SP) ;SET PREVIOUS ENTRY AS QUEUE ROOT MOV (R4)+,R0 ;SET CURSURE TERMINAL READY IS ON ASL R2  ;SHIFT CARRIER TRANSITION BIT INTO SIGN BMI TTP04  ;BRANCH IF CARRIER TRANSITION .ENDC    ; TTMRNG: MOV R0,R2  ;COPY LINE # TIMES 2 MOV #30.,R5  ;SET 30 SECOND TIME OUT MOV #TTP07,-(SP) ;AND SET RETURN ADDRESS DDBSET: ASL R2  ;NOW TIMES 4 ASL R2  ;NOW TIMES 8. ADD #TTSLST,R2 ;NOW A POINTER INTO INIT DC11 LIST MOV (R2)+,(R3) ;SET INPUT CSR MOV (R2)+,4(R3) ;SET OUTPUT CSR MOVB (R2)+,TTSTS1(R1);SET STATUS 1 START HERE $ERDEF VCSERR  ;VIRTUAL BUFFER NOT 512. BYTES $ERDEF VCAERR  ;VIRTUAL CORE NOT ON DISK $ERDEF SIZERR  ;ARRAY TOO BIG $ERDEF VCOERR  ;VIRTUAL CORE NOT OPENED $ERDEF BSERR  ;ILLEGAL I/O CHANNEL $ERDEF LINERR  ;LINE TOO LONG $ERDEF FLTERR  ;FLOATING POINT ERROR $ERDEF EXPERR  ;ARGUMENT TOO LARGE IN EXP $ERDEF SINERR  ;ARGUMENT TOO LARGE IN SIN $ERDEF FIXERR  ;INTEGER ERROR $ERDEF BDNERR  ;ILLEGAL NUMBER $ERDEF LOGERR  ;TRANSЉ̗`W E.  vԕw   HH$8H . L8H  H8)DDD5.w .)`$fiw v.1!.8i8)o8Aq`l.(8 w @.53w  -46q.N5`)i߁84 1).t888 w .-`w f1 8 ,.w i>(8 i>)8 >*f.%RENT ENTRY, BUMP TO TABLE MOV R0,R1  ;SET THE FIRST AS THE BEST MOV (SP),R2  ;AND PREVIOUS ENTRY ADDRESS CMPB DSQFAR(R0),#FARCNT;FIRST ENTRY ?? BHIS DSKOP5  ;IF SO, THEN DO IT FIRST !! MOV #177777,R5 ;SET A BIG DISTANCE, MAKE IT EASY ; SCAN QUEUE LOOKING FOR MIN DISTANCE OR TIME EXCEEDED DSKOP0: INCB DSQFAR(R0) ;BUMP THE FAIRNESS COUNT CMPB DSQFAR(R0),#FARCNT;TEST TIME IN QUEUE BLO DSKOP1  ;NOT OLD ENOUGH AS YET CLR R5  ;DISTANCE OF ZERO IS HARD TO BEAT MOVB (R2)+,TTSTS2(R1);SET STATUS 2 MOVB (R2)+,TTSTS3(R1);SET STATUS 3 MOVB (R2)+,DDHORC(R1);SET FORMS WIDTH RTS PC  ;EXIT TTP04: BIT R2,#4*2  ;SEE IF COMING OR GOING BEQ TTP06  ;BRANCH IF GOING-HOPE HE LOGGED OUT TTP05: CLR TTYCLK(R0) ;ELSE MAKE HIM LOOK LIKE A TELETYPE BICB #TTWRC,TTSTS2(R1);SAY ENABLED .IFNZ KBAUTO MOVB DDJBNO(R1),R3 ;IS DDB ASSIGNED TO A JOB? BNE TTP01  ;YES, SO DON'T TOUCH IT JSR R5,CLRBUF ;MAKE SURE INPUTCENDENTAL ERROR $ERDEF SQRERR  ;IMAGINARY SQUARE ROOTS $ERDEF SUBERR  ;SUBSCRIPT OUT OF RANGE $ERDEF MINVER  ;CAN'T INVERT MATRIX $ERDEF ODD  ;OUT OF DATA $ERDEF ONBAD  ;ON STATEMENT OUT OF RANGE $ERDEF NEDERR  ;NOT ENOUGD DATA IN RECORD $ERDEF IOLERR  ;INTEGER OVERFLOW, FOR LOOP $ERDEF DIVBY0  ;DIVISION BY 0 ; CANNOT RESUME FROM FOLLOWING ERRORS ERRCC = UNITNO $ERDEF XCDCOR  ;MAXIMUM CORE EXCEEDED $ERDEF STMERR  ;STATEMENT NOT FOUND $ERDE)8.)'8.)8. Q`8fi8 w >8w x>f`2 w n +`f   w b,`w Z1j8.` $$w Jf)b 80XQ 6.6&  % ,X\Ɍ J B  pi.hC _X@C _@ z@K.z@w@Wu@%@ BR DSKOP3  ;AND SET THIS AS THE BEST ; R0 POINTS TO ENTRY TO BE CHECKED, (SP) POINTS TO PREVIOUS ENTRY DSKOP1: MOV DSQOUN(R0),R3 ;GET UNIT NUMBER X 2 ADD R4,R3  ;ADD IN TABLE BASE AND GET MOV (R3),R3  ;POSTION OF THAT UNIT'S ARM SUB DSQOPT(R0),R3 ;TAKE THE ABSOLUTE VALUE BHIS DSKOP2  ;OF THE DISTANCE BETWEEN NEG R3  ;THIS REQUEST AND UNIT'S ARM DSKOP2: CMP R3,R5  ;AND SEE IF BEST SO FAR BHIS BUFFER IS CLEAR + DDINP+EP JSR R5,CLRBUF ;CLEAR OUTPUT BUFFER TOO... + DDOUT+EP MOV #'I,R2  ;LET'S SAY HE TYPED AN "I" JSR R5,STORE ;SO STORE IT AWAY + DDINP+FP JSR PC,TTILF1 ;NOW GO STORE LF AND SET UP JOB .ENDC BR TTP01  ;AND EXIT TTP06: MOV #2,R5  ;CARRIER DROPPED--WAIT 2 SECONDS TTP07: BISB #TTWRC,TTSTS2(R1);SAY WAITING FOR CARRIER MOV R5,TTYCLK(R0) ;AND SET THE TIME-OUT FOR THIS LINE BR TTP01  ;AND CHECK THE OTHER LINES .ENDC   ;ENF BADERR  ;ILLEGAL STATEMENT $ERDEF STPERR  ;STOP $ERDEF ERRERR  ;UNIMPLEMENTED CODE $ERDEF DIMERR  ;MATRIX DIMENSION ERROR $ERDEF PRERRS  ;USING-STRING FORMAT ERROR $ERDEF PRNER1  ;BAD NUMBER IN PRINT-USING $ERDEF PRNER2  ;PRINT-USING BUFFER OVERFLOW $ERDEF UDMERR  ;ARRAY WITHOUT DIM $ERDEF EXITTM  ;RETURN WITHOUT GOSUB $ERDEF EXITNR  ;FNEND WITHOUT FUNCTION CALL $ERDEF UNDFNI  ;UNDEFINED FUNCTION CALLED $ERDEF COSERR  ;ILLEGAL SYMBOL <$@.XM@L"@ @t'K@:"@.: "@R@W$@W@$@_X_@.N`7=@N`u@fw@fZ@fZ@.fZ@fZ@[g5@Iq@[qOq@.[qj@s!@kua@v @vOq@.yؚ@y@yX@ya@zT@=.zV@/}a@u~$@~@~` @.~T@~ZX@~@~!@~'@.~OM@~d@~c@~@~ @.DSKOP4  ;NOT THE BEST, FIRST COME FIRST SERVE MOV R3,R5  ;SET A NEW GOAL DSKOP3: MOV R0,R1  ;SET THE BEST ENTRY ADDRESS MOV (SP),R2  ;AND THE PREV ENTRY ADDR TOO ; R1 HAS BEST, R2 HAS PREV ENTRY TO BEST, R5 HAS BEST DISTANCE DSKOP4: MOV R0,(SP)  ;SAVE PREVIOUS ENTRY MOV (R0),R0  ;LINK ON TO NEXT ENTRY BNE DSKOP0  ;AVOID LOOKING AT LO CORE ; PLACE BEST ENTRY AT THE TOP OF THE QUEUE AND UPDATE ARM POSITION MOV (R1),(R2) ;LINK AROUND THE BEST IN THE WEST D DC11 OR DL11E CONDITIONAL TTP03: JSR PC,@6*2(SP) ;NOW CALL THE PROPER ROUTINE TTP01: JSR R5,RESREG ;RESTORE ALL THE REGISTERS CMP (SP)+,(SP)+ ;REMOVE OLD PS AND INPUT/OUTPUT ADDR RTI   ;NOW WE CAN EXIT FROM THE INTERRUPT ;TTY CHARACTER OUTPUT ROUTINE (INTERRUPT LEVEL 4 OR 5) ;FEEDS THE NEXT CHAR FROM BUFFER TO TTY ;CALL: JSR PC,TTOUT ;ON ENTRY, R1=DDB ADDRESS, R3=TKB TTOUT: ADD #4,R3  ;SKIP TO OUTPUT DATA BUFFER BISB #TTHUNG,TTSTS2(R1);NOT $ERDEF TLOPNV  ;ILLEGAL VERB $ERDEF TLNZSP  ;ILLEGAL EXPRESSION $ERDEF TLNOIT  ;ILLEGAL MODE MIXING $ERDEF TLIFFE  ;ILLEGAL IF STATEMENT $ERDEF TLCONI  ;ILLEGAL CONDITIONAL CLAUSE $ERDEF TLNOTF  ;ILLEGAL FUNCTION NAME $ERDEF TLQDUM  ;ILLEGAL DUMMY VARIABLE $ERDEF TLMFND  ;ILLEGAL FN REDEFINITION $ERDEF TLRNNM  ;ILLEGAL LINE NUMBER(S) $ERDEF MODERR  ;MODIFIER ERROR $ERDEF TLORDT  ;CAN'T COMPILE STATEMENT $ERDEF OUTOAS  ;EXPRESSION TOO C~v~@ \~@4@4@4s@).(( hzh S(h_h P.`h Mh:#XhPshVshj/.^sh:h:h}h&`h.`hXhyhJyhVhZ.jh2Şh` ,Xh ,\h ,fh . N_`h _X@hsZqh"s\qhsH:h>hku h  j ` r zh. `   r zMOV -(R4),(R1) ;PLACE OLD #1 AS #2 MOV R1,(R4)+ ;SET BEST AS #1 DSKOP5: MOV DSQOUN(R1),R3 ;GET DRIVE NUMBER X 2 ADD R4,R3 MOV DSQOPT(R1),(R3) ;SET UP NEW ARM POSITION ; ALL DONE WITH MIN SEEK DISTANCE TST (SP)+  ;DUMP THE STACK ITEM JSR R5,RESREG JSR R1,@(SP)+ ;RETURN WITH R1 ON THE TOP OF STACK .ENDC .IFNZ RF11!RCRK11!RCRP11 ;RC11 AND RF11 DISK INTERRUPT SERVICE DFFINT: JSR R5,SAVREG ;S HUNG IF INTERRUPTED TTO06: JSR R5,FETCH ;GET A CHARACTER + DDOUT+FP ;FROM OUTPUT BUFFER BCS TTO03  ;BRANCH IF NONE LEFT TTO04: MOV R2,(R3)  ;PUSH THE CHARACTER OUT THERE .IFNZ JCUNUM CMP R3,#160000 ;JCU? BHIS REALTT  ;NOPE BIS #100,-(R3) ;YES .ENDC REALTT: CMP DDOUT+BC(R1),#3 ;ROOM IN OUTPUT BUFFER? BGE TTO02  ;YES, SO SET JSTEL RTS PC  ;RETURN TTO03: BIC #100,-(R3) ;DISABLE INTERRUPT BR TTO02  ;AND SET TTY READY FLAG, IN CASE OMPLICATED $ERDEF FUNERR  ;ARGUMENTS DON'T MATCH $ERDEF TLTMAF  ;TOO MANY ARGUMENTS $ERDEF TLINCD  ;INCONSISTENT FUNCTION USAGE $ERDEF CPNSDF  ;ILLEGAL DEF NESTING $ERDEF CPUPFR  ;FOR WITHOUT NEXT $ERDEF CPUFNX  ;NEXT WITHOUT FOR $ERDEF CPUPDF  ;DEF WITHOUT FNEND $ERDEF CPUPED  ;FNEND WITHOUT DEF $ERDEF TLJNKY  ;CONSTANT STRING NEEDED $ERDEF TLNOFN  ;TOO FEW ARGUMENTS $ERDEF SASYNE  ;SYNTAX ERROR $ERDEF SAFNOS  ;STRING IS NEEDED $E( (N . ( N    e2 X.     < Z@.     Z F  z  z r .)B  %@ w v fZ"&[g5M.&    UEC _X _X_z AVE ALL REGISTERS AT INTERRUPT MOV #DSKQUF,R0 ;LET R0 BE THE QUEUE STARTING POINT MOV #DSKGO,R1 ;AND LET R1 BE THE RESTART ROUTINE MOV (R0),R4  ;GET THIS PROCESSED DSQ POINTER .IFNZ RF11 ! SWRF11 MOV #RFCS,R2 ;GET RF11 CONTROL STATUS POINTER .ENDC .IFZ RF11 .IFZ SWRF11 MOV #RCCS,R2 ;GET RC11 CONTROL STATUS POINTER .ENDC .ENDC TST (R2)  ;WAS THERE ANY ERROR? BPL DFFIN1  ;NOT THIS TIME .IFNZ RF11 ! SWRF11 BIT #006000,(R2) ;WAS THE ERROR HAR;HANDLE ^O TYPED BY USER-------------------------------------------- ;IF HE ALREADY TYPED A ^O, THEN CANCEL IT'S EFFECT, OTHERWISE ;CLEAR OUTPUT BUFFER, KILL FUTURE OUTPUT TO TTY, AND ECHO ^O TTICO: TST (R1)  ;IS HE TOGGLING ^O? BMI TTIC01  ;YES--REENABLE HIS OUTPUT JSR PC,TTIC10 ;NO--DO BUFFER HOUSEKEEPING TTIC02: JSR R5,ASCOUT ;AND ECHO + TTICOC  ;<^> RTS PC TTIC01: BIC #NOOUTP,(R1) ;ALLOW PROGRAMMED I/O ON TTY BR TTIC02  ;RDEF SASNOI  ;NUMBER IS NEEDED $ERDEF TLURTP  ;DATA TYPE ERROR $ERDEF TLXDIM  ;1 OR 2 DIMENSIONS ONLY $ERDEF FUCORE  ;PROGRAM LOST-SORRY $ERDEF RESERR  ;RESUME AND NO ERROR $ERDEF DIMED2  ;REDIMENSIONED ARRAY $ERDEF TLIDIM  ;INCONSISTENT SUBSCRIPT USE $ERDEF NOGOTO  ;ON STATEMENT NEEDS GOTO $ERDEF EOSERR  ;END OF STATEMENT NOT SEEN $ERDEF TLCNTD  ;WHAT? $ERDEF TLPRNM  ;BAD LINE NUMBER PAIR $ERDEF EDBMCE  ;NOT ENOUGH CORE $ERDEF EDEXO .L w *   C _ _X_N`u.r U w  }Fz4" zp.& p:& a _Mt 4 ^.U"4' U !   4~ ~!$~c]. &! v f NU ~!~OM"&XM. w ,U  2 w  HN`u.0D/WRITE PROT? .ENDC .IFZ RF11 .IFZ SWRF11 BIT #014000,(R2) ;WAS THE ERROR HARD/WRITE PROT? .ENDC .ENDC .ENDC DFFIN7: BEQ DFFIN5  ;SOFT ERRORS ARE JUST RETRIED DFFIN8: MOVB #HNGDEV,DSQERR(R4);HARD/WRITE PROT ERRORS YIELD THIS DFFIN5: MOVB DSQUNT(R4),R2 ;GET LOGICAL UNIT NUMBER ASL R2  ;TIMES 2 FOR WORD ADDRESSING INCB UNTCLU+1(R2) ;COUNT AS ERROR TSTB DSQERR(R4) ;DID WE HAVE A HRAD ERROR BPL DFFIN1  ;YES OR COUNT IS GONE SO QUIT INCB DSQERR(R4)AND ECHO ^O TTIC10: BIS #NOOUTP,(R1) ;SET THE NO OUTPUT FLAG IN DDB JSR R5,CLRBUF ;AND NOW WIPE OUT OUTPUT BUFFER + DDOUT+EP ;POINTER TO DDB SECTION INVLOVED TTO02: MOVB DDJBNO(R1),R3 ;GET JOB INDEX OF OWNER BIS #JSTEL,JBSTAT(R3) ;SET TTY FLAG RTS PC  ;AND BACK ;TTY CHARACTER INPUT ROUTINE ;CALL JSR PC,TTIN ;ON ENTRY, R0=2*LINE, R1=DDB ADDRESS, R3=TKB TTIN: MOV (R3)+,R2 ;PICK UP INPUT CHARACTER TTIN10: BIC #-177-1,R2 ;JUNK EXTRANEOUS BIN  ;EXECUTE ONLY FILE $ERDEF NRNERR  ;PLEASE USE THE RUN COMMAND $ERDEF EDCONE  ;CAN'T CONTINUE $ERDEF EDARSV  ;FILE EXISTS-USE REPLACE $ERDEF KCOREM  ;K OF CORE USED $ERDEF SWPERR  ;SWAP ERROR FOR JOB $ERDEF LOGNOT  ;PLEASE SAY HELLO $ERDEF NONOIM  ;ILLEGAL IN IMMEDIATE MODE $ERDEF TLTRNK  ;TEXT TRUNCATED $ERDEF FIELDE  ;FIELD OVERFLOWS BUFFER $ERDEF DISERR  ;ILLEGAL FIELD VARIABLE $ERDEF NORACS  ;NOT A RANDOM ACCESS DEVICE $ERDEF NO04& 0   w.V Fb o 牀J6 z$6.|b  d V!Q$Eeb  .W$} VE Uw  dt'K \~(=.E5C0   E4w ~` &4G.| ! E Z$U| (.   EEm@ w ;ELSE COUNT THE ERROR BNE DFFIN6  ;AND WHY NOT (BECAUSE IT IS 0?) DFFIN1: BIS DSQL3Q(R4),L3QUE;NOW SET THE L3 BITS ON COMPLETION MOV @(R0)+,-(R0) ;AND DEQUEUE TO THE NEXT REQUEST BIT #QFILE,DSQL3Q(R4);WAS THAT REQUEST FOR FILES? BEQ DFFIN3  ;IF NOT, THEN NO MORE QUEUEING JSR R5,QUEUER ;IF SO, THEN QUEUE IT INTO + DSDONQ  ;THE FILE SERVICE QUEUE DFFIN3: TST (R0)  ;ARE THERE MORE REQUESTS IN THE QUEUE BEQ DFFIN4  ;IF NOT, THEN WE ARE FINALLY DONE DFFIN2: JSRTS BEQ TTIN04  ;AND IGNORE NULLS .IFNZ KBLC BITB #TTUC,TTSTS3(R1);CONVERT LOWER TO UPPER? BEQ TTIN15  ;LEAVE IT ALONE CMPB R2,#140  ;LOW SIDE BLO TTIN15  ;TOO LOW CMPB R2,#173  ;HIGH SIDE BHI TTIN15  ;TOO HIGH BIC #40,R2  ;CONVERT TO LOWER CASE .ENDC TTIN15: MOV #RUBOUT,R4 ;SEE IF WE'RE IN RUBOUT MODE BIT R4,(R1)  ;IF WE ARE, THEN DO WE STAY THERE? BEQ TTIN06  ;WE WEREN'T, SO DON'T BOTHER CHECKING CMPB R2,#17TMTA  ;DEVICE NOT MAGTAPE $ERDEF NOMATH  ;WRONG MATH PACKAGE ; EXTRA ERRORS COMMON TO ALL EDNOPB = NOSUCH/2+TRAP NOPERR = NOTOPN/2+TRAP RWPERR = PRVIOL/2+TRAP BADUUO = BADFUO/2+TRAP CTRLCT = CTRLCE/2+TRAP DETUUO = DETKEY/2+TRAP ;DEVICE DATA BLOCK (DDB) ;THESE 16. WORD BLOCKS ARE PERMANENTLY ASSIGNED TO EACH DEVICE ;AND TELETYPE IN THE SYSTEM. THE DEVICE TABLE (DEVTBL) CONTAINS ;POINTERS TO EACH DDB. ;IF A DEVICE IS ASSIGNED TO A JOB, THEN T": "e.:w5 U Z h$s! fw&4..`5E4EE awpJ4$.a@w u E5p:"z &.U r !w  " &~v~. ̕ 0 ^EA  $` ~ZX~` ~T".U  |55 PC,(R1)  ;IF SO, THEN GO TO THE STARTING ROUTINE DFFIN4: JMP RESRT4  ;AND EXIT NICELY ;RK11 DISK INTERRUPT SERVICE .IFNZ RK11  ;***** IF RK11 DKINT: JSR R5,SAVREG ;SAVE ALL REGISTERS ON INTERRUPT MOV #DSKQDK,R0 ;LET R0 BE THE QUEUE STARTING POINT MOV #DSKGDK,R1 ;AND LET R1 BE THE RESTART ROUTINE MOV (R0),R4  ;GET THE CURRENT REQUEST INTO R4 MOV #RKER,R2 ;GET A POINTER TO THE HARDWARE STATUS MOV  7  ;WE WERE, SHOULD WE REMAIN BEQ TTIN06  ;THIS IS ANOTHER RUBOUT, SO WE SHOULD BIC R4,(R1)  ;NO LONGER IN RUBOUT MODE JSR R5,ASCOUT ;ECHO A <\> + TTBACK TTIN06: BITB #TTDDT,TTSTS2(R1);IS HE CURRENTLY IN DDT SUBMODE? BEQ TTIN08  ;NOPE--SCHEDULE ON BASIS OF DELIMITER JSR R5,IOFINI ;MAKE THIS USER RUNNABLE + JSKEY TTIN08: JSR R5,TTSIVE ;IS IT A WEIRDO CHARACTER .BYTE 34  ;SAFE CHARACTERS .BYTE 174  ;HIGH LIMIT + TTICHL  ;LIST OF FUNNY CHARACTERS HE ENTRY IN "DDJBNO" ;CONTAINS THE NUMBER OF THE OWNER JOB. IF 0, THE DEVICE IS AVAILABLE ;EACH TIME A DEVICE IS INIT'ED, THE INIT COUNT IN "DDCNT" IS INCREMENTEDD, ;WHEN THE DEVICE IS CLOSED, THE COUNT IS DECREMENTED. IF THE COUNT ;GOES TO 0, AND THE DEVICE WAS NOT "ASSIGNED" THEN IT IS RETURNED ;TO THE SYSTEM; OTHERWISE IT IS RETAINED BY THE JOB ;THE NON-DEVICE-DEPENDENT ENTRIES IN THE DDB ARE: DDIDX = 0  ;HANDLER INDEX DDSTS = 1  ;STATUS AND ACCESS CONTROL BYTE DDJBNO = 2  ;OW  4 ya&4". 60 : w "~8.D D@0`E8  R(.jb w>! 2e0 y2(fZ. Hw N( l w 8T ~N`up.  T w V w Z! ~'N`u(y]. 4 w 4 &le (R2)+,R5 ;PUT THE ERROR REGISTER INTO R5 MOV (R2),-(SP) ;AND PUT THE CONTROL STATUS ON STACK MOV #RKREST,R3 ;NOW GET THE RESET STATUS POINTER BIT #040000,(SP) ;WAS THERE A HARD ERROR? BEQ DKINT1  ;IF NOT, THEN NO RESET NEEDED MOV #1,(R2)  ;IF SO, THEN RESET THE CONTROL TSTB (R2)  ;AND WAIT FOR READY (UP AT BPL .-2  ;LEVEL 5!) IT SHOULD BE FAST DKINT1: CMP R3,R4  ;WAS THIS A RESET INTERRUPT? BEQ DKINT2  ;IF SO, THEN HANDLE SPECIALLY TST (SP)+  ;CHEC  + TTIDSP-2 ;LIST OF SUBROUTINES TO HANDLE ABOVE BR TTIN04  ;IT WAS A WEIRDO JSR R5,STORE ;STORE IN INPUT BUFFER + DDINP+FP BCS TTIN05  ;DIDN'T FIT, RING BELL BIT #HAFDUP+NOECHO+TAPE,(R1) ;SHOULD WE ECHO CHARACTER BNE TTIN04  ;NO TTIN03: JSR PC,CHOUT ;OUTPUT THE CHARACTER TTIN04: JSR R5,FREBUF ;IS THERE STILL ROOM LEFT? .BYTE DDINP+BC,2 ;IN INPUT BUFFER BCS TTIN07  ;IF NOT, THEN DON'T START READER BIS #1,@TTILST(R0) ;YES,SO TURN IT ON .IFZ KBNER JOB INDEX (0 IF FREE) DDUNT = 3  ;DEVICE/DISK UNIT NUMBER DDTIME = 4  ;TIME ASSIGNED OR INITED DDHORZ = 6  ;HORIZONTAL POSITION DDVERT = 7  ;VERTICAL POSITION DDINP =10  ;INPUT CONTROL AREA DDOUT =22  ;OUTPUT CONTROL AREA DDHORC =34  ;CHARACTERS PER LINE DDVERC =35  ;LINES PER PAGE DDCNT =36  ;INIT COUNT FOR DEVICE ;BIT ASSIGNMENTS FOR DDB STATUS WORDS ARE AS FOLLOWS: ;(DDSTS): DDSTAT =100000  ;INTERNAL STATUS, CLEARED BY "CLOSE" DDWLO = 2000  ;WRITj4"l.$ ! !  |Ŕ&|.( |!”w d w  | dfZ"L"$N wb  w\,%u~$<$fZfZ\)#jV.       VV. Lw V & < |w FX .F ! w   Vj y $fZ.K THAT CONTROL STATUS AGAIN BPL DFFIN1  ;IF NO ERROR, THEN PROCEED NORMALLY BIT R5,#010000 ;DOES THE DRIVE NEED RESETTING? BEQ DKINT5  ;NO, TRY FOR OTHER ERRORS MOV R3,(R0)  ;IF SO, PUT THE RESET BLOCK IN QUEUE MOV R4,(R3)  ;AND LINK QUEUE INTO THE RESET BLOCK MOV DSQPDA(R4),@#RKDA;SET THE PHYSICAL ADDRESS MOV #115,(R2) ;AND LOAD A DRIVE RESET FUNCTION BR DFFIN4  ;AND EXIT FROM THE INTERRUPT DKINT5: BIT R5,#122340 ;THESE ARE THE HARD/WRITE PROT BITS DPINTXON TTIN07: .ENDC TTIN09: RTS PC  ;RETURN .IFNZ KBXON TTIN07: BITB #TTXON,TTSTS2(R1);DOES THIS TTY HAVE XOFF? BEQ TTIN09  ;IF NOT, THEN JUST EXIT BISB #TTXOFF,TTSTS3(R1);IF SO, THEN SAY WE SENT XOFF MOV #023,R2  ;SINCE WE DID SEND AN XOFF JMP CHO07  ;TO THE TTY IN QUESTION .ENDC TTIN05: MOV #007,R2  ;RING THE BELL .IFNZ JCUNUM CMP R0,#JCUN2 ;JCU? BLO SKPCOM  ;NOPE BIS #JCOVFL,@TTILST(R0);YES AND FULL TOO .ENDC SKPCOM: JSR R5,IOFINIE-LOCK FOR DEVICE IF SET DDRLO = 1000  ;READ LOCK FOR DEVICE IF SET ;(DDCNT): DDASN =100000  ;DEVICE ASSIGNED THROUGH COMMAND DDUTIL =040000  ;DEVICE ASSIGNED FOR UTILTY SEQUENCE ; TTY DDB DEFINITIONS TTSTS1 = 01  ;STATUS 1 ;DDJBNO = 02  ;OWNER JOB NUMBER TTSTS2 = 03  ;STATUS 2 ;DDTIME = 04  ;TIME ASSIGNED ;DDHORZ = 06  ;HORIZONTAL POSITION TTSTS3 = 07  ;STATUS 3 ;DDINP = 10  ;INPUT PARAMETERS FP = 00 ;FILL BUFFER POINTw8 B  , n~d N`ur. w |4 4 4 ~cm.w  g& J4 X yXWu.Dw XE4w w  Br   N`u.jr P ?2`W$ W@$&2. w D &&t'K' \~H.4: BR DFFIN7  ;GO CHECK THEM IN COMMON CODE DKINT2: MOV (SP)+,R5 ;GET THE CONTROL STATUS BIT #160000,R5 ;AND CHECK FOR ERRORS OR RESET DONE BEQ DFFIN4  ;IF NO BITS, THEN IGNORE THE INTERRUPT MOV (R4),(R0) ;UNQUEUE THE RESET BLOCK MOV (R4),R4  ;AND GET THE ORIGINAL REQUEST TST R5  ;ANY ERROR OCCUR? BMI DFFIN8  ;YES, SO CALL IT A HUNG DEVICE .ENDC DFFIN6: MOVB #FARCNT,DSQFAR(R4);FOR REQUEST TO RUN FIRST TIME BR DFFIN2  ;NOW GO START IT  ;AWAKEN HIM IF HIS BUFFER IS FULL + JSKEY BR TTIN03 ;HANDLE SPECIAL INPUT CHARACTERS ;ALL THESE ROUTINES ARE CALLED FROM TTSIVE VIA A ; JSR PC,X  ;X IS THE ROUTINE ;HANDLE CONTROL M (^M)-------------------------------------------------- TTICR: JSR R5,STORE ;STORE , IN INPUT BUFFER + DDINP+FP ;DUE TO POPULAR REQUEST TTIC12: BIT #TT2741+HAFDUP+NOECHO+TAPE,(R1);ARE WE ECHOING? BNE TTICR2  ;NO TTILF1: JSR R5,ASCOUT ;ECHO AS ER FC = 02 ;FILL COUNT EP = 04 ;EMPTY BUFFER POINTER EC = 06 ;EMPTY COUNT BC = 10 ;BUFFER COUNT ;DDOUT = 22  ;OUTPUT PARAMETERS ;DDHORC = 34  ;HORIZONTAL MAXIMUM TTLINE = 35  ;KEYBOARD NUMBER ; TTY STATUS 1 [WORD VALUES]: NOOUTP = 100000  ;JUNK PROGRAMMED OUTPUT HAFDUP =  40000  ;HALF DUPLEX TTY NOECHO =  20000  ;DON'T ECHO ON TTY TAPE =  10000  ;TAPE MODE RUBOUT =  4000  ;LAST CHARACTER TYPED WAS RUBOUT ;WLO =  2000  ;NO WRITE LO! ! LyzTzV"6.) d  e(w    .! w Bw ^5N`7=~+.(5 5UE  D  .N E$w  00 0  .t U0 Nb&  .e %T  .END  + CRLF0  ;OUTPUT TTIC11: MOV #12,R2  ;NOW THE TTICR1: JSR R5,STORE ;NOW STORE IT IN INPUT BUFFER + DDINP+FP BCS TTIN05  ;DIDN'T FIT-RING BELL TTICR3: MOVB DDJBNO(R1),R3 ;GET JOB # BNE TTICR4  ;IF JOB ISN'T DEFINED, DEFINE IT! TTICR9: MOV #JOBTBL+2,R3 ;LOOK FOR A JOB NUMBER TTICR5: TST (R3)+  ;SEE IF THIS SLOT IS AVAILABLE BEQ TTICR6  ;IT IS--GRAB IT BPL TTICR5  ;AT END OF JOBTBL (-1) TTICR7: JSR R5,ASCOUT ;NO--TELL HIM TOUGH LUCK, BCK OUT ;RLO =  1000  ;NO READ LOCK OUT TT2741 =  400  ;TERMINAL IS A 2741 TYPE ; TTY STATUS 2 [BYTE VALUES]: TT33 = 200  ;MODEL 33 TTY (NO HARDWARE TAB) TT35 = 100  ;MODEL 35 TTY (HARDWARE VT AND FF) TTDDT =  40  ;INTO DDT SUBMODE TTXON =  20  ;TERMINAL HAS XON/XOFF FEATURE TTRUB =  10  ;SPECIAL RUBOUTS TTHUNG =  4  ;TTY HUNG STATUS (0 IS HUNG) TTDCA =  2  ;SENT CTRL/N FOR DIRECT ADDRESSING TTWRC =  1  ;WAITING FOR CARRIER ; TTY STATUS 3 [BYT.wFm H  t. t@6 X@ N6w.  m  w & { $ .25 4w ! ECe 4 {.XECA , l    .~ w T 4 b0 e`. ! IM  w  .TITLE TB.P11 SYSTEM TABLES ;COPYRIGHT 1971,1972 BY DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;VERSION: 04A  EDIT: 54 ;DATE:  01-SEP-72 BY: MHB/JDM .ASECT . = 0  ;FOR NO BOOTSTRAP HALT VECTOR 4,AUTORE,PR7 ;BUS ERRORS VECTOR 10,AUTORE,PR7 ;RESERVED INSTRUCTIONS VECTOR 14,AUTORE,PR7 ;ODT TRAP VECTOR 24,RELOAD,PR7 ;POWER FAIL .IFNZ POWER VECTOR 24,POWERF,PR7 .ENDC . = 40  ;FOR HISTORY JMP @#INIT  ;GO INIT OURSELVES . = 50  ;MOABY + EXCDED  ;"TOO BAD" .IFNZ JCUNUM MOVB TTLINE(R1),R3 ;GET LINE # CMP R3,#JCUN2 ;JCU? BLO NOJC00  ;NOPE BIS #JCCATA,@TTILST(R3);FAILURE .ENDC NOJC00: JSR R5,CLRBUF ;WIPE OUT THE OLD INPUT BUFFER + DDINP+EP ;FOR INPUT RTS PC  ;RETURN TTICR2: BIT #TAPE,(R1) ;IF TAPE MODE, DON'T TYPE ANYTHING BNE TTICR3  ;SKIP THE ECHO BIT #TT2741+NOECHO,(R1);SHOULD WE ECHO LF? .IFNZ JCUNUM BIT #TT2741+NOECHO+HAFDUP,(R1);NO LF FOR JCU .ENDC BNE E VALUES]: TTCR = 200  ;2741 SENT , EOT IN TRANSIT TTCRO = 100  ;PDP-11 SENT , SKIP NEXT TTEOA =  40  ;WAITING FOR EOA FROM 2741 TTUC =  20  ;IN UPPER CASE SHIFT OR TRANS TO U.C. TTXOFF =  10  ;XOFF WAS SENT TO TERMINAL TTFILL =  7  ;FILL AMOUNT (0 TO 6 ; 7 IS LA30 FILL) ; LINE PRINTER DDB DEFINITIONS LPTCH0 = 040000  ;IF 1, THEN CHANGE 0 TO O LPTUCO = 020000  ;IF 1, THEN ONLY UPPER CASE LPTLS = 010000  ;IF 1, THEN LS L"N.e4w 0  4 .LJm64 Eo6"4g.4EIw Z ! 54  $R.< e4 l ! yX yؚ.bwN U 2 B2 @2 H2 ^; fw[qj.Bf E b7&  RE HISTORY BR RELOAD  ;SIMPLE RELOAD BR XCRASH  ;SIMPLE CRASH DUMP AUTORH: HALT   ;NO CRASH DUMPS IF HALTS BR RELOAD  ;RELOAD ON CONTINUE . = 110 AUTORE: SUB @#TIME,@#ITIME ;CHECK FOR TOO OFTEN BEQ AUTORH  ;IF TOO OFTEN, THEN HALT IT XCRASH: RESET   ;CLEAR THOS REGISTERS THAT WE CAN CMP @#SWR,#-1 ;CHECK FOR REALLY MEANING IT AUTOBR: BR AUTORH  ;IF NOT 177777, THEN DON'T DO IT JMP @#RELOA0 ;THEN CONTINUE RELOAD: JMP @#REL!TTIC11  ;NO-JUST LEAVE TTY QUIET FOR NOW MOVB DDHORC(R1),DDHORZ(R1);RESET POSITION SINCE JSR R5,ASCOUT ;ECHO THE LINE FEED TO HIS CR + LF  ;LINE FEED STRING BR TTIC11  ;AND NOW DO THE REST ;HANDLE ^Z ON INPUT----------------------------------------------------- TTICZ: JSR R5,ASCOUT ;ECHO <^>,,, + TTICZC BR TTICR1  ;NOW SET KYBD FLAG ;HANDLE ALTMODES ON INPUT----------------------------------------------- ;CHANGE THEM TO AS"11 LPTSFT = 004000  ;IF 1, THEN FORMS CONTROL ; DISK REQUEST QUEUE ENTRY BLOCK (DSQ) ;THIS BLOCK OF 16 WORDS IS PASSED TO AND FROM THE DISK DRIVERS ;TO INITIATE DISK DATA TRANSFERS AND TO SIGNAL THAT A TRANSFER ;HAS BEEN COMPLETED. IF THE TRANSFER WAS NOT DONE THE BLOCK ;IS PASSED BACK WITH A ZERO ERROR COUNT IN DSQERR. DSQ = 0  ;QUEUE LINK WORD DSQJOB = 2  ;JOB NO.*2 OF REQUESTOR DSQERR = 3  ;RE-TRY COUNT AND ERROR FLAG DSQL3Q = 4  ;L3QUE TASK BIT TO# F.&  e  4L$: .ew `w \^(.U55U! &. [5Ew _C4H.F ` l #a(w a(]U#(i.l  D`lEmդդդSS!>. UU!SSa0 w f$OA1 ;CONTINUE . = SYSTAK ; THE SYSTEM NAME GOES HERE... .NAME. .BYTE 0 . = 1000 .WORD TTXLST  ;FOR EASY FINDING OF "TTSLST" .WORD TTILST .WORD TTOLST ; LOAD THE PUSH-POP TABLE INITIALLY . = TABL2  ;REORG TO THE TABLE .REPT 256. .WORD ERROR  ;ALL INITIALLY UNIMPLEMENTED .ENDR ; LOAD THE VERB TABLE INITIALLY . = TLDIPT .REPT 21.+40. .WORD TLER18  ;ALL INITIALLY ERRORS .ENDR .CS%CII 33 AND ECHO <$> TTIAL1: .IFZ KBLC-2 TSTB TTSTS3(R1) ;ALLOWING 175,176 AS CHARACTERS? BPL TTIALT  ;NOPE TST (R5)+  ;IF YES, THEN TAKE NORMAL EXIT RTS PC  ;EXIT ALREADY .ENDC TTIALT: MOV #33,R2  ;ALL ALTMODES ARE 033 TST (R5)+  ;MAKE IT LOOK LIKE AN ALMOST NORMAL CHAR BIT #HAFDUP,(R1) ;IN HALF DUPLEX MODE? BEQ TTICR3  ;IF NOT, THEN NORMAL JSR PC,CHOUT ;IF SO, THEN ECHO A "$" MOV #33,R2  ;AND RESTORE THE ALTMODE VALUE BR TTICR3  ;AND T& SET AT COMPLETION DSQDMA = 6  ;DISK SEGMENT NUMBER DSQCMA =10  ;CORE ADDRESS OF THE TRANSFER DSQCNT =12  ;SEGMENT COUNT OF THE TRANSFER DSQUNT =13  ;FILE UNIT NUMBER DSQFUN =14  ;OPERATION FUNCTION CODE DSQFAR =15  ;QUEUE FAIRNESS OR PRIORITY DSQMSC =16  ;FCB POINTER DSQPDA =20  ;PHYSICAL DISK ADDRESS DSQOPT =22  ;DISK OPTIMIZATION WORD DSQOUN =24  ;PHYSICAL DISK UNIT NUMBER * 2 ; DISK FUNCTION CODES, TO BE LOADED INTO DSQFUN RFUN =105  ;READ DISK WFUN =' $ .  c, ,  mf. Q$  w w.  ! L" ~&yf. w 6    .*  •? 4  B fZ4&fZ.P  0 w ! B ! *Iq4s y"fZ(~.v w 6 wE2w 2  (ECT TB ORG000 = .  ;THIS ORIGIN MUST BE 0!!! .GLOBL EMTBL,IOHAND,UNTCNT,UNTCNE,UNTCLU ;INTERNAL .GLOBL XCRASH,AUTORE,XCRSEG,RELOAD,XCRSEX .GLOBL L3QTBL,TTSLST,HERZ10,DEVCLC,CORTBL .GLOBL NULINE,TIMDEV,TTILST,TTOLST,NAME1 .GLOBL DEVCNT,DEVPTR,DEVTBL,DEVEND,JOBMX2 .GLOBL CLRSRT,CLREND,FRESML,FREBIG,DP0UNT .GLOBL IOFLG,SIZES,DEVTBE,AUTOBR,LPTDEV,LPSTS .GLOBL SATPTR,SATSIZ,SATSRT,SATCNT,MAXUN2 .GLOBL DSDONQ,TTICLK,JOBCLK,TTYCLK,NAME2 .GLOBL CLOKIN,LCS.1,LCS.2)HE REST OF THE STUFF TOO ;HANDLE LINE-FEED ON INPUT---------------------------------------------- TTILF: BIT #TAPE+NOECHO,(R1) ;IN TAPE MODE NOW? BNE TTIC11   ;YES-STORE THE LF, BUT DON'T ECHO BR TTILF1   ;NO- STORE IT AND ECHO CR-LF TOO TTICR6: TSTB FIPNLG   ;LOGINS PERMITTED? BNE TTICR7   ;IF NOT, THEN SAY SO BUFFER, GETSML   ;GET A BUFFER TO BE THE IO BLOCK BVS TTICR7 MOV R4,-(SP)  ;SAVE THE BUFFER ADDRESS BUFFER, GETSML   ;AND GET ANOTHER FOR*103  ;WRITE DISK ;DIRECTORY BLOCK FORMAT PATTERNS ;THE BELOW SYMBOLS ARE USED TO ACCESS THE VARIOUS ;ITEMS IN A DIRECTORY BLOCK. THIS SECTION ALSO ;DEFINES THE FORMATS OF VARIOUS ITEMS IN THE BLOCKS. ;ALL-ALL-ALL-ADDRESSING OF ITEMS IN DIRECTORY BLOCKS ; IS TO BE DONE WITH THESE SYMBOLS ; (PLEASE) ;MFD NAME BLOCK ULNK = 0   ;LINK TO NEXT NAME, 0 IS END OF CHAIN UNAM = 2   ;3 WORD FIELD, PPN(1) - PASSWORD (2,3) USTAT =10   ;STATUS BYTE UPROT =1+  9. 2 `w lL"". e m  l  . m  w w v w  $v i. | !   | $.4 mC 2 2  w N/}aN.Z `  + *  ,,LCS.3,XXXDEV .GLOBL JCUN0,JCUN2,JCLAST,SCHEDX .GLOBL L3QUE,FIQUE,DTRWQ,DTDRQ,DTSQ,DT.IND .GLOBL MTAQUE,JOBTBL,JBSTAT,JBWAIT,XCRSEC .IFNZ RF11!RCRK11!RCRP11 .GLOBL DSKQUF,DSKGO .ENDC .IFNZ RK11 .GLOBL DSKQDK,RKREST,DSKGDK .ENDC .GLOBL LPTDDB,PTRDDB,PTPDDB,CDRDDB,CDRBUF .GLOBL CRTIMR,LPTIMR,LPTUPC,JBCLOK,TIMTTY .GLOBL XXXDDB,XXXSER .GLOBL JOBMAX,KL11,TTYDDB,SYSVEL,SYSVEN ;CONFIG .GLOBL DC11,SMLBUF,BIGBUF,TC11,CORMAX .GLOBL FIP,USERIO,DIRAC,FILS- DATA BLOCK BVC TTICR8 MOV (SP)+,R4 BUFFER, RETSML BR TTICR7 TTICR8: MOV R4,-(R3)  ;HAVE TWO BLOCKS--LINK TO JOBTBL MOV (SP)+,(R4)  ;AND LINK I/O BLOCK TO DATA BLOCK MOV R1,@(R4)+  ;LINK TTY DDB TO IO BLOCK MOV #JFNOPR+JFIRST,(R4)+ ;INITIALIZE JOB FLAGS TST (R4)+ MOV #USRSP,(R4) ADD #JDSIZ0-JDSP,R4  ;NOW SKIP TO SIZE IN DATA BLOCK MOV (PC)+,(R4)+  ;AND INITIALIZE TO 2K .BYTE 2,2 SUB #JOBTBL,R3  ;NOW GET JOB INDEX .1   ;PROTECTION BYTE UACNT =12   ;ACCESS COUNT UAA =14   ;ACCOUNT BLOCK LINK UAR =16   ;UFD SEGMENT START, 0 IS NO UFD ;MFD ACCOUNT BLOCK ;ULNK = 0   ;+1 TO SIGNAL BLOCK IN USE, -2 IF BAD BLOCK MCPU = 2   ;ACCUM CPU TIME FOR ACCT MCON = 4   ;ACCUM CONNECT TIME MKCT = 6   ;ACCUM KILO CORE TICKS MDVT =10   ;ACCUM DEVICE TIME MLOGI =12   ;# OF LOGINS MLOGO =13   ;# OF LOGOUTS MDPER =14   ;TOTAL SEGMENTS PERMITTED TO OWN UCLUS =16   ;UFD CLUS/mV wfkua5.qh%@,8^@l u:@G.o %@ S(@%@%@(@Q.`@Ps@Vs@^s@j@.`@`@L"@y@'@.t'@t'K@t'K@t:b@t:u@.t:6@:(@:L@Q/x@ ;GET HIM OUT OF ANY I/O WAITS BY SETTING ALL STATUS BITS WE CAN TTICC: JSR R5,CLRBUF ;CLEAR INPUT BUFFER + DDINP+EP BIC #NOECHO+TAPE,(R1);GET HIM OUT OF TAPE MODE JSR PC,TTIC10 ;CLEAR OUTPUT BUFFER TOO BIS #JSALL,JBSTAT(R3) ;TRY VERY HARD TO START JOB MOV JOBTBL(R3),R3 ;GET JOB DATA ADDRESS BEQ TTICC1  ;IF NOT A JOB, FORGET ^C TST (R3)+  ;POINT TO JDFL6= 6   ;DATE OF CREATION UTC =10   ;TIME OF CREATION ; =12   ;UNUSED ; =14   ;UNUSED ;UCLUS =16   ;FILE CLUSTER SIZE ;UFD RETRIEVAL INFORMATION BLOCK (RIB) ;ULNK = 0   ;LINK TO NEXT RIB, 0 IS END OF CHAIN UENT = 2   ;ENTRY LIST BEGIN - 7 WORDS TOTAL ;    ;ENTRY CONTAINS CLUSTER START SEGMENT # ;    ;IF 0 THEN END OF LIST ;PROTECTION BYTE BIT ASSIGNMENTS (UPROT) UFD/MFD ;BIT 15(7) - 200 PRIVILEGE BIT, USED TO SET JFSYS ; " 14(67h( s!hz.kuahv hvH!hyؚhn yh, ;.yhyXhyah 1zh/}ah.E~Zh8 u~$hٯh4h4h4sh)w D pD    p$ W $  p( O (  p8 G8 J. p p p p pJ8.ENDC .IFNZ JCUNUM .GLOBL SCHJCU .ENDC ; DEFINE THE DDB'S ; FIRST A MACRO TO DEFINE DDB'S .MACR .DDB INDEX,STATUS,UNIT,A,B,C,D,E,F,G,H,I,J,K,L,M,N .BYTE INDEX,STATUS+0 ;INDEX - STATUS 0 .BYTE 0,UNIT+0 ;JOB - UNIT 2 .WORD 0  ;TIME  4 .BYTE A+0,B+0  ;HORZ - VERT 6 .WORD C+0  ;INPUT  10 .WORD D+0  ;  12 .WORD E+0  ;  14 .WORD F+0  ;  16 .WORD G+0  ;  20 .WORD H+0  ;OUTPUT  22 .WO9G IN JOB DATA TSTB (R3)  ;ALREADY PENDING ON CONTROL/C? BPL TTICC3  ;NOPE BIC #JFCCC,(R3) ;IF SO, THEN DISABLE PROGRAM TRAPPING TTICC3: BIS #JFCC+JFGO,(R3) ;SET CONTROL/C AND FORCED GO TTICC1: JSR R5,ASCOUT ;NOW TYPE THE <^C,CR,LF> + TTICCC BR TTICC2  ;AND NOW FINISH UP ;CHECK FOR FUNNY TTY CHARACTER ON INPUT OR OUTPUT ;FIRST CHECK TO SEE IF CHARACTER IS IS NORMAL RANGE ;IF NOT, SEE IF IT MATCHES WEIRDO LIST ;CALL JSR R5,TTSIVE ; .BYTE :) - 100 UNUSED ; " 13(5) - 040 WRITE PROTECT FROM WORLD ; " 12(4) - 020 READ " " " ; " 11(3) - 010 WRITE " " GROUP ; " 10(2) - 004 READ " " " ; " 9(1) - 002 WRITE " " SELF ; " 8(0) - 001 READ " " " ;STATUS BYTE BIT ASSIGNMENTS (USTAT) UFD/MFD ;BIT 7 - 200  MARKED FOR DELETE IF 1 ; " 6 - 100  FILE IF 0, MFD/UFD IF 1 ; " 5 - 040  NOT TO BE KILLED IF 1 ; " 4 - 020  NOT TO BE EXTENDED IF 1 ; " 3 - 010  FILE;B . p p p p pRL &. p p p p& pV .. p p p p p. b ~ b  pf  f pu p ppr ^ r R2 p pR  F. p pF p p p  n<RD I+0  ;  24 .WORD J+0  ;  26 .WORD K+0  ;  30 .WORD L+0  ;  32 .BYTE M+0,N+0  ;HORZ - VERT 34 .WORD 0  ;COUNT - ASGN 36 .ENDM ; THIS FIRST PART COVERS ANY AND ALL ".ASECT"S ; IT GOES FROM 000000 TO 'BOTTOM' (=005640) . = ORG000+BOTTOM ; TTY DDB'S UNITNO = 0 TTYDDB: .REPT KL11+1 .DDB TTYHND,0,224,72.+1,20,,,,,5.,,,,,5.,72.+1,UNITNO*2 UNITNO = UNITNO+1 .ENDR .REPT DC11+DL11E .DDB TTYHND,0,225,7=LOW,HIGH ;LIMITS TO PASS ; + ADDRESS OF WEIRDO LIST ; + ADDRESS-2 OF LIST OF ROUTINES TO HANDLE THESE ; ...   ;RETURN IF WEIRD ; ...   ;RETURN IF NORMAL ;ON ENTRY, R2=CHAR ;ON EXIT, R3,R4 ARE DESTROYED TTSIVE: CMPB R2,(R5)+ ;COMPARE WITH LOW LIMIT BLO TTS01  ;LESS THAN LOW; CHECK IT CMPB R2,(R5)+ ;COMPARE WITH HIGH LIMIT BHI TTS02  ;GREATER; CHECK IT TTS05: ADD #6,R5  ;NORMAL RETURN RTS R5  ;RETURN TTS01: INC R5  ;GET OVER ODD BYTE BOUNDRY T> ALREADY OPEN FOR UPDATE ; " 2 - 004  FILE ALREADY OPEN FOR WRITE ; " 1 - 002  MUST BE ZERO ; " 0 - 001  FILE IS 'OUT OF SAT' IF 1 ;FILE DIRECTORY LINK WORD FORMAT ;BITS 15-12  SEGMENT OFFSET WITHIN CLUSTER (0-17) ; " 11-9  CLUSTER NUMBER   (0-6) ; " 8-0  BLOCK START WITHIN SEGMENT (0-760) ;   (IN INCREMENTS OF 20) ; MONITOR AND SYSTEM CALLS OF NON-GLOBAL NATURE ; CALLS TO THE MONITOR BUFFER MANAGER BUFFER =000004  ;BUFFER ?  p pn  fJ@. pf p pJ p p@  z p  n. p pn p p p nh. p p p pn ph tHX. pt pH p pX pU ^s. p p p^ p p @2.+1,20,,,,,5.,,,,,5.,72.+1,UNITNO*2 UNITNO = UNITNO+1 .ENDR .REPT JCUNUM .DDB TTYHND,100,224,72.+1,20,,,,,5.,,,,,5.,72.+1,UNITNO*2 UNITNO = UNITNO+1 .ENDR ; DECTAPE DDB'S .IFNZ TC11 UNITNO = 0 DTADDB: .REPT TC11*2 .DDB DTAHND,,UNITNO,,,,,,,,,,UNITNO*3 UNITNO = UNITNO+1 .ENDR .ENDC ; LP11 DDB'S .IFNZ LP11 UNITNO = 0 LPTDDB: .REPT LP11 .DDB LPTHND,LPSTAT,UNITNO,LP11C+1,66.,,,,,,,ATS02: MOV (R5),R4  ;ADDRESS OF CHARACTER LIST TTS03: MOVB (R4)+,R3 ;GET CHARACTER FROM LIST BEQ TTS05  ;END OF LIST? CMPB R2,R3  ;NOT END; MATCH? BNE TTS03  ;NO; KEEP GOING SUB (R5)+,R4 ;POSITION IN LIST ASL R4  ;TIMES 2 ADD (R5)+,R4 ; +DSIPATCH ORIGIN JSR PC,@(R4)+ ;DISPATCH THRU TABLE RTS R5  ;AND GO HOME ;GET MOST RECENTLY STORED CHARACTER FROM INPUT BUFFER ;WORKS FROM THE OTHER END OF THE BUFFER, WHEN COMPARED WITH "FETCBMANAGER OP-CODE (IOT) ; ARGUMENT FORMS FOR "BUFFER" CALLS: GETBIG =100200  ;GET BIG, 256. WORD, BUFFER GETSML =000200  ;GET SMALL, 16. WORD, BUFFER RETBIG =100000  ;RETURN BIG BUFFER RETSML =000000  ;RETURN SMALL BUFFER ; CALLS TO THE MONITOR EMT HANDLER ;EMT ASSIGNMENTS-- CALFIP =104100  ;CALL FIP, WITH FIRQB ADDRESS IN R4 FIERR =104000  ;CALL FIERR, ERROR CODE IN LO 6 BITS .READ =104102  ;SERIAL READ .WRITE =104104  ;SERIAL WRITE .CORE =104106  ;CHANGE USC. p p p p p j  8. p pj p p p    p p$ $ f6 ,. p  pf p p6 p,i. p0. p p pp p0 p 8  p< 1<  NW* p p pN pF :F Xb+. pD,,,19.,LP11C+1,66. UNITNO = UNITNO+1 .ENDR .ENDC ; PAPER TAPE DDB'S .IFNZ PC11R PTRDDB: .DDB PTRHND,4,,,,,,,,6. .ENDC .IFNZ PC11P PTPDDB: .DDB PTPHND,2,,,,,,,,,,,,,6. .ENDC ; CARD READER DDB .IFNZ CR11 CDRDDB: .DDB CDRHND,4 .ENDC ; MAGTAPE DDB'S .IFNZ TM11 UNITNO = 0 MTADDB: .REPT TM11 .DDB MTAHND,,UNITNO UNITNO = UNITNO+1 .ENDR .EH" ;CALL ; JSR PC,TTGET ;R0=2*LINE,R1=DDB ADDRESS ; ... RETURN  ;R2=CHAR,R3=R4=?,V=1 IF NO CHARACTER TTGET: MOV DDINP+FP(R1),R3 ;FILL POINTER BEQ TTGE05  ;NO FILL POINTER- INDICATE NO CHARACTER MOV R3,R4  ;COPY POINTER FOR LATER USE MOV R1,R2  ;GET A MORE USEFUL DDB POINTER ADD #DDINP+FC,R2 ;LIKE ONE THAT POINTS TO FILL COUNT ADD (R2),R3  ;R3=BUFFER ADDRESS+FILL COUNT MOVB 40(R3),-(SP) ;LAST CHAR IN TO TOP OF STACK CMPB (SP),#15 ;NOT CR BEQ TTGET1FER CORE SIZE .LOCK =104110  ;LOCK USER IN CORE .DAR =104112  ;DIRECT ACCESS READ .DAW =104114  ;DIRECT ACCESS WRITE .WAIT =104116  ;GO INTO I/O WAIT .SLEEP =104120  ;SLEEP JOB FOR N SECONDS .KILL =104122  ;KILL JOB .MTSPC =104124  ;MAGTAPE SPECIAL FUNCTION ;FILE PROCESSOR DEFINITIONS R50BAS =006273  ;.BAS FILENAME EXTENSION, SOURCE R50BAC =006253  ;.BAC FILENAME EXTENSION, COMPILED R50TMP =077430  ;TEMP FILE EXTENSION - TMP R50SYS =0752GX p p p pb n qn H T 8. p pH pT p p " x x p| | XR* p p pX p 5  F pF   l` pl p` G  < p p %  <bu p< pb H  J pJ HENDC ; XX DEVICE DDB'S .IFNZ XXXX11 UNITNO = 0 XXXDDB: .REPT XXXX11 .DDB XXXHND,XXXSTS,UNITNO,XXXHOR,,,,,,XXINBC,,,,,XXOUBC,XXXHOR UNITNO = UNITNO+1 .ENDR .ENDC ; START OF THE CLEARED AREA CLRSRT = . ; FREE CORE FRESML: . = SMLBUF*32.+. FREBIG: . = BIGBUF*512.+. ; TABLE DEFINITIONS .MACR .TABLE NAME,WORDS NAME = . . = WORDS*2+. .ENDM ; HUNG DEVICE DETERMINATION DEVCLC = LP1I  ;STOP HERE CMPB (SP),#12 ;NOT LF BEQ TTGET1  ;STOP HERE CMPB (SP),#33 ;NOT ALT BEQ TTGET1  ;STOP HERE DEC (R2)  ;BACK UP FILL COUNT CMP (R2),#-37 ;WAS IT THE ONLY CHAR IN BUFFER? BNE TTGE09  ;NO SO WE'RE DONE CLR -(SP)  ;FOR USE IN SETTING FC LATER CMP -(R2),4(R2) ;WAS THIS THE ONLY BUFFER? BNE TTGE01  ;NO- WE'LL HAVE TO SEARCH THE EMPTY LIST CLR DDINP+EP(R1) ;YES-ZERO THE EMPTY POINTER CLR -(SP)  ;THIS WILL BE NEW FILL POINTER TTGE04J73  ;SYSTEM FILE EXTENSION - SYS ; DEFINED PPN'S PPN11 =1*256.+1 ;[1,1] - SYSTEM MANAGER PPN12 =1*256.+2 ;[1,2] - SYSTEM LIBRARY PPN01 =0*256.+1 ;[0,1] - SYSTEM FILES ; FILE PROCESSOR PARAMETERS FILSEG =512.  ;SIZE OF FILE SEGMENT IN BYTE ; LIST OF THE HANDELR INDEXES DSKHND = 0 TTYHND = 2 DTAHND = 4 LPTHND = 6 PTRHND =10 PTPHND =12 CDRHND =14 MTAHND =16 XXXHND =20 ; ARRAY HEADER DEFS FORCE = 40  ;FORCE I/O ARYIOB = 20  ;ARRAY IS FOR I/O K   p   d pd #   p    p2  2 % ppk. &*"$0w  ".&^ w 2w 5E w S( ``.L >5 U Uw @@!5`yVs(.rJ`JE >eL1+CR11 ; SYSTEM TABLES .TABLE JOBTBL,JOBMAX+2  ;JOB DATA ADDRESSES .TABLE JBSTAT,JOBMAX+1  ;JOB STATUS TABLE .TABLE JBWAIT,JOBMAX+1  ;JOB IO WAIT CONDITION TABLE .TABLE TTYCLK,NULINE+1  ;TTY TIMER TABLE .TABLE JOBCLK,JOBMAX+1  ;JOB TIMER TABLE .TABLE DEVCLK,DEVCLC  ;HUNG DEVICE TIMING .TABLE CORTBL,CORTBC+1  ;CORE ALLOCATION (1K'S) .TABLE NAME1,JOBMAX+1  ;PROGRAM NAME TABLE PART 1 .TABLE NAME2,JOBMAX+1  ;PROGRAM NAME TABLE PART 2 JBCLOK = JBSM: MOV (SP)+,(R2)+ ;SET FILL POINTER FROM STACK MOV (SP)+,(R2) ;SET FILL COUNT FROM STACK INC DDINP+BC(R1) ;UPDATE BUFFER COUNT BUFFER, RETSML  ;RETURN THE BUFFER TTGE09: MOVB (SP)+,R2 ;RETURN THE CHARACTER RTS PC  ;RETURN TTGE01: MOV DDINP+EP(R1),R3 ;START OF EMPTY CHAIN TTGE02: CMP R4,(R3)  ;NEXT TO LAST BUFFER? BEQ TTGE03  ; IF SO, ITS POINTER AND R4 AGREE MOV (R3),R3  ;NOPE, GO TO NEXT BUFFER BR TTGE02  ;AND KEEP LOOKING TTGE03: CLR (R3) N;SYSTEM DATA AREA ;FIXED STACK ORIGINS-------------------------------------------------- SYSTAK = 640  ;BOTTOM OF SYSTEM R6 STACK FISTAK = 1000  ;BOTTOM OF FIP STACK USRSP = 1000  ;BOTTOM OF USER (RELATIVE) STACK ;---------------------------------------------------------------------- ; CONDITIONALS ON WHETHER TB.P11 SEGMENT .IFDF HNGHND  ;ONLY TRUE IF TB.P11 .MACR WORD. Q .WORD Q .ENDM .MACR BYTE. Q .BYTE Q .ENDM .ENDC .IFNDOfff@&m &.&w De  C  C @m L (&.` $` a& $& .Bew  I t'K . wfa awpJ@`aEm ^s c.0ef&  C  C @`` T.V  Ha    ,hf{ hfX*.|!&&‰05PTAT-JOBCLK LPTIMR = DEVCLK CRTIMR = DEVCLK+DEVCLC+DEVCLC-1-1 ; QUEUES L3QUE: .WORD 0 FIQUE: .WORD 0 DSDONQ: .WORD 0 .IFNZ RF11!RCRK11!RCRP11 DSKQUF: .WORD 0 .ENDC .IFNZ RK11 RKREST: .WORD 0 DSKQDK: .WORD 0 DSKADK: .REPT RK11 .WORD 0 .ENDR .ENDC .IFNZ TC11 DTDRQ: .WORD 0 DTSQ: .WORD 0 DTRWQ: .WORD 0 DT.IND: .WORD 0 .ENDC .IFNZ TM11 MTAQUE: .WORD 0 .ENDC ; LIST OF THE SAT LISTS Q ;END THE CHAIN COM (SP)  ;CHANGE 0 TO -1 ON STACK MOV R3,-(SP) ;NEW FILL BUFFER ADDRESS BR TTGE04  ;DO THE BOOKKEEPING AND GET OUT TTGET1: TST (SP)+  ;DUMP STACK TTGE05: SEV   ;INDICATE NO CHARACTER RTS PC  ;RETURN ;HANDLE ^U TYPED BY USER------------------------------------------------ ;ECHO <^U,CR.LF> ;AND WIPE OUT INPUT BUFFER UP TILL LAST CR,LF,OR ALTMODE TTICU: BITB #TTDDT,TTSTS2(R1);SPECIAL MODE? BNE TTIR07  ;IF SO, THEN KRF HNGHND  ;TRUE IF NO TB.P11 .MACR WORD. Q .=.+2 .ENDM .MACR BYTE. Q .=.+1 .ENDM .ENDC .ASECT . = 2 CRASH: BYTE. 0   ;CRASH COUNTER TTYHCT: BYTE. 0   ;HUNG TTY COUNTER . = 44 IDATE: WORD. 0   ;INITIAL DATE ITIME: WORD. 0   ;INITIAL TIME . = FISTAK   ;ORIGIN AFTER STACKS ; FILE PROCESSOR BUFFER AREA FIPBUF = .   ;NON-RESIDENT CODE . = .+FILSEG  ;1 SEGMENT LONG FIBUF = .   ;DIRECTORY BUFFER . S@4 [g3$4{.NE4cc fE@   4. 4! W!I4%& E44&.@5  H EwA!  (s\q.!J aEE`nZ.:=37 TJ Ë .`5~ EEE [Ps^s .T ; SAT INTRENAL LOGICAL POINTER LIST SATPTR: .REPT RF11N+RK11+RP11 .WORD 0 .ENDR ; SAT BYTE SIZE LIST SATSIZ: .REPT RF11N+RK11+RP11 .WORD 0 .ENDR ; UNIT CLUSTER SIZE LIST AND ERROR COUNTERS UNTCLU: .REPT RF11N+RK11+RP11 .BYTE 0,0 .ENDR ; SAT STARTING SEGMENT LIST SATSRT: .REPT RF11N+RK11+RP11 .WORD 0 .ENDR ; COUNT OF FREE SEGMENTS IN SAT LIST SATCNT: .REPT RF11N+RK11+RP11 .WORD 0 .ENDR ; UNIT STATUEEP CHAR TTICU1: JSR PC,TTGET ;GET MOST RECENT CHARACTER BVC TTICU1  ;CONTINUE JSR R5,ASCOUT ;NOW ECHO <^U,CR,LF> + TTICUC TTIR01: RTS PC  ;AND RETURN ;HANDLE RUBOUT FROM TTY CONSOLE----------------------------------------- ;IGNORE IT IF IN TAPE MODE ;OTHERWISE ECHO CHARACTER TYPED ;UNLESS THERE'S NOTHING TO ECHO--THEN ECHO TTIRO: BIT #TAPE,(R1) ;TAPE MODE? BNE TTIR01  ;YES- IGNORE RUBOUT BITB #TTDDT,TTSTS2(R1);SPECIAL MODE? BEQ TTIR06  ;NOPE TTV= .+FILSEG  ;1 SEGMENT LONG FIBMAP = .-20   ;START OF MAP BLOCK FIBENT = .-16   ;START OF MAP ENTRIES FIBEND = .-1   ;LAST BYTE OF BUFFER SATBUF = .   ;SAT BUFFER . = .+FILSEG  ;1 SEGMENT LONG ; SYSTEM DIRTY DATA AREA FOR: ; MONITOR ; FILE PROCESSOR ; SAT PROCESSOR DATE: WORD. 0  ;DAY,MONTH,YEAR TIME: WORD. 0  ;MINUTES UNTIL MIDNIGHT (1440.) TIMSEC: BYTE. 60.  ;SECONDS UNTIL NEXT MINUTE (60.) TIMTIC: BYTE. 10.  ;SYSTEW/נ6 %@3 4& ԝԕ6&e.R l ! $  |fZ$C.! Jq" l u:fZfZ%K.T4@ >džfmc!4"]. r rH`  "L.DI aa@ `rV kaaF .jEd ^   EaXUS LIST ; WORD FORMAT: X YZC CCC CCC CCC CCC ; X=1 MEANS NOT MOUNTED ; Y=1 MEANS PRIVATE PACK ; Z=1 MEANS DISK LOCKED OUT UNTCNT: UNITNO = 0 DFUNIT: .IFNZ RF11 DF0UNT = UNITNO .WORD 0 UNITNO = UNITNO+1 .ENDC DKUNIT: .IFNZ RK11 DK0UNT = UNITNO .REPT RK11 .WORD 0 UNITNO = UNITNO+1 .ENDR .ENDC DPUNIT: DP0UNT = UNITNO MAXUNT = UNITNO-1 MAXUN2 = MAXUNT*2 UNTCNE = .-2 ; END OF CLEARED AREA CLREND = .-2 ; DEVICYIR07: TST (R5)+  ;MAKE NORMAL RTS PC  ;AND EXIT TTIR06: MOV #RUBOUT,R4 ;IS HE ALREADY IN RUBOUT MODE? .IFNZ KBRUB BIT R4,TTSTS2-1(R1) ;SEE IF SPECIAL RUBOUTS BEQ TTIR03  ;NOPE BIT #NOECHO,(R1) ;TYPING CONFIDENTIAL STUFF? BNE TTIR03  ;IF SO, THEN LET HIM HANDLE IT JSR PC,TTGET ;YES, SO GET BACK ONE BVS TTIR08  ;NO MORE, SO NOTHING BIT R2,#140  ;PRINTABLE? BEQ TTIR08  ;NOPE TTIR09: JSR R5,ASCOUT ;ELSE, DO THE SPECIAL RUBOUT + SPCRUB ZM TICKS UNTIL NEXT SECOND (10.) TIMCLK: BYTE. 6.  ;CLOCK TICKS UNTIL NEXT SYSTEM TICK (6.) NEXT: BYTE. 0  ;# OF JOB NEXT TO BE RUN JOB: BYTE. 0  ;# OF JOB RUNNING NOW (0 FOR NULJOB) SWAPF: BYTE. 0  ;# OF SWAPS PENDING -1 CORPTR: WORD. 0  ;INDEX FOR CORTBL ROUND ROBIN SCAN JOBPTR: WORD. 0  ;INDEX FOR JOBTBL ROUND ROBIN SCAN CORFOR: WORD. 0  ;INDEX FOR ROUND ROBIN FORCE SCAN CSRLN = 17.  ;# OF CONTEXT SWITCHED, RELOCATED ITEMS. JOBORG: WOR[ awQ$ $8.ȉ(@I aa@ -rVaa@ .!  ^a  (. @B` `D!!@aa@.`5 6aaE X.(H2 Hm@5D ">.NEc 5! E w  s\q(R.t \E UNIT NUMBER MAXIMUMS DEVCNT: + RF11N-1  ;DF0: + RK11-1  ;DK0: TO DKN: + RP11-1  ;DP0: TO DPN: + NULINE+1-1 ;KB0: TO KBN: + TC11*2-1 ;DT0: TO DTN: + LP11-1  ;LP0: TO LPN: + PC11R-1  ;PR0: + PC11P-1  ;PP0: + CR11-1  ;CR0: + TM11-1  ;MT0: TO MTN: .IFNZ XXXX11 + XXXX11-1 ;XX: .ENDC DEVPTR: + DFUNIT  ;RF DISK UNIT LIST + DKUNIT  ;RK DISK UNIT LIST + DPUNIT  ;RP DISK UNIT LIST + TTYDEV  ;KB U]ADD #2,DDHORZ(R1) ;AND CORRECT DDB COUNTER TTIR08: RTS PC  ;THATS ALL FOLKS SPCRUB: .BYTE 10,40,10,0 ;BACKSPACE, SPACE, BACKSPACE, NULL .NLIST .IFNZ RUBOUT/400-TTRUB .ERROR ^%YOU BLEW IT - TTRUB AND RUBOUT MUST MATCH% .ENDC .LIST .ENDC TTIR03: BIT R4,(R1)  ;IF NOT, ECHO A <\> FIRST BNE TTIR04  ;HE IS, SO DON'T BOTHER BIS R4,(R1)  ;PUT HIM IN RUBOUT MODE JSR R5,ASCOUT ;AND NOW THE <\> + TTBACK TTIR04: JSR PC,TTGET ;GET LAST CHARACTER TYPED ^D. 0  ;CSR0 ABSOLUTE ORIGIN OF IMPURE AREA R5RING: WORD. 0  ;CSR1 (CONTEXT SWITCHED RELOCATED #1) R1RING: WORD. 0  ;CSR2 SAVE R1 FOR LEX. ANAL SCTH: WORD. 0  ;CSR3 POINTER TO CURRENT TEXT HEADER SPTA: WORD. 0  ;CSR4  " " " TEXT AREA SPDA: WORD. 0  ;CSR5  " " " DATA AREA R1CORG: WORD. 0  ;CSR6 START OF USER STACK R6CORG: WORD. 0  ;CSR7 START OF SYSTEM STACK COSI: WORD. 0  ;TL CODE STACK INITIAL COSP: WORD. 0  ;" " _Ec wCfD eI8.02 f% REmI ID y. I q ITD C@ 1 IdI.aa@mH@Celly .     ӥ.2  a@aa@9  .XmpBB`aa@`$ $y.~!! `I`IJaa@m`NIT LIST + DTADEV  ;DT UNIT LIST + LPTDEV  ;LP UNIT LIST + PTRDEV  ;PR UNIT LIST + PTPDEV  ;PP UNIT LIST + CDRDEV  ;CR UNIT LIST + MTADEV  ;MT UNIT LIST .IFNZ XXXX11 + XXXDEV  ;XX UNIT LIST .ENDC ; TABLE OF DDB POINTERS DEVTBL: . = NULINE+1*2+. DEVTBE: . = TC11*2*2+. . = LP11*2+. . = PC11R*2+. . = PC11P*2+. . = CR11*2+. . = TM11*2+. . = XXXX11*2+. DEVEND = .-2 ; TABLE OF POINTERS TO DDB POINTER TABLES TTYDEV = DEVTBaBVS TTIR02  ;ANYTHING RETURNED? BIT #NOECHO,(R1) ;SHOULD WE TYPE CHARACTER? BNE TTIR01  ;NO--HE'S TYPING CONFIDENTIAL MATERIAL BR CHOUT  ;YES, ECHO IT ;OUTPUT THE CHARACTER IN R2 ;IF TTY IS BUSY, THEN BUFFER IT ;IF TTY IS IDLE, THEN JUST SHOOT IT OUT ;ALSO TAKES SPECIAL NOTE OF CR,LF,TAB,VT,AND FF ;R0=2*LINE,R1=DDB ADDRESS,R2=CHAR,R3 IS DESTROYED ;CALL JSR PC,CHOUT ; ... RETURN [C=1 IF IT DIDN'T GET ACCEPTED] CHOUTO: JSR R5,FREBUF ;IS THERE b " CURRENT POINTER COSL: WORD. 0  ;" " " LIMIT OPSI: WORD. 0  ;" OPERATOR " INITIAL OPSP: WORD. 0  ;" " " CURRENT POINTER OPSL: WORD. 0  ;" " " LIMIT OASI: WORD. 0  ;" OPERAND " INITIAL OASP: WORD. 0  ;" " " CURRENT POINTER OASL: WORD. 0  ;" " " LIMIT    ;THE ORDER JOBDA,JOBF,IOSTS,JOBTIM IS IMPORTANT JOBDA: WORD. 0  ;ADDRESS OF CURRENT JOB'S DATA BLOCK JOBF: WORD. 0  ;POINTER TO STAc!I$ v  .I$  I$ I$I$I$ .      j$%%%%&%.e   #  t'K%f.      @bb.<?e  L "&.b2 N7 7 7 4J  J.e<PmdL DTADEV = NULINE+1*2+TTYDEV LPTDEV = TC11*2*2+DTADEV PTRDEV = LP11*2+LPTDEV PTPDEV = PC11R*2+PTRDEV CDRDEV = PC11P*2+PTPDEV MTADEV = CR11*2+CDRDEV XXXDEV = TM11*2+MTADEV ; DECTAPE CONDITIONALS .IFZ TC11 ; DO DUMMY GLOBAL DEFINITIONS DT.IND = 0 DTSQ = 0 DTRWQ = 0 DTDRQ = 0 DTASER = AUTORH DTSYM = AUTORH DTAS15 = AUTORH BUFQ = AUTORH DTQCON = AUTORH DTWCON = AUTORH .GLOBL DTAS15 .ENDC ; MAGTAPE CONDITIONALeROOM TO DO THIS? .BYTE DDOUT+BC,2 ;CHECK OUTPUT CHAIN BCS CHO08  ;IF NOT, THEN SAY NO ROOM CHOUT: .IFNZ KBRUB  ;FOR SCOPES BITB #TTDCA,TTSTS2(R1);IF SO, INTO DIRECT ADDRESSING? BEQ CHNDCA  ;NOT NOW JMP TTODA0  ;UP TO Y-ADDRESS, SO NULL FILL .ENDC CHNDCA: JSR R5,TTSIVE ;MAGIC CHARACTER .BYTE 40  ;SMALLEST ASCII VALUE NORMAL BY DEFAULT .BYTE 177  ;HIGHEST ASCII VALUE + TTOCHL  ;WEIRD0 LIST + TTODSP-2 ;HANDLERS FOR WEIRDOS BR CHO02  ;FOUND OfTUS OF THAT JOB IOSTS: WORD. 0  ;POINTER TO JOB'S I/O STATUS JOBTIM: WORD. 0  ;# TICKS JOB HAS USED SINCE STARTING QUANT: WORD. 0  ;SCHEDULAR QUANTUM FREES: WORD. 0  ;POINTER TO START OF SMALL FREE BUFFER LIST WORD. 0  ;COUNT OF FREE SMALL BUFFERS FREEB: WORD. 0  ;POINTER TO START OF BIG FREE BUFFER LIST WORD. 0  ;COUNT OF FREE LARGE BUFFERS SWAPAR: WORD. 0  ;SWAP PARAMETER BLOCK WORD. 0  ;JOB # BEING SWAPPED WORD. QSWAP  geN 4a .4 Lm b .eL  l e4$:. < 6  2E  h. '",  ".F     " ).lw  0 נ נ S gxA|.נ   e4`נs hS .IFZ TM11 ; DO DUMMY GLOBAL DEFINITIONS MTAQUE = 0 MTASER = AUTORH MTSPC. = AUTORH MTACON = AUTORH MTADNE = AUTORH MTASET = AUTORH .GLOBL MTASET .ENDC ; XX DEVICE CONDITIONALS .IFZ XXXX11 XXXSER = AUTORH XXXDDB = 0 .ENDC ; LINE PRINTER CONDITIONALS .IFZ LP11 ; DO DUMMY GLOBAL DEFINITIONS LPTDDB = 0 LPTS10 = AUTORH LPTHNG = AUTORH LPTSER = AUTORH LPTGO = AUTORH .GLOBL LPTS10,LPTGO .ENDiNE CHO04: BIT R2,#140  ;PRINTABLE CHARACTER? BEQ CHO07  ;IF NOT, THEN USE IT BUT DON'T COUNT CHO05: DECB DDHORZ(R1) ;COUNT THE CHARACTER POSITION BNE CHO07  ;IF NOT AT THE END THEN CONTINUE MOV R2,-(SP) ;IF SO, THEN SAVE THE CHARACTER JSR PC,TTIR02 ;AND PRINT A CR/LF FIRST MOV (SP)+,R2 ;NOW GET BACK THAT CHARACTER BR CHO05  ;AND GO USE IT CHO01: JSR R5,STORE ;TTY BUSY, SO BUFFER CHARACTER + DDOUT+FP ;IN OUTPUT BUFFER BCC CHO06  ;IT FIT, SO UPDATE j;LEVEL 3 BIT TO SET ON COMPLETION WORD. 0  ;DISK SECTOR ADDRESS WORD. 0  ;CORE ADDRESS WORD. 0  ;SECTOR COUNT FOR OPERATION WORD. 0  ;FUNCTION (READ, WRITE) WORD. 0  ;CORTBL POINTER ASSOCIATED WITH SWAP WORD. 0  ;PHYSICAL DISK ADDRESS WORD. 0  ;OPTIMIZATION WORD WORD. 0  ;UNIT NUMBER TIME 2 ;BUFFER CONTROL AREA, FIBUF AND FIPBUF FIBPHS: WORD. 0  ;CURRENT SEGMENT IN FIBUF FIBSTA: BYTE. 0  ;BUFFER STATUS --- ORDER COUNTS k., ננ  4  L #  $$.4 | # w p . b e 2   Do %t'K.*e4l ?e4lh .P ! lJ w B$:(.vDBl` & &  !4 gxAo %n.w    lC ; PAPER TAPE CONDITIONALS .IFZ PC11R ; DO DUMMY GLOBAL DEFINITIONS PTRDDB = 0 PTRSER = AUTORH .ENDC .IFZ PC11P PTPDDB = 0 PTPSER = AUTORH .ENDC ; CARD READER CONDITIONALS .IFZ CR11 ; DO DUMMY GLOBAL DEFINITIONS CDRL3Q = AUTORH CDRDDB = 0 CDRHNG = AUTORH CDRBUF = 0 CDRSER = AUTORH .ENDC ; IO HANDLER TABLE IOHAND: .WORD FILSER .WORD TTYSER .IFNZ TC11 ! LP11 ! PC11R ! PC11P ! CR11 ! TM11 ! XmPOSITION CHO08: RTS PC  ;IT DIDN'T FIT, RETURN CHO07: CHO03: .IFNZ KBPRTY BIC #-177-1,R2 ;CLEAR ALL BUT GOOD BITS MOV R2,R3  ;THEN COPY THE CHARACTER .IFZ KBPRTY-1 ;BELOW IS FOR EVEN PARITY BR PARTY0  ;DO EVEN PARITY .ENDC PARTY1: ADD #200,R2  ;ACCUMULATE PARITY BIT PARTY0: ASR R3  ;CHECK FOR A BIT ON BCS PARTY1  ;IF ON, THEN FLIP PARITY BIT BNE PARTY0  ;IF MORE BITS, THEN CONTINUE .ENDC MOV TTOLST(R0),R3 ;GET ADDRESSn--- FIBUNT: BYTE. 0  ;CURRENT DISK UNIT --- ORDER COUNTS --- FIPSEG: BYTE. 0  ;SEGMENT CURRENTLY IN FIPBUF, UNIT 0 ASSUMED ;BUFFER CONTROL AREA, STABUF THE SAT BUFFER SATUNT: BYTE. 0  ;CURRENT SAT UNIT SATSEG: WORD. 0  ;CURRENT PHYSICAL SEGMENT OF SAT SATMOD: BYTE. 0  ;NON-0 IF SAT NEEDS WRITING ;HANDY USER FACTS ; ***** ORDER COUNTS FOR NEXT THREE ITEMS ***** FIPRIV: BYTE. 0  ;NON-0 IF NOT PRIVILEGED, 0 IF SO FIUSER: WORD. 0  ;PPN OF USER CURRENTLY IN FIP FIo :(Q/x fZ$.w&wwW" 5 /.C eDJD o2 p"2S. ` 5@ l7.4    НЕ f.Z  w l`e4 . 2  Fȥȥ .ȥ=ȥoȥ . 0  . ,2  R/ . pXXX11 .WORD DTASER .ENDC .IFNZ  LP11 ! PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .WORD LPTSER .ENDC .IFNZ  PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .WORD PTRSER .ENDC .IFNZ  PC11P ! CR11 ! TM11 ! XXXX11 .WORD PTPSER .ENDC .IFNZ  CR11 ! TM11 ! XXXX11 .WORD CDRSER .ENDC .IFNZ  TM11 ! XXXX11 .WORD MTASER .ENDC .IFNZ q OF XMITER STATUS REGISTER BIT (R3)+,#100 ;ACTIVE? BNE CHO01  ;IF SO, THEN WE MUST BUFFER CHARACTER MOVB R2,(R3)  ;OUTPUT THE CHARACTER BIS #100,-(R3) ;ENABLE THE INTERRUPT CHO06: CHO02: +CLC ! CLV  ;REPORT GOODNESS RTS PC  ;RETURN TTIR02: JSR R5,ASCOUT ;OUTPUT CR,LF + CRLF0  ;THE STRING RTS PC  ;RETURN TTOT05: DECB DDHORZ(R1) ;CORRECT THE POSITION BNE CHO02  ;IF NOT AT END THEN RETURN MOVB DDHORC(R1),DDHORZ(R1);ELSE RESET POSITION BR rJBDA: WORD. 0  ;POINTER TO CURRENT FIP USERS JOB DATA AREA ;COMMON ITEMS NEEDED FOR FILE PROCESSOR OPERATIONS FIPUNT: BYTE. 0  ;DISK UNIT --- ORDER COUNTS --- FIPGEN: BYTE. 0  ;GENERIC MODE --- ORDER COUNTS --- FIPCLU: WORD. 0  ;FILE CLUSTER SIZE FIPMUC: WORD. 0  ;UFD/MFD CLUSTER SIZE ;FILE PROCESSOR OVERHEAD DATA AREA FIPSP: WORD. 0  ;VALUE OF SP AFORE FIP STOPS FIPR6: WORD. 0  ;VALUE OF SP AFTER FIP STARTS I: WORD. 0  ;BLOCK OFFSET OF LINK **ORDER** J: sllm  Dŀ.     ȕ  .  33  -$. $.> BbbbbeM .d @ 4' 6L3 62 [46$6. '$wB ^s. J bb3 '$V( wfS fZ". Nbbt XXXX11 .WORD XXXSER .ENDC ; IO BUFFER SIZES SIZES: .WORD 512. ;DISK .WORD 128. ;KB: .IFNZ TC11 ! LP11 ! PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .WORD 510. ;DT: .ENDC .IFNZ  LP11 ! PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .WORD 128. ;LP: .ENDC .IFNZ  PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .WORD 128. ;PR: .ENDC .IFNZ  PC11P ! CR11 ! TM11 ! XXXX11 .WORD 128. ;PP: .ENDC .IFNZ  uCHO02  ;AND EXIT ;HANDLE TABS ON OUTPUT TTOTAB: TSTB TTSTS2(R1) ;TAB OR NO TAB BPL TTOT04  ;HARDWARE TAB SO DO IT MOV #040,R2  ;SOFTWARE TAB SO CHANGE TO SPACES JSR R5,TABBER ;AND DO THE TABBING + CHO04  ;TO THIS OUTPUT ROUTINE RTS PC  ;AND EXIT TTOT04: JSR R5,TABBER ;SET THE POSITION WITH + TTOT05  ;A DUMMY ROUTINE .IFNZ KB2741 ! KBFILL ! KBRUB TTOCU9: MOV #1,-(SP) ;SET TAB FILL FACTOR .ENDC TTOT02: .IFZ KB2741 ! KBvBYTE. 0  ;SEGMENT OFFSET OF LINK **ORDER** K: BYTE. 0  ;CLUSTER NUMBER OF LINK **ORDER** ; DISK REQUEST BLOCK FORM FIR INTERNAL FIP FIPAR: WORD. 0  ;QUEUE LINK WORD FIJOB: WORD. 0  ;FIP JOB NUMBER WORD. QFIP  ;L3 QUEUE TASK BITS WORD. 0  ;DISK ADDRESS WORD. 0  ;CORE ADDRESS FICNT: WORD. 1  ;COUNT AND UNIT WORD. 0  ;FUNCTION WORD. 0  ;MISC PASSED WORD WORD. 0  ;PHYSICAL DISK ADDRESS WORD. 0  ;DISK OPTIMIZATION wfffEf7.    ӝӕ| &." "K H w E&y gxAn.H a2 @w  &.n 4*w araR ,8^ . `Baa`$ `f M. 4`4` AAcB E V5`.  `Ec  B5 AEbB! E:. Em EcAAlB 5` x CR11 ! TM11 ! XXXX11 .WORD 82. ;CR: .ENDC .IFNZ  TM11 ! XXXX11 .WORD 512. ;MT: .ENDC .IFNZ  XXXX11 .WORD XXXSIZ ;XX: .ENDC ; IO FLAGS AND MAX LENS IOFLG: .BYTE ARYIOB!0 ;DISK .BYTE 14.*18.+1 .BYTE ARYIOB!FORCE ;KB: .BYTE 0  ;SPECIAL .IFNZ TC11 ! LP11 ! PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .BYTE ARYIOB!0 ;DT: .BYTE 14.*18.+1 yFILL ! KBRUB BR CHO07  ;IF NO FILLING THEN SEND CHARACTER .ENDC .IFNZ KB2741 ! KBFILL ! KBRUB TTOCU1: JSR PC,CHO07 ;IF FILLING SEND CHARACTER MOVB TTSTS3(R1),R2 ;AND GET THE FILL COUNT BIC #-7-1,R2 ;CLEAR OFF THE EXTRA BITS BEQ TTOVT2  ;IF FILL=0 THEN EXIT NOW TTOT09: DEC R2  ;COUNT DOWN BEQ TTIME1  ;DONE (COUNT IS ON STACK) ASL (SP)  ;INCREASE FILL COUNT BR TTOT09  ;AND LOOP... .ENDC ;HANDLE FORM FEEDS ON OUTPUT TTOFF: .IFNZ KBFILL ! KB27zWORD. 0  ;PHYSICAL DISK UNIT * 2 ; SAT LIST AND LOGIN CONTROL STATUS GETCLS: BYTE. 1 BYTE. 2 BYTE. 4 BYTE. 10 BYTE. 20 BYTE. 40 BYTE. 100 BYTE. 200 BYTE. 0 FIPNLG: BYTE. 0  ;NON-0 FOR NO LOGINS ; BASES FOR SYSTEM FILE ON UNIT 0 OVBASE: WORD. 0  ;OVERLAY FILE BASE ERBASE: WORD. 0  ;ERROR MESSAGE FILE BASE SWBASE: WORD. 0  ;SWAP AREA DISK FILE BASE BFBASE: WORD. 0  ;BUFFER FILE B{5`}., CmCa`5  .R j  .o2 "2.x  @ eD& a2  Bx8". 2 2 < d%  :L:LM. 6 B  F ,  6. e & e . @ P @ 6'"&6.6 w |.ENDC .IFNZ  LP11 ! PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .BYTE ARYIOB!FORCE ;LP: .BYTE 0  ;SPECIAL .ENDC .IFNZ  PC11R ! PC11P ! CR11 ! TM11 ! XXXX11 .BYTE ARYIOB!FORCE ;PR: .BYTE 14.*9.+1 .ENDC .IFNZ  PC11P ! CR11 ! TM11 ! XXXX11 .BYTE ARYIOB!FORCE ;PP: .BYTE 14.*9.+1 .ENDC .IFNZ  CR11 ! TM11 ! XXXX11 .BYTE ARYIOB!FORCE ;CR: .BYTE 14.*5.+1 .ENDC .IFNZ  }41 !KBRUB MOV #9.,-(SP) ;SET THE FORM FEED FACTOR BR TTOVT1  ;AND CONTINUE .ENDC ;HANDLE VERTICAL TABS ON OUTPUT TTOVT: .IFNZ KBRUB BITB #TTRUB,TTSTS2(R1);SCOPE? BNE TTODA0  ;YES - THEN CURSOR CONTROL .ENDC .IFNZ KBFILL ! KB2741 ! KBRUB MOV #5.,-(SP) ;SET THE VT FACTOR .ENDC TTOVT1: BITB #TT35,TTSTS2(R1);HARD OR SOFT? BNE TTOT02  ;IF HARD, THEN DO IT JSR R5,ASCOUT ;IF SOFT, THEN SEND LINE FEEDS + LINES4  ;4 LINE FEEDS .IFZ KBFILL ! KB2~ASE ; DEVICE NAME TABLE DEVNAM: WORD. "DF  ;RF DISK WORD. "DK  ;RK DISK WORD. "DP  ;RP DISK DEVNKB: WORD. "KB  ;TTY KEYBOARD WORD. "DT  ;DECTAPE WORD. "LP  ;LINE PRINTER WORD. "PR  ;PAPER TAPE READER WORD. "PP  ;PAPER TAPE PUNCH WORD. "CR  ;CARD READER WORD. "MT  ;MAGTAPE WORD. XXXXXX  ;XX DEVICE WORD. 0  ;TABLE'S END UPDATE: WORD. 0  ;FILLED TO UPNOP OR UPDAT0 PRINU0: WORD. 0  ;FILLED IN LATER PRINU1: WOCCl  2`):(2.\ &TGww! w7jsZq(. `    EUE0. U " ӝӕPSH Z&6N(6[.  de  ?6  "6. e @Ҕ $e .e  ww Cl& #:(.@ TM11 ! XXXX11 .BYTE ARYIOB!0 ;MT: .BYTE 14.*18.+1 .ENDC .IFNZ  XXXX11 .IFNZ XXXFRC  ;XX: .BYTE ARYIOB!FORCE .ENDC .IFZ XXXFRC .BYTE ARYIOB!0 .ENDC .IFNZ XXXHOR .BYTE 0 .ENDC .IFZ XXXHOR UNITNO = XXXSIZ/14. .IFG UNITNO-18. UNITNO = 18. .ENDC UNITNO = UNITNO*14.+1 .BYTE UNITNO .ENDC .ENDC ; EMT TABLE EMTBL: .WORD FIP ;CALFIP .WORD741 ! KBRUB RTS PC .ENDC .IFNZ KBFILL ! KB2741 ! KBRUB BR TTOVT2 .ENDC TTOCR: .IFNZ KBFILL ! KBLA30 ! KB2741 ! KBRUB JSR PC,CHO07 ;SEND OUT THE .IFNZ KBRUB BITB #TTRUB,TTSTS2(R1);SCOPE TYPE? BNE TTOCR6  ;YES, NO NULL FILL EVER .ENDC .ENDC .IFZ KBLA30 ! KB2741 .IFNZ KBFILL ! KBRUB MOVB TTSTS3(R1),R2 ;GET THE FILL COUNT BIC #-7-1,R2 ;CLEAR THE EXTRA BITS BNE TTOCR4  ;IF FILL THEN SEND IT MOVB DDHORC(R1),DRD. 0  ;THIS ALSO ; FILE PROCESSOR RESIDENT FUNCTION CONTROL TABLE ; THIS TABLE GIVES THE LOCATION AND RESIDENCE OF THE FILE PROCESSOR ; FUNCTIONS. IT IS ADDRESSED BY THE FIRQB FUNCTION FIELD (FQFUN). ; LO BYTE OF THE ENTRY GIVES THE LOGICAL SEGMENT THAT THE CODE LIVES ; IN THE OVERLAY FILE. IS THE OFFICIAL NAME. ; HI BYTE OF AN ENTRY GIVES THE STARTING ADDRESS OF THE FUNCTION ; WITHIN THE SEGMENT. THE OFFSET IS IN WORDS (BYTES/2). FIDSP =.  ;THE FIRΔ rBaar@ gxA"+.f'Hmw BE$:(. &   #.ee e w  :(" gxA.2׬5"4w aw 24:($:(.& & D&&  .$E0  $  USERIO ;.READ .WORD USERIO ;.WRITE .WORD CORE. ;.CORE .WORD ULOCK ;.LOCK .WORD DIRAC ;.DAR .WORD DIRAC ;.DAW .WORD IOWAIT ;.WAIT .WORD SLEEP. ;.SLEEP .WORD KILL. ;.KILL .IFNZ TM11 .WORD MTSPC. ;.MTSPC .ENDC ; LEVEL 3 SERVICE DISPATCH TABLE L3QTBL: .WORD TIMERS .WORD FIPRET SCHEDX: .IFZ JCUNUM .WORD SCHED .ENDC .IFNZ JCUNUM .WORD SCHJCU .ENDC .WORD SWPRET .WORD FILRET .WORD DTSYM .WORD BUFQ .WORD BUFDHORZ(R1);ELSE CORRECT COUNTER RTS PC  ;AND EXIT .ENDC .ENDC .IFNZ KBLA30 TTOCR1: MOVB #7,-(SP) ;LA30 FILL IS THE ONLY 7 FILL BICB TTSTS3(R1),(SP)+;DID THE BIC CLEAR ALL 3 BITS? BNE TTOCR5  ;NOPE MOV #20.,-(SP) ;IF SO BREAK IS ON CHAR #20. .ENDC .IFNZ KBLA30 ! KB2741 TTOCR2: MOVB DDHORC(R1),R2 ;GET MAX POSITION SUB DDHORZ(R1),R2 ;AND FIND CURRENT POSITION BIC #-377-1,R2 ;CLEAR OUT THE JUNK BITS CMP R2,(SP)+ ;FAR ENOUGH? BLO TTOCR3  ;YES (<ST TABLE ENTRY ADDRESS . = FIDSP+.FQ ; PUSH-POP TABLE AREA DEFINED TABL2 = . . = 256.*2+. ;THERE ARE 256. PP'S BOTTRO = .-1&177740+40 ;BOTTOM FOR RUN-ONLY RSTS DOTABV = 46  ;VERB TABLE OFFSET TLDIPT = .  ;ED AND TR VERBS . = 21.*2+. TLDIPB = .  ;TR VERBS . = 40.*2+. TLDIPL = .-2-TLDIPT+DOTABV BOTTOM = .-1&177740+40 ;MAKE A NICE ORIGIN .LIST .NLIST .TITLE SYIO.P11 HARDWARE IO DEFINITIONS ;COPYRIGHT 1971,1972 BY .Je`.p  Հ Č.f,TVaa@ O`aaf :.B V V3 T ` V7.b󄼉e 2 f,Af"&.TVaa@  &aa@ [g3&[g3..V     U" %hfX*[g3" z%,SMQ .IFNZ TC11 ! CR11 ! TM11 .WORD DTQCON .WORD DTWCON .ENDC .IFNZ CR11 ! TM11 .WORD CDRL3Q .ENDC .IFNZ TM11 .WORD MTACON .WORD MTADNE .ENDC ; TTY TERMINAL CHARACTERISTICS LIST (DC11'S AND DL11E'S ONLY) TTSLST = KL11+1*8. TTSLST = .-TTSLST ; INDEX VIA TTSLST+LINE NUMBER*8. ; "TTSLST" IS BUILT AS FOLLOWS: ; WORD 1 DC11 OR DL11E INPUT CSR ; WORD 2 DC11 OR DL11E OUTPUT CSR ; BYTE 3.0 TTSTS1  STATUS 1 BITS ; BYTE 320.) ADD #40.,R2  ;IF >=20. THEN ADD 40. AND ASR R2  ;DIVIDE ASR R2  ;BY 16. ASR R2  ;FOR FILL TTOCR3: ASR R2  ;OR 2 IF <20. .ENDC .IFNZ KBFILL ! KBLA30 ! KB2741 ! KBRUB TTOCR4: MOVB DDHORC(R1),DDHORZ(R1);RESET INTERNAL COUNTER TTIMER: MOV R2,-(SP) ;SAVE THE NULL COUNT TTIME1: CLR R2  ;SEND NULLS JSR PC,CHO07 ;NOW SEND 1 NULL DEC (SP)  ;MORE? BGT TTIME1  ;YEP TTOVT2: TST (SP)+  ;NO, DUMP STACK RTS PC  ;AND EXIT .ENDC DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;VERSION: 04A  EDIT: 09 ;DATE:  26-MAY-72 BY: MHB ; RC DISK DEFINITIONS RCCS =177446  ;CONTROL STATUS RCDA =177442  ;DISK ADDRESS RCBA =177452  ;BUS ADDRESS ; RF DISK DEFINITIONS RFDAE =177470  ;EXTENDED DISK ADDRESS RFCS =177460  ;CONTROL STATUS RFCLR =000400  ;CLEAR CONTROL STATUS ; RK DISK DEFINITIONS RKDA =177412  ;DISK ADDRESS RKER =177402  ;ERROR REGISTER RKCS =177404  ;CONTROL STATUS ; RP DISK DE.TUX! aa@maaBm  X&9.z "I "X X$([g2.aa@m  w* e  [g3 t'K$~#DT1:IN/E PASS 2 LINKw,d~-11 V007A PASS 1 #OV NAME OF INSTALLATION: ,Z}} ENTER THE AC POWER FREQUENCY, IN HERTZ. THE ONLY RESPONSES ARE '60W,' AND '50'; THE DEFAULT IS '60'. ENTEỦR YOUR FREQUENCY:  AC FREQUENCY: , IS YOUR CLOCK A KW11L (STAND,ARD LINE FREQUENCY CLOCK) OR A KW11P ,D(PROGRAMMABLE CLOCK). ANSWER 'L' FOR ,jA KW11L OR 'P' FOR A KW11P. THE DEFAU(,LT IS A KW11L. YOURS IS: CLOC/,K: | IF YOU WISH LINE PRINTER,܊ LISTINGS OF THE RSTS ASSEMBLIES THATn, ARE TO FOLLOW, THEN ANSWER WITH A 'Y,('; ELSE ANSWER WITH 'N' FOR NO LISTINGo,NS. THE DEFAULT IS NO LISTINGS. YOUR AX,tNSWER:  LP LISTINGS:  , THERE ARE TWO OPTIONAL MODULES THAT ,YOU CAN INCLUDE AND SAVE ON YOUR RSTS, SYSTEM DISK FOR LATER CALLING. THEY , ARE: DSKINT RSTS V4A DISK INITIALIZATX,2ION PROGRAM INIT IS USED TO CREATE R,XSTS V4A NON-SYSTEM DISKS. ROLLIN RO,~LLIN-ROLLOUT DISK+DECTAPE+MAGTAPE COPYK, ROLLIN IS USED TO DUMP OR LOAD DISKA,ʌS TO OR FROM EITHER DECTAPE OR MAGTA,PE. ANSWER THE QUESTION ABOUT THE MO,DULE'S NAME WITH EITHER 'Y' TO INCLUD, XON: D IF YOU WANT THE TERMS,dINALS THAT CALL IN TO YOUR DATASET TY,PE INTERFACES TO GET AN AUTOMATIC ANSW,ER MESSAGE, THEN ANSWER THIS QUESTION,֖ WITH 'Y'; ELSE ANSWER 'N' AND THEY WY,ILL GET NO MESSAGE. THE DEFAULT IS NO'" MESSAGE. DO YOU WANT MESSAGES: ,D AUTO ANSWER: , IF YOU,j HAVE ANY SCOPE TYPE TERMINALS, THEN A,NSWER QUESTION WITH 'Y'; ELSE ANSWER ,'N' AND YOU WILL NOT HAVE THE TERMINA,ܗL SERVICE SUPPORT FOR SCOPE TYPE TERM4,INALS. THE DEFAULT IS NO. SCOPE SUPPOR$(T: SCOPES: ,>J THIS MULTIPLE CHOICE QUESTIO ,dN IS ABOUT PARITY GENERATION FOR TERM,INALS. YOUR ANSWER AFFECTS ALL TERMIN,ALS: '1' NO PARITY GENERATION (8 BITS^,֘ SENDABLE) '2' EVEN PARITY GENERATED [, '3' ODD PARITY GENERATED THE DEFAULT," IS NO PARITY GENERATION. YOUR CHOICE:H PARITY: o,\WW IF YOU DON'T HAVE THE RF11 2,56K FIXED HEAD DISK, THEN ANSWER WITH7, A '0'. IF YOU DO HAVE THE RF11 DISK, ,Ι THEN IT WILL BE YOUR SYSTEM DISK, AND, ANSWER WITH THE NUMBER OF RS11 256K ,PLATTERS THAT ARE ON THE RF11 CONTROLW,@(1 TO 8). THE DEFAULT IS AN ANSWER OF,f '1' MEANING RF11 AS SYSTEM DISK AND ,1 RS11 256K PLATTER ON THE RF11. YOUR |ANSWER: o RF11: ,̚ IF YOU HAVE THE RK11 CARTRID,GE DISK CONTROL ON YOUR SYSTEM, THEN l,ANSWER WITH THE NUMBER OF RK03 PLUS Rh,>K05 DRIVES THAT YOU HAVE(1 TO 8). IF Y,dOU DON'T HAVE THE RK11 ANSWER WITH A ,0. THE DEFAULT IS AN ANSWER OF 0. YOU#R ANSWER IS: RK11: ,ΛEE SINCE YOU SAID THAT YOU DON',T HAVE AN RF11 FIXED HEAD DISK AND YO$,U DO HAVE THE RK11 DISK, I AM ASKING I,@F YOU HAVE THE RC11 64K FIXED HEAD DI,fSK CONTROL FOR USE AS A SWAPPING AND 6,OVERLAY DEVICE. IF YOU DO, THEN ANSWER, WITH THE NUMBER OF RS64 64K PLATTERS,؜ ON THE RC11(1 TO 4); ELSE ANSWER 0 F#OR NO RC11. YOUR ANSWER IS:  RC11: ,,, ENTER NUMBER OF TU56 DUAL DE,RCTAPE DRIVES ON THE SYSTEM. THIS WOUL,xD BE A NUMBER FROM 1 TO 4 CORRESPONDIN,G TO 2 TO 8 DECTAPE DRIVES. IF YOU HA,ĝPPEN TO HAVE NO DECTAPE AT ALL THEN A,NSWER 0. THE DEFAULT IS 1. YOUR NUMBE!R OF TU56 DUAL DRIVES IS: , TC11: ,<Ȟ IF YOU HAVE A HIGH SPEED PAPQ,bER TAPE READER, THEN ANSWER 'Y'; ELSEr, ANSWER 'N'. THE DEFAULT IS AN ANSWER[, OF 'N'. YOUR ANSWER IS:  PT R,ԞEADER: h IF YOU HAVE A HIGH Ss,PEED PAPER TAPE PUNCH, THEN ANSWER 'Y, '; ELSE ANSWER 'N'. THE DEFAULT IS AN 'F ANSWER OF 'N'. YOUR ANSWER IS: h PT PUNCH: ,|J IF YOU HAVE A CARD READER (BC,E IT THE CR11 PUNCHED CARD READER OR l,ȟTHE CM11 MARK SENSE CARD READER) THEN, ANSWER 'Y'; ANSWER 'N' FOR NO CARD RE,ADER. THE DEFAULT IS AN ANSWER OF 'N'%:. YOUR ANSWER: CR11: ,Z IF YOU HAVE THE LP11 LINE PR,INTER, THEN ANSWER WITH A 'Y'; ELSE Af,NSWER 'N' FOR NO LINE PRINTER. THE DE#,̠FAULT IS AN ANSWER OF 'N'. YOUR ANSWER :  LP11: , ENTER THE NUMBER OF COLUMNS P,,ON YOUR LP11 LINE PRINTER. THE VALUE m,RMUST BE 80 OR 132. THE DEFAULT VALUE I,xS 80. NUMBER OF COLUMNS IS:  LP COLUMNS: k, ANSWER WITH A 'Y' IF YOUR LP,ҡ11 LINE PRINTER HAS A 96 CHARACTER (UE,PPER AND LOWER CASE) CHARACTER SET; E,LSE ANSWER 'N' FOR ONLY THE 64 CHARACTy,DER SET. THE DEFAULT IS THE 64 CHARACT,jER SET. 96 CHARACTERS: LP UC:I, IF YOU HAVE THE TM11 MAGTA,PE CONTROL, THEN ANSWER WITH THE NUMB,ܢER OF TU10 DRIVES (7 TRACK PLUS 9 TRA#,CK). IF YOU HAVE NO MAGTAPE, THEN ANSW,(ER WITH A 0. THE DEFAULT IS 0 AND THE,N RANGE OF NUMBER OF DRIVES IS FROM 1 ,tTO 8. NUMBER OF TU10 DRIVES: P TM11: M,&|| ENTER THE NUMBER OF SMALL (1,ȣ6 WORD) BUFFERS YOU WISH TO HAVE FOR ,YOUR SYSTEM. THE DEFAULT IS 64 SMALL BY,UFFERS, WHICH SEEMS TO BE A GOODLY NU,:MBER. THE RANGE IS FROM 10 TO 999 SMA,`LL BUFFERS. THE NUMBER OF SMALL BUFFER,S FOR OPTIMUM SYSTEM OPERATION IS A F,UNCTION OF THE NUMBER OF JOBS POSSIBL,ҤE AND HOW MANY FILES THOSE JOBS WILL ,HAVE OPEN AT ONCE. NUMBER OF SMALL BUFe,FERS:  SMALL BUFFERX , e & e,S: (f,D ENTER THE NUMBER OF BIG (256 WORD)y,j BUFFERS FOR YOUR SYSTEM. THE NUMBER ,IS FROM 1 TO 8. IF YOU SPECIFY A NUMBk,ER GREATER THAN THE NUMBER OF DECTAPE,ܥ DRIVES, THEY WILL GO TO WASTE. THE DE+FAULT IS 1. NUMBER OF BIG BUFFERS: \,( BIG BUFFERS:  THIS Ia,NS A MULTIPLE CHOICE QUESTION ABOUT THE,t DECODE TABLE FOR YOUR CARD READER: ,'1' DEC 029 DECODE% Օ.ՕU0e1Օ  W C D e, e  W 0f$  ,-+ W .0膾e ,Zwwww& n,< wwhwH,0wwwww",xwڹ!Fww,\wwwwބwwֽ,Q@~v ? ,ww~ ?# TABLE '2' DEC 026 ,DECODE TABLE '3' IBM 1401 DECODE TABL,E THE DEFAULT IS CHOICE '1'. YOUR CHO(, ICE:  CR DECODE: IF,2 YOU WANT THE SPECIAL FEATURE OF LINE ,XPRINTER FORMATTING THEN ANSWER 'Y'; E,~LSE ANSWER 'N'. THE DEFAULT IS 'N'. LINE PRINTER FORMATTING: , LP FORMAT:  THE FOLL,OWING QUESTIONS ARE ABOUT OPTIONAL SPE, CIAL FEATURES. IF Y  ,s  $ Æ,-wwd,U4{w&xκwww>,;  N YF ,m  N Yj 7,MYN  0׭F ̼,!K}N |V Y| Y ¦,LPL0׭ , X,V& *MYN D׭Z,4׭V Z,` dUj nP4,YND 'OU WANT THE FEATURV,0E DESCRIBED, THEN ANSWER WITH A 'Y'; ,VELSE ANSWER WITH 'N' TO OMIT THE FEATP,|URE. THE DEFAULT FOR THE FOLLOWING IS ,'N'. ALL RSTS V4A SYSTEM GET THE AUT^,ȨOMATIC SYSTEM RELOAD AND RE-START FOLm,LOWING A SYSTEM ERROR, BUT THERE ARE ,SPECIAL ROUTINES THAT ATTEMPT TO RECOV,:ER FROM MOST OF THESE ERRORS WITHOUT ,`AFFECTING MORE THAN THE USER THAT CAU,SED THE ER , ,4P UYNx \, , O IY,»,N/ Ʃ , F ,o NYN ԧ& *,v,(0 42< @2H L2 P,sX l p2 *,XE* 3 4,9 E 4 E ޺,4 X [ ,X +ROR. DO YOU WANT THESE ROUTIy,NES: NO FAIL: Dww THE ,ҩRECORD I/O FEATURE ENABLES THE VERBS: , LSET,RSET,FIELD,GET,PUT,CVT,XLATE. +DO YOU WANT THE RECORD I/O FEATURE: D RECORD I/O: ,Z// DO YOU WANT THE FILE 'UPDATE' MODE FEATURE:  UPDATE: W,Ԫ'' DO YOU WANT 'PRINT-USING' IN3ʪCLUDED: f,Ԫ PRINT-USING: ## 4 ek D, 4 DX'El,M 4Z2% *ZF,0׭@ Օ`W!.Օ  ,90 90,90,\,  Թ,, T M0v׭,I   , `7e7j,3Y N  0b,h.m2r3w1 <,/DO YOU! WANT THE 'MAT' COMMANDS:  MATRIX: ,(aa SELECT YOUR MATH PACKAGE FRO[,NM THE LIST. THERE IS NO DEFAULT FOR TZ,tHIS QUESTION. 2 STANDARD 2-WORD MA,TH 2E 2-WORD EAE MATH 2X STANDARD ,2-WORD WITH NO FUNCTIONS 2EX 2-WORD E,AE WITH NO FUNCTIONS 4 STANDARD 4-W, ORD MATH 4E 4-WORD EAE MATH 4X STA,2NDARD 4-WORD WITH NO FUNCTIONS 4EX 4-t,XN2318'J ,1 , M R O, FYN ( ʸ,P L1YtNw, \ , 6 2$~, (0 096 :2@ D0X,L1R V0\ `4f j12,z3$21H @ R , C , R C,]{1YbNe ~3WORD EAE WITH NO FUNCTIONS ENTER MATH~ PACKAGE DESIRED: + MATH PACKAGE: ,z IF YOU WANT THE SAMPLE OF THU,ЬE KEYBOARD DIALOGUE ON YOUR LP11 LINE, PRINTER, THEN ANSWER THIS QUESTION W$,ITH 'Y'; ELSE ANSWER WITH 'N' FOR SAMPz,BLE ON THE KEYBOARD. THE DEFAULT IS 'N,h'. SAMPLE ON LP:  SAMPLE ON LP5 : V, .TITLE CF.MAC RSTS V4A ;CO,PYRI0, , T D0#׭,   ñ  .& *,t,0 4P: >P1YNN,| ޞ` d,j nRt xP(,1Y2N5V >Æ,    x 0׭0^׭ܶ,|Л   g Κ ,  >  ^l1t2,32 1 @e1Yj, N  \O7GHT 1972 BY DIGITAL EQUIPMENT CORPO,ޭ., MAYNARD, MASS. 01754 ;VERSION: 04A, EDIT: 11 ;DATE: 07-JUL-72 BY: MHB ,* SYSVEN = 12. ;EDIT NUMBER .MACRO ,P.NAME. ;SYSTEM NAME (1. TO 15. CHARS-,v) .ASCII "ANY SYSTEM NAME" .ENDM  HERTZ =  60., ;AC POWER FREQUENCY IN HERTZ KW11ЮP = 3Ԯ0F,ٮ ;1 IF KW11P CLOCK; ELSE 0 (KW11L) f POWER = 1YN D,$ 0_׭HC1YN H, @'0/232 1,r ғ&1YN  ҵ,q1YN     ,      ,{ H.   f  *`,J = n0:, NY : 1PL, V   056, ; 1, ;1 IF POWER FAIL RECOVERY; ELSE 0 z3 JOBMAX = N =16.u,B ;MAXIMUM NUMBER OF JOBS KL11 =  h f0.,k ;# OF KL11'S (EXCLUDING CONSOLE KL11) DC11 = 0.O# ;# OF DC11'S DL11E = 0.2' ;# OF DL11E'S KBFILL = ٯ0@,ޯ ;1 IF FILL NEEDED FOR TERMINAL(S); EFLSE 0 KBLA30 = \ ѕ W"ѕȴ,* E, 6 ,S ww2xw x|,wwww V,HH HH    RSFEUF BD)OR.W56(2G BIF O;# 'Z1. = F BUIG BS ERFFBU) RDWO6.(1L ALSMF O;# a,.O64\ [ =UFW$LBSM 0SEEL; 11TMF I'S10TUF O;# 1,0.,? y0, ;1 IF SERIAL LA30'S; ELSE 0 KBLC =  ? e?1,D ;1 IF ONLY UC,2 IF UC + 175,176; ELSjE 0 KBXON = w0,| ;1 IF XON+XOFF FEATURE; ELSE 0 KBAUTO = 0q, ;1 IF AUTO ANSWER MESSAGE; ELSE 0 KҰBRUB = Qٰ0?,ް ;1 IF SCOPE TERMINAL(S); ELSE 0 KBPRTY = K 0 , ;1 IF =11TM 11LPR HA C64R FO0 14, ARCH6 9OR F77;3 ,014  = C UPPT L) 2.13R O0.(8H DTWIR TEINPRE IN;L Ʋ,.80  =1CP1 L0 E LS ER;TEINPRE IN L11LPF I;1 ,0` =11LP 0SEEL; ERADRED AR C11CRF I;1 f,0a =11\CR 0SEEL; CHUN PPETAR PEPAF I;1 6,01 =1P,EVEN,2 IF ODD PARITY; ELSE 0 5 RF11 = >1.,C ;# RS11'S IF RF11; ELSE 0 RK11 =  i |g0.,l ;# RK03'S+RK05'S IF RK11; ELSE 0 RC11 = [0.Q, ;# RS64'S IF RC11+; ELSE 0 TC11 =; ± ñ1.$,ȱ ;# TU56 DUAL DECTAPE DRIVES IF TC11;j ELSE 0 PC11R = E0, ;1 IF PAPER TAPE READER; ELSE 0 PC1