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 <<SAVE RESOURCES FLAG ROUTINE>> 
      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 
                                                                                                                                                                                                                                