| ... | ... |
@@ -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 |