Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2287 → Rev 2288

/kernel/trunk/hid/set_dtc.inc
1,203 → 1,203
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
$Revision$
 
 
;setting date,time,clock and alarm-clock
;add sys_settime at servetable as for ex. 22 fcn:
; 22 - SETTING DATE TIME, CLOCK AND ALARM-CLOCK
; ebx =0 - set time ecx - 00SSMMHH
; ebx =1 - set date ecx=00DDMMYY
; ebx =2 - set day of week ecx- 1-7
; ebx =3 - set alarm-clock ecx - 00SSMMHH
; out: 0 -Ok 1 -wrong format 2 -battery low
sys_settime:
cli
mov al,0x0d
out 0x70,al
in al,0x71
bt ax,7
jnc bat_low
cmp ebx,2 ;day of week
jne nosetweek
test ecx,ecx ;test day of week
je wrongtime
cmp ecx,7
ja wrongtime
mov edx,0x70
call startstopclk
dec edx
mov al,6
out dx,al
inc edx
mov al,cl
out dx,al
jmp endsettime
nosetweek: ;set date
cmp ebx,1
jne nosetdate
cmp cl,0x99 ;test year
ja wrongtime
shl ecx,4
cmp cl,0x90
ja wrongtime
cmp ch,0x99 ;test month
ja wrongtime
shr ecx,4
test ch,ch
je wrongtime
cmp ch,0x12
ja wrongtime
shl ecx,8
bswap ecx ;ebx=00YYMMDD
test cl,cl ;test day
je wrongtime
shl ecx,4
cmp cl,0x90
ja wrongtime
shr ecx,4
cmp ch,2 ;February
jne testday
cmp cl,0x29
ja wrongtime
jmp setdate
testday:
cmp ch,8
jb testday1 ;Aug-Dec
bt cx,8
jnc days31
jmp days30
testday1:
bt cx,8 ;Jan-Jul ex.Feb
jnc days30
days31:
cmp cl,0x31
ja wrongtime
jmp setdate
days30:
cmp cl,0x30
ja wrongtime
setdate:
mov edx,0x70
call startstopclk
dec edx
mov al,7 ;set days
out dx,al
inc edx
mov al,cl
out dx,al
dec edx
mov al,8 ;set months
out dx,al
inc edx
mov al,ch
out dx,al
dec edx
mov al,9 ;set years
out dx,al
inc edx
shr ecx,8
mov al,ch
out dx,al
jmp endsettime
nosetdate: ;set time or alarm-clock
cmp ebx,3
ja wrongtime
cmp cl,0x23
ja wrongtime
cmp ch,0x59
ja wrongtime
shl ecx,4
cmp cl,0x90
ja wrongtime
cmp ch,0x92
ja wrongtime
shl ecx,4
bswap ecx ;00HHMMSS
cmp cl,0x59
ja wrongtime
shl ecx,4
cmp cl,0x90
ja wrongtime
shr ecx,4
 
mov edx,0x70
call startstopclk
dec edx
cmp ebx,3
je setalarm
xor eax,eax ;al=0-set seconds
out dx,al
inc edx
mov al,cl
out dx,al
dec edx
mov al,2 ;set minutes
out dx,al
inc edx
mov al,ch
out dx,al
dec edx
mov al,4 ;set hours
out dx,al
inc edx
shr ecx,8
mov al,ch
out dx,al
jmp endsettime
setalarm:
mov al,1 ;set seconds for al.
out dx,al
inc edx
mov al,cl
out dx,al
dec edx
mov al,3 ;set minutes for al.
out dx,al
inc edx
mov al,ch
out dx,al
dec edx
mov al,5 ;set hours for al.
out dx,al
inc edx
shr ecx,8
mov al,ch
out dx,al
dec edx
mov al,0x0b ;enable irq's
out dx,al
inc dx
in al,dx
bts ax,5 ;set bit 5
out dx,al
endsettime:
dec edx
call startstopclk
sti
and [esp+36-4],dword 0
ret
bat_low:
sti
mov [esp+36-4],dword 2
ret
wrongtime:
sti
mov [esp+36-4],dword 1
ret
 
startstopclk:
mov al,0x0b
out dx,al
inc dx
in al,dx
btc ax,7
out dx,al
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
$Revision$
 
 
;setting date,time,clock and alarm-clock
;add sys_settime at servetable as for ex. 22 fcn:
; 22 - SETTING DATE TIME, CLOCK AND ALARM-CLOCK
; ebx =0 - set time ecx - 00SSMMHH
; ebx =1 - set date ecx=00DDMMYY
; ebx =2 - set day of week ecx- 1-7
; ebx =3 - set alarm-clock ecx - 00SSMMHH
; out: 0 -Ok 1 -wrong format 2 -battery low
sys_settime:
cli
mov al, 0x0d
out 0x70, al
in al, 0x71
bt ax, 7
jnc bat_low
cmp ebx, 2;day of week
jne nosetweek
test ecx, ecx ;test day of week
je wrongtime
cmp ecx, 7
ja wrongtime
mov edx, 0x70
call startstopclk
dec edx
mov al, 6
out dx, al
inc edx
mov al, cl
out dx, al
jmp endsettime
nosetweek: ;set date
cmp ebx, 1
jne nosetdate
cmp cl, 0x99;test year
ja wrongtime
shl ecx, 4
cmp cl, 0x90
ja wrongtime
cmp ch, 0x99;test month
ja wrongtime
shr ecx, 4
test ch, ch
je wrongtime
cmp ch, 0x12
ja wrongtime
shl ecx, 8
bswap ecx ;ebx=00YYMMDD
test cl, cl ;test day
je wrongtime
shl ecx, 4
cmp cl, 0x90
ja wrongtime
shr ecx, 4
cmp ch, 2 ;February
jne testday
cmp cl, 0x29
ja wrongtime
jmp setdate
testday:
cmp ch, 8
jb testday1;Aug-Dec
bt cx, 8
jnc days31
jmp days30
testday1:
bt cx, 8 ;Jan-Jul ex.Feb
jnc days30
days31:
cmp cl, 0x31
ja wrongtime
jmp setdate
days30:
cmp cl, 0x30
ja wrongtime
setdate:
mov edx, 0x70
call startstopclk
dec edx
mov al, 7 ;set days
out dx, al
inc edx
mov al, cl
out dx, al
dec edx
mov al, 8 ;set months
out dx, al
inc edx
mov al, ch
out dx, al
dec edx
mov al, 9 ;set years
out dx, al
inc edx
shr ecx, 8
mov al, ch
out dx, al
jmp endsettime
nosetdate: ;set time or alarm-clock
cmp ebx, 3
ja wrongtime
cmp cl, 0x23
ja wrongtime
cmp ch, 0x59
ja wrongtime
shl ecx, 4
cmp cl, 0x90
ja wrongtime
cmp ch, 0x92
ja wrongtime
shl ecx, 4
bswap ecx ;00HHMMSS
cmp cl, 0x59
ja wrongtime
shl ecx, 4
cmp cl, 0x90
ja wrongtime
shr ecx, 4
 
mov edx, 0x70
call startstopclk
dec edx
cmp ebx, 3
je setalarm
xor eax, eax;al=0-set seconds
out dx, al
inc edx
mov al, cl
out dx, al
dec edx
mov al, 2 ;set minutes
out dx, al
inc edx
mov al, ch
out dx, al
dec edx
mov al, 4 ;set hours
out dx, al
inc edx
shr ecx, 8
mov al, ch
out dx, al
jmp endsettime
setalarm:
mov al, 1;set seconds for al.
out dx, al
inc edx
mov al, cl
out dx, al
dec edx
mov al, 3;set minutes for al.
out dx, al
inc edx
mov al, ch
out dx, al
dec edx
mov al, 5;set hours for al.
out dx, al
inc edx
shr ecx, 8
mov al, ch
out dx, al
dec edx
mov al, 0x0b;enable irq's
out dx, al
inc dx
in al, dx
bts ax, 5;set bit 5
out dx, al
endsettime:
dec edx
call startstopclk
sti
and [esp+36-4], dword 0
ret
bat_low:
sti
mov [esp+36-4], dword 2
ret
wrongtime:
sti
mov [esp+36-4], dword 1
ret
 
startstopclk:
mov al, 0x0b
out dx, al
inc dx
in al, dx
btc ax, 7
out dx, al
ret
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property