; ; Oliver Schmidt, 22.08.2006 ; ; time_t _systime (void); ; /* Similar to time(), but: ; * - Is not ISO C ; * - Does not take the additional pointer ; * - Does not set errno when returning -1 ; */ ; .include "time.inc" .include "zeropage.inc" .include "mli.inc" __systime: ; Update time lda #GET_TIME_CALL ldx #GET_TIME_COUNT jsr callmli bcs err lda DATELO+1 lsr php ; Save month msb cmp #70 ; Year < 70? bcs :+ ; No, leave alone adc #100 ; Move 19xx to 20xx : sta TM + tm::tm_year lda DATELO tax ; Save day plp ; Restore month msb ror lsr lsr lsr lsr beq err ; [1..12] allows for validity check tay dey ; Move [1..12] to [0..11] sty TM + tm::tm_mon txa ; Restore day and #%00011111 sta TM + tm::tm_mday lda TIMELO+1 sta TM + tm::tm_hour lda TIMELO sta TM + tm::tm_min lda #TM jmp _mktime err: lda #$FF tax sta sreg sta sreg+1 rts ; Return -1 .bss TM: .tag tm