Browse code

Remove many macros.

Andrew Alderwick authored on 20/11/2022 22:50:19
Showing 6 changed files
... ...
@@ -1,16 +1,5 @@
1 1
 ( uxnasm projects/examples/demos/snake.tal bin/snake.rom && uxnemu bin/snake.rom )
2 2
 
3
-%2/  { #01 SFT } %2* { #10 SFT }
4
-%8//  { #03 SFT2 } %8**  { #30 SFT2 }
5
-%MOD { DIVk MUL SUB }
6
-%MAX { LTHk JMP SWP POP }
7
-%RTN { JMP2r }
8
-%TOS { #00 SWP }
9
-%BRK? { #01 JCN BRK }
10
-
11
-
12
-%DIFFICULTY { #06 }
13
-
14 3
 ( devices )
15 4
 
16 5
 |00 @System     [ &vector $2 &wst      $1 &rst    $1 &pad   $4 &r      $2 &g      $2 &b    $2 &debug  $1 &halt $1 ]
... ...
@@ -51,8 +40,8 @@
51 40
 	#0100 .Screen/height DEO2
52 41
 
53 42
 	( set arena )
54
-	.Screen/width DEI2 8// NIP .arena/w STZ
55
-	.Screen/height DEI2 8// NIP .arena/h STZ
43
+	.Screen/width DEI2 #03 SFT2 NIP .arena/w STZ
44
+	.Screen/height DEI2 #03 SFT2 NIP .arena/h STZ
56 45
 
57 46
 	;reset JSR2
58 47
 
... ...
@@ -61,7 +50,8 @@ BRK
61 50
 @on-frame ( -> )
62 51
 
63 52
 	.arena/timer LDZ INC DUP .arena/timer STZ
64
-		DIFFICULTY EQU BRK?
53
+		#06 ( difficulty - lower value produces faster gameplay )
54
+		EQU JMP BRK
65 55
 
66 56
 	( clear ) #00 ;draw-snake JSR2
67 57
 	( update ) ;move JSR2
... ...
@@ -90,8 +80,8 @@ BRK
90 80
 	#00 ;draw-snake JSR2
91 81
 	#00 ;draw-apple JSR2
92 82
 
93
-	.arena/w LDZ 2/ #01 SUB .snake/x STZ
94
-	.arena/h LDZ 2/ #01 SUB .snake/y STZ
83
+	.arena/w LDZ #01 SFT #01 SUB .snake/x STZ
84
+	.arena/h LDZ #01 SFT #01 SUB .snake/y STZ
95 85
 	#00 .snake/dead STZ
96 86
 	#00 .snake/length STZ
97 87
 	#00 .snake/direction STZ
... ...
@@ -99,7 +89,7 @@ BRK
99 89
 	#03 ;draw-snake JSR2
100 90
 	;add-apple JSR2
101 91
 
102
-RTN
92
+JMP2r
103 93
 
104 94
 @move ( -- )
105 95
 
... ...
@@ -107,33 +97,33 @@ RTN
107 97
 	.snake/x LDZ2 STH2
108 98
 	.snake/length LDZ #00
109 99
 	&loop
110
-		( pop ) DUP 2* .snake/tail ADD LDZ2 STH2 SWP2r
111
-		( push ) DUP 2* .snake/tail ADD STH2r ROT STZ2
100
+		( pop ) DUPk ADD .snake/tail ADD LDZ2 STH2 SWP2r
101
+		( push ) DUPk ADD .snake/tail ADD STH2r ROT STZ2
112 102
 		INC GTHk ,&loop JCN
113 103
 	POP2
114 104
 	POP2r
115 105
 
116
-	.snake/dead LDZ #00 EQU JMP RTN
106
+	.snake/dead LDZ #00 EQU JMP JMP2r
117 107
 
118 108
 	.snake/direction LDZ
119 109
 	DUP #01 NEQ ,&no-up JCN
120 110
 		.snake/y LDZ #01 SUB
121
-			.arena/h LDZ MAX
111
+			.arena/h LDZ LTHk JMP SWP POP
122 112
 			.snake/y STZ
123 113
 		&no-up
124 114
 	DUP #02 NEQ ,&no-down JCN
125 115
 		.snake/y LDZ INC
126
-			.arena/h LDZ MOD
116
+			.arena/h LDZ DIVk MUL SUB
127 117
 			.snake/y STZ
128 118
 		&no-down
129 119
 	DUP #04 NEQ ,&no-left JCN
130 120
 		.snake/x LDZ #01 SUB
131
-			.arena/w LDZ MAX
121
+			.arena/w LDZ LTHk JMP SWP POP
132 122
 			.snake/x STZ
133 123
 		&no-left
134 124
 	DUP #08 NEQ ,&no-right JCN
135 125
 		.snake/x LDZ INC 
136
-			.arena/w LDZ MOD
126
+			.arena/w LDZ DIVk MUL SUB
137 127
 			.snake/x STZ
138 128
 		&no-right
139 129
 	POP
... ...
@@ -148,7 +138,7 @@ RTN
148 138
 
149 139
 	.snake/length LDZ #01
150 140
 	&loop-body
151
-		( pop ) DUP 2* .snake/tail ADD LDZ2
141
+		( pop ) DUPk ADD .snake/tail ADD LDZ2
152 142
 		.snake/x LDZ2 NEQ2 ,&no-collision-body JCN
153 143
 			#01 .snake/dead STZ
154 144
 			#03 ;draw-snake JSR2
... ...
@@ -156,16 +146,16 @@ RTN
156 146
 		INC GTHk ,&loop-body JCN
157 147
 	POP2
158 148
 
159
-RTN
149
+JMP2r
160 150
 
161 151
 @add-apple ( -- )
162 152
 
163 153
 	.DateTime/hour DEI2 .DateTime/minute DEI2 MUL2 #1234 MUL2 ADD
164
-		.arena/w LDZ MOD .apple/x STZ
154
+		.arena/w LDZ DIVk MUL SUB .apple/x STZ
165 155
 	.DateTime/hour DEI2 .DateTime/minute DEI2 MUL2 #abcd MUL2 ADD
166
-		.arena/h LDZ MOD .apple/y STZ
156
+		.arena/h LDZ DIVk MUL SUB .apple/y STZ
167 157
 
168
-RTN
158
+JMP2r
169 159
 
170 160
 @draw-snake ( color -- )
171 161
 
... ...
@@ -174,41 +164,41 @@ RTN
174 164
 	;snake-icns .Screen/addr DEO2
175 165
 	.snake/length LDZ #00
176 166
 	&loop
177
-		DUP 2* .snake/tail ADD LDZ TOS 8** .Screen/x DEO2
178
-		DUP 2* .snake/tail ADD INC LDZ TOS 8** .Screen/y DEO2
167
+		DUPk ADD .snake/tail ADD LDZ #0005 SFT2 .Screen/x DEO2
168
+		DUPk ADD .snake/tail ADD INC LDZ #0005 SFT2 .Screen/y DEO2
179 169
 		STHkr .Screen/sprite DEO
180 170
 		INC GTHk ,&loop JCN
181 171
 	POP2
182 172
 	( draw head )
183
-	.snake/x LDZ TOS 8** .Screen/x DEO2
184
-	.snake/y LDZ TOS 8** .Screen/y DEO2
173
+	.snake/x LDZ #0005 SFT2 .Screen/x DEO2
174
+	.snake/y LDZ #0005 SFT2 .Screen/y DEO2
185 175
 	;snake-icns/face .Screen/addr DEO2
186 176
 	STHr .Screen/sprite DEO
187 177
 
188
-RTN
178
+JMP2r
189 179
 
190 180
 @draw-apple ( color -- )
191 181
 
192
-	.apple/x LDZ TOS 8** .Screen/x DEO2
193
-	.apple/y LDZ TOS 8** .Screen/y DEO2
182
+	.apple/x LDZ #0005 SFT2 .Screen/x DEO2
183
+	.apple/y LDZ #0005 SFT2 .Screen/y DEO2
194 184
 	;apple-chr .Screen/addr DEO2
195 185
 	.Screen/sprite DEO
196 186
 
197
-RTN
187
+JMP2r
198 188
 
199 189
 @draw-score ( score color -- )
200 190
 
201 191
 	STH
202 192
 	#0010 .Screen/x DEO2
203 193
 	#0010 .Screen/y DEO2
204
-	DUP #04 SFT TOS 8** ;font-hex ADD2 .Screen/addr DEO2
194
+	DUP #04 SFT #0005 SFT2 ;font-hex ADD2 .Screen/addr DEO2
205 195
 	.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
206 196
 		( draw ) STHkr .Screen/sprite DEO
207
-	#0f AND TOS 8** ;font-hex ADD2 .Screen/addr DEO2
197
+	#0f AND #0005 SFT2 ;font-hex ADD2 .Screen/addr DEO2
208 198
 	.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
209 199
 		( draw ) STHr .Screen/sprite DEO
210 200
 
211
-RTN
201
+JMP2r
212 202
 
213 203
 ( assets )
214 204
 
... ...
@@ -1,7 +1,5 @@
1 1
 ( dev/audio )
2 2
 
3
-%MOD { DIVk MUL SUB }
4
-
5 3
 ( devices )
6 4
 
7 5
 |00 @System     [ &vector $2 &pad      $6 &r      $2 &g     $2 &b      $2 ]
... ...
@@ -57,7 +55,7 @@ BRK
57 55
 	( skip ) .timer LDZ #10 EQU #01 JCN [ BRK ]
58 56
 
59 57
 	( get note )
60
-	.counter LDZ #18 MOD #30 ADD 
58
+	.counter LDZ #18 DIVk MUL SUB #30 ADD 
61 59
 		.Audio0/pitch .counter LDZ #03 AND #40 SFT ADD DEO
62 60
 
63 61
 	.counter LDZ INC .counter STZ
... ...
@@ -1,15 +1,5 @@
1 1
 ( art by @ritualdust )
2 2
 
3
-%8** { #30 SFT2 }
4
-%10** { #40 SFT2 }
5
-
6
-%DEBUG  { ;print-hex JSR2 #0a .Console/write DEO }
7
-%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }
8
-
9
-%RTN { JMP2r }
10
-%TOS { #00 SWP }
11
-%DEC { #01 SUB }
12
-
13 3
 %MOUSE { #82 }
14 4
 
15 5
 ( devices )
... ...
@@ -65,7 +55,7 @@ BRK
65 55
 	DUP #10 NEQ ,&no-up JCN
66 56
 		#00 .player/d STZ
67 57
 		#00 ;draw-mouse JSR2
68
-		.player/y LDZk DEC SWP STZ
58
+		.player/y LDZk #01 SUB SWP STZ
69 59
 		MOUSE ;draw-mouse JSR2
70 60
 		&no-up
71 61
 	DUP #20 NEQ ,&no-down JCN
... ...
@@ -77,7 +67,7 @@ BRK
77 67
 	DUP #40 NEQ ,&no-left JCN
78 68
 		#02 .player/d STZ
79 69
 		#00 ;draw-mouse JSR2
80
-		.player/x LDZk DEC SWP STZ
70
+		.player/x LDZk #01 SUB SWP STZ
81 71
 		MOUSE ;draw-mouse JSR2
82 72
 		&no-left
83 73
 	DUP #80 NEQ ,&no-right JCN
... ...
@@ -98,24 +88,24 @@ BRK
98 88
 
99 89
 @draw-mouse ( color -- )
100 90
 
101
-	;spritesheet #29 .player/d LDZ ADD TOS DUP2 DEBUG2 10** ADD2 .Screen/addr DEO2
102
-	.player/x LDZ TOS 8** .room/x LDZ2 ADD2 .Screen/x DEO2
103
-	.player/y LDZ TOS 8** .room/y LDZ2 ADD2 .Screen/y DEO2
91
+	;spritesheet #29 .player/d LDZ ADD #0004 SFT2 ADD2 .Screen/addr DEO2
92
+	.player/x LDZ #0005 SFT2 .room/x LDZ2 ADD2 .Screen/x DEO2
93
+	.player/y LDZ #0005 SFT2 .room/y LDZ2 ADD2 .Screen/y DEO2
104 94
 	#40 ADD .Screen/sprite DEO
105 95
 
106
-RTN
96
+JMP2r
107 97
 
108 98
 @draw-dungeon ( stage* -- )
109 99
 
110 100
 	STH2
111 101
 	#1000
112 102
 	&ver
113
-		DUP TOS 8** .room/y LDZ2 ADD2 .Screen/y DEO2
103
+		DUP #0005 SFT2 .room/y LDZ2 ADD2 .Screen/y DEO2
114 104
 		#1000
115 105
 		&hor
116
-			DUP TOS 8** .room/x LDZ2 ADD2 .Screen/x DEO2
117
-			( get id ) STH2 DUP STH2r ROT OVR SWP #40 SFT ADD TOS
118
-				( tile ) DUP2 STH2kr ADD2 LDA TOS 10** ;spritesheet ADD2 .Screen/addr DEO2
106
+			DUP #0005 SFT2 .room/x LDZ2 ADD2 .Screen/x DEO2
107
+			( get id ) STH2 DUP STH2r ROT OVR SWP #40 SFT ADD #00 SWP
108
+				( tile ) DUP2 STH2kr ADD2 LDA #0004 SFT2 ;spritesheet ADD2 .Screen/addr DEO2
119 109
 				( color ) STH2kr #0100 ADD2 ADD2 LDA .Screen/sprite DEO
120 110
 			INC GTHk ,&hor JCN
121 111
 		POP2
... ...
@@ -123,17 +113,17 @@ RTN
123 113
 	POP2
124 114
 	POP2r
125 115
 
126
-RTN
116
+JMP2r
127 117
 
128 118
 @print-hex ( value -- )
129 119
 	
130 120
 	STHk #04 SFT ,&parse JSR .Console/write DEO
131 121
 	STHr #0f AND ,&parse JSR .Console/write DEO
132
-	RTN
122
+	JMP2r
133 123
 	&parse ( value -- char )
134
-		DUP #09 GTH ,&above JCN #30 ADD RTN &above #09 SUB #60 ADD RTN
124
+		DUP #09 GTH ,&above JCN #30 ADD JMP2r &above #09 SUB #60 ADD JMP2r
135 125
 
136
-RTN
126
+JMP2r
137 127
 
138 128
 @mouse-icn
139 129
 	ffff ffff ffff ffff 0000 0000 0000 0000
... ...
@@ -11,12 +11,6 @@
11 11
 	examples of asma's usage and can be discarded.
12 12
 )
13 13
 
14
-(
15
-	Common macros for use later on.
16
-)
17
-
18
-%asma-IF-ERROR { ;asma/error LDA2 ORA }
19
-
20 14
 (
21 15
 	Asma's public interface.
22 16
 	These routines are what are expected to be called from programs that bundle
... ...
@@ -32,7 +26,7 @@
32 26
 	;asma-init-first-pass JSR2
33 27
 	;asma-flush-ignore ;asma/flush-fn STA2
34 28
 	;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2
35
-	asma-IF-ERROR ,&error JCN
29
+	;asma/error LDA2 ORA ,&error JCN
36 30
 
37 31
 	;asma-init-next-pass JSR2
38 32
 	;asma-flush-to-file ;asma/flush-fn STA2
... ...
@@ -40,7 +34,7 @@
40 34
 	;asma-flush-to-console ;asma/flush-fn STA2
41 35
 	&filename-present
42 36
 	;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2
43
-	asma-IF-ERROR ,&error JCN
37
+	;asma/error LDA2 ORA ,&error JCN
44 38
 
45 39
 	( flush output buffer )
46 40
 	;asma-output/ptr LDA2 ;asma-write-buffer SUB2 ;asma/flush-fn LDA2 JSR2
... ...
@@ -226,7 +220,7 @@
226 220
 	ROT2 ( func* line^ buf* size^ filename* )
227 221
 	,file-read-chunks JSR
228 222
 
229
-	asma-IF-ERROR ,&error JCN
223
+	;asma/error LDA2 ORA ,&error JCN
230 224
 
231 225
 	&error
232 226
 	POP2 POP2 POP2 POP2 POP2
... ...
@@ -318,7 +312,7 @@
318 312
 	LDAk #0a NEQ ( end-chunk* ws-char* not-newline / line^ start-of-token* )
319 313
 	#00 OVR2 STA
320 314
 	STH2r ,asma-assemble-token JSR ( end-chunk* ws-char* not-newline / line^ )
321
-	asma-IF-ERROR ,&error JCN
315
+	;asma/error LDA2 ORA ,&error JCN
322 316
 	,&not-newline JCN
323 317
 	,asma/lines LDR2 INC2 ,asma/lines STR2
324 318
 	&not-newline ( end-chunk* ws-char* / line^ )
... ...
@@ -362,9 +356,9 @@
362 356
 	asma/state contains several meaningful bits:
363 357
 	0x02 we are in a comment,
364 358
 	0x04 we are in a macro body,
365
-	0x10 we are in a macro body that we are ignoring
359
+	0x08 we are in a macro body that we are ignoring
366 360
 	   (because the macro was already defined in a previous pass).
367
-	Since 0x10 never appears without 0x04, the lowest bit set in asma/state is
361
+	Since 0x08 never appears without 0x04, the lowest bit set in asma/state is
368 362
 	always 0x00, 0x02, or 0x04, which is very handy for use with jump tables.
369 363
 	The lowest bit set can be found easily by #00 (n) SUBk AND.
370 364
 )
... ...
@@ -596,14 +590,11 @@
596 590
 	-body routines) tokens that fail to match any first letter in their tree.
597 591
 )
598 592
 
599
-%asma-STATE-SET { ;asma/state LDA ORA ;asma/state STA }
600
-%asma-STATE-CLEAR { #ff EOR ;asma/state LDA AND ;asma/state STA }
601
-
602 593
 @asma-comment-more
603 594
 	;asma/token LDA2 ;strlen JSR2 ORA ,asma-ignore JCN
604 595
 @asma-comment-start
605 596
 	;asma/comment-level LDAk INC ROT ROT STA
606
-	#02 asma-STATE-SET
597
+	;asma/state LDA #02 ORA ;asma/state STA
607 598
 @asma-ignore
608 599
 	JMP2r
609 600
 
... ...
@@ -611,7 +602,7 @@
611 602
 	;asma/token LDA2 ;strlen JSR2 ORA ,asma-ignore JCN
612 603
 	;asma/comment-level LDAk #01 SUB DUP SWP2 STA ,asma-ignore JCN
613 604
 @asma-comment-end
614
-	#02 asma-STATE-CLEAR
605
+	;asma/state LDA #0c AND ;asma/state STA
615 606
 	JMP2r
616 607
 
617 608
 @asma-macro-define
... ...
@@ -628,22 +619,22 @@
628 619
 	#0000 ;append-heap-short JSR2 ( less-than pointer )
629 620
 	#0000 ;append-heap-short JSR2 ( greater-than pointer )
630 621
 	;asma/token LDA2 ;append-heap-string JSR2 ( key )
631
-	#04 asma-STATE-SET
622
+	;asma/state LDA #04 ORA ;asma/state STA
632 623
 	JMP2r
633 624
 
634 625
 	&ignore-macro
635
-	#14 asma-STATE-SET
626
+	;asma/state LDA #0c ORA ;asma/state STA
636 627
 	JMP2r
637 628
 
638 629
 @asma-macro-body
639
-	;asma/state LDA #10 AND ,&skip JCN
630
+	;asma/state LDA #08 AND ,&skip JCN
640 631
 	;asma/token LDA2 ;append-heap-string JSR2
641 632
 	&skip
642 633
 	JMP2r
643 634
 
644 635
 @asma-macro-end
645 636
 	#00 ;append-heap-byte JSR2
646
-	#14 asma-STATE-CLEAR
637
+	;asma/state LDA #02 AND ;asma/state STA
647 638
 	JMP2r
648 639
 
649 640
 @asma-label-define
... ...
@@ -852,7 +843,7 @@
852 843
 
853 844
 	&keep-going
854 845
 	DUP2k ;strlen JSR2 INC2 ADD2
855
-	SWP2 ;asma-assemble-token JSR2 asma-IF-ERROR ,&macro-error JCN
846
+	SWP2 ;asma-assemble-token JSR2 ;asma/error LDA2 ORA ,&macro-error JCN
856 847
 	,&macro-loop JMP
857 848
 
858 849
 	&macro-error
... ...
@@ -54,10 +54,6 @@
54 54
 (   - mul32 memory, 12 bytes )
55 55
 (   - _divmod32 memory, 16 bytes )
56 56
 
57
-%COMPLEMENT32 { SWP2 #ffff EOR2 SWP2 #ffff EOR2 }
58
-%DUP4 { OVR2 OVR2 }
59
-%POP4 { POP2 POP2 }
60
-
61 57
 ( bitcount: number of bits needed to represent number )
62 58
 ( equivalent to floor[log2[x]] + 1 )
63 59
 
... ...
@@ -164,7 +160,7 @@
164 160
 
165 161
 ( ~x )
166 162
 @complement32 ( x** -> ~x** )
167
-    COMPLEMENT32 JMP2r
163
+    SWP2 #ffff EOR2 SWP2 #ffff EOR2 JMP2r
168 164
 
169 165
 ( temporary registers )
170 166
 ( shared by most operations, except mul32 and div32 )
... ...
@@ -289,7 +285,7 @@
289 285
 
290 286
 ( -x )
291 287
 @negate32 ( x** -> -x** )
292
-    COMPLEMENT32
288
+    ;complement32 JSR2
293 289
     INC2 ( ~xhi -xlo )
294 290
     DUP2 #0000 NEQ2 ( ~xhi -xlo non-zero? )
295 291
     ,&done JCN ( xlo non-zero => don't inc hi )
... ...
@@ -414,10 +410,10 @@
414 410
 ( greatest common divisor - euclidean algorithm )
415 411
 @gcd32 ( x** y** -> z** )
416 412
     &loop ( x y )
417
-    DUP4 ( x y y )
413
+    OVR2 OVR2 ( x y y )
418 414
     ;is-zero32 JSR2 ( x y y=0? )
419 415
     ,&done JCN ( x y )
420
-    DUP4 ( x y y )
416
+    OVR2 OVR2 ( x y y )
421 417
     STH2 STH2 ( x y [y] )
422 418
     ;mod32 JSR2 ( r=x%y [y] )
423 419
     STH2r ( rhi rlo yhi [ylo] )
... ...
@@ -428,5 +424,5 @@
428 424
     ROT2 ( yhi ylo rhi rlo )
429 425
     ,&loop JMP
430 426
     &done
431
-    POP4 ( x )
427
+    POP2 POP2 ( x )
432 428
     JMP2r
... ...
@@ -1,14 +1,5 @@
1 1
 ( app/neralie : clock with arvelie date )
2 2
 
3
-%PAD { #0018 }
4
-
5
-%MOD  { DIVk MUL SUB }
6
-%MOD2 { DIV2k MUL2 SUB2 }
7
-
8
-%h { .DateTime/hour   DEI }
9
-%m { .DateTime/minute DEI }
10
-%s { .DateTime/second DEI }
11
-
12 3
 ( devices )
13 4
 
14 5
 |00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
... ...
@@ -47,7 +38,7 @@
47 38
 	#01 .fps/current STZ
48 39
 
49 40
 	( set size )
50
-	PAD
41
+	#0018 ( padding )
51 42
 	DUP2 .frame/x1 STZ2
52 43
 	DUP2 .frame/y1 STZ2
53 44
 	DUP2 .Screen/width DEI2 SWP2 SUB2 #0001 SUB2 .frame/x2 STZ2
... ...
@@ -79,22 +70,22 @@ BRK
79 70
 @neralie-calc ( -- )
80 71
 
81 72
 	( add up fractions of a pulse, store tenths in n6 )
82
-	#0120 #00 h MUL2
83
-	#00c0 #00 m MUL2 ADD2
84
-	#00f8 #00 s MUL2 ADD2
73
+	#0120 #00 .DateTime/hour DEI MUL2
74
+	#00c0 #00 .DateTime/minute DEI MUL2 ADD2
75
+	#00f8 #00 .DateTime/second DEI MUL2 ADD2
85 76
 	#0271 #00 .fps/next LDZ MUL2 #00 .fps/current LDZ DIV2 #30 SFT2 ADD2
86 77
 	#01b0 ;modf JSR2 SWP2 #0017 MUL2 #03e8 DIV2 .neralie/n6 STZ POP
87 78
 
88 79
 	( add up units and tens of pulses, store in n5 and n4 )
89
-	#0042 #00 h MUL2 ADD2
90
-	#005e #00 m MUL2 ADD2
91
-	#000b #00 s MUL2 ADD2
80
+	#0042 #00 .DateTime/hour DEI MUL2 ADD2
81
+	#005e #00 .DateTime/minute DEI MUL2 ADD2
82
+	#000b #00 .DateTime/second DEI MUL2 ADD2
92 83
 	#000a ;modf JSR2 SWP2 .neralie/n5 STZ POP
93 84
 	#000a ;modf JSR2 SWP2 .neralie/n4 STZ POP
94 85
 
95 86
 	( add up hundreds of pulses + 10 x beats, store in n0123 )
96
-	#01a0 #00 h MUL2 ADD2
97
-	#0006 #00 m MUL2 ADD2 .neralie/n0123 STZ2
87
+	#01a0 #00 .DateTime/hour DEI MUL2 ADD2
88
+	#0006 #00 .DateTime/minute DEI MUL2 ADD2 .neralie/n0123 STZ2
98 89
 
99 90
 JMP2r
100 91
 
... ...
@@ -109,14 +100,14 @@ JMP2r
109 100
 	.DateTime/year DEI2 #07d6 SUB2 NIP
110 101
 		DUP #0a DIV #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
111 102
 			#01 .Screen/sprite DEO
112
-		#0a MOD #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
103
+		#0a DIVk MUL SUB #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
113 104
 			#01 .Screen/sprite DEO
114 105
 	.DateTime/doty DEI2
115 106
 		DUP2 #000e DIV2 #30 SFT2 ;font-letters ADD2 .Screen/addr DEO2
116 107
 			#01 .Screen/sprite DEO
117
-		#000e MOD2
108
+		#000e DIV2k MUL2 SUB2
118 109
 		DUP2 #000a DIV2 ,digit JSR
119
-		#000a MOD2 ,digit JSR
110
+		#000a DIV2k MUL2 SUB2 ,digit JSR
120 111
 
121 112
 	.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
122 113
 
... ...
@@ -223,8 +214,8 @@ JMP2r
223 214
 
224 215
 @update-fps ( -- )
225 216
 	.fps/next LDZ INC .fps/next STZ
226
-	s .fps/second LDZ NEQ JMP JMP2r
227
-	s .fps/second STZ
217
+	.DateTime/second DEI .fps/second LDZ NEQ JMP JMP2r
218
+	.DateTime/second DEI .fps/second STZ
228 219
 	.fps/next LDZ .fps/current STZ
229 220
 
230 221
 	#00 .fps/next STZ