uxn/projects/examples/gui/timer.tal

84 lines
1.8 KiB
Tal

( uxnemu timer.rom )
|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|80 @Controller &vector $2 &button $1 &key $1
|c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1
|100
@on-reset ( -> )
;on-control .Controller/vector DEO2
#0080 DUP2 .Screen/width DEO2
.Screen/height DEO2
#f074 DUP2 .System/r DEO2
DUP2 .System/g DEO2
.System/b DEO2
Timer/start BRK
@on-control ( -> )
.Controller/button DEI
( A ) DUP #01 NEQ ?{ Timer/pause }
( B ) DUP #02 NEQ ?{ Timer/start }
POP BRK
(
@|Objects )
@Timer ( * )
&on-frame ( -> )
[ LIT &paused $1 ] ?{
[ LIT2 3c &frame 00 ] INCk ,&frame STR
EQU ?&on-second }
BRK
&on-second ( -> )
[ LIT2 00 _&frame ] STR
[ LIT2 ff &time $1 ] ADD DUP ?{ /end }
,&time STR
/<draw> BRK
&start ( -- )
[ LIT2 0f _&time ] STR
[ LIT2 00 _&paused ] STR
[ LIT2 0f _&frame ] STR
;&on-frame .Screen/vector DEO2
!&<draw>
&pause ( -- )
[ LIT2 00 _&paused ] LDR EQU
( ) INCk <set-dec-color>
,&paused STR
!&<draw>
&end ( -- )
#0000 .Screen/vector DEO2
#06 <set-dec-color>
!&<draw>
&<draw> ( -- )
,&time LDR !<draw-dec>
(
@|drawing )
@<set-dec-color> ( color -- )
;<draw-num>/color STA
JMP2r
@<draw-dec> ( dec -- )
#0010 DUP2 .Screen/x DEO2
.Screen/y DEO2
[ LIT2 01 -Screen/auto ] DEO
DUP
( x0 ) #0a DIV <draw-num>
( 0x ) #0a DIVk MUL SUB
( >> )
@<draw-num> ( num -- )
#00 SWP #30 SFT2 ;numbers-icns ADD2 .Screen/addr DEO2
[ LIT2 &color 01 -Screen/sprite ] DEO
JMP2r
@numbers-icns [
38c6 c6c6 c6c6 c638 8c78 1818 1818 187e
3c4e 860e 1c38 72fe 807e 0c10 7c0e 8e7c
0e1c 1c3c 6cff 0c1e c6f8 40c0 fc0e ce7c
3ac4 c0c0 fcce ce7c 807e 3e0c 1830 60c0
807c cece 7cce ce7c 807c cece 7c18 3060 ]