home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / at / tad.arc / TAD.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-03-03  |  2.9 KB  |  85 lines

  1. page         55,132
  2. title         TAD: Time and Date Program for PC/AT
  3. ; Author:     Will Fastie on 84/10/01 10:05
  4. ; Environment:     IBM PC/AT, DOS 3.0 or higher
  5. ; DOS Syntax:     TAD
  6. ; Compile\Link:  MASM TAD.ASM
  7. ;         LINK TAD
  8. ;         EXE2BIN TAD.EXE TAD.COM
  9. ;         ERASE TAD.EXE
  10. ;
  11. ; This program provides a DOS command to set the DOS date and time
  12. ; into the BIOS real-time-clock; the BIOS routine also sets CMOS.
  13. ; On other PC family members and in DOS 2.00+, the program runs but
  14. ; has no effect.
  15. ;----------------------------------------------------------
  16. ; Declarations:  equates, macros, etc.
  17. ;
  18. TERMINATE equ     4CH               ;terminate program execution
  19. GETDATE   equ    2AH                   ;read DOS' date
  20. GETTIME   equ    2CH                   ;read DOS' time
  21. RTC      equ     1AH               ;access real-time clock
  22. WTIME      equ     03H               ;write the clock and CMOS
  23. WDATE      equ     05H               ;write the date and CMOS
  24. ;--------------
  25. DOS      macro  fcn_code
  26.       mov     ah,fcn_code
  27.       int     21H
  28.       endm
  29. ;--------------
  30. BIOS      macro  int_no, fcn_code
  31.       mov     ah,fcn_code
  32.       int     int_no
  33.       endm
  34. ;--------------
  35. B2BCD      macro  register           ;convert reg to BCD in-place
  36.       mov     al,register           ;get numerand
  37.       call     B2_BCD            ;call routine
  38.       mov     register,al           ;put the result back
  39.       endm
  40. ;----------------------------------------------------------
  41. ; Setup so EXE2BIN can convert program to .COM format
  42. CSEG      segment para public 'CODE'
  43.       assume cs:CSEG, ds:CSEG
  44. ;
  45.       org     100H
  46. START:      jmp     GO               ;jump around the data area
  47. ;----------------------------------------------------------
  48. BY10      db     10               ;for when we divide by 10
  49. BY100      db     100               ;for when we divide by 100
  50. ;----------------------------------------------------------
  51. MAIN      proc     far               ;cleanliness
  52. GO:       DOS    GETDATE               ;get DOS' date
  53.       mov     ax,cx               ;convert the year into binary
  54.       div     BY100               ;...halves
  55.       xchg     ah,al               ;then, put
  56.       mov     cx,ax               ;...century in ch, year in cl
  57.       B2BCD  ch               ;now convert each byte in BCD
  58.       B2BCD  cl
  59.       B2BCD  dh
  60.       B2BCD  dl
  61.       BIOS     RTC,WDATE           ;and write the date via BIOS
  62.           DOS    GETTIME               ;get DOS' time
  63.       B2BCD  ch               ;convert each byte to BCD
  64.       B2BCD  cl
  65.       B2BCD  dh
  66.       mov     dl,0
  67.       BIOS     RTC,WTIME           ;write the time via BIOS
  68. EXIT:      xor     al,al               ;=0; returns OK for errorlevel
  69.       DOS     TERMINATE           ;goodbye
  70. MAIN      endp
  71. ;----------------------------------------------------------
  72. B2_BCD      proc     near               ;al has binary value
  73.       cbw                   ;make it a full word in ax
  74.       div     BY10               ;divide by 10
  75.       shl     al,1               ;put the quotient in the high nibble
  76.       shl     al,1
  77.       shl     al,1
  78.       shl     al,1
  79.       or     al,ah               ;put the two nibbles together in al
  80.       ret
  81. B2_BCD      endp
  82. ;----------------------------------------------------------
  83. CSEG      ends
  84.       end     START
  85.