Description: Applesoft: Internals--Floating Point Math Package (2 of 3) Header: Applesoft: Internals--Floating Point Math Package (2 of 3) FLOATING POINT REGISTER MOVE ROUTINES MOVFM EAF9 Moves the number in memory Y,A points to into FAC. On exit A and Z reflect FACEXP. MOV2F EB1E Pack FAC and temporarily moves it into register 2. On exit A and Z reflect FACEXP. MOV1F EB21 Pack FAC and moves it temporarily into register 1. On exit A and Z reflect FACEXP. MOVML EB23 Pack FAC and move it into zero page area starting at X. On exit A and Z reflect FACEXP. MOVMF EB2B Pack FAC and move it into memory pointed to by Y,X. On exit A and Z reflect FACEXP. MOVFA EB53 Move ARG into FAC. On exit A and Z reflect FACEXP. MOVAF EB63 Move FAC into ARG. On exit A and Z reflect FACEXP. CONUPK E9E3 Load ARG from memory pointed to by Y,A. On exit A and Z reflect FACEXP. SUMMARY OF MOVES: FAC => (Y,A) EB2B MOVMF FAC => (0,X) EB23 MOVML FAC => TEMP1 EB21 MOV1F FAC => TEMP2 EB1E MOV2F FAC => ARG EB63 MOVAF ARG => FAC EB53 MOVFA (Y,A) => FAC EAF9 MOVFM (Y,A) => ARG E9E3 CONUPK FLOATING POINT OPERATORS The following routines require that A and Z reflect FACEXP. Even though FAC move routines set up A and Z, a LDA \$9D will insure their proper values. FMULT E97F Multiply the FAC by the number in memory pointed to by Y,A. FMULTT E982 Multipy FAC and ARG. On entry A and Z must reflect FACEXP. FDIV EA66 Divide the number in memory pointed to by Y,A by FAC. FDIVT EA69 Divide ARG by FAC. On entry A and Z must reflect FACEXP. FADD E7BE Add the number Y,A points to in memory to FAC. FADDT E7C1 Add FAC and ARG. On entry A and Z must reflect FACEXP. FSUB E7A7 Subtract FAC from the number Y,A points to in memory. FSUBT E7AA Subtract FAC from ARG. On entry A and Z must reflect FACEXP. TRANSCENDENTAL OPERATORS FPWRT EE97 Raise ARG to the FAC power. On entry A and Z must reflect the value of FACEXP. SQR EE8D Takes the square root of FAC LOG E941 Log base e of FAC EXP EF09 Raise e to the FAC power COS EFEA Returns the cosine of the FAC in radians. SIN EFF1 Returns the sine of the FAC in radians. TAN F03A Returns the tangent of the FAC in radians. ATN F09E Returns the inverse-tangent of the FAC in radians. OTHER OPERATORS SGN EB90 Modifies the value of the FAC depending on its value on entry. On exit: FAC = 1 if FAC was greater than 0 FAC = 0 if FAC was equal to 0 FAC = -1 if FAC was less than 0 ABS EBAF Absolute value of FAC. If FAC is less than 0 then FAC = -FAC. INT EC23 Greatest integer value of FAC. Uses QINT and floats the result. RND EFAE Form a pseudo-random number in FAC and update RND at 00C9. SIGN EB82 Set A according to the value of FAC. On exit: A = 1 if FAC is positive A = 0 if FAC = 0 A = FF if FAC is negative FCOMP EBB2 Compare FAC and a packed number in memory pointed to by Y,A. On exit: A = 1 if (Y,A) < FAC A = 0 if (Y,A) = FAC A = FF if (Y,A) > FAC NEGOP EED0 FAC = -FAC FADDH E7A0 Add 1/2 to FAC DIV10 EA55 Divide FAC by 10. Returns positive numbers only. MUL10 EA39 Multiply FAC by 10. Works for both positive and negative numbers. Apple Tech Notes Keywords: