Apple II User Manual

Page of 257
 279  1ED7  60                RTS          RETURN ANS=(.5+Z/(-Z+D+C2*Z*Z-
B2/(Z*Z+A2))*2**(INT+1)
 280  1ED8  80 5C      L2E    DCM  1.4426950409   LOG BASE 2 OF E
            55 1E
 281  1EDC  86 57      A2     DCM  87.417497202
            6A E1
 282  1EE0  89 4D      B2     DCM  617.9722695
            3F 1D
 283  1EE4  7B 46      C2     DCM  .03465735903
            4A 70
 284  1EE8  83 4F      D      DCM  9.9545957821
            A3 03
 285                   *
 286                   *
 287                   *     BASIC FLOATING POINT ROUTINES
 288                   *
 289  1F00                    ORG $1F00    START OF BASIC FLOATING POINT ROUTINES
 290  1F00  18         ADD    CLC          CLEAR CARRY
 291  1F01  A2 02             LDX =$02     INDEX FOR 3-BYTE ADD
 292  1F03  B5 09      ADD1   LDA M1,X
 293  1F05  75 05             ADC M2,X     ADD A BYTE OF MANT2 TO MANT1
 294  1F07  95 09             STA M1,X
 295  1F09  CA                DEX          ADVANCE INDEX TO NEXT MORE SIGNIF.BYTE
 296  1F0A  10 F7             BPL ADD1     LOOP UNTIL DONE.
 297  1F0C  60                RTS          RETURN
 298  1F0D  06 03      MD1    ASL SIGN     CLEAR LSB OF SIGN
 299  1F0F  20 12 1F          JSR ABSWAP   ABS VAL OF MANT1, THEN SWAP MANT2
 300  1F12  24 09      ABSWAP BIT M1       MANT1 NEG?
 301  1F14  10 05             BPL ABSWP1   NO,SWAP WITH MANT2 AND RETURN
 302  1F16  20 8F 1F          JSR FCOMPL   YES, COMPLIMENT IT.
 303  1F19  E6 03             INC SIGN     INCR SIGN, COMPLEMENTING LSB
 304  1F1B  38         ABSWP1 SEC          SET CARRY FOR RETURN TO MUL/DIV
 305                   *
 306                   *     SWAP EXP/MANT1 WITH EXP/MANT2
 307                   *
 308  1F1C  A2 04      SWAP   LDX =$04     INDEX FOR 4-BYTE SWAP.
 309  1F1E  94 0B      SWAP1  STY E-1,X
 310  1F20  B5 07             LDA X1-1,X   SWAP A BYTE OF EXP/MANT1 WITH
 311  1F22  B4 03             LDY X2-1,X   EXP/MANT2 AND LEAVEA COPY OF
 312  1F24  94 07             STY X1-1,X   MANT1 IN E(3BYTES). E+3 USED.
 313  1F26  95 03             STA X2-1,X
 314  1F28  CA                DEX          ADVANCE INDEX TO NEXT BYTE
 315  1F29  D0 F3             BNE SWAP1    LOOP UNTIL DONE.
 316  1F2B  60                RTS
 317                   *
 318                   *
 319                   *
 320                   *     CONVERT 16 BIT INTEGER IN M1(HIGH) AND M1+1(LOW) TO F.P.
 321                   *     RESULT IN EXP/MANT1.  EXP/MANT2 UNEFFECTED
 322                   *
 323                   *
 324  1F2C  A9 8E      FLOAT  LDA =$8E
 325  1F2E  85 08             STA X1       SET EXPN TO 14 DEC
 326  1F30  A9 00             LDA =0       CLEAR LOW ORDER BYTE
 327  1F32  85 0B             STA M1+2
 328  1F34  F0 08             BEQ NORM     NORMALIZE RESULT
 329  1F36  C6 08      NORM1  DEC X1       DECREMENT EXP1
 330  1F38  06 0B             ASL M1+2
 331  1F3A  26 0A             ROL M1+1     SHIFT MANT1 (3 BYTES) LEFT
 332  1F3C  26 09             ROL M1
 333  1F3E  A5 09      NORM   LDA M1       HIGH ORDER MANT1 BYTE
 334  1F40  0A                ASL          UPPER TWO BITS UNEQUAL?