mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 00:29:31 +00:00
Added a systime implementation by Stefan Haubenthal with a few changes. The
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
This commit is contained in:
parent
087ae8173a
commit
931add050e
@ -63,6 +63,7 @@ OBJS = _scrsize.o \
|
|||||||
randomize.o \
|
randomize.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
slow.o \
|
slow.o \
|
||||||
|
systime.o \
|
||||||
sysuname.o \
|
sysuname.o \
|
||||||
tgi_mode_table.o \
|
tgi_mode_table.o \
|
||||||
toggle_videomode.o
|
toggle_videomode.o
|
||||||
|
@ -171,6 +171,10 @@ CIA1_PRA := $DC00
|
|||||||
CIA1_PRB := $DC01
|
CIA1_PRB := $DC01
|
||||||
CIA1_DDRA := $DC02
|
CIA1_DDRA := $DC02
|
||||||
CIA1_DDRB := $DC03
|
CIA1_DDRB := $DC03
|
||||||
|
CIA1_TOD10 := $DC08
|
||||||
|
CIA1_TODSEC := $DC09
|
||||||
|
CIA1_TODMIN := $DC0A
|
||||||
|
CIA1_TODHR := $DC0B
|
||||||
CIA1_ICR := $DC0D
|
CIA1_ICR := $DC0D
|
||||||
CIA1_CRA := $DC0E
|
CIA1_CRA := $DC0E
|
||||||
CIA1_CRB := $DC0F
|
CIA1_CRB := $DC0F
|
||||||
@ -180,6 +184,10 @@ CIA2_PRA := $DD00
|
|||||||
CIA2_PRB := $DD01
|
CIA2_PRB := $DD01
|
||||||
CIA2_DDRA := $DD02
|
CIA2_DDRA := $DD02
|
||||||
CIA2_DDRB := $DD03
|
CIA2_DDRB := $DD03
|
||||||
|
CIA2_TOD10 := $DD08
|
||||||
|
CIA2_TODSEC := $DD09
|
||||||
|
CIA2_TODMIN := $DD0A
|
||||||
|
CIA2_TODHR := $DD0B
|
||||||
CIA2_ICR := $DD0D
|
CIA2_ICR := $DD0D
|
||||||
CIA2_CRA := $DD0E
|
CIA2_CRA := $DD0E
|
||||||
CIA2_CRB := $DD0F
|
CIA2_CRB := $DD0F
|
||||||
|
64
libsrc/c128/systime.s
Normal file
64
libsrc/c128/systime.s
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
;
|
||||||
|
; 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
|
@ -57,6 +57,7 @@ OBJS = _scrsize.o \
|
|||||||
mainargs.o \
|
mainargs.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
|
systime.o \
|
||||||
sysuname.o
|
sysuname.o
|
||||||
|
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
|
@ -62,6 +62,7 @@ OBJS = _scrsize.o \
|
|||||||
mcbdefault.o \
|
mcbdefault.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
|
systime.o \
|
||||||
sysuname.o \
|
sysuname.o \
|
||||||
tgi_mode_table.o
|
tgi_mode_table.o
|
||||||
|
|
||||||
|
@ -164,6 +164,10 @@ CIA1_PRA := $DC00
|
|||||||
CIA1_PRB := $DC01
|
CIA1_PRB := $DC01
|
||||||
CIA1_DDRA := $DC02
|
CIA1_DDRA := $DC02
|
||||||
CIA1_DDRB := $DC03
|
CIA1_DDRB := $DC03
|
||||||
|
CIA1_TOD10 := $DC08
|
||||||
|
CIA1_TODSEC := $DC09
|
||||||
|
CIA1_TODMIN := $DC0A
|
||||||
|
CIA1_TODHR := $DC0B
|
||||||
CIA1_ICR := $DC0D
|
CIA1_ICR := $DC0D
|
||||||
CIA1_CRA := $DC0E
|
CIA1_CRA := $DC0E
|
||||||
CIA1_CRB := $DC0F
|
CIA1_CRB := $DC0F
|
||||||
@ -173,6 +177,10 @@ CIA2_PRA := $DD00
|
|||||||
CIA2_PRB := $DD01
|
CIA2_PRB := $DD01
|
||||||
CIA2_DDRA := $DD02
|
CIA2_DDRA := $DD02
|
||||||
CIA2_DDRB := $DD03
|
CIA2_DDRB := $DD03
|
||||||
|
CIA2_TOD10 := $DD08
|
||||||
|
CIA2_TODSEC := $DD09
|
||||||
|
CIA2_TODMIN := $DD0A
|
||||||
|
CIA2_TODHR := $DD0B
|
||||||
CIA2_ICR := $DD0D
|
CIA2_ICR := $DD0D
|
||||||
CIA2_CRA := $DD0E
|
CIA2_CRA := $DD0E
|
||||||
CIA2_CRB := $DD0F
|
CIA2_CRB := $DD0F
|
||||||
|
64
libsrc/c64/systime.s
Normal file
64
libsrc/c64/systime.s
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
;
|
||||||
|
; 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
|
@ -79,7 +79,6 @@ S_OBJS = c_acptr.o \
|
|||||||
scratch.o \
|
scratch.o \
|
||||||
sysremove.o \
|
sysremove.o \
|
||||||
sysrename.o \
|
sysrename.o \
|
||||||
systime.o \
|
|
||||||
wherex.o \
|
wherex.o \
|
||||||
wherey.o \
|
wherey.o \
|
||||||
write.o
|
write.o
|
||||||
|
@ -72,6 +72,7 @@ OBJS = _scrsize.o \
|
|||||||
pokesys.o \
|
pokesys.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
|
systime.o \
|
||||||
sysuname.o \
|
sysuname.o \
|
||||||
tgi_mode_table.o
|
tgi_mode_table.o
|
||||||
|
|
||||||
|
28
libsrc/cbm510/systime.s
Normal file
28
libsrc/cbm510/systime.s
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
;
|
||||||
|
; 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
|
||||||
|
|
||||||
|
|
@ -65,6 +65,7 @@ OBJS = _scrsize.o \
|
|||||||
pokesys.o \
|
pokesys.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
|
systime.o \
|
||||||
sysuname.o
|
sysuname.o
|
||||||
|
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
|
28
libsrc/cbm610/systime.s
Normal file
28
libsrc/cbm610/systime.s
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
;
|
||||||
|
; 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
|
||||||
|
|
||||||
|
|
@ -78,6 +78,7 @@ OBJS = _scrsize.o \
|
|||||||
mainargs.o \
|
mainargs.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
|
systime.o \
|
||||||
sysuname.o \
|
sysuname.o \
|
||||||
tgi_mode_table.o
|
tgi_mode_table.o
|
||||||
|
|
||||||
|
28
libsrc/plus4/systime.s
Normal file
28
libsrc/plus4/systime.s
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
;
|
||||||
|
; 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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user