Apple II User Manual

Page of 257
 335  1F41  45 09             EOR M1
 336  1F43  30 04             BMI RTS1     YES,RETURN WITH MANT1 NORMALIZED
 337  1F45  A5 08             LDA X1       EXP1 ZERO?
 338  1F47  D0 ED             BNE NORM1    NO, CONTINUE NORMALIZING
 339  1F49  60         RTS1   RTS          RETURN
 340                   *
 341                   *
 342                   *     EXP/MANT2-EXP/MANT1 RESULT IN EXP/MANT1
 343                   *
 344  1F4A  20 8F 1F   FSUB   JSR FCOMPL   CMPL MANT1 CLEARS CARRY UNLESS ZERO
 345  1F4D  20 5D 1F   SWPALG JSR ALGNSW   RIGHT SHIFT MANT1 OR SWAP WITH MANT2 ON CARRY
 346                   *
 347                   *     ADD EXP/MANT1 AND EXP/MANT2 RESULT IN EXP/MANT1
 348                   *
 349  1F50  A5 04      FADD   LDA X2
 350  1F52  C5 08             CMP X1       COMPARE EXP1 WITH EXP2
 351  1F54  D0 F7             BNE SWPALG   IF UNEQUAL, SWAP ADDENDS OR ALIGN MANTISSAS
 352  1F56  20 00 1F          JSR ADD      ADD ALIGNED MANTISSAS
 353  1F59  50 E3      ADDEND BVC NORM     NO OVERFLOW, NORMALIZE RESULTS
 354  1F5B  70 05             BVS RTLOG    OV: SHIFT MANT1 RIGHT. NOTE CARRY IS CORRECT
SIGN
 355  1F5D  90 BD      ALGNSW BCC SWAP     SWAP IF CARRY CLEAR, ELSE SHIFT RIGHT ARITH.
 356  1F5F  A5 09      RTAR   LDA M1       SIGN OF MANT1 INTO CARRY FOR
 357  1F61  0A                ASL          RIGHT ARITH SHIFT
 358  1F62  E6 08      RTLOG  INC X1       INCR EXP1 TO COMPENSATE FOR RT SHIFT
 359  1F64  F0 7E             BEQ OVFL     EXP1 OUT OF RANGE.
 360  1F66  A2 FA      RTLOG1 LDX =$FA     INDEX FOR 6 BYTE RIGHT SHIFT
 361  1F68  A9 80      ROR1   LDA =$80
 362  1F6A  B0 01             BCS ROR2
 363  1F6C  0A                ASL
 364  1F6D  56 0F      ROR2   LSR E+3,X    SIMULATE ROR E+3,X
 365  1F6F  15 0F             ORA E+3,X
 366  1F71  95 0F             STA E+3,X
 367  1F73  E8                INX          NEXT BYTE OF SHIFT
 368  1F74  D0 F2             BNE ROR1     LOOP UNTIL DONE
 369  1F76  60                RTS          RETURN
 370                   *
 371                   *
 372                   *     EXP/MANT1 X EXP/MANT2 RESULT IN EXP/MANT1
 373                   *
 374  1F77  20 0D 1F   FMUL   JSR MD1      ABS. VAL OF MANT1, MANT2
 375  1F7A  65 08             ADC X1       ADD EXP1 TO EXP2 FOR PRODUCT EXPONENT
 376  1F7C  20 CD 1F          JSR MD2      CHECK PRODUCT EXP AND PREPARE FOR MUL
 377  1F7F  18                CLC          CLEAR CARRY
 378  1F80  20 66 1F   MUL1   JSR RTLOG1   MANT1 AND E RIGHT.(PRODUCT AND MPLIER)
 379  1F83  90 03             BCC MUL2     IF CARRY CLEAR, SKIP PARTIAL PRODUCT
 380  1F85  20 00 1F          JSR ADD      ADD MULTIPLICAN TO PRODUCT
 381  1F88  88         MUL2   DEY          NEXT MUL ITERATION
 382  1F89  10 F5             BPL MUL1     LOOP UNTIL DONE
 383  1F8B  46 03      MDEND  LSR SIGN     TEST SIGN (EVEN/ODD)
 384  1F8D  90 AF      NORMX  BCC NORM     IF EXEN, NORMALIZE PRODUCT, ELSE COMPLEMENT
 385  1F8F  38         FCOMPL SEC          SET CARRY FOR SUBTRACT
 386  1F90  A2 03             LDX =$03     INDEX FOR 3 BYTE SUBTRACTION
 387  1F92  A9 00      COMPL1 LDA =$00     CLEAR A
 388  1F94  F5 08             SBC X1,X     SUBTRACT BYTE OF EXP1
 389  1F96  95 08             STA X1,X     RESTORE IT
 390  1F98  CA                DEX          NEXT MORE SIGNIFICANT BYTE
 391  1F99  D0 F7             BNE COMPL1   LOOP UNTIL DONE
 392  1F9B  F0 BC             BEQ ADDEND   NORMALIZE (OR SHIFT RIGHT IF OVERFLOW)
 393                   *
 394                   *
 395                   *     EXP/MANT2 / EXP/MANT1 RESULT IN EXP/MANT1