10.07.2015 Views

Uncompressed - The Tech Heap

Uncompressed - The Tech Heap

Uncompressed - The Tech Heap

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

EXTENDED BASIC UNRAVELLED IIAPPENDIX BDISASSEMBLY OF EXTENDED BASIC 1.1ORIGIN:SPECTRAL ASSOCREVISED:12/26/1999 WALTER K ZYDHEK0481 8466 BD B9 B9 JSR LB9B9 SUBTRACT FPA0 FROM (X)0482 * NOW FPA0 = (1-SQR(2)*X)/(1+SQR(2)*X) WHERE X IS ARGUMENT0483 8469 8E 84 1D LDX #L841D POINT X TO TABLE OF COEFFICIENTS0484 846C BD BE F0 JSR LBEF0 EXPAND POLYNOMIAL0485 846F 8E 84 3C LDX #L843C POINT X TO FP VALUE OF (-.5)0486 8472 BD B9 C2 JSR LB9C2 ADD FPA0 TO X0487 8475 35 04 PULS B GET EXPONENT OF ARGUMENT BACK (WITHOUT BIAS)0488 8477 BD BD 99 JSR LBD99 ADD ACCB TO FPA00489 847A 8E 84 41 LDX #L8441 POINT X TO LN(2)0490 847D 7E BA CA JMP LBACA MULTIPLY FPA0 * LN(2)04910492 * SQR0493 8480 BD BC 5F SQR JSR LBC5F MOVE FPA0 TO FPA10494 8483 8E BE C0 LDX #LBEC0 POINT (X) TO FP NUMBER (.5)0495 8486 BD BC 14 JSR LBC14 COPY A PACKED NUMBER FROM (X) TO FPA004960497 * ARITHMETIC OPERATOR FOR EXPONENTIATION JUMPS0498 * HERE. THE FORMULA USED TO EVALUATE EXPONENTIATION0499 * IS A**X=E**(X LN A) = E**(FPA0*LN(FPA1)), E=2.71828180500 8489 27 67 L8489 BEQ EXP DO A NATURAL EXPONENTIATION IF EXPONENT = 00501 848B 4D TSTA *CHECK VALUE BEING EXPONENTIATED0502 848C 26 03 BNE L8491 *AND BRANCH IF IT IS 00503 848E 7E BA 3A JMP LBA3A FPA0=0 IF RAISING ZERO TO A POWER0504 8491 8E 00 4A L8491 LDX #V4A * PACK FPA0 AND SAVE0505 8494 BD BC 35 JSR LBC35 * IT IN FPA5 (ARGUMENT’S EXPONENT)0506 8497 5F CLRB ACCB=DEFAULT RESULT SIGN FLAG; 0=POSITIVE0507 8498 96 61 LDA FP1SGN *CHECK THE SIGN OF ARGUMENT0508 849A 2A 10 BPL L84AC *BRANCH IF POSITIVE0509 849C BD BC EE JSR INT CONVERT EXPONENT INTO AN INTEGER0510 849F 8E 00 4A LDX #V4A POINT X TO FPA5 (ORIGINAL EXPONENT)0511 84A2 96 61 LDA FP1SGN GET MANTISSA SIGN OF FPA1 (ARGUMENT)0512 84A4 BD BC A0 JSR LBCA0 *COMPARE FPA0 TO (X) AND0513 84A7 26 03 BNE L84AC *BRANCH IF NOT EQUAL0514 84A9 43 COMA TOGGLE FPA1 MANTISSA SIGN - FORCE POSITIVE0515 84AA D6 01 LDB CHARAC GET LS BYTE OF INTEGER VALUE OF EXPONENT (RESULT SIGN FLAG)0516 84AC BD BC 4C L84AC JSR LBC4C COPY FPA1 TO FPA0; ACCA = MANTISSA SIGN0517 84AF 34 04 PSHS B PUT RESULT SIGN FLAG ON THE STACK0518 > 84B1 BD 84 46 JSR LOG GET NATURAL LOGARITHM OF FPA00519 84B4 8E 00 4A LDX #V4A POINT (X) TO FPA50520 84B7 BD BA CA JSR LBACA MULTIPLY FPA0 BY FPA50521 84BA 8D 36 BSR EXP CALCULATE E**(FPA0)0522 84BC 35 02 PULS A * GET RESULT SIGN FLAG FROM THE STACK0523 84BE 46 RORA * AND BRANCH IF NEGATIVE0524 84BF 10 25 3A 26 LBCS LBEE9 CHANGE SIGN OF FPA0 MANTISSA0525 84C3 39 RTS05260527 * CORRECTION FACTOR FOR EXPONENTIAL FUNCTION0528 84C4 81 38 AA 3B 29 L84C4 FCB $81,$38,$AA,$3B,$29 1.44269504 ( CF )0529 *0530 * TCHEBYSHEV MODIFIED TAYLOR SERIES COEFFICIENTS FOR E**X0531 *0532 84C9 07 L84C9 FCB $07 EIGHT COEFFICIENTS0533 84CA 71 34 58 3E 56 L84CA FCB $71,$34,$58,$3E,$56 2.14987637E-05: 1/(7!*(CF**7))0534 84CF 74 16 7E B3 1B L84CF FCB $74,$16,$7E,$B3,$1B 1.4352314E-04 : 1/(6!*(CF**6))0535 84D4 77 2F EE E3 85 L84D4 FCB $77,$2F,$EE,$E3,$85 1.34226348E-03: 1/(5!*(CF**5))0536 84D9 7A 1D 84 1C 2A L84D9 FCB $7A,$1D,$84,$1C,$2A 9.61401701E-03: 1/(4!*(CF**4))0537 84DE 7C 63 59 58 0A L84DE FCB $7C,$63,$59,$58,$0A 0.0555051269 : 1/(3!*(CF**3))0538 84E3 7E 75 FD E7 C6 L84E3 FCB $7E,$75,$FD,$E7,$C6 0.240226385 : 1/(2!*(CF**2))0539 84E8 80 31 72 18 10 L84E8 FCB $80,$31,$72,$18,$10 0.693147186 : 1/(1!*(CF**1))0540 84ED 81 00 00 00 00 L84ED FCB $81,$00,$00,$00,$00 1.0541 *0542 * EXP ( E**X)0543 * THE EXPONENTIAL FUNCTION IS EVALUATED BY FIRST MULTIPLYING THE0544 * ARGUMENT BY A CORRECTION FACTOR (CF). AFTER THIS IS DONE, AN0545 * ARGUMENT >= 127 WILL YIELD A ZERO RESULT (NO UNDERFLOW) FOR A0546 * NEGATIVE ARGUMENT OR AN 'OV' (OVERFLOW) ERROR FOR A POSITIVE0547 * ARGUMENT. THE POLYNOMIAL COEFFICIENTS ARE MODIFIED TO REFLECT0548 * THE CF MULTIPLICATION AT THE START OF THE EVALUATION PROCESS.05490550 84F2 8E 84 C4 EXP LDX #L84C4 POINT X TO THE CORRECTION FACTOR0551 84F5 BD BA CA JSR LBACA MULTIPLY FPA0 BY (X)0552 84F8 BD BC 2F JSR LBC2F PACK FPA0 AND STORE IT IN FPA30553 84FB 96 4F LDA FP0EXP *GET EXPONENT OF FPA0 AND0554 84FD 81 88 CMPA #$88 *COMPARE TO THE MAXIMUM VALUE0555 84FF 25 03 BLO L8504 BRANCH IF FPA0 < 1280556 8501 7E BB 5C L8501 JMP LBB5C SET FPA0 = 0 OR ‘OV’ ERROR0557 8504 BD BC EE L8504 JSR INT CONVERT FPA0 TO INTEGER0558 8507 96 01 LDA CHARAC GET LS BYTE OF INTEGER0559 8509 8B 81 ADDA #$81 * WAS THE ARGUMENT =127, IF SO0560 850B 27 F4 BEQ L8501 * THEN ‘OV’ ERROR; THIS WILL ALSO ADD THE $80 BIAS0561 * * REQUIRED WHEN THE NEW EXPONENT IS CALCULATED BELOW0562 850D 4A DECA DECREMENT ONE FROM THE EXPONENT, BECAUSE $81, NOT $80 WAS USED ABOVE0563 850E 34 02 PSHS A SAVE EXPONENT OF INTEGER PORTION ON STACK0564 8510 8E 00 40 LDX #V40 POINT (X) TO FPA30565 8513 BD B9 B9 JSR LB9B9 SUBTRACT FPA0 FROM (X) - GET FRACTIONAL PART OF ARGUMENT0566 8516 8E 84 C9 LDX #L84C9 POINT X TO COEFFICIENTS0567 8519 BD BE FF JSR LBEFF EVALUATE POLYNOMIAL FOR FRACTIONAL PART0568 851C 0F 62 CLR RESSGN FORCE THE MANTISSA TO BE POSITIVE0569 851E 35 02 PULS A GET INTEGER EXPONENT FROM STACK0570 8520 BD BB 48 JSR LBB48 * CALCULATE EXPONENT OF NEW FPA0 BY ADDING THE EXPONENTS OF THE0571 * * INTEGER AND FRACTIONAL PARTS0572 8523 39 RTS05730574 * FIX0575 8524 BD BC 6D FIX JSR LBC6D CHECK STATUS OF FPA00576 8527 2B 03 BMI L852C BRANCH IF FPA0 = NEGATIVEB6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!