.TITLE DIG .IDENT /01/ ; ; THIS PROGRAM SIMULATES A DIGITAL CLOCK ON A CRT. ; IT HAS 2 MODES OF OPERATION BY CONTINOUSLY UPDATING: ; 1) HOURS, MINUTES, SECONDS, DAY OF MONTH, MONTH, DAY AND YEAR ; 2) HOURS AND MINUTES IN LARGE DIGITS ; ; THIS PROGRAM UPDATES ONLY THE CHARACTERS THAT HAVE CHANGED SINCE ; THE LAST SECOND. IT USES THE DIRECT CURSOR ADDRESSING OF A VT52 ; OR VT52 SIMULATED CRT. ; ; AUTHOR N. D. PERRON, DIGITAL EL SEGUNDO, CA. ; ; TO ASSEMBLE: ; MAC DIG=DIG ; ; TO BUILD: ; TKB ; TKB>DIG=DIG ; TKB>/ ; TKB>STACK=100 ; TKB>TASK=...DIG ; TKB>// ; .MCALL GTIM$S,MRKT$S,WTSE$S,QIOW$,DIR$ .MCALL QIOW$S,EXIT$S,ASTX$S,GMCR$ ; MAXLIN=24. ;# OF LINES ON VIDEO TERMINAL MAXCOL=80. ;# OF COLUMNS ; START: DIR$ #GETMCR ;GET MCR BUFFER DIR$ #HOMDPB,DIRERR ;HOME CURSOR, ERASE, HOME MOV #2,TYPEN ;INDICATE HH:MM:SS TYPE DIR$ #ATADPB,DIRERR ;ATTATCH TO UNSOLICITED INPUT ; RESTRT: CMPB TYPEN,TYPEO ;SAME TYPE AS LAST TIME? BEQ 30$ ;BR IF YES ; BITB #100,TYPEN ;ILLEGAL CHAR ENTERED? BEQ 10$ ;BR IF NO BICB #100,TYPEN ;CLEAR FOR NEXT TIME MOV #MSG1,R0 ;COPY MESSAGE 1 TO BOTTOM OF SCREEN MOV #WRKBUF+,R1 5$: MOVB (R0)+,(R1)+ ;COPY A BYTE BNE 5$ ;LOOP TIL DONE BR 30$ ;JOIN COMMON CODE ; 10$: MOVB TYPEN,TYPEO ;SET UP FOR NEXT TIME MOV #WRKBUF,R0 ;BLANK OUT WORKING BUFFER MOV #VTBUF,R1 ;INIT VT BUFFER MOV #MAXLIN*MAXCOL/2,R2 ;NUMBER OF WORDS TO BLANK 15$: MOV #" ,(R0)+ ;BLANK 2 CHARACTERS CLR (R1)+ ;BLANK VT BUFFER DEC R2 ;NOW 1 LESS WORD BNE 15$ ;BR IF MORE ; MOV #HMSTAB,R0 ;DEFAULT TO HH:MM:SS COLON TABLE CMPB #2,TYPEN ;RIGHT? BEQ 20$ ;BR IF HH:MM:SS MOV #HMTAB,R0 ;HH:MM ONLY 20$: MOVB #'X,@0(R0) ;FORM PART OF COLON TST (R0)+ ;GET TO NEXT ENTRY BNE 20$ ;BR IF NOT DONE ; MOV #-1,R0 ;INIT HH, MM, SS TO SAY MUST DISPLAY MOV R0,HR MOV R0,TMIN MOV R0,UMIN MOV R0,TSEC MOV R0,USEC MOV R0,DAY MOV R0,MON MOV R0,YR ; 30$: GTIM$S #TIMBUF ;GET TIME CMPB #1,TYPEN ;HH:MM TYPE? BNE 40$ ;BR IF NOT CALL HHMM ;FORMAT HH:MM BR 100$ ;JOIN COMMON CODE 40$: CMPB #2,TYPEN ;HH:MM:SS ? BNE 50$ ;BR IF NOT CALL HHMMSS ;FORMAT HH:MM:SS BR 100$ ;JOIN COMMON CODE 50$: CMPB #200,TYPEN ;EXIT? BNE 60$ ;BR IF NOT DIR$ #ENDDPB,DIRERR ;OUTPUT ENDING MESSAGE EXIT$S ;TA-TA ; 60$: BPT ; 100$: TST NEDDIS ;NEED TO DISPLAY? BEQ 110$ ;BR IF NO CLR NEDDIS ;INIT FOR NEXT TIME CALL DISPLY ;DISPLAY WHAT WE GOT 110$: MRKT$S #1,#2,#1,,DIRERR;WAIT 1 SECOND WTSE$S #1 ;WAIT FOR TIMER TO EXPIRE BR RESTRT ;DO IT ALL AGAIN .PAGE ; ; FORMAT HH:MM IN BIG CHARACTERS ; HHMM: ;FORMAT HOURS MOV TIMBUF+6,R0 ;PICK UP HOUR CMP HR,R0 ;DID HR CHANGE? BEQ 10$ ;BR IF NO MOV R0,HR ;SET UP FOR NEXT TIME INC NEDDIS ;SAY NEED TI DISPLAY MOV #10.,R1 ;PICK UP DIVISOR OF 10. CALL $DIV ;DIVIDE HOUR BY 10. MOV R1,-(SP) ;SAVE UNITS ;R0=TENS POSITION OF HOUR CLR R1 ;START AT COL 1 TST R0 ;LEADING ZERO? BNE 5$ ;BR IF NO MOV #' ,R0 ;SUPPRESS LEADING ZERO 5$: CALL FMTBIG ;FORMAT A BIG CHARACTER MOV (SP)+,R0 ;PICK UP UNITS POSITION MOV #18.,R1 ;START AT COL 19. CALL FMTBIG ;FORMAT ANOTHER BIG CHARACTER ;FORMAT MINUTES 10$: MOV TIMBUF+8.,R0 ;PICK UP MINUTES MOV #10.,R1 CALL $DIV ;DIVIDE MINUTES BY 10. MOV R1,-(SP) ;SAVE UNITS ;R0=TENS POSITION OF MINUTES CMP TMIN,R0 ;DID TENS POS OF MINS CHANGE? BEQ 15$ ;BR IF NOT MOV R0,TMIN ;SET UP FOR NEXT TIME INC NEDDIS ;SAY NEED TO DISPLAY MOV #44.,R1 ;START AT COL 45. CALL FMTBIG ;FORMAT 1ST DIGIT OF MINUTES 15$: MOV (SP)+,R0 ;PICK UP UNITS CMP UMIN,R0 ;DID TENS POS OF MINS CHANGE? BEQ 20$ ;BR IF NOT MOV R0,UMIN ;UPDATE FOR NEXT TIME INC NEDDIS ;SAY NEED TO DISPLAY MOV #62.,R1 ;START AT COL 63. CALL FMTBIG ;FORMAT 2ND DIGIT 20$: RETURN .PAGE ; ; FORMAT HH:MM:SS IN MEDIUM CHARACTERS ; AND DAY IN SMALL CHARS ; HHMMSS: ;FORMAT HOURS MOV TIMBUF+6,R0 ;PICK UP HOUR CMP HR,R0 ;DID HR CHANGE? BEQ 10$ ;BR IF NO MOV R0,HR ;SET UP FOR NEXT TIME INC NEDDIS ;SAY NEED TI DISPLAY MOV #10.,R1 ;PICK UP DIVISOR OF 10. CALL $DIV ;DIVIDE HOUR BY 10. MOV R1,-(SP) ;SAVE UNITS ;R0=TENS POSITION OF HOUR CLR R1 ;START AT COL 1 TST R0 ;LEADING ZERO? BNE 5$ ;BR IF NO MOV #' ,R0 ;SUPPRESS LEADING ZERO 5$: CALL FMTMED ;FORMAT A MEDIUM CHARACTER MOV (SP)+,R0 ;PICK UP UNITS POSITION MOV #12.,R1 ;START AT COL 13. CALL FMTMED ;FORMAT ANOTHER MEDIUM CHARACTER ;FORMAT MINUTES 10$: MOV TIMBUF+8.,R0 ;PICK UP MINUTES MOV #10.,R1 CALL $DIV ;DIVIDE MINUTES BY 10. MOV R1,-(SP) ;SAVE UNITS ;R0=TENS POSITION OF MINUTES CMP TMIN,R0 ;DID TENS POS OF MINS CHANGE? BEQ 15$ ;BR IF NOT MOV R0,TMIN ;SET UP FOR NEXT TIME INC NEDDIS ;SAY NEED TO DISPLAY MOV #28.,R1 ;START AT COL 29. CALL FMTMED ;FORMAT 1ST DIGIT OF MINUTES 15$: MOV (SP)+,R0 ;PICK UP UNITS CMP UMIN,R0 ;DID TENS POS OF MINS CHANGE? BEQ 20$ ;BR IF NOT MOV R0,UMIN ;UPDATE FOR NEXT TIME INC NEDDIS ;SAY NEED TO DISPLAY MOV #40.,R1 ;START AT COL 41. CALL FMTMED ;FORMAT 2ND DIGIT 20$: ;FORMAT SECONDS MOV TIMBUF+10.,R0 ;PICK UP SECONDS MOV #10.,R1 CALL $DIV ;DIVIDE SECONDS BY 10. MOV R1,-(SP) ;SAVE UNITS ;R0=TENS POSITION OF SECONDS CMP TSEC,R0 ;DID TENS POS OF SECS CHANGE? BEQ 25$ ;BR IF NOT MOV R0,TSEC ;SET UP FOR NEXT TIME INC NEDDIS ;SAY NEED TO DISPLAY MOV #56.,R1 ;START AT COL 57. CALL FMTMED ;FORMAT 1ST DIGIT OF SECONDS 25$: MOV (SP)+,R0 ;PICK UP UNITS CMP USEC,R0 ;DID TENS POS OF SECS CHANGE? BEQ 30$ ;BR IF NOT MOV R0,USEC ;UPDATE FOR NEXT TIME INC NEDDIS ;SAY NEED TO DISPLAY MOV #68.,R1 ;START AT COL 69. CALL FMTMED ;FORMAT 2ND DIGIT 30$: ;FORMAT DATE MOV TIMBUF+4,R0 ;DATE CMP DAY,R0 ;CHANGE? BEQ 40$ ;BR IF NO MOV R0,DAY ;SET UP FOR NEXT TIME INC NEDDIS ;NEED TO DISPLAY MOV #10.,R1 CALL $DIV ;DIVIDE BY 10. MOV R1,-(SP) ;SAVE UNITS TST R0 ;LEADING ZERO? BNE 35$ ;BR IF NOT MOV #40,R0 ;SUPPRESS 35$: CLR R1 ;COL # CALL FMTSMA ;FORMAT A SMALL CHAR MOV (SP)+,R0 ;PICK UP UNITS DIG MOV #8.,R1 ;COL # CALL FMTSMA ;FORMAT MOV #'-,R0 ;DASH MOV #18.,R1 ;COL # CALL FMTSMA ;FORMAT 40$: ;FORMAT MONTH MOV TIMBUF+2,R0 ;PICK UP MONTH CMP MON,R0 ;CHANGE? BEQ 45$ ;BR IF NOT MOV R0,MON ;SAVE INC NEDDIS ;NEED TO DISPLAY DEC R0 ;START AT ZERO ASL R0 ;*4 ASL R0 MOVB MONTAB+2(R0),-(SP) ;SAVE 3RD CHAR MOVB MONTAB+1(R0),-(SP) ;SAVE 2ND MOVB MONTAB(R0),R0 ;PICK UP 1ST CHAR MOV #28.,R1 ;COL # CALL FMTSMA ;FORMAT MOVB (SP)+,R0 ;PICK UP 2ND CHAR MOV #36.,R1 ;COL # CALL FMTSMA ;FORMAT MOVB (SP)+,R0 ;PICK UP 3RD CHAR MOV #44.,R1 ;COL # CALL FMTSMA ;FORMAT MOV #'-,R0 ;DASH MOV #54.,R1 ;COL # CALL FMTSMA ;FORMAT 45$: ;FORMAT YR MOV TIMBUF,R0 ;PICK UP YR CMP YR,R0 ;CHANGE? BEQ 50$ ;BR IF NO MOV R0,YR ;UPDATE INC NEDDIS ;NEED TO DISPLAY MOV #10.,R1 CALL $DIV ;DIVIDE BY 10. MOV R1,-(SP) ;SAVE UNITS MOV #64.,R1 ;COL # CALL FMTSMA ;FORMAT MOV (SP)+,R0 ;PICK UP UNITS MOV #72.,R1 ;COL # CALL FMTSMA ;FORMAT 50$: RETURN .PAGE ; ; FORMAT A BIG CHARACTER ; ; CALLING SEQUENCE: ; ; MOV #BINVAL,R0 ;BINARY VALUE TO FORMAT ; MOV #COLNUM-1,R1 ;STARTING COLUMN NUMBER (LESS 1) ; CALL FMTBIG ;CALL ROUTINE ; ; NOTES: ; ; BINARY VALUE MUST BE IN RANGE OF 0-11 OR 40 FOR SPACE (OCTAL BINARY VALUES) ; COLNUM-1 MUST BE EVEN AND IN RANGE OF 0 THRU MAXCOL-1 ; ; REGISTERS R0,R1,R2,R3 ARE DESTROYED ; FMTBIG: ASL R0 ;DOUBLE FOR TABLE LOOKUP CMP #40*2,R0 ;SPACE? BNE 5$ ;BR IF NOT MOV #12*2,R0 ;PICK UP TEXT FOR SPACE 5$: MOV BIGTAB(R0),R0 ;PICK UP ADDR OF TEXT MOV #7,R2 ;# OF LINES PER CHARACTER DIVIDED BY 3 10$: MOV #8.,R3 ;# OF COLUMNS PER CHARACTER DIVIDED BY 2 20$: MOV (R0),WRKBUF(R1) ;1ST OF 3 LINES MOV (R0),WRKBUF+MAXCOL(R1) ;2ND MOV (R0)+,WRKBUF+MAXCOL+MAXCOL(R1) ;3RD ADD #2,R1 ;POINT TO NEXT PAIR OF CHARS IN WRKBUF DEC R3 ;DONE ALL COL'S FOR THIS LINE? BNE 20$ ;BR IF NO ADD #-16.,R1 ;POINT TO NEXT LINE DEC R2 ;DONE ALL LINES? BNE 10$ ;BR IF NO RETURN ;FINI .PAGE ; ; FORMAT A MEDIUM CHARACTER ; ; CALLING SEQUENCE: ; ; MOV #BINVAL,R0 ;BINARY VALUE TO FORMAT ; MOV #COLNUM-1,R1 ;STARTING COLUMN NUMBER (LESS 1) ; CALL FMTMED ;CALL ROUTINE ; ; NOTES: ; ; BINARY VALUE MUST BE IN RANGE OF 0-11 OR 40 FOR SPACE (OCTAL BINARY VALUES) ; COLNUM-1 MUST BE EVEN AND IN RANGE OF 0 THRU MAXCOL-1 ; ; REGISTERS R0,R1,R2,R3 ARE DESTROYED ; FMTMED: ASL R0 ;DOUBLE FOR TABLE LOOKUP CMP #40*2,R0 ;SPACE? BNE 5$ ;BR IF NOT MOV #12*2,R0 ;PICK UP TEXT FOR SPACE 5$: MOV MEDTAB(R0),R0 ;PICK UP ADDR OF TEXT MOV #7,R2 ;# OF LINES PER CHARACTER DIVIDED BY 2 10$: MOV #6,R3 ;# OF COLUMNS PER CHARACTER DIVIDED BY 2 20$: MOV (R0),WRKBUF(R1) ;1ST OF 3 LINES MOV (R0)+,WRKBUF+MAXCOL(R1) ;2ND ADD #2,R1 ;POINT TO NEXT PAIR OF CHARS IN WRKBUF DEC R3 ;DONE ALL COL'S FOR THIS LINE? BNE 20$ ;BR IF NO ADD #-12.,R1 ;POINT TO NEXT LINE DEC R2 ;DONE ALL LINES? BNE 10$ ;BR IF NO RETURN ;FINI .PAGE ; ; FORMAT A SMALL CHARACTER ; ; CALLING SEQUENCE: ; ; MOV #BINVAL,R0 ;BINARY VALUE TO FORMAT ; MOV #COLNUM-1,R1 ;STARTING COLUMN NUMBER (LESS 1) ; CALL FMTSMA ;CALL ROUTINE ; ; NOTES: ; ; BINARY VALUE MUST BE IN RANGE OF 0-11 OR 40 FOR SPACE (OCTAL BINARY VALUES) ; ASCII A-Z OR DASH ; COLNUM-1 MUST BE EVEN AND IN RANGE OF 0 THRU MAXCOL-1 ; ; REGISTERS R0,R1,R2,R3 ARE DESTROYED ; FMTSMA: CMP #'-,R0 ;DASH? BNE 2$ ;BR IF NO MOV #13,R0 ;PICK UP TABLE ENTRY BR 5$ 2$: CMP #' ,R0 ;SPACE? BNE 3$ ;BR IF NOT MOV #12,R0 ;CONVERT TO NEEDED VALUE BR 5$ 3$: CMP #'A,R0 ;ALPHA? BGT 5$ ;BR IF NOT SUB #'A-14,R0 ;SCALE TO OUR TABLE 5$: ASL R0 ;DOUBLE FOR TABLE LOOKUP MOV SMATAB(R0),R0 ;PICK UP ADDR OF TEXT MOV #7,R2 ;# OF LINES PER CHARACTER DIVIDED BY 2 10$: MOV #3,R3 ;# OF COLUMNS PER CHARACTER DIVIDED BY 2 20$: MOV (R0)+,WRKBUF+(R1) ;1ST ADD #2,R1 ;POINT TO NEXT PAIR OF CHARS IN WRKBUF DEC R3 ;DONE ALL COL'S FOR THIS LINE? BNE 20$ ;BR IF NO ADD #MAXCOL-6,R1 ;POINT TO NEXT LINE DEC R2 ;DONE ALL LINES? BNE 10$ ;BR IF NO RETURN ;FINI .PAGE ; ; DISPLAY ALL CHARACTERS THAT CHANGED SINCE LAST TIME ; ; CALLING SEQUENCE: ; ; CALL DISPLY ; ; REGISTERS R0,R1,R2,R3,R4,R5 ARE DESTROYED ; DISPLY: BR 8$ ;NOP IF NOT CRT MOV #WRKBUF,R0 ;OUTPUT WILL BE PRINTED ON LUN 5 5$: QIOW$S #IO.WLB,#5,#2,,,, BCS . ADD #MAXCOL,R0 CMP #+WRKBUF,R0 BNE 5$ RETURN ; 8$: CLR R1 ;LINE POSITION CLR R2 ;BYTE POSITION CLR R3 ;# OF CHARS TO OUTPUT 10$: CLR R0 ;COL POSITION 20$: CMPB WRKBUF(R2),VTBUF(R2) ;ANY CHANGE? BEQ 40$ ;BR IF NO MOVB WRKBUF(R2),VTBUF(R2) ;UPDATE WORK BUFFER TST R3 ;ANY CHARS YET? BNE 30$ ;BR IF YES MOV R2,R4 ;SET UP START OF BUFFER ADDR ADD #VTBUF,R4 ;ADD IN BASE OF BUFFER MOV R0,STCOL ;SET UP STARTING COL # 30$: INC R3 ;NOW 1 ADDITIONAL CHAR TO OUTPUT BR 60$ ;JOIN COMMON CODE 40$: TST R3 ;ANY CHARS TO OUTPUT? BEQ 60$ ;BR IF NO CALL OUTLIN ;OUTPUT A LINE 60$: INC R2 ;NEXT BYTE INC R0 ;NEXT COL CMP #MAXCOL,R0 ;DONE ALL COLS? BGT 20$ ;BR IF NOT TST R3 ;ANY CHARS TO OUTPUT? BEQ 70$ ;BR IF NO CALL OUTLIN ;OUTPUT 1 LINE 70$: INC R1 ;NEXT LINE CMP #MAXLIN-1,R1 ;DONE ALL LINES? BNE 10$ ;BR IF NO MOV #2,HOMDPB+Q.IOPL+2 ;SET UP TO HOME CURSOR DIR$ #HOMDPB,DIRERR ;HOME IT MOV #6,HOMDPB+Q.IOPL+2 ;RESET CHAR COUNT RETURN ;FINI .PAGE ; ; OUTPUT 1 LINE TO CRT ; ; CALLING SEQUENCE ; ; MOV #NUMCHR,R3 ;# OF CHARACTERS TO DISPLAY ; MOV #LINNUM,R1 ;LINE NUMBER ; CALL OUTLIN ;CALL ROUTINE ; ; REGISTERS R3,R4,R5 ARE DESTROYED ; OUTLIN: MOV R3,NUMCHR ;SAVE # OF CHARS MOV #OUTBUF+2,R5 ;WHERE TO STUFF DATA MOVB R1,(R5)+ ;SET UP LINE # MOVB STCOL,(R5)+ ;SET UP COL # ADD #20040,OUTBUF+2 ;PART OF CURSOR ADDRESS 10$: MOVB (R4)+,(R5)+ ;COPY A CHAR DEC R3 ;DONE? BNE 10$ ;BR IF NOT ADD #4,NUMCHR ;ADD IN CURSOR CONTROL DIR$ #OUTDPB,DIRERR ;QIO TO TERMINAL ;NOTE R3=0 RETURN ;FINI .PAGE ; ; UNSOLICITED INPUT PROCESSING ; ATAAST: CMPB #170,(SP) ;X (LOWER CASE)=EXIT BEQ 5$ ;BR IF YES CMPB #3,(SP) ;CONTROL C=EXIT BEQ 5$ ;BR IF YES CMPB #'X,(SP) ;X=EXIT BNE 10$ ;BR IF NOT 5$: MOVB #200,TYPEN ;INDICATE EXIT BR 100$ ;JOIN COMMON CODE 10$: CMPB #15,(SP) ;RETURN KEY? BNE 30$ ;BR IF NOT CMPB #1,TYPEN ;CHANGE MODE BEQ 20$ MOVB #1,TYPEN BR 100$ 20$: MOVB #2,TYPEN BR 100$ 30$: BISB #100,TYPEN ;INDICATE ILLEGAL CHAR ENTERED 100$: TST (SP)+ ;POP CHARACTER ASTX$S DIRERR ;EXIT AST ; ; DIRECTIVE ERROR ; DIRERR: MOV $DSW,R0 ;PICK UP REASON MOV (SP)+,R1 ;PICK UP RET ADDR BPT ;CRASH TASK .PAGE ; ; MACRO'S AND IMPURE AREA ; OUTDPB: QIOW$ IO.WAL,5,2,,,, NUMCHR=OUTDPB+Q.IOPL+2 ;NUMBER OF CHARACTERS HOMDPB: QIOW$ IO.WAL,5,2,,,, ATADPB: QIOW$ IO.ATA,5,2,,,, ;ATTATCH TO UNSOLICITED INPUT HOMBUF: .BYTE 33,'H,33,'J,33,'H ;HOME CURSOR, ERASE, HOME ENDDPB: QIOW$ IO.WAL,5,2,,,, OUTBUF: .BYTE 33,'Y,0,0 ;ESC, 'Y, LIN#, COL# .BLKB MAXCOL ;BUFFER FOR 1 LINE .EVEN GETMCR: GMCR$ ;GET MCR BUFFER (TO FREE UP DSR) .=GETMCR+2 ;OVERLAP MCRBUF+WRKBUF WRKBUF: .BLKB MAXLIN*MAXCOL ;WORKING BUFFER VTBUF: .BLKB MAXLIN*MAXCOL ;ACTUAL VT BUFFER TO DISPLAY TIMBUF: .BLKW 8. ;BUFFER TO SAVE TIME INFO TYPEN: .BYTE 0 ;NEW TYPE, 1=HH:MM, 2=HH:MM:SS, 200=EXIT ;100=ILLEGAL CHAR ENTERED TYPEO: .BYTE 0 ;OLD TYPE (SAME AS ABOVE) STCOL: .WORD 0 ;STARTING COLUMN # HR: .WORD 0 ;LAST HOUR TMIN: .WORD 0 ;LAST MINUTE (TENS POS) UMIN: .WORD 0 ;LAST MIN (UNITS POS) TSEC: .WORD 0 ;LAST SECOND (TENS POS) USEC: .WORD 0 ;LAST SEC (UNITS POS) DAY: .WORD 0 ;LAST DAY MON: .WORD 0 ;LAST MONTH YR: .WORD 0 ;LAST YEAR NEDDIS: .WORD 0 ;0=DON'T NEED TO DISPLAY, OTHERWISE DISPLAY HMTAB: .WORD WRKBUF++37. ;FORM COLON BETWEEN HRS + MINS .WORD WRKBUF++38. .WORD WRKBUF++37. .WORD WRKBUF++38. .WORD WRKBUF++37. .WORD WRKBUF++38. .WORD WRKBUF++37. .WORD WRKBUF++38. .WORD 0 ; HMSTAB: .WORD WRKBUF++24. ;FORM COLLON FOR HH:MM:SS .WORD WRKBUF++25. .WORD WRKBUF++24. .WORD WRKBUF++25. .WORD WRKBUF++24. .WORD WRKBUF++25. .WORD WRKBUF++24. .WORD WRKBUF++25. .WORD WRKBUF++52. .WORD WRKBUF++53. .WORD WRKBUF++52. .WORD WRKBUF++53. .WORD WRKBUF++52. .WORD WRKBUF++53. .WORD WRKBUF++52. .WORD WRKBUF++53. .WORD 0 .PAGE .NLIST BEX ; ; MONTH TABLE ; MONTAB: .ASCII /JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC / ; ; BIG CHARACTER DATA ; BIGTAB: .WORD BIG0,BIG1,BIG2,BIG3,BIG4,BIG5 .WORD BIG6,BIG7,BIG8,BIG9,BIGSP ; BIG0: .ASCII / XXXXXXXXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXX / ; BIG1: .ASCII / XXX / .ASCII / XXXXXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXXXXXXXX / ; BIG2: .ASCII / XXXXXXXXX / .ASCII /XXX XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII /XXXXXXXXXXXXXXX / ; BIG3: .ASCII / XXXXXXXXX / .ASCII /XXX XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXX / ; BIG4: .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII /XXXXXXXXXXXXXXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / ; BIG5: .ASCII /XXXXXXXXXXXXXXX / .ASCII /XXX / .ASCII /XXXXXXXXX / .ASCII / XXX / .ASCII / XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXX / ; BIG6: .ASCII / XXXXXXXXX / .ASCII /XXX / .ASCII /XXX / .ASCII /XXXXXXXXXXXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXX / ; BIG7: .ASCII /XXXXXXXXXXXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXX / .ASCII /XXX / ; BIG8: .ASCII / XXXXXXXXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXX / ; BIG9: .ASCII / XXXXXXXXX / .ASCII /XXX XXX / .ASCII /XXX XXX / .ASCII / XXXXXXXXXXXX / .ASCII / XXX / .ASCII / XXX / .ASCII / XXXXXXXXX / ; BIGSP: .REPT 7 .ASCII / / ;SPACE .ENDR ; ; MEDIUM CHARACTER DATA ; MEDTAB: .WORD MED0,MED1,MED2,MED3,MED4,MED5 .WORD MED6,MED7,MED8,MED9,MEDSP ; MED0: .ASCII / XXXXXX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XXXXXX / ; MED1: .ASCII / XX / .ASCII / XXXX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XXXXXX / ; MED2: .ASCII / XXXXXX / .ASCII / XX XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XXXXXXXXXX / ; MED3: .ASCII / XXXXXX / .ASCII / XX XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XX XX / .ASCII / XXXXXX / ; MED4: .ASCII / XX XX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XXXXXXXXXX / .ASCII / XX / .ASCII / XX / .ASCII / XX / ; MED5: .ASCII / XXXXXXXXXX / .ASCII / XX / .ASCII / XXXXXX / .ASCII / XX / .ASCII / XX / .ASCII / XX XX / .ASCII / XXXXXX / ; MED6: .ASCII / XXXXXX / .ASCII / XX / .ASCII / XX / .ASCII / XXXXXXXX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XXXXXX / ; MED7: .ASCII / XXXXXXXX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / .ASCII / XX / ; MED8: .ASCII / XXXXXX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XXXXXX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XXXXXX / ; MED9: .ASCII / XXXXXX / .ASCII / XX XX / .ASCII / XX XX / .ASCII / XXXXXXXX / .ASCII / XX / .ASCII / XX / .ASCII / XXXXXX / ; MEDSP: .REPT 7 .ASCII / / ;SPACE .ENDR ; ; SMALL CHARACTER DATA ; SMATAB: .WORD SMA0,SMA1,SMA2,SMA3,SMA4,SMA5 .WORD SMA6,SMA7,SMA8,SMA9,SMASP,SMADAS .WORD SMAA,SMAB,SMAC,SMAD,SMAE,SMAF,SMAG,SMAH,SMAI,SMAJ,SMAK,SMAL,SMAM .WORD SMAN,SMAO,SMAP,SMAQ,SMAR,SMAS,SMAT,SMAU,SMAV,SMAW,SMAX,SMAY,SMAZ ; SMA0: .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII / XXX / ; SMA1: .ASCII / X / .ASCII / XX / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / XXX / ; SMA2: .ASCII / XXX / .ASCII /X X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII /XXXXX / ; SMA3: .ASCII / XXX / .ASCII /X X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII /X X / .ASCII / XXX / ; SMA4: .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /XXXXX / .ASCII / X / .ASCII / X / .ASCII / X / ; SMA5: .ASCII /XXXXX / .ASCII /X / .ASCII /XXX / .ASCII / X / .ASCII / X / .ASCII /X X / .ASCII / XXX / ; SMA6: .ASCII / XXX / .ASCII /X / .ASCII /X / .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII / XXX / ; SMA7: .ASCII /XXXX / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII /X / ; SMA8: .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII / XXX / ; SMA9: .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII / XXXX / .ASCII / X / .ASCII / X / .ASCII / XXX / ; SMASP: .REPT 7 .ASCII / / ;SPACE .ENDR ; SMADAS: .ASCII / / ;DASH .ASCII / / .ASCII / / .ASCII /XXXXX / .ASCII / / .ASCII / / .ASCII / / ; SMAA: .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /XXXXX / .ASCII /X X / .ASCII /X X / ; SMAB: .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII /XXXX / ; SMAC: .ASCII / XXXX / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII / XXXX / ; SMAD: .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /XXXX / ; SMAE: .ASCII /XXXXX / .ASCII /X / .ASCII /X / .ASCII /XXXX / .ASCII /X / .ASCII /X / .ASCII /XXXXX / ; SMAF: .ASCII /XXXXX / .ASCII /X / .ASCII /X / .ASCII /XXXX / .ASCII /X / .ASCII /X / .ASCII /X / ; SMAG: .ASCII / XXXX / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /X XXX / .ASCII /X X / .ASCII / XXX / ; SMAH: .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /XXXXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / ; SMAI: .ASCII / XXX / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / XXX / ; SMAJ: .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII /X X / .ASCII /X X / .ASCII / XXX / ; SMAK: .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /XXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / ; SMAL: .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /X / .ASCII /XXXXX / ; SMAM: .ASCII /X X / .ASCII /XX XX / .ASCII /X X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / ; SMAN: .ASCII /X X / .ASCII /X X / .ASCII /XX X / .ASCII /X X X / .ASCII /X XX / .ASCII /X X / .ASCII /X X / ; SMAO: .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII / XXX / ; SMAP: .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII /XXXX / .ASCII /X / .ASCII /X / .ASCII /X / ; SMAQ: .ASCII / XXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X X / .ASCII /X X / .ASCII / XX X / ; SMAR: .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII /XXXX / .ASCII /X X / .ASCII /X X / .ASCII /X X / ; SMAS: .ASCII / XXXX / .ASCII /X / .ASCII /X / .ASCII / XXX / .ASCII / X / .ASCII / X / .ASCII /XXXX / ; SMAT: .ASCII /XXXXX / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / ; SMAU: .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /XXXXX / ; SMAV: .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII / X X / .ASCII / X / ; SMAW: .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X / .ASCII /X X X / .ASCII /XX XX / .ASCII /X X / ; SMAX: .ASCII /X X / .ASCII /X X / .ASCII / X X / .ASCII / X / .ASCII / X X / .ASCII /X X / .ASCII /X X / ; SMAY: .ASCII /X X / .ASCII /X X / .ASCII / X X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / ; SMAZ: .ASCII /XXXXX / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII / X / .ASCII /X / .ASCII /XXXXX / ; MSG1: .ASCIZ ?ENTER X OR CTRL/C TO EXIT, RETURN KEY TO CHANGE MODE? MSG2: .BYTE 33,'H,33,'J,33,'H ;HOME, ERASE, HOME MSG2L=.-MSG2 .EVEN .END START