diff --git a/math32.tal b/math32.tal index fad17a1..28e76b1 100644 --- a/math32.tal +++ b/math32.tal @@ -166,11 +166,11 @@ COMPLEMENT32 RTN ( temporary registers ) -( used by most operations, except mul32 and div32 ) -@sh [ &x0 $1 &x1 $1 &x2 $1 &x3 $1 - &y0 $1 &y1 $1 &y2 $1 &y3 $1 - &z0 $1 &z1 $1 &z2 $1 &z3 $1 - &a0 $1 &a1 $1 &a2 $2 ] +( shared by most operations, except mul32 and div32 ) +[ @x0 $1 @x1 $1 @x2 $1 @x3 $1 + @y0 $1 @y1 $1 @y2 $1 @y3 $1 + @z0 $1 @z1 $1 @z2 $1 @z3 $1 + @w0 $1 @w1 $1 @w2 $2 ] ( bit shifting ) @@ -184,27 +184,27 @@ ( shift right by 0-7 bits ) @rshift32-0 ( x** n^ -> x< x< x< x< x< x< zhi* zlo* ) - ;sh/y2 STA2 ;sh/y0 STA2 ( save ylo, yhi ) - ;sh/x2 STA2 ;sh/x0 STA2 ( save xlo, xhi ) - #0000 #0000 ;sh/z0 STA2 ;sh/z2 STA2 ( reset zhi, zlo ) + ;y2 STA2 ;y0 STA2 ( save ylo, yhi ) + ;x2 STA2 ;x0 STA2 ( save xlo, xhi ) + #0000 #0000 ;z0 STA2 ;z2 STA2 ( reset zhi, zlo ) ( x3 + y3 => z2z3 ) - #00 ;sh/x3 LDA #00 ;sh/y3 LDA ADD2 ;sh/z2 STA2 + #00 ;x3 LDA #00 ;y3 LDA ADD2 ;z2 STA2 ( x2 + y2 + z2 => z1z2 ) - #00 ;sh/x2 LDA ;sh/z1 LDA2 ADD2 ;sh/z1 STA2 - #00 ;sh/y2 LDA ;sh/z1 LDA2 ADD2 ;sh/z1 STA2 + #00 ;x2 LDA ;z1 LDA2 ADD2 ;z1 STA2 + #00 ;y2 LDA ;z1 LDA2 ADD2 ;z1 STA2 ( x1 + y1 + z1 => z0z1 ) - #00 ;sh/x1 LDA ;sh/z0 LDA2 ADD2 ;sh/z0 STA2 - #00 ;sh/y1 LDA ;sh/z0 LDA2 ADD2 ;sh/z0 STA2 + #00 ;x1 LDA ;z0 LDA2 ADD2 ;z0 STA2 + #00 ;y1 LDA ;z0 LDA2 ADD2 ;z0 STA2 ( x0 + y0 + z0 => z0 ) - ;sh/x0 LDA ;sh/z0 LDA ADD ;sh/z0 STA - ;sh/y0 LDA ;sh/z0 LDA ADD ;sh/z0 STA + ;x0 LDA ;z0 LDA ADD ;z0 STA + ;y0 LDA ;z0 LDA ADD ;z0 STA ( load zhi,zlo ) - ;sh/z0 LDA2 ;sh/z2 LDA2 + ;z0 LDA2 ;z2 LDA2 RTN ( -x ) @@ -302,26 +302,26 @@ ( 16-bit multiplication ) @mul16 ( x* y* -> z** ) - ;sh/y1 STA ;sh/y0 STA ( save ylo, yhi ) - ;sh/x1 STA ;sh/x0 STA ( save xlo, xhi ) - #0000 #00 ;sh/z1 STA2 ;sh/z3 STA ( reset z1,z2,z3 ) - #0000 #00 ;sh/a0 STA2 ;sh/a2 STA ( reset a0,a1,a2 ) + ;y1 STA ;y0 STA ( save ylo, yhi ) + ;x1 STA ;x0 STA ( save xlo, xhi ) + #0000 #00 ;z1 STA2 ;z3 STA ( reset z1,z2,z3 ) + #0000 #00 ;w0 STA2 ;w2 STA ( reset w0,w1,w2 ) ( x1 * y1 => z1z2 ) - #00 ;sh/x1 LDA #00 ;sh/y1 LDA MUL2 ;sh/z2 STA2 + #00 ;x1 LDA #00 ;y1 LDA MUL2 ;z2 STA2 ( x0 * y1 => z0z1 ) - #00 ;sh/x0 LDA #00 ;sh/y1 LDA MUL2 ;sh/z1 LDA2 ADD2 ;sh/z1 STA2 + #00 ;x0 LDA #00 ;y1 LDA MUL2 ;z1 LDA2 ADD2 ;z1 STA2 - ( x1 * y0 => a1a2 ) - #00 ;sh/x1 LDA #00 ;sh/y0 LDA MUL2 ;sh/a1 STA2 + ( x1 * y0 => w1w2 ) + #00 ;x1 LDA #00 ;y0 LDA MUL2 ;w1 STA2 - ( x0 * y0 => a0a1 ) - #00 ;sh/x0 LDA #00 ;sh/y0 LDA MUL2 ;sh/a0 LDA2 ADD2 ;sh/a0 STA2 + ( x0 * y0 => w0w1 ) + #00 ;x0 LDA #00 ;y0 LDA MUL2 ;w0 LDA2 ADD2 ;w0 STA2 ( add z and a<<8 ) - #00 ;sh/z1 LDA2 ;sh/z3 LDA - ;sh/a0 LDA2 ;sh/a2 LDA #00 + #00 ;z1 LDA2 ;z3 LDA + ;w0 LDA2 ;w2 LDA #00 ;add32 JSR2 RTN