mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 15:29:46 +00:00
931add050e
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
65 lines
1.0 KiB
ArmAsm
65 lines
1.0 KiB
ArmAsm
;
|
|
; 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
|