ASMB,R,L,C
*     NAME:   SY.TR 
*     SOURCE: 92070-18074 
*     RELOC:  92070-16074 
*     PGMR:   M.L.K.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
* 
      NAM SY.TR,7  92070-1X074  REV.1941  790709
* 
* 
*     THIS ROUTINE SEARCHES THE ID SEGMENTS FOR ANY CURRENTLY 
*     USING THE DISC PASSED AS A PARAMETER.  IT ALSO TESTS THE
*     LOCATION OF THE SYSTEM FILE AND THE SWAP AREA.  IT RETURNS
*     A LIST OF ADDRESSES POINTING TO THE ID SEGMENT NAMES USING
*     THE DISC AND THE HIGHEST DISC ADDRESS IN USE. 
* 
      SKP 
      ENT SY.TR 
      EXT .ENTR,CR.LU,$ID#,$IDA 
      EXT $IDSZ,$SWLU 
      SUP 
      SPC 3 
DISC  NOP 
ARRAY NOP 
ASIZE NOP 
TRACK NOP 
SECTR NOP 
* 
SY.TR NOP 
      JSB .ENTR     SET UP PARAMETERS 
      DEF DISC
* 
      CLA           INITIALIZE
      STA CNT       CLEAR CONFLICT COUNT
      CCA           SET TRACK 
      STA TRACK,I   AND SECTOR
      STA SECTR,I   TO -1 TO INDICATE NOT USED
      LDA ASIZE,I   SET UP TO COUNT THE ENTRIES IN THE ARRAY
      CMA,INA       SET IT NEGATIVE 
      SSA,RSS       IF IT WAS NEGATIVE OR 0 
      CCA             SET IT TO 1 
      STA ASIZE     NOW STORE IT
* 
      JSB CR.LU     GO GET DISC LU
      DEF *+2 
      DEF DISC,I
      SZA,RSS       IF NOTHING FOUND, 
      JMP SY.TR,I     EXIT
* 
      STA DISC      SAVE DISC LU
      LDA $ID#      GET NUMBER OF ID SEGMENTS 
      CMA,INA       SET NEGATIVE FOR LOOP COUNTER 
      STA LPCNT       AND SAVE
      LDB $IDA      GET START OF ID SEGMENTS
      STB IDPTR       AND SAVE
* 
LOOP  ADB .27       POINT TO LU IN ID SEGMENT 
      LDA B,I         NOW GET IT
      AND B377      AND ISOLATE LU
      CPA DISC      THE ONE WE ARE LOOKING FOR? 
      RSS           YES, SKIP 
      JMP NEXT      NO, GO TRY THE NEXT ONE 
* 
      ADB N15       BACK UP TO NAME AND PUT ITS ADDRESS 
      LDA B,I       GET NAME
      SZA,RSS       ZERO (NO PROGRAM)?
      JMP NEXT       YES, SKIP THIS ID SEGMENT
      JSB STUFF       IN THE ARRAY BECAUSE IT CONFLICTS 
SECT  ADB .13       POINT TO ID WORD WITH SECTOR (26) 
      LDA B,I       GET SECTOR
      AND B377      AND ISOLATE IT
      ALS           SHIFT FOR LOGICAL SECTORS 
      INB           POINT TO MAIN TRACK WORD (27) 
      LDB B,I       AND GET IT
      JSB HIEST     UPDATE HIGHEST DISC ADDRESS 
* 
NEXT  LDB IDPTR     GET CURRENT ID POINTER
      ADB $IDSZ     AND INCREMENT TO THE NEXT ID SEGMENT
      STB IDPTR     SAVE FOR NEXT ROUND 
      ISZ LPCNT     ARE WE DONE?
      JMP LOOP      NO, CHECK NEXT ID SEGMENT 
* 
*            CHECK FOR SWAPPING AREA
* 
      LDA $SWLU     GET THE SWAPPING DISC'S LU
      CPA DISC      SAME AS OURS? 
      CCB,RSS       YES, SET B TO INDICATE SWAP AREA
      JMP TERM      NO, GO TERMINATE
      JSB STUFF     PUT SWAP INDICATOR IN THE ARRAY 
      LDA SSEC,I    GET SWAP SECTOR 
      LDB STRAK,I   GET SWAP TRACK
      JSB HIEST     UPDATE HIGHEST DISC ADDRESS 
* 
*     PUT TERMINATING 0 IN BUFFER 
* 
TERM  CLB           PUT TERMINATING 0 IN THE ARRAY
      JSB STUFF 
      LDA CNT       GET CONFLICT COUNT
      ADA N1        SUBTRACT 1 FOR TERMINATING ZERO 
      JMP SY.TR,I    AND EXIT 
      SKP 
* 
* THIS ROUTINE RECIEVES TEST DISC ADDRESSES IN A AND B (A = SECTOR
* AND B = TRACK) AND COMPARES THEM AGAINST TRACK,I AND SECTOR,I.
* IT THEN STORES THE HIGHEST DISC ADDRESS IN TRACK,I AND SECTR,I. 
* 
HIEST NOP 
      STA TMP       SAVE SECTOR FOR LATER 
      LDA TRACK,I   GET CURRENT TRACK 
      CMA,INA       SET IT NEGATIVE 
      ADA B         ADD THE NEW TRACK VALUE 
      SSA           POSITIVE OR NEGATIVE? 
      JMP HIEST,I   NEGATIVE, SO EXIT 
* 
      SZA,RSS       SAME TRACK? 
      JMP SECTS     YES, TEST SECTOR
* 
      STB TRACK,I   NEW TRACK  IS GREATER SO STORE IT 
      LDB TMP       AND STORE NEW SECTOR
      STB SECTR,I 
      JMP HIEST,I   EXIT
* 
SECTS LDA TMP       GET NEW SECTOR
      LDB SECTR,I   GET CURRENT SECTOR
      CMB,INB       MAKE IT NEGATIVE
      ADB A         SUBTRACT CURRENT FROM NEW SECTOR
      SSB,RSS       IS THE NEW SECTOR GREATER OR EQUAL? 
      STA SECTR,I   YES, SO STORE IT
      JMP HIEST,I   EXIT
* 
TMP   NOP 
      SKP 
* 
*  THIS ROUTINE ADDS THE CONTENTS OF THE B REGISTER TO THE
*  USER'S ID ARRAY. 
* 
STUFF NOP 
      ISZ CNT       INCREMENT CONFLICT COUNT
      LDA ASIZE     GET THE REMAINING ARRAY SIZE
      SZA,RSS       IS IT FULL? 
      JMP STUFF,I   YES, EXIT 
      INA           NO, INCREMENT THE NEGATIVE COUNT
      STA ASIZE       AND SAVE FOR NEXT TIME
      STB ARRAY,I   STORE B INTO ARRAY
      ISZ ARRAY       AND POINT TO NEXT ENTRY 
      JMP STUFF,I   RETURN
      SKP 
N15   DEC -15 
N1    DEC -1
.13   DEC 13
.27   DEC 27
B377  OCT 377 
STRAK DEF $SWLU+1 
SSEC  DEF $SWLU+2 
* 
LPCNT NOP 
IDPTR NOP 
CNT   NOP           CONFLICT COUNT
* 
A     EQU 0 
B     EQU 1 
END   EQU * 
      END 
  