ASMB,R,L,C,F HED * RTE-B SCHED AND TRAP ROUTINES * 29102-60003 REV.B * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * NAM BSCHD,7 29102-60003 REV. B ***************************************************************** * RTE-B BASIC SCHEDULER ROUTINES * * REV.B D.L.S. 11MAR75 COPYRIGHT * * LISTING A-29102-60003-1 * SOURCE TAPE 29102-80003 * RELOC BINARY TAPE 29102-60003 * **************************************************** * * THIS MODULE CONTAINS THOSE ROUTINES USED BY THE * ATS-BASIC INTERPRETER TO PERFORM PRIORITY * SCHEDULING AND EXECUTION OF TASKS * **************************************************** * * ENTRY POINTS: * ENT SSETP,TRAP,ENABL,DSABL,TRNON,SSTRT,TIME ENT TRPRI,TSNXT,TSTBL,TSEND,PREND,PRSTK * * EXTERNAL REFERENCES: * EXT ERROR,.STOP EXT .ENTR,$TIME EXT FINDS,FINDT,TRMAK,TRDEL EXT TRTBL,TRPTR,TRNXT,TRFLG EXT BIT15,TRMSK,PRMSK EXT TRPNO,SEKNO,PRINO EXT .2,.3,.4,.6,M1,M2,M3,M5,M256,M1000 EXT MNEG * SEQNO EQU SEKNO * * **************************************************** SKP ***** * ** CNVRT ** CONVERT TIME FROM FLOATING POINT HHMMSS FORM * TO FLOATING POINT SECONDS * * DLD TIME IN FLOATING POINT HHMMSS FORM * JSB CNVRT * RETURN .A.&.B.= FLOATING POINT SECONDS * * EXTERNALS REQUIRED: * EXT ..FCM * ***** * CNVRT NOP DST WHOLE SAVE INCOMING VALUE (HHMMSS) FDV F.100 FIX FLT DST HHMM HHMM= INT(HHMMSS/100) FDV F.100 FIX FLT DST HH HH= INT(HHMM/100) FMP F.100 JSB ..FCM FAD HHMM DST MM MM=HHMM-HH00 DLD HHMM FMP F.100 JSB ..FCM FAD WHOLE DST SS SS=HHMMSS-HHMM00 DLD HH FMP F.60 FAD MM FMP F.60 FAD SS .A.&.B.= (HH*60+MM)*60+SS SECONDS JMP CNVRT,I * SKP ***** * ** BSERR ** BASIC SCHEDULER ERROR ROUTINE * * LDA ADDRESS OF ERROR NUMBER * JSB BSERR * RETURN * * NOTE: TRANSFERS CONTROL TO .STOP, DOES NOT RETURN. * RESTARTS BASIC AT THE READY POINT * ***** * BSERR NOP STA BSER1 JSB ERROR DEF *+3 BSER1 NOP (ADDRESS OF ERROR NUMBER) DEF SCHED (ADDRESS OF STRING "SCHED") JMP BSERR,I RETURN * SKP ***** * ** SSETP ** MAKE TRAP TABLE ENTRY WITH GIVEN SEQ NBR AND PRIORITY * * JSB SSETP * DEF *+3 * DEF SEQUENCE NUMBER * DEF PRIORITY * RETURN * ***** * SETPA NOP SETPB NOP SSETP NOP JSB .ENTR RETRIEVE DEF SETPA PARAMETERS LDA SETPA,I STA SEQNO SEQUENCE NUMBER LDB SETPB,I STB PRINO PRIORITY CLA ZERO IS DEFAULT VALUE FOR STA TRPNO TRAP NUMBER OF ENTRY LDA SEQNO GET SEQ NBR JSB FINDS LOOK FOR ENTRY WITH THAT SEQ NBR JMP SETP2 NONE FOUND, MAKE NEW ENTRY LDB TRPTR FOUND, LDA 1,I SAVE ENTIRE FIRST WORD STA SEQNO SINCE TRAP BIT MAN BE SET INB LDA 1,I GET SECOND WORD OF ENTRY, AND TRMSK EXTRACT TRAP NBR STA TRPNO AND SAVE FOR MAKING NEW ENTRY JSB TRDEL THEN REMOVE THIS ENTRY SETP2 JSB TRMAK MAKE NEW ENTRY JMP SETPE NO ROOM JMP SSETP,I RETURN SETPE LDA AD2 TRAP TABLE FULL JSB BSERR JMP SSETP,I SKP ***** * ** 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 ALSO CALLED (VIA TRACE) 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 TTRAP * 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 * RETURN .A.= RETURN SEQUENCE NUMBER * **************************************************** * * FINALLY TRAP IS CALLED TO INITIALIZE THE TRAP * TABLE AT THE BEGINNING OF EXECUTION PHASE: * * LDA POSITIVE, NON-ZERO INTEGER (ACTS AS FLAG) * JSB TRAP * RETURN * **************************************************** * TRAP NOP STB LYNNO SAVE INCOMING LINE NUMBER CPA M1000 IS THIS THE POLLING CALL JMP LINE YES CPA M256 IS THIS THE TASK RETURN CALL? JMP TRRET YES SSA,RSS IS THIS AN INITIALIZE TABLE CALL JMP INIT YES, (NOTE HERE ALSO FOR TRAP 0) 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 SEQNO 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 AD3 JSB BSERR JSB .STOP 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 SEQNO 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 ISZ TRAP JMP TRAP,I RETURN (P+2) * ** HERE TO CREATE A NEW ENTRY * STRA3 LDA D99 SET DEFAULT STA PRINO PRIORITY (99) JSB TRMAK MAKE NEW ENTRY RSS NO ROOM JMP STRA4 DONE, RETURN LDA AD2 JSB BSERR JSB .STOP * ** 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. * INIT LDA TRTBL 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 TRAP,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 TRAP,I 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 B2 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 TRAP,I 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 JMP TRAP,I RETURN (P+1) SKP ***** * ** ENABLE ** ENABLE TRAP TABLE ENTRY ASSOC. WITH GIVEN SEQ NBR * * JSB ENABL * DEF *+2 * DEF SEQUENCE NBR * RETURN * * NOTE: ATTEMPT TO ENABLE NON-EXISTENT TRAP TABLE ENTRY * RESULTS IN TRANSFER TO ERROR ROUTINE. * IF SEQ NBR IS ZERO, ALL ENTRIES ARE ENABLED ***** * ENABA NOP ENABL NOP JSB .ENTR DEF ENABA LDA ENABA,I RETRIEVE SEQUENCE NUMBER SZA,RSS ZERO MEANS ENABLE ALL ENTRIES JMP ENAB1 JSB FINDS LOOK FOR IT IN TRAP TABLE JMP ENABE NOT FOUND LDB TRPTR FOUND INB LDA 1,I GET SECOND WORD OF ENTRY IOR BIT15 SET ENABLE BIT STA 1,I JMP ENAB4 RETURN ENABE LDA AD4 JSB BSERR JMP ENABL,I ENAB1 LDB TRTBL ENAB2 CPB TRNXT END OF TABLE JMP ENAB4 YES, RETURN INB LDA 1,I GET SECOND WORD OF ENTRY IOR BIT15 SET ENABLE BIT STA 1,I INB GO TO NEXT ENTRY JMP ENAB2 LOOP ENAB4 STB TRFLG ENABLE TRAP TABLE SEARCH JMP ENABL,I SKP ***** * ** DSABL ** DISABLE TRAP TABLE ENTRY ASSOC WITH GIVEN SEQ NBR * * JSB DSABL * DEF *+2 * DEF SEQUENCE NUMBER * RETURN * * NOTE: SEQ NBR=0 MEANS DISABLE ALL ENTRIES * SEQ NBR POSITIVE MEANS DISABLE ASSOC ENTRY * SEQ NBR NEGATIVE MEANS DELETE ASSOC. ENTRY FROM TABLE * * NOTE: ENTRY NOT FOUND CAUSES TRANSFER TO ERROR ROUTINE * ***** DSABA NOP DSABL NOP JSB .ENTR DEF DSABA LDA DSABA,I SZA,RSS ZERO MEANS ENABLE ALL ENTRIES JMP DSAB1 SSA NEG MEANS DELETE ENTRY JMP DSAB2 JSB FINDS LOOK FOR ENTRY IN TRAP TABLE JMP DSABE NOT FOUND LDB TRPTR FOUND INB LDA 1,I GET SECOND WORD OF ENTRY ELA,CLE,ERA CLEAR ENABLE BIT STA 1,I JMP DSABL,I RETURN DSABE LDA AD4 JSB BSERR JMP DSABL,I * ** HERE TO DISABLE WHOLE TABLE * DSAB1 CLA DONT NEED TO SEARCH TRAP TABLE STA TRFLG UNTIL SOMETHING HAPPENS LDB TRTBL DSAB3 CPB TRNXT END OF TABLE? JMP DSABL,I YES INB LDA 1,I GET SECOND WORD OF ENTRY ELA,CLE,ERA CLEAR ENABLE BIT STA 1,I INB ADVANCE TO NEXT ENTRY JMP DSAB3 LOOP * ** HERE TO DELETE ENTRY * DSAB2 CMA,INA MAKE SEQ NBR POSITIVE JSB FINDS LOOK FOR ASSOC ENTRY JMP DSABE NOT FOUND JSB TRDEL DELETE ENTRY JMP DSABL,I RETURN SKP ***** * ** TRNON ** ROUTINE TO START TASK AT GIVEN TIME * * JSB TRNON * DEF *+3 * DEF SEQUENCE NUMBER * DEF TIME TO START (FLOATING POINT VALUE HHMMSS) * RETURN * * NOTE: IF THE TIME SCHEDULING TABLE IS FULL, CONTROL * WILL BE TRANSFERRED TO ERROR * ***** * TRNOB NOP TRNOA NOP TRNON NOP JSB .ENTR DEF TRNOB DLD TRNOA,I JSB CNVRT GET TIME IN FLOAT PT SECONDS DST TMPAR THEN SET UP FOR PROCESSING LDA TRNOB,I GET SEQ NBR TO PASS TO BSCED JSB BSCED SET UP TRAP & TIME SCHED TABLES JMP TRNON,I THEN RETURN * SKP ***** * ** SSTRT ** ROUTINE TO START TASK AFTER GIVEN DELAY * * JSB SSTRT * JSB SSTRT * DEF *+3 * DEF SEQUENCE NUMBER * DEF DELAY (FLOAT POINT SECONDS) * RETURN * ***** * SSTRB NOP SSTRA NOP SSTRT NOP JSB .ENTR DEF SSTRB JSB TIME GET CURRENT TIME DEF *+2 DEF TMPAR FAD SSTRA,I THEN ADD DELAY DST TMPAR TO SET UP AS TIME OF DAY CALL FSB FLDAY IF GREATER THAN 2400 HOURS, SSA SUBTRACT ONE DAY JMP SSTR1 DST TMPAR SSTR1 LDA SSTRB,I JSB BSCED SET UP TRAP & TIME SCHED TABLES JMP SSTRT,I * SKP ***** * ** BSCED ** ROUTINE TO SET UP TRAP & TIME SCHED TABLES * FOR TRNON AND START ROUTINES * * DLD TIME IN FLOATING POINT SECONDS * DST TMPAR IS PASSED IN TMPAR * LDA SEQ NUMBER * JSB BSCED * RETURN * * NOTE: TABLE OVERFLOWS WILL CAUSE TRANSFER TO ERROR * ***** * BSCED NOP STA SNPAR SAVE SEQ NUMBER LDB TSNXT IS TABLE CPB TSEND ALREADY FULL ? JMP TRNOE YES STB TSPTR NO, INITIALIZE POINTER JMP NEXT1 * ** HERE TO EXAMINE NEXT ENTRY * NEXT LDB TSPTR ADB M1 MOVE LDA 1,I LAST ADB B3 WORD STA 1,I OF ENTRY ADB M5 THEN MOVE DLD 1,I FIRST TWO WORDS DST TSPTR,I OF ENTRY LDB TSPTR MOVE POINTER ADB M3 TO NEXT ENTRY STB TSPTR NEXT1 CPB TSTBL ARE WE AT OTHER END OF TABLE? JMP INSRT YES, MAKE ENTRY HERE ADB M3 NO, SET UP POINTER STB ENPTR TO NEXT ENTRY TO BE CONSIDERED * ** HERE TO TEST FOR TIME ORDERING * DLD TMPAR COMPARE GIVEN TIME FSB TSTIM TO CURRENT TIME SSA JMP ORDR1 GIVEN TIME < CURRENT TIME DLD ENPTR,I GIVEN TIME > OR = CURRENT TIME FSB TSTIM SSA JMP INSRT ENTRY TIME < CURRENT TIME ORDR2 DLD TMPAR ENTRY TIME > CURRENT TIME FSB ENPTR,I SSA JMP INSRT GIVEN TIME < ENTRY TIME JMP NEXT GIVEN TIME > OR = ENTRY TIME ORDR1 DLD ENPTR,I FSB TSTIM SSA JMP ORDR2 ENTRY TIME < CURRENT TIME JMP NEXT GIVEN TIME > CURRENT TIME * ** HERE TO INSERT NEW ENTRY AT TSPTR * INSRT DLD TMPAR SET UP DST TSPTR,I TIME PART OF ENTRY LDB TSPTR ADB B2 SET UP LDA SNPAR SEQUENCE NUMBER STA 1,I PART OF ENTRY LDA TSNXT UPDATE STA 1 TSNXT POINTER ADA B3 STA TSNXT CPB TSPTR CHECK IF NEW ENTRY NEXT TO EXEC RSS YES JMP INSR1 NOS MAKE TRAP ENTRY NOW * ** HERE IF NEW ENTRY WILL EXECUTE NEXT * DLD TSTIM GET NEW FSB TSPTR,I MINUS TIME TILL NEXT EXECUTION SZA,RSS IF TO GO NOW, JMP INSR3 ALLOW TSCNT TO BE ZERO SSA IF POSITIVE JMP INSR3 FSB FLDAY SUBTRACT ONE DAY INSR3 DST TSCNT THEN SET UP COUNTER WITH NEW VAL * ** HERE TO MAKE TRAP TABLE ENTRY * INSR1 LDA SNPAR JSB FINDS DOES A TRAP ENTRY ALREADY EXIST JMP INSR2 NO, MAKE ONE LDB TRPTR YES, SET ENABLE BIT INB LDA 1,I IOR BIT15 STA 1,I JMP BSCED,I RETURN INSR2 LDA SNPAR SET UP STA SEQNO SEQUENCE NUMBER CLA STA TRPNO TRAP NUMBER (DEFAULT = 0) LDA D99 STA PRINO PRIORITY (DEFAULT = 99) JSB TRMAK MAKE TRAP TABLE ENTRY RSS NO ROOM JMP BSCED,I DONE, RETURN LDA AD2 JSB BSERR JMP BSCED,I TRNOE LDA AD5 TIME SCHED TABLE FULL JSB BSERR JMP BSCED,I SKP ***** * ** TIMCK ** ROUTINE TO CHECK TIME SCHED TABLE * * JSB TIMCK * RETURN * ***** * TIMCK NOP JSB TIME SAVE DEF *+2 DEF TIMT1 CURRENT TIME TIMC3 FSB TSTIM GET-TIME ELAPSED FROM LAST CHECK SSA,RSS CORRECT JMP TIMC4 FOR CHANGE FAD FLDAY OF DAY TIMC4 FAD TSCNT UPDATE SECONDS TO EXECUTION 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 FSB TSPTR,I SINCE THIS TASK MAY HAVE TO BE SSA EXECUTED NOW ALSO JMP TIMC2 FSB FLDAY IF POSITIVE, SET UP FOR TOMORROW TIMC2 DST TSCNT SET UP NEW COUNTER DLD TIMT1 GET REAL CURRENT TIME VALUE JMP TIMC3 AND TRY AGAIN TIMCE LDA AD6 JSB BSERR JSB .STOP SKP ******************* PRIORITY STACK ************** * PRSTK DEF *+1 POINTER TO FIRST ENTRY D100 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 **************************************************** * **************** CONSTANTS ************************* SCHED DEC 5 ASC 3,SCHED BSCT2 NOP TEMPORARY LYNNO NOP CONTENT OF .B. IN TRAP CALLS TFLAG NOP =-1 IF GIVEN SEQ NBR NEGATIVE ENPTR NOP POINTER TO NEXT ENTRY (IN TIMCK) SNPAR NOP TIMT1 BSS 2 TEMPORARY FLDAY DEC 86400. FLOATIN POINT # SEC IN DAY F.100 DEC 100. F.60 DEC 60. TMPAR BSS 2 WHOLE BSS 2 HHMM BSS 2 HH BSS 2 MM BSS 2 SS BSS 2 MAXNG EQU MNEG MAXIMUM NEG FLOAT PT NBR B2 EQU .2 B3 EQU .3 .5 DEC 5 D99 DEC 99 AD2 DEF .2 AD3 DEF .3 AD4 DEF .4 AD5 DEF .5 AD6 DEF .6 **************************************************** SKP **************************************************************** * * * RTE-B 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 * * * TM BSS 1 TIME NOP JSB .ENTR DEF TM DLD $TIME GET TIME FROM SYSTEM 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 D100 A=SECS,B=10S OF MS STB MS10 FLT DST TM,I TEMPORARY TIME LDA MINS FLT FMP F.60 MINS IN SECONDS FAD TM,I DST TM,I LDA MS10 MS IN SECONDS FLT FDV F.100 FAD TM,I DST TM,I JMP TIME,I RETURN * .6000 DEC 6000 PRS1 OCT 153000 PRS2 OCT 203 MS10 BSS 1 MINS BSS 1 END