home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol022 / sincos.src < prev    next >
Encoding:
Text File  |  1984-04-29  |  4.1 KB  |  382 lines

  1. ;      intrinsic functions for sine and cosine
  2. ;<<<30 JULY 80 - mods to cosine routine>>>
  3. ;
  4.     NAME SINCOS
  5.     ENTRY SIN,L136
  6.     ENTRY COS,L132
  7.     INCLUDE DEFLT.SRC
  8.     INCLUDE FCTMAC.SRC
  9. ;
  10. L136:
  11. ;
  12. ; (*
  13. ;  * intrinsic function for sine
  14. ;  *)
  15. ; function sin( x: real ):real;
  16. ;     const   a1 = 1.5707949;
  17. ;         a3 = -0.64592098;
  18. ;         a5 = 0.07948766;
  19. ;         a7 = -0.004362476;
  20. ;         piu2 = 0.6366197724;    (* 2 / pi *)
  21. ;     var x2: real;
  22. ;         schg: boolean;
  23. ;     begin
  24. FCT375
  25. sin:    ENTR    D,2,5
  26. ;         schg := false;
  27. FCC375
  28.     MOV    -4(IX),A
  29. ;         while x > halfpi do begin
  30. FCT414
  31.     LXI    H,-4
  32.     DADD    S
  33.     SPHL
  34.     XCHG
  35.     PUSH    IX
  36.     POP    H
  37.     LXI    B,8
  38.     DADD    B
  39.     LXI    B,4
  40.     LDIR
  41.     LXI    H,356
  42.     LXI    D,-30739
  43.     PUSH    H
  44.     PUSH    D
  45.     GRET    D,-4
  46.     JNC    FCT413
  47. ;         x := x - pi;
  48.     LXI    H,-4
  49.     DADD    S
  50.     SPHL
  51.     XCHG
  52.     PUSH    IX
  53.     POP    H
  54.     LXI    B,8
  55.     DADD    B
  56.     LXI    B,4
  57.     LDIR
  58.     LXI    H,612
  59.     LXI    D,-30739
  60.     PUSH    H
  61.     PUSH    D
  62.     DSUB    D,-4
  63.     LXI    H,3
  64.     DADD    S
  65.     XCHG
  66.     PUSH    IX
  67.     POP    H
  68.     LXI    B,11
  69.     DADD    B
  70.     XCHG
  71.     LXI    B,4
  72.     LDDR
  73.     POP    H
  74.     POP    H
  75. ;         schg := not schg
  76. ;         end;
  77.     CMP    -4(IX)
  78.     JRC    FCT431
  79. FCT430
  80. FCT432    EQU  FCT430
  81. FCT435    EQU  FCT432
  82.     INR    A
  83. FCT431
  84.     MOV    L,A
  85.     XRA    A
  86.     MOV    H,A
  87.     MOV    -4(IX),L
  88.     JMP    FCT414
  89. FCT413
  90. ;         while x <= -halfpi do begin
  91. FCT438
  92.     LXI    H,-4
  93.     DADD    S
  94.     SPHL
  95.     XCHG
  96.     PUSH    IX
  97.     POP    H
  98.     LXI    B,8
  99.     DADD    B
  100.     LXI    B,4
  101.     LDIR
  102.     LXI    H,484
  103.     LXI    D,-30739
  104.     PUSH    H
  105.     PUSH    D
  106.     LE    D,-4
  107.     JNC    FCT437
  108. ;         x := x + pi;
  109.     LXI    H,-4
  110.     DADD    S
  111.     SPHL
  112.     XCHG
  113.     PUSH    IX
  114.     POP    H
  115.     LXI    B,8
  116.     DADD    B
  117.     LXI    B,4
  118.     LDIR
  119.     LXI    H,612
  120.     LXI    D,-30739
  121.     PUSH    H
  122.     PUSH    D
  123.     DADD    D,-4
  124.     LXI    H,3
  125.     DADD    S
  126.     XCHG
  127.     PUSH    IX
  128.     POP    H
  129.     LXI    B,11
  130.     DADD    B
  131.     XCHG
  132.     LXI    B,4
  133.     LDDR
  134.     POP    H
  135.     POP    H
  136. ;         schg := not schg
  137. ;         end;
  138.     CMP    -4(IX)
  139.     JRC    FCT455
  140. FCT454
  141. FCT456    EQU  FCT454
  142. FCT459    EQU  FCT456
  143.     INR    A
  144. FCT455
  145.     MOV    L,A
  146.     XRA    A
  147.     MOV    H,A
  148.     MOV    -4(IX),L
  149.     JMP    FCT438
  150. FCT437
  151. ;     x := x * piu2;
  152.     LXI    H,-4
  153.     DADD    S
  154.     SPHL
  155.     XCHG
  156.     PUSH    IX
  157.     POP    H
  158.     LXI    B,8
  159.     DADD    B
  160.     LXI    B,4
  161.     LDIR
  162.     LXI    H,81
  163.     LXI    D,31937
  164.     PUSH    H
  165.     PUSH    D
  166.     MULT    D,-4
  167.     LXI    H,3
  168.     DADD    S
  169.     XCHG
  170.     PUSH    IX
  171.     POP    H
  172.     LXI    B,11
  173.     DADD    B
  174.     XCHG
  175.     LXI    B,4
  176.     LDDR
  177.     POP    H
  178.     POP    H
  179. ;     x2 := x * x;
  180.     LXI    H,-4
  181.     DADD    S
  182.     SPHL
  183.     XCHG
  184.     PUSH    IX
  185.     POP    H
  186.     LXI    B,8
  187.     DADD    B
  188.     LXI    B,4
  189.     LDIR
  190.     LXI    H,-4
  191.     DADD    S
  192.     SPHL
  193.     XCHG
  194.     PUSH    IX
  195.     POP    H
  196.     LXI    B,8
  197.     DADD    B
  198.     LXI    B,4
  199.     LDIR
  200.     MULT    D,-4
  201.     LXI    H,3
  202.     DADD    S
  203.     XCHG
  204.     PUSH    IX
  205.     POP    H
  206.     XCHG
  207.     LXI    B,4
  208.     LDDR
  209.     POP    H
  210.     POP    H
  211. ;     x := (((a7*x2 + a5)*x2 + a3)*x2 + a1)*x;
  212.     LXI    H,-1593
  213.     LXI    D,31116
  214.     PUSH    H
  215.     PUSH    D
  216.     LXI    H,-4
  217.     DADD    S
  218.     SPHL
  219.     XCHG
  220.     PUSH    IX
  221.     POP    H
  222.     DCX    H
  223.     DCX    H
  224.     DCX    H
  225.     LXI    B,4
  226.     LDIR
  227.     MULT    D,-4
  228.     LXI    H,-687
  229.     LXI    D,25910
  230.     PUSH    H
  231.     PUSH    D
  232.     DADD    D,-4
  233.     LXI    H,-4
  234.     DADD    S
  235.     SPHL
  236.     XCHG
  237.     PUSH    IX
  238.     POP    H
  239.     DCX    H
  240.     DCX    H
  241.     DCX    H
  242.     LXI    B,4
  243.     LDIR
  244.     MULT    D,-4
  245.     LXI    H,210
  246.     LXI    D,-21111
  247.     PUSH    H
  248.     PUSH    D
  249.     DADD    D,-4
  250.     LXI    H,-4
  251.     DADD    S
  252.     SPHL
  253.     XCHG
  254.     PUSH    IX
  255.     POP    H
  256.     DCX    H
  257.     DCX    H
  258.     DCX    H
  259.     LXI    B,4
  260.     LDIR
  261.     MULT    D,-4
  262.     LXI    H,356
  263.     LXI    D,-30745
  264.     PUSH    H
  265.     PUSH    D
  266.     DADD    D,-4
  267.     LXI    H,-4
  268.     DADD    S
  269.     SPHL
  270.     XCHG
  271.     PUSH    IX
  272.     POP    H
  273.     LXI    B,8
  274.     DADD    B
  275.     LXI    B,4
  276.     LDIR
  277.     MULT    D,-4
  278.     LXI    H,3
  279.     DADD    S
  280.     XCHG
  281.     PUSH    IX
  282.     POP    H
  283.     LXI    B,11
  284.     DADD    B
  285.     XCHG
  286.     LXI    B,4
  287.     LDDR
  288.     POP    H
  289.     POP    H
  290. ;         if schg then x := -x;
  291.     CMP    -4(IX)
  292.     JNC    FCT494
  293.     LXI    H,-4
  294.     DADD    S
  295.     SPHL
  296.     XCHG
  297.     PUSH    IX
  298.     POP    H
  299.     LXI    B,8
  300.     DADD    B
  301.     LXI    B,4
  302.     LDIR
  303.     NEGT    E
  304.     LXI    H,3
  305.     DADD    S
  306.     XCHG
  307.     PUSH    IX
  308.     POP    H
  309.     LXI    B,11
  310.     DADD    B
  311.     XCHG
  312.     LXI    B,4
  313.     LDDR
  314.     POP    H
  315.     POP    H
  316. FCT494
  317. ;         sin := x;
  318.     LXI    H,-4
  319.     DADD    S
  320.     SPHL
  321.     XCHG
  322.     PUSH    IX
  323.     POP    H
  324.     LXI    B,8
  325.     DADD    B
  326.     LXI    B,4
  327.     LDIR
  328.     LXI    H,3
  329.     DADD    S
  330.     XCHG
  331.     PUSH    IX
  332.     POP    H
  333.     LXI    B,15
  334.     DADD    B
  335.     XCHG
  336.     LXI    B,4
  337.     LDDR
  338.     POP    H
  339.     POP    H
  340. ;         end;
  341.     EXIT    D,4
  342. ; (*
  343. ;  * intrinsic function for cosine
  344. ;  *)
  345. ; function cos( x: real ):real;
  346. ;     begin
  347. FCT513
  348. L132:
  349. cos:    ENTR    D,2,5
  350. ;     cos := sin( x + halfpi )
  351.     LXI    H,-4
  352.     DADD    S
  353.     SPHL
  354.     XCHG
  355.     PUSH    IX
  356.     POP    H
  357.     LXI    B,8
  358.     DADD    B
  359.     LXI    B,4
  360.     LDIR
  361.     LXI    H,356
  362.     LXI    D,-30739
  363.     PUSH    H
  364.     PUSH    D
  365.     DADD    D,-4
  366.     lxi    h,3
  367.     dadd    s
  368.     xchg
  369.     push    ix
  370.     pop    h
  371.     lxi    b,11
  372.     dadd    b
  373.     xchg
  374.     lxi    b,4
  375.     lddr
  376.     pop    h
  377.     pop    h
  378. ;         end;
  379.     JMP    FCC375
  380. ;
  381.