.TITLE MBAINTDSP - MASSBUS ADAPTER INTERRUPT DISPATCHER .IDENT /01/ ; ; COPYRIGHT (C) 1977 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- ; SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY ; OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE ; AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM ; AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; D. N. CUTLER 30-JAN-77 ; ; MASSBUS ADAPTER INTERRUPT DISPATCHER ; ; MACRO LIBRARY CALLS ; $DDBDEF ;DEFINE DDB OFFSETS $DDTDEF ;DEFINE DDT OFFSETS $MBADEF ;DEFINE MBA REGISTER OFFSETS $IDBDEF ;DEFINE IDB OFFSETS $UCBDEF ;DEFINE UCB OFFSETS .PAGE .SBTTL MASSBUS ADAPTER INTERRUPT DISPATCHER ;+ ; MBA$INT - MASSBUS ADAPTER INTERRUPT DISPATCHER ; ; THIS ROUTINE IS ENTERED VIA A JSB INSTRUCTION WHEN AN INTERRUPT OCCURS ; ON A MASSBUS ADAPTER. THE STATE OF THE STACK ON ENTRY IS: ; ; 00(SP) = ADDRESS OF IDB ADDRESS. ; 04(SP) = SAVED R2. ; 08(SP) = SAVED R3. ; 12(SP) = SAVED R4. ; 16(SP) = SAVED R5. ; 20(SP) = INTERRUPT PC. ; 24(SP) = INTERRUPT PSL. ; ; INTERRUPT DISPATCHING OCCURS AS FOLLOWS: ; ; IF THE INTERRUPTING ADAPTER IS CURRENTLY OWNED AND THE OWNER UNIT ; IS EXPECTING AN INTERRUPT, THEN THAT UNIT IS DISPATCHED FIRST. ALL ; OTHER UNITS ARE DISPATCHED BY READING THE ATTENTION SUMMARY REG- ; ISTER AND SCANNING FOR UNITS THAT HAVE ATTENTION SET. AS EACH UNIT ; IS FOUND, ITS ATTENTION SUMMARY BIT IS CLEARED AND THEN A TEST IS ; MADE TO DETERMINE IF AN INTERRUPT IS EXPECTED ON THE UNIT. IF YES, ; THEN THE DRIVER IS CALLED AT ITS INTERRUPT RETURN ADDRESS. ELSE ; THE DRIVER IS CALLED AT ITS UNSOLICITED INTERRUPT ADDRESS. AS EACH ; CALL TO THE DRIVER RETURNS, THE ATTENTION SUMMARY REGISTER IS RE- ; READ AND AN ATTEMPT IS MADE TO FIND ANOTHER UNIT TO DISPATCH. WHEN ; NO UNITS REQUESTING ATTENTION REMAIN, THE INTERRUPT IS DISMISSED. ; ; TWO CONDITIONS CAUSE ERROR LOG ENTRIES: ; ; 1. A NONEXISTENT (AS FAR AS SOFTWARE IS CONCERNED) UNIT REQUESTS ; ATTENTION. ; ; 2. NO UNITS ARE REQUESTING ATTENTION AND THE MBA IS NOT OWNED OR ; THE OWNER UNIT IS NOT EXPECTING AN INTERRUPT. ;- .PSECT WIONONPAGED MBA$INT:: ;MASSBUS ADAPTER INTERRUPT DISPATCHER MOVL @(SP),R3 ;GET ADDRESS OF IDB MOVL IDB$L_CSR(R3),R4 ;GET ADDRESS OF CONFIGURATION STATUS REGISTER MOVL IDB$L_OWNER(R3),R5 ;GET OWNER UNIT UCB ADDRESS BEQL 10$ ;IF EQL NO OWNER MOVZBL UCB$B_SLAVE(R5),R2 ;GET OWNER SLAVE CONTROLLER NUMBER BBS #UCB$V_INT,UCB$W_STS(R5),30$ ;IF SET, INTERRUPT EXPECTED 10$: BITL #^XFF,MBA$L_AS(R4) ;ANY UNIT REQUESTING ATTENTION? BEQL 60$ ;IF EQL NO 20$: MOVL @(SP),R3 ;RETRIEVE ADDRESS OF IDB MOVL IDB$L_CSR(R3),R4 ;RETRIEVE MBA CONFIGURATION REGISTER ADDRESS MCOML #0,MBA$L_SR(R4) ;CLEAR ALL MBA STATUS BITS MOVL MBA$L_AS(R4),R2 ;READ ATTENTION SUMMARY REGISTER FFS #0,#8,R2,R2 ;FIND FIRST UNIT REQUESTING ATTENTION BEQL 50$ ;IF EQL NONE 30$: ASHL R2,#1,MBA$L_AS(R4) ;CLEAR ATTENTION SUMMARY BIT CMPB R2,IDB$B_UNITS(R3) ;LEGAL UNIT NUMBER? BGEQ 60$ ;IF GEQ NO MOVL IDB$L_UCBLST(R3)[R2],R5 ;GET ADDRESS OF UCB OR INTERRUPT DISPATCHER BLBS R5,70$ ;IF LBS INTERRUPT DISPATCHER ADDRESS BBCC #UCB$V_INT,UCB$W_STS(R5),40$ ;IF CLR, INTERRUPT NOT EXPECTED MOVQ UCB$L_FR3(R5),R3 ;RESTORE DRIVER CONTEXT JSB @UCB$L_FPC(R5) ;CALL DRIVER AT INTERRUPT RETURN ADDRESS BRB 20$ ; 40$: MOVL UCB$L_DDB(R5),R3 ;GET ADDRESS OF DDB MOVL DDB$L_DDT(R3),R3 ;GET ADDRESS OF DDT JSB @DDT$L_UNSOLINT(R3) ;CALL DRIVER AT UNSOLICITED INTERRUPT ADDRESS BRB 20$ ; 50$: ADDL #4,SP ;CLEAN STACK POPR #^M ;RESTORE REGISTERS REI ; 60$: ;********TEMP******** ;********* ; LOG UNEXPECTED/UNDEFINED INTERRUPT ;********* BRB 20$ ; 70$: MOVPSL -(SP) ;READ CURRENT PSL JSB -(R5) ;CALL SLAVE CONTROLLER INTERRUPT DISPATCHER BRB 20$ ; .PAGE .SBTTL MASSBUS ADAPTER INITIALIZATION ;+ ; MBA$INITIAL - MASSBUS ADAPTER INITIALIZATION ; ; THIS ROUTINE IS CALLED VIA A JSB INSTRUCTION AT SYSTEM STARTUP AND AFTER ; A POWER RECOVERY RESTART TO ALLOW INITIALIZATION OF MASSBUS ADAPTERS. ; ; INPUTS: ; ; R4 = CSR ADDRESS OF MASSBUS ADAPTER. ; R5 = ADDRESS OF ADAPTER IDB. ; ; ALL INTERRUPTS ARE LOCKED OUT. ; ; OUTPUTS: ; ; THE MASSBUS ADAPTER IS INITIALIZED AND INTERRUPTS ARE ENABLED. ;- MBA$INITIAL:: ;MASSBUS ADAPTER INITIALIZATION MOVL #MBA$M_CR_INIT,MBA$L_CR(R4) ;INITIALIZE MASSBUS ADAPTER MOVL #MBA$M_CR_IE,MBA$L_CR(R4) ;ENABLE INTERRUPTS RSB ; .END