... | ... |
@@ -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 ,<-lo JCN ( xhi yhi ) |
126 |
- LTH2 RTN |
|
123 |
+ LTH2 JMP2r |
|
127 | 124 |
<-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 ,>-lo JCN ( xhi yhi ) |
134 |
- GTH2 #00 EQU RTN |
|
131 |
+ GTH2 #00 EQU JMP2r |
|
135 | 132 |
>-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 ,>-lo JCN ( xhi yhi ) |
142 |
- GTH2 RTN |
|
139 |
+ GTH2 JMP2r |
|
143 | 140 |
>-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 ,<-lo JCN ( xhi yhi ) |
150 |
- LTH2 #00 EQU RTN |
|
147 |
+ LTH2 #00 EQU JMP2r |
|
151 | 148 |
<-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 ,¬-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 |
¬-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 |