ASMB,R,Q,C * * NAME: TM.. * SOURCE: 92071-18105 * RELOC: 92071-1X105 * PGMR: C.H.W. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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 TM..,7 92071-1X105 REV.2041 800808 * * * * ACTION SUBROUTINE TO EXECUTE THE "TM" OPERATOR COMMAND * * COMMAND SYNTAX: * TM(,HR,MIN,SEC,MONTH,DAY,YEAR) * RESPONSE IS: * HR:MIN:SEC MONTH,DAY,YEAR WKDAY * * * ENT TM.. * EXT EXEC,$LIBR,$LIBX,$TIME,CAM.O,$TMLS EXT CNOPT,.XLA,.XLB,.XSA,.XSB * * SUP * TM.. NOP LDA TM.. INA LDB 0,I STB NUMBA SAVE ADDR OF # PRAMS INA 2ND PARAMETER IS THE PARSE BUFFER ADDR LDB 0,I GET IT ADB N3 PARAMETER POINTER STB TMPAD INA LDA 0,I STA ERRTN SAVE ADDR OF ERROR PARAM LDA TM..,I STA TM.. SAVE RETURN ADDR * LDA PCHEK INITIALIZE FOR MAX STA PCHKP VALUE CHECK IN "CHECK" CLA CPA NUMBA,I TEST # OF PARAMS JMP TM.50 JUST DISPLAY CURRENT TIME JSB .XLB ANYTHING IN TIME-LIST? DEF $TMLS CPA 1 RSS NO, PROCEED JMP ER34 YES, CAN'T CHANGE TIME JSB CHECK GET/CHECK ENTERED HOUR MPY .60 CONVERT TO MINUTES JSB CHECK GET/CHECK ENTERED MINUTES ADA VALX ADD HRS*60 JSB CHECK GET/CHECK SECONDS MPY .100 CONVERT TO 1O'S OF MSECS STA M.SEC LDA VALX GET 60*HR+MIN MPY .6000 CONVERT TO 10'S OF MSECS ADA M.SEC COMPUTE[(HR*60+MIN)*60+SEC]*100 SEZ OVERFLOW? INB YES, CARRY INTO B TM.20 CLE,SSB IF POSITIVE JMP TM.30 ADA RS1 SUBTRACT 24 HRS SEZ UNTIL INB ADB RS2 IT IS JMP TM.20 NEGATIVE * TM.30 DST M.MIN SAVE FOR LATER JSB CHECK GET/CHECK MONTH SZA,RSS JMP ER56 ZERO IS ILLEGAL STA M.MON SAVE IT ADA M#DAY COMPUTE POS IN CONVERSION TABLE LDB 0,I GET STARTING JULIAN DAY OF MONTH JSB CHECK GET/CHECK DAY SZA,RSS JMP ER56 ZERO IS ILLEGAL RBL,CLE,SLB,ERB SKIP UNLESS 31 DAY MONTH JMP *+3 31 DAY, SKIP BELOW CHECK CPA .31 DAY=31? JMP ER56 YES, ERROR STA M.DAY ADB 0 ADD START OF MONTH JSB CHECK GET/CHECK YEAR ADA N1976 BEGIN AT 1976 CLE,SSA WAS YEAR < 1976? JMP ER56 YES, ERROR STA VALX SAVE YEAR-1976 LDA .2 CPA M.MON FEBRUARY? INA,RSS YES JMP TM.40 NO AND VALX 2 LSB'S OF YR SZA LEAP-YEAR? CLA,INA NO ADA N30 FORM -(MAX+1) FOR FEB. DAYS ADA M.DAY SSA,RSS TOO MANY DAYS FOR FEB? JMP ER56 YES TM.40 LDA VALX GET YEAR AND .3 A IS NOW ZERO IFF LEAP-YEAR STB M.DAY SAVE JULIAN DAY ADB N60 SET E-REG IF > FEB 28 * BELOW INSTRUCTION SKIPS IF:DAY366? JMP ER56 YES, ERROR ADB .366 CONVERT TO RANGE 0-365 STB M.DAY LDA VALX GET YEAR-1976 MPY .366 CONVERT TO DAYS ADA M.DAY ADD SPECIFIED DAYS JSB $LIBR GO PRIVILEGED NOP JSB .XSA STORE IN SYSTEM TIME +2 DEF $TIME+2 DLD M.MIN JSB .XSA STORE REST OF CURRENT TIME DEF $TIME JSB .XSB DEF $TIME+1 JSB $LIBX GO UNPRIVILEGED DEF *+1 DEF *+1 * * THIS SECTION FORMATS THE "TM" DISPLAY * TM.50 JSB $LIBR INTERRUPTS (TBG) COULD CAUSE INCONSISTANCIES NOP JSB .XLA GET TIME OF DAY DEF $TIME JSB .XLB DEF $TIME+1 DST TIME SAVE LOCALLY FOR LATER JSB .XLA GET DAY DEF $TIME+2 JSB $LIBX NOW WE HAVE A STATIC PICTURE DEF *+1 DEF *+1 CLB STB M.MON INITIALIZE MONTH DIV .366 A HAS YR, B HAS DAY OF YEAR ADA .1976 ADD OFFSET STA M.YR SAVE YEAR STB M.DAY & DAY STB M.DAY+1 AND .3 A=0 IF IT'S LEAP-YEAR CLE,INB ADB N60 E=1 IF IT'S PAST FEB 28 SEZ,SZA SKP UNLESS PAST FEB 28 & NOT LEAP-YR ISZ M.DAY BUMP JULIAN DAY * LDA M.DAY LDB M#DY2 PNTR TO TBLE OF START DAY OF MONTH * TM.60 ISZ M.MON BUMP MONTH INB POINT TO NEXT MONTHS START DAY STA VALX SAVE OFFSET FROM START OF MONTH LDA 1,I GET START OF MONTH RAL,CLE,ERA GET START JULIAN DAY CMA,INA ADA M.DAY CURRENT DAY - START OF MONTH SSA,RSS IS DAY < START OF NXT MONTH? JMP TM.60 NO, TRY NEXT MONTH ISZ VALX COMPENSATE FOR ZERO OFFSET * ** COMPUTE DAY OF WEEK HERE CCA ADA M.YR YEAR-1 ARS,ARS /4 ADA M.YR + YEAR ADA M.DAY+1 +DAY CLB DIV .7 DAY OFFSET MODULO 7 BLS ADB DAYTB DLD 1,I DST M.WDY * LDA VALX GET DAY OF MONTH JSB DECIM CONVERT TO ASCII LDB ASCCM ", " RRR 8 FORMAT= " XX," DST M.DAY STORE DAY IN MSG LDA M.MON ALS 2*MONTH ADA MCONA ADDR OF 4 CHAR MONTH DESCR DLD 0,I GET ASCII MONTH DST M.MON STORE IN MSG LDA M.YR CLB DIV .100 SEPARATE 4 DIGITS OF YR STB VALX JSB DECIM CONVERT HIGH 2 DIGITS TO ASCII STA M.YR & STORE IN MSG LDA VALX JSB DECIM CONVERT LOW 2 DIGITS TO ASCII IOR .01B DON'T SUPPRESS LEADING ZERO STA M.YR+1 & STORE IN MSG * * $TIMV CODE DLD TIME RETRIEVE TIME OF DA6 ADA PRS1 ADD POSITIVE 24 HRS. SEZ TO GET A POSITIVE INB TIME ADB PRS2 DIV .6000 DIVIDE BY 6000 STA VALX SAVE MIN/HR ASR 16 POSITION B (SEC/10MS) FOR DIVIDE DIV .100 DIVIDE BY 100 TO GET SEC/10MS JSB DECIM CONVERT SECONDS TO ASCII STA M.SEC & STORE IN MSG CLB SET UP FOR DIVIDE LDA VALX FETCH MIN/HR DIV .60 SEPERATE STB M.MIN SAVE MINUTES JSB DECIM CONVERT HOURS TO ASCII STA M.HR & SAVE IN MESSAGE LDA M.MIN GET MINUTES JSB DECIM CONVERT TO ASCII LDB ASCCL GET "::" RRR 8 FORMAT ":XX:" DST M.MIN STORE INTO MSG * JSB CNOPT WRITE RESPONSE LINE DEF *+5 DEF .2 DEF CAM.O DEF MSGBF DEF MSGLN JMP TM..,I RETURN * * ER56 LDA .56 56 = BAD PARAMETER RSS ER34 LDA .34 34 = TIME-LIST NOT EMPTY STA ERRTN,I RETURN ERROR VALUE JMP TM..,I AND RETURN SPC 2 * DECIM NOP CLB DIV .10 SZA,RSS LDA B20 SUPPRESS LEADING ZERO ALF,CLE,ALF IOR 1 MERGE 2 DIGITS XOR ASC00 FORM ASCII NUMERICS JMP DECIM,I SPC 2 * CHECK NOP STA VALX SAVE A FOR CALLER LDA TMPAD POINTER TO PARSE BUFR ADA .4 ADVANCE TO NEXT PARAM STA TMPAD LDA 0,I GET PARAMETER SSA POSITIVE? JMP ER56 NO, ERROR ADA PCHKP,I TEST AGAINST MAX VALUE CLE,SSA,RSS TOO BIG? JMP ER56 YES ISZ PCHKP ADVANCE FOR NEXT CHECK LDA TMPAD,I GET PASSED PARAMETER JMP CHECK,I RETURN WITH E=0 & B UNCHANGED * * DATA AREA * TMPAD NOP PCHKP NOP NUMBA NOP ERRTN NOP VALX NOP TIME NOP WILL STORE $TIME FROM ID TIME1 NOP WILL STORE $TIME+1 FROM ID * .2 DEC 2 .3 DEC 3 .4 DEC 4 .7 DEC 7 .10 DEC 10 .56 DEC 56 .60 DEC 60 .34 DEC 34 .100 DEC 100 .366 DEC 366 .1976 DEC 1976 .6000 DEC 6000 B20 OCT 20 RS1 OCT 25000 RS2 OCT 177574 PRS1 OCT 153000 PRS2 OCT 203 N1 DEC -1 N3 DEC -3 N30 DEC -30 N307 DEC -307 N1976 DEC -1976 ASC00 ASC 1,00 ASCCM ASC 1,, ASCCL ASC 1,:: * MCONA DEF MONTH-2 M#DY2 DEF M#DAY+2 DAYTB DEF WKDAY * MSGBF EQU * ASC 1, M.HR NOP M.MIN DEC 0,0 M.SEC NOP ASC 1, M.MON DEC 0,0 M.DAY DEC 0,0 M.YR DEC 0,0 ASC 1, M.WDY DEC 0,0 MSGLN ABS *-MSGBF * * FOLLOWING TABLE DEFINES STARTING JULIAN DAY-1 OF EACH MONTH * VALUES ARE FOR LEAP-YEARS. BIT15=1 IF 31 DAY MONTH. BITS 14-12 * ARE 1ST WEEKDAY OF MONTH (JAN OR FEB) OF WKDAY-1 OTHERWISE (YEAR 0). M#DAY DEF *+1 OCT 100000 MONTH=0 OCT 100000 JAN .31 OCT 000037 FEB OCT 100074 MARCH OCT 000133 APRIL OCT 100171 MAY OCT 000230 JUNE OCT 100266 JULY OCT 100325 AUGUST OCT 000364 SEPTEMBER OCT 100422 OCTOBER OCT 000461 NOVEMBER OCT 100517 DECEMBER .01B OCT 010000 * PCHEK DEF *+1 TBLE OF MAX ALLOWED +1 FOR PARAMS DEC -24 HRS N60 DEC -60 MINUTES DEC -60 SECONDS DEC -13 MONTHS DEC -32 DAYS DEC -2145 YEARS * * ROTATE WEEKDAYS ON MARCH 1,2000 WKDAY ASC 14, SAT SUN MONTUES WEDTHUR FRI MONTH ASC 24, JAN FEB MAR APR MAYJUNEJULY AUGSEPT OCT NOV DEC * * END