Subversion Repositories Kolibri OS

Rev

Rev 1279 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 1376 $
  9.  
  10.  
  11. ;setting date,time,clock and alarm-clock
  12. ;add sys_settime at servetable as for ex. 22 fcn:
  13. ; 22 - SETTING DATE TIME, CLOCK AND ALARM-CLOCK
  14. ; ebx =0 - set time ecx - 00SSMMHH
  15. ; ebx =1 - set date ecx=00DDMMYY
  16. ; ebx =2 - set day of week ecx- 1-7
  17. ; ebx =3 - set alarm-clock ecx - 00SSMMHH
  18. ; out: 0 -Ok 1 -wrong format 2 -battery low
  19. sys_settime:
  20.      
  21.       cli
  22.       mov  al,0x0d
  23.       out  0x70,al
  24.       in   al,0x71
  25.       bt   ax,7
  26.       jnc  bat_low
  27.       cmp  ebx,2    ;day of week
  28.       jne  nosetweek
  29.       test ecx,ecx         ;test day of week
  30.       je   wrongtime
  31.       cmp  ecx,7
  32.       ja   wrongtime
  33.       mov  edx,0x70
  34.       call startstopclk
  35.       dec  edx
  36.       mov  al,6
  37.       out  dx,al
  38.       inc  edx
  39.       mov  al,cl
  40.       out  dx,al
  41.       jmp  endsettime
  42.   nosetweek:           ;set date
  43.       cmp  ebx,1
  44.       jne  nosetdate
  45.       cmp  cl,0x99      ;test year
  46.       ja   wrongtime
  47.       shl  ecx,4
  48.       cmp  cl,0x90
  49.       ja   wrongtime
  50.       cmp  ch,0x99      ;test month
  51.       ja   wrongtime
  52.       shr  ecx,4
  53.       test  ch,ch
  54.       je   wrongtime
  55.       cmp  ch,0x12
  56.       ja   wrongtime
  57.       shl  ecx,8
  58.       bswap ecx       ;ebx=00YYMMDD
  59.       test cl,cl       ;test day
  60.       je   wrongtime
  61.       shl  ecx,4
  62.       cmp  cl,0x90
  63.       ja   wrongtime
  64.       shr  ecx,4
  65.       cmp  ch,2       ;February
  66.       jne  testday
  67.       cmp  cl,0x29
  68.       ja   wrongtime
  69.       jmp  setdate
  70.     testday:
  71.       cmp  ch,8
  72.       jb   testday1    ;Aug-Dec
  73.       bt   cx,8
  74.       jnc  days31
  75.       jmp  days30
  76.     testday1:
  77.       bt   cx,8       ;Jan-Jul ex.Feb
  78.       jnc  days30
  79.     days31:
  80.       cmp  cl,0x31
  81.       ja   wrongtime
  82.       jmp  setdate
  83.     days30:
  84.       cmp  cl,0x30
  85.       ja   wrongtime
  86.     setdate:
  87.       mov  edx,0x70
  88.       call startstopclk
  89.       dec  edx
  90.       mov  al,7          ;set days
  91.       out  dx,al
  92.       inc  edx
  93.       mov  al,cl
  94.       out  dx,al
  95.       dec  edx
  96.       mov  al,8          ;set months
  97.       out  dx,al
  98.       inc  edx
  99.       mov  al,ch
  100.       out  dx,al
  101.       dec  edx
  102.       mov  al,9          ;set years
  103.       out  dx,al
  104.       inc  edx
  105.       shr  ecx,8
  106.       mov  al,ch
  107.       out  dx,al
  108.       jmp  endsettime
  109.     nosetdate:       ;set time or alarm-clock
  110.       cmp  ebx,3
  111.       ja   wrongtime
  112.       cmp  cl,0x23
  113.       ja   wrongtime
  114.       cmp  ch,0x59
  115.       ja   wrongtime
  116.       shl  ecx,4
  117.       cmp  cl,0x90
  118.       ja   wrongtime
  119.       cmp  ch,0x92
  120.       ja   wrongtime
  121.       shl  ecx,4
  122.       bswap ecx        ;00HHMMSS
  123.       cmp  cl,0x59
  124.       ja   wrongtime
  125.       shl  ecx,4
  126.       cmp  cl,0x90
  127.       ja   wrongtime
  128.       shr  ecx,4
  129.  
  130.       mov  edx,0x70
  131.       call startstopclk
  132.       dec  edx
  133.       cmp  ebx,3
  134.      
  135.           je   setalarm
  136.       xor  eax,eax   ;al=0-set seconds
  137.       out  dx,al
  138.       inc  edx
  139.       mov  al,cl
  140.       out  dx,al
  141.       dec  edx
  142.       mov  al,2       ;set minutes
  143.       out  dx,al
  144.       inc  edx
  145.       mov  al,ch
  146.       out  dx,al
  147.       dec  edx
  148.       mov  al,4       ;set hours
  149.       out  dx,al
  150.       inc  edx
  151.       shr  ecx,8
  152.       mov  al,ch
  153.       out  dx,al
  154.       jmp  endsettime
  155.    setalarm:
  156.       mov  al,1   ;set seconds for al.
  157.       out  dx,al
  158.       inc  edx
  159.       mov  al,cl
  160.       out  dx,al
  161.       dec  edx
  162.       mov  al,3    ;set minutes for al.
  163.       out  dx,al
  164.       inc  edx
  165.       mov  al,ch
  166.       out  dx,al
  167.       dec  edx
  168.       mov  al,5    ;set hours for al.
  169.       out  dx,al
  170.       inc  edx
  171.       shr  ecx,8
  172.       mov  al,ch
  173.       out  dx,al
  174.       dec  edx
  175.       mov  al,0x0b  ;enable irq's
  176.       out  dx,al
  177.       inc  dx
  178.       in   al,dx
  179.       bts  ax,5     ;set bit 5
  180.       out  dx,al
  181.     endsettime:
  182.       dec  edx
  183.       call startstopclk
  184.       sti
  185.       and  [esp+36-4],dword 0
  186.       ret
  187.    bat_low:
  188.       sti
  189.       mov  [esp+36-4],dword 2
  190.       ret
  191.    wrongtime:
  192.       sti
  193.       mov  [esp+36-4],dword 1
  194.       ret
  195.  
  196. startstopclk:
  197.     mov  al,0x0b
  198.     out  dx,al
  199.     inc  dx
  200.     in   al,dx
  201.     btc  ax,7
  202.     out  dx,al
  203.     ret
  204.