]> git.sur5r.net Git - cc65/commitdiff
The CIA TOD needs a write to the 1/10 sec register to start. Shortened the
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 24 Sep 2009 19:40:36 +0000 (19:40 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 24 Sep 2009 19:40:36 +0000 (19:40 +0000)
code by using initialized data.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4224 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c128/systime.s
libsrc/c64/systime.s

index eb19509061654d22a3bab2e67645cdb1046474f8..dced83c06056633ca4c9b7d06a6cf5345e0dd367 100644 (file)
         .include        "time.inc"
         .include        "c128.inc"
 
-       .importzp               tmp1, tmp2
+        .constructor    initsystime
+       .importzp       tmp1, tmp2
 
+
+;----------------------------------------------------------------------------
 .code
 
-; Jan 1st 1970, CIA #1 TOD
 .proc  __systime
 
-       lda     #70
-       sta     TM + tm::tm_year
-       lda     #1
-       sta     TM + tm::tm_mday
        lda     CIA1_TODHR
        bpl     AM
        and     #%01111111
@@ -59,6 +57,31 @@ BCD2dec:tax
 
 .endproc
 
-.bss
+;----------------------------------------------------------------------------
+; Constructor that writes to the 1/10 sec register of the TOD to kick it
+; into action. If this is not done, the clock hangs. We will read the register
+; and write it again, ignoring a possible change in between.
+
+.proc   initsystime
+
+        lda     CIA1_TOD10
+        sta     CIA1_TOD10
+        rts
+
+.endproc
+
+
+;----------------------------------------------------------------------------
+; TM struct with date set to 1970-01-01
+.data
+
+TM:            .word           0       ; tm_sec
+        .word           0       ; tm_min
+        .word           0       ; tm_hour
+        .word           1       ; tm_mday
+        .word           0       ; tm_mon
+        .word           70      ; tm_year
+        .word           0       ; tm_wday
+        .word           0       ; tm_yday
+        .word           0       ; tm_isdst
 
-TM:    .tag    tm
index 6654e85086e41cc3ff11a42ca4ff410a718c52f9..c0b4238bcf227cd711e671d395fb755847df0278 100644 (file)
         .include        "time.inc"
         .include        "c64.inc"
 
-       .importzp               tmp1, tmp2
+        .constructor    initsystime
+       .importzp       tmp1, tmp2
 
+
+;----------------------------------------------------------------------------
 .code
 
-; Jan 1st 1970, CIA #1 TOD
 .proc  __systime
 
-       lda     #70
-       sta     TM + tm::tm_year
-       lda     #1
-       sta     TM + tm::tm_mday
        lda     CIA1_TODHR
        bpl     AM
        and     #%01111111
@@ -59,6 +57,31 @@ BCD2dec:tax
 
 .endproc
 
-.bss
+;----------------------------------------------------------------------------
+; Constructor that writes to the 1/10 sec register of the TOD to kick it
+; into action. If this is not done, the clock hangs. We will read the register
+; and write it again, ignoring a possible change in between.
+
+.proc   initsystime
+
+        lda     CIA1_TOD10
+        sta     CIA1_TOD10
+        rts
+
+.endproc
+
+
+;----------------------------------------------------------------------------
+; TM struct with date set to 1970-01-01
+.data
+
+TM:            .word           0       ; tm_sec
+        .word           0       ; tm_min
+        .word           0       ; tm_hour
+        .word           1       ; tm_mday
+        .word           0       ; tm_mon
+        .word           70      ; tm_year
+        .word           0       ; tm_wday
+        .word           0       ; tm_yday
+        .word           0       ; tm_isdst
 
-TM:    .tag    tm