Browse code

(clock.tal) Fixed issue with hour needle

Devine Lu Linvega authored on 16/11/2021 18:00:51
Showing 1 changed files
... ...
@@ -19,7 +19,7 @@
19 19
 %ABS2    { DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 -- }
20 20
 %SCALEX  { 2// .center/x LDZ2 ++ RADIUS -- }
21 21
 %SCALEY  { 2// .center/y LDZ2 ++ RADIUS -- }
22
-%12HOURS { DUP #0c GTH #0c MUL SUB }
22
+%12HOURS { #0c MOD }
23 23
 %LTS2    { #8000 ++ SWP2 #8000 ++ GTH2 }
24 24
 %GTS2    { #8000 ++ SWP2 #8000 ++ LTH2 }
25 25
 %GET-CHAR-SPRITE { 8* TOS ;font-hex ++ }
... ...
@@ -35,14 +35,13 @@
35 35
 
36 36
 |0000
37 37
 
38
-@color   $1
39 38
 @current $1
40 39
 @center
41 40
 	&x $2 &y $2
42 41
 @needles
43 42
 	&hx $2 &hy $2 &mx $2 &my $2 &sx $2 &sy $2
44 43
 @line
45
-	&x0 $2 &y0 $2 &x $2 &y $2 &sx $2 &sy $2 &dx $2 &dy $2 &e1 $2 &e2 $2
44
+	&x0 $2 &y0 $2 &x $2 &y $2 &sx $2 &sy $2 &dx $2 &dy $2 &e1 $2 &e2 $2 &color $1
46 45
 
47 46
 ( program )
48 47
 
... ...
@@ -53,6 +52,7 @@
53 52
 	#0f08 .System/g DEO2 
54 53
 	#0f08 .System/b DEO2
55 54
 
55
+	( resize )
56 56
 	#00f0 .Screen/width DEO2
57 57
 	#0120 .Screen/height DEO2
58 58
 
... ...
@@ -63,13 +63,25 @@
63 63
 	.Screen/width DEI2 2// .center/x STZ2
64 64
 	.Screen/height DEI2 2// .center/y STZ2
65 65
 
66
+	( circle )
67
+	#3c00 
68
+	&loop
69
+		( load ) DUP TOS 2** ;table ++ LDA2
70
+		TOS #0010 ** #001c // .center/x LDZ2 ++ #0049 -- .Screen/x DEO2
71
+		TOS #0010 ** #001c // .center/y LDZ2 ++ #0049 -- .Screen/y DEO2
72
+		DUP #0f MOD #00 EQU INC .Screen/pixel DEO
73
+		INC GTHk ,&loop JCN
74
+	POP2
75
+
66 76
 BRK
67 77
 
68 78
 @on-frame ( -> )
69 79
 
70 80
 	( only draw once per second )
71 81
 	.DateTime/second DEI .current LDZ = ,&skip JCN
72
-		;draw-clock JSR2
82
+		( clear ) #00 ,draw-needles JSR
83
+		( update ) ,update-needles JSR
84
+		( draw ) #01 ,draw-needles JSR
73 85
 		;draw-display JSR2
74 86
 		&skip
75 87
 
... ...
@@ -77,40 +89,26 @@ BRK
77 89
 
78 90
 BRK
79 91
 
80
-@draw-clock ( -- )
92
+@draw-needles ( mul -- )
93
+
94
+	STH
95
+	.center/x LDZ2 .center/y LDZ2 .needles/sx LDZ2 .needles/sy LDZ2 #02 STHkr * ;draw-line JSR2
96
+	.center/x LDZ2 .center/y LDZ2 .needles/mx LDZ2 .needles/my LDZ2 #01 STHkr * ;draw-line JSR2
97
+	.center/x LDZ2 .center/y LDZ2 .needles/hx LDZ2 .needles/hy LDZ2 #01 STHr * ;draw-line JSR2
98
+
99
+RTN
81 100
 
82
-	( clear ) #00 ;draw-needles JSR2
101
+@update-needles ( -- )
83 102
 
84 103
 	#00 .DateTime/second DEI 2** ;table ++ LDA2
85 104
 		TOS SCALEY .needles/sy STZ2
86 105
 		TOS SCALEX .needles/sx STZ2
87 106
 	#00 .DateTime/minute DEI 2** ;table ++ LDA2
88
-		TOS 4// DUP2k ++ ++ #0020 ++ SCALEY .needles/my STZ2
89
-		TOS 4// DUP2k ++ ++ #0020 ++ SCALEX .needles/mx STZ2
107
+		TOS #0020 ** RADIUS ++ #0024 // SCALEY #0007 ++ .needles/my STZ2
108
+		TOS #0020 ** RADIUS ++ #0024 // SCALEX #0007 ++ .needles/mx STZ2
90 109
 	#00 .DateTime/hour DEI 12HOURS #20 SFTk NIP ADD 2** ;table ++ LDA2
91
-		TOS 2// RADIUS ++ SCALEY .needles/hy STZ2
92
-		TOS 2// RADIUS ++ SCALEX .needles/hx STZ2
93
-
94
-	( draw ) #01 ;draw-needles JSR2
95
-
96
-	( circle )
97
-	#3c #00 
98
-	&loop
99
-		( load ) DUP TOS 2** ;table ++ LDA2
100
-		TOS SCALEY .Screen/y DEO2
101
-		TOS SCALEX .Screen/x DEO2
102
-		DUP #0f MOD #00 EQU INC .Screen/pixel DEO
103
-		INC GTHk ,&loop JCN
104
-	POP2
105
-
106
-RTN
107
-
108
-@draw-needles ( mul -- )
109
-
110
-	STH
111
-	.center/x LDZ2 .center/y LDZ2 .needles/sx LDZ2 .needles/sy LDZ2 #02 STHkr * ;draw-line JSR2
112
-	.center/x LDZ2 .center/y LDZ2 .needles/mx LDZ2 .needles/my LDZ2 #01 STHkr * ;draw-line JSR2
113
-	.center/x LDZ2 .center/y LDZ2 .needles/hx LDZ2 .needles/hy LDZ2 #01 STHr * ;draw-line JSR2
110
+		TOS 4// DUP2k ++ ++ #0020 ++ SCALEY .needles/hy STZ2
111
+		TOS 4// DUP2k ++ ++ #0020 ++ SCALEX .needles/hx STZ2
114 112
 
115 113
 RTN
116 114
 
... ...
@@ -119,7 +117,7 @@ RTN
119 117
 	( auto x ) #01 .Screen/auto DEO
120 118
 
121 119
 	( date )
122
-	.center/y LDZ2 #0058 -- .Screen/y DEO2
120
+	.center/y LDZ2 #0068 -- .Screen/y DEO2
123 121
 	.center/x LDZ2 #0014 -- .Screen/x DEO2
124 122
 		.DateTime/month DEI INC
125 123
 		DUP #0a DIV GET-CHAR-SPRITE .Screen/addr DEO2
... ...
@@ -134,7 +132,7 @@ RTN
134 132
 			#03 .Screen/sprite DEO
135 133
 
136 134
 	( time )
137
-	.center/y LDZ2 #0050 ++ .Screen/y DEO2
135
+	.center/y LDZ2 #0060 ++ .Screen/y DEO2
138 136
 	.center/x LDZ2 #0020 -- .Screen/x DEO2
139 137
 		.DateTime/hour DEI
140 138
 		DUP #0a DIV GET-CHAR-SPRITE .Screen/addr DEO2
... ...
@@ -162,7 +160,7 @@ RTN
162 160
 
163 161
 @draw-line ( x1 y1 x2 y2 color -- )
164 162
 	
165
-	( load ) .color STZ .line/y0 STZ2 .line/x0 STZ2 .line/y STZ2 .line/x STZ2
163
+	( load ) .line/color STZ .line/y0 STZ2 .line/x0 STZ2 .line/y STZ2 .line/x STZ2
166 164
 	.line/x0 LDZ2 .line/x LDZ2 -- ABS2 .line/dx STZ2
167 165
 	.line/y0 LDZ2 .line/y LDZ2 -- ABS2 #0000 SWP2 -- .line/dy STZ2
168 166
 	#ffff #00 .line/x LDZ2 .line/x0 LDZ2 LTS2 2** ++ .line/sx STZ2
... ...
@@ -171,7 +169,7 @@ RTN
171 169
 	&loop
172 170
 		.line/x LDZ2 .Screen/x DEO2 
173 171
 		.line/y LDZ2 .Screen/y DEO2 
174
-		.color LDZ .Screen/pixel DEO
172
+		.line/color LDZ .Screen/pixel DEO
175 173
 		[ .line/x LDZ2 .line/x0 LDZ2 == ] 
176 174
 		[ .line/y LDZ2 .line/y0 LDZ2 == ] AND ,&end JCN
177 175
 		.line/e1 LDZ2 2** .line/e2 STZ2