VolksForth Math Extension#

for 6502 based systems

\ A SINUS-TABLE               20OCT87RE
\    SINUS-TABLE FROM FD Vol IV/1

| : TABLE    ( VALUES N -)
 CREATE 0 DO , LOOP
 ;CODE       ( N - VALUE)
 SP Ø) LDA  CLC  1 # ADC  .A ASL  TAY
 W )Y LDA  SP X) STA
 INY  W )Y LDA  1 # LDY  SP )Y STA
 NEXT JMP  END-CODE

10000 9998 9994 9986 9976 9962 9945 9925
 9903 9877 9848 9816 9781 9744 9703 9659
 9613 9563 9511 9455 9397 9336 9272 9205
 9135 9063 8988 8910 8829 8746 8660 8572
 8480 8387 8290 8192 8090 7986 7880 7771
 7660 7547 7431 7314 7193 7071 6947 6820
 6691 6561 6428 6293 6157 6018 5878 5736
 5592 5446 5299 5150 5000 4848 4695 4540
 4384 4226 4067 3907 3746 3584 3420 3256
 3090 2924 2756 2588 2419 2250 2079 1908
 1736 1564 1392 1219 1045 0872 0698 0523
 0349 0175 0000

&91 | TABLE SINTABLE

| : S180   ( DEG -- SIN*10000:SIN 0-180)
 DUP &90 >
   IF &180 SWAP - THEN
 SINTABLE ;

: SIN     ( DEG -- SIN*10000)
 &360 MOD DUP 0< IF &360 + THEN
 DUP &180 >
    IF &180 - S180 NEGATE
    ELSE S180 THEN ;

: COS     ( DEG -- COS*10000)
 &360 MOD &90 + SIN ;

: TAN     ( DEG -- TAN*10000)
 DUP SIN SWAP COS ?DUP
   IF &100 SWAP */ ELSE 3 * THEN ;

CODE D2*  ( D1 - D2)
 2 # LDA SETUP JSR
 N 2+ ASL N 3 + ROL  N ROL N 1+ ROL
 SP 2DEC N 3 + LDA SP )Y STA
 N 2+ LDA SP X) STA
 SP 2DEC N 1+ LDA SP )Y STA
 N LDA SP X) STA
 NEXT JMP END-CODE

: DU< &32768 + ROT &32768 + ROT ROT D< ;

| : EASY-BITS  ( N1 -- N2)
 0 DO
  >R D2* D2*  R@ -  DUP 0<
    IF   R@ +   R> 2* 1-
    ELSE        R> 2* 3 +
    THEN 
  LOOP ;

| : 2'S-BIT
 >R D2* DUP 0<
  IF    D2* R@ - R> 1+
  ELSE  D2* R@ 2DUP U<
   IF DROP R> 1-  ELSE -  R> 1+  THEN
  THEN ;

| : 1'S-BIT
 >R DUP 0<
  IF 2DROP R> 1+
  ELSE D2* &32768 R@  DU< 0=
    NEGATE Ò> +
  THEN ;

: SQRT    ( UD1 - U2)
 0 1  8 EASY-BITS
 ROT DROP 6 EASY-BITS
 2'S-BIT 1'S-BIT ;

\ Test
\
\ : XX  
\ &16 * &62500 UM*
\ SQRT 0 <# # # # ASCII . HOLD #S #>
\ TYPE SPACE ;

CODE 100*  ( N1 - N2)
 SP Ø) LDA  N STA  SP )Y LDA  N 1+ STA
 N ASL N 1+ ROL  N ASL N 1+ ROL
 N LDA N 2+ STA  N 1+ LDA N 3 + STA
 N 2+ ASL N 3 + ROL  N 2+ ASL N 3 + ROL 
 N 2+ ASL N 3 + ROL
 CLC N LDA N  2+ ADC N STA
  N 1+ LDA N 3 + ADC N 1+ STA
 N 2+  ASL N 3 + ROL
 CLC N LDA N  2+ ADC  SP X) STA
  N 1+ LDA N 3 + ADC  SP )Y STA
 NEXT JMP END-CODE

LABEL 4/+
 N 7 + LSR N 6 + ROR N 5 + ROR N 4 + ROR
 N 7 + LSR N 6 + ROR N 5 + ROR N 4 + ROR
 CLC N  LDA N 4 + ADC N     STA
  N 1+  LDA N 5 + ADC N 1+  STA
  SP X) LDA N 6 + ADC SP X) STA
  SP )Y LDA N 7 + ADC SP )Y STA  RTS

CODE  100U/  ( U - N)
 N STX  N 4 + STX
 SP X) LDA  .A ASL N 1+  STA  N 5 + STA
 SP )Y LDA  .A ROL SP X) STA  N 6 + STA
 TXA .A ROL        SP )Y STA  N 7 + STA
 4/+ JSR
 N 7 + LSR N 6 + ROR N 5 + ROR N 4 + ROR
 4/+ JSR
 NEXT JMP END-CODE