; FUNCTION COSINE(X:REAL):REAL; ; {+++ COSINE ROUTINE, ANGLE "X" MUST BE IN RADIANS +++} ; CONST PI = 3.1415926536; ; J = 2; ; VAR M,N : INTEGER; ; R,S,T,U,V : REAL; NAME COSINE ENTRY COSINE ; FUNCTION FIX(Y,P: REAL): REAL; ; VAR SGN : -1..1; ; BEGIN L151 ENTR D,3,2 ; IF Y>0.0 THEN LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,12 DADD B LXI B,4 LDIR MOV H,A MOV L,A MOV D,A MOV E,A PUSH H PUSH D GRET D,-4 ; SGN := 1 JNC L165 ; ELSE IF Y=0.0 THEN MOV 0(IX),A MVI -1(IX),1 JMP L178 L165 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,12 DADD B LXI B,4 LDIR MOV H,A MOV L,A MOV D,A MOV E,A PUSH H PUSH D EQUL D,-4 ; SGN := 0 JNC L180 ; ELSE MOV 0(IX),A MOV -1(IX),A ; SGN := -1; JMP L193 L180 MVI 0(IX),255 MVI -1(IX),255 L193 L178 ; FIX := SGN * TRUNC(ABS(Y)/P); MOV L,-1(IX) MOV H,0(IX) PUSH H LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,12 DADD B LXI B,4 LDIR CALL L116 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,8 DADD B LXI B,4 LDIR FDVD D,-4 CALL L129 POP H MULT D,0 CVTF H LXI H,3 DADD S XCHG PUSH IX POP H LXI B,19 DADD B XCHG LXI B,4 LDDR POP H POP H ; END; EXIT D,8 ; ; ; ; BEGIN L138 cosine: ENTR D,2,24 ; R := 0.0; MOV H,A MOV L,A MOV D,A MOV E,A PUSH H PUSH D LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-4 DADD B XCHG LXI B,4 LDDR POP H POP H ; IF ABS(X)>PI THEN R := FIX(X,PI); LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,8 DADD B LXI B,4 LDIR CALL L116 LXI H,612 LXI D,-30739 PUSH H PUSH D GRET D,-4 JNC L227 PUSH B PUSH B 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 CALL L151 ; FIX(...) LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-4 DADD B XCHG LXI B,4 LDDR POP H POP H L227 ; X := X - R * PI; 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,-7 DADD B LXI B,4 LDIR LXI H,612 LXI D,-30739 PUSH H PUSH D MULT D,-4 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 ; M := -1; MVI 0(IX),255 MVI -1(IX),255 ; N := 0; MOV -2(IX),A MOV -3(IX),A ; S := 1.0; LXI H,320 MOV D,A MOV E,A PUSH H PUSH D LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-8 DADD B XCHG LXI B,4 LDDR POP H POP H ; T := 1.0; LXI H,320 MOV D,A MOV E,A PUSH H PUSH D LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-12 DADD B XCHG LXI B,4 LDDR POP H POP H ; U := -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 NEGT E LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-16 DADD B XCHG LXI B,4 LDDR POP H POP H ; REPEAT ; V := S; L296 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-11 DADD B LXI B,4 LDIR LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-20 DADD B XCHG LXI B,4 LDDR POP H POP H ; M := M + J; N := N + J; MOV L,-1(IX) MOV H,0(IX) INX H INX H MOV 0(IX),H MOV -1(IX),L MOV L,-3(IX) MOV H,-2(IX) INX H INX H MOV -2(IX),H MOV -3(IX),L ; T := T*U/(M*N) ; LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-15 DADD B LXI B,4 LDIR LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-19 DADD B LXI B,4 LDIR MULT D,-4 MOV L,-1(IX) MOV H,0(IX) MOV E,-3(IX) MOV D,-2(IX) MULT D,0 PUSH H CVTF B FDVD D,-4 LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-12 DADD B XCHG LXI B,4 LDDR POP H POP H ; S := S + T; LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-11 DADD B LXI B,4 LDIR LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-15 DADD B LXI B,4 LDIR DADD D,-4 LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-8 DADD B XCHG LXI B,4 LDDR POP H POP H ; UNTIL (S = V); LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-11 DADD B LXI B,4 LDIR LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-23 DADD B LXI B,4 LDIR EQUL D,-4 JNC L296 ; IF (TRUNC(R) MOD J<>0) THEN S := -S; LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-7 DADD B LXI B,4 LDIR CALL L129 LXI H,2 XCHG MMOD D,0 MOV D,A MOV E,A DSB1 D,0 JZ L347 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-11 DADD B LXI B,4 LDIR NEGT E LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-8 DADD B XCHG LXI B,4 LDDR POP H POP H L347 ; COSINE := S; LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-11 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 .