routine reads the TOD clock of CIA1 on the C64 and C128. Since systime was a
dummy routine common for all CBMs before, this change adds an individual dummy
routine for all other CBM systems. CBM510/610 do also have a TOD clock, so a
similar function as in the C64 could be used ...
git-svn-id: svn://svn.cc65.org/cc65/trunk@3974
b7a2c559-68d2-44c3-8de9-
860c34a00d81
randomize.o \
revers.o \
slow.o \
+ systime.o \
sysuname.o \
tgi_mode_table.o \
toggle_videomode.o
CIA1_PRB := $DC01
CIA1_DDRA := $DC02
CIA1_DDRB := $DC03
+CIA1_TOD10 := $DC08
+CIA1_TODSEC := $DC09
+CIA1_TODMIN := $DC0A
+CIA1_TODHR := $DC0B
CIA1_ICR := $DC0D
CIA1_CRA := $DC0E
CIA1_CRB := $DC0F
CIA2_PRB := $DD01
CIA2_DDRA := $DD02
CIA2_DDRB := $DD03
+CIA2_TOD10 := $DD08
+CIA2_TODSEC := $DD09
+CIA2_TODMIN := $DD0A
+CIA2_TODHR := $DD0B
CIA2_ICR := $DD0D
CIA2_CRA := $DD0E
CIA2_CRB := $DD0F
--- /dev/null
+;
+; Stefan Haubenthal, 27.7.2009
+;
+; 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 "c128.inc"
+
+ .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
+ sed
+ clc
+ adc #$12
+ cld
+AM: jsr BCD2dec
+ sta TM + tm::tm_hour
+ lda CIA1_TODMIN
+ jsr BCD2dec
+ sta TM + tm::tm_min
+ lda CIA1_TODSEC
+ jsr BCD2dec
+ sta TM + tm::tm_sec
+ lda CIA1_TOD10 ; Dummy read to unfreeze
+ lda #<TM
+ ldx #>TM
+ jmp _mktime
+
+; dec = (((BCD>>4)*10) + (BCD&0xf))
+BCD2dec:tax
+ and #%00001111
+ sta tmp1
+ txa
+ and #%11110000 ; *16
+ lsr ; *8
+ sta tmp2
+ lsr
+ lsr ; *2
+ adc tmp2 ; = *10
+ adc tmp1
+ rts
+
+.endproc
+
+.bss
+
+TM: .tag tm
mainargs.o \
randomize.o \
revers.o \
+ systime.o \
sysuname.o
#--------------------------------------------------------------------------
--- /dev/null
+;
+; Ullrich von Bassewitz, 12.11.2002
+;
+; 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
+; */
+;
+
+ .export __systime
+
+ .importzp sreg
+
+.code
+
+.proc __systime
+
+ lda #$FF
+ tax
+ sta sreg
+ sta sreg+1
+ rts ; Return -1
+
+.endproc
+
+
mcbdefault.o \
randomize.o \
revers.o \
+ systime.o \
sysuname.o \
tgi_mode_table.o
CIA1_PRB := $DC01
CIA1_DDRA := $DC02
CIA1_DDRB := $DC03
+CIA1_TOD10 := $DC08
+CIA1_TODSEC := $DC09
+CIA1_TODMIN := $DC0A
+CIA1_TODHR := $DC0B
CIA1_ICR := $DC0D
CIA1_CRA := $DC0E
CIA1_CRB := $DC0F
CIA2_PRB := $DD01
CIA2_DDRA := $DD02
CIA2_DDRB := $DD03
+CIA2_TOD10 := $DD08
+CIA2_TODSEC := $DD09
+CIA2_TODMIN := $DD0A
+CIA2_TODHR := $DD0B
CIA2_ICR := $DD0D
CIA2_CRA := $DD0E
CIA2_CRB := $DD0F
--- /dev/null
+;
+; Stefan Haubenthal, 27.7.2009
+;
+; 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 "c64.inc"
+
+ .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
+ sed
+ clc
+ adc #$12
+ cld
+AM: jsr BCD2dec
+ sta TM + tm::tm_hour
+ lda CIA1_TODMIN
+ jsr BCD2dec
+ sta TM + tm::tm_min
+ lda CIA1_TODSEC
+ jsr BCD2dec
+ sta TM + tm::tm_sec
+ lda CIA1_TOD10 ; Dummy read to unfreeze
+ lda #<TM
+ ldx #>TM
+ jmp _mktime
+
+; dec = (((BCD>>4)*10) + (BCD&0xf))
+BCD2dec:tax
+ and #%00001111
+ sta tmp1
+ txa
+ and #%11110000 ; *16
+ lsr ; *8
+ sta tmp2
+ lsr
+ lsr ; *2
+ adc tmp2 ; = *10
+ adc tmp1
+ rts
+
+.endproc
+
+.bss
+
+TM: .tag tm
scratch.o \
sysremove.o \
sysrename.o \
- systime.o \
wherex.o \
wherey.o \
write.o
+++ /dev/null
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; 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
-; */
-;
-
- .export __systime
-
- .importzp sreg
-
-.code
-
-.proc __systime
-
- lda #$FF
- tax
- sta sreg
- sta sreg+1
- rts ; Return -1
-
-.endproc
-
-
pokesys.o \
randomize.o \
revers.o \
+ systime.o \
sysuname.o \
tgi_mode_table.o
--- /dev/null
+;
+; Ullrich von Bassewitz, 12.11.2002
+;
+; 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
+; */
+;
+
+ .export __systime
+
+ .importzp sreg
+
+.code
+
+.proc __systime
+
+ lda #$FF
+ tax
+ sta sreg
+ sta sreg+1
+ rts ; Return -1
+
+.endproc
+
+
pokesys.o \
randomize.o \
revers.o \
+ systime.o \
sysuname.o
#--------------------------------------------------------------------------
--- /dev/null
+;
+; Ullrich von Bassewitz, 12.11.2002
+;
+; 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
+; */
+;
+
+ .export __systime
+
+ .importzp sreg
+
+.code
+
+.proc __systime
+
+ lda #$FF
+ tax
+ sta sreg
+ sta sreg+1
+ rts ; Return -1
+
+.endproc
+
+
mainargs.o \
randomize.o \
revers.o \
+ systime.o \
sysuname.o \
tgi_mode_table.o
--- /dev/null
+;
+; Ullrich von Bassewitz, 12.11.2002
+;
+; 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
+; */
+;
+
+ .export __systime
+
+ .importzp sreg
+
+.code
+
+.proc __systime
+
+ lda #$FF
+ tax
+ sta sreg
+ sta sreg+1
+ rts ; Return -1
+
+.endproc
+
+