Previous File   Multiple Pages   Next File

* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 1

0001 * NAME BASIC-MTHPAK DOC. 70181832000 REV. A 0002 * 0003 * 0004 * DESCRIPTION BASIC-16 ARITHMETIC, CONVERSION, LIBRARY FUNCTION ROUTINES 0005 * 0006 * 0007 * REVISION HISTORY 0008 * REV. DATE ECO NO. 0009 * A RELEASED 0010 * 0011 * 0012 * 0013 * 0014 * 0015 * DOCUMENTATION REFERENCES 0016 * TITLE DOC. NO. 0017 * BASIC-16 USER'S MANUAL 70130072543 0018 * 0019 * 0020 * 0021 * 0022 * 0023 * 0024 * COPYRIGHT 1971 BY HONEYWELL INFORMATION SYSTEMS INC., COMPUTER 0025 * SYSTEMS DIVISION, FRAMINGHAM, MASSACHUSETTS. CONTENTS OF THIS 0026 * PUBLICATION MAY NOT BE REPRODUCED IN ANY FORM, IN WHOLE OR IN 0027 * PART, WITHOUT PERMISSION OF THE COPYRIGHT OWNER. ALL RIGHTS 0028 * RESERVED. 0029 ************************************************************************ 0030 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 2

0031 * 0032 * 0033 SUBR L$22 DOUBLE WORD LOAD 0034 SUBR H$22 DOUBLE WORD STORE 0035 SUBR N$22 TWO'S COMPLIMENT A FLOATING POINT NUMBER 0036 SUBR S$22 FLOATING POINT SUBTRACTION 0037 SUBR A$22 FLOATING POINT ADDITION 0038 SUBR D$22 FLOATING POINT DIVISION 0039 SUBR M$22 FLOATING POINT MULTIPLICATION 0040 SUBR E$22 FLOATING POINT EXPONENTIATION 0041 SUBR M$11 INTEGER MULTIPLY 0042 SUBR FINT INTEGER TO FLOATING POINT CONVERSION 0043 SUBR IFLT FLOATING POINT TO INTEGER CONVERSION 0044 SUBR TINT TEST FOR INTEGER 0045 SUBR SGNF SIGN FUNCTION 0046 SUBR ABSF ABSOLUTE VALUE FUNCTION 0047 SUBR ABS,ABSF 0048 SUBR RNDF RANDOM NUMBER FUNCTION 0049 SUBR INTF GREATEST INTEGER FUNCTION 0050 SUBR LOGF NATURAL LOGARITHM FUNCTION 0051 SUBR ALOG,LOGF 0052 SUBR EXPF NATURAL ANTILOGARITHM FUNCTION 0053 SUBR EXP,EXPF 0054 SUBR SQRF SQUARE ROOT FUNCTION 0055 SUBR SQRT,SQRF 0056 SUBR COSF COSINE FUNCTION 0057 SUBR COS,COSF 0058 SUBR SINF SINE FUNCTION 0059 SUBR SIN,SINF 0060 SUBR TANF TANGENT FUNCTION 0061 SUBR ATNF ARCTANGENT FUNCTION 0062 SUBR ATAN,ATNF 0063 ENT PP12 LAST WORD OF BASIC-MTHPAK 0064 * 0065 * 0066 EXT ERR ERROR REPORTING ROUTINE 0067 EXT M1 0068 EXT FM1 0069 * 0070 * 0071 REL 0072 * 0073 * 0074 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 3

0075 * 0076 * 0077 * SIGN FUNCTION 0078 * 0079 * CALLING SEQUENCE: 0080 * 0081 * JST SGNF 0082 * DAC ARG ADDRESS OF THE ARGUMENT 0083 * ......RETURN RESULT RETURNED IN THE A AND B REGISTERS 0084 * 0085 * 0086 * THE ARGUMENT IS LOADED, AND IF ZERO, THE ROUTINE EXITS WITH 0087 * ZERO. OTHERWISE THE SIGN IS STORED INTO THE C BIT, AND FLOATING 0088 * ONE IS LOADED. IF THE C BIT IS SET, THE A REGISTER IS TWO'S COM- 0089 * PLIMENTED TO GENERATE FLOATING POINT MINUS ONE. 0090 * 0091 * 0092 00000 0 000000 SGNF DAC ** ENTRY 0093 00001 0 02 00000 LDA SGNF LOAD THE ARGUMENT 0094 00002 0 10 00070 JST LARG X 0095 00003 101040 SNZ SKIP IF NON-ZERO 0096 00004 -0 01 00120 JMP* LHTS+1 IF ZERO, RETURN WITH ZERO 0097 00005 140320 CSA STORE ARGUMENT SIGN IN C BIT 0098 00006 140040 CRA LOAD FLOAIING POINT ONE 0099 00007 000201 IAB X 0100 00010 0 02 01144 LDA F1 X 0101 00011 100001 SRC SKIP IF SIGN IS POSITIVE 0102 00012 140407 TCA TWO'S COMPLIMENT TO GENERATE FLOATING POINT 0103 * MINUS ONE IF SIGN IS NEGATIVE 0104 00013 -0 01 00120 JMP* LHTS+1 RETURN 0105 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 4

0106 * 0107 * 0108 * ABSOLUTE VALUE FUNCTION 0109 * 0110 * CALLING SEQUENCE: 0111 * 0112 * JST ABSF 0113 * DAC ARG ADDRESS OF ARGUMENT 0114 * ......RETURN FLOATING POINT RESULT IN A AND B REGISTERS 0115 * 0116 * 0117 * THE ARGUMENT IS LOADED, AND ITS SIGN IS TESTED. IF THE SIGN 0118 * IS MINUS, THEN THE FLOATING POINT ARGUMENT IS TWO'S COMPLIMENTED. 0119 * 0120 * 0121 00014 0 000000 ABSF DAC ** ENTRY 0122 00015 0 02 00014 LDA ABSF LOAD THE ARGUMENT 0123 00016 0 10 00070 JST LARG X 0124 00017 100400 SPL SKIP IF POSITIVE 0125 00020 0 10 00122 JST N$22 COMPLIMENT IF NEGATIVE 0126 00021 -0 01 00120 JMP* LHTS+1 RETURN 0127 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 5

0128 * 0129 * 0130 * RANDOM NUMBER ROUTINE 0131 * 0132 * CALLING SEQUENCE: 0133 * 0134 * JST RNDF 0135 * DAC ARG ADDRESS OF ARGUMENT 0136 * ......RETURN RANDOM NUMBER RETURNED IN A AND B REGISTERS 0137 * 0138 * 0139 * THR ARGUMENT IS LOADED, AND IF POSITIVE, THE HIGH PART OF THE 0140 * ARGUMENT IS SAVED TO INITIALIZE A SEQUENCE, AND THE ARGUMENT IS 0141 * RETURNED AS A RANDOM NUMBER. IF THE ARGUMENT IS NEGATIVE, ITS SIGN 0142 * IS SET POSITIVE. IF ZERO, THE LAST NUMBER GENERATED IN THE 0143 * SEQUENCE IS LOADED. THE A REGISTER IS MULTIPLIED BY 5**5, AND THE 0144 * RESULT IS SAVED TO GENERATE THE NEXT NUMBER IN THE SEQUENCE. THE 0145 * EXPONENT IS INITIALIZED TO ZERO PLUS THE BIAS, AND THE RESULT IS 0146 * PACKED INTO FLOATING POINT FORMAT. 0147 * 0148 * 0149 00022 0 000000 RNDF DAC ** ENTRY 0150 * 0151 * LOAD AND TEST SIGN OF ARGUMENT 0152 * 0153 00023 0 02 00022 LDA RNDF LOAD THE ARGUMENT 0154 00024 0 10 00070 JST LARG 0155 00025 0 11 01060 CAS F0 TEST SIGN OF ARGUMENT 0156 00026 0 01 00042 JMP RN03 POSITIVE - INITIALIZE A SEQUENCE 0157 00027 0 02 00045 LDA RND1 ZERO - LOAD LAST NUMBER GENERATED 0158 * 0159 * HERE IF NEGATIVE OR ZERO 0160 * 0161 00030 140100 SSP NEGATIVE - SET SIGN POSITIVE 0162 00031 0 10 00507 JST M$11 MULTIPLY BY 0163 00032 0 000044 DAC K5E5 5**5 0164 00033 0 04 00045 STA RND1 SAVE TO GENERATE NEXT NUMBER IN SEQUENCE 0165 00034 0 04 00152 STA EXPT 0166 00035 0 02 00572 LDA C200 INITIALIZE EXPONENT TO BIAS 0167 00036 0 13 00152 IMA EXPT 0168 00037 0 10 00202 JST NORM FORM FLOATING POINT NUMBER 0169 00040 0 12 00022 IRS RNDF INCREMENT FOR RETURN 0170 00041 -0 01 00022 JMP* RNDF EXIT 0171 * 0172 * HERE IF POSITIVE 0173 * 0174 00042 0 04 00045 RN03 STA RND1 SAVE TO INITIALIZE A SEQUENCE 0175 00043 -0 01 00120 JMP* LHTS+1 EXIT WITH ORIGINAL ARGUMENT 0176 * 0177 *
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 6

0178 00044 006065 K5E5 DEC 3125 0179 00045 065432 RND1 OCT 65432 0180 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 7

0181 * 0182 * 0183 * EFFECTIVE ADDRESS ROUTINE 0184 * 0185 * CALLING SEQUENCE: 0186 * 0187 * JST ADDR ADDRESS OF DAC TO ARGUMENT IN A REGISTER 0188 * ......RETURN EFFECTIVE ADDRESS AND RETURN ADDRESS LEFT 0189 * IN SPECIFIED TEMPORARY STORAGE LOCATIONS 0190 * 0191 * 0192 * THE ROUTINE LOADS THE ADDRESS OF THE ARGUMENT. IF THE INDEX 0193 * BIT IS SET THE CONTENTS OF THE X REGISTER ARE ADDED TO THE ADDRESS. 0194 * THE INDIRECT BIT IS THEN TESTED, AND IF SET, THE CONTENTS OF THE 0195 * ADDRESS ARE LOADED, AND THE ROUTINE LOOPS TO TEST THE INDEX BIT. 0196 * IF THE INDIRECT BIT IS RESET, THE EFFECTIVE ADDRESS IS SAVED, AND 0197 * THE RETURN IS MADE. THE ORIGINAL CONTENTS OF THE A REGISTER ARE 0198 * INCREMENTED AND SAVED AS A RETURN ADDRESS FOR THE CALLING ROUTINE. 0199 * 0200 * 0201 00046 0 000000 ADDR DAC ** EFFECTIVE ADDRESS ROUTINE 0202 00047 0 04 00117 STA LHTS SAVE ADDRESS 0203 00050 141206 AOA INCREMENT AND SAVE 0204 00051 0 04 00120 STA LHTS+1 FOR RETURN ADDRESS 0205 00052 -0 02 00117 AD1 LDA* LHTS LOAD ARGUMENT ADDRESS 0206 * 0207 * TEST THE INDEX BIT OF THE ADDRESS 0208 * 0209 00053 0416 77 ALR 1 ROTATE LEFT 0210 00054 140320 CSA SET C BIT IF TAG 0211 00055 100001 SRC TEST C BIT 0212 00056 0 01 00065 JMP AD2 JUMP IF TAG 0213 00057 0406 77 ARR 1 REPOSITION 0214 * 0215 * TEST THE INDIRECT BIT OF THE ADDRESS 0216 * 0217 00060 140320 AD3 CSA SET C BIT IF FLAG 0218 00061 0 04 00117 STA LHTS SAVE ADDRESS 0219 00062 100001 SRC TEST C BIT 0220 00063 0 01 00052 JMP AD1 LOOP IF FLAG 0221 00064 -0 01 00046 JMP* ADDR RETURN 0222 * 0223 * ADD THE INDEX REGISTER IF THE INDEX BIT IS SET 0224 * 0225 00065 0406 77 AD2 ARR 1 REPOSITION 0226 00066 0 06 00000 ADD 0 ADD INDEX REGISTER 0227 00067 0 01 00060 JMP AD3 JUMP BACK TO TEST FLAG 0228 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 8

0229 * 0230 * 0231 * LOAD ARGUMENT ROUTINE 0232 * 0233 * CALLING SEQUENCE: 0234 * 0235 * JST LARG ADDRESS OF DAC TO ARGUMENT IN A REGISTER 0236 * ......RETURN THE ARGUMENT IS RETURNED IN THE A AND B 0237 * REGISTERS 0238 * 0239 * 0240 * THIS ROUTINE LOADS A DOUBLE WORD ARGUMENT. IT CALL UPON ADDR 0241 * TO OBTAIN THE EFFECTIVE ADDRESS. THE CONTENTS OF THE EFFECTIVE 0242 * ADDRESS IS LOADED IN THE A REGISTER, AND THE CONTENTS OF THE 0243 * EFFECTIVE ADDRESS PLUS ONE IS LOADED IN THE B REGISTER. 0244 * 0245 * 0246 00070 0 000000 LARG DAC ** LOAD ARGUMENT ROUTINE ENTRY 0247 00071 0 10 00046 JST ADDR EFFECTIVE ADDRESS ROUTINE 0248 00072 -0 02 00117 LDA* LHTS LOAD HIGH ARGUMENT 0249 00073 000201 IAB 0250 00074 0 12 00117 IRS LHTS INCREMENT FOR ADDRESS OF LOW ARGUMENT 0251 00075 -0 02 00117 LDA* LHTS LOAD LOW 0252 00076 000201 IAB REPOSITION 0253 00077 -0 01 00070 JMP* LARG RETURN 0254 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 9

0255 * 0256 * 0257 * DOUBLE LOAD ROUTINE 0258 * 0259 * CALLING SEQUENCE: 0260 * 0261 * JST L$22 0262 * DAC ARG FLAG AND TAG MAY BE SET 0263 * ......RETURN ARGUMENT IN A AND B REGISTERS 0264 * 0265 * 0266 * THIS ROUTINE LOADS THE ADDRESS OF THE DAC TO THE ARGUMENT, 0267 * AND THEN CALLS LARG TO LOAD THE DOUBLE WORD ARGUMENT. THE RETURN 0268 * IS MADE THROUGH RETURN ADDRESS CALCULATED BY ADDR. 0269 * 0270 * 0271 00100 0 000000 L$22 DAC ** DOUBLE LOAD ENTRY 0272 00101 0 02 00100 LDA L$22 LOAD DAC OF ARGUMENT ADDRESS 0273 00102 0 10 00070 JST LARG LOAD ARGUMENT ROUTINE 0274 00103 -0 01 00120 JMP* LHTS+1 RETURN 0275 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 10

0276 * 0277 * 0278 * DOUBLE STORE ROUTINE 0279 * 0280 * CALLING SEQUENCE: 0281 * 0282 * JST H$22 ARGUMENT IN A AND B REGISTERS 0283 * DAC ARG FLAG AND TAG MAY BE SET 0284 * ......RETURN 0285 * 0286 * 0287 * THE ADDRESS OF THE DAC OF THE ARGUMENT IS LOADED IN THE A 0288 * REGISTER, AND THEN ADDR IS CALLED TO OBTAIN THE EFFECTIVE ADDRESS. 0289 * THE ORIGINAL CONTENTS OF THE A REGISTER ARE STORED IN THE LOCATION 0290 * SPECIFIED BY THE EFFECTIVE ADDRESS, AND THE CONTENTS OF THE B 0291 * REGISTER ARE STORED IN THE NEXT SEQUENTIAL LOCATION. 0292 * 0293 * 0294 00104 0 000000 H$22 DAC ** FLOATING POINT STORE ENTRY 0295 00105 0 04 00121 STA LHTS+2 SAVE HIGH 0296 00106 0 02 00104 LDA H$22 LOAD ADDRESS OF DAC 0297 00107 0 10 00046 JST ADDR EFFECTIVE ADDRESS ROUTINE 0298 00110 0 02 00121 LDA LHTS+2 LOAD HIGH 0299 00111 -0 04 00117 STA* LHTS STORE HIGH 0300 00112 000201 IAB 0301 00113 0 12 00117 IRS LHTS INCREMENT FOR ADDRESS OF LOW 0302 00114 -0 04 00117 STA* LHTS STORE LOW 0303 00115 000201 IAB REPOSITION 0304 00116 -0 01 00120 JMP* LHTS+1 RETURN 0305 * 0306 * 0307 00117 000000 LHTS BSZ 3 0308 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 11

0309 * 0310 * 0311 * TWO'S COMPLIMENT A FLOATING POINT NUMBER 0312 * 0313 * CALLING SEQUENCE: 0314 * 0315 * JST N$22 FLOATING POINT IN A AND B REGISTERS 0316 * ......RETURN TWOS COMPLIMENTED FLOATING POINT IN A AND 0317 * B REGISTERS 0318 * 0319 * 0320 * THE C BIT IS SET AFTER ENTRANCE TO THIS ROUTINE TO PROVIDE A 0321 * TRUE TWO'S COMPLIMENT IF THE LOW ORDER WORD IS ZERO. IF IT IS 0322 * FOUND TO BE NON-ZERO, THE C BIT IS RESET. THE LOW ORDER WORD IS 0323 * TWO'S COMPLIMENTED. THE HIGH ORDER WORD IS ONE'S COMPLIMENTED, 0324 * AND THE C BITS IS ADDED. 0325 * 0326 * 0327 00122 0 000000 N$22 DAC ** FLOATING POINT TWO'S COMPLIMENT ENTRY 0328 00123 140600 SCB SET CARRY INDICATOR 0329 00124 000201 IAB LOAD LOW 0330 00125 100040 SZE TEST ZERO 0331 00126 140200 RCB IF NOT, RESET CARRY INDICATOR 0332 00127 140407 TCA TWO'S COMPLIMENT 0333 00130 000201 IAB LOAD HIGH 0334 00131 140401 CMA ONE'S COMPLIMENT 0335 00132 141216 ACA ADD CARRY 0336 00133 -0 01 00122 JMP* N$22 RETURN 0337 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 12

0338 * 0339 * 0340 * UNPACK A FLOATING POINT 0341 * 0342 * CALLING SEQUENCE: 0343 * 0344 * JST UNPK FLOATING POINT IN A AND B REGISTERS 0345 * ......RETURN MANTISA IN A AND B REGISTERS, EXPONENT IN 0346 * SPECIFIED TEMPORARY STORAGE LOCATION 0347 * 0348 * 0349 * THE EXPONENT IS RIGHT JUSTIFIED, AND IF THE FLOATING POINT 0350 * NUMBER IS NEGATIVE,IT IS COMPLIMENTED. THE MANTISSA IS RIGHT JUS- 0351 * TIFIED SO THAT THE BINARY POINT IS BETWEEN THE FIRST TWO BITS OF 0352 * THE A REGISTER. THE FIRST BIT OF THE B REGISTER IS CLEARED TO 0353 * LEAVE THE MANTISSA IN DOUBLE WORD FIXED POINT FORMAT. 0354 * 0355 * 0356 00134 0 000000 UNPK DAC ** ENTRY 0357 00135 0 04 00152 STA EXPT SAVE THE HIGH WORD 0358 * 0359 * EXTRACT THE EXPONENT AND SAVE IT 0360 * 0361 00136 0405 71 ARS 7 RIGHT JUSTIFY THE EXPONENT 0362 00137 100400 SPL SKIP IF POSITIVE 0363 00140 140401 CMA ONE'S COMPLIMENT IF NEGATIVE 0364 00141 0 13 00152 IMA EXPT SAVE THE EXPONENT, RECOVER THE HIGH WORD 0365 * 0366 * PUT THE MANTISSA IN DOUBLE WORD FIXED POINT FORMAT 0367 * 0368 00142 0 03 00153 ANA MSEX STRIP THE EXPONENT 0369 00143 100400 SPL SKIP IF POSITIVE 0370 00144 0 05 00154 ERA MES MOVE THE SIGN IF NEGATIVE 0371 00145 0410 70 LLL 8 LEFT JUSTIFY THE MANTISSA 0372 00146 000201 IAB CLEAR BIT ONE OF THE LOW MANTISSA 0373 00147 0404 77 LGR 1 X 0374 00150 000201 IAB X 0375 00151 -0 01 00134 JMP* UNPK RETURN 0376 * 0377 * 0378 00152 000000 EXPT BSZ 1 0379 00153 100177 MSEX OCT 100177 0380 00154 100200 MES OCT 100200 0381 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 13

0382 * 0383 * 0384 * DOUBLE WORD ADDITION ROUTINE 0385 * 0386 * CALLING SEQUENCE: 0387 * 0388 * JST DADD FIRST ARGUMENT IN A AND 8 REGISTERS, SECOND 0389 * ARGUMENT IN SPECIFIED TEMPORARY STORAGE 0390 * LOCATIONS 0391 * ......RETURN RESULT IN A AND B REGISTERS 0392 * 0393 * 0394 * THIS ROUTINE ASSUMES THE ARGUMENTS ARE IN DOUBLE WORD FIXED 0395 * POINT FORMAT. THE LOW PARTS OF THE ARGUMENTS ARE ADDED, AND BIT 0396 * ONE IS COPIED INTO THE C BIT AND THEN SET TO ZERO. THE C BIT AND 0397 * THE HIGH PARTS OF THE TWO ARGUMENTS ARE ADDED TOGETHRR. IF THERE 0398 * IS NO OVERFLOW THE ROUTINE EXITS. OIHERWISE, THE RESULT IS SHIFTED 0399 * RIGHT AND THE EXPONENT IS INCREMENTED. 0400 * 0401 * 0402 00155 0 000000 DADD DAC ** DOUBLE ADDITION ROUTINE ENTRY 0403 00156 000201 IAB LOAD LOW X 0404 00157 0 06 00201 ADD LOW ADD LOW Y 0405 00160 140320 CSA CARRY INTO C 0406 00161 000201 IAB LOAD HIGH X 0407 00162 141216 ACA ADD CARRY 0408 00163 100001 SRC SKIP IF NO OVERFLOW 0409 00164 0 01 00174 JMP DA01 JUMP IF OVERFLOW 0410 00165 0 06 00200 ADD HIGH ADD HIGH Y 0411 00166 101001 SSC CHECK FOR OVERFLOW 0412 00167 -0 01 00155 JMP* DADD NO OVERFLOW - RETURN 0413 * 0414 * HERE IF OVERFLOW 0415 * 0416 00170 0401 77 DA02 LRS 1 OVERFLOW - SHIFT RIGHT 0417 00171 140024 CHS RESTORE THE SIGN 0418 00172 0 12 00152 IRS EXPT STEP THE EXPONENT 0419 00173 -0 01 00155 JMP* DADD RETURN 0420 * 0421 * CHECK HERE FOR COMPENSATING OVERFLOW 0422 * 0423 00174 0 06 00200 DA01 ADD HIGH ADD HIGH Y 0424 00175 100001 SRC CHECK FOR COMPENSATING OVERFLOW 0425 00176 -0 01 00155 JMP* DADD YES - RETURN 0426 00177 0 01 00170 JMP DA02 NO - OVERFLOW 0427 * 0428 * 0429 00200 000000 HIGH BSZ 1 0430 00201 000000 LOW BSZ 1 0431 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 14

0432 * 0433 * 0434 * NORMALIZE AND REPACK INTO FLOATING POINT FORMAT 0435 * 0436 * CALLING SEQUENCE: 0437 * 0438 * JST NORM MANTISSA IN A AND B REGISTERS, EXPONENT IN 0439 * SPECIFIED TEMPORARY STORAGE LOCATION 0440 * ......RETURN FLOATING POINT IN A AND B REGISTERS 0441 * 0442 * 0443 * THE MANTISSA IS EXPECTED IN DOUBLE WORD FIXED POINT FORMAT 0444 * WITH THE BINARY POINT BETWEEN FIRST TWO BITS OF THE A REGISTER. 0445 * THE EXPONENT IS ASSUMED TO BE BIASED AND UNCOMPLIMENTED. IF THE 0446 * MANTISSA IS ZERO, THE ROUTINE EXITS WITH ZERO. OTHERWISE THE MAN- 0447 * I1SSA IS NORMALIZED AND ROUNDED. THEN IT IS SHIFTED LEFT TO 0448 * MAKE ROOM FOR THE EXPONENT, AND BIT ONE OF THE SECOND WORD IS 0449 * FILLED. THE EXPONENT IS DECREMENTED BY THE SHIFT COUNT OF THE 0450 * NORMALIZE, AND THEN TESTED FOR OVERFLOW AND UNDERFLOW. UNDERFLOW 0451 * AND OVERFLOW ARE FLAGGED BY NU AND NO RESPECTIVELY. OTHERWISE THE 0452 * TOTAL WORD IS FORMED, AND THE ROUTINE EXITS. 0453 * 0454 * 0455 00202 0 000000 NORM DAC ** ENTRY 0456 * 0457 * TEST FOR ZERO MANTISSA 0458 * 0459 00203 100040 SZE TEST HIGH MANTISSA EQUAL TO ZERO 0460 00204 0 01 00211 JMP N2 NO-JUMP TO NORMALIZE 0461 00205 000201 IAB YES-LOAD LOW MANTISSA 0462 00206 101040 SNZ TEST EQUAL TO ZERO 0463 00207 -0 01 00202 JMP* NORM YES-RETURN WITH ZERO 0464 00210 000201 IAB NO-REPOSITION 0465 * 0466 * NORMALIZE THE MANTISSA 0467 * 0468 00211 0 04 00272 N2 STA CNTR INITIALIZE THE SHIFT COUNTER TO ZERO 0469 00212 140040 CRA X 0470 00213 0 13 00272 IMA CNTR X 0471 00214 100000 SKP DON'T INCREMENT SHIFT COUNTER THE FIRST 0472 * TIME THROUGH 0473 00215 0 12 00272 IRS CNTR INCREMENT THE SHIFT COUNTER BY ONE 0474 00216 0411 77 LLS 1 SHIFT LEFT TO NORMALIZE 0475 00217 101001 SSC TEST FOR NORMAL RESULT 0476 00220 0 01 00215 JMP *-3 NO-LOOP TO INCREMENT THE SHIFT COUNTER 0477 00221 0401 77 LRS 1 RESTORE WITH WRONG SIGN 0478 00222 140024 CHS RESTORE THE SIGN 0479 * 0480 * ADD A ROUNDING FACTOR TO THE RIGHT OF THE LEAST SIGNIFICANT BIT 0481 * OF THE MANTISSA
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 15

0482 * 0483 00223 0 04 00200 STA HIGH STORE THE HIGH MANTISSA 0484 00224 0 02 00273 LDA C100 LOAD THE LOW ROUNDING FACTOR 0485 00225 000201 IAB STORE THE LOW MANTISSA 0486 00226 0 04 00201 STA LOW X 0487 00227 140040 CRA LOAD THE HIGH ROUNDING FACTOR 0488 00230 0 10 00155 JST DADD 0489 * 0490 * TEST THE MANTISSA EQUAL TO NEGATIVE ONE 0491 * 0492 00231 0 11 00276 CAS MLNN TEST HIGH MANTISSA EQUAL TO -1 0493 00232 0 01 00244 JMP N3 NO-JUMP TO PACK THE MANTISSA 0494 00233 000201 IAB YES-LOAD LOW MANTISSA 0495 00234 0 03 00275 ANA MLMA MASK SIGNIFICANT BITS OF THE LOW MANTISSA 0496 00235 100040 SZE TEST LOW MANTISSA EQUAL TO ZERO 0497 00236 0 01 00243 JMP N4 NO-JUMP TO PACK MANTISSA 0498 00237 0 12 00152 IRS EXPT YES-MANTISSA EQUALS NEGATIVE ONE-INCREMENT 0499 * THE EXPONENT BY ONE 0500 00240 000201 IAB AND GENERATE A MANTISSA OF NEGATIVE ONE 0501 00241 0405 77 ARS 1 HALF 0502 00242 100000 SKP 0503 * 0504 * FILL BII ONE OF LOW MANTISSA AND MAKE ROOM FOR THE EXPONENT 0505 * 0506 00243 000201 N4 IAB 0507 00244 0401 71 N3 LRS 7 MAKE ROOM FOR THE EXPONENT 0508 00245 000201 IAB AND FILL BIT ONE OF THE LOW MANTISSA 0509 00246 0414 77 LGL 1 X 0510 00247 000201 IAB X 0511 00250 0400 77 LRL 1 0512 00251 0414 77 LGL 1 BUT SAVE THE SIGN OF THE MANTISSA 0513 00252 0405 77 ARS 1 0514 * 0515 * CHECK FOR OVERFLOW AND UNDERFLOW 0516 * 0517 00253 0 13 00152 IMA EXPT LOAD THE EXPONENT 0518 00254 0 07 00272 SUB CNTR SUBTRACT THE NORMALIZING COUNT 0519 00255 100400 SPL TEST FOR UNDERFLOW 0520 00256 0 01 00266 JMP N6 YES-JUMP TO FLAG UNDERFLOW 0521 00257 0 07 00274 SUB C400 NO-TEST FOR OVERFLOW 0522 00260 101400 SMI X 0523 00261 0 01 00270 JMP N7 YES-JUMP TO FLAG OVERFLOW 0524 00262 0 06 00274 ADD C400 NO-RESTORE THE EXPONENT 0525 * 0526 * FORM TOTAL WORD AND RETURN 0527 * 0528 00263 0414 71 LGL 7 POSITION THE EXPONENT 0529 00264 0 05 00152 ERA EXPT FORM TOTAL WORD 0530 00265 -0 01 00202 JMP* NORM RETURN 0531 *
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 16

0532 * HERE TO FLAG UNDERFLOW AND OVERFLOW 0533 * 0534 00266 0 10 00000 N6 JST ERR 0535 00267 147325 BCI 1,NU FLAG UNDERFLOW 0536 00270 0 10 00000 N7 JST ERR 0537 00271 147317 BCI 1,NO FLAG OVERFLOW 0538 * 0539 * 0540 00272 000000 CNTR BSZ 1 0541 00273 000100 C100 OCT 100 0542 00274 000400 C400 OCT 400 0543 00275 077600 MLMA OCT 77600 0544 00276 100000 MLNN OCT 100000 0545 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 17

0546 * 0547 * 0548 * FLOATING POINT ADDITION AND SUBTRACTION 0549 * 0550 * CALLING SEQUENCE: 0551 * 0552 * JST A$22(S$22) FIRST ARGUMENT IN A AND B REGISTERS 0553 * DAC ARG2 POINTER TO SECOND ARGUMENT 0554 * ......RETURN RESULT IN A AND B REGISTERS 0555 * 0556 * 0557 * IF THE ARGUMENTS ARE TO BE SUBTRACTED A FLAG IS SET, AND THE 0558 * SECOND ARGUMENT IS TWO'S COMPLIMENTED AFTER IT IS LOADED. THE 0559 * ARGUMENTS ARE UNPACKED, AND THE MANTISSA OF THE ARGUMENT OF SMALLER 0560 * MAGNITUDE IS SHIFTED RIGHT THE DIFFERENCE OF THE EXPONETS OF THE 0561 * ARGUMENTS. IF THE DIFFERENCE OF THE EXPONENTS IS GREATER THAN THE 0562 * NUMBER OF SIGNIFICANT BITS, ALL BITS OF THE SMALLER ARGUMENT EXCEPT 0563 * FOR THE SIGN BIT ARE SHIFTED OUT. THE MANTISSAS ARE ADDED. THE 0564 * RESULT IS PACKED INTO FLOATING POINT FORMAT WITH AN EXPONENT 0565 * EQUAL TO THE EXPONENT OF THE LARGER ARGUMENT. 0566 * 0567 * 0568 00277 0 000000 S$22 DAC ** SUBTRACTION ENTRY 0569 00300 0 04 00355 STA TEMP SAVE HIGH PART 0570 00301 0 02 00277 LDA S$22 MOVE RETURN ADDRESS 0571 00302 0 04 00304 STA A$22 TO THE ADDITINN ROUTINE 0572 00303 0 01 00307 JMP *+4 JUMP INTO THE ADDITION ROUTINE 0573 00304 0 000000 A$22 DAC ** ADDITION ENTRY 0574 00305 0 04 00355 STA TEMP SAVE HIGH PART 0575 00306 0 02 00000 LDA M1 LOAD MINUS ONE 0576 00307 0 13 00355 IMA TEMP SAVE FLAG, RECOVER HIGH PART 0577 * 0578 * UNPACK AND SAVE THE FIRST ARGUMENT 0579 * 0580 00310 0 10 00134 JST UNPK UNPACK THE FIRST ARGUMENT 0581 00311 0 10 00104 JST H$22 STORE IT 0582 00312 0 000200 DAC HIGH 0583 00313 0 02 00152 LDA EXPT 0584 00314 0 04 00272 STA CNTR SAVE THE EXPONENT 0585 * 0586 * LOAD AND UNPACK THH SECOND ARGUMENT 0587 * 0588 00315 0 02 00304 LDA A$22 LOAD DAC TO ARGUMENT ADDRESS 0589 00316 0 10 00070 JST LARG LOAD ARGUMENT ROUTINE 0590 00317 0 12 00355 IRS TEMP SKIP IF ADDITION 0591 00320 0 10 00122 JST N$22 COMPLIMENT IF SUBTRACTION 0592 00321 0 10 00134 JST UNPK UNPACK THE SECOND ARGUMENT 0593 00322 0 04 00355 STA TEMP SAVE HIGH SECOND ARGUMENT 0594 * 0595 * TAKE THE DIFFERENCE OF THE EXPONENTS
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 18

0596 * 0597 00323 0 02 00272 LDA CNTR LOAD THE EXPONENT OF THE FIRST ARGUMENT 0598 00324 0 07 00152 SUB EXPT SUBTRACT EXPONENT OF SECOND ARGUMENT 0599 00325 100400 SPL TEST SIGN 0600 00326 0 01 00334 JMP A6 SECOND ARGUMENT LARGER - JUMP 0601 * 0602 * IF THE FIRST ARGUMENT IS LARGER, FORM THE SHIFT COUNT AND SAVE 0603 * THE FIRST ARGUMENT'S EXPONENT AS THE EXPONENT OF THE RESULT 0604 * 0605 00327 140407 TCA FIRST ARGUMENT LARGER - COMPLIMENT TO FORM 0606 * SHIFT COUNT 0607 00330 0 04 00152 STA EXPT SAVE 0608 00331 0 02 00272 LDA CNTR LOAD LARGER ARGUMENT EXPONENT 0609 00332 0 13 00152 IMA EXPT STORE IN EXPT, RECOVER SHIFT COUNT 0610 00333 0 01 00342 JMP A1 JUMP T0 FORM SHIFT INSTRUCTION 0611 * 0612 * IF THE SECOND ARGUMENT IS LARGER, SAVE THE SECOND ARGUMENT'S 0613 * MANTISSA AND LOAD THE FIRST ARGUMENT'S MANTISSA 0614 * 0615 00334 0 13 00355 A6 IMA TEMP SAVE SHIFT COUNT, RECOVER HIGH SECOND 0616 * ARGUMENT 0617 00335 0 13 00200 IMA HIGH EXCHANGE SO THAT LARGER ARGUMENT IS IN 0618 00336 000201 IAB HIGH AND LOW, AND SMALLER ARGUMENT IN 0619 00337 0 13 00201 IMA LOW THE A AND B REGISTERS 0620 00340 000201 IAB 0621 00341 0 13 00355 IMA TEMP RECOVER SHIFT COUNT 0622 * 0623 * FORM THE SHIFT INSRUCTION AND SHIFT THE SMALLER ARGUMENT'S MANTISSA 0624 * 0625 00342 0 11 00356 A1 CAS M31 TEST IF DIFFERENCE OF EXPONENTS IS LESS 0626 * THAN THE NUMBER OF SIGNIFICANT BITS PLUS 1 0627 00343 0 03 00357 ANA C77 YES - MASK SHIFT COUNT AND 0628 00344 0 05 00360 ERA LRS FORM SHIFT INSTRUCTION 0629 00345 100400 SPL 0630 00346 0 02 00712 LDA LRSM NO-FORM SHIFT INSTRUCTION TO SHIFT OUT ALL 0631 * BITS EXCEPT THE SIGN 0632 00347 0 04 00351 STA A3 0633 00350 0 02 00355 LDA TEMP LOAD HIGH OF SMALLER ARGUMENT 0634 00351 0 00 00000 A3 PZE ** SHIFT 0635 * 0636 * ADD THE LARGER ARGUMENT'S MANTISSA AND PACK THE RESULT INTO 0637 * FLOATING POINT FORMAT 0638 * 0639 00352 0 10 00155 JST DADD ADD THE LARGER ARGUMENT MANTISSA 0640 00353 0 10 00202 JST NORM PACK INTO FLOATING POINT FORMAT 0641 00354 -0 01 00120 JMP* LHTS+1 ADDITION, SUBTRACTION RETURN 0642 * 0643 * 0644 00355 000000 TEMP BSZ 1 0645 00356 177747 M31 OCT -31
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 19

0646 00357 000077 C77 OCT 77 0647 00360 040100 LRS OCT 40100 0648 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 20

0649 * 0650 * 0651 * FLOATING POINT DIVISION 0652 * 0653 * CALLING SEQUENCE: 0654 * 0655 * JST D$22 DIVIDEND IN A AND B REGISTERS 0656 * DAC ARG2 POINTER TO DIVISOR 0657 * ......RETURN QUOTIENT IN A AND B REGISTER 0658 * 0659 * 0660 * THE ARGUMENTS ARE SET POSITIVE AND UNPACKED. THE RESULTING 0661 * SIGN OF THE QUOTIENT IS SAVED. THE EXPONENT OF THE DIVISOR IS SUB- 0662 * TRACTED FROM THE EXPONENT OF THE DIVIDEND, AND THE BIAS IS 0663 * ADJUSTED TO FORM THE QUOTIENT EXPONENT. THE MANTISSA OF THE 0664 * DIVIDEND IS COMPARED WITH THE MANTISSA OF THE DIVISOR. IF THE 0665 * DIVIDEND MANTISSA IS GREATER OR EQUAL, THE TWO'S COMPLIMENT OF 0666 * THE DIVISOR MANTISSA IS ADDED TO THE DIVIDEND MANTISSA, AND A ONE 0667 * QUOTIENT BIT IS GENERATED. IF THE DIVIDEND MANTISSA IS LESS, A 0668 * ZERO QUOTIENT BIT IS GENERATED. THE MANTISSAS OF THE DIVIDEND 0669 * AND THE QUOTIENT ARE THEN SHIFTED LEFT ONE PLACE. THIS PROCESS 0670 * IS REPEATED UNTIL 24 QUOTIENT BITS HAVE BEEN GENERATED. THE 0671 * QUOTIENT IS PACKED INTO FLOATING POINT FORMAT, AND THE SIGN IS 0672 * ADJUSTED. IF THE SECOND ARGUMENT IS FOUND TO BE ZERO, A DZ ERROR 0673 * IS FLAGGED. 0674 * 0675 * 0676 00361 0 000000 D$22 DAC ** DIVISION ENTRY 0677 00362 0 10 00455 JST MDAH JUMP TO ARGUMENT HANDLING ROUTINE 0678 00363 101040 SNZ SKIP IF DIVISOR IS NON-ZERO 0679 00364 0 01 00446 JMP D6 DIVISOR IS ZERO-JUMP TO FLAG ERROR 0680 00365 0401 77 LRS 1 POSITION DIVISOR MANTISSA 0681 00366 0 10 00104 JST H$22 AND SAVE 0682 00367 0 000450 DAC HGHC X 0683 00370 0 10 00122 JST N$22 TWO'S COMPLIMENT DIVISOR MANTISSA 0684 00371 0 04 00200 STA HIGH SAVE HIGH PART 0685 00372 000201 IAB CLEAR BIT ONE OF LOW MANTISSA BEFORE 0686 00373 140100 SSP STORING 0687 * 0688 * QUOTIENT EXPONENT DETERMINATION 0689 * 0690 00374 0 13 00201 IMA LOW SAVE LOW, AND RECOVER DIVIDEND EXPONENT 0691 00375 0 07 00152 SUB EXPT SUBTRACT EXPONENT OF DIVISOR 0692 00376 0 06 00454 ADD C205 ADD BIAS PLUS SCALING FACTOR 0693 00377 0 04 00152 STA EXPT SAVE EXPONENT OF QUOTIENT 0694 00400 0 02 00356 LDA M31 INITIALIZE LOOP COUNTER SO THAT NUMBER 0695 00401 0 04 00272 STA CNTR OF QUOTIENT BITS GENERATED EQUALS NUMBER 0696 * OF SIGNIFICANTS BITS PLUS ONE 0697 * 0698 * INITIALIZE THE QUOTIENT MANTISSA TO ZERO AND LOAD THE DIVIDEND
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 21

0699 * MANTISSA 0700 * 0701 00402 0 10 00100 JST L$22 LOAD FLOATING POINT ZERO 0702 00403 0 001060 DAC F0 X 0703 00404 0 13 00453 IMA RSLT+1 AND SAVE AS QUOTIENT, RECOVER DIVIDEND 0704 00405 000201 IAB MANTISSA 0705 00406 0 13 00452 IMA RSLT X 0706 00407 0401 77 LRS 1 POSITION DIVIDEND MANTISSA 0707 00410 0 01 00414 JMP *+4 JUMP TO COMPARE DIVIDEND AND DIVISOR 0708 * MANTISSAS 0709 * 0710 * LOAD THE DIVIDEND (REMAINDER) MANTISSA 0711 * 0712 00411 0 13 00453 D5 IMA RSLT+1 SAVE QUOTIENT MANTISSA, RECOVER DIVIDEND 0713 00412 000201 IAB (REMAINDER) MANTISSA 0714 00413 0 13 00452 IMA RSLT X 0715 * 0716 * COMPARE DIVISOR MANTISSA WITH DIVIDEND(REMAINDER) MANTISSA 0717 * 0718 00414 0 11 00450 CAS HGHC COMPARE HIGH MANTISSAS 0719 00415 0 01 00441 JMP D2+1 DIVIDEND(REMAINDER) GREATER 0720 00416 100000 SKP EQUAL-SKIP TO COMPARE LOW MANTISSAS 0721 00417 0 01 00425 JMP D3 DIVISOR MANTISSA GREATER 0722 00420 000201 IAB LOAD LOW DIVIDEND(REMAINDER) MANTISSA 0723 00421 0 11 00451 CAS LOWC COMPARE LOW MANTISSAS 0724 00422 101000 NOP X 0725 00423 0 01 00440 JMP D2 DIVIDEND MANTISSA GREATER OR EQUAL 0726 00424 000201 IAB DIVISOR GREATER-REPOSITION 0727 * 0728 * HERE IF DIVIDEND(REMAINDER) MANTISSA IS LESS THAN DIVISOR MANTISSA 0729 * 0730 00425 0411 77 D3 LLS 1 SHIFT DIVIDEND(REMAINDER) MANTISSA 0731 00426 0 13 00452 IMA RSLT LOAD LOW QUOTIENT MANTISSA 0732 * 0733 * SHIFT QUOTIENT MANTISSA AND INCREMENT COUNTER 0734 * 0735 00427 000201 D4 IAB LOAD LOW QUOTIENT MANTISSA IN B REGISTER 0736 00430 0 13 00453 IMA RSLT+1 LOAD HIGH QUOTIENT MANTISSA 0737 00431 0411 77 LLS 1 SHIFT THE QUOTIENT MANTISSA 0738 00432 0 12 00272 IRS CNTR INCREMENT THE COUNTER BY ONE 0739 00433 0 01 00411 JMP D5 LOOP TO GENERATE ANOTHER QUOTIENT BIT 0740 * IF COUNTER IS NON-ZERO 0741 * 0742 * PACK AND SET SIGN OF QUOTIENT 0743 * 0744 00434 0 10 00202 JST NORM PACK INTO FLOATING POINT FORMAT (IF COUNTER 0745 * EQUALS ZERO) 0746 00435 0 12 00355 IRS TEMP SKIP IF SIGN OF QUOTIENT IS POSITIVE 0747 00436 0 10 00122 JST N$22 COMPLIMENT IF SIGN OF QUOTIENT IS NEGATIVE 0748 00437 -0 01 00361 JMP* D$22 DIVISION RETURN
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 22

0749 * 0750 * HERE IF DIVISOR MANTISSA IS LESS THAN OR EQUAL TO DIVIDEND 0751 * (REMAINDER) MANTISSA 0752 * 0753 00440 000201 D2 IAB REPOSITION 0754 00441 0 10 00155 JST DADD SUBTRACT DIVISOR MANTISSA FROM DIVIDEND 0755 * (REMAINDER) MANTISSA 0756 00442 0411 77 LLS 1 SHIFT REMAINDER MANTISSA 0757 00443 0 13 00452 IMA RSLT LOAD LOW QUOTIENT MANTISSA 0758 00444 141206 AOA GENERATE A ONE QUOTIENT BIT 0759 00445 0 01 00427 JMP D4 JUMP TO SHIFT QUOTIENT 0760 * 0761 * FLAG ERROR - DIVISION BY ZERO 0762 * 0763 00446 0 10 00000 D6 JST ERR JUMP TO ERROR REPORTING ROUTINE 0764 00447 142332 BCI 1,DZ ID THE ERROR 0765 * 0766 * 0767 00450 000000 HGHC BSZ 1 0768 00451 000000 LOWC BSZ 1 0769 00452 000000 RSLT BSZ 2 0770 00454 000205 C205 OCT 205 0771 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 23

0772 * 0773 * 0774 * MULTIPLICATION AND DIVISION ARGUMENT HANDLING ROUTINE 0775 * 0776 * CALLING SEQUENCE: 0777 * 0778 * JST MDAH CALL TO ROUTINE IMMEDIATELY FOLLOWS ENTRY, 0779 * FIRST ARGUMENT IN THE A AND B REGISTERS 0780 * ......RETURN MANTISSA OF ABSOLUTE VALUE OF FIRST ARGU- 0781 * MENT IN THE A AND B REGISTERS, ABSOLUTE 0782 * VALUE OF UNPACKED FIRST ARGUMENT AND FLAG 0783 * FOR SIGN OF RESULTANT IN TEMPORARY STORAGE 0784 * LOCATIONS 0785 * 0786 * 0787 * THE SIGN OF THE FIRST ARGUMRNT IS SAVED. THE FIRST ARGUMENT 0788 * IS SET POSITIVE, UNPACKED, AND SAVED. THE SECOND ARGUMENT IS 0789 * LOADED, AND ITS SIGN XORED WITH THE SIGN OF THE FIRST ARGUMENT. 0790 * IF THE RESULTANT SIGN IS POSITIVE, A FLAG IS SET TO NEGATIVE ONE. 0791 * IF THE RESULTANT SIGN IS NEGATIVE, THE FLAG IS SET TO A POSITVE 0792 * NUMBER. THE SECOND ARGUMENT IS SET POSITIVE AND UNPACKED. 0793 * 0794 * 0795 00455 0 000000 MDAH DAC ** ENTRY 0796 00456 0 04 00355 STA TEMP SAVE SIGN OF FIRST ARGUMENT 0797 * 0798 * SET FIRST ARGUMENT POSITIVE, UNPACK, AND SAVE IT 0799 * 0800 00457 100400 SPL SKIP IF POSITIVE 0801 00460 0 10 00122 JST N$22 COMPLIMENT IF NEGATIVE 0802 00461 0 10 00134 JST UNPK UNPACK THE FIRST ARGUMENT 0803 00462 0 10 00104 JST H$22 SAVE THE MANTISSA 0804 00463 0 000452 DAC RSLT X 0805 00464 0 02 00152 LDA EXPT AND THE EXPONENT 0806 00465 0 04 00201 STA LOW X 0807 * 0808 * LOAD SECOND ARGUMENT 0809 * 0810 00466 0 02 00455 LDA MDAH LOAD ADDRESS PLUS ONE OF CALL 0811 00467 0 07 00506 SUB C2 SUBTRACT TWO AND 0812 00470 0 04 00272 STA CNTR SAVE ADDRESS OF CALLING ROUTINE ENTRY 0813 00471 -0 02 00272 LDA* CNTR LOAD ADDRESS OF DAC TO SECOND ARGUMENT 0814 00472 -0 12 00272 IRS* CNTR INCREMENT TO SET UP RETURN ADDRESS FOR 0815 * CALLING ROUTINE 0816 00473 0 10 00070 JST LARG LOAD SECOND ARGUMENT 0817 * 0818 * DETERMINE SIGN OF RESULT AND SET FLAG 0819 * 0820 00474 0 13 00355 IMA TEMP RECOVER SIGN OF FIRST ARGUMENT 0821 00475 0 05 00355 ERA TEMP XOR SIGN OF SECOND ARGUMENT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 24

0822 00476 140320 CSA CLEAR A1 SO THAT NEGATIVE ONE ISN'T 0823 * GENERATED INADVERTENTLY 0824 00477 101001 SSC SKIP IF RESULTANT SIGN IS NEGATIVE 0825 00500 0 02 00000 LDA M1 LOAD NEGATIVE ONE IF RESULTANT SIGN IS 0826 * POSITIVE 0827 00501 0 13 00355 IMA TEMP SAVE RESULTANT SIGN FLAG, RECOVER HIGH 0828 * WORD OF SECOND ARGUMENT 0829 * 0830 * SET SECOND ARGUMENT POSITIVE AND UNPACK IT 0831 * 0832 00502 100400 SPL SKIP IF POSITIVE 0833 00503 0 10 00122 JST N$22 COMPLIMENT IF NEGATIVE 0834 00504 0 10 00134 JST UNPK UNPACK THE SECOND ARGUMENT 0835 00505 -0 01 00455 JMP* MDAH RETURN 0836 * 0837 00506 000002 C2 OCT 2 0838 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 25

0839 * 0840 * 0841 * SINGLE PRECISION MULTIPLIPLICATION 0842 * 0843 * CALLING SEQUENCE: 0844 * 0845 * JST M$11 MULTIPLICAND IN THE A REGISTER 0846 * DAC ARG2 POINTER TO MULTIPLIER 0847 * ......RETURN PRODUCT TRANSPOSED SO THAT LEAST SIGNIFI- 0848 * CANT PART IS IN A REGISTER 0849 * 0850 * 0851 * THE ROUTINE EXPECTS THE MULTIPLICAND AND MULTIPLIER TO BE IN 0852 * SINGLE PRECISION FIXED POINT FORMAT WITH POSITIVEL SIGNS. THE LEAST 0853 * SIGNIFICANT BIT OF THE MULTIPLIER IS TESTED. IF IT IS ONE, THE 0854 * MULTIPLICAND IS ADDED TO THE PRODUCT WHICH IS INITIALLY ZERO. THE 0855 * MULTIPLIRR AND THE PRODUCT ARE SHIFTED RIGHT, AND THE NEXT LEAST 0856 * SIGNIFICANT BIT OF THE MULTIPLIER IS TESTED. THE PROCESS IS 0857 * REPEATED FOR THE 15 MAGNITUDE BITS OF THE MULTLPLIER. THE RESULT 0858 * IS THEN SHIFTED SO THAT IT IS DOUBLE PRECISION FIXED POINT FORMAT. 0859 * THE ANSWER IS TRANSPOSED SO THAT THE LEAST SIGNIFICANT PART IS IN 0860 * THE A REGISTER, AND THE ROUTINE EXITS. 0861 * 0862 * 0863 00507 0 000000 M$11 DAC ** INTEGER MULTIPLY ENTRY 0864 00510 0 04 00200 STA HIGH SAVE THE MULTIPLICAND 0865 * 0866 * INITIALIZE THE LOOP COUNTER AND POSITION THE MULTIPLIER 0867 * 0868 00511 0 02 00527 LDA M17 INITIALIZE LOOP COUNTER TO THE NUMBER OF 0869 * MAGNITUDE BITS IN MULTIPLIER 0870 00512 0 04 00272 STA CNTR 0871 00513 0 02 00507 LDA M$11 LOAD MULTIPLIER 0872 00514 0 10 00070 JST LARG LOAD ARGUMENT ROUTINE 0873 00515 0400 57 LRL 17 CLEAR A, SHIFT LSB OF MULTIPLIER INTO C BIT 0874 * 0875 * MULTIPLY LOOP 0876 * 0877 00516 100001 M101 SRC TEST LSB 0878 00517 0 06 00200 ADD HIGH LSB IS ONE-ADD THE MULTIPLICAND TO THE PRO- 0879 * DUCT 0880 00520 0400 77 LRL 1 SHIFT LSB OF MULTIPLIER INTO C BIT 0881 00521 0 12 00272 IRS CNTR BUMP COUNTER 0882 00522 0 01 00516 JMP M101 LOOP TO TEST LSB OF MULTIPLIER IF COUNTER 0883 * IS NON-ZERO 0884 * 0885 * FORMAT THE RESULT 0886 * 0887 00523 0414 77 LGL 1 IF THE COUNTER IS ZERO, PUT THW RESULT IN 0888 00524 0400 77 LRL 1 DOUBLE PRECISION FORMAT BY CLEARING BIT ONE
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 26

0889 * OF THE SECOND WORD 0890 00525 000201 IAB TRANSPOSE THE HIGH AND LOW WORDS 0891 00526 -0 01 00120 JMP* LHTS+1 1NTEGLR MULIIPLY LXII 85108910 0892 * 0893 * 0894 00527 177761 M17 OCT -17 0895 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 27

0896 * 0897 * 0898 * FLOATING POINT MULTIPLICATION 0899 * 0900 * CALLING SEQUENCE: 0901 * 0902 * JST M$22 MULFIPLICAND IN A AND B REGISTERS 0903 * DAC ARG2 POINTER TO MULTIPLIER 0904 * ......RETURN PRUDUCT IN A AND B REGISTER 0905 * 0906 * 0907 * THE ARGUMENTS ARE UNPACKED, THEIR SIGNS ARE SET POSITIVE, AND 0908 * THE SIGN OF THE PRODUCT IS SAVED. THEIR EXPONENTS ARE ADDED, THE 0909 * BIAS IS ADJUSTED, AND THE RESULT IS SAVED AS THE EXPONENT OF THE 0910 * PRODUCT. THE HIGH MULILPLICAND MANTISSA AND THE LOW MULTIPLIER 0911 * MANTISSA ARE MULTIPLIED, AS ARE THE HIGH MULTIPLLER MANTISSA AND 0912 * LOW MULTIPLICAND MANTISSA. THE TWO HIGH CROSS PRODUCT ARE SAVED. 0913 * THE HIGH MULTIPLICAND MANTISSA AND THE HIGH MULTIPLIER MANTISSA ARE 0914 * MULTIPLIED, AND THE HIGH CROSS PRODUCTS ARE ADDED TO THE LOW PRO- 0915 * DUCT. IF THERR IS OVERFLOW, THE HIGH PRODUCT IS INCREMENTED. 0916 * THE PRODUCT IS PACKED INTO FLOATING POINT FORMAT, AND THE SIGN IS 0917 * ADJUSTED. 0918 * 0919 * 0920 00530 0 000000 M$22 DAC ** MULTIPLICATION ENTRY 0921 00531 0 10 00455 JST MDAH JUMP TO ARGUMENT HANDLING ROUTINE 0922 * 0923 * PRODUCT EXPONENT DETERMINATION 0924 * 0925 00532 0 13 00201 IMA LOW SAVE HIGH MULTIPLIER MANTISSA, RECOVER 0926 * EXPONENT OF MULTIPLICAND 0927 00533 0 06 00152 ADD EXPT ADD EXPONENT OF MULTIPLIER 0928 00534 0 07 00572 SUB C200 SUBTRACT BIAS 0929 00535 0 04 00152 STA EXPT SAVE RESULTANT EXPONENT 0930 * 0931 * PRODUCT MANTISSA DETERMINATION 0932 * 0933 00536 000201 IAB LOAD LOW MULTIPLIER MANTISSA 0934 00537 0 10 00507 JST M$11 MULTIPLY BY HIGH MULTIPLICAND MANTISSA 0935 00540 0 000452 DAC RSLT X 0936 00541 000201 IAB LOAD HIGH CROSS PRODUCT 0937 00542 0 13 00453 IMA RSLT+1 AND SAVE, RECOVER LOW MULTIPLICAND MANTISSA 0938 00543 0 10 00507 JST M$11 MULTIPLY BY HIGH MULTIPLIER MANTISSA 0939 00544 0 000201 DAC LOW X 0940 00545 000201 IAB LOAD HIGH CROSS PRODUCT 0941 00546 0 13 00201 IMA LOW AND SAVE, RECOVER HIGH MULTIPLIER MANTISSA 0942 00547 0 10 00507 JST M$11 MULIIPLY BY HIGH MULTIPLICAND MANTISSA 0943 00550 0 000452 DAC RSLT X 0944 00551 000201 IAB SAVE HIGH PRODUCT MANTISSA 0945 00552 0 04 00452 STA RSLT X
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 28

0946 00553 000201 IAB LOAD LOW PRODUCT MANTISSA 0947 00554 0 06 00201 ADD LOW ADD CROSS PRODUCT 0948 00555 140320 CSA OVERFLOW INTO C BIT 0949 00556 100001 SRC SKIP IF C BIT RESET 0950 00557 0 12 00452 IRS RSLT INCREMENT HIGH IF C BIT IS SET 0951 00560 0 06 00453 ADD RSLT+1 ADD IN THE OTHER CROSS PRODUCT 0952 00561 140320 CSA OVERFLOW INTO C BIT 0953 00562 100001 SRC SKIP IF C BIT RESET 0954 00563 0 12 00452 IRS RSLT INCREMENT HIGH IF C BIT IS SET 0955 00564 000201 IAB LOAD LOW PRODUCT MANTISSA IN THE B REGISTER 0956 00565 0 02 00452 LDA RSLT LOAD HIGH PRODUCT MANTISSA 0957 * 0958 * PACK AND SET SIGN OF PRODUCT 0959 * 0960 00566 0 10 00202 JST NORM PACK PRODUCT INTO FLOATING POINT FORMAT 0961 00567 0 12 00355 IRS TEMP SKIP IF SIGN OF PRODUCT IS POSITIVE 0962 00570 0 10 00122 JST N$22 COMPLIMENT IF SIGN OF PRODUCT IS NEGATIVE 0963 00571 -0 01 00530 JMP* M$22 MULTIPLICATION RETURN 0964 * 0965 * 0966 00572 000200 C200 OCT 200 0967 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 29

0968 * 0969 * INTEGER TO FLOATING POINT CONVERSION 0970 * 0971 * CALLING SEQUNCE: 0972 * 0973 * JST FINT ASSUMES INTEGER IN A REGISTER 0974 * ......RETURN FLOATING POINT IN A AND B REGISTERS 0975 * 0976 * 0977 * THE INTEGER IS PUT IN DOUBLE PREISION FIXED POINT FORM BY 0978 * CLEARING THE B REGISTER. THE EXPONENT IS INITIALIZED AT '217 - 0979 * '200 FOR BIAS AND '17 TO MOVE THE BINARY POINT BETWEEN BITS 1 AND 0980 * 2 OF THE A REGISTER. THEN THE FLOATING POINT NORMALIZING ROUTINE 0981 * IS USED TO PACK IT INTO FLOATING POINT FORMAT. 0982 * 0983 * 0984 00573 0 000000 FINT DAC ** ENTRY 0985 00574 0 04 00152 STA EXPT SAVE THE INTEGER 0986 00575 140040 CRA CLEAR THE B REGISTER 0987 00576 000201 IAB 0988 00577 0 02 00603 LDA C217 INITIALIZE EXPONENT TO BIAS PLUS FACTOR 0989 * TO MOVE BINARY POINT TO THE END OF THE 0990 * A REGISTER 0991 00600 0 13 00152 IMA EXPT RECOVER THE INTEGER 0992 00601 0 10 00202 JST NORM NORMALIZE TO CONVERT 0993 00602 -0 01 00573 JMP* FINT EXIT 0994 * 0995 * 0996 00603 000217 C217 OCT 217 0997 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 30

0998 * 0999 * 1000 * FLOATING POINT TO INTGER CONVERSION 1001 * 1002 * CALLING SEQUENCE: 1003 * 1004 * JST IFLT ASSUMES FLOATING POINT IN A AND B REGISTERS 1005 * ......OUT OF RANGE RETURN 1006 * ......NORMAL RETUUN - INTEGER IN THE A REGISTER 1007 * 1008 * 1009 * THE FLOATING POINT IS UNPACKED. '217 IS SUBTRACTED FROM THE 1010 * EXPONENT - '200 TO REMOVE THE BIAS, AND '17 TO MOVE THE BINARY 1011 * POINT TO THE END OF THE A REGISTER. IF THE RESULT IS GREATER THAN 1012 * ZERO, THE FLOATING POINT IS OUT OF INTEGER RANGE, AND THE OUT OF 1013 * RANGE RETURN IS TAKEN. IF THE RESULT IS LESS THAN OR EQUAL TO 1014 * ZERO, THE MANTISSA IS SHIFTED RIGHT TO FORM THE TRUNCATED INTEGER, 1015 * AND THE NORMAL RETURN IS TAKEN 1016 * 1017 * 1018 00604 0 000000 IFLT DAC ** ENTRY 1019 00605 0 10 00134 JST UNPK UNPACK THE FLOATING POINT 1020 00606 0 13 00152 IMA EXPT LOAD THE EXPONENT 1021 00607 0 07 00603 SUB C217 SUBTRACT BIAS PLUS FACTOR TO MOVE THE 1022 * BINARY POINT BETWEEN FIRST TWO BITS OF 1023 * THE A REGISTER 1024 00610 0 11 01060 CAS F0 TEST FOR OUT OF INTEGER RANGE 1025 00611 -0 01 00604 JMP* IFLT OUT OF RANGE RETURN 1026 00612 101000 NOP 1027 00613 0 11 00527 CAS M17 TEST FOR ALL FRACTIONAL BITS IN MANTISSA 1028 00614 0 03 00357 ANA C77 NO - MASK SHIFT COUNT AND 1029 00615 0 05 00625 ERA ARS FORM SHIFT INSTRUCTION 1030 00616 100400 SPL SKIP IF GREATER THAN '-17 1031 00617 0 02 00626 LDA ARSM YES - SHIFT OUT ALL BITS EXCEPT SIGN 1032 00620 0 04 00622 STA IF01 1033 00621 0 02 00152 LDA EXPT RECOVER HIGH MANTISSA 1034 00622 0405 00 IF01 ARS ** SHIFT TO INTEGER FORMAT 1035 00623 0 12 00604 IRS IFLT NORMAL RETURN 1036 00624 -0 01 00604 JMP* IFLT 1037 * 1038 * 1039 00625 040500 ARS OCT 40500 1040 00626 040517 ARSM OCT 40517 1041 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 31

1042 * 1043 * 1044 * TEST FOR INTEGER ROUTINE 1045 * 1046 * CALLLNG SEQUENCE: 1047 * 1048 * JST TINT ASSUMES FLOATING POINT IN A AND B REGISTERS 1049 * ......INTEGER RETURN - INTEGER IN A REGISTER 1050 * ......FLOATING POINT RETURN - FLOATING POINT IN A AND B 1051 * REGISTERS. CONVERSION NOT MADE BECAUSE 1052 * FLOATING POINT IS OUT OF INTEGER RANGE, 1053 * OR CONTAINED FRACTIONAL BITS. 1054 * 1055 * 1056 * THIS ROUTINE CALLS UPON THE FLOATING POINT TO INTEGER CON- 1057 * VERSION. IF OUT OF RANGE RETURN IS TAKEN, THE FLOATING POINT 1058 * RETURN IS MADE. IF THE NORMAL RETURN IS TAKEN, THE INTEGER IS CON- 1059 * VERTED TO FLOATING POINT AND SUBTRACTED FROM THE ORIGINAL FLOATING 1060 * POINT. IF THE RESULT IS ZERO, THE INTEGER RETURN IS MADE. OTHER- 1061 * WISE, THE FLOATING POINT RETURN IS MADE. 1062 * 1063 * NOTE: E$22 MAKES USE OF THE FACT THAT THE INTEGER WILL ALSO BE IN 1064 * CTMP, AND THE FLOATING POINT WILL ALSO BE IN FTMP. 1065 * 1066 * 1067 00627 0 000000 TINT DAC ** ENTRY 1068 00630 0 10 00104 JST H$22 SAVE THE FLOATING POINT ARGUMENT 1069 00631 0 001017 DAC FTMP 1070 00632 0 10 00604 JST IFLT FLOATING POINT TO INTEGER CONVERSION 1071 00633 0 01 00644 JMP T101 OUT OF RANGE RETURN - TAKE FLOATING POINT 1072 * RETURN 1073 00634 0 04 00650 STA CTMP INTEGER RETURN-SAVE THE INTEGER 1074 00635 0 10 00573 JST FINT CONVERT IT TO FLOATING POINT FORMAT 1075 00636 0 10 00277 JST S$22 SUBTRACT IT FROM ORIGINAL FLOATING POINT 1076 00637 0 001017 DAC FTMP 1077 00640 100040 SZE TEST ZERO DIFFERENCE 1078 00641 0 01 00644 JMP T101 NO - TAKE FLOATING POINT RETURN 1079 00642 0 02 00650 LDA CTMP YES-LOAD THE INTEGER 1080 00643 -0 01 00627 JMP* TINT INTEGER RETURN 1081 00644 0 10 00100 T101 JST L$22 LOAD ORIGINAL FLOATING POINT 1082 00645 0 001017 DAC FTMP 1083 00646 0 12 00627 IRS TINT FLOATING POINT RETURN 1084 00647 -0 01 00627 JMP* TINT 1085 * 1086 * 1087 00650 000000 CTMP BSZ 1 1088 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 32

1089 * 1090 * 1091 * GREATEST INTEGER FUNCTION 1092 * 1093 * CALLING SEQUENCE: 1094 * 1095 * JST INTF 1096 * DAC ARG POINTER TO THE ARGUMENT 1097 * ......RETURN RESULT IN A AND B REGISTERS 1098 * 1099 * 1100 * THE ARGUMENT IS LOADED AND UNPACKED. THE BIAS PLUS THE NUM- 1101 * BER OF SIGNIFICANT BITS IS SUBTRACTED FROM THE EXPONENT TO CUMPUTE 1102 * THE NUMBER OF FRACTIONAL BITS IN THE MANTISSA. IF THERE ARE NO 1103 * FRACTIONAL BITS THE NUMBER IS REPACKED AND THE ROUTINE EXITS. 1104 * OTHERWISE, THE FRACTIONAL BITS ARE SHIFTED OUT OF THE MANTISSA. 1105 * ZEROS ARE THEN SHIFTED IN TO REPLACE THE FRACTIONAL BITS. THERE IS 1106 * A SPECIAL TEST SO THAT MINUS ONE IS GENERATED FOR ARGUMENT IN THE 1107 * RANGE OF MINUS ONE AND ZERO. 1108 * 1109 * 1110 00651 0 000000 INTF DAC ** 1111 00652 0 02 00651 LDA INTF 1112 00653 0 10 00070 JST LARG LOAD ARGUMENT ROUTINE 1113 00654 0 10 00134 JST UNPK UNPACK THE FLOATING POINT 1114 00655 0 04 00677 STA IN03 SAVE HIGH 1115 * 1116 * TEST FOR FRACTIONAL BITS 1117 * 1118 00656 0 02 00152 LDA EXPT LOAD THE EXPONENT 1119 00657 0 06 00707 ADD M227 SUBTRACT BIAS PLUS NUMBER OF SIGNIFICANT 1120 * BITS IN THE MANTISSA 1121 00660 100400 SPL SKIP IF POSITIVE 1122 00661 0 01 00665 JMP IN01 JUMP TO SHIFT OUT FRACTIONAL BITS 1123 00662 0 02 00677 LDA IN03 RECOVER HIGH 1124 * 1125 * REPACK AND RETURN 1126 * 1127 00663 0 10 00202 IN04 JST NORM REPACK 1128 00664 -0 01 00120 JMP* LHTS+1 GREATEST INTEGER FUNCTION EXIT 1129 * 1130 * FORM THE SHIFT INSTRUCIIONS AND SHIFT OUT THE MANTISSA'S 1131 * FRACTIONAL BITS 1132 * 1133 00665 0 06 01165 IN01 ADD M7 ADD -7 TO THE SHIFT COUNT TO RIGHT 1134 * JUSTIFY MANTISSA 1135 00666 0 11 00710 CAS M36 TEST IF ALL MANTISSA BITS ARE FRACTIONAL 1136 00667 0 03 00357 ANA C77 NO- MASK SHIFT COUNT AND 1137 00670 0 05 00360 ERA LRS FORM SHIFT INSTRUCTION 1138 00671 100400 SPL
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 33

1139 00672 0 02 00712 LDA LRSM YES - SHIFT OUT ALL BITS EXCEPT SIGN 1140 00673 0 04 00676 STA IN02 STORE RIGHT SHIFT 1141 00674 0 05 00711 ERA C1K FORM LEFT SHIFT INSTRUCTION 1142 00675 0 13 00677 IMA IN03 AND STORE, RECOVER HIGH 1143 00676 0401 00 IN02 LRS ** SHIFT OUT FRACTIONAL 1144 00677 0411 00 IN03 LLS ** RESTORE FORMAT 1145 * 1146 * BE SURE THAT NEGATIVE ONE IS RETURNED FOR ARGUMENTS IN THE 1147 * RANGE OF NEGATIVE ONE AND ZERO 1148 * 1149 00700 0 11 00276 CAS MLNN SPECIAL CHECK SO THAT -1 IS GENERATED FOR 1150 * NUMBERS BETWEEN -1 AND 0 1151 00701 0 01 00663 JMP IN04 JUMP TO REPACK 1152 00702 0 13 00677 IMA IN03 LOAD THE SHIFT INSTRUCTION 1153 00703 0 11 00713 CAS LLSM TEST IF ALL MANTISSA BITS WERE SHIFTED OUT 1154 00704 0 01 00662 JMP IN04-1 NO - JUMP TO REPACK 1155 00705 0 02 00000 LDA FM1 YES - LOAD -1 1156 00706 -0 01 00120 JMP* LHTS+1 AND RETURN 1157 * 1158 * 1159 00707 177551 M227 OCT -227 1160 00710 177742 M36 OCT -36 1161 00711 001000 C1K OCT 1000 1162 00712 040142 LRSM OCT 40142 1163 00713 041142 LLSM OCT 41142 1164 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 34

1165 * 1166 * 1167 * FLOATING POINT EXPONENTIATION 1168 * 1169 * CALLING SEQUENCE: 1170 * 1171 * JST E$22 FIRST ARGUMENT IN A AND B REGISTERS 1172 * DAC ARG2 POINTER TO SECOND ARGUMENT 1173 * ......RETURN FIRST ARGUMENT RAISED TO THE SECOND ARGU- 1174 * MENT POWER IN THE A AND B REGISTERS 1175 * 1176 * 1177 *//THE FIRST ARGUMENT IS SAVED, AND THE RESULT IS INITIALIZED TO 1178 */ONE. THE SECOND ARGUMENT IS LOADED, AND IF IT IS AN INTEGER WHOSE 1179 */ABSOLUTE VALUE IS LESS THAN 64, THE SIGN OF THE SECOND ARGUMENT IS 1180 */SAVED, AND THE LEAST SIGNIFICANT BIT OF THE ABSOLUTE VALUE OF THE 1181 */SECOND ARGUMENT IS TESTED. IF IT IS ONE, THE RESULT IS MULTIPLIED 1182 */BY THE FIRST ARGUMENT. THE ABSOLUTE VALUE OF THE SECOND ARGUMENT 1183 */IS SHIFTED RIGHT ONE PLACE AND TESTED EQUAL TO ZERO. IF NON-ZERO, 1184 */FIRST ARGUMENT IS REPLACED BY ITS SQUARE, AND THE ROUTINE LOOPS TO 1185 */TEST THE LEAST SIGNIFICANT BIT OF THE SECOND ARGUMENT. IF ZERO 1186 */THE SIGN OF SECOND ARGUMENT IS TESTED, AND IF NEGATIVE, THE RESULT 1187 */IS REPLACED BY ITS RECIPROCAL. THE ROUTINE EXITS. IF THE SECOND 1188 */ARGUMENT IS NOT AN INTEGER OR AN INTEGER WHOSE ABSOLUTE VALUE IS 1189 */GREATER THAN 63, THE EXPONENTIATION IS ACCOMPLISHED BY TAKING THE 1190 */NATURAL ANTILOGARITHM OF THE PRODUCT OF THE SECOND ARGUMENT AND 1191 */NATURAL LOGARITHM OF THE FIRST ARGUMENT. (EXP(ARG2*LN(ARG1))) 1192 */THERE IS A SPECIAL CHECK SO THAT IF THE FIRST ARGUMENT IS ZERO AND 1193 */SECOND ARGUMENT IS GREATER THAN ZERO, A ZERO IS RETURNED; AND IF 1194 */THE SECOND ARGUMENT IS LESS THAN ZERO, A DZ ERROR IS FLAGGED. 1195 * 1196 * 1197 00714 0 000000 E$22 DAC ** ENTRY 1198 00715 0 10 00104 JST H$22 STORE FIRST ARGUMENT 1199 00716 0 001021 DAC ETMP 1200 00717 0 10 00100 JST L$22 INITALIZE THE RESULT TO ONE 1201 00720 0 001144 DAC F1 1202 00721 0 10 00104 JST H$22 1203 00722 0 001221 DAC Z0 1204 00723 0 02 00714 LDA E$22 LOAD THE EXPONENT 1205 00724 0 10 00070 JST LARG 1206 00725 0 12 00714 IRS E$22 BUMP FOR RETURN 1207 00726 0 10 00627 JST TINT TEST FOR INTEGER 1208 00727 0 01 00751 JMP E$01 INTEGER - JUMP 1209 * 1210 * HERE IF THE EXPONENT IS A NON-INTEGER NUMBER, OR AN INTEGER 1211 * WHOSE ABSOLUTE VALUE IS GREATER THAN 63 1212 * 1213 00730 0 10 00100 E$03 JST L$22 LOAD THE FIRST ARGUMENT 1214 00731 0 001021 DAC ETMP
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 35

1215 00732 100040 SZE TEST ZERO 1216 00733 0 01 00740 JMP *+5 IF NOT, JUMP OVER NEXT FEW LINES 1217 00734 0 11 01017 CAS FTMP IF ZERO, COMPARE WITH EXPONENT 1218 00735 0 10 00000 JST ERR ZERO TO NEGATIVE POWER - FLAG DIVISION 1219 00736 142332 BCI 1,DZ BY ZERO 1220 00737 -0 01 00714 JMP* E$22 ZERO TO POSITIVE POWER - EXIT WITH ZERO 1221 * 1222 * COMPUTE EXP(ARG2*LN(ARG1)) 1223 * 1224 00740 0 10 01023 JST LOGF COMPUTE NATURAL LOG OF FIRST ARGUMENT 1225 00741 0 001021 DAC ETMP 1226 00742 0 10 00530 JST M$22 MULTIPLY BY THE EXPONENT 1227 00743 0 001017 DAC FTMP 1228 00744 0 10 00104 JST H$22 STORE IT 1229 00745 0 001017 DAC FTMP 1230 00746 0 10 01107 JST EXPF COMPUTE EXP(B*LN(A)) 1231 00747 0 001017 DAC FTMP 1232 00750 -0 01 00714 JMP* E$22 EXIT 1233 * 1234 * TEST IF THE ABSOLUTE VALUE OF THE INTEGER IS LESS THAN 64 1235 * 1236 00751 100400 E$01 SPL SKIP IF POSITIVE 1237 00752 140407 TCA COMPLIMENT IF NEGATIVE 1238 00753 0 11 00273 CAS C100 TEST FOR LESS THAN 64 1239 00754 101000 NOP 1240 00755 0 01 00730 JMP E$03 JUMP IF NOT 1241 * 1242 * HERE IF EXPONENT IS AN INTEGER WHOSE ABSOLUTE VALUE IS LESS THAN 64 1243 * 1244 00756 101100 E$06 SLN TEST LSB OF EXPONENT 1245 00757 0 01 00770 JMP E$04 JUMP IF ZERO 1246 00760 0 13 01222 IMA Z0+1 IF ONE, LOAD THE INTERMEDIATE RESULT 1247 00761 000201 IAB 1248 00762 0 02 01221 LDA Z0 1249 00763 0 10 00530 JST M$22 MULTIPLY BY POWER OF FIRST ARGUMENT 1250 00764 0 001021 DAC ETMP 1251 00765 0 04 01221 STA Z0 SAVE THE RESULT 1252 00766 000201 IAB 1253 00767 0 13 01222 IMA Z0+1 AND RECOVER THE EXPONENT 1254 00770 0404 77 E$04 LGR 1 SHIFT EXPONENT 1255 00771 101040 SNZ TEST IF THE EXPONENT EQUALS ZER0 1256 00772 0 01 01004 JMP E$05 IF ZER0, JUMP TO TEST SIGN OF EXPONENT 1257 00773 0 04 00450 STA HGHC IF NON-ZERO, SAVE THE EXPONENT 1258 00774 0 10 00100 JST L$22 LOAD POWER OF FIRST ARGUMENT 1259 00775 0 001021 DAC ETMP 1260 00776 0 10 00530 JST M$22 MULTIPLY BY ITSELF 1261 00777 0 001021 DAC ETMP 1262 01000 0 10 00104 JST H$22 SAVE AS THE FIRST ARGUMENT 1263 01001 0 001021 DAC ETMP 1264 01002 0 02 00450 LDA HGHC LOAD THE EXPOMENT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 36

1265 01003 0 01 00756 JMP E$06 LOOP TO TEST LSB OF THE EXPONENT 1266 * 1267 * TEST SIGN OF EXPONENT, INVERT RESULT IF SIGN IS NEGATIVE, AND 1268 * RETURN 1269 * 1270 01004 0 02 00650 E$05 LDA CTMP LOAD SIGNED EXPONENT 1271 01005 100400 SPL TEST THE SIGN 1272 01006 0 01 01012 JMP E$07 JUMP IF NEGATIVE 1273 01007 0 10 00100 JST L$22 LOAD RESULT 1274 01010 0 001221 DAC Z0 1275 01011 -0 01 00714 JMP* E$22 EXIT 1276 01012 0 10 00100 E$07 JST L$22 NEGATIVE EXPONENT - LOAD ONE 1277 01013 0 001144 DAC F1 1278 01014 0 10 00361 JST D$22 DIVIDE BY RESULT TO INVERT 1279 01015 0 001221 DAC Z0 1280 01016 -0 01 00714 JMP* E$22 EXIT 1281 * 1282 * 1283 01017 000000 FTMP BSZ 2 1284 01021 000000 ETMP BSZ 2 1285 * 1286 * 1287 * 1288 FIN 1289 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 37

1290 * 1291 * 1292 * NATURAL LOGARITHM FUNCTION 1293 * 1294 * CALLING SEQEUNCE: 1295 * 1296 * JST LOGF 1297 * DAC ARG POINTER TO ARGUMENT 1298 * ......RETURN LN(ARG) IN A AND B REGISTERS 1299 * 1300 * 1301 * THE ARGUMENT IS LOADED AND IF IT IS LESS THAN OR EQUAL TO 1302 * ZERO, AN LG ERROR IS FLAGGED. THE HIGH WORD OF THE ARGUMENT IS 1303 * SAVED, AND THE EXPONENT OF THE ARGUMENT IS SET TO ONE PLUS THE 1304 * BIAS. ONE IS SUBTRACTED FROM THE ARGUMENT, AND A POLYNOMIAL IS 1305 * EVALUATED IN THE DIRRERENCE WITH THE FOLLOWING COEFFICIENTS: C0=0, 1306 * C1=.9999964, C2=-.4998741, C3=.331799, C4=-.2407338, C5=.1676541, 1307 * C6=-.09532939, C7=.03608849, C8=-.006453544. THE EXPONENT IS 1308 * EXTRACTED FROM THE HIGH WORD OF THE ORIGINAL ARGUMENT, AND THE 1309 * BIAS PLUS ONE IS SUBTRACTED FROM IT. IT IS CONVERTED TO A FLOATING 1310 * POINT NUMBER AND THEN DIVIDED BY THE LOGARITHM OF E TO THE BASE 1311 * TWO. THE POLYNOMIAL RESULT IS ADDED TO THE QUOTIENT FOR THE 1312 * FUNCTION RESULT. 1313 * 1314 * 1315 01023 0 000000 LOGF DAC ** ENTRY 1316 01024 0 02 01023 LDA LOGF 1317 01025 0 10 00070 JST LARG LOAD THE ARGUMENT 1318 01026 0 11 01060 CAS F0 COMPARE WITH ZERO 1319 01027 0 01 01033 JMP *+4 IF GREATER SKIP NEXT FEW LINES 1320 01030 101000 NOP 1321 01031 0 10 00000 JST ERR IF NOT, FLAG AN LG ERROR 1322 01032 146307 BCI 1,LG 1323 01033 0 04 01170 STA Z2 SAVE THE HIGH WORD OF THE ARGUMENT 1324 01034 0414 77 LGL 1 SHIFT EXPONENT OF ARGUMENT INTO FIRST 8 BIT 1325 01035 141050 CAL CLEAR THE EXPONENT 1326 01036 0404 77 LGR 1 REFORMAT 1327 01037 0 05 01106 ERA LMSK SET THE EXPONENT TO ONE PLUS THE BIAS 1328 01040 0 10 00277 JST S$22 SUBTRACT ONE 1329 01041 0 001144 DAC F1 1330 01042 0 10 01172 JST FPLY EVALUATE THE POLYNOMIAL 1331 01043 0 001102 DAC LG01 1332 01044 0 10 00104 JST H$22 SAVE THE RESULT AS Z0 1333 01045 0 001221 DAC Z0 1334 01046 0 02 01170 LDA Z2 LOAD HIGH WORD OF ORIGINAL ARGUMENT 1335 01047 0 07 01106 SUB LMSK SUBTRACT BIAS PLUS ONE FROM THE EXPONENT 1336 01050 0405 71 ARS 7 RIGHT JUSTIFY THE EXPONENT 1337 01051 0 10 00573 JST FINT CONVERT IT TO A FLOATING POINT NUMBER 1338 01052 0 10 00361 JST D$22 DIVIDE IT BY LOG OF E TO 1339 01053 0 001104 DAC LG2E THE BASE 2
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 38

1340 01054 0 10 00304 JST A$22 ADD Z0 1341 01055 0 001221 DAC Z0 1342 01056 0 12 01023 IRS LOGF SET-UP RETURN ADDRESS 1343 01057 -0 01 01023 JMP* LOGF RETURN 1344 * 1345 * 1346 01060 000000 LOG0 DEC 0.0 01061 000000 1347 01062 040177 LOG1 OCT 40177,177742 01063 177742 1348 01064 140000 LOG2 OCT 140000,4100 01065 004100 1349 01066 037724 LOG3 OCT 37724,170310 01067 170310 1350 01070 140204 LOG4 OCT 140204,137212 01071 137212 1351 01072 037525 LOG5 OCT 37525,153301 01073 153301 1352 01074 140436 LOG6 OCT 140436,60771 01075 060771 1353 01076 037111 LOG7 OCT 37111,164304 01077 164304 1354 01100 141426 LOG8 OCT 141426,41740 01101 041740 1355 01102 0 001100 LG01 DAC LOG8 1356 01103 177770 DEC -8 1357 001060 F0 EQU LOG0 FLOATING POINT ZERO 1358 01104 040334 LG2E OCT 40334,52436 01105 052436 1359 01106 040200 LMSK OCT 40200 1360 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 39

1361 * 1362 * 1363 * EXPONENTIAL FUNCTION 1364 * 1365 * CALLING SEQUENCE: 1366 * 1367 * JST EXPF 1368 * DAC ARG POINTER TO ARGUMENT 1369 * ..... RETURN E^(ARG) IN THE A AND B REGISTERS 1370 * 1371 * 1372 * THE ARGUMENT IS LOADED, SAVED, AND THEN DIVIDED BY THE 1373 * NATURAL LOGARITM OF TWO. THE QUOTIENT IS CONVERTED TO AN INTEGER, 1374 * ONE IS ADDED TO IT, AND THE RESULT IS SAVED AS Z2. IF THE QUOTIENT 1375 * IS OUT OF INTEGER RANGE, NUMERIC UNDERFLOW (NU) OR NUMERIC OVERFLOW 1376 * (NO) IS FLAGGED THROUGH NORM , DEPENDING ON THE ARGUMENT'S SIGN. Z2 1377 * IS THEN MULTIPLIED BY THE NATURAL LOGARITHM OF TWO, AND THE 1378 * ORIGINAL ARGUMENT IS SUBTRACTED FROM IT. A POLYNOMIAL IS EVALUATED 1379 * IN THE DIFFERENCE WITH FOLLOWING COEFFICIENTS:C0=1.0, C1=-1.0, 1380 * C2=.4999999,C3=-.1666653, C4:.04165735, C5=-.00830136, 1381 * C6=.001329882, C7=-.0001413161. Z2 IS ADDED TO THE EXPONENT OF THE 1382 * POLYNOMIAL RESULT FOR THE FUNCTION RESULT. 1383 * 1384 * 1385 01107 0 000000 EXPF DAC ** ENTRY 1386 01110 0 02 01107 LDA EXPF 1387 01111 0 10 00070 JST LARG LOAD THE ARGUMENT 1388 01112 0 10 00104 JST H$22 SAVE IT AS Z0 1389 01113 0 001221 DAC Z0 1390 01114 0 10 00361 JST D$22 DIVIDE THE ARGUMENT BY THE 1391 01115 0 001166 DAC LN2 NATURAL LOGARITHM OF TWO 1392 01116 0 10 00604 JST IFLT CONVERT IT TO AN INTEGER 1393 01117 0 01 01140 JMP EX01 OUT OF INTEGER RANGE 1394 01120 141206 AOA ADD ONE 1395 01121 0 04 01170 STA Z2 AND SAVE 1396 01122 0 10 00573 JST FINT FLOAT IT 1397 01123 0 10 00530 JST M$22 MULTIPLY BY THE NATURAL LOG OF TWO 1398 01124 0 001166 DAC LN2 1399 01125 0 10 00277 JST S$22 SUBTRACT THE ORIGINAL ARGUMENT 1400 01126 0 001221 DAC Z0 1401 01127 0 10 01172 JST FPLY EVALUATE POLYNOMIAL 1402 01130 0 001164 DAC EX02 1403 01131 0 10 00134 JST UNPK UNPACK THE RESULT 1404 01132 0 13 00152 IMA EXPT LOAD THE EXPONENT 1405 01133 0 06 01170 ADD Z2 ADD Z2 1406 01134 0 13 00152 IMA EXPT RESTORE THE FORMAT 1407 01135 0 10 00202 JST NORM REPACK 1408 01136 0 12 01107 IRS EXPF SET-UP RETURN ADDRESS 1409 01137 -0 01 01107 JMP* EXPF RETURN 1410 01140 0 02 01221 EX01 LDA Z0 LOAD THE HIGH WORD OF THE ARGUMENT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 40

1411 01141 101400 SMI TEST ITS SIGN 1412 01142 0 01 00270 JMP N7 POSITIVE - JUMP TO FLAG NUMERIC OVERFLOW 1413 01143 0 01 00266 JMP N6 NEGATIVE - JUMP TO FLAG NUMERIC UNDERFLOW 1414 * 1415 * 1416 01144 040300 EXP0 DEC 1.0 01145 000000 1417 01146 137600 EXP1 OCT 137600,0 01147 000000 1418 01150 037777 EXP2 OCT 37777,177777 01151 177777 1419 01152 140252 EXP3 OCT 140252,125330 01153 125330 1420 01154 037125 EXP4 OCT 37125,50163 01155 050163 1421 01156 141273 EXP5 OCT 141273,177311 01157 177311 1422 01160 035727 EXP6 OCT 35727,23670 01161 023670 1423 01162 142665 EXP7 OCT 142665,164340 01163 164340 1424 01164 0 001162 EX02 DAC EXP7 1425 01165 177771 M7 DEC -7 1426 001144 F1 EQU EXP0 FLOATING POINT ONE 1427 01166 040130 LN2 OCT 40130,134414 01167 134414 1428 01170 000000 Z2 BSZ 2 1429 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 41

1430 * 1431 * 1432 * POLYNOMIAL EVALUATION ROUYINE 1433 * 1434 * CALLING SEQUENCE: 1435 * 1436 * JST FPLY ARGUMENT IN THE A AND B REGISTERS 1437 * DAC CPLC ADDRESS OF COEFFICIENT POINTER AND TWO'S 1438 * COMPLIMENT OF THE DEGREE OF THE POLYNOMIAL 1439 * ......RETURN RESULT RETURNED IN THE A AND B REGISTERS 1440 * . 1441 * . 1442 * . 1443 * DEC C0 1444 * DEC C1 1445 * . 1446 * . 1447 * . 1448 * CNAD DEC CN 1449 * . 1450 * . 1451 * . 1452 * CPLC DAC CNAD 1453 * DEC -N 1454 * 1455 * 1456 * THIS ROUTINE EVALUATES THE POLYNOMIAL OF THE FORM: 1457 * C0+C1*X+C2*X^2+C3*X^3+...+CN*X^N. THE ARGUMENT PASSED IN THE A AND 1458 * B REGISTERS IS SAVED, AND THE COEFFICIENT POINTER AND THE TWO'S 1459 * COMPLIMENT OF THE DEGREE OF THE POLYNOMIAL ARE LOADED. THE COEF- 1460 * FICIENT POINTER IS SAVED IN THE ADDITION CALL IN THE LOOP. THE 1461 * TWO'S COMPLIMENT OF THE DEGREE OF THE POLYNOMIAL IS SAVED AS A LOOP 1462 * COUNTER. THE NTH COEFFICIENT IS LOADED, AND THE COEFFICIENT 1463 * POINTER IS DECREMENTED TO POINT AT THE NEXT COEFFICIENT. THE 1464 * CURRENT RESULT IS MULTIPLIED BY THE ARGUMENT, AND THE NEXT COEF- 1465 * FICIENT IS ADDED. THE LOOP COUNTER IS INCREMENTED BY ONE, AND IF 1466 * IT IS EQUAL TO ZERO RETURN IS MADE. OTHERWISE THE ROUTINE LOOPS 1467 * TO DECREMENT THE COEFFICIENT POINTER. 1468 * 1469 * 1470 01172 0 000000 FPLY DAC ** ENTRY 1471 01173 0 10 00104 JST H$22 SAVE THE ARGUMENT 1472 01174 0 001221 DAC Z0 1473 01175 0 02 01172 LDA FPLY LOAD THE COEFFICIENT POINTER 1474 01176 0 10 00070 JST LARG AND THE LOOP COUNTER 1475 01177 0 04 01213 STA FP01 SAVE COEDDICIENT POINTER IN ADDITION CALL 1476 01200 0 04 01204 STA FP03 SAVE TO LOAD THE NTH COEFFICIENT 1477 01201 000201 IAB LOAD LOOP COUNTER 1478 01202 0 04 01220 STA FPCR AND SAVE 1479 01203 0 10 00100 JST L$22 LOAD THE NTH COEFFICIENT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 42

1480 01204 0 000000 FP03 DAC ** 1481 01205 0 13 01213 FP02 IMA FP01 DECREMENT THE COEFFICIENT POINTER IN THE 1482 01206 0 07 00506 SUB C2 ADDITION CALL SO THAT IT POINTS TO THE 1483 01207 0 13 01213 IMA FP01 NEXT COEFFICIENT 1484 01210 0 10 00530 JST M$22 MULTIPLY BY THE ARGUMENT 1485 01211 0 001221 DAC Z0 X 1486 01212 0 10 00304 JST A$22 ADD THE COEFFICIENT 1487 01213 0 000000 FP01 DAC ** X 1488 01214 0 12 01220 IRS FPCR INCREMENT THE COUNTER 1489 01215 0 01 01205 JMP FP02 LOOP UNTIL COUNTER EQUALS ZERO 1490 01216 0 12 01172 IRS FPLY SET-UP RETURN ADDRESS 1491 01217 -0 01 01172 JMP* FPLY RETURN 1492 * 1493 * 1494 01220 000000 FPCR BSZ 1 1495 01221 000000 Z0 BSZ 2 1496 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 43

1497 * 1498 * 1499 * SQUARE ROOT FUNCTION 1500 * 1501 * CALLING SEQUENCE: 1502 * 1503 * JST SQRF 1504 * DAL ARG POINTER TO THE ARGUMENT 1505 * ......RETURN SQUARE ROOT OF THE ARGUMENT RETURNED IN A 1506 * AND B REGISTERS 1507 * 1508 * 1509 * THE ARGUMENT IS LOADED AND THE FLOATING POINT IS UNPACKED. 1510 * A STRAIGHT LINE APPROXIMATION IS MADE TO THE SQUARE ROOT OF THE 1511 * ARGUMENT BY DIVIDING THE EXPONENT BY TWO AND REPLACING THE MANTISSA 1512 * WITH 5/8 TIMES THE MANTISSA PLUS 3/8. THE FIRST GUESS IS PUT INTO 1513 * FLOATING POINT FORMAT AND FOUR NEWTON-RAPHSON ITERATIONS ARE MADE 1514 * TO OBTIAN FULL FLOATING POINT ACCURACY 1515 * 1516 * 1517 01223 0 000000 SQRF DAC ** SQUARE ROOT FUNCTION ENTRY 1518 01224 0 02 01272 LDA M4 INITIALIZL N-R COUNTER TO -4 1519 01225 0 04 00650 STA CTMP COUNTER 1520 01226 0 02 01223 LDA SQRF 1521 01227 0 10 00070 JST LARG LOAD ARGUMENT ROUTINE 1522 01230 0 11 01060 CAS F0 TEST FOR ZERO AND NEGATIVE ARGUMENT 1523 01231 0 01 01235 JMP *+4 ARGUMENT IS POSITIVE NUMBER, CONTINUE 1524 01232 -0 01 00120 JMP* LHTS+1 ARGUMENT IS ZERO-RETURN WITH ZERO 1525 01233 0 10 00000 JST ERR NEGATIVE NUMBER, FLAG ERROR 1526 01234 151721 BCI 1,SQ 1527 * 1528 * SET EXPONENT OF FIRST GUESS EQUAL TO HALF THE ARGUMENT EXPONENT 1529 * 1530 01235 0 10 00134 JST UNPK UNPACK THE FLOATING POINT 1531 01236 0 13 00152 IMA EXPT LOAD THL EXPONENT 1532 01237 0404 77 LGR 1 DIVIDE IT BY TWO 1533 01240 0 06 00273 ADD C100 ADD BIAS/2 1534 01241 0 13 00152 IMA EXPT SAVE EXPONENT, RECOVER HIGH MANTISSA 1535 01242 101001 SSC SKIP IF EXPONENT IS ODD 1536 01243 0 01 01246 JMP *+3 JUMP IF EXPONENT EVEN 1537 01244 0 12 00152 IRS EXPT INCREMENT THE EXPONENT 1538 01245 0401 77 LRS 1 AND SHIFT THE MANTISSA 1539 * 1540 * SET MANTISSA OF FIRST GUESS EQUAL TO 5/8 TIMES ARGUMENT MANTISSA 1541 * PLUS 3/8 1542 * 1543 01246 0401 77 LRS 1 1/2 * MANTISSA 1544 01247 0 10 00104 JST H$22 STORE 1545 01250 0 000200 DAC HIGH 1546 01251 0401 76 LRS 2 1/8 * MANTISSA
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 44

1547 01252 0 10 00155 JST DADD 1/2 + 1/8 = 5/8 * MANTISSA 1548 01253 0 06 01273 ADD C30K ASD 3/8 1549 01254 0 10 00202 JST NORM REPACK THE FLOATING POINT 1550 01255 0 10 00104 SQ01 JST H$22 SAVE AS XOLD 1551 01256 0 001017 DAC FTMP 1552 * 1553 * NEWTON-RAPHSON METHOD: XNEW=1/2*(ARG/XOLD+XOLD) 1554 * 1555 01257 0 02 01223 LDA SQRF LOAD THE ARGUMENT 1556 01260 0 10 00070 JST LARG 1557 01261 0 10 00361 JST D$22 ARG/XOLD 1558 01262 0 001017 DAC FTMP 1559 01263 0 10 00304 JST A$22 ARG/XOLD + XOLD 1560 01264 0 001017 DAC FTMP 1561 01265 0 07 00572 SUB C200 1/2*(ARG/XOLD+XOLD) 1562 01266 0 12 00650 IRS CTMP INCREMENT THE ITERATION COUNTER 1563 01267 0 01 01255 JMP SQ01 LOOP IF COUNTER IS NON-ZERO 1564 01270 0 12 01223 IRS SQRF INCREMENT FOR RETURN 1565 01271 -0 01 01223 JMP* SQRF RETURN IF COUNTER EQUALS ZERO 1566 * 1567 * 1568 01272 177774 M4 OCT -4 1569 01273 030000 C30K OCT 30000 1570 FIN 1571 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 45

1572 * 1573 * 1574 * COSINE FUNCTION ROUTINE 1575 * 1576 * CALLING SEQUENCE: 1577 * 1578 * JST COSF 1579 * DAC ARG POINTER TO THE ARGUMENT 1580 * ......RETURN COSINE OF THE ARGUMENT IN A AND B REGISTERS 1581 * 1582 * 1583 * THE ROUTINE MOVES THE RETURN ADDRESS TO THE SINE ROUTINE. 1584 * THE ARGUMENT IS LOADED, AND ONE-HALF PI IS ADDED TO IT. THE ROUTINE 1585 * THEN JUMPS INTO THE SINE FUNCTION ROUTINE. NOTE THE IDENTITY: 1586 * COSINE(ARG)=SINE(ARG+PI/2) 1587 * 1588 * 1589 01274 0 000000 COSF DAC ** ENTRY 1590 01275 0 02 01274 LDA COSF MOVE RETURN ADDRESS TO SINF ENTRY 1591 01276 0 04 01303 STA SINF 1592 01277 0 10 00070 JST LARG LOAD THE ARGUMENT 1593 01300 0 10 00304 JST A$22 ADD PI/2 1594 01301 0 001364 DAC HFPI 1595 01302 0 01 01306 JMP *+4 JUMP INTO SINE FUNCTION 1596 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 46

1597 * 1598 * 1599 * SINE FUNCTION ROUTINE 1600 * 1601 * CALLING SEQUENCE: 1602 * 1603 * JST SINF 1604 * DAC ARG POINTER TO THE ARGUMENT 1605 * ......RETURN SINE OF THE ARGUMENT IN THE A AND B REGIS- 1606 * TERS 1607 * 1608 * 1609 * THE ARGUMENT IS LOADED AND DIVIDED BY 2*PI TO CONVERT RADIANS 1610 * TO CIRCLE REVOLUTIONS. THE INTEGRAL PART OF THE RESULT IS DIS 1611 * CARDED SINCE SIN(X)=SIN(X+2*PI). THE FRACTIONAL PART OF THE RESULT 1612 * IS REDUCED TO AN ANGLE IN THE FIRST AND FOURTH QUADRANT 1613 * (-1/4<=F.P.<=1/4), USING THE IDENTIT1ES: SIN(X)=SINC(X-2*PI) AND 1614 * SIN(X)=SIN(PI-X). THE REDUCED FRACTIONAL PART IS SAVED AND THEN 1615 * SQUARED. THE POLYNOMIAL IS EVALUATED IN THE REDUCED FRACTIONAL 1616 * PART SQUARED WITH IHE FOLLOWING COEFFIECIENTS C0=6.283185, 1617 * C1=41.34168, C2=81.60223, C3=-76.57498, C4=39.701067. THE POLY- 1618 * NOMIAL RESULT IS MULTIPLIED BY THE REDUCED FRACTIONAL PART TO OB- 1619 * TAIN THE FUNCTION RESULT. 1620 * 1621 * 1622 01303 0 000000 SINF DAC ** ENTRY 1623 01304 0 02 01303 LDA SINF 1624 01305 0 10 00070 JST LARG LOAD THE ARGUMENT 1625 01306 0 10 00361 JST D$22 DIVIDE IT BY 2*PI 1626 01307 0 001350 DAC TWPI 1627 01310 0 10 00104 JST H$22 SAVE THE RESULT 1628 01311 0 001221 DAC Z0 1629 01312 0 10 00651 JST INTF TAKE THE GREATEST INTEGER 1630 01313 0 001221 DAC Z0 FUNCTION 1631 01314 0 10 00277 JST S$22 SUBTRACT TO FIND NEGATIVE 1632 01315 0 001221 DAC Z0 FRACTIONAL PART 1633 01316 0 10 00122 JST N$22 TWO'S COMPLIMENT IT 1634 01317 0 10 00104 JST H$22 SAVE FRACTIONAL PART AS Z2 1635 01320 0 001170 DAC Z2 1636 01321 0 10 00277 JST S$22 SUBTRACT 1/4 TO TEST WHETHER 1637 01322 0 001366 DAC FFRH ANGLE IS IN FIRST QUADRANT 1638 01323 100400 SPL 1639 01324 0 01 01345 JMP SN02 JUMP TO RELOAD THE FRACTIONAL PART 1640 01325 0 10 00277 JST S$22 SUBTRACT 1/2 FROM RESULT TO 1641 01326 0 001370 DAC FHLF TEST WHETHER IT'S IN FOURTH QUADRANT 1642 01327 100400 SPL IF IT IS SKIP 1643 01330 0 10 00122 JST N$22 IF NOT, COMPLIMENT 1644 01331 0 10 00277 JST S$22 SUBTRACT 1/4 1645 01332 0 001366 DAC FFRH 1646 01333 0 10 00104 JST H$22 SAVE THE RESULT AS THE REDUCED ARGUMENT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 47

1647 01334 0 001170 DAC Z2 1648 01335 0 10 00530 SN01 JST M$22 SQUARE THE REDUCED ARGUMENT 1649 01336 0 001170 DAC Z2 1650 01337 0 10 01172 JST FPLY EVALUATE POLYNOMIAL IN 1651 01340 0 001362 DAC SN03 THE REDUCED ARGUMENT SQUARED 1652 01341 0 10 00530 JST M$22 MULTIPLY REDUCED ARGUMENT 1653 01342 0 001170 DAC Z2 1654 01343 0 12 01303 IRS SINF SET-UP RETURN ADDRESS 1655 01344 -0 01 01303 JMP* SINF RETURN 1656 01345 0 10 00100 SN02 JST L$22 RELOAD THE FRACTIONAL PART OF THE ARGUMENT 1657 01346 0 001170 DAC Z2 1658 01347 0 01 01335 JMP SN01 JUMP TO THE POLYNOMIAL EVALUATION 1659 * 1660 * 1661 01350 040744 SIN0 OCT 40744,103755 01351 103755 1662 01352 136255 SIN1 OCT 136255,50420 01353 050420 1663 01354 041721 SIN2 OCT 41721,115054 01355 115054 1664 01356 136063 SIN3 OCT 136063,66316 01357 066316 1665 01360 041517 SIN4 OCT 41517,65735 01361 065735 1666 01362 0 001360 SN03 DAC SIN4 1667 01363 177774 DEC -4 1668 01364 040344 HFPI OCT 40344,103755 01365 103755 1669 001350 TWPI EQU SIN0 PI MULTIPLIED BY TWO 1670 01366 037700 FFRH DEC 0.25 01367 000000 1671 01370 040100 FHLF DEC 0.5 01371 000000 1672 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 48

1673 * 1674 * 1675 * TANGENT FUNCTION ROUTINE 1676 * 1677 * CALLING SEQUENCE: 1678 * 1679 * JST TANF 1680 * DAC ARG POINTER TO THE ARGUMENT 1681 * ......RETURN TANGENT OF THE ARGUMENT IN THE A AND B 1682 * REGISTERS 1683 * 1684 * 1685 * THE ARGUMENT IS LOADED AND SAVED. THE COSINE OF THE ARGUMENT 1686 * IS TAKEN AND SAVED. THE SINE OF THE ARGUMENT IS TAKEN AND DIVIDED 1687 * BY THE COSINE TO OBTAIN THE TANGENT. 1688 * 1689 * 1690 01372 0 000000 TANF DAC ** ENTRY 1691 01373 0 02 01372 LDA TANF 1692 01374 0 10 00070 JST LARG LOAD THE ARGUMENT 1693 01375 0 10 00104 JST H$22 STORE IT 1694 01376 0 001021 DAC ETMP 1695 01377 0 10 01274 JST COSF TAKE COSINE OF ARGUMENT 1696 01400 0 001021 DAC ETMP 1697 01401 0 10 00104 JST H$22 SAVE COSINE 1698 01402 0 001017 DAC FTMP 1699 01403 0 10 01303 JST SINF TAKE SINE OF THE ARGUMENT 1700 01404 0 001021 DAC ETMP 1701 01405 0 10 00361 JST D$22 DIVIDE SINCE BY COSINE FOR TANGENT 1702 01406 0 001017 DAC FTMP 1703 01407 0 12 01372 IRS TANF INCREMENT FOR RETURN 1704 01410 -0 01 01372 JMP* TANF RETURN 1705 FIN 1706 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 49

1707 * 1708 * 1709 * ARCTANGENT FUNCTION ROUTINE 1710 * 1711 * CALLING SEQUENCE: 1712 * 1713 * JST ATNF 1714 * DAC ARG POINTER TO THE ARGUMENT 1715 * ......RETURN ARCTANGENT OF ARGUMENT IN A AND B REGISTERS 1716 * 1717 * 1718 * A SIGN FLAG AND A SCALE FACTOR FLAG ARE INITIALZED TO MINUS 1719 * TWO. THE ARGUMENT IS LOADED, AND IF IT IS POSITIVE, THE SIGN FLAG 1720 * IS INCREMENTED BY ONE. IF THE ARGUMENT IS NEGATIVE, THE ARGUMENT 1721 * IS TWO'S COMPLIMENTED. IF THE ABSOLUTE VALUE OF THE ARGUMENT 1722 * IS GREATER THAN OR EQUAL TO FLOATING POINT ONE, THE IDENTITY, 1723 * ATN(X)=PI/2+ATN(-1/X), IS APPLIED. THE REDUCED ARGUMENT IS SAVED 1724 * AND THEN SQUARED. THE POLYNOMIAL IS EVALUATED IN THE REDUCED ARGU- 1725 * MENT SQUARED WITH THE FOLLOWING COEFFICIENTS: C0=1, C1=-.3333315, 1726 * C2=.1999355, C3=-.142089, C4=.1065626, C5=-.07528964, 1727 * C6=.04296961, C7=-.01616574, C8=.002866226. THE POLYNOMIAL RESULT 1728 * IS MULTIPL1ED BY THE REDUCED ARGUMENT. IF THE ABSOLUTE VALUE OF 1729 * THE ORIGINAL ARGUMENT WAS GREATER THAN OR EQUAL TO ZERO, THE SCALE 1730 * FACTOR FLAG WILL BE MINUS ONE. WHEN IT IS 'IRS'ED A SKIP WILL 1731 * OCCUR CAUSING PI/2 TO BE ADDED TO THE RESULT. THE SIGN FLAG IS 1732 * THEN 'IRS'ED, AND IF THE ORIGINAL ARGUMENT WAS POSITIVE, THERE WILL BE 1733 * A SKIP. OTHERWISE THE RESULT IS TWO'S COMPLIMENTED. 1734 * 1735 * 1736 01411 0 000000 ATNF DAC ** ENTRY 1737 01412 0 02 01503 LDA M2 1738 01413 0 04 00650 STA CTMP INITIALIZE SIGN FLAG AND 1739 01414 0 04 01502 STA SFAC SCALE FACTOR FLAG TO MINUS TWO 1740 01415 0 02 01411 LDA ATNF 1741 01416 0 10 00070 JST LARG LOAD THE ARGUMENT 1742 01417 101400 SMI 1743 01420 0 12 00650 IRS CTMP IF POSITIVE, INCREMENT THE SIGN FLAG 1744 01421 100400 SPL 1745 01422 0 10 00122 JST N$22 IF NEGATIVE, TWO'S COMPLIMENT 1746 01423 0 11 01144 CAS F1 COMPARE WITH ONE 1747 01424 101000 NOP 1748 01425 0 01 01446 JMP AT01 IF GREATER OR EQUAL, JUMP TO REDUCE 1749 * THE ARGUMENT 1750 01426 0 10 00104 AT02 JST H$22 SAVE THE REDUCED ARGUMENT AS Z2 1751 01427 0 001170 DAC Z2 1752 01430 0 10 00530 JST M$22 SQUARE IT 1753 01431 0 001170 DAC Z2 1754 01432 0 10 01172 JST FPLY EVALUATE THE POLYNOMIAL IN THE REDICED 1755 01433 0 001500 DAC AT03 ARGUMENT SQUARED 1756 01434 0 10 00530 JST M$22 MULTIPLY RESULT BY THE REDUCED ARGUMENT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 50

1757 01435 0 001170 DAC Z2 1758 01436 0 12 01502 IRS SFAC INCREMENT THE SCALE FACTOR FLAG 1759 01437 0 01 01442 JMP *+3 NO SKIP-DON'T ADD THE SCALE FACTOR 1760 01440 0 10 00304 JST A$22 ADD SCALE FACTOR OF PI/2 1761 01441 0 001364 DAC HFPI 1762 01442 0 12 00650 IRS CTMP INCREMENT THE SIGN FLAG 1763 01443 0 10 00122 JST N$22 NO SKIP-TWO'S COMPLIMENT 1764 01444 0 12 01411 IRS ATNF SET-UP RETURN ADDRESS 1765 01445 -0 01 01411 JMP* ATNF RETURN 1766 01446 0 10 00104 AT01 JST H$22 SAVE THE ARGUMENT AS Z2 1767 01447 0 001170 DAC Z2 1768 01450 0 10 00100 JST L$22 LOAD FLOATING POINT MINUS ONE 1769 01451 0 000000 DAC FM1 1770 01452 0 10 00361 JST D$22 -1/ARGUMENT 1771 01453 0 001170 DAC Z2 1772 01454 0 12 01502 IRS SFAC SET SCALE FACTOR FLAG SO THAT SCALE FACTOR 1773 01455 0 01 01426 JMP AT02 1774 * 1775 * 1776 01456 040300 ATN0 DEC 1.0 01457 000000 1777 01460 140052 ATN1 OCT 140052,125312 01461 125312 1778 01462 037546 ATN2 OCT 37546,56762 01463 056762 1779 01464 140267 ATN3 OCT 140267,40034 01465 040034 1780 01466 037355 ATN4 OCT 37355,17302 01467 017302 1781 01470 140462 ATN5 OCT 140462,163506 01471 163506 1782 01472 037127 ATN6 OCT 37127,160377 01473 160377 1783 01474 141075 ATN7 OCT 141075,144377 01475 144377 1784 01476 036135 ATN8 OCT 36135,165645 01477 165645 1785 01500 0 001476 AT03 DAC ATN8 1786 01501 177770 DEC -8 1787 01502 000000 SFAC BSZ 1 1788 01503 177776 M2 OCT -2 1789 001503 PP12 EQU *-1 1790 EJCT
* NAME BASIC-MTHPAK DOC. 70181832000 REV. A PAGE 51

1791 * 1792 * 1793 END A$22 000304 A1 000342 A3 000351 A6 000334 ABSF 000014 AD1 000052 AD2 000065 AD3 000060 ADDR 000046 ARS 000625 ARSM 000626 AT01 001446 AT02 001426 AT03 001500 ATN0 001456 ATN1 001460 ATN2 001462 ATN3 001464 ATN4 001466 ATN5 001470 ATN6 001472 ATN7 001474 ATN8 001476 ATNF 001411 C100 000273 C1K 000711 C2 000506 C200 000572 C205 000454 C217 000603 C30K 001273 C400 000274 C77 000357 CNTR 000272 COSF 001274 CTMP 000650 D$22 000361 D2 000440 D3 000425 D4 000427 D5 000411 D6 000446 DA01 000174 DA02 000170 DADD 000155 E$01 000751 E$03 000730 E$04 000770 E$05 001004 E$06 000756 E$07 001012 E$22 000714 ERR 000000E ETMP 001021 EX01 001140 EX02 001164 EXP0 001144 EXP1 001146 EXP2 001150 EXP3 001152 EXP4 001154 EXP5 001156 EXP6 001160 EXP7 001162 EXPF 001107 EXPT 000152 F0 001060 F1 001144 FFRH 001366 FHLF 001370 FINT 000573 FM1 000000E FP01 001213 FP02 001205 FP03 001204 FPCR 001220 FPLY 001172 FTMP 001017 H$22 000104 HFPI 001364 HGHC 000450 HIGH 000200 IF01 000622 IFLT 000604 IN01 000665 IN02 000676 IN03 000677 IN04 000663 INTF 000651 K5E5 000044 L$22 000100 LARG 000070 LG01 001102 LG2E 001104 LHTS 000117 LLSM 000713 LMSK 001106 LN2 001166 LOG0 001060 LOG1 001062 LOG2 001064 LOG3 001066 LOG4 001070 LOG5 001072 LOG6 001074 LOG7 001076 LOG8 001100 LOGF 001023 LOW 000201 LOWC 000451 LRS 000360 LRSM 000712 M$11 000507 M$22 000530 M1 000000E M101 000516 M17 000527 M2 001503 M227 000707 M31 000356 M36 000710 M4 001272 M7 001165 MDAH 000455 MES 000154 MLMA 000275 MLNN 000276 MSEX 000153 N$22 000122 N2 000211 N3 000244 N4 000243 N6 000266 N7 000270 NORM 000202 PP12 001503 RN03 000042 RND1 000045 RNDF 000022 RSLT 000452 S$22 000277 SFAC 001502 SGNF 000000 SIN0 001350 SIN1 001352 SIN2 001354 SIN3 001356 SIN4 001360 SINF 001303 SN01 001335 SN02 001345 SN03 001362 SQ01 001255 SQRF 001223 T101 000644 TANF 001372 TEMP 000355 TINT 000627 TWPI 001350 UNPK 000134 Z0 001221 Z2 001170 0000 WARNING OR ERROR FLAGS DAP-16 MOD 2 REV. C 01-26-71
Previous File   Multiple Pages   Next File