1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-26 08:32:00 +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:
uz 2009-07-27 18:44:37 +00:00
parent 087ae8173a
commit 931add050e
15 changed files with 234 additions and 1 deletions

View File

@ -63,6 +63,7 @@ OBJS = _scrsize.o \
randomize.o \
revers.o \
slow.o \
systime.o \
sysuname.o \
tgi_mode_table.o \
toggle_videomode.o

View File

@ -171,6 +171,10 @@ CIA1_PRA := $DC00
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
@ -180,6 +184,10 @@ CIA2_PRA := $DD00
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

64
libsrc/c128/systime.s Normal file
View 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

View File

@ -57,6 +57,7 @@ OBJS = _scrsize.o \
mainargs.o \
randomize.o \
revers.o \
systime.o \
sysuname.o
#--------------------------------------------------------------------------

View File

@ -62,6 +62,7 @@ OBJS = _scrsize.o \
mcbdefault.o \
randomize.o \
revers.o \
systime.o \
sysuname.o \
tgi_mode_table.o

View File

@ -164,6 +164,10 @@ CIA1_PRA := $DC00
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
@ -173,6 +177,10 @@ CIA2_PRA := $DD00
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

64
libsrc/c64/systime.s Normal file
View 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

View File

@ -79,7 +79,6 @@ S_OBJS = c_acptr.o \
scratch.o \
sysremove.o \
sysrename.o \
systime.o \
wherex.o \
wherey.o \
write.o

View File

@ -72,6 +72,7 @@ OBJS = _scrsize.o \
pokesys.o \
randomize.o \
revers.o \
systime.o \
sysuname.o \
tgi_mode_table.o

28
libsrc/cbm510/systime.s Normal file
View 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

View File

@ -65,6 +65,7 @@ OBJS = _scrsize.o \
pokesys.o \
randomize.o \
revers.o \
systime.o \
sysuname.o
#--------------------------------------------------------------------------

28
libsrc/cbm610/systime.s Normal file
View 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

View File

@ -78,6 +78,7 @@ OBJS = _scrsize.o \
mainargs.o \
randomize.o \
revers.o \
systime.o \
sysuname.o \
tgi_mode_table.o

28
libsrc/plus4/systime.s Normal file
View 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