IMD 1.17: 11/11/2014 11:22:36 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 13 OF 30  SR13q82VKXSVRDOS 0420¤j-Híÿÿ|+o t$3 <+@xaÿ:`ÿ H@0-4H@,NA4R1OPTION AFIX gUTILRR OPTION SA3U ƒ68K PASCAL OPTION PROCESSOR SUBROUTINE 2p.PCLSCOD H.POPTION (ZH3 B€BIúA ú am zn ,gè4k6 -fÀ`Ög0ƒF3 gÁ` =fRŠa`  f@` NuBƒ:< &J $gF3 am zn 4gˆ`6 am zn 4k6gãƒF3 (åƒÖ„ÖSEf΂ am zn 4jè  f" am zF3 n +ÿþNu:< am zn  am zn 4k´f 3 gŒ_郆SEfÌ`ÿz4 Q1CLSCOD 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 HÄR„„ÿÿÿþŸÄŸü ¿íb O÷H pNNOï .·HNu4L1CLO AFIX gIORR CLO SA# ƒ68K PASCAL CLOSE FILE SUBROUTINE+2H.PCLO p.PCLOSPL p.PPRGBUF (&3  .LÐ2*(-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&<…(„QR„Dÿþ$O•ĵíldEïµíle•ílØŠaA ÂF3 !OEïP/JEò8ÿ/JA??B$O eTgv`gvC)CL3 BjBBjBªL@O(-0fgA@aB ÿZJf<gJ-(gaB ÿFat`I3@ aúgJ-$gaB ÿ.a\`aâgaÄ`8°m"b"?S@å@@,J5LŸI3 g gaB þöa$` ga¤`aŠgNq5A+D0NÑHçØžMê$gI3 pÿS@å@@,Aõ|B€(@AõJaB þœ$€ÿ€üLßyg/p(NNI3 g g%m6*HBB|g€BNÁ NupaB þT|&8%m:*NuH瀀F3 Aê$0¼€NCgNN *&o|&BjFB*K*E f|'`  3 f|'`|'BjDLßNu4L1RST 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€ .LÐ2*aA ôaA ðB f† fpÀj& g faA Ê g4/ N3 ¢ &JaA ¼5 c ¼5‚aA  aA œH‚?aA ”2&_g*8 >3€ gAê0¼NBgNN` ap÷Áj&aB ÿbAìB’5ANup`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ê$0¼€NCgL3 f0¼NCf0¼€NCgNNaA ¤B’A€ aA –CòO%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 ÒLßx$W$jaA Ä&F3 €ÿ€ügp(NNfg0<÷ÿÁj äH@ãÅHBEBF ;g  gI3€ `ð ;fäHçaB ÿpLß g/pANN Bfafèt…h Æ`F3 ¤ Cfa4<øÿÅh&!CHÆ`† DfaðCKÆ`p FfaÜCF3 JÆ`\ Rf$a¸…gÅÅ4( 1B`2 Wf$aŽ…F3 gÅÅ4( 1B`gÿ:gÿ 2(JEg;PBpøÁh&‰(I3 '$HfŠFgg(-0aB þh+D05A gþô _"_0R€@ÿþO÷NÑ23 g/pANNNugðfêfäNu4Z1ACCPER AFIX gIORR ACCPER SAX ƒ68K PASCAL ACCESS PERMISSION SET UP SUBROUTINE2H.PACCPER ("(3  f?*8 &g pøÀj&€W5@&0Nu4X1CALCLU AFIX gIORR CALCLU SA9 ƒ68K PASCAL CALCULATE LOGICAL UNIT SUBROUTINE2H.PCALCLU (RF3 /(-0fBg<`"g<`BR ft bfì c3 p@NNB B)(Nu4 P1EDTFIL AFIX gIOSRR EDTFIL SA ƒ68K PASCAL EDIT FILE NAME SUBROUTINE 2H.PEDTFIL p.PCLSCOD (âH3 B€BIúA ú&H6<%B„aük$ #fÀ` ff&@€€€Nu€üF3 `öaÊkBfôgÚ .f R nÐ`Þ :f€@`Ð (f€`Ä F3 )fª@`¸g Jfžf˜ggŒfF*H Kf  aF3 m zn (g24f.f. gD gô .fRˆF3 `*Rˆ`DÀ` 6<Gîa&4<aškÌ`À`Â&<€€€F3  am zn 4k^f0fR *g2À  am zn F3 4kR .fâ`JÆü Ö`¤ ƒ€f4 .fÄÀ6<ÿþ` ƒ€g ƒF3 'cÀ` =C ` À`À4<aÚk 6< Gî aN4<aÂkôF3 n& f| 6< Gîa(4<aœkÎ (g 6<Gîa 4<a~F3 k° (f¨BBBC am zn 4kD )gg8 Pn2AéKF3 †AB`ÈBÿg BnÀ BcÀ=C `JÀÀÀBÿ BcÀF3 `.Rˆ6<Gîap4<aæk$< Gî &Â&Â&Â&Â6ÂBn $B|gÀ4F3 B|gÀJ€NuJCfBA`$ am zn SC /f À<€`4NuF3 4HB€€»ÈgF am zn 4k.f(f @À`< F3 *fÀÁSCn¾€€`$HB´CfÀ`< (*ÿþf<*`ÂSCnúNuJ€j(3 À`QBgQBÀ`ÀBgÀNu4N1PRGBUF AFIX gIORR PRGBUF SAR ƒ68K PASCAL PURGE BUFFER SUBROUTINE 2H.PPRGBUF p.PWRTBUF ("3 g g ³êgaA ì ‰Nu4Y1STDFLT AFIX gIORR STDFLT SA' ƒ68K PASCAL SET START FILE DEFAULTS SUBROUTINE 2p.PDFLT H.PSTDFLT (^H3 %| 8%| .f "3 %m@0%mD4` g%m6*Nu4Y1MPJ AFIX gUTILRR MPJ SA3 ƒ68K PASCAL 32 BIT INTEGER MULTIPLY SUBROUTINE2H.PMPJ (vF3 HçýÀ./$T¯$ G0å@A÷X@ @fB@C÷ "*jD€³…JjD$&H@HAÀÁ<3 ÆÂ(ÂÂHBHDÄÄÔ"HABAÒƒBBHBÑ‚VÂJ…jDF…Ê[à †DÃLß¿Nu4`1DVJMODJ AFIX gUTILRR DVJMODJ SA1 ƒ68K PASCAL 32 BIT INTEGER DIVIDE AND MOD SUBROUTINES$2H.PDVJ H.PMODJ (–F3 HçùÀ./ T¯ a( ‚DÁLߟNuHçùÀ./ T¯ aãƒjD€ €DÁLߟNu G0å@A÷F3 X@ @fB@C÷ "fpNN&âƒjD€³ƒJjDtÿB²€dã‰R`ödÐã’3 â‰SdòF‚"jD‚F‚[ÁNu4I1WLN AFIX gIOSRR WLN SA$X ƒ68K PASCAL WRITELN SUBROUTINE 2H.PWLN p.PWRTBUF (3 .LÐR’aA ö ‰Nu4Q1WRC AFIX gIOSRR WRC SA%# ƒ68K PASCAL WRITE CHARACTER SUBROUTINE+2H.PWRC p.PIWPTR p.PLBLKS ("3@ .LÐ8SDaA ô€aA î ‰Nu4P1WRI AFIX gIOSRR WRI SA%5 ƒ68K PASCAL WRITE INTEGER SUBROUTINESI2H.PWRH H.PWRI H.PWRJ p.PIWPTR p.PLBLKS (ŽJ3 H€HÀ.LÐ8v / BJ€jt-D€SDGúL°›dSCnø˜CSDaA ÒJg‚aA ÈJCg(+J3@@ ÿür0°„e„R`öaA ®(SCnè0€aA ž ‰&_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 &_$_O÷NÒ4 O1WRB AFIX gIOSRR WRB SA% ƒ68K PASCAL WRITE BOOLEAN SUBROUTINE+2H.PWRB p.PIWPTR p.PLBLKS (:D3@ ./ LÐtGú"JgÖÂSB8˜BaA ä›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`ašNu.JAlra|`a†Nu.JAlrah`arNu8DN3 € aA ¼p °fp-€aA ¬MúpžaA  S@föNuINFINITY8DaA ˆpMú:O3  žaB ÿ|S@fö , ré˜tÄ0 9o‚aB ÿXSAfâ¼)aB ÿLNuNAN(16#I3 Hçð XLBFBpBFgèvÆŠg RFPÅ0ÃS@fâLßPNuJEo ¼0aB ÿSEL3 `JFo žaB þöSF`¼0aB þêS@Nu86,HCBCB@zé›Àü ÐCBCSEfòR@JjD@L3 Nuaÿ|aÔ @o˜@˜AUD`˜AWDaB þ¤v gv-ƒaB þ”,H…šFRElBE?BEL3 @n :DESEÚ_`Taÿ^nú¼.aB þb0aÿNnúNuHçLÐx"aB þJM×Iï AI3 lr4 B€o4<€DBaB þ*ðT¸ð Àfaþ†`  g °faþ@`L3 aÿ@ ‰Þü"Lß@`Nu¼EaB ýêp+Jjp-€aB ýÜ0, AfáX` AféXtéXL3@ Ä0‚aB ý¶SAfìNufv `v-ƒaB ýžaþZ,H…šFRElBEY@A @lL3 paþn¼.aB ýtaþbfúaÿzNuHçLÐx"aB ýZM×Iï4YB”A Blt` BI3 otaB ý8ðT¸ð Àfaý”`  g °faýN`aÿ^ ‰Þü"Lß@`3 Nu4L1PUT AFIX gIOSRR PUT SA"! ƒ68K PASCAL PUT BUFFER SUBROUTINE 2H.PPUT p.PWRTBUF (0:3„ .LÐ8*R’Òê³êcg !aA àÀR’`aA Ö ‰Nu4^1PAG AFIX gIOSRR PAG SA!V ƒ68K PASCAL SEND PAGE EJECT TO TEXT FILE SUBROUTINE 2H.PPAG p.PWRTBUF ( *3„ .LгêgR’aA ðü T’aA æ ‰Nu4N1WRTBUF AFIX gIORR WRTBUF SAC ƒ68K PASCAL WRITE BUFFER SUBROUTINE 2p.PBUFSZ H.PWRTBUF (jF3 HçÀ€2*fpDNN³êggS‰` g¼ `S‰`¼ %IAê23 0¼NBg ÆgNNaA ªCòO%I"jLßNu4V1LBLKS AFIX gIOSRR LBLKS SA!' ƒ68K PASCAL WRITE LEADING BLANKS SUBROUTINE 2p.PIWPTR H.PLBLKS (3 JDo ¼ aA öSDnôNu4c1IWPTR AFIX gIOSRR IWPTR SA! ƒ68K PASCAL INCREMENT TEXT FILE COMPONENT PTR SUBROUTINE 2H.PIWPTR p.PWRTBUF (3 ³êfaA öŸRIR’Nu4c1EOL AFIX gIOSRR EOL SAV ƒ68K PASCAL TEST FOR END OF LINE IN TEXT FILE SUBROUTINE 2H.PEOL p.PRDBUF (3D aA ¾SBnìaA ¶€ Am Zo Lß ŠNup3NNALSERUE 4 W1RDSTR AFIX gIOSRR RDSTR SA#U ƒ68K PASCAL READ STRING OR VECTOR SUBROUTINE+2p.PGETCH p.PIRPTR H.PRDSTR (*43 LÐ 8+24aA òµëgaA èJAgîÀSA`è”A ŠNu4U1SBLKS 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"NNB€Nu4_1IRPTR AFIX gIOSRR IRPTR SA! ƒ68K PASCAL INCREMENT INPUT COMPONENT PTR SUBROUTINE2H.PIRPTR ($3 R“µëf•Ê`RеëfÄ7DNu4R1PEE 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"NNR“Ôëµëmng Ä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 0ÀPÁSE`RCaA ÈaA Ä J3 am zn 0m 9oÀ #f¬ÃJEoÀSE`RCBaA ŠaA † aF3 m zn 9o Am0 oJ@m @op1NN`TJEoJfL3P gÀPÁSE`RCaB ÿ.aB ÿ* am zn 9o Am0 o3 Jm o¬E"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 HçøÐ2+$KaA ôHÀgS€`R€@ÿþЫS€'@fpCNNAë0¼NBJ3@€ gz Ægt ÂgNNA€7A gXaA ž5´5cJaA 7AR55L3D H‚5 J /g RB5 J /fôRB‚aB ÿ^2*aB ÿV5ALß `ÿJ•Ê`8D3 $k +gJ€fÁ¼ ` J€g0+HÀS€ÐŠ'@7ALß Nu4M1ASGNF AFIX gIORR ASGNF SA8 ƒ68K PASCAL ASSIGN FILE SUBROUTINE2H.PASGNF ($*3 Aê$0¼@NCgNN$-0*)Â+B0ÁNu4X1BUFSZ 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ê$0¼NCgNNLßNuaÞAý¿?* „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õ JHçMë$aA òLßpaA ê€ÿ€üg/p(NNNu4 a1LDC AFIX gUTILRR LDC SA24 ƒ68K PASCAL LOAD CONSTANT STRING AND VECTOR SUBROUTINE/2H.PLDCS H.PLDCV p.PALSTS (*23 pþ`B@ _.8˜@gAðaA ê"OUDg"ØYDnúm2ØNÐ4b1LODV 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"gØS€nú`U„g$ØY„núm4ØNÑ4W1STCV AFIX gUTILRR STCV SA5P ƒ68K PASCAL STORE CONSTANT VECTOR SUBROUTINE/2H.PSTCV H.PSTCVL p.PSTOREV ("3 $_. 0HÀ`$_. "JaA ìNò84W1STOV AFIX gUTILRR STOV SA62 ƒ68K PASCAL STORE VECTOR INDIRECT SUBRUOTINE/2H.PSTOV p.PSTOREV H.PSTOVL ((03€ $_. 0HÀ`$_. "RAÿþ w"OaA àO÷8NÒ4U1STRV AFIX gUTILRR STRV SA7 ƒ68K PASCAL STORE VECTOR DIRECT SUBROUTINE/2H.PSTRV p.PSTOREV H.PSTRVL ($3 $_. 0HÀ`$_. "OaA ìO÷8NÒ4V1STOREV AFIX gUTILRR STOREV SA6 ƒ68K PASCAL STORE VECTOR SUPPORT SUBROUTINE2H.PSTOREV (6<3 &RƒCÿþ(gÙS€nú`â€UÁâ€UÂg ÙS€núJg0ÙJgÙNu4R1EQUV  AFIX gUTILRR EQUV SA13 ƒ68K PASCAL COMPARE VECTORS SUBROUTINESº2H.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^WÀDNÒa`WÀDNÒaNVÀDNÒaPVÀDNÒa>UÀDNÒa@UÀDNÒa.SÀDNÒa0SÀDNÒF3 aRÀDNÒa RÀDNÒaTÀDNÒaTÀDNÒ$o0HÀ`$o . &RƒCÿþCïA÷23 8Öƒâ€UÁâ€UÂg±‰fS€nøJg±IfJg± _O÷8NÐ4a1LODS AFIX gUTILRR LODS SA2G ƒ68K PASCAL DIRECT AND INDIRECT STRING LOAD SUBROUTINE/2H.PINDS H.PLODS p.PALSTS (&3 $_. 8TDaA ö"OUDg"ØYDnúm2ØNÒ4U1STRS  AFIX gUTILRR STRS SA6E ƒ68K PASCAL STRING DIRECT STORE SUBROUTINE2H.PSTRS (4:3 "_. 2RAAÿþU@°Am0`>€R@@ÿþ$OJ@o ÚY@núf0’O÷NÑ4W1STOS  AFIX gUTILRR STOS SA6 ƒ68K PASCAL STRING STORE INDIRECT SUBROUTINE2H.PSTOS (8>3 "_. 2RAAÿþU@ w°Am0`>€R@@ÿþ$OJ@o ÚY@núf0’O÷NÑ4R1EQUS AFIX gUTILRR EQUS SA1 ƒ68K PASCAL COMPARE STRINGS SUBROUTINES`2H.PGEQS (H.PEQUS H.PGRTS H.PLEQS H.PLESS H.PNEQS (”F3 a.WÀDNÒa&VÀDNÒa]ÀDNÒa_ÀDNÒa^ÀDNÒa\ÀDNÒ./Eï46RCCF3 ÿþCò026RCCÿþHq00°Bo0J@g³ fS@nøp ”Agma `aLß.HNѰ3 fSBnøNu²fRBmöNu4W1NEW AFIX gUTILRR NEW SA3@ ƒ68K PASCAL NEW (HEAP ALLOCATION) SUBROUTINE/2H.PNEW H.PNEWL p.PCHKOVF (‚J3@ ."GaA ú(` ."GaA îB„8R„„ÿÿÿþ.‰v¸ƒl(X„"mQ‰$I&)g""C¸‘nòF3 „ €lX‰%Q`*"€ÓÀ"Ä`""mEñH ¿ÊbpNNEêÿØQ‰$Ñ"Ä$Ñ+J ‰3 Nu4]1DIS AFIX gUTILRR DIS SA0E ƒ68K PASCAL DISPOSE (HEAP DEALLOCATION) SUBROUTINE/2H.PDIS H.PDISL p.PCHKOVF (pH3 T—T—.aA ø$PB mQˆµÈbVB€“É("µÈb "H h`ò%H#J"gÒµÁb •È63 ØŠ „$H#J" Ò„³ÁbJ€f $‘PŠ+J`"  ’ŠÒ‘$ @!JNu4U1MRK 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ˆ"mQ‰³Èc""i³Èbø g Б±Àb I"ipÿ À É+HNu4_1CHKOVF AFIX gUTILRR CHKOVF SA)F ƒ68K PASCAL CHECK FOR STACK HEAP OVERFLOW SUBROUTINE2H.PCHKOVF (3 Oïÿà¿íOï bpNNNu4c1CVBSV AFIX gUTILRR CVBSV SA)X ƒ68K PASCAL CONVERT STRING S->V STR UNDER VEC SUBROUTINE 2H.PCVBSV p.PCVTSV (.63 .R@@ÿþ24A÷ÔPUAo!`YAnøf1`0‚Ð@`A ÖNu4Z1CVTSV AFIX gUTILRR CVTSV SA0& ƒ68K PASCAL CONVERT STRING TO VECTOR SUBROUTINE/2p.PALSTSL H.PCVTSV H.PCVTSVL (bF3 HÀ _.2HÁ6< R€@ÿþgƒR(˜g:nE÷C÷U@g#"Y@núm3".I*3 `"OaA º$OUg m $ÙYnúm4Ù4ÃU„núNÐ4`1CVTSU AFIX gUTILRR CVTSU SA0 ƒ68K PASCAL CONVERT STRING TO UNNORMALIZED SUBROUTINE 2p.PALSTS H.PCVTSU (NH3 _.U@2RAAÿþR@@ÿþ8˜Ag2nC÷E÷>€g%!Y@núm5!.JNÐ"OaA Æ$OJA3 g$ÙYAnúm4ÙNÐ4`1CVTUS AFIX gUTILRR CVTUS SA0@ ƒ68K PASCAL CONVERT UNNORMALIZED TO STRING SUBROUTINE2H.PCVTUS (063 _.R@@ÿþC÷2RAAÿþE÷µÉgJAg#"YAnúm3".INÐ4O1SLEN AFIX gUTILRR SLEN SA5$ ƒ68K PASCAL STRING LENGTH SUBROUTINE2H.PSLEN (3 _.02RAAÿþÞÁNÐ4V1SCON AFIX gUTILRR SCON SA4& ƒ68K PASCAL STRING CONCATINATION SUBROUTINE 2H.PSCON p.PALSTS (JH3 _.4$O6RCCÿþC÷028aA æHq@ÒÁ0g!S@nú"_ÒB0R@@ÿþÔÀJ@g"3 S@nú3.INÐ4P1SCOP  AFIX gUTILRR SCOP SA4@ ƒ68K PASCAL SUBSTRING COPY SUBROUTINE 2H.PSCOP p.PVALSI (rH3 _.46RCCÿþC÷0aA ìfBA`PS@8˜@²Do2JAg@E÷0²Df8µDDg*83 g’ÁS‰ÚS@nú’Á`R@@ÿþÔÀµÉg"S@nú`”À"J.I?NÐ4T1SPOS AFIX gUTILRR SPOS SA56 ƒ68K PASCAL SUBSTRING POSITION SUBROUTINE2H.PSPOS (bF3 ."O20R@@ÿþEñ40R@@ÿþHrB@JAg6”Am2RB0SA I?¶fJAg ( (3 µ f SAnøBR@` 2$D"HSBnÞB@2.W GNÐ4R1SINS AFIX gUTILRR SINS SA5 ƒ68K PASCAL STRING INSERTION SUBROUTINE+2H.PSINS p.PALSTS p.PVALSI (lJ3 _.4$O6RCCÿþCò02gsystask)*0003‹EVUPRIDS.B„1ƒRequestor'spriority**0004‹EVUTSKDS.L„1ƒRequestor'staskname(*0008‹EVUSESDS.L„1ƒRequestor'ssession«S´\,*000C‹EVUUNMDS.W„1ƒRequestor'susernumber,*000E‹EVURD0DS.L„1ƒRequestor'sregisterD0,*0012‹EVURA0DS.L„1ƒRequestor'sregisterA0+*0016‹EVUPSTDS.B„1ƒParameterblockstatus** Length = $18 (EVUNLN)*N* Following the above portion of the event is a normal FHS (TRAP #3) parameter?*ƒblockwhichisalsopartoftheevent,length=$34(FHSNLN).*FHSParameterblockfollows.*ASQUE„DS.B„EVULENŽEVENTQUEUECALBLKƒDS.B„FHSNLNŽPARAMBLOCK* *ˆSTACKAREA*ENDSTKƒDS.B„$80‘STACKAREAFHSTAKƒEQU…*“STACKPOINTER**ˆWORKBUFFERS*BYTE…DS.L„1“CATCHALL*LUNCMDƒDS.W„1“COMMANDHOLDLUNCSFƒDS.W„1“COMMANDTYPEFLAGTSKATTƒDS.L„1“TASKATTRIBUTES+FDMBUFƒDS.W„5“FETCHDEVICEMNEMONICSBUFFER**ˆDEVICESTATUSEVENT*FMSEVTƒDS.B„1“EVENTLENGTH ‰DS.B„1“CODEFMSUB„DS.B„1“SUB-CODE‰DS.B„1“RESERVEDFMSDCBƒDS.L„1“DCBADDRESS* *Ë***É*****Ç***2****…GENERALPURPOSEBUFFERFORDYNAMICUSAGE˜*******Ç*****É***Ë*GPBUFR:‰DS.B†22GPBLNTH‚EQU‡*-GP BUFR  *Ë***É*****Ç*******…IOSTASKIDµ*******Ç*****É***Ë* IOSTSKID:‰DS.B†8 *Ë***É*****Ç*******…FMSTASKIDµ*******Ç*****É***Ë* FMSTSKID:‰DS.B†8 *Ë***É*****Ç***(****…SYSTEMOUTOFSPACEDIAGNOSTIC¢*******Ç*****É***Ë*SYSPACE:‰DS.L†1/*œTheoutofsystemspaceerrorcanoccurunder0*œoneconditononlyinFHS,namelywhenaLUTis0*œtryingtobebuiltforatask.Thisfieldwill1*œnormallybezerounlessFHSencountersanerror1*œtryingtoallocatespaceforanLUT.Thereisa2*œsingleroutine'LUTBLD'whichwillbuildtheLUT-*œforatask.Thisroutinecanbecalledfrom2*œvariousplacesinFHS.Ifthisfieldisnon-zero.*œthevaluecontainedthereinwillreflectthe1*œreturnaddressfromthecalltothesubroutine. TSEGSIZEEQU‡*#GSEGSIZEEQU‡((TSEGSIZE/256)+1)*256 **ˆPARAMETERBLOCKS** ‰OFFSET„0STRBLK„DS.Lƒ1’TASKNAMEŠDS.Lƒ1’SESSIONŠDS.Wƒ1’OPTIONSSTOPMP+STOPRGŠDS.Lƒ1’MONITORTASKIDŠDS.Lƒ1’MONITORTASKSESSIONŠDS.Lƒ8’REGISTERS REGA0…DS.Lƒ7**ˆALLOCATECHANNEL*!ALLBLK„DS.Bƒ1’COMMANDCODE•XDCALLŠDS.Bƒ1’COMMANDSUB-CODEŠDS.Bƒ1’RESERVED)ŠDS.Bƒ1’OPTIONS(EXCLUSIVEACCESS)‡XOPEXCŠDS.Lƒ1’CHANNELMNEMONIC)ŠDS.BƒXIOALN+(2*XIOXLN)-XIOPRMPARAMETERSŠDS.Lƒ1’PRECAUTION**ˆSHARESEGMENTDIRECTIVEBLOCK*SEGBLK„DS.Lƒ1’TASKIDŠDS.Lƒ1’SESSIONŠDS.Wƒ1’OPTIONSŠDS.Wƒ1’ATTRIBUTES—SGATSSŠDS.Lƒ1’SEGMENTNAME•IOCOMNŠDS.Lƒ1’LOGICALADDRESS’IOCOMS!ŠDS.Lƒ1’LENGTHOFSEGMENTSIOCOML* *ˆCREATESEGMENTDIRECTIVEBLOCK*CSEGBLKƒDS.Lƒ1’TASKIDŠDS.Lƒ1’SESSIONŠDS.Wƒ1’OPTIONSŠDS.Wƒ1’ATTRIBUTESŠDS.Lƒ1’SEG.NAMEŠDS.Lƒ1’LOGICALADDRESSŠDS.Lƒ1’SEGMENTLENGTH**ˆALLOCATEASQ*ASQBLK„DS.Lƒ1’TASKIDŠDS.Lƒ1’SESSIONŠDS.Bƒ1’STATUSŠDS.Bƒ1’MAX.MESSAGELENGTHŠDS.Lƒ1’QQUEUELENGTHŠDS.Lƒ1’ASRADDRESSŠDS.Wƒ1’KEEP4BYTEBOUNDARY***LSV:ŠDS.Lƒ1’LOW‚STARTVALUEHSV:ŠDS.Lƒ1’HIGHSTARTVALUELVP:ŠDS.Lƒ1’LASTVALUESPROCESSEDNVTP:ŠDS.Lƒ1’NEXTVALUET0PROCESS STARTVAL:$ŠDS.Bƒ1’STARTVALUEENTRYPROCESSINGBITNBR:"ŠDS.Bƒ1’BITNUMBER‚ENTRYPROCESSINŠDS.Bƒ$80ROOMFORSTACK STACK…EQU„*TSEGSIZEEQU‡*#GSEGSIZEEQU‡((TSEGSIZE/256)+1)*256 éé¼H**********(*****„OFFSETVALUESFORIOSDATASEGMENT********** ‰OFFSET„0 GSEGADDR:‰DS.L†1*œADDRESSOFSEGMENTFORIOSIOCOMS:‰DS.L†1*œI/OCOMMONSEGMENTADDRESS ***************„HALTI/OPARAMETERBLOCK**********HLTCBLD:&‰DS.W†1‰FUNCTIONCODECOMMAND‰(IOHALT)‰DS.W†1‰OPTIONSHLTSTLN:DS.W†1‰STATUSANDLUN‰DS.W†1‰RESERVEDHLTCBLT‚EQU‡*-HLTCBLD**Ë***É*****Ç***#****…ATTENTIONPARAMETERBLOCK§*******Ç*****É***Ë*%QEVATNLDDS.L„1“TASKTORECEIVEEVENT+‰DS.L„1“SESSIONNBROFTASKRECEIVINGEVENT‰DS.W„1“OPTIONSFOREVENT.‰DS.L„1“ADDRESSOFINFORMATIONPACKETƒ(ATTNLD)*‰DS.L„1“ADDRESSOFBREAKINTERRUPTADDRESS*Ë***É*****Ç***&****…ATTENTIONINFORMATIONPACKE T¤*******Ç*****É***Ë*#ATTNLDƒDS.B„1‹EVENTLENGTHˆ(EVALEN)‰DS.B„1‹EVENTCODEŠ(EVCATN)‰DS.L„1‹DEVICEMNEMONIC‰DS.W„1‹DEVICESTATUS**ˆREQUESTTIMEREVENT*!TEVPRMLDDS.L†1‰TASKI.D.(IOSID)#‰DS.L†1‰I/OSESSIONNUMBER(IOSESS)/T_OPTSLDDS.W†1‰OPTIONSFORPERIODICACTIVATION0*15TIMEOFFIRSTACTIVATIONISCOMPUTEDASSUM(* OFINTERVALPLUSTIMEDIRECTIVEISSUED+*14TASKISACTIVATEDATINITIALTIMEONLY*13-120* TIMEREVENTISFORDEFAULTASRSERVICEADDRESS!*11UNIQUEIDPROVIDEDFORTIMER*15-14#* IFBOTHZEROCANCELTIMERREQUEST(‰DS.L†1‰TIMEFORINITIALACTIVATIONƒ(-1)1IOINTRLDDS.L†1‰TIMEINTERVALBETWEENACTIVATIONS2‰DS.L†1‰ASRSERVICEADDRESSWHERETIMEOUTISTOBE *œSERVICEDIFOTHERTHANDEFAULT UNIQIDLD:7‰DS.L†1‰UNIQUEIDENTIFIERUSEDTOIDENTIFYTHISREQUEST *Ë***É*****Ç***&****…INITIATEI/OPARAMETERBLOCK¤*******Ç*****É***Ë*INTPRMLDDS.B„1“CODEˆ(XDINIT)‰DS.B„1“SUB,CODE‰DS.B„1“RESERVED‰DS.B„1“OPTIONS‰DS.L„1“CHANNELMNEMONIC‰DS.L„1“TASKID‰DS.L„1“SESSION‰DS.L„1“DCBADDRESS‰DS.L„1“ADDRESSUSERIOCB‰DS.W„1“LENGTHOFUSERIOCB**PARAMETERBLOCKS****ˆMOVELOGICALTOLOGICAL*MOVPRMƒDS.L„1“SOURCETASKÅfÎWÖW‰DS.L„1“SOURCESESSIONNUMBER‰DS.L„1“SOURCELOGICALADDRESS‰DS.L„1“DESTINATIONTASK"‰DS.L„1“DESTINATIONSESSIONNUMBER#‰DS.L„1“DESTINATIONLOGICALADDRESS‰DS.L„1“LENGTH**ˆESTABLISHTRAPSERVER*.SRVPRMƒDS.L„1“SERVICEADDRESS(DEFAULTTOASR)‰DS.B„1‹TRAPINSTRUCTION*0*œSRTREOT-TASKELECTSTORECEIVEANEVENTEACH*¦TIMEATASKTERMINATES1*œSRTRPRM-SERVERTASKEXPECTSAPARAMETERBLOCK*¦WITHTHEEVENT.*œIOSTIN‚-VALUEOFTRAPNUMBER(2)WHICHTHIS*¦SERVERTASKWILLSERVICE*‰DS.B…1’PBLENGGTH0*œIOSNLN‚-SIZEOFPARAMETERBLOCKWHICHWILLBE)*¦GIVENTOTHESERVERTASKWITHTHEEVENTO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%*ˆThefollowingispositiondependent**ˆQUEUEEVENTTOFMS*QEVPRMƒDS.L„1“TASKID…(FMSID)$‰DS.L„1’TASKSESSIONNUMBER(IOSESS)‰DS.W„1“OPTIONS!‰DS.L„1“POINTERTOEVENT†(EVNLEN)‰DS.L„1“VECTORADDRESS*************************,EVNLENƒDS.B…1’EVENTLENGTH(EVTLEN+IOSNLN-8)‰DS.B…1’EVENTCODEƒ(EVCQUE)‰DS.B…1’SUBCODE…(IOLEVT)‰DS.B…1’RESERVEDLUNR…DS.L…1’LUNPOINTERLUTR…DS.W…1’LUTPOINTER.*œLUTRSHOULDBEA'.L'BUTITCAUSESPROBLEMS)*œELSEWHEREINTHEFMSPARTOFTHESYSTEMARQUE„DS.B„EVULENŽEVENTQUEUEIOCBLKƒDS.B„IOSNLNŽPARAMBLOCK*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< **ˆACKNOWLEDGESERVICEREQUEST*AKRPRMƒDS.L„1“TASKID‰DS.L„1“TASKSESSIONNUMBER‰DS.W„1“OPTIONS‰DS.B„1“TRAPNUMBER‰DS.B„1“CONDITIONCODE‰DS.L„1“D0RETURN‰DS.L„1“A0RETURN**ˆQUEUEEVENTTODRIVER*QEVDRVƒDS.L„1“TASKID‰DS.L„1“SESSION…(IOSESS)‰DS.W„1“OPTIONS!‰DS.L„1“POINTERTOEVENT„(EVTDRV)‰DS.L„1“VECTORADDRESS***%EVTDRVƒDS.B„1“EVENTLENGTH„(EVTLNG-8)‰DS.B„1“EVENTCODE†(EVCQUE)%SUBEVCƒDS.B„1“EVENTSUBCODE‚(DRVEVT)‰DS.B„1“RESERVEDDCBADDR‚DS.L„1“DCBADDRESS***ˆQUEUEI/OCOMPLETIONEVENT*QEVREQƒDS.L„1“TASKID‰DS.L„1“SESSION‰DS.W„1“OPTIONS‰DS.L„1“EVENTADDRESS‰(REQEVT)CMPADDR‚DS.L„1“VECTORADDRESS*#REQEVTƒDS.B„1“EVENTLENGTHŠ(EVIOND)‰DS.B„1“EVENTCODEŒ(EVCIOC)IOCBADR‚DS.L„1“IOCBADDRESS* *ˆWORKAREAS***ONEB…DS.W†1‘CATCHALL CURDCBLD:‰DS.L†1*œADDRESSDCBPROCESSING RTSADRLD:‰DS.L†1*œSAVEAREAFORBSRRETURNWHEN"*œROUTINE'SETPERLD'ISPROCESSING TIMVALLD:‰DS.L†1"*œCONTAINSTIMEINTERVALFORTIMER*Ë***É*****Ç***%****…TIMEOFDAYPARAMETERBLOCK¥*******Ç*****É***Ë*  TIMPRMLD:CURDAYLDDS.L†1CURTIMLDDS.L†1***ˆWAKEUPTSK(FHS)*WUFHS„DS.L†1‘TASKID(FHSID)‰DS.L†1‘TASKSESSIONŠ(IOSESS)*,*ˆENDOFTHISPARTOFTHEOLDIOD.SAVERSIONO*------------------------------------------------------------------------------*Ë***É*****Ç***,****…ATTATCHI/OCHANNELPRAMETERBLOCKž*******Ç*****É***Ë*ATTPRMLDDS.B„1“CODE’(XDATCH)‰DS.B„1“SUB-CODE‰DS.B„1“RESERVED*‰DS.B„1“OPTIONS(ASQINTERRUPTANDPROCEED)*º(XOPASQ+XOPPRO)‰DS.L„1“CHANNELMNEMONIC‰DS.B„1“CHANNELKEY"‰DS.B„1“LENGTHOFSTATUS†(XRP1LEN)‰DS.L„1“VECTORSERVICEADDRESS‰DS.W„1“TIMEOUTCOUNT‰DS.W„1“RETRYCOUNT*Ë***É*****Ç***2****…GENERALPURPOSEBUFFERFORDYNAMICUSAGE˜*******Ç*****É***Ë*GPBUFR:‰DS.B†22GPBLNTH‚EQU‡*-GPBUFR *Ë***É*****Ç*** ****Å*******Ç*****É***Ë* LASL:„DS.W†1*œUPPPERSTACKDELIMITER ‰DS.B†$80IOSTAK:*œSTARTOFSTACK UASL:„DS.W†1*œLOWERSTACKLIMITTSEGSIZEEQU‡*#GSEGSIZEEQU‡((TSEGSIZE/256)+1)*256é'EXORMACSLOADMMU AFêêqqLOADMMU SAóó kqqVECTORS AFqqVECTORS SA  qqVECTTBL AG•qqLOADMMU RO//qqRMS CD88RqqRMS CIIIqqRMS LGRR mqqVECTORS ROccqqVECTTBL ROllqqRMS LOmZqqRMS LL̾ñeqq=/*=/*†EXORMACS.LOADMMU.AF=/*.=/* Chain file to assemble EXORMACS.LOADMMU.SA=/*:=/* If no output argument is specified for the listing the2=/* chain file will default to EXORMACS.LOADMMU.LS=/*=/IFC \1ƒ=ARGEXORMACS.LOADMMU.LS=/ENDIF=/*6=ASM EXORMACS.LOADMMU.SA,EXORMACS.LOADMMU.RO,\1;RZ=050=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*}=/*=ENDéééé ééâ‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.TST.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.TST.EQ‰LIST‰PAGELOADMMU‚IDNT‚2,0„LOADMMU*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆ*********************ˆ*LOADMMU‚2.00„**ˆ*HLD6ƒ09/18/80‚**ˆ*HLD6ƒ03/30/81‚**ˆ**********************…LOADMMUSUBROUTINE**…REGISTERUSAGE:ƒ01234567 *–D*********–A*ƒ**…ENTRY:„A5POINTSTOTST*‰SECTIONLEVEL00* ŠXDEFƒCRASN ŠXDEFƒDEASN ŠXDEFƒLOADMMUŠXDEFƒLOADMMUIŠXDEFƒMMUFAULT ŠXDEFƒUNLDMMU ŠXREF.SMMUHEREŠXREF.SMMULOADŠXREF.STRACERŠXREF.STRACFLAG*,LOADMMU‚MOVE.W‚SR,-(A7)ŠSAVESTATUSREGISTER)LOADMMUIOR.W„#$700,SRŠINHIBITINTERRUPTS.‰MOVEM.LTSTMMU(A5),D0-D7‚SEGMENTDESCRIPTIONS/‰MOVE.L‚A5,MMULOADˆSAVEADDRESSOFCURRENTLOAD!‰MOVE.L‚MMUHERE,A5ˆADDRESSOFMMU‰MOVEM.LD0-D7,(A5)ˆLOADMMU*/‰BTST„#TRCFMMU,TRACFLAGSHOULDENTRYBETRACED?‰BEQ.SƒLOADMMUZŠBRANCHIFNO‰BSR…TRACERŒBUILDTRACEENTRY‰DC.W„$DD08TRACECODELOADMMUZRTE—RETURN‰PAGE*;*ˆThisroutinewillunloadasegmentfromtheEXORMACSMMU.D*ˆThesegmenttounloadispointedtobyacombinationofA5andD5.C*ˆA5pointstotheTSTcontainingthesegment,andD5pointstothe?*ˆspecificsegmentwithintheTST.‚TheTSTCTLfieldwithinthisA*ˆsegmententryshouldbesettozerobeforecallingthismodule.B*ˆThistellstheEXORMACSMMUthatthatsegmentisnolongervalid=*ˆ(ifTSTCTL(bit_0)=0),andthereforewehavesuccessfully'*ˆ"unloaded"thatsegmentfromtheMMU.*A*ˆThisroutineiscalledfromtwodirectives,SEGDEALandTFRSEG.A*ˆBasicallyitjustcallsLOADMMUtomvethenewsegmentmapinto=*ˆtheEXORMACSMMU.‚However,thereisonecomplication.‚Since?*ˆSEGDEALcandeleteasegmentfromatargettasksTST,wemust@*ˆverifythattherequestingtaskisalsothetargettaskbefore=*ˆcallingLOADMMU.‚Ifwedidn'tdothischeckwewouldarriveëJô"?*ˆatthesituationwherewereturntotherequestingtask,with6*ˆtheMMUcontainingtheloadmapforthetargettask.*2*ˆHereisthealgorithmforperformingthischeck: -*if(tcb_tst(client_task)=target_tst_ptr)&*thencallload_mmu(target_tst_ptr); UNLDMMU::‰CMP.L…TCBTST(A6),A5‡DoesA5pointtotherequestor'sTST?‰IFˆ†THEN.S„Branchifno. '‰MOVEM.LƒD0-D7/A5,-(A7)†Saveregisters.5‰BSR.S…LOADMMULoadthenewsegmentmapintotheMMU.*‰MOVEM.Lƒ(A7)+,D0-D7/A5†Restoreregisters. ‰ENDI ‰RTS›Return.‰PAGE*J*‚Dummyentrypoints--ourMMUisn'tanM68451,butotherexecroutinesareK*‚goingtobecallingusattheseentrypointsbecausetheydon'tknowwhat *‚wehave.*CRASN:DEASN: MMUFAULT: &ŠRTS—Justreturn--he'llneverknow....   ‰END éééé=/*=/*†EXORMACS.VECTORS.AF=/*.=/* Chain file to assemble EXORMACS.VECTORS.SA=/*:=/* If no output argument is specified for the listing the2=/* chain file will default to EXORMACS.VECTORS.LS=/*=/IFC \1ƒ=ARGEXORMACS.VECTORS.LS=/ENDIF=/*6=ASM EXORMACS.VECTORS.SA,EXORMACS.VECTORS.RO,\1;MRZ=46=/*{ Included files are:=/*ƒ--none--=/*}=/*=ENDééééééüŠPAGE"VECTORSƒIDNTƒ1,0INTERRUPTVECTORS*‰VECTORTABLEINLOWMEMORY*ŠORG„03ILLINSTR‚EQU„0’SETFORILLEGALINSTRUCTIONVECTOR4%*¦0=RMSWILLLEAVETHEVECTORALONE'*¦1=RMSWILLTAKECONTROLOFVECTOR4**INITSTRT‚EQU„$0* ŠXREFƒSYSPAR #ŠDC.LƒSYSPARSTACKPOINTERONRESETŠDC.LƒINITSTRTŠDC.Lƒ0ŠDC.Lƒ0 ŠXREFƒPROGINT4 &ŠDC.LƒPROGINT4‹SV4‚ILLEGALINSTRUCTIONŠDC.Lƒ0ŠDC.Lƒ0ŠDC.Lƒ0ŠDC.Lƒ0ŠDC.Lƒ$FE8808ŒTRACETRAPŠENDé ééééé5VECTTBLƒIDNTƒ5,1RMS68KvectortablefortheEXORMACSO*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***@***…ROUTINE:‚VECTTBL--RMS68KVECTORTABLEFORTHEEXORMACS‹******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***@***‡Copyright1983byMotorola,Inc.‚Thisversionisforthe‰******‡EXORMACSmicrocomputer.«******É***E***…FUNCTION:‚ThistablegetslinkedwithRMS68K.‚Whenthesystem…***C***‡boots,theexecinitializerfindsthistableandusesitto‡***:***‡takeovervectorsintheprocessor'svectortable.******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------/*…10/21/83‚DICKVANDERLINRevisionforEXORMACS(*…10/4/83‚SteveFranckƒInitialwriting.*  *E*‚XREF's.‚NotethattherearemanymoreXREF'screatedbyinvocations8*‚oftheVECTORmacro;thoseXREF'sarenotlistedhere.*.ŠXREFƒCOMINTCommoninterrupthandlerroutine.   **‚Includedfiles:*5*‰9995.&.STR.EQThesectionnumbertouseisinhere.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠLISTŠPAGE*E*‚TheVECTORmacrodefinesentriesinthevectortable.‚Theformatis%*‰VECTOR‚,5*‚Therearetwospecialvaluesfor:,*‰0=COMINT(thecommoninterrupthandler).(*‰1=don'ttakeoverthevectoratall.E*‚Entriesinthevectortablemustbeassignedinorder--thatis,theB*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.59(H*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapintheK*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*‚asthatofthelowervector#ofthepair.‚Forexample,+*‰VECTOR$23,0ŽPoints$23to$27toCOMINT  .-*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.-*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.G*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*‚addressassignedtothevectorwillbeincrementedby2foreachvector:7*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.$*‰VECTOR$26,0ŽPoints$26toCOMINT.'*‚Theendofthelistissignifiedbya*‰DC.Lƒ0F*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeK*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterK*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented#*‚by2foreachvectorinsequence.* VECTOR„MACROŒIFLEƒ\1-VECT_NUM0ŽFAILƒ499ŒVector#'smustbeinascendingorder!ŽMEXITŒENDCŒIFNCƒ'\2','0'ŽIFNCƒ'\2','1'XREFƒ\2ŽENDCŒENDCVECT_NUM„SET„\1ŒDC.Lƒ\1<<24+\2ŠENDM  * *‚Firstsetupthetableheader.*ŠSECTIONLEVEL00  0ŠDC.Lƒ'!VCT'Dumpeyecatcherfor'VeCtorTable.'2ŠDC.LƒCOMINTPuttheaddressofCOMINTheresothe"*§execinitializercanfindit;he#*§isn'tlinkedwiththeexec,sohe*§wouldn'tknowotherwise.ŠPAGE*)*‚Herearetheactualvectorassignments.I*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverE*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this$*‚parameterissubstitutedsuchthatA*„0=theexecshouldleavetheillegalinstructionvectoralone.?*„1=theexecshouldtakeovertheillegalinstructionvector.J*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*‚youwanttousetheROMdebugger,sinceitusesillegalinstructionsas*‚breakpoints.* 8VECT_NUM‚SET„1’Initializethevectornumberto1sothat&*§thelowestvectornumberthatcanbe*§setafterwardsis2.7*‰VECTOR$00,CALLKILLŠSHOULDNEVERGETHEREthiswasin>*‰VECTOR$01,CALLKILLŠSHOULDNEVERGETHERE4.2exormacsvectt*ŠVECTOR$02,PROGINT2‡Buserror.#ŠVECTOR$03,PROGINT3‡Addresserror.$*§Ifwe'renotsupposedtotakeover/ŠIFEQƒ\ILLINSTRŠtheillegalinstructionvector,9ŠVECTOR$04,1Žleavetheillegalinstructionvectoralone.ŠENDC–*!*§Ifwearesupposedtotakeover/ŠIFNEƒ\ILLINSTRŠtheillegalinstructionvector,>ŠVECTOR$04,PROGINT4‡takeovertheillegalinstructionvector.ŠENDC–*#ŠVECTOR$05,PROGINT5‡Divisionby0.+*‚insequence„$06,PROGINT6ŠCHKinstruction.-*‚insequence„$07,PROGINT7ŠTRAPVinstruction./*‚insequence„$08,PROGINT8ŠPrivilegeviolation.'ŠVECTOR$09,PROGINT9‡Instructiontrace.8ŠVECTOR$0A,PROGINTA‡Reservedinstructionopcodes$AXXX.>*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.'ŠVECTOR$0C,0Ž($0C-$0EgotoCOMINT.)+ŠVECTOR$0F,KILLER‰UninitializedInterrupt.'ŠVECTOR$10,0Ž($10-$17gotoCOMINT.)'ŠVECTOR$18,SPURINTˆSpuriousinterrupt.'ŠVECTOR$19,0Ž($19-$1CgotoCOMINT.)'ŠVECTOR$1D,0Ž($1D-$1FgotoCOMINT.)ŠVECTOR$20,TRAP0ŠTRAP#0.ŠVECTOR$21,TRAP1ŠTRAP#1.#ŠVECTOR$22,TRPVCT2ˆTRAP#2to#15.'ŠVECTOR$30,0Ž($30-$8BgotoCOMINT.))ŠVECTOR$8C,TIMEINTˆM6840timeinterrupt.!ŠVECTOR$8D,0Ž($8Dgotocomint.)8ŠVECTOR$8E,1ŽSoftwareabortvector(leaveitpointingto*¦BUG) ŠVECTOR$8F,0'ŠVECTOR$95,0Ž($95-$FFgotoCOMINT.)!ŠDC.Lƒ0’(Endoftableindicator.)ŠENDé41LOADMMU ASREL'EXORMACSLOADMMU SA!B)(…LOAD MMUŒ2BLOADMMU BLOADMMUI BMMUFAULT :pMMULOAD BUNLDMMU (BCRASN :BDEASN :pTRACER pTRACFLAG pMMUHERE "*g4gRjÇ fX g­,fí-`­ ,g` B­X­,AÕa Bf|$©#JF×`$* |a ¢F×FßNuHçAp@ç|a Ì$8 >&68 @FßHC(HD4<  g 4<8***HB g2Hçz,* m6aX`NqLß8`Lßp&*HC6‚€4*AÕa&NqLß‚R`ÿX?5|$* *g |a þ` |$©#J"*0<@ÂÄjFÂ&jNÓ8 4ga‚î`*_a ¶ _N`Lßÿ\|Jx fNsj?_f aþJ8 fNs?_'fö/,x Hî?ÿL× NiHî8`ö@ç8 4gaî HçÿþNi/ /9 d oF,hHV/(@À@ÿ?"h 0P*n6` & fÿr\,_( „!TCBga ÎJ@gÿJ @f AÖa?>`ÿ: @fÿ2Jf&HC4<HBAÖaæNq`ÿHBHA(&64< ‚HB4`àâˆ&T(,_" !TCBga jCð=C^AÖa>ÞJ®@gþÖ$< ÿÿHCHD6`¤-@L× NiHî8AÖa þ.x |øÿMø |"N ) gì,@.,fð#n ®-!Î /.D/.@Qø 1ø H FpàÀ.-fh|øÿ*n6a  n<€™AÖa®Ü‡(F9n@ÿú)nBÿü-'fLîÿHìÿÿ¾Lî0Hìÿî -/@-@B`ÿ*n6a n, ,"0<2 gB@2g<,*.,(>,°H@0,²H@"@J²f -@g4&@4+HC6+HCAòa`J²gHç@(AÕa ø`Lß raì,sf`žLß,sò Rrì ,NuÇ1G*è)!|EXEC°!| ´<(,Æ1F.½Èg$F-ÿ† g†1F,|ð& faôNu1F,X`5|a aaaaaaaaaa a aaaaNq?/_'g/ g*8 ]…šNh,œ… n6aŒ`Nq`"(F CN`&8 UC _8ß¿Ãfú/?,ÿú/<<`B† m n _-_¸-_¼/.)g".èg a nbJf\ nCø ˜ 1pfÊaü8`rJFf:AÖaý6 HzýŽŸ`ú P` €†`ú ~$.èffffNLî?ÿ,_` z,.ð n6a°`Nq`&~ F&(.ô·„f È®ìg-Cô`"R‡È®ìgg°Rnø .ø°nøb ~aN`˜./,x ½üg0/ f(.)g .è8gîè,_"¯Pø Ns,_"/8 6Nua¸$< 4.&.(.8áL<AîàaØ`®)Lîÿt®-@&Nuî ,X`ùJ .`p|Jx f Lî?þ,_Nsjùaö J8 gè`ùB®L× NiHî8`ùp`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p`=@=|çG` H@0<.H@ x QˆYˆ.H|`ÿV@çHç0x "x ,JAkj fah|&)fFïT¯`Ø`J$C#RFïBª€%@ %H%BBjgêáIAøÿ5A$|aœFï`Œa`†Hç8Eé&J|$S ªf"´ªf&’(R(,Ù¸ NÙ¸ J¸ JFï0`:&J&g2$C ªf ´ªf&’(R¸üg(*Ù¬Fï0` `&J&`Ì`$©#JLßNuLß FßNu&i"’¸ Nl! NÓ¸ J¸ JD'A$‹#J`&(S’¬m &L(S’¬`ô%lÓªD)A$“&ŠNu/)µßfa`a&Nu#R$©#J$i *Ѹ NѸ J¸ JNu&’$©#J *$SѪNu#R&i +Ѹ NѸ J¸ JNuHøÿÿ@ø!×Ni!ÉH!øL"x :3|•3|µ3| 3|°|`Þ@ç|Líÿ !Í d*x HÕÿ8 4ga  ÝNs»î6f HçÿaÌLß ÿNuNu|ð%ax`öNHøÿÿ1×!ï|LøÿÿNs@ç|JÐkü0ãHâ@S@  0€kFßNua:U.raFßAÖa`öî ,B® (f!NNu*@ - fø+N NuHç .&|ð&î-HîÿtNl-L< 8 Kï €Pn@rIî™ÀäHd8Ý`(ÝQÈÿüLß0Nuaþ¶@ç|JÐkü0ãHâ@R@o0€FßNu/ "h!i €0€B© © ,"_FßNu/ x BB@ç| 0àIDAÒx XäIÒ¸ J’¸ N’¸ RFß _NupðÀ($@&`h$&@ç|è-f6Hç@ Eø (&"* g ʰ*&còÊ!A %H $x °*&cPø LßFßNuJ¸ vf|Hçÿþ!Ï vFï<.x v|9÷0 À÷0.x vLßÿÿB¸ vNsRx ^ xd ^k$/ "x :3|3|53|.3|>"_Bx ^NsHçÀÀ x :| x B(( B28 V“¸ Nn"x ,AéCú1º& |ù¢ù¢@ @@ (@ (@ ²@ :Èù¢ù¢ù¢ù¢@'^! DÀxù¢ù¢ù¢@ ‚)f2ŒÀ @Úù¢À!èÀèÀ !ÌÀ %¢À "ÜÀ #hù¢ù¢@–@(Ì@"¼à8 4gašÿ.)g".èg~a÷Àå@kN @,bDGúþž$3g2*HE…ÿ, n6a¬`Nq`ø(FgAÔaò``ø*HNó `÷ü$x ($ gôä@D@°jnêS@Àü EòJªgÚ4*‚f"²®fÈ-W8BnH?Hz @ç$jNÒ0.Hf÷ü0g÷h @fAÖaûš`÷€"( Pa^` T—Nu !TCBfô*H(m@ gê ᘀÿgÞ@ç|2,$0{Nû€0000>>>>00008Š8Ê8ª8ö8T8ZFßT¯NuFßaùJaf``ê¬%FßaNu l` l 9A$Fßaà"HA faúAÕaúÈNua``ž9A$Fßa€aÐNuaú``ÿ~9A$Fßa^a°Nu9A$Fß l aV"HA faŒa„Nu9A$Fß l a*"HA fa`aXNug"2HA)A`6‚g "2HA)A`)l`‚gY@‚4&(*,. "JåHNûú`|NqNqNq ‚`~NqNq ‚/`hNqHÐ `lNqHÐ /`VHÐ`\NqHÐ/`FHÐ<`LNqHÐKøIøB§$I"x fFJQk$¶1@f&i OJg·Øg`öHSAëa÷ºa”Cé QÿÿfÎB„J—g| g4´¬o  g($,aœ‚)aØ®- K gT¯Lß88Nu g@î-|ð&Aí-H”@ç|0ãHâ@S@lü0€a÷pFßAÖaø^a‚`íZR„R„`œ g*$@ g**º‚m´¬nº¬m` º¬o(J*K fÖNu•¬Õ¬ *,áGôXf*, $T ,g"@Û© "Šg%INu*ŠgúBªNua÷ nw&Nu"_ g @Aèa÷H`ðNÑ g®JQk iµèlž`µél”µém˜fÿ@JQk’*iHUAíaöT gþâáŠ&J×ÂàŠ(@°ŠnþÒ ,áˆÐŒ°Šn fè`þ¾°‹gþzn gþ®Šàˆ$`þf&”g"T#K(‹'L'l B¬ ‹àˆ'@‘¬`þHç $nLß0T—Nu$H"x ÿÿg *iµílµémÜJQkÞá‰Òв­bÎ` Cé QÿÿfÐ`ÀCøAíaõv&g C±Ál"H&fô g )áˆÐ‰µÀm¬%B f -àˆ%@ $ƒ%If*Š`$"Š ‰àˆ©#@ f *Ñ©#j "’$IJƒg$"C#JJª f )Ѫ%i $‘g"R#J- ð"x ²f(i,g Aìaõn`îCé QÿÿfÜAíaõZLß0NuT—`îHçÀ@ç&x 0|*S»ëfKëIí&ŒFß+@+H+N (o:”T¯;o+o Uïÿb+o aõ8+A2<ù’àHF@@ÀüúÒ@;ALß8NuBƒB€"x gbEé0)gP—ËJj f ·üf$&J` ±êf´’gB* g f4 f& ÕüS@fÄJƒf"0) K·üf J°i m‘ÈR€T—Nu JNu CNuB€*g B…:(0P$f `¾°P g Q… E læ*T—NuB‚BƒB"x $( gd4)´i gRB(pJq fJƒf:& „g04)`*±üg±ñf$lµñf$lµñg"Jq k"€SDf²T—JƒfB€B‚Nu Nu qNu gJg` N".Nu gô"(g.(f".°®f²®gÖ x ±üg°¨f²¨g* h`æJf @Hz?)gB,,Jm g.¼•f*­ Jm f0-@ fB2- m aù&`aîFÛüSGfÂNu>, fz,, n6aüx`Nq`ì$F,g z,, m6aüX` ` JEgJ0Ðf`ëÔ., m6aúÖ``ìB€00P, f:ÐpPáˆ%@B€$°P 5pP$ª00Páˆ%@B€00Páˆÿ%@ `ë(áˆ-@ `ë»Îg-,f `ën`ëV`ëV., m6aú\`îJ…gæ0, 2,A'ÿg f  gÁÁÁ B‡,,g  gB† ff-)f ¸ fÁ.8 xΆެÞ¸ xθ |à"FffAø rfRˆ-(fTˆHG>G‡ÿ?HG Gaõ&`(TS€g`ê„`ê„2f"AÓa÷f`aì†`êv&H.*ág, "F m6aú¾`Ê`ÈJ0PfÂ!¬ P 0, @Oÿ gÀ1€P$1¼Pg1¼P àˆ1€PЇS€1€P ‰àˆ1€PP&ðP$R(-K gá-G$½Íf *n6aì(*NT`ét., 8,(M¹Îg ,,f `éºNh)H<*l6AÕaø¬``é˜J¬@g ,<àˆ°uPe °uPb`é„a`é"05P$@0g@$,25P$ uP a÷ì`aër<(SFÜuP;†PSh B†<(  g†1F JFf.05P$@ f$B€05PÐuPáˆB25P’uPR @aõú`aëBuPaëvBµP BµP$BµPBuPS-Nu*Na*n6aë,`è|»ÎgèÒa`èp$-2, l a÷D``è®`è¢`è¶`èž&H$m6.+AÒa÷ `êJ…gÞB…:+á, gº¬d`è–*,…ÿB$,,B, g,+ AÒaø¾` `žJ…faê\J0Pf%«P B2P' àŽ5†PàŠÜBSF5†PD€Ð« àˆ5€P5¼P+g5¼P5«P$òP$R*Rk -k  NuB‚,"x hJ1 oçìBƒ,g Co`çÆá‹à Hz@çåŠ B/?8 5gaõ¸îNs8 5gaõ¨Ý`ç4&M*n6., AÕaö†``çrJ®@gNh àˆ°uPe°uPcç`·ÎgçB"E$L.* k6aöP`J…f`ç0`ç0* ,**fB†<5P* gÜuPáŽB€05PuP$R@*áa÷n` `J…faé `æüJ0Pfö"( à‰ÔA1P1‚P’u@DAÒu@1P!µ@ P 1µ@&P&65@$*gƒ* gÃÃ1ƒP$1¼Pg1¼PBu@ÉEaèüËDBµ@ Bµ@$Bµ@Bu@S-R(20PÒpPá‰-A  g$$.´«g pP "(KaôÈ`aèN&L$+ ‚`åÒ,,`&"-6g*,,, Aaö‚`` J…gJ0Pf`æ..)g , g @ !TCBg` Aì aõ¤``åÐ N.(f ((g`åÂ"(6g*,,, Aaö`` J…gJ0Pf`å¬Hzÿ”?,--gGÿg­-g- ,gSs­-f­ ,Ss3g³ gAóaègl A g+l  g+l  g- ,fAÕaè\`ä  g í,`ä gØí ,`äJ­@fäHB‚,gfäXB‡, g*,, m6aô`Nq`ä*fä.B†&, $‚0¶‚l&ƒÿà‹HC8 pHC Caîz``ãâ ¼!ASQ!l!F Gè,!K!K!K 1G(áŠÔˆX‡”‡!BBƒ,481B&;01B$Bh*+H@`ã2 $L(m@ gb.)g@"j B€ cPr fY fP@R@€°l(b0@ç|4,$6{ (Nû°$z,* n6aó`Nq`ã*"F`ª`ã`ã.0000<<<<00006‚6¨6Æ6ê6\6bFß`âðFßaäêaÈa`Fß`ⶬ%FßaÖ`âZ l` l B9B$FßaàAÕaæp`â4a‚a¼``¸9B$Fßa€ar`â9B$Fß l a†aT`áða>az``ÿv9B$Fßa`aã^Nu*N(n@ g@ç|4,$4{ Nû `á<6ª6<rª˜6666666600000000FßaãFß`àðB9B$Fß.)fB…:,(, n6añ0`Nq`àÊ Faj`àZ.)fB…:,(, n6añ`NqFß`Ô F)HB(9B$Fß`àJB9B$Fß l a`à )l"lJ)j)i"lB€gX‰Y@ÀÁU@äHd0Ù` ÙQÈÿü@ç|³ìe"l)ISl*fì%Fß faNu$hÿì-)f!jÿì(ÿêf`B(ÿÿgX,(ÿúfD0,(@gDAl |ÿþÒ@Aÿÿ*)g"FäId0Ù` ÙQÉÿüNu/* j6aïø`Nq _1|ÿþ`ä1|ÿþ`Ü _`È*N(n@ g@ç|4,$4{ Nû `ß@<fˆ<fˆ6666666600000000Fßaá2Fß`ßFß.)fB…:,(, n6aïh``ß Faþ¤`Þ’Fß.)fz, n6aïB``Ø FBP`ÞpFß l `ÎFß l `êa`ÞZ*N(n@ gÞ– @g ,'fÞŒg ,'gÞŒ@ç|.-g€ãH,%gÀ;T€f9@$FßNu€f&9@$Fß)l"lJ)j)ia0X`Ýò9@$Fß l aý´aX`ÝÚ  €ˆÄÌ­ ,@ç| -XgaäFß»ø fPø AÕaá²í-Nu/ l ",’ˆg j*Ј°¬d)@ ˆRl*"Nu)l `îJl*gÜT¯`è²€köѬ `Ú~HG`B‡*LB® B†- g"m nJ‡g-g`Ýr`Ýj`ÝBB‡(N Uaìv`J€fR`Ý*  -@ J‡gJ gØ&¼10f6Jq0 l 10`ê‡0J10k‡0`JgAñ0aàTSGfô`î)-@ &#®0#®0#ˆ0JAf@3¼0 †0‡03‡0B±03B Ff3¼0`´ Fg®J‡fªB±03¼0 `ÿBÃC¼10f”J‡g †gF †fJ±0gh#ƒ3¼ÿÿ †B13BRq0 J‡fÿ8 Ff\J±0fVAñ0aÞì`ÛÖJ±0fþÚ-C #®0Rq0 ‡0`Añ0aßnJ10kò‡0`-C #®0Rq0 J‡g`þÚ`Ûð`Ûˆ`Û„a`Û¦$ ‚&\c$<&\"x ,Eé&J@ç| g$@½êf ªfaÝN`&J `àF×|.-f* )g($@#RF×%NBj%|!DLY-JX|aܾFßNuFß`ÛFaÿz .@g(@,'f0|,%gTHaü|@ç|®-g .Xg*NaFß`Ú¶î,Fß`ÚÒHç@p$@"x ,GéµÓg&S`øaÜšLßB­X­,Nu$M*)gÚÔa `Ún$Lª ,$< 4*&*(*8<AêàaâòNq(Jª)ª@Bªèª ,gAÒaÞdNu" Cø ˜ 1fÂüCø ¨$1´®g`ÚLf"Jñkú±1fBq±`ÙÐñ± gAñaÝv`Ù¶*L(N Uaé:``Ùúa`Ù (Na$`Ù–&"Jq l&1 1fJ1gAñ0aÝ.Jq jB±Bq B10 Sq0 `àB10 10gzSq0 f$ 10fÀ10°10g´3¼0 B±0`ª.10,10B„4)pJq l.¾±f(¼±f"JDg#„`(3±0 3±0#±0Bq0 €SBfÂ`TJ10j*q0^mHxAAñ0aÜr`â.10,104)pJq j¾±f¼±fBq B±€SBfÜBq0 B±0Nu,)g Aøaçö`NuaþÌ`î$‚Eø ˜ 2 f"ÂüCø ¨½ñfa`Ø4`Ø„&x + ,g,´+sf&«-« ,'|çJBB+AæJAÓaÜ6&k fÄB2 B±B±Bq1g AñaÛŒ`îNuEø ˜Cø ¨t 2 f "Âü¹ñg R‚ ‚mâNuaÿp`Ú-è+lè8-è-è`×€$M l", aç‚``×À*H*)f×°»Êg.½Êg*,g".(f*(f m±êg -(f`׆$< 4*&*(*8<AÕaßÈ``×Tí)ê)ê ,%mà%mä½Êg× `Öà-)g( -à°®f -ä°®f,+ n6aç~NuNq`×`× aÚ  8 > &\e&\R€HÔ`ÖŒ&L- ,gÖàzJaÿœ(FCí0<"ÜQÈÿü+mt+m ”+\B0-è+\è-èø-è@A--gÖ4+lÿîô;lÿúø+lÿöú`ÖAÖaÚD`Ö<­ ,gÖjAÕaÚB`Ö&L- ,gÖTzaÿ(F--f­@`­ø+lð+lô+l ì+løBmø-è8-èJgF--fí@`íø.-èg&z,-ð m6aæ>`Nq`Õä†(Ff+Tô­ ,0-,@ÿfAÕaÙ‚`ÕF@ç$, 6,|B„g (,nFß`ÕžB… g *,fÆaÙCÀg*B†6, gƒg´lJ„gÔ„`ô‚&\`6,$Ô„"x ,Eé|&J$S gλêfð*fèJ†kºªfÞ&’ R±éf (Ѹ NѸ J¸ J` *ѨF×J†f2%M„%D %lBj%EÃ5C”|aÖ F×`‚RFCf* g0êªêB‚Hç~|aÕÖFïLß~J†kÿF`@|$©#JF×J†kÿ0`*J†f| )g $@#RF×`ÿ`Fß`Ô"SFnFß`Ô Fß`ÓÆ&Lz`aüà(FCí0<(ÙQÈÿü(íB8í@ -è€ÿÿÿ(À(í,0-è@ø8À(íð(íô(íì(íø--gÓr)môÿØ9møÿä)múÿà`Ó\*N"(n@ g<,'f8Nj~,'f‡<.)f&*, n6aãè`Nq><€™AÖaÏ`ÓX`Ó`&F`&J ‡oLÛ}Hî}LÛ|Hî| .‰0@ÿ/gÀ?@/[ÔÇNb@ç|4,$4{ Nû <d”d<|”|0606060600000000FßaÔòFß`ÒvFßgÒl)l"lJ)j)iaô¸`Ò€g B9B$Fß`Ò6g B9B$Fß`ÒFßgÒ l aò aôn`Ò6>,.(f‡J”gz, n6aâ°`Nq`ÒJJ®@gÒ",‚Eø ˜J2 fÒ¼ Eø ¨Äü%Ž %® 5¼ B² %” Br 5‡ 2` ò `ц.(f -(fÑÐ,°-%cB® m%#`Ѽ@$@&`ÑPBG`><&,"x $0àH°i lF(¸±0f>Jq0 g8 10f ¾10g.‡0Jq0 j&10JGg Añ0aÔ`ÐüAñ0aÔ°`Ðð`Ñ@`ÑD,*H"x 0 g i‘É*$ n6aá`Nq`Ñ*$F&äŠS‚$ÙQÊÿü$F(M"x 0&Q—ÉÙË$ÌÛÃ$Í`М.(f`Ðì@ç2<€tÿaÑ2NqLÜ.<&\¾„b˜‡Rƒ`ö|!à >&8 J–¸ N–¸ R–„׸ R¸ RaFß`ÐF"8 R’¸ JÒ¸ N&\"ABtÿAúaÐÐ`aÒŒNu@ç|R¸ >¸&\ RaÀFßNs . €Kª{ûfÐ0Jnpg x :(fÐ x Uˆ, z n6aà”`Nq`Ð*FLîÿN•,x *n6aÒ\`Ϭî ,`ÏÊJ”f@",g.(f".*y »üg(²­f-(f ½Ígí-g:*m`ØAÔaßz`B® `Ï’*H½Íg-(g .(f`Ïí-fÏz0,gÀí);@*;m,.-m +n°+n´­ ,­-­ ,g2 m”@ç|JÐküCèÿâJ© g»é g"i `î#m RPFßm-ÿ,|ð&­ ,gí-@ç|­-g <  @ ( g °fô!m AÕaÒ°Fß`Îlî)=H*fî*.(g. (gL× NiHî8aЪ.-g`$.)fÎ=H*=n,.î--n°-n´(N"x ,Eé&J@ç| g$@¹êfaÏô`&J `êFß,)gaàb ,Tg @B¨!x <!È <&,(,ì)"x )-f2¸©f¬),)g) ,g¶©àf¸©äf ><@AÑaÉn"i f¾,)gaòòNqaõŽ,)gaôÖ~Cø ˜Eø ¨"Âü 1pf2g/aÇø., ,gaÐR‡ ‡oÄaëæaà²J¬gH4<HB4,&,8,HD8,°*,²<,¶HF <<.,*>,,)g<<$LAìaÕfNq(JCø )g¹Àg"@`ò#laÏ‚B¸ rAÔaÙÚ`L× NiHî8aÎî`̦-mp =m("--gÌd`ÌÀIëÿþ6<€a&NuT—Nu&LLìpHF>,6.(Ba ``ÌÂ`Ì0AÓaÜL``pT—NuB€8 qH@0< @aÖø`pT—Nu*H4<B˜QÊÿü+S +fgJ€f `<.p .;Fp+@aÚ€fDÿ;D(+El+EB;|„FHD0àHgfJg¸.%c.%D%°c@$@&*¼!TCB|€,;|:;|0$MÕü`+J6$¼!TST|5|$5|D x  -"-±üg"°¨f²¨g h`ærAÕaØ^NqpT—NuaÍî`pT—Nu+x !Í Nufg2 .".` ", , g.(g Jg` .".+@+ANu.(gË*<,, n6aÛ^`Nq`Êø,gÊú&Fp&ÝQÈÿü`Êx@ç, gzR` ,gz,. n6aÛ`NqFß`ÊŠJ”f6".*y »üg,²­f-(f-,g-.fB*m`ÔAÔaÚ,` B® Fß`ÊB*H½Íg-(g.(fFß`Ê>-,f Fß`Ê$-m -.fX>,aþÌ+mlB<-(F€g@z,-B m6aÚf`NqFß`Éþ+FB:(0P$g00PÑpPÑpPBpPQ… E làBm., gGìLÛÿHíÿLÛHí |­,0-,@ßfF×AÕaÍfFß`É(@çJ”f8".*x »üg0²­f-(f½Íg--fí,gJ*m`ÐAÔaÙ` B® Fß`É*H--fì½Íg-(g.(fFß`Éí,gFß`Èö;m,.-m |­-gCø  I"h ³üg ³Ífî!i Fß`Èl|®-fî,|øÿ`Èz|øÿAÖaÌ€0.^gÈ@Bn^`ÈÆ-n Hî)`È(-n Lî)`È Ma`È@ç|¨,f è-FßNu (Xg"Hçp$@"x ,GéµÓg&S`øaÉâB¨XLßFß0(^g1|1@|ABh^aËèNu*N(n@ g(,'f$@ç|.-f 4,$4{ Nû Fß`Ç|`ÇÀ`ÇÈN6z6N6z60606060600000000FßaÉ®î , 9B$Fß`ÇN9B$Fß)l"lJ)j)iaé^`Ç"9B$Fß l aæÜaé@`Ç..)f,fz n6a׆`Nq`Æø F$H"*f`ÇAø ŒAø ŒaɰGø "SJ“g²©gØGé`ì f¾.)f, n6B…*çEa×&`Nq` B€* e c @dpËa„r Âj A fp ar"x hJ1gj´*fª *ÿg Jª fpÇaH *b *dpÌa4GêB…*g0 opÎaS…ç2*²sPdpÏa ²sPd pÏa``\Q…lâp Àjf" * @fRˆHyQT? *(SJ“fp a¦Gì°¬fì*,Ig°,(gp a† ¬g(l`ð"SJ“gGé`ô j p(R@ @Hç€8aÏö` LßpaÿJLß"HíˆB˜S€nú*g)I&‰"¼!CCB*giHLê?Hé?))àáˆ3@B@3@@GêIép)+g(Û(ÛS`öB€*åˆ#@D&j ×Ó#K )ÿf#|W*géI*géH`R*fbB€*&x hJ3g:(iD &TGëÿ¶*` &lJ¬g +*²n(K`ê¹Àg #K)I`#K&iD3|N¹J#|W¸LIéJ&ŒB€* x h¼ÿ iÑè*I/N,_`‚`jp aøp aôpað gFo opÁaÜ n6B€S&@B… f )e: )c )€e* )b".)f;°g,aÔ ` Nq`š×ËGû°ÖÓNÓÿþ Ê Øî *aºf² © ©HfV")D(A&TGëÿ¶ `&lJ¬faÅn°‹g(K`ê¹Áf$J«g&(k9|N¹J)|W¸LIìJ&kD&Œ` )k`B)(&iDHzºš&Ÿ&x hB3Iø  &TJ”faŰ‹gIë`ì(«Aø ŒaÆD IraÏÊ`@aÄèpaz&Iaø"Kfpal)Hgp‚a`)IgpƒaT)Ig .(gþ€)Igp a6 )c )c )€e )c*g< * d pÆa¢`žj :#j `Á )AîDJg"P°©gAé `îF€NuXBAø ŒaÄ `ÀÔAø ŒaÃú`À:,m4B€-9f NpN@`F|q|ptAíp!­< g ­€pX‚€ ­8 T‚´-:cm:pLí<pažNuHç`CípB€ m"-+g|00J)fFÄ)fCéS`â0))gJ0`(©0-&ЈfS€ˆ$J0U@løB0 UBlø@À@FÀ-Hg Hç:aÿ Lß\øLß|NuLß|ÿþNuHç m4pN@`Lßx`LßxNu8 4g @ça͆îFßHç€Ä*oKíÿ°"m/ N‘*_e -g*@`êLß#X|Jx fNs`¶ê8 5gaÍ>îHç€Ä 8 g*@ m ( g / @çN°Fß*_ -`àLß#|Jx fNs`¶   DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page1    Command Line: 5LINK ,EXORMACS.RMS.LO,EXORMACS.RMS.LL;H,M,I,X,-U,Z=40  8OptionsinEffect:‚A,-B,-D,H,I,-L,M,O,P,-Q,-R,-S,-U,-W,X  User Commands: SEGRMS0:0$0,$BFFSEGRMS2:2,3,4,5,6,7,15‚$C00INPUT EXORMACS.VECTORS.ROIN‹&.SYSPAR.ROIN†M68XXX.RMS.ROIN„EXORMACS.VECTTBL.ROIN†M68XXX.AKRQST.ROIN†M68XXX.ASQALOC.ROIN†M68XXX.ASQEVENT.ROIN†M68XXX.ASQFREE.ROIN†M68XXX.ASQGET.ROIN†M68XXX.ASQREAD.ROIN†M68XXX.ASQSTATS.ROIN†M68XXX.ASRINT.ROIN†M68XXX.ATSEM.ROIN†M68XXX.BKG.ROIN…NOCACHE.CACHE.ROIN†M68XXX.CDIR.ROIN†M68XXX.CISR.ROIN†M68XXX.CKDELAY.ROIN†M68XXX.CKEXPAT.ROIN†M68XXX.CMR.ROIN†M68000.COMINT.ROIN†M68XXX.DCLSHAR.ROIN†M68XXX.DELAY.ROIN†M68XXX.DEMON.ROIN†M68XXX.DERQST.ROIN†M68XXX.DESEM.ROIN†M68000.DISPATCH.ROIN†M68XXX.DSEGX.ROIN†M68XXX.DSEMX.ROIN†M68XXX.DSERVE.ROIN†M68XXX.DSRVX.ROIN†M68XXX.EQDQ.ROIN†M68XXX.EXABRT.ROEÈ3Í/Ñ)ÕÙÝáåéíñõùý   !%)-159=IN†M68000.EXCEPT.ROIN†M68000.EXIT.ROIN†M68XXX.EXMMSK.ROIN†M68XXX.EXMON.ROIN†M68XXX.EXMONVR.ROIN†M68XXX.EXQEVENT.ROIN†M68XXX.EXRQPA.ROIN†M68XXX.FNDGSEG.ROIN†M68XXX.FNDTSEG.RO  DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page2  IN†M68XXX.FNDUSEM.ROIN†M68XXX.GETTCB.ROIN†M68XXX.GTDTIM.ROIN†M68XXX.GTTASKID.ROIN†M68XXX.GTTNAME.ROIN†M68XXX.KILLER.ROIN„EXORMACS.XLOADMMU.ROIN†M68XXX.LOGPHY.ROIN†M68XXX.PAGEALOC.ROIN†M68XXX.PAGEFREE.ROIN†M68XXX.PAUSE.ROIN†M68XXX.POWRFAIL.ROIN†M68XXX.PSTATE.ROIN†M68000.PVSEM.ROIN†M68XXX.RCVSA.ROIN‡M6840.RDTIMER.ROIN†M68XXX.READY.ROIN†M68XXX.RELINQ.ROIN†M68XXX.RESUME.ROIN†M68XXX.REXMON.ROIN†M68XXX.RQSTPA.ROIN†M68XXX.RSTATE.ROIN†M68XXX.RTEVENT.ROIN†M68XXX.SEGALOC.ROIN†M68XXX.SEGDEAL.ROIN†M68XXX.SEGSHAR.ROIN†M68XXX.SELFTEST.ROIN†M68XXX.SERVE.ROIN†M68XXX.SETPRI.ROIN†M68XXX.SGSEM.ROIN†M68000.SINT.ROIN†M68XXX.SNAPTRAC.ROIN†M68XXX.SPURINT.ROIN†M68XXX.STDTIM.ROIN†M68000.SUPER.ROIN†M68XXX.SUSPEND.ROIN†M68XXX.TERM.ROIN†M68XXX.TFRSEG.ROIN‡M6840.TIMEINT.ROIN†M68XXX.TRACER.ROIN†M68000.TRAP0.ROIN†M68000.TRAP1.ROIN†M68XXX.TSKATTR.ROIN†M68XXX.TSKBORN.ROIN†M68XXX.TSKINFO.ROIN†M68XXX.TSKMOVE.ROIN†M68XXX.TSKSTART.ROIN†M68XXX.TSKWAIT.ROIN†M68XXX.USERVECT.ROIN†M68XXX.WAKEUP.ROIN†M68XXX.WTEVENT.ROINPUTƒM68XXX.RMSPATCH.ROEND  DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page3    !Object Module Header Information: 4Module…VerRevLanguageDate…Time…CreationFileName DVECTORS†1ƒ0Assembly02/28/8521:43:01SREL:9999.EXORMACS.VECTORS.SA‹INTERRUPTVECTORS ;SYSPAR‡5ƒ1Assembly03/01/8500:25:30SREL:9999..XSYSPAR.AG/‹Systemparametersat$900;Crashsaveat$400. :RMSŠ5ƒ1Assembly02/28/8523:10:17SREL:9999.M68XXX.RMS.SA‹68xxxRMSINITIALENTRYPOINT EVECTTBL†5ƒ1Assembly03/01/8500:26:02SREL:9999.EXORMACS.XVECTTBL.AG%‹RMS68KvectortablefortheEXORMACS @AKRQST‡5ƒ1Assembly02/28/8522:16:40SREL:9999.M68XXX.AKRQST.SA-‹68xxxDIRECTIVE--ACKNOWLEDGESERVICEREQUEST BASQALOC†6ƒ0Assembly02/28/8522:17:58SREL:9999.M68XXX.ASQALOC.SA'‹68xxxDIRECTIVE--ALLOCATEASQ“07/13/84 DASQEVENT…6ƒ0Assembly02/28/8522:19:25SREL:9999.M68XXX.ASQEVENT.SA&‹68xxxDIRECTIVE--QUEUEEVENT’07/13/84 BASQFREE†5ƒ2Assembly02/28/8522:21:41SREL:9999.M68XXX.ASQFREE.SA ‹68xxxDIRECTIVE--DEALLOCATEASQ AGTEVENT†6ƒ0Assembly02/28/8522:22:36SREL:9999.M68XXX.ASQGET.SA$‹68xxxDIRECTIVE--GETEVENT07/13/84 BASQREAD†6ƒ0Assembly02/28/8522:24:23SREL:9999.M68XXX.ASQREAD.SA%‹68xxxDIRECTIVE--READEVENT07/13/84 DASQSTATS…5ƒ1Assembly02/28/8522:25:53SREL:999 9.M68XXX.ASQSTATS.SA ‹68xxxDIRECTIVE--SETASQSTATUS @ASRINT‡6ƒ0Assembly02/28/8522:27:18SREL:9999.M68XXX.ASRINT.SA/‹68xxxTRAP0--PROVIDEEVENTINTERRUPTŽ07/13/84 >ATSEMˆ5ƒ1Assembly02/28/8522:28:04SREL:9999.M68XXX.ATSEM.SA1‹68xxxDIRECTIVES--CREATEANDATTACHTOSEMAPHORE :BKGŠ5ƒ1Assembly02/28/8522:29:44SREL:9999.M68XXX.BKG.SA,‹M68xxx--Backgroundandguardedprocessing ?CACHEˆ5ƒ1Assembly02/28/8523:42:57SREL:9999.NOCACHE.CACHE.SA&‹Cachecodeforsystemswithnocache. DELAYˆ5ƒ1Assembly02/28/8522:39:45SREL:9999.M68XXX.DELAY.SA‹68xxxDIRECTIVE--DELAY >DEMONˆ5ƒ1Assembly02/28/8522:41:01SREL:9999.M68XXX.DEMON.SA*‹68xxxDIRECTIVE--DETACHEXCEPTIONMONITOR @DERQST‡5ƒ1Assembly02/28/8522:41:58SREL:9999.M68XXX.DERQST.SA0‹68xxxDIRECTIVE--SETUSER/SERVERREQUESTSTATUS >DESEMˆ5ƒ1Assembly02/28/8522:42:59SREL:9999.M68XXX.DESEM.SA'‹68xxxDIRECTIVE--DETACHFROMSEMAPHORE DDISPATCH…5ƒ1Assembly02/28/8521:46:56SREL:9999.M68XXX.DISPATCH.SA‹68000DISPATCHER >DSEGXˆ5ƒ1Assembly02/28/8522:44:13SREL:9999.M68XXX.DSEGX.SA&‹68xxxTRAP0--DEALLOCATEALLSEGMENTS >DSEMXˆ5ƒ1Assembly02/28/8522:44:56SREL:9999.M68XXX.DSEMX.SA)‹68xxxTRAP0--DETACHFROMALLSEMAPHORES @DSERVE‡5ƒ1Assembly02/28/8522:45:31SREL:9999.M68XXX.DSERVE.SA,‹68xxxDIRECTIVE--DEALLOCATESERVERFUNCTION >DSRVXˆ5ƒ1Assembly02/28/8522:46:31SREL:9999.M68XXX.DSRVX.SA)‹68xxxTRAP0--DEALLOCATESERVERFUNCTION EXMONˆ5ƒ1Assembly02/28/8522:49:29SREL:9999.M68XXX.EXMON.SA-‹68xxxDIRECTIVE--ATTACHTOEXCEPTIONMONITOR BEXMONVR†5ƒ1Assembly02/28/8522:50:49SREL:9999.M68XXX.EXMONVR.SA)‹68xxxSUBROUTINE--VALIDATEEXMONREQUEST DEXQEVENT…5ƒ1Assembly02/28/8522:51:41SREL:9999.M68XXX.EXQEVENT.SA‹68xxxTRAP0--QUEUEEVENT @EXRQPA‡5ƒ1Assembly02/28/8522:52:41SREL:9999.M68XXX.EXRQPA.SA5‹68xxxTRAP0--REQUESTPERIODICACTIVATIONOFPROCESS BFNDGSEG†5ƒ1Assembly02/28/8522:53:26SREL:9999.M68XXX.FNDGSEG.SA/‹68xxxTRAP0--FINDSEGMENTINGLOBALSEGTABLE BFNDTSEG†5ƒ1Assembly02/28/8522:54:03SREL:9999.M68XXX.FNDTSEG.SA1‹68xxxTRAP0--FINDSEGMENTINTASKSEGMENTTABLE BFNDUSEM†5ƒ1Assembly02/28/8522:54:36SREL:9999.M68XXX.FNDUSEM.SA)‹68xxxTRAP0--FINDUSERSEMAPHOREINUST @GETTCB‡5ƒ1Assembly02/28/8522:55:11SREL:9999.M68XXX.GETTCB.SA-‹68xxxTRAP0--GETTASKCONTROLBLOCKADDRESS @GTDTIM‡5ƒ1Assembly02/28/8522:55:44SREL:9999.M68XXX.GTDTIM.SA#‹68xxxDIRECTIVE--GETDATEANDTIME DGTTASKID…5ƒ1Assembl y02/28/8522:56:31SREL:9999.M68XXX.GTTASKID.SA‹68xxxTRAP1--GETTASKID BGTTNAME†5ƒ1Assembly02/28/8522:57:29SREL:9999.M68XXX.GTTNAME.SA‹68xxxTRAP1--GETTASKID @KILLER‡5ƒ1Assembly02/28/8523:00:29SREL:9999.M68XXX.KILLER.SA‹68xxxCRASHTHESYSTEM DLOADMMU†2ƒ0Assembly02/28/8521:42:29SREL:9999.EXORMACS.LOADMMU.SA ‹LOADMMU @LOGPHY‡5ƒ1Assembly02/28/8523:00:53SREL:9999.M68XXX.LOGPHY.SA2‹68xxxTRAP0--CONVERTLOGICALADDRESSTOPHYSICAL DPAGEALOC…5ƒ1Assembly02/28/8523:01:28SREL:9999.M68XXX.PAGEALOC.SA'‹68xxxTRAP0--ALLOCATEPHYSICALMEMORY DPAGEFREE…5ƒ1Assembly02/28/8523:02:30SREL:9999.M68XXX.PAGEFREE.SA#‹68xxxTRAP0--FREEPHYSICALMEMORY >PAUSEˆ5ƒ1Assembly02/28/8523:03:12SREL:9999.M68XXX.PAUSE.SA%‹68xxxTRAP0--PAUSEDURINGEXECTOUR  DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page6   DPOWRFAIL…5ƒ1Assembly02/28/8523:03:42SREL:9999.M68XXX.POWRFAIL.SA#‹68xxxPOWERFAILINTERRUPTHANDLER @PSTATE‡5ƒ1Assembly02/28/8523:04:04SREL:9999.M68XXX.PSTATE.SA,‹68xxxDIRECTIVE--SETSTATEOFEXMON'EDTASK >PVSEMˆ5ƒ1Assembly02/28/8521:51:41SREL:9999.M68XXX.PVSEM.SA ‹68000TRAP0--SEMAPHOREROUTINE >RCVSAˆ5ƒ1Assembly02/28/8523:05:01SREL:9999.M68XXX.RCVSA.SA,‹68xxxDIRECTIVE--RECEIVESEGMENTATTRIBUTES ARDTIMER†1ƒ0Assembly02/28/8522:14:08SREL:9999.M6840.RDTIMER.SA-‹READTIMERroutinefortheM6840timerchip. >READYˆ5ƒ1Assembly02/28/8523:06:50SREL:9999.M68XXX.READY.SA*‹M68xxxRMSTRAP0Puttaskonreadylist. @RELINQ‡5ƒ1Assembly02/28/8523:07:33SREL:9999.M68XXX.RELINQ.SA&‹68xxxDIRECTIVE--RELINQUISHEXECUTION @RESUME‡5ƒ1Assembly02/28/8523:08:19SREL:9999.M68XXX.RESUME.SA)‹68xxxDIRECTIVE--RESUMEASUSPENDEDTASK @REXMON‡5ƒ1Assembly02/28/8523:09:11SREL:9999.M68XXX.REXMON.SA2‹68xxxDIRECTIVE--EXECUTETASKUNDEREXMONCONTROL @RQSTPA‡5ƒ1Assembly02/28/8523:11:25SREL:9999.M68XXX.RQSTPA.SA-‹68xxxDIRECTIVE--REQUESTPERIODICACTIVATION @RSTATE‡5ƒ1Assembly02/28/8523:12:42SREL:9999.M68XXX.RSTATE.SA-‹68xxxDIRECTIVE--READSTATEOFEXMON'EDTASK BRTEVENT†5ƒ1Assembly02/28/8523:13:33SREL:9999.M68XXX.RTEVENT.SA+‹68xxxDIRECTIVE--RETURNFROMEVENTSERVICE BSEGALOC†5ƒ1Assembly02/28/8523:15:23SREL:9999.M68XXX.SEGALOC.SA+‹68xxxDIRECTIVE--ALLOCATEAMEMORYSEGMENT BSEGDEAL†5ƒ1Assembly02/28/8523:17:07SREL:9999.M68XXX.SEGDEAL.SA+‹68xxxDIRECTIVE--DEALLOCATEMEMORYSEGMENT BSEGSHAR†5ƒ1Assembly02/28/8523:18:29SREL:9999.M68XXX.SEGSHAR.SA6‹68xxxDIRECTIVES--SHARESEGMENTANDATTACHTOSEGMENT DSELFTEST…5ƒ1Assembly02/28/8523:20:11SREL:9999.M68XXX.SELFTEST.SA(‹68xxxSYSTEMSELFTESTINTERRUPTHANDLER >SERVEˆ5ƒ1Assembly02/28/8523:20:35SREL:9999.M68XXX.SERVE.SA&‹68xxxDIRECTIVE--BECOMEASERVERTASK @SETPRI‡5ƒ1Assembly02/28/8523:21:42SREL:9999.M68XXX.SETPRI.SA(‹68xxxDIRECTIVE--CHANGETASK'SPRIORITY  DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page7   >SGSEMˆ5ƒ1Assembly02/28/8523:22:37SREL:9999.M68XXX.SGSEM.SA,‹68xxxDIRECTIVES--SIGNALANDWAITSEMAPHORE SUPERˆ5ƒ1Assembly02/28/8521:53:17SREL:9999.M68XXX.SUPER.SA,‹M68000DIRECTIVE--SWITCHTOSUPERVISORMODE BSUSPEND†5ƒ1Assembly02/28/8523:26:04SREL:9999.M68XXX.SUSPEND.SA‹68xxxDIRECTIVE--SUSPEND TRAP0ˆ5ƒ1Assembly02/28/8521:54:23SREL:9999.M68XXX.TRAP0.SA!‹68000TRAP#0handlerandtable. >TRAP1ˆ5ƒ1Assembly02/28/8521:55:13SREL:9999.M68XXX.TRAP1.SA!‹68000TRAP#0handlerandtable. BTSKATTR†5ƒ1Assembly02/28/8523:31:17SREL:9999.M68XXX.TSKATTR.SA)‹68xxxDIRECTIVE--RECEIVETASKATTRIBUTES BTSKBORN†5ƒ1Assembly02/28/8523:32:06SREL:9999.M68XXX.TSKBORN.SA!‹68xxxDIRECTIVE--CREATENEWTASK BTSKINFO†5ƒ1Assembly02/28/8523:33:18SREL:9999.M68XXX.TSKINFO.SA2‹68xxxDIRECTIVE--MOVETARGETTASK'STCBTOBUFFER BTSKMOVE†5ƒ1Assembly02/28/8523:34:22SREL:9999.M68XXX.TSKMOVE.SA1‹68xxxDIRECTIVES--MOVELOGICALANDMOVEPHYSICAL DTSKSTART…5ƒ2Assembly02/28/8523:35:50SREL:9999.M68XXX.TSKSTART.SA$‹68xxxDIRECTIVE--STARTDORMANTTASK  DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page8   BTSKWAIT†5ƒ1Assembly02/28/8523:37:53SREL:9999.M68XXX.TSKWAIT.SA‹68xxxDIRECTIVE--WAIT DUSERVECT…5ƒ1Assembly02/28/8523:38:52SREL:9999.M68XXX.USERVECT.SA2‹68xxxDIRECTIVES--USEREXCEPTIONANDTRAPVECTORS @WAKEUP‡5ƒ1Assembly02/28/8523:39:42SREL:9999.M68XXX.WAKEUP.SA(‹68xxxDIRECTIVE--WAKEUPAWAITINGTASK BWTEVENT†5ƒ1Assembly02/28/8523:40:43SREL:9999.M68XXX.WTEVENT.SA ‹68xxxDIRECTIVE--WAITFOREVENT DRMSPATCH…5ƒ1Assembly02/28/8523:11:03SREL:9999.M68XXX.RMSPATCH.SA‹PatchareaforRMS68K.  Load Map:  !Segment RMS0: 00000000 00000BFF 0/Module†SƒT‚Start…End‡ExternallyDefinedSymbols VECTORS‰A‚00000000‚00000027  .Segment RMS2: 00000C00 000059FF 2,3,4,5,6,7,15/Module†SƒT‚Start…End‡ExternallyDefinedSymbols 6RMSŠ2…00000C00‚00000C7F‚RMSˆ00000C00‚CALLKILLƒ00000C0CVECTTBL†2…00000C80‚00000CDF;BKGŠ2…00000CE0‚00000D61‚CALL_GUAƒ00000D50‚BKG_DISPƒ00000D04§BKG_SCHEƒ00000CE0=CACHEˆ2…00000D62‚00000D65‚FLUSH_ONƒ00000D64‚FLUSH_ALƒ00000D62,CKDELAY†2…00000D66‚00000E7D‚CKDELAY„00000D66+CKEXPAT†2…00000E7E‚00000EBD‚CKEXPA…00000E7E=COMINT‡2…00000EBE‚00001007‚COMINTZ„00000EDE‚COMINT_Pƒ00000EEA §COMINT…00000EBE‚ISRERR…00000FCC!§ISRRTE…00000F66‚COMNISR„00000F24?DISPATCH…2…00001008‚000011AD‚PREEMPT„00001018‚DISPATCHƒ0000101E§L1_D0_SAƒ00001008:EQDQ‰2…000011AE‚000012D7‚EXEQDQ…000011AE‚SBEXEQDQƒ000011AE§EQDQ‡000011CAEXCEPT‡2…00001334‚000016D5‚PROGINT2ƒ000013A4‚PROGINT3ƒ000013A6$§PROGINT4ƒ000013A8‚PROGINT5ƒ000013AA$§PROGINT6ƒ000013AC‚PROGINT7ƒ000013AE$§PROGINT8ƒ000013B0‚PROGINT9ƒ000013BA$§PROGINTAƒ000013B2‚PROGINTBƒ000013B4 §BERR1†000013A4‚TRPVCT2„00001338"§TRPVCT3„0000133A‚TRPVCT4„0000133C"§TRPVCT5„0000133E‚TRPVCT6„00001340"§TRPVCT7„00001342‚TRPVCT8„00001344"§TRPVCT9„00001346‚CKEXMON„0000168A"§TRPVCTA„00001348‚TRPVCTB„0000134A"§TRPVCTC„0000134C‚TRPVCTD„0000134E  DMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page9  "§TRPVCTE„00001350‚TRPVCTF„00001352EXRQPA‡2…0000178A‚0000194B‚PAT_DEL_ƒ000018E6‚PAT_MID_ƒ0000191A$§PAT_SCHEƒ00001896‚PAT_RM_1ƒ00001930 §EXRQPA…0000178A‚SBRQPA…0000178A§PAT_1ST_ƒ000018 F6LOADMMU†2…00001988‚000019C3‚LOADMMU„00001988‚LOADMMUIƒ0000198A#§MMUFAULTƒ000019C2‚UNLDMMU„000019B0§CRASN†000019C2‚DEASN†000019C29PAUSEˆ2…000019C4‚000019D1‚SBPAUSE„000019C4‚PAUSE†000019C4.POWRFAIL…2…000019D2‚000019ED‚POWRFAILƒ000019D25PVSEMˆ2…000019EE‚00001AD3‚PSEM‡000019EE‚VSEM‡00001A98§SBPˆ000019EE‚SVXSTAK„00001A44§SBVˆ00001A98‚PSWAIT…00001A20=RDTIMER†2…00001AD4‚00001B07‚RDTIMER„00001AD4‚SBRDTIM„00001AD4PAGEFREE…3…00002426‚00002549‚SBPGFR…00002426‚PAGEFREEƒ00002426*TRACER‡3…0000254A‚000025BF‚TRACER…0000254A>FNDGSEG†4…000025C0‚0000263D‚SBFNDGSGƒ000025C0‚FNDGSEG„000025C0>FNDTSEG†4…0000263E‚00002669‚SBFNDSEGƒ0000263E‚FNDTSEG„0000263E>FNDUSEM†4…0000266A‚000026EB‚SBFNDSEMƒ0000266A‚FNDUSEM„0000266A>GETTCB‡4…000026EC‚00002763‚SBGETTCBƒ000026FE‚SBGTXTCBƒ000026EC §GETTCB…000026FE‚GTXTCB…000026EC.GTTASKID…4…00002764‚00002791‚GTTASKIDƒ00002764,GTTNAME†4…00002792‚000027A1‚GTTNAME„00002792;LOGPHY‡4…000027A2‚000027F7‚LOGPHY…000027A2‚LOGPHYO„000027A6$§SBLOGPHOƒ000027A6‚SBLOGPHYƒ000027A2  EMotorolaM68000LinkageEditorVersion‚1.80‚03/01/85‚00:26:38‡Page10  &CDIR‰5…000027F8‚00002891‚CDIR‡000027F87CISR‰5…00002892‚000029AF‚CISR‡00002892‚SBDIOVX„0000296A,DCLSHAR†5…000029B0‚00002A87‚DCLSHAR„000029B09DSEGXˆ5…00002A88‚00002B13‚SBDSEGX„00002A88‚DSEGX†00002A88(RCVSAˆ5…00002B14‚00002BBF‚RCVSA†00002B14,SEGALOC†5…00002BC0‚00002D69‚SEGALOC„00002BC0>SEGDEAL†5…00002D6A‚00002E51‚DESEG_SUƒ00002DBC‚SEGDEAL„00002D6AASRINT‡6…0000393C‚000039AF‚I_DISP_Aƒ0000393C‚SBUPDATQƒ0000396C#§DISP_ASRƒ0000393C‚UPDTASQ„0000396C$§READY_ASƒ0000393C‚GTASQBUFƒ0000396C7ATSEMˆ6…000039B0‚00003B55‚ATSEM†000039B6‚CRSEM†000039B0)CACHEˆ6…00003B56‚00003B59‚FLUSHC…00003B56:DELAYˆ6…00003B5A‚00003C5D‚PAT_CAN_ƒ00003C34‚DELAY†00003B5A§DELAYW…00003BE49DEMONˆ6…00003C5E‚00003CB9‚SBDMONX„00003C70‚DEMON†00003C5E§DMONX†00003C70*DERQST‡6…00003CBA‚00003D27‚DERQST…00003CBA:DESEMˆ6…00003D28‚00003E65‚DSEM_SUBƒ00003D48‚DESEM†00003D28§DESEMA…00003D3E*DSEMXˆ6…00003E66‚00003E7F‚SBDSEMX„00003E66‚14™***‡takeovervectorsintheprocessor'svectortable.*** ‚15™***É***S‚16™*******************************************************************************S‚17™*******************************************************************************S‚18™*^*****************************************************************************‚19‚20™*0‚21™*‚Revisionhistory(addnewchangestotop).‚22™*…Date†Author‰ChangesK‚23™*…--------‚-------------‚----------------------------------------------3‚24™ *…10/21/83‚DICKVANDERLINRevisionforEXORMACS,‚25™*…10/4/83‚SteveFranckƒInitialwriting.‚26™*‚27‚28‚29™*I‚30™*‚XREF's.‚NotethattherearemanymoreXREF'screatedbyinvocations<‚31™*‚oftheVECTORmacro;thoseXREF'sarenotlistedhere.‚32™*1‚33¢XREF…COMINTCommoninterrupthandlerroutine.‚34‚35‚36‚37™*‚38™*‚Includedfiles:‚39™*9‚40™*‰9995.&.STR.EQThesectionnumbertouseisinhere.‚41™* XMotorolaM68000ASMVersion‚1.80SREL:9999.EXORMACS.XVECTTBL.AG03/01/8500:26:02žPAGEƒ2  554™*J555™*‚TheVECTORmacrodefinesentriesinthevectortable.‚Theformatis*556™*‰VECTOR‚,:557™*‚Therearetwospecialvaluesfor:1558™*‰0=COMINT(thecommoninterrupthandler).-559™*‰1=don'ttakeoverthevectoratall.J560™*‚Entriesinthevectortablemustbeassignedinorder--thatis,theG561™*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.M562™*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapintheP563™*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler>564™*‚asthatofthelowervector#ofthepair.‚Forexample,0565™*‰VECTOR$23,0ŽPoints$23to$27toCOMINT.2566™*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.2567™*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.L568™*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theO569™*‚addressassignedtothevectorwillbeincrementedby2foreachvector:<570™*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.)571™*‰VECTOR$26,0ŽPoints$26toCOMINT.,572™*‚Theendofthelistissignifiedbya 573™*‰DC.Lƒ0K574™*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeP575™*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterP576™*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented(577™*‚by2foreachvectorinsequence.578™*579™VECTORƒMACRO580¢IFLE…\1-VECT_NUM4581¢FAIL…499ŒVector#'smustbeinascendingorder! 582¢MEXIT 583¢ENDC584¢IFNC…'\2','0'585¢IFNC…'\2','1' 586¢XREF…\2 587¢ENDC 588¢ENDC589™VECT_NUMSET†\1590¢DC.L…\1<<24+\2 591¢ENDM 592 593594™*%595™*‚Firstsetupthetableheader.596™*597Œ00000002ŽSECTION‚LEVEL00 598 599H60020000000021564354ŽDC.L…'!VCT'Dumpeyecatcherfor'VeCtorTable.'J60120000000400000000ŽDC.L…COMINTPuttheaddressofCOMINTheresothe'602™*§execinitializercanfindit;he(603™*§isn'tlinkedwiththeexec,sohe604™*§wouldn'tknowotherwise. XMotorolaM68000ASMVersion‚1.80SREL:9999.EXORMACS.XVECTTBL.AG03/01/8500:26:02žPAGEƒ3  606™*.607™*‚Herearetheactualvectorassignments.N608™*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverJ609™*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this)610™*‚parameterissubstitutedsuchthatF611™*„0=theexecshouldleavetheillegalinstructionvectoralone.D612™*„1=theexecshouldtakeovertheillegalinstructionvector.O613™*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifN614™*‚youwanttousetheROMdebugger,sinceitusesillegalinstructionsas615™*‚breakpoints.616™* 617F618Œ00000001…VECT_NUMSET†1•Initializethevectornumberto1sothat+619™*§thelowestvectornumberthatcanbe620™*§setafterwardsis2.<621™*‰VECTOR$00,CALLKILLŠSHOULDNEVERGETHEREthiswasinC622™*‰VECTOR$01,CALLKILLŠSHOULDNEVERGETHERE4.2exormacsvectt623™*.624200000008—VECTORƒ$02,PROGINT2ŠBuserror.262520000000C—VECTORƒ$03,PROGINT3ŠAddresserror.)626™*§Ifwe'renotsupposedtotakeover,627¢IFEQ…$1”theillegalinstructionvector, 629¢ENDC›*&630™*§Ifwearesupposedtotakeover,631¢IFNE…$1”theillegalinstructionvector,M632200000010—VECTORƒ$04,PROGINT4Štakeoverthe illegalinstructionvector. 633¢ENDC›*2634200000014—VECTORƒ$05,PROGINT5ŠDivisionby0.0635™*‚insequence„$06,PROGINT6ŠCHKinstruction.2636™*‚insequence„$07,PROGINT7ŠTRAPVinstruction.4637™*‚insequence„$08,PROGINT8ŠPrivilegeviolation.6638200000018—VECTORƒ$09,PROGINT9ŠInstructiontrace.G63920000001C—VECTORƒ$0A,PROGINTAŠReservedinstructionopcodes$AXXX.C640™*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.6641200000020—VECTORƒ$0C,0‘($0C-$0EgotoCOMINT.):642200000024—VECTORƒ$0F,KILLERŒUninitializedInterrupt.6643200000028—VECTORƒ$10,0‘($10-$17gotoCOMINT.)664420000002C—VECTORƒ$18,SPURINT‹Spuriousinterrupt.6645200000030—VECTORƒ$19,0‘($19-$1CgotoCOMINT.)6646200000034—VECTORƒ$1D,0‘($1D-$1FgotoCOMINT.))647200000038—VECTORƒ$20,TRAP0TRAP#0.)64820000003C—VECTORƒ$21,TRAP1TRAP#1.2649200000040—VECTORƒ$22,TRPVCT2‹TRAP#2to#15.6650200000044—VECTORƒ$30,0‘($30-$8BgotoCOMINT.)8651200000048—VECTORƒ$8C,TIMEINT‹M6840timeinterrupt.065220000004C—VECTORƒ$8D,0‘($8Dgotocomint.)G653200000050—VECTORƒ$8E,1‘Softwareabortvector(leaveitpointingto 654™*¦BUG)655200000054—VECTORƒ$8F,06656200000058—VECTORƒ$95,0‘($95-$FFgotoCOMINT.)965720000005C00000000ŽDC.L…0•(Endoftableindicator.)658¢END ******TOTALERRORS†0--******TOTALWARNINGS„0-- XMotorolaM68000ASMVersion‚1.80SREL:9999.EXORMACS.XVECTTBL.AG03/01/8500:26:02žPAGEƒ4  SYMBOL TABLE LISTING  -SYMBOLNAME…SECTƒVALUE‡SYMBOLNAME…SECTƒVALUE  %COMINT…XREFƒ*ƒ00000000…TCBSTK…MACRƒ*GET_TARGƒMACRƒ*TESTIM…MACRƒ*.KILLER…XREFƒ*ƒ00000000…TIMEINT„XREFƒ*ƒ00000000LEVEL0000000002…TR0ˆMACRƒ*LVLBASE00000002…TR0$‡MACRƒ*&PROGINT2ƒXREFƒ*ƒ00000000…TR02X†MACRƒ*.PROGINT3ƒXREFƒ*ƒ00000000…TRAP0†XREFƒ*ƒ00000000.PROGINT4ƒXREFƒ*ƒ00000000…TRAP1†XREFƒ*ƒ000000000PROGINT5ƒXREFƒ*ƒ00000000…TRPVCT2„XREFƒ*ƒ00000000'PROGINT9ƒXREFƒ*ƒ00000000…VECTOR…MACRƒ**PROGINTAƒXREFƒ*ƒ00000000…VECT_NUMŽ00000095SPURINT„XREFƒ*ƒ00000000 QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ1  Aƒ1™SYSPARƒIDNT…5,1“Systemparametersat$900;Crashsaveat$400.Rƒ2™*v*****************************************************************************Rƒ3™*******************************************************************************Rƒ4™******************************************************************************* ƒ5™***É***Aƒ6™***…ROUTINE:‚SYSPAR--SYSTEMPARAMETERSTABLEFORRMS68K.*** ƒ7™***É***Mƒ8™***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***+ƒ9™***‡Copyright1983byMotorola,Inc.¢*** ‚10™***É***L‚11™***…FUNCTION:‚ThistablegetsSUBSedandASMedduringanRMSGEN,andƒ***J‚12™***‡isthenlinkedinwithRMS68K.‚Thedatadefinedinthismoduleƒ***H‚13™***‡areprimarilythevariablesandparametersneededbyRMS68K.†*** ‚14™***É***S‚15™*******************************************************************************S‚16™*******************************************************************************S‚17™*^*****************************************************************************‚18‚19™*0‚20™*‚Revisionhistory(addnewchangestotop).‚21™*…Date†Author‚ChangesD‚22™*…--------‚------‚----------------------------------------------,‚23™*…12/7/84‚SJF…AddedLAST_MMU_INT_LEVEL.#‚24™*…10/4/83‚SJF…Formatrevision.‚25™*‚26‚27‚28™*‚29™*‚Includedfiles:‚30™*‚31™*‰9995.&.TIOT.EQ‚32™* QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ2  ‚69¢XDEF…ACOTBL‚70¢XDEF…ADEFTYP‚71¢XDEF…ASNTBL‚72¢XDEF…BKG_ACTIVE‚73¢XDEF…BKG_FLAG‚74¢XDEF…BKG_HEAD‚75¢XDEF…BKG_TAIL‚76¢XDEF…CCBHD‚77¢XDEF…CRASHSAV‚78¢XDEF…CTRLREG‚79¢XDEF…CURR_ASN‚80¢XDEF…CURR451‚81¢XDEF…CURRSD‚82¢XDEF…DACTBL ‚83¢XDEF…DATE‚84¢XDEF…DBUFSZ‚85¢XDEF…DCOTBL‚86¢XDEF…DPRVAO‚87¢XDEF…ENDSYSP‚88¢XDEF…EXCSTACK‚89¢ XDEF…FQBCNT‚90¢XDEF…FQLWM‚91¢XDEF…FREEQHD‚92¢XDEF…FREEQND‚93¢XDEF…FRST451‚94¢XDEF…GSTBEG‚95¢XDEF…INPTBL‚96¢XDEF…IOVCTBGN ‚97¢XDEF…LAM‚98¢XDEF…LAST451‚99¢XDEF…LAST_MMU_INT_LEVEL100¢XDEF…LCTBEG101¢XDEF…MACSTRC102¢XDEF…MAPBEG103¢XDEF…MEMOFF104¢XDEF…MIDNIGHT105¢XDEF…MMUHERE106¢XDEF…MMULOAD107¢XDEF…NATBEG108¢XDEF…NNTBEG109¢XDEF…NOTLAM 110¢XDEF…NSE111¢XDEF…NWDQHD112¢XDEF…NWPSEG113¢XDEF…NWSTATUS114¢XDEF…NWTSEG115¢XDEF…PANEL116¢XDEF…PATBEG117¢XDEF…PERTURB_FLAG118¢XDEF…PREEMPT_FLAG119¢XDEF…PTMADDR120¢XDEF…RAD1TBL121¢XDEF…READYHD122¢XDEF…RIOTBL123¢XDEF…RUNNER124¢XDEF…SDEFTYP125¢XDEF…SDLCPCB126¢XDEF…SEMCCB QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ3  127¢XDEF…SEMEND128¢XDEF…SEMGST129¢XDEF…SEMLIST130¢XDEF…SEMTCB131¢XDEF…SEMTIOT132¢XDEF…SEMUST133¢XDEF…SLFTSTA7134¢XDEF…SPURCNT135¢XDEF…SPURTIME136¢XDEF…SYSPAR137¢XDEF…SYSPOFF138¢XDEF…TCBHD139¢XDEF…TDEFTYP140¢XDEF…TIAT141¢XDEF…TIME_LEFT142¢XDEF…TIMEOUT143¢XDEF…TIMESLIC144¢XDEF…TIMINTV145¢XDEF…TIMINTV4146¢XDEF…TIMINTR147¢XDEF…TINTFLAG148¢XDEF…TIOT149¢XDEF…TRACEBEG150¢XDEF…TRACFLAG151¢XDEF…UDEFTYP152¢XDEF…UDRBEG153¢XDEF…USERQHD154¢XDEF…USERQND155¢XDEF…USTBEG156¢XDEF…V2RQHD157¢XDEF…VCTUBGN QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ4  159™*J160™*‚Firstdefinethelocationofthe'crashsavearea,'theplacewhereI161™*‚theKILLERmodulewillsavetheprocessor'sregisters,etc.inthe162™*‚eventofasystemcrash.163™*164Œ00000400…CRASHSAVEQU†$400 165 166167™*J168™*‚Nowdefinethestructureofthe'systemparametersarea'toalltheI169™*‚variousRMS68Kmodules.‚NotethatwearenotactuallydefininganyJ170™*‚storagehere--thisisjustabigoffsetblockwhichwilldefinetheG171™*‚locationsoftheparameters.‚Initializationoftheparametersis6172™*‚handledbytheRMS68Kinitializeratboottime.173™*174¢OFFSETƒ$900175Œ00000900…SYSPARƒEQU†* 1769177ƒ0000090000000004…MAPBEGƒDS.L…1•POINTSTOMEMORYMAP 178*179ƒ0000090400000002…PERTURB_FLAGDS.W1'180Œ00000904…BKG_FLAGEQU†PERTURB_FLAG-181Œ00000905…PREEMPT_FLAGEQU‚PERTURB_FLAG+1 182183ƒ0000090600000002ŽDS.W…1 184<185ƒ0000090800000004…EXCSTACKDS.L…1•ADDRESSOFEXECSTACK 186;187ƒ0000090C00000004…RUNNERƒDS.L…1•ADDRESSOFRUNNINGTCB 188G189ƒ0000091000000004…TCBHD„DS.L…1•POINTSTOFIRSTTCBINALL-TCBLIST 190G191ƒ0000091400000004…READYHD‚DS.L…1•POINTSTOFIRSTTCBINREADYLIST 192I193ƒ0000091800000004…CCBHD„DS.L…1•POINTSTOFIRSTCHANNELCONTROLBLOCK 194Q195ƒ0000091C00000004…MMUHERE‚DS.L…1•HOLDSADDRESSOFMMUHARDWAREINMEMORYMAP 196B197ƒ0000092000000004…GSTBEGƒDS.L…1•STARTOFGLOBALSEGMENTTABLE 198B199ƒ0000092400000004…USTBEGƒDS.L…1•STARTOFUSERSEMAPHORETABLE 200L201ƒ0000092800000004…UDRBEGƒDS.L…1•PointertoUserDefinedDirectiveTable 202G203ƒ0000092C00000004…PATBEGƒDS.L…1•STARTOFPERIODICACTIVATIONTABLE 204B205ƒ0000093000000004…TRACEBEGDS.L…1•STARTOFSYSTEMTRACETABLE 2069207ƒ0000093400000002…TRACFLAGDS.W…1•SYSTEMTRACEFLAGS 208C209ƒ0000093600000004…MACSTRC‚DS.L…1•MACSBUGTRACEROUTINEADDRESS 2107211ƒ0000093A00000004…PANEL„DS.L…1•FRONTPANELADDRESS212™*213™*„TIMERPARAMETERS214™*215™* 216 QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ5  /217ƒ0000093E00000004…DATE…DS.L…1•ORDINALDATE 218O219ƒ0000094200000004…PTMADDR‚DS.L…1•ADDRESSUSEDTOACCESSPROGRAMMABLETIMER 220=221ƒ0000094600000002…TIMEOUT‚DS.W…1•TIMERINTERRUPTCOUNTER 222Y223ƒ0000094800000002…TIMESLICDS.W…1•NUMBEROFTIMERINTERRUPTSBEFORETASKINTERRUPTED 224D225ƒ0000094A00000004…NSE†DS.L…1•msvalueofnextsignificantevent 226M227 ƒ0000094E00000004…TIME_LEFTDS.L„1•msvalueuntilnextsignificantevent 228D229ƒ0000095200000004…MIDNIGHTDS.L…1•msvalueofpreviousmidnight 230J231ƒ0000095600000002…TIMINTV‚DS.W…1•#MILLISECSBETWEENTIMERINTERRUPTS 2322233ƒ0000095800000002…TIMINTV4DS.W…1•TIMINTV*4-1 234N235ƒ0000095A00000002…TIMINTR‚DS.W…1•Holdsusecremainderforoddclockrates 236;237ƒ0000095C00000001…TINTFLAGDS.B…1•TIMERINTERRUPTFLAG 238N239ƒ0000095D00000001…TMSGFLAGDS.B…1•FLAG-MESSAGESENTDURINGI/OHANDLING 240B241ƒ0000095E00000002…SPURCNT‚DS.W…1•COUNTOFSPURIOUSINTERRUPTS 242P243ƒ0000096000000004…SPURTIMEDS.L…1•TIMETHAT1STSPURIOUSINTERRUPTOCCURRED 244B245ƒ0000096400000004…MMULOAD‚DS.L…1•MMULOADEDFROMTHISADDRESS 246?247ƒ0000096800000004…VCTUBGN‚DS.L…1•STARTOFVECTORUSETABLE 248G249ƒ0000096C00000004…IOVCTBGNDS.L…1•STARTOFVECTORASSIGNMENTTABLE 250C251ƒ0000097000000001…ADEFTYP‚DS.B…1•DEFAULTMEMORYTYPEFORASQ'S 252C253ƒ0000097100000001…TDEFTYP‚DS.B…1•DEFAULTMEMORYTYPEFORTCB'S 254U255ƒ0000097200000002…SDEFTYP‚DS.B…2•DEFAULTMEMORYTYPEFORSYSTEMTASKS(ROANDRW) 256S257ƒ0000097400000002…UDEFTYP‚DS.B…2•DEFAULTMEMORYTYPEFORUSERTASKS(ROANDRW) 258;259ƒ0000097600000004…SLFTSTA7DS.L…1•SAVEA7FORSELFTEST260™*261™*ŒEXECSEMAPHORES262™*1263Œ0000097A…SEMLIST‚EQU†*•SEMAPHORESBEGINHERE 2641265ƒ0000097A00000006…SEMTCBƒDS.W…3•ALLTCBLIST 2669267ƒ0000098000000006…SEMGSTƒDS.W…3•GLOBALSEGMENTTABLE 2689269ƒ0000098600000006…SEMUSTƒDS.W…3•USERSEMAPHORETABLE 2702271ƒ0000098C00000006…SEMCCBƒDS.W…3•CCBSEMAPHORE 272A273ƒ0000099200000006…SEMTIOT‚DS.W…3•TRAPINSTRALLOCATIONTABLE 274 QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ6  6275Œ00000998…SEMENDƒEQU†*•PREVIOUSWASLASTSEMAPHORE276™*0277™*…TIAT--TRAPINSTRUCTIONALLOCATIONTABLE+278™*…TIOT--TRAPINSTRUCTIONOWNERTABLE279™*#280ƒ0000099800000010…TIAT…DS.B…16 281282Œ000009A8…TIOT…EQU†*%283ƒ000009A800000160ŽDS.B…16*TIOTEL284™*-285™*‚Parametersrelatingtothebackground.286™*.287™*£Pointertothefirstentry(BAB)intheQ288ƒ00000B0800000004…BKG_HEADDS.L…1•backgroundqueue;0ifthequeueisempty. 289-290™*£Pointertothelastentry(BAB)intheR291ƒ00000B0C00000004…BKG_TAILDS.L…1•backgroundqueue;pointstoBKG_HEADifthe292™*§queueisempty. 293+294™*£Thisflagistrue(nonzero)whenthe?295ƒ00000B1000000001…BKG_ACTIVEDS.Bƒ1•backgroundisrunning. 296297™*298™*>299ƒ00000B1100000001…CURR_ASNDS.B…1•Onlyupperbyteisused300™*1301™*ˆPOINTERSUSEDBYSDLCANDNETWORKSERVICES302™*<303ƒ00000B1200000004…FREEQHD‚DS.L…1•FreeBufferQueueHead 304@305ƒ00000B1600000002…DBUFSZƒDS.W…1•Sizeofdataareainbuffer 306=307ƒ00000B1800000002…FQLWM„DS.W…1•FreeQueueLowWaterMark 308D309ƒ00000B1A00000002…FQBCNTƒDS.W…1•FreeQueueCurrentBufferCount 310<311ƒ00000B1C00000004…USERQHD‚DS.L…1•UserBufferQueueHead 312;313ƒ00000B2000000004…USERQND‚DS.L…1•UserBufferQueueEnd 314F315ƒ00000B2400000004…SDLCPCB‚DS.L…1•PointertoPrimaryControlBlock 316B317ƒ00000B2800000004…NNTBEGƒDS.L…1•PointertoNetworkNameTable 318E319ƒ00000B2C00000004…NATBEGƒDS.L…1•PointertoNetworkAddressTable 320E321ƒ00000B3000000004…LCTBEGƒDS.L…1•PointertoLogicalConnectTable 322H323ƒ00000B3400000004…NWPSEGƒDS.L…1•LimitsofNetworkProcedureSegment 324D325ƒ00000B3800000004…NWTSEGƒDS.L…1•LimitsofNetworkTableSegment 326L327ƒ00000B3C00000004…NWDQHDƒDS.L…1•Disconnect(taskterminated)QueueHead 328A329ƒ00000B4000000004…NWSTATUSDS.L…1•NetworkStatus(-1=dead) 330G331ƒ00000B4400000004…V2RQHDƒDS.L…1•RequestsforactionbyVM02system 332 QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ7  =333ƒ00000B48000000 04…MEMOFFƒDS.L…1•VM02Boardmemoryoffset 334=335ƒ00000B4C00000004…SYSPOFF‚DS.L…1•VM02SYSPARareaoffset336™*(337™*ˆPointersusedbyIODrivers,etc.338™*F339ƒ00000B5000000004…CTRLREG‚DS.L…1•PointertoVM02ControlRegister 340L341ƒ00000B5400000004…DPRVAOƒDS.L…1•Dual-portedRAMVERSAdosaddressoffset 342J343ƒ00000B5800000004…RAD1TBL‚DS.L…1•PointertotableusedbyRAD1driver 344@345ƒ00000B5C00000004…RIOTBLƒDS.L…1•PointertoRIOdrivertable 346@347ƒ00000B6000000004…DCOTBLƒDS.L…1•PointertoDCOdrivertable 348@349ƒ00000B6400000004…ACOTBLƒDS.L…1•PointertoACOdrivertable 350M351ƒ00000B6800000004…INPTBLƒDS.L…1•AddressofinterruptQueueControlTable"352™*™fortheVME610/620driver. 353A354ƒ00000B6C00000004…DACTBLƒDS.L…1•MVME605drivertableaddress355™*356™*‰SDLC/NTSFreeQueueEnd357™*B358ƒ00000B7000000004…FREEQND‚DS.L…1•Pointertoendoffreequeue359™*,360™*‰Parametersrelatingtoaddressspaces361™*S362ƒ00000B7400000004…ASNTBLƒDS.L…1•Pointertotableoftaskaddressspacenumbers 363H364ƒ00000B7800000004…NOTLAMƒDS.L…1•(Pagesize-1)forsegmentallocation 365D366ƒ00000B7C00000004…LAM†DS.L…1•(68451logicaladdressmask)*256 367<368ƒ00000B8000000004…FRST451‚DS.L…1•Addressoffirst68451 369;370ƒ00000B8400000004…LAST451‚DS.L…1•Addressoflast68451 371Q372ƒ00000B8800000004…CURR451‚DS.L…1•Addressof68451tonextcheckforswapping 373P374ƒ00000B8C00000004…CURRSDƒDS.L…1•SegmentdescriptorinCURR451tonextcheck375™*376™*%377™*‚Parametersforflushingcache.378™*379¢XDEF…CFLUSHM380ƒ00000B9000000004…CFLUSHƒDS.L…1•Addressforflushingcache(VME120/128).381™*Ÿif((CFLUSH)=F_BANK1) 382™*Ÿthen(flushbank1only);#383™*Ÿelseif((CFLUSH)=F_BANK2) 384™*Ÿthen(flushbank2only);!385™*Ÿelseif((CFLUSH)=F_ALL)"386™*Ÿthen(flushbanks1and2); 387Y388ƒ00000B9400000002…LAST_MMU_INT_LEVELDS.W1Onsystemsusingthe68451MMU,westore+389™*§heretheinterruptlevelofthelast+390™*§buserrorwhichresultedintheload QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ8  ,391™*§ofasegmentdescriptor.‚SeeLOADMMU. 392393™*394™*395™*396Œ00000B96…ENDSYSP‚EQU†*397¢END ******TOTALERRORS†0--******TOTALWARNINGS„0-- QMotorolaM68000ASMVersion‚1.80SREL:9999.ˆ.XSYSPAR.AG03/01/8500:25:30ªPAGEƒ9  SYMBOL TABLE LISTING  -SYMBOLNAME…SECTƒVALUE‡SYMBOLNAME…SECTƒVALUE  +ACOTBL…XDEF‡00000B64…PREEMPT_ƒXDEF‡00000905+ADEFTYP„XDEF‡00000970…PTMADDR„XDEF‡00000942*ASNTBL…XDEF‡00000B74…RAD1TBL„XDEF‡00000B58,BKG_ACTIƒXDEF‡00000B10…READYHD„XDEF‡00000914+BKG_FLAGƒXDEF‡00000904…RIOTBL…XDEF‡00000B5C+BKG_HEADƒXDEF‡00000B08…RUNNER…XDEF‡0000090C,BKG_TAILƒXDEF‡00000B0C…SDEFTYP„XDEF‡00000972)CCBHD†XDEF‡00000918…SDLCPCB„XDEF‡00000B24)CFLUSH…XDEF‡00000B90…SEMCCB…XDEF‡0000098C+CRASHSAVƒXDEF‡00000400…SEMEND…XDEF‡00000998*CTRLREG„XDEF‡00000B50…SEMGST…XDEF‡00000980+CURR451„XDEF‡00000B88…SEMLIST„XDEF‡0000097A)CURRSD…XDEF‡00000B8C…SEMTCB…XDEF‡0000097A,CURR_ASNƒXDEF‡00000B11…SEMTIOT„XDEF‡00000992)DACTBL…XDEF‡00000B6C…SEMUST…XDEF‡00000986)DATE‡XDEF‡0000093E…SLFTSTA7ƒXDEF‡00000976*DBUFSZ…XDEF‡00000B16…SPURCNT„XDEF‡0000095E+DCOTBL…XDEF‡00000B60…SPURTIMEƒXDEF‡00000960)DPRVAO…XDEF‡00000B54…SYSPAR…XDEF‡00000900+ENDSYSP„XDEF‡00000B96…SYSPOFF„XDEF‡00000B4C*EXCSTACKƒXDEF‡00000908…TCBHD†XDEF‡00000910*FQBCNT…XDEF‡00000B1A…TDEFTYP„XDEF‡00000971&FQLWM†XDEF‡00000B18…TIAT‡XDEF‡00000998+FREEQHD„XDEF‡00000B12…TIMEOUT„XDEF‡00000946,FREEQND„XDEF‡00000B70…TIMESLICƒXDEF‡00000948,FRST451„XDEF‡00000B80…TIME_LEFƒXDEF‡0000094E*GSTBEG…XDEF‡00000920…TIMINTR„XDEF‡0000095A*INPTBL…XDEF‡00000B68…TIMINTV„XDEF‡00000956-IOVCTBGNƒXDEF‡0000096C…TIMINTV4ƒXDEF‡00000958(LAMˆXDEF‡00000B7C…TINTFLAGƒXDEF‡0000095C(LAST451„XDEF‡00000B84…TIOT‡XDEF‡000009A8(LAST_MMUƒXDEF‡00000B94…T IOTADDRŽ0000000E$LCTBEG…XDEF‡00000B30…TIOTEL00000016'MACSTRC„XDEF‡00000936…TIOTMCNTŽ00000012&MAPBEG…XDEF‡00000900…TIOTPBSZŽ00000015%MEMOFF…XDEF‡00000B48…TIOTSEM00000008(MIDNIGHTƒXDEF‡00000952…TIOTSESSŽ00000004'MMUHERE„XDEF‡0000091C…TIOTSTATŽ00000014&MMULOAD„XDEF‡00000964…TIOTTCB00000000&NATBEG…XDEF‡00000B2C…TMSGFLAGŽ0000095D+NNTBEG…XDEF‡00000B28…TRACEBEGƒXDEF‡00000930+NOTLAM…XDEF‡00000B78…TRACFLAGƒXDEF‡00000934'NSEˆXDEF‡0000094A…UDEFTYP„XDEF‡00000974)NWDQHD…XDEF‡00000B3C…UDRBEG…XDEF‡00000928*NWPSEG…XDEF‡00000B34…USERQHD„XDEF‡00000B1C,NWSTATUSƒXDEF‡00000B40…USERQND„XDEF‡00000B20)NWTSEG…XDEF‡00000B38…USTBEG…XDEF‡00000924(PANEL†XDEF‡0000093A…V2RQHD…XDEF‡00000B44*PATBEG…XDEF‡0000092C…VCTUBGN„XDEF‡00000968PERTURB_ƒXDEF‡00000904 ééEº'M146818 M146818 EQËËqqRDTIMER AFÔÔqqRDTIMER SAÝÝ7qqSTDTIM AFææqqSTDTIM SAïï 4qqTIMEINT AFqqTIMEINT SA!!IqqTRACER AF**qqTRACER SA33CqqRDTIMER RO<<qqSTDTIM ROEEqqTIMEINT RONNqqTRACER ROWWqq ******************************** * Beginning M146818.M146818.EQ * ********************************O********************************************************************************'*‘OFFSETTODESCRIBEM146818TIMERCHIP*O*******************************************************************************  ‰OFFSET0SECS…DS.B†2„SECONDSSECSALRMDS.B†2„SECONDSALARMMINS…DS.B†2„MINUTESMINSALRMDS.B†2„MINULTESALARMHRS†DS.B†2„HOURSHRSALRM‚DS.B†2„HOURSALARMDAYOWKƒDS.B†2„DAYOFWEEKDAYOMTH‚DS.B†2„DAYOFMONTHMONTH„DS.B†2„MONTHYEAR…DS.B†2„YEARREGA…DS.B†2„CONTROLREGISTERAREGB…DS.B†2„CONTROLREGISTERBREGC…DS.B†2„CONTROLREGISTERCREGD…DS.B†2„CONTROLREGISTERD****************************** Ending M146818.M146818.EQ ******************************é éééÃ=/*=/*†M146818.RDTIMER.AF=/*@=/* Chain file to assemble file for M146818 Real Time Clock chip=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M146818.RDTIMER.LS=/*=/IFC \1ƒ=ARGM146818.RDTIMER.LS=/ENDIF=/*4=ASM M146818.RDTIMER.SA,M146818.RDTIMER.RO,\1;RZ=040=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDééééééÌŠPAGE**ˆINCLUDEFILES**‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.INTERRUP.MCŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE@RDTIMERƒIDNTƒ5,0ŒREADTIMERroutineforM146818realtimeclock.*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆ*********************ˆ*RDTIMER‚1.00„**ˆ*’**ˆ*HLD6ƒ09/30/80‚**ˆ*SFF5ƒ01/18/83‚**ˆ*********************,*…READTIMER-RETURNTIMERVALUE(MS)IND1*™TIMERVALUE(US)IND0*ŠSECTIONLEVEL00* ŠXDEFƒRDTIMER ŠXDEFƒSBRDTIM  **ˆSYSPARparameters* ŠXREF.SNSEŠXREF.SMIDNIGHTŠXREF.STIME_LEFTŠXREF.STIMINTV4ŠXREF.STINTFLAGŠPAGESBRDTIM:RDTIMER:'ŠMOVE.WSR,-(A7)‹Valuetouseinunmask/ŠMOVE.L#1000,D0‹1000-TIMINT V4=microsecondsŠDISABLE_INTERRUPTS %ŠMOVE.LNSE,D1NextsignificanteventŠSUB.L‚TIME_LEFT,D10ŠSUB.L‚MIDNIGHT,D1ˆD1=currentmspastmidnight#ŠBCLRƒ#31,D1InsurepositivenumberŠSUB.W‚TIMINTV4,D0ˆMICROSECONDS ŠMOVE.W(A7)+,SRŠRTSŠENDéééÕ8=/*=/*†M146818.STDTIM.AF=/*,=/* Chain file to assemble M146818.STDTIM.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M146818.STDTIM.LS=/*=/IFC \1ƒ=ARGM146818.STDTIM.LS=/ENDIF=/*2=ASM M146818.STDTIM.SA,M146818.STDTIM.RO,\1;RZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9999.M146818.M146818.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDééééééÞŠPAGE**‰INCLUDEFILES**‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.TR1RTCD.EQ*‰INCLUDE9995.&.TCB.EQ*‰INCLUDE9995.&.BAB.EQ*‰INCLUDE9995.&.PAT.EQ!*‰INCLUDE9999.M146818.M146818.EQ*‰INCLUDE9995.&.INTERRUP.MC*ŠNOLISTŠINCLU DE9995.&.STR.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQ ŠINCLUDE9999.M146818.M146818.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE:STDTIM„IDNTƒ5,0SETDATE&TIMEFORTHEM146818CLOCKCHIP*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**‡****************************#*‡*‚STDTIM*ƒSETDATEANDTIME*‡*‚REV1.00‚HLD611/12/79**‡*‚REV3.00‚HLD611/06/81**‡*****************************;*†THISROUTINESETSDATEANDTIMETOVALUESGIVENBYCALLER***‹ENTRY:A6HASADDROFTCB *’A4HASPARAMETERBLOCKADDRESS *”0(A4)-ORDINALDATE(4BYTES)*”4(A4)-TIME(MILLISECONDS)**‹EXIT:D0HASRETURNCODE*’D0=0…GOODRETURN*<*ˆTHEFOLLOWINGRETURNCODESARERETURNEDINLOWER1/2OFD0*6*ŠRTCDPBLK-2ƒPARAMBLKADDRNOTINUSER'SADDRSPACE1*ŠRTCDALOW-9ƒUSERTASKCANNOTSETDATEANDTIME**ŠSECTIONLEVEL04* ŠXDEFƒSTDTIM0ŠXDEFƒSCHED_DATEUP‡ReferencedfromM68XXX.RMS.SA ŠXREFƒKILLER ŠXREFƒSBRQPA ŠXREF.SDATEŠXREF.SMIDNIGHT ŠXREF.SNSEŠXREF.SPTMADDRŠXREF.STIME_LEFT ŠPAGE:STDTIM„BTSTƒ#TSKASYST,TCBATTR(A6)Iscallerasystemtask?ŠIFTHEN.S,EXITƒRTCDALOW‹Error-callernotasystaskŠENDI 4ŠMOVE.WSR,-(A7)‹Saveforunmaskinginterruptslater  *.*ˆCanceltheDATEperiodicactivationroutine.* !ŠMOVE.W#1<<15,D1ŠIndicatecancel1ŠMOVE.L#PATDATEID,D2†IDofnodeIwishtocancelŠBSR„SBRQPACancelitŠNOP—ProvideforPC+2return =ŠMOVEM.L(A4)+,D3-D4‡D3=ordinaldate,D4=mspastmidnight8ŠMOVE.L#24*60*60*1000,D7‚24hoursworthofmilliseconds "ŠWHILE.LD4D7DO.Sƒ=0SUB.L‚D7,D4‹Biassomspastmidnight<24hours$ADD.L‚#1,D3‹BumpdateforeachbiasŠENDWçXðDøDR  * * Formulas:!*ƒABSOLUTE_TIME=NSE-TIME_LEFT(*ƒTIME_OF_DAYƒ=ABSOLUTE_TIME-MIDNIGHTE*ƒMidnightcorrection(DELTA)=CURRENT_TIME_OF_DAY-NEW_TIME_OF_DAYC*…addingDELTAtoMIDNIGHTwillmakeourNEW_ABSOLUTE_TIMEcorrect. 7* Compute DELTA = CURRENT_TIME_OF_DAY - NEW_TIME_OF_DAY ŠDISABLE_INTERRUPTSˆMaskŠMOVE.LD3,DATEŒUpdateDATEŠMOVE.LNSE,D3.ŠSUB.L‚TIME_LEFT,D3‡D3=currentabsolutetime>ŠSUB.L‚MIDNIGHT,D3ˆD3=currenttimeofday(mspastmidnight) 4ŠSUB.L‚D4,D3ŽSubtractdesirednewtimeofdayto...*£...giveusDELTA9ŠADD.L‚D3,MIDNIGHTˆAdjustMIDNIGHTsoabstimeiscorrect)ŠBCLRƒ#31,MIDNIGHT‡Insurepositivenumber 7ŠBSR.S‚SCHED_DATEUP‡Nowgoscheduledatebumperroutine  *(* Load timer calander with new date/time* ŠMOVE.LDATE,D0ŒDateinD0...#ŠMOVE.LNSE,D1...mspastmidnightŠSUB.L‚TIME_LEFT,D1‡...in...ŠSUB.L‚MIDNIGHT,D1ˆ...D1...#ŠBCLRƒ#31,D1InsurepositivenumberŠMOVE.LD0,D4ŽSavedateinD4'ŠMOVE.LPTMADDR,A0‰Getaddressoftimer ŠMOVE.LD1,D0ŽPuttimeintoD0$ŠBSR.S‚TIMECONV‹MsecstoD0=00MM00HH;ŠMOVE.B#$82,REGB(A0)†Settimertoreceivebinarydate/time3ŠMOVEP.LD0,SECSALRM(A0)ƒMinutesandhourstotimer$ŠMOVE.BD1,SECS(A0)ˆSecondstotimer ŠMOVE.LD4,D0ŽPutdateintoD0/ŠBSR„DATEOGConvertordinaldatetoD0=YYYYMMDD,ŠMOVE.BD0,DAYOMTH(A0)…DayofmonthtotimerŠLSR.L‚#8,D0ŽD0=00YYYYMM#ŠMOVE.BD0,MONTH(A0)‡MonthtotimerŠLSR.L‚#8,D0ŽD0=0000YYYY6ŠDIVU.W#100,D0ŒD0=00rr00qq‚rr=lasttwodigitsofyear/ŠSWAPƒD0‘D0=00qq00rr‚rr=lasttwodigitsofyear!ŠMOVE.BD0,YEAR(A0)ˆYeartotimer 0ŠMOVE.B#$46,REGB(A0)†Taketimeroutofsetmode .ŠMOVE.W(A7)+,SR‹UnmaskandloseSRfromstack ŠEXITƒSUBexit(subroutine);  <* Now reschedule the date update routine to fire at midnight%*ƒDelaytimefromnowtomidnightis:**‰(MIDNIGHT+24hrsofms)-ABSOLUTE_TIME SCHED_DATEUP:ŠMOVE.LMIDNIGHT,D1 ŠSUB.L‚NSE,D12ŠADD.L‚TIME_LEFT,D1‡Timedelayfornextactivation ;ŠADD.L‚#24*60*60*1000,D1‚Add24hoursworthofmilliseconds#ŠBCLRƒ#31,D1Insurepositivenumber ŠMOVE.LD1,A1.ŠCLR.LƒD1Options=new,one-shot,intlevel0ŠMOVE.L#PATDATEID,D2†ID%ŠLEA„DATEUP(PC),A0†Addressofroutine ŠBSR„SBRQPA ŠBRA.S‚*+61ŠBSR„KILLERCrashonillegalinstructioniferrorŠRTS J*Thisistheroutinethatgetsscheduledtoupdatethedate.‚Itrunsfrom2*ƒexecrequestperiodicactivationevery24hours.*DATEUP: 0ŠMOVE.WSR,-(A7)‹Savetounmaskinterruptslater#ŠDISABLE_INTERRUPTSˆMaskinterrupts'ŠADD.L‚#1,DATEŒUpdateDATEandMIDNIGHTŠADD.L‚#24*60*60*1000,MIDNIGHT)ŠBCLRƒ#31,MIDNIGHT‡InsurepositivenumberŠBSR„SCHED_DATEUP.ŠMOVE.W(A7)+,SR‹UnmaskandloseSRfromstack*ŠRTE—Returntobackgroundroutinethat...*£...scheduledme(TIMEINT)  H************************************************************************2*ˆ**SUBROUTINESTOSUPPORTDATE/TIMECONVERSIONSH************************************************************************H*************************************************************************Ç-*‹SUBROUTINETOCONVERTINTERNALMILLISECONDS**TOHOURS,MINUTES,ANDSECONDSINASCII**ˆCALL†BSR‡TIMECONV**ˆINPUT6*’D0=CONTAINSNUMBEROFMILLISECONDSTOBECONVERTED**ˆOUTPUT***’BINARYTIMERETURNEDINFOLLOWINGFORMAT*#*’D0=00MM00HH‹MM=MINUTESŠHH=HOURS*’D1=----00SS‹SS=SECONDS**œ01234567*ˆREGISTERS‰D** *ˆALTERED‹A*ÇH************************************************************************TIMECONV‚EQU„*/ŠDIVUƒ#60000,D0ŠCONVERTMILLISECONDSTOMINUTESŠMOVE.LD0,D1ŽCHANGEREGISTERS&ŠCLR.L‚D0‘INITIALIZEHIORDERDIVIDENDŠMOVE.WD1,D0ŽFETCHMINUTESŠDIVUƒ#60,D0GETMINUTES,HOURSŠCLR.W‚D1‘CLEARFUTUREHIORDERŠSWAPƒD1‘GETMILLISECONDS!ŠDIVUƒ#1000,D1‹CONVERTTOSECONDSŠRTSŠPAGEH************************************************************************'*ˆDATECONVERSIONSFROMBINARYTOASCII*Ç*6*ˆORDINALDATE-->DAYNUMBERWHEREDAY1=JAN11980***ˆCALL *’BSR‡DATEOG*¦BINARYORDINALƒ-DAYNUMBER*§TO*¦BINARYGREGORIAN-YYYYMMDD**ˆINPUT(*’D0=DATETOBECONVERTED‚-DAYNUMBER**ˆOUTPUT!*’D0=CONVERTEDDATED‡-YYYYMMDD*5*ˆREGISTERALTERNATION=NONEOTHERTHANINPUT/OUTPUT*ÇO*********************************************************************************ˆNON-LEAPDAYSBEFORETABLE¥*ÇTHEN.SADD.L‚#1,D1‹Addtheextrams"ADD.W‚#1000,D0ˆandResetuscountŠENDI !ŠADD.W‚D0,TIMINTV4ˆResetuscount.ŠSUB.L‚D1,TIME_LEFT‡Doweneedtofireanode?ŠMOVE.W(A7)+,SR‹Unmask+ŠTST.L‚TIME_LEFTŠDoweneedtofireanode?+*‰INCLUDEM68XXX.TIMEINT.AIYes-sodoit.ŠINCLUDEM68XXX.TIMEINT.AIŠENDéJ=/*=/*†M146818.TRACER.AF=/*,=/* Chain file to assemble M146818.TRACER.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M146818.TRACER.LS=/*=/*=/IFC \1ƒ=ARGM146818.TRACER.LS=/ENDIF=/*2=ASM M146818.TRACER.SA,M146818.TRACER.RO,\1;RZ=040=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TRACE.EQ=/*}=/*=ENDéééé éé"‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TRACE.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TRACE.EQ‰LIST‰PAGEHTRACERƒIDNT5,0…TRACEEXECACTIVITYroutineforM146818realtimeclock.*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆTRACERƒREV1.0ƒ7-19-79„(C313)+*ˆSAVESTRACECODE-SR-PC-A0-A6-D0$*ˆALLREGISTERSARERESTOREDONEXIT*ˆCALL:‚JSR‚TRACER*DC.WX*ˆXISTRACECODEOFCALLER*ˆSECTIONLEVEL01*'ˆXDEF‚TRACER„ENTRY--TRACEEXECACTIVITY ˆXREF.S‚TRACEBEG*0TRACERSPEQU‚20‡OFFSETTOORIGINALSTACKPOINTER*/TRACER‚MOVEM.LD0-D1/A3-A5,-(A7)ƒSAVEREGISTERS%ˆMOVE.W‚SR,-(A7)†SAVESTATUSREGISTER*ˆMOVE.L‚TRACEBEG,A3ƒADDRESSOFTRACETABLE"ˆORI.Wƒ#$700,SR‡INHIBITINTERRUPTS5ˆMOVE.L‚TRCPTR(A3),A5ˆGETCURRENTTABLEENTRYPOINTER(ˆCMP.LƒTRCLNG(A3),A5ƒSEEIFBEYONDTABLE.ˆBNE.S„TRACER1‡TABLEFILLED-STARTATTOPAGAIN+ˆLEA†TRCENTRS(A3),A5„ADDRESSOFFIRSTENTRY.TRACER1LEA†TRCENTSZ(A5),A4‡NEXTENTRYPOINTERˆMOVE.LƒA4,TRCPTR(A3)†SAVEIT(ˆMOVE.Wƒ(A7)+,SRŒRESTOREINTERRUPTLEVEL**‰FILLINONEENTRY*&ˆMOVE.L‚D0,TRCD0(A5)„USERSD0TOTABLE&ˆMOVE.L‚A0,TRCA0(A5)„USERSA0TOTABLE ˆMOVE.L‚A6,TRCA6(A5)„A6TOTABLE9ˆMOVE.L‚TRACERSP(A7),A4ƒGETRETURNADDRESS-HASTRACECODE,ˆMOVE.W‚(A4),TRCCODE(A5)‚TRACECODETOTABLE,ˆADD.Lƒ#2,TRACERSP(A7)ƒUPDATERETURNADDRESS,ˆMOVE.W‚TRACERSP+4(A7),TRCSR(A5)…SRTOTABLE,ˆMOVE.L‚TRACERSP+6(A7),TRCPC(A5)ƒPCTOTABLE3ˆCMP.W‚#$EFFF,TRCCODE(A5)ƒISTHISANI/OINTENTRY?ˆBHI.S‚TRACER4ŽBRANCHIFNO8ˆMOVE.LTRACERSP+12(A7),TRCA0(A5)ƒREPLACEA0WITH2NDPC* *‡SAVETIME*TRACER4 TR0.RDTIM'ˆMOVE.L‚D1,TRCTIME(A5)‡SAVETIMEOFDAY*ˆMOVE.W‚D0,TRCTIM2(A5)…SAVEINTRACEENTRY**‡RETURN*,ˆMOVEM.L‚(A7)+,D0-D1/A3-A5…RESTOREREGISTERS ˆRTSœRETURNˆEND+D[1RDTIMER ASREL'M146818 RDTIMER SA!C(…READ TIMER routine for M146818 real time clock.[2pNSE BRDTIMER pTIME_LEF pTIMINTV4 BSBRDTIM pMIDNIGHT pTINTFLAG "$*3Q@ç <è|"8 ’¸ ’¸ x FßNu4ééé éééé4V1STDTIM ASREL'M146818 STDTIM SA!C&(…SET DATE & TIME FOR THE M146818 CLOCK CHIP‡2pPTMADDR pNSE pDATE pEXIT_SUB pTIME_LEF pKILLER FSTDTIM pSBRQPA pERROR_09 pMIDNIGHT FSCHED_DA ¢&¼J3*.(f`Aö@ç2<€tÿaAêNqLÜ.<&\¾„b˜‡Rƒ`ö|!à &8 –¸ –¸F3’U –„׸ ¸ aR 8 "8 ’¸ ’¸ ( x  a~|‚È aºI3ª@àˆ@àˆ€üdH@@|FFß`Bÿ`"8 ’¸ Ò¸ &\"ABtÿAúL3$ aBÿ<`aBÿ6Nu@ç|R¸ ¸&\ ¸ aºFßNs€üê`"B€0€ü=ASM M68000.M68000.SA/M68XXX.EXIT.SA,M68000.EXIT.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.UTILITY.MC=/*}=/*=ENDéééééw ‰LLEN120* *ˆTypeof68000-familyprocessor*$CHIPTYPE‚EQU68000‚Typeofprocessorééééééé €=/*=/*†M68000.PVSEM.AF=/*6=/* Chain file to assemble M68XXX.PVSEM.SA for a 68000=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68000.PVSEM.LS=/*=/IFC \1ƒ=ARGM68000.PVSEM.LS=/ENDIF=/*@=ASM M68000.M68000.SA/M68XXX.PVSEM.SA,M68000.PVSEM.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*}=/*=ENDéééééé‰=/*=/*†M68000.SINT.AF=/*5=/* Chain file to assemble M68XXX.SINT.SA for a 68000=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68000.SINT.LS=/*=/IFC \1ƒ=ARGM68000.SINT.LS=/ENDIF=/*>=ASM M68000.M68000.SA/M68XXX.SINT.SA,M68000.SINT.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.IOV.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDéééé éé’=/*=/*†M68000.SUPER.AF=/*6=/* Chain file to assemble M68XXX.SUPER.SA for a 68000=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68000.SUPER.LS=/*=/IFC \1ƒ=ARGM68000.SUPER.LS=/ENDIF=/*@=ASM M68000.M68000.SA/M68XXX.SUPER.SA,M68000.SUPER.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.PANEL.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDéééééé›=/*=/*†M68000.TRAP0.AF=/*6=/* Chain file to assemble M68XXX.TRAP0.SA for a 68000=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68000.TRAP0.LS=/*=/IFC \1ƒ=ARGM68000.TRAP0.LS=/ENDIF=/*?=ASM M68000.M68000.SA/M68XXX.TRAP0.SA,M68000.TRAP0.RO,\1;RZ=046=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*}=/*=ENDéé éééé¤=/*=/*†M68000.TRAP1.AF=/*6=/* Chain file to assemble M68XXX.TRAP1.SA for a 68000=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68000.TRAP1.LS=/*=/IFC \1ƒ=ARGM68000.TRAP1.LS=/ENDIF=/*?=ASM M68000.M68000.SA/M68XXX.TRAP1.SA,M68000.TRAP1.RO,\1;RZ=075=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDéééééé­K1COMINT ASREL'M68XXX COMINT SA!EH(…68000 common interrupt handler.ü2pLOADMMU pLOADMMUI pPTMADDR pMMULOAD pPREEMPT pPREEMPT_ BCOMINTZ pPERTURB_ pIOVCTBGN pVCTUBGN BCOMINT_P ,pSBWAKEUP pSBQEVNTI pTRACER pKILLER BCOMINT pRUNNER BISRERR BISRRTE ¨pBKG_FLAG pBKG_HEAD +2pTRACFLAG pBKG_DISP BCOMNISR f"JL3$  8 !gaAöî`*_aAì _N`Lßÿ\|Jx fNsj?_f aA"ÈJ8 fJ3"@Ns?_'fö/,x Hî?ÿL× NiHî8`Aœ@ç8 !gaA Žî HçÿþNi/ /9L3€ ( oF,hHV/(@À@ÿ?"h 0P*n6`BÿZ fÿr\,_( „!TCBgaBÿ@L3€€J@gÿJ @f AÖaBÿ.`ÿ: @fÿ2Jf&HC4<HBAÖaBÿNq`ÿHBHA(&L3@€64< ‚HB4`àâˆ&T(,_" !TCBgaBþÜCð=C^AÖaBþÎJ®@gþÖ$< ÿÿ3HCHD6`¤4éééé¶<1DISPATCH ASREL'M68XXX DISPATCHSA!FV(…68000 DISPATCHERã2pLOADMMU pREADYHD BPREEMPT pPREEMPT_ pPERTURB_ pTIMESLIC pSBREADY pTIMEOUT pTERM pTRACER pKILLER pRUNNER BDISPATCH pTRACFLAG pEXCSTACK pBKG_DISP pSBEXABRT BL1_D0_SA pSBLOGPHY "¦I3(€-@L× NiHî8AÖaAì.x |øÿMø!ô|"N ) gì,@.,fð#n ®H3 °-!Î /.D/.@Qø 1ø  pàÀ.-fh|øÿ*n6aA– n<€™AÖaBþÞ܇(F9n@ÿú)nBÿü-'fLîÿI3Hìÿÿ¾Lî0Hìÿî -/@-@B`ÿ*n6aBþ– n*8 "]…šNh,œ… n6aB'þ`Nq`"(F CN`&8 "UC _8ß¿Ãfú/?,ÿú/<<`L3$B† m n _-_¸-_¼/.)g".èg a nBýÀJfBýº \3!RAnCø  1pfBý¦aB&ý¢`BýžJFfBý˜AÖaB$ý’ HzýŽŸ`Bý† P` €)R`BýtI3€~$.èffffNLî?ÿ,_` z,.ð n6aB'ýB`Nq`&~ F&(.O3 "ô·„f È®ìg-Cô`"R‡È®ìggBýRnø .ø°nøbBüþ~aN`Büö.F3 /,x ½üg0/ f(.)g .è8gîè,_"¯Pø Ns,_L3$"/8 #NuaBü¨$< 4.&.(.8áL<AîàaBü†`®)Lîÿt®3@-@&Nuî ,X`B ü`4È=1EXIT ASREL'M68XXX EXIT SA!P@(…68000 EXIT MODULEÿ2BEXIT_TER 2pPREEMPT pPREEMPT_ pPERTURB_ BEXIT_POS .BEXIT_ERR ”BEXIT_TRA ‚BEXIT_ASR .BEXIT_SUB BEXIT_EXC pRUNNER BERROR_01 BBERROR_02 FBERROR_03 JBERROR_04 NBERROR_05 RBERROR_06 VBERROR_07 Z×2BERROR_08 ^BERROR_09 bBERROR_10 fBERROR_11 jBERROR_12 nBERROR_13 rBERROR_14 vBERROR_15 zBERROR_16 ~pDISPATCH BEXIT_D0A 2BEXIT_D0S pEXCSTACK pBKG_DISP pL1_D0_SA "´L3R .`p|Jx f Lî?þ,_NsjAâaAÞJ8 gè`AÔB®L× NiHî8`H3€AÀp`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p:3@`=@=|çG` H@0<.H@ x QˆYˆ.H|`ÿV4éééé éÑK1PVSEM ASREL'M68XXX PVSEM SA!QA(…68000 TRAP 0--SEMAPHORE ROUTINEŒ2BPSEM pSBREADY BVSEM ªBSBP BSVXSTAK VBSBV ªpKILLER BPSWAIT 2pDISPATCH pEXCSTACK "æJ3€@ç|JÐkü0ãHâ@S@0€kFßNua:U.raFßAÖaAÔ`AÐî ,B® (F3f!NNu*@ - fø+N NuHç .&|ð&î-HîÿtNl-L< 8 Kï I3 €Pn@rIî™ÀäHd8Ý`(ÝQÈÿüLß0NuaBÿX@ç|JÐkü0ãHâ@R@o0€,3FßNu/ "h!i €0€B© © ,"_FßNu4ééééééÚV1SINT ASREL'M68XXX SINT SA!R (…68000 DIRECTIVE--SIMULATE INTERRUPT TO ISRW2pVCTUBGN pEXIT_SUB ESINT pTRACER pERROR_09 pERROR_14 pTRACFLAG %ZK3€@B‚,"x J1 oAðBƒ,g Co`AÞá‹à Hz@çåŠ B/?8!g'3BHaA¾îNs8!gaA®Ý`A¨4ééé éééãW1SUPER ASREL'M68XXX SUPER SA!S(…M68000 DIRECTIVE--SWITCH TO SUPERVISOR MODEb2pLOADMMU pEXIT_SUB pRUNNER pPANEL FSUPER pERROR_01 pEXCSTACK pSBLOGPHY &VN3 D . €Kª{ûfAôJnpg x (fAà x Uˆ, z n6aAÎ`Nq`AÆ*FLî 3 ÿN•,x *n6aA°`A¬4ééééééìL1TRAP0 ASREL'M68XXX TRAP0 SA!T#(…68000 TRAP #0 handler and table.ÿ2pKILLERT0 pPSEM pEXQEVNTI pEXQEVNTN pEXQEVNTT pVSEM pCALL_GUA pRDTIMER BTRAP0 PHI_DIR_N %pWAKEUPX pLOGPHY BTABLE0 JpKILLER pGETTCB pGTXTCB pEXRQPA pTCBCR pPAUSE pREADY pPAGEFREE pBKG_SCHE =2pFNDGSEG pFNDTSEG pPAGEALOC pFNDUSEM pLOGPHYO "–H3@ fNsT €%bAîЀ0;2Nû./ %bÒ2;Aû±ü(f @g~3ÿÿÿT¯"NuA¶A¶A¶A!¶A&¶A"¶A¶A%¶A¶A$¶A¶A¶A'¶A¶A ¶A¶A¶A¶A¶A¶A¶A¶A¶A¶A¶A¶A(¶A¶,3þÀA¶A¶A¶A¶A¶A¶A¶ÿÔA#¶A¶4  éééééõL1TRAP1 ASREL'M68XXX TRAP1 SA!U(…68000 TRAP #0 handler and table.÷2pSUSPEND pRTEVENT pCDIR pSBGETTCB pSEGSHAR pTSKWAIT pWTEVENT pASQEVENT pGTTASKID pASQSTATS pCMR pCISR pEXIT_POS pTSKINFO pEXIT_ERR pSBREADY pEXIT_SUB pTSKATTR pTSKSTART pSINT pTERM BTRAP1 û2BTTB_01 :BTTE_01 @pGTDTIM pEXPVCT pCRTCB pATTSEG pTRACER pDEMON pDSERVE pEXMON pSTDTIM pATSEM pCRSEM pFLUSHC pABORT pDESEM pDESEMA pEXMMSK pRUNNER pAKRQST pTRPVCT pDELAY þ2pDELAYW pDERQST pRCVSA pSERVER pTFRSEG pRELINQ pUDRBEG pISRRTE pMOVELL pRESUME pMOVEPL pSGSEM pRQSTPA pSUPER pSTOPT pWAKEUP pWTSEM pPSTATE pERROR_01 pERROR_02 pERROR_03 pREXMON pSETPRI  2pRSTATE pTERMT pASQREAD pTRACFLAG pASQALOC pGTTNAME pCKEXMON pGTEVENT pASQFREE pSEGALOC pSNAPTRAC pDCLSHAR pSEGDEAL pSBLOGPHY "lF3@?_'fD|/,x 6Hî?ÿ.)g.å@k. @,b,(H$;,j g*@ •!TCB^3!UUg`AN¼*NNû `AA²`:`®`AL¦AL¤ÀAZ¤ÀA]¤ÀA>¤@A)¤ÀA¤ÀAB¤@A\¤A[¤f3UUUUÀA<¤@A¤@A(¤ÀAV¤@ A#¤A2¤A%¤@ AR¤A¤ÀAC¤A¤ÀAI¤A9¤A?¤ÀA"¤À AP¤f3UUUU@AH¤@$A'¤@8A8¤ÀA¤ÀAF¤A:¤ÀAU¤AY¤A¤AS¤ÀA¤A¤A¤AX¤AL¤AL¤f3UUUU@ A/¤@ AJ¤@ AE¤@ A3¤@ A0¤A4¤AL¤AL¤AL¤AL¤@A=¤A,¤A;¤ÀA7¤AL¤AL¤f3UUUUAL¤@A¤AG¤A¤ÀA¤@A$¤AL¤ÀA-¤ÀA+¤À A5¤À AQ¤À AK¤À AO¤AL¤AL¤@AD¤R3T€@A.¤@A&¤A1¤8 TgaB*þjÿ.)g".èg~aBWþPå@kN @,bDGúþžR3 H$3g2*HE…ÿ, n6aB^þ$`Nq`BMþ(FgAÔaBþ``BNþ*HNó I3P`BLýþ$x @$ gôä@D@°jnêS@Àü EòJªgÚ4*‚f"²®fÈ-W8BnH>3$?Hz @ç$jNÒ0.HfBý¬0gB!ý¦ @fAÖaB ýš`Bý–4þ×'M68010 AUTOVCT SAªqqBUSERRFTEQ44 qqCOMINT AF==qqDISPATCHAFFFqqEXCEPT AFOOq  qEXCEPT SAXXqqEXIT AFaaqqM68010 SAjjqqPVSEM AFssqqSINT AF||qqSUPER AF……qqTRAP0 AFŽŽqqTRAP1 AF——qqCOMINT RO  qqDISPATCHRO©©qqEXCEPT RO²²qqEXIT RO»»qqPVSEM ROÄÄqqSINT ROÍÍqqSUPER ROÖÖqq6AUTOVCTƒIDNTƒ1,168010--Interceptautovctinterrupts*ˆ*********************ˆ*M68010.AUTOVCT.SA* *ˆ*‡1.00‡**ˆ*********************3*„AUTOVECT-Autovectors1-6pointtothisroutine.*>*‰TheinterrupthandlerontheVME120andVME128hastwomodes@*‰ofoperation,normalandalternate.ƒWhentheinterrupthandlerE*‰operatesinthenormalinterruptmode,interruptacknowledgecyclesC*‰thatacknowledgeVMEbusinterruptrequests,usethevectorpassed>*‰bytheinterruptingslave.‚InterruptacknowledgecyclesthatB*‰acknowledgesoftwareabortinterruptrequestsuseauto-vector7.@*‰Whentheinterrupthandleroperatesinthealternateinterrupt<*‰mode,allinterruptacknowledgecyclesusetheauto-vector;*‰corresponding‚totheleveloftheinterruptrequestbeingB*‰acknowledged.‚Theinterruptingdevice(VMEbusor68901)doesnot;*‰seetheacknowledgecycle;thusitcontinuestodriveits*‰interruptrequestline.*?*‰Thealternateinterruptmodeisenteredwhenabuserrorora;*‰retryoccurstotheMPU,iftheALTCLR*bitissetinthe*‰controlregister.* ** BUS ERROR NOTES AS APPLIED TO VME120/128 F*‚BuserrorhandlingontheVME120/128posesspecialproblems.‚WemustF*‚guard‚againstexecutinginaninterruptserviceroutinewhileweareE*‚processingbuserrors.‚Thefollowingproblemmayariseif‚interrupt?*‚service‚is‚executed‚during‚bus‚error‚processing.ƒAprocessatF*‚interruptlevel0startstoexecuteanADD.L#1,COUNT.‚CountisreadF*‚from‚memory,1isaddedtoit,butbeforeitiswrittenback,wegetF*‚abuserror.‚Duringbuserrorprocessingalevel2interruptoccurs.D*‚The‚interrupt‚serviceroutineperformsaSUB.L#1,COUNT.‚Interrupt?*‚serviceconcludesandwe‚get‚back‚to‚the‚write‚portion‚of‚theA*‚instruction‚that‚is‚adding‚#1‚toCOUNT.‚TheeffectoftheSUB.L*‚#1,COUNTislost. >*‚S.F.ˆwroteabuserrorsummarydated11/28/83that‚is‚quiteF*‚useful‚inunderstandingwhat'sgoingonwithbuserrorsonthesetwo *$%$8B*‚boards.‚Therearethreetypesofbuserrors‚(crash‚and‚burn,‚MMU+*‚fault,benign).‚Theseareoutlinedbelow: F*‚CRASHANDBURNBUSERROR.‚AbuserrorofthistypecanberecognizedE*‚becauseeitherbit2orbit3ofthemodulestatusregister‚will‚beA*‚set.ƒBit‚2‚represents‚aBERR*signallinegoingtrue.‚Bit3setC*‚representsaparityerror.‚RefertotheVME120‚spec‚section‚6.9.1F*‚(modulestatus).‚ThemodulestatusregisterthatwewanttocheckisE*‚reallyport6(IPRB)oftheMK68901multi-function‚peripheral‚chip.G*‚Notethattoenablethisfunctionontheboard,wemustwriteonestoF*‚thecorrespondingpositionsontheport4(IERB)atINITIOtime.‚TheC*‚above‚discussion‚applies‚onlytotheVME120.‚TheVME128alsousesD*‚thesamebitsbutinadditionusesbit1forVMXbuserrors.ƒOn‚theB*‚120,‚bit‚1‚is‚asoftwarereadableswitch.‚IfalternateinterruptG*‚modeisenabled,allsubsequentinterruptswillbeautovectoreduntilE*‚alternate‚interruptmodeiscleared.‚Wegointo! alternateinterrupt!*‚modeforanytypeofbuserror. D*‚MMUFAULTBUSERROR.‚Thistypeofbuserrorshouldonly‚occur‚whenF*‚weareinusermode.‚Bits2and3ofthemodulestatusregisterwillE*‚NOTbesetforthistypeofbuserror.‚Notethateventhoughwe‚are5*‚inusermode,abuserrorneednotbeanMMUfault. F*‚BENIGNBUSERROR.‚IfthebuserrorisneitheroftheabovetwotypesD*‚thenitmustbeabenignbuserror.‚Ifitiswe‚should‚essentially**‚performanRTEtoretrytheinstruction. #*‚AUTOVECTORSCHEMEWITHBUSERRORS D*‚WeshouldnormallyoperateVERSAdoswiththeALTCLR(bit‚6)‚in‚theF*‚modulecontrolregistersetto1.‚ThemodulecontrolregisterisNOT*‚associatedwiththe68901.*­Bit6(ALTCLR*)isthekey>*‚bithere.‚Referto‚the‚VME120‚spec,‚section‚6.9.2.ƒWe‚shouldE*‚normally‚runwithbit6setto1(accomplishedduringINITIO).‚ThisF*‚willallowinterruptstooccurnormallybutwhenabuserror‚occurs,E*‚all‚subsequent‚interruptswillbeconvertedintoanautovectorwithE*‚thesameinterruptprioritylevel.‚Notethattheinterruptwill‚notE*‚be‚acknowledged‚sotheperipheralorotherinterruptingdevicewillF*‚keeptheinterruptactive.‚Toclearthealternateinterruptmode,weC*‚must‚toggle‚the‚ALTCLRbittoa0andthenbacktoa1.‚ThebasicF*‚ideahereittogetinterruptsmaskedwhilehandlingabuserror.‚AsE*‚soon‚as‚possibleinthebuserrorhandlerweshouldmaskinterruptsC*‚to7.‚Becausethereisasmallamountoftimeafter‚the‚bus‚errorF*‚occurred‚andbeforewecanmasktheinterruptsweneedtobeabletoA*‚respondproperlywhenaninterrupt‚causes‚us‚to‚autovector.ƒTheA*‚solution‚to‚this‚is‚to‚code‚uparoutinewhichispointedatbyC*‚autovectors1-6.‚Thesituationisfurthercomplicated‚by‚the‚factB*‚that‚dual‚port‚lock‚ispossible.‚ThisisasituationinwhichanF*‚externaldeviceistryingtoreachon-boardtotheVME120/128at‚theF*‚sametimetheVME120/128istryingtoreachoff-board.‚InmostcasesG*‚thehardwarewillcausearetryontheVME120/128butwewillalsogoD*‚into‚alternate‚interruptmode.‚InthiscasewecouldarriveattheD*‚autovectorroutinewithouteverhavingexperiencedabus‚error.ƒIfE*‚the‚instruction‚the120wastryingtoexecute,however,wasaTASa%*‚benignbuserrorwillbegenerated. A* The EXCEPT bus error module should contain the following logic: * mask interrupts to 7; * If error was in user mode then*„handleasMMUfault:*„{mmufaultlogiceitherreturnstofaultingtaskviaRTE=*…orreturnstothismoduleviaRTSifnotregularmmufault}!* clear alternate interrupt mode;E* If module status register indicates 'crash and burn' bus error then-*„clearerrorbitsinmodulestatusregister;(*„handleasexception;{as4.3woulddo}* else *„RTE{benignbuserror-retry} G*______________________________________________________________________*@*‡ENTRY:Normalinterruptinformationassociatedwithautovector*Žinterruptisonstack. *SP…-->SR *SP+2‡PC *SP+6‡VOR*?*‡EXIT:Alternateinterruptmodeisalwayscleared.‚Interrupts6*Žaremaskedifweenteredfromthebuserrorhandler.* *‡ALGORITHM:8*ŽIFwecamefromthebuserrorhandler(inEXCEPT)THEN>*‘SettheSRimageonthestacktoindicatemaskedinterrupts.@*ŽClearalternateinterruptmode(putusbackintonormalmode).*ŽReturnviaRTE.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠLIST*‰INCLUDE9995.&.STR.EQ ŠXDEFƒAUTOVCT ŠXREFƒBERR1 ŠXREFƒBERR2 ŠSECTIONLEVEL00* AUTOVCTƒEQU„*ŠMOVE.LA0,-(A7)*-*Stacknowlookslikethis‰SP…-->CopyofA0 *£SP+4ƒ-->SR *£SP+6‡PC *£SP+$10…VORŠBTSTƒ#SRMODE,4(A7)/ŠBEQ.S‚CLRALTBranchifwecamefromusermode. "*£Wecamefromsupervisorroutine.$*£SeeifwecamefromEXCEPTmodule. ,ŠLEA„BERR1(PC),A0‡AddressofBSR.SinEXCEPT9ŠCMP.L‚6(A7),A0‹Comparetopushedbuserroraddronstack+ŠBEQ.S! ‚BUSERRBranchifwecamefromEXCEPT2ŠLEA„BERR2(PC),A0‡AddressofOR#0700,SRinEXCEPTŠCMP.L‚6(A7),A03ŠBNE.S‚CLRALTBranchifwedidNOTcomefromEXCEPT E* The following instruction is executed only if an interrupt occurredC*ƒonthetwoinstructionsinEXCEPTbetweentheoccurrenceofabus&*ƒerrorandthemaskingofinterrupts. BBUSERR„OR…#$0700,4(A7)‡SetSRimageonstackformaskedinterrupts )CLRALT„CLR_ALT_MODEŽClearalternatemode.ŠMOVE.L(A7)+,A0ŠRTEŠENDéé#***********************************#* Beginning of M68010.BUSERRFT.EQ *#***********************************ŠPAGE**‰BUSERRORFORMATFOR68010* ŠOFFSET0 ŠDS.Wƒ1‡SR ŠDS.Wƒ2‡PC ŠDS.Wƒ1‡VOR#SSWB†DS.Wƒ1‡SPECIALSTATUSWORDBUSAOB‡DS.Wƒ2‡FAULTADDRESSŠDS.Wƒ1DOB‡DS.Wƒ1‡DATAOUTPUTBUFFERŠDS.Wƒ1DIB‡DS.Wƒ1‡DATAINPUTBUFFERŠDS.Wƒ1'IRC‡DS.Wƒ1‡INSTRUCTIONREGISTER(INPUT)ŠDS.Wƒ16* *‰SSWBƒFORMAT*3SSWBRR„EQU„15†RERUNFLAG--0=PROCESSOR,1=SOFTWARE&SSWBIF„EQU„13†INSTRUCTIONFETCHTOIRCSSWBDF„EQU„12†DATAFETCHTODIB%SSWBRM„EQU„11†READ-MODIFY-WRITECYCLE3SSWBHB„EQU„10†HIGHBYTETRANSFERFROMDOBORTODIBSSWBBY„EQU„9‡BYTETRANSFER*SSWBRW„EQU„8‡READ/WRITE--0=WRITE,1=READ ******************************** * Ending of M68010.BUSERRFT.EQ * ********************************éééé,!=/*=/*†M68010.COMINT.AF=/*7=/* Chain file to assemble M68XXX.COMINT.SA for a 68010=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M68010.COMINT.LS=/*=/IFC \1ƒ=ARGM68010.COMINT.LS=/ENDIF=/*@=ASM M68010.M68010.SA/M68XXX.COMINT.SA,M68010.COMINT.RO,\1;RZ=66=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.IOV.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDé" ééééé5=/*=/*†M68010.DISPATCH.AF=/*9=/* Chain file to assemble M68XXX.DISPATCH.SA for a 68010=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M68010.DISPATCH.LS=/*=/IFC \1ƒ=ARGM68010.DISPATCH.LS=/ENDIF=/*F=ASM M68010.M68010.SA/M68XXX.DISPATCH.SA,M68010.DISPATCH.RO,\1;MRZ=065=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.UTILITY.MC=/*}=/*=ENDééééé>=/*=/*†M68010.EXCEPT.AF=/*7=/* Chain file to assemble M68XXX.EXCEPT.SA for a 68010=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M68010.EXCEPT.LS=/*=/IFC \1ƒ=ARGM68010.EXCEPT.LS=/ENDI" F=/*B=ASM M68010.EXCEPT.SA/M68XXX.EXCEPT.SA,M68010.EXCEPT.RO,\1;MRZ=065=/*{ Included files are:=/*ƒM68010.M68010.SA=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.UTILITY.MC=/*}=/*=ENDééééééGŠINCLUDEM68010.M68010.SA3ALTINT„SET„0’Indicatesnoalternateinterruptmode.'*£Alternateinterruptmodeappliesonly*£toVME120/VME128.ééééééé# P=/*=/*†M68010.EXIT.AF=/*5=/* Chain file to assemble M68XXX.EXIT.SA for a 68010=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68010.EXIT.LS=/*=/IFC \1ƒ=ARGM68010.EXIT.LS=/ENDIF=/*>=ASM M68010.M68010.SA/M68XXX.EXIT.SA,M68010.EXIT.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.UTILITY.MC=/*}=/*=ENDéééééY ‰LLEN120* *ˆTypeof68000-familyprocessor*$CHIPTYPE‚EQU68010‚Typeofprocessorééééé# ééb=/*=/*†M68010.PVSEM.AF=/*6=/* Chain file to assemble M68XXX.PVSEM.SA for a 68010=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68010.PVSEM.LS=/*=/IFC \1ƒ=ARGM68010.PVSEM.LS=/ENDIF=/*@=ASM M68010.M68010.SA/M68XXX.PVSEM.SA,M68010.PVSEM.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*}=/*=ENDéééééék=/*=/*†M68010.SINT.AF=/*5=/* Chain file to assemble M68XXX.SINT.SA for a 68010=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68010.SINT.LS=/*=/IFC \1ƒ=ARGM68010.SINT.LS=/ENDIF=/*>=ASM M68010.M68010.SA/M68XXX.SINT.SA,M68010.SINT.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.IOV.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDéé$ éééét=/*=/*†M68010.SUPER.AF=/*6=/* Chain file to assemble M68XXX.SUPER.SA for a 68010=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68010.SUPER.LS=/*=/IFC \1ƒ=ARGM68010.SUPER.LS=/ENDIF=/*@=ASM M68010.M68010.SA/M68XXX.SUPER.SA,M68010.SUPER.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.PANEL.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDéééééé}=/*=/*†M68010.TRAP0.AF=/*6=/* Chain file to assemble M68XXX.TRAP0.SA for a 68010=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68010.TRAP0.LS=/*=/IFC \1ƒ=ARGM68010.TRAP0.LS=/ENDIF=/*?=ASM M68010.M68010.SA/M68XXX.TRAP0.SA,M68010.TRAP0.RO,\1;RZ=050=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*}=/*=END$ éééééé†=/*=/*†M68010.TRAP1.AF=/*6=/* Chain file to assemble M68XXX.TRAP1.SA for a 68010=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68010.TRAP1.LS=/*=/IFC \1ƒ=ARGM68010.TRAP1.LS=/ENDIF=/*?=ASM M68010.M68010.SA/M68XXX.TRAP1.SA,M68010.TRAP1.RO,\1;RZ=075=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDéééééé% K1COMINT ASREL'M68XXX COMINT SA!X(…68010 common interrupt handler.ü2pLOADMMU pLOADMMUI pPTMADDR pMMULOAD pPREEMPT pPREEMPT_ BCOMINTZ pPERTURB_ pIOVCTBGN pVCTUBGN BCOMINT_P ,pSBWAKEUP pSBQEVNTI pTRACER pKILLER BCOMINT pRUNNER BISRERR BISRRTE ¬pBKG_FLAG pBKG_HEAD +2pTRACFLAG pBKG_DISP BCOMNISR f"PL3$  8 !gaAöî`*_aAì _N`Lßÿ\|Jx fNsj?_f aA"ÈJ8 fJ3"@Ns?_'fö/,x Hî?ÿL× NiHî8`Aœ@ç8 !gaAŽî HçÿþNi/ /9I3€( oF,hHV?<„/(@À@ÿ?"h 0P*n6`BÿV fÿnP,_( „!TCBgO3@ aBÿ<€™AÖaBþÞ܇(F9n@ÿú)nBÿü-'fLîÿI3Hìÿÿ¾Lî0Hìÿî -/@-@B`ÿ*n6aBþ– n*8 "]…šNh,œ… n6aB'ýŒ`Nq`"(F CN`&8 "UC _8ß¿Ãfú/F3?,ÿú/<<`B† m n _-_¸-_¼/.)g".èg a n^3…IBý.JfBý( nCø  1pfBýaB&ý`Bý JFfBýAÖaB$ý HzüüŸ`Büô PM3` €)R`Büâ~$.èffffNLî?ÿ,_` z,.ð n6aB'ü°`I3€Nq`&~ F&(.ô·„f È®ìg-Cô`"R‡È®ìggBü|Rnø .ø°nøbL3ˆ€Bül~aN`Büd./,x ½üg0/ f(.)g .è8gîè,_"¯L3Pø Ns,_"/8 #NuaBü$< 4.&.(.8áL<AîàaBûô`®)3)Lîÿt®-@&Nuî ,X`B ûÎ4ª=1EXIT ASREL'M68XXX EXIT SA"(…68010 EXIT MODULEÿ2BEXIT_TER 2pPREEMPT pPREEMPT_ pPERTURB_ BEXIT_POS .BEXIT_ERR ”BEXIT_TRA ‚BEXIT_ASR .BEXIT_SUB BEXIT_EXC pRUNNER BERROR_01 BBERROR_02 FBERROR_03 JBERROR_04 NBERROR_05 RBERROR_06 VBERROR_07 Z×2BERROR_08 ^BERROR_09 bBERROR_10 fBERROR_11 jBERROR_12 nBERROR_13 rBERROR_14 vBERROR_15 zBERROR_16 ~pDISPATCH BEXIT_D0A 2BEXIT_D0S pEXCSTACK pBKG_DISP pL1_D0_SA "´L3R .`p|Jx f Lî?þ,_NsjAâaAÞJ8 gè`AÔB®L× NiHî8`H3€AÀp`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p:3@`=@=|çG` H@0<.H@ x QˆYˆ.H|`ÿV4éé& ééé³K1PVSEM ASREL'M68XXX PVSEM SA"(…68010 TRAP 0--SEMAPHORE ROUTINEŒ2BPSEM pSBREADY BVSEM ªBSBP BSVXSTAK VBSBV ªpKILLER BPSWAIT 2pDISPATCH pEXCSTACK "æJ3€@ç|JÐkü0ãHâ@S@0€kFßNua:U.raFßAÖaAÔ`AÐî ,B® (F3f!NNu*@ - fø+N NuHç .&|ð&î-HîÿtNl-L< 8 Kï I3 €Pn@rIî™ÀäHd8Ý`(ÝQÈÿüLß0NuaBÿX@ç|JÐkü0ãHâ@R@o0€,3FßNu/ "h!i €0€B© © ,"_FßNu4éééééé¼V1SINT ASREL'M68XXX SINT SA"@(…68010 DIRECTIVE--SIMULATE INTERRUPT TO ISRW2pVCTUBGN pEXIT_SUB ESINT pTRACER pERROR_09 pERROR_14 pTRACFLAG %bJ3€@B‚,"x J1 oAðBƒ,g Co`AÞá‹à ?<„Hz @ç?<„åŠ B/?03$$€8!gaA¶îNs8!gaA¦Ý`A 4é& éééééÅW1SUPER ASREL'M68XXX SUPER SA"7(…M68010 DIRECTIVE--SWITCH TO SUPERVISOR MODEb2pLOADMMU pEXIT_SUB pRUNNER pPANEL FSUPER pERROR_01 pEXCSTACK pSBLOGPHY &VN3 D . €Kª{ûfAôJnpg x (fAà x Uˆ, z n6aAÎ`Nq`AÆ*FLî 3 ÿN•,x *n6aA°`A¬4ééééééÎ'M68010 TRAP0 ROããqqTRAP1 ROììqq' L1TRAP0 ASREL'M68XXX TRAP0 SA"C(…68010 TRAP #0 handler and table.ÿ2pKILLERT0 pPSEM pEXQEVNTI pEXQEVNTN pEXQEVNTT pVSEM pCALL_GUA pRDTIMER BTRAP0 PHI_DIR_N %pWAKEUPX pLOGPHY BTABLE0 RpKILLER pGETTCB pGTXTCB pEXRQPA pTCBCR pPAUSE pREADY pPAGEFREE pBKG_SCHE =2pFNDGSEG pFNDTSEG pPAGEALOC pFNDUSEM pLOGPHYO "žH3fNsT?o>Ÿ €%bAæÐ€0;2Nû./ %bÒ2;Aû±ü(f v3ÿÿÿ @gT¯"NuA®A®A®A!®A&®A"®A®A%®A®A$®A®A®A'®A®A ®A®A®A®A®A®A®A®A®A®<3ÿìA®A®A(®A®A®A®A®A®A®A®A®ÿÔA#®A®4éééééÛL1TRAP1 ASREL'M68XXX TRAP1 SA"3(…68010 TRAP #0 handler and table.÷2pSUSPEND pRTEVENT pCDIR pSBGETTCB pSEGSHAR pTSKWAIT pWTEVENT pASQEVENT pGTTASKID pASQSTATS pCMR pCISR pEXIT_POS pTSKINFO pEXIT_ERR pSBREADY pEXIT_SUB pTSKATTR pTSKSTART pSINT pTERM BTRAP1 û2BTTB_01 :BTTE_01 @pGTDTIM pEXPVCT pCRTCB pATTSEG pTRACER pDEMON pDSERVE pEXMON pSTDTIM pATSEM pCRSEM pFLUSHC pABORT pDESEM pDESEMA pEXMMSK pRUNNER pAKRQST pTRPVCT pDELAY þ2pDELAYW pDERQST pRCVSA pSERVER pTFRSEG pRELINQ pUDRBEG pISRRTE pMOVELL pRESUME pMOVEPL pSGSEM pRQSTPA pSUPER pSTOPT pWAKEUP pWTSEM pPSTATE pERROR_01 pERROR_02 pERROR_03 pREXMON pSETPRI  2pRSTATE pTERMT pASQREAD pTRACFLAG pASQALOC pGTTNAME pCKEXMON pGTEVENT pASQFREE pSEGALOC pSNAPTRAC pDCLSHAR pSEGDEAL pSBLOGPHY "pF3@?_'fD|/,x 6Hî?ÿ' .)g.å@k. @,b,(H$;,j g*@ •!TCB^3!UUg`AN¼*NNû `AA²`:`®`AL¦AL¤ÀAZ¤ÀA]¤ÀA>¤@A)¤ÀA¤ÀAB¤@A\¤A[¤f3UUUUÀA<¤@A¤@A(¤ÀAV¤@ A#¤A2¤A%¤@ AR¤A¤ÀAC¤A¤ÀAI¤A9¤A?¤ÀA"¤À AP¤f3UUUU@AH¤@$A'¤@8A8¤ÀA¤ÀAF¤A:¤ÀAU¤AY¤A¤AS¤ÀA¤A¤A¤AX¤AL¤AL¤f3UUUU@ A/¤@ AJ¤@ AE¤@ A3¤@ A0¤A4¤AL¤AL¤AL¤AL¤@A=¤A,¤A;¤ÀA7¤AL¤AL¤f3UUUUAL¤@A¤AG¤A¤ÀA¤@A$¤AL¤ÀA-¤ÀA+¤À A5¤À AQ¤À AK¤À AO¤AL¤AL¤@AD¤R3T€@A.¤@A&¤A1¤8 TgaB*þjÿ.)g".èg~aBWþPå@kN @,bDGúþžR3 H$3g2*HE…ÿ, n6aB^þ$`Nq`BMþ(FgAÔaBþ``BNþ*HNó I3P`BLýþ$x @$ gôä@D@°jnêS@Àü EòJªgÚ4*‚f"²®fÈ-W8BnHB3 ??<„Hz @ç$jNÒ0.HfBý¨0gB!ý¢ @fAÖaB ý–`Bý’4ä'M68020 CACR EQùù'qqEXCEPT AFqqM68020 SA  qqEXCEPT ROqq*>*‚Theseequatesdescribethecontrolbitsinthe68020'sCACR.*CACR_E„EQU„0’1=Enablecache.CACR_F„EQU„1’1=Freezecache.4CACR_CEƒEQU„2’1=Clearcacheentryw/addrinCAAR.)CACR_C„EQU„3’1=Clearallcacheentries.  *I*‚Thesemacrosgeneratethecodetoreadandwritethe68020'sCACR.‚ThisH*‚isnecessaryfornowbecausethe68020assemblerisnotbeingreleasedH*‚intimefor4.4VERSAdos,whichsupportsthe68020.‚Thefollowingcode<*‚demonstratestheiruse;thiscodeflushesthe68020cache.!*‰READ_CACR_INTO_D3ˆD3<--CACR.=*‰BSETƒ#CACR_C,D3‰Setthebitthatcausesthecachetoclear."*‰WRITE_CACR_FROM_D3‡CACR<--D3.*READ_CACR_INTO_DƒMACRO ŠIFGEƒ\1-0 ŠIFLEƒ\1-7 ŒDC.Wƒ$4E7AŒDC.Wƒ\1<<12+2ŒMEXITŠENDCŠENDC4ŠFAILƒ499Badregisterspecificationforthismacro.ˆENDM WRITE_CACR_FROM_DƒMACRO ŠIFGEƒ\1-0 ŠIFLEƒ\1-7 ŒDC.Wƒ$4E7BŒDC.Wƒ\1<<12+2ŒMEXITŠENDCŠENDC4ŠFAILƒ499Badregisterspecificationforthismacro.ˆENDM ééé( éñ(=/*=/*†M68020.EXCEPT.AF=/*7=/* Chain file to assemble M68XXX.EXCEPT.SA for a 68020=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M68020.EXCEPT.LS=/*=/IFC \1ƒ=ARGM68020.EXCEPT.LS=/ENDIF=/*B=ASM M68020.M68020.SA/M68XXX.EXCEPT.SA,M68020.EXCEPT.RO,\1;MRZ=065=/*{ Included files are:=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.UTILITY.MC=/*}=/*=ENDééééééú ‰LLEN120* *ˆTypeof68000-familyprocessor*$CHIPTYPE‚EQU68020‚Typeofprocessoréééé( éééQ1EXCEPT ASREL'M68XXX EXCEPT SA"$(…68020 USER TRAP AND EXCEPTION HANDLERþ2pMMUFAULT pEXIT_TER pPREEMPT_ pTIAT BPROGINT2 pBPROGINT3 rBPROGINT4 tBPROGINT5 vBPROGINT6 xBPROGINT7 zBPROGINT8 |BPROGINT9 †BPROGINTA ~BPROGINTB €pEXIT_TRA pEXIT_EXC BBERR1 ppSVXSTAK pTTB_01 ö2pSBQEVNTN pTTE_01 pTRACER pKILLER pRUNNER pISRERR pERROR_03 BTRPVCT2 BTRPVCT3 pDISPATCH BTRPVCT4 pTRACFLAG BTRPVCT5 BTRPVCT6  BTRPVCT7 pEXCSTACK BTRPVCT8 BTRPVCT9 BCKEXMON —2pMACSTRC BTRPVCTA BTRPVCTB BTRPVCTC pSBEXABRT BTRPVCTD pMMUHERE BTRPVCTE BTRPVCTF pEQDQ pSBLOGPHY "NH3a aaaaaaaaaa a aaaaNq?/_'g/ gèaAÈ//NI3A ,y(Hî?ÿ8 !g @çaA¨ªTKú`Ô)La*8 "]…šNh,œ… n6I3@@aB'ýr`Nq`"(F CN`&8 "UC _8ß¿Ãfú/?,ÿú/<<`B† m n  _-_¸R3…-_¼/.)g".èg a nBýJfBý nCø  1pfBüúaB&üöV3I`BüòJFfBüìAÖaB$üæ HzüâŸ`BüÚ P` €)R`BüÈ~$.èfffI3fNLî?ÿ,_` z,.ð n6aB'ü–`Nq`&~ F&(.ô·„f È®ìg-CôO3€ˆ€`"R‡È®ìggBübRnø .ø°nøbBüR~aN`BüJ./,x ½üg0/ I3f(.)g .è8gîè,_"¯Pø Ns,_"/8 #NuaBûü$< 4.L3&.(.8áL<AîàaBûÚ`®)Lîÿt®-@&Nuî ,X`B û´4 'M68230 M68230 EQ!!)qqRDTIMER AF**qqRDTIMER SA336qqTIMEINT AF<<qqTIMEINT SAEE=qqRDTIMER RONNqqTIMEINT ROWWqq) !*********************************!* Beginning of M68230.M68230.EQ *!*********************************‰PAGE*:*ˆThesearetheequatesfortheM68230ParallelInterrupt/6*ˆTimerchip(MFP)asusedontheVME115boardforthe:*ˆsystemtimer,localserialport,andlocalprinterport.* 0PIT_BASE‚EQU„$F81001ŒBaseaddressforPI/Tchip.#*£Allregistershaveoddaddresses.(PGCR†EQU„0’PortGeneralControlRegister(PSRR†EQU„2’PortServiceRequestRegister*PADDR…EQU„4’PortADataDirectionRegister*PBDDR…EQU„6’PortBDataDirectionRegister*PCDDR…EQU„8’PortCDataDirectionRegister*PIVR†EQU„10‘PortInterruptVectorRegister#PACR†EQU„12‘PortAControlRegister#PBCR†EQU„14‘PortBControlRegister PADR†EQU„16‘PortADataRegister PBDR†EQU„18‘PortBDataRegister%PAAR†EQU„20‘PortAAlternateRegister%PBAR†EQU„22‘PortBAlternateRegister PCDR†EQU„24‘PortCDataRegisterPSR‡EQU„26‘PortStatusRegister**"TCR‡EQU„$20TimerControlRegister,TIVR†EQU„$22TimerInterruptVectorRegister**CPRH†EQU„$26CounterPreloadRegisterHigh,CPRM†EQU„$28CounterPreloadRegisterMiddle)CPRL†EQU„$2ACounterPreloadRegisterLow*!CRH‡EQU„$2ECounterRegisterHigh#CRM‡EQU„$30CounterRegisterMiddle CRL‡EQU„$32CounterRegisterLow!TSR‡EQU„$34TimerStatusRegister******************************* Ending of M68230.M68230.EQ *******************************éé*=/*=/*†M68230.RDTIMER.AF=/*,=/* Chain file to assemble M68230.RDTIMER.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68230.RDTIMER.LS=/*=/IFC \1ƒ=ARGM68230.RDTIMER.LS=/ENDIF=/*2=ASM M68230.RDTIMER.SA,M68230.RDTIMER.RO,\1;RZ=040=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDéééé) éé"ŠPAGE**ˆINCLUDEFILES**‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.INTERRUP.MCŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGECRDTIMERƒIDNTƒ1,0‰READTIMERroutineforM68230PITrealtimeclock.*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆ*********************ˆ*RDTIMER‚1.00„**ˆ*’**ˆ*SCB„05/02/84‚**ˆ*********************,*…READTIMER-RETURNTIEMRVALUE(MS)IND1*™TIMERVALUE(US)IND0*5* Currently code returns only the number of MS in D1.* D1 is returned as 0.*ŠSECTIONLEVEL00* ŠXDEFƒRDTIMER ŠXDEFƒSBRDTIM ** SYSPAR parameters* ŠXREF.SMIDNIGHT ŠXREF.SNSEŠXREF.STIME_LEFTŠXREF.STINTFLAGŠPAGESBRDTIM:RDTIMER: ŠCLR.L‚D0$ŠMOVE.WSR,-(A7)‹ForlaterunmaskingŠDISABLE_INTERRUPTSˆMask ŠMOVE.LNSE,D1ŠSUB.L‚TIME_LEFT,D10ŠSUB.L‚MIDNIGHT,D1ˆD1=currentmspastmidnight#ŠBCLRƒ#31,D1Insurepositivenumber ŠMOVE.W(A7)+,SR‹UnmaskŠRTSŠENDéééé+7=/*=/*†M68230.TIMEINT.AF=/*,=/* Chain file to assemble M68230.TIMEINT.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68230.TIMEINT.LS=/*=/IFC \1ƒ=ARGM68230.TIMEINT.LS=/ENDIF=/*D=ASM M68010.M68010.SA/M68230.TIMEINT.SA,M68230.TIMEINT.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9999.M68230.M68230.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒM68XXX.TIMEINT.AI=/*}=/*=ENDé* éééé4ŠPAGE**ˆINCLUDEFILES**ˆINCLUDE9995.&.STR.EQ*ˆINCLUDE9995.&.BAB.EQ*ˆINCLUDE9995.&.PAT.EQ*ˆINCLUDE9999.M68230.M68230.EQ*ˆINCLUDE9995.&.TR1RTCD.EQ*ˆINCLUDE9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9999.M68230.M68230.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE>TIMEINTƒIDNTƒ1,0ŽTIMERINTERRUPTHANDLERFORM68230CLOCKCHIP*$*‰COPYRIGHTED1983BYMOTOROLA,INC.***†TIMERINTERRUPT-OCCURSONCEEACH10MS*!*•05/02/84--Clonedroutinefrom*­M146818.TIMEINT.SA*ŠSECTIONLEVEL00* ŠXDEFƒTIMEINT ŠXREF.SDATEŠXREF.SPATBEGŠXREF.SPREEMPT_FLAGŠXREF.SPTMADDRŠXREF.STIME_LEFTŠXREF.STIMEOUTŠXREF.STIMESLICŠXREF.STIMINTVŠXREF.STIMINTV4ŠXREF.STINTFLAGŠXREF.STRACERŠXREF.STRACFLAG ŠXREFƒBKG_SCHEDULE ŠXREFƒCKDELAY ŠXREFƒCKEXPAŠXREFƒPAT_RM_1ST_NODEŠPAGE**0TIMEINTƒMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERSŠMOVE.LPTMADDR,A0*ŠMOVE.B#$01,TSR(A0)‡Cleartimerinterrupt0ŠCLR.L‚D1‘D1.L<--timeintervalcorresondingto'ŠMOVE.WTIMINTV,D1‰atickofthetimer..ŠSUB.L‚D1,TIME_LEFT‡Dowehaveanodetofire?1*‰INCLUDEM68XXX.TIMEINT.AI‚YessogoscheduleitŠINCLUDEM68XXX.TIMEINT.AIŠENDéé=>^1RDTIMER ASREL'M68230 RDTIMER SA"V(…READ TIMER routine for M68230 PIT real time clock.P2pNSE BRDTIMER pTIME_LEF BSBRDTIM pMIDNIGHT pTINTFLAG ""3@B€@ç|"8 ’¸ ’¸ FßNu4é* ééééééFY1TIMEINT ASREL'M68230 TIMEINT SA"(…TIMER INTERRUPT HANDLER FOR M68230 CLOCK CHIPÛ2pPTMADDR pPREEMPT_ pPERTURB_ pCOMINT_P pDATE pTIMESLIC BTIMEINT pTIMEOUT pTIME_LEF pTIMINTV pTIMINTV4 pPAT_RM_1 pCKEXPA pTRACER pPATBEG pTRACFLAG pBKG_SCHE pTINTFLAG pCKDELAY "¬J3RHçÀÀ x |4B28 “¸ n"x AéCú*‰whichcausesabuserrorwhichresultsintheloadingofthe,*‰samedescriptorastheoriginalbuserror.*6*‰TASKSWITHADDRESSSPACE0GETUNMAPPEDENTIRESPACE*?*‰TASKSWITHOTHERADDRESSSPACESGETONLYTHEIRASSIGNEDSPACE*0*‰PAGEFAULTISUSEDTOSWAPSEGMENTDESCRIPTORS*ŠSECTIONLEVEL00 ‰XDEF†LOADMMU‰XDEF†LOADMMUI ‰XREF†FLUSH_ON_CONTEXT_SWITCH ‰XREF.S„CURR_ASN‰XREF.S„MMUHERE‰XREF.S„MMULOAD‰XREF.S„TRACER‰XREF.S„TRACFLAGA‰XREF.S„LAST_MMU_INT_LEVELParameterwhichcontainstheinterrupt$*§levelatwhichwegotthelastBus$*§Errorwhichmighthavebeendueto *§anunloadedsegmentdesciptor. **LOADMMU:.ŠMOVE.B‚TSTASN(A5),D0…Getaddressspacenumber*ŠCMP.BƒCURR_ASN,D0‡IfsameascurrentASN,ŠBEQ.SƒLOADEXITŠthenEXIT. ŠPUSH„SRSaveinterruptlevel!ŠOR.W„#$700,SRŠInhibitinterrupts/ŠMOVE.L‚A5,MMULOADˆSaveaddressofcurrentloadŠMOVE.L‚MMUHERE,A5ˆPointtoMMUŠMOVE.B‚D0,AST1(A5)‡Userdata ŠMOVE.B‚D0,AST2(A5)‡Userprogram* *„SAVETHEADDRESSSPACENUMBER.*ŠMOVE.B‚D0,CURR_ASN **„FLUSHTHEUSERCACHE.*¨R±^¹9ÁÉEÑ@ÙTáŠBSR…FLUSH_ON_CONTEXT_SWITCH **„TEMPORARILYDISABLETRACING.*0*‰BTST„#TRCFMMU,TRACFLAGShouldentrybetraced?*‰IF…THEN.S*‰BSR…TRACERŒBuildtraceentry*‰DC.W„$DD08Tracecode*‰ENDI (ŠPOP…SRRestorepreviousinterruptlevel LOADEXIT: ŠRTS—ReturnŠPAGE LOADMMUI:.ŠMOVE.B‚TSTASN(A5),D0…Getaddressspacenumber*ŠCMP.BƒCURR_ASN,D0‡IfsameascurrentASN,ŠBEQ.SƒLOADIEX‹thenEXIT. !ŠOR.W„#$700,SRŠInhibitinterrupts/ŠMOVE.L‚A5,MMULOADˆSaveaddressofcurrentloadŠMOVE.L‚MMUHERE,A5ˆPointtoMMUŠMOVE.B‚D0,AST1(A5)‡Userdata ŠMOVE.B‚D0,AST2(A5)‡Userprogram * *„SAVETHEADDRESSSPACENUMBER.*ŠMOVE.B‚D0,CURR_ASN  **„FLUSHTHEUSERCACHE.*ŠBSR…FLUSH_ON_CONTEXT_SWITCH **…TEMPORARILYDISABLETRACING.*0*‰BTST„#TRCFMMU,TRACFLAGShouldentrybetraced?*‰IF…THEN.S*‰BSR…TRACERŒBuildtraceentry*‰DC.W„$DD08Tracecode*‰ENDI LOADIEX:ŠRTEŠPAGE**ˆMakeentryin!ASN**:*‰CreateanewAddressSpaceNumberandinsertitintoTCB**,*‰ENTRY:„A5‚PointstoTCBtoreceivenewASN**‰EXIT:…ReturnPCifsuccessful(*“ReturnPC+2ifnonewASNisavailable* *›01234567*‰USESREGISTERS‚D**™A*„P** ŠXDEF†CRASN*ŠXREF.S„ASNTBLŠXREF.S„KILLER*CRASN=‰BTSTW‚#TSKARTIM,TCBATTR(A5)‚Ifthetaskisareal-timetask,.‰BNE.S‚CRASN13thenusethedefault(ASN=0),*¦asinitializedinTSKBORN. "‰MOVE.LASNTBL,D0ŽIstherea!ASN?‰BEQ.S‚CRASN13Branchifnone‰MOVE.LD0,A0’A0--->!ASN‰CMP.L‚#'!ASN',(A0)‹Isit!ASN?‰BEQ.S‚CRASN11Branchifyes2‰BSR„KILLER‘Mu!!Itisthere,butitisnotthere.CRASN11"‰LEA„4(A0),A0Pointtofirstentry$‰MOVE.W#127-1,D0Ž127entriesinallCRASN12‚TST.L‚(A0)+’Freeentry?(‰DBEQƒD0,CRA. SN12Branchbackifnotfree,‰BEQ.S‚CRASN12ABranchifanentrywasfound"ŠADD.L‚#2,(A7)Error--tablefullŠRTSšTakeerrorreturn"CRASN12AMOVE.LA5,-(A0)Useentry‰NEG.B‚D0•ComputeASN‰ADD.B‚#127,D0#‰MOVE.LTCBTST(A5),A0ŠPointto!TST"‰MOVE.BD0,TSTSTAT(A0)‰DropinASNCRASN13ŠRTSšReturntocallerŠPAGE**‡Deletetaskfrom!ASN**%*‰ENTRY:ƒA4‚PointstoTCBtoloseASN* *›01234567*‰USESREGISTERS‚D**™A*‚** ŠXDEF…DEASN ŠXREF.SƒASNTBLŠXREF.SƒKILLER*DEASN#ˆMOVE.L‚ASNTBL,D0„Istherean!ASN?ˆBEQ.SƒDEASN7‡BranchifnoneˆMOVE.L‚D0,A0ˆA0--->!ASNˆCMP.Lƒ#'!ASN',(A0)Isit!ASN?ˆBEQ.SƒDEASN5‡Branchifyes1ˆBSR…KILLER‡Mu!!Itisthere,butitisnotthereDEASN5#ˆMOVE.L‚TCBTST(A4),A1Pointto!TST ˆCLR.WƒD0‹Prepareforshortload4ˆMOVE.B‚TSTASN(A1),D0GetAddressSpaceNumber(ASN)!ˆBEQ.SƒDEASN7‡ASN#0notrelevant&ˆCMP.Wƒ#128,D0†Shouldbelessthan128ˆBLT.SƒDEASN6‡BranchifokˆBSR…KILLER‡ElsecrashDEASN6ˆLSL.Wƒ#2,D0ˆIndexinto!ASNˆCLR.Lƒ(A0,D0.W)„RemoveentryDEASN7ŠRTSReturntocallerŠPAGE*"*‰Unloadasegmentfrom68451MMUs*(*‰ENTRY:‚(A5,D5)-->Segmentinformation* ŠXDEF„UNLDMMU ŠXREF.S‚CURRSDŠXREF.S‚CURR451ŠXREF.S‚FRST451ŠXREF.S‚LAST451*UNLDMMU *=*‚Flushanycachedinformationthisusermighthavebuiltup.*ééé ŠPUSH.LA5ŠBSR„FLUSH_ON_CONTEXT_SWITCH ŠPOP.L‚A5 *ŠTST.B‚TSTASN(A5)ŠIsthisaddressspace0?ŠBEQ.S‚UNLDEXITŒBranchifyes'ŠMOVE.LFRST451,A1ŠPointtofirst68451$ŠMOVE.B#1,D0Segmentdescriptor#1UNLD10%ŠMOVE.BD0,DP(A1)‹Pointtodescriptor"ŠMOVE.BSSR(A1),D1ŠReaddescriptor+ŠBTSTƒ#SSREN,D1‹Isthisdescriptorenabled?ŠBEQ.S‚UNLDNEXTŒBranchifno'ŠMOVE.BAC6(A1),D1ŠGetdescriptor'sASN8ŠCMP.B‚TSTASN(A5),D1‡Isthistheaddressspacewe'rein?ŠBNE.S‚UNLDNEXTŒBranchifno'ŠMOVE.WAC0(A1),D1ŠGetdescriptor'sLBA!ŠCMP.W‚TSTLB(A5,D5),D1†LBALE?ŠBGT.S‚UNLDNEXTŒBranchifyes-ŠMOVE.B#0,SSR(A1)ŠElseclearthisdescriptor5ŠMOVE.LA1,CURR451ŠGivethisdescriptortonextfault5ŠMOVE.BD0,CURRSD+3‰RestofdescriptorinfoforfaultUNLDNEXTŠADDQ.B#1,D0NextdescriptorŠCMP.B‚#$20,D0EndofthisMMU?ŠBNE.S‚UNLD10ŽBranchifnoééé. é#ŠLEA„$40(A1),A1ŠMoveontonextMMUŠCLR.B‚D0’Descriptor#0)ŠCMP.L‚LAST451,A1ŠArewebeyondallMMUs?ŠBLE.S‚UNLD10ŽBranchifnoUNLDEXITŠRTS˜ElsereturnŠPAGE*>*‰Diagnosebuserrorandattempt68451segmentdescriptorswap*"*‰Savesandrestoresallregisters*ŠXDEF„MMUFAULT ŠXREF.S‚CURRSDŠXREF.S‚CURR451ŠXREF.S‚FRST451ŠXREF.S‚LAST451ŠXREF.S‚MMUHEREŠXREF.S‚RUNNER MMUFAULT ŠSAVE„D0-D7/A0-A6ˆSaveregistersŠTST.LƒMMUHEREŒIsthereanmmu?ŠBEQ…MMUFRTSŒBranchifno<ŠMOVE.L‚MMULOAD,A0‰A0<--ptrtoTSToftaskthat'srunning;'*§notethatthisisnotnecessarilythe*§RUNNER(wemaybeinanISR)./ŠTST.BƒTSTASN(A0)‰Isthistaskaddressspace0?ŠBEQ…MMUFRTSŒBranchifyes8ŠTR0.LOGPHY,<15*4+8+AOB(A7)>,#2Checkforvalidaddress/ŠBRA.SƒMMUF10BranchifAOBisinlogicalspace ŠNOP˜Else,+ŠBRA…MMUFRTSŒBranchifnotinlogicalspaceMMUF10(ŠBSR…CRSDCreatelba,lam,pbainD0,D1,D2ŠMOVE.W‚TSTASN(A0),D3†ASNtoD3$ŠMOVE.B‚TSTCTL+1(A0,D5),D3DSTtoD3:ŠBSET„#SSRUSED,D3ˆSettousedsoitwon'tgetswappedsoonŠPAGE**‰Selectadescriptortoswap**‰1.‚Disableddescriptor.*‰2.‚Firstdescriptorcheckedandfoundunused*‰3.‚Firstdescriptorchecked*%ŠPUSH„SRSavecurrentinterruptlevel!ŠOR.W„#$700,SRŠInhibitinterrupts2ŠMOVEM.LFRST451,A0-A3…Get68451SYSPARparameters'ŠMOVE.L‚A2,A4A4-->MMUbeingexamined&ŠMOVE.L‚A3,D7D7hasdescriptornumberFSD20%ŠMOVE.B‚D7,DP(A4)‰Pointtodescriptor"ŠMOVE.B‚SSR(A4),D6ˆReaddescriptor+ŠBTST„#SSREN,D6‰Isthisdescriptorenabled?ŠBEQ.SƒFSDEMPTYŠBranchifno0ŠBCLRƒ#SSRUSED,D6‡Hasthisdescriptorbeenused?ŠBEQ.S‚FSDNOUSEŠBranchifno/ŠMOVE.BD6,SSR(A4)ˆEraseusedbitindescriptorŠADDQ.B#1,D7NextdescriptorŠCMP.B‚#$20,D7‹EndofthisMMU?ŠBNE.S‚FSD40Branchifno#ŠLEA„$40(A4),A4ˆMoveontonextMMU#ŠCLR.B‚D7Beginwithdescriptor#0$ŠCMP.L‚A1,A4ArewebeyondallMMUs?ŠBLE.S‚FSD40Branchifno"ŠMOVE.LA0,A4GobacktofirstMMUŠADDQ.B#1,D7Descriptor#1FSD40+ŠCMP.W‚A3,D7Samedescriptorwestartedon?ŠBNE.S‚FSD20Branchbackifno$ŠCMP.L‚A2,A4SameMMUwestartedon?ŠBNE.S‚FSD20BranchbackifnoŠPAGE**‰Usefirstdescriptorchecked*FSDFIRST*(*‰Usefirstdescriptorfoundtobeempty*FSDEMPTY*(*‰Usefirstdescriptornotrecentlyused*FSDNOUSE?SR_ON_STACKSET‚4+4+15*4+2‰ThisisthedepthoftheoriginalSR%*§pushedbythebuserror.‚Intheway'*§arethePCfromtheBSRPROGINT2(4),&*§thePCfromtheBSRMMUFAULT(4),15%*§registerssavedbyMMUFAULT(15*4),#*§andtheSRsavedbyMMUFAULT(2). BŠMOVEƒSR_ON_STACK(SP),D6IsolateinD6theinterruptlevelwewere6ŠAND„#$0700,D6Šrunningatwhenthebuserroroccurred. /ŠMOVEM.WD0-D3,AC0(A4)„LoadmostofaccumulatorŠMOVE.B‚#$FF,AC8(A4)…ASM#ŠMOVE.B‚D7,DP(A4)ˆDescriptornumber 5ŠTST.BƒLDO(A4)‹Iftherewasnocollisionontheload,ŠIF‚‚THEN.SŠ* TRY_AGAIN*J*‚AtthispointwehaveeithersuccessfullyloadedasegmentdescriptororI*‚wegotacollisionthatmaybeduetoapreviousinterruptwhichcausedK*‚ustoloadadescriptor.‚IneithercasewewanttoremembertheinterruptH*‚levelofthisloadandproceedundertheassumptionthatthebuserrorJ*‚wascausedbytheabsenceoftherightsegmentdescriptor.‚IfwegettheJ*‚buserroragain,theLAST_MMU_INT_LEVELwillbelowersowe'llknowit's*‚theuser'sfault.*>ŠMOVE.B‚AC6(A4),AST1(A0)‚LoadtheASNforthisdescriptorinto?ŠMOVE.B‚AC6(A4),AST2(A0)‚theuserdataanduserprogramentries*§intheaddressspacetable. **‰FixupSYSPARparameters*:ŠMOVEƒD6,LAST_MMU_INT_LEVELƒRememberthisinterruptlevel. 2ŠADDQ.B‚#1,D7ŒStartnexttimewithnextdescriptorŠCMP.Bƒ#$20,D7ŠEndofthisMMU?ŠBNE.SƒFSD/ 100‹Branchifno#ŠLEA…$40(A4),A4‡MoveontonextMMU#ŠCLR.BƒD7Startwithdescriptor#0$ŠCMP.LƒA1,A4ŒArewebeyondallMMUs?ŠBLE.SƒFSD100‹Branchifno"ŠMOVE.L‚A0,A4ŒGobacktofirstMMUŠADDQ.B‚#1,D7ŒDescriptor#1FSD100#ŠMOVE.L‚A4,CURR451‡SavecurrentMMU+ŠMOVE.B‚D7,CURRSD+3†Savecurrentdescriptor**‰Returntofaultedtask*!ŠADD.Lƒ#2,A7ŒRemoveSRfromstack/ŠRESTORED0-D7/A0-A6†Restoreoriginalregisters+ŠADD.Lƒ#8,A7ŒRemoveunusedreturnaddressesŠRTE–Continuetask ŠENDI  *C*‚Therewasacollision;canwetellwhethertheuserwasatfault?*BŠCMP„LAST_MMU_INT_LEVEL,D6‚Iftheinterruptlevelofthelastload:ŠBMI„TRY_AGAINŠwashigherthantheinterruptlevelofthis'*§load,thenit'spossiblethatwetook(*§theinterruptduringtheprocessingof%*§thisbuserror.‚Ifthathappenedwe(*§mighthavealreadyloadedthissegment'*§descriptorforthecodeatthehigher$*§interruptlevel.‚Thereforewemust*§trytheaccessagain.  *F*‚Weknowthecollisionwastheuser'sfault,sinceweknowwedidnot7*‚comethroughthispathfromahigherinterruptlevel.*(ŠPOP…SRRestorepreviousinterruptlevelMMUFRTS&ŠRESTORED0-D7/A0-A6†RestoreregistersŠRTS–ContinuenormalhandlingŠPAGE* *‰Computeonesegmentdescriptor**‰ENTRY:‚D6=Physicaladdress*‘D3=Logicaladdress*‘(A0,D5)-->TSTMMUentry**‰EXIT:ƒD0=lba *‘D1=lam *‘D2=pba*‘(A0,D5)UNDISTURBED*CRSDŠMOVE.L‚D3,D0D0=la ŠLSR.Lƒ#8,D0LOSELOWBYTEOFla ŠLSR.Lƒ#8,D6LOSELOWBYTEOFpa,ŠMOVE.L‚#-1,D1ŒONESTOSTOPlamFORMINGLOOPŠMOVE.W‚D1,D3D3=lamŠCLR.BƒD2D2=nŠMOVE.W‚D6,D1D1=paŠEOR.WƒD0,D1D1=paEORla**‰FORMLARGESTPOSSIBLElam*CRSDAŠBTST„D2,D1la=paINBITn?ŠBNE.SƒCRSDCBRANCHIFNOŠBCLR„D2,D3CLEARTHISlamBITŠADD.Bƒ#1,D2BUMPnŠBRA.SƒCRSDATRYNEXTBIT**‰ADJUSTlamFORLOWERBOUNDARY*CRSDCŠMOVE.W‚D0,D1D1=laŠAND.WƒD3,D1D1=lamANDla(ŠCMP.WƒTSTLB(A0,D5),D1ƒlamANDla>=lb?ŠBHS.SƒCRSDDBRANCHIFYESŠSUB.Bƒ#1,D2DECREMENTnŠBSETƒD2,D3HALVETHElamRANGEŠBRA.S‚CRSDCTRYAGAIN**‰ADJUSTlamFORUPPERBOUNDARY*CRSDDŠMOVE.W‚D3,D4ŒD4=lamŠNOT.WƒD4D4=NOTlamCRSDD10ŠMOVE.W‚D0,D1ŒD1=laŠAND.WƒD3,D1ŒD1=lamANDla'ŠADD.WƒD4,D1ŒD1=(lamANDla)+NOTlam2ŠCMP.WƒTSTLE(A0,D5),D1‚(lamANDla)+NOTlam<=leŠBLS.SƒCRSDEŒBRANCHIFYESŠSUB.Bƒ#1,D2ŒDECREMENTnŠBSET„D2,D3ŒHALVETHElamRANGE"ŠBCLR„D2,D4ŒHALVETHENOTlamRANGEŠBRA.SƒCRSDD10ŠTRYAGAINCRSDEŠAND.WƒD3,D0ŒD0=lba,ŠMOVE.W‚TSTPO(A0,D5),D2‚D2=PHYSICALOFFSETŠADD.WƒD0,D2ŒD2=paŠMOVE.W‚D3,D1ŒD1=lam ŠRTS–RETURNŠENDééééé/ é!*********************************!* Beginning of M68451.M68451.EQ *!*********************************ŠPAGE*‰MC68451DESCRIPTION**)*‰ASTENTRYOFFSETSFROMMMUBASEADDRESS*AST1†EQU„$02USERDATAAST2†EQU„$04USERPROGRAMAST5†EQU„$0ASUPERVISORDATAAST6†EQU„$0CSUPERVISORPROGRAM*+*‰ACCUMULATOROFFSETSFROMMMUBASEADDRESS*%AC0‡EQU„$20LOGICALBASEADDRESS,MSB%AC1‡EQU„$21LOGICALBASEADDRESS,LSB%AC2‡EQU„$22LOGICALADDRESSMASK,MSB%AC3‡EQU„$23LOGICALADDRESSMASK,LSB&AC4‡EQU„$24PHYSICALBASEADDRESS,MSB&AC5‡EQU„$25PHYSICALBASEADDRESS,LSB AC6‡EQU„$26ADDRESSSPACENUMBERAC7‡EQU„$27STATUSREGISTERAC8‡EQU„$28ADDRESSSPACEMASK*0*‰CONTROL‚REGISTEROFFSETSFROMMMUBASEADDRESS*DPˆEQU„$29DESCRIPTORPOINTER"GSR‡EQU„$2DGLOBALSTATUSREGISTER!LSR‡EQU„$2FLOCALSTATUSREGISTER#SSR‡EQU„$31SEGMENTSTATUSREGISTER%RDP‡EQU„$3BRESULTDESCRIPTORPOINTER(DTO‡EQU„$3DDIRECTTRANSLATIONOPERATION%LDO‡EQU„$3FLOADDESCRIPTOROPERATION***‰SEGMENTSTATUSREGISTER(SSR)DEFINITION*SSRUSEDƒEQU„7USEDSSRMOD„EQU„2MODIFIEDSSRWP…EQU„1WRITEPROTECTEDSSREN…EQU„0ENABLED******************************* Ending of M68451.M68451.EQ *******************************éééé-U1LOADMMU ASREL'M68451 LOADMMU SA"9(…68451 MMU HANDLER FOR 68010-BASED SYSTEMSõ2BLOADMMU BLOADMMUI ,BMMUFAULT *pFLUSH_ON pMMULOAD BUNLDMMU ÈpCURR_ASN pLAST_MMU pASNTBL BCRASN TBDEASN –pCURR451 pTRACER pKILLER pFRST451 pLAST451 pRUNNER pCURRSD pTRACFLAG pMMUHERE 2pSBLOGPHY "\H3PPB- °8 g @ç|!Í *x @@À aAÚFßNu- °8 g|!Í *xJ3‚ @@À aA°Ns-)f8 8 g2 @ !ASNgaA’Aè0<~J˜WÈÿügL3T—Nu! D m6@ Nu 8 g* @ !ASNgaBÿX"l6B@) g @€maBÿBI3åHB°Nu/ aBÿ4*_J- gR"x <@))1g()&²- f2) ²uPmG3@ ˆ²uPn|1!É À!R fÂCé@B³ø o¶NuHçÿþJ¸ gÔ x J( gI3Èz,/NaBþ¶`Nq`¶a¸6( 0PÃ@ç|Lø (J. G),1F3g(†g"F1R  fIì@B¹Éo(HR¾KfιÊfʺqqASQREAD AF))qqASQREAD SA22JqqASQSTATSAFSSqqASQSTATSSA\\)qqASRINT AFqqASRINT SA–– qqATSEM AF··qqATSEM SAÀÀLqqBKG AFááqqBKG SAêê"ùqq=/*=/*†M68XXX.AKRQST.AF=/*+=/* Chain file to assemble M68XXX.AKRQST.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M68XXX.AKRQST.LS=/*=/IFC \1ƒ=ARGM68XXX.AKRQST.LS=/ENDIF=/*1=ASM M68XXX.AKRQST.SA,M68XXX.AKRQST.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TIOT.EQ=/*ƒ9995.&.TACK.EQ=/*}=/*=ENDééééééÿ0 ‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.TIOT.EQ*ˆINCLUDEƒ9995.&.TACK.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.TIOT.EQ‰INCLUDEƒ9995.&.TACK.EQ‰LIST‰PAGE  *'*…MOVERETURNPARAMETERSTOTARGETTASK* AKRQ4D:1ˆBTSTƒ#TACKOSCC,D7‡SHOULDCONDITIONCODESBESET?ˆBEQ.S‚AKRQ5ŽBRANCHIFNO (ˆMOVE.B‚11(A4),TCBCC(A5)‚CONDITIONCODES AKRQ5:,ˆBTSTƒ#TACKOSD0,D7‡SHOULDDATAREG0BESET?ˆBEQ.S‚AKRQ6ŽBRANCHIFNO ˆMOVE.L‚12(A4),TCBD0(A5)‚SETD0 AKRQ6:,ˆBTSTƒ#TACKOSA0,D7‡SHOULDADDRREG0BESET?ˆBEQ.S‚AKRQ7ŽBRANCHIFNO ˆMOVE.L‚16(A4),TCBA0(A5)‚SETA0 AKRQ7:'ˆBTSTƒ#TACKORDY,D7‡REACTIVATETHETASK?ˆBEQ.S‚AKRQ9ŽBRANCHIFNO AKRQ8:3ˆBTSTƒ#TSKSAKWT,TCBSTATE(A5)ISTASKSTILLWAITING?ˆBNE.S‚AKRQ8ABRANCHIFYES &ˆTR0.RYACK‚(A5)‹MAKETARGETTASKREA1 DY AKRQ8A: ˆEXITƒSUB AKRQ9:+ˆBTSTƒ#TACKOWT,D7ˆPUTTASKIN'WAIT'STATE?ˆBEQ.S‚AKRQ10BRANCHIFNO 5ˆBSETƒ#TSKSBLCK,TCBSTATE(A5)ƒPUTTARGETINWAITSTATE ˆEXITƒSUB AKRQ10:$ˆBTSTƒ#TACKOSPD,D7‡SUSPENDTHETASK?)ˆBEQ.S‚AKRQ8ŽIFNO-GOBACKANDREADYIT 0ˆBSETƒ#TSKSSUSP,TCBSTATE(A5)†SUSPENDTARGETTASK ˆEXITƒSUBˆENDééééééé=/*=/*†M68XXX.ASQALOC.AF=/*,=/* Chain file to assemble M68XXX.ASQALOC.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.ASQALOC.LS=/*=/IFC \1ƒ=ARGM68XXX.ASQALOC.LS=/ENDIF=/*3=ASM M68XXX.ASQALOC.SA,M68XXX.ASQALOC.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*}=/*=ENDééééé1 é!7ASQALOCƒIDNT‚6,0‚68xxxDIRECTIVE--ALLOCATEASQ“07/13/84O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***9***…FILE:‚ASQALOC-TRAP#1HANDLER-ALLOCATEANASQ’******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***F***…FUNCTION:‚GetsanASQforthetargettask.‚InitializestheASQ„***<***accordingtotheoptionswithintheparameterblock.…******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ. ******É******É******…ENTRYCONDITIONS:³******É***"***‰A6ƒREQUESTOR'STCBADDRESS¤******‰A5ƒTARGET'STCBADDRESS§*******‰A4ƒLOGICALPARAMETERBLOCKADDRESSœ******É******ˆ(A4)‚TARGETTASKNAME«******‡4(A4)‚SESSNNO.²******‡8(A4)‚B‚ASQSTATUS®******‡9(A4)‚B‚MAXMSGLEN­***$***†10(A4)‚LENOFQUEUEINBYTES¦***$***†14(A4)‚ASRADDRESS(LOGICAL)¦***'***†18(A4)‚RECIEVINGAREA(LOGICAL)£******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É******‡D0=0‚Success;²******É******‡D0<>0Failure;²******É***5***ŠThefollowingerrorcodesarereturnedinD0:’******É***-***ŒRTCDPBLK-02‚Parameterblockaddress—***$***›notinuser'saddressspace.’******É***1***ŒRTCDTASK-03‚Targettaskdoesnotexist.“******É***(***ŒRTCDDPRQ-06‚Duplicaterequest:œ***+***›Functioncannotbeperformedtwice.‹******É***7***ŒRTCDNFND-07‚Entrynotfoundintableorlist.******É***1***ŒRTCDNMEM-08‚Memoryspacenotavailable.“******É***/***ŒRTCDADR1-12‚Addressofsomeparameter•***$***›notinuser'saddressspace.’******É******É****;3L;YCGKO*******************************************************************************O*******************************************************************************O*^******************************************************************************,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------)*…09/01/84‚MSLŒRe-wroteasstatemachine.**…07/09/84‚SPTŒImplementedautomaticread.*…03/03/81‚HLD6*…05/15/79‚GGC3‹REV2.00 * *‚XDEF's.* ŠXDEFƒASQALOC * *‚XREF's.*ŠXREF.SADEFTYP **‚Includedfiles:**ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*‰INCLUDEƒ9995.&.ASQ.EQ‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰LIST‰SECTIONLEVEL04‰PAGE9*asq_aloc: proc (pb_ptr, target_tcb_ptr, client_tcb_ptr);  *„dcl‚pb_ptrlongword(A4);#*„dcl‚target_tcb_ptrlongword(A5);#*„dcl‚client_tcb_ptrlongword(A6);  %*ˆif(tcb_asq(target_tcb_addr)<>0)*ˆthenreturn(error_06); *ˆelsedo;*status<==status(pb_ptr);*if*(asr_nval(status)=set)&*(asr_en(status)=set)*thenreturn(error_12 5);'*if(dbuf_val(status)=set)thendo;<*’dbuf_ptr<==logphy(dbuf_addr(pb_ptr),max_ml(pb_ptr)); *’if(error)*’thenreturn(error_12);*end;"*elseif(dbuf_en(status)=set)*thenreturn(error_15); *elsedo;1*’asq_ptr<==pagealoc(numberofpagesforASQ); *’if(error)*’thenreturn(error_08); *’elsedo;*—asq(asq_ptr)<=='!ASQ';**—asq_asr(asq_ptr)<==asr_addr(pb_ptr);"*—asq_dbuf(asq_ptr)<==dbuf_ptr;)*—asq_bot(asq_ptr)<==addr(asq_start);)*—asq_get(asq_ptr)<==addr(asq_start);)*—asq_put(asq_ptr)<==addr(asq_start);**—asq_mx_ml(asq_ptr)<==max_ml(pb_ptr);+*—asq_top(asq_ptr)<==asq_ptr+len(asq)*²-(max_ml+4);5*—asq_st_mod(asq_ptr)<==bit_5-3(status(pb_ptr));*—asq_state(asq_ptr)<==&*¡map_tbl(bit_2-0(status(pb_ptr)));*—asq_count(asq_ptr)<==0;'*—tcb_asq(client_tcb_ptr)<==asq_ptr;*’end;*end;*ˆend;  *end asqaloc;‰PAGE ASQALOC: $*ˆif(tcb_asq(target_tcb_ptr)<>0)*ˆthenreturn(error_06); 4‰TST.L…TCBASQ(A5)Šif(tcb_asq(target_tcb_ptr)<>0))‰EXIT.NEƒRTCDDPRQŒthenreturn(error_06); *ˆelsedo;*status<==status(pb_ptr);*if*(asr_nval(status)=set)&*(asr_en(status)=set)*thenreturn(error_15); $‰CLR.L…D2’status<==stats(pb_ptr);‰MOVE.B„8(A4),D2 ‰BTST†#ASQS_RNV,D2ˆif+‰BEQ.S…ASQAL_02Œ(asr_nval(status)=set)& )‰BTST†#ASQSREN,D2‰(asr_en(status)=set)(‰EXIT.NEƒRTCDOPTthenreturn(error_15);  '*if(dbuf_val(status)=set)thendo;<*’dbuf_ptr<==logphy(dbuf_addr(pb_ptr),max_ml(pb_ptr)); *’if(error)*’thenreturn(error_12);*end;"*elseif(dbuf_en(status)=set)*thenreturn(error_15); ASQAL_02:#‰CLR.L…D7’(D7<==max_ml(pb_ptr));‰MOVE.B„9(A4),D7 8‰BTST†#ASQS_DBV,D2ˆif(dbuf_val(status)=set)thendo;‰BEQ.S…ASQAL_03 D‰TR0.LOGPHY,18(A4),D7ƒdbuf_ptr<==logphy(dbuf_ptr;‰BRA.S…ASQAL_04‘if(error) ‰NOP thenreturn(error_12);‰EXIT†RTCDADR1  ASQAL_03:3‰BTST†#ASQSDBEN,D2ˆelseif(dbuf_en(status)=set)(‰EXIT.NEƒRTCDOPTthenreturn(error_15);‰CLR.L…D6’(dbuf_ptrinD6):‰PAGE *elsedo;1*’asq_ptr<==pagealoc(numberofpagesforASQ); *’if(error)*’thenreturn(error_08);*C*ˆ(NOTE:numberofpagesforASQ>=len(asq_header)+max_ml+4;) ASQAL_04:/‰MOVE.L„10(A4),D3‹D3<==bytesinmessagearea; -‰MOVE.L„D7,D2D2<==maximummessagelength+)‰ADD.L…#ASQLEN+4,D2len(asq_header)+4; ‰CMP.L…D2,D3if(D30Failure;²******É***5***ŠThefollowingerrorcodesarereturnedinD0:’******É***-***ŒRTCDPBLK-02‚Parameterblockaddress—***$***›notinuser'saddressspace.’******É***1***ŒRTCDTASK-03‚Targettaskdoesnotexist.“******É***4***ŒRTCDNTBL-04‚Requiredtabledoesnotexist.******É***;***ŒRTCDTFUL-05‚Tableisfull:‚Noroomfornewentry.ˆ******É***/***ŒRTCDADR1-12‚Addressofsomeparameter•***$***›notinuser'saddressspace.’******É***\9eXmQua}z…dO•HI¥L­ .***ŒRTCDENAB-14‚Functionisnotenabled.–******É***3***ŒRTCDPCNT-16‚Invalidcountorlengthfield‘******›inparameterblock.›******É******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------)*…09/02/84‚MSLŒRe-wroteasstatemachine.&*…07/09/84‚SPTŒImplementanauto-read.**…06/25/84‚SPTŒImplementanoverflowarea.*…11/06/81‚HLD6‹REV3.00.*…02/26/81‚HLD6‹REV2.00.*…08/17/79‚HLD6‹REV1.3 00.* * *‚XDEF's.*‰XDEF†ASQEVENT * *‚XREF's.*‰XREF.S„DISP_ASR‰XREF.S„GTASQBUF‰XREF.S„KILLER‰XREF.S„READY_ASR **‚Includedfiles:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.ASQ.MC*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.ASQ.EQ‰INCLUDEƒ9995.&.ASQ.MC‰INCLUDEƒ9995.&.BAB.EQ‰INCLUDEƒ9995.&.PAT.EQ‰LIST‰SECTIONLEVEL04‰PAGE**ˆROUTINEREGISTERUSE**ˆD0=msg_len;*ˆD1=msg_code;*ˆD2=asq_state;**ˆA0=dest_ptr;*ˆA1=src_ptr;*ˆA2=pb_ptr;*ˆA4=asq_ptr;*ˆA5=target_tcb_ptr;*ˆA6=requestor_tcb_ptr;*‰PAGE9*asqevent: proc (pb_ptr, target_tcb_ptr, client_tcb_ptr);  *„dcl‚pb_ptrlongword(A4);#*„dcl‚target_tcb_ptrlongword(A5);#*„dcl‚client_tcb_ptrlongword(A6);  6*ˆA2<==pb_ptr;/*ForcompatabilitywithEXQEVENT*/'*ˆasq_ptr<==tcb_asq(target_tcb_ptr);*ˆif(asq_ptr=0)*ˆthengotoerror(04); *ˆelsedo;'*if(client_tcb_ptr<>real-timetask)0*thensrc_ptr<==logphy(event_addr(pb_ptr));'*elsesrc_ptr<==event_addr(pb_ptr);*msg_len<==len(src_ptr);*if(msg_len<4)*thengotoerror(16); *elsedo;*’msg_code<==code(src_ptr);*’mask(bit_7,msg_code);*’if(msg_code=server_event)*’thenmsg_code<==user_event;*’if(msg_code=user_event)5*’thenmsg_len<==msg_len+len(taskname,session);+*’roundmsg_lenuptoevennumberofbytes;!*’if(msg_len>max_ml(asq_ptr))*’thengotoerror(); *’elsedo; *—freeze(asq);$*—docase(asq_state,asq_sw_modes); *’end;*end;*ˆend;  *end asqevent;‰PAGE*ˆA2<==pb_ptr;'*ˆasq_ptr<==tcb_asq(target_tcb_ptr);*ˆif(asq_ptr=0)*ˆthengotoerror(04); ASQEVENT‰MOVE.L„A4,A2A2<==PB_PTR;;‰MOVE.L„TCBASQ(A5),A4‡asq_ptr<==tcb_asq(target_tcb_ptr);‰MOVE.L„A4,D0if(asq_ptr=0)&‰BEQ.S…ASQERR04Œthengotoerror(04);  *ˆelsedo;#*if(client_tcb<>real-timetask)0*thensrc_ptr<==logphy(event_addr(pb_ptr));'*elsesrc_ptr<==event_addr(pb_ptr); :‰BTSTW…#TSKARTIM,TCBATTR(A6)„if(client<>real-timetask) ‰BEQ.S…ASQEV_10‘thensrc_ptr<==*´logphy(event_addr(pb));3‰MOVE.L„10(A2),A1elsesrc_ptr<==event_addr(pb);  *msg_len<==len(src_ptr);*if(msg_len<4)*thengotoerror(16); ASQEV_01:#‰GET_LEN—msg_len<==len(src_ptr);‰CMP.B…#3,D0if(msg_len<4)&‰BLS.S…ASQERR16Œthengotoerror(16); *elsedo;*’msg_code<==code(src_ptr);*’mask(bit_7,msg_code);*’if(msg_code=server_event)*’thenmsg_code<==user_event; 2‰MOVE.L„#$7F,D1msg_code<==code(src_ptr)&$7F;,‰AND.B…(A1)+,D1Œ(maskoffbit_7ofmsg_code) 0‰CMP.B…#EVNTSERV,D1ˆif(msg_code=server_event)-‰BNE.S…ASQEV_02Œthenmsg_code<==user_event; ‰SUB.B…#4,D1  *’if(msg_code=user_event)5*’thenmsg_len<==msg_len+len(taskname,session); ASQEV_02:*‰CMP.B…#EVNTUSER,D1ˆif(code=user_event)*‰BNE.S…ASQEV_03Œthenmsg_len<==msg_len+$‰ADD.W…#8,D0˜len(taskname,session); +*’roundmsg_lenuptoevennumberofbytes; *’if(msg_len>max_ml(asq_ptr)*’thengotoerror(16); ASQEV_03:‰ADD.W…#1,D0roundmsg_lenup$‰BCLR†#0,D0toevennumberofbyte; 3‰CMP.W…ASQML(A4),D0ˆif(msl_len>max_ml(asq_ptr))&‰BHI.S…ASQERR16Œthengotoerror(16);  *’elsedo;*—freeze(asq);$*—docase(asq_state,asq_sw_modes);*’end;*end;*ˆend; ‰FREEZE_ASQ™freeze(asq);9‰MOVE.W„ASQSTATE(A4),D2Šdocase(asq_state,asq_sw_modes);‰MOVE.W„ASQEV_TBL(PC,D2.W),A3‰JMP‡ASQEV_TBL(PC,A3.W)‰PAGE+*ˆsrc_ptr<==logphy(event_addr(pb_ptr));*ˆgotoasqev1;  $*ENTRY‚A0„POINTSTOTST(PRESERVED)%*ˆD6„LOGICALWINDOWBEGINNINGADDRESS*ˆD5„WINDOWLENGTHINBYTES*2*EXITƒPC„IFWINDOWISCOMPLETELYWITHINASEGMENT&*ˆD6„PHYSICALWINDOWBEGINNINGADDRESS!*ˆD5„0(A0,D5)POINTSTOMM4 UENTRY%*ˆD3„Logicalwindowbeginningaddress*/*ˆPC+2‚IFWINDOWPARTIALLYCONTAINEDINSEGMENT*ˆD6„SAMEASSUPPLIED!*ˆD5„0(A0,D5)POINTSTOMMUENTRY  ASQEV_10:$‰TR0.LOGPHY‚,10(A2),#2‰BRA.SASQEV_11šGOODRETURN.‰NOP ASQERR12:+‰EXIT†RTCDADR1Œmessagenotintask'sspace. ASQEV_11:7‰MOVE.L„D6,A1Žsrc_ptr<==logphy(event_addr(pb_ptr);‰BRA.S…ASQEV_01‹gotoasqev_01;    ** Out of the way error codes* ASQERR04: ‰EXIT†RTCDNTBLŒTargethasnoASQ ASQERR16:"‰EXIT†RTCDPCNTŒMessageistoolong‰PAGE ASQEV_TBL: ‰DC.W†RQ_DIS00-ASQEV_TBL‰DC.W†RQ_DIS01-ASQEV_TBL‰DC.W†RQ_DIS10-ASQEV_TBL‰DC.W†RQ_DIS11-ASQEV_TBL ‰DC.W†Q_EN_00-ASQEV_TBL‰DC.W†Q_EN_01-ASQEV_TBL‰DC.W†Q_EN_10-ASQEV_TBL‰DC.W†Q_EN_11-ASQEV_TBL ‰DC.W†R_EN_00-ASQEV_TBL‰DC.W†R_EN_01-ASQEV_TBL‰DC.W†R_EN_10-ASQEV_TBL‰DC.W†R_EN_11-ASQEV_TBL ‰DC.W†RQ_EN_00-ASQEV_TBL‰DC.W†RQ_EN_01-ASQEV_TBL‰DC.W†RQ_EN_10-ASQEV_TBL‰DC.W†RQ_EN_11-ASQEV_TBL ‰DC.W†WT_EN_00-ASQEV_TBL‰DC.W†WT_EN_01-ASQEV_TBL‰DC.W†WT_EN_10-ASQEV_TBL‰DC.W†WT_EN_11-ASQEV_TBL ‰DC.W†GT_EN_00-ASQEV_TBL‰DC.W†GT_EN_01-ASQEV_TBL‰DC.W†GT_EN_10-ASQEV_TBL‰DC.W†GT_EN_11-ASQEV_TBL‰PAGE RQ_DIS00: RQ_DIS01: RQ_DIS10: RQ_DIS11: R_EN_00:R_EN_01:R_EN_10:R_EN_11: *ˆrelease(asq);*ˆreturn(error_14); ‰RELEASE_ASQ ASQERR14:(‰EXIT†RTCDENABŒTargetASQisnotenabled       GT_EN_00: GT_EN_10: RQ_EN_00: RQ_EN_10: WT_EN_00: WT_EN_10: *ˆrelease(asq);*ˆcallkiller; ‰RELEASE_ASQ ‰BSR‡KILLER‰PAGEQ_EN_00:Q_EN_01:Q_EN_10:Q_EN_11: *ˆcallcheck_alt_asr;*ˆcallget_asq_buf;*ˆif(error)thendo;*release(asq);*return(error_05);*ˆend; *ˆelsedo;*reset(asq_mt);*release(asq);*callm_import; *return;*ˆend; #‰BSR‡CK_ALT_ASRŠcallcheck_alt_asr;‰BSR‡GTASQBUFŒcallget_asq_buf;#‰BRA.S…ASQEV_21Œif(error)thendo; ASQ_FULL:‰RELEASE_ASQ˜release(asq); ASQERR05:!‰EXIT†RTCDTFUL‘return(error_05); *¦elsedo; ASQEV_21:+‰BCLR†#ASQMTBIT,ASQSWMD2(A4)ƒreset(asqmt);‰RELEASE_ASQ˜release(asq);‰BSR‡M_IMPORT‘callm_import;!‰EXIT†SUB–exit(subroutineexit);*¦end;‰PAGE GT_EN_01: *ˆdest_buf<==A0_buf(asq_ptr);*ˆgotoASQEV_30 ‰MOVE.L„ASQA0BUF(A4),A0‰BRA.S…ASQEV_30  GT_EN_11: !*ˆdest_buf<==def_buf(asq_ptr); ‰MOVE.L„ASQDBUF(A4),A0  !*ˆasq_state(asq_ptr)<==asq_en;*ˆrelease(asq);*ˆcallms_bypass;*ˆcallready(target_tcb_ptr); *ˆreturn; ASQEV_30:4‰AND.W…#SWMD_MASK,D2‡asq_state(asq_ptr)<==asq_en;‰ORI.B…#Q_EN,D2‰MOVE.W„D2,ASQSTATE(A4)‰RELEASE_ASQ“release(asq); ‰BSR‡MS_BYPASS‹callms_bypass;,‰TR0.RYGET(A5)callready(target_tcb_ptr);!‰EXIT†SUB‘exit(subroutineexit);‰PAGE RQ_EN_01: *ˆcallcheck_alt_asr;*ˆcallget_asq_buf;*ˆif(error)thendo;*release(asq);*return(error_05);*ˆend; *ˆelsedo;*reset(asq_mt);!*asq_state(asq_ptr)<==asq_en;*release(asq);*callma_import;*calldisp_asr; *return; #‰BSR‡CK_ALT_ASRŠcallcheck_alt_asr;‰BSR‡GTASQBUFŒcallget_asq_buf;#‰BRA.S…ASQEV_40Œif(error)thendo;‰BRA.S…ASQ_FULL‘release(asq);*«return(error_05);*¦end; ASQEV_40: *¦elsedo;"‰AND.B…#DBUF_EN,D2Žreset(asq_mt);/‰ORI.B…#Q_EN,D2asq_state(asq_ptr)<==asq_en;‰MOVE.W„D2,ASQSTATE(A4)‰RELEASE_ASQ˜release(asq);‰BSR‡MA_IMPORTcallma_import;‰BSR‡DISP_ASR‘calldisp_asr;!‰EXIT†SUB–exit(subroutineexit);*¦end;‰PAGE RQ_EN_11: !*ˆasq_state(asq_ptr)<==asq_en;*ˆrelease(asq);!*ˆdest_ptr<==def_buf(asq_ptr);*ˆcallma_bypass;*ˆcalldisp_asr; *ˆreturn; 4‰AND.B…#SWMD_MASK,D2‡asq_state(asq_ptr)<==asq_en;‰ORI.B…#Q_EN,D2‰MOVE.W„D2,ASQSTATE(A4)‰RELEASE_ASQ–release(asq);6‰MOVE.L„ASQDBUF(A4),A0†dest_buf<==def_buf(asq_ptr);‰BSR‡MA_BYPASS‹callma_bypass;‰BSR‡DISP_ASRŒcalldisp_asr;!‰EXIT†SUB‘exit(subroutineexit);        WT_EN_01:4  *ˆcallcheck_alt_asr;*ˆcallget_asq_buf;*ˆif(error)thendo;*release(asq);*return(error_05);*ˆend; *ˆelsedo;*reset(asq_mt);!*asq_state(asq_ptr)<==asq_en;*release(asq);*callma_import;*callready_asr; *return;*ˆend; %‰BSR.S…CK_ALT_ASRŠcallcheck_alt_asr;‰BSR‡GTASQBUFŒcallget_asq_buf;#‰BRA.S…ASQEV_50if(error)thendo;‰BRA‡ASQ_FULL‘release(asq);*«return(error_05);*¦end; ASQEV_50: *¦elsedo;"‰AND.B…#DBUF_EN,D2Žreset(asq_mt);/‰ORI.B…#Q_EN,D2‘asq_state(asq_ptr)<==asq_en;‰MOVE.W„D2,ASQSTATE(A4)‰RELEASE_ASQ˜release(asq); ‰BSR.S…MA_IMPORTcallma_import;‰BSR‡READY_ASRcallready_asr;!‰EXIT†SUB–exit(subroutineexit);*¦end;         WT_EN_11: !*ˆasq_state(asq_ptr)<==asq_en;*ˆrelease(asq);!*ˆdest_ptr<==def_buf(asq_ptr);*ˆcallma_bypass;*ˆcallready_asr; *ˆreturn; 4‰AND.B…#SWMD_MASK,D2‡asq_state(asq_ptr)<==asq_en;‰ORI.B…#Q_EN,D2‰MOVE.W„D2,ASQSTATE(A4)‰RELEASE_ASQ–release(asq); 6‰MOVE.L„ASQDBUF(A4),A0†dest_buf<==def_buf(asq_ptr); ‰BSR.S…MA_BYPASS‹callma_bypass;‰BSR‡READY_ASR‹callready_asr;!‰EXIT†SUB‘exit(subroutineexit);‰PAGE*check_alt_asr: proc;  3*ˆif(alt_asr_bit(option(pb_ptr))=set)thendo;-*msg_len<==msg_len+len(alt_asr_vector);**if(msg_len>max_ml(asq_ptr))thendo;&*’discard(subroutinereturnaddress);*’release(asq);*’return(error_16);*end;*ˆend;  *end check_alt_asr;  CK_ALT_ASR:1‰TST.B…8(A2)if(alt_asr_bit(op(pb_ptr))=set)‰BPL.S…CK_RETŽthendo; 0‰ADD.L…#4,D0”msg_len<==msg_len+len(vector);2‰CMP.W…ASQML(A4),D0if(msg_len>max_ml)thendo; ‰BHI.S…CK_ERR CK_RET:‰RTS CK_ERR:*‰ADD.L…#4,A7™discard(subreturnaddress);‰RELEASE_ASQrelease(asq);!‰EXIT†RTCDPCNT–return(error_16);*«end;*¦end;‰PAGE7*ma_import:‚proc(src_ptr,dest_ptr,msg_len,msg_code,"*‘client_tcb_ptr,target_tcb_ptr); *…dcl‚src_ptrlongword(A1);*…dcl‚dest_ptrlongword(A0);*…dcl‚msg_lenbyte(D0);*…dcl‚msg_codebyte(D1);*…dcl‚pb_ptrlongword(A2);#*…dcl‚client_tcb_ptrlongword(A6);*…dcl‚target_tcblongword(A5);*…dcl‚asq_ptrlongword(A4);  5*ˆif(alt_asr_bit(option(pb_ptr))=reset)thendo;**asq_xfr(asq_ptr)<==asq_asr(asq_ptr);*gotoimport;*ˆend; *ˆelsedo;.*asq_xfr(asq_ptr)<==alt_asr_addr(pb_ptr);!*(dest_ptr)+<==byte(msg_len);"*(dest_ptr)+<==byte(msg_code);/*(dest_ptr)+<==longword(asr_addr(pb_ptr));@*msg_len<==msg_len-len(msg_len,msg_code,alt_asr_vector);*gotomove_msg;*ˆend;  7*m_import:‚entry(src_ptr,dest_ptr,msg_len,msg_code,"*‘client_tcb_ptr,target_tcb_ptr);  ,*ˆif(alt_asr_bit(option(pb_ptr))=reset)*ˆthengotoimport; *ˆelsedo;!*(dest_ptr)+<==byte(msg_len);"*(dest_ptr)+<==byte(msg_code);/*(dest_ptr)+<==longword(asr_addr(pb_ptr));@*msg_len<==msg_len-len(msg_len,msg_code,alt_asr_vector);*gotomove_msg;*ˆend;‰PAGE7*ma_bypass:proc‚(src_ptr,dest_ptr,msg_len,msg_code,3*’pb_ptr,client_tcb_ptr,target_tcb_ptr,asq_ptr);  *…dcl‚src_ptrlongword(A1);*…dcl‚dest_ptrlongword(A0);*…dcl‚msg_lenbyte(D0);*…dcl‚msg_codebyte(D1);*…dcl‚pb_ptrlongword(A2);#*…dcl‚client_tcb_ptrlongword(A6);*…dcl‚target_tcblongword(A5);*…dcl‚asq_ptrlongword(A4);  **ˆif(alt_asr_bit(option(pb_ptr))=set)/*ˆthenasq_xfr(asq_ptr)<==asr_addr(pb_ptr);/*ˆelseasq_xfr(asq_ptr)<==asq_asr(asq_ptr);*ˆgotoimport;  8*ms_bypass: entry (src_ptr, dest_ptr, msg_len, msg_code,"*’client_tcb_ptr,target_tcb_ptr);  *import: *ˆbyte(dest_ptr)+<==msg_len; *ˆbyte(dest_ptr)+<==msg_code;/*ˆmsg_len<==msg_len-len(msg_len,msg_code)%*ˆif(msg_code=user_event)thendo;"*if(target_tcb=real_timetask)/*thenlongword(dest_ptr)+<==client_tcb_ptr;:*elselongword(dest_ptr)+<==taskname(client_tcb_ptr);4*longwo5 rd(dest_ptr)+<==session(client_tcb_ptr);0*msg_len<==msg_len-len(taskname,session);*ˆend; *ˆmsg_len<==msg_len/4;*ˆif(carry_bit=set),*ˆthenword(dest_ptr)+<==word(src_ptr)+;*ˆdowhile(msg_len>0);/*longword(dest_ptr)+<==longword(src_ptr)+;*msg_len<==msg_len-1;*ˆend;  /*end ma_bypass: ms_bypass: m_import: ma_import;‰PAGE7*ma_import:‚proc(src_ptr,dest_ptr,msg_len,msg_code,"*‘client_tcb_ptr,target_tcb_ptr);  *…dcl‚src_ptrlongword(A1);*…dcl‚dest_ptrlongword(A0);*…dcl‚msg_lenbyte(D0);*…dcl‚msg_codebyte(D1);*…dcl‚pb_ptrlongword(A2);#*…dcl‚client_tcb_ptrlongword(A6);*…dcl‚target_tcblongword(A5);*…dcl‚asq_ptrlongword(A4);  5*ˆif(alt_asr_bit(option(pb_ptr))=reset)thendo;**asq_xfr(asq_ptr)<==asq_asr(asq_ptr);*gotoimport;*ˆend; *ˆelsedo;.*asq_xfr(asq_ptr)<==alt_asr_addr(pb_ptr);!*(dest_ptr)+<==byte(msg_len);"*(dest_ptr)+<==byte(msg_code);/*(dest_ptr)+<==longword(asr_addr(pb_ptr));@*msg_len<==msg_len-len(msg_len,msg_code,alt_asr_vector);*gotomove_msg;*ˆend;  MA_IMPORT:.‰TST.B…8(A2)Šif(alt_asr_bit=reset)thendo;8‰BPL.S…MA_BY_01Œasq_xfr(asq_ptr)<==asq_asr(asq_ptr);*¦gotoimport;*¡end; *¡elsedo;B‰MOVE.L„14(A2),ASQXFR(A4)ƒasq_xfr(asq_ptr)<==alt_asr_addr(pb);.‰BRA.S…M_IM_01(dest_ptr)+<==byte(msg_len);"*¦(dest_ptr)+<==byte(msg_code);'*¦(dest_ptr)+<==longword(asr_addr);*¦(msg_len)<==msg_len-6;*¦gotomove_msg;*¡end;‰PAGE6*m_import:‚proc(src_ptr,dest_ptr,msg_len,msg_code,"*‘client_tcb_ptr,target_tcb_ptr);  ,*ˆif(alt_asr_bit(option(pb_ptr))=reset)*ˆthengotoimport; *ˆelsedo;!*(dest_ptr)+<==byte(msg_len);0*(dest_ptr)+<==byte(alt_asr_bit|msg_code);/*(dest_ptr)+<==longword(asr_addr(pb_ptr));@*msg_len<==msg_len-len(msg_len,msg_code,alt_asr_vector);*gotomove_msg;*ˆend;  M_IMPORT:%‰TST.B…8(A2)Šif(alt_asr_bit=reset) ‰BPL.S…IMPORT‰thengotoimport; M_IM_01: *¡elsedo;0‰MOVE.B„D0,(A0)+Œ(dest_ptr)+<==byte(msg_len);5‰MOVE.B„#$80,(A0)‹(dest_ptr)+<==byte(alt_asr_bit|‰OR.B†D1,(A0)+¢msg_code);:‰MOVE.L„14(A2),(A0)+ˆ(dest_ptr)+<==lword(asr_addr(pb);*¦msg_len<==msg_len-.‰SUB.W…#6,D0“len(msg_len,msg_code,alt_asr);‰BRA.S…MOVE_MSGŒgotomove_msg;*¡end;‰PAGE7*ma_bypass:proc‚(src_ptr,dest_ptr,msg_len,msg_code,3*’pb_ptr,client_tcb_ptr,target_tcb_ptr,asq_ptr);  *…dcl‚src_ptrlongword(A1);*…dcl‚dest_ptrlongword(A0);*…dcl‚msg_lenbyte(D0);*…dcl‚msg_codebyte(D1);*…dcl‚pb_ptrlongword(A2);#*…dcl‚client_tcb_ptrlongword(A6);*…dcl‚target_tcblongword(A5);*…dcl‚asq_ptrlongword(A4);  **ˆif(alt_asr_bit(option(pb_ptr))=set)/*ˆthenasq_xfr(asq_ptr)<==asr_addr(pb_ptr);/*ˆelseasq_xfr(asq_ptr)<==asq_asr(asq_ptr);*ˆgotoimport; MA_BYPASS:#‰TST.B…8(A2)™if(alt_asr_bit=set)‰BPL.S…MA_BY_01 4‰MOVE.L„14(A2),ASQXFR(A4)thenasq_xfr(asq_ptr)<== ‰BRA.S…IMPORTasr_addr(pb_ptr); MA_BY_01:8‰MOVE.L„ASQASR(A4),ASQXFR(A4)‰elseasq_xfr(asq_ptr)<==*µasq_xfr(asq_ptr);‰PAGE8*ms_bypass: entry (src_ptr, dest_ptr, msg_len, msg_code,"*’client_tcb_ptr,target_tcb_ptr);  *…dcl‚src_ptrlongword(A1);*…dcl‚dest_ptrlongword(A0);*…dcl‚msg_lenbyte(D0);*…dcl‚msg_codebyte(D1);#*…dcl‚client_tcb_ptrlongword(A6);*…dcl‚target_tcblongword(A5);  *import:*ˆbyte(dest_ptr)+<==msg_len; *ˆbyte(dest_ptr)+<==msg_code;/*ˆmsg_len<==msg_len-len(msg_len,msg_code)%*ˆif(msg_code=user_event)thendo;"*if(target_tcb=real_timetask)/*thenlongword(dest_ptr)+<==client_tcb_ptr;:*elselongword(dest_ptr)+<==taskname(client_tcb_ptr);4*longword(dest_ptr)+<==session(client_tcb_ptr);0*msg_len<==msg_len-len(taskname,session);*ˆend; *move_msg:*ˆmsg_len<==msg_len/4;*ˆif(carry_bit=set),*ˆthenword(dest_ptr)+<==word5 (src_ptr)+;*ˆdowhile(msg_len>0);/*longword(dest_ptr)+<==longword(src_ptr)+;*msg_len<==msg_len-1;*ˆend;  $*end ma_bypass: ms_bypass: m_import;‰PAGE*ˆbyte(dest_ptr)+<==msg_len; *ˆbyte(dest_ptr)+<==msg_code;0*ˆmsg_len<==msg_len-len(msg_len,msg_code); MS_BYPASS:IMPORT:‰PUT_LC  %*ˆif(msg_code=user_event)thendo;&*if(target_tcb_ptr=real_timetask)/*thenlongword(dest_ptr)+<==client_tcb_ptr;:*elselongword(dest_ptr)+<==taskname(client_tcb_ptr);4*longword(dest_ptr)+<==session(client_tcb_ptr);0*msg_len<==msg_len-len(taskname,session);*ˆend; MOVE_MSG:7‰CMP.B…#EVNTUSER,D1ˆif(msg_code=user_event)thendo;‰BNE.S…M_MOV_3 5‰BTSTW…#TSKARTIM,TCBATTR(A5)„if(target<>real-time)‰BNE.S…M_MOV_1 .‰MOVE.L„TCBNAME(A6),(A0)+ˆthen(dest_ptr)+<==)‰BRA.S…M_MOV_2—taskname(client_tcb_ptr);M_MOV_1:1‰MOVE.L„A6,(A0)+‘else(dest_ptr)+<==client_tcb; M_MOV_2:*‰MOVE.L„TCBSESSN(A6),(A0)+‡(dest_ptr)+<==*µsession(client_tcb);"‰SUB.B…#8,D0”msg_len<==msg_len-*°len(taskname,session);*¦end;‰PAGE*ˆmsg_len<==msg_len/4;*ˆif(carry_bit=set),*ˆthenword(dest_ptr)+<==word(src_ptr)+; *ˆdowhile(msg_len>0);/*longword(dest_ptr)+<==longword(src_ptr)+;*msg_len<==msg_len-1;*ˆend; M_MOV_3:‰PUT_MSG‰RTS *end m_import: m_bypass;‰ENDééééééé=/*=/*†M68XXX.ASQFREE.AF=/*,=/* Chain file to assemble M68XXX.ASQFREE.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.ASQFREE.LS=/*=/IFC \1ƒ=ARGM68XXX.ASQFREE.LS=/ENDIF=/*3=ASM M68XXX.ASQFREE.SA,M68XXX.ASQFREE.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.ASQ.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDé6 éééééµ0ASQFREE‚IDNT‚5,2‚68xxxDIRECTIVE--DEALLOCATEASQO*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***=***…FILE:‚ASQFREE-TRAP#1&TRAP#0-DEALLOCATEANASQŽ******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***D***…FUNCTION:‚ASQFREEwilldeallocatethememoryallocatedfora‡***:***task'sASQ.‚Itwillalsoensurethatthetaskwill†***=***notbedispatched,onelasttime,tothenon-existant„******ASR.***É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ. ******É******É******…ENTRYCONDITIONS:³***%***‹ASQFREE:‚A6=client_tcb_ptr; ***#***‹DASQX:„A4=target_tcb_ptr; ******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******‹D0=0„Success;¬******É******É***O*******************************************************************************O*******************************************************************************O*^*****************************************************************************‰PAGE*,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------)*…09/02/84‚MSLŒRe-wroteasstatemachine.*…06/25/84‚SPT*…07/02/79‚HLD6*…04/10/79‚GGC3* * *‚XDEF's.*‰XDEF†ASQFREETRAP#1entry;$‰XDEF†SBDASQXEXECsubroutineentry; * *‚XREF's.*‰XREF.S„KILLER **‚Includedfiles:**ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.ASQ.MC*ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*‰NOLIST‰INCLUDEƒ9995.&.ASQ.EQ‰INCLUDEƒ9995.&.ASQ.MC‰INCLUDEƒ9995.&.STR.EQ¾EÇWωINCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰LIST‰SECTIONLEVEL04‰PAGE*asqfree: proc (target_tcb_ptr)  $*ˆtarget_tcb_ptr<==client_tcb_ptr;*ˆcallsb_dasqx;*ˆexit(subroutineexit);  *end asqfree;‰PAGE*asqfree: 6 proc (target_tcb_ptr)  $*ˆtarget_tcb_ptr<==client_tcb_ptr;*ˆcallsb_dasqx;*ˆexit(subroutineexit);$*ˆtarget_tcb_ptr<==client_tcb_ptr; ASQFREE:/‰MOVE.L„A6,A4…target_tcb_ptr<==client_tcb_ptr‰BSR.S…SBDASQXƒcallsb_dasqx;!‰EXIT†SUB‡exit(subroutineexit); *end asqfree;‰PAGE!*sb_dasqx: proc (target_tcb_ptr);  '*ˆasq_ptr<==tcb_asq(target_tcb_ptr);*ˆif(asq_ptr<>0)thendo;*freeze(asq);*tcb_asq(tcb_ptr)<==0;/*reset(tsk2evwk(tcbstat2(target_tcb_ptr)));*release(asq);9*asq_end<==(asq_top(asq_ptr)+max_ml(asq_ptr)+4);1*asq_pages<==(asq_end-asq_ptr+#$FF)/256;%*callpagefree(asq_ptr,asq_pages); *if(error)*thencallkiller;*ˆend;  *end sb_dasqx;‰PAGE'*ˆasq_ptr<==tcb_asq(target_tcb_ptr);*ˆif(asq_ptr<>0)thendo;*freeze(asq);*tcb_asq(tcb_ptr)<==0;/*reset(tsk2evwk(tcbstat2(target_tcb_ptr)));*release(asq); SBDASQX:;‰MOVE.L„TCBASQ(A4),A0‡asq_ptr<==tcb_asq(target_tcb_ptr);(‰MOVE.L„A0,D1if(asq_ptr<>0)thendo;‰BEQ.S…ASQFR_01 ‰FREEZE_ASQ™freeze(asq);1‰CLR.L…TCBASQ(A4)tcb_asq(target_tcb_ptr)<==0;?‰BCLR†#TSK2EVWK,TCBSTAT2(A4)ƒreset(tck2evwk(tcbstat2(tcb)));*«release(asq); ‰RELEASE_ASQ  9*asq_end<==(asq_top(asq_ptr)+max_ml(asq_ptr)+4);1*asq_pages<==(asq_end-asq_ptr+#$FF)/256;%*callpagefree(asq_ptr,asq_pages); *if(error)*thencallkiller;*ˆend;  *end asqfree; ‰MOVE.L„#4,D1”asq_end<==4&‰ADD.W…ASQML(A0),D1™+max_ml(asq_ptr))‰ADD.L…ASQTOP(A0),D1˜+asq_top(asq_ptr); -‰SUB.L…A0,D1”asq_pages<==(asq_end-asq_ptr‰ADD.L…#$FF,D1¡+#$FF)‰ASR.L…#8,D1£/256;%*«callpagefree(asq_ptr,asq_pages); ‰TR0.PGFR‰BRA.S…ASQFR_01‘if(error)‰BSR‡KILLER“thencallkiller;*¦end; ASQFR_01: ‰RTS›return;‰ENDééééééé=/*=/*†M68XXX.ASQGET.AF=/*+=/* Chain file to assemble M68XXX.ASQGET.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M68XXX.ASQGET.LS=/*=/IFC \1ƒ=ARGM68XXX.ASQGET.LS=/ENDIF=/*1=A7 SM M68XXX.ASQGET.SA,M68XXX.ASQGET.RO,\1;MRZ=065=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.ASQ.MC=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.SRVR.EQ=/*}=/*=ENDéééééé×4GTEVENTIDNT‚6,0‚68xxxDIRECTIVE--GETEVENT07/13/84O*******************************************************************************O*******************************************************************************O**********************************************************************************É***/***…FILE:‚GTEVENT-TRAP#1HANDLER-GTEVNT›*****É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***>***…FUNCTION:‚ThisroutinewillgetaneventfromtheASQ,Œ***2***ifthereisone.‚Ifnot,itwilllpacetheŽ***6***taskintoawaitstateuntilaneventarrives.‹******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ. ******É******É******…ENTRYCONDITIONS:³***?***‡A0=addr(receivebuffer).‚Validif(dbuf_en=reset).Š******‡A6=client_tcb_ptr.®******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É******‡D0=0ƒSuccess.±***%***‡Eventisineffectivebuffer.¥******if(dbuf_en=set)ª***/***theneffectivebuffer=defaultbuffer;•***#***elseeffectivebuffer=A0;¡******É******‡D0<>0ƒFAILURE.°******É***5***Thefollowingerrorcodesarereturnedinthe******lower1/2ofD0.¬***(***‘RTCDNTBL-‚4‚ASQdoesnotexist.–***>***‘RTCDADR1-12‚Bufferisnotincaller'saddressspace.***9***‘RTCDSTAT-10‚ASRisenabled.‚Thisisnotavalid…***!*** stateforthisdirective.******É***O*******************************************************************************O*******************************************************************************O*^*****************************************************************************‰PAGE,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------*…08/31/84‚MSLŒInitialwriting.*7 à4éoñyù[W ^LC * *‚XDEF's.*‰XDEF†A_EXPORT‰XDEF†APPEND_PB ‰XDEF†GTEVENT‰XDEF†S_EXPORT * *‚XREF's.*‰XREF.S„KILLER **‚Includedfiles:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.ASQ.MC*ˆINCLUDEƒ9995.&.TST.EQ*ˆINCLUDEƒ9995.&.SRVR.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.ASQ.EQ‰INCLUDEƒ9995.&.ASQ.MC‰INCLUDEƒ9995.&.TST.EQ‰INCLUDEƒ9995.&.SRVR.EQ‰LIST‰SECTIONLEVEL04‰PAGE)*gtevent: proc (rcv_buf, client_tcb_ptr):  *„dcl‚rcv_buflongword(A0);$*„dcl‚client_tcb_addrlongword(A6);  $*ˆtarget_tcb_ptr<==client_tcb_ptr; '*ˆasq_ptr<==tcb_asq(client_tcb_ptr);*ˆif(asq_ptr=0)*ˆthenreturn(error_04); *ˆelsedo; *freeze(asq);$*docase(asq_state,asq_sw_modes); *ˆend;  *end gtevent;‰PAGEGTEVENT: $*ˆtarget_tcb_ptr<==client_tcb_ptr; '*ˆasq_ptr<==tcb_asq(client_tcb_ptr);*ˆif(asq_ptr=0)*ˆthenreturn(error_04); 0‰MOVE.L„A6,A5target_tcb_ptr<==client_tcb_ptr; ;‰MOVE.L„TCBASQ(A6),A4‡asq_ptr<==tcb_asq(client_tcb_ptr);‰MOVE.L„A4,D0if(asq_ptr=0)'‰BEQ.S…ASQGERR4Œthenreturn(error_04); *ˆelsedo; *freeze_asq;$*docase(asq_state,asq_sw_modes);*ˆend; ‰FREEZE_ASQ‰MOVE.W„ASQSTATE(A4),D2‰MOVE.W„GT_EV_TBL(PC,D2.W),A2‰JMP‡GT_EV_TBL(PC,A2.W)   ASQGERR4:!‰EXIT†RTCDNTBL–return(error_04);‰PAGE GT_EV_TBL: ‰DC.W†RQ_DIS00-GT_EV_TBL‰DC.W†RQ_DIS01-GT_EV_TBL‰DC.W†RQ_DIS10-GT_EV_TBL‰DC.W†RQ_DIS11-GT_EV_TBL ‰DC.W†Q_EN_00-GT_EV_TBL‰DC.W†Q_EN_01-GT_EV_TBL‰DC.W†Q_EN_10-GT_EV_TBL‰DC.W†Q_EN_11-GT_EV_TBL ‰DC.W†R_EN_00-GT_EV_TBL‰DC.W†R_EN_01-GT_EV_TBL‰DC.W†R_EN_10-GT_EV_TBL‰DC.W†R_EN_11-GT_EV_TBL ‰DC.W†RQ_EN_00-GT_EV_TBL‰DC.W†RQ_EN_01-GT_EV_TBL‰DC.W†RQ_EN_10-GT_EV_TBL‰DC.W†RQ_EN_11-GT_EV_TBL ‰DC.W†WT_EN_00-GT_EV_TBL‰DC.W†WT_EN_01-GT_EV_TBL‰DC.W†WT_EN_10-GT_EV_TBL‰DC.W†WT_EN_11-GT_EV_TBL ‰DC.W†GT_EN_00-GT_EV_TBL‰DC.W†GT_EN_01-GT_EV_TBL‰DC.W†GT_EN_10-GT_EV_TBL‰DC.W†GT_EN_11-GT_EV_TBL‰PAGE WT_EN_00: WT_EN_01: WT_EN_10: WT_EN_11: GT_EN_00: GT_EN_01: GT_EN_10: GT_EN_11: *ˆrelease(asq);*ˆcallkiller; ‰RELEASE_ASQ“release(asq);‰BSR‡KILLERŽcallkiller;        R_EN_00:R_EN_01:R_EN_10:R_EN_11: RQ_EN_00: RQ_EN_01: RQ_EN_10: RQ_EN_11: RQ_DIS01: RQ_DIS11: *ˆrelease(asq);*ˆreturn(error_10); ‰RELEASE_ASQ‰EXIT†RTCDSTAT‰PAGE RQ_DIS00:Q_EN_00: *ˆasq_state(asq_ptr)<==q_en;*ˆrelease(asq);&*ˆif(client_tcb_ptr=real-timetask)*ˆthendest_ptr<==A0; *ˆelsedo;*dest_ptr<==logphy(A0); *if(error)*thenreturn(error_12);*ˆend;*ˆcalls_export(dest_ptr);*ˆexit(subroutineexit); 2‰AND.W…#SWMD_MASK,D2‘asq_state(asq_ptr)<==q_en;‰ORI.B…#Q_EN,D2‰MOVE.W„D2,ASQSTATE(A4) ‰RELEASE_ASQrelease(asq);9‰BTSTW…#TSKARTIM,TCBATTR(A6)‰if(client=real-timetask)$‰BNE.S…GTEV_31—thendest_ptr<==A0; ‰CLR.L…D5‰MOVE.W„ASQML(A4),D5=‰TR0.LOGPHY,A0,‹elsedest_ptr<==logphy(A0);‰BRA.S…GTEV_30—if(error) ‰NOP ASQRER12:&‰EXIT†RTCDADR1›thenreturn(error_12); GTEV_30: ‰MOVE.L„D6,A0 GTEV_31:‰BSR.S…S_EXPORT–calls_export;!‰EXIT†SUB›exit(subroutineexit);        Q_EN_01: (*ˆif(client<>real-timetask)thendo;6*A0_buf(asq_ptr)<==log_phy(A0,max_ml(asq_ptr));*if(error)thendo;*’release(asq);*’return(error_12);*end;*ˆend;*ˆelseA0_buf(asq_ptr)<==A0; :‰BTSTW…#TSKARTIM,TCBATTR(A6)‰if(client<>real-timetask)‰BNE.S…GTEV_41—thendo; ‰CLR8 .L…D5‰MOVE.W„ASQML(A4),D53‰TR0.LOGPHY,A0,A0_buf(asq_ptr)<==#‰BRA.S…GTEV_40œlogphy(A0,max_ml);‰NOPªif(error)thendo;‰RELEASE_ASQ§release(asq);"‰BRA.S…ASQRER12 return(error_12);*µend;*°end; GTEV_40: ‰MOVE.L„D6,A0 GTEV_41:5‰MOVE.L„A0,ASQA0BUF(A4)elseA0_buf(asq_ptr)<==A0; Q_EN_11: *ˆasq_state(asq_ptr)<==gt_en;*ˆrelease(asq);*ˆexit(postempt); 3‰AND.W…#SWMD_MASK,D2‘asq_state(asq_ptr)<==gt_en;‰ORI.B…#GT_EN,D2‰MOVE.W„D2,ASQSTATE(A4) ‰RELEASE_ASQ˜release(asq);)‰EXIT†POSTEMPT‘exit(postemptthistask);        RQ_DIS10:Q_EN_10: *ˆasq_state(asq_ptr)<==q_en;*ˆrelease(asq);!*ˆdest_ptr<==def_buf(asq_ptr);*ˆcalls_export(dest_buf);*ˆexit(subroutine); 2‰AND.W…#SWMD_MASK,D2‘asq_state(asq_ptr)<==q_en;‰ORI.B…#Q_EN,D2‰MOVE.W„D2,ASQSTATE(A4) ‰RELEASE_ASQ“release(asq);6‰MOVE.L„ASQDBUF(A4),A0†dest_ptr<==def_buf(asq_ptr);)‰BSR.S…S_EXPORTŒcalls_export(dest_ptr);‰EXIT†SUB‘exit(subroutine);‰PAGE4*a_export: proc (dest_ptr, asq_ptr, target_tcb_ptr);  *„dcl‚dest_ptrlongword(A0);*„dcl‚asq_ptrlongword(A4)#*„dcl‚target_tcb_ptrlongword(A5);  *ˆget(asq_xfrvector);  5*s_export: entry (dest_ptr, asq_ptr, target_tcb_ptr);  *„dcl‚dest_ptrlongword(A0);*„dcl‚asq_ptrlongword(A4)#*„dcl‚target_tcb_ptrlongword(A5);  *ˆsrc_ptr<==asq_get(asq_ptr);*ˆmsg_len<==byte(src_ptr)+;*ˆmsg_code<==byte(src_ptr)+;!*ˆreset(alt_asr_bit(msg_code));.*ˆif(alt_asr_bit(msg_code)wasset)thendo;'*src_ptr<==src_ptr+len(longword);'*msg_len<==msg_len-len(longword);*ˆend; *ˆ(dest_buf)+<==msg_len;*ˆ(dest_buf)+<==msg_code;0*ˆmsg_len<==msg_len-len(msg_len,msg_code);'*ˆmsg_len<==msg_len/len(longword);*ˆif(carry_bit=set)&*ˆthen(dest_ptr)+<==word(src_ptr)+*ˆdowhile(msg_len>0);&*(dest_ptr)+<==longword(src_ptr)+;*msg_len<==msg_len-1;*ˆend; *ˆfreeze(asq); *ˆasq_get(asq_ptr)<==src_ptr;2*ˆasq_count(asq_ptr)<==asq_count(asq_ptr)-1;*ˆif(asq_count(asq_ptr)=0),*ˆthenset(asq_mt(asq_st_mode(asq_ptr)));*ˆrelease(asq); *ˆif*ˆ(msg_code=server_event)*ˆthencallappend_pb; *end export;‰PAGE$*a_export: proc (dest_ptr, asq_ptr);  *„dcl‚dest_ptrlongword(A0);*„dcl‚asq_ptrlongword(A4)  *ˆget(asq_xfrvector); A_EXPORT:!‰GET_ASQXFR”get(asq_xfrvector);  %*s_export: entry (dest_ptr, asq_ptr);  *„dcl‚dest_ptrlongword(A0);*„dcl‚asq_ptrlongword(A4)  *ˆsrc_ptr<==asq_get(asq_ptr);*ˆmsg_len<==byte(src_ptr)+;*ˆmsg_code<==byte(src_ptr)+; S_EXPORT:4‰MOVE.L„ASQGET(A4),A1‡src_ptr<==asq_get(asq_ptr); ‰CLR.L…D0-‰MOVE.B„(A1)+,D0Œmsg_len<==byte(src_ptr)+;.‰MOVE.B„(A1)+,D1Œmsg_code<==byte(src_ptr)+;  !*ˆreset(alt_asr_bit(msg_code));.*ˆif(alt_asr_bit(msg_code)wasset)thendo;'*src_ptr<==src_ptr+len(longword);'*msg_len<==msg_len-len(longword);*ˆend; /‰BCLR†#BIT_7,D1‹reset(alt_asr_bit(msg_code));1‰BEQ.S…EXPRT_01Œif(alt_asr_bitwasset)thendo; 0‰ADDQ.L„#4,A1”src_ptr<==src_ptr+len(lword);/‰SUB.W…#4,D0”msg_len<==msg_len-len(lword);*¦end;  *ˆ(dest_buf)+<==msg_len;*ˆ(dest_buf)+<==msg_code;0*ˆmsg_len<==msg_len-len(msg_len,msg_code); EXPRT_01:‰PUT_LC  '*ˆmsg_len<==msg_len/len(longword);*ˆif(carry_bit=set)&*ˆthen(dest_ptr)+<==word(src_ptr)+*ˆdowhile(msg_len>0);&*(dest_ptr)+<==longword(src_ptr)+;*msg_len<==msg_len-1;*ˆend; ‰PUT_MSG  *ˆfreeze(asq);"*ˆif(src_ptr>asq_top(asq_ptr);%*ˆthensrc_ptr<==asq_bot(asq_ptr); *ˆasq_get(asq_ptr)<==src_ptr;2*ˆasq_count(asq_ptr)<==asq_count(asq_ptr)-1;*ˆif(asq_count(asq_ptr)=0),*ˆthenset(asq_mt(asq_st_mode(asq_ptr)));*ˆrelease(asq); *¦freeze(asq); ‰FREEZE_ASQ5‰CMP.L…ASQTOP(A4),A1‡if(src_ptr>asq_top(as8 q_ptr))‰BCS.S…EXPRT_029‰MOVE.L„ASQBOT(A4),A1‡thensrc_ptr<==asq_bot(asq_ptr); EXPRT_02:4‰MOVE.L„A1,ASQGET(A4)‡asq_get(asq_ptr)<==src_ptr;5‰SUB.W…#1,ASQCNT(A4)‡dec(asq_count(asq_ptr),by1); ,‰BNE.S…EXPRT_03Œif(asq_count(asq_ptr)=0)‰BSET†#ASQMTBIT,ASQSWMD2(A4)!*¦thenset(asq_mt(asq_st_mode); EXPRT_03:‰RELEASE_ASQ“release(asq);  *ˆif*ˆ(msg_code=server_event)*ˆthencallappend_pb; *ˆreturn; *end export; ‰CHECK_PB‰RTS‰PAGE6*append_pb: proc (dest_ptr', asq_ptr, server_tcb_ptr);  *„dcl‚dest_ptr'longword(A0);*„dcl‚asq_ptrlongword(A4);#*„dcl‚server_tcb_ptrlongword(A5);  C*(NOTE:‚Dest_ptr'pointstothelocationatthebeginningofthepb>*ˆpartofthedestinationbuffer,immediatelyaftertheserver*ˆevent.‚(Seefigure1). >*ˆTherefore,wecanuseallofthepre-definedequatesforthe<*ˆserverevent,butwemustbiasthembythenegativelength*ˆoftheserverevent.  *œ_____________________‡_____ *ˆdest_ptr‚----->„|‚/ƒ/ƒ/ƒ/ƒ/|‰^*œ|/ƒ/ƒ/ƒ/ƒ/|‰|*œ|/ƒ/ƒ/ƒ/ƒ/‚|‰|*œ|ƒ/ƒ/ƒ/ƒ/ƒ|‰|*œ|‚/ƒ/ƒ/ƒ/ƒ/|‰|*œ|/ƒ/ƒ/ƒ/ƒ/|‰|*œ|/ƒ/ƒ/ƒ/ƒ/‚|†server_*œ|ƒ/ƒ/ƒ/ƒ/ƒ|†event_*œ|‚/ƒ/ƒ/ƒ/ƒ/|†part*œ|/ƒ/ƒ/ƒ/ƒ/|‰|*œ|/ƒ/ƒ/ƒ/ƒ/‚|‰|*œ|ƒ/ƒ/ƒ/ƒ/ƒ|‰|*œ|‚/ƒ/ƒ/ƒ/ƒ/|‰|*œ|/ƒ/ƒ/ƒ/ƒ/|‰|*œ|/ƒ/ƒ/ƒ/ƒ/‚|‰v*œ|-------------------|‡-----*ˆdest_ptr'----->„|“|‰^*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰| *œ|“|‡pb_ *œ|“|‡part*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰|*œ|“|‰v*œ---------------------‡-----  *¡(figure1)‰PAGE**ˆclient_tcb_ptr<==tcb_addr(dest_ptr');*ˆif(server<>real_timetask):*ˆthentaskname(dest_ptr')<==taskname(client_tcb_ptr);*ˆif-*ˆ(term_bit(trap_field(dest_ptr'))=set)|*ˆ(pb_size(dest_ptr')=0),*ˆthenreturn(pb_stat(dest_ptr')=no_pb); *ˆelsedo;*src_ptr<==A0(dest_ptr');*if(src_ptr=odd_addr)-*thenreturn(pb_stat(dest_ptr')=bad_pb); *elsedo;"*’msg_len<==pb_size(dest_ptr');2*’space<==max_ml(asq_ptr)-len(server_event);*’if(space=0),*’thenreturn(pb_stat(dest_ptr')=no_pb); *’elsedo;*—space<==space-msg_len;*—if(space<0)thendo;'*œpb_stat(dest_ptr')<==pb_part_move;*œmsg_len<==msg_len+space;"*œpb_size(dest_ptr')<==msg_len;*—end;(*—if(client<>real-timetask)thendo;(*œsrc_ptr<==logphy(src_ptr,msg_len); *œif(error)-*œthenreturn(pb_stat(dest_ptr')=bad_pb);*—end; '*—msg_len<==msg_len/len(longword);*—if(carry_bit=set)(*—then(dest_ptr')+<==word(src_ptr)+;*—dowhile(msg_len>0);'*œ(dest_ptr')+<==longword(src_ptr)+;*œmsg_len<==msg_len-1;*—end;*’end;*end;*ˆend;  *end append_pb;‰PAGE**ˆclient_tcb_ptr<==tcb_addr(dest_ptr');*ˆif(server<>real_timetask):*ˆthentaskname(dest_ptr')<==taskname(client_tcb_ptr); APPEND_PB: 3‰MOVE.L„TYP7TASK-TYP7PBLK(A0),A2†client_tcb_ptr<==*¸tcb_addr(dest_ptr');:‰BTSTW…#TSKARTIM,TCBATTR(A5)‰if(server<>real-timetask),‰BNE.S…APPB_01—thentaskname(dest_ptr')<==B‰MOVE.L„TCBNAME(A2),TYP7TASK-TYP7PBLK(A0)‚taskname(client_tcb_ptr  *ˆif-*ˆ(term_bit(trap_field(dest_ptr'))=set)|*ˆ(pb_size(dest_ptr')=0),*ˆthenreturn(pb_stat(dest_ptr')=no_pb); APPB_01:*‰BTST†#TYP7TTRM+8,TYP7TRAP-TYP7PBLK(A0)‚if#‰BNE.S…APPB_NOPBš(term_bit=set)| ‰CLR.L…D1¡(pb_size=0),‰MOVE.B„TYP7PBSZ-TYP7PBLK(A0),D1‹thenreturn#‰BEQ.S…APPB_NOPBŸ(pb_stat=no_pb);  *ˆelsedo;*src_ptr<==A0(dest_ptr');*if(src_ptr=odd_addr)-*thenreturn(pb_stat(dest_ptr')=bad_pb); 9‰MOVE.L„TYP7A0-TYP7PBLK(A0),D6‡src_ptr<==A0(dest_ptr);#‰BTST†#0,D6˜if(src_ptr=odd_addr)1‰BNE.S…APPB_BADPB“thenreturn(pb_stat=bad_pb;  *elsedo;"*’msg_len<==pb_size(dest_ptr');2*’space<==max_ml(asq_ptr)-len(server_event);*’if(space=0),*’thenreturn(pb_stat(dest_ptr')=no_pb); '*¦msg_len<==pb_size;‚/9 *fromabove*/1‰MOVE.W„ASQML(A4),D0ˆspace<==max_ml(asq_ptr)-'‰SUB.W…#TYP7PBLK,D0’len(server_event);‰BEQ.S…APPB_NOPB‹if(space=0) *¦thenreturn(pb_stat=no_pb); *’elsedo;*—space<==space-msg_len;*—if(space<0)thendo;'*œpb_stat(dest_ptr')<==pb_part_move;*œmsg_len<==msg_len+space;"*œpb_size(dest_ptr')<==msg_len;*—end; '‰SUB.W…D1,D0space<==space-msg_len;&‰BGE.S…APPB_02if(space<0)thendo;*«pb_stat<==pb_part_move; '‰MOVE.B„#T7STPART,TYP7PBST-TYP7PBLK(A0))‰ADD.W…D0,D1”msg_len<==msg_len+space; A‰MOVE.B„D1,TYP7PBSZ-TYP7PBLK(A0)pb_size(dest_ptr')<==msg_len;*¦end;  (*—if(client<>real-timetask)thendo;(*œsrc_ptr<==logphy(src_ptr,msg_len); *œif(error)-*œthenreturn(pb_stat(dest_ptr')=bad_pb);*—end; APPB_02::‰BTSTW…#TSKARTIM,TCBATTR(A2)„if(client<>real-timetask)‰BEQ.S…APPB_04’thensrc_ptr<==*°logphy(src_ptr,msg_len);APPB_03:‰MOVE.L„D6,A1”(A1<==src_ptr;)  '*—msg_len<==msg_len/len(longword);*—if(carry_bit=set)(*—then(dest_ptr')+<==word(src_ptr)+;*—dowhile(msg_len>0);'*œ(dest_ptr')+<==longword(src_ptr)+;*œmsg_len<==msg_len-1;*—end;*’end;*end;*ˆend; ‰PUT_MSG1 APPB_EXIT:‰RTS‰PAGEAPPB_04:1‰MOVE.L„A0,-(A7)‘(SAVEA0-logphyblowsitaway)*‰TR0.LOGPHY,,D1†src_ptr<==*‰BRA.S…APPB_05–log_phy(src_ptr,msg_len);‰NOP if(error) APPB_BADPB:‰MOVE.L„(A7)+,A0‘(RESTOREA0)6‰MOVE.W„#T7STPADR<<8,TYP7PBST-TYP7PBLK(A0)thenreturn$‰BRA.S…APPB_EXITŸ(pb_stat=bad_pb); APPB_NOPB:6‰MOVE.W„#T7STNORQ<<8,TYP7PBST-TYP7PBLK(A0)thenreturn#‰BRA.S…APPB_EXITŸ(pb_stat=no_pb); APPB_05:‰MOVE.L„(A7)+,A0‰BRA.S…APPB_03 *end append_pb;‰PAGE‰ENDé=/*=/*†M68XXX.ASQREAD.AF=/*,=/* Chain file to assemble M68XXX.ASQREAD.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.ASQREAD.LS=/*=/IFC \1ƒ=ARGM68XXX.ASQREAD.LS=/ENDIF=/*3=ASM M68XXX.ASQREAD.SA,M68XXX.ASQREAD.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.ASQ.MC=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.SRVR.EQ=/*}=/*=ENDééééé9 é!5ASQREADIDNT‚6,0‚68xxxDIRECTIVE--READEVENT07/13/84O*******************************************************************************O*******************************************************************************O**********************************************************************************É***0***…FILE:‚ASQREAD-TRAP#1HANDLER-RDEVNT›******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***?***…FUNCTION:‚ThisroutinewillreadaneventfromtheASQ,Œ***2***ifthereisone.‚Ifnot,itwillreturnanŽ***&***eventoflength=0,code=0.›******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ. ******É******É******…ENTRYCONDITIONS:³***?***‡A0=addr(receivebuffer).‚Validif(dbuf_en=reset).Š******‡A6=client_tcb_ptr.®******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É******‡D0=0‚Success;²******É***%***‡Eventisineffectivebuffer.¥******if(dbuf_en=set)ª***/***theneffectivebuffer=defaultbuffer;•***#***elseeffectivebuffer=A0;¡******É******‡D0<>0Failure;²******É***5***ŠThefollowingerrorcodesarereturnedinD0:’******É***4***ŒRTCDNTBL-04‚Requiredtabledoesnotexist.******É***4***ŒRTCDSTAT-10‚Stateoftargettasknotvalid******›forthisdirective.›******É***/***ŒRTCDADR1-12‚Addressofsomeparameter•***$***›notinuser'saddressspace.’******É******É***O*******************************************************************************O*******************************************************************************O*^*****************************************************************************‰PAGE,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------*73o;†C*…04/26/79‚GGC3‹Revision2.00*…03/02/81‚HLD6%*…06/25/84‚SPTŒImplementedautoread.* * *‚XDEF's.* ‰XDEF†ASQREAD * *‚XREF's.*‰XREF.S„KILLER‰XREF.S„S_EXPORT **‚Includedfiles:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.ASQ.MC*ˆINCLUDEƒ9995.&.TST.EQ*ˆINCLUDEƒ9995.&.SRVR.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.ASQ.EQ‰INCLUDEƒ9995.&.ASQ.MC‰INCLUDEƒ9995.&.TST.EQ‰INCLUDEƒ9995.&.SRVR.EQ‰LIST‰SECTIONLEVEL04‰PAGE)*asqread: proc (rcv_buf, client_tcb_ptr):  *„dcl‚rcv_buflongword(A0);$*„dcl‚client_tcb_addrlongword(A6);  $*ˆtarget_tcb_ptr<==client_tcb_ptr; '*ˆasq_ptr<==tcb_asq(client_tcb_ptr);*ˆif(asq_ptr=0)*ˆthenreturn(error_04); *ˆelsedo; *freeze(asq);$*docase(asq_state,asq_sw_modes); *ˆend;  *end asqread;‰PAGEASQREAD: $*ˆtarget_tcb_ptr<==client_tcb_ptr; '*ˆasq_ptr<==tcb_asq(client_tcn_ptr);*ˆif(asq_ptr=0)*ˆthenreturn(error_04); 0‰MOVE.L„A6,A5target_tcb_ptr<==client_tcb_ptr; ;‰MOVE.L„TCBASQ(A6),A4‡asq_ptr<==tcb_asq(client_tcb_ptr);‰MOV: E.L„A4,D0if(asq_ptr=0)'‰BEQ.S…ASQRERR4Œthenreturn(error_04); *ˆelsedo; *freeze_asq;$*docase(asq_state,asq_sw_modes);*ˆend; ‰FREEZE_ASQ‰MOVE.W„ASQSTATE(A4),D2‰MOVE.W„RD_EV_TBL(PC,D2.W),A2‰JMP‡RD_EV_TBL(PC,A2.W)   ASQRERR4:!‰EXIT†RTCDNTBLŒreturn(error_04);‰PAGE RD_EV_TBL: ‰DC.W†RQ_DIS00-RD_EV_TBL‰DC.W†RQ_DIS01-RD_EV_TBL‰DC.W†RQ_DIS10-RD_EV_TBL‰DC.W†RQ_DIS11-RD_EV_TBL ‰DC.W†Q_EN_00-RD_EV_TBL‰DC.W†Q_EN_01-RD_EV_TBL‰DC.W†Q_EN_10-RD_EV_TBL‰DC.W†Q_EN_11-RD_EV_TBL ‰DC.W†R_EN_00-RD_EV_TBL‰DC.W†R_EN_01-RD_EV_TBL‰DC.W†R_EN_10-RD_EV_TBL‰DC.W†R_EN_11-RD_EV_TBL ‰DC.W†RQ_EN_00-RD_EV_TBL‰DC.W†RQ_EN_01-RD_EV_TBL‰DC.W†RQ_EN_10-RD_EV_TBL‰DC.W†RQ_EN_11-RD_EV_TBL ‰DC.W†WT_EN_00-RD_EV_TBL‰DC.W†WT_EN_01-RD_EV_TBL‰DC.W†WT_EN_10-RD_EV_TBL‰DC.W†WT_EN_11-RD_EV_TBL ‰DC.W†GT_EN_00-RD_EV_TBL‰DC.W†GT_EN_01-RD_EV_TBL‰DC.W†GT_EN_10-RD_EV_TBL‰DC.W†GT_EN_11-RD_EV_TBL‰PAGE WT_EN_00: WT_EN_01: WT_EN_10: WT_EN_11: GT_EN_00: GT_EN_01: GT_EN_10: GT_EN_11: *ˆrelease(asq);*ˆcallkiller; ‰RELEASE_ASQ ‰BSR‡KILLER        R_EN_00:R_EN_01:R_EN_10:R_EN_11: RQ_EN_00: RQ_EN_01: RQ_EN_10: RQ_EN_11: *ˆrelease(asq);*ˆreturn(error_10); ‰RELEASE_ASQ‰EXIT†RTCDSTAT        RQ_DIS00:Q_EN_00: *ˆrelease(asq);&*ˆif(client_tcb_ptr=real-timetask)*ˆthendest_ptr<==A0; *ˆelsedo;*dest_ptr<==logphy(A0); *if(error)*thenreturn(error_12);*ˆend;*ˆcalls_export(dest_ptr);*ˆexit(subroutineexit); ‰RELEASE_ASQrelease(asq);9‰BTSTW…#TSKARTIM,TCBATTR(A6)‰if(client=real-timetask)%‰BNE.S…ASQRE_31–thendest_ptr<==A0; ‰CLR.L…D5‰MOVE.W„ASQML(A4),D5=‰TR0.LOGPHY,A0,‹elsedest_ptr<==logphy(A0);‰BRA.S…ASQRE_30–if(error) ASQRER12:&‰EXIT†RTCDADR1›thenreturn(error_12); ASQRE_30: ‰MOVE.L„D6,A0 ASQRE_31:‰BSR‡S_EXPORT–calls_export;‰EXIT†SUB›return;        RQ_DIS01:Q_EN_01: *ˆrelease(asq);&*ˆif(client_tcb_ptr=real-timetask)*ˆthendest_ptr<==A0; *ˆelsedo;*dest_ptr<==logphy(A0); *if(error)*thenreturn(error_12);*ˆend;*ˆ(dest_ptr)<==$00,$00;*ˆexit(subroutine); ‰RELEASE_ASQ˜release(asq);<‰BTSTW…#TSKARTIM,TCBATTR(A6)„if(client_tcb_ptr=real-time)%‰BNE.S…ASQRE_41‘thendest_ptr<==A0; ?‰TR0.LOGPHY,A0,#2‰elsedest_ptr<==logphy(A0);‰BRA.S…ASQRE_40–if(error)'‰BRA.S…ASQRER12–thenreturn(error_12);*«end; ASQRE_40: ‰MOVE.L„D6,A0 ASQRE_41:$‰CLR.W…(A0)•(dest_ptr)<==$00,$00;‰EXIT†SUB–exit(subroutine);        RQ_DIS10:Q_EN_10: *ˆrelease(asq);!*ˆdest_ptr<==def_buf(asq_ptr);*ˆcalls_export(dest_buf);*ˆexit(subroutine); ‰RELEASE_ASQ“release(asq);6‰MOVE.L„ASQDBUF(A4),A0†dest_ptr<==def_buf(asq_ptr);)‰BRA.S…ASQRE_31Œcalls_export(dest_ptr);*¦exit(subroutine);        RQ_DIS11:Q_EN_11: *ˆrelease(asq);!*ˆdest_ptr<==def_buf(asq_ptr);*ˆ(dest_ptr)<==$00,$00; *ˆreturn; ‰RELEASE_ASQ“release(asq);6‰MOVE.L„ASQDBUF(A4),A0†dest_buf<==def_buf(asq_ptr);(‰BRA.S…ASQRE_41Œ(dest_ptr)<==$00,$00;*¦exit(subroutine); ‰ENDéé: ééé=/*=/*†M68XXX.ASQSTATS.AF=/*-=/* Chain file to assemble M68XXX.ASQSTATS.SA=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M68XXX.ASQSTATS.LS=/*=/IFC \1ƒ=ARGM68XXX.ASQSTATS.LS=/ENDIF=/*5=ASM M68XXX.ASQSTATS.SA,M68XXX.ASQSTATS.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.ASQ.MC=/*}=/*=ENDééééééK1ASQSTATSƒIDNT5,168xxxDIRECTIVE--SETASQSTATUSO*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***1***…FILE:‚ASQSTATS-TRAP#1-SETASQSTATUSš******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***E***…FUNCTION:‚ASQSTATSsetsthestatusoftheASQtotheproposed†***7***statusindicatedwithintheinputparameter.‚If‰***9***theproposedstatusindicatesthattheASRshouldˆ***;***beenabled,andtheASQisnotempty,thenASQSTATS†***+***willdispatchthetasktoit'sASR.–******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ. ******É******É***; ***…ENTRYCONDITIONS:³******É******‡A6=client_tcb_ptr;®******‡A0=parameter;³******Œbit_2:=enable(asr);§***)***Œbit_1:=enable(defaultbuffer);œ******Œbit_0:=enable(asq);§******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É******‡D0=0‚Success;²******É******‡D0<>0Failure;²******É***5***ŠThefollowingerrorcodesarereturnedinD0:’******É***4***ŒRTCDNTBL-04‚Requiredtabledoesnotexist.******É***7***ŒRTCDNFND-07‚Entrynotfoundintableorlist.******É***,***ŒRTCDLGCF-11‚Requestconflictswith˜******›existingtableentries.—******É******É******É******É***O*******************************************************************************O*******************************************************************************O*^*****************************************************************************‰PAGE*,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesT9]deTmVuA}G*…--------‚-------------‚----------------------------------------------)*…09/02/84‚MSLŒRe-wroteasstatemachine.C*…12/27/83‚MarkLanus…Addedcodetoinsurethatstatuswasentirely.*župdatedinonememorycycle.‚(Oroldandnew-*žstatus'together,andthenwritenewstatus*žbyte.)*…11/06/81‚HLD6‹REV3.00*…04/25/79‚GGC3‹REV1.00* * *‚XDEF's.*‰XDEF†ASQSTATS‰XDEF†SETASQ_SUB * *‚XREF's.*‰XREF.S„A_EXPORT‰XREF.S„DISP_ASR **‚Includedfiles:***ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.ASQ.MC*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.ASQ.EQ‰INCLUDEƒ9995.&.ASQ.MC‰LIST‰SECTIONLEVEL04‰PAGE)*asqstats: proc (client_tcb_ptr, status);  *„dcl‚statusbits_2-0(A0);#*„dcl‚client_tcb_ptrlongword(A6);  *ˆcallsetasq_sub;*ˆexit(subroutine);  *end asq_stats;‰PAGE)*asqstats: proc (client_tcb_ptr, status);  *„dcl‚statusbits_2-0(A0);#*„dcl‚client_tcb_ptrlongword(A6);  *ˆcallsetasq_sub;*ˆexit(subroutine); ASQSTATS: ‰BSR.S…SETASQ_SUB ‰EXIT†SUB  *end asq_stats;‰PAGE+*setasq_sub: proc (client_tcb_ptr, status);  *„dcl‚statusbits_2-0(A0);#*„dcl‚client_tcb_ptrlongword(A6);  $*ˆtarget_tcb_ptr<==client_tcb_ptr;'*ˆasq_ptr<==tcb_asq(client_tcb_ptr);*ˆif(asq_ptr=0)*ˆthenreturn(error_04); *ˆelsedo; *status<==status&%00000111;*if*(en_asr(status)=set)&**(asr_nval(asq_st_mode(asq_ptr))=set)*thenreturn(error_07); *elseif*(en_dbuf(status)=set)&,*(dbuf_val(asq_st_mode(asq_ptr))=reset)*thenreturn(error_11); *elsedo;*’freeze(asq);*’if(taskisgoingtoasr)*’thenreset(en_asr(status));7*’new_state<==map_tbl((status<<1)|(asqmt>>1)); *’reset(go_to_asr(new_state));/*’if(go_to_asr(new_state)wasreset)thendo;$*—asq_state(asq_ptr)<==new_state;*—release(asq);*’end; *’elsedo;*—reset(export(new_state));,*—if(export(new_state)wasreset)thendo;$*œasq_state(asq_ptr)<==new_state;*œrelease(asq);*œget(asq_xfrvector);*œcalldisp_asr;**œpopsubroutinereturnaddressoffstack;*œexit(toasr);*—end; *—elsedo;$*œasq_state(asq_ptr)<==new_state;*œrelease(asq);!*œdest_ptr<==def_buf(asq_ptr);*œcalla_export(dest_ptr);*œcalldisp_asr;**œpopsubroutinereturnaddressoffstack;*œexit(toasr);*—end;*’end;*end;*ˆend;  *end setasq_sub;‰PAGE$*ˆtarget_tcb_ptr<==client_tcb_ptr;'*ˆasq_ptr<==tcb_asq(client_tcb_ptr);*ˆif(asq_ptr=0)*ˆthenreturn(error_04); SETASQ_SUB: 0‰MOVE.L„A6,A; 5target_tcb_ptr<==client_tcb_ptr;:‰MOVE.L„TCBASQ(A6),A4‡asq_ptr<==tcb_asq(clien_tcb_ptr);‰MOVE.L„A4,D0if(asq_ptr=0))‰EXIT.EQƒRTCDNTBLŒthenreturn(error_04);  *ˆelsedo; *status<==status&%00000111;*if*(en_asr(status)=set)&**(asr_nval(asq_st_mode(asq_ptr))=set)*thenreturn(error_07); ‰MOVE.L„A0,D03‰AND.W…#%00000111,D0‡status<==status&%00000111;‰BTST†#ASQSREN,D0‰if)‰BEQ.S…ASQST_01‘(en_asr(status)=set)& ;‰BTST†#ASQS_RNV,ASQSTMD2(A4)ƒ(asr_nval(asq_st_mode)=set))‰EXIT.NEƒRTCDNFNDŒthenreturn(error_07);  *elseif*(en_dbuf(status)=set)&,*(dbuf_val(asq_st_mode(asq_ptr))=reset)*thenreturn(error_11); ASQST_01:‰BTST†#ASQSDBEN,D0ˆelseif*‰BEQ.S…ASQST_02‘(en_dbuf(status)=set)& =‰BTST†#ASQS_DBV,ASQSTMD2(A4)ƒ(dbuf_val(asq_st_mode)=reset))‰EXIT.EQƒRTCDLGCFŒthenreturn(error_11);‰PAGE *elsedo;*’freeze(asq);*’if(taskisgoingtoasr)*’thenreset(en_asr(status)); ASQST_02: ‰FREEZE_ASQ*‰BTST†#TSK2EVWK,TCBSTAT2(A6)ˆfreeze(asq);)‰BEQ.S…ASQST_03–if(taskisgoingtoasr) /‰BCLR†#ASQSREN,D0“thenreset(en_asr(status));  7*’new_state<==map_tbl((status<<1)|(asqmt>>1)); *’reset(go_to_asr(new_state));/*’if(go_to_asr(new_state)wasreset)thendo;$*—asq_state(asq_ptr)<==new_state;*—release(asq);*’end;  ASQST_03: ‰LSL.W…#1,D0‰BTST†#ASQMTBIT,ASQSWMD2(A4)‰BEQ.S…ASQST_04 ‰BSET†#0,D0 ASQST_04:;‰MOVE.B„MAP_TBL(PC,D0.W),D0new_state<==map_tbl(status); 1‰BCLR†#GOTO_BIT,D0ˆreset(go_to_asr(new_state));1‰BNE.S…ASQST_05Œif(go_to_asrwasreset)thendo; :‰MOVE.W„D0,ASQSTATE(A4)Šasq_state(asq_ptr)<==new_state;*«release(asq); ‰RELEASE_ASQ ‰RTS›end;  *’elsedo;*—reset(export(new_state));,*—if(export(new_state)wasreset)thendo;$*œasq_state(asq_ptr)<==new_state;*œrelease(asq);*œget(asq_xfrvector);*œcalldisp_asr"*œpopsubroutinereturnoffstack;*œexit(toasr);*—end;  ASQST_05:,‰BCLR†#EX_BIT,D0Šreset(export(new_state));.‰BNE.S…ASQST_06Œif(exportwasreset)thendo; :‰MOVE.W„D0,ASQSTATE(A4)Šasq_state(asq_ptr)<==new_state;‰RELEASE_ASQ˜release(asq);!‰GET_ASQXFR™get(asq_xfrvector);‰BSR‡DISP_ASR‘calldisp_asr;*‰ADD.L…#4,A7”popreturnaddressoffstack;‰EXIT†ASR–exit(toasr);*¦end; *—elsedo;$*œasq_state(asq_ptr)<==new_state;*œrelease(asq);!*œdest_ptr<==def_buf(asq_ptr);*œcalla_export(dest_ptr);*œcalldisp_asr;"*œpopsubroutinereturnoffstack;*œexit(toasr);*—end;  ASQST_06:9‰MOVE.W„D0,ASQSTATE(A4)…asq_state(aq_ptr)<==new_state;*¦release(asq); ‰RELEASE_ASQ6‰MOVE.L„ASQDBUF(A4),A0†dest_ptr<==def_buf(asq_ptr);'‰BSR‡A_EXPORTŒcalla_export(dest_ptr);‰BSR‡DISP_ASRŒcalldisp_asr;*‰ADD.L…#4,A7”popreturnaddressoffstack;‰EXIT†ASR–exit(toasr);*¦end;*’end;*end;*ˆend;  *end asqstats;‰PAGE(*‡Thisistheinputbytetothemap_tbl:**C*‡_________________________________________________________________*‡|‡|‡|‡|‡|‡|‡|‡|‡|+*‡|‰MustbezeroŠ|…proposedstate„|curr_|*‡|Ÿ|—|state|*‡|‡|‡|‡|‡|‡|‡|‡|‡|C*‡-----------------------------------------------------------------*‡|‡|‡|‡|‡|‡|‡|‡|‡|+*‡|‰MustbezeroŠ|‚en_‚|‚en_‚|‚en_‚|‚asq_|*‡|Ÿ|‚asr‚|‚dbuf|‚asq‚|‚mtƒ|*‡|‡|‡|‡|‡|‡|‡|‡|‡|C*‡-----------------------------------------------------------------*** +*‡Thisistheoutputbytefromthemap_tbl:**C*‡_________________________________________________________________*‡|‡|‡|‡|‡|‡|‡|‡|‡|?*‡|‚Controlbits|‚Newasq_stateandasq_sw_modebits.‚|must‚|*‡||§|be0.|*‡|‡|‡|‡|‡|‡|‡|‡|‡|C*‡-----------------------------------------------------------------*‡|‡|‡|‡|‡|‡|‡|‡|‡|5*‡|go_to|export|‡asq_state‡|dbuf_|asq_‚|must‚|*‡|asrƒ|‡|—|en„|mt„|be0.|*‡|‡|‡|‡|‡|‡|‡|‡|‡|C*‡-----------------------------------------------------------------**GOTO_ASR:ŠEQU‡$80NOGO< _ASR:ŠEQU‡$00EXPORT:ŒEQU‡$40NO_EXPORT:‰EQU‡$00*GOTO_BIT:ŠEQU‡$07EX_BIT:ŒEQU‡$06‰PAGE*‡Andthisisthemap_tbl: *INPUT:‡|„OUTPUT:*Ž|*ƒADAA‡|*ƒSBSS‡|*ƒRUQQ‡|D*ƒ|F||‡|------------------------------------------------------------ *ƒE|EM‡|—|£|6*ƒNENT‡|…CONTROLBITS†|ƒASQ_STATE&ASQ_SW_MODEBITS„| *„N‰|—|£|?*Ž------------|-----------|-----------------------------------|*ƒ||||‡|‹|‹|‹|‹|‹|6*ƒ||||‡|GOTO_ASR‚|EXPORT„|ASQ_†|DBUF_ENƒ|ASQ_MT„|*ƒVVVV‡|‹|‹|STATE…|‹|‹|?*Ž------------------------------------------------------------- MAP_TBL: 9MAP_0000:DC.BƒNOGO_ASR+NO_EXPORT+RQ_DIS+DBUF_DIS+ASQ_NMT8MAP_0001:DC.BƒNOGO_ASR+NO_EXPORT+RQ_DIS+DBUF_DIS+ASQ_MT7MAP_0010:DC.BƒNOGO_ASR+NO_EXPORT+Q_EN+DBUF_DIS+ASQ_NMT6MAP_0011:DC.BƒNOGO_ASR+NO_EXPORT+Q_EN+DBUF_DIS+ASQ_MT 8MAP_0100:DC.BƒNOGO_ASR+NO_EXPORT+RQ_DIS+DBUF_EN+ASQ_NMT7MAP_0101:DC.BƒNOGO_ASR+NO_EXPORT+RQ_DIS+DBUF_EN+ASQ_MT6MAP_0110:DC.BƒNOGO_ASR+NO_EXPORT+Q_EN+DBUF_EN+ASQ_NMT5MAP_0111:DC.BƒNOGO_ASR+NO_EXPORT+Q_EN+DBUF_EN+ASQ_MT 9MAP_1000:DC.BƒGOTO_ASR+NO_EXPORT+RQ_DIS+DBUF_DIS+ASQ_NMT6MAP_1001:DC.BƒNOGO_ASR+NO_EXPORT+R_EN+DBUF_DIS+ASQ_MT7MAP_1010:DC.BƒGOTO_ASR+NO_EXPORT+Q_EN+DBUF_DIS+ASQ_NMT7MAP_1011:DC.BƒNOGO_ASR+NO_EXPORT+RQ_EN+DBUF_DIS+ASQ_MT 5MAP_1100:DC.BƒGOTO_ASR+EXPORT+RQ_DIS+DBUF_EN+ASQ_NMT5MAP_1101:DC.BƒNOGO_ASR+NO_EXPORT+R_EN+DBUF_EN+ASQ_MT3MAP_1110:DC.BƒGOTO_ASR+EXPORT+Q_EN+DBUF_EN+ASQ_NMT6MAP_1111:DC.BƒNOGO_ASR+NO_EXPORT+RQ_EN+DBUF_EN+ASQ_MT ‰ENDéééééé=/*=/*†M68XXX.ASRINT.AF=/*+=/* Chain file to assemble M68XXX.ASRINT.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M68XXX.ASRINT.LS=/*=/IFC \1ƒ=ARGM68XXX.ASRINT.LS=/ENDIF=/*1=ASM M68XXX.ASRINT.SA,M68XXX.ASRINT.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDé< ééééé…>ASRINTƒIDNT6,068xxxTRAP0--PROVIDEEVENTINTERRUPTŽ07/13/84O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***4***…FILE:‚ASRINT-INTERNALSUBROUTINEOFRMS68K—******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***I***…FUNCTION:‚ASRINTwillsetupatasktobedispatchedtoit'sASR.‚******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ. ******É******É******…ENTRYCONDITIONS:³******É******‡A4<==asq_ptr;³******‡A5<==target_tcb_ptr;¬******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------)*…09/04/84‚MSLŒRe-wroteasstatemachine.2*…07/03/84‚SPTŒRemoveunnecassarycallstoLOGPHY.0*…10/03/81‚SJFŒFixerrantlongwordaccessofASR*žaddresswhenpastendofASQ.*…02/08/82‚HLD6‹REV3.10.*…11/06/81‚HLD6‹REV3.00.*…03/24/81‚HLD6‹REV2.00.*…08/16/79‚HLD6‹REV1.01.*…04/26/79‚GGC3‹REV1.00. * *‚XDEF's.*‰XDEF†DISP_ASR‰XDEF†GTASQBUF‰XDEF†I_DISP_ASR‰XDEF†READY_ASR * *‚XREF's.*‰XREF.S„PATBEG‰XREF.S„PREEMPT_FLAG‰XREF.S„RUNNER ‰XREF†PAT_CAN_NODE **‚Includedfiles:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.BAB.EQŽF—_ŸS§*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.ASQ.EQ‰INCLUDEƒ9995.&.BAB.EQ‰INCLUDEƒ9995.&.PAT.EQ‰INCLUDEƒ9995.&.INTERRUP.MC‰LIST‰SECTIONLEVEL04‰PAGE"= *ready_asr:‚proc‚(target_tcb_ptr);"*disp_asr:ƒentry(target_tcb_ptr);$*i_disp_asr:ƒentry(target_tcb_ptr);  #*„dcl‚target_tcb_ptrlongword(A5);  3*****„reset(tsksevwt(tcbstate(target_tcb_ptr)));&*ˆif(tcb_delay(target_tcb_ptr)<>0)*ˆthencancel(delay);*ˆcallready(target_tcb_ptr);-*ˆset(tsk2evwk(tcbstate(target_tcb_ptr)));  *end ready_asr;‰PAGE"*ready_asr:‚proc‚(target_tcb_ptr);"*disp_asr:ƒentry(target_tcb_ptr);$*i_disp_asr:ƒentry(target_tcb_ptr);  #*„dcl‚target_tcb_ptrlongword(A5);  READY_ASR: DISP_ASR: I_DISP_ASR: 3*****„reset(tsksevwt(tcbstate(target_tcb_ptr))); ‰BCLR†#TSKSEVWT,TCBSTATE(A5)  &*ˆif(tcb_delay(target_tcb_ptr)<>0)*ˆthencancel(delay); ‰MOVE.W„SR,-(A7)‰DISABLE_INTERRUPTS;‰MOVE.L„TCBDLAY(A5),D0†if(tcb_delay(target_tcb_ptr)<>0)‰IFˆ„THEN.S&‰BSR‡PAT_CAN_NODEˆthencalcel(delay);‰ENDI *ˆif(tcb_ptr=runner)*ˆthenset(preempt_flag); "‰MOVE.W„(A7)+,SR‰Enableinterrupts‰CMPA.L„RUNNER,A5‰IFˆ„THEN.S‰STˆPREEMPT_FLAG‰ENDI  *ˆcallready(target_tcb_ptr); ,‰TR0.RYASR(A5)•callready(target_tcb_ptr);  *-*ˆset(tsk2evwk(tsbstate(target_tcb_ptr)));* =‰BSET†#TSK2EVWK,TCBSTAT2(A5)ƒset(tsk2evwk(target_tcb_ptr)); RDASR_99:‰RTS‰PAGE**‡******************9*‡*‚UPDTASQ*ƒUPDATEASQPOINTERSWHENMESSAGEQ'ED*‡*******************>*…SPT‚06/25/84†REV‚2.00…Includeanoverflowareaattheendof *¦theASQ.*…HLD68-16-79‡REV‚1.00* *†ENTRY:‚A4POINTSTOTARGETASQ.*ŽD0CONTAINSTOTAL#BYTESNEEDEDFORMESSAGE**…EXIT:‚PCƒ--GOODRETURN;*‘D0=MESSAGEBYTECOUNTROUNDEDUPTOFIRSTWORDBOUNDARY6*‘A0=BEGINNINGADDRESSOFSPACERESERVEDFORMESSAGE*‘A4=PRESERVED!*PC+2--ERROR--NOROOMINASQ***…REGISTERSUSED:01234567*** ŠXDEF„UPDTASQŠXDEF„SBUPDATQ**8*ˆThefunctionofthisroutineistoverifythattheASQ+*ˆhasenoughspaceforthependingmessage.(*ˆTheflowoftheroutineisasfollows:!*’1.Savecurrentinterruptmask.<*’2.Roundupthemessagelengthtothefirstwordboundary.*’3.Disableallinterrupts.*’4.ifASQPUT=ASQGET*œifASQCNT<>0*ŸthengotoREJECT;ASQisfull**œifASQCNT=0;thisisthefirstmessage*ŸthensetD0=1st_msg_flag *ŸgotoDO*•else*œifASQPUT>ASQGET**ŸthengotoDO;wedonotcheckforspace*¬;sincemessagecanoverflow.*•else*œifASQPUT(ASQGET-ASQPUT)$*¢thengotoREJECT;notenoughspace *Ÿelseset‚DO *’5.REJECT *œmodifyreturn_addressonstack4*œsetASQPUT=ASQPUT+D1;pointtonextmsgbuffer/*œgotoEXIT;wecannotbeintheoverflowarea*’6.DO*œsetA3=ASQPUT.4*œsetASQPUT=ASQPUT+D1;pointtonextmsgbuffer2*œifASQPUT>ASQTOP;areweintheoverflowarea?-*ŸthenASQPUT=ASQBOT;wrapittothebottom*œelse *’7.EXIT*œrestoreinterruptmask*œendofroutine* GTASQBUF: SBUPDATQUPDTASQ ‰MOVE.L„D1,-(A7)ŒSAVEREGISTERS. ** Set D1 = ASQGET - ASQPUT*‰MOVE.L„ASQPUT(A4),A0‰MOVE.L„ASQGET(A4),D1 ‰SUB.L…A0,D1‰BEQ.S…P.EQU.Gput=get‰BPL.S…P.LT.GŽputget*‰ADD.L…A0,D0Updatepointertonextbuffer1‰CMP.L…ASQTOP(A4),D0‡Areweintheoverflowarea?.‰BCC.S…WRAPYes..wrappointertobottomofASQ/‰MOVE.L„D0,ASQPUT(A4)‡no...savenewput_pointerRESTORE'‰SUB.L…A0,D0RestoremessagebytecountINC_CNT:+‰ADD.W…#1,ASQCNT(A4)‡increment(asq_count);UPDTASQX#‰MOVE.L„(A7)+,D1ŒRestoreregisters.‰RTSWRAP>‰MOVE.L„ASQBOT(A4),ASQPUT(A4)Setput_pointertobottomofASQ ‰BRA‡RESTORE** Put_pointer = get_pointer*P.EQU.G#‰TST.W…ASQCNT(A4)ŠIstheASQempty;+‰BEQ‡UPDATASQŒYes...updatetheASQpointers** Error, no room in ASQ*REJECT$‰ADD.L…#2,4(A7)ŒSignalerrorreturn. ‰BRA‡UPDTASQX** Put_pointer < get_pointer*>*ˆThisconditionwillhappenaftertheASQhasalreadywrapped *ˆaround.= *P.LT.G*‰CMP.L…D0,D1Enoughspacefornewmessage?‰BMI‡REJECTŽNo...rejectmessage'‰ADD.L…D0,ASQPUT(A4)‡Updateput_pointer‰BRA‡INC_CNTGetouthere‰ENDéééééé=/*=/*†M68XXX.ATSEM.AF=/**=/* Chain file to assemble M68XXX.ATSEM.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68XXX.ATSEM.LS=/*=/IFC \1ƒ=ARGM68XXX.ATSEM.LS=/ENDIF=/*/=ASM M68XXX.ATSEM.SA,M68XXX.ATSEM.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UST.EQ=/*}=/*=ENDéééééé¯> ‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.UST.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.UST.EQ‰LIST‰PAGE?ATSEMƒIDNT…5,1„68xxxDIRECTIVES--CREATEANDATTACHTOSEMAPHORE*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.*"*„ATSEMƒ--REV1.00ƒ5/16/79ƒ(HLD6)*Œ--TRAP1ROUTINE*-*‡PURPOSE:ƒREQUESTTOATTACHAUSERSEMAPHORE*'*‰ENTRY:‚A6HASREQUESTOR'STCBADDRESS *‘A4HASPARAMETERBLOCKADDRESS* 0-SEMAPHORENAME* 4-SEMAPHOREKEY(NOTUSED)* 8-INITIALCOUNT* 9-SEMAPHORETYPE**ŠEXIT:ƒD0HASRETURNCODE)*’D0=0‚GOODRETURN,SEGMENTDEALLOCATED*’A0=SEMAPHOREKEY*<*ˆTHEFOLLOWINGRETURNCODESARERETURNEDINLOWER1/2OFD0*6*ŠRTCDPBLK-2ƒPARAMBLKADDRNOTINUSER'SADDRSPACE=*ŠRTCDTFUL-5ƒUSERSEMAPHORETABLEISFULL-NOROOMFORNEW7*ŠRTCDDPRQ-6ƒDUPLICATEREQUEST-CREATEOFTYPE1SEM5*ŠRTCDLGCF-11ƒSEMTYPEDOESNOTMATCHENTRYINTABLE.*ŠRTCDOPT‚-15ƒILLEGALSEMTYPE-1,2,3ALLOWED,*ŠRTCDPCNT-16ƒNEGATIVECOUNTFIELDSUPPLIED*‰SECTIONLEVEL04* ‰XDEF†ATSEM ‰XDEF†CRSEM ‰XREF.S„SEMUST‰PAGECRSEM: ‰MOVE.L#1,D7‰SWAPƒD7 ‰BRA.S‚ATSEM1 ATSEM: ‰CLR.L‚D7  *(*…CHECKSEMAPHORETYPEANDINITIALCOUNT* ATSEM1:%ˆMOVE.L‚A4,A5‡PARAMETERBLOCKADDRESS8ˆCLR.LƒTCBA0(A6)ƒCLEARSEMKEYRETURNEDINCASEOFERROR ˆCLR.LƒD6ˆMOVE.B‚9(A5),D6…SEMAPHORETYPEˆCMP.Bƒ#1,D6‰ISITTYPE1ˆBEQ.SƒATSEM1A†YES ˆBLT.SƒATSEME4†<1ISILLEGAL ˆCMP.Bƒ#3,D6ˆBGT.SƒATSEME4†>3ISILLEGAL ˆTST.LƒD7'ˆBEQ.SƒATSEM2†SKIPCOUNTTESTIFATTACH !ˆMOVE.B‚8(A5),D7„SAVECOUNTIND7 ˆBTST„#7,D7&ˆBEQ.SƒATSEM2†COUNTCANNOTBENEGATIVE  **‡ERRORRETURNS* ˆEXITƒRTCDPCNT  ATSEME4: ˆEXITƒRTCDOPT  ATSEME5:ˆEXITƒRTCDDPRQˆPAGEATSEM1A: ‰CLR.L‚D7ŠTYPE1CREATE=ATTACH  **ˆGETEXCLUSIVEACCESSTOUST*¸kÁ_ÉhÑ ATSEM2:‰IFNE„MULTPROC ‰TR0.PƒSEMUST‰ENDC  **ˆLOOKFORENTRYINUST*ATSEM3:*‰MOVE.L‚A6,A4ˆADDROFTCBINA4FORFNDSEM*‰TR0.FNDSEM‚<(A5),I>‰ARGISSEMAPHORENAME+‰BRA.S…ATSEM4ˆFOUNDMATCHINGENTRYINTABLE &‰TST.L„D0ŠISTHEREROOMFORNEWENTRY?‰BNE.S„ATSEM5†YES ‰EXIT…RTCDTFULERRORCODE **‡FOUNDENTRYFORTHISTASK* ATSEM4:(‰MOVE.LƒD0,TCBA0(A6)†RETURNENTRYNUMBER#‰TST.L„D7ŽISTHISATTACHORCREATE?‰BEQ†ATSEMX4‰RETURNIFATTACH ‰CMP.B„#3,D6$‰BEQ†ATSEME5‹MULTIPLECALLS-TYPE3  ATSEM4A:‰MOVE.LƒD0,D3ŠENTRYOFFSET‰CMP.B„USTTYPE(A1,D3),D6&‰BNE†ATSEME6‰EXISTINGENTRYNOTTYPE2 .‰TST.W„USTUCNT(A1,D3)ƒISTHISENTRYAPOINTER?#‰BGE.S„ATSEM4BŠNO-ITISSEMAPHORE )‰MOVE.LƒUSTSPTR(A1,D3),D0„GETSEMPOINTER‰BRA.S„ATSEM4A  ATSEM4B:)‰MOVE.B‚D7,USTXCNT(A1,D3)„SAVEINITCOUNT&‰TST.BƒUSTSEM+1(A1,D3)†RESETSEMCOUNT‰BMI.SƒATSEM4C *‰MOVE.B‚D7,USTSEM+1(A1,D3)‚RESETSEMCOUNT ‰BRA…ATSEMX4  ATSEM4C:ŠTST.B„D7‹SEMAPHOREHASWAITERS ŠBEQ†ATSEMX4 ATSEM4D:'ŠTR0.V„„SIGNALSEMAPHORE&ŠSUB.W„#1,D7‡DECREMENTSEMAPHORECOUNT$ŠBNE†ATSEM4D…BRANCHBACKIFNOTZERO ATSEMXY4: ŠBRA†ATSEMX4  **ˆADDENTRYTOTABLE*D0=ENTRY#OFUNUSEDENTRY1*D1=ENTRY#OFSEMAPHOREENTRY(IFONEEXISTS)#*D2=COUNTUSEDTOUPDATEUSTCENT* ATSEM5:2‰BSET„#TSKIUSEM,TCBATTI(A6)„SETUSEMATTRIBUTEBIT0‰MOVE.L‚D0,TCBA0(A6)†RETURNENTRYNUMBERTOUSER‰MOVE.L‚D0,D3ˆENTRYOFFSET-‰MOVE.L‚TCBNAME(A6),USTTNAME(A1,D3)„TASKNAME1‰MOVE.L‚TCBSESSN(A6),USTSESSN(A1,D3)ƒSESSIONCODE)‰MOVE.LƒA0,USTSNAME(A1,D3)SEMAPHORENAME#‰TST.WƒD1WASSEMAPHOREENTRYFOUND‰BNE.SƒATSEM6‰YES  **ˆBUILDSEMAPHOREENTRY* -‰M> OVE.W‚#1,USTUCNT(A1,D3)…SETUSERCOUNTTO1(‰MOVE.B‚D6,USTTYPE(A1,D3)…SEMAPHORETYPE)‰MOVE.B‚D7,USTXCNT(A1,D3)…SAVEINITCOUNT4‰MOVE.W‚D7,USTSEM(A1,D3)†PUTINITCOUNTINSEMAPHORE‰CLR.LƒUSTSEM+2(A1,D3)(‰MOVE.W‚D2,USTCENT(A1)ˆCURRENT#ENTRIES‰CMP.W„#1,D6ISTHISTYPE1?‰BNE.SƒATSEM5A ,‰MOVE.W‚#1,USTSEM(A1,D3)…SETINITCOUNTTO1 ‰BRA…ATSEMXY4  ATSEM5A:‰CMP.W„#2,D6TYPE2-DONE ‰BEQ…ATSEMXY4 ‰TST.LƒD7"‰BNE…ATSEMXY4TYPE3CREATE-DONE .‰CLR.LƒUSTTNAME(A1,D3)‡CLEARNAMEINSEMENTRY4‰MOVE.W‚#$400,USTUCNT(A1,D3)ƒMARKENTRY-NOCREATOR$‰BRA…ATSEM3GOBACKTOBUILDPOINTER  **…BUILDƒPOINTERENTRY* ATSEM6:1‰EXG…D1,D3‰EXCHANGESEMENTRYOFFSET-PTROFFSET  */*ƒ(A1,D1)=NEWENTRY…(A1,D3)=SEMAPHOREENTRY* ‰CMP.BƒUSTTYPE(A1,D3),D6*‰BNE…ATSEMXY4„TYPEDOESNOTMATCHORIGINAL ‰TST.LƒD7‰BEQ.S„ATSEM6A !‰CMP.L„#3,D6ˆISITTYPE3CREATE? ‰BEQ.S„ATSEM7ˆYES-SPECIALCASE ATSEM6A:‰CMP.Lƒ#2,D6ŒTYPE2?‰BNE.S‚ATSEM6B 2‰TST.LƒUSTTNAME(A1,D3)†ISNAMEINSEMAPHOREENTRY? ‰BEQ.SƒATSEM9NO-GOFILLITIN ATSEM6B:8‰MOVE.L‚D3,USTSPTR(A1,D1)„PUTSEMAPHOREPOINTERINENTRY4‰MOVE.W‚#$FFFF,USTUCNT(A1,D1)„-1FLAGSPOINTERENTRY(‰MOVE.B‚D6,USTTYPE(A1,D1)‡SEMAPHORETYPE#‰CLR.BƒUSTXCNT(A1,D1)ŠINITIALCOUNT1‰MOVE.W‚D2,USTCENT(A1)ˆUPDATECURRENTENTRYCOUNT5‰ADD.Wƒ#1,USTUCNT(A1,D3)…INCREMENTCOUNTINSEMENTRY ‰TST.LƒD7‰BNE…ATSEM4BCREATE-TYPE2 ‰CMP.Wƒ#3,D6’TYPE3?‰BNE.SƒATSEMX4NO .‰TST.LƒUSTTNAME(A1,D3)ˆWASTYPE3CREATEDONE?‰BNE.SƒATSEMX4YES  ‰IFNE„MULTPROC-‰TR0.VƒSEMUSTGIVEUPEXCLUCIVEACCESSTOUST‰ENDC %‰TR0.Pƒ‡USERMUSTWAIT!‰EXIT„SUB“exit(subroutineexit);   *#*…TYPE3CREATE--SEMAPHOREEXISTS* ATSEM7:‰TST.LƒUSTTNAME(A1,D3)‰BNE…ATSEME5ŽMULTIPLECREATES -‰MOVE.L‚D3,TCBA0(A6)RETURNKEYTOTHISENTRY#‰MOVE.L‚TCBNAME(A6),USTTNAME(A1,D3)‰ADD.Wƒ#1,USTUCNT(A1,D3)‰MOVE.BƒD7,USTXCNT(A1,D3)‰BRA.S„ATSEM7B ATSEM7A:‰TR0.Vƒ ATSEM7B:‰TST.BƒUSTSEM+1(A1,D3) ‰BMI…ATSEM7A ‰MOVE.B‚D7,USTSEM+1(A1,D3)‰BRA.SƒATSEMX4  */*†TYPE2SEMAPHOREENTRYISEMPTY--FILLITIN* ATSEM9:‰MOVE.L‚D3,TCBA0(A6)#‰MOVE.L‚TCBNAME(A6),USTTNAME(A1,D3)‰ADD.Wƒ#1,USTUCNT(A1,D3)#‰TST.LƒD7‘ISTHISCREATEORATTACH?‰BEQ.SƒATSEMX4ŒATTACH ‰BRA…ATSEM4BŒCREATE  **ƒERROR* ATSEME6:‰EXIT„RTCDLGCF  *!*†GIVEUPEXCLUSIVEACCESSTOUST* ATSEMX4:‰IFNE„MULTPROC ‰TR0.VƒSEMUST‰ENDC !‰EXIT„SUB“exit(subroutineexit);‰ENDééééé? é=/*=/*†M68XXX.BKG.AF=/*(=/* Chain file to assemble M68XXX.BKG.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to M68XXX.BKG.LS=/*=/IFC \1ƒ=ARGM68XXX.BKG.LS=/ENDIF=/**=ASM M68XXX.BKG.SA,M68XXX.BKG.RO,\1;RZ=045=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.BAB.EQ=/*}=/*=ENDééééééÙ8BKG‡IDNTƒ5,1M68xxx--BackgroundandguardedprocessingO*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***;***…FILE:‚BKG--BACKGROUNDANDCALL_GUARDEDPROCESSING******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***C***…FUNCTION:‚Theseroutinesprovidesupportforbackgroundandˆ***B***‡guardedprocessingmodes.‚SeetheRMS68Kdocumentationfor‡***E***‡fulldetails,butbasicallythebackgroundisawayforISR's…***D***‡todeferexecutionofcodeuntiltheinterruptlevelreturns†******‡tozero.º******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------'*†8/11/83‚SteveFranckƒInitialwriting.* * *‚XDEF's.*<ŠXDEFƒBKG_DISPATCH‡Entrypt.toexecute‚backgroundactivity.=ŠXDEFƒBKG_SCHEDULE‡Entrypt.toschedulebackgroundactivity.=ŠXDEFƒCALL_GUARDED‡Entrypt.toexecuteaguardedsubroutine.  * *‚XREF's.*ŠXREF.SBKG_ACTIVEŠXREF.SBKG_? FLAGŠXREF.SBKG_HEADŠXREF.SBKG_TAIL  **‚Includedfiles:*2*‰STR.EQ”EquatesforsupervisorcodeunderRMS68K.7*‰UTILITY.MCMacrosofgeneralutility,e.g.PUSH,POP.3*‰INTERRUP.MCMacrosrelatedtointerrupthandling.<*‰BAB.EQ†(listed)†EquatesrelatedtotheBABdatastructure.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.UTILITY.MCŠINCLUDE9995.&.INTERRUP.MCŠLISTŠINCLUDE9995.&.BAB.EQ   ŠSECTIONLEVEL00ŠOPT„BRSŠPAGEâ@ë5ó9û8O*v*****************************************************************************O**********************************************************************************É***F***…ROUTINE:‚BKG_SCHEDULE--SCHEDULEAROUTINEFORBKGEXECUTION.…******É***H***…FUNCTION:‚TakesthepassedBAB,whichrepresentssomeroutinetoƒ***G***‡beexecutedinbackground,andaddsittothebackgroundqueue.ƒ******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆD******‡A:ƒAƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³***D***‡A0ƒ=pointertotheBABrepresentingthebackgroundroutine.„******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***O*******************************************************************************O*^***************************************************************************** BKG_SCHEDULE: *ŠPUSH.LA1‘Saveregisterswe'llblowaway.ŠPUSHƒSR‘Disableinterrupts.ŠDISABLE_INTERRUPTSˆ* -ŠTAS„BABUSE(A0)‰MarkthatthisBABisinuse.#ŠIF…THENŠIfitwasn'talready, =ŠCLR.L‚BABLNK(A0)‰Cleartheforwardlinktomarkendoflist.:ŠMOVE.LBKG_TAIL,A1ˆA1<--ptrtotailentryinbkgqueue.<ŠMOVE.LA0,BABLNK(A1)†Makeoldtailentry,andthetailptr,?ŠMOVE.LA0,BKG_TAILˆpointtothisnewguy(thenewtailentry).3ŠST…BKG_FLAG‹SetBKG_FLAGtosignalthatbackground*£activitywasscheduled. ŠENDI .ŠPOP„SR‘Restoreinterruptlevelandregisters. ŠPOP.L‚A1‘* ŠRTS—Exitw/goodstatus.ŠPAGEO*v*****************************************************************************O**********************************************************************************É***J***…ROUTINE:‚BKG_DISPATCH--DISPATCHALLPENDINGBACKGROUNDROUTINES.******É***C***…FUNCTION:‚Ifthebackgroundqueueisnotempty,entriesareˆ***@***‡removedoneatatimefromtheheadofthequeueandtheŠ***9***‡designatedroutinesaredispatchedinbackground.‘******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡PˆD******‡A:ƒPƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***O*******************************************************************************O*^***************************************************************************** *J*‚NOTE:‚Thiscodeisabittouchy.‚Sinceitmightbecalledasaresultof7*‚aninterrupt,thefollowingpotentialproblemexists:E*ƒ(1)Aninterruptoccurswhichresultsinthisroutinebeingcalled.*ƒ(2)Welowerthemask.H*ƒ(3)Anotherinterruptofthesameleveliswaiting,sogobackto(1).I*‚Theresultwouldbethatthesupervisorstackcouldgrowwithoutbound,8*‚whichofcoursewouldcrashthesysteminshortorder.*I*‚ThesolutiontothisisforthisroutinetobecarefulnottolowertheH*‚interruptmaskuntilithastakenprecautionsthatitwillnotnesttoG*‚arbitrarylevels.‚TheBKG_ACTIVEflagisthekeyhere--thefirsttimeE*‚throughwesetit,thenlowerthemask.‚Furtherinvocation@ softhisH*‚routinewillresultinournoticingthatBKG_ACTIVEisalreadysetand**‚exittingwithouteverloweringthemask.*‰PAGE*8*‚Lockthebackgroundandgetsetuptodispatchthings.* BKG_DISPATCH:9ŠTAS„BKG_ACTIVE‰Ifwe'renotalreadyrunningorotherwiseŠIF…THENŠlockedout, 3ŠSAVEƒD0-D7/A0-A6ˆSavealltheregistersexceptSP.:ŠLEA„BKG_HEAD,A0ˆA0<--addroftheptrtotheheadofthe*§backgroundqueue.  *3*‚Dispatchthebackgroundactivityifthereisany.* *ŠPUSHƒSR‘Savethecaller'sinterruptmask.;ŠDISABLE_INTERRUPTSˆWithinterruptsdisabled,checkwhether9ŠMOVE.L(A0),D0Œthere'sanybackgroundworkonthequeue.ŠIF…THENŠIfthereis, ŠREPEAT 6ŠMOVE.LD0,A1ŽA1<--ptrtothenextBABinthequeue.AŠMOVE.LBABLNK(A1),(A0)„Makethisguy'sforwardlinkthenewhead%*§ptr(toremovehimfromthequeue)..ŠIF…THENŠIfthisistheendofthequeue,=ŠMOVE.LA0,BKG_TAILˆSetthetailpointertopointtotheheadŠENDI–pointer. 8ŠENABLE_INTERRUPTS‰Withinterruptsenabled,marktheBAB>ŠMOVE.LBABPTR(A1),A2†availableandcalltheroutinespecifiedŠSF…BABUSE(A1)‰intheBAB. ŠJSR„(A2)*;ŠLEA„BKG_HEAD,A0ˆRestoreA0astheaddroftheheadpointer1ŠDISABLE_INTERRUPTSˆanddisableinterruptsagain. 6ŠMOVE.L(A0),D0ŒKeepdoingthisuntiltheforwardlinkŠUNTIL‚iszero. ŠENDI  *I*‚Allbackgroundworkhasbeendispatched,sogetoutofbackgroundmode.* 9ŠSF…BKG_ACTIVE‰Comeoutofbackgroundprocessingbyfirst ŠSF…BKG_FLAG2ŠPOP„SR‘markingthatthebackgroundisnotactive,?ŠRESTORED0-D7/A0-A6‡thenrestoringtheinterruptleveltowhat'*§itwasonentry,thenrestoringregs. ŠENDI ŠRTS—Returntothecaller.ŠPAGEO*v*****************************************************************************O**********************************************************************************É***C***…ROUTINE:‚CALL_GUARDED--CALLASUBROUTINEINGUARDEDMODE.ˆ******É***B***…FUNCTION:‚Callsasubroutineinsuchawaythatbackground‰***C***‡routinesinitiatedastheresultofinterruptactivitywill‡***C***‡notexecuteuntiltheguardedsubroutineisdoneexecuting.‡******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒ?ƒ?ƒ?ƒ?ƒ?ƒ?ƒ?ƒ?‡PˆD******‡A:ƒA?‚?ƒ?ƒ?ƒ?ƒ?ƒ?ƒP ******É******…ENTRYCONDITIONS:³***<***‡A0ƒ=Addressoftheroutinetocallinguardedmode.Œ***?***‡AllotherregistersexceptSPmaybeusedtopassinfo.‹******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ***A***‡Onreturnfromthecall,thecontentsofallregistersis‰***A***‡justwhatwasleftinthembytheguardedsubroutine;the‰***A***‡guardedroutinemaynotwreckthestackpointer,however.‰******É***O*******************************************************************************O*^***************************************************************************** CALL_GUARDED: 6ŠST…BKG_ACTIVE‰Lockoutthebackgroundfromexecution.#ŠJSR„(A0)Calltheguardedroutine.7ŠSF…BKG_ACTIVE‰Unlockthebackgroundsoitcanexecute. 5ŠTST.B‚BKG_FLAG‹Ifwecausedthebackgroundtomissa0ŠBNE„BKG_DISPATCH‡dispatch,dothedispatchnow. ŠRTS—Returntothecaller.   ŠENDéé@ ééé'M68XXX CDIR AFqqCDIR SA  ˆqqCISR AF11qqCISR SA::çqqCKDELAY AFSSqqCKDELAY SA\\¢qqCKEXPAT AFuuqqCKEXPAT SA~~ VqqCMR AFqqCMR SA˜˜ÇÒqqCOMINT SA a a,²qqDCLSHAR AF ’ ’qqDCLSHAR SA › ›ÑqqDELAY AF ´ ´qqDELAY SA ½ ½TqqDEMON AF Þ ÞqqDEMON SA ç ç cqqERQST AFÿÿÿÿÿÿÿÿqq=/*=/*†M68XXX.CDIR.AF=/*)=/* Chain file to assemble M68XXX.CDIR.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68XXX.CDIR.LS=/*=/IFC \1ƒ=ARGM68XXX.CDIR.LS=/ENDIF=/*-=ASM M68XXX.CDIR.SA,M68XXX.CDIR.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UDR.EQ=/*}=/*=ENDééééééA ‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.UDR.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.UDR.EQ‰LIST‰PAGE2CDIR…IDNT…5,1ˆ68xxxDIRECTIVE--CONFIGUREDIRECTIVE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.**‡*************************&*‡*‚CDIRŽ*ƒCONFIGUREEXECDIRECTIVE*‡*—**‡*‚3.1002/09/82‚HLD6‚**‡***************************†ENTRY:‚A6ƒREQUESTOR'STCB*ŽA4ƒPARAMETERBLOCKPOINTER*(A4)‚DIRECTIVENUMBER*Œ2(A4)‚OPTIONS'*Œ6(A4)‚DIRECTIVEROUTINEENTRYADDRESS*(*ŠOPTIONS:‚Bit‚5=0ƒEnablethisdirective*š=1ƒDisablethisdirective**™4=0ƒToberecognizedonlywithinsession2*š=1ƒDirectivecanbecalledbyanytaskinsystem5*’Bits1-0=00‚Whendirectiveexits,returncontrolto*Ÿrequestingtask.4*š=01‚Whendirectiveexits,gotodispatcher.Donot$*Ÿputrequestingtaskonreadylist.2*š=10‚Whendirectiveexits,putrequestingtaskon'*ŸREADYlistandthengotodispatcher.**„EXIT‚D0=0‚SUCCESS*<*ˆTHEFOLLOWINGRETURNCODESARERETURNEDINLOWER1/2OFD0*6*ŠRTCDPBLK-2ƒPARAMBLKADDRNOTINUSER'SADDRSPACE#*ŠRTCDNTBL-4ƒTABLEDOESNOTEXIST?*ŠRTCDTFUL-5ƒTABLENOTLARGEENOUGHFORTHISDIRECTIVENUMBER/*ŠRTCDDPRQ-6ƒDIRECTIVENUMBERALREADYDEFINED@*ŠRTCDALOW-9ƒNOTALLOWEDTODELETEANOTHERSESSION'SDIRECTIVE?*ŠRTCDADR1-12ƒEXECROUTINEADDRESSNOTINUSER'SADDRESSSPACE*‰SECTIONLEVEL03* ‰XDEF„CDIR ‰XREF.S‚UDRBEG*3CDIR…MOVE.L„UDRBEG,A2‹StartofUserDirectiveTable‰MOVE.L„A2,D0Doestableexist?-‰BEQ.S…CDIRE4Žifnot,thenreturn(error_04); ‰CLR.L…D0’Clearforshortload#‰MOVE.W„(A4),D0GetDirctivenumber'‰BGE.S…CDIRE5ŽBranchifpositivenumber ‰NEG.W…D0’Changenegtopositive1‰CMP.W…UDRCNT(A2),D0‡Willdirectivefitintable?‰BGT.S…CDIRE5ŽBranchifno ‰SUB.L…#1,D0Entryoffset%‰MULU†#UDRESIZ,D0‰=(NUM-1)*entrysizeJ!?%‰LEA‡UDRENTRY(A2,D0),A2‚ENTRYADDRESS‰MOVE.W„2(A4),D2ŒOptions‰BTST†#5,D2Enableordisable?‰BNE.S…CDIRD1ŽBranchifdisable *‰TST.L…UDRADDR(A2)‰Hasentrybeenclaimed?‰BNE.S…CDIRE6ŽBranchifyes %‰BTST†#4,D2Isthisaglobalrequest?‰BEQ.S…CDIR04ŽBranchifNO 4‰BTST†#TSKASYST,TCBATTR(A6)Iscallerasystemtask?‰BNE.S…CDIR04ŽBranchifyes #‰BCLR†#4,D2Changetolocalrequest)CDIR04ƒTR0.LOGPHY‚,4(A4),#2 ‰BRA.S…CDIR06 ‰NOP!‰EXIT†RTCDADR1ŒERROR-BADADDRESS  **ˆErrorReturns* /CDIRE4ƒEXIT†RTCDNTBLŒError-Tabledoesn'texist .CDIRE5ƒEXIT†RTCDTFULŒError-Won'tfitintable /CDIRE6ƒEXIT†RTCDDPRQŒError-Numberalreadyused 1CDIRE9ƒEXIT†RTCDALOWŒError-Notallowedtodelete  **ˆBuildNewEntryinUDR* ?CDIR06ƒMOVE.L„D6,UDRADDR(A2)†Entryaddressofdirectiveroutine#‰AND.W…#$13,D2Maskoffunusedbits2‰MOVE.W„D2,UDROPT(A2)‡Saveoptionsandexitnumber6‰MOVE.L„TCBSESSN(A6),UDRSESS(A2)„Savecaller'ssession‰EXIT†SUB‘exit(subroutine);  **ˆDisableEntry* *CDIRD1ƒTST.L…UDRADDR(A2)‰DoesEntryexist?,‰BEQ‡CDIRE6ŽBranchifno-returnerrorcode (‰MOVE.L„TCBSESSN(A6),D0…Caller'ssession-‰CMP.L…UDRSESS(A2),D0†Iscallersamesession?*‰BEQ.S…CDIRD2ŽBranchifyes-oktodelete 4‰BTST†#TSKASYST,TCBATTR(A6)Iscallerasystemtask?0‰BEQ‡CDIRE9ŽBranchifno-notallowedtodelete 5CDIRD2ƒCLR.L…UDRADDR(A2)‰Clearentry-meansnotused‰EXIT†SUB‘exit(subroutine);‰ENDéA é=/*=/*†M68XXX.CISR.AF=/*)=/* Chain file to assemble M68XXX.CISR.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68XXX.CISR.LS=/*=/IFC \1=ARG M68XXX.CISR.LS=/ENDIF=/*-=ASM M68XXX.CISR.SA,M68XXX.CISR.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.IOV.EQ=/*}=/*=ENDéééééé)‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.IOV.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.IOV.EQ‰LIST‰PAGEBCISR…IDNT…5,1‚68xxxDIRECTIVE--CONFIGUREINTERRUPTSERVICEROUTINE*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**‡*******************1*‡*‚CISRˆ*ƒCONFIGUREINTERRUPTSERVICEROUTINE*‡*‘**‡*‚3.10…HLD6‚**‡*…10/14/80„**‡*…03/30/81„**‡*…02/15/82„**‡*********************†ENTRY:‚A6ƒREQUESTOR'STCB*ŽA4ƒPARAMETERTABLEPOINTER*(A4)‚TASK‚0=USEREQUESTOR'S*Œ4(A4)‚SESSN#*Œ8(A4)‚OPTIONS*‹10(A4)‚VECTORNUMBER*‹12(A4)‚ISRADDRESS*‹16(A4)‚ARGUMENT**‹OPTIONBITS15-13:*˜000…ALLOCATEVECTOR*˜001…DEALLOCATEVECTOR*˜010…SWITCHTONEWISR**„EXIT‚D0=0‚SUCCESS*<*ˆTHEFOLLOWINGRETURNCODESARERETURNEDINLOWER1/2OFD0*6*ŠRTCDPBLK-2ƒPARAMBLKADDRNOTINUSER'SADDRSPACE)*ŠRTCDTASK-3ƒSOURCETASKDOESNOTEXIST4*ŠRTCDTFUL-5ƒNOROOMINIOVCTTABLE(MAX#CLAIMS)-*ŠRTCDDPRQ-6ƒREQUESTEDVECTORNOTAVAILABLE/*ŠRTCDNFND-7ƒVECTORDOESNOTBELONGTOCALLER6*ŠRTCDADR1-12ƒISRADDRESSNOTINUSER'SADDRESSSPACE*ŠRTCDOPT‚-15ƒINVALIDOPTIONS*‰SECTIONLEVEL03* ‰XDEF„CISR ‰XREF.S‚COMINT‰XREF.S‚COMNISR‰XREF.S‚IOVCTBGN‰XREF.S‚VCTUBGN‰PAGE*H*‚DOESTHISNEEDTOBEAJSR?‚WEENDUPPUTTINGAPCANDSRONTHESTACKG*‚ANDJUSTADDING6TOTHESPINCOMINB T--MAYBEWEDON'TNEEDEITHER....* -JSRINST‚EQU…$4EB9‰OPCODEFORJSRINSTRUCTION  CISR:#‰MOVE.L‚VCTUBGN,A1„VECTORUSETABLE&‰MOVE.L‚IOVCTBGN,A2ƒVECTORCLAIMTABLE ‰CLR.LƒD7 ‰CLR.LƒD2%‰MOVE.B‚CISVCT+1(A4),D2‚VECTORNUMBER‰TST.WƒCISOPT(A4)…CHECKOPTIONS$‰BNE.SƒCISR12‰BRANCHIFNOTALLOCATE  **ˆAllocatevector.* $‰TST.Bƒ0(A1,D2)†ISVECTORAVAILABLE?.‰EXIT.NERTCDDPRQ†ERROR-VECTORNOTAVAILABLE '‰MOVE.L‚#IOVENTR,D7ƒOFFSETTO1STENTRY CISR04:2\;UC7‰LEA…0(A2,D7),A3ƒENTRYADDRESS*‰CMP.LƒIOVEND(A2),A3‚ISTHISENDOFTABLE?*‰EXIT.GERTCDTFUL†ERROR-NOROOMINTABLE '‰TST.LƒIOVTCB+6(A3)‚ISENTRYAVAILABLE?‰BEQ.SƒCISR07ˆBRANCHIFYES ‰ADD.Lƒ#IOVESZ,D7„GETNEXTENTRY ‰BRA…CISR04 CISR07:'‰MOVE.W‚#JSRINST,(A3)+ƒPUTJSRINTABLE6‰LEA…COMNISR(PC),A0ƒSTARTOFINTERRUPTSERVICEROUTINE‰MOVE.L‚A0,(A3)+‰SAVEINTABLE  **ˆCheckISRaddress.* CISR08:(‰TR0.LOGPHY‚,CISISR(A4),#4$‰BRA.SƒCISR10ˆBRANCHIFGOODADDRESS‰NOP &‰EXIT„RTCDADR1‰ERROR-BADISRADDRESS **ˆPutentryintable.* CISR10:)‰MOVE.WƒD2,IOVVECT(A3)ˆSAVEVECTORNUMBER&‰MOVE.LƒA5,IOVTCB(A3)‰SAVETCBADDRESS.‰MOVE.LƒCISISR(A4),IOVADR(A3)SAVEISRADDRESS+‰MOVE.LƒCISARG(A4),IOVARG(A3)SAVEARGUMENT3‰ADD.L„#IOVESZ-IOVENTR,D7„ADJUSTFORSTARTOFTABLE/‰DIVU…#IOVESZ,D7ŒCONVERTOFFSETTOENTRYNUMBER,‰MOVE.BƒD7,0(A1,D2)‹SAVEINVECTORUSETABLE,‰BSET…#TSKIUVCT,TCBATTI(A5)SETBITFORTERM‰LEA†-6(A3),A3POINTATJSR#‰LSL.L„#2,D2‘MULTIPLYVECTOR#BY4‰MOVE.LƒD2,A0‘VECTORADDRESS‰MOVE.LƒA3,(A0)CHANGEVECTOR!‰EXIT…SUB“exit(subroutineexit);  *"*ˆSwitchISRordeallocatevextor.* CISR12:/‰MOVE.Bƒ0(A1,D2),D7†GETENTRYOFFSETFORVECTOR"‰BEQ.S„CISR14‹ENTRYDOESNOTEXIST !‰SUB.L„#1,D7ŒDECREMENTFOROFFSET*‰MULU…#IOVESZ,D7‡CONVERTENTRY#TOOFFSET"‰ADD.L„#IOVENTR,D7†ADDHEADERSIZE‰LEA†0(A2,D7),A3†ENTRYADDRESS#‰MOVE.LƒIOVTCB+6(A3),A0‚TCBADDRESS1‰MOVE.LƒTCBSESSN(A0),D0‚SESSIONTOD0FORCOMPARE$‰CMP.L„TCBSESSN(A6),D0‚SAMESESSION?‰BEQ.S„CISR16‹IFYES-OK 4‰BTST…#TSKASYST,TCBATTR(A6)ƒISCALLERASYSTEMTASK?‰BNE.S„CISR16‹IFYES-OK CISR14:1‰EXIT…RTCDNFND‰ERROR-VECTORNOTOWNEDBYTARGET  **ˆIsthisswitchordeallocate?* CISR16:ŠLEA…6(A3),A3ŠSKIPJSRENTRY!ŠBTST„#6,CISOPT(A4)…ISITSWITCH?ŠBNE…CISR08ŒBRANCHIFYES %ŠBTST„#5,CISOPT(A4)…ISITDEALLOCATE?,ŠEXIT.EQRTCDOPT‹NO-ERROR-INVALIDOPTION  * *ˆDeallocate.* ŠBSR.SƒDIOV_SUBŠCLEARTABLES!ŠEXIT„SUBexit(subroutineexit);ŠPAGE**ˆTrap#0routineto3*ˆdisconnectuserISRvectorswhentaskterminates.* ‰XDEF†SBDIOVX SBDIOVX:+ŠMOVE.L‚VCTUBGN,A1ˆADDROFVECTORUSETABLE.ŠMOVE.L‚IOVCTBGN,A2‡ADDROFVECTORCLAIMTABLE'ŠMOVE.L‚#IOVENTR,D7‡OFFSETTO1STENTRY DIOVX2:ŠLEA…0(A2,D7),A3‡ENTRYADDRESS*ŠCMP.LƒIOVEND(A2),A3…ISTHISENDOFTABLE?ŠBGE.SƒDIOVX12‹BRANCHIFYES +ŠCMP.LƒIOVTCB+6(A3),A4ƒENTRYFORTHISTASK?ŠBNE.SƒDIOVX10‹BRANCHIFNO ŠLEA…6(A3),A3ŠSKIPJSR ŠCLR.LƒD2"ŠMOVE.W‚IOVVECT(A3),D2„D2=VECTOR#ŠBSR.SƒDIOV_SUBŠCLEARTABLES DIOVX10:#ŠADD.Lƒ#IOVESZ,D7ˆNEXTENTRYOFFSETŠBRA…DIOVX2ŒGOBACK DIOVX12:ŠRTS    *&*ˆSubroutinetodeallocateISRvector.* DIOV_SUB:,ŠLEA…COMINT(PC),A0…POINTERTOCOMINTROUTINEŠMOVE.L‚A0,D3WANTITIND3#ŠLSL.Lƒ#2,D2MULTIPLYVECTOR#BY4ŠMOVE.L‚D2,A0VECTORADDRESS8ŠMOVE.L‚D3,(A0)‹RESTORECOMINTROUTINEADDRESSINVECTORŠLSR.Lƒ#2,D2BACKTOVECTOR#&ŠCLR.Bƒ0(A1,D2)ŠCLEARVECTORUSETABLE*ŠCLR.LƒIOVTCB(A3)ˆCLEARVECTORCLAIMTABLEŠRTSŠENDB ééé=/*=/*†M68XXX.CKDELAY.AF=/*,=/* Chain file to assemble M68XXX.CKDELAY.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.CKDELAY.LS=/*=/IFC \1ƒ=ARGM68XXX.CKDELAY.LS=/ENDIF=/*3=ASM M68XXX.CKDELAY.SA,M68XXX.CKDELAY.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDééééééKŠPAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE'CKDELAYƒIDNTƒ5,168xxxCHECKDELAYLIST*$*†COPYRIGHTED1980BYMOTOROLA,INC.*#* Fires task PAT node passed to it.*;* Modified 21 Aug 1984 to conform to redesigned PAT scheme.*A*†CKEXPA‚iscalledfromabackgroundroutinescheduledbyTIMEINT* *Entry:‚A1…pointstoPATheader?*‰A2…pointstoPATentrytofire.‚Thisentryhasallreadybeen*’removedfromthePATlist.3*‰D2…TIME_LEFTvaluewhennodewaspulledfromlist9*‰A7…pointstowordcontaininginterruptlevelofTIMEINT *Enteredwithinterruptsmasked@*‰PATDELTA(A2)containsNSEwhennodewaspulledfromlist.‚This5*’isactuallythedesiredabsolutefiringtimeandis)*’lessthanorequaltothecuC rrenttime.*ŠSECTIONLEVEL00* ŠXDEFƒCKDELAY ŠXREFƒPAT_RM_1ST_NODEŠXREFƒPAT_SCHED_NEW_NODE ŠXREFƒSBRDTIM ŠXREF.SDATE ŠXREF.SNSEŠXREF.SPATBEG‰PAGECKDELAY:(ŠMOVE.WSR,-(A7)‹Useforunmaskinglater:ŠMOVE.LPATTCB(A2),A5†TCBaddressassociatedwith1stnode1ŠBTSTƒ#TSK2TRMP,TCBSTATE(A5)Istaskterminating? ŠIFTHEN.S3DISABLE_INTERRUPTS…Yes-sojustfreethenode...PAT_FREE_NODEŠ...andreturn MOVE.W(A7),SR‰UnmaskinterruptBRA.S‚CKDELAYRŠENDI 6ŠBCLRƒ#PATO1STE,PATOPT+1(A2)Clear1stactivationflag(ŠMOVE.WPATOPT(A2),D7†activationoptions ŠBEQ.S‚CKDELAY6‹BRANCHIFDELAY)ŠBTSTƒ#PATOINTV,D7‡Shoulddelaybereset?ŠIFTHEN.S2ADD.W‚#1,PATCNT(A2)ƒYes,incrementsequencecount*BSETƒ#PATO1STE,D7„Flag-reactivateentryŠENDI  "ŠBTSTƒ#PATOEVNT,D7‡Messagewanted?ŠBNE.S‚CKDELAY7‹BRANCHIFYES $ŠBTSTƒ#PATOWAKE,D7‡Wakeuporresume? ŠBEQ.S‚CKDELAY5‹BRANCHIFRESUME +ŠBCLRƒ#TSKSBLCK,TCBSTATE(A5)TASKWAITING?TP]KeŠBNE.S‚CKDELY6A‹BRANCHIFYES /ŠBSETƒ#TSK2WKWT,TCBSTAT2(A5)SETPENDINGWAKEUPŠBRA.S‚CKDLYNX 8CKDELAY5‚BCLRƒ#TSKSSUSP,TCBSTATE(A5)WASTASKSUSPENDED?ŠBEQ.S‚CKDLYNXŒBRANCHIFNO ŠBRA.S‚CKDELY6A‹BRANCHIFYES 4CKDELAY6‚CLR.L‚TCBDLAY(A5)ˆDELAY-CLEARTCBPOINTER.ŠBCLRƒ#TSKSBLCK,TCBSTATE(A5)CLEAR'WAIT'ALSO*CKDELY6A‚TR0.RYWAKE(A5)‹PUTONREADYLIST 5CKDLYNXƒBTSTƒ#PATO1STE,D7‡Wasnodetobereactivated?ŠIFTHEN.S/DISABLE_INTERRUPTS…No-sojustfreetheentryPAT_FREE_NODEMOVE.W(A7),SR‰UnmaskŠELSE.S=MOVE.LPATINTV(A2),D2‚Intervalfromnowwewantnodetofire *H* D2 contains elapsed time from now that we want to fire this node again* DISABLE_INTERRUPTS…Mask,BSR„PAT_SCHED_NEW_NODEReschedulethisnodeMOVE.W(A7),SRŒUnmaskŠENDI 6CKDELAYR‚MOVE.W(A7)+,SR‹UnmaskandloseSRfromstackŠRTS  **„SENDMESSAGETOASR* 4CKDELAY7‚MOVEM.LD1/D7/A1/A1-A3,-(A7)Saveregisters#ŠMOVE.WSR,-(A7)‹SaveforunmaskingŠDISABLE_INTERRUPTSˆMaskŠBSR„SBRDTIMŒGettimeintoD1#ŠMOVE.LDATE,D2ŒPUTDATEINMESSAGEŠMOVE.LD1,D3ŽUPPER1/2OFTIME#ŠMOVE.WDATE+2,D3ŠLOWER1/2OFDATEŠMOVE.W(A7)+,SR‹UnmaskŠSWAPƒD3ŠMOVE.LD1,D4ŽLOWER1/2OFTIMEŠSWAPƒD4!ŠMOVE.W#$0A04,D2ŠLENGTHANDTYPEŠBTSTƒ#PATOARID,D7‡IDPROVIDED?ŠBEQ.S‚CKDELAY8‹BRANCHIFNO !ŠMOVE.W#$1004,D2ŠLENGTHANDTYPE&ŠMOVE.WPATARID(A2),D4…UPPER1/2OFID3ŠMOVE.LPATARID+2(A2),D5ƒLOWER1/2OFIDPLUSCOUNT CKDELAY8‚SWAPƒD2(ŠBTSTƒ#PATOASRA,D7‡SpecialASRproviced?ŠBEQ.S‚CKDELY11‹BRANCHIFNO !ŠMOVEM.LD3-D5,-(A7)‡SAVEMESSAGE(ŠTR0.LOGPHY,PATASR(A2),#2&ŠBRA.S‚CKDELY10‹BRANCHIFGOODADDRESS ŠNOP$ŠMOVEM.L(A7)+,D3-D5‡RESTOREMESSAGEŠBRA.S‚CKDELY11‹GOSENDIT ;CKDELY10‚MOVEM.L(A7)+,D4-D6‡MOVEMSGTOMAKEROOMFORADDR!ŠMOVE.LPATASR(A2),D3†ASRADDRESS&ŠSWAPƒD3‘SAVELOWER1/2OFASRADDRESS#ŠMOVE.WD2,D3ŽMOVESTARTOFMESSAGE.ŠADD.L‚#$04800000,D2†INCREMENTLENGTHANDTYPE&ŠMOVE.WPATASR(A2),D2†UPPER1/2OFASR CKDELY11‚TR0.QEVNTT(A5)ŠNOP—IGNOREFAILSŠMOVEM.L(A7)+,D1/D7/A1-A3 ŠADD.L‚#1,D1 ŠBRA„CKDLYNXŒGOCHECKNEXTENTRYŠENDééC ééééé=/*=/*†M68XXX.CKEXPAT.AF=/*,=/* Chain file to assemble M68XXX.CKEXPAT.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.CKEXPAT.LS=/*=/IFC \1ƒ=ARGM68XXX.CKEXPAT.LS=/ENDIF=/*3=ASM M68XXX.CKEXPAT.SA,M68XXX.CKEXPAT.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDéééééémŠPAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE;CKEXPATƒIDNTƒ5,168xxxCHECKPATFOREXECENTRYTOACTIVATE*$*†COPYRIGHTED1982BYMOTOROLA,INC.*:*†FireExecnode(pulledfromPATlistbycallingroutine)**;* ModifiedD  21 Aug 1984 to conform to redesigned PAT scheme.*A*†CKEXPA‚iscalledfromabackgroundroutinescheduledbyTIMEINT*4*†Onentrythestackissetupinthefollowingway:0*‰SP-->PC.LPCfromcallingbackgroundroutine!*VOR.WŽVectoroffset(if68010).*A*‰Ifanexecprocedureisdispatched,whenitreturnswithanRTE?*‹itwillreturnimmediatelyfollowingthebackgroundroutine's *‹BSRCKEXPA*A*†Registersonentry:D0=StatusRegisterofbackgroundroutine./*šD2=TIME_LEFTwhennodewaspulledfromlist*šA1ƒPointstoPATheader-*šA2ƒPointstonodetofire,thenodehasall#*¡readybeenremovedfromPATlist.1*šPATDELTA(A2)containstheNSE(NextSignificant'*¡Event)valuewhenthenodewaspulled'*¡fromthepatlist.‚Thisisinreality)*¡thedesiredabsolutetimethatthenode*¡wastofire.**2*†Registersonexit:A2,A3,A4,D0,D1,D2destroyed.*1*†RegistersonentrytoactivatedExecProcedure:*šD0=1*šD1=RequestID*ŠSECTIONLEVEL00* ŠXDEFƒCKEXPAŠXREFƒPAT_SCHED_NEW_NODECKEXPA:8ŠMOVE.WD0,-(A7)‹SavestatusregsoRTE(perfromedby...%*£...scheduledPATroutine)willwork,ŠMOVE.W#1,PATCNT(A2)†Setcountofintervals>ŠMOVE.LPATINTV(A2),D2…Desiredintervaluntilnodefiresagain 0ŠBTST#PATOINTV,PATOPT(A2)Shouldwereschedule?ŠIFTHEN.SDISABLE_INTERRUPTS…Yes-‚Mask)BSR‚PAT_SCHED_NEW_NODESchedulethenodeŠELSE.SDISABLE_INTERRUPTS…MaskPAT_FREE_NODEŠENDI !ŠMOVE.LPATARID(A2),D1…RequestIDvK ŠMOVE.W#1,D0ŽIntervalcount* ŠMOVE.WSR,D2ŠAND.W‚PATILVL(A2),D23ŠMOVE.WD2,SRŽSetinterruptlevelofExecprocedureŠMOVE.LPATASR(A2),A3,ŠJMP„(A3)WewillJMPintotheEXECperiodic#*£activationroutine.‚WhentheExec#*£periodicactivationsRTEsitwill(*£takeusbacktothebackgroundroutine*£thatcalledus.ŠENDéééééé=/*=/*†M68XXX.CMR.AF=/*(=/* Chain file to assemble M68XXX.CMR.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to M68XXX.CMR.LS=/*=/IFC \1ƒ=ARGM68XXX.CMR.LS=/ENDIF=/**=ASM M68XXX.CMD R.SA,M68XXX.CMR.RO,\1;RZ=099=/*{ Included files are:=/*ƒ9995.&.TRACE.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.CCB.EQ=/*ƒ9995.&.LV5.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.UTILITY.MC=/*}=/*=ENDéééééé‡5CMR‡IDNTƒ5,1ˆ68xxxRMS68KCHANNELMANAGEMENTROUTINES.ŠTTL„LEVEL5CHANNELMANAGEMENTREQUESTMODULE ŠLLENƒ120J****************************************************************************,* CMR -- REV. 1.00 XXYYYZZ (TB59) STEVE BALL*4.0002NOV81(TL09)JIMSMITH*4.0101FEB82(TL09)JIMSMITH*4.02‚6/15/82‡SJF$*’Addedsupervisor/subordinatejunk.*4.03‚9/1/82‡SJF.*’Addedcodetosupportvariable-lengthCCB's.*4.04‚9/12/82‡SJF3*’Movedthepollingtabletothetopofthedevice-3*’dependentportionoftheCCB.‚Also,CMRnowmoves5*’inonlythe#ofpollingtableentriesdefinedfrom*’theallocateparameterblock.*4.3010/4/83‡SJF#*’AddedSYSFAILprocessingroutine.*4.4011/27/84‡SJF,*’Changestomakecodeposition-independent.7*’FixtoDELETElogicthatsetsuptheJSRinstruction.*-*ƒPURPOSE:‚PERFORMCHANNELMANAGEMENTREQUEST/*ALLOCATE,DELETE,ATTACH,DETACH,PUTON-LINE'*TAKEOFF-LINE.‚ALSOHANDLELINKAGETO.*APPROPRIATEHANDLERTOPERFORMI/OFUNCTION.*VALIDATEPARAMETERBLOCKFOR+*ALLI/OREQUESTSOTHERTHANINITIATEI/O.***ƒENTRY:‚TRAP1ROUTINE*‹A0POINTSTOPARAMETERBLOCK*‹A6POINTSTOCALLER'STCB***ƒEXIT:*ŠD0CONTAINSCOMPLETIONCODE&*Œ0-SUCCESSFULCOMPLETIONOFREQUEST2*ŒNONZERO-ERRORCONDITION,REQUESTNOTCOMPLETED**ƒREGISTERSUSED:ƒ01234567 *”D**ƒ*** *”A********ƒCODEISRE-ENTRANT**ƒTRAP0ROUTINESCALLED:*œP*œV*œLOGPHY *œPAGEALOC *œPAGEFREE*H*----------------------------------------------------------------------- )ŠXDEFƒCMRTRAP#1processingentrypoint..ŠXDEFƒCMRSFAIL‹SYSFAILprocessingentrypoint.ŠPAGE**‚Includedequatefiles: *‰TRACE.EQ*‰STR.EQ*‰TCB.EQ*‰CCB.EQ*‰LV5.EQ *‰TR1RTCD.EQ *‰UTILITY.MC*ŠNOLISTŠINCLUDE9995.&.TRACE.EQŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.CCB.EQŠINCLUDE9995.&.LV5.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.UTILITY.MCŠLIST *E Q™/¡.©C±7¹PÁKÉLÑ6Ù9á<é:ñGùP B T Q _ !] )S 1S 9D AC I2 QF?*‚EXTERNALREFERENCESTOEXECROUTINES,SYSTEMPARAMETERS,ETC.*ŠSECTIONLEVEL05 ŠXREF.SCCBHDŠXREF.SCOMINTŠXREF.SKILLERŠXREF.SSEMCCBŠXREF.STRACERŠXREF.STRACFLAGŠXREF.SVCTUBGN  *$*…EQUATESFORTESTINGVECTORNUMBERS*#AVECTLOƒEQU„25‘LOWESTAUTOVECTOR#$AVECTHIƒEQU„31‘HIGHESTAUTOVECTOR##UVECTLOƒEQU„64‘LOWESTUSERVECTOR#ŠPAGEO********************************************************************************6*‰NOTESCONCERNINGSUPERVISORANDSUBORDINATECHANNELS6*‰DescriptionofchangesmadebySteveFranckin6/82.*O******************************************************************************* J*‚Somedevicespossessmorethanonechannel(e.g.,someserialcontrollerI*‚chips).‚InmanycasessuchadevicegivesthesameinterruptregardlessK*‚ofthechannelwhichcausedit,andeachofthechannelsmustinspecttheD*‚devicetodeterminewhethertheinterruptbelongstothatchannel.*I*‚Thiscancreateaproblemifreadingthedevice'sregistersinsomewayJ*‚signalsthedevice(itmightcleartheinterrupt,forexample).‚Inorder@*‚toprovideforthissituationCMRhadtobechangedtoeither:2*‰passinformationfromonehandlertoanother,or@*‰providethecapacityforanother,separatemoduletofieldthe@*Œinterruptsfromthe7201andcorrectlycalltherighthandler.J*‚Thesecondapproachwaschosenbecauseitismoregeneralandbecauseit=*‚stillallowsthechannelstobeindependentofoneanother.*M*‚Soitispossibletodeclarechannelstobesupervisorsorsubordinates(orJ*‚neither).‚ASUPERVISORCHANNELisallocatedfirst(optionbitCMRFGSPonH*‚theallocatecommand),andthentheSUBORDINATECHANNELSareallocatedH*‚(optionbitCMRFGSB)withthesupervisor'schannelmnemonicinCMRSUP.J*‚ThewaythingsoperateisthatthesubordinatechannelsreceiverequestsH*‚toinitiateI/Oasusual,butalltheirinterruptsaredirectedtotheI*‚supervisor.‚Thesupervisor(whichmustbewrittentofitthedeviceandI*‚subordinatechannels)thenfieldstheinterruptandfarmsitouttotheH*‚appropriatesubordinateinwhatevermannerthedesignerdesires.‚I.E.,H*‚thedetailsofentryintothesubordinatechannelforproperinterruptJ*‚handlingareleftundefined--allCMRcaresaboutisgivingtheinterrupt*‚tothesupervisor.*I*‚Thesupportingdatastructureisalinkedliststartingfromthesuper-H*‚visorchannelandcontainingall(thereisnolimit)subordinates,viaI*‚thelongwordCCBSUBintheCCB.‚ItisexpectedthatthesupervisorwillJ*‚traversethislistinsearchofadrivercorrespondingtotheparticular*‚interrupttype.*H*‚Thesupervisorchannelis(ofcourse)linkedintothevectorchainforG*‚thespecifiedvector,butthesubordinatechannelsarenot.‚HencetheD*‚onlywaytheywilleverbeenteredforinterruptserviceisifthe%*‚supervisorchanneljumpsintothem.*,*‚Therearesomerulesassociatedwiththis:B*‰Asinglechannelmaynotbebothasupervisorandasubordinate.D*‰Achannelmaynotbeallocatedasasubordinatetoachannelwhich*isnotasupervisor.;*‰Thesupervisormustbeallocatedbeforeitssubordinates.G*‰Thesupervisorandallitssubordinatesmustspecifythesamevector.**‰ItisillegaltoATTACHtoasupervisor.F*‚ViolationofanyoftheserulesresultsinexecerrorcodeRTCDLGCF.*‰PAGE*** ALLOCATE CHANNEL PARAMETER BLOCK FORMAT:* ŠOFFSET0$CMRCODEƒDS.Bƒ1’CMRFUNCTIONCODE=1ŠDS.Bƒ1’SUBCODECMRFG…DS.Bƒ2’CMROPTIONSWORDCMRMNEMƒDS.Bƒ4’CHANNELMNEMONICCMRTYPEƒDS.Bƒ1’TYPE&CMRCMCTƒDS.Bƒ1’RESERVED(USEDBYCHPI)1CMRCADDƒDS.Bƒ4’I/OHANDLERSERVICEVECTORADDRESS4CMRSUP„DS.Bƒ4’SUPERVISORCHANNELMNEMONIC(usedonly*§ifoptionbitCMRFGSBisset)-CMRCHB„DS.Bƒ4’BAE SEOFMEMORYMAPPEDI/OSPACE/CMRMME„DS.Bƒ2’EXTENTOFMEMORYMAPPEDI/OSPACECMRVECTƒDS.Bƒ1’VECTORNUMBER0CMRPPRIO‚DS.Bƒ1’POLLING(HARDWARE)PRIORITY(1-7))CMRSPRIO‚DS.Bƒ1’SOFTWAREPRIORITY(0-$FF).CMRPECTƒDS.Bƒ1’NUMBEROFPOLLINGTABLEENTRIES,ALLOCLGH‚EQU„*’LENGTHOFFIXEDPARTOFBLOCK)* POLLING TABLE ENTRIES FOLLOW THIS POINTCMRPBASE‚EQU„*)ŠOFFSET0’POLLINGTABLE(VARIABLELENGTH)"CMRPOFFƒDS.Bƒ2’POLLINGBYTEOFFSETCMRMASKƒDS.Bƒ1’POLLINGMASK!CMRPTSTƒDS.Bƒ1’POLLINGTESTVALUE CMRRESOƒDS.Bƒ2’RESETBYTEOFFSETCMRRESVƒDS.Bƒ1’RESETVALUEŠDS.Bƒ1’RESERVED  ** CMRFG (OPTIONS) EQUATES*1CMRFGSYS‚EQU„0’SYSTEMATTACHONLYFLAG(ALLOCATE)/CMRFGAQƒEQU„0’OPTIONFORASQSPCEIFIED(ATTACH)0CMRFGB1ƒEQU„1’RESERVED(USEDBYCHPI)(ALLOCATE)-CMRFGDIR‚EQU„2’EXCLUSIVEVECTORING(ALLOCATE)6CMRFGSBƒEQU„3’THISCHANNELISTOBESUBORDINATETOTHE(*§SUPERVISORWHOSEMNEMONICISINCCBSUP0CMRFGSPƒEQU„4’THISCHANNELISTOBEASUPERVISOR  *B*DELETECHANNELPARAMETERBLOCKCODE=2.‚THEREMAININGPARAMETER>*ƒBLOCKISTHESAMEASALLOCATEBUTCONTINUESONLYTHROUGHTHE*ƒCHANNELMNEMONICFIELD.*6CMRCD2LƒEQU„8’LENGTHOFDELETECHANNELPARAMETERBLOCK*'* ATTACH CHANNEL PARAMETER BLOCK FORMAT* ŠOFFSET0ŠDS.Bƒ1’CMRFUNCTIONCODE=3ŠDS.Bƒ1’SUBCODE(NONE)ŠDS.Bƒ2’OPTIONSWORDŠDS.Bƒ4’CHANNELMNEMONIC$CMRKEY„DS.Bƒ1’USERSUPPLIEDI.D.KEY%CMRASQLƒDS.Bƒ1’ASQLENGTHIFREQUIRED,CMRSVVCƒDS.Lƒ1’ASQSERVICEVECTOR(0=NONE)&CMRTMOUT‚DS.Wƒ1’RESERVED(USEDBYIPC)%CMRRTRYƒDS.Wƒ1’RESERVED(USEDBYIPC)'CMRCD3LƒEQU„*’LENGTHOFPARAMETERBLOCK*+* IOH PARAMETER BLOCK FORMAT (INITIATE I/O)* ŠOFFSET0 ŠDS.Bƒ1’CODE(CMRSUBCD‚DS.Bƒ1’SUBCODE(0-I/O,1-RESET)ŠDS.Bƒ2’RESERVEDŠDS.Bƒ4’CHANNELMNEMONICCMRTASKƒDS.Bƒ4’TASKNAMEŠDS.Bƒ4’SESSIONCODECMRBB…DS.Bƒ4’RESERVED.CMRCB…DS.Bƒ4’LOGICALADDRESSOFCOMMANDPACKET ŠDS.Bƒ2’LENGTHOFCOMMANDPACKET'CMRPBLGƒEQU„*’LENGTHOFPARAMETERBLOCK**D*DETACHCHANNELPARAMETERBLOCKCODE=4.‚THEREMAINININGPARAMETER>*ƒBLOCKISTHESAMEASALLOCATEBUTCONTINUESONLYTHROUGHTHE*ƒCHANNELMNEMONICFIELD.*'CMRCD4LƒEQU„8’LENGTHOFPARAMETERBLOCK*E*PUTON-LINEPARAMETERBLOCKCODE=5.‚THEREMAININGPARAMETERBLOCK@*ƒISTHESAMEASALLOCATEBUTCONTINUESONLYTHROUGHTHECHANNEL*ƒMNEMONICFIELD.*'CMRCD5LƒEQU„8’LENGTHOFPARAMETERBLOCK*G*TAKEOFF-LINEPARAMETERBLOCKCODE=6.‚THEREMAININGPARAMETERBLOCK@*ƒISTHESAMEASALLOCATEBUTCONTINUESONLYTHROUGHTHECHANNEL*ƒMNEMONICFIELD.*'CMRCD6LƒEQU„8’LENGTHOFPARAMETERBLOCK*C*INITIATEI/OPARAMETERBLOCKCODE=7.‚REMAININGFORMATISUNIQUE?*ƒTOSPECIFICHANDLER(EITHERSTANDARDORNONSTANDARDHANDLER).*-CMRCD7LƒEQU„CMRPBLGŒLENGTHOFPARAMETERBLOCK*** ERROR CODE EQUATES*$* ERROR CODES COMMON TO REST OF EXEC*=CMRPBX„EQU„RTCDPBLK‹PARAMETERBLOCKNOTWITHINCALLER'SSPACE=CMRATHXƒEQU„RTCDDPRQ‹DUPLICATEREQUEST-CAN'TDOTWICE(ATCH'CMRONX„EQU„RTCDDPRQ‹DITTO(PUTONLINE)4CMRMEMXƒEQU„RTCDNMEM‹MEMORYNOTAVAILABLE(ALLOCATE)6CMRSYSXƒEQU„RTCDALOW‹NOPERMISSION(NOTASYSTEMTASK):CMRMNEXƒEQU„RTCDLGCF‹CONFLICT(DUPLICATECHANNELMNEMONIC)=CMRISUPX‚EQU„RTCDLGCF‹INVALIDUSE/SPECIFICATIONOFSUPERVISOR *§CHANNEL(SEEDISCUSSIONABOVE)0IOHTASKX‚EQU„RTCDTASK‹TARGETTASKDOESNOTEXIST**@* ERROR CODES UNIQUE TO LEVEL 5 AND NOT DIRECTLY RELATING TO BAD*ƒPARAMETERBLOCK.*4CMRASGXƒEQU„$FFFFFF81ŠCHANNELNOTATTACHEDTOCALLER6CMRUSEXƒEQU„$FFFFFF82ŠCHANNELATTACHEDTOANOTHERTASK&CMROFFXƒEQU„$FFFFFF83ŠCHANNELOFFLINE9CMRBADFƒEQU„$FFFFFF85ŠINVALIDFUNCTIONFORTHISCHNLTYPE** PARAMETER BLOCK ERROR CODES*&CMRCDX„EQU„$FFFFFFC1ŠBADFUNCTIONCODE$CMROPTXƒEQU„$FFFFFFC3ŠINVALIDOPTION.CMRASQLX‚EQU„$FFFFFFC6ŠBADASQLENGTH(ATTACH)4CMRSVVCX‚EQU„$FFFFFFC7ŠSERVICEVECTORERROR(ATTACH)8CMRCHAXƒEQU„$FFFFFFC9ŠBADCHANNELBASEADDRESS(ALLOCATE)1CMRVECXƒEQU„$FFFFFFCBŠBADVECTORNUMBER(ALLOCATE);CMRPPRXƒEQU„$FFFFFFCCŠBADPOLLING(HARDWARE)PRIORITY(F ALLO)3CMRPECTX‚EQU„$FFFFFFCEŠBADPOLLINGTBLCOUNT(ALLO)3CMRPOFXƒEQU„$FFFFFFCFŠBADPOLLINGOFFSET(ALLOCATE)7CMRRESOX‚EQU„$FFFFFFCFŠBADRESETBYTEOFFSET(ALLOCATE)&IOHSESXƒEQU„$FFFFFFC6ŠBADSESSIONCODE*%CMRALLOC‚EQU„1’ALLOCATEFUNCTIONCODE*#* MISC. EQUATES TO MAKE LIFE EASIER*,IPCL†EQU„$10LOW#FORSTANDARDTYPECHANNEL-IPCH†EQU„$7FHIGH#FORSTANDARDTYPECHANNEL5EXECASMƒEQU„0’CONDITIONALASSEMBLYFOREXECEXTERNALS.CMRASQML‚EQU„4’MIN.LGH.ALLOWEDFORASQENTRY+CMRONLYƒEQU„$FFINTERRUPTONLYCHANNELTYPE!IOEVCD„EQU„1’INTERRUPTEVENTCODE%CHPRTBLG‚EQU„6’INTERRUPTEVENTLENGTH+SHRL†EQU„$80LOW#FORSHAREDTYPECHANNELS,SHRH†EQU„$8FHIGH#FORSHAREDTYPECHANNELS** CCB EXTENSION EQUATES*‰OFFSETCCBDDP#CCBSTAGEDS.Bƒ32’EVENTSTAGINGAREA‰PAGEI***************************************************************************$* ENTRY POINT FOR TRAP 1 CMR SERVICE**#*ˆENTRY:‚A6=TCBADDRESSOFCALLER***K****************************************************************************ŠSECTIONLEVEL05 CMR‡EQU„* +‰MOVE.L„A0,D7™PRESERVELOGICALADDROFP.B.;‰BTSTW…#TSKARTIM,TCBATTR(A6)‰IFCLIENTISAREAL-TIMETASK,.‰BNE.S…CMR00003–THENSKIPADDRESSTRANSLATION.  *-* SEE IF P.B. BEGINS IN CALLERS ADDRESS SPACE*%ŠMOVE.LA0,D6ŽLOGICALADDRESSOFP.B.$ŠBTSTW‚#0,D6ŽSEEIFONEVENBOUNDARY&ŠBNE.S‚CMR00001‹BRANCHIFBADBOUNDARY +ŠMOVE.L#8,D5ŽMUSTBEATLEAST8BYTESLONGŠMOVE.LTCBTST(A6),A0 ŠTR0.LOGPHY(ŠBRA.S‚CMR00002‹BRANCHIFP.B.BEGINSOK ŠNOP—BADP.B.BEGINCMR00001‚EQU„* ŠEXITƒRTCDPBLK‹ERRORRETURNCODE *CMR00002‚EQU„*(ŠMOVE.LD6,A0ŽSAVEPHYSICALP.B.ADDRESS CMR00003‚EQU„* ŠMOVE.LA0,A2*1* ISSUE ERROR RETURN IF CHANNEL MNEMONIC IS ZERO.*'ŠMOVE.LCMRMNEM(A2),D1…CHANNELMNEMONIC)ŠBNE.S‚CMR00010‹BRANCHIFMNEMONICPASSES /ŠEXITƒRTCDLGCF‹BADCHANNELMNEMONICRETURNCODE *D* TRY TO FIND THE CCB WITH THE INDICATED MNEMONIC ON THE "ALL" CHAIN*CMR00010‚EQU„*ŠLEA„SEMCCB,A0 ŠTR0.P‚SEMCCB*ŠLEA„CCBHD,A3‹CCBCHAIN"ALL"HEADADDRESSCMR00015‚EQU„*'ŠMOVE.L(A3),A1ŒCCBCHAIN"ALL"POINTER ŠTST.L‚(A3)&ŠBEQ.S‚CMR00020‹BRANCHIFENDOFCHAIN.ŠCMP.L‚CCBMNEM(A1),D1…ISTHISTHEDESIREDCCB?ŠBEQ„CMR01000‹BRANCHIFYES2ŠLEA„CCBALL(A1),A3†LETSLOOKATNEXTITEMONCHAIN ŠBRA„CMR00015*A*CHANNELMNEMONICDOESNOTEXIST.‚IFTHISISANALLOCATEREQUEST*ƒWE'REOKSOFAR.*CMR00020‚EQU„*ŠCMP.B‚#CMRALLOC,(A2)/ŠBNE„CMRBADMN‹BRANCHIFNOTANALLOCATE(ERROR)‰PAGEO*********************************************************************************ˆALLOCATECOMMAND*O******************************************************************************* *!*ƒDETERMINEIFPARAMETERBLOCKIS'*ƒENTIRELYWITHINUSER'SADDRESSSPACE.* ‰BTSTW…#TSKARTIM,TCBATTR(A6)‰BNE.S…CMR00040 *ŠMOVE.LD7,D6ŽPARAMETERBLOCKLOG.ADDRESS-ŠMOVE.LTCBTST(A6),A0†REQUESTOR'STSTPOINTER ŠCLR.L‚D56ŠMOVE.BCMRPECT(A2),D5…NUMBEROFPOLLINGTABLEENTRIES ŠLSL.L‚#3,D5ŽTIMES8BYTES/ENTRY.ŠADDI.W#ALLOCLGH,D5‡PLUSLENGTHOFFIXEDPART ŠTR0.LOGPHY"ŠBRA.S‚CMR00040‹PARAMETERBLOCKOK ŠNOP—BADPARAMETERBLOCK,ŠBRA„CMRBADPB‹BRANCHFORBADPARAMETERBLOCK  *)* PERFORM INDIVIDUAL PARAMETER VALIDATION** VALIDATE VECTOR NUMBER CMR00040‚EQU„* ŠCLR.L‚D0)ŠMOVE.BCMRVECT(A2),D0ˆPICKUPVECTORNO.ŠCMPI.B#AVECTLO,D0ŠBCS.S‚CMRBADVC‹TOOSMALLŠCMPI.B#AVECTHI,D0ŠBLS.S‚CMR00042‹OKŠCMPI.B#UVECTLO,D0ŠBCC.S‚CMR00042‹BRANCHIFOK'CMRBADVC‚EQU„*’HANDLEBADVECTORNUMBER3ŠMOVEQ‚#CMRVECX,D0ˆERRORCODEFORBADVECTORNUMBER ŠBSR„CMRTNVE1‹GOSIGNALANDEXIT CMR00042‚EQU„**B*‚IFTHECHANNELISTOBESUBORDINATE,THEEXCLUSIVEVECTOROPTION*‚SHOULDNOTBESET.*<ŠMOVEQ#XOPDIR+XOPSUB,D1ƒISOLATETHEEXCLUSIVEVECTORINGAND;ŠAND.W‚CMRFG(A2),D1‡SUBORDINATECHANNELOPTIONS.‚IFTHEY'RE>ŠIF.WD1#XOPDIR+XOPSUBTHEN.S„BOTHSET,THAT'SANERROR.ŠMOVEQ‚#CMRISUPX,D0ŠBSR.S‚CMRTNVE1ŠENDI F /ŠMOVE.LVCTUBGN,A1ŒGETVECTORUSETABLEADDRESS%ŠTST.B‚0(A1,D0)ŽISVECTORAVAILABLE?ŠBEQ.S‚CMR00045ŽYESŠBPL„CMRALLALŽNO,ISRHASIT:ŠBTSTW‚#CMRFGDIR,CMRFG(A2)ƒEXCLUSIVEVECTORINGSPECIFIED?*ŠBNE„CMRALLALŽYES,ERROR-ALREADYALLOCATED** VALIDATE SERVICE ADDRESS*CMR00045‚EQU„*4ŠCMP.B‚#CMRONLY,CMRTYPE(A2)INTERRUPTONLYCHANNEL?$ŠBEQ.S‚CMR00060‹YES,SKIPVALIDATION/ŠTST.L‚CMRCADD(A2)ˆVALIDSERVICEVECTORADDRESSŠBNE.S‚CMR00060‹BRANCHIFYES5ŠMOVEQ‚#CMRSVVCX,D0‡ERRORCODEFORBADSERVICEVECTOR"ŠBSR.S‚CMRTNVE1‹GOSIGNALANDEXIT*‰*7*‰*‡****************************************************‰*‡*±*4*‰*‡*ƒNEEDROUTINETOSEARCHCCBLISTFORMATCHON‚*4*‰*‡*ƒCHANNELTYPECODEANDUSEITSSERVICEVECTOR‚***‰*‡*ƒADDRESSELSEIFNOTFOUND-ERROR.Œ**‰*‡*±*7*‰*‡****************************************************‰* ** VALIDATE POLLING PRIORITY*CMR00060‚EQU„*ŠCMPI.B#7,CMRPPRIO(A2)*ŠBHI.S‚CMRBADPP‹POLLINGPRIORITYTOOLARGEŠCMPI.B#1,CMRPPRIO(A2)ŠBCC.S‚CMR00070‹BRANCHIFOK4CMRBADPP‚EQU„*’HANDLEBADPOLLING(HARDWARE)PRIORITYŠMOVEQ‚#CMRPPRX,D0ŠBSR.S‚CMRTNVE1*$* VALIDATE POLLING TABLE INFORMATION*CMR00070‚EQU„**ŠLEA„CMRPBASE(A2),A3„BASEOFPOLLINGTABLE ŠCLR.L‚D56ŠMOVE.BCMRPECT(A2),D5…NUMBEROFPOLLINGTABLEENTRIES0ŠBEQ.S‚CMR00085‹ZEROMEANSOWNINTERRUPTHANDLER2ŠCMP.B‚#CCBMCNT,D5ˆTOOMANYPOLLINGTABLEENTRIES?ŠBLE.S‚CMR00072‹BRANCHIFYES*CMR00071‚EQU„*&ŠMOVEQ‚#CMRPECTX,D0‡BADICNTPARAMETER"ŠBSR.S‚CMRTNVE1‹GOGETOUTOFHERECMR00072‚EQU„*ŠSUB.L‚#1,D5ŽMAKEZERORELATIVEŠLSL.L‚#3,D5Ž8-BYTEINDEX** CHECK POLLING BYTE OFFSET**ŠMOVE.WCMRMME(A2),D1†ZERORELATIVEEXTENTCMR00075‚EQU„*ŠCMP.W‚CMRPOFF(A3,D5),D1ŠBCC.S‚CMR00078‹BRANCHIFOK*$ŠMOVEQ‚#CMRPOFX,D0ˆERRORRETURNCODEŠBSR.S‚CMRTNVE1*CMR00078‚EQU„*** VALIDATE RESET BYTE OFFSET*ŠCMP.W‚CMRRESO(A3,D5),D1#ŠBCC.S‚CMR00080‹BRANCHIFOFFSETOK*,ŠMOVEQ‚#CMRRESOX,D0‡ERRORCODEFORBADRESETŠBSR„CMRRTNVE‹GOERROREXIT1CMRTNVE1‚BRA„CMRRTNVE‹COLLECTSHORTBRANCHESHERECMR00080‚EQU„* ŠSUB.L‚#8,D5%ŠBGE„CMR00075‹BRANCHIFMORETOCHECK*I* DETERMINE IF MEMORY MAPPED SPACE IS WITHIN ACCESSIBLE MEMORY BY TESTING*ƒFORBUSERROR.* @CMR00085‚MOVEQ‚#XOPINH,D0‰IftheoptionsontheALLOCATEcommand7ŠAND„CMRFG(A2),D0‡donotinhibittestingforthedevice"ŠIF…THEN.Sˆinthememorymap, *ŠMOVE.LCMRCHB(A2),D0†CHANNELBASEADDRESS ŠMOVE.LD0,A0ŠBTSTƒ#0,D0ŽISITEVENADDRESS'ŠBNE.S‚CMR00093‹BRANCHIFNO(WE'REOK) ŠADD.L‚#1,A03CMR00093‚PEA„CMR00094‹ADDRESSTOTAKEFORBUSERROR8ŠMOVE.W#'BE',-(A7)ˆCODETOTELLEXECWE'REJUSTTESTINGŠTST.B‚(A0)TESTFORBUSERROR/ŠADD.L‚#6,A7ŽNOBUSERROR,BYPASSSTACKEDSTUFF'ŠBRA.S‚CMR00095‹BRANCHFORNOBUSERROR*4CMR00094‚MOVE.L#CMRCHAX,D0ˆBADCHANNELBASEADDRESSŠBSR„CMRTNVE1‹TAKEERROREXIT ŠENDI–* :CMR00095‚LEA„CCBHD,A3‹A3<--ADDRESSOFCCBLISTHEADPTR. *E*‚IFTHISISTOBEASUBORDINATE,SEARCHFORTHESPECIFIEDSUPERVISOR<*‚(HISMNEMONICISINCCBSUP)ANDGETHISCCBADDRESSINA4.*>ŠMOVEQ‚#XOPSUP+XOPSUB,D0‚CHECKTOMAKESUREHEISN'TTRYINGTO;ŠAND.W‚CMRFG(A2),D0‡ALLOCATEACHANNELASBOTHASUPERVISOR@ŠIF.BD0#XOPSUP+XOPSUBTHEN.S„ANDASUBORDINATE.‚IFHEIS,%ŠMOVE.L#CMRISUPX,D0‡SIGNALANERROR. ŠBSR…CMRTNVE1ŠENDI =ŠIF.BD0#XOPSUBTHEN.SƒIFHEWANTSTOBEASUBORDINATE, ;ŠMOVE.LCMRSUP(A2),D0†D0<--SUPERVISORCHANNEL'SMNEMONIC.ŠREPEAT”REPEATALLTHIS....:ŠMOVE.L(A3),A4Œ.A4<--ADDRESSOFNEXTCCBINALLCHAIN..ŠTST.L‚(A3).IFTHISISTHEENDOFTHECHAIN,2ŠIF…THEN.Sˆ.ƒTHESPECIFIEDSUPERVISORHASNOT9ŠMOVE.L#CMRISUPX,D0‡.ƒBEENALLOCATED,WHICHISANERROR.ŠBSR„CMRTNVE1‹.ŠENDI–.8ŠLEA„CCBALL(A4),A3†.A3<--ADDRESSOFLINKTONEXTCCB.3ŠCMP.L‚CCBMNEM(A4),D0….BUTFIRST,ISTHISTHEONE?1ŠUNTIL‚UNTILWEFINDTHESUPERVISORCHANNEL. =ŠMOVE.BCMRVECT(A2),D0…IFTHEVECTORFORTHESUBORDINATE(D0)<ŠBTSTW‚#CCBFGSUP,CCBSTR(A4)ƒG DOESN'TMATCHTHEVECTORFORTHEBŠIFOR.BCCBVECT(A4)D0THEN.SƒSUPERVISOR(CCBVECT(A4)),?ŠMOVE.L#CMRISUPX,D0‡ORTHETASKTHAT'SSUPPOSEDTOBEASUPER-6ŠBSR„CMRTNVE1‹VISORWASN'TALLOCATEDASONE,THAT'SAN ŠENDI–ERROR. @ŠWHILE.LCCBSUB(A4)#0DO.SƒFINDTHEENDOFTHESUBORDINATE4ŠMOVE.LCCBSUB(A4),A4†CHAIN(MARKEDBYALINKOF0).ŠENDW ŠENDI ** FIND END OF CCB CHAIN IN A3*/CMR00096‚MOVE.L(A3),A1ŒCCBCHAIN'ALL'POINTER ŠTST.L‚(A3)2ŠBEQ.S‚CMR00098‹BRANCHIFA3HASLASTLINKADDRESS$ŠLEA„CCBALL(A1),A3†LOOKATNEXTLINK ŠBRA„CMR00096*F*‚We'vefoundwherethenewCCBshouldgo.‚Nowallocatememoryforit.F*‚Weneedatleastapage,butabytenearthetopofthedrivertells *‚howmanyextrapageshewants.*9CMR00098‚EQU„*’Firstfindoutthe#ofpagestoallocate.0ŠMOVE.LCMRCADD(A2),A0…A0<--addressofdriver.2ŠMOVEQ‚#0,D0ŽD0<--#ofextrapagesdriverwants.ŠMOVE.B16(A0),D0Š*2ŠADDQ.W#1,D0ŽD0<--#oftotalpagestoallocate..ŠMOVE.LD0,A0ŽExecwantsthatparameterinA0. 6ŠMOVEM.LD0/A2-A4,-(A7)„Saveaddressesand#ofpages.)ŠTR0.PAGAL,Askexectoallocatememory.5ŠBRA.S‚CMR00099‹Execallocatedthememory,sobranch.?ŠMOVEM.L(A7)+,D0/A2-A4„Execreturnedanerror;restorethings,5ŠMOVE.L#CMRMEMX,D0ˆseterrorconditioncodeandexit!ŠBSR„CMRTNVE1‹througherrorexit. ACMR00099‚MOVEM.L(A7)+,D0/A2-A4„Restoreaddressesand#ofpages.*E*‚Initializethememorytozeroes.‚D0containsthenumberofpagesweK*‚got.‚Weareinitializingalongwordatatime,andthereare64longwordsF*‚inapage(256bytes).‚Hencewemultiplyby64(leftshift6)toget*‚thenumberofiterations.*(ŠMOVE.LA0,A1ŽSaveaddressofCCBinA1.,ŠLSL.L‚#6,D0ŽD0<--#oflongwordstoclear. CMRLOP1ƒEQU„*ŠCLR.L‚(A0)+ŽClearalongword.,ŠSUB.L‚#1,D0ŽKeepgoinguntilwe'vedonetheŠBGT„CMRLOP1ŒwholeCCB. *H*‚IFHEISTOBEASUBORDINATE,LINKHIMONTOTHEENDOFTHESUBORDINATE<*‚CHAIN(THEADDRESSOFTHELASTCCBINTHECHAINISINA4).*CŠBTSTW‚#CMRFGSB,CMRFG(A2)ƒIFTHEOPTIONISSETTOBEASUBORDINATE,7ŠIF…THEN.SˆMAKETHELASTCCBINTHECHAINPOINTTO"ŠMOVE.LA1,CCBSUB(A4)†THENEWGUY.ŠENDI *%* LINK THIS PAGE ONTO THE "ALL" CHAIN*ŠMOVE.LA1,(A3)*E* NOW PLUG INTO THE CCB ALL OF THE RELAVENT INFORMATION PASSED BY THE*ƒUSER.*%ŠMOVE.L#'!CCB',(A1)‡DUMPEYECATCHER.ŠBTSTW‚#CMRFGSYS,CMRFG(A2)SYSONLYTOATTACH?ŠBEQ.S‚CMR00300‹BRANCHIFNO(ŠOR.Wƒ#(1<ŠLEA„CMRPBASE(A2),A3„A3<--addrofpollingtableinallocpb.9ŠLEA„CCBPBASE(A1),A4„A4<--addrofpollingtableinCCB.AŠMOVE.BCCBPECT(A1),D0…D0<--#ofpollingtableentriesdefined. 5ŠWHILEƒDO.S‰Looptomoveeach8-byteentry.‚Only:ŠMOVE.L(A3)+,(A4)+ˆmoveasmanyastherearedefined(the$ŠMOVE.L(A3)+,(A4)+ˆcountisinD0).ŠSUB.B‚#1,D0Ž*ŠENDW–* ** SET UP VECTOR ADDRESS* ‰CLR.L…D0,‰MOVE.B„CMRVECT(A2),D0†PICKUPVECTORNUMBER ‰LSL.L…#2,D0TIMES4FORADDRESS"‰MOVE.L„D0,CCBVADR(A1)†SAVEINCCB*G*‚Computetheaddressofthedriver'sinterruptserviceroutineandputH*‚itintheCCB.‚Theaddressisthesumofthedriver'sbaseaddress(inH*‚theallocateparameterblock)andtheoffsetfromthebeginningoftheI*‚drivertotheinterruptserviceroutine(inthevectortableatthetop*‚ofthedriver).*0‰MOVE.L„CMG RCADD(A2),A3ƒA3<--addressofdriver.9‰ADD.L…(A3),A3ŠA3<--addrofdriver'sinterruptroutine.*‰MOVE.L„A3,CCBRTNI(A1)ƒSaveitintheCCB. *E*‚Ifthisisaninterrupt-onlychannel,theinterrupthandlerwillbe *‚withinCMR.*9‰CMP.B…#CMRONLY,CCBTYPE(A1)CHANNELTYPEINTERRUPTONLY?‰BNE.S…CMR00345ŒBRANCHIFNO4‰MOVE.L„#CMRJSR3,CCBRTNI(A1)YES,SETUPCMRHANDLER CMR00345‚EQU„**:*‚IFHE'SSUPPOSEDTOBEASUPERVISOR,MARKITINHISCCB.*=ŠBTSTW‚#CMRFGSP,CMRFG(A2)ƒIFTHEOPTIONBITISSETINDICATING6ŠIF…THEN.SˆTHISDRIVERISTOBEASUPERVISOR,SET4ŠBSETW‚#CCBFGSUP,CCBSTR(A1)THEFLAGBITINHISCCB.ŠENDI *C*‚IFEXCLUSIVEVECTORINGWASREQUESTED,MARKITINHISCCBANDSKIP*‚SOFTWAREPRIORITYJUNK.*:ŠBTSTW‚#CMRFGDIR,CMRFG(A2)ƒIFTHEOPTIONBITFOREXCLUSIVE!ŠIF…THEN.SˆVECTORINGISSET,?ŠBSETW‚#CCBFGDIR,CCBSTR(A1)SETEXCLUSIVEVECTORINGFLAGINCCB5ŠBRA.S‚CMR00380‹ANDSKIPTOTHEPARTWHEREWEPUTTHEŠENDI–JSRINTHECCB.*1*‚IFTHISISNOTASUBORDINATECHANNEL,SETUPTO5*‚LINKTHISPAGEONTOTHEPROPERPOLLINGCHAINATTHE*‚APPROPRIATEPRIORITY.*@ŠBTSTW‚#CMRFGSB,CMRFG(A2)IFTHISISASUBORDINATECHANNEL,JUST4ŠBNE.S‚CMRRTNV1‹SKIPAHEADTODRIVERINITIALIZATION. ŠCLR.L‚D0)ŠMOVE.BCMRVECT(A2),D0ˆPICKUPVECTORNO.3ŠMOVE.LVCTUBGN,A3ŒPICKUPVECTORUSETABLEADDRESS-ŠTST.B‚0(A3,D0.L)ŒFIRSTCCBFORTHISVECTOR?ŠBEQ.S‚CMR00380ŽYES-ŠMOVE.LCCBVADR(A1),A4ˆPICKUPVECTORADDRESSŠMOVE.LA4,D0‘SAVEFORCOMPARE"ŠMOVE.L(A4),A3GETVECTORPOINTER(ŠLEA„-(CCBJSR)(A3),A3†GETADDRESSOFCCB*5* AT THIS STAGE OUR REGISTER CONTENTS ARE AS FOLLOWS:7*ƒA1-ADDRESSOFNEWLYALLOCATEDPAGEFORTHENEWCCB.)*ƒA2-ADDRESSOFUSER'SPARAMETERBLOCK.*ƒA3-ADDRESSOFFIRSTCCB.*ƒA4-ADDRESSOFVECTOR.*5* LINK THE NEW CCB PAGE INTO THE VECTOR CHAIN AT USER*ƒREQUESTEDSOFTWAREPRIORITY.*4ŠMOVE.BCMRSPRIO(A2),D1„USERREQUESTEDSOFTWAREPRIOŠBRA.S‚CMR00367CMR00365‚EQU„*-ŠMOVE.LCCBPOLL(A4),A3…A3CONTAINSLINKVALUE2ŠTST.L‚CCBPOLL(A4)ˆAREWEATTHEENDOFTHECHAIN?ŠBEQ.S‚CMR00370‹BRANCHIFYESCMR00367‚MOVE.BCCBSPRIO(A3),D2)ŠCMP.B‚D2,D1ŽFINDPROPERPLACETOLINKIN*©FORUSERSOFTWAREPRIORITY,ŠBGT.S‚CMR00370‹BRANCHIFTIMETOLINKITIN.ŠMOVE.LA3,A4ŽA4CONTAINSADDRESSOFNEXTLINK ŠBRA„CMR00365CMR00370‚EQU„*!ŠCMP.L‚D0,A4ŽFIRSTCCBONCHAIN?ŠBEQ.S‚CMR00375‹YES+ŠMOVE.LA3,CCBPOLL(A1)…LINKFROMMETONEXT,ŠMOVE.LA1,CCBPOLL(A4)…LINKFROMPRIORTOMEŠBRA.S‚CMRRTNV1+CMR00375‚MOVE.LA3,CCBPOLL(A1)…LINKTONEXT*!* IF FIRST CCB FOR THIS VECTOR...#* 1. STUFF JSR INSTRUCTION INTO CCB8* 2. STUFF VECTOR WITH ADDRESS OF JSR INSTRUCTION IN CCB*CMR00380‚EQU„*-ŠMOVE.LCCBVADR(A1),A3†PICKUPVECTORADDRESS8ŠMOVE.W#CMRJSR1,CCBJSR(A1)SETJSRINSTRUCTIONINTOCCB0ŠMOVE.L#CMRJSR2,CCBJSR+2(A1)ADDRESSTOJUMPTOŠLEA„CCBJSR(A1),A43ŠMOVE.LA4,(A3)SETADDRESSOFJSRINSTINTOVECTOR*M*NOWCALLI/OHANDLERFORINITIALIZATION.‚Addressofdriver'sinitializationJ* routine is the sum of the driver's base address (taken from the CCB) andM* the offset from the driver's base to its initialization routine (taken from-* the vector table at the top of the driver).*CMRRTNV1‚EQU„* ŠCLR.L‚D0%ŠMOVE.BCMRVECT(A2),D0…GETVECTORNO.3ŠMOVE.LVCTUBGN,A0‰PICKUPVECTORUSETABLEADDRESS(ŠMOVE.B#$FF,0(A0,D0)†MARKVECTORINUSE0ŠMOVE.LCCBUSER(A1),A0…A0<--addressofdriver.;ŠADD.L‚8(A0),A0‹A0<--addrofdriver'sinitializeroutine.)ŠMOVE.LA1,A5ŽMAKECCBPOINTERCONSISTANT!ŠMOVE.LA6,-(A7)‹SAVETCBPOINTERŠJSR„(A0)CALLINITIALIZATION$ŠMOVE.L(A7)+,A6‹RESTORETCBPOINTER ŠBRA„CMRRTNV1CMRTNVE3‚BRA„CMRRTNVE‹COLLECTSHORTBRANCHESHERE** BAD CHANNEL MNEMONIC*CMRBADMN‚EQU„*ŠMOVE.L#CMRMNEX,D0ŠBSR.S‚CMRTNVE3** NOT A SYSTEM TASK*CMRNOTSY‚EQU„*ŠMOVE.L#CMRSYSX,D0ŠBSR.S‚CMRTNVE3** BAD PARAMETER BLOCK*CMRBADPB‚EQU„*ŠMOVE.L#CMRPBX,D0ŠBSR.S‚CMRTNVE3‰PAGE***%H * WE DO NOT HAVE AN ALLOCATE FUNCTION*4* VALIDATE FUNCTION CODE AND PARAMETER BLOCK LENGTH.***/CMR01000‚EQU„*’CHECKFORFUNCTIONCODEINRANGEŠCMP.B‚#1,(A2)0ŠBEQ„CMRALLAL‹GOGRIPESINCEALLREADYALLOCATED+ŠBLE.S‚CMRBADCD‹BRANCHIFBADFUNCTIONCODEŠCMP.B‚#CMRLTABL,(A2)ŠBLE.S‚CMR01020 -CMRBADCD‚EQU„*’HANDLEBADFUNCTIONCODEERRORŠMOVEQ‚#CMRCDX,D0ŠBSR.S‚CMRTNVE3 8CMR01020‚EQU„*’SEEIFPARAMETERBLOCKWITHINUSER'SSPAC,ŠMOVE.LTCBTST(A6),A0†TASKSEGTABLEADDRESSŠCLR.L‚D0‘FORBYTELOAD%ŠMOVE.B(A2),D0ŒCALLERSFUNCTIONCODE"ŠSUB.B‚#1,D0ŽMAKEITZERORELATIVE ŠMOVE.LD0,A3 ŠCLR.L‚D5ŠCMP.B‚#7,(A2)ŒINITIATEI/O?ŠBNE.S‚CMR01030‹BRANCHIFNO0ŠCMP.B‚#IPCL,CCBTYPE(A1)‚STANDARDCHANNELTYPE?ŠBLO.S‚CMR01040‹BRANCHIFNOŠCMP.B‚#IPCH,CCBTYPE(A1)ŠBLS.S‚CMR01030‹BRANCHIFYES.ŠCMP.B‚#SHRL,CCBTYPE(A1)‚SHAREDCHANNELTYPE?ŠBLO.S‚CMR01040‹BRANCHIFNOŠCMP.B‚#SHRH,CCBTYPE(A1)ŠBHI.S‚CMR01040‹BRANCHIFNO CMR01030‚EQU„* 9ŠBTSTW‚#TSKARTIM,TCBATTR(A6)IFTASKISAREAL-TIMETASK,.ŠBNE.S‚CMR01040ŽTHENSKIPADDRESSTRANSLATION. 0ŠMOVE.BCMRLTAB(PC,A3),D5‚PARAMETERBLOCKLENGTH/ŠBEQ.S‚CMR01040‹BRANCHIFNOTTOCOMPUTEBOUNDS "ŠMOVE.LD7,D6ŽLOGICALP.B.ADDRESS ŠTR0.LOGPHY!ŠBRA.S‚CMR01040‹BRANCHIFPBGOOD ŠNOP,ŠBRA„CMRBADPB‹BRANCHFORBADPARAMETERBLOCK *CMRLTABƒEQU„*’PARAMETERBLOCKLENGTHTABLE ŠDC.Bƒ0’DUMMY ŠDC.BƒCMRCD2L ŠDC.BƒCMRCD3L ŠDC.BƒCMRCD4L ŠDC.BƒCMRCD5L ŠDC.BƒCMRCD6L ŠDC.BƒCMRCD7LCMRLTABL‚EQU„*-CMRLTABŠDS…0’MAKEWORDBOUNDARY*2* BRANCH TO APPROPRIATE ROUTINE TO HANDLE REQUEST.* CMR01040‚EQU„*ŠADD.L‚A3,A3ŽMULTBY2,ŠLEA„CMRJTB(PC,A3),A3ƒADDRESSOFTABLEENTRYŠADD.W‚(A3),A3ŒJUMPVECTORCMR01050‚EQU„*'ŠJMP„(A3)GOHANDLEINDIVIDUALFUNCTION!CMRJTB„EQU„*’ADDRESSVECTORTABLE'ŠDC.WƒCMR01050-*‰BADADDRESS(ALLOCATE)ŠDC.WƒCMR02000-*‰DELETEŠDC.WƒCMR03000-*‰ATTACHŠDC.WƒCMR04000-*‰DETACHŠDC.WƒCMR05000-*‰ON-LINEŠDC.WƒCMR06000-*‰OFF-LINEŠDC.WƒCMR07000-*‰INITIATEI/O‰PAGEH*************************************************************************** DELETE A CHANNEL FUNCTION**ˆENTRY:‚A1=CCBPOINTER*A2=CMRPBPOINTER*A6=TCBPOINTER**J**************************************************************************CMR02000‚EQU„**0* SEE IF CHANNEL CURRENTLY ATTACHED TO THIS TASK*-ŠMOVE.LCMRMNEM(A2),D0…USERSUPPLIEDMNEMONIC ŠBSR„CMRCCBAM$ŠBNE„CMRNOTAT‹BRANCHIFNOTATTACHED*0* CHANNEL ATTACHED - REMOVE IT FROM USER'S CHAIN*ŠMOVE.LCCBTLNK(A1),(A0)CŠBCLRW‚#CCBFGDIR,CCBSTR(A1)WASTHISANEXCLUSIVEVECTOREDCHANNEL?ŠBNE.S‚CMR02100‹BRANCHIFYES** UNLINK CCB FROM POLLING CHAIN*-ŠMOVE.LCCBVADR(A1),D1…PICKUPVECTORADDRESS ŠMOVE.LD1,A4"ŠMOVE.L(A4),A3ŒGETVECTORPOINTER+ŠLEA„-(CCBJSR)(A3),A3ƒESTABLISHCCBADDRESS&ŠMOVE.LA1,D0ŽADDRESSOFCCBTOUNLINKŠBRA.S‚CMR02080CMR02070‚EQU„*;ŠMOVE.LCCBPOLL(A4),A3…A3CONTAINSADDRESSOFCCBTOEXAMIN ŠTST.L‚CCBPOLL(A4)ˆENDOFCHAIN?ŠBNE.S‚CMR02080‹NO'ŠBSR„KILLERCAN'TFINDONPOLLINGCHAIN0CMR02080‚EQU„*’***LOOPTRAPFORMISSINGCHANNEL%ŠCMP.L‚A3,D0ŽISTHISTHECCBWEWANT?ŠBEQ.S‚CMR02090‹BRANCHIFSO"ŠMOVE.LA3,A4ŽADDRESSOFNEXTLINKŠBRA„CMR02070‹GOLOOKATNEXTCMR02090‚EQU„*ŠCMP.L‚D1,A4‘FIRSTONCHAIN?ŠBNE.S‚CMR02092ŽNO"ŠTST.L‚CCBPOLL(A3)‹YES,ONLYONE?ŠBEQ.S‚CMR02100ŽYES(ŠMOVE.LCCBPOLL(A3),A4ˆMORETHANONECCB-ŠMOVE.W#CMRJSR1,CCBJSR(A4)ƒSETUPJSRINCCBŠMOVE.L#CMRJSR2,CCBJSR+2(A4)(ŠLEA„CCBJSR(A4),A4‰SETUPVECTORPOINTER-ŠMOVE.LCCBVADR(A3),A3ˆPICKUPVECTORADDRESSŠMOVE.LA4,(A3)INITVECTORŠBRA.S‚CMR02110CMR02092‚EQU„*3ŠMOVE.LCCBPOLL(A3),CCBPOLL(A4)ƒFINALLY!UNLINKIT!ŠBRA.S‚CMR02110**CMR02100‚CLR.L‚D1$ŠMOVE.BCCBVECT(A1),D1ˆVECTORNUMBER-ŠMOVE.LCCBVADR(A1),A3ˆPICKUPVECTORADDRESS6ŠPEA„COMINT(PC)‰MakethevectorpointtoCOMINTagain.ŠMOVE.L(SP)+,(A3)‰*/ŠMOVE.LVCTUBGN,A3ŒGETVECTORUSETABLEADDRESS%ŠCLR.B‚0(A3,D1)ŽMARKVECTORH AVAILABLE** REMOVE CHANNEL FROM ALL CHAIN*1CMR02110‚LEA„CCBHD,A4‹ADDRESSOFHEADOFCCBLIST ŠMOVE.LA1,D0CMR02120‚EQU„*5ŠMOVE.L(A4),A3ŒA3CONTAINSADDRESSOFCCBTOEXAMINEŠTST.L‚(A4)ENDOFCHAIN?ŠBNE.S‚CMR02140‹NO#ŠBSR„KILLERCAN'TFINDONALLCHAIN0CMR02140‚EQU„*’***LOOPTRAPFORMISSINGCHANNEL%ŠCMP.L‚A3,D0ŽISTHISTHECCBWEWANT?ŠBEQ.S‚CMR02160‹BRANCHIFSO'ŠLEA„CCBALL(A3),A4†ADDRESSOFNEXTLINKŠBRA„CMR02120‹GOLOOKATNEXTCMR02160‚EQU„*!ŠMOVE.LCCBALL(A3),(A4)„UNLINKIT** SIGNAL THE CCB SEMAPHORE*ŠLEA„SEMCCB,A0ŠTR0.V*1* FREE THE PAGE OF MEMORY OCCUPIED BY THE OLD CCB*ŠMOVE.LA1,A0ŽADDRESSOFMEMORYŠMOVE.L#1,D1ŽNUMBEROFPAGES ŠTR0.PGFRŠBRA„CMRRTNOK‹GOODRETURNŠBSR„KILLERCAN'TFREEPAGE**-CMRNOTAT‚EQU„*’ERRORFORCHANNELNOTATTACHEDŠMOVEQ‚#CMRASGX,D0ŠBSR.S‚CMRTNVE2‰PAGE**** ATTACH CHANNEL FUNCTION***CMR03000‚EQU„**0* SEE IF CHANNEL ALL READY ATTACHED TO THIS TASK*"ŠMOVE.LA1,A3ŽPRESERVECCBADDRESS ŠBSR„CMRCCBBA!ŠMOVE.LA3,A1ŽRESTORECCBADDRESS&ŠBNE.S‚CMR03060‹BRANCHIFNOTATTACHED(CMRALLAL‚EQU„*’CHANNELALREADYALLOCATED'CMRALLAT‚EQU„*’CHANNELALREADYATTACHEDŠMOVE.L#CMRATHX,D0ŠBSR.S‚CMRTNVE2CMR03060‚EQU„**2* SEE IF CHANNEL IN USE (ATTACHED TO ANOTHER TASK)*ŠBTSTW‚#CCBFGATH,CCBSTR(A1)ŠBEQ.S‚CMR03100‹BRANCHIFNOTCMRINUSE‚EQU„*2ŠMOVEQ‚#CMRUSEX,D0ˆHANDLECHANNELINUSEEXCEPTIONŠBSR.S‚CMRTNVE2** SEE IF CHANNEL OFF LINE*CMR03100‚EQU„*ŠBTSTW‚#CCBFGOFF,CCBSTR(A1)ŠBEQ.S‚CMR03120‹BRANCHIFNOT CMROFFLƒEQU„*ŠMOVEQ‚#CMROFFX,D0ŠBSR.S‚CMRTNVE2*B* SEE IF CHANNEL SET UP FOR SYSTEM REQUESTS ONLY AND IF SO WHETHER$*ƒORNOTREQUESTORISASYSTEMTASK.*CMR03120‚EQU„*ŠBTSTW‚#CCBFGSYS,CCBSTR(A1)4ŠBEQ.S‚CMR03130‹BRANCHIFNOTFORSYSTEMONLYATTACHŠBTSTW‚#TSKASYST,TCBATTR(A6)%ŠBEQ„CMRNOTSY‹WE'RENOTASYSTEMTASK*I*‚SEEIFCHANNELISASUPERVISOR(INWHICHCASEITISILLEGALTOATTACH).*CMR03130‚EQU„*=ŠBTSTW‚#CCBFGSUP,CCBSTR(A1)‚IFFLAGISSETINCCBSAYINGTHIS(ŠIF…THEN.SˆCHANNELISASUPERVISOR,$ŠMOVEQ‚#CMRISUPX,D0‡SIGNALANERROR.ŠBSR.S‚CMRTNVE2ŠENDI*?* IF ASQ TYPE RETURN SPECIFIED - SAVE SERVICE VECTOR AND LENGTH*ƒIPCALWAYSUSESASQOPTION*ŠCMP.B‚#IPCL-1,CCBTYPE(A1)+ŠBLS.S‚CMR03132‹BRANCHIFNOTSTANDARDTYPEŠCMP.B‚#IPCH,CCBTYPE(A1)'ŠBLS.S‚CMR03133‹BRANCHIFSTANDARDTYPE.ŠCMP.B‚#SHRL,CCBTYPE(A1)‚SHAREDCHANNELTYPE?ŠBLO.S‚CMR03132‹BRANCHIFNOŠCMP.B‚#SHRH,CCBTYPE(A1)ŠBLS.S‚CMR03133‹BRANCHIFYESCMR03132‚EQU„*+ŠBTSTW‚#CMRFGAQ,CMRFG(A2)ISASQSPECIFIED?ŠBEQ.S‚CMR03140‹BRANCHIFNO*7* IF ASQ ENTRY LENGTH NOT TOO SHORT THEN SAVE IT IN CCB*CMR03133‚EQU„*.ŠCMP.B‚#CMRASQML,CMRASQL(A2)ISASQTOOSHORT?ŠBCC.S‚CMR03135‹BRANCHIFNOT** ASQ ENTRY LENGTH TOO SHORT*ŠMOVEQ‚#CMRASQLX,D0‡ERRORCODEŠBSR„CMRRTNVE‹GETOUT1CMRTNVE2‚BRA„CMRRTNVE‹COLLECTSHORTBRANCHESHERE** ASQ ENTRY LENGTH OK*CMR03135‚EQU„*2ŠMOVE.BCMRASQL(A2),CCBASQL(A1)SAVEITINTHECCB3ŠMOVE.LCMRSVVC(A2),CCBSVVC(A1)SAVESERVICEVECTOR+ŠBEQ.S‚CMR03140‹BRANCHIFNOSERVICEVECTOR*ŠMOVE.LA0,-(A7)‹PRESERVECCBLINKADDRESS.ŠMOVE.LTCBTST(A6),A0†SEEIFSERVICEVECTORIS5ŠMOVE.LCCBSVVC(A1),D6…WITHINTASKADDRESSBOUNDARIES ŠMOVE.L#4,D5 ŠTR0.LOGPHY+ŠBRA.S‚CMR03139‹BRANCHIFSERVICEVECTOROKŠNOP„0’BADSERVICEVECTOR** BAD SERVICE VECTOR*2ŠMOVE.L(A7)+,A0‹RESTORECCBLINKADDR&FIXSTACK,*£ERRORCODEFORBADDRIVERIDDURINGALLOC.ŠMOVEQ‚#CMRSVVCX,D0‡ERRORCODEŠBSR.S‚CMRTNVE2*1CMR03139‚MOVE.L(A7)+,A0‹RESTORECCBLINKADDRESSCMR03140‚EQU„*** SAVE REQUESTOR'S TCB ADDRESS*ŠMOVE.LA6,CCBRQSTA(A1)** SAVE I/O RETURN OPTIONS*ŠMOVE.BCMRFG+1(A2),CCBRTN(A1)ŠAND.B‚#3,CCBRTN(A1)** * SAVE KEY*4ŠMOVE.BCMRKEY(A2),CCBKEY(A1)USERSUPPLIEDI.D.KEY*#* NOW ATTACH THE CHANNEL TO OURSELF*+ŠMOVE.LA1,(A0)ŒLINKUPCCBTOENDOFCHAIN'ŠMOVE.LTCBNAME(A6),D0…CALLERSTASKAND$ŠMOVE.LI TCBSESSN(A6),D1„SESSIONNAME,ŠMOVE.LD0,CCBRQST(A1)…REQUESTOR'STASKNAME1ŠMOVE.LD1,CCBRQST+4(A1)ƒREQUESTOR'SSESSIONNAME/ŠOR.Wƒ#(1<system_task)&'*—(session<>session(client_tcb_ptr))*—thengotoerror(iohsesx);*’end;**’tcb_ptr<==get_tcb(taskname,session); *’if(error)*’thengotoerror(iohtaskx);*end;*ˆend;*ˆccbtaska(A5)<==tcb_ptr;&*ˆccbtask(A5)<==taskname(tcb_ptr);)*ˆccbtask+4(A5)<==session(tcb_ptr);‰PAGE*ˆif(cmrtask(A2)=0)"*ˆthentcb_ptr<==client_tcb_ptr; IOH01017:‰MOVE.L„CMRTASK(A2),D0‰BEQ.S…IOH01050  *ˆelsedo;*if(client=real-timetask) *thentcb_ptr<==cmrtask(A2); ‰MOVE.L„D0,A0‰BTSTW…#TSKARTIM,TCBATTR(A6)‰BNE.S…IOH01060  *elsedo;*’taskname<==cmrtask(A2);*’if(cmrtask+4(A2)=0),*’thensession<==session(client_tcb_ptr); ‰MOVE.L„CMRTASK+4(A2),D1‰BEQ.S…IOH01020  *’elsedo;*—session<==cmrtask+4(A2);*—if*—(client<>sI ystem_task)&'*—(session<>session(client_tcb_ptr))*—thengotoerror(iohsesx);*’end; ‰BTSTW…#TSKASYST,TCBATTR(A6)‰BNE.S…IOH01030 ‰CMP.L…TCBSESSN(A6),D1‰BEQ.S…IOH01030 ‰MOVEQ.Lƒ#IOHSESX,D7‰BSR.S…CMRRTNVE  **’tcb_ptr<==get_tcb(taskname,session); *’if(error)*’thengotoerror(iohtaskx);*end;*ˆend; IOH01020:‰MOVE.L„TCBSESSN(A6),D1  IOH01030: ‰TR0.GTXTCB‰BRA.S…IOH01060 ‰MOVEQ.Lƒ#IOHTASKX,D7‰BSR.S…CMRRTNVE  *ˆccbtaska(A5)<==tcb_ptr;&*ˆccbtask(A5)<==taskname(tcb_ptr);)*ˆccbtask+4(A5)<==session(tcb_ptr); IOH01050: ‰MOVE.L„A6,A0  IOH01060:‰MOVE.L„A0,CCBTASKA(A5)‰MOVE.L„TCBNAME(A0),CCBTASK(A5)"‰MOVE.L„TCBSESSN(A0),CCBTASK+4(A5)‰PAGE**-* WE CAN NOW SIGNAL SEMAPHORE FOR "ALL" CHAIN*CMR07040‚EQU„*ŠLEA„SEMCCB,A0ŠTR0.V**ƒA6CONTAINSTCBADDRESS*ƒA5CONTAINSCCBADDRESS*ƒA2CONTAINSP.B.ADDRESS*H*‚NowJSRtothecommandserviceentrypointofthedriver.‚ThisaddressJ*‚iscomputedasthesumofthedriver'sbaseaddress(takenfromtheCCB)J*‚andtheoffsetfromthedriver'sbasetoitscommandserviceentrypoint;*‚(takenfromthevectortablenearthetopofthedriver).*0ŠMOVE.LCCBUSER(A5),A0…A0<--addressofdriver.7ŠADD.L‚4(A0),A0‹A0<--addrofdriver'scommandservice *§routine."ŠMOVE.LA6,-(A7)‹SAVETCBREGISTERŠJSR„(A0)CALLI/OHANDLER%ŠMOVE.L(A7)+,A6‹RESTORETCBREGISTERŠTST.W‚D0‘WASTHEREANERROR?ŠBEQ.S‚CMRRTNOK‹BRANCHIFNO ŠEXITƒERRORŽBRANCHTOSUBIFYES‰PAGEI**************************************************************************2* SUBROUTINE TO SEE IF CHANNEL IS ATTACHED TO TASK**ƒENTRY:ƒCMRCCBAA*ŒA1-ADDRESSOFCCB*ŒA6-TCBADDRESS* *ŒCMRCCBAM*ŒD0-CHANNELMNEMONIC*ŒA6-ADDRESSOFTCB**ƒEXIT:„D0-DESTROYED0*ŒNONZEROCONDITIONCODEIFCHANNELNOTATTACHED)*ŒZEROCONDITIONCODEIFCHANNELATTACHED0*A0-ADDRESSOFCCBTLNKPOINTERTODESIREDCCB*A1-ADDRESSOFDESIREDCCB*M******************************************************************************'CMRCCBBA‚EQU„*’ENTRYFORCCBADDRINA13ŠMOVE.LCCBMNEM(A1),D0…SEARCHFORMATCHONMNEMONIC*'CMRCCBAM‚EQU„*’ENTRYFORMNEMONICIND03ŠLEA„TCBCHAN(A6),A0…BASEOFCHANNELSLINKEDTOTASK)CMRCCBAL‚TST.L‚(A0)AREWETHROUGHCHAIN?ŠBEQ.S‚CMRCCBAY‹IFSO,BRANCH/ŠMOVE.L(A0),A1ŒBASEADDRESSTOCCBTOCONSIDER.ŠCMP.L‚CCBMNEM(A1),D0…ISTHISTHEDESIREDCCB?,ŠBEQ.S‚CMRCCBAZ‹BRANCHIFYES-ITSATTACHED5ŠLEA„CCBTLNK(A1),A0…NOSOTRYLOOKINGATNEXTCHANNEL ŠBRA„CMRCCBAL,CMRCCBAY‚NOT.L‚D0‘SETCONDCODESFORNOFINDCMRCCBAZ‚RTS„0’BACKTOCALLERŠPAGE**** EXITS*G* ERROR RETURN CODE IN D0, SIGNAL "ALL" SEMAPHORE FOR CCB CHAIN AND RET* CMRRTNVE:.ŠADDQ.L#4,A7ŽGETRIDOFPHONYRETURNADDRESS.ŠCLR.L‚D1‘FORBYTEMOVEŠMOVE.BD0,D1ŽSAVERETURNCODEŠLEA„SEMCCB,A0ŠTR0.V ŠMOVE.LD1,D0 ŠEXITƒERROR  *5* NONERROR RETURN - SIGNAL "ALL" SEMAPHORE AND RETURN* CMRRTNV:ŠLEA„SEMCCB,A0ŠTR0.V  *=* NONERROR RETURN WITH NON SIGNAL TO "ALL" SEMAPHORE REQUIRED* CMRRTNOK:ŠEXITƒSUBCMRALWAYSEXITSHEREŠPAGEG************************************************************************7* ROUTINE TO HANDLE NOTIFICATION TO CALLER OF INTERRUPT+*ƒNOTIFICATIONVIAWAKEUPORASQINTERRUPT.**ˆENTRY:‚A5=CCBADDRESS***G************************************************************************CMRNOTFY‚EQU„**-* SEE WHETHER NOTIFICATION IS WAKEUP OR EVENT**ŠMOVE.LCCBRQSTA(A5),A6„SETUPTCBADDRESS ŠCLR.L‚D0)ŠMOVE.BCCBRTN(A5),D1†RETURNOPTIONSBYTE ŠBTSTW‚#0,D1$ŠBNE.S‚CMRN2100‹BRANCHIFASQOPTION** WAKE UP THE CALLING TASK*ŠMOVE.LA6,A0ŽTCBADDRESS ŠTR0$.WAKEUPŠBRA.S‚CMRNRTN1*/* ASQ OPTION - CONSTRUCT EVENT IN CCB WORK AREA*CMRN2100‚EQU„*-ŠMOVE.B#IOEVCD,CCBSTAGE+1(A5)I/OEVENTCODE7ŠMOVE.B#CHPRTBLG,CCBSTAGE(A5)LENGTHNOSERVICEVECTOR!ŠMOVE.L#2,D2ŽWHERENEXTTJ OSTAGE$ŠLEA„CCBSTAGE(A5),A0„STAGINGADDRESS3ŠMOVE.LCCBSVVC(A5),0(A0,D2)PLUGINSERVICEVECTOR+ŠBEQ.S‚CMRN2010‹BRANCHIFNOSERVICEVECTOR9ŠADD.L‚#$04800000,CCBSTAGE(A5)CORRECTFORSERVICEVECTOR0ŠADD.L‚#4,D2ŽCORRECTSTAGINGPOINTERFORSVCVCTCMRN2010‚EQU„*.ŠMOVE.BD0,0(A0,D2)ˆPLUGININTERPRETURNCODE&ŠMOVE.BCCBKEY(A5),1(A0,D2)USER'SKEYŠADD.L‚#2,D2ŽTOTALLENGTH.ŠCMP.B‚CCBASQL(A5),D2…CMPTOUSER'SMAXLENGTH"ŠBLS.S‚CMRN2020‹BRANCHIFWE'REOK;ŠMOVE.BCCBASQL(A5),CCBSTAGE(A5)ADJUSTLENGTHTOSUITUSERCMRN2020‚EQU„**:* PUT COMPLETION STATUS INTO REGESTERS AND SEND IT TO TASK*CMRN2060‚EQU„*ŠMOVEM.LCCBSTAGE(A5),D2-D5ŠBSR„CMRQEVNT‹QUEUEEVENT*'* CMRNOTFY ALWAYS EXITS THRU THIS POINT*CMRNRTN1ƒEQU„**ŠRTSŠPAGEG*************************************************************************'*‚INTERRUPTROUTINEFORCHANNELTYPEFF**ˆENTRY:‚A0=WORKREGISTER *A1=SELF*A5=CCBADDRESS*D0=WORKREGISTER**H************************************************************************* CHNLFF„EQU„*CMRJSR3ƒEQU„CHNLFF*(ŠMOVEM.LD1-D2,-(A7)ŠSAVESOMEREGISTERS+ŠLEA„CCBPBASE(A5),A1‡GETPOLLTABLEADDRESS ŠCLR.L‚D0-ŠMOVE.LCCBCHB(A5),A0‰GETDEVICEBASEADDRESS/ŠMOVE.BCCBPECT(A5),D1ˆGETNO.OFTABLEENTRIES CHNL010ƒBEQ.S‚CHNL120FINISHED!+ŠMOVE.WCCBPOFF(A1),D0ˆGETPOLLBYTEOFFSET%ŠMOVE.B0(A0,D0),D2‹PICKUPPOLLBYTE/ŠTST.B‚CCBPTST(A1)‹ZEROORNONZEROPOLLINGTEST*ŠBNE.S‚CHNL020BRANCHFOR<>0POLLINGTEST$ŠNOT.B‚D2”PREPAREFORCLEARBITTEST6CHNL020ƒAND.B‚CCBMASK(A1),D2ˆNONZEROPOLLINGTESTTYPE ŠBNE.S‚CHNL030INTERRUPTFOUND!&ŠLEA„8(A1),A1ŽBUMPTONEXTTABLEENTRY"ŠSUB.B‚#1,D1‘DECREMENTTABLECOUNTŠBRA.S‚CHNL010/CHNL030ƒMOVE.WCCBRESO(A1),D0ˆRESETBYTEOFFSET4ŠBTSTƒ#CCBRSR,CCBRESP(A1)ƒISTHISREADONLYOPTION?ŠBEQ.S‚CHNL040BRANSCHIFNOŠTST.B‚0(A0,D0)ŽYESŠBRA.S‚CHNL100GETOUT CHNL040ƒEQU„*-ŠMOVE.BCCBRESV(A1),0(A0,D0)RESETTHEDEVICE3ŠMOVE.WCCBMME(A5),D0†EXTENTOFMEMORYMAPPEDSPACE ŠADD.L‚A0,D0ŽFIRSTADDRTOCLEARŠBTSTW‚#0,D0ŽISITODD?ŠBNE.S‚CHNL060ŒYES-OKŠSUB.L‚#1,D0ŽNO-FORCEODDCHNL060ƒSUB.L‚A0,D0ŽREADJUSTD0ŠMOVE.LD0,D2ŽDUPLICATECOPY&CHNL070ƒTST.B‚0(A0,D0)‹READEVERYBYTE(ŠSUB.W‚#2,D0ŽDON'TUSEQUESTIONABLEDCNT,ŠBGE.S‚CHNL070ŒLOOPFORALLMEMMAPPEDSPACE CHNL080ƒEQU„* ŠCLR.B‚0(A0,D2)‹CLEAREVERYBYTE ŠSUB.W‚#2,D2 ŠBGE„CHNL080 CHNL100ƒEQU„*%ŠMOVE.WSR,D0‘PICKUPSTATUSREGISTER$ŠSUB.W‚#$100,D0ŽDROPPRIORITYBYONEŠMOVE.WD0,SR‘DROPPRIORITY.ŠBTSTW‚#CCBFGATH,CCBSTR(A5)‚CHANNELATTACHED?ŠBEQ.S‚CHNL110NO0ŠMOVEM.LD3-D7/A2-A4/A6,-(A7)„SAVETHEREGISTERSŠBSR„CMRNOTFYŽNOTIFYTHETASK3ŠMOVEM.L(A7)+,D3-D7/A2-A4/A6‚RESTORETHEREGISTERS1CHNL110ƒMOVEM.L(A7)+,D1-D2ŠRESTORETHEREGISTERS$ŠOR.Wƒ#$0001,SRSETRETURNCONDITIONŠRTS CHNL120ƒEQU„**ŠMOVEM.L(A7)+,D1-D2ŠRESTORETHEREGISTERS%ŠAND.W‚#$FFFE,SRSETRETURNCONDITIONŠRTSŠPAGEI***************************************************************************;* ROUTINE TO QUEUE EVENT (ALL READY STAGED IN REGISTERS) TO*ƒDRIVINGTASK.*ƒEVENTBEGINSINREGISTERD2.**H*************************************************************************CMRQEVNT‚EQU„*#ŠMOVEM.LA3-A6,-(A7)‡SAVEREGISTERS)ŠMOVE.LCCBRQSTA(A5),A0„CALLER'STCBADDR ŠTR0$.QEVNTI"ŠBRA.S‚CMRQ5ŽBRANCHIFQUEUEINGOK&ŠMOVEM.L(A7)+,A3-A6‡RESTOREREGISTERSŠBRA.S‚CMRQRTN CMRQ5…EQU„*&ŠMOVEM.L(A7)+,A3-A6‡RESTOREREGISTERS CMRQRTNƒEQU„*ŠRTS‰PAGEJ**************************************************************************** INTERRUPT HANDLER CMR*D*ƒPURPOSE:‚HANDLEINTERFACEBETWEENINTERRUPTANDSPECIFICINTERRUPT *HANDLER.2*ITSAVESTHEREGISTERS,SETSUPCCBADDRESSINTO(*A0FORSECONDLEVELINTERRUPTHANDLER,;*ANDJSR'STOTHEAPPROPRIATESECONDARYINTERRUPTHANDLER. *UPONRETURNFROMTHESECONDARY3*INTERRUPTHANDLER,THEREGISTERSARERESTOREDAND+*WEEXITTHROUGHTHEEXITINTERRUPTMACRO.*K******************************J ********************************************* EXCINT„EQU„*/CMRJSR1ƒEQU„$4EB9ŽHEXVALUEFORJSRINSTRUCTIONCMRJSR2ƒEQU„EXCINT**3ŠBTSTƒ#TRCFIO,TRACFLAGƒIfwe'resupposedto‡16(4/0)-ŠIF…THEN.SˆtraceI/Ointerrupts,†10(2/0) 5ŠMOVE.WSR,-(A7)‹Pushstatusregister(asargumentto3ŠBSR„TRACERTRACERroutine)andcallTRACER(within/ŠDC.Wƒ$EE14ŽanotherRMS68Kmodule).‚RestoreSR.8ŠMOVE.W(A7)+,SR‹($EE14isthecodeforaninterruptnotŠENDI–claimedbyatask.)* EXCINT1ƒEQU„*6ŠMOVEM.LD0/A0-A1/A5,-(A7)„SAVEWORKREGISTERS…48(2/8),ŠMOVE.L16(A7),A5GETCCBPCADDRESS†16(4/0)3ŠLEA„-(CCBJSR+6)(A5),A5„GETCCBBASEADDRESS…8(2/0)=EXCINT2ƒMOVE.LCCBRTNI(A5),A1ˆGETI/OHANDLERADDRESS16(4/0))ŠMOVE.LA5,-(A7)ŽSAVECCBADDRESSˆ12(3/0)"ŠJSR„(A1)’CALLI/OHANDLERˆ18(2/2),ŠMOVE.L(A7)+,A5ŽRESTORECCBADDRESS…12(3/0),ŠBCS.S‚EXCINT3INTERRUPTWASCLAIMEDƒ10(2/0)4ŠMOVE.LCCBPOLL(A5),D0ˆINTERRUPTNOTCLAIMEDƒ16(4/0)'ŠBEQ.S‚EXCINT3ENDOFCCBCHAINˆ10(2/0)%ŠMOVE.LD0,A5‘SETUPNEXTCCBADDRESSŠBRA.S‚EXCINT2*:* GIVE CONTROL TO LEVEL ZERO COMMON INTERRUPT HANDLER HERE* EXCINT3ƒEQU„*,ŠMOVEM.L(A7)+,D0/A0-A1/A5„RESTOREREGISTERSŠADD.L‚#4,A7‘BUMPPASTCCBRTS7ŠEXITƒINTERRUPTHANDLECOMMONINTERRUPTPOSTPROCESSINGŠPAGEO*v*****************************************************************************O**********************************************************************************É***7***…ROUTINE:‚CMRSFAIL--SYSFAILINTERRUPTHANDLER.”******É***D***…FUNCTION:‚ThisroutinegetscontrolwhenaSYSFAILinterrupt‡***F***‡occursonthesystembus,probablyindicatingaboardisdown.„***H***‡WehavetocalleachdriverwhichhasaSYSFAILhandlingroutine‚***G***‡soitcanlookatitsboard,determinewhetherornottheboardƒ***;***‡isdown,andtakeappropriateactionifitisdown.******É******…NOTES:¾***G***‡Likeallinterrupthandlers,thisonemustexitthroughCOMINT.ƒ******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡PˆP******‡A:ƒPƒPƒ.ƒ.ƒ.ƒPƒ.ƒP ******É******…ENTRYCONDITIONS:³******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***8***…ENTRYCONDITIONSFORTHECALLEDSYSFAILHANDLER:”***%***‡A5ƒ=ptrtothedriver'sCCB.£******É***7***…EXITCONDITIONSFORTHECALLEDSYSFAILHANDLER:•***F***‡D0,A0,A1,A5maybemodifiedbythedriverwithoutrestoration.„***G***‡Interruptlevelmayberaised,andneednotberestored,butitƒ***D***‡MUSTNOTBELOWERED!‚Thatwouldmakeitpossibletotakethe…*** ***‡SYSFAILinterruptagain.ª******É***O*******************************************************************************O*^***************************************************************************** ŠOPT„BRS CMRSFAIL: *3*‚TracetheSYSFAILinterruptifwe'resupposedto.*AŠBTSTW‚#TRCFSYSF,TRACFLAGIftheflagtellingustotraceSYSFAIL ŠIF…THENŠinterruptsisset,3ŠBSR.L‚TRACERcallthetracerroutinewiththecode,ŠDC.Wƒ$EE07ŽdesignatingaSYSFAILinterrupt.ŠENDI–* *&*‚LoopthroughtheALLchainofCCB's.*8ŠSAVEƒD0/A0/A1/A5ˆSaveregistersweandthedriverswill *§blowaway.6ŠMOVE.LCCBHD,D0‹D0<--ptrtofirstCCBinALLchain. 5ŠWHILE‚‚DO‹WhiletherearemoreCCB'stoprocess, $ŠMOVE.LD0,A5ŽA5<--ptrtotheCCB. *$*„Callthedriver'sSYSFAILhandler.*0ŠMOVE.LCCBUSER(A5),A0…A0<--addressofdriver.=ŠMOVE.L3*4(A0),D0‰D0<--offsetfromthestartofthedriver&*§tohisSYSFAILhandlerroutine;this *§willbe0ifhedoesn'thavea*§SYSFAILhandler.*ŠIF…THENŠIfhehasaSYSFAILhandler, 1ŠPUSH.LA5‘Callthedriver'sSYSFAILhandler,but,ŠPUSHƒSR‘preservetheCCBpointerandtheSRŠJSR„(A0,D0.L)Šwhilewedoit. ŠPOP„SR‘* ŠPOP.L‚A5‘* ŠENDI **„MoveontothenextCCB.*:ŠMOVE.LCCBALL(A5),D0†D0<--ptrtonextCCBinALLchain. ŠENDW **‚Exit.*?ŠRK ESTORED0/A0/A1/A5‡RestoreregistersandexitthroughCOMINT.ŠEXIT„INTERRUPT‰*   ŠENDŠIFEQƒCHIPTYPE-68000/COMINT„IDNTƒ5,168000commoninterrupthandler.ŠENDCŠIFEQƒCHIPTYPE-68010/COMINT„IDNTƒ5,168010commoninterrupthandler.ŠENDCO*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***>***…ROUTINE:‚COMINT--COMMONINTERRUPTHANDLERFOR68XXX.******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***(***‡Copyright1983byMotorola,Inc.¢******É***B***…FUNCTION:‚Containsvariousentrypointsforreturningfrom‰******‡interrupts.·******É******…NOTES:¾******É******…ENTRYPOINTS:·******‡Entrypoint…Usage­***A***‡-----------…---------------------------------------------…***<***‡COMINTŠHandlerforinterruptsnotclaimedbyanyone.…***;***‡COMINTZ‰Returnfrominterruptswhichdonotusethe‡******—EXITINTERRUPTmacro.***F***‡COMINT_PERTURB‚ReturnfromCMRandtimerinterruptswhichhaveƒ***7***—detectedaperturbation,viatheEXITINTERRUPTƒ******—macro.¬***,***‡COMNISR‰Pathwayto‚task-levelISR's.•***,***‡ISRRTEŠReturnfromtask-levelISR's.•******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesI*…--------‚-------------‚------------------------------------------------;*†9/28/84‚MSLŒAddedknowledgeoftheperturbationdetectors *žtoCOMINTZ.*7*†1/24/84‚MSLŒ1.)‚AfterCOMISRA,wepushtheVORonthe%*£stack,iftheprocessorisa68010.**ž2.)‚AfterISRRTE,weadjustthestackby(*£adding#6+VORLNGTHtoA7.‚(Thusisthe,*£processorisa68000,weadd#6,butifit*£isa68010,weadd#8.)* Y2 bb j+ ru zT ‚+F*†8/16/83‚SteveFranckƒGotridofblocktransferstuffforVM02;added2*žcodetocallbackgrounddispatcherifnecessary.*†2/12/82‚HLD6*†2/08/81‚HLD6*†6/25/79‚7616* * *‚XDEF's.*.ŠXDEFƒCOMINTEntrypointstothisroutine;see*ŠXDEFƒCOMINTZŒdescriptionsinfileheader.ŠXDEFƒCOMINT_PERTURB ŠXDEFƒCOMNISR ŠXDEFƒISRRTE * *‚XREF's.**‡Routineentrypoints:?ŠXREFƒBKG_DISPATCH†Routinetodispatchallbackgroundactivity. ŠXREFƒKILLER ŠXREFƒLOADMMUŠXREFƒLOADMMUI ŠXREFƒMMULOAD ŠXREFƒTRACER *‡Datastructures:ŠXREF.SBKG_FLAG7ŠXREF.SBKG_HEAD‹Headpointerforthebackgroundqueue.ŠXREF.SIOVCTBGNŠXREF.SPERTURB_FLAGSŠXREF.SPREEMPT_FLAGŠXREF.SPTMADDRŠXREF.SRUNNERŠXREF.STRACFLAGŠXREF.SVCTUBGN  **‚Includedfiles:**‰ENV.EQ*‰STR.EQ*‰TCB.EQ*‰IOV.EQ *‰INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.ENV.EQŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.IOV.EQŠINCLUDE9995.&.INTERRUP.MCŠINCLUDE9995.&.TR1RTCD.EQŠLIST   ŠSECTIONLEVEL00 ŠOPT„MEX,BRSŠPAGE*=*‰COMINT--Entrypointforinterruptsnotclaimedbyanyone.* COMINT:?ŠBTSTƒ#TRCFIO,TRACFLAGƒIfthetraceflagsaystotracenon-user ŠIF…THENŠinterrupts,!ŠBSR„TRACERtracethisinterrupt. ŠDC.Wƒ$EE14Ž*ŠENDI–* /ŠBRA.S‚COMINTZŒGotothecommoninterruptexit.  **ˆFinalreturnfromISR.* COMIRTN:.ˆMOVE.Lƒ(A7)+,A5ŒGETPREVIOUSMMULOADADDRESSˆBSR†LOADMMURESTOREMMU ˆMOVE.Lƒ(AK 7)+,A0ŒREMOVEUSP#ˆMOVE.LƒA0,USPŽGIVEITBACKTOUSER,ˆMOVEM.L‚(A7)+,D0-D7/A0-A6…RESTOREREGISTERS ˆADD.L„#6,A7‘SKIPPHANTOMRETURN‰PAGE*D*‚Commonreturnfromallinterrupts;thisistheentrypointforCMR*‚toexitfrominterrupts.*G*‚ALLINTERRUPTSMUSTEXITTHROUGHTHISCODE!!!‚Ifsomeinterruptsjust:*‚doanRTE,thenwecouldrunintoasituationlikethis:3*†aninterruptoccursandwevectortothehandler;C*†ahigherpriorityinterruptoccursandwevectortothathandler;C*†thehigherpriorityhandlerschedulesbackgroundactivity&exits'*‰throughCOMINT,whojustdoesanRTE;0*†thelowerpriorityinterruptjustdoesanRTE.I*‚Theresultwouldbethatthebackgroundroutinedoesn'tgetdispatched.* D*‚HereforallinterruptswhichdonotusetheEXITINTERRUPTmacro.@*‚(Infactthisismerelyacopyofthatmacro.)‚Anyway,wemustE*‚freezetheperturbationdetectorswithinthereadyandbkg_scheduleE*‚modulesbydisablinginterrupts,andthensnapshotthestateoftheF*‚perturb_flags.‚Ifneitherthepreempt_flag,northebkg_flagisset,D*‚thenwemayreliablyreturntotheinterruptedcode.‚Otherwise,weB*‚fallintothecomint_perturbroutinetodecodetheperturbation,#*‚andperformthenecessaryaction.* COMINTZ:4ŠDISABLE_INTERRUPTSˆfreeze(perturbationdetectors);2ŠTST.W‚PERTURB_FLAGS†if(noperturbationdetected) ŠIF…THEN%ŠRTE—thenreturntointerruptedcode;ŠENDIŠPAGE*J*‚Checktoseewhetherwhatwe'rereturningtoisanother(lowerpriority)J*‚interruptserviceroutine.‚Actually,there'snowaytodothatwith100%J*‚accuracy,butcheckingtheinterruptmaskofthepushedSRgetsitright=*‚mostofthetime.‚Therearetwoproblemswiththis,though:F*„(1)wecouldhaveinterruptedanISRwhichloweredthemasktozero.L*„(2)wecouldhaveinterruptedsomenon-interruptcodewhichhadinterruptsD*ˆmaskedtosomelevel<6(whichmeanswecouldtakeaninterrupt).* @*ˆWeareherebecauseaninterruptserviceroutinetriedtoRTE,>*ˆbutdiscoveredthatoneorbothoftheperturbflagswasset?*ˆ(bkg_flag,preempt_flag),andsowemusttaketheappropriate>*ˆactiontoservicetheperturbationbeforeexecutingtheRTE.*>*ˆSincetheperturbflagsarearrangedastwoconsecutivebyte>*ˆflags,withthebkg_flaginthemostsignificantbyteofthe<*ˆword,andsincewedidaTST.Wontheperturbflagstoget@*ˆhere,wealsoknowifthebkg_flagwasset(n_bit(cc)=set).:*ˆIfthebkgflagwasset,thenwemusttrytoservicetheA*ˆbackgroundrequest,andthenre-checkthepreempt_flag,because>*ˆabackgroundjobcouldcauseapriorprioritytasktobecome&*ˆreadyandthussetthepreempt_flag. A*ˆHereisthealgorithmforservicingthisdetectedperturbation:**if(bkg_flag=set)thendo;'*’if(interrupt_mask(sr)=0)thendo; *—calldispatch_background_work;*—if*—(preempt_flag=set)&*—(interrupt_mask(sr)=0)&*—(supervisor_bit(sr)=reset)*—thenpreemptthistask; *—elseRTE;*’end; *’elseRTE;*end; *elsedo;*’if*’(interrupt_mask(sr)=0)&*’(supervisor_bit(sr)=reset)*’thenpreemptthistask; *’elseRTE;*end;*‰PAGE*4*ˆhereifoneorbothoftheperturbflagswereset:**if(bkg_flag=reset)*thengotoint_preempt;* COMINT_PERTURB:‰BPL.S…INT_PREEMPT  **ˆhereif(bkg_flag=set):**if(interrupt_mask(sr)<>0) *thenRTE;* ‰MOVE†(SP),-(SP)‰AND.W…#$0700,(SP)+‰BNE.S…INT_RTE  * *ˆhereif*ˆ(bkg_flag=set)&*ˆ(interrupt_mask(sr)=0):* *calldispatch_background_work;* ‰BSR‡BKG_DISPATCH  *,*ˆhereafterreturningfrombackgroundwork:**if(preempt_flag=set)*thengotoint_preempt; *elseRTE;* ‰TST.B…PREEMPT_FLAG‰BNE.S…INT_PREEMPT  INT_RTE:‰RTE‰PAGE* *ˆhereif*ˆ(preempt_flag=set)&*ˆ(bkg_flag=reset):**if*(interrupt_mask(sr)=0)&*(supervisor_bitL (sr)=reset)*thenpreemptthistask; *elseRTE;* INT_PREEMPT:‰TESTIM‰BNE.S…INT_RTE  **ˆheretopreempttask:*7*firstsavethefullstateofthetaskwithinthetcb;*thengotopreempt;*’(preemptwill:*—readythistask;*—fallintothedispatcher;*’)* ‰SAVE_STATE‚L1_PART ‰SAVE_STATE‚L1_FULL ‰EXITˆPREEMPT‰PAGE*>*ˆCommonentryforallinterruptsonvectorsclaimedbyusers.* COMNISR:%ˆMOVE.W‚SR,-(A7)„SAVESTATUSREGISTER-ˆBTST„#TRCFUIO,TRACFLAGƒTRACETHISINTERRUPT?ˆBEQ.SƒCOMISRA…BRANCHIFNO ˆBSR…TRACER†TRACETHISINTERRUPT ˆDC.W„$EE09 COMISRA:-ˆMOVEM.LD0-D7/A0-A6,-(A7)…SAVECURRENTSTATEˆMOVE.L‚USP,A1GETUSER'SSTACK!ˆMOVE.L‚A1,-(A7)ŽSAVEITONSTACK+ˆMOVE.L‚MMULOAD,-(A7)‰SAVEMMULOADADDRESS  *3*ˆInterruptusertaskatspecialinterruptaddress.* 6ˆMOVE.L‚70(A7),A0ADDRESSOFENTRYINVECTCLAIMTABLE!ˆMOVE.L‚IOVTCB(A0),A6‰TCBADDRESS$ˆPEA…(A6)’SAVETCBADDRESSONSTACK. ˆIFEQ„CHIPTYPE-680101ˆMOVE.W‚#$0084,-(A7)ŠIF68010,PUSHVORONSTACK.ˆENDC 7ˆMOVE.L‚IOVADR(A0),-(A7)†PUTINTERRUPTADDRESSONSTACK#ˆMOVE.W‚SR,D0‘USESRWITHLEVELSET"ˆAND.Wƒ#$0FFF,D0MASKOFFSUPRBIT'ˆMOVE.W‚D0,-(A7)ŽSAVETHESTATREGISTER1ˆMOVE.L‚IOVARG(A0),A1‰GIVEUSER'SARGUMENTTOHIM+ˆMOVE.W‚IOVVECT(A0),A0ˆRETURNVECTORNUMBER!ˆMOVE.L‚TCBTST(A6),A5‰TSTADDRESS%ˆBRA…LOADMMUIŽLOADMMUANDGOTOUSERˆPAGE*(*ˆReturnfrominterruptserviceroutine.* ISRRTE:,ˆBTSTƒ#SRMODE,(A7)‚WASTRAP#1INSUPRMODE?ˆBNE„COMINTZ‡RETURNIFYES *ˆADD.L‚#6+VORLNGTH,A7REMOVETRAP1RETURN+ˆMOVE.L(A7)+,A6†GETTCBADDRESSFROMSTACK!ˆMOVE.L(A6),D4‡FIRSTWORDOFTCB#ˆCMP.L‚#'!TCB',D4„BESUREITISTCBˆBEQ.S‚ISRRTE2‡BRANCHIFYES ˆBSR„KILLERˆIFNOT-WHYNOT ISRRTE2:ˆTST.W‚D0ŒCHECKRETURNOPTION&ˆBEQ„COMIRTN‡BRANCHIFSTANDARDRETURN #ˆCMP.W‚#1,D0‰DOESUSERWANTWAKEUP?ˆBNE.S‚ISRRTE4‡BRANCHIFNO ˆTR0.WAKEUP‚(A6)…ISSUEWAKEUP"ˆBRA„COMIRTN‡GOTOSTANDARDRETURN ISRRTE4:ˆCMP.W‚#2,D0‰SENDMESSAGE?ˆBNE„COMIRTN‡BRANCHIFNO )ˆTST.L‚D1ŒISEVENTSERVICEADDRESSGIVEN?ˆBNE.S‚ISRRTE8‡BRANCHIFYES ˆMOVE.LD2,D3‰MESSAGECONTENTˆSWAPƒD3ŒLAST2BYTESIND3)ˆMOVE.W‚#$0602,D2„MESSAGELENGTHANDTYPEˆSWAPƒD2 ISRRTE6:ˆTR0.QEVNTIƒ(A6)…SENDMESSAGEˆNOP’ALLOWFORERRORRETURN ˆBRA„COMIRTN‰PAGE*+*ˆBuildmessagewitheventserviceaddress.* ISRRTE8:ˆSWAPƒD2ŒMESSAGECONTENTˆSWAPƒD1ŒASRADDRESS3ˆMOVE.LD2,D4‰LAST2BYTESOFMESSAGEIND3(UPPER)!ˆMOVE.LD1,D3‰LAST2BYTESOFASR&ˆMOVE.WD2,D3‰FIRST2BYTESOFMESSAGE)ˆMOVE.W#$0A82,D2…MESSAGELENGTHANDTYPEˆSWAPƒD2*ˆMOVE.WD1,D2‰FIRST2BYTESOFASRADDRESSˆBRA„ISRRTE6‡SENDMESSAGEˆPAGE*D*ˆUserinterruptserviceroutineexecutedillegaltraporexception.* ˆXDEF„ISRERR ISRERR:ˆLSR.Lƒ#1,D0ˆADJUSTERRORCODEˆMOVE.L‚D0,D3ˆSAVEFORMESSAGE!ˆADD.Lƒ#2,A7ˆREMOVESRFROMSTACK%ˆMOVE.L‚(A7)+,D4…ADDRESSOFEXCEPTION ˆIFEQ„CHIPTYPE-68010#ˆADD.Lƒ#2,A7ˆREMOVEVORFROMSTACK.ˆENDC ˆMOVE.L‚(A7)+,A6…GETTCBADDRESS ˆMOVE.L‚(A6),D1†CHECKFIRSTWORD#ˆCMP.Lƒ#'!TCB',D1ƒBESUREITISTCBˆBEQ.SƒISRERR2†BRANCHIFTCB ˆBSR…KILLER‡IFNOT-WHYNOT ISRERR2:&ˆOR.W„#$F000,D3„ADDFLAGTOERRORCODE&ˆMOVE.W‚D3,TCBISRS(A6)ƒSAVEFORWAKEUPˆTR0.WAKEUP‚(A6)†ISSUEWAKEUP!ˆTST.LƒTCBASQ(A6)„DOESASQEXIST?ˆBEQ…COMIRTN‡IFNO-RETURN .ˆMOVE.L‚#$0A02FFFF,D2‚MSGLENGTH-TYPE-ERRFLAGˆSWAP„D3ŒERRORCODEˆSWAP„D4ŒUPPER1/2OFADDRESS"ˆMOVE.W‚D4,D3‰LOWER1/2OFADDRESS$ˆBRA…ISRRTE6‡SENDMESSAGEANDRETURN‰ENDéL éé=/*=/*†M68XXX.DCLSHAR.AF=/*,=/* Chain file to assemble M68XXX.DCLSHAR.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.DCLSHAR.LS=/*=/IFC \1ƒ=ARGM68XXX.DCLSHAR.LS=/ENDIF=/*3=ASM M68XXX.DCLSHAR.SA,M68XXX.DCLSHAR.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.SEG.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.GST.EQ=/*}=/*=ENDéééééé Š‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.SEG.EQ*ˆINCLUDEƒ9995.&.TST.EQ*ˆINCLUDEƒ9995.&.GST.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.SEG.EQ‰INCLUDEƒ9995.&.TST.EQ‰INCLUDEƒ9995.&.GST.EQ‰LIST‰PAGE:DCLSHAR‚IDNT5,168xxxDIRECTIVE--DECLARESEGMENTSHARABLE*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.*%*„DCLSHAR--REV2.00ƒ10/05/79‚(HLD6)*›2/26/81‚(HLD6)*Œ--TRAP1ROUTINE*$*…PURPOSE:‚DECLARESEGMENTSHAREABLE*'*‰ENTRY:‚A6HASREQUESTOR'STCBADDRESS(*‘A4HASSEGMENTPARAMETERBLOCKADDRESS* 0-TARGETTASKNAME* 4-SESSIONCODE * 8-OPTIONS%*¤BIT15,ALLATTRGIVENINPARAMBLK%*¤BIT12,MAKESHAREABLESEGPERMANENT*Ÿ10-SEGMENTATTRIBUTES*Ÿ12-SEGMENTNAME*ŠEXIT:ƒD0HASRETURNCODE*’D0=0‚GOODRETURN*<*ˆTHEFOLLOWINGRETURNCODESARERETURNEDINLOWER1/2OFD0*6*ŠRTCDPBLK-2ƒPARAMBLKADDRNOTINUSER'SADDRSPACE2*ŠRTCDTFUL-5ƒGSTISFULL-NOROOMFORNEWENTRY6*ŠRTCDDPRQ-6ƒDUPLICATEREQUEST-NAMEALREADYINGST1*ŠRTCDNFND-7ƒSEGNAMENOTFOUNDINCALLER'STST2*ŠRTCDALOW-9ƒUSERTASKCANNOTDECLARESEGGLOBAL:*ŠRTCDOPT‚-1M 5ƒATTRIBSPECIFYBOTHGLOBALANDLOCALORNONE*)*ŠTHISROUTINEHASHARD-CODEDBITNUMBERS*‰SECTIONLEVEL03*3‰XDEF‚DCLSHAR„ENTRY--DIR--DECLARESEGMENTSHARABLE‰PAGEDCLSHAR:%‰MOVE.LTCBTST(A6),A5…A5=CALLER'STST ‰IFNEƒMULTPROC ‰TR0.P‚(A5)‰ENDC  **ˆFindsegmentincaller'stst.* ‰TR0.FNDSEG‚(A5),SGPBNAME(A4)‰BRA.S‚DCLSHR3ƒFOUNDIT--GOOD DCLSHRE2:(‰EXITƒRTCDNFND“SEGNAMENOTFOUNDINTST  *%*†Checkforglobalorsharedsegment.* #SHARBITSEQU…1<‰BTSTƒ#SGPBOATR,SGPBOPT(A4)AREALLATTRIBUTESGIVENBYCALLER‰BEQ.S‚DCLSHR5ŒBRANCHIFNO %‰BCLRƒ#SEGAROM,D6ˆCLEARREADONLYBIT+‰BTSTƒ#SEGAROM,SGPBATTR(A4)‚CALLERSAYROM?‰BEQ.S‚DCLSHR5ŒBRANCHIFNO ,‰BSETƒ#SEGAROM,D6ˆSETROMBITFORSHAREDSEG DCLSHR5:‰MOVE.LD6,D1ŽNEWATTRIBUTES!‰BCLRƒ#SEGAUSED,D1‡CLEARUSEDBIT  **ˆGetexclusiveaccesstogst.* ˆIFNE„MULTPROC ˆTR0.PƒSEMGSTˆENDC  **ˆFindentryingst.* $‰MOVE.L‚TCBSESSN(A6),D2‡SESSIONCODE‰TR0.FNDGSG‚‰BRA.SƒDCLSHR5EFOUNDENTRY  * *ˆNoentryingst--soaddone.* "‰CMP.Lƒ#0,A0‹ISTHEREROOMINGST?‰BNE.S„DCLSHR6‰BRANCHIFYES %‰EXIT„RTCDTFUL’ERROR-NOROOMINGST DCLSHR5E:‰EXIT„RTCDDPRQALREADYINGST  **ˆBuildgstentry.* DCLSHR6:.‰OR.W„D6,TSTAATTR(A5,D5)†SETGORSBITINTST0‰MOVE.LƒTSTANAME(A5,D5),GSTNAME(A0)‚SEGMENTNAME(‰MOVE.LƒD2,GSTSESSN(A0)ˆCALLER'SSESSION!‰MOVE.WƒD1,GSTATTR(A0)†ATTRIBUTES‰MOVE.Wƒ#1,GSTCNT(A0)ŽONEUSER ‰CLR.LƒD3*‰MOVE.WƒTSTLB(A5,D5),D3‰LOGICALBEGOFSEG'‰ADD.W„TSTPO(A5,D5),D3‹PLUSPHYSOFFSET ‰LSL.Lƒ#8,D3–*256=PHYSADDRESS*‰MOVE.LƒD3,GSTPA(A0)…SAVEPHYSICALADDRESS&‰MOVE.WƒTSTLE(A5,D5),D3‰LOGENDOFSEG$‰SUB.W„TSTLB(A5,D5),D3‰MINUSLOGBEG‰ADD.W„#1,D3“PLUS1=#PAGES‰MOVE.WƒD3,GSTNP(A0).‰MOVE.WƒD0,GSTLENT(A1)ŠUPDATECOUNTOFENTRIES!‰MOVE.Wƒ#1,GSTCNT(A0)‰SET#USERS4‰BTST„#SGPBOPRM,SGPBOPT(A4)„ISPERMANENTOPTIONSET?‰BEQ.SƒDCLSHRX1BRANCHIFNO &‰BSET„#15,GSTCNT(A0)ˆSETPERMANENTBIT  *8*ˆGiveupexclusiveaccesstogstandtst-thenreturn.* DCLSHRX1:ŠIFNE„MULTPROC ŠTR0.VƒSEMGSTŠENDC DCLSHRX:‰IFNE„MULTPROC ‰TR0.VƒTCBTSTSM(A6)‰ENDC !‰EXIT†SUB‘exit(subroutineexit);‰ENDééM éééé=/*=/*†M68XXX.DELAY.AF=/**=/* Chain file to assemble M68XXX.DELAY.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68XXX.DELAY.LS=/*=/IFC \1ƒ=ARGM68XXX.DELAY.LS=/ENDIF=/*/=ASM M68XXX.DELAY.SA,M68XXX.DELAY.RO,\1;MRZ=060=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDéééééé ¬ ŠPAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.ASQ.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.ASQ.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE%DELAY…IDNTƒ5,168xxxDIRECTIVE--DELAY*$*‡COPYRIGHTED1980BYMOTOROLA,INC.**‡****************************1*‡*‚DELAY*ƒDELAYSOMENUMBEROFMILLISECONDS*‡*‚REV2.00‚HLD6‚05/21/81**‡*‚REV3.00‚HLD6‚11/06/81**‡*******************************‹ENTRY:A6HASADDROFTCB%*’A0CONTAINS#MILLISECONDSTN ODELAY*‹EXIT:RETURNSTODISPATCHER* *Ž01234567 *‡USESD*)*ŒA*…*ƒ(TRAP1SAVESALLUSERREGISTERS)**ŠSECTIONLEVEL04* ŠXDEFƒDELAY ŠXDEFƒDELAYWŠXDEFƒPAT_CAN_NODE ŠXREFƒPAT_DEL_NODEŠXREFƒPAT_SCHED_NEW_NODEŠXREFƒSETASQ_SUB * SYSPAR parametersŠXREF.SPATBEGŠPAGE!*delay: proc (tcb_ptr, interval);  *„dcl‚tcb_ptrlongword(A6);*„dcl‚intervallongword(A0);  *ˆcalldelay_sub; *ˆreturn;  *end delay;‰PAGE!*delay: proc (tcb_ptr, interval);  *„dcl‚tcb_ptrlongword(A6);*„dcl‚intervallongword(A0);  *ˆcalldelay_sub;*ˆexit(postempt); DELAY:‰BSR.S…DELAY_SUB‰EXIT†POSTEMPT *end delay;‰PAGE!*delay: proc (tcb_ptr, interval);  *„dcl‚tcb_ptrlongword(A6);*„dcl‚intervallongword(A0);  *ˆif(interval>24hours)*ˆtheninterval<==24hours);0*ˆcancelnodewith(pat_tcb=tcb_ptr&id=0);&*ˆif(headedforasr=reset)thendo;*if(free_list=empty))*thentcb_rtcd(tcb_ptr)<==table_full; *elsedo;*’dequeue(node,free_list);*’init(node);*’schedule(node,pat_list);*end;*ˆend;  *end delay;‰PAGE**…if(interval>24hours)*…theninterval<==24hours);* DELAY_SUB: µr ¾\ Æ` Î'#ŠMOVE.LA0,D2ŽDelaytime(interval)#ŠIF.LD2#24*60*60*1000THEN.S?MOVE.L#24*60*60*1000,D2Insurethat24hoursisthemaxdelayŠENDI  *0*ˆcancelnodewith(pat_tcb=tcb_ptr&id=0);* <ŠMOVE.LPATBEG,A1ŠA1-->toperiodicactivationtableheader*ŠLEA„PATHDR(A1),A2†A2-->headofPATlist ŠMOVE.LA2,A3;ŠMOVE.WSR,-(A7)‹Saveoldstatusforunmaskoperationlater#ŠDISABLE_INTERRUPTSˆMaskinterrupts5ŠMOVE.LPATNEXT(A3),D0…D0-->firstPATentryonlist I* Walk thru PAT list keeping A2 pointing to entry under consideration andJ*ƒA3pointingtopreviousentry.‚RemoveanyentriesfromthePATlistthat+*ƒbelongtothecallerandhaveanIDof0. ŠWHILEDO.S'MOVE.LD0,A2ŽA2-->nextentryonlist9IF.LA6PATTCB(A2)AND.LPATARID(A2)#0THEN.S(BSR„PAT_DEL_NODE‚GodeletethePATnodeELSE.S MOVE.LA2,A3ENDI7MOVE.LPATNEXT(A3),D0‚AdvancetonextnodeonthelistŠENDW  **ˆopen(interruptwindow);* $ŠMOVE.W(A7),SRŒenable(interrupts);)ŠDISABLE_INTERRUPTSˆdisable(interrupts);  *&*ˆif(headedforasr=reset)thendo;* -ŠBTSTW‚#TSK2EVWK,TCBSTATE(A6)‡HEADEDFORASR?ŠBNE.S‚DELAY_01•BRANCHIFYES. **if(free_list=empty))*thentcb_rtcd(tcb_ptr)<==table_full;* -ŠMOVE.LPATFHDR(A1),D0…1STENTRYINFREELIST)ŠBEQ.S‚DLYER_05‹BRANCHIFNOENTRYEXISTS * *elsedo;*’dequeue(node,free_list);*’init(node);*’schedule(node,pat_list);*end;* **†DEQUEUE(NODE,FREE_LIST);* $ŠMOVE.LD0,A2˜ADDRESSOFEMPTYENTRY0ŠMOVE.LPATNEXT(A2),PATFHDR(A1)†UPDATEFREELIST ŠMOVE.W(A7),SR–ALLOWINTERRUPTS  **†INIT(NODE);*!ŠMOVE.LA6,PATTCB(A2)TCBADDRESS*ŠCLR.W‚PATOPT(A2)“CLEARACTIVATIONOPTIONS*ŠMOVE.L#'!DLY',PATARID(A2)ŠSETREQUESTID3ŠMOVE.LA2,TCBDLAY(A6)SAVEADDRESSOFENTRYINTCB **†SCHEDULE(NODE);* ŠDISABLE_INTERRUPTS)ŠBSR„PAT_SCHED_NEW_NODE‹Schedulenewnode * *…RETURN;* DELAY_01:#ŠMOVE.W(A7)+,SR•ENABLEINTERRUPTS; ŠRTS¡RETURN;  DLYER_05:ŠMOVE.W(A7)+,SR'ŠEXITƒRTCDTFUL•ERROR-NOROOMINTABLEŠPAGE**delay_and_wait: proc (tcb_ptr, interval);  *„dcl‚tcb_ptrlongword(A6);*„dcl‚intervallongword(A0);  %*ˆcalldelay_sub(tcb_ptr,interval);*ˆif(tcb_asq(tcb_ptr)<>0)1*ˆthencallsetasq_sub(tcb_ptr,en_asr,en_asq);*ˆdisable(interrupts);*ˆreset(wakeup_pending);&*ˆif(wakeup_pendingwasset)thendo;*if(tcb_delay(tcb_ptr)<>0N )8*thencallcancel_delay(tcb_ptr,tcb_delay(tcb_ptr));*exit(subroutine);*ˆend; *ˆelsedo;*set(blockedbit);*exit(postempt);*ˆend;  *end delay_and_wait;ŠPAGE**delay_and_wait: proc (tcb_ptr, interval);  *„dcl‚tcb_ptrlongword(A6);*„dcl‚intervallongword(A0);  %*ˆcalldelay_sub(tcb_ptr,interval); DELAYW:‰BSR‡DELAY_SUB  *ˆif(tcb_asq(tcb_ptr)<>0)1*ˆthencallsetasq_sub(tcb_ptr,en_asr,en_asq); ‰MOVE.L„TCBASQ(A6),D0‰BEQ.S…DLAYW_02 ,‰MOVE.L„D0,A4”asq_ptr<==tcb_asq(tcb_ptr);;‰BTST†#ASQS_RNV,ASQSTMD2(A4)ƒif(asr_nval(asq_ptr)=reset‰BNE.S…DLAYW_02 -‰MOVE.W„#5,A0”asq_status<==asr_en+asq_en; :‰BTST†#ASQDBBIT,ASQSWMD2(A4)ƒif(dbuf(asq_ptr)=enabled)‰BEQ.S…DLAYW_01 ‰ADD.W…#2,A0 DLAYW_01:‰BSR‡SETASQ_SUB  *ˆdisable(interrupts);*ˆreset(wakeup_pending);&*ˆif(wakeup_pendingwasset)thendo;*if(tcb_delay(tcb_ptr)<>0)8*thencallcancel_delay(tcb_ptr,tcb_delay(tcb_ptr));*exit(subroutine);*ˆend; *ˆelsedo;*set(blockedbit);*enable(interrupts);*exit(postempt);*ˆend;  *end delay_and_wait; DLAYW_02:&‰MOVE.W„SR,-(A7)‘disable(interrupts);‰DISABLE_INTERRUPTS 5‰BCLRW…#TSK2WKWT,TCBSTATE(A6)ƒreset(wakeup_pending);+‰BEQ.S…DLAYW_03‘if(wakeup_pendingwasset) *«thendo;*‰MOVE.L„TCBDLAY(A6),D0if(tcb_delay<>0)‰BEQ.S…DLAYW_04 %‰MOVE.L„A6,A5™thencallcancel_delay;‰BSR.S…PAT_CAN_NODE DLAYW_04:%‰MOVE.W„(A7)+,SR–enable(interrupts);!‰EXIT†SUB›exit(subroutineexit);*«end;  DLAYW_03: *«elsedo;0‰BSETW…#TSKSBLCK,TCBSTATE(A6)ˆset(blockedbit);%‰MOVE.W„(A7)+,SR–enable(interrupts);)‰EXIT†POSTEMPT–exit(postemptthistask);*«end;‰PAGE *ˆentryconditions:*ŽD0=ADDR(NODETOCANCEL);*ŽA5=TCB_PTR;*  PAT_CAN_NODE:‰MOVEM.LD1/A1-A3,-(A7) /‰MOVE.LD0,A2“Addressofnodewewanttoremove$‰MOVE.LPATBEG,A1PATheaderaddress5‰LEA.L‚PATHDR(A1),A3A3ˆpointstopointerto1stnode !‰WHILE.LPATNEXT(A3)A2DO.S1ŒMOVE.LPATNEXT(A3),A3‡Findthisnodeonthelist‰ENDW (‰BSR„PAT_DEL_NODEŒNowgodeletethenode ‰MOVEM.L(A7)+,D1/A1-A3 ‰CLR.L‚TCBDLAY(A5)ŒCLEARPOINTER.‰BCLRƒ#TSKSBLCK,TCBSTATE(A5)CLEAR'WAIT'ALSO‰RTS ‰ENDéééé=/*=/*†M68XXX.DEMON.AF=/**=/* Chain file to assemble M68XXX.DEMON.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68XXX.DEMON.LS=/*=/IFC \1ƒ=ARGM68XXX.DEMON.LS=/ENDIF=/*/=ASM M68XXX.DEMON.SA,M68XXX.DEMON.RO,\1;MRZ=055=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*}=/*=ENDO éééééé Ö‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰INCLUDEƒ9995.&.TCB.EQ‰LIST‰PAGE8DEMON„IDNT5,1‚68xxxDIRECTIVE--DETACHEXCEPTIONMONITOR*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**‡*******************:*‡*‚DEMON†*ƒDETACHTASKFROMEXCEPTIONMONITOR-TRAP1:*‡*‚DMONX†*ƒDETACHTASKFROMEXCEPTIONMONITOR-TRAP0*‡*‚REV1.00ƒHLD6**‡*‚08/06/79‡**‡**********************‹ENTRY:A6HASADDROFTCB *’A4HASPARAMETERBLOCKADDRESS*—0-TASKNAMEOFTARGETTASK*—4-SESSIONCODE*’A5HASTARGETTCBADDRESS**‹EXIT:D0HASRETURNCODE*’D0=0„GOODRETURN*<*ˆTHEFOLLOWINGRETURNCODESARERETURNEDINLOWER1/2OFD0*6*ŠRTCDPBLK-2ƒPARAMBLKADDRNOTINUSER'SADDRSPACE)*ŠRTCDTASK-3ƒTARGETTASKDOESNOTEXIST0*ŠRTCDSTAT-10ƒTARGETTASKNOTATTACHEDTOEXMON***ˆSECTIONLEVEL041ˆXDEF„DEMONŠENTRY--DIR--DETACHEXCEPTIONMONITOR1ˆXDEF„DMONXŠENTRY--EXEC--DETACHEXCEPTIONMONITOR3ˆXDEF„SBDMONXˆENTRY--EXEC--DETACHEXCEPTIONMONITOR‰PAGE**ˆTrap#1entrypoint.* DEMON:%‰MOVE.L„A5,A2™SAVETARGETTCBADDRESS7‰BTST†#TSKIEXM,TCBATTI(A2)ŠISTARGETATTACHEDTOEXMON?.‰EXIT.EQƒRTCDSTAT–TARGETNOTATTACHEDTOEXMON !‰BSR.S…DEMON_SUB•callsubroutine.!‰EXIT†SUB›exit(subroutineexit);‰PAGE*&*ˆSubroutineandtrap#0entrypoints.* SBDMONX:DMONX:$‰MOVE.L„A4,A2™MOVETCBADDRESSTOA2-‰BCLR†#TSKSWTEM,TCBSTATE(A2)ˆCLEAR'WAIT'BIT  *!*ˆBuildmessagetosendtoexmon.* DEMON_SUB:(‰MOVE.L„#$C080000,D2ˆMSGLENGTHANDTYPE.‰MOVE.W„TCBNAME(A2),D2†FIRSTHALFOFTASKNAME>‰MOVE.L„TCBNAME+2(A2),D3„2NDHALFOFNAME,1STHALFOFSESSION-‰MOVE.L„TCBSESSN+2(A2),D4ƒ2NDHALFOFSESSION4‰MOVE.W„#$0002,D4‹0002MEANSMSGISRESULTOFDETACH‰TR0.QEVNTN‚TCBEXM(A2)‰NOP›IGNOREERRORRETURN  **ˆCleartargettask.*  ßX è O 1‰MOVE.L„A2,A4”RestoretcbtoA4fortermroutine.8‰BCLR†#TSKIEXM,TCBATTI(A2)…CLEAR'ATTACHEDTOEXMON'BIT+‰BCLR†#TRMODE,TCBSR(A2)ˆENSURENOTRACEBIT$‰CLR.L…TCBEMMSK(A2)CLEAREXMONMASK<‰BCLR†#TSKSWTEM,TCBSTATE(A2)ƒCLEAR'WAITINGFORCOMMAND'BIT/‰BEQ.S…DEMON_99‘ifwaitingforcommandwasset, ,‰TR0.READY‚(A2)”thenmaketargettaskready. DEMON_99:‰RTS returnfromsubroutine.‰ENDéééééééééééééé