         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
                                                               <<.2136>>00121100
! CPU number assignments                                       <<.2136>>00121200
! ----------------------                                       <<.2136>>00121300
EQUATE                                                         <<.2136>>00121400
  SERIES33  =8,  !SERIES 33                                    <<.2136>>00121500
  SERIES37  =5,  !MIGHTY MOUSE                                 <<.2136>>00121600
  SERIES44  =3,  !SERIES 44                                    <<.2136>>00121700
  SERIES64  =4,  !SERIES 64                                    <<.2136>>00121800
                                                               <<.2136>>00121900
  TIOGA     =6,  !TIOGA MOUSE                                  <<.2136>>00122000
  MICROMOUSE=7,  !MICRO MOUSE                                  <<.2136>>00122100
  MMFMSTART=5,   !START OF THE MIGHTY MOUSE FAMILY             <<.2136>>00122200
  MMFMEND  =7;   !END   OF THE MIGHTY MOUSE FAMILY             <<.2136>>00122300
                                                               <<.2136>>00122400
<<----------------------------------------------------------->><<u1717>>00220010
<<                                                           >><<u1717>>00220020
<<   MPE-TO-MICROCODE PERFORMANCE ENHANCEMENT DEFINITIONS    >><<u1717>>00220030
<<                                                           >><<u1717>>00220040
<<----------------------------------------------------------->><<u1717>>00220050
                                                               <<u1717>>00220060
define                                                         <<u1717>>00220070
                                                               <<u1717>>00220080
           XPFIRMWARE = (13:1)#,                               <<u1717>>00220090
                              << During system power fail,   >><<u1717>>00220100
                              << POWERON will invoke the     >><<u1717>>00220110
                              << "Enabled Performance" ucode >><<u1717>>00220120
                              << to set the XPFIRMWARE bit   >><<u1717>>00220130
                              << if the running system ucode >><<u1717>>00220140
                              << is for the XP.              >><<u1717>>00220150
                                                               <<u1717>>00220160
           SERIES'70'UCODE = absolute(%1220).XPFIRMWARE#;      <<u1717>>00220170
                              << %1220 is Sys Glob cell for  >><<u1717>>00220180
                              << the MAPPING FIRMWARE flag.  >><<u1717>>00220190
                              << Bit 13 of %1220 is set when >><<u1717>>00220200
                              << the XP microcode is running.>><<u1717>>00220210
$EDIT VOID=00270000                                            <<.2316>>00260000
$EDIT                                                          <<.2287>>00610000
                                                               <<.1954>>00614010
COMMENT                                                        <<.1954>>00614020
MODE.(0:8)     =NUMBER OF MARKERS TO BE DELETED.               <<.1954>>00614030
                                                               <<.1954>>00614040
IF MODE.(8:8)  =0 THEN INTERNAL INTERRUPT, HARDWARE OR SIMULATE<<.1954>>00614050
CODE PARAMETER =TYPE OF INTERNAL INTERRUPT                     <<.1954>>00614060
               = 0 IF UNDEFINED                                <<.1954>>00614070
               = 1 IF INTEGER OVERFLOW                         <<.1954>>00614080
               = 2 IF FLOATING POINT OVERFLOW                  <<.1954>>00614090
               = 3 IF FLOATING POINT UNDERFLOW                 <<.1954>>00614100
               = 4 IF INTEGER DIVIDE BY ZERO                   <<.1954>>00614110
               = 5 IF FLOATING POINT DIVIDE BY ZERO            <<.1954>>00614120
               = 6 IF PRIVILEGED MODE INSTRUCTION TRAP         <<.1954>>00614130
               = 7 IF UNIMPLEMENTED INSTRUCTION TRAP           <<.1954>>00614140
               = 8 IF EXTENDED PRECISION OVERFLOW              <<.1954>>00614150
               = 9 IF EXTENDED PRECISION UNDERFLOW             <<.1954>>00614160
               =10 IF EXTENDED PRECISION DIVIDE BY ZERO        <<.1954>>00614170
               =11 IF DECIMAL OVERFLOW                         <<.1954>>00614180
               =12 IF INVALID ASCII DIGIT IN DECIMAL INSTRUCTIO<<.1954>>00614190
               =13 IF INVALID DECIMAL DIGIT                    <<.1954>>00614200
               =14 IF INVALID SOURCE WORD COUNT                <<.1954>>00614210
               =15 IF INVALID DECIMAL OPERAND LENGTH           <<.1954>>00614220
               =16 IF DECIMAL DIVIDE BY ZERO                   <<.1954>>00614230
               =17 IF STT UNCALLABLE                           <<.1954>>00614240
               =18 UNUSED                                      <<.1954>>00614250
               =19 UNUSED                                      <<.1954>>00614260
               =20 IF STACK OVERFLOW                           <<.1954>>00614270
               =21 UNUSED                                      <<.1954>>00614280
               =22 IF BAD STACK MARKER                         <<.1954>>00614290
               =23 IF ILLEGAL ADDRESS (NO SUCH MEMORY ADDRESS) <<.1954>>00614300
               =24 IF BOUNDS VIOLATION (TYPICALLY USER ERROR)  <<.1954>>00614310
               =25 IF NON-RESPONDING MODULE                    <<.1954>>00614320
               =26 UNUSED                                      <<.1954>>00614330
               =27 UNUSED                                      <<.1954>>00614340
               =28 UNUSED                                      <<.1954>>00614350
               =29 IF STACK UNDERFLOW                          <<.1954>>00614360
               =30 IF CST VIOLATION                            <<.1954>>00614370
               =31 IF STT VIOLATION                            <<.1954>>00614380
PARAM PARAMETER=NOT USED                                       <<.1954>>00614390
                                                               <<.1954>>00614400
IF MODE.(8:8)  =1 THEN INTRINSIC ERROR                         <<.1954>>00614410
CODE PARAMETER =INTRINEXIT, DEFINED AS                         <<.1954>>00614420
                BIT  0- 9=INTRINSIC NUMBER                     <<.1954>>00614440
                BIT 10-16=NUMBER OF PARAMETER WORDS            <<.1954>>00614441
PARAM PARAMETER=TYPE OF ERROR                                  <<.1954>>00614442
               =1 IF ILLEGAL DB REGISTER (NO SPLIT STACK)      <<.1954>>00614443
               =2 IF ILLEGAL CAPABILITY (INSUFFICIENT CAPABILIT<<.1954>>00614470
               =3 IF OMITTED PARAMETER (REQUIRED PARM FOR OPT. <<.1954>>00614480
               =4 IF INCORRECT S REGISTER (NOT ENOUGH STACK)   <<.1954>>00614490
               =5 IF PARAMETER ADDRESS VIOLATION               <<.1954>>00614500
               =6 IF PARAMETER END ADDRESS VIOLATION           <<.1954>>00614510
               =7 IF ILLEGAL PARAMETER                         <<.1954>>00614520
               =8 IF PARAMETER VALUE INVALID                   <<.1954>>00614530
               =9 IF INCORRECT Q REGISTER                      <<.1954>>00614540
                                                               <<.1954>>00614550
IF MODE.(8:8)  =2 THEN QUIT CALL                               <<.1954>>00614560
CODE PARAMETER =0                                              <<.1954>>00614570
PARAM PARAMETER=USER SUPPLIED QUIT NUMBER                      <<.1954>>00614580
                                                               <<.1954>>00614590
MODE.(8:8)     =3 THEN QUITPROG CALL                           <<.1954>>00614600
CODE PARAMETER =0                                              <<.1954>>00614610
PARAM PARAMETER=USER SUPPLIED QUIT NUMBER                      <<.1954>>00614620
                                                               <<.1954>>00614630
MODE.(8:8)     =4 THEN STACK OVERFLOW IN DATASEG               <<.1954>>00614640
CODE PARAMETER =IGNORED                                        <<.1954>>00614650
PARAM PARAMETER=IGNORED                                        <<.1954>>00614660
                                                               <<.1954>>00614670
MODE.(8:8)     =5 THEN HARD KILL FROM ABORTPROG (:ABORT, ETC.) <<.1954>>00614680
CODE PARAMETER =IGNORED                                        <<.1954>>00614690
PARAM PARAMETER=IGNORED                                        <<.1954>>00614700
;                                                              <<.1954>>00614710
COMMENT                                                        <<.1954>>01536010
**BEGIN_IS********************************************02/12/86*<<.1954>>01536020
*                                                             *<<.1954>>01536030
* PROCEDURE TESTCRUNCH(CALLER)                                *<<.1954>>01536040
*                                                             *<<.1954>>01536050
* PURPOSE:  TESTCRUCH IS A FUNCTION CALLED BY PROCEDURES      *<<.1954>>01536060
*           BOUNDSVIOLATION, ILLEGALADDRESS AND NONRESPONDING *<<.1954>>01536070
*           MODULE TO DO TWO THINGS IF THE CALLER CAUSING     *<<.1954>>01536080
*           THE INTERNAL INTERRUPT WAS PRIVILEGED.  THE FIRST *<<.1954>>01536090
*           IS TO PASS BACK A TRUE VALUE IF TWO INTERNAL      *<<.1954>>01536100
*           INTERRUPTS WERE GENERATED BY A SINGLE VIOLATION.  *<<.1954>>01536110
*           THE SECOND IS TO CALL SUDDENDEATH IF THE BOUNDS   *<<.1954>>01536120
*           VIOLATION, ILLEGAL ADDRESS OR NON-RESPONDING      *<<.1954>>01536130
*           MODULE INTERNAL INTERRUPT TRAP WAS CAUSED BY      *<<.1954>>01536140
*           SYSTEM CODE OR BECAUSE USER CODE WAS EXITING THRU *<<.1954>>01536150
*           A BAD STACK MARKER.                               *<<.1954>>01536160
*                                                             *<<.1954>>01536170
*           PUT THE INSTRUCTION THAT CAUSED THE VIOLATION     *<<.1954>>01536180
*           THAT IS IN THE X REGISTER ON TOS AND SEE IF THE   *<<.1954>>01536190
*           CODE THAT CAUSED THE VIOLATION IS PRIVILEGED OR   *<<.1954>>01536200
*           NOT BY CHECKING THE STATUS WORD [1].  IF NOT,     *<<.1954>>01536210
*           THEN RETURN WITH A DEFAULT FALSE CONDITON VALUE   *<<.1954>>01536220
*           TO THE CALLER.                                    *<<.1954>>01536230
*                                                             *<<.1954>>01536240
*           IF THE INSTRUCTION CAUSING THE TRAP HAPPENS TO BE *<<.1954>>01536250
*           AN EXTERNAL LABEL, THEN SEE IF MULTIPLE INTERNAL  *<<.1954>>01536260
*           INTERRUPTS WERE CAUSED BY A SINGLE VIOLATION.     *<<.1954>>01536270
*           THIS IS DONE BASED ON THE FACT THAT THE FIRST     *<<.1954>>01536280
*           INTERAL INTERRUPT WILL BE SET UP WITH P SET UP TO *<<.1954>>01536290
*           THE ADDRESS OF WHERE THE VIOLATION OCCURRED,      *<<.1954>>01536300
*           STATUS POINTING TO ININ AND THE INTERNAL          *<<.1954>>01536310
*           INTERRUPT PARAMETER WORD AT Q+1 [2].  THIS        *<<.1954>>01536320
*           PARAMETER WORD WILL CONTAIN AN EXTERNAL LABEL STT *<<.1954>>01536330
*           POINTING TO THE PROCEDURE IN ININ TO PROCESS THE  *<<.1954>>01536340
*           INTERNAL INTERRUPT.  IF A SECOND INTERNAL         *<<.1954>>01536350
*           INTERRUPT HAS HAPPENED, THEN A SECOND STACK       *<<.1954>>01536360
*           MARKER IS LAID DOWN, BUT P [3] WILL BE SET TO     *<<.1954>>01536370
*           POINT TO THE PROCEDURE TO PROCESS THE 1ST         *<<.1954>>01536380
*           INTERNAL INTERRUPT.  SO TO TELL IF MULTIPLE       *<<.1954>>01536390
*           INTERNAL INTERRUPTS HAD OCCURRED, TESTCRUNCH      *<<.1954>>01536400
*           WOULD USE THE STT NUMBER IN THE PARAMETER WORD    *<<.1954>>01536410
*           IN THE FIRST INTERNAL INTERRUPT MARKER [2] TO     *<<.1954>>01536420
*           FIND THE ADDRESS OF THE PROCEDURE TO PROCESS IT   *<<.1954>>01536430
*           AND COMPARE IT TO THE P REGISTER VALUE [3] IN THE *<<.1954>>01536440
*           2ND MARKER.  IF THEY ARE EQUAL, IT MEANS THAT THE *<<.1954>>01536450
*           PROCEDURE THAT IS TO PROCESS THE 1ST INTERNAL     *<<.1954>>01536460
*           INTERRUPT HAS NOT YET BEEN ENTERED AND THEREFORE  *<<.1954>>01536470
*           MULTIPLE INTERRUPTS HAVE OCCURRED (PASS BACK A    *<<.1954>>01536480
*           TRUE VALUE TO THE CALLER).                        *<<.1954>>01536490
*                                                             *<<.1954>>01536500
*           THEN DO A SUDDENDEATH CALL IF THE CAUSE OF THE    *<<.1954>>01536510
*           VIOLATION WAS DONE BY A PRIVILEGED PROGRAM (USER  *<<.1954>>01536520
*           OR SYSTEM) AS FOLLOWS:  FIRST DETERMINE IF THE    *<<.1954>>01536530
*           VIOLATOR WAS PRIVILEGED SYSTEM CODE OR NOT BY     *<<.1954>>01536540
*           EITHER SEEING IF THE VIOLATOR WAS PHYSICALLY      *<<.1954>>01536550
*           MAPPED (ASSUMING THE MAPPING FIRMWARE IS IN PLACE *<<.1954>>01536560
*           IE. %1220 IS <>0) OR CHECKING IF THIS IS A SYSTEM *<<.1954>>01536570
*           SL AND THE SYSTEM FLAG BIT IS ON.  IF SO, THEN    *<<.1954>>01536580
*           PREPARE FOR THE SUDDENDEATH CALL.  IF THIS IS A   *<<.1954>>01536590
*           SERIES 33, THEN SET THE X REGISTER WITH A P MAP   *<<.1954>>01536600
*           VALID ADDRESS OF THE CALLER OF TESTCRUNCH AND     *<<.1954>>01536610
*           SUDDENDEATH WITH A 8 IF A NON RESPONDING MODULE,  *<<.1954>>01536620
*           A 9 IF ILLEGAL ADDRESS AND A 10 IF A BOUNDS       *<<.1954>>01536630
*           VIOLATION.  IF THIS IS A SERIES 44 OR 64, THEN    *<<.1954>>01536640
*           DETERMINE IF THE VIOLATION WAS A BOUNDS VIOLATION *<<.1954>>01536650
*           DUE TO THE EXITING THRU A BAD STACK MARKER.  IF   *<<.1954>>01536660
*           NOT, THEN SET UP AND CALL SUDDENDEATH SIMILARILY  *<<.1954>>01536670
*           TO A SERIES 33.  IF THE VIOLATOR WAS PRIVILEGED   *<<.1954>>01536680
*           USER CODE THAT IS EXITING THRU A BAD STACK        *<<.1954>>01536690
*           MARKER THEN CONTINUE ON (HOPEFULLY, THE USER      *<<.1954>>01536700
*           PROCESS WILL BE ABORTED BY THE CALLER OF          *<<.1954>>01536710
*           TESTCRUNCH).  OTHERWISE GO TO LABEL DIE AND       *<<.1954>>01536720
*           SUDDENDEATH ALSO IF THE VIOLATOR WAS SYSTEM CODE  *<<.1954>>01536730
*           BY SEEING IF IT WAS PHYSICALLY MAPPED IF THE      *<<.1954>>01536740
*           MAPPING FIRMWARE IS IN PLACE [5] OR IF IT HAS A   *<<.1954>>01536750
*           SYSTEM SL SEGMENT NUMBER (<%300 [6]).             *<<.1954>>01536760
*                                                             *<<.1954>>01536770
*           IF THE VIOLATOR THAT CAUSED THE INTERNAL          *<<.1954>>01536780
*           INTERRUPT IS NOT SYSTEM CODE, THEN ENABLE         *<<.1954>>01536790
*           EXTERNAL INTERRUPTS AND RETURN.                   *<<.1954>>01536800
*                                                             *<<.1954>>01536810
* ENTRY:    X     =INSTRUCTION WHICH CAUSED INTERNAL          *<<.1954>>01536820
*                  INTERRUPT                                  *<<.1954>>01536830
*                                                             *<<.1954>>01536840
*           CALLER=NUMBER WHICH IDENTIFIES WHO IS CALLING     *<<.1954>>01536850
*                  TESTCRUNCH                                 *<<.1954>>01536860
*                 =0 IF CALLER IS PROCEDURE NONRESPONDING     *<<.1954>>01536870
*                    MODULE                                   *<<.1954>>01536880
*                 =1 IF CALLER IS PROCEDURE ILLEGALADDRESS    *<<.1954>>01536890
*                 =2 IF CALLER IS PROCEDURE BOUNDSVIOLATION   *<<.1954>>01536900
*                                                             *<<.1954>>01536910
*                                                             *<<.1954>>01536920
*           STACK MARKER OF USER OR 1ST MARKER     :  :       *<<.1954>>01536930
*           OF MULTIPLE STACK MARKERS CAUSED     |------|     *<<.1954>>01536940
*           BY A SINGLE VIOLATION                |     X|     *<<.1954>>01536950
*                                                |------|     *<<.1954>>01536960
*                     ARRQ((-ARRQ(-ARRQ)-ARRQ)-2)|USER P| [5] *<<.1954>>01536970
*                                                |------|     *<<.1954>>01536980
*                     ARRQ((-ARRQ(-ARRQ)-ARRQ)-1)|STATUS| [6] *<<.1954>>01536990
*                                                |------|     *<<.1954>>01537000
*                                                |     Q|     *<<.1954>>01537010
*                                                |------|     *<<.1954>>01537020
*                                                | STT A| [2] *<<.1954>>01537030
*           -------------------------------------|------|     *<<.1954>>01537040
*           STACK MARKER OF 1ST                  |     X|     *<<.1954>>01537050
*           INTERNAL INTERRUPT IF                |------|     *<<.1954>>01537060
*           NO MULTIPLE VIOLATIONS  ARRQ(-ARRQ-2)|ININ P| [3] *<<.1954>>01537070
*           OR 2ND STACK MARKER OF               |------|     *<<.1954>>01537080
*           MULTIPLE STACK MARKERS  ARRQ(-ARRQ-1)|STATUS| [1] *<<.1954>>01537090
*           CAUSED BY A SINGLE                   |------|     *<<.1954>>01537100
*           VIOLATION                            |     Q|     *<<.1954>>01537110
*                                                |------|     *<<.1954>>01537120
*                                                | STT  |     *<<.1954>>01537130
*           -------------------------------------|------|     *<<.1954>>01537140
*                                                  :  :       *<<.1954>>01537150
*           STACKMARKER OF CALLER                |------|     *<<.1954>>01537160
*           OF TESTCRUNCH                        |     X|     *<<.1954>>01537170
*                                                |------|     *<<.1954>>01537180
*                                        ARRQ(-2)|     P| [4] *<<.1954>>01537190
*                                                |------|     *<<.1954>>01537200
*                                                |STATUS|     *<<.1954>>01537210
*                                                |------|     *<<.1954>>01537220
*                                            ARRQ|     Q|     *<<.1954>>01537230
*                                                |------|     *<<.1954>>01537240
*                                                  :  :       *<<.1954>>01537250
*                                                             *<<.1954>>01537260
* EXIT:     TESTCRUNCH=TRUE IF THIS IS NOT THE LAST INTERNAL  *<<.1954>>01537270
*           INTERRUPT STACK MARKER OR A GROUP OF STACK        *<<.1954>>01537280
*           MARKERS THAT WAS GENERATED BY THIS VIOLATION.     *<<.1954>>01537290
*                                                             *<<.1954>>01537300
*           IF SUDDENDEATH CALL, X=P MAP ADDRESS OF CALLER OF *<<.1954>>01537310
*           TESTCRUNCH                                        *<<.1954>>01537320
*                                                             *<<.1954>>01537330
**END_IS*******************************************************<<.1954>>01537340
;                                                              <<.1954>>01537350
$EDIT                                                          <<.2136>>01560000
                                                               <<.1954>>01576000
$EDIT                                                          <<.1954>>01585000
$EDIT VOID=01630000                                            <<.1954>>01600000
                                                               <<.1954>>01601000
COMMENT*****************************************************   <<.1954>>01602000
* RETURN TRUE IF TWO INTERRUPTS CAUSED BY SINGLE VIOLATION *   <<.1954>>01603000
***********************************************************;   <<.1954>>01604000
                                                               <<.1954>>01706000
                                                               <<.1954>>01746100
COMMENT****************************************************    <<.1954>>01746200
* SUDDENDEATH IF INTERNAL INTERRUPT CAUSED BY SYSTEM CODE *    <<.1954>>01746300
**********************************************************;    <<.1954>>01746400
                                                               <<.1954>>01746500
!  DETERMINE IF IN PRIVILEGED SYSTEM CODE                      <<.1954>>01746600
!  --------------------------------------                      <<.1954>>01746700
$EDIT VOID=01855000                                            <<.1954>>01830000
                                                               <<.1954>>01831000
!      SUDDENDEATH IF IN SYSTEM CODE & SERIES 33               <<.1954>>01832000
!      -----------------------------------------               <<.1954>>01833000
       IF TOS=SERIES33 THEN                                    <<.2136>>01865000
                                                               <<.1954>>01886000
!       PROCESS SYSTEM VIOLATIONS FOR SERIES 44 & 64           <<.1954>>01887000
!       --------------------------------------------           <<.1954>>01888000
                                                               <<.1954>>01901000
!           SUDDENDEATH IF NOT EXITING THRU BAD STACK MARKER   <<.1954>>01902000
!           ------------------------------------------------   <<.1954>>01903000
                                                               <<.1954>>01916000
                                                               <<.1954>>01926000
!             GO TO DIE IF VIOLATOR WAS SYSTEM CODE            <<.1954>>01927000
!             -------------------------------------            <<.1954>>01928000
$EDIT VOID=01931500                                            <<.1954>>01930500
               IF MAPPINGFIRMWARE THEN                         <<S9528>>01932000
                 BEGIN                                         <<S9528>>01932500
                   TOS:=ARRQ((-ARRQ(-ARRQ)-ARRQ)-2);           <<S9528>>01933000
                   IF TOS.(1:1) =1 THEN GO DIE;                <<S9528>>01933500
                 END                                           <<S9528>>01934000
               ELSE                                            <<S9528>>01934500
$EDIT                                                          <<.1954>>01945000
$EDIT                                                          <<.1954>>01955000
                                                               <<.1954>>01976000
!  ENABLE EXTERNAL INTERRUPTS                                  <<.1954>>01977000
!  --------------------------                                  <<.1954>>01978000
$PAGE "ILLEGAL ADDRESS INTERNAL INTERRUPT"                     <<.1954>>02525000
COMMENT                                                        <<.1954>>02536100
**BEGIN_IS********************************************02/12/86*<<.1954>>02536200
*                                                             *<<.1954>>02536300
* PROCEDURE ILLEGALADDRESS                                    *<<.1954>>02536400
*                                                             *<<.1954>>02536500
* PURPOSE:  ILLEGALADDRESS IS A PROCEDURE CALLED TO PROCESS   *<<.1954>>02536600
*           A NON-ICS INTERNAL INTERRUPT WHICH IS CAUSED BY   *<<.1954>>02536700
*           ATTEMPTING TO ACCESS A WORD OF MEMORY THAT DOES   *<<.1954>>02536800
*           PHYSICALLY EXIST ON THE SYSTEM.                   *<<.1954>>02536900
*                                                             *<<.1954>>02537000
*           IT CALLS PROCEDURE TESTCRUNCH TO PASS BACK STATUS *<<.1954>>02537100
*           INDICATING IF THIS IS OR IS NOT THE LAST INTERNAL *<<.1954>>02537200
*           INTERRUPT OF A GROUP OF INTERNAL INTERRUPTS THAT  *<<.1954>>02537300
*           WERE CAUSED BY THE SAME VIOLATION (ALONG WITH     *<<.1954>>02537400
*           CALLING SUDDENDEATH IF THE VIOLATION WAS CAUSED   *<<.1954>>02537500
*           BY SYSTEM CODE).  IF THIS ILLEGAL ADDRESS         *<<.1954>>02537600
*           INTERNAL INTERRUPT IS THE LAST TO BE PROCESSED,   *<<.1954>>02537700
*           THEN CALL PROCEDURE ABORT TO ABORT THE CURRENT    *<<.1954>>02537800
*           PROCESS WITH AN ILLEGAL ADDRESS.                  *<<.1954>>02537900
*                                                             *<<.1954>>02538000
* ENTRY:    X=INSTRUCTION WHICH CAUSED THE INTERNAL INTERRUPT *<<.1954>>02538100
*                                                             *<<.1954>>02538200
**END_IS*******************************************************<<.1954>>02538300
;                                                              <<.1954>>02538400
                                                               <<.1954>>02541000
!  IF LAST INTERNAL INTERRUPT STACK MARKER, ABORT CUR PROCESS  <<.1954>>02542000
!  ----------------------------------------------------------  <<.1954>>02543000
$PAGE "NON-RESPONDING MODULE INTERNAL INTERRUPT"               <<.1954>>02560000
$EDIT VOID=02590000                                            <<.1954>>02575000
COMMENT                                                        <<.1954>>02576100
**BEGIN_IS********************************************02/12/86*<<.1954>>02576200
*                                                             *<<.1954>>02576300
* PROCEDURE NONRESPONDINGMODULE                               *<<.1954>>02576400
*                                                             *<<.1954>>02576500
* PURPOSE:  NONRESPONDINGMODULE IS A PROCEDURE CALLED TO      *<<.1954>>02576600
*           PROCESS A NON-ICS INTERNAL INTERRUPT (STT %3)     *<<.1954>>02576700
*           WHICH IS CAUSED WHEN THE CPU REQUESTS INFORMATION *<<.1954>>02576800
*           SOME OTHER MODULE AND THAT INFORMATION IS NOT     *<<.1954>>02576900
*           RECEIVED IN A REASONABLE LENGTH OF TIME (A PRESET *<<.1954>>02577000
*           TIME ON THE ORDER OF 4.6 MILLISECONDS).  NOTE     *<<.1954>>02577100
*           THAT A NON-RESPONDING INTERNAL INTERRUPT CAN ALSO *<<.1954>>02577200
*           BE CAUSED BY A BAD BANK ADDRESS BECAUSE IT WOULD  *<<.1954>>02577300
*           ADDRESS A NON-EXISTING BANK OF MEMORY.            *<<.1954>>02577400
*                                                             *<<.1954>>02577500
*           RETURN CCL CONDITION CODE STATUS BACK TO THE      *<<.1954>>02577600
*           CALLER (USUALLY TO SIMULATE BAD STATUS FROM A     *<<.1954>>02577700
*           HARDWARE MODULE) IF THE VIOLATION WAS DUE TO A    *<<.1954>>02577800
*           I/O OPERATION.  IT THEN CALLS PROCEDURE           *<<.1954>>02577900
*           TESTCRUNCH TO PASS BACK STATUS INDICATING IF THIS *<<.1954>>02578000
*           IS OR IS NOT THE LAST INTERNAL INTERRUPT OF A     *<<.1954>>02578100
*           GROUP OF INTERNAL INTERRUPTS THAT WERE CAUSED BY  *<<.1954>>02578200
*           THE SAME VIOLATION (ALONG WITH CALLING            *<<.1954>>02578300
*           SUDDENDEATH IF THE VIOLATION WAS CAUSED BY SYSTEM *<<.1954>>02578400
*           CODE).  IF THIS NON-RESPONDING MODULE INTERNAL    *<<.1954>>02578500
*           INTERNAL INTERRUPT IS THE LAST TO BE PROCESSED,   *<<.1954>>02578600
*           THEN CALL ABORT TO ABORT THE CURRENT PROCESS WITH *<<.1954>>02578700
*           A NON-RESPONDING MODULE ERROR.                    *<<.1954>>02578800
*                                                             *<<.1954>>02578900
* ENTRY:    X=INSTRUCTION WHICH CAUSED THE INTERNAL INTERRUPT *<<.1954>>02579000
*                                                             *<<.1954>>02579100
*                                                  :  :       *<<.1954>>02579200
*                                                |------|     *<<.1954>>02579300
*           STACK MARKER OF NON-RESPONDING       |     X|     *<<.1954>>02579400
*           INTERNAL INTERRUPT                   |------|     *<<.1954>>02579500
*                                                |ININ P|     *<<.1954>>02579600
*                                                |------|     *<<.1954>>02579700
*                                                |STATUS|     *<<.1954>>02579800
*                                                |------|     *<<.1954>>02579900
*                                                |     Q|     *<<.1954>>02580000
*                                                |------|     *<<.1954>>02580100
*                                                |101401|     *<<.1954>>02580200
*                                                |------|     *<<.1954>>02580300
*                                                             *<<.1954>>02580400
* EXIT:     CONDITION CODE=CCL IF HARDWARE MODULE DID NOT     *<<.1954>>02580500
*                          RESPOND TO I/O OPERATION REQUEST   *<<.1954>>02580600
*                                                             *<<.1954>>02580700
**END_IS*******************************************************<<.1954>>02580800
;                                                              <<.1954>>02580900
                                                               <<.1954>>02596000
!  RETURN IF INTERNAL INTERRUPT CAUSED BY I/O OPERATION        <<.1954>>02597000
!  ----------------------------------------------------        <<.1954>>02598000
                                                               <<.1954>>02621000
!  IF LAST INTERNAL INTERRUPT STACK MARKER, ABORT CUR PROCESS  <<.1954>>02622000
!  ----------------------------------------------------------  <<.1954>>02623000
       SYSDB         = %1000,                                  <<G9196>>03212000
   TOS := SYSDB D;                                             <<G9196>>03226000
   ASMB(XCHD);                                                 <<G9196>>03227000
   ASMB(XCHD; DDEL)                                            <<G9196>>03232000
$EDIT VOID=03260000                                            <<.2287>>03240000
$PAGE "TEMPERATURE WARNING INTERNAL INTERRUPT"                 <<.2287>>03241000
$EDIT VOID=03500000                                            <<.2136>>03275000
COMMENT                                                        <<.2136>>03276000
**BEGIN_IS********************************************04/25/86*<<.2136>>03277000
*                                                             *<<.2136>>03278000
* PROCEDURE TEMPWARNINGS                                      *<<.2136>>03279000
*                                                             *<<.2136>>03280000
* PURPOSE:  TEMPWARNINGS IS A PROCEDURE CALLED TO PROCESS A   *<<.2136>>03281000
*           NON-ICS INTERNAL INTERRUPT (STT %12) CAUSED BY A  *<<.2136>>03282000
*           ABNORMAL TEMPERATURE WARNING FOR THE SERIES 64    *<<.2136>>03283000
*           AND THE SERIES 37 FAMILY (MIGHTY MOUSE, TIOGA     *<<.2136>>03284000
*           AND MICRO MOUSE).  THIS WARNING IS PASSED BACK BY *<<.2136>>03285000
*           THE MICROCODE AND DESCRIBES THE TYPE OF           *<<.2136>>03286000
*           TEMPERATURE WARNING (SEE ENTRY DESCRIPTION SHOWN  *<<.2136>>03287000
*           BELOW).  THIS WARNING WILL BE TRANSLATED INTO A   *<<.2136>>03288000
*           MESSAGE TO BE OUTPUTTED TO THE OPERATOR CONSOLE.  *<<.2136>>03289000
*           NOTE THAT IF THE WARNING TURNS OUT TO BE A FATAL  *<<.2136>>03290000
*           OVERTEMP WARNING, THEN MICROCODE WILL TRAP TO THE *<<.2136>>03291000
*           POWERFAIL INTERRUPT HANDLER AFTER THIS MESSAGE IS *<<.2136>>03292000
*           SENT OUT.                                         *<<.2136>>03293000
*                                                             *<<.2136>>03294000
*           START BY DISABLING INTERRUPTS AND TURNING TRAPS   *<<.2136>>03295000
*           OFF (THIS IS DONE TO HOLD OFF A SECOND TEMP       *<<.2136>>03296000
*           INTERRUPT THAT HAS OCCURRED DURING THE PROCESS OF *<<.2136>>03297000
*           THIS ONE).  THEN GET THE CPU NUMBER FOR THIS CPU  *<<.2136>>03298000
*           AND SAVE IT AWAY.  IF THIS CPU IS PART OF THE     *<<.2136>>03299000
*           MIGHTY MOUSE FAMILY, THEN ONLY RECOGNIZE THE OVER *<<.2136>>03300000
*           TEMPERATURE ERROR CONDITION.  IF THIS CPU IS NOT  *<<.2136>>03301000
*           A SERIES 6X, THEN SUDDENDEATH WITH A SF15 SINCE   *<<.2136>>03302000
*           ONLY THE MIGHTY MOUSE FAMILY AND THE SERIES 6X    *<<.2136>>03303000
*           SHOULD GET A TEMPERATURE INTERNAL INTERRUPT.      *<<.2136>>03304000
*           IF THIS CPU IS A SERIES 6X, THEN IDENTIFY THE     *<<.2136>>03305000
*           TYPE OF TEMPERATURE WARNING.                      *<<.2136>>03306000
*                                                             *<<.2136>>03307000
*           SUDDENDEATH WITH A SF15 IF THERE IS NO MATCHING   *<<.2136>>03308000
*           ERROR MESSAGE FOR THE TEMPERATURE WARNING PASSED  *<<.2136>>03309000
*           BY THE MICROCODE.  DO THE OUTPUTTING OF THE       *<<.2136>>03310000
*           TEMPERATURE WARNING MESSAGE TO THE CONSOLE BY     *<<.2136>>03311000
*           FIRST MAPPING DB TO SYSGLOB, CALLING PROCEDURE    *<<.2136>>03312000
*           IOMESSAGE TO DO THE ACTUAL ERROR OUTPUTTING TO    *<<.2136>>03313000
*           THE CONSOLE AND THEN RESETTING DB BACK TO ITS     *<<.2136>>03314000
*           ORIGINAL VALUE.                                   *<<.2136>>03315000
*                                                             *<<.2136>>03316000
* ENTRY:    Q+1=0 IF LOW OVERTEMP CONDITION                   *<<.2136>>03317000
*              =1 IF HIGH OVERTEMP CONDITION                  *<<.2136>>03318000
*              =2 IF OVERTEMP CONDITION-POWER DOWN IN         *<<.2136>>03319000
*                    PROGRESS                                 *<<.2136>>03320000
*              =3 IF TEMPERATURE NORMAL CONDITION             *<<.2136>>03321000
*              =4 IF PDM NOT RESPONDING                       *<<.2136>>03322000
*              =5 IF POWER SYSTEM WARNING                     *<<.2136>>03323000
*              =6 IF BANNER CLEARED                           *<<.2136>>03324000
*                                                             *<<.2136>>03325000
**END_IS*******************************************************<<.2136>>03326000
;                                                              <<.2136>>03327000
BEGIN                                                          <<.2136>>03328000
                                                               <<.2136>>03329000
LOGICAL                                                        <<.2136>>03330000
  CONDITION    =Q+1; !HOLDS TEMP ERROR PLACED BY MICROCODE     <<.2136>>03331000
                                                               <<.2136>>03332000
INTEGER                                                        <<.2136>>03333000
  MESSAGE      =Q+2, !HOLDS ERROR MESSAGE NUMBER OF WARNING    <<.2136>>03334000
  CPUNUM       =Q+3; !HOLDS CPU SERIES NUMBER                  <<.2136>>03335000
                                                               <<.2136>>03336000
! ERROR CATALOG MESSAGE NUMBERS OF MESSAGES TO BE PRINTED OUT  <<.2136>>03337000
! -----------------------------------------------------------  <<.2136>>03338000
EQUATE                                                         <<.2136>>03339000
  LOWOVERTEMP  =140,                                           <<.2136>>03340000
  HIGHOVERTEMP =141,                                           <<.2136>>03341000
  FATALOVERTEMP=142,                                           <<.2136>>03342000
  NORMALTEMP   =143,                                           <<.2136>>03343000
  OVERTEMP     =146,                                           <<.2136>>03344000
  NOPDMRESP    =411,                                           <<.2136>>03345000
  POWRWARNG    =412,                                           <<.2136>>03346000
  BANNERCLR    =413,                                           <<.2136>>03347000
                                                               <<.2136>>03348000
  CONSOLE      =0,       !CONSOLE NUMBER FOR IOMESSAGE CALL    <<.2136>>03349000
  SYSDB        =%1000;   !ABSOLUTE ADDRESS OF SYSGLOB          <<.2136>>03350000
ASMB( PCN );                                                   <<O9144>>03535000
CPUNUM:=TOS;                                                   <<.2136>>03535100
$EDIT VOID=03565000                                            <<O9144>>03535166
                                                               <<.2136>>03536100
COMMENT******************************************************* <<.2136>>03536110
* DETERMINE WHICH TEMPERATURE WARNING ERROR MSG TO PRINT OUT * <<.2136>>03536120
*************************************************************; <<.2136>>03536130
                                                               <<.2136>>03536140
!  IF SERIES 37 FAMILY, THEN CHECK FOR OVERTEMP MSG            <<.2136>>03536150
!  ------------------------------------------------            <<.2136>>03536160
$EDIT                                                          <<.2136>>03536666
IF MMFMSTART<=CPUNUM<=MMFMEND THEN                             <<.2136>>03537000
   BEGIN                                                       <<O9144>>03538333
   MESSAGE := IF CONDITION = 0 THEN OVERTEMP                   <<O9144>>03540000
         ELSE 0;                                               <<O9144>>03545000
   END                                                         <<O9144>>03550000
                                                               <<.2136>>03551000
!  IF SERIES 64                                                <<.2136>>03552000
!  ------------                                                <<.2136>>03553000
ELSE                                                           <<O9144>>03555000
   BEGIN                                                       <<O9144>>03560000
$EDIT VOID=03563333                                            <<.2136>>03561666
                                                               <<.2136>>03562000
!  SUDDENDEATH IF CPU IS NOT SUPPOSE TO GET ANY TEMP WARNINGS  <<.2136>>03563000
!  ----------------------------------------------------------  <<.2136>>03564000
   IF CPUNUM<>SERIES64 THEN SUDDENDEATH(15);                   <<.2136>>03565000
                                                               <<.2136>>03570000
!       EXTRACT APPROPRIATE ERROR MSG FOR TEMP WARNING         <<.2136>>03571000
!       ----------------------------------------------         <<.2136>>03572000
   END;                                                        <<O9144>>03612000
COMMENT*******************************************             <<.2136>>03616100
* OUTPUT THE TEMP WARNING MESSAGE TO THE CONSOLE *             <<.2136>>03616200
*************************************************;             <<.2136>>03616300
                                                               <<.2136>>03616400
!       SUDDENDEATH IF NO MATCHING ERROR MSG FOR TEMP WARNING  <<.2136>>03616500
!       -----------------------------------------------------  <<.2136>>03616600
$EDIT VOID=03630000                                            <<.2136>>03625000
!       MAP DB TO SYSGLOB, OUTPUT ERROR MSG, RESET DB & RETURN <<.2136>>03636000
!       ------------------------------------------------------ <<.2136>>03637000
$EDIT VOID=03665000                                            <<.2136>>03660000
$EDIT                                                          <<.2136>>03720000
   IF S0=SERIES33 THEN                                         <<.2136>>04060000
   ELSE IF TOS=SERIES44                                        <<.2136>>04090000
$EDIT VOID=04285000                                            <<.2136>>04280000
       SYSDB         = %1000;                                  <<.2136>>04281000
IF TOS<>SERIES64                                               <<.2136>>04320000
$PAGE "PROCEDURE STACKOVERFLOW"                                <<.1539>>05284000
$EDIT                                                          <<.1954>>05295000
$EDIT VOID=05450000                                            <<.1539>>05296010
COMMENT                                                        <<.1539>>05296020
**BEGIN_IS********************************************02/12/86*<<.1954>>05296030
*                                                             *<<.1539>>05296040
* PROCEDURE STACKOVERFLOW                                     *<<.1539>>05296050
*                                                             *<<.1539>>05296060
* PURPOSE:  STACKOVERFLOW IS A PROCEDURE CALLED TO PROCESS AN *<<.1539>>05296070
*           ICS STACK OVERFLOW INTERNAL INTERRUPT (STT# %30). *<<.1539>>05296080
*           STACKOVERFLOW IS THE CONDITION WHERE A PROGRAM    *<<.1539>>05296090
*           ATTEMPTS TO MOVE THE VALUE IN THE S REGISTER PAST *<<.1539>>05296100
*           Z (WHEN THIS HAPPENS, CONTROL IS PASSED TO THIS   *<<.1539>>05296110
*           PROCESS WITH DB POINTING TO THE ICS AND           *<<.1539>>05296120
*           INTERRUPTS ARE DISABLED).  THIS COULD HAPPEN DUE  *<<.1539>>05296130
*           TO A TEMPORARY CONDITION WHERE THE USER'S STACK   *<<.1539>>05296140
*           IS NOT LARGE ENOUGH TO CONTINUE PROCESSING        *<<.1539>>05296150
*           (NEARING THE STACK'S MEMORY REGION END) OR A      *<<.1539>>05296160
*           LEGITIMATE STACK OVERFLOW WHERE S HAS EXCEEDED    *<<.1539>>05296170
*           THE MAXIMUM SIZE OF THE STACK).  IF THE TEMPORARY *<<.1539>>05296180
*           OVERFLOW CONDITION HAS HAPPENED, THEN THE STACK   *<<.1539>>05296190
*           WILL BE SWAPPED OUT ONTO DISC AND THEN BROUGHT    *<<.1539>>05296200
*           BACK INTO A LARGER MEMORY REGION SO THAT THE      *<<.1539>>05296210
*           PROCESS CAN CONTINUE RUNNING (MPE IS VERY         *<<.1539>>05296220
*           CONSERVATIVE ABOUT THE WAY IT MANAGES MEMORY AND  *<<.1539>>05296230
*           WILL ALLOCATE STACK SPACE IN SMALL INCREMENTS).   *<<.1539>>05296240
*           IF THE MAXIMUM STACK SIZE HAS BEEN EXCEEDED, THEN *<<.1539>>05296250
*           ABORT THE PROCESS.                                *<<.1539>>05296260
*                                                             *<<.1539>>05296270
*           SINCE STACKOVERFLOW IS PROCESSED ON THE ICS,      *<<.1539>>05296280
*           PREPARE TO MINIMIZE THE TIME SPENT ON THE ICS BY  *<<.1539>>05296290
*           SETTING UP TO EXIT OFF IT (IT ALSO ALLOWS NORMAL  *<<.1539>>05296300
*           INTERRUPTABLE STACKOVERFLOW PROCESSING TO         *<<.1539>>05296310
*           CONTINUE).  MOVE S DOWN SO SPACE ON THE ICS CAN   *<<.1539>>05296320
*           BE ASSIGNED TO A DOUBLE WORD VARIABLE             *<<.1539>>05296330
*           LAST'STACK'ADDR.  FILL IN LAST'STACK'ADDR WITH    *<<.1539>>05296340
*           WITH THE BANK/BASE ADDRESS OF THE LAST VALID WORD *<<.1539>>05296350
*           (NOT COUNTING THE REGION TRAILER) OF THE MEMORY   *<<.1539>>05296360
*           REGION THAT THE STACK RESIDES IN.  IF THERE IS A  *<<.1539>>05296370
*           STACK OVERFLOW DURING THE PROCESSING OF A STACK   *<<.1539>>05296380
*           SWAP TO A LARGER MEMORY REGION, THEN SUDDENDEATH  *<<.1539>>05296390
*           WITH A 640.                                       *<<.1539>>05296400
*                                                             *<<.1539>>05296410
*           NOW BEGIN THE BUILDING OF THE STACK MARKER THAT   *<<.1539>>05296420
*           IXIT WILL USE, ON THE USER'S STACK.  IF THE       *<<.1539>>05296430
*           INSTRUCTION CAUSING THE OVERFLOW IS AN IXIT       *<<.1539>>05296440
*           INSTRUCTION, THEN BACK UP THE S REGISTER OF THE   *<<.1539>>05296450
*           USER'S STACK 4 (S STARTED AT [1] AND IS NOW AT    *<<.1539>>05296460
*           [2]).  THIS SITUATION CAN HAPPEN IF THE           *<<.1539>>05296470
*           DISPATCHER IS ABOUT TO LAUNCH THE PROCESS BUT THE *<<.1539>>05296480
*           VALUES IN THE PCBX AREA THAT ARE USED TO SET THE  *<<.1539>>05296490
*           S AND Z REGISTER ARE IN A OVERFLOW STATE (I.E.    *<<.1539>>05296500
*           S>Z--THIS CAN COME ABOUT IF THE PROCESS HAD A     *<<.1539>>05296510
*           STACK OVERFLOW, THE OVERFLOW FUDGE AREA OF 120    *<<.1539>>05296520
*           BEING ALLOCATED [AND THE S REGISTER VALUE IN THE  *<<.1539>>05296530
*           PCBX UPDATED FOR IT BUT Z IS NOT] FOLLOWED BY     *<<.1539>>05296540
*           SOME PROCESSING WITH THE EVENTUAL PROCESS'        *<<.1539>>05296550
*           LAUNCH).  PUT THE USER PROCESS STACK'S BANK/BASE  *<<.1539>>05296560
*           ADDRESS ON TOS SO THAT THE STACK MARKER TO BE     *<<.1539>>05296570
*           BUILT CAN BE ADDRESSED.  THEN BACK UP THE USER'S  *<<.1539>>05296580
*           S REGISTER BACK 1 (EITHER TO THE 1ST WORD OF THE  *<<.1539>>05296590
*           INTERRUPT STACK MARKER [4] OR THE DB BANK/BASE    *<<.1539>>05296600
*           ADDRESS PORTION OF A REGULAR STACK MARKER [3]) TO *<<.1539>>05296610
*           POSITION TO THE FIRST WORD OF THE STACK MARKER    *<<.1539>>05296620
*           BEING BUILT.  PUT THE X REGISTER VALUE AND THE    *<<.1539>>05296630
*           LABEL STOV'USER (SO THAT EXECUTION CONTINUES AT   *<<.1539>>05296640
*           STOV'USER IN THE STACK OVERFLOW PROGRAM AND TURN  *<<.1539>>05296650
*           ON THE BIT THAT INDICATES THAT THE P REGISTER IS  *<<.1539>>05296660
*           PHYSICALLY MAPPED IF THE MICROCODE FACILITIES     *<<.1539>>05296670
*           ARE AVAILABLE) INTO THE 1ST 2 WORDS OF THE STACK  *<<.1539>>05296680
*           MARKER BEING BUILT.  THEN ADVANCE TO THE STATUS   *<<.1539>>05296690
*           WORD OF THE STACK MARKER (SUDDENDEATH WITH A 646  *<<.1539>>05296700
*           IF THE ADVANCE HAS CAUSED A BASE ADDRESS WRAP     *<<.1539>>05296710
*           AROUND OR HAS BEEN POSITIONED OUT OF THE STACK'   *<<.1539>>05296720
*           MEMORY REGION) AND PUT THE STATUS, Q WORD VALUE   *<<.1539>>05296730
*           (4) INTO THE STACK MARKER.  ADVANCE TO THE DB     *<<.1539>>05296740
*           ADDRESS DOUBLE WORD OF THE MARKER (SUDDENDEATH    *<<.1539>>05296750
*           WITH A 646 IF THE ADVANCE HAS CAUSED A BASE       *<<.1539>>05296760
*           ADDRESS WRAPAROUND OR HAS BEEN POSITIONED OUT OF  *<<.1539>>05296770
*           STACK' MEMORY REGION) AND PUT THE BANK/BASE       *<<.1539>>05296780
*           ADDRESS OF DB IN THE MARKER.  UPDATE THE USER'S   *<<.1539>>05296790
*           S, Z REGISTER VALUES IN THE PROCESS CONTROL BLOCK *<<.1539>>05296800
*           EXTENSION (PCBX) FOR THE NEW BUILT UP STACK       *<<.1539>>05296810
*           MARKER AND THE STACK OVERFLOW FUDGE AREA.  MOVE   *<<.1539>>05296820
*           S BACK TO THE TOP OF THE BUILT UP STACK MARKER    *<<.1539>>05296830
*           AND DO AN IXIT.                                   *<<.1539>>05296840
*                                                             *<<.1539>>05296850
*           WHEN CONTROL HAS TRANSFERED TO THE USER'S STACK,  *<<.1539>>05296860
*           PUT THE INSTRUCTION CAUSING THE STACK OVERFLOW    *<<.1539>>05296870
*           ON THE STACK SO IT CAN BE DETERMINED IF IT SHOULD *<<.1539>>05296880
*           BE RETRIED (HAVING THE P REGISTER DECREMENTED) OR *<<.1539>>05296890
*           NOT.  MOVE S DOWN SO SPACE ON THE USER'S STACK    *<<.2287>>05296900
*           CAN BE ASSIGNED TO THE LOCAL VARIABLES NEEDED BY  *<<.2287>>05296910
*           STACKOVERFLOW.  IF THE COMPUTER IS A SERIES 37    *<<.2287>>05296920
*           FAMILY THEN THERE ARE NO INSTRUCTIONS THAT ARE TO *<<.2287>>05296930
*           BE RETRIED AND THE REST OF THE SECTION IS         *<<.2287>>05296940
*           BYPASSED.  IF THE COMPUTER IS A SERIES 64, THEN   *<<.2287>>05296950
*           BACK UP THE P REGISTER 1 IF THE INSTRUCTION IS AN *<<.2287>>05296960
*           ADDS, SUBS, SETR, EXIT, PSHR OR BACK UP THE P     *<<.2287>>05296970
*           REGISTER 2 IF THE INSTRUCTION IS A DOUBLE WORD    *<<.2287>>05296980
*           COBOL ORIENTED INSTRUCTION.  IF THE COMPUTER IS A *<<.2287>>05296990
*           SERIES 33, THEN BACK UP THE P REGISTER 1 IF THE   *<<.2287>>05297000
*           INSTRUCTION IS AN ADDS, SUBS, SETR OR EXIT.  IF   *<<.2287>>05297010
*           THE COMPUTER IS A SERIES 4X, II OR III, THEN      *<<.2287>>05297020
*           CHECK TO SEE IF THE INSTRUCTION CAUSING THE       *<<.2287>>05297030
*           VIOLATION IS AN IXIT OR A RIGHT HAND STACK        *<<.2287>>05297040
*           OPERAND INSTRUCTION.  IF NOT, THEN FIRST BACK UP  *<<.2287>>05297050
*           THE P REGISTER.  IF THE INSTRUCTION IS A RIGHT    *<<.2287>>05297060
*           HAND STACK OPERAND, THEN RESET P AND FLAG TO      *<<.2287>>05297070
*           RETRY THE RIGHT OPERAND.  IF THE INSTRUCTION IS A *<<.2287>>05297080
*           LRA, THEN DO A LOCAL PCAL TO RESET A MICROCODE    *<<.2287>>05297090
*           REGISTER (THE MICROCODE HAS BEEN SET UP FOR THE   *<<.2287>>05297100
*           SERIES 4X SO THAT A LRA FOLLOWED IMMEDIATELY BY A *<<.2287>>05297110
*           PCAL 0 WILL BE INTERPRETED TO DO AN INTERNAL      *<<.2287>>05297120
*           PLABEL CALL-- BY DOING THIS PCAL 0 HERE, IT       *<<.2287>>05297130
*           RESETS THE MICROCODE REGISTER SO ANY SUBSEQUENT   *<<.2287>>05297140
*           PCAL 0 IN THE SYSTEM, LIKE THE ONE IN SIODM WILL  *<<.2287>>05297150
*           BE TREATED CORRECTLY).  SINCE THE P REGISTER HAS  *<<.2287>>05297160
*           BEEN BACKED UP, THE LRA, PCAL 0 SEQUENCE WILL BE  *<<.2287>>05297170
*           EXECUTED AGAIN AFTER THE STACK HAS BEEN BROUGHT   *<<.2287>>05297180
*           INTO A LARGER MEMORY REGION.  ALSO BACK UP THE P  *<<.2287>>05297190
*           REGISTER BY AN ADDITIONAL 1 (MAKING IT A TOTAL OF *<<.2287>>05297200
*           2) IF THE INSTRUCTION IS A DOUBLE WORD COBOL      *<<.2287>>05297210
*           ORIENTED INSTRUCTION.                             *<<.2287>>05297220
*                                                             *<<.1954>>05297230
*           IF THE MEASUREMENT INTERFACE IS ENABLED TO GATHER *<<.1954>>05297240
*           GLOBAL STATISTICS, THEN BUMP THE COUNT OF THE     *<<.1954>>05297250
*           COUNT OF THE NUMBER OF TIMES THAT PROCEDURE       *<<.1954>>05297260
*           STACKOVERFLOW WAS ENTERED.  IF THE MEASUREMENT    *<<.1954>>05297270
*           INTERFACE IS ENABLED TO GATHER PROCESS SPECIFIC   *<<.1954>>05297280
*           STATISTICS, THEN BUMP THE COUNT OF THE NUMBER OF  *<<.1954>>05297290
*           TIMES PROCEDURE STACKOVERFLOW WAS ENTERED BECAUSE *<<.1954>>05297300
*           OF THIS PROCESS GENERATING A STACK OVERFLOW.      *<<.1954>>05297310
*                                                             *<<.1954>>05297320
*           NOW LOG THE STACK OVERFLOW INTO THE MONITOR       *<<.1954>>05297330
*           TABLE, SET UP THE LOCAL VARIABLE OLDSIZE WITH THE *<<.1954>>05297340
*           WORD SIZE OF THE STACK, VARIABLE PAGESALLOC WITH  *<<.1954>>05297350
*           THE NUMBER OF PAGES OF THE MEMORY REGION FROM THE *<<.1954>>05297360
*           STACK'S MEMORY REGION HEADER, VARIABLE            *<<.1954>>05297370
*           DBRELTOSTKBASE WITH THE PROCESS' DB BANK/BASE     *<<.1954>>05297380
*           ADDRESS, VARIABLE MAXSTACKSIZE WITH THE MAXIMUM   *<<.1954>>05297390
*           WORD SIZE OF THE PROCESS STACK (MAXDATA) AND ADD  *<<.1954>>05297400
*           THE Z REGISTER VALUE STORED IN THE PXFIXED AREA   *<<.1954>>05297410
*           WITH THE OVERFLOW AREA IN CASE THE PROCESS IS     *<<.1954>>05297420
*           IMPEDED (BECAUSE OF PENDING I/O AGAINST THE       *<<.1954>>05297430
*           STACK) AND THE FUDGE AREA IS NEEDED TO CONTINUE   *<<.1954>>05297440
*           RUNNING.                                          *<<.1954>>05297450
*                                                             *<<.1954>>05297460
*           CONTINUE SETTING UP VARIABLES, THIS TIME WORKING  *<<.1954>>05297470
*           WITH VARIABLES INCREMENT, PAGESREQUIRED,          *<<.1954>>05297480
*           WORDSREQUIRED AND NEWSIZE.  THE INCREMENT         *<<.1954>>05297490
*           VARIABLE, ALONG WITH THE MAXIMUM STACK LIMIT IN   *<<.1954>>05297500
*           THE PXFIXED AREA IS CALCULATED BASED ON WHETHER   *<<.1954>>05297510
*           A PROCESS ABORT STACK OVERFLOW HAS OCCURRED (S>   *<<.1954>>05297520
*           MAXDATA).  IF IT IS, FLAG THAT THE PROCESS IS IN  *<<.1954>>05297530
*           A STACK OVERFLOW ABORT STATE (SUDDENDEATH WITH A  *<<.1954>>05297540
*           641 IF THERE IS A STACK OVERFLOW WHILE TRYING TO  *<<.1954>>05297550
*           ABORT THE PROCESS), SET VARIABLE INCREMENT WITH   *<<.1954>>05297560
*           THE SIZE OF THE AREA NECESSARY TO DO STACK        *<<.1954>>05297570
*           OVERFLOW ABORTING AND UPDATE THE MAXDATA VALUE IN *<<.1954>>05297580
*           THE PXFIXED AREA WITH THE ABORT PROCESSING AREA.  *<<.1954>>05297590
*           BUT IF THE STACK OVERFLOW IS NOT CAUSED BY S      *<<.1954>>05297600
*           EXCEEDING MAXDATA BUT JUST EXCEEDING Z, THEN SET  *<<.1954>>05297610
*           VARIABLE INCREMENT TO A VALUE THAT WILL BE USED   *<<.1954>>05297620
*           TO EXPAND THE STACK WITH (EXPANDING THE STACK     *<<.1954>>05297630
*           REQUIRES THAT IT WILL BE SWAPPED OUT TO DISC AND  *<<.1954>>05297640
*           BROUGHT BACK INTO A LARGER MEMORY REGION).  BUT   *<<.1954>>05297650
*           IF THE STACK OVERFLOW WAS DUE TO A TEMPORARY      *<<.1954>>05297660
*           GENERATED AND THE STACK IS EXPANDED).  THEN CHECK *<<.1539>>05297661
*           TO SEE IF ANY REMAINDER SPACE EXISTS BETWEEN THE  *<<.1539>>05297662
*           VALUE IN Z AND THE END OF THE STACK REGION.  IF   *<<.1539>>05297663
*           THERE IS AND THE VALUE IS LESS THAN THE NORMAL    *<<.1539>>05297664
*           ALLOCATION AMOUNT (512 WORDS), THEN ADD THAT ALSO *<<.1539>>05297665
*           TO THE INCREMENT VARIABLE (THIS IS DONE SO THAT   *<<.1539>>05297666
*           SMALL AREAS ARE NOT LEFT THAT WOULD NOT HOLD THE  *<<.1539>>05297667
*           TEMPORARY VARIABLES NEEDED BY STACKOVERFLOW TO DO *<<.1539>>05297668
*           OVERFLOW PROCESS--IF IT WAS, AND THE USER NEEDED  *<<.1539>>05297669
*           CONDITION OF S POINTING OUT OF THE MEMORY REGION  *<<.1954>>05297670
*           (BUT NOT PASS THE END OF THE DATA STACK), THEN    *<<.1954>>05297680
*           CALCULATE THE EXPAND AREA THAT WILL HAVE TO BE    *<<.1954>>05297690
*           ADDED TO THE MEMORY REGION.  IF THE INSTRUCTION   *<<.1954>>05297700
*           CAUSING THE VIOLATION IS NOT AN ADDS 0, THEN SET  *<<.1954>>05297710
*           UP VARIABLE INCREMENT TO EXPAND BY AN ADDITIONAL  *<<.1954>>05297720
*           4 PAGES OF MEMORY (THE EQUATE STACKOVRINC CAN BE  *<<.1954>>05297730
*           CHANGED IF NECESSARY).  OTHERWISE SET INCREMENT   *<<.1954>>05297740
*           TO 4 PAGES (512 WORDS) PLUS WHATEVER VALUE THE    *<<.1954>>05297750
*           ADDS WAS USING (ADDS 0 IS USUALLY DONE BY SYSTEM  *<<.1954>>05297760
*           CODE TO DETERMINE IF THERE IS ENOUGH SPACE ON A   *<<.1954>>05297770
*           STACK FOR VARIABLES AND SCRATCH AREA TO COMPLETE  *<<.1954>>05297780
*           ITS TASK--IF NOT, A STACK OVERFLOW WILL BE        *<<.1954>>05297790
*           GENERATED AND THE STACK IS EXPANDED).  THEN CHECK *<<.1954>>05297800
*           TO SEE IF ANY REMAINDER SPACE EXISTS BETWEEN THE  *<<.1954>>05297810
*           VALUE IN Z AND THE END OF THE STACK REGION.  IF   *<<.1954>>05297820
*           THERE IS AND THE VALUE IS LESS THAN THE NORMAL    *<<.1954>>05297830
*           ALLOCATION AMOUNT (512 WORDS), THEN ADD THAT ALSO *<<.1954>>05297840
*           TO THE INCREMENT VARIABLE (THIS IS DONE SO THAT   *<<.1954>>05297850
*           SMALL AREAS ARE NOT LEFT THAT WOULD NOT HOLD THE  *<<.1954>>05297860
*           TEMPORARY VARIABLES NEEDED BY STACKOVERFLOW TO DO *<<.1954>>05297870
*           OVERFLOW PROCESS--IF IT WAS, AND THE USER NEEDED  *<<.1954>>05297880
*           A SMALL AMOUNT OF SPACE AND THAT SPACE WAS        *<<.1954>>05297890
*           AVAILABLE, IT WOULD END UP THAT S>Z AND ANOTHER   *<<.1954>>05297900
*           STACKOVERFLOW WOULD OCCUR AND A RESULTING SF640). *<<.1954>>05297910
*           INCREMENT IS LARGE ENOUGH TO PUSH THE Z VALUE     *<<.1954>>05297920
*           PAST THE END OF THE STACK, THEN ADJUST THE        *<<.1954>>05297930
*           INCREMENT DOWN UNTIL IT JUST MISSES PUSHING Z     *<<.1954>>05297940
*           PAST.  THEN TAKE THE INCREMENT VALUE AND ROUND IT *<<.1954>>05297950
*           UP TO THE NEAREST 4 WORD INCREMENT (THIS IS DONE  *<<.1954>>05297960
*           BECAUSE THE STACK IS ALLOCATED AND RECORDED IN 4  *<<.1954>>05297970
*           WORD INCREMENTS).  NOW USE THE INCREMENT VALUE    *<<.1954>>05297980
*           CALCULATED TO SET VARIABLE PAGESREQUIRED WITH THE *<<.1954>>05297990
*           NUMBER OF PAGES THAT THE MEMORY REGION HOLDING    *<<.1954>>05298000
*           THE NEW STACK WILL BE, VARIABLE WORDSREQUIRED     *<<.1954>>05298010
*           WITH THE NUMBER OF WORDS THAT THE MEMORY REGION   *<<.1954>>05298020
*           HOLDING THE STACK WILL BE AND VARIABLE NEWSIZE    *<<.1954>>05298030
*           WITH THE NEW WORD SIZE OF THE STACK.              *<<.1954>>05298040
*                                                             *<<.1954>>05298050
*           NOW DO A VALIDITY CHECK TO SEE THAT THE STACK CAN *<<.1954>>05298060
*           BE SWAPPED OUT.  IF THE STACK IS I/O FROZEN (DUE  *<<.1954>>05298070
*           TO I/O BEING DONE TO THE STACK) BUT EXTERNAL      *<<.1954>>05298080
*           INTERRUPTS ARE DISABLED SO THAT THE I/O CAN NEVER *<<.1954>>05298090
*           BE RECOGNIZED, THEN SUDDENDEATH WITH A 642.  ALSO *<<.1954>>05298100
*           SOFTDEATH OR SUDDENDEATH WITH A 642 IF THE        *<<.1954>>05298110
*           PDISABLE/PENABLE COUNT IS OUT OF SYNC (NON-ZER0). *<<.1954>>05298120
*           THEN CALL PROCEDURE GETDATASEGCHANGESTATE TO SEE  *<<.1954>>05298130
*           IF THE STACK IS PERMANENTLY CORE RESIDENT, FROZEN *<<.1954>>05298140
*           OR LOCKED.  IF IT IS, THEN SUDDENDEATH WITH A     *<<.1954>>05298150
*           643.  IF NOT, BUT THERE IS I/O BEING PERFORMED    *<<.1954>>05298160
*           FOR IT, THEN CALL GETDATASEGCHANGESTATE           *<<.1954>>05298170
*           REPEATEDLY UNTIL THE I/O IS FINISHED (BUT IF AND  *<<.1954>>05298180
*           WHEN THE STACK CAN BE SWAPPED TO A LARGER MEMORY  *<<.1954>>05298190
*           REGION, THEN GETDATASEGCHANGESTATE WILL MARK THE  *<<.1954>>05298200
*           STACK ABSENT).                                    *<<.1954>>05298210
*                                                             *<<.1954>>05298220
*           DO SOME INITIAL PREPARATION WORK FOR THE STACK    *<<.1954>>05298230
*           SWAP AS FOLLOWS:  FIRST, FLAG THAT THE STACK SWAP *<<.1954>>05298240
*           IS IN PROGRESS IN THE PROCESS' PCB.  THEN SET     *<<.1954>>05298250
*           VARIABLE SBRELDB WITH THE STACK'S DB VALUE FOUND  *<<.1954>>05298260
*           IN THE PXGLOB AREA AND UPDATE THE Z VALUE IN THE  *<<.1954>>05298270
*           PXFIXED AREA OF THE PROCESS WITH THE NEW EXPANDED *<<.1954>>05298280
*           STACK END.                                        *<<.1954>>05298290
*                                                             *<<.1954>>05298300
*           IF THE STACK CAN BE EXPANDED IN THE CURRENT       *<<.1954>>05298310
*           MEMORY REGION THAT IT RESIDES IN, THEN REINSTATE  *<<.1954>>05298320
*           THE STACK BY CLEARING THE BIT IN THE WAIT         *<<.1954>>05298330
*           PROCEDURE/DISPATCHER COMMUNICATIONS WORD THAT     *<<.1954>>05298340
*           INDICATES THAT THIS PROCESS IS TO WAIT FOR MEMORY *<<.1954>>05298350
*           (FOR THE EXPANDED STACK) TO BECOME AVAILABLE,     *<<.1954>>05298360
*           CLEAR THE BIT THAT INDICATES THAT THE STACK IS    *<<.1954>>05298370
*           BEING SWAPPED, UPDATE THE DST ENTRY FOR THE STACK *<<.1954>>05298380
*           WITH THE NEW SIZE (IN 4 WORD INCREMENTS),         *<<.1954>>05298390
*           INDICATE THAT THE STACK IS PRESENT AND UPDATE THE *<<.1954>>05298400
*           PROCESS' Z VALUE IN THE ICS.  THEN MAP DB TO THE  *<<.1954>>05298410
*           STACK SO THE Z REGISTER CAN BE SET, RESET DB AND  *<<.1954>>05298420
*           ENABLE THE DISPATCHER.                            *<<.1954>>05298430
*                                                             *<<.1954>>05298440
*           BUT IF THE STACK CANNOT BE EXPANDED IN THE        *<<.1954>>05298450
*           CURRENT MEMORY REGION, THEN START THE STACK SWAP  *<<.1954>>05298460
*           AS FOLLOWS:  CALL PROCEDURE GENSPECREQ TO BUILD   *<<.1954>>05298470
*           A SPECIAL REQUEST ENTRY TO DO THE SWAP AND CALL   *<<.1954>>05298480
*           PROCEDURE SENDMSG TO SEND THE REQUEST TO THE      *<<.1954>>05298490
*           DISPATCHER.  IF THE INTERRUPTED PROCESS HAD       *<<.1954>>05298500
*           EXTERNAL INTERRUPTS DISABLED, IT MUST BE ALLOWED  *<<.1954>>05298510
*           TO RUN TO THE POINT WHERE IT CAN ENABLE           *<<.1954>>05298520
*           INTERRUPTS (THE SYSTEM WILL NOT BE ABLE TO        *<<.1954>>05298530
*           RECOGNIZE THE I/O TO THE DISC IF INTERRUPTS ARE   *<<.1954>>05298540
*           NOT ENABLED AND IT IS HOPED THAT THE FUDGE AREA   *<<.1954>>05298550
*           OF 120 EXTRA WORDS WILL BE ENOUGH TO ALLOW IT TO  *<<.1954>>05298560
*           COMPLETE), SO THE TIMER IS SET UP TO DO AN        *<<.1954>>05298570
*           IMMEDIATE TIME QUANTUM EXPIRATION INTERRUPT (THIS *<<.1954>>05298580
*           IS TRIPPED WHEN THE INTERRUPTS ARE REENABLED--    *<<.1954>>05298590
*           PROCEDURE TIMER WILL DO A DISP INSTRUCTION TO     *<<.1954>>05298600
*           LET THE DISPATCHER LAUNCH THE NEXT PROCESS AND    *<<.1954>>05298610
*           WHEN THIS PROCESS IS SET UP FOR A LAUNCH, THE     *<<.1954>>05298620
*           STACK WILL BE SWAPPED INTO A LARGER MEMORY        *<<.1954>>05298630
*           REGION), THE DISPATCHER IS ENABLED, THE STACK     *<<.1954>>05298640
*           MARKED PRESENT AND CONTROL RETURNED TO THE        *<<.1954>>05298650
*           TO THE PROCESS SO IT CAN FINISH UP AND ENABLED    *<<.1954>>05298660
*           INTERRUPTS.  NEXT ISSUE A DISP AND ENABLE THE     *<<.1954>>05298670
*           DISPATCHER SO THAT THE SWAP CAN BE INITIATED.     *<<.1954>>05298680
*           BUT IF THE DISPATCHER IS DISABLED, THEN THE       *<<.1954>>05298690
*           INTERRUPTED PROCESS MUST AGAIN BE ALLOWED TO RUN  *<<.1954>>05298700
*           (AGAIN IN THE FUDGE AREA) UNTIL IT CAN ENABLE THE *<<.1954>>05298710
*           DISPATCHER.                                       *<<.1954>>05298720
*                                                             *<<.1954>>05298730
*           FINALLY CHECK TO SEE IF THE PROCESS HAS CAUSED A  *<<.1954>>05298740
*           ABORTABLE SITUATION WHERE S>MAXDATA.  IF IT HAS   *<<.1954>>05298750
*           AND THE PROCESS IS NOT IN CRITICAL CODE AND DOES  *<<.1954>>05298760
*           NOT HAVE A SYSTEM INTERNAL RESOURCE (SIR), THEN   *<<.1954>>05298770
*           CORRECT THE P REGISTER VALUE FOR THE ABORT        *<<.1954>>05298780
*           ROUTINE TO WORK PROPERLY, FLAG THAT AN ABORT DUE  *<<.1954>>05298790
*           TO A STACK OVERFLOW IS BEING PROCESSED AND CALL   *<<.1954>>05298800
*           PROCEDURE ABORT TO KILL THE PROCESS WITH A STACK  *<<.1954>>05298810
*           OVERFLOW ERROR.                                   *<<.1954>>05298820
*                                                             *<<.1954>>05298830
*           NOTE:  THERE ARE SEVERAL WAYS THAT A SF640 CAN    *<<.1954>>05298840
*           HAPPEN:                                           *<<.1954>>05298850
*                                                             *<<.1954>>05298860
*           *  IT CAN HAPPEN IF 3 CONDITIONS ARE MET (1) S>Z  *<<.1954>>05298870
*              AND S-Z> AREA LEFT IN THE STACK MEMORY REGION  *<<.1954>>05298880
*              THAT CAN BE EXPANDED.  (2) SYSTEM IS           *<<.1954>>05298890
*              PDISABLED/DISABLED SO THAT A STACK DATA        *<<.1954>>05298900
*              SEGMENT SWAP IS NOT POSSIBLE.  (3) INSTRUCTION *<<.1954>>05298910
*              CAUSING THE ERROR IS AN ADDS  X (THIS          *<<.1954>>05298920
*              INSTRUCTION IS RETRIED--IE P REG IS            *<<.1954>>05298930
*              DECREMENTED).  SOLUTION IS TO FIND OUT WHO DID *<<.1954>>05298940
*              A PDISABLE/DISABLE FOLLOWED BY AN ADDS AND NOT *<<.1954>>05298950
*              ALLOW THAT COMBINATION.                        *<<.1954>>05298960
*                                                             *<<.1954>>05298970
*           NOTE:  A SF646 CAN BE CAUSED BY SETTING Z PAST    *<<.1954>>05298980
*              THE CURRENT END OF THE STACK.  JUST SETTING Z  *<<.1954>>05298990
*              WILL NOT HAVE THE STACK EXPANDED BECAUSE Z IS  *<<.1954>>05299000
*              MOVED DOWN.                                    *<<.1954>>05299010
*                                                             *<<.1954>>05299020
* ENTRY:    X=INSTRUCTION CAUSING THE STACK OVERFLOW          *<<.1954>>05299030
*                                                             *<<.1954>>05299040
*              USER STACK                        ICS          *<<.1954>>05299050
*                 :  :                           :  :         *<<.1954>>05299060
*               |------|                       |------|       *<<.1954>>05299070
*               |     X| [4]                   |     X|       *<<.1954>>05299080
*               |------|                       |------|       *<<.1954>>05299090
*               |USER P| [2]                   |ININ P|       *<<.1954>>05299100
*               |------|                       |------|       *<<.1954>>05299110
*               |STATUS|                       |STATUS|       *<<.1954>>05299120
*               |------|                       |------|       *<<.1954>>05299130
*               |     Q|                       |     Q|       *<<.1954>>05299140
*               |------|                       |------|       *<<.1954>>05299150
*               |DBBANK| [3]                   | PARAM|       *<<.1954>>05299160
*               |------|                       |------|       *<<.1954>>05299170
*           S-->|DBBASE| [1]                                  *<<.1954>>05299180
*               |------|                                      *<<.1954>>05299190
*                                                             *<<.1954>>05299200
*           THIS USER STACK                                   *<<.1954>>05299210
*           MARKER MAY NOT                                    *<<.1954>>05299220
*           BE LAID DOWN BY                                   *<<.1954>>05299230
*           THE MICROCODE                                     *<<.1954>>05299240
*                                                             *<<.1954>>05299250
**END_IS*******************************************************<<.1954>>05299260
;                                                              <<.1954>>05299270
$EDIT VOID=05550000                                            <<.1539>>05480000
INTEGER                                                        <<.1539>>05481000
   S0       =S-0,                                              <<.1539>>05482000
   USERS0   =Q-4,                                              <<.1539>>05483000
   DELTAS   =Q-ICS'STKDBRELSCELL,                              <<.1539>>05484000
   DELTAZ   =Q-ICS'STKDBRELZCELL,                              <<.1539>>05485000
   STACKBANK=Q-ICS'STKBANKCELL,   !STACK'S BANK ADDRESS        <<.1539>>05486000
   STACKBASE=Q-ICS'STKBASECELL;   !STACK'S BASE ADDRESS        <<.1539>>05487000
                                                               <<.1539>>05488000
                                                               <<.1539>>05556000
!  INSTRUCTION OPCODE                                          <<.1539>>05557000
!  ------------------                                          <<.1539>>05558000
           PSHR = %024400;                                     <<.2136>>05585000
$EDIT VOID=05615000                                            <<.2136>>05590000
$EDIT VOID=05780000                                            <<.1539>>05620000
                                                               <<.1539>>05626000
EQUATE                                                         <<.1539>>05627000
  STACKOVRINC=512,   !DEFAULT STACK EXPANSION AMOUNT (4 PAGES) <<.1539>>05628000
  EXTRAINC   =%2400; !SYS STK USAGE--STK OVRFLW ABRT PROC               05629000
                                                               <<.1539>>05630000
!  USER STACK LOCAL VARIABLE ASSIGNMENTS                       <<.1539>>05631000
!  -------------------------------------                       <<.1539>>05632000
EQUATE                                                         <<.1539>>05633000
   LOCVARCNT=15;        !NUMBER OF LOCAL VARIABLE WORDS        <<.2287>>05634000
                                                               <<.1539>>05635000
INTEGER                                                        <<.1539>>05636000
   INSTRUCTION   =Q+ 1, !HOLDS INSTRUCTION CAUSING STK OVERFLOW<<.1539>>05637000
   OLDSIZE       =Q+ 2, !WORD SIZE OF STACK                    <<.1539>>05638000
   NEWSIZE       =Q+ 3, !NEW WORD SIZE TO EXPAND STACK TO      <<.1539>>05639000
   PAGESREQUIRED =Q+ 4, !NEW PAGE SIZE TO EXPAND STACK TO      <<.1539>>05640000
   NETSTACKSIZE  =Q+ 5, !MAXIMUM NET SIZE OF STACK             <<.1539>>05641000
   OLDDELTAZ     =Q+ 6, !Z VALUE OBTAINED FROM PXFIXED AREA    <<.2136>>05642000
   STACKDST      =Q+ 7, !STACK DST NUMBER                      <<.1539>>05643000
   SBRELDB       =Q+ 8, !DISPLACEMENT FROM START OF STACK TO DB<<.1539>>05644000
   MAXSTACKSIZE  =Q+ 9, !MAXIMUM STACK SIZE                    <<.1539>>05645000
   INCREMENT     =Q+10, !NUMBER OF WORDS TO EXPAND STACK TO    <<.1539>>05646000
   DBRELTOSTKBASE=Q+11, !DISPLACEMENT FROM DB TO START OF STACK<<.1539>>05647000
   PAGESALLOC    =Q+12, !# OF PAGES OF MEMORY REGION OF STACK  <<.1539>>05648000
   PCBPT         =Q+13, !PCB POINTER OF CURRENT PROCESS        <<.1539>>05649000
   STACKLEFT     =Q+14, !AMOUNT OF SPACE LEFT IN STACK         <<.2287>>05650000
   CPUNUM        =Q+15; !NUMBER OF LOCAL VARIABLE WORDS        <<.2287>>05651000
                                                               <<.1539>>05652000
!  ICS LOCAL VARIABLE ASSIGNMENT AND STACK REFERENCE           <<.1539>>05653000
!  -------------------------------------------------           <<.1539>>05654000
EQUATE                                                         <<.1539>>05655000
   ICSVARCNT      =4;    !NUMBER OF ICS VARIABLE WORDS         <<.1539>>05656000
                                                               <<.1539>>05657000
DOUBLE                                                         <<.1539>>05658000
   LAST'STACK'ADDR=Q+3,  !HOLDS LAST WORD ADDRESS OF STACK     <<.1539>>05659000
                                                               <<.1539>>05660000
   DSM1           =S-1;  !TOS-1, TOS DOUBLE WORD               <<.1539>>05661000
$PAGE                                                          <<.1539>>05776000
COMMENT*****                                                   <<.1539>>05776100
* MAINLINE *                                                   <<.1539>>05776200
***********;                                                   <<.1539>>05776300
                                                               <<.1539>>05776400
!  MOVE S REG DOWN FOR ICS LOCAL VARIABLE ASSIGNMENTS          <<.1539>>05776500
!  --------------------------------------------------          <<.1539>>05776600
                                                               <<.1539>>05786000
!  PUT INSTRUCTION, CURRENT PROC' STACK BANK/BASE ON TOS       <<.1539>>05787000
!  -----------------------------------------------------       <<.1539>>05788000
                                                               <<.1539>>05801000
!  SET LAST'STACK'ADDR TO ADDR OF LAST VALID WORD OF STACK     <<.1539>>05802000
!  -------------------------------------------------------     <<.1539>>05803000
!  SUDDENDEATH IF 2ND STACK OVERFLOW WHILE IN OVERFLOW SWAP    <<.1539>>05841000
!  --------------------------------------------------------    <<.1539>>05842000
                                                               <<.1539>>05851100
COMMENT*************************************************       <<.1539>>05851200
* BUILD STACK MARKER ON USER STACK TO IXIT OFF THE ICS *       <<.1539>>05851300
*******************************************************;       <<.1539>>05851400
!  IF INSTRUCTION=IXIT, THEN SETUP TO OVERWRITE 6 WORD MARKER  <<.1539>>05856000
!  ----------------------------------------------------------  <<.1539>>05857000
$EDIT                                                          <<.1539>>05865000
                                                               <<.1539>>05871100
!  PUT BANK/BASE ADDRESS OF PROCESS' STACK ON TOS              <<.1539>>05871200
!  ----------------------------------------------              <<.1539>>05871300
                                                               <<.1539>>05876100
!  PUT X,LABEL STOV'USER ADDR INTO SM BEING BUILT IN ICS       <<.1539>>05876200
!  -----------------------------------------------------       <<.1539>>05876300
                                                               <<.1539>>05901000
!  SUDDENDEATH IF ADDRESS WRAPAROUND OR OUT OF REGION          <<.1539>>05902000
!  --------------------------------------------------          <<.1539>>05903000
$EDIT VOID=05920000                                            <<.1539>>05915000
!  PUT STATUS, Q VALUE(=4) INTO STACK MARKER BEING BUILT       <<.1539>>05936000
!  -----------------------------------------------------       <<.1539>>05937000
                                                               <<.1539>>05951000
!  SUDDENDEATH IF ADDRESS WRAPAROUND OR OUT OF REGION          <<.1539>>05952000
!  --------------------------------------------------          <<.1539>>05953000
$EDIT VOID=05970000                                            <<.1539>>05960000
!  PUT DB ADDRESS IN STACK MARKER AND ADJUST STACK REGISTER    <<.1539>>05986000
!  --------------------------------------------------------    <<.1539>>05987000
                                                               <<.1539>>05996000
!  UPDATE S FOR STACK MARKER & Z FOR OVERFLOW FUDGE AREA       <<.1539>>05997000
!  -----------------------------------------------------       <<.1539>>05998000
!  IXIT OUT OFF ICS                                            <<.1539>>06011000
!  ----------------                                            <<.1539>>06012000
                                                               <<.1954>>06020100
COMMENT........................................................<<.1954>>06020200
.  NOTE THAT THE FOLLOWING 2 LINES OF CODE ARE NOT IN LINE    .<<.1954>>06020300
.  AND IS ONLY ENTERED BY A PROCEDURE CALL FURTHER DOWN IN    .<<.1954>>06020400
.  STACK OVERFLOW.  THIS DUMMY PROCEDURE IS CALLED TO         .<<.1954>>06020500
.  CORRECT A MICROCODE BUG IN THE SERIES 4X.                  .<<.1954>>06020600
..............................................................;<<.1954>>06020700
LRALABEL:                                                      <<.1954>>06020800
   ASSEMBLE (EXIT 0);  !RETURN                                 <<.1954>>06020900
COMMENT******************************************************  <<.1539>>06026000
* ADJUST P TO RETRY SOME INSTRUCTION CAUSING STACK OVERFLOW *  <<.1539>>06027000
************************************************************;  <<.1539>>06028000
$EDIT VOID=06295000                                            <<.2178>>06040000
   ASMB(ADDS LOCVARCNT);  !MOVE S DOWN FOR LOCAL VARIABLES     <<.2287>>06040500
                                                               <<.2178>>06041000
!  IF SERIES 37 FAMILY, THEN POP OFF CPU TYPE                  <<.2178>>06042000
!  ------------------------------------------                  <<.2178>>06043000
ASSEMBLE (PCN);                                                <<.2178>>06044000
CPUNUM:=TOS;  !SAVE CPU NUMBER OF THIS MACHINE                 <<.2287>>06044500
IF (MMFMSTART<=CPUNUM) LAND (CPUNUM<=MMFMEND) THEN             <<.2287>>06045000
   BEGIN                                                       <<.2178>>06046000
$EDIT                                                          <<.2287>>06047000
                                                               <<.2178>>06048000
!  ADD INSTRUCTIONS TO BE RETRIED FOR THE MOUSE FAMILY HERE    <<.2178>>06049000
                                                               <<.2178>>06050000
   END                                                         <<.2178>>06051000
ELSE                                                           <<.2178>>06052000
   BEGIN                                                       <<.2178>>06053000
   IF CPUNUM<>SERIES44 THEN                                    <<.2287>>06054000
      BEGIN          !TEST FOR SERIES 33 AND SERIES 64         <<.2178>>06055000
                                                               <<.2178>>06056000
!     GET OPCODE OF CURRENT INSTRUCTION                        <<.2178>>06057000
!     ---------------------------------                        <<.2178>>06058000
      X:=LOGICAL(X) LAND %177400;  !GET THE OPCODE ONLY        <<.2178>>06059000
                                                               <<.2178>>06060000
!     IF SERIES 6X, CHECK FOR INSTRUCTIONS TO RETRY            <<.2178>>06061000
!     ---------------------------------------------            <<.2178>>06062000
$EDIT                                                          <<.2287>>06063000
      IF CPUNUM=SERIES64 THEN                                  <<.2287>>06064000
         BEGIN                                                 <<.2178>>06065000
         IF X=ADDS OR                                          <<.2178>>06066000
            X=SUBS OR       !THESE ARE THE INSTRUCTIONS        <<.2178>>06067000
            X=SETR OR       !THAT ARE TO BE RETRIED            <<.2178>>06068000
            X=EXIT OR       !FOR THE SERIES 6X                 <<.2178>>06069000
            X=PSHR THEN                                        <<.2178>>06070000
            P:=P-1;                                            <<.2178>>06071000
                                                               <<.2178>>06072000
!        RETRY DOUBLE WORD COBOL INSTRUCTIONS                  <<.2178>>06073000
!        ------------------------------------                  <<.2178>>06074000
         IF INSTRUCTION=%020477 THEN P:=P-2;                   <<.2178>>06075000
         END                                                   <<.2178>>06076000
                                                               <<.2178>>06077000
!     IF SERIES 33, THEN CHECK FOR INSTRUCTIONS TO RETRY       <<.2178>>06078000
!     --------------------------------------------------       <<.2178>>06079000
      ELSE                                                     <<.2178>>06080000
         BEGIN                                                 <<.2178>>06081000
         IF X=ADDS OR                                          <<.2178>>06082000
            X=SUBS OR       !THESE ARE THE INSTRUCTIONS        <<.2178>>06083000
            X=SETR OR       !THAT ARE TO BE RETRIED            <<.2178>>06084000
            X=EXIT THEN     !FOR THE SERIES 33                 <<.2178>>06085000
            P:=P-1;                                            <<.2178>>06086000
         END                                                   <<.2178>>06087000
      END                                                      <<.2178>>06088000
                                                               <<.2178>>06089000
!  IF SERIES 4X,II OR III THEN CHK FOR INSTRUCTION TO RETRY    <<.2178>>06090000
!  --------------------------------------------------------    <<.2178>>06091000
   ELSE                                                        <<.2178>>06092000
      BEGIN                                                    <<.2178>>06093000
      IF X<>IXIT THEN                                          <<.2178>>06094000
         BEGIN                                                 <<.2178>>06095000
         P:=P-1;                                               <<.2178>>06096000
         X:=LOGICAL(X) LAND %170077;  !CLEAR LEFT SK OP        <<.2178>>06097000
         IF 1<=X<=63 THEN                                      <<.2178>>06098000
            BEGIN              !A INST WITH RIGHT SK OP        <<.2178>>06099000
            TOS:=STATUS;                                       <<.2178>>06100000
            ASSEMBLE(TCBC 3);  !IF LEFT SK OP ACTIVE,          <<.2178>>06101000
            IF <> THEN P:=P+1; !THEN ADJUST P FOR RETRY        <<.2178>>06102000
            STATUS:=TOS;                                       <<.2178>>06103000
            END;                                               <<.2178>>06104000
         END;                                                  <<.2178>>06105000
                                                               <<.2178>>06106000
!     CHECK FOR LRA INSTRUCTION                                <<.2178>>06107000
!     -------------------------                                <<.2178>>06108000
      IF (LOGICAL(INSTRUCTION) LAND %170000)=%170000 THEN      <<.2178>>06109000
         BEGIN                                                 <<.2178>>06110000
         ASSEMBLE (LRA  LRALABEL);                             <<.2178>>06111000
         ASSEMBLE (PCAL 0);  !CALL DUMMY PROC TO RESET FLAG    <<.2178>>06112000
         END;                                                  <<.2178>>06113000
                                                               <<.2178>>06114000
!     BACK UP P IF COBOL DOUBLE WORD INSTRUCTION               <<.2178>>06115000
!     ------------------------------------------               <<.2178>>06116000
      IF INSTRUCTION=%020477 THEN P:=P-1;                      <<.2178>>06117000
      END;                                                     <<.2178>>06118000
   END;  !END OF DELTA P ADJUSTMENTS                           <<.2178>>06119000
$EDIT VOID=06302000                                            <<.2287>>06301000
$EDIT                                                          <<.2287>>06305000
$EDIT                                                          <<.1539>>06310000
                                                               <<.1539>>06316100
COMMENT****************************************                <<.1539>>06316200
* GATHER GLOBAL/PROCESS STATISTICS IF ENABLED *                <<.1539>>06316300
**********************************************;                <<.1539>>06316400
                                                               <<.1539>>06316500
!  IF GETTING GLOB STATS, THEN BUMP STACK OVERFLOW COUNTER     <<.1539>>06316600
!  -------------------------------------------------------     <<.1539>>06316700
                                                               <<.1539>>06361000
!  IF GETTING PROC STATS, BUMP STACK OVERFLOW/SEG EXPAND CNTR  <<.1539>>06362000
!  ----------------------------------------------------------  <<.1539>>06363000
                                                               <<.1539>>06411100
COMMENT********************************************            <<.1539>>06411200
* LOG OVERFLOW IN MONITOR TABLE & SETUP VARIABLES *            <<.1539>>06411300
**************************************************;            <<.1539>>06411400
                                                               <<.1539>>06411500
!  DISABLE, FLAG WAITING ON MEMORY & GET CUR PROC' STACK DST # <<.1539>>06411600
!  ----------------------------------------------------------- <<.1539>>06411700
X:=STACKDST:=ABSOLUTE(ABSOLUTE(ICS'QI)-ICS'STKDSTCELL);        <<.1539>>06430000
                                                               <<.1539>>06431000
!  LOG INTO MONITOR TABLE THE STACK OVERFLOW                   <<.1539>>06432000
!  -----------------------------------------                   <<.1539>>06433000
$EDIT VOID=06445000                                            <<.1739>>06434000
TOS:=MMSTATSPECREQ;                                            <<.1739>>06436000
TOS:=OBJIDENT;                                                 <<.1739>>06437000
TOS:=STACK'OVERFLOW;                                           <<.1739>>06438000
PUSH(S);                                                       <<.1954>>06439000
TOS:=STATUS;                                                   <<.1739>>06440000
TOS:=ICS(-ICS'PDISCNTCELL);                                    <<.1739>>06441000
MMSTAT'(*,*,*,*,*,*,*);                                        <<.1739>>06442000
                                                               <<.1539>>06446000
!  SET OLDSIZE WITH WORD SIZE OF STACK DST MEMORY REGION       <<.1539>>06447000
!  -----------------------------------------------------       <<.1539>>06448000
                                                               <<.1539>>06451000
!  SET PAGESALLOC WITH STACK'S SIZE (PAGES) FROM REGION HEADER <<.1539>>06452000
!  ----------------------------------------------------------- <<.1539>>06453000
TOS:=ABSOLUTE(ABSOLUTE(ICS'QI)-ICS'STKBANKCELL);               <<.1539>>06455000
TOS:=ABSOLUTE(ABSOLUTE(ICS'QI)-ICS'STKBASECELL);               <<.1539>>06460000
                                                               <<.1539>>06476000
!  SET DBRELTOSTKBASE WITH DB VALUE FROM PROCESS'S PXGLOB      <<.1539>>06477000
!  ------------------------------------------------------      <<.1539>>06478000
                                                               <<.1539>>06496000
!  SET MAXSTACKSIZE WITH MAX STACK SIZE FROM PROCESS'S PXFIXED <<.2136>>06497000
!  ----------------------------------------------------------- <<.2136>>06498000
                                                               <<.1539>>06516000
!  GET Z FROM PXFIXED & ADD OVERFLOW FUDGE AREA (120 WORDS)    <<.1539>>06517000
!  --------------------------------------------------------    <<.1539>>06518000
                                                               <<.1539>>06541100
COMMENT****************************************************    <<.1539>>06541200
* DETERMINE INCREMENT VALUE NEEDED TO CONTINUE PROCESSING *    <<.1539>>06541300
**********************************************************;    <<.1539>>06541400
NETSTACKSIZE:=MAXSTACKSIZE-DBRELTOSTKBASE;                     <<.1539>>06541500
IF OLDDELTAZ >= NETSTACKSIZE THEN                              <<.1539>>06545000
                                                               <<.1539>>06546000
!  DETERMINE INCREMENT IF Z HAS EXCEEDED MAXDATA               <<.1539>>06547000
!  ---------------------------------------------               <<.1539>>06548000
                                                               <<.1539>>06551000
!  SUDDENDEATH IF OVERFLOW WHILE DOING ABORT PROCESSING        <<.1539>>06552000
!  ----------------------------------------------------        <<.1539>>06553000
                                                               <<.1539>>06561000
!  UPDATE PCBX'S MAXDATA WITH PROCESS ABORT SPACE              <<.2136>>06562000
!  ----------------------------------------------              <<.2136>>06563000
                                                               <<.1539>>06566000
                                                               <<.1539>>06591000
!  DETERMINE INCREMENT IF Z HAS NOT EXCEEDED MAXDATA           <<.1539>>06592000
!  -------------------------------------------------           <<.1539>>06593000
                                                               <<.1539>>06611100
!  ADD ANY REMAINDER SPACE IF NEAR THE END OF THE STACK        <<.1739>>06611200
!  ----------------------------------------------------                 06611300
   STACKLEFT:=NETSTACKSIZE-(OLDDELTAZ+INCREMENT);              <<.1539>>06611400
   IF STACKOVRINC > STACKLEFT                                  <<.1539>>06611500
      THEN INCREMENT:=INCREMENT+STACKLEFT;                     <<.1539>>06611600
                                                               <<.1539>>06612000
!  IF NEEDED, SHAVE INCREMENT TO SIZE OF REMAINING STACK SPACE <<.1539>>06613000
!  ----------------------------------------------------------- <<.1539>>06614000
      LOGICAL(NETSTACKSIZE) THEN                               <<.1539>>06620000
      INCREMENT:=NETSTACKSIZE-OLDDELTAZ;                       <<.1539>>06625000
                                                               <<.1539>>06626000
                                                               <<.1539>>06636000
!  DETERMINE # PAGES, # WORDS TO EXPAND STACK TO               <<.1539>>06637000
!  ---------------------------------------------               <<.1539>>06638000
$EDIT VOID=06655000                                            <<.1539>>06650000
                                                               <<.1539>>06661100
COMMENT*********************************************           <<.1539>>06661200
* PERFORM STACK OVERFLOW PROCESSING VALIDITY CHECK *           <<.1539>>06661300
***************************************************;           <<.1539>>06661400
                                                               <<.1539>>06661500
!  SUDDENDEATH IF I/O FROZEN BUT NO EXT INTERRUPTS ENABLED     <<.1539>>06661600
!  -------------------------------------------------------     <<.1539>>06661700
                                                               <<.1539>>06686000
!  CORRECT ANY PDISABLE PROBLEMS                               <<.1539>>06687000
!  -----------------------------                               <<.1539>>06688000
$EDIT                                                          <<.1539>>06780000
                                                               <<.1539>>06791000
!  SUDDENDEATH IF STACK CORE RESIDENT, FROZEN OR LOCKED        <<.1539>>06792000
!  ----------------------------------------------------        <<.1539>>06793000
$EDIT                                                          <<.1539>>06810000
                                                               <<.1539>>06811100
COMMENT*************************************************       <<.1539>>06811200
* ADJUST DB, Z AND STACK FOR STACK OVERFLOW PROCESSING *       <<.1539>>06811300
*******************************************************;       <<.1539>>06811400
                                                               <<.1539>>06811500
!  FLAG THAT STACK OVERFLOW SWAP IS IN PROGRESS                <<.1539>>06811600
!  --------------------------------------------                <<.1539>>06811700
                                                               <<.1539>>06816000
!  SET SBRELDB WITH STACK'S DB VALUE                           <<.1539>>06817000
!  ---------------------------------                           <<.1539>>06818000
                                                               <<.1539>>06841000
!  UPDATE Z REG VALUE IN THE PXFIXED AREA                      <<.1539>>06842000
!  --------------------------------------                      <<.1539>>06843000
                                                               <<.1539>>06856000
                                                               <<.1539>>06861000
COMMENT******************************************************* <<.1539>>06862000
* REINSTATE STACK IF IT CAN BE EXPANDED IN CUR MEMORY REGION * <<.1539>>06863000
*************************************************************; <<.1539>>06864000
$EDIT VOID=06880000                                            <<.1539>>06870000
!  INDICATE THAT STACK IS STILL IN MEMORY                      <<.1539>>06887000
!  --------------------------------------                      <<.1539>>06888000
$EDIT                                                          <<.1539>>06895000
   ABSOLUTE(ABSOLUTE(ICS'QI)-ICS'STKDBRELZCELL):=OLDDELTAZ +   <<.1539>>06920000
$EDIT                                                          <<.1539>>06930000
                                                               <<.1539>>06931000
!  MAP DB TO STACK SO Z REG CAN BE SET TO NEW END OF STACK     <<.1539>>06932000
!  -------------------------------------------------------     <<.1539>>06933000
                                                               <<.1539>>06971000
COMMENT****************************************************    <<.1539>>06972000
* STACK CANNOT BE EXPANDED IN SEGMENT, SO DO A STACK SWAP *    <<.1539>>06973000
**********************************************************;    <<.1539>>06974000
                                                               <<.1539>>06976000
!  BUILD & SEND REQUEST TO DO A SWAP FOR THIS STACK            <<.1539>>06977000
!  ------------------------------------------------            <<.1539>>06978000
                                                               <<.1539>>07001000
!  IF INTERRUPTED PROCESS HAD DISABLED INTERRUPTS, LET IT RUN  <<.1539>>07002000
!  ----------------------------------------------------------  <<.1539>>07003000
                                                               <<.1539>>07041000
                                                               <<.1539>>07046000
!  IF INTERRUPT PROCESS DISABLED DISPATCHER, LET IT RUN        <<.1539>>07047000
!  ----------------------------------------------------        <<.1539>>07048000
                                                               <<.1539>>07076000
COMMENT************************************************        <<.1539>>07077000
* IF PROCESS HAS STACK OVERFLOW, ABORT IT IF POSSIBLE *        <<.1539>>07078000
******************************************************;        <<.1539>>07079000
$EDIT                                                          <<.1539>>07110000
$EDIT VOID=07159000                                            <<.2136>>07157000
  (PROCESSOR'TYPE=SERIES44 OR PROCESSOR'TYPE=SERIES64 OR       <<.2136>>07505000
  (MMFMSTART<=PROCESSOR'TYPE<=MMFMEND))                        <<.2136>>07510000
COMMENT                                                        <<.2136>>07596100
**BEGIN_IS********************************************04/25/86*<<.2136>>07596200
*                                                             *<<.2136>>07596300
* PROCEDURE PRIVILEGEDMODEVIOLATION                           *<<.2136>>07596400
*                                                             *<<.2136>>07596500
* PURPOSE:  PRIVILEGEDMODEVIOLATION IS A PROCEDURE CALLED TO  *<<.2136>>07596600
*           PROCESS THE NON-ICS PRIVILEGED MODE VIOLATION     *<<.2136>>07596700
*           INTERNAL INTERRUPT (STT %25).  THIS TRAP IS       *<<.2136>>07596800
*           CAUSED BY AN ATTEMPT TO EXECUTE A PRIVILEGED      *<<.2136>>07596900
*           INSTRUCTION IN USER MODE (I.E. WHEN BIT 0 OF THE  *<<.2136>>07597000
*           STATUS REGISTER IS 0.  THIS VIOLATION ALSO OCCURS *<<.2136>>07597100
*           IN EXIT IF AN ATTEMPT IS MADE TO EXIT FROM USER   *<<.2136>>07597200
*           TO PRIVILEGED MODE, IF EXITING FROM USER MODE AND *<<.2136>>07597300
*           THE EXTERNAL INTERRUPT BIT IN THE STATUS WORD HAS *<<.2136>>07597400
*           BEEN ALTERED.                                     *<<.2136>>07597500
*                                                             *<<.2136>>07597600
*           IF A PRIVILEGED MODE VIOLATION HAS OCCURRED, THEN *<<.2136>>07597700
*           CALL PROCEDURE ABORT TO ABORT THE CURRENT PROCESS *<<.2136>>07597800
*           WITH A PRIVILEGED MODE VIOLATION.                 *<<.2136>>07597900
*                                                             *<<.2136>>07598000
* ENTRY:    X=INSTRUCTION WHICH CAUSED THE INTERNAL INTERRUPT *<<.2136>>07598100
*                                                             *<<.2136>>07598200
**END_IS*******************************************************<<.2136>>07598300
;                                                              <<.2136>>07598400
$EDIT VOID=08175000                                            <<.1726>>07890000
COMMENT                                                        <<.1726>>07891000
**BEGIN_IS*****************************************************<<.1726>>07892000
*                                                             *<<.1726>>07893000
* PROCEDURE CODEABSENCE                                       *<<.1726>>07894000
*                                                             *<<.1726>>07895000
* PURPOSE:  CODEABSENCE IS A PROCEDURE CALLED TO PROCESS A    *<<.1726>>07896000
*           NON-ICS CODE ABSENCE INTERNAL INTERRUPT (STT %37).*<<.1726>>07897000
*           THE ABSENCE BIT IN THE CST ENTRY FOR THE          *<<.1726>>07898000
*           REFERENCED SEGMENT IS SET TO 1.  THIS CHECK IS    *<<.1726>>07899000
*           PERFORMED IN PCAL, EXIT, IXIT, DISP AND THE       *<<.1726>>07900000
*           FIRMWARE INTERRUPT HANDLER.  IF IN PCAL, THE      *<<.1726>>07901000
*           PROGRAM LABEL IS PASSED AS THE PARAMETER TO THE   *<<.1726>>07902000
*           INTERRUPT HANDLER.  IF IN EXIT, THE NUMBER OF     *<<.1726>>07903000
*           WORDS TO BE DELETED FROM THE STACK IS PASSED.     *<<.1726>>07904000
*           AND IF IN IXIT, A ZERO IS PASSED.                 *<<.1726>>07905000
*                                                             *<<.1726>>07906000
*           CHECK TO MAKE SURE THAT THE PDISABLE COUNT IS     *<<.1726>>07907000
*           CORRECT AND IF NOT, DO EITHER A SOFTDEATH 644 IF  *<<.1726>>07908000
*           THE COUNT IS 1 OR A SUDDENDEATH 644 IF IT IS NOT. *<<.1726>>07909000
*           THEN SET UP PROCEDURE CODEABSENCE'S VARIABLE      *<<.1726>>07910000
*           ASSIGNMENTS (FIRMWAREPARM, INSTR, PCALFLAG,       *<<.1726>>07911000
*           SAVEDB, PROCINX, CSTXEIX, DESCSTINX, OBJID AND    *<<.1726>>07912000
*           TRACE) ALONG WITH SAVING THE LOGICALLY MAPPED     *<<.1726>>07913000
*           BIT OF THE P REGISTER IN P.  SAVE THE BANK/BASE   *<<.1726>>07914000
*           ADDRESS OF DB, CALL PROCEDURE MAPPEDCSTTOPHYCST   *<<.1726>>07915000
*           TO OBTAIN A DOUBLE WORD OBJECT OF THE CST-        *<<.1726>>07916000
*           RELATIVE ADDRESS OF THE ABSENT CODE SEGMENT AND   *<<.1726>>07917000
*           SUDDENDEATH WITH A 999 IF THERE WERE PROBLEMS     *<<.1726>>07918000
*           IN CALCULATING THE ADDRESS.  SET UP VARIABLE      *<<.1726>>07919000
*           DESCSTINX WITH THE SL CODE SEGMENT ENTRY ADDRESS  *<<.1726>>07920000
*           IF THE ABSENT SEGMENT WAS A SL OR WITH THE CST    *<<.1726>>07921000
*           EXTENSION TABLE RELATIVE INDEX TO THE ABSENT      *<<.1726>>07922000
*           SEGMENT'S CST ENTRY IF THE ABSENT SEGMENT WAS A   *<<.1726>>07923000
*           PROGRAM SEGMENT.  IF THE CODE SEGMENT DOES NOT    *<<.1726>>07924000
*           EXIST, THEN SET UP AND HAVE THE USER ABORTED      *<<.1726>>07925000
*           WITH A CST VIOLATION.  IF THE CODE SEGMENT IS     *<<.1726>>07926000
*           RECOVERABLE, THEN CALL PROCEDURE RECOVEROC TO     *<<.1726>>07927000
*           TAKE IT OUT OF RECOVERY STATE, MAKE IT VALID AND  *<<.1726>>07928000
*           IF GLOBAL STATISTICS GATHERING IS ENABLED, THEN   *<<.1726>>07929000
*           BUMP THE NUMBER OF TIMES A SL OR PROGRAM CODE     *<<.1726>>07930000
*           SEGMENT WAS RECOVERED.  BUT IF THE CODE SEGMENT   *<<.1726>>07931000
*           IS ABSENT, THEN LOOP AROUND, CALLING PROCEDURE    *<<.1726>>07932000
*           QUEUEONOBJECT UNTIL THE CODE SEGMENT IS BROUGHT   *<<.1726>>07933000
*           INTO MEMORY.                                      *<<.1726>>07934000
*                                                             *<<.1726>>07935000
*           IF THE INSTRUCTION CAUSING THE CODE ABSENCE IS    *<<.1726>>07936000
*           THE EXIT INSTRUCTION, THEN FIRST CHECK TO SEE IF  *<<.1726>>07937000
*           A LEGITIMATE BOUNDS VIOLATION HAS OCCURRED        *<<.1726>>07938000
*           (ASSUMING THAT A CONTROL-Y OR A PENDING SOFT      *<<.1726>>07939000
*           INTERRUPT HAS NOT OCCURRED).  IF IT HAS, THEN     *<<.1726>>07940000
*           HAVE THE PROGRAM ABORTED WITH A BOUNDS VIOLATION. *<<.1726>>07941000
*           IF NO BOUNDS VIOLATION HAS OCCURRED, THEN BUILD   *<<.1726>>07942000
*           AND EXECUTE AN EXIT INSTRUCTION TO THE NOW        *<<.1726>>07943000
*           PRESENT CODE SEGMENT.                             *<<.1726>>07944000
*                                                             *<<.1726>>07945000
*           IF THE INSTRUCTION CAUSING THE CODE ABSENCE IS    *<<.1726>>07946000
*           A PCAL INSTRUCTION, THEN THE FOLLOWING IS DONE:   *<<.1726>>07947000
*           GET THE DST RELATIVE ADDRESS FOR THE CODE/SL      *<<.1726>>07948000
*           SEGMENT OBJECT AND GET THE TRACE BIT FROM THE     *<<.1726>>07949000
*           CST ENTRY.  POSITION TO THE LAST WORD OF THE      *<<.1726>>07950000
*           CODE SEGMENT WHICH WILL BE THE NUMBER OF STT      *<<.1726>>07951000
*           ENTRIES OF THIS CODE SEGMENT, ABORT THE PROGRAM   *<<.1726>>07952000
*           IF THE FORMAT OF THE WORD IS INCORRECT (I.E. THE  *<<.1726>>07953000
*           NUMBER OF LOCAL LABELS > THE NUMBER OF TOTAL      *<<.1726>>07954000
*           LABELS) AND USE THIS TO GET TO THE ABSENT CODE    *<<.1726>>07955000
*           SEGMENT'S STT NUMBER.  IF THE ABSENT CODE SEGMENT *<<.1726>>07956000
*           NUMBER IS TOO LARGE, IS EXTERNAL OR AN            *<<.1726>>07957000
*           UNPRIVILEDGED PROGRAM IS CALLING A PRIVILEDGED    *<<.1726>>07958000
*           ROUTINE, THEN ABORT THE PROGRAM WITH A STT        *<<.1726>>07959000
*           VIOLATION.  CORRECT THE GARBAGED P REGISTER VALUE *<<.1726>>07960000
*           IN THE CURRENT STACK MARKER AND ABORT THE PROGRAM *<<.1726>>07961000
*           WITH A STT VIOLATION IF THE P REGISTER IS OUT OF  *<<.1726>>07962000
*           BOUNDS.  IF THIS PROGRAM IS BEING TRACED, THEN    *<<.1726>>07963000
*           CALL THE TRACE ROUTINE IF IT IS PRESENT           *<<.1726>>07964000
*           (OTHERWISE ABORT THE PROGRAM WITH A BAD STACK     *<<.1726>>07965000
*           MARKER VIOLATION).  RESTORE DB AND EXIT TO THE    *<<.1726>>07966000
*           SPECIFIED PROCEDURE IN THE FORMALLY ABSENT CODE   *<<.1726>>07967000
*           SEGMENT.                                          *<<.1726>>07968000
*                                                             *<<.1726>>07969000
* ENTRY:    X=INSTRUCTION WHICH CAUSED CODE ABSENCE TRAP--    *<<.1726>>07970000
*             SHOULD BE A PCAL, EXIT, IXIT OR DISP            *<<.1726>>07971000
*             INSTRUCTION.                                    *<<.1726>>07972000
*                                                             *<<.1726>>07973000
*           STACK MARKER FORMAT IF CODE ABSENCE TRAP WAS DUE  *<<.1726>>07974000
*           TO A PCAL TO AN ABSENCE CODE SEGMENT:             *<<.1726>>07975000
*                                                             *<<.1726>>07976000
*               |----------|                                  *<<.1726>>07977000
*            - 7|          |X            NORMAL STACK MARKER  *<<.1726>>07978000
*               |----------|                                  *<<.1726>>07979000
*            - 6|          |P                                 *<<.1726>>07980000
*               |----------|                                  *<<.1726>>07981000
*            - 5|          |PCALSTATUS                        *<<.1726>>07982000
*               |----------|                                  *<<.1726>>07983000
*            - 4|          |Q                                 *<<.1726>>07984000
*           ----|----------|----------------------------      *<<.1726>>07985000
*            - 3|          |X            INCOMPLETE STACK     *<<.1726>>07986000
*               |----------|             LAID DOWN BY         *<<.1726>>07987000
*            - 2| GARBAGED |P            FIRMWARE--THIS WILL  *<<.1726>>07988000
*               |----------|             FIXED UP BY THIS     *<<.1726>>07989000
*            - 1|ABSENT SEG|STATUS       PROCEDURE            *<<.1726>>07990000
*               |----------|                                  *<<.1726>>07991000
*           Q+ 0|         4|Q                                 *<<.1726>>07992000
*               |----------|                                  *<<.1726>>07993000
*            + 1|SEE BELOW |FIRMWAREPARM                      *<<.1726>>07994000
*               |----------|                                  *<<.1726>>07995000
*                                                             *<<.1726>>07996000
*             IF THE INSTRUCTION CAUSING THE CODE ABSENCE IS  *<<.1726>>07997000
*             A PCAL, THEN FIRMWAREPARM CONTAINS THE ABSENT   *<<.1726>>07998000
*             CST SEGMENT NUMBER IN BITS 1-8                  *<<.1726>>07999000
*                                                             *<<.1726>>08000000
*                                                             *<<.1726>>08001000
*           STACK MARKER FORMAT IF CODE ABSENCE TRAP WAS DUE  *<<.1726>>08002000
*           TO AN EXIT TO AN ABSENCE CODE SEGMENT:            *<<.1726>>08003000
*                                                             *<<.1726>>08004000
*               |----------|                                  *<<.1726>>08005000
*            - 3|          |X                                 *<<.1726>>08006000
*               |----------|                                  *<<.1726>>08007000
*            - 2|          |P                                 *<<.1726>>08008000
*               |----------|                                  *<<.1726>>08009000
*            - 1|          |S                                 *<<.1726>>08010000
*               |----------|                                  *<<.1726>>08011000
*           Q- 0|          |Q                                 *<<.1726>>08012000
*               |----------|                                  *<<.1726>>08013000
*            + 1|SEE BELOW |FIRMWAREPARM                      *<<.1726>>08014000
*               |----------|                                  *<<.1726>>08015000
*                                                             *<<.1726>>08016000
*             IF THE INSTRUCTION CAUSING THE CODE ABSENCE IS  *<<.1726>>08017000
*             AN EXIT, THEN FIRMWAREPARM CONTAINS THE NUMBER  *<<.1726>>08018000
*             OF PARAMETERS TO DELETE OFF THE STACK           *<<.1726>>08019000
*                                                             *<<.1726>>08020000
**END_IS*******************************************************<<.1726>>08021000
;                                                              <<.1726>>08022000
BEGIN                                                          <<.1726>>08023000
                                                               <<.1726>>08024000
INTEGER                                                        <<.1726>>08025000
  S0          =S-0,                                            <<.1726>>08026000
  S1          =S-1,                                            <<.1726>>08027000
  PCALSTATUS  =Q-5,                                            <<.1726>>08028000
  STATUS      =Q-1,                                            <<.1726>>08029000
  FIRMWAREPARM=Q+1;  !PARAMETER VALUE FROM MICROCODE           <<.1726>>08030000
                                                               <<.1726>>08031000
LOGICAL                                                        <<.1726>>08032000
  INSTR       =Q+2,  !INSTRUCTION CAUSING THE ABSENCE VIOLATION<<.1726>>08033000
  PCALFLAG    =Q+3;  !INSTRUCTION-WAS-A-PCAL-INSTRUCTION FLAG  <<.1726>>08034000
                                                               <<.1726>>08035000
DOUBLE SAVEDB =Q+4;  !HOLDS DB BANK/BASE ADDRESS               <<.1726>>08036000
                                                               <<.1726>>08037000
INTEGER                                                        <<.1726>>08038000
  PROCINX     =Q+6,  !HOLDS PIN OF CURRENT PROCESS             <<.1726>>08039000
  CSTXEIX     =Q+7,  !HOLDS CST BLOCK-REL ADDRESS              <<.1726>>08040000
  DESCSTINX   =Q+8;  !HOLDS CST EXTENSION-REL ADDR TO CST LIST <<.1726>>08041000
                                                               <<.1726>>08042000
DOUBLE OBJID  =Q+9;  !DOUBLE WORD OBJECT                       <<.1726>>08043000
LOGICAL ARRAY OBJECTIDENT(*)=OBJID;                            <<.1726>>08044000
                                                               <<.1726>>08045000
LOGICAL TRACE=Q+11;  !                                         <<.1726>>08046000
$PAGE "SUBROUTINE ABORT'PROC OF CODEABSENCE"                   <<.1726>>08179000
COMMENT                                                        <<.1726>>08191100
..BEGIN_IS.....................................................<<.1726>>08191200
.                                                             .<<.1726>>08191300
. SUBROUTINE ABORT'PROC(MODE,CODE,ABORT'PARM)                 .<<.1726>>08191400
.                                                             .<<.1726>>08191500
. PURPOSE:   ABORT'PROC IS A LOCAL SUBROUTINE CALLED BY       .<<.1726>>08191600
.            CODEABSENCE TO SET UP THE CALLING SEQUENCE TO    .<<.1726>>08191700
.            HAVE A PROCESS ABORTED.                          .<<.1726>>08191800
.                                                             .<<.1726>>08191900
.            IT PLACES THE INSTRUCTION IN THE X REGISTER AND  .<<.1726>>08192000
.            CALLS PROCEDURE ABORT AFTER SETTING UP THE       .<<.1726>>08192100
.            PARAMETERS.                                      .<<.1726>>08192200
.                                                             .<<.1726>>08192300
. ENTRY:     MODE      =0 IF PROCESS IS TO BE ABORTED WITH AN .<<.1726>>08192400
.                         INTERNAL INTERRUPT, HARDWARE OR     .<<.1726>>08192500
.                         SIMULATED                           .<<.1726>>08192600
.                                                             .<<.1726>>08192700
.            CODE      =TYPE OF INTERNAL INTERRUPT            .<<.1726>>08192800
.                         IF MODE=0 THEN                      .<<.1726>>08192900
.                           CODE =17 IF STT UNCALLABLE        .<<.1726>>08193000
.                                =22 IF BAD STACK MARKER      .<<.1726>>08193100
.                                =24 IF BOUNDS VIOLATION      .<<.1726>>08193200
.                                =30 IF CST VIOLATION         .<<.1726>>08193300
.                                =31 IF STT VIOLATION         .<<.1726>>08193400
.                                                             .<<.1726>>08193500
.            ABORT'PARM=USER SUPPLIED QUIT NUMBER             .<<.1726>>08193600
.                                                             .<<.1726>>08193700
..END_IS.......................................................<<.1726>>08193800
;                                                              <<.1726>>08193900
$EDIT VOID=08210000                                            <<.1726>>08200000
$EDIT                                                          <<.1726>>08220000
$EDIT                                                          <<.1726>>08240000
$PAGE "PROCEDURE CODEABSENCE"                                  <<.1726>>08240100
COMMENT*****                                                   <<.1726>>08240200
* MAINLINE *                                                   <<.1726>>08240300
***********;                                                   <<.1726>>08240400
$EDIT                                                          <<.1726>>08340000
$EDIT VOID=08425000                                            <<.1726>>08370000
COMMENT***************************                             <<.1726>>08426000
* SET UP CODEABSENCE'S VARIABLES *                             <<.1726>>08427000
*********************************;                             <<.1726>>08428000
!  SET PCALFLAG WITH WHETHER A PCAL WAS EXECUTED OR NOT        <<.1726>>08431000
!  ----------------------------------------------------        <<.1726>>08432000
$EDIT                                                          <<.1726>>08445000
                                                               <<.1726>>08446000
!  SET P JUST WITH ITS LOGICAL MAPPING FLAG                    <<.1726>>08447000
!  ----------------------------------------                    <<.1726>>08448000
                                                               <<.1726>>08486000
!  SET UP VARIABLE SAVEDB                                      <<.1726>>08487000
!  ----------------------                                      <<.1726>>08488000
                                                               <<.1726>>08501000
!  SET UP VARIABLE PROCINX, CSTXEIX                            <<.1726>>08502000
!  --------------------------------                            <<.1726>>08503000
                                                               <<.1726>>08511000
!  MAP DB TO SYSDB                                             <<.1726>>08512000
!  ---------------                                             <<.1726>>08513000
                                                               <<.1726>>08521000
!  SET UP STACK FOR VARIABLE DESCSTINX                         <<.1726>>08522000
!  -----------------------------------                         <<.1726>>08523000
                                                               <<.1726>>08526000
!  GO DETERMINE CODE SEGMENT NUMBER AND SUDDENDEATH IF NONE    <<.1726>>08527000
!  --------------------------------------------------------    <<.1726>>08528000
                                                               <<.1726>>08551000
!  SET UP DESCSTINX WITH INDEX TO THE CODE SEGMENT ENTRY       <<.1726>>08552000
!  -----------------------------------------------------       <<.1726>>08553000
                                                               <<.1726>>08591000
!  IF NON-EXISTING CODE SEGMENT, THEN ABORT THE PROCESS        <<.1726>>08592000
!  ----------------------------------------------------        <<.1726>>08593000
                                                               <<.1726>>08616000
!  IF CODE SEGMENT IS RECOVERABLE, THEN RECOVER IT             <<.1726>>08617000
!  -----------------------------------------------             <<.1726>>08618000
                                                               <<.1726>>08631000
!  IF GETTING GLOBAL STATS, BUMP # SL, PGM RECOVERY COUNTER    <<.1726>>08632000
!  --------------------------------------------------------    <<.1726>>08633000
                                                               <<.1726>>08686000
!  IF CODE SEG IS ABSENT, GO BRING IT IN & GET ITS CSTX ADDR   <<.1726>>08687000
!  ---------------------------------------------------------   <<.1726>>08688000
$EDIT VOID=08735000                                            <<.1726>>08730000
$EDIT                                                          <<.1726>>08775000
                                                               <<.1726>>08781000
COMMENT*****************************                           <<.1726>>08782000
* SETUP AND RETRY EXIT INSTRUCTION *                           <<.1726>>08783000
***********************************;                           <<.1726>>08784000
$EDIT VOID=08825000                                            <<.1726>>08795000
!  ABORT WITH BOUNDS VIOLATION IF BAD P ADDR&PENDING CONTROL-Y <<.1726>>08831000
!  ----------------------------------------------------------- <<.1726>>08832000
                                                               <<.1726>>08876000
!  BUILD AND EXECUTE THE CODE-ABSENCE-TRAP-CAUSING EXIT        <<.1726>>08877000
!  ----------------------------------------------------        <<.1726>>08878000
                                                               <<.1726>>08906000
COMMENT*****************************                           <<.1726>>08907000
* SETUP AND RETRY PCAL INSTRUCTION *                           <<.1726>>08908000
***********************************;                           <<.1726>>08909000
                                                               <<.1726>>08916000
!  SET TRACE WITH TRACE FLAG FROM OBJECT'S CST ENTRY           <<.1726>>08917000
!  -------------------------------------------------           <<.1726>>08918000
                                                               <<.1726>>08926000
!  TOS=NUMBER OF STTs OF CODE SEGMENT                          <<.1726>>08927000
!  ----------------------------------                          <<.1726>>08928000
$EDIT VOID=09070000                                            <<.1726>>08950000
                                                               <<.1726>>08951000
!  S1=LAST STT NUMBER, S0=ABSENT CST SEGMENT NUMBER            <<.1726>>08952000
!  ------------------------------------------------            <<.1726>>08953000
   IF MAPPINGFIRMWARE THEN                                     <<.1726>>08954000
      BEGIN                                                    <<.1726>>08955000
                                                               <<.1726>>08956000
!     ABORT IF NUMBER OF LOCAL LABELS>NUMBER OF TOTAL LABELS   <<.1726>>08957000
!     ------------------------------------------------------   <<.1726>>08958000
      IF S0.(0:8) > S0.(8:8) THEN GOTO BADSTT;                 <<.1726>>08959000
      TOS:=TOS.(0:8);                                          <<.1726>>08960000
      END                                                      <<.1726>>08961000
   ELSE TOS:=TOS.(8:8);                                        <<.1726>>08962000
                                                               <<.1726>>08963000
   TOS:=FIRMWAREPARM.(1:7);  !TOS=TARGET STT                   <<.1726>>08964000
                                                               <<.1726>>08965000
!  ABORT WITH STT VIOLATION IF STT NUMBER TOO LARGE            <<.1726>>08966000
!  ------------------------------------------------            <<.1726>>08967000
   IF S0 > S1 THEN GOTO BADSTT;                                <<.1726>>08968000
                                                               <<.1726>>08969000
!  TOS=STT ENTRY                                               <<.1726>>08970000
!  -------------                                               <<.1726>>08971000
   ASMB(DELB,LSUB);                                            <<.1726>>08972000
   ASMB(LSEA);                                                 <<.1726>>08973000
                                                               <<.1726>>08974000
!  ABORT WITH STT VIOLATION IF EXTERNAL STT                    <<.1726>>08975000
!  ----------------------------------------                    <<.1726>>08976000
   IF < THEN GOTO BADSTT;                                      <<.1726>>08977000
                                                               <<.1726>>08978000
!  ABORT WITH UNCALLABLE VIOLATION IF CALLER NOT PRIVILEDGED   <<.1726>>08979000
!  ---------------------------------------------------------   <<.1726>>08980000
$EDIT VOID=09180000                                            <<.1726>>09140000
                                                               <<.1726>>09141000
!  BUILD P ADDRESS                                             <<.1726>>09142000
!  ---------------                                             <<.1726>>09143000
   P:=TOS LAND %37777 LOR LOGICAL(P);                          <<.1726>>09144000
   IF P.(2:14) > DST(DESCSTINX).CODESIZEFIELD&LSL(2) THEN      <<.1726>>09145000
      BEGIN                                                    <<.1726>>09146000
                                                               <<.1726>>09147000
!  ABORT USER IF STT IS NOT VALID                              <<.1726>>09148000
!  ------------------------------                              <<.1726>>09149000
BADSTT:                                                        <<.1726>>09150000
      TOS:=SAVEDB;                                             <<.1726>>09151000
      ASMB(XCHD);          !MAP DB BACK TO ORIGINAL DB VALUE   <<.1726>>09152000
      PENABLE;                                                 <<.1726>>09153000
      ABORT'PROC(0,31,0);  !ABORT USER WITH STT VIOLATION      <<.1726>>09154000
      RETURN;                                                  <<.1726>>09155000
      END;                                                     <<.1726>>09156000
                                                               <<.1726>>09157000
!  CHECK IF CODE SEGMENT IS BEING TRACED                       <<.1726>>09186000
!  -------------------------------------                       <<.1726>>09187000
                                                               <<.1726>>09196000
!     CALL TRACE ROUTINE IF PRESENT                            <<.1726>>09197000
!     -----------------------------                            <<.1726>>09198000
                                                               <<.1726>>09226000
!     ABORT WITH "BAD STACK MARKER" IF NO TRACE ROUTINE        <<.1726>>09227000
!     -------------------------------------------------        <<.1726>>09228000
                                                               <<.1726>>09256000
!  RESTORE DB AND RETURN                                       <<.1726>>09257000
!  ---------------------                                       <<.1726>>09258000
$PAGE "TRACE TRAP INTERNAL INTERRUPT"                          <<.2287>>09284000
$PAGE                                                          <<.2287>>09635000
$PAGE                                                          <<.2287>>09831000
$PAGE                                                          <<.2287>>09971000
$PAGE "STT UNCALLABLE INTERNAL INTERRUPT"                      <<.2287>>10140000
COMMENT                                                        <<.2136>>10151100
**BEGIN_IS********************************************04/25/86*<<.2136>>10151200
*                                                             *<<.2136>>10151300
* PROCEDURE STTUNCALLABLE                                     *<<.2136>>10151400
*                                                             *<<.2136>>10151500
* PURPOSE:  STTUNCALLABLE IS A PROCEDURE CALLED TO PROCESS    *<<.2136>>10151600
*           A NON-ICS STT UNCALLABLE INTERNAL INTERRUPT       *<<.2136>>10151700
*           (STT %41).  THE UNCALLABLE BIT IN THE LOCAL LABEL *<<.2136>>10151800
*           (OR IN PL IF THE STT NUMBER IS 0) IS SET TO 1.    *<<.2136>>10151900
*           THIS LABEL IS REFERENCED BY A PCAL FROM ANOTHER   *<<.2136>>10152000
*           SEGMENT.  THIS TRAP DOES NOT STACK A NEW MARKER.  *<<.2136>>10152100
*                                                             *<<.2136>>10152200
*           IF A STT UNCALLABLE VIOLATION HAS OCCURRED, THEN  *<<.2136>>10152300
*           CALL PROCEDURE ABORT TO ABORT THE CURRENT PROCESS *<<.2136>>10152400
*           WITH A STT UNCALLABLE VIOLATION.                  *<<.2136>>10152500
*                                                             *<<.2136>>10152600
* ENTRY:    X=INSTRUCTION WHICH CAUSED THE INTERNAL INTERRUPT *<<.2136>>10152700
*                                                             *<<.2136>>10152800
**END_IS*******************************************************<<.2136>>10152900
;                                                              <<.2136>>10153000
$PAGE "DATA ABSENCE INTERNAL INTERRUPT"                        <<.2287>>10185000
$PAGE "POWER ON INTERNAL INTERRUPT"                            <<.2287>>10575000
$EDIT VOID=11195000                                            <<.2316>>10590000
COMMENT                                                        <<.2316>>10591000
**BEGIN_IS********************************************07/15/86*<<.2316>>10592000
*                                                             *<<.2316>>10593000
* PROCEDURE POWERON                                           *<<.2316>>10594000
*                                                             *<<.2316>>10595000
* PURPOSE:  POWERON IS A PROCEDURE CALLED TO PROCESS AN ICS   *<<.2316>>10596000
*           POWER ON INTERNAL INTERRUPT (STT %43).  THIS      *<<.2316>>10597000
*           ROUTINE IS ENTERED EITHER BY AN INTERNAL POWER    *<<.2316>>10598000
*           TURN-ON OR BY AN AUTOMATIC RESTART FOLLOWING A    *<<.2316>>10599000
*           POWER FAILURE WHEN AUTOMATIC RESTART IS ENABLED   *<<.2316>>10600000
*           BY A PANEL SWITCH (THE COMPUTER WILL HALT ON      *<<.2316>>10601000
*           RESTORATION OF POWER IF AUTOMATIC RESTART IS      *<<.2316>>10602000
*           DISABLED).  ASSUMING THAT AUTOMATIC RESTART IS    *<<.2316>>10603000
*           ENABLED, THE POWER ON ROUTINE WILL SET UP THE     *<<.2316>>10604000
*           SOFTWARE ENVIRONMENT AND PASS CONTROL TO THE      *<<.2316>>10605000
*           OPERATING SYSTEM.                                 *<<.2316>>10606000
*                                                             *<<.2316>>10607000
* ENTRY:                                                      *<<.2316>>10608000
*                                                             *<<.2316>>10609000
*                                                  :  :       *<<.2316>>10610000
*                                                |------|     *<<.2316>>10611000
*                                                |     X|     *<<.2316>>10612000
*                                                |------|     *<<.2316>>10613000
*                                                |USER P|     *<<.2316>>10614000
*                                                |------|     *<<.2316>>10615000
*                                                |STATUS|     *<<.2316>>10616000
*                                                |------|     *<<.2316>>10617000
*                                            Q+ 0|     Q|     *<<.2316>>10618000
*                                                |------|     *<<.2316>>10619000
*                                                |------|     *<<.2316>>10620000
*                                             + 2|DBBASE|     *<<.2316>>10621000
*                                                |------|     *<<.2316>>10622000
*           MICROCODE STARTS S REG HERE -->   + 3|PARAM | [1] *<<.2316>>10623000
*                                                |------|     *<<.2316>>10624000
*           # OF WORDS TO THIS BLOCK END      + 4|ADDS #| [2] *<<.2316>>10625000
*                                                |------|     *<<.2316>>10626000
*                                             + 5|LR    |     *<<.2316>>10627000
*                                                |------|     *<<.2316>>10628000
*                                                |      |     *<<.2316>>10629000
*                                                |------|     *<<.2316>>10630000
*                                             + 7|ABS QI|     *<<.2316>>10631000
*                                                |------|     *<<.2316>>10632000
*           CST ENTRY #2 (SEGUTIL) WORD 0     + 8|CST2-0|     *<<.2316>>10633000
*                                                |------|     *<<.2316>>10634000
*            "    "    "     "       "  1     + 9|CST2-1|     *<<.2316>>10635000
*                                                |------|     *<<.2316>>10636000
*            "    "    "     "       "  2     +10|CST2-2|     *<<.2316>>10637000
*                                                |------|     *<<.2316>>10638000
*            "    "    "     "       "  3     +11|CST2-3|     *<<.2316>>10639000
*                                                |------|     *<<.2316>>10640000
*           S REGISTER VALUE                  +12|QI-6  |     *<<.2316>>10641000
*                                                |------|     *<<.2316>>10642000
*           ORIGINAL PARAM VALUE              +13|QI+3  |     *<<.2316>>10643000
*                                                |------|     *<<.2316>>10644000
*                                             +14|QI+4  |     *<<.2316>>10645000
*                                                |------|     *<<.2316>>10646000
*                                             +15|PUSH S|     *<<.2316>>10647000
*                                                |------|     *<<.2316>>10648000
*                                             +16|PUSH Q|     *<<.2316>>10649000
*                                                |------|     *<<.2316>>10650000
*                                             +17|PUSHDL| [3] *<<.2316>>10651000
*                                                |------|     *<<.2316>>10652000
*                                                             *<<.2316>>10653000
**END_IS*******************************************************<<.2316>>10654000
;                                                              <<.2316>>10655000
BEGIN                                                          <<.2316>>11100000
                                                               <<.2316>>11101000
ENTRY                                                          <<.2316>>11102000
  MMPOWERFAIL;                                                 <<.2316>>11103000
                                                               <<.2316>>11104000
EQUATE                                                         <<.2316>>11105000
  CSTB         =0,      !CST ADDRESS FOUND IN FIXED LOW MEMORY <<.2316>>11106000
  COMPWAIT     =%13,    !WAITING-FOR-COMPLETION DRIVER STATE   <<.2316>>11107000
                                                               <<.2316>>11108000
  DLINK        =1,      !LINK THREAD OFFSET WITHIN DIT         <<.2316>>11109000
  DILTP        =5,      !ILT ENTRY OFFSET WITHIN DIT           <<.2316>>11110000
  DSTAT        =6,      !STATUS WORD WITHIN DIT                <<.2316>>11111000
                                                               <<.2316>>11112000
  ICNTRL       =7,      !CONTROLLER INFO WORD OF ILT           <<.2316>>11113000
  IFLAG        =13,     !FLAG WORD OF ILT                      <<.2316>>11114000
                                                               <<.2316>>11115000
  PFPROC       =%144,   !POWERFAIL PIN WITHIN SYSDB            <<.2316>>11116000
  POWERFAIL    =%72,    !POWERFAIL WORD WITHIN SYSDB           <<.2316>>11117000
  SCSR         =%26,    !SYSTEM CLOCK'S STATUS WORD            <<.2316>>11118000
  TEMPLR       =%22,    !TEMPORARY STORAGE OF LIMIT REGISTER   <<.2316>>11119000
  IFLAGMASKWORD=%100177;!ILT FLAG WORD MASK                    <<.2316>>11120000
                                                               <<.2316>>11121000
DEFINE                                                         <<.2316>>11122000
  CHANQ    =(1:6)#,  !CHANNEL QUEUE NUMBER IN ILT              <<.2316>>11123000
  DRTNUMBER=(7:9)#,  !DRT NUMBER IN ILT                        <<.2316>>11124000
  IMB'NUM  =(7:2)#,  !IMB NUMBER IN DRT                        <<.2316>>11125000
  CHAN'NUM =(9:4)#,  !CHANNEL NUMBER IN DRT                    <<.2316>>11126000
                                                               <<.2316>>11127000
  RIOA     =CON %20302;CON %13#, <<FOR ICF55>>                 <<.2316>>11128000
  MCMD     =ASSEMBLE(CON %20104;CON 4)#,                       <<.2316>>11129000
  PFL      =CON %20104;CON %21#,                               <<.2316>>11130000
                                                               <<.2316>>11131000
! DIT FLAG WORD DEFINTION                                      <<.2316>>11132000
! -----------------------                                      <<.2316>>11133000
  TRM      =(0:1)#,  !DEVICE-IS-A-TERMINAL FLAG BIT            <<.2316>>11134000
  REQUEST  =(3:1)#,  !SERVICE-REQUESTED FLAG BIT               <<.2316>>11135000
  IAK      =(8:1)#,  !INTERRUPT-OR-RESPONSE HAS OCCURRED       <<.2316>>11136000
  STATEF   =(12:4)#; !DRIVER STATE FIELD                       <<.2316>>11137000
                                                               <<.2316>>11138000
INTEGER                                                        <<.2316>>11139000
                                                               <<.2316>>11140000
! SYSDB ASSIGNMENTS                                            <<.2316>>11141000
! -----------------                                            <<.2316>>11142000
  PF         =DB+POWERFAIL,  !POWER FAIL TYPE WORD             <<.2316>>11143000
!            =0 IF NO POWER FAILURE OR PFAIL PROCESSING IS COMP<<.2316>>11144000
!            =1 IF IN THE POWER DOWN (POWERFAIL) CODE IN ININ  <<.2316>>11145000
!            =2 IF IN THE POWER UP (POWERON) CODE IN ININ      <<.2316>>11146000
!            =3 IF IN THE AWAKENING OF THE PFAIL PROCESS       <<.2316>>11147000
!            =4 IF THE POWER ON MESSAGE HAS APPEARED ON THE CON<<.2316>>11148000
                                                               <<.2316>>11149000
  PFAILPIN   =DB+PFPROC,  !POWER FAIL PIN                      <<.2316>>11150000
  MAXDRT     =DB+%71,     !MAXIMUM NUMBER OF DRT ENTRIES       <<.2316>>11151000
  SYSUP      =DB+%73,     !SYSTEM-IS-UP FLAG                   <<.2316>>11152000
                                                               <<.2316>>11153000
  S1         =S-1,                                             <<.2316>>11154000
  S0         =S-0,                                             <<.2316>>11155000
  I          =Q+6,  !INDEX/SUBSCRIPT VARIABLE                  <<.2316>>11156000
  ABSQI      =Q+7,  !HOLDS THE ADDRESS OF ICS'S QI             <<.2316>>11157000
  LDEV       =Q+8,  !HOLDS LDEV                                <<.2316>>11158000
  IMB        =Q+9,  !HOLDS IMB NUMBER FROM DRT                 <<.2316>>11159000
  CHANNL     =Q+10, !HOLDS CHANNEL NUMBER FROM DRT             <<.2316>>11160000
  CPUNUM     =Q+11, !HOLDS CPU NUMBER OF THIS SYSTEM           <<.2316>>11161000
  NRIMB      =Q+12, !HOLDS NUMBER OF IMBS OR TEMP COUNTER      <<.2316>>11162000
  LPDT'INDEX =Q+13; !HOLDS ENTRY ADDRESS WITHIN LPDT           <<.2316>>11163000
ARRAY                                                          <<.2316>>11164000
  TEMPMASK(*)=Q+14; !HOLDS IMB INTERRUPT MASK WORD             <<.2316>>11165000
                                                               <<.2316>>11166000
INTEGER POINTER                                                <<.2316>>11167000
  MEASINFOTABPTR=%261,    <<FOR CLOCK INTERFACE>>              <<.2316>>11168000
  BUSY          =DB+%55,  !BUSY TABLE POINTER                  <<.2316>>11169000
  PS1           =S-1,                                          <<.2316>>11170000
  PS0           =S-0;                                          <<.2316>>11171000
$PAGE "POWER ON INTERNAL INTERRUPT"                            <<.2316>>11200000
COMMENT************************                                <<.2316>>11201100
* NORMAL POWER ON ENTRY POINT *                                <<.2316>>11201200
******************************;                                <<.2316>>11201300
                                                               <<.2316>>11201400
!  POSITION S AFTER INFO BLOCK RETURNED BY UCODE               <<.2316>>11201500
!  ---------------------------------------------               <<.2316>>11201600
                                                               <<.2316>>11206000
!  SET DB TO SYSDB, RESTORE DL,Q & S REGISTERS                 <<.2316>>11207000
!  -------------------------------------------                 <<.2316>>11208000
                                                               <<.2316>>11221000
!  RESTORE ICS VALUES                                          <<.2316>>11222000
!  ------------------                                          <<.2316>>11223000
$EDIT VOID=11245000                                            <<.2316>>11240000
!  RESTORE CST ENTRY #2 (SEGUTIL)                              <<.2316>>11251000
!  ------------------------------                              <<.2316>>11252000
                                                               <<.2316>>11281000
!  MOVE S DOWN TO PROTECT VARIABLES Q+8--Q+17                  <<.2316>>11282000
!  ------------------------------------------                  <<.2316>>11283000
$EDIT VOID=11305000                                            <<.2316>>11290000
                                                               <<.2316>>11291000
!  IF SERIESS 44, CORRECT BANK WORD BY MASKING                 <<.2316>>11292000
!  -------------------------------------------                 <<.2316>>11293000
   IF TOS=SERIES44 THEN                                        <<.2136>>11315000
$EDIT VOID=11460000                                            <<.2136>>11345000
COMMENT*************************************                   <<.2316>>11466100
* MIGHTY MOUSE FAMILY POWER ON ENTRY POINT *                   <<.2316>>11466200
*******************************************;                   <<.2316>>11466300
                                                               <<.2316>>11466400
!  MOVE S PAST INFO BLOCK & SET UP ADDR OF ICS' QI             <<.2316>>11466500
!  -----------------------------------------------             <<.2316>>11466600
$EDIT VOID=11590320                                            <<.2316>>11590000
                                                               <<u1717>>11590330
   IF SERIES'70'UCODE THEN ASSEMBLE(CON %020104, %16);         <<u1717>>11590340
                                                               <<u1717>>11590350
!  INDICATE THAT CONTROL IS IN POWERON OF ININ                 <<.2316>>11590360
!  -------------------------------------------                 <<.2316>>11590370
!  SAVE CPU NUMBER OF THIS SYSTEM                              <<.2316>>11711000
!  ------------------------------                              <<.2316>>11712000
COMMENT******************************************************* <<.2316>>11726100
* UPDATE ARRAY TEMPMASK WITH ROLL CALL FOR EACH EXISTING IMB * <<.2316>>11726200
*************************************************************; <<.2316>>11726300
                                                               <<.2316>>11726400
!  DETERMINE HOW MANY IMBs A SYSTEM CAN HAVE                   <<.2316>>11726500
!  -----------------------------------------                   <<.2316>>11726600
IF CPUNUM=SERIES64 OR (MMFMSTART<=CPUNUM<=MMFMEND)             <<.2136>>11730000
   THEN                                                        <<.2136>>11731000
$EDIT VOID=11790000                                            <<.2316>>11785000
                                                               <<.2316>>11786000
!  DETERMINE HOW MANY IMBs THIS SYSTEM HAS                     <<.2316>>11787000
!  ---------------------------------------                     <<.2316>>11788000
                                                               <<.2316>>11801000
!  BUILD A MASK WORD FOR EACH IMB IN ARRAY TEMPMASK            <<.2316>>11802000
!  ------------------------------------------------            <<.2316>>11803000
$EDIT VOID=11845000                                            <<.2316>>11830000
!  LOOP THRU EACH EXISTING IMB AND DO A ROLL CALL              <<.2316>>11851000
!  ----------------------------------------------              <<.2316>>11852000
      IF CPUNUM=SERIES64 OR (MMFMSTART<=CPUNUM LAND            <<.2178>>11875000
         CPUNUM<=MMFMEND) THEN                                 <<.2178>>11876000
$EDIT VOID=11985000                                            <<.2316>>11950000
                                                               <<.2316>>11951000
COMMENT******************************************************* <<.2316>>11952000
* STARTING FROM THE HIGHEST IMB,INITIALIZE EACH EXISTING ONE * <<.2316>>11953000
*************************************************************; <<.2316>>11954000
COMMENT*************************************                   <<.2316>>12056000
* COMPLETE ANY PROCESSING FOR REAL DEVICES *                   <<.2316>>12057000
*******************************************;                   <<.2316>>12058000
                                                               <<.2316>>12076000
!     TOS=DIT POINTER FOR THIS LDEV                            <<.2316>>12077000
!     -----------------------------                            <<.2316>>12078000
                                                               <<.2316>>12081000
!   IF NOT VIRTUAL DEV & HAS ILT PTR & HAS DIT PTR, THEN:      <<.2316>>12082000
!   -----------------------------------------------------      <<.2316>>12083000
$EDIT                                                          <<.2316>>12095000
                                                               <<.2316>>12106000
!        TOS=INTERRUPT LINKAGE TABLE POINTER                   <<.2316>>12107000
!        -----------------------------------                   <<.2316>>12108000
                                                               <<.2316>>12115000
!        IF NOT A DS DEVICE, THEN:                             <<.2316>>12116000
!        -------------------------                             <<.2316>>12117000
         IF 0<= GET'DSDEVICE(I) <=1 THEN                       <<.2316>>12118000
                                                               <<.2316>>12121000
!            UNTHREAD ANY REQUEST WAITING FOR A DEV RESOURCE   <<.2316>>12122000
!            -----------------------------------------------   <<.2316>>12123000
                                                               <<.2316>>12151000
!            CLEAR WAITPROG,IGNOREHI BITS OF ILT FLAG WORD     <<.2316>>12152000
!            ---------------------------------------------     <<.2316>>12153000
                                                               <<.2316>>12171000
!            IF DEV<>TERM & WAITING FOR COMP INTERRUPT, THEN:  <<.2316>>12172000
!            ------------------------------------------------  <<.2316>>12173000
                                                               <<.2316>>12186000
!               FLAG SERVICE REQ&INTERRUPT/RESPONSE OCCURRED   <<.2316>>12187000
!               --------------------------------------------   <<.2316>>12188000
                                                               <<.2316>>12201000
!               SET DIT STATUS AS DISC ERROR & CLEAR I/O       <<.2316>>12202000
!               ----------------------------------------       <<.2316>>12203000
COMMENT**********************                                  <<.2316>>12246100
* RESTART ALL DISC REQUESTS *                                  <<.2316>>12246200
****************************;                                  <<.2316>>12246300
                                                               <<.2316>>12246400
!  CLEAR IMB MASK WORD ARRAY                                   <<.2316>>12246500
!  -------------------------                                   <<.2316>>12246600
!  LOOP THRU ALL LOGICAL DEVICES                               <<.2316>>12266000
!  -----------------------------                               <<.2316>>12267000
                                                               <<.2316>>12276000
!  DETERMINE IF THIS DEV IS VALID AND A DISC                   <<.2316>>12277000
!  -----------------------------------------                   <<.2316>>12278000
                                                               <<.2316>>12296000
!     TOS=ENTRY ADDRESS IN DIT FOR THIS LDEV                   <<.2316>>12297000
!     --------------------------------------                   <<.2316>>12298000
$EDIT VOID=12310000                                            <<.2316>>12305000
!     IF COMPLETION INTERRUPT WAIT, SET UP TO START REQUEST    <<.2316>>12316000
!     -----------------------------------------------------    <<.2316>>12317000
                                                               <<.2316>>12321000
!     SET TOS=ENTRY ADDRESS IN DRT FOR THIS LDEV               <<.2316>>12322000
!     ------------------------------------------               <<.2316>>12323000
!     GET CHANNEL NUMBER, IMB NUMBER FROM DRT                  <<.2316>>12341000
!     ---------------------------------------                  <<.2316>>12342000
!     TURN ON CORRESPONDING CHANNEL BIT IN IMB MASK WORD       <<.2316>>12356000
!     --------------------------------------------------       <<.2316>>12357000
!     LOAD MASK ARRAY ONTO STACK                               <<.2316>>12381000
!     --------------------------                               <<.2316>>12382000
!     SEND MASK WORDS TO DEVICE CONTROLLER                     <<.2316>>12401000
!     ------------------------------------                     <<.2316>>12402000
!     IF NOT WAITING FOR DEVICE CONTROLLER, AWAKE I/O PROCESS  <<.2316>>12411000
!     -------------------------------------------------------  <<.2316>>12412000
$EDIT                                                          <<.2316>>12450000
!  GO CHECK FOR LYNX TERMINAL CODE                             <<.2316>>12456000
!  -------------------------------                             <<.2316>>12457000
$EDIT VOID=12480000                                            <<.2316>>12465000
                                                               <<.2316>>12466000
!  CLEAR MEMORY FOR MEMLOG PROCESS                             <<.2316>>12467000
!  -------------------------------                             <<.2316>>12468000
   IF CPUNUM=SERIES64 THEN BEGIN                               <<.2316>>12469000
$EDIT VOID=12500000                                            <<.2316>>12485000
      ASSEMBLE(DUP);                                           <<.2316>>12515000
                                                               <<.2316>>12551000
!  SET UP ICS' PFAIL PCB & WAKE UP PFAIL PROCESS               <<.2316>>12552000
!  ---------------------------------------------               <<.2316>>12553000
                                                               <<.2316>>12561000
!  SET UP TIMER FLAG & INDICATE AWAKENING OF PFAIL PROCESS     <<.2316>>12562000
!  -------------------------------------------------------     <<.2316>>12563000
                                                               <<.2316>>12571000
COMMENT****************                                        <<.2316>>12586100
* UPDATE SYSTEM CLOCK *                                        <<.2316>>12586200
**********************;                                        <<.2316>>12586300
                                                               <<.2316>>12586400
!  INITIALIZE SYSTEM CLOCK'S STATUS WORD                       <<.2316>>12586500
!  -------------------------------------                       <<.2316>>12586600
                                                               <<.2316>>12591000
!  UPDATE SYSTEM CLOCK LIMIT WITH INTERRUPT LEVEL              <<.2316>>12592000
!  ----------------------------------------------              <<.2316>>12593000
   IF CPUNUM=SERIES33 THEN                                     <<.2136>>12595000
   IF CPUNUM=SERIES44 OR CPUNUM=SERIES64 THEN                  <<.2136>>12645000
                                                               <<.2316>>12681000
!  TURN HARDWARE TIMER ON, SET SYSTEM CLOCK INTERRUPT          <<.2316>>12682000
!  --------------------------------------------------          <<.2316>>12683000
                                                               <<.2316>>12686000
!  FLAG THAT POWER FAILURE MESSAGE OUTPUTTED & IXIT            <<.2316>>12687000
!  ------------------------------------------------            <<.2316>>12688000
$PAGE "CALL HELP INTERNAL INTERRUPT"                           <<.2287>>12705000
$PAGE "ININ OUTER BLOCK"                                       <<.2287>>12780000
