* ****************************** * SUBROUTINE TO CALCULATE INT(X) * ****************************** EINT STB SBOXX LDB .31 STB EXP LDB SBOXX JSB IFIX JMP EINT1 JSB .PACK JMP FR12A,I EINT1 LDA STK15 LDB SBOXX JMP FR12A,I SKP * ****************************** * SUBROUTINE TO CALCULATE LOG(X) * ****************************** * ELOG JSB .LOG JMP FR12A,I .LOG NOP SZA,RSS NON-ZERO ARGUMENT? JMP .LOG1 NO SSA YES, POSITIVE ARGUMENT? JSB ERROR NO LOGER STA XTEMP JSB .FLUN STB XTEMP+1 JSB FLOAT STA YTEMP STB YTEMP+1 Y=EXPO(X) LDA XTEMP LDB XTEMP+1 JSB .FADA,I DEF R22 STA UTEMP STB UTEMP+1 U=X+SQR(0.5) LDA XTEMP LDB XTEMP+1 JSB .FSBA,I DEF R22 JSB .FDVA,I DEF UTEMP STA UTEMP STB UTEMP+1 U=(X-SQR(0.5))/O JSB .FMPA,I DEF UTEMP JSB .FSBA,I DEF CCC STA XTEMP STB XTEMP+1 LDA MB LDB MB+1 JSB .FDVA,I DEF XTEMP JSB .FADA,I DEF AAA JSB .FMPA,I DEF UTEMP JSB .FSBA,I DEF HALF JSB .FADA,I DEF YTEMP JSB .FMPA,I DEF LE2 JMP .LOG,I ANS=LOG(2)*(EXPO(X)-0.5+U* .LOG1 JSB ERROR LOG OF ZERO LNZR LDA MNEG RETURN LDB B776 NEGATIVE JMP .LOG,I INFINITY R22 DEC .707106781 SQR(0.5) LE2 DEC .6931471806 LOG BASE E OF 2 AAA DEC 1.2920070987 MB DEC -2.6398577035 CCC DEC 1.6567626301 SPC 10 * **************************** * SUBROUTINE TO COMPUTE SGN(X) * **************************** * ESGN CLB SZA,RSS ZERO? JMP FR12A,I SSA,RSS NO, POSITIVE? LDB .2 YES, SET EXPONENT LDA FLGBT LOAD MANTISSA SZB POSITIVE? RAR YES, CORRECT MANTISSA JMP FR12A,I SKP * ****************************** * SUBROUTINE TO CALCULATE EXP(X) * ****************************** * EEXP JSB .EXP JMP FR12A,I .EXP NOP JSB .FMPA,I DEF L2E STA XTEMP STB XTEMP+1 X=Z*LOG2(E) JSB .IENT JMP .EXP1 STA INTE INTE = ENTIER(X) JSB FLOAT STA YTEMP STB YTEMP+1 Y=ENTIER(X) LDA INTE ADA M124 SSA,RSS INTE >=124 ? JMP EXPER-1 YES,ERROR ADA .244 INTE <-120 ? SSA JMP ZERE YES,ANS=0 LDA XTEMP LDB XTEMP+1 JSB .FSBA,I DEF YTEMP STA XTEMP STB XTEMP+1 X=X-ENTIER(X) JSB .FMPA,I DEF XTEMP STA UTEMP STB UTEMP+1 U=X**2 JSB .FADA,I DEF AAAA STA YTEMP STB YTEMP+1 Y=X**2+AAAA LDA BBBB LDB BBBB+1 JSB .FDVA,I DEF YTEMP STA YTEMP STB YTEMP+1 Y=BBBB/Y LDA CCCC LDB CCCC+1 JSB .FMPA,I DEF UTEMP JSB .FADA,I DEF DDDD JSB .FSBA,I DEF XTEMP JSB .FSBA,I DEF YTEMP STA YTEMP STB YTEMP+1 Y=X+DDDD+CCCC*X**2-Y LDA XTEMP LDB XTEMP+1 JSB .FDVA,I DEF YTEMP JSB .FADA,I DEF HALF ISZ INTE NOP JSB .PWR2 INTE OCT 0 JMP .EXP,I AND=(0.5+X/Y)*2**INTE ZERE CLA CLB JMP .EXP,I .EXP1 LDA X2TMP SSA JMP ZERE JSB ERROR EXPER LDA INF LDB M2 JMP .EXP,I M124 DEC -124 .244 DEC 244 AAAA DEC 87.417497202 BBBB DEC 617.9722695 CCCC DEC .03465735903 DDDD DEC 9.9545957821 L2E DEC 1.4426950409 SKP * ****************************** * SUBROUTINE TO COMPUTE CHEBY(X) * ****************************** * .CHEB NOP STA .IENT LDA .CHEB STA RSYM LDA .IENT JSB .FMPA,I DEF K2 STA X2TMP STB X2TMP+1 X2 =X+2 LDB RSYM,I STB CTMP C POINTS TO COEFFICIENT TABLE LDA 1,I INB LDB 1,I GET FIRST COEFF STA DTMP STB DTMP+1 D=C(N) CLA STA BTMP STA BTMP+1 B=0 LOPC ISZ CTMP ISZ CTMP N=N-1 LDA CTMP,I SZA,RSS C(N)=0 ? JMP COUT ZERO FLAGS END OF TABLE LDA BTMP NO LDB BTMP+1 STA ATMP STB ATMP+1 A=B LDA DTMP LDB DTMP+1 STA BTMP STB BTMP+1 B=D JSB .FMPA,I DEF X2TMP JSB .FSBA,I DEF ATMP JSB .FADA,I DEF CTMP,I STA DTMP STB DTMP+1 D=C(N) -A+B*X2 JMP LOPC COUT LDA DTMP LDB DTMP+1 JSB .FSBA,I DEF ATMP JSB .FMPA,I DEF HALF ISZ RSYM JMP RSYM,I * *** CONSTANTS FOR .CHEB * X2TMP BSS 2 ATMP BSS 2 BTMP BSS 2 CTMP BSS 2 DTMP BSS 2 SKP * ******************************************** * SUBROUTINE TO COMPUTE THE ENTIER OF A NUMBER * WHOSE EXPONENT IS LESS THAN 15 * ******************************************** * .IENT NOP STA X2TMP STORE HIGH PART LDA 1 MOVE LOW PART TO A AND MSK0 ISOLATE EXPONENT SLA,RAR JMP *+4 IF NEGATIVE OK ADA M15 SSA,RSS EXPO(X) > 14 JMP .IENT,I YES, ERROR RETURN ISZ .IENT NO BUMP RETURN POINT LDA X2TMP RESTORE HIGH PART JSB IFIX CALL ENTIER NOP LDA 1 JMP .IENT,I SPC 5 * ****************************** * SUBROUTINE TO FLOAT AN INTEGER * ****************************** * FLOAT NOP LDB FLOAT STB STK1 LDB .15 STB EXP CLB JSB .PACK JMP STK1,I SKP * **************************************** * SUBROUTINE TO MULTIPLY BY A POWER OF TWO * **************************************** * .PWR2 NOP SZA,RSS X=0 ? JMP .RET YES, ANS=0 STA X2TMP JSB .FLUN STB X2TMP+1 ADA .PWR2,I RAL AND MSK0 STA 1 ADB X2TMP+1 LDA X2TMP .RET ISZ .PWR2 JMP .PWR2,I HED *** MATRIX ROUTINES *** * ***************************** * MATRIX STMT EXECUTION CONTROL * ***************************** * EMAT LDA TEMPS,I LOAD FIRST WORD OF STMT ISZ TEMPS AND MSK1 ISOLATE OPERAND PART SZA JMP EMAT7 LDA TEMPS,I LOAD NEXT WORD OF STMT AND OPMSK STA MLBX1 CPA RDOP RSS JSB PRNIA,I * EMAT1 LDA TEMPS,I AND MSK1 SZA,RSS JMP EMAT4+4 JSB SSYMA,I INB,SZB,RSS JMP E8M1A,I ISZ TEMPS LDA 1,I STA B1 LDA MLBX1 CPA RDOP JMP EMAT5 ADB .2 LDA 1,I STA B1+1 AND MSK0 CMA,INA STA B2 STA B2+1 LDA 1,I ALF,ALF AND MSK0 CMA,INA STA B3 JSB LCK2A,I CLA STA B3+1 LDA TEMPS CPA PRADD JMP EMAT3 LDA TEMPS,I AND OPMSK CPA B3000 ISZ B3+1 JMP EMAT3 EMAT2 CLB CPB B3+1 JSB EDELM EMAT3 LDA B1,I ISZ B1 LDB B1,I ISZ B1 JSB ENOUT ISZ B2 JMP EMAT2 JSB OUTLN JSB OUTLN LDA B2+1 STA B2 ISZ B3 JMP EMAT3 EMAT4 LDB TEMPS CPB PRADD RSS JMP EMAT1 CLA,INA JSB SEXU,I JMP XEC4A,I * EMAT5 STB B2 LDA TEMPS,I AND OPMSK LDB TEMPS CPB PRADD CLA CPA B2200 JSB REDIM LDA B2 ADA .2 LDA 0,I JSB MDIM ARS CMA,INA STA B3 EMAT6 JSB FDAT,I STA B1,I ISZ B1 STB B1,I ISZ B1 ISZ B3 JMP EMAT6 JMP EMAT4 * EMAT7 JSB SSYMA,I INB LDA 1,I STA B3 STB B2 ADB .2 LDA 1,I STA B3+1 CLA,INA STA STK1 EMAT0 LDA TEMPS,I ISZ TEMPS SSA JMP EMA11 EMAT8 AND MSK1 SZA,RSS JMP EMA10 JSB SSYMA,I INB LDA 1,I STA B1 ADB .2 LDA 1,I STA B1+1 LDB TEMPS CPB PRADD JMP EMAT9 LDA TEMPS,I ARS ALF,ALF AND .63 ADA M6 STA STK1 LDA TEMPS,I AND MSK1 JSB SSYMA,I INB LDA 1,I STA B2 ADB .2 LDA 1,I STA B2+1 EMAT9 LDA STK1 ADA LMAP JSB 0,I JMP XEC4A,I LMAP DEF LBASE-1,I LBASE DEF REPLC DEF ADD DEF SUB DEF MULT DEF SZER DEF LCON DEF LIDN DEF LINV DEF TRAN DEF SMULT EMA10 LDA .10 STA STK1 JSB FETCA,I STA MLBX1 STB MLBX1+1 ISZ TEMPS ISZ TEMPS JMP EMAT0 EMA11 ALF,ALF ALF AND .31 ADA M8 STA STK1 ADA M8 SSA JMP EMA12 LDA TEMPS,I ISZ TEMPS ISZ TEMPS JMP EMAT8 EMA12 LDB TEMPS CPB PRADD JMP EMAT9 JSB REDIM JMP EMAT9 SKP * ******************************* * SUBROUTINE TO REDIMENSION ARRAY * ******************************* * REDIM NOP JSB MCKS BLF,BLF STB B3+1 CLB,INB ISZ TEMPS INDEX POINTER LDA TEMPS,I AND OPMSK CHECK OPERAND PART CPA LF JMP REDI1 JSB MCKS ISZ TEMPS REDI1 ISZ TEMPS ADB B3+1 STB B3+1 LDA B2 ADA .2 STB 0,I ADA M1 LDA 0,I JSB MDIM COMPUTE SIZE OF ASSIGNED STORAGE STA MLBX1+1 LDA B3+1 JSB MDIM COMPUTE STORAGE REQUIRED CMA,INA COMPLEMENT ADA MLBX1+1 SSA OK IF POSITIVE JSB ERROR E7 JMP REDIM,I SKP * ****************************************** * SUBROUTINE TO EVALUATE & CHECK A SUBSCRIPT * ****************************************** MCKS NOP JSB FETCA,I CALL FOR EVALUATION JSB SBFIX CONVERT TO INTEGER (ROUNDED) INB LDA 1 ADA M256 SSA,RSS JMP E6M1A,I JMP MCKS,I RETURN ** *** PREDEFINED FUNCTION JUMP TABLE ** ** PDFT DEF ETAB DEF ESIN DEF ECOS DEF ETAN DEF EATN DEF EEXP DEF ELOG DEF EABS DEF ESQR DEF EINT DEF ERND DEF ESGN SKP *** MATRIX ROUTINES EXECUTION * * *** SUBROUTINE GENERAL * GENER NOP SUBROUTINE GENERAL LDA B2+1 LOAD DIM FOR MATRIX 2 LDB B1+1 LOAD DIM FOR MATRIX 1 JSB COMPR CHECK ROW AND COL DIM GEN2 LDA B1+1 LDB B3+1 LOAD DIM FOR MATRIX 3 JSB COMPR CHECKS ROW AND COL DIM JSB MPY DEF T3 CMA,INA STA LPIV LOOP LDA B1,I ISZ B1 LDB B1,I ISZ B1 MOD1 NOP NOP STA B3,I ISZ B3 STB B3,I ISZ B3 MOD2 NOP NEXT FOUR INSTR ARE MOD NOP ISZ LPIV JMP LOOP COMPUTE NEXT ELEMENT JMP GENER,I * *** SUBROUTINE COMPARE * COMPR NOP CPA 1 RSS LERR JSB ERROR PRINT ERROR DIAGNOSTIC ALF,ALF AND MSK0 STA T3 LDA 1 AND MSK0 STA T4 JMP COMPR,I * *** SUBROUTINE LCHK * LCHK2 NOP LDA LCHK2 STA LCHK1 JMP *+5 LCHK1 NOP LDB B2 LDA B2+1 JSB LCHK4 TEST EACH TERM OF B1 LDB B1 LDA B1+1 JSB LCHK4 JMP LCHK1,I LCHK4 NOP SUBROUTINE TO TEST TERMS STB T6 SAVE JSB MDIM COMPUTE SIZE OF MATRIX ARS CMA,INA STA T7 COUNTER FOR ELEMENTS LCHK6 LDA T6,I ISZ T6 LDB T6,I ISZ T6 CPA MNEG COMPARE WITH PRESET QTY. JMP *+2 JMP LCHK5 CPB MNEG+1 JSB ERROR ERROR 'MAT UNASSIGNED' LCHK5 ISZ T7 JMP LCHK6 JMP LCHK4,I RETURN SKP * *** SUBROUTINE MATRIX ADD * ADD NOP LDA LPLUS OCTAL INSTR FOR FAD T18 ADD1 STA MOD1 LDA LPLUS+1 ADDRESS OF T18 STA MOD1+1 MODIFY ROUTINE GENERAL LDA INCB2 STA MOD2 MODIFY ROUTINE GENERAL STA MOD2+1 MODIFY ROUTINE GENERAL JSB LCHK1 JSB GENER ROUTINE GENERAL JMP ADD,I EXIT TO MAIN PROGRAM * *** SUBROUTINE MATRIX SUBTRACT * SUB NOP LDA SUB STA ADD LDA LMIN OCTAL INSTR FOR FSB T18 JMP ADD1 22255-80016 D