Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.35 KB | None | 0 0
  1. Apple II Reference Manual (Red Book), January 1978, pages 94-95.
  2.  
  3. ***********************
  4. * *
  5. * APPLE-II FLOATING *
  6. * POINT ROUTINES *
  7. * *
  8. * COPYRIGHT 1977 BY *
  9. * APPLE COMPUTER INC. *
  10. * *
  11. * ALL RIGHTS RESERVED *
  12. * *
  13. * S. WOZNIAK *
  14. * *
  15. ***********************
  16. TITLE "FLOATING POINT ROUTINES"
  17. SIGN EPZ $F3
  18. X2 EPZ $F4
  19. M2 EPZ $F5
  20. X1 EPZ $F8
  21. M1 EPZ $F9
  22. E EPZ $FC
  23. OVLOC EQU $3F5
  24. ORG $F425
  25. F425: 18 ADD CLC CLEAR CARRY
  26. F426: A2 02 LDX #$2 INDEX FOR 3-BYTE ADD.
  27. F428: B5 F9 ADD1 LDA M1,X
  28. F42A: 75 F5 ADC M2,X ADD A BYTE OF MANT2 TO MANT1
  29. F42C: 95 F9 STA M1,X
  30. F42E: CA DEX INDEX TO NEXT MORE SIGNIF. BYTE.
  31. F42F: 10 F7 BPL ADD1 LOOP UNTIL DONE.
  32. F431: 60 RTS RETURN
  33. F432: 06 F3 MD1 ASL SIGN CLEAR LSB OF SIGN.
  34. F434: 20 37 F4 JSR ABSWAP ABS VAL OF M1, THEN SWAP WITH M2
  35. F437: 24 F9 ABSWAP BIT M1 MANT1 NEGATIVE?
  36. F439: 10 05 BPL ABSWAP1 NO, SWAP WITH MANT2 AND RETURN.
  37. F43B: 20 A4 F4 JSR FCOMPL YES, COMPLEMENT IT.
  38. F43E: E6 F3 INC SIGN INCR SIGN, COMPLEMENTING LSB.
  39. F440: 38 ABSWAP1 SEC SET CARRY FOR RETURN TO MUL/DIV.
  40. F441: A2 04 SWAP LDX #$4 INDEX FOR 4 BYTE SWAP.
  41. F443: 94 FB SWAP1 STY E-1,X
  42. F445: B5 F7 LDA X1-1,X SWAP A BYTE OF EXP/MANT1 WITH
  43. F447: B4 F3 LDY X2-1,X EXP/MANT2 AND LEAVE A COPY OF
  44. F449: 94 F7 STY X1-1,X MANT1 IN E (3 BYTES). E+3 USED
  45. F44B: 95 F3 STA X2-1,X
  46. F44D: CA DEX ADVANCE INDEX TO NEXT BYTE
  47. F44E: D0 F3 BNE SWAP1 LOOP UNTIL DONE.
  48. F450: 60 RTS RETURN
  49. F451: A9 8E FLOAT LDA #$8E INIT EXP1 TO 14,
  50. F453: 85 F8 STA X1 THEN NORMALIZE TO FLOAT.
  51. F455: A5 F9 NORM1 LDA M1 HIGH-ORDER MANT1 BYTE.
  52. F457: C9 C0 CMP #$C0 UPPER TWO BITS UNEQUAL?
  53. F459: 30 0C BMI RTS1 YES, RETURN WITH MANT1 NORMALIZED
  54. F45B: C6 F8 DEC X1 DECREMENT EXP1.
  55. F45D: 06 FB ASL M1+2
  56. F45F: 26 FA ROL M1+1 SHIFT MANT1 (3 BYTES) LEFT.
  57. F461: 26 F9 ROL M1
  58. F463: A5 F8 NORM LDA X1 EXP1 ZERO?
  59. F465: D0 EE BNE NORM1 NO, CONTINUE NORMALIZING.
  60. F467: 60 RTS1 RTS RETURN.
  61. F468: 20 A4 F4 FSUB JSR FCOMPL CMPL MANT1,CLEARS CARRY UNLESS 0
  62. F46B: 20 7B F4 SWPALGN JSR ALGNSWP RIGHT SHIFT MANT1 OR SWAP WITH
  63. F46E: A5 F4 FADD LDA X2
  64. F470: C5 F8 CMP X1 COMPARE EXP1 WITH EXP2.
  65. F472: D0 F7 BNE SWPALGN IF #,SWAP ADDENDS OR ALIGN MANTS.
  66. F474: 20 25 F4 JSR ADD ADD ALIGNED MANTISSAS.
  67. F477: 50 EA ADDEND BVC NORM NO OVERFLOW, NORMALIZE RESULT.
  68. F479: 70 05 BVS RTLOG OV: SHIFT M1 RIGHT, CARRY INTO SIGN
  69. F47B: 90 C4 ALGNSWP BCC SWAP SWAP IF CARRY CLEAR,
  70. * ELSE SHIFT RIGHT ARITH.
  71. F47D: A5 F9 RTAR LDA M1 SIGN OF MANT1 INTO CARRY FOR
  72. F47F: 0A ASL RIGHT ARITH SHIFT.
  73. F480: E6 F8 RTLOG INC X1 INCR X1 TO ADJUST FOR RIGHT SHIFT
  74. F482: F0 75 BEQ OVFL EXP1 OUT OF RANGE.
  75. F484: A2 FA RTLOG1 LDX #$FA INDEX FOR 6:BYTE RIGHT SHIFT.
  76. F486: 76 FF ROR1 ROR E+3,X
  77. F488: E8 INX NEXT BYTE OF SHIFT.
  78. F489: D0 FB BNE ROR1 LOOP UNTIL DONE.
  79. F48B: 60 RTS RETURN.
  80. F48C: 20 32 F4 FMUL JSR MD1 ABS VAL OF MANT1, MANT2
  81. F48F: 65 F8 ADC X1 ADD EXP1 TO EXP2 FOR PRODUCT EXP
  82. F491: 20 E2 F4 JSR MD2 CHECK PROD. EXP AND PREP. FOR MUL
  83. F494: 18 CLC CLEAR CARRY FOR FIRST BIT.
  84. F495: 20 84 F4 MUL1 JSR RTLOG1 M1 AND E RIGHT (PROD AND MPLIER)
  85. F498: 90 03 BCC MUL2 IF CARRY CLEAR, SKIP PARTIAL PROD
  86. F49A: 20 25 F4 JSR ADD ADD MULTIPLICAND TO PRODUCT.
  87. F49D: 88 MUL2 DEY NEXT MUL ITERATION.
  88. F49E: 10 F5 BPL MUL1 LOOP UNTIL DONE.
  89. F4A0: 46 F3 MDEND LSR SIGN TEST SIGN LSB.
  90. F4A2: 90 BF NORMX BCC NORM IF EVEN,NORMALIZE PROD,ELSE COMP
  91. F4A4: 38 FCOMPL SEC SET CARRY FOR SUBTRACT.
  92. F4A5: A2 03 LDX #$3 INDEX FOR 3 BYTE SUBTRACT.
  93. F4A7: A9 00 COMPL1 LDA #$0 CLEAR A.
  94. F4A9: F5 F8 SBC X1,X SUBTRACT BYTE OF EXP1.
  95. F4AB: 95 F8 STA X1,X RESTORE IT.
  96. F4AD: CA DEX NEXT MORE SIGNIFICANT BYTE.
  97. F4AE: D0 F7 BNE COMPL1 LOOP UNTIL DONE.
  98. F4B0: F0 C5 BEQ ADDEND NORMALIZE (OR SHIFT RT IF OVFL).
  99. F4B2: 20 32 F4 FDIV JSR MD1 TAKE ABS VAL OF MANT1, MANT2.
  100. F4B5: E5 F8 SBC X1 SUBTRACT EXP1 FROM EXP2.
  101. F4B7: 20 E2 F4 JSR MD2 SAVE AS QUOTIENT EXP.
  102. F4BA: 38 DIV1 SEC SET CARRY FOR SUBTRACT.
  103. F4BB: A2 02 LDX #$2 INDEX FOR 3-BYTE SUBTRACTION.
  104. F4BD: B5 F5 DIV2 LDA M2,X
  105. F4BF: F5 FC SBC E,X SUBTRACT A BYTE OF E FROM MANT2.
  106. F4C1: 48 PHA SAVE ON STACK.
  107. F4C2: CA DEX NEXT MORE SIGNIFICANT BYTE.
  108. F4C3: 10 F8 BPL DIV2 LOOP UNTIL DONE.
  109. F4C5: A2 FD LDX #$FD INDEX FOR 3-BYTE CONDITIONAL MOVE
  110. F4C7: 68 DIV3 PLA PULL BYTE OF DIFFERENCE OFF STACK
  111. F4C8: 90 02 BCC DIV4 IF M2<E THEN DON'T RESTORE M2.
  112. F4CA: 95 F8 STA M2+3,X
  113. F4CC: E8 DIV4 INX NEXT LESS SIGNIFICANT BYTE.
  114. F4CD: D0 F8 BNE DIV3 LOOP UNTIL DONE.
  115. F4CF: 26 FB ROL M1+2
  116. F4D1: 26 FA ROL M1+1 ROLL QUOTIENT LEFT, CARRY INTO LSB
  117. F4D3: 26 F9 ROL M1
  118. F4D5: 06 F7 ASL M2+2
  119. F4D7: 26 F6 ROL M2+1 SHIFT DIVIDEND LEFT
  120. F4D9: 26 F5 ROL M2
  121. F4DB: B0 1C BCS OVFL OVFL IS DUE TO UNNORMED DIVISOR
  122. F4DD: 88 DEY NEXT DIVIDE ITERATION.
  123. F4DE: D0 DA BNE DIV1 LOOP UNTIL DONE 23 ITERATIONS.
  124. F4E0: F0 BE BEQ MDEND NORM. QUOTIENT AND CORRECT SIGN.
  125. F4E2: 86 FB MD2 STX M1+2
  126. F4E4: 86 FA STX M1+1 CLEAR MANT1 (3 BYTES) FOR MUL/DIV.
  127. F4E6: 86 F9 STX M1
  128. F4E8: B0 0D BCS OVCHK IF CALC. SET CARRY,CHECK FOR OVFL
  129. F4EA: 30 04 BMI MD3 IF NEG THEN NO UNDERFLOW.
  130. F4EC: 68 PLA POP ONE RETURN LEVEL.
  131. F4ED: 68 PLA
  132. F4EE: 90 B2 BCC NORMX CLEAR X1 AND RETURN.
  133. F4F0: 49 80 MD3 EOR #$80 COMPLEMENT SIGN BIT OF EXPONENT.
  134. F4F2: 85 F8 STA X1 STORE IT.
  135. F4F4: A0 17 LDY #$17 COUNT 24 MUL/23 DIV ITERATIONS.
  136. F4F6: 60 RTS RETURN.
  137. F4F7: 10 F7 OVCHK BPL MD3 IF POSITIVE EXP THEN NO OVFL.
  138. F4F9: 4C F5 03 OVFL JMP OVLOC
  139. ORG $F63D
  140. F63D: 20 7D F4 FIX1 JSR RTAR
  141. F640: A5 F8 FIX LDA X1
  142. F642: 10 13 BPL UNDFL
  143. F644: C9 8E CMP #$8E
  144. F646: D0 F5 BNE FIX1
  145. F648: 24 F9 BIT M1
  146. F64A: 10 0A BPL FIXRTS
  147. F64C: A5 FB LDA M1+2
  148. F64E: F0 06 BEQ FIXRTS
  149. F650: E6 FA INC M1+1
  150. F652: D0 02 BNE FIXRTS
  151. F654: E6 F9 INC M1
  152. F656: 60 FIXRTS RTS
  153. F657: A9 00 UNDFL LDA #$0
  154. F659: 85 F9 STA M1
  155. F65B: 85 FA STA M1+1
  156. F65D: 60 RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement