;<134-TENEX>SSASRV.MAC;16 23-MAY-75 11:39:45 EDIT BY ALLEN ; EXTERNED BUGCHK ;<134-TENEX>SSASRV.MAC;15 22-MAY-75 22:52:49 EDIT BY ALLEN ; REMOVE REFERENCE TO FILEDEF ;<133-TENEX>SSASRV.MAC;14 9-DEC-74 16:18:22 EDIT BY CLEMENTS ; ADDED SPECIFIC BUGCHK IN CASE OF NXM SEEN BY SA10 ;SSASRV.MAC;13 7-JUN-74 17:05:59 EDIT BY ALLEN ;SSASRV.MAC;12 5-JUN-74 18:25:13 EDIT BY CLEMENTS ;SSASRV.MAC;11 19-MAY-74 17:46:42 EDIT BY CLEMENTS ;SSASRV.MAC;10 13-MAY-74 12:36:22 EDIT BY CLEMENTS ;SSASRV.MAC;9 9-MAY-74 08:40:24 EDIT BY CLEMENTS ;SSASRV.MAC;8 30-APR-74 22:53:47 EDIT BY CLEMENTS ;SSASRV.MAC;7 30-MAR-74 20:28:54 EDIT BY CLEMENTS ;SSASRV.MAC;6 30-MAR-74 15:03:04 EDIT BY CLEMENTS ;SSASRV.MAC;5 30-MAR-74 14:31:22 EDIT BY CLEMENTS ;SSASRV.MAC;4 29-MAR-74 19:34:31 EDIT BY CLEMENTS ;SSASRV.MAC;3 29-MAR-74 19:21:08 EDIT BY CLEMENTS ;SSASRV.MAC;2 29-MAR-74 19:10:09 EDIT BY CLEMENTS ;SSASRV.MAC;5 23-MAR-74 17:26:22 EDIT BY CLEMENTS ;SSASRV.MAC;4 12-MAR-74 00:13:49 EDIT BY CLEMENTS ;SSASRV.MAC;3 21-FEB-74 11:50:53 EDIT BY CLEMENTS ;SSASRV.MAC;2 19-FEB-74 13:52:22 EDIT BY CLEMENTS ;SSASRV.MAC;1 19-FEB-74 12:14:20 EDIT BY CLEMENTS ; FIRST EDITION OF SSASRV.MAC - RCC - 19 FEB 74 ; COPYRIGHT (C) BOLT, BERANEK & NEWMAN, INC., 1974 SEARCH PROLOG,STENEX ;GET GLOBAL DEFINITIONS IFDEF SSACHN,< ;CONDITION THIS WHOLE FILE ON EXISTENCE ; OF SSA DEVICE TITLE SSASRV ; COMMON ROUTINE FOR SA10 SUBSYSTEM ADAPTOR ; FOR MAGTAPE AND/OR DISK, AND OTHER IBM DEVICES SUBTTL R CLEMENTS, BBN SSABAS==:160 ; BASE ADDRESS OF UP TO 16. WORDS FOR 4 CHANNELS SSA==274 ; PDP-10 I/O BUS ADDRESS OF THE SSA ;EXTERNALS EXTERN SSACHR ; RETURN FROM INTERRUPT EXTERN DEVMPE ; IN CASE OF PARITY ERRORS EXTERN BUGCHK IFDEF SSATF,< EXTERN MTASV,MTAUNT > IFDEF SSADF,< EXTERN DSKSV,DPDEVL > EXTERN BITS,R,SKPRET,BHC,PWRDWN ;USUAL COMMON GLOBALS ;INTERNALS INTERN SSAINI,SSARST,SSASV ;STORAGE FOR SSA LS SSAERD,6 ; ERROR DATA FROM CHANNEL MEMORY ERRORS LS SSAACP,1 ; SAVE AC P ON INTERRUPT LS SSAICH,1 ; CHANNEL NUMBER WHICH IS INTERRUPTING LS SSASVR,1 ; INTERRUPT RETURN PC GS SSAMPF,4 ; PARITY ERROR FLAG, ONE PER SUBCHANNEL LS SSAPDL,30 ; STACK FOR PI LEVEL ;INITIALIZATION ROUTINE CALLED ON COLD START SSAINI: CONO SSA,SA.INI!SA.CME ; CLEAR THE CHANNEL CONTROL IFDEF SSADF,< MOVSI A,(3B1) ; FLAG TO ENTER BLOCK MULTIPLEXOR MODE HRRI A,DPDEVL ; LOW CORE ADDRESS OF DISK BMX AREA MOVEM A,SSABAS+<4*SSADC> ; CONTROL WORD FOR DISC CHANNEL NUMBER IFE SA10BF,< MOVSI A,(B7!B15)> IFN SA10BF,< MOVSI A,(B15!B7)> ; SET BMX CONTROL TO "TERMINATED", MOVSI B,-NPACKS ; FOR ALL DRIVES. SSAIN1: MOVEM A,DPDEVL(B) ; THIS DRIVE IS "TERMINATED" IFE SA10BF,< ADD A,BITS+^D15> ; ADD 1B15, COUNT DEVICE NUMBER. IFN SA10BF,< ADD A,BITS+7> AOBJN B,SSAIN1 SETZM DPDEVL(B) ; AND A ZERO TO TERMINATE THE LIST CONO SSA,SA.PIE!SA.SET!B32 ; TURN ON PI ENB, DSK CHAN > IFDEF SSATF,< ; IF TAPES ON SSA SETZM SSABAS+<4*SSATC> ; NOT BLOCK MULTIPLEXOR ON TAPES. > CONO SSA,SSACHN ; NOW TURN ON THE PI CHANNEL ASSIGNMENT. RET ; BACK TO SYSGO ;RESTART CODE SSARST: CONO SSA,SA.INI!SA.CME ; CLEAR THE CHANNEL CONTROLLER IFDEF SSADF,< MOVSI A,(300B7) ;REGENERATE LOW CORE BMX JUMP HRRI A,DPDEVL ;TO DISK CONTROL BLOCK MOVEM A,SSABAS+<4*SSADC> ; ;RESTART ANY ACTIVE TRANSFERS ; CONO SSA,SA.PIE!SA.SET!B32 ; ALLOW PI'S FROM DISK CONO SSA,SA.GOF!SA.SET!B32 ; SET DISK CHAN GO FLAG > IFDEF SSATF,< SKIPN MTAUNT ;ANY MAGTAPE GOING AT CRASH? JRST SSARS1 ;NO ; ;RESTART MAGTAPE OP ; CONO SSA,SA.GOF!SA.SET!B32 ; SET TAPE CHAN GO FLAG SSARS1: > CONO SSA,SSACHN ; ALLOW PI'S FROM THE SSA RET SSASV: XWD SSASVR,.+1 ; JSYS HERE FROM PISRV ON SSACHN CONSO SSA,SA.PIR ; IS THE SSA REQUESTING AN INTERRUPT? JRST @SSASVR ; NO. MOVEM P,SSAACP ; YES. SET UP A LOCAL STACK MOVE P,SSAPDP ; SET UP PI LEVEL STACK SKIPE PWRDWN ; IS THE WORLD COMING TO AN END? JRST SSAPWF ; YES. POWER FAIL ROUTINE. CONI SSA,A ; NORMAL CASE. READ THE STATE OF SA10. TRNE A,SA.MPE!SA.NXM ; FATAL MEMORY ERRORS? JRST SSAMPE ; YES. BAD NEWS. GO HANDLE. ANDI A,17B32 ; THE FOUR CHANNELS WHICH COULD MAKE PI. JFFO A,.+2 ; SEE WHICH ONE. JRST SSANCI ; NO CHANNEL INTERRUPTING."CAN'T HAPPEN" MOVEI B,-^D29(B) ; SAVE THE CHANNEL NUMBER MOVEM B,SSAICH ; AS "INTERRUPTING CHANNEL". MOVEI C,(B) ; COPY THE CHANNEL NUMBER, AND CONVERT LSH C,2 ; IT TO CORE OFFSET TO CONTROL BLOCK ADDI C,SSABAS ; HERE IS THE CHANNEL CONTROL BLOCK LDB A,[POINT 8,1(C),23] ; DEVICE NUMBER WHICH CAUSED THIS INT MOVE D,1(C) ; CHANNEL AND DEVICE STATUS BYTES IFDEF SSATF,< ; FOR TAPES ... CAIN B,SSATC ; IS IT THE CHANNEL WHICH CONTROLS TAPES JRST [ PUSHJ P,MTASV ; YES. CALL DEVICE ROUTINE. JRST SSAXT1] ; AND DISMISS INTERRUPT > IFDEF SSADF,< ; FOR DISKS ... CAIN B,SSADC ; IS IT THE CHANNEL WHICH CONTROLS DISKS JRST [ PUSHJ P,DSKSV## ; YES. CALL THE DEVICE ROUTINE JRST SSAXT1] ; AND DISMISS INTERRUPT > SSANCI: BUG(CHK,) SSAXIT: MOVE B,SSAICH ; GET THE CHANNEL NUMBER WHICH INT'ED LSH B,3 ; TO CHANNEL SELECTION FIELD CONO SSA,SA.STS+SSACHN(B) ; CLEAR THE STATUS INTERRUPT FLAG SSAXT1: MOVE P,SSAACP ; RESTORE AC P BEFORE INTERRUPT JRST SSACHR ; DISMISS ROUTINE IN PISRV SSAPWF: IFDEF SSADF,< ; IF DISKS ON SSA, PUSHJ P,DSKPWF##> ; CLEAR THEM JRST SSAXT1 ; THATS ALL. SSAMPE: MOVSI 1,-6 ;SIX WORDS OF DIAGNOSTIC DATA MOVEI 2,0 ; CONO RH CONO SSA,0(2) ; SELECT THE WORD ADDI 2,10 ; SLIGHTLY FASTER BETWEEN 2 I/O INSTS DATAI SSA,SSAERD(1) ; GET ERROR INFO AOBJN 1,.-3 ; LOOP 6 WORDS CONO SSA,SA.CME+SSACHN ; LET OTHER CHANNELS GO ON TRNE A,SA.NXM ; MEMORY OFF LINE? JRST SSANXM ; YES. HLRZ 1,SSAERD ; GET CHANNEL USING MEMORY ANDI 1,3 ; TWO BITS AOS SSAMPF(1) ; FOR DEVICE ROUTINE TO SEE IT MOVSI 1,(SIXBIT /SSA/) ; ERROR DEVICE MOVEM 1,DEVMPE ; FOR CLOCK ROUTINE JRST SSAXT1 ; DISMISS SSANXM: BUG(CHK,) JRST SSAXT1 ;TABLES OF EXECUTED INSTRUCTIONS, INDEXED BY CHANNEL NUMBER SSASGO: ; SET GO FLOP FOR SUBCHANNEL CONO SSA,SA.GOF!SA.SET!SA.CH0!SSACHN CONO SSA,SA.GOF!SA.SET!SA.CH1!SSACHN CONO SSA,SA.GOF!SA.SET!SA.CH2!SSACHN CONO SSA,SA.GOF!SA.SET!SA.CH3!SSACHN SSAPDP: XWD -30,SSAPDL-1 ; STACK POINTER ;END OF IFDEF BEFORE TITLE STATEMENT > END