Subversion Repositories Kolibri OS

Rev

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

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