%ì VAX-11 Librarian V04-00õ×úš´£™ýNÚ›´£™JxK """%%Ý y?F$PKCDEF$PKDEF$PKNDEF&$PKSDEF/H$PKXDEFœCALL´ CREATE_PORT-øDELAY4¼DISP_INTERRUPTz GET_SCDT_VEC GOOD_NIGHTæINC_CNT” INIT_SPDT ´ LOG_ERROR3 LOG_INTERRUPTPUT<PUT_0ÊPUT_1XPUT_2æPUT_3 ^RELPORT þREQPORT.~SAVE_N5380_REG?SAVE_N53C94_REG/´SCDTFORKTURNœ SUBRETURN1 êSUBSAVE <SUBSAVE1† TRACE_PHASES  WFIRELPORT(ŒWHICH_INTERRUPT.WITHINSETUP_TRACE_PHASE ’ SUBRETURNœ SUBRETURN1 êSUBSAVE <SUBSAVE1† TRACE_PHASES  WFIRELPORT(ŒWHICH_INTERRUPT.WITHINÿÿSCDTFORKÿÿWITHIN  ­5,›´£™+ .MACRO WFIRELPORT timeout_addr,timeout,?l10 PUT <<13><10>"%%PK, WFIRELPORT, executed."> MOVQ R3,SCDRP$L_FR3(R5) MOVAB 'l1',SCDRP$L_FPC(R5) BISL #SCDT$M_PND_RESEL,- SCDT$L_STS(R3)" ADDL3 'timeout',G^EXE$GL_ABSTIM,- SCDRP$L_DUETIME(R5) MOVAB 'timeout_addr',- SCDRP$L_TIMEOUT_ADDR(R5) DEVICEUNLOCK -# LOCKADDR=SPDT$L_DLCK(R4),- NEWIPL=#IPL$_IOLOCK8,-! CONDITION=RESTORE RELPORT RSBl1: .ENDM WFIRELPORTww ­5,›´£™ .MACRO REQPORT ?l1,?L2 BSBW SS$REQUEST_PORT .ENDM REQPORTww­5,›´£™ .MACRO RELPORT BSBW SS$RELEASE_PORT .ENDM RELPORTww­5,›´£™@ .MACRO LOG_ERROR,TYPE,SUB_TYPE=0,UCB=SPDT$L_PORT_UCB(R4),CDT=R3 PUSHR #^M% MOVL #<'SUB_TYPE'@8!SCSI$C_'TYPE'>,- R7 .IF DIF UCB,R5 MOVL UCB,R5 .ENDC MOVL CDT,R8 MOVL UCB$L_DDT(R5),R0 JSB G^ERL$DEVICEATTN POPR #^M .ENDM LOG_ERRORww­5,›´£™6 .MACRO SUBSAVE ; Save return address on local stack POPL @SCDRP$L_PO_STK_PTR(R5) ADDL #4,SCDRP$L_PO_STK_PTR(R5) .ENDM SUBSAVEww­5,›´£™6 .MACRO SUBRETURN ; Return via address on local stack SUBL #4,SCDRP$L_PO_STK_PTR(R5) PUSHL @SCDRP$L_PO_STK_PTR(R5) RSB .ENDM SUBRETURNww­5,›´£™ .MACRO SUBSAVE1,?l .if defined scsi_stack_checking2 assume scdrp$l_scsi_stk+<8*4> eq scdrp$l_cl_retry pushal scdrp$l_cl_retry-4(r5)$ cmpl (sp)+,scdrp$l_scsi_stk_ptr(r5) bgtru l bug_check inconstate,fatall: .endc! ADDL #4,SCDRP$L_SCSI_STK_PTR(R5) POPL @SCDRP$L_SCSI_STK_PTR(R5) .ENDM SUBSAVE1ww­½¶›´£™ .MACRO SUBRETURN1,?l .if defined scsi_stack_checking2 assume scdrp$l_scsi_stk_ptr+4 eq scdrp$l_scsi_stk pushal scdrp$l_scsi_stk_ptr(r5)$ cmpl (sp)+,scdrp$l_scsi_stk_ptr(r5) blssu l bug_check inconstate,fatall: .endc PUSHL @SCDRP$L_SCSI_STK_PTR(R5)! SUBL #4,SCDRP$L_SCSI_STK_PTR(R5) RSB .ENDM SUBRETURN1ww­½¶›´£™B .MACRO SETUP_TRACE_PHASE ?LABEL55 ; Setup trace buffer for phases .IF DF TRACE_PHASE1 MOVAL SCDT$W_PHASES(R3),SCDT$L_PHASE_STK_PTR(R3)B ADDL3 #20*2,SCDT$L_PHASE_STK_PTR(R3),SCDT$L_PHASE_END_STK_PTR(R3) PUSHQ R0 MOVAL SCDT$W_PHASES(R3),R0 MOVL #20,r1 'LABEL55': CLRW (R0)+ SOBGTR R1,'LABEL55' POPQ R0 .ENDC .ENDM SETUP_TRACE_PHASEww­½¶›´£™ .MACRO TRACE_PHASES,?L,?L767 .IF DF TRACE_PHASE9L767: MOVW SCDT$L_BUS_PHASE(R3),@SCDT$L_PHASE_STK_PTR(R3)! ADDL #2,SCDT$L_PHASE_STK_PTR(R3); CMPL SCDT$L_PHASE_STK_PTR(R3),SCDT$L_PHASE_END_STK_PTR(R3) BLSS L1 MOVAL SCDT$W_PHASES(R3),SCDT$L_PHASE_STK_PTR(R3) BRB L767L: .ENDC.ENDM TRACE_PHASESww­½¶›´£™> .MACRO INC_CNT WHICH_CNT,?LABEL ; Increment an error counter. INCL 'WHICH_CNT' BVC LABEL MNEGL #1,'WHICH_CNT'LABEL: .ENDM INC_CNTww­½¶›´£™5 .MACRO INIT_SPDT SPDT_ADDR = R4,- ; Pointer to SPDT. MAP_BUFFER=SC$NULL,- UNMAP_BUFFER=SC$NULL,- SEND=SC$NULL,- SET_CONN_CHAR=SC$NULL,- GET_CONN_CHAR=SC$NULL,- RESET=SC$NULL,- CONNECT=SC$NULL,- DISCONNECT=SC$NULL,- ALLO_CMD_BUF=SC$NULL,- DEALLO_CMD_BUF=SC$NULL,- ABORT=SC$NULL,- SET_PHASE=SC$NULL,- SENSE_PHASE=SC$NULL,- SEND_BYTES=SC$NULL,- RECEIVE_BYTES=SC$NULL,- FINISH_CMD=SC$NULL,- RELEASE_BUS=SC$NULL,-( QUEUE=SC$NULL,-) FREEZE=SC$NULL,-* RELEASE=SC$NULL,-( FLUSH=SC$NULL,- RSVD1=SC$NULL,- RSVD2=SC$NULL,- RSVD3=SC$NULL3 MOVAL 'MAP_BUFFER',SPDT$L_MAP_BUFFER('SPDT_ADDR')0 MOVAL 'UNMAP_BUFFER',SPDT$L_UNMAP('SPDT_ADDR')' MOVAL 'SEND',SPDT$L_SEND('SPDT_ADDR')9 MOVAL 'SET_CONN_CHAR',SPDT$L_SET_CONN_CHAR('SPDT_ADDR')9 MOVAL 'GET_CONN_CHAR',SPDT$L_GET_CONN_CHAR('SPDT_ADDR')) MOVAL 'RESET',SPDT$L_RESET('SPDT_ADDR')- MOVAL 'CONNECT',SPDT$L_CONNECT('SP DT_ADDR')3 MOVAL 'DISCONNECT',SPDT$L_DISCONNECT('SPDT_ADDR')? MOVAL 'ALLO_CMD_BUF',SPDT$L_ALLOC_COMMAND_BUFFER('SPDT_ADDR')C MOVAL 'DEALLO_CMD_BUF',SPDT$L_DEALLOC_COMMAND_BUFFER('SPDT_ADDR')) MOVAL 'ABORT',SPDT$L_ABORT('SPDT_ADDR')1 MOVAL 'SET_PHASE',SPDT$L_SET_PHASE('SPDT_ADDR')5 MOVAL 'SENSE_PHASE',SPDT$L_SENSE_PHASE('SPDT_ADDR')3 MOVAL 'SEND_BYTES',SPDT$L_SEND_BYTES('SPDT_ADDR')9 MOVAL 'RECEIVE_BYTES',SPDT$L_RECEIVE_BYTES('SPDT_ADDR')3 MOVAL 'FINISH_CMD',SPDT$L_FINISH_CMD('SPDT_ADDR')5 MOVAL 'RELEASE_BUS',SPDT$L_RELEASE_BUS('SPDT_ADDR')- MOVAL 'QUEUE',SPDT$L_QUEUE_CMD('SPDT_ADDR')1 MOVAL 'FREEZE',SPDT$L_FREEZE_QUEUE('SPDT_ADDR')3 MOVAL 'RELEASE',SPDT$L_RELEASE_QUEUE('SPDT_ADDR')/ MOVAL 'FLUSH',SPDT$L_FLUSH_QUEUE('SPDT_ADDR')) MOVAL 'RSVD1',SPDT$L_RSVD1('SPDT_ADDR')) MOVAL 'RSVD2',SPDT$L_RSVD2('SPDT_ADDR')) MOVAL 'RSVD3',SPDT$L_RSVD3('SPDT_ADDR') .ENDM INIT_SPDTww­½¶›´£™ .MACRO CREATE_PORT ?SPI$LABEL1 PUSHR #^M& PUT <<13><10>"%%PK, Creating SPDT."> JSB SS$INIT_SPDT JSB SS$INSERT_SPDT_INTO_LIST" MOVL G^EXE$GL_SYS_SPECIFIC,R0; BLSS SPI$LABEL1 JSB SS$INIT_GLOBAL_CELL SPI$LABEL1: POPR #^M .ENDM CREATE_PORTww­EA ›´£™5 .MACRO GOOD_NIGHT REASON,SEVERITY,?GOOD_NIGHT$LABEL1 BUG_CHECK 'REASON','SEVERITY' .ENDM GOOD_NIGHTww­EA ›´£™1.MACRO CALL SUBROUTINE,A1,A2,A3,A4,A5,A6,A7,A8,A9 ..NARGS = 0 ..ALEN = 0(.IRP ..TEMP, .IF NB ..TEMP ..ALEN = -1.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-3! PUSHAL %EXTRACT(3,..ALEN,..TEMP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-3& CVTBL %EXTRACT(3,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-3& CVTWL %EXTRACT(3,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-4' MOVZBL %EXTRACT(4,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-4' MOVZWL %EXTRACT(4,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-3! PUSHAL %EXTRACT(3,..ALEN,..TEMP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-3& CVTBL %EXTRACT(3,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-3& CVTWL %EXTRACT(3,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-4' MOVZBL %EXTRACT(4,..ALEN,..TEMP),-(SP).ENDC.IF EQ %LOCATE(,..TEMP)..ALEN = %LENGTH(..TEMP)-4' MOVZWL %EXTRACT(4,..ALEN,..TEMP),-(SP).ENDC.IF EQ ..ALEN+1 PUSHL ..TEMP.ENDC..NARGS = ..NARGS + 1.ENDC.ENDR CALLS #..NARGS,SUBROUTINE .ENDM CALLww­EA ›´£™<.MACRO PUT STRING,A1,A2,A3,A4,A5,A6,A7,A8,WHEN_DISPLAY,?EXIT+.iif ndf DEBUG_MESSAGES, DEBUG_MESSAGES = 0.IF NE DEBUG_MESSAGES.IF NB 'WHEN_DISPLAY'PUSHL G^SGN$GL_USERD1&BISL3 #^X80000000,(SP),G^SGN$GL_USERD1.ENDC.IF NDF ..XCOUNT ..XCOUNT = 0.ENDC:.MACRO _PUT XLABEL,XSTRING,XA1,XA2,XA3,XA4,XA5,XA6,XA7,XA88 CALL PUT,!A_TEXT'XLABEL,XA1,XA2,XA3,XA4,XA5,XA6,XA7,XA8.SAVE_PSECT LOCAL_BLOCK.PSECT $$$111_TEXT TEXT'XLABEL: .ASCIZ XSTRING.RESTORE_PSECT .ENDM _PUT0 _PUT \..XCOUNT,,A1,A2,A3,A4,A5,A6,A7,A8..XCOUNT = ..XCOUNT + 1.IF NB 'WHEN_DISPLAY'POPL G^SGN$GL_USERD1.ENDC.ENDC.IF lt DEBUG_MESSAGES.SAVE_PSECT LOCAL_BLOCK.PSECT $$$111_TEXT TEXT'EXIT: .ASCIZ STRING.RESTORE_PSECT MOVAL TEXT'EXIT,R0.ENDC .ENDM PUTww­EA ›´£™3.MACRO PUT_0 STRING,A1,A2,A3,A4,A5,A6,A7,A8,?LABEL1% PUT ,A1,A2,A3,A4,A5,A6,A7,A8LABEL1: .ENDM PUT_0ww­EA ›´£™3.MACRO PUT_1 STRING,A1,A2,A3,A4,A5,A6,A7,A8,?LABEL1% PUT ,A1,A2,A3,A4,A5,A6,A7,A8LABEL1: .ENDM PUT_1ww­EA ›´£™3.MACRO PUT_2 STRING,A1,A2,A3,A4,A5,A6,A7,A8,?LABEL1% PUT ,A1,A2,A3,A4,A5,A6,A7,A8LABEL1: .ENDM PUT_2ww­EA ›´£™3.MACRO PUT_3 STRING,A1,A2,A3,A4,A5,A6,A7,A8,?LABEL1% PUT ,A1,A2,A3,A4,A5,A6,A7,A8LABEL1: .ENDM PUT_3ww­EA ›´£™6 .MACRO GET_SCDT_VEC, SPDT=R4, SCDT_VEC=R3, ID, LUN=#0 ASHL #3,ID,ID ADDL LUN,ID, MOVAL SPDT$L_SCDT_VECTOR(SPDT)[ID],SCDT_VEC .ENDM GET_SCDT_VECww­E’;›´£™) .MACRO $PKDEF,GLOBAL,..EQU=<=>,..COL=<:> .SBTTL Include files $UCBDEF $ADPDEF MAX_IDS = 7 PORT_TIMER_EXPIRE = 5*100000*100 BUG$_SCSIPORT = ^X198BUG$_PKNPORT = ^X198 SCSI$C_BUS_HUNG = 1SCSI$C_ARB_FAIL = 2SCSI$C_SEL_FAIL = 3SCSI$C_TIMEOUT = 4SCSI$C_PARITY_ERROR = 5SCSI$C_PHASE_ERROR = 6SCSI$C_BUS_RESET = 7SCSI$C_UNEXPECTED_INTERRUPT = 8SCSI$C_BUS_RESET_ISSUED = 9SCSI$C_RESEL_ERR = 10SCSI$C_CTL_ERR = 11SCSI$C_BUS_ERR = 12SCSI$C_ILLEGAL_MSG = 13SCSI$C_RESERVED5 = 14SCSI$C_RESERVED6 = 15SCSI$C_RESERVED7 = 16SCSI$C_RESERVED8 = 17SCSI$C_RESERVED9 = 18SCSI$C_RESERVED10= 19  $DEFINI .=UCB$K_LCL_DISK_LENGTH$DEF UCB$L_PKN_CUR_DATA,.BLKL$DEF UCB$L_PK_RESEL_ID,.BLKL$DEF UCB$L_AUTO_SCDRP,.BLKL$DEF UCB$L_AUTO_IRP,.BLKL$DEF UCB$L_AUTO_SCDT,.BLKL$DEF UCB$L_AUTO_BCNT,.BLKL$DEF UCB$L_AUTO_RETRIES,.BLKL$DEF UCB$L_AUTO_FORKS,.BLKL$DEF UCB$L_AUTO_STATUS,.BLKL$DEF UCB$L_INIFKBLK .BLKL 6$DEF UCB$L_FKBLKFLAG .BLKL 1 $VIELD UCB,0,<- ,- >.IF DF PKN_PERF$DEF UCB$L_PKN_PERFBEG,.BLKL$DEF UCB$L_PKN_PERFPTR,.BLKL$DEF UCB$L_PKN_PERFEND,.BLKL.ENDCUCB$K_COMMON_AUTO_DEF = .UCB$K_PKN_LENGTH=. $DEFEND UCB ADP$L_CBBITMAP0 = ADP$L_BVPSAVR5!ADP$L_CBBITMAP1 = ADP$L_BVPRETURNADP$L_CBBITMAP2 = ADP$L_BVPTESTADP$L_CBBITMAP3 = ADP$L_BVPSTOP!ADP$L_CBWAITQFL = ADP$L_BVPWAITFL!ADP$L_CBWAITQBL = ADP$L_BVPWAITBL# .ENDM $PKDEF,..EQ U=<=>,..COL=<:>ww­Ý1@›´£™* .MACRO $PKNDEF,GLOBAL,..EQU=<=>,..COL=<:> .SBTTL Include filesMAXBCNT = 65535MAX_FLUSH_BYTES = 255SELECTION_ABORT_TIME = 21SELECTION_TIMEOUT_DELAY = 26RESET_DELAY = 3ARBITRATION_DELAY = 1BUS_CLEAR_DELAY = 1BUS_FREE_DELAY = 1SEL_TQE_RETRY_CNT = 26MAXBLKS = 524287 FORKIPL = 8DEVICEIPL = 20 BFREE_TMO = 1BUS_FREE_COUNT = 10TICK_TIME_TO_WAIT = 100000 TQELIMIT = -& 120*100/WFIKPCH_!MIN = 2WFIKPCH_DATA = 10WFIKPCH_LONG_DATA = 180WFIKPCH_REWIND = 180WFIKPCH_SPACE = 2500PKN_ERROR_LEN = 135PKN_ERROR_REV = 3 BUS_FREE_LIMIT = 100000ARB_START_LIMIT = 500SEL_OK_LIMIT = 500000RESEL_OK_LIMIT = 500000NEXT_PHASE_LIMIT = 100000MATCH_SET_LIMIT = 1000MATCH_CLR_LIMIT = 600DIH_REQ_SET_LIMIT = 5000DIH_REQ_CLR_LIMIT = 5000DOH_REQ_SET_LIMIT = 5000DOH_REQ_CLR_LIMIT = 5000DIH_ACK_SET_LIMIT = 5000DIH_ACK_CLR_LIMIT = 5000DOH_ACK_SET_LIMIT = 5000"DOH_ACK_CLR_LIMIT = 5000  $DEFINI N5380$DEF N5380$B_OUT_DATA$DEF N5380$B_CUR_DATA .BLKL 1$DEF N5380$B_INI_CMD .BLKL 1 $VIELD INI_CMD,0,<- ,- ,- ,- ,- ,- ,- ,- ,- >?INI_CMD$M_WO_BITS = $DEF N5380$B_MODE .BLKL 1 $VIELD MODE,0,<- ,- ,- ,- ,- ,- ,- ,- ,- >$DEF N5380$B_TAR_CMD .BLKL 1 $VIELD TAR_CMD,0,<- ,- ,- ,- ,- >$DEF N5380$B_SEL_ENA$DEF N5380$B_CUR_STAT .BLKL 1 $VIELD CUR_STAT,0,<- ,- ,- ,- ,- ,- ,- ,- ,- >$DEF N5380$B_DMA_SEND$DEF N5380$B_STATUS .BLKL 1 $VIELD STATUS,0,<- ,- ,- ,- ,- ,-%$-; ,- ,- ,- >$DEF N5380$B_DMA_TRCV$DEF N5380$B_IN_DATA .BLKL 1$DEF N5380$B_DMA_IRCV$DEF N5380$B_RESET .BLKL 1$DEF N5380$L_SCD_ADR .BLKL 1 .BLKB 28$DEF N5380$L_SCD_CNT .BLKL 1$DEF N5380$B_SCD_DIR .BLKL 1 $VIELD SCD_DIR,0,<- ,- > $DEFEND N5380  $EQULST SCSI$K_,,0,,<- MSGCMD,- MSGEXT,- MSGSDP,- MSGRDP,- MSGDIS,- MSGIDE,- MSGABO,- MSGREJ,- MSGNOP,- MSGPE,- MSGLCM"D,- MSGLCMDF,- MSGDRST,- >- >SCSI$K_MSGID_DISC = 1@6  $EQULST SCSI$K_,,0,,<- ,- ,- ,- ,- ,- ,- ,- ,- ,- ,- ,- - > $EQULST SCSI$K_,,0,,<- ,- - - - ,- - >$ .ENDM $PKNDEF,..EQU=<=>,..COL=<:>wwº«'íFC›´£™ EAGLEBLD $PKDEF$PKNDEFº«]à‘›´£™ EAGLEBLD $PKSDEFWHICH_INTERRUPTDELAYWITHINSAVE_N5380_REGSCDTFORK$PKXDEFº«M dÝ›´£™ EAGLEBLD LOG_INTERRUPTDISP_INTERRUPTSAVE_N53C94_REG$PKCDEF'­ Âz›´£™# .MACRO $PKSDEF,..EQU=<=>,..COL=<:>MAXBCNT = 65535PKS_ERROR_LOG_LEN = 165PKS_ERROR_REV = 3MAXBLKS = 524287 FORKIPL = 8DEVICEIPL = 20 BFREE_TMO = 1BUS_FREE_COUNT = 10TICK_TIME_TO_WAIT = 100000 TQELIMIT = -& 120*100/WFIKPCH_MIN = 2WFIKPCH_DATA = 3WFIKPCH_TIMEOUT = 20NEXT_PHASE_LIMIT = 100000 $EQULST SCSI$K_,,0,,<- MSGCCMP,- MSGEXT,- MSGSDP,- MSGRPTR,- MSGDSC,- MSGIDE,- MSGABO,(- MSGREJ,- MSGNOOP,- MSGPE,- MSGLCOM,- MSGLCOMF,- MSGBRST,- >- > SCSI$K_MSGID_DISC = 1@6  $DEFINI UCB,GLOBAL . = UCB$K_COMMON_AUTO_DEF$DEF UCB$L_SAVE_CSTAT,.LONG$DEF UCB$L_SAVE_DSTAT,.LONG$DEF UCB$L_ISR_ERROR,.LONG$DEF UCB$L_ISR_ERROR1,.LONG$DEF UCB$L_ISR_COUNT,.LONG$DEF UCB$W_CSTAT_ISR_MASK,.WORD$DEF UCB$W_DSTAT_ISR_MASK,.WORD$DEF UCB$L_PORT_FLAGS,.LONG$DEF UCB$W_PKS_CUR_DATA,.WORD$DEF UCB$W_PK_RESEL_ID,.WORD) $VIELD UCB,0,<- ,- >UCB$K_PKS_LENGTH=. $DEFEND UCB$ .ENDM $PKSDEF,..EQU=<=>,..COL=<:>ww­M‡›´£™*.MACRO WHICH_INTERRUPT RESET ,- ; BUS_FREE ,- PHASE_CHANGE ,- RESELECT ,- SELECT ,- PARITY_ERROR ,- DMA ,- OTHER ,- TRACE ,- SNAPSHOT,-- ?LW1,?LW2,?LW3,?LW4,?LW5,?LW6,?LW7,?LWEXIT.IF NB 5 MOVB N5380$B_CUR_STAT(R2),SPDT$B_CUR_STAT(R4)+ MOVB N5380$B_STATUS(R2),SP*DT$B_STATUS(R4)* ASSUME SPDT$B_MODE+1 EQ SPDT$B_EVENT_CNT) MOVZBW N5380$B_MODE(R2),SPDT$B_MODE(R4) .ENDC.IF NB  CLRB SPDT$B_EVENT_CNT(R4).ENDC.IF NB B PUT <<13><10>"%%PKN, PKNDRIVER INTERRUPT.">,WHEN_DISPLAY=ALWAYS TRACE.ENDC.IF NB  BBC #CUR_STAT$V_RST,-! SPDT$B_CUR_STAT(R4),'LW1' .IF NB  INCB SPDT$B_EVENT_CNT(R4) .ENDC> PUT <<13><10>"%%PKN, RESET INTERRUPT.">,WHEN_DISPLAY = ALWAYS RESET.ENDC'LW1':+.IF NB  BBC #STATUS$V_BSYERR,- SPDT$B_STATUS(R4),'LW2' .IF NB  INCB SPDT$B_EVENT_CNT(R4) .ENDC.IF NB ) PUT <<13><10>"%%PKN, BSYERR INTERRUPT.">.ENDC BUS_FREE.ENDC'LW2':.IF NB  BBC #MODE$V_DMA,-! SPDT$B_MODE(R4),'LW3' BBS #STATUS$V_MATCH,-% SPDT$B_STATUS(R4),'LW3' .IF NB  INCB SPDT$B_EVENT_CNT(R4) .ENDC.IF NB / PUT <<13><10>"%%PKN, PHASE CHANGE INTERRUPT.",>.ENDC PHASE_CHANGE.ENDC'LW3':.IF NB  BBS #CUR_STAT$V_BSY,- SPDT$B_CUR_STAT(R4),'LW4' BBC #CUR_STAT$V_SEL,- SPDT$B_CUR_STAT(R4),'LW4' BBC #CUR_STAT$V_IO,- SPDT$B_CUR_STAT(R4),'LW4' .IF NB  INCB SPDT$B_EVENT_CNT(R4) .ENDC.IF NB . PUT <<13><10>"%%PKN, RESELECTION INTERRUPT.">.ENDC RESELECT.ENDC'LW4':.IF NB