kvisc/ka/crt/time.k

85 lines
1.3 KiB
Plaintext
Raw Normal View History

2019-07-11 18:34:21 +02:00
; The OS/K Team licenses this file to you under the MIT license.
; See the LICENSE file in the project root for more information.
;
; struct TIME
; {
; byte sec; +0 (0-59)
; byte min; +1 (0-59)
; byte hour; +2 (0-23)
; byte mday; +3 (0-31)
; byte month; +4 (0-11)
; byte; +5 (pad)
; word year; +6 (0-65536)
; word yday; +8 (0-365)
; word; +10 (pad)
; dword; +12 (pad)
; } 16 bytes
;
;
; int DaysInYear(int year)
;
DaysInYear:
2019-09-07 16:45:03 +02:00
mov eax, 365
2019-07-11 18:34:21 +02:00
; divisible by 4?
2019-09-07 16:45:03 +02:00
rem ecx, ax0, 4
2019-08-14 09:52:39 +02:00
jrcxnz .end
2019-07-11 18:34:21 +02:00
; divisible by 100?
2019-09-07 16:45:03 +02:00
rem ecx, ax0, 100
2019-08-14 09:52:39 +02:00
jrcxnz .leap
2019-07-11 18:34:21 +02:00
; divisible by 400?
2019-09-07 16:45:03 +02:00
rem ecx, ax0, 400
2019-08-14 09:52:39 +02:00
jrcxnz .end
2019-07-11 18:34:21 +02:00
.leap:
2019-09-07 16:45:03 +02:00
inc eax
2019-07-11 18:34:21 +02:00
.end:
ret
;
; TIME *GetTimeUTC(void)
;
GetTimeUTC:
2019-08-14 20:23:05 +02:00
ytime
2019-09-07 16:45:03 +02:00
mov edi, .buf
2019-07-11 18:34:21 +02:00
; seconds
2019-09-07 16:45:03 +02:00
rem esi, eax, 60
mov b[edi], esi
2019-07-11 18:34:21 +02:00
; minutes
2019-09-07 16:45:03 +02:00
div esi, eax, 60
rem esi, 60
mov b[edi+1], esi
2019-07-11 18:34:21 +02:00
; hours
2019-09-07 16:45:03 +02:00
div esi, eax, 3600
rem esi, 24
mov b[edi+2], esi
2019-07-11 18:34:21 +02:00
; month days
2019-09-07 16:45:03 +02:00
div esi, eax, 3600*24
mov b[edi+3], esi
2019-07-11 18:34:21 +02:00
; month
2019-09-07 16:45:03 +02:00
mov b[edi+4], rbx
2019-07-11 18:34:21 +02:00
; years
2019-09-07 16:45:03 +02:00
mov w[edi+6], ecx
2019-07-11 18:34:21 +02:00
;
; ydays (TODO)
;
2019-09-07 16:45:03 +02:00
mov eax, .buf
2019-07-11 18:34:21 +02:00
ret
.buf = [24]