use STH for right shift

This commit is contained in:
~d6 2021-12-28 15:25:26 -05:00
parent 524fec6ed1
commit 28bcf6d413
1 changed files with 15 additions and 19 deletions

View File

@ -130,39 +130,35 @@
( shift right by 0-7 bits ) ( shift right by 0-7 bits )
@right-shift0 ( x** n^ -> x<<n ) @right-shift0 ( x** n^ -> x<<n )
STHk SFT ;sh/z3 STA ( write z3 ) STHk SFT ;sh/z3 STA ( write z3 )
#00 STHkr SFT2 #00 ;sh/z3 LDA ORA2 ;sh/z2 STA2 ( write z2,z3 ) #00 STHkr SFT2 #00 ;sh/z3 LDA ORA2 ;sh/z2 STA2 ( write z2,z3 )
#00 STHkr SFT2 #00 ;sh/z2 LDA ORA2 ;sh/z1 STA2 ( write z1,z2 ) #00 STHkr SFT2 #00 ;sh/z2 LDA ORA2 ;sh/z1 STA2 ( write z1,z2 )
#00 STHr SFT2 #00 ;sh/z1 LDA ORA2 ;sh/z0 STA2 ( write z0,z1 ) #00 STHr SFT2 #00 ;sh/z1 LDA ORA2 ( compute z0,z1 )
;sh/z0 LDA2 ;sh/z2 LDA2 ;sh/z2 LDA2
RTN RTN
( shift right by 8-15 bits ) ( shift right by 8-15 bits )
@right-shift1 ( x** n^ -> x<<n ) @right-shift1 ( x** n^ -> x<<n )
#00 ;sh/z1 STA #0000 ;sh/z2 STA2 #08 SUB STH POP
#08 SUB ;sh/r STA ( n -> r ) STHkr SFT ;sh/z3 STA ( write z3 )
POP #00 STHkr SFT2 #00 ;sh/z3 LDA ORA2 ;sh/z2 STA2 ( write z2,z3 )
;sh/r LDA SFT ;sh/z3 STA ( write z3 ) #00 STHr SFT2 #00 ;sh/z2 LDA ORA2 ( compute z1,z2 )
#00 ;sh/r LDA SFT2 ;sh/z2 LDA2 ORA2 ;sh/z2 STA2 ( write z2,z3 ) #00 TOR ;sh/z3 LDA
#00 ;sh/r LDA SFT2 ;sh/z1 LDA2 ORA2 ;sh/z1 STA2 ( write z1,z2 )
#00 ;sh/z1 LDA ;sh/z2 LDA2
RTN RTN
( shift right by 16-23 bits ) ( shift right by 16-23 bits )
@right-shift2 ( x** n^ -> x<<n ) @right-shift2 ( x** n^ -> x<<n )
#0000 ;sh/z2 STA2 #10 SUB STH POP2
#10 SUB ;sh/r STA ( n -> r ) STHkr SFT ;sh/z3 STA ( write z3 )
POP2 #00 STHr SFT2 #00 ;sh/z3 LDA ORA2 ( compute z2,z3 )
;sh/r LDA SFT ;sh/z3 STA ( write z3 ) #0000 SWP2
#00 ;sh/r LDA SFT2 ;sh/z2 LDA2 ORA2 ;sh/z2 STA2 ( write z2,z3 )
#0000 ;sh/z2 LDA2
RTN RTN
( shift right by 16-23 bits ) ( shift right by 16-23 bits )
@right-shift3 ( x** n^ -> x<<n ) @right-shift3 ( x** n^ -> x<<n )
#18 SUB ;sh/r STA ( n -> r ) #18 SUB STH POP2 POP ( x0 )
POP2 POP #00 SWP #0000 SWP2 ( 00 00 00 x0 ) #00 SWP #0000 SWP2 ( 00 00 00 x0 )
;sh/r LDA SFT STHr SFT
RTN RTN
( shift left, i.e. << ) ( shift left, i.e. << )