Browse code

(math32.tal) Removed globals

neauoire authored on 08/02/2022 03:35:07
Showing 1 changed files
... ...
@@ -54,9 +54,6 @@
54 54
 (   - mul32 memory, 12 bytes )
55 55
 (   - _divmod32 memory, 16 bytes )
56 56
 
57
-%DEBUG { #ff #0e DEO }
58
-%RTN  { JMP2r }
59
-%TOR { ROT ROT } ( a b c -> c a b )
60 57
 %COMPLEMENT32 { SWP2 #ffff EOR2 SWP2 #ffff EOR2 }
61 58
 %DUP4 { OVR2 OVR2 }
62 59
 %POP4 { POP2 POP2 }
... ...
@@ -74,7 +71,7 @@
74 71
     ,&loop JMP
75 72
     &done
76 73
     POP ( n )
77
-    RTN
74
+    JMP2r
78 75
 
79 76
 @bitcount16 ( x* -> n^ )
80 77
     SWP ( xlo xhi )
... ...
@@ -82,40 +79,40 @@
82 79
     DUP #00 NEQ ( xlo nhi nhi!=0 )
83 80
     ,&hi-set JCN ( xlo nhi )
84 81
     SWP ;bitcount8 JSR2 ADD ( nhi+nlo )
85
-    RTN 
82
+    JMP2r 
86 83
     &hi-set
87 84
     SWP POP #08 ADD ( nhi+8 )
88
-    RTN
85
+    JMP2r
89 86
 
90 87
 @bitcount32 ( x** -> n^ )
91 88
     SWP2 ( xlo* xhi* )
92 89
     ;bitcount16 JSR2 ( xlo* nhi )
93 90
     DUP #00 NEQ ( xlo* nhi nhi!=0 )
94 91
     ,&hi-set JCN ( xlo* nhi )
95
-    TOR ;bitcount16 JSR2 ADD RTN ( nhi+nlo )
92
+    ROT ROT ;bitcount16 JSR2 ADD JMP2r ( nhi+nlo )
96 93
     &hi-set
97
-    TOR POP2 #10 ADD ( nhi+16 )    
98
-    RTN
94
+    ROT ROT POP2 #10 ADD ( nhi+16 )    
95
+    JMP2r
99 96
 
100 97
 ( equality )
101 98
 
102 99
 ( x == y )
103 100
 @eq32 ( xhi* xlo* yhi* ylo* -> bool^ )
104 101
     ROT2 EQU2 STH
105
-    EQU2 STHr AND RTN
102
+    EQU2 STHr AND JMP2r
106 103
 
107 104
 ( x != y )
108 105
 @ne32 ( xhi* xlo* yhi* ylo* -> bool^ )
109 106
     ROT2 NEQ2 STH
110
-    NEQ2 STHr ORA RTN
107
+    NEQ2 STHr ORA JMP2r
111 108
 
112 109
 ( x == 0 )
113 110
 @is-zero32 ( x** -> bool^ )
114
-    ORA2 #0000 EQU2 RTN
111
+    ORA2 #0000 EQU2 JMP2r
115 112
 
116 113
 ( x != 0 )
117 114
 @non-zero32 ( x** -> bool^ )
118
-    ORA2 #0000 NEQ2 RTN
115
+    ORA2 #0000 NEQ2 JMP2r
119 116
 
120 117
 ( comparisons )
121 118
 
... ...
@@ -123,58 +120,58 @@
123 120
 @lt32 ( x** y** -> bool^ )
124 121
     ROT2 SWP2 ( xhi yhi xlo ylo )
125 122
     LTH2 ,&lt-lo JCN ( xhi yhi )
126
-    LTH2 RTN
123
+    LTH2 JMP2r
127 124
     &lt-lo
128
-    GTH2 #00 EQU RTN
125
+    GTH2 #00 EQU JMP2r
129 126
 
130 127
 ( x <= y )
131 128
 @lteq32 ( x** y** -> bool^ )
132 129
     ROT2 SWP2 ( xhi yhi xlo ylo )
133 130
     GTH2 ,&gt-lo JCN ( xhi yhi )
134
-    GTH2 #00 EQU RTN
131
+    GTH2 #00 EQU JMP2r
135 132
     &gt-lo
136
-    LTH2 RTN
133
+    LTH2 JMP2r
137 134
 
138 135
 ( x > y )
139 136
 @gt32 ( x** y** -> bool^ )
140 137
     ROT2 SWP2 ( xhi yhi xlo ylo )
141 138
     GTH2 ,&gt-lo JCN ( xhi yhi )
142
-    GTH2 RTN
139
+    GTH2 JMP2r
143 140
     &gt-lo
144
-    LTH2 #00 EQU RTN
141
+    LTH2 #00 EQU JMP2r
145 142
 
146 143
 ( x > y )
147 144
 @gteq32 ( x** y** -> bool^ )
148 145
     ROT2 SWP2 ( xhi yhi xlo ylo )
149 146
     LTH2 ,&lt-lo JCN ( xhi yhi )
150
-    LTH2 #00 EQU RTN
147
+    LTH2 #00 EQU JMP2r
151 148
     &lt-lo
152
-    GTH2 RTN
149
+    GTH2 JMP2r
153 150
 
154 151
 ( bitwise operations )
155 152
 
156 153
 ( x & y )
157 154
 @and32 ( xhi* xlo* yhi* ylo* -> xhi|yhi* xlo|ylo* )
158
-    ROT2 AND2 STH2 AND2 STH2r RTN
155
+    ROT2 AND2 STH2 AND2 STH2r JMP2r
159 156
 
160 157
 ( x | y )
161 158
 @or32 ( xhi* xlo* yhi* ylo* -> xhi|yhi* xlo|ylo* )
162
-    ROT2 ORA2 STH2 ORA2 STH2r RTN
159
+    ROT2 ORA2 STH2 ORA2 STH2r JMP2r
163 160
 
164 161
 ( x ^ y )
165 162
 @xor32 ( xhi* xlo* yhi* ylo* -> xhi|yhi* xlo|ylo* )
166
-    ROT2 EOR2 STH2 EOR2 STH2r RTN
163
+    ROT2 EOR2 STH2 EOR2 STH2r JMP2r
167 164
 
168 165
 ( ~x )
169 166
 @complement32 ( x** -> ~x** )
170
-    COMPLEMENT32 RTN
167
+    COMPLEMENT32 JMP2r
171 168
 
172 169
 ( temporary registers )
173 170
 ( shared by most operations, except mul32 and div32 )
174
-[ @x0 $1 @x1 $1 @x2 $1 @x3 $1
175
-  @y0 $1 @y1 $1 @y2 $1 @y3 $1
176
-  @z0 $1 @z1 $1 @z2 $1 @z3 $1
177
-  @w0 $1 @w1 $1 @w2 $2 ]
171
+@m32 [ &x0 $1 &x1 $1 &x2 $1 &x3 $1
172
+       &y0 $1 &y1 $1 &y2 $1 &y3 $1
173
+       &z0 $1 &z1 $1 &z2 $1 &z3 $1
174
+       &w0 $1 &w1 $1 &w2 $2 ]
178 175
 
179 176
 ( bit shifting )
180 177
 
... ...
@@ -184,40 +181,40 @@
184 181
     DUP #10 LTH ;rshift32-1 JCN2 ( x n )
185 182
     DUP #18 LTH ;rshift32-2 JCN2 ( x n )
186 183
     ;rshift32-3 JMP2 ( x n )
187
-    RTN
184
+    JMP2r
188 185
 
189 186
 ( shift right by 0-7 bits )
190 187
 @rshift32-0 ( x** n^ -> x<<n )
191
-        STHk  SFT                      ;z3 STA  ( write z3 )
192
-    #00 STHkr SFT2 #00 ;z3 LDA ORA2 ;z2 STA2 ( write z2,z3 )
193
-    #00 STHkr SFT2 #00 ;z2 LDA ORA2 ;z1 STA2 ( write z1,z2 )
194
-    #00 STHr  SFT2 #00 ;z1 LDA ORA2             ( compute z0,z1 )
195
-    ;z2 LDA2
196
-    RTN
188
+        STHk  SFT                      ;m32/z3 STA  ( write z3 )
189
+    #00 STHkr SFT2 #00 ;m32/z3 LDA ORA2 ;m32/z2 STA2 ( write z2,z3 )
190
+    #00 STHkr SFT2 #00 ;m32/z2 LDA ORA2 ;m32/z1 STA2 ( write z1,z2 )
191
+    #00 STHr  SFT2 #00 ;m32/z1 LDA ORA2             ( compute z0,z1 )
192
+    ;m32/z2 LDA2
193
+    JMP2r
197 194
 
198 195
 ( shift right by 8-15 bits )
199 196
 @rshift32-1 ( x** n^ -> x<<n )
200 197
     #08 SUB STH POP 
201
-        STHkr SFT                      ;z3 STA  ( write z3 )
202
-    #00 STHkr SFT2 #00 ;z3 LDA ORA2 ;z2 STA2 ( write z2,z3 )
203
-    #00 STHr  SFT2 #00 ;z2 LDA ORA2             ( compute z1,z2 )
204
-    #00 TOR ;z3 LDA
205
-    RTN
198
+        STHkr SFT                      ;m32/z3 STA  ( write z3 )
199
+    #00 STHkr SFT2 #00 ;m32/z3 LDA ORA2 ;m32/z2 STA2 ( write z2,z3 )
200
+    #00 STHr  SFT2 #00 ;m32/z2 LDA ORA2             ( compute z1,z2 )
201
+    #00 ROT ROT ;m32/z3 LDA
202
+    JMP2r
206 203
 
207 204
 ( shift right by 16-23 bits )
208 205
 @rshift32-2 ( x** n^ -> x<<n )
209 206
     #10 SUB STH POP2
210
-        STHkr SFT                      ;z3 STA ( write z3 )
211
-    #00 STHr  SFT2 #00 ;z3 LDA ORA2            ( compute z2,z3 )
207
+        STHkr SFT                      ;m32/z3 STA ( write z3 )
208
+    #00 STHr  SFT2 #00 ;m32/z3 LDA ORA2            ( compute z2,z3 )
212 209
     #0000 SWP2
213
-    RTN
210
+    JMP2r
214 211
 
215 212
 ( shift right by 16-23 bits )
216 213
 @rshift32-3 ( x** n^ -> x<<n )
217 214
     #18 SUB STH POP2 POP ( x0 )
218 215
     #00 SWP #0000 SWP2 ( 00 00 00 x0 )
219 216
     STHr SFT
220
-    RTN
217
+    JMP2r
221 218
 
222 219
 ( x << n )
223 220
 @lshift32 ( x** n^ -> x<<n )
... ...
@@ -225,70 +222,70 @@
225 222
     DUP #10 LTH ;lshift32-1 JCN2 ( x n )
226 223
     DUP #18 LTH ;lshift32-2 JCN2 ( x n )
227 224
     ;lshift32-3 JMP2 ( x n )
228
-    RTN
225
+    JMP2r
229 226
 
230 227
 ( shift left by 0-7 bits )
231 228
 @lshift32-0 ( x** n^ -> x<<n )
232 229
     #40 SFT STH ( stash n<<4 )
233
-    #00 SWP STHkr SFT2                     ;z2 STA2 ( store z2,z3 )
234
-    #00 SWP STHkr SFT2 #00 ;z2 LDA ORA2 ;z1 STA2 ( store z1,z2 )
235
-    #00 SWP STHkr SFT2 #00 ;z1 LDA ORA2 ;z0 STA2 ( store z0,z1 )
236
-            STHr  SFT      ;z0 LDA ORA              ( calculate z0 )
237
-    ;z1 LDA ;z2 LDA2
238
-    RTN
230
+    #00 SWP STHkr SFT2                     ;m32/z2 STA2 ( store z2,z3 )
231
+    #00 SWP STHkr SFT2 #00 ;m32/z2 LDA ORA2 ;m32/z1 STA2 ( store z1,z2 )
232
+    #00 SWP STHkr SFT2 #00 ;m32/z1 LDA ORA2 ;m32/z0 STA2 ( store z0,z1 )
233
+            STHr  SFT      ;m32/z0 LDA ORA              ( calculate z0 )
234
+    ;m32/z1 LDA ;m32/z2 LDA2
235
+    JMP2r
239 236
 
240 237
 ( shift left by 8-15 bits )
241 238
 @lshift32-1 ( x** n^ -> x<<n )
242 239
     #08 SUB #40 SFT STH ( stash [n-8]<<4 )
243
-    #00 SWP STHkr SFT2                     ;z1 STA2 ( store z1,z2 )
244
-    #00 SWP STHkr SFT2 #00 ;z1 LDA ORA2 ;z0 STA2 ( store z0,z1 )
245
-            STHr  SFT      ;z0 LDA ORA              ( calculate z0 )
240
+    #00 SWP STHkr SFT2                     ;m32/z1 STA2 ( store z1,z2 )
241
+    #00 SWP STHkr SFT2 #00 ;m32/z1 LDA ORA2 ;m32/z0 STA2 ( store z0,z1 )
242
+            STHr  SFT      ;m32/z0 LDA ORA              ( calculate z0 )
246 243
     SWP POP ( x0 unused )
247
-    ;z1 LDA2 #00
248
-    RTN
244
+    ;m32/z1 LDA2 #00
245
+    JMP2r
249 246
 
250 247
 ( shift left by 16-23 bits )
251 248
 @lshift32-2 ( x** n^ -> x<<n )
252 249
     #10 SUB #40 SFT STH ( stash [n-16]<<4 )
253
-    #00 SWP STHkr SFT2                ;z0 STA2 ( store z0,z1 )
254
-            STHr  SFT  ;z0 LDA ORA             ( calculate z0 )
250
+    #00 SWP STHkr SFT2                ;m32/z0 STA2 ( store z0,z1 )
251
+            STHr  SFT  ;m32/z0 LDA ORA             ( calculate z0 )
255 252
     STH POP2 STHr
256
-    ;z1 LDA #0000
257
-    RTN
253
+    ;m32/z1 LDA #0000
254
+    JMP2r
258 255
 
259 256
 ( shift left by 24-31 bits )
260 257
 @lshift32-3 ( x** n^ -> x<<n )
261 258
     #18 SUB #40 SFT ( x0 x1 x2 x3 r=[n-24]<<4 )
262 259
     SFT ( x0 x1 x2 x3<<r )
263 260
     SWP2 POP2 SWP POP #0000 #00
264
-    RTN
261
+    JMP2r
265 262
 
266 263
 ( arithmetic )
267 264
 
268 265
 ( x + y )
269 266
 @add32 ( xhi* xlo* yhi* ylo* -> zhi* zlo* )
270
-    ;y2 STA2 ;y0 STA2 ( save ylo, yhi )
271
-    ;x2 STA2 ;x0 STA2 ( save xlo, xhi )
272
-    #0000 #0000 ;z0 STA2 ;z2 STA2 ( reset zhi, zlo )
267
+    ;m32/y2 STA2 ;m32/y0 STA2 ( save ylo, yhi )
268
+    ;m32/x2 STA2 ;m32/x0 STA2 ( save xlo, xhi )
269
+    #0000 #0000 ;m32/z0 STA2 ;m32/z2 STA2 ( reset zhi, zlo )
273 270
 
274 271
     ( x3 + y3 => z2z3 )
275
-    #00 ;x3 LDA #00 ;y3 LDA ADD2 ;z2 STA2
272
+    #00 ;m32/x3 LDA #00 ;m32/y3 LDA ADD2 ;m32/z2 STA2
276 273
 
277 274
     ( x2 + y2 + z2 => z1z2 )
278
-    #00 ;x2 LDA ;z1 LDA2 ADD2 ;z1 STA2
279
-    #00 ;y2 LDA ;z1 LDA2 ADD2 ;z1 STA2
275
+    #00 ;m32/x2 LDA ;m32/z1 LDA2 ADD2 ;m32/z1 STA2
276
+    #00 ;m32/y2 LDA ;m32/z1 LDA2 ADD2 ;m32/z1 STA2
280 277
 
281 278
     ( x1 + y1 + z1 => z0z1 )
282
-    #00 ;x1 LDA ;z0 LDA2 ADD2 ;z0 STA2
283
-    #00 ;y1 LDA ;z0 LDA2 ADD2 ;z0 STA2
279
+    #00 ;m32/x1 LDA ;m32/z0 LDA2 ADD2 ;m32/z0 STA2
280
+    #00 ;m32/y1 LDA ;m32/z0 LDA2 ADD2 ;m32/z0 STA2
284 281
 
285 282
     ( x0 + y0 + z0 => z0 )
286
-    ;x0 LDA ;z0 LDA ADD ;z0 STA
287
-    ;y0 LDA ;z0 LDA ADD ;z0 STA
283
+    ;m32/x0 LDA ;m32/z0 LDA ADD ;m32/z0 STA
284
+    ;m32/y0 LDA ;m32/z0 LDA ADD ;m32/z0 STA
288 285
 
289 286
     ( load zhi,zlo )
290
-    ;z0 LDA2 ;z2 LDA2
291
-    RTN
287
+    ;m32/z0 LDA2 ;m32/z2 LDA2
288
+    JMP2r
292 289
 
293 290
 ( -x )
294 291
 @negate32 ( x** -> -x** )
... ...
@@ -298,36 +295,36 @@
298 295
     ,&done JCN ( xlo non-zero => don't inc hi )
299 296
     SWP2 INC2 SWP2 ( -xhi -xlo )
300 297
     &done
301
-    RTN
298
+    JMP2r
302 299
 
303 300
 ( x - y )
304 301
 @sub32 ( x** y** -> z** )
305
-    ;negate32 JSR2 ;add32 JSR2 RTN
302
+    ;negate32 JSR2 ;add32 JSR2 JMP2r
306 303
 
307 304
 ( 16-bit multiplication )
308 305
 @mul16 ( x* y* -> z** )
309
-    ;y1 STA ;y0 STA ( save ylo, yhi )
310
-    ;x1 STA ;x0 STA ( save xlo, xhi )
311
-    #0000 #00 ;z1 STA2 ;z3 STA ( reset z1,z2,z3 )
312
-    #0000 #00 ;w0 STA2 ;w2 STA ( reset w0,w1,w2 )
306
+    ;m32/y1 STA ;m32/y0 STA ( save ylo, yhi )
307
+    ;m32/x1 STA ;m32/x0 STA ( save xlo, xhi )
308
+    #0000 #00 ;m32/z1 STA2 ;m32/z3 STA ( reset z1,z2,z3 )
309
+    #0000 #00 ;m32/w0 STA2 ;m32/w2 STA ( reset w0,w1,w2 )
313 310
 
314 311
     ( x1 * y1 => z1z2 )
315
-    #00 ;x1 LDA #00 ;y1 LDA MUL2 ;z2 STA2
312
+    #00 ;m32/x1 LDA #00 ;m32/y1 LDA MUL2 ;m32/z2 STA2
316 313
 
317 314
     ( x0 * y1 => z0z1 )
318
-    #00 ;x0 LDA #00 ;y1 LDA MUL2 ;z1 LDA2 ADD2 ;z1 STA2
315
+    #00 ;m32/x0 LDA #00 ;m32/y1 LDA MUL2 ;m32/z1 LDA2 ADD2 ;m32/z1 STA2
319 316
 
320 317
     ( x1 * y0 => w1w2 )
321
-    #00 ;x1 LDA #00 ;y0 LDA MUL2 ;w1 STA2
318
+    #00 ;m32/x1 LDA #00 ;m32/y0 LDA MUL2 ;m32/w1 STA2
322 319
 
323 320
     ( x0 * y0 => w0w1 )
324
-    #00 ;x0 LDA #00 ;y0 LDA MUL2 ;w0 LDA2 ADD2 ;w0 STA2
321
+    #00 ;m32/x0 LDA #00 ;m32/y0 LDA MUL2 ;m32/w0 LDA2 ADD2 ;m32/w0 STA2
325 322
 
326 323
     ( add z and a<<8 )
327
-    #00 ;z1 LDA2 ;z3 LDA
328
-    ;w0 LDA2 ;w2 LDA #00
324
+    #00 ;m32/z1 LDA2 ;m32/z3 LDA
325
+    ;m32/w0 LDA2 ;m32/w2 LDA #00
329 326
     ;add32 JSR2
330
-    RTN
327
+    JMP2r
331 328
 
332 329
 ( x * y )
333 330
 @mul32 ( x** y** -> z** ) 
... ...
@@ -340,7 +337,7 @@
340 337
     ( [x0*y0]<<32 will completely overflow )
341 338
     ADD2 ,&z0 LDR2 ADD2 ( sum += x0*y1<<16 + x1*y0<<16 )
342 339
     ,&z1 LDR2
343
-    RTN
340
+    JMP2r
344 341
 [ &x0 $2 &x1 $2
345 342
   &y0 $2 &y1 $2
346 343
   &z0 $2 &z1 $2 ]
... ...
@@ -348,18 +345,18 @@
348 345
 @div32 ( x** y** -> q** )
349 346
     ;_divmod32 JSR2
350 347
     ;_divmod32/quo0 LDA2 ;_divmod32/quo1 LDA2
351
-    RTN
348
+    JMP2r
352 349
 
353 350
 @mod32 ( x** y** -> r** )
354 351
     ;_divmod32 JSR2
355 352
     ;_divmod32/rem0 LDA2 ;_divmod32/rem1 LDA2
356
-    RTN
353
+    JMP2r
357 354
 
358 355
 @divmod32 ( x** y** -> q** r** )
359 356
     ;_divmod32 JSR2
360 357
     ;_divmod32/quo0 LDA2 ;_divmod32/quo1 LDA2
361 358
     ;_divmod32/rem0 LDA2 ;_divmod32/rem1 LDA2
362
-    RTN
359
+    JMP2r
363 360
 
364 361
 ( calculate and store x / y and x % y )
365 362
 @_divmod32 ( x** y** -> )
... ...
@@ -372,7 +369,7 @@
372 369
     ,&div0 LDR2 ,&div1 LDR2
373 370
     ;lt32 JSR2 ,&is-zero JCN ,&not-zero JMP
374 371
     &is-zero
375
-    #0000 ,&quo0 STR2 #0000 ,&quo1 STR2 RTN
372
+    #0000 ,&quo0 STR2 #0000 ,&quo1 STR2 JMP2r
376 373
 
377 374
     ( x >= y so the answer is >= 1 )
378 375
     &not-zero
... ...
@@ -412,7 +409,7 @@
412 409
     ,&div0 LDR2 ,&div1 LDR2 #01 ;rshift32 JSR2 ,&div1 STR2 ,&div0 STR2 ( div >>= 1 )
413 410
     ,&cur0 LDR2 ,&cur1 LDR2 #01 ;rshift32 JSR2 ,&cur1 STR2 ,&cur0 STR2 ( cur >>= 1 )
414 411
     ,&cur0 LDR2 ,&cur1 LDR2 ;non-zero32 JSR2 ,&loop JCN ( if cur>0, loop. else we're done )
415
-    RTN
412
+    JMP2r
416 413
 
417 414
 ( greatest common divisor - euclidean algorithm )
418 415
 @gcd32 ( x** y** -> z** )
... ...
@@ -432,4 +429,4 @@
432 429
     ,&loop JMP
433 430
     &done
434 431
     POP4 ( x )
435
-    RTN
432
+    JMP2r