![]() |
Routines |
Prev: 3713 | Up: Map |
The address of this routine is found in the table of addresses. It is called via the calculator literal +39 by the routines at cos and sin.
This subroutine transforms the argument X of SIN X or COS X into a value V.
The subroutine first finds the value Y=X/2π-INT(X/2π+0.5), where -0.5<=Y<0.5.
The subroutine returns with:
In each case, -1<=V<=1 and SIN (πV/2)=SIN X.
|
||||||||
get_argt | 3783 | RST $28 | X | |||||
3784 | DEFB $3D | re_stack: X (in full floating-point form) | ||||||
3785 | DEFB $34 | stk_data: X, 1/2π | ||||||
3786 | DEFB $EE,$22,$F9,$83,$6E | |||||||
378B | DEFB $04 | multiply: X/2π | ||||||
378C | DEFB $31 | duplicate: X/2π, X/2π | ||||||
378D | DEFB $A2 | stk_half: X/2π, X/2π, 0.5 | ||||||
378E | DEFB $0F | addition: X/2π, X/2π+0.5 | ||||||
378F | DEFB $27 | int: X/2π, INT (X/2π+0.5) | ||||||
3790 | DEFB $03 | subtract: X/2π-INT (X/2π+0.5)=Y | ||||||
Note: adding 0.5 and taking INT rounds the result to the nearest integer.
|
||||||||
3791 | DEFB $31 | duplicate: Y, Y | ||||||
3792 | DEFB $0F | addition: 2*Y | ||||||
3793 | DEFB $31 | duplicate: 2*Y, 2*Y | ||||||
3794 | DEFB $0F | addition: 4*Y | ||||||
3795 | DEFB $31 | duplicate: 4*Y, 4*Y | ||||||
3796 | DEFB $2A | abs: 4*Y, ABS (4*Y) | ||||||
3797 | DEFB $A1 | stk_one: 4*Y, ABS (4*Y), 1 | ||||||
3798 | DEFB $03 | subtract: 4*Y, ABS (4*Y)-1=Z | ||||||
3799 | DEFB $31 | duplicate: 4*Y, Z, Z | ||||||
379A | DEFB $37 | greater_0: 4*Y, Z, (1/0) | ||||||
379B | DEFB $C0 | st_mem_0: (mem-0 holds the result of the test) | ||||||
379C | DEFB $00 | jump_true to ZPLUS: 4*Y, Z | ||||||
379D | DEFB $04 | |||||||
379E | DEFB $02 | delete: 4*Y | ||||||
379F | DEFB $38 | end_calc: 4*Y=V (case i) | ||||||
37A0 | RET | Finished. | ||||||
If the jump was made then continue.
|
||||||||
ZPLUS | 37A1 | DEFB $A1 | stk_one: 4*Y, Z, 1 | |||||
37A2 | DEFB $03 | subtract: 4*Y, Z-1 | ||||||
37A3 | DEFB $01 | exchange: Z-1, 4*Y | ||||||
37A4 | DEFB $36 | less_0: Z-1, (1/0) | ||||||
37A5 | DEFB $00 | jump_true to YNEG: Z-1 | ||||||
37A6 | DEFB $02 | |||||||
37A7 | DEFB $1B | negate: 1-Z | ||||||
YNEG | 37A8 | DEFB $38 | end_calc: 1-Z=V (case ii) or Z-1=V (case iii) | |||||
37A9 | RET | Finished. |
Prev: 3713 | Up: Map |