/PROGRAM BIO A-03-03 /CHANGES TO FLOATING POINT OUTPUT ROUTINE /TO ALLOW OPTIONAL FIXED POINT OUTPUT /IF (62)=0, OUTPUT FLOATING /OTHERWISE C(62) = NUMBER DIGITS /C(AC) = NUMBER OF DECIMAL PLACES /C(15) LOST DURING EXECUTION *7200 7200 0000 FOUT, 0 7201 3631 DCA I SCAD /SAVE C(AC) 7202 1045 TAD HORDER 7203 7710 SPA CLA 7204 1330 TAD SMINUS 7205 1327 TAD SPLUS 7206 4345 JMS ASCOUT /PRINT + OR - 7207 1376 TAD BFRST 7210 3015 DCA 15 /INITIALIZE AUTO-INDEX 7211 5234 JMP 7234 /CONVERT MANTISSA AND BUFFER THE DIGITS 7212 1324 RETN, TAD BEXP 7213 3044 DCA 44 /STORE DECIMAL EXPONENT 7214 4777 JMS I FXAD /GO TO OUTPUT THE NUMBER 7215 5221 JMP CRLF /FIXED POINT RETURN 7216 1343 TAD CHE /FLOATING POINT RETURN 7217 4345 JMS ASCOUT /PRINT E 7220 4737 JMS I EXPT /GO TO OUTPUT EXPONENT 7221 1056 CRLF, TAD SWIT1 7222 7650 SNA CLA /PRINT CR-LF 7223 5600 JMP I FOUT /NO, EXIT 7224 1341 TAD CARRTN /YES 7225 4345 JMS ASCOUT 7226 1342 TAD LNFEED 7227 4345 JMS ASCOUT 7230 5600 JMP I FOUT /EXIT 7231 5567 SCAD, SAC *7376 7376 5570 BFRST, BUFFER-1 7377 5400 FXAD, FIX *7301 7301 3415 DCA I 15 *7305 7305 3415 DCA I 15 *7310 7310 5212 JMP RETN *7325 7325 7772 7772 / / HORDER=45 SMINUS=7330 SPLUS=7327 BEXP=7324 CHE=7343 EXPT=7337 ASCOUT=7345 SWIT1=56 CARRTN=7341 LNFEED=7342 /IN THE COMMENTS BELOW- / F = NUMBER OF DIGITS TO BE OUTPUT / D = NUMBER OF DECIMAL PLACES / E = DECIMAL EXPONENT / P = NUMBER OF PLACES REMAINING TO BE / PRINTED BEFORE DECIMAL POINT *5400 5400 0000 FIX, 0 5401 1062 TAD 62 5402 7450 SNA /FLOATING OUTPUT 5403 5225 JMP R6 /YES, ROUND OFF TO 6 PLACES 5404 7041 CIA 5405 1367 TAD SAC 5406 7510 SPA / F-D 0 5407 5214 JMP .+5 /YES 5410 7240 CLA CMA 5411 1062 TAD 62 5412 3367 DCA SAC /MAKE D = F-1 5413 7040 CMA 5414 1044 TAD 44 5415 7500 SMA / F-D E 5416 7200 CLA /NO, ROUND OFF TO F PLACES 5417 1062 TAD 62 /YES 5420 7510 SPA / D+E 0 5421 5250 JMP PRNT-1 /YES, NO ROUNDING NEEDED, GO TO PRINT 5422 1356 TAD M6 /NO, ROUND TO D+E PLACES, 5423 7500 SMA /TO A MAXIMUM OF 6 PLACES 5424 7200 CLA 5425 1354 R6, TAD K7 5426 3366 DCA TEMP /SAVE NUMBER+1 OF PLACES TO ROUND TO 5427 1360 TAD BUFST 5430 1366 TAD TEMP /SET UP BUFFER ADDRESS AT WHICH 5431 3370 DCA PLCE /ROUNDING OFF SHOULD START 5432 1366 TAD TEMP 5433 7041 CIA /SET UP COUNT OF MAXIMUM NUMBER 5434 3366 DCA TEMP /OF CARRIES ALLOWABLE 5435 1353 TAD K4 5436 2770 RET, ISZ I PLCE /ADD 1 TO DIGIT AT CURRENT POSITION 5437 1770 TAD I PLCE 5440 1357 TAD M10 5441 7710 SPA CLA /CARRY REQUIRED 5442 5251 JMP PRNT /NO, GO TO OUTPUT 5443 3770 DCA I PLCE /YES, MAKE CURRENT DIGIT A ZERO 5444 2366 ISZ TEMP /BEGINNING OF BUFFER REACHED 5445 5313 JMP DECR /NO, DECREMENT BUFFER ADDRESS AND REPEAT 5446 2770 ISZ I PLCE /YES, SET MANTISSA TO 0.1 5447 2044 ISZ 44 /COMPENSATE BY INCREMENTING EXPONENT 5450 7200 CLA 5451 1360 PRNT, TAD BUFST 5452 3015 DCA 15 /SET AUTO-INDEX REGISTER 5453 1062 TAD 62 5454 7450 SNA / F = 0 5455 5342 JMP FLOP /YES, OUTPUT AS FLOATING NUMBER 5456 7041 CIA /NO, 5457 3370 DCA FCOUNT /SET UP COUNT TO PRINT F PLACES 5460 1370 TAD FCOUNT 5461 1044 TAD 44 5462 7540 SMA SZA / E F 5463 5317 JMP XXX /YES, PRINT X S 5464 1367 TAD SAC 5465 7500 SMA / E F-D 5466 7200 CLA /NO, TAKE P = E 5467 7041 CIA /YES, TAKE P = F-D 5470 1044 TAD 44 5471 7041 CIA 5472 3366 DCA TEMP /SET UP MINUS P 5473 1363 TAD M7 5474 3367 DCA SCOUNT /SET COUNT OF MAX. NO. OF SIG. FIGS. 5475 1044 BACK, TAD 44 5476 1366 TAD TEMP 5477 7650 SNA CLA / P = E 5500 5330 JMP DIG /YES, PRINT DIGIT 5501 1366 TAD TEMP /NO, 5502 7001 IAC 5503 7710 SPA CLA / P 1 5504 1362 TAD SPACE /YES, TAKE SPACE OTHERWISE ZERO 5505 4323 IN, JMS OUT /PRINT CHARACTER 5506 2366 ISZ TEMP /P CHARACTERS PRINTED 5507 5275 JMP BACK /NO 5510 1364 TAD POINT /YES, 5511 4761 JMS I OPUT /PRINT DECIMAL POINT 5512 5275 JMP BACK 5513 7040 DECR, CMA 5514 1370 TAD PLCE 5515 3370 DCA PLCE 5516 5236 JMP RET 5517 7200 XXX, CLA 5520 1365 TAD CHX 5521 4323 JMS OUT /PRINT X 5522 5320 JMP .-2 /AND REPEAT 5523 0000 OUT, 0 5524 4761 JMS I OPUT /PRINT CHARACTER 5525 2370 ISZ FCOUNT /F CHARACTERS PRINTED 5526 5723 JMP I OUT /NO, RETURN 5527 5600 JMP I FIX /YES, NUMBER FINISHED 5530 7040 DIG, CMA 5531 1044 TAD 44 /REDUCE E BY 1 5532 3044 DCA 44 5533 2367 ISZ SCOUNT /6 SIG. FIGS. PRINTED 5534 5340 JMP .+4 /NO 5535 7040 CMA /YES, 5536 3367 DCA SCOUNT /RESET COUNT TO -1 5537 5305 JMP IN /AND LEAVE C(AC) = 0 5540 1415 TAD I 15 /TAKE NEXT DIGIT FROM BUFFER 5541 5305 JMP IN 5542 1356 FLOP, TAD M6 /SET COUNT TO PRINT 5543 3370 DCA FCOUNT /6 DIGITS AFTER DECIMAL POINT 5544 4761 JMS I OPUT /PRINT 0 5545 1364 TAD POINT 5546 4761 JMS I OPUT /PRINT . 5547 2200 ISZ FIX /INCREMENT RETURN ADDRESS 5550 1415 TAD I 15 /TAKE NEXT DIGIT FROM BUFFER 5551 4323 JMS OUT /PRINT IT 5552 5350 JMP .-2 /AND REPEAT 5553 0004 K4, 4 5554 0007 K7, 7 5555 7775 M3, -3 5556 7772 M6, -6 5557 7766 M10, -12 5560 5570 BUFST, BUFFER-1 5561 7353 OPUT, 7353 5562 7760 SPACE, 240-260 5563 7771 M7, -7 5564 7776 POINT, 256-260 5565 0050 CHX, 330-260 5566 0000 TEMP, 0 SAC, 5567 0000 SCOUNT, 0 PLCE, 5570 0000 FCOUNT, 0 BUFFER, ASCOUT 7345 BACK 5475 BEXP 7324 BFRST 7376 BUFFER 5571 BUFST 5560 CARRTN 7341 CHE 7343 CHX 5565 CRLF 7221 DECR 5513 DIG 5530 EXPT 7337 FCOUNT 5570 FIX 5400 FLOP 5542 FOUT 7200 FXAD 7377 HORDER 0045 IN 5505 K4 5553 K7 5554 LNFEED 7342 M10 5557 M3 5555 M6 5556 M7 5563 OPUT 5561 OUT 5523 PLCE 5570 POINT 5564 PRNT 5451 RET 5436 RETN 7212 R6 5425 SAC 5567 SCAD 7231 SCOUNT 5567 SMINUS 7330 SPACE 5562 SPLUS 7327 SWIT1 0056 TEMP 5566 XXX 5517