100 REM linop.BAS  Copyright 1989 by Russell Kincaid
110 REM  Kincaid Engineering, Savage Road, Milford, NH 03055
120 REM VERSION 1.0 WRITTEN 9/22/1989
130 CLS
140 PRINT "**********************************************************************"
150 PRINT" THIS PROGRAM GENERATES A SPICE DECK THAT DESCRIBES AN OP AMP CIRCUIT"
160 PRINT"       Written by:  Russ Kincaid, Milford, NH 03055"
170 PRINT:PRINT"  This is shareware, see the file README.DOC"
180 PRINT"**********************************************************************"
190 PRINT:PRINT
200 ISD=1E-12 : P=3.14162 : RGB= 1000 : V=.02585 : R1=1000
210 INPUT"WHAT IS THE INTERNAL COMPENSATION CAPACITOR IN PF :";C2
220 IF C2<=0 THEN PRINT :PRINT "MUST BE GREATER THAN ZERO":GOTO 210
230 PRINT:PRINT"USE CAPITAL LETTERS ONLY":PRINT
240 INPUT"CAN AN EXTERNAL COMPENSATION CAPACITOR BE ATTACHED ";EXT$
250 IF EXT$="N" OR EXT$="NO" THEN 270
260 INPUT"IS IT CONNECTED FROM 1 PIN TO GND (1), OR BETWEEN TWO PINS (2) ";COMP
270 INPUT"POSITIVE SLEW RATE IN V/US :";S
280 INPUT"NEGATIVE SLEW RATE IN V/US :";SN
290 INPUT"INPUT BIAS CURRENT :";IB
300 INPUT"INPUT OFFSET CURRENT :";IOS
310 INPUT"NPN (1) OR PNP (2) AT INPUT";NPN
320 INPUT"INPUT OFFSET VOLTAGE :";VOFF
330 INPUT"GAIN IN DB (1) OR VOLTS/MV (2) ";Y
340 IF Y=1 THEN 360
350 INPUT"DC VOLTAGE GAIN IN V/MV ";A:A=A*1000: ADB=8.686*LOG(A) : GOTO 370
360 INPUT"DC VOLTAGE GAIN IN DB :";ADB : A=EXP(ADB/8.686)
370 INPUT"FIRST CUT FREQUENCY (1) OR ZERO dB FREQUENCY (2) ";Y
380 IF Y>2 OR Y<1 THEN PRINT" ONE OR TWO, DUMMY!":PRINT:GOTO 370
390 ON Y GOTO 400, 420
400 INPUT"FIRST CUT FREQUENCY (HZ)";F3DB 
410 W0=2*P*F3DB*(10^(ADB/20))/1000000! : GOTO 440
420 INPUT"ZERO DB FREQUENCY AS IF SINGLE CUT (IN mHZ)";F0
430 F3DB=F0/(10^(ADB/20))*1000000! : W0=2*P*F0
440 W3DB=2*P*F3DB
450 R2=1/W3DB/C2*1000000! : REM R2 IN MEGOHMS
460 INPUT"DIFFERENTIAL INPUT RESISTANCE IN MEGHOMS :";RIN
470 INPUT"DIFFERENTIAL INPUT CAPACITANCE IN PF  " ;CIN
480 INPUT"COMMON-MODE INPUT RESISTANCE IN MEGOHMS (ZERO IF NOT SPECIFIED) :";RCM
490 IF RCM=0 THEN 510
500 RCM= RCM-RIN/4
510 INPUT"PHASE MARGIN (1) OR 2ND CUT FREQ (2)";D
520 ON D GOTO 530,580
530 INPUT"PHASE MARGIN IN DEGREES :";PM :PM=PM*P/180
540 INPUT"ACTUAL 0dB FREQUENCY IN mHZ";F0:W0=2*P*F0
550 XC2=1/W0/C2 : P2=ATN(R2/XC2)
560 P3=P-P2-PM 
570 XC3=RGB/TAN(P3) : C3=1/XC3/W0*1000000! : GOTO 600 : REM C3 IN PF
580 INPUT"2ND CUT FREQ (MHZ) ";F2
590 C3=1/2/P/RGB/F2*1000000! : REM PICOFARADS
600 INPUT"OUTPUT RESISTANCE AT LOW FREQUENCY :";ROUT : L1=0
610 REM ****** END OF OP AMP PARAMETER INPUT ******
620 RS=R2*(1-1/1000)
630 VSLEWP=S*RS*C2-V*LOG(C2*S/ISD)
640 VSLEWN=SN*RS*C2-V*LOG(C2*SN/ISD)
650 IB1=IB+IOS/2 : IB2=IB-IOS/2
660 INPUT"WHAT WILL YOU NAME THIS MODEL : ";SUBNAM$
670 A1=ASC(LEFT$(SUBNAM$,1))
680 IF A1<65 OR A1 > 122 THEN PRINT"NAME MUST BEGIN WITH A LETTER":GOTO 660
690 NAM$=SUBNAM$+".MDL"
700 OPEN NAM$  FOR OUTPUT AS  #1
710 PRINT#1,""
720 IF EXT$="N" OR EXT$="NO" THEN 740
730  ON COMP GOTO 760,780
740 PRINT#1,".SUBCKT ";SUBNAM$;" 1 2 3 "
750 PRINT#1,"*** -IN +IN OUT V+ V- *** " :GOTO 800
760 PRINT#1,".SUBCKT ";SUBNAM$;" 1 2 3 7 "
770 PRINT#1,"*** -IN +IN OUT V+ V- COMP ***" :GOTO 800
780 PRINT#1,".SUBCKT ";SUBNAM$;" 1 2 3 7 12 "
790 PRINT#1,"*** -IN +IN OUT V+ V- COMP1 COMP2 ***"
800 PRINT#1,".MODEL DG D RS=1 IS=";ISD
810 PRINT#1,"VOFF 2 4 ";VOFF
820 K=RIN/2
830 PRINT#1,"RIN1 4 11 ";STR$(K)+"MEG"
840 PRINT#1,"RIN2 11 1 ";STR$(K)+"MEG"
850 IF RCM=0 THEN 880
860 K=RCM-RIN/4 : GOSUB 1230
870 PRINT#1,"RCM 11 0  ";STR$(K)+"MEG"
880 IF NPN=1 THEN 910
890 PRINT#1,"IB2 0 1 ";IB2
900 PRINT#1,"IB1 0 4 ";IB1 : GOTO 930
910 PRINT#1,"IB2 1 0 ";IB2
920 PRINT#1,"IB1 4 0 ";IB1
930 IF C1=0 THEN 950
940 PRINT#1,"C1 1 4 ";STR$(CIN)+"PF"
950 K=A:GOSUB 1230
960 PRINT#1,"EA 5 0 4 1 ";K
970 K=R2*(1-1/1000):GOSUB 1230
980 PRINT#1,"R2 6 7 ";STR$(K)+"MEG"
990 N$=STR$(C2)+"PF"
1000 IF COMP<2 THEN 1030
1010 PRINT#1,"C2 7 12 ";N$
1020 PRINT#1,"VC2 12 0 0" : GOTO 1040
1030 PRINT#1,"C2 7 0 ";N$
1040 PRINT#1,"D3 6 9 DG"
1050 PRINT#1,"D4 8 6 DG"
1060 K=R2/1000:GOSUB 1230
1070 PRINT#1,"R22 5 6 ";STR$(K)+"MEG"
1080 PRINT#1,"VSLEWP 9 0 ";VSLEWP
1090 PRINT#1,"VSLEWN 0 8 ";VSLEWN
1100 PRINT#1,"GB 0 10 7 0 .001"
1110 PRINT#1,"RGB 10 0 1K"
1120 K=C3 : GOSUB 1230
1130 PRINT#1,"C3 10 0 ";STR$(K)+"PF"
1140 K=GCM : GOSUB 1230
1150 PRINT#1,"GOUT 0 3 10 0 ";1/ROUT
1160 PRINT#1,"ROUT 3 0 ";ROUT
1170 PRINT#1,".ENDS ";SUBNAM$
1180 PRINT#1,"**********"
1190 CLOSE#1 
1200 PRINT:PRINT"USE TYPE COMMAND TO VIEW THE  FILE ";NAM$
1210 GOTO 1330
1220 REM ROUNDOFF ROUTINE
1230 IF K=0 THEN RETURN
1240 IF ABS(K)<1 THEN 1280
1250 FOR T=0 TO 8 : K2=K/10^T
1260 IF ABS(K2)<10 THEN 1310
1270 NEXT T : PRINT "ERROR":STOP
1280 FOR T=0 TO 8 : K2=K*10^T
1290 IF ABS(K2)>1 THEN 1320
1300 NEXT T : PRINT"ERROR": STOP
1310 K=10^T*INT(K2*1000+.5)/1000 : RETURN
1320 K=INT(K2*1000+.5)/1000/10^T : RETURN
1330 END


    Source: geocities.com/russlk/spice

               ( geocities.com/russlk)