         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
$INCLUDE INCLICS                                               <<02036>>00252000
EQUATE ICSIX = 7;                                              <<02036>>00258000
                                                               <<02036>>00259000
   ICS  = ICSIX,                                               <<02036>>00262000
                                                               <<M9890>>00416000
PROCEDURE STORE'IOQ(IOQP,FLAG);                                <<M9890>>00416100
  VALUE    IOQP, FLAG;                                         <<M9890>>00416200
  INTEGER  IOQP;                                               <<M9890>>00416300
  LOGICAL  FLAG;                                               <<M9890>>00416400
  OPTION   EXTERNAL;                                           <<M9890>>00416500
                                                               <<M9890>>00416600
$edit                                                          <<01747>>03850000
<< Don't get a disc request unless it's necessary >>           <<01747>>04010000
$edit void=04075000                                            <<01747>>04015000
                                                               <<01747>>04856000
<< Return disc request if one was allocated >>                 <<01747>>04857000
ASMB(TEST);                                                    <<01747>>04858000
if <> then                                                     <<01747>>04859000
  begin                                                        <<01747>>04859100
  << Go to SYSDB >>                                            <<01747>>04860000
  tos := %1000 D;                                              <<01747>>04865000
  EXCHDB;                                                      <<01747>>04870000
  ASMB(ddel);                                                  <<01747>>04875000
  RETURNDISCREQ(*);                                            <<01747>>04880000
  << Go back to CDT >>                                         <<01747>>04885000
  CDT'ABS'ON'TOS;                                              <<01747>>04890000
  EXCHDB;                                                      <<01747>>04895000
  ASMB(ddel);                                                  <<01747>>04900000
  end;                                                         <<01747>>04901000
<< EQUATE C'IMPEDECACHE  = 74 ;  >>                            <<02037>>06635000
                                                                        06901000
<<THE COUNTER CP'SEGCONTRACT IS CHANGED TO CP'STOPCACHEFAULT,>><<02037>>06901100
<<THE CACHEIMPEDE IS LUMPED INTO STOPIMPEDE. THE REASON IS   >><<02037>>06901200
<<BECAUSE THAT THE CACHEFAULT HAS GREATER CHANCE TO OCCUR    >><<02037>>06901300
<<THAN CACHEIMPEDE.                                          >><<02037>>06901400
$EDIT VOID = 6950000                                           <<02037>>06905000
<<4>> UNKNOWN;            << Disc Free Space >>                <<D2240>>10165000
$if                                                            << 9569>>11447000
<< file as soon as possible. Done !! >>                        <<02037>>14540000
<<EQUATE C'IMPEDECACHE  = 74 ;   >>                            <<02037>>14545000
  TOS := CDT'ARRAY(CDT'LINK'OFFSET+CDT'MD'DISCREQ) :=          <<01747>>16146000
    GETDISCREQ(2);                                             <<01747>>16147000
  IF (TOS = 0) THEN SUDDENDEATH(SFKERNCACHEINTBAD);            <<01747>>16148000
      <<BEFORE ENTERING THE TIMING, WE WANT TO SET THE DOUBLE>><<02036>>16341000
      <<WORD PREEMPTSTOPTIME IN PXGLOB AREA TO ZERO. IDEALLY,>><<02036>>16342000
      <<WE WANT TO DO BOTH IN ONE CRITICAL REGION. ON OUR    >><<02036>>16343000
      <<SYSTEM, THE ONLY FEASIBLE WAY TO DO THAT IS BY USING >><<02036>>16343200
      <<PENABLE AND PDISABLE. THAT WOULD CAUSE MORE OVERHEAD >><<02036>>16343300
      <<AND I DO NOT WANT TO DO THAT.   HN.                  >><<02036>>16343310
      TOS := ICS (-ICS'STKBANKCELL);                           <<02036>>16343400
      TOS := ICS (-ICS'STKBASECELL) + SBTOPREEMPTSTOPTIME;     <<02036>>16343500
      ASMB (DZRO;SDEA;DDEL);  <<SET ZERO>>                     <<02036>>16343600
GO AROUND'LOOP'KLUDGE;                                         << 9569>>16380100
LOOPKLUDGE:                                                    << 9569>>16381000
   <<    ***** WARNING ***** WARNING ***** WARNING *****    >> << 9569>>16381010
   << IF WE HAVE JUST LOOPED BACK HERE VIA THE DREADED      >> << 9569>>16381020
   << "LOOPKLUDGE" LABEL, THEN WE HAVE GIVEN UP THE CPU AND >> << 9569>>16381030
   << THUS SOMEONE COULD HAVE DONE SOMETHING NASTY LIKE A   >> << 9569>>16381040
   << STOPCACHE ON OUR DEVICE.  THEREFORE WE MUST NOT ONLY  >> << 9569>>16381050
   << CHECK TO SEE IF THE CDT'DST <> 0, BUT ALSO SUCH THINGS>> << 9569>>16381060
   << AS IF OUR DEVICE IS STILL CACHED, IF THE ENTRY HAS    >> << 9569>>16381070
   << MOVED (VIA A STOPCACHE AND STARTCACHE), IF THE CDT IS >> << 9569>>16381080
   << STILL IN THE SAME PLACE (IF DURING THAT TIME SOMEONE  >> << 9569>>16381090
   << DISABLED AND ENABLED CACHING ON ALL DEVICES, THE CDT  >> << 9569>>16381100
   << WOULD HAVE BEEN DEALLOCATED AND THEN REALLOCATED THUS >> << 9569>>16381110
   << CAUSING IT TO BE A DIFFERENT DST# AND DIFFERENT LOC.  >> << 9569>>16381120
   << IN MEMORY).  THERE MAY BE OTHER NASTY PROBLEMS THAT I >> << 9569>>16381130
   << HAVEN'T THOUGHT OF, JUST BE WARE - THIS IS VERY       >> << 9569>>16381140
   << TRICKY TO RECOVER FROM.                               >> << 9569>>16381150
   <<    ***** WARNING ***** WARNING ***** WARNING *****    >> << 9569>>16381160
                                                               << 9569>>16381170
   IF (LDEV'LINK'PTR := CDT'FIND'DE(LDR'LDEV))=0               << 9569>>16381180
      THEN GO OUT                                              << 9569>>16381190
      ELSE LDEV'LINK'OFFSET := LDEV'LINK'PTR * CDT'ENTRY'SIZE; << 9569>>16381200
AROUND'LOOP'KLUDGE:                                            << 9569>>16386000
$EDIT                                                          << 9569>>16415000
$EDIT                                                          << 9569>>16425000
            ASSEMBLE(DDEL); << REMOVE CDT ADDR FROM TOS >>     << 9569>>16531000
                                                                        16620100
<<CP'SEGCONTRACT IS CHANGED TO CP'STOPCACHEFAULT AND        >> <<02037>>16620200
<<CACHEIMPEDE IS LUMPED INTO CP'STOPIMPEDE.                 >> <<02037>>16620300
$EDIT VOID = 16670000                                          <<02037>>16625000
            DELAY(*); << WE WILL ALLOW OTHER PROCESSES TO  >>  << 9569>>16685000
            << RUN, BUT OUR ONLY LOCKING MECHANISM IS THE  >>  << 9569>>16686000
            << PDISABLE.  WARNING - SEE COMMENT ABOVE!!    >>  << 9569>>16687000
$EDIT                                                          << 9569>>16720000
$EDIT                                                          << 9569>>16725000
$EDIT                                                          << 9569>>16730000
      <<AT THIS POINT, STARTCACHETIME IS ACTUALLY THE TOTAL  >><<02036>>16795100
      <<OF DELAY TIMES AND FIRST TIMER. NOW WE WANT TO ADD   >><<02036>>16795200
      <<THE PREEMPTION TIME INTO IT TOO. HN.                 >><<02036>>16795300
      TOS := ICS (-ICS'STKBANKCELL);                           <<02036>>16795400
      TOS := ICS (-ICS'STKBASECELL) + SBTOPREEMPTSTOPTIME;     <<02036>>16795500
      ASMB (LDEA);    <<GET CUMULATIVE PREEMPTION TIME>>       <<02036>>16795600
      STARTCACHETIME := TOS + STARTCACHETIME;                  <<02036>>16795700
      <<I CAN NOT THINK OF ANY CASE IN WHICH A NON-ZERO VALUE>><<02036>>16795800
      <<OF PREEMPTSTOPTIME WOULD CAUSE ANY HARM. HOWEVER, IT >><<02036>>16795900
      <<IS STILL SAFER TO CLEAR IT BEFORE WE LEAVE.  HN.     >><<02036>>16796000
      ASMB (DZRO;SDEA;DDEL);                                   <<02036>>16796100
      if CDT'FLUSH'CACHED'REGION(                              <<*1401>>17590000
                                                               <<A1892>>18476000
<< Increase from 255 to 400 words in order to prevent a 2nd >> <<A1892>>18477000
<< StackOverFlow on process that calls Disc Caching with    >> <<A1892>>18478000
<< large stack markers while Pdisabled.                     >> <<A1892>>18479000
                                                               <<A1892>>18479100
ASMB(adds 145); << 2 ASMBs of adds and subs are used because>> <<A1892>>18482000
                << there is a special processing on (TOS    >> <<A1892>>18483000
ASMB(subs 145); << gets 400) then (ASMB of adds 0) in ININ. >> <<A1892>>18484000
                                                               <<A1892>>18484100
<< @@@@@@@@@@@@@@@@@@   PERFORMANCE  FIX   @@@@@@@@@@@@@@@@ >> <<01746>>18487020
<< If the function code is an FOPEN or FCLOSE and the       >> <<01746>>18487030
<< IO measurements are turned off then return the procedure >> <<I2106>>18487040
<< CDT'ATTACHIO with GOOD status.  The reason for doing     >> <<01746>>18487050
<< this is to save unnecessary codes from being further     >> <<01746>>18487060
<< executed in CACHESEG, P'ATTACHIO, AWAKEIO, SIODM, and    >> <<01746>>18487070
<< DRIVER.                                                  >> <<01746>>18487080
if  (2<=FNCT<=3)  and  (GCLASSENABLEDMASK.IOSTATMASK=0)  then  <<I2106>>18487090
  begin                                                        <<01746>>18487100
    CDT'ATTACHIO := %200000 D ;                                <<01746>>18487110
    RETURN ;                                                   <<01746>>18487120
  end ;                                                        <<01746>>18487130
<< @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ >> <<01746>>18487140
                                                               <<*1401>>19541000
                                                               <<*1401>>19542000
It is essential that the procedures LinkCachedRegion and       <<*1401>>19543000
UnLinkCachedRegion run while interrupts are DISABLEd.  If      <<*1401>>19544000
either of them is interrupted before their respective tasks    <<*1401>>19544100
of Linking or UnLinking is completed AND another attempt is    <<*1401>>19544200
made to access the list of cached domains for that LDEV then   <<*1401>>19544300
it is quite possible (even likely) that corruption of that     <<*1401>>19544400
list can/will occur.                                           <<*1401>>19544500
                                                               <<*1401>>19626000
LinkCachedRegion will DISABLE for the duration of the          <<*1401>>19627000
linking process. This implies that LinkCachedRegion can now    <<*1401>>19628000
be called SAFELY with interrupts either DISABLEd or ENABLEd.   <<*1401>>19629000
                                                               <<*1401>>19629100
NOTE: The call to LinkCachedRegion is a potentially expensive  <<*1401>>19629200
one in terms of intructions exectuted while DISABLED. The      <<*1401>>19629300
calling procedure should keep this in mind when determining    <<*1401>>19629400
where and when to DISABLE/ENABLE.                              <<*1401>>19629500
$PAGE                                                                   19956000
$PAGE                                                                   20156000
END;     << SUBROUTINE PLACEATTAIL >>                          <<*1401>>20430000
$PAGE                                                                   20436000
subroutine ADD'TO'NULL'LIST;                                   <<*1652>>20436010
                                                               <<*1652>>20436020
begin << subroutine ADD'TO'NULL'LIST >>                        <<*1652>>20436030
                                                               <<*1652>>20436040
   << ----- Fix Up Disk Address ----- >>                       <<*1652>>20436050
   tos := regionbase;                                          <<*1652>>20436060
   tos := tos + RBtoCACDAdisp;                                 <<*1652>>20436070
   tos := -1;                                                  <<*1652>>20436080
   asmb(ssea);   << terminator for llsh >>                     <<*1652>>20436090
                                                               <<*1652>>20436100
   << ----- Zero Out Previous Link ----- >>                    <<*1652>>20436110
   tos := tos + CACDAtoPDdisp;                                 <<*1652>>20436120
   tos := 0D;                                                  <<*1652>>20436130
   asmb(sdea);   << zero previous link >>                      <<*1652>>20436140
                                                               <<*1652>>20436150
   << ----- Zero Out Next Link ----- >>                        <<*1652>>20436160
   tos := tos + PDtoNDdisp;                                    <<*1652>>20436170
   tos := 0D;                                                  <<*1652>>20436180
   asmb(sdea);   << zero next link >>                          <<*1652>>20436190
   THISregNDptrADDR := tos;                                    <<*1652>>20436200
                                                               <<*1652>>20436210
   << ----- Update SCAN POINTER ----- >>                       <<*1652>>20436220
$if X1=ON                                                      <<*1652>>20436230
   CDT'SET'DOUBLE(devcdtentry, CDT'DE'SCANPT,                  <<*1652>>20436240
                                    THISregNDptrADDR);         <<*1652>>20436250
$if X1=OFF                                                     <<*1652>>20436260
   CDT'DARRAY((ldev'offset+CDT'DE'SCANPT)&ASR(1))              <<*1652>>20436270
                                    := THISregNDptrADDR;       <<*1652>>20436280
$if                                                            <<*1652>>20436290
                                                               <<*1652>>20436300
   << ----- Update HEAD POINTER ----- >>                       <<*1652>>20436310
$if X1=ON                                                      <<*1652>>20436320
   CDT'SET'DOUBLE(devcdtentry, CDT'DE'REG'HD,                  <<*1652>>20436330
                                    THISregNDptrADDR);         <<*1652>>20436340
$if X1=OFF                                                     <<*1652>>20436350
   CDT'DARRAY((ldev'offset+CDT'DE'REG'HD)&ASR(1))              <<*1652>>20436360
                                    := THISregNDptrADDR;       <<*1652>>20436370
$if                                                            <<*1652>>20436380
                                                               <<*1652>>20436390
   << ----- Update TAIL POINTER ----- >>                       <<*1652>>20436400
$if X1=ON                                                      <<*1652>>20436410
   CDT'SET'DOUBLE(devcdtentry, CDT'DE'REG'TL,                  <<*1652>>20436420
                                     THISregNDptrADDR);        <<*1652>>20436430
$if X1=OFF                                                     <<*1652>>20436440
   CDT'DARRAY((ldev'offset+CDT'DE'REG'TL)&ASR(1))              <<*1652>>20436450
                                     := THISregNDptrADDR;      <<*1652>>20436460
$if                                                            <<*1652>>20436470
                                                               <<*1652>>20436480
end; << subroutine ADD'TO'NULL'LIST >>                         <<*1652>>20436490
                                                               <<*1401>>20551000
<<===========================================================>><<*1401<>20552000
<< DISABLE External Interrupts For Rest Of LinkCachedRegion  >><<*1401>>20553000
<<===========================================================>><<*1401>>20554000
DISABLE;                                                       <<*1401>>20554100
                                                               <<*1401>>20554200
   << assume tail pointer is null and list is empty >>         <<*1652>>20885000
   ADD'TO'NULL'LIST;                                           <<*1652>>20890000
                                                               <<*1401>>21596000
UnlinkCachedRegion will DISABLE for the duration of the        <<*1401>>21597000
unlinking process. This implies that UnlinkCachedRegion can    <<*1401>>21598000
now be called SAFELY with interrupts either DISABLED or        <<*1401>>21599000
ENABLED.                                                       <<*1401>>21599100
                                                               <<*1401>>21599200
NOTE: The call to UnlinkCachedRegion is a potentially expensive<<*1401>>21599300
on in terms of instructions executed while DISABLED. The       <<*1401>>21599400
calling procedure should keep this in mind when determining    <<*1401>>21599500
where and when to DISABLE/ENABLE.                              <<*1401>>21599600
                                                               <<*1401>>21599700
        cdcount,                                               <<*1214>>21631000
                                                               <<*1401>>21806000
<<===========================================================>><<*1401>>21807000
<<DISABLE External Interrupts For Rest Of UnlinkCachedRegion >><<*1401>>21808000
<<===========================================================>><<*1401>>21809000
DISABLE;                                                       <<*1401>>21809100
                                                               <<*1401>>21809200
$EDIT VOID=21870000                                                     21860000
cdcount := CDT'ADD'WORD(devcdtentry, cdt'de'regions, -1);      <<*1214>>21861000
if cdcount < 0 then                                            <<*1214>>21862000
tos := cdcount := CDT'ARRAY(LDEV'OFFSET+CDT'DE'REGIONS) - 1;   <<*1214>>21885000
                                                               <<*1214>>22446000
      << Should be only item in the list. NOTE: cdcount was  >><<*1214>>22447000
      << pre-decremented (ie: equals count after UNLINKing). >><<*1214>>22448000
      if cdcount <> 0 then                                     <<*1214>>22449000
         SUDDENDEATH(sfkerncacheintbad);                       <<*1214>>22449100
                                                               <<*1214>>22449200
$EDIT                                                          << 9569>>23820000
DOUBLE SAVETIME;                                               <<02036>>26951000
                                                               <<02036>>26971000
SAVETIME := TIMER;                                             <<02036>>26972000
                                                               <<02036>>26973000
<<THE TIME SPENT IN CACHEWRITECOMP IS CHARGED TO COUNTER  >>   <<02036>>27021100
<<C'CACHEONICS                                            >>   <<02036>>27021200
IF CLASS0STATSENABLED THEN                                     <<02036>>27021300
   IF FUPDATESTATISTICS (MEASCLASS0, MEASSUBCLASS0, MEASENTRY1,<<02036>>27021400
                         C'CACHEONICS, NOTNEWVALUE,            <<02036>>27021500
                         TIMER - SAVETIME, DOUBLEVALUE)        <<02036>>27021600
   <> 0 THEN SUDDENDEATH (SFKERNCACHEINTBAD);                  <<02036>>27021700
                                                               <<02036>>27021800
<< When the IOSTATSENBLD bit is turned on, the procedure    >> <<M9890>>28827000
<< STORE'IOQ is invoked to move the discreq entry onto an   >> <<M9890>>28828000
<< extra data segment.  For accurate measurement, the LDRs  >> <<M9890>>28829000
<< are recorded in the I/O statistics extra data segment    >> <<M9890>>28830000
<< each time after the logical I/O move has taken place.    >> <<M9890>>28831000
                                                               <<M9890>>28832000
IF  IOSTATSENBLD  THEN                                         <<M9890>>28833000
  BEGIN                                                        <<M9890>>28833100
                                                               <<M9890>>28833820
    << Set the flag that passes to STORE'IOQ to false to    >> <<M9890>>28833900
    << indicate this is a LDR entry.                        >> <<M9890>>28834000
    STORE'IOQ(LDR'ENTRY'INDEX, FALSE);                         <<M9890>>28834100
                                                               <<M9890>>28834200
  END;                                                         <<M9890>>28834300
        LDEV'SUBTYPE,          << Device subtype and type used><<s2301>>29421000
        LDEV'TYPE,             << in conjunction with INCLCDEF><<s2301>>29422000
                                                               <<s2315>>29437000
double  REQSTATUS;             << double Status word returned ><<s2315>>29437100
                               << by P'ATTACHIO               ><<s2315>>29437200
logical STATWORD1 = REQSTATUS,                                 <<s2315>>29437300
        STATWORD2 = STATWORD1+1;                               <<s2315>>29437400
                                                               <<s2315>>29437500
array   DESC'ARRAY(0:19) = Q;  << returned parm of DESCRIBE   ><<s2315>>29437600
                               << command contains CONTROLLER,><<s2315>>29437700
                               << UNIT, and VOLUME description><<s2315>>29437800
equate  DESC'FNCT        = 78, << CS80 Disc Driver DESCRIBE   ><<s2315>>29437900
        DESC'CNT         = 20, << words transfer count        ><<s2315>>29438000
        DESC'HODA'OFFSET = 16; << offset to maximum value of  ><<s2315>>29438100
                               << single-vector address       ><<s2315>>29438200
define  STATUS    = (13:3)#,   << general status of 2nd word  ><<s2315>>29438300
        DESC'HODA = DESC'ARRAY(DESC'HODA'OFFSET)#;             <<s2315>>29438400
                  << Hoda of the max value of the vector addr ><<s2315>>29438500
                                                               <<s2301>>30461000
      << Get the device type and subtype of this ldev >>       <<s2301>>30461100
      LDEV'TYPE    := LDEVTOTYPE (LDEV);                       <<s2301>>30461200
      LDEV'SUBTYPE := LDEVTOSUBTYPE (LDEV);                    <<s2301>>30461300
                                                               <<s2301>>30461400
      << First check to see if this device is a CS'80, then  >><<s2315>>30461500
      << check to see what bit position of the MSB of the    >><<s2315>>30461600
      << HODA of the maximum sector address is first set,    >><<s2315>>30461700
      << then store the number of bits to shift in the CDT   >><<s2315>>30461800
      << device entry accordingly.                           >><<s2315>>30461900
                                                               <<s2315>>30462000
      if  LDEV'TYPE = CS80'TYPE  then                          <<s2315>>30462100
        begin                                                  <<s2315>>30462200
          if  DESC'HODA.(8:1) = 1  then                        <<s2315>>30462300
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,8)       <<s2315>>30462400
          else if  DESC'HODA.(9:1)  = 1  then                  <<s2315>>30462500
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,9)       <<s2315>>30462600
          else if  DESC'HODA.(10:1) = 1  then                  <<s2315>>30462700
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,10)      <<s2315>>30462800
          else if  DESC'HODA.(11:1) = 1  then                  <<s2315>>30462900
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,11)      <<s2315>>30463000
          else if  DESC'HODA.(12:1) = 1  then                  <<s2315>>30463100
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,12)      <<s2315>>30463200
          else if  DESC'HODA.(13:1) = 1  then                  <<s2315>>30463300
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,13)      <<s2315>>30463400
          else if  DESC'HODA.(14:1) = 1  then                  <<s2315>>30463500
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,14)      <<s2315>>30463600
          else                                                 <<s2315>>30463700
                   CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,15)      <<s2315>>30463800
        end                                                    <<s2315>>30463900
      else  << Since this device is NOT a CS'80 type and the >><<s2315>>30464000
            << largest disc drive (HP7925) would only have   >><<s2315>>30464100
            << 120 mB, we'll shift 13 bits with DLSL instr.  >><<s2315>>30464200
                                                               <<s2315>>30464300
          CDT'SET'WORD (CTR,CDT'DE'SHIFT'CNT,13);              <<s2315>>30464400
                                                               <<s2315>>30587000
      << get the device type of this LDEV >>                   <<s2315>>30587100
      LDEV'TYPE := LDEVTOTYPE (LDEV);                          <<s2315>>30587200
                                                               <<s2315>>30587300
      if  LDEV'TYPE = CS80'TYPE  then                          <<s2315>>30587400
        begin                                                  <<s2315>>30587500
                                                               <<s2315>>30587600
          << Do a DESCRIBE for this CS'80 device through a   >><<s2315>>30587700
          << P'ATTACHIO call to obtain the information       >><<s2315>>30587800
          << concerning the device type and characteristics  >><<s2315>>30587900
                                                               <<s2315>>30588000
          REQSTATUS := P'ATTACHIO (LDEV,0,0,@DESC'ARRAY,       <<s2315>>30588100
                                   DESC'FNCT,DESC'CNT,0,0,1);  <<s2315>>30588200
                                                               <<s2315>>30588300
          << if the call to P'ATTACHIO wasn't successfully >>  <<s2315>>30588400
          << completed then the Caching status receives a  >>  <<s2315>>30588500
          << status of device'NOT'cachable                 >>  <<s2315>>30588600
                                                               <<s2315>>30588700
          if  STATWORD1.STATUS <> 1  then                      <<s2315>>30588800
              stat := stat'dev'not'cachable;                   <<s2315>>30588900
        end;                                                   <<s2315>>30589000
                                                               <<s2315>>30589100
                                                               <<O1845>>32366000
    << PREVENT THE INTEGER OVERFLOW WHEN THE DEVICE HAS MORE >><<O1845>>32367000
    << THAN 8 MEGABYTES (32768 PAGES).                       >><<O1845>>32368000
                                                               <<O1845>>32369000
    PAGES := double( logical(WORK) );                          <<O1845>>32370000
                                                               <<O1845>>32371000
