ASMB,R,Q,C * NAME: TIME * SOURCE: 92070-18139 * RELOC: 92070-16139 * PGMR: HLC * * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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 TIME,0 92070-16139 REV.1941 791105 ENT $EX11,$EX12,$TADD ENT $TLST,$TMSC,$TREM,$TIMV ENT $TMLS,$$TIM,$.TIM * EXT $RQCT,$SCXX,$TIME,$TMP1 EXT $RQP2,$RQP3 EXT $RQP4,$RQP5,$RQP6 EXT $RQP7,$RQP8 EXT $EXEX,$NAME,$WORK,$TM EXT $LIST,$IOTO,$XQT * A EQU 0 B EQU 1 * $EX11 EQU * LDA $RQCT CLB,CLE,INB SZA,RSS JMP $SCXX NOT ENOUGH PARAMETERS DLD $TIME SET CURRENT TIME AS BASE JSB $TIMV DIVIDE INTO HOURS, MINUTES, SECONDS, & MS ADA =D1976 ADD BASE YEAR STA $RQP3,I JMP $EXEX * * $TIMV NOP CONVERT DOUBLE INTEGER TO TIME VALUES CLE ADA PRS1 ADD 24 HOURS TO MAKE TIME POSITIVE SEZ INB ADB PRS2 * DIV TTAB3 (=6000D) STA $RQP4 SAVE MINUTES AND HOURS ASR 16 DIV TTAB2 (=100D) STB $RQP2,I TEN'S OF MILLISECONDS ISZ $RQP2 STA $RQP2,I SECONDS ISZ $RQP2 CLB LDA $RQP4 DIV =D60 STB $RQP2,I MINUTES ISZ $RQP2 CPA =D24 CLA STA $RQP2,I HOURS ISZ $RQP2 LDA $TIME+2 CLB DIV =D366 INB STB $RQP2,I DAY JMP $TIMV,I * * * PRS1 OCT 153000 PRS2 OCT 203 * * * $EX12 EQU * CLA LDB $RQP8,I STB $RQP8 IF DEFAULT, FORCE TO ZERO LDB $RQP6,I STB $RQP6 LDB $RQP5,I STB $RQP5 LDB $RQP3,I STB $RQP3 SSB JMP SC02 ILLEGAL RESOLUTION CODE (SC02) ADB =D-5 SSB,RSS JMP SC02 ILLEGAL RESOLUTION CODE LDB $RQP2,I SZB,RSS JMP SUSP NO NAME, TIME SUSPEND * JSB $NAME SEARCH FOR GIVEN NAME DEF $RQP2,I SZB,RSS JMP SC05 NAME NOT FOUND LDA $RQP3 SZA,RSS JMP TOFF REMOVE FROM TIME LIST ADB =D17 LDA B,I GET PREVIOUS 'T' BIT IN E-REG ALF,ERA CLA LDA $RQP4,I MULTIPLE ALF,ERA JSB TMSUB MOVE TIME VALUES INTO ID SEGMENT LDB $WORK JSB $TADD ADD PROGRAM TO TIME LIST JMP $EXEX * SUSP LDB $XQT LDA $RQP3 SZA,RSS JMP TOFF REMOVE FROM TIME LIST JSB $LIST TIME SUSPEND THE CALLER OCT 47 LDB $TMP1 A-REG (MULTIPLE) MEANINGLESS JSB TMSUB MOVE TIME VALUES INTO ID SEGMENT JMP $EXEX DONE * * TOFF JSB $TREM REMOVE FROM TIME LIST JMP $EXEX * * SC02 LDB =D2 JMP $SCXX ILLEGAL RESOLUTION CODE * SC05 LDB =D5 JMP $SCXX * RES NOP TIM1 NOP TIM2 NOP TLNK NOP * * * TMSUB NOP MOVE TIME VALUES INTO ID SEGMENT STB RES INB STB TIM1 INB STB TIM2 * LDB $RQP3 RES LSR 3 COMBINE RES, T, AND MULTIPLE STA RES,I * LDA $RQP5 SSA,RSS JMP ABS ABSOLUTE START TIME DLD $TIME SET CURRENT TIME AS BASE DST TIM1,I LDA $RQP5 CMA,INA JSB TUDAT ADD OFFSET JMP TMSUB,I * * ABS CLA LDA $RQP7,I SECONDS MPY TTAB2 (=100D) ADA $RQP8 ADD MILLISECONDS STA $RQP8 LDA $RQP5 HOURS MPY =D60 ADA $RQP6 ADD MINUTES MPY TTAB3 MINUTES TO MILLISECONDS CLE ADA $RQP8 SEZ INB SET01 CLE,SSB JMP STORE ADA RS1 SUBTRACT 24 HOURS UNTIL NEGATIVE SEZ CLE,INB ADB RS2 JMP SET01 * STORE DST TIM1,I JMP TMSUB,I * * * * * SKP * TUDAT NOP UPDATE EXECUTION TIME STA TEMP LDA RES,I RESOLUTION RAL,CLE,SLA,RAL JMP HR HOURS RAL AND =B7 ADA TTAB GET APPROPRIATE BASE FOR MULTIPLE LDA A,I CH030 MPY TEMP CH031 ADA TIM1,I ADD TO CURRENT VALUE SEZ INB ADB TIM2,I DST TIM1,I CLE,SSB JMP TUDAT,I NEGATIVE, DONE * LDA RS1 SUBTRACT 24 HOURS UNTIL NEGATIVE LDB RS2 JMP CH031 * * HR LDA TEMP CLB DIV =D24 MAXIMUM OF 24 HOURS LDA B MPY =D60 MULTIPLY BY 360,000D STA TEMP IN TWO STEPS TO PREVENT OVERFLOW LDA TTAB3 FIRST BY 60, JMP CH030 AND NEXT BY 6000 * * TEMP NOP RS1 OCT 25000 RS2 OCT 177574 * TTAB DEF * TTAB1 DEC 1 TTAB2 DEC 100 TTAB3 DEC 6000 * * SKP * $TADD NOP ADD PROGRAM TO TIME LIST ADB =D16 STB TLNK INB LDA B,I IOR =B10000 SET 'T' BIT CPA B,I JMP $TADD,I ALREADY SET STA B,I LDA TLNK LINK INTO TIME LIST LDB $TMLS STB A,I STA $TMLS JMP $TADD,I * * * SKP * $TREM NOP REMOVE FROM TIME LIST ADB =D16 STB TLNK INB LDA B,I AND =B167777 CLEAR 'T' BIT CPA B,I JMP $TREM,I ALREADY CLEAR STA B,I INB STB TIM1 * LDB DTLST ADDRESS OF TIME LIST HEADER TR010 STB $TADD LDB B,I CPB TLNK CLA,RSS JMP TR010 TRY NEXT PROGRAM LDB B,I STB $TADD,I REMOVE FROM LIST * CLB DST TIM1,I CLEAR TIME VALUES JMP $TREM,I * DTLST DEF $TMLS * * SKP * $TLST EQU * CHECK THE TIME SCHEDULE LIST LDB $TMLS TLP CLE,SZB,RSS JMP TSLST CHECK THE TIME SUSPEND LIST STB TLINK ADB =D2 DLD B,I CPB $TIME+1 CCE LDB TLINK,I GET LINK TO NEXT PROGRAM CPA $TIME SEZ,RSS JMP TLP CHECK NEXT VALUE * LDB TLINK NOW IS THE TIME ADB =D-16 JSB $TMSC SCHEDULE THE PROGRAM IF DORMANT LDB TLINK,I JMP TLP CHECK NEXT VALUE * TLINK NOP $TMLS NOP * * TSLST EQU * LDB $TM TSLP CLE,SZB,RSS JMP $IOTO PROCESS I/O TIME OUTS STB TLINK ADB =D2 DLD B,I DESIRED TIME CPB $TIME+1 CCE LDB TLINK,I CPA $TIME NOW? SEZ,RSS JMP TSLP NO, CHECK THE NEXT * STB TEMP LDB TLINK JSB $LIST TIME SUSPEND COMPLETE OCT 60 LDB TEMP JMP TSLP CONTINUE TO END OF LIST * * SKP * $TMSC NOP SCHEDULE THE PROGRAM IF DORMANT STB $WORK ADB =D15 LDA B,I ADB =D2 STB RES AND =B77 SZA SKIP IF DORMANT JMP UPDAT NOT DORMANT, UPDATE NEXT TIME * LDB $WORK JSB $LIST SCHEDULE IT OCT 60 * UPDAT LDB $WORK LDA RES,I AND =B7777 SZA,RSS JMP TREM MULT=0, REMOVE FROM LIST ADB =D18 STB TIM1 SET UP POINTERS TO ID SEGMENT INB STB TIM2 JSB TUDAT UPDATE NEXT TIME JMP $TMSC,I * TREM JSB $TREM REMOVE FROM TIME LIST JMP $TMSC,I * $$TIM EQU * STANDARD MODULE $.TIM DEC 0 STANDARD MODULE * END