home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / misc / daytime / daytime.asm next >
Assembly Source File  |  1988-08-29  |  16KB  |  283 lines

  1.               NAME      DAYTIME
  2.               PAGE      65,80
  3.               TITLE     DAYTIME AUTOMATICALLY SETS REAL TIME CLOCK IN TAPR TNC
  4.  
  5.                   ;This program is to be used in conjunction with either
  6.                   ;a TAPR TNC2 clone ,PK 232  or most any other packet TNC.
  7.                   ;This program when run, will read the DATE and TIME of the
  8.                   ;real time clock in most IBM compatible PC/XT/AT computers.
  9.                   ;This data will be sent to the selected comm port along
  10.                   ;with the appropriate TAPR compatible command, thus setting
  11.                   ;the real time clock in the TNC. This allows use of the
  12.                   ;CONSTAMP,MSTAMP and DAYSTAMP commands in conjunction
  13.                   ;with the TNC,s clock for date/time stamping.
  14.                   ;DAYTIME.COM may be loaded along with a program such as
  15.                   ;YAPP from a batch file.
  16.                   ;In this case DAYTIME.COM is loaded first. This will set
  17.                   ;the real time clock in the TNC, prior to the computer
  18.                   ;executing the YAPP program.
  19.  
  20.                   ;
  21.                   ;Copyright (c) 1988 Richard Tashner N2EO
  22.                   ;                   163-34 21 Road
  23.                   ;                   Whitestone N.Y. 11357
  24.                   ;
  25.                   ;To assemble use MASM 5.0 and follow these steps:
  26.                   ;
  27.                   ;C> MASM DAYTIME
  28.                   ;C> LINK DAYTIME
  29.                   ;C> EXE2BIN DAYTIME DAYTIME.COM
  30.                   ;C> DEL DAYTIME.EXE
  31.  
  32.                 ;NOTE IGNORE warning L4021: no stack segment
  33.                 ;WHEN RUNNING THE LINKER
  34.  
  35.             ;**************************************************
  36.             ;* THESE THREE PARAMETERS MAY BE CHANGED TO SUIT  *
  37.             ;* INDIVIDUAL NEEDS. SEE DAYTIME.DOC FOR DETAILS  *
  38.             ;**************************************************
  39. BAUDRATE          EQU       083H                ;BAUD RATE SELECT
  40. COMMPORT          EQU       0                   ;COMM PORT SELECT
  41. ATTRIB            EQU       07H                 ;VIDIO COLOR ATTRIBUTE
  42. ;**********************************************************************
  43.  
  44. CR                EQU       0DH                 ;ASCII CARRAGE RETURN
  45. LF                EQU       0AH                 ;ASCII LINE FEED
  46. SPCE              EQU       20H                 ;ASCII SPACE
  47.  
  48. CSEG              SEGMENT PARA PUBLIC 'CODE'
  49.  
  50.                   ORG       100H
  51.  
  52.                   ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG
  53.                   ;**************************************************
  54.                   ;*   ROUTINE TO INITIALIZE APPROPRIATE COMM PORT  *
  55.                   ;**************************************************
  56. DAYTIME           PROC       NEAR
  57.                   MOV        AH,0               ;INITIALIZE COMM PORT
  58.                   MOV        AL,BAUDRATE        ;   WITH PROPER BAUD RATE
  59.                   MOV        DX,COMMPORT        ;   AND PROPER COMM PORT
  60.                   INT        14H                ;DO IT!
  61.                              ;*** END OF ROUTINE ***
  62.  
  63.                   ;*********************************************************
  64.                   ;*   ROUTINE TO INITIALIZE WINDOW AND PRINT SCREEN DATA  *
  65.                   ;*********************************************************
  66.                   MOV        CH,0               ;UPPER LEFT Y
  67.                   MOV        CL,0               ;UPPER LEFT X
  68.                   MOV        DH,24              ;LOWER RIGHT Y
  69.                   MOV        DL,79              ;LOWER RIGHT X
  70.                   CALL       WINDOW             ;CLEAR ENTIRE SCREEN
  71.                   MOV        DH,2               ;Y - AXIS
  72.                   MOV        DL,24              ;X - AXIS
  73.                   CALL       POSCURSE           ;POSITION CURSOR
  74.                   MOV        DX,OFFSET MESS_1   ;DISPLAY MESS_1
  75.                   MOV        AH,9
  76.                   INT        21H                ;DO IT!
  77.                              ;*** END OF ROUTINE ***
  78.  
  79.                   ;**********************************
  80.                   ;*   ROUTINE TO GET SYSTEM DATE   *
  81.                   ;*    CX=YEAR DH=MONTH DL=DAY     *
  82.                   ;**********************************
  83.                   MOV        AH,2AH             ;GET SYSTEM DATE
  84.                   INT        21H                ;DO IT!
  85.                   SUB        CL,06CH            ;ADJUST 'CL' FOR PROPER YEAR
  86.                   MOV        AL,CL              ;GET LOW ORDER YEAR BYTE
  87.                   AAM                           ;ADJUST TO 'UNPACKED' BCD
  88.                   ADD        AH,30H             ;ADJUST TO ASCII
  89.                   ADD        AL,30H             ;  CHARACTERS
  90.                   MOV        BUFFER+8,AH        ;SAVE HIGH ORDER YEAR BYTE
  91.                   MOV        BUFFER+9,AL        ;SAVE LOW ORDER YEAR BYTE
  92.                   MOV        AL,DH              ;GET HIGH ORDER BYTE IN MONTH
  93.                   AAM                           ;ADJUST TO 'UNPACKED' BCD
  94.                   ADD        AH,30H             ;ADJUST TO ASCII
  95.                   ADD        AL,30H             ;  CHARACTERS
  96.                   MOV        BUFFER+10,AH       ;SAVE HIGH ORDER MONTH BYTE
  97.                   MOV        BUFFER+11,AL       ;SAVE LOW ORDER MONTH BYTE
  98.                   MOV        AL,DL              ;GET HIGH ORDER DAY BYTE
  99.                   AAM                           ;ADJUST TO 'UNPACKED' BCD
  100.                   ADD        AH,30H             ;ADJUST TO ASCII
  101.                   ADD        AL,30H             ;  CHARACTERS
  102.                   MOV        BUFFER+12,AH       ;SAVE HIGH ORDER DAY BYTE
  103.                   MOV        BUFFER+13,AL       ;SAVE LOW ORDER DAY BYTE
  104.                              ;*** END OF ROUTINE ***
  105.  
  106.                   ;**********************************
  107.                   ;*   ROUTINE TO GET SYSTEM TIME   *
  108.                   ;*       CH=HOUR CL=MINUTE        *
  109.                   ;**********************************
  110.                   MOV        AH,2CH             ;GET SYSTEM TIME
  111.                   INT        21H                ;DO IT!
  112.                   MOV        AL,CH              ;GET HIGH ORDER HOUR BYTE
  113.                   AAM                           ;ADJUST TO 'UNPACKED' BCD
  114.                   ADD        AH,30H             ;ADJUST TO ASCII
  115.                   ADD        AL,30H             ;  CHARACTERS
  116.                   MOV        BUFFER+14,Ah       ;SAVE HIGH ORDER HOUR BYTE
  117.                   MOV        BUFFER+15,Al       ;SAVE LOW ORDER HOUR BYTE
  118.                   MOV        AL,CL              ;GET HIGH ORDER MINUTES BYTE
  119.                   AAM                           ;ADJUST TO 'UNPACKED' BCD
  120.                   ADD        AH,30h             ;ADJUST TO ASCII
  121.                   ADD        AL,30h             ;  CHARACTERS
  122.                   MOV        BUFFER+16,AH       ;SAVE HIGH ORDER MINUTES BYTE
  123.                   MOV        BUFFER+17,AL       ;SAVE LOW ORDER MINUTES BYTE
  124.                              ;*** END OF ROUTINE ***
  125.  
  126.                   ;*********************************************
  127.                   ;*   ROUTINE TO SEND REAL TIME CLOCK DATA    *
  128.                   ;*              TO SERIAL PORT               *
  129.                   ;*********************************************
  130.                   MOV        DI,OFFSET BUFFER   ;POINT 'DI' TO BUFFER
  131. READDATA:         MOV        AL,[DI]            ;GET DATA IN 1ST LOCATION
  132.                   CMP        AL,'$'             ;TEST FOR END OF BUFFER
  133.                   JE         TERMINATE          ;GO TERMINATE IF ENDED
  134.                   MOV        AH,1               ;WRITE DATA TO COMM PORT
  135.                   MOV        DX,COMMPORT        ;USE PROPER COMM PORT
  136.                   INT        14H                ;DO IT!
  137. HOLD:             AND        AH,128             ;GO HOLD UNTIL READ
  138.                   JNZ        HOLD               ;   HAS BEEN COMPLETED
  139.                   INC        DI                 ;GET NEXT BUFFER LOCATION
  140.                   JMP        READDATA           ;GO READDATA
  141.                              ;*** END OF ROUTINE ***
  142.  
  143.                   ;******************************************
  144.                   ;*   ROUTINE TO PUT REAL TIME CLOCK DATA  *
  145.                   ;*              UP ON SCREEN              *
  146.                   ;******************************************
  147. TERMINATE:        MOV        DH,15              ;Y - AXIS
  148.                   MOV        DL,38              ;X - AXIS
  149.                   CALL       POSCURSE           ;POSITION CURSOR
  150.                   MOV        DL,BUFFER+10       ;GET 1ST DIGIT OF MONTH
  151.                   MOV        AH,2
  152.                   INT        21H                ;DISPLAY IT!
  153.                   MOV        DH,15              ;Y - AXIS
  154.                   MOV        DL,39              ;X - AXIS
  155.                   CALL       POSCURSE           ;POSITION CURSOR
  156.                   MOV        DL,BUFFER+11       ;GET 2ND DIGIT OF MONTH
  157.                   MOV        AH,2
  158.                   INT        21H                ;DISPLAY IT!
  159.                   MOV        DH,16              ;Y - AXIS
  160.                   MOV        DL,38              ;X - AXIS
  161.                   CALL       POSCURSE           ;POSITION CURSOR
  162.                   MOV        DL,BUFFER+12       ;GET 1ST DIGIT OF DAY
  163.                   MOV        AH,2
  164.                   INT        21H                ;DISPLAY IT!
  165.                   MOV        DH,16              ;Y - AXIS
  166.                   MOV        DL,39              ;X - AXIS
  167.                   CALL       POSCURSE           ;POSITION CURSOR
  168.                   MOV        DL,BUFFER+13       ;GET 2ND DIGIT OF DAY
  169.                   MOV        AH,2
  170.                   INT        21H                ;DISPLAY IT!
  171.                   MOV        DH,17              ;Y - AXIS
  172.                   MOV        DL,38              ;X - AXIS
  173.                   CALL       POSCURSE           ;POSITION CURSOR
  174.                   MOV        DL,BUFFER+8        ;GET 1ST DIGIT OF YEAR
  175.                   MOV        AH,2
  176.                   INT        21H                ;DISPLAY IT!
  177.                   MOV        DH,17              ;Y - AXIS
  178.                   MOV        DL,39              ;X - AXIS
  179.                   CALL       POSCURSE           ;POSITION CURSOR
  180.                   MOV        DL,BUFFER+9        ;GET 2ND DIGIT OF YEAR
  181.                   MOV        AH,2
  182.                   INT        21H                ;DISPLAY IT!
  183.                   MOV        DH,18              ;Y - AXIS
  184.                   MOV        DL,38              ;X - AXIS
  185.                   CALL       POSCURSE           ;POSITION CURSOR
  186.                   MOV        DL,BUFFER+14       ;GET 1ST DIGIT OF HOUR
  187.                   MOV        AH,2
  188.                   INT        21H                ;DISPLAY IT!
  189.                   MOV        DH,18              ;Y - AXIS
  190.                   MOV        DL,39              ;X - AXIS
  191.                   CALL       POSCURSE           ;POSITION CURSOR
  192.                   MOV        DL,BUFFER+15       ;GET 2ND DIGIT OF HOUR
  193.                   MOV        AH,2
  194.                   INT        21H                ;DISPLAY IT
  195.                   MOV        DH,19              ;Y - AXIS
  196.                   MOV        DL,38              ;X - AXIS
  197.                   CALL       POSCURSE           ;POSITION CURSOR
  198.                   MOV        DL,BUFFER+16       ;GET 1ST DIGIT OF MINUTE
  199.                   MOV        AH,2
  200.                   INT        21H                ;DISPLAY IT
  201.                   MOV        DH,19              ;Y - AXIS
  202.                   MOV        DL,39              ;X - AXIS
  203.                   CALL       POSCURSE           ;POSITION CURSOR
  204.                   MOV        DL,BUFFER+17       ;GET 2ND DIGIT OF MINUTE
  205.                   MOV        AH,2
  206.                   INT        21H                ;DISPLAY IT!
  207.                   MOV        DH,23              ;Y - AXIS
  208.                   MOV        DL,60              ;X - AXIS
  209.                   CALL       POSCURSE           ;POSITION CURSOR
  210.                              ;*** END OF ROUTINE ***
  211.  
  212.                   ;********************
  213.                   ;*   BELL ROUTINE   *
  214.                   ;********************
  215.                   IN         AL,61H             ;GET DATA IN SOUND PORT
  216.                   AND        AL,0FCH            ;MASK OUT D2 - D7
  217.                   CLI                           ;CLEAR INTERRUPTS
  218.                   MOV        BX,1200            ;SET LOOP FOR BELL DURATION
  219. BELL:             XOR        AL,3               ;TOGGLE BITS D0 - D1
  220.                   OUT        61H,AL             ;OUT SOUND PORT NEW VALUE
  221.                   MOV        CX,250             ;SET DELAY
  222. DELAY:            LOOP       DELAY              ;DELAY
  223.                   DEC        BX                 ;DECREMENT BELL DURATION
  224.                   CMP        BX,0               ;TEST FOR END OF BELL
  225.                   JNZ        BELL               ;GO BELL UNTIL DONE
  226.                   STI                           ;ENABLE INTERRUPTS
  227.                              ;*** ROUTINE ENDS ***
  228.  
  229.                   ;***********************************
  230.                   ;*   ROUTINE TO CLEAR SCREEN AND   *
  231.                   ;*          EXIT PROGRAM           *
  232.                   ;***********************************
  233. HOLD_1:           MOV        AH,6               ;CHECK KEYBOARD
  234.                   MOV        DL,0FFH
  235.                   INT        21H                ;DO IT!
  236.                   JZ         HOLD_1             ;IF NO KEY PRESSED GO HOLD_1
  237.                   MOV        CH,0               ;UPPER LEFT Y
  238.                   MOV        CL,0               ;UPPER LEFT X
  239.                   MOV        DH,24              ;LOWER RIGHT Y
  240.                   MOV        DL,79              ;LOWER RIGHT X
  241.                   CALL       WINDOW             ;CLEAR ENTIRE SCREEN
  242.                   MOV        DH,0               ;Y - AXIS
  243.                   MOV        DL,0               ;X - AXIS
  244.                   CALL       POSCURSE           ;SET CURSOR TO HOME POSITION
  245.                   MOV        AH,04CH            ;TERMINATE PROGRAM
  246.                   INT        21H                ;DO IT!
  247. DAYTIME           ENDP
  248.                              ;*** END OF ROUTINE ***
  249.  
  250. WINDOW            PROC       NEAR
  251.                   MOV        AH,6               ;INITIALIZE WINDOW
  252.                   MOV        AL,0               ;BLANK ENTIRE CONTENTS
  253.                   MOV        BH,ATTRIB          ;VIDIO ATTRIBUTE
  254.                   INT        10H                ;DO IT!
  255.                   RET
  256. WINDOW            ENDP
  257.  
  258. POSCURSE          PROC       NEAR
  259.                   MOV        AH,2               ;SET CURSOR POSITION
  260.                   MOV        BH,0               ;SELECT PAGE 0
  261.                   INT        10H                ;DO IT!
  262.                   RET
  263. POSCURSE          ENDP
  264.  
  265. MESS_1            DB                       'Fight the high cost of software by',CR,LF
  266.                   DB         24 DUP (SPCE),'supporting the SHAREWARE concept..',CR,LF
  267.                   DB         24 DUP (SPCE),' If you find this program useful,',CR,LF
  268.                   DB         21 DUP (SPCE),'a small donation would be appreciated...',CR,4 DUP (LF)
  269.                   DB         24 DUP (SPCE),'DAYTIME by: Richard Tashner N2EO',CR,LF
  270.                   DB         36 DUP (SPCE),'163-34 21 Road',CR,LF
  271.                   DB         36 DUP (SPCE),'Whitestone N.Y.11357',CR,LF,LF
  272.                   DB         11 DUP (SPCE),'DAY/TIME clock in TNC now set to following specifications:',CR,LF,LF
  273.                   DB         30 DUP (SPCE),'Month =',CR,LF
  274.                   DB         30 DUP (SPCE),'  Day =',CR,LF
  275.                   DB         30 DUP (SPCE),' Year =',CR,LF
  276.                   DB         30 DUP (SPCE),'Hours =',CR,LF
  277.                   DB         28 DUP (SPCE),'Minutes =',CR,4 DUP (LF)
  278.                   DB         21 DUP (SPCE),'--< Press any key to exit program >--','$'
  279.  
  280. BUFFER            DB         'DAYTIME ',10 DUP (?),CR,'$'
  281.  
  282. CSEG              ENDS
  283.                   END        DAYTIME