ASMB,Q,C * * >>>>>>>>>>>>>>>>> MULTIPLEXER PRE-DRIVER <<<<<<<<<<<<<<<<<<<<< * * SOURCE: 12792-18001 &PVM00 * RELOC : 12792-16001 %PVM00 * PRGMR : GDD * ***************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSALATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ***************************************************************** * NAM PVM00,0 12792-16001 REV.2032 800605 V.03 EXT $CIC,$YCIC ENT PM00 * * THIS PRE-DRIVER IS TO BE USED TO INTERFACE THE 8 CHANNEL ASYNC * MULTIPLEXER CARD TO RTE'S INTERRUPT SYSTEM. SINCE RTE EXPECTS * EACH I/O CARD TO HAVE A UNIQUE EQT ASSOCIATED WITH IT, A MULTIPLE * EQT CARD SUCH AS THE MUX WILL NOT WORK. (CIC HAS NO WAY OF KNOWING * WHICH EQT TO SET UP BEFORE CALLING THE DRIVER.) THIS MODULE SOLVES * BY PATCHING THE INTERRUPT TABLE FOR THE CORRECT EQT BEFORE RTE * LOOKS AT IT. THE MODULE OPERATES AS FOLLOWS: * * 1. EVERY CARD INTERRUPT IS DIRECTED TO THIS MODULE INSTEAD OF $CIC. * ON FIRST ENTRY, THE DRIVER SETS UP A LINK FROM THE TRAP CELL TO * THIS MODULE, AND SAVES THE ADDRESS OF THE PROGRAM ID SEGMENT TO * SCHEDULE (FROM THE INTERRUPT TABLE), IF PRESENT, IN THE EQT. * THE REST OF THE EQT IS INITIALIZED, ALONG WITH ALL OTHER EQT'S * USING THIS CARD. * * 2. ON ENTRY THE PRE-DRIVER TURNS OFF INTERRUPTS AND SAVES THE STATE * OF THE MACHINE. IF THE SYSTEM BEING RUN UNDER IS PRIVILEGED, THE * DMA CHANNELS ARE DISABLED, THE PI CARD IS SET, AND THE INTERRUPT * SYSTEM IS RESTORED. * * 3. THE SELECT CODE OF THE CARD INTERRUPTING IS READ (LIA 4) AND * SAVED, THE CARD'S ENTRY IN THE INTERRUPT TABLE IS FETCHED. * * 4. THE VALUE OF THE INTERRUPT TABLE ENTRY IS USED TO INDICATE THE * EQT POSSIBLY USING THE CARD. BIT 15 OF EQT WORD 11 IS SET IF IT * IS, RESET IF NOT. IF THE BIT IS SET, THE VALUE IN THE INTERRUPT * TABLE ALREADY POINTS TO THE CORRECT EQT TO BE SET UP. * THIS IS THE NORMAL WAY CIC WORKS, AND NO ACTION IS NEEDED. * A ZERO VALUE MEANS THAT THE INTERRUPT IS UNSOLICITED, AND BITS * 0-7 OF THE WORD PLACED IN THE BACKPLANE LATCH HAVE BEEN SET TO * THE EQT# OF THE CHANNEL GENERATING THE INTERRUPT. THE EQT# WAS * PASSED TO THE CARD WHEN THE CHANNEL WAS INITIALIZED, AND IS USED * TO PATCH THE INTERRUPT TABLE WITH THE CORRECT EQT ADDRESS BEFORE * ENTERING CIC. * * 5. THE SUSPEND POINT OF THE PROGRAM RUNNING WHEN THE INTERRUPT OCCURRED * IS MOVED TO $CIC. THE A REGISTER IS SET TO THE SELECT CODE OF THE * CARD AND THE SYSTEM ENTERED AT $YCIC. * * SYSTEM EQUATES * A EQU 0 B EQU 1 EQTA EQU 1650B INTBA EQU 1654B MPTFL EQU 1770B XA EQU 1731B XB EQU 1732B XEO EQU 1733B DUMMY EQU 1737B SC OF PRIV CARD IF PRIV SYSTEM * PM00 NOP CLF 0 TURN INTS OFF! STA XA,I SAVE REGISTERS STB XB,I ERA,ALS SAVE E/O SOC INA STA XEO,I LIA 4 GET CARD'S SELECT CODE STA SCODE ..SAVE ISZ MPTFL INDICATE MP IS OFF PATCH JMP SETUP IF FIRST CALL GO CHECK FOR PRIV SYS. NOP'D AFTER CALL SWTCH JMP NOTP STC DUMMY IF PRIV SYS CLC 6 KILL DMA INTS CLC 7 STF 0 TURN ON INTS NOTP LDA SCODE CREATE CLF INST IOR #CLF STA *+1 NOP CLF SC LDB SCODE ADB INTBA FIND INTERRUPT TABLE ENTRY ADB DM6 LDA B,I FETCH.. ADA #PSW BUMP TO PORT STATUS WORD IN EQT LDA A,I FETCH.. SSA IF BUSY BIT NOT SET, SKIP TO UNSOLICITED PROCESSING JMP EXIT BIT SET, INT WAS SOLICITED, EXIT * LDA SCODE UNSOLICITED INTERRUPT: FETCH CARD DATA IOR #LIA MAKE LIA SC STA *+1 NOP AND B377 MASK TO GET PORT KEY (EQT#-1) STA TMP ALF PORT KEY * 16 CMA,INA ADA TMP CMA,INA PORT KEY * 15 ADA EQTA ADD ON EQT TABLE BASE = ADDR OF THIS GUY'S EQT STA TMP SAVE FOR LATER * ADA B3 BUMP POINTER TO EQT WORD 4.. LDA A,I ..TO VERIFY VALID MUX EQT AND B77 GET SELECT CODE CPA SCODE OK? JMP SCOK YES JMP EXIT NO, LEAVE INTERRUPT TABLE AS IS..DRIVER SHOULD HANDLE IT * SCOK LDA TMP NEW EQT ADDRESS... STA B,I PATCH INT TBL FOR CIC * EXIT LDA PM00 MOVE PGM SUSPEND POINT.. STA $CIC ..WHERE RTE CAN FIND IT CLA CLF 0 LIGHTS OUT! STA MPTFL CLEAR SO THAT CIC WON'T SET TO 2 LDA SCODE SET CARD SC FOR RTE JMP *+1,I ENTER SYSTEM DEF $YCIC+0 * SETUP LDA DUMMY FIRST CALL: CHECK FOR PRIVILEGED SYSTEM SZA,RSS JMP SWTC1 NOT PRIV IOR #STC PRIV: MAKE STC DUMMY STA SWTCH TO SET P.I. CARD BEFORE RE-ENABLING INTS SWTC1 CLA NOP JUMP TO THIS ROUTINE STA PATCH ..SINCE WE DON'T NEED TO DO IT AGAIN JMP SWTCH RETURN TO MAIN LINE CODE * * PRE-DRIVER TEMPORARIES * TMP NOP SCODE NOP * * CONSTANTS * #LIA LIA 0 #CLF CLF 0 #STC STC 0 #PSW DEC 10 OFSET TO PSW IN EQT FROM EQT1 B377 OCT 377 DM6 DEC -6 B3 OCT 3 B77 OCT 77 * END END$