;         intrinsic functions for sine and cosine
;<<<30 JULY 80 - mods to cosine routine>>>
;
       NAME SINCOS
       ENTRY SIN,L136
       ENTRY COS,L132
       INCLUDE DEFLT.SRC
       INCLUDE FCTMAC.SRC
;
L136:
;
; (*
;  * intrinsic function for sine
;  *)
; function sin( x: real ):real;
;     const   a1 = 1.5707949;
;           a3 = -0.64592098;
;           a5 = 0.07948766;
;           a7 = -0.004362476;
;           piu2 = 0.6366197724;        (* 2 / pi *)
;     var x2: real;
;         schg: boolean;
;     begin
FCT375
sin:    ENTR    D,2,5
;         schg := false;
FCC375
       MOV     -4(IX),A
;         while x > halfpi do begin
FCT414
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,356
       LXI     D,-30739
       PUSH    H
       PUSH    D
       GRET    D,-4
       JNC     FCT413
;           x := x - pi;
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,612
       LXI     D,-30739
       PUSH    H
       PUSH    D
       DSUB    D,-4
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       LXI     B,11
       DADD    B
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
;           schg := not schg
;           end;
       CMP     -4(IX)
       JRC     FCT431
FCT430
FCT432  EQU  FCT430
FCT435  EQU  FCT432
       INR     A
FCT431
       MOV     L,A
       XRA     A
       MOV     H,A
       MOV     -4(IX),L
       JMP     FCT414
FCT413
;         while x <= -halfpi do begin
FCT438
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,484
       LXI     D,-30739
       PUSH    H
       PUSH    D
       LE      D,-4
       JNC     FCT437
;           x := x + pi;
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,612
       LXI     D,-30739
       PUSH    H
       PUSH    D
       DADD    D,-4
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       LXI     B,11
       DADD    B
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
;           schg := not schg
;           end;
       CMP     -4(IX)
       JRC     FCT455
FCT454
FCT456  EQU  FCT454
FCT459  EQU  FCT456
       INR     A
FCT455
       MOV     L,A
       XRA     A
       MOV     H,A
       MOV     -4(IX),L
       JMP     FCT438
FCT437
;       x := x * piu2;
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,81
       LXI     D,31937
       PUSH    H
       PUSH    D
       MULT    D,-4
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       LXI     B,11
       DADD    B
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
;       x2 := x * x;
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       MULT    D,-4
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
;       x := (((a7*x2 + a5)*x2 + a3)*x2 + a1)*x;
       LXI     H,-1593
       LXI     D,31116
       PUSH    H
       PUSH    D
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       DCX     H
       DCX     H
       DCX     H
       LXI     B,4
       LDIR
       MULT    D,-4
       LXI     H,-687
       LXI     D,25910
       PUSH    H
       PUSH    D
       DADD    D,-4
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       DCX     H
       DCX     H
       DCX     H
       LXI     B,4
       LDIR
       MULT    D,-4
       LXI     H,210
       LXI     D,-21111
       PUSH    H
       PUSH    D
       DADD    D,-4
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       DCX     H
       DCX     H
       DCX     H
       LXI     B,4
       LDIR
       MULT    D,-4
       LXI     H,356
       LXI     D,-30745
       PUSH    H
       PUSH    D
       DADD    D,-4
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       MULT    D,-4
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       LXI     B,11
       DADD    B
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
;         if schg then x := -x;
       CMP     -4(IX)
       JNC     FCT494
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       NEGT    E
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       LXI     B,11
       DADD    B
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
FCT494
;         sin := x;
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,3
       DADD    S
       XCHG
       PUSH    IX
       POP     H
       LXI     B,15
       DADD    B
       XCHG
       LXI     B,4
       LDDR
       POP     H
       POP     H
;         end;
       EXIT    D,4
;
; (*
;  * intrinsic function for cosine
;  *)
; function cos( x: real ):real;
;     begin
FCT513
L132:
cos:    ENTR    D,2,5
;       cos := sin( x + halfpi )
       LXI     H,-4
       DADD    S
       SPHL
       XCHG
       PUSH    IX
       POP     H
       LXI     B,8
       DADD    B
       LXI     B,4
       LDIR
       LXI     H,356
       LXI     D,-30739
       PUSH    H
       PUSH    D
       DADD    D,-4
       lxi     h,3
       dadd    s
       xchg
       push    ix
       pop     h
       lxi     b,11
       dadd    b
       xchg
       lxi     b,4
       lddr
       pop     h
       pop     h
;         end;
       JMP     FCC375
;