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

  1. ; FUNCTION COSINE(X:REAL):REAL;
  2. ; {+++   COSINE ROUTINE, ANGLE "X" MUST BE IN RADIANS   +++}
  3. ; CONST    PI = 3.1415926536;
  4. ;     J = 2;
  5. ; VAR    M,N : INTEGER;
  6. ;     R,S,T,U,V : REAL;
  7.  
  8.  
  9.     NAME COSINE
  10.     ENTRY COSINE
  11.  
  12.  
  13. ;     FUNCTION FIX(Y,P: REAL): REAL;
  14. ;     VAR    SGN : -1..1;
  15. ;     BEGIN
  16. L151
  17.     ENTR    D,3,2
  18. ;       IF Y>0.0 THEN
  19.     LXI    H,-4
  20.     DADD    S
  21.     SPHL
  22.     XCHG
  23.     PUSH    IX
  24.     POP    H
  25.     LXI    B,12
  26.     DADD    B
  27.     LXI    B,4
  28.     LDIR
  29.     MOV    H,A
  30.     MOV    L,A
  31.     MOV    D,A
  32.     MOV    E,A
  33.     PUSH    H
  34.     PUSH    D
  35.     GRET    D,-4
  36. ;         SGN := 1
  37.     JNC    L165
  38. ;       ELSE IF Y=0.0 THEN
  39.     MOV    0(IX),A
  40.     MVI    -1(IX),1
  41.     JMP    L178
  42. L165
  43.     LXI    H,-4
  44.     DADD    S
  45.     SPHL
  46.     XCHG
  47.     PUSH    IX
  48.     POP    H
  49.     LXI    B,12
  50.     DADD    B
  51.     LXI    B,4
  52.     LDIR
  53.     MOV    H,A
  54.     MOV    L,A
  55.     MOV    D,A
  56.     MOV    E,A
  57.     PUSH    H
  58.     PUSH    D
  59.     EQUL    D,-4
  60. ;         SGN := 0
  61.     JNC    L180
  62. ;       ELSE
  63.     MOV    0(IX),A
  64.     MOV    -1(IX),A
  65. ;         SGN := -1;
  66.     JMP    L193
  67. L180
  68.     MVI    0(IX),255
  69.     MVI    -1(IX),255
  70. L193
  71. L178
  72. ;       FIX := SGN * TRUNC(ABS(Y)/P);
  73.     MOV    L,-1(IX)
  74.     MOV    H,0(IX)
  75.     PUSH    H
  76.     LXI    H,-4
  77.     DADD    S
  78.     SPHL
  79.     XCHG
  80.     PUSH    IX
  81.     POP    H
  82.     LXI    B,12
  83.     DADD    B
  84.     LXI    B,4
  85.     LDIR
  86.     CALL    L116
  87.     LXI    H,-4
  88.     DADD    S
  89.     SPHL
  90.     XCHG
  91.     PUSH    IX
  92.     POP    H
  93.     LXI    B,8
  94.     DADD    B
  95.     LXI    B,4
  96.     LDIR
  97.     FDVD    D,-4
  98.     CALL    L129
  99.     POP    H
  100.     MULT    D,0
  101.     CVTF    H
  102.     LXI    H,3
  103.     DADD    S
  104.     XCHG
  105.     PUSH    IX
  106.     POP    H
  107.     LXI    B,19
  108.     DADD    B
  109.     XCHG
  110.     LXI    B,4
  111.     LDDR
  112.     POP    H
  113.     POP    H
  114. ;     END;
  115.     EXIT    D,8
  116. ;
  117. ;
  118. ;
  119. ; BEGIN
  120. L138
  121. cosine: ENTR    D,2,24
  122. ;   R := 0.0;
  123.     MOV    H,A
  124.     MOV    L,A
  125.     MOV    D,A
  126.     MOV    E,A
  127.     PUSH    H
  128.     PUSH    D
  129.     LXI    H,3
  130.     DADD    S
  131.     XCHG
  132.     PUSH    IX
  133.     POP    H
  134.     LXI    B,-4
  135.     DADD    B
  136.     XCHG
  137.     LXI    B,4
  138.     LDDR
  139.     POP    H
  140.     POP    H
  141. ;   IF ABS(X)>PI THEN R := FIX(X,PI);
  142.     LXI    H,-4
  143.     DADD    S
  144.     SPHL
  145.     XCHG
  146.     PUSH    IX
  147.     POP    H
  148.     LXI    B,8
  149.     DADD    B
  150.     LXI    B,4
  151.     LDIR
  152.     CALL    L116
  153.     LXI    H,612
  154.     LXI    D,-30739
  155.     PUSH    H
  156.     PUSH    D
  157.     GRET    D,-4
  158.     JNC    L227
  159.     PUSH    B
  160.     PUSH    B
  161.     LXI    H,-4
  162.     DADD    S
  163.     SPHL
  164.     XCHG
  165.     PUSH    IX
  166.     POP    H
  167.     LXI    B,8
  168.     DADD    B
  169.     LXI    B,4
  170.     LDIR
  171.     LXI    H,612
  172.     LXI    D,-30739
  173.     PUSH    H
  174.     PUSH    D
  175.     CALL    L151    ; FIX(...)
  176.     LXI    H,3
  177.     DADD    S
  178.     XCHG
  179.     PUSH    IX
  180.     POP    H
  181.     LXI    B,-4
  182.     DADD    B
  183.     XCHG
  184.     LXI    B,4
  185.     LDDR
  186.     POP    H
  187.     POP    H
  188. L227
  189. ;   X := X - R * PI;
  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.     LXI    H,-4
  201.     DADD    S
  202.     SPHL
  203.     XCHG
  204.     PUSH    IX
  205.     POP    H
  206.     LXI    B,-7
  207.     DADD    B
  208.     LXI    B,4
  209.     LDIR
  210.     LXI    H,612
  211.     LXI    D,-30739
  212.     PUSH    H
  213.     PUSH    D
  214.     MULT    D,-4
  215.     DSUB    D,-4
  216.     LXI    H,3
  217.     DADD    S
  218.     XCHG
  219.     PUSH    IX
  220.     POP    H
  221.     LXI    B,11
  222.     DADD    B
  223.     XCHG
  224.     LXI    B,4
  225.     LDDR
  226.     POP    H
  227.     POP    H
  228. ;   M := -1;
  229.     MVI    0(IX),255
  230.     MVI    -1(IX),255
  231. ;   N := 0;
  232.     MOV    -2(IX),A
  233.     MOV    -3(IX),A
  234. ;   S := 1.0;
  235.     LXI    H,320
  236.     MOV    D,A
  237.     MOV    E,A
  238.     PUSH    H
  239.     PUSH    D
  240.     LXI    H,3
  241.     DADD    S
  242.     XCHG
  243.     PUSH    IX
  244.     POP    H
  245.     LXI    B,-8
  246.     DADD    B
  247.     XCHG
  248.     LXI    B,4
  249.     LDDR
  250.     POP    H
  251.     POP    H
  252. ;   T := 1.0;
  253.     LXI    H,320
  254.     MOV    D,A
  255.     MOV    E,A
  256.     PUSH    H
  257.     PUSH    D
  258.     LXI    H,3
  259.     DADD    S
  260.     XCHG
  261.     PUSH    IX
  262.     POP    H
  263.     LXI    B,-12
  264.     DADD    B
  265.     XCHG
  266.     LXI    B,4
  267.     LDDR
  268.     POP    H
  269.     POP    H
  270. ;   U := -X * X;
  271.     LXI    H,-4
  272.     DADD    S
  273.     SPHL
  274.     XCHG
  275.     PUSH    IX
  276.     POP    H
  277.     LXI    B,8
  278.     DADD    B
  279.     LXI    B,4
  280.     LDIR
  281.     LXI    H,-4
  282.     DADD    S
  283.     SPHL
  284.     XCHG
  285.     PUSH    IX
  286.     POP    H
  287.     LXI    B,8
  288.     DADD    B
  289.     LXI    B,4
  290.     LDIR
  291.     MULT    D,-4
  292.     NEGT    E
  293.     LXI    H,3
  294.     DADD    S
  295.     XCHG
  296.     PUSH    IX
  297.     POP    H
  298.     LXI    B,-16
  299.     DADD    B
  300.     XCHG
  301.     LXI    B,4
  302.     LDDR
  303.     POP    H
  304.     POP    H
  305. ;   REPEAT
  306. ;     V := S;
  307. L296
  308.     LXI    H,-4
  309.     DADD    S
  310.     SPHL
  311.     XCHG
  312.     PUSH    IX
  313.     POP    H
  314.     LXI    B,-11
  315.     DADD    B
  316.     LXI    B,4
  317.     LDIR
  318.     LXI    H,3
  319.     DADD    S
  320.     XCHG
  321.     PUSH    IX
  322.     POP    H
  323.     LXI    B,-20
  324.     DADD    B
  325.     XCHG
  326.     LXI    B,4
  327.     LDDR
  328.     POP    H
  329.     POP    H
  330. ;     M := M + J; N := N + J;
  331.     MOV    L,-1(IX)
  332.     MOV    H,0(IX)
  333.     INX    H
  334.     INX    H
  335.     MOV    0(IX),H
  336.     MOV    -1(IX),L
  337.     MOV    L,-3(IX)
  338.     MOV    H,-2(IX)
  339.     INX    H
  340.     INX    H
  341.     MOV    -2(IX),H
  342.     MOV    -3(IX),L
  343. ;     T := T*U/(M*N) ;
  344.     LXI    H,-4
  345.     DADD    S
  346.     SPHL
  347.     XCHG
  348.     PUSH    IX
  349.     POP    H
  350.     LXI    B,-15
  351.     DADD    B
  352.     LXI    B,4
  353.     LDIR
  354.     LXI    H,-4
  355.     DADD    S
  356.     SPHL
  357.     XCHG
  358.     PUSH    IX
  359.     POP    H
  360.     LXI    B,-19
  361.     DADD    B
  362.     LXI    B,4
  363.     LDIR
  364.     MULT    D,-4
  365.     MOV    L,-1(IX)
  366.     MOV    H,0(IX)
  367.     MOV    E,-3(IX)
  368.     MOV    D,-2(IX)
  369.     MULT    D,0
  370.     PUSH    H
  371.     CVTF    B
  372.     FDVD    D,-4
  373.     LXI    H,3
  374.     DADD    S
  375.     XCHG
  376.     PUSH    IX
  377.     POP    H
  378.     LXI    B,-12
  379.     DADD    B
  380.     XCHG
  381.     LXI    B,4
  382.     LDDR
  383.     POP    H
  384.     POP    H
  385. ;     S := S + T;
  386.     LXI    H,-4
  387.     DADD    S
  388.     SPHL
  389.     XCHG
  390.     PUSH    IX
  391.     POP    H
  392.     LXI    B,-11
  393.     DADD    B
  394.     LXI    B,4
  395.     LDIR
  396.     LXI    H,-4
  397.     DADD    S
  398.     SPHL
  399.     XCHG
  400.     PUSH    IX
  401.     POP    H
  402.     LXI    B,-15
  403.     DADD    B
  404.     LXI    B,4
  405.     LDIR
  406.     DADD    D,-4
  407.     LXI    H,3
  408.     DADD    S
  409.     XCHG
  410.     PUSH    IX
  411.     POP    H
  412.     LXI    B,-8
  413.     DADD    B
  414.     XCHG
  415.     LXI    B,4
  416.     LDDR
  417.     POP    H
  418.     POP    H
  419. ;   UNTIL (S = V);
  420.     LXI    H,-4
  421.     DADD    S
  422.     SPHL
  423.     XCHG
  424.     PUSH    IX
  425.     POP    H
  426.     LXI    B,-11
  427.     DADD    B
  428.     LXI    B,4
  429.     LDIR
  430.     LXI    H,-4
  431.     DADD    S
  432.     SPHL
  433.     XCHG
  434.     PUSH    IX
  435.     POP    H
  436.     LXI    B,-23
  437.     DADD    B
  438.     LXI    B,4
  439.     LDIR
  440.     EQUL    D,-4
  441.     JNC    L296
  442. ;   IF (TRUNC(R) MOD J<>0) THEN S := -S;
  443.     LXI    H,-4
  444.     DADD    S
  445.     SPHL
  446.     XCHG
  447.     PUSH    IX
  448.     POP    H
  449.     LXI    B,-7
  450.     DADD    B
  451.     LXI    B,4
  452.     LDIR
  453.     CALL    L129
  454.     LXI    H,2
  455.     XCHG
  456.     MMOD    D,0
  457.     MOV    D,A
  458.     MOV    E,A
  459.     DSB1    D,0
  460.     JZ    L347
  461.     LXI    H,-4
  462.     DADD    S
  463.     SPHL
  464.     XCHG
  465.     PUSH    IX
  466.     POP    H
  467.     LXI    B,-11
  468.     DADD    B
  469.     LXI    B,4
  470.     LDIR
  471.     NEGT    E
  472.     LXI    H,3
  473.     DADD    S
  474.     XCHG
  475.     PUSH    IX
  476.     POP    H
  477.     LXI    B,-8
  478.     DADD    B
  479.     XCHG
  480.     LXI    B,4
  481.     LDDR
  482.     POP    H
  483.     POP    H
  484. L347
  485. ;   COSINE := S;
  486.     LXI    H,-4
  487.     DADD    S
  488.     SPHL
  489.     XCHG
  490.     PUSH    IX
  491.     POP    H
  492.     LXI    B,-11
  493.     DADD    B
  494.     LXI    B,4
  495.     LDIR
  496.     LXI    H,3
  497.     DADD    S
  498.     XCHG
  499.     PUSH    IX
  500.     POP    H
  501.     LXI    B,15
  502.     DADD    B
  503.     XCHG
  504.     LXI    B,4
  505.     LDDR
  506.     POP    H
  507.     POP    H
  508. ; END;
  509.     EXIT    D,4
  510.