home *** CD-ROM | disk | FTP | other *** search
- ; 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
- ;
-