ASMB,R,Q,C HED ** TRAP TABLE MODULE FOR RTE-L ** 92076-1X026 REV.2040 NAM TRAP,6 92076-1X026 REV. 2040 800730 92076-12002 * * ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** * * ADDED REV. CODE TO NAM 791228 * * NAME: TRAPPING MODULE FOR BASIC/L. MUST BE GENERATED IN * MEMORY RESIDENT LIBRARY PHASE. * SOURCE: 92076-18026 * RELOC: PART OF 92076-12002 * PGMR: B.J.L. * * ************************************************************** * * ENTRY POINTS: * ENT TRAP,TIME ENT TRPNT,FINDS,TRMAK,TRDEL ENT TRPNO,SEKNO,PRINO ENT TRTBL,TRPTR,TRNXT,TRFLG ENT TRMSK,TRAP# ENT TSEND,TSTIM,TSNXT,TSTBL,TSCNT,TSPTR ENT SRQ.T * * * * EXTERNAL REFERENCES: * EXT $LIBR,$LIBX,IXGET EXT $TIME,$XQT,$CON EXT .FMP,.FLT,.FAD,.FSB,.FDV * * ADDED CALLS TO RTE-L ROUTINES $XQT,$CON 791022*** * ADDED CALLS TO .FMP,.FLT,.FAD,.FSB,.FDV 791022*** * ADDED CALL TO IXGET FOR L20 800627****** * * ** TRAP ** DO VARIOUS TRAP NUMBER ORIENTED OPERATIONS * * THIS ROUTINE HAS FOUR CALLING SEQUENCES DEPENDING ON ITS FUNCTION. * THE NOMINAL CALLING SEQUENCE, ASSOCIATED WITH EXECUTION OF THE * BASIC TRAP STATEMENT, IS AS FOLLOWS: * * LDA MINUS THE TRAP NUMBER * LDB SEQUENCE NUMBER (FROM TRAP STMT,MAY BE - ) * JSB TRAP * JMP ERR1 (ERROR RETURN) * RETURN * **************************************************** * * THIS ROUTINE IS CALLED JUST * BEFORE EXECUTING EACH LINE OF BASIC CODE: * * LDA MINUS 1000 DECIMAL (USED TO FLAG THIS CASE) * LDB POINTER TO STATEMENT ABOUT TO BE EXECUTED * JSB TRAP * JMP ERR (ERROR RETURN) * RETURN (SEE NOTE) * * NOTE: WHEN THIS CALL IS RECOGNIZED (.A.=-1000) THE * TRAP TABLE IS POLLED TO DETERMINE IF PROGRAM * SHOULD BE INTERRUPTED BY A TIME OR EVENT * SCHEDULED TASK. * * RETURN VALUES IF PROGRAM IS TO BE INTERRUPTED * * .A.= SEQUENCE NUMBER FROM TRAP TABLE * .B.= SEQUENCE NBR THAT WOULD HAVE BEEN EXECUTED OTHERWISE * * RETURN VALUES IF PROGRAM IS NOT TO BE INTERRUPTED * * .A.= -1 (SERVES AS FLAG FOR THIS CASE) * .B.= ADDRESS OF STATEMENT TO BE EXECUTED NEXT * **************************************************** * * WHEN A TASK IS SCHEDULED IN THE ABOVE MANNER, ITS * RETURN STATEMENT RESULTS IN YET ANOTHER CALL: * * LDA MINUS 256 DECIMAL (USED AS FLAG) * LDB MINUS SEQ NBR TO BE RETURNED TO * JSB TRAP * JMP ERR (ERROR RETURN) * RETURN .A.= RETURN SEQUENCE NUMBER * **************************************************** * * FINALLY TRAP IS CALLED TO INITIALIZE OR FREE UP THE TRAP * TABLE AT THE BEGINNING OR END OF EXECUTION PHASE: * * LDA 1 DECIMAL INDICATES AN INITIALIZE REQUEST * OR LDA 2 DECIMAL INDICATES A TERMINATE REQUEST * JSB TRAP * JMP ERR (ERROR RETURN) * RETURN * **************************************************** * TRAP NOP JSB $LIBR OCT 177777 **791022** STB LYNNO SAVE INCOMING LINE NO. SSA,RSS IS THIS AN INIT OR TERM REQUEST? JMP INIT YES! CPA M1000 IS THIS THE POLLING CALL JMP LINE YES CPA M256 IS THIS THE TASK RETURN CALL? JMP TRRET YES CMA,INA MAKE TRAP NUMBER POSITIVE ALF,ALF POSITION IT, STA TRPNO AND SAVE IT SSB IF SEQ NBR IS NEGATIVE CCA SET TFLAG TO -1 STA TFLAG ELSE SET IT POSITIVE SSB CMB,INB MAKE SURE SEQ NBR IS POSITIVE STB SEKNO THEN SAVE IT STB TRFLG ENABLE TRAP TABLE SEARCH LDA 1 JSB FINDS LOOK FOR ENTRY WITH THAT SEQ NBR JMP STRA1 NOT FOUND LDA TRPTR FOUND STA BSCT2 SAVE ADDRESS OF ENTRY LDA TRPNO JSB FINDT LOOK FOR ENTRY WITH THIS TRAP NO JMP STRA2 NOT FOUND LDB TRPTR IS THIS THE SAME ENTRY WE FOUND CPB BSCT2 WITH THE GIVEN SEQ NBR? JMP STRA4 YES, ENTRY IS ALREADY THERE LDA .2 ILLEGAL JMP RTRAP+1 COMBINATION ERROR STRA1 LDA TRPNO JSB FINDT LOOK FOR ENTRY WITH THIS TRAP NO JMP STRA3 NOT FOUND, MUST MAKE NEW ENTRY * ** HERE TO RESET TRAP BIT (IF POS IN TRAP STMT) * STRA4 LDB TRPTR LDA 1,I FOUND, REPLACE SEQ NBR IN ENTRY AND BIT15 PRESERVE TRAP BIT ISZ TFLAG IF GIVEN SEQ NBR WAS POSITIVE, CLA CLEAR TRAP BIT IOR SEKNO INSERT GIVEN SEQ NBR STA 1,I AND STORE INTO ENTRY * ** COME HERE TO ENABLE TRAP AND RETURN * INB GET SECOND LDA 1,I WORD OF ENTRY IOR BIT15 SET ENABLE BIT STA 1,I AND PUT BACK IN ENTRY JMP RTRAP RETURN (P+2) * ** HERE TO CREATE A NEW ENTRY * STRA3 LDA .99 SET DEFAULT STA PRINO PRIORITY (99) JSB TRMAK MAKE NEW ENTRY RSS NO ROOM JMP STRA4 DONE, RETURN CLA,INA TRAP JMP RTRAP+1 TABLE FULL * ** HERE WHEN ENTRY WITH SEQ NBR BUT NOT TRAP # FOUND * STRA2 LDB TRPTR INB LDA 1,I GET SECOND WORD OF ENTRY AND PRMSK SAVE PRIORITY IOR TRPNO INSERT TRAP NBR STA 1,I PUT BACK IN ENTRY JMP STRA4 ENABLE IT AND RETURN SKP * ** COME HERE TO INITIALIZE THE TRAP TABLE ** FOR CALL INFO, SEE COMMENTS PRECEEDIND TRAP ENTRY POINT * * ** HERE TO INITIALIZE TABLES AT BEGINNING OF EXECUTION PHASE. * * THE FOLLOWING CODE WAS REDONE TO HAVE TRAP FUNCTION * CORRECTLY (800730) * INIT CPA .2 TERMINATE REQUEST? ISZ TERMC YES, SET TERMINATE FLAG * JSB IXGET ROUTINE DUE TO L20 DEF INI1 DEF @CON GET ADDRESS OF $CON INI1 STA TEMP1 AND CALL AGAIN BECAUSE JSB IXGET OF INDIRECT DEF INI2 DEF TEMP1 RUN # ADDRESS INI2 STA .CON HAVE VALUE IN $CON JSB IXGET NOW GET VALUE FOR $XQT DEF INI3 DEF @XQT INI3 STA .XQT * JSB IXGET GO CHECK FOR CALLING PROG DEF INI4 BEING CURRENT OWNER AND DEF OSEQA ACTIVE INI4 AND B170 CPA SEQ# CURRENT RUN # JMP INI5 YES, GO ON THEN CLB NO, THEN MAKE SO NEW CALLER CAN STB CUPGM BECOME OWNER * INI5 LDA CUPGM USE ID SEG PTR OF CURRENT PRG. SZA,RSS IS THERE AN OWNER? JMP INITA NO, MAKE CURRENT CALLER OWNER CPA .XQT IS THIS RIGHT PROGRAM JMP INITB YES, GO ON THEN JSB CTERM NO, CHECK FOR TERM. TYPE CALL JMP RTRAP YES, JUST RETURN WITHOUT ERROR JMP INIT1 NO, SEND TRAP BUSY MESSAGE TO CALLER * INITA LDA .XQT GET CALLING PROGRAM ID SEG PTR. STA CUPGM AND SAVE FOR LATER ID LDA .CON GET SEQ# OF CALLER AND B170 AND MASK OFF # STA SEQ# FOR LATER REFERENCE LDA TEMP1 SAVE CURRENT OWNER'S RUN# STA OSEQA ADDRESS FOR LATER CHECK * * HERE IF CURRENT PROG. IS CALLING PROGRAM AND ACTIVE * AS WELL AS NEW OWNER. * INITB JSB CTERM CHECK FOR TERM. TYPE CALL JMP TERM YES, ALLOW TO TERMINATE LDA TRTBL NO INITIALIZE STA TRNXT TRAP TABLE STA TRPTR POINTERS LDA TSTBL INITIALIZE STA TSNXT TIME SCHED TABLE STA TSPTR POINTERS JSB TIME INITIALIZE TIME OF LAST CHECK DEF *+2 DEF TSTIM OF TIME SCHD TABLE DLD MAXNG MAX NEGATIVE FLOAT PT NBR DST TSCNT INITIALIZE TIME TO EXECUTION CNT LDA PRSTK INITIALIZE STA TRPRI PRIORITY STACK CLA DONT NEED TO SEARCH FOR TRAP STA TRFLG BITS UNTIL SOMETHING HAPPENS JMP RTRAP * @CON DEF $CON @XQT DEF $XQT TEMP NOP TEMP1 NOP .XQT NOP .CON NOP OSEQA NOP TERMC NOP * TERM CLA CLEAR OUT STA CUPGM USER IDENT NUMBER STA SEQ# AND USER SEQ# **791022** JMP RTRAP RETURN * INIT1 LDB M1 SET FLAG SO BASIC DOESN'T JMP RTRAP COME DONE HERE THRU THE 'LINE' CALL * FOR EVERY STATEMENT * CTERM NOP CHECK FOR TERM. TYPE CALL LDB TERMC SZB,RSS IF IT IS, FLAG >0 THEN JMP CTEX RETURN TO P+1 CLB STB TERMC AND CLEAR THE FLAG RSS CTEX ISZ CTERM ELSE, RETURN TO P+2 JMP CTERM,I * SKP * ** HERE TO DO END OF LINE TRAP TABLE POLLING * LINE JSB TIMCK LDB TRFLG IS TRAP TABLE SEARCH NECESSARY? SZB JMP LINE8 YES LINE9 LDA M1 .A.=-1 MEANS DONT INTERRUPT PROG LDB LYNNO RESTORE INCOMING VALUE OF B REG JMP RTRAP RETURN * ** HERE FOR RETURN IF TABLE SEARCHED BUT NO INTERRUPT NEEDED * LINE3 CLA NO NEED TO SEARCH AGAIN STA TRFLG UNTIL SOMETHING HAPPENS JMP LINE9 RETURN (NO INTERRUPT) * ** HERE TO DO TRAP TABLE SEARCH * LINE8 LDB TRTBL INITIALIZE .B. TO FRONT OF TABLE LINE1 CPB TRNXT END OF TABLE JMP LINE3 YES LDA 1,I NO, GET FIRST WORD OF ENTRY INB AND 1,I "AND" TRAP BIT WITH ENABLE BIT SSA ARE BOTH BITS SET? JMP LINE2 YES INB ADVANCE TO NEXT ENTRY JMP LINE1 AND LOOP * ** HERE IF BOTH TRAP AND ENABLE BITS SET * LINE2 ADB M1 LDA 1,I GET FIRST WORD OF ENTRY ELA,CLE,ERA CLEAR TRAP BIT SZA IS SEQ NBR ZEROED OUT? JMP LINE4 NO ADB .2 YES, ADVANCE TO NEXT ENTRY JMP LINE1 AND KEEP LOOKING LINE4 STB TRPTR SAVE POINTER TO ENTRY INB LDA 1,I GET SECOND WORD OF ENTRY AND PRMSK EXTRACT PRIORITY CMA,INA IF PRIORITY OF THIS TASK IS ADA TRPRI,I EQUAL OR LESS THAN THE ONE CMA,INA SSA,RSS BEING PROCESSED, JMP LINE3 EXIT (NO INTERRUPT) * ** HERE TO DO INTERRUPT OF PROGRAM * LDA 1,I AND PRMSK GET PRIORITY AGAIN ISZ TRPRI BUMP PRIORITY STACK POINTER STA TRPRI,I SET UP WITH CURRENT PRIORITY LDB TRPTR LDA 1,I CLEAR TRAP BIT ELA,CLE,ERA IN THIS STA 1,I ENTRY LDB LYNNO,I ENTER SEQ NBR FOR RETURN CMB,INB COMPLEMENT IT TO FLAG AS TASK JMP RTRAP RETURN * ** COME HERE TO PROCESS RETURN FROM AN INTERRUPT ** STARTED TASK. A NEGATIVE RETURN ADDRESS RESULTS ** IN TRANSFER TO THE TRAP ROUTINE AND THEN TO THE ** FOLLOWING CODE. * TRRET CMB,INB MAKE SEQ NBR POSITIVE LDA 1 MOVE IT TO A REG LDB TRPRI POP THE ADB M1 PRIORITY STB TRPRI STACK STB TRFLG AND ENABLE TRAP TABLE SEARCH RTRAP ISZ TRAP JSB $LIBX RETURN (P+1) DEF TRAP,I **791022*** * SKP ***** * ** TIMCK ** ROUTINE TO CHECK TIME SCHED TABLE * * JSB TIMCK * RETURN * ***** * TIMCK NOP JSB TIME SAVE DEF *+2 DEF TIMT1 CURRENT TIME TIMC3 JSB .FSB GET-TIME ELAPSED FROM LAST CHECK**791022** DEF TSTIM **791022** SSA,RSS CORRECT JMP TIMC4 FOR CHANGE JSB .FAD **791022** DEF FLDAY OF DAY **791022** TIMC4 JSB .FAD UPDATE SECONDS TO EXECUTION **791022** DEF TSCNT **791022** DST TSCNT SSA,RSS HAS THAT TIME ELAPSED? JMP TIMC1 YES DLD TIMT1 NO, UPDATE TIME OF LAST CHECK DST TSTIM JMP TIMCK,I AND RETURN * ** HERE IF TASK AT TOP IS TO BE SCHEDULED * TIMC1 LDB TSNXT ADB M1 LDA 1,I GET SEQ NBR ADB M2 BACK UP TSNXT TO STB TSNXT DELETE ENTRY JSB FINDS LOOK FOR ENTRY WITH THAT SEQ NBR JMP TIMCE NOT FOUND LDB TRPTR LDA 1,I FOUND, IOR BIT15 SET TRAP BIT STA 1,I STA TRFLG SET UP TO POLL TABLE * ** HERE TO SET UP NEXT ENTRY * LDB TSNXT SET POINTER ADB M3 TO NEXT STB TSPTR ENTRY DLD TSTIM USE OLD VALUE OF CURRENT TIME JSB .FSB SINCE THIS TASK MAY HAVE TO BE **791022** DEF TSPTR,I **791022** SSA EXECUTED NOW ALSO JMP TIMC2 JSB .FSB IF POSITIVE, SET UP FOR TOMORROW **791022** DEF FLDAY **791022** TIMC2 DST TSCNT SET UP NEW COUNTER DLD TIMT1 GET REAL CURRENT TIME VALUE JMP TIMC3 AND TRY AGAIN TIMCE LDA .6 CAN'T RUN BECAUSE JMP RTRAP+1 ITS BEEN DELETED SKP **************************************************************** * * * BASIC TIME STATEMENT * * **************************************************************** * * * *THIS ROUTINE IS A FORTRAN AND BASIC CALLABLE ROUTINE THAT *RETURNS THE TIME OF DAY IN FLOATING POINT SECONDS TO THE *NEAREST 100 MS (OR TENTH OF A SECOND).THE VALUE OF ZERO *REPRESENTS MIDNIGHT. * * JSB TIME ASSEMBLY LANGUAGE * DEF *+2 * DEF TI * * 100 TIME(T) BASIC * * ON RETURN A/B=TIME IN TENS OF MS * * *****************************ADDED 800627********************************* TIM$ DEF $TIME DEF $TIME+1 ******************************800627************************************** TM BSS 1 TIME NOP JSB $LIBR OCT 0 MUST GO COMPLETE PRIVILEGE TO FREEZE ISZ TIME CLOCK 800627 LDA TIME,I GET PTR STA TM TO TIME ISZ TIME *******************************ADDED 800627******************************* JSB IXGET RECREATE THE DLD FUNCTION OF GETTING DEF RTIM1 TIME FROM $TIME IN THE L20. DEF TIM$+1 RTIM1 STA TEMP GET MINS AND SECONDS FIRST JSB IXGET DEF RTIM2 DEF TIM$ RTIM2 LDB TEMP *******************************800627***************************** CLE CLEAR FOR ADD ADA PRS1 CONVERT TO POSITIVE 24HRS SEZ INB ADB PRS2 DIV .6000 A=MINS,B=SECS STA MINS ASR 16 POSITION FOR DIV DIV .100 A=SECS,B=10S OF MS STB MS10 JSB .FLT **791022** DST TM,I TEMPORARY TIME LDA MINS JSB .FLT **791022** JSB .FMP MINS IN SECONDS **791022** DEF F.60 **791022** JSB .FAD **791022** DEF TM,I **791022** DST TM,I LDA MS10 MS IN SECONDS JSB .FLT **791022** JSB .FDV **791022** DEF F.100 **791022** JSB .FAD **791022** DEF TM,I **791022** DST TM,I JSB $LIBX RETURN DEF TIME **800627** SKP * .6000 DEC 6000 PRS1 OCT 153000 PRS2 OCT 203 MS10 BSS 1 MINS BSS 1 .100 DEC 100 F.60 DEC 60. F.100 DEC 100. ******************* PRIORITY STACK ************** * PRSTK DEF *+1 POINTER TO FIRST ENTRY DEC 100 FIRST ENTRY IS PRIORITY 100 BSS 21 ALLOW 21 ACTUAL ENTRIES PREND DEF * POINTER TO END OF STACK AREA+1 TRPRI NOP POINTER TO TOP ENTRY ON STACK * ************************************************** ****************** TIME SCHED TABLE ************* * * WORD 1&2: FLOATING POINT TIME (SEC) * * WORD 3 SEQUENCE NUMBER * TSTBL DEF *+1 POINTER TO BEGINNING OF TABLE BSS 48 ALLOW 16 ENTRIES TSEND DEF * POINTER TO END+1 OF TABLE TSPTR NOP GENERAL USE TABLE POINTER TSNXT NOP POINTER TO NEXT FREE ENTRY TSTIM BSS 2 TIME OF LAST UPDATE OF TIME SCHD TSCNT BSS 2 -# SECONDS TILL SCHED NEXT TASK * * ********************************************************* SKP * .2 DEC 2 .6 DEC 6 .99 DEC 99 M1 DEC -1 M2 DEC -2 M3 DEC -3 M256 DEC -256 M1000 DEC -1000 MAXNG OCT 100000 OCT 376 FLDAY DEC 86400. NO. OF SECONDS/DAY LYNNO NOP TIMT1 BSS 2 BSCT2 NOP TFLAG NOP CUPGM NOP *XEQT EQU 1717B **791022** B170 OCT 170000 **791022** SEQ# NOP **791022** SKP ***** * ** FINDS ** FIND TRAP TABLE ENTRY WITH GIVEN SEQUENCE NUMBER * * LDA SEQUENCE NUMBER * JSB FINDS * RETURN1 NO SUCH ENTRY FOUND * RETURN2 ENTRY FOUND, TRPTR AND .B. POINT TO IT * * NOTE: TRPTR NOT ALTERED IF ENTRY NOT FOUND * ***** * FINDS NOP JSB $LIBR OCT 177777 **791022** STA BSCT1 SAVE SEQUENCE NUMBER LDB TRNXT USE .B. FOR TRAP TABLE POINTER CPB TRTBL IS TABLE EMPTY? JMP FNDS3 YES, RETURN (P+1) FNDS1 ADB M2 MOVE TO NEXT ENTRY LDA 1,I GET SEQ NBR FROM ENTRY ELA,CLE,ERA IGNORE TRAP BIT CPA BSCT1 DO SEQ NBRS MATCH? JMP FNDS2 YES, FOUND IT CPB TRTBL NO, IS TABLE EXHAUSTED? JMP FNDS3 TABLE EXHAUSTED, RETURN (P+1) JMP FNDS1 MORE ENTRIES, CHECK THEM * ** COME HERE WHEN ENTRY FOUND * FNDS2 ISZ FINDS SET UP SUCCESS RETURN STB TRPTR SET TRAP TABLE POINTER FNDS3 JSB $LIBX RETURN DEF FINDS,I **791022** SKP ***** * ** FINDT ** FIND TRAP TABLE ENTRY WITH GIVEN TRAP NBR * * LDA TRAP NUMBER (POSITIONED IN WORD) * JSB FINDT * RETURN1 ENTRY NOT FOUND WITH THAT TRAP NBR * RETURN2 FOUND, TRPTR AND .B. POINT TO IT * * NOTE: TRPTR NOT ALTERED IF ENTRY NOT FOUND * ***** * FINDT NOP JSB $LIBR OCT 177777 **791022** STA BSCT1 AND SAVE FOR LATER COMPARISON LDB TRNXT VSE .B. FOR TRAP TABLE POINTER CPB TRTBL IF TABLER IS EMPTY, JMP FNDT3 RETURN (P+1) FNDT1 ADB M1 MOVE TO NEXT ENTRY LDA 1,I GET WORD WITH TRAP NBR AND TRMSK EXTRACT TRAP NBR CPA BSCT1 DO THEN MATCH? JMP FNDT2 YES ADB M1 NO, POINT TO BEGINNING OF ENTRY CPB TRTBL IS THE TABLE EXHAUSTED JMP FNDT3 YES, RETURN (P+1) JMP FNDT1 NO, CHECK NEXT ENTRY FNDT2 ISZ FINDT SET UP SUCCESS EXIT ADB M1 MOVE TO FIRST WORD OF ENTRY STB TRPTR SET TRAP TABLE POINTER FNDT3 JSB $LIBX RETURN DEF FINDT,I **791022** SKP * ***** * ** TRDEL ** DELETE FROM TRAP TABLE THE ENTRY AT TRPTR * * JSB TRDEL * RETURN * ***** * TRDEL NOP JSB $LIBR OCT 177777 **791022** LDB TRNXT IF ENTRY TO BE DELETED CPB TRPTR IS LAST+1 ENTRY, JMP TRDE2 RETURN IMMEDIATELY ADB M2 DECREMENT END OF TABLE POINTER STB TRNXT TO POINT TO NEW LAST+1 LOCATION TRDE1 LDB TRPTR CPB TRNXT IF END OF TABLE JMP TRDE2 RETURN (P+1) ADB B2 DLD 1,I GET ENTRY AT TRPTR + 1 ENTRY DST TRPTR,I STORE IT AS TRPIR ENTRY ISZ TRPTR BUMP TRPTR TO NEXT ENTRY ISZ TRPTR JMP TRDE1 LOOP TRDE2 JSB $LIBX RETURN DEF TRDEL,I **791022** SKP ***** * ** TRMAK ** MAKE A TRAP TABLE ENTRY, ORDERED BY PRIORITY * * SEKNO= SEQUENCE NBR (TRAP BIT MAY BE SET) * PRINO= PRIORITY * TRPNO= TRAP NUMBER (ALREADY POSITIONED IN WORD) * JSB TRMAK * RETURN1 NO ROOM FOR ENTRY * RETURN2 ENTRY MADE (TRPTR POINTS TO IT) * * NOTE: NEW ENTRIES ARE AUTOMATICALLY ENABLED * ***** * TRMAK NOP JSB $LIBR OCT 177777 **791022*** LDB TRNXT IS THE TABLE CPB TREND ALREADY FULL? JMP TRMK3 YES, RETURN (P+1) ISZ TRMAK NO, SET UP SUCCESS RETURN STB TRPTR SET POINTER TO END OF TABLE ADB B2 STB TRNXT BUMP TRNXT TO REFLECT NEW ENTRY LDB TRPTR TRMK1 CPB TRTBL ARE WE TO OTHER END OF TABLE? JMP TRMK2 YES, MAKE ENTRY HERE ADB M1 NO, MUST TEST FOR SORTING ORDER LDA 1,I GET SECOND WORD OF ENTRY AND PRMSK EXTRACT PRIORITY CMA,INA IF PRIORITY OF ADA PRINO ENTRY IS EQUAL OR HIGHER SSA,RSS THAN PRIORITY OF NEW ENTRY. JMP TRMK2 MAKE ENTRY HERE ADB M1 ELSE MOVE THIS ENTRY DLD 1,I DOWN ONE TO ALLOW PROPER DST TRPTR,I ORDERING OF NEW ENTRY LDB TRPTR MOVE ADB M2 POINTER TO STB TRPTR NEXT ENTRY JMP TRMK1 AND CONTINUE * ** COME HERE TO ACTUALLY MAKE ENTRY * TRMK2 LDA SEKNO STORE SEQUENCE NUMBER IN FIRST LDB TRPTR STA 1,I WORD OF ENTRY LDA PRINO GET PRIORITY (BITS 0-7) IOR TRPNO INCLUDE TRAP NUMBER (BITS 8-14) IOR BIT15 SET ENABLE BIT INB STORE SECOND STA 1,I WORD OF ENTRY STB TRFLG ENABLE TRAP TABLE SEARCH TRMK3 JSB $LIBX RETURN DEF TRMAK,I **791022**** SKP ***** * ** TRPNT ** SET A BIT IN THE TRAP TABLE * * LDA TRAP NUMBER * JSB TRPNT * RETURN1 TRAP TABLE FULL & THIS ENTRY NOT THERE ALREADY * RETURN2 SUCCESS * * NOTE: IF NO ENTRY WITH THAT TRAP NBR EXISTS, THIS * ROUTINE WILL MAKE ONE WITH PRIORITY 99 AND * WITH THE ENABLE BIT AND THE SEQ NBR CLEARED. * ****** * TRPNT NOP JSB $LIBR OCT 177777 **791022** ALF,ALF STA TRPNO SAVE TRAP NBR JSB FINDT FIND ENTRY WITH THAT TRAP NBR JMP TRPN1 NOT FOUND LDA TRPTR,I FOUND, IOR BIT15 SET TRAP BIT STA TRPTR,I AND UPDATE ENTRY STA TRFLG ENABLE TRAP TABLE SEARCH TRPN2 ISZ TRPNT TRPN3 JSB $LIBX RETURN DEF TRPNT,I **791022** * ** HERE IF MUST CREATE NEW ENTRY * TRPN1 CLA DEFAULT STA SEKNO SEQUENCE NBR LDA D99 DEFAULT STA PRINO PRIORITY JSB TRMAK MAKE ENTRY JMP TRPN3 NO ROOM, RETURN (P+1) LDB TRPTR GET INB SECOND WORD LDA 1,I OF ENTRY ELA,CLE,ERA CLEAR ENABLE BIT STA 1,I JMP TRPN2 RETURN (P+2) (PONT CHANGE TRFLG) SKP **************************************************** * ******************* TRAP TABLE ******************* * * WORD 1: BIT 15 TRAP BIT * BITS 14-0 SEQUENCE NUMBER * * WORD 2: BIT 15 ENABLE BIT * BITS 14-8 TRAP NUMBER * BITS 7-0 PRIORITY * * TRTBL DEF *+1 POINTER TO BEGINNING OF TABLE BSS 32 ALLOW FOR 16 ENTRIES TREND DEF * POINTER TO END+1 OF TABLE TRPTR NOP GENERAL USE TABLE POINTER TRNXT NOP POINTER TO NEXT FREE ENTRY TRFLG NOP FLAG, 0=DONT NEED TO EXAMINE TBL * ************************************************** * BSCT1 NOP TEMPORARY SEKNO NOP SEQUENCE NUMBER PRINO NOP PRIORITY TRPNO NOP TRAP NBR POSITIONED BITS 14-8 TRMSK OCT 77400 MASK FOR TRAP NBR PRMSK OCT 377 MASK FOR PRIORITY TRAP# OCT 0 TRAP NO. USED BY TTY EVENT SENSE ROUTINE D99 DEC 99 B2 OCT 2 BIT15 EQU MAXNG * * THE FOLLOWING TABLE IS PROVIDED FOR HPIB/TRAP INTERACTIONS. * ENTRIES ARE ORDERED BY TRAP # AND CONTAIN INFO PERTAINING * TO THE LU (DEVICE) ASSOCIATED WITH IT. FORMAT AS FOLLOWS: * * ***************************** * * 15-8 * 7-0 * * ***************************** * * SUB-CHANNEL * I/O CHANNEL * * ***************************** * SRQ.T DEF *+1 REP 48 # OF AVAIL.TRAPS **791022** NOP * INITIALIZED TO 0 * END