ASMB,Q,C
      NAM DVINT,2,10 92425-1X061 REV.2001 791130  
*     NAME: DVINT MAIN PROGRAM
*   SOURCE: 92425-18061 
*    RELOC: 92425-1X061 
*     PRGM: DICK LAMPMAN
************************************************************************* 
*    (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 WRITTED CONSENT OF HEWLETT-PACKARD COMPANY.               * 
************************************************************************* 
* 
* 
      ENT DVINT 
      EXT EQLU,EXEC,LU2ST,TRPNT,RMPAR 
      SPC 1 
A     EQU 0 
B     EQU 1 
      SKP 
*     THIS IS A GENERAL PURPOSE INTERRUPT TRAP SETTING PROGRAM. IT
* IS INTENDED TO BE USED BY ALL STATIONS SO ONLY ONE COPY IS NECESSARY. 
* IT SHOULD BE LOADED PERMANENTLY TO AVOID THE PROBLEM OF NOT HAVING AN 
* ID SEGMENT WHEN IT IS NEEDED. 
* 
* TO USE: 
* 1. BE SURE ALL INSTRUMENTS AND CRT'S HAVE BEEN DEFINED IN THE 'WELCOM'
*    FILE.  THIS PROGRAM WILL NOT WORK OTHERWISE.  IT WILL NOT SET TRAPS
*    FOR INSTRUMENTS DEFINED AS STATION '0'.
* 
* 2. IN THE 'TABLE' SECTION OF THIS PROGRAM, REPLACE 'DEC 0' WITH THE 
*    TRAP NUMBER YOU DESIRE TO SET IF THAT LU INTERRUPTS.  LEAVE '0'
*    WHERE YOU DON'T EXPECT INTERRUPTS.  THIS PROGRAM WILL DETERMINE
*    THE STATION THAT THE INTERRUPTING LU IS ON.
*                :
*                :
*                LU35  DEC 7     WILL SET TRAP 7 ON LU35'S STATION
* 
* 3. COMPILE AND LOAD THE PROGRAM.
* 
* 
*       FOR RTE IV
* 
*                :
*                :RU,ASMB,&DVINT,6,%DVINT 
*                :RU,LOADR,,%DVINT,6,BGNCPE,SS
*                :
* 
* 4. IN THOSE PROGRAMS WHICH NEED TO DETECT INSTRUMENT INTERRUPTS, CALL 
*    SRQ (DVR37) OR DSCHD (DVM72) FOR EACH DEVICE THAT WILL POTENTIALLY 
*    INTERRUPT. 
*                 10 CALL SRQ(L1,16,"DVINT")
*                 20 CALL DSCHD(L2,3,"DVINT") 
* 
* 5. SET TRAP CALLS IN ACCORDANCE TO THE NUMBERS SET WITHIN THIS
*    PROGRAM. 
* 
* 6. AT THE END OF THE PROGRAM CLEAR THE INTERRUPT PROGRAM. 
*                 9000 CALL SRQ(L1,17,0)
*                 9010 CALL DSCHD(L2,4,0) 
* 
* 7. AN ALTERNATE TO SETTING THE INTERRUPT PROGRAMS EACH TIME IS TO 
*    WRITE A SMALL FORTRAN PROGRAM WHICH SETS UP THE INTERRUPT PROGRAM. 
*    PUT THE PROGRAM IN THE 'WELCOM' FILE SO THAT IT RUNS AT BOOT-UP. 
*    THIS MEANS THAT IF A INSTRUMENT INTERRUPTS UNEXPECTEDLY A TRAP 
*    MIGHT BE SET, BUT, IF BASIC IS NOT RUNNING, THIS IS NOT A
*    PROBLEM. 
* 
* 8. IF YOU NEED FASTER RESPONSE TO AN INTERRUPT, THEN WRITE A SPECIAL
*    PROGRAM TO HANDLE IT FOR THE LU INVOLVED AND REMOVE THE TRAP 
*    NUMBER FROM THE INTERNAL TABLE.
      SKP 
* 
*     GET LU# OF INTERRUPTING DEVICE
* 
DVINT NOP 
* 
*     CALL RMPAR FOR DVR37 AND EQLU FOR DVM72 
* 
      STA AREG      STORE A REGISTER
      STB BREG      STORE B REGISTER
      JSB RMPAR     CALL RMPAR TO GET EQT AND 
      DEF *+2         SUBCHANNEL IF SCHEDULED 
      DEF STAT        FROM DVR37
      LDA AREG      RESTORE A REGISTER
      LDB BREG      RESTORE B REGISTER
      JSB EQLU      OBTAIN LU IN <BINARY> 
      DEF *+1 
      STA LU         YES, SAVE LU <BINARY>
* 
*     CONVERT EQT AND SUBCHANNEL TO AN LU 
* 
      CLB           CLEAR A REG FOR A DIVIDE
      LDA 1650B     GET FIRST WORD ADDRESS OF EQT TABLE 
      CMA,INA       NEGATE ADDRESS
      ADA EQT       GET DIFFERENCE IN ADDRESSES 
      DIV =D15      DIVIDE BY EQT SIZE
      INA           ADD ONE TO EQT NUMBER 
      STA EQT       STORE IN EQT
      LDA SUBCH     GET SUBCHANNEL AND
      ALF,ALF         POSITON IT TO COMPARE WITH
      ALF,RAR         EQT AND SUBCHANNEL WORD IN DRT. 
      ADA EQT       ADD IN EQT BITS 
      STA EQT       SAVE FOR COMPARISON 
      SZA,RSS       IF BOTH EQT AND SUBCHANNEL = 0, 
      JMP TEST        THEN NOT SCHEDULED BY DVR37 
* 
*  GET LU FROM DEVICE REFERENCE TABLE (DRT) 
* 
      LDA 1653B     GET THE DRT TABLE LENGTH
      CMA,INA       NEGATE
      STA LUMAX      AND SAVE IT
      LDA 1652B     GET FIRST WORD ADDRESS OF DRT 
      STA DRT       STORE ADDRESS OF DRT
      CLB,INB       B REGISTER HAS CURRENT LU IN IT 
* 
LOOP  LDA DRT,I     GET THE NEXT DRT ENTRY
      AND =B174077  MASK FOR EQT AND SUBCHANNEL 
      CPA EQT         EQT AND SUBCHANNEL MATCH? 
      JMP GOTIT         YES, GO SAVE LU!
      ISZ DRT         NO, INCREMENT LU POINTER
      INB           INCREMENT LU COUNTER
      ISZ LUMAX     INCREMENT LOOP COUNTER
      JMP LOOP      LOOP AGAIN
      JMP TEST      NO MATCH, ILLEGAL EQT AND SUBCHANNEL
      SPC 1 
GOTIT STB LU        FOUND LU, STORE IT
TEST  LDA LU        TEST IF ANY LU FOUND
      SZA,RSS       IF LU IS 0
      JMP EXIT        THEN EXIT!
* 
*     GET STATION NUMBER
* 
      JSB LU2ST     GET STATION NUMBER FROM LU
      DEF *+2 
      DEF LU
      SZA,RSS       FOUND ONE?
      JMP EXIT       NO, EXIT 
      STA STN        YES, SAVE STATION
* 
*     GET TRAP NUMBER FROM TABLE
* 
      LDA TABLE     GET TABLE ADDRESS 
      ADA LU        ADD LU OFFSET 
      LDA A,I       GET TRAP NUMBER 
* 
*     SET TRAP ON CORRECT STATION 
* 
      LDB STN 
      JSB TRPNT     CALL TRAP SET ROUTINE 
       NOP          IGNORE ERRORS 
* 
*     EXIT
* 
EXIT  JSB EXEC      CALL SYSTEM TO TERMINATE
      DEF *+2 
      DEF .6
* 
*     CONSTANTS AND VARIBLES
* 
AREG  NOP 
BREG  NOP 
LU    NOP 
LUMAX NOP           MAXIMUM NUMBER OF LU'S
DRT   NOP           ADRESS OF THE DRT TABLE 
STAT  NOP           STATUS WRD FROM RMPAR  -
SUBCH NOP           SUBCHANNEL FROM RMPAR   \ THESE MUST BE 
EQT   NOP           EQT NUMBER FROM RMPAR   / IN ORDER
SPARE BSS 2         NOT USED.  FROM RMPAR  -
STN   BSS 1 
.6    DEC 6 
TABLE DEF * 
      SKP 
* 
*                    TRAP TABLE 
LU1   DEC 0 
LU2   DEC 0 
LU3   DEC 0 
LU4   DEC 0 
LU5   DEC 0 
LU6   DEC 0 
LU7   DEC 0 
LU8   DEC 0 
LU9   DEC 0 
LU10  DEC 0 
LU11  DEC 0 
LU12  DEC 0 
LU13  DEC 0 
LU14  DEC 0 
LU15  DEC 0 
LU16  DEC 0 
LU17  DEC 0 
LU18  DEC 0 
LU19  DEC 0 
LU20  DEC 0 
LU21  DEC 0 
LU22  DEC 0 
LU23  DEC 0 
LU24  DEC 0 
LU25  DEC 0 
LU26  DEC 0 
LU27  DEC 0 
LU28  DEC 0 
LU29  DEC 0 
LU30  DEC 0 
LU31  DEC 0 
LU32  DEC 0 
LU33  DEC 0 
LU34  DEC 0 
LU35  DEC 0 
LU36  DEC 0 
LU37  DEC 0 
LU38  DEC 0 
LU39  DEC 0 
LU40  DEC 0 
LU41  DEC 0 
LU42  DEC 0 
LU43  DEC 0 
LU44  DEC 0 
LU45  DEC 0 
LU46  DEC 0 
LU47  DEC 0 
LU48  DEC 0 
LU49  DEC 0 
LU50  DEC 0 
LU51  DEC 0 
LU52  DEC 0 
LU53  DEC 0 
LU54  DEC 0 
LU55  DEC 0 
LU56  DEC 0 
LU57  DEC 0 
LU58  DEC 0 
LU59  DEC 0 
LU60  DEC 0 
LU61  DEC 0 
LU62  DEC 0 
LU63  DEC 0 
LU64  DEC 0 
LU65  DEC 0 
LU66  DEC 0 
LU67  DEC 0 
LU68  DEC 0 
LU69  DEC 0 
LU70  DEC 0 
LU71  DEC 0 
LU72  DEC 0 
LU73  DEC 0 
LU74  DEC 0 
LU75  DEC 0 
LU76  DEC 0 
LU77  DEC 0 
LU78  DEC 0 
LU79  DEC 0 
LU80  DEC 0 
LU81  DEC 0 
LU82  DEC 0 
LU83  DEC 0 
LU84  DEC 0 
LU85  DEC 0 
LU86  DEC 0 
LU87  DEC 0 
LU88  DEC 0 
LU89  DEC 0 
LU90  DEC 0 
LU91  DEC 0 
LU92  DEC 0 
LU93  DEC 0 
LU94  DEC 0 
LU95  DEC 0 
LU96  DEC 0 
LU97  DEC 0 
LU98  DEC 0 
LU99  DEC 0 
LU100 DEC 0 
LU101 DEC 0 
LU102 DEC 0 
LU103 DEC 0 
LU104 DEC 0 
LU105 DEC 0 
LU106 DEC 0 
LU107 DEC 0 
LU108 DEC 0 
LU109 DEC 0 
LU110 DEC 0 
LU111 DEC 0 
LU112 DEC 0 
LU113 DEC 0 
LU114 DEC 0 
LU115 DEC 0 
LU116 DEC 0 
LU117 DEC 0 
LU118 DEC 0 
LU119 DEC 0 
LU120 DEC 0 
LU121 DEC 0 
LU122 DEC 0 
LU123 DEC 0 
LU124 DEC 0 
LU125 DEC 0 
LU126 DEC 0 
LU127 DEC 0 
LU128 DEC 0 
LU129 DEC 0 
LU130 DEC 0 
LU131 DEC 0 
LU132 DEC 0 
LU133 DEC 0 
LU134 DEC 0 
LU135 DEC 0 
LU136 DEC 0 
LU137 DEC 0 
LU138 DEC 0 
LU139 DEC 0 
LU140 DEC 0 
LU141 DEC 0 
LU142 DEC 0 
LU143 DEC 0 
LU144 DEC 0 
LU145 DEC 0 
LU146 DEC 0 
LU147 DEC 0 
LU148 DEC 0 
LU149 DEC 0 
LU150 DEC 0 
LU151 DEC 0 
LU152 DEC 0 
LU153 DEC 0 
LU154 DEC 0 
LU155 DEC 0 
LU156 DEC 0 
LU157 DEC 0 
LU158 DEC 0 
LU159 DEC 0 
LU160 DEC 0 
LU161 DEC 0 
LU162 DEC 0 
LU163 DEC 0 
LU164 DEC 0 
LU165 DEC 0 
LU166 DEC 0 
LU167 DEC 0 
LU168 DEC 0 
LU169 DEC 0 
LU170 DEC 0 
LU171 DEC 0 
LU172 DEC 0 
LU173 DEC 0 
LU174 DEC 0 
LU175 DEC 0 
LU176 DEC 0 
LU177 DEC 0 
LU178 DEC 0 
LU179 DEC 0 
LU180 DEC 0 
LU181 DEC 0 
LU182 DEC 0 
LU183 DEC 0 
LU184 DEC 0 
LU185 DEC 0 
LU186 DEC 0 
LU187 DEC 0 
LU188 DEC 0 
LU189 DEC 0 
LU190 DEC 0 
LU191 DEC 0 
LU192 DEC 0 
LU193 DEC 0 
LU194 DEC 0 
LU195 DEC 0 
LU196 DEC 0 
LU197 DEC 0 
LU198 DEC 0 
LU199 DEC 0 
LU200 DEC 0 
LU201 DEC 0 
LU202 DEC 0 
LU203 DEC 0 
LU204 DEC 0 
LU205 DEC 0 
LU206 DEC 0 
LU207 DEC 0 
LU208 DEC 0 
LU209 DEC 0 
LU210 DEC 0 
LU211 DEC 0 
LU212 DEC 0 
LU213 DEC 0 
LU214 DEC 0 
LU215 DEC 0 
LU216 DEC 0 
LU217 DEC 0 
LU218 DEC 0 
LU219 DEC 0 
LU220 DEC 0 
LU221 DEC 0 
LU222 DEC 0 
LU223 DEC 0 
LU224 DEC 0 
LU225 DEC 0 
LU226 DEC 0 
LU227 DEC 0 
LU228 DEC 0 
LU229 DEC 0 
LU230 DEC 0 
LU231 DEC 0 
LU232 DEC 0 
LU233 DEC 0 
LU234 DEC 0 
LU235 DEC 0 
LU236 DEC 0 
LU237 DEC 0 
LU238 DEC 0 
LU239 DEC 0 
LU240 DEC 0 
LU241 DEC 0 
LU242 DEC 0 
LU243 DEC 0 
LU244 DEC 0 
LU245 DEC 0 
LU246 DEC 0 
LU247 DEC 0 
LU248 DEC 0 
LU249 DEC 0 
LU250 DEC 0 
LU251 DEC 0 
LU252 DEC 0 
LU253 DEC 0 
LU254 DEC 0 
LU255 DEC 0 
      END DVINT 
      END$
                                                                                                                          