IMD 1.17: 7/01/2010 22:38:18 NGEN 2.4 CTOS/VM (SAA-3401-5) O.S. BUILD KIT Diskette 1 of 3 Part Number 71-03382-03   03382-1/3^k^kx ;R9|M^J^F~τtFՈFԱA:r directory %' Copy files from [F0] to the directory of the logged in volume %' Video yesType [Kbd]PF Modify the following Path command as follows: 1) Supply the volume name where you wish to build the OS. 2) Supply the volume password for that volume (if one exists). Press GO when ready.Path VMGen1Create Directory 500Type [Kbd]PF New Command 'Link File System' [Sys]SubCmd.run 'Os Type' 'Version' '[File system name]' yNew Command 'Link CTOS' [Sys]SubCmd.run 'Os Type' 'Version' yNew Command 'Link CTOS VM' [Sys]SubCmd.run 'Os Type' 'Version' yLCopy %0%#0/[f0]/Link*.sub [Sys] yes no no yesLCopy %'File List '%0%#0/[f0]/* %'[File prefix(s) from] ' %'[File prefix(s) to] ' %'[File suffix(s)] ' %'[Overwrite OK?] 'yes %'[Confirm each?] 'no %'[Continue on error?] 'no %'[Verify copy?] 'yesType [kbd]PF Remove the diskette from the floppy drive and insert the OS Build diskette 2 of 3. INSERT DISK 2: AM  Press GO when Ready  1AAEF LInstall 'OS Build Diskette 2 of 3'Submit %0%#0/[f0]/All.sub %0%#0/[f0]/  3CS055)525O5j5y55555555555555 50575i5z55555(5g5o55551595u5555555x0xMxzxxxxxx+x=xXxgxsxxxxxxxxJxgxtxxxxxxx xpxxxxKxfxvxxxx]dkry (17Ga 2D\emz BKScv &5J`s ,h(.Fgp!'E{ 5 : X i      +|||||||>| +:RZFKB[`27Xr!-C9AFh%' CTOS Link Submit File %' %#0:NO OS NAME GIVEN2:%' %#1:NO OS VERSION GIVEN2:%' Link %'Object modules '@%0.link %'Run file '%0.Run %'[List file] ' %'[Publics?] ' %'[Line numbers?] ' %'[Stack size] '1024 %'[Max mem array] ' %'[Min mem array] ' %'[System build?] 'y %'[Version] '%0-%1 %'[Libraries] 'none %'[DS allocation?] ' %'[Symbol file] ' FileSys Wrap 11.0COEDFileSys FileSys_002b`FileSysGW\((IpT/t0R=kVer Fs_n-2.4 Linker 11.3 "(+ *C^,YzM fBBsN>\VV2P #a7 ?  9 S  P s| :C(S\hp????????????(,048<@R\`dhlptx +KYmMqNs!). O|OmmBmmmm{mmmQmmmxmmVN[O_iv{#7x    s   < A V o      & I P%0QT$OTh5=^s O b     oPoUobooooo>oFouooooooo)o2opouooood<fn`/}v7 < H  "^jGncqaaaIaaaaaaaa#a.aaaa9aQa]aba a a< ak a a ag a a a a' a5 a: aJJ>JzJJJJJJJ$J2JJJJJJJCJxJ}JJwJJJ=JCJxJ~JJJJJ7JJJJJJJJ1J7JYJkJqJJJJJJ0JXJ^JxJ~JJ J&J<JdJJJJ J J= JN JT Jc J J J7M #/#Pal!6DeKQ*?LUi f`6N]i%7I`ls }HM&?fr,2IOTa Vu{ k R} b l    J h-IorH\pOy***i******!*+*******;*V*[*T *d *| *-Z L-***** *]***/********X******** ****N**AY^d HQA_/ ciw5:>;NY `0 P1p2@4;O BP1? 7o`7>pCE `T^pepg~ /0`_0/P? po _  /?o PnwtvrNk/, su#;w$r*w^BBkNTVV P."6H\p!4{n}???? ?0?!mmmVmm (=0 [   +Ifr'Ec;~X+O&I>    C R g x )oooo>oUoqoooooo o#oHoSoo?o{5x    _Tpnaearagaaa/aAaa aKaaCaaa%ahaaaaaaa;amaaa a a, a8 av ab a aaZaa4|>  Sp~***a******-N *BNV?moaJ5x|**j4hjP/|P@VFXF^F>` r 6@) 6@%FF&GF&GF&GjjFP/|P@v 0Fj hYKFjjP/|P@&jjP/|P@>` r j s>N u"j $7RP6j hjEP@j D>N uj9>N u0j{$7RPRPQhRPQdP@jT4jS$7RP6j hjEP@>N tjCRP6j hjEP@>` rE*&GPY͵ j"jP/|P@j#jP/|P@jjP/|P@&H@jRPRPQhRPQdP@jo6RPRPQhRPQdP@j$jP/|P@N <t< u>@vh;d f >@vh&>@v>N uh  j FvYF^SwFVFFNQNZ;t PYF^h @%h F+N;sje4Fh FUvYF]UF&GF&G]FF;w#؋Vڊr jFuӠreF%FN؊F&GU FRHN;rW؍6^^FFO& O&LO&LO &LO &L &DP1P@Fu>`uA>@v:>lt3FlHN;r#GP1P@Fuҋ]U|P|PJPzP>P~P2PP&PtPPPPP]UvPP^SPNlP@]UQFF  GJgHPGFgDPRG,W.Fv֍FP-rFr+yF S@[G]^㉇F@G F@G`F@G!PFPrFryF S@[G]^㉇F@G F@G`F@G!G$FFLF xtPFPs׋FsF SP"б P[W O O`F @G]F@$G!FFv֍FP,sFsF SP"б P[W O O`F @G]F@$,G!FFFt4PPFP/|P@FFF^&G^&tH&GHFFFPY~FF;wPYv~FuދFFFHv t_HvPYFF;w$@FHFuӋGt>nt"FF;nw PYhFu>jt9FF;jw+7PYw+F 10+v^F1FFu͋]UvPP^SPNlP@]U F FNu6NFwa؋yF t؀$u O`;NuFFu6~u2FFw~؋F t؊O`;NuFFuY~uU>ruf>rrFt % FFFw؋F t ؊O`;NtFu^~uyFP~uJ>N uFFFFFw)؋yF t؀$u O`;NuFFuσ~t9FF;w+|F9Fu؍G^&&_FFu^&Z&W]U]U PPP/|P@&u4F^4P&w &GP&G PFP P^S& u:F^:P&w v&G P&G PF PP^S\t]UnhhnN]U8l tUHlPYzFFF;w1PYpGfFppFvzFu6Yb`dPPP,F> uIIFމF܉FrnlFFɈFȈFʡp;v PYPY PY PY>N tFtPP 6l桪F;ss F@Fl@Fl@F@F@F@FFlP6r\FFΈF̓~tFPFPFPFP1F u׋F;s Fˋ@FF̋@FFF΋@FF͋@FF͋@Fr@F@FFF?rFFvWPFP, tFHFFN͈NϋN@tPP 6l桪F;rF Fl@Fl@FFʋ@FʋF@FF@F@FFl@Fl$@FFʋ@FʋF@F$<t/v 6n桬F;sk Fn@Fn@FF@F@FFȋ@FFFvPv 6l桪F;shF޹ Fl@Fl@FFʋ@FF@FF@lF@FFt ;sF$<tv 6n桬F;skF Fȋ@FȋFFn@Fn@FF@F@FvE FtpF;sgF Fn@Fn@FF@FFȋ@F@FFnF$< uv6r\dFFΈF̓~tFPFPFPFP1F u׋F;sι Fˋ@FF̋@FFF΋@FF͋@Fr@FF@FFFNrFtvP6l桪F;sjF޹ Fl@Fl@FFɋ@FɋF@FF@Fl(FtFFF܉F>pt ulpPY|FЉFԉF҉FFFFFHN;s ^.HVI v֍FP r{F;rF S@[G]^㉇F @G!F @G F @G`G@GA*GFGJ2OH G9|rrPFű]UQ>N t+V0RVFZpVFV]UQ^&FpH^;rmğ~&G$:FuOaPY6|^ķ~aFGXF^&Fu]U3PYG2G1~unGG G#G-G G'G%GG+>u G2G2A~tFGFG FG FG#FG'FG)FG%FGFG+FG-NO/G2vE FFGFGFGFGNO FG FGFGFGF0GG2GGGGG!G]U$PYN ؉FGF"GNOF$GF&G F(G F*GF,GF.GNOF0GF2GF4GF6GFGFG G"G#]U9TvćR " 9Vvć " 9evc ؍(*j 0,w2G45G68(P tP49Xvć& " ܡj h PQP l P4]UQQ>N t>N u >N u >nu 6 rT  FnHN;r, t؋d t uFuFF;v؋ t  uڊ_!:ʀ Ӌ؈W#G#6D!  G"wrTPuWG"wPs%G#G>FtH]UFF t uF~w$~tW4FYu.F~w#PsV>Yu\WvBFuךF uF^ &Ft!^&~u[r!\G(ЋW^&&Z\WG(F tF~ w5Pr~ˀ>Ytˋ\w^<8PsFuŸrˋ\WF_+@F\wPs\wZF @Ps\wjsF\WuFt6Ps+\WF>Yu\whsˋ\WFaU\whs\whs]Ps$>Yu\W$HPs>Ytˋ\WF\G(ЋWsu>Ht>Ht>HtFF@F v<[=@oFPs[>YusK>Ht>YtF~w$Ps$>Yu\W^IFu֚r~ˀ>Hu˰FI"ʈNuD"UVKNu#F~wF~wFFuFuF<t <~/u)ˊFYF~ w8F~w(\WF0tFt $YFuFu°d t 5uF0F\WFt Fu˰U< ]a\Wd t 5u\WF~2w=\WG(  t 5u\G(ЋW  t 5uFuU\wjs]U>N u P Ps P Ps]UQQ>lu<$FlHN;s t5؃u/PFgFPFPFPFVW0wrTFWpwrTFW t uGW GFtL]UQ2u2" t u" t u W' t uW' t u  z0 z0 `z1 z1  `z2 z2 `z3 z3 `Lz4 z4 `z5 z5 `WFd t uWFd t uWFd t uPF t uF]U F~wQFFFuwrTFFu,wrTF@tw rTvBFu]UQQFFFuWFFuF@t W F]UF]U%tm&t^?uPG$s PF t2=uz$uPF tPFMGFFF;w9~v8GuOQLQPtuaFuFF;w~t Fu޸0 GpG&G#]U >N u<"@2>>N u<@>"sFF>uB @ 9s|G8G#uO$:tu FsFG#Fr~tG:W@  5*:6Tt6666666666 LocalMasterencodeFs_n-2.4T2  <X Xp<$<<<$4Sysa<X XP@ABCD E X\"G  l`  d2h ptx|                    ( $  ,0 U^SvPv ^Sv XPv FH;r-XĢuŸPFP^SP >t^Svs]Uvv  ^SvQP ^Sv " P P  Ȋ :r: " :v   * 󈄾 uPv PP^Sv > u^Svs]U dFF ;FvFH;sF H;r:S^6&^& [  Ĵu t$  Ĵtp PFP^SP ]U d^Sv~tA s^Sv~tA s ^Sv PeP ^SFP QP  ^K  v! Pv9 1 ظ PFP^SP  PF P^SP ]UFPN Q^Sv RdWFPQV] U~Nt+Jt@]U~Nv vv~^Y] U   F;w)+^& &  uʂ> u]U FH ;r"^& &  uЂ> u]UF;FrF]UF;FwF]U <t #P4 PSLP@ ]UvFt FFFn p Fr &GsR/FF~uFlNF;\sE&FNQ)^wR F8>r t%n &Pu+Jt~u>n ^r u+JVtr +HF n @F Fr F t! vIv N F~u>r un &?{u_P}PSr9PSPsFFn &?[u>r tP]PsFXRn &8u->r t&FWPs>r wPF~u>r vqPP6r >!u tFȴ&Gs#>+uȴ>u>r u FFs9n Gn p r P6Rs>>r wUPP6r G&n &?r tP>PsFFr >r 2wX)~u>r wFPP6r ZFsKF;\s^w))Fr 2w^6n r Fr >u>$t>r<0r<9w >>uF7F<2vNO~t>FFw9ر0VsF 1Ѿ+NF   $tG!GXsHuwˋ8G2tW-'sˋG(F@u ufG>N;tFW"6t*G! Ƣ>Ms u HR FjyF˚$$">N u2t  w 6D6B"HP$2u"HW)w @G*O! $2uW/ wFn*+s,FFMFF(?F8)(F )(FjhLG>FG"(sw$2u"HW)>N u2t  GBGD)P6D6B"HP$$2uW/F tHPgF*rFsv6$ˡuw 1FFuFs>at>uPZPu-6& FS^PТ PbPu9r< |c  9rj| tSQ؍GPu=~t'Gs %t#t,G& t N u\>u6t PGPt>tOwFF;v~PGPuuCPu PPPt!tPG!PuGp |#t~t,FtU>u@F>tAN"r~uFrFst ]UQ^ &F^&;u^ S^SF@Pt;u]UQr In Fu+JV v t vPF@P]UNF+ȋvn 1~FNr ;s+Hr r n v@n p t ]U< t #P4.#+( s+ >tx 9v u؂ ux x ٍ F^6x z x Fv&z PPV *ɵQFx x s nPPnd>tr [FV | uLG& u;Hu@.wFwDwJ, t x 9v uOLQNYN؂ ux x F=rJwFwDwJ, t GJ@GJN;GHrOJFx vvx ɵ ~v FGLx x s pPPnwFwDwJ, t  t >uM yP4siF&&F&;Nru ]øPb]UQQFFFNFv x ;s ;r1N,Fv =XrF;x s v FFsnFv v Fv vNFv F؊Nv t FFv  F"Fs, r% >` r Pj PfSF]UQQP,TP\P@6P$F t6P$F~t6Pj>u_ S` 6DF6 V&^&&GF9FtAFĴv &G#ć뷃>u6q>uPc&u 6S SU~u*^& ?u$^&G&GP&Y ]UQQ6FP$ u-^&G;uF&GS6T^S6TFP$ u6^Sދ]UP4]FF;FrXFuw FuhAw @t hBLW ^FuFF;FrZFuw= FuhCw& @u hDLw ^FuG* uˋG6>utˠHsˋG]uwG"t:tQ4G t@' r's jh,h,LˋG1FG16D uD FF&|tuG1G1:FtGX$G1F;  2uW/G* uj4_ ^F&GFF^&G"F~u F tHPMFs:$F-F t&=LuF~,uFF@FFF t L~WFN u d SwBDjRPj$$ t 5u$2uW)]&sv4F$'s=It,$u uj4G]F~,u_*_ ^F&GtF2uW// &vG#uwW#Fsv>tM8G2tW-G!jFF~wZ t 5uFuދww F%W#G2tW-&[$2uI"Z  t 5u"Z t 5u W'Z  t 5uW'dZ t 5uwF Z t 5uwcFww F}Z t 5uPNFU4u>(tv$w4x.tњ]G* uj4G"FO"uwOu+:uz>N u9O4u>(teh-2]h-ZˋG FF>(Pu"/ 򤠎BCttGG.R&t&^&Gu(O&G:ˋ$uG-G>(tPyG$G&G$6D"6uwW*L! шذ8G2tW-jFG>^&Guh,GG,U*v]2tW-2u w/js u؀"tW좎u'sjhEhEq's+j6$s:=jOsˠ$:G!thF3$ rr`$YW좎t hGLjsjs+,'s j6$%"u0 s%t$P[$ˡG> t"uuwG"˸uwG"gU6D*D8G$6S]9FuhhFgsU2u^㋟y^G#>W-w%rT%FW-^:NtF^F~wFFuVFF~wFFuF2tW-w%rT%FuËW-FFFuvwFFuJvgTF@u=VF~w>FFFuv:FFu v*F@uvFFuG* uˋG6>utˠHsˋG]G"t:tQ4;$tG!6D(F@u ufG>N;t8uwFG" uFv$ˋGXsH˚(>N uw4x..tFFw G(G*G,@$.vFG"uw6FwPswrT:tF@FdvhK4ƠN u h js.FW0wjswjsw rTFw rTFWpw0Psw1PsW0wFPswFPsBDFVw RP.HP$U>N u]d SwBD.M$ t 5u$]u uv4_]/wrTBX9r*~Iu#9$7hs98sv48FFw.؋;uyvG#G"Fuʡuuv'GW 7hs8GFFF;wZ؋;uGy uQ4O!hlGW G>FuFGW wrTFUW d t 5uW G7hs]FF~twrT$FFuU4u>(tvu$w4x.tњ] G* uj4"uFFG"uwG9sFIF->u>Frs0>N u 4uYwrT;u >(u37Fr;<t<u0s)>N u 4u>(tv|uvˋFs>u>uwrTtЋG FF>(u/B;t@t#"N uzZtoZu.G\W^tƇ ZƇG",Zu$G\W^tG"!r"uZw[eF tËZƇG G"6\\$G!$ZGF6DG.DG0D :tD FFGV&TWW#шWs &DG2^&GZGv&DGG^&O&wZF^&Gu ZGTF^&GZGTZGV6t OuGGTdGщWGxZGT6DG2D.PĈGXG>N uH G W" ZG\W^ZG\W^FVFGFGFGFGGZGt:uGG.g9s >(u(x&t^&Gu(O&G:O$u#GFG>(t;PG$G&G$ttG&ˋG"\uwP$G>^&Guh,GG,U*Bt:s;v]U>2u>4t ":u]ð]wrTF t؀"u F $2Fr$&˂>u"t"uuwG"$uZ6D$_! 6T 4hswrT$FW G7hs^F8tWpwrTFwrTFW0wrTFwrTF F4UF$*u:G( uj4G6s  tꡮG*$$]$FF;w ؋y t 8O"t$Fu֚$U$u]˚]>N uTF sF Fh,js:Fh"FPsFV ĺ"hF PsF2` 8N tN sFF* 60 js, F6<FPsFV ċ<6>F PsF ĺ P P PsF@RFPsU>N u** ]U8N u** ]U P$Ps]U P Ps]6@rT%P6@rT%Y@%?F UFX>N u-@uwIs쨀tu;yt hM FRu tFNNNw؀$u :FFF$v^FFwP؋y t4ـ$uv sg$uvM sgFuGtGXG$ug2u FFFFG1sW+F W+F2tG1sW W W# W GGGG!GUGXs6g$u W# W GHGX]ˋG GGG!\]U$$u t؀$u vLvl[$]>N tO@F4uGBG4uyG s^Fg.BGBGDd6D6BFHPju^F>d N^Y^SjvDd SwBD*G.G0fBGBGDw4F`.ˋGBGDG O@F4uj0tdO r]g.BGBGD6D6BFHPju^F6d NFY^SjvDGFF@u Dufw4G,@.F1vW,G4Uv vvFVr ;JuF:OuF;Mu7 JFVLNQRPPP|,F tJF]Uv v vGFVsNG2 P^SFPvvFP!] U^ Sv vvP|,] UP6N6LPB,]U Jv vvLNQRPPB,]Uv vvFV_2 S^ SWRPFP"FhsB uAhPvvPP|,F u"h~ t   4GFZUtGF u)w4J ZGJGZsJKZ8GUu G FFr"Z,uG ;v +h-ð\G(ЋW_ ^F&"t&_^F6ZD &lZG G u6\D(ЋTGUGËZ uw Z4 ZGZPF ukZG6D!$G GGGGGG4_ 4F tËZtËZG $<u3 9FuZGZw  ËFG FF6ZDU<u<u GG.ËZUu4u ,thu&t(^&GuZG O&G:G"ËG-GZ tP&^&Guh,GG,UZw 8 ZG )G >J)tv]j4Fh4FFF\FZFFs\FWG-s6^8u`^^Fv\wrT\G-G,u.F@F8u`FF;^uF\F@^\G$WG&wrTFFr \Wc\G-uWF#;thF%FFn~tF\WFt":uWFwrTFF$FF FFFFw2؋ t؊O :NuO!:Nu 6\D$Fuƃ>t?G[ZD G* u 4F uZu GVspF tsn>N unZu.G\W^tƇ ZƇG":Zu*G\W^tG" pr~F t =tP(4t4s<FFF\FZF~w#\WF sZ uFu% U6D*D8G$D"6S]l FFZ_ . D ^ 9 8 k 8 q ZGrs]ZG6D">N tr8tVGVGXVXRPIQjuRT>^YRSjvDRTPwأVXVZG.X6Zu.V6DVDXVO.G0\G.jZ?WwjGPj FF u˸ZGOQj POQPԋZGrs G"ZG6D">N ussk8u,RTPwأVXVZG.X6Zu.V6DVDXVO.G0\G.Pjj(uZ?WwjGPj\WZG FZGsFZG=F uZG ru܋\tG$j0 j8 FZ. u  G W" ZG\W^G0tËZG.G2HFG0FuËF@1ZG.tLJ ZLJG.Z++tƇZtƇ ZƇ8ZZGGG2ËZPĈGXGG2FFwe؋ t!؋O]\يW)r؊W"t tFu._[ZTtOTuhhg(47FF\FZFGTJF\G)sv4ZGsuZGZw8 FK\G)=uG"FrKFFw0؋ t؂"tvG#G"FuȋFF"tvG#G"\G$vFr\G)G(ЋWwrTFt4s<FFFZF\ZG.FG0F\wrTF\WFZG2HFNQvvP>N u2F$\u h js h js\W F\W,Fsjl\Wj]Uhj9]UZtZGhbIZG,>N uxuq6\L.rxf ubVGVGXVXRPIQjuRT6FYRSjvDZ,uGG]]\G& FsËFF+ȉN\G.s ZO,~t ZFG,ZG2+G,FZG,G2FG.G0 ZGZGGUG4FtGZF$FFNN<sFZGËZGZs'~u!G7FG8FG9FG:Fvv(ZG@F@u G" F>@u>u>u;t4u G6;v G5h-ˋGDF4uh0tbO r[g.GGRPFHPjuhj6NFYhSjvD6|4WD,A.F>1uFW,X@G4x.u&E"G FF>QuFFs;>u4>u-G"A2W6u,-.h<@u uFs>uGG.~>@u>u>u ;th^&t)^&GuG6O&G:<ˋ$uG-G6tiPaG$G&G$G"+WG>^&Guh,GG,>uˡFFF؋WwrT$W"ukhI>tj4 <r tG6G* O*O8L$6Vb"uPs_  \W\WF~'wx\WFuFtZNsXZ uj\G*LZ u-FsF@F2F \WWFFu\WUj*h>]U\G*sG*Wh|]UF\ G G W]UF\#G G W]UZ ]U^&;F sMNs6\T^&\W^&7^&^&r~ZG ;F t]ZG F~ wN t]á P$Ps]U>N t]á P Ps]UF؃*uurE>t4r.pr}r|G( uj4G6s  u-tG"6D6w*G6G5<]t>t˰FF9FwmzA#zP sV*tL"tFsFG_PG_tu9G"<t.<t*r"uG""ts؋G] uj4G"t:t <tQ4G!GDF"u4u GG4tG s[G.NᣠGGRPIQjuhj>N^YhSjvDhjPwأ G.G0fGG tr<lnFGFN;rl&fFulRPGFHPjuhj6LF>^YhSjvD*v&FGFN;r&FuhjPwأw4>ED`._ D<G"pG"vPG(G*G,w4p.<U>1u < W wPs>vGFW W <1tPuGsWGFGF1PYWw GAPswPs W"u,]$FɀQZ ‹G#P$PsG# FWFHFW0wFPsFWNw hsFWRFPsWrwjsWwhsW RjsN<1tN u h$Psv66vsv4,-.f uv4G]vFF;w"؋;uG#O"Fuԡs>tj4h<vFF;wO؋;u< uQ4G!W<G>Fu<st4U2Z t 5u]FFZ t 5uF~w&~tWFu>u>u &uˡRPGDHPju^FF9|FF<w^&)FFu^&FSjvDF=9|t=CPu~u˸G(G*pj4UF6jDvIDs"FsFC4P6pFr>uF[FT>GuMFjGDs6jDvIDFjtFFFv]UGEICD@rC6C4PCP@Ë4lVXƇ4aD]˰PD]UQvD@sF#C4FC^ع++N44F+؍4ȰaD]UQF^Gw DPIDr PF]UC4fFs6DPPCƇWG7PfG PGyW{6fDT DGWD aD]UQQ@sF# FAF~tmDDs]>GuC+;Nv EGI>4u"Fs.>Gu'Fs >KuEKE@16AEN데]UCC4t~64P6s4@rCSC^4؍4lV C4f]@sC#C4ÃC>CrPw]UQ^u@^G<t<u@ P^^GW<>GW AOQQPEKG]U<>;6u;4uE;8u :; t64P6>6<6E,P<>46E8 :]U4P6>6<6EB,P>KtYE;KtP tEAHE4P6>6<6E,P44P6>6<6EB,P맡<>46E8 :]UF;:u:]U jtAFENP~rGyW{FVG}WFVvvDdGyW{FVGoWqGwdjPL66vv ]U:Pm DFF@FFF~u4P66v,PFFFF;FrCr Pm D66v,PvFPPDFFsvvv.DNtFHPFHPF`vvvD]UFr4F^FP DFF FFFs^v&uFPv D;F tFF=rJ66v,PF@1vV66R,PP DF^v0~NFNFȉNƄv+N+^0^~9^YFF#4;vu;FuF^FF66v,P]UP DFF^4tpF4Pv DN ;tLFF=rQvvDPm DF^4~NFFFƄFF녋]UQQFFrPF HPFHPF F ;Ft1FF F;FrظPm DvvPDFFs>t5Pv DF66P,PvvPDċ]U~]UQF^v&tƃF=rPًF]U^GP^&Pv]UFF^ v&ttFN;v\p~^t+JYu>N+FN^ 0~^ 9^YF^ v&FFFF|+N^ v8] U FVN^^F ujGPFPdFGw;Fv@LF^vHyP{MUMUFFFw uGSFFuF]UQF tF؋NnWP%]U^7LL^]UQnPF u!Trj t؀OPϋF]UjduHTjG@GuG%vkT]UQjG FF t GG ]UQj t؋O NtOuO%jit Pju9GXt-GGQ6LVOSGUdXGVGX]UFu;u ; usPdPPwPwNv,Pi t PF >>X9Gt P<u<t0ƇsPdPd]U>t}:uI t ؍ONG! GFGFGyG{6D,T.GW=GFG!FG>W@6DyT{GB DW>tj t+؋O;u F t؋GW;u;uGPGDPfFG F GW6DyT{G G DWƄ PvGPvG7PGoWq]UVXGQGw]UQQFF>VtM_PwPwN6XB,FFr#GT tQwPwNXPB,FF uF]U FFjtA=tAt@F=emt=pmuFrm~-mt@sFmmF=rmt=mmt PrzrsF:ummjG>urt<u:u66TPjuyGG9jt7؊Odmt!m:u>mt GG뽚1Tv;sFj:Gt(~mmt>mul1Tv PvT]UFjG=mmuG<t<t G uOjg]UjGG9jt؊OdmtGGס]UQQ~t1jG FTjFFjPXTFjvtT>tjGP6jGPGPnjGPG7PnGW6jD|dt.|t(sL jgߋjGmPT]U>puTr PpPj؀ft PjjGi_]UQjfu PjduHTjt Pj t P6jjGP<jGP<Tj9_u%7L;Vu8jG;u+#jGF^G;jujG^GjGfGGpPS%]UQQFFs[FFF;wzjG;Fu+Gau@ s7~t9OuG":t<uFr >u]UvPO\]UvPO\]UvPO\]UQ6vvm\F uA\>ju~u)5ju P4~tjG=zmuPv]UGj ta؋OVOOW |_&CPtA ؊G$u@]UQ9r?j9u!O;u9^tFPXTFj u\]UtP u PjG6 +1]UGtPS%]UQQFF;w)^tG;FuFGFu΋]UQ\;w>at>` rjFFF  ]UQvGdXVGQ[G\W^G`WbGdWf~t GXGZ#G <>GXWZFGWPG7P]UQQVFFF tPPFPdFF;Gwsp{py FԋGSFFd멚]UQGVGSGUFdPGdFGUVGQ]UFtP>VtId[FVFt GdWfFutFVG`WbPdF]U6VPd]UPdP]UvdGQ;Vt PStw t P]UvdGU;Ft P]UvdG GtYdVF~tjFF9GwvFVFۋGSF tPGUPd벋jFF t؋OWNVFV]Uv FPdv vr~ udP~ tw{wy]UG7PFPju(Dvt6FP6jtv(DFPlvljFNjPoT]U6v6jtD]U^uSDdvbl^tSlv(Dvttdd]U>ju48u%8tGrj uLGTjGr;GT4jG$u@:t@FPTrvD]UjV9GuuG:tGT:sFrmvT]UQ9rrGsTG;FuL\G$<t@ Fj ۱tA Fr zt@FFs c\PXTu]UQ9rFGs( t"j؋G;Fu\PXTuvlT]UjFFFFF;wB9Ft(؋;NuG@t\PXTOFuFFFj]U^zu P^mt P^t PGns P]U^FF tW؋GW FFFHN;r*^wwQ,P>t PFuˋ^럋]UQ^ugv GPF tPG7PG7^wGDPG <>GXWZv tP^wtd]UQ^_ ^uGGDGXWZ%^G FwtP^wSt]UQQ^u?vGPPs^wGDPPrnPFVFF tEPvdP^wt u v!tt ~tdGSFF봸P]U^G^;Gt P^GVdvbl^u F t;Fu P^G F]UFVFv!tFGSF~tA uB"sNANPQdŋFt @M1v tFu!dFv tFu PFF]UFv!tFu)F@FOSN t QPdҸPNjvHMƱF]U FGL<s0tȸ31FOL31F^;rFFGLN;v,vP;VsxMu VVNFFFFă~uRGL;FuDFGLN;v F@PF@PFЋGLFGLFtvf@Pv@MF]UQQOLtO31FFGLȴN;r,xMtvf@PPsFFu]U UtdFFGFFGE;Fu-F@FNFOSN t QPd̚dFGEN;r&^^?u GEFFuʋF^FGGEUtd]UUtdFvvtF u)F@FOSN t QPdиPŋ^OEUtd]UEtXUuGFFFGEȴN;r+^^;FuG;FuFuø]U젇t #P4<v !P4.0Zahov}~|]˚|]˚|]˚|]˚ |]˚|]˚|]˚|]˚|]˚T|]˸!P4]˚|]˚Y|]˚|]˚! |]˚v |]˚ |]˚ |]˚ |]˚|]U>?uPPPFsr P68P> v Ps!u PU s3 t, ;r;u!&G uS6FPt6~FFF u PF FVjtWRP PvvFPlFPlPXT]U>@u 6+\PmmPPjG<t <t P6jlPXT>@uc\]Ut PPPPju Ps!u PU s3 t, ;r;u! &G u S6FPt6 ~FFP66jGPlFPlPXT]U6+\jt P6jlPXTc\]UQ&NWQP>u&Gr PatAQ=&t@P\&~pmuO@]U6\c\PXT]UQ6+\juPju PjFPPPju P6jvtvUl]UQ6+\jt PjFPPPju P6j  拀;Vu;Fu8F@;Gwu)vp{py FGw]UFdFVGoWqdjwdFV;u;wGw tHHyP{ FV+FV>;u;w@FsN~vvFUtd~udGoWqd~u FsFNV>;u;r+F~F FuwuGwHHyP{9Vu9FrGw u?n:N~+׋6>)FV66RP Ad]UQUtXFdvGS]U요dGS;Ft# u P4wSGUPd]UQQFV FFF;Fsv v P,PF]UZP]UAvA9OdwZ]U>:twbw`6,P:wbw`P,P]UFPX%V R £X %]UQQ FVvtPl]U PrmPPjG<t <t Pt P Fj^WVN+;s PS^wwvv|,P>>u5FF~t%^SPP D^FFNհPXT]U6+\F=pmt=rmurmPT~pmuGO@ERPPS6P6Pju6kTg]UQt P6+\jt Pd6jbl66KFjPLF=tP]UFtv P~u PmmPrmPP^. n*Fj^GF^FDjGFFF^F(jGF uF^^^^F9FvF>vNFYPXT]UFFFFtt PPmmPPjG<t <t P>Vu 6jDd^.8^&78P^&GW)~ v P~uG78 os!u PS s0F ;r;u"^&G u^SvG7PtFG78vF>Vu PDdPoTPXT]U6>tApt@ Pl]UQ&6=\5TFjGmPTF<\&]U6+\G$&]U6+\sG% G% G]U;v P!P]U66\]UQ^t"PF؋FO؉vQ^]UQ^ tFdLd]UQ^ tPvP ^?u@FFsv<vv]U`Fb;wF;dvTrPࡗ;dv TrbFFF;`sZ؊ON tuF~ut=IuF~u:sFF&GF=u>au rFR&GsF~u?&G t at=&u(s&G=rmt=smu >au4FFs PSLF S ]UQFr' &9GvQ&_SPtuFF]U^v]U^ v: uEFst+J^ S^S^ Ptt@]UQ^F tF]U^v7]UF%u+Ju]UQ<t<uG>W@ vv t@FUt ddGoWqF]UF FVGwF tH@yP{ G>W@d~ s9vv u*F@;Gwuv )GlWn)4666ZF FtTn^6拇ru P4S㋇rЋ!:X@r#뤡 uGjGhGf]U<tA<t@ 8 uGfGhGj 66Gd;w<wdPR,.ZF FueGd;Wnu;Glw@;У0246Gw&6拇r#$uw<02029.u9,v>@r#ヿu02029.u9,wΡ46GlWnP  X £469Vu9Fv{02029.u9,w$46GlWn>8t($&@r#6拇r#$tg>8t>$t Z>8t@ww@yP{Gw><tF t?H>$ud)FV>$tC> r d6V@yP{X@Gw""&;r;u;sj r&"&+(NNOO6"(Vpy_y}NNOO"c>& r ;rH&6"@yP{02;.u;,r>8t"";&rHyP{F~;u;s>FV+FV"A"Ow tPp>& r 6 4u ;d,.;2u;0v]UQQFV FVGlWnv v Gd;w P4ZF FtR6拇rt P4S6拇r :n^X@r#릋]UG$rFF>`u!uFFF;Fv uWWP 6@6>v,FF t=-uc~u"=9|t=CPuG2V ;urs uiG.W0FVPvvP,F uBs u6=9|t=CPu$G.W0;Vu;FuGr Ft!]U[FV~v G:W<}w0w.P,F uFsw4w2P,FF]UP$]UFF;w%|^_&^Gr;FuGrFuҋ]6l rG<G$G!6D* D(D,D.D.F׊G$r$u>FP/ FPB(/FҠBFܡFFFՠF֠(Fΰ(*NϢ*U$uMG6FΊG5FϠ,FҠ-Fܠ.FݡFӊĈFԠFՠFָG6G5f$u\)FΠ+FύFP8 FPJFPR8J)+FFF̋G$FЊG!FыG&F uFFPvt $uG FэFPSj4FPSFPnG* t6G*G6GFG6S뿋G"G#Gr6BSU8G$u9ujj]UG$r!u>`t~vhb^G^G@^GA^GB^GC^㋇FGD^㋇hGFGDHG0^㋇GHGJgHPGFgDPRG,W.]U^&juN;v  9s|^&;N wAj u@"sX^ &w^  G& u ^ &Gw^  ^&^ GF F tbjs &G'] U^&k&~u&&~ N >u$$9s| u؀$u_] ~u?w G;Ft&^&;F w@kszG $^ &G!^ &؈G_["Gvs'~uww^ $"Gw^ &G^ &G^&&6&^ @F F$tks &G']F rFFF960 js, F6FPsFċFRFPs>N u!P P DPsF $u@ U* ]U * ]6rTPY@F6rTPY^Fds4Fsr ˠs <U P$Ps]U P Ps]>uFF;v|F uر8O$u|G[F~F^w$$F^W2VRNQjQPFPjPP>  F؊G6s뙋F؋F؋FF G(_$ćF܌F6^UQQFF;w)~^GPvPsFuΰ]UQQ%t &um&tu?ugG$s PF t2=un$uPF tPFAGP%s*FF;w~t Fu޸n Gp6\&D#>` vP6~DPDPGPGP"F;uG&DG&F tP4]UQQ6 }l&um%t P4_&GGrwpDG&>` v)6~OQOQRQP"F tP4]UTb`f0NjlN nNprNtNi^_\d\P6TFPd]U&u P> v P>` s6~GPGPRPP"F tP46~GPGPS6"F t^6~GPGPGPGP"Fv*6~FFFPs PF u ~u^w$^Gv^GvFtJF&Gr66rP&G;\s&FN؎&Ops7~,u0rqrrs&G;Tt 6S S^SwFVFshFFV^W^SwFVFshFV؋^W F^&GF&O Nu;v&W l#;jtC#n;tB"ڈ^;\Ҁ>au@ su^Ft9GuV^G":t<uD^?u Fs0)^^uj4Fs^G=zmuFr^& u ^ShF uj^&G %^Fv&DF=rmug&~pmu ^O@6^SLP@!^GrgFF^&GS:h,6P& au->lu>uu$& u<H&OFFwء9yu GX$Fuۚ& \ub&Gu;tQ u0؋O]D$uT#W &__]G G& uv>lu>ru >nu>uttshIj$t>tsh]'<sshg 4&9|u>& u Sr u&G/SrP&G;\s&FʉN̋؎&G&w &F<vh4&GFF<t&_^F&F<u~tFtH&G ;vh&G P|XĴ;G2th&G FN;\r>au#l;jthF%Grh{G;Fthi uhVzuhFG GNsuh)Ow|G8G$F<u&uj#u&Guh,&G@t G$F<wG0&Gth&Gth0&GF&O?NG0t&haG$<t <thJFFF%G G$s5>luh,F<t &_&_SGP&F<t &_&_SGPGGG G&DGFVGWGG GG9\(tj46D(G <uwMGO+ȉO6&TVF&u u wGFFFVGWG$rnFGWGGGWG W" u؋ ujGWFVGW;Vu;Fw)FV?uj|ыGWN~׋6D T"GW+׉FV| sL;u;vFDG$s%O@F؉F֋GFFԀu&DufGDFع1F֋GFFԋG <u$tcG W"FVFPvؚFFPvԚG,FPwHG*FG(9GJv ~tG,W.;W"u;G sjGGN1G.6|$tW,‹v;v s +w.G>N t)8G$uO.;vO,;Ns G.F؉GG$<uu GGHFҋFҋGF΋GFЀ>N u66|$uGuFШGuFѨuFFG;Fаt@FȊFr:F@N1G2IOtG0 G0G.+G0+G2G. G0G2.u 0tG4G4 G4G$G&G66D( u^O W"NV tw^O W"NV^~;u;r 9|"u9\ wFV;Vu;Fw9W"u9G s AvP$PjGPFPnGr tj؍GPFPn]U.5Fv #P4~r6+\jmu@F9OuBVtBVޡu+Jt@F߃~u.Fs PbFrUFsE>u>>u@5Fr7Fs0Fs>t"Fr>u 6jD PbFsdv> vPb^.FFF> u.BZls(dFVFWF_FsGWr PbF7G7FQF\F`FoFFFsF7у>u Pb^^FF!e^^FPFOFF@C6FF ;\r;v F;w F^ G FFFtF^v6>vFYN;s W+Pv8Ȱ,.V&78P.WP>u7 vys!uFrvs s3 ;r;u%&G uS6G7Ptk8P6 PPG7a\`PPjOGoP:>V rwu3PPMjOP6@PP.>u} s=&G7 :r :u+&GCu$G8P&G7PG7Pt 7P PVPP\PP~oPPsyPPh Pb6v.PoTFs=Grj t PoTw7! P$P.d66Pm\ t6 |F t  &G#FF tS؋_^F&;w9^S vx%^^F@F &G#^G F(\ &>u@%9r66Pm\ u١ &]UN;s)v+Pv0~9Fv]UF;t Pb6~9NFv]U ~ u6>^Y~6F~v N Fr FPv ktSPFP P&O v|^Y^& ^&v] U*<t #P4.#;Eh4U!D%t PbP.[>tJ  9r<| t%؊OsGFDFG# u -F&u PbPPPtuP6> r S6!o&t Pb6R>uFF  FFFPPv~^SvPrFFFS6 S66PF9uPbF&G~F^& GluF;\r&G~FFF&t Pbw~׹ PPvvFG&v׹ $ulGNf2 |G& tc؊uƇj&jF,>u &G6 S6S>t Pb&th&Gt&Gt&9Gt9tFF;wr|F t؊Or 6&LO8FuD>t \;w FF&!666S6 Sd]Ur Pb]U6 V&^FF^&uFS6 SvP6P.=tP.]UF;Fv PF+FP^v8Ȱ]U>zuPzPPF6zSLP. ]U]U]U]U^]6G69Gw6GUvF~ F ;uV^ :t3]&_;&G&W&Ot ʁu3Uv&D3v&D&v&]U^jjS/| t3)vu+u=SFuՋ3ҋN&v I3& tFileSys.lib VERSION: 2.4 (Tu  WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, # ; INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS # ; SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT # ; TECHNOLOGIES. # ; # ;################################################################ $INCLUDE (kbd.mdf) PUBLIC prgInfoIKey, pDiacriticTable, pSpecialKeys, fAltKbdEncoding PUBLIC pEscKeys, cEscKeys DGroup GROUP Data, LookupSeg, ExpansionSeg Data SEGMENT PUBLIC 'Data' prgInfoIKey DD rgInfoIKey pSpecialKeys DD iKbd fAltKbdEncoding DB 0 ; set to true is using alternate 4 byte encoding table, ; also change rgInfoIkey below. ;################################################################ ; SPECIAL CHARACTER DEFINITIONS -- # ; The following keyboard codes are used by CTOS when in # ; character mode. They are used to look up (in the Keyboard # ; Translation Table) the byte value to be returned to the # ; caller of "ReadKbd". If you wish to change the # ; location of the "CODE" , "SHIFT", "LOCesday December 5, 1989, 16:19) LIBRARY: Init.lib VERSION: 2.4 (Tuesday December 5, 1989, 16:22) LIBRARY: Ctos.lib VERSION: 11.3 (Friday May 27, 1988, 11:21) LIBRARY: OS.lib VERSION: 2.4 (Tuesday December 5, 1989, 16:20) %' Do not change any of these settings. %SET(FS, 0FFh) %SET(fHDisks, 1) %SET(hardwareType,4) %SET(wsType, 8) %SET(fNoFileSystem,0) %SET(fMulpar,0FFh) %SET(fVarpar,0FFh) %SET(nPartitions, 0) %SET(nUcb, 0) %SET(nPcb, 0) %SET(nUserNum, 0) %SET(nNetUsers, 0) %SET(nMsgWait, 0) %SET(clusterConfig, 0) %SET(fCommIop, 0) %' Change these setting as needed %SET(nWinch,8) %SET(nFloppy,4) %SET(nSCSI, 10) %SET(sOsData, 51000) %SET(fVerifyFileStruct, 0) %SET(nIob, 60) %SET(nFcb, 600) %SET(nFub, %nFcb) %SET(nFab, %nFcb+400) %SET(nVhb, %nWinch+%nFloppy) %SET(cbNameSpace,4096) $INCLUDE(Sysgen.Mdf) $INCLUDE(Sysgen.Asm)        $ ) . 3 8 =  OQ|i ] }   4 h + / / j/ / o nYnCnnn{ {B {B++m+++b+$$$_$$$ 6$6<6T6l66J6^6~666 6 6 6 6X 6FileSys.LIB(LowMem_Fs) Init.LIB(InitFs InitClock_Fs InitCommon_Fs InitSysDev_Fs InitFile_t1 InitOs_Fs InitWin_t1 InitSCSI InitFloppy_t1) Fs_n.obj [Sys]Ctos.Lib(KernelNames rqlabl rqlablAlt) FileSys.LIB(BigMath Data_n Date_Fs ExpandSpecs FileLog FilePros_Fs Floppy_Nec Floppy_t1 FloppySubs_t1 FsIo HDisk_SCSI HDisk_t1 HfsDir HfsFab HfsFcb HfsFh HfsFhb HfsFile HfsLink HfsMain HfsNmb HfsPath HfsProcs HfsRun HfsVhb MassInt_t1 MassIoPros_t1Mp Mount OsSubSet_Fs StatusFs_HFS Volume Vdm1Dmy Vdm2Dmy) OS.LIB(SrpDmy_WS CompatSubs_Fs CommonSubs_Fs MulparUtil_Fs) srplph_all.plm : not found  srplph_t1mstr.plm : not found  Status.plm : not found  Status_all.plm ; 9.9 has bug fix, filesys code  Status_Cws.plm  Status_OS.plm  t1request.asm : not found  t1request.mdf : not found  TermPros_Mp.plm : not found  TermPros_Sp.plm : not found  TimDum.plm : not found  timer_all.plm ; 9.9 inplm  Timer_aMp.plm : not found  Timer_aSp.plm : not found  Timer_iMp.plm : not found  Timer_iSp.plm : not found  Timer;################################################################ ; FILE KBD.ASM -- # ; # ; COPYRIGHT 1980, 1981, 1982, 1983 CONVERGENT TECHNOLOGIES, INC.# ; ALL RIGHTS RESERVED # ; # ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE # ; SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A # ; PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED # ; WITHOUT THE PRIOR  K", "ACTION", or # ; "FINISH" keys then simply change the following SET macros and # ; the appropriate entries in the Keyboard Translation Table. # ;################################################################ %SET(LeftCodeKey, 4Ch) %SET(RightCodeKey, 4Dh) %SET(LeftShiftKey, 48h) %SET(RightShiftKey, 49h) %SET(LockKey, 45h) %SET(FinishKey, 04h) %SET(ActionKey, 43h) iKbd LABEL WORD ; Beginning of special-key list. DW 061h ; 'a': Debugger, single process mode. DW 062h ; 'b': Debugger, multi process mode. DW 07Fh ; : Forget type-ahead buffer. DW 044h ; : Blank screen (force screen timeout). DW %LeftCodeKey DW %RightCodeKey DW %FinishKey DW %ActionKey DW %LockKey DW %LeftShiftKey DW %RightShiftKey DW 0FFFFh ;iKeyShift2 - reserved BT DW 0FFFFh ;iKey00 - reserved BT DW 0FFFFh ;iKey000 - reserved BT ;################################################################ ; Keyboard Translation Table # ; # ; rgInfoIKey (128) ARRAY OF (Unshifted Value, Shifted Value, # ; Attributes) # ; # ; The attributes are OR'd together from the following bit # ; masks: # ; # ; 0xxxxxxx (00h) ... does not respond to Lock key as shifted # ; value # ; 1xxxxxxx (80h) ... responds to Lock key as shifted value # ; # ; x00xxxxx (00h) ... no repeating when a key is held down # ; x01xxxxx (20h) ... repeating starts after 0.2 seconds # ; x10xxxxx (40h) ... repeating starts after 0.4 seconds # ; x11xxxxx (60h) ... repeating starts after 0.7 seconds # ; # ; xxx00xxx (00h) ... repeat rate is 1 per second # ; xxx01xxx (08h) ... repeat rate is 10 per second # ; xxx10xxx (10h) ... repeat rate is 20 per second # ; xxx11xxx (18h) ... repeat rate is 30 per second # ; ; xxxxxxx1 (01h) ... diacritical key when shifted ; xxxxxx1x (02h) ... diacritical key when unshifted ; ;################################################################ attrControl EQU 000h + 000h + 000h ;no shift lock, no repeat attrAlpha EQU 080h + 060h + 010h ;shift lock, repeats attrRepeat EQU 000h + 060h + 010h ;repeats attrRepeatFast EQU 000h + 040h + 018h ;repeats, faster attrShiftDia EQU 01h; diacritcal key when shifted attrUnShiftDia EQU 02h; diacritcal key when unshifted attrBothDia EQU 03h; diacritcal key when shifted or unshifted rgInfoIkey LABEL BYTE ; Table entry: Meaning(s): DB 0, 0C0h, attrControl ; 000 help DB 01h, 0C1h, attrRepeatFast ; 001 up-arrow DB 02h, 0C2h, attrControl ; 002 mark DB 0Dh, 0C3h, attrControl  ; 003 bound DB 04h, 0C4h, attrControl ; 004 finish DB 05h, 0C5h, attrControl ; 005 prev page DB 06h, 10h, attrRepeat ; 006 1/2-1/4 DB 07h, 0C7h, attrControl ; 007 cancel DB 08h, 08h, attrRepeat ; 008 backspace DB 09h, 09h, attrControl  ; 009 tab DB 0Ah, 0Ah, attrRepeat ; 00A return DB 0Bh, 0CBh, attrRepeatFast ; 00B down-arrow DB 0Ch, 0CCh, attrControl ; 00C next page DB 0Ah, 0Ah, attrRepeat ; 00D next DB 0Eh, 0CEh, attrRepeatFast ; 00E left-arrow DB 12h, 0D2h, attrRepeatFast ; 00F right-arrow DB 80h, 81h, attrControl ; 010 (SH-L) DB 11h, 0D1h, attrRepeat ; 011 scroll-up DB 0Fh, 0CFh, attrControl ; 012 move DB 13h, 0D3h, attrRepeat ; 013 scroll-down DB 14h, 0D4h, attrControl ; 014 copy DB 15h, 0D5h, attrControl ; 015 f1 DB 16h, 0D6h, attrControl ; 016 f2 DB 17h, 0D7h, attrControl ; 017 f3 DB 18h, 0D8h, attrControl ; 018 f4 DB 19h, 0D9h, attrControl ; 019 f5 DB 1Ah, 0DAh, attrControl ; 01A f6 DB 1Bh, 0C9h, attrControl ; 01B GO DB 1Ch, 0DCh, attrControl ; 01C f7 DB 1Dh, 0CDh, attrControl ; 01D f8 DB 1Eh, 0CAh, attrControl ; 01E f9 DB 1Fh, 0DFh, attrControl ; 01F f10 DB 20h, 20h, attrRepeat ; 020 space DB 39h, 39h, attrRepeat ; 021 9 9 DB 82h, 83h, attrControl ; 022 (SH-L) DB 84h, 85h, attrControl ; 023 (0) DB 86h, 87h, attrControl ; 024 (NEXT) DB 0, 0, 0 ; 025 DB 0, 0, 0 ; 026 DB 27h, 22h, attrRepeat ; 027 " DB 0, 0, 0 ; 028 DB 0, 0, 0 ; 029 DB 0, 0, 0 ; 02A DB 3Dh   ; key by a two-key sequence. To define the two-key sequence and the ; resultant key use the macro below. The first argument is the diacritical ; key, the second parameter is the following key in the sequence and ; the third key is the resultant. The macro below, which is commented ; out, would set SHIFT NEXT PAGE (0CCh) as the diacritic key, and the ; the two key sequence SHIFT NEXT PAGE, '1' (31h) would result in the ; character '2' (32h). ; ; The attribute for the diacritical key must also be set in the encoding ; table above. The diacritcal attributes are: ; ; attrShiftDia :if the key is diacritical when shifted ; attrUnShiftDia :if the key is diacritical when unshifted ; attrBothDia :if the key is diacritical shifted and unshifted ; %' %DiacritcalSet (0CCh, 31h, 32h) %EndDiacriticalTables ; ; The macros below define keyboard keys which when depressed result in ; multiple keystrokes being returned to keyboard clients. ; ; All keys values represent unencoded keystrokes. Any key on , 2Bh, attrRepeat ; 02B + = DB 2Ch, 2Ch, attrRepeat ; 02C , , DB 2Dh, 5Fh, attrRepeat ; 02D - _ DB 2Eh, 2Eh, attrRepeat ; 02E . . DB 2Fh, 3Fh, attrRepeat ; 02F / ? DB 30h, 29h, attrRepeat ; 030 0 ) DB 31h, 21h, attrRepeat ; 031  1 ! DB 32h, 40h, attrRepeat ; 032 2 @ DB 33h, 23h, attrRepeat ; 033 3 # DB 34h, 24h, attrRepeat ; 034 4 $ DB 35h, 25h, attrRepeat ; 035 5 percent DB 36h, 03h, attrRepeat ; 036 6 cent DB 37h, 26h, attrRepeat ; 037 7 & DB 38h, 2Ah, attrRepeat ; 038 8 * DB 39h, 28h, attrRepeat ; 039 9 ( DB 0, 0, 0 ; 03A DB 3Bh, 3Ah, attrRepeat ; 03B ; : DB 0, 0, 0 ; 03C DB 0, 0, 0 ; 03D DB 0, 0, 0 ; 03E DB 0, 0, 0 ; 03F 3F = iKeyInvalid DB 0,  0, 0 ; 040 40 = iKeyNoKeys DB 36h, 36h, attrRepeat ; 041 6 6 DB 2Dh, 2Dh, attrRepeat ; 042 - - DB 0, 0, 0 ; 043 reset DB 0D0h,0D0h, attrControl ; 044 overtype DB 0, 0, attrControl ; 045 lock DB 32h, 32h, attrRepeat ; 046 2 2 DB 33h, 33h, attrRepeat ; 047 3 3 DB 0, 0, 0 ; 048 shift DB 0, 0, 0 ; 049 shift DB 30h, 30h, attrRepeat ; 04A 0 0 DB 2Eh, 2Eh, attrRepeat ; 04B . . DB 0, 0, 0 ; 04C code DB 0, 0, 0 ; 04D code DB 0, 0, 0 ; 04E DB 0, 0, 0 ; 04F DB 0, 0, 0 ; 050 DB 0, 0, 0 ; 051 DB 0, 0, 0 ; 052 DB 0, 0, 0 ; 053 DB 0, 0, 0 ; 054 DB 0, 0, 0 ; 055 DB 0, 0, 0 ; 056 DB 0, 0, 0 ; 057 DB 0, 0, 0 ; 058 DB 0, 0, 0 ; 059 DB 0, 0, 0 ; 05A DB 5Bh, 3Ch, attrRepeat ; 05B [ < DB 37h, 7Ch, attrRepeat ; 05C 7 | DB 5Dh, 3Eh, attrRepeat ; 05D ] > DB 5Eh, 7Eh, attrRepeat ; 05E ^ ~ DB 0, 0, 0 ; 05F DB 31h, 60h, attrRepeat ; 060 1 ` DB 61h, 41h, attrAlpha ; 061 a A DB 62h, 42h, attrAlpha ; 062 b B DB 63h, 43h, attrAlpha ; 063 c C DB 64h, 44h, attrAlpha ; 064 d D DB 65h, 45h, attrAlpha ; 065 e E DB 66h, 46h, attrAlpha ; 066 f F DB 67h, 47h, attrAlpha ; 067 g G DB 68h, 48h, attrAlpha ; 068 h H DB 69h, 49h, attrAlpha ; 069 i I DB 6Ah, 4Ah, attrAlpha ; 06A j J DB 6Bh, 4Bh, attrAlpha ; 06B k K DB 6Ch, 4Ch, attrAlpha ; 06C l L DB 6Dh, 4Dh, attrAlpha ; 06D m M DB 6Eh, 4Eh, attrAlpha ; 06E n N DB 6Fh, 4Fh, attrAlpha ; 06F o O DB 70h, 50h, attrAlpha ; 070 p P DB 71h, 51h, attrAlpha ; 071 q Q DB 72h, 52h, attrAlpha ; 072 r R DB 73h, 53h, attrAlpha ; 073 s S DB 74h, 54h, attrAlpha ; 074 t T DB 75h, 55h, attrAlpha ; 075 u U DB 76h, 56h, attrAlpha ; 076 v V DB 77h, 57h, attrAlpha ; 077 w W DB 78h, 58h, attrAlpha ; 078 x X DB 79h, 59h, attrAlpha ; 079 y Y DB 7Ah, 5Ah, attrAlpha ; 07A z Z DB 34h, 7Bh, attrRepeat ; 07B 4 { DB 38h, 5Ch, attrRepeat ; 07C 8 backslash DB 35h, 7Dh, attrRepeat ; 07D 5 } DB 0, 0, 0 ; 07E DB 7Fh,0C8h, attrRepeat ; 07F del %InitDiacriticalTables ; ; Diacritical Keys: ; Diacritical keys are a mechanism to map a regular key into a foriegn the keyboard ; may be defined as a multibyte escape key. Also, different results may be ; defined depending on the shift and code key state. See the CTOS Reference ; manual Appendix C-1 for unencoded value of keyboard keys. ; ; The resulting key sequences must include downstrokes as well as upstrokes ; as well as any shift state required to produce the keyboard characters ; desired. An upstroke is the key value OR'ed with 80h. ; ; The two examples below are 'commented out' by the notation %' ; preceding each macro. ; ; In the first example below, the key '0' on the numeric pad (unencoded ; value 4Ah) is defined to produce 6 keyboard events - ; downstroke 'a' (61h) ; upstroke 'a' (0E1h) ; downstroke 'b' (62h) ; upstroke 'b' (0E2h) ; downstroke 'c' (63h) ; upstroke 'c' (0E3h) ; These 6 keyboard events would produce the 3 keyboard characters 'abc'. ; ; In the second example the key '0' on the numeric pad is depressed when the ; shift or shift lock keys are active would produce the keyboard characters ; '[sys]'. Note that the first keystroke in this list is shift ; upstroke (0C8h) which turns off the shift state caused by the invoking ; key, shift-'0'. ; ; ; ; Unshifted EQU 0 Shifted EQU 3 Coded EQU 4 Shift2ed EQU 8 %InitEscapeKeys %'%DefEscapeKey(4Ah, Unshifted) (61h,0E1h,62h,0E2h,63h,0E3h) %'%DefEscapeKey(4Ah, Shifted) (0C8h,5Bh,0DBh,73h,0F3h,79h,0F9h,73h,0F3h,5Dh,0DDh,48h,5Bh,0C8h,0DBh,73h,0F3h,79h,0F9h,73h,0F3h,48h,5Dh,0C8h,0DDh) %EndEscapeKeys Data ENDS END eat ; 037 7 & DB 38h, 2Ah, %*DEFINE (InitDiacriticalTables) ( oStartDiaTable EQU OFFSET $ %SET(cEntries,0) %DEFINE (String1) () %DEFINE (String2) () ) %*DEFINE (DiacriticalSet(bDiacriticalKey,bFollowingKey,bResultantKey)) ( %DEFINE (tmpString) (%String1) %DEFINE (String1) (%tmpString DB %bDiacriticalKey,%bFollowingKey) %DEFINE (tmpString) (%String2) %DEFINE (String2) (%tmpString DB %bResultantKey) %SET(cEntries, %cEntries+1) ) %*DEFINE (EndDiacriticalTables) ( cDiacriticalPairs DW %cEntries rgwDiacriticalPairs LABEL WORD %String1 rgbTranslationValue LABEL BYTE %String2 oEndDiaTable EQU OFFSET $ DB (640-(oEndDiaTable-oStartDiaTable)) DUP (0) pDiacriticTable DD DGroup:cDiacriticalPairs ) %*DEFINE (InitEscapeKeys) ( %SET(cKeys,0) LookupSeg SEGMENT BYTE 'const' cEscKeys DW 0 LookupSeg ENDS ExpansionSeg SEGMENT BYTE 'const' ExpansionSeg ENDS ) %*DEFINE (DefEscapeKey(bEsc,bAttr) (rgbIkeys)) LOCAL tmp0 tmp1 ( ExpansionSeg SEGMENT %tmp0 LABEL BYTE %IF(%NES(%rgbIkeys,''))THEN( DB %rgbIKeys )FI%' %tmp1 LABEL BYTE ExpansionSeg ENDS LookupSeg SEGMENT DB %bEsc,%bAttr DW %tmp1-%tmp0 DW OFFSET DGROUP:%tmp0 LookupSeg ENDS %SET(cKeys, %cKeys+1) ) %*DEFINE (EndEscapeKeys) ( LookupSeg SEGMENT BYTE 'const' pEscKeys DD DGroup:cEscKeys+2 ORG OFFSET cEscKeys DW %cKeys LookupSeg ENDS ) e ,iKey BYTE ,fIntercepted FLAG ,ch EncodedChType ,fEscKey FLAG ,iEscKey WORD ; fWakeupPending = FALSE; DO WHILE ibBufInPut <> ibBufInTake; /* iKey, fWentDown are set from next byteKbd CTAsm 11.3A??SEG??SEGDataData LookupSegconst ExpansionSegconstDGrouphh)    prgInfoIKeycEscKeys9fAltKbdEncoding pSpecialKeyspDiacriticTable%pEscKeys% abDLMCEHIX pp p X pXXpp p99p'"p=+p,,p-_p..p/?p0)p1!p2@p3#p4$p5%p6p7&p8*p9(p;:p66p--p22p33p00p..p[p^~p1`paAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ4{p8\p5}ppTTTT~% U U  pClstr CTAsm 11.3X??SEG??SEGOEMSegOEMSeg NameCommonOEMSegconstconstdatadatauBufSegConstDGrouphh h hh h 6 saSemiLowestnPTimingnInitProcIntDisable uBuf oRgOExUcb* sIntSwtbl EncryptionKey nInitProcHardWareibSwapFileNumber mBufOut. cFramesMax bGraphicsPort fInitExit userNumLastnXBlock fTimeSlice cbPriParName rgRequestFileNamesRtcTpbcbSysSvcParName pAckOutBuf' nSoftwareIntx swapFileSize saTempLowestsbInstallMathSpec endOsTable nFub rgModDescFsbInstallVdmPswd sbOEM3SpecpSysTimenInitProcIntEnablenRgInitRtcRequest iModDescMax( ibBufLEDsPutr rgbRunsVirgin nIops sbSwapFileTryEachPswd oExUcb plaEndMemoryweventControlBlocknTerminationRq sgFreeTailMxBusWindowSize7rgSysSvcParname pRgSgLdt{sXbMax: saEndMemory sbScratchVolumeSpecp ContextStatussbNlsFilePassword hardw%SET(CTOSp,0FFh) %SET(nGDTSlots, 4000) %SET(wsType,7) %SET(hardwareType,4) %SET(clusterConfig,1) %SET(fNoFileSystem,1) %SET(fCommIop,0) %SET(nWinch,0) %SET(nFloppy,0) %' sOsData is set to its maximum possible value when the OS is released. %' It must be reduced if any further static data is declared in any OS module. %' See Sysgen.asm for more information. %SET(sOsData,39314) %SET(cParSCHeap,10h) %SET(fMulpar,0FFh) %SET(fVarpar,0FFh) %SET(fTimeSliceEnable, 0h) %SET(lbTimeSlicePriority, 146) %SET(hbTimeSlicePriority, 178) %*DEFINE(SwapFile)() %SET(lineHz, 40) %SET(sContingencyLog, 1) %SET(sKbdBuffer, 256) %SET(maxMedInterruptType, 87) %SET(nFrames, 8) %SET(nPartitions, 16) %SET(nPcb, 3*%nPartitions) %SET(nSysExchange, 30) %SET(nUsrExchange, 2*%nPcb) %SET(nMsgWait, 64+%nPartitions*3) %SET(nMsgWaitReserve, 30) %SET(nPTiming, 30) %SET(nUcb, %nPartitions) %SET(nXBlock,2) %SET(nSectorPerXBlock,5) %SET(sioClock,24) %SET(nRcb, 2*%nPartitions) %SET(nSwapFabs, 80) ; these are now set in Fs_n.asm don't touch here! %SET(nIob, 0) %SET(nFcb, 0) %SET(nFab, 0) %SET(nFub, 0) %SET(nVhb, 0) $INCLUDE(Sysgen.Mdf) $INCLUDE(Sysgen.Asm) WR+5aa n8nbnqnnnnnn|nnnLd@_@@@@/@R@@[@@@R@@@@@+94j|%=k 5 K  a!,a!a!a!a!$!-! !,!!!!=![!{!!!!!!!F!!!!!0"?0"0"0"0"(0"0"0"0" 0""("n"""""" OS.LIB(LowMem_p kernel_p caProc Clock_p ClockFace CmCommon_p CommInt CommLineDma CommNub_p CommonSubs_OS CommStatus_p CompatSubs_p Crash_p DmyLabels_p FadsMgr_p Fault_p FileDmy_nClstr FilterPros_Lfs Finish_p GetDAIDmy IdleLoop_p InitComm_p KbdFil_Mp KbdInt_t1 KbdPros_p KbdRes_Vp KbdSysinPros_Mp Load_p LockedIo Math32 MemoryMgr_p Mulpar_p MulParUtil_p OssubInterface_p OsSubset Printer1_p Printer2_t1 PrinterInt_p RealInterface_p Reset_Vp ResourceMgr_p RqInterface_p Sched_p SCInstall_p SegAccess_p SetVec_p SoftVecMgr_p SrpDmy_Ws Status_Cws StringProcs Suspend_p SwapFault_p SwapFaultA_p Swapio_p TermPros_p Timer_p Ulcmpb Vdm3Dmy Vidio_p XbWindow_p) FileSys.LIB(FilePros_OS Vdm2Dmy) Clstr.LIB(WsAgent_p WsLph_p) Init.lib(Fork_p) DBG.LIB(t1dNub_p t1DScr_p DbgRaw_P DbgIn3 t1dOs_p DbgPat t1pSub DbgNubPm dbgStubs_p t3dReg) [Sys]Ctos.Lib(KernelNames rqlablAlt rqlabl) Kbd.OBJ request.obj pClstr.obj DBG.LIB(t1dOnc_p) Init.LIB(Init_p InitBoot_t1 InitClock InitClstr_WsP InitCommon_OS InitConfig_p InitDAI InitDev InitDUtil_p InitExit_p InitFont_t1 InitKbd InitKbdInt InitKbdPros_Mp InitKernel_p InitKProcs InitLoad_p InitLoadProc_p InitLoadRq_p InitMem_p InitMulPar_p InitNGenIoAddr InitNls_p InitNoVid_t1 InitOs_p InitOsMain InitOsSubs_p InitProcTbl_WS InitSysDev_Cws InitSysgen InitTimer InitTimer1 InitUcbs InitVamDmy InitVector_p InitWs1 InitOsEnd) ... F........................InitOs_MF.plm..................................... F........................InitOs_FS.plm..................................... F.......... areType nBytExchs, cWakeUpRq userNumKbd. timeSliceLb sbOEM4PswdErgUcb sgFreeHeadKrgIpcAliasHeadW rgfLineDirty cbRgCheckConfig sbWsConfigFileSpec,sbInitFilePasswordG rgExchRealfMulpar$wXlatTableChksumrgSoftwareIntDesc HexchSchedPocketexitRunFilePrioSave oRgOUcb( nHardwareIntz rgbOemSeg rgCommLine> rgpVidMemLine sbNlsFileSpecV rgCrashMsg rgUserReadCount ExchNetServer rgPriParName rgWsLocalUserNumrgDeltaPriority sbOEM2PswdnTickscbRgClusterMsg saGraphicsBoard rgOsTablez userNumVdmnRqNoRemoteTermination sbConfigFileSpecsBufOut0rgOUcbsbInitFileSpecpRgOUcbExitRunFileDefPrioo pBootBlockfAwsPIT~ ContextStatevfAllowDirSlashesnIob pRgoGdtLinkS rqDelayDisc sbExitRunFilePswd pBitmapExchsSave rgUSegCb[ sbSwapFileTryFirst~ pRgSwappingRq rgbRunsTemp nUcbrgInitProcIntDisablesSCHeaprgHardwareIntDescL saSemiHighestrgWsIdnAribM rgbUNCountfSFNM+fCommIop#wsTypesbConfigFilePswdrgInitProcIntEnableoRgUserWaitCount4sbExitRunFileDefPswdb bUNBlkSHRgen,orgPcb0sbInstallVdmSpecH ibBufLEDsTaketcpUSegsU cUSegY sbInstallMathPswd٬cRcbMax wOSVersion wLocalUserosTypesaMaxPartitionsioClock logCannotLoadNlsFileg pXlatTable userNumVid, rgOSProcDesc: ExUCBLastConfigpUserXlatTable cbNodeName extCntlRegAws sbOEM1Spec sarCurrentnPcb rgInitError! fSubsysChannelB: initFilePrioTnSectorPerXBlock pRgRcMax rgCheckConfig fSysChannelA< fLfsToMasterrgInitRtcRequest sbOEM1Pswd bitmapExchsSave rgbBufLEDs2userNumChannelAjcUSegMaxS wsUserNumLastsbExitRunFileSpec clusterConfig! fNoFileSystem"sbInstallKbdSpeccbRgLastCrashMsg oRgUserReadCount2 exchSchedrgCheckConfigPswd saTempHighest GraphicsInfocbAribQ cbRgExitFileError nSdInitrgCannotOpenSwapFile= fSysChannelB6 iLineCurrent pRgOExUcb srgExchReal* userExchFirst  cascade8259A sbOEM3Pswd1 sbOEM4Spec2nFcbrgsbWsUserName pAckInBuf+ sgTssIntLastIrgLastCrashMsg f386EpRgChgUserNumRq rgwUNOwner sbOEM2Spec nAsibK configFilePrio*rgbRuns fGraphicsBoard pMouseData/userNumChannelB nChgUserNumRqpRgPrgNetRouting nSwapFabsNodeNamesbExtCrashDumpPswdrgExitFileError fSubsysChannelA8nRequestFileNames& nNetUsersnParDesc&sExec| mask8259A  nUNBlocks cbRgInitError pRgSdInit nSwappingRqintSwtbl TEKG NetServerDatasbSwapFileTryEach rgwTwoDigit sbSwapFileTryFirstPswd pRgSwapMode rgDmaAddruserNumClstrLastrgsgAsib+ pRgTerminationRq rgUSegfLL cbRgCheckConfigPswd mbIOPort nGdtCallGatesQrgCommDmaEnablecontingencyLog* nTryNewMaster iColCurrentFilterProcessExch sbInstallKbdPswd nWsAbortRq cbRgCrashMsg fHighSpeed9 pRgWsAbortRqrgcRq sMapCurrent f386FingerF userNumNetMinsbExitRunFileDefault prgRqNoRemoteTermination cbCannotOpenSwapFile< maskiBufLEDv nOSProcDesc userNumNetMax!rgInitProcHardWareznMsgWaitnDct bitmapExchssRcb clusterTimeout timeSliceHbnExchg rgClusterMsg cbAsibO sbExtCrashDumpSpecڬisgGdtCallGateFirstO fProtectedDexitRunFilePrio nGDTSlotsG rgWakeupRq fGoingDown RXINTR1XINTR0 InitLoadProc GPTaskFaultInitRtc InitConfigXINTR3 SysDeviceInitInitVpSwapFileInitUcbs ClockTestSchedInitMode3DmaCount RawCommNubbellRq InitNlsTables SysgenInitInit8259 mouseData rqTimeKbdTimerInterrupt LpInterrupt InitStatus DAIIntoXIDSigIsrHINTR71KbdInit BootBlock rqTimeVid PageTaskFaultTerminationProcessHINTR87IntHKbdCoprocessorOverrunSysInProrgRcMax InitSysCom InitDebugNubWsInitRqExInit NmiTaskFaultSysTime InitComm2 LoadFileInitKbdTest TraceRawIntLclfsFilterProcessInitVamDoubleTaskFaultInitVpStructuresCoprocessorNotPresentIn   V%V% V V  V;V; V+V+ V(V( VV VV V V  V6V6 V'V' VAVA VV V0V0ª V9V9ƪ VVʪ VVΪ V&V&Ҫ V,V,֪ VVڪ V V ު V2V2 VV[Sys]SysInit.Run VVGGH T[Sys]Nls.syshK [Sys]Config.sysիH ;*[Sys]Ws###>Config.sys[Sys]InstallVdm.runaDK[Sys]InstallKbd.run[Sys]MathServer.run[Sys]ExtCrashDump.run[Sys]OEM1.run[Sys]OEM2.run[Sys]OEM3.run[Sys]OEM4.run/`123458`9`<tInitKbdProcessCoprocessorErrorDAIFromHardwarergPrgLocalServiceCodeWsAgentAddressBootBlockStackTaskFaultInit8251 ResumeTask RTCInterrupt InitVideo BreakRawIntrgPrgNetRoutingWsInit1 FileSystemXINTR4  [0p+ (24<@V b jq        * , 2@5r? P, 0001020304050607080910111213141516+ K A [   CRASH STATUS (ERCLAST CRASH STATUS (ERCCLUSTER NOT RUNNING, ERC = CANNOT LOAD EXIT RUN FILE, ERC =INITIALIZATION ERROR STATUS+The swap file cannot be opened, erc = *The nls file cannot be loaded, erc = Primary SysService00 ys]DisplayConfig.run |1Ki){?T"c\ -a[3!aO2 lӀtŊVj#&Ϣ ~ìgiM=D `G ` [Sys]Signon.Run H    Ob  o Syst }  \% [sys]SwapArea00.sysp   V1V1  V:V:   VV  VV   V.V. $  V)V) ,  V?V? 4 V"V" <  V5V5 D K V3V3 L D VV T @ VV \ A VV d B VV l E VV t F V!V! | G VV  P V=V=  Q VV  R VCVC  S VV W XV V TT `z 0   [sys]Request.ISAM.sys : V4V4 C V8V8 L V/V/ U VBVB ^ V#V# g VVp V V z VV~ V>V> V-V- V V  VV =>?D`P`Q`R`S`T`U`V`W`X`Y`Z`[`\`]`^`_`@ VV? VV? VVx z {  !0{p^ %SET(CTOSp,0FFh) %SET(nGDTSlots, 4000) %SET(wsType, 8) %SET(localFS, 1) %SET(fHDisks, 1) %SET(hardwareType,4) %SET(clusterConfig,1) %SET(fNoFileSystem,0) %SET(fCommIop,0) %' sOsData is set to its maximum possible value when the OS is released. %' It must be reduced if any further static data is declared in any OS module. %' See Sysgen.asm for more information. %SET(sOsData,38389) %SET(cParSCHeap,10h) %SET(fMulpar,0FFh) %SET(fVarpar,0FFh) %SET(fTimeSliceEnable, 0h) %SET(lbTimeSlicePriority, 146) %SET(hbTimeSlicePriority, 178) %SET(lineHz, 40) %SET(sContingencyLog, 1) %SET(sKbdBuffer, 256) %Set(maxMedInterruptType, 87) %SET(nFrames, 8) %SET(nPartitions, 24) %SET(nPcb, 3*%nPartitions) %SET(nSysExchange, 30) %SET(nUsrExchange, 2*%nPcb) %SET(nMsgWait, 64+%nPartitions*3) %SET(nMsgWaitReserve, 30) %SET(nPTiming, 60) %SET(nUcb, %nPartitions) %SET(nNetUsers,20) %SET(nXBlock,2) %SET(nSectorPerXBlock,5) %SET(sioClock,24) %SET(nRcb, 50) %SET(nSwapFabs, 80) ; these are now set in Fs_n.asm don't touch here! %SET(nIob, 0) %SET(nFcb, 0) %SET(nFab, 0) %SET(nFub, 0) %SET(nVhb, 0) $INCLUDE(Sysgen.Mdf) $INCLUDE(Sysgen.Asm) gen.Asm) WR+5aa n8nbnqnnnnnn|nnnLd@_@@@@/@R@@[@@@R@@@@@+94j|%=k 5 K  a!,a!a!a!a!$!-! !,!!!!=![!{!!!!!!!F!!!!!0"?0"0"0"0"(0"0"0"0" 0""("n"""""" OS.LIB(LowMem_p kernel_p caProc Clock_p ClockFace CmCommon_p CommInt CommLineDma CommNub_p CommonSubs_OS CommStatus_p CompatSubs_p Crash_p DmyLabels_pCls FadsMgr_p Fault_p FilterPros_Lfs Finish_p GetDAIDmy IdleLoop_p InitComm_p KbdFil_Mp KbdInt_t1 KbdPros_p KbdRes_Vp KbdSysinPros_Mp Load_p LockedIo Log Math32 MemoryMgr_p Mulpar_p MulParUtil_p OssubInterface_p OsSubset Printer1_p Printer2_t1 PrinterInt_p RealInterface_p Reset_Vp ResourceMgr_p RqInterface_p Sched_p SCInstall_p SegAccess_p SetVec_p SoftVecMgr_p SrpDmy_WS Status_Cws StringProcs Suspend_p SwapFault_p SwapFaultA_p Swapio_p TermPros_p Timer_p Ulcmpb Vidio_p XbWindow_p) FileSys.LIB(FilePros_OS) Clstr.LIB(WsAgent_p WsLph_p) Init.lib(Fork_p) DBG.LIB(t1dNub_p t1DScr_p DbgRaw_P DbgIn3 t1dOs_p DbgPat t1pSub DbgNubPm dbgStubs_p t3dReg) [sys]ctos.lib(KernelNames rqlablAlt rqlabl) Kbd.OBJ request.obj pClstrLfs.obj FileSystem_n.obj DBG.LIB(t1dOnc_p) Init.LIB(Init_p InitBoot_t1 InitClock InitClstr_WsP InitCommon_OS InitConfig_p InitDAI InitDev InitDUtil_p InitExit_p InitFont_t1 InitKbd InitKbdInt InitKbdPros_Mp InitKernel_p InitKProcs InitLoad_p InitLoadFS InitLoadProc_p InitLoadRq_p InitMem_p InitMulPar_p InitNGenIoAddr InitNls_p InitNoVid_t1 InitOs_p InitOsMain InitOsSubs_p InitProcTbl_WS InitSysDev_OS InitSysgen InitTimer InitTimer1 InitUcbs InitVamDmy InitVector_p InitWs1 InitOsEnd) ..................InitOs_MF.plm..................................... F........................InitOs_FS.plm..................................... F.......... pClstrLfs CTAsm 11.3X??SEG??SEGOEMSegOEMSeg NameCommonOEMSegconstconstdatadatauBufSegConstDGrouphh h hh h 6 saSemiLowestnPTimingnInitProcIntDisable& uBuf oRgOExUcb* sIntSwtblP EncryptionKeygnInitProcHardWare$ibSwapFileNumbervmBufOut^ cFramesMax4 bGraphicsPort fInitExit userNumLast nXBlockT fTimeSlice cbPriParNamergRequestFileNamesRtcTpb cbSysSvcParN   mask8259A, nUNBlocks cbRgInitError pRgSdInit nSwappingRq intSwtblRTEK NetServerData sbSwapFileTryEach\ rgwTwoDigiti sbSwapFileTryFirstPswd[ pRgSwapMode rgDmaAddr userNumClstrLast rgsgAsib pRgTerminationRq rgUSegfLL cbRgCheckConfigPswdJmbIOPort nGdtCallGatesQrgCommDmaEnable contingencyLogZ nTryNewMaster iColCurrentFilterProcessExchPsbInstallKbdPswdˬ nWsAbortRq cbRgCrashMsg; fHighSpeed] pRgWsAbortRq rgcRq sMapCurrent f386FingerF userNumNetMinC rgSysCommInt"sbExitRunFileDefaultprgRqNoRemoteTerminationJcbCannotOpenSwapFile maskiBufLED nOSProcDesc userNumNetMaxE rgInitProcHardWarevnMsgWaitnDctL bitmapExchs6 sRcbXclusterTimeout timeSliceHb nExchg rgClusterMsge nSysCommInt0cbAsib sbExtCrashDumpSpecisgGdtCallGateFirstOM fProtectedDexitRunFilePrio nGDTSlotsG rgWakeupRqe fGoingDownLXINTR1XINTR0 InitLoadProc GPTaskFaultInitRtc InitConfigame pAckOutBufK nSoftwareInt swapFileSizex saTempLowestsbInstallMathSpec̬ endOsTablenFub rgModDescRsbInstallVdmPswd sbOEM3Spec*pSysTime3 nInitProcIntEnable(nRgInitRtcRequest" iModDescMax4 ibBufLEDsPut rgbRunsVirginZnIops*sbSwapFileTryEachPswduoExUcb plaEndMemoryeventControlBlock nTerminationRq sgFreeTailMxBusWindowSize[ rgSysSvcParnamepRgSgLdtsXbMax^ saEndMemory sbScratchVolumeSpec ContextStatus sbNlsFilePassword hardwareType nBytExchs\ cWakeUpRqc userNumKbd. timeSliceLb sbOEM4PswdQrgUcb sgFreeHeadKrgIpcAliasHeadW rgfLineDirtyZcbRgCheckConfig.sbWsConfigFileSpec8sbInitFilePasswordS rgExchReal fMulpar$wXlatTableChksum rgSoftwareIntDesc|HexchSchedPocket exitRunFilePrioSaveoRgOUcb( nHardwareInt  rgbOemSeg rgCommLineb rgpVidMemLinec sbNlsFileSpecb rgCrashMsg< rgUserReadCount3 ExchNetServer rgPriParNamergWsLocalUserNum rgDeltaPriority sbOEM2Pswd)nTicks3 cbRgClusterMsgd saGraphicsBoard rgOsTable userNumVdmnRqNoRemoteTerminationNsbConfigFileSpec̫sBufOut` rgOUcb sbInitFileSpecpRgOUcb; ExitRunFileDefPrio pBootBlock7 fAwsPIT ContextState vfAllowDirSlashesnIob pRgoGdtLinkS rqDelayDiscLsbExitRunFilePswdpBitmapExchsSave- rgUSegCb sbSwapFileTryFirst pRgSwappingRq rgbRunsTempZnUcbrgInitProcIntDisablesSCHeaprgHardwareIntDesc saSemiHighestrgWsId nArib rgbUNCount fSFNM7fCommIop#wsTypesbConfigFilePswd)rgInitProcIntEnableoRgUserWaitCount4sbExitRunFileDefPswd bUNBlkSHR gen8orgPcb0sbInstallVdmSpecT ibBufLEDsTake cpUSegs cUSeg sbInstallMathPswdcRcbMaxV wOSVersion wLocalUser osTypesaMaxPartition sioClockNlogCannotLoadNlsFile pXlatTable  userNumVid, rgOSProcDesc6 ExUCBLast ConfigpUserXlatTable cbNodeName extCntlRegAws5 sbOEM1Spec sarCurrentnPcb rgInitError fSubsysChannelB: initFilePrio`nSectorPerXBlockRpRgRcMax) rgCheckConfig/ fSysChannelA` fLfsToMasterrgInitRtcRequest sbOEM1PswdbitmapExchsSaveH rgbBufLEDsb userNumChannelA cUSegMax wsUserNumLast sbExitRunFileSpec' clusterConfig! fNoFileSystem"sbInstallKbdSpeccbRgLastCrashMsgM oRgUserReadCount2 exchSched rgCheckConfigPswdK saTempHighest GraphicsInfocbArib cbRgExitFileError nSdInit rgIopChanLrgCannotOpenSwapFile fSysChannelB6 iLineCurrent pRgOExUcb? srgExchReal6 userExchFirst1 cascade8259A- sbOEM3Pswd= sbOEM4Spec>nFcbrgsbWsUserNameN pAckInBufO sgTssIntLastIrgLastCrashMsgN f386EpRgChgUserNumRq rgwUNOwner sbOEM2SpecnAsib configFilePrio6rgbRunsZfGraphicsBoard pMouseDataS userNumChannelB nChgUserNumRq pRgPrgNetRouting%  nSwapFabs NodeName sbExtCrashDumpPswdrgExitFileError fSubsysChannelA8nRequestFileNames2 nNetUsers nParDesc&sExec FsIn2XINTR3 SysDeviceInitInitVpSwapFileInitUcbs ClockTestSchedInitMode3DmaCount RawCommNubbellRq InitNlsTables SysgenInitInit8259 mouseData rqTimeKbdTimerInterruptFloppyInterrupt LpInterrupt InitStatus DAIIntoXIDSigIsrHINTR71KbdInit DAIFromDisksHardDiskInterrupt BootBlock rqTimeVid PageTaskFaultTerminationProcessHINTR87IntHKbdCoprocessorOverrunSysInProrgRcMax InitSysCom InitDebugNubWsInitRqExInit NmiTaskFaultSysTime InitComm2 LoadFileInitSCSIDiskInterruptKbdTest TraceRawIntLclfsFilterProcessInitVamDoubleTaskFaultInitVpStructuresWsInit1SecondHalfCoprocessorNotPresentIntInitKbdProcessCoprocessorErrorDAIFromHardwarergPrgLocalServiceCodeWsAgentAddressBootBlockStackTaskFaultInit8251 ResumeTask RTCInterrupt InitVideo BreakRawIntrgPrgNetRouting FileSystemRelocateFsDataWsInit1FirstHalfXINTR4  [H< 3 K (24<@VBBVBW"0     L / A% H ` IFU(U U.U UU.0U2=4Ub                3 6 H Z  \ b @5 ? P    3 K <c 00010203040506070809101112131415161718192021222324  A   ; CRASH STATUS (ERCLAST CRASH STATUS (ERCCLUSTER NOT RUNNING, ERC = CANNOT LOAD EXIT RUN FILE, ERC =INITIALIZATION ERROR STATUS+The swap file cannot be opened, erc = *The nls file cannot be loaded, erc = Primary SysService00.ys]DisplayConfig.run2|1Ki){?T"c\ -a[3!aO2 lӀtŊVj#&Ϣ ~ìgiM=Df``'[Sys]Signon.Run<H O  Sys [sys]CrashDump.sysE%[[sys]SwapArea00.sysp | V6V6  V@V@  V"V"  VV  V3V3  V-V-  VEVE  V&V&  V;V; K V9V9 D VV @ VV C@ VV T@ V1V1 @ VV A VV B VV E VV  F V%V% G VV P VCVC $Q VV ,R VJVJ 4S VV<WDXV$V$TTR`  0    [sys]Request.ISAM.sys 6 V:V: ? V>V> H V4V4 Q VGVG Z V'V' c V#V#l V V v VVz VDVD~ V2V2 V V  VV VAVA V/V/ V,V, VV VV V V  V)V) VV V<V<  (Sysgen.Asm) C{{q{{{#{ ####J###+## $<TlN-  Nx0^]2WIIIXIiIIIWIIIRIIII+I5x#H#gIIjjP60do}`O(nJnn"ny1S6 k5J]JJJ9J_JJJJKJ{J OS.LIB(LowMem_p kernel_p caProc Clock_p ClockFace CmCommon_p CommInt CommLineDma CommNub_p CommonSubs_OS CommStatus_p CompatSubs_p Crash_p Date DmyLabels_pLfs FadsMgr_p Fault_p Finish_p IdleLoop_p InitComm_p KbdFil_Mp KbdInt_t1 KbdPros_p KbdRes_Vp KbdSysinPros_Mp Load_p LockedIo Log Math32 MemoryMgr_p Mulpar_p MulParUtil_p OssubInterface_p OsSubset Printer1_p Printer2_t1 PrinterInt_p RealInterface_p Reset_Vp ResourceMgr_p RqInterface_p Sched_p SCInstall_p SegAccess_p SetVec_p SoftVecMgr_p SrpDmy_Ws Statu V+V+ VIVI V5V5 VV V?V?ª VVƪ VVʪ V8V8Ϊ V V Ҫ VHVH֪ VVڪ V*V*ު V0V0 VV V V  V7V7 VV[Sys]SysInit.Run VV GST `[Sys]Nls.systK ̫[Sys]Config.sysH)* ;6[Sys]Ws###>Config.sys[Sys]InstallVdm.runmDK[Sys]InstallKbd.run[Sys]MathServer.run[Sys]ExtCrashDump.run[Sys]OEM1.run[Sys]OEM2.run[Sys]OEM3.run[Sys]OEM4.run/`123458`9`<=>?D`P`Q`R`S`T`U`V`W`X`Y`Z`[`\`]`^`_`@ VV? VV? V!V!   1 " !H<~ %SET(CTOSp,0FFh) %SET(nGDTSlots, 4000) %set(wsType,9) %SET(hardwareType,4) %SET(clusterConfig,2) %SET(fNoFileSystem,0) %SET(fHDisks, 1) %SET(fCommIop,0) %' sOsData is set to its maximum possible value when the OS is released. %' It must be reduced if any further static data is declared in any OS module. %' See Sysgen.asm for more information. %SET(sOsData,33848) %SET(cParSCHeap,10h) %SET(fMulpar,0FFh) %SET(fVarpar,0FFh) %SET(fTimeSliceEnable, 0h) %SET(lbTimeSlicePriority, 146) %SET(hbTimeSlicePriority, 178) %SET(nPartitions, 32) %SET(lineHz, 60) %SET(sContingencyLog, 1) %SET(sKbdBuffer, 256) %Set(maxMedInterruptType, 87) %SET(nFrames, 8) %SET(nPcb, 3*%nPartitions) %SET(nUsrExchange, 2*%nPcb) %SET(nXBlock, 24) %SET(nSectorPerXBlock, 5) %SET(maxXBlocksPerUser, 4) %SET(nXBlockSmall, 40) %SET(sMaxSmallRq, 64) %SET(nMsgWait, 96+%nPartitions*3+(%nXBlock+%nXBlockSmall)*2) %SET(nPTiming, 60) %SET(wsTotal, 32) %SET(nUcb, %nPartitions) %SET(nUserNum, %nUcb + %wsTotal*11) %SET(nNetUsers, 20) %SET(sioClock,4) %SET(nSwapFabs, 80) %SET(nUnblocks, %wsTotal*2) ; new parameters useful for cluster tuning %SET(MaxErrorCount, 15) %SET(MaxTimeOutCount, 10) ; TimeOutTicks is now ignored in sysgen, it is set at OS initialization time ; according to the cluster speed. For 1.8Mbps, TimeOutTicks = 4, ; for 307Kbps, TimeOutTicks = 12. %SET(TimeOutTicks, 4) %SET(TeleclusterTiming, 7) ; these are now set in Fs_n.asm don't touch here! %SET(nIob, 0) %SET(nFcb, 0) %SET(nFab, 0) %SET(nFub, 0) %SET(nVhb, 0) $INCLUDE(Sysgen.Mdf) $INCLUDE s_OS StringProcs Suspend_p SwapFault_p SwapFaultA_p Swapio_p TermPros_p Timer_p Ulcmpb Vidio_p XbWindow_p) FileSys.LIB(FilePros_OS) Clstr.lib(MstrAgntSubs_p MstrAgent_p MstrLph_p) Init.lib(Fork_p) DBG.LIB(t1dNub_p t1DScr_p DbgRaw_P DbgIn3 t1dOs_p DbgPat t1pSub DbgNubPm dbgStubs_p t3dReg) [Sys]Ctos.Lib(KernelNames rqlablAlt rqlabl) Kbd.OBJ request.obj pMstr.obj FileSystem_n.obj DBG.LIB(t1dOnc_p) Init.LIB(Init_p InitBoot_t1 InitClock InitClstr_MstrP InitCommon_OS InitConfig_p InitDev InitDUtil_p InitExit_p InitFile_OS InitFont_t1 InitKbd InitKbdInt InitKbdPros_Mp InitKernel_p InitKProcs InitLoad_p InitLoadFS InitLoadProc_p InitLoadRq_p InitMem_p InitMulPar_p InitNGenIoAddr InitNls_p InitNoVid_t1 InitOs_p InitOsMain InitOsSubs_p InitProcTbl_WS InitSysDev_OS InitSysgen InitTimer InitTimer1 InitUcbs InitVamDmy InitVector_p InitOsEnd) InitOsEnd) ..................InitOs_MF.plm..................................... F........................InitOs_FS.plm..................................... F..........pMstr CTAsm 11.3X??SEG??SEGOEMSegOEMSeg NameCommonOEMSegconstconstdatadatauBufSegConstDGrouphh h hhh h 6 saSemiLowestnPTimingnInitProcIntDisable֩ uBuf oRgOExUcb* sIntSwtbl EncryptionKeynInitProcHardWareԩibSwapFileNumbermBufOut cFramesMax MaxErrorCount bGraphicsPort fInitExit{ userNumLast nXBlock fTimeSlice cbPriParNamergRequestFileNamesޥRtcTpbccbSysSvcParName pAckOutBuf nSoftwareInt\ swapFileSize saTempLowestsbInstallMathSpec| endOsTable̥nFub rgModDescsbInstallVdmPswda sbOEM3SpecڨpSysTime nInitProcIntEnableةnRgInitRtcRequestҩ iModDescMax ibBufLEDsPutV rgbRunsVirginnIopssbSwapFileTryEachPswdoRgClusterTermoExUcb plaEndMemoryeventControlBlocknTerminationRq sgFreeTailMxBusWindowSizergSysSvcParnamepRgSgLdtsXbMax saEndMemory sbScratchVolumeSpec~ ContextStatus sbNlsFilePasswordo hardwareType nBytExchs cWakeUpRq userNumKbd. timeSliceLb sbOEM4PswdrgUcb sgFreeHeadKrgIpcAliasHeadW rgfLineDirtycbRgCheckConfigsbWsConfigFileSpecsbInitFilePassword rgExchRealΥfMulpar$qwXlatTableChksumirgSoftwareIntDesc exchSchedPocketsexitRunFilePrioSave oRgOUcb( nHardwareInt^ rgbOemSeg rgCommLine  rgpVidMemLine sbNlsFileSpec rgCrashMsgrgUserReadCount ExchNetServer rgPriParNamergWsLocalUserNum@rgDeltaPriorityi sbOEM2Pswd٨nTicksMaxTimeoutCountcbRgClusterMsgsaGraphicsBoardfSrpUp rgOsTable! userNumVdmsbConfigFileSpec|sBufOutrgOUcb sbInitFileSpecpRgOUcb ExitRunFileDefPrio} pBootBlock fAwsPITb ContextStateIvfAllowDirSlashesnIob pRgoGdtLinkSsbExitRunFilePswdpBitmapExchsSave rgUSegCbasbSwapFileTryFirst pRgSwappingRq rgbRunsTempnUcbrgInitProcIntDisableJsSCHeaprgHardwareIntDescZ saSemiHighestrgWsIdMaxXBlocksPerUsernAribS rgbUNCount fSFNMfCommIop#wsTypesbConfigFilePswd٧rgInitProcIntEnablenoRgUserWaitCount4 orgUserTablesbExitRunFileDefPswdp bUNBlkSHR genorgPcb0sbInstallVdmSpec ibBufLEDsTakeXcpUSegs[cUSeg_sbInstallMathPswd wOSVersion wLocalUser osTypesaMaxPartitionsioClocklogCannotLoadNlsFilem pXlatTablee userNumVid, rgOSProcDesc ExUCBLast ConfigpUserXlatTablek cbNodeName extCntlRegAws sbOEM1Spec sarCurrentnPcb rgInitError'fSubsysChannelB: initFilePrionSectorPerXBlockpRgRcMax rgCheckConfig fSysChannelA fLfsToMasterrgInitRtcRequest sbOEM1PswdŨbitmapExchsSave rgbBufLEDsuserNumChannelA6cUSegMaxY wsUserNumLast~sbExitRunFileSpec clusterConfig! fNoFileSystem"sbInstallKbdSpecb nRepollActivecbRgLastCrashMsgoRgUserReadCount2 exchSchedqrgCheckConfigPswd saTempHighest GraphicsInfocbAribWcbRgExitFile    . 6= a ip     @.V? P_`@`   ) I i   L000102030405060708091011121314151617181920212223242526272829303132 Q A a  CRASH STATUS (ERCLAST CRASH STATUS (ERCCLUSTER NOT RUNNING, ERC = CANNOT LOAD EXIT RUN FILE, ERC =INITIALIZATION ERROR STATUS+The swap file cannot be opened, erc = *The nls file cannot be loaded, erc = Primary SysService00%ys]DisplayConfig.runErrornSdInity rgIopChanrgCannotOpenSwapFileC fSysChannelB6 iLineCurrent pRgOExUcb srgExchReal userExchFirst cascade8259A sbOEM3Pswd sbOEM4SpecnFcbrgsbWsUserName pAckInBuf sgTssIntLastIrgLastCrashMsgf386E TimeoutTickspRgChgUserNumRq rgwUNOwner sbOEM2SpecƨnAsibQconfigFilePriorgbRuns nXBlockSmallfGraphicsBoard pMouseData userNumChannelBi nChgUserNumRq pRgPrgNetRouting nSwapFabsoNodeName sbExtCrashDumpPswdrgExitFileErrorfSubsysChannelA8nRequestFileNames nNetUsers nParDesc&sExec` mask8259A nUNBlocks cbRgInitError& pRgSdInitu nSwappingRq intSwtblTEKU NetServerData TeleclusterTimingsbSwapFileTryEach rgwTwoDigitsbSwapFileTryFirstPswd pRgSwapMode rgDmaAddrpuserNumClstrLast rgsgAsibpRgTerminationRq rgUSegfLLcbRgCheckConfigPswdmbIOPort nGdtCallGatesQrgCommDmaEnablecontingencyLog nTryNewMaster| iColCurrentsbInstallKbdPswd{ nWsAbortRq cbRgCrashMsg fHighSpeed pRgWsAbortRq rgcRq) sMapCurrent f386FingerF userNumNetMin rgSysCommIntҩsbExitRunFileDefault!cbCannotOpenSwapFileB maskiBufLEDZ nOSProcDesc userNumNetMax rgInitProcHardWare:nMsgWaitnDct bitmapExchsclusterTimeoutc timeSliceHb sSmallXBlocknExchg rgClusterMsg nSysCommIntcbAsibUzsbExtCrashDumpSpecisgGdtCallGateFirstO fProtectedDexitRunFilePrio nGDTSlotsG rgWakeupRq fGoingDown}XINTR1XINTR0 InitLoadProc GPTaskFaultInitRtc InitConfigFsIn2MstrAgentReceiverXINTR3 SysDeviceInitInitVpSwapFileInitUcbs ClockTestSchedInitMode3DmaCount RawCommNubbellRq InitNlsTables SysgenInitInit8259 mouseData rqTimeKbdTimerInterruptFloppyInterrupt LpInterrupt InitStatusSigIsrHINTR71KbdInitHardDiskInterrupt BootBlock rqTimeVid PageTaskFaultTerminationProcessHINTR87IntHKbdCoprocessorOverrunSysInProrgRcMax InitSyscom InitDebugNubRqExInit NmiTaskFaultSysTime InitComm2 LoadFileInitSCSIDiskInterruptKbdTest TraceRawIntInitVamDoubleTaskFaultInitVpStructuresCoprocessorNotPresentIntInitKbdProcessCoprocessorErrorInitMstrrgPrgLocalServiceCodeAddressBootBlockStackTaskFaultInit8251 ResumeTask RTCInterrupt InitVideo BreakRawIntrgPrgNetRouting FileSystemRelocateFsDataXINTR4 MstrAgent  [ `@<  (24<@V=BV=W "0      @ @ A  ` IAU'U U,UUU.0U294U  @( |1Ki){?T"c\ -a[3!aO2 lӀtŊVj#&Ϣ ~ìgiM=D`U`[Sys]Signon.RunH !Op  }Sys [sys]CrashDump.sysE%[sys]SwapArea00.sysp   V3V3  V;V;  V!V! " VV * V1V1 2 V+V+ : V@V@ B V%V% J V7V7 RK V5V5 ZD VV b@ VV jC@ VV rT@ V/V/ z@ VV A VV B VV E VV F V$V$ G VV P V>V> Q V V R VDVD S VVWX V#V#`!8̥sq0Υ    [sys]Request.ISAM.sys  V6V6  VV   VEVE  VBVB  V&V& ' V"V"0 VV: VV> V?V?B V0V0F V V J VVN V<V<R VVV V-V-Z V*V*^ VVb V V f V(V(j VVn V2V2r VVv V:V:z V V ~ VCVC VV V8V8 V)V) V.V. VV V V  V4V4 VV[Sys]SysInit.Run VVG [Sys]Nls.sys$Kop |[Sys]Config.sysH٧ڧ ;槀[Sys]Ws###>Config.sys[Sys]InstallVdm.runDKa[Sys]InstallKbd.run[Sys]MathServer.run[Sys]ExtCrashDump.run[Sys]OEM1.run[Sys]OEM2.run[Sys]OEM3.run[Sys]OEM4.run/`123458`9`<=>?D`P`Q`R`S`T`U`V`W`X`Y`Z`[`\`]`^`_`@ VV? VVĩ? V V  \ ^ ҩ !`@< %SET(CTOSp,0FFh) %SET(nGDTSlots, 4000) %SET(wsType, 8) %SET(includeLFS, 0) %SET(fHDisks, 1) %SET(hardwareType,4) %SET(clusterConfig,0) %SET(fNoFileSystem,0) %SET(fCommIop,0) %' sOsData is set to its maximum possible value when the OS is released. %' It must be reduced if any further static data is declared in any OS module. %' See Sysgen.asm for more information. %SET(sOsData,38951) %SET(cParSCHeap,10h) %SET(fMulpar,0FFh) %SET(fVarpar,0FFh) %SET(fTimeSliceEnable, 0h) %SET(lbTimeSlicePriority, 146) %SET(hbTimeSlicePriority, 178) %SET(nPartitions, 24) %SET(lineHz, 40) %SET(sContingencyLog, 1) %SET(sKbdBuffer, 256) %Set(maxMedInterruptType, 87) %SET(nFrames, 8) %SET(nPcb, 3*%nPartitions) %SET(nSysExchange, 30) %SET(nUsrExchange, 2*%nPcb) %SET(nMsgWait, 64+%nPartitions*3) %SET(nMsgWaitReserve, 30) %SET(nPTiming, 60) %SET(fVerifyFileStruct, 0) %SET(nUcb, %nPartitions) %SET(nNetUsers,20) %SET(nSwapFabs, 80) ; these are now set in Fs_n.asm don't touch here! %SET(nIob, 0) %SET(nFcb, 0) %SET(nFab, 0) %SET(nFub, 0)    hardwareType nBytExchs\ cWakeUpRqc userNumKbd. timeSliceLb sbOEM4Pswd[rgUcb sgFreeHeadKrgIpcAliasHeadW rgfLineDirtyncbRgCheckConfig.sbWsConfigFileSpecBsbInitFilePassword] rgExchReal>fMulpar$wXlatTableChksum ]rgSoftwareIntDescexchSchedPocket exitRunFilePrioSaveoRgOUcb( nHardwareInt  rgbOemSeg rgCommLineb rgpVidMemLinec sbNlsFileSpecl rgCrashMsg< rgUserReadCount3 ExchNetServer rgPriParNamergWsLocalUserNum rgDeltaPriority sbOEM2Pswd3nTicks3 cbRgClusterMsgd saGraphicsBoardfSrpUpN rgOsTable userNumVdmsbConfigFileSpec֭sBufOut` rgOUcb sbInitFileSpecpRgOUcb; ExitRunFileDefPrio pBootBlock7 fAwsPIT ContextState vfAllowDirSlashesnIob pRgoGdtLinkS rqDelayDiscLsbExitRunFilePswdpBitmapExchsSave- rgUSegCb sbSwapFileTryFirst pRgSwappingRq rgbRunsTempnnUcbrgInitProcIntDisablesSCHeaprgHardwareIntDesc saSemiHighestrgWsId nArib rg%SET(nVhb, 0) $INCLUDE(Sysgen.Mdf) $INCLUDE(Sysgen.Asm) ]]K]]8]]]XiWR+5aa n8nbnqnnnnnn|nnnLd@_@@@@/@R@@[@@@R@@@@@+94j|%=k 5 K  a!,a!a!a!a!$!-! !,!!!!=![!{!!!!!!!F!!!!!0"?0"0"0"0"(0"0"0"0" 0""("n"""""" OS.LIB(LowMem_p kernel_p caProc Clock_p ClockFace CmCommon_p CommInt CommLineDma CommNub_p CommonSubs_OS CommStatus_p CompatSubs_p Crash_p Date DmyLabels_pLfs FadsMgr_p Fault_p Finish_p GetDAIDmy IdleLoop_p InitComm_p KbdFil_Mp KbdInt_t1 KbdPros_p KbdRes_Vp KbdSysinPros_Mp Load_p LockedIo Log Math32 MemoryMgr_p Mulpar_p MulParUtil_p OssubInterface_p OsSubset Printer1_p Printer2_t1 PrinterInt_p RealInterface_p Reset_Vp ResourceMgr_p RqInterface_p Sched_p SCInstall_p SegAccess_p SetVec_p SoftVecMgr_p SrpDmy_Ws Status_OS StringProcs Suspend_p SwapFault_p SwapFaultA_p Swapio_p TermPros_p Timer_p Ulcmpb Vidio_p XbWindow_p) FileSys.LIB(FilePros_OS) Init.lib(Fork_p) DBG.LIB(t1dNub_p t1DScr_p DbgRaw_P DbgIn3 t1dOs_p DbgPat t1pSub DbgNubPm dbgStubs_p t3dReg)  [Sys]Ctos.Lib(KernelNames rqlablAlt rqlabl) Kbd.OBJ request.obj pStnd.obj FileSystem_n.obj DBG.LIB(t1dOnc_p) Init.LIB(Init_p InitBoot_t1 InitClock InitCommon_OS InitConfig_p InitDev InitDUtil_p InitExit_p InitFile_OS InitFont_t1 InitKbd InitKbdInt InitKbdPros_Mp InitKernel_p InitKProcs InitLoad_p InitLoadFS InitLoadProc_p InitLoadRq_p InitMem_p InitMulPar_p InitNgenIoAddr InitNls_p InitNoVid_t1 InitOs_p InitOsMain InitOsSubs_p InitProcTbl_WS InitSysDev_OS InitSysgen InitTimer InitTimer1 InitUcbs InitVamDmy InitVector_p InitOsEnd) itTimer1 InitUcbs InitVamDmy InitVector_p InitOsEnd) InitOsEnd) ..................InitOs_MF.plm..................................... F........................InitOs_FS.plm..................................... F..........pStnd CTAsm 11.3X??SEG??SEGOEMSegOEMSeg NameCommonOEMSegconstconstdatadatauBufSegConstDGrouphh h hh° h 6 saSemiLowestnPTimingnInitProcIntDisable0 uBuf oRgOExUcb* sIntSwtblR EncryptionKey}nInitProcHardWare.ibSwapFileNumbermBufOut^ cFramesMax4 bGraphicsPort fInitExit userNumLast fTimeSlice cbPriParNamergRequestFileNamesNRtcTpb cbSysSvcParName pAckOutBufK nSoftwareInt swapFileSize saTempLowestsbInstallMathSpec֮ endOsTable<nFub rgModDesc\sbInstallVdmPswd sbOEM3Spec4pSysTime3 nInitProcIntEnable2nRgInitRtcRequest, iModDescMax> ibBufLEDsPut rgbRunsVirginnnIops*sbSwapFileTryEachPswdoRgClusterTermLoExUcb plaEndMemoryeventControlBlock nTerminationRq sgFreeTailMxBusWindowSize[ rgSysSvcParnamepRgSgLdtsXbMax^ saEndMemory sbScratchVolumeSpec ContextStatus sbNlsFilePasswordɭ bUNCount fSFNMAfCommIop#wsTypesbConfigFilePswd3rgInitProcIntEnable̬oRgUserWaitCount4 orgUserTablensbExitRunFileDefPswd bUNBlkSHR genBorgPcb0sbInstallVdmSpec^ ibBufLEDsTake cpUSegs cUSeg sbInstallMathPswd wOSVersion wLocalUser osTypesaMaxPartition logCannotLoadNlsFile pXlatTable userNumVid, rgOSProcDescj ExUCBLast ConfigpUserXlatTable cbNodeName extCntlRegAws5 sbOEM1Spec sarCurrentnPcb rgInitError fSubsysChannelB: initFilePriojpRgRcMax) rgCheckConfig/ fSysChannelA` fLfsToMasterrgInitRtcRequest sbOEM1PswdbitmapExchsSaveH rgbBufLEDsb userNumChannelA cUSegMax wsUserNumLast sbExitRunFileSpec= clusterConfig! fNoFileSystem"sbInstallKbdSpeccbRgLastCrashMsgM oRgUserReadCount2 exchSched rgCheckConfigPswdK saTempHighest GraphicsInfocbArib cbRgExitFileError nSdInit rgIopChanLrgCannotOpenSwapFile fSysChannelB6 iLineCurrent pRgOExUcb? srgExchReal@ userExchFirst1 cascade8259A- sbOEM3PswdG sbOEM4SpecHnFcbrgsbWsUserNameO pAckInBufO sgTssIntLastIrgLastCrashMsgN f386EpRgChgUserNumRq rgwUNOwner sbOEM2Spec nAsib configFilePrio@rgbRunsnfGraphicsBoard pMouseDataS userNumChannelB nChgUserNumRq pRgPrgNetRouting% nSwapFabs NodeName sbExtCrashDumpPswd rgExitFileError fSubsysChannelA8nRequestFileNames< nNetUsers nParDesc&sExec mask8259A, nUNBlocks cbRgInitError pRgSdInit nSwappingRq intSwtblTTEK NetServerData sbSwapFileTryEachr rgwTwoDigiti sbSwapFileTryFirstPswdq pRgSwapMode rgDmaAddr userNumClstrLast rgsgAsib pRgTerminationRq rgUSegfLL cbRgCheckConfigPswdJmbIOPort nGdtCallGatesQrgCommDmaEnable contingencyLogZ nTryNewMaster iColCurrentsbInstallKbdPswdծ nWsAbortRq cbRgCrashMsg; fHighSpeed] pRgWsAbortRq rgcRq sMapCurrent f386FingerF userNumNetMinC rgSysCommInt,sbExitRunFileDefaultcbCannotOpenSwapFile maskiBufLED nOSProcDesc userNumNetMaxE rgInitProcHardWarenMsgWaitnDctL bitmapExchs6 clusterTimeout timeSliceHb nExchg rgClusterMsge nSysCommInt:cbAsib sbExtCrashDumpSpecisgGdtCallGateFirstO fProtectedDexitRunFilePrio nGDTSlotsG rgWakeupRqe fGoingDownLMXINTR1XINTR0 InitLoadProc GPTaskFaultInitRtc InitConfigFsIn2XINTR3 SysDeviceInitInitVpSwapFileInitUcbs ClockTestSchedInitMode3DmaCount RawCommNubbellRq InitNlsTables SysgenInitInit8259 mouseData rqTimeKbdTimerInterruptFloppyInterrupt LpInterrupt InitStatusHINTR71KbdInitHardDiskInterrupt BootBlock rqTimeVid PageTaskFaultTerminationProcessHINTR87IntHKbdCoprocessorOverrunSysInProrgRcMax InitSysCom InitDebugNubRqExInit NmiTaskFaultSysTime InitComm2 LoadFileInitSCSIDiskInterruptKbdTest TraceRawIntInitVamDoubleTaskFaultInitVpStructuresCoprocessorNotPresentIntInitKbdProcessCoprocessorErrorrgPrgLocalServiceCodeAddressBootBlockStackTaskFaultInit8251 ResumeTask RTCInterrupt InitVideo BreakRawIntrgPrgNetRouting FileSystemRelocateFsDataXINTR4  [H< 3 K (24<@V:BV:W"0     L / A% H `I>U%U U*UUU.0U264Ub                3 6 H Z  \   Y`Z`[`\`]`^`_`@ VV? VV? VV   1 , !H<~GW Hyh@@Ver 2.4 Linker 11.3b @5 ? P    3 K <c 00010203040506070809101112131415161718192021222324  A   ; CRASH STATUS (ERCLAST CRASH STATUS (ERCCLUSTER NOT RUNNING, ERC = CANNOT LOAD EXIT RUN FILE, ERC =INITIALIZATION ERROR STATUS+The swap file cannot be opened, erc = *The nls file cannot be loaded, erc = Primary SysService00%.ys]DisplayConfig.runOsn|1Ki){?T"c\ -a[3!aO2 lӀtŊVj#&Ϣ ~ìgiM=D|``=[Sys]Signon.RunRH O  Sys  [sys]CrashDump.sys,E%q[sys]SwapArea00.sysp  V1V1  V8V8  VV  VV  V/V/  V)V)  V=V=  V#V#  V5V5 K V3V3 @ VV C@ VV T@ V-V- @ VV A VV  B VV E VV F V"V" "G VV *P V;V; 2Q VV :R VAVA BS VVJWX V!V!T`';  0>   [sys]Request.ISAM.sys j V4V4 s V?V? | V$V$  V V  V V  VV V<V< V.V. V V  VV V9V9 V+V+ V(V( VV VV V V Ĭ V&V&Ȭ VV̬ V0V0Ь VVԬ V7V7ج V V ܬ V@V@ VV V'V' V,V, VV V V  V2V2 VV[Sys]SysInit.Run VVG]^ j[Sys]Nls.sys~Kɭʭ ֭[Sys]Config.sysH34 ;@[Sys]Ws###>Config.sys[Sys]InstallVdm.runwDK[Sys]InstallKbd.run[Sys]MathServer.run[Sys]ExtCrashDump.run[Sys]OEM1.run[Sys]OEM2.run[Sys]OEM3.run[Sys]OEM4.run/`123458`9`<=>?D`P`Q`R`S`T`U`V`W`X` ȎмhZsHH&u&ًӃ 3&6t$3&6&&>B|T- ؎ùRZ;r 3$HH&&3&3+ŽмhPh:HH&32I IЭȋOVڋ^׭33ȸ&<t<u(Ȏ؎мhHH&>&6&.&&& & && &  ы3VWn3 򫺂2@VM REQUIRES 286 OR 386 PROCESSOR2.4; ; FILE REQUEST.ASM -- ; ; COPYRIGHT 1980, 1981, 1982, 1983 CONVERGENT TECHNOLOGIES,INC. ; ALL RIGHTS RESERVED ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE ; SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A ; PARTICULAR PURPOSE,AND MAY NOT BE COPIED OR OTHERWISE USED ; WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, ; INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS ; SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT ; TECHNOLOGIES. ; ; ; NOTES FOR CHANGING THIS FILE -- ; ; Please be aware that in the Convergent Assembly language ; there are two types of comments: normal comments (any text on ; a line after a ";" character, and a macro comment (%' text '). ; It is not possible to "comment out" a macro by inserting a ; ";" in front of it. You may comment out a macro by replacing ; the percent sign in the call with a ";", or by precceding the ; call with "%'". This will cause the macro processor to ; ignore any text up to and including the next "'" or RETURN ; (0Ah) character,whichever comes first. ; ; Macro calls must not be mixed. In general,the invocation of ; a macro causes an entry to be added to a table,and mixing ; macro calls would result in scrambled tables. ; $INCLUDE (request.mdf) ; ; The next set of macros construct 6 tables which are used by ; Convergent to implement OS service request. When a new ; request code is added to the OS,a new entry has to be added ; using the macro "SysRequest". Request codes have to be ; within 0 - 4063 (0FDFh) and contiguous. The "requestNumber" ; field is used by the macro just to verify the coniguousness ; of the requests. Although a system builder may replace a ; "SysRequest" definition with one of their own, adding new ; "SysRequest"'s is not allowed, as this may conflict with ; future Convergent requests. New requests should be added ; using the "UsrRequest" declarations which follow the ; "SysRequest"'s. ; ; %' SYSREQUEST MACRO DEFINITION -- %' %' MACRO FORMAT -- %' The "SysRequest" macro takes 9 arguments which are %' described below. The first 7 arguments must be on the same %' line, and the last two arguments, the parameter format %' and the net routing code, can be on %' additional lines. A full description of the fields of the %' macro and their use can be found in the CTOS manual and in %' the System Programmers Guide. The macro arguments are %' defined as follows: %' %' %SysRequest( %' rqCode ....... The request number of the service %' interface. These numbers must be in %' order wit  cb pairs. %' %rFh Route this request by the file handle. %' %openFh This request opens a resource that owns a file handle %' % and returns the handle in the first response pb/cb pair. %' %closeFh This request closes a resource that owns a file handle. %' %DevSpec Route this request by dev spec %' %DirSpec Route this request by dir Spec %' %FileSpec Route this request by file spec %' %FileSpec2 Route this request by file spec (request contains 2 of them) %' %FileSpecP2S2 Route by file spec in p2/s2 ;################################################################ ; ; Exchange definitions -- ; Exchanges 0 to 20 are reserved for CTOS processes. ; ; Virtual exchanges, replaced at boot time; ; translation table created in Sysgen.Mdf, ; varies with CTOS version. exchAgent EQU -1 exchNotInstalled EQU -2 exchMassIO EQU -3 ; Mass storage I/O manager exchFilSys1 EQU -4 ; File system manager/ Utility exchFilSys2 EQU -5 exchFilSys3 EQU -6h no omissions. %' ,name ......... The name of the procedure. This field %' is here for convenience only and is not %' used internally by the macro. %' ,exchange ..... This is the CTOS exchange that the %' request will be routed to by the %' Request interface. %' ,ServiceCode .. This field is for the convenience of %' the Service process, and can be used in %' any way the process desires. %' ,sCntInfo ..... %' ,nReqPbCb ..... %' ,nRespPbCb .... These values are put into the request %' block which the CTOS procedural %' interface creates for the user in the %' fields of the same name. %' , %( format ) . The "format" is described in the %' following section. %' , %( netRouting ) . The "netRouting" is described in the %' following section. %' ) %' %' FORMAT -- %' The format is a set of short macros which define the %' order and type of arguments that are pushed onto the stack %' when a user calls the CTOS procedural interface. Also in %' the "format" are any constants which go into the request %' block. The CTOS procedural initializes the request block to %' zeros, so any zero constants may be omitted. The macros are %' defined as follows: %' %' name: meaning: %' %illegal ...... call to this request is an error. %' %none ......... no arguments on stack (this call is %' optional). %' %c(v,o) ....... byte value "v" is placed in request %' block at offset "o" in the request %' block. %' %w(o) ......... the next word on the stack goes at %' offset "o". %' %b(o) ......... the low byte of next word on stack goes %' at offset "o" %' %' For convenience, the following abbreviations are also defined: %' %' abbreviation: definition: %' %fh .......... %w(12) %' %lfa ......... %w(16) %w(14) %' %p(o) ........ %w(o+2) %w(o) %' %pbCb0 ....... %w(20) %w(18) %w(22) %' %p0 .......... %w(20) %w(18) %' %s0 .......... %w(22) %' %pbCb1 ....... %w(26) %w(24) %w(28) %' %p1 .......... %w(26) %w(24) %' %s1 .......... %w(28) %' %pbCb2 ....... %w(32) %w(30) %w(34) %' %p2 .......... %w(32) %w(30) %' %s2 .......... %w(34) %' %p3 .......... %w(38) %w(36) %' %pbCb3 ....... %w(38) %w(36) %w(40) %' %' NET ROUTING -- %' The table rgNetRouting is used by the CTOS Kernel to decide whether a %' request gets routed by file handle, by file spec, or not at all. %' It is also used by the Agent to determine how to expand file specs. %' The following is a set of general rules for request blocks that have %' file specs. These rules permit routing information to be encoded. %' %' 1. A request may not have more than two file specs. %' 2. The first file spec must be specified by the first pb/cb pair. %' 3. If a file spec has a password, it must be specified by the pb/cb %' pair that immediately follows the pb/cb for the file spec. %' 4. If one file spec has a password associated with it, then %' all file specs in the request must have passwords. %' %' %RW This request is a read or write and may have to be %' be broken up in to smaller requests. %' SpecPW All file spec pb/cb pairs are followed by password pb/  exchFilSys4 EQU -7 exchChgUsrN EQU -8 ; Multi-Part Change User Num Rq for FS exchSrpAgent EQU -9 exchLog EQU -10 exchFilterPros EQU -11 exchMem EQU -12 exchVp EQU -13 ; Var-Part only rqs exchKbd EQU -14 ; Keyboard manager/ Debugger, maybe resident exchResex EQU -15 ; overlay manager exchRemoteTerm EQU -16 ; ; Exchanges constant over all versions of CTOS, ; or equated to virtual exchanges. exchMaster EQU exchNotInstalled ; Service from master, if exists exchISAM EQU exchNotInstalled ; ISAM service exchDBMS EQU exchNotInstalled ; DBMS service exch3270 EQU exchNotInstalled ; 3270 exchKbdRes EQU 1 ; Keyboard manager/ Debugger, resident portion exchSysIn EQU 3 ; System Input proccess exchTerm EQU 5 ; Application terminator ; exchLclFs EQU 10 ; File system manager/ Utility exchSplr EQU 0 ; Print Spooler exchSplrOld EQU exchNotInstalled ; Print Spooler exchQueMgr EQU exchNotInstalled ; Queue Manager exchRJE EQU exchNotInstalled ; RJE exchTask EQU exchResex exchVideo EQU 0 ; No video until Vdm_xx.run. exchCommLine EQU exchResex exchCommSer EQU exchNotInstalled exchTape EQU exchNotInstalled ; Tape Server exchX25 EQU exchNotInstalled ; X.25 exchSNA  EQU exchNotInstalled ; SNA exchMailSer EQU exchNotInstalled ; Mail Server exchSched EQU exchVp exchUser EQU exchMem ; userNum creation/deletion exchNotPresent EQU 0 ; not installed, don't try master %' SYSREQUEST ENTRIES MUST COME FIRST %SysRequestInit %SysRequest(0,(illegal),0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(1,SetPath,exchResex,0D13h,6,3,0, %( %pbcb0 %pbcb1 %pbcb2 ), %( %noRouting )) %SysRequest(2,ClearPath,exchResex,0D14h,0,0,0, %( %none ), %( %noRouting )) %SysRequest(3,SetPrefix,exchResex,0D15h,6,1,0, %( %pbcb0 ), %( %noRouting )) %SysRequest(4,OpenFile,exchFilSys1,0001h,6,2,1, %( %c(2,34) %p2 %pbcb0 %pbcb1 %w(14) ), %( %FileSpec %SpecPW %openFh %CloseAtTermination)) %SysRequest(5,CreateFile,exchFilSys1,0000h,6,2,0, %( %pbcb0 %pbcb1 %lfa ), %( %FileSpec %SpecPW )) %SysRequest(6,DeleteFile,exchFilSys1,000Ch,2,0,0, %( %fh ), %( %rFh %closeFh )) %SysRequest(7,RenameFile,exchFilSys1,0002h,6,2,0, %( %fh %pbcb0 %pbcb1 ), %( %rFh %FileSpec %SpecPW )) %SysRequest(8,GetFileStatus,exchFilSys1,0700h,6,0,1, %( %fh %w(14) %pbcb0 ), %( %rFh )) %SysRequest(9,SetFileStatus,exchFilSys1,0701h,6,1,0, %( %fh %w(14) %pbcb0 ), %( %rFh )) %SysRequest(10,CloseFile,exchFilSys1,000Bh,2,0,0,  %( %fh ), %( %rFh %closeFh)) %SysRequest(11,MountVolume,exchFilSys1,0800h,6,2,0, %( %pbcb0 %pbcb1 ), %( %DevSpec %SpecPW )) %SysRequest(12,DismountVolume,exchFilSys1,0801h,6,2,0, %( %pbcb0 %pbcb1 ), %( %DevSpec %SpecPW )) %SysRequest(13,ChangeFileLength,exchFilSys1,0009h,6,0,0, %( %fh %lfa ), %( %rFh )) %SysRequest(14,GetDateTime,exchFilSys3,0200h,6,0,1, %( %p0 %c(4,22) ), %( %noRouting )) %SysRequest(15,GetVhb,exchFilSys1,0803h,6,1,1, %( %pbcb0 %pbcb1 ), %( %DevSpec )) %SysRequest(16,SetDevParams,exchFilSys1,0804h,6,2,0, %( %pbcb0 %pbcb1 %w(12) ), %( %DevSpec %SpecPW )) %SysRequest(17,CreateDir,exchFilSys1,0003h,6,3,0, %( %pbcb0 %pbcb1 %pbcb2 %w(14) %w(16) ), %( %DirSpec %SpecPW )) %SysRequest(18,DeleteDir,exchFilSys1,0004h,6,2,0, %( %pbcb0 %pbcb1 ), %( %DirSpec %SpecPW )) %SysRequest(19,CloseAllFiles,exchFilSys3,000Dh,0,0,0, %( %none ), %( %noRouting )) %SysRequest(20,QuietIO,exchFilSys3,0012h,0,0,0, %( %none ), %( %noRouting )) %SysRequest(21,QueryVidHdw,exchVideo,0C03h,6,0,1, %( %pbcb0 ), %( %noRouting )) %SysRequest(22,LoadFontRam,exchVideo,0B00h,6,1,0, %( %fh %pbcb0 ), %( %noRouting )) %SysRequest(23,LoadStyleRam,exchVideo,0B03h,6,1,0, %( %pbcb0 ), %( %noRouting )) %SysRequest(24,LoadCursorRam,exchVideo,0B02h,6,1,0, %( %pbcb0 ), %( %noRouting )) %SysRequest(25,ReadDirSector,exchFilSys1,0005h,6,2,1, %( %pbcb0 %pbcb1 %w(14) %p2 %c(2,35) ), %( %DirSpec %SpecPW )) ; *1 %SysRequest(26,GetDcbOld,exchFilSys1,0805h,6,2,1, %( %pbcb0   etSysInMode,exchSysIn,0008h,4,0,0, %( %w(14) %fh ), %( %noRouting )) %SysRequest(60,ReadActionCode,exchKbd,000Ah,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(61,QueryWSNum,exchFilSys4,0701h,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(62,CloseAllFilesLL,exchFilSys3,000Eh,0,0,0, %( %none ), %( %noRouting )) %SysRequest(63,KbdWakeUp,exchKbd,0002h,0,0,0, %( %none ), %( %noRouting )) ; *2 %SysRequest(64,BeeperOff,0,0200h,0,0,0, %( %none ), %( %noRouting )) ; *2 %SysRequest(65,SetKbdUnencodedModeReal,exchKbd,0005h,2,0,0, %( %w(12) ), %( %noRouting )) ; *2 %SysRequest(66,KbdResetSysIn,exchSysIn,000Ch,0,0,0, %( %none ), %( %noRouting )) ; *2 %SysRequest(67,DisableActionFinish,exchKbd,0007h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(68,CheckpointSysIn,exchSysIn,0009h,0,0,0, %( %none ), %( %noRouting )) %SysRequest(69,SetIntHandler,exchResex,0D0Bh,12,0,0, %( %w(12) %p(14) %w(18) %w(20) %w(22) ), %( %noRouting )) %SysRequest(70,ResetKb%pbcb1 %pbcb2), %( %DevSpec )) %SysRequest(27,GetUcb,exchResex,0D17h,6,0,1, %( %pbcb0 ), %( %noRouting )) %SysRequest(28,Chain,exchTerm,0101h,6,2,0, %( %pbcb0 %pbcb1 %w(12) %w(14) %w(16) ), %( %noRouting )) %SysRequest(29,LoadTask,exchTerm,0004h,6,0,0, %( %fh %w(14) %w(16) ), %( %noRouting )) %SysRequest(30,SetFhLongevity,exchFilSys1,0011h,4,0,0, %( %w(12) %w(14) ), %( %rFh )) %SysRequest(31,GetFhLongevity,exchFilSys1,0010h,6,0,1, %( %fh %p0 %c(1,22) ), %( %rFh )) %SysRequest(32,ResetSubsys,exchTask,0E00h,6,0,0, %( %fh %w(14) %w(16) ), %( %noRouting )) %SysRequest(33,DeviceRead,exchMassIo,8000h,6,0,2, %( %w(12) %pbcb0 %lfa %p1 %c(2,28) ), %( %RW )) %SysRequest(34,DeviceWrite,exchMassIo,8001h,6,1,1, %( %w(12) %pbcb0 %lfa %p1 %c(2,28) ), %( %RW )) %SysRequest(35,Read,exchFilSys2,0000h,6,0,2, %( %fh %pbcb0 %lfa %p1 %c(2,28) ), %( %rFh %RW )) %SysRequest(36,Write,exchFilSys2,0001h,6,1,1, %( %fh %pbcb0 %lfa %p1 %c(2,28) ), %( %rFh %RW )) %SysRequest(37,DeviceReadIdAndData,exchMassIo,8002h,6,0,2, %( %w(12) %pbcb0 %lfa %p1 %c(2,28) ), %( %noRouting )) %SysRequest(38,Format,exchFilSys2,0003h,6,1,1, %( %w(12) %pbcb0 %lfa %p1 %c(2,28) ), %( %rFh %RW )) %SysRequest(39,DeviceReadID,exchMassIo,8004h,6,0,2, %( %w(12) %pbcb0 %lfa %p1 %c(2,28) ), %( %noRouting )) %SysRequest(40,AllocExch,exchResex,0D00h,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(41,DeallocExch,exchResex,0D01h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(42,AllocMemorySL,exchMem,1,6,0,1, %( %w(12) %p0 %c(4,22) ), %( %noRouting )) %SysRequest(43,DeallocMemorySL,exchMem,2,6,0,0, %( %p(14) %w(12) ), %( %noRouting )) %SysRequest(44,AllocMemoryLL,exchMem,3,6,0,1, %( %w(12) %p0 %c(4,22) ), %( %noRouting )) %SysRequest(45,DeallocMemoryLL,exchMem,4,6,0,0, %( %p(14) %w(12) ), %( %noRouting )) %SysRequest(46,AllocAllMemorySL,exchMem,5,6,0,2, %( %p0 %p1 %c(2,22) %c(4,28) ), %( %noRouting )) %SysRequest(47,ResetMemoryLL,exchMem,6,0,0,0, %( %none ), %( %noRouting )) %SysRequest(48,QueryMemAvail,exchMem,7,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(49,OpenRTClock,exchKbdRes,0300h,6,1,0, %( %p0 %c(12,22) ), %( %noRouting )) %SysRequest(50,CloseRTClock,exchKbdRes,0400h,6,1,0, %( %p0 %c(12,22) ), %( %noRouting )) %SysRequest(51,SetDateTime,exchFilSys3,0201h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(52,Beep,exchKbdRes,0100h,0,0,0, %( %none ), %( %noRouting )) %SysRequest(53,ReadKbd,exchSysIn,0001h,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(54,ReadKbdDirect,exchKbd,0001h,6,0,1, %( %w(12) %p0 %c(1,22) ), %( %noRouting )) %SysRequest(55,QueryKbdLEDs,exchKbd,0003h,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(56,SetKbdLED,exchKbd,0004h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(57,SetKbdUnencodedMode,exchSysIn,0005h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(58,QueryKbdState,exchSysIn,0006h,6,0,1, %( %p0 %c(4,22) ), %( %noRouting )) %SysRequest(59,S d,exchKbd,0000h,2,0,0, %( %w(12) ), %( %noRouting )) ; *2 %SysRequest(71,ResetSysIn,exchSysIn,0000h,2,0,0, %( %w(12) ), %( %noRouting )) ; *2 %SysRequest(72,ResetAgent,exchAgent,0000h,2,0,0, %( %w(12) ), %( %noRouting )) ; *2 %SysRequest(73,FileSystemTermination,exchFilSys3,000Dh,2,0,0, %( %none ), %( %noRouting )) %SysRequest(74,ResetVideo,exchVideo,0C00h,6,0,1, %( %b(12) %b(13) %b(14) %b(15) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(75,InitVidFrame,exchVideo,0C01h,10,0,0, %( %b(12) %b(13) %b(14) %b(15) %b(16) %b(17) %b(18) %b(19) %b(20) %b(21) ), %( %noRouting )) %SysRequest(76,InitCharMap,exchVideo,0C02h,6,0,1, %( %pbcb0 ), %( %noRouting )) %SysRequest(77,SetScreenVidAttr,exchVideo,0B01h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(78,CloseISAM,exchISAM,8400h,2,0,1, %( %w(12) %p(14) %c(4,18) ), %( %rFh %closeFh )) %SysRequest(79,CreateISAM,exchISAM,0001h,0,5,1, %( %p(12) %w(16) %p(18) %w(22) %p(24) %w(28) %p(30) %w(34) %p(36) %w(40) %p(42) %c(4,46) ), %( %FileSpec2 %SpecPW )) %SysRequest(80,DeleteISAM,exchISAM,8002h,2,0,1, %( %w(12) %p(14) %c(4,18) ), %( %rFh %closeFh )) %SysRequest(81,DeleteISAMRecord,exchISAM,0D803h,6,0,1, %( %w(12) %p(14) %p(18) %c(4,22) ), %( %rFh )) %SysRequest(82,GetISAMRecords,exchISAM,0C004h,4,0,3, %( %w(12) %b(14) %p(16) %w(20) %p(22) %c(2,26) %p(28) %c(4,32) ), %( %rFh )) %SysRequest(83,LockISAM,exchISAM,0EFFFh,2,1,1, %( %w(12) %p(14) %w(18) %p(20) %c(4,24) ), %( %noRouting )) %SysRequest(84,ModifyISAMRecord,exchISAM,0D805h,6,1,1, %( %w(12) %p(14) %p(18) %w(22) %p(24) %c(4,28) ), %( %rFh )) %SysRequest(85,OpenISAM,exchISAM,0006h,4,2,2, %( %p(28) %c(2,32) %p(16) %w(20) %p(22) %w(26) %w(12) %w(14) %p(34) %c(4,38) ), %( %FileSpec %SpecPW %openFh %CloseAtTermination )) %SysRequest(86,ReadISAMRecordByUri,exchISAM,0C007h,6,0,2, %( %w(12) %p(14) %p(18) %w(22) %p(24) %c(4,28) ), %( %rFh )) %SysRequest(87,ReadNextISAMRecord,exchISAM,0C008h,2,0,3, %( %w(12) %p(14) %w(18) %p(20) %c(4,24) %p(26) %c(4,30) ), %( %rFh )) %SysRequest(88,ReadUniqueISAMRecord,exchISAM,0C009h,4,1,3, %( %w(12) %w(14) %p(16) %w(20) %p(22) %w(26) %p(28) %c(4,32) %p(34) %c(4,38) ), %( %rFh )) %SysRequest(89,RenameISAM,exchISAM,800Ah,2,4,1, %( %w(12) %p(14) %w(18) %p(20) %w(24) %p(26) %w(30) %p(32) %w(36) %p(38) %c(4,42) ), %( %rFh %FileSpec2 %SpecPW )) %SysRequest(90,SetISAMProtection,exchISAM,800Bh,2,2,1, %( %w(12) %p(14) %w(18) %p(20) %w(24) %p(26) %c(4,30) ), %( %rFh )) %SysRequest(91,SetupISAMIterationKey,exchISAM,0EFFFh,4,1,1, %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(4,26) ), %( %noRouting )) %SysRequest(92,SetupISAMIterationPrefix,exchISAM,800Ch,4,1,1, %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(4,26) ), %( %rFh )) %SysRequest(93,SetupISAMIterationRange,exchISAM,0EFFFh,6,2,1, %( %w(12) %w(14) %p(18) %w(22) %b(16) %p(24) %w(28) %b(17) %p(30) %c(4,34) ), %( %noRouting )) %SysRequest(94,StoreISAMRecord,exchISAM,0D80Dh,2,1,2, %( %w(12) %p(14) %w(18) %p(20) %c(4,24) %p(26) %c(4,30) ), %( %rFh )) %SysRequest(95,UnlockISAM,exchISAM,0EFFFh,0,0,1, %( %p(12) %c(4,16) ), %( %noRouting )) %SysRequest(96,PurgeISAMUser,exchISAM,000Eh,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(97,OpenFileLL,exchFilSys1,0001h,6,2,1, %( %c(2,34) %p2 %pbcb0 %pbcb1 %w(14) ), %( %FileSpec %SpecPW %openFh )) %SysRequest(98,ConvertToSys,exchUser,21,0,0,0, %( %none), %( %none)) %SysRequest(99,ServeRq,exchResex,0D0Dh,4,0,0, %( %w(12) %w(14) ), %( %none)) %SysRequest(100,GetClusterStatus,exchAgent,0000h,6,0,1, %( %w(12) %pbcb0), %( %noRouting )) %SysRequest(101,SetCommISR,exchCommLine,0303h,22,0,0, %( %w(12) %p(14) %p(18) %p(22) %p(26) %p(30)), %( %noRouting )) %SysRequest(102,ResetCommISR,exchCommLine,0305h,2,0,0, %( %w(12)), %( %noRouting )) %SysRequest(103,KbAttn3270,exch3270,0000h,6,2,0, %( %c(1,22) %p(18) %p(24) %w(28)), %( %noRouting )) %SysRequest(104,ScreenRead3270,exch3270,0001h,6,2,0, %( %c(1,22) %p(18) %p(24) %w(28)),   eISAMRecordHold,exchISAM,0F009h,4,1,3, %( %w(12) %w(14) %p(16) %w(20) %p(22) %w(26) %p(28) %c(4,32) %p(34) %c(4,38) ), %( %rFh )) %SysRequest(134,ReleaseISAMRecord,exchISAM,0D410h,6,0,1, %( %w(12) %p(14) %p(18) %c(4,22) ), %( %rFh )) %SysRequest(135,SetupISAMIteration,exchISAM,0EFFFh,4,1,1, %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(4,26) ), %( %noRouting )) %SysRequest(136,StartISAMTransaction,exchISAM,0EFFFh,4,1,1, %( %b(12) %w(14) %p(16) %w(20) %p(22) %c(4,26) ), %( %noRouting )) %SysRequest(137,AddQueueEntry,exchQueMgr,0000h,6,3,0, %( %p(18) %w(22) %b(12) %b(13) %w(14) %p(24) %w(28) %p(30) %c(4,34) %w(16) ), %( %DevSpec )) %SysRequest(138,RemoveKeyedQueueEntry,exchQueMgr,0001h,4,3,0, %( %p(16) %w(20) %p(22) %w(26) %w(12) %p(28) %w(32) %w(14) ), %( %DevSpec )) %SysRequest(139,ReadNextQueueEntry,exchQueMgr,0002h,4,1,2, %( %p(16) %w(20) %p(12) %p(22) %w(26) %p(28) %w(32) ), %( %DevSpec )) %SysRequest(140,ReadKeyedQueueEntry,exchQueMgr,0003h,4,%( %noRouting )) %SysRequest(105,StatusRead3270,exch3270,0002h,6,2,0, %( %c(1,22) %p(18) %p(24) %w(28)), %( %noRouting )) %SysRequest(106,ReadyForCmd3270,exch3270,0003h,6,1,1, %( %c(1,22) %p(18) %p(24) %w(28)), %( %noRouting )) %SysRequest(107,StartEm3270,exch3270,0004h,6,1,1, %( %c(1,22) %p(18) %p(24) %w(28)), %( %noRouting )) %SysRequest(108,StopEm3270,exch3270,0005h,2,0,0, %( %w(12)), %( %noRouting )) %SysRequest(109,CancelRq3270,exch3270,0006h,6,1,0, %( %c(1,22) %p(18)), %( %noRouting )) %SysRequest(110,ReportStatus3270,exch3270,0007h,6,1,1, %( %c(1,22) %p(18) %p(24) %w(28)), %( %noRouting )) %SysRequest(111,SetVerifyCount,exchNotInstalled,0h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(112,FileSystemAbort,exchFilSys3,000Eh,2,0,0, %( %none ), %( %noRouting )) %SysRequest(113,QuerySpooler,exchSplrOld,0000h,0,0,0, %( %none ), %( %noRouting )) %SysRequest(114,AddFileSpooler,exchSplrOld,0000h,4,4,0, %( %p(16) %w(20) %p(22) %w(26) %p(28) %w(32) %p(34) %w(38) %b(12) %b(13) %b(14) %b(15) ), %( %noRouting )) %SysRequest(115,DelFileSpooler,exchSplrOld,0000h,0,2,0, %( %p(12) %w(16) %p(18) %w(22) ), %( %noRouting )) %SysRequest(116,PausePrinter,exchSplrOld,0000h,0,1,0, %( %p(12) %w(16) ), %( %noRouting )) %SysRequest(117,RestartPrinter,exchSplrOld,0000h,2,1,0, %( %p(14) %w(18) %w(12) ), %( %noRouting )) %SysRequest(118,CancelPrint,exchSplrOld,0000h,0,1,0, %( %p(12) %w(16) ), %( %noRouting )) %SysRequest(119,GetSpoolerStatus,exchSplrOld,0004h,2,1,1, %( %p(14) %w(18) %w(12) %p(20) %w(24) ), %( %noRouting )) %SysRequest(120,GetNxtFilePrt,exchSplrOld,0000h,0,1,1, %( %p(12) %w(16) %p(18) %w(22) ), %( %noRouting )) %SysRequest(121,SetLpISR,exchResex,0D10h,6,0,0, %( %p(14) %w(12) ),  %( %noRouting )) %SysRequest(122,DisableCluster,exchSrpAgent,0,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(123,GetRunFileHdr,exchResex,0E00h,6,0,1, %( %fh %pbcb0 ), %( %rFh )) %SysRequest(124,QueryDcb,exchFilSys1,0805h,6,1,1, %( %pbcb0 %pbcb1), %( %DevSpec )) %SysRequest(125,WriteLog,exchResex,0D12h,6,1,0, %( %pbcb0), %( %noRouting )) %SysRequest(126,SetCommISRRaw,exchCommLine,0304h,30,0,0, %( %w(12) %p(14) %p(18) %p(22) %p(26) %p(30) %w(34) %w(36) %w(38) %w(40)), %( %noRouting )) %SysRequest(127,PurgeISAMTransaction,exchISAM,0EFFFh,0,0,1, %( %p(12) %c(4,16) ), %( %noRouting )) %SysRequest(128,EndISAMTransaction,exchISAM,0EFFFh,0,0,1, %( %p(12) %c(4,16) ), %( %noRouting )) %SysRequest(129,GetISAMRecordsHold,exchISAM,0F004h,4,0,3, %( %w(12) %b(14) %p(16) %w(20) %p(22) %c(2,26) %p(28) %c(4,32) ), %( %rFh )) %SysRequest(130,HoldISAMRecord,exchISAM,0D00Fh,6,0,1, %( %w(12) %p(14) %p(18) %c(4,22) ), %( %rFh )) %SysRequest(131,ReadISAMRecordByUriHold,exchISAM,0F007h,6,0,2, %( %w(12) %p(14) %p(18) %w(22) %p(24) %c(4,28) ), %( %rFh )) %SysRequest(132,ReadNextISAMRecordHold,exchISAM,0F008h,2,0,3, %( %w(12) %p(14) %w(18) %p(20) %c(4,24) %p(26) %c(4,30) ), %( %rFh )) %SysRequest(133,ReadUniqu 3,2, %( %p(16) %w(20) %p(22) %w(26) %w(12) %p(28) %w(32) %w(14) %p(34) %w(38) %p(40) %w(44) ), %( %DevSpec )) %SysRequest(141,MarkNextQueueEntry,exchQueMgr,0004h,2,1,2, %( %p(14) %w(18) %b(12) %p(20) %w(24) %p(26) %w(30) ), %( %DevSpec )) %SysRequest(142,MarkKeyedQueueEntry,exchQueMgr,0005h,4,3,2, %( %p(16) %w(20) %p(22) %w(26) %w(12) %p(28) %w(32) %w(14) %p(34) %w(38) %p(40) %w(44) ), %( %DevSpec )) %SysRequest(143,RemoveMarkedQueueEntry,exchQueMgr,0006h,4,1,0, %( %p(16) %w(20) %p(12) ), %( %DevSpec )) %SysRequest(144,UnMarkQueueEntry,exchQueMgr,0007h,4,1,0, %( %p(16) %w(20) %p(12) ), %( %DevSpec )) %SysRequest(145,ReWriteMarkedQueueEntry,exchQueMgr,0008h,4,2,0, %( %p(16) %w(20) %p(12) %p(22) %w(26) ), %( %DevSpec )) %SysRequest(146,EstablishQueueServer,exchQueMgr,0009h,4,1,0, %( %p(16) %w(20) %w(12) %b(14) ), %( %DevSpec )) %SysRequest(147,TerminateQueueServer,exchQueMgr,000Ah,0,1,0, %( %p(12) %w(16) ), %( %noRouting )) %SysRequest(148,PurgeQueueServer,exchQueMgr,000Bh,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(149,SignoffRJE,exchRJE,0000h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(150,SignonRJE,exchRJE,0000h,0,2,0,  %( %p(12) %w(16) %p(18) %w(22) ), %( %noRouting )) %SysRequest(151,StatusRJE,exchRJE,0000h,0,0,2, %( %p(12) %c(2,16) %p(18) %w(22) ), %( %noRouting )) %SysRequest(152,AcceptCommCall,exchCommSer,0000h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(153,CloseAllCommLines,exchCommSer,0001h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(154,CloseCommLine,exchCommSer,0002h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(155,DialComm,exchCommSer,0003h,2,1,0, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(156,DisconnectComm,exchCommSer,0004h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(157,FlushCommBuffer,exchCommSer,0005h,4,0,0, %( %w(12) %b(14) ), %( %noRouting )) %SysRequest(158,GetCommParameters,exchCommSer,0006h,2,0,1, %( %w(12) %p(14) %c(20,18) ), %( %noRouting )) %SysRequest(159,OpenCommLine,exchCommSer,0007h,4,2,1, %( %b(12) %p(16) %w(20) %p(22) %w(26) %w(14) %p(28) %c(2,32) ), %( %noRouting )) %SysRequest(160,ReadComm,exchCommSer,0008h,4,0,2, %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(2,26) ), %( %noRouting )) %SysRequest(161,SetCommParameters,exchCommSer,0009h,2,1,0, %( %w(12) %p(14) %c(20,18) ), %( %noRouting )) %SysRequest(162,WriteComm,exchCommSer,000Ah,4,1,1,  %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(2,26) ), %( %noRouting )) %SysRequest(163,BreakComm,exchCommSer,000Bh,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(164,ResetQueMgr,exchQueMgr,0000h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(165,NotifyNextIncomingCall,exchX25,0,8,1,3, %( %w(12) %p(38) %c(2,42) %p(26) %w(30) %p(32) %c(2,36) %p(20) %w(24) %w(14) %w(16) %w(18) ), %( %noRouting )) %SysRequest(166,AcceptX25Call,exchX25,0,6,2,0, %( %w(12) %p(18) %w(22) %p(24) %w(28) %w(16) ), %( %noRouting )) %SysRequest(167,InitiateX25Call,exchX25,0,6,3,3, %( %w(12) %p(36) %c(2,40) %p(42) %w(46) %p(48) %c(2,52) %p(30) %w(34) %p(18) %w(22) %p(24) %w(28) %w(14) ), %( %noRouting )) %SysRequest(168,ClearX25Call,exchX25,0,6,1,0, %( %w(12) %w(14) %p(18) %w(22) ), %( %noRouting )) %SysRequest(169,PurgeX25User,exchX25,0,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(170,ReadX25Packet,exchX25,0,6,0,3, %( %w(12) %p(18) %w(22) %p(24) %c(2,28) %p(30) %c(1,34) %w(14) ), %( %noRouting )) %SysRequest(171,WriteX25Packet,exchX25,0,6,1,0, %( %w(12) %w(14) %p(18) %w(22) ), %( %noRouting )) %SysRequest(172,WriteX25Interrupt,exchX25,0,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(173,ResetX25Call,exchX25,0,2,0,0, %( %w(12) %w(14) ), %( %noRouting )) %SysRequest(174,QueryX25Status,exchX25,0,8,0,2, %( %w(12) %p(20) %w(24) %b(14) %b(15) %w(16) %w(18) %p(26) %c(1,30) ), %( %noRouting )) %SysRequest(175,ConnectX25Permanent,exchX  oRouting )) %SysRequest(204,FinishISAMCommit,exchISAM,0013h,0,1,1, %( %p(12) %w(16) %p(18) %c(4,22) ), %( %DevSpec )) %SysRequest(205,HoldISAMDataSet,exchISAM,0D014h,4,0,1, %( %w(12) %b(14) %p(16) %c(4,20) ), %( %rFh )) %SysRequest(206,ReleaseISAMDataSet,exchISAM,0D415h,2,0,1, %( %w(12) %p(14) %c(4,18) ), %( %rFh )) %SysRequest(207,RollbackISAMTransaction,exchISAM,0016h,0,1,1, %( %p(12) %w(16) %p(18) %c(4,22) ), %( %DevSpec )) %SysRequest(208,SetISAMTransactionParams,exchISAM,0017h,0,2,1, %( %p(12) %w(16) %p(18) %w(22) %p(24) %c(4,28)), %( %DevSpec )) %SysRequest(209,StartISAMCommit,exchISAM,0018h,0,2,1, %( %p(12) %w(16) %p(18) %w(22) %p(24) %c(4,28) ), %( %DevSpec )) %SysRequest(210,SetupISAMIterationLimits,exchISAM,8019h,6,2,1, %( %w(12) %w(14) %b(16) %p(18) %w(22) %p(24) %w(28) %p(30) %c(4,34) ), %( %rFh )) %SysRequest(211,BeginISAMTransaction,exchISAM,001Ah,0,1,2, %( %p(12) %w(16) %p(18) %c(7,22) %p(24) %c(4,28) ), %( %DevSpec )) %SysRequest(25,0,2,0,1, %( %w(12) %p(14) %c(2,18) ), %( %noRouting )) %SysRequest(176,DeletePartition,exchUser,23,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(177,GetPartitionHandle,exchTask,0F02h,0,1,1, %( %p(12) %w(16) %p(18) %c(2,22) ),  %( %noRouting )) %SysRequest(178,LoadPrimaryTask,exchTerm,0100h,6,2,0, %( %w(12) %p(18) %w(22) %p(24) %w(28) %w(14) ), %( %noRouting )) %SysRequest(179,TerminatePartition,exchTask,0F03h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(180,VacatePartition,exchTerm,0002h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(181,CreatePartition,exchUser,22,6,1,1, %( %p(18) %w(22) %w(12) %b(14) %p(24) %c(2,28) ), %( %noRouting )) %SysRequest(182,SetPartitionLock,exchTask,0F04h,2,0,0, %( %b(12) ), %( %noRouting )) %SysRequest(183,SetPartitionExch,exchTask,0F05h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(184,GetPartitionExch,exchTask,0F06h,2,0,1, %( %w(12) %p(14) %c(2,18) ), %( %noRouting )) %SysRequest(185,GetPartitionStatus,exchTask,0F07h,4,0,1, %( %w(12) %w(14) %p(16) %w(20) ), %( %noRouting )) %SysRequest(186,SetExitRunFile,exchTask,0D09h,6,2,0, %( %p(18) %w(22) %p(24) %w(28) %w(12) ), %( %noRouting )) %SysRequest(187,QueryExitRunFile,exchTask,0D0Ah,6,0,3, %( %p(18) %w(22) %p(24) %w(28) %p(30) %c(2,34) ), %( %noRouting )) %SysRequest(188,ConfigureSpooler, exchSplr,0000h,6,3,0, %( %b(12) %pbcb0 %pbcb1 %pbcb2 %b(13) %b(14) ), %( %FileSpecP2S2 )) %SysRequest(189,SpoolerPassword,exchSplr,0001h,6,2,0, %( %pbcb0 %pbcb1 ), %( %noRouting )) %SysRequest(190,OpenTape,exchTape,0,6,1,1, %( %pbcb0 %b(12) %b(13) %b(14) %w(16) %p1 %c(2,28) ), %( %DevSpec %openFh %CloseAtTermination )) %SysRequest(191,ReadTapeRecords,exchTape,1,6,0,3, %( %fh %w(14) %pbcb0 %p1 %c(2,28) %p2 %c(2,34) ), %( %rFh )) %SysRequest(192,WriteTapeRecords,exchTape,2,6,1,2, %( %fh %w(14) %pbcb0 %p1 %c(2,28) %p2 %c(2,34) ), %( %rFh )) %SysRequest(193,TapeOperation,exchTape,3,6,0,0, %( %fh %b(14) %b(15) %w(16) ), %( %rFh )) %SysRequest(194,CloseTape,exchTape,4,2,0,0, %( %fh ), %( %rFh %CloseFh )) %SysRequest(195,PurgeTapeUser,exchTape,5,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(196,TapeStatus,exchTape,6,6,0,1, %( %fh %p0 %c(2,22) ), %( %rFh )) %SysRequest(197,ResetSplr,exchSplr,0000h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(198,ModifyISAMRecordByKey,exchISAM,0F811h,4,1,2, %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(4,26) %p(28) %c(4,32) ), %( %rFh )) %SysRequest(199,DeleteISAMRecordByKey,exchISAM,0F812h,4,1,2, %( %w(12) %w(14) %p(16) %w(20) %p(22) %c(4,26) %p(28) %c(4,32) ), %( %rFh )) %SysRequest(200,LogRemote,exchLog,0D11h,6,2,0, %( %pbcb0 %pbcb1 ), %( %noRouting )) %SysRequest(201,VacateParCleanup,exchMaster,0000h,0,0,0, %( %none), %( %noRouting )) %SysRequest(202,GetWsUserName,exchFilSys4,0702h,6,0,1, %( %w(12) %pbcb0 ), %( %noRouting )) %SysRequest(203,SetWsUserName,exchFilSys4,0703h,6,1,0, %( %pbcb0 ), %( %n 212,DbResourceRequest,exchDBMS,0FFFFh,10,3,3, %( ), %( %DevSpec %openFh %CloseAtTermination )) %SysRequest(213,DbCloseRequest,exchDBMS,0FFFFh,10,3,3, %( ), %( %rFh %closeFh )) %SysRequest(214,DbHandleRequest,exchDBMS,0FFFFh,10,3,3, %( ), %( %rFh )) %SysRequest(215,ChangeOpenMode,exchMassIo,0006h,6,1,0, %( %fh %pbcb0 %w(14) ), %( %rFh %SpecPW )) %SysRequest(216,GetDirStatus,exchFilSys1,0007h,6,2,1, %( %pbcb0 %pbcb1 %w(12) %pbcb2 ), %( %DirSpec %SpecPW )) %SysRequest(217,SetDirStatus,exchFilSys1,0008h,6,3,0, %( %pbcb0 %pbcb1 %w(12) %pbcb2 ), %( %DirSpec %SpecPW )) %SysRequest(218,ChangeUserNumQmg,exchQueMgr,0000h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(219,ChangeUserNumFs,exchChgUsrN,0013h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(220,ReadSNAPIU,exchSNA,0,6,0,4, %( %w(12) %w(14) %w(16) %p(18) %w(22) %p(24) %w(28) %p(30) %w(34) %p(36) %w(40) ), %( %rFh )) %SysRequest(221,WriteSNAPIU,exchSNA,0,2,1,0, %( %w(12) %p(14) %w(18) ), %( %rFh )) %SysRequest(222,XWriteSNAPIU,exchSNA,0,2,1,0, %( %w(12) %p(14) %w(18) ), %( %rFh )) %SysRequest(223,AttachLu,exchSNA,0,4,0,1, %( %w(12) %p(16) %c(2,20) %b(14) ), %( %noRouting )) %SysRequest(224,InitiateSNASession,exchSNA,0,2,5,0, %( %w(12) %p(14) %w(18) %p(20) %w(24) %p(26) %w(30) %p(32) %w(36) %p(38) %w(42) ), %( %rFh )) %SysRequest(225,NotifyNextIncomingBind,exchSNA,0,4,0,2, %( %w(12) %w(14) %p(16) %w(20) %p(22) %w(26) ), %( %rFh )) %SysRequest(226,TerminateSNASession,exchSNA,0,2,0,0, %( %w(12) ), %( %rFh )) %SysRequest(227,AcceptSNASession,exchSNA,0,2,1,0, %( %w(12) %p(14) %w(18) ), %( %rFh )) %SysRequest(228,RejectSNASession,exchSNA,0,2,1,0, %( %w(12) %p(14) %w(18) ), %( %rFh )) %SysRequest(229,PurgeSNAUser,exchSNA,0,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(230,CloseSNASession,exchSNA,0,2,1,0, %( %w(12) %p(14) %w(18) ), %( %rFh )) %SysRequest(231,DetachLu,exchSNA,0,2,0,0, %( %w(12) ), %( %rFh %CloseFh)) %SysRequest(232,QuerySNAStatus,exchSNA,0,8,0,2, %( %b(14) %w(16) %p(20) %w(24) %p(26) %c(1,30) ), %( %noRouting )) %SysRequest(233,TerminateSNAUser,exchSNA,0,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(234,AcknowledgeMailReceipt,exchMailSer,0,6,1,0, %( %w(12) %p(18) %c(12,22) %w(14) %w(16) ), %( %rFh )) %SysRequest(235,CheckForMail,exchMailSer,1,4,1,2, %( %p(12) %p(16) %w(20) %p(22) %c(2,26) %p(28) %c(2,32) ), %( %DevSpec )) %SysRequest(236,ConfigureMail,exchMailSer,2,4,2,0, %( %w(12) %w(14) %p(16) %w(20) %p(22) %w(26) ), %( %rFh )) %SysRequest(237,ConnectNextMailCenter,exchMailSer,3,2,0,2, %( %w(12) %p(14) %c(2,18) %p(20) %w(24) ), %( %rFh %OpenFh %CloseAtTermination)) %SysRequest(238,EstablishMailConnection,exchMailSer,4,0,2,2, %( %p(12) %w(16) %p(18) %w(22) %p(24) %c(2,28) %p(30) %w(34) ), %( %DevSpec %OpenFh %CloseAtTermination)) %SysRequest(239,PurgeMailUser,exchMailSer,5,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(240,QueryMailConfiguration,exchMailSer,6,4,2,2, %( %w(12) %w(14) %p(16) %w(20) %p(22) %w(26) %p(28) %w(32) %p(34) %c(2,38) ), %( %rFh )) %SysRequest(241,QueryMailStatus,exchMailSer,7,6,0,2, %( %w(12) %w(14) %w(16) %p(18) %w(22) %p(24) %c(2,28) ), %( %rFh )) %SysRequest(242,QueryMailUniqueId,exchMailSer,8,2,0,1, %( %w(12) %p(14) %c(4,18) ), %( %rFh )) %SysRequest(243,QueryServerForUser,exchMailSer,9,0,2,1, %( %p(12) %w(16) %p(18) %w(22) %p(24) %c(2,28) ), %( %DevSpec )) %SysRequest(244,ReceiveMail,exchMailSer,10,2,0,3, %( %w(12) %p(14) %w(18) %p(20) %c(2,24) %p(26) %c(12,30) ), %( %rFh )) %SysRequest(245,ResetMailServer,exchMailSer,11,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(246,SendMail,exchMailSer,12,4,2,1, %( %w(12) %p(16) %w(20) %p(22) %w(26) %p(28) %c(12,32) %w(14) ), %( %rFh )) %SysRequest(247,SignoffMailUser,exchMailSer,13,4,1,0, %( %p(16) %w(20) %p(12) ), %( %DevSpec )) %SysRequest(248,TerminateMailConnection,exchMailSer,14,2,0,0, %( %w(12) ), %( %rF  %p0 %c(4,22) ), %( %noRouting )) %SysRequest(279,ExpandAreaSL,exchMem,9,6,0,1, %( %w(12) %w(14) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(280,ExpandAreaLL,exchMem,10,6,0,1, %( %w(12) %w(14) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(281,ShrinkAreaSL,exchMem,11,6,0,0, %( %p(14) %w(12) ), %( %noRouting )) %SysRequest(282,ShrinkAreaLL,exchMem,12,6,0,0, %( %p(14) %w(12) ), %( %noRouting )) %SysRequest(283,QueryBigMemAvail,exchMem,13,6,0,1, %( %p0 %c(4,22) ), %( %noRouting )) %SysRequest(284,CreateAlias,exchSched,14,6,0,1, %( %p(14) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(285,SetSegmentAccess,exchSched,0,6,0,0, %( %w(12) %b(14) ), %( %noRouting )) %SysRequest(286,SetColorData,exchVideo,0C04h,0,2,2, %( %p(12) %w(16) %pbcb0 %pbcb1 %pbcb2 ), %( %noRouting )) %SysRequest(287,ProgramColorMapper,exchNotPresent,0,0,2,2, %( %p(12) %w(16) %pbcb0 %pbcb1 %pbcb2 ), %( %noRouting )) %SysRequest(288,SetCommISRRawSFN,exchCommLine,0304h,30,0,0, %( %w(12) %p(14) %p(18) h %closeFh )) %SysRequest(249,ValidateMail,exchMailSer,15,2,2,2, %( %w(12) %p(14) %w(18) %p(20) %w(24) %p(26) %c(1,30) %p(32) %c(2,36) ), %( %rFh )) %SysRequest(250,SetMailAgentStatus,exchMailSer,16,2,1,0, %( %w(12) %p(14) %w(18) ), %( %rFh )) %SysRequest(251,PurgeMailUniqueId,exchMailSer,17,2,0,0, %( %none), %( %noRouting )) %SysRequest(252,SetNode,exchResex,0D16h,6,1,0, %( %pbcb0 ), %( %noRouting )) %SysRequest(253,ExpandSpec,exchFilSys1,0806h,6,2,1, %( %pbcb0 %pbcb1 %pbcb2 %fh ), %( %NoRouting )) %SysRequest(254,QueryExchange,exchResex,0D18h,6,0,1, %( %fh %p0 %c(2,22) ), %( %NoRouting )) %SysRequest(255,SetVideoTimeout,exchKbd,000Bh,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(256,ReadActionKbd,exchKbd,000Ch,6,0,1, %( %b(12) %p0 %c(1,22) ), %( %NoRouting )) %SysRequest(257,ReadKbdStatus,exchKbd,000Dh,6,0,2, %( %w(12) %p0 %c(2,22) %p1 %c(1,28) ), %( %NoRouting )) %SysRequest(258,NotifyCM,exchNotPresent,0,6,1,0, %( %w(12) %pbcb0 ), %( %NoRouting )) %SysRequest(259,ChangeUserNumMail,exchMailSer,18,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(260,QuietMailUser,exchMailSer,19,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(261,OSVersion,exchKbdRes,0500h,0,0,1, %( %p(12) %c(2,16) ),  %( %NoRouting )) %SysRequest(262,LoadInterActiveTask,exchTerm,0100h,6,2,0, %( %w(12) %p(18) %w(22) %p(24) %w(28) %w(14) %w(16)), %( %noRouting )) %SysRequest(263,TerminateISAMServer,exchISAM,001Bh,0,0,2, %( %p(12) %c(2,16) %p(18) %c(4,22)), %( %noRouting )) %SysRequest(264,MapXBusWindow,exchResex,0D1Ah,6,0,2, %( %b(12) %b(13) %p(18) %c(4,22) %w(14) %p(24) %c(2,28) %w(16)), %( %noRouting )) %SysRequest(265,QuietKbdForSwap,exchKbd,0000h,2,0,0, %( %w(12) ), %( %noRouting )) ; *2 %SysRequest(266,Purge3270Em,exchNotPresent,0000h,2,0,0, %( ), %( %noRouting )) %SysRequest(267,PurgeX25,exchNotPresent,0000h,2,0,0, %( ), %( %noRouting )) ;*2 %SysRequest(268,SetTrapHandler,exchResex,0D0Bh,12,0,0, %( %w(12) %p(14) %c(0FFh, 22) ), %( %noRouting )) %SysRequest(269,QueryNodeForMailUser,exchMailSer,20,0,2,2, %( %p(12) %w(16) %p(18) %w(22) %p(24) %w(28) %p(30) %c(2,34) ), %( %DevSpec )) %SysRequest(270,(CtNetTermination),exchNotInstalled,0000h,2,0,0,  %( %none ), %( %noRouting )) %SysRequest(271,QueryRequestInfo,exchResex,0D18h,6,0,1, %( %fh %pbcb0 ), %( %NoRouting )) %SysRequest(272,GetUserStatus,exchResex,0700h,6,0,1, %( %fh %pbcb0 ), %( %noRouting )) %SysRequest(273,CMTermination,exchNotPresent,0000h,2,0,0, %( %none ), %( %noRouting )) %SysRequest(274,FilterProsTermination,exchFilterPros,0000h,2,0,0, %( %none ), %( %noRouting )) %SysRequest(275,VacatePartitionA,exchTask,0E01h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(276,VacatePartitionB,exchTask,0E02h,2,0,0, %( %w(12) ), %( %noRouting )) %SysRequest(277,SetVectorArea,exchResex,0D1Bh,6,0,1, %( %fh %w(14) %p0 %c(1,22) ), %( %noRouting )) %SysRequest(278,AllocAreaSL,exchMem,8,6,0,1, %( %w(12)  %p(22) %p(26) %p(30) %w(34) %w(36) %w(38) %w(40)), %( %noRouting )) %SysRequest(289,OpenQueue,exchQueMgr,0000h,4,2,0, %( %p(16) %w(20) %p(22) %w(26) %w(12) %w(14)), %( %noRouting )) %SysRequest(290,ResetMemorySL,exchSched,15,0,0,0, %( %none ),  %( %noRouting )) %SysRequest(291,ResetAllSegs,exchSched,16,0,0,0, %( %none ), %( %noRouting )) %SysRequest(292,FreeLargeLL,exchSched,17,0,0,0, %( %none ), %( %noRouting )) %SysRequest(293,LoadFile,exchMem,22,10,0,3, %( %fh %w(14) %w(16) %w(18) %c(0,20) %p(22) %w(26) %p(28) %w(32) %p(34) %w(38) ), %( %noRouting )) %SysRequest(294,ReOpenFile,exchFilSys1,0001h,6,2,1, %( %c(2,34) %p2 %pbcb0 %pbcb1 %w(14) ), %( %FileSpec %SpecPW %openFh %CloseAtTermination)) %SysRequest(295,SwapInContext,exchSched,22,2,0,0, %( %fh ), %( %noRouting )) %SysRequest(296,CreateUser,exchSched,22,6,1,1, %( %p(18) %w(22) %w(12) %c(4,14) %p(24) %c(2,28) %w(16) ), %( %noRouting )) %SysRequest(297,GetHandleStatus,exchFilSys1,0702h,6,1,1, %( %pbcb0 %fh %pbcb1 ), %( %DevSpec )) %SysRequest(298,unused,0,0h,0,0,0, %( ), %( %noRouting )) %SysRequest(299,AllocMemoryReal,exchMem,18,6,0,1, %( %w(12) %p0 %c(4,22) ), %( %noRouting )) %SysRequest(300,DeallocMemoryReal,exchMem,18,6,0,0, %( %p(14) %w(12) ), %( %noRouting )) %SysRequest(301,CallSourceDbgNub,exchKbd,0600h,6,1,1, %( %fh %p0 %c(2,22) %p1 %c(4,28) ), %( %noRouting )) %SysRequest(302,QueryNodeName,exchNotInstalled,0,0,0,2, %( %p(12) %w(16) %p(18) %c(2,22) ), %( %noRouting )) %SysRequest(303,ReadSwap,exchSched,22,6,0,3, %( %fh %w(16) %w(14) %pbcb0 %p1 %c(2,28) %p2 %c(2,34) ), %( %noRouting )) %SysRequest(304,WriteSwap,exchSched,22,6,1,0, %( %fh %w(16) %w(14) %pbcb0 ), %( %noRouting )) %SysRequest(305,DeactivateRunFile,exchSched,22,2,0,0, %( %fh ), %( %noRouting )) %SysRequest(306,GetMemoryInfo,exchMem,24,6,0,2, %( %pbcb0 %p1 %c(2,28) ), %( %noRouting )) %SysRequest(307,ReservedForOem,0,0,0,0,0, %( %none ), %( %noRouting )) %SysRequest(308,AllocUserNumbers,exchResex,0D80h,6,0,1, %( %fh %p0 %c(6,22) %c(0,23) ), %( %noRouting )) %SysRequest(309,DeallocUserNumbers,exchResex,0D81h,6,0,0, %( %fh ), %( %noRouting )) %SysRequest(310,Sync1,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(311,Sync2,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(312,Sync3,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(313,Sync4,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(314,Sync5,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(315,Sync6,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ),  %( %noRouting )) %SysRequest(316,Sync7,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(317,Sync8,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %SysRequest(318,DoDirectRead,exchFilSys2,0100h,6,1,2, %( %fh %pbcb0 %pbcb1 %pbcb2 %w(14) %w(16) ), %( %rFh %RW )) %SysRequest(319,DoDirectWrite,exchFilSys2,0101h,6,2,1, %( %fh %pbcb0 %pbcb1 %pbcb2 %w(14) %w(16) ), %( %rFh %RW )) %SysRequest(320,DefineLocalPageMap,exchMem,27,8,0,0, %( %p(12) %w(16) %w(18) ), %( %noRouting )) %SysRequest(321,MapXBusWindowLarge,exchResex,0D25h,6,0,3, %( %b(12) %b(13) %p(18) %w(22) %p(30) %c(2,34) %w(14) %p(24) %c(2,28) %w(16)), %( %noRouting )) %SysRequest(322,Set386TrapHandler,exchResex,0D0Bh,12,0,0, %( %w(12) %p(14) %c(255, 22) %c(255, 23) ), %( %noRouting )) %SysRequest(323,ServiceOverlayA,exchSched,28,2,1,0, %( %p(14) %c(2, 18) %c(0, 19) %w(12) ), %( %noRouting )) %SysRequest(324,ServiceOverlayB,exchSched,29,4,0,0, %( %w(14) %w(12) ), %( %noRouting )) %SysRequest(325,AllocMemoryFrameSL,exchMem,25,6,0,1, %( %w(12) %p0 %c(4,22) ), %( %noRouting )) %SysRequest(326,InitLocalPageMap,exchMem,26,4,0,0, %( %p(12) ), %( %noRouting )) %SysRequest(327,  7,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(358,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(359,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(360,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(361,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(362,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(363,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(364,GetPartitionSwapMode,exchTask,0F08h,2,0,1, %( %w(12) %p(14) %c(2,18) ), %( %noRouting )) %SysRequest(365,SetPartitionSwapMode,exchTask,0F09h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) ; Requests 366 to 390, and 392 to 393 are reserved for 3.0 requests %SysRequest(366,QueryDiskGeometry,exchNotPresent,80Ch,6,2,1, %( %illegal ), %( %noRouting )) %SysRequest(367,SetDiskGeometry,exchNotPresent,80Dh,6,3,0, %( %illegal ), %( %noRouting )) %SysRequest(LinkFile,exchFilSys1,0014h,6,2,0, %( %fh %pbcb0 %pbcb1 ), %( %rFh %FileSpec %SpecPw )) %SysRequest(328,MakeDirectory,exchFilSys1,0003h,6,3,0, %( %pbcb0 %pbcb1 %pbcb2 %w(14) %w(16) ), %( %FileSpec %SpecPW )) %SysRequest(329,RemoveDirectory,exchFilSys1,0004h,2,0,0, %( %fh ), %( %rFh %closeFh )) %SysRequest(330,ReservedForOEM,0,0h,0,0,0, %( ), %( )) %SysRequest(331,CreateBigPartition,exchUser,22,6,1,1, %( %p(18) %w(22) %w(16) %w(12) %b(14) %p(24) %c(2,28) ), %( %noRouting )) %SysRequest(332,SgFromSn,exchSched,30,6,0,1, %( %w(16) %w(14) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(333,AllocLdtSlot,exchSched,31,6,0,1, %( %p0 %c(2,22) ), %( %noRouting )) %SysRequest(334,FSCableDrop,exchFilSys1,0808h,6,0,0, %( ), %( %noRouting )) %SysRequest(335,FilterDebugInterrupts,exchResex,0D26h,6,0,0, %( %w(12) %w(14) %b(16) ), %( %noRouting )) %SysRequest(336,RemakeAliasForServer,exchSched,32,6,0,1, %( %w(16) %w(14) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(337,DeallocAliasForServer,exchSched,33,6,0,0, %( %w(16) %w(14) ), %( %noRouting )) %SysRequest(338,AllocMemoryPermanent,exchMem,34,6,0,1, %( %w(12) %p0 %c(4,22) ), %( %noRouting )) %SysRequest(339,SetDefaultTrapHandler,exchResex,0D0Bh,12,0,1, %( %w(12) %p(14) %p1 %c(0FFh, 22) %c(4,28) ), %( %noRouting )) %SysRequest(340,QueryDeviceNames,exchFilSys1,0809h,6,1,2, %( %pbcb0 %pbcb1 %p2 %c(2,34) ), %( %DevSpec )) %SysRequest(341,ShrinkPartition,exchUser,35,0,0,0, %( %none), %( %none)) %SysRequest(342,CreateExpandDownAlias,exchSched,36,6,0,1, %( %p(14) %w(12) %p0 %c(2,22) ), %( %noRouting )) %SysRequest(343,AccessSystemCall,exchMem,37,4,0,1, %( %w(12) %w(14) %p(16) %c(4,20) ), %( %noRouting )) %SysRequest(344,InstallNet,exchKbd,0700h,6,1,0, %( %fh %pbCb0 ), %(%noRouting)) %SysRequest(345,DeallocSg,exchMem,38,6,0,0, %( %w(12) %w(14)), %( %noRouting )) %SysRequest(346,QueryDeviceName,exchFilSys1,0809h,6,1,2, %( %pbcb0 %fh %pbcb1 %p2 %c(2,34) ), %( %DevSpec )) %SysRequest(347,ReadKbdDataDirect,exchKbd,0001h,6,0,1, %( %w(12) %pbcb0 ), %( %NoRouting )) %SysRequest(348,SetIBusHandler,exchKbd,0600h,6,0,0, %( %w(12) %p(14)), %( %noRouting )) %SysRequest(349,ResetIBusHandler,exchKbd,0600h,6,0,0, %( %w(12) %p(14)), %( %noRouting )) %SysRequest(350,LoadRunFile,exchTerm,0004h,6,0,2, %( %fh %w(14) %w(16) %p0 %c(4,22) %pbcb1 ), %( %noRouting )) %SysRequest(351,DeallocRunFile,exchMem,39,6,0,0, %( %w(14) %w(12)), %( %noRouting )) %SysRequest(352,SetFSConfigParams,exchFilSys1,080Ah,6,1,0, %( %pbcb0 ), %( %noRouting )) %SysRequest(353,GetSCSIInfo,exchFilSys1,080Bh,6,0,2, %( %w(12) %w(14) %w(16) %pbcb0 %p1 %c(2,28)), %( %noRouting )) %SysRequest(354,ReservePartitionMemory,exchMem,40,6,0,1, %( %w(12) %w(14) %p0 %c(2,22) ), %( %noRouting )) ; requests 355 to 363 are reserved for SCSI requests %SysRequest(355,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(356,rsvdSCSI,0,0000h,0,0,0, %( %illegal ), %( %noRouting )) %SysRequest(35 368,GetRemoteStructure,exchNotPresent,0705h,6,1,2, %( %illegal ), %( %noRouting )) %SysRequest(369,GetRemotepStructure,exchNotPresent,0706h,6,1,1, %( %illegal ), %( %noRouting )) %SysRequest(370,TerminateScsiUser,exchNotPresent,0700h,2,0,0, %( %illegal ), %( %noRouting )) %SysRequest(371,QuietScsiUserForSwap,exchNotPresent,0700h,2,0,0, %( %illegal ), %( %noRouting )) %SysRequest(372,AllocateDiskPages,exchNotPresent,0703h,6,1,1, %( %illegal ), %( %noRouting )) %SysRequest(373,LockInCache,exchNotPresent,0400h,12,0,1, %( %illegal ), %( %noRouting )) %SysRequest(374,UnLockInCache,exchNotPresent,0400h,12,0,1, %( %illegal ), %( %noRouting )) %SysRequest(375,RemoteCacheUp,exchNotPresent,080Eh,0,3,0, %( %illegal ), %( %noRouting )) %SysRequest(376,RemoteCacheOpen,exchNotPresent,0,2,4,1, %( %illegal ), %( %noRouting )) %SysRequest(377,RemoteCacheClose,exchNotPresent,8001h,4,0,0, %( %illegal ), %( %noRouting )) %SysRequest(378,RemoteCacheGetStatistics,exchNotPresent,8002h,4,0,2, %( %illegal ), %( %noRouting )) %SysRequest(379,RemoteCacheGetEntry,exchNotPresent,0C003h,8,2,1, %( %illegal ), %( %noRouting )) %SysRequest(380,RemoteCacheReleaseEntry,exchNotPresent,0C004h,14,1,0, %( %illegal ), %( %noRouting )) %SysRequest(381,RemoteCacheFlush,exchNotPresent,8005h,8,2,1, %( %illegal ), %( %noRouting )) %SysRequest(382,RemoteCacheProbe,exchNotPresent,0E006h,10,1,0, %( %illegal ), %( %noRouting )) %SysRequest(383,RemoteCacheRelease,exchNotPresent,0E007h,10,1,0, %( %illegal ), %( %noRouting )) %SysRequest(384,ResetRemoteCache,exchNotPresent,8,2,0,0, %( %illegal ), %( %noRouting )) %SysRequest(385,QuietRemoteCache,exchNotPresent,8,2,0,0, %( %illegal ), %( %noRouting )) %SysRequest(386,RemoteCacheControl,exchNotPresent,9,2,1,1, %( %illegal ), %( %noRouting )) %SysRequest(387,ScsiTargetDataReceive,exchNotPresent,0406h,6,0,5, %( %illegal ), %( %noRouting )) %SysRequest(388,ScsiTargetDataTransmit,exchNotPresent,0407h,6,1,4, %( %illegal ), %( %noRouting )) %SysRequest(389,CheckScsiTargetCdb,exchNotPresent,0504h,6,0,2, %( %illegal ), %( %noRouting )) %SysRequest(390,WaitScsiTargetCdb,exchNotPresent,0504h,6,0,2, %( %illegal ), %( %noRouting )) %SysRequest(391,GetSerialNumber,exchResex,0D27h,6,0,1, %( %w(12) %p0 %c(4,22) ), %( %noRouting )) %SysRequest(392,ConfigurationQuery,exchNotPresent,0D28h,6,1,2, %( %illegal ), %( %noRouting )) %SysRequest(393,RemoteCacheGetStatus,exchNotPresent,800Ah,4,1,1, %( %illegal ), %( %noRouting )) ; Requests 394 to 0FDFh are reserved for future expansion by ; Convergent. %Request(1000h,ChangeUserNumISAM,exchISAM,001Ch,2,0,0, %( %w(12) ), %( %noRouting )) %Request(1001h,QuietISAMUser,exchISAM,001Dh,2,0,0, %( %w(12) ), %( %noRouting )) %Request(1002h,QuietContext,exchTerm,0003h,2,0,0, %( %w(12) ), %( %noRouting )) %Request(1003h,QuietQMGR,exchQueMgr,0h,2,0,0, %( %w(12) ), %( %noRouting )) %Request(1004h,QuietSplr,exchSplr,0h,2,0,0, %( %w(12) ), %( %noRouting ))  %Request(1005h,Execfh,exchTerm,0005h,4,0,0, %( %w(12) %w(14) ), %( %noRouting )) %Request(1006h,InitCommLine,exchCommLine,0300h,6,2,1, %( %pbcb0 %pbcb1 %pbcb2 ), %( %noRouting )) %Request(1007h,ResetCommLine,exchCommLine,0301h,6,0,0, %(%w(12) ), %( %noRouting )) %Request(1008h,ChangeCommLineBaudRate,exchCommLine,0302h,6,0,0, %(%w(12) %w(14) %w(16) ), %( %noRouting )) %Request(1009h,TerminateCommLine,exchNotPresent,0000h,2,0,0, %(%w(12) ), %( %noRouting )) %Request(100Ah,ChangeUserNumCommLine,exchNotPresent,0000h,2,0,0, %(%w(12) ), %( %noRouting )) %Request(100Bh,WaitSync,exchNotInstalled,0000h,2,0,0, %(), %( %noRouting )) %Request(100Ch,NewTapeIO,exchNotInstalled,0000h,6,0,3, %(), %( %noRouting )) %Request(100Dh,NewTapeIO,exchNotInstalled,0000h,6,1,2, %(), %( %noRouting )) %Request(100Eh,ReMakeFh,exchFilSys1,000Fh,6,0,1, %( %fh %p0 %c(2,22) ), %( %rFh )) %Request(100Fh,Sync1,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1  ' pbBufferRet, sBufferRetMax, %' controlInfo2); %' %' The entry in RqLabl.Asm would be: %' %' %RqName(-1, "UserService") %' %UsrRequest(-1,DCCommand,exchNotInstalled,0000h,3,1,1, %( %illegal) %( %norouting)) %UsrRequest(-2,DCReport,exchNotInstalled,0000h,2,0,1, %( %illegal) %( %norouting)) %UsrRequest(-3,BMCommand,exchNotInstalled,000h,4,1,1, %( %illegal) %( %norouting)) %UsrRequest(-4,BMReport,exchNotInstalled,000h,2,0,1, %( %illegal) %( %norouting)) %UsrRequest(-5,BMQuery,exchNotInstalled,000h,0,0,1, %( %illegal) %( %norouting)) %UsrRequest(-6,BMClear,exchNotInstalled,000h,2,0,0, %( %none ) %( %norouting)) %UsrRequest(-7,BMPurge,exchNotInstalled,000h,2,0,0, %( %none ) %( %norouting)) %UsrRequest(-8,BMChangeUser,ExchNotInstalled,000h,2,0,0, %( %none) %( %norouting)) %UsrRequest(-9,QuietBMulti,ExchNotInstalled,000h,2,0,0, %( %none) %( %norouting)) %UsrRequest(-10,DCReserve,0,000h,0,0,0, %( %illegal) %( %noroutin010h,Sync2,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1011h,Sync3,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1012h,Sync4,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1013h,Sync5,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1014h,Sync6,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1015h,Sync7,exchNotInstalled,0,2,0,1, %( %w(12) %p(14) %w(18) ), %( %noRouting )) %Request(1016h,TerminateVideo,exchVideo,0,2,0,0, %( %w(12) ), %( %noRouting )) %Request(1017h,QuietFileSys,exchFilSys3,0FFFFh,2,0,0, %( %w(12) ), %( %noRouting )) %Request(1018h,rqDummy1018,exchNotPresent,00000h,0,0,0, %( %none ), %( %noRouting )) %Request(1019h,GoDebugger,exchNotInstalled,000Eh,6,2,1, %( %w(14) %pbcb0 %p(24) %p(30) %c(01,28) %c(01,34) ) %( %noRouting )) %Request(101Ah,RemoteTermination,exchRemoteTerm,6h,2,0,0, %(%w(12) ), %( %noRouting )) ; ; ; ; NOTES -- ; *1 ... Request number 25 (ReadDirSector) field for s2 is a ; constant 512 (200h). This is acheived by setting byte ; 35 of request block to 2,leaving byte 34 as 00h. ; *2 ... Request numbers 63,64,65,66,70,71,72,... are used ; internally by CTOS. ; ; ; Request -1 is included only as an example of a user request,and ; is "commented out". ; ; (Note that exchanges 0 to 27 are reserved for CTOS processes.) ; %UsrRequestInit %' %' %UsrRequest(-1,UserService,exchNotInstalled,0000h,6,1,1, %' %( %w(12) %w(16) %pbcb0 %pbcb1 %w(14) ), %' %( %noRouting )) %' %' where %' %' -1 is request code (0FFFFh). %' %' UserService is the name of the service. This is %'  included here for readability only and %' is not actually used for anything. %' %' exchNotInstalled is the service exchange. The exchange %' "exchNotInstalled" goes to the agent at %'  cluster workstations and is invalid at %' the master until the user system service %' does a ServeRq request. %' %' 0000H is the local service code (which the %' system service can find out with the %' QueryRequestInfo request). %' %' 6 is the number of bytes of control %' information in the request block. This %' is placed at offsets 12, 14, and 16 as %' three words by the %w()s. %' %' 1 There is one data buffer sent from %' client to service (%pbcb0). %' %' 1 There is one data buffer sent from %'  service back to client (%pbcb1). %' %' There is no routing. The call to the procedural interface %' would look something like: %' %' erc := UserService(controlInfo1,controlInfo3, %' pbDataToServer, cbDataToServer, %  g)) %' I added -11 through -17 but have them commented out because we %' do not need them for supporting comm applications. 07/22/89 AT %'%UsrRequest(-11,LoadKbdxlat,exchLoadKbdxLat,000h,2,0,0, %' %( %w(12)) %' %( %norouting)) %'%UsrRequest(-12,GetKbdID,exchLoadKbdxLat,000h,0,0,1, %' %( %p(12) %c(2,16)) %' %( %norouting )) %'%UsrRequest(-13,ReadMCR,exchLoadKbdxLat,000h,6,0,2, %' %( %w(12) %p(18) %w(22) %p(24) %c(2,28)) %' %( %norouting )) %'%UsrRequest(-14,PurgeMCR,exchLoadKbdxLat,000h,0,0,0, %' %( %none ) %' %( %norouting )) %'%UsrRequest(-15,FillBufMCR,exchLoadKbdxlat,000h,0,1,0, %' %( %w(16) %p(12) ) %' %( %norouting )) %'%UsrRequest(-16,TerminateMCR,exchLoadKbdxlat,000h,2,0,0, %' %( %w(12) ) %' %( %norouting )) %'%UsrRequest(-17,LoadKbdXlatFh,exchLoadKbdXlat,000h,2,0,0, %' %( %w(12)) %' %( %norouting )) %' I commented out -18 because I do not understand how it can possibly work. %' It is routed to the same place as # 308. 07/22/89 AT %'%UsrRequest(-18,SetDMAHandler,exchResex,0D80h,10,0,0, %' %( %w(12) %p(14) %w(18) %w(20) ), %' %( %noRouting )) EVEN ; ; The list of request codes which the CTOS termination process ; issues to quiet the process activities during subsystem ; termination (invoked with "Exit" or "Chain"). The requests ; are generated with no arguments and with request numbers as ; given to the macro. ; %TerminationRequest(70) ; ResetKbd %TerminationRequest(71) ; ResetSysIn %TerminationRequest(96) ; PurgeISAM %TerminationRequest(108) ; StopEm3270 %TerminationRequest(153) ; CloseAllCommLines %TerminationRequest(164) ; ResetQueMgr %TerminationRequest(169) ; PurgeX25User %TerminationRequest(195) ; PurgeTapeUser %TerminationRequest(197) ; ResetSplr %TerminationRequest(233) ; TerminateSNAUser %TerminationRequest(239) ; PurgeMailUser %TerminationRequest(270) ; CtNetTermination %TerminationRequest(273) ; CMTermination %TerminationRequest(274) ; Filter Process Termination %TerminationRequest(1009h) ; TerminateCommLine %TerminationRequest(1016h) ; TerminateVideo %TerminationRequest(-6) ; Request code for BMClear %TerminationRequest(-16) ; Unlink queued rq blks of a terminating user EVEN ; ; The list of request codes which the CTOS master workstation ; agent or the CtNetServer issues on behalf of cluster workstation ; when the master or the CtNetServer determines that a cluster ; workstation is not communicating with it any more. ; %WsAbortRequest(70) ;* ResetKbd %WsAbortRequest(71) ;* ResetSysIn %WsAbortRequest(96) ; PurgeISAM %WsAbortRequest(108) ; StopEm3270 %WsAbortRequest(112) ; FileSystemAbort %WsAbortRequest(148) ; PurgeQueueServer %WsAbortRequest(153) ; CloseAllCommLines %WsAbortRequest(195) ; PurgeTapeUser %WsAbortRequest(197)  ;* ResetSplr %WsAbortRequest(229) ; PurgeSNAUser %WsAbortRequest(239) ; PurgeMailUser %WsAbortRequest(251) ; PurgeMailUniqueId %WsAbortRequest(267) ; PurgeX25 %WsAbortRequest(274) ;* Filter Process %WsAbortRequest(-7) ; Request code for BMPurge EVEN ; ; The list of request codes which a Multi-Partitioned CTOS ; issues on behalf of a system service to notify other system ; services its user number is changing. These requests are ; issued when the system service does a ConvertToSys request. ; The system service's new user number is contained in a word ; at offset 4 in the request block. The system service's ; previous user number is contained in a word at offset 12 in ; the request block. ; CTOS II does not require ChangeUserNum requests. They are defined ; here for mixed cluster compatibilty (e.g. CTOS II master/CTOS I cluster). ; %ChgUserNumRequest(218) ; ChangeUserNumQmg %ChgUserNumRequest(219) ; ChangeUserNumFs %ChgUserNumRequest(259) ; ChangeUserNumMail %ChgUserNumRequest(1000h) ; ChangeUserNumISAM %ChgUserNumRequest(100Ah) ; ChangeUserNumComm %ChgUserNumRequest(-8) ; ChangeUserNumBMulti EVEN ; ; The list of request codes which the CTOS termination process ; issues to quiet the process activities before subsystem ; swa   ublic rgRqExchg, rgPrgRqExchg Public rgRcMax, rgPrgLocalServiceCode, rgPrgNetRouting Public rgSwappingRq, rgChgUserNumRq, rgTerminationRq, rgWsAbortRq Public cbTCode STACK segment word stack 'STACK' STACK ends ; For loadable requests, put first the tables that will be discarded: ; rgP's. Then put OCode, because part of it may be discardable. ; OCode contains the dividing point. ; ; Version and Tables ; Table array entries: rgWsAbortRq, rgChgUserNumRq, rgTerminationRq, ; rgSwappingRq. The second word tells InitRqEx how many bytes are in ; rgTables. rgTables segment public 'memory' DB 'J', 'F' ;Version, change here and in InitRqEx.plm cbRgTables DW 0 rgTables ends ; Array [0..16] of pointer to rgRqExchg ; DGroup group rqSeg0, rqSeg1, rqSeg2, rqSeg3, rqSeg4, rqSeg5, rqSeg6 DGroup group rqSeg7, rqSeg8, rqSeg9, rqSeg10, OCode rqSeg5 segment public 'const' rgPrgRqExchg Label Byte DD rgRqExchgSys rqSeg5 ends ; Array [0..8] of pointer to rcLookup ; rqSeg6 segment word public 'const' rgPrcLookup Labelp-out (invoked with "SuspendContext"). The requests ; are generated with one argument 'ercSwapping' and with request ; numbers as given to the macro. ; List the requests that cure the most common outstanding requests ; first. Swapping algorithm stops early when there are no more ; outstanding requests, avoiding lengthy requests like ; 'QuietISAMUser' as ISAM is rarely in use. ; %SwappingRequest(265) ; QuietKbdForSwap %SwappingRequest(274) ;* Quiet Filter Process %SwappingRequest(260) ; QuietMailUser %SwappingRequest(1001h) ; QuietISAMUser %SwappingRequest(1003h) ; QuietQMGR %SwappingRequest(1004h) ; QuietSplr %SwappingRequest(1017h) ; QuietFileSys %SwappingRequest(-9) ; QuietBMulti ; Final must be invoked after everything else. %Final END %( %norouting)) %UsrRequest(-8,BMChangeUser,ExchNotInstalled,000h,2,0,0, %( %none) %( %norouting)) %UsrRequest(-9,QuietBMulti,ExchNotInstalled,000h,2,0,0, %( %none) %( %norouting)) %UsrRequest(-10,DCReserve,0,000h,0,0,0, %( %illegal) %( %noroutin; ; COPYRIGHT 1980,1983 CONVERGENT TECHNOLOGIES, INC. ; ALL RIGHTS RESERVED ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE ; SOLELY FOR THE OPERATION OF A DESIGNATED COMPUTER FOR A ; PARTICULAR PURPOSE, AND MAY NOT BE COPIED OR OTHERWISE USED ; WITHOUT THE PRIOR WRITTEN CONSENT OF CONVERGENT TECHNOLOGIES, ; INC. TITLE TO AND OWNERSHIP OF THE PROGRAM, INCLUDING ITS ; SOURCE CODE, SHALL AT ALL TIMES REMAIN IN CONVERGENT TECHNOLOGIES. ; %Set(Level,0) %Set(counter,0) %SET(nSysRequest,0) %SET(nUsrRequest,0) %SET(nTerminationRq,0) %SET(nSwappingRq,0) %SET(nWsAbortRq,0) %SET(nChgUserNumRq,0) ; ; macro for defining termination request needed ; %*DEFINE (TerminationRequest(rc))( rgTables segment public 'memory' %IF (%nTerminationRq EQ 0) THEN ( EVEN rgTerminationRq LABEL WORD) FI DW %rc rgTables ends %SET(nTerminationRq, %nTerminationRq+1)) ; ; macro for defining abort request needed ; %*DEFINE (WsAbortRequest(rc))( rgTables segment public 'memory' %IF (%nWsAbortRq EQ 0) THEN ( rgWsAbortRq LABEL BYTE) FI DW %rc rgTables ends %SET(nWsAbortRq, %nWsAbortRq+1)) ; ; macro for defining ChgUserNum request needed ; %*DEFINE (ChgUserNumRequest(rc))( rgTables segment public 'memory' %IF (%nChgUserNumRq EQ 0) THEN ( rgChgUserNumRq LABEL BYTE) FI DW %rc rgTables ends %SET(nChgUserNumRq, %nChgUserNumRq+1)) ; ; macro for defining Swapping request needed ; %*DEFINE (SwappingRequest(rc))( rgTables segment public 'memory' %IF (%nSwappingRq EQ 0) THEN ( rgSwappingRq LABEL BYTE) FI DW %rc rgTables ends %SET(nSwappingRq, %nSwappingRq+1)) %*define(xOut(str))(%out(%str)) %define(nl)( ) public rgNetRouting, rgPrgNetRouting public rgRqExchgSys public rgSCntlInfoSys, rgNReqRespPbCbSys public rgLocalServiceCode, rgLocalServiceCodeSys, nSysRequest, rcLookupSys, rcMaxSys public rgRqExchgUsr public rgSCntlInfoUsr, rgNReqRespPbCbUsr public rgLocalServiceCodeUsr, nUsrRequest, rcLookupUsr, rcMaxUsr public nTerminationRqInit, nWsAbortRqInit, nSwappingRqInit, nChgUserNumRqInit Public rcLookUp, rgPrcLookUp, rgPrcLookUpBase P!  Byte DD RcLookUpSys rqSeg6 ends ; array [ 0..8 ] of pointers to first word of table data ; rqSeg7 segment word public 'const' rgPrcLookUpBase Label Byte DD pRgbTcodeBase ; entry for level 0 (0..FDF) rqSeg7 ends ; array [0..16] of max request codes ; rqSeg8 segment word public 'const' rgRcMax Label Byte rqSeg8 ends ; array [0..16] of pointers to local service code tables ; rqSeg9 segment word public 'const' rgPrgLocalServiceCode Label Byte DD rgLocalServiceCodeSys rqSeg9 ends ; array [0..16] of pointers to net routing code tables ; rqSeg10 segment word public 'const' rgPrgNetRouting Label Byte DD rgNetRouting rqSeg10 ends ; Put data segment with discarded segments, for loadable rq files ; data segment public 'data' dummy Label Byte data ends ; ; Format array entries ; TCode segment word public 'memory' prgbTcodeBase Label Byte TCode ends ; Offsets into the 'format' array ; OCode segment word public 'const' rcLookUp Label Byte OCode ends ; Exchange servicing a request ; rqSeg0 segment word public 'const' rgRqExchg Label Byte rqSeg0 ends ; sCntlInfo array ; rqSeg1 segment word public 'const' rqSeg1 ends ; RqPbCb array, RespPbCb array ; rqSeg2 segment word public 'const' rqSeg2 ends ; Local Service code array ; rqSeg3 segment word public 'const' rqSeg3 ends ; Net Routing arrays ; rqSeg4 segment word public 'const' rqSeg4 ends ; format macros "none", "b", "w", and "c" (basic macros) ; %*define(none)() %*define(noRouting)() %*define(illegal)(%define(varLB)(Ill)) %*define(b(loc))(%define(n)(%eval(%loc))%IF(%n + 2 GT %sRq)THEN%' (%define(sRq)(%eval(%n + 2)))FI%define(varLB)(%varLB%bLab%n)%' %define(varDB)(%varDB db %loc)%SET(nVar,%nVar+1)) %*define(w(loc))(%define(n)(%eval(%loc))%' %IF(%n + 2 GT %sRq)THEN(%define(sRq)(%eval(%n + 2)))FI%' %define(varLB)(%varLB%n)%define(varDB)(%varDB db 80h+%loc)%SET(nVar,%nVar+1)) %*define(c(val,loc))(%if(%val ne 0) then(%define(n)(%eval(%loc))%' %IF(%n + 2 GT %sRq)THEN(%define(sRq)(%eval(%n + 2)))FI%' %define(conLB)(%conLB%eval(%val)%n)%define(conDB)(%conDB db %loc,%val)%SET(nCon,%nCon+1))fi) %*Define(bLab)(b) %*Define(sep)(X) ; ; Define abreviations on above macros: ; ;fh = w(12) %*define(fh)(%IF(0EH GT %sRq)THEN(%define(sRq)(0EH))FI%' %define(varLB)(%varLB%(0CH))%' %define(varDB)(%varDB DB 8CH)%SET(nVar,%nVar+1)) %*define(lfa)(%IF(12H GT %sRq)THEN(%define(sRq)(12H))FI%' %define(varLB)(%varLB%(10H0EH))%define(varDB)(%varDB DB 90H,8EH)%SET(nVar,%nVar+2)) %*define(p0)(%IF(16H GT %sRq)THEN(%define(sRq)(16H))FI%' %define(varLB)(%varLB%(14H12H))%define(varDB)(%varDB DB 94H,92H)%SET(nVar,%nVar+2)) %*define(s0)(%w(22)) %*define(pbcb0)(%IF(18H GT %sRq)THEN(%define(sRq)(18H))FI%' %define(varLB)(%varLB%(14H12H16H))%define(varDB)(%varDB DB 94H,92H,96H)%SET(nVar,%nVar+3)) %*define(p1)(%IF(1CH GT %sRq)THEN(%define(sRq)(1CH))FI%' %define(varLB)(%varLB%(1AH18H))%define(varDB)(%varDB DB 9AH,98H)%SET(nVar,%nVar+2)) %*define(s1)(%w(28)) %*define(pbcb1)(%IF(1EH GT %sRq)THEN(%define(sRq)(1EH))FI%' %define(varLB)(%varLB%(1AH18H1CH))%define(varDB)(%varDB DB 09AH,98H,09CH)%SET(nVar,%nVar+3)) %*define(p2)(%IF(22H GT %sRq)THEN(%define(sRq)(22H))FI%' %define(varLB)(%varLB%(20H1EH))%define(varDB)(%varDB DB 0A0H,9EH)%SET(nVar,%nVar+2)) %*define(s2)(%w(34)) %*define(pbcb2)(%IF(24H GT %sRq)THEN(%define(sRq)(24H))FI%' %define(varLB)(%varLB%(20H1EH22H))%define(varDB)(%varDB DB 0A0H,9EH,0A2H)%SET(nVar,%nVar+3)) %*define(p3)(%IF(28H GT %sRq)THEN(%define(sRq)(28H))FI%' %define(varLB)(%varLB%(26H24H))%define(varDB)(%varDB DB 0A6H,0A4H)%SET(nVar,%nVar+2)) %*define(pbcb3)(%IF(2AH GT %sRq)THEN(%define(sRq)(2AH))FI%' %define(varLB)(%varLB%(26H24H28H))%define(varDB)(%varDB DB 0A6H,0A4H,0A8H)%SET(nVar,%nVar+3)) %*define(p(o))(%w(%o+2)%w(%o)) ; routing macros ; ; Set expandFileSpec and routeByNode %*define(FileSpec)(%SET(netRouting,%netRouting+3)) ; Set expandDevSpec and routeByNode %*define(DevSpec)(%SET(netRouting,%netRouting+1)) ; Set expandDirSpec and routeByNode %*define(DirSpec)(%SET(netRouting,%netRouting+2)) ; Set expand2FileSpecs and routeByNode %*define(FileSpec!  yte%' %' ',RcLookUpUsr LABEL byte%' %' ',RgNetRoutingUsr LABEL byte)%' ) %*define(UsrRequest(id,name,exchange,code,size,nReqPbCb,nRespPbCb,format,routing))(%' %' '%xOut(%id)%' %' '%nl;%name (%id)%nl %' '%define(varLB)()%' %' '%define(conLB)()%' %' '%define(varDB)()%' %' '%define(conDB)()%' %' '%define(nCon)(0)%' %' '%define(nVar)(0)%' %' '%set(sRq,12+%size+6*(%nReqPbCb+%nRespPbCb))%' %' '%set(netRouting,0)%' %' %' '%c(%size,0)%' %' '%c(%nReqPbCb,2)%' %' '%c(%nRespPbCb,3)%' %' '%format%' %' '%routing%' %' '%define(rqLabel)(T%conLB%sep%varLB)%' %' '%IF(NOT(%isdef(%rqLabel))) THEN(%NewTable)FI %' %' '%Enter6(DB %exchange,DB %size,DB %nReqPbCb %' 'DB %nRespPbCb,DW %code,%' %' 'DW offset %rqLabel - offset prgbTcodeBase,DB %netRouting)%' %' '%SET(nUsrRequest,%nUsrRequest+1)%' %' '%xOut(,)%' ) ; Enter a string into each of 6 segments, used for constructing tables -- ; %*DEFINE(Enter6(data0,data1,data2,data3,data4,data5))( rqSeg0 segment %data0 rqSeg0 ends rqSeg1 segment %data1 rqSeg1 ends rqSeg2 segment %data2)(%SET(netRouting,%netRouting+4)) ; Set expand2FileSpec specified by p2 and s2 and routeByNode %*define(FileSpecP2S2)(%SET(netRouting,%netRouting+5)) %*define(rFh)(%SET(netRouting,%netRouting+8)) %*define(openFh)(%SET(netRouting,%netRouting+40h)) %*define(closeFh)(%SET(netRouting,%netRouting+6)) %*define(CloseAtTermination)(%SET(netRouting,%netRouting+20h)) %*define(SpecPw)(%SET(netRouting,%netRouting+10h)) %*define(RW)(%SET(netRouting,%netRouting+80h)) ; ; Sys Requests -- ; %*define(SysRequestInit)(%' %' %' '%xOut(%nl Start Sys requests:%nl )%' %' %' '%Enter6(rgRqExchgSys LABEL byte%' %' ',rgSCntlInfoSys LABEL byte%' %' ',rgNReqRespPbCbSys LABEL word%' %' ',rgLocalServiceCode LABEL byte %' 'rgLocalServiceCodeSys EQU rgLocalServiceCode%' %' ',RcLookUpSys LABEL byte%' %' ',RgNetRouting LABEL byte)%' ) ; ; new table -- ; %*Define(NewTable)(TCode segment %rqLabel label byte db %sRq, %nVar %varDB db %nCon %conDB TCode ends ) ; %*define(c1xx(s,q,p))(%if(%q eq 0)then(%c10x(%s,%p))else(%c11x(%s,%q,%p))fi) %*define(c0xx(q,p))(%if(%q eq 0)then(%c00x(%p))else(%c01x(%q,%p))fi) %*define(c00x(p))(%if(%p eq 0)then(%c000)else(%c001(%p))fi) %*define(c01x(q,p))(%if(%p eq 0)then(%c010(%q))else(%c011(%q,%p))fi) %*define(c10x(s,p))(%if(%p eq 0)then(%c100(%s))else(%c101(%s,%p))fi) %*define(c11x(s,q,p))(%if(%p eq 0)then(%c110(%s,%q))else(%c111(%s,%q,%p))fi) %*define(c000)(%define(conDB)()%define(nCon)(0)%define(conLB)()) %*define(c001(p))(%define(conDB)( db 3,%p)%define(nCon)(1)%define(conLB)(3%eval(%p))) %*define(c010(q))(%define(conDB)( db 2,%q)%define(nCon)(1)%define(conLB)(2%eval(%q))) %*define(c011(q,p))(%define(conDB)( db 2,%q,3,%p)%define(nCon)(2)%define(conLB)(2%eval(%q)3%eval(%p))) %*define(c100(s))(%define(conDB)( db 0,%s)%define(nCon)(1)%define(conLB)(0%eval(%s))) %*define(c101(s,p))(%define(conDB)( db 0,%s,3,%p)%define(nCon)(2)%define(conLB)(0%eval(%s)3%eval(%p))) %*define(c110(s,q))(%define(conDB)( db 0,%s,2,%q)%define(nCon)(2)%define(conLB)(0%eval(%s)2%eval(%q))) %*define(c111(s,q,p))(%define(conDB)( db 0,%s,2,%q,3,%p)%define(nCon)(3)%define(conLB)(0%eval(%s)2%eval(%q)3%eval(%p))) %*define(SysRequest(id,name,exchange,code,size,nReqPbCb,nRespPbCb,format,routing))(%xOut(%id)%define(varLB)()%define(varDB)()%define(nVar)(0) %set(sRq,12+%size+6*(%nReqPbCb+%nRespPbCb))%set(netRouting,0)%if(%size EQ 0) THEN(%c0xx(%nReqPbCb,%nRespPbCb))ELSE(%c1xx(%size,%nReqPbCb,%nRespPbCb))FI %format%routing%define(rqLabel)(T%conLB%sep%varLB)%IF(NOT(%isdef(%rqLabel)))THEN(%NewTable)FI rqSeg0 segment DB %exchange rqSeg0 ends rqSeg1 segment DB %size rqSeg1 ends rqSeg2 segment DB %nReqPbCb DB %nRespPbCb rqSeg2 ends rqSeg3 segment DW %code rqSeg3 ends OCode segment DW offset %rqLabel - offset prgbTcodeBase OCode ends rqSeg4 segment DB %netRouting rqSeg4 ends %SET(nSysRequest,%nSysRequest+1)%xOut(,)) ; ; USR REQUESTS -- ; %*define(UsrRequestInit)(%' %' %' '%xOut(%nl Start User requests:%nl)%' %' %' '%Enter6(rgRqExchgUsr LABEL byte%' %' ',rgSCntlInfoUsr LABEL byte%' %' ',rgNReqRespPbCbUsr LABEL byte%' %' ',rgLocalServiceCodeUsr LABEL b" 2 rqSeg2 ends rqSeg3 segment %data3 rqSeg3 ends OCode segment %data4 OCode ends rqSeg4 segment %data5 rqSeg4 ends ) %*DEFINE(Enter3(data0,data1,data5))( rqSeg0 segment %data0 rqSeg0 ends rqSeg3 segment %data1 rqSeg3 ends OCode segment %data5 OCode ends ) %*DEFINE(Enter4(data0,data1,data5,data6))( rqSeg0 segment %data0 rqSeg0 ends rqSeg3 segment %data1 rqSeg3 ends OCode segment %data5 OCode ends rqSeg4 segment %data6 rqSeg4 ends ) %*define(RequestInit(OldLevel,Level))(%' %If (%OldLevel EQ 0h) Then ( rqSeg8 Segment Dw %nSysRequest rqSeg8 Ends ) Else ( rqSeg5 Segment DD rgRqExchg%OldLevel rqSeg5 Ends rqSeg9 Segment DD rgLocalServiceCode%OldLevel rqSeg9 Ends rqSeg10 Segment DD rgNetRouting%OldLevel rqSeg10 Ends rqSeg8 Segment DW %counter rqSeg8 Ends %If ((%OldLevel And 1) EQ 0) Then ( rqSeg6 Segment DD rgFormatOffsetTable%OldLevel rqSeg6 Ends rqSeg7 Segment DD prgbTcodeBase rqSeg7 Ends ) Fi ) Fi %Set(counter,0) %If (%Level NE 10h) Then ( %xOut(%nl Level %Level requests: ) %Enter4(rgRqExchg%Level LABEL byte,rgLocalServiceCode%Level Label Byte ,rgFormatOffsetTable%Level LABEL byte,rgNetRouting%Level Label Byte)%' ) Fi ) %*Define(erc1)(%xOut( Use UsrRequest for Requests in the -32..-1 range )) %*Define(erc2)(%xOut( Use SysRequest for Requests in the 0..0FDFh range )) %*define(Request(id,name,exchange,code,size,nReqPbCb,nRespPbCb,format,%' routing))(%define(varLB)()%define(conLB)()%define(varDB)()%define(conDB)%' ()%define(nCon)(0)%define(nVar)(0)%set(sRq,12+%size+6*(%nReqPbCb+%nRespPbCb))%' %set(netRouting,0)%c(%size,0)%' %c(%nReqPbCb,2)%c(%nRespPbCb,3)%format%routing%Set(OldLevel, %Level)%' %Set(Level, (%Id/1000h) And 0Fh)%If ((%eval(%Id) GE 0FFE0h) And (%' %Eval(%Id) LE 0FFFFh)) Then (%erc1)Fi%If (%Level EQ 0) Then (%erc2)Fi%' %While ((%OldLevel And 0Fh) LT %Level)(%RequestInit(%OldLevel,%' %Eval(%OldLevel+1))%Set(OldLevel,%OldLevel+1))%xOut(%id)%define(rqLabel)%' (T%conLB%sep%varLB)%IF(NOT(%isdef(%rqLabel))) THEN(%NewTable)FI %Enter4(DB %exchange,DW %Code,DW offset %rqLabel - offset prgbTcodeBase,DB %netRouting)%Set(counter,%counter+1)%xOut(,)) ; ; final -- set counters in various tables, create gen table. ; %*define(Final)( rgTables segment public 'memory' %IF (%nWsAbortRq EQ 0) THEN (rgWsAbortRq label byte) FI %IF (%nChgUserNumRq EQ 0) THEN (rgChgUserNumRq label byte) FI %IF (%nTerminationRq EQ 0) THEN (rgTerminationRq label byte) FI %IF (%nSwappingRq EQ 0) THEN (rgSwappingRq label byte) FI rgTables ends OCode segment rcMaxSys DW %nSysRequest rcMaxUsr DW %nUsrRequest OCode ends TCode segment rgbTCodeEnd Label Byte TCode ends data segment public 'data' rgnRequest label word nSysRequest DW %nSysRequest nUsrRequest DW %nUsrRequest nWsAbortRqInit DW %nWsAbortRq nChgUserNumRqInit DW %nChgUserNumRq nTerminationRqInit DW %nTerminationRq nSwappingRqInit DW %nSwappingRq cbTcode DW OFFSET rgbTcodeEnd data ends %While(%Level LE 15)(%RequestInit(%Level,%Eval(%Level+1))%Set(Level,%Level+1)) rqSeg5 Segment DD rgRqExchgUsr rqSeg5 Ends rqSeg6 Segment DD RcLookUpUsr rqSeg6 Ends rqSeg7 Segment DD pRgbTcodeBase rqSeg7 Ends rqSeg8 Segment Dw %nUsrRequest rqSeg8 Ends rqSeg9 Segment DD rgLocalServiceCodeUsr rqSeg9 Ends rqSeg10 Segment DD rgNetRoutingUsr, rgSCntlInfoSys, rgSCntlInfoUsr, rgNReqRespPbCbSys DD rgNReqRespPbCbUsr, rgWsAbortRq, rgChgUserNumRq, rgTerminationRq DD rgSwappingRq, rgnRequest DB %if(%*isdef(%fMerge)) THEN (%fMerge) ELSE(0FFh)FI rqSeg10 Ends rgTables segment public 'memory' ORG offset cbRgTables DW (%nSwappingRq + %nChgUserNumRq + %nTerminationRq + %nWsAbortRq)*2 rgTables ends %Set(counter,0) %Set(Level,0h) %xOut(%nl End pass%nl)) qSeg1 ends rqSeg2 segment DB %nReqPbCb DB %nRespPbCb rqSeg2 ends rqSeg3 segment DW %code rqSeg3 ends OCode segment DW offset %rqLabel - offset prgbTcodeBase OCode ends rqSeg4 segment DB %netRouting rqSeg4 ends %SET(nSysRequest,%nSysRequest+1)%xOut(,)) ; ; USR REQUESTS -- ; %*define(UsrRequestInit)(%' %' %' '%xOut(%nl Start User requests:%nl)%' %' %' '%Enter6(rgRqExchgUsr LABEL byte%' %' ',rgSCntlInfoUsr LABEL byte%' %' ',rgNReqRespPbCbUsr LABEL byte%' %' ',rgLocalServiceCodeUsr LABEL b"  mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm# mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm#  mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm$ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm$  mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm% mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm%  fileHeaders.sysmfd.syslog.sys sysImage.sys badBlk.sys crashDump.sysLinkCTOSVM.subLinkFileSystem.sub HdInstall.sub LinkCtos.sub ?mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm& [ 03382-1/3^kkx HIr\9|M^SysCT9{ͶfileHeaders.sysSysjkjkjk8mfd.sysSyskkkkk>log.sysSysmkmkmk sysImage.sysSysnknknk badBlk.sysSysokokok&  9{ͶfileHeaders.sysSysjkjkjk crashDump.sysSysqkqkqkHLinkCTOSVM.subSysukzkzkLinkFileSystem.subSyszkkk`@ HdInstall.subSys kkk  W LinkCtos.subSys kkk FileSystem_n.objCT kkk' 8mfd.sysSyskkkkk>log.sysSysmkmkmk sysImage.sysSysnknknk badBlk.sysSysokokok crashDump.sysSysqkqkqkHLinkCTOSVM.subSysukzkzkLinkFileSystem.subSyszkkk`@ HdInstall.subSys kkk  '  )KBD.objCTkkkL pClstr.asmCTkkkoPW LinkCtos.subSys kkk FileSystem_n.objCT kkkػFS_n.asmCTkkkgFS_n.flsCTkkk3KBD.asmCTkkk+,h4KBD.mdfCTkkkAF(  pClstr.flsCTkkkYV^ pClstr.objCTkkk%\&$c pClstrLfs.asmCT kÌkÌkfY! pClstrLfs.flsCT!Čkƌkƌkd B" pClstrLfs.objCT"njkˌkˌk1'(.# pMstr.asmCT#̌kΌkΌk ػFS_n.asmCTkkkgFS_n.flsCTkkk3(  c pClstrLfs.asmCT kÌkÌkfY! pClstrLfs.flsCT!ČkƌkƌkdKBD.asmCTkkk+,h4KBD.mdfCTkkkAF)KBD.objCTkkkL pClstr.asmCTkkkoP pClstr.flsCTkkkYV^ pClstr.objCTkkk%\&$)  B" pClstrLfs.objCT"njkˌkˌk1'(.# pMstr.asmCT#̌kΌkΌk 0 pMstr.flsCT0όkьkьkYx1 pMstr.objCT1ҌkՌkՌkd'(y2 pStnd.asmCT2֌k،k،k9o 3 pStnd.flsCT3ٌkیkیk$4 pStnd.objCT4܌kkkk%&D5 RealNub.sysCT5kkk)  0 pMstr.flsCT0όkьkьkYx1 pMstr.objCT1ҌkՌkՌkd'(6 Request.asmCT6kkk&7 Request.mdfCT7kkk:<j!!8 Request.objCT8kkkrtn9 SysGen.asmCT9kkk0l.nMPDzkhsher: SysGen.mdfCT: kkkklH; SysGenUVA.mdfCT;kkkb * y2 pStnd.asmCT2֌k،k،k9o 3 pStnd.flsCT3ٌkیkیk$4 pStnd.objCT4܌kkkk%&D5 RealNub.sysCT5kkk6 Request.asmCT6kkk&7 Request.mdfCT7kkk:<j!!8 Request.objCT8kkkrtn9 SysGen.asmCT9kkk0l.nMPDzkhsher*  .LM-MN: SysGen.mdfCT: kkkklH; SysGenUVA.mdfCT;kkkb 2HI1IJ0JK/KL+ ,NO+OP*PQ)QR(RSS`2HI1IJ+  *PQ)QR0JK/KL.LM-MN,NO+OP, (RSS``aabbccddeef,  `aabfgghhiijjk{k- bccddeeffgghhiij-  cbTCode  rgPrcLookUp nUsrRequestrcLookUp rgSwappingRqRrgSCntlInfoUsr rgRqExchgSys rgPrcLookUpBase,nTerminationRqInitnSwappingRqInit rgLocalServiceCodergChgUserNumRqFrgNReqRespPbCbSys rgRcMaxnWsAbortRqInit rcLookupSysrgTerminationRqrcMaxSys^ rcLookupUsrJ rgWsAbortRq(rgLocalServiceCodeSysnChgUserNumRqInit rgPrgLocalServiceCode rgPrgRqExchg rgNetRouting rgRqExchg nSysRequestrgPrgNetRoutingrgNReqRespPbCbUsr rgRqExchgUsrrcMaxUsr`JF TT TT  TT TT TT $    jk{kKBD.asm pClstr.obj pClstrLfs.asm pClstrLfs.fls! pMstr.asm# pStnd.asm2 pStnd.fls3 Request.asm6 SysGenUVA.mdf;FS_n.asmKBD.mdf pClstr.asm pClstr.fls pMstr.fls0 RealNub.sys5 Request.mdf7 SysGen.asm9FileSystem_n.obj FS_n.flsKBD.obj pClstrLfs.obj" pMstr.obj1 pStnd.obj4 Request.obj8 SysGen.mdf: Request CTAsm 11.3??SEG??SEGSTACKSTACKrgTablesmemoryrqSeg0constrqSeg1constrqSeg2constrqSeg3constrqSeg4constrqSeg5constrqSeg6constrqSeg7constrqSeg8constrqSeg9constrqSeg10constOCodeconstdatadataTCodememoryDGrouphThbHH H( H^ HhDH$H$H"HDHiHbh H2 !"# rgSCntlInfoSysrgLocalServiceCodeUsrJ.   $ " s4   4 C   CIIWWc  c    C o  o   o  |   |    $ """$$$o&& &(((** *,, ,.. .00 0% #222$ 44466 6 888  :::  <<<>>>  @@@  $!!BBB$!5""DDD5"##FFF$#$$HHH5$%%JJJ$%&&LLL5&''NNN$'H((PP PH())RR RC)S**TTTS* _++VVV_+,,XXXS,--ZZZ_-g..\\\g.//^^^/00```H0v 11bbbv122dddv233fff344hhh455jjjH566lll677nnnH788ppp899rrrC9::ttt: ;;vvv;<<xx xH<==zzzH=>>|||>??~~~?@@@AACABB BCCCCDD D EE  EFFCFGG.  fwwfwvxxvxyy _yzzz{{{|||}} }*~~~;L    _    $ CGHHCH II I JJ J  KK  KLL LMM MNNN0.OOOPPPQQQ"  RRRSSSTTT"(  &UU"Us;VV;VL WWLW_(  &XX _Xx,*YY xY ZZ Z[[[\\ \$ "]]] ^^ ^ ___``C`aa aSbbbcc cddd" eeeffCfggghhhiiijjjkkkllCl&mm&mnnnooCopppqqq1( rr1rHssHs SttSt[uu[uvvSv/  "" " .    """,$$ $,&& &S(( (C***C,,,H8...8000222C444D666D888C O:::OV<<<Vb"  >>>bw@@@wBB BDD DFF FCHHHC,*$JJJLLL#6(4NNNPPPcRRRC$ "TTTVVVcXXX ZZZ  \\\ ^^^```C(bbb(6ddd6fffChhhCEjjjE W lllWnnnCppp]rrr]tt ti$"vv viz$ xxxzzzzo |||a$ "~~~$ " CCC"   o/  D $   C   CC            C   "$ ""88 J:  Ja J JSS_$ _r$ rCC*DD,CDDCDC C "  h$ aC2( &2JJ[ [l   l C"    C& $0           $ "       """$$$&&&C(((C2** *2,,,S?.. .?00 0?22 2_44 4_66 6L888L Y:::Y`$ << <`>>>`  @@@ s!!BBBs!""DDD"##FFF#$$HHH$(  %% JJJ%&&LLL &s''NNNC'((PPP())RRR)**TTT*++VVVS+,,XXX_,--ZZZ-..\\\.$ "//^^^/00```011bbbC122ddd233fff3 44hh h 4  55jj j 5 66lll 677nnn 788ppp 899rrr 9::ttt :;;vvv ;<<xxx <==zzz =% $ >>|||% >: $ ??~~~: ? O @@O @X $ "AA% X An  BB  n Bz CCz CDDDEESEFFFGGIGHHHIICIJJJ KK KLLLLMMHM  NN N  0     0           ' S( .                 $      ""   $$ && ((   **   $,,   $..  OO&  OPP LP  QQ! QRR"SR  SS   S $"TT  TUU#U VV$ V WW% WXXX  YY& Y $ "ZZ  Z[[[\\|\]]|] ^^ ^  __' _`` `aa Jabb(?bcccdddeeefffggghhhiiijjjkkklllmm m  $nn  n ' $oo ' o . $pp. p 7 qq7 q @ rr@ rss@ stt7 t E  uu E uvv E v L wwL w Q ,xxQ x Z yyZ y _ zz_ z f &{{f { o ||o |}}f } v  ~~ v ~ v @ @  }  }   01 00  22 44 66 88 :: << >> @@ BB DD $"FF HH   JJ   LL  $ NN$ PP  - RR- TT  VV "XX $ZZ &\\FG` l  "$&(F*G,`.l0p2468:<>@ BDFHJLN PR TVXZ\^`^  2  T  TT  TT TT   TT ^ TT TT  b TT  TT  TT ^ TT  TT   TT ^ TT TT  b TT  TT  TT ^ TT TT   TT ^ TT TT  b TT TT  TT ^ TT TT   TT ^ TT  TT  b TT  TT $ TT $^ TT$ TT  ( TT (^ TT( TT  b TT  TT , TT ,^ TT, TT  0 TT 0^ TT0 TT  b TT  TT 4 TT 4^ TT4 TT  8 TT 8^ TT8 TT  b TT  TT < TT <^ TT< TT  @ TT J TT TT  @J TT-@(FRQTTTTT T TTTTTTTTTT T"T$T&T^; ; FILE SYSGEN.ASM -- ; ; COPYRIGHT (C) 1980, 1989 CONVERGENT INCORPORATED. ALL RIGHTS RESERVED. ; COPYRIGHT (C) 1980, 1989 UNISYS CORPORATION. ALL RIGHTS RESERVED. ; ; THIS SOFTWARE IS PROPRIETARY TO CONVERGENT INC. AND UNISYS CORP. AND IS NOT TO ; BE REPRODUCED, USED OR DISCLOSED EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR ; UPON WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF UNISYS CORPORATION. ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE ; OPERATION OF A DESIGNATED1   2: IWS mini-cluster master ; 3: IWS CommIOP-cluster master ; 4: AWS-210 ; 5: AWS-220, AWS-230, or AWS-240 ; 6: AWS-240 ; 7: NGEN cluster ; 8: NGEN ; 9: Ngen Master ; 10: FP ; 11: TP ; 12: CP ; 13: SP ; 14: DP ;  15: RP ; ; HardwareType ....... 0: IWS ; 1: AWS-210 ; 2: AWS-220 or AWS-230 ; 3: AWS-240 ; 4: NGEN ; 10: FP ; 11: TP ; 12: CP ; 13: SP ; 14: DP ; 15: RP ; ; ClusterConfig ...... 0: Standalone workstation ; 1: Cluster workstation ; 2: Clus COMPUTER FOR A PARTICULAR PURPOSE. TITLE TO AND ; OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN ; IN THE NAMES OF UNISYS CORPORATION AND CONVERGENT INCORPORATED. ; ; ; The file "sysgen.mdf" contains all of the macro definitions for the macros ; which are contained in this file, "sysgen.asm". The intent is to make ; changing the system build parameters as painless as possible, and so this ; file has been created using macros which provide a high degree of ; readability and allow the user to ignore the Assembly language constructs ; which are actually generated. The prefix file and Sysgen.asm contain macros ; which generate three sections of data: ; ; 1. "resident" tables and variables ; 2. OsTable from which CTOS will allocate ; space for non-sysgen resident tables ; and variables ; 3. "initial" tables and variables ; which will be discarded after CTOS ; initialization is completed. ; ; CONFIGURATION -- ; This module uses several macro symbols to determine the configuration of ; the CTOS being built. The prefix files pMstr.asm, pClstrLfs.asm, ; pStnd.asm etc. set these symbols. The prefix file includes both ; Sysgen.asm and Sysgen.mdf. In the form given to the assembler, list only ; the name of the prefix file. ; ; DEBUGGER OPTIONS -- ; To simplify removal of optional debugger, the flag fDebugger is used. ; This is set to TRUE (1) unless one of the above prefix files files ; (pMstr.asm, pClstrLfs.asm, ...) sets it explicitly. To remove the ; debugger, set the flag to FALSE (0) and assemble that module. ; NOTE that you must also change the appropriate XXX.fls or XXX.link file ; as described in the "Building a Customized CTOS" section of the System ; Administrator's Guide or Release Notice. ; ; NOTES FOR CHANGING THIS FILE -- ; ; Please be aware that in the Convergent Assembly language there are two types ; of comments, normal comments, (any text on a line after a ";" character), ; and a macro comment (%' text '). It is not possible to "comment out" a ; macro by inserting a ";" in front of it. You may comment out a macro by ; replacing the percent sign in the call with a ";" or by preceeding the call ; with "%'". This will cause the macro processor to ignore any text up to and ; including the next "'" or RETURN (0Ah) character, whichever comes first. ; Macro calls must not be mixed. In general the invocation of a macro causes ; an entry to be added to a table, and mixing macro calls would result in ; scrambled tables. ; ; In most cases, you will not change this file at all, but rather will change ; the SET macros contained in the prefix file (such as pClstrLfs.asm or ; pMstr.asm versions of CTOS). The meaning of these SET macros is explained ; below. ; ; SET AND CONFIGURATION MACROS USED IN THIS FILE -- ; ; The following macros are used to control the conditional ; statements in this module: ; ; WsType ............. 0: IWS standalone workstation ; 1: IWS cluster workstation ;2 ter master ; ; fNoFileSystem ...... 0: Any workstation with a filesystem ; 1: Cluster stations without filesystems ; ; fCommIOP ........... 0: Any workstation but Comm-IOP master ; 1: CommIOP-cluster master. IWS only. ; ; fDebugger .......... 0: Exclude debugger ; 1: Include debugger ; ; fHDisks ............ 0: No hard disks ; 1: Include hard disks ; ; ctosp .............. 0: real mode Vp (CTOS II) ;  1: protected Vp (CTOS VM) ; ; fMulpar ............ 0: Single-partition OS. Obsolete. ; 1: Multi-partition OS. Always set true. ; ; fVarpar ............ 0: Multi-partition OS. Obsolete. ; 1: Variable-partition OS. Always set true. ; ; Compilation flags and system build parameters. ; ; Many of these parameters control the allocation of structures when the OS is ; initialized. The memory comes from a buffer in the data segment. The OS is ; shipped with this dynamic area set to its maximum possible size. If it were ; any larger then the data segment would exceed 64K and the OS wouldn't link. ; If too many structures are allocated then the OS will crash with an ERC 101 ; at boot. The only recourse is to reduce the number of structures allocated. ; This is done by reducing the counts in SET macros listed below. ; ; The "Set" macros placed in the "prefix" file such as pClstrLfs.asm or ; pClstr.asm are defined as follows: ; ; sOsData ............ Reserves an empty buffer in the OS data segment ; DGroup. The OS uses this space for data ; structures such as exchanges which are allocated ; according to parameters set in the prefix file. ; Do not make this any larger. ; ; sContingencyLog .... Stray interrupt log (minimum value ; is 1 word) ; ; sKbdBuffer ......... Keyboard type ahead buffer (must ;  be a power of 2) ; ; sOutBuffer ......... size in bytes of the output ; character buffer. This size must ; be a power of 2. The output buffer ; is used by Megaframes in administrator mode. ; ; maxMedInterruptType Maximum type number of all ; mediated interrupts set. ; ; nFrames ............ Number of simultaneous video ; frames. Each frame adds 20 bytes. ; Convergent software needs 8. ; ; nUsrExchange ....... User Exchanges (maximum 200). Each ; adds 10 bytes. ; ; nPcb ............... Number of processes (CTOS and user ;  combined). The largest standard ; OS has 8, character mapped video has 1, ; and the Executive has 2, making a minimum of ; 11. Each adds 40 bytes. ; ; fTimeSlice ......... 0: disable run-queue rotation. ; 1: enable run-queue rotation. ; When enabled, pcbs in a certain ; priority range on the run queue ;  are relinked behind other pcbs of ; the same priority ten times per ; second. ; ; lbTimeSlicePriority when fTimeSlice is 1, sets low bound ; priority of pcbs to rotate. ; ; hbTimeSlicePriority when fTimeSlice is 1, sets high bound ; priority of pcbs to rotate. ; ; nMsgWait ........... Total number of message link ; blocks. Each adds 6 bytes to CTOS. ; ; nPTiming ........... Total number of simultaneous real ; time clock service requests. CTOS ; requires at least 16 to run all ; Convergent programs. Each 2   will fit in a small XBlk. ; ; wsTotal ............ Total number of workstations ; ; sioClock ........... Sio Clock divisor. It is the ; divisor of 1,228,800 baud. (4 for ;  307200 baud) ; ; fIopDump ........... Crashdump the IOP on load. IWS only. ; ; nIops .............. Number of IOP's. IWS only. ; ; nWsLine1 ........... Maximum number of workstations ; which may be attached to channel 1 ; of IOP 1 or CP ; ; nWsLine2 ........... Maximum number of workstations ; which may be attached to channel 2 ; of IOP 1 or CP ; ; nWsLine3 ........... Maximum number of workstations ; which may be attached to channel 1 ; of IOP 2. IWS only. ; ; nWsLine4 ........... Maximum number of workstations ; which may beadds 6 ; bytes. ; ; nPartitions ........ Number of user numbers max. Changing ; this number causes some defaults to ; also be changed. See the prefix file. ; ; nUcb ............... Number of user control blocks. Each ; is 95 bytes. Set to nPartitions always. ; ; sParExitRunFile .... The minimum size in paragraphs (16 bytes) ; that the primary partition will shrink ; to due to CreatePartition and ConvertToSys ; requests. ; ; cParScHeap ......... The size in paragraphs of the installable ; system common subroutine heap.  Each ; installed routine requires at least 8 bytes. ; ; nGDTSlots .......... Number of slots in the Global Descriptor Table. ; Each slot takes 14 bytes. This table is ;  allocated out of high memory, not OS DGroup. ; ; nSwapFabs .......... Number of Swap File Area Blocks needed for ; swap file management. These are not the same ; blocks as set by nFab. Each takes 6 bytes. ; ; SwapFile ........... Name of the default preferred swap file. ; This is normally [sys]Crashdump.sys. ; ; ; The "Set" macros for Cluster Agent configuration are defined as follows: ; ; nWsUserNum ......... Number of workstation user numbers. ; There is a user number required for ; partition in each workstation. The ; default is the number of ;  workstations plus 3. Megaframe only. ; ; nXBlock ............ Number of transmission blocks. ; Each is 512 bytes times the number ; nSectorPerXBlk (see below). ; On a master workstation this is a ; function of the number of cluster ; workstations (see nUcb above). ; ; nSectorPerXBlk ..... Number of sectors in each ; transmission block (see nXBlk ; above). ; ; maxXBlocksPerUser... The maximum number of Xblocks any single user ; can have outstanding at one time. ; ; nXBlkSmall ......... Number of small transmission blocks (= ; sMaxSmallRq). Requests received from cluster ; workstations that will fit in a small XBlk will ; not take up a large XBlk. This is designed for ;  applications that need to have a number of small ; requests that will be outstanding for long ; periods of time. ; ; sMaxSmallRq ........ The maximum size (in bytes) of a request that ; 3  attached to channel 2 ; of IOP 2. IWS only. ; ; nUserNum ........... The maximum number of users that can be ; supported by this workstation. A master ; needs to allocate one user number for each local ; user (nPartition) plus one for each possible ; cluster user. ; ; nRcb ............... The number of Request Control Blocks. ; Rcbs are used by cluster workstations to ; record the existence of outstanding requests ; to the master workstation. ; Each Rcb adds 24 bytes. ; ; ; The "Set" macros for SRP configuration are defined as follows: ; ; nYblk .............. Number of large ICC request blocks ; used to hold remote requests. ; ; nSectorPerYblk ..... Size of a Yblk, measured in 512 ; byte units. This must be at least ; as large as as an Xblk (5 is the ; minimum size) ; ; nZblk .............. Number of small ICC request blocks ; Each Zblk costs %sZblk bytes ; The default Zblk size is 100 bytes ; ; sZblk .............. Size of a Zblk ; ; nReqEnts ........... Size of the ICC input request ; circular buffer. Each entry costs ;  five bytes. ; ; nRespEnts .......... Size of the ICC input response ; circular buffer. Each entry costs ; five bytes. ; ; sStatArea .......... Size of the ICC statistics ares. A ; minimum of 10 bytes is recommended ; ; sTermArea .......... Master FP only. Size of the ; terminal routing area. One entry ; per terminal (RS-232 or PT) in the ; system is required. Each entry ; costs two bytes. ; ; sLineArea .......... Master FP only. Size of the line ; routing area. One entry per RS-422 ;  line is required. Each entry is ; two bytes long. ; ; sRouteArea ......... Master FP only. One entry per ; request code is required. Each ; entry costs one byte. ; ; nLine .............. Number of configured RS-422 lines ; on a CP. Values of 1 or 2 are OK. ; ; fSrpClock1 ......... Line speed of RS-422 line #1. A ; value of 0FFh indicates the 1.8Mbs ; speed while 0 indicates 307kbs. ; ; fSrpClock2 ......... As above, but for line #2. ; ; nAdapters .......... Maximum number of multibus adapters ; in Megaframe system. If omitted, a default ; value of 1 is assumed. ; ; nNetUsers .......... The maximum number of CtNet users that can be ; supported by this workstation. ; ; ; FontRamBuf ......... 0FFh indicates that 8704 bytes ; buffer is reserved at low memory ; for LoadFontRam operations. Obsolete. ; ; lineHz ............. This is the AC line frequency, ; used by the real time clock (50Hz ; or 60Hz). Obsolete. ; ; nSysExchange ....... Exchanges reserved for CTOS. ; Obsolete. ; ; nMsgWaitReserve .... Number of message link blocks ; reserved for CTOS "pSend" primative. ; Obsolete. ; ; ; File system build parameters. These "Set" macros take effect only if ; set in a file system prefix file: ; ; fVerifyFileStruct .. If this is non zero then CTOS will ; 3  3004h,3004h,28,1) %RemoteDmaRequest(3005h,3005h,28,1) %RemoteDmaRequest(301Dh,301Dh,28,1) %RemoteDmaRequest(3020h,3020h,28,1) ) Fi %RemoteDmaRequest(191,191,18,1) %RemoteDmaRequest(192,192,18,1) EVEN ; STARTIO -- ; ; The SysGen description of StartIO routines for the different ; mass storage devices are put in an array, called rgMassioDisp, ; in the order of device class defined in their DCB's. MassIO ; Process uses this array to dispatch IO requests. ; ; To declare a StartIO routine use the macro "MassioDisp" with ; one argument, the name of the public procedure which will ; initiate IO for the device. THE MACRO HAS TO BE INVOKED ; ACCORDING TO THE ORDER OF THE DEVICE CLASS. IF THERE IS ; DISCONTINUITY IN THE SEQUENCE OF DEVICE CLASSES, A DUMMY ; ENTRY HAS TO BE PROVIDED. ; ; MassioDisp(pStartIO) ; %If (%fMFHardware) THEN ( %IF (%fFP OR %fDP) Then ( %MassioDisp(StartHardDisk) ; Fp & SP+SC each have 1 type StartIO routine )FI ) ELSE (%' Workstation %IF (((%wsType NE iwsCluster) AN verify file structures after ; writing to disk. Adds 512 bytes. ; Halves file system performance. ; (ALSO MODIFIABLE IN [sys]Config.sys) ; ; cDiskLogThreshold .. Indicates how many disk retry operations ; are to be attempted before logging ; the disk error. Only applies to errors ; that are subject to retries. This value ; can be greater than the total number of ; retries done, thereby inhibiting log entries. ; (ALSO MODIFIABLE IN [sys]Config.sys) ; ; nIob ............... Total number of simultaneous disk ; I/O requests allowed. CTOS ; requires at least as many as disk ; devices in the system to run all ; Convergent programs. Each "iob" ; structure adds 50 bytes to CTOS. ; ; nFab ............... Total number of "runs" allowed for ; all open files combined. The ; appropriate number is highly ; dependent on the frequency of file ; creation, deletion, and expansion; ; and on the frequency with which ; you reload your disk volumes. ;  Each "fab" structure is 10 bytes. ; ; nFcb ............... Total number of open files allowed ; in the system. Each adds 28 ; bytes. This is a function of the ;  number of workstations (see nUcb ; above). ; ; nFub ............... Number of file user blocks (used ; to lookup a "fcb" from a file ; handle). This should be the same ; as nFcb. Each adds 5 bytes. This ; is a function of the number of ; workstations (see nUcb above). ; ; nVhb ............... Total number of disk devices in ; the system. Each adds 256 bytes. ; ; nWinch ............. Number of Winchester disks (the ; SyQuest cartridge is counted as a ; Winchester disk). ; ; EVEN ;################################################################ ; The ICC Server Agent massages certain requests to allow the # ; File Processor (s) to perform DMA directly to the target. # ; These requests are declared using the RemoteDmaRequest macro # ; The RemoteDmaRequest macro is documented in Sysgen.mdf # ;################################################################ %if ((%fFP) OR (%fDP)) Then ( %RemoteDmaRequest(35,3025h,18,1) %RemoteDmaRequest(36,3026h,18,1) %RemoteDmaRequest(4 D (%wsType NE aws210) AND (%wsType NE ngenCluster)) OR (%localFs NE 0)) THEN ( ; Note: odd classes are floppy types, even classes are hard disks. %MassioDisp(StartHardDisk) ; Device class 0 - Winchester StartIO routine %MassioDisp(StartFloppy) ; Device class 1 - Floppy StartIO routine %MassioDisp(StartHardDisk) ; Device class 2 - Winchester (SMD Cntllr) %MassioDisp(StartHardDisk) ; Device class 3 - Floppy (SMD Cntllr) StartIO %MassioDisp(StartHardDisk) ; Device class 4 - SMD StartIO routine %MassioDisp(StartFloppy) ; Device class 5 - Dummy %MassioDisp(StartSCSIDisk) ; Device class 6 - SCSI StartIO routine )FI)FI ;############################################################### ; Encryption Key value ; Used by the file system to encrypt all passwords on disk. ; If changed, encryption-protected disks will be incompatible with ; disks created by previous file systems. ; ; The encryption process is loosely based on the RSA public-key method. ; This number cannot be replaced by an arbitrary byte string. ; The key is part of a function that takes an un-encoded password ; string as input and procuces an encrypted password as output. ; User-generated keys should exceed 80 bytes (200 digits) and be, if not ; prime, then have only a few factors. The more factors, the more ; plain text strings will encrypt into the same encoded string. ; ; Password encryption is on a per-volume basis. The user chooses the ; option at ivolume time. Care in remembering passwords must be exercised, ; as it is impossible to determine the plain text string when only the ; encrypted string and the key are known. ;################################################################ %DefineEncryptionKey(%( 7C8Dh, 1813h, 9F31h, 4BB9h,0E569h, 29F1h, 1B89h,0AD7Bh, 973Fh, 101Bh, 54FCh,0C922h, 5C63h, 9C97h, 840Ah, 06F0h, 612Dh,0DFCAh,0D3F7h, 335Bh,0D421h,0CD61h, 324Fh,0E40Eh, 0B0Bh, 6CE9h, 80D3h, 90BAh, 74A9h, 10E2h, 8C96h, 9CA6h,0C506h, 568Ah,0AD6Ah, 23BBh, 26A2h,0C0F9h,0A2CFh,0F383h, 0B05h, 1A7Eh,0C31Ah,0C9ACh, 8F67h, 4D69h, 083Dh, 44EEh )) ;############################################################### ; Exit Run File -- ; This macro defines the name of a file which CTOS loads ; when the application program calls Exit or ErrorExit, or ; are entered. ;################################################################ %IF(%*isdef(%ExitFile)) THEN ( %ExitRunFile("%ExitFile","",128) ) ELSE ( %IF(%fMFHardware) THEN ( %ExitRunFile("[Sys]CLI.Run","",128) ) ELSE ( %ExitRunFile("[Sys]Signon.Run","",128) )FI)FI ;############################################################### ; Specify the name of a volume which is designated as the ; volume [SCR]. This is the volume where the spooler is ; going to create temporary files. ;################################################################ %IF(%*isdef(%ScratchVolume)) THEN ( %ScratchVolumeSpec("%ScratchVolume") ) ELSE ( %ScratchVolumeSpec("Sys") )FI %IF(%fVarPar) THEN ( ;############################################################### ; ; SwapFileTryFirst("File name","pswd") ; SwapFileTryEach ("File name","pswd",ibToNumber,ckCreateDefault) ; ; These macros define the name of a file which CTOS uses ; when it becomes necessary to write a running program onto disk. ; ; The file mentioned in SwapFileTryFirst is tried first. The file ; must be at least as large as the default create size (last argument). ; If it cannot be opened or is too small, then SwapFileTryEach is tried. ; Each time a decimal number is inserted into the name at the position ; indicated by the third parameter (char position, 1st char=0). ; If the file is in use, the next is tried. ; If the file couldn't be opened a Create is tried. If the create ; fails, the OS crashes with ercNoSwapFile. ; ; The file is created with size as indicated by the forth macro arg. ; Size is measured in kilobytes(1024 byte blocks). A size of 512 would ; create a swap file of 1/2 megabyte. ; ;################################################################ %IF(%*isdef4  may generate the interrupt itself (division ; error, overflow [with OF enabled], or after every instruction ; if TF is enabled. Second, a nonmaskable interrupt may occur, ; signalling some catastrophic error such as power failure, bus ; timout, or parity error. Third, a maskable interrupt ; generated by the 8259A interrupt chip may occur. A software ; interrupt may be of any type (0 to 119). The type is used to ; map the interrupt to a pointer in low memory which contains ; the "CS:IP" of the appropriate interrupt handler. Each ; pointer is 4 bytes, starting with type 0 at 0000:0000h, type ; 1 at 0000:0004h, etc. The fixed interrupt types are as ; follows: ; ; type 0 ... divide error ; type 1 ... single step (TF enabled) ; type 2 ... nonmaskable interrupts ; type 3 ... special one byte interrupt instruction ; (used by Convergent Debugger) ; type 4 ... arithmetic overflow (OF enabled) ; 5 Array Bounds ; 6 Undefined Opcode trap ; 7 ESC Opcode trap ; 8 Timer 0 ; 18 Timer 1 ; 19 Timer 2(%SwapFile)) THEN ( %SwapFileTryFirst("%SwapFile","") ) ELSE ( %SwapFileTryFirst("[sys]CrashDump.sys","") )FI %IF(%*isdef(%SwapFileLoop)) THEN ( %SwapFileTryEach("%SwapFileLoop%(00)","",%LEN(%SwapFileLoop),1500) ) ELSE ( %SwapFileTryEach("[sys]SwapArea00.sys","",18,1500) )FI )FI ;############################################################### ; SysGen Description of Interrupt handlers. ; ; In real mode, sysgen defines interrupt handlers as either ; "raw" and "mediated". ; ; ; RAW INTERRUPTS -- A "raw" interrupt handler is a routine to ; which control is passed by the 8086 CPU when the interrupt ; occurs. It is the responsibility of the handler to save the ; current register context, and to restore context before ; executing an interrupt return. A raw interrupt may be ; generated by hardware (through the 8259A interrupt chip) or ; by software (with an "int" or an "int nn" instruction). ; ; ; MEDIATED INTERRUPTS -- A "mediated interrupt is one which ; CTOS "mediates" for the user, by saving the current register ; context, and then calling the interrupt handler as a ; subroutine. This is especially usefull because it allows ; FORTRAN and Pascal procedures to be written as interrupt ; handlers. A "mediated" interrupt may be generated by ; hardware or software, just as with the "raw" interrupts. ; ; In protected mode, sysgen defines interrupt handlers as either ; "software" or "hardware". ; ; SOFTWARE INTERRUPTS -- A software interrupt occurs in response to ; a software generated event, such as an INT instruction or a ; program exeception, such as a general protection fault. IDT entries ; for software interrupts contain task gates, hence, a software ; interrupt causes a task switch. The interrupt handler need not save ; registers since a task switch occurred. The interrupt handler may ; return to the interrupt task using IRET or may return to the ; kernel dispatcher using RET, behaving as a mediated interrupt. ; ; HARDWARE INTERRUPTS -- A hardware interrupt occurs in response to ; a external hardware interrupt. IDT entries for hardware interrupts ; contain interrupt gates. The CS:IP in the interrupt gate passes control ; to code that immediately calls an interrupt task, hence, a task switch ; occurs. This two level vector is required to force the processor to ; unlock the memory bus during the time period beginning at the start of ; the interrupt acknowledge cycle and ending with the task switch. Freeing ; the memory bus is necessary for high performance RS-422 cluster operation. ; The interrupt handler need not save registers since a task switch occurred. ; The interrupt handler may return to the interrupt task using IRET or may ; return to the kernel dispatcher using RE, behaving as a mediated interrupt. ; In this case, the kernel handles EOI programming. ; ; ; INTERRUPT TYPE -- The 8086 interrupt type is a code which the ; 8086 CPU uses to distinguish different hardware interrupts. ; A hardware interrupt may be generated in one of three ways. ; First, the 8086 5  ; 9 Reserved ; 10 DMA 0 Interrupt ; 11 DMA 1 Interrupt ; 12 Int 0 Interrupt ; 13 Int 1 Interrupt - Doorbell ; 14 Int 2 Interrupt ; 15 Int 3 Interrupt ; ; Other entries less than or equal to 31 are reserved ; ; Note that it is not possible to have more than one routine to ; handle any interrupt type. ; ; There are 8 interrupt levels corresponding to interrupts ; generated by the 8259A, which are mapped onto 8 types (8 - ; 15). Four of these types/levels are reserved for Convergent ; devices and four are conected to the Multibus interface: ; ; level: type: assignment: ; 0 8 Multibus ; 1 9 communications controller ; 2 10 Multibus ; 3 11 programmable interval timer ; 4 12 printer, keyboard, real-time clock, ; 8087 math chip ; 5 13 Multibus ; 6 14 Multibus ; 7 15 disk storage subsystem (floppy and ; hard disk) ; ; REAL MODE INTERRUPT DECLARATIONS ; ; RAW INTERRUPT DECLARATION -- To declare a raw interrupt ; handler use the macro "RawInterrupt" with two arguments, the ; 8086 interrupt type, and the name of the public procedure ; which will handle the interrupt. Note that a raw interrupt ; handler must save the user context (registers), and should ; return with the "iret" Assembly Language instruction. The ; effect of executing this macro is to have the CS:IP of the ; handler put into the pointer associated with the interrupt ; type: ; ; RawInterrupt(type,pHandler) ; ; ; MEDIATED INTERUPT DECLARATION -- To declare a mediated ; interrupt handler, use the macro "MediatedInterrupt" with ; three arguments, the interrupt type, a flag (0 or 0FFh) ; saying whether or not the interrupts are generated by the ; 8259A interrupt chip, and the name of the interrupt handler. ; CTOS will use the macro declarations to build a table which ; it will use to service interrupts: ; ; MediatedInterrupt(type,f8259,pHandler) ; ; ; PROTECTED MODE INTERRUPT DECLARATIONS ; ; SOFTWARE INTERRUPT DECLARATION -- To declare a software interrupt ; handler use the macro "SoftwareInterrupt" with two arguments, the ; interrupt level, and the name of the public procedure ; which will handle the interrupt. ; ; SoftwareInterrupt(level,pHandler,sStack,fMediated) ; ; ; HARDWARE INTERUPT DECLARATION -- To declare a hardware ; interrupt handler, use the macro "HardwareInterrupt" with ; two arguments, the interrupt level and the name of the interrupt handler. ; ; HardwareInterrupt(level,pHandler,sStack,fMediated) ; ; ; ADDING HANDLERS -- In addition to adding the macro ; declaration of an interrupt handler, you must link CTOS with ; the object module containing the handler. The handler should ; be written following the conventions outlined in the Assembly ; Language Manual (appendix) relating to register BP usage, ; segment names, etc. ; ; CASCADED 8259A's -- If you "cascade" 8259A interrupt chips on ; custom multibus cards, you must declare the interrupt level ; which is cascaded. The only legal levels are of course 0, 2, ; 5, and 6. To declare a cascaded 8259A use the macro ; "InterruptCascadeLevel" with one argument, the level. For ; example, if you are cascading level 6 (8086 type 14), you ; would declare: ; ;%' %InterruptCascadeLevel(6) ; ; ; NON DECLARED INTERRUPTS -- Any interrupt which occurs of a ; type for which an interrupt handler is not supplied will ; cause CTOS to generate a "crash", which is described in the ; CTOS manual. In particular, no handler is supplied for ; division errors. ; ; ; REFERENCES -- Furthur information on interrupt handlers may ; be found in the following Convergent documents: ; ; CTOS manual, section on Interrupt Handlers ; The Assembly Language Manual, appendix on programming ; conventions ; ; ; Interrupt handlers: ; %IF (%wsType LT aws210) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(5, CEntry) ; CTOS kernal primatives %RawInterrupt(6, RqInterface) ; system service requests %RawInterrupt(7, OsSubEntry) ; system common routines %RawInterrupt(9, RawCommNub) ; comm interrupts %RawInterr5  t(parity) %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(5, CEntry) ; CTOS kernal primatives %RawInterrupt(6, RqInterface) ; system service requests %RawInterrupt(7, OsSubEntry) ; system common routines %RawInterrupt(12,IsrNull) ; Transmit ready (channel A)interrupt %RawInterrupt(13,IsrExStat) ; External status change (Channel A) %RawInterrupt(14,IsrNull) ; First character received (Channel A)-ignore %RawInterrupt(15,IsrRxspec) ; End of frame(Channel A) %RawInterrupt(19,RawCommNub) ; comm interrupts %RawInterrupt(23, pIret) ; Funny interrupt for Comm Dma %MediatedInterrupt(8,0FFh,KbdTxInt) ; Transmit ready interrupt(channel B) %IF(%fAwsPIT)THEN( %MediatedInterrupt(9,0FFh,TimerInterrupt) ; Timer interrupt(channel B) )ELSE( %MediatedInterrupt(9,0FFh,RTCInterrupt) ; Timer interrupt(channel B) )FI %MediatedInterrupt(10,0FFh,KbdRxInt) ; Receive ready interrupt(channel B) %MediatedInterrupt(11,0FFh,KbdErrInt) ; Special receive condition interrupt(channel B) %MediatedInterrupt(upt(12, L4IntDisp) ; level four interrupts %RawInterrupt(15, MassIntDisp) ; mass storage device EVEN %MediatedInterrupt(2,0,NMaskInterrupt) ; non maskable interrupts %MediatedInterrupt(11,0FFh,TimerInterrupt) )FI ; programmable timer %IF (%wsType EQ iwsIopMaster) THEN ( %MediatedInterrupt(%iopIntLevel+8,0FFh,IopIsr) ; IOP communication )FI %IF (%wsType EQ aws210) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(2, NMaskInterrupt) ; Non-maskable interrupt(parity) %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(5, CEntry) ; CTOS kernal primatives %RawInterrupt(6, RqInterface) ; system service requests %RawInterrupt(7, OsSubEntry) ; system common routines %RawInterrupt(12,IsrNull) ; Transmit ready (channel A)interrupt %RawInterrupt(13,IsrExStat) ; External status change (Channel A) %RawInterrupt(14,IsrNull) ; First character received (Channel A)-ignore %RawInterrupt(15,IsrRxspec) ; End of frame(Channel A) %RawInterrupt(23, pIret) ; Funny interrupt for Comm Dma(when 8259 exists) %MediatedInterrupt(8,0FFh,KbdTxInt) ; Transmit ready interrupt(channel B) %IF(%fAwsPIT)THEN( %MediatedInterrupt(9,0FFh,TimerInterrupt) ; Timer interrupt(channel B) )ELSE( %MediatedInterrupt(9,0FFh,RTCInterrupt) ; Timer interrupt(channel B) )FI %MediatedInterrupt(10,0FFh,KbdRxInt) ; Receive ready interrupt(channel B) %MediatedInterrupt(11,0FFh,KbdErrInt) ; Special receive condition interrupt(channel B) )FI %IF (%wsType EQ aws220_240) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(2, NMaskInterrupt) ; Non-maskable interrupt(parity) %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(5, CEntry) ; CTOS kernal primatives %RawInterrupt(6, RqInterface) ; system service requests %RawInterrupt(7, OsSubEntry) ; system common routines %IF (%localFS EQ 1) THEN ( %RawInterrupt(12,IsrNull) ; Transmit ready (channel A)interrupt %RawInterrupt(13,IsrExStat) ; External status change (Channel A) %RawInterrupt(14,IsrNull) ; First character received (Channel A)-ignore %RawInterrupt(15,IsrRxspec) ; End of frame(Channel A) )FI %RawInterrupt(19,RawCommNub) ; comm interrupts %RawInterrupt(23, pIret) ; Funny interrupt for Comm Dma %MediatedInterrupt(8,0FFh,KbdTxInt) ; Transmit ready interrupt(channel B) %IF(%fAwsPIT)THEN( %MediatedInterrupt(9,0FFh,TimerInterrupt) ; Timer interrupt(channel B) )ELSE( %MediatedInterrupt(9,0FFh,RTCInterrupt) ; Timer interrupt(channel B) )FI %MediatedInterrupt(10,0FFh,KbdRxInt) ; Receive ready interrupt(channel B) %MediatedInterrupt(11,0FFh,KbdErrInt) ; Special receive condition interrupt(channel B) %MediatedInterrupt(20,0FFh,L4IntDisp) ; Line printer interrupt %IF (%fHDisks EQ 0) THEN ( %MediatedInterrupt(22,0FFh,FloppyInterrupt) ; Floppy interrupt handler )FI %IF (%fHDisks NE 0) THEN ( %MediatedInterrupt(22,0FFh,HardDiskInterrupt) ; Hard disk interrupt handler )FI )FI EVEN %IF (%wsType EQ awsMaster) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(2, NMaskInterrupt) ; Non-maskable interrup6 20,0FFh,L4IntDisp) ; Line printer interrupt %MediatedInterrupt(21,0FFh,HaltCommIO) ; Floppy board 8253 timer for master comm %MediatedInterrupt(22,0FFh,HardDiskInterrupt) ; Floppy interrupt handler )FI %if(%ctosp)then( ; SKULL AND CROSSBONES ; ; EXTREME CAUTION IN CHANGING THE ORDER OF SOFTWARE INTERRUPTS ; ; All interrupt tasks that are entered with an error code must be ; defined BEFORE other interrupt tasks. The last such task must be the ; GP fault handler. ; ; The kernel identifies interrupt tasks that are entered with an error ; code using the predicate sgTss <= sgTssGpFault. ; ; ** NOTE ** ; The parameter sStack (stack size in bytes) should be OR'd with 8000h to ; signal the operating system to place the stack for this interrupt ; handler in low memory. This is so real mode programs can use this interrupt ; level. ; Interrupt tasks entered WITH an error code. %SoftwareInterrupt(8, DoubleTaskFault, 160, 0) %SoftwareInterrupt(12, StackTaskFault, 160, 0) %SoftwareInterrupt(14, PageTaskFault, 160, 0) ; GP fault handler must be last %SoftwareInterrupt(13, GPTaskFault, 160, 0) ; Interrupt tasks entered WITHOUT an error code. %SoftwareInterrupt(1, TraceRawInt, 128, 0) ; Convergent debugger %SoftwareInterrupt(2, NmiTaskFault, 160, 0) ; Non-maskable interrupt(parity) %SoftwareInterrupt(3, BreakRawInt, 128, 0) ; Convergent debugger %SoftwareInterrupt(9, CoprocessorOverrun, 128, 0) %SoftwareInterrupt(16, CoprocessorError, 128, 0) %SoftwareInterrupt(75, CoprocessorNotPresentInt, 128, 0FFh) %IF (%wsType EQ ngenCluster) THEN ( %HardwareInterrupt(68, SigIsr, 128, 0) ; Cluster comm interrupts )FI %IF (%wsType EQ ngen) THEN ( %IF (%localFS EQ 1) THEN ( %HardwareInterrupt(68, SigIsr, 128, 0) ; Cluster comm interrupts ) FI %HardwareInterrupt(255,FloppyInterrupt, 320, 0FFh); Floppy interrupt %IF(%fHDisks NE 0) THEN ( %HardwareInterrupt(67,HardDiskInterrupt, 320, 0FFh) ; hard disk %HardwareInterrupt(84,SCSIDiskInterrupt, 320, 0FFh) ; NEWGEN SCSI disk ) FI )FI %IF (%wsType EQ ngenMaster) THEN ( %HardwareInterrupt(68, SigIsr, 128, 0) ; Cluster comm interrupts %HardwareInterrupt(255,FloppyInterrupt, 320, 0FFh); Floppy interrupt %IF(%fHDisks NE 0) THEN ( %HardwareInterrupt(67,HardDiskInterrupt, 320, 0FFh) ; hard disk %HardwareInterrupt(84,SCSIDiskInterrupt, 320, 0FFh) ; NEWGEN SCSI disk )FI )FI %HardwareInterrupt(64,XINTR0, 8000h+128, 0) ; XINTRO %HardwareInterrupt(65,RawCommNub, 8000h+128, 0) ; RS232 comm interrupts %HardwareInterrupt(66,XINTR1, 8000h+128, 0) ; XINTR1 %HardwareInterrupt(69,TimerInterrupt, 8000h+256, 0FFh); programmable timer %HardwareInterrupt(70,IntHKbd, 512, 0FFh) ; keyboard %HardwareInterrupt(71,HINTR71, 128, 0FFh) ; Special OEM %HardwareInterrupt(80, RTCInterrupt, 128, 0) %HardwareInterrupt(81,XINTR3, 128, 0FFh) ; Special OEM %HardwareInterrupt(82,XINTR4, 128, 0) ; XINTR4 %HardwareInterrupt(83,LpInterrupt, 256, 0FFh); Line printer interrupthandler %HardwareInterrupt(87,HINTR87, 128, 0FFh) ; Special OEM ; end of ctosp definitions )else( %IF (%wsType EQ ngenCluster) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(19, RTCInterrupt) %RawInterrupt(40, PmTraceRawInt) ;Protected mode trace (debugger) %RawInterrupt(41, PmBreakRawInt) ;Protected mode breakpoint (debugger) %RawInterrupt(65, RawCommNub) ; RS232 comm interrupts %RawInterrupt(68, SigIsr) ; Cluster comm interrupts %RawInterrupt(72, CEntry) ; CTOS kernal primatives %RawInterrupt(73, RqInterface) ; system service requests %RawInterrupt(74, OsSubEntry) ; system common routines %MediatedInterrupt(2,0,NMaskInterrupt) ; non maskable interrupts %MediatedInterrupt(10,0FFh,LpInterrupt) ; Line printer interrupt %MediatedInterrupt(69,0FFh,TimerInterrupt) ; programmable timer %MediatedInterrupt(70,0FFh,IntHKbd) ; keyboard )FI %IF (%wsType EQ ngen) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(19, RTCInterrupt) %RawInterrupt(40, PmTraceRawInt) ;Protected mode trace (debugger) %Raw6   )FI%' Megaframe ;################################################################ ; The following list of request codes are those requests for which the ; cluster agent will NOT mark the user as using resources on the master ; and therefore require no termination on the master. Clusters ; which issue to the master only the requests which are in this list will ; not have termination requests sent to the master. ; %RequestNoRemoteTermination(14) ;GetDateTime %RequestNoRemoteTermination(235) ;CheckForMail %RequestNoRemoteTermination(101Ah) ;RemoteTermination %EndRemoteTermination ;################################################################ EVEN ;############################################################### ; ; Space occupied by the tables below this location will be ; recalimed by the CTOS after its initialization ; ; ANY RE-ORDERING OF THIS FILE MUST NOT CROSS THIS BOUNDRY !!! ; ; CTOS has been carefully constructed so that the various parts ; of CTOS reside either before this boundry (residInterrupt(41, PmBreakRawInt) ;Protected mode breakpoint (debugger) %RawInterrupt(65, RawCommNub) ; RS232 comm interrupts %IF (%localFS EQ 1) THEN ( %RawInterrupt(68, SigIsr) ; Cluster comm interrupts ) FI %RawInterrupt(72, CEntry) ; CTOS kernal primatives %RawInterrupt(73, RqInterface) ; system service requests %RawInterrupt(74, OsSubEntry) ; system common routines %MediatedInterrupt(2,0,NMaskInterrupt) ; non maskable interrupts %MediatedInterrupt(10,0FFh,LpInterrupt) ; Line printer interrupt %IF (%FS) THEN (%' Not used even in FS. FS does SetIntHandler. %MediatedInterrupt(15,0FFh,FloppyInterrupt) ; Floppy interrupt handler %IF(%fHDisks NE 0) THEN ( %MediatedInterrupt(67,0FFh,HardDiskInterrupt) ; hard disk %MediatedInterrupt(84,0FFh,SCSIDiskInterrupt) ; SCSI disk )FI)FI%' FS %MediatedInterrupt(69,0FFh,TimerInterrupt) ; programmable timer %MediatedInterrupt(70,0FFh,IntHKbd) ; keyboard )FI %IF (%wsType EQ ngenMaster) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(3, BreakRawInt) ; Convergent debugger %RawInterrupt(19, RTCInterrupt) %RawInterrupt(40, PmTraceRawInt) ;Protected mode trace (debugger) %RawInterrupt(41, PmBreakRawInt) ;Protected mode breakpoint (debugger) %RawInterrupt(65, RawCommNub) ; RS232 comm interrupts %RawInterrupt(68, SigIsr) ; Cluster comm interrupts %RawInterrupt(72, CEntry) ; CTOS kernal primatives %RawInterrupt(73, RqInterface) ; system service requests %RawInterrupt(74, OsSubEntry) ; system common routines %MediatedInterrupt(2,0,NMaskInterrupt) ; non maskable interrupts %MediatedInterrupt(10,0FFh,LpInterrupt) ; Line printer interrupt %IF (%FS) THEN (%' Not used even in FS. FS does SetIntHandler. %MediatedInterrupt(15,0FFh,FloppyInterrupt) ; Floppy interrupt handler %IF(%fHDisks NE 0) THEN ( %MediatedInterrupt(67,0FFh,HardDiskInterrupt) ; hard disk %MediatedInterrupt(84,0FFh,SCSIDiskInterrupt) ; SCSI disk )FI)FI%' FS %MediatedInterrupt(69,0FFh,TimerInterrupt) ; programmable timer %MediatedInterrupt(70,0FFh,IntHKbd) ; keyboard )FI )fi %IF(%fMFHardware) THEN ( %RawInterrupt(1, TraceRawInt) ; Convergent debugger %RawInterrupt(3, BreakRawInt) ; Convergent debugger %If ((%fTP) OR (%fCP)) Then ( %RawInterrupt(10, LpIntDisp) ; Line printer interrupt %RawInterrupt(18, TpPollerInt) ; Cp/Tp's character polling clock ) ELSE ( %RawInterrupt(18, RTCtick) ; Real time clock ) FI %IF (%fCP) THEN ( %RawInterrupt(12,CpSrpIsr) %RawInterrupt(14,RawCommNub) ) FI %IF (%fTP) THEN ( %RawInterrupt(14,RawCommNub) %RawInterrupt(15,RawCommNub) )FI %RawInterrupt(13,Chime) %RawInterrupt(32, CEntry) ; CTOS kernel primatives %RawInterrupt(33, RqInterface) ; system service requests %RawInterrupt(34, OsSubEntry) ; system common routines EVEN %MediatedInterrupt(2,0,NMaskInterrupt) ; Non-maskable interrupt %MediatedInterrupt(19,0ffh,TimerInterrupt) ; Pit %If ((%fFP) OR (%fDP)) Then (%' Not used even in FS. FS does SetIntHandler. %IF (%FS) THEN ( %MediatedInterrupt(12, 0FFh, HardDiskInterrupt) ; mass storage device )FI%' FS ) FI 7 ent code and ; data) or after (initialization code and data). There are ; five segments which are used in controlling this: ; ; "code" ... anything in this segment will be resident ; "const" .. anything in this segment will be resident ; "data" ... anything in this segment will be resident if ; the module is linked before sysgen.obj, or ; non resident if linked after ; "stack" .. anything in this segment will be nonresident ; "coed" ... anything in this segment will be non ; resident (ie discarded after intialization) ; ; The CTOS processes are allocated stacks out of memory ; reserved by the following macro call, and the stack segment ; is used only for a stack during CTOS initialization. ; ; The following macro is invoked with one argument, the number ; of bytes to be reserved for CTOS to use to build its ; structures, tables, and to allocate the stacks for the ; different processes (declared later in this file). The macro ; variable sOsData may be defined in the prefix file if ; desired. The OS will crash with as error 101 if this value ; is too small. ;################################################################ %IF (%*IsDef(%sOsData)) THEN ( %ResidentDataBoundry(%sOsData) ) ELSE ( %IF (%wsType EQ iwsStandAlone) THEN (%ResidentDataBoundry(25600))FI %IF (%wsType EQ iwsCluster) THEN (%ResidentDataBoundry(25600))FI %IF (%wsType EQ iwsMiniMaster) THEN (%ResidentDataBoundry(25600))FI %IF (%wsType EQ iwsIopMaster) THEN (%ResidentDataBoundry(30720))FI %IF (%wsType EQ aws210) THEN (%ResidentDataBoundry(15240))FI %IF (%wsType EQ aws220_240) THEN (%ResidentDataBoundry(20480))FI %IF (%wsType EQ awsMaster) THEN (%ResidentDataBoundry(26600))FI %IF (%wsType EQ ngenCluster) THEN (%ResidentDataBoundry(15240))FI %IF (%wsType EQ ngen) THEN (%ResidentDataBoundry(20480))FI %IF (%wsType EQ NGenMaster) THEN (%ResidentDataBoundry(26600))FI %IF (%fMFHardware) THEN (%ResidentDataBoundry(25600))FI )FI EVEN ;############################################################### ; ; Table which describes reserved exchanges ; for CTOS resident processes. List each exchange only once. ; ;############################################################### %AssignSysExch(10) ;lclFileSys %AssignSysExch(11) ;CTOS "File system" %AssignSysExch(12) ;agent %AssignSysExch(5) ;termination %AssignSysExch(1) ;kbd %AssignSysExch(24) ;kbd internal %AssignSysExch(3) ;sysin or LogProc_MF %AssignSysExch(15) ;init process %IF (%fNoFileSystem EQ 0) THEN (%' %AssignSysExch(8) ;massIo %AssignSysExch(9) ;exchFsPocket )FI %IF(%clusterConfig EQ 1)THEN(%' %AssignSysExch(17) ;filter process )FI %IF(%clusterConfig EQ 2)THEN(%' %AssignSysExch(17) ;master agent receiver, also MF %AssignSysExch(13) ;master agent )FI %IF (%fMulPar) THEN (%' %AssignSysExch(26) ;swapper internal %AssignSysExch(2) ;video semaphore internal and Kbd_MF )FI %IF (%fMFHardware) THEN (%' %AssignSysExch(18) ;Icc %AssignSysExch(19) ;Icc %AllocSysExch(FilterProcessExch) ;File spec routing process %AllocSysExch(exchFilterPocket) ;File spec routing process pocket )FI %IF (%fCP OR %fTp) THEN (%' %AssignSysExch(16) ;ExchVidKbd %AssignSysExch(20) ;ExchTpReq %AssignSysExch(21) ;ExchTpResp )FI %IF (%fVarPar) THEN (%' %' The following must be done last, so they choose an exch nobody else wants. %AllocSysExch(exchSchedPocket) ;any free exch )FI EVEN ;############################################################### ; ; EXCHANGE MAPPING TABLE: ; ; Virtual exchanges are negative numbers, -1,-2.. ; At boot time, exchange tables are scanned, ; all virtual exchanges replaced by: ; rgExchReal(NOT vexch) ; ; The macros SymExchange and MapExchange define the table: ; ; SymExchange(name, value) ; defines a local symbolic name for an exchange, ; for readability. Doesn't make a table entry. ; ; MapExchange(-n, name, value) ; defines a local name and makes a table entry. ; The numbers -n must be in order, -1 -2 -3 ... ; with no duplicates and no omissions. ; ; ; This section uses the macro symbols "clusterConfig" and "localFS" ; to determine the Request configuration of the CTOS being built. ; Requests are7  ,exchgMstrAgent, 0) %MapExchange(-10,exchgLog, 3) %MapExchange(-11,exchgFilterPros, FilterProcessExch) %SymExchange(exchgTpReq, 0) ) FI %IF (%fCP) Then ( %MapExchange(-1,exchgAgent, 0) %MapExchange(-2,exchgNotInstalled, 0) %MapExchange(-3,exchgMassIO, 0) ; Mass storage %MapExchange(-4,exchgFilSys1, 0) ; File system manager/Utility %MapExchange(-5,exchgFilSys2, exchgMassIo) %MapExchange(-6,exchgFilSys3, 0) ; File system manager/ Utility %MapExchange(-7,exchgFilSys4, exchgLclFs) ; File system manager/ Utility %MapExchange(-8,exchgChgUsrN, 0) ; Mp Change User Num Rq for FS %MapExchange(-9,exchgMstrAgent, 12) %MapExchange(-10,exchgLog, 3) %MapExchange(-11,exchgFilterPros, FilterProcessExch) %SymExchange(exchgTpReq, 20) ) FI %MapExchange(-12,exchgMem, exchgLclFs) %MapExchange(-13,exchgVp, 0) %MapExchange(-14,exchgKbd, exchgKbdRes) %MapExchange(-15,exchgTp, exchgTpReq) ) ELSE (%' Workstation %IF (%fVarPar) THEN (%' %AllocSysExch(exchSched) directed to different exchanges depending on the ; cluster and file system configuration of the OS. There are ; four different versions as follows: ; ; cluster localFS Configuration ; config ; ; 0 1 Standalone OS. (e.g., nStnd) ; ; 1 0  Cluster OS. (e.g., nClstr) ; ; 1 1 Cluster OS with Local File System. (e.g., nClstrLfs) ; ; 2 1 Master OS. (e.g., nMstr) ; ; Stnd Cls/Lfs Master ; exchAgent 0 12 12 ; exchNotInstalled 0 12 0 ; exchMassIO 8 12/8 8 ; exchFilSys1 10 12/10 10 ; exchFilSys2 8 12/8 8 ; exchFilSys3 10 12/17 10 ; exchFilSys4 11 12 11 ; exchChgUsrN 10 12 10 ; exchMstrAgent 0 0 12 ; exchResex 11 10/11 11 ; exchLog 10 12 10 (or 3 if SRP) ; exchFilterPros 0 0/17 0 ; exchMem 11 11 11 (or exchSched if fVarPar) ; exchVp 0 0 0 (or exchSched if fVarPar) ; exchKbd 0 0 0 (or exchKbdRes if fKbdRes) ; exchTp 0 0 0 (or exchgTp if Tp or Cp) ; ;############################################################### ; ; Exchange definitions -- ; Exchanges 0 to 27 are reserved for CTOS processes. ; %SymExchange(exchgKbdRes, 1) ; Resident Keyboard process %SymExchange(exchgLclFs, 10) ; File system manager %IF (%fMFHardware) THEN ( %SymExchange(exchgResex, 11) ; Utility %IF ((%fFP) Or (%fDP)) Then ( %MapExchange(-1,exchgAgent, 0) %MapExchange(-2,exchgNotInstalled, 0) %MapExchange(-3,exchgMassIO, 8) ; Mass storage %MapExchange(-4,exchgFilSys1, exchgLclFs) ; File system manager/Utility %MapExchange(-5,exchgFilSys2, exchgMassIO)  %MapExchange(-6,exchgFilSys3, exchgLclFs) ; File system manager/ Utility %MapExchange(-7,exchgFilSys4, exchgLclFs) ; File system manager/ Utility %MapExchange(-8,exchgChgUsrN, exchgLclFs) ; Mp Change User Num Rq for FS %MapExchange(-9,exchgMstrAgent, 0) %MapExchange(-10,exchgLog, 3) %MapExchange(-11,exchgFilterPros, FilterProcessExch) %SymExchange(exchgTpReq, 0) ) FI %IF (%fTP) Then ( %MapExchange(-1,exchgAgent, 0) %MapExchange(-2,exchgNotInstalled, 0) %MapExchange(-3,exchgMassIO, 0) ; Mass storage %MapExchange(-4,exchgFilSys1, 0) ; File system manager/Utility %MapExchange(-5,exchgFilSys2, exchgMassIo) %MapExchange(-6,exchgFilSys3, 0) ; File system manager/ Utility %MapExchange(-7,exchgFilSys4, exchgLclFs) ; File system manager/ Utility %MapExchange(-8,exchgChgUsrN, 0) ; Mp Change User Num Rq for FS %MapExchange(-9,exchgMstrAgent, 0) %MapExchange(-10,exchgLog, 3) %MapExchange(-11,exchgFilterPros, FilterProcessExch) %SymExchange(exchgTpReq, 20) ) FI %IF (%fSP) Then ( %MapExchange(-1,exchgAgent, 0) %MapExchange(-2,exchgNotInstalled, 0) %MapExchange(-3,exchgMassIO, 0) ; Mass storage %MapExchange(-4,exchgFilSys1, 0) ; File system manager/Utility %MapExchange(-5,exchgFilSys2, exchgMassIo) %MapExchange(-6,exchgFilSys3, 0) ; File system manager/ Utility %MapExchange(-7,exchgFilSys4, exchgLclFs) ; File system manager/ Utility %MapExchange(-8,exchgChgUsrN, 0) ; Mp Change User Num Rq for FS %MapExchange(-98  ; Variable Partition process )FI %IF((%clusterConfig EQ 1) AND NOT %localFS) THEN(%' CWS %SymExchange(exchgResex, 10)%' CTOS.LIB sends ResetVideo to exch 10. ) ELSE ( %SymExchange(exchgResex, 11) )FI ; ; Standalone workstation: ; %IF (%clusterConfig EQ 0) THEN( %MapExchange(-1,exchgAgent, 0) ; no agent %MapExchange(-2,exchgNotInstalled, 0) %MapExchange(-3,exchgMassIO, 8) ; Mass storage I/O manager %MapExchange(-4,exchgFilSys1, exchgLclFs) ; File system manager %MapExchange(-5,exchgFilSys2, exchgMassIO) %MapExchange(-6,exchgFilSys3, exchgLclFs) ; File system manager %MapExchange(-7,exchgFilSys4, exchgResex) ; Utility %MapExchange(-8,exchgChgUsrN, exchgLclFs) ; Multi-Part Change User Num Rq for FS %MapExchange(-9,exchgMstrAgent, 0) %MapExchange(-10,exchgLog, exchgResex) %MapExchange(-11,exchgFilterPros, 0) )FI ; ; cluster workstation: ; %IF (%clusterConfig EQ 1) THEN( %MapExchange(-1,exchgAgent, 12) ; Cluster work station agent %MapExchange(-2,exchgNotInstalled, exchgAgent) %IF (%localFS EQ 0) THEN ( %MapExchange(-3,exchgMassIO, exchgAgent) ; Mass storage I/O manager %MapExchange(-4,exchgFilSys1, exchgAgent) ; Local File System File Spec Filter Process %MapExchange(-5,exchgFilSys2, exchgAgent) %MapExchange(-6,exchgFilSys3, 17) ; File system filter sends to agent and local fs %MapExchange(-7,exchgFilSys4, exchgAgent) ; File system manager/ Utility ) FI %IF (%localFS NE 0) THEN ( %MapExchange(-3,exchgMassIO, 8) ; Mass storage I/O manager %MapExchange(-4,exchgFilSys1, exchgLclFs) %MapExchange(-5,exchgFilSys2, exchgMassIO) %MapExchange(-6,exchgFilSys3, 17) ; File system filter sends to agent and local fs %MapExchange(-7,exchgFilSys4, exchgAgent) ; File system manager/ Utility ) FI %MapExchange(-8,exchgChgUsrN, exchgAgent) ; Multi-Part Change User Num Rq for FS %MapExchange(-9,exchgMstrAgent, 0) %MapExchange(-10,exchgLog, exchgAgent) %MapExchange(-11,exchgFilterPros, 17) )FI ; ; Master workstation: (mini and full clusters) ; %IF (%clusterConfig EQ 2) THEN( %MapExchange(-1,exchgAgent, 12) ; Master work station agent %MapExchange(-2,exchgNotInstalled, 0) %MapExchange(-3,exchgMassIO, 8) ; Mass storage %MapExchange(-4,exchgFilSys1, exchgLclFs) ; File system manager %MapExchange(-5,exchgFilSys2, exchgMassIO) %MapExchange(-6,exchgFilSys3, exchgLclFs) ; File system manager %MapExchange(-7,exchgFilSys4, exchgResex) ; Utility %MapExchange(-8,exchgChgUsrN, exchgLclFs) ; Multi-Part Change User Num Rq for FS %MapExchange(-9,exchgMstrAgent, exchgAgent) %MapExchange(-10,exchgLog, exchgResex) %MapExchange(-11,exchgFilterPros, 0) )FI %IF (%fVarPar) THEN( %MapExchange(-12,exchgMem, exchSched) %MapExchange(-13,exchgVp, exchSched) ) ELSE ( %MapExchange(-12,exchgMem, exchgResex) %MapExchange(-13,exchgVp, 0) )FI %IF (%fKbdRes) THEN( %MapExchange(-14,exchgKbd, exchgKbdRes) ) ELSE ( %MapExchange(-14,exchgKbd, 0) )FI %MapExchange(-15,exchgOvly, exchgResex) %IF (%clusterConfig EQ 0) THEN( %MapExchange(-16,exchRemoteTerm, 0) ;standalone )ELSE( %IF (%clusterConfig EQ 1) THEN( %MapExchange(-16,exchRemoteTerm, exchgAgent) ;cluster )ELSE( %MapExchange(-16,exchRemoteTerm, 5) ;master )FI )FI )FI%' Workstation EVEN ;############################################################### ; ; Define names of files containing loadable requests. ; Files are loaded at boot after the file system is up. ; Files with names of the form: ; [sys]Request.?.sys ; where ? is a character 0-9, A-Z, are always tried first. ; ;################################################################ %IF (%fMFHardware) THEN ( %IF (%fTP) Then ( %RequestFileName([SYS]REQUEST.TP.SYS); )FI %IF (%fCP) Then ( %RequestFileName([SYS]REQUEST.CP.SYS); )FI %IF ((%fFP) OR (%fDP)) Then ( %RequestFileName([SYS]REQUEST.FP.SYS); )FI %IF (%fSP) Then ( %RequestFileName([SYS]REQUEST.SP.SYS); )FI ) ELSE (%' Workstation %RequestFileName([sys8  c(KbdProcess, 512, 6, %TRUE) %OsProcDesc(LclFsFilterProcess, 128, 6, %TRUE) %OsProcDesc(FileSystem, 512, 7, %TRUE) %OsProcDesc(MstrAgentReceiver, 256, 3, %TRUE) %OsProcDesc(MstrAgent, 256, 5, %TRUE) %OsProcDesc(TpProcess, 512, 4, %TRUE) %OsProcDesc(TerminationProcess, 356, 9, %TRUE) ) FI ; Storage Processor (SMD & tape) %If (%fDP) Then ( %OsProcDesc(KbdProcess, 512, 3, %TRUE) %OsProcDesc(LclFsFilterProcess, 128, 4, %TRUE) %OsProcDesc(FileSystem, 512, 5, %TRUE) %OsProcDesc(TerminationProcess, 356, 7, %TRUE) ) FI ; Storage Processor (tape only) %If (%fSP) Then ( %OsProcDesc(KbdProcess, 512, 3, %TRUE) %OsProcDesc(LclFsFilterProcess, 128, 3, %TRUE) %OsProcDesc(FileSystem, 512, 4, %TRUE) %OsProcDesc(TerminationProcess, 356, 6, %TRUE) ) FI ) ELSE (%' Workstations ; ; Standalone: ; %IF(%wsType EQ iwsStandAlone) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 1, 1) )ELSE( %OsProcDes]Request.ISAM.sys) )FI EVEN ;############################################################### ; ; Table which describes the CTOS resident process. Each ; process is described by 4 attributes: ; ; 1. Process entry point  ; 2. Size of its stack ; 3. priority (0 is highest, 254 lowest) ; 4. default exchange (0 if not required, <> 0 allocs next available) ; ; Stack size -- ; The stack size for a CTOS process must be large enough ; for the largest local variable and procedure call sequence, ; plus enough space for all possible interrupts that can occur. ; CTOS requires 64 bytes of user stack to save the context of a ; process when an interrupt occurs. ;  ; Priorities -- ; In order for CTOS to function correctly, the following ; priority considerations must be obeyed: ; ; Megaframe: ; IccResp ............... highest priority ; IccSvr ................ second highest priority ; KbdProcess ............ lower than Agents (must be process 0) ; TpProcess ............. lower than KbdProcess ; MassIo ................ higher than FileSystem ; SrpAgent .............. lower than MassIo, higher than FileSystem ; FilterPros ............ higher than FileSystem, lower than Icc ; FileSystem ............ lower than MassIo ; LogProcess............. lower than I/O processes, (file system user) ; TerminationProcess .... lowest of CTOS processes ; ; Workstations: ; InitKbdProcess ............ lower than Agents (must be ; process 0) ; MassIo ................ higher than FileSystem ; MstrAgent .............. lower than MassIo, higher than FileSystem ; WsAgent ............... higher than FileSystem ; FileSystem ............ lower than MassIo ; SysInPro .............. lower than I/O processes, (file system user) ; TerminationProcess .... lowest of CTOS processes ; Sched ................. higher than TerminationProcess, lower than ; FileSystem ; ; All user (non CTOS) processes must be worse in priority than ; CTOS processes (The Convergent Executive starts all user ; programs with priority 128). ;############################################################### %IF (%FS) THEN (%' Only %FALSE works for exchange %OsProcDesc(MassIo, 256, 3, %FALSE) %IF (%fMFHardware) THEN ( %OsProcDesc(LogProcess, 256, 5, %FALSE) ) FI ) ELSE (%' CTOS %IF (%fMFHardware) THEN ( %OsProcDesc(IccSvr, 512, 2, 19) ; File Processor %If (%fFP) Then ( %OsProcDesc(KbdProcess, 256, 3, %TRUE)  %OsProcDesc(LclFsFilterProcess, 128, 3, %TRUE) %OsProcDesc(FileSystem, 512, 4, %TRUE) %OsProcDesc(TerminationProcess, 356, 6, %TRUE) ) FI ; Terminal Processor %If (%fTP) Then ( %OsProcDesc(KbdProcess, 512, 3, %TRUE) %OsProcDesc(LclFsFilterProcess, 128, 3, %TRUE) %OsProcDesc(FileSystem, 512, 4, %TRUE) %OsProcDesc(TpProcess, 512, 5, %TRUE) %OsProcDesc(TerminationProcess, 356, 7, %TRUE) ) FI ; Communications Processor %If (%fCP) Then ( %OsProcDes9 c(KbdProcess, 512, 1, 1) )FI %OsProcDesc(MassIo, 256, 2, 0) %OsProcDesc(FileSystem, 500, 3, 1) %OsProcDesc(SysInPro, 256, 4, 1) %OsProcDesc(TerminationProcess, 256, 6, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 5, 1) )FI )FI ; ; Cluster workstation: ; %IF(%wsType EQ iwsCluster) THEN ( %IF (%localFS EQ 0) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 2, 1) )FI %OsProcDesc(WsAgent, 150, 1, 1) %OsProcDesc(FileSystem, 500, 3, 1) %OsProcDesc(SysInPro, 256, 4, 1) %OsProcDesc(TerminationProcess, 256, 6, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 5,  1) )FI )FI %IF (%localFS NE 0) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 2, 1) )FI %OsProcDesc(WsAgent, 150, 1, 1) %OsProcDesc(MassIo,  256, 3, 0) %OsProcDesc(LclFsFilterProcess, 256, 4, 1) %OsProcDesc(FileSystem, 500, 5, 1) %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 8, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 7, 1) )FI )FI )FI ; ; Master workstation (mini-cluster): ; %IF(%wsType EQ iwsMiniMaster) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 3, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 3, 1) )FI %OsProcDesc(MstrAgent, 256, 1, 1) %OsProcDesc(MstrAgentReceiver, 256, 2, 1) %OsProcDesc(MassIo, 256, 4, 0) %OsProcDesc(FileSystem, 500, 5, 1) %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 8, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 7, 1) )FI )FI ; ; Master workstation (full cluster): ; %IF(%wsType EQ iwsIopMaster) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 2, 1) )FI %OsProcDesc(SrpAgent, 256, 1, 1) %OsProcDesc(MassIo, 256, 3, 0) %OsProcDesc(FileSystem, 500, 4, 1) %OsProcDesc(SysInPro, 256, 5, 1) %OsProcDesc(TerminationProcess, 256, 7, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 6, 1) )FI )FI ; ; Application workstation ; %IF(%wsType EQ aws210) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess,  512, 2, 1) )FI %OsProcDesc(WsAgent, 150, 1, 1) %OsProcDesc(FileSystem, 500, 3, 1) %OsProcDesc(SysInPro, 256, 4, 1) %OsProcDesc(TerminationProcess, 256, 6, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 5, 1) )FI )FI ; ; AWS 220/230/240 ; %IF(%wsType EQ aws220_240) THEN ( %IF(%localFS EQ 0) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 1, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 1, 1) )FI %OsProcDesc(MassIo, 256, 2, 0) %OsProcDesc(FileSystem, 500, 3, 1) %OsProcDesc(SysInPro, 256, 4, 1) %OsProcDesc(TerminationProcess, 256, 6, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 5, 1) )FI )FI %IF(%localFS NE 0) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 2, 1) )FI %OsProcDesc(WsAgent, 150, 1, 1) %OsProcDesc(MassIo, 256, 3, 0) %OsProcDesc(LclfsFilterProcess, 256, 4, 1) %OsProcDesc(FileSystem, 500, 5, 1) %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 8, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 7, 1) )FI )FI )FI ; ; Low-cost Master workstation (AWS-4): ; %IF(%wsType EQ awsMaster) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 3, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 3, 1) )FI %OsProcDesc(MstrAgent, 256, 1, 1)9  (iLine, pTxIsr, pExtIsr, pRxIsr, pSpRxIsr) ; ; where iLine - 0 means Channel A, 1 means Channel B ; pTxIsr, pExtIsr, pRxIsr, pSpRxIsr are the entry ; points of the communication interrupt handlers. ; (0 means default communication interrupt ; handler) ;################################################################ %IF(%wsType EQ iwsCluster OR %wsType EQ iwsMiniMaster) THEN ( %SysCommInt(0,0,0,0,0) ; Reserve Channel A for cluster )FI EVEN ;############################################################### ; CTOS INITIALIZATION -- ; The following macros generate three tables of pointers which ; are used by CTOS during its initializaion phase. All of the ; routines pointed to in these tables reside in modules which ; are linked near the end of CTOS, and the code for these ; modules is discarded after initialization is complete. These ; routines should have their code segments named "coed", and ; should use "data" for the name of their data segments. This ; is to insure that the Linker will place the co %OsProcDesc(MstrAgentReceiver, 256, 2, 1) %OsProcDesc(MassIo, 256, 4, 0) %OsProcDesc(FileSystem, 500, 5, 1) %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 8, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 7, 1) )FI )FI ; ; nGen workstation ; %IF(%wsType EQ ngenCluster) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 2, 1) )FI %OsProcDesc(WsAgent, 150, 1, 1) %OsProcDesc(LclfsFilterProcess, 256, 3, 1) %OsProcDesc(FileSystem, 500, 3, 1) %OsProcDesc(SysInPro, 256, 4, 1) %OsProcDesc(TerminationProcess, 256, 6, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 5, 1) )FI )FI ; ; NGEN standalone workstation ; %IF(%wsType EQ ngen) THEN ( %IF(%localFS EQ 0) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 1, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 1,  1) )FI %'OsProcDesc(MassIo, 256, 2, 0) %OsProcDesc(FileSystem, 500, 3, 1) %OsProcDesc(SysInPro, 256, 4, 1) %OsProcDesc(TerminationProcess, 256, 6, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 5, 1) )FI )FI %IF(%localFS NE 0) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 2, 1) )ELSE( %OsProcDesc(KbdProcess, 512, 2, 1) )FI %OsProcDesc(WsAgent, 150, 1, 1) %'OsProcDesc(MassIo,  256, 3, 0) %OsProcDesc(LclfsFilterProcess, 256, 4, 1) %OsProcDesc(FileSystem, 500, 5, 1) %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 8, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 7, 1) )FI )FI )FI ; ; NGen Master workstation : ; %IF(%wsType EQ NGenMaster) THEN ( %IF (%fMulpar) THEN ( %OsProcDesc(InitKbdProcess, 512, 3, 1) %OsProcDesc(MstrAgentReceiver, 500, 1, 1) %OsProcDesc(MstrAgent, 500, 2, 1) %'OsProcDesc(MassIo, 256, 4, 0) %OsProcDesc(FileSystem, 500, 5, 1) %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 8, 1) %IF (%fVarPar) THEN ( %OsProcDesc(Sched, 400, 7,  1) )FI )ELSE( %OsProcDesc(KbdProcess, 512, 3, 1) %OsProcDesc(MstrAgent, 500, 1, 1) %OsProcDesc(MstrAgentReceiver, 500, 2, 1) %OsProcDesc(MassIo, 256, 4, 0) %OsProcDesc(FileSystem, 500, 5, 1)  %OsProcDesc(SysInPro, 256, 6, 1) %OsProcDesc(TerminationProcess, 256, 7, 1) )FI )FI )FI%' Workstation )FI%' CTOS EVEN ;############################################################### ; The following macros are used to reserve communication ; channels for use by the resident communication interrupt ; handlers. There are two communication channels in the ; system - Channel A and Channel B. In cluster configuration ; Channel A is reserved by the CTOS. ; ; Macro definition: ; ; SysCommInt: de and data at ; the end of the run file, after the "ResidentDataBoundry" ; mentioned earlier in this file. The routines should obey the ; Convergent programming conventions related to register usage ; (refer to The Assembly Language Manual). The routines are ; executed at one of three times during CTOS initialization: ; ; InitProcHardware ..... After CTOS is booted, and after ; memory and bus timeout tests are ; completed. This is the place to put ; hardware test and verification ; routines. ; InitProcIntDisable .... After CTOS structures hav been ; initialized but before any processes ; have been started. This is the place to ; put hardware intitialization routines. ; InitProcIntEnable .... After interrupts are enabled these ; routines are executed as if they were a ; user program. (CTOS processes are ; running). This is the place to put user ; process initialization routines. The ; routines are called in the order given, ; with no arguments, as subroutines using ; the Assembly Language indirect far call ; instruction. ; DESCRIPTION OF CONVERGENT ROUTINES -- ; Workstation: ; SysgenInit .... Set variables according to rgSysgen structure ; InitVideo ..... make sure video hardware works ; KbdTest ....... see if kbd hardware works ; RqExInit ...... Map virtual exchanges ; FsIn1 ......... File system initialization ; Init8255 ...... LED port ; InitRtc ....... RTC initialization ; InitSysCom .... System common area initialization ; Init8237 ...... DMA Initialization ; Init8251 ...... 8251A Initialization ; KbdInit ....... Keyboard initialization ; InitCounter ... 8253 counter 0 initialization ; Init8259 ...... 8259A Initialization ; CheckDisks .... Look for hard disk ; FsIn2 ......... File system initialization routine ; DumpAndMTest .. Dump & memory test above 128K ; InitDebugNub .. Debugger initialization routine ; LoadFileInit .. Loads boot-time configuration file(s) ; WsInit ........ Cluster WS Agent Initialization ; InitMstr ...... Master WS Cluster Initialization ; IopInit ....... Master WS Cluster Initialization ; IopStart ...... Master WS Cluster Initialization ; ; Megaframe: ; CommIntInit ... Comm software initialization # ; FsIn1 ......... File system initialization (*) # ; FsIn2 ......... File system initialization routine # ; Init51 ........ 8251A Initialization # ; Init59 ........ 8259A Initialization # ; InitDebugNub .. Debugger initialization routine # ; InitRtc ....... RTC initialization  # ; InitPIT ....... PIT initialization # ; InitSysCom .... System common area initialization # ; MemoryInit .... Had any amnesia in your family? # ; XBufInit ...... CP Cluster XBuf Initialization # ;  # ; (*) FsIn1 must be included in all boards' initialization as # ; it is responsible for Ucb initialization # ;################################################################ %IF (%FS) THEN ( %InitProcIntDisable(FsIn1) %InitProcIntDisable(ReleaseFileCode) %InitProcIntDisable(InitSysCom) %InitProcIntEnable(InitRtc) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) ) ELSE (%' CTOS %IF (%fMFHardware) THEN ( %InitProcHardWare(MemoryInit) %InitProcHardWare(ClockTest) %InitProcIntDisable(RqExInit) %InitProcIntDisable(IccInit) %InitProcIntDisable(InitUcbs) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitPIT) %InitProcIntDisable(StartRTC) %InitProcIntDisable(Init51) %If (%fDebugger NE 0) Then ( %InitProcIntEnable(InitDebugNub) ) Fi %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %If ((%fFP) OR (%fDP)) Then ( %InitProcIntEnable(FsIn2) )FI %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) ) ELSE (%' Workstation %' For all workstation types - %InitProcHardWare(SysgenInit) %IF (%wsType EQ iwsStandAlone) THEN( %InitProcHardWare(MemoryInit) %Init:  %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitMstr) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%wsType EQ iwsIopMaster) THEN( %InitProcHardWare(MemoryInit) %InitProcHardWare(FindGraphicsBoard) %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(Init8255) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(Init8237) %InitProcIntDisable(Init8251) %InitProcIntDisable(KbdInit) %InitProcIntDisable(InitCounter) %InitProcIntDisable(Init8259) %InitProcIntDisable(CheckDisks) %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitDProcHardWare(FindGraphicsBoard) %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(Init8255) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(Init8237) %InitProcIntDisable(Init8251) %InitProcIntDisable(KbdInit) %InitProcIntDisable(InitCounter) %InitProcIntDisable(Init8259) %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%wsType EQ iwsCluster) THEN(  %IF (%localFS EQ 0) THEN ( %InitProcHardWare(MemoryInit) %InitProcHardWare(FindGraphicsBoard) %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(RqExInit) %IF (%fMulpar NE 0) THEN (%InitProcIntDisable(FsIn1)) FI %InitProcIntDisable(Init8255) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(Init8237) %InitProcIntDisable(Init8251) %InitProcIntDisable(KbdInit) %InitProcIntDisable(InitCounter) %InitProcIntDisable(Init8259) %InitProcIntDisable(WsInit) %InitProcIntEnable(WsInit1) %InitProcIntEnable(InitVam) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%localFS NE 0) THEN ( %InitProcHardWare(MemoryInit) %InitProcHardWare(FindGraphicsBoard) %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(Init8255) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(Init8237) %InitProcIntDisable(Init8251) %InitProcIntDisable(KbdInit) %InitProcIntDisable(InitCounter) %InitProcIntDisable(Init8259) %InitProcIntDisable(CheckForCommBoot) %InitProcIntDisable(WsInit) %InitProcIntEnable(WsInit1) %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI )FI %IF (%wsType EQ iwsMiniMaster) THEN( %InitProcHardWare(MemoryInit) %InitProcHardWare(FindGraphicsBoard) %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(Init8255) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(Init8237) %InitProcIntDisable(Init8251) %InitProcIntDisable(KbdInit) %InitProcIntDisable(InitCounter) %InitProcIntDisable(Init8259) %InitProcIntDisable(CheckDisks) ; ebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(IopStart) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%wsType EQ aws210) THEN ( %InitProcIntDisable(Init8259) %InitProcIntDisable(KbdTest) %InitProcIntDisable(TimerTest) %InitProcIntDisable(Init8274) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(InitSyscom) %InitProcIntDisable(InitRtc) %InitProcIntDisable(WsInit) %InitProcIntEnable(WsInit1) %InitProcIntEnable(InitVam) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%wsType EQ aws220_240) THEN ( %InitProcIntDisable(Init8259) %InitProcIntDisable(KbdTest) %InitProcIntDisable(TimerTest) %InitProcIntDisable(Init8274) %InitProcIntDisable(InitComm2) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(InitSyscom) %InitProcIntDisable(InitRtc) %IF (%localFS NE 0) THEN ( %InitProcIntDisable(WsInit) %InitProcIntEnable(WsInit1) )FI %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%wsType EQ awsMaster) THEN ( %InitProcIntDisable(Init8259) %InitProcIntDisable(KbdTest) %InitProcIntDisable(TimerTest) %InitProcIntDisable(Init8274) %InitProcIntDisable(InitComm2) %InitProcIntDisable(RqExInit) %InitProcIntDisable(FsIn1) %InitProcIntDisable(InitSyscom) %InitProcIntDisable(InitRtc) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitVam) %InitProcIntEnable(InitMstr) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar NE 0) THEN ( %InitProcIntEnable(InitVpSwapFile) )FI )FI %IF (%wsType EQ ngenCluster) THEN( %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(InitRtc) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(InitMode3DmaCount) %InitProcIntDisable(Init8251) %InitProcIntDisable(InitComm2) %InitProcIntDisable(RqExInit) %InitProcIntDisable(KbdInit) %InitProcIntDisable(Init8259) %InitProcIntDisable(InitUcbs) %InitProcIntDisable(DAIFromHardware) %InitProcIntDisable(WsInit) %InitProcIntEnable(WsInit1) %InitProcIntEnable(DAIIntoXID) %InitProcIntEnable(InitVam) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %InitProcIntEnable(InitConfig) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar) THEN ( %InitProcIntEnable(InitVpSwapFile) %InitProcIntEnable(InitVpStructures) )FI )FI %IF (%wsType EQ ngen) THEN( %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(InitMode3DmaCount) %InitProcIntDisable(Init8251) %InitProcIntDisable(InitComm2) %InitProcIntDisable(RqExInit) %InitProcIntDisable(KbdInit) %InitProcIntDisable(Init8259) %InitProcIntDisable(InitUcbs) %InitProcIntDisable(InitSysCom) %InitProcIntDisable(InitRtc) %IF (%localFS NE 0) THEN ( %InitProcIntDisable(DAIFromHardware) %InitProcIntDisable(WsInit) %InitProcIntEnable(WsInit1FirstHalf) )FI %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %IF (%localFS NE 0) THEN ( %InitProcIntEnable(DAIFromDisks) %InitProcIntEnable(DAIIntoXID) %InitProcIntEnable(WsInit1SecondHalf) )FI %InitProcIntEnable(SysDeviceInit) %if(%ctosp)then( %InitProcIntEnable(RelocateFsData) )fi %InitProcIntEnable(InitConfig) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar) THEN ( %InitProcI;  eSpeed:nnnbps (nnn = 1.8M or 307K) ;################################################################ %IF(%*isdef(%ConfigFile)) THEN ( %ConfigurationFile("%ConfigFile","",128) ) ELSE ( %ConfigurationFile("[Sys]Config.sys","",128) )FI %IF(%*isdef(%WsConfigFile)) THEN ( %WsConfigurationFile("%WsConfigFile") ) ELSE ( %WsConfigurationFile("[Sys]Ws###>Config.sys") )FI ;################################################################ ; Software Bus File Specs ;################################################################ %IF(%*isdef(%InstallVdmFile)) THEN ( %InstallVdmSpec("%InstallVdmFile","") ) ELSE ( %InstallVdmSpec("[Sys]InstallVdm.run","") )FI %IF(%*isdef(%InstallKbdFile)) THEN ( %InstallKbdSpec("%InstallKbdFile","") ) ELSE ( %InstallKbdSpec("[Sys]InstallKbd.run","") )FI %IF(%*isdef(%InstallMathFile)) THEN ( %InstallMathSpec("%InstallMathFile","") ) ELSE ( %InstallMathSpec("[Sys]MathServer.run","") ntEnable(InitVpSwapFile) %InitProcIntEnable(InitVpStructures) )FI )FI %IF (%wsType EQ NGenMaster) THEN ( %InitProcHardWare(InitVideo) %InitProcHardWare(KbdTest) %InitProcHardWare(ClockTest) %InitProcIntDisable(InitMode3DmaCount) %InitProcIntDisable(Init8251) %InitProcIntDisable(Init8259) %InitProcIntDisable(InitComm2) %InitProcIntDisable(RqExInit) %InitProcIntDisable(KbdInit) %InitProcIntDisable(InitUcbs) %InitProcIntDisable(InitSyscom) %InitProcIntDisable(InitRtc) %InitProcIntEnable(InitVam) %InitProcIntEnable(FsIn2) %InitProcIntEnable(AddressBootBlock) %InitProcIntEnable(SysDeviceInit) %if(%ctosp)then( %InitProcIntEnable(RelocateFsData) )fi %InitProcIntEnable(InitConfig) %InitProcIntEnable(InitMstr) %InitProcIntEnable(InitDebugNub) %InitProcIntEnable(LoadFileInit) %InitProcIntEnable(InitNlsTables) %IF (%fVarPar) THEN ( %InitProcIntEnable(InitVpSwapFile) %InitProcIntEnable(InitVpStructures) )FI )FI %' Common to all workstation OSs %InitProcIntEnable(InitLoadProc) )FI%' Workstation %' Common to all OSs %InitProcIntEnable(InitStatus) )FI%' CTOS ;############################################################### ; ; InitFileSpec -- ; This macro defines the name of a file which CTOS Chains ; to after completion of the initialization routines. If there ; is any error in this Chain operation, then WS CTOS Exits to ; ExitRunFileSpec. The second argument of the macro is the ; password that CTOS needs to Chain to the file. This is ; normally null (""). ; ;################################################################ %IF(%*isdef(%InitFile)) THEN ( %InitFileSpec("%InitFile","",128) ) ELSE ( %IF (%fMFHardware) THEN ( %InitFileSpec("[Sys]CLI.Run","",128) ) ELSE ( %InitFileSpec("[Sys]SysInit.Run","",128) )FI )FI ;################################################################ ; Native Langauge Support Table File ; This macro defines the name of the file to be loaded at ; initialization which contains national tables and strings. ;################################################################ %IF(%*isdef(%NlsFile)) THEN ( %NlsFileSpec("%NlsFile","") ) ELSE ( %NlsFileSpec("[Sys]Nls.sys","") )FI ;################################################################ ; Configuration Initialization File # ; This macro defines the name of a file which CTOS uses # ; to determine the initial hardware configuration. # ;################################################################  %IF(%fMFHardware)THEN( %If (%*Isdef(%ConfigInitFile)) Then ( %CnfgInitFile("%ConfigInitFile") ) Else ( %CnfgInitFile("[Sys]Master.CNF") ) Fi )FI ;############################################################### ; Configuration File -- ; This macro defines the name of the configuration file. ; Currently, the configuration file is only used by NGen. Valid ; entries are: ; :XBufWindowSize:nnnKB (nnn = 0, 96, 224, or 480) ; :ClusterLin< )FI %IF(%*isdef(%ExtCrashDumpFile)) THEN ( %ExtCrashDumpSpec("%ExtCrashDumpFile","") ) ELSE ( %ExtCrashDumpSpec("[Sys]ExtCrashDump.run","") )FI %IF(%*isdef(%OEM1File)) THEN ( %OEM1Spec("%OEM1File","") ) ELSE ( %OEM1Spec("[Sys]OEM1.run","") )FI %IF(%*isdef(%OEM2File)) THEN ( %OEM2Spec("%OEM2File","") ) ELSE ( %OEM2Spec("[Sys]OEM2.run","") )FI %IF(%*isdef(%OEM3File)) THEN ( %OEM3Spec("%OEM3File","") ) ELSE ( %OEM3Spec("[Sys]OEM3.run","") )FI %IF(%*isdef(%OEM4File)) THEN ( %OEM4Spec("%OEM4File","") ) ELSE ( %OEM4Spec("[Sys]OEM4.run","") )FI ;############################################################### ; NGen Module Definition ; Format is DefineXbusModule(id,size,fRMOS,fMode3Master) where size is in ; kilobytes. ; ; If a module has many ids then list each. ; Size can be 96, 224, 480 or 0(no window). ; Setting fRMOS to %TRUE makes the module addressable from real mode programs ; running under a protected mode OS. ; Setting fMode3Master to %TRUE means that the module is a master for mode ; 3 dma. If a mode 3 master is present on the xbus, the loader will only ; load programs above 16 megabytes which have been linked 'HighMemProtected' ; or 'HighMemGdtProtected' (see '[Run file type]' parameter of link form). ;################################################################ %if(%ctosp)then( %DefineXbusModule(47,96,%FALSE,%FALSE) %' /*PC001*/ %DefineXbusModule(49,0,%FALSE,%TRUE) %' /* QIC tape */ %DefineXbusModule(50,0,%FALSE,%TRUE) %' /* phone */ %DefineXbusModule(51,0,%FALSE,%TRUE) %' /* phone */ %DefineXbusModule(52,0,%FALSE,%TRUE) %' /* ethernet */ %DefineXbusModule(53,0,%FALSE,%TRUE) %' /* ethernet */ %DefineXbusModule(56,96,%TRUE,%FALSE) %' /* monochrome graphics */ %DefineXbusModule(57,96,%TRUE,%FALSE) %' /* color graphics */ %DefineXbusModule(60,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusModule(61,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusModule(62,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusModule(63,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusModule(68,96,%TRUE,%FALSE) %' /*GC102*/ %DefineXbusModule(80,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(81,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(82,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(83,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(84,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(85,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(86,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(87,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(88,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(89,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(90,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(91,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(92,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(93,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(94,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(95,96,%TRUE,%FALSE) %' /*GCX04*/ %DefineXbusModule(132,0,%FALSE,%TRUE) %' /* Unisys QIC */ %DefineXbusModule(195,0,%FALSE,%TRUE) %' /* Unisys EN3 */ %DefineXbusModule(196,0,%FALSE,%TRUE) %' /* Unisys TR2 */ %DefineXbusModule(197,0,%FALSE,%TRUE) %' /* Unisys ID2 */ )fi ;############################################################### ; DEVICE DECLARATIONS -- A disk may be of two types, a floppy ; disk or a hard disk. A MegaFrame disk may only be an SMD ; disk or a hard disk. Note that Convergent ByteStreams ; supports "[nul]", "[kbd]", and "[vid]", etc. as "devices", ; but these are in reality access method constructs and not ; CTOS devices. ; ; DISKS -- A disk device is declared for each disk which is ; configured with the hardware. Each disk has a unit number ; (consecutive starting with 0 for each type of disk), a retry ; count (number of attempts to recover from I/O errors), a flag ; which is non zero for hard disk devices, a device name and a ; device password: ; ; dcbDisk(unitNumber,retryCount,fHardDisk,"name", "password") ; ; NOTE -- names and passwords are contained in '"'`s ; - names of devices must be unique ; - maximum of 12 characters in<  ; CTOS/VM 2.4 ; ; COPYRIGHT (C) 1980, 1989 CONVERGENT INCORPORATED. ALL RIGHTS RESERVED. ; COPYRIGHT (C) 1980, 1989 UNISYS CORPORATION. ALL RIGHTS RESERVED. ; ; THIS SOFTWARE IS PROPRIETARY TO CONVERGENT INC. AND UNISYS CORP. AND IS NOT TO ; BE REPRODUCED, USED OR DISCLOSED EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR ; UPON WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF UNISYS CORPORATION. ; ; THIS PROGRAM IS FURNISHED UNDER A LICENSE RESTRICTING ITS USE SOLELY FOR THE ; OPERATION OF A DESIGNATED COMPUTER FOR A PARTICULAR PURPOSE. TITLE TO AND ; OWNERSHIP OF THE PROGRAM, INCLUDING ITS SOURCE CODE, SHALL AT ALL TIMES REMAIN ; IN THE NAMES OF UNISYS CORPORATION AND CONVERGENT INCORPORATED. ; ; ; 2/8/84, Vinay - added definitions for multibus adapter data ; structure space. Flag is "nAdapters", default 1. ; 1/10/86 JA Merge MF ; 2/6/86 JA remove rgPTBuffers ; 3/3/86 JM Swap Fabs ; 3/17/86 MS add sarCurrent to GraphicsInfo ; 3/19/86 MS add userNumVdm to GraphicsInfo ; 3/21/86 JM fLfsToMaster ; 4/15/86  names or passwords ; - maximum of 5 (IWS) or 2 (AWS) devices are allowed. ; - AWS-240 floppy and winchester devices are both look ; like winchesters to CTOS, with floppy (f0) being unit ; 0 and winchester (d0) being unit 1. ;################################################################ %IF (%fMFHardware) THEN ( %If (%fFP) then ( %IF (%*isdef(%nWinch) EQ 0) THEN ( %Set(nWinch,0) ) FI %IF (%nWinch GE 1) THEN (%dcbDisk(0, 12, 1, "d0", "d0"))FI %IF (%nWinch GE 2) THEN (%dcbDisk(1, 12, 1, "d1", "d1"))FI %IF (%nWinch GE 3) THEN (%dcbDisk(2, 12, 1, "d2", "d2"))FI %If (%nWinch GE 4) Then (%dcbDisk(3, 12, 1, "d3", "d3"))FI ) FI %If (%fDP) then ( %IF (%*isdef(%nWinch) EQ 0) THEN ( %Set(nWinch,0) ) FI %IF (%nWinch GE 1) THEN (%dcbDisk(0, 12, 1, "s0", "s0"))FI %IF (%nWinch GE 2) THEN (%dcbDisk(1, 12, 1, "s1", "s1"))FI %IF (%nWinch GE 3) THEN (%dcbDisk(2, 12, 1, "s2", "s2"))FI %If (%nWinch GE 4) Then (%dcbDisk(3, 12, 1, "s3", "s3"))FI %If (%nWinch GE 5) Then (%dcbDisk(4, 12, 1, "s4", "s4"))FI %If (%nWinch GE 6) Then (%dcbDisk(5, 12, 1, "s5", "s5"))FI ) FI ) ELSE (%' Workstation %IF (%nFloppy GE 1) THEN (%Floppy("f0","")) FI %IF (%nFloppy GE 2) THEN (%Floppy("f1","")) FI %IF (%nFloppy GE 3) THEN (%Floppy("f2","")) FI %IF (%nFloppy GE 4) THEN (%Floppy("f3","")) FI %IF (%nWinch GE 1) THEN (%HDisk("d0","d0")) FI %IF (%nWinch GE 2) THEN (%HDisk("d1","d1")) FI %IF (%nWinch GE 3) THEN (%HDisk("d2","d2")) FI %IF (%nWinch GE 4) THEN (%HDisk("d3","d3")) FI %IF (%nWinch GE 5) THEN (%HDisk("d4","d4")) FI %IF (%nWinch GE 6) THEN (%HDisk("d5","d5")) FI %IF (%nWinch GE 7) THEN (%HDisk("d6","d6")) FI %IF (%nWinch GE 8) THEN (%HDisk("d7","d7")) FI %IF (%nSCSI GE 1) THEN (%SCSIdevice("z0","z0")) FI %IF (%nSCSI GE 2) THEN (%SCSIdevice("z1","z1")) FI %IF (%nSCSI GE 3) THEN (%SCSIdevice("z2","z2")) FI %IF (%nSCSI GE 4) THEN (%SCSIdevice("z3","z3")) FI %IF (%nSCSI GE 5) THEN (%SCSIdevice("z4","z4")) FI %IF (%nSCSI GE 6) THEN (%SCSIdevice("z5","z5")) FI %IF (%nSCSI GE 7) THEN (%SCSIdevice("z6","z6")) FI %IF (%nSCSI GE 8) THEN (%SCSIdevice("z7","z7")) FI %IF (%nSCSI GE 9) THEN (%SCSIdevice("z8","z8")) FI %IF (%nSCSI GE 10) THEN (%SCSIdevice("z9","z9")) FI %IF (%nSCSI GE 11) THEN (%SCSIdevice("z10","z10")) FI %IF (%nSCSI GE 12) THEN (%SCSIdevice("z11","z11")) FI )FI%' EVEN ;############################################################### ; FINAL -- ; This macro does error checking, and fills in various ; counts in the tables generated by the above macros calls. ; ;################################################################ %Final END %DefineXbusModule(51,0,%FALSE,%TRUE) %' /* phone */ %DefineXbusModule(52,0,%FALSE,%TRUE) %' /* ethernet */ %DefineXbusModule(53,0,%FALSE,%TRUE) %' /* ethernet */ %DefineXbusModule(56,96,%TRUE,%FALSE) %' /* monochrome graphics */ %DefineXbusModule(57,96,%TRUE,%FALSE) %' /* color graphics */ %DefineXbusModule(60,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusModule(61,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusModule(62,224,%FALSE,%FALSE) %' /*GC003*/ %DefineXbusMo= DR CTOSp and fProtected ; 4/25/86 FW NewGen support. ; 5/16/86 JM sbSwapFileFirst configurable ; 5/21/86 JM vfForkUser ; 5/27/86 JM rgCannotOpenSwapFile ; 5/31/86 JA removed vfForkUser ; 6/11/86 JM COED dcbSeg ; 8/25/86 JA FS version ; 9/23/86 DR CTOS II 2.0 merge ; 11/3/86 RLM add orgClusterTerm array ; 12/1/86 JA add rgModDesc, iModDescMax, macro XbusWindowSize also ; qbAllocateMax ; 12/9/86 JA remove iobuf ; 1/8/86 JA DisplayConfig.run. ; 1/22/87 JA cSegAllocateMax ; 3/9/87 KEB changed version to 11.1 ; 3/5/87 JM orgAsib in SysConfigBlock ; 3/6/87 JM add UBuf segment ; 3/13/87 KEB added OEMn.run to execute before sysinit.run ; 3/24/87 MDE,JM add OEMSeg ; 5/8/87 RLM configure timeout counters for master os's. ; 5/13/87 FVW increase maxMedInterruptType by 1 to prevent intSwTbl from ; clobbering the XbusIdtable which follows it. (for 2.1) ; 8/11/87 FVW Make sure wVerBuff is on an even word boundary. ; 10/15/87 JA add rgsgAsib, remove rgAsib,rgArib, all tibs. ; 10/27/87 JM RequestNoRemoteTermination macro. ; 11/17/87 JA public userNumNetMin/Max. ; 12/21/87 SAR unconditionally allocate wVerBuff space (512 bytes) ; 12/21/87 SAR added cDiskLogThreshold ; 2/15/88 JM add rgUSeg stuff ; 04/05/88 JM change macro XbusWindowSize to DefineXbusModule, add fMode3 ; param. ; 04/05/88 DR add pRgSgLdt - for sgLDT to user num mapping ; 04/05/88 DR add pRgSwapMode - per partition swap modes ; 04/13/88 RLM make xblockheader 32 bytes ; 11/2/88 JM group OemSeg in Dgroup so it gets relocated ; 8/23/89 FW Allow up to 24 dcbs. ; 9/5/89 JM version=2.4 ; 9/22/89 FW Version must be 0B06h (not 0B04h) ; 10/9/89 BA added MaxXBlocksPerUser. ; 11/22/89 FW Fix bug which caused crash if more than 6 SCSI devices. ; %SET(TRUE,0FFh) %SET(FALSE,0) %IF (not(%*Isdef(%CTOSp))) THEN (%Define(CTOSp)(0))FI ; If not specified, make the heap be 16 paragraphs (256 bytes) %IF (not(%*Isdef(%cParSCHeap))) THEN (%Define(cParSCHeap)(10))FI ; Size of Control Block Definitions sRcbIws EQU 18 sRcbAws EQU 18 xBlockHeaderSize EQU 32 ; double header for new fields (was 18) xBlockRqSize EQU 64 ;max size request block header that can fit in an XBlock ; Size of intSwtbl entries %if(%ctosp)then( cwIntSwtblEntry equ 4 )else( cwIntSwtblEntry equ 3 )fi ; Size of Variable Partition Blocks %if(%ctosp)then( sAsib EQU 185 sArib EQU 65 )else( sAsib EQU 93 sArib EQU 49 )fi sTib EQU 15 ; WsType definitions: iwsStandAlone EQU 0 iwsCluster EQU 1 iwsMiniMaster EQU 2 iwsIopMaster EQU 3 aws210 EQU 4 aws220_240 EQU 5 ;AWS-220, AWS-230, AWS-240 awsMaster EQU 6 ngenCluster EQU 7 ngen EQU 8 ngenMaster EQU 9 ; HardwareType definitions FPtype EQU 10 TPtype EQU 11 CPtype EQU 12 SPtype EQU 13 DPtype EQU 14 RPtype EQU 15 %IF (not(%*Isdef(%WsType))) THEN (%Define(WsType)(0))FI %Define(fIwsHardware)(0) %Define(fAwsHardware)(0) %Define(fNGenHardware)(0) %Define(fMFHardware)(0) %Define(fFP)(0) %Define(fTP)(0) %Define(fCP)(0) %Define(fSP)(0) %Define(fDP)(0) %Define(fRP)(0) %IF (%WsType LE 3) THEN (%Define(fIwsHardware)(0FFH)) ELSE(%IF (%WsType LE 6) THEN (%Define(fAwsHardware)(0FFH)) ELSE(%IF (%WsType LE 9) THEN (%Define(fNGenHardware)(0FFH)) ELSE(%Define(fMFHardware)(0FFH) %IF (%WsType EQ 10) THEN (%Define(fFP)(0FFH))FI %IF (%WsType EQ 11) THEN (%Define(fTP)(0FFH))FI %IF (%WsType EQ 12) THEN (%Define(fCP)(0FFH))FI %IF (%WsType EQ 13) THEN (%Define(fSP)(0FFH))FI %IF (%WsType EQ 14) THEN (%Define(fDP)(0FFH))FI %IF (%WsType EQ 15) THEN (%Define(fRP)(0FFH))FI )FI)FI)FI ; ClusterConfig definitions: standAlone EQU 0 cluster EQU 1 master EQU 2 ; initialize counters and flags ; %IF (%clusterConfig EQ Master) THEN ( %IF (not(%*Isdef(%MaxErrorCount))) THEN (%Define(MaxErrorCount)(15))FI %IF (not(%*Isdef(%MaxTimeOutCount))) THEN (%Define(MaxTimeOutCount)(10))FI %If (%fCP) Then ( %IF (not(%*Isdef(%TimeOutTicks))) THEN (%Define(TimeOutTicks)(40))FI ) ELSE ( %IF (not(%*Isdef(%TimeOutTicks))) THEN (%Define(TimeOutTicks)(4))FI ) Fi %IF (not(%*Isdef(%TeleclusterTimin=  SectorPerYblk))) Then (%Define(nSectorPerYblk)(5))FI %If (Not(%*Isdef(%nZblk))) Then (%Define(nZblk)(28))FI %If (Not(%*Isdef(%sZblk))) Then (%Define(sZblk)(180))FI %If (Not(%*IsDef(%Real186))) Then (%Define(Real186)(0FFFFh))Fi %If (Not(%*IsDef(%nMountedDisks))) Then (%Define(nMountedDisks)(10))Fi %If (Not(%*IsDef(%nAdapters))) Then (%Define(nAdapters)(1))Fi ; The 64 (below) is the size of the output ring buffer for each t0 window ; If the serial ports are not going to be used, the size for windows 4 and 6 ; can be made smaller, but all windows need to be a multiple of 16 %If (%fCP) Then ( %If (Not(%*IsDef(%nXblk))) Then (%Define(nXblk)(5))Fi %If (Not(%*IsDef(%sTpInBuf))) THEN (%Define(sTpInBuf)(128))FI %If (Not(%*IsDef(%sTpOutBuf))) THEN (%Define(sTpOutBuf)(128))FI %If (Not(%*IsDef(%sPtW0Buf))) THEN (%Define(sPtW0Buf)(64))FI %If (Not(%*IsDef(%sPtW1Buf))) THEN (%Define(sPtW1Buf)(64))FI %If (Not(%*IsDef(%sPtW2Buf))) THEN (%Define(sPtW2Buf)(64))FI %If (Not(%*IsDef(%sPtW3Buf))) THENg))) THEN (%Define(TeleclusterTiming)(7))FI %IF (not(%*Isdef(%nRepollActive))) THEN (%Define(nRepollActive)(0))FI )FI %IF (not(%*Isdef(%OSVersion))) THEN (%Define(OSVersion)(0B06h))FI %IF (not(%*Isdef(%FS))) THEN (%Define(FS)(0))FI %IF (not(%*Isdef(%fAwsPIT))) THEN (%Define(fAwsPIT)(0))FI %IF (not(%*Isdef(%fDebugger))) THEN (%Define(fDebugger)(1))FI %IF (not(%*Isdef(%fHDisks))) THEN (%Define(fHDisks)(0))FI %IF (not(%*Isdef(%localFS))) THEN (%Define(localFS)(0))FI %IF (not(%*Isdef(%fontRamBuf))) THEN (%Define(fontRambuf)(0))FI %IF (not(%*Isdef(%fMulPar))) THEN (%Define(fMulPar)(0))FI %IF (not(%*Isdef(%fVarPar))) THEN (%Define(fVarPar)(0))FI %IF (not(%*Isdef(%fFloppyCheck))) THEN (%Define(fFloppyCheck)(0))FI %IF (not(%*Isdef(%nUserNum))) THEN (%Define(nUserNum)(%nUcb))FI %IF (not(%*Isdef(%nNetUsers))) THEN (%Define(nNetUsers)(0))FI %IF (not(%*Isdef(%nXBlockSmall))) THEN (%Define(nXBlockSmall)(0))FI %IF (not(%*Isdef(%sMaxSmallRq))) THEN (%Define(sMaxSmallRq)(0))FI %IF (not(%*Isdef(%nSectorPerXBlock))) THEN (%Define(nSectorPerXBlock)(0))FI %IF (not(%*Isdef(%MaxXBlocksPerUser))) THEN (%Define(MaxXBlocksPerUser)(4))FI %IF (not(%*Isdef(%nSoftVec))) THEN (%Define(nSoftVec)(30+4*%nUcb))FI %IF (not(%*Isdef(%nPartitions))) THEN (%Define(nPartitions)(1))FI %IF (not(%*Isdef(%clusterTimeout))) THEN (%Define(clusterTimeout)(10))FI %IF (%clusterTimeout LT 2) THEN (%Define(clusterTimeout)(2))FI %IF (not(%*Isdef(%fSpecialFullyNestedMode))) THEN (%Define(fSpecialFullyNestedMode)(0FFh))FI %IF (not(%*Isdef(%fKbdRes))) THEN (%Define(fKbdRes)(0FFh))FI %IF (not(%*Isdef(%nTryNewMaster))) THEN (%Define(nTryNewMaster)(16))FI %IF (not(%*Isdef(%sParExitRunFile))) THEN (%Define(sParExitRunFile)(3200))FI %Define(nAsib)(%nUcb) %IF (not(%*Isdef(%nArib))) THEN (%Define(nArib)(%nAsib))FI %IF (not(%*Isdef(%fCheckMem))) THEN (%Define(fCheckMem)(0))FI %IF (not(%*Isdef(%fCheckEcc))) THEN (%Define(fCheckEcc)(0))FI %IF (not(%*Isdef(%nSwapFabs))) THEN (%Define(nSwapFabs)(32))FI %IF (not(%*Isdef(%nUsrExchange))) THEN (%Define(nUsrExchange)(20))FI %IF (not(%*Isdef(%nPTiming))) THEN (%Define(nPTiming)(20))FI %Define(nMsgWaitReserve)(0) %If (Not(%*Isdef(%cSegAllocateMax))) Then (%Define(cSegAllocateMax)(0FFFFh))FI%' %If (Not(%*Isdef(%cbNameSpace))) Then (%Define(cbNameSpace)(4096))FI%' %If (Not(%*Isdef(%cbNameCompactionGoal))) Then (%Define(cbNameCompactionGoal)(%eval(%cbNameSpace/2)))FI%' %If (Not(%*Isdef(%cDiskLogThreshold))) Then (%Define(cDiskLogThreshold)(0))FI%' %IF (%fMFHardware) THEN ( %If (not(%*Isdef(%wsTotal))) Then (%Define(wsTotal)(1))FI %If (Not(%*Isdef(%sOutBuffer))) Then (%Define(sOutBuffer)(128))FI %If (Not(%*Isdef(%sRouteArea))) Then (%Define(sRouteArea)(300))FI %If (Not(%*Isdef(%sTermArea))) Then (%Define(sTermArea)(20))FI %If (Not(%*Isdef(%sLineArea))) Then (%Define(sLineArea)(20))FI %If (Not(%*Isdef(%nReqEnts))) Then (%Define(nReqEnts)(10))FI %If (Not(%*Isdef(%nRespEnts))) Then (%Define(nRespEnts)(10))FI %If (Not(%*Isdef(%sStatArea))) Then (%Define(sStatArea)(4))FI %If (Not(%*Isdef(%nYblk))) Then (%Define(nYblk)(4))FI %If (Not(%*Isdef(%n>  (%Define(sPtW3Buf)(64))FI %If (Not(%*IsDef(%sPtW4Buf))) THEN (%Define(sPtW4Buf)(64))FI %If (Not(%*IsDef(%sPtW5Buf))) THEN (%Define(sPtW5Buf)(64))FI %If (%sPtW4Buf GT 128) THEN (%SET (sPtW4Buf, 128))FI %If (%sPtW5Buf GT 128) THEN (%SET (sPtW5Buf, 128))FI ) ELSE ( %If (Not(%*IsDef(%nXblk))) Then (%Define(nXblk)(0)) Fi ) Fi %If (%fTP) Then ( %If (Not(%*IsDef(%sTpInBuf))) THEN (%Define(sTpInBuf)(128))FI %If (Not(%*IsDef(%sTpOutBuf))) THEN (%Define(sTpOutBuf)(128))FI ) FI %If (%fFP) Then ( %If (%Pass1) Then ( %If (not(%*IsDef(%nWinch))) Then ( %Out (Define nWinch) ) Else ( %If ((%nWinch LT 1) or (%nWinch Gt 4)) Then ( %Out (nWinch must be in 1..4) ) FI ) FI ) FI ) Fi %If (%fDP) Then ( %If (%Pass1) Then ( %If (not(%*IsDef(%nWinch))) Then ( %Out (Define nWinch) ) Else ( %If ((%nWinch LT 1) or (%nWinch Gt 6)) Then ( %Out (nWinch must be in 1..6) ) FI ) FI ) FI ) FI %If ((%fFP) OR (%fDP)) Then ( %If (Not(%*IsDef(%nRemoteUser))) THEN (%Define(nRemoteUser)(160))FI %If (Not(%*IsDef(%sMassIoRqQueue))) THEN (%Define(%sMassIoRqQueue)(20))FI ) Else ( %If (Not(%*IsDef(%nRemoteUser))) THEN (%Define(nRemoteUser)(32))FI %If (Not(%*IsDef(sMassIoRqQueue))) THEN (%Define(sMassIoRqQueue)(0))FI ) FI ) ELSE (%' Workstation only %If (Not(%*Isdef(%sZblk))) Then (%Define(sZblk)(0))FI%' For Sysgen.asm comment )FI %if(%ctosp)then( %SET (m_nSoftwareInt, 0) %SET (m_nHardwareInt, 0) )else( %SET (m_nRawInt, 0) %SET (m_nMediatedInt, 0) )fi %SET (m_ErrorCount, 0) %SET (nDcb, 0) %SET (m_nOsProcDesc, 0) %SET (m_nVirtualExch, 0) %SET (m_nRgInitRtcRequest, 0) %SET (m_nInitProcHardware, 0) %SET (m_nInitProcIntDisable, 0) %SET (m_nInitProcIntEnable, 0) %SET (m_nRequestFileNames, 0) %SET (m_typeMax, 0) %SET (m_nSysCommInt, 0) %SET (cascade8259, 0) %SET (m_nRgMassioDisp, 0) %SET (m_ExchLast, 1) %SET (m_SysExch, 1) %SET (m_nRemoteDmaRequests, 0) %SET (m_iModDescMax, 0) %SET (dcb0,0) ; no dcbs defined initially %SET (dcb1,0) %SET (dcb2,0) %SET (dcb3,0) %SET (dcb4,0) %SET (dcb5,0) %SET (dcb6,0) %SET (dcb7,0) %SET (dcb8,0) %SET (dcb9,0) %SET (dcb10,0) %SET (dcb11,0) %SET (dcb12,0) %SET (dcb13,0) %SET (dcb14,0) %SET (dcb15,0) %SET (dcb16,0) %SET (dcb17,0) %SET (dcb18,0) %SET (dcb19,0) %SET (dcb20,0) %SET (dcb21,0) %SET (dcb22,0) %SET (dcb23,0) %IF(not(%*isdef(%nWinch))) THEN (%Set(nWinch,0))FI %IF(not(%*isdef(%nFloppy))) THEN (%Set(nFloppy,0))FI %IF(not(%*isdef(%nSCSI))) THEN (%Set(nSCSI,3))FI %SET(FloppyUnitNum,0) %SET(HDiskUnitNum,0) %SET(SCSIunitNum,0) %SET(nRqNoRemoteTerm,0) %IF(%fVarpar) THEN ( %IF (NOT(%FS)) THEN ( EXTRN ResumeTask:FAR )FI)FI ;**************************************************************************** ; Variables common to all Operating Systems ;**************************************************************************** %IF (NOT %FS) THEN (%' CTOS OEMSeg SEGMENT PARA PUBLIC 'OEMSeg' PUBLIC rgbOemSeg rgbOemSeg DB 32 DUP (0) OEMSeg ENDS )FI NameCommon SEGMENT PARA PUBLIC 'OEMSeg' DW 32 DB 30 DUP (0) NameCommon ENDS const SEGMENT PUBLIC 'const' const ENDS data SEGMENT PUBLIC 'data' %IF (NOT %FS) THEN ( DGroup GROUP Const, Data, OEMSeg, NameCommon )ELSE( DGroup GROUP Const, Data, NameCommon )FI PUBLIC userNumLast, userNumClstrLast, nNetUsers, NetServerData PUBLIC pRgOUcb, pRgOExUcb PUBLIC rgOsTable, endOsTable PUBLIC sbScratchVolumeSpec PUBLIC fLfsToMaster, vfAllowDirSlashes PUBLIC cbNodeName,NodeName %IF (%FS) THEN ( PUBLIC wVerBuff, fFsVerify PUBLIC VerifyCode PUBLIC maskVerifyCode, maskFPIndex PUBLIC FsRqBuffer PUBLIC sNmbHeap,sNmbCompactionGoal PUBLIC cDiskLogThreshold ) ELSE (%' CTOS PUBLIC fSysChannelA, fSysChannelB PUBLIC fSubsysChannelA, fSubsysChannelB PUBLIC rgsbWsUserName, rgWsId,nWsAbortRq PUBLIC pRgWsAbortRq, pRgChgUserNumRq, pRgTerminationRq, pRgSwappingRq PUBLIC nWsAbortRq, nChgUserNumRq, nTerminationRq, nSwappingRq PUBLIC contingencyLog PUBLIC ExchNetServer PUBLIC userNumNetMin,userNumNetMax PUBLIC nBytExchs, bitmapExchs, bitmapExchsSave, pBitmapExchsSave, userExchFirst PUBLIC fGoingDown %if(%ctosp)>  cbRgCrashMsg, rgLastCrashMsg, cbRgLastCrashMsg PUBLIC rgClusterMsg, cbRgClusterMsg, rgExitFileError, cbRgExitFileError PUBLIC rgInitError, cbRgInitError PUBLIC rgInitError, cbRgInitError, rgCheckConfig, cbRgCheckConfig PUBLIC rgCheckConfigPswd, cbRgCheckConfigPswd PUBLIC fAwsPIT, RtcTpb PUBLIC rgWsLocalUserNum PUBLIC wsUserNumLast PUBLIC pSysTime, pRgPrgNetRouting, pRgRcMax, pBootBlock PUBLIC iLineCurrent,iColCurrent,sMapCurrent,sarCurrent,userNumVdm PUBLIC fProtected PUBLIC rgModDesc, iModDescMax )FI )FI%' WS publics ; The following public's are used only for initialization PUBLIC nOSProcDesc PUBLIC rgOSProcDesc PUBLIC nInitProcHardWare, rgInitProcHardWare PUBLIC nInitProcIntDisable, rgInitProcIntDisable PUBLIC nInitProcIntEnable, rgInitProcIntEnable PUBLIC nRgInitRtcRequest, rgInitRtcRequest PUBLIC gen PUBLIC Config, wsType, osType, nPcb, nExchg, nMsgWait PUBLIC nPTiming, nUcb PUBLIC saSemiLowest, saSemiHighest, saTempLowest, saTempHighest, saEndMemory PUBLIC plaEndMemory PUBLIC hardwareType, clusterCthen( PUBLIC rgSoftwareIntDesc, nSoftwareInt PUBLIC rgHardwareIntDesc, nHardwareInt )else( PUBLIC rgRawIntDesc, nRawInt PUBLIC rgMediatedIntDesc, nMediatedInt )fi PUBLIC intSwtbl, sIntSwtbl PUBLIC nTicks, cFramesMax PUBLIC nParDesc PUBLIC wOSVersion PUBLIC rgUcb,oRgOUcb,rgOUcb PUBLIC oRgOExUcb PUBLIC sBufOut, mBufOut PUBLIC sExec PUBLIC sbExitRunFileSpec, sbExitRunFilePswd, exitRunFilePrio PUBLIC GraphicsInfo, eventControlBlock PUBLIC rgUserReadCount PUBLIC userNumKbd, userNumVid PUBLIC pXlatTable, wXlatTableChksum, pUserXlatTable PUBLIC pRgSdInit, nSdInit, fInitExit, exitRunFilePrioSave PUBLIC exchSched,exchSchedPocket PUBLIC rgCannotOpenSwapFile, cbCannotOpenSwapFile PUBLIC logCannotLoadNlsFile PUBLIC nSwapFabs PUBLIC rgWakeupRq, cWakeUpRq PUBLIC xBusWindowSize, fHighSpeed PUBLIC sXbMax )FI %IF (%fMFHardware) THEN (%' MF publics PUBLIC fMasterFP Public bMySlot, bMyLine, bMasterFpCpuId Public bMasterCpCpuId %IF (NOT %FS) THEN (%' CTOS Public rgRemoteDmaRequest, nRemoteDmaRequest Public bConsoleSlot, bConsolePort, pConsoleObuf Public fSysChannelC, fSysChannelD, fSubsysChannelC, fSubsysChannelD Public Mask186 Public sYblk, nYblk, pYblkListHead Public sZblk, nZblk, pZblkListHead PUBLIC nDct PUBLIC fSrpUp PUBLIC rgbTypeTable, rgbXpChar, srgbTypeTable Public maxAdapters, Adt Public nUserNum, rgLocalUserNum Public ibBufOutTake, ibBufOutPut, rgbBufOut, mBufOut Public fBufOutOverflow %If ((%fFp) OR (%fDp)) Then ( Public maxDevMounted, nDevMounted, rgFpMasterMountTable ) Fi PUBLIC cbPriParName, rgPriParName PUBLIC timeSliceLb, timeSliceHb, fTimeSlice ; Statistics Stuff Public pStat, pDiskStat, pProcStat, pExchStat, pIccStat Public sStat, sDiskStat, sProcStat, sExchStat, sIccStat PUBLIC nMinIOB, nAvailIOB, nMinY, nMinZ, nAvailY, nAvailZ PUBLIC nIccIn, nIccOut, nIccSkip, nLocRead, nLocWrite, nLocSeeks Public nRemRead, nRemWrite, nRemSeeks, nProcTick, nExchIn Public nYblkCopy, nParaIn, nParaOut, nInitY, nInitZ, nInitIOB Public nIobUsed %IF (%fTP OR %fCP) THEN ( PUBLIC userNumChannelA, userNumChannelB, userNumChannelC, userNumChannelD PUBLIC pbExtCntlComReg )FI %IF (%fCP) THEN( PUBLIC wsUserNumLast, rgWsLocalUserNum Public rgfSrpClock, rgNoWsLine Public nLcb, rgcTimeDelay, prgRcb, rgcMaxRqBlk, rgfLineEn ) Else ( PUBLIC cDelayDisc ) FI )FI ) ELSE (%' Workstation publics %IF (%FS) THEN ( PUBLIC fFloppyCheck PUBLIC fF0IllegallyRemoved,fF1IllegallyRemoved %IF (%fFloppyCheck) THEN( PUBLIC cbReinsertFloppyMsg,ReinsertFloppyMsg,oReinsertMsgVolName PUBLIC oReinsertMsgUnitNum,SaveVideoBuf,RemovedF0VolName,RemovedF1VolName PUBLIC RemovedF0UserCount,RemovedF1UserCount,RemovedF0CreateDT PUBLIC RemovedF1CreateDT,RemovedF0ModifyDT,RemovedF1ModifyDT )FI PUBLIC qbAllocateMax ) ELSE (%' CTOS PUBLIC oRgUserReadCount PUBLIC oRgUserWaitCount PUBLIC saGraphicsBoard, fGraphicsBoard, mbIOPort, bGraphicsPort %IF (%wsType NE aws210) THEN ( PUBLIC userNumChannelA, userNumChannelB )FI PUBLIC pAckInBuf, pAckOutBuf %if(not %ctosp)then( PUBLIC pDmaBuf )fi PUBLIC pMouseData PUBLIC extCntlRegAws PUBLIC rgCrashMsg, ? onfig, fNoFileSystem, fCommIop, fMulpar PUBLIC nIob, nFcb, nFub ; Init code sets these in config block for FS to see. %IF (%FS) THEN ( PUBLIC nVhb PUBLIC nRgMassioDisp, rgMassioDisp PUBLIC initSysDevNum ) ELSE (%' CTOS %if(%ctosp) then( public nGDTSlots public sgFreeHead public sgFreeTail public sgTssIntLast public isgGdtCallGateFirst public nGdtCallGates public pRgoGdtLink public f386 public f386Finger public rgIpcAliasHead public pRgSgLdt public pRgSwapMode )fi public sSCHeap PUBLIC orgPcb PUBLIC rgExchReal, srgExchReal PUBLIC nRequestFileNames, rgRequestFileNames PUBLIC sbConfigFileSpec, sbConfigFilePswd, configFilePrio, sbWsConfigFileSpec PUBLIC sbInitFileSpec, sbInitFilePassword, initFilePrio PUBLIC sbNlsFileSpec, sbNlsFilePassword PUBLIC sbInstallVdmSpec, sbInstallVdmPswd PUBLIC sbInstallKbdSpec, sbInstallKbdPswd PUBLIC sbInstallMathSpec, sbInstallMathPswd PUBLIC sbExtCrashDumpSpec, sbExtCrashDumpPswd PUBLIC sbOEM1Spec, sbOEM1Pswd PUBLIC sbOEM2Spec, sbOEM2Pswd PUBLIC sbOEM3Spec, sbOEM3Pswd PUBLIC sbOEM4Spec, sbOEM4Pswd %IF(%fMFHardware)THEN( PUBLIC nChgUserNumRq PUBLIC fCheckMem, fCheckEcc PUBLIC nXbuf, sXBData, nXBlock, nXBlockSmall, sSmallXBlock PUBLIC nSectorPerXBlock, XBlockHeaderSize Public pbInitFileName, cbInitFileName %If (%fCP) Then (  Public nT0QBlk, nPTTotal Public nsPtW0, nsPtW1, nsPtW2, nsPtW3, nsPtW4, nsPtW5, sPtHdr, sTpInHdr Public rgTpInBuffers, rgTpOutBuffers, sTpOutHdr Public nsTpInBuf, nsTpOutBuf ) FI %If (%fTP) Then ( Public sTpInHdr, sTpOutHdr Public rgTpInBuffers, rgTpOutBuffers Public nsTpInBuf, nsTpOutBuf ) Fi )ELSE(%' Workstations PUBLIC bGraphicsPort PUBLIC fSFNM )FI )FI%' CTOS ; System configuration block ; The following variables must be in order: EVEN Config LABEL WORD wsType DB %wsType osType DB 1 ;Resident, not swapping saSemiLowest DW 0 saSemiHighest DW 0 saTempLowest DW 0 saTempHighest DW 0 %if(not %ctosp)then( plaEndMemory label word )fi saEndMemory DW 0 nPcb DW %nPcb nExchg DW ? nMsgWait DW %nMsgWait vfAllowDirSlashes DB %FALSE fLfsToMaster DB %FALSE nPTiming DW %nPTiming nIob DW %nIob nFcb DW %nFub nVhb DW %nVhb nUcb DW %nUcb nFub DW %nFub hardwareType DB %hardwareType clusterConfig DB %clusterConfig fNoFileSystem DB %fNoFileSystem fCommIop DB %fCommIop fMulpar DB %IF(%fVarPar) THEN (3) ELSE (%IF(%fMulpar) THEN (0FFh) ELSE (0)FI)FI %IF(%fMFHardware) THEN ( fMasterFP DB 0 bMasterFpCpuId Db ? bMySlot Db ? bMasterCpCpuId Db ? nParDesc DW %nPartitions ; End of system configuration block bMyLine db ? Even )FI%' Megaframe %IF (NOT %FS) THEN (%' CTOS %IF(%fMFHardware) THEN ( rgLocalUserNum Dw 0FFFFh Dw 0 Dw %Eval(%nUcb+%nRemoteUser) Dup (0FFFFh) nUserNum Dw 3 ; %nRemoteUser is the number of remote user occupying a slot in rglocalusernum ; table when fetchlocalusernum. ntotaluser Dw %nUcb + %nRemoteUser oRgOUcb DW DGROUP:rgOUcb oRgOExUcb DW 0 oRgPcb DW 0 userNumVid DW 1 ; dummy for GetpStructure userNumKbd DW 1 ) ELSE (%' Workstation DB 0 ; alignment nParDesc DW %nPartitions oRgOUcb DW DGROUP:rgOUcb oRgOExUcb DW 0 ; These two userNums are a structure. They are in sysConfig so that the installable video system service can access them. %IF(%fVarpar) THEN ( userNumVid DW 2 userNumKbd DW 2 ) ELSE (%IF (%FMulPar) THEN ( userNumVid DW 1 userNumKbd DW 1 ) ELSE ( userNumVid DW 0 userNumKbd DW 0 )FI )FI oRgPcb DW 0 oRgUserReadCount DW DGROUP:rgUserReadCount ;Used by InitVam oRgUserWaitCount DW DGROUP:rgUserWaitCount ;Used by InitVam fSysChannelB DW 0 fSubsysChannelA DW 0 fSubsysChannelB DW 0 %IF(%fVarpar) THEN ( DW DGROUP:rgsgAsib ; used by debugger, debugfile DW sAsib DD ResumeTask ; used by debugfile )FI ; End of system configuration block )FI%' Workstation fProtected DB %IF(%CTOSp) THEN (0FFh) ELSE (0)FI %if (%ctosp) then( f386 db 0 f386Finger db 0 nGdtSlots dw %nGdtSlots sgTssIntLast dw 0 sgFreeHead dw 0 sgFreeTail dw 0 isgGdtCallGateFirst dw 0 nGdtCallGates dw 0 pRgoGdtLink dd 0 rgIpcAliasHead DW %nUcb DUP(0) plaEndMemory DD 0 pRgSgLdt dd 0 pRg?  f NetServerData ; ; The following are configuration variables set from the configuration file. ; Even though they are not used by all OS configurations, they must be ; present so that InitConfig will work. xBusWindowSize DW 0 ; = 0, 96H, 224H, or 480H fHighSpeed DB 0 ; End of Configuration variables sXBMax DW XBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock) %IF (%fTP OR %fCP OR (NOT %fMFHardware AND (%wsType NE aws210))) THEN ( fSysChannelA DW 0 PUBLIC rgCommLine rgCommLine DD 9 DUP(0)  DW 4 DUP(0) userNumChannelA DW 0FFFFh DW 0000h %if(%ctosp)then( DW 0 DB 0 ;fDma )fi DD 9 DUP(0) DW 4 DUP(0) userNumChannelB DW 0FFFFh DW 0001h %if(%ctosp)then( DW 0 DB 0 ;fDma )fi %IF (%fTp) THEN( DD 9 DUP(0) DW 4 DUP(0) userNumChannelC DW 0FFFFh DW 0002h %if(%ctosp)then( DW 0 DB 0 ;fDma )fi DD 9 DUP(0) DW 4 DUP(0) userNumChannelD DW 0FFFFh DW 0003h %iSwapMode dd 0 )FI sSCHeap dw %cParSCHeap*16 GraphicsInfo label word ;Next 7 fields are a structure, lGetpGraphicsInfo. saGraphicsBoard DW 0 fGraphicsBoard DW 0 mbIOPort DW 8030h bGraphicsPort DW 0 ; debugger needs to know current vid hdwr parameters, cache them here iLineCurrent DB 0FFh iColCurrent DB 0FFh sMapCurrent DW 0 sarCurrent DW 0 userNumVdm DW 0 sUcb EQU 95 rgUcb DB %nUcb*sUcb DUP(0) EVEN wOSVersion DW %OSVersion rgOUcb DW %nUcb DUP(0) ; 2.4 - Allocated user number support. $INCLUDE(SysGenUVA.mdf) ; end 2.4 )FI%' CTOS, not FS nOsProcDesc DW 0 ; for stack check code ; Space is always allocated since switch can be set at boot time ; (On protected mode OS's, the space is not significant and can ; be used for other useful purposes if fFsVerify is false.) %IF (%FS) THEN ( EVEN wVerBuff LABEL WORD DW 256 DUP (0) %IF (%fVerifyFileStruct) THEN ( fFsVerify DW 0FFFh )ELSE ( fFsVerify DW 0 )FI VerifyCode DW ? %IF (%fMFHardware) THEN ( maskVerifyCode DW 06000h maskFPIndex DW 01C00h ) ELSE( maskVerifyCode DW 7000h maskFPIndex DW 0 )FI fFloppyCheck DB %fFloppyCheck fF0IllegallyRemoved DB 0 fF1IllegallyRemoved DB 0 FsRqBuffer DB 30 DUP(0) qbAllocateMax DW 0,%cSegAllocateMax sNmbHeap DW %cbNameSpace sNmbCompactionGoal DW %cbNameCompactionGoal cDiskLogThreshold DW %cDiskLogThreshold )FI%' FS ; NetServerData: These variables are in a structure known by the CtNetServer. ; The NetServer calls InitNetServer (an OS common subroutine) to get a pointer ; to this structure ; ****NOTE **** This structure is known to CtNet and the Mouse and possible ; other system services. Don't insert data in the middle!!! NetServerData LABEL WORD pRgWsAbortRq DD 0 nWsAbortRq DW 0 pRgChgUserNumRq DD 0 nChgUserNumRq DW 0 pRgTerminationRq DD 0 nTerminationRq DW 0 userNumLast DW %nUserNum+%nNetUsers-1 userNumClstrLast DW %nUserNum-1 nNetUsers DW %nNetUsers pRgSwappingRq DD 0 nSwappingRq DW 0 exchNetServer DW 0 cbNodeName DB 0 nodeName DB 12 DUP(0) %IF (%FS) THEN (%' Declare empty table pRgPrgNetRouting DD ? pRgRcMax DD ? pBitmapExchsSave DD ? userExchFirst DW ? pSysTime DD ? pBootBlock DD ? pRgOUcb DD ? pRgOExUcb DD ? ) ELSE (%' CTOS EXTRN rgPrgNetRouting: FAR EXTRN rgRcMax: FAR pRgPrgNetRouting DD DGroup:rgPrgNetRouting pRgRcMax DD DGroup:rgRcMax pBitmapExchsSave DD DGroup:bitmapExchsSave; userExchFirst DW ? EXTRN SysTime:WORD pSysTime DD DGroup:sysTime EXTRN BootBlock:WORD pBootBlock DD DGroup:BootBlock pRgOUcb DD DGroup:rgOUcb pRgOExUcb DD 0 ;Set by InitFile ;EXTRN rgCommRawVector: WORD ; was: pRgCommRawVector DD DGroup:rgCommRawVector userNumNetMin DW 0 ; Set by InstallNet request. userNumNetMax DW 0 %IF(%fMFHardware) THEN ( pDmaBuf DD 0 pAckOutBuf DD 0 pAckInBuf DD 0 DW 0FFFFH DW 0 ) ELSE (%' Workstation %if(%ctosp)then( obsoleteUnused2 DD 0 pAckOutBuf DD 0 pAckInBuf DD 0 )else( pDmaBuf DD dmaBuf pAckOutBuf DD ackOutBuf pAckInBuf DD ackInBuf )fi EXTRN mouseData: WORD pMouseData DD DGroup:mouseData )FI%' EXTRN rgPrgLocalServiceCode: WORD prgPrgLocalServiceCode DD DGroup:rgPrgLocalServiceCode ; End o@ f(%ctosp)then( DW 0 DB 0 ;fDma )fi )FI)FI%' %IF (%fCp) THEN( userNumChannelC LABEL WORD userNumChannelD LABEL WORD )FI %IF (%fTP OR %fCP) THEN ( pbExtCntlComReg DD bExtCntlComReg bExtCntlComReg DB (0) )FI ; one DmaAddr structure is needed for each communications port that supports ; comm dma. For each pair of channels, one CommDmaEnable word is required. ; %if(%ctosp)then( PUBLIC rgDmaAddr rgDmaAddr DW 13 DUP(0) ; channel 1 DB 6 DUP(0) DW 2 DUP(0)  DW 13 DUP(0) ; channel 2 DB 6 DUP(0) DW 2 DUP(0) PUBLIC rgCommDmaEnable rgCommDmaEnable DB (0) )fi ; The EventControlBlock is a structure that is used mostly for mail. A ; pointer is returned by GetPStructure. eventControlBlock DW 32 ; The first word contains the length in bytes. DB 32 DUP(0) nTicks DB %IF(%fMFHardware) THEN (10) ELSE(%IF (%lineHZ EQ 60) THEN (6) ELSE (%IF (%fNGenHardware) THEN (4) ELSE (5) FI) FI) FI cFramesMax DB %nFrames extCntlRegAws DB 0 %IF ((%sKbdBuffer LT 16) OR (%sKbdBuffer GT 1024)) THEN(%Error(sKbdBuffer out of range) %SET(sKbdBuffer,128))FI %IF (((%sKbdBuffer-1) AND %sKbdBuffer) NE 0) THEN(%Error(sKbdBuffer not a power of 2) %SET(sKbdBuffer,128))FI %SET(nBytesUsrExch, %EVAL((%nUsrExchange+7)/8)) bitmapExchs DB %nBytesUsrExch DUP (0) bitmapExchsSave DB %nBytesUsrExch DUP (0) EVEN contingencyLog DW %sContingencyLog DUP (0) nBytExchs DW %nBytesUsrExch mBufOut DW %sKbdBuffer-1 sBufOut DW %sKbdBuffer %IF (not(%*Isdef(%sIBusBuffer))) THEN (%Define(sIBusBuffer)(64))FI %IF (((%sIBusBuffer-1) AND %sIBusBuffer) NE 0) THEN(%Error(sIBusBuffer not a power of 2) %SET(sIBusBuffer,128))FI rgbBufLEDs DB %sIBusBuffer DUP(0) ibBufLEDsPut DW 0 ibBufLEDsTake DW 0 maskiBufLED DW %sIBusBuffer-1 PUBLIC rgbBufLEDs, ibBufLEDsPut, ibBufLEDsTake, maskiBufLED %if(%ctosp)then( nSoftwareInt DW 0 nHardwareInt DW 0 )else( nRawInt DW 0 nMediatedInt DW 0 )fi sExec DW %sParExitRunFile fAwsPIT DB %fAwsPIT %IF(%fAwsPIT)THEN( RtcTpb DW 16 DUP (?) )ELSE( RtcTpb LABEL WORD )FI PUBLIC clusterTimeout clusterTimeout DW (%clusterTimeout+1)/2 ;each unit of clusterTimeout is 2sec. pXlatTable DD 0 wXlatTableChksum DW 0 pUserXlatTable DD 0 nSwapFabs DW %nSwapFabs %IF(%fVarPar)THEN(%'leave space for AllocSysExch to fill exchSched DW ? exchSchedPocket DW ? )ELSE( exchSched LABEL WORD exchSchedPocket LABEL WORD )FI ; Boot chain-sequence variables - pRgSdInit DD ? nSdInit DW 0 fInitExit DB 0FFh ;**************************************************************************** ; Parameters for all cluster workstations ;**************************************************************************** %IF (%clusterConfig EQ 1) THEN ( ; This is the number of times to retry sending XID to the master before we decide it must be an old master. It takes longer for a workstation to come up if this number if large. It should be around 10 for an NGen workstation on a cluster of 40 workstations. PUBLIC nTryNewMaster nTryNewMaster DB %nTryNewMaster )FI %IF (NOT (%clusterConfig EQ 1)) THEN ( PUBLIC nTryNewMaster nTryNewMaster DB 0 )FI ;**************************************************************************** ; Parameters for all masters ;**************************************************************************** ; EVEN %IF ((%wsType EQ iwsMiniMaster) OR (%wsType EQ iwsIopMaster) OR (%wsType EQ awsMaster) OR (%wsType EQ NGenmaster) OR (%fCP)) THEN ( PUBLIC nRepollActive %SET(nWsUserNum, %nUserNum-%nPartitions) %IF (%nWsUserNum EQ 0) THEN (%Define(nWsUserNum)(%WsTotal + 3))Fi wsUserNumLast DW %nWsUserNum-1 rgWsid DW %nWsUserNum DUP (0) rgWsLocalUserNum DW %nWsUserNum DUP (0) nRepollActive DB %nRepollActive ) ELSE( wsUserNumLast LABEL WORD rgWsid LABEL WORD rgWsLocalUserNum LABEL WORD DW 0 ) FI ;**************************************************************************** ; Parameters for the multi-partition OS ;**************************************************************************** ; %IF (%fMulPar) THEN ( PUBLIC oExUcb PUBLIC saMaxPartition PUBLIC cbPriParName, rgPri@  ****************** %IF(NOT %fMFHardware) THEN ( ; The following is the header of the crash message put out by the OS. ; The entire message looks like : ; CRASH STATUS (ERC 22.) 16H 5H 0H 0H 0H 0H 31C0H 22H cbRgCrashMsg DB 17 ; The size of the message string rgCrashMsg DB 'CRASH STATUS ',28h,'ERC' ; The following is the previous crash message put out by the OS when it is ; rebooted. The entire message looks like : ; LAST CRASH STATUS (ERC 22.) 16H 5H 0H 0H 0H 0H 31C0H 22H cbRgLastCrashMsg DB 22 ; length of the text string rgLastCrashMsg DB 'LAST CRASH STATUS ',28h,'ERC' ; The following is the message put out by the cluster workstation OS when it ; detects that the master workstation is down. The entire message looks like: ; CLUSTER NOT RUNNING, ERC = 6 cbRgClusterMsg DB 26 ; length of the text string rgClusterMsg DB 'CLUSTER NOT RUNNING, ERC =' ; The following is the message put out by the OS when the exit run file cannot ; be loaded. The entire message looks like: ; CANNOT LOAD EXIParName, cbSysSvcParName, rgSysSvcParname PUBLIC timeSliceLb, timeSliceHb, fTimeSlice PUBLIC ContextState PUBLIC ContextStatus PUBLIC rgpVidMemLine PUBLIC rgcRq PUBLIC rgDeltaPriority PUBLIC rgwTwoDigit %IF (%fVarPar) THEN ( PUBLIC rgsgAsib ;PUBLIC AsibShared PUBLIC nAsib, nArib PUBLIC cbAsib PUBLIC cbArib PUBLIC sbSwapFileTryFirst PUBLIC sbSwapFileTryFirstPswd PUBLIC sbSwapFileTryEach PUBLIC sbSwapFileTryEachPswd PUBLIC ibSwapFileNumber PUBLIC swapFileSize )FI EVEN oExUcb DW 0 saMaxPartition DW 0 timeSliceLb DB %lbTimeSlicePriority timeSliceHb DB %hbTimeSlicePriority fTimeSlice DB %fTimeSliceEnable ContextStatus DB %nPartitions DUP(0) rgcRq DB %nPartitions DUP(0) ; Just after ContextStatus ContextState DB %nPartitions DUP(0) ; Just after rgcRq rgDeltaPriority DB %nPartitions DUP (0) rgUserReadCount DB %nPartitions DUP (0) rgUserWaitCount DB %nPartitions DUP (0) rgpVidMemLine LABEL DWORD %' Used as global in Sp, by partition in Mp. ;rgWakeUpRq- ; Request codes which cause the scheduler to try to swap in when ; responded to with ercSwapping cWakeUpRq DW 2 rgWakeUpRq LABEL WORD DW 0, 0 rgwTwoDigit LABEL WORD %SET(m_Ones,0)%' %SET(m_Tens,0)%' %Repeat(%nUcb+1)(%' Generates "00" to "nUcb" %' 2-char string with tens in low byte of word DB '%SUBSTR(%m_Tens,1,1)','%SUBSTR(%m_Ones,1,1)' %SET(m_Ones,%m_Ones+1)%' %IF(%m_Ones EQ 10) THEN (%SET(m_Ones,0)%SET(m_Tens,%m_Tens+1))FI%' ) %IF (%fVarPar) THEN ( rgsgAsib LABEL WORD DW %nAsib DUP(0) ;AsibShared LABEL WORD ; DB sAsibShared DUP(0) nAsib DW %nAsib nArib DW %nArib cbAsib DW sAsib cbArib DW sArib )FI %IF (not(%*Isdef(%nUSeg))) THEN (%Define(nUSeg)(32))FI PUBLIC rgUSegCb, rgUSegfLL, cUSeg, cUSegMax, cpUSegs cUSegMax DW %nUSeg cpUSegs DD 0 cUSeg DW 0 rgUSegCb DW %nUSeg DUP(0) rgUSegfLL DB %nUSeg DUP(0) ) ELSE ( ;********************************************* ; Variables used only for Single-Partition OS ;********************************************* PUBLIC Ovly15, rgpVidMemLine PUBLIC rgBBufOut PUBLIC prgPcb, cPcb, cUcb prgPcb LABEL WORD rgUserReadCount LABEL WORD rgUserWaitCount LABEL WORD cPcb LABEL WORD cUcb LABEL WORD EVEN %IF (%wsType LT aws210) THEN ( rgpVidMemLine DD 34 DUP (?) )ELSE ( rgpVidMemLine DD 29 DUP (?) )FI rgbBufOut DB %sKbdBuffer DUP (0) ;Define Ovly15 so that we can use the same version of FsRes for Mp. Ovly15 LABEL DWORD ) FI ;**************************************************************** ; If the CTOS becomes too big to load the font, one can ; reserve 8704 bytes at low memory which will be used by ; LoadFontRam operations. To reserve this font buffer, one ; should set FontRamBuf to 0FFh before Init Macro in Sysgen.asm ;**************************************************************** %IF (%FontRamBuf NE 0) THEN ( EVEN Sysgen_LowMem SEGMENT PUBLIC 'LowMem' fontRamBuf DB 8704 DUP (0) Sysgen_LowMem ENDS ) FI ;**************************************************************** ; The following are the text portions of the messages put out ; by the CTOS Operating System ;**********************************************A T RUN FILE, ERC = 203 cbRgExitFileError DB 32 ; length of the text string rgExitFileError DB 'CANNOT LOAD EXIT RUN FILE, ERC =' ; The following is the message put out by the OS when some hardware error is ; detected during its initialization. The entire message looks like: ; INITIALIZATION ERROR STATUS 8000H cbRgInitError DB 27 ; length of the text string rgInitError DB 'INITIALIZATION ERROR STATUS' )FI%' NOT MF ; The following is the message written into the log file by the OS if ; the swap file cannot be accessed. The maximum length for this message ; is 72 bytes. cbCannotOpenSwapFile DB 43 rgCannotOpenSwapFile DB 'The swap file cannot be opened, erc = ' ; The following is the message written into the log file by the OS if ; the nls file cannot be loaded. logCannotLoadNlsFile DW 0FFF7h cbCannotLoadNlsFile DW 42 rgCannotLoadNlsFile DB 'The nls file cannot be loaded, erc = ' %IF (%fMulpar) THEN ( ; The following is the name given to the primary partition of a multi- ; partitioned OS. cbPriParName DB 7 ; length of the text string rgPriParName DB 'Primary' ; The following is the name given to a partition in which a system ; service resides. cbSysSvcParName DB 12 ; length of the text string rgSysSvcParName DB 'SysService00' ) FI EVEN  ;**************************************************************************** ; Variables common to all IWS Operating Systems ;**************************************************************************** %IF (%wsType LT aws210) THEN ( PUBLIC mask8259A, cascade8259, rgSysCommInt, nSysCommInt PUBLIC fSysChannelB, fSubsysChannelA, fSubsysChannelB, pFontRamBuf %IF (%FontRamBuf NE 0) THEN ( pFontRamBuf DD FontRambuf ) ELSE ( pFontRamBuf DD 0 )FI cbitsSmdOrHdc DW 0 bSmdOrHdcMask DB 0 PUBLIC cbitsSmdOrHdc, bSmdOrHdcMask )FI EVEN ;**************************************************************************** ; Variables for IWS StandAlone ;**************************************************************************** %IF (%wsType EQ iwsStandAlone ) THEN ( PUBLIC nRgMassioDisp, rgMassioDisp PUBLIC nIOPs, IopAdrs,rgIopChan,rqDelayDisc PUBLIC nDct ;Dummy labels fGoingDown LABEL WORD rqDelayDisc LABEL WORD IopAdrs LABEL WORD rgIopChan LABEL WORD ackOutBuf LABEL WORD ackInBuf LABEL WORD dmaBuf LABEL WORD rgsbWsUserName DB 31 DUP (0) mask8259A DB 67h EVEN nDct DW 0 %IF (%fMulPar NE 0) THEN ( PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirty rgbRunsTemp LABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WORD rgfLineDirty LABEL WORD )FI )FI EVEN ;**************************************************************************** ; Variables for IWS Cluster ;**************************************************************************** %IF (%wsType EQ iwsCluster ) THEN ( PUBLIC nXBlock, nSectorPerXBlock, sioClock, nDct PUBLIC sRcb,cRcbMax PUBLIC nIOPs, IopAdrs,rgIopChan,rqDelayDisc PUBLIC FilterProcessExch FilterProcessExch DW 17 ; Dummy labels fGoingDown LABEL WORD rqDelayDisc LABEL WORD IopAdrs LABEL WORD rgIopChan LABEL WORD rgsbWsUserName LABEL BYTE %IF (%localFS EQ 0) THEN ( PUBLIC orgOFdc, oFdc, cFdc orgOFdc LABEL WORD oFdc LABEL WORD cFdc LABEL WORD ) ELSE( PUBLIC nRgMassioDisp, rgMassioDisp ) FI mask8259A DB 65h sioClock DB %sioClock EVEN cRcbMax DW %nRcb sRcb DW sRcbIws nSectorPerXBlock DW %nSectorPerXBlock nXBlock DW %nXBlock nDct DW 0 saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 lowmem SEGMENT PUBLIC 'lowmem' ; Dma buffer and ackIn and ackOut buffers must be in first 64K for IWS ; For IWS cluster, we allocate one dmaBuf for each XBlock. dmaBuf DW xBlockSize*%nXBlock dup(0) ;dmaBuf is a word buffer for IWS ackInBuf DW 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DW 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DW 16 DUP (0) ;leave room for segment boundary alignment lowmem ENDS %IF (%fMulPar NE 0) THEN ( EVEN PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirty rgbRunsTemp LABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WOA  ABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WORD rgfLineDirty LABEL WORD )FI ) ELSE ( nIops DW 0 )FI EVEN ;**************************************************************************** ; Variables for AWS-210 ;**************************************************************************** %IF (%wsType EQ aws210) THEN ( PUBLIC rgFLineDirty, rgbRuns, rgbRunsTemp EVEN rgFLineDirty DB 28 DUP(0) rgbRuns DB 896 DUP(0) rgbRunsTemp DB 36 DUP(0) PUBLIC nXBlock, nSectorPerXBlock, sioClock, nDct PUBLIC sRcb,cRcbMax PUBLIC nIops,IopAdrs,rqDelayDisc PUBLIC FilterProcessExch FilterProcessExch DW 17 ;Dummy labels fGoingDown LABEL WORD rqDelayDisc LABEL WORD IopAdrs LABEL WORD rgsbWsUserName LABEL BYTE sioClock DB %sioClock EVEN cRcbMax DW %nRcb sRcb DW sRcbAws nSectorPerXBlock DW %nSectorPerXBlock nXBlock DW %nXBlock nDct DW 0 saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 Sysgen_LowMem SEGMENT PUBLIC 'LowMem' ; Dma buffer and ackIn and ackOut buffRD rgfLineDirty LABEL WORD )FI )FI EVEN ;**************************************************************************** ; Variables for IWS MiniMaster ;**************************************************************************** %IF (%wsType EQ iwsMiniMaster ) THEN ( PUBLIC nRgMassioDisp, rgMassioDisp PUBLIC nXBlock,nDct,sioClock PUBLIC nXBlockSmall, sSmallXBlock, nSectorPerXBlock PUBLIC nIOPs,IopAdrs,rgIopChan PUBLIC mbIOPort,pFontRamBuf ;Dummy labels IopAdrs LABEL WORD rgIopChan LABEL WORD mask8259A DB 65h rgsbWsUserName DB %EVAL(31*%wsTotal+31) DUP (0) sioClock DB %sioClock EVEN nSectorPerXBlock DW %nSectorPerXBlock sSmallXBlock DW %sMaxSmallRq nXBlock DW %nXBlock nXBlockSmall DW %nXBlockSmall nDct DW %wsTotal saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 lowmem SEGMENT PUBLIC 'lowmem' ; Dma buffer and ackIn and ackOut buffers must be in first 64K for IWS ; For IWS mini master, we have one dmaBuf in addition to XBlocks. ; XBlocks are allocated in high memory. dmaBuf DW xBlockSize dup(0) ;dmaBuf is a word buffer for IWS ackInBuf DW 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DW 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DW 16 DUP (0) ;leave room for segment boundary alignment lowmem ENDS fGoingDown DB 0 %IF (%fMulPar NE 0) THEN ( EVEN PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirty rgbRunsTemp LABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WORD rgfLineDirty LABEL WORD )FI )FI EVEN ;**************************************************************************** ; Variables for IWS IOP Master ;**************************************************************************** %IF (%wsType EQ iwsIopMaster ) THEN ( PUBLIC nXBuf,sXbMax,nXBufSmall,sXBMaxSmall,nDct,sioClock PUBLIC nRgMassioDisp, rgMassioDisp PUBLIC iopIntLevel, sXBMax,rgDct,sioClock,rgIopChan PUBLIC qFreeXblks,nIOPs,IopAdrs, iDct,iopBuff,fIopDump,nIopQSize PUBLIC pFontRamBuf PUBLIC nXBufSmall, sXBMaxSmall, nRcb PUBLIC qFreeXblksSmall ;Dummy labels ackOutBuf LABEL WORD ackInBuf LABEL WORD dmaBuf LABEL WORD mask8259A DB 63h rgIopChan DB %nWsLine1,%nWsLine2,%nWsLine3,%nWsLine4 IopAdrs DB 40h, 41h, 50h, 51h rgsbWsUserName DB %EVAL(31*%wsTotal+31) DUP (0) sioClock DB %sioClock fIopDump DB %fIopDump EVEN aSBuffer EQU 74+(512*%nSectorPerXBlock) sXBuf EQU %nXBlock*(aSBuffer+32) %SET (nIopQSize,%nXBlock+%wsTotal) EVEN iopIntLevel DW %IopIntLevel nIopQSize DW %nIopQSize saPerXbuf EQU (aSBuffer+15)/16 saPerSmallRq EQU (%sMaxSmallRq+12+15)/16 qFreeXblks DB (%nXBlock+2)*4+8 dup (0) qFreeXblksSmall DB (%nXBlockSmall+2)*4+8 dup (0) iopBuff DB 5*%nIop*(%nIopQSize*4+8)+4 dup (0) EVEN iDct DW %wsTotal dup (0) nDct DW %wsTotal nIops DW %nIop nXBuf DW %nXBlock sXBMax DW aSBuffer nRcb DW %nXBlock+%nXBlockSmall nXBufSmall DW %nXBlockSmall sXBMaxSmall DW saPerSmallRq*16 rgDct DB %wsTotal*64 dup(0) fGoingDown DB 0 %IF (%fMulPar NE 0) THEN ( EVEN PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirty rgbRunsTemp LB ers must be in first 3FFF bytes for AWS ; For AWS cluster, we allocate one dmaBuf for each XBlock. ; Dma is directly to and from the XBlocks. dmaBuf DB xBlockSize*%nXBlock dup(0) ;dmaBuf is a byte buffer for AWS ackInBuf DB 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DB 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DB 16 DUP (0) ;leave room for segment boundary alignment Sysgen_LowMem ENDS ) FI EVEN ;**************************************************************************** ; Variables common to AWS-220, AWS-230, AWS-240 ;**************************************************************************** %IF (%wsType EQ aws220_240) THEN ( PUBLIC rgFLineDirty, rgbRuns, rgbRunsTemp EVEN rgFLineDirty DB 28 DUP(0) rgbRuns DB 896 DUP(0) rgbRunsTemp DB 36 DUP(0) PUBLIC nRgMassioDisp, rgMassioDisp PUBLIC mask8259A, cascade8259, rgSysCommInt, nSysCommInt PUBLIC rgIopChan,ioBuf,rqDelayDisc,nDct PUBLIC nIops,IopAdrs ;Dummy labels fGoingDown LABEL WORD rqDelayDisc LABEL WORD IopAdrs LABEL WORD rgIopChan LABEL WORD Sysgen_LowMem SEGMENT PUBLIC 'LowMem' ;NOTE: iobuf should be 256 bytes, but standalone won't boot. ; It seems to work fine at 512. ; NOTE; iobuf must appear before the dma buffers, or the cluster code will not work. The reason is a mystery to me. iobuf DB 512 DUP (0) %IF (%localFS NE 0) THEN ( ; Dma buffer and ackIn and ackOut buffers must be in first 64K for AWS ; For AWS cluster, we allocate one dmaBuf for each XBlock. ; Dma is directly to and from the XBlocks. saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 dmaBuf DB xBlockSize*%nXBlock dup(0) ;dmaBuf is a byte buffer for AWS ackInBuf DB 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DB 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DB 16 DUP (0) ;leave room for segment boundary alignment ) ELSE ( dmaBuf LABEL WORD ackOutBuf LABEL WORD ackInBuf LABEL WORD ) FI Sysgen_LowMem ENDS  %IF (%localFS EQ 0) THEN ( PUBLIC fCommEnabled fCommEnabled DB 0 ) FI mask8259A DB 0BDh EVEN nDct DW 0 %IF (%localFS EQ 0) THEN ( rgsbWsUserName DB 31 DUP (0) ) ELSE ( PUBLIC nXBlock, nSectorPerXBlock PUBLIC sioClock,sRcb,cRcbMax sioClock DB %sioClock EVEN cRcbMax DW %nRcb sRcb DW sRcbAws nSectorPerXBlock DW %nSectorPerXBlock nXBlock DW %nXBlock rgsbWsUserName LABEL BYTE EVEN PUBLIC FilterProcessExch FilterProcessExch DW 17 )FI ) FI EVEN ;**************************************************************************** ; Variables common to AWS Master ;**************************************************************************** %IF (%wsType EQ awsMaster) THEN ( PUBLIC rgFLineDirty, rgbRuns, rgbRunsTemp EVEN rgFLineDirty DB 28 DUP(0) rgbRuns DB 896 DUP(0) rgbRunsTemp DB 36 DUP(0) PUBLIC nRgMassioDisp, rgMassioDisp PUBLIC mask8259A, cascade8259, rgSysCommInt, nSysCommInt PUBLIC nXBlock,nDct,sioClock PUBLIC nXBlockSmall, sSmallXBlock, nSectorPerXBlock PUBLIC nIops,IopAdrs,rgIopChan PUBLIC ioBuf nSectorPerXBlock DW %nSectorPerXBlock sSmallXBlock DW %sMaxSmallRq nXBlock DW %nXBlock nXBlockSmall DW %nXBlockSmall nDct DW %wsTotal saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 sXBuf EQU %nXBlock*xBlockSize saPerSmallRq EQU (%sMaxSmallRq+xBlockHeaderSize+15)/16 sXBufSmall EQU saPerSmallRq * %nXBlockSmall*16 Sysgen_LowMem SEGMENT PUBLIC 'LowMem' ; NOTE: iobuf must appear before the DMA buffers or the cluster code will not work. The reason for this is a mystery to me. iobuf DB 256 DUP (0) ; Dma buffer and ackIn and ackOut buffers must be in first 64K bytes for AWS ; For AWS master, we allocate one dmaBuf for each XBlock -- big and small. ; Dma is directly to and from the XBlocks. dmaBuf DB (sXBuf+sXBufSmall) dup(0) ;dmaBuf is a byte buffer for AWS ackInBuf DB 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DB 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DB 16 DUP (0) ;leave room for segment boB  string rgCheckConfig DB '[Sys]DisplayConfig.run' cbRgCheckConfigPswd DB 0 ; The size of the message string rgCheckConfigPswd DB 0 ) ELSE ( cbRgCheckConfig LABEL BYTE rgCheckConfig LABEL BYTE cbRgCheckConfigPswd LABEL BYTE rgCheckConfigPswd LABEL BYTE )FI EVEN ;**************************************************************************** ; Variables common to NgenCluster ;**************************************************************************** %IF (%wsType EQ ngenCluster) THEN ( PUBLIC nXBlock, nSectorPerXBlock PUBLIC sioClock,sRcb,cRcbMax PUBLIC nIops,rqDelayDisc PUBLIC mask8259A, cascade8259A, nDct ;Dummy labels rgsbWsUserName LABEL BYTE rgIopChan LABEL WORD fGoingDown LABEL WORD rqDelayDisc LABEL WORD mask8259A DB 0Fh cascade8259A DB 0F6h sioClock DB %sioClock EVEN nDct DW 0 PUBLIC FilterProcessExch FilterProcessExch DW 17 nSectorPerXBlock DW %nSectorPerXBlock nXBlock DW %nXBlock cRcbMax DW %nRcb sRcb DW sRcbAws %IF (%fMulPar) THEN ( PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirtyundary alignment Sysgen_LowMem ENDS ;Dummy labels IopAdrs LABEL WORD rgIopChan LABEL WORD rgsbWsUserName DB %EVAL(31*%wsTotal+31) DUP (0) mask8259A DB 09Dh sioClock DB %sioClock fGoingDown DB 0 ) FI EVEN %IF (%fFloppyCheck) THEN ( ; The following will be used for NGen, if we like to add ; a 'Floppy Door Open Checking' feature. ; The following is the message put out by the OS when a floppy ; on which files are open is removed from the drive. %IF (%fNGenHardware) THEN ( ReinsertFloppyMsg LABEL BYTE DB 80 DUP (0CEh) ; 0 to 79 DB ' Re-insert volume ' ; 80 to 99 DB 12 DUP (0) ; 100 to 111 DB ' in drive ' ; 112 to 121 DB '0' ; 122 DB ' or press to exit ' ; 123 to 159 cbReinsertFloppyMsg DB 160 oReinsertMsgVolName DB 100 oReinsertMsgUnitNum DB 122 SaveVideoBuf DW 160 DUP (0) )FI %IF (%fIwsHardware) THEN (; IWS ReinsertFloppyMsg LABEL BYTE DB 132 DUP (0CEh) ; DB ' Re-insert volume ' ; 0 to 19 DB 12 DUP (0) ; 20 to 31 DB ' in drive ' ; 32 to 41 DB '0' ; 42 DB ' or press to exit ' ; 43 to 79 DB 52 DUP (0) ; 80 to 131 cbReinsertFloppyMsg DB 264 oReinsertMsgVolName DB 132+20 oReinsertMsgUnitNum DB 132+42 SaveVideoBuf DW 200 DUP (0) )FI %IF (%fAwsHardware) THEN (; AWS ReinsertFloppyMsg LABEL BYTE DB 84H, 65 DUP (4Eh), 15 DUP (84h, 4Eh) DB 80H ; 0 DB ' Re-insert volume ' ; 1 to 20 (+20 = 20 chars) DB 12 DUP (0) ; 21 to 32 (+12 = 32 chars) DB ' in drive ' ; 33 to 42 (+10 = 42 chars) DB '0' ; 43 ( +1 = 43 chars) DB ' or press ', 80H,' ', 80H,'t' ; 73 to 80 DB 80H,'o', 80H,' ', 80H,'e' ; 89 to 87 DB 80H,'x', 80H,'i', 80H,'t' ; 95 to DB 80H,' ', 80H,' ', 80H,' ' ; 90 to 95 DB 0F3H, 0F3H cbReinsertFloppyMsg DB 194 oReinsertMsgVolName DB 96+21 oReinsertMsgUnitNum DB 96+43 SaveVideoBuf DB 192 DUP (0) )FI RemovedF0VolName DB 13 DUP (0) RemovedF1VolName DB 13 DUP (0) RemovedF0UserCount DW 0 RemovedF1UserCount DW 0 RemovedF0CreateDT DD 0 RemovedF1CreateDT DD 0 RemovedF0ModifyDT DD 0 RemovedF1ModifyDT DD 0 )FI ;**************************************************************************** ; Variables common to all NGen ;**************************************************************************** %IF ((%wsType GE ngenCluster) AND NOT %fMFHardware) THEN ( %IF (%wsType GE ngen) THEN ( PUBLIC mask8259A, cascade8259A, rgSysCommInt, nSysCommInt mask8259A DB 07h cascade8259A DB 0F6h )FI ; UBuf used by termination - must be paragraph aligned ; segment is classed with const so its not coeded PUBLIC uBuf uBufSeg SEGMENT PARA PUBLIC 'Const' UBuf DW 256 DUP(?) uBufSeg ENDS DGroup GROUP uBufSeg ; The following is the name of the run file which is chained to by all NGen OSs ; before SysInit in order to check the XBus configuration cbRgCheckConfig DB 27 ; The size of the message C  rgbRunsTemp LABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WORD rgfLineDirty LABEL WORD )FI %if(not %ctosp)then( Sysgen_LowMem SEGMENT PUBLIC 'LowMem' ; XBlocks are allocated in low memory. If we allocate them dynamically in high memory we get in trouble with machines with graphics modules that allocate XBus memory. saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 dmaBuf DB xBlockSize*%nXBlock dup(0) ;dmaBuf is a byte buffer ackInBuf DB 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DB 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DB 16 DUP (0) ;leave room for segment boundary alignment Sysgen_LowMem ENDS )fi ) FI EVEN ;**************************************************************************** ; Variables for Ngen ;**************************************************************************** %IF (%wsType EQ ngen) THEN ( PUBLIC rgIopChan,rqDelayDisc,nIops, nDct %IF (%localFS NE 0) THEN ( PUBLIC nXBlock, nSectorPerXBlock PUBLIC sioClock,cRcbMax PUBLIC sRcb, nIops,rqDelayDisc %if(not %ctosp)then( PUBLIC dmaBuf )fi )FI %IF (%clusterConfig EQ standAlone) THEN ( PUBLIC fSrpUp, oRgClusterTerm )FI ;Dummy labels fGoingDown LABEL WORD rqDelayDisc LABEL WORD rgIopChan LABEL WORD oRgClusterTerm LABEL WORD nDct DW 0 %IF (%clusterConfig EQ standAlone) THEN ( fSrpUp DB 0 )FI %IF (%localFS EQ 0) THEN ( rgsbWsUserName DB 31 DUP (0) ackOutBuf LABEL WORD ackInBuf LABEL WORD dmaBuf LABEL WORD ) ELSE ( rgsbWsUserName LABEL BYTE sioClock DB %sioClock EVEN PUBLIC FilterProcessExch FilterProcessExch DW 17 nSectorPerXBlock DW %nSectorPerXBlock nXBlock DW %nXBlock cRcbMax DW %nRcb sRcb DW sRcbAws %if(not %ctosp) then( Sysgen_LowMem SEGMENT PUBLIC 'LowMem' ; XBlocks are allocated in low memory. If we allocate them dynamically in high memory we get in trouble with machines with graphics modules that allocate XBus memory. saPerXBlock EQU (xBlockHeaderSize+xBlockRqSize+(512*%nSectorPerXBlock)+15)/16 xBlockSize EQU saPerXBlock*16 dmaBuf DB xBlockSize*%nXBlock dup(0) ;dmaBuf is a byte buffer ackInBuf DB 16 DUP (0) ;ackInBuf will be set to segment boundary by init ackOutBuf DB 16 DUP (0) ;ackOutBuf will be set to segment boundary by init DB 16 DUP (0) ;leave room for segment boundary alignment Sysgen_LowMem ENDS )fi )FI %IF (%fMulPar) THEN ( EVEN PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirty rgbRunsTemp LABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WORD rgfLineDirty LABEL WORD )FI ) FI %IF (%clusterConfig NE cluster) THEN ( PUBLIC orgUserTable orgUserTable DW 0 )FI EVEN ;**************************************************************************** ; Variables for Ngen Master ;**************************************************************************** %IF (%wsType EQ ngenMaster) THEN ( PUBLIC fGraphicsBoard, rgIopChan, nIOPs PUBLIC nXBlock, nDct, sioClock PUBLIC nXBlockSmall, sSmallXBlock, nSectorPerXBlock, MaxXBlocksPerUser PUBLIC fSrpUp, oRgClusterTerm PUBLIC MaxErrorCount PUBLIC MaxTimeoutCount PUBLIC TimeoutTicks PUBLIC TeleclusterTiming ;Dummy labels rgIopChan LABEL WORD dmaBuf LABEL WORD ;allocated in high memory by init code ackOutBuf LABEL WORD ;allocated in high memory by init code ackInBuf LABEL WORD ;allocated in high memory by init code oRgClusterTerm LABEL WORD fSrpUp DB 0 rgsbWsUserName DB %EVAL(31*%wsTotal+31) DUP (0) sioClock DB %sioClock fGoingDown DB 0 EVEN nDct DW %wsTotal nSectorPerXBlock DW %nSectorPerXBlock sSmallXBlock DW %sMaxSmallRq nXBlock DW %nXBlock nXBlockSmall DW %nXBlockSmall MaxErrorCount DB %MaxErrorCount MaxTimeoutCount DB %MaxTimeoutCount TimeoutTicks DW %TimeoutTicks TeleclusterTiming DW %TeleclusterTiming MaxXBlocksPerUser DB %MaxXBlocksPerUser %IF (%fMulPar) THEN ( PUBLIC rgbRunsTemp, rgbRuns, rgbRunsVirgin, rgfLineDirty rgbRunsTemp LABEL WORD rgbRuns LABEL WORD rgbRunsVirgin LABEL WORD rgfLineDirty LABEL WORD )FI ) FI EVEN ;********* )FI%' CTOS, not FS ;*************************************************C  ; We Don't know what the extra 96 (below) is for. ; We presume it is for a control byte or something. ; This structure must begin on a paragraph boundry for the linking to work ; ;t0data SEGMENT PUBLIC 'data' ; ;rgPTBuffers db 96*PTHdrs + 96 + 16*(%sPtW0Buf + %sPtW1Buf + %sPtW2Buf + %sPtW3Buf + %sPtW4Buf + %sPtW5Buf) dup(0) ;t0data ends rgTpInBuffers db 3*%sTpInBuf + 3*TpInHdrs dup(0) rgTpOutBuffers db 3*%sTpOutBuf + 3*TpOutHdrs + 3 dup(0) alignment Dw 6 Dup (0) overwritten Db 'CTOS' ) Else ( %If (%fTP) Then ( fSysChannelB DW 0FFFFh ; Realistic values later! fSysChannelC DW 0FFFFh fSysChannelD DW 0FFFFh fSubsysChannelA DW 0FFFFh fSubsysChannelB DW 0FFFFh fSubsysChannelC DW 0FFFFh fSubsysChannelD DW 0FFFFh EVEN nsTpInBuf dw %sTpInBuf nsTpOutBuf dw %sTpOutBuf TpInHdrs equ 10 TpOutHdrs equ 30 sTpInHdr dw TpInHdrs sTpOutHdr dw TpOutHdrs rgTpInBuffers db 10*%sTpInBuf + 10*TpInHdrs dup(0) rgTpOutBuffers db 10*%sTpOutBuf + 10*TpOutHdrs + 10 dup(0) alignment dw 20 dup (0) ; since qual alig*************************** ; Variables for all Megaframe ;**************************************************************************** %IF (%fMFHardware) THEN ( PUBLIC pCdt, fSrpUp %IF (%FS) THEN (%' Public rgSectMap ) ELSE (%' CTOS public ntotaluser PUBLIC FilterProcessExch, exchFilterPocket PUBLIC rgIopChan, oRgClusterTerm )FI%' pCdt DD Cdt oRgClusterTerm DW 0 fSrpUp DW 0 %IF (%FS) THEN (%' CdtSeg Segment AT 0 Cdt Label Byte CdtSeg Ends ; ; The following is used by MassIo for Sector Scheduling ; EVEN rgSectMap label byte %If (%fFP) Then ( DB 0,4,8,12,16,20,24,28 DB 1,5,9,13,17,21,25,29 DB 2,6,10,14,18,22,26,30 DB 3,7,11,15,19,23,27,31 )FI %If (%fDP) Then ( DB 0,8,16,24,32,40,48,56 DB 2,10,18,26,34,42,50,58 DB 4,12,20,28,36,44,52,60 DB 6,14,22,30,38,46,54,62 ) FI ; ; The following allocates the Queue used when no Iob's are available ; when running MassIo ; %If ((%fFP) OR (%fDP)) Then ( Public sIobQueue, nFreeIobQueue, rgpIobQList sIobQueue Dw %sMassIoRqQueue nFreeIobQueue Dw %sMassIoRqQueue rgpIobQList DD %sMassIoRqQueue Dup (0) ) FI ) ELSE (%' CTOS const segment word public 'CONST' rgIopChan LABEL WORD rgbTypeTable DB 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh,40h,41h,0FFh rgbXpChar DB 'FTCSDRAA?' srgbTypeTable DW 9 const ENDS FilterProcessExch DW ? exchFilterPocket DW ? nRemoteDmaRequest Dw 0 ibBufOutTake DW 0 ibBufOutPut DW 0 fBufOutOverflow DW 0 rgbBufOut DB %sKbdBuffer DUP (0) %If (%fFP) Then ( Mask186 DW 0FFh-31h ) Else ( %If (%fTP) Then ( Mask186 DW 0FFh-20h ) Else ( %If (%fCP) Then ( Mask186 DW 0FFh-30h ) Else ( %If (%fDP) Then ( Mask186 DW 0FFh-31h ) Else ( Mask186 DW 0FFh-21h ) Fi) Fi) Fi) Fi bConsoleSlot DB -1 ; Slot of our console's TP bConsolePort DB 0 ; Port on that TP pConsoleObuf DD 0 ; Addr of output ring buffer Even fGoingDown DB 0 nXBlock EQU THIS WORD ; make the same as nXBuf nXBuf DW %nXBLK nSectorPerXBlock DW %nSectorPerXBlock sXBData DW 512*%nSectorPerXBlock sSmallXBlock DW %sMaxSmallRq nXBlockSmall DW %nXBlockSmall XBlockHeaderSize DW XBlockHeaderSize+xBlockRqSize %If (%fCP) Then ( fSysChannelB DW 0FFFFh ; Realistic values later! fSysChannelC DW 0FFFFh fSysChannelD DW 0FFFFh fSubsysChannelA DW 0FFFFh fSubsysChannelB DW 0FFFFh fSubsysChannelC DW 0FFFFh fSubsysChannelD DW 0FFFFh rgsbWsUserName DB %EVAL(31*%wsTotal+31) DUP (0) aNLcb EQU %nLine nLcb DW aNLcb nDct DW %WsTotal EVEN pRgRcb DD ? rgNoWsLine DB %nWsLine1,%nWsLine2 rgcTimeDelay DB 10,10 rgfSrpClock DB %fSrpClock1,%fSrpClock2 rgcMaxRqBlk DB 2,2 rgfLineEn DB 0h,0h nPTTotal DW 0 nT0QBlk DW %nYBlk + %nZBlk + 3 nsPtW0 dw %sPtW0Buf nsPtW1 dw %sPtW1Buf nsPtW2 dw %sPtW2Buf nsPtW3 dw %sPtW3Buf nsPtW4 dw %sPtW4Buf nsPtW5 dw %sPtW5Buf nsTpInBuf dw %sTpInBuf nsTpOutBuf dw %sTpOutBuf PtHdrs equ ((%XBlockHeaderSize+15)/16)*16 TpInHdrs equ 10 TpOutHdrs equ 30 sPtHdr dw PtHdrs sTpInHdr dw TpInHdrs sTpOutHdr dw TpOutHdrs ; ; PtHdrs (above) is the size of the T0fifostructure. ; 96 is 16 PTs * 6 windows/pt ; D nment now overwritten db 'CTOS' rgsbWsUserName LABEL BYTE nDct DW 0 cDelayDisc LABEL WORD ) Else ( fSysChannelA DW 0 fSysChannelB DW 0 fSysChannelC DW 0 fSysChannelD DW 0 fSubsysChannelA DW 0 fSubsysChannelB DW 0 fSubsysChannelC DW 0 fSubsysChannelD DW 0 rgsbWsUserName LABEL BYTE cDelayDisc LABEL WORD nDct DW 0 ) Fi ) FI EVEN ; Icc 'Y' Block descriptive structures sYblkLocal Equ %XBlockHeaderSize+(512*%nSectorPerYblk) ; header was 74 sYblk DW sYblkLocal nYblk DW %nYblk pYblkListHead DD YblkArea ; Icc 'Z' Block descriptive structures sZblkLocal Equ %sZblk sZblk DW sZblkLocal nZblk DW %nZblk pZblkListHead DD ZblkArea maxAdapters dw %nAdapters Adt db (10*%nAdapters) dup (0) %if ((%fFP) OR (%fDP)) Then ( sMountTabEntry Equ 1+13+13 maxDevMounted Dw %nMountedDisks nDevMounted Dw 0 rgFpMasterMountTable Db (sMountTabEntry*%nMountedDisks) Dup (0) ) Fi nDummy Equ 5 ; padding of each area Even pStat DD Stat1 Stat1 Label Word DW %nWinch DW %nPcb DW %nSysExchange+%nUsrExchange nInitY DW %nYblk nMinY DW %nYblk nAvailY DW %nYblk nInitZ DW %nZblk nMinZ DW %nZblk nAvailZ DW %nZblk nInitIob DW %nIob nMinIOB DW %nIob nAvailIOB DW %nIob DW nDummy Dup (0) sStat DW $-Stat1 pDiskStat DD Stat2 Stat2 Label Word nLocRead DW 6 Dup (0) ; 6 is max possible # disks/processor nLocWrite DW 6 Dup (0) nLocSeeks DW 6 Dup (0) nRemRead DW 6 Dup (0) ; 6 is max possible # disks/processor nRemWrite DW 6 Dup (0) nRemSeeks DW 6 Dup (0) nIobUsed DW 6 Dup (0) DW nDummy Dup (0) sDiskStat DW $-Stat2 pProcStat DD Stat3 Stat3 Label Word nProcTick DW %nPcb DUP (0) DW nDummy Dup (0) sProcStat DW $-Stat3 pExchStat DD Stat4 Stat4 Label Word nExchIn DW (%nSysExchange+%nUsrExchange) DUP (0) DW nDummy Dup (0) sExchStat DW $-Stat4 pIccStat DD Stat5 Stat5 Label Word nIccIn DW 0 nIccOut DW 0 nIccSkip DW 0 nYblkCopy DW 0 nParaIn DW 0 nParaOut DW 0 DW nDummy Dup (0) sIccStat DW $-Stat5 CdtSeg Segment Public 'Cdt' ; define a Cdt, but with the offsets, etc. in 8086 format. ReqOffset Equ Offset ReqArea - Offset Cdt RespOffset Equ Offset RespArea - Offset Cdt StatOffset Equ Offset StatArea - Offset Cdt %If ((%fFP) OR (%fDP))Then ( TermOffset Equ Offset TermArea - Offset Cdt LineOffset Equ Offset LineArea - Offset Cdt RouteOffset Equ Offset RouteArea - Offset Cdt ) Else ( RouteOffset Equ 0 )Fi DW 0 ; slide CDT down 2 to fix AP problem with lock Cdt Label Byte %'filler$0 (8)' DB 8 Dup (?) %'bProcessorType' DB %HardWareType %'fWatchDog' DB 0 %'ibRequestTakePtr' DW ReqOffset %'ibRequestPutPtr' DW ReqOffset %'ibRequestStartPtr' DW ReqOffset %'ibRequestEndPtr' DW ReqOffset + 5*(%eval(%nReqEnts-1)) %'ibResponseTakePtr' DW RespOffset %'ibResponsePutPtr' DW RespOffset %'ibResponseStartPtr' DW RespOffset %'ibResponseEndPtr' DW RespOffset + 5*(%eval(%nRespEnts-1)) %'fLockByte' DB 0 %'bInitErrorStatus' DB 0 %'bMemorySize' DB ? %'bBootStruct$FF' DB 0FFh %'bBootStruct$0' DB 0 %'bBootStruct$A6' DB 0A6h %'bBootCommand' DB 0 %'bMasterFP' DB ? %'fOsInitialized' DB 0 %'fCdtIO' DB 0 %'oStatArea' DW StatOffset %'sStatArea' DW %sStatArea %'rgbFPXlate' DB 8 Dup (?) %'rgbBusConfigTable' DB 240 Dup (?) %'nUserNumber' DW ? %'bTTiStatus' Db ? %'bTTiData' Db ? %'bTToStatus' Db ? %'bTToData' Db ? %'wPanelStatus' dw ? %'bFrontPanel' db ? %'fDegraded' db ? %'fMasterReady' db ? %'fDisCls' db ? %'wCpWho' dw ? %'WCpTimer' dw ? %'verifyCode' db ? %'filler1' DB 77 Dup (?)  ; Following portion of the table is FP/DP specific %If ((%fFP) OR (%fDP)) Then ( %'nDevMounted' DW 0 %'pMasterMountTable' DD rgFPMasterMountTable %'oTermTable' Dw TermOffset %'sTermTable' Dw %sTermArea %'oLineTable' Dw LineOffset %'sLineTable' Dw %sLineArea %'oRqRoute' Dw RouteOffset Dw 16 Dup (?) %'sRqRoute' Dw %sRouteArea Dw 16 Dup (?) ) Fi Even ReqArea DB %nReqEnts*5 Dup (?) Even RespArea DB %nRespEnts*5 Dup (?) Even StatArea DW %sStatArea Dup (?) Even %If ((%fFP) OR (%fDP)) TD  nterrupt (level,entry,sStack,fMediated))( %IF (%m_nSoftwareInt EQ 0) THEN ( rgSoftwareIntDesc LABEL WORD ) FI %IF (not(%*Isdef(%entry))) THEN ( %EXTRN(%entry) ) FI DB %level DD %entry DW %sStack DB %fMediated %SET(m_nSoftwareInt, %m_nSoftwareInt+1) ) $EJECT ; ; Macro for defining protected mode hardware interupt handler structure. ; %*DEFINE (HardwareInterrupt (type,entry,sStack,fMediated))( %IF (%m_nHardwareInt EQ 0) THEN ( rgHardwareIntDesc LABEL WORD ) FI %EXTRN(%entry) DB %type DD %entry DW %sStack DB %fMediated %SET(m_nHardwareInt, %m_nHardwareInt+1) %IF (%m_typeMax LT %type) THEN (%Set(m_typeMax,%type)) FI ) )FI%' CTOS, not FS %IF (%FS) THEN ( %*DEFINE(ResidentDataBoundry(size))( OsTable SEGMENT PUBLIC 'Data' DGroup GROUP OsTable rgOsTable DB %size DUP(0) EVEN endOsTable DW 0 OsTable ENDS ) %*DEFINE (InterruptCascadeLevel(n))() %*DEFINE (MediatedInterrupt (type,f8259,entry))() %*DEFINE (RawInterrupt (level,entry))() %*DEFINE (MapExchange(veIndex, name, exch))() %*DEFINE (SymExchange(name, exch))hen ( TermArea Dw %sTermArea Dup (?) LineArea Dw %sLineArea Dup (?) RouteArea Db %sRouteArea Dup (?) ) Fi Even CdtSeg Ends YSeg Segment Public 'Yseg' YblkArea Db %nYblk*sYblkLocal Dup (0) ZblkArea Db %nZblk*sZblkLocal Dup (0) YSeg Ends ;********* )FI%' CTOS, not FS ) FI%' Megaframe EVEN ;**************************************************************************** ; MACRO DEFINITIONS ;**************************************************************************** ; ; ; EXTRN -- declare a label extrn and outside of the data segment. This will only ; work is called from within segment "data". ; %*DEFINE(Extrn(label))(%' data ENDS EXTRN %label:far data SEGMENT PUBLIC 'data' ) %IF (%FS) THEN ( %*Define(RemoteDmaRequest(rc,newrc,pbcboffset,slotoffset))() $EJECT ; ; macro for defining massio dispatch routines ; %*DEFINE (MassioDisp (pStartIO))( %IF (%m_nRgMassioDisp EQ 0) THEN ( rgMassioDisp label byte) FI %SET (m_nRgMassioDisp, %m_nRgMassioDisp+1) %IF (NOT(%ISDEF(%pStartIO))) THEN( %EXTRN(%pStartIO)) FI DD %pStartIO ) $EJECT %*DEFINE (DefineEncryptionKey (wKeyValue))() ) ELSE (%' CTOS, not FS %*DEFINE (MassioDisp (pStartIO))() $EJECT ; ; macro for defining Remote Dma requests ; which need to be massaged by ICC ; %*Define(RemoteDmaRequest(rc,newrc,pbcboffset,slotoffset))( %If (%m_nRemoteDmaRequests EQ 0) Then ( Even rgRemoteDmaRequest Label Byte ) Fi DW %Rc, %NewRc DB %pbcboffset, %slotoffset %Set(m_nRemoteDmaRequests,%m_nRemoteDmaRequests+1) ) $EJECT ; ; macro for encryption key and buffer ; %*DEFINE (DefineEncryptionKey (wKeyValue))( ; Allocate room for sbType for GetpStructure, but set public to actual data. ; First reserve room for the cb, define the key, org back and fill in the cb. ; Org back and define the temporary encryption key buffer. PUBLIC EncryptionKey, TEK _sbCb_ db ? EncryptionKey dw %wKeyValue TEK label byte _cbKey_ EQU OFFSET TEK - OFFSET EncryptionKey ORG OFFSET _sbCb_ DB _cbKey_ ORG OFFSET TEK db _cbKey_ DUP(?) ) $EJECT ; ; macro for 8259 cascade flags ; %*DEFINE (InterruptCascadeLevel(n))( %IF ((%n NE 0) AND (%n NE 2) AND (%n NE 5) AND (%n NE 6)) THEN (%Error(Illegal cascade level: %n)) ELSE (%SET(cascade8259,%cascade8259 OR (1 SHL %n)))FI ) $EJECT ; ; macro for defining real mode raw interupt handler structure ; %*DEFINE (RawInterrupt (level,entry))( %IF (%m_nRawInt EQ 0) THEN ( rgRawIntDesc LABEL WORD ) FI %IF (not(%*Isdef(%entry))) THEN ( %EXTRN(%entry) ) FI DB %level DD %entry %SET(m_nRawInt, %m_nRawInt+1) ) $EJECT ; ; Macro for defining real mode mediated interupt handler structure. The macro has a side effect of computing the max type number ; for use later in calculating the size of the mediated interrupt table. ; %*DEFINE (MediatedInterrupt (type,f8259,entry))( %IF (%m_nMediatedInt EQ 0) THEN ( rgMediatedIntDesc LABEL WORD ) FI %EXTRN(%entry) DB %type,%f8259 DD %entry %SET(m_nMediatedInt, %m_nMediatedInt+1) %IF (%m_typeMax LT %type) THEN (%Set(m_typeMax,%type)) FI ) $EJECT ; ; macro for defining protected mode software interupt handler structure ; %*DEFINE (SoftwareIE () %*DEFINE (AssignSysExch(exch))() %*DEFINE (SysExch)() %*DEFINE (AllocSysExch(name))() %*DEFINE (RequestFileName(name))() ) ELSE (%' CTOS' $EJECT ; ; This macro sets counters for resident tables, data, and then reserves the OsTable. ; %*DEFINE(ResidentDataBoundry(size))( sMediatedIntTable EQU %maxMedInterruptType+1 sIntSwtbl DW sMediatedIntTable IntSwTbl DW cwIntSwTblEntry*sMediatedIntTable DUP (0) rgOsTable DB %size DUP(0) EVEN endOsTable DW 0 ) $EJECT ; ; define Exchange map ; %*DEFINE (MapExchange(veIndex, name, exch))(%' %IF (%m_nVirtualExch EQ 0) THEN(rgExchReal label byte )FI %SET (m_nVirtualExch, %m_nVirtualExch + 1) %IF (%eval(0-%veIndex) NE %m_nVirtualExch) THEN(%' %Error(Virtual Exchange out of sequence: %veIndex)) ELSE(%' %' %MATCH(exch2 m_RHS)(%exch)%' Take leading space off exch, put in exch2 %WHILE(%LEN(%exch2) EQ 0)(%MATCH(exch2 m_RHS)(%m_RHS))%' Maybe >1 space %' %IF (%LES(%substr(%exch2,1,1),9) AND %GES(%exch2,0))THEN(%'constant m_val%name EQU %exch2 %IF (%fMFHardware) THEN ( DW %exch2 ) ELSE ( DB %exch2 )FI )ELSE(%'previously defined EQU symbol m_val%name EQU m_val%exch2 %IF (%fMFHardware) THEN ( DW m_val%exch2 ) ELSE ( DB m_val%exch2 )FI )FI )FI ) %*DEFINE (SymExchange(name, exch))(%' %MATCH(exch2 m_RHS)(%exch)%' Take leading space off exch, put in exch2 %WHILE(%LEN(%exch2) EQ 0)(%MATCH(exch2 m_RHS)(%m_RHS))%' Maybe >1 space %' %IF (%LES(%substr(%exch2,1,1),9) AND %GES(%exch2,0))THEN(%'constant m_val%name EQU %exch2 )ELSE(%'previously defined EQU symbol m_val%name EQU m_val%exch2 )FI ) $EJECT ; ; Test definition of m_SysExchX (internal macro) ; %*DEFINE (TestSysExch(exch))(%TestSymbol(%Pass1%eval(%exch))) %*DEFINE (TestSymbol(Postfix))(%*Isdef(%m_SysExch%Postfix)) %*DEFINE (MakeSysExch(exch))(%' %SET(m_SysExch%Pass1%eval(%exch),%exch)%' value is not used, only isdef checks ) ; ; Assign a System Exchange ; %*DEFINE (AssignSysExch(exch))(%' %IF (%TestSysExch(%exch)) THEN (%Error(Duplicate Sys Exch Def-%exch)%' )ELSE(%MakeSysExch(%exch)%' %IF(%exch GT %m_SysExch)THEN(%' %SET (m_SysExch,%exch)%' )FI)FI) ; ; Alloc a System Exchange, expands as a constant ; %*DEFINE (SysExch)(%' %WHILE(%TestSysExch(%m_ExchLast))(%SET(m_ExchLast,%m_ExchLast+1))%' %MakeSysExch(%m_ExchLast)%' %IF(%m_ExchLast GT %m_SysExch)THEN(%' %SET (m_SysExch,%m_ExchLast)%' )FI%' This next line expands to the actual exchange, intended for DW arg. %m_ExchLast) ; ; Alloc a System Exchange, set word variable ; %*DEFINE (AllocSysExch(name))(%' m_val%name EQU %SysExch xxTemp%name label byte ORG OFFSET %name DW m_val%name ORG OFFSET xxTemp%name ) $EJECT ; ; define RequestFileNames ; %*DEFINE (RequestFileName(name))(%' %IF (%m_nRequestFileNames EQ 0) THEN(rgRequestFileNames label byte )FI%' %SET (m_nRequestFileNames, %m_nRequestFileNames + 1)%' DB %Len(%name) DB '%name' ) )FI%' CTOS $EJECT ; ; define the CTOS processes ; %*DEFINE (OsProcDesc(pEntry, sStack, priority, defaultExch))(%' %IF (%m_nOsProcDesc EQ 0) THEN(rgOsProcDesc label byte )FI%' %SET (m_nOsProcDesc, %m_nOsProcDesc + 1)%' %EXTRN(%pEntry)%' DD %pEntry DW %sStack DB %priority DW %IF(%defaultExch EQ 0) THEN(0)ELSE(%SysExch)FI ) $EJECT ; ; procedures to do initially on startup ; %*DEFINE(InitProcHardware(pEntry))(%' %IF (%m_nInitProcHardware EQ 0) THEN (%' rgInitProcHardware label byte )FI%' %SET (m_nInitProcHardware, %m_nInitProcHardware+1)%' %EXTRN(%pEntry)%' DD %pEntry ) $EJECT ; ; procedures to do before turning on interupts ; %*DEFINE(InitProcIntDisable(pEntry))(%' %IF (%m_nInitProcIntDisable EQ 0) THEN (%' rgInitProcIntDisable label byte )FI%' %SET (m_nInitProcIntDisable, %m_nInitProcIntDisable+1)%' %EXTRN(%pEntry)%' DD %pEntry ) $EJECT ; ; procedures to do after turning on interupts ; %*DEFINE(InitProcIntEnable(pEntry))(%' %IF (%m_nInitProcIntEnable EQ 0) THEN (%' rgInitProcIntEnable label byte )FI%' %SET (m_nInitProcIntEnable, %m_nInitProcIntEnable+1)%' %EXTRN(%pEntry)%' DD %pEntry ) $EJECT ; ; requests to initialize RTC ; %*DEFINE (RtcRq(pRequestBlock,timeInterval,resetValue,cEvents,exchange,rqCode))( %IF (%m_nRgInitRtcRequest EQ 0) THEN(rgInitRtcRequest label byte)FIE  %nDcb EQ 22) THEN(%DEFINE(dcb)(21))FI %IF(%nDcb EQ 23) THEN(%DEFINE(dcb)(22))FI %IF(%nDcb GE 24) THEN(%Error(too many DCB`s:%nDcb))FI )FI %DEFINE(dcb%dcb)(dcb%dcb) ) $EJECT idleState EQU 0 readyStatus EQU 0 remountedStatus EQU 2 %IF(%fMFHardware) THEN ( %*DEFINE (DcbDisk(unitNum,retryCnt,fHardDisk, "name" , "password" ))( %SetDcb %DEFINE(m_Name)(%name) %DEFINE(m_Pass)(%password) %DcbHDisk (%dcb,%unitNum,0,%retryCnt)) %*DEFINE (DcbHDisk(dcb, unitNum, f8inch, retryCnt))( dcb%dcb LABEL BYTE %'fMountable 'DB 0FFh %'fNonSharable 'DB 0 %'fRemovable 'DB 0 %If (%fFP) Then ( %'fNoMultiTrack 'DB 0FFh %' ; WD1010 cannot cross tracks' ) Else ( %If (%fDP) Then ( %'fNoMultiTrack 'DB 0 %' ; SMD can cross tracks' ) Fi ) Fi %'fAttention 'DB 0 %'fTimeout 'DB 0 %SetName %'controllerNum 'DB 0 %'unitNum 'DB %unitNum %'state 'DB idleState %'unitStatus 'DB remountedStatus %If (%fFP) Then ( %'deviceClass 'DB 0 ) Else ( %If (%fDP) Then ( %'deviceClass 'DB 01 ) Fi ) Fi %'userCount 'DB 0 %'oVhb 'DW 0 %'oIobFirs %SET (m_nRgInitRtcRequest, %m_nRgInitRtcRequest+1) %EXTRN(%pRequestBlock) DD %pRequestBlock DW %timeInterval,%resetValue,%cEvents,%exchange,%rqCode ) %*DEFINE (RequestNoRemoteTermination(rc)) ( %IF (%clusterConfig EQ cluster) THEN ( %IF (%nRqNoRemoteTerm EQ 0) THEN ( rgRqNoRemoteTermination LABEL BYTE )FI DW %rc %SET(nRqNoRemoteTerm, %nRqNoRemoteTerm+1) )FI ) %*DEFINE (EndRemoteTermination) ( %IF (%clusterConfig EQ cluster) THEN ( PUBLIC prgRqNoRemoteTermination, nRqNoRemoteTermination prgRqNoRemoteTermination DD rgRqNoRemoteTermination nRqNoRemoteTermination DW %nRqNoRemoteTerm )FI ) %IF (NOT %FS) THEN (%' CTOS' $EJECT ; ; Macro to reserve a communication channel for system use ; %*DEFINE (SysCommInt(iLine,pTxIsr,pExtIsr,pRxIsr,pSpRxIsr))( %IF (%m_nSysCommInt EQ 0) THEN(rgSysCommInt label byte)FI %SET (m_nSysCommInt, %m_nSysCommInt+1) %IF (%pTxIsr NE 0) THEN (%EXTRN(%pTxIsr))FI %IF (%pExtIsr NE 0) THEN (%EXTRN(%pExtIsr))FI %IF (%pRxIsr NE 0) THEN (%EXTRN(%pRxIsr))FI %IF (%pSpRxIsr NE 0) THEN (%EXTRN(%pSpRxIsr))FI DW %iLine DD %pTxIsr,%pExtIsr,%pRxIsr,%pSpRxIsr ) %' Dummy macros for CTOS non-FS %*DEFINE (Floppy("name" , "password" ))() %*DEFINE (HDisk("name" , "password" ))() %*DEFINE (DcbDisk(unitNum,retryCnt,fHardDisk, "name" , "password" ))() %*DEFINE (SCSIdevice("name" , "password" ))() ) ELSE (%' FS' $EJECT ; ; The next set of macros define device control blocks. The entry macros are: ; DcbDisk ; DcbLptr ; ; These macros call internal macros: ; SetName ; SetDcb ; DcbHardDisk ; DcbFloppy ; %*DEFINE(SetName)( %Set(m_sName,%Len(%m_Name)) %Set(m_sPass,%Len(%m_Pass)) %IF ((%m_sName EQ 0) OR (%m_sName GT 12)) THEN (%Error(Illegal device name:"%m_name"))FI %IF (%m_sPass GT 12) THEN (%Error(Illegal device password:"%m_pass"))FI %'sbDevName(13) DB %m_sName %IF (%m_sName NE 0) THEN (DB '%m_Name')FI %IF (%m_sName NE 12) THEN (DB %EVAL(12-%m_sName) DUP (' '))FI %'sbDevPassWord(13) DB %m_sPass %IF (%m_sPass NE 0) THEN (DB '%m_Pass')FI %IF (%m_sPass NE 12) THEN (DB %EVAL(12-%m_sPass) DUP (' '))FI ) $EJECT %*DEFINE(SetDcb)( %SET(nDcb, %nDcb+1) %IF(%nDcb EQ 1) THEN(%DEFINE(dcb)(0))FI %IF(%nDcb EQ 2) THEN(%DEFINE(dcb)(1))FI %IF(%nDcb EQ 3) THEN(%DEFINE(dcb)(2))FI %IF(%nDcb EQ 4) THEN(%DEFINE(dcb)(3))FI %IF(%nDcb EQ 5) THEN(%DEFINE(dcb)(4))FI %IF(%nDcb EQ 6) THEN(%DEFINE(dcb)(5))FI %IF(%fMFHardware) THEN( %IF(%nDcb GE 7) THEN(%Error(too many DCB`s:%nDcb))FI )ELSE( %IF(%nDcb EQ 7) THEN(%DEFINE(dcb)(6))FI %IF(%nDcb EQ 8) THEN(%DEFINE(dcb)(7))FI %IF(%nDcb EQ 9) THEN(%DEFINE(dcb)(8))FI %IF(%nDcb EQ 10) THEN(%DEFINE(dcb)(9))FI %IF(%nDcb EQ 11) THEN(%DEFINE(dcb)(10))FI %IF(%nDcb EQ 12) THEN(%DEFINE(dcb)(11))FI %IF(%nDcb EQ 13) THEN(%DEFINE(dcb)(12))FI %IF(%nDcb EQ 14) THEN(%DEFINE(dcb)(13))FI %IF(%nDcb EQ 15) THEN(%DEFINE(dcb)(14))FI %IF(%nDcb EQ 16) THEN(%DEFINE(dcb)(15))FI %IF(%nDcb EQ 17) THEN(%DEFINE(dcb)(16))FI %IF(%nDcb EQ 18) THEN(%DEFINE(dcb)(17))FI %IF(%nDcb EQ 19) THEN(%DEFINE(dcb)(18))FI %IF(%nDcb EQ 20) THEN(%DEFINE(dcb)(19))FI %IF(%nDcb EQ 21) THEN(%DEFINE(dcb)(20))FI %IF(F t 'DW 0 %'oIobActive 'DW 0 %' lfaMax(2) 'DW 0h %' 'DW 080h %'lfaMask 'DW 511 %'verifyKey 'DW %unitNum + 1 %'ovlyprocOpen 'DW 0 %'ovlyprocClose 'DW 0 %'setRetryCnt 'DW %retryCnt %'softErrorCnt 'DW 0 %'hardErrorCnt 'DW 0 %'currentCylinder 'DW 0F000h %If (%fFP) Then ( %'sectorSizeCode 'DB 1 %' ; refers to WD1010 code ' %'gapLength 'DB 18h %'writePrecompCyl 'DB 020h %'stepRate 'DB 08h %'bytesPerSector 'DW 512 %'sectorsPerTrack 'DW 16 %'tracksPerCylinder 'DW 6 %'cylindersPerDisk 'DW 256 %'trackSeekTime 'DB 020h %'settleTime 'DB 010h %'fOnline 'DB 0 ) Else ( %If (%fDP) Then ( %'sectorSizeCode 'DB 2 %' ; refers to IWS size convention ' %'gapLength 'DB 00h %'writePrecompCyl 'DB 000h %'stepRate 'DB 00h %'bytesPerSector 'DW 512 %'sectorsPerTrack 'DW 32 %'tracksPerCylinder 'DW 7 %'cylindersPerDisk 'DW 589 %'trackSeekTime 'DB 00h %'settleTime 'DB 00h %'fOnline 'DB 0 ) Fi ) Fi ) )ELSE(%' Workstation %*DEFINE (Floppy("name" , "password" ))( %SetDcb %DEFINE(m_Name)(%name) %DEFINE(m_Pass)(%password) %IF (%WsType LE 3) THEN (%' IWS workstations %DcbFloppy(%dcb,%FloppyUnitnum,4) %Set(FloppyUnitNum, %FloppyUnitNum+1)) ELSE (%' Aws or NGEN workstation %IF ((%HardwareType EQ 2) OR (%HardwareType EQ 4)) THEN (%' AWS 220,230 or NGEN %DcbFloppy(%dcb,%FloppyUnitNum,4) %Set(FloppyUnitNum, %FloppyUnitNum+1)) ELSE (%' Aws 240 %DcbHDisk(%dcb,%HDiskUnitNum,0,4,0) %Set(HDiskUnitNum, %HDiskUnitNum+1)) FI) FI) %*DEFINE (HDisk("name" , "password" ))( %SetDcb %DEFINE(m_Name)(%name) %DEFINE(m_Pass)(%password) %IF (%WsType LE 3) THEN (%' IWS workstations %DcbHDisk(%dcb,%HDiskUnitNum,1,4,0)) ELSE (%' Aws or NGen workstation %DcbHDisk(%dcb,%HDiskUnitNum,0,4,0)) FI %Set(HDiskUnitNum, %HDiskUnitNum+1) ) %*DEFINE (SCSIdevice("name" , "password" ))( %SetDcb %DEFINE(m_Name)(%name) %DEFINE(m_Pass)(%password) %IF (%WsType GE ngen) THEN (%' NGen workstations %DcbHDisk(%dcb,%SCSIUnitNum,0,4,1)) ELSE (%' Aws, Iws or NGen cluster workstation %Error(no SCSI allowed on AWS, IWS or NGen cluster workstation.)) FI %Set(SCSIUnitNum, %SCSIUnitNum+1) ) %*DEFINE (CTape("name" , "password" ))( %SetDcb %DEFINE(m_Name)(%name) %DEFINE(m_Pass)(%password) %IF (%WsType LE 3) THEN (%' IWS workstations %DcbHDisk(%dcb,%HDiskUnitNum,2,0,0)) ELSE (%' Aws or NGen workstation %Error(no CTape allowed on AWS or NGen)) FI %Set(HDiskUnitNum, %HDiskUnitNum+1) ) $EJECT %*DEFINE (DcbHDisk(dcb, unitNum, f8inch, retryCnt, fSCSI))( dcbSeg SEGMENT PUBLIC 'COED' dcb%dcb LABEL BYTE %IF((%HardwareType EQ 3) AND (%unitNum EQ 0)) THEN ( %' AWS-240 floppy %'fMountable 'DB 0FFh %'fNonSharable 'DB 0 %'fDoubleDensity 'DB 0FFh %'fNoMultiTrack 'DB 0 %'fAttention 'DB 0 %'fTimeout 'DB 0 %SetName %'controllerNum 'DB 0 %'unitNum 'DB %unitNum %'state 'DB idleState %'unitStatus 'DB remountedStatus %'deviceClass 'DB 0 %'userCount 'DB 0 %'oVhb 'DW 0 %'oIobFirst 'DW 0 %'oIobActive 'DW 0 %' lfaMax(2) 'DW 0C000h %' 'DW 00004h %'lfaMask 'DW 511 %'verifyKey 'DW %unitNum + 1 %'ovlyprocOpen 'DW 0 %'ovlyprocClose 'DW 0 %'setRetryCnt 'DW %retryCnt %'softErrorCnt 'DW 0 %'hardErrorCnt 'DW 0 %'currentCylinder 'DW 0FFFFh %'sectorSizeCode 'DB 1 %'gap length (2) 'DB 004h %' 'DB 036h %'datalength 'DB 0FFh %'bytesPerSector 'DW 200h %'sectorsPerTrack 'DW 8h %'tracksPerCylinder 'DW 1h %'cylindersPerDisk 'DW 4Ch %'not used 'DB 0 %'reserved 'DB 0 %'reserved 'DB 0 %'reserved 'DB 0 ) ELSE ( %' IWS hard disk or AWS-240 & NGen hard disk or IWS CTape or %'fMountable 'DB 0FFh %'fNonSharable 'DB 0 %'fDoubleDensity 'DB 0 %'fNoMultiTrack 'DB 0 %'fAttention 'DB 0 %'fTimeout 'DB 0 %SetName %'controllerNum 'DB 0 %'unitNum 'DB %unitNum %'state 'DB idleState %'unitStatus 'DB remountedStatus %'deviceClass 'DB %IF (%fSCSI) THEN (6) ELSE (0) FI %'userCount 'DB 0 %'oVhb 'DW 0 %'oIobFirst 'DW 0 %'oIobActive 'DW 0 %IF (%f8inch NE 2) THEN (%'5 inch or 8 inch, not Cartridge Tape. %' lfaMax(2) 'DW %IF (%f8inch) THEN (0h) ELSE (06000h) FI %' F  ytesPerSector 'DW 512 %'sectorsPerTrack 'DW 15 %'tracksPerCylinder 'DW 1 %'cylindersPerDisk 'DW 77 ) FI %IF ((%wsType EQ aws220_240) OR (%wsType GE ngen)) THEN ( %'sectorSizeCode 'DB 01 %'gapLength(2) 'DB 04h, 36h %'dataLength 'DB 0FFh %'bytesPerSector 'DW 512 %'sectorsPerTrack 'DW 8 %'tracksPerCylinder 'DW 1 %'cylindersPerDisk 'DW 77 ) FI %'fInhibitECC 'DB 0 %'reserved 'DB 0 %'reserved 'DB 0 %'reserved 'DB 0 dcbSeg ends ) )FI%' Workstation %*Define(ScratchVolumeSpec("name"))( sbScratchVolumeSpec DB %LEN(%Name), '%Name' DB %EVAL(12-%LEN(%Name)) DUP (0) EVEN ) %' Dummy macros for FS %*Define(ExitRunFile("name" , "password", priority))() %*Define(CnfgInitFile("name"))() %*Define(ConfigurationFile("name" , "password", priority))() %*Define(WsConfigurationFile("name"))() %*Define(InitFileSpec("name" , "password", priority))() %*Define(NlsFileSpec("name" , "password"))() %*Define(InstallVdmSpec("name" , "password"))() %*Define(InstallKbdSpec("name" , "pas 'DW %IF (%f8inch) THEN (080h) ELSE (0bdh) FI %'lfaMask 'DW 511 %'verifyKey 'DW %unitNum + 1 %'ovlyprocOpen 'DW 0 %'ovlyprocClose 'DW 0 %'setRetryCnt 'DW %retryCnt %'softErrorCnt 'DW 0 %'hardErrorCnt 'DW 0 %'currentCylinder 'DW 0FFFFh %IF ((%wsType EQ aws220_240) OR (%wsType EQ awsMaster)) THEN ( %'sectorSizeCode 'DB 1 ) FI %IF ((%wsType NE 5) AND (%wsType NE 6)) THEN ( %'formatOffset 'DB 0 ) FI %'formatSapce 'DB 1 %'not used 'DB 0 %'not used 'DB 0 %'bytesPerSector 'DW 512 %'sectorsPerTrack 'DW %IF (%f8inch) THEN (16) ELSE (30) FI %'tracksPerCylinder 'DW 4 %'cylindersPerDisk 'DW %IF (%f8inch) THEN (256) ELSE (202) FI %'fInhibitECC 'DB 0 %'timeInterval 'DB 0 %'resetValue 'DW 0 %'cEvents 'DW 0 %'respExch 'DW 0 %'oDcb 'DW 0 %'rqCode 'DW 0 %'fLockRequest 'DB 0 %'fStartSeek 'DB 0 %'bAttentionStatus 'DB 0 %'pbData 'DD 0 %'cbData 'DW 0 %'dataIndex 'DW 0 %'fDoDma 'DB 0 %'fDisconnected 'DB 0 %'SCSIphase 'DB 0 %'SCSIStatus 'DB 0 %'mainStatus 'DW 0 %'SCSIerc 'DW 0 %'SCSIState 'DW 0 %'rgbSCSICmd 'DB 10 DUP(0) %'CmdIndex 'DW 0 %'rgbSCSICmdSave 'DB 10 DUP(0) %'residualwordCount 'DW 0 %'DMAaddress 'DW 2 DUP(0) %'DMAIndex 'DW 0 %'rgbSCSISenseByts 'DB 32 DUP(0) ) ELSE (%'Cartridge Tape. %' lfaMax(2) 'DW 0FE00h %' 'DW 08Fh %'lfaMask 'DW 511 %'verifyKey 'DW %unitNum + 1 %'ovlyprocOpen 'DW 0 %'ovlyprocClose 'DW 0 %'setRetryCnt 'DW %retryCnt %'softErrorCnt 'DW 0 %'hardErrorCnt 'DW 0 %'currentCylinder 'DW 0FFFFh %'not used 'DB 0 %'not used 'DB 0 %'not used 'DB 0 %'not used 'DB 0 %'bytesPerSector 'DW 512 %'sectorsPerTrack 'DW 9 %'tracksPerCylinder 'DW 1 %'cylindersPerDisk 'DW 2048 %'fInhibitECC 'DB 0FFh %'reserved 'DB 0 %'reserved 'DB 0 %'reserved 'DB 0 )FI dcbSeg ends )FI ) $EJECT ;********************************************** ; Macro which defines DCB for the floppy * ;********************************************** %*DEFINE (DcbFloppy(dcb, unitNum, retryCnt))( dcbSeg SEGMENT PUBLIC 'COED' dcb%dcb LABEL BYTE %'fMountable 'DB 0FFh %'fNonSharable 'DB 0 %'fDoubleDensity 'DB 0FFh %'fNoMultiTrack 'DB 0FFh %'fAttention 'DB 0 %'fTimeout 'DB 0 %Setname %'controllerNum 'DB 0 %'unitNum 'DB %unitNum %'state 'DB idleState %'nitStatus 'DB remountedStatus %'deviceClass 'DB 1 %'userCount 'DB 0 %'oVhb 'DW 0 %'oIobFirst 'DW 0 %'oIobActive 'DW 0 %IF (%wsType LT 4) THEN ( %'lfaMax(2) 'DW 600h,9 ) FI %IF ((%wsType EQ aws220_240) OR (%wsType GE ngen)) THEN ( %'lfaMax(2) 'DW 0D000h,4 ) FI %'lfaMask 'DW 511 %'verifyKey 'DW %EVAL(%unitNum+1) %'ovlyprocOpen 'DW 0 %'ovlyprocClose 'DW 0 %'setRetryCnt 'DW %retryCnt %'softErrorCnt 'DW 0 %'hardErrorCnt 'DW 0 %'currentCylinder 'DW 0FFFFh %IF (%wsType LT 4) THEN ( %'sectorSizeCode 'DB 02 %'gapLength(2) 'DB 1Bh, 54h %'dataLength 'DB 0FFh %'bG sword"))() %*Define(InstallMathSpec("name" , "password"))() %*Define(ExtCrashDumpSpec("name" , "password"))() %*Define(OEM1Spec("name" , "password"))() %*Define(OEM2Spec("name" , "password"))() %*Define(OEM3Spec("name" , "password"))() %*Define(OEM4Spec("name" , "password"))() %*Define(SwapFileTryFirst("name","pswd"))() %*Define(SwapFileTryEach("name","pswd",ib,size))() %*Define(DefineXbusModule(id,cK,fRmos,fMode3))() )FI%' FS %IF (NOT %FS) THEN (%' CTOS' $EJECT %*Define(ExitRunFile("name" , "password", priority))( sbExitRunFileSpec DB %LEN(%Name),'%Name' DB %EVAL(92-%LEN(%Name)) DUP (0) sbExitRunFilePswd DB %LEN(%Password),'%Password' DB %EVAL(12-%LEN(%password)) DUP (0) exitRunFilePrio DB %priority exitRunFilePrioSave DB %priority %IF(%fVarPar)THEN( PUBLIC sbExitRunFileDefault, sbExitRunFileDefPswd, ExitRunFileDefPrio sbExitRunFileDefault DB 79 DUP (0) sbExitRunFileDefPswd DB 13 DUP (0) ExitRunFileDefPrio DB ? )FI EVEN ) $EJECT %*Define(CnfgInitFile("name"))( Even Ifn DB '%name' DB %Eval(40-%Len(%name)) Dup (0) pbInitFileName DD Ifn cbInitFileName DW %LEN(%Name) ) $EJECT %*Define(ConfigurationFile("name" , "password", priority))( sbConfigFileSpec DB %LEN(%Name),'%Name' DB %EVAL(92-%LEN(%Name)) DUP (0) sbConfigFilePswd DB %LEN(%Password),'%Password' DB %EVAL(12-%LEN(%password)) DUP (0) configFilePrio DB %priority EVEN ) %*Define(WsConfigurationFile("name"))( sbWsConfigFileSpec DB %LEN(%Name),'%Name' EVEN ) $EJECT %*Define(InitFileSpec("name" , "password", priority))( sbInitFileSpec DB %LEN(%Name),'%Name' DB %EVAL(92-%LEN(%Name)) DUP (0) sbInitFilePassword DB %LEN(%Password),'%Password' DB %EVAL(12-%LEN(%password)) DUP (0) initFilePrio DB %priority EVEN ) $EJECT %*Define(NlsFileSpec("name" , "password"))( sbNlsFileSpec DB %LEN(%Name),'%Name' DB %EVAL(92-%LEN(%Name)) DUP (0) sbNlsFilePassword DB %LEN(%Password),'%Password' DB %EVAL(12-%LEN(%password)) DUP (0) EVEN ) $EJECT %*Define(InstallVdmSpec("name" , "password"))( sbInstallVdmSpec DB %LEN(%Name),'%Name' DB %EVAL(92-%LEN(%Name)) DUP (0) sbInstallVdmPswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(InstallKbdSpec("name" , "password"))( sbInstallKbdSpec DB %LEN(%Name),'%Name' sbInstallKbdPswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(InstallMathSpec("name" , "password"))( sbInstallMathSpec DB %LEN(%Name),'%Name' sbInstallMathPswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(ExtCrashDumpSpec("name" , "password"))( sbExtCrashDumpSpec DB %LEN(%Name),'%Name' sbExtCrashDumpPswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(OEM1Spec("name" , "password"))( sbOEM1Spec DB %LEN(%Name),'%Name' sbOEM1Pswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(OEM2Spec("name" , "password"))( sbOEM2Spec DB %LEN(%Name),'%Name' sbOEM2Pswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(OEM3Spec("name" , "password"))( sbOEM3Spec DB %LEN(%Name),'%Name' sbOEM3Pswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(OEM4Spec("name" , "password"))( sbOEM4Spec DB %LEN(%Name),'%Name' sbOEM4Pswd DB %LEN(%Password),'%Password' EVEN ) $EJECT %*Define(ScratchVolumeSpec("name"))( sbScratchVolumeSpec DB %LEN(%Name), '%Name' DB %EVAL(12-%LEN(%Name)) DUP (0) EVEN ) $EJECT %*Define(SwapFileTryFirst("name","pswd"))( sbSwapFileTryFirst DB %LEN(%Name), '%Name' DB %EVAL(92-%LEN(%Name)) DUP (0) sbSwapFileTryFirstPswd DB %LEN(%Pswd), '%Pswd' EVEN ) %*Define(SwapFileTryEach("name","pswd",ib,size))( sbSwapFileTryEach DB %LEN(%Name), '%Name' sbSwapFileTryEachPswd DB %LEN(%Pswd), '%Pswd' EVEN ibSwapFileNumber DW %ib swapFileSize DW %eval(%size*1024),%eval(%size/64) ) $EJECT %*Define(DefineXbusModule(id,cK,fRMOS,fMode3Master))( %IF (%m_iModDescMax EQ 0) THEN ( rgModDesc LABEL WORD ) FI DB %id DW %cK DB %fRMOS DB %fMode3Master %SET(m_iModDescMax, %m_iModDescMax+1) ) )FI%' CTOS ; ; final -- set counters in various tables, create gen tablG  Rq(rqTimeMassIo,65,65,0,8,0FFFFh)%' ; watchdog timer' )ELSE(%'floppies %RtcRq(rqTimeMassIo,50,50,0,8,0FFFFh)%' ; watchdog timer' ) FI ) FI %IF ((%wsType EQ iwsCluster) AND (%localFS NE 0)) THEN ( %RtcRq(rqTimeMassIo,50,50,0,8,0FFFFh)%' ; watchdog timer' ) FI %IF ((%wsType EQ ngen) OR (%wsType EQ ngenMaster)) THEN ( %RtcRq(rqTimeMassIoPoll,0,0,1,8,7777)%' ; volume recognition timer' ) FI )FI%' FS m_temp label byte org offset nOsProcDesc DW %m_nOsProcDesc %IF (NOT %FS) THEN ( %if(%ctosp)then( org offset nSoftwareInt DW %m_nSoftwareInt org offset nHardwareInt DW %m_nHardwareInt )else( org offset nRawInt DW %m_nRawInt org offset nMediatedInt DW %m_nMediatedInt )fi %IF ((%m_SysExch+1+%nUsrExchange) GE 100h) THEN ( %SET(nUsrExchange, 0FEh-%m_SysExch) %IF (%PASS1 EQ -1) THEN ( %out( WARNING: too many exchanges specified - nUsrExchange adjusted to %nUsrExchange) )FI )FI org offset nExchg DW %m_SysExch+1 + %nUsrExchange org offset userExchFirst DW %m_SysExch+1 )FI org offset m_temp %if(%ctosp)then( %Ie. ; %IF(%fMFHardware) THEN ( %*DEFINE (Final)( %IF (%FS) THEN ( %If ((%fFP) OR (%fDP)) Then ( %RtcRq(rqTimeMassIo,50,50,0,8,0FFFFh)%' ; watchdog timer' ) FI %If (%fFP) then ( %RtcRq(rqTimePollMassIo,20,20,0,8,0FFFEh)%' ; polling timer' ) FI ) ELSE (%' CTOS %IF (%m_nVirtualExch EQ 0 ) Then (%Error (No Virtual Exch) )FI )FI m_temp label byte org offset nOsProcDesc DW %m_nOsProcDesc %IF (NOT %FS) THEN (%' CTOS org offset nRemoteDmaRequest DW %m_nRemoteDmaRequests %if(%ctosp)then( org offset nSoftwareInt DW %m_nSoftwareInt org offset nHardwareInt DW %m_nHardwareInt )else( org offset nRawInt DW %m_nRawInt org offset nMediatedInt DW %m_nMediatedInt )fi org offset nExchg DW %m_SysExch+1 + %nUsrExchange org offset userExchFirst DW %m_SysExch+1 )FI%' CTOS org offset m_temp EVEN nRgInitRtcRequest DW %m_nRgInitRtcRequest nInitProcHardware DW %m_nInitProcHardware nInitProcIntDisable DW %m_nInitProcIntDisable nInitProcIntEnable DW %m_nInitProcIntEnable %IF (%FS) THEN (%' nRgMassioDisp DW %m_nRgMassioDisp initSysDevNum DW %IF (%*IsDef(%SysDevNum)) THEN (%SysDevNum) ELSE (0FFFFh)FI ) ELSE (%' CTOS nSysCommInt DW %m_nSysCommInt ; MFCTOS 3.00 nRequestFileNames DB %m_nRequestFileNames srgExchReal DB %m_nVirtualExch fCheckMem DB %fCheckMem fCheckECC DB %fCheckEcc %IF (%nUcb NE %nPartitions) THEN (%Error(nUCB Not Equal to nPartitions)) FI %IF (%m_nRequestFileNames EQ 0) THEN (rgRequestFileNames Label Byte) FI %if(%ctosp)then( %IF (%m_nSoftwareInt EQ 0) THEN (rgSoftwareIntDesc label byte) FI %IF (%m_nHardwareInt EQ 0) THEN (rgHardwareIntDesc label byte) FI )else( %IF (%m_nRawInt EQ 0) THEN (rgRawIntDesc label byte) FI %IF (%m_nMediatedInt EQ 0) THEN (rgMediatedIntDesc label byte) FI )fi %If (%m_nRemoteDmaRequests EQ 0) Then (rgRemoteDmaRequest Label Byte) Fi )FI%' CTOS %IF (%m_nInitProcHardware EQ 0) THEN (rgInitProcHardware label byte) FI %IF (%m_nInitProcIntDisable EQ 0) THEN (rgInitProcIntDisable label byte) FI %IF (%m_nInitProcIntEnable EQ 0) THEN (rgInitProcIntEnable label byte) FI %IF (%m_nRgMassioDisp EQ 0) THEN (rgMassioDisp label byte) FI %IF (%m_nSysCommInt EQ 0) THEN (rgSysCommInt label byte) FI %If (%m_nRgInitRtcRequest EQ 0) Then (rgInitRtcRequest Label Byte) FI %' create gen structure %CreateGen data ENDS ); end macro Final )ELSE(%' Workstation final %*DEFINE (Final)( %IF (NOT %FS) THEN ( %RtcRq(bellRq,0,0,0,1,64)%' ; for beeper ' %IF(%fKbdRes)THEN( %RtcRq(rqTimeKbd,0,0,0,1,63)%' ; for repeat key' %RtcRq(rqTimeVid,0,0,0,1,63)%' ; for Video timeout blank' )FI )FI%' NOT FS %IF (%FS) THEN ( %IF ((%wsType EQ iwsStandAlone) OR (%wsType EQ iwsMiniMaster) OR (%wsType EQ iwsIopMaster) ) THEN ( ; %RtcRq(rqTimeMassIo,50,50,0,8,0FFFFh)%' ; watchdog timer' ) FI %IF ((%wsType EQ ngen) OR (%wsType EQ ngenMaster) ) THEN ( ; %RtcRq(rqTimeMassIo,170,170,0,8,0FFFFh)%' ; watchdog timer' ) FI %IF ((%wsType EQ awsMaster) OR (%wsType EQ aws220_240)) THEN (%' %IF ((%hardwareType EQ 3) OR (%wsType EQ awsMaster) ) THEN (%' hard disk %RtcH F (%m_nSoftwareInt EQ 0) THEN (rgSoftwareIntDesc label byte) FI %IF (%m_nHardwareInt EQ 0) THEN (rgHardwareIntDesc label byte) FI )else( %IF (%m_nRawInt EQ 0) THEN (rgRawIntDesc label byte) FI %IF (%m_nMediatedInt EQ 0) THEN (rgMediatedIntDesc label byte) FI )fi %IF (%m_nInitProcHardware EQ 0) THEN (rgInitProcHardware label byte) FI %IF (%m_nInitProcIntDisable EQ 0) THEN (rgInitProcIntDisable label byte) FI %IF (%m_nInitProcIntEnable EQ 0) THEN (rgInitProcIntEnable label byte) FI %IF (%m_nRgMassioDisp EQ 0) THEN (rgMassioDisp label byte) FI %IF (%m_nSysCommInt EQ 0) THEN (rgSysCommInt label byte) FI EVEN nRgInitRtcRequest DW %m_nRgInitRtcRequest nInitProcHardware DW %m_nInitProcHardware nInitProcIntDisable DW %m_nInitProcIntDisable nInitProcIntEnable DW %m_nInitProcIntEnable nRgMassioDisp DW %m_nRgMassioDisp initSysDevNum DW %IF (%*IsDef(%SysDevNum)) THEN (%SysDevNum) ELSE (0FFFFh)FI %IF (NOT %FS) THEN (%' CTOS cascade8259 DW %cascade8259 nSysCommInt DW %m_nSysCommInt nRequestFileNames DW %m_nRequestFileNames iModDescMax DW %m_iModDescMax srgExchReal DB %m_nVirtualExch fSFNM DB %IF(%fSpecialFullyNestedMode) THEN (0FFh) ELSE (0)FI )FI %' create gen structure %CreateGen data ENDS ); end macro Final )FI%' Workstation %*DEFINE (CreateGen)( EVEN gen LABEL WORD DW %nPcb,%m_SysExch+1 + %nUsrExchange,%nMsgWait,%nPTiming,%nMsgWaitReserve DW %nSoftVec DW %nIob,%nFcb,%nFab,%nDcb,%nVhb,%nUcb,%nFub %'sysDeviceNum 'DW 0 %'pSysVhb 'DD 0 %IF(%fMFHardware)THEN( DD %dcb0,%dcb1,%dcb2,%dcb3,%dcb4,%dcb5 )ELSE( DD %dcb0,%dcb1,%dcb2,%dcb3,%dcb4,%dcb5,%dcb6,%dcb7 DD %dcb8,%dcb9,%dcb10,%dcb11,%dcb12,%dcb13,%dcb14,%dcb15 DD %dcb16,%dcb17,%dcb18,%dcb19,%dcb20,%dcb21,%dcb22,%dcb23 )FI ) $EJECT ; ; when an error is detected this macro is called ; %*DEFINE (m_Error (msg)) (%SET(m_ErrorCount, %m_ErrorCount + 1) $SAVE LIST ;*** SYSGEN ERROR -- %msg *****ERROR***** $RESTORE %OUT(SYSGEN ERROR -- %msg )) %*DEFINE (Error (msg)) (%m_Error (%msg)) ; ; end of file sysgen.mdf ; ssioDisp DW;******************************* INCLUDE HEADER *****************************; ;* *; ;* INCLUDE FILE: SysGenUVA.Mdf VII030B M07 === 03/22/89 *; ;*  *; ;* MACHINE: B20 LANGUAGE: ASSEMBLER OS: BTOS II *; ;* *; ;* DESCRIPTION: Include file for SysGen.Mdf to define Unisys specific *; ;* data and publics. *; ;* *; ;*  *; ;* HISTORY: *; ;* *; ;* MM/DD/YY VVVV/MM PROGRAMMER / DESCRIPTION OF CHANGE (Most recent first)*; ;* *; ;* 03/22/89 II030B/07 A. Kohirkar/ Backed out the previous change. *; ;* 08/26/88 II021A/06 A. Kohirkar/ Changed nTmp to prevent allocation of *; ;*  ExUCBs for remote users. *; ;* (Mike McCrary for OLYMPIA) *; ;* 06/01/87 II010C/05 M. Evans / Added check for ctosp to the declaration *; ;* rgfSys which is not needed on PM machines*; ;* 05/06/87 II010B/04 M. Evans / Changed name back to SysGenUVA.Mdf, it's *; ;* a long story... *; ;* 04/30/87 II010A/03 M. Evans / Changed name to rmSysGenUVA.Mdf *; ;* 12/29/86 080F/02 M. Evans / Added wLocalUser for quick ident. of OS *; ;* user numbers and forced word alignment of*; ;* word arrays in the user number scheme H  rs dont understand new XID msgs %'*' %'*' PUBLIC fOldMaster %'*' %'*' %IF (not(%*Isdef(%fOldMaster))) THEN (%Define(fOldMaster)(0))FI %'*' %'*' fOldMaster DB %fOldMaster %'*' %'*' %'*' %'*************************************************************************' )FI ;;;;;;;;;;;;;;;;;;;;;; User Number Block Definitions ;;;;;;;;;;;;;;;;;;;;;;;;; FALSE EQU 0 PUBLIC rgwUNOwner, nUNBlocks, rgbUNCount, bUNBlkSHR, wLocalUser, ExUCBLast %IF (%fMulpar NE 0) THEN ( %IF(NOT(%*isdef(%ctosp))) THEN (PUBLIC rgfSys)FI )FI %IF (%*isdef(%sUNBlocks)) THEN ( %SET(sBlk, %sUNBlocks) ) ELSE ( %SET(sBlk, 8) )FI %IF (not(%*isdef(%nUNMax))) THEN ( %SET(nUNMax, 0FFH) )FI %SET(nTmp, %nNetUsers+%nUserNum) ; Pad net users out to %SET(nPad, %EVAL(((((%nTmp-1)/%sBlk)+1)*%sBlk)-%nTmp)); next avialible "Block" %SET(nNetUsers,%nNetUsers+%nPad) ; of sBlk user numbers. %SET(nUNforOS, %EVAL( (%nTmp+%nPad) / %sBlk)) ; Calculate # of "blocks" used ; by the OS. %IF (not(%*Isdef(%nUNBlocks)for*; ;* quicker searches. *; ;* 09/24/86 080C/01 M. Evans / Created this file by removing code I had *; ;* prevoiusly added directly to SysGen.Mdf in; ;*  BTOS 8.0.B and later support for Allocat-*; ;* User Numbers. *; ;* *; ;* TITLE: BTOS SYSTEM SOFTWARE  *; ;* *; ;* PROPRIETARY PROGRAM MATERIAL *; ;*  *; ;* THIS MATERIAL IS PROPRIETARY TO UNISYS CORPORATION AND IS NOT TO BE *; ;* REPRODUCED, USED OR DISCLOSED EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE *; ;* OR UPON WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF UNISYS  *; ;* CORPORATION, DETROIT, MICHIGAN 48232, USA. *; ;* *; ;* *; ;* COPYRIGHT (C) 1980 CONVERGENT TECHNOLOGIES, INC. ALL RIGHTS RESERVED *; ;* COPYRIGHT (C) 1989 UNISYS CORPORATION *; ;* **************************************************************************; ;*  *; ;* UNISYS BELIEVES THAT THE SOFTWARE FURNISHED HEREWITH IS ACCURATE AND *; ;* RELIABLE, AND MUCH CARE HAS BEEN TAKEN IN ITS PREPARATION. HOWEVER, *; ;* NO RESPONSIBILITY, FINANCIAL OR OTHERWISE, CAN BE ACCEPTED FOR ANY *; ;* CONSEQUENCES ARISING OUT OF THE USE OF THIS MATERIAL, INCLUDING LOSS OF *; ;* PROFIT, INDIRECT, SPECIAL, OR CONSEQUENTIAL DAMAGES, THERE ARE NO *; ;* WARRANTIES WHICH EXTEND BEYOND THE PROGRAM SPECIFICATION.  *; ;* *; ;* THE CUSTOMER SHOULD EXERCISE CARE TO ASSURE THAT USE OF THE SOFTWARE *; ;* WILL BE IN FULL COMPLIANCE WITH LAWS, RULES AND REGULATIONS OF THE *; ;* JURISDICTIONS WITH RESPECT TO WHICH IT IS USED. *; ;* *; ;* *; ;*************************** END OF MODULE HEADER ***************************; %IF(NOT(%*isdef(%ctosp))) THEN ( %'*************************************************************************' %'**** The Macro %IF statement in this block is not commented out. *******' %'*** This gaudy display is to catch your attention, fOld master should ***' %'**** probably go away in BTOS II, it is for b21 and b22 support ONLY ****' %'*************************************************************************' %'*' %'*' %'*' ; pre 9.0 masteI )) THEN ( ; If nUnBlocks is undefined, %Define(nUNBlocks)(%EVAL(%nUNforOs+10)) ; set it for 10 free blocks. %IF (%EVAL(%nUNBlocks*%sBlk) GT %nUNMax) THEN ( %SET(nUNBlocks, %EVAL(%nUNMax/%sBlk)) ; If 10 free is to many then )FI ; set to the maximum allowed. )FI ; If more than nUNMax user numbers are defined then cause assembler to trip. ; The Default is 0FFH for future XE compatibility, don't laugh - I mean it. ;IF(%nUNBlocks GT %EVAL(%nUNMax/%sBlk)) THEN ( ;****************************************************************** ; ERROR: TO MANY USER NUMBER BLOCKS DEFINED, MAXIMUM IS %EVAL(%nUNMax/%sBlk) ;****************************************************************** ;)FI ; Calculate # to Shift Right for index into rgwUNOwner array %SET(iTmp,0) %SET(nPad,%sBlk) %REPEAT(%sBlk)( %SET(iTmp,%EVAL(%iTMp+1)) %SET(nPad,%EVAL(%nPad/2)) %IF(%nPad EQ 1) THEN (%EXIT)FI ) bUNBlkSHR DB %iTmp rgbUNCount DB %nUNBlocks DUP(0) %IF(%fMulpar NE 0) THEN ( %IF(NOT(%*isdef(%ctosp))) THEN ( rgfSys DB %nUNBlocks DUP(FALSE) )FI )FI %SET(nTmp,(OFFSET $)) ; If OFFSET is odd then force it even to speed %SET(nTmp,%nTmp-((%nTmp/2)*2)) ; up memory access %IF (%nTmp NE 0) THEN ( DB 0 ; Filler byte to force even addres )FI ExUCBLast DW %EVAL(%nUNBlocks*%sBlk)-1 ; This is the last usable ExUCB. nUNBlocks DW %nUNBlocks wLocalUser LABEL WORD ; First block is owned by the OS by definition rgwUNOwner LABEL WORD ; Build array of user number block owners ; (OS is only current owner). %SET(nTmp, 0) %REPEAT(%nUNBlocks) (%IF(%nUNforOS GT %nTmp)THEN( %IF (%fMulPar NE 0) THEN ( DW 0H ; Preallocated OS user number ) ELSE ( DW 2H ; "Safe" number that won't be deallocated by termpros. )FI )ELSE( DW 0FFFFH ; Unallocated block of user numbers )FI %SET(nTmp, %nTmp+1) ) ;;;;;;;;;;;;;;;;;;;;;; End User Number Block Definitions ;;;;;;;;;;;;;;;;;;;;; *; ;* REPRODUCED, USED OR DISCLOSED EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE *; ;* OR UPON WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF UNISYS I  J J  K K  L L