.v@s@g'@;@#.-Z@}@2@fSz@9mQ@.yx@ ` @}@K"@LC @c.f@R:@d@([qjhv@h >. &B& LC ( ` e.& & 7 503" ` 2fSzLC .L .sg`2@(fSzh".fTzh&@z(dhL(dh|h h8.&t7 EU64 .&&t7 EU6 .L&fWtEAWt E`/.rv&f# & l 2.WtE@`$Wt E.my@K@ .1"?Th(:D~h:`hC`_hTamxxhH.[q`"h`*}`hNu~@h42 Nh9 Nh6yh$.f2@@ (@&1 E.  ayx.rf&&&&&& R: . M) F L  &. F d".E50 2CDww LC . F ( 5$LC  g' ` "R:$f.00 F U .`v x&f&I. & WtE@`7$}2$. Et7`EU .0&f& & Wt 2.VE@`7$Et7`E "|UT fhR:hf'h]s'hH&dh "(^kKh,   .  B*     "&,FZgZ.w ×& u6 7!p[g4 ;. kg j [ . # AC: M  ? y    ILL CMD!   ILL PAR!  (.(NON-QUIESCENT  N  b.bENDSQUXXTMDT$RE CMTASj.LDpDIFL  .,V w7  *9mQ }g' `  yx$LC ;"zw #eGs}}.9:;@4@{7@H.M:@}@""@:_@:<}@._MQ@ee;@Ye@hfp@fSz@.fTz@[g4@9mQ@imR@m@.Tq@[qj@v@@@z(d@4f@.LC @(E:hf:h\)h.)bh9p:h9ah4(^)Xhp- t  j.ߐW  !.6Q r B f j fSz $fTz(jp.\1j 42 77)j"}. ߐw ehfp*.e Hwf a. 6 &&f   lUTvTC|BREX.\.x x %.7 d $ . 7 x . D $S#  |.Fx   f ! $_MQ.lEW,  !   Ye. & &&  =.0&W,WB  .; hfp@[g4@(h; h. w  ы Dĥ  K [g4.&D0 C ``a $L- 6 vw 6 hfp  r v &0DXl*0DXl 0DXl*0DX l DXlz*DXl  0XX000AK'. d7 .fv j  &jo.@ 6 6×7  fSz3.f7  7  !f $.!ߐ&&  Gmy . J1j1jߐ4"jj ( .H& w4— ` _. !  j (.7 7 7 ajc d .*  F^ .PW,5 3!0 ,!)!&3&;}G.v %! yߕ4l 2 ` $ ` *.ߕ x J `  ` . && & &  &.=sL"m@[qj@v@@|.(N4h4_MQhYeh=sL"h.w & & w @@v@m[qj.&l LXXD{D0XjXXgX0XUXlSl0X@X?0X+X+0XX0XX000Z ZDD0ZZW.!& 17 7 7 7 0  fSz.$W   f w lT[(.Jw P7 M yrb[g4$r&(p.  .& . 7n) (.&& o  ` g. HH:MM:SS MM/DD/YY @. &e I i.4W, ! 1 K.Zw(W, ! 0.E7PdDԝ7 ԝ  x .:_2@fTz@ gp@V. ` @K"@LC @d@(2=:_h:|h.  y & 5 2$fTz.& U0  d.LffffffffF "1.reo.EXX0ZZll0ZZ0ZZ0ZZ0ZZ0ZyZDD0\*\X%X0\\y(t..W"1f - ."Kw Fhfpc{ ck  . c Uw    [g4$(].F Ew  !7 |.l &j    k D g;j fSz.HdB."" ; @:<}@hfp@I.fSz@fTz@[g4@Tq@@z(d@.9a@LC @( [hfZhj""htKhV.N) ERROR XXXXX N%& XXXXXX XXXXXX XXXXXX XXXXXX 0 D.D ,3:Aw ( ,3 : A [g4$( `  ` . f f $*f77 &LC .  e K"d. w 0  gpLll0\\0\\0\\0\\0\\0\\X%X __ `` X ,j (j. MW"I r fTz$.`2 2 & Lr   fTz/.2 2  1  n.*&&  0v y".Pw  w  hfp"([g4.v×& K .j w f [g4&@z(d. h 7^ fTzLC $:<}. w  7 |( f hfp(fSzK.=w 7 7 Df&Dq.& C V   A  ; .(f  z:<}Tq 9a\.!.u~#"q@}@:<}@S.;K}@eS@fSz@fTz@9mQ@#.m@Tq@[qj@v@@@w@p.yx@@z(d@u~!"@@ @.LC @(M:heBkhimRh.[qh[qhu~hu~"hsh.L h h$;hp{h.* " aa bb cc dd ee ff gg hh ii jjz l}lx n{n#7!HE (.!ߐ&&  ;Ia$.- j  A f  jfSz $fSz. ߐw 0 hfp.  w 6  .4 `` !!  y.Z   J BY fSzN  պt0 E %"&`"& `&      ."  55.5f& m&5. %  a0 @z(d LC u. a ^  ^r@fTz $@o&v pypt rwrr tutp vsvn xqxl zozj |m.| !"w   $ !"[g4 .. &_&w D '!. wCe  . J 9x. @Cf U0 f .  jww A jW. BCD fEeU0 ffE.> Ew$UC @ u E  "7 7 7 7 7 7 B.  +..[g4( [g4h&f&M ).FrBr@  &0 GB @ :<}.l ?ߐ6 e  yxyx. e @f w@f 6 9mQ}.ߐ F.  &f.%V  G  .* & zf errB  fTzfTz"&B.P2*_"&hfp., w  $hfp.& w_5lp^Ѐ^}* 9mQ}_lp ^(^. w    [g4*:``5nr^1^*``nr^"^4,w   wHe |,[g4  P, p0 j&  $jV*<0 7#. #&  # . .hfp(hfph -@2&  2 e  @ fTz .v  6 v:<} Tq. _. E@f&fP~ .7 7  f&f.&& &  B 0e19.4W @w   $ fSz#.Z.$X^ z^ _ . X ^ z ^ _KHajP lw f, a j lhfp\.\w EE gD Cv@g O.aDf |1gwJ0U. afg "$&(0&BP^rzbWbH@!.BP^ r zbb.lwpD/.zy:q@s'D~@2@U.2p@2@2@2@2@#.2@@2@2@y:@:D~@.\M2@ee;@kK@p2@;}G@.u~!"@@ ` @s'@(6x(zy:h<6xu*qs'D~p2 \M2 :D~y: *u~!"22 2 2@2. ; hfp@[g4@(^ ; h .'d w  Օ+ [g4.& d 0B` e0  w L%Օ- ҋ hfp)1   &fM.w 5 82 . & e 5S  @z(d.5 5@  &   $qi.]<] e5   Z  5.  &f m.>   d ^.dw    .u~!";K}2twx  -m="lp tx(.   fwf =f $M:.=^  ^f.8w && w @lwp $ [g4:_hfpl p".^&   1^ Rx e:<}Tq^$x.x x^& /xx^"fSz. #22p2Ɗ.><2r  ,kK < `  ;}G&;}G$d  re 2s'ee;t4.r,;@fSz@LC @&(,2hhr,h. 0&  ELC ;fSz.&UUU ,\ .L.0&z&.r *!"; fSz"fSz eS$eS&;K}5.7 ,w "wD  @w.w #c# R@w[qj.w Mv@6(u.p5l1_ex&  pl_x"fSz(.r5n ^w1`^bf $rn[qj`^"b&p. f1b fi M:fb f&iS. f1iUfbfi"f&b.B^f}dfb fdf"b.h f17. !TM:@ #}@eBk@.fSz@m@s@L @ @>.$;@4f@(eShu~!"hBLmh$.f2@I (@&1 E.2L &   s #}&fSz&. @   < e@6  F.{7;@M:@}@.""@2@:_@:<}@_MQ@.Ye@hfp@fSz@fTz@[g4@.9mH@imR@m@Tq@[qj@Q.v@@@z(d@@4f@LC @.("Kh)e Xh|i&hi2hc.%lehR8xh \hshL h.&@h4!;h(0XshYYqhw(8. wehp hv}h*w h {7hUee;hEfwJ 1b f ffb$f.  f1b@nwrwZjw" fbnr$jF. jww EE Dg jv@(. @nwrBvwz f" nrvz$. D+ŀ| n *imR .&-el.cBE,I _ c.  @   $.   & & &&  _m$4f.<L   &  $M:k b 7 6*s eBkL s$; z B  #}@"DDDDDDD ""   "" @DDDDD " """""""""D@DDD@@DDD"ADDB Cv[q^ sg`^m^ ':`^9:^ Y; ^  =sL"^:_^""^ u~#"^1[g4^$$hfp^((zy:^+/ ; ^,,r,^04u~!"^37{7^5 n8}^G[m'-^H l:@^]i\!p^_os@Q^mM^ppy:}^rz%f^s i'y^t^~MZ^: ^^,8^^ ^r\M^(xx^ d^2^;}5J^@^$Da ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & Iu.L 5@ =C 5@@.rwĕ f^f2  [qjff .  ށ c cĕ\fdccc"f&d.Ē1c  1dĕ\fe cdf$e.ef = ff *e M: f$(M:V.  ĕ=f  /kJ  &&     "" $$ && ( ( ) ) * * + K.8};@}@""@p.:_@:<}@_MQ@Ye@hfp@.fSz@fTz@[g4@9mQ@m@F.Tq@[qj@v@@@z(d@@.4f@LC @(*)](8}hq)Zh|a.EMS  &)].w  K DL.m'-e X@i2@R8x@.{7@\@}@ #}@&@@.2@y:@:_@:<}@_MQ@.ee;@Ye@hfp@fSz@fTz@.[g4@9mQ@m@Tq@@z(d@!.@9a@4f@LC @(.'s( 0h h L;hi Nhk.h&`;hHa'yh4'h'shD.'L h' h (` hY!Th'e^(~.u:hMf].0w / W<.56Ap)_MQYeYe Ye.V&" !0 CLC &:<}.| `0  .5@A& Ye"4.& N & &z 4f@z(dz"fTzY.z ( 4x xa  zxxB.zN+ , ,.. .@*jkTo LT P L H .fd wfO[g4 ;.&7!F BEW<q B_MQYe.L5 2 - Dw W ".r A!1 f  7 -"@z(dfTz$F.  G F$ LC :<}$,E7  Dww,  fSz $z.   Pe"hm'Nhfh qh's(.d!Ai2 i2.DB& 'e^D 'e^ 'e^ 'e^(@'e^G.w w  w w [g4[g4[g4Qf `D` % zp.:ajYD 1h^(1f@a jh ^&f>.`lwp75tx4 "lp tx.  f=f@ J@% f"imR.nwr7vz3 1e1Y&nr vz&eR.cfDA5@ =fPc fRB   wU.&@&& f&f.&1 u D .L7!k Ŋe B` ] B_MQYe.rYV DwNE /H . BW>1 4 @ f &.(( `f  SCPC* &"77 7C^.  "7  I* O.6 wW w " [qj"&hfp.\w & ww C&hfp9mQ"}&v@,,  I 5GT"[g4g.&f 1 F %h  @z(d.LA%=  7 E  's.r , -' &YeLC :<}&'s.^w w & .fTz 's'shfp"9mQ&}. ww   's's&'s .w r ՀU".j ffÝBgjjf&g. A72aw0^@lwpa^ l$p&.D@nwr7  5n r .j@w 5|5x5 $Ye4Ye Ye(YeP.U==pw` BYeYe.tez @exV 1& ( (@z(d$fTz . -  5)L( LC :<}  $)`.  f f wtw|x(  fimR`.0w|w$f pDw fSz *V0 "$ K*2 *   " $Q.x|+e  B   e 1W.   %.-56  "  l&ewX-w-* . *  vtE0P( @z(d". EP Q WfAX@.fSz 's'sR8x "'s,.  x$&  & ( 's2fTz$'s(:_'.0wLwfw^ t('s&V7@ 7*'s's's's.t     @ }d,'s's 's{7's.@` 4  o72` v. 'sYez :7 zxz@.J   ^3^^__^ ^"^&_(_Z.`` E llnnpprr.``llnn p"p&r(r.(xxzzttvv p&xx zzttvv.N^3_3` }f  ^ _`&imR.t3ghh -z Z | S. lt, <@} ,. -wwEe| <   "|. Հ E . ``e  * + = * "+q.6= &  vt&E$  @z(d "&$*\P=UAP&C.  [.F & K  4f  .lB  1 W :<}Tq.f ww 5- :_&. w 058g &.57 "w" w6,"" $""61X\ 's4 's  's $'s 7  , 's 's 's'see;"*'s 's's's, |  j &('s 's ee;'s&.  ` ~ N   $'s's $'s(ee;.01ŀ@&& w2$'s 's4f('sJg hh$(""l.E =i7@nwrin r"1.^ff&z fij j^  & " (~ }& ) wS* &  ).  ,[qj . 5J .& ww 9mH}<.ŀ E (.67 W@!t<  `.V 7 7 & , 's 's's's:<}*| 7 w:wH 7 7,Tq 's's's"'s" 7*'s's's's(7    x,'s's 's{7 's [. ` ŜE Z-&'s 's 's&'sa.: 0@ @ L;@.O Hi&@i N@X@X@.v}@{7@}@)Z@y:@e.\!p@t!H82@y:@:|@@.E:@MX@f:@=sL"@v@@B.@w@yHy@y@y @K.yH@yp@y@yp@y@a.zy:@;}G@u~"@~VK@Lm@.@ ` @)X@6y@̫I@|.f'@b .\4e 40 Z.  5% t2 .lm l m 44 .e  $&+ (2. e&f  w fWtfTz@z(d:_.5? @w E>v@ (.@w) C AD, [qj ) c.\!ps@; @s kM@.t 4!@u Z@y X@ d@ @". l@ @ q@ ; @}@.*\M@@8}@u:@e"@a.w @{7@E@M:@\!y:@.""@ #}@m'N@U(@a,}@R.,2@.@.R@MZ@{QD@.Q\!H5YTG@Zp@Zd'@ee;@.f@ gp@Cm@imR@m@=.r,@vd&e  ,. 's's's's'sb -  4.'s's 's's 's4.4  1 wj 8t* 's  's's$t&'sZ .'s 's's's 's(,p  m,ee;'s's's"'s. es'@(:(:(%.6x(6x("(կv~(:(.4( :(lM:hfBxhd:h&e:hf g:hfimRhh :f.! R JR"=sL"$&&0w24w6V, E:02f:46 v}*DXZ*X Z)Z\!p"=(f &.f w"w$5wV@q.  " $ 9.wWf & @D4f $ (.C `` K $d.  (B  ( :<}. Wfff  @ .Tq:_a,$  )  wg3d@v@9wW@aw}@.w]@yx@yR@z4f@9p:@.9a@@}C @ q@4f@K.K"@}HLC @(\!h\!phh.*mz4f 4f #}U(s*imRM:Cm E 9a9p:*8} ; ;  {QD }C ""h  w$3 7*'s's$'s('s*wTr.'s'sT'sr 's(z@ .z's's's 's, ` ~ H {,'s's 'see; 's(  @  D('s's 'see;"D.@if0 .u~" :|)X y:x 7 7R(MXX   L; 0=& %7 , L;{7 L; i&i N$%7,{7 i Ni&f'~VKs'$ % /(*s'{7s'f'zy:6y*̫j.    ) .H5 w\wL@[qj .nBEp Bm, $ b@ { ,.u(w`ww f ([g4"&.f w ?@ 52" :_hfp (.5* B& E .  *  & (k&*{7MZ . }YTG;2*.Ra,}9wW Zd' Zpy X>*u Z ds kM t 4!  qJ* lv3dv  u:e"`V*f qw] r, ee;aw}.bv"yRv,2 w  m'N5.l * H w œE@'s &'sj.fl3 Հŀ 1.w   1 w hfp's.1  *3  e r  's\U. ŜEq e 7  \\&'s,r p e C , 's 's 's 's&Ye." IyLm y y yH*. Cr@"ypyyp y.$~e~  &*Jz      wX}n.w( B2r2r   &.,r  ttwS, ""   .R> T) w@B@  ) $Ox)AD w"w* )  " $+  * $ + %  1O oJ.!0033.  V.wNwR r (LC . 5f&F Ua X.F 5El7 7zK"l".lz@WtEE ~C .hf` yxKs B's's's.Hs @lBE 's'snB 's'sbq.s@Q;@,8^@O @.H@p@p@p@ we@.4[M@{7@ef@M:@}@.Bx@t!@""@&y@2@.49@:<}@;K}@hfp@fSz@.fTz@f@[g4@9mH@imR@.wq@yx@@z(d@@ ` @q.(d@LC @R:@(:0$`h. $`h$`h6x(4y:h_(6.lAKh_imR.[EatEEt.`EU֋ tE. Et` EU.* &&77 0C~eE  yx.P&U0  w z $ gp,v ^BLC .M(; Mhl. !"$.&'(+-.03569:dhb_(8(sh~..&.L.r  _ v. x L;@e X@i N@.&@@&`;@a'y@' @_MQ@Y.Ye@(Xy:hy:}h̫Ih$w.J2@ (@& E.v,,,, , ,, 1(@Nw.%f L;@K@i N@.@%le@R8x@p @\@.s@L @&@@&`;@'@.'s@'L @' @(` @2@.4!;@:<}@0Xs@YYq@Y!T@].ee;H/Ye@(@qh(f%fh`8. `K$A ` (c&x.i'y\@(` @Ye@v.(@s'D~h(*i'yh. 2$F  (& r d(dv@vY.OBJECT LOAD SYMBOLICAS<.*M SYM FOR SYM DATA JANFEBMARAPRMAYJy"$&>.6   ..  _...$.J.p].9.z X.X*ROS DISC SYSTEM .~INITIALIZED .  ppW ' $&`;(a'yy,lxelxU .a'y' a'y&`;" L;x( /%E   . L;  L; L; &@e X.%0 e B"E i N i N Ye.w w7 x/{1 q Q&@ 8.8#COMPRESSION COMP^LETE-FILE TYPE XXX t rv+rCOMPRS-FILE TYPE XXX NOT VALID  R-!COMPRS NOT ALLOWED-FILE TYPE XXX & ,.#COMPRS-DIRECTORY SEARCH DISC ERRORu   .%COMPRS-FIL|.PUNJULAUGSEPOCTNOVDECFREE READ WR.vITE DELETED HFI .LE ID START FILE LOGICAL FILE .CKSAVE PROTECT CORE DIR. IFD > . SECTOR TYPE DEVICE LENGTH a.0=NONE Y/N Y/N I************.4**************************************\Z**********************  rur ) zm.zFXXXXX XXXXXX }.....Tz.zR.>2p*h.  >2p*he -8 #% Ye,4 %  _    _MQE XFER ERROR-FILE TYPE X}  XX ( .#COMPRS-DIRECTORY UPDATE DISC ERROR 4  8.8w .^.37 5 E  &(` 1.A ߕ d wYeYYqf.hwt0 (` R8x0 @. XXX XXX XXXl.XXX XXXXXX X X XXXX u. > ELEMENT . CREATED START I d. NAME TYPE STATUS DATE )8 TIME SECTOR LENGTH  Z.ZH .NAME. OBJECT FREE 0.2-JAN-72 23:17:59 005466 000100 K.-DISC ERROR-BATCH FILE ELEMENT DIRECTORY READ @ 6x. @7  QBxpp ,8^u&5 pO"    ,,_.6   &_8.;@4@M:@.}@:_@:mm@: @:<}@._MQ@b; @Ye@fSz@fTz@W.9mQ@imR@Tq@[qj@rh@.v@@@z(d@@9p:@9a@.(d@4f@LC @(j^h^q._hdhx:(Xh   Pp 4 w wr wn1 1%le(&`;. F7 >7 87./% v px`Oy.BE e  Xww .h$  肷 U.l@lwH(` 1./ S <. vw" d2  .DISC DIRECTORY READ ERROR 7 .J. 2 >BEHwT7 \.$Zd% : 4"x` :d.J-E 'e  w ?.pe W" Ew (` 7.  D 7wzNN 0 Ye.  (.&wZBw" we+f .L U0 pp wq.r 5s5w  pp(p.U  m &p p,8^p .5TE5& (pf  &fSz.T:C"4 0@P 0@PHH4FXjh4FX jJ3JNNpp PPrr RRtt T.T CR 1 ERROR CR 1 SPUR INT f.z&f  6 @ 0.B L  7 L. /  .www> 0Z27 7".&/ nFqwj/ X; .Ld-`?l:7:G lh.r787 /  %2 F.   /Bw "i N.wxw p/ŕ&'  L; R8x(:<}.f@ P. !f&f&E. l Y:..E dYfE &.T H 8 ,z $z.zw ~ t ( \  _. d0 E 8D/.   $ )"$4    _. e0e  t043"49c.0e&ʋ    we{7& ` .V  1 e8f N ` (_].|D wB2+ &_   "-. U0   ppwq"_ .B 1 (. f   _ %  @z(d fTz &.1 1 .mLC  :<}.8  K ;#.^   & S (}.w s   &9mQ  "b; $. T >:ff ezL 0. DEU@f 4 Bw 8J (8.07 7 ߕ `4!;"4!;Y.V v  ߕYYqW.| 4 ff YYqK.w <7 7 ߕ | <&'L . ߕ  */.r 8  x nr". x d$n Zrd Pf  $r( .8ӝӝ (7 (d' &df.^  e   % <.  b'E b.A`w w w w  M. A`wd  wʕ& wB fSz. wbe.w(  %f&f.: A E EWe F 0.` C E f EŠp H2_.ʋwEWE T ":<}(_T8.f /  8f  T $8.d w   d xMr  : v@[qj"d. 5@p8Mp Mw45  .55@53   &=.B&2 E@pM3    ) : $ .h @3 Mu  .pnhj 'L Y!T'"Y!T( .& 5m NJ88 :<}mJ$8_. 8r" ( nr&g.:  XН $X3.`НН 0   "%le.& 7 &  .Er@lr @A(` (swd wd wddd d(d.  . C `w=nыw=gr =&=.ыw=`   =Z.B    >(".h 2Z w *3 ց e  Z\ց$ ŜہEqeց\ہ\ց ef ` & ` .3e3J _x.3e e  w. t we e wA ~wPU_~_P_. ~1 1 a7&_~ ` 2 f(p.&U  5M p 4[M  pn.LB   ET.@&ff&  $:_. && & 94f:<}&Tq. EAp3 F M @_F:mm fSz.& 3s lM0  z.LM ,P!  -!P$ .r '!  Rl _.A&& ee `` L >. e  ?0Xs$4!;. ff ^_ !"'s('s.D   v 1'L  'L 'L .j*3 ց e  ŜہEq\ց\ہ.eց&t7&t\ց8  f.reʋ  wTEI_T&. U0   _pp"wq.5 5́w  ppf$_. B 4&   _4&fSzw.  w%e v_ M:*0 UR ".Ael    a. M  B  G b; .  CNUq &N|. 3T T8; Nfd f T8 N.0 CEAN5N  : NN ( F.Vwwf42&. EU 6&t.7z( E-.U@6&fWtEAWte.( E`v( (#N c.MZ;@4@; M@.}@:_@:mm@: @:<}@._MQ@Ye@fSz@fTz@9mQ@`.m@Tq@[qj@v@@@z(d@.@9a@4f@LC @(D}.Mp&h8MWh>MZhMh:(MXh 2 22 w& fSzpp4[M_. ~4 3 0  $ LC _~  &.& 4 fע׬ 4t$_4 _ ` (_4].L Ce w 9_&_"r4 ~ wT*_4 LC _~ ` _T_. 5-1"4.| 5 5f  9a.1 3 3 s  @_! 7.3   fd  m  : ".AN4" p &F= N4 (F.   :mm 9p:.:3w$3  w .: imR@(B:mmh0: h.% f 6 H$&we&6  imR&n29" . L/P 1 PARITY ERROR L/P 1 NOT READY  L/P 1 ABORTED &.&  ..&f&f  7k.8.^     hR. ; LC LC $9mH.&& & ~ ~ʕ( ` }_~f"_~.L pp . ` &y2;K}2 &y&K.rC  B  [f "l.Ee  A ͕\.AwFEAEC _F H. O`7 : .(b; h. 12345678 &=':>@9 0/STUV.&WXY _,(%\"Z -JKLMNOPQ $.L*];^R ! .r +ABCDEFGH .)[<#I . ? . P$ t :&   %a  @z(dfTz(.0 $   LC :<}. e& w0X 9mQ$}.  s3 3 0 &v.s3     ; M..Bw0w   M @$ v@[qj"&  A T  _T. w W   ~ʕw  ; [g4LC _~ 08hfp_. ~ ʕ _~&f.&wr e3  "_r  imR( ` .L wTʕ6 @ "_Tf$(_.r .,8^hfp@[g4@({.,8^hB \}hph$ph&ph"F4[Mh\wqh(..&EU0~E|UvEjUP6.LdEbU\ EPU@JEHU.rBw 7 7М   D [g4".  5q W !5  x . L"(2hyh$ .d2_ ($&1 E,l|~ +  fSz.h    M ; M.2 e  2["m.&  & 1:<}Tq$. f&  h4f:_ . e( ^ fSz.&  wVs3 3  e   _f 5. & D2 M:2e.  &   3$ ` fSz;K}fSz";K}(  C & fw\2 & _ _\_<.@  o__.&E!ʕwTʕ D+_. ^V NNEJ  5qw U. hfp.r\MH@2@49@.:<}@ee;@f@;}G@@. ` @s'@(@\M2hr\M(. d r\M (r\M&r\M 1 !.t  n F&B! F$BG.  H $(; M.Ls3   M 3  i  $(:mm.r M % X z M t &.`w N V3 &"(.d MC f ! : "&fSz.    , $D. d  wf&ff& B  :Tf(2Z.L& w w . __f "[g4&X.r  w &W ` hfp. T 6  `  ` $_J ?_.e8f D b __I.& e e.LwE4.(xx(@(xxh(D(n.@2 ((D&(D   d.dv  vj.   -.  K: H K  .H   , G)H"G.:Bf&CCTQ$ w7 SB.` 7 7 B     B. LL 6  LL2. 3   "  H.P)eD z6$&(6+ r.0Aaes!B3  D! !  T.V3   % !3   ^ĕ ~.| R  s!5Еs "c. 3   5.  6 & `3   . @& .5 55   f& 4a$_f (_4/.r -Ct _F.# & & 0ʕ@z(d;K}fSz$;K}a. 1 ,t& wTʕ( ` 2 ,"""&_T z f _.e8f @  Bl _ "+   ( TASK F<& . ) d +I d.F%I,*p X &p l pt.p ** PROTECTED F YILE MODIFIED *.z 2  *  " w Mz.j`     .D  D@: | 7(1-$.jt   . D P  X.Le e  `7 L..e 7!#"",.eHx'  xI.(3s $.:     .`&d fB :  . e00& D #.wwwZ9a .@aAa !B@w q  y.f CqBa f "*. .&KG :ff t ` @z(d|.L `$ G  ʋ & 2.r  12 ʕ;K}fSz;K}& ` .wT  5f ._T &y;K}&y  &"" Dwu ` __. B ~uf f_~ * 2x 7 F L7: . x"L.N-.@7 &7e 7 $/.tW µ 0 0  eE.`7µ 0l.0  F! F [.B a( B7 B7 \BBB(\.  L7 j -Z@7 R  L.27e 7 PN 'W  5 f ! 9a01 7 ;:  F  F FH$"" &wwTI(:<} ` _ ` _T_e. CafQr H .&rC DEr r .LɕE f   ` &2.rp5 f \  l1 22.    r eC. d{7@a,}@.R@.hfp@[g4@(s kMhJt 4!h@&u Zhy Xh2 dh5  (@ E@ 2.2w  1! %$[g4 $&.X $%   (&' $(.X6  M   6&G.~ &' |&'l  .  nD `B A w`   . J> 87  N6$  &63. \ `&' e 7 0 \`&0. d e E   ..2` @#H:@& @.:d@d@f@ys@Y@f.(@2hy(yyh,2,Y f ys #H:` d$ y:dy  &   i.  @z(dfTz &R.~$R  $V܅w,Q  $.w8w8w  xai\  ȋ  [g4.ȕË $B7$(. lE J . `D%  .R&a,}\.< Հ O 6A (.b 56w\wZw a< $7B 7@ 7 7 < 7 .b   p( F&p $F.B .7`w w    B.   ] >`p . &    z  ".< 4 9@BE . ` < BECB m\ D &.F!  ! .;}5J` H#H:H& He .:L;@?T@dHfHf@(.yy@y@YH/( :dhysh wn •* :L;:L;:L;:L;?Tj   0& & &  wf:L;K.;}5J` H#H:H& He .:L;@?T@dHfHf@(.y@YH/(@2hy( R.:dh yshdyyhyh>./d2 yd (ym&  y y e d dw^   •$[g4. & 6ȋȕË  [.^\[  . w 7w  hfp"[g4%.4 ȕe5 5 y. Ë } d Li.Fw   lȥȥp  [g4.l wm ŀ . |^*J^&^ "$*&J(^.l*J^w  ee&  *J^. 񆗢   7.  R7 6wJ.  w DDDm x.DQ$  fw  Dd R.* DQ$ pD & 2D X.PQ$Dd  D >Q$DdD C.v .MZ;@4@; M@.}@:_@:mm@: @:<}@._MQ@Ye@fSz@fTz@9mQ@`.m@Tq@v@@@z(d@@.9a@4f@LC @(.Mp&h".MWh(MZhMh:(MXhe * :L;:L;:L;:L;?Tj   0& & &  gf:L;Ku  R (.VT 4 5$ 5$ 4.5  e  0 V"&0.   j}.* w '7 Hw .PP77 2%,V,.v܅  wB wJ "&{7nDQ$ 37 7 W-. DDdm 7 7 ɥ.ɥDD]F  e .  @ 8@bS '.\ e= &":7/ \6.4 e@ r@L~  X.Z4W p;W 8 2 h "f;.+ 5  E#_  . W!W! wO" . L/P 1 PARITY ERROR L/P 1 NOT READY  L/P 1 ABORTED &.&  ..&f&f  7.8 e.^    V 8.&  ; FILE TYPE 6, LOG UNIT 1 $FD007 = 1 ; FILE TYPE 7, LOG UNIT 1 $FD008 = 1 ; FILE TYPE 8, LOG UNIT 1 $FD009 = 1 ; FILE TYPE 9, LOG UNIT 1 .IFL 10.-$FTMAX XXXXXXXX ; ONLY SET UP FOR 10. FILE TYPES .ENDC $OVTYP = 5. ; FILE TYPE FOR OVERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORS ; .IFNZ DRESDI $FS000 = DIRAD1+DIRLN1+$FTDRL+$CDI]EW!,.  Xr7pP*Ý $Pn.^% P)Lw < @7x P. E7H8 hw:,+ X7 D2.> w w 11 F ` :<}H.d U11 w w R*492;}G ;}G$s'(ee;. B!7 wwQ$ w,* B. (((  % @z(d fTz".0 # %LC :<}.e& w0 h9mQ} . s3 3 s"&.3     w"w U ; M(v@.B M  :fSz&SZ+$TKFNS .ENDC .IFZ DRESDI $FS000 = $FTDRL+$CDISZ+$TKFNS .ENDC $FS001 = 300. $FS002 = 300. $FS003 = 300. $FS004 = 300. $FS005 = 2500. $FS006 = 300. $FS007 = 2500. $FS008 = 300. $FS009 = 300. ; $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 = $FS005+$FS006+$FS007+$FS008+$FS009 .IFL 8192.-$ALOD1-$ALOD2 XXXXXXXX ; ONLY 8192 SECTORS AVAIL  f& 4a$_f (_4/.r -Ct _F.# & & 0ʕ@z(d;K}fSz$;K}a. 1 ,t& wTʕ( ` 2 ,"""&_T z f _.e8f @  Bl _ ". ,,,&f,. &M  mvm. - &&L7 re3 L5." e #0-&o.H ]L,7 B#0- L.n  E7ee . e !&9. e  4w  R.  w  @w e .h   M20; M"(^.e2&   :<}(TqZ. & f& ?4f&.   (:_ (T.   w`sfSz&.&3 3 s3   My .- 1/2 MEGAWORDS .ENDC ; .IFNZ $BATCH $BCHID = NDISCS+$SYSFL+1 ; FILE ID FOR BATCH FILE $BCHTP = 7. ; BATCH FILE TYPE $RASIZ = 200. ; NO. OF ENTRIES IN USERS SYMBOL TABLE ; ; IN RASM ; ; NOTE: 4 WORDS/ENTRY $LSDSZ = 1000. ; NO. OF WORDS RESERVED FOR LOADERS ; ; SYMBOL DIRECTORY (LSD) ; &KG :ff t ` @z(d|.L `$ G  ʋ & 2.r  12 ʕ;K}fSz;K}& ` .wT  5f ._T &y;K}&y  &"" Dwu ` __. B ~uf f_~ $"". 7!  #2-7!`e ., X&fhe  e Be N.R !!!!!w j @` 7 .BF.x w X  7 7. 7 ee MI . -   >   ". | 7f?| { 0. v5pЋ#Bw>` . ; M.L 3  M % X; :mm".r z M `w N " .V3 &d MC f : .    fSz&.  ,d  t : . wp&ff& Aaes!B3 " ; NOTE: $LSDSZ MUST BE >/= TO ; $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 20. ; MAX NO. OF OBJECT MODULES TO BE ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ;NO. OF TELETYPES  &wwTI(:<} ` _ ` _T_e. CafQr H .&rC DEr r .LɕE f   ` &2.rp5 f \  l1 22.    r eC  6 70@5"0 @ e.\      .    m2 . #e#!  . E mf|7q . 7ejj$. #0 E w Z (Z](@  J w w*J  $].0 D! ! 3   % !3 i.V  ^ĕ  R  s!5Е.|s  3    &=. 5  6 & `.3   F .@& 5 55 . 3    ;IN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ =i.  @z(dfTz &R    jajE \G\0,.0x xXVt jpj xax@ . ROSLOD IIA # ROSLOD PASS #1 .,END .: &d  &: ~.`fB e0 " .0& w49asww <.@aAa !B@w }  y.f CqBa f "*. 5 f 8 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR .: imR@(B:mmh0: h.% f 6 H$&we&6  imR&n ROSLOD PASS #2 BEGIN ERRVROR # w \|.\P **** ROSLOD LOAD MAP **** **** LOAD ELEMENT [% J.LODTMP] **** / / : C.********** ELEMENT TITLE: [] SEC%TION ENTRY OFFSET SIZE TOTALm .<> . "**********.D UNRESOLVED R 9a1 7 %:  >  { >} ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM PRINT OPTION .TITLE $$TEST (DISCIO TEST) .GLOBL HED4,STK04 ; HED4: .WORD 1,4 .BYTE 20,2 .WORD START-STACK+100. .WORD 0,0,50.,0,0,0 .WORD 7006 ;PDR'S .WORD 77406 .WORD 0,0,0,0,0 .WORD 77406 ; STK04: .WORD STACK .WORD 0,0,0,0,0,0 .WORD 7600 .=.+12. .=.+100. STACK: SP = %6 ; ; START: MOV #MODULE-STACK+100.,-(SP) EMT 19. EFERENCES K.j `)@ BB EPEAT IF MORE ;CLEAR FREE CORE: TM.IOC: RESET   ;FOR SAFETY, STOP ALL INTS CMP @#100,#374 ;MUST RESTART CLOCK ... BEQ .+6  ;IF VECTOR NOT SET, NO CLOCK MOV @PC,@#177546 MOV R5,R4  ;SET 2ND SVT PTR ADD #V.BFE-V.DCO,R4 ;ADJUST PTR .... MOV @R4,R2  ;GET 'REAL' RESMON TOP MOV -(R5),R0 ;ANY ASSIGNMENTS? BEQ TM.ATC CMP R0,R2  ;IF SO PRE-LOAD? BNE TM.ATC-2 ;NO - MUST SCRUB TM.SAT: TST @R0 WHERE ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE .PAGE EMT 4 ; .BOUND MODULE: .WORD 1 .BYTE 1,3 .WORD TSK4X-STACK+100. .BYTE 0,1 .WORD 0,0,DATA-STACK+100.,0,0 DATA: .WORD 3 ;FILE ID .BYTE 1,0 .WORD 0,0,0 . = .+500. ; TSK4X: NOP RTS PC .END HE POINTERS WILL ; BE REPLACED BY THE ELEMENTS CONVERTED ; TO THEIR FINAL FORM ; ; FURTHER ERRORS MAY BE UNCOVERED DURING ; CONVERSION OF OCTAL VALUES. THESE WILL ; BE REPORTED BY KBL RECALL AS SHOWN FOR ; PART 1. ; .BYTE 0,-1  ;IN USE/NO SHARE SW. ;SET UP FOR CONTROL SUB-ROUTINE: AS.CO: MOV @#V.RRES,-(SP) ;GET CALL REGS FROM STACK JSR R5,@(SP)+ CMP (SP)+,(SP)+ ;IGNORE CALL RETURN MOV SP,R0  ;GET BOTTOM OF TABLE ADD #16,R0 JSR R5,AS.CVT ;GO CVT ELEMENTS ; ;FIND END OF SECTION BEQ TM.ATE  ;... BY ENTRY SEARCH COM @R0 BEQ TM.ATE COM (R0)+ MOVB 2(R0),R1 ;NOT FND YET - GET NEXT ASL R1 ADD R1,R0 CMP (R0)+,(R0)+ BR TM.SAT  ;... & TRY AGAIN TM.ATE: CMP R0,R2  ;IF END ALSO AT 'REAL' MONTOP ... BEQ .+6  ;.... TABLE GOES!! MOV R0,R2  ;OTHERWISE SET MONTOP AT END BR .+4 CLR @R5  ;FOR POST-LOAD, CLEAR PTR TM.ATC: CLR (R2)+  ;CLEAR LINK IN ANY CASE CLR (R2)+ MOV R2,-(SP) ;LEAVE ROOM FO ;*********************************************************************** ;* ** ;* SEGMENT REGISTER ADDRESSES REQUIRED BY THE PROGRAMS WHEN ** ;* IMPLEMENTED ON AN 11/45 OR 11/25, EITHER WITH SEGMENTATION. ** ;* ** .IFNZ $KT11C ;* ;* K E R N E L S E G M E N T R E G I S T E R S ;* $KPAR0 = 772340 ; $KPAR1 =... BEQ .+4  ;... DRIVER REQD. ASL R0 ADD KBI.DU-4,R0 MOV (SP)+,R5 ;SET UNIT/FUNCTION BR DU.ND1  ;GO OVERLAY SELF WITH ACTION RTN ;ERROR IN INPUT - IGNORE COMMAND: DU.ER1: ASRB @R1  ;ERROR CODE HERE -3 (SYNTAX) DU.ER2: ADD #6,SP  ;CLEAN UP STACK AS NEC. DU.ER3: CMP (SP)+,(SP)+ MOVB @R1,R1  ;RETURN ERROR CODE CLR R5  ;SET DONE FLAG INC DU.ND1+4 ;SET UP KBL RECALL .... V.RRES=46   ;... & DROP THRU TO IT V.DDL=50-4 .=.+KBI.DU+376-. DU.ND1: .=.+KDESPATCH TABLE FOR ELEMENTS: .WORD AS.CVD-AS.CGO ;RAD50 PACK DEVICE .WORD AS.CVU-AS.CGO ;OCTAL CVT DEVICE UNIT .WORD AS.CVF-AS.CGO ;RAD50 PACK FILE (2 WRDS) .WORD AS.CRP-AS.CGO .WORD AS.CRP-AS.CGO ;RAD50 PACK EXTENSION .WORD AS.CVC-AS.CGO ;SPEC. FOR UIC .WORD AS.CDN-AS.CGO ;RAD50 PACK LOG NAME & XIT ;CONTROL SUB-ROUTINE FOR DESPATCH AS REQD. TST (R5)+  ;ALLOWS OMISSION IF NO CVT AS.CVT: MOV -(R0),R1 ;GET TABLE ENTRY BEQ .-4  ;IF ZR NEW ASSIGNS ADD #1000,R2 ADD #V.EOM-V.BAT,R5 ;SET EOM ABOVE THIS MOV R2,(R5)+ ADD #40,R2  ;RESET TOB ACCORDINGLY CMP R2,@R5  ;(UNLESS ALREADY THERE!) BEQ .+6 MOV @(R5)+,@R2 ;... WITH APPROP STACK STOP CLR @-(R5)  ;... & OLD ONE CLEAR MOV R2,(R5)+ ;CLEAR BUFFER ALLOCATION: MOV @R4,R0  ;SET PTR TO ALLOC. TABLE CMP -(R4),(R5)+ ;... & ADJ PTRS CLR -(R0)  ;ZERO TABLE ENTRY CMP R0, 772342 ; $KPAR2 = 772344 ;KERNEL $KPAR3 = 772346 ; PAGE $KPAR4 = 772350 ; ADDRESS $KPAR5 = 772352 ; REGISTERS $KPAR6 = 772354 ; $KPAR7 = 772356 ; ; $KPDR0 = 772300 ; $KPDR1 = 772302 ; $KPDR2 = 772304 ;KERNEL $KPDR3 = 772306 ; PAGE $KPDR4 = 772310 ; DEBI.DU-2+KBI.OZ-. ;DUMP PART II:- DUMP DEVICE DRIVERS: ; ;ON ENTRY, PART I REGS ON TOP OF STACK GIVE:- ;  R1 = START OF DUMP AREA ;  R2 = # OF WORDS TO DUMP ;  R3 = DEVICE INDICATOR ;  R4 = TPB ADDRESS (FROM KBI) ;  R5 = UNIT/FUNCTION REQD. ; ;ON SUCCESSFUL COMPLETION OF DUMP, KBL WILL BE ; RECALLED WITH R5 CLEARED, R4 STILL SET TO ; TPB ADDRESS AND R1 WILL BE POSITIVE ; ;IF DUMP CANNOT BE COMPLETED THRU ERROR, RECALL ; TO KBL WILL HAVE R1 SET TO AERO TRY AGAIN MOV R0,R4  ;OTHERWISE LOOK FOR ... MOV -(R4),R2 ;...NEXT NON-0 ENTRY BEQ .-2  ;GIVES END OF ELEMENT DEC R2  ;ALLOW FOR DELIMITER CLR @R0  ;EMPTY STORE FOR RESULT MOV #3,R3  ;SET COUNT MOV (R5)+,-(SP) ;SET UP CONVERSION DESPATCH ADD PC,@SP AS.CGO: JSR PC,@(SP)+ ;... & GO DO IT TST R5  ;IF SATISFACTORY ... BNE AS.CVT  ;... GO TO NEXT ADD #20,SP  ;OTHERWISE SCRAP TABLE MOV #-3,R1  ;REJECT COMMAND BY ... INC AS.ND2+4 ;.@R4  ;... & REPEAT IF MORE BNE .-4 ;DO OTHER SVT. CLEAN-UP: CLR @R5  ;REMOVE PROG LOAD ADDR ADD #V.MUS-V.PLA,R5 ;JUMP TO M/U SW. CLR (R5)+  ;... & CLEAR IT CMP (R5)+,-(R4) CLR (R5)+  ;REMOVE START/RESTARTS CLR (R5)+ CLR (R5)+ MOV R4,@R5  ;RESET WAIT LOOP PTR ADD #V.WTL-V.SSP,(R5)+ ;ENSURE DDL CLEAN: MOV -(R4),R0 ;GET DDL ADDRESS ADD #6,R0  ;... & ITS END MOV (R0)+,R2 TM.ZDL: TST -(R2)  ;IF ENTRY HAS DISK INFO BEQ .+6 CLR -4(RSCRIPTOR $KPDR5 = 772312 ; REGISTERS $KPDR6 = 772314 ; $KPDR7 = 772316 ; ;* ;* U S E R S E G M E N T R E G I S T E R S ;* $UPAR0 = 777640 ; $UPAR1 = 777642 ; $UPAR2 = 777644 ;USER $UPAR3 = 777646 ; PAGE $UPAR4 = 777650 ; ADDRESS $UPAR5 = 777652 ; REGISTERS $UPAR6 = 777654 ; $UPAR7 = 777656 PPROP. NEGATIVE CODE ; ;  ************************** ; ;LINE PRINTER DUMP ROUTINE: ; ; OCCUPIES FIRST TWO BLOCKS OF PART II ; ON ENTRY R5 SHOULD BE CLEAR TO SHOW WRITE REQD. ; PROVIDES FORMATTED LISTING WITH 8 WORDS PER LINE ; FOLLOWED BY THE SAME WORDS CONVERTED TO BYTES ; MAPPED AS NECESSARY TO PRODUCE ASCII CHARACTERS ; IN THE RANGE 40-137. ; LISTING CAN BE TERMINATED AT THE END OF ANY PAGE ; IF CTL/C IS INPUT AT THE KEYBOARD. ; IF THE FUNCTION REQUESTED IS NOT 'WRITE' OR ; T.. RECALL KBL BR AS.XT ;GENERAL ROUTINE FOR RAD50 PACK 3 BYTES: AS.CVD: CMP (R4)+,(R4)+ ;USED TO GET NEXT PTR CMP R4,R0  ;IF FILE NEXT, LEAVE PTR ALONE BEQ AS.CRP BHI .+4  ;IF UNIT MUST BUMP CMPB -(R2),-(R2) ;OTHERWISE MUST MOVE BACK INC R2  ;(BECAUSE DELIMITING VARIES) AS.CRP: JSR PC,AS.CGB ;GO GET BYTE ... JSR PC,@(SP)+ ;...& RETURN TO PROCESS BR .-2  ;IF COME BACK, GO AGAIN ;CO-ROUTINE TO PROCESS BYTE: ; GETS BYTE & RETURNS 2)  ;... CANNOT BE RESIDENT CMP -(R2),-(R2) ; GO TO NEXT ENTRY CMP -(R2),@R0 ;... UNLESS ALL DONE BNE TM.ZDL ;RESTORE MRT. FROM DISK COPY: MOV R3,R2  ;SET SYS DSK IN LINK BLK ADD #6,R2 MOV @(R4)+,(R2)+ TST (R2)+  ;NOW SET UP TRAN BLOCK MOV -(R4),R0 ;...COMPUTE MRT SIZE SUB -(R4),R0 ;... AS WORD COUNT ASR R0 MOV @R4,(R2)+ ;SET MRT START ADDR MOV R0,@R2  ;... & COMPUTED COUNT CMP ; ; $UPDR0 = 777600 ; $UPDR1 = 777602 ; $UPDR2 = 777604 ;USER $UPDR3 = 777606 ; PAGE $UPDR4 = 777610 ; DESCRIPTOR $UPDR5 = 777612 ; REGISTERS $UPDR6 = 777614 ; $UPDR7 = 777616 ; .ENDC .PAGE ;********************************************************************** ;* HE LINE PRINTER IS NOT AVAILABLE, KBL WILL ; BE RECALLED WITH R1 SET TO -4 TO SHOW ILLEGAL ; DEVICE. ; .BYTE 0,-1  ;IN USE/SERIALLY REUSE SWS. ;SET UP DUMP CONTROLS: DU.LP: MOV @#V.RRES,-(SP) ;RESTORE REGISTERS JSR R5,@(SP)+ CMP (SP)+,(SP)+ ;CLEAR CALL OFF STACK JSR R4,DU.LGO ;SAVE TPB ADDR & SET SUBR ;PRINT SUB-ROUTINE: MOV @#LPS,-(SP) ;PRINTER AVAILABLE? BMI DU.ER4  ;IF NOT REJECT CMD TSTB (SP)+  ;IF IT'S FREE ... BPL .-10 MOVB R0,@#LPB ;... OUTPUTO CALLER FOR CHECK - ; IF RAD50 RE-ENTERED AT EXIT; IF OCTAL CVT ; AT EXIT + 10 AS.CGB: MOVB (R1)+,R4 ;GET BYTE ... JSR PC,@(SP)+ ;RETURN TO PROCESS ASL @R0  ;FOR RAD50 MULT BY 50 ASL @R0 ASL @R0 ADD @R0,R4 ASL @R0  ;FOR OCTAL CVT, COMPLETE ROT8 ASL @R0 ADD R4,@R0  ;ADD IN NEW BYTE CMP R1,R2  ;LAST VALID BYTE? BNE .+4 CLRB -(R1)  ;IF SO, SET FLAG (**) DEC R3  ;DONE 3 BYTES? BNE AS.CGB  ;IF NOT GO FOR NEXT AS.CNX: TST (SP)+  ; -(R2),-(R2) ;RESET PTR TO TBLK START MOV R3,-(SP) ;.INIT DISK EMT .INIT MOV R2,-(SP) ;.TRAN MRT. COPY MOV R3,-(SP) EMT .TRAN TST 6(R2)  ;IF DISK FAILS ... BPL .+6 CLR -(SP)  ;... IT'S FINAL!!!! IOT CLR -(R4)  ;FINALLY REMOVE PROGNAME CLR -(R4) ADD #V.OSW-V.PGN,R4 ;LEAVE PTR AT OTHER SW. ;INITIALISE LINK-BLOCKS: MOV R3,R0  ;SET PTR TO OUTPUT BLOCK TST -(R0)  ;...SKIPPING E ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;********************************************************************** NCR = 1 T CHAR. RTS PC  ;GO BACK FOR MORE ;CHECK COMMAND VALID: DU.LGO: TST R5  ;FUNC = WRITE? BNE DU.ER5  ;IF NOT, CANNOT COPE MOV @#V.SVT.,R5 ;SAVE STACK POINTER MOV SP,V.SSP(R5) ;(WILL APPEAR IN DUMP) ;ALL O.K. DO DUMP: MOV R1,-(SP) ;SAVE START ADDRESS BIC #777,R1  ;SIMULATE FULL BLOCK START DU.LLA: MOV #14,R0  ;FORCE FORM FEED DU.LLB: MOV #2230,R3 ;SET CTRL FOR C2OA SUBR MOV R1,R5  ;OUTPUT BLOCK START ADDR JSR PC,DU.LGA ;CONVWHEN DONE CO-RTN ADDR RUBBISH RTS PC  ;REMOVE BEFORE EXIT ;(**) FOR RAD50 FORCES LEFT-JUSTIFICATION ;ROUTINE TO PROCESS FILE-NAME: AS.CVF: JSR PC,AS.CRP ;GO CONVERT 3 BYTES MOV R1,-2(R0) ;SAVE POINTER FOR 2ND WORD RTS PC  ;ALLOW GEN RTN TO CALL IT ;SPECIAL ROUTINE TO PROCESS U.I.C.: AS.CVC: DEC R2  ;MOVE BACK TO ] CLR -(SP)  ;SET STORE ON STACK TOP AS.CVA: JSR PC,AS.CUS ;GET GROUP CODE TST R0  ;LOOK FOR ERROR BEQ AS.CNX  ;REJECT CRROR RTN SUB #16,R3  ;AND TO INPUT BLOCK MOV -(R0),@R3 ;INIT. BOTH TO KB CMP -(R3),-(R3) ;SET BOTH PTRS AT LINK CMP -(R0),-(R0) CMP -(R0),-(R3) ;CHECK FOR READ/WRITE IN CORE: MOV 2(R2),R1 ;GET MRT. ADDR CMP (R1)+,(R1)+ ;... & GO TO WRITE EMT MOV @R1,-(SP) ;PERHAPS SAVE CONTENT ASR @SP  ;CHECK IF DISK INFO BCS .+6 CLR @SP  ;IF NOT SET FLAG FOR LOADER BR TM.RWR  ;... & SKIP NEXT SEQUENCE ROL @SP  ;OTHERWISE RESTORE DISK INFO ADD #12,R2 ;NUMBER OF CARD READERS IN SYSTEM BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 0 ; 1=PROVIDE OFR INTERNAL EBCDIC CODE EXEBC = 0 ; 1=PROVIDE FOR EXTERNAL EBCDIC CODE ; (029 CARD CODE) $RES = 1 ; TIMER RES. FOR CREAD (=10.0 MSEC.T OCTAL TO ASCII JSR PC,@R4  ;... & PRINT IT MOV #12,R0  ;FORCE LINE-FEED DU.LLC: MOV #20100,R3 ;RESET CO2A CTRL MOV R1,R5  ;SET LINE ADDR SWAB R5  ;PRINT ONLY LAST 2 DIGITS JSR PC,DU.LGA ;CONVT TO ASCII JSR PC,@R4  ;PRINT : SET BY CO2A SUBR DU.LLD: SWAB R0  ;... & FORCE SPACE DEC R2  ;DONE ALL WORDS REQD? BLT .+10  ;IF SO PAD WITH BLANK CMP R1,@SP  ;REACHED START YET? BHIS DU.LLE  ;IF SO GO PRINT CONTENT INC R2  ;RESTORE WD CNT IF OMMAND IF ANY INCB @R0  ;ALSO CHECK AGAIN ... BEQ AS.CER  ;... FOR TOO BIG (377) DECB @R0  ;... OR ZERO BEQ AS.CER TST @SP  ;DONE TWO BYTES? BNE AS.CVO  ;IF SO THAT'S IT CMPB (R1)+,#', ;LOOK FOR SEPARATOR BNE AS.CER  ;IF NOT THERE IT'S AN ERROR MOVB @R0,1(SP) ;OTHERWISE STORE GROUP BYTE CLR @R0  ;RESET STORE MOV #3,R3  ;... & COUNT BR AS.CVA  ;GO FOR USER BYTE AS.CVO: ADD (SP)+,@R0 ;COMBINE TWO CODES WHEN DONE RTS PC  ;.... & EX ;...& USE EMBEDDED ONE FOR NOW MOV R2,@R1  ;SET MRT. ACCORDINGLY MOV R2,4(R1) ;NOW CAN WRITE PROG IDENTITY: TM.RWR: MOV R0,-(SP) ;.INIT OUTBLK EMT .INIT MOV PC,-(SP) ;.WRITE HDR,OUTBLOCK ADD #TM.HDR-.,@SP MOV R0,-(SP) EMT .WRITE ;WHILE PRINTING, SET UP INPUT FILE: MOV #60,R1  ;SAVE CURRENT KBD INT VECTOR MOV @R1,-(SP) TST @R4  ;IN 'OTHER' MODE? BNE TM.OTH  ;IF SO SET UP ELSEWHERE ) $100MS = 10. ;MULTIPLE USING $RES FOR 100 MS $500MS = 50. ;MULTIPLE USING $RES FOR 1/2 SECOND $1SEC = 100. ;MULTIPLE USING $RES FOR 1 SECOND MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; TIMES STATES. ; ; ; C / R V E C T O R I N F O R M A T I ONOT YET U/W CMP (R5)+,(R1)+ ;SET 1 IN R5 & BUMP PTR JSR PC,@R4  ;PAD WITH BLANK ROLB R5  ;DONE 7 TIMES? BCC .-4 SWAB R0  ;RESTORE PRINT BYTES BR DU.LLF  ;CONTINUE BELOW DU.LLE: MOV #2230,R3 ;RESET CO2A CTRL MOV (R1)+,R5 ;SET CONTENT IN BUFFER JSR PC,DU.LGA DU.LLF: BIT #17,R1  ;OUTPUT 8 CONTENTS? BNE DU.LLD DU.LLG: JSR PC,@R4  ;PRINT : SET BY CO2A SUBR SWAB R0  ;FOLLOWED BY SPACE MOV R1,R5  ;SAVE POINTER SUBIT ;ROUTINE TO PROCESS DEVICE UNIT NO.: AS.CVU: TST (R4)+  ;IF NOT FOLLOWED BY FILE ... CMP R4,R0 BEQ .+4 DEC R2  ;... MUST ALLOW 2ND DELIMITER ;GENERAL ROUTINE TO CVT 3 OCTAL DIGITS TO BYTE: AS.CUS: JSR PC,AS.CGB ;CALL CO-ROUTINE FOR DIGIT BR AS.CVN  ;GO CHECK VALIDITY AS.CUG: ASL @R0  ;IF VALID DO FIRST ROT8 ADD #10,@SP  ;RECALL CO-RTN FOR REST JSR PC,@(SP)+ BEQ AS.CNX  ;IF NO NEW BYTE, NO MORE AS.CVN: BIT #340,@R0 ;ROOM FOR THIS BYTE? BNE AS.C MOV PC,@R1  ;FORCE ALL KBD INTS HERE IF NOT ADD #TM.KIS-.,@R1 TM.SIF: MOV PC,-(SP) ;GET INFILE BLOCK ADD #TM.INF-.,@SP MOV R3,-(SP) ;... & INIT INBLOCK EMT .INIT MOV R3,-(SP) ;GET READY FOR OPEN MOV R0,-(SP) ;BUT FIRST SEE IF HDR DONE EMT .WAIT EMT .OPEN  ;IF SO OPEN INPUT FILE MOV V.EOM-V.OSW(R4),R2 ;RESET EOM.... MOV 4(SP),V.EOM-V.OSW(R4) ;...NOW BUFFERS EST. MOV R2,4(SP)  ;(BUT SAVE FOR LATER)  N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162 ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMP #20,R1  ;GO BACK TO LINE START MOV R0,R3  ;HOLD SPACE FOR OP BELOW TST R2  ;DONE ALL PRINTING REQUESTED? BPL .+6  ;IF NOT SET UP BYTE PRINT ADD R2,R5  ;OTHERWISE ONLY REMAINDER REQD. ADD R2,R5 DU.LLH: JSR PC,@R4  ;PRINT BYTE (OR SPACE) CMP R1,R5  ;AT END YET? BHIS DU.LLJ  ;IF SO GO OUT NOW CMP R1,@SP  ;BEFORE ACTUAL START? BLT DU.LLI  ;IF SO PRINT SPACE MOVB @R1,R0  ;OTHERWISE PRINT BYTE IN ASCII ADD R3,R0  ;(200-237:=300-337 & BIER  ;IF NOT, THAT'S IT SUB #60,R4  ;OCTAL DIGIT? CMPB R4,#7 BLOS AS.CUG  ;IF SO BUILD IN DEC R1  ;OTHERWISE GO BACK TST 4(SP)  ;IF FIRST BYTE OF UIC BEQ AS.CNX  ;... COULD BE , - CHK AS.CER: CLR R5  ;IF NOT, ERROR ALSO BR AS.CNX  ;SET FLAG & EXIT ;LOG NAME PROCESSING: AS.CDN: JSR PC,AS.CRP-2 ;RAD50 PACK NAME CMP (SP)+,(SP)+ ;ON RETURN TIDY STACK MOV AS.CO-4,R0 ;GET PART 3 BLOCK ADD #KBI.OS,R0 ;ERROR EXIT: AS.XT:;GET COMMAND INPUT: TM.RDS: MOV PC,-(SP) ;PRINT READY MARK ($) ADD #TM.DOL-.,@SP MOV R0,-(SP) EMT .WRITE MOVB @PC,@#177560 ;REENABLE KBD INTS MOV #EMT+.KBI,TM.KIG ;INIT. FOR KBI CALL IF NEC. TM.RDC: MOV PC,R5  ;SET POINTER TO BUFFER ADD #TM.IBF-.,R5 MOV R5,-(SP) ;... & SET UP READ MOV R3,-(SP) EMT .READ MOV PC,R2  ;SET POINTER TO CHECK TABLE ADD #TM.CTB-.,R2 CMP (R5)+,(R5)+ ;MOVE TO BUFF BYTE COUNT MOV R3,-(SP) ;WAIT FOR IRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 C @PC,R0  ;340-377:=240-277) ADD R3,R0 DU.LLI: INC R1  ;BUMP POINTER BR DU.LLH  ;GO BACK TO PRINT & GET NEXT DU.LLJ: MOV #12,R0  ;SET UP PRINT LINE-FEED TST R2  ;FINISHED YET? BLE DU.LOD  ;IF SO GO OUT NOW BIT #77,R1  ;DONE 8 LINES? BNE DU.LLC JSR PC,@R4  ;IF SO PRINT L/F NOW ... BIT #777,R1  ;DONE PAGE YET? BNE DU.LLB  ;NO - OUTPUT LINE FEED ONLY MOVB @#TKB,R5 ;KEYBOARD STRIKE? BIC #200,R5  ;IF SO IS IT CTL/C? CMPB R5,#3 BNE MOV #177566,R4 ;RESET TPB POINTER .=.+AS.CO+376-. AS.ND2=. V.RRES=46 .=.+AS.CO-2+KBI.OZ-. .EOT ;ASSIGN PROCESSOR PART 3 ; ; A) FOR COMMAND WITH ARGUMENTS SETS UP TABLE ; ENTRY AS STORED ON TOP OF THE STACK (R2 POINTING ; AT BOTTOM):- ;  1) AT THE TOP OF FREE CORE IF USER PROGRAM ; IS NOT UNDERWAY. TABLE AREA CLAIMED IS INCLUDED ; WITHIN THE THEN RESIDENT MONITOR ;  2) IF USER PROGRAM HAS BEEN STARTED, CLAIMS ; BUFFER FOR NEW ENTRY - IF NONE AVAILNPUT TO COMPLETE EMT .WAIT MOV (R5)+,R1 ;NOW GO TO END BYTE ADD R5,R1 CMPB -(R1),#13 ;IF VT, CTL/C INPUT BNE TM.DEC MOV PC,-(SP) ;SO ECHO ACCORDINGLY ADD #TM.CTLC-.,@SP MOV R0,-(SP) EMT .WRITE MOV R0,-(SP) ;... & WAIT TILL DONE EMT .WAIT BR TM.RDC  ;RETURN FOR COMMAND PROPER TM.OTHR: HALT  ;NOT YET IMPLEMENTED!! BR .-2 ;COMMAND RECEIVED - CHECK IF HANDLED BY TMON: TM.DEC: CLRB  ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;********************************************************************** ;* **  DU.LLA  ;IF NOT CONTINUE DU.LOD: CMP (R0)+,(SP)+ ;MAKE LINEFEED FORMFEED JSR PC,@R4  ;...& PRINT IT MOV R0,R1  ;FORCE R1 POSITIVE BR DU.GXT  ;TAKE COMMON EXIT ;OCTAL TO ASCII CONVERSION: DU.LGA: JSR PC,@R4  ;PRINT CHAR IN R0 MOV R3,R0  ;NOW SET WITH CTRL WORD DU.LGL: ASL R5  ;GET BIT FROM NUMBER ... ROLB R0  ;.. & MOVE INTO PRINT BYTE BCC DU.LGL  ;MARKER BIT OUT AT FRONT? JSR PC,@R4  ;IF SO DIGIT DONE - PRINT CLRB R ABLE WILL REJECT ; COMMAND WITH R1 SET TO -7 TO SHOW NO ROOM. ; (OTHER ENTRIES FOR SAME LOG NAME WILL BE DELETED) ; ; B) FOR COMMAND WITH NO ARGUMENTS, REMOVES ALL ; EXTANT TABLE ENTRIES. (ACCEPTABLE ONLY IF NO USER ; PROGRAM IS RESIDENT IN CORE - OTHERWISE COMMAND WILL ; AGAIN BE REJECTED, THIS TIME WITH R1 SET TO -2 ; TO SHOW INVALIDITY. ; .BYTE 0,-1  ;IN USE/NO SHARE SW. ;SET UP & CHECK TYPE OF OPERATION: AS.DO: MOV @#V.RRES,-(SP) ;GET BACK PART 2 REGS. JSR R5,@(SP)+  @#177560 ;STOP INTS WHILE CMD PROCESSED MOV R5,-(SP) ;SAVE BUFF START PTR CMPB (R5)+,#73 ;... & LOOK FOR COMMENT BEQ .+6 CMP R5,R1 BLOS .-10 MOVB #15,-(R5) ;IF FOUND REPLACE WITH RETURN MOV R5,R1  ;RESET END ACCORDINGLY MOV (SP)+,R5 ;RESET START PTR CMPB @R1,@R5  ;END HERE ALSO? BEQ TM.RDS  ;IF SO NO ACTION - GET NEXT INPUT CMPB @R1,-1(R1) ;SET END BEYOND 1ST CR BEQ .+4 INC R1  ; (COULD BE 2 FROM ABOVE) CMP @R5,(R2)+ ;GET 1ST 2 CHARS  ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 0  ;RESET MARKER & ASCII BITS BISB #23,R0 ASL R0  ;DONE ALL DIGITS? BCC DU.LGL MOV #20072,R0 ;PREP PRINT SPACE & : RTS PC  ;... & EXIT ;LINE PRINTER ERROR: DU.ER4: MOV @#V.SVT.,R5 ;CLEAN UP STACK MOV V.SSP(R5),SP ;ERROR IN FUNCTION: DU.ER5: MOV #-4,R1  ;GIVE ERROR CODE (NEG. VALUE) ;COMMON EXIT: DU.GXT: MOV (SP)+,R4 ;RESTORE TPB ADDRESS CLR R5  ;SHOW NOW DONE INC DU.ND2+4 ;RECALL KBL BY DROP THRU ;MISCELLANEOUS DEFINITIONS: V.SVT.=40 V.RRES=46 CMP (SP)+,(SP)+ ;REMOVE PART 2 CALL INC AS.ND3+4 ;MUST RECALL KBL THIS TIME MOV @#V.SVT,R1 ;GET PTR TO SVT. MOV R1,R0  ;... & HENCE TO TABLE IF ANY ADD #V.BAT,R0 MOV R0,R5  ;ALSO TO MON/USER SW. ADD #5,R5 TST @SP  ;SET UP OR CLEAR? BEQ AS.CLR  ;GO ELSEWHERE FOR LATTER ;REDUCE NEW ENTRY TO FINAL FORM: MOV SP,R2  ;GET BOTTOM OF ENTRY ADD #12,R2  ; (UNIT WORD) MOV SP,R3  ;FORGET LOG NAME FOR NOW TST (R3)+ SWAB @... BEQ TM.CMD  ;... & CHECK WITH INTERNAL CMDS BHI .-4 TM.CLI: JSR PC,TM.GKI ;CALL KBI BR TM.RDS ;... CALL NORMAL INTERPRETER: ; EXPECTS R1,R4 & R5 SET AS SHOWN ON KBI LISTING TM.GKI: MOV 2(SP),R2 ;GET START OF MINIMAL DRIVER MOV -(R2),R2 ;GET PTR TO SAVE AREA CMP (R2)+,(R2)+ ;SKIP ITS OUTBUFF PTRS INCB @(R2)+  ;... BUT FORCE PROPER EXIT MOV R4,-(SP) ;SAVE IMPORTANT REGS MOV R3,-(SP) MOV  200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REV.SSP=52 TKB=177562 LPS=177514 LPB=177516 .=.+DU.LP+376-. DU.ND2: .=.+DU.LP-2+KBI.OZ-. ;DUMMY BLOCKS FOR OTHER DEVICES: ; ;ONLY DEVICE CURRENTLY IMPLEMENTED IS LINE PRINTER ; DRIVERS FOR OTHER DEVICES WILL COME HERE ; IF PROVIDED. UNTIL THEN THIS SEQUENCE WILL ; CAUSE COMMAND TO BE REJECTED VIA KBL RECALL ; WITH R5 CLEARED, R4 UNCHANGED AND R1 SET TO ; -4 TO INDICATE DEVICE ILLEGAL ; .BYTE 0,-1  ;IN USE/ERROR SWITCHES DU.IXT: MOV @#V.RRES,-(SP) ;RESTOR2  ;ADJUSY UNIT WORD ... MOVB #4,@R2  ;... TO SHOW WORD COUNT AS.CDL: TST (R3)+  ;LOOK FOR NON-0 ENTRY BNE AS.CDD DECB @R2  ;ADJUST BYTE COUNT UNTIL FND MOV (SP)+,@SP ;... & MOVE DOWN LOG NAME CMP R3,R2  ;... AS FAR AS UNIT WORD BLO AS.CDL AS.CDD: CMP (R2)+,(R2)+ ;GET PROPER STACK TOP ;CHECK IF TABLE ALREADY - IF NOT START ONE: MOV @R0,R4  ;ANY TABLE YET? BNE AS.TUW TSTB @R5  ;PROGRAM UNDERWAY? BNE AS.SUB  ;IF PROGRAM U/W SPEC ACTION REQD R0,-(SP) MOV R2,-(SP) ;... & END OF SAVE AREA MOV (R2)+,R4 ;PICK UP TPS POINTER CLR R0  ;RAISE PRIORITY TO 4 ... MOV @R4,-(SP) ;...& RETURN WITH IT MOV (R4)+,-(R0) ; (USING DONE BIT) JSR PC,TM.KIG ;SIMULATE CALL TO KBL ...    ;... & THENCE TO KBI ;ON RETURN, WAIT END OF TERMINAL MESSAGE: MOV (SP)+,R0 ;GET BACK KBD SAVE PTR MOV R3,-(R0) ;... & INSERT PTRS FROM KBL MOV R2,-(R0) MOV R1,-(R0) CLRB @#177776 ;SAFE NOW TO DROP PRIORITY MOV (SP)+,RGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;L/P # 1 COMMAND REGISTER CMD.2 RE REGISTERS JSR R5,@(SP)+ CMP (SP)+,(SP)+ ;CLEAR CALL OFF STACK MOV #-4,R1  ;RETURN ERROR CODE CLR R5  ;SET KBL NO ACTION INC DU.ND3+4 ;RECALL KBL BR DU.ND3 .=.+DU.IXT+376-. DU.ND3: .=.+DU.IXT-2+KBI.OZ-. .END  MOV @R1,R3  ;NO - GET EOM TO ACCESS ... CMP -(R3),-(R3) ;LINK WORDS ALREADY PROVIDED TSTB -1(R5)  ;IF PROGRAM IN CORE ... BEQ AS.STS CMP R3,V.BFE(R1) ;... & NO ADDITIONS TO RESMON BNE .+4 TST (R3)+  ;... LEAVE ONE AS SW. AS.STS: MOV R3,@R0  ;STORE RESULTANT START ADDR BR AS.SUG  ;CONTINUE LATER ;IF TABLE EXISTS, FIND END: AS.TNX: CMP (R3)+,#-1 ;LOOK FOR SEGMENT END BNE .+6 MOV @R3,R3  ;IF FOUND GET NEXT LINK BR AS.TU0 ;RESTORE TMON REGS. MOV (SP)+,R3 BITB #100,@R4 ;CHECK PRINTER BUSY ... BNE .-4  ;... & WAIT TILL MSGE DONE MOV (SP)+,R4 ;WHEN DONE, .... RTS PC  ;...RETURN FOR NEXT INPUT TM.KIG: EMT .KBI  ;RTN ADDR ON STACK = KBL CALL ;KEYBOARD INTERRUPT SERVICE: TM.KIS: MOV @#V.RSAV,-(SP) ;SAVE REGS. JSR R5,@(SP)+ MOV #177562,R3 ;SET PTR TO TKB MOV @R3,R0  ;... & GET INPUT MOVB R0,-(SP) ;STRIP PARI = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; ; LPSIZE = 132. ; ; PIW+2  ;START CHECK AFRESH MOVB 2(R3),R4 ;IF NOT THERE GET NEXT ENTRY ASL R4 CMP (R4)+,(R4)+ ADD R3,R4 CMP -(R3),@SP ;SAME DATASET? BNE AS.TUW MOV #-1,(R3)+ ;IF SO REPLACE WITH LINK MOV R4,@R3 AS.TUW: MOV R4,R3  ;RESET PTR .... TST @R3  ;... & LOOK FOR END BNE AS.TNX ;END FOUND - CHECK USER PROGRAM STATE: CMP -(R3),#-1 ;PREVIOUS WORD A LINK? BEQ .+4  ;IF SO REMOVE IT TST (R3)+ TSTB @R5  ;USER UNDERWAY? BEQ AS.SUG AS.SUB: MOV #1TY BIT IF ANY BICB #200,@SP CMPB (SP)+,#3 ;LOOK FOR CTL/C BNE .+6 ADD #10,R0  ;CVT CTL/C TO VT MOV @#V.SVT,R4 ;GET KB DVR ADDRESS MOV @V.KBA(R4),R1 CLR -(SP)  ;... & BUILD INTSVCE ENTRY MOVB 5(R1),@SP ADD R1,@SP CLR -(R3)  ;STOP INTS FOR NOW JMP @(SP)+  ;... & GO TO DVR .EOT ;INTERNAL COMMAND - DESPATCH TO SERVICING ROUTINE: ; MUST ASCEND IN ORDER OF 2ND CHAR. VALUE TM.CTB: .WORD NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P $NLINE = 56. ; MAX LINES/PAGE (=CONTROL TAPE. $LPERR = 10. .PAGE ;*********************************************************************** ;* ** ;* MACROS TO SATISFY THE DIRECTIVES PRESENT IN PALRES ** ;* (OUP-11 V002A .GLOBL GETDEC .CSECT .TITLE .ALLOC .ALLOC: JSR R5,.GETLK JSR R5,.GETFN MOV #LKBKDU+10,R0 ;CNT OF NO. WORDS TO FOLLOW TST1: TST (R0) BEQ ERR1 CMP (R0),#2 BLT ERR1 ;NO NUMBER IN ADDRESS FIELD MOV (R0),R1 ;CNT TO R1 ROL R1 ;MULTIPLY CNT X 2 ADD R1,R0 CMP (R0)+,#"AL BNE TST1 FOUND: CMP -(R0),-(R0) ;BACK UP R0 TO ADDRESS MOV (R0),R0 JSR R5,GETDEC ;GET NO. BLKS TO BE ALLOC. TST R0 BMI ERR1 ;NO. TOO BIG MO,-(SP) ;IF SO MUST GET BUFFER MOV @#V.GTB,-(SP) JSR R5,@(SP)+ MOV (SP)+,R4 ;... IF ANY AVAILABLE BEQ AS.ER1  ;IF NOT TREAT AS ERROR TST @R0  ;FIRST ENTRY? BNE .+6 MOV R4,@R0  ;IF SO STORE IN SVT. BR AS.SUG-2 MOV #-1,(R3)+ ;OTHERWISE SET LINK MOV R4,@R3 MOV R4,R3  ;.... & RESET PTR ;SET UP TABLE ENTRY: AS.SUG: MOV (SP)+,(R3)+ ;STORE LOG NAME MOV R2,R4  ;STORE BOTTOM OF NEW ENTRY MOV -(R4),(R3)+ ;... & MOVE IN CMP R4,SP BNE .-4 "GE .WORD "FI .WORD "LO .WORD "OT .WORD "RU .WORD -1  ;STOP CODE TM.CMD: MOV R5,-(SP) ;SAVE START OF STRING MOVB -(R1),-(SP) ;LEAVE SCRATCH ROOM TM.CML: CMP R5,R1 ;SEARCH FOR END OF CMD NAME BEQ TM.CMG MOVB (R5)+,@SP ;LEAVE PTR ON RETURN ... CMPB @SP,#40  ;... OR BEYOND SPACE BEQ TM.CMG CMPB @SP,#54  ;... OR COMMA BNE TM.CML TM.CMG: ADD TM.DTB-TM.CTB(R2),R2 ;DESPATCH AS REQD. TM.DTB: MOV R2,PC .WORD TM.GE-TM.CTB-2 .WORD TM.FI-T!R VERSION OF PAL11R) BUT NOT PRESENT IN MACRO-11R. ** ;* ** .MACRO .REF A,B,C,D,E,F,G,H,I,J .IRP X, .GLOBL X .ENDM .ENDM .REF .MACRO .DEF A,B,C,D,E,F,G,H,I,J .REF A,B,C,D,E,F,G,H,I,J .ENDM .DEF ; ; ; ; MACRO DEF. FOR QUEUES ; .MACRO .QUE A,B,C .BOUND .LIST ME A = ."V R0,-(SP) MOV #FNBK01,-(SP) MOV #LKBK01,-(SP) EMT ALLOC CMP (SP),#-1 BNE ERR2 ;UNSUCCESSFUL ALLOC TST (SP)+ MOV #LKBK01,-(SP) EMT RELEAS RTS R5 ;RETURN TO PIP ERR1: MOV #S203,.ERCDW ;ILLEGAL COMMAND SYNTAX JSR R5,.ERRFT ERR2: MOV (SP)+,.AUXWD MOV #S240,.ERCDWD ;INSUFFICIENT # BLKS. AVAILABL JSR R5,.ERRFT .END # MOV #177566,R4 ;RESET TO TPB BR AS.CLX  ;JOIN CLEAR ROUTINE FOR EXIT ;COMMAND HAS NO ARGS - CLEAR PRESENT TABLE: AS.CLR: MOV SP,R2  ;SET POINTER BELOW DUMMY TABLE ADD #16,R2 TSTB -1(R5)  ;CHECK IF PROGRAM IN CORE BNE AS.ER2  ;REJECT COMMAND IF SO MOV @R0,R3  ;OTHERWISE GET START OF TABLE BEQ AS.RTN  ;... IF ANY!! CLR @R0  ;... & REMOVE FROM SVT. ;COMMON EXIT - PROVIDES LAST LINK - ; & ADJUSTS EOM IF NECESSARY: AS.CLX: CLR (R3$M.CTB-4 .WORD TM.LO-TM.CTB-6 .WORD TM.OT-TM.CTB-10 .WORD TM.RU-TM.CTB-12 ;LOGIN SERVICE: ; PRESENTLY MERELY ACCEPTS & STORES U.I.C. ;  (PASSWORD & ENTITLEMENT CHECKING MAY BE ADDED) ; COMMAND REJECTED IF ERROR IN FORMAT OR ; USER ALREADY LOGGED IN ;GET CODE ENTERED: TM.LO: MOV R4,R2  ;GET PTR TO UIC IN SVT. ADD #V.UIC-V.OSW,R2 MOV #-2,@SP  ;SET ERROR CODE (INV CMD) TST @R2  ;ALREADY USER ON? BNE%-4 B = .-2 .REPT C .WORD 0 .IFZ $KT11C .WORD .-2 ; NOTE: PPA WHEN RESOLVED BY IPL .ENDC .IFNZ $KT11C .PACK .-2 .ENDC .ENDR .NLIST ME .ENDM ; ; MACRO TO SET PRIORITY LEVEL 7 ; .MACRO .LOCK PSR = 177776 .IFZ $1145 MOVB #340,@#PSR .ENDC .IFNZ $1145 SPL 7 .ENDC &')+  ;CLEAR TWO LINK WORDS CLR (R3)+ TSTB @R5  ;PROGRAM UNDERWAY? BNE AS.RTN MOV R3,(R1)+ ;IF NOT SET NEW MONTOP TSTB -(R5)  ;IF NOT IN TMON CTRL ... BEQ AS.RTN ADD #40,R3  ;.. SET TOB ALSO MOV @(R1)+,@R3 ;RESET STACK STOP CLR @-(R1)  ;... & REMOVE OLD MOV R3,@R1  ;STORE NEW TOB BR AS.RTN .=.+AS.DO+376-16-. AS.ER1: MOV #-7,R1  ;FOR ERROR EXIT ... BR .+6  ;... GIVE APPROPRIATE CODE AS.ER2: MOV #-2,R1 AS.RTN: CLR R5  ;ALSO FOR ALL ( TM.ERR DEC @SP  ;ADJ. ERROR (ILL SYN) MOV R5,-(SP) ;IF NOT PUSH PRESENT STRING PTR TM.LOG: CMP @SP,R1  ;IF ALREADY AT END ... BHIS TM.LOE  ;... MUST BE ERROR SWAB @R2  ;ADJUST BYTES (VALID PASS 2) MOV #4,-(SP) ;GET OCTAL TO BIN CVT EMT .CVT MOV (SP)+,R5 ;IF RETURN VALUE = 0 BEQ TM.LOE  ;... IT'S ALSO AN ERROR CMP R5,#377  ;ALSO IF OVER BYTE SIZE! BHIS TM.LOE MOVB R5,@R2  ;STORE VALID BYTE INC @SP  ;ASSUME DELIMITED BY COMMA TSTB 1 ; ; SET INTERRUPT LOCKOUT .ENDM ; SET DONE MOV R2,SP  ;CLEAN UP STACK AS.ND3=.   ;.... & DROP THRU TO EXIT V.SVT=40 V.RRES=46 V.GTB=54 V.BAT=12 V.BFE=56 .=.+AS.DO-2+KBI.OZ-. .END ,(R2)  ;IF ONLY 1 BYTE DONE, ... BEQ TM.LOG  ;... REPEAT ;INPUT APPARENTLY VALID: ; CHECK IF USER ACCEPTABLE TO BE DONE HERE ;ALL O.K. - EXIT FOR NEXT COMMAND: TM.LOA: CMP (SP)+,(SP)+ ;CLEAN UP STACK MOV (SP)+,R5 ;GET BACK STRING PTR MOV PC,R2  ;SET UP FOR DATE MESSAGE ADD #TM.DAT-.,R2 TM.DTP: MOV R2,-(SP) ;OUTPUT LATTER MOV R0,-(SP) EMT .WRITE MOV R5,R1  ;SIMULATE KBD CMD MOV 6(R2),(R1)+ -T FILE SPECIFIER TST LKBKDU+6 ;WAS AN OUTPUT SPECIFIED? BNE .SWOS1  ;YES TST (SP)  ;MORE SPECIFIERS TO COME? BEQ .SWOS2  ;NO-LEGAL .SWOS5: MOV #S204,.ERCDW ;YES JMP .ERRFT  ;PRINT IT .SWOS2: CLRB .NUMOT  ;NO OUTPUT SPECIFIERS BR .PREOP  ;GO TO PRE-OPERATION DISPATCH .SWOS1: BIT (SP),#2  ;ENOUGH SWITCH ROOM? BEQ .SWOS3  ;YES MOV #S203,.ERCDW ;NO JMP .ERRFT  ;PRINT IT .SWOS3: JSR R5,.SWLOG ;LOG THEM IN TST SWCNT BLE .SWOS4./ ; PIP-11 V002A ;CLEARS LOCK BITS + USAGE CN0 MOVB #15,(R1)+ MOV R0,-(SP) ;WAIT TILL PRINT DONE EMT .WAIT TM.DTD: JSR PC,TM.GKI ;GET DECODED VALUE PRT MOV PC,R2  ;NOW SET UP FOR TIME ADD #TM.TIM-.,R2 MOV PC,R5  ;MUST RESET BUFF PTR ADD #TM.IBF+6-.,R5 COM R4  ;BEEN HERE BEFORE? BMI TM.DTP  ;IF SO DONE ALRDY JMP TM.RDS  ;... GET NEXT CMD ;ERROR IN INPUT: TM.LOE: CLR @R2  ;REMOVE UIC IF INVALID TST (SP)+  ;AGAIN TIDY STACK TM.ERR: MOV (SP)+,R1 ;PICK UP ERROR CODE CLR (SP)+  ;ONE1  ;ALL SWITCHES SEEN ARE LEGAL MOV #S203,.ERCDW ;SWITCH NOT RECOGNIZED JSR R5,.ERRFT .SWOS4: CMP (SP)+,#1 ;MORE FILES TO COME? BEQ .PREOP  ;NO-ALL IS OK TSTB .NUMIN  ;IF NO INPUTS,MULTIPLE OUTPUTS OK BEQ .SWSO BR .SWOS5  ;ERROR 4 .PREOP: MOV #.PREQF,R3 ;SET UP TABLE SEARCH .PROP2: ADD #4,R3  ;BUMP R3 TO FLAG TST (R3)+  ;FLAG SET? BNE .PROP1  ;YES CMP R3,#.ENTB2 ;END OF TABLE 2 ;PIP-11 V002A ;//////////////////////////////////////////////////// ;//////////////////////////////////////////////////// ;////////////////// SUBROUTINE PROTECT ////////////// ;//////////////////////////////////////////////////// ;//////////////////////////////////////////////////// ;ROUTINE TO CHANGE A FILE'S PROTECTION ;RENAMES FILE A TO FILE B,THEN RENAMES FILE B BACK WITH ;NEW PROTECTION .TITLE PROTEC .GLOBL .PROT .GLOBL .NUMIN,FNB3T IN UFD .CSECT .TITLE .UNLOC .UNLOC: JSR R5,.GETLK JSR R5,.GETFN JSR R5,START MOV #LKBK01,-(SP) EMT 7 ;RELEASES RTS R5 ;RETURN TO PIP START: MOV #LKBK01,LKBK JSR R5,FINDUC JSR R5,GETUFD BR NOTFND ;NO UFD FOUND SERCH: TST (R2) ;SEARCH UFD FOR MATCHING FILNAM.EXT BEQ NXT ;NO ENTRY HERE MOV R2,R1 ;PNTR1 TO UFD FILNAM CMP (R1)+,FNBK01 BNE NXT CMP (R1)+,FNBK01+2 BNE NXT CMP (R1)+,FNBK01+4 BNE NXT FOUND: CLRB 14 MORE CLEAN UP! CLR R5  ;SET DONE FLAG FOR KBL MOV #EMT+.KBL,TM.KIG ;... & PREPARE CALL IT COM R4  ;SET SWITCH FOR EXIT BR TM.DTD  ;GO TO IT TM.OT=TM.ERR-2 ;FINISH SERVICE: ; THIS VERSION MERELY CLEARS CURRENT USER - ; REQUIRES EXPANSION TO INCLUDE DISK CLEARANCE TM.FI: CMPB (R1)+,(SP)+ ;TIDY STACK MOV (SP)+,R5 ;... & GET BACK STRING START MOV PC,R2  ;PRINT TIME MESSAGE ADD #TM.TIM-.,R2 MOV 5SEARCH? BLO .PROP2  ;NO BR .ACDSP  ;YES-GO TO ACTION DISPATCH .PROP1: DEC -(R3)  ;DECREASE FLAG JSR R5,@-(R3) ;DISPATCH TO ROUTINE INC ACFLAG BR .PREOP  ;SEE IF ANY MORE .ACDSP: TST .ACT  ;ANY ACTION SWITCHES SEEN? BNE .ACDS1  ;YES CMPB .NUMIN,#0 BEQ .POSOP  ;NO INPUTS SO DON'T TRANSFER CMPB .NUMOT,#0 BEQ .POSOP  ;NO OUTPUTS SO DON'T TRANSFER JSR R5,.TFR  ;DISPATCH TO TRANSFER ROUTINE INC ACFLAG BR .POSOP  ;GO TO PO6K01,LKBK01,FNBKDU,LKBKDU .GLOBL .CSII2,.CSII5,.CSII4,GETOCT,.FLAG1,.MOVLK .GLOBL .MOVFN,.ERCDW,.ERRPR,.ERRFT .PROT: TSTB .NUMIN ;NO OUTPUT FILES GIVEN? BNE .PERR ;NO-ERROR JSR R5,.CSII2 ;YES-SET UP .CSII2 .PRR: JSR R5,.CSII5 ;GET FIRST OUTPUT MOV R0,.FLAG1 ;SAVE MORE FLAG IN .FLAG1 JSR R5,.MOVLK LKBKDU ;GET LKBKDU INTO LKBK01 LKBK01 JSR R5,.CSII4 ;GET FILE NAME JSR R5,.MOVFN FNBKDU FNBK01 ;COPY IT INTO FNBK01 MOV #LKBKDU+170(R2) ;CLEAR LOCK BITS & USAGE CNT JSR PC,WRBLK ;IN 4TH WORD, LOW BYTE RTS R5 NXT: JSR R5,ENDTST BR SERCH ;NOT END ;END - FILNAM NOT FND NOTFND: MOV #S237,.ERCDW ;NO - FILNAM NOT FOUND JSR R5,.ERRFT ;FATAL ERROR .END 8R2,-(SP) MOV R0,-(SP) EMT .WRITE MOV 6(R2),@R5 ;SIMULATE TIME CALL MOV R0,-(SP) ;... AFTER PRINT DONE EMT .WAIT JSR PC,TM.GKI MOV V.CSA-V.OSW(R4),R0 ;SAVE DATE & TIME CLRB R0  ;... ABOVE TMON ADD #V.DAT-V.OSW,R4 MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ MOV V.DDL-V.DAT-6(R4),R4 ;NOW DETERMINE SYSTEM DISK JSR R5,TM.DSK .WORD 177462  ;DISK TYPE TABLE:- .RAD50 'DF'  ;GIVES H/W WC REG & NAME .WORD 177406 .RAD50 'DK' .WOR9ST-OP DISPATCH .ACDS1: MOV .ACT,R3 JSR R5,(R3)  ;DISPATCH TO ACTION ROUTINE INC ACFLAG .POSOP: MOV #.PSTQF,R3 ;SET UP SEARCH .POSP2: ADD #4,R3  ;MOV TO FLAG TST (R3)+  ;FLAG SET? BNE .POSP1  ;YES CMP R3,#.PREQF ;END OF SEARCH BLO .POSP2  ;NO TST ACFLAG BNE .POSP3  ;OK - ACTION TAKEN ON COMMAND MOV #S242,.ERCDWD ;GARBAGE COMMAND JSR R5,.ERRFT .POSP3: JMP .RES  ;GET ANOTHER STRING .POSP1: DEC -(R3)  ;CLEAR FLAG JSR R5,@-(R:0,R0 ;SET UP SWITCH INTERFACE .PR2: CMP (R0)+,#PR ;FIND PR SWITCH BEQ .PRO1 BR .PR2 ;KEEP LOOKING .PRO1: SUB #4,R0 ;POINT TO ADDRESS OF ASCII DIGITS MOV (R0),R0 ;R0 NOW POINTS TO ASCII STRING JSR R5,GETOCT ;GET BINARY TST R0 BMI .PERR3 MOV R0,.ADDR1 ;SAVE PROTECTION MOV #LKBK01,-(SP) EMT INIT ;INIT DEVICE MOV #FNBKPR,-(SP) ;NEW NAME MOV #FN;<D 0  ;TO BE INSERTED LATER .RAD50 'DP' .WORD 177450 .RAD50 'DC' .WORD 0,0,0,0  ;SPARES TM.DSK: MOV (R5)+,R1 ;COLLECT H/W REG ADDR CMP (R5)+,@R4 ;CHECK IF DISK REQD BNE TM.DSK TM.DGO: RESET   ;FOR NOW CALL BOOT FROM HERE MOV #-64.,@R1 ;WILL BE REPLACED ... MOV #5,-(R1) ;... BY ROM CALL LATER TSTB @R1 BPL .-2 TST (R1)+ BMI TM.DGO CLR PC  ;GO RELOAD MONITOR ;RUN-GET SERVICE=3) ;DISPATCH TO POST OP INC ACFLAG BR .POSOP  ;SEARCH FOR ANY OTHER .NYI: MOV #S203,.ERCDW ;E9=NOT YET IMPLEMENTED JSR R5,.ERRFT ;//////////////////////////////////////////////////////// ;//////////////////////////////////////////////////////// ;/////////////// SUBROUTINE SWLOG /////////////////////// ;//////////////////////////////////////////////////////// ;//////////////////////////////////////////>BK01,-(SP) ;OLD NAME MOV #LKBK01,-(SP) EMT RENAME ;RENAME TO TEMP FILE NAME MOV .ADDR1,FNBK01+10 ;MOV IN NEW PROTECT CODE MOV #FNBK01,-(SP) ;NEW NAME MOV #FNBKPR,-(SP) ;OLD NAME MOV #LKBK01,-(SP) EMT RENAME ;RENAME BACK WITH NEW PROTECTION MOV #LKBK01,-(SP) EMT RELEAS ;RELEASE DEVICE TSTB .FLAG1 ;MORE OUTPUT BNE .PRR ;YES RTS R5 ;NO-GO HOME .PERR: MOV #S20@: ; A) CHECKS SPECIFIED INPUT AVAILABLE:- ; IF NO OWNERSHIP STIPULATED WHEN DEVICE ; IS FILE-TYPE, INPUT WILL BE ASSUMED ; INITIALLY TO BELONG TO LOGGED-IN USER ; OR, BY DEFAULT, TO THE SYSTEM. THERE ; WILL BE NO ASSUMPTION IF OWNER SPECIFIED. ; B) CALLS RUN-TIME LOADER TO ENTER PROGRAM. ; FOLLOWING 'RUN', PROGRAM WILL BE STARTED ; AUTOMATICALLY AT THE APPROPRIATE ADDRESS - ; THAT ESTABLISHED DURING ASSEMBLY OR AT ; LOAD POINT BY DEFAULT. ;GET SPECIFIED INPUT & CHECK AVAILABILITY:A////////////// ;ROUTINE TO SET UP SWITCH DISPATCH BY SETTING FLAGS ;FOR QUALIFIERS AND SETTING ADDRESS FOR ACTION DISPATCH. ;CALLED BY CONTROL ROUTINE WHEN A SWITCH IS SEEN .SWLOG: MOV LKBKDU+10,R0 ;MOV # OF WDS TO FOLLOW IN R0 TST R0  ;ANY SWITCHES AT ALL? BEQ .SWL10  ;NO-CHECK FOR * ROL R0  ;MAKE IT NUMBER OF BYTES ADD #LKBKDU+10,R0 ;R0 POINTS TO SWITCH ASCII .SWL5: MOV R0,R4  TST (R4)+  ;R4 POINTS TO NEXT SWITCH INC SWCNT  ;SWITCH-SEEN COUNT B5,.ERCDW ;ILLEGAL INPUTS JMP .ERRFT ;FATAL ERROR ;FS ERROR IN PROTECT .PERR3: MOV #S203,.ERCDW ;PROTECT CODE TOO LONG JMP .ERRFT .WORD 0 FNBKPR: .WORD 175777 ;DUMMY NAME FOR TEMPORARY .WORD 175777 ;FILE RENAME .WORD 176777 .WORD 0 .WORD 0 .ADDR: .WORD 0 ;LITTLE BUFFER TO STORE .WORD 0 ;SIX CHAR ASCII STRING .WORD 0 .ADDR1: .WORD 0 .END CD TM.GE: CLR R2  ;REMEMBER IT'S 'GET' TM.RU: MOV V.EOM-V.OSW(R4),@SP ;RESET EOM FOR .... MOV 10(SP),V.EOM-V.OSW(R4) ;PROG D/S SET UP MOV (SP)+,6(SP) ;... & MOVE TO STRING PTR MOV 2(SP),@#60 ;RESET FOR KBI OPERATION ... MOV R2,2(SP) ;... & SAVE REQT FOR START MOV @PC,@#177560 ;ALLOW INTS. AGAINST ERROR MOV #401,V.MUS-V.OSW(R4) ;ALSO ASSUME PROGRAM IN CORE MOV @SP,R2  ;USE CSI TO GET SPECIFICATION MOV #-3,-(SP) ;... WITH FIRST ERROR ILL SYN JSR PC,TM.CSI ;AEJSR R5,.ASCHK ;CHECK IF ACTION SWITCH TST R2  ;SUCCESS? BEQ .SWL3  ;NO TST .ACT  ;YES-IT IT FIRST ACTION SWITCH? BEQ .SWL4  ;YES MOV #S232,.ERCDW ;NO-MORE THAN ONE ACTION SWITCH JMP .ERRFT .SWL4: MOV R2,.ACT  ;SAVE ROUTINE ADDRESS .SWL3: TST (R4)  ;MORE SWITCHES? BEQ .SWL1  ;NO MOV (R4),R0  ;MOV # OF WDS IN R0 ROL R0  ;MAKE IT NUMBER OF BYTES ADD R4,R0  ;R0 POINTS TO SW VALUE BR .SWL5  ;LOOP TILL DONE .SWL1: MOV LKBKDU+10,RFG ;PIP-11 V002A ;////////////////////////////////////////////////////// ;////////////////////////////////////////////////////// ;///////////// SUBROUTINE RENAME ////////////////////// ;////////////////////////////////////////////////////// ;////////////////////////////////////////////////////// .CSECT .TITLE RENAME .GLOBL .RENAM .GLOBL .ERCDW,.ERRFT,HLSO CHECK INDIV OWNERSHIP BEQ TM.RUG  ;FILE FOUND - GO PROCESS MOV (PC)+,R2 ;SET UP FOR DEFAULT EXT. .RAD50 'LDA' TST 6(R1)  ; OWNER STIPULATED? BNE TM.RCM  ;IF SO CHECK AGAIN ;SPECIFIED FILE NOT THERE - TRY DEFAULTS: TM.RUR: MOV #401,6(R1) ;OTHERWISE TRY SYSTEM JSR PC,TM.DCK BEQ TM.RUG  ;O.K. GOT IT THIS TIME TST 4(R1)  ;ANY EXT. GIVEN? BNE TM.RER  ;IF SO THAT'S IT MOV R2,4(R1) ;OTHI0 ;#OF WDS TO FOLLOW IN R0 ROL R0  ;TIMES 2 ADD #LKBKDU+10,R0 ;R0 POINTS TO SWITCH ASCII .SWL11: MOV R0,R4 TST (R4)+  ;R4 POINTS TO NEXT SWITCH TO CHECK JSR R5,.QUACK ;CHECK FOR QUALIFIERS TST (R4)  ;MORE SWITCHES? BEQ .SWL10  ;NO MOV (R4),R0  ;# OF WDS IN R0 ROL R0  ;TIMES 2 ADD R4,R0  ;R0 POINTS TO ASCII SW BR .SWL11 ;/////////////// THIS PORTION OF SWITCH LOG TESTS FOR * SPECIFIER ;/////////////// IN COMMAND STRING. IF FOUND,ITJK.ERRPR,.MOVFN,.MOVLK .GLOBL .NUMIN,.NUMOT,.CSII,.CSII1,.CSII2,.CSII3,.CSII4,.CSII5 .GLOBL FNBK01,FNBK02,FNBKDU,LKBK01,LKBK02,LKBKDU ;SUBROUTINE TO PERFORM PIPS RENAME FUNCTION ;ONLY ONE INPUT AND OUTPUT FILES ALLOWED ;A,(R0)+ RTS PC ;CONVERT BINARY TO OCTAL ASCII (6BYTES) BTOA: MOV R3,-(SP) ;NO. TO CONVERT MOV R0,-(SP) ;ADDRESS OF DESTINANE MOV R1,#0  ;HOLD FOR LATER CHECKING TM.LBC=.-2 JSR PC,@R2  ;IGNORE LOAD ADDRESS JSR PC,@R2  ;GET GEN INFO MARKER CMP R1,#3401 ;CHECK IT'S CORRECT BNE TM.LCL  ;IF NOT THIS COULD BE 2ND LINE ;EXTRACT GENERAL INFORMATION: JSR PC,@R2  ;GET LOAD POINT MOV R1,-(SP) ;... & HOLD FOR MOMENT JSR PC,@R2  ;GET SIZE ... ADD @SP,R1  ;... & COMPUTE UPPER LIMIT SUB #2,R1 CMP R1,(R5)+ ;WITHIN  ;FATAL ERRORS: OUTPUT SPECIFIER IS NON FILE-STRUCTURED ;NON FATAL ERRORS: MORE THAN ONE OUTPUT SPECIFIER .GETLK: JSR R5,.CSII2 ;INITIALIZE INTERFACE JSR R5,.CSII5 ;GET OUTPUT SPECIFIER MOV FNBKDU+6,UIC JSR R5,UCGET ;GET UIC TST R0  ;ANY MORE OUTPUT SPECIFIERS? BEQ GETLNK  ;NO MOV #S204,.ERCDW ;TOO MANY OUTPUT SPECIFIERS JSR R5,.ERRFT GETLNK: JSR R5,.MOVLK LKBKDU LKBK01 INITO: MOV #LKBK01,-(SP) EMT INIT  ;INIT OUTPUT DEVICE MOV #LKBK01,LT R2 ;BYPASS READ CHECK,WRITE, BEQ .COPY2 ;AND WRITE CHECK ON 1ST PASS. BIT #RDCHK,2(R2) ;TEST FOR ERROR IN PREVIOUS READ. BNE .CERR2 ;YES-JMP TO ERROR PRINT. BIT #40000,2(R2) ;END OF DATA IN PREVIOUS READ? BNE .COPY4 ;YES-SKP TO SET FLAG. BIT 2(R2),#400 ;CHECK FOR INVALID LINE. BNE .CERR2 ;YES-INVALID LINE. BR .COPY1 ;GO TO WRITE. .COPY4: TST 4(R2) BEQ .COPOT ;NOTING READ-EXIT INCB .FLAG4 ;SET FLAG TO TERMINATE ;AFTER WRITE TION MOV #5,-(SP) ;CODE - BINARY TO OCTAL ASCII EMT 42 MOV #6,UPDFAC RTS PC ;CONVERT BINARY TO DECIMAL ASCII BTDA: MOV R3,-(SP) ;NO. TO CONVERT MOV R0,-(SP) ;ADDRESS OF DESTINATION MOV #3,-(SP) ;CODE EMT 42 MOV #5,UPDFAC RTS PC REPLZ: MOVB #40,R3 BR SUPLZ+2 SUPLZ: CLR R3 MOV R0,-(SP) ;SAVE ORIG. ADDRESS LZTST: CMPB (R0),#60 BNE UPDATE  ;NOT A LEADING ZERO MOVB R3,(R0)+AVAILABLE CORE? BHI TM.LE3  ;IF NOT REJECT MOV (SP)+,@R5 ;STORE LOAD POINT MOV @R5,#0  ;... & AGAIN SAVE TM.PLA=.-2 ADD #V.PSA-V.PLA,R5 ;MOVE TO PSA IN SVT. JSR PC,@R2  ;GET & STORE PROGRAM START MOV R1,(R5)+ TST @SP  ;CHECK IF 'RUN' BEQ .+4 MOV R1,@SP  ;IF SO HOLD START NOW JSR PC,@R2  ;GET & STORE DEBUGGER START MOV R1,(R5)+ JSR PC,@R2  ;GET RELOCATE FLAG TST R1  ;OBJECT IF SET ... BNE TM.LE2  ;... FOR THE PRESENT ADD #V.PGKBK JSR R5,SETUP ;SETUP FOR DISK OR DT  RTS R5  ;OK - FILE STRUCTURED DEV. MOV #S231,.ERCDW ;FATAL ERROR JSR R5,.ERRFT ;DEVICE NOT FILE STRUCTURED ;SEES WHETHER DEVICE IS FILE STRUCTURED ;IF SO SETS UP BUFFER SIZE, NOWDS/BLOCK ;BLOCK NO OF 1ST MFD FOR DEVICE SPECIFIED ;REQUIRES LKBK CONTAIN LKBK01 OR LKBK02 SETUP: MOV LKBK,-(SP) ;EXIT 1 - OK EMT STATUS  ;EXIT 2 - ERROR - NON FILE STRUCT. DEVICE MOV (SP BIT 2(R2),#2 ;IGNORE FOLLOWING TEST BEQ .COPY1 ;IF FORMATTED MODE. MOV R2,R0 ;WE MUST TEST IF LAST ADD #6,R0 ;LINE READ FROM FILE ADD 4(R2),R0 ;ENDS IN NUL. IF SO, DON'T TSTB -(R0) ;OUTPUT THE BYTE. BNE .COPY1 ;BRANCH IF NOT NUL. DEC 4(R2) ;DECREMENT BYTE COUNT .COPY1: MOV R2,-(SP) MOV #LKBK01,-(SP) EMT WRITE ;INITIATE WRITE TSTB .FLAG4 ;EOD ON PREVIOUS READ? BNE .COPOT ;YES-EXIT TST R3 ;BYPASS WRITE CHECK ON BEQ .C ;REPLACE WITH NULL OR SPACE INC CNT TST CNT BLT LZTST UPDATE: MOV (SP)+,R0 ADD UPDFAC,R0 RTS PC UPDFAC: 0 CRLF: MOVB #15,(R0)+ MOVB #12,(R0)+ RTS PC ;CONVERT RAD50 WORD TO ASCII AND STORE IN LINE BUFF (3 BYTES) CONV: MOV (R1)+,-(SP) ;WORD TO BE CONVERTED MOV R0,-(SP) ;ADDRESS OF DEST. MOV #1,-(SP) ;RAD50 TO ASCII EMT 42 ADD #3,R0  ;UPDATE POINTER IN LINE BUFF RTS PC  ;DONE ;MOVE SPACES TO LINE BUFF (-NO. IN CNT) SPACE: MOVB N-V.PSA-4,R5 ;MOVE TO PGN IN SVT. JSR PC,@R2  ;GET & STORE PROGRAM NAME MOV R1,(R5)+ JSR PC,@R2 MOV R1,(R5)+ ;NOW COLLECT LIST OF MONITOR ROUTINES TO BE RESIDENT: CLR #0  ;PREPARE TO COUNT MON RTNS TM.LMC=.-2 MOV SP,R5  ;HOLD PRESENT STACK POINTER JSR PC,@R2  ;GET NEXT MARKER TM.LCL: CMP R5,SP  ;MON RTN STORE U/W? BLO TM.LE2  ;NEEDED IF COME HERE DIRECTLY CMP TM.LBS,TM.LBC ;SHOULD STILL B)+,STWD MOV (SP)+,DEVNAM MOV (SP)+,NOWDS BIT #120000,STWD BNE OK  ;FILE STR. OR MAG TAPE TST (R5)+  ;SETUP ERROR EXIT RTS R5  ;AND EXIT OK: BIT #40000,STWD BEQ DISK  ;DEVICE IS DISK DECTAP: MOV #100,FSTMFD ;DEVICE IS DT - INITIALIZE MFD SETUP2: MOV NOWDS,ENDBLK ROL ENDBLK ADD #BLOCK-2,ENDBLK ;POINTER TO END OF BUFFER FOR DEVICE SPECIFIED RTS R5  ;OK EXIT DISK: MOV #1,FSTMFD BR SETUP2 STWD: .WORD 0 DEVNAM: .WORD 0 ;SUBROUTINEOPY2 ;2ND PASS. BIT #WRCHK,2(R3) BNE .CERR3 .COPY2: MOV R3,-(SP) ;ROTATE THE BUFFER BNE .COPY5 ;POINTERS ACCOUNTING MOV #.LINE2,(SP) ;FOR FIRST TWO ENTRIES. TST R2 BEQ .COPY5 MOV #.LINE3,(SP) .COPY5: MOV R2,R3 MOV R1,R2 MOV (SP)+,R1 BR .COPY6 .COPOT: RTS R5 ;DONE-EXIT .COPY .CERR2: MOV 2(R2),.AUXWD ;READ ERROR. BR .CERR .CERR3: MOV 2(R3),.AUXWD ;WRITE ERROR. .CERR: BIC #377,.AUXWD SWAB .AUXWD MOV #S202, .ERCDW #40,(R0)+ INC CNT TST CNT BLT SPACE RTS PC FILLST: JSR PC,MOVMES ;MESS. ADDRESS IN R1 JSR PC,BTDA  ;NO TO BE CONVERTED IN R3 MOV #-4,CNT JSR PC,REPLZ EX: RTS PC MOVMES: TSTB (R1)  ;MOVES MESSAGE (R1) TO LINE BUFFER (R0) BEQ EX  ;EXITS ON 0 (R1) MOVB (R1)+,(R0)+ BR MOVMES OUTPUT: SUB #LINE,R0 MOV R0,HEADER+4 MOV #HEADER,-(SP) MOV #LKBK01,-(SP) EMT WRITE MOV E IN BIN. LINE BGT TM.LE2  ;... SO CHECK DECB R1  ;AT COMD END? BMI TM.LND DECB R1  ;IF NOT, THIS MON RTN MARK? BNE TM.LE2 SWAB R1  ;O.K., ANY RTNS REQD. BEQ TM.LCL-2 ;IF NOT GO BACK FOR END MARK ASL R1  ;OTHERWISE GET # OF BYTES SUB R1,SP  ;... TO GIVE STACK ROOM TM.LGM: JSR PC,@R2  ;GET RTN # MOV R1,-(R5) ;STORE ON STACK INC TM.LMC  ;... & COUNT 'EM CMP R5,SP  ;UNTIL END OF LIST BNE TM.LGM CMP TM.LBS,TM.LBC ;NOW AT LINE END TO GET A WILD CARD FILE - FNBKWC SHOULD CONTAIN *'S. ;EXIT 1=GOOD FILE ;EXIT 2=NO MORE FILES WCSRCH: TST (R2)  ;R2 POINTS TO FILE NANE IN UFD BEQ NOGO  ;NULL FILE NAME CMP FNBKWC,#'* BEQ TSTEXT  ;FILNAM IS * CMP FNBKWC,(R2) ;FIL BNE NOGO CMP FNBKWC+2,2(R2) ;NAM BNE NOGO TSTEXT: CMP FNBKWC+4,#'* BEQ WCRET  ;EXT IS * CMP FNBKWC+4,4(R2) BEQ WCRET  ;MATCH NOGO: TST (R2)  ;EMPTY FILE? BEQ NOGO2  ;YES. DON'T TALLY ADD 14(R2),BLKS ; JSR R5,.ERRFT ;PRINT IT .END #LKBK01,-(SP) EMT WAIT RTS PC HEDEND: JSR PC,CRLF JSR PC,CRLF JSR PC,OUTPUT RTS PC ;ROUTINE TO PRINT OUT "DEV: FREE BLKS: N N N N" IN RESPONSE TO /FR ;COUNTS FREE BITS IN PERMANENT BIT MAPS (CNTBIT) FREE: MOV FSTMFD,BLKNO CLR R3  ;ACCUMULATE TOTAL IN R3 JSR PC,RDBLK ;READ 1ST MFD MOV BLOCK+4,BLKNO ;POINTER TO 1ST BIT MAP RDMAP: JSR PC,RDBLK JSR PC,CNTBIT TST BLOCK BEQ PRNTFR  ;DONE-PRINT MOV BLOCK,BLKNO BR RDMAP PRNTFR: MOV #? BNE TM.LCL-2 ;IF NOT GO FOR NEXT MARK JSR PC,@R2  ;OTHERWISE GET CHECKSUM TSTB TM.LCS  ;DOES IT TALLY? BEQ TM.LGO+4 ;IF SO GO FOR NEXT LINE ;LOAD ERRORS: TM.LE1: MOV #1421,-(SP) ;READ FAILURE IOT TM.LE3: MOV R1,-(SP) ;LOAD MODULE TOO BIG MOV #1423,-(SP) ;GIVE UPPER LIMIT AS EVID. IOT ;TM.LE2 MOVED OUT IN ORDER TO BE WITHIN BRANCH RANGE ;COMD BLOCKS NOW DONE - DESPATCH TO DATA LOADER: TM.LND: JSUPDATE TOTAL BLKS INC FILES NOGO2: JSR R5,ENDTST ;NO MATCH - GET NEXT FILE  BR WCSRCH  ;GOT IT ADD #2,R5  ;NO MORE FILES WCRET: RTS R5  ;EXIT .WORD 0  ;WILD CARD FNBLK .WORD 0 FNBKWC: .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 ;GLOBAL SUBROUTINES ;CHECKS IF FNBKXX+6 IS NON-ZERO (OTHER THAN LOGGED IN UIC) ;IF NOT, GETS LOGGED IN UIC ;REQUIRES FNBKXX+6 BE IN UIC TO START UCGET: T ; PIP-11 V003B ; SYMBOL DEFINITION FOR ALL PIP ; ASSEMBLY MODULES R0=%0 ;REGISTER DEFINITION R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 R6=%6 SP=%6 PC=%7 R7=%7 WAIT=1 ;DISK MONITOR EMT SYMBOLS WRITE=2 READ=4 INIT=6 RELEAS=7 TRAN=10 STATUS=13 SEARCH=14 ALLOC=15 OPEN=16 CLOSE=17 RENAME=20 DELETE=21 APPEND=22 PROTECT=24 EXIT=33 UTILIT=41 S202=2202 S203=2203 S204=2204 S205=2205 S206=2206 S207=22LINE,R0 JSR PC,DEVICE ;"DEV" TO LINE BUFFER MOVB #40,(R0)+ MOV R3,BLKS JMP FRMESS  ; ;SUBROUTINE TO COUNT BITS IN PERMANENT BIT MAP. USED WITH /FR SWITCH CNTBIT: MOV BLOCK+4,R4 ;NO. WORDS IN BIT MAP ASL R4  ;MAKE IT BYTE COUNT MOV #BLOCK+10,R1 ;1ST WORD OF BITS IN MAP TBYT: TSTB (R1)  ;ALL ZEROES? BNE CNTFR  ;NO COUNT THE BITS ADD #8.,R3  ;YES ADD 8 TO CNT NXTBYT: INC R1 DEC R4 BNE TBYT RTS PC  ;DONE CNTFR: ROLB (R1)  ;1 BCS .+R PC,@R2  ;GET FINAL CHECKSUM TSTB TM.LCS  ;... & VERIFY BNE TM.LE1 MOV @R0,R0  ;GIVE LDR DDB ADDRESS MOV TM.LTS,R1 ;... & FILE TYPE SWITCH MOV TM.LTB,R5 ;GET TRAN BLOCK ADDRESS TST (R5)+ MOV (R5)+,R2 ;... TO PASS BUFFER ADDRESS TST (R5)+ BIC #137777,@R5 ;ENSURE EOD BIT SET IN DDB BIS @R5,12(R0) ;... IF NECESSARY MOV TM.LRS,R5 ;PASS ON RWN RESIDENCY MOV TM.LMC,-(SP) ;SHOW MON RTN COUNT MOV TM.PLA,-(SP) ;... & PROGRAM LOAD POINT EMT 61 ST UIC  ;CALLED BY JSR R5 BNE UCRET MOV #105,-(SP) EMT UTILIT  ;GET UIC MOV (SP)+,UIC UCRET: RTS R5 FINDUC: MOV FSTMFD,BLKNO JSR PC,RDBLK ;READ 1ST MFD BLOCK RDMFD: MOV BLOCK,BLKNO ;LINK TO NEXT MFD JSR PC,RDBLK ;READ NEXT MFD BLOCK MOV #BLOCK+2,R2 ;UIC IN MFD CMPUIC: CMP (R2)+,UIC BEQ RETURN  ;FOUND MATCHING UIC ADD #6,R2 CMP R2,ENDBLK BLT CMPUIC TST BLOCK BNE RDMFD TST (SP)+  ;CLEAR STACK MOV #S233,.ERCDW ;NO MATCHI07 S231=2231 S232=2232 S233=2233 S234=2234 S235=2235 S236=2236 S237=2237 S240=2240 S241=2241 S242=2242 S251=2251 S252=2252 CR=15 LF=12 ;ASCII DEFINITIONS FOR CNTRL CHRS VERTAB=13 AL="AL BR="BR B='B CO="CO C='C DE="DE DI="DI EN="EN E='E FA="FA FB="FB FR="FR MT="MT M='M PR="PR P='P QU="QU Q='Q RE="RE R='R UN="UN U='U ZE="ZE Z='Z WC=-1 .GLOBL LKBK01,LKBK02,LKBKDU,FNBK4 INC R3  ;FREE BIT - INC CNT ROLB (R1)  ;2 BCS .+4 INC R3 ROLB (R1)  ;3 BCS .+4 INC R3 ROLB (R1)  ;4 BCS .+4 INC R3 ROLB (R1)  ;5 BCS .+4 INC R3 ROLB (R1)  ;6 BCS .+4 INC R3 ROLB (R1)  ;7 BCS .+4 INC R3 ROLB (R1)  ;8 BCS .+4 INC R3 BR NXTBYT DIRMES: .ASCII /DIRECTORY / .BYTE 0 DFMES1: .BYTE CR,LF .ASCII /TOTL BLKS: / .BYTE 0 DFMES2: .BYTE CR,LF .ASCII /TOTL FILES:/ . ;CALL LOADER PROPER. ;DATA BLOCKS: ; (A HEADER MESSAGE: TM.HDR: .WORD 2 .WORD 0 .WORD 2 .BYTE 15,12 ; B) SIGNAL READY FOR COMMAND: TM.DOL: .WORD 2 .WORD 0 .WORD 2 .BYTE '$,13 ; C) CTL/C ECHO MESSAGE: TM.CTLC: .WORD 6 .WORD 0 .WORD 6 .ASCII '^C' .BYTE 15,12,'.,13 ; D) DATE & TIME MESSAGES: TM.DAT: .WORD 10 .WORD 0 .WORD 10 .ASCII 'DATE:- ' .BYTE 13 ; TM.TIM:NG UIC FOUND JSR R5,.ERRFT    ;2 EXITS - 1ST=NO UFD ;GETS UFD BLOCKS ;EXIT 1=NO UFD ;EXIT 2=FOUND NEXT UFD. R2 POINTS TO 1ST ENTRY GETUFD: TSTB UFDPAS  ;IS THIS 1ST PASS? BEQ FIRST  ;YES MOV BLOCK,BLKNO GET: JSR PC,RDBLK MOV #BLOCK+2,R2 BR DONEX FIRST: INCB UFDPAS TST (R2) BEQ RETURN  ;0 - NO UFD, SO EXIT MOV (R2),BLKNO BR GET ENDTST: ADD #22,R2  ;POINTS R2 TO NEXT UFD ENTRY CMP R2,ENDBLK ;READS NEXT UFD BLOCK IF NECESS. BLT R01,FNBK02,FNBKDU,.ACTSW .GLOBL .M20B,.CSQF,.TRFQF,.PSTQF,.PREQF,.ENTB1,.ENTB2 .GLOBL .FLAG1,.FLAG2,.FLAG3,.FLAG4,.FLAG5,.FLAG6,.FLAG7,.FLAG8 .GLOBL .NUMIN,.NUMOT,.ERCDW,.ACT,.SPARE,.COUNT,.ERRPR .GLOBL .ERRFT,.M2OB,.RSAV,.USAV,.CSII,.CSII1,.CSII2,.CSII3 .GLOBL .CSII4,.CSII5,.MOVLK,.MOVFN,.RENAM,.TFR .GLOBL .FLGIN,.FLGOT,.START,.DIREC,.DELET,.ZERO .GLOBL .NYI,.BRIEF,.PROT,.ALLOC,.ENTER,.UNLOC,.FREE .GLOBL BLOCK,FSTMFD,UIC,.GETLK,.GETFN,BLKNO,HOWOPN,NOWDS .GLOBL ENDBLK,STWD01,STWD02,LKBK,SBYTE 0 DTMES1: .BYTE CR,LF .ASCII /FREE BLKS: / .BYTE 0 DTMES2: .BYTE CR,LF .ASCII /FREE FILES:/ .BYTE 0 .EVEN HEADER: .WORD 0  ;LINE BUFFER .WORD 2  ;UNFORMATTED ASCII .WORD 0  ;PLANT (NO. BYTES) LINE: .WORD 0 .=.+72. CNT: 0 .END  .WORD 10 .WORD 0 .WORD 10 .ASCII 'TIME:- ' .BYTE 13 ; E) INPUT FILE BLOCK: .WORD 0  ;NO ERROR RTN - SYS ERROR .WORD 4 TM.INF: 0,0,0,0,0  ;NAME SET VIA CSI ; E) INPUT COMMAND BUFFER .WORD 2,0,0,0,0,0,0 ;REQD FOR CSI LDR.GS=.-4 TM.LBA=.-2 LDR.LN: TM.IBF: .WORD 128. .WORD 0 .WORD 0 .=.+128. ; F) LINK-BLOCK FOR FILE LOOK-UP: .WORD 0  ;NO ERROR POSSIBLE??? TM.RBK: .WORD 0 .ETURN  ;INCREMENTS EXIT IF NO MORE BLOCKS TST BLOCK BNE ENDTS2 CLRB UFDPAS  ;INITIALIZE FOR NEXT TIME BR DONEX ENDTS2: JSR R5,GETUFD  TST (SP)+  ;NO UFD. RETURN TO PIP RETURN: RTS R5 DONEX: ADD #2,R5  ;INCREMENT EXIT RTS R5 ;ROUTINE TO SEARCH LKBKDU FOR SWITCH MATCHING ONE FOLLOWING CALL ;RETURNS WITH R0=0 IF MATCH ;R0=1 IF NO MATCH SWGET: MOV #LKBKDU+10,R0 SWGET1: TST (R0)  ;SWITCHES TO FOLLOW? BEQ SWGET3  ;NO SWGET2: MOV (R0),R1  ;NO. WTWD,PASSGL,FNBKWC .GLOBL FINDUC,GETUFD,ENDTST,RDBLK,WRBLK,WCSRCH,SETUP,UCGET .GLOBL BLKS,FILES,UFDPAS,SWGET,.AUXWD .GLOBL DEVNAM,DKZ,LKBKTT,LKBKKB,.CMDBF .EOT  .TITLE DKZERO .GLOBL DKZ,LKBKTT,LKBKKB,LKBK01,BLOCK,.CMDBF ;VERSION V000A ;PROGRAM TO INITIALIZE A DISK CARTRIDGE ;COPYRIGHT DIGITAL EQUIPMENT CORPORATION ;MAYNARD, MASSACHUSETTS JUNE 1971 R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 R6=%6 PC=%7 CR=15 LF=12 VT=13 UIC=440 INIT=EMT+6 READ=EMT+4 WRITE=EMT+2 WATE=EMT+1 TRAN=EMT+10 IF=5    ;INTERLEAVE FACTOR MSGBUF: .WORD 12.,0,12. .BYTE CR,WORD -1  ;CANNOT BE ASSIGNED!!! .WORD 1 .RAD50 'DF'  ;DEFAULT IS DSK ; G) LINK-BLOCK FOR INPUT COMMAND: .WORD 0  ;AGAIN SHOULD BE NO ERROR! .WORD 0 .RAD50 'CMD'  ;COMMAND DEVICE .WORD 1 .RAD50 'KB'  ;... NORMALLY KBD ; H) LINK-BLOCK FOR PRINTER MESSAGES: .WORD 0 .WORD 0 .WORD -1  ;AGAIN AVOID ASSIGNMENT .WORD 1 .RAD50 'KB'  ;ALWAYS CONSOLE ; I) LINK BLOCK FOR I/O TIDY & DISK READ: .WORD 0  ;NO ERROR RETURN FOR NOW TM.LNK: .WORDS TO FOLLOW ROL R1  ;DOUBLE IT ADD R1,R0  ;POINT R0 TO SWITCH CMP (R0)+,(R5) ;MATCH? BEQ SWGET4  ;YES BR SWGET1  ;NO - TRY FOR MORE SWGET3: MOV #1,R0  ;NO MATCH BR SWEX SWGET4: CLR R0  ;MATCH SWEX: ADD #2,R5 RTS R5 RDBLK: MOV #4,HOWOPN TRN: MOV #BLKNO,-(SP) ;CALLED B, JSR PC MOV LKBK,-(SP) EMT TRAN MOV LKBK,-(SP) EMT WAIT BIT #TRNCHK,HOWOPN ;TEST FOR ERROR OR EOM BNE TRNERR RTS PC  ;NO ERROR TRNERR: MOV HOWOPN,; DECTAPE COPY ROUTINE, VER 001A ; DR. WILLIAM GODWIN ; EDUCATIONAL TESTING SERVICE ; PRINCETON, NEW JERSEY R0=%0 R1=%1 R2=%2 R5=%5 SP=%6 PC=%7 ;ASSIGNMENTS ;FOR 8K CONFIGURATIONS, SET ; WBLOCK=2048. ; HBLK=8. ;FOR 12K CONFIGURATIONS, SET ; WBLOCK=4096. ; HBLK=16. WBLOCK=4096. HBUFSZ=WBLOCK+WBLOCK FBUFSZ=HBUFSZ+HBUFSZ HBLK=16. FBLK=HBLK+HBLK ;BUFFERS & REGISTERS VELF  ;CONFIRMATION MESSAGE .ASCII /CONFIRM: / .BYTE VT .EVEN RESBUF: .WORD 3,0,3  ;RESPONSE TO CONFIRMATION .=.+3 .EVEN ;CALLED BY JSR PC,DKZ DKZ: MOV #MSGBUF,-(R6) MOV #LKBKTT,-(R6) WRITE   ;SEND REQUEST FOR CONFIRM MOV #RESBUF,-(R6) MOV #LKBKKB,-(R6) READ   ;READ THE REPLY MOV #LKBKKB,-(R6) WATE   ;WAIT FOR THE READ MOV R5,-(R6) ;SAVE MAIN PIP'S R5 MOV #2400.,R5 ;SET FOR LOW DENSITY MOV #2,R2  ;# OFD 0  ;PTR TO DDB - SET AS NEC .WORD -1  ;CANNOT BE ASSIGNED!!! .WORD 1 .WORD 0  ;SET TO SYS DSK NAME ; J) TRANSFER BLOCK FOR DISK READ: .WORD 5  ;STD BLOCK FOR MRT COPY .WORD 0,0  ;ADDR & CNT SET BY PROG .WORD 4  ;READ ONLY REQD .WORD 0 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;X EMBEDDED READ/WRITE PROCESSOR MUST COME HERE: X ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .AUXWD BIC #377,.AUXWD SWAB .AUXWD MOV #S207,.ERCDWD JMP .ERRFT WRBLK: MOV #2,HOWOPN BR TRN .=.+20  ;PATCH SPACE LKBK: .WORD 0  ;PLANT BLKNO: .WORD 0  ;PLANT .WORD BLOCK NOWDS: .WORD 0  ;PLANT HOWOPN: .WORD 0  ;PLANT .WORD 0  ;MONITOR USE FSTMFD: .WORD 0  ;PLANT UIC: .WORD 0  ;PLANT ENDBLK: .WORD 0  ;PLANT STWD01: .WORD 0  ;PLANT STWD02RIFY: .WORD 0 EWORD: .WORD 0 TCOUNT: .WORD -5 VCOUNT: .WORD -5 UNIT: .WORD 0 SWITCH: .WORD 0 BUFF0: .WORD 80.,0,0 BUFF1: .WORD 0 .=.+HBUFSZ BUFF2: .WORD 0 .=.+HBUFSZ ;CONTROL BLOCKS .WORD 0 ;TTY PRINTER LINK BLOCK LNKP: .WORD 0,0 .BYTE 1,0 .RAD50 /KB/ .WORD 0 ;PRINTER FILE BLOCK .BYTE 2,0 FBLKP: .WORD 0,0,0,0,0 .WORD 0 ;TTY KEYBOARD LINK BLOCK LNKK: .WORD 0,0 .BYTE 1,0 .RAD50 /KB/ .WORD 0 ;KEYBOARD FILE BLOCK .BYTE 4 BM BLOCKS MINUS 1 MOV #RESBUF+6,R1 CMPB #'L,@R1  ;IS REPLY CONFIRM LOW? BEQ DKZ00  ;YES - BRANCH CMPB #'H,@R1  ;IS REPLY CONFIRM HIGH? BNE DKZXIT  ;NO - GO EXIT ASL R5  ;SET FOR HIGH DENSITY TST (R2)+ DKZ00: INC R1  ;KEEP 'EM HONEST! IF NEXT CMPB #12,@R1  ;CHARACTER IS NOT AN ASCII BHI DKZXIT  ;DELIMETER, ASSUME NO CMPB #15,@R1  ;CONFIRMATION BLO DKZXIT TSTB LKBK01+5 ;IS THIS UNIT 0? BNE DKZ03  ;NO - CAN'T BE SYSTEM DEVICE MO;MISC DEFINITIONS: V.EOM=0 V.TOB=2 V.CSA=4 V.PLA=6 V.BAT=12 V.DCO=14 V.MUS=16 V.OSW=20 V.PSA=22 V.DAT=32 V.UIC=40 V.PGN=42 V.MRT=46 V.DDL=50 V.SSP=52 V.BFE=56 V.WTL=60 V.KBA=62 V.SVT=40 V.RSAV=44 V.RRES=46 V.GTB=54 .WAIT=1 .WRITE=2 .READ=4 .INIT=6 .RLSE=7 .TRAN=10 .STAT=13 .LUKUP=14 .OPEN=16 .CLOSE=17 .KBL=31 .KBI=33 .CVT=42 .CSX=56 .CSM=57 .XIT=60 .END TMON : .WORD 0  ;PLANT BLOCK: .WORD 0 .=.+508. .WORD 0 ;ROUTINE TO ZERO DIRECTORY ON DECTAPE .TITLE .ZERO .CSECT .ZERO: JSR R5,.GETLK BIT #40000,STWD BNE ZDEC  ;DECTAPE CMP DEVNAM,DK ;IS IT DK? BEQ DKZE CMP DEVNAM,MTA BEQ MTZE MOV #S236,.ERCDW JSR R5,.ERRFT ;ILL OUTPUT DEVICE DKZE: JSR PC,DKZ ;ZERO DK ZEND: MOV #LKBK01,-(SP) EMT 7  ;RELEASE OUTPUT DEV. RTS R5  ;RETURN TO PIP MTZE: JSR PC,MTZ  ;ZERO MT BR ZEND ,0 FBLKK: .WORD 0,0,0,0,0 .WORD 0 ;DRIVE 0 LINK BLOCK LNK0: .WORD 0,0 .BYTE 1 LNK0U: .BYTE 0 ;UNIT FOR ORIGINAL .RAD50 /DT/ .WORD 0 ;DRIVE 1 LINK BLOCK LNK1: .WORD 0,0 .BYTE 1 LNK1U: .BYTE 0 ;UNIT FOR COPY .RAD50 /DT/ TRANF: .WORD 0 ;FULL BUFFER TRAN BLOCK .WORD BUFF1 .WORD HBUFSZ .WORD 2 ;READ(4)/WRITE(2) .WORD 0 TRAN1: .WORD 0 ;NO. 1 HALF-BUFFER TRAN .WORD BUFF1 .WORD WBLOCK .WORD 4,0 TRAN2: .WORD 0 ;NO. 2 HALF-BUFFV #.CMDBF,-(R6) EMT 56  ;FIND OUT WHAT THE SYSTEM TST (R6)+  ;DEVICE IS CMP .CMDBF+6,LKBK01+6 ;IS THIS IT? BNE DKZ03  ;NO - GO AHEAD CLR -(R6) MOV (PC)+,-(R6) ;S254 MEANS YOU TRIED TO .BYTE 254  ;ZERO THE SYSTEM DISK .BYTE 4  ;USING PIP. WHICH IS IOT   ;DEFINITELY A NO-NO BR DKZX00  ;GO BACK TO PIP DKZ03: MOV #TB,R4 MOV #BLOCK,R0 CLR @R4 MOV #2,R3  ;INITIALIZE ZERO PASS COUNT MOV R0,R1 JSR PC,DKZCLR ;CLEAR THE 256. WORD BUF; UPDATE 1 27 APR 1972 TEMP FIX FOR LENGTH -B20K ; DECTAPE COPY ROUTINE, VER 001A ;  DR. WILLIAM GODWIN ;  EDUCATIONAL TESTING SERVICE ;  PRINCETON, NEW JERSEY R0=%0 R1=%1 R2=%2 R5=%5 SP=%6 PC=%7  ;ASSIGNMENTS ;FOR 8K CONFIGURATIONS, SET ; WBLOCK=2048. ; HBLK=8. ;FOR 12K CONFIGURATIONS, SET ; WBLOCK=4096. ; HBLK=16. WBLOCK = 8192. HBUFSZ=WBLOCK+WBLOCK FBUFSZ=HBUFSZ+HBUFSZ HBLK = 32. FBLK=HBLK+ MTA: .RAD50 /MT/ DK: .RAD50 /DK/ ZDEC: JSR R5,ZDIR  ;ZERO DECTAPE BR ZEND ;ROUTINE TO ZERO DECTAPE ZDIR: MOV #LKBK01,LKBK MOV NOWDS,CNT ;BLOCK SIZE JSR R7,CLEAR  ;CLEAR 256 WORD BLOCK CLR PASS   ;INITIALIZE 1ST PASS MOV #70,FBLK MOV #TABLE,FTAB NEWPAS: MOV FTAB,R0 MOV FBLK,BLKNO SAMPAS: JSR R7,@(R0) ;MOVE DATA,WRITE,CLEAR ADD IF,R0   ;INC TABLE PNTR BY IF ADD IF,R0ER TRAN .WORD BUFF2 .WORD WBLOCK .WORD 4,0 ;PROGRAM INITIALIZATION START: MOV #LNKP,-(SP) ; .INIT LNKP EMT 6 MOV #LNKK,-(SP) ; .INIT LNKK EMT 6 MOV #MSG1,-(SP) ; .WRITE MSG1 MOV #LNKP,-(SP) EMT 2 L10: MOV #MSG2,-(SP) ; .WRITE MSG2 MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP) ; .WAIT LNKP EMT 1 MOV #BUFF0,-(SP) ; .READ KEYBOARD MOV #LNKK,-(SP) EMT 4 MOV #LNKK,-(SP) ; .WAIT LNKK EMT 1 JSR PC,L40 ;CHECK INPUT BR L10 FER DKZ05: ADD #3,@R4 CMP @R4,R5 BHIS DKZ12  ;CLEAR THE CARTRIDGE DKZ10: MOV R4,-(R6) ;THE ALGORITHM IS TO MOV #LKBK01,-(R6) ;ZERO BLOCKS 0,3,6,... TRAN   ;THEN BLOCKS 2,5,8,... BR DKZ05  ;THEN BLOCKS 1,4,7,... DKZ12: MOV R3,@R4 DEC R3 BGE DKZ10 DKZ15: MOV R0,R1 MOV #1,@R4  ;WRITE OUT FIRST MFD BLOCK SUB R2,R5  ;GET SECOND MFD BLOCK # CMPB -(R5),-(R5) MOV R5,(R1)+ ;LINK TO FIRST MFD MOV R2,R3 MOV #IF,(R1)+ ;INTERLEAVE FACTOR HBLK  ;BUFFERS & REGISTERS VERIFY: .WORD 0 EWORD: .WORD 0 TCOUNT: .WORD -5 VCOUNT: .WORD -5 UNIT: .WORD 0 SWITCH: .WORD 0 BUFF0: .WORD 80.,0,0 BUFF1: .WORD 0 .=.+HBUFSZ BUFF2: .WORD 0 .=.+HBUFSZ  ;CONTROL BLOCKS .WORD 0  ;TTY PRINTER LINK BLOCK LNKP: .WORD 0,0 .BYTE 1,0 .RAD50 /KB/ .WORD 0  ;PRINTER FILE BLOCK .BYTE 2,0 FBLKP: .WORD 0,0,0,0,0 .WORD 0  ;TTY KEYBOARD LINK BLOCK LNKK: .WORD 0,0 .BYTE 1,0 .RAD50 /KB/ .W ADD IF,BLKNO  ;INC BLOCK NO. BY IF CMP R0,#ENDTAB BLE SAMPAS INC PASS   ;SET UP NEXT PASS CMP PASS,IF   ;WAS THIS LAST PASS? BEQ EXITZ   ;YES INC FBLK ADD #2,FTAB BR NEWPAS EXITZ: RTS R5 PASS: 0 IF: 4 CNT: 0 TEMP: 0 FBLK: 0 FTAB: 0 ;TABLE OF SUBROUTINES TABLE: WR70S    ;70 WR70S    ;71 WR70S    ;72 WR70S    ;73 WR70S    ;74 WR70S    ;75 WR70S    ;76 WR70S    ;77 WR100 WR101;ERROR. TRY AGAIN MOVB R0,LNK0U ;OK. SET INPUT UNIT L20: MOV #MSG3,-(SP) ; .WRITE MSG3 MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP) ; .WAIT LNKP EMT 1 MOV #BUFF0,-(SP) ; .READ KEYBOARD MOV #LNKK,-(SP) EMT 4 MOV #LNKK,-(SP) ; .WAIT LNKK EMT 1 JSR PC,L40 ;CHECK INPUT BR L20 ;ERROR. TRY AGAIN CMPB R0,LNK0U ;OK. SAME DRIVE AS INPUT? BNE L30 JSR PC,L50 ;YES. THATS A NO-NO! BR L20 L30: MOVB R0,LNK1U ;NO. SET OUTPUT UNIT MOV #MSG8,-(SPINC R5  ;FIRST BIT MAP BLOCK MOV R5,(R1)+ ;ENTER IT TWICE MOV R5,(R1)+ MOV R5,-(R6) ;AND SAVE IT FOR LATER DKZ20: INC R5  ;ENTER SUCCESSIVE BM BLOCKS MOV R5,(R1)+ DEC R3 BNE DKZ20 JSR PC,DKZTRN ;WRITE OUT MOV R0,R1  ;SET TO DO SECOND MFD BLOCK MOV @R1,@R4  ;SET THE BLOCK NUMBER CLR (R1)+  ;CLEAR THE LINK MOV @#UIC,(R1)+ ;ENTER THIS USER'S UIC CLR (R1)+  ;NO UFD YET MOV #9.,(R1)+ ;9. WORDS PER UFD ENTRY JSR PC,DKZCLR ;CLORD 0  ;KEYBOARD FILE BLOCK .BYTE 4,0 FBLKK: .WORD 0,0,0,0,0 .WORD 0  ;DRIVE 0 LINK BLOCK LNK0: .WORD 0,0 .BYTE 1 LNK0U: .BYTE 0  ;UNIT FOR ORIGINAL .RAD50 /DT/ .WORD 0  ;DRIVE 1 LINK BLOCK LNK1: .WORD 0,0 .BYTE 1 LNK1U: .BYTE 0  ;UNIT FOR COPY .RAD50 /DT/ TRANF: .WORD 0  ;FULL BUFFER TRAN BLOCK .WORD BUFF1 .WORD HBUFSZ .WORD 2  ;READ(4)/WRITE(2) .WORD 0 TRAN1: .WORD 0  ;NO. 1 HALF-BUFFER TRAN .WORD BUFF1 .WORD WBLOCK .WORD 4 WR102 WR103 ENDTAB: WR104 WR70S: JSR R7,WRBLK  ;WRITE A BLOCK OF ZEROS RTS R7 WR100: MOV #BLK100,R1  ;FOR MOVING DATA MOV #4,CNT   ;NO. WORDS TO BE MOVED JSR R7,MVWRCL  ;MOVE DATA,WRITE,CLEAR BLOCK RTS R7 WR101: MOV #BLK101,R1 MOV #4,CNT MOV UIC,2(R1)  ;UIC TO BUFFER JSR R7,MVWRCL RTS 7 WR102: MOV #BLK102,R1 MOV #1,CNT JSR R7,MVWRCL RTS R7 WR103: JSR) ; .WRITE MSG8 MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP) ; .WAIT LNKP EMT 1 MOV #BUFF0,-(SP) ; .READ KEYBOARD MOV #LNKK,-(SP) EMT 4 MOV #LNKK,-(SP) ; .WAIT LNKK EMT 1 CLR VERIFY CMPB #131,BUFF1 ;TEST FOR "Y"ES BNE L35 INC VERIFY ;SET TO VERIFY COPY L35: MOV #LNKK,-(SP) ; .RLSE LNKK EMT 7 MOV #LNK0,-(SP) ; .INIT LNK0 EMT 6 MOV #LNK1,-(SP) ; .INIT LNK1 EMT 6 CLR TRANF ;START AT BLOCK 0 CLR TRAN1 CLR TRAN2 JMP L100 EAR THE REST OF THE BLOCK    ;AND WRITE IT OUT ;SET TO DO THE BIT MAPS CLR R5  ;USED FOR MAP NUMBER MOV @R6,@R4  ;GET BLOCK OF FIRST MAP MOV #60.,R3  ;USED PERIODICALLY BELOW DKZ25: MOV R0,R1  ;INITIALIZE BUFFER POINTER MOV @R4,@R1  ;GET LINK TO NEXT MAP INC (R1)+ DEC R2  ;IF THIS IS THE LAST MAP. BGE DKZ30  ;THEN THE LINK IS ZERO CLR @R0 DKZ30: INC R5  ;PUT IN THE MAP NUMBER MOV R5,(R1)+ MOV R3,(R1)+ ;PUT IN MAP SIZE MOV @R,0 TRAN2: .WORD 0  ;NO. 2 HALF-BUFFER TRAN .WORD BUFF2 .WORD WBLOCK .WORD 4,0  ;PROGRAM INITIALIZATION START: MOV #LNKP,-(SP)  ; .INIT LNKP EMT 6 MOV #LNKK,-(SP)  ; .INIT LNKK EMT 6 MOV #MSG1,-(SP)  ; .WRITE MSG1 MOV #LNKP,-(SP) EMT 2 L10: MOV #MSG2,-(SP)  ; .WRITE MSG2 MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP)  ; .WAIT LNKP EMT 1 MOV #BUFF0,-(SP) ; .READ KEYBOARD MOV #LNKK,-(SP) EMT 4 MOV #LNKK,-(SP)  ; .WAIT LNKK EMT 1 J R7,WRBLK  ;ALL ZEROES RTS R7 WR104: MOV #BLK104,R1 MOV #11,CNT JSR R7,MOVDAT MOV #BLOCK+80.,R1 MIN1: MOV #-1,(R1)+  ;FILL WDS 40-255 WITH -1 CMP R1,ENDBLK BLE MIN1 JSR R7,WRBLK  ;WRITE THE BLOCK MOV #256.,CNT JSR R7,CLEAR  ;CLEAR THE WHOLE BLOCK RTS R7 MOVDAT: MOV CNT,TEMP  ;MOVES DATA MOV #BLOCK,R2  ;TO BLOCK MOVE: MOV (R1)+,(R2)+ DEC TEMP BGT MOVE RTS R7 CLEAR: MOV #BLOCK,R2  ;CLEARS BLOCK CLR1: CLR (R2)+  ;HI-OH SILVER, AWAY... L40: MOVB BUFF1,R0 ;GET KEYBOARD CHARACTER SUB #60,R0 BMI L50 ; <0. ERROR CMP R0,#7 BGT L50 ; >7. ERROR ADD #2,(SP) ;OK. SKIP ERROR RETURN RTS PC ; & BACK WE GO L50: MOV #MSG4,-(SP) ;ERROR COMMENT (???) MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP) ; .WAIT LNKP EMT 1 RTS PC ;TAKE ERROR RETURN ;COPY SEQUENCE L100: MOV #TRANF+6,EWORD MOV #4,TRANF+6 ;READ FULL BUFFER MOV #TRANF,-(SP) ;FROM UNIT 06,(R1)+ ;PUT IN LINK TO FIRST MAP CMPB R5,@PC  ;IS THIS MAP #1? BHIS DKZ35  ;NO - BRANCH -*****- MOV #3,(R1)+ ;SET BLOCKS 0 & 1 TAKEN DKZ35: TST R2  ;IS THIS THE LAST MAP? BGE DKZ45  ;NO - BRANCH ADD R3,R1  ;SET UP FOR LOW DENSITY TST -(R1)  ;POINTER LAST WORD OF MAP CMP (R6)+,#2400. ;IS IT LOW DENSITY ? BLO DKZ40  ;YES - BRANCH ADD R3,R1 MOV #176000,(R1)+ ;SET LAST 6 BLOCKS TAKEN BR DKZ45 DKZ40: MOV #170000,(R1)+ ;SET LAST 4 BLOCKS TAKSR PC,L40  ;CHECK INPUT BR L10   ;ERROR. TRY AGAIN MOVB R0,LNK0U  ;OK. SET INPUT UNIT L20: MOV #MSG3,-(SP)  ; .WRITE MSG3 MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP)  ; .WAIT LNKP EMT 1 MOV #BUFF0,-(SP) ; .READ KEYBOARD MOV #LNKK,-(SP) EMT 4 MOV #LNKK,-(SP)  ; .WAIT LNKK EMT 1 JSR PC,L40  ;CHECK INPUT BR L20   ;ERROR. TRY AGAIN CMPB R0,LNK0U  ;OK. SAME DRIVE AS INPUT? BNE L30 JSR PC,L50  ;YES. THATS A NO-NO! BR L20 L30: MOVB R0,LNK1UDEC CNT BGT CLR1 RTS R7 MVWRCL: JSR R7,MOVDAT JSR R7,WRBLK JSR R7,CLEAR RTS R7 BLK100: 101   ;LINK 4   ;I.F. 104   ;FIRST PBM 104   ;LAST PBM BLK101: 0   ;LINK 0   ;UIC PLANTED HERE 102   ;FIRST BLOCK OF UFD 11   ;NO. WDS/UFD ENTRY BLK102: 103   ;LINK BLK104: 0   ;LINK 1   ;NUMBER 44   ;NO. WDS IN MAP 104   ;1ST MAP OF CHAIN 1  MOV #LNK0,-(SP) EMT 10 MOV #LNK0,-(SP) ; .WAIT EMT 1 CLR UNIT ;CHECK FOR ERRORS JSR R5,ERROR1 BR L100 L110: MOV #2,TRANF+6 ;WRITE FULL BUFFER MOV #TRANF,-(SP) ;TO UNIT 1 MOV #LNK1,-(SP) EMT 10 MOV #LNK1,-(SP) ; .WAIT EMT 1 INC UNIT ;CHECK FOR ERRORS JSR R5,ERROR1 BR L110 ;VERIFY SEQUENCE TST VERIFY ;VERIFY? BNE L120 JMP L170 ;-- NO L120: CLR SWITCH ;-- YES. SET TO START MOV TRANF,TRAN1 MOV TRANF,TRAN2 MOVEN DKZ42: MOVB #-1,(R1)+ DEC R3  ;LOW DENSITY ONLY USES "HALF" BNE DKZ42  ;OF THE LAST BIT MAP DKZ45: JSR PC,DKZCLR ;CLEAR GARBAGE & WRITE INC @R4  ;SET UP FOR NEXT BLOCK TST R2  ;WAS THIS THE LAST MAP? BGE DKZ25  ;NO - BRANCH BR DKZX00  ;GO EXIT DKZXIT: CLR -(R6) MOV (PC)+,-(R6) ;I354 MEANS YOUR DISK .BYTE 354  ;CARTRIDGE WAS NOT ZEROED .BYTE 0 IOT DKZX00: MOV (R6)+,R5 ;RESTORE PIP'S R5 RTS PC  ;RETURN TO MAINLINE PIP ;-  ;NO. SET OUTPUT UNIT MOV #MSG8,-(SP)  ; .WRITE MSG8 MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP)  ; .WAIT LNKP EMT 1 MOV #BUFF0,-(SP) ; .READ KEYBOARD MOV #LNKK,-(SP) EMT 4 MOV #LNKK,-(SP)  ; .WAIT LNKK EMT 1 CLR VERIFY CMPB #131,BUFF1  ;TEST FOR "Y"ES BNE L35 INC VERIFY  ;SET TO VERIFY COPY L35: MOV #LNKK,-(SP)  ; .RLSE LNKK EMT 7 MOV #LNK0,-(SP)  ; .INIT LNK0 EMT 6 MOV #LNK1,-(SP)  ; .INIT LNK1 EMT 6 CLR TRANF  ;START AT BLOCK  ;BIT PATTERN,BLKS 17-0 0   ;BLKS 37-20 0   ;BLKS 57-40 177400   ;BLKS 77-60 37   ;BLKS 117-100 ;ROUTINE TO ZERO MAGTAPE ;REWIND AND WRITE 3EOFS MTZ: MOVB #3,SFBLK ;REWIND CODE=3 JSR R5,SPFNCT ;REWIND MOVB #2,SFBLK ;EOF CODE=2 JSR R5,SPFNCT ;EOF CODE=2 JSR R5,SPFNCT ;EOF CODE=2 JSR R5,SPFNCT ;EOF CODE=2 MOVB #3,SFBLK JSR R5,SPFNCT ;REWIND AGAIN RTS PC SPFNCT: MOV #SFBLK,-(SP) MOV #LKBK01,-(SP) EMT 12 MOV #LKBK01, #TRAN1+6,EWORD L130: MOV #TRAN1,-(SP) ;READ ORIGINAL FROM 0 MOV #LNK0,-(SP) EMT 10 MOV #LNK0,-(SP) ; .WAIT EMT 1 CLR UNIT ;CHECK FOR ERRORS JSR R5,ERROR1 BR L130 MOV #TRAN2+6,EWORD L140: MOV #TRAN2,-(SP) ;READ COPY FROM 1 MOV #LNK1,-(SP) EMT 10 MOV #LNK1,-(SP) ; .WAIT EMT 1 INC UNIT ;CHECK FOR ERRORS JSR R5,ERROR1 BR L140 MOV #BUFF1,R0 ;SET UP COMPARE LOOP MOV #BUFF2,R1 MOV #-WBLOCK,R2 L150: CMP (R0)+,(R1)+ ;COMPARE BEQ L1*****- USED AS LITERAL BY PREVIOUS INSTRUCTION TB: .WORD 0  ;TRAN BLOCK .WORD BLOCK .WORD 256. .WORD 2 .WORD 0 DKZCLR: CLR (R1)+  ;CLEARS THE BUFFER FROM CMP R1,#BLOCK+512. ;@R1 TO THE END BLO DKZCLR DKZTRN: MOV R4,-(R6) ;TRANS OUT THE BUFFER MOV #LKBK01,-(R6) ;R4 CONTAINS #TRANBLOCK TRAN MOV #LKBK01,-(R6) WATE   ;WAIT FOR COMPLETION RTS PC .END  0 CLR TRAN1 CLR TRAN2 MOV #HBUFSZ,TRANF+4 MOV #WBLOCK,TRAN1+4 MOV #WBLOCK,TRAN2+4 JMP L100  ;HI-OH SILVER, AWAY... L40: MOVB BUFF1,R0  ;GET KEYBOARD CHARACTER SUB #60,R0 BMI L50   ; <0. ERROR CMP R0,#7 BGT L50   ; >7. ERROR ADD #2,(SP)  ;OK. SKIP ERROR RETURN RTS PC   ; & BACK WE GO L50: MOV #MSG4,-(SP)  ;ERROR COMMENT (???) MOV #LNKP,-(SP) EMT 2 MOV #LNKP,-(SP)  ; .WAIT LNKP EMT 1 RTS PC   ;T-(SP) EMT WAIT RTS R5 SFBLK: .BYTE  0  ;SPECIAL FUNCTION CODE .BYTE  3  ;NO WDS TO FOLLOW .WORD  0  ;TAPE UNIT STATUS RETURNED BY DRIVER .WORD  0  ;USER SPECIFIED COUNT .WORD 0  ;RESIDUE COUNT RETURNED BY DRIVER .END 60 JMP ERROR2 ;OOPS! WE GOOFED. L160: INC R2 BNE L150 TST SWITCH ;ALL OK. BOTH HALF- BNE L170 ;BUFFERS TESTED YET? INC SWITCH ;-- NO. DO SECOND ONE. ADD #HBLK,TRAN1 ADD #HBLK,TRAN2 JMP L130 ;INCREMENT COPY BLOCKS OR END L170: ADD #FBLK,TRANF ;BUMP BLOCK NO. CMP TRANF,#512. ;DONE YET? BGE L180 ;-- NO. CONTINUE MOV #-5,VCOUNT JMP L100 L180: MOV #MSG7,-(SP) ;-- YES. TYPE END MESSAGE MOV #LNKP,-(SP) EMT 2 L190: CLR TRAN1 ;REAKE ERROR RETURN  ;COPY SEQUENCE L100: MOV #TRANF+6,EWORD MOV #4,TRANF+6  ;READ FULL BUFFER MOV #TRANF,-(SP) ;FROM UNIT 0 MOV #LNK0,-(SP) EMT 10 MOV #LNK0,-(SP)  ; .WAIT EMT 1 CLR UNIT  ;CHECK FOR ERRORS JSR R5,ERROR1 BR L100 L110: MOV #2,TRANF+6  ;WRITE FULL BUFFER MOV #TRANF,-(SP) ;TO UNIT 1 MOV #LNK1,-(SP) EMT 10 MOV #LNK1,-(SP)  ; .WAIT EMT 1 INC UNIT  ;CHECK FOR ERRORS JSR R5,ERROR1 BR L110  ;VERIFY SEQUENCE TSTWIND UNIT 0 MOV #1,TRAN1+4 MOV #TRAN1,-(SP) MOV #LNK0,-(SP) EMT 10 MOV #TRAN1,-(SP) ;REWIND UNIT 1 MOV #LNK1,-(SP) EMT 10 MOV #LNK1,-(SP) ; .WAIT EMT 1 MOV #LNK0,-(SP) ; .RLSE LNK0 EMT 7 MOV #LNK1,-(SP) ; .RLSE LNK1 EMT 7 MOV #LNKP,-(SP) ; .WAIT FOR TTY EMT 1 MOV #LNKP,-(SP) ; .RLSE LNKP EMT 7 JMP START ;RESTART ;READ/WRITE ERROR CHECK ERROR1: TST @EWORD ;ERROR? BPL E1.20 INC TCOUNT ;-- YES BEQ E1.10 RTS  VERIFY  ;VERIFY? BNE L120 JMP L170  ;-- NO L120: CLR SWITCH  ;-- YES. SET TO START MOV TRANF,TRAN1 MOV TRANF,TRAN2 MOV #TRAN1+6,EWORD CMP TRANF,#575. BLT L130 MOV #256.*2,TRAN1+4 MOV #256.*2,TRAN2+4 L130: MOV #TRAN1,-(SP) ;READ ORIGINAL FROM 0 MOV #LNK0,-(SP) EMT 10 MOV #LNK0,-(SP)  ; .WAIT EMT 1 CLR UNIT  ;CHECK FOR ERRORS JSR R5,ERROR1 BR L130 MOV #TRAN2+6,EWORD L140: MOV #TRAN2,-(SP) ;READ CR5 ;RETRY TRANSFER E1.10: ADD #60,UNIT ; 5 RETRIES ALREADY. MOVB UNIT,MSG5X ; TYPE ERROR NOTICE MOV #MSG5,-(SP) ; AND ABORT COPY. MOV #LNKP,-(SP) EMT 2 JMP L190 E1.20: MOV #-5,TCOUNT ;-- NO. RESET RETRY COUNT, TST (R5)+ ; BUMP RETURN BY 2, AND RTS R5 ; CONTINUE ;VERIFY ERROR HANDLER ERROR2: INC VCOUNT ;5 RETRIES YET? BEQ E2.20 JMP L100 ;-- NO. RECOPY BLOCK. E2.20: MOV #MSG6,-(SP) ;-- YES. TYPE ERROR NOTICE MOV #LNKP,-(SPOPY FROM 1 MOV #LNK1,-(SP) EMT 10 MOV #LNK1,-(SP)  ; .WAIT EMT 1 INC UNIT  ;CHECK FOR ERRORS JSR R5,ERROR1 BR L140 MOV #BUFF1,R0  ;SET UP COMPARE LOOP MOV #BUFF2,R1 MOV #-WBLOCK,R2 L150: CMP (R0)+,(R1)+  ;COMPARE BEQ L160 JMP ERROR2  ;OOPS! WE GOOFED. L160: INC R2 BNE L150 TST SWITCH  ;ALL OK. BOTH HALF- BNE L170  ;BUFFERS TESTED YET? INC SWITCH  ;-- NO. DO SECOND ONE. ADD #HBLK,TRAN1 ADD #HBLK,TRAN2 CMP TRAN2,#578. ) ; AND ABORT COPY. EMT 2 JMP L190 ;CONSOLE MESSAGES MSG1: .WORD 0,0 .WORD MSG1E-MSG1-6 .BYTE 15,12,12 .ASCII /DECTAPE COPY V001A/ .BYTE 15,12,12 MSG1E=. .EVEN MSG2: .WORD 0,0 .WORD MSG2E-MSG2-6 .ASCII /ORIGINAL ON UNIT / .BYTE 13 MSG2E=. .EVEN MSG3: .WORD 0,0 .WORD MSG3E-MSG3-6 .ASCII /COPY TO UNIT / .BYTE 13 MSG3E=. .EVEN MSG4: .WORD 0,0 .WORD MSG4E-MSG4-6 .ASCII /????/ .BYTE 15,12 MSG4E=. .EVEN MSG5: . BGE L180 JMP L130  ;INCREMENT COPY BLOCKS OR END L170: ADD #FBLK,TRANF  ;BUMP BLOCK NO. CMP TRANF,#578. BGE L180  ;-- NO. CONTINUE MOV #-5,VCOUNT CMP TRANF,#575. BLT L180-4 MOV #256.*2,TRANF+4 JMP L100 L180: MOV #MSG7,-(SP)  ;-- YES. TYPE END MESSAGE MOV #LNKP,-(SP) EMT 2 L190: CLR TRAN1  ;REWIND UNIT 0 MOV #1,TRAN1+4 MOV #TRAN1,-(SP) MOV #LNK0,-(SP) EMT 10 MOV #TRAN1,-(SP) ;REWIND UNIWORD 0,0 .WORD MSG5E-MSG5-6 .BYTE 15,12 .ASCII "*** I/O ERROR, UNIT " MSG5X: .BYTE 0,13 MSG5E=. .EVEN MSG6: .WORD 0,0 .WORD MSG6E-MSG6-6 .BYTE 15,12 .ASCII /*** UNRECOVERABLE COPY ERROR/ .BYTE 13 MSG6E=. .EVEN MSG7: .WORD 0,0 .WORD MSG7E-MSG7-6 .BYTE 15,12,12 .ASCII /COPY COMPLETED/ .BYTE 15,12 MSG7E=. .EVEN MSG8: .WORD 0,0 .WORD MSG8E-MSG8-6 .ASCII /VERIFY COPY (Y OR N)? / .BYTE 13 MSG8E=. .EVEN .END START T 1 MOV #LNK1,-(SP) EMT 10 MOV #LNK1,-(SP)  ; .WAIT EMT 1 MOV #LNK0,-(SP)  ; .RLSE LNK0 EMT 7 MOV #LNK1,-(SP)  ; .RLSE LNK1 EMT 7 MOV #LNKP,-(SP)  ; .WAIT FOR TTY EMT 1 MOV #LNKP,-(SP)  ; .RLSE LNKP EMT 7 JMP START  ;RESTART  ;READ/WRITE ERROR CHECK ERROR1: TST @EWORD  ;ERROR? BPL E1.20 INC TCOUNT  ;-- YES BEQ E1.10 RTS R5   ;RETRY TRANSFER E1.10: ADD #60,UNIT  ; 5 RETRIES ALREADY. MOVB UNIT,MSG5X  ; TYPE ERROR NOTICE MOV #MSG5,-(SP)  ; AND ABORT COPY. MOV #LNKP,-(SP) EMT 2 JMP L190 E1.20: MOV #-5,TCOUNT  ;-- NO. RESET RETRY COUNT, TST (R5)+  ; BUMP RETURN BY 2, AND RTS R5   ; CONTINUE  ;VERIFY ERROR HANDLER ERROR2: INC VCOUNT  ;5 RETRIES YET? BEQ E2.20 JMP L100  ;-- NO. RECOPY BLOCK. E2.20: MOV #MSG6,-(SP)  ;-- YES. TYPE ERROR NOTICE MOV #LNKP,-(SP)  ; AND ABORT COPY. EMT 2 JMP L190  ;CONSOLE MESSAGES MSG1: .WORD 0,0 .WORD MSG1E-MSG1-SINGLE INPUT SOURCE RECORD. UPD7690 ; NO REGISTERS ARE USED NOR ARE ANY ARGUMENTS PASSED. UPD7700 ; IF AN EOF STATUS IS RETURNED BY THE READ/WRITE PROCESSOR, 'SIEOF' UPD7710 ; WILL BE SET TO +1. ALL OTHER NON-ZERO STATUS SETTINGS WILL CAUSE A UPD7720 ; CALL TO THE PACKAGE ERROR ROUTINE 'ERR' WITH AN ERROR NUMBER OF 52. UPD7730 ; THE ERROR STATUS WILL BE PASSED TO 'ERR' ON THE STACK FOR DISPLAY UPD7740 ; ON THE TTY. 0 D OR.W D:ENCR 8097PD U R.BEUM NNELIG BE. RRCO; 0 D OR.W : STCR 7097PD UITN IOLMBSYE ATPD UNTREUR CAS H 1TEBY; //- IISC.A: OLMBSY 6097PD U R BEUM NNELIT PUINT ENRRCU; 0 D OR.W I:NELI 5097PD U T.PUINI CSG INSSCERO PINE USR FO; 0 D OR.W: ET2RCS 4097PD U S LEABRIVA ; 3097PD U R ROERC PE SONTIECRRCO; 4//7 IISC.A 4:6 .BYTE 15,12,12 .ASCII /DECTAPE COPY / .ASCII /V01B/ .BYTE 15,12,12 MSG1E=. .EVEN MSG2: .WORD 0,0 .WORD MSG2E-MSG2-6 .ASCII /ORIGINAL ON UNIT / .BYTE 13 MSG2E=. .EVEN MSG3: .WORD 0,0 .WORD MSG3E-MSG3-6 .ASCII /COPY TO UNIT / .BYTE 13 MSG3E=. .EVEN MSG4: .WORD 0,0 .WORD MSG4E-MSG4-6 .ASCII /????/ .BYTE 15,12 MSG4E=. .EVEN MSG5: .WORD 0,0 .WORD MSG5E-MSG5-6 .BYTE 15,12 .ASCII "*** I/O ERROR, UNIT " MSG5X  UPD7750 ; THIS WILL BE FOLLOWED BY AN EXIT TO TERMINATE THE PROGRAM. UPD7760 ; UPD7770 INSOR =. ; ENTRY POINT UPD7780 MOV #SRBUFH,-(SP) ; SOURCE LINE BUFFER HEAD ADD. UPD7810 MOV #SILKBK,-(SP) ; SOURCE INPUT LINK BLOCK ADDRESS UPD7820 EMT 4 ; READ A RECORD  UPD7880 INSO10: BITB O100,SRBUFH+3 ; TEST FOR EOF UPD7890 BEQ INSO20 ; BRANCH IF NOT UPD7900 INC SIEOF ; SET EOF FLAG. UPD7910 RTS PC ; RETURN UPD7920 INSO20: MOV A52,ERRNUM ; UPD7930 CLR -(SP) ; CLEAR NEXT WORD ON STACK FOR BYTE CODEA7 2097PD U D IEIFECSPT PUINE RCOU SNO; 3//7 IISC.A 3:A7 1097PD U R ROERC PE SCEURSOT PUIN; 2//7 IISC.A 2:A7 0097PD U R ROERC PE SUTTPOU; 1//7 IISC.A 1:A7 9096PD U R ROERX TAYN SI1CS; 0//7 IISC.A 0:A7 8096PD U RSBEUM NNELIE NCUEEQ SOFT OU; 9//5 IISC.A 9:A5 7096PD U. GEAR LTOR BEUM NNELID AR CONTIECRRCO; 8//5 IISC.A 8:A5 6096PD U . : .BYTE 0,13 MSG5E=. .EVEN MSG6: .WORD 0,0 .WORD MSG6E-MSG6-6 .BYTE 15,12 .ASCII /*** UNRECOVERABLE COPY ERROR/ .BYTE 13 MSG6E=. .EVEN MSG7: .WORD 0,0 .WORD MSG7E-MSG7-6 .BYTE 15,12,12 .ASCII /COPY COMPLETED/ .BYTE 15,12 MSG7E=. .EVEN MSG8: .WORD 0,0 .WORD MSG8E-MSG8-6 .ASCII /VERIFY COPY (Y OR N)? / .BYTE 13 MSG8E=. .EVEN .END START  UPD7830 MOV #SILKBK,-(SP) ; LINK BLOCK ADDRESS FOR WAIT UPD7840 EMT 1 ; WAIT UNTIL I/O IS DONE UPD7850 TSTB SRBUFH+3 ; TEST STATUS BYTE UPD7860 BNE INSO10 ; BRANCH IF NOT OK UPD7870 RTS PC ; RETURN UPD7880 INSO10: BITB O100,SRBUFH+3 ; TEST FOR EOF UPD7890  UPD7940 MOVB SRBUFH+3,(SP) ; PUT ERROR STATUS ON STACK UPD7950 JSR PC,ERR ; GO DO ERROR STUFF UPD7960 EMT 60 ; EXIT UPD7970 .PAGE UPD7980 ; THIS SUBROUTINE IS USED TO READ A SINGLE CORRECTION RECORD UPD7990 ; NO REGISTERS ARE USED NOR ARE ANY ARGUMENTS PASSED. UPD8000 ; IF AN ORRR EATRMFOS HAD AR CONTIECRRCO; 7//5 IISC.A 7:A5 5096PD U . ITUNO I/T IS LOMFRR ROER; 6//5 IISC.A 6:A5 4096PD UT)ECOTPR (. LEFIO SLD OTELEDET NON CA; 5//5 IISC.A 5:A5 3096PD U R.ROERT PUUT OONTIECRRCO; 4//5 IISC.A 4:A5 2096PD U ORRR EUTNP IONTIECRRCO; 3//5 IISC.A 3:A5 1096PD U ORRR E/O IUTNP ICEURSO; 2//5 IISC.A 2:A5 0096PD U R.ROERO I/ TEBYS TUTA SOR FSKMAF EO; 0001 D OR.W : 00O1 9094PD U S NTTANSCO ; 8094PD U ; 7094PD U . GEKAAC PTEDAUPE THY BEDUSS LEABRIVAD ANS NTTANSCOE THE ARE ESTH; 6094PD U E AG.P 5094PD U E.OD CONMMCOO TGO; 10C4AS BR 4094PD U . OWFLEROV. GEAR LBEQ INSO20 ; BRANCH IF NOT UPD7900 INC SIEOF ; SET EOF FLAG. UPD7910 RTS PC ; RETURN UPD7920 INSO20: MOV A52,ERRNUM ; UPD7930 CLR -(SP) ; CLEAR NEXT WORD ON STACK FOR BYTE CODE UPD7940 MOVB SRBUFH+3,(SP) ; PUT ERROR STATUS ON STACK UPD7950 JSR PC,ERR EOF STATUS IS RETURNED BY THE READ/WRITE PROCESSOR, 'CREOF' UPD8010 ; WILL BE SET TO +1. ALL OTHER NON-ZERO STATUS SETTINGS WILL CAUSE A UPD8020 ; CALL TO THE PACKAGE ERROR ROUTINE 'ERR' WITH AN ERROR NUMBER OF 53. UPD8030 ; THE ERROR STATUS WILL BE PASSED TO 'ERR' ON THE STACK FOR DISPLAY UPD8040 ; ON THE TTY. UPD8050 ; THIS WILL BE FOLLOWED BY AN EXIT TO TERMINATE THE PROGRAM. UPD8060 ; T PUUT OCEURSO; 1//5 IISC.A 1:A5 9095PD U O =SSI- 3 ; 8095PD U R =CSO- 2 ; 7095PD U R =CSI- 1 ; 6095PD U . ORRR ESI CS.ERMBNUR ROER; 0//5 IISC.A 0:A5 5095PD U ; B//K 50AD.R B:RK 4095PD U ; TOR BEUM NNELI; UMRNER8,A5 V MO: 40C4AS 3094PD U E OD CONMMCOO TGO; 10C4AS BR 2094PD U . RSBEUM NNELIE NCUEEQ SOFT OU; UMRNER9,A5 V MO: 20C4AS 1094PD U ITEX; 60 T EM 0594PD U ; 1 T EM 0494PD U ; ) SP-(K,KBOL#C V MO 0394PD U ;  ; GO DO ERROR STUFF UPD7960 EMT 60 ; EXIT UPD7970 .PAGE UPD7980 ; THIS SUBROUTINE IS USED TO READ A SINGLE CORRECTION RECORD UPD7990 ; NO REGISTERS ARE USED NOR ARE ANY ARGUMENTS PASSED. UPD8000 ; IF AN EOF STATUS IS RETURNED BY THE READ/WRITE PROCESSOR, 'CREOF' UPD8010 ; WILL BE SET TO +1. ALL OTHER NON-ZERO STA UPD8070 ; IF THE LISTING SWITCH IS SET THIS SUBROUTINE WILL PRINT THE UPD8080 ; CORRECTION IMAGES ON THE LINE PRINTER. IF THE LINE PRINTER UPD8090 ; DOES NOT EXIST, THE LISTING WILL BE PRINTED ON THE TTY UPD8100 ; UNLESS THE CORRECTION FILE IS ON THE TTY. IN THIS SINGLE UPD8110 ; THE LISTING OF THE CORRECTION FILE WILL BE SUPPRESED. UPD8120 ; T//D 50AD.R T:RD 3095PD U ; F//D 50AD.R F:RD 2095PD U ; R//C 50AD.R R:RC 1095PD U . SOI= SIF. XT ELEFIW NE; / PD/U 50AD.R : PDRU 0095PD U TEBYS TUTA SOR FSKMAF EO; 0001 D OR.W : 00O1 9094PD U S NTTANSCO ; 8094PD U 2 T EM 0294PD U ; ) SP-(K,KBOL#C V MO 0194PD U D.OREC RTEDAUPD BAE THT OUE ITWR; ) SP-(H,BFRI#C V MO 0094PD U . FFTU SORRR EUT OUT PGO; RR,EPC R JS 9093PD U. RR EOR FCKTA SINE LUVAD INNDFEOFT PU; ) SP-(),R2-( VBMO: 10C4AS 8093PD U R.ROERT MAOR FOR FREHE; UMRNER7,A5 V MO: 00C4AS 7093PD U RNTURE; PC TUS SETTINGS WILL CAUSE A UPD8020 ; CALL TO THE PACKAGE ERROR ROUTINE 'ERR' WITH AN ERROR NUMBER OF 53. UPD8030 ; THE ERROR STATUS WILL BE PASSED TO 'ERR' ON THE STACK FOR DISPLAY UPD8040 ; ON THE TTY. UPD8050 ; THIS WILL BE FOLLOWED BY AN EXIT TO TERMINATE THE PROGRAM. UPD8060 ; UPD8070 ; IF THE LISTING SWITCH IS SET THIS SUBROUTINE WILL PRINT THE  UPD8130 INCR =. ; ENTRY POINT UPD8140 MOV #CRIBFH,-(SP) ; LINE BUFER HEAD ADDRESS UPD8170 MOV #CRLKBK,-(SP) ; LINK BLOCK ADDRESS UPD8180 EMT 4 ; READ THE RECORD UPD8190 MOV #CRLKBK,-(SP) ; LINK BLOCK FOR WAIT UPD8200 EMT 1 ; WAIT ; 7094PD U . GEKAAC PTEDAUPE THY BEDUSS LEABRIVAD ANS NTTANSCOE THE ARE ESTH; 6094PD U E AG.P 5094PD U E.OD CONMMCOO TGO; 10C4AS BR 4094PD U . OWFLEROV. GEAR LTOR BEUM NNELI; UMRNER8,A5 V MO: 40C4AS 3094PD U E OD CONMMCOO TGO; 10C4AS BR 2094PD U . RSBEUM NNELIE NCUEEQ SOFT OU; UMRNER9,A5 V MO: 20C4AS 1094S RT 6093PD U D.BA. EIINSTCR; 20C4AS BR 2093PD U . OK. NDRESTCR; 20C4AS BR 2093PD U . OK. NDRENOE IN L. ET SIT BGNSI; 40C4AS I BM 2091PD U . LTSURED OLD TEIFSHO TTEBYW NED AD; 3 ,RR1 D AD 0091PD U N 10= 2 N* 5 =R3; R3 L AS 9090PD U 3. RINT ULES RHE T 5N= N N+ 4 =R3; 3 ,RR0 D AD - ON TTY. UPD8350 MOV #COLKBK,-(SP) ; GET LINK BLOCK ADDRESS UPD8360 EMT 2 ; WRITE UPD8370 MOV #COLKBK,-(SP) ; WAIT UNTIL DONE. UPD8380 EMT 1 ; UPD8390 .ENDC UPD8400 INCR05: RTS PC ; RETURN .R UPD8460 CLR -(SP) ; CLEAR NEXT WORD ON STACK FOR BYTE CODE UPD8470 MOVB CRIBFH+3,(SP) ; PUT ERROR STATUS ON STACK UPD8480 JSR PC,ERR ; GO DO ERROR STUFF UPD8490 EMT 60 ; EXIT THE PROGRAM. UPD8500 .PAGE UPD8510 ; THIS SUBROUTINE IS USED TO OUTPUT A SINGLE CORRECTION RECORD TO THE C2AS 8091PD U . R.ROERT MAOR FO. N; 00C4AS E BN 7691PD U K?ANBLA T IIS; 1 ,R60-040#0 PBCM 7391PD U S.YE; 10C2AS Q BE 7091PD U ? CRA T IIS; R10,06R-#C PBCM 6091PD U S.YE; 10C2AS Q BE 5091PD U A MMCOA T IIS; 1 ,R60-054#0 PBCM: 00C2AS 4091PD U 8090PD U CELA PND A10Y BR0 N 4 =R3; R3 L AS 7090PD U LYIPLTMUO TIST ULES RET NN 2 =R3; R3 L AS 6090PD U R TELAD ADR FOE LUVAL NAGIRI OVESA; 0 ,RR3 V MO 5090PD U . ORRR ES. IIT; 00C4AS E BG 4090PD U ) ERMBNUA T NO (GEAR LOO TIFE SE; 2 01,#R1 P CM 3090PD U . ERMBNUD ONEC SOR F50C2ASO T ; 2090PD U 1 UPD8410 INCR10: BITB O100,CRIBFH ; CHECK FOR EOF. UPD8420 BEQ INCR20 ; NOT EOF. GO TO ERROR. UPD8430 INC CREOF ; SET EOF FLAG. UPD8440 RTS PC ; RETURN UPD8450 INCR20: MOV A53,ERRNUM ; SET UP ERROR NUMBER UPD8460 CLR -(SP) ; CLEAR NEXT WORD ON STACK FOR BYTE CODE UPD8470 2 UPD8520 ; SOURCE OUTPUT FILE. NO ARGUMENTS ARE PASSED AND ONLY THE STACK UPD8530 ; POINTER IS USED. IF ANY I/O ERROR OCCURES, ERR IS CALLED WITH A UPD8540 ; NUMBER OF 54 AND THEN AN EXIT IS GIVEN. UPD8550 ; UPD8560 OUTCR =. ; ENTRY POINT UPD8570 MOV #CRIBFH,-(SP) ; CORRECTION LINE BUFF HEAD ADD. UPD8600 E YT BXTNER FOK AC BGO; 00C1AS BR 3091PD UR.ROER 7.7632.>NOE IN L. ET SIT BGNSI; 40C4AS I BM 2091PD U . LTSURED OLD TEIFSHO TTEBYW NED AD; 3 ,RR1 D AD 0091PD U N 10= 2 N* 5 =R3; R3 L AS 9090PD U 3. RINT ULES RHE T 5N= N N+ 4 =R3; 3 ,RR0 D AD 8090PD U CELA PND A10Y BR0 N 4 =R3; R3 L AS 7090PD U LYIPLTMUO TIST UL R.BEUM NSTIR FOR F00C2ASO T ; 1090PD U . CHANBRC MINADY R.BEUM N AOT NG.NE; 00C2AS I BM: 10C1AS 0090PD U. NOL MACIDET GEO T0'06 'HE TOFP RIST; 1 ,R60#0 B SU 9089PD U TEBYT GE; R1+,2)(R VBMO 8089PD U RDWOR EACL; R1 R CL: 00C1AS 7089PD UR FEUF BINE YT BNDCOSEO TEXND IUPT SE; 2 ,R+1UFRB#C V MO 6089PD U 5 MOVB CRIBFH+3,(SP) ; PUT ERROR STATUS ON STACK UPD8480 JSR PC,ERR ; GO DO ERROR STUFF UPD8490 EMT 60 ; EXIT THE PROGRAM. UPD8500 .PAGE UPD8510 ; THIS SUBROUTINE IS USED TO OUTPUT A SINGLE CORRECTION RECORD TO THE UPD8520 ; SOURCE OUTPUT FILE. NO ARGUMENTS ARE PASSED AND ONLY THE STACK UPD8530 ; POINTER IS USED. IF A6 MOV #SOLKBK,-(SP) ; SOURCE OUTPUT LINK BLOCK UPD8610 EMT 2 ; WRITE THE RECORD UPD8620 MOV #SOLKBK,-(SP) ; LINK BLOCK ADD FOR WAIT UPD8630 EMT 1 ; WAIT UNTIL I/O IS DONE UPD8640 TSTB CRIBFH+3 ; TEST STATUS BYTE UPD8650 BNE OTCR10 ; NO GOOD. UPD8660 RTS PC ES RET NN 2 =R3; R3 L AS 6090PD U R TELAD ADR FOE LUVAL NAGIRI OVESA; 0 ,RR3 V MO 5090PD U . ORRR ES. IIT; 00C4AS E BG 4090PD U ) ERMBNUA T NO (GEAR LOO TIFE SE; 2 01,#R1 P CM 3090PD U . ERMBNUD ONEC SOR F50C2ASO T ; 2090PD U R.BEUM NSTIR FOR F00C2ASO T ; 1090PD U . CHANBRC MINADY R.BEUM N AOT NG.NE; ; R3 R CL 3089PD U ERMBNUE IN LNGDIENE THR EACL; D ENCR R CL 2089PD U ERMBNUE IN LNGNIGIBEE THR EACL; STCR R CL 1089PD U NTOU CRDWOE AK MTOO TWY BDEVIDI; 10C1AS RBAS 0089PD U H NCRA BSTIR FOR FSSREDD AET S0;11SC,A-210C1AS0-20SC#A VBMO 9088PD U T INPOY TREN; =. I CBAS 8088PD U 9NY I/O ERROR OCCURES, ERR IS CALLED WITH A UPD8540 ; NUMBER OF 54 AND THEN AN EXIT IS GIVEN. UPD8550 ; UPD8560 OUTCR =. ; ENTRY POINT UPD8570 MOV #CRIBFH,-(SP) ; CORRECTION LINE BUFF HEAD ADD. UPD8600 MOV #SOLKBK,-(SP) ; SOURCE OUTPUT LINK BLOCK UPD8610 EMT 2 ; WRITE TH: ; OK. RETURN UPD8670 OTCR10: MOV A54,ERRNUM ; ERROR NUMBER UPD8680 CLR -(SP) ; CLEAR NEXT WORD ON STACK FOR BYTE CODE UPD8690 MOVB CRIBFH+3,(SP) ; PUT ERROR STATUS ON STACK UPD8700 JSR PC,ERR ; GO DO ERROR STUFF UPD8710 EMT 60 ; EXIT THE PROGRAM. UPD8720 .PAGE 00C2AS I BM: 10C1AS 0090PD U. NOL MACIDET GEO T0'06 'HE TOFP RIST; 1 ,R60#0 B SU 9089PD U TEBYT GE; R1+,2)(R VBMO 8089PD U RDWOR EACL; R1 R CL: 00C1AS 7089PD UR FEUF BINE YT BNDCOSEO TEXND IUPT SE; 2 ,R+1UFRB#C V MO 6089PD U ; R3 R CL 3089PD U ERMBNUE IN LNGDIENE THR EACL; D ENCR ; 7088PD U N.CA SHE TESATINRMTEO LS ANKLA B A. ONSIERNVCO; 6088PD U HE TESATINRMTEK ANBLA R OMAOM C AR.BEUM NRYNABIG INNDPOESRRCO; 5088PD U HE TTOING INTR SERCTRAHA CIISC ACHEAS RTVEON CNETIOUBRSUE TH; 4088PD U ; 2088PD U L.NAFID ANL IARTPAH OT BT.ULES R -R3 ; 1088PD U . ERFFBUE IN LONTIECRRCOE THO NT IEXND=E RECORD UPD8620 MOV #SOLKBK,-(SP) ; LINK BLOCK ADD FOR WAIT UPD8630 EMT 1 ; WAIT UNTIL I/O IS DONE UPD8640 TSTB CRIBFH+3 ; TEST STATUS BYTE UPD8650 BNE OTCR10 ; NO GOOD. UPD8660 RTS PC ; OK. RETURN UPD8670 OTCR10: MOV A54,ERRNUM ; ERROR NUMBER > UPD8730 ; THIS SUBROUTINE IS USED TO INTERPRET THE UPDATE LINE NUMBERS. UPD8740 ; THESE ARE OF THE FORM -N OR -N,M. THE FIRST CHARACTERS '-' MUST BE UPD8750 ; IN THE FIRST COLUMN. THEREFORE IT IS IN THE IS BYTE OF THE UPD8760 ; CORRECTION LINE BUFFER. NO IMBEDDED SPACES ARE PERMITER. UPD8770 ; REGISTERS R0 - R4 ARE USED AND HAVE THE FOLLOWING MEANING: UPD8780 ; R0 - TEMPORARY STORAGE FOR MULTIPLICATION R CL 2089PD U ERMBNUE IN LNGNIGIBEE THR EACL; STCR R CL 1089PD U NTOU CRDWOE AK MTOO TWY BDEVIDI; 10C1AS RBAS 0089PD U H NCRA BSTIR FOR FSSREDD AET S0;11SC,A-210C1AS0-20SC#A VBMO 9088PD U T INPOY TREN; =. I CBAS 8088PD U ; 7088PD U N.CA SHE TESATINRMTEO LS ANKLA B A. ONSIERNVCO; 60 I -R2 ; 0088PD U R.FEUF BNELIN IOCTREOR COMFRE YT BNTREUR C -R1 ; 9087PD U N IOATICPLTIUL MOR FGERATO SRYRAPOEM T -R0 ; 8087PD U G:INANMEG INOWLLFOE THE AV HND AEDUSE AR4 R -R0S ERSTGIRE; 7087PD U . ERITRMPEE ARS CEPA SEDDDBEIMO N. ERFFBUE IN LONTIECRRCO; 6087PD U E THF OTEBYS IHE TINS IITE OREFERTH N.UMOL CSTIR FHE TIN; 5087PD U E BSTMU' '-S ERCTRAHA CSTIR FHE T. ,M-NR O-NM OR FHE TOFE ARE ESTH; 40 UPD8680 CLR -(SP) ; CLEAR NEXT WORD ON STACK FOR BYTE CODE UPD8690 MOVB CRIBFH+3,(SP) ; PUT ERROR STATUS ON STACK UPD8700 JSR PC,ERR ; GO DO ERROR STUFF UPD8710 EMT 60 ; EXIT THE PROGRAM. UPD8720 .PAGE UPD8730 ; THIS SUBROUTINE IS USED TO INTERPRET THE UPDATE LINE NUMBERS. UPD87 UPD8790 ; R1 - CURRENT BYTE FROM CORRECTION LINE BUFFER. UPD8800 ; R2 - INDEX INTO THE CORRECTION LINE BUFFER. UPD8810 ; R3 - RESULT. BOTH PARTIAL AND FINAL. UPD8820 ; UPD8840 ; THE SUBROUTINE CONVERTS EACH ASCII CHARACTER STRING INTO THE UPD8850 ; CORRESPONDING BINARY NUMBER. A COMMA OR A BLANK TERMINATES THE UPD88TPUT FILE LST2720 EMT 57 ; LST2730 SUB R5,(SP) ; SET STATUS ST ONLY 1 (NO MORE) IS OK. LST2740 BEQ ST160 ; OK. GO INIT & OPEN IT. LST2750 MOV A71,ERRNUM ; SET ERROR NUMBER. TO MUCH STUFF. LST2760 ADD R5,(SP) ; RESET STATUS LST2770 JSR PC,ERR ; DO ERROR STUFF