ASMB,R,L,C ** RTE-M TIME MODULE -SCHEDULING **** * NAME : $MTS * SOURCE: 92064-18021 * RELOC: 92064-16009 *_ PROGMR: E.J.W. BASED ON RTE-III VERSIONS G.A.A. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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 $MTS,0 92064-16009 REV.1901 781102 * SUP ******************************************************************** * ENT $TADD,$TREM,$TLST ENT $ETTM,$TIMR ENT $ITRQ,$TMRQ,$ONTM,$TIRQ,$CHTO,$STRQ * EXT $LIST,$XEQ,$INER,$MSEX,$EQCK EXT $TIME,$TIMV,$WORK,$MSBF,$CVT1,$CVT3 SKP $TLST NOP SUBROUTINE TO SEARCH TIME LIST LDB TLIST TIME LIST CL011 CLE,SZB,RSS IF THRU PROCESSING IT, GO JMP $TLST,I RETURN TO PROCESS TIME-OUTS STB TEMP3 SAVE TIME LINK ADB D2 B NOW PTS TO IDSEG TIME VAULE DLD B,I GET THE SCHEDULE TIME CPA $TIME IF BOTH WORDS MATCH CCE THEN CPB $TIME+1 THE SEZ,RSS TIME IS JMP CH010 LDB TEMP3 JSB $TMSC NOW SO SCHEDULE THE PROG. * * INCREMENT TO NEXT PROGRAM IN LIST * CH010 LDB TEMP3,I GET ADDR OF NEXT PROG IN LIST JMP CL011 GO TO COMPARE NEXT PROG IN LIST * * * * * PROGRAM TO BE SCHEDULED * * THE $TMSC ROUTINE SCHEDULES THE PROGRAM IF DORMANT * THEN COMPUTES ITS NEXT SCHEDULE TIME FROM ITS * RES CODE AND MULT FACTOR IN ITS ID-SEGMENT. * IF THE RES CODE IS ZERO THE PROGRAM IS REMOVED FROM * THE TIME LIST. * * THE CALLING SEQUENCE IS: * (B) = POINTER TO ADDRESS OF THE TIME LINK WORD * JSB $TMSC * $TMSC NOP STB TLINC COMPUTE THE STATUS ADDRESS ADB N1 LDA B,I GET THE STATUS AND D15 GET THE LOW BITS CCE,SZA IF NOT DORMANT JMP CH026 FORGIT IT * ADB D13 INDEX TO WORD 29 LDA B,I AND SET NEW-RUN FLAG RAL,ERA PRESERVING CONSOLE LU INFO STA B,I ADB DM28 SET (B) TO ID SEG ADDR JSB $LIST CALL LIST PROCESSOR TO SCHED PROG OCT 401 THE PROGRAM * * CHECK IF NEXT SCHEDULE TIME TO BE COMPUTED * CH026 LDB TLINC INB LDA B,I RES CODE/MULT FACTOR AND B7777 SZA,RSS IF ZERO, THEN NO NEW START TIME JMP CH040 GO REMOVE PROG FROM LIST STA TEMP SAVE MULTIPLICATION FACTOR JSB TUDAT GO UPDATE THE SCHEDULE TIME JMP $TMSC,I RETURN * * REMOVE PROGRAM FROM TIME LIST * CH040 LDA B10K CLEAR THE RESOLUTION TOO. STA B,I AND RESET IN THE ID-SEGMENT. LDB TLINC VALUE OF TLINK JSB $TREM GO TO REMOVE PROGRAM JMP $TMSC,I GO TO PROCESS NEXT PROGRAM HED REAL TIME CLOCK PROCESSING ID-TIME UPDATE * TUDAT USES THE RES AND MULT FROM THE ID-SEGMENT TO * UPDATE THE EXECUTE TIME OF THE PROGRAM WHOSE ID- * SEGMENT RESOLUTION CODE ADDRESS IS IN B. * * CALLING SEQUENCE: * * SET TEMP TO THE MULT FACTOR * SET B TO THE RES CODE ADDRESS * JSB TUDAT * TUDAT NOP ENTRY POINT LDA B,I GET THE RES CODE TO A INB SET STB TEMP1 TEMPS TO THE TIME INB ADDRESSES STB TEMP2 IN THE ID-SEGMENT RAL,CLE,SLA,RAL IF HOURS JMP HR GO DO SPECIAL HOURS UPDATE RAL,CLE ELSE SET UP AND D7 FOR THE APPROPIATE ADA TTAB BASE LDA A,I AND MULTIPLY BY THE MULT. CH030 MPY TEMP CH031 ADA TEMP1,I ADD THE CURRENT VALUE SEZ IF OVERFLOW INB STEP B ADB TEMP2,I ADD THE HIGH BITS. STA TEMP1,I RESTORE THE NEW TIME STB TEMP2,I TO THE ID-SEG. CLE,SSB IF NEGATIVE RESULT THEN JMP TUDAT,I EXIT * LDA RS1 POSITIVE RESULT SO ADD NEG. OF LDB RS2 DAY TO MAKE NEGATIVE JMP CH031 * HR LDA TEMP FOR HOURS FIRST CLB INSURE LESS THAN DIV D24 ONE DAY LDA B RESULT IS MODULO 24 MPY D15 NOW SET UP TO MULTIPLY BY 60,000 STA TEMP IN TWO STEPS TO PREVENT OVERFLOW LDA D24K FIRST BY 15, JMP CH030 AND NEXT BY 24,000 * TLIST NOP TOP OF TIME SCHEDULE LIST TTAB DEF * TTAB1 DEC 1 TTAB2 DEC 100 TTAB3 DEC 6000 D24K DEC 24000 D2 DEC 2 D7 DEC 7 D13 DEC 13 D15 DEC 15 D16 DEC 16 D24 DEC 24 DM28 DEC -28 N1 DEC -1 B7777 OCT 7777 TCC NOP DO NOT REARRANGE THESE 6 WORDS !! TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP DTCC DEF TCC RS1 OCT 25000 RS2 OCT 177574 D60 DEC 60 TLINC NOP SPC 4 HED $TIMR ROUTINE SETS UP ID SEGMENT TIME VALUES * THE $TIMR ROUTINE WHICH ALLOWS USER TO ENTER TIME VALUES * * INTO AN ID SEGMENT FUNCTIONS AS FOLLOWS: * * IF PROG VALUE IS ZERO, THEN CURRENT EXECUTING PROG. * * AND IF NON-ZERO, THEN SEARCH FOR ID SEGMENT * * ADDRESS. * * IF RESOLUTION CODE IS NON-ZERO, THEN RES/MULT WORD * * STORED. THE NEXT VALUE IS CHECKED FOR + OR -. * * IF PLUS, THEN NEXT START TIME VALUES GIVEN AND * * ARE STORED AND PROGRAM ENTERED INTO TIME LIST. * * IF MINUS, THEN THE COMPLEMENT OF VALUE IS ADDED* * TO THE CURRENT TIME AND ENTERED INTO THE ID * * SEGMENT. IF PROG VALUE IS ZERO, THIS IS TO BE A* * TIME DELAY OF CURRENT PROGRAM AND THUS PROGRAM * * IS SET DORMANT VIA LINK PROCESSOR BUT POINT OF * * SUSPENSION IS NOT CLEARED. IF PROG VALUE IS NON* * ZERO, THEN PROGRAM IS ENTERED INTO TIME LIST. * * THIS IS METHOD FOR SPECIFYING AN INITIAL OFFSET* * TIME. * * * ROUTINE TO SET ID SEGMENT TIME VALUES * CALLING SEQUENCE * JSB EXEC * DEF *+6 OR DEF *+9 * DEF REQUEST CODE ADDRESS RQP1 * DEF PROG RQP2 * DEF RES RQP3 * DEF MULT RQP4 * DEF OFFSET OR DEF HRS RQP5 * DEF MINS RQP6 * DEF SECS RQP7 * DEF TENS OF MSEC RQP8 * WHERE * PROG = 0 IF CURRENTLY EXECUTING * = ADDRESS OF PROGRAM NAME * RES = 1 FOR 10 MILLISECOND RESOLUTION * = 2 FOR SECONDS RESOLUTION LIST * = 3 FOR MINUTES RESOLUTION LIST * = 4 FOR HOURS RESOLUTION LIST * MULT = 0 FOR N0 MULTIPLE VALUE * = N A POSITIVE INTEGER FOR COMPUTING * NEXT SCHEDULE TIME * OFFSET= M A NEGATIVE INTEGER FOR COMPUTING INITIAL * OFFSET TIME * HRS= START TIME HOURS * MINS= START TIME MINUTES * SECS= START TIME SECONDS * TENS= START TIME TENS OF MILLISECONDS * * EXEC PRE-PROCESSOR CHECKS FOR RESOLUTION CODE * ERRORS AND FINDS THE ID-SEGMENT ADDRESS. * * CALLING SEQUENCE: * * LDB ID-SEGMENT ADDRESS * JMP $TIMR SKP $TIMR ADB D16 GET ADDRESS OF TIME LINK STB TCC AND SAVE IT INB STEP TO RESOLUTION ADDRESS STB TEMP1 AND SAVE LDA B,I GET RESOLUTION CODE/T/MULT INB STEP TO TIME LOCATION STB DSTAD SAVE THE ADDRESS * ALF,ERA SAVE BIT 12 SINCE PROGRAM MAY LDA RQP4,I ALREADY BE IN THE TIME LIST ALF,ERA COMBINE MULT AND SAVED T-BIT LDB RQP3,I RESOLUTION TO B LSR 3 SHIFT RESULT TO A STA TEMP1,I SET IT IN THE ID-SEG. LDA RQP5,I NEGATIVE IF OFFSET SSA,RSS POSITIVE IF START TIME JMP TI100 CMA,INA SET POSITIVE AND STA TEMP SAVE IN TEMP LDA RQP2,I CHECK IF CURRENT XEQ PROGRAM SZA JMP TI012 NO * LDB XEQT YES, SET THE STB $WORK STA XEQT ADB D15 SAVE RESOURCES LDA B,I BIT IN THE IOR B200 PROGRAMS STA B,I STATUS WORD JSB $LIST MAKE PROGRAM DORMANT OCT 300 TI012 LDA $TIME GET THE CURRENT TIME LDB $TIME+1 AND SET DST DSTAD,I IT IN THE ID-SEG DSTAD EQU *-1 LDB TEMP1 GET THE RES. CODE ADDRESS TO B JSB TUDAT UPDATE THE TIME * TI015 LDB TCC JSB $TADD ENTER PROG INTO TIME LIST JMP $XEQ DONE - EXIT TO DISPATCHER * * GIVEN START TIME * TI100 LDB DSTAD SET B TO THE TIME ADDRESS AND JSB $ETTM GO TO STORE VALUES IN ID SEGMENT JMP TI015 GO PUT PROG IN TIME LIST * B200 OCT 200 HED REAL TIME CLOCK PROCESSOR SET TIME IN ID-SEG * $ETTM SETS A TIME IN THE REFERENCED ID-SEGMENT. * * CALLING SEQUENCE * * RQP5,I=HOURS * RQP6,I=MINUTES * RQP7,I=SECONDS * RQP8,I=TENS OF MS. * * B=TIME ADDRESS IN THE ID-SEG. * $ETTM NOP ENTRY POINT STB DSTA2 SAVE THE ID-SEG. ADDRESS LDA RQP7,I GET SECONDS MPY TTAB2 CONVERT TO MS (MPY D100) ADA RQP8,I ADD THE MS VALUE AND STA RQP8 AND SAVE LDA RQP5,I GET HOURS MPY D60 CONVERT TO MINUTES ADA RQP6,I ADD MINUTES MPY TTAB3 CONVERT MINUTES TO MS (MPY D6000) CLE PREPARE FOR ADD ADA RQP8 ADD MS VALUE SEZ IF OVERFLOW INB STEP HIGH PART SET01 CLE,SSB IF POSITIVE JMP SET02 ADA RS1 SUBTRACT 24 HRS SEZ,CLE UNTIL INB ADB RS2 IT IS JMP SET01 NEGATIVE SET02 DST DSTA2,I SET THE VALUE IN THE ID-SEG. DSTA2 EQU *-1 JMP $ETTM,I RETURN HED ADDITION OF PROGRAM TO TIME RESOLUTION CODE LIST * THE $TADD ROUTINE FUNCTIONS AS FOLLOWS: * * IF RESOLUTION CODE IS ZERO, THEN EXIT * * IF NON-ZERO RESOLUTION, AND PROGRAM NOT IN TIME LIST* * (BIT 12 OF RES/T/MULT 0), THEN SET BIT 12 OF * * MULT WORD TO SIGNIFY THAT IT IS IN TIME LIST. * * IF TIME LIST IS NULL, THEN SET IT TO POINT TO * * PROGRAM TIME LINK AND SET TLINK TO ZERO. * * IF PROGRAM NOT IN LIST, THEN IT IS ADDED TO * * TOP OF TIME LIST AND ITS TLINK VALUE MADE * * TO POINT TO THE PREVIOUS TOP OF LIST * * PROGRAM. * * * * * ADDING A PROGRAM TO A TIME RESOLUTION CODE LIST * CALLING SEQUENCE * LDB ADDRESS OF ID SEGMENT TLINK VALUE * JSB $TADD * $TADD NOP STB TLINC SAVE TLINK ADDRESS INB INCR TO RES CODE/MULT FACTOR ADD LDA B,I ALF,CLE,ERA AND D7 SZA,RSS JMP $TADD,I EXIT SEZ PROG IN TIME LIST? JMP $TADD,I YES, SO EXIT * LDA B,I IOR B10K SET T BIT STA B,I LDB TLIST LOAD VALUE OF TOP OF LIST LDA TLINC SET LINK OF NEW PROG TO PREVIOUS STB A,I OF TIME LIST STA TLIST SET TOP OF TIME LIST TO NEW PROG TLINK ADDRESS JMP $TADD,I RETURN HED REMOVE A PROGRAM FROM TIME LIST * * * THE $TREM ROUTINE FUNCTIONS AS FOLLOWS: * * IF PROGRAM NOT IN TIME LIST, THEN EXIT * * IF PROGRAM IN TIME LIST, THEN CLEAR BIT 12 OF * * RES/T/MULT TO INDICATE NOT IN TIME LIST. * * A SEARCH IS MADE OF THE TIME LIST PROGRAMS * * UNTIL PROGRAM FOUND OR END OF LIST. THE * * TLINK VALUES ARE CHANGED AS NECESSARY. * * * * * CALLING SEQUENCE * LDB TLINK ADDRESS OF ID SEGMENT * JSB $TREM * $TREM NOP ENTRY/EXIT STB TLINC COMPUTE LIST ADDRESS INB LDA B,I CHECK IF PROGRAM IS IN TIME LIST AND B10K SZA,RSS JMP $TREM,I NO, SO EXIT XOR B,I CLEAR T-BIT STA B,I LDA DTLST GET ADDR OF TOP OF LIST PNTR * TR010 LDB A,I GET CURRENT TOP OF LIST CPB TLINC IS THIS THE PROG? JMP TR030 YES SZB,RSS END OF LIST? JMP $TREM,I YES, RETURN STB A SAVE ADDR OF CURRENT LINKWORD JMP TR010 GO CHECK NEXT PROG * TR030 LDB B,I LINK NEXT PROG STB A,I TO PREV PROG TO REMOVE JMP $TREM,I RETURN SPC 1 DTLST DEF TLIST B10K OCT 10000 HED TIMER OPERATOR COMMANDS * IT,XXXXX * IT,XXXXX,R,MMM * IT,XXXXX,R,MMM,HR,MN * IT,XXXXX,R,MMM,HR,MN,SC * IT,XXXXX,R,MMM,HR,MN,SC,MS * * R=RESOLUTION CODE * 1= TEN MILLISECOND CODE * 2= SECONDS CODE * 3= MINUTES CODE * 4= HOURS CODE * MM= MULTIPLICATION FACTOR * HR= START HOURS * MN= START MINUTES * SC= START SECONDS * MS= START TENS OF MILLISECONDS * $ITRQ LDA $WORK SET ADA D17 UP THE TIME PRAMETER STA TEMP STARTING ADDRESS. LDB $MSBF+9 GET THE RESOLUTION ADB DM5 CODE AND TEST SSB,RSS FOR MORE THAN 4. JMP $INER GREATER THAN 4-ILLEGAL CODE LDA $MSBF+13 GET THE MULT. FACTOR. LDB TEMP,I GET THE OLD TIME PRAM. BLF,ERB IF IN TIME LIST ALF,ERA SET BIT IN NEW WORD. LDB $MSBF+9 GET RESOLUTION TO B SZB,RSS IF ZERO RESOLUTION JMP M0605 GO REMOVE FROM TIME LIST LSR 3 SHIFT THE WHOLE MESS TO A M0604 STA TEMP,I SET NEW RESOLUTION MULT. ISZ TEMP INCR TO TMS ADDRESS LDA $MSBF+29 GET TENS OF MS. ADA DM100 SSA,RSS MINUS, IF LEGAL VALUE JMP $INER INPUT ERROR LDA $MSBF+25 GET SECONDS VALUE ADA DM60 SSA,RSS MINUS, IF LEGAL VALUE JMP $INER INPUT ERROR LDA $MSBF+21 GET MINUTES. ADA DM60 SSA,RSS YES, SO CONVERT TO DECIMAL JMP $INER INPUT ERROR LDA $MSBF+17 GET HOURS ADA DM24 SSA,RSS MINUS, IF LEGAL VALUE JMP $INER INPUT ERROR LDA DP4 SET DEFS TO THE PRAMS STA RQP5 ON THE BASE LDA DP5 PAGE FOR STA RQP6 $ETTM LDA DP6 THE SET TIME STA RQP7 SUBROUTINE LDA DP7 IN THE STA RQP8 RTIME MODULE LDB TEMP GET ID-SEG ADDRESS AND JSB $ETTM GO SET VALUES IN ID-SEG CLA JMP $MSEX EXIT $MESS SPC 2 M0605 CCB REMOVE PGM FROM TIME ADB TEMP LIST JSB $TREM CLA AND CONTINUE JMP M0604 SETTING UP THE ID-SEG SPC 1 DP4 DEF $MSBF+17 DP5 DEF $MSBF+21 DP6 DEF $MSBF+25 DP7 DEF $MSBF+29 DM100 DEC -100 DM60 DEC -60 DM24 DEC -24 DM5 DEC -5 D17 DEC 17 * * * CONTINUATION OF STATUS REQUEST * $STRQ EQU * ADB D11 RESOL CODE/MULT ADDRESS STB TLINC LDA B,I ALF,RAR AND D7 JSB $CVT1 CONVERT RESOLUTION CODE TO ASCII ALF,ALF ROTATE TO HIGH HALF WORD STA $MSBF+5 STORE RESOLUTION CODE IN BUFFER LDA B,I AND B7777 JSB $CVT3 CONVERT MULTIPLE TO ASCII INA DLD A,I DST $MSBF+6 STORE MULTIPLE IN BUFFER LDA TLINC,I CHECK IF PROG IN TIME LIST ALF,SLA TEST BIT 12 (T) BIT JMP M0510 YES LDA BLANK PROGRAM NOT IN TIME LIST RSS M0510 LDA TZERO PROG IN TIME LIST STA $MSBF+14 STORE ASCII BLANK OR T IN BUFFER ISZ TLINC SET B TO TIME ADDRESS LDA DTEMP SET UP TO GET TIME TO STA RQP2 TEMP AREA CLA STA RQP3 DLD TLINC,I GET TIME FROM ID-SEG JSB $TIMV CONVERT THE TIME LDA TEMP3 GET HOURS JSB $CVT1 CONVERT LDB BLANK GET VALUE RRR 8 ROTATE TO BLANK ON EACH SIDE DST $MSBF+8 SET IN MESSAGE LDA TEMP2 GET MIN. VALUE JSB $CVT1 CONVERT STA $MSBF+10 STUFF IN BUFFER LDA TEMP1 AND AGAIN FOR SEC JSB $CVT1 LDB BLANK VALUE TO A BLANK TO B RRR 8 ROTATE DST $MSBF+11 SET IN BUFFER LDA TEMP ONE MORE TIME FOR 10'S OF MS. JSB $CVT1 STA $MSBF+13 STORE TENS OF MSEC IN BUFFER LDA BUFAD LOAD A WITH OUTPUT BUFFER ADDRESS JMP $MSEX RETURN SPC 1 TZERO ASC 1, T D11 DEC 11 DTEMP DEF TEMP SPC 2 SKP * MESSAGE PROCESSOR--TI COMMAND * * * THE REQUEST TO GET CURRENT SYSTEM TIME OUTPUTS CURRENT * YEAR, DAY NUMBER, HOUR, MINUTES, AND SECONDS IN THE * FOLLOWING FORMAT: * YEAR.DAY..HR..MN..SC * WHERE THE .'S ARE BLANKS * $TIRQ LDA DM20 STA $MSBF SET OUTPUT CHARACTER COUNT LDA DTCC SET UP TO GET THE TIME STA RQP3 SET YEAR WORD ADDR INA STA RQP2 SET 5 WORD TIME ADDR DLD $TIME JSB $TIMV GO GET TIME JSB $CVT3 CONVERT YEARS INA DLD A,I DST $MSBF+1 SET LEAST 4 DIGITS LDA TEMP4 GET DAYS JSB $CVT3 CONVERT AND STORE DAYS INA DLD A,I DST $MSBF+3 SET LEAST 4 DIGITS LDA BLANK STUFF NECESSARY WORDS WITH STA $MSBF+5 BLANKS STA $MSBF+7 STA $MSBF+9 LDA TEMP3 GET HOURS JSB $CVT1 CONVERT AND STORE HOURS STA $MSBF+6 LDA TEMP2 JSB $CVT1 CONVERT AND STORE MINUTES STA $MSBF+8 LDA TEMP1 JSB $CVT1 CONVERT AND STORE SECONDS STA $MSBF+10 LDA BUFAD JMP $MSEX GO SET A AND EXIT SPC 1 BLANK ASC 1, BUFAD DEF $MSBF DM20 DEC -20 * * ON REQUEST CONTINUATOR * * IF CURRENT TIME VALUES ARE ZERO OR NOW IS CODED THEN * THE CURRENT TIME IS PUT IN THE ID-SEG. AND R/M USED * TO COMPUTE THE NEXT TIME. * * IF CURRENT TIME VALUES ARE NOT ZERO THE PROGRAM IS * JUST PUT IN THE TIME LIST. * * CALLING SEQUENCE * * A=-1 IF NOW OPTION * A#-1 IF NOT NOW BUT PUT IN TIME LIST * B=ID-SEGMENT TIME ADDRESS. * * JMP $ONTM * $ONTM EQU * LDB $WORK ADB D17 COMPUTE RES/T/MULT ADDR LDA B,I ALF,RAR AND D7 CHECK RESOLUTION CODE SZA NONE, SO GO TO SCHED NOW JMP M0110 * JSB $LIST SCHEDULE PROGRAM OCT 301 JMP $MSEX RETURN * M0110 INB SET B FOR $ONTM LDA $MSBF+8 IF ASCII RAR,SLA "NO" ENTERED LDA $MSBF+9 THEN CPA NO GO PUT CCA IN THE TIME LIST FOR NOW+10MS. STB DLDAD SET LOAD ADDRESS STA TCC SET NOW FLAG FOR LATER INA,SZA,RSS IF NOW SKIP LOAD JMP NOW DLD DLDAD,I GET THE CURRENT TIME VALUES DLDAD EQU *-1 SZA,RSS IF TIME NOT ZERO SZB THEN JMP TIMIN THEN GO PUT IN TIME LIST NOW DLD $TIME GET CURRENT TIME DST DLDAD,I AND SET IN THE ID-SEG TIMIN LDB DM2 COMPUTE TIME LIST ADDRESS ADB DLDAD AND STB TEMP3 AND SET FOR LIST ROUTINE JSB $TADD ADD PROG TO TIME LIST. LDB TEMP3 SET (B) FOR $TMSC CALL ISZ TCC SKIP IF NOW RSS JSB $TMSC SCHEDULE THE PROG. AND UPDATE MESEX CLA SET A FOR NO ERROR JMP $MSEX GET RETURN ADDRESS * * NO ASC 1,NO HED MESSAGE PROCESSOR TM REQUEST COMPLETION * THIS ROUTINE COMPLETES THE SET TIME REQUEST * * CALLING SEQUENCE: * * LDB DEFP1 SET B TO ADDRESS OF PRAM LIST * JMP $TMRQ * $TMRQ EQU * LDB DEFP1 LDA DM6 SET UP PRAM ADDRESSES ON STA TEMP THE BASE PAGE LDA DRQP3 TM1 STB A,I ADB D4 PRAMS SEPERATED BY FOUR WORDS INA ISZ TEMP DONE? JMP TM1 NO * LDA RQP3,I GET YEAR ADA DM197 SUBTRACT THE BASE MPY D365 MULTIPLY BY DAYS PER YEAR ADA RQP4,I ADD THE DAY CMB SET B TO -1 IF LEGAL RESULT ADA B SUBRTACT ONE FROM DAY INB,SZB IF B WAS NOT ZERO AFTER MULT. THEN JMP $INER INPUT ERROR STA $TIME+2 SET DAY COUNTER * LDB DTIME GET TIME ADDRESS TO B JSB $ETTM SET THE TIME JMP MESEX EXIT TO MESSAGE PROCESSOR SPC 2 DM2 DEC -2 DM6 DEC -6 DM197 DEC -1970 BASE YEAR D365 DEC 365 DRQP3 DEF RQP3 D4 DEC 4 DTIME DEF $TIME DEFP1 DEF $MSBF+5 SPC 4 * * ' DEVICE TIME-OUT PARAMETER ' STATEMENT (OPTIONAL) * * FORMAT: TO,N1,N2 WHERE * N1 = EQT # * N2 = TIME-OUT PARAMETER OR NOT SPECIFIED * ACTION: IF N2 WASN'T SPECIFIED, PRINT CURRENT TIME-OUT OF DEVICE N1 * IF BOTH N1 AND N2 PRESENT, ASSIGN N2 AS THE * NEW TIME-OUT PARAMETER FOR DEVICE N1. * * CALL (FROM MESSAGE PROCESSOR): * (A) = N1 * (P) JMP $CHTO * - RETURN IS TO MESS,I WITH (A) = ADDRESS OF REPLY * OR ADDRESS OF ERROR MESSAGE IF N1 IS ILLEGAL. * $CHTO STA TEMP1 SAVE 'N1' JSB $EQCK CHECK VALIDITY OF 'N1' LDB $MSBF+8 SZB,RSS JUST ONE PARAM? CCB,RSS YES, SET (B)=-1 LDB $MSBF+9 NO, GET PARAM 'N2' SZB,RSS IF N2 ZERO, DISABLE JMP CHTO2 TIME-OUT FOR DEVICE * INB,SZB IF N2 = -1, OUTPUT T-O PARAMETER JMP CHTO1 OTHERWISE, ENTER NEW T-O VALUE * LDA EQT14,I CONVERT T-O PARAMETER CCE,SZA TO DECIMAL ASCII B3000 CMA JSB $CVT3 LDB A,I GET THE HIGH WORD ADB B164C ADD '=' - 'BLANK' STB TOMS1+1 CCE,INA DLD A,I STORE IN MESSAGE DST TOMS1+2 * LDA TEMP1 CONVERT EQT # JSB $CVT1 TO DECIMAL ASCII STA TOMS1 STORE INTO MESSAGE LDA TOMSA JMP $MSEX * TOMSA DEF *+1 N12 DEC -12 ASC 2,TO# TOMS1 NOP ASC 1, = NOP NOP * .500 DEC 500 B164C OCT 16400 * CHTO1 CMB,INB ERROR IF ATTEMPT LDA EQT5,I TO SET TYPE 0 OR 5 AND B374C DEVICE TIME-OUT SZA VALUE TO LESS THAN CPA B2400 FIVE SECONDS. RSS JMP CHTO2 OTHERWISE, STORE * LDA .500 NEW TIME-OUT ADA B VALUE. SSA,RSS JMP $INER * CHTO2 STB EQT14,I JMP $XEQ * * B2400 OCT 2400 B374C OCT 37400 * * ** SYSTEM BASE PAGE COMMUNICATION AREA ** * . EQU 1650B ESTABLISH ORIGIN OF AREA * RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * EQT5 EQU 1664B EQT14 EQU 1773B * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. * A EQU 0B LOCATION OF A REGISTER B EQU 1B LOCATION OF B REGISTER * ORG * PROGRAM LENGTH END