IMD 1.17: 11/11/2014 11:14:41 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 12 OF 30  SR12q82VKXSVRDOS 0420k-aAY =|CF/ aAM &_ @gaA^ j gJ g* (=gaJf Rn&N` aJf RlF3 NaJffRfN (=gaJfRmNaJfضRoNaJfʶRL3 gNafkfgNfNaBP  SEfB8 + dg "S+ *gNukL3 *+ d+ *gNuNuaBP DIFg DFORgp`B8 + d *S+ dkF3 ` <!`,KG `,KG K`,KG N$Ka" (fak6g`6F3 &NNu =f ak>Jf6&NNuR Xg Ag DgJ`E ` F3H E K`E NaNu Rfa +g@ -g* &g !g`ajJf0I3 C`a\Jfv0C` aPJfj0C6&NNua@JfZ0C`aB( )f$aP =f CI3 ja@8 0fNu 1fJNu6a('y* !'7k!>!'L* :9(`aV3 )E B< fL(aB< fL(QaB< fK A'M"=L(aB< f($'H"=U3(A L(\aB< f k aBY =|CF/ aBM z&_"HaB^ rkdL(7afTaB" ZG3 fH8<af< I(  b&$aL* ap*<* 'k :!'a@ AgA  <*`BR  <-aV3PB B <&<aB< <.A `BX k L<(!c HE8:< aB! faBe `K3 Nu/A!'.HG6.HD8HD.Nua6fL* a*<* afafNuN3 f <'`BR |  g$<0000aB l 0000f$+ :g" 0ALLfB'B!'B<+!>P3( /,k L-F!c,_Nu * PgJ <&`B (aL* aP*<* a$fafNuI3P k L!A c <,f <+f <* f <,H EA EaBR Q3(H /,k L,. c,_BBFJNuJ >fB9 aBY / aBM &_kgB'F!'<+!' kK3H L!F!c`V <(`B pv,+ Bg RC Cf6<NuL A!'0H"<O3@ taB" <;`0$H/ aI3 B &_k Ofg4 k &( '`& g f4g k ( 'I3 g@2<@aB hfg ,+ &'F &NuEREWERPWPREWPRPWEWPWER 3 PR4\C1DATSEG ASREL' DAT SA C%(8112040900 DATA SEGMENT2PUCBCHOPT PUCBSESS @AUTOPAKT xPUCBCMDLG PUCBBNAM PUCBCMDND pSCTSBRK PUCBREGX PUCBCHLVL pJOBQUEUE @PBA PSCTBDSL jPSTARTMON PUCBCMDST pLOGM PTSCTPAR PSCTINBE +pSCTSASR 2PCHPOSNUM PSTRTBCT PNEXTQUE POFHS HPSTRUTSES PSYSDFLT PCHSAVLVL PNEXTRUN PPASSKEY PSTRUOPT PSQRB pPATNPAR PUCBCAT PEETRCV pPUCBLEN PUCBTID 2PATNMSG PLDRLDO 8PLDRRER @PUCBBNO PUCBSNO PUCBUNO PLDRFHS HPUCBVOL PSCTDAT PUSERNO PCURRUN PLDRCLL :PUCBTSK PUCBT SO PLABEL01 PSCTIDB 2PSCTIDL PUCBUTN PUTTCBP PLABEL02 pSCTBEG PUCBLUS PUCBTUT PEETSTK PLDRROK (&SCTF3( &SCT( &BCT132((&EET*x4eF1EET ASREL' EET SA E(8112291600 ENTRY/EXIT TASK2pEETSBAT pAUTOPAKT pDEFAULT pENDQUEUE HGTSEGARG pINITPAR pTESEGPGM pJOBQUEUE pPBA HTSEGPGM pSTTABLND pLOGM pLOGNTERM pTSCTPAR pSCTSASR pSTRTBCT  pOFHS pSTRUTSES pSYSDFLT pRETRNVNT pTESEGSTT HTMOVPAR 2pNEXTRUN pTASQPAR pBRKPAR pATNPAR pTERM5 HEETBEG pUCBTID pPROC260 pATNMSG pUCBSNO pUCBVOL HEETSNO pSCTDAT HDELAYS pSTTABL pCURRUN pUCBTSO pSCTIDB pSCTIDL HEETASR (pLABEL02 2pEETSTK pLIMRUN pBHWCVT pNXTSNO HEETSXT 2pUSRSNO pUSRIPR pSTRUTN HTRAP1NTS dpUCBREGA5 pUCBREGA6 HTRAP1TYP `HGTSEGDAT HENABLASQ pREADEVNT pAUTOEVNT HTSCTASQP pUCBLDCNT HDISABASQ pEET_GFLG 2HDELAYSEC (I3U EET 121084 4G(O +'O 4O 5IA /< O :f&L(L)@J3UD @H@@!6B9(#)%'A 1'B!1'C -'D .'E!.7F :A(aA(#aJ3D  A(%aA(&NBgpNA`A(/B(ka9)Ag"0|aA@'HA? AI3 ('PAA@?p#NAaL0 0c8g4<ja4'J $` fa&`4@L J3Q!@ $*aDg4`R'D 0aB* `P(kE(NuL$+ ,A!HNAfNuJJ3 ` `A!H~NANu <B$+ ,&<aB( |` |p!` |`F3 &SCT(&SCTP&EET(&SCT .SF3 CT&SCT .ARG&SCTI3P (3aB> (g (g`LA(/'C )(g."ggPH`H3$ f"H`'A!+'h!'p#A 'NA`gf  8f J !F3PA fa`a'@ '@ 9A !@aAaxAap'H =Aad'H SRV4: UNABLE TO LOAD TASKDUMP.SY F3 $ $ FROM **xx EMH ERROR # $ `3?USR SVC IOS FHS LDR *************xABCIKLTWXYZDJ3B@'d **S@ F3 ERRORMSGSYADIAVAILABLEUNF3ABLE TO OBTAIN USERS LOGICAL UNIT NUMBERUNABLE TO ASSIGN ERRORMSF3G.SYNO ERROR MESSAGE AVAILABLEUNABLE TO READ SENTINEL CODE \K BIF3NARY VALUEAVAILABLEUNABLE TO WRITE TO USERS OUTPUT DEVICENESTEDF3 \K SENTINEL ARE ILLEGALMESSAGE BEING BUILT EXCEEDED BUFFER SPACF3EUNABLE TO RECEIVE LOGICAL UNIT NUMBER FOR DEVICE CODEUNABLE TF3O RETURN LOGICAL UNIT BACK TO USERUNABLE TO MOVE CALLERS PARAMETF3ER BLOCK OR PLUG POOLPLUG POOL SIZE EXCEEDS MAXIMUM SIZE OF 96P3INSUFFICIENT NUMBER OF PLUG POOL DELIMITERS*B *L**v**,b3j* *&**&)*P5***3*)*+B*6B*:By*0#)@*,/. .!/P3R-| n !#)@#)JH!$#)C)aB&C!-_ JfA0@J3D@1|NCf . #*A!|* NBf&(ajaA HB BL3@GI`.:gLB*6B*:d: \fb+J f(*0H3 azgp Cg Kf`4*0aRTaCr 1WF3@K C"qNSn`lA!zF S!LH0$h  g4cS!JF3NBf*d&T  fR gJ"d !J `U`L JftA0M3*Bh,:.:-|(!|NC|NC .  n `B#)d*,` 5PaYF3`J05Pax`5Paf`K $ 5Pa6T`$ 5Pa&`B@$H35Pa`*0g0|4BKN(af @aRwSna]`F3AK f2A !n  . ! R `bN!@!MpNAfF3 DA  h ` d$JjSfk daj`S` 0. @ EH@G305P( G!AL/(!KG a(!_Jf"(a&Sf (a&D`H3&D`UpB 9c 鍊Q]oH*6֋R&C`GF3 af&( \f Sg Kg|Sf&h &(  g G3 f . fA $01|n!|NCf4A %0N3P |NC#*>*0A $1|NCf`#....*>*0`A!KF3 &NBNu4<`4<0 :m^SBfNuAH`AH`AF3Jj-Dr `4eRB`ИJjBJf JkBNuJkBN3`tB 9n 0lRJfg ڀSBfNuR9*`R9*`R9*`R9*`R9Z3*`R9*`R9*`R9*`R9*`R9*`R9*`R9*`R9*`#*,Ia :FH@I~aaJ3@aB:b/I\aCXADraB#A|0!|)@  H3TnI<4(t  SFf  S!I?(hNB1_B9*`K3$`#)aBvfB`b. x cBC#)^Nu . IF3a* . H@IaNu/ $ fBSf(_Nu , m ,~c J,g|.J3NuC.JkfNu*0f::f2*0*KA !n G !K!|30p&MNAg*_`BNuNu4 <1DTA ASREL' FDTA SA H9(FMS DATA SECTION2@SEGBLKO @SEGBLKS @C7ADDR @CEADDR @DVEND 0@DTABLK "@FCBEND @ACKBLK V@IOCOMS @DEVTBL 4@FCBSTR @FMSSEG .@TDBLK V@IOCEVT @WUBLK @FHSFLG 2@FMSBLK @QUESPL @SEGBLK  @FATEND (@DVSTR ,@FMSAP @FMSTP @FMSASQ @PATCH  @QIOBLK @EXTSTR @FATSTR $@FHSQUE @MOVBLK :@FMSBLK1 h@SEGBLK2 j2@VDTEND @SEGBLK3 @SEGBLK4 @SEGBLK5 @SAVESP @FMSASQ1 >@FMSFCBA @VDTSTR @SYSPACE  RF3>FDTA083082 4 *4*4FAF3@  F3H3 *H3@IOSG*#3;^)>24;1FHS ASREL' FFHS SA P!(FMS FHS HANDLER2pGETFCBS pGETTSKID pMOVENAME pRELLUNR pFMRW15 pDEFDAT pDEFFAB @FMSF35 rpDVEND pCHKWAP pACKREQ pCHKRC pCHKWC pDTABLK pMOVE2U pFCBEND pNOFCBS pDSNME @FTL.EQ pACKBLK pIOCOMS pSRCFCB 2@FTL.HI pDIRDEL pDEVTBL pFCBSTR pGETFAT pCHKAP pCHKSPL pCHKWPD @FMSREV pFMSSEG pGETDCQ pGETFCB pRELFAT pCHKPRM @FTL.NE @ICMDJP fpMVEFNM pCHKASC pCHKASN pRELFCB pRLNFAT 2pTDBLK pGENNME pIOCEVT pDIRNME pATTIOB pDIRINS pWUBLK pFHSFLG pFMSBLK pNODVS pSUASQ pDSNXT @FTL.T pQUESPL pSEGBLK pSMOVE4 pSMOVEA pFATEND pFMSIOS pNOFATS pDVSTR pFMSAP 2pGETIOB pUSNCHK pDEVFRE pFMSASN pFMSASQ @FMSASR pQIOBLK pSETBEG pSRCDV pDEVBSY @FMSRTN @FMSSTR pRELIOB pFATSTR pFHSQUE pRELAPF pGETATT pMOVBLK pGETLUT pPUTALL pVALFNM pVALVOL 2pRELLUN pRLNFT3 pVALUSN pFMSBLK1 pNOVDTS pVDTEND pSEGBLK3 pSEGBLK4 pIREWIND pSEGBLK5 pSETPTR pSAVESP pFMSASQ1 pFMSFCBA pVDTSTR pPUTALL2 pSYSPACE G3(P``FFHS110581 3#(#I(e)G <)  d.I#(l0< bvSF3J A(#(cR#('0< VS#(R#(U0< HS#(FR#(I0< ?F3(IS#(t"y(l h$g (g"BSRCv(cb P`,y(lJgdF3-L0<S-L-L R-L(0<-L,S,-L40<-LI3!8S8-L@-LDSDMv(ccA(e0<NAA(g"|.FHSpaBf.#G3(<#)< |0<!NAa( y(#,p&NAa`H瀀0|0<NA`gNufNubI3NuBgH*f@C(j f0 )g. )f ̝ ) g ) gBGI3 ) g.LTNw iM #(i.nrL>gaB:(Nu") ,y(lgS3TMv(cc`aBSaBNaBM$y('f EV(c`)=gPaB-F3$h f $h!J `JJgF&Rg$K`&J8e B(*HzF3T#(nA(jK(ap `&BB)g%i %i` %i %iF3 %i$i)iAB*%|(V h (Vf gJkJg PF3`#(V`b*(n&&H"(Jg A`" (g!A`2JF3j"%A#(V`" Jj'A%H y(#B(*`4(JF3T B(kE(jG(O0</6S@fC(OK(>)f -g )4)eJfXK3" -&f0@gU-gaBMʙ̝C(OA*<-2<fJXH3 SAj`$B0( @NA*L0JPa(XgJX`BA(OK(>$(&(x"h$-I3(aBM^A(Y!B !CBG gJf`4GV!K gG$`GH3!K!|A0<NAg&)a!|)a!IX!|A0<NA J3f<,g4A(P !CBh,g !l,1|#)8A0<#NA`aBaM3B f Jf B(+`paB@zB(+`D)=J(VgE(V`pA(OO3@aBWNB Uf-faB8`$Jf -gaB^&`-g "h F3`p`p`p`p `p`p`p`p`p`p`p `p`p `p`p`H3 p`p`p`p&p @0  v @  l@@fL3DaB0f4aBS4-B -@f)g BfX` Bg BbFF32-"f>B-% Bg Bg B` e dbfJAgEd`"F3-'f 0< @'` e-&f 0< @&` bB6-"fTB-I3'eB-&e`J$gaB.fX#(k5m 0-L3@25m"4m&8m'9m%7%m$ -@g -&faB7TaB1PU3Q<aB)Hg`(JBaB;6g* f -@g -&f aB7aB1`"aBmU3*@  `aBmf-gB(kaBW#(k`aBW` - gaB`fTaB]U3 @%fNaBSA 0< X fS@f`aB\f0aB$e * g&`aB.f#(kaB1U3  - g aB!|g` aB3r2-AaBffaB)`f(J2)aB3PJjJBg JAU3 gnfaB(8f`aB.fHBaB&fHB gaB(faB5-gL3 BaBKgaB/`A(C !i-g+lt(!lt`!m(!lI3l 1|1| ,|tR!@A0<NAg" faBT` g aN3"@$aB/~`+y)C 0 9)CSЭ(+@,)m(paBQX9mlB9(JlJEF3jl-g )j(8)j,4)i)i)i )iJk*.Mf"O3@@A(60<JNA5h< JBg5h:aBX,g!|2aBgaB/`I3(JB(kaBZ"i #J3|_Jj2,AB()[3 DJ`aB0nfhaBShaB$dd`aB.\fV#(k5m 0aB1J<aB)Bf<(JaB(6f0a3I( aB50BaB%*faB[$faB/aBW`D"aB[ aB/`aBhaBSB*R3 gz`$aB:aB[* *&fpaB%g*aB[g*)fB,g:F3@A(d !lA0<NAf A(d!ll A0<NAf4A0< NAf*2,A ,R3 @aB/XaB)PaaB*HfRJRfL:BmaB4/ AJ3(g"|.SPLpaB #(B#)B"_JfA(B0<#NAg ga`JRf * X3( faBNaB4faB^ fp`aBhaBS i faB+fI3P* f - gf * g& -&g -@gaB\hX3 HfaB`bf0- j g 2)aBLNf"JaB.Ff#(kaB1:&J$IaB92faBW,R3H`VaBhaBS * f* f* f& m gaB`f^aB1%lFI35lJ%lL5lP2)aBA)jF9jJ)jL9jPJg"A 2< 0L3 SAfBj Bj0Jg`8aBD!m$!J !|<aBlgp`L3g")aBRXeBB(y(U$)&)ff $T,R`4aBM*IV3D(FcxB$)&)`paBh aBSaBaB*f@/ A(g"|.SPLpaB#(B#)BI3"_JfA(B0<#NAgJ ga\`"i ;i aB)aFJBf!O3AHBJBf!aBXaBg`aBMzx`/ -f"_+i+i `"@I3 - A(gaBLf+H+I "_,-.- f Jf,) `$ y(# hgVF3fg P`,B-ކ-f$G ) `$i $j(y(UI3@ gI(Fca\,f-gD *&gL&LaB(f. L0<H0S@O3@fBlBlaB_2,A,RaB)vgaB/n`-f -"- fJf`I3,).) )"))@)A)F)G "G`C0<aB2eS@fF3 gB0- @f"pVDTEND pVDTSTR @PUTALL2 h "*F3FIOM040584 4&I$ nepNu/ "n a"_fBBHB $npF3ĀD,BNuJfpNuH>4* .$ff*n aB$cJ"Kae8c F3axf&ae `"a|f,MSgaX`$B` gJf aDg fpF3L,|Nu*@ "@a8B"KaFecafa:e`Jfxag`pRJfF3$J c / "Ka"_Nut,BNuS` f Jg f6B`4ւBF3R<Nu f JFg Fg` f Jg gg<NuH"0$VeF3p`&IbJgaxgL DNuMSgaNf`$B`/$gI3@a4f B$-|`Na f-I$B _Nu-@V-nZ-n^aBNu/B.MF3g .$fa `-|`NafMJ _NuH@pra`BJfN EXORF3fJ MACSf@ g< g4 y('g($Vg Av(&cAp 0S@fI3BLNup`/M n@"nDHA2<`-ANHV"HaBL _NuH@praF3fBC n@p 0S@f n@"nDBh>pH@H@c n@@>H@@?pF3r aLNuH%KF5BJa ` /0ga4f -|I3`NB0a f-I0B _Nu-@V-n(Z-n,^aBNu/B.Mg .0fF3a`-|`NafMJ _Nu/F3 f j g&C p *gS@fBFBjJBLBjPp`4*P *L`"KF3 JgApa|fpAK anf&HC Cm3 g Cg|Ef5BJ%IF3FG pA0S@fDg JAg|0"n40*PCpG 6S@fBL+NuHB[S@f`F3H@@",Hfp`"Aa LNuH|$,Hfa`F l@C )IP((p&a8F3f.af(Jf %D$ Jf %C  aBHL >JNuH`T$ F3g>raf6K gJj&lPHg:S@fUg`Sg#D raF3L*NugBSBf`H@@ graf" ra` %C  JLNuH3HTA? ma`h&(BA* PI00($"@&l@*lD",H lLX3BBNB$ B$ B$B$PB$PB$P)HLgabfBL*NuJfa`pBLJ`F3$*,,<`X~h`$*(,<\T.<d fpgRgSbJgZg< ,F3\(Jk ,`:(ڀbd,fr`BaftBLBJgF3g`ab`ag`.gaNf$+ AP ",H`e pca`aF3g`( 4`a BBHFHG(KPgDda`(2(JGgЄ`ЁF3b$٬\Ӭ` M*lDWea~`Jfat`)HL gB &lt(I3Sڋ)Ex" H#V-|`NaBg @"y(%g$)g"fF3")HHf ")L@gC(!c`L/".Za,g A"it ٱcL3 `$aB !it!A R!@A0<NAaBaz _`$,f-lj-lI3nP/aBf _fV0*4gS)Kxag`:,g|g"ERF3BQBBxb0ggRRA`Whgp`Jfa`J*7fa F3`JfJ gaVg`\gj"B*7 ltJj4fTa2eJf4aLf.AF3 CP LgACPDea`a g` A^aca0f `F3J\gBahfBLA ac lPabBE+ GP a`,+F3۬\:+۬`BE^fa2`AdJgA)KLanb`& *$HF3ga`ЗQ+\:+`BE K`JTga` JgxagJ`I3@"p`/ af~H(VBHaBg:"y(%g fHgC(!c`F3a: K"i@ ٱcaL`af.)AHB+ A Dea\`pJgF3B"_NuHTB",Hg6"g2adfF ,dR)@T)@\",hR)AX)A`F3a jSSHd`L`RHTB",Hg"+gaf2 ,T&S",X(SHF3dBBa "HTH\`HT * g",Hg"p)@d)@h`F3^B@+ A J\gBaXf&a`HTB",Hg"l@JgX"*$gVaF3fBa&fBBC+ A0 a L(HdR*R,B%0%JF3 MHxT`@",Lga g6`HpBg|L @ fp`nHVBF3&HB+ C Jf BHBL`.CCDUdJf*8 F3H@J@gRBa &fg Jg&paL Nu *FfaPNuH"@aF3df$0*J"n(Ap2S@fM BLNufBNuSaF3faNuHXLt R@g2<@RIBYSAfS&lL HV*2F3 g\B*72*4 B6f6fa `:g RCfa `*G8& JAfTF3xbabfag<` K`L Nua fB`HLtF3R&lL fa 8`f*2BBBB*7:*4f$6g*HgRRbI3f`gJXf`( v*IHDJDfHDaBB@*9@ca `p,grF3Jg. fH MKB& aL!eg Jfaf6B0+h,I37D٬h٪,aB"`gJCg a lBL+Nup`,g+fPF3kfJ& 8gAagd8"l@BA C g) ICDea F3`aXbazg`Nqp`/B* ga"Bag"ag"ag"F3a g"af LNu/B`B@/ *CJgegfS@fB*_NupF3`H|"lL fa r`B*7gGBfa X`ga X`4 l@BF3v ֈ( A Dea :`g&^(A fa "`p C& (adbehaF3gJ\f\AP$,DWdRJgN^Ba:e b>aXgJg6BaNfHfF3SEfL( gSEfa JgBL+>Nup` l@t grafA F3`*2 NuH>J*7fa h`^ raNfT,,`B*7"ltB:*4"F3Jfa >`4xd>JEf2fa *` gR K0& argep"JEfJaLF3|NuR`p`z`H?BBB,gR(fa `B" ga `2L3&lx.,|Bcr&a^fv)MxaB"璻|gaBBaB$& IB"_* gF3a("_* gaxg("_* gajg(""H f L(Nu @*HbRRF3g1#`BNu lt R$& R*,Lfa `db afF3d~" Jg*KJgBҀaga` ltafB"HK8&AKgF3gb0SCf`" K1#f&EB@+GDea` r azg`F3aTf FKH&Er a`fafrB` a fa,f)Ix&EB a:fafF3؆KH"H`)IxSxp`)FtBa4a)HtJNuH. BB"lF3Lfa`Jfa`"l@&()) C *,DKC,SbF3$ dJf*7KbgBPBf C)IP` !fѬPLgBF3"lL)Ѭ\0)Ѭ`B*7)KL"WJ"f J"faV`Nu&lD&,@"lL$B)d(WB)KdJg F3X2ݻf`BBL"Bal/ CB( A a fJfaV`aF3fa^B`J*7g.B:*4fB0fa$`*HgRf`*AagL3P`>JkSg4 fJk Ff<I3` g ge `)A4 raB%Lg f lF3f`T)l\8"lt",4B0*4g ``($,`gB0gRF3xbR`0gB lg lg lg lfJj4F3fdT *@gZ,fR,fJB*7D n@MkDb"SfF3`bAgDb  SAf`t"n@  g,fB*7dL3 Bd taB00!@(g !I!l A0<NAg gaB. `L3 t` f2,A fvfh`H" n@aBg gRaB.O3@@@aBfhgR,gRgb(aB/f R`aB/fL3B`p  IJj4fT`8 g( n@aBTfJfr g aBBdL3 `aB8b f ,|xgBJj4fUe6"lxRR4 faB/f6R3Q|dBi)IxpaB3aB2`\aBfd)l\8"ltS)Ix`(paB3O3 Jj4fTaBf^` l|RaBf&HaB lg$)l\8)A4F3 f(B0*4gz`| g~ f g g`)A4)l\8R3$ I Jj4fTaB (faB/"fV lfpaB3BJgSf aB4fL3 `tBSgpaB!f`aBf fR4B0*4f 0R3H@gR`|aB*aB9f0aB6`NqBaB+$,&,x"l0,,gzF3@`B8zpB`p`p`p`p`p`p`p`aBR`p`p`p`491UTY ASREL' FUTY SA!"(FMS UTILITIES2@GETFCBS l@DOIO t@ATTIOBO ^pSEGBLKO pSEGBLKS @MOVENAME P@DOIO2 z@RELLUNR pDVEND pDBCHG @CHKMA  @CHKWAP pFABCHG @ACKREQ @CHKRC @CHKWC pDTABLK @CALREC 2@CALSEC b@MOVE2U 4pFCBEND pFTL.EQ @MVEKEY @MVEREC pACKBLK @CMPKEY @DMOVE rpIOCOMS @SRCFCB pFTL.HI pFCBSTR @GETFAT @CHKAP @CHKSPL @CHKWPD pFMSREV pFMSSEG 2@GETDCQ V@GETFCB @RELFAT @CHKPRM pFTL.NE pGPTSEC @MVEFNM $@CHKASC @CHKASN j@RELFCB pTDBLK @GENNME pIOCEVT @CMPSPC @ATTIOB @CLRIOP pGETVID pWUBLK 2pFHSFLG pFMSBLK @SUASQ pFTL.T @MVEDTA pSEGBLK @SMOVE4 D@SMOVEA ZpFATEND @UPDEOF @UPDEOR BpDVSTR pFMSAP @GETIOB @USNCHK @DEVFRE @ FMSASN hpFMSASQ pFMSASR 2pQIOBLK @SETBEG R@SRCDV @DEVBSY pEXTSTR @RELIOB pFATSTR pFHSQUE @RELAPF X@GETATT 6pMOVBLK @GETLUT @@VALFNM J@VALVOL @@RELLUN @VALUSN pFMSBLK1 pSEGBLK2 pVDTEND f2pSEGBLK3 @SETPTR pSAVESP pFMSASQ1 pFMSFCBA pVDTSTR @ZERPTR pSYSPACE F3@FUTY031584 4/ y(*Jf"H`f <"_NuP(c I<`H@F3 -g f\ - g> -&f "e8S@f`  f,S@f0<a8`  gaeS@fB"_NuF3  fS@f`p`  g 0e 9c Ae ZbJ<Nu<NuH@H3@"|*h?? f J_p LNugJJ`J$/gJ_`<>B * F3gz6jJgDC8jJgDD2fJFg jTgJFjJjTf`jTF3JGg jRgJGj JjRf|`jRJCg nJghJCj JnJf\`nJJDF3g nHgHJDj JnHf<`nHJFg5FTJGg5GRJCg=CJJDg=DHBF3`JFgjBjT` JjTgSjTJGgjBjR` JjRgSjRJCgjBnJ` JnJF3gSnJJDgjBnH` JnHgSnH`F3A$y(JgEV(cHz#(;p Nu$BNu?0<+BZS@fF3B0Nu(y(0JgI()cHz#(;p Nu(BNuHa0<HB\S@fLNuF3 H$y(f"G I Kf0< KfS@f<LNuEV(c<`HF3 ( 9(+ka(+$y(9g a@B(9LNuH瀀A(8$h $jK3 (y(0 f,RLNuI()caB'8H y),"y), /ab _S( F3 y(B()LNuH F"G` l (gA($0<NAI3@aBNuH@B * g2*2@ f;|""*$R+A$`"+j6$;jG34"`"V+i$;i"i$aC!I"y),$C!I!|&LNuF3 @HpgfXA(4J gBhA0<NAB A(R(BA*8f I3BB*9RBB!AA0<NAg gaB'p LNuf&)HtBB*9F3%S)H|)Hx)H@BB*8S)HD)y(lA(4!y(F3 1|1| g1| A0<NAg g a, g`ja ` HzF3A#(;`ZHz#(;`LH瀀A(4 ,lga1|BlA0<NAB LNuF3H瀀A(4 ,lgD g>BhJ gA0<NA!ll 1| ,g1| I31| A0<NAaBLNuH瀀A(`:< * g*2 gEF3JENuH0,@` @ f(,f,f,f <LNu<` @F3f ,f҂` @@fJg gS`", lf f,I3f"*,`H`aL&lLB+gӪ(Ӭd+ aBLJ@NuѪ,ѬJ3h/ &lLk&_ aBNu",xtRHA0BAHAJ@gRNuB#)2aF3B*7g!B!l A0<NA hJNu/ JgJj4fTfSBfB"_NuF3/a!D!l !I *@f 2UTA0<NAfS _NuH JjI3@4f2*IfafaB fRBBLNuG.Mg"n@af n@"MF3 paF`p)@8)@4D)@3 |(Bol BP "@((fBQNu4,1ROMIOI90 ASREL' ROMIOI90SA!(62pIOCOME pIOCOMS pROMIOI02 AROMIOI90 !H3  IOSGHpANAf*H aA `A a*B+ !f/+  <aA '_ G3@D /Gp% |NAp"A NANug.7h g/,k .! g,_2(kF3 7A j"+ f$+ fB B  (g (g <I3   AJ(f <aB ,`h &SCT f\J+ !gTS+ !`LaV'h.3@ `:aD/h /hf"`4(F1SECURE  ASREL' SECURE SA!E(8107190816 SECURITY OPTION2pGETLAPSE pLEFTMARG pLOGTRYNO HREADPASS $pSTDERROR pSTDTRAP1 pOFHS pX10100 pSYSDFLT pPASSKEY HPASS "pSYSDPAR pECHOE pUCBLEN pUCBTID pECHOT  pLOGPRU pUCBSNO HSWORD pSCTDAT HSECURE l2pUSERNO pUCBTSO HACCTEND HPWVAL pSCTINB pADDLAPSE pASGNFILE pSCTDSL HACCTINN pMSGCALL pERRCALL pEMSGCAL1 pEMSGCALL pUCBLDCNA pUCBLDCNT pLG95 pPASSBUFE pPASSBUFF pREADLINE (.H3 SECURE121084 4 -:]_f + JNuJ "f <aA) y( aN3 fDJgaL8* ֋a gaA `&H|L?* aA H? L>A NBgaQ3d B+ zA 0Bh1|NCNuJ "fB \y( L8*  ֋agaB @Nu KG #L3A /&/&L(ֈ!|!/ &HaB ,_--fNu KG "K(E* K3 '"f#h &HA NCNuag f8 |pNAa`'k " L* aB AJ3 !HNBg f <1aB* `C 0Nu@ PRIV ACCOUNT F3  PW((/((/+ -E !JfK3 0001 f gE -fHa*fB. aJgjL8* ֋a`f H3B A $agRC 0M g@ga`J #g(L8* ֋a&fA $aL3  gC #gab`ֱf+ -fNuL* A!H|NBL* (|*چA!HI3 |NBf$C*(B2PRdBNu0 f H~aB *L~S+ Y3_ gB. Nu($* * (($* B* X(0* Z* k(0* ** @ENTER SECURITY WORDENTER NEW SECUK3 RITY WORDENTER EXISTING PASSWORDENTER NEW PASSWORDJ "fB M* &X3H aB( L* d܋aM* PaM* XaL* ֋'|!`B R+ -@ -BaB1 BgJ3AT! + -0@ $K!$aB (+ $ 4d 0e 2d+ -@ -L3@ aB Nua/ax g gJaB* `HLEVELS ARE: 0/NONE,1/SWORD,2F3   /PWORD,3/BOTHUSER=0:USER NOT 0:&EET(,(-M3Ȃ (-&EET(,,K2<aB& \fT'k " $L* ֋؋A!HNBf6A!$ pJQ3* NAE #aB ,C!$(aB% $C $R0L* ֋؋A!HNBNu($)$?3 ($)$?1:4U1SYSCNTRL ASREL' SYSCNTRLSA!!(8112040820 BASIC SESSION CONTROL COMMANDS2HCONTINU HSTOPALL vpUCBSESS pSKIPSPAC HSUBSGET .HLOAD xHPRTIMDAT pTIMECONV HDEFAULTS HLDRFILL HTERMALL pWRITEINB pEDITSESS pGETLEFT4 pUCBCMDST pSTDERROR pSTDTRAP2 pSTDTRAP3 pCHPOSNUM pCVT2 2pOFHS HDATE pIASCVAL HUSE pSYSDFLT HTRMINATE HTIME HSTOPTASK ~HBREAKS HBREAKT pBDCONV HSTOP1 HNOARG HLOGOFF HTERM5 4pDATEGO HBYEBYE jpPROC120 2pUCBTID pPROC210 pPROC260 pLOGPRU pUCBSNO pUCBUNO pPROC255 pUCBVOL pUSERNO pUCBTSK pUCBUTN HLOGBYE pUCBLUS pUCBTUT HOPTCMD pOPTION pSCTINB HLOGDATE |pFHEXCLOS HLOGDATIM pUCBREGA6 2HUSTRT pCMDACCTT pLOGMESG pSCTEXB pEDITFILE HLOGTIME pMSGCALL pODATCONV pBUILDMSG pLMARGIN pBLANKOUT pERRCALL pENABLASQ pCHAINPTR pCHAINBUF pEMSGCAL1 pEMSGCALL HOFHSFILL pSHAREOPT pUCBLDCNT HUSERDFLT ~W2pGETLJSFY pLDRCALL pUCBMSWAT pDISABASQ pUCBTEMP HARG pREADLINE (I3( SYSCNTRL121084 4&<a+!.g vB2<aA2 J /f,KGO3  ) nvaA4 gf M(af| <&<I3@ Jf,Jg 'g"<&SCTpaf <aB`B -B aBH 0<arf.JM3 Q g 'g <J+!f <a`R+ GaB> JgaB> NuB$+ '`anpG3 a*gNu < J+!f < aBJgNuK *M -]J]=] -] -UNuL3@ a/ aB7 6&_/,kBK 3-@ Ij ,_ <4`,_fpf <5aBB `HJN3 f `kdK **J]: * *L* ~aB f6J f4<aB f&'kI3 * /,k 3. Cf",_a&/,k 3 . I,_Nu <6aBB 0g6`JfB$ // ,k 3C!@"_,_µ ?eF3! `JgR`Sf`B|  /,k 3RS@ ,_JfNu <`R3 B= 6,_x$k 3n6K 1\ aB XX:B@2@MP/BaB: aB (3@ R`g <`BB 4' USM RO__qqUSMOPT RO||$$qq[1USM ASREL' USM SA!(8107190816 USER SESSION MANAGEMENT CONTROL TASK2HGETLAPSE BpSTOPALL pUCBSESS HSKIPSPAC pUCBCMDLG HLEFTMARG HPRTFILE RpPRTIMDAT pUCBBNAM pUCBCMDND pDEFAULT pENDQUEUE pLDRFILL pLO  GTRYNO pTERMALL HWRITEINB HEDITSESS HGETLEFT4 pUCBREGX pUCBPRILI 2pJOBQUEUE pSTARTMON pUCBCMDST pLOGM HSTDERROR pTIMECNT HSTDTRAP1 HSTDTRAP2 ZHSTDTRAP3 ,HGETNOSPA pSCTINBE pCHPOSNUM pCVT2 pOFHS pDATE HX10100 vpUSE pSYSDFLT HPROC "pSYSCMDS 2pTIME pSTRUOPT HSYSDPAR pCHAIN pCHAIN2 HECHOE pSTOP1 pCMDEND HCLOCDF HICALL pLOGOFF HFHOPEN pTERM5 pUCBLEN HCKDEV .pBYEBYE HECHOS HPROC120 pUCBTID 2HECHOT HOPNCDF HPROC210 (HPROC260 pLDRLDO HPROC320 pPROC400 HLOGPRU pUCBSNO pUCBUNO HPROC255 HPROC206 HBCTRAP1 |pUSERNO  pDELAYS pLDRCLL pUCBTSK pUCBTSO pCLASCODE 2pUCBUTN pUTTCBP pLOGBYE HSCTBEG pUCBLUS pUCBTUT HPROMPT CpSCTINB pSYSOPT HADDLAPSE XpSTRUTN HASGNFILE pUSRTSK pSCTSTK HBUILDINB HFHCLOSE  HFHEXCLOS pUCBREGA6 pCMDPWVAL HFHEXOPEN 2HLOGMESG  pSCTEXB pEDITFILE pUCBREGD HMSGCALL 4HBUILDMSG HEDITSPAC HLMARGIN 'HBLANKOUT $HERRCALL pENABLASQ pCHAINPTR pLDRABUF pCHAINBUF HEMSGCAL1 ,HEMSGCALL &pLODRETRY pOFHSFILL HSC18 2pSHAREOPT pUCBLDCNT HLG95 pREGCHAIN HCKNODEV HGETLJSFY HLDRCALL &EET(ZB k J(R'H PL =H B @L* hajpJAH3J >NAB D <a,Kf G* |va 9(Fg( 0001 8f/+ :B 9BP3 :M* a'W 9'_ :faBT A/ aBM v&_C* La CLaI3 fCLa xCa 6Mpa(`, d. |`$ y(SR+ VfB; P ` CHAIN ABORTF3 ED(CHAIN)=  =ENTER DEFAULT SYSTEM VOLUME:USER NO.=ENTER USI3 ER NO.=L A!&H~NAf8NuI(?g$L8* a"<$<I3A g.A `(*k J-!UgS<K EaL~* a* ang fH3@ !&g&a^f/,(A EC`  A!#R!QK EB F3 ae {d/,k J. Uf ,_ =f /f \g>c  F3@p f'M , A E'F  JNu(E(E(#,H (g<4fZF3  k JE R Ng  g =g gJf` =gF` (Rf (XI3 fz ()frX0+ gf` aB% J@g"$k JnP2EPJgF3 c0`/ $k J* $$_ a H@a`ұc0Nu   <`H NF3 f S`~ \g =g !g &g4F3 k`ff g fa`JJNu/,k J. Ug,_`,,_f$F3 f fgHUaL?Nufr`jK LBatA LK3"B ("<$<* +!CfBA!&H~NBg8 fJ DkB4 fJ DkI3D B4 g` fJNuK EBaA E(` M/fnS G30 Nu  oNuBaaa`  oNu$< aaa`'k 5!&La.fG3$Q &(+ C'D CJNuLaf(+ \'D \(+ C`A!&HpBhNCNu + 8F3!!* L ,B k J( Ug69(g69(Y` g69(]*+ :A 6HG3 7|`> 6pA ABhJNDNuH LpA L!|+!CfBNDL LJF3 NuaH@a < aNuXXNu  fSB`4k`  g,+ F3P 'F 'H NuR  gNu$/". )A &,H<@<<,B^$< ,PRIV,,,F3 ! *(A!Eڈ"<$<A!&H~J3@T NBfR+ VkfM* ag7| &Bk!&7_!&NCNuJffJNug g'k 5!&NuLI3 j&\SNuԩ &\e&\Rґ""Nuڋ؋֋Nu"+ 8a fB1 |0'3* `B1 tA((j gP`JNu4  P1CMDOPT1 ASREL' CMDOPT1 SA AY(8112100940 GROUP 1 OPTIONAL COMMANDS2pPRTFILE pWRITEINB pSTDERROR HHELP (pOFHS pASCVAL HNEWS pECHOE HCLOSE HASSIGN `pUCBTID pENDCHA1 pPROC206 pOPTION pSYSCMD pSCTINB pUSRTSK pFHEXCLOS pUCBREGA6 pFHEXOPEN pEDITFILE H2pMSGCALL pOFHSFILL pGETLJSFY pLDRCALL pUCBKEEP pUCBTEMP (M3$ P CMDOPT1 121084 4,KG) v`A NEWS NWM* aA" ,KG(K JgDG3 f| Z&@ / I (_" HAJAg R`/ I!0kP(_R3 S/ &NaB r,K&_Jf&NM* BaB" \A! < BX HELP 0LOaB% :I3( f"+ `B 0Nu(_`fSESSION CONTROL COMMANDS:(ENTRY OF LOWER CASEI3 LETTERS OPTIONAL)aB gJ bD g fggU3B$ `B 2<BBaB fB NuaB g c <9`B  f <:`/,kM3` -C ',_aB# n/ aB! h&_j <4`gg0f'k !`" <)`T3$* /,k  ',_gg ;g\BaB$ aB$ aB$ aB$ M* rx}g HBF3 gQB/,k &. ',_ gD fJ gD g> <;`0$H/ aI3 B &_k Ofg4 k &( '`& g f4g k ( 'I3 g@2<@aB hfg ,+ &'F &NuEREWERPWPREWPRPWEWPWER 3 PR4F1SECURE  ASREL' SECURE SA!E(8107190816 SECURITY OPTION2pGETLAPSE pLEFTMARG pLOGTRYNO HREADPASS $pSTDERROR pSTDTRAP1 pOFHS pX10100 pSYSDFLT pPASSKEY HPASS "pSYSDPAR pECHOE pUCBLEN pUCBTID pECHOT  pLOGPRU pUCBSNO HSWORD pSCTDAT HSECURE l2pUSERNO pUCBTSO HACCTEND HPWVAL pSCTINB pADDLAPSE pASGNFILE pSCTDSL HACCTINN pMSGCALL pERRCALL pEMSGCAL1 pEMSGCALL pUCBLDCNA pUCBLDCNT pLG95 pPASSBUFE pPASSBUFF pREADLINE (.H3 SECURE121084 4 -:]_f + JNuJ "f <aA) y( aN3 fDJgaL8* ֋a gaA `&H|L?* aA H? L>A NBgaQ3d B+ zA 0Bh1|NCNuJ "fB \y( L8*  ֋agaB @Nu KG #L3A /&/&L(ֈ!|!/ &HaB ,_--fNu KG "K(E* K3 '"f#h &HA NCNuag f8 |pNAa`'k " L* aB AJ3 !HNBg f <1aB* `C 0Nu@ PRIV ACCOUNT F3  PW((/((/+ -E !JfK3 0001 f gE -fHa*fB. aJgjL8* ֋a`f H3B A $agRC 0M g@ga`J #g(L8* ֋a&fA $aL3  gC #gab`ֱf+ -fNuL* A!H|NBL* (|*چA!HI3 |NBf$C*(B2PRdBNu0 f H~aB *L~S+ Y3_ gB. Nu($* * (($* B* X(0* Z* k(0* ** @ENTER SECURITY WORDENTER NEW SECUK3 RITY WORDENTER EXISTING PASSWORDENTER NEW PASSWORDJ "fB M* &X3H aB( L* d܋aM* PaM* XaL* ֋'|!`B R+ -@ -BaB1 BgJ3AT! + -0@ $K!$aB (+ $ 4d 0e 2d+ -@ -L3@ aB Nua/ax g gJaB* `HLEVELS ARE: 0/NONE,1/SWORD,2F3 /PWORD,3/BOTHUSER=0:USER NOT 0:&EET(,(-M3Ȃ (-&EET(,,K2<aB& \fT'k " $L* ֋؋A!HNBf6A!$ pJQ3* NAE #aB ,C!$(aB% $C $R0L* ֋؋A!HNBNu($)$?3 ($)$?4L1CHAINBAT ASREL' CHAINBATSA 9%(8112221120 CHAIN/BATCH SUBSYSTEM2pABORTSK HEETSBATE FHEETSQREQ pUCBCHOPT pSUBSGET pUCBBNAM pUCBCMDND HELIM VpENDQUEUE pGTSEGARG pEDITSESS pUCBREGX pUCBCHLVL pJOBQUEUE pTSEGPGM   pSCTBDSL pUCBCMDST pSCTSBNO pSTDERROR pSTDTRAP1 pSTDTRAP3 pGETNOSPA 2pCHPOSNUM pSCTSQACK pNEXTQUE pOFHS pIASCVAL pSTRUTSES pCHSAVLVL HEETSQRY pPROC pTMOVPAR pASCVAL HCHAIN `HCHAIN2 pECHOE HCMDEND HCANCEL pCLOCDF pICALL pLOGOFF pFHOPEN pEETRCV 2pCKDEV HBATCH pECHOS pUCBTID pOPNCDF HENDCHA1 pPROC320 HPROC400 rpLOGPRU pUCBBNO pEETSNO pBCTRAP1 pSCTDAT pUSERNO pCURRUN pUCBTSK pSCTIDB pUCBLUS pPROMPT HQUERY NpEETSXT 2pSCTINB pUSRSNO pTRAP1NTS pSCTSTK pFHCLOSE pFHEXCLOS pUCBREGA pUCBREGA6 HRETRY @pEDITFILE pUCBREGD pMSGCALL pEDITSPAC pGTSEGDAT pERRCALL pUCBMAXLU pENABLASQ pCHAINPTR pREADEVNT HSUBCHAIN pCHAINBUF pEMSGCALL 2HPROCEED DpOFHSFILL pSC18 pSHAREOPT pTSCTASQP HREGCHAIN pUSERDFLT pCKNODEV HEETSQCAN pUCBCHNLU pUCBPRIBT pFHOPNTID pUCBKEEP pUCBTEMP pCHCURLVL pDELAYSEC HEETSGSNO (xH3 CHAINBAT121084 4faagNu9(Sbtvag fA L3 ` 'E _,k U+ dBfBf'N Ua>aAY =|CF/ aAM &_ @gaA^ j gJ g* (=gaJf Rn&N` aJf RlF3 NaJffRfN (=gaJfRmNaJfضRoNaJfʶRL3 gNafkfgNfNaBP  SEfB8 + dg "S+ *gNukL3 *+ d+ *gNuNuaBP DIFg DFORgp`B8 + d *S+ dkF3 ` <!`,KG `,KG K`,KG N$Ka" (fak6g`6F3 &NNu =f ak>Jf6&NNuR Xg Ag DgJ`E ` F3H E K`E NaNu Rfa +g@ -g* &g !g`ajJf0I3 C`a\Jfv0C` aPJfj0C6&NNua@JfZ0C`aB( )f$aP =f CI3 ja@8 0fNu 1fJNu6a('y* !'7k!>!'L* :9(`aV3 )E B< fL(aB< fL(QaB< fK A'M"=L(aB< f($'H"=U3(A L(\aB< f k aBY =|CF/ aBM z&_"HaB^ rkdL(7afTaB" ZG3 fH8<af< I(  b&$aL* ap*<* 'k :!'a@ AgA  <*`BR  <-aV3PB B <&<aB< <.A `BX k L<(!c HE8:< aB  ! faBe `K3 Nu/A!'.HG6.HD8HD.Nua6fL* a*<* afafNuN3 f <'`BR |  g$<0000aB l 0000f$+ :g" 0ALLfB'B!'B<+!>P3( /,k L-F!c,_Nu * PgJ <&`B (aL* aP*<* a$fafNuI3P k L!A c <,f <+f <* f <,H EA EaBR Q3(H /,k L,. c,_BBFJNuJ >fB9 aBY / aBM &_kgB'F!'<+!' kK3H L!F!c`V <(`B pv,+ Bg RC Cf6<NuL A!'0H"<O3@ taB" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83**BITTESTMACRO* BTSTMMACROLiL>8C7KQ::7OKU'[/@78?9G=OZWL_Ng@oSw9TP@? IFGE\1-16OPTMEXBTSTW#\1-16,\2(\3,\4) OPTNOMEXENDC* IFLT\1-16OPTMEXBTSTW#\1,\2+2(\3,\4) OPTNOMEXENDCENDM *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< P AGEXREFGETTSKIDXREFLUNSNR.OFLOGICALUNITS XREFSIGFMS XREFTEL02 XREFTEL05 XREFTELFMSPAGE**GENERALEQUATES**(PBCLNEQU14PARAMBLOCKCONSTANTLENGTHTFILEQU$26TEMPORARYFILEBIT1EQU1BITNUMBER1**FHSIDTASKNAME**PAGE**FHSINITIALIZATIONROUTINE**REV.1.006/15/79(JIMSMITH)*0*THISROUTINEPERFORMSTHEFOLLOWINGFUNCTIONS:**-SETUSERSTACKPOINTER'*-ESTABLISHMODULEASATRAP2SERVER**ENTRY:A0=IOCOMSADDRESS**EXIT:A7=STACKPOINTER**USING:01234567*D**A*R****PAGEINCLUDETEMPLATE.FHS.AIPAGE SECTION0*FHSENTBRA.SINITINITVECTORFHSASRBRA.SASRTOPASRVECTOR DC.B'FHSD'DC.L'1203844'IDENTIFICATION** INIT:* Initialization:J*A0ispassedtomewiththeI/Ocommonaddressinit.Placethisaddress *inmyowndataareaatIOCOMS.*Setstackpointer.'*EstablishmyselfasaTRAP#3server.*Waitforevent.*INIT: MOVE.LA0,A6$*A6=ADDRESSOFI/OCOMMONSEGMENTLEAGSEGPBLK(PC),A01*A0=ADDRESSOFFHSGETSEGMENTPARAMETERBLOCKMOVE.L#GTSEG,D0*D0=DIRECTIVENUNBERTRAP#1*GETFHSDATASEGMENTBSRNE.SFATAL*KILLSYSTEMIF *UNABLETOGETFHSDATASEGMENT MOVE.LA0,A2*A2=FHSDATASEGMENTADDRESSMOVE.L#TSEGSIZE,D0/*D0=NUMBEROFBYTESINDATASEGMENTOBTAINEDINIT02: CLR.B(A0)+ SUB.L#1,D0 BNE.SINIT02(*ZEROOUTTHEFHSDATASEGMENTOBTAINED*BRANCHIFNOTDONEMOVE.LA2,GSEGADDR(A2)*A2=FHSDATASEGMENTADDRESSMOVE.LA6,IOCOMS(A2)!*A6=I/OCOMMONADDRESSSEGMENTLEAFHSTAK(A2),A7*A7=STACKADDRESS BSRGETASQ*GETASQFORFHS BSRTEMPLATE.*INITIALIZETHEDATASEGMENTOBTAINEDFORFHS**ESTABLISHTRAP3SERVER*LEASRVBLK(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#SERVER,D0*D0=DIRECTIVENUMBERTRAP#1 *ESTABLISHFHSASTRAP3SERVERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>(*BEQ.SWEVTOKWEARETHETRAP3SERVERBEQ.SBFASRTOPO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%CMP.B#RTCDDPRQ,D0INTERCEPTPRESENTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BEQ.SWEVTYES-GOWAITBEQ.SBFASRTOPYES-GOWAITO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*KILLSYSTEMIF'*UNABLETOESTABLISHFHSASTHETRAP3*SERVER**O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*WEVTERQ.WTEVNTWAITFOREVENT)*BRA.SWEVTIFWEGETHEREGOWAITAGAINO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**ABORTROUTINE* FATALEQU*'MOVEM.LD0/A0,-(A7)SAVEREGA0ANDD0ERQ.ABORT#0ABORTSELFPAGE**ASYNCHRONOUSSERVICEROUTINE**REV.1.006/15/79(JIMSMITH)*-*-ENTRYISCAUSEDBYTHEARRIVALOFANEVENT4*-THEEVENTSTRUCTUREINCLUDESTHEREQUESTOR'SFHCB3*-THEASQISDISABLEDUNTILPROCESSINGISCOMPLETE***ENTRY:A7=STACKPOINTER* *EXIT:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER**USING:01234567*D***A*RRRRP**** * ASRTOP:*Readtheevent."*Clearthecommandflag(LUNCSF).*SetA4topointtoevent.#*IFnotserverevent(code7)THEN*returnfromevent.'*Ifit'snotaTRAP#3typeeventTHEN*returnfromevent.**Ifit'sanendoftasknotificationTHEN *BRAEOTEX.* BFASRTOP:MOVE.LIOCOMS(A2),A6&*A6=ADDRESSOFI/OCOMMONDATAAREALEASVTSTCF(A6),A00*A0=ADDRESSOFSYSTEMTASKCONFIGURATIONFLAGBSET#BIT1,(A0)$*SETFLAG--FHSINITIALIATIONDONEASRTOP:MOVE.L#GTEVNT,D0!*D0=GETEVENTDIRECTIVENUMBERTRAP#1*GETTHEEVENTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*&*BNERTNEVTERROR -RETURNFROMEVENT BSRNEFATAL**BRINGSYSTEMDOWNIFUNABLETOGETEVENT*&*MOVE.L#0,A6SETZEROINDEXREGISTER SUB.LA6,A6*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< )CLR.WLUNCSF(A2)INIT.COMMANDTYPEFLAG+LEAASQUE(A2),A4SETUPPOINTERTOMESSAGE(MOVE.BEVCODE(A4),D1PICKUPEVENTCODEAND.B#$F,D1ISOLATECODE(CMP.B#EVCSRV,D1ISTHISSERVEREVENT?O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**BNERTNEVTNO,IGNOREIT BNEASRTOP*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5MOVE.BEVUTIN(A4),D1PICKUPTRAPINSTRUCTIONNUMBER MOVE.LD1,D2!AND.B#$F,D2ISOLATETRAPNUMBERCMP.B#FHSTIN,D2TRAP3?O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**BNERTNEVTNO,ERROR BNEASRTOP*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<$BTST#EVTNEOT,D1EOTNOTIFICATION?BNEEOTEXYES***MAKESURETHEREISANLUTFORTHECALLER*+* Go get exclusive access to the LUT table.0* Search LUT for match on task name and session.4* If no LUT is found for task, attempt to build one.+* If there is an error in building LUT THEN@*BSRERRUBF{Setserrorcode$C(I/Osystemtablefull)intoD1*releasesLUT.}E*BSRPUTSTA{SetsupandperformsmovelogicaloferrorcodefromD1&*intocallingtasksparameterblock.}I*BRASETCC{Acknowledgeservicerequestsendingbackconditioncodesand*D0viaACKRQST}.*Goreturnfromevent.**#BSRWAITLUTGETACCESSTOLUTLIST1LEAEVUTSK(A4),A0SETUPTASKPOINTERFORLUTLOK%BSRLUTLOKGOLOOKUPLUTFORCALLERTST.LD0FINDONE?BEQ.SASR3YES&LEAEVUTSK(A4),A0SETTASKIDPOINTER(MOVE.WEVUUNM(A4),D1SETUPUSERNUMBERBSRLUTBLDNO,BUILDANLUTTST.LD0SUCCESSFUL?BEQ.SASR3YES,BSRERRBUFSeterrorcodeinD0,SignalLUT-BSRPUTSTAMovestatustoactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.**CHECKPARAMETERBLOCKINFO*L* Check status of returned parameter block which was moved as part of event.%* IF bad parameter block address THEN7*BEQERRPRM{Setserrorcodeof#FSTAIP(14)intoD1.}%*{ReleaseLUTviaSETCCLBSRSIGLUT}+*{AcknowledgesservicerequestviaACKREQ}*{Goreturnfromevent.}* ELSEB*SetA5topointtoFHSparameterblockportionofevent(FHCB)}.;* IF this is a privileged command (code = $80) in FHCB THEN *BRALEVEL80* ELSEB*UsingCMDTBLandthebitthatissetinthecommandfieldofthe<*passedparameterblock,JMPtotheappropriateroutine.IfB*thereismorethanonecommandbitsetoraninvalidcommandbitG*isset,branchtoERRCOD.ERROCODgoesthroughPUTSTA,SETCCL,ACKREQF*andfinallyreturnsfromeventservice.Acodeof#FSTAIF$2invalid*commandisreturnedtouser.**ASR3TST.BEVUPST(A4)PBOK?BEQ.SASR5YES)CMP.B#EVPSTBA,EVUPST(A4)BADPBADDR.?BEQERRPRMYES4ASR5LEACALBLK(A2),A5SETUPPOINTERTOFHCBBUFFER.TST.BFHSCMD(A5)ISTHISPRIVILEGEDCOMMAND?.BMILEVEL80YES,GOSERVICELEVEL80COMMANDS*/*DECODECOMMANDCODEANDJUMPTOLEVELHANDLER*9ASR10LEACMDTBL(PC),A0SETUPPOINTERTOCMDLEVELTABLECLR.LD1SETUPBITPOINTERTST.BFHSCMD(A5)CODEZERO?BEQ.SASR17YESTST.L(A0)+BUMPTABLEPOINTER*MOVE.BFHSCMD(A5),D2PICKUPCOMMANDCODEASR15BCLRD1,D2THISBITSET?BEQ.SASR20NOTST.BD2MORETHAN1BITSET?BNEERRCODYES,ERRORASR17TST.L(A0)VALIDLEVEL?BEQERRCODNO,COMMANDERRORMOVE.L(A0),A0#JMP(A0)JUMPTOCMDLEVELHANDLER"ASR20ADD.L#1,D1BUMPBITPOINTERTST.L(A0)+BUMPTABLEPOINTERCMP.B#8,D1REACHEDLIMIT?BEQERRCODYES-COMMANDERRORBRA.SASR15NO,CONTINUEPAGE**LEVELZEROCOMMANDHANDLER*1*THISROUTINEWILLSCANTHECOMMANDFIELDOFTHE1*REQUESTOR'SFHCBFROMLEFTT ORIGHTANDMAPTHE.*BITPOSITIONTOACOMMANDEXECUTORFORLEVEL*ZEROCOMMANDS.***!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D***R*A***PPPP** * LEVEL0:K*Validateparameterblocklength.IFerrorBRAERRPRM{Errorcode#FSTAIP}G*Validatereservedfield=0.IFnotBNEERRCOD{Errorcode#FSTAIF2}*.LEVEL0CMP.B#FHSBLN,EVUPSZ(A4)PBLENGTHOK?BLTERRPRMNO,ERROR!LEV02CLR.LD1SETUPSTATUSCODE1BSRPUTSTAPutD1statusintoactualuser'sP.B.'TST.WFHSGEN(A5)RESERVEDFIELDZERO?BNEERRCODNO,ERROR*$*VALIDATECOMMANDCODECOMBINATIONSI* Validate that we have a good code by trying to find it in table CC0FHS.5* IF not valid then BEQ ERRCOD {Error code #FSTAIF 2}*,LEACC0FHS(PC),A0SETUPFILECOMMANDTABLELEAFHS0END(PC),A11MOVE.WFHSCMD(A5),D2PICKUPREQUESTOR'SCOMMANDAND.B#$FF,D2ISOLATECOMMANDLEV03CMP.B(A0)+,D2MATCH?BEQ.SLEV04YES,IT'SOK!CMP.LA1,A0ENDOFTABLE?#BEQERRCODYES,INVALIDCOMMAND(S)BRA.SLEV03NO,CONTINUE*K*FindtheaddressoftheLUNentrywithintheLUT.IFtheentryrepresentsH*abadlogicalunitnumber(outofrange)ortheentryisvalidbutnotG*activethenBEQLEV06.Forvalidreturns,D6willcontaintheaddress"*oftheLUNentrywithintheLUT.*LEV04CLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBEQ.SLEV06NOTACTIVEBMI.SLEV06INVALID*+* Come here if we found a valid active LUN.K* IF the user's request was only for an allocate (code =$80) THEN BEQ LEV06* ELSE9*IFtheLUNrepresentsafileassignmentTHENBEQLEV000*ELSE-*IF{mustbeadeviceassignment}BRALEV07.*)CMP.W#FHALLO,FHSCMD(A5)ALLOCATEONLY? BEQ.SLEV06YES,LUNNOTNEEDED.MOVE.BLUTCSF(A6,D6.L),D1PICKUPSTATUSFLAG$BTST#LUSFDV,D1DEVICEASSIGNMENT?BEQ.SLEV000NO,FILEBRA.SLEV07YES** LEV06:C*ComeherenotactiveorinvalidLUNspecifiedincallersFHSP.B.E*BaseduponthevolumefieldintheFHSP.B.trytofindaDCBentry*thatmatches..*IFwedonotfindDCBentryTHENBNELEV000.*$LEV06BSRDCBLOKLOOKUPDEVICENAMETST.LD0TESTRETURN'BNE.SLEV000NOTFOUND,MUSTBEAFILE* LEV07:+*Comehereifthisisadeviceassignment.G*IFthisisanFMStyperequest(allocate,delete,orcheckpoint)THENE*BNEERRIDT(Errorcode#FSTADT$E).Eventuallyacknowledgesservice!*requestandreturnsfromevent.*LEV07MOVE.WFHSCMD(A5),D1PICKUPCOMMAND-AND.W#FHALLO+FHDELT+FHCKPT,D1FMSREQUEST?BNEERRIDTYES,ERROR*M* Starting with the highest order bit set set in the code field of the user'sB*paramereterblockandusingtableLEV0EXasajumptable,JSRtoE*theappropriateroutineforeachofthebitsset.Ifanerrorcomes;*backfromanyoftheroutines(D1<>0)thenhandleerrorM*viaBSRERRCMD,BSRPUTSTA,BSRSETCCwhichultimatelyacknowledgesservice!*requestandreturnsfromevent. CLR.LD1BSET#LUSFDV,D1-MOVE.BD1,LUNCSF(A2)SETDEVICECOMMANDFLAG#LEV000MOVE.L#7,D1SETBITPOINTER3LEALEV0EX(PC),A0SETUPPOINTERTOEXECUTORTABLE CLR.LD2%MOVE.WFHSCMD(A5),D2PICKUPCOMMANDBEQ.SLEV040ZEROISINVALID LEV010BCLRD1,D2THISBITSET?BEQ.SLEV020NOTST.L(A0)VALIDEXECUTOR?BEQ.SLEV040NO,COMMANDERRORBRA.SLEV030OK%LEV020TST.L(A0)+BUMPTABLEPOINTER#SUB.L#1,D1BUMPBITPOINTER(L2R)BMISETCZFINISHED!BRA.SLEV010CONTINUELEV030MOVE.L(A0),A08MOVE.WD2,LUNCMD(A2)SAVECOMMANDFORNEXTEXECUTORCAL"JSR(A0)JUMPTOCOMMANDEXECUTORTST.LD1TESTRETURNBEQ.SLEV035OK-BSRPUTSTAMovestatustoactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andr eturnfromeventservice.0LEV035MOVE.BLUNCSF(A2),D2PICKUPCOMMANDTYPE"BTST#LUSFDV,D2FILEASSIGNMENT?BEQSETARQYES,ENABLEASQ CLR.LD2%MOVE.WLUNCMD(A2),D2RESTORECOMMANDBEQSETCZALLDONE!MOVE.L#7,D1RESETBITPOINTER&LEALEV0EX(PC),A0RESETTABLEPOINTER#BRA.SLEV010GOCALLNEXTEXECUTOR3LEV040BSRERRCMDSeterrorcodeinD0,SignalLUT.2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.PAGE**ALLOCATEEXECUTOR**REV.1.006/15/79(JIMSMITH)*-*THISISABULKSTORAGECOMMANDTOBEPASSED-*ONTOTHEFMSMODULE,HOWEVERWEMUSTCHECK,*FOROTHEREXECUTORREQUESTS(I.E.,ASSIGN)'*ANDPROVIDETHELUTANDLUNPOINTERS.*$*THELUTLISTISLOCKEDUPONENTRY.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**P *APPPP****** ALLOC:G*IFtheassignbitisset(inadditiontotheallocatebit)ORthisis*foratemporaryfileTHEN *BRAALLOC10*ELSE7*SendeventtoFMS(LUNpointer=0,LUTpointer<>0)(*IFerrorinqueueingeventtoFMSTHEN3*BNEERRCMD{Setserrorcode#FSTAIF($02)intoD1*SignalsLUT.3*Returnsfromwhencewewerecalled(nearLEV030).*ELSE!*ALLOC10:Set no error #0 into D1.*LookupLUNentryviaLUNLOK.$*IFinvalidlogicaluniterrorTHEN *BMIERRLUN(#FSTAILU#3error)*ELSE*IFallreadyassignedTHEN*BNEERRASG(#FSTAAS$0D)*ELSE *BRAASGN10.**ALLOCCLR.LD1%MOVE.WFHSCMD(A5),D1PICKUPCOMMAND"AND.W#FHASGN,D1ASSIGNBITSET?BNE.SALLOC10YES0CMP.B#TFIL,FHSFIL(A5)TEMPORARYFILEREQUEST?BEQ.SALLOC10YES,ALSOASSIGNCLR.LD6CLEARLUNPOINTERBSRTELFMSGONOTIFYFMSBEQ.SALLOC05*BRANCHIFEVENTQUEUEDCMP.B#RTCDTASK,D0 BEQERCOSNX*BRANCHIFFMSISNON-EXISTENTBRAERRCMDERROR*BRANCHFORINVALIDCOMMANDALLOC05:BSRSIGLUTRELEASELUTLOCKBRAOKSTARETURNALLOC10CLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNLOGICALUNITERRORBNEERRASGASSIGNMENTERRORBRA.SASGN10GONOTIFYFMSPAGE**ASSIGNEXECUTOR**REV.1.006/15/79(JIMSMITH)%*REV.2.003/10/83(STEVEFEITELSON)*,*IFASSIGNMENTISTOABULKSTORAGELOGICAL+*PROPERTY,THEREQUESTISPASSEDONTOTHE *FMSMODULE.*"*THEASSIGNESTABLISHESALOGICAL&*CONNECTION,THRUTHELUT,FORATASK!*TOADEVICEORFILEINORDERTO *EFFECTI/O.*$*THELUTLISTISLOCKEDUPONENTRY.*#*THEDCBLISTWILLBELOCKEDFORA*DEVICEASSIGNMENT.**ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER**USING:01234567*D****RRP *A*PPPP***ASGN:;*LookfortheLUNentryforthistask,logicalunitnumber.*IFinvalidlogicalunitTHEN!*BMIERRLUN(error#FSTAILU#3).'*IFallreadyactivelogicalunitTHEN!*BNEERRASG(error#FSTAAS#$D).*IFLU=0THEN*IFNOTsystemtaskTHEN!*BEQERRLUN(error#FSTAILU#3). ASGNCLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNLOGICALUNITERRORBNEERRASGASSIGNMENTERRORTST.BFHSLUN(A5)LUZERO?BNE.SASGN5NO.MOVE.BEVUTIN(A4),D1YES,MAKESUREO.S.TASKBTST#EVTNOS,D1O.S.TASK?BEQERRLUNNO,LUERROR**ASGN5:G*TrytofindtheDCBentryassociatedwithmnemonicinuser'sFHSP.B.**IFwecanfindtheentryintheDCBTHEN-*BEQASG20{Gohandleasdeviceassignment}.*6ASGN5BSRDCBLOKFindDCBentry.ReturnsaddressinD5*D0=0,found1,n ofind.TST.LD0TESTRETURN'BEQ.SASGN20MUSTBEDEVICEASSIGNMENT**ASGN10:*{Assumefileassignment}E*SetactiveLUN,assignpendingbitsinLUTCSFportionofLUNentry.I*IncrementactivecountinLUTentry.Saveaccessmoderequestbitsfrom0*callersFHSP.B.intotheLUNentryatLUTCAP.-*GoqueueeventtoFMS.(Eventsubcode=6).(*IFerrorinqueueingeventtoFMSTHEN *BRAASG15:.!*ReleasetheLUTviaBSRSIGLUT.2*BRAOKSTA.{ClearsD1andRTSstoaroundLEV030}*<ASGN10MOVE.BLUTCSF(A6,D6.L),D1NO,MUSTBEFILEASSIGNMENT#BSET#LUSFAC,D1SETACTIVELUNBIT#BSET#LUSFAS,D1SETASSIGNPENDING*MOVE.BD1,LUTCSF(A6,D6.L)UPDATELUNFLAG7ADD.B#1,LUTCAS(A6,D7.L)INCREMENTACTIVECOUNTINLUT%MOVE.WFHSOPT(A5),D1PICKUPOPTIONSAND.W#7,D1ISOLATEAP+MOVE.BD1,LUTCAP(A6,D6.L)UPDATEAPINLUNBSRTELFMSGONOTIFYFMSBNE.SASGN15ERRORBSRSIGLUTRELEASELUTLOCKBRAOKSTARETURN*@* {Come here if we couldn't successfully queue the event to FMS}6* Undo what we've done: Clear active bit in LUN entry.* Clear assign pending bit.0* Decrement number of active assignments in LUN.'* Clear access permission field in LUN."* Release LUT lock via BSR SIGLUT."* BRA ERRFMS (error #FSTAIE #$13).*ASGN15:MOVE.LD0,-(A7)"*SAVESTATUSRETURNEDFROMTELFMS+MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNFLAG!BCLR#LUSFAC,D1RESETACTIVEBIT%BCLR#LUSFAS,D1CLEARASSIGNPENDING*MOVE.BD1,LUTCSF(A6,D6.L)UPDATELUNFLAG3SUB.B#1,LUTCAS(A6,D7.L)DECREMENTLUNASSIGNMENTS%CLR.BLUTCAP(A6,D6.L)CLEARAPFIELDASGN17:BSRSIGLUTRELEASELUTLISTMOVE.L(A7)+,D0*D0=RESTOREDTELFMSSTATUSCMP.B#RTCDTASK,D0 BEQERCOSNX*BRANCHIFFMSISNON-EXISTENTBRAERRFMSDEVICEERROR*9*DEVICEASSIGNMENTREQUIRESEXCLUSIVEACCESSTODCBLIST*ASGN20:,* {Come here if we have a device assignment}* Lock the DCB via BSR WAITDCB.=* Attempt to find the DCB entry from FHS P.B. via BSR DCBLOK.:* IF we can't find a DCB entry for this task,FHS P.B. THEN"*ReleaseDCBlockviaBSRSIGDCB."*ReleaseLUTlockviaBSRLUTLOK.!*BRAERRFMS(error#FSTAIE#13).*ASG22:;* IF this is the NULL device (bits 8-15 of DCBFLG) set THEN'*SetupPRPWcodesintoeventFHSP.B.*0ASGN20BSRWAITDCBGOREQUESTACCESSTODCBLIST$BSRDCBLOKGetDCBaddressintoD5.*D0=0,found1,notfound.TST.LD0TESTRETURNBEQ.SASGN22OK(BSRSIGDCBNOTFOUND-RELEASEDCBLISTBSRSIGLUTRELEASELUTLISTBRAERRFMSRETURNERRORH* Note: Bits 0-7 of DCBFLG are for flags, bits 8-15 are for device type.ASGN22:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*MOVE.WFHSOPT(A5),D1*D1=REQUESTOR'SOPTIONSANDI#FOPABF,D1 BNEERRSSE *BRANCHIF*WEHAVEDEVICEASSIGNMENT*SHAREDSEGMENTREQUEST*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)CMP.B#255,DCBFLG(A6,D5.L)NULLDEVICE?BNE.SASGN25NO1MOVE.B#FOPPRPW,FHSOPT+1(A5)YES,SETAPTOPRPW**ASG25:(*IFstatuschangedflagsetinDCBTHEN:*IFthesessionofrequestingtaskisNOT0001(FMS)THEN-*BRAERRAP{releaseDCBlockviaBSRSIGDCB.*error#FSTAAP#$0B}.*ASG30:F*Checkrequestedaccesspermissioncodesagainstonesestablishedfor*deviceviaBSRPCCHK.*IFprotectcodeconflictTHEN,*BNEERRPC{releaseDCBlockviaBSRSIGDCB*error#FSTAPC#$07}K*Checkattributes(read/write)againstattributesspecifiedinDCBagainst2*requestedaccesspermissioncodesviaBSRATCHK.*IFattributesconflictTHEN-*BNEERRFCT{ReleaseDCBlockviaBSRSIGDCB*error#FSTAIF#$02}*6ASGN25MOVE.WDCBFLG(A6,D5.L),D1PICKUPDEVICESTATUS)BTST#DFLGSC,D1STATUSCHANGEFLAGSET?BEQ.SASGN30NOCMP.L#IOSESS,EVUSES(A4)FMS?BNEERRAPNO,RETURNAPERROR7ASGN30BSRPCCHKChecksprotectioncodesfromeventFHS)*P.B.againstthoseinDCBatDCBRCDand)*DCBWCD.D0=0ifmatch, <>0onnomatch. TST.LD0!BNEERRPCNO,PROTECTCODEERROR%BSRATCHKATTRIBUTESMATCHCOMMAND? TST.LD0BNEERRFCTNO,COMMANDERROR*L* IF the attributes flags in DCB indicate that this device supports spooling* THEN?*IFthesessionofrequestingtaskisNOT$0001(spooler)THEN1*BSRTELSPL{queueseventfromEVLENtospooler}!*{eventsubtype=$07(SPLEVT))}4*IFspooleractive(noerrorfromqueueevent)THEN@*ClearLUSFDVinLUNCSFtomakeitlooklikeafileassignment. *BRAASGN50.*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*MOVE.WDCBATT(A6,D5.L),D1MOVE.LDCBATT(A6,D5.L),D1 *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!BTST#DATSPL,D1SUPORTSOOLING?BEQ.SASGN35NO!CMP.L#IOSESS,EVUSES(A4)SPOOLERBEQ.SASGN35YES,OKTOASSIGNBSRTELSPLNO,TELLSPOOLER"BNE.SASGN35SPOOLERNOTACTIVE!9BCLR#LUSFDV,LUNCSF(A2)MAKEITLOOKLIKEAFILEASSIGN. BRA.SASGN50**ASGN35:'*CheckaccesspermissionviaBSRAPCHK6*IFinvalidaccess(code#1returnedfromAPCHK)THEN@*BNEERRAP.{SignalsDCB,returnserrortouserof#FSTAAP,$B} *{Noerror}$*SaveDCBpointerinLUTatLUTDCB.I*Setactivebit(LUSFAC)andassignbit(LUSFDV)inLUTstatus(LUTCSF).*ReleaseDCBlock,LUTlock.<*BRAOKSTA{ClearsD1returnparameterandreturnsVIARTS.*'ASGN35BSRAPCHKACCESSPERMISSIONOK? TST.LD0BNEERRAPNO,APERROR:ASGN40MOVE.LD5,LUTDCB(A6,D6.L)SETUPDCBPOINTERINLUNMOVE.BLUTCSF(A6,D6.L),D1&BSET#LUSFAC,D1SETACTIVEBITINLUN&BSET#LUSFDV,D1SETDEVICEASSIGNBIT(MOVE.BD1,LUTCSF(A6,D6.L)UPDATESTATUS7ADD.B#1,LUTCAS(A6,D7.L)INCREMENTACTIVECOUNTINLUT"ASGN50BSRSIGDCBRELEASEDCBLOCKBSRSIGLUTRELEASELUTLOCKBRAOKSTAGOSETGOODRETURNPAGE*#*CHANGEACCESSPERMISSIONEXECUTOR* *REV.1.0011/01/79(JIMSMITH)*0*THISROUTINEWILLCHANGETHEACCESSPERMISSION *OFANLUNTOADEVICEORFILE.*,*IFASSIGNMENTISTOABULKSTORAGELOGICAL+*PROPERTY,THEREQUESTISPASSEDONTOTHE *FMSMODULE.*$*THELUTLISTISLOCKEDUPONENTRY.*#*THEDCBLISTWILLBELOCKEDFORA*DEVICEASSIGNMENT.**ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER**USING:01234567*D****RRP *A*PPPP**CAPN:(*LookuplogicalunitentrywithinLUT.*IFinvalidLUNTHEN#*BMIERRLUN(error#FSTAILU,#$03)*IFLUnotassignedTHEN"*BEQERRASG(error#FSTAAS.#$0D)* CAPNCLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNINVALIDLUBEQERRASGLUNOTASSIGNED*5* IF I/O is pending (LUSFIO in LUN entry is set) THENK*BNEERRBSY(Error#ISTADB(#$E2))alsoreleaseLUTreturnsafterJSR(A0)?* IF this is a device assignment (LUSFDV in LUN entry set) THEN *BRACAP20* ELSE$*SenteventtoFMSviaBSRTELLFMS.(*IFerrorinqueueingeventtoFMSTHEN *BNECAP10*ELSE*ReleaseLUTviaBSRSIGLUT.7*BRAOKSTA(clearsD1andreturnsfollowingJSR(A0)).*.MOVE.BLUTCSF(A6,D6.L),D1PICKUPSTATUSFLAGBTST#LUSFIO,D1I/OPENDING?BNEERRBSYYES,ERROR$BTST#LUSFDV,D1DEVICEASSIGNMENT?BNE.SCAP20YESBSRTELFMSNO,FILE,TELLFMSBNE.SCAP10ERRORBSRSIGLUTRELEASELUTLISTBRAOKSTARETURN**CAP10:*ReleaseLUTviaBSRSIGLUT.L*BRAERRFMS.(Errorstatus#FSTAIE,#$13toD1.ReturnsfollowingJSR(A0)).*CAP10:MOVE.LD0,-(A7)*SAVETELFMSRETURNEDSTATUS BRAASGN17*FINISHPROCESSING**CHANGEAPTOADEVICE*CAP20:.*{Comehereifthiswasadeviceassignment.}*LocktheDCBviaBSRWAITDCB. *BSRCLRW.*5CAP20MOVE.LLUTDCB(A6,D6.L),D5SETUPPOINTER TODCB#BSRWAITDCBGETACCESSTODCBLIST-MOVE.BLUTCAP(A6,D6.L),D1PICKUPCURRENTAPBSRCLRWUNDOCURRENTAP*.*IFreadaccesspermissionwasrequestedTHEN:*MoveDCBRCDreadcodeintoFHSparameterblockinevent.*CAP22:/*IFwriteaccesspermissionwasrequestedTHEN;*MoveDCBRCDwritecodeintoFHSparameterblockinevent.* MOVE.W FHSOPT(A5),D1 AND.W #7,D13BSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,noneTST.WD3READ?BEQ.SCAP22NO:MOVE.BDCBRCD(A6,D5.L),FHSRCD(A5)YES,GIVEHIMREADCODECAP22TST.WD4WRITE?BEQ.SCAP24NO;MOVE.BDCBWCD(A6,D5.L),FHSWCD(A5)YES,GIVEHIMWRITECODE**CAP24:D* Check protect codes against those in event FHS P.B. via BSR PCCHK.$* IF protect codes do not match THEN*BNEERRPC{ReleasesDCB}*{Error#FSTAPC.#$07}*{ReleaseLUT}* Check*6CAP24BSRPCCHKChecksprotectioncodesfromeventFHS)*P.B.againstthoseinDCBatDCBRCDand)*DCBWCD.D0=0ifmatch,<>0onnomatch.TST.LD0TESTRETURNBNEERRPCERRORBSRATCHKCHECKATTRIBUTESTST.LD0TESTRETURNBNEERRFCTERROR*$* Check access permission via APCHK.#* IF invalid access permission THEN *BSRAPCHKSETUPNEWAPTST.LD0GOODRETURN?BEQ.SCAP30YES'MOVE.BLUTCAP(A6,D6.L),FHSOPT+1(A5)NOBSRAPCHKCHANGEAPBACKTST.LD0TESTRETURN BSRNEFATAL*KILLSYSTEMIF%*THEACCESSPERMISSIONCHECKSFAILEDBRAERRAPRETURNERROR1CAP30MOVE.BD1,LUTCAP(A6,D6.L)SETNEWAPINLUTBSRSIGDCBRELEASEDCBLISTBSRSIGLUTRELEASELUTLISTBRAOKSTARETURNOKPAGE**RENAMEEXECUTOR**REV.1.008/1/79(JIMSMITH)*$*THISROUTINEWILLCHANGETHEASCII *IDENTIFIEROFADEVICEORPASS *THECOMMANDTOFMSFORAFILE.***ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER**USING:01234567 *D**RRP *A*PPPP****RENAMCLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNLOGICALUNITERRORBEQERRASGASSIGNMENTERROR-MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUSBTST#LUSFIO,D1I/OPENDING?BNEERRBSYYES,ERROR#BTST#LUSFDV,D1DEVICEASSIGNMENT?BNE.SREN20YES9CMP.B#FOPEREW,LUTCAP(A6,D6.L)EXCLUSIVER/WPERMISSION?BNEERRAPSNOERRORBSRTELFMSNO,TELLFMSBNE.SREN10ERRORBSRSIGLUTRELEASELUTLOCKBRAOKSTARETURNREN10:MOVE.LD0,-(A7)*SAVETELFMSRETURNEDSTATUS BRAASGN17*FINISHPROCESSING**RENAMEADEVICE*2REN20TST.WEVUUNM(A4)ISHESYSTEMADMINISTRATOR?BNEERRPCSNO,ERRORBSRASGCHKCHECKAPTST.LD0OK?BNEERRAPSNO)LEAFHSVOL(A5),A0SETUPPOINTERTONAME MOVE.L#4,D1SETUPNAMELENGTHBSRCHKNAMVALIDATENAMETST.LD0TESTRETURNBNEERRDEVERROR'BSRDCBLOKLOOKUPNAMEINDEVICELIST#TST.LD0DOESNAMEALREADYEXIST?BEQERRDEVYES,ERRORBSRWAITDCBGETACCESSTODCB-MOVE.LLUTDCB(A6,D6.L),D5SETUPDCBPOINTER:MOVE.LFHSVOL(A5),DCBAID(A6,D5.L)CHANGEASCIIIDENTIFIERBSRSIGDCBRELEASEDCBLISTBSRSIGLUTRELEASELUTLISTBRAOKSTARETURNPAGE**PROTECTEXECUTOR* *REV.1.0011/01/79(JIMSMITH)*/*THISROUTINEWILLCHANGETHEPROTECTIONCODES*OFADEVICEORFILE.*,*IFASSIGNMENTISTOABULKSTORAGELOGICAL+*PROPERTY,THEREQUESTISPASSEDONTOTHE *FMSMODULE.*$*THELUTLISTISLOCKEDUPONENTRY.*#*THEDCBLISTWILLBELOCKEDFORA*DEVICEASSIGNMENT.**ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER**USING:01234567*D****RRP *A*PPPP***** PROT CLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNINVALIDLUBEQERRASGLUNOTASSIGNED.MOVE.BLUTCSF(A6,D6.L),D1PICKUPSTATUSFLAGBTST#LUSFIO,D1I/OPENDING?BNEERRBSYYES,ERROR$BTST#LUSFDV,D1DEVICEASSIGNMENT?BNE.SPRO20YES9CMP.B#FOPEREW,LUTCAP(A6,D6.L)EXCLUSIVEREAD/WRITEAP?BNEERRASGNO,ERRORBSRTELFMSNO,FILE,TELLFMSBNE.SPRO10ERRORBSRSIGLUTRELEASELUTLISTBRAOKSTARETURNPRO10:MOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS BRAASGN17*FINISHPROCESSING**PROTECTADEVICE*5PRO20MOVE.LLUTDCB(A6,D6.L),D5SETUPPOINTERTODCB(TST.WEVUUNM(A4)SYSTEMADMINISTRATOR?BNEERRCMDNO,ERRORBSRASGCHKCHECKAPTST.LD0OK?BNEERRAPSNO#BSRWAITDCBGETACCESSTODCBLIST7MOVE.WFHSWCD(A5),DCBWCD(A6,D5.L)SETUPNEWR/WCODESBSRSIGDCBRELEASEDCBLISTBSRSIGLUTRELEASELUTLISTBRAOKSTARETURNOKPAGE**CLOSEEXECUTOR**REV.1.006/15/79(JIMSMITH);*REV.2.003/10/83(STEVEFEITELSON)IEEE488MODIFICATION*,*IFASSIGNMENTISTOABLUKSTORAGELOGICAL+*PROPERTY,THEREQUESTISPASSEDONTOTHE*FMSMODULEAFTERPROCESSING.*"*THECLOSEWILLDESOLVEALOGICAL*CONNECTIONFORATASK.*$*THELUTLISTISLOCKEDUPONENTRY.**ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER**USING:01234567*D*****RRP *A*PPPP****CLOSECLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNLUNOTACTIVE BEQERRASG3CLOS05MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUSBTST#LUSFDV,D1DEVICE?BEQ.SCLOS07NO,FILE"BTST#LUSFIO,D1ANYI/OPENDING?BEQ.SCLOS06NO-MOVE.LLUTDCB(A6,D6.L),D5SETUPDCBPOINTERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/832*MOVE.WDCBATT(A6,D5.L),D2PICKUPDCBATTRIBUTES1MOVE.LDCBATT(A6,D5.L),D2PICKUPDCBATTRIBUTES *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"BTST#DATHIO,D2DEVICEHALTABLE?BEQ.SCLOS06NO!TST.WDCBTMO(A6,D5.L)DCBBUSY?BLE.SCLOS06NOBRAERRBSYYES,ERROR*CLOS06BSR.SCLOS10UPDATETHELUTANDDCBBSRCLUNCLOSETHELUNBSRSIGLUTRELEASELUTLISTBRAOKSTARETURN"CLOS07BSR.SCLOS10UPDATETHELUT"BSET#LUSFCP,D1SETCLOSEPENDING,MOVE.BD1,LUTCSF(A6,D6.L)UPDATELUNSTATUSBSRTELFMSNOTIFYFMSBNE.SCLOS08ERRORBSRSIGLUTRELEASELUTLISTBRAOKSTARETURN3CLOS08MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUS$BCLR#LUSFCP,D1CLEARCLOSEPENDING,MOVE.BD1,LUTCSF(A6,D6.L)UPDATELUNSTATUSMOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS BRAASGN17*FINISHPROCESSING**THISISACLOSESUBROUTINE*1CLOS10MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNFLAG"BTST#LUSFIO,D1ANYI/OPENDING?BEQ.SCLOS15NO,CONTINUE*4*I/OPENDING,RELEASERESOURCESANDWAITFORIODONE*-BSET#LUSFCP,D1SETCLOSEPENDINGBITINLUN/MOVE.BD1,LUTCSF(A6,D6.L)UPDATESTATUSOFLUNBSRSIGLUTRELEASELUTLISTERQ.WAITWAITFORIODONE*WAITING......#BSRWAITLUTNOWGETLUTLISTAGAIN!BRA.SCLOS10NOWGOTRYTOCLOSE**THISISWHEREWECLOSEHIM*6CLOS15BCLR#LUSFCP,D1CLEARCLOSEPENDINGFLAGINLUN$BTST#LUSFDV,D1DEVICEASSIGNMENT?BNE.SCLOS20YES.MOVE.BD1,LUTCSF(A6,D6.L)NO,FILE-TELLFMS RTSRETURN)CLOS20BSRWAITDCBGETACCESSTODCBLIST7MOVE.LLUTDCB(A6,D6.L),D5PICKUPDCBADDRESSFROMLUN4MOVE.BLUTCAP(A6,D6.L),D1PICKUPACCESSPERMISSION$BSR.SCLRWADJUSTREAD/WRITEFIELDS O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BSR.SRECONFY N,*DETERMINEIFARECONFIGURATIONBACKTOTHE.*DEFAULTVALUESISNECESSARYANDINITIATETHE2*REQUESTASDETERMINEDBYTHERESULTSOFTHEEDIT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< * *WRAPITUP*"CLOS50BSRSIGDCBRELEASEDCBLOCK RTSRETURN* *ADJUSTREAD/WRITECOUNTFIELDS*E* A device may be normal, (not bus or bussable) or a bus device, or aA*bussabledevice.AbusdevicemayhaveseveralbussabledevicesF*associatedwitit.ThebusdeviceaswellastheassociatedbussableH*deviceswouldeachhavetheirownDCB.TheassociatedbussabledevicesE*wouldeachpointbacktothebusdevicethroughthepointerDCBSUP.F*DCBSUPforthebusdeviceitselfwouldcontainasessionnumber,not *apointer.*E* In addition to the above, a device may be sharable or not sharable.C*AsharabledeviceisonethatcanbeassignedtotwotasksattheD*sametime.ThebitsDATBDVandDATSHRareusedtoencodetheabove'*characteristicsinthefollowingway:*(* Explanation of bits DATBDV and DATSHR:*9*DATBDV,DATSHR=00Normaldevice(notbus,notshared).*=01Non-sharedbusdevice.*=10Sharedbussabledevice."*=11Non-sharedbussabledevice.***CLRW:E*BSRMAPAP{obtainsrequestread/writeaccessinD3,D4respectively}?*IFthisisNOTabussabledevice(DATBDVclear00or01)THEN4*IFthisisNOTasharabledevice(DATSHRset)THEN*{01Non-sharedbusdevice} *ClearsessionnumberinDCBSUP,*ELSE{101OR11thisisabussabledevice} *CLRW05A:,*IFanyreadorwriteaccessrequestedTHEN,*DecrementDCBSOP(subordinateopencount).**7CLRWBSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,none *IEEE488?*CHECKTOSEEIFWEAREDEALINGWITHABUSDEVICEORAIEEE488*BUSSABLEDEVICE.IEEE488 *IEEE488B*BTSTW#DATBDV,DCBATT(A6,D5.L)ISTHISABUSSABLEDEVICE?IEEE488(BTSTMDATBDV,DCBATT,A6,D5.LSJF9/23/83$BNE.SCLRW05ABRANCHIFYESIEEE488=*BTSTW#DATSHR,DCBATT(A6,D5.L)ISTHISABUSDEVICE?IEEE488(BTSTMDATSHR,DCBATT,A6,D5.LSJF9/23/83"BEQ.SCLRW05BRANCHIFNOIEEE488 *IEEE488>*ATTHISPOINTWEHAVEANON-SHAREDBUSDEVICE.CLEARIEEE488.*THESESSION#INTHEDCBOFTHEBUS.IEEE488 *IEEE4881CLR.LDCBSUP(A6,D5.L)ZEROOUTSESSION#IEEE488BRA.SCLRW05CONTINUEIEEE488 *IEEE4882*ATTHISPOINTWEHAVEABUSSABLEDEVICE.IEEE488 *IEEE488ICLRW05AMOVE.LDCBSUP(A6,D5.L),A0A0<==SUBORDINATESBUSDCBPTRIEEE488 TST.WD3ANYNEWREADS?IEEE488$BNE.SCLRW05BBRANCHIFYESIEEE488!TST.WD4ANYNEWWRITES?IEEE488"BEQ.SCLRW05BRANCHIFNOIEEE488 *IEEE488CCLRW05BSUB.L#1,DCBSOP(A0)UPDATETHESUBORDINATEOPENCNTIEEE488**CLRW05:.* IF read access permission was indicated THEN*DecrementreadcountDCBRNT./* IF write access permission was indicated THEN*DecrementwritecountDCBWNT.*CLRW05TST.WD3READAP?BEQ.SCLRW15NOBPL.SCLRW10MUSTBESHAREDCLR.LD3NO,EXCLUSIVEBRA.SCLRW20EXCLUSIVEREADCLRW10NEG.WD3SETDECREMENT4CLRW15ADD.WDCBRNT(A6,D5.L),D3DECREMENTREADCOUNTCLRW20TST.WD4WRITEAP?BEQ.SCLRW35NOBPL.SCLRW30MUSTBESHAREDCLR.LD4NO,EXCLUSIVEBRA.SCLRW40EXCLUSIVEWRITECLRW30NEG.WD4SETDECREMENT5CLRW35ADD.WDCBWNT(A6,D5.L),D4DECREMENTWRITECOUNT9CLRW40MOVE.WD3,DCBRNT(A6,D5.L)UPDATEREADCOUNTINDCB4MOVE.WD4,DCBWNT(A6,D5.L)UPDATEWRITECOUNTINDCB O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*RTS2*TheRTSinstructinwillreturnthefunctionality1*oftheCLRWroutinetoadjustingtheread/write4*countsforadevice(whichreflecttheassignments*associatedforthedevice)  3*Thefollowingwhichisreallyassociatedwiththe4*closelogicwilldetermineifareconfigurationof/*thedefaultvalueforthedeviceisrequired.  RECONFYN: *1* IF the read and write counts are both zero THEN2*IFthisisNOTarandomdevice(DATRAN=0)THEN.*IFweneedtoreconfigure(DCBCCF<>0)THEN2*IFthemaintainconfiguration(FOPOVRT=0)THEN$*QueueeventtoIOSviaBSRTELLIOS=*{SendconfigureeventtoIOS-looksjustlikeeventqueued"*toFHSbutwithheaderattached} *BRACLRW50. *ELSE{thisisarandomdevice}*CLRW45:D*IFthesessionofthetaskthatqueuedthiseventisNOT0001THEN1*SendstatuschangeeventtoFMSviaBSRSIGFMS.*{ParameterformatatQEVBLK},* ELSE {read and write counts not both zero}*CLRW50:*ReturnviaRTS.*$TST.LDCBWNT(A6,D5.L)COUNTSZERO?BNE.SCLRW50NOO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/835*MOVE.WDCBATT(A6,D5.L),D1PICKUPDEVICEATTRIBUTES4MOVE.LDCBATT(A6,D5.L),D1PICKUPDEVICEATTRIBUTES *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BTST#DATRAN,D11BNE.SCLRW45BRANCHIFDEVICEISARANDOMDEVICETST.BDCBCCF(A6,D5.L)8BEQ.SCLRW50BRANCHIFRECONFIGURATIONISNOTNECESSARYO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*MOVE.WFHSOPT(A5),D0*D0=IOCBOPTIONSFIELDAND.W#FOPOVRT,D0 BNE.SCLRW500*BRANCHIFTHETEMPORARYCONFIGURATIONISTOBE*KEPT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  BSRTELIOS(*TELLIOSTOSETDEVICEBACKTODEFAULT*CONFIGURATION BRA.SCLRW50%CLRW45CMP.L#IOSESS,EVUSES(A4)FMS?$BEQ.SCLRW50YES,SKIPNOTIFICATIONBSRSIGFMSNO,TELLFMSCLRW50RTSRETURN*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< **THISISACLOSESUBROUTINE*6CLUNMOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUSFLAGMOVE.LD1,D2SAVESTATUS!BCLR#LUSFAC,D1CLEARACTIVEBIT!BCLR#LUSFDV,D1CLEARDEVICEBIT%BCLR#LUSFAS,D1CLEARASSIGNPENDING$BCLR#LUSFCP,D1CLEARCLOSEPENDING/BTST#LUSEVC,D1ANYCLAIMEVENTSMADE?IEEE488!BEQ.SCLUNABRANCHIFNOIEEE488 *IEEE4880BCLR#LUSEVC,D1CLEARCLAIMSEVENTSBITIEEE4885MOVE.LLUTDCB(A6,D6.L),A0A0<==DCBPOINTERIEEE488)CLR.LDCBTSK(A0)CLEARTASKNAMEIEEE488.CLR.LDCBSES(A0)CLEARSESSIONNUMBERIEEE488*2CLUNAMOVE.BD1,LUTCSF(A6,D6.L)UPDATESTATUSFLAG(CLR.LLUTDCB(A6,D6.L)CLEARDCBPOINTER-CLR.WLUTATT(A6,D6.L)CLEARATTRIBUTESFIELD4CLR.BLUTCAP(A6,D6.L)CLEARACCESSPERMISSIONFIELD7SUB.B#1,LUTCAS(A6,D7.L)DECREMENTCURRENTASSIGNMENTSRTSRETURNTOCALLERPAGE**DELETEEXECUTOR**REV.1.006/15/79(JIMSMITH)*'*THEDELETEISACOMMANDDIRECTEDTOA%*BULKSTORAGELOGICALPROPERTYONLY.*$*THELUTLISTISLOCKEDUPONENTRY.**ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567*DP *APPPP****DELETBSRTELFMSNOTMUCHTODOBNE.SDELET10ERROR CLR.LD6BSRSIGLUTRELEASELUTLOCKBRAOKSTARETURNDELET10:MOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS BRAASGN17*FINISHPROCESSINGPAGE**CHECKPOINTEXECUTOR* *REV.1.0012/15/79(JIMSMITH)*'*THISROUTINEWILLRETURNANOKSTATUS&*FORADEVICEASSIGNMENTANDPASSTHE'*REQUESTTOFMSFORAFILEASSIGNMENT.***ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER**USING:01234567 *D**RRP *A*PPPP****CHKPNTCLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBMIERRLUNLOGICALUNITERRORBEQERRASGASSIGNMENTERROR O*>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*A*FollowingwasremovedtofixSPR.LindaseemedtofeelthatFMSC*hadthesituationcoveredwhereacheckpointrequestcouldnotbeA*interruptedbyanotherwritefunctiontothesamefilethusthe:*needfortheeditwasnotnecessary--Sowetookitout*:*CMP.B#FOPEREW,LUTCAP(A6,D6.L)EXCLUSIVER/WPERMISSION?*BNEERRAPSNOERROR*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUS#BTST#LUSFDV,D1DEVICEASSIGNMENT?BNE.SCHKP20YESBSRTELFMSNO,TELLFMSBNE.SCHKP10ERRORBSRSIGLUTRELEASELUTLOCKBRAOKSTARETURNCHKP10:MOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS BRAASGN17*FINISHPROCESSING**CHECKPOINTADEVICE*"CHKP20BSRSIGLUTRELEASELUTLISTBRAOKSTARETURNPAGE**LEVELONECOMMANDHANDLER**REV.1.006/15/79(JIMSMITH)*1*THISROUTINEWILLSCANTHECOMMANDFIELDOFTHE1*REQUESTOR'SFHCBFROMLEFTTORIGHTANDMAPTHE.*BITPOSITIONTOACOMMANDEXECUTORFORLEVEL*ONECOMMANDS.**!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D****R*A***PPPP******.LEVEL1CMP.B#FHSBLN,EVUPSZ(A4)PDLENGTHOK?BLTERRPRMNO,,ERRO"LEV101CLR.LD1SETUPSTATUSCODE3BSRPUTSTAPutstatus(D1)intoactualuser'sP.B.MOVE.L#7,D1SETBITPOINTER3LEALEV1EX(PC),A0SETUPPOINTERTOEXECUTORTABLE%MOVE.WFHSCMD(A5),D2PICKUPCOMMANDAND.W#$FF,D2ISOLATECOMMAND LEV110BCLRD1,D2THISBITSET?BEQ.SLEV120NO%TST.WD2MORETHAN1CMDREQUESTED?BNE.SLEV140YES,ERRORTST.L(A0)VALIDEXECUTOR?BEQ.SLEV140NO,COMMANDERROR BRA.SLEV130%LEV120TST.L(A0)+BUMPTABLEPOINTER#SUB.L#1,D1BUMPBITPOINTER(L2R)%BMI.SLEV140REACHEDLIMIT-ERROR!BRA.SLEV110CONTINUELEV130MOVE.L(A0),A0"JSR(A0)JUMPTOCOMMANDEXECUTORTST.LD1TESTRETURNBEQ.SLEV135OK2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.3LEV135MOVE.BLUTCSF(A6,D6.L),D2PICKUPLUNSTATUS"BTST#LUSFDV,D2FILEASSIGNMENT?BEQSETARQYES,ENABLEASQ BRASETCZOK#LEV140BSRERRCMDSETCOMMANDERROR2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.PAGE**RETRIEVEATTRIBUTESEXECUTOR* *REV.1.0011/01/79(JIMSMITH)*)*THISROUTINEWILLRETURNTHEATTRIBUTES*OFADEVICEORFILE.*,*IFASSIGNMENTISTOABULKSTORAGELOGICAL+*PROPERTY.THEREQUESTISPASSEDONTOTHE*FMSMODULEAFTERPROCESSING.***ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D6=SOURCELUNPOINTER*D7=SOURCELUTPOINTER**USING:01234567*D*****RP *A*PPPP****,RATTRTST.WFHSGEN(A5)RESERVEDFIELDZERO?BNEERRCMDNO,ERROR CLR.LD1,MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBEQERRLUNLUNNOTACTIVEBMIERRLUNLUNINVALID+MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNFLAG"BTST#LUSFDV,D1DEVICEASSIGNMENTBNE.SRAT20YESBSRTELFMSNO,NOTIFYFMSBNE.SRAT10ERRORBSRSIGLUTRELEASELUTLISTBRAOKSTARETURNRAT10:MOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS BRAASGN17*FINISHPROCESSING**DEVICEASSIGNMENT*2RAT20MOVE.LLUTDCB(A6,D6.L),D5SETUPDCBPOINTER%MOVE.BLUTCAP(A6,D6.L),D1PICKUPAP3BSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000 ,noneO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83.*MOVE.WDCBATT(A6,D5.L),D1PICKUPATTRIBUTES-MOVE.LDCBATT(A6,D5.L),D1PICKUPATTRIBUTES *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TST.WD3READ?BNE.SRAT30YES#BCLR#DATRED,D1NO,RESETREADBITRAT30TST.WD4WRITE?BNE.SRAT40YES$BCLR#DATWRT,D1NO,RESETWRITEBIT,RAT40MOVE.WD1,FHSWCD(A5)SETUPATTRIBUTESO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/7/83 MOVE.LD5,A68*MOVE.WDCBLEN(A6,D5.L),FHSLRL(A5)SETUPRECORDLENGTH2MOVE.WDCBLEN(A6),FHSLRL(A5)SETUPRECORDLENGTH6*MOVE.LDCBSIZ(A6,D5.L),FHSSIZ(A5)SETUPDEVICESIZE0MOVE.LDCBSIZ(A6),FHSSIZ(A5)SETUPDEVICESIZE SUB.LA6,A6 *BKM7/7/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5MOVE.BDCBFLG(A6,D5.L),FHSOPT(A5)SETUPDEVICECODE5MOVE.LDCBAID(A6,D5.L),FHSVOL(A5)SETUPDEVICENAMELEAMOVBLK(A2),A0+MOVE.LA5,MVSADD(A0)SETUPSOURCEADDRESS2MOVE.LEVURA0(A4),MVDADD(A0)SETUPDEST.ADDRESS2MOVE.W#FHSBLN,MVLENG+2(A0)SETUPLENGTHTOMOVE%ERQ.MOVELL(A0)MOVEATTRIBUTESDATA BSRNEFATAL*KILLSYSTEMIF*ATTRIBUTEMOVELOGICALFAILEDBSRSIGLUTRELEASELUTLISTBRAOKSTARETURNPAGE**FETCHDIRECTORYEXECUTOR**REV.1.008/1/79(JIMSMITH)*"*THEFETCHDIRECTORYISACOMMAND$*DIRECTEDTOABULKSTORAGELOGICAL*PROPERTYONLY.***ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D6=SOURCELUNPOINTER*D7=SOURCELUTPOINTER**USING:01234567*D*****RP *A*PPPP****+FDIRTST.WFHSGEN(A5)RESERVEDFIELDZERO?BNEERRCMDNO,ERROR CLR.LD1,MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTRETURNBLEERRLUNLUNNOTACTIVEMOVE.BLUTCSF(A6,D6.L),D1$BTST#LUSFDV,D1DEVICEASSIGNMENT?BNEERRCMDINVALIDCOMMAND,MOVE.BLUTCAP(A6,D6.L),D1PICKUPAPINLUN3BSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,noneTST.WD3READPERMISSION?BEQERRAPSNO,ERORORBSRTELFMSNOTMUCHTODOBNE.SFDIR10ERRORBSRSIGLUTRELEASELUTLOCKBRAOKSTARETURNFDIR10:MOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS BRAASGN17*FINISHPROCESSINGPAGE*!*FETCHDEVICEMNEMONICSEXECUTOR* *REV.1.0012/15/79(JIMSMITH)*$*THISROUTINEWILLRETURNTHEASCII#*IDENTIFIERSFORVOLUMEANDDEVICE*NAMES.***ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER**USING:01234567*D****RP*A***PPPP****)FDVMNTST.L(A7)+FIXSTACK,DON'TRETURNBSRSIGLUTDONTNEEDLUT%MOVE.WFHSOPT(A5),D1PICKUPOPTIONS.CMP.W#FOPFRA,D1FETCHRANDOMACCESSDEVICES?BEQ.SFDV10YES,CMP.W#FOPFIN,D1FETCHINTERACTIVEDEVICES?BEQ.SFDV20YES(CMP.W#FOPFPR,D1FETCHPRINTERDEVICES?BEQ.SFDV20YES'MOVE.L#FSTAIF,D1NO,INVALIDFUNCTION2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.FDV10CLR.LD6BSRTELFMSNOTIFYFMSBEQSETARQRETURNFROMEVENTCMP.B#RTCDTASK,D0 BNE.SFDV12*BRANCHIFFMSDOESEXIST BSRERCOSNX *SETUPFMSDOESNOTEXISTCODE BRA.SFDV14*CONTINUEPROCESSINGFDV12:BSRERRFMSERRORFDV14:2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.**FETCHFORDEVICES*FDV20CLR.LBYTE(A2)5LEAMOVBLK(A2),A0SETUPPOINTERTOMOVEPARAMBLOCK/MOVE.W#FDVLEN,MVLENG+2(A0)SETUPMOVELENGTH 'LEAFDMBUF(A2),A3BUILDBUFFERPOINTER+MOVE.LA3,MVSADD(A0)SETUPSOURCEADDRESS2MOVE.LFHSPTR(A5),MVDADD(A0)SETUPDEST.ADDRESSCLR.LD3SETBUFFERCOUNTERMOVE.LIOCOMS(A2),A1MOVE.LSVTDCB(A1),A1%MOVE.WFHSOPT(A5),D2PICKUPOPTIONSFDV30MOVE.LA1,D5LASTDCB?BEQ.SFDV80YESO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/835*MOVE.WDCBATT(A6,D5.L),D1PICKUPDEVICEATTRIBUTES4MOVE.LDCBATT(A6,D5.L),D1PICKUPDEVICEATTRIBUTES *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,CMP.W#FOPFIN,D2WANTINTERACTIVEDEVICES?BNE.SFDV40NO/BTST#DATIND,D1YES,THISDEVICEINTERACTIVE?BEQ.SFDV70NO"ADD.W#1,BYTE+2(A2)YES,COUNTIT BRA.SFDV50&FDV40BTST#DATPRT,D1THISAPRINTER?BEQ.SFDV70NO"ADD.W#1,BYTE+2(A2)YES,COUNTIT)FDV50CMP.LFHSLEN(A5),D3ENDOFBUFFER?BCC.SFDV70YES$ADD.W#1,BYTE(A2)NO,INCR.COUNTER9MOVE.LDCBAID(A6,D5.L),FDVDEV(A3)SETUPDEVICEMNEMONIC9MOVE.BDCBFLG+1(A6,D5.L),FDVSTS(A3)SETUPDEVICESTATUS,ERQ.MOVELL(A0)MOVE.TOREQUESTOR'SBUFFERBEQ.SFDV60OK%FDV57MOVE.L#FSTAADD,D1BUFFERERROR2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.+FDV60ADD.W#FDVLEN,D3INCR.BUFFERCOUNTER-ADD.L#FDVLEN,MVDADD(A0)BUMPBUFFERPOINTER8FDV70MOVE.LDCBPTR(A6,D5.L),A1PICKUPNEXTDCBPOINTER BRA.SFDV30FDV80:LEABYTE(A2),A6MOVE.LA6,MVSADD(A0)*A6=SOURCEADDRESS SUB.LA6,A6 *A6=ZERO2MOVE.LEVURA0(A4),MVDADD(A0)SETUPDEST.ADDRESSADD.L#FHSLEN,MVDADD(A0)%MOVE.W#4,MVLENG+2(A0)SETUPLENGTH#ERQ.MOVELL(A0)UPDATERETURNINFOBNE.SFDV57ERROR BRASETCZPAGE**CHANGELOGICALUNITEXECUTOR**REV.1.006/15/79(JIMSMITH)*'*THELUASSIGNMENTTOBESWITCHEDMUST)*BEINADORMANTSTATE(NOI/OPENDING).*$*THELUTLISTISLOCKEDUPONENTRY.**THISCOMMANDHASTWOOPTIONS: *-SENDLU*-RECEIVELU**ENTRY:A4=ASQMESSAGE*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME*D6=SOURCELUNPOINTER*D7=SOURCELUTPOINTER**USING:01234567*D*****RP *A*PPPP**O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*)*CHGLUATST.LFHSTSK(A5)TASKIDPASSED?*BNE.SCHG10YES>*MOVE.LEVUTSK(A4),FHSTSK(A5)NO,DEFAULTTOREQUESTOR'STASK**MOVE.LEVUSES(A4),FHSSES(A5)ANDSESSION *BRA.SCHG20)*CHG10TST.LFHSSES(A5)CHECKSESSIONNR.*BNE.SCHG15SESSIONINCLUDED6*MOVE.LEVUSES(A4),FHSSES(A5)DEFAULTTOREQ.SESSION*BRA.SCHG20CONTINUE*CHG15MOVE.LFHSSES(A5),D1$*CMP.LEVUSES(A4),D1SAMESESSION?*BEQ.SCHG20YES"*MOVE.BEVUTIN(A4),D1PICKUPTIN*BTST#EVTNOS,D1SYSTEMTASK?*BEQERRTSKNO,ERROR!*CHG20LEAFHSTSK(A5),A0*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*%*Ifparameterblocktaskname=zero*then0*usethetask-idfromtheeventparameterblock*gettaskattributes*.*Ifparameterblocksessionnumberismissing*then7*forcethesessionnumberequaltotherequestingtask*sessionnumber*editforrealtimetask*B*Ifparameterblocksessionnumberissameastherequestingtask*then*editforrealtimetask*(*Ifrequestingtaskisarealtimetask*then*gettaskattributes*)*Ifrequestingtaskisnotasystemtask*then*logerrorcondition*(*Ifrequestingtaskisarealtimetask*then*gettaskattributes*else *gettaskid**Ifgettaskiderror*then*logerrorcondition*else$*settcbaddressintasknamefield*gettaskattributes***CHGLUA:TST.LFHSTSK(A5) BNE.SCHG10*BRANCHIFTASKNAMESPECIFIEDMOVE.LEVUTSK(A4),FHSTSK(A5)MOVE. LEVUSES(A4),FHSSES(A5),*SETTASKIDTOTHATCONTAINEDINTHEEVENT BRA.SCHG20*GETTASKATTRIBUTESCHG10:MOVE.BEVUTIN(A4),D1%*D1.B=TRAPINSTRUCTIONINFORMATIONTST.LFHSSES(A5) BNE.SCHG15-*BRANCHIFPARAMETERBLOCKSESSIONNUMBERIS *PRESENTMOVE.LEVUSES(A4),FHSSES(A5)/*FORCESESSIONNUMBERINPARAMETERBLOCKTOBE*SAMEASREQUESTORS BRA.SCHG18*EDITFORREALTIMETASKCHG15:MOVE.LEVUSES(A4),D0(*D0=SESSIONNUMBEROFREQUESTINGTASKCMP.LFHSSES(A5),D0 BEQ.SCHG18-*BRANCHIFREQUSTINGTASKSESSIONNUMBERAND)*PARAMETERBLOCKSESSIONNUMBERARESAME*EDITFORREALTIMETASKBTST#EVTNRTT,D1 BNE.SCHG20-*BRANCHIFREQUSTINGTASKISAREALTIMETASK*GETTASKATTRIBUTESBTST#EVTNOS,D1 BEQERRTSK.*BRANCHIFREQUESTINGTASKISNOTSYSTEMTASKCHG18:BTST#EVTNRTT,D1 BNE.SCHG20*BRANCHIFREALTIMETASK*GETTASKATTRIBUTESLEAGPBUFR(A2),A0MOVE.LFHSTSK(A5),A1MOVE.LFHSTSK+4(A5),D0&*ESTABLISHPARAMETERSFORGETTASKID"*A0=GETTASKIDPARAMETERBLOCK*A1=TASKNAME*D0=TASKSESSIONNUMBER BSRGETTSKID*OBTAINTASKID BNEERRTSK*BRANCHIFERRORMOVE.LA0,FHSTSK(A5)$*SETTCBADDRESSINPARAMETERBLOCKCHG20:LEAFHSTSK(A5),A0!*A0=ADDRESSOFPARAMETERBLOCK*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*"ERQ.TSKATTR(A0)VALIDATETASKIDBNEERRTSKERROR%MOVE.LA0,TSKATT(A2)SAVEATTRIBUTES CLR.LD1+MOVE.BFHSLUN(A5),D1SETUPLUNFORLUNLOK2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUN$MOVE.WFHSOPT(A5),D1PICKUPOPTION-AND.W#FOPRLU,D1ISTHISSENDLOGICALUNIT?BNECHG50NO,RECEIVELU**SENDLUASSIGNMENT*TST.LD0TESTLUNBEQERRLUNLUNOTASSIGNEDBMIERRLUNINVALIDLUN-MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUSBTST#LUSFIO,D1I/OPENDING?BNEERRLUNYES,ERROR CLR.LD1$MOVE.WFHSOPT(A5),D1PICKUPOPTION AND.W#FOPKEP,D1KEEPBITSET?BEQ.SCHG40NO,MOVE.BLUTCAP(A6,D6.L),D1PICKUPAPINLUN3BSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,none$CHG30TST.WD4EXCLUSIVEWRITESET?BMIERRAPSYESCAN'TSWITCHTST.WD3EXCLUSIVEREAD?BMIERRAPSYESCAN'TSWITCH2CHG40MOVE.LTSKATT(A2),D1PICKUPTASKATTRIBUTES%AND.L#CTATST,D1DEST.SYSTEMTASK?BEQ.SCHG42NOMOVE.BEVUTIN(A4),D1%BTST#EVTNOS,D1SOURCESYSTEMTASK?BEQERRCMDNO,ERROR*CHG42MOVE.LD6,D3SAVESOURCELUNPOINTER%MOVE.LD7,D4SAVESOURCELUTPOINTER)LEAFHSTSK(A5),A0SETUPTASKIDPOINTER&BSRLUTLOKLOOKUPLUTFORDEST.TASKTST.LD0TESTLUTBEQ.SCHG45FOUNDHIM(MOVE.LTSKATT(A2),D1SETUPUSERNUMBER"SWAPD1MUSTBEINLOWORDERBITS"LEAFHSTSK(A5),A0TASKIDPOINTERBSRLUTBLDBUILDLUTBNEERRBUFBUFFERFULLERRORCHG45CLR.LD1 MOVE.BFHSLUB(A5),D1SETUPLUN2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTLUBMIERRLUNLUNINVALID-ERRORBNEERRASGLUACTIVETST.BFHSLUB(A5)LUZERO?BNE.SCHG47NO-MOVE.LTSKATT(A2),D1PICKUPTASKATTRIBUTESAND.L#CTATST,D1SYSTEMTASK?BEQERRLUNNO,ERROR2CHG47MOVE.L0(A6,D3.L),0(A6,D6.L)SWITCHLUNDATA.MOVE.L4(A6,D3.L),4(A6,D6.L)ANDDCBPOINTER.7ADD.B#1,LUTCAS(A6,D7.L)INCREMENTCURRENTASSIGNMENTS CLR.LD1$MOVE.WFHSOPT(A5),D1PICKUPOPTION AND.W#FOPKEP,D1KEEPBITSET?BNECHG60YES*0*NOWCLOSESOURCETASKLUN-FORSENDLUOPTION*EXGD3,D6SWITCHLUTPOINTERSEXGD4,D7FORCLOSELUNBSRCLUNSUBROUTINECALLINGEXGD3,D6SEQUENCEANDSWITCHEXGD4,D7BACKFORWRAP-UP BRACHG60**RECEIVELUASSIGNMENT*CHG50TST.LD0TESTLUNBMIERRLUNLUNINVALID-ERRORBNEERRASGLUACTIVETST.BFHSLUN(A5)LUZERO?BNE.SCHG56NO!MOVE.BEVUTIN(A4),D1PICKUPTINBTST#EVT NOS,D1SYSTEMTASK?BEQERRLUNNO,ERROR&CHG52MOVE.BEVUTIN(A4),D1PICKUPTINBTST#EVTNOS,D1SYSTEMTASK?BEQERRCMDNO,NOTALLOWED)CHG56MOVE.LD6,D3SAVEDEST.LUNPOINTER$MOVE.LD7,D4SAVEDEST.LUTPOINTER)LEAFHSTSK(A5),A0SETUPTASKIDPOINTER'BSRLUTLOKLOOKUPLUTFORSOURCETASKTST.LD0TESTLUTBEQ.SCHG57FOUNDHIM(MOVE.LTSKATT(A2),D1SETUPUSERNUMBER"SWAPD1MUSTBEINLOWORDERBITS"LEAFHSTSK(A5),A0TASKIDPOINTERBSRLUTBLDBUILDLUTBNEERRBUFBUFFERFULLERRORCHG57CLR.LD1 MOVE.BFHSLUB(A5),D1SETUPLUN2BSRLUNLOKLookupLUN.ReturnsLUNpointerinD6'*D0=0,normal1,active-1,invalidLUNTST.LD0TESTLUN%BEQERRLUNLUNOTASSIGNED-ERROR! BMIERRLUNINVALIDLU-ERROR!-MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUSBTST#LUSFIO,D1I/OPENDING?BNEERRLUNYES,ERROR BTST#LUSFCP,D1CLOSEPENDING?BNEERRLUNYES,ERROR!BTST#LUSFAS,D1ASSIGNPENDING?BNEERRLUNYES,ERROR.MOVEM.LD3-D4,-(A7)SAVELUNANDLUTPOINTERS CLR.LD1$MOVE.WFHSOPT(A5),D1PICKUPOPTION AND.W#FOPKEP,D1KEEPBITSET?BEQ.SCHG57ANO,MOVE.BLUTCAP(A6,D6.L),D1PICKUPAPINLUN3BSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,noneTST.WD4EXCLUSIVEWRITE?BMIERRAPSSYESCAN'TSWITCHTST.WD3EXCLUSIVEREAD?BMIERRAPSSYESCAN'TSWITCH7CHG57AMOVEM.L(A7)+,D3-D4RESTORELUNANDLUTPOINTERS-MOVE.L0(A6,D6.L),0(A6,D3.L)SWITCHLUNDATA-MOVE.L4(A6,D6.L),4(A6,D3.L)ANDDCBPOINTER7ADD.B#1,LUTCAS(A6,D4.L)INCREMENTCURRENTASSIGNMENTS CLR.LD1$MOVE.WFHSOPT(A5),D1PICKUPOPTION AND.W#FOPKEP,D1KEEPBITSET?BNE.SCHG58YES*3*NOWCLOSESOURCETASKLUN-FORRECEIVELUOPTION*"BSRCLUNINITIALIZETHELUNENTRY!CHG58EXGD3,D6SWITCHSOURCEAND EXGD4,D7DESTINATIONPOINTERS.* *WRAPITUP*0CHG60MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNFLAG$BTST#LUSFDV,D1DEVICEASSIGNMENT?BEQ.SCHG70NO,NOTIFYFMS%MOVE.WFHSOPT(A5),D1PICKUPOPTIONS AND.W#FOPKEP,D1KEEPBITSET?BEQ.SCHG64NO#BSRWAITDCBGETACCESSTODCBLIST-MOVE.LLUTDCB(A6,D6.L),D5SETUPDCBPOINTER4MOVE.BLUTCAP(A6,D6.L),D1PICKUPACCESSPERMISSION3BSRMAPAPReturnwithrequestedprotectionvalues.!*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,noneTST.WD3READPERMISSION?BEQ.SCHG62NO5ADD.W#1,DCBRNT(A6,D5.L)YES,BUMPREADCOUNTINDCB!CHG62TST.WD4WRITEPERMISSION?BEQ.SCHG63NO6ADD.W#1,DCBWNT(A6,D5.L)YES,BUMPWRITECOUNTINDCB!CHG63BSRSIGDCBRELEASEDCBLIST!CHG64BSRSIGLUTRELEASELUTLOCKBRAOKSTAGOSETGOODRETURN* *NOTIFYFMS*(CHG70BSET#LUSFAS,D1SETASSIGNPENDING,MOVE.BD1,LUTCSF(A6,D6.L)UPDATELUNSTATUS*MOVE.WFHSOPT(A5),D1PICKUPUSEROPTIONSAND.W#FOPRLU,D1RECEIVELU?BEQ.SCHG72NOBSRTELFMSYES, BRA.SCHG74CHG72EXGD3,D6 EXGD4,D7 BSRTELFMS EXGD3,D6 EXGD4,D7CHG74BNE.SCHG75ERRORBSRSIGLUTRELEASELUTLOCKBRAOKSTARETURNCHG75:MOVE.LD0,-(A7)*D0=RETURNEDTELFMSSTATUS%MOVE.WFHSOPT(A5),D1PICKUPOPTIONSAND.W#FOPKEP,D1KEEP?BNE.SCHG80YES*MOVE.L0(A6,D6.L),0(A6,D3.L)SETLUNBACK*MOVE.L4(A6,D6.L),4(A6,D3.L)SETLUNBACK,ADD.B#1,LUTCAS(A6,D4.L)SETLUTCOUNTBACKCHG80BSRCLUNCLOSEDEST.LUN BRAASGN17*FINISHPROCESSINGPAGE**FETCHDEFAULTVOLUME****,FVOLDEFTST.L(A7)+ADJ.STACK,DON'TRETURN,BRAVOLDEFLOOKSJUSTLIKELIVEL80COMMANDPAGE*(*LEVELTWOCOMMANDHANDLER-PRIVILEGED* *REV.1.0011/10/80(JIMSMITH)***THISROUTINEWILLSCANTHECOMMANDFIELD MNIKFIMRB81FFJP[ A(Z0P8S@A 2*OFTHEREQUESTOR'SFHCBANDMAPTHEBITPOSITION-*TOACOMMANDEXECUTORFORLEVEL2COMMANDS.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567*D** *A*PPPP****-LEVEL2CMP.B#PBCLN,EVUPSZ(A4)PBLENGTHOK?BLTERRPRMNO,ERRORCLR.LD1SETUPSTATUSCODE5BSRPUTSTAUpdatestatus(D1)inacturaluser'sP.B.%CMP.B#RTCDADR2,D0ADDRESSINVALID?BEQERRPRMYES,NOTWRITABLEMOVE.L#7,D1SETBITPOINTER-LEALEV2EX(PC),A0LEVEL2TABLEOFEXECUTORS%MOVE.WFHSCMD(A5),D2PICKUPCOMMANDAND.W#$FF,D2ISOLATECOMMAND LEV210BCLRD1,D2THISBITSET?BEQ.SLEV220NO%TST.WD2MORETHAN1CMDREQUESTED?BNEERRCODYES,ERRORTST.L(A0)VALIDEXECUTOR?BEQERRCODNO,COMMANDERRORMOVE.L(A0),A0"JMP(A0)JUMPTOCOMMANDEXECUTOR%LEV220TST.L(A0)+BUMPTABLEPOINTER#SUB.L#1,D1BUMPBITPOINTER(L2R)#BMIERRCODREACHEDLIMIT-ERROR!BRA.SLEV210CONTINUE PAGE**SPOOLERCOMMAND*SPLCMDCLR.LD6 BSRSIGLUT"BSRTELSPLQUEUEEVENTTOSPOOLERBEQSETARQGOODRETURN#MOVE.L#FSTAIF,D1INVALIDFUNCTION2BSRPUTSTAMovestatus(D1)toactualuser'sP.B.3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.PAGE*'*LEVEL80COMMANDHANDLER-PRIVILEGED**REV.1.006/15/79(JIMSMITH)***THISROUTINEWILLSCANTHECOMMANDFIELD2*OFTHEREQUESTOR'SFHCBANDMAPTHEBITPOSITION.*TOACOMMANDEXECUTORFORLEVEL80COMMANDS.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567*D** *A*PPPP**M*Validateparameterblocklength.IFinvalidBLTERRPRM(error#FSTAIP$14).<*Validatesystemtask.IfnotBRAERRCOD(error#FSTAIF2).J*ValidatevalidaddressforreturncodeviaPUTSTA.IfinvalidBEQERRPRM*(error#FSTAIP$14)G* From LEV80EX determine the appropriate command processing routine and *jumptoit.*.LEVEL80CMP.B#PBCLN,EVUPSZ(A4)PBLENGTHOK?BLTERRPRMNO,ERROR(MOVE.BEVUTIN(A4),D1PICKUPEVENTCODE$BTST#EVTNOS,D1O.S.TASKBITSET?BEQERRCODNO,NOTALLOWEDCLR.LD1SETUPSTATUSCODE3BSRPUTSTASetstatus(D1)intoactualuser'sP.B.%CMP.B#RTCDADR2,D0ADDRESSINVALID?BEQERRPRMYES,NOTWRITABLEMOVE.L#7,D1SETBITPOINTER/LEALEV80EX(PC),A0LEVEL80TABLEOFEXECUTORS%MOVE.WFHSCMD(A5),D2PICKUPCOMMANDAND.W#$FF,D2ISOLATECOMMAND!LEV8010BCLRD1,D2THISBITSET?BEQ.SLEV8020NO%TST.WD2MORETHAN1CMDREQUESTED?BNEERRCODYES,ERRORTST.L(A0)VALIDEXECUTOR?BEQERRCODNO,COMMANDERRORMOVE.L(A0),A0"JMP(A0)JUMPTOCOMMANDEXECUTOR&LEV8020TST.L(A0)+BUMPTABLEPOINTER#SUB.L#1,D1BUMPBITPOINTER(L2R)#BMIERRCODREACHEDLIMIT-ERROR!BRA.SLEV8010CONTINUEPAGE*,*DEFAULTVOLUMEEXECUTOR(LEVEL80COMMAND)**REV.1.006/15/79(SMITH)*+*THISISABULKSTORAGELOGICALCOMMANDTO!*BEPASSEDONTOTHEFMSMODULE.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME**USING:01234567*D *APPPP*** Release the LUT resource.* Queue event to FMS.+* IF error in queueing event to to FMS THEN4*BSRERRFMS{Errorcode#FATAIE$13internalerror}:*BSRPUTSTA{Putserrorcodeincaller'sparameterblock}A*BRASETCC{Acknowledgesservicerequestandreturnsfromevent}*VOLDEFCLR.LD6BSRSIGLUTRELEASELUTLOCKBSRTELFMSNOTIFYFMS BEQSETARQ*BRANCHIFEVENTQUEUEDCMP.B#RTCDTASK,D0BNE.SVOLDEF10*BRANCHIFFMSTASKEXIST BSRERCOSNX(*SETUPCODESFORFMSTASKNON-EXISTENTBRA.SVOLDEF20*CONTINUEPROCESSING VOLDEF10:BSRERRFMSSETERRORCODE VOLDEF20:2BSRPUTSTAMovestatus(D1)toactualuser'sP.B. 3BRASETCCSetconditioncodes,acknowledgeservice)*request,andreturnfromeventservice.PAGE**END-OF-TASKEXECUTOR**REV.1.006/15/79(JIMSMITH)*"*THISISACLEAN-UPROUTINEFORA"*TASKWHOHASGONETOCOMPLETION.*!*ENTRY:A4=ASQMESSAGEPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME*D7=LUTPOINTER**USING:01234567 *D****R*A**PPPP****)EOTEXLEAEVUTSK(A4),A0LOADTASKPOINTERBSRLUTLOKLOOKUPLUTTST.LD0FINDHIM?BEQ.SEOT10YES!BRASETCCGOACKNOWLEDGEREQUEST(EOT10BSRWAITLUTGETACCESSTOLUTLISTEOT15LEALUTBEG(A6,D7.L),A1)MOVE.LA1,D6SETUPADDRESSOFFISRTLUN/EOT20TST.BLUTCAS(A6,D7.L)ANYTHINGASSIGNED?BEQ.SEOT50NO,CLEANUP1MOVE.BLUTCSF(A6,D6.L),D1PICKUPSTATUSFORLUNBTST#LUSFAC,D1ACTIVE?BNE.SEOT30YES&ADD.L#LUTSEG,D6NO,BUMPTONEXTLUN/MOVE.BLUTMLU(A6,D7.L),D2PICKUPMAXIMUMLUNS*MULU#LUTSEG,D2CALCULATELENGTHOFTABLELEALUTBEG(A6,D7.L),A1 ADD.LD2,A1#CMP.LA1,D6REACHEDENDOFTABLE?BLT.SEOT20NO,CONTINUE/BRA.SEOT50YES,SOMETHINGWRONG,BUTGOAHEAD'EOT30BSRCLOS10UPDATETHELUTANDDCBBSRCLUNCLOSETHELUNBRA.SEOT15CONTINUEEOT50BSRWAITDCBLOCKDCBLISTMOVE.LIOCOMS(A2),A0)MOVE.LSVTDCB(A0),D5POINTERTODCBLIST BEQ.SEOT603EOT55CMP.LDCBBRK(A6,D5.L),D7BREAKSERVICEHERE?BNE.SEOT57NO$CLR.LDCBBRK(A6,D5.L)YES,CLEARIT,EOT57MOVE.LDCBPTR(A6,D5.L),D5GETNEXTDCBBNE.SEOT55CONTINUE!EOT60BSRSIGDCBRELEASEDCBLOCKBSRLUTDELDELETELUTENTRY#CLR.LD6CLEARLUNPOINTERFORFMS#CLR.LD7CLEARLUTPOINTERFORFMSBSRTELFMSYES,NOTIFYFMS"BEQ.SEOT70OK,RETURNFROMEVENTBSRSIGLUTRELEASELUTLISTBRASETCCSOMETHINGWRONG!!EOT70BSRSIGLUTRELEASELUTLISTBRASETARQRETURNPAGE**RETURNFROMEVENT**O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*,*RTNEVTADD.L#60,A7ADJUSTSTACKLIKERTNVT *RTRRETURN*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<* *OKSTATUS*!OKSTACLR.LD1SETUPRETURNCODE RTSRETURN**SETCCTOZERO*SETCZLEAAKRBLK(A2),A0(MOVE.B#4,ACKCCD(A0)SETZEROBITINCC**ACKNOWLEDGEREQUEST**A0=PARAMBLOCKPOINTER*H* Set up and perform acknowledge service request sending back D0 (if not)*EOTnoficication),andconditioncodes.'* Branch to RTNEVT (return from event).*2ACKREQMOVE.LEVUTSK(A4),ACKTSK(A0)SETUPTASKID,MOVE.LEVUSES(A4),ACKSES(A0)SETUPSESSION6MOVE.BEVUTIN(A4),ACKTIN(A0)SETUPTRAPINST.NUMBER>MOVE.W#AKOPSC+AKOPSD+AKOPRT,ACKOPT(A0)SETCC,D0,ANDSTART$CLR.LACKRD0(A0)CLEARD0PARAMETER&MOVE.BEVUTIN(A4),D2PICKUPTRAPNO.$BTST#EVTNEOT,D2EOTNOTIFICATION?BNE.SACKR10YES,SKIPSTATUS:MOVE.BFHSSTA(A5),ACKRD0+3(A0)SETSTATUSIND0PARAMETERBEQ.SACKR10STATUSOKMOVE.L#FHSTIN,D1 ASL.B#3,D11MOVE.BD1,ACKRD0(A0)SETTRAPNUMBERIND0PARAMACKR10:LEAAKRBLK(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#AKRQST,D0*D0=DIRECTIVENUMBERTRAP#1*ACKNOWLEDGEREQUEST BSRNEFATAL*KILLSYSTEMIF*ANACKNOWLEDGEREQESTFAILEDO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*!*BRARTNEVTGORETURNFROMEVENT BRAASRTOP*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**UPDATESTATUS**ENTRY:D1=STATUS*N* Perform move logical to place status code into calling task parameter block.*,PUTSTAMOVE.BD1,BYTE(A2)SETUPSTATUSBYTE-MOVE.BD1,FHSSTA(A5)SETSTATUSINDCBBLOCK&LEAMOVBLK(A2),A3PARAMBLOCKADDRESSCLR.LMVSTSK(A3)SOURCETASK CLR.LMVSSES(A3)SOURCESESSIONLEABYTE(A2),A0MOVE.LA0,MVSADD(A3)*A0=SOURCEADDRESS&MOVE.W#1,MVLENG+2(A3)LENGTHOFXFER(MOVE.LEVUTSK(A4),MVDTSK(A3)DEST.TASK+MOVE.LEVUSES(A4),MVDSES(A3)DEST.SESSION 0MOVE.LEVURA0(A4),MVDADD(A3)SETUPDEST.ADDR.ADD.L#FHSSTA,MVDADD(A3)LEAMOVBLK(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#MOVELL,D0*D0=DIRECTIVENUMBERTRAP#1 *EXECUTEMOVELOGICALDIRECTIVEPUTS10RTSRETURN* *SETUSER/SERVERREQUESTSTATUS*5SETARQERQ.DERQST#AKRSER+FHSTINENABLESERVEREVENTSO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*!*BEQRTNEVTOK,RETURNFROMEVENT BEQASRTOP*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<(CMP.B#RTCDNFND,D0ISINTERCEPTPRESENTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*#*BEQRTNEVTYES,RETURNFROMEVENT BEQASRTOP*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BSRFATALNO,ERROR*KILLSYSTEMIF *FAILEDTOENABLESERVEREVENTSPAGE* *TELSPL:*SENDEVENTTOSPOOLER*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**TELSPLLEAQEVBLK(A2),A0*MOVE.L#SPLID,0(A0)*TELSPL:LEAGPBUFR(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#SPLID,A1MOVE.L#IOSESS,D0*A1=TASKNAME*D0=TASKSESSIONNUMBER BSRGETTSKID*GETTHESPOOLERTASK-IDBNE.STELSPL10'*BRANCHIFSPOOLERTASKDOESNOTEXISTMOVE.LA0,QEVBLK(A2)MOVE.LA1,QEVBLK+4(A2) *SETTASK-IDINPARAMETERBLOCKLEAQEVBLK(A2),A0*A0=PARAMTETERBLOCKADDRESSO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.B#SPLEVT,EVSUB(A2) BRATEL02*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* TELSPL10:RTS*RETURNTOCALLERO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<* *TELIOS:*SENDEVENTTOIOS* TELIOSEQU*!LEAQEVBLK(A2),A0SETPBPOINTERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#*MOVE.L#IOSID,0(A0)SETUPIOSIDMOVE.LIOSTSKID(A2),(A0)MOVE.LIOSTSKID+4(A2),4(A0) *SETTASKIDINPARAMETERBLOCKO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</MOVE.B#CFGEVT,FMSUB(A2)SETUPEVENTSUB-CODELEAFMSEVT(A2),A6*MOVE.LA6,QEVPKT(A0)SETUPEVENTPOINTER SUB.LA6,A6 *A6=ZERO(MOVE.LD5,FMSDCB(A2)SETUPDCBPOINTER BRATEL05PAGE***THISISTHECOMMONERRORROUTINESECTION***SETCCFORBADRETURN*"SETCCLBSRSIGLUTRELEASELUTLOCK.SETCCLEAAKRBLK(A2),A0SETCCFORACKNOWLEDGECLR.BACKCCD(A0)REQUEST."BRAACKREQGOACKNOWLEDGEREQUEST*G* The following error labels are branched to when an error is detected."*Theytypicallydothefollowing:I*1.MovetheappropriateerrorcodeintoD1.(Errorcodeuniquetoentry *point).C*2.BRAERRCC-HeretheLUTsemaphoreissignaledvieBSRSIGLUT.*3.RTStocallingroutine.**I/OSYSTEMBUFFERFULL*2ERRBUFMOVE.L#FSTASS,D1SETUPRETURNCODESTATUSBRA.SERRCCGOSETCC**COMMANDERROR*$ERRFCTBSR.SSIGDCBRELEASEDCBLOCK-ERRCMDMOVE.L#FSTAIF,D1SETUPRETURNSTATUSBRA.SERRCCGOSETCC-ERRCODMOVE.L#FSTAIF,D1SETUPRETURNSTATUS3BSRPUTSTAPutstatus(D1)intoactualuser'sP.B.BRA.SSETCCLGOSETCC* *LUNERROR*.ERRLUNMOVE.L#FSTAILU,D1SETUPRETURNSTATUSBRA.SERRCCGOSETCC**PROTECTCODEERROR*#ERRPCBSR.SSIGDCBRELEASEDCBLOCK-ERRPCSMOVE.L#FSTAPC,D1SETUPRETURNSTATUSBRA.SERRCCGOSETCC**ACCESSPERMISSIONERROR*#ERRAPBSR.SSIGDCBRELEASEDCBLOCK-ERRAPSMOVE.L#FSTAAP,D1SETUPRETURNSTATUSBRA.SERRCCGOSETCC*)ERRAPSSMOVEM.L(A7)+,D3-D4ADDJUSTSTACKBRA.SERRAPSGOREPORTERROR* *TASKERROR*-ERRTSKMOVE.L#FSTATN,D1SETUPRETURNSTATUS BRA.SERRCC**INTERNALERROR*-ERRFMSMOVE.L#FSTAIE,D1SETUPRETURNSTATUSBRA.SERRCCSGOSETCC**INVALIDASSIGNMENTERROR*7ERRASGSBSR.SSIGDCBRELEASEDCBLISTSEMAPHOREIEEE488 -ERRASGMOVE.L#FSTAAS,D1SETUPRETURNSTATUSBRA.SERRCCGOSETCC**INVALIDDEVICENAME*.ERRDEVMOVE.L#FSTAVOL,D1SETUPRETURNSTATUSBRA.SERRCCGOSETCC**INVALIDPARAMBLOCKADDRESS*-ERRPRMMOVE.L#FSTAIP,D1SETUPRETURNSTATUS3BSRPUTSTAPutstatus(D1)intoactualuser'sP.B.BRA.SSETCCLGOSETCC* *DEVICEBUSY*-ERRBSYMOVE.B#ISTADB,D1SETUPRETURNSTATUS BRA.SERRCC**INVALIDDEVICETYPE*-ERRIDTMOVE.L#FSTADT,D1SETUPRETURNSTATUS3BSRPUTSTAPutstatus(D1)intoactualuser'sP.B.BRA.SSETCCLGOSETCC**SETSTATUSANDCC*#ERRCCBSR.SSIGLUTRELEASELUTLISTERRCCSRTSRETURN*ERCOSNX:MOVE.L#FSTAOSNX,D1"*D1=ERRORCODEREFLECTINGERROR BRA.SERRCC*CONTINUEPROCESSINGERRSSE: BSR.SSIGDCB*RELEASEDCBLOCKMOVE.L#FSTASE,D1 *D1=SHAREDSEGMENTERRORCODE BRA.SERRCC*SETUPCONDITIONCODESPAGE**RESOURCEMANAGEMENTROUTINES*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**RETURN:SAME*(*Twoentrypoints:WAITLUTandWAITDCB.G*InI/OcommonsegmentisasemaphorefortheLUT(logicalunittable)C*andasemaphoreforthetheDCB(devicecontrolblock).SelectingK*theappropriateentrypointandBSRingtoitwillresultinthesemophoreB*beingsetwithaTASinstructiontogiveexclusiveaccesstotheI*resource.Incasetheresourcehasbeenpreviouslylocked,arelinquish7*loopisentereduntiltheresourcebecomesavailable.*>* To free the resource use the appropriate signal entry point.**WAITONLUTSEMAPHORE*,WAITLUTMOVE.L#SVTSLUT,D0GETLUTSEMAPHORE BRA.SXXWAIT**WAITONDCBSEMAPHORE*,WAITDCBMOVE.L#SVTSDCB,D0GETDCBSEMAPHOREXXWAITMOVE.LIOCOMS(A2),A0 ADD.LD0,A0XXWT00TAS(A0)BEQ.SXXWT10GOTITMOVE.LA0,-(A7)ERQ.RELINQCAN'TGETITNOWMOVE.L(A7)+,A0TRYAGAIN BRAXXWT00 XXWT10 RTS**SIGNALONLUTSEMAPHORE*F* Two entry points are SIGLUT to free the LUT (logical unit table) and0* SIGDCB to free the DCB (device control block).*/SIGLUTMOVE.L#SVTSLUT,D0RELEASELUTSEMAPHORE BRA.SSIGXXX**SIGNALONDCBSEMAPHORE*/SIGDCBMOVE.L#SVTSDCB,D0RELEASEDCBSEMAPHORESIGXXXMOVE.LIOCOMS(A2),A0CLR.B(A0,D0)RTSPAGE**APCHK**REV.1.006/15/79(JIMSMITH)*/*THISROUTINEWILLCHECKFORACCESSPERMISSION2*CONFLICTSBETWEENTHEDCBANDTHEREQUESTOR.ALL5*RESOURCELOCKSAREASSUMEDTOHAVEBEENMADE.IFNO/*ERRORSAREFOUNDTHEDCBANDLUNAREUPDATED.*#*ENTRY:A4=QUEUEMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**RETURN:SAME*D0=0=NORMALRETURN*1=APCONFLICT**USING:01234567*DR***PPP *A*PPPP*G* Using outstanding read and write assignment counts DCBWNT,DCBRNT thatH* are saved in DCB and the requested read/write access permission codes,H*determineifaconflictexists.Ifitdoesreturn1inD0,elsereturnB*0inD0.APCHKalsochecksbussable,andsharableattributesfor-* conflicts with requested access permission.**APCHK:K*Maprequestedread/writepermissioncodesto0,-1,1valuesviaBSRMAPAP.5*IFdeviceNOTsharable(#DATSHRinDCBATTset)THEND*IFeitherDCBwritecountorreadcount(DCBWNT,DCBRNT)isnonzero0*THENBNEAPC45.{Returnserrorcode=1inD0}9*IFanytypeofreadaccesswasrequested(D3<>0)THEN=*IFeithertheDCBRNT(setnegative)orD3(fromMAPAP)THEN+*BMIAPC45{Returnserrorcode=1inD0}.*ELSEA*IFexclusivereadaccesswasrequestedand(D3=-1)andDCBRNT!*(readcounterinDCB<>0)THEN,*BNEAPC45.{Returnserrorcode=1inD0}.*%APCHKCLR.LD0INITIALIZERETURNCODE%MOVE.WFHSOPT(A5),D1PICKUPOPTIONSAND.W#7,D1ISOLATEAP3BSRMAPAPReturnwithrequestedprotectionvalues. !*D3=readprotectionrequested."*D4=writeprotectionrequested.)*$FFFF,exclusive$0001,public$0000,noneA*BTSTW#DATSHR,DCBATT(A6,D5.L)ISTHISASHARABLEDEVICE?IEEE488(BTSTMDATSHR,DCBATT,A6,D5.LSJF9/23/83 BEQ.S APC20*TST.WDCBWNT(A6,D5.L)ANYWRITESALREADY?)BNEAPC45BRANCHIFYES-ERROR?IEEE4881TST.WDCBRNT(A6,D5.L)ANYREADSALREADY?IEEE488(BNEAPC45BRANCHIFYES-ERRORIEEE488APC20TST.WD3READAP?BEQ.SAPC25NO5TST.WDCBRNT(A6,D5.L)ALREADYEXCLUSIVELYASSIGNED?BMIAPC45YES,INVALIDREQUESTTST.WD3EXCLUSIVEREQUESTED?!BMI.SAPC22YES,LEAVEMAPVALUE3ADD.WDCBRNT(A6,D5.L),D3NO,SETUPNEWREADCOUNT BRA.SAPC25-APC22TST.WDCBRNT(A6,D5.L)READCOUNTZERO?BNE.SAPC45NO,ERROR*APC25::*IFanytypeofwriteaccesswasrequested(D4<>0)THEN=*IFeithertheDCBWCT(setnegative)orD4(fromMAPAP)THEN+*BMIAPC45{Returnserrorcode=1inD0}.*ELSEB*IFexclusivewriteaccesswasrequestedand(D4=-1)andDCBWNT"*(writecounterinDCB<>0)THEN,*BNEAPC45.{Returnserrorcode=1inD0}.*APC25TST.WD4WRITEAP?BEQ.SAPC30NO5TST.WDCBWNT(A6,D5.L)ALREADYEXCLUSIVELYASSIGNED?!BMI.SAPC45YES,INVALIDREQUESTTST.WD4EXCLUSIVEREQUESTED?!BMI.SAPC27YES,LEAVEMAPVALUE4ADD.WDCBWNT(A6,D5.L),D4NO,SETUPNEWWRITECOUNT BRA.SAPC30.APC27TST.WDCBWNT(A6,D5.L)WRITECOUNTZERO?BNE.SAPC45NO,ERROR *IEEE488?*CHECKTOSEEIFWEAREDEALINGWITHABUSDEVICEORAIEEE488*BUSSABLEDEVICE.IEEE488 *IEEE488*APC30:F*IFthisisNOTabussabledevice(DATBDVNOTset)ORthisisaNOTa#*sharabledevice(DATSHRset)THEN/*IFanydevicesopenonbus(DCBSOP<>0)THEN-*BRAAPC45{Returnserrorstatusof1inD0}*ELSE;*MovesessionnumberfromlogicalunittabletoDCBentry. *BRAAPC33*APC30B*BTSTW#DATBDV,DCBATT(A6,D5.L)ISTHISABUSSABLEDEVICE?IEEE488(BTSTMDATBDV,DCBATT,A6,D5.LSJF9/23/83#BNE.SAPC30ABRANCHIFYESIEEE488=*BTSTW#DATSHR,DCBATT(A6,D5.L)ISTHISABUSDEVICE?IEEE488(BTSTMDATSHR,DCBATT,A6,D5.LSJF9/23/83!BEQ.SAPC33BRANCHIFNOIEEE488 *IEEE488>*ATTHISPOINTWEHAVEANON-SHAREDBUSDEVICE.CHECKIEEE488<*TOSEEIFTHEREAREANYSUBORDINATEDEVICESOPENEDIEEE488?*ONTHISBUS.IFTHEREARE,ITISINVALIDTHEOPENTHEIEEE488*BUSATTHISTIME.IEEE488 *IEEE488;TST.LDCBSOP(A6,D5.L)AREANYDEVICESOPENONBUS?IEEE4881BNE.SAPC45BRANCHIFYES-REPORTERRORIEEE488 *IEEE488@MOVE.LLUTSES(A6,D7.L),DCBSUP(A6,D5.L)SETUPSESSION#IEEE488BRA.SAPC33CONTINUEIEEE488 *IEEE488E*ATTHISPOINTWEHAVEABUSSABLEDEVICE.IFTHEBUSISOPENIEEE488E*CHECKTOSEETHATTHESESSIONNUMBERSMATCHBEFOREUPDATINGIEEE488.*THESUBORDINATEOPENCOUNT(DCBSOP).IEEE488 *IEEE488<*APC30A: {Come here from APC30 if we have a bussable device}7*PickuppointertosubordinateDCBentryfromDCBSUP.?*IFanyread/writesopenonsubordinateDCB(DCBWNT<>0)THENB*IFthesessionnumberfromourLUT(supervisor's)doesnotmatch(*thatinDCBSUPofsubordinateDCBTHEN,*BNEAPC45{Returnserrorcodeof#1inD0}*APC30B:4*ELSE{NoreadsorwritesopeninsubordinatesDCB}G*IFanytypeofreadpermissionorwritepermissionwasrequestedTHEN*APC30C::*Bumpsubordinateopencount(DCBSOPofsubordinateDCB).**APC33:M*Foranyreadorwritepermissionwhichwasrequested,movetheMAPAPvalues6*toDCBRNTandDCBWNTofsupervisorDCBrespectively.*APC40:F*Movetheoriginalread/writepermissionbitstoLUTCAPinLUTentry.*Returnwithgoodstatus.**APC45:%*Returnwithbadstatusof#1inD0.*HAPC30AMOVE.LDCBSUP(A6,D5.L),A0A0<==SUBORDINATESBUSDCBPTRIEEE488/TST.LDCBWNT(A0)ANYBUSWRITES/READS?IEEE488.BEQ.SAPC30BNO,BUSMUSTNOTBEOPENIEEE488 *IEEE4885MOVE.LDCBSUP(A0),A0A0<==SESSION#OFBUSIEEE4885CMPA.LLUTSES(A6,D7.L),A0SESSION#'SMATCH?IEEE488%BNE.SAPC45NO,REPORTERRORIEEE488 *IEEE488 &APC30BTST.WD3ANYNEWREADS?IEEE488#BNE.SAPC30CBRANCHIFYESIEEE488!TST.WD4ANYNEWWRITES?IEEE488!BEQ.SAPC33BRANCHIFNOIEEE488 *IEEE488DAPC30CMOVE.LDCBSUP(A6,D5.L),A0RESTORESUBORDINATEDCBPTRIEEE488>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83 2*MOVE.WDCBATT(A6,D5.L),D1PICKUPDCBATTRIBUTES1MOVE.LDCBATT(A6,D5.L),D1PICKUPDCBATTRIBUTES *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TST.WD3READAPREQUEST?BEQ.SATC25NO&BTST#DATRED,D1DEVICESUPPORTREAD?BEQ.SATC35NO,ERROR!ATC25TST.WD4WRITEAPREQUEST?BEQ.SATC30NO'BTST#DATWRT,D1DEVICESUPPORTWRITE?BEQ.SATC35NO,ERRORO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83E*ATC30MOVE.WDCBATT(A6,D5.L),LUTATT(A6,D6.L)SETUPATTRIBUTESINLUFATC30MOVE.WDCBATT+2(A6,D5.L),LUTATT(A6,D6.L)SETUPATTRIBUTESINLU *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< RTSRETURN!ATC35MOVE.L#1,D0SETERRORCODE RTSRETURNPAGE**ASGCHK**REV.1.003/01/80(JIMSMITH)*/*THISROUTINEWILLCHECKFORDEVICEATTRIBUTES1*CONFLICTBETWEENTHEDCBANDTHECURRENTACCESS *PERMISSION.*#*ENTRY:A4=QUEUEMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**RETURN:SAME*D0=0=NORMALRETURN*1=INVALIDFUNCTION**USING:01234567*DR***PPP *A*PPPP****&ASGCHKCLR.LD0INITIALIZERETURNCODE:CMP.B#FOPEREW,LUTCAP(A6,D6.L)EXCLUSIVER/WPERMISSION?BEQ.SASGC30YES,IT'SOK4MOVE.WLUTATT(A6,D6.L),D1PICKUPDEVICEATTRIBUTESBTST#DATRED,D1SUPPORTREAD?BEQ.SASGC10NO,MUSTBEWRITEASQALLOCATED-*NON-ZERO==TASKWILLSELFABORTVIAKILLER*GETASQ:LEAGPBUFR(A2),A0!*A0=ADDRESSOFPARAMETERBLOCK"*(GENERALPURPOSEDYNAMICBUFFER)=MOVE.B#AQSTQE+AQSTME+AQSTRD+AQSTSD+AQSTBV+AQSTRI,ASQSTA(A0)#*SETASQSTATUSINPARAMETERBLOCK*BITMEANINGASSELECTED*0ENABLEASQ*1ENABLEDEFAULTINPUTBUFFER*2ASRDISABLED*3DISABLEREGISTERSTACKING**4DEFAULTRECEIVINGINPUTBUFFERDEFINED*5NOASRDEFINED MOVE.L#EVULEN+FHSNLN,D0*D0=MAXIMUMMESSAGELENGTH#*ALSOUSEDTODETERMINEASQLENGTHMOVE.BD0,ASQMML(A0)MOVE.LD0,ASQQLN(A0)*SETRESPECTIVELY*MAXIMUMMESSAGELENGTH+*ASQLENGTH(PAGEALLOCATIONTO256BYTES)LEAASQUE(A2),A6MOVE.LA6,ASQASR+4(A0)-*A6=ADDRESSDEFAULTRECEIVINGINPUTBUFFERMOVE.L#GTASQ,D0*D0=GETASQDIRECTIVETRAP#1*ALLOCATEASQ BSRNEFATAL*IFERRORTERMINATETASKRTSPAGE**VALIDCOMMANDCOMBINATION* *FHSLEVEL0I* This table contains all the valid command codes associated with a level*0FHScall(TRAP#3).*CC0FHSDC.B1CHECKPOINTDC.B2DELETE DC.B4CLOSEDC.B8PROTECTDC.B$10RENAMEDC.B$20CHANGEAPDC.B$40ASSIGNDC.B$80ALLOCATEDC.B$6CLOSE,DELETEDC.B$CPROTECT,CLOSEDC.B$14RENAME,CLOSEDC.B$18RENAME,PROTECT DC.B$1CRENAME,PROTECT,CLOSE(DC.B$1ERENAME,PROTECT,CLOSE,DELETEDC.B$24CHANGEAP,CLOSEDC.B$28CHANGEAP,PROTECT#DC.B$2CCHANGEAP,PROTECT,CLOSEDC.B$30CHANGEAP,RENAME"DC.B$34CHANGEAP,RENAME,CLOSE#DC.B$38CHANGEAP,RENAME,PROTECT+DC.B$3CCHANGEAP,RENAME,PROTECT,CLOSEDC.B$48ASSIGN,PROTECT DC.B$4CASSIGN,PROTECT,CLOSE(DC.B$4EASSIGN,PROTECT,CLOSE,DELETEDC.B$50ASSIGN,RENAMEDC.B$54ASSIGN,RENAME,CLOSE!DC.B$58ASSIGN,RENAME,PROTECT(DC.B$5CASSIGN,RENAME,PROTECT,CLOSEDC.B$C0ALLOCATE,ASSIGNFHS0ENDEQU*ENDOFTABLEDC.B0KEEPITEVENPAGE**SUPPORTTABLES***FHSCOMMANDLEVELTABLE*'CMDTBLDC.LLEVEL0DEVICE/FILECOMMANDSDC.LLEVEL1UTILITYCOMMANDS DC.L LEVEL2 SPOOLER COMMANDSDC.L0,0,0,0NOTUSED!DC.LLEVEL80PRIVILEGEDCOMMANDS**LEVELZEROEXECUTORS*LEV0EXDC.LALLOCALLOCATEDC.LASGNASSIGN#DC.LCAPNCHANGEACCESSPERMISSIONDC.LRENAMRENAMEDC.LPROTPROTECTDC.LCLOSECLOSEDC.LDELETDELETEDC.LCHKPNTCHECKPOINT**LEVELONEEXECUTORS*%LEV1EXDC.LRATTRRETRIEVEATTRIBUTESDC.LFDIRFETCHDIRECTORY"DC.LFDVMNFETCHDEVICEMNEMONICS!DC.LCHGLUACHANGELUASSIGNMENT"DC.LFVOLDEFFETCHDEFAULTVOLUMEDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSED**LEVELTWOEXECUTORS* LEV2EX DC.L SPLCMD DISPLAY QUEUE DC.L SPLCMD COPIES DC.L SPLCMD PRINT DC.L SPLCMD FORMS DC.L SPLCMD CONTINUE DC.L SPLCMD CANCEL DC.L 0 NOT USED DC.L 0 NOT USED**LEVEL80EXECUTORS*LEV80EXDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.LVOLDEFSETDEFAULTVOLUME**ACCESSPERMISSIONMAPTABLEK* Referenced by MAPAP to set read access permssion into D3 and write accessI*permissionintoD4.$FFFFrepresentsexclusiveaccess,$0001represents,*publicaccess,$0000representsnoaccess.* APTBLDC.WFOPPR,1,0PUBLICREADDC.WFOPER,-1,0EXCLUSIVEREADDC.WFOPPW,0,1PUBLICWRITE DC.WFOPEW,0,-1EXCLUSIVEWRITE+DC.WFOPPRPW,1,1PUBLICREAD,PUBLICWRITE/DC.WFOPPREW,1,-1PUBLICREAD,EXCLUSIVEWRITE/DC.WFOPERPW,-1,1EXCLUSIVEREAD,PUBLICWRITE3DC.WFOPEREW,-1,-1EXCLUSIVEREAD,EXCLUSIVEWRITEPAGE GSEGPBLK:DC.L0 *TASKNAMEDC.L0*TASKSESSIONNUMBER DC.W$2000*DIRECTIVEOPTIONS-*BIT13-LOGICALADDRESS=PHYSICALADDRESSDC.W$0*SEGMENTATTRIBUTES DC.B'FHSD'*SEGMENTNAMEDC.L$0 *PHYSICALADDRESSIFAPPLICABLEDC.LGSEGSIZE*SEGMENTBYTESIZEPAGEPROGSIZEQU*-FHSENTPAGE ENDFHSENT =/*=/*DEVICE.IOS.AF=/*A=/* Chain file to assemble I/O Trap 2 server 'IOS' device portion=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to DEVICE.IOS.LS=/*=/IFC \1=ARGDEVICE.IOS.LS=/ENDIF=/**=ASM DEVICE.IOS.SA,DEVICE.IOS.RO,\1;RZ=175=/*{ Included files are:=/*9995.&.TR1.EQ=/*9995.&.TR1RTCD.EQ=/*9995.&.EXE.EQ=/*9995.&.IOE.EQ=/*9995.&.NIO.EQ=/*9995.&.LV5.EQ=/*9995.&.FME.EQ=/*9995.&.FMI.EQ=/*9995.&.UTILITY.MC=/*TEMPLATE.IOS.AI=/*}=/*=ENDHOPTCREF***********************************************************************&*VERSADOSOPERATINGSYSTEM-OEMRTOS* *I/OMODULE**IOSTRAP2SERVER*$*COPYRIGHTED1980BYMOTOROLA,INC.*F************************************************************************PROGRAMNAME:.IOS**REV.1.007/01/79(JIMSMITH)D*REV.2.007/28/81(DICKVANDERLIN)-ADDITIONOFI/OWITHTIME-OUTC*REV.2.0110/15/81(DICKVANDERLIN)-ADDITIONOFSPECIALPURPOSE!*DRIVERPARAMETERBLOCKSUPPORT.O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*B*CHANGESMADEBYHUGHSCANBEIDENTIFIEDBYONEOFTHEFOLLOWING:* *IEEE488*EVENT *LEVEL40O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<E*REV.3.003/10/83(STEVEFEITELSON)-ADDITIONOFLEVEL40FUNCTION*CODEPROCESSOR(IEEE488).D*REV.3.016/20/83(STEVEFEITELSON)-CLAIMDRIVEREVENTSADDEDTO*LEVEL2FUNCTIONS.**-*FUNCTION:FILE/DEVICEINPUT/OUTPUTSERVICES*2*CALLINGSEQUENCE:TRAP2WITHIOCBPOINTERINA0***SUPPORTTABLES:LOGICALUNITTABLE(LUT)*DEVICECONTROLBLOCKS(DCB)*DEVICECONNECTIONQUEUE(DCQ)*2*ENTRY:THISMODULEISATTACHEDTOTHEI/OCOMMON&*DATASEGMENTBYTHEI/OINITIALIZER."*ANASQHASBEENALLOCATEDBYTHE*I/OINITIALIZER.*F**********************************************************************PAGE***INCLUDESTATEMENTS*TR1 *TR1RTCD*EXE*IOE*NIO*LV5*FME*FMI *UTILITY.MC**NOLISTINCLUDE9995.&.TR1.EQINCLUDE9995.&.TR1RTCD.EQINCLUDE9995.&.EXE.EQINCLUDE9995.&.IOE.EQINCLUDE9995.&.NIO.EQINCLUDE9995.&.LV5.EQINCLUDE9995.&.FME.EQINCLUDE9995.&.FMI.EQINCLUDE9 995.&.UTILITY.MCLISTPAGE**GENERALEQUATES*(PBCLNEQU10PARAMBLOCKCONSTANTLENGTH(EREXEQU$FFFFFF00IOSERRORSIGNEXTEND BIT0EQU0***PAGE**IOSINITIALIZATIONROUTINE**REV.1.007/01/79(JIMSMITH)*JQXZrbSjRrVzGBJMZBAJO9ERU@Q=JJ IYT"T*U2W:E0*THISROUTINEPERFORMSTHEFOLLOWINGFUNCTIONS:**-SETUSERSTACKPOINTER'*-ESTABLISHMODULEASATRAP2SERVER*-*ENTRY:A0=IOCOMSADDRESSASPASSEDBYIOI**EXIT:A7=STACKPOINTER**USING:01234567*D**A*R****INCLUDETEMPLATE.IOS.AI SECTION0PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83**BITTESTMACRO* BTSTMMACRO IFGE\1-16OPTMEXBTSTW#\1-16,\2(\3,\4) OPTNOMEXENDC* IFLT\1-16OPTMEXBTSTW#\1,\2+2(\3,\4) OPTNOMEXENDCENDM *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE***************EXTERNALDEFINITIONS********** XDEFASRBEG XDEFERCOSNX XDEFFCBSIG XDEFKILIT XDEFLUTSIG XDEFDCBSIG XDEFDCBWAIT XDEFSTARQS  ***************EXTERNALREFERENCES**********XREFGETTSKID XREFSNDFMSXREFTELLFMSL PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* INTL!*SaveaddressofI/OCommon(A0)*Establishstackaddress$*EstablishIOSastheTRAP2server*IF9*EstablishmentofIOSasTRAP2serverwassuccessfulor1*ifanintercepterror(RTCDDPRQ$06)ispresent*THEN*BranchtoINTL10*ELSE0*Bringsystemdowninanorderlymanner(KILIT)* INTL10(*EstablishaddressofstartofDCBlist* INTL30*IF**DCBexaminingisnotassociatedwithIOS*THEN*BranchtoINTL40*ELSE*Attatchchannel*IF#*Channelattatchedsuccessfullyor#*Channelisanon-existentchannel*THEN*BranchtoINTL36*ELSE*IF*Channelisalreadyattatched*THEN*BranchtoINTL40*ELSE0*Bringsystemdowninanorderlymanner(KILIT)* INTL360*SaveaddressofcurrentDCBinlistprocessing9*Establishchannelidforpossibleinputtoasubroutine*IF$*Channelwasattatchedsuccessfully*THEN*BranchtoINTL37*ELSE;*Markofflinealldevicesassociatedwiththenon-existent*channel.(BSRMARK_OFF)**BranchtoINTL38.* INTL37=*Viaasubroutineconfigureorobtainstatusforalldevices1*associatedwiththechannelthatwasattatched.* INTL38;*Re-establishaddressofDCBinlistcurrentlyprocessing.* INTL40*IF!*TherearemoreDCB'stoprocess*THEN*BranchtoINTL30*ELSE* WAITV*Waitforaneventtooccur.O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE*,IOSENTBRA.SINTLINITIALIZATIONJUMPVECTOR!IOSASRBRAASRBEGASRJUMPVECTOR DC.B'IOSD'DC.L1203844'*INTL: MOVE.LA0,A6$*A6=ADDRESSOFI/OCOMMONSEGMENTLEAGSEGPBLK(PC),A0/*A0=ADDRESSOFIOSGETSEGMENTPARAMERBLOCKMOVE.L#GTSEG,D0*D0-DIRECTIVENUMBERTRAP#1*GETIOSDATASEGMENT BSRNEKILIT*KILLSYSTEMIF *UNABLETOGETIOSDATASEGMENT MOVE.LA0,A2*A2=IOSDATASEGMENTADDRESSMOVE.L#TSEGSIZE,D0/*D0=NUMBEROFBYTESINDATASEGMENTOBTAINEDINTL02: CLR.B(A0)+ SUB.L#1,D0 BNE.SINTL02(*ZEROOUTTHEIOSDATASEGMENTOBTAINED*BRANCHIFNOTDONEMOVE.LA2,GSEGADDR(A2)*A2=IOSDATASEGMENTADDRESSMOVE.LA6,IOCOMS(A2)!*A6=I/OCOMMONADDRESSSEGMENTLEAIOSTAK(A2),A7*A7=STACKADDRESS BSRGETASQ*GETASQFORIOS BSRTEMPLATE.*INITIALIZETHEDATASEGMENTOBTAINEDFORIOS**ESTABLISHTRAP2SERVER*LEASRVPRM(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#S ERVER,D0*D0=DIRECTIVENUMBERTRAP#1 *ESTABLISHIOSASTRAP2SERVER BEQ.SINTL10&CMP.B#RTCDDPRQ,D0INTERCEPTPRESENT?BEQ.SINTL10YES#BSR.SKILITERROR-CAN'TCONTINUEINTL10: SUB.LA6,A6 *A6=ZERO******#***ATTATCHDEVICESTOCHANNELS***8****ESTABLISHCONFIGURATIONFORNON-RANDOMDEVICES****+***ESTABLISHSTATUSFORRANDOMDEVICES*********MOVE.LIOCOMS(A2),A1"*A1=ADDRESSOFI/OCOMMONSEGMENTMOVE.LSVTDST(A1),A1*A1=STARTADDRESSOFDCBLISTINTL30LEAATTPRMLD(A2),A0,*A0=ADDRESSATTATCHPARAMETERBLOCKADDRESSCMP.L#IOSID,DCBDID(A1) BNE.SINTL40,*JMPIFTHISDCBISNOTASSOCIATEDWITHIOS#INTL35MOVE.LDCBCCB(A1),XIOCID(A0)CLR.BXIOKEY(A0)*INITIALIZERESPECIVELY*CHANNELMNEMONIC*UNIQUEKEYVALUEMOVE.L#XCCMR,D0*D0=DIRECTIVEVALUETRAP#1*INITIATETRAPREQUEST BEQ.SINTL36*JMPIFCHANNELATTACHEDCMP.B#XSTMNO,D0 BEQ.SINTL36*JMPIFNON-EXISTENTCHANNELCMP.B#RTCDDPRQ,D0 BEQ.SINTL40**JMPIFTHISCHANNELALREADYATTATCHEDTO *THISDRIVER BSR.SKILIT* INTL36EQU*MOVE.LA1,CURDCBLD(A2)(*A1=ADDRESSOFDCBCURRENTLYPROCESSINGMOVE.LDCBCCB(A1),D1%*D1=CHANNELIDATTATCHEDTOTHISDCBCMP.B#XSTMNO,D0 BNE.SINTL37*JMPIFCHANNELWASATTATCHED BSRMARK_OFF**MARKOFFLINEALLDEVICESASSOCIATEDWITH*THENON-EXISTENTCHANNEL BRA.SINTL38 *CONTINUEONINTL37: BSRSETPERLD*IFOTHERTHANARANDOMDEVICE*CONFIGUREIT*IFARANDOMDEVICE*OBTAINCURRENTSTATUSINTL38:MOVE.LCURDCBLD(A2),A1*A1=ADDRESSIFDCBPROCESSINGINTL40MOVE.LDCBPTR(A1),A1 MOVE.LA1,D0 BNE.SINTL30 *A1=ADDRESSOFNEXTDCBONLIST*JMPIFMOREDCB'STOPROCESSMOVE.LIOCOMS(A2),A1)*A1=ADDRESSOFI/OCOMMONDATASEGMENTLEASVTSTCF(A1),A00*A0=ADDRESSOFSYSTEMTASKCONFIGURATIONFLAGBSET#BIT0,(A0))*SETFLAG--IOSINITIALIZATIONCOMPLETE BRA.SASRBEGPAGE**KILITROUTINE*KILIT:'MOVEM.LD0/A0,-(A7)SAVEREGD0ANDA0ERQ.ABORT#0ABORTSELFPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** ASRBEG4*ReadthenexteventinthequeintolocationARQUE*IF*Erroroccurredduringread*THEN0*Bringsystemdowninanorderlymanner(KILIT)*ELSE3*EstablishpacketaddressforeventsqueuedtoFMS&*Establishaddressofeventread(A4)+*Isolatetheeventcodefortheeventread**IF-*Eventreadisnotaserverevent(Code$07)*THEN*BranchtoASRB0100*ELSE'*EditforaTRAP2typeserverrequest*IF+*EventisnotaTRAP2typeserverrequest*THEN0*Bringsystemdowninanorderlymanner(KILIT)*ELSE*EditforEOTnotification*IF*EOTnotification*THEN*BranchtoEOTSK*IF*ParameterblockisOKor,*ifapartialparameterblockmovewasdone*THEN*BranchtoASRB5*IF%*Abadparameterblockaddressexist*THEN*BranchtoERCPRM*ELSE*BranchtoERCFMS.** ASRB5*<*Establishaddressofrequestor'sIOCBparameterblock(A5)*IF"*Thisisaprivilegedinstruction*THEN*BranchtoLVL80CD*ELSE8*Establishaddressoflogicalunittable(LUT)[RegD7]A*Establishaddressoflogicalunittableentery(LUN)withinthe*LUT[RegD6]A*Establishaddressofdevice/filecontrolblock(DCB/FCB)weare*processing[RegD5]<*EstablishmentofD5,D6,D7wasviathesubroutineLVL192.**IF*LUTdoesn'texistor*LUNisnotassignedor*LUNisinvalid*THEN*BranchtoASRB10*IF>*Thisisawildcardparameterblockwhichindicatesthatthe?*userhadadevicewhichdoesnotconformtostandardVERSADOS*configuration*THEN*BranchtoSPDRVR*ELSE<*Decodethefunctioncodelevelcommandrequestoftheuser*IF*Avalidcommandrequestexist*THEN7*Branchtothelogictoprocesstherequestedfunction*codelevelcommand*LEVEL0LVL0CD*LEVEL1LVL1CD*LEVEL2LVL2 CD*LEVEL40LVL40CD*ELSE*BranchtoERCCODO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE**ASYNCHRONOUSSERVICEROUTINE**REV.1.007/01/79(JIMSMITH)*-*-ENTRYISCAUSEDBYTHEARRIVALOFANEVENT4*-THEEVENTSTRUCTUREINCLUDESTHEREQUESTOR'SIOCB3*-THEASQISDISABLEDUNTILPROCESSINGISCOMPLETE***ENTRY:A7=STACKPOINTER* *EXIT:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER**USING:01234567 *D****A*RRRRP****ASRBEG:MOVE.L#GTEVNT,D0!*D0=GETEVENTDIRECTIVENUMBERTRAP#1 *GETEVENTO*------------------------------------------------------------------------------%*BNERTNVTERROR-RETURNFROMEVENTO*------------------------------------------------------------------------------*<*THEABOVEINSTRUCTIONHASBEENREPLACEDWITHTHEFOLLOWING=*BECAUSETHISEXITWILLNOTENABLETHETRAP2SERVERTHUSIT6*WILLHANGTHESYSTEMFORALLSUBSEQUENTTRAP2CALLS*<*SOWEWILLJUSTKILLTHESYSTEMASTHEONLYERRORRETURNEDB*WOULDBEASQFULL--ANDWHOEVERISTRYINGTOPUTONEINSHOULD*BEWAITINGANYWAY*F*RECEIVINGAREANOTINREQUESTOR'SADDRESSSPACE--THATSHOULDN'TBE** BSRNEKILIT*KILLSYSTEMIF*ATTEMPTTOGETEVENTFAILEDO*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*LEAEVTDRV(A2),A6MOVE.LA6,QEVPRM+QEVPKT(A2),*ESTABLISHPACKETADDRESSFOREVENTSQUEUED*TOFMS SUB.LA6,A6*A6=INDEXREGISTER=ZEROLEAARQUE(A2),A4*A4=ADDRESSEVENTREADMOVE.BEVCODE(A4),D1 AND.B#$F,D1*D1=ISOLATEDEVENTCODEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CMP.B#EVCSRV,D1 BNEASRB0100PAGE*JMPIFNOTASERVEREVENT************%****PROCESSINGSERVEREVENT(7)****************)CLR.WAKRPRM+ACKOPT(A2)INITACKOPTIONS5MOVE.BEVUTIN(A4),D1PICKUPTRAPINSTRUCTIONNUMBER MOVE.LD1,D2!AND.B#$F,D2ISOLATETRAPNUMBERCMP.B#IOSTIN,D2TRAP2?O*------------------------------------------------------------------------------*BNERTNVTNO*JMPIFNOTTRAP2O*------------------------------------------------------------------------------**C*THEABOVEINSTRUCTIONHASBEENCOMMENTEDOUTSINCEITSPATHWOULD*NOTENABLETHETRAP2SERVER**F*CURRENTLYTHERESHOULDNOTBEANYSERVEREVENTSTYPE7UNLESSTRAP2)*SOWEAREJUSTGOINGTOKILLITFORNOW** BSRNEKILIT*KILLSYSTEMIF"*EVENTREADISNOTATRAP2EVENTO*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++BTST#EVTNEOT,D1 BNEEOTSK'*JMPIFENDOFTASK(EOT)NOTIFICATION**CHECKPARAMETERBLOCKINFO*TST.BEVUPST(A4)PBOK?BEQ.SASRB5YES*JMPIFPARAMETERBLOCKOK+CMP.B#EVPSTBA,EVUPST(A4)BADPBADDRESS?BEQERCPRMYES$*JMPIFBADPARAMETERBLOCKADDRESSCMP.B#EVPSTPM,EVUPST(A4) BEQ.SASRB5'*JMPIFAPARTIALPARAMETERBLOCKMOVE*THESTANDARDPBIS28BYTES**INTERNALI/OCALLSBYSTSTEMTASKSFORA2*DATATXREQUESTCOULDFORCETHISTOBEA36BYTE*PARAMETERBLOCKMOVE,*IFTHEUSERTASKMAKESANI/OCALLANDHIS)*PBISATTHEENDOFHISDATASEGMENTAN**ATTEMPTWILLBEMADETOMOVETHEMAXIMUM'*OF36BYTESCAUSINGANERRORCONDITON#*THATISNOTATRUEERRORCONDITON-*THEPOTENTIALERRORWILLBEALLOWEDTOPASS,*ATTHISPOINTBUTADDITIONALEDITSWILLBE,*MADELATERONTODETERMINEIFATRUEERROR*EXISTORNOT BRAERCFMS*'*THEREARETWOPOSSIBLECONDITINSLEFT*ERRORCODE3$*PARAMETERBLOCKMOVENOTREQUESTED+*FORASERVEREVENT(7)TRAP2APARAMETER*BLOCKMOVEHASBEENREQUESTED,*ALLPARAMETERBLOCKCODESHAVEBEENEDITED+*BUTAMATCHWASNOTFOUNDSOTHISWILLBE*CONSIDEREDANERRORALSO**1*INEACHOFTHEABOVECASESWEAREGOINGTOFLAG%*THEERRORASANINTERNALERROR(C7)2*IFITBECOMESNECESS ARYTOISOLATEANYONEERROR3*MORESPECIFICALLYTHEAPPROPRIATEEDITALONGWITH0*THENEWERRORCODEWILLHAVETOBEIMPLEMENTED***ASRB5LEAIOCBLK(A2),A5#*A5=ADDRESSREQUESTOR'SIOCBINPB/TST.BIOSFCT(A5)ISTHISPRIVILEGEDFUNCTION?/BMILVL80CDYES,GOSERVICELEVEL80FUNCTIONSPAGE*******************#**A4=ADDRESSMESSAGEEVENTREAD**8***A5=ADDRESSOFREQUESTOR'SIOCBINTHEEVENTREAD*** ****A6=INDEXREGISTER=ZERO*******A7=STACK*****D5=DCB/FCBADDRESS***D6=ADDRESSLUNINTHELUT**D7=ADDRESSOFLUT*>*CHECKFORSPECIALPURPOSEDRIVER'WILDCARD'PARAMETERBLOCK* BSRLVL192*ESTABLISHFOLLOWING*D7=ADDRESSLUT*D6=ADDRESSLUNINLUT*D5=ADDRESSDCB BNE.SASRB10*JMPIF*LUTDOESN'TEXIT*LUNNOTASSIGNED *INVALIDLUNBTST#LUSFDV,LUTCSF(A6,D6.L) BEQ.SASRB10#*JMPIFLUNASSIGNMENTISFORFILEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83=*BTST#DATSPD,DCBATT(A6,D5.L)CHECKIFTHISISWILDCARDP.B;BTSTMDATSPD,DCBATT,A6,D5.LCHECKIFTHISISWILDCARDP.B *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*BNESPDRVRYES-GOTOSPECIALPROCESSING*JMPIF------0*THEUSERHASADEVICETHATDOESNOTCONFORMTO0*STANDARDVERSADOSCONFIGURATION--ASSUCHTHE3*USERHASWRITTENHISOWNDRIVERHANDLERANDWOULD*LIKECONTROLPASSEDTOIT***/*DECODECOMMANDCODEANDJUMPTOLEVELHANDLER*ASRB10LEACMDTAB(PC),A0*A0=ADDRESSCMDLEVELTABLECLR.LD1SETUPBITPOINTER+MOVE.BIOSFCT(A5),D2PICKUPFUNCTIONCODE BEQ.SASRB17*JMPIFFUNCTIONCODE=0TST.L(A0)+BUMPTABLEPOINTER ASRB15BTSTD1,D2THISBITSET?BEQ.SASRB20NOASRB17TST.L(A0)VALIDLEVEL?#BEQERCCODNO,FUNCTIONCODEERROR+*JMPIFTHEFUNCTIONLEVELI/OCODEHASNO*TRANSFERADDRESSMOVE.L(A0),A0(JMP(A0)JUMPTOFUNCTIONLEVELHANDLER#ASRB20ADD.L#1,D1BUMPBITPOINTERTST.L(A0)+BUMPTABLEPOINTERCMP.B#8,D1REACHEDLIMIT?%BEQERCCODYES-FUNCTIONCODEERRORBRA.SASRB15NO,CONTINUEPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* * ASRB0100**IF*Thisisatimerevent($04)*THEN*BranchtoASRTIM*IF#*Thisisnotamessageevent($03)*THEN*BranchtoASRB0300*IF-*ThemessageeventisnotfromanI/Omodule*THEN*BranchtoRTNVTLD*IF!*Thesub-codeisnotanI/Odone*THEN*BranchtoASRB0200*ELSE'*EstablishaddressoftheDCB[RegD5] * ASR10IO*/*LocktheLUTresourcesviasubroutineLUTWAIT/*LocktheDCBresourcesviasubroutineDCBWAIT7*EstablishtheaddressoftheLUTforthisI/Orequest*IF=*WehavereceivedanI/Ocompletioneventforwhichthereis*noLUTaddress*THEN1*Bringsystemdowninanorderlymanner(X_0010)*ELSEC*Establishtheaddressoftheuser'sIOCBparameterblock[RegA5]<*EstablishtheaddressoftheLUNentryintheLUT[RegD6]*IFA*TheLUNentrythatexistedwhentheI/Owasinitiatednolonger*exist*THEN1*Bringsystemdowninanorderlymanner(X_0001)*IF1*TheI/Orequestisnotfromataskleveldriver*THEN*BranchtoASR35IO*ELSE<*Updatestatusinuser'sIOCBparameterblockintheuser's*memoryspace*IF3*I/Ocompletionwasnotforarandomaccessdevice*THEN*BranchtoASR30IO*IF4*Completionforrandomaccessdevicewassuccessful*THEN*BranchtoASR30IO*ELSE<*Updatesectornumberthatwasbadinuser'sIOCBparameter*blockinuser'smemoryspace * ASR30IO:*Updatetransferlengthinuser'sIOCBparameterblockin*user'smemoryspace * ASR35IO:*Clearthefollowingflagsthatwererequiredtoinitiate *theI/O*I/OpendingflagintheLUT*AddressofLUTintheDCB*PriorityintheDCB*DeviceavailableintheDCB*IF*Thiswasalevel40request*THEN*Branchto ASR37IO*IF=*Thiswasnotadatatransferrequest(possibleconfigureor*devicestatusrequest)*THEN*BranchtoASR38IO * ASR37IO*IF*I/Orequestwasaproceed*THEN*BranchtoASR50IO * ASR38IO*IF*I/Owithwaitwassuccessful*THEN*BranchtoASR40IO*ELSE@*ViathesubroutineSETCNDIOsetthereturnconditionforerror*andacknowledgetherequest*THEN*BranchtoASR60IO * ASR40IO?*ViathesubroutineOKSTATIOsetthereturnconditionforgood*andacknowledgetherequest*THEN*BranchtoASR60IO * ASR50IO%*Queaneventtotherequestingtask * ASR60IO*IF(*TherewasnotaclosependingfromFHS*THEN*BranchtoASR70IO*ELSE#*QueaneventtoFHStowakeitup*IF**TheeventwasqueuedsuccessfullytoFHS*THEN*BranchtoASR70IO*ELSE0*Bringsystemdowninanorderlymanner(KILIT) * ASR70IO*IF&*Therearenorequestinthewaitque*THEN*BranchtoASR80IO*ELSE9*RemovetheI/Orequestinthequeandpresentittothe$*driverviathesubroutineQUEDCQIO * ASR80IO0*ViasubroutineDCBSIGreleasetheDCBresource0*ViasubroutineLUTSIGreleasetheLUTresource*THEN*BranchtoRTNVTLDO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGEO*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++************'****PROCESSINGMESSAGEEVENTS(3)********************ENTRY:A7=STACKPOINTER*A6=INDEXREGISTER=ZERO*A4=ADDRESSEVENTREAD* *EXIT:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**USING:01234567 *D****A*RRRRP**************I****PROCESSMESSAGEEVENT(3)FROMIOD-BACKWARDCOMPATIABLELOGIC****************** ASRB0100:CMP.B#EVCTIM,D1 BEQASRTIM*JMPIFATIMEREVENTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CMP.B#EVCQUE,D1 BNEASRB0300*JMPIFNOTAMESSAGEEVENTCMP.L#IOSESS,EVQSES(A4)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**BNERTNVTLD++++++++++++ BNEASRBEG*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"*JMPIFEVENTNOTFROMI/OMODULE*ITSAMESSAGETYPE3)*BUTITSNOTFROMANI/OMODULESOWE'LL*THROWITAWAY CMP.B#TRMEVT,EVTCOD(A4) BNEASRB0200*JMPIFSUBCODENOTI/ODONEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>***ISSUERESOURCELOCKSANDSETUPPOINTERS*MOVE.LEVTDCB(A4),D5*D5=ADDRRESSOFDCBASR10IO:#BSRLUTWAITGETACCESSTOLUTLIST*LOCKLUTRESOURCES#BSRDCBWAITGETACCESSTODCBLIST*LOCKDCBRESOURCES-MOVE.LDCBLUT(A6,D5.L),D7SETUPLUTPOINTER*D7=ADDRESSOFLUT BSREQKILIT'*JUMPIFWEHAVERECEIVEDACOMPLETION/*EVENTFORWHICHWEHAVENOLOGICALUNITTABLE,*ADDRESS--THESYSTEMWILLBEBROUGHTDOWN!*TOITSKNEES--BUTVERYGENTLY+LEADCBIOS(A6,D5.L),A5SETUPIOCBPOINTER+*A5=ADDRESSOFI/OPBCONTAINEDINTHEDCB CLR.LD1*MOVE.BIOSLUN(A5),D1SETUPLUNFORLUNLK*D1=LUNFORI/OJUSTCOMPLETEDBSRLUNLKLOOKUPLUN3*D6=ADDRESSLUNENTRYINTHELUTFORI/OJUSTDONETST.LD0TESTRETURN#BSRMIKILITWOOPS!-CAN'THAPPEN1*IFRESULTSOFTESTARENEGATIVEKILLTHESYSTEM-*THELUNENTRYTHATEXISTEDWHENTHEI/OWAS,*INITIATEDISNOWGONE--MAKESYOUNERVOUS *DOESN'TIT BSRX01000)*EDITTODETERMINEIFOLD/NEWI/OMETHOD BEQASR35IO*JMPIFNEWI/OMEHTOD*8*UPDATESTATUSINUSERMEMORYSPACEI/OPARAMETERBLOCK*&LEAMOVPRM(A2),A3PARAMBLOCKADDRESSCLR.LMVSTSK(A3)SOURCETASK CLR.LMVSSES(A3)SOURCESESSION-MOVE.LLUTTID(A6,D7.L),MVDTSK(A3)DEST.TASK0MOVE.LLUTSES(A6,D7.L),MVDSES(A3)DEST.SESSION)MOVE.BIOSSTA(A5),ONEB(A2)SETUPSTATU S5MOVE.LDCBLBA(A6,D5.L),MVDADD(A3)SETUPDEST.ADDR.ADD.L#IOSSTA,MVDADD(A3)LEAONEB(A2),A0$MOVE.LA0,MVSADD(A3)SOURCEADDRESS&MOVE.W#1,MVLENG+2(A3)LENGTHOFXFERLEAMOVPRM(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#MOVELL,D0*D0=DIRECTIVENUMBERTRAP#1*PERFORMMOVELOGICAL*STATUSFIELDHASBEENUPDATED***EDITFORRANDOMDEVICE*IFNOTRANDOMDEVICETHENJMP*)*IFRANDOMDEVICEANDSTATUSOKTHENJMP*1*SETBADSECTORNUMBERINREQUESTINGTASKI/OPB*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTST#DATRAN,DCBATT(A6,D5.L)BTSTMDATRAN,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BEQ.SASR30IO!*JMPIFNOTRANDOMACCESSDEVICETST.BIOSSTA(A5)BEQ.SASR30IO*JMPIFREQUESTWASSUCCESSFULMOVE.W#4,MOVPRM+MVLENG+2(A2)LEAIOSRRN(A5),A11MOVE.LA1,MOVPRM+MVSADD(A2)RESETSOURCEADDRESS)MOVE.LDCBLBA(A6,D5.L),MOVPRM+MVDADD(A2)4ADD.L#IOSRRN,MOVPRM+MVDADD(A2)RESETDEST.ADDRESSLEAMOVPRM(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#MOVELL,D0*D0=DIRECTIVENUMBERTRAP#1*MOVELOGICAL"*SETBADSECTORADDRESSINI/OPB*/*SETTRANSFERLENGTHINREQUESTINGTASKI/OPB*7ASR30IOMOVE.W#4,MOVPRM+MVLENG+2(A2)RESETMOVELENGTHLEAIOSLEN(A5),A31MOVE.LA3,MOVPRM+MVSADD(A2)RESETSOURCEADDRESS)MOVE.LDCBLBA(A6,D5.L),MOVPRM+MVDADD(A2)4ADD.L#IOSLEN,MOVPRM+MVDADD(A2)RESETDEST.ADDRESSLEAMOVPRM(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#MOVELL,D0*D0=DIRECTIVENUMBERTRAP#1*UPDATETRANSFERLENGTHINPB*?*HOUSEKEEPOUTSTANDINGFLAGSTHATWEREREQUIREDTOINITATEI/O*ASR35IO:BCLR#LUSFIO,LUTCSF(A6,D6.L)*RESETI/OPENDINGFLAGINLUT0CLR.LDCBLUT(A6,D5.L)CLEARCURRENTLUTPOINTER,CLR.BDCBPRI(A6,D5.L)CLEARPRIORITYINDCBCLR.WDCBTMO(A6,D5.L)*SETFLAG-DEVICEAVAILABLEASR36IO:O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<***NOTIFYREQUESTINGTASKOFI/OCOMPLETION*4*IFNOTADATATRANSFERREQUESTFORCEI/OWITHWAIT*'*IFI/OWAITTHENACKNOWLEDGEI/ODONE*9*IFI/OPROCEEDTHENQUEANEVENTTOTHEREQUESTINGTASK*:CMP.B#$40,IOSFCT(A5)ISTHISALEVEL40COMMAND?LEVEL406BEQ.SASR37IOBR=YES,TESTFORPROCEEDMODELEVEL40TST.BIOSFCT(A5)BNE.SASR38IO$*JMPIFNOTADATATRANSFERREQUEST+*COULDBEACONFIGURE-DEVICESTATUSETC.4ASR37IOMOVE.WIOSOPT(A5),D1PICKUPOPTIONSLEVEL40AND.W#IOPPRO,D1&BNE.SASR50IOJMPIFI/OWITHPROCEEDASR38IO:TST.BIOSSTA(A5)$BEQ.SASR40IOJMPIFI/OSUCCESSFUL**I/OWITHWAIT*I/OUNSUCCESSFUL*,BSRSETCNDIONO,GOSETCCANDACK.REQUESTBRA.SASR60IO**I/OWITHWAIT*I/OSUCCESSFUL*/ASR40IOBSROKSTATIOSETOKCCANDACK.REQUESTBRA.SASR60IO**I/OWITHPROCEED%*QUEANEVENTTOTHEREQUESTINGTASK*?ASR50IOCLR.WQEVREQ+QEVOPT(A2)CLEARQUEUEEVENTOPTIONSFIELD8MOVE.LLUTTID(A6,D7.L),QEVREQ+QEVTSK(A2)SETUPTASKID=MOVE.LLUTSES(A6,D7.L),QEVREQ+QEVSES(A2)SETUPTASKSESSION+MOVE.WIOSOPT(A5),D1PICKUPOPTIONSFIELD&AND.W#IOPCAD,D1COMPLETIONADDRESS?BEQ.SASR55IONO2MOVE.LIOSCAD(A5),CMPADDR(A2)YES,SETUPADDRESS-OR.W#QVOPAS,QEVREQ+QEVOPT(A2)SETUPOPTION>ASR55IOMOVE.LDCBLBA(A6,D5.L),IOCBADR(A2)SETUPIOCBADDRESSLEAQEVREQ(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#QEVNT,D0*D0=DIRECTIVENUMBERTRAP#1 *QUEEVENT  *&*SENDWAKE-UPTOFHSIFCLOSEPENDING*ASR60IO:BTST#LUSFCP,LUTCSF(A6,D6.L)BEQ.SASR70IO*JMPIFCLOSENOTPENDINGLEAWUFHS(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#WAKEUP,D0*D0=DIRECTIVENUMBERTRAP#1 *WAKEUPFHSBEQ.SASR70IOOKBSRKILITSOMETHINGWRONG*#*DE-QUEUETASKSINCONNECTIONWAIT*.ASR70IOTST.LDCBDCQ(A6,D5.L)ANYONEINWAIT?BEQ.SASR80IONOBSR DCQWAITYES,LOCKDCQLIST!BSRQUEDCQIOQUEUEI/OTODRIVERBSRDCQSIGRELEASEDCQLIST***RELEASERESOURCELOCKSANDENABLEEVENTS*#ASR80IOBSRDCBSIGRELEASEDCBLISTBSRLUTSIGRELEASELUTLIST*EVERYTHINGDONEFORCLEANUPO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BRARTNVTLD++++++++++++++ BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*O*------------------------------------------------------------------------------PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* * ASRB0200*IF9*ThisisnotamessagefromFHStore-configureadevice*toitsdefaultconfiguration*THEN*BranchtoRTNVTLD*ELSE-*EstablishtheaddressoftheDCBtoprocess*LocktheDCBresourcelist*IF'*TheDCBweareprocessingisinactive*THEN*BranchtoCONF10LD*ELSE*ReleasetheDCBresourcelist*BranchtoRTNVTLD * CONF10LD*Establishthefollowing*Devicestatushaschanged*Deviceisoffline!*Deviceisinconfigurationmode*ReleasetheDCBresourcelist=*Buildtheparameterblocktore-configurethedevicetoits*defaultconfiguration * CONF15LD#*Initiatethere-configurerequest*IF*Requestwassuccessful*THEN*BranchtoCONF20LD*IF*Thechannelisbusy*THEN*BranchtoCONF15LD*ELSE * CONF20LD*BranchtoRTNVTLDO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE ASRB0200:************3****PROCESSARE-CONFIGUREEVENT(3)FROMFHS****************CMP.B#CFGEVT,EVTCOD(A4)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BNERTNVTLD++++++++++++ BNEASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-*JMPIFNOTMESSAGEFROMFHSTORE-CONFIGURE *ADEVICETOITSDEFAULTVALUES *WEHAVE *MSGEVENT*SENTFROMI/OMODULE*BUTIT'SNOTONEOFFOLLOWING*BACKWARDCOMPATIBLELOGIC"*AREQUESTFROMFHSTOSETDEVTO*DEFAULTCONFIGURATION*SO"*JUSTFORGETITANDTHROWITAWAYMOVE.LEVTDCB(A4),D5*D5=ADDRESSDCBPROCESSINGI***************************************************************************CONFIG**INTERNALCONFIGURECOMMAND**J*************************************************************************** BSRDCBWAIT*LOCKUPTHEDCBLISTTST.WDCBTMO(A6,D5.L)BEQ.SCONF10LD*JMPIFDCBINACTIVE BSRDCBSIG*RELEASETHEDCB+*THISSHOULDNEVERHAPPENBUTTHEEDITSIS *HEREANYWAYO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BRARTNVTLD BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*&CONF10LDBSETW#DFLGSC,DCBFLG(A6,D5.L)BCLRW#DFLGON,DCBFLG(A6,D5.L)BSETW#DFLGCF,DCBFLG(A6,D5.L)&*SETRESPECTIVELYTHEFOLLOWINGFLAGS*DEVICESTATUSHASCHANGED*DEVICEISOFFLINE!*DEVICEISINCONFIGURATIONMODE BSRDCBSIG*RELEASETHEDCBLIST BSRSETP40LD**SETINPARTTHEIOCBANDTHEINFORMATION *PACKETASSOCIATEDWITHREQUEST"MOVE.LDCBCCB(A6,D5.L),XIOCID(A0)*SETCHANNELMNEMONICMOVE.W#IOCNFG,IOSFCT(A3)*SETUPIOCBFUNCTIONCODECLR.LIOSOPT(A3)*INTHEREQUESTOR'SIOCB%*CLEARTHEOPTIONS,LUN,STATUSFIELDSO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM9/14/83@*TheaboveinstructionCLR.LIOSOPT(A3)effectivelyrequestthe?*drivertodoaDISMOUNTandCONFIGURE.Somethingtodowitha>*klugethatwasworkedoutsometimeagobutIOSdidn'tknow.F*WhatisreallywantedisjustaCONFIGUREonlyrequest.Theklugeas*Iunderstanditisasfollows?*CONFIGUREREQUEST+(OPTIONSFIELD=0)==>CONFIGURE+MOUNTC*CONFIGUREREQUEST+(OPTIONSFIELD=NON-ZERO)==>CONFIGUREONLY**D*TheCLR.Linstructionshouldnotb eremovedasitclearsmorethan*justtheOPTIONSfield.**E*SothefollowinginstructionwillsettheOPTIONSfieldtonon-zeroG*thustellingthedrivertodoaconfigureonly.IfthereisaproblemA*theusercannreturntotheoriginalconditionbyreplacingthe#*followinginstructionwithaNOP.*MOVE.W#1,IOSOPT(A3)#*SETFLAGTOCONFIGUREDEVICEONLY *BKM9/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<CONF15LDMOVE.L#XCAIO,D0"*D0=DIRECTIVETOINITIATEREQUESTTRAP#1*INITIATETHEREQUESTBEQ.SCONF20LD*JMPIFREQUESTINITIATEDCMP.B#XSTBSY,D0BEQ.SCONF15LD*JMPIFCHANNELBUSY CONF20LD:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BRARTNVTLDRETURNFROMEVENT BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* * CONF100L*LockuptheDCBlistresource*IF-*There-configurationrequestwassuccessful*THEN*BranchtoCONF105L*IF'*Errorwasaninvalidfunctioncodeor*Configurationparametererror*THEN*BranchtoCONF110L * CONF105L,*Removethedevicestatuschangeindication*Setthedeviceonline3*Establishthatdeviceinindefaultconfiguration * CONF110LB*Establishthatdeviceisnolongerintheinternalconfiguration*mode*ReleasetheDCBlistresource*BranchtoRTNVTLDO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGEL*****************************************************************************3*ENTRYPOINTFORINTERNALCONFIGURATIONCOMPLETION*L***************************************************************************** CONF100L: BSRDCBWAIT*LOCKTHEDCBLISTTST.WXRPSTV(A4)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM9/13/83BEQ.SCONF105L!*JMPIFSUCCESSFULCONFIGURATIONCMP.W#ISTAIF,XRPSTV(A4)BEQ.SCONF110LCMP.W#ISTACNF,XRPSTV(A4)BEQ.SCONF110L*JMPIF*INVALIDFUNCIONCODE *CONFIGURATIONPARAMETERERRROR*ELSE-*TREATASAGOODCONFIGURATION(TAPEDRIVER)&CONF105LBCLRW#DFLGSC,DCBFLG(A6,D5.L) *BKM9/13/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BSETW#DFLGON,DCBFLG(A6,D5.L)&*SETRESPECTIVELYTHEFOLLOWINGFLAGS(*REMOVEDEVICESTATUSCHANGEINDICATION*SETDEVICEONLINECLR.BDCBCCF(A6,D5.L),*SETFLAG-DEVICEINDEFAULTCONFIGURATION CONF110L:BCLRW#DFLGCF,DCBFLG(A6,D5.L)#*REMOVEINCONFIGURATIONMODEFLAG BSRDCBSIG*RELEASEDCBLISTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BRARTNVTLD BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* * ASRB0300*IF *Thisisnotaninterruptevent*THEN*BranchtoRTNVTLD* IRPTLD*IF,*Thisisanunsolicitedchannelresetevent*THEN*BranchtoDOWNLD*IF*Thisinasolicitedevent*THEN*BranchtoIPRT20LD*IF9*Theunsoliciteddevicestatuseventhasadevicestatus*otherthanzero*THEN*BranchtoRTNVTLD * IPRT20LD=*EstablishtheaddressoftheDCBweareprocessing[RegD5]9*Establishtheaddressoftherequestor'sIOCBcontained *intheDCB-*CancelthetimerforthisDCBifoneexist.*IF#*Thisisanunsolicitedeventtype*{Terminal-->Breakcondition-*Disk-->Transition(Ready<-->NotReady)}*THEN*BranchtoUSTATLD*IF!*ThisisaHALT/ABORTeventtype*THEN*BranchtoIRP60LD*IF(*Thisisanormalcompletioneventtype*THEN*BranchtoIRP35LD*ELSE0*Bringsystemdowninanorderlymanner(KILIT)* * IRP35LD*IF+*Thisdeviceisintheinitializationmode*THEN*BranchtoSETP50LD*IF3*Thisdeviceisintheinternalconfigu rationmode*THEN*BranchtoCONF100LDA*SavetheI/OcompletionstatusintheIOCBcontainedintheDCB*IF(*Therequestwassuccessfullycompleted*THEN*BranchtoASR10IO*IF4*Abreakconditionoccuredduringthedatatransfer*THEN*BranchtoIRP50LD*IF5*Thedeviceweareprocessingisnotarandomdevice*THEN*BranchtoASR10IO*IF1*TherandomdeviceisnotonanIPCdiskchannel*THEN*BranchtoIRPT38LD*IF;*Therandomdevicewentnotreadyduringthedatatransfer*THEN*BranchtoNOTRDYLD*ELSE* * IRPT38LD*BranchtoASR10IO * IRPT40LD*IF*Thereisnotimertocancel*THEN*BranchtoIRPT45LD*ELSE*Canceltimerforthisdevice * IRPT45LD*Returntocaller * NOTRDYLD;*Establishthatthisdeviceisofflineandthatthedevice*statushaschanged*BranchtoASR10IO * IRPT50LD*IF9*ThetaskmakingtheI/Orequesthasrequestedexclusive*breaknotification*THEN*BranchtoASR10IO*ELSE*Adjustthebreakcounter!*Notifythesystembreakclaimer*BranchtoASR10IO * IRPT60LD*IF&*Thiswasnotahaltcompletionevent*THEN*BranchtoRTNVTLD*ELSEA*SavetheI/OcompletionstatusintheIOCBcontainedintheDCB*BranchtoASR10IOO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE************(****PROCESSANINTERRUPTEVENT(1)**************** ASRB0300:CMP.B#EVCIOI,D1O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BNERTNVTLD BNEASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*JMPIFNOTANINTERRUPTEVENT0*WECHECKEDALLEVENTSPERMITTEDANDSTRUCKOUT*SOCHUCKITMACK*****************************************************************************INTERRUPTSERVICEROUTINE**!*ENTRY:A4=ASQMESSAGEPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER**USING:01234567 *D**RRR*A**RPRPP*K****************************************************************************IRPTLD:CMP.B#XPSUNR,XRPSTA(A4) BEQDOWNLD-*JMPIFUNSOLICITEDCHANNELRESETEVENTTYPECMP.B#XPSUNS,XRPSTA(A4)BNE.SIPRT20LD!*JMPIFNOTANUNSOLICITEDEVENTCMP.W#XSTVDST,XRPSTV(A4)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BNERTNVTLD BNEASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-*JMPIFTHISUNSOLICITEDDEVICESTATUSEVENT)*HASADEVICESTATUSOTHERTHANZERO(0) IPRT20LD:MOVE.LXRPUID(A4),D5*D5=ADDRESSOFDCBLEADCBIOS(A6,D5.L),A52*A5=ADDRESSREQUESTOR'SIOCBCONTAINEDINTHEDCBBSR.SIRPT40LD(*CANCELTIMERFORTHISDCBIFONEEXISTCMP.B#XPSUNS,XRPSTA(A4) BEQUSTATLD&*JMPIFUNSOLICITEDDEVICEEVENTTYPE*TERMINAL-->BREAKCONDITION,*DISK-->TRANSITION-READY<-->NOTREADY O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>01/15/85>>*D*Edittoseeifthecompletioneventisforadeviceattatchedtoa/*taskthatisinendoftask(EOT)processing.*2*IFyesthentransfercontroltolocationIPR80LD*ELSE *Continueon* BTSTW#DFLIOEOT,DCBFLG(A6,D5.L) BNEIRP80LD-*BRANCHIFI/OCOMPLETIONISFORTASKINEOT *PROCESSINGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<01/15/85<< CMP.B#XPSHLT,XRPSTA(A4) BEQIRP60LD#*JMPIFHALT/ABORTTYPEEVENTTYPECMP.B#XPSNRM,XRPSTA(A4)BEQ.SIRP35LD0*JMPIFNORMALCOMPLETIONOFREQUESTEVENTTYPE BSRKILIT*SOCK-IT-TO-ITIRP35LD:BTSTW#DFLGIN,DCBFLG(A6,D5.L) BNESETP50LD&*JMPIFDEVICEININITIALIZATIONMODEBTSTW#DFLGCF,DCBFLG(A6,D5.L)BNECONF100LD%*JMPIFDEVICEINCONFIGURATIONMODE CLR.LD1 MOVE.WXRPSTV(A4),D1*D1=STATUSOFREQUESTMOVE.BD1,IOSSTA(A5)+*SETRETURNSTATUSINIOSCONTAINEDINDCB BEQASR10IO'*JMPIFREQUESTCOMPLETEDSUCCESSFULLYCMP.W#ISTABRK,D1BEQ.SIRP50LD,*JMPIFBREAKOCCURREDDURINGDATATRANSFERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTSTW#DATRAN,DCBATT(A6,D5.L)BTSTMDATRAN,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< BEQASR10IO*JMPIFNON-RANDOMDEVICEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* *ChangerequestedbyMarcBriel*ChangemadebyBobbyMatthews*Date1/21/83*%CMP.B#XTDIPC,DCBDKC+IOSCTP(A6,D5.L)BNE.SIRPT38LD$*IFNOTANIPCDISKCHANNEL,DONOT*CHANGEDEVICESTATUSFLAGSO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<CMP.B#ISTANR,D1BEQ.SNOTRDYLD,*JMPIFRANDOMDEVICEWENTNOTREADYDURING*DATATRANSFER IRPT38LD: BRAASR10IO* IRPT40LD:BCLRW#DFLGCT,DCBFLG(A6,D5.L)*CLEARFLAG-CANCELTIMERBEQ.SIRPT45LD*JMPIFNOTIMERTOCANCEL BSRC_TIMER*CANCELTIMERFORTHISDCB IRPT45LD:RTS**I/OCOMPLETION***DISKNOTREADY*&NOTRDYLDBCLRW#DFLGON,DCBFLG(A6,D5.L)BSETW#DFLGSC,DCBFLG(A6,D5.L)*SETRESPECTIVELYFLAGSFOR*DEVICEOFFLINE*DEVICESTATUSHASCHANGED BRAASR10IO**SOLICITEDBREAKHANDLER*IRP50LDMOVE.WIOSOPT(A5),D2*D2=REQUESTOR'SIOCBOPTIONSAND.W#IOPBRK,D2 BNEASR10IO4*JMPIFTASKREQUESTEDEXCLUSIVEBREAKNOTIFICATIONADD.B#1,DCBBCT(A6,D5.L)*ADJUSTTHEBREAKCOUNT BSRBRAKERLD*NOTIFYTHEBREAKCLAIMER BRAASR10IO**HALTHANDLER*IRP60LD:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>01/10/85>>*CMP.W#XSTVABT,XRPSTV(A4) *BEQRTNVTLD *BEQASRBEG,*JMPIFTHISISNOTAHALTCOMPLETIONEVENT*WEREOUTOFSYNCBUTITSOK *MOVE.BXRPSTV+1(A4),IOSSTA(A5) *SETTHECOMPLETIONSTATUSCODE *BRAASR10IO** *,*AHALTcompletioneventhasbeenreceived.*D*IftherewasnoI/Otohaltan$82statuswillbereturnedandthe*theeventcanbeignored. @*IftherewasanI/Otohaltan$E6statuswillbereturnedand=*theeventwillbeprocessedasthecompletioneventforthe*originaldataI/Orequest. C*Anycodeotherthanthesetwowillcausethesystemtohaltinan*orderlyfashion.*CMP.B#ISTAIF,XRPSTV+1(A4) BEQASRBEG-*IGNORETHISEVENT--STATUSOF$82RETURNED**AHALTI/Orequestwasrequestedbutthe(*driverindicatedthattherewasnotan)*I/Otohalt.Theimplicationbeingthat.*whenIOSissuedtherequestitthoughtthere/*wasanI/Opendingbutbythetimethedriver-*processedtherequestacompetioneventhad+*alreadybeensentsatisfyingtheoriginal(*request,thuswecanignoretheevent. CMP.B#ISTATO,XRPSTV+1(A4) BSRNEKILIT,*BRANCHIFTHECOMPLETIONSTATUSISNOT$E6MOVE.BXRPSTV+1(A4),IOSSTA(A5)1*SETTHECOMPLETIONSTATUSCODEINTHEPARAMETER*BLOCKSAVEDINTHEDCB BRAASR10IO(*ProcesstheUSERHALTcompletioneventO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<01/10/85<< O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>01/15/85>>*@*IthasbeendeterminedthatthecompletioneventisforataskE*thatisinEOTterminationthereforetheeventwillbethrownaway.**LocktheLUTresource*LocktheDCBresource<*EstablishaddressoftheLUTentryfortaskintermination**IFthisisaNORMALRETURNtypeofevent!*IFthiswasanI/Owaitrequest*THEN"*ACKNOWLEDGEtherequestingtask.'*IFthisisaHALT/ABORTtypeofevent*IFtherewasanI/Ohalted!*IFthiswasanI/Owaitrequest*THEN"*ACKNOWLEDGEtherequestingtask.H*Determinethead  dressoftheLUNentrytheI/Ocompletioneventisfor.*RemovetheI/OpendingflagintheLUNentry*ResetthecurrentLUNpointer*Resetthepriority*Makethedeviceavailable *ResettheEOTterminationflag*ReleasetheDCBresourceB*TransfercontroltolocationEOTS10withtheLUTresourcelocked*IRP80LD: BSRLUTWAIT BSRDCBWAIT*RESPECTIVELOCKTHE*LUTRESOURCE*DCBRESOURCEMOVE.LDCBLUT(A6,D5.L),D7*D7=LUTADDRESSCMP.B#XPSNRM,XRPSTA(A4)BEQ.SIRP90LD'*BRANCHIFNORMALRETURNTYPEOFEVENTCMP.B#XPSHLT,XRPSTA(A4)BNE.SIRP100LD**BRANCHIFNOTAHALT/ABORTTYPEOFEVENTCMP.B#ISTATO,XRPSTV+1(A4)BNE.SIRP100LD*BRANCHIFNOI/OWASHALTEDIRP90LD:LEADCBIOS(A6,D5.L),A52*A5=ADDRESSOFI/OPARAMETERBLOCKSAVEDINDCBMOVE.WIOSOPT(A5),D0AND.W#IOPPRO,D0BNE.SIRP100LD*BRANCHIFI/OPROCEEDREQUESTMOVE.BXRPSTV+1(A4),IOSSTA(A5)/*SETSTATUSOFI/OCOMPLETIONINI/OPARAMETER*BLOCKSAVEDINDCBBEQ.SIRP95LD*BRANCHIFSTATUSWASGOOD BSRSETCNDIO'*ACKNOWLEDGETASKWITHERRORCONDITIONBRA.SIRP100LD *CONTINUEIRP95LD: BSROKSTATIO#*ACKNOWLEDGETASKWITHGOODRETURN IRP100LD: LEALUTBEG(A6,D7.L),A10*A1=STARTADDRESSOFLUNENTRIESFORTHISLUT CLR.LD6!MOVE.BDCBIOS+IOSLUN(A6,D5.L),D6*D6=LUNI/OREQUESTWASFORMULU#LUTSEG,D6(*D6=OFFSETTOLUNI/OREQUESTWASFOR ADD.LD6,A1 MOVE.LA1,D6-*D6=ADDRESSOFLUNTHEI/OREQUESTWASFORBCLR#LUSFIO,LUTCSF(A6,D6.L))*REMOVETHEI/OPENDINGBITFORTHISLUNCLR.LDCBLUT(A6,D5.L)*CLEARTHECURRENTLUNPOINTERCLR.BDCBPRI(A6,D5.L)*CLEARPRIORITYINDCBCLR.WDCBTMO(A6,D5.L)*MAKEDEVICEAVAILABLEFORUSE BCLRW#DFLIOEOT,DCBFLG(A6,D5.L)+*REMOVEFLAG-EOTTERMINATIONINPROGRESS BSRDCBSIG*RELEASETHEDCBRESOURCE BRAEOTS100*SINCEWEAREINEOTTERMINATIONWEWILLRETURN(*CONTROLTOTHESPECIFIEDLOCATIONWITH*THELUTRESOURCELOCKED*D7=ADDRESSOFLUTENTRY*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<01/15/85<<  PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** ASRTIM4*EstablishaddressofDCBthattimeoutoccurredfor*IF*Thedeviceisnotactive*THEN*BranchtoRTNVTLD&*SetflagthatthisDCBisnotactive*IF *Thistimeoutshouldbeignored*THEN*BranchtoRTNVTLD,*EstablishtheLUNfortheI/Otobehalted+*EstablishtheLUTaddressforthisdevice*IF*ThisisavalidLUNnumber*THEN*BranchtoTMO_0100*ELSE0*Bringsystemdowninanorderlymanner(KILIT) * TMO_0100:*EstablishtheLUNaddress,withintheLUT,oftheI/Oto *terminate*IF?*TheDCBaddressintheLUNentrymatchestheDCBaddressthat*thetimeoutoccurredfor*THEN*BranchtoTMO_0200*ELSE0*Bringsystemdowninanorderlymanner(KILIT) * TMO_02007*EstablishtheaddressoftheI/Ohaltparameterblock1*ViathesubroutineHALTITinitiatethehaltI/O*IF)*ThehaltI/Owasinitiatedsuccessfully*THEN*BranchtoRTNVTLD*ELSE0*Bringsystemdowninanorderlymanner(KILIT)O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE************#****PROCESSTIMEOUTEVENT(4)****************ASRTIM:MOVE.LEVTUID(A4),D5(*D5=ADRESSOFDCBTIMEOUTOCCURREDFORTST.WDCBTMO(A6,D5.L)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BEQRTNVTLD BEQASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*JMPIFTIMERNOTACTIVECLR.WDCBTMO(A6,D5.L)*SETFLAG-DCBNOTACTIVEBCLRW#DFLGIT,DCBFLG(A6,D5.L)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BNERTNVTLD BNEASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!*CLEARFLAG-IGNORETIMEREVENT*JMPIFTHATFL  AGWASSET************I****HALTTHEI/OTHATSSTILLINPROGRESS-THISISANINTERNALRQST**************** CLR.LD1!MOVE.BDCBIOS+IOSLUN(A6,D5.L),D1 MOVE.LD1,D2 *D1=D2=LUNFORI/OTOBEHALTEDMOVE.LDCBLUT(A6,D5.L),D7#*D7=ADDRESSOFLUTFORTHISDEVICECMP.BLUTMLU(A6,D7.L),D1BLS.STMO_0100*JMPIFAVALIDLUN BSRKILIT$*LUNTOCANCELI/OFOR>7--AXIT TMO_0100:LEALUTBEG(A6,D7.L),A3-*A3=STARTADDROFTHELUNENTRIESINTHELUTMULU#LUTSEG,D2/*MULTIPLYTHELUNNUMBERBYTHELUNENTRYSIZE ADD.LD2,A3)*A3=ADDRESSOFLUNENTRYTOHALTI/OFORCMP.LLUTDCB(A3),D5BEQ.STMO_02001*JMPIFTHEDCBADDRESSINTHELUNENTRYMATCHES/*THEDCBADDRESSTHTOCCURRREDFORTHETIMEOUT BSRKILIT4*ITDON'TMATCH--SOCK-IT-TO-IT--LOVEITLOVEIT TMO_0200:LEAHLTCBLD(A2),A3.*A3=ADDRESSOFIOCBTOUSEWITHHALTI/ORQST BSRHALTIT*INITIATETHEHALTI/O BSRNEKILIT.*KILLSYSTEMIFWEWEREUNABLETOINITATETHE*HALTI/OREQUEST BRAASRBEG *CONTINUEONPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** SPDRVR*IF*Thedeviceisbusy*THEN*BranchtoERCBSY*ELSE*Setthedevicebusy>*ViathesubroutineMOVEPBmovetherequestor'sI/Oparameter*blocktotheDCBB*Puttheaddressoftherequestor'sI/Oparameterblockcontained-*intherequestor'smemoryspace,intheDCB$*Queaneventtothespecialdriver*IF#*Theeventwasqueuedsuccessfully*THEN*BranchtoSTARGS*ELSE*BranchtoERCFMSO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE*;*I/OTODEVICEWITHASPECIALPURPOSEDRIVERANDWILDCARD7*PARAMETERBLOCK.NOPARAMETERBLOCKCHECKINGINVOLVED SPDRVREQU**TST.WDCBTMO(A6,D5.L)ISTHISDEVICEBUSYBNEERCBSYYES-RETURNERROR.MOVE.W#$7FFF,DCBTMO(A6,D5.L)SETDEVICEBUSY BSRMOVEPB"MOVE.LEVURA0(A4),DCBLBA(A6,D5.L).*A0=ADDRESSOFREQUESTORSI/OPARAMETERBLOCK#*SAVETHELOGICALADDRESSOFA0IN *THEDCB*MOVEPARAMETERBLOCKTODCB BSRQEVTGOQUEEVENTTODRIVERTST.BD0WASTHEREANYERRORBNEERCFMSYES-REPORTIT0BRASTARQSNO-ENABLEASQANDRETURNFROMEVENTPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** LVL0CD*IF.*WehaveanIOCBparameterblocklengtherror*THEN*BranchtoERCPRM*IF!*Therewasnotasknamesupplied*THEN*BranchtoLVL002*IF-*Thetasknamesuppliedisnotasystemtask*THEN*BranchtoERCCOD*IF?*Thesystemtaskdoesnothaveasessionnumberof1(#IOSESS)*THEN*BranchtoERCCOD*IF3*Theparameterblocksizeislessthanthemaximum*THEN*BranchtoERCPRM* LVL002*IF=*Thereservedfieldintheparameterblockfieldisnotzero*THEN*BranchtoERCCOD3*ViathesubroutineLVL190establishthefollowing*AddressoftheLUT[RegD7](*AddressoftheLUNintheLUT[RegD6]*AddressoftheDCB[RegD5]*IF&*ThesubroutineLVL190wassuccessful*THEN*LVL004*IF*TheLUTdoesnotexistor*theLUNisinvalid*THEN*BranchtoERCLUN*ELSE+*BranchtoERCASG,theLUNisnotassigned* LVL004:*ViathesubroutineAPDCHKvalidatetheaccesspermission*IF&*Therewasanaccesspermissionerror*THEN*BranchERCKOD*3*ViathesubroutineATDCHKvalidatetheattributes*IF*Theattributesarevalid*THEN*BranchtoLVL005*IF.*Therewasadevicefunctionvalidationerror*THEN*BranchtoERCDFE*ELSE9*BranchtoERCKOD,therewasafunctionvalidationerror* LVL005A*Establishtheaddressoftheexecutortabletoprocess(LVL0EX)*BranchtoLDF_COMNO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE**LEVELZEROFUNCTIONHANDLER**REV.1.007/01/79(JIMSMITH)*2*THISROUTINEWILLSCANTHEFUNCTIONFIELDOFTHE1*REQUESTOR'SIOCBFROMRIGHTTOLEFTANDMAPTHE/*BITPOSITION! TOAFUNCTIONEXECUTORFORLEVEL*ZEROFUNCTIONS.*****!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**USING:01234567*D*****RRR*A***PPPP****/LVL0CDCMP.B#IOSBLN,EVUPSZ(A4)PBLENGGTHOK?BLTERCPRMNO,ERROR1*JMPIFPBLENGTHLESSTHANSTANDARDOF28BYTES%MOVE.WIOSOPT(A5),D1PICKUPOPTIONSAND.W#IOPTSK,D1 BEQ.SLVL002*JMPIFNOTASKNAMESUPPLIED MOVE.BEVUTIN(A4),D1YES*BTST#EVTNOS,D1!*JMPIFOTHERTHANASYSTEMTASKBTST#EVTNRTT,D1 BEQERCCOD$*JMPIFOTHERTHANAREALTIMETASK$CMP.L#IOSESS,EVUSES(A4)I/OTASK?BNEERCCODNO,ERROR!*JMPIFSESSIONNBROTHERTHAN1 CMP.B#IOSNLN,EVUPSZ(A4) BLTERCPRM**JMPIFLESSTHANTHEMAXIMUMOF36BYTES*EXISTINTHEPARAMETERBLOCKLVL002TST.WIOSLUN+1(A5) BNEERCCOD)*JMPIFRESERVEFIELDNOT=ZERO(ERROR)*0*ALLLEVELZEROFUNCTIONSREQUIREACCESSTOLUT* BSRLVL190*ESTABLISHFOLLOWING*D7=ADDRESSLUT*D6=ADDRESSLUNINLUT*D5=ADDRESSDCB BEQ.SLVL004*JMPIFREQUESTSUCCESSFUL BMIERCLUN)*JMPIFLUTDOESN'TEXISTORINVALIDLUN BRAERCASG*JMP-LUNNOTASSIGNEDLVL004:*VALIDATEFUNCTION/OPTIONS*#BSRAPDCHKCHECKACCESSPERMISSIONO*.............................................................................. OR.LD3,D4 BEQERCKOD *JMPIFACCESSPERMISSIONERRORO*..............................................................................TST.LD0TESTRETURNBNEERCKODERRORBSRATDCHKCHECKATTRIBUTESTST.LD0TESTRETURNBEQ.SLVL005OK!BMIERCDFEDEVICEFUNCTIONERRORBRAERCKODFUNCTIONERROR**DECODEFUNCTION*LVL005:LEALVL0EX(PC),A0#*A0=ADDRESSLEVEL0EXECUTORTABLEBRALDF_COMNCONTINUE(*GOEXECUTECOMMONLOGICTODECODETHIS*I/OFUNCTIONPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** DXFER*IF2*Thedatatransferdeviceassignmentistoafile*THEN*BranchtoDXF10*IF-*Thedatatransferdeviceisthenulldevice*THEN*BranchtoIODONE*IF*Thisisanupdatefunction*THEN*BranchtoERCKOD* DXF10*IF>*Thedatatransferendaddressislessthanthedatatransfer*startaddressor(*Thedatatransferstartaddressisodd*THEN*BranchtoERCBUF*IF?*Thedatatransferrequestissomethingotherthanoutputwith*input*THEN*BranchtoDXF35*IF?*Theinputaddresspartoftheoutputwithinputrequestmeets*anyofthefollowing"*Lessthanorequalstartaddress*Odd*THEN*BranchtoERCBUF*IF;*Theinputlengthpartoftheoutputwithinputrequestis*lessthanorequaltozero*THEN*BranchtoERCBUF* DXF35*IF#*TheLUNassignmentistoadevice*THEN*BranchtoDXF37*ELSE*LocktheFCBresourcelist*IF)*Thefilerequestedisnotinuse(busy)*THEN*BranchtoSNDFMS*ELSE*BranchtoDXF50* DXF37*LocktheDCBlistresource*IF*Thedeviceisoffline*THEN*BranchtoERCDEV*IF*Thedevicestatushaschanged*THEN*BranchtoERCDSC*IF%*Thisisnotadatatransferrequest*(Changedeviceconfiguration)(*(Requestcurrentdeviceconfiguration)*THEN*BranchtoDXF39*IF*Thisisareadrequest*THEN*BranchtoDXF39*IF2*Wearetryingtowritetoawriteprotecteddisk*THEN*BranchtoERCWP* DXF39*IF6*Wearetryingtoinitiatearequesttoabusydevice*THEN*BranchtoDXF50*Else"*Setthedevicetothebusystate7*EstablishthatI/OispendingforthisLUNintheLUT!*SavetheLUTaddressintheDCB**Savetherequestor'spriorityintheDCB.*Savetherequestor'sIOCBaddressintheDCBA*ViathesubroutineMOVEPB,movetherequestor'sparameterblock *totheDCB*IF1*TheI/Orequestisnotfro! mataskleveldriver*THEN*BranchtoDXF70*ELSEB*ViathesubroutineQEVT,queueaneventtothetaskleveldriver*IF1*Theeventwasqueuedtothedriversuccessfully*THEN*BranchtoDXF45*ELSE;*PerformfollowinghousekeepingtoremovefactthatanI/O*requestwasrequested*(Removedevicebusystatus*RemoveLUTaddressfromDCB *Cleartherequestor'spriority8*RemovetheI/OpendingstatusfromtheLUNintheLUT)*ReleasetheDCBlistresource*BranchtoERCFMS* DXF45*ReleasetheDCBlistresource*IF*Thisisalevel40command*THEN*BranchtoDXF48*IF%*Thisisnotadatatransferrequest*(Changedeviceconfiguration)(*(Requestcurrentdeviceconfiguration)*THEN*BranchtoSTARQS* DXF48*IF!*TherequestisanI/Owithwait*THEN*BranchtoSTARQS*ELSE*ReleasetheLUTlistresource*BranchtoOKST20* DXF50*IF%*Thisisnotadatatransferrequest*(Changedeviceconfiguration)(*(Requestcurrentdeviceconfiguration)*THEN*BranchtoERCB10*IF>*Therequestordoesnotwanttowaitforthedevicetobecome *available*THEN*BranchtoERCBSY*ELSE*LocktheDCQlistresource>*ViathesubroutineQUEDCQ,placetherequestinthewaitque*ReleasetheDCQlistresource*IF=*WewereunsuccessfulinplacingtheI/Orequestinthewait*que*THEN*BranchtoERCBSY*ELSE&*SetflagI/Opendingforthisdevice&*SetflagI/Opendinginthewaitque*IF*Therequestisforafile*THEN*BranchtoDXF60*ELSE*ReleasetheDCBlistresource*BranchtoSTARQS* DFX60*ReleasetheFCBlistresource*BranchtoSTARQS* DFX70;*InitializetheparameterblockforainitiateI/Orequest'*(Setchannelmnemonicforthisdevice6*SettasknameandsessionnumberoriginatingtheI/O *request'*SetaddressofDCBI/Orequestisfor9*SetlengthofI/Oparameterblockfromtaskoriginating*therequest)@*ViathesubroutineHK_TIMER,initiateatimerforthisrequest* DFX80*InitiatetheI/Orequest*IF*TheI/Owasaccepted*THEN*BranchtoDXF45*IF*Thechannelisbusy*THEN*BranchtoDXF80*ELSE0*Bringsystemdowninanorderlymanner(KILIT)*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE**DATATRANSFEREXECUTOR**REV.1.007/01/79(JIMSMITH)*)*THISISTHEDATATRANSFEREXECUTOR.THE1*APPROPRIATEDRIVERISSCHEDULEDFORINITIATION.*****!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567*D***PPP*A***PPPP****8DXFERMOVE.BLUTCSF(A6,D6.L),D1D1=CURRENTSTATUSOFLUN$BTST#LUSFDV,D1DEVICEASSIGNMENT?BEQ.SDXF10NO$*JMPIFLUNASSIGNMENTISTOAFILE5CMP.B#255,DCBFLG(A6,D5.L)ISTHISTHENULLDEVICE?%BEQIODONEYES,GORETURNLIKEANOP+CMP.W#IOUPDR,IOSFCT(A5)UPDATEFUNCTION?BEQERCKODYES,ERROR**VALIDATEBUFFERADDRESSES*2DXF10MOVE.LIOSEAD(A5),D1D1=STARTBUFFERADDRESS"CMP.LIOSSAD(A5),D1RANGEVALID?BLTERCBUFNO,ERROR$*JMPIFENDADDRESS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> BSRX01000*EDITFOROLD/NEWI/OSCHEME BEQDXF70*JMPIFNEWI/OSCHEMEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"BSRQEVTGOQUEUEEVENTTODRIVERTST.BD0WASTHEREANYERRORBEQ.SDXF45NO*JMPIFEVENTQUEUEDTODRIVER**UNABLETOQUEEVENTTODRIVER*WILLCLEANUPFLAGS,ETC*THATWERESETTOINITIATEI/O*CLR.WDCBTMO(A6,D5.L)YES-UNDOEVERYTHING*REMOVEDEVICEBUSYFLAG(CLR.LDCBLUT(A6,D5.L)CLEARLUTADDRESS,*REMOVEPOINTERTOLOGICALUNITTABLE(LUT)%CLR.BDCBPRI(A6,D5.L)CLEARPRIORITY*REMOVEPRIORITYFLAG-MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUS"BCLR#LUSFIO,D1CLEARI/OPENDING,MOVE.BD1,LUTCSF(A6,D6.L)UPDATELUNSTATUS&*REMOVEI/OPENDINGFLAGFORTHISLUN BSRDCBSIG*RELEASETHEDCBLISTBRAERCFMSINTERNALERRORDXF45: BSRDCBSIG*RELEASETHEDCBLIST:CMP.B#$40,IOSFCT(A5)ISTHISALEVEL40COMMAND?LEVEL405BEQ.SDXF48BR=YES,ALLOWPROCEEDMODEI/OLEVEL40*TST.BIOSFCT(A5) BNESTARQS$*JMPIFNOTADATATRANSFERREQUEST!*CHANGETHEDEVICECONFIGURATION)*REQUSTTHECURRENTDEVICECONFIGURATIONDXF48:MOVE.WIOSOPT(A5),D1LEVEL40AND.W#IOPPRO,D1*D1=ISOLATEDI/OOPTIONS BEQSTARQS'*JMPIFREQUESTINGTASKISWAITINGFOR*I/OCOMPLETIONDXF49: BSRLUTSIG*RELEASELUTLIST BRAOKST20*ACKNOWLEDGEREQUEST**DEVICE/FILEBUSY*DXF50:TST.BIOSFCT(A5) BNEERCB10$*JMPIFNOTADATATRANSFERREQUEST!*CHANGETHEDEVICECONFIGURATION)*REQUSTTHECURRENTDEVICECONFIGURATIONMOVE.WIOSOPT(A5),D1%*D1=USERREQUESTOPTIONSFROMI/OPB1AND.W#1<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* * HK_TIMER*IF-*TheI/Orequestisconfigurationrelatedor:*ThedeviceforwhichtheI/Oisintendedinnothaltable*THEN*BranchtoHKT_0100*IF8*ThedeviceforwhichtheI/Oisintendedisotherthan *interactive*THEN*BranchtoHKT_005*ELSE*InitializetheBREAKcounter * HKT_0053*Forcethetimeoutvaluetobeforareadrequest*IF.*Therequestisforatransmitbreakfunction*THEN*BranchtoHKT_0010*IF)*Therequestisnotforawritefunction*THEN*BranchtoHKT_0050 * HKT_00101*Setthetimeoutvaluetobeforawriterequest * HKT_0050*IF8*Thereisnotimeoutvalueassociatedwiththisrequest*THEN*BranchtoHKT_0100*ELSE8*ViathesubroutineR_TIMER,initiatethetimerrequest * HKT_0100'*Housekeepforthenexttimerrequest*Returntothecaller*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE****ROUTINETO*****SETTIMEOUTVALUE*******REQUESTTIMER*******UNLESS***%**DEVICEISANON-HALTALBEDEVICE**-*REQUESTISACHANGECONFIGURATIONREQUEST*:**REQUESTISAOBTAINCONFIGURATIONINFORMATION/STATUS**2***REQUESTISACHANGEDEFAULTCONFIGURATIONS***$****THEREISNOTIMEOUTVALUE**************** *INPUT* *A6=ZERO***D5=DCBADDRESS**.***A5=ADDRESSREQUESTOR'SIOCBINTHEDCB*** ******************** HK_TIMER:CMP.W#IOCNFG,IOSFCT(A5)BEQ.SHKT_0100CMP.W#IOSTAT,IOSFCT(A5)BEQ.SHKT_0100CMP.W#IOCHDC,IOSFCT(A5)BEQ.SHKT_0100*JMPIFONEOFFOLLOWING*CHANGECONFIGURATIONREQUEST#*REQUESTCONFIGURATIONINFO/STATUS*CHANGEDEFAULTCONFIGURATIONO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTSTW#DATHIO,DCBATT(A6,D5.L)BTSTMDATHIO,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BEQ.SHKT_0100*JMPIFANON-HALTABLEDEVICEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTSTW#DATIND,DCBATT(A6,D5.L)BTSTMDATIND,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BEQ.SHKT_005)*JMPIFOTHERTHANANINTERACTIVEDEVICECLR.BDCBBCT(A6,D5.L)*INITIALIZEBREAKCOUNTHKT_005:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/7/83!*MOVE.LDCBTMR(A6,D5.L),TIMVALLD MOVE.LD5,A6MOVE.LDCBTMR(A6),TIMVALLD(A2) SUB.LA6,A6 *BKM7/7/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*TIMVALLD=READTIMEOUTVALUE *FORCEAREADTIMEOUTVALUEFOR*READFUNCTION*WRITEWITHREADFUNCTIONCMP.W#IOTBRK,IOSFCT(A5)BEQ.SHKT_0010 *JMPIFTRANSMITBREAKFUNCTIONCMP.W#IOWRIT,IOSFCT(A5)BNE.SHKT_0050"*JMPIFNOTAWRITEONLYFUNCTION HKT_0010:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/7/83!*MOVE.LDCBTMW(A6,D5.L),TIMVALLD MOVE.LD5,A6MOVE.LDCBTMW(A6),TIMVALLD(A2) SUB.L# A6,A6 *BKM7/7/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*TIMVALLD=WRITETIMEOUTVALUE HKT_0050:TST.LTIMVALLD(A2)BEQ.SHKT_0100.*JMPIFNOTIMEOUTVALUEASSOCIATEDWITHRQST BSRR_TIMER*INITIATEATIMERREQUEST HKT_0100:CLR.LTIMVALLD(A2)*INITIALIZEFORNEXTREQUESTRTSPAGE***ENTRY*A4=ADDRASQMSGEVENT*A5=ADDRESSIOCBINEVENT *A6=ZERO*A7=STACKADDRESS*D5=ADDRESSDCBPROCESSING!*D6=ADDRESSLUNENTRYINTHELUT*D7=ADDRESSLUT*M*----------------------------------------------------------------------------****************TRANSMITBREAKLOGIC**************** TX_BREAK: BRAUDVC_CFGPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** QEVT6*Establishthefollowingintheeventparameterblock*Eventsub-code*DrivertaskID *DCBaddress* QEV10*Sendtheeventtothedriver*IF!*Theeventwassentsuccessfully*THEN*BranchtoQEV40*IF*TheASQisdisabled*THEN*BranchtoQEV20*IF"*TheerrorisotherthanASQfull*THEN*BranchtoQEV30*ELSE* QEV20*Delayforawhile*THEN*BranchtoQEV10* QEV30&*Establisherrorconditionforreturn* QEV40*Returntocaller*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<* *ROUTINETO+*OBTAINTASKIDFORFORTASKLEVELDRIVERS**INPUT!*A2=ADDRESSOFIOSDATABUFFER *A6=ZERO* *D5=ADDRESSOFDCBPROCESSING*6*QEVDRV+QEVTSK=FIRSTHALFOFTASKID(TCBADDRESS)8*QEVDRV+QEVSES=SECONDHALFOFTASKID(PROCESSORID)**REGISTERALTERATION**A0=DESTROYED*D0=DESTROYED**A0=FIRSTHALF* DRVTSKID:MOVE.LA1,-(A7)*SAVEREGISTERLEAGPBUFR(A2),A0MOVE.LDCBDID(A6,D5.L),A1MOVE.L#IOSESS,D0.*ESTABLISHPARAMETERSFORGETTASKIDROUTINE"*A0=GETTASKIDPARAMETERBLOCK*A1=TASKNAME*D0=TASKSESSIONNUMBER BSRGETTSKID*OBTAINDRIVERTASKID BSRNEKILIT1*BRINGSYSTEMDOWNIFTHISDRIVERDOESNOTEXISTMOVE.LA0,QEVDRV+QEVTSK(A2)MOVE.LA1,QEVDRV+QEVSES(A2)*SETRESPECTIVELY *TASKNAME*PROCESSORID*MOVE.L(A7)+,A1*RESTOREREGISTERRTS*RETURNTOCALLER  ***QUEUEEVENTTODRIVER**INPUT!*D5=ADDROFTHEDCBFORTHISLUN QEVT:EQU**MOVE.B#DRVEVT,SUBEVC(A2)SETUPSUB-CODE)MOVE.LD5,DCBADDR(A2)SETUPDCBADDRESSO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*@*MOVE.LDCBDID(A6,D5.L),QEVDRV+QEVTSK(A2)SETUPDRIVERTASKID*BSR.SDRVTSKID*OBTAINDRIVERID*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<QEV10:LEAQEVDRV(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#QEVNT,D0*D0=DIRECTIVENUMBERTRAP#1*QUEEVENTTODRIVERBEQ.SQEV40OK"CMP.B#RTCDENAB,D0ASQDISABLED?BEQ.SQEV20YESCMP.B#RTCDTFUL,D0ASQFULL?BNE.SQEV30NOQEV20ERQ.DELAY#100DELAYBRA.SQEV10TRYAGAINQEV30MOVE.L#1,D0SETERROR *CONDITIONS *ASQENABLED*ASQNOTFULL*ERRORSTILLEXISTS** QEV40RTSPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** MOVEPB*Saveregisters5*InitializetheparameterblockcontainedintheDCB*IF<*Theparameterblocksizeissmallerthanthestandardsize*THEN*BranchtoMOVE05*ELSE-*Establishthestandardparameterblocksize* MOVE05"*Establishtheaddresstomoveto%*MovetheparameterblocktotheDCB*Restoreregisters*Returntocaller*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<***MOVEPARAMETERBLOCKROUTINE.*THISMOVEISFROMTHEIOSWORKAREA(IOCBLK) *TOTHEDCB**INPUT"*A5=ADDRESSOFREQUESTINGTASKPB**MOVEPB:)MOVEM.LA5-A6,-(A7)SAVETHESEREGISTERS4C# LR.BIOCBLK+IOSSTA(A2)CLEARSTATUSINIOCBOFDCB3MOVE.BEVUPSZ(A4),D1GETPARBLOCKSIZEFROMEVENT*CMP.B#IOSBLN,D1STANDARDPARBLOCKSIZE?BMI.SMOVE05NO-SMALLER&*JMPIFPBSIZESMALLERTHANSTANDARD.MOVE.L#IOSBLN,D1YESSTANDARDSIZEPARBLOCK*D1=STANDARDPBSIZE MOVE05EQU*MOVE.LD5,A6GETDCBADDR-ADD.L#DCBIOS,A6ADDOFFSETTOIOCBLOCATION*A6=ADDRESSMOVETO MOVE10EQU*MOVE.B(A5)+,(A6)+MOVEABYTESUB.B#1,D1DECREMENTCOUNT!BNE.SMOVE10CONTINUEUNTILDONE*MOVETHEPARAMETERBLOCK&MOVEM.L(A7)+,A5-A6RESTOREREGISTERS RTSRETURNPAGE*DELETERECORDEXECUTOR* *REV.1.0010/15/79(JIMSMITH)*3*THISISAFILEMANAGEMENTDELETERECORDEXECUTOR.)*THEFILEMANAGEMENTSYSTERISNOTIFIED.***!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**PPP*A**PPPP****DELREC:BTST#LUSFDV,LUTCSF(A6,D6.L) BNEERCKOD"*JMPIFDEVICEASSIGNMENT(ERROR)BSRFCBWAITLOCKFCBLISTBRASNDFMSNO,GOTELLFMSPAGE**FORMATDISKEXECUTOR* *REV.1.0002/01/80(JIMSMITH)* *THISISAFORMATDISKROUTINE.***!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**PPP*A**PPPP****'FORMATBRADXF35USEDATATRANSFERCODEPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** LVL1CD*IF"*Thereisaparameterblockerror*THEN*BranchtoERCPRM*IF%*Thereisareservedfieldviolation*THEN*BranchtoERCCOD4*Viathesubroutine,LVL190establishthefollowing*LUTaddress[RegD7]*LUNaddress[RegD6]*DCBaddress[RegD5]*IF#*Sub-routineLVL190wassuccessful*THEN*BranchtoLVL100*IF$*TherewasnoLUTforthedeviceor*TheLUNwasinvalid*THEN*BranchtoERCLUN*ELSE*BranchtoERCASG* LVL1007*Validateaccesspermission,viathesubroutineAPDCHK*IF%*Thereisanaccesspermissionerror*THEN*BranchtoERCKOD@*Validatethedevice/fileattributes,viathesubroutineATDCHK*IF$*Theattributesvalidationwasgood*THEN*BranchtoLVL105*IF#*Therewasadevicefunctionerror*THEN*BranchtoERCDFE*ELSE*BranchtoERCKOD** LVL105>*EstablishtheaddressoftheLevelExecutortableprocessing *[RegA0]*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE**LEVELONEFUNCTIONHANDLER**REV.1.007/01/79(JIMSMITH)*2*THISROUTINEWILLSCANTHEFUNCTIONFIELDOFTHE1*REQUESTOR'SIOCBFROMRIGHTTOLEFTANDMAPTHE/*BITPOSITIONTOAFUNCTIONEXECUTORFORLEVEL*ONEFUNCTIONS.**!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**USING:01234567*D*****RRR*A***PPPP***PARAMETERBLOCKEDIT**.LVL1CDCMP.B#IOSBLN,EVUPSZ(A4)PCLENGTHOK?BLTERCPRMNO,ERROR%*JMPIFPARAMETERBLOCKLENGTHERROR)TST.WIOSLUN+1(A5)RESERVEDFIELDZERO?BNEERCCODNO,ERROR*JMPIFRESERVEFIELDERROR BSR.SLVL190 *ESTABLISH *LUTADDRESS*LUNADDRESSINLUT *DCBADDRESS BEQ.SLVL100*JMPIFSUCCESSFUL BMIERCLUN*JMPIFNOLUTORINVALIDLUN BRAERCASG*JMP--LUNNOTASSIGNEDLVL100:**VALIDATEFUNCTION/OPTIONS*O*------------------------------------------------------------------------------*-----G*-----THEFOLLOWINGINSTRUCTIONSHAVEBEENREMOVEDASTHISCALLISNOTJ*-----REQUIREDFORLEVEL1FUNCTIONBECAUSETHEREISNOACCESSPERMISSION*-----ASSOCIATEDWITHTHEM*-----*-----)*-----BSRAPDCHKCHEC$ KACCESSPERMISSION*-----TST.LD0TESTRETURN*-----BNEERCKODERROR*-----O*------------------------------------------------------------------------------BSRATDCHKCHECKATTRIBUTESTST.LD0TESTRETURNBEQ.SLVL105OK!BMIERCDFEDEVICEFUNCTIONERRORBRAERCKODFUNCTIONERROR**DECODEFUNCTION*LVL105:LEALVL1EX(PC),A0&*A0=ADDRESSOFLEVEL1EXECUTORTABLECMP.B#2,IOSFCT(A5)BNE.SLDF_COMN**JMPIFPROCESSINGLEVEL1EXECUTORTABLELEALVL2EX(PC),A0&*A0=ADDRESSOFLEVEL2EXECUTORTABLEPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* * LDF_COMN8*Establishbitnumbertostartprocessingwith[RegD0]7*IsolatetheFunctionCommandCodefortheI/Orequest* LVL110*IF**Thisbitofthefunctioncodeisnotset*THEN*BranchtoLVL120*IF9*MorethanonefunctionselectedforthisI/Orequestor.*IfthisisnotavalidFunctionCommandCode*THEN*BranchtoERCKOD*ELSE6*JumptodesiredFunctionCodesoitcanbeperformed* LVL1206*Adjusttothenexttableentryintheexecutortable(*Adjusttothenextbittobeprocessed*IF=*ThemaximumnumberofFunctionsCodespermittedisexceeded*THEN*BranchtoERCKOD*ELSE*BranchtoLVL110*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE*/*COMMONLOGICTODECODETHEI/OLEVELFUNCTION* LDF_COMN: CLR.LD1*D1=BITNUMBERPROCESSINGMOVE.WIOSFCT(A5),D2AND.W#$FF,D2*D2=ISOLATEDCOMMANDCODELVL110BCLRD1,D2 BEQ.SLVL120!*JMPIFBITNOTSET(EQUALZERO) TST.WD2 BNEERCKOD(*JMPIFMORETHANONEFUNCTIONSELECTED TST.L(A0) BEQERCKOD$*JMPIFTHISISANINVALIDFUNCTIONMOVE.L(A0),A0 JMP(A0)3*JMPTOTHEDESIREDFUNCTIONSOITCANBEEXECUTEDLVL120TST.L(A0)+*ADJUSTTONEXTTABLEENTRY ADD.B#1,D1*ADJUSTTONEXTBITTOEXAMINE CMP.B#8,D1 BEQERCKOD0*JMPIFMAXNBROFFUNCTIONSPERMITTEDEXCEEDED BRA.SLVL110*HEREWEGOLOOPDELOOPPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** LVL190*LocktheLUTresourcelist* LVL192,*Establishaddressoftaskmakingtask(A0)A*Viathesubroutine,LUTLKestablishtheaddressoftheLUT(D7)*IF)*ThereisnoLUTfortherequestingtask*THEN*BranchtoLVL194*ELSE(*EstablishtheLUNforthisI/OrequestC*Viathesusbroutine,LUNLKfindtheLUNentryandtheDCBaddress*IF*TheLUNisinvalid*THEN*BranchtoLVL194*IF*TheLUNisnotassigned*THEN*BranchtoLVL196*ELSE4*Establishconditionscodesforasuccessfulreturn*Returntothecaller* LVL194+*Establishreturnforoneofthefollowing*NoLUT *InvalidLUN*THEN*Returntothecaller* LVL196'*EstablishreturnforLUNnotassigned*Returntothecaller*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE****ROUTINETO*****ESTABLISHLUTADDRESS********ESTABLISHLUNADDRESSINTHELUT*******ESTABLISHDCBADDRESS******* *INPUT**A4=ADDRESSEVENTREAD********OUTPUT*******D5=ADDRESSDCB****!***D6=ADDRESSLUNINTHELUT*****D7=ADDRESSLUT********RETURNCONDITIONS********3****ZERO-->SUCCESSFULCOMPLETIONOFREQUEST****5***NEGATIVE-->LUTTABLEDOESN'TEXISTFORTASK*****INVALIDLUN**!*POSITIVE-->LUNNOTASSIGNED*******%***ENTRYPOINTSFORTHISROUTINE*******LVL190*******LVL192*********LVL190: BSRLUTWAIT*LOCKTHELUTLISTLVL192:LEAEVUTSK(A4),A0%*A0=ADDRESSTASKNAMEMAKINGREQUEST BSRLUTLK*FINDTHELUTADDRESS(D7) BNE.SLVL194#*JMPIFNOLUTFORREQUESTINGTASK CLR.LD1MOVE.BIOSLUN(A5),D1*D1=LUNFORTHISREQUEST BSRLUNLK$*FINDTHELUNENTRYANDDCBADDRESS TST.LD0 BMI.SLVL194*JMPIFINVALIDLUN BEQ.SLVL196*JMPIFLUNNOTASSIGNED CLR.LD0*ESTABLISHSUCCESSFULR$ ETURNRTS*RETURNLVL194:MOVE.L#-1,D0 *SETERROR*NOLUT *INVALIDLUNRTS*LVL196: MOVE.L#1,D0 *SETFLAG*LUNNOTASSIGNEDRTSPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** POST*IF*Wehaveadeviceassignment*THEN*BranchtoPOST20*ELSE1*LocktheFileControlBlock(FCB)listresource*BranchtoSNDFMS* POST20*LocktheDCBlistresource"*EstablishthecurrentDCBstatus*IF5*Therewind/positionfunctionisfortheNULLdevice*THEN*BranchtoPOST60*IF*Thedeviceisoffline*THEN*BranchktoERCDEV*IF*Thedeviceisisbusyor+*ThedevicehasaI/Orequestqueuedtoit*THEN*BranchtoERCBSY*IF)*TheI/OrequestisnotaREWINDrequest*THEN*BranchtoPOST30*ELSE(*Setthecurrentrecordpointertozero*BranchtoDXF39* POST30*IF2*TheI/OrequestisotherthanaPOSITIONrequest*THEN*BranchtoERCEOM*IF0*ThePOSITIONrequestisforthecurrentrecord*THEN*BranchtoPOST60*IF5*ThePOSITIONrequestisotherthananrandomrecord*THEN*BranchtoPOST40*IF)*Therandomrecordnumberisnegativeor:*Therandomrecordnumberisgreaterthanmaximumallowed*THEN*BranchtoERCRRN*ELSE;*Setthecurrentrecordnumbertotherandomrecordnumber *selected*BranchtoPOST60* POST40*IF;*ThePOSITIONrequestisotherthanbackuptopriorrecord*THEN*BranchtoPOST50*ELSEA*Adjustthecurrentrecordnumbertoonelessthancurrentvalue*IFC*Theadjustmentcausedthenewcurrentrecordvaluetogonegative*THEN*BranchtoERCEOM*ELSE/*SavethenewcurrentrecordnumberintheDCB*BranchtoPOST60* POST50*IF>*ThePOSITIONrequestisotherthantothenextrandomrecord*number*THEN*BranchtoERCFNT*ELSEA*Adjustthecurrentrecordnumbertoonemorethancurrentvalue*IF>*Theadjustmentcausedthenewcurrentreocrdvaluetoexceed*themaximumallowed*THEN*BranchtoERCEOM*ELSE/*SavethenewcurrentrecordnumberintheDCB* POST60*ReleasetheDCBlistresource*BranchtoOKSTAT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE**POSITIONPOINTEREXECUTOR**REV.1.008/1/79(JIMSMITH)**THISROUTINEWILLPOSITIONA *FILE/DEVICECURRENTPOINTER.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567*D***PPP*A***PPPP****POST:BTST#LUSFDV,LUTCSF(A6,D6.L) BNE.SPOST20*JMPIFDEVICEASSIGNMENT BSRFCBWAIT*LOCKTHEFCBLIST BRASNDFMS*GOTELLFMSALLABOUTITPOST20BSRDCBWAIT*LOCKTHEDCBLISTMOVE.WDCBFLG(A6,D5.L),D1*D1=CURRENTDCBSTATUSCMP.B#255,DCBFLG(A6,D5.L) BEQPOST60!*JMPIFREWIND/POSITIONFUNCTION*ISFORTHENULLDEVICEBTST#DFLGON,D1 BEQERCDEV*JMPIFDEVICEOFFLINETST.WDCBTMO(A6,D5.L) BNEERCBSY*JMPIFDEVICEBUSYTST.LDCBDCQ(A6,D5.L) BNEERCBSY**JMPIFDEVICEHASSOMETHINGQUEUEDTOITMOVE.WIOSFCT(A5),D0!*D0=REQUESTINGTASKCMD/FUNCTIONCMP.W#IOREWD,D0 BNE.SPOST30#*JMPIFOTHERTHANREWINDFUNCTIONCLR.LDCBCRN(A6,D5.L)"*SETCURRENTRECDPOINTERTOZEROO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM9/13/83*BRA.SPOST60 BRADXF39'*SENDTHEREWINDREQUESTTOTHEDRIVER*TAPEDRIVERNEEDSIT *BKM9/13/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*POST30CMP.W#IOPOST,D0 BNEERCEOM%*JMPIFOTHERTHANPOSITIONFUNCTIONMOVE.WIOSOPT(A5),D0AND.W#IOPPOS,D0(*D0=POSITIONCODEISOLATEDFROMOPTIONSCMP.W#IOPCUR,D0 BEQ.SPOST60#*JMPIFPOSITIONTOCURRENTRECORDCMP.W#IOPRAN,D0 BNE.SPOST40**JMPIFOTHERTHANRANDOMRECORDPOSITIONMOV% E.LIOSRRN(A5),D1*D1=RANDOMRECORDNUMBER(RRN) BMIERCRRNO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/7/83 MOVE.LD5,A6MOVE.LDCBSEC(A6),D0 SUB.LA6,A6 CMP.LD0,D1*CMP.LDCBSEC(A6,D5.L),D1 *BKM7/7/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< BGTERCRRN!*JMPIFTHERANDOMRECORDNUMBER *ISNEGATIVE*GREATERTHANMAXALLOWEDMOVE.LD1,DCBCRN(A6,D5.L)*D1=CURRENTRRN BRA.SPOST60*POST40CMP.W#IOPPRV,D0 BNE.SPOST50-*JMPIFOTHERTHANBACKSPACERECORDPOSITION**BACKSPACETOPRIORRECORD* MOVE.LDCBCRN(A6,D5.L),D1*D1=CURRENTRRN SUB.L#1,D1*D1=PRIORRRN BMIERCEOM*JMPIFRRNWENTNEGATIVEMOVE.LD1,DCBCRN(A6,D5.L)*D1=CURRENTRRN BRA.SPOST60*!*POSITIONTONEXTCURRENTRECORD*POST50CMP.W#IOPNXT,D0 BNEERCFNT(*JMPIFOTHERTHANPOSITIONTONEXTRRNMOVE.LDCBCRN(A6,D5.L),D1 ADD.L#1,D1 *D1=NEXTRRNO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/7/83 MOVE.LD5,A6MOVE.LDCBSEC(A6),D0 SUB.LA6,A6 CMP.LD0,D1*CMP.LDCBSEC(A6,D5.L),D1 *BKM7/7/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< BGTERCEOM%*JMPIFNEXTRRNEXCEEDSMAXALLOWEDMOVE.LD1,DCBCRN(A6,D5.L)*UPDATEDCBWITHNEXTRRNPOST60BSRDCBSIG*RELEASETHEDCBLIST BRAOKSTAT*GO-GO-GO-G0PAGE**TESTIOCOMPLETEEXECUTOR* *REV.1.0001/15/80(JIMSMITH)**THISROUTINEWILLCHECKFOR%*COMPLETIONOFIOONASPECIFIEDLU.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**PPP*A***PPPP****TESTIO:BTST#LUSFIO,LUTCSF(A6,D6.L) BEQOKSTAT*JMPIFNOI/OPENDINGFORLUNBSRLUTSIGRELEASELUTLOCKBRASETCNDYES,CLEARZ-BITPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** WAITIO*IF&*ThereisnoI/OpendingforthisLUN*THEN*BranchtoOKSTAT*IF$*TheLUNassignmentisforadevice*THEN*BranchtoWAIT05*ELSE*LocktheFCBlistresource*BranchtoSNDFMS* WAIT05*LocktheDCBlistresource*IF*TheDCBiscurrentlyinuse*THEN*BranchtoWAIT10*ELSE*ReleasetheDCBlistresource*BranchtoOKSTAT* WAIT108*AdjusttheoriginalI/OandproceedtoanI/Oandwait*ReleasetheDCBlistresource*BranchtoSTARQS*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE**WAITONLYIOEXECUTOR* *REV.1.0001/15/80(JIMSMITH)*)*THISROUTINEWILLPUTAREQUESTINGTASK*INTOAWAITSTATEFORIO.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**PPP*A***PPPP****WAITIO:BTST#LUSFIO,LUTCSF(A6,D6.L) BEQOKSTAT*JMPIFNOI/OPENDINGFORLUNBTST#LUSFDV,LUTCSF(A6,D6.L)&BNE.SWAIT05JMPIFDEVICEASSIGNMENT%*JMPIFLUNASSIGNMENTISFORDEVICEBSRFCBWAITLOCKFCBLISTBRASNDFMSNO,TELLFMS%WAIT05BSRDCBWAITYES,LOCKDCBLIST!TST.WDCBTMO(A6,D5.L)DCBACTIVEBNE.SWAIT10YES!*JMPIFDEVICEACTIVE-ASSIGNED BSRDCBSIGNO,RELEASEDCBLIST BRAOKSTAT:WAIT10LEADCBIOS(A6,D5.L),A1SETPOINTERTOORIGINALIOCB+EOR.W#IOPPRO,IOSOPT(A1)CLEARPROCEEDBITBSRDCBSIGRELEASEDCBLOCKBRASTARQSNOW,ENABLEEVENTSPAGE***HALTIOEXECUTORUSERREQUESTEDHALTI/O* *REV.1.0001/15/80(JIMSMITH)*)*THISROUTINEWILLSCHEDULEADRIVERFOR*TERMINATIONOFIO.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME% **USING:01234567 *D**PPP*A***PPPP***PAGE*{**COMPLETIONEVENTFORMAT*>*Theformatofthecompletioneventasqueuedfromthedriver *toIOS.*,*------------------------------------------*00|EventLength($0A)|Eventcode(01)|,*-----------------------------------------!*02|EventType|ChannelKey|,*-----------------------------------------*04|UserId|UserId|,*-----------------------------------------*|UserId|UserId|,*-----------------------------------------$*08|StatusValue|StatusValue|,*-----------------------------------------* *EventType*$70NormalCompletion*$71HaltCompletion* *UserId*NormallytheDCBaddress**StatusValue*NormalCompletion*Successful$0000%*UnsuccessfulAppropriateerrorcode**HaltCompletion*Successful$00E6*Unsuccessful$0082*"*HALTI/Orequestscancomefrom: *a.Theuser*b.IOS*?*UserrequestresultswhenapreviousI/OrequestwithproceedF*hasbeenissuedanduponreturntotherequestingtaskadecisionis*madetoterminatetheI/O.*3*IOSrequestsoccurunderthefollowingconditons:=*a.Atimeout,forapreviouslyinitiatedI/O,hasoccurred.8*b.DuringEndOfTask(EOT)terminationanoutstanding*I/Omustbeterminated.*E*ItshouldbenotedthattheconditoncodesreturnedwhenaHALTI/OG*isrequestedareunpredictable.ItissuggestedthattheusermonitorF*thestatusoftheHALTI/Ocommandfunctionparameterblockinstead.G*ThefollowingpsuedocoderepresentsaroutinethatissuesaHALTI/O>*requestanddoesnotreturnuntiltheI/OishaltedoritisH*recognizedthatthereisnoI/Otohalt.Theconditioncodesreflected:*bytheroutinewillreflectiftheI/Oishaltedornot.*C*Pre-setthestatusbyteintheHALTI/Oparameterblockwith$FF.(*IssuetheTRAP2calltohalttheI/O.**WHILE3*StatusbyteofHALTI/Oparameterblockequal$FF!*WAIT(useRELINQUISHdirective)*ENDW**IF>*StatusbyteofHALTI/OparameterblockiszerothentheI/O *washalted.*=*Inadditiontotheabovetherewillbean$E6inthestatusA*byteofthedatatransferparameterblockandaI/Otermination+*eventintherequestor'sASQ,ifenabled.**Returntocaller**ELSE**TherewasnoI/Otohalt.**Therewillbe<*An$82inthestatusbyteoftheHALTI/Oparameterblock.=*AnI/Ocompletioneventintherequestor'sASQ,ifenabled.;*Thestatusbyteofthedatatransferparameterblockwill+*reflectthestatusoftheI/Ocompletion.*Return**ENDIF***B*Therearethree(3)basiccasesthatIOSmustbeabletohandle:*'*1.IOSthinksthereisanI/Otohalt*and,*ThedriverthinksthereisanI/Otohalt.*@*InthiscaseIOSwillreceiveaHALTcompletioneventtype$71*andastatusvalueof$00E6.**B*ThestatusbyteoftheHALTI/Oparameterblockcontainsazero.D*Thestatusbyteofthedatatransferparameterblockcontains$E6.A*AnI/Oterminationeventisintherequestor'sASQ,ifenabled.*B*Thestatusbytesareupdatedbythedriverandtheeventissent *byIOS.**,*------------------------------------------*00|EventLength($06)|Eventcode(02)|,*-----------------------------------------0*02|Addressofdatatx|I/Oparameterblck|,*------------------------------------------*|Addressofdatatx|I/Oparameterblck|,*-----------------------------------------**/*2.IOSdoesnotthinkthereisanI/Otohalt*?*InthiscaseIOSwillnottalktothedriverbutinsteadwill@*returnanerrorconditonstatusof$82intheuser'sparameter%*blockviaamovelogicaldirective.**'*3.IOSthinksthereisanI/Otohalt*and4*ThedriverdoesnotthinkthereisanI/Otohalt.*B*Thebasiccauseoft& hisproblemis'TIMING'.ThedriverhassentB*anormalcompletiontoIOSanditcurrentlyisintheASQofIOS*buthasnotbeenprocessed.*6*Oneofthefollowingconditionscouldhaveoccurred:*$*a.IOShashadanI/Otimerexpire(*b.IOShasreceivedanEOTtermination<*c.AUSERhasrequestedterminationofapreviouslyissued*dataI/Otransfer.**Incases'a'and'b'IOSwill(*issueHALTI/Orequest(s)asrequired.**Incase'c'IOSwill+*honortheUSER'srequesttoHALTtheI/O.*2*WhenIOSreceivestheHALTcompletioneventtype*thefollowingwilloccur.*&*a.IFEOTterminationisinprogress3*(referenceEOTterminationdocumentation{EOTSK})*Theeventwillbeignored.=*TheI/OpendingbitforthisLUNwillbeclearedintheLUT6*fortheusertaskindicatingthatthereisnoI/Oin *progress.>*ThecurrentLUTpointer(DCBLUT)willbeclearedintheDCB.=*Thepriority(DCBPRI)fortheDCBwillberesetintheDCB.7*Thedevicewillbemadeavailableforusebyclearing*thefieldDCBTMO.<*TheEOTterminationflag(DFLIOEOT)willbeclearedinthe*DCB.3*ControlwillbetransferedtotheEOTtermination*processing(EOTS10).**ELSE*8*Theeventcanbeignoredbecausetheeventstatus,$823*indicatesthatthereisnoI/Otohaltbecausean-*I/Ocompletioneventhasalreadybeensent.*<*Thedriverwillplace$82intheuser'sHALTI/Oparameter*block*}*HALTIO: BSRIRPT40LD,*CANCELTHETIMERFORTHISDCBIFONEEXISTBTST#LUSFDV,LUTCSF(A6,D6.L) BEQERCKOD#*JMPIFLUNASSIGNMENTISFORFILEBTST#LUSFIO,LUTCSF(A6,D6.L) BEQERCKOD*JMPIFNOI/OPENDINGFORLUNMOVE.LEVURA0(A4),A3,*A3=ADDRESSREQUESTOR'SI/OPARAMETERBLOCK BSRX01000BNE.SHALTIO20#*JMPIFOLDI/OTECHINIQUEISUSED BSR.SHALTIT*INITIATETHEHALTI/OREQUEST HALTIO10: BSRNEKILIT *KILLSYSTEM#*IFUNABLETOINITIATEI/OREQUEST O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>01/10/85>> *BRAOKSTAT BRADXF49O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<01/10/85<< * HALTIO20: BSRSAYHALT(*QUEANEVENTTOTHEAPPROPRIATEDRIVERBRA.SHALTIO10*EXITPAGE*****ROUTINETO**"***INITIATEAHALTI/ORQUEST*** ******** ***INPUT*****D5=ADDRESSOFDCB***A3=ADDRESSOFIOCBTOUSE**********OUTPUT*******REGISTERALTERATION**********2**A0=ADDRESSOFINITIATEI/OPARAMETERBLOCK****HALTIT:LEAINTPRMLD(A2),A0*A0=ADDRESSOFINITIATEI/OPBMOVE.LA1,-(A7)*SAVEREGISTER MOVE.LA2,A1"*A1=ADDRESSOFIOSDATASEGMENT MOVE.LA3,A2*A2=ADDRESSOFIOCBTOUSELEAHLTCBLD(A1),A31*A3=ADDRESSOFINTERNALHALTI/OPARAMETERBLOCK CMP.LA3,A2BNE.SHALT10LD *JMPIFUSERREQUESTEDHALTI/OCLR.LXIOTSK(A0)CLR.LXIOSES(A0)*SETRESPECTIVELY*TASKREQUESTINGHALTI/O)*SESSIONNBROFTASKREQUESTINGHALTI/OMOVE.W#8,XIOPLN(A0)!*SETIOCBLENGTH(PACKETLENGTH)BRA.SHALT15LD *CONTINUEON HALT10LD:MOVE.LEVUTSK(A4),XIOTSK(A0)MOVE.LEVUSES(A4),XIOSES(A0)*SETRESPECTIVELY*TASKREQUESTINGHALTI/O)*SESSIONNBROFTASKREQUESTINGHALTI/OCLR.WXIOPLN(A0)MOVE.BEVUPSZ(A4),XIOPLN+1(A0)*SETUSERIOCBLENGTH HALT15LD: "MOVE.LDCBCCB(A6,D5.L),XIOCID(A0)*SETCHANNELMNEMONICMOVE.LD5,XIOUID(A0)*SETDCBADDRESSMOVE.LA2,XIOCPK(A0)!*SETADDRESSOFREQUESTOR'SIOCB*(ADDRESSOFPACKETINFO) MOVE.LA1,A2"*A2=ADDRESSOFIOSDATASEGMENTMOVE.L(A7)+,A1*RESTOREREGISTERHALT20LDMOVE.L#XCAIO,D0*D0=DIRECTIVETOINITIATEI/OTRAP#1*INITIATEI/OREQUESTBEQ.SHALT30LD*JMPIFREQUESTINITIATEDCMP.B#XSTBSY,D0BEQ.SHALT20LD*JMPIFCHANNELBUSYHALT30LDRTSRETURN***6**INTERNALHALTI/OPARAMETERBLOCK--PACKETINFO******** ********************PAGE**BREAKSERVICEEXEC& UTOR* *REV.1.0002/01/80(JIMSMITH)*************C****THISROUTINEWILLREGISTERATASKFORLOCALBREAKSERVICE*****************!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**PPP*A***PPPP*******IGNOREREQUESTIFNON-INTERACTIVEDEVICE*(RETURNWITHGOODSTATUS)* BRKSRVEQU*2BTSTW#DATIND,LUTATT(A6,D6.L)INTERACTIVEDEVICE+BEQ.SBRKS15NO-GOODRETURNBSRDCBWAITLOCKDCBLIST-MOVE.LD7,DCBBRK(A6,D5.L)SETUPLUTPOINTER1MOVE.L#-1,DCBSRV(A6,D5.L)INIT.SERVICEADDRESS%MOVE.WIOSOPT(A5),D1PICKUPOPTIONS,AND.W#IOPCAD,D1SERVICEADDRESSSUPPLIED?BEQ.SBRKS10NO1MOVE.LIOSCAD(A5),DCBSRV(A6,D5.L)YES,SETITUP"BRKS10BSRDCBSIGRELEASEDCBLISTBRKS15BRAOKSTATRETURNPAGE***ENTRY*A4=ADDRASQMSGEVENT*A5=ADDRESSIOCBINEVENT *A6=ZERO*A7=STACKADDRESS*D5=ADDRESSDCBPROCESSING!*D6=ADDRESSLUNENTRYINTHELUT*D7=ADDRESSLUT*M*----------------------------------------------------------------------------************9****USERREQUESTTOCHANGETHEDEVICECONFIGURATION****2***USERISSENDINGANEWDEVICECONFIGURATION********* UDVC_CFG:BTST#LUSFDV,LUTCSF(A6,D6.L) BEQERCKOD1*JMPIFREQUESTISTOAFILEINSTEADOFADEVICE BRADXF37************9****USERREQUESTTOOBTAINTHEDEVICECONFIGURATION****;***USERISREQUESTINGTHECURRENTDEVICECONFIGURATION*****ANDSTATUS**** UDVR_CFG:BRA.SUDVC_CFGPAGE***ENTRY*A4=ADDRASQMSGEVENT*A5=ADDRESSIOCBINEVENT *A6=ZERO*A7=STACKADDRESS*M*----------------------------------------------------------------------------******&***LEVELTWO(2)FUNCTIONHANDLER***6****LEVEL2ISANEXTENSIONOFLEVEL1THEREFORE****6***CONTROLWILLBETRANSFERREDTOTHATPROCESSING*********LVL2CD: BRALVL1CD-*TRANSFERCONTROLTOLEVEL1FUNCTINHANDLERPAGE**NEGATEBREAKSERVICEEXECUTOR**************B****THISROUTINEWILLREMOVEATASKFROMLOCALBREAKSERVICE*****************!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME* N_BRKSRV:2BTSTW#DATIND,LUTATT(A6,D6.L)INTERACTIVEDEVICE+BEQBRKS15NO-GOODRETURNBSRDCBWAITLOCKDCBLISTCLR.LDCBBRK(A6,D5.L),*REMOVETASKFROMBEINGLOCALBREAKCLAIMER BRABRKS10 PAGE *IEEE488*CLAIMEVENTSEXECUTORIEEE488 *IEEE488 *IEEE488 *IEEE488 **IEEE488 ***IEEE488<****THISROUTINEWILLALLOWATASKTOCLAIMEVENTS.IEEE488 ***IEEE488 **IEEE488 *IEEE488 *IEEE488)*ENTRY:A4=ASQMESSAGEPOINTERIEEE488*A5=IOCBPOINTERIEEE488*A6=ZEROIEEE488*A7=STACKPOINTERIEEE488*D5=DCBPOINTERIEEE488*D6=LUNPOINTERIEEE488*D7=LUTPOINTERIEEE488 *IEEE488*EXIT:SAMEIEEE488 *IEEE488CLMDREV:$BSRDCBWAITLOCKTHEDCBLISTEVENT8TST.LDCBTSK(A6,D5.L)DOESACLAIMALREADYEXIST?EVENT*BNE.SCLMEVERBRANCHIFYES-ERROREVENT*EVENT6TST.LDCBSES(A6,D5.L)SESSIONMUSTALSOBEZEROEVENT"BNE.SCLMEVERBRANCHIFNOTEVENT*EVENT>*SINCENOOTHERTASKHASCLAIMEDEVENTSYET,ATTACHTHEEVENT<*TASKNAMEANDSESSIONNUMBERFORWHOMEVENTSWILLBEEVENT*SENTTO.EVENT*EVENT6BSET.B#LUSEVC,LUTCSF(A6,D6.L)SETCLAIMACTIVEEVENT-MOVE.LLUTTID(A6,D7.L),DCBTSK(A6,D5.L)EVENT'*SETUPTHETASKNAMEINTHEDCBEVENT-MOVE.LLUTSES(A6,D7.L),DCBSES(A6,D5.L)EVENT&*SETUPTHESESSIONNUMBERALSOEVENT.CLMDREV1:BSRDCBSIGUNLOCKTHEDCBLISTEVENTBRAOKSTATRETURNOKEVENT*EVENTB*ERROR-ATASKTRIEDTOCLAIMEVENTSFORADRIVERTHATWASEVENT*ALREADYCLAIMED.EVENT*EVENT,CLMEVERBSRDCBSIGUNLOCKTHE' DCBLISTEVENT*BRAERCB20RETURNDEVICEBUSYERROREVENT*IEEE48*NEGATECLAIMEVENTIEEE48*IEEE48*IEEE48 **IEEE48 ***IEEE488****THISROUTINEWILLREMOVECLAIMEVENTNOTICE.IEEE48 ***IEEE48 **IEEE48*IEEE48*IEEE48*ENTRY:SAMEASCLMEVTSIEEE48*IEEE48>*EXIT:SAMEASCLMEVTSEXCEPTNOPOSSIBLEERRORRETURNIEEE48*IEEE48 NCLMDREV:%BTST.B#LUSEVC,LUTCSF(A6,D6.L)EVENT(*ISTHISLUNHAVEEVENTSCLAIMED?EVENT&BEQERCKODNO,INVALIDFUNCTIONEVENT*EVENT$BSRDCBWAITLOCKTHEDCBLISTEVENT2CLR.LDCBTSK(A6,D5.L)SETTASKNAMETOZEROEVENT0CLR.LDCBSES(A6,D5.L)SETSESNUMTOZEROEVENT*ZEROIMPLIESNOCLAIMEVENT%BCLR.B#LUSEVC,LUTCSF(A6,D6.L)EVENT$*CLEARCLAIMEVENTBITINLUNEVENTBRA.SCLMDREV1EVENT PAGE *LEVEL40#*LEVEL40FUNCTIONHANDLERLEVEL40 *LEVEL40)*ORIG.3/10/83(STEVEFEITELSON)LEVEL40 *LEVEL409*THEPURPOSEOFTHELEVEL40FUNCTIONHANDLERISLEVEL405*TOALLOWTHEI/ODRIVERHANDLEALLFUNCTIONLEVEL409*VALIDITYTESTS.THISDRIVERHASNOKNOWLEDGEOFLEVEL405*WHATTHECOMMANDISTOBEEXECUTED.ITDOESLEVEL40<*HOWEVERHANDLEBASICIOSCHECKS(I.E.DCB,LUN,ANDLEVEL40;*LUTVALIDATION)SINCETHESEWOULDBEDIFFICULTTOLEVEL40%*OBTAINATTHEDRIVERLEVEL.LEVEL40 *LEVEL40 *LEVEL40 *LEVEL40)*ENTRY:A4=ASQMESSAGEPOINTERLEVEL40*A5=IOCBPOINTERLEVEL40*A6=ZEROLEVEL40*A7=STACKPOINTERLEVEL40 *LEVEL40*EXIT:SAMELEVEL40*D5=DCBPOINTERLEVEL40*D6=LUNPOINTERLEVEL40*D7=LUTPOINTERLEVEL40 *LEVEL40 *USING:01234567LEVEL40**D*****RRR****TBD*****LEVEL40*A***PPPPLEVEL40 *LEVEL40 *LEVEL40 *LEVEL40 *LEVEL401LVL40CDBSRX01000NEWOROLDI/OSCHEME?LEVEL40$BNEERCCODOLD,NOTALLOWEDLEVEL400CMP.B#IOSBLN,EVUPSZ(A4)PBLENGTHOK?LEVEL40BLTERCPRMNO,ERRORLEVEL40-*JMPIFPBLENGTHLESSTHANSTANDARDLEVEL40*28BYTESLEVEL40TST.WIOSLUN+1(A5)LEVEL40BNEERCCODLEVEL401*JMPIFRESERVEFIELDNOT=ZERO(ERROR)LEVEL40 *LEVEL409*ALLLEVELFORTYFUNCTIONSREQUIREACCESSTOLUTLEVEL40 *LEVEL40BSRLVL190LEVEL40*ESTABLISHFOLLOWINGLEVEL40*D7=ADDRESSLUTLEVEL40*D6=ADDRESSLUNINLUTLEVEL40*D5=ADDRESSDCBLEVEL40BEQ.SLVL4010LEVEL40#*JMPIFREQUESTSUCCESSFULLEVEL40BMIERCLUNLEVEL401*JMPIFLUTDOESN'TEXISTORINVALIDLUNLEVEL40BRAERCASGLEVEL40 *JMP-LUNNOTASSIGNEDLEVEL40BLVL4010MOVE.BLUTCSF(A6,D6.L),D1D1=CURRENTSTATUSOFLUNLEVEL40,BTST#LUSFDV,D1DEVICEASSIGNMENT?LEVEL40BEQERCCODNOLEVEL40,*JMPIFLUNASSIGNMENTISTOAFILELEVEL40=CMP.B#255,DCBFLG(A6,D5.L)ISTHISTHENULLDEVICE?LEVEL40-BEQIODONEYES,GORETURNLIKEANOPLEVEL40 *LEVEL40BSRDCBWAITLEVEL40*LOCKTHEDCBLISTLEVEL40"MOVE.WDCBFLG(A6,D5.L),D1LEVEL40*D1=DCBSTATUSLEVEL40BTST#DFLGON,D1LEVEL40BEQERCDEVLEVEL40"*JMPIFDEVICEISOFFLINELEVEL40BTST#DFLGSC,D1LEVEL40BNEERCDSCLEVEL40**JMPIFDEVICESTATUSHASCHANGEDLEVEL40 *LEVEL40"*CHECKFORPROPERVERSIONLEVEL40 *LEVEL404BSRX01000INNEWVERSION(4.XORGREATER)?LEVEL40.BNEERCCODBRANCHIFNO(NOTALLOWED)LEVEL40 *LEVEL401BRADXF39CONTINUENORMALIOSPROCESSINGLEVEL40*ANDCALLDRIVERLEVEL40PAGE*(*LEVEL80FUNCTIONHANDLER-PRIVILEGED**REV.1.007/01/79(JIMSMITH)*+*THISROUTINEWILLSCANTHEFUNCTIONFIELD2*OFTHEREQUESTOR'SIOCBANDMAPTHEBITPOSITION0*TOAFUNCTIONEXECUTORFORLEVEL80FUNCTIONS.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME**USING:01234567*D** *A*PPPP****.LVL80CDCMP.B#PBCLN,EVUPSZ(A4)PBLENGTHOK?BLTERCPRMNO,ERROR*JMPIFPBLENGTHERRORBTST#EVTNOS,EVUTIN(A4) BEQERCCOD!*JMPIFOTHERTHANASYSTEMTASKCLR.LD1SETBITPOINTER/LEALVL80EX(PC),A0LEVEL80TABLEOFEXECUTORS&MOVE.WIOSFCT(A5),D2PICKUPFUNCTION' AND.W#$FF,D2ISOLATECOMMAND!LVL8010BCLRD1,D2THISBITSET?BEQ.SLVL8020NO*TST.WD2MORETHAN1FUNCTIONREQUESTED?BNEERCCODYES,ERRORTST.L(A0)VALIDEXECUTOR?#BEQERCCODNO,FUNCTIONCODEERRORMOVE.L(A0),A0#JMP(A0)JUMPTOFUNCTIONEXECUTOR&LVL8020TST.L(A0)+BUMPTABLEPOINTER#ADD.B#1,D1BUMPBITPOINTER(R2L) CMP.B#8,D1#BEQERCCODREACHEDLIMIT-ERROR!BRA.SLVL8010CONTINUEPAGE*&*UNCLAIMEDBREAKS(LEVEL80FUNCTION)**REV.1.007/01/79(SMITH)*************9****SYSTEMLEVELRQSTFORCLAIMINGUNCLAIMEDBREAKS*****************!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME**USING:01234567*D* *APPPP****1BREAKSMOVE.LIOCOMS(A2),A0SETUPPOINTERTOSVT,MOVE.L#-1,SVTBSA(A0)INIT.SERVICEADDRESS%MOVE.WIOSOPT(A5),D1PICKUPOPTIONS#AND.W#IOPCAD,D1SERVICEADDRESS?BEQ.SBRE10NO-MOVE.LIOSSRV(A5),SVTBSA(A0)YES,SETINSVT0BRE10MOVE.LEVUTSK(A4),SVTBRK(A0)STORETASKID2MOVE.LEVUSES(A4),SVTBRK+4(A0)STORETASKSESSION BRAOKST10PAGE***********.****CHANGEDEFAULTCONFIGURATIONREQUEST*****************!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER**EXIT:SAMEASENTRY*D5=DCBADDRESS*D6=LUNADDRESSINLUT*D7=LUTADDRESS** SDV_CDCF: BSRLVL190 *ESTABLISH*D5=DCBADDRESS*D6=LUNADDRESSINLUT*D7=LUTADDRESS BEQUDVC_CFG*JMPIFRQSTSUCCESSFUL BMIERCLUN*JMPIFNOLUTORINVALIDLUN BRAERCASG*JMPIFLUNNOTASSIGNEDPAGE**END-OF-TASKEXECUTOR**REV.1.007/01/79(JIMSMITH)*"*THISISACLEAN-UPROUTINEFORA$*TASKWHICHHASGONETOCOMPLETION.*!*ENTRY:A4=ASQMESSAGEPOINTER *A6=ZERO*A7=STACKPOINTER* *EXIT:SAME*D7=LUTPOINTER**USING:01234567*D*******R*A**PPPP***{**EndOfTask(EOT)termination*)*WhenIOSreceivesEOTterminationevent=*itwillinterogateeachLUNassociatedwiththeLUTforthe*terminatingtask.*H*IFtherearenooutstandingI/OrequestonanyassignedLUN'sforthis*task<*IFtherearenooutstandingI/OrequestintheDCQforany*assignedLUN's*THEN@*IOSwillacknowledgethetaskandterminatetheEOTprocessing**ELSE*TheLUNinquestion$*WillhaveanyqueuedI/Odequeued.<*Willhaveaflag,DFLIOEOTintheDCB,setindicatingthat*thisDCBinEOTtermination.!*(ReferenceHALTI/Oprocessing)>*WillhaveaHALTI/OrequestissuedfortheoutstantdingI/O>*TransfercontroltoprocessthenexteventintheASQofIOS**{*EOTSK:BSRLUTWAITLOCKLUTLISTCLR.BIOCBLK+IOSSTA(A2)LEAEVUTSK(A4),A0*A0=ADDRESSTASKIDSEEKING BSRLUTLK'*D7=ADDRESSOFLUTFORREQUESTINGTASK BEQ.SEOTS10&*JMPIFLUTEXISTFORREQUESTINGTASK BSRLUTSIGNO,RELEASELUTLOCK"BRASETCNDGOACKNOWLEDGEREQUEST EOTS10MOVE.BLUTMLU(A6,D7.L),D2*D2=MAXNUMBEROFLUNSTST.BLUTCAS(A6,D7.L) BEQEOTS60*JMPIFNOLUNSAREASSIGNEDLEALUTBEG(A6,D7.L),A1 MOVE.LA1,D60*A1=D6=STARTADDRESSOFLUNENTRIESINTHISLUTEOTS20:MOVE.LLUTDCB(A6,D6.L),D5%*D5=DCBADDRESSFORLUNPROCESSING-MOVE.BLUTCSF(A6,D6.L),D1PICKUPLUNSTATUS*D1=CURRENTLUNSTATUSBTST#LUSFAC,D1 BEQ.SEOTS50'*JMPIFTHISLUNNOTACTIVE-ASSIGNEDBTST#LUSFDV,D1 BEQ.SEOTS50 *JMPIFLUNASSIGNMENTFORFILE BSRDCBWAITLOCKDCBLISTEVENTBTST#LUSEVC,D1EVENT(*ISTHISLUNHAVEEVENTSCLAIMED?EVENT BEQ.SEOTS23BRANCHIFNOEVENTBCLR#LUSEVC,D1EVENT(*RESETCLAIMEVENTSERVICEINLUNEVENT0CLR.LDCBTSK(A6,D5.L)CLEAROUTTASKNAMEEVENT5CLR.LDCBSES(A6,D5.L)CLEAROUTSESSIONNUMBEREVENT*EVENTEOTS23:BTST#LUSFIO,D1*BEQ.SEOTS50EVENTBEQ.SEOTS28EVENT*JMPIFNOI/OPENDINGFORLUN4*MOVE.LLUTDCB(A6,D6.L),D5SETUPDCB( POINTEREVENT&*D5=ADDRESSOFDCBFORTHISLUNEVENT!*BSRDCBWAITLOCKDCBLISTEVENT+TST.LDCBDCQ(A6,D5.L)INCONNECTIONWAIT?BEQ.SEOTS30NO*JMPIF *I/OPENDING"*BUTNOTINCONNECTIONWAITSTATE*GOHALTTHEI/O4CMP.LDCBLUT(A6,D5.L),D7THISTASKBEINGSERVICED?BNE.SEOTS25NO%*JMPIFTHISTASKNOTBEINGSERVICED%*I/OPENDINGBUTTHISTASKNOTBEING+*SERVICEDTHEREFOREREQUESTMUSTBEINQUEMOVE.BLUTMLU(A6,D7.L),D1SUB.BD2,D1CALC.LUN9CMP.BDCBIOS+IOSLUN(A6,D5.L),D1THISLUBEINGSERVICED?BNE.SEOTS25NO *I/OPENDING*THISTASKBEINGSERVICED$*BUTTHISLUNISNOTBEINGSERVICED"*THEREFOREREQUESTMUSTBEINQUE1BTST#LUSFCW,LUTCSF(A6,D6.L)ALSOINCONN.WAIT?BEQ.SEOTS30NO *I/OPENDING*THISTASKBEINGSERVICED*THISLUNBEINGSERVICED*NOOTHEROUTSTANDINGREQUEST*SOGOCANCELTHEI/O BSR.SEOTS99 BRA.SEOTS30 *I/OPENDING*THISTASKBEINGSERVICED*THISLUNBEINGSERVICED"*ANDOTHERREQUESTAREINTHEQUE(*SOREMOVEREQUESTSTHATAREINTHEQUE*GOCANCELTHEI/OEOTS25: BSR.SEOTS99*REMOVEENTRIESFROMTHEDCQEOTS28EQU*EVENTBSRDCBSIGRELEASEDCBLOCK BRA.SEOTS50CONTINUELUTCHECKEOTS30: BSETW#DFLIOEOT,DCBFLG(A6,D5.L)/*SETFLAG-I/OPENDINGBUTEOTTERMINATIONIN *PROGRESSBSRDCBSIGRELEASEDCBLOCKO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/835*MOVE.WDCBATT(A6,D5.L),D1PICKUPDEVICEATTRIBUTES4MOVE.LDCBATT(A6,D5.L),D1PICKUPDEVICEATTRIBUTES *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BTST#DATHIO,D1 BEQ.SEOTS40*BRANCHIFDEVICENOTHALTABLE)TST.WDCBTMO(A6,D5.L)YES,ISI/ODONE?BEQ.SEOTS50YESBMI.SEOTS50YES-BSR.SSAYHLTSCHEDULEDRIVERFORTERMINATION BSRNEKILIT *KILLSYSTEM&*ITATTEMPTTOHALTI/ODURINGENDOF*TASKOPERATIONFAILEDEOTS40: BSRLUTSIG*RELEASETHELUTLOCK BRAASRBEG*PROCESSNEXTEVENT  EOTS50ADD.L#LUTSEG,D6SUB.B#1,D2CHECKALLLUNS?BNEEOTS20NOEOTS60BSRLUTSIG*RELEASELUTRESOURCE*B*TheoriginalEOTeventmaynolongerbeavailableatthispoint.G*Consequentlywewillcreateadummyeventwithsufficientinformation3*toallowacknowledgementtotheterminatingtask.*LEAGPBUFR(A2),A4,*A4=Addressofdummyeventtobeusedfor*terminationacknowledgement"MOVE.LLUTTID(A6,D7.L),EVUTSK(A4)"MOVE.LLUTSES(A6,D7.L),EVUSES(A4)MOVE.B#$42,EVUTIN(A4)*Establishrespetively*Terminatingtaskid!*Terminatingtasksessionnumber*Terminatinginstructioncode*forthedummyeventBRA.SOKST20RETURN*EOTS99: BSRDCQWAIT BSRDEQUEC BSRDCQSIG*REMOVEENTRIESFROMTHEDCQRTSPAGE**QUEUEHALTEVENTTODRIVER*SAYHLT: BSRX01000 BEQ.SSAY40%*JMPIFNEWI/OTECHNIQUEBEINGUSEDSAYHALT:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;*MOVE.LDCBDID(A6,D5.L),QEVDRV+QEVTSK(A2)SETUPDRIVERID BSRDRVTSKID*OBTAINDRIVERIDO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *MOVE.B#DRVHLT,SUBEVC(A2)SETUPSUB-CODE)MOVE.LD5,DCBADDR(A2)SETUPDCBPOINTERLEAQEVDRV(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#QEVNT,D0*D0=DIRECTIVENUMBERTRAP#1*QUEEVENTTODRIVER"CMP.B#RTCDENAB,D0ASQDISABLED?BEQ.SSAY10YES,DELAYCMP.B#RTCDTFUL,D0ASQFULL?BNE.SSAY20NO,ERRORSAY10ERQ.DELAY#100BRA.SSAYHALTSAY20TST.LD0RESETCCRTSSAY40: BSRIRPT40LD(*CANCELTIMERFORTHISDCBIFONEEXISTLEAHLTCBLD(A2),A3#*A3=ADDRESSOFI/OPARAMETERBLOCK BSRHALTIT'*HALTTHEI/OINPROGRESSFORTHISDCB BEQ.SSAY20"*JMPIFHALTREQUESTWASACCEPTED BSRKILIT*ATLASTATLASTPAGE**RETURNFROMEVENT**RTNVT:&*ADD.L#60,A7ADJUSTSTACKLIKERTNVT *RTRRETURN* *OKSTATUS*"OKSTATBSRLUTSIGRELEASELUTLOCKOKST( 10CLR.LD1OKST12:$BSR.SPUTSTATUPDATESTATUSINIOCBOKST20LEAAKRPRM(A2),A0(MOVE.B#4,ACKCCD(A0)SETZEROBITINCC#*BRAACKRQUGOACKNOWLEDGEREQUEST**ACKNOWLEDGEREQUEST**A0=PARAMBLOCKPOINTER*2ACKRQUMOVE.LEVUTSK(A4),ACKTSK(A0)SETUPTASKID,MOVE.LEVUSES(A4),ACKSES(A0)SETUPSESSION6MOVE.BEVUTIN(A4),ACKTIN(A0)SETUPTRAPINST.NUMBER?OR.W#AKOPSC+AKOPSD+AKOPRT,ACKOPT(A0)SETCC,D0,ANDSTARTTASK$CLR.LACKRD0(A0)CLEARD0PARAMETER&MOVE.BEVUTIN(A4),D2PICKUPTRAPNO.$BTST#EVTNEOT,D2EOTNOTIFICATION?BNE.SACKR10YES,SKIPSTATUS*JMPIFEOTNOTIFICATIONBMOVE.BIOCBLK+IOSSTA(A2),ACKRD0+3(A0)MOVESTATUSTOD0PARAMETERBEQ.SACKR10STATUSOK0*JMPIFTHEREQUESTTHATWASINITIATEDWASDONE*WITHNOERRORSMOVE.L#IOSTIN,D1 ASL.B#3,D11MOVE.BD1,ACKRD0(A0)SETTRAPNUMBERIND0PARAMACKR10:*ERQ.AKRQSTAKRPRMMAKECALLLEAAKRPRM(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#AKRQST,D0*D0=DIRECTIVENUMBERTRAP#1*ACKNOWLEDGETASK BSRNEKILIT*KILLSYSTEMIF *FORTHISIOPWEWEREUNABLETO$*ACKNOWLEDGETHEI/OREQESTBACKTO *THETASKO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/*BRARTNVTLDGORETURNFROMEVENT++++++++++++ BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**UPDATESTATUS**ENTRY:D1=STATUS**-PUTSTATMOVE.BD1,ONEB(A2)SETUPSTATUSONEB(MOVE.BD1,IOCBLK+IOSSTA(A2)UPDATEIOCB&LEAMOVPRM(A2),A3PARAMBLOCKADDRESSCLR.LMVSTSK(A3)SOURCETASK CLR.LMVSSES(A3)SOURCESESSIONLEAONEB(A2),A0$MOVE.LA0,MVSADD(A3)SOURCEADDRESS&MOVE.W#1,MVLENG+2(A3)LENGTHOFXFER(MOVE.LEVUTSK(A4),MVDTSK(A3)DEST.TASK+MOVE.LEVUSES(A4),MVDSES(A3)DEST.SESSION0MOVE.LEVURA0(A4),MVDADD(A3)SETUPDEST.ADDR.ADD.L#IOSSTA,MVDADD(A3)4*BASEADDRESSOFUSERPBPLUSOFFSETTOSTATUSBYTELEAMOVPRM(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#MOVELL,D0*D0=DIRECTIVENUMBERTRAP#1*MOVELOGICAL*UPDATESTATUSFIELDPUTST10RTSRETURN* *SETUSER/SERVERREQUESTSTATUS*"STARQSBSRLUTSIGRELEASELUTLOCK/ERQ.DERQST#AKRSER+IOSTINENABLESERVEREVENTSO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.*BEQRTNVTLDOK,RETURNFROMEVENT++++++++++ BEQASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<&CMP.B#RTCDNFND,D0INTERCEPTPRESENT?O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BEQRTNVTLDYES+++++++++++++ BEQASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BSRKILITERROR*9*MAKENORMALI/ORETURNFORPROCESSINGTHE'NULL'DEVICE*"IODONEBSRLUTSIGRELEASELUTLIST%MOVE.WIOSOPT(A5),D1PICKUPOPTIONS AND.W#IOPPRO,D1I/OWITHWAIT?%BEQ.SIODONE10JUMPIFI/OWITHWAIT8BSR.SPUTREQQUEUECOMPLETIONEVENTFORI/OANDPROCEED IODONE10:CMP.W#IOREAD,IOSFCT(A5) BNEOKST10*JUMPIFNOTAREADREQUESTMOVE.L#ISTAEOF,D1*D1=EOFSTATUS BRAOKST12*IFREADINGANULLFILE'*THENAN'EOF'STATUSWILLBERETURNED**QUEUEI/OCOMPLETIONEVENT*2PUTREQCLR.WQEVREQ+QEVOPT(A2)CLEAROPTIONSFIELD,MOVE.LEVUTSK(A4),QEVREQ(A2)SETUPTASKID3MOVE.LEVUSES(A4),QEVREQ+QEVSES(A2)SETUPSESSIONMOVE.WIOSOPT(A5),D1%AND.W#IOPCAD,D1COMPLETIONADDRESS?BEQ.SPUTR10NO2MOVE.LIOSCAD(A5),CMPADDR(A2)YES,SETUPADDRESS*OR.W#QVOPAS,QEVREQ+QEVOPT(A2)SETOPTION8PUTR10MOVE.LEVURA0(A4),IOCBADR(A2)SETUPIOCBADDRESSLEAQEVREQ(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#QEVNT,D0*D0=DIRECTIVENUMBERTRAP#1 *QUEEVENTRTSPAGE**QUEDCQ**REV.1.004/15/80(JIMSMITH)**THISROUTINEWILLPUTA!*REQUESTORINTOCONNECTIONWAIT.***!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=D) CBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME*D0=0=SUCCESSFUL*1=NOTSUCCESSFUL**USING:01234567*DR***PPP*A**PPPP*****#QUEDCQCLR.LD0INIT.RETURNSTATUS(MOVE.LIOCOMS(A2),A0SETUPSVTPOINTER*A0=ADDRESSI/OCOMMONSEGMENT4MOVE.LSVTQUE(A0),D4PICKUPPOINTERTOFIRSTENTRY*D4=ADDRESSFIRSTENTRYINQUE(BNE.SQUED10NOTZERO,MUSTBEANENTRY"*JMPIFANENTRYEXISTINTHEQUE.MOVE.LSVTQST(A0),D4ZERO,STARTATBEGINNING0MOVE.LD4,SVTQUE(A0)SETUPFIRSTENTRYPOINTER*D4=STARTADDRESSOFDCQ'*ALSOHAPPENSTOBEFIRSTENTRYINQUEBRA.SQUED30GOSETUPENTRY)QUED10TST.LDCQDCB(A6,D4.L)EMPTYSLOT?BEQ.SQUED35YES,USEIT/*JMPIFTHISENTRYINDCQISAVAILABLEFORUSE0MOVE.LDCQPTR(A6,D4.L),D3POINTERTONEXTTABLE BEQ.SQUED20FOUNDTHELASTONE4*JMPIFWENEEDTOADDANOTHERENTRYINTHEDCQTBL MOVE.LD3,D4BRA.SQUED10KEEPLOOKINGQUED20MOVE.LD4,D3$*D3=ADDRESSLASTDCQENTRYINTABLE2ADD.L#DCQLEN*2,D4CALC.ENDADDRESSOFNEWENTRY)CMP.LSVTQND(A0),D4ROOMFORNEWENTRY?BGEQUED95NO*JMPIFNOROOMFORNEWENTRYSUB.L#DCQLEN,D4YES*D4=ADDRESSOFNEWQUEENTRY=MOVE.LD4,DCQPTR(A6,D3.L)SETFORWARDPOINTERINPRIORENTRY-QUED30CLR.LDCQPTR(A6,D4.L)MARKENDOFLIST@QUED35CLR.LDCQNXT(A6,D4.L)ZEROPOINTERTONEXTENTRYINDEVIC-MOVE.LD5,DCQDCB(A6,D4.L)SETUPDCBPOINTER-MOVE.LD6,DCQLUE(A6,D4.L)SETUPLUNPOINTER2MOVE.BEVUTIN(A4),DCQTIN(A6,D4.L)SETUPTRAPNO.,CLR.BDCQTIN+1(A6,D4.L)CLEARRESERVEDBYTE-MOVE.LD7,DCQLUT(A6,D4.L)SETUPLUTPOINTER?MOVE.LEVURA0(A4),DCQLAD(A6,D4.L)SETUPLOGICALADDR.OFIOCB3MOVE.BEVUPSZ(A4),DCQPLN(A6,D4.L)SETUPPBLENGTH7MOVE.BEVUPRI(A4),DCQPRI(A6,D4.L)SETUPTASKPRIORITY*!*LINKNEWENTRYINTODEVICELIST*>QUED50MOVE.LSVTQST(A0),A0SETUPPOINTERTOBEG.OFALLLIST*A0=ADDRESSOFDCQENTRIES4QUED55CMP.LDCQDCB(A0),D5FINDLISTFORTHISDEVICEBNE.SQUED60NOTHERE)CMP.LA0,D4MAKESUREIT'SNOTNEWENTRYBEQ.SQUED60ITIS+TST.LDCQNXT(A0)FIRSTDEVICELISTENTRY?BMI.SQUED70YES'QUED60TST.LDCQPTR(A0)ENDOFALLLISTBEQ.SQUED65YES(MOVE.LDCQPTR(A0),A0NO,GETNEXTENTRY BRA.SQUED55>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*&*EDITTOSEEIFOLDORNEWI/OSCHEME* BSRX01000BEQ.SQUED40IO*JMPIFNEWI/OMETHODO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CLR.BIOSSTA(A5)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*;*MOVE.LDCBDID(A6,D5.L),QEVDRV+QEVTSK(A2)SETUPDRIVERID BSRDRVTSKID*OBTAINDRIVERID*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 2MOVE.LD5,DCBADDR(A2)SETUPDCBADDRESSINEVENTMOVE.B#DRVEVT,SUBEVC(A2)*SETEVENTSUBCODELEAQEVDRV(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKMOVE.L#QEVNT,D0*D0=DIRECTIVENUMBERTRAP#1*QUEEVENTTODRIVER BSRNEKILIT*KILLTHESYSTEMIF$*ATTEMPTTOQUEEVENTTOTHEDRIVER*(OLDMETHOD)FAILED QUED20IO:%MOVE.WIOSOPT(A5),D1PICKUPOPTIONSAND.W#IOPPRO,D1BEQ.SQUED30IO*JMPIFI/OWITHWAIT BSROKSTATIO*I/OANDPROCEEDQUED30IORTSRETURN* QUED40IO:LEAINTPRMLD(A2),A0*A0=ADDRESSOFINITIATEI/OPB"MOVE.LDCBCCB(A6,D5.L),XIOCID(A0)&*SETCHANNELMNEMONICFORTHISDEVICE"MOVE.LLUTTID(A6,D7.L),XIOTSK(A0)"MOVE.LLUTSES(A6,D7.L* ),XIOSES(A0)**SETTASKNAMEANDSESSIONNUMBEROFTASK*ORIGINATINGTHEI/OMOVE.LD5,XIOUID(A0)*SETDCBADDRESS"MOVE.LDCQLAD(A6,D4.L),XIOCPK(A0)+*SETADDRESSOFI/OPBINTHEMEMORYSPACE!*OFTHETASKORIGINATINGTHEI/OCLR.WXIOPLN(A0)$MOVE.BDCQPLN(A6,D4.L),XIOPLN+1(A0)0*SETLENGTHOFI/OPBFROMTHETASKORIGINATING *THEI/O BSRHK_TIMER*INITIATETIMERMOVE.L#CMR,D0*D0=DIRECTIVETOINITIATEI/OTRAP#1*INITIATEI/OBEQ.SQUED20IO*JMPIFI/OHANDLERINVOKED BSRKILIT%*JMPIFUNABLETOINVOKEI/OHANDLER*O*------------------------------------------------------------------------------PAGE**DEQUEC**REV.1.004/15/80(JIMSMITH)**THISROUTINEWILLPURGEA*ADCQENTRY.J 3M<RDcLaTP\NdMlNtM|JKFHV\UOQMTU1***!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME**USING:01234567 *D**PPP *A*PPPP*****.DEQUECMOVE.LIOCOMS(A2),A0SETUPSVTPOINTER4MOVE.LSVTQUE(A0),A0PICKUPPOINTERTOFIRSTENTRY4DEQ10CMP.LDCQDCB(A0),D5FINDLISTFORRIGHTDEVICEBNE.SDEQ20NOTHERE'TST.LDCQNXT(A0)FIRSTENTRYINLIST?BMI.SDEQ30YES)DEQ20MOVE.LDCQPTR(A0),A0GETNEXTENTRY BRA.SDEQ100DEQ30CMP.LDCQLUT(A0),D7THISTHERIGHTENTRY?BEQ.SDEQ40YES MOVE.LA0,D4(MOVE.LDCQNXT(A0),D0NO,GETNEXTENTRY BCLR#31,D0 MOVE.LD0,A0 BRA.SDEQ302DEQ40MOVE.LDCQNXT(A0),D0ISITTHEFIRSTENTRY?BGE.SDEQ60NOBCLR#31,D0YESTST.LD0ALSOLASTENTRY?BEQ.SDEQ50YES.BSET#7,DCQNXT(A6,D0.L)NO,SETNEXTTOFIRST0MOVE.LD0,DCBDCQ(A6,D5.L)UPDATEPOINTERINDCB BRA.SDEQ800DEQ50CLR.LDCBDCQ(A6,D5.L)CLEARPOINTERINDCB BRA.SDEQ802DEQ60TST.LDCQNXT(A6,D4.L)ISPRIORFIRSTENTRY?BGE.SDEQ70NO"BSET#31,D0YES,RESETFIRSTFLAG+DEQ70MOVE.LD0,DCQNXT(A6,D4.L)RELINKLIST.DEQ80CLR.LDCQDCB(A0)CLEARDCBPOINTERFIELD)CLR.LDCQLUT(A0)CLEARLUTPOINTERFIELDCMOVE.W#AKOPAA,AKRPRM+ACKOPT(A2)SETACK.ALLOPTIONFORACK.REQU7BCLR#LUSFCW,LUTCSF(A6,D6.L)CLEARCONNECTIONWAITBIT RTSRETURNPAGE***THISISTHECOMMONERRORROUTINESECTION***SETCCFORBADRETURN*/SETCNDLEAAKRPRM(A2),A0SETCCFORACKNOWLEDGECLR.BACKCCD(A0)REQUEST.CLR.WACKOPT(A0)"BRAACKRQUGOACKNOWLEDGEREQUEST**BUFFERADDRESSERROR*8ERCBUFMOVE.L#ISTAADD+EREX,D1SETUPRETURNCODESTATUSBRA.SERCCCGOSETCC**COMMANDERROR*$ERCFNTBSR.SDCBSIGRELEASEDCBLOCK2ERCKODMOVE.L#ISTAIF+EREX,D1SETUPRETURNSTATUSBRA.SERCCCGOSETCC2ERCCODMOVE.L#ISTAIF+EREX,D1SETUPRETURNSTATUSBRA.SERCCCSGOSETCC* *LUNERROR*3ERCLUNMOVE.L#ISTAILU+EREX,D1SETUPRETURNSTATUSBRA.SERCCCGOSETCC**DEVICEFUNCTIONERROR*#ERCDFBSR.SDCBSIGRELEASEDCBLOCK2ERCDFEMOVE.L#ISTATM+EREX,D1SETUPRETURNSTATUSBRA.SERCCCGOSETCC**INTERNALERROR*2ERCFMSMOVE.L#ISTAIE+EREX,D1SETUPRETURNSTATUSBRA.SERCCCSGOSETCC**ASSIGNMENTERROR*3ERCASGMOVE.L#ISTAILU+EREX,D1SETUPRETURNSTATUS BRA.SERCCC**STATUSCHANGEDERROR*ERCDSCMOVE.L#ISTASC+EREX,D1 BRA.SERCC**DEVICENOTREADY*2ERCDEVMOVE.L#ISTANR+EREX,D1SETUPRETURNSTATUSBRA.SERCCGOSETCC**DEVICEWRITEPROTECTED*1ERCWPMOVE.L#ISTAWP+EREX,D1SETUPRETURNSTATUS BRA.SERCC**INVALIDPARAMBLOCKADDRESS*2ERCPRMMOVE.L#ISTAIP+EREX,D1SETUPRETURNSTATUSBRA.SERCCCSGOSETCC* *DEVICEBUSY*8ERCBSYBTST#LUSFDV,LUTCSF(A6,D6.L)DEVICEASSIGNNMENT?BNE.SERCB10YESBSR.SFCBSIGNO,RELEASEFILE BRA.SERCB20$ERCB10BSR.SDCBSIGRELEASEDCBLIST2ERCB20M* OVE.L#ISTADB+EREX,D1SETUPRETURNSTATUS BRA.SERCCC**RANDOMRECORDINVALID*2ERCRRNMOVE.L#ISTARR+EREX,D1SETUPRETURNSTATUS BRA.SERCC**ENDOFMEDIUM*3ERCEOMMOVE.L#ISTAEOF+EREX,D1SETUPRETURNSTATUS**SETSTATUSANDCC*"ERCCBSR.SDCBSIGRELEASEDCBLIST#ERCCCBSR.SLUTSIGRELEASELUTLIST ERCCCSBSRPUTSTATUPDATESTATUSBRASETCNDUPDATECC*&*OPERATINGSYSTEMTASKDOESNOTEXIST*ERCOSNX:MOVE.L#ISTAOSNX+EREX,D1"*D1=ERRORCODEREFLECTINGERROR BRA.SERCCCS*CONTINUEPROCESSINGPAGE**RESOURCEMANAGEMENTROUTINES*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER*%*RETURN:SAMEEXCEPTA0&D0CHANGED*****WAITONLUTSEMAPHORE*,LUTWAITMOVE.L#SVTSLUT,D0GETLUTSEMAPHOREBRA.SSEMWAIT**WAITONDCBSEMAPHORE*,DCBWAITMOVE.L#SVTSDCB,D0GETDCBSEMAPHOREBRA.SSEMWAIT**WAITONDCQSEMAPHORE*,DCQWAITMOVE.L#SVTSDCQ,D0GETDCQSEMAPHOREBRA.SSEMWAIT**WAITONFCBSEMAPHORE*,FCBWAITMOVE.L#SVTSFCB,D0GETFCBSEMAPHORE***SEMWAITMOVE.LIOCOMS(A2),A1 ADD.LD0,A1SEMW00TAS(A1)BEQ.SSEMW10OK,WEGOTITERQ.RELINQCAN'TGETITNOWBRA.SSEMW00TRYAGAINSEMW10RTSRETURN**SIGNALONLUTSEMAPHORE*/LUTSIGMOVE.L#SVTSLUT,D0RELEASELUTSEMAPHOREBRA.SXXXSIGRETURN**SIGNALONDCBSEMAPHORE*/DCBSIGMOVE.L#SVTSDCB,D0RELEASEDCBSEMAPHOREBRA.SXXXSIGRETURN**SIGNALONDCQSEMAPHORE*/DCQSIGMOVE.L#SVTSDCQ,D0RELEASEDCQSEMAPHOREBRA.SXXXSIGRETURN**SIGNALONFCBSEMAPHORE*FCBSIGMOVE.L#SVTSFCB,D0XXXSIGMOVE.LIOCOMS(A2),A0CLR.B(A0,D0)RTSPAGE**APCHK**REV.1.007/01/79(JIMSMITH)*/*THISROUTINEWILLCHECKFORACCESSPERMISSION7*CONFLICTSBETWEENTHELUNANDTHEFUNCTIONREQUESTED.3*ALLRESOURCELOCKSAREASSUMEDTOHAVEBEENMADE.*#*ENTRY:A4=QUEUEMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**RETURN:SAME*D0=0=NORMALRETURN*1=APCONFLICT**D3=READMAPVALUE*D4=WRITEMAPVALUE* *MAPVALUE**0-NOPERMISSION*1-PUBLICPERMISSION*-1-EXCLUSIVEPERMISSION***USING:01234567*DR****PPP *A*PPPP****&APDCHKCLR.LD0INITIALIZERETURNCODE CLR.LD1)MOVE.BLUTCAP(A6,D6.L),D1PICKUPLUNAP)*D1=CURRENTLUNACCESSPERMISSIONVALUESBSRMAPAPMAPAPTOR/WVALUES*D3=READMAPVALUE*D4=WRITEMAPVALUE.APD20CMP.W#IOREAD,IOSFCT(A5)READFUNCTION?BEQ.SAPD30YES*CMP.W#IOWRIT,IOSFCT(A5)WRITEFUNCTION?BEQ.SAPD40YESCMP.W#IOTBRK,IOSFCT(A5) BEQ.SAPD40*TRANSMITBREAKFUNCTION"CMP.W#IOUPDR,IOSFCT(A5)UPDATE?BEQ.SAPD40YES)CMP.W#IODELR,IOSFCT(A5)DELETERECORD?BEQ.SAPD40YES"CMP.W#IOFRMT,IOSFCT(A5)FORMAT?BEQ.SAPD45YES-CMP.W#IOOWIN,IOSFCT(A5)OUTPUTWITHINPUT?BNE.SAPD25NO,RETURNTST.WD3YES,OKTOREAD?BEQ.SAPD50NO,ERRORTST.WD4OKTOWRITE?BEQ.SAPD50NO,ERRORAPD25RTSSUCCESSFUL,RETURNAPD30TST.WD3OKTOREAD?BEQ.SAPD50NO,ERRORRTSSUCCESSFUL,RETURNAPD40TST.WD4OKTOWRITE?BEQ.SAPD50NO,ERRORRTSSUCCESSFUL,RETURN3*APD45CMP.B#FOPEREW,LUTCAP(A6,D6.L)EXCLUSIVER/W%APD45CMP.B#FOPEREW,D1EXCLUSIVER/WBNE.SAPD50NO,ERRORRTS&APD50MOVE.L#1,D0SETBADRETURNCODE RTSRETURNPAGE**ATCHK**REV.1.007/01/79(JIMSMITH)*/*THISROUTINEWILLCHECKFORDEVICEATTRIBUTES,*CONFLICTBETWEENTHELUNANDTHEREQUESTED *FUNCTION.*#*ENTRY:A4=QUEUEMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=DCBPOINTER*D6=LUNPOINTER*D7=LUTPOINTER**RETURN:SAME*D0=0=NORMALRETURN*1=INVALIDFUNCTION*-1=INVALIDDEV+ ICEFUNCTION**USING:01234567*DR***PPP *A*PPPP*****CHECKFUNCTIONANDATTRIBUTES*&ATDCHKCLR.LD0INITIALIZERETURNCODE CLR.LD3,LEAATFCHK(PC),A0SETATTRIBUTECHECKTABLE9MOVE.WLUTATT(A6,D6.L),D2PICKUPFILE/DEVICEATTRIBUTES*D2=CURRENTLUNATTRIBUTES CLR.LD1&MOVE.WIOSFCT(A5),D1PICKUPFUNCTION"*D1=REQUESTINGTASKFUCNTIONCODE-ATD10CMP.W(A0)+,D1FINDFUNCTIONINTABLE?BEQ.SATD30YES3ATD15TST.B(A0)+POTENTIALENDOFATTRIBUTEBITS?BMI.SATD20YESBRA.SATD15NO,KEEPCHECKINGATD20TST.B(A0)END?BMI.SATD15MAYBECMP.L#ATFEND,A0ENDOFTABLE"BEQ.SATD90YES,INVALIDFUNCTIONBRA.SATD10NO,CONTINUE+ATD30MOVE.B(A0)+,D3PICKUPATTRIBUTEBIT*D3=ATTRIBUTEFROMLOCALTABLE$BMI.SATD40ENDOFCHECK,IT'SOK!#BTSTD3,D2SUPPORTTHISFUNCTION?!BEQ.SATD97NO,INVALIDFUNCTIONBRA.SATD30CONTINUE**CHECKOPTIONSANDATTRIBUTES*1ATD40LEAATOCHK(PC),A0SETATTRIBUTECHECKTABLE(*A0=ADDRESSATTRIBUTECHECKTABLE(ACT)%MOVE.WIOSOPT(A5),D1PICKUPOPTIONS$*D1=OPTIONSFROMREQUESTINGTASKPB-ATD60MOVE.L(A0)+,D3LOADOPTIONBITPATTERN *D3=OPTIONBITPATTERNFORMACT TST.W(A0)+$BEQ.SATD65THISISANOTCONDITION(*JMPIFEDITINGTHEOFF(NOT)CONDITION AND.LD1,D3$*D1=OPTIONSFROMREQUESTINGTASKPB BNE.SATD80*JMPIFBITSET BRA.SATD70*JMPIFBITNOTSETATD65: AND.LD1,D3$*D1=OPTIONSFROMREQUESTINGTASKPB BEQ.SATD80*JMPIFTHISBITNOTSET)ATD70TST.B(A0)+ENDOFATTRIBUTEBITS?BMI.SATD87YESBRA.SATD70NO,KEEPCHECKING%ATD75CMP.L#ATOEND,A0ENDOFTABLE?*BEQ.SATD95YES,ALLOK!BHS.SATD95YES,ALLOK!BRA.SATD60NO,CONTINUEATD80CLR.LD3+ATD85MOVE.B(A0)+,D3PICKUPATTRIBUTEBIT$BMI.SATD87ENDOFCHECK,IT'SOK!#BTSTD3,D2SUPPORTTHISFUNCTION?!BEQ.SATD97NO,INVALIDFUNCTIONBRA.SATD85CONTINUE%ATD87TST.B(A0)ENDOFBITSEGMENT?BPL.SATD75YESTST.B(A0)+NO,ADJUSTPOINTER BRA.SATD75&ATD90MOVE.L#1,D0SETBADRETURNCODEATD95RTSRETURN)ATD97MOVE.L#-1,D0SETBADRETURNSTATUS RTSRETURNPAGE**LUTLK**REV.1.007/01/79(JIMSMITH)*-*THISUTILITYROUTINEISCALLEDTOLOOKUPA%*LOGICALUNITTABLEINTHELUTLIST.$*FINDALUTFORTHEREQUESTINGTASK* *ENTRY:A0=POINTERTOTASKID*A4=QUEUEMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER**RETURN:SAME *CONDITIONS)*EQUAL-->LUTFORREQUESTINGTASKFOUND1*NOTEQUAL-->LUTFORREQUESTINGTASKNOTFOUND*D7=LUTPOINTER'*ADDRESSLUTENTRYFORREQUESTINGTASK**USING:01234567*DR**AP*PPPP****LUTLK:(MOVE.LIOCOMS(A2),A1SETUPSVTPOINTER*A1=I/OCOMMONSEGMENTADDRESS-MOVE.LSVTLUT(A1),D7SETUPLUTLISTPOINTER*D7=ADDRFIRSTLUTENTRY$BEQ.SLUTL20ERROR-NOLUTPOINTER%LUTL10MOVE.L(A0),D1PICKUPTASKID*D1=REQUESTINGTASKID!CMP.LLUTTID(A6,D7.L),D1MATCH?BNE.SLUTL15NO0*JMPIFREQUESTINGTASKIDNOTEQUALTOTASKID*INTHISLUTENTRY MOVE.L4(A0),D1PICKUPSESSION#*D1=REQUESTINGTASKSESSIONNUMBER!CMP.LLUTSES(A6,D7.L),D1MATCH?BEQ.SLUTL25YES)*JMPIFMATCHONTASKIDANDSESSIONNBR>LUTL15MOVE.LLUTPTR(A6,D7.L),D7PICKUPPOINTERTONEXTTABLEBNE.SLUTL10MORETOCHECK'LUTL20MOVE.L#1,D0ERROR-ENDOFLISTLUTL25RTSRETURNPAGE**LUNLK**REV.1.007/01/79(JIMSMITH)*-*THISUTILITYROUTINEISCALLEDTOLOOKUPA*LOGICALUNITENTRYINANLUT.*#*ENTRY:A4=QUEUEMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER"*D1=LUNFROMREQUESTINGTASKPB,*D7=STARTADDRESSFORREQUESTINGTASKLUT**RETURN:SAME'*D0=0=NORMALRETURN-NOTASSIGNED*1=ACTIVEENTRY-ASSIGNED*-1=INVALIDLUN*D5=FCB/DCBPOINTER*D6=LUNPOINTER**USING:01234567 *DR*P *A*PPPP+ **** LUNLKCLR.LD0INITIALIZESTATUSCMP.BLUTMLU(A6,D7.L),D1 BHI.SLUNL10/*JMPIFLUNREQUESTED>MAXIMUMNUMBEROFLUNS *ALLOWED(MULU#LUTSEG,D1CALCULATEOFFSETINLUT#*LUNTIMESLOGICALUNITENTRYSIZELEALUTBEG(A6,D7.L),A12*A1=STARTADDROFLOGICALUNITENTRIESINTHELUT&ADD.LD1,A1ADDOFFSETTOLUTPOINTERMOVE.LA1,D6SETPOINTERIND61*A1=D6=ADDROFLUNENTRYREQUESTEDFORTHISTASK(MOVE.BLUTCSF(A1),D2PICKUPLUNSTATUS*D2=CURRENTLUNSTATUS)BTST#LUSFAC,D2LUNACTIVE?--ASSIGNEDBNE.SLUNL15YES*JMPIFLUNCURRENTLYASSIGNED RTSRETURN,LUNL10MOVE.L#-1,D0SETINVALIDRETURNCODE RTSRETURN*LUNL15MOVE.L#1,D0SETACTIVERETURNCODE-MOVE.LLUTDCB(A6,D6.L),D5SETUPDCBPOINTER,*D5=ADDRESSOFDCB/FCBTHISLUNASSIGNEDTO RTSRETURNPAGE**MAPAP*$*THISROUTINEWILLMAPAPOPTIONTO*SEPARATEREAD/WRITEVALUES.*9*ENTRY:D1=CURRENTAPOPTIONFROMLUNENTRYINTHELUT*)*EXIT:D3.WANDD4.W=0=NOPERMISSION*1=PUBLICPERMISSION*-1=EXCLUSIVEPERMISSION**-MAPAPLEAACPTBL(PC),A0SETMAPTABLEPOINTER CLR.LD3 MOVE.LD3,D4,*INITIALIZERD3=D4=NOPERMISSIONSTATUSMAP10CMP.W(A0),D1MATCH?BNE.SMAP15NO#MOVE.W2(A0),D3SETREADMAPVALUE$MOVE.W4(A0),D4SETWRITEMAPVALUEMAP20RTSRETURN(MAP15ADD.L#APTEL,A0BUMPTABLEPOINTER*A0=ADDRESSNEXTTABLEENTRYCMP.L#ACPTBLN,A0 BHS.SMAP20.*JMPIFTABLEEXAMINEDANDNOMATCHONACCESS*PERMISSIONFOUNDBRA.SMAP10CONTINUESEARCHPAGE** *ROUTINETO9*DETERMINEIFTHEOLDORNEWI/OTECHNIQUEISBEINGUSED**INPUT**D5=ADDRESSOFDEVICECONTROLBLOCK(DCB) *A6=ZERO**OUTPUT *CONDITIONS)*EQUAL-->NEWI/OTECHINIQUEBEINGUSED-*NOTEQUAL-->OLDI/OTECHINIQUEBEINGUSED*X01000:CMP.L#IOSID,DCBDID(A6,D5.L) BNE.SX01100*JMPIFOLDTECHINQUECMP.L#1,DCBDID+4(A6,D5.L)X01100:RTS-*RETURNWITHAPPROPRIATECONDITIONCODESSETPAGE*H**************************************************************************&*RETURNFROMEVENTREGISTERSRESTORED**K****************************************************************************O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4*RTNVTLDMOVEM.L(A7)+,D0-D7/A0-A6RESTOREREGISTERS *RTRRETURN*******@*******WITHTHENEWTASK-IDCONCEPTOFTCBADDRESS/PROCESSORID*******THISLOGICWASREMOVED*******O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGEH***************************************************************************UNSOLICITEDDEVICESTATUS***F***********************************************************************USTATLD:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTSTW#DATRAN,DCBATT(A6,D5.L)BTSTMDATRAN,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BNE.SUSTATALD*JMPIFRANDOMACCESSDEVICE************,****WEHAVEANON-RANDOMACCESSDEVICE**************** USTAT10L:BTST#XDSBRK,XRPDST(A4)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BEQRTNVTLD BEQASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*JMPIFNOTABREAKCONDITION BSRDCBWAIT*LOCKUPDCBLISTADD.B#1,DCBBCT(A6,D5.L)*ADJUSTTHEBREAKCOUNT BSRDCBSIG*RELEASETHEDCBLIST BSRBRAKERLD*NOTIFYBREAKCLAIMERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BRARTNVTLD BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<************+****PROCESSINGARANDOMACCESSDEVICE**************** USTATALD: BSRDCBWAIT*LOCKUPDCBLISTMOVE.WDCBFLG(A6,D5.L),D1,*D1, =DCBFLAGSPRIORTORECEIVINGTHISEVENTMOVE.BXRPDST(A4),D2&*D2=DEVICESTATUSRETURNEDWITHEVENTBTST#XDSNRB,D2BEQ.SUST10ALD*JMPIFDEVICEREADYBCLR#DFLGON,D1*SETFLAG-DEVICEOFFLINEBRA.SUST20ALD*UST10ALDBSET#DFLGON,D1*SETFLAG-DEVICEONLINEBCLR#DFLGWP,D1'*SETFLAG-DEVICENOTWRITEPROTECTEDBTST#XDSWPB,D2BEQ.SUST20ALD#*JMPIFDEVICENOTWRITEPROTECTEDBSET#DFLGWP,D1#*SETFLAG-DEVICEWRITEPROTECTED"UST20ALDMOVE.WDCBFLG(A6,D5.L),D2"*D2=DCBFLAGSPRIORTOTHISEVENTBTST#DFLGON,D2BEQ.SUST30ALD.*JMPIFPREVIOUSSTATEOFFLINEPRIORTOEVENTBTST#DFLGON,D1BNE.SUST50ALD#*JMPIFCURRENTSTATESTILLONLINEBRA.SUST40ALD-*JMP-THESTATEWENTFROMONLINETOOFFLINEUST30ALDBTST#DFLGON,D1BEQ.SUST50ALD$*JMPIFCURRENTSTATESTILLOFFLINE1*FALLTHRU-->STATEWERNFROMOFFLINETOONLINEUST40ALDBSET#DFLGSC,D1"*SETFLAG-DEVICESTATUSCHANGED UST50ALD:MOVE.WD1,DCBFLG(A6,D5.L)*UPDATEDEVICESTATUSINDCB BSRDCBSIG*RELEASETHEDCBLISTBTSTW#DFLGSC,D1O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BEQRTNVTLD BEQASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *JMPIFDEVICESTATUSUNCHANGED BSRTELLFMSL*NOTIFYFMSABOUTCHANGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BRARTNVTLD BRAASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*RETURNPAGEN*********************************************************************************UNRECOVERABLEERROR**M******************************************************************************DOWNLDBSRDCBWAIT*LOCKDCBLISTMOVE.LIOCOMS(A2),A1MOVE.LSVTDCB(A1),A1*A1=STARTADDRESSOFDCBLISTDOWN10LDMOVE.LA1,D5*D5=ADDRESSOFDCBPROCESSINGBEQ.SDOWN30LD*JMPIFDCBLISTPROCESSEDMOVE.LXRPUID(A4),D1*D1=CHANNELIDTHAT'SDOWNCMP.LDCBCCB(A6,D5.L),D1BNE.SDOWN20LD,*JMPIFCHANNELFORTHISDCBNOTASSOCIATED*WITHONEDOWNBSET#DFLGSC,DCBFLG(A6,D5.L)BCLR#DFLGON,DCBFLG(A6,D5.L)"*SETFOLLOWINGFLAGSRESPECTIVELY*DEVICESTATUSHASCHANGED*DEVICEOFFLINEDOWN20LDMOVE.LDCBPTR(A1),A1 *A1=ADDRESSNEXTDCBTOPROCESSBRA.SDOWN10LD*CONTINUELOOP DOWN30LD:*ADD.L#60,A7*ADJUSTSTACKFORRTRRETURN BSRDCBSIG*RELEASETHEDCBLISTCMP.W#XSTVDWN,XRPSTV(A4)BEQ.SDOWN40LD*JMPIFCHANNELDOWNRETURNEDTST.LRTSADRLD(A2)BNE.SDOWN40LD"*JMPIFPROCESSINGONETIMELOGIC*TOATTATCHCCB'SBSR.SSETPERLD* DOWN40LD:"BRAASRBEGJUSTRETURNFROMEVENTPAGEJ****************************************************************************DEVICEINITIALIZATIONROUTINE* *ROUTINETO1*CONFIGUREALLDEVICESASSOCIATEDWITHACHANNEL$*IFTHEDEVICEISOTHERTHANRANDOM*OR<*ESTABLISHSTATUSFORALLDEVICESASSOCIATEDWITHACHANNEL*IFTHEDEVICEISRANDOM**INPUT;*D1=CHANNELIDOFCHANNELCONTROLBLOCK(CCB)TOPROCESS*C*ENTRYPOINTFORCOMPLETIONOFINITIALIZTIONREQUESTWHETHERITIS&*CONFIGUREORSTATUSIS--->SETP50LD*K**************************************************************************** SETPERLD:MOVE.L(A7)+,RTSADRLD(A2)*SAVERETURNADDRESSMOVE.LIOCOMS(A2),A1MOVE.LSVTDCB(A1),A1*A1=STARTADDRESSOFDCBLISTSETP10LDMOVE.LA1,D5BNE.SSETP20LD*JMPIFANOTHERDCBTOPROCESS"SETP15LDMOVE.LRTSADRLD(A2),-(A7)*RESTORERETURNADDRESSCLR.LRTSADRLD(A2)**SETFLAG-NOTPROCESSINGONETIMELOGIC*TOATTATCHCCB'SRTS*RETURN SETP20LD:CMP.LDCBCCB(A6,D5.L),D1BEQ.SSETP30LD3*JMPIFTHISDEVICEASSOCIATEDWITHCCBPROCESSINGMOVE.LDCBPTR(A1),A1 *A1=ADDRESSNEXTDCBTOPROCESSBRA.SSETP10LD *REPEATLOOP SETP30LD:BSR.SSETP40LD.*INITIATEINPARTTHEIOCBANDTHEAS, SOCIATED(*INFORMATIONPACKETFORTHEI/OREQUEST*A0=ADDRESSINITIATEI/OPB)*A1=ADDRESSOFCONFIGURATIONINFOPACKET(*A3=ADDRESSOFIOCBBUILDINGINTHEDCBMOVE.LD1,XIOCID(A0)!*INITIALIZEINITIATEI/OPBWITH**CHANNELMNEMONICBSETW#DFLGIN,DCBFLG(A6,D5.L)&*SETFLAG-INITIALIZATIONINPROCESSMOVE.W#$7FFF,DCBTMO(A6,D5.L)*SETDEVICEBUSY ************M****---------------------------------------------------------------------****************************E****PERDISCUSSIONWITHJIMSMITHTHEDECISIONWASMADETOMAKE****D***THEREQUESTA'CONFIGURATION'REQUESTREGARDLESSOFTHETYPE***@**OFDEVICE.THEIPCWILLTREATTHECONFIGURATIONREQUESTAS**>*ADEVICESTATUSREQUESTFORRANDOMACCESSDEVICESBUTJUST*>*INCASEI'VELEFTTHEEDITINSOTHATALLTHATNEEDSTOBE*+**DONEISNOPTHEFOLLOWINGINSTRUCTION******** ********************BRA.SSETP32LD************M****---------------------------------------------------------------------****************O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTSTW#DATRAN,DCBATT(A6,D5.L)BTSTMDATRAN,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BEQ.SSETP32LD+*JMPIFDEVICEISOTHERTHANRANDOMDEVICE************:****WEHAVEARANDOMDEVICESTATUSWILLBEREQUESTED*******A3=ADDRESSOFUSERIOCB*********MOVE.W#IOSTAT,IOSFCT(A3)*ALTERTHEUSERIOCBTO"*SETTHEREQUESTTOOBTAINSTATUSCLR.LIOSDST(A1)-*CLEARTHEATTRIBUTES/PARAMETERSMASKFIELDSBRA.SSETP33LD*ISSUETHECHANNELDIRECTIVE************E****WEHAVEANON-RANDOMDEVICECONFIGURATIONWILLBEREQUESTED****************"SETP32LDMOVE.W#IOCNFG,IOSFCT(A3)*ALTERTHEUSERIOCBTO%*SETTHEREQUESTTOCONFIGUREDEVICE SETP33LD:CLR.LIOSOPT(A3)*INTHEREQUESTOR'SIOCB%*CLEARTHEOPTIONS,LUN,STATUSFIELDS SETP34LD:MOVE.L#XCAIO,D0*D0=DIRECTIVETOINITIATEI/OTRAP#1#*INITIATECONFIGURE/STATUSREQUESTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*BEQ.SSETP35LD BEQASRBEGO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*JMPIFREQUESTACCEPTEDCMP.B#XSTBSY,D0BEQ.SSETP34LD*JMPIFCHANNELISBUSY BRASETP15LD**SOMECHANNELERROROTHERTHANBUSYEXIST*WE'LLFORGETREQUESTFORNOW/*THEI/OHANDLERWILLPROBABLYISSUEACHANNEL*RESETBEFORELONGO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*SETP35LD ERQ.WTEVNT*BRA.SSETP35LD*WAITFORANEVENT*******@*******WITHTHENEWTASK-IDCONCEPTOFTCBADDRESS/PROCESSORID*******THISLOGICWASREMOVED*******O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE****ROUTINETO*****BUILDINPART***0****THEIOCBFORTHECONFIGURATIONREQUEST****9***THEASSOCIATEDINFORMATIONPACKETFORTHEREQUEST******* *INPUT* *D5=ADDRESSOFDCBPROCESSING* **A6=ZERO************OUTPUT****2***A0=ADDRESSOFINITIATEI/OPARAMETERBLOCK*****A3=ADDRESSOFIOCBTOUSE**+*A1=ADDRESSOFCONFIGURATIONINFOPACKET*** SETP40LD:LEAINTPRMLD(A2),A0.*A0=ADDRESSINITIATEI/OPARAMETERBLOCK(PB)MOVE.LD5,XIOUID(A0)*LEADCBIOS(A6,D5.L),A3MOVE.LA3,XIOCPK(A0)*MOVE.W#IOSCSL,XIOPLN(A0)*CLR.LXIOTSK(A0)*CLR.LXIOSES(A0)*-*INITIALIZEINITIATEI/OPBRESPECIVELYWITH**ADDRESSOFDCB**ADDRESSOFTHEUSERIOCB**LENGTHOFTHEUSERIOCB **TASKID**TASKSESSIONNUMBERLEADCBDKC(A6,D5.L),A1MOVE.LA1,IOSDBP(A3))*A1=ADDRESSOFCONFIGURATIONINFORMATION-*SETADDRESSOFCONFIGURATIONINFORMATIONIN**THEUSERIOCB(WHICHHAPPENSTOBEMINE)RTSPAGEL************************************************- *****************************+*ENTRYPOINTFORINITIALIZATIONCOMPLETION***THISISTHEINTERRUPTEVENTLEVELOFTHE*INITIALIZATIONROUTINE.**A4=ADDRESSEVENTREAD*D5=ADDRESSDCB*A5=ADDRESSIOCBINDCB**J***************************************************************************SETP50LDBSRDCBWAIT*LOCKUPTHEDCBLISTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM9/13/83CMP.W#ISTAIF,XRPSTV(A4)BEQ.SSETP54LDCMP.W#ISTACNF,XRPSTV(A4)BEQ.SSETP54LD*JMPIF*INVALIDFUNCIONCODE *CONFIGURATIONPARAMETERERRROR*ELSE-*TREATASAGOODCONFIGURATION(TAPEDRIVER) *BKM9/13/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"SETP52LDMOVE.WDCBFLG(A6,D5.L),D1*D1=CONTENTSOFDCBFLAGWORD!*CURRENTSTATUSPRIORTOREQUESTBCLR#DFLGIN,D1+*CLEARFLAG-->INITIALIZATIONINPROGRESSCLR.WDCBTMO(A6,D5.L)*SETDEVICENOTBUSYO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83*BTSTW#DATRAN,DCBATT(A6,D5.L)BTSTMDATRAN,DCBATT,A6,D5.L *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<BNE.SGETS55LD&*JMPIFREQUESTWASFORRANDOMDEVICEBRA.SSETP55LD**REQUESTWASFOROTHERTHANRANDOMDEVICE************3****CONFIGURE/STATUSREQUESTWASUNSUCCESSFUL**************** SETP54LD:CLR.WDCBTMO(A6,D5.L)*SETDEVICENOTBUSYBCLRW#DFLGIN,DCBFLG(A6,D5.L)+*CLEARFLAG-TURNINITIALIZATIONMODEOFFBCLRW#DFLGON,DCBFLG(A6,D5.L)*FORCEDEVICEOFFLINEBRA.SSETP65LD*************8****WESUCCESSFULLYCONFIGUREDANON-RANDOMDEVICE**************** SETP55LD:BSET#DFLGON,D1BCLR#DFLGSC,D1*RESPECTIVELY*SETDEVICEONLINE *SETDEVICESTATUSCHANGEDFLAGMOVE.WD1,DCBFLG(A6,D5.L)*UPDATETHEDCBFLAGWORDCLR.BDCBCCF(A6,D5.L)!*CLEARTHEDCBCOORDINATIONFLAG.*DEVICEISCURRENTLYINDEFAULTCONFIGURATION SETP65LD: BSRDCBSIG*UNLOCKTHEDCBLIST************C****COMMONEXITLOGICFORSUCCESSFULCONFIGURE/STATUSREQUEST****************"SETP75LDMOVE.LDCBPTR(A6,D5.L),A1#*A1=ADDRESSOFNEXTDCBTOPROCESS*ADD.L#66,A70*ADJUSTSTACKASIFARETURNEVENTHADOCCURRED"*ERQ.SETASQ#AQSTQE+AQSTME+AQSTRE*ERQ.SETASQ#AQSTQE+AQSTME*REQUESTTHAT *ASQENABLED*AUTOBUFFERENABLED*BEQ.SSETP80LD*JMPIFASQENABLED *BSRKILIT*KILLTHESUCKER"SETP80LDMOVE.LDCBCCB(A6,D5.L),D1+*D1=CHANNELIDWE'REEXAMININGDEVICESFOR BRASETP10LD*CONTINUELOOP************=****WESUCCESSFULLYOBTAINEDSTATUSFORARANDOMDEVICE****************GETS55LDEQU*!MOVE.BDCBDKC+IOSDST(A6,D5.L),D2)*D2=DEVICESTATUSASARESULTOFREQUEST*(AFTERTHEREQUESTBCLR#DFLGON,D1#*SETFLAG-->FORCEDEVICEOFFLINEBTST#XDSNRB,D2BNE.SGETS70LD!*JMPIFDEVICECURRENTLYOFFLINEGETS60LDBSET#DFLGON,D1*SETFLAG-DEVICEONLINEBCLR#DFLGWP,D1)*SETFLAG-->DEVICENOTWRITEPROTECTEDBTST#XDSWPB,D2BEQ.SGETS70LD#*JMPIFDEVICENOTWRITEPROTECTEDBSET#DFLGWP,D1%*SETFLAG-->DEVICEWRITEPROTECTED GETS70LD:BSET#DFLGSC,D1$*SETFLAG-->DEVICESTATUSCHANGEDMOVE.WD1,DCBFLG(A6,D5.L)*D1=UPDATEDDEVICEFLAGWORD BSRDCBSIG*UNLOCKTHEDCBLIST BSRTELLFMSL*GOTELLONTHEMOUNTAIN....*IMEANGOTELLFMS BRASETP75LD*EXITVIACOMMONLOGICPAGE** *RTNETO2*WALKALLDEVICES(DCB'S)ASSOCIATEDWITHAGIVEN *CHANNELANDMARKTHEMOFFLINE***INPUT *A6=ZERO*D1=CHANNELIDTOPROCESS***OUTPUT*A1=D5=DESTROYED** MARK_OFF:MOVE.LIOCOMS(A2),A1"*A1=ADDRESSOFCOMMONI/OSEGMENTMOVE.LSVTDCB(A1),A1*A1=STARTADDRESSOFDCBLIST MKO_0100: MOVE.LA1,D5BNE.SMKO_0200#*JMPIFMOREDCBENTRYSTOEXAMINERTS*RETURNTOCALLER MKO_- 0200:CMP.LDCBCCB(A6,D5.L),D1BNE.SMKO_0300/*JMPIFTHISDEVICEISNOTONTHENON-EXISTENT *CHANNELBCLRW#DFLGON,DCBFLG(A6,D5.L)*FORCEDEVICEOFFLINE MKO_0300:MOVE.LDCBPTR(A1),A1&*A1=ADDRESSNEXTDCBENTRYTOEXAMINEBRA.SMKO_0100 *SEEIFMOREENTRIESTOEXAMINEPAGE *ROUTINETO*:*1.FORASPECIFIEDDCBISSUEATIMERREQUEST(IFNEEDED)**OR*>*2.FORASPEICIFEDDCBTERMINATEATIMERREQUEST(IFNEEDED)*3*ENTRYPOINTFORISSUEATIMERREQUEST-->R_TIMER4*ENTRYPOINTFORCANCELATIMERREQUEST-->C_TIMER**INPUT *A6=ZERO,*D5=ADDRESSOFDCBFORWHICHTIMERISFOR**OUTPUT*REGISTERALTERNATION**D0=D1=DESTROYED**TIMEREQUATES**R_TIMEREOPTIONS=*TIMEOFFIRSTACTIVATIONISSPECIFIEDININITIALTIMEFIELD)*AUNIQUEIDISSPECIFIEDFORTHISTIMER:*ACTIVATIONFROMTIMERREQUESTISANEVENTTODEFAULTASR**C_TIMEREOPTIONS)*CANCELACURRENTLYACTIVETIMERREQUEST2*AUNIQUEIDISSPECIFIEDFORTHISCANCELREQUEST*R_TIMEREEQU$6C00C_TIMEREEQU$2400***R_TIMER:BCLRW#DFLGIT,DCBFLG(A6,D5.L)**CLEARFLAG--TOIGNORETHISTIMEREVENTMOVE.LTIMVALLD(A2),D1*D1=TIMERINTERVALSUB.L#24*60*60*1000,D1BMI.SCAL002LD+*JMPIFTIMEINTERVALISLESS(<)24HOURS#MOVE.L#24*60*60*1000,TIMVALLD(A2)4*FORCETIMEINTERVALINMILLI-SECONDSTOBE24HOUR CAL002LD:MOVE.W#R_TIMERE,T_OPTSLD(A2)!*SETTIMEROPTIONSFORAREQUESTBSETW#DFLGCT,DCBFLG(A6,D5.L)'*SETFLAG-ATIMEREXISTFORTHISDCBMOVE.LA0,-(A7)*SAVEREGISTER*ERQ.GTDTIMTIMPRMLD*REQUESTCURRENTTIMEANDDATE*BEQ.SCAL004LD*JMPIFREQUESTOK *BSRKILIT*TERMINATEEVERYTHING CAL004LD:*MOVE.LCURTIMLD,D1*ADD.LTIMVALLD,D1*MOVE.LD1,INLTIMLD#*ADDCURRENTTIMETOTIMEINTERVAL(*D1=TIMEOFINITIALPERIODICACTIVATION!MOVE.LTIMVALLD(A2),IOINTRLD(A2)&*SETTHETIMEINTERVALFORACTIVATION CAL008LD:MOVE.LD5,UNIQIDLD(A2),*ESTABLISHTHEUNIQUEIDFIELDBYUSINGTHE*DCBADDRESSINREGD5LEATEVPRMLD(A2),A0*A0=PARAMETERBLOCKADDRESSMOVE.L#RQSTPA,D0*D0=DIRECTIVENUMBERTRAP#1*REQUESTPERIODICACTIVATION'*THISINITIATESTHETIMERFORTHISDCB*OR *CANCELSTHETIMERFORTHISDCBBEQ.SCAL020LD*JMPIFREQUESTOKCMP.W#RTCDNFND,D0BEQ.SCAL010LD*JMPIF*NOENTRYFOUNDONCANCELRQST BSRKILIT*GOTCHA CAL010LD:BSETW#DFLGIT,DCBFLG(A6,D5.L)'*SETFLAG-WETRIEDTOCANCELATIMER*BUTCOULDN'TFINDONE!*SOIFYOUGETATIMEREVENTFOR *THISDCBYOUCANTHROWITAWAY CAL020LD:MOVE.L(A7)+,A0*RESTOREREGISTERRTSPAGE************:****ENTRYPOINTFORASPECIFICDCBTIMERCANCELATION****************C_TIMER:MOVE.LA0,-(A7)*SAVEREGISTERMOVE.W#C_TIMERE,T_OPTSLD(A2)-*SETTIMEROPTIONSFORCANCELSPECIFICTIMERBRA.SCAL008LDPAGEK*****************************************************************************BRAKER*$*NOTIFYBREAKCLAIMER,IFHEEXISTS**L*****************************************************************************BRAKERLDLEAQEVATNLD(A2),A1*A1=ADDRESSQUEATTENTIONPB CLR.LD0$*D0=INITIALIZEPACKETDEVICESTATUSTST.LDCBWNT(A6,D5.L)BEQ.SBRAK2LD*JMPIFDEVICENOTASSIGNEDBSET#EVATNAS,D0*SETSTATUS-DEVICEASSIGNED#BRAK2LDMOVE.WD0,ATTNLD+EVASTA(A2)*STOREDEVICESTATUSINPACKET)MOVE.LDCBAID(A6,D5.L),ATTNLD+EVADEV(A2)*SETDEVICEINPACKETCLR.WQEVOPT(A1)3*SETOPTIONSINPBTHATNOINTERRUPTADDRESSEXISTTST.LDCBBRK(A6,D5.L)BNE.SBRAK20LD"*JMPIFLOCALBREAKCLAIMEREXIST**********)****EDITFORASYSTEMBREAKCLAIMER****************BRAK5LDMOVE.LIOCOMS(A2),A0"*A0=ADDRESSOFCOMMONI/OSEGMENTTST.LSVTBRK(A0)BEQ.SBRAK30LD *JMPIFNOSYSTEMBREAKCLAIMERMOVE.LSVTBRK(A0),QEVTSK(A1)MOVE.LSVTBRK+4(A0),QEVSES(A1)MOVE.LSVTBSA(A0),QEVIAD(A1)#*SETUPRESPECTIVELYTHEFO. LLOWING*TASKIDCLAIMINGBREAKS%*SESSIONNBROFTASKCLAIMINGBREAKS**THEBREAKINTERRUPTADDRESSIFONEEXISTBMI.SBRAK10LD'*JMPIFNOINTERRUPTADDRESSSPECIFIEDMOVE.W#QVOPAS,QEVOPT(A1)-*ALTERPBOPTIONSTOSTATETHATANINTERRUPT$*BREAKERADDRESSHASBEENSPECIFIED BRAK10LD:LEAQEVATNLD(A2),A0MOVE.L#QEVNT,D0TRAP#1*NOTIFYSYSTEMBREAKCLAIMERRTS****WEHAVEALOCALBREAKCLAIMER** BRAK20LD: MOVE.LA2,A0"*A0=ADDRESSOFIOSDATASEGMENTMOVE.LDCBBRK(A6,D5.L),A2+*A2=ADDRESSOFLUTFORLOCALBREAKCLAIMERMOVE.LLUTTID(A2),QEVTSK(A1)MOVE.LLUTSES(A2),QEVSES(A1)"MOVE.LDCBSRV(A6,D5.L),QEVIAD(A1)#*SETUPRESPECTIVELYTHEFOLLOWING*TASKIDCLAIMINGBREAKS%*SESSIONNBROFTASKCLAIMINGBREAKS**THEBREAKINTERRUPTADDRESSIFONEEXISTBMI.SBRAK25LD'*JMPIFNOLOCALBREAKSERVICEADDRESSMOVE.W#QVOPAS,QEVOPT(A1)4*SETOPTIONSTHATLOCALBREAKSERVICEADDRESSEXIST BRAK25LD: MOVE.LA0,A2"*A2=ADDRESSOFIOSDATASEGMENTLEAQEVATNLD(A2),A0MOVE.L#QEVNT,D0TRAP#1"*QUEEVENTTOLOCALBREAKCLAIMER BRAK30LD RTSPAGE* *ROUTINETO!*INITIALIZETHEIOSDATASEGMENT**INPUT*A2=IOSDATASEGMENTADDRESS*A7=STACKADDRESS*OUTPUT**REGISTERALTERATION*A0=DESTROYED*A1=DESTROYED*D0=DESTROYED**CONDITIONCODERETURN*N/A* TEMPLATE:MOVE.W#IOHALT,HLTCBLD(A2)LEAATTNLD(A2),A0MOVE.LA0,QEVATNLD+10(A2)**SETADDRESSOFINFORMATIONPACKETINTHE*ATTENTIONPARAMETERBLOCKMOVE.B#EVALEN,ATTNLD(A2)MOVE.B#EVCATN,ATTNLD+1(A2)*SETRESPECTIVELY *EVENTCODE*EVENTLENGTH%*INTHEATTENTIONINFORMATIONPACKETMOVE.L#-1,D0*D0=NEGATIVEONEMOVE.LD0,IOINTRLD-4(A2)MOVE.WD0,LASL(A2)MOVE.WD0,UASL(A2)$*SETRESPECTIVELYANEGATIVEONEIN1*TIMEFORINITIALACTIVATIONINREQUESTTIMERPB*LOWERADDRESSSTACKDELIMITER*UPPERADDRESSSTACKDELIMITERMOVE.B#XDINIT,INTPRMLD(A2)**SETINITIATEI/OCODEINPARAMETERBLOCK,MOVE.B#SRTREOT+SRTRPRM+IOSTIN,SRVPRM+4(A2)2*SETTRAPINSTRUCTIONINESTABLISHTRAPSERVERPBMOVE.B#IOSNLN,SRVPRM+5(A2)*SETPARAMETERBLOCKSIZEIN'*ESTABLISHTRAPSERVERPARAMETERBLOCK#MOVE.B#EVTLEN+IOSNLN-8,EVNLEN(A2)*SETEVENTLENGTHLEAEVNLEN(A2),A0MOVE.LA0,QEVPRM+10(A2)-*SETADDRESSOFEVENTINQUEEVENTTOFMSPBLEAEVTDRV(A2),A0MOVE.LA0,QEVDRV+10(A2)0*SETADDRESSOFEVENTINQUEEVENTTODRIVERPBLEAREQEVT(A2),A0MOVE.LA0,CMPADDR-4(A2)2*SETADDRESSOFEVENTINQUEI/OCOMPLETIONEVENTMOVE.B#EVCQUE,D0*D0.B=EVENTCODEMOVE.BD0,EVNLEN+1(A2)MOVE.BD0,EVTDRV+1(A2)*SETEVENTCODEMOVE.B#IOLEVT,EVNLEN+2(A2)*SETSUBCODEMOVE.B#EVTLNG-8,EVTDRV(A2)*SETEVENTLENGTHMOVE.B#DRVEVT,SUBEVC(A2)*SETSUBCODEMOVE.B#EVIOND,REQEVT(A2)MOVE.B#EVCIOC,REQEVT+1(A2)*SETRESPECTIVELY*EVENTLENGTH *EVENTCODEMOVE.B#XDATCH,ATTPRMLD(A2)2*SETCODEFORATTATCHI/OCHANNELPARAMETERBLOCK%MOVE.B#XOPASQ+XOPPRO,ATTPRMLD+3(A2)3*SETOPTIONSFORATTATCHI/OCHANNELPARAMETERBLKMOVE.B#XRP1LEN,ATTPRMLD+9(A2)0*SETLENGTHOFSTATUSINATTATCHI/OCHANNELPBLEAGPBUFR(A2),A0MOVE.L#FHSID,A1MOVE.L#IOSESS,D0.*ESTABLISHPARAMETERSFORGETTASKIDROUTINE"*A0=GETTASKIDPARAMETERBLOCK*A1=TASKNAME*D0=TASKSESSIONNUMBER BSRGETTSKID*OBTAINFHSTASKID BSRNEKILIT-*BRANCHIFTHEFHSTASKISNOTINTHESYSTEMMOVE.LA0,WUFHS(A2)MOVE.LA1,WUFHS+4(A2)$*SETFHSTASKIDINPARAMETERBLOCKLEAGPBUFR(A2),A0MOVE.L#FMSID,A1MOVE.L#IOSESS,D0.*ESTABLISHPARAMETERSFORGETTASKIDROUTINE"*A0=GETTASKIDPARAMETERBLOCK*A1=TASKNAME*D0=TASKSESSIONNUMBER BSRGETTSKID*OBTAINFMSTASKIDBMI.STMPL0200&*BRANCHIFTHISISAROMBASEDSYSTEM BSRNEKILIT"*BRANCHIFFMSTASKNOTINSYSTEMMOVE.LA0,QEVPRM(A2)MOVE.LA1,QEVPRM+4(A2)$*SETFMSTASKIDINPARAMETERBLOCK TMPL0100:RTS TMPL0200:MOVE.L#-1,. QEVPRM(A2)1*SETFLAGTOINDICATETHISISAROMBASEDSYSTEM*FMSDOESNOTEXISTINSYSTEM.BRA.STMPL0100*RETURNPAGE* *ROUTINETO*GETASQFORIOS*@*ASSUMPTION-POSITIONALLYTHISROUTINEORIGINALLYFOLLOWEDTHE4*CLEARINGOFTHEIOSDATABUFFERCONSEQUENTLYITIS1*ASSUMEDTHATTHEGENERALPURPOSEDATABUFFERIS2*ZERO'DOUT.IFTHECALLTOTHISROUTINEISMOVED5*ITMAYBENECESSARYTOZEROOUTTHEGENERALPURPOSE5*DATABUFFERPRIORTOEXECUTINGTHEMAINLOGIC.THIS7*WASNOTDONEONASTANDARDBASISINORDERTOCUTDOWN*ONLOGICCODESPACE**INPUT"*A2=ADDRESSOFIOSDATASEGMENT**OUTPUT *IOSHASASQ**REGISTERALTERATION*A0=DESTORYED*A6=DESTORYED*D0=DESTORYED* *CONDITONS*ZERO==>ASQALLOCATED-*NON-ZERO==TASKWILLSELFABORTVIAKILLER*GETASQ:LEAGPBUFR(A2),A0!*A0=ADDRESSOFPARAMETERBLOCK"*(GENERALPURPOSEDYNAMICBUFFER)=MOVE.B#AQSTQE+AQSTME+AQSTRD+AQSTSD+AQSTBV+AQSTRI,ASQSTA(A0)#*SETASQSTATUSINPARAMETERBLOCK*BITMEANINGASSELECTED*0ENABLEASQ*1ENABLEDEFAULTINPUTBUFFER*2ASRDISABLED*3DISABLEREGISTERSTACKING**4DEFAULTRECEIVINGINPUTBUFFERDEFINED*5NOASRDEFINEDMOVE.L#EVULEN+IOSNLN,D0*D0=MAXIMUMMESSAGELENGTH#*ALSOUSEDTODETERMINEASQLENGTHMOVE.BD0,ASQMML(A0)MOVE.LD0,ASQQLN(A0)*SETRESPECTIVELY*MAXIMUMMESSAGELENGTH+*ASQLENGTH(PAGEALLOCATIONTO256BYTES)LEAARQUE(A2),A6MOVE.LA6,ASQASR+4(A0)-*A6=ADDRESSDEFAULTRECEIVINGINPUTBUFFERMOVE.L#GTASQ,D0*D0=GETASQDIRECTIVETRAP#1*ALLOCATEASQ BSRNEKILIT*IFERRORTERMINATETASKRTSPAGE**ACCESSPERMISSIONMAPTABLE** *TABLEENTRY**TYPEPERMISSION2BYTES*READVALUE2BYTES*WRITEVALUE2BYTES**!ACPTBLDC.WFOPPR,1,0PUBLICREADAPTELEQU*-ACPTBL%*SIZEOFASINGLEENTRYINTHETABLEDC.WFOPER,-1,0EXCLUSIVEREADDC.WFOPPW,0,1PUBLICWRITE DC.WFOPEW,0,-1EXCLUSIVEWRITE+DC.WFOPPRPW,1,1PUBLICREAD,PUBLICWRITE/DC.WFOPPREW,1,-1PUBLICREAD,EXCLUSIVEWRITE/DC.WFOPERPW,-1,1EXCLUSIVEREAD,PUBLICWRITE3DC.WFOPEREW,-1,-1EXCLUSIVEREAD,EXCLUSIVEWRITE ACPTBLNEQU**TABLETERMINATORPAGE* *ATTRIBUTE/FUNCTIONCHECKTABLE* ATFCHKDC.WIOREADREADFUNCTIONDC.BDATRED,-1DC.WIOWRITWRITEFUNCTIONDC.BDATWRT,-1DC.WIOOWINOUTPUTWITHINPUTDC.BDATIND,-1DC.WIOUPDRUPDATERECORDDC.BDATWRT,-1DC.WIODELRDELETERECORDDC.BDATWRT,-1DC.WIOFRMTFORMATDISKDC.BDATRAN,-1DC.WIOTBRKTRANSMITBREAKDC.BDATWRT,DATIND,-1,-1.DC.WIOSTATSTATUS/CONFIGURATIONINFOREQUEST DC.B-1,-1'DC.WIOCNFGCONFIGUREADEVICEREQUEST DC.B-1,-1DC.WIOHALTHALTI/ODC.BDATHIO,-1DC.WIOPOSTPOITIONDC.BDATPOS,-1DC.WIOREWDREWIND DC.B-1,-1DC.WIOTESTTESTI/OCOMPLETE DC.B-1,-1DC.WIOWAITWAITONLY DC.B-1,-1DC.WIOBRKSBREAKSERVICE DC.B-1,-1"DC.WIONBRKSNEGATEBREAKSERVICE DC.B-1,-1(DC.WIOCEVNTSCLAIMDRIVEREVENTSEVENTDC.B-1,-1EVENT/DC.WIONEVNTSNEGATECLAIMDRIVEREVENTSEVENTDC.B-1,-1EVENTATFENDEQU*ENDOFTABLEDC.L0KEEPITPOSITIVEPAGE**ATTRIBUTE/OPTIONCHECKTABLE** *TABLEENTRY*4BYTESOPTIONBITPATTERN)*2BYTE0-->EDITFORTHEOFFCONDITION"*1-->EDITFORTHESETCONDITION$*1BYTE-1-->NOFUNCTIONTOCHECK*VALUE-->FUNCTIONTOCHECK *1BYTE-1-->ENTRYTERMINATOR**ATOCHKDC.LIOPBINBINARYDC.W1DC.BDATBIN,-1DC.LIOPIMGIMAGEDC.W1DC.BDATIMG,-1DC.LIOPBRKBREAKNOTIFICATIONDC.W1 DC.B-1,-1DC.LIOPNECECHOMODEDC.W1 DC.B-1,-1DC.LIOPCADCOMPLETIONADDRESSDC.W1 DC.B-1,-1DC.LIOPPOSRANDOMDC.W1 DC.B-1,-1DC.LIOPTSKTASKSUPPLIEDDC.W1DC.BDATRAN,-1DC.LIOPINMINPUTIMAGEDC.W1DC.BDATIMG,-1O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/ >>>>>>>"*REMOVED--NOWISANORETRYBIT"*DC.LIOPSMPSECONDARYMEMORYMAP*DC.W1*DC.BDATRAN,-1O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ATOENDEQU*ENDOFTABLEDC.L0KEEPITPOSITIVEPAGE**SUPPORTTABLES***IOSFUNCTIONCODELEVELTABLE*=CMDTABDC.LLVL0CDDEVICE/FILEFUNCTIONS-DATATRANSFERRQST2DC.LLVL1CDUTILITYFUNCTIONS-COMMANDFUNCTIONS2DC.LLVL2CDUTILITYFUNCTIONS-COMMANDFUNCTIONS$*LEVEL2ISANEXTENSIONOFLEVEL1/DC.L0,0,0,0LEVELS4,8,10,20NOTUSEDLEVEL40,DC.LLVL40CDNON-VALIDATEDCOMMANDSLEVEL40"DC.LLVL80CDPRIVILEGEDFUNCTIONS**LEVELZEROEXECUTORS LVL0EXDC.LDXFERREADDC.LDXFERWRITEDC.LDXFEROUTPUT-INPUTDC.LDXFERUPDATERECORDDC.LDELRECDELETERECORDDC.LFORMATFORMATDISKDC.LTX_BREAKTRANSMITBREAKDC.L0RESERVED**LEVELONEEXECUTORS*LVL1EXDC.LPOSTPOSITIONDC.LPOSTREWINDDC.LTESTIOTESTIOCOMPLETEDC.LWAITIOWAITONLYDC.LHALTIOHALTIODC.LBRKSRVBREAKSERVICE.DC.LUDVR_CFGUSERDEVICEREQUESTFORCURRENT*CONFIGURATIONINFORMATION7DC.LUDVC_CFGUSERDEVICECHANGECONFIGURATIONREQUEST**LEVELTWOEXECUTORS*7LVL2EXDC.LN_BRKSRVNEGATELOCALBREAKCLAIMERREQUEST'DC.LCLMDREVCLAIMDRIVEREVENTSEVENT/DC.LNCLMDREVNEGATECLAIMDRIVEREVENTSEVENTDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSED**LEVEL80EXECUTORS*$LVL80EXDC.LBREAKSUNCLAIMEDBREAKS9DC.LSDV_CDCFSYSTMRQST-CHGDEVDEFAULTCONFIGURATIONDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDDC.L0NOTUSEDPAGE GSEGPBLK:DC.L0 *TASKNAMEDC.L0*TASKSESSIONNUMBER DC.W$2000*DIRECTIVEOPTIONS-*BIT13-LOGICALADDRESS=PHYSICALADDRESSDC.W$0*SEGMENTATTRIBUTES DC.B'IOSD'*SEGMENTNAMEDC.L$0 *PHYSICALADDRESSIFAPPLICABLEDC.LGSEGSIZE*SEGMENTBYTESIZEPAGEPRGMSIZEEQU*-IOSENTPAGE ENDIOSENTa1FHS ASREL'DEVICE FHS SA!(VERSAdos File Handling Services Task V 4.0 - 09/13/82H2pGETTSKID pLUNS pTEL02 pTEL05 pSIGFMS pTELFMS  F3``bFHSD120384 4,HApNAga0$H <nBSf%J$O&aa&AF3$p3NAg gH瀀0|0<NA,RA,p&NAgaBj,IZ,F3 f,$ ff a AaJgA2, aJg aF3 ja ` VJ,g ,g KrJk BJgJgJf :JgF3 4 PNRJ g $` ,(m HBa LJmf AC4gF3g `B-aJgk Ug 6hg`aJf2Af BF3A,rAB4gFgJg>` JSk ~` P5B*NJga ` h*,I3g B4**g RrAr`a Xa ` >B2A@f$ -&gBaBg F3g |` *a ` B-aFJk f :`.B-a0Jk f $J-f I3,g a JgZ6hhR6x 2-AhaBfa (`F3 /6hhS6x B6ha   g ` a a fJg a aF3 ` 2-A f 6X$f|26X$g f Ra rJ/ f BF3a Jf &"6X g ga f,`"a Jf -h6hF3hR6x a Xa P` B-a Jk g 6hf fI3@aB~fa ` /` *6ha 6ha2-Aa RJCgvX!JDgvF3X a Jf ta Jf Xa Jgvha Jga^` Rha aI3 ` B-a PJk (g D6hf Hf 6hf aBfa fF3`/`TJl f a Jf Ara Jf a Jg a *6h-F3Xa "a `B-a Jk g 6hf f 6hf I3@aB>fa `N/`*6hJl f Ra Jf `a = Xa a `F3B-a VJk .g J6hg,g*6h$6Xg JvXo` 2a6aI3a ``a(haBfa H`6hh/`*6hgF3ha 0<NAa`fhNua*6h6haaZaNua BF36Xf6XgBXb` vXbJCfJDgSfJCgjB`DCvX"JDgjB`F3DDvX =X"=X NuJX f."6XfJ6XPg0-@fa` gI3@aBNu6h$g vhBZB^hBhBvhB6L3hS6x NuaBvf Ba`/`B-a Jkg6hfaBBF3fa`R/`a`D ,(mBarA x4Bg JBf.Jg*F3`JSk"` PNJgaZ`6hg`aa>`JmfBI3-a Jgk6hfaBfa@`/`.*6h6ha"6XF3JCfJDf;A ,E;n"+n$vX$+vXA!M!l1|F3(A0<NAga~a`BJmfPB-atJoL6hf46I3haJCg>aBfa`/`~Ja2- Ag Ag2 Ag,raI3.`BaBg` fa&`aa `B&A1| G2!K!mF3B"R"i$4-* gZ"6X Bf gDRj(`  g8Rj( d.Rj&&F3XvX% A0<NAg ra`DC  "vX`M&!N!lF3 1|A0<NAf`Jf+l+l `H,J f+l `I3 , gf&gfAD"m - aBf+HAA0<F3NAf%H.B-a2-AfJgk6hfB2-AF3g6ha8JDkzJCkt"*.g ,gD&(Aa@Jg"*F3.HAAafB-aFJkf:J-f"*.g-8h-F38hR6x B2-AfFGaFG`JkfJ-f,gF3,g&(AaJg"*.HAAaf|B-aJg~F3kz6hfnfff^HB2-Ag6ha JDkPJCF3kJL-h8-h8R6H B2-Afa FG6hg62-Ag$F3aJ*6h6haJCgRvX"JDgRvX aFa>`h2-AgaL3B` FGaBvFGfa`/2-Af-h8-h8R6H a`JF3` ,mBa grA4BgJBfDJg> PNJSF3k2`BaagraV` ,m>,gBa6 gI3 $rA^4BgJBfJg PNJSk`Ba4aBg6 fF3a`aa`AaJg`~aCx, J6x g*6hfP6F3x Cx¼m` aan`a R*($gXRfBXR*6XfaaI3BBaBga`a`BNuA<| !ll 1|hBF3 ,fmgrA AMAD"|.IOSpaB^ga%HZ%I^AD"|.FMSpaB@kF3ga%Hb%IfNu%|b`AD|;pL@ !@ MZ!NpNAgaLV3Nu @ $(,048*, JvXgF3BvXX%fB6X5$.6X6x caGxºgaGaF3gar`|JvXf =Xa-XLaJf `r ,m 2-AF3g",g f ,$m Jmf |agk v` a F3g `Jf Za 8Jgk \` JA`6hg 6X$g Ug &F3"- m "- f  Uf"-o f Jo 6hfaI3 @6XgB`a &26X$g f Jf Ugf JvXftF3=Xh-XX+-XLaa RgaHJg BvXBXB6X+6hF3ha ` ha @gJf2-Aga `^Jf b2-AF3f Ja taL/a f 6h6hga p`a p`AD!vX&F3!l!l !E!lBhlap6Xg66XgB6XQ,E%n( U@g Uf ,E%n(J(I3ga >B(Nu`/ AN"vX paB"ga%H%I"_Nu|%EaAF3p#NAg g f |d0<NA`pNuHB*, kr,EI30 0SfL`Nu6hfa &`B` ,mJmfaRgk`F3a Jgk`AN fAdB4BgJBftJgn PNJRF3 g^`aAa fB-a JkgBNupNupNu6hfaI3@`Bar26X$ 6X$gg&JvXf*JXf"0 @fBX,`> @F3f 0-@` @ gX @`f"-k,E .βn-X,`6 @@f"6X,F3Sk-X,` @f"6X,R,E .βn-X,a`6hgaI3`J6hgz6hfa`B"aJvXfa`XCX0 iaF3`a"6hg6hg &laf aga`a`AD/ "JF3$KGfBB 1|`!l!l Bhl!vX&!E!J$IF3"_pr`Favr`@r`>r`8ahr`2r`0r`*rF3`$r` r`r`6hfaJ`a>r`r`ra2a,a4`r`p)` p(`p*`F3p+"jJg0<NA`Nup)` p(`p*`p+ jB0NuBB6ha Ug.F3 Ug. U@g( Ug" Ug U g UfJCgJDgNuJCgNuJDg Nu fH3NupNuBBA46hB2XgJk`Jk*VgH`kgB`A 2-&H3JXgƁf`ƁgJk`*d`Bkg`JjJ`pNupNu"j.)F3g"xf "(xg.6xfpNuB6x bCx, )fNupH3Nup*6hNuA B(Pf 6(8(Nu* d` .IOSX f XF3Nu6Xf, ga\R6XQava4`aH26X$, g`F3g46X$gf `g=X$a gBaI3Bz`:a"j"i$* g",X&f X$X$"Q`a lgJ$F3fa`%_$"j"i$* f /*$B$NuX&g"Q`a:!AX%=X`F36Xg6@B`6Bp>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *BKM7/14/83**BITTESTMACRO* BTSTMMACRO IFGE\1-16OPTMEXBTSTW#\1-16,\2(\3,\4) OPTNOMEXENDC* IFLT\1-16OPTMEXBTSTW#\1,\2+2(\3,\4) OPTNOMEXENDCENDM *BKM7/14/83O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PAGE XDEFTEL02 XDEFTEL05 XDEFTELFMS XDEFSIGFMSPAGE**GENERALEQUATES**(PBCLNEQU14PARAMBLOCKCONSTANTLENGTHTFILEQU$26TEMPORARYFILEPAGEINCLUDETEMPLATE.FHS.AIPAGE SECTION0 DC.B'FHSF'DC.L'1203844'**TELFMS**REV.1.006/15/79(JIMSMITH)*&*THISROUTINEISCALLEDTONOTIFYFMS*OFACOMMANDREQUEST.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=FHCBPOINTER *A6=ZERO*A7=STACKPOINTER*A2=FHSDATASEGMENTADDRESS*D6=LUNPOINTER*D7=LUTPOINTERR* *EXIT:SAME*D0=0=SUCCESSFUL*1=NOTSUCCESSFUL**USING:01234567 *DRPP *A*PPPP*****6TELFMSLEAQEVBLK(A2),A0SETUPPOINTERTOPARAMBLOCK+i48O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#*MOVE.L#FMSID,0(A0)SETUPFMSIDMOVE.LFMSTSKID(A2),(A0)MOVE.LFMSTSKID+4(A2),4(A0) *SETTASKIDINPARAMETERBLOCKO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MOVE.B #FHLEVT,EVSUB(A2)TEL02:LEAEVLEN(A2),A6MOVE.LA6,QEVPKT(A0)%*A6=ADDRESSOFEVENTTOBEPROCESS SUB.LA6,A6 *A6=ZERO(MOVE.LD6,LUNREG(A2)SETUPLUNPOINTER(MOVE.LD7,LUTREG(A2)SETUPLUTPOINTERTEL05:CMP.L#-1,(A0) BEQ.STEL30*BRANCHIFROMBASEDSYSTEM*FMSDOESNOTEXIST&ERQ.QEVNT(A0)SENDEVENTTOWHOMEVER*"CMP.B#RTCDENAB,D0ASQDISABLED?BEQ.STEL10YESCMP.B#RTCDTFUL,D0ASQFULL?BNE.STEL20NO#TEL10ERQ.DELAY#20GIVEUPCONTROLLEAQEVBLK(A2),A0BRA.STEL05TRYAGAIN$TEL20TST.LD0RESETCONDITIONCODES RTSRETURN TEL30:MOVE.L#$18000003,D0*FORCE#*D0=NON-EXISTENTTASKERRORCODE BRA.STEL20PAGE**SENDSTATU2 SEVENTTOFMS*6SIGFMSLEAQEVBLK(A2),A0SETUPPOINTERTOPARAMBLOCKO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#*MOVE.L#FMSID,0(A0)SETUPFMSIDMOVE.LFMSTSKID(A2),(A0)MOVE.LFMSTSKID+4(A2),4(A0) *SETTASKIDINPARAMETERBLOCKO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.B#STAEVT,FMSUB(A2)LEAFMSEVT(A2),A6*MOVE.LA6,QEVPKT(A0)SETUPEVENTPOINTER SUB.LA6,A6 *A6=ZERO(MOVE.LD5,FMSDCB(A2)SETUPDCBPOINTER BRA TEL05END=/*=/*FILE.IOS.AF=/*?=/* Chain file to assemble I/O Trap 2 server 'IOS' file portion=/*:=/* If no output argument is specified for the listing the*=/* chain file will default to FILE.IOS.LS=/*=/IFC \1=ARGFILE.IOS.LS=/ENDIF=/*&=ASM FILE.IOS.SA,FILE.IOS.RO,\1;RZ=166=/*{ Included files are:=/*9995.&.TR1.EQ=/*9995.&.TR1RTCD.EQ=/*9995.&.EXE.EQ=/*9995.&.IOE.EQ=/*9995.&.NIO.EQ=/*9995.&.LV5.EQ=/*9995.&.FME.EQ=/*9995.&.FMI.EQ=/*TEMPLATE.IOS.AI=/*}=/*=END<OPTCREF***********************************************************************&*VERSADOSOPERATINGSYSTEM-OEMRTOS* *I/OMODULE**IOSTRAP2SERVER*FILEPORTIION$*COPYRIGHTED1980BYMOTOROLA,INC.*F**********************************************************************PAGE***INCLUDESTATEMENTS*EXE*FME*FMI*IOE*LV5*TR1 *TR1RTCD*NIO*NOLISTINCLUDE9995.&.TR1.EQINCLUDE9995.&.TR1RTCD.EQINCLUDE9995.&.EXE.EQINCLUDE9995.&.IOE.EQINCLUDE9995.&.NIO.EQINCLUDE9995.&.LV5.EQINCLUDE9995.&.FME.EQINCLUDE9995.&.FMI.EQLISTPAGEINCLUDETEMPLATE.IOS.AI SECTION0 DC.B'IOSF'DC.L'1203844'PAGE ***************EXTERNALDEFINTIONS**2 ******** XDEFSNDFMSXDEFTELLFMSL ***************EXTERNALREFERENCES********** XREFDCBSIG XREFDCBWAIT XREFERCOSNX XREFFCBSIG XREFKILIT XREFLUTSIG XREFSTARQS PAGE**SNDFMS**REV.1.007/01/79(JIMSMITH)*&*THISROUTINEISCALLEDTONOTIFYFMS*OFACOMMANDREQUEST.*!*ENTRY:A4=ASQMESSAGEPOINTER*A5=IOCBPOINTER *A6=ZERO*A7=STACKPOINTER*D5=ADDRESSFCB*D6=LUNPOINTER*D7=LUTPOINTER* *EXIT:SAME*D0=0=SUCCESSFUL*1=NOTSUCCESSFUL**USING:01234567 *DR*PP *APPPP*****SNDFMS:LEAEVNLEN(A2),A0MOVE.LA0,QEVPRM+QEVPKT(A2).*SETADDRESSOFPACKETTOUSEWITHTHISEVENT&MOVE.LD6,LUNR(A2)SETUPLUNPOINTER&MOVE.LD7,LUTR(A2)SETUPLUTPOINTERBSET#LUSFIO,LUTCSF(A6,D6.L)*SETI/OPENDINGFORTHISLUNBSETW#FCFLBB,FCBFLG(A6,D5.L)*SETI/OPENDINGFORTHISFILEBSR.SFIOS0100*QUEEVENTTOFMS BEQ.SSND30*BRANCHIFEVENTQUEDSND20BSRFCBSIG*RELEASETHEFCBLIST BSRLUTSIG)*RELEASETHELOGICALUNITTABLERESOURCE BRAERCOSNX-*JUMPBECAUSEOPERATINGSYSTEMTASKFMSDOES *NOTEXIST***!SND30BSRFCBSIGRELEASEFCBLISTE}NYV BRASTARQSPAGEI*************************************************************************** *NOTIFYFMS***J***************************************************************************1TELLFMSLMOVE.LD5,DCBADDR(A2)SETUPDCBADDRESS*MOVE.B#STAEVT,SUBEVC(A2)SETUPSUBCODE3*SETUPRESPECTIVELYINTHEEVENTINFORMATIONBLOCK*THEDCBADDRESS*THESUBCODEBSR.SFIOS0100*QUEEVENTTOFMSBEQ.STELLFCT01)*JMPIFEVENTQUEUEDTOFMSSUCCESSFULLY BSRDCBWAIT*LOCKTHEDCBRESOURCELISTBCLRW#DFLGSC,DCBFLG(A6,D5.L)BCLRW#DFLGWP,DCBFLG(A6,D5.L)*REMOVESTATUSCHANGEDFLAG*WRITEENABLEDISK BSRDCBSIG*RELEASEDCBRESOURCELIST TST(A7)*FORCENOTEQUALCONDITION TELLFCT01: RTSRETURNPAGE* *Routineto*QueaneventtoFMS*A*Thisroutineexpectsthateverythingisalreadysetupandwill*initiatethecallonly.**Thereisonlyonebadreturn.*TheoperatingsystemtaskFMSdoesnotexistB*ANYothererrorconditionotherthanabovewillcauseanorderly*systemcrash**INPUT"*A2=ADDRESSOFIOSDATASEGMENT**OUTPUT!*A0=ADDRESSOFPARAMETERBLOCK*D0=STATUSOFREQUEST**REGISTERALTERATION*A0=DESTROYED*D0=DESTROYED**CONDITIONCODES5*NOTEQUAL=OPERATINGSYSTEMTASKFMSDOESNOTEXIST*EQUAL=EVENTWASQUEUED* FIOS0100:LEAQEVPRM(A2),A0!*A0=ADDRESSOFPARAMETERBLOCKCMP.L#-1,(A0)BEQ.SFIOS0299*JMPIFAROMBASEDSYSTEM*FMSDOESNOTEXISTMOVE.L#QEVNT,D0*D0=DIRECTIVENUMBERTRAP#1*QUETHEEVENTTOFMSBEQ.SFIOS0400)*JMPIFEVENTQUEUEDTOFMSSUCCESSFULLYCMP.B#RTCDENAB,D0BEQ.SFIOS0200*JMPIFASQENABLEDCMP.B#RTCDNTBL,D0BEQ.SFIOS0200*JMPIFASQNOTSETUPYETCMP.B#RTCDTFUL,D0BEQ.SFIOS0200*JMPIFASQFULLCMP.B#RTCDTASK,D0BEQ.SFIOS03001*JMPIFOPERATINGSYSTEMTASKFMSDOESNOTEXIST BSRKILIT'*KILLTHESYSTEMINANORDERLYFASHION FIOS0200:ERQ.DELAY#100*DELAY BRAFIOS0100 *TRYAGAIN FIOS0299:MOVE.L#$18000003,D0*FORCE#*D0=NON-EXISTENTTASKERRORCODE FIOS0300: TST.L(A7)"*SETCONDTIONCODESFORNONEQUAL FIOS0400:RTS*RETURNTOCALLERPAGEEND3 a1FHS ASREL'FILE FHS SA!(R(VERSAdos File Handling Services Task V 4.0 - 09/13/82B2@TEL02 @TEL05 2@SIGFMS l@TELFMS F3FHSF120384 4A* b!jf|RMP!N %FT%GX g*A0<#F3NA g f |0<NAA*`JNu <`A* b!jf|>3MgAvF30<6NA=|~af.gaafG:ELg,af|ւF3S<arflaPfdGAeaxafNNuBnl.>g-|@F3N|SANNCg.-@NunAT-|N|SHVANNCg-@Nu2.F3PA Ag -|NuDNu-|NANNCNuBA -HA -HF3ANBfR-@Nu. f-n&=n<n6n0.>f-n F3"f-n&f=n*f LH,fn4fnF352.JngB.F3(.@c.@JgH-nJ-n"-n&-n$-@A0<NAgF3V-@Nu.gJngB &SCTg-nA0<NAE"CF30<)4Q=n<-n&A -HJ ><?BB|a> .F3g nfPR"SGf`F-n"-n&A0< NAf.=|~0<NAAv0<6G3NAg A0<5NA |0<%NAA0< NA~#)taZACajACI3a` .IaBA-HA-HANBJgA-HA"-HANBF3ANC`nC-n-YkANCfNu2< c {c< SAfF3Nu0 :m^SBfNuHK I0BBBB g aa:F3afI`L8NuL Ѕc)@ , DЬ (,*Nu ЇF3bc٭be٭Nu$&և"Gp ,3gRSbke  f[[`G`Nu4'NOMMU LOADER AFqqLOADER SAqqLOADER LGqqLOADER RO qq=/*=/*NOMMU.LOADER.AF=/*<=/*THISCHAINFILESHOULDBEUSEDTOCREATEAN'.RO'LOADER=/*MODULEFOR=/*SYSTEMSNOTHAVINGAN'MMU'=/*'=/*PARAMETER01LISTINGFILEORDEVICE)=/*IFNOARGUMENTSPECIFIEDTHEASSEMBLY2=/*WILLDEFAULTOFLISTINGFILE'NOMMU.LOADER.LS'=/*=/*=/IFC \1=ARGNOMMU.LOADER.LS=/ENDIF:=ASMNOMMU.LOADER.SA/&.LOADER.SA,NOMMU.LOADER.RO,\1;RZ=110=/*{ Included files are:=/*9995.&.EXE.EQ=/*9995.&.IOE.EQ=/*9995.&.TR1.EQ=/*9995.&.TR1RTCD.EQ=/*9995.&.TCB.EQ=/*}=END5 4MMUFLAGEQU1MMUFLAG=0MMUEXISTS,MMUFLAG=1NOMMU=/*=/*NOMMU.LOADER.LG=/*2=/* Link chain file run at sysgen time to link LDR=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter LDRSTR = \LDRSTR = address at which to link driver=/*=LINK ,&.LDR.LO,\LINKLS;HAMIXSSEGMENT &LDR:0 \LDRSTRINPUT NOMMU.LOADER.ROINPUT &.EMHNDLR.ROEND=/*=END6 ,1LOADER ASREL' LOADER SA!6C(2PMOVEBLK :pERRMSGHA PPOOLTABL @TAKELUN @TAKELUN2 PPLUGPOOL V@TASKLIST lPEPBRA0 &PEPBLDF +PEPBRD0 "pBI2HEX4 PA0BLK  PEPBOPT *PEPBLTH @CLSFHS DPCLUFHS @LDRBEG 2PLIBBUF  PERQMPB @LDRRTN @PEPBPLUGB .PEPBPLUGE 2PATTRCOD @MOVASC1 PCHLUFHS PATTRFHS PEPBQUERY , F3 DLDRTDMP`wF3  TASKDUMPSY&SCT&BCTSRV4H3: UNABLE TO LOAD TASKDUMP.SY *dT`AI3 )|* : ABORTED BY F3 = A0<NAf,HO0<BQApC0<72QA"-HF3=|,=||l-|AR-HA`-H-|&SCTBnA 0<F3NAf"A0<3NAf |0<!NAf0<$NA`0|0<NAA 0<"NA |F30<%NAA 0<"NAf . f.  fL=|h~Hv|I3 |B. fd . @g @gB-|ad`=|,atJn~k,F3H-nA0<NAAv0<6NAg A0<5NA |0<%NABn*A"F30<NAaA0<NA|Jnf =n| Nua~f.>gAvF30<6NA=|~af.ga2afG:ELg,af|ւF3S<afla~fdGAeaxafNNuBnl.>g-|@F3N|SANNCg.-@NunAT-|N|SHVANNCg-@Nu2.F3PA Ag -|NuDNu-|NANNCNuBA -HA -HF3ANBfR-@Nu. f-n&=n<n6n0.>f-n F3"f-n&f=n*f LH,fn4fnF352.JngnB.(.@c.@JgXF3H-nJ-n"-n&-n$-@A0<NAg(-@Nu.gF3JngB &SCTg-nA0<NAE"Cf0<)4Q=n<-nF3&A -HJ ><?BB|a> .g nfPR"SGfF3`F-n"-n&A0< NAf.=|~0<NAAv0<6NAg A0<5NA |J30<%NAA0< NA~#)taZACajACa` .IaB|AF3-HA-HANBJgA-HA-HANBANC`nC-nF3-YkANCfNu2< c {c< SAfNu0 :F3m^SBfNuHK I0BBBB g aa:afI`L8NuLF3 Ѕc)@ , DЬ (,*Nu Їbc٭F3be٭Nu$&և"Gp gRSbke 3 f[[`G`Nu4'RR FIOEQU SA 4qqFPMACRO SABqqMACROS SAUqqRTEQU SA''qqVDOSVM SA@@qq+********************************************* PASCAL FILE I/O EQUATES** COPYRIGHT 1982 MOTOROLA, INC.**VERSION2.01:4-19-82** 1980-04-11 : JOHN KAUFMANN*+********************************************%*DATASTRUCTURESANDEQUATESFORI/O**$*FHSPARAMETERBLOCKDATASTRUCTURE* OFFSET0FHSCMDDS.W1COMMANDFHSOPTDS.W1OPTIONSFHSSTADS.B1STATUS!FHSLUNDS.B1LOGICALUNITNUMBERFHSVOLDS.B4VOLUMENAMEFHSUSNDS.W1USERNUMBERFHSCLGDS.B8CATALOGNAMEFHSFILDS.B8FILENAMEFHSEXTDS.B2EXTENSIONFHSGENDS.W1RESERVED FHSWCDDS.B1WRITEPROTECTCODEFHSRCDDS.B1READPROTECTCODE#FHSLRLDS.W1LOGICALRECORDLENGTH7FHSSIZDS.L1CONTIGUOUSFILESIZE/DIR.ENTRYPOINTER* FOR NONCONTIGUOUS FILESOFFSETFHSSIZFHSRESDS.B1UNUSED'FHSKEYDS.B1KEYLENGTH(0IFNOKEYS)FHSFABDS.B1FABSIZEFHSDATDS.B1DATABLOCKSIZE"FHSBLNEQU*LENGTHOFPARAMBLOCK**FHSCMDEQUATES(16BITS)*'FHALLOEQU$80ALLOC7 ATE(CREATEAFILE)FHASGNEQU$40ASSIGN(OPEN)FHCLOSEQU$4CLOSEFHDELTEQU$2DELETE#FHRATTEQU$180RETRIEVEATTRIBUTES**EQUATESFORLUASSIGNMENTS* CDFLUNEQU5CMDDEVICE/FILELUN LDFLUNEQU6LOGDEVICE/FIELLUN**FHSOPTEQUATES(16BITS)#*ACCESS PERMISSION FIELD (BITS 0-2)*)FAPBIT EQU $7 BITS FOR ACCESS PERM. FIELDFOPPREQU0PUBLICREADFOPEREQU1EXCLUSIVEREADFOPPWEQU2PUBLICWRITEFOPEWEQU3EXCLUSIVEWRITEFOPPRPWEQU4PUBLICREAD-WRITE*FOPPREWEQU5PUBLICREAD,EXCLUSIVEWRITE*FOPERPWEQU6EXCLUSIVEREAD,PUBLICWRITE"FOPEREWEQU7EXCLUSIVEREAD-WRITE**OVERWRITE FIELD (BIT 3)FOPOVRTEQU8OVERWRITEFILE*$* ALLOCATE DATA BUFFER FIELD (BIT 5)*FOPABF EQU $20 ALLOCATE SHARED DATA BUFFER**POSITION FIELD (BIT 6)*FOPBEG EQU 0 POSITION AT BEGINNING OF FILE&FOPEND EQU $40 POSITION AT END OF FILE*!*RESERVED FIELD (BITS 7 NOT USED)**FILE TYPE FIELD (BITS 8-10)"FFTBIT EQU $700 BITS FOR FILE TYPEFOPCONEQU0CONTIGUOUSQNGI$FOPSEQEQU$100SEQUENTIAL(FRL/VRL)CFOPISKEQU$200KEYEDRECORD,INDEXEDSEQUENTIAL,NODUPLICATEKEYS,FOPISDEQU$300",",DUPLICATEKEYSALLOWED*!*RESERVED FIELD (BIT 11 NOT USED)*#*USER ATTRIBUTES FIELD (BITS 15-12))FUSBITEQU$F000BITSFORUSERATTRIBUTES**FHSSTAEQUATES(8BITS)*"FSTADNMEQU$5DUPLICATEFILENAMEPAGE**IOSPARAMETERBLOCKSTRUCTURE* OFFSET0IOSFCTDS.W1FUNCTIONIOSOPTDS.W1OPTIONSIOSSTADS.B1STATUS!IOSLUNDS.B1LOGICALUNITNUMBERIOSSRVDS.B1RESERVED IOSPKLDS.B1PARTIALKEYLENGTH.IOSRRNDS.L1RANDOMRECORDNUMBER:LRNORLSN"IOSSADDS.L1STARTBUFFERADDRESS IOSEADDS.L1ENDBUFFERADDRESS IOSLENDS.L1LENGTHOFTRANSFER IOSCADDS.L1COMPLETIONADDRESS"IOSBLNEQU*LENGTHOFPARAMBLOCK**IOSFCTEQUATES(16BITS)*IOREADEQU$1READREQUESTIOWRITEQU$2WRITEREQUESTIOREWDEQU$102REWIND**IOSOPTEQUATES(16BITS)*IOPASCEQU0ASCIIIOPWAT EQU 0 WAIT"IOPUNPEQU0UNCONDITIONALPROCEEDIOPFOREQU0FORMATTEDIOPECH EQU 0 ECHO MODEIOPRECEQU0RECORDACCESSIOPLRNEQU0LOGICALRECORDIOIOPKEYEQU0FULLKEYACCESS"IOPNOCEQU0NOCOMPLETIONADDRESSIOPINF EQU 0 INPUT FORMATTEDIOPBINEQU1BINARY6IOPPOSEQU$6000BITS13-14:LOGICALACCESS/POSITIONIOPNXTEQU$0NEXT(FORWARD)/>%IOPCUR EQU $2000 CURRENT POSITION / ='IOPPRVEQU$4000PREVIOUS(BACKWARD)/<2IOPRANEQU$6000RANDOM(LRNORLSNGIVEN)/>OR=**IOSSTAEQUATES(8BITS)*ISTAEOFEQU$C2ENDOFFILEPAGE*"*SEGMENTDIRECTORPARAMETERBLOCK* OFFSET0%SEGTCBDS.B4TASKTORECEIVESEGMENT!SEGSESDS.B4TASKSESSIONNUMBERSEGOPTDS.W1OPTIONSSEGATTDS.W1ATTRIBUTESSEGNAMDS.B4SEGMENTNAME(SEGLADDS.L1LOGICALADDRESSOFSEGMENT*SEGLENDS.L1LENGTH(INBYTES)OFSEGMENT)SEGPTRDS.L1POINTERTORECEIVINGBUFFER*&*RECEIVINGBUFFERFOR'REC.SEG.ATTR.'* OFFSET0SRENAMDS.B4SEGMENTNAMESREATTDS.W1ATTRIUBTES#SRELSADS.L1LOGICALSTARTADDRESS!SRELEADS.L1LOGICALENDADDRESSSREPADDS.L1PHYSICALADDRESSSRELENDS.L1LENGTH* *EQUATESFOR'SEGATT'(16BITS)*SGATROEQU$4000READONLYSGATRWEQU0READ/WRITE!SGATSSEQU$2000SESSIONSHARABLE!SGATNSEQU0NOTSESSIONSHARABLE"SGATGSEQU$1000GLOBALLYSHARABLE"SGATNGEQU0NOTGLOBALLYSHARABLE%SGATDPEQU$800SEGMENTISDUPLICATED&SGATNDEQU0SEGMENTISNOTDUPLICATED.SGATSDEQU$400SEGMENTSHARABLEIFDUPLICATED/SGATNNEQU0SEGMENTNOTSHARABLEIFDUPLICATED* *EQUATESFOR'SEGOPT'(16BITS)*8SGOPATEQU$800015ATTRIBUTESGIVEN:TRSEG,DCLSHR,SETSAASGOPLAEQU$400014LOGICALADDRESS(NOTNAME):TRSEG,SETSA,RCVSADSGOPPAEQU$200013SETLOGICALADDR.=PHYSICALADDR.(RETADRINA0):!*GTSEG,TRSEG,ATTS7 EG,SHRSEG,SETSA0SGOPSPEQU$100012MAKEPERMANENT:DCLSHR,SETSA8SGOPRPEQU$080011REMOVEPERMANENTSTATUS:DESEG,SETSA1SGOPSLEQU$040010SEGMENTLENGTH:SHRSEG,ATTSEG;SGOPLGEQU$02009ALLOCATENEXTLARGERBLOCKIFSIZEERRORPAGE**TRAP1EQUATES*GTSEGEQU1ALLOCATESEGMENTDESEGEQU2DEALLOCATESEGMENT"RELINQEQU22RELINQUISHEXECUTION'RCVSAEQU9RECEIVESEGMENTATTRIBUTESABORTEQU14ABORTTASK(SELF)+RBETLFEQU26RECEIVEBUSERRORTHRULINEF&RT2TFEQU27RECEIVETRAPS2THROUGHFSPC10*$* VECTOR TABLE FOR TRAPS 2 THROUGH F* OFFSET0 VT2TFDS.L11TRAPDDS.L1TRAPDTRAPEDS.L1TRAPE *3* VECTOR TABLE FOR BUS ERROR THRU LINE F EXCEPTIONS*OFFSETVT2TF+56 VBETLFEQU*BUSERDS.L1BUSERRORADDRERDS.L1ADDRESSERRORDS.L1UNUSEDZDIVDS.L1ZERODIVIDECHKIDS.L1CHKINSTRUCTIONTRAPVDS.L1TRAPVINSTRUCTIONVTABSZEQUVBETLF+40PAGE-* RUNTIME DATA MAINTAINENCE - OFFSETS FROM A5 OFFSET0SCDS.L1STATEMENTCOUNTERHPDS.L1HEAPPOINTERDL0DS.L8DISPLAYLEVEL0LTNDS.B4LOADINGTASKNAMESNDS.B4SESSIONNUMBERLUIUDS.L1LU'SINUSECCDRDS.W1CHAINCMDDIAGREGDTIDDS.B4DEFAULTTERMINALIDDVOLDS.B4DEFAULTUSERVOLUMEDUNDS.W1DEFAULTUSERNUMBERDCATDS.B8DEFAULTCATALOGCLLDS.W1COMMANDLINELENGTHCLDS.B162COMMANDLINEOFARDS.W26OPTIONFIELDARRAYDS.W1UNUSED"NFCLDS.W1NUMBEROFFIELDSINCLIENFDS.B1I=NUMBEROFFILESIECFDS.B1I=CURRENTFILEIEOFDS.B1I=OFFSET"IECODS.B1I=CURRENTFILEOFFSETOENFDS.B1O=NUMBEROFFILESOECFDS.B1O=CURRENTFILEOEOFDS.B1O=OFFSETOECODS.B1O=CURRENTOFFSET#FNNFDS.B1FIELDNNUMBEROFFILES FNCFDS.B1FIELDNCURRENTFILEFNOFDS.B1FIELDNOFFSET"FNCODS.B1FIELDNCURRENTOFFSET'DS.B4*15ABOVEINFOFOR15MOREFILESEFIEQU*ENDOFFIELDINFO"SGBRKDS.L1SEGMENTBREAKADDRESSSHPADDS.L1SMALLESTHEAPADDR2EODEQU*ENDOFDATANEEDEDDURINGINITIALIZATION&DS.B72RUNTIMEERRORROUTINESTORAGERTDSZEQU*RUNTIMEDATASIZE (* FILE POINTER - OFFSETS FROM INITIAL A0 OFFSET0$CCPDS.L1CURRENTCOMPONENTPOINTER"FDPDS.L1FILEDESCRIPTORPOINTER =* FILE PARAMETER BLOCK - OFFSETS FROM FILE DESCRIPTOR POINTER*PASCALPARAMETERBLOCK OFFSET0FPDS.L1FILEPOSITIONPFSDS.W1PASCALFILESTATUSCSDS.W1COMPONENTSIZE*IOSPARAMETERBLOCKIOSDS.BIOSBLN*FHSPARAMETERBLOCKFHSDS.BFHSBLN*MOREFILESTATUSFSRDS.W1RESERVEDFSSCNDS.B1FILESCANSTATUSFPOSDS.B1FILEPOSITION*COMPONENTBUFFERCBEQU*TXTBSEQU132TEXTBUFFERSIZE )* PASCAL FILE STATUS WORD BIT ASSIGNMENTSPFSSOEQU0STANDARDOUTPUTPFSSIEQU1STANDARDINPUTPFSTFEQU2TEXTFILEPFSLFEQU3LOCALFILEPFSIFEQU4INDEXEDFILEPFSOPEQU6OPENPFSEOFEQU7ENDOFFILEPFSEOLNEQU8ENDOFLINEPFSPAEQU9PASSEDASSIGNED'PFSAPCEQU10ACCESSPERMISSIONCHANGEDPFSCLFEQU11COMMANDLINEFILEPFSOUTEQU12OUTPUTISTATEQU$3FINITIALSTATUS * ADDITIONAL LU EQUATEMAXLUEQU31MAXIMUMVALIDLU * ERROR EQUATES OSEEQU0OPERATINGSYSTEMERROR#LUAEQU$40LOGICALUNITASSIGNMENTNAMEQU$28FILENAMEOPTEQU$41OPTIONMALEQU$12MEMORYALLOCATION:WSNEQU$13WRONGSEGMENTNAME,MUSTBE'SEG2'(VM0XONLY)%CLFEQU$42TOOMANYCMNDLINEFIELDSFNREQU$43FILENOTRESETFNWEQU$44FILENOTREWRITTENPAGE8 PAGE OPTMEX3XREF.PFPOINT!THEF_LINETRAPSIMULATINGROUTINE O******* Definition of Special FP Registers (and their bit field values) ******* CNTRLEQU0 STATUSEQU1 TMPSTATEQU2 INSTADEQU3 O******* Definition of FP instruction "data types" (size codes, bits 5-3) ****** .FP.SEQU0 .FP.DEQU8 .FP.XEQU$10 .FP.BEQU$18 .FP.WEQU$20 .FP.EQU$20 .FP.LEQU$28 .FP.PEQU$30.FP.PDYNEQU$38('K'dynamic)  PAGE FMOVEMACRONOLIST?IFC'\4','FP'.........movetoFPn.......................... !IFC'\1','FP'..notimplemented FAIL999ENDC IFC'\1','S'..notimplemented FAIL999ENDC IFC'\1','#'..notimplemented FAIL999ENDC .FP.WRD2SET$0000+.FP.\0+\5 IFC'\1','D'..Dnsource.FP.WRD1SET$F040+\2LIST********FMOVE.\0\1\2,\4\5DC.W.FP.WRD1,.FP.WRD2NOLISTENDC IFC'\1','A'..disp(An)sourceIFC'\3',''..nodisplacement.FP.WRD1SET$F050+\2LIST********FMOVE.\0(\1\2),\4\5DC.W.FP.WRD1,.FP.WRD2NOLISTENDCIFNC'\3',''..displacement.FP.WRD1SET$F068+\2LIST********FMOVE.\0\3(\1\2),\4\5DC.W.FP.WRD1,.FP.WRD2,\3NOLISTENDCENDC >ENDC...................movetoFPn........................  >IFC'\4','S'.........movetoSpecialFPReg............... !IFC'\1','FP'..notimplemented FAIL999ENDC IFC'\1','S'..notimplemented FAIL999ENDC IFC'\1','A'..notimplemented FAIL999ENDC .FP.WRD2SET$2000+\5 IFC'\1','D'..Dnsource.FP.WRD1SET$F040+\2LIST********FMOVE.\0\1\2,\5DC.W.FP.WRD1,.FP.WRD2NOLISTENDC !IFC'\1','#'..immediatesource.FP.WRD1SET$F07CLIST********FMOVE.\0\1\2,\5DC.W.FP.WRD1,.FP.WRD2 IFC'\0','L'DC.L\2ENDCIFNC'\0','L'DC.W\2ENDCNOLISTENDC >ENDC...................movetoSpecialFPReg.............  IFNC'\4','FP'IFNC'\4','S' qu]=IFC'\1','FP'.........movefromFPtomemory............. IFC'\4','#'..notimplemented FAIL999ENDC %IFC'\0\7','PD'..BCDw/'k'dynamic%.FP.WRD2SET$1000+(\8<<6)+.FP.PDYN\2ENDCIFNC'\0\7','PD'.FP.WRD2SET$1000+.FP.\0+\2ENDC IFC'\4','D'..Dndestination.FP.WRD1SET$F040+\5LIST********FMOVE.\0\1\2,\4\5DC.W.FP.WRD1,.FP.WRD2NOLISTENDC %IFC'\4','A'..disp(An)destination!IFC'\6',''....nodisplacement.FP.WRD1SET$8 F050+\5LISTIFC'\0\7','PD'"********FMOVE.\0\1\2,(\4\5),\7\8ENDCIFNC'\0\7','PD'********FMOVE.\0\1\2,(\4\5)ENDCDC.W.FP.WRD1,.FP.WRD2NOLISTENDCIFNC'\6',''....displacement.FP.WRD1SET$F068+\5LIST********FMOVE.\0\1\2,\6(\4\5)DC.W.FP.WRD1,.FP.WRD2,\6NOLISTENDCENDC >ENDC...................movefromFPtomemory.............  >IFC'\1','S'.........movefromSpecFPRegtomemory...... IFC'\4','#'..notimplemented FAIL999ENDC .FP.WRD2SET$3000+\2 IFC'\4','D'..Dndestination.FP.WRD1SET$F040+\5LIST********FMOVE.\0\2,\4\5DC.W.FP.WRD1,.FP.WRD2NOLISTENDC %IFC'\4','A'..disp(An)destination!IFC'\6',''....notimplemented FAIL999ENDCIFNC'\6',''....displacement.FP.WRD1SET$F068+\5LIST********FMOVE.\0\2,\6(\4\5)DC.W.FP.WRD1,.FP.WRD2,\6NOLISTENDCENDC @ENDC...................movefromSpecFPRegtomemory...... ENDCENDC LISTSPC1ENDM   FMOVEEMACROLIST BSR.PFPOINTNOLIST!FMOVE.\0\1,\2,\3,\4,\5,\6,\7,\8ENDM  PAGE FADDMACRONOLISTIFNC'\1\4','DFP'4FAIL999mustbe:FADDDn,FPn...\1,\2,\3,\4,\5,\6ENDCIFC'\1\4','DFP'.FP.WRD1SET$F040+\2.FP.WRD2SET$6000+.FP.\0+\5LIST********FADD.\0\1\2,\4\5DC.W.FP.WRD1,.FP.WRD2ENDCSPC1ENDM   FADDEMACROLIST BSR.PFPOINTNOLISTFADD.\0\1,\2,\3,\4,\5,\6ENDM   FMULMACRONOLISTIFNC'\1\4','FPFP'5FAIL999mustbe:FMULFPn,FPn...\1,\2,\3,\4,\5,\6ENDCIFC'\1\4','FPFP'.FP.WRD1SET$F000+\2 IFC'\0',''0.FP.WRD2SET$6080+\5defaultis"S",not"W"!!ENDC IFNC'\0',''.FP.WRD2SET$6080+.FP.\0+\5ENDCLIST********FMUL.\0\1\2,\4\5DC.W.FP.WRD1,.FP.WRD2ENDCSPC1ENDM   FMULEMACROLIST BSR.PFPOINTNOLISTFMUL.\0\1,\2,\3,\4,\5,\6ENDM   FCMPMACRONOLISTIFNC'\1\4','#FP'4FAIL999mustbe:FCMP#n,FPn...\1,\2,\3,\4,\5,\6ENDCIFC'\1\4','#FP'.FP.WRD1SET$F07C.FP.WRD2SET$6140+.FP.\0+\5LIST********FCMP.\0\1\2,\4\5DC.W.FP.WRD1,.FP.WRD2 IFC'\0','L'DC.L\2ENDCIFNC'\0','L'DC.W\2ENDCENDCSPC1ENDM   FCMPEMACROLIST BSR.PFPOINTNOLISTFCMP.\0\1,\2,\3,\4,\5,\6ENDM   FSLTMACRONOLISTIFNC'\1','D'FAIL999mustbe:FSLTDnENDC IFC'\1','D'.FP.WRD1SET$F040+\2.FP.WRD2SET$A0C0LIST********FSLT.\0\1\2DC.W.FP.WRD1,.FP.WRD2ENDCSPC1ENDM   FSLTEMACROLIST BSR.PFPOINTNOLISTFSLT.\0\1,\2ENDM PAGE6TTL68KPASCALMACRODEFINITIONSFORRUNTIMEROUTINES*<***********************************************************7**MACRODEFINITIONSFOR68KPASCALRUNTIMEROUTINES*<************************************************************FMACRO'BSR.PFPOINT!CALLTHETRAPSIMULATOR IFNC'\1','' IFNC'\2','' IFNC'\3',''3F\0\1,\2,\3!THREEARGUMENTFLOATINGINSTRUCTIONENDC IFC'\3',''.F\0\1,\2!TWOARGUMENTFLOATINGINSTRUCTIONENDCENDC IFC'\2',''*F\0\1!9 ONEAGUMENTFLOATINGINSTRUCTIONENDCENDC IFC'\1',''-F\0!FLOATINGINSTRUCTIONWITHNOARGUMENTSENDCENDM**CALLPROCEDUREMACRO* CALLMACROBSR\1!ARGUMENTSARE\2ENDM**PROCEDUREENTRYMACRO*PROCEDUREMACRO**ARGUMENTSARE\2*"DS.W0!ALIGNONAWORDBOUNDARY\1EQU*!PUTENTRYPOINTHEREENDM**PROCEDUREEXITMACRO*END_PROCMACRO RTS!RETURNTOWHOEVERCALLEDENDM*1*MACROFORROUNDINGAVALUEUPTOANEVENNUMBER* EVENMACROADDQ.\0#1,\1ANDI.\0#-2,\1ENDM*@*MACROFORCONVERTINGACHARACTERSTOREDINABYTETOUPPERCASE*UPPERCASEMACRO,IF.B\1#'a'AND.B\1#'z'THEN.SSUBI.B#'a'-'A',\1ENDIENDM*&*MACROFORWRITINGASINGLECHARACTER*WRITE_CHARMACROMOVE.B\1,(A1)CALL.PIWPTR,ENDM*!*MACROFORREADINGASINGLECHAR*GET_CHARMACROCALL.PIRPTR,\1CALL.PGETCH, UPPERCASED0ENDM*=*MACROFORGENERATINGARUNTIMEERRORFROMARUNTIMEROUTINE* ERRORMACRO&MOVEQ#\1,D0!PUTERRORNUMBERIND0TRAP#14!DOATRAP14...)DC.W0!...FOLLOWEDBYAWORDOFZEROSENDM*VTTL68KPASCALSYMBOLEQUATES* **********0*PASCALRUNTIMEROUTINESEQUATE,ANDMACROFILE* ***********GLOBALEQUATES* ***********VARIABLEOFFSETS* **********1FDPEQU4*4=OFFSETTOFILEDESCRIPTORPOINTER1PFSEQU4*4=OFFSETTOPASCALFILESTATUSWORD-CSZEQU6*6=OFFSETTOCOMPONENTSIZEWORD1BCDEQU6*6=OFFSETTOBCDBUFFERINREALREAD3HPTREQU4*4=OFFSETTOHEAPPTRINRTMAINTENCE6CCDREQU52*52=OFFSETTOCHAINCMDDIAGREGINRMA3SBPEQU20*20=OFFSETTOSTARTOFBUFFERPOINTER1EBPEQU24*24=OFFSETTOENDOFBUFFERPOINTER7BUFEQU32*32=BUFFERZONESIZEFORSTACKALOCATIONS7A5OFFSETEQU52*OFFSETTOA5REGINFPUSERREGBLOCK2LOWHEAPEQU368*OFFSETTOLOWESTADDRESSINHEAP* ***********SYMBOLICCONSTANTS* **********9RR$ERREQU0*0=#AfterTrap14meansRRroutineerror1FP$ERREQU1*1=#AfterTrap14meansFperror7FHSIOSEQU2*2=#AFTERTRAP14WHICHMEANSFHS/IOS6INLNRTEQU3*3=#AFTERTRAP14WHICHMEANSINLINE*7ABORTEQU14*14=EXECPARAMFORABNORMALTERMINATION4TERMEQU15*15=EXECPARAMFORNORMALTERMINATION'FORMEQU12*12=ASCIIFORMFEEDCODE(SPCEQU$20*$20=ASCIISPACECODE''-NEGEQU$2D*$2D=ASCIIMINUSSIGNCODE'-'-PLUSEQU$2B*$2B=ASCIIPLUSSIGNCODE'+''ZEROEQU$30*$30=ASCIICODEFOR'0''NINEEQU$39*$39=ASCIICODEFOR'9'$AEQU$41*$41=ASCIICODEFOR'A'$EEQU$45*$45=ASCIICODEFOR'E'$IEQU$49*$49=ASCIICODEFOR'I'$NEQU$4E*$4E=ASCIICODEFOR'N'$TEQU$54*$54=ASCIICODEFOR'T'$ZEQU$5A*$5A=ASCIICODEFOR'Z'=MINUS_INFEQU$B0*$B0=SIGNOFEXPONENTFORMINUSINFINITY;PLUS_INFEQU$A0*$A0=SIGNOFEXPONENTFORPLUSINFINITY3NAN_SIGNEQU$C0*$C0=SIGNOFEXPONENTFORANANANAN_WIDTHEQU16*16=NUMCOLUMNPOSITIONNEEDEDTOWRITEANAN;OVRHDEQU4*4=NUMBEROFOVERHEADDIGITSINAREALWRITE:(309 9MAXRODIGEQU17*17=MAXNUMDIGITSCONVERTEDONOUTPUT@MAXRIDIGEQU19*19=MAXNUMDIGITSCONVERTEDONINPUTOFREAL?MAXIIDIGEQU34*34=MAXNUMDIGITSCONVERTEDONINPUTOFINTBCLRRNDMODEEQU$FCFF*$FCFF=MASKTOCLEARROUNDINGMODETOZEROFRNDTOZEROEQU$0100*$0100=MASKTOSETROUNDINGMODETORNDTOZERO=INITSTATUSEQU0*0=VALUETOINIT68341STATUSREGISTERTO;INITCNTRLEQU0*0=VALUETOINIT68341CNTRLREGISTERTO8MAXRNDPRECEQU2*2=MAXVALUEOFROUNDINGPREC.FIELD1MAXCLOSUREEQU1*1=MAXVALUEOFCLOSUREFIELD@MAXNORMMODEEQU1*1=MAXVALUEOFTHENORMAIZATIONMODEFIELD;MAXRNDMODEEQU3*3=MAXVALUEOFTHEROUNDINGMODEFIELD1MAXPOSEXPEQU4931*4931=MAXPOSITIVEEXPONENT1MAXNEGEXPEQU4952*4952=MAXNEGATIVEEXPONENT=THECURBASEWASFOUNDAREADOVFEQU$64*$64=OVERFLOWOCCUREDWHILEREADINGANINTEGER4BADNANEQU$70*$70=BADMANTISAINNANGENERATION* *BUFFERBLOCKOFFSETSANDSIZES* OFFSET0UNPACKEDDS.B20PACKEDDS.B14BCDBUFSIZEDS.W0CHARBUFSIZEDS.W0* OFFSET0 SIGNSDS.B1AFTER_DPDS.B1EXPONENTDS.W1BCDDIGITSDS.B64NAN_VALUEDS.B4!THISFIELDALSOPARTOFBCDDIGITSENDPACKEDDS.W0* OFFSET$1748ERRADRDS.L1*$174=OFFSETTOERRORADDRESSSAVEAREA9ERRNUMDS.L1*ERRNMR=OFFSETTOERRORNUMBERSAVEAREA8REGSDS.L1*REGS=OFFSETFROMA5TOREGISTERSAVEAREA*: A*********BEGINNING RR.VDOSVM.SA**********************************NOLIST*7*EQUATESTOSETPASCALCOMPILEROPERATINGENVIRONMENT.**THEEQUATEWHOSEVALUEIS0ISSELECTED.**COPYRIGHT1982MOTOROLA,INC.**VERSION2.01:04-19-82**04-19-82:DAVESTANDAGE*A*****************************************************************LIST1VDOSEXEQU1!!NO!!!VERSADOSONTHEEXORMACS4VDOSVMEQU0!!YES!!VERSADOSONTHEVERSAMODULE1RMSVMEQU1!!NO!!!RMS68KONTHEVERSAMODULE A*********ENDING OF RR.VDOSVM.SA********************************** 8'RROM ASSIGNLUAFMMqqASSIGNLUSAVV WqqFINIT AFggqqFINIT SAppqqFPOINT AFqqFPOINT SAqqINIT AFqqINIT SAiqqPFPOINT AF%%qqPFPOINT SA..qqPLJSR AF77qqPLJSR SA@@qqASSIGNLUROIIqqFINIT RORRqqFPOINT RO[[qqINIT ROddqqPFPOINT ROmmqqPLJSR ROvvqqRLIBFP CF-qqRLIBFP LG qq=/*=/*RROM.ASSIGNLU.AF=/*C=/* Chain file to assemble the logical unit assignment/command line+=/* module for the PASCAL application task.=/*&=/*Parameter01Outputlisting/device4=/*Thisparameterisoptionalandwillbedefaulted=/*ifnotspecified.=/*=/IFC \1=ARGRROM.ASSIGNLU.LS=/ENDIF=/*,=ASM RROM.ASSIGNLU.SA,RROM.ASSIGNLU.RO,\1;MR=/*{ Included files are:=/*--none--=/*}=/*=END: E**E*TherelocatableoutputfromthisassemblywillbeuseintheSYSGEN*link.*G*ItcontainsaMINIMUMdummycomandlinewhichcanbemodifiedtomeetF*theuser'sneeds.TypicallytheuserWILLmodifythecommandlinetoD*assignlogicalunits5and6whenarequirementforterminalusage *exists.*E*NormallySESSIONCONTROLwouldassignlogicalunits5and6fortheC*taskbeinginvoked,howeverSESSIONCONTROLdoesnotexistinthe*ROMbasedsystem.**,*IftheuserhadthefollowingPROGRAMline**PROGRAMTASK(INPUT,OUTPUT);*?*THENheshouldmodifythecommandlinetoassignBOTHlogical*unitsfive(5)andsix(6):**I=#CN00,O=#CN00;Z=1* *HOWEVER*,*IftheuserhadthefollowingPROGRAMline**PROGRAMTASK(OUTPUT)*?*THENheshouldmodifythecommandlinetoassignONLYlogical *six(6).* *O=#CN00;Z=1*-*whereterminalCN00wasarbitrarilychosen.***E*AdatadefinitiontocreatetheMINIMUMcommandlinewhichcontains *the'Z'optionisshownbelow.*B*TheintentofthiscomandlineistoforcePASCALtohavetoget*anewdymamicdatasegment.*?*Thiscommandlinecanbealteredtosuittheuser'sneedsBUTF*the'Z'optionisrequired.Thevalueofthe'Z'hasbeenarbitrarlyH*chosen.Iftheuserdoesnothaveaneedforadditional'Z'spacethenC*the'Z'optionpartofthecommandlineasshownwillaccompolishH*thedesiredintent.IfforwhateverreasontheuserdeterminesthatheB*needsa'Z'valuelargerthanthatarbitrarlychosenthenhecanA*changethe'Z'optionaccordingly.TypicallytheuserwillhaveC*debuggedhisPASCALtaskpriortoputtingitinromandamountof.*'Z'spacewillhavealreadybeendetermined.*A*Theuserwillnotethatabufferspaceofhexadecimal$9EexistB*withtheunusedportionbeingsettoNULL.Thishasbeendoneso?*thattheusercanpatchthecomandlineifnecessarypriortoN:W?*burningtheroms.ThisisthemaximumthatPASCALwillallow.** SECTION9 XDEFCMDLINEXDEFCMDLINEL* CREQU$0DCMDLINBFEQU$9E*CMDLINE: O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; >>>*@*ThefollowinglineisallthatneedstobeMODIFIEDtoreflect%*theuserscommandlinerequirements*DC.B';Z=1',CR *ThisisaMINIMUMcommandline!*The'Z'optionMUSTbepresent.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< DCB.B(CMDLINBF-(*-CMDLINE)),0.*FORCEBALANCEOFCOMANDLINEBUFFERTONULLSCMDLINELDC.WCMDLINBF*FORCEDCOMMANDLINELENGTHEND=/*=/*RROM.FINIT.AF=/*F=/* This file was originally called FPSRR.FINIT.SA but it was modified>=/* to accomodate the PASCAL ROM capability, and is now called=/* RROM.FINIT.SA=/*=/IFC \1=ARGRROM.FINIT.LS=/ENDIF=/*(=ASM RROM.FINIT.SA,RROM.FINIT.RO,\1;Z=64=/*{ Included files are:=/*RR.RTEQU.SA=/*RR.MACROS.SA=/*RR.FPMACRO.SA=/*}=/*=END_; ?TTLV2.0068KPASCALFLOATINGPOINTINITIALIZATIONSUBROUTINENOLISTINCLUDERR.RTEQU.SAINCLUDERR.MACROS.SAINCLUDERR.FPMACRO.SALIST*$*FILERR.RTEQU.SAHASBEENINCLUDED%*FILERR.MACROS.SAHASBEENINCLUDED&*FILERR.FPMACRO.SAHASBEENINCLUDED* NOFORMATCFINITIDNT2,0068KPASCALFLOATINGPOINTINITIALIZATIONSUBROUTINE SECTION8********E*.PFINIT--INITIALIZETHEFLOATINTPOINTPROCESSOR,ANDTHEDEFAULT*EXCEPTIONHANDLERADDRESSES**ENTRY:!*A5=POINTERTOTHEPASCALRMA.**EXIT:!*A5=POINTERTOTHEPASCALRMA.**USES:*.==NOTTOUCHED**==USEDANDDESTROYED*P==USEDBUTPRESERVED*R==RETURNED1*A==RETURNEDADJUSTED(LIKETHESTACKPOINTER)*-==NOTAPPLICABLE*%*01234567CNTRLSTATUSINSTAD*D:P.......---*A:PP.....A---*FP:....----RR.* *FUNCTION:<*THEFUNCTIONOFTHISROUTINEISTOINITIALIZETHEFLOATINGA*POINTPROCESSORANDSETUPTHEDEFAULTTRAPHANDLERFORALLTHE*FLOATINGPOINTEXCEPTIONS.* *EXTERNALS:*C*.PFINIT=DEF,THEENTRYPOINTTOTHEFLOATINGPOINTINITROUTINEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*?*.PFLOATP=DEF,DOUBLY-DEFINEDLABELWITHFASTFLOATINGPOINT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**4*.PFPOINT=REF,THEF-LINETRAPSIMULATINGROUTINE********BXDEF.PFINIT!THEENTRYPOINTTOTHEFLOATINGPOINTINITROUTINEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*?*XDEF.PFLOATP!DOUBLY-DEFINEDLABELWITHFASTFLOATINGPOINT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*3XREF.PFPOINT!THEF-LINETRAPSIMULATINGROUTINE*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**.PFLOATPEQU**hGqPy@O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**6*.PFINIT--THEFLOATINGPOINTINITIALIZATIONROUTINE*!PROCEDURE.PFINIT,*,*SAVETHEREGISTERSUSEDASLOCALVARIABLES*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**MOVEM.LD0/A0/A1,-(A7)*D*ThefollowinginstructionsweregraciouslysuppliedbyDaveMosley* MOVE.LA7,A6 SUB.L#58,A7 MOVE.LA7,A5MOVE.W#RMASIZE+8,D0MLOOP:MOVE.W(A6)+,(A5)+ SUBQ.W#2,D0 BNE.SMLOOP LEA8(A7),A5 MOVE.LA5,A6*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*6*INITIALIZETHEFLOATINGPOINTEXCEPTIONVECTORTABLE*CMOVEQ#NUMEXCEPTIONS,D0!D0=NUMBEROFEXCEPTIONVECTORSTOINIT5MOVE.LLOWHEAP(A5),A0!A0=THELOWESTHEAPADDRESSALEAEXCEPTION_HANDLER(PC),A1!A1=ADDRESSOFEXCEPTIONROUTINE*F*FILLALLEXCEPTIONVECTORSWITHTHEADDRESSOFTHEDEFAULTEXCEPTION *HANDLER*REPEAT'MOVE.LA1,(A0)+!FILLWITHANADDRESS0SUBQ.W#1,D0!DECREMENTEXCEPTIONVECTORCOUNT5UNTIL!LOOPUNTILALLEXCEPTIONVECTORSFILLED**SAVENEWLOWESTHEAPADDRESS*MOVE.LA0,LOWHEAP(A5)*%*BUILDANEWFREELISTHEADERRECORD* MOVEQ#-1,D0MOVE.LD0,(A0)+ MOVEQ#0,D0MOVE.LD0,(A0)+*"*SAVETHENEWTOPOFHEAPPOINTER*MOVE.LA0,HPTR(A5)*:*INITIALIZETHEFLOATINGPOINTSTATUSANDCNTRLREGISTERS*MOVE.W#INITSTATUS,D0FMOVEED,0,,S,STATUSMOVE.W#INITCNTRL,D0FMOVEED,0,,S,CNTRL*4*RETURNTOTHEISLANDINTHECOMMONSECTION'FINIT'*MOVEM.L(A7)+,D0/A0/A1 END_PROCPAGE*;*EXCEPTION_HANDLERISTHEDEFAULTFLOATINGPOINTEXCEPTION *HANDLER.*'*****< *********************************%**NOTE:THISVERSIONISONLYGOOD*%**FORTHESOFTWAREIMPLEMENTATION*%**OFTHEFLOATINGPOINTPROCESSOR*'****************************************ARGUMENTSARE:%*A5=POINTERTOTHEUSERSREGISTERS.*STATUS=THEFLOATINGPOINTERRORINDICATORS=*INSTAD=THEADDRESSOFTHEFLOATINGPOINTINSTRUCTIONTHAT*CAUSEDTHEERROR*/PROCEDUREEXCEPTION_HANDLER,*0*PUSHTHEFLOATINGPOINTPROCESSORSA5REGISTER*D***************************TEMP PATCH*******************************D*************THIS PATCH COMPENSATES FOR A BUG IN THE FP SOFTWARE****D********************************************************************3CLR.B3(A3)CLEARTEMPSTATSOWEDON'TABORTAGAIND**************************PATCH END*********************************D********************************************************************MOVE.LA5,-(A7)*F*LOADTHEPASCALPROGRAMSA5REGISTERBACKINTOA5(THERMAPOINTER).*MOVE.LA5OFFSET(A5),A5*A*SAVETHEREGISTERCONTENTSNOWTHATTHERMAPOINTERISRESTORED*MOVEM.LD0-D7/A0-A7,REGS(A5)*9*CHANGETHESAVEDA5TOTHEFLOATINGPOINTPROCESSORSA5*MOVE.L(A7)+,REGS+52(A5)**SAVETHEERRORADDRESS*FMOVEES,INSTAD,,A,5,ERRADR**BUILDTHEERRORNUMBERIND0.*FMOVEES,STATUS,,D,0ROR.W#8,D0!SWAPBYTES2LSR.B#2,D0!MOVEIOPCODETOTHERIGHTTWOBITS"ANDI.B#$F,D0!CLEARHIGHNIBBLE1ORI.B#$20,D0!SETERRORKINDTOFLOATINGPOINTROR.W#8,D0!SWAPBYTESBACK0MOVE.WD0,A0!A0=FLOATINGPOINTERRORNUMBER**DOANOPERATINGSYSTEMABORT*TRAP#14!DOANEXECCALL)DC.WFP$ERR!FORAFLOATINGPOINTERROR* *END_PROCPAGE*$***********************************"**THEFOLLOWINGISTHESPECIAL***COMMONSECTIONNEEDEDSO*#**FLOATINGPOINTISONLYNEEDED*"**ANDBROUGHTINWHENTHEUSER*$**REQUESTSITBYDOINGAFLOATING***POINTOPERATION.*$************************************-FINITSECTION8!COMMONSECTIONCALLEDFINITCALL.PFINIT,RTSEND=/*=/*RROM.FPOINT.AF=/*G=/* This file was originally called FPSRR.FPOINT.SA but it was modified>=/* to accomodate the PASCAL rom capability, and is now called=/* RROM.FPOINT.SA=/*=/IFC \1=ARGRROM.FPOINT.LS=/ENDIF=/**=ASM RROM.FPOINT.SA,RROM.FPOINT.RO,\1;Z=64=/*{ Included files are:=/*RR.RTEQU.SA=/*RR.MACROS.SA=/*}=/*=END< NOLISTINCLUDERR.RTEQU.SAINCLUDERR.MACROS.SALIST NOFORMAT*$*FILERR.RTEQU.SAHASBEENINCLUDED%*FILERR.MACROS.SAHASBEENINCLUDED*FTTLV2.0168KPASCALFLOATINGPOINTF-LINETRAPSIMULATORSUBROUTINEKFPOINTIDNT2,0168KPASCALFLOATINGPOINTF-LINETRAPSIMULATORSUBROUTINE*!* SECTION8********D*.PFPOINT--THE68KPASCALTOFLOATINGPOINTF-LINETRAPSIMULATOR**ENTRY:&*ALLREGISTERS=68KPASCALREGISTERS**(A7)=POINTERTOTHEF-LINEINSTRUCTION**EXIT:D*ALLREGISTERS=68KPASCALREGISTERS,POSSIBLYMODIFIEDDUETOTHE)*RESULTOFTHEFLOATINGPOINTOPERATION.**USES:2*ALLREGISTERSHAVETHEPOSSIBLITYOFBEINGUSED.* *FUNCTION:7*THISROUTINESIMULATESANF-LINETRAPTHATWASCAUSED>*BYEXECUTINGAF-LINEINSTRUCTION.THISROUTINEWASSUPPLIEDA*TOCUTDOWNTHETIMEREQUIREDTODOAFLOATINGPOINTOPERATION.* *EXTERNALS:*>*.PFPOINT=DEF,THEENTRYPOINTTOTHEF-LINETRAPSIMULATOR*E*.P68341P=REF,THEMAJORENTRYPOINTOFTHEFLOATINGPOINTPACKAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*1*.PZMAIN=REF,THEPASCALPROGRAMSTACKSEGMENT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<********=XDEF.PFPOINT!THEENTRYPOINTTOTHEF-LINETRAPSIMULATOR*BXREF.P68341P!THEMAJORENTRYPOINTOFTHEFLOATINGPT.PACKAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*1*XREF.PZMAIN!THEPASCALPROGRAMSTACKSEGMENT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*;*.PFPOINT--THEF-LINETRAPSIMULATORFORPASCALPROGRAMS*PROCEDURE.PFPOINT,*$*FIRSTOFFSAVETHESTATUSREGISTER* CLR.W-(A7)!CLEARSPOTFORCCR"MOVE.LD0,-(A7)!PUSHD0ONSTACK!SFD0!CLR.BD0W/OCHANGINGCCR%BNE.SCCZ!CHECKZBIT,BRANCHIFCLR%BSET#6,D0!SETBIT6TO1FORZBIT(CCZBCC.SCCC!CHECKCBIT,BRANCHIFCLRECC%BSET#4,D0!SETBIT4TO1FORCBIT(CCCBVC.SCCV!CHECKVBIT,BRANCHIFCLR%BSET#5,D0!SETBIT5TO1FORVBIT(CCVBPL.SCCN!CHECKNBIT,BRANCHIFCLR%BSET#7,D0!SETBIT7TO1FORNBIT!CCNROXR.B#4,D0!ROTATEXBITIN AND.W#$1F,D0!CLEARUPPERBYTE#MOVE.WD0,4(A7)!SAVECCRONSTACK&MOVE.L(A7)+,D0!RESTOREOLDD0VALUE*D*CHECKTOSEEIFTHEREISENOUGHROOMONTHESTACKTODOAFLOATING0*POINTOPERATIONWITHOUTOVER-RUNNINGTHEHEAP.*LEA-FPSTACK(A7),A7CMP.LHPTR(A5),A7LEAFPSTACK(A7),A7**IFNOMOREROOMTHENERROR*IFTHEN.SERRORSTKHEAPENDI*/*NOWSAVEALLOFTHEPASCALPROGRAMSREGISTERS*MOVEM.LD0-D7/A0-A7,-(A7)*C*MODIFYTHESAVEDVALUEOFTHESTACKPOINTERSOITPOINTSTOWHERE<*THETOPOFTHESTACKWASWHENTHEJSRTO.PFPOINTWASDONE!*(I.E.BELOWTHERETURNADDRESS)*ADDQ.L#6,60(A7)*A*SETUPTHEVALUESNEEDEDBYTHEFLOATINGPOINTPROCESSORINTHE*PROPPERREGISTERS.*ALEAUSER_MEM(PC),A4!A4=APOINTERTOTHEUSERMEMORYTRANSFERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*E*MOVE.L#FPREGS-.PZMAIN+RMASIZE,D0!D0=OFFSETFROMA5TOFPREGS.5MOVE.L#RMASIZE,D0!D0=OFFSETFROMA5TOFP= REGS.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=LEA0(A5,D0.L),A3!A3=APOINTERTOTHEFP.REGISTERBLOCK?MOVE.LLOWHEAP(A5),A1!A1=ADDRESSOFLOWESTADDRESSINHEAP:LEA-28(A1),A1!A1=APOINTERTOEXCEPTIONVECTORTABLE3MOVE.LA7,A5!A5=POINTERTOTHEUSERSREGISTERS*!*CALLTHEFLOATINGPOINTPACKAGE*CALL.P68341P,*1*RESTOREALLTHEPASCALREGISTERSEXCEPTFORA7.*MOVEM.L(A7)+,D0-D7/A0-A6*-*POPTHEOLDA7OFFTHESTACKANDIGNOREIT.* ADDQ.W#4,A7**RETURNTOTHECALLINGROUTINE*MOVE.W(A7)+,CCR END_PROCPAGE*D*USER_MEM--THISROUTINETRANSFERSDATATO/FROMTHEFLOATINGPOINT7*PROCESSORSMEMORYAREASOUTOF/INTOTHEUSERSMEMORY*ARGUMENTSARE:,*D6=DATASPACEORPROGRAMSPACEINDICATOR9*D7=COUNTOFBYTESTOTRANSFERANDDIRECTIONINDICATOR/*A2=POINTERTOF.P.PROCESSORSMEMORYBUFFER&*A3=POINTERTOUSERSMEMORYOPERAND*!PROCEDUREUSER_MEM,*#*CHECKIFITISAFETCHORASTORE* TST.WD7IFTHEN.S**ITISASTORE*.NEG.WD7!NEGATEBYTECOUNTTOMAKEPOSITIVE1EXGA2,A3!SWAPSOURCEANDDESTINATIONPOINTERSENDI**TRANSFERTHEDATA**ISITAONEBYTETRANSFER?* SUBQ.W#1,D7IFTHEN.S**YES,SOTRANSFERTHEBYTE*MOVE.B(A3),(A2)ELSE.S**ITISAMULTI-BYTETRANSFER* SUBQ.W#1,D7WHILEDO.S)MOVE.L(A3)+,(A2)+!TRANSFERFOURBYTES,SUBQ.W#4,D7!DECREMENTBYTECOUNTBYFOURENDW*/*ISTHERESTILLAWORDLEFTTOBETRANSFERED?*IFTHEN.S**YESSOTRANSFERTHEWORD*MOVE.W(A3),(A2)ENDIENDI*(*RETURNTOTHEFLOATINGPOINTPROCESSOR* END_PROCPAGE*******************************************)**DECLARETHEMEMORYFORTHEFLOATING***REGISTERBLOCK.********************************************O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?*SECTION15!THEREGISTERBLOCKISSECTION15(STACKSECTION) OFFSET0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)FPREGSDS.W29!RESERVE29WORDSFORIT.*END=/*=/*RROM.INIT.AF=/*F=/* This file was originally called UTILRR.INIT.SA but it was modified>=/* to accomodate the PASCAL rom capability, and is now called=/* RROM.INIT.SA=/*E=/* Chain file to assemble the rom version of the PASCAL initializer.=/*&=/*Parameter01Outputlisting/device4=/*Thisparameterisoptionalandwillbedefaulted=/*ifnotspecified=/*=/IFC \1=ARGRROM.INIT.LS=/ENDIF=/*3=ASM RR.VDOSVM.SA/RROM.INIT.SA,RROM.INIT.RO,\1;Z=64=/*{ Included files are:=/*RR.FIOEQU.SA=/*}=/*=END= NOLISTINCLUDERR.FIOEQU.SALIST*%*FILERR.FIOEQU.SAHASBEENINCLUDED* OPTPCS,FRS'IFEQVDOSEX!FORVERSADOSONEXORMACS5TTLV2.1268KPASCALINITIALIZERUNTIMEENVIRONMENT8INITIDNT2,1268KPASCALINITIALIZERUNTIMEENVIRONMENTENDC!*!*IFEQVDOSVM!FORVERSADOSONVERSAMODULE7TTLV2.1268KPASCALRUNTIMEINITFORVDOSONVM01/02:INITIDNT2,1268KPASCALRUNTIMEINITFORVDOSONVM01/02ENDC!*!,IFEQRMSVM!FORRMS68KONLYONVERSAMODULE>TTLV2.1268KPASCALRUNTIMEINITFORRMS68KONLYONVM01/02AINITIDNT2,1268KPASCALRUNTIMEINITFORRMS68KONLYONVM01/02ENDC!O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> IFEQVDOSEX!*EXORMACSVERSIONOFINITIALIZERENDC IFEQVDOSVM$*VERSAMODULEVERSIONOFINITIALIZERENDC IFEQRMSVM0*VERSAMODULERMS68KONLYVERSIONOFINITIALIZERENDCO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* *SECTION8 SECTION9*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ** COPYRIGHT 1982 MOTOROLA, INC.** 1980-04-16 : JOHN KAUFMANN*-*INIT-RUNTIMEDATAINITIALIZATION.COMMAND%*LINESCANISDETERMINEDBYBIT0OF*LOCATION.PMAIN** LAST MODIFIED:1*April19,1982byDaveStandage-Addedsupport3*forVERSAdosontheVM01andVM02,andforRMS68K!*plusBIOSontheVM01andVM02.*2*1982Feb08byJohnKaufmann-Correctedproblem3*indeterminingsizeofcurrentstack-heapsegment/*forcomparisonwithzoptionrequest.Changed1*movementofrmatobefromhitoloaddrsafter*addingmemoryviazoption.*/*30JULY1981BYJOHNKOEHRING-ADDEDSUPPORT-*FORCHAINCOMMANDDIAGNOSTICREGISTER.CODE+*REQUIREDTOZEROOUTREGISTERATSTARTOF *EXECUTION.*%* MODIFIES REGISTERS: 0 1 2 3 4 5 6 7*D*********A*********EHB1DBECMMFO J 9* ON ENTRY (UNDER VERSADOS FOR EXORMACS OR VM01 OR VM02):*D0.LLOADINGTASKNAME*D1.LSESSIONNUMBER*D2.LDEFAULTUSERVOLUME*D3.LDEFAULTUSERNUMBER*D4.L,D5.LDEFAULTCATALOG*D6.WCOMMANDLINELENGTH*D7.LBITMASKOFLUN'SPASSED**A1.LDEFAULTTERMINALID*,* ON ENTRY (UNDER RMS68K FOR VM01 AND VM02):(*(ALLREGISTERSHAVEUNKNOWNCONTENTS.)* * ON EXIT (IN ALL ENVIRONMENTS):!*A3.LPOINTSTOLONGJSRROUTINE&*A5.LPOINTSTOSTARTOFRUNTIMEDATA&*A6.LPOINTSTOSTARTOFRUNTIMEDATA&*A7.LPOINTSTOSTARTOFRUNTIMEDATA* * EXTERNALS: XDEF.PINITO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*XDEFASIGNRET *XDEF.PLJSR XREFCMDLINEXREFCMDLINEL XREF.P> LJSRXREF.PZSTARTO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</XREF.PMAIN,.PZMAIN,.PVTRAPD,.PVTRAPE,.PVBUSERXREF.PSYMBUG0XREF.PADDRER,.PVZDIV,.PVCHKI,.PVTRAPV,.POPTION*'IFNEVDOSEX!NOTVERSADOSONEXORMACS** REFERENCE TO SYMBOL TO MARK THE START OF)* THE PASCAL DATA SEGMENT (IN SECTION 15)*!O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**XREF.PZSTART!*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ENDC!*!*!******8* REFERENCE TO MAKE SURE THAT THE ALLOCATE STACK ROUTINE6*ISLOADEDSINCEINITWILLALWAYSBELOADED.ALSTSIS* NOT USED IN INIT.* XREF.PALSTSPAGE* OPTMEX!SHOWMACROEXPANSIONS*#* RECEIVE SEGMENT ATTRIBUTES MACRO.* \1 = SEGMENT NAME.=* (0 IN EXORMACS CASE WHERE CODE AND DATA SEGS ARE ADJACENT.)-* \2 = OFFSET INTO RMA TO PUT PARAMETER BLOCK$DORCVSAMACRO!RECEIVESEGMENTINFO9*BEGINDORCVSAMACRO***********************************:* USES A5. MODIFIES A0,D0,A1. ****************************%LEA\2(A5),A0!RECEIVESEGMENTINFO CLR.L(A0)!CLR.LSEGSES(A0)!*!IFC'\1','0'!MOVE.W#SGOPLA,SEGOPT(A0)CLR.WSEGATT(A0)!3CLR.LSEGNAM(A0)!NOSEGMENTNAME,STOREBINARY0ENDC!IFNC'\1','0'!CLR.WSEGOPT(A0)!CLR.WSEGATT(A0)!1MOVE.L#'\1',SEGNAM(A0)!STORETHESEGMENTNAMEENDC!*!CLR.LSEGLEN(A0)!LEASEGPTR+4(A0),A1!MOVE.LA1,SEGPTR(A0)!MOVE.LA0,SEGLAD(A0)!MOVE.L#RCVSA,D0! TRAP#1!:* END OF DORCVSA MACRO ***********************************ENDM!*?*GETASEGMENTFROMRMS68K.NAMEANDSEGLENGTHAREARGUMENTS.A* IF NAME IS '0', SEGMENT IS ALLOCATED NEXT TO EXISTING DATA SEG.DOGTSEGMACRO!9*BEGINDOGTSEGMACRO***********************************?*A0ANDD0AREMODIFIED.D1MAYBEMODIFIED.\2(LEN)ISUSED.*LEADL0(A5),A0!ALLOCATEANOTHERSEGMENT2MOVE.L\2,SEGLEN(A0)!DATABLOCKINDISPLAYAREACLR.LSEGTCB(A0)!CLR.LSEGSES(A0)!*!&IFC'\1','0'!NOSEGMENTNAMEGIVEN.CLR.WSEGOPT(A0)!.MOVE.LSGBRK(A5),D1!MAKEITCONTIGUOUSWITH%ADDQ.L#1,D1!CURRENTDATASEGMENT.MOVE.LD1,SEGLAD(A0)!MOVE.LD1,SEGNAM(A0)!ENDC!IFNC'\1','0'!1MOVE.W#SGOPPA,SEGOPT(A0)!LETRMSSUPPLYADDR.CLR.LSEGLAD(A0)!2MOVE.L#'\1',SEGNAM(A0)!USESEG.NAMEASIDENT.ENDC!*!MOVE.W#SGATRW,SEGATT(A0)MOVE.L#GTSEG,D0! TRAP#1!:* END OF DOGTSEG MACRO ***********************************ENDM!*2*DEALLOCATEASEGMENT.SEGNAMEISONLYARGUMENT.<* ASSUMES STACK POINTER DOES NOT POINT INTO DELETED SEGMENT.*DODESEGMACRO!SEGNAMEISONLYARGUMENT.9*BEGINDODESEGMACRO***********************************9*USESA5.MODIFIESA0ANDD0.**************************(LEADL0(A5),A0!GETSOMESCRATCHSPACECLR.LSEGLEN(A0)!CLR.LSEGTCB(A0)!CLR.LSEGSES(A0)!CLR.WSEGOPT(A0)!CLR.WSEGATT(A0)!CLR.LSEGLAD(A0)!%MOVE.L#'\1',SEGNAM(A0)!STORENAMEMOVE.L#DESEG,D0!"TRAP#1!DEALLOCATETHESEGMENT.&BNEDERR!SHOULDNEVERREACHDERR...:* END OF DODESEG MACRO ***********************************ENDM!*#* INITIALIZE IMPORTANT PASCAL INFO./INITINFOMACRO!ARGSARESTARTADDANDENDADD9*BEGININITINFOMACRO**********************************9*MODIFIES2,A3.USESA5.******************************:* INITIALIZES SMALLEST HEAP ADDR, HEAP POINTER, SEGMENT **:* BOUNDARY AND FREE LIST. ********************************'MOVEA.L\1,A2!GETDATASEGMENTSTARTLEAVTABSZ(A2),A3.MOVE.LA3,SHPAD(A5)!INITSMALLESTHEAPADDR"MOVE.L#-1,(A3)+!INITFREELIST CLR.L(A3)+%MOVE.LA3,HP(A5)!INITHEAPPOINTER(MOVE.L\2,SGBRK(A5)!INITSEGBOUNDARY:* END OF INITINFO MACRO **********************************ENDM*)* INITIALIZE PASCAL RT INTERRUPT VECTORS.!* ARGUMENTS ARE TWO ERROR LABELS.INITVECSMACRO!9*BEGININITVECSMACRO**********************************9*US> ESA2.MODIFIESA0,A3,D0,D1.************************#MOVEA.LA2,A3!CLEARVECTORTABLEMOVEQ.L#VTABSZ,D1DI1\@CLR.L(A3)+ SUBQ.L#4,D1 BNE.SDI1\@*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>)*LEA.PVTRAPD(PC),A0!INITTRAPVECTORSMOVE.L#.PVTRAPD,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,TRAPD(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*LEA.PVTRAPE(PC),A0MOVE.L#.PVTRAPE,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,TRAPE(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*LEA.PVBUSER(PC),A0MOVE.L#.PVBUSER,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,BUSER(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*LEA.PADDRER(PC),A0MOVE.L#.PADDRER,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,ADDRER(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*LEA.PVZDIV(PC),A0MOVE.L#.PVZDIV,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,ZDIV(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*LEA.PVCHKI(PC),A0MOVE.L#.PVCHKI,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,CHKI(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*LEA.PVTRAPV(PC),A0MOVE.L#.PVTRAPV,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MOVE.LA0,TRAPV(A2)**LEAVT2TF(A2),A0!RECEIVETRAPS2THRUFMOVE.L#RT2TF,D0TRAP#1/BEQ.SDI2\@!ERRORCHECK(*NOHANDLERYET*)\2MOVEA.LD0,A0MOVE.L#ABORT,D0TRAP#1+DI2\@CLR.LD7!SAVERETURNADDRFORERROR2LEAVBETLF(A2),A0!RECEIVEBUSERRORTHRULINEFMOVE.L#RBETLF,D0TRAP#1BEQ.SDI3\@!ERRORCHECK*\1MOVE.LD0,-(A7)MOVEQ.L#MAL,D0 TRAP#14DC.W0* DI3\@EQU*:* END OF INITVECS MACRO **********************************ENDM*3* MACRO COPYRMA COPIES RMA TO ADDR POINTED TO BY A6<* FROM END ADDR POINTED TO BY A5. USES DO. UPDATES A7,A6,A5. COPYRMAMACRO9*BEGINCOPYRMAMACRO***********************************:* USES A5 AND A6. MODIFIES D0. UPDATES A5,A6,A7. *********MOVE.W#RTDSZ,D0DI33MOVE.W-(A5),-(A6) SUBQ.W#2,D0 BNE.SDI33MOVEA.LA6,A7!..UPDATEA7,A5MOVEA.LA7,A5:* END OF COPYRMA MACRO ***********************************ENDMPAGE*#*CONSTANTSFORUSEBYINIT.SAONLY*+SEGTLENEQU768!LENOFTEMPORARYSEGMENT.%*!MUSTHOLDRMAANDEXCEPTIONVECS.****** * ENTRY POINT***** .PINITEQU* INITEQU* O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>MOVE.L#RELINQ,D0TRAP#1!*RELINQUITSHCONTROLSOTHATI/O#*I/OINITIALIZATIONCANTAKEPLACEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*Withinvocationofassignmentusingthecommandlinethisisnolonger *necessary**MOVE.L#ROMASIGN,A0 *JMP(A0)&*ASSIGNLOGICALUNITSFORAPPLICATION*TASK&*THEJUMPINSTRUCTIONISUSEDBECAUSE&*ASTACKHASNOTBEENDEFINEDATTHIS*POINTINTIME*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ASIGNRET:)*RETURNADDRESSAFTERLOGICALUNITSHAVE*BEENASSIGNEDO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  &IFEQVDOSEX!IFVERSADOSONEXORMACSN*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*<*.INIT1MOVE.L#.PZMAIN-*-RTDSZ,A7!SETA7TOSTARTOFDATA*LEA.INIT1(PC,A7.L),A7**A7=ADDRESSOFSEG2? *!.INIT1ADD.L#.PZMAIN-.PZSTART,A7SUB.L#RTDSZ,A7*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ENDC'IFNEVDOSEX!VDOSORRMSONVM01/VM021*ALLOCATETHETEMPORARYSEGMENT'SEGT'TOUSEIN+*LIEUOF'SEG2'UNTIL'SEG2'ISVALIDATED.!MOVE.LD0,A2!SAVESTARTUPINFO MOVE.LA1,A3*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**IFEQRMSVM!RMSONVM01/02*MOVE.L#RELINQ,D0!/*TRAP#1!RELINQUISHCONTROLOFTHEPROCESSOR&*!SOBIOSHASACHANCETOINITIALIZE*ENDC!O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*+MOVE.L#GTSEG,D0!GETATEMPORARYSEGMENT+LEAPRMBLK(PC),A0!WITHTHESEPARAMETERS.TRAP#1!DOITBNEDERR1!ERRORSABORT.4*!A0NOWCONTAINSSTARTPHYSICALADDROFTHESEGT.+MOVEA.LA0,A7!INITSTACKPTRTOSTARTAD0ADD.L#SEGTLEN-RTDSZ-2,A7!PLUSLEN-RMASIZE$MOVE.LA2,D0!RESTORESTARTUPINFOMOVE.LA3,A1!ENDC MOVEA.LA7,A5!A5:=A7MOVEA.LA7,A6!A6:=A7&CLR.LSC(A5)!STATEMENTCOUNTER:=0 (IFNERMSVM!VERSADOSONEXORMACSORVM+MOVEM.LD0-D1,LTN(A5)!SAVESTARTUPDATAMOVE.LA1,DTID(A5)MOVEM.LD4-D5,DCAT(A5)MOVE.LD2,DVOL(A5)MOVE.WD3,DUN(A5)MOVE.WD6,CLL(A5)MOVE.LD7,LUIU(A5)ENDC &IFEQRMSVM!RMS68KONLYONVM01/VM023*INITIALIZEVERSADOSSTARTUPDATATO'SAFE'VALUES*FORRMS68K+BIOSENVIRONMENT;*MOVEM.LD0-D1,LTN(A5)!NONEEDTOINITLOADINGTASKNAME/MOVE.L#'CN00',DTID(A5)!SETDEFAULTTERM.ID!MOVE.L#'',D0!USEFULCONSTANT7MOVE.LD0,DCAT(A5)!BLANKOUT8CHARSOFCATALOGNAMEMOVE.LD0,DCAT+4(A5)!6MOVE.LD0,DVOL(A5)!BLANKOUT4CHARSOFVOLUMENAME;CLR.WDUN(A5)!SETDEFAULTUSERNOTOANACCEPTABLEVALUE$CLR.LD6!COMMANDLINELENGTHIS0)CLR.WCLL(A5)!COMMANDLINELENGTHIS0)CLR.LLUIU(A5)!NOLOGICALUNITSINUSEENDC -CLR.WCCDR(A5)!ZEROOUTCHAINCMDDIAGREG0MOVE.B#$D,CL(A5,D6)!PUTCRATENDOFCOMMAND &IFEQVDOSEX!IFVERSADOSONEXORMACS3DORCVSA0,EFI!RECEIVESEGMENTINFO,NAMEUNKNOWNBNEDERR1!ERRORCHECKENDC 'IFNEVDOSEX!NOTVERSADOSONEXORMACSMOVEA.LA0,A4!(ADD.L#SEGTLEN-1,A4!CALCSEGENDADDR&INITINFOA0,A4!INITIMPORTANTSTUFFENDC! #IFEQVDOSEX!VERSADOSONEXORMACSINITINFOSRELSA(A1),SRELEA(A1)ENDC! 'MOVE.W#EFI-OFAR,D1!CLEARFIELDINFOMOVE.W#OFAR,D0DI5CLR.L0(A5,D0) ADDQ.W#4,D0 SUBQ.W#4,D1 BHI.SDI5 -INITVECSDERR,DERR1!INITINTERRUPTVECTORS O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*Thislogichasbeenremovebecause'SEG2'willbeobtaineddynamically!*consequentlyitisnotrequired**(*IFNEVDOSEX!NOTVDOSONTHEEXORMACS**BSRSEG2INFO!RECEIVESEGINFOFORSEG2 *BEQ.SDIOK1*&*MOVEQ.L#WSN,D0!RUNTIMEERROR1013/*TRAP#14!**WRONGSEGMENTNAME,MUSTBESEG2*DC.W0*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< DIOK1EQU*(IFNERMSVM!NOTRMS68KONLYONVM01/02 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*(*!READCOMMANDLINEFROMSEG2INTOSEGT*MOVEA.LSRELSA(A1),A3B*ADD.L#.PZMAIN-.PZSTART-RTDSZ+CL,A3!STARTOFCOMLINEINSEG2.+*LEACL(A5),A2!STARTADDRFOROUTPUTBUF'*MOVE.WCLL(A5),D0!NOOFBYTESTODO*>*!!!FORCETHECOMMANDLINETOBETAKENFROMRROM.ASSIGNLU.ROLEACMDLINE(PC),A3$*A3=ADDRESSOFCMDLINETOPROCESSLEACL(A5),A2&*ADDRESSOFCMDLINEINSEGMENT'SEGT'MOVE.WCMDLINEL(PC),D0,*D0=NUMBEROFBYTESINCMDLINETOPROCESS*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +DIITER1TST.WD0!WHILEMOREBYTESTOCOPYBEQ.SDIDONE1!.DO%MOVE.B(A3)+,(A2)+!..COPYONEMORE(SUBQ.W#1,D0!..DECREMENTNUMBERTODOBRA.SDIITER1!.ODDIDONE1EQU*! O*>? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*A*This'ENDC'statementcorrespondstothe'IF'statementremoved*above**ENDC*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ENDC (IFNERMSVM!NOTRMS68KONLYONVM01/02CLR.LD6!ZOPT:=FALSE"LEACL(A5),A2!INITSCANPOINTER-.INIT2MOVE.L#.PMAIN-*,D2!IFNOTSCANTHENMOVE.W.INIT2(PC,D2.L),D2 BTST#0,D2#BNE.SDI4!.(*SCANFORZONLY*)MOVE.B.PSYMBUG(PC),D1+TST.BD1!CHECKFOR"THISISSYMBUG"FLAG'BNE.SDI7!IFSO,DON'TSCANANYTHINGDI6EQU*!.DOBSRGNC!..GETNEXTCHARBEQ.SDI7!.UNTILCHAR=CR CMP.B#';',D1!.\ORCHAR=';' BNE.SDI6!.IFCHAR=';'THENDI8EQU*!..DODI9EQU*!...DO%MOVE.BD1,D5!....LASTCHAR:=CHARBSRGNC!....GETNEXTCHAR'CMP.B#'=',D1!....IFCHAR='='THEN BNE.SDI90DI91EQU*!.....DO'MOVE.BD1,D5!......LASTCHAR:=CHARBSRGNC!......GETNEXTCHAR!BEQ.SDI7!.....UNTILCHAR=CR$CMP.B#',',D1!.....\ORCHAR=',' BNE.SDI91DI90EQU*!....FI"CMP.B#$D,D1!...UNTILCHAR=CR BEQ.SDI7"CMP.B#'Z',D1!...\ORCHAR='Z' BNE.SDI9BSRSCANZ!...SCANZOPTION!CMP.B#$D,D1!..UNTILCHAR=CR BNE.SDI8DI7EQU*!.FIBRADI10!ELSE DI4EQU*CLR.WD0!.FIELDNUM:=0DI11EQU*!.DOBSRGNC!..GETNEXTCHAR$CMP.B#'',D1!.UNTILCHAR#SPACE BEQ.SDI11CMP.B#$D,D1!.IFCHAR#CR BEQDI95&CMP.B#';',D1!.\ANDCHAR#';'THEN BEQDI95DI12EQU*!..DO.LEAFNNF(A5),A0!...CALCADDRFROMFIELDNUM LSL.L#2,D0LEA0(A0,D0),A0 LSR.L#2,D0%CLR.BD2!...SPECIALFIELD:=FALSE&CMP.B#'I',D1!...IFCHAR='I'THEN BNE.SDI13BSRGNC!....GETNEXTCHAR'CMP.B#'=',D1!....IFCHAR='='THEN BNE.SDI14(LEAIENF(A5),A0!.....ADDR:=I=FIELD+MOVEQ.L#1,D2!.....SPECIALFIELD:=TRUEBSRGNC!.....GETNEXTCHARBRA.SDI15!....ELSE DI14EQU*BSRBACKSP!.....BACKSPACEDI15EQU*!....FIBRA.SDI16!...ELSE DI13EQU*'CMP.B#'O',D1!....IFCHAR='O'THEN BNE.SDI17BSRGNC!.....GETNEXTCHAR(CMP.B#'=',D1!.....IFCHAR='='THEN BNE.SDI18)LEAOENF(A5),A0!......ADDR:=O=FIELD,MOVEQ.L#1,D2!......SPECIALFIELD:=TRUEBSRGNC!......GETNEXTCHARBRA.SDI19!.....ELSE DI18EQU*BSRBACKSP!......BACKSPACEDI19EQU*!.....FIDI17EQU*!....FIDI16EQU*!...FI#TST.BD2!...IFNOTSPECIALFIELD BNE.SDI20+CMP.W#16,D0!...\ANDFIELDNUM=16THEN BNE.SDI20MOVEQ.L#CLF,D0!....ERROR TRAP#14DC.W0DI20EQU*!...FI8LEACL+1(A5),A1!...FIELDSTARTOFF:=CHARPTR-(CL+1) MOVE.LA2,D3 SUB.LA1,D3MOVE.BD3,2(A0)4MOVE.BD3,3(A0)!...CURRENTOFF:=FIELDSTARTOFFBSRSCANF!...SCANFILES(TST.BD2!...IFNOTSPECIALFIELDTHEN BNE.SDI21.ADDQ.W#1,D0!....FIELDNUM:=FIELDNUM+1DI21EQU*!...FI!CMP.B#$D,D1!..UNTILCHAR=CR BEQ.SDI22!CMP.B#';',D1!..\ORCHAR=';' BNEDI12 DI22EQU*,MOVE.WD0,NFCL(A5)!..UPDATENUMOFFIELDSDI95EQU*!.FI$CMP.B#';',D1!.IFCHAR=';'THEN BNE.SDI23DI24EQU*!..DO$MOVE.BD1,D5!...LASTCHAR:=CHARBSRGNC!...GETNEXTCHAR&CMP.B#'=',D1!...IFCHAR='='THEN BNE.SDI25DI26EQU*!....DO&MOVE.BD1,D5!.....LASTCHAR:=CHARBSRGNC!.....GETNEXTCHAR!BEQ.SDI27!....UNTILCHAR=CR#CMP.B#',',D1!....\ORCHAR=',' BNE.SDI26 DI27EQU*DI25EQU*!...FICMP.B#$D,D1!...IFCHAR#CR BEQ.SDI28(CMP.B#'Z',D1!...\ANDCHAR#'Z'THEN BEQ.SDI28*CMP.B#'A',D1!....IFCHARISALPHATHEN BCS.SDI29CMP.B#'Z'+1,D1 BCC.SDI29-LEACL+1(A5),A1!.....CALCOFFSETTOOPTION MOVE.LA2,D4 SUB.LA1,D4-CMP.B#'-',D5!.....IFLASTCHAR='-'THEN BNE.SDI30NEG.WD4!......NEGATEOFFSETDI30EQU*!.....FIEXT.WD1!.....UPDATEOFFSET LSL.L#1,D1LEAOFAR-$82(A5),A3MOVE.WD4@ ,0(A3,D1)DI29EQU*!....FIDI28EQU*!...FIBSRSCANZ!...SCANZOPTION!CMP.B#$D,D1!..UNTILCHAR=CR BNE.SDI24DI23EQU*!.FIDI10EQU*!FITST.BD6!IFZOPTIONTHEN 'IFEQVDOSEX!VERSADOSONTHEEXORMACS BEQ.SDI315LEARTDSZ+VTABSZ+2(A5),A0!.IFREQSZ>CURSZTHENMOVE.LSHPAD(A5),D1 SUBA.LD1,A0 ASL.L#8,D3 ASL.L#2,D3 SUB.LA0,D3 BLS.SDI31*!ALLOCATEADDITIONALSEGMENT)DOGTSEG0,D3!NOSEGNAME,LENGTHIND3BNEDERR!..ERRORCHECK*'LEARTDSZ(A7),A6!..MOVERUNTIMEDATA ADDA.LD3,A6LEARTDSZ(A5),A5'*!COPIESRMATOADDRPOINTEDTOBYA6"*!FROMENDADDRPOINTEDTOBYA5%COPYRMA!USESDO.UPDATESA7,A6,A5.!ENDC!VERSADOSONEXORMACSONLY*$IFEQVDOSVM!VERSADOSONVM01/VM02 BEQDI31!ASL.L#8,D3!MULTIPLYZBY1024 ASL.L#2,D3 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*D*ThislogichasbeenreplacedwithamovetoregisterD4.Thevalue9*intheregisteristhemaximumvalueD4couldhavewith*thecurrentlogic**BSRSEG2INFO5*MOVE.LSRELEA(A1),D4!CALCULATESIZEOFUSERBLOCK*SUB.LSRELSA(A1),D4*SUB.L#.PZMAIN-.PZSTART+1,D4 MOVE.L#254,D4**D4=MAXIMUMVALUEIFCURRENTLOGICUSED*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< * O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**CMPI.L#.PZMAIN-.PZSTART+2,D3 *BLS.SDI31(IF.L#.PZMAIN-.PZSTART+2D3THEN.SMOVE.L#.PZMAIN-.PZSTART+2,D3ENDI*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $ADD.LD4,D3!Z-OPTION+USERBLOCK#ADD.L#255,D3!ROUNDSEGMENTSIZE CLR.BD3 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*Deletionof'SEG2'nolongerrequiredsinceitisacquireddynamically*-*FIRSTDELETEOFFPREVIOUS'SEG2'VIADESEG.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< %*THENALLOCATEANEWSEGMENT'SEG2'.*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*Deletionof'SEG2'nolongerrequiredsinceitisacquireddynamically**DODESEGSEG2*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *DOGTSEGSEG2,D3!NAME,LEN BNEDERR SUB.LD4,D3!REMOVEUSERBLOCK1SUB.L#.PZMAIN-.PZSTART+2,D3!REMOVESTACK/HEAP BRA.SDI32ENDC DI31EQU*!FIENDC!ENDOFNON-RMS68KSTUFF 'IFNEVDOSEX!VDOSORRMSONVM01/VM02 CLR.LD3 DI32EQU*)BSRSEG2INFO!RECEIVESEGINFOFORSEG2*MOVEA.LSRELSA(A1),A6!GETSTARTADDRESSADD.L#.PZMAIN-.PZSTART,A6ADD.LD3,A6!NEWENDOFRMA*&LEARTDSZ(A5),A5!CURRENTENDOFRMA.COPYRMA!COPIESRMATOADDRPOINTEDTOBYA6"*!FROMENDADDRPOINTEDTOBYA5*!USESDO.UPDATESA7,A6,A5.3INITINFOSRELSA(A1),SRELEA(A1)!INITHEAPPOINTERINITVECSDERR2,DERR3 DODESEGSEGTENDC O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+*LEA.PLJSR(PC),A3!INITLONGJSRPOINTER*MOVE.L#.PLJSR,A3O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*,*CALLFLOATINGPOINTINITROUTINEIFNEEDED* BSRINITFPF.INIT3MOVE.L#.PMAIN-*,D0!STARTMAINPROGRAMRELATIVEAT.PMAIN+2JMP.INIT3+2(PC,D0.L)PAGE** SUPPORT ROUTINES FOR INIT*'IFNEVDOSEX!VDOSORRMSONVM01/VM02** THIS SUBROUTINE MODIFIES D0, A0, AND A1.* IT USES A5 (RMA POINTER)./* IT ALSO USES THE PARAMETER BLOCK FROM EOD(A5)5* TO EOD+$1B(A5) FOR INPUT TO THE RCVSA TRAP #1 CALL.+* IT RETURNS SEGMENT INFO FOR 'SEG2' IN THE?* PARAMETER BLOCK DENOTED BY EOD+$1C(A5) (AND ALSO A1 ON EXIT).SEG2INFOEQU*!*DORCVSASEG2,EOD!FINDOUTSEGMENTADDRSRTS!ENDC!**%IFNERMSVM!NOTRMS68KONVM01/VM02**BACKSP@ BACKUPACHARACTER*BACKSPIF.BD1#$DTHEN.S SUB.L#1,A2ENDI SUB.L#1,A2*FALLTHROUGHTOGNC *,*GNC-GETNEXTCHARACTER.A2POINTSATTHE%*STRINGBEINGSCANNED.THECHARACTER&*ISRETURNEDIND1.THEZFLAGISSET(*IFTHECHARACTERISACARRIAGERETURN.* GNCEQU*4MOVE.B(A2)+,D1!GETCURRENTCHAR&UPDATEPOINTER!CMP.B#$D,D1!IFCHAR=CRTHEN BNE.SGNC1SUBQ.L#1,A2!.DECPOINTERGNC1EQU*!FI RTS!ENDSPC1*/*SCANZ-SCANZOPTION.A2POINTSTOCHARACTER)*PASTZ.A2WILLBEUPDATEDTOCHARACTER(*PASTENDOFZOPTIONFIELD.CHECKSFOR(*ERRORINOPTIONFIELD.EQUALSVALUEIS*RETURNEDIND3.* SCANZEQU*#CMP.B#'Z',D1!IFCHAR='Z'THEN BNE.SSZ1)CMP.B#'-',D5!.IFLASTCHAR='-'THENBEQ.SSZ3!..ERRORSZ2EQU*!.FISUBQ.L#1,A2!.DECPOINTER)BSR.POPTION!.OPTION(*GET=VALUE*)BTST#4,D0!.ERRORCHECK BEQ.SSZ4AND.B#$AA,D0 BEQ.SSZ5SZ4MOVE.LD0,-(A7)SZ3MOVEQ.L#MAL,D0 TRAP#14DC.W0"SZ5MOVEQ.L#1,D6!.ZOPT:=TRUESZ1EQU*!FI RTS!ENDSPC1*/*SCANF-SCANFILES.COUNTSNUMBEROFFILESIN(*FILELISTWITHINAFIELD.A2POINTSTO)*LINEBEINGSCANNED.COUNTOFFILESWILL)*BEPLACEDINFIELDINFOAREA.A0POINTS#*TOSTARTOFFIELDAREA.CHARACTER'*ATSTARTOFFIELDISIND1.CHARACTER+*TERMINATINGFIELDWILLBERETURNEDIND1.&*A2WILLBERETURNEDPOINTINGATNEXT *CHARACTER.* SCANFEQU*"MOVE.B#',',D5!LASTCHAR:=','CLR.B(A0)!NUMFILES:=0SF1EQU*!DO"CMP.B#'/',D1!.WHILECHAR='/' BNE.SSF2-ADDQ.B#1,(A0)!.NUMFILES:=NUMFILES+1"MOVE.BD1,D5!.LASTCHAR:=CHARBSRGNC!.GETNEXTCHARBRA.SSF1!OD SF2EQU*SF3EQU*!DO CMP.B#$D,D1!.WHILECHAR#CR BEQ.SSF4!CMP.B#';',D1!.\ANDCHAR#';' BEQ.SSF4!CMP.B#',',D1!.\ANDCHAR#',' BEQ.SSF4-ADDQ.B#1,(A0)!.NUMFILES:=NUMFILES+1SF5EQU*!.DOCLR.BD5!..LASTCHAR:=NULLBSRGNC!..GETNEXTCHARBEQ.SSF3!.UNTILCHAR=CR CMP.B#';',D1!.\ORCHAR=';' BEQ.SSF3 CMP.B#',',D1!.\ORCHAR=',' BEQ.SSF3 CMP.B#'/',D1!.\ORCHAR='/' BNE.SSF5BRA.SSF3!OD SF4EQU*(CMP.B#'/',D5!IFLASTCHAR='/'THEN BNE.SSF6-ADDQ.B#1,(A0)!.NUMFILES:=NUMFILES+1SF6EQU*!FI#CMP.B#',',D1!IFCHAR=','THEN BNE.SSF7BSRGNC!.GETNEXTCHARSF7EQU*!FI RTS!END"ENDC!ENDOFROUTINESNOTUSEFUL*!TORMS68KONVM01/VM02 PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** .PLJSR - LONG JSR ROUTINE* *.PLJSREQU*%*MOVE.L(A7),A4!GETRETURNADDRESS%*ADD.L#4,(A7)!CORRECTITONSTACK'*ADD.L(A4),A4!CALCULATEDESTINATION*JMP(A4)!GOTOIT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'IFNEVDOSEX!NOTVERSADOSONEXORMACS$PRMBLKDC.L0!DON'TKNOWTASKNAMEDC.L0!SESSION'DC.WSGOPPA!LETRMS68KPICKTHEADDR!DC.WSGATRW!READ/WRITESEGMENTDC.L'SEGT'!SEGMENTNAME%DC.L0!STARTLOGICALADDR(IF<>0)'DC.LSEGTLEN!SEGMENTLENGTHINBYTESENDC! PAGE*C*FINIT-THECOMMONSECTIONUSEDFORLINKAGETOTHEFLOATINGPOINT*PACKAGEIFPRESENT*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*FINITSECTION8FINITSECTION9O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</INITFPRTS!RETURNTOINITUNLESSOVERWRITTEN* ENDINITA =/*=/*RROM.PFPOINT.AF=/*C=/*ChainfiletoassemblethedummymoduletosatisfytheexternalB=/*reference'.PFPOINT'forthefileIOSRR.WRR.SA.ThismoduleisC=/*usedwiththeversionoftheromlibrarywhichDOESNOTsupport=/*floatingpointcapability.=/*&=/*Parameter01Outputlisting/device4=/*Thisparameterisoptionalandwillbedefaulted=/*ifnotspecified.=/*=/*PARAMETER01EDITS=/*=/IFC \1=ARG RROM.PFPOINT.LS=/ENDIF=/*=/*=/*)=ASM RROM.PFPOINT.SA,RROM.PFPOINT.RO,\1;R=/*{ Included files are:=/*--none--=/*}=END*<*ThefileIOSRR.WRR.SAhasdefinedanexternalreferenceto>*'.PFPOINT'.SincethisversionoftheromlibraryforPASCAL<*doesnotsupportfloatingpointprocessingthisdummyfile5*hasbeencreatedtosatisfytheexternalreference.A*ThislocationshouldnotbeaccessedsincethereisnofloatingA*pointcapabilityforthisversionofthelibrary,howeverifbyC*chanceitshouldhapppenanillegalinstructionwillbeexecuted.** SECTION8XDEF.PFPOINT .PFPOINT: DC.W$4A AFC/*IFBYCHANCESOMEONESHOULDTRYANDREFERENCE+*THISLOCATIONANILLEGALINSTRUCTIONWILL$*BEEXECUTEDBRINGTHESYSTEMDOWN.END &=/*=/*RROM.PLJSR.AF=/*;=/*ChainfiletoassemblethePASCALlongjumpsubroutine.=/*=/IFC \1=ARG RROM.PLJSR.LS=/ENDIF=/*=/*%=ASM RROM.PLJSR.SA,RROM.PLJSR.RO,\1;R=/*{ Included files are:=/*--none--=/*}=END/B O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*?*Thisroutinewasremovedfromtheinitilaizerandplacedback,*inthelibrarybecauseofitsheavyusage.* SECTION8* XDEF.PLJSR** .PLJSR - LONG JSR ROUTINE* .PLJSREQU*$MOVE.L(A7),A4!GETRETURNADDRESS$ADD.L#4,(A7)!CORRECTITONSTACK&ADD.L(A4),A4!CALCULATEDESTINATIONJMP(A4)!GOTOIT* END.PLJSRO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8,1ASSIGNLU ASREL'RROM ASSIGNLUSA!@#($2ICMDLINE ICMDLINEL )F3 ;Z=1 F3 &3 4B A_1FINIT ASREL'RROM FINIT SA!@)(68K PASCAL FLOATING POINT INITIALIZATION SUBROUTINE/2p.PFPOINT H.PFINIT (FINIT F3 ,O:*O0<:U@fK,Mp mpC6 S@f+Hpp p +H0<aN3 A @ 0<aA @ LNuB+/ *m4H|+_aA m0taA @0X3  X0@NN3@aA Nu4Jf1FPOINT ASREL'RROM FPOINT SA!A(68K PASCAL FLOATING POINT F-LINE TRAP SIMULATOR SUBROUTINE 2H.PFPOINT p.P68341P (F3 Bg/Qfdhj@?@ OOdbpNNHH3 \;FF3 H+G0Bm4 `J(H$HG`+Kp&B+K+Ll2<0<BX@F3 YAb&Jr`BYf |(%H, |(%H0 |(%H8 |(%H< |(%HD |(%HH |L3@ (%HLApNAg @pNABA8pNAg/pNNGB EJ0:B J@gS@`BL3 EJ$ =f A(ta.F3 `aJf @fpBNNCK& CCa:JfR@  g ;fz;@F3 " ;fXa =fag ,f  g. Zg( Ae" [dCK( J3H -fDDHGj7a  fJg\(< I l&H|+o t$3 <+@xa:` H@0-4H@,NA4R1OPTION AFIX gUTILRR OPTION SA3U 68K PASCAL OPTION PROCESSOR SUBROUTINE 2p.PCLSCOD H.POPTION (ZH3 BBIA  am zn ,g4k6 -f`g0F3 g` =fRa`  f@`NuB:< &J $gF3 am zn 4g`6 am zn 4k6gF3 (քցSEf am zn 4j  f" am zF3 n +Nu:< am zn  am zn 4kf 3 g_郆SEf`z4Q1CLSCOD AFIX gIOSRR CLSCOD SA 68K PASCAL CHARACTER CLASS CODE TABLE2H.PCLSCOD (F3 @@ P@  @F3 4P1ALSTS AFIX gUTILRR ALSTS SA)0 68K PASCAL ALLOCATE STACK SUBROUTINE$2H.PALSTS H.PALSTSL (,23 HRğ b OH pNNO .HNu4L1CLO AFIX gIORR CLO SA# 68K PASCAL CLOSE FILE SUBROUTINE+2H.PCLO p.PCLOSPL p.PPRGBUF (&3 .L2*(-0aA aA +D0Nu4\1IFD AFIX gIORR IFD SA$ 68K PASCAL INITIALIZE FILE DESCRIPTOR SUBROUTINEL2H.PIFD p.PACCPER p.PCLOSPL p.PEDTFIL p.PSTDFLT p.PALSTS (H3 "_. H&g&<(QRD$OĵldElel؊aA F3 !OEP/JE8/JA??B$O eTgv`gvC)CL3 BjBBjBL@O(-0fgA@aB ZJf<gJ-(gaB Fat`I3@ agJ-$gaB .a\`aga`8m"b"?S@@@,J5LI3 g gaB a$` ga`agNq5A+D0NH؞M$gI3 pS@@@,A|B(@AJaB $Lyg/p(NNI3 g g%m6*HBB|gBN NupaB T|&8%m:*NuH瀀F3 A$0NCgNN *&o|&BjFB*K*E f|'`  3 f|'`|'BjDLNu4E L1RST AFIX gIORR RST SA 68K PASCAL RESET FILE SUBROUTINEm2H.PRST p.PACCPER p.PASGNF p.PCFLDAD p.PCALCLU p.PCLOSPL p.PSTDFLT p.PFLSCN p.PPRGBUF (L3 .L2*aA aA B f fpj& g faA  g4/ N3 &JaA 5 c 5aA aA H?aA 2&_g*8 >3 gA0NBgNN` apj&aB bAB5ANup`B P4N1RWT AFIX gIORR RWT SA 68K PASCAL REWRITE FILE SUBROUTINEL2H.PRWT p.PACCPER p.PASGNF p.PCLOSE p.PCALCLU p.PBUFSZ (J3 .L 2*aA  fFaA pj&aV*8 &g, g&A$0NCgL3 f0NCf0NCgNNaA BA aA CO%I5ANup`A 4^1AFI AFIX gIORR AFI SA 68K PASCAL ASSIGN FILE TO RESOURCE NAME SUBROUTINEA2H.PAFI p.PDFLT p.PCLOSPL p.PEDTFIL p.POPTION (J3 .0/2RA/7 A H,o,nM$aA Lx$W$jaA &F3 gp(NNfg0.f "3 %m@0%mD4` g%m6*Nu4Y1MPJ AFIX gUTILRR MPJ SA3 68K PASCAL 32 BIT INTEGER MULTIPLY SUBROUTINE2H.PMPJ (vF3 H./$T$ G0@AX@ @fB@C "*jDJjD$&H@HA<3 (HBHDԁ"HABA҃BBHBтVJjDFʁ[ DLNu4`1DVJMODJ AFIX gUTILRR DVJMODJ SA1 68K PASCAL 32 BIT INTEGER DIVIDE AND MOD SUBROUTINES$2H.PDVJ H.PMODJ (F3 H./ T a( DLNuH./ T ajD DLNu G0@AF3 X@ @fB@C "fpNN&jDJjDtBdR`dЁ3 SdF"jDF‚[Nu4I1WLN AFIX gIOSRR WLN SA$X 68K PASCAL WRITELN SUBROUTINE 2H.PWLN p.PWRTBUF (3 .LRaA Nu4Q1WRC AFIX gIOSRR WRC SA%# 68K PASCAL WRITE CHARACTER SUBROUTINE+2H.PWRC p.PIWPTR p.PLBLKS ("3@ .L8SDaA aA Nu4P1WRI AFIX gIOSRR WRI SA%5 68K PASCAL WRITE INTEGER SUBROUTINESI2H.PWRH H.PWRI H.PWRJ p.PIWPTR p.PLBLKS (J3 HH.L8v / BJjt-DSDGLdSCnCSDaA JgaA JCg(+J3@@ r0eR`aA (SCn0aA &_Nu;B@3 'd 4Z1WRSWRV AFIX gIOSRR WRSWRV SA%Q 68K PASCAL WRITE STRING AND VECTOR SUBROUTINES:2H.PWRS H.PWRV p.PIWPTR p.PLBLKS (JJ3 0/8/`8/0/./ G 2RAA sL@aA J@g aA S@n 3 &_$_ON4O1WRB AFIX gIOSRR WRB SA% 68K PASCAL WRITE BOOLEAN SUBROUTINE+2H.PWRB p.PIWPTR p.PLBLKS (:D3@ ./ LtG"JgSB8BaA aA SBn&_ NuFALSETRUE 4T1WRR AFIX gIOSRR WRR SA($ 68K PASCAL REAL NUMBER WRITE SUBROUTINES_2H.PWRR H.PWRW H.PWRX (p.PFPOINT p.PALSTS p.PIWPTR p.PLBLKS (F3 .JAlra`aNu.JAlra|`aNu.JAlrah`arNu8DN3  aA p fp-aA MpaA S@fNuINFINITY8DaA pM:O3  aB |S@f , rt0 9oaB XSAf)aB LNuNAN(16#I3 H XLBFBpBFgvg RFP0S@fLPNuJEo 0aB SEL3 `JFo aB SF`0aB S@Nu86,HCBCB@z CBCSEfR@JjD@L3 Nua|a @o@AUD`AWDaB v gv-aB ,HFRElBE?BEL3 @n :DESE_`Ta^n.aB b0aNnNuHLx"aB JMI AI3 lr4 Bo4<DBaB *T fa` g fa@`L3 a@ "L@`NuEaB p+Jjp-aB 0, AfX` AfXtXL3@ 0aB SAfNufv `v-aB aZ,HFRElBEY@A @lL3 pan.aB tabfazNuHLx"aB ZMI4YBA Blt` BI3 otaB 8T fa` g faN`a^ "L@`3 Nu4P1WRQ AFIX gFPQRR IEFWRR SA7W 68K PASCAL WRITE FFP REAL SUBROUTINEL2h.PFFPA h.PQSOP H.PQWRR h.PQRTD7 h.PIWPTR h.PLBLKS (F3 Dl8< Dn4 45@m,R4@ 4:@f0@``SD Dl Dl|1L3 RNu Ef<0`F RNuaaA Nua +f  aA `-aA .I3 fRNu @l0< ,0fv`v8_Da\aa.aB Pa4QB2<`aR3! RABoEaB 4SJg~ m +aB ` -aB D 0aB L3 HG0aB Nu8GSDa Go:8AGUDaB a64<`a"RBGoR3 .aB 4<`a RBAo`L8AWDaB a0aB .aB DGGl>43D aA SBnaA  Am Zo L Nup3NNALSERUE 4W1RDSTR AFIX gIOSRR RDSTR SA#U 68K PASCAL READ STRING OR VECTOR SUBROUTINE+2p.PGETCH p.PIRPTR H.PRDSTR (*43 L 8+24aA gaA JAgSA`A Nu4G U1SBLKS AFIX gIOSRR SBLKS SA$F 68K PASCAL SKIP LEADING BLANKS SUBROUTINE+2p.PGETCH p.PIRPTR H.PSBLKS (3B aA faA `Nu4a1GETCH AFIX gIOSRR GETCH SA " 68K PASCAL GET CHARACTER FROM INPUT BUFFER SUBROUTINE 2p.PRDBUF H.PGETCH (&3 faA 8+gp"NNBNu4_1IRPTR AFIX gIOSRR IRPTR SA! 68K PASCAL INCREMENT INPUT COMPONENT PTR SUBROUTINE2H.PIRPTR ($3 Rf`Rf7DNu4R1PEE AFIX gIOSRR PEE SA"  68K PASCAL PEEK INTO A FILE SUBROUTINE 2H.PPEE p.PRDBUF (*23 .$P f/ &haA 8+gp"NN &_ JNu4`1GET AFIX gIOSRR GET SA  68K PASCAL ADVANCE FILE COMPONENT POINTER SUBROUTINE 2H.PGET p.PRDBUF (JH3@ ./ L 8+ faA 8+gp"NNRmng 7D3 ` &_Nu4X1GETINT AFIX gIOSRR GETINT SA 4 68K PASCAL COLLECT INTEGER DIGITS SUBROUTINE+2p.PGETCH H.PGETINT p.PIRPTR (J3 z"Bv 0m 9op1NN`@JEoJf 0g 0PSE`RCaA aA J3 am zn 0m 9o #fJEoSE`RCBaA aA aF3 m zn 9o Am0 oJ@m @op1NN`TJEoJfL3P gPSE`RCaB .aB * am zn 9o Am0 o3 Jm oE"DENu4]1MAKINT AFIX gIOSRR MAKINT SA!9 68K PASCAL MAKE AN INTEGER FROM DIGITS SUBROUTINE2H.PMAKINT (^F3 B@BAt JEoNv #f(J@gpbNN` Ac AcpbNN`4B@BA`Cn$3 pcNN҃HA6HAЃSE`H@0Nu4W1RDBUF AFIX gIORR RDBUF SA 68K PASCAL READ BUFFER FROM FILE SUBROUTINEL2p.PASGNF p.PCFLDAD p.PCLOSE H.PRDBUF p.PBUFSZ p.PFLSCN (H3 H2+$KaA HgS`R@ЫS'@fpCNNA0NBJ3@ gz gt gNNA7A gXaA 55cJaA 7AR55L3D H5 J /g RB5 J /fRBaB ^2*aB V5AL `J`8D3 $k +gJf ` Jg0+HSЊ'@7AL Nu4M1ASGNF AFIX gIORR ASGNF SA8 68K PASCAL ASSIGN FILE SUBROUTINE2H.PASGNF ($*3 A$0@NCgNN$-0*)+B0Nu4X1BUFSZ AFIX gIORR BUFSZ SAT 68K PASCAL FIGURE OUT BUFFER SIZE SUBROUTINE2H.PBUFSZ (3 0<f0*Nu4M1CLOSE AFIX gIORR CLOSE SA8 68K PASCAL FILE CLOSE SUBROUTINES$2H.PCLOSE H.PCLOSPL (283 gH瀀A$0NCgNNLNuaA?* 6Nu4Y1CFLDAD AFIX gIORR CFLDAD SA 68K PASCAL CALCLUATE FIELD ADDRESS SUBROUTINE2H.PCFLDAD ((.3 g0<$`g0<(`+OSH@@,Nu4P1FLSCN AFIX gIORR FLSCN SA  68K PASCAL FILE LIST SCAN SUBROUTINE+2p.PDFLT p.PEDTFIL H.PFLSCN (*43 A JHM$aA LpaA g/p(NNNu4a1LDC AFIX gUTILRR LDC SA24 68K PASCAL LOAD CONSTANT STRING AND VECTOR SUBROUTINE/2H.PLDCS H.PLDCV p.PALSTS (*23 p`B@ _.8@gAaA "OUDg"YDnm2N4G b1LODV AFIX gUTILRR LODV SA3 68K PASCAL VECTOR LOADS DIRECT AND INDIRECT SUBROUTINEM2H.PINDV H.PLODV H.PINDVL H.PLODVL p.PALSTSL (8@3 "_. 0H`"_. (aA $O"gSn`Ug$Ynm4N4W1STCV AFIX gUTILRR STCV SA5P 68K PASCAL STORE CONSTANT VECTOR SUBROUTINE/2H.PSTCV H.PSTCVL p.PSTOREV ("3 $_. 0H`$_. "JaA N84W1STOV AFIX gUTILRR STOV SA62 68K PASCAL STORE VECTOR INDIRECT SUBRUOTINE/2H.PSTOV p.PSTOREV H.PSTOVL ((03 $_. 0H`$_. "RA w"OaA O8N4U1STRV AFIX gUTILRR STRV SA7 68K PASCAL STORE VECTOR DIRECT SUBROUTINE/2H.PSTRV p.PSTOREV H.PSTRVL ($3 $_. 0H`$_. "OaA O8N4V1STOREV AFIX gUTILRR STOREV SA6 68K PASCAL STORE VECTOR SUPPORT SUBROUTINE2H.PSTOREV (6<3 &RC(gSn`UUg SnJg0JgNu4R1EQUV  AFIX gUTILRR EQUV SA13 68K PASCAL COMPARE VECTORS SUBROUTINES2H.PGEQV PH.PEQUV H.PGRTV @H.PLEQV 0H.PLESV H.PNEQV H.PGEQVL XH.PEQUVL H.PGRTVL HH.PLEQVL 8H.PLESVL (H.PNEQVL (F3 a^WDNa`WDNaNVDNaPVDNa>UDNa@UDNa.SDNa0SDNF3 aRDNa RDNaTDNaTDN$o0H`$o . &RCCA23 8փUUgfSnJgIfJg _O8N4a1LODS AFIX gUTILRR LODS SA2G 68K PASCAL DIRECT AND INDIRECT STRING LOAD SUBROUTINE/2H.PINDS H.PLODS p.PALSTS (&3 $_. 8TDaA "OUDg"YDnm2N4U1STRS  AFIX gUTILRR STRS SA6E 68K PASCAL STRING DIRECT STORE SUBROUTINE2H.PSTRS (4:3 "_. 2RAAU@Am0`>R@@$OJ@o Y@nf0ON4W1STOS  AFIX gUTILRR STOS SA6 68K PASCAL STRING STORE INDIRECT SUBROUTINE2H.PSTOS (8>3 "_. 2RAAU@ wAm0`>R@@$OJ@o Y@nf0ON4R1EQUS AFIX gUTILRR EQUS SA1 68K PASCAL COMPARE STRINGS SUBROUTINES`2H.PGEQS (H.PEQUS H.PGRTS H.PLEQS H.PLESS H.PNEQS (F3 a.WDNa&VDNa]DNa_DNa^DNa\DN./E46RCCF3 C026RCCHq00Bo0J@g fS@np Agma `aL.HNѰ3 fSBnNufRBmNu4W1NEW AFIX gUTILRR NEW SA3@ 68K PASCAL NEW (HEAP ALLOCATION) SUBROUTINE/2H.PNEW H.PNEWL p.PCHKOVF (J3@ ."GaA (` ."GaA B8R.vl(X"mQ$I&)g""CnF3  lX%Q`*""`""mEH bpNNEQ$"$+J 3 Nu4]1DIS AFIX gUTILRR DIS SA0E 68K PASCAL DISPOSE (HEAP DEALLOCATION) SUBROUTINE/2H.PDIS H.PDISL p.PCHKOVF (pH3 TT.aA $PB mQbVB("b "H h`%H#J"gҐb 63 ؊ $H#J" ҄bJf $P+J`" ґ$ @!JNu4H U1MRK AFIX gUTILRR MRK SA3( 68K PASCAL MARK (HEAP MARKING) SUBROUTINE 2H.PMRK p.PCHKOVF (3 .aA YNu4]1RLS AFIX gUTILRR RLS SA4 68K PASCAL RELEASE (HEAP DEALLOCATION) SUBROUTINE 2H.PRLS p.PCHKOVF (6>3 .aA Y"mQc""ib g Бb I"ip +HNu4_1CHKOVF AFIX gUTILRR CHKOVF SA)F 68K PASCAL CHECK FOR STACK HEAP OVERFLOW SUBROUTINE2H.PCHKOVF (3 OO bpNNNu4c1CVBSV AFIX gUTILRR CVBSV SA)X 68K PASCAL CONVERT STRING S->V STR UNDER VEC SUBROUTINE 2H.PCVBSV p.PCVTSV (.63 .R@@24APUAo!`YAnf1`0@`A Nu4Z1CVTSV AFIX gUTILRR CVTSV SA0& 68K PASCAL CONVERT STRING TO VECTOR SUBROUTINE/2p.PALSTSL H.PCVTSV H.PCVTSVL (bF3 H _.2H6< R@gR(g:nECU@g#"Y@nm3".I*3 `"OaA $OUg m $Ynm44UnN4`1CVTSU AFIX gUTILRR CVTSU SA0 68K PASCAL CONVERT STRING TO UNNORMALIZED SUBROUTINE 2p.PALSTS H.PCVTSU (NH3 _.U@2RAAR@@8Ag2nCE>g%!Y@nm5!.JN"OaA $OJA3 g$YAnm4N4`1CVTUS AFIX gUTILRR CVTUS SA0@ 68K PASCAL CONVERT UNNORMALIZED TO STRING SUBROUTINE2H.PCVTUS (063 _.R@@C2RAAEgJAg#"YAnm3".IN4O1SLEN AFIX gUTILRR SLEN SA5$ 68K PASCAL STRING LENGTH SUBROUTINE2H.PSLEN (3 _.02RAAN4V1SCON AFIX gUTILRR SCON SA4& 68K PASCAL STRING CONCATINATION SUBROUTINE 2H.PSCON p.PALSTS (JH3 _.4$O6RCCC028aA Hq@0g!S@n"_B0R@@J@g"3 S@n3.IN4P1SCOP  AFIX gUTILRR SCOP SA4@ 68K PASCAL SUBSTRING COPY SUBROUTINE 2H.PSCOP p.PVALSI (rH3 _.46RCCC0aA fBA`PS@8@Do2JAg@E0Df8DDg*83 gSS@n`R@@g"S@n`"J.I?N4T1SPOS AFIX gUTILRR SPOS SA56 68K PASCAL SUBSTRING POSITION SUBROUTINE2H.PSPOS (bF3 ."O20R@@E40R@@HrB@JAg6Am2RB0SA I?fJAg ( (3 f SAnBR@` 2$D"HSBnB@2.W GN4R1SINS AFIX gUTILRR SINS SA5 68K PASCAL STRING INSERTION SUBROUTINE+2H.PSINS p.PALSTS p.PVALSI (lJ3 _.4$O6RCCC02gE aB  / AC EaX3P B aB AC"EaB ACEaB aB So?oHBoIB B$BI3 (B,|(B0B4B8<<`n/|aB W NuA3 B>?B/Gp`BBBJk>?p`>@pHz`B 4K1LOG  AFIX gFPSRR LOG SA 68K PASCAL LOGARITHM SUBROUTINEm2H.PLOG p.PADX p.PDVX p.PNORM p.PMPX p.PATANH2 p.PCORDA p.PFPERR p.PFPOINT (RH3 ry. aA oL @?g @gJfF3 Jg @b@@JkS@jH`.B @g2jDAHAO3 0<S@jBBoHAChEaB b ACbEaB P /EaB BU3D /CaB 6 IB 6<<aB &RoAC aB aB  @?c @dI3 R@ @fHX>aB W Nu>?B/Gp`>3 BBpHz`B 4L1ATN  AFIX gFPSRR ATN SA 68K PASCAL ARCTANGENT SUBROUTINEm2H.PATN Hp.PATAN2 p.PADX p.PDVX p.PNORM p.PMPX p.PCORDA p.PFPERR p.PFPOINT (F3 ڢ!h4H3 .aA oLH@@. @?f8 f fL3 ?z/z|/zz`B/GpaB b``fEaB T @oT/@ jBRJ@U3 k AHCaB 6  @o IB *BFaB $`ahJokAC aB aB J/ I3 j `a@  @?c @dLR@ @fHX?@aB oL3 NuHACEaB ACEaB /ACE13( aB |aB xACEaB hLNu4P1CORDA  AFIX gFPSRR CORDA SAT 68K PASCAL CORDIC INVERSE SUBROUTINE+2p.PADX p.PNORM H.PCORDA (F3 HJ?FH/R/j/j BBBB BB| F@gF3 /|`ACEaB 0ACZEaB $ A@CE aB aB `TACE aU3@ B A C4E aB AC E aB aB AC E aB `aL`A L3 CE aB  @?c @dLR@ @fHX?aB WI3 Nu,.H$aB joLH@@/@ @?g @I3 l H($NuACDEaB &L @o@?D@o: @!ldRBd I3 RAdRo`@ dRAdRoBHACE aB / AU3( C EaB aB ACE aB / AC EaB aB B(BI3 ,B0B4B8B<|8IB fB/T/lJoj /4` ACI3 EaB :<<`rL4FH L(FHJoj ` / A4CO3 E4aB A(C E(aB ./\/\JokACEaB RF?3 F?o <"$,$TNu6>?B/G0<Hz`B 4U1MATHX  AFIX gFPSRR MATHX SA2 68K PASCAL EXTENDED MATH PACK SUBROUTINESk2H.PADX LH.PDVX H.PNORM H.PMPX H.PSQTX Yպ/mۖ~Un]*wnSVU[rF3 ݹUV?wUUUUUꪪUUF3 U?F3 ?F3 ?F3 ?F3 ?F3 @ 3 tC^Zg4W1ATANH2  AFIX gFPSRR ATANH2 SAE 68K PASCAL ATANH OF NEG POWERS OF TWO TABLE2H.PATANH2 (F3 ShTAbQF +9=]XuHq%V"+G&#ZF3 UU DD@UUb" *UUXUUF3 UU @U *F3 @ F3 @ F3 @ I F3 @ F3 @ 3 lyQ4d1GTM AFIX gFPSRR GTM SA 68K PASCAL GET FLOATING POINT ARITHMETIC MODE SUBROUTINE 2H.PGTM p.PFPOINT (,43 W.aA @0HrtHvHH"ON4d1GTF AFIX gFPSRR GTF SA T 68K PASCAL GET FLOATING POINT EXCEPTION FLAGS SUBROUTINE 2H.PGTF p.PFPOINT (3 .praA A0ANu4W1GTT AFIX gFPSRR GTT SA7 68K PASCAL GET TRAP ENABLE FLAGS SUBROUTINE 2H.PGTT p.PFPOINT (3 .praA A0ANu4d1STM AFIX gFPSRR STM SA4 68K PASCAL SET FLOATING POINT ARITHMETIC MODE SUBROUTINE 2H.PSTM p.PFPOINT (^F3 _."O Rb* Rb  Rb RbJgpT(3 NN`aA C0[[aA C N4d1STF AFIX gFPSRR STF SA 68K PASCAL SET FLOATING POINT EXCEPTION FLAGS SUBROUTINE 2H.PSTF p.PFPOINT (",3@ .JkaA @0aA @ `pSNNNu4b1STT AFIX gFPSRR STT SA 68K PASCAL SET THE FLOATING POINT TRAP MASK SUBROUTINE 2H.PSTT p.PFPOINT (",3@ .JkaA @0aA @ `pRNNNu4Y1NAN AFIX gFPSRR NAN SAW 68K PASCAL GENERATE A NOT-A-NUMBER SUBROUTINE 2H.PNAN p.PFPOINT ($,3 _.JfppNN/B?<N&mBX+KB8D:/8\F3 D8DD8\?D>_HGC&oG0{pN `L3 Jf\'o B+aB faB *f)HDD4|F3  H`j'o B+)HDD4|I3 aB `:'o B+/ oI3 `HE>;PG>;PGaB "f&H&/HE>;P:;PH$oF3 WfN` Gf4`$`I3 / o`dHE>;PG>;PGaB fH&H&/HE>;PF3 :;PH$ofWDGN` Gf6`&`'o +F3 @`'o B+`'o B+`'o B+/ m`L3" aB faB Lf)HDD4| / o`xL3 \HaB 8/ g aB H`d'o B+)HDD4|L3@  LvJ / o` g HaB aB $H`'o O3 B+aB 4faB f) o`HaB `'o B+,-B/F3 f,&mBE <<><N&mBT+KB8/ ,-BU`HH/HMEO3 &oaB dg܄+FB`n'o B+|aB fV$$HaB 6f*@F3 &JE f <`<>߃8 < : HBކ,CޅCބC8HFHB: ؅C: F3 ؅C: HA؅CHFHGDHGHDDHFCHF8*܄C8 ܄CHA8 ܄C86 F3 HA؃vHECHEHFDHFHDDHECHE8ڄ"$&@H@@ Jm I3 S@ @fJfJf S@L8J_gNuaB  NuL8 F3 fff `.ek `F3 `k `Nu+f `Jk `F3 Nu+f `Jk `Nuax`>+fF3 `B@2IP;NuNuNua0WaJfF3 Jg`ag`a0g`a&`,f <<` S@F3 jNuL8,f&<<` SCjNuB@)HAA;oI3 aB 8<Nu HpF3 B@)f&H@@0| p<`H0{NF3 *LnF3 $Dd0\ 8d@HPx F3 A`(A`"A`A `A`A` A`A) fV fF3 T` m ` m$` m(` m,` m0`| m4`t m8`lF3 m<`d m ")HHE02HҀ+A `B m$")HHEr02F3 HҀ+A$` m(")HHEP02HҀ+A(` m,")HHE.F3 02HҀ+A,` m0")HHE 02HҀ+A0` m4")HHF3 E02HҀ+A4` m8")HHE02HҀ+A8`v m<")F3 HHE02H fRҀ+A<`H)HHE~02H m +H F3 `()HHE^02H m$+H$`)HHE>02H m(+H(F3 `)HHE02H m,+H,`)HHE02H m0+H0F3 `)HHE02H m4+H4`)HHE02H m8+H8F3 `h)HHE02H m< fR+H<`<&mBE <<><F3 N&mBT+KB0) H m `&mBE <<><N&mBT+KB0) H mF3 $`&mBE <<><N&mBT+KB0) H m(`&mBE <<F3 ><N&mBT+KB0) H m,`&mBE <<><N&mBT+KB0) F3 H m0``&mBE <<><N&mBT+KB0) H m4`4&mBE F3 <<><N&mBT+KB0) H m8`&mBE <<><N&mBT+KBF3 0) H m<`&mBE <<><N&mBT+KB<) >FHH_JGmF3 GO05pH` GO 5pІ m `&mBE <<><N&mBTF3 +KB<) >FHH_JGmGO05pH` GO 5pІ m$`,F3 &mBE <<><N&mBT+KB<) >FHH_JGmGO05pH`F3 GO 5pІ m(`&mBE <<><N&mBT+KB<) >FHF3 H_JGmGO05pH` GO 5pІ m,`|&mBE <<><F3 N&mBT+KB<) >FHH_JGmGO05pH` GO 5pІ mF3 0`$&mBE <<><N&mBT+KB<) >FHH_JGmGOF3 05pH` GO 5pІ m4`&mBE <<><N&mBT+KB<) F3 >FHH_JGmGO05pH` GO 5pІ m8`t&mBE F3 <<><N&mBT+KB<) >FHH_JGmGO05pH` GOF3 5pІ m<`&mBE <<><N&mBT+KB0) H @`&mBE F3 <<><N&mBX+KB i ` mB&mBE <<><N&mBT+KB0) F3 H` mB&mBE <<><N&mBT+KB<) >FHH_JGmGF3 O05pH` GO 5pІ`T)HHE02H&mBE |> GF3 fRGNA @fRR@&mB+KB<`p<`p<`p<I3 `&ip aB 2<LNu/ @?f (㌈f `F3 `P @f0(f `f ``fF3 `(NuNuLNu(g+D Df L3A `Nu+gaJg 0<aB Z` 0<aB NNu <?B$+NuF3 <BBNu <?BBJ NuaNu(NuaaЀNuaaԀNuR3 aNu0<aB Nu0<aB Nu0< aB Nu0<aB Nu+fa` JF3 jaNu2d,6@JTzF3 G,HFE;` Gl *E;@{p<;`(N`$Nu (3 B B B B B B B B B B B B B B B B B B B B B B B B B ^s3g ^vv^^fvv^B B nvB B B B vB ^^vv^B RB B (B B RB B B D3 B B B (B DB (B B (B B B B B B RB B (B B RB B 0B B B :B B :B B B B (B (B :B B (3 B B B B B B B 0B B B :B B NB B B NB B NB B B NB NB NB NB B NB B B B B B B N3 B B B NB dB dB B TB B dB ^B B TB ~B B B (B TB B TB TB TB TB TB B B B TB hB B B B 3 B B B B B B B B B bB B XB B B B B B B B B B @`B @`B &@`L3 B J@`B B8P?`BgLD@؀ D(*H8+0 ;@pJfF3 ff 0`.e 0USjpRSfƎg0LI3  Jk S@ @fJfJf S@J_gNuaB NuHF3 G8D L@BAOg2$%X%XBOdH+|aI3 B _LJG`LNu F3  @P$ F3 k(!$C@'ԥ+*.F3 1_15ɿ8.; k:v@?#F3 BxŬbE&zIx2nLh? WOF3 SYQa@VoYˏ' :]?9x `6 cF3 gNfo|@E"jŭ+pxIϦGɀR~F3 ގ Ivuu ;]=]5&`R X3> B fB B B B fLv~)(HDD;@jaB Z`U3 GlO8;@N@` GlWGO8;@ N@` B ~B B B B XUGknfL3 6?aB 6f]@j `f|~H $ON$@&H`0`2/aB f]@I3 j `f|~H $ON$@&H` `6aB f]@j RO`F3 Xf|~H $ONRO$@&H``8z) Gf Eo0< L3@ aB z``M5P>aB Nu GgI3 +0E:TE{pmJjaB 6{pm+fl+fF3 ` `J<+gJkA|L````JjF3 A`L```` `p`*A0ppfS@`0< aL3 B |+gJ`D`2+fa+f`aB ZI3 `JfR@$H@B@/aB f]@j `f|F3 ~H $ON$@&H` `f@&H@HA0HB2(zEI3 |FDBHaB f]@j `rf|~H $ON$@&H` `I3@ R&H@HA0?HB2HaB Zf]@j ` f|~H $OF3 N $@&H` 0NuJGf? <`& Gf(" <`F3 (BHB2 2F3 pHgE oS``&HEf <`<N)HF3 I&o"0{N,88 "tvH@HH@ @f@F3 0QQQQQ4HB2<g+F3 f&`L @f<(g(R@+gJm S@J`aO3( B `0<` aB aB ~`0"/$/vHH@ @?f&gF3 +f`: @f.(g"+gJm U3P S@J`aB N`aB FaB `dHH~aB `T2H~aB z`F"~aO3( B n`:"o)H $i CaB aB `H@@@H@<`Dj DG@AB GAcJkV` DSGF3 kUĆQ(k(j@xd0D@`(fF3 d0D@`D@@`D@@ԆӅdfUĆR@F3 (f(Jk0<+ f`JkJkxAI3 S@J[aB Nu|rtxEJ1Pf REQNu1P&(F3 ԄӃxԆD1P&(ԄӃxԆDRQNuz~ a0<?F3 Jm S@J`Nup f <  f <?B$) L3 Nu  f`B  f`B )()i Jf0<BBNuI3 z~a gDB5Ba^/ H) c p aB ތ:<>*E+I3 +gDGaB b_$%_%_vgJj 0<(JGf><(N@F/</</<JGkSG`F3 DGGJjG?`P//</<?<`:`6````$/</<F3 /<Jk?<`?<` JfJf`?+|H f F3 2<`J@j D@@@|HJ@W0<FJfJg``L3 @ Z$%| %|H@aB ܴJgaB &gF3 BA`|@JjDAL8BgJGj |DGn|` Fo|`I3 <JGj Do8zDF0G>[jDGaB >$%o%o BRH @L3 vH@B@H@Jk aB >`aB LJg7o++J/jL3 H >aB JfJk `(*,aB ?L3D BHp*f aB ܞ`aB Jof f6LRWRD` fO3@ >/SGaB 2HRo`4>/SGaB Jof$J/jaB > f6LI3@ RWSD`6*gp`0*aB OHGHFHEHDI3 p2/jDAf0` pAY5AaB 0/S@Jo[I3 J/[+aB bf]@j `6f|~H $ON$@I3 &H` 0$%_%_7_NuaB f]@j `"f|~H F3 $ON$@&H` 0Nurtvxz|~`8< AmHGF3 HFHEHDHGHFHEHDSjtR2g0<HAdHGHFI3 HEHDHGHFHEHDHAQNuJj paB VNqNuz~v,<@@d R@F3 /pff fe.Jk `<@F3   l ` `$Jk `<@  l `K  fF3 ``SJk `<@  l ` Jk6SJk `<@I3   l ` ReN`0"$&ކV Jk S@aB VF3 NqNu @L<<8HRDo:Jf"ff v`|dv`F3 vއUS@SD`dR@SHHl`Hf*d`:fI3 d`,f f`$%F%GRH0@NB `"$&f 0<'3 `Jm S@J`vNB zNu4R1ABSQ AFIX gFPQRR IEFABS SA8' 68K PASCAL FFP ABS AND NEG SUBROUTINES/2H.PQABS H.PQNEG p.PFCPYRT (3 NuJgGNu4R1ADDQ AFIX gFPQRR IEFADD SA81 68K PASCAL FFP ADD/SUBTRACT SUBROUTINEP2p.PFADD H.PQADD 6p.PQDOP H.PQSUB p.PQTIEEE p.PFCPYRT (BJ3 Fa0Bg/Qfdhj@?@ FNwaA aA ` 3 A 4P1ATNQ AFIX gFPQRR IEFATAN SA87 68K PASCAL FFP ARCTANGENT SUBROUTINEA2h.PQSOP h.PQTIEEE h.PFATAN p.PFCPYRT H.PQATAN ( 3T aA aA `A 4R1CMPQ AFIX gFPQRR IEFCMP SA8B 68K PASCAL FFP COMPARE/TEST SUBROUTINE/2H.PQCMP H.PQTST $p.PFCPYRT (283 f~ f|JjJjNuNu f~JNu4L1DIVQ AFIX gFPQRR IEFDIV SA8I 68K PASCAL FFP DIVIDE SUBROUTINEL2h.PFDIV H.PQDIV h.PQDOP h.PQRTD7 h.PQTIEEE p.PFCPYRT (.<3@ aA JfJgB`A <NNJfpNNaA `A 4Q1EXPQ AFIX gFPQRR IEFEXP SA8W 68K PASCAL FFP EXPONENTIAL SUBROUTINEA2p.PFEXP p.PQSOP H.PQEXP p.PQTIEEE p.PFCPYRT ( 3T aA aA `A 4[1FLTQ AFIX gFPQRR IEFIFP SA9 68K PASCAL FFP FLOAT INTEGER TO REAL SUBROUTINE62h.PFIFP H.PQIFP h.PQTIEEE p.PFCPYRT ( 3 HaA `A 4O1LOGQ AFIX gFPQRR IEFLOG SA9 68K PASCAL FFP LOGORITHM SUBROUTINEA2p.PFLOG H.PQLOG p.PQSOP p.PQTIEEE p.PFCPYRT ("3@ aA kfpNNaA `A 4N1MULQ AFIX gFPQRR IEFMUL SA9 68K PASCAL FFP MULTIPLY SUBROUTINEA2h.PQDOP H.PQMUL h.PFMUL2 h.PQTIEEE p.PFCPYRT ( 3T aA aA `A 4T1PWRQ AFIX gFPQRR IEFPWR SA9 68K PASCAL FFP POWER FUNCTION SUBROUTINEW2p.PFLOG p.PFEXP p.PQDOP H.PQPWR p.PFMUL2 p.PQTIEEE p.PFCPYRT ( 03@U aA JkfpNNaA aA aA `A 4R1REMQ AFIX gFPQRR IEFREM SA9# 68K PASCAL FFP REM FUNCTION SUBROUTINEL2h.PFDIV H.PQREM h.PFMUL h.PFSUB h.PQDOP h.PQTIEEE (J3@@ aA JfJf <NNpNNHaA hpNN@mn o~F3 `h<<` g<S l< gJf R  f~`| ?3! ކd RS ,aB l,/FaB bP`B \./D`4K1RNDQ AFIX gFPQRR IEFRND SA97 68K PASCAL FFP ROUND SUBROUTINEL2h.PFADD h.PFFPI H.PQRND h.PQSOP p.PQRTD7 p.PFCPYRT (*83@  aA Jj,<`,<@aA aA hpNN`A 4Y1SINQ AFIX gFPQRR IEFSIN SA9E 68K PASCAL FFP SINE/COSINE/TANGENT SUBROUTINEu2h.PFTAN h.PFSIN H.PQTAN h.PFCOS H.PQSIN H.PQCOS h.PQSOP h.PQTIEEE p.PFCPYRT (6L3R aA aA `aA aA `aA aA hL A *Sg~`A pNN4Q1SQTQ AFIX gFPQRR IEFSQRT SA9R 68K PASCAL FFP SQUARE ROOT SUBROUTINEL2h.PQSOP h.PQTIEEE p.PFCPYRT h.PQRTOD7 h.PFSQRT H.PQSQRT ( 3A@ aA jpNNaA `A 4^1TRCQ AFIX gFPQRR IEFFPI SA9X 68K PASCAL FFP TRUNCATE REAL TO INTEGER SUBROUTINE62h.PFFPI h.PQSOP H.PQFPI p.PFCPYRT ("3P aA aA hpNNLxXNu4T1FFPFRONT AFIX gFPQRR IEFFRONTSA@ 68K PASCAL FFP MATH ROUTINES - FRONT-END$2H.PQDOP H.PQSOP (`F3 O//HaNuO//HaGaGNuHG iZi &3 JNud ~f <JNu~NupNN4S1FFPBACK AFIX gFPQRR IEFBACK SA@ 68K PASCAL FFP MATH ROUTINES - BACK-END32H.PQRTD7 (H.PQTIEEE H.PQRTOD7 $(:@3 iއg HGJLxXNupNN./LxX f~Nu4V1FFPSIN AFIX gFPQRR FFPSIN SAB 68K PASCAL FFP MATH ROUTINES - SIN/COS/TAN2H.PFTAN h.PFDIV H.PFSIN H.PFCOS h.PFMUL h.PFSUB H.PFSINCS h.PFTHETA h.PFTNORM p.PFCPYRT (nF3 ?<`$?<`?<` bTJNuBgJk 8cH~$ cJ c .aA XDxB΄,<CaA ,.aA F3 $(< .BJkFD c~䯾o$`D c~DDI3@ l`z,g:TL~NuRB&(Jk ڄ܃QNuޘQNu4U1FFPATAN AFIX gFPQRR FFPATAN SA@0 68K PASCAL FFP MATH ROUTINES - ARCTANGENTL2h.PFDIV h.PFSUB h.PFTHETA h.PFTNORM H.PFATAN p.PFCPYRT (H3@ H~,<AB'ebcFGaA CD c|`4|*< AL3 A rt`ܐ(&䣞j.XRQaA .Jg .<AaA Jg3 L~Nu4[1FFPHTHET AFIX gFPQRR FFPHTHETSAA" 68K PASCAL FFP MATH ROUTINES - HYPERBOLIC TABLE2H.PFHTHET (`F3 z,W}bGX@U @ &3 @ 4L ]1FFPTHETA AFIX gFPQRR FFPTHETASAB& 68K PASCAL FFP MATH ROUTINES - TRIGNOMETRIC TABLE2H.PFTHETA (lF3 !T3~SUU??23 ?4V1FFPSQRT AFIX gFPQRR FFPSQRT SAB 68K PASCAL FFP MATH ROUTINES - SQUARE ROOT 2p.PFCPYRT H.PFSQRT (F3 a<NugPk dR HC6<(*,A4.< ` F3 (؄*[ZcR FHCNu@D3 @ 4X1FFPFPI AFIX gFPQRR FFPFPI SAA 68K PASCAL FFP MATH ROUTINES - FLOAT/INTEGER 2H.PFFPI p.PFCPYRT (RF3 k$gBAkjDNu~<Nu~NuBkjDDNuf3 DJk~<Nu4X1FFPIFP AFIX gFPQRR FFPIFP SAA( 68K PASCAL FFP MATH ROUTINES - INTEGER/FLOAT 2H.PFIFP p.PFCPYRT (8>3 z_Jg0jzDi&S bHGއ[Jj dRNu4Q1FFPDIV AFIX gFPQRR FFPDIV SA@F 68K PASCAL FFP MATH ROUTINES - DIVIDE 2H.PFDIV $p.PFCPYRT (F3 JfJ<NuHFHG`k~Nug(gvEDiBHGHFF3 FkTiHGDL&:ƞHGHF6BŞd&BރSE&HCBGHEk:3 څS>:.gNu4S1FFPMUL AFIX gFPQRR FFPMUL SAAC 68K PASCAL FFP MATH ROUTINES - MULTIPLY 2H.PFMUL p.PFCPYRT (zF3 gFg\EDviRE]B&HC(BHD؃BDHDHGHFHFބj @3 gNuSiex@ބއdRgNu~NujJ<Nu4b1FFPMUL2 AFIX gFPQRR FFPMUL2 SAAQ 68K PASCAL FFP MATH ROUTINES - HIGH-PRECISION MULTIPLY 2H.PFMUL2 p.PFCPYRT (F3 gfg~EDvhFjnfrakj`LE]HE:BB8HD&HCF3 ؃HF&؃BDHDHGHFHEބNuaj gNuSiex@ބއdRi$3 gNu~Nu`J<Nu4U1FFPDBF AFIX gFPQRR FFPDBF SA@7 68K PASCAL FFP MATH ROUTINES - DUAL/FLOAT 2H.PFDBF h.PF10TBL (H3 z Jgkzއ[ Fn| Fmn8DD/AA p@<&0@ W.:BEF3 HExHCڃHG6ڃdR:HEOޅkއSFdRFv 8fi*3 FgNu~NuJDk~HFJ<Nu4W1FFPADD AFIX gFPQRR FFPADD SA@  68K PASCAL FFP MATH ROUTINES - ADD/SUBTRACT/2H.PFADD H.PFSUB p.PFCPYRT (F3 gR kjklf`>k^g>k^g2k8 d,&B<ރeNuRF3 id~S<Nu.NuJNu oD&B<ރeNukgvF3 gPk< d&B꫞kBS bHGއ[kgNu~Nu*3 oD&.<`DgjD`4V1FFPFPA AFIX gFPQRR FFPFPA SAA 68K PASCAL FFP MATH ROUTINES - FLOAT/ASCII+2H.PFFPA h.PF10TBL h.PFCPYRT (F3 O// JBg/Qfdhj@?@ H>f~A?|+.H3 "jT/"<HFvAA Pmn d \HSC`M ARCPng`AF3 SCPmg/|E+00,4jDBT/- B eR/.B //tC$JjJ(fB843 X*x UeBޅ D0Q>HL|Nw4Z1FFP10TBL AFIX gFPQRR FFP10TBLSAB2 68K PASCAL FFP MATH ROUTINES - POWER TEN TABLE 2H.PF10TBL rp.PFCPYRT ( F3 @#< k:9/6ɿ2_2/ ,*(ԥ%C@"kF3 ( $P@ F3 =nѷYŬG7ֿwp_Aܯ ٌ F3 .BҴ$5ϐ|敔ȸw2œJ~ePm&3 %tѸ4c1FFPTNORM AFIX gFPQRR FFPTNORMSAAY 68K PASCAL FFP MATH ROUTINES - TRANSCENDENTAL NORMALIZE2H.PFTNORM (6<3 xBJg.jD< bHF܆[Jj dRNu4[1FFPCPYRT AFIX gFPQRR FFPCPYRTSABA 68K PASCAL FFP MATH ROUTINES - COPYRIGHT NOTICE$2H.PFCPYRT H.PFLOATP (DF3 MC68343 FLOATING POINT FIRMWARE (C) COPYRIGHT 1981 BY MOTOROLA I 3 NC.4=/*=/*RROM.RLIBNFP.CF=/*(=/*ChainfiletocreateRROM.RLIBNFP.RO=/*D=/*TYPICALLYthischainfileisbuiltWITHOUTassemblingthe'RROM'C=/*catalogmodules,HOWEVERiftheuserwantstobuildthelibraryD=/*andassemblethe'RROM'catalogmoduleshemustprovideasingle=/*argumentofanyvalue.=/*=/*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>I*THISOUTPUTFROMTHISCHAINDOESNOTSUPPORTTHEFLOATINGPOINTPROCESSO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=/*$=COPY PASCALIB.RO,RROM.RLIBNFP.RO;BY=/IFS\1=/*%=/*Assemblethelongjumpsubroutine=/*=/@ RROM.PLJSR.AF #NULL=/ENDIF=/IFS\1=/*E=/*Assemblethedummymoduletosatisfyexternalreferenceinmodule=/*IOSRR.WRR.SA=/*=/@ RROM.PFPOINT.AF #NULL=/ENDIF=/*=/*BUILDTHELIBRARY=/*=LIB RROM.RLIBNFP.RODEL INITDEL WRQDEL RDQDEL TRCDEL RNDDEL PWRDEL EXPDEL LOGDEL ATN DEL CORDA DEL SINCOS DEL MATHX DEL ATAN2 DEL ATANH2DEL GTMDEL GTFDEL GTTDEL STMDEL STFDEL STTDEL NAN DEL FINIT DEL FPOINT DEL M68341DEL ABSQDEL ADDQDEL ATNQDEL CMPQDEL DIVQDEL EXPQDEL FLTQDEL LOGQDEL MULQDEL PWRQDEL REMQDEL RNDQDEL SINQDEL SQTQDEL TRCQ DEL FFPFRONT DEL FFPBACK DEL FFPSIN DEL FFPLOG DEL FFPEXP DEL FFPATAN DEL FFPHTHET DEL FFPTHETA DEL FFPSQRT DEL FFPFPI DEL FFPIFP DEL FFPDIV DEL FFPMUL DEL FFPMUL2 DEL FFPDBF DEL FFPADD DEL FFPFPA DEL FFP10TBL DEL FFPTNORM DEL FFPCPYRTADD RROM.PLJSR.RO/ADD RROM.PFPOINT.RO/PLJSRLQ=/*"=/*RROM.RLIBNFP.ROhasbeenbuilt=/*=END M  e=/*=/*A=/*RROM.RLIBNFP.LG-ChainfiletolinkgloballysharablePASCAL,=/*runtimeroutines.Theseruntimeroutines+=/*DONOTINCLUDEfloatingpointroutines.=/*=/**=LINK ,RROM.RLIBNFP.LO,\LINKLS;HAMIXSZ=100SEGSEG0(RG):8\GSPLSTR INPUT RROM.RLIBNFP.RO END ,1PLJSR ALARKMRROM PLJSR SA#112H.PLJSR (3 (WXN4,1PFPOINT ALARKMRROM PFPOINT SA#A12H.PFPOINT (3 J471SYMFLAG AFIX gUTILRR SYMBUG SA)B SYMBUG FLAG2H.PSYMBUG (3 4X1TRAPS  AFIX gUTILRR TRAPS SA7 68K PASCAL TRAP HANDLING RUNTIME SUBROUTINESo2H.PADDRER tH.PVCHKI 8H.PVBUSER VH.PVZDIV H.PVTRAPD 8H.PVTRAPE H.PVTRAPV (F3 H|"o2 Ao <`THҁN`J``L`V`nH@                   "/ F3 ga<`g < alR o +Gt+@x`BH@+Gt+@xaH`0F3 H+It0/g.H@a2+@x`+It0/Hg+@x @p"`p |F3 `ΟH|| ?| /| /| OpND F3 NuH|+ot <+@xa`H|+ot <+@xa`zH|+oF3 t <+@xav`\H|+o t <+@xaX`>H|+o t$3 <+@xa:` H@0-4H@,NA4R1OPTION AFIX gUTILRR OPTION SA3U 68K PASCAL OPTION PROCESSOR SUBROUTINE 2p.PCLSCOD H.POPTION (ZH3 BBIA  am zn ,g4k6 -f`g0F3 g` =fRa`  f@`NuB:< &J $gF3 am zn 4g`6 am zn 4k6gF3 (քցSEf am zn 4j  f" am zF3 n +Nu:< am zn  am zn 4kf 3 g_郆SEf`z4Q1CLSCOD AFIX gIOSRR CLSCOD SA 68K PASCAL CHARACTER CLASS CODE TABLE2H.PCLSCOD (F3 @@ P@  @F3 4N P1ALSTS AFIX gUTILRR ALSTS SA)0 68K PASCAL ALLOCATE STACK SUBROUTINE$2H.PALSTS H.PALSTSL (,23 HRğ b OH pNNO .HNu4L1CLO AFIX gIORR CLO SA# 68K PASCAL CLOSE FILE SUBROUTINE+2H.PCLO p.PCLOSPL p.PPRGBUF (&3 .L2*(-0aA aA +D0Nu4\1IFD AFIX gIORR IFD SA$ 68K PASCAL INITIALIZE FILE DESCRIPTOR SUBROUTINEL2H.PIFD p.PACCPER p.PCLOSPL p.PEDTFIL p.PSTDFLT p.PALSTS (H3 "_. H&g&<(QRD$OĵldElel؊aA F3 !OEP/JE8/JA??B$O eTgv`gvC)CL3 BjBBjBL@O(-0fgA@aB ZJf<gJ-(gaB Fat`I3@ agJ-$gaB .a\`aga`8m"b"?S@@@,J5LI3 g gaB a$` ga`agNq5A+D0NH؞M$gI3 pS@@@,A|B(@AJaB $Lyg/p(NNI3 g g%m6*HBB|gBN NupaB T|&8%m:*NuH瀀F3 A$0NCgNN *&o|&BjFB*K*E f|'`  3 f|'`|'BjDLNu4L1RST AFIX gIORR RST SA 68K PASCAL RESET FILE SUBROUTINEm2H.PRST p.PACCPER p.PASGNF p.PCFLDAD p.PCALCLU p.PCLOSPL p.PSTDFLT p.PFLSCN p.PPRGBUF (L3 .L2*aA aA B f fpj& g faA  g4/ N3 &JaA 5 c 5aA aA H?aA 2&_g*8 >3 gA0NBgNN` apj&aB bAB5ANup`B P4N O O