uxn/projects/examples/devices/datetime.tal

217 lines
5.7 KiB
Tal
Raw Normal View History

2021-04-02 00:53:41 -04:00
( Dev/Time )
2021-11-16 12:10:48 -05:00
%+ { ADD } %- { SUB } %* { MUL } %/ { DIV }
2021-09-26 16:33:39 -04:00
%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
2021-11-16 12:10:48 -05:00
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
2021-09-26 16:33:39 -04:00
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
%8* { #30 SFT }
2021-11-16 14:35:08 -05:00
%10* { #40 SFT }
2021-05-24 17:36:15 -04:00
%2// { #01 SFT2 }
%4// { #02 SFT2 }
2021-05-24 17:52:11 -04:00
%2** { #10 SFT2 }
2021-05-24 17:36:15 -04:00
2021-09-26 17:06:18 -04:00
%DIAMETER { #0080 }
%RADIUS { DIAMETER 2// }
2021-09-26 16:33:39 -04:00
%TOS { #00 SWP }
2021-04-23 11:58:58 -04:00
%RTN { JMP2r }
%MOD { DUP2 DIV MUL SUB }
2021-09-26 17:06:18 -04:00
%ABS2 { DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 -- }
2021-11-16 12:10:48 -05:00
%SCALEX { 2// .center/x LDZ2 ++ RADIUS -- }
%SCALEY { 2// .center/y LDZ2 ++ RADIUS -- }
%12HOURS { #0c MOD }
2021-09-26 17:06:18 -04:00
%LTS2 { #8000 ++ SWP2 #8000 ++ GTH2 }
%GTS2 { #8000 ++ SWP2 #8000 ++ LTH2 }
2021-03-26 17:01:51 -04:00
( devices )
2021-04-23 11:58:58 -04:00
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
2021-09-26 16:33:39 -04:00
|10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ]
2021-04-26 13:52:46 -04:00
|b0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ]
( variables )
|0000
2021-04-23 11:58:58 -04:00
@current $1
2021-09-26 17:06:18 -04:00
@center
&x $2 &y $2
2021-11-16 12:10:48 -05:00
@needles
&hx $2 &hy $2 &mx $2 &my $2 &sx $2 &sy $2
@line
&x0 $2 &y0 $2 &x $2 &y $2 &sx $2 &sy $2 &dx $2 &dy $2 &e1 $2 &e2 $2 &color $1
2021-04-02 00:53:41 -04:00
2021-03-26 17:01:51 -04:00
( program )
2021-04-29 00:00:39 -04:00
|0100 ( -> )
2021-04-23 11:58:58 -04:00
( theme )
2021-11-16 12:10:48 -05:00
#0ff8 .System/r DEO2
#0f08 .System/g DEO2
#0f08 .System/b DEO2
2021-09-26 16:33:39 -04:00
( resize )
2021-09-26 16:33:39 -04:00
#00f0 .Screen/width DEO2
2021-11-16 12:10:48 -05:00
#0120 .Screen/height DEO2
2021-04-29 00:00:39 -04:00
2021-04-23 11:58:58 -04:00
( vectors )
;on-frame .Screen/vector DEO2
2021-11-16 12:10:48 -05:00
( center )
.Screen/width DEI2 2// .center/x STZ2
.Screen/height DEI2 2// .center/y STZ2
2021-09-26 17:06:18 -04:00
( circle )
#3c00
&loop
( load ) DUP TOS 2** ;table ++ LDA2
TOS #0010 ** #001c // .center/x LDZ2 ++ #0049 -- .Screen/x DEO2
TOS #0010 ** #001c // .center/y LDZ2 ++ #0049 -- .Screen/y DEO2
DUP #0f MOD #00 EQU INC .Screen/pixel DEO
INC GTHk ,&loop JCN
POP2
BRK
2021-03-26 17:01:51 -04:00
2021-04-29 00:00:39 -04:00
@on-frame ( -> )
2021-04-02 00:53:41 -04:00
( only draw once per second )
2021-09-26 16:33:39 -04:00
.DateTime/second DEI .current LDZ = ,&skip JCN
( clear ) #00 ,draw-needles JSR
( update ) ,update-needles JSR
( draw ) #01 ,draw-needles JSR
2021-09-26 16:33:39 -04:00
;draw-display JSR2
&skip
2021-04-29 00:00:39 -04:00
2021-05-11 14:14:52 -04:00
.DateTime/second DEI .current STZ
2021-03-26 17:01:51 -04:00
2021-09-26 16:33:39 -04:00
BRK
@draw-needles ( mul -- )
STH
.center/x LDZ2 .center/y LDZ2 .needles/sx LDZ2 .needles/sy LDZ2 #02 STHkr * ;draw-line JSR2
.center/x LDZ2 .center/y LDZ2 .needles/mx LDZ2 .needles/my LDZ2 #01 STHkr * ;draw-line JSR2
.center/x LDZ2 .center/y LDZ2 .needles/hx LDZ2 .needles/hy LDZ2 #01 STHr * ;draw-line JSR2
RTN
2021-09-26 16:33:39 -04:00
@update-needles ( -- )
2021-09-26 16:33:39 -04:00
#00 .DateTime/second DEI 2** ;table ++ LDA2
TOS SCALEY .needles/sy STZ2
TOS SCALEX .needles/sx STZ2
#00 .DateTime/minute DEI 2** ;table ++ LDA2
TOS #0020 ** RADIUS ++ #0024 // SCALEY #0007 ++ .needles/my STZ2
TOS #0020 ** RADIUS ++ #0024 // SCALEX #0007 ++ .needles/mx STZ2
2021-09-26 16:33:39 -04:00
#00 .DateTime/hour DEI 12HOURS #20 SFTk NIP ADD 2** ;table ++ LDA2
TOS 4// DUP2k ++ ++ #0020 ++ SCALEY .needles/hy STZ2
TOS 4// DUP2k ++ ++ #0020 ++ SCALEX .needles/hx STZ2
2021-11-16 12:10:48 -05:00
RTN
2021-04-23 11:58:58 -04:00
@draw-display ( -- )
2021-11-16 14:35:08 -05:00
( auto addr ) #04 .Screen/auto DEO
2021-09-26 16:33:39 -04:00
( date )
.center/y LDZ2 #0068 -- .Screen/y DEO2
2021-11-16 12:10:48 -05:00
.center/x LDZ2 #0014 -- .Screen/x DEO2
2021-11-16 14:35:08 -05:00
.DateTime/month DEI2
SWP INC ,&number JSR
;font/slash ,&spacer JSR
,&number JSR
2021-09-26 16:33:39 -04:00
( time )
.center/y LDZ2 #0060 ++ .Screen/y DEO2
2021-11-16 12:10:48 -05:00
.center/x LDZ2 #0020 -- .Screen/x DEO2
2021-11-16 14:35:08 -05:00
.DateTime/hour DEI2
SWP ,&number JSR
;font/spacer ,&spacer JSR
,&number JSR
;font/spacer ,&spacer JSR
.DateTime/second DEI
,&number JSR
2021-09-26 16:33:39 -04:00
( auto none ) #00 .Screen/auto DEO
2021-04-02 00:53:41 -04:00
2021-11-16 14:35:08 -05:00
2021-04-23 11:58:58 -04:00
RTN
2021-11-16 14:35:08 -05:00
&pady ( -- )
.Screen/y DEI2 #0008 ++ .Screen/y DEO2 RTN
&spacer ( char* -- )
.Screen/addr DEO2
#03 .Screen/sprite DEO
,&pady JSR
#03 .Screen/sprite DEO
,&reset JSR
RTN
&number ( number -- )
DUP #0a DIV [ 10* TOS ;font ++ ] .Screen/addr DEO2
#03 .Screen/sprite DEO
,&pady JSR
#03 .Screen/sprite DEO
,&reset JSR
#0a MOD [ 10* TOS ;font ++ ] .Screen/addr DEO2
#03 .Screen/sprite DEO
,&pady JSR
#03 .Screen/sprite DEO
&reset
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
.Screen/y DEI2 #0008 -- .Screen/y DEO2
RTN
@draw-line ( x1 y1 x2 y2 color -- )
( load ) .line/color STZ .line/y0 STZ2 .line/x0 STZ2 .line/y STZ2 .line/x STZ2
2021-09-26 17:06:18 -04:00
.line/x0 LDZ2 .line/x LDZ2 -- ABS2 .line/dx STZ2
.line/y0 LDZ2 .line/y LDZ2 -- ABS2 #0000 SWP2 -- .line/dy STZ2
2021-09-26 16:33:39 -04:00
#ffff #00 .line/x LDZ2 .line/x0 LDZ2 LTS2 2** ++ .line/sx STZ2
#ffff #00 .line/y LDZ2 .line/y0 LDZ2 LTS2 2** ++ .line/sy STZ2
.line/dx LDZ2 .line/dy LDZ2 ++ .line/e1 STZ2
&loop
2021-05-11 14:14:52 -04:00
.line/x LDZ2 .Screen/x DEO2
.line/y LDZ2 .Screen/y DEO2
.line/color LDZ .Screen/pixel DEO
2021-09-26 17:06:18 -04:00
[ .line/x LDZ2 .line/x0 LDZ2 == ]
2021-11-16 12:10:48 -05:00
[ .line/y LDZ2 .line/y0 LDZ2 == ] AND ,&end JCN
2021-05-24 17:52:11 -04:00
.line/e1 LDZ2 2** .line/e2 STZ2
2021-05-11 14:14:52 -04:00
.line/e2 LDZ2 .line/dy LDZ2 LTS2 ,&skipy JCN
2021-09-26 16:33:39 -04:00
.line/e1 LDZ2 .line/dy LDZ2 ++ .line/e1 STZ2
.line/x LDZ2 .line/sx LDZ2 ++ .line/x STZ2
&skipy
2021-05-11 14:14:52 -04:00
.line/e2 LDZ2 .line/dx LDZ2 GTS2 ,&skipx JCN
2021-09-26 16:33:39 -04:00
.line/e1 LDZ2 .line/dx LDZ2 ++ .line/e1 STZ2
.line/y LDZ2 .line/sy LDZ2 ++ .line/y STZ2
&skipx
;&loop JMP2
&end
RTN
2021-11-16 12:10:48 -05:00
@table ( 60 positions on a circle )
8000 8d00 9a02 a706 b40b c011 cb18 d520
df2a e734 ee40 f44b f958 fd65 ff72 ff80
ff8d fd9a f9a7 f4b4 eec0 e7cb dfd5 d5df
cbe7 c0ee b4f4 a7f9 9afd 8dff 80ff 72ff
65fd 58f9 4bf4 40ee 34e7 2adf 20d5 18cb
11c0 0bb4 06a7 029a 008d 0080 0072 0265
0658 0b4b 113f 1834 202a 2a20 3418 3f11
2021-04-02 00:44:23 -04:00
4b0b 5806 6502 7200
2021-03-26 17:01:51 -04:00
2021-11-16 14:35:08 -05:00
@font
0018 2442 4242 4242 4242 4242 4224 1800
0008 1828 0808 0808 0808 0808 0808 1c00
0018 2442 4202 0202 0408 1020 4040 7e00
0018 2442 0202 0438 0402 0202 0204 7800
000c 0c14 1414 2424 2444 447e 0404 0e00
007e 4040 4040 5864 4202 0202 0204 7800
000c 1020 4040 5864 4242 4242 4224 1800
007e 4202 0204 0404 0808 0810 1010 1000
0018 2442 4242 2418 2442 4242 4224 1800
0018 2442 4242 4242 261a 0202 0408 3000
&spacer
0000 0000 0010 1000 0000 0000 1010 0000
&slash
0202 0404 0808 1010 2020 4040 8080 0000