2014-11-29 13:18:48 +00:00
|
|
|
;
|
|
|
|
; clock_t clock (void);
|
|
|
|
;
|
|
|
|
|
2015-11-17 14:14:15 +00:00
|
|
|
.constructor initclock
|
2015-11-26 20:06:20 +00:00
|
|
|
.export _clock
|
2015-10-02 14:50:22 +00:00
|
|
|
|
2015-11-17 14:14:15 +00:00
|
|
|
.forceimport ticktock ; make sure that tickcount changes
|
2015-11-26 20:06:20 +00:00
|
|
|
.importzp tickcount, sreg
|
2015-07-16 14:54:40 +00:00
|
|
|
|
2015-11-17 14:14:15 +00:00
|
|
|
|
|
|
|
; Make the process clock start at zero.
|
|
|
|
|
2016-03-06 20:26:22 +00:00
|
|
|
.segment "ONCE"
|
2015-07-16 14:54:40 +00:00
|
|
|
initclock:
|
2015-11-26 20:06:20 +00:00
|
|
|
ldx #4 - 1
|
|
|
|
@lp: stz tickcount,x
|
2015-08-29 13:58:57 +00:00
|
|
|
dex
|
|
|
|
bpl @lp
|
|
|
|
rts
|
2015-11-26 20:06:20 +00:00
|
|
|
|
|
|
|
; ------------------------------------------------------------------------
|
|
|
|
.code
|
|
|
|
|
|
|
|
; This function might be interrupted while it is reading the several bytes of
|
|
|
|
; the clock. They are read again if that happens. (We do not want to stop
|
|
|
|
; interrupts because that might cause glitches in interrupt-driven graphics
|
|
|
|
; and sound.)
|
|
|
|
|
|
|
|
.proc _clock
|
|
|
|
lda tickcount
|
|
|
|
ldy tickcount+3
|
|
|
|
sty sreg+1
|
|
|
|
ldy tickcount+2
|
|
|
|
sty sreg
|
|
|
|
ldx tickcount+1
|
|
|
|
cmp tickcount
|
|
|
|
bne _clock ; clock changed; reread it
|
|
|
|
rts
|
|
|
|
.endproc
|