]> git.sur5r.net Git - cc65/commitdiff
Call _systime instead of always returning -1
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 12 Nov 2002 22:36:02 +0000 (22:36 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 12 Nov 2002 22:36:02 +0000 (22:36 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1509 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/time.s

index 2ee3c04d281fc690d07dc4258799445aed411810..1f032ec31114d7873f7f0b309ceecd84ae4028bd 100644 (file)
@@ -1,13 +1,14 @@
 ;
 ; Ullrich von Bassewitz, 12.11.2002
 ;
-; time_t __fastcall__ time (time_t* t);
+; time_t __fastcall__ time (time_t* timep);
 ;
 
        .export         _time
 
+        .import         __systime
         .import         __errno
-        .importzp       ptr1, sreg
+        .importzp       ptr1, sreg, tmp1
 
         .include        "errno.inc"
 
 
 .proc   _time
 
-        sta     ptr1
-        stx     ptr1+1          ; t
+        pha
+        txa
+        pha                     ; Save timep
+
+        jsr     __systime       ; Get the time (machine dependent)
+
+        sta     tmp1            ; Save low byte of result
 
-        ldx     #$FF
-        stx     sreg
-        stx     sreg+1
+; Restore timep and check if it is NULL
 
-        ora     ptr1+1          ; t == 0?
+        pla
+        sta     ptr1
+        pla
+        sta     ptr1+1          ; Restore timep
+        ora     ptr1            ; timep == 0?
         beq     @L1
 
-        ldy     #$03
+; timep is not NULL, store the result there
+
+        ldy     #3
+        lda     sreg+1
+        sta     (ptr1),y
+        dey
+        lda     sreg
+        sta     (ptr1),y
+        dey
         txa
-@L0:    sta     (ptr1),y        ; *t = -1
+        sta     (ptr1),y
         dey
-        bpl     @L0
-        lda     #$00
+        lda     tmp1
+        sta     (ptr1),y
+
+; If the result is less than zero, set ERRNO
 
-@L1:    sta     __errno+1
+@L1:    ldy     sreg+1
+        bpl     @L2
+
+        lda     #$00
+        sta     __errno+1
         lda     #ENOSYS         ; Function not implemented
         sta     __errno
 
-        txa                     ; A = $FF
+; Reload the low byte of the result and return
+
+@L2:    lda     tmp1
         rts
 
 .endproc