Browse code

(clock.tal) Print date

Devine Lu Linvega authored on 19/11/2021 22:31:15
Showing 1 changed files
... ...
@@ -24,6 +24,10 @@
24 24
 %SCALEY  { 2// .center/y LDZ2 ++ RADIUS -- }
25 25
 %12HOURS { #0c MOD }
26 26
 
27
+%IS-UC { DUP #40 > SWP #5b < AND }
28
+%IS-LC { DUP #60 > SWP #7b < AND }
29
+%IS-NUM { DUP #2f > SWP #3a < AND }
30
+
27 31
 ( devices )
28 32
 
29 33
 |00 @System     [ &vector $2 &pad      $6 &r      $2 &g     $2 &b      $2 ]
... ...
@@ -35,7 +39,8 @@
35 39
 
36 40
 |0000
37 41
 
38
-@current $1
42
+@last 
43
+	&day $1 &sec $1
39 44
 @center
40 45
 	&x $2 &y $2
41 46
 @date
... ...
@@ -66,7 +71,7 @@
66 71
 	( center )
67 72
 	.Screen/width DEI2 2// 
68 73
 		DUP2 .center/x STZ2
69
-		DUP2 #0048 -- .date/x STZ2
74
+		DUP2 #0028 -- .date/x STZ2
70 75
 		#0020 -- .time/x STZ2
71 76
 	.Screen/height DEI2 2// 
72 77
 		DUP2 .center/y STZ2
... ...
@@ -83,23 +88,40 @@
83 88
 		INC GTHk ,&loop JCN
84 89
 	POP2
85 90
 
86
-( continue )
91
+BRK
87 92
 
88 93
 @on-frame ( -> )
89 94
 
90
-	( only draw once per second )
91
-	.DateTime/second DEI .current LDZ = ,&skip JCN
95
+	( once per second )
96
+	.DateTime/second DEI 
97
+	DUP .last/sec LDZ = ,&same-sec JCN
92 98
 		( clear ) #00 ,draw-needles JSR
93
-		( update ) ,update-needles JSR
99
+		( update ) ;make-needles JSR2
94 100
 		( draw ) #01 ,draw-needles JSR
95
-		;draw-display JSR2
96
-		&skip
97
-
98
-	.DateTime/second DEI .current STZ
101
+		.time/x LDZ2 .Screen/x DEO2
102
+		.time/y LDZ2 .Screen/y DEO2
103
+		;make-time JSR2
104
+		;time-txt ;draw-text JSR2
105
+		DUP .last/sec STZ
106
+		&same-sec
107
+	POP
108
+
109
+	( once per day )
110
+	.DateTime/day DEI 
111
+	DUP .last/day LDZ = ,&same-day JCN
112
+		.date/x LDZ2 .Screen/x DEO2
113
+		.date/y LDZ2 .Screen/y DEO2
114
+		.DateTime/dotw DEI 4* TOS ;week-txt ++ ;draw-text JSR2
115
+		.DateTime/month DEI 4* TOS ;month-txt ++ ;draw-text JSR2
116
+		;make-date JSR2
117
+		;date-txt ;draw-text JSR2
118
+		DUP .last/day STZ
119
+		&same-day
120
+	POP
99 121
 
100 122
 BRK
101 123
 
102
-@draw-needles ( mul -- )
124
+@draw-needles ( draw -- )
103 125
 
104 126
 	STH
105 127
 	.center/x LDZ2 .center/y LDZ2 
... ...
@@ -111,81 +133,33 @@ BRK
111 133
 
112 134
 RTN
113 135
 
114
-@update-needles ( -- )
115
-
116
-	#00 .DateTime/second DEI 2** ;table ++ LDA2
117
-		TOS SCALEY .needles/sy STZ2
118
-		TOS SCALEX .needles/sx STZ2
119
-	#00 .DateTime/minute DEI 2** ;table ++ LDA2
120
-		TOS 20** RADIUS ++ #0024 // SCALEY #0007 ++ .needles/my STZ2
121
-		TOS 20** RADIUS ++ #0024 // SCALEX #0007 ++ .needles/mx STZ2
122
-	#00 .DateTime/hour DEI 12HOURS #20 SFTk NIP ADD 2** ;table ++ LDA2
123
-		TOS 4// DUP2k ++ ++ #0020 ++ SCALEY .needles/hy STZ2
124
-		TOS 4// DUP2k ++ ++ #0020 ++ SCALEX .needles/hx STZ2
125
-
126
-RTN
127
-
128
-@draw-display ( -- )
129
-
130
-	( auto addr ) #04 .Screen/auto DEO
131
-
132
-	( dotw )
133
-	.date/x LDZ2 .Screen/x DEO2
134
-	.date/y LDZ2 .Screen/y DEO2
135
-	.DateTime/dotw DEI 4* TOS ;dotw ++ ;draw-dotw JSR2
136
-	( date )
137
-	.Screen/x DEI2 #001c ++ .Screen/x DEO2
138
-	.DateTime/month DEI2 
139
-		SWP INC ,&number JSR
140
-		;font/slash ,&char JSR
141
-		,&number JSR
142
-	( time )
143
-	.time/y LDZ2 .Screen/y DEO2
144
-	.time/x LDZ2 .Screen/x DEO2
145
-	.DateTime/hour DEI2 
146
-		SWP ,&number JSR
147
-		;font/spacer ,&char JSR
148
-		,&number JSR
149
-		;font/spacer ,&char JSR
150
-	.DateTime/second DEI 
151
-		,&number JSR
152
-
153
-	( auto none ) #00 .Screen/auto DEO
154
-
155
-RTN
156
-	&pady ( -- )
157
-		.Screen/y DEI2 #0008 ++ .Screen/y DEO2 RTN
158
-	&char ( char* -- )
136
+@draw-text ( addr* -- )
137
+
138
+	( auto addr ) #06 .Screen/auto DEO
139
+	&while
140
+		LDAk
141
+		DUP IS-LC ,&lc JCN
142
+		DUP IS-UC ,&uc JCN
143
+		DUP IS-NUM ,&num JCN
144
+		DUP LIT '/ = ,&slash JCN
145
+		DUP LIT ': = ,&colon JCN
146
+		POP ;font/blank
147
+		&end
159 148
 		.Screen/addr DEO2
160
-		#03 .Screen/sprite DEO
161
-		,&pady JSR
162
-		#03 .Screen/sprite DEO
163
-		,&reset JSR
164
-		RTN
165
-	&digit ( number -- )
166
-		10* TOS ;font ++ .Screen/addr DEO2
167
-		#03 .Screen/sprite DEO
168
-		,&pady JSR
169
-		#03 .Screen/sprite DEO
170
-		RTN
171
-	&number ( number -- )
172
-		DUP #0a DIV ,&digit JSR
173
-			,&reset JSR
174
-			#0a MOD ,&digit JSR
175
-	&reset
149
+		#0303 .Screen/sprite DEO .Screen/sprite DEO
150
+		.Screen/y DEI2 #0010 -- .Screen/y DEO2
176 151
 		.Screen/x DEI2 #0008 ++ .Screen/x DEO2
177
-		.Screen/y DEI2 #0008 -- .Screen/y DEO2
178
-	RTN
179
-
180
-@draw-dotw ( str* -- )
181
-
182
-	DUP2 #0003 ++ SWP2
183
-	&loop
184
-		LDAk #41 - TOS 10** ;font/letters ++ ;draw-display/char JSR2
185
-		INC2 GTH2k ,&loop JCN
186
-	POP2 POP2
152
+		INC2 LDAk ,&while JCN
153
+	POP2
154
+	( auto none ) #00 .Screen/auto DEO
155
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
187 156
 
188 157
 RTN
158
+	&lc #61 - TOS 10** ;font/lc ++ ,&end JMP
159
+	&uc #41 - TOS 10** ;font/uc ++ ,&end JMP
160
+	&num #30 - TOS 10** ;font/num ++ ,&end JMP
161
+	&slash POP ;font/slash ,&end JMP
162
+	&colon POP ;font/colon ,&end JMP
189 163
 
190 164
 @draw-line ( x1 y1 x2 y2 color -- )
191 165
 	
... ...
@@ -215,8 +189,54 @@ RTN
215 189
 
216 190
 RTN
217 191
 
218
-@dotw
219
-	"Sun $1 "Mon $1 "Tue $1 "Wed $1 "Thu $1 "Fri $1 "Sat $1
192
+@make-needles ( -- )
193
+
194
+	#00 .DateTime/second DEI 2** ;table ++ LDA2
195
+		TOS SCALEY .needles/sy STZ2
196
+		TOS SCALEX .needles/sx STZ2
197
+	#00 .DateTime/minute DEI 2** ;table ++ LDA2
198
+		TOS 20** RADIUS ++ #0024 // SCALEY #0007 ++ .needles/my STZ2
199
+		TOS 20** RADIUS ++ #0024 // SCALEX #0007 ++ .needles/mx STZ2
200
+	#00 .DateTime/hour DEI 12HOURS #20 SFTk NIP ADD 2** ;table ++ LDA2
201
+		TOS 4// DUP2k ++ ++ #0020 ++ SCALEY .needles/hy STZ2
202
+		TOS 4// DUP2k ++ ++ #0020 ++ SCALEX .needles/hx STZ2
203
+
204
+RTN
205
+
206
+@make-date ( -- )
207
+
208
+	.DateTime/day DEI
209
+		DUP #0a DIV #30 + ;date-txt STA
210
+		#0a MOD #30 + ;date-txt INC STA
211
+
212
+RTN
213
+
214
+@make-time ( -- )
215
+
216
+	.DateTime/hour DEI ;time-txt/h ,decimal JSR
217
+	.DateTime/minute DEI ;time-txt/m ,decimal JSR
218
+	.DateTime/second DEI ;time-txt/s ,decimal JSR
219
+
220
+RTN
221
+
222
+@decimal ( -- )
223
+
224
+	STH2
225
+	DUP #0a DIV #30 + STH2kr STA
226
+	#0a MOD #30 + STH2r INC2 STA
227
+
228
+RTN
229
+
230
+@time-txt
231
+	&h "00: &m "00: &s "00 $1
232
+@date-txt
233
+	"00 $1
234
+@week-txt
235
+	"Sun $1 "Mon $1 "Tue $1 "Wed $1 "Thu $1 "Fri $1 
236
+	"Sat $1
237
+@month-txt
238
+	"Jan $1 "Feb $1 "Mar $1 "Apr $1 "May $1 "Jun $1
239
+	"Jul $1 "Aug $1 "Sep $1 "Oct $1 "Nov $1 "Dec $1
220 240
 
221 241
 @table ( 60 positions on a circle )
222 242
 	8000 8d00 9a02 a706 b40b c011 cb18 d520
... ...
@@ -229,6 +249,7 @@ RTN
229 249
 	4b0b 5806 6502 7200
230 250
 
231 251
 @font
252
+	&num
232 253
 	0018 2442 4242 4242 4242 4242 4224 1800
233 254
 	0008 1828 0808 0808 0808 0808 0808 1c00
234 255
 	0018 2442 4202 0202 0408 1020 4040 7e00
... ...
@@ -239,11 +260,7 @@ RTN
239 260
 	007e 4202 0204 0404 0808 0810 1010 1000
240 261
 	0018 2442 4242 2418 2442 4242 4224 1800
241 262
 	0018 2442 4242 4242 261a 0202 0408 3000
242
-	&spacer
243
-	0000 0000 0010 1000 0000 0000 1010 0000
244
-	&slash
245
-	0202 0404 0808 1010 2020 4040 8080 0000
246
-	&letters
263
+	&uc
247 264
 	0010 1028 2844 4444 8282 fe82 8282 0000
248 265
 	00f8 4442 4242 4478 4442 4242 44f8 0000
249 266
 	003c 4282 8280 8080 8080 8282 423c 0000
... ...
@@ -270,12 +287,7 @@ RTN
270 287
 	0042 4242 2424 1818 1824 2442 4242 0000
271 288
 	0082 8282 4444 2828 1010 1010 1038 0000
272 289
 	007e 4204 0408 0810 1020 2040 427e 0000
273
-	0e08 0808 0808 0808 0808 0808 0808 080e
274
-	0082 8282 4444 fe28 10fe 1010 1010 1000
275
-	7010 1010 1010 1010 1010 1010 1010 1070
276
-	1028 4400 0000 0000 0000 0000 0000 0000
277
-	0000 0000 0000 0000 0000 0000 0000 00fe
278
-	1010 1008 0000 0000 0000 0000 0000 0000
290
+	&lc
279 291
 	0000 0000 0030 0808 3848 4848 4834 0000
280 292
 	0060 2020 202c 3222 2222 2222 322c 0000
281 293
 	0000 0000 001c 2240 4040 4040 221c 0000
... ...
@@ -302,4 +314,9 @@ RTN
302 314
 	0000 0000 00ee 4428 1010 1028 44ee 0000
303 315
 	0000 0000 00ee 4444 4448 2828 1010 2040
304 316
 	0000 0000 007c 4408 0810 2020 447c 0000
305
-
317
+	&colon
318
+	0000 0000 0010 1000 0000 0000 1010 0000
319
+	&slash
320
+	0202 0404 0808 1010 2020 4040 8080 0000
321
+	&blank
322
+	0000 0000 0000 0000 0000 0000 0000 0000