ASMB,R,B,L NAM F2F.B END ASMB,R,B,L,X HED DUMMY CLRIO FOR RTE AND DOS NAM CLRIO,7 ENT CLRIO SPC 2 * CALLING SEQUENCE: * JSB CLRIO * DEF *+1 SPC 2 CLRIO NOP LDA CLRIO,I GET RETURN ADDRESS JMP 0,I AND RETURN END ASMB,R,B,L,F * * * N O V E M B E R 6 , 1 9 6 8 * * * * UTILITY ROUTINE CALL TO TANH * NAM %ANH,7,0,0,0,0,0,0,0 ENT %ANH EXT TANH %ANH NOP ENTRY/EXIT ISZ %ANH LDB %ANH LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB TANH CALL TO TANH ROUTINE ISZ %ANH JMP %ANH,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO EXP * NAM %XP,7,0,0,0,0,0,0,0 ENT %XP EXT EXP,ERR0 %XP NOP ENTRY/EXIT ISZ %XP LDB %XP LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB EXP CALL EXP ROUTINE JSB ERR0 ERROR RETURN ISZ %XP JMP %XP,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO SIN * NAM %IN,7,0,0,0,0,0,0,0 ENT %IN EXT SIN,ERR0 %IN NOP ENTRY/EXIT ISZ %IN LDB %IN LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB SIN CALL SIN ROUTINE JSB ERR0 ERROR RETURN ISZ %IN JMP %IN,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO COS * NAM %OS,7,0,0,0,0,0,0,0 ENT %OS EXT COS,ERR0 %OS NOP ENTRY/EXIT ISZ %OS LDB %OS LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB COS CALL COS ROUTINE JSB ERR0 ERROR ROUTINE ISZ %OS JMP %OS,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO TAN * NAM %AN,7,0,0,0,0,0,0,0 ENT %AN EXT TAN,ERR0 %AN NOP ENTRY/EXIT ISZ %AN LDB %AN LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB TAN CALL TO TAN ROUTINE JSB ERR0 ERROR RETURN ISZ %AN JMP %AN,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO ABS * NAM %BS,7,0,0,0,0,0,0,0 ENT %BS EXT ABS %BS NOP ENTRY/EXIT ISZ %BS LDB %BS WORD 1 ADDRESS OF CALL LDB 1,I GET PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB ABS CALL ABS ROUTINE ISZ %BS JMP %BS,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO ALOG * NAM %LOG,7,0,0,0,0,0,0,0 ENT %LOG EXT ALOG,ERR0 %LOG NOP ENTRY/EXIT ISZ %LOG LDB %LOG LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB ALOG CALL ALOG ROUTINE JSB ERR0 ISZ %LOG JMP %LOG,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO SQRT * NAM %QRT,7,0,0,0,0,0,0,0 ENT %QRT EXT SQRT,ERR0 %QRT NOP ENTRY/EXIT ISZ %QRT LDB %QRT LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB SQRT CALL TO SQRT ROUTINE JSB ERR0 ERROR ROUTINE ISZ %QRT JMP %QRT,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO ISIGN * NAM %IGN,7,0,0,0,0,0,0,0 ENT %IGN EXT SIGN,GETAD,ADRES %IGN NOP ENTRY/EXIT ISZ %IGN JSB GETAD GET A PARAMETER ADDRESS DEF %IGN,I LDA ADRES STA %10 ISZ %IGN JSB GETAD GET B PARAMETER ADDRESS DEF %IGN,I LDA ADRES STA %10+1 JSB SIGN CALL SIGN ROUTINE %10 DEF * DEF * ISZ %IGN JMP %IGN,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO FLOAT NAM %LOAT,7,0,0,0,0,0,0,0 ENT %LOAT EXT FLOAT %LOAT NOP ENTRY/EXIT ISZ %LOAT LDB %LOAT LDB 1,I PARAMETER ADDRESS LDA 1,I LOAD PARAMETER INTO A REGISTER JSB FLOAT CALL FLOAT ROUTINE ISZ %LOAT JMP %LOAT,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO IFIX NAM %FIX,7,0,0,0,0,0,0,0 ENT %FIX EXT IFIX %FIX NOP ISZ %FIX LDB %FIX LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB IFIX CALL TO IFIX SUBROUTINE ISZ %FIX JMP %FIX,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO ATAN * NAM %TAN,7,0,0,0,0,0,0,0 ENT %TAN EXT ATAN,ERR0 %TAN NOP ENTRY/EXIT ISZ %TAN LDB %TAN LDB 1,I PARAMETER ADDRESS DLD 1,I LOAD PARAMETER INTO A AND B REG JSB ATAN CALL TO ATAN ROUTINE JSB ERR0 ERROR RETURN ISZ %TAN JMP %TAN,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO IABS * NAM %ABS,7,0,0,0,0,0,0,0 ENT %ABS EXT IABS %ABS NOP ENTRY/EXIT ISZ %ABS LDB %ABS LDB 1,I LDA 1,I LOAD PARAMETER INTO A REGISTER JSB IABS CALL IABS ROUTINE ISZ %ABS JMP %ABS,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL TO ISIGN * NAM %SIGN,7,0,0,0,0,0,0,0 ENT %SIGN EXT ISIGN,GETAD,ADRES %SIGN NOP ISZ %SIGN JSB GETAD GET PARAMETER A ADDRESS DEF %SIGN,I LDA ADRES STA %10 ISZ %SIGN JSB GETAD GET PARAMETER B ADDRESS DEF %SIGN,I LDA ADRES STA %10+1 JSB ISIGN CALL TO ISIGN ROUTINE %10 DEF * PARAMETER A DEF * PARAMETER B ISZ %SIGN JMP %SIGN,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL %AND NAM %AND,7,0,0,0,0,0,0,0 EXT GETAD,ADRES %AND NOP ENTRY/EXIT ISZ %AND JSB GETAD GET PARAMETER A ADDRESS DEF %AND,I LDA ADRES LDA 0,I ISZ %AND JSB GETAD GET PARAMETER B ADDRESS DEF %AND,I LDB ADRES AND 1,I ISZ %AND JMP %AND,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE CALL %OR * NAM %OR,7,0,0,0,0,0,0,0 ENT %OR EXT GETAD,ADRES %OR NOP ISZ %OR JSB GETAD GET PARAMETER A ADDRESS DEF %OR,I LDA ADRES LDA 0,I ISZ %OR JSB GETAD GET PARAMETER B ADDRESS DEF %OR,I LDB ADRES IOR 1,I ISZ %OR JMP %OR,I RETURN END ASMB,R,B,L,F * * UTILITY ROUTINE %OT * NAM %OT,7,0,0,0,0,0,0,0 ENT %OT %OT NOP ENTRY/EXIT ISZ %OT LDB %OT LDB 1,I PARAMETER ADDRESS LDA 1,I LOAD PARAMETER INTO A REGISTER CMA COMPLEMENT ISZ %OT JMP %OT,I RETURN END ASMB,R,B,L,F HED CALL BY ANME TO ISSW NAM %SSW,7 ENT %SSW EXT ISSW %SSW NOP ISZ %SSW LDB %SSW LDB 1,I PARAMETER ADDRESS LDA 1,I LOAD PARAMETER INTO A JSB ISSW ISZ %SSW JMP %SSW,I RETURN END ASMB,R,B,L,F * * GET EFFECTIVE ADDRESS UTILITY ROUTINE * NAM GETAD,7,0,0,0,0,0,0,0 ENT GETAD,ADRES GETAD NOP ENTRY/EXIT STA TEMP SAVE A REGISTER LDA GETAD,I LOOP STA ADRES LDA TEMP LDA ADRES,I RAL,CLE,SLA,ERA JMP LOOP NOT EFFECT ADDR-GO TO NEXT LEVEL STA ADRES SAVE EFFECTIVE ADDRESS LDA TEMP RESTORE A REGISTER ISZ GETAD INCREMENT EXIT ADDRESS JMP GETAD,I RETURN ADRES NOP TEMP NOP END ASMB,R,B,L,F NAM TANH,6,0,0,0,0,0,0,0 ENT TANH EXT .PWR2,EXP,..FCM,ABS,.FLUN EXT $LIBR,$LIBX * * REAL TIME EXECUTIVE RE-ENTRANT LIBRARY ROUTINE * * * CALL.. * * DLD X (FLOATING) * JSB TANH (RESULT FLOATING) * * CALCULATE HYPERBOLIC TANGENT OF X. * TANH NOP JSB $LIBR DEF TDB STA SGN SAVE SIGN(X) JSB ABS STA X STB X+1 X=ABS(X) JSB .FLUN ADA M5 SSA,RSS X>=16 ? JMP CASEA YES ADA K7 SSA,RSS X>=.125 ? JMP CASEB YES ADA K8 SSA,RSS X>=.00005 ? JMP CASEC YES CASED LDA X LDB X+1 ABS(ANS)=X CKNEG STA X LDA SGN SSA WAS X<0 JMP COMP YES LDA X JMP EXIT COMP LDA X JSB ..FCM EXIT JSB $LIBX DEF TDB DEC 0 CASEA LDA K1 LDB K1+1 ABS(ANS)=1 JMP CKNEG CASEB LDA X LDB X+1 JSB .PWR2 DEF D1 JSB EXP NOP STA F STB F+1 F=EXP(2*X) FAD K1 STA T STB T+1 T=F+1 LDA F LDB F+1 FSB K1 FDV T JMP CKNEG ABS(ANS)=(F-1)/T CASEC LDA X LDB X+1 FMP A STA F STB F+1 F=A*X FMP F STA F2 STB F2+1 F2=F**2 FAD D STA T STB T+1 T=F2+D LDA C LDB C+1 FDV T FAD B FMP F2 FAD A STA T STB T+1 T=A+F2*(B+C/T) LDA F LDB F+1 FDV T JMP CKNEG ABS(ANS)=F/T M5 DEC -5 K7 DEC 7 K8 DEC 8 K1 DEC 1. A DEC 5.7707801636 B DEC .01732867951 C DEC 14.1384114018 D DEC 349.6699888 D1 DEC 1 TDB NOP DEC 12 NOP SGN OCT 0 X BSS 2 T BSS 2 F BSS 2 F2 BSS 2 END ASMB,R,B,L,F NAM .RTOR,6,0,0,0,0,0,0,0 ENT .RTOR EXT ALOG,EXP EXT $LIBR,$LIBX * * REAL TIME EXECUTIVE RE-ENTRANT LIBRARY ROUTINE * * * CALL.. * * JSB .RTOR (RESULT FLOATING) * DEF BASE (FLOATING) * DEF POWER (FLOATING) * (ERROR RETURN) * (NORMAL RETURN) * * CALCULATES BASE**POWER. * .RTOR NOP JSB $LIBR DEF TDB LDA TDB+2,I STA BASE ISZ TDB+2 LDB TDB+2,I STB PWR ISZ TDB+2 DLD PWR,I PICK UP POWER STA PWR STB PWR+1 DLD BASE,I PICK UP BASE STA BASE STB BASE+1 LDB PWR SZA,RSS BASE=0 ? JMP BZER YES SZB,RSS POWER=0 ? JMP PZER YES SSA BASE<0 ? JMP FAIL YES LDB BASE+1 JSB ALOG JMP FAIL+2 FMP PWR JSB EXP JMP FAIL+2 JMP EXIT ANS=EXP(POWER*ALOG(BASE)) BZER SZB SSB POWER<=0 ? JMP FAIL YES CLB NO JMP EXIT ANS=0 FAIL LDA ASCII LDB ASCII+1 JSB $LIBX DEF TDB DEC 0 PZER LDA E1 ANS=1 LDB E1+1 EXIT JSB $LIBX DEF TDB DEC 1 ASCII ASC 2,04UN E1 DEC 1. TDB NOP DEC 7 NOP BASE BSS 2 PWR BSS 2 END ASMB,R,B,L,F NAM TAN,6,0,0,0,0,0,0,0 ENT TAN EXT .PWR2,..FCM,.IENT,.CHEB,FLOAT EXT $LIBR,$LIBX * * REAL TIME EXECUTIVE RE-ENTRANT LIBRARY ROUTINE * * * CALLING SEQUENCE.. * * DLD X (FLOATING,RADIANS) * JSB TAN (RESULT FLOATING) * (ERROR RETURN) * (NORMAL RETURN) * * CALCULATES TAN(X) * TAN NOP JSB $LIBR DEF TDB FMP FOPI STA X STB X+1 X=4*X/PI FAD K1 JSB .PWR2 DEF DM2 JSB .IENT JMP FAIL JSB FLOAT JSB ..FCM JSB .PWR2 DEF D2 FAD X STA X STB X+1 X=X-4*ENTIER((X+1)/4) FSB K1 STA FLAG SSA X<1 ? JMP ELSE1 YES LDA K2 NO LDB K2+1 FSB X Y=2-X BOTH1 STA Y STB Y+1 FMP Y FMP K2 FSB K1 JSB .CHEB DEF COEFF FMP Y STA Y STB Y+1 Y=Y*CHEBY(2*Y**2-1) LDA FLAG SSA X<1 JMP ELSE2 YES LDA K1 NO LDB K1+1 FDV Y JMP EXIT ELSE1 LDA X LDB X+1 JMP BOTH1 Y=X FAIL LDA ASCII LDB ASCII+1 JSB $LIBX DEF TDB DEC 0 ELSE2 LDA Y LDB Y+1 EXIT JSB $LIBX DEF TDB DEC 1 ASCII ASC 2,09OR DM2 DEC -2 D2 DEC 2 FOPI DEC 1.273239545 4/PI K1 DEC 1. K2 DEC 2. COEFF DEC 1.4458E-8 DEC 2.013766E-7 DEC 2.804816E-6 DEC 3.906637E-5 DEC 5.4417038E-4 DEC 7.586101578E-3 DEC .10675392857 DEC 1.7701474227 OCT 0 TDB NOP DEC 8 NOP FLAG OCT 0 X BSS 2 Y BSS 2 END ASMB,R,B,L,F NAM EXP,6,0,0,0,0,0,0,0 ENT EXP EXT .IENT,FLOAT,.PWR2 EXT $LIBR,$LIBX * * REAL TIME EXECUTIVE RE-ENTRANT LIBRARY ROUTINE * * * CALL.. * * DLD X (FLOATING) * JSB EXP (RESULT FLOATING) * (ERROR RETURN) * (NORMAL RETURN) * * CALCULATES EXPONENTIAL OF X. * EXP NOP JSB $LIBR DEF TDB FMP L2E STA F STB F+1 F=X*LOG2(E) JSB .IENT JMP FAIL ERROR IF EXPO(F) >=15 STA INT INT=ENTIER(F) JSB FLOAT STA TMP STB TMP+1 TMP=ENTIER(F) LDA INT ADA M124 SSA,RSS F>=124 ? JMP FAIL YES, ERROR ADA E244 F<-120 ? SSA JMP ZER YES, ANS=0 LDA F LDB F+1 FSB TMP STA F STB F+1 F=F-ENTIER(F) FMP F STA F2 STB F2+1 F2=F**2 FAD A STA TMP STB TMP+1 TMP=F**2+A LDA B LDB B+1 FDV TMP STA TMP STB TMP+1 TMP=B/TMP LDA C LDB C+1 FMP F2 FAD D FSB F FSB TMP STA TMP TMP=-F+D+C*F**2-TMP STB TMP+1 LDA F LDB F+1 FDV TMP FAD HLF ISZ INT INT=INT+1 NOP JSB .PWR2 DEF INT JMP EXIT ANS=(.5+5/TMP)*2**INT FAIL LDA ASCII LDB ASCII+1 JSB $LIBX DEF TDB DEC 0 ZER CLA CLB EXIT JSB $LIBX DEF TDB DEC 1 ASCII ASC 2,07OF M124 DEC -124 E244 DEC 244 A DEC 87.417497202 B DEC 617.9722695 C DEC .03465735903 D DEC 9.9545957821 L2E DEC 1.4426950409 LOG BASE 2 OF E HLF DEC .5 TDB NOP DEC 10 NOP INT BSS 1 F BSS 2 TMP BSS 2 F2 BSS 2 END ASMB,R,B,L,F HED <> NAM RSFLG,7 * ENT RSFLG,#RSFG EXT .ENTR * * * THIS ROUTINE IS USED BY CERTAIN BASIC DEVICES SUBROUTINES TO * SET A FLAG(#RSFG). THIS FLAG IS INTEROGATED BY 'CALSB' WHICH IS * THE BASIC SUBROUTINE PARAMETER PASSING MODULE. IF THIS * FLAG IS SET BY CALLING THIS ROUTINE THEN BASIC WILL * PERFORM A SAVE RESOURCES TERMINATION. IF THIS ROUTINE IS NOT * CALLED (WHICH IS THE NORMAL CASE) THEN BASIC WILL PERFORM A * SERIAL RE-USABLE TERMINATION. * * THE ROUTINES THAT NEED TO CALL THIS ROUTINE ARE DEFINED AS * THOSE THAT STORE VARIABLES LOCALLY OR MODIFY THEMSELVES IN * ANY WAY WHAT-SO-EVER. AN EXAMPLE OF THIS WHERE A USER CALLS * A DEVICE SUBROUTINE TO STORE A DEVICE LOGICAL UNIT NUMBER * LOCALLY FOR USE BY SUBSEQUENT SUBROUTINE CALLS. * * RSFLG NOP JSB .ENTR DEF RSFLG CLA,INA SET FLAG FOR SAVE RESOURCE STA #RSFG TERMINATION JMP RSFLG,I * #RSFG DEC -1 END