.TITLE SCHEMA ;ELECTRONIC CIRCUIT MACROS--SCHEMATICS .MCALL .MOVF,.SIN,.COS,.PA,.SQRT,.PU,.PD,.CI,.LBSQ .MCALL .AND,.AMPL,.AR,.BOX,.C,.CRD,.D,.DASH,.FUSE,.J,.G,.L,.LED .MCALL .NAND,.NPN,.NOR,.OR,.PNP,.R,.V,.ZD .GLOBL .AND,.AMPL,.AR,.BOX,.C,.CRD,.D,.DASH,.FUSE,.G,.J,.L,.LED .GLOBL .NAND,.NOR,.OR,.R,.V,.ZD .GLOBL AND,AMPL,AR,BOX,C,CRD,D,DASH,FUSE,G,J,L,LED,NAND,NOR,OR,R,V,ZD .GLOBL .PAX,.PAY,.TRANS,NPN,PNP,.DEGRE A0=R0 A1=R1 A2=R2 A3=R3 .MACRO DEFINE X,Y .MOVF X,BX .MOVF Y,BY CALL DEFINE .ENDM .MACRO ROTATE X,Y .MOVF X,RX .MOVF Y,RY CALL ROTATE .ENDM ;AMPLIFIER, BY MARY DAHLE ;.AMPL X,Y,SIGN Equilateral triangle for amplifier. Draw line from ; previous point to X,Y. The apex of the triangle (output) ; is at X,Y, and the rest of the triangle is beyond the ; end of the line. For example, if the previous point was ; 1,2, and X,Y is 1,3, then the triangle will be directed ; upward. Usually the line should come into the amplifier ; from the right. The distance from vertex to the opposite ; side is 1 cm. Pen ends at X,Y. ; Optional SIGN causes +- signs to be drawn: ; If SIGN > 0, + sign near upper vertex ; If SIGN < 0, - sign near upper vertex ; If SIGN = 0, no signs drawn AMPL: .AMPL @2(R5),@4(R5) ;CALL AMPL(X,Y) AMPL(X,Y); RETURN SIGN: .BLKW 1 BYYY: .BLKW 2 BXXX: .BLKW 2 .AMPL: STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) .PA BXXX,BYYY LDF BXXX,A0 ;UPPER LT VERTEX LDF BYYY,A1 SUBF #1,A0 ADDF #0.577,A1 ;0.577=1/SQRT(3) .PA A0,A1 SUBF #1.154,A1 ;LOWER LT VERTEX .PA A0,A1 .PA BXXX,BYYY ;BACK TO RT VERTEX TST SIGN BNE DOPM JMP CONCLU DOPM: TST SIGN BLE NEGSIN LDF #1,A2 ;PUT + SIGN AT UPPER; A2=SIGN BR SXQ NEGSIN: LDF #-1,A2 ;PUT + SIGN AT LOWER SXQ: .PU LDF BXXX,A0 ;POINT (BXXX-0.9, BYYY+SIGN*0.25-0.1) SUBF #0.9,A0 LDF #0.25,A1 MULF A2,A1 ADDF BYYY,A1 SUBF #0.1,A1 .PA A0,A1 .LBSQ <+> LDF #-0.25,A1 ;POINT (BXXX-0.9, BYYY-SIGN*0.25-0.1) MULF A2,A1 ADDF BYYY,A1 SUBF #0.1,A1 .PA A0,A1 .LBSQ <-> .PA BXXX,BYYY ;BACK TO RT VERTEX .PD CONCLU: LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 RETURN ; .AND X,Y And gate, of dimension 1 cm. Drawn similar to .AMPL. AND: .AND @2(R5),@4(R5) RETURN ANDY: .BLKW 2 ANDX: .BLKW 2 .AND: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) LDF ANDX,A0 ;TRICK, SEE .NOR SUBF .PAX,A0 ADDF ANDX,A0 STF A0,ANDX LDF ANDY,A0 SUBF .PAY,A0 ADDF ANDY,A0 STF A0,ANDY DEFINE ANDX,ANDY ROTATE #0,#0 .PU LDF #-0.5,A1 ;PARABOLA X= 4*Y**2 MOV #21.,R0 LAND: LDF A1,A0 MULF A0,A0 MULF #4,A0 ROTATE A0,A1 .PD ADDF #0.05,A1 SOB R0,LAND ROTATE #1,#-0.5 .PU ROTATE #0,#0 .PD LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ;.AR ARROW, BY MARY DAHLE ;.MACRO .AR X,Y ;DRAWS ARROW FROM PRECEEDING PT (TAIL) TO (X,Y) (HEAD) AR: .AR @2(R5),@4(R5) ;CALL AR(X,Y) AR(X,Y); RETURN BYY: .BLKW 2 BXX: .BLKW 2 .AR: STF A0,-(SP) DEFINE BXX,BYY .PA BXX,BYY ;FOR UNROTATED ARROW, POSITION W.R.T. CENTER OF LINE IS (R/2,0) LDF RR,A0 ;X=A0=RR/2-0.35 MULF #0.5,A0 SUBF #0.35,A0 ROTATE A0,#0.15 ;Y=0.15 .PU ROTATE A0,#-0.15 ;Y=-0.15 .PD .PA BXX,BYY ;RETURN TO TIP OF ARROW LDF (SP)+,A0 RETURN ; .MACRO .BOX X,Y BOX: .BOX 2(R5),4(R5) RETURN ; .MACRO .BOX X,Y ;DRAWS BOX; ONE CORNER IS (.PAX,.PAY) BOXY: .BLKW 2 ;OTHER CORNER IS X,Y BOXX: .BLKW 2 .BOX: STF A0,-(SP) STF A1,-(SP) LDF .PAX,A0 ;PEN MUST BE AT (.PAX,.PAY) LDF .PAY,A1 .PA A0,BOXY .PA BOXX,BOXY .PA BOXX,A1 .PA A0,A1 .PA A0,BOXY .PA BOXX,BOXY LDF (SP)+,A1 LDF (SP)+,A0 RETURN ; .MACRO .C X,Y,P ;PLOTS CAPACITOR BETWEEN THIS & PREVIOUS POINT C: .C @2(R5),@4(R5) ;WORKS LIKE PA RETURN ;CALL C(X,Y) C(X,Y); P: .BLKW 1 ;1 IF +- TO LABEL CAP. PRECEEDING PT IS +. CAPY: .BLKW 2 CAPX: .BLKW 2 .C: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) STF A0,-(SP) STF A1,-(SP) DEFINE CAPX,CAPY ;PLOT 6 ROTATED $ SHIFTED PTS MOV #6,R0 MOV #CPX,R1 MOV #CPY,R2 LC: CMP R0,#3 ;IF I=4 THEN LIFT PEN TO CROSS DIELECTRIC BNE CC1 .PU BR CC2 CC1: CMP R0,#2 ;IF I=5 THEN PEN DOWN BNE CC2 .PD CC2: ROTATE (R1)+,(R2)+ SOB R0,LC TST P BGT DOSIGN JMP FIN DOSIGN: .PU ;DRAW +- ROTATE (R1)+,(R2)+ .PD ROTATE (R1)+,(R2)+ .PU ROTATE (R1)+,(R2)+ .PD ROTATE (R1)+,(R2)+ .PU ROTATE (R1)+,(R2)+ .PD ROTATE (R1)+,(R2)+ .PU ROTATE #0.1,#0 .PD FIN: .PA CAPX,CAPY LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN CPX: .FLT2 -0.1 -0.1 -0.1 0.1 0.1 0.1 -.3 -.2 -.25 -.25 .25 .25 CPY: .FLT2 0 0.2 -0.2 -0.2 0.2 0 .15 .15 .1 .2 .1 .2 ; .MACRO .CRD X,Y ;CURRENT-REGULATING DIODE. SEE DIODE CRD: .CRD @2(R5),@4(R5) ;CALL CRD(X,Y) CRD(X,Y); RETURN CRDY: .BLKW 2 CRDX: .BLKW 2 .CRD: DEFINE CRDX,CRDY ROTATE #-0.1,#0 .PU ROTATE #0,#0 .CI #0.1 ROTATE #0.1,#0 .PD ROTATE #0.1,#0.3 ROTATE #0.1,#-0.3 ROTATE #0.1,#0 .PA CRDX,CRDY RETURN ; .MACRO .D X,Y ;DIODE FROM PRECEEDING PT (ANODE) TO (X,Y)(CATHODE) D: .D @2(R5),@4(R5) ;CALL D(X,Y) D(X,Y); RETURN DY: .BLKW 2 DX: .BLKW 2 .D: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) DEFINE DX,DY MOV #9.,R0 ;PLOT 9 ROTATED & SHIFTED PTS MOV #DIODEX,R1 MOV #DIODEY,R2 LD: ROTATE (R1)+,(R2)+ SOB R0,LD .PA DX,DY MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN DIODEX: .FLT2 -0.1 -0.1 0.1 -0.1 -0.1 0.1 0.1 0.1 0.1 DIODEY: .FLT2 0 0.2 0 -0.2 0.2 0 -0.2 0.2 0 ; .MACRO .DASH X,Y ;DASHED LINE FROM PRECEEDING PT TO (X,Y) DASH: .DASH @2(R5),@4(R5) ;CALL DASH(X,Y) DASH(X,Y); RETURN DASHY: .BLKW 2 DASHX: .BLKW 2 .DASH: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) .MOVF .PAX,SAVPAX .MOVF .PAY,SAVPAY DEFINE DASHX,DASHY MOV #1,R0 ;=1 FOR PEN DOWN, -1 FOR PEN UP CLRF A0 ;DISTANCE ALONG LINE LDASH: TST R0 BGT PENDOW .PU BR DASHQ PENDOW: .PD DASHQ: NEG R0 ADDF #0.15,A0 ;DASH IS 0.15 cm CMPF RR,A0 CFCC BLT DASHZ ;DRAW DASHES FROM LAST POINT (DASHX,DASHY) TO STARTING PT LDF A0,A1 ;X=SAVPAX+A0*COSINE MULF COSINE,A1 ADDF SAVPAX,A1 LDF A0,A2 ;Y=SAVPAY+A0*SINE MULF SINE,A2 ADDF SAVPAY,A2 .PA A1,A2 BR LDASH DASHZ: .PU LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN SAVPAX: .BLKW 2 SAVPAY: .BLKW 2 ; .MACRO .FUSE X,Y ;FUSE FUSE: .FUSE @2(R5),@4(R5) ;CALL FUSE(X,Y) FUSE(X,Y); RETURN FY: .BLKW 2 FX: .BLKW 2 .FUSE: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) MOV .DEGRE,-(SP) ;SAVE DEG/RAD MOV #1,.DEGRE ;COMPUTE IN DEG DEFINE FX,FY MOV #37.,R0 ;PLOT 9 ROTATED & SHIFTED PTS CLRF A0 ;ANGLE; 0<=ANGLE<=360 DEG LF: LDF A0,A1 ;A1= X= -0.3 + 0.0016666*ANGLE MULF #0.0016666,A1 SUBF #0.3,A1 .SIN A0,A2 ;A2= Y= 0.2* SIN(ANGLE) MULF #0.2,A2 ROTATE A1,A2 ADDF #10,A0 ;10 DEG STEPS SOB R0,LF .PA FX,FY MOV (SP)+,.DEGRE LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ;.MACRO .G ;DRAW DIAG LINE FOR GROUND G: CALL .G ;CALL G(0) G; RETURN .G: STF A0,-(SP) STF A1,-(SP) .MOVF .PAX,-(SP) ;SAVE STARTING PT ON STACK .MOVF .PAY,-(SP) LDF .PAX,A0 LDF .PAY,A1 SUBF #0.15,A0 SUBF #0.15,A1 .PA A0,A1 ADDF #0.3,A0 ADDF #0.3,A1 .PA A0,A1 .MOVF (SP)+,.PAY ;RESTORE TO STARTING PT .MOVF (SP)+,.PAX .PA .PAX,.PAY LDF (SP)+,A1 LDF (SP)+,A0 RETURN ; .MACRO J X,Y ;JUMPER: HALF CIRCLE FROM OLD PT TO X,Y J: .J @2(R5),@4(R5) RETURN JY: .BLKW 2 JX: .BLKW 2 .J: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) STF A3,-(SP) DEFINE JX,JY LDF RR,A0 DIVF #-2,A0 ;-RADIUS OF SEMICIRCLE=X CLRF A1 ;Y MOV #37.,R0 ;DO 36 LINES AT 5 DEG=180 DEG LJ: ROTATE A0,A1 LDF A0,A2 ;ROTATE -5 DEG X=COS(5)*X + SIN(5)*Y MULF #0.99619,A2 ; Y=-SIN(5)*X + COS(5)*Y LDF A1,A3 MULF #0.0871557,A3 ADDF A3,A2 LDF A0,A3 LDF A2,A0 MULF #0.0871557,A3 MULF #0.99619,A1 SUBF A3,A1 SOB R0,LJ LDF (SP)+,A3 LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ; .MACRO .L X,Y ;DRAW INDUCTOR FROM PREVIOUS POINT TO (X,Y) L: .L @2(R5),@4(R5) ;CALL L(X,Y) L(X,Y); RETURN LY: .BLKW 2 LX: .BLKW 2 .L: STF A0,-(SP) STF A1,-(SP) MOV .DEGRE,-(SP) ;STORE OLD RAD/DEG CLR .DEGRE ;RADIANS DEFINE LX,LY CLRF THETA LDF LENTH2,A0 ;HELIX=LENTH2/3.5 REVOLUTIONS/PI DIVF #3.5,A0 DIVF PI,A0 STF A0,HELIX ;PLOT ROTATED & SHIFTED PTS ;XCURLY=X BEFORE ROTATION=-LENTH2+RCURLY-RCURLY*COS(THETA)+HELIX*THETA LL: LDF THETA,A0 .COS A0,A0 MULF RCURLY,A0 LDF RCURLY,A1 SUBF A0,A1 SUBF LENTH2,A1 LDF THETA,A0 MULF HELIX,A0 ADDF A0,A1 STF A1,XCURLY LDF THETA,A1 ;YCURLY=RCURLY*SIN(THETA) .SIN A1,A1 MULF RCURLY,A1 STF A1,YCURLY ROTATE XCURLY,YCURLY LDF THETA,A0 ;THETA=THETA+DTHETA ADDF DTHETA,A0 STF A0,THETA CMPF #21.99,A0 ;FAR ENOUGH? CFCC BGT LL .PA LX,LY MOV (SP)+,.DEGRE ;RESTORE OLD DEG/RAD LDF (SP)+,A1 LDF (SP)+,A0 RETURN ; .MACRO .LED X,Y ;LED FROM PRECEEDING PT (ANODE) TO (X,Y)(CATHODE) LED: .LED @2(R5),@4(R5) ;CALL LED(X,Y) LED(X,Y); RETURN LEDY: .BLKW 2 LEDX: .BLKW 2 .LED: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) DEFINE LEDX,LEDY MOV #9.,R0 ;PLOT 9 ROTATED & SHIFTED PTS MOV #LEDXX,R1 MOV #LEDYY,R2 LLED: ROTATE (R1)+,(R2)+ SOB R0,LLED .PU ROTATE (R1)+,(R2)+ .PD MOV #4,R0 LLED1: ROTATE (R1)+,(R2)+ SOB R0,LLED1 .PU ROTATE (R1)+,(R2)+ .PD MOV #4,R0 LLED2: ROTATE (R1)+,(R2)+ SOB R0,LLED2 .PU ROTATE #0.1,#0 .PD .PA LEDX,LEDY MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN LEDXX: .FLT2 -0.1 -0.1 0.1 -0.1 -0.1 0.1 0.1 0.1 0.1 .FLT2 -0.25 -0.5 -0.45 -0.5 -0.25 .FLT2 -0.25 -0.5 -0.45 -0.5 -0.25 LEDYY: .FLT2 0 0.2 0 -0.2 0.2 0 -0.2 0.2 0 .FLT2 0.1 0.35 0.15 0.35 0.3 .FLT2 0.5 0.75 0.55 0.75 0.7 ; .NAND X,Y NAND gate, of dimension 1 cm. Drawn similar to .AMPL NAND: .NAND @2(R5),@4(R5) RETURN NANDY: .BLKW 2 NANDX: .BLKW 2 .NAND: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) LDF NANDX,A0 ;TRICK, SEE .NOR SUBF .PAX,A0 ADDF NANDX,A0 STF A0,NANDX LDF NANDY,A0 SUBF .PAY,A0 ADDF NANDY,A0 STF A0,NANDY DEFINE NANDX,NANDY ROTATE #0,#0 .PU LDF #-0.5,A1 ;PARABOLA X= 0.2 + 3.2*Y**2 MOV #21.,R0 LNAND: LDF A1,A0 MULF A0,A0 MULF #3.2,A0 ADDF #0.2,A0 ROTATE A0,A1 .PD ADDF #0.05,A1 SOB R0,LNAND ROTATE #1,#-0.5 .PU ROTATE #0.1,#0 .CI #0.1 ROTATE #0,#0 .PD LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ; .NOR X,Y NOR gate, of dimension 1 cm. Drawn similar to .AMPL. NOR: .NOR @2(R5),@4(R5) RETURN NORY: .BLKW 2 NORX: .BLKW 2 .NOR: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) ;TRICK ROTATE MACRO: BECAUSE WE WANT OUTPUT OF NOR-GATE TO BE AT 0,0, ;ADD SOME MORE TO NORX & NORY: LDF NORX,A0 SUBF .PAX,A0 ADDF NORX,A0 STF A0,NORX LDF NORY,A0 SUBF .PAY,A0 ADDF NORY,A0 STF A0,NORY DEFINE NORX,NORY ROTATE #0,#0 .PU CLRF A1 ;PARABOLA X= 1.834*Y**2 +0.7831*Y +0.2 MOV #11.,R0 LNOR: LDF A1,A0 MULF #1.834,A0 ADDF #0.7831,A0 MULF A1,A0 ADDF #0.2,A0 ROTATE A0,A1 .PD ADDF #0.05,A1 SOB R0,LNOR LDF #0.5,A1 ;PARABOLA X= 0.56*Y**2 +0.94 MOV #11.,R0 LNOR3: LDF A1,A0 MULF A0,A0 MULF #0.56,A0 ADDF #0.94,A0 ROTATE A0,A1 SUBF #0.1,A1 SOB R0,LNOR3 LDF #-0.5,A1 ;PARABOLA X= 1.834*Y**2 -0.7831*Y +0.2 MOV #11.,R0 LNOR2: LDF A1,A0 MULF #1.834,A0 SUBF #0.7831,A0 MULF A1,A0 ADDF #0.2,A0 ROTATE A0,A1 ADDF #0.05,A1 SOB R0,LNOR2 .PU ROTATE #0.1,#0 .CI #0.1 ROTATE #0,#0 .PD LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ;TRANSISTOR; PEN AT BASE LEAD INITIALLY ; .MACRO .NPN EX,EY,CX,CY ;PEN REMAINS AT (CX,CY) WHEN DONE NPN: .NPN @2(R5),@4(R5),@6(R5),@10(R5) RETURN ; .MACRO .PNP EX,EY,CX,CY PNP: .PNP @2(R5),@4(R5),@6(R5),@10(R5) RETURN TYPE: .BLKW 1 ;0 FOR NPN, 1 FOR PNP CY: .BLKW 2 ;COORDS OF EMITTER, BASE COLLECTOR CX: .BLKW 2 EY: .BLKW 2 EX: .BLKW 2 .TRANS: STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) STF A3,-(SP) LDF EX,A0 ;CENTER OF TRANSISTOR AT (A0,A1) ADDF CX,A0 ;A0 = 0.5*(.PAX+ 0.5*(EX+CX) MULF #0.5,A0 ADDF .PAX,A0 MULF #0.5,A0 LDF .PAY,A1 ;A1=.PAY .PA A0,A1 LDF A0,A2 LDF A1,A3 ;DRAW BROAD VERTICAL LINE ADDF #0.4,A3 .REPT 4 .PA A2,A3 SUBF #0.8,A3 .PA A2,A3 SUBF #0.03,A2 ADDF #0.8,A3 .ENDR LDF A1,A3 CMPF EY,A1 ;IS EMITTER ABOVE OR BELOW? CFCC BGT Q4 SUBF #0.2,A3 BR Q5 Q4: ADDF #0.2,A3 Q5: .PA A0,A3 TST TYPE BEQ NPNZ .PA EX,EY ;DRAW PNP TRANSISTOR .AR A0,A3 JMP COLECT NPNZ: DEFINE EX,EY ;TIP OF ARROW WILL BE AT (A2,A3) LDF #0.6,A2 ;A3 = A3 + 0.6*SINE MULF SINE,A2 ADDF A2,A3 LDF #0.6,A2 ;A2 = A0 + 0.6*COSINE MULF COSINE,A2 ;ARROW IS 0.6 cm FROM VERT LINE IN TRANS ADDF A0,A2 .AR A2,A3 .PA EX,EY COLECT: .PU LDF A1,A3 CMPF CY,A3 ;IS TRANSISTOR UPSIDE DOWN? CFCC BGT Q1 SUBF #0.2,A3 BR Q2 Q1: ADDF #0.2,A3 ;DRAW COLLECTOR Q2: .PA A0,A3 .PD Q3: .PA CX,CY LDF (SP)+,A3 LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 RETURN ; .OR X,Y OR gate, of dimension 1 cm. Drawn similar to .AMPL. OR: .OR @2(R5),@4(R5) RETURN ORY: .BLKW 2 ORX: .BLKW 2 .OR: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) LDF ORX,A0 ;TRICK, SEE .NOR SUBF .PAX,A0 ADDF ORX,A0 STF A0,ORX LDF ORY,A0 SUBF .PAY,A0 ADDF ORY,A0 STF A0,ORY DEFINE ORX,ORY ROTATE #0,#0 CLRF A1 ;PARABOLA X= 2.166*Y**2 +1.0167*Y MOV #11.,R0 LOR: LDF A1,A0 MULF #2.166,A0 ADDF #1.016,A0 MULF A1,A0 ROTATE A0,A1 ADDF #0.05,A1 SOB R0,LOR LDF #0.5,A1 ;PARABOLA X= 0.56*Y**2 +0.94 MOV #11.,R0 LOR3: LDF A1,A0 MULF A0,A0 MULF #0.56,A0 ADDF #0.94,A0 ROTATE A0,A1 SUBF #0.1,A1 SOB R0,LOR3 LDF #-0.5,A1 ;PARABOLA X= 2.166*Y**2 -1.0167*Y MOV #11.,R0 LOR2: LDF A1,A0 MULF #2.166,A0 SUBF #1.016,A0 MULF A1,A0 ROTATE A0,A1 ADDF #0.05,A1 SOB R0,LOR2 LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ; .MACRO .R X,Y ;DRAW RESISTOR FROM PRECEEDING PT TO (X,Y) R: .R @2(R5),@4(R5) ;CALL R(X,MY) R(X,Y); RETURN RRY: .BLKW 2 RRX: .BLKW 2 .R: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) DEFINE RRX,RRY ;PLOT 7 ROTATED & SHIFTED PTS MOV #7,R0 MOV #PPX,R1 MOV #PPY,R2 LR: ROTATE (R1)+,(R2)+ SOB R0,LR .PA RRX,RRY MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN PPX: .FLT2 -0.25 -0.2 -0.1 0 0.1 0.2 0.25 ;POINTS ON RESISTOR PPY: .FLT2 0 -0.15 0.15 -0.15 0.15 -0.15 0 ; .MACRO .V X,Y DRAW VOLTAGE SOURCE BETWEEN PRECEEDING POINT ;(NEGATIVE) & (X,Y) (POSITIVE). BY MARY DAHLE V: .V @2(R5),@4(R5) ;CALL V(X,Y) V(X,Y); RETURN VY: .BLKW 2 VX: .BLKW 2 .V: DEFINE VX,VY ;DRAW LINE FROM PREVIOUS PT TO EDGE OF CIRCLE ROTATE #-0.5,#0 ;DRAW CIRCLE OF RADIUS 0.5 cm AT (CNTRX,CNTRY) .PU .PA CNTRX,CNTRY .CI #0.5 ROTATE #-0.4,#0 ;WRITE MINUS SIGN .PD ROTATE #-0.2,#0 .PU ROTATE #0.2,#0 ;WRITE PLUS SIGN .PD ROTATE #0.4,#0 .PU ROTATE #0.3,#-0.1 .PD ROTATE #0.3,#0.1 .PU ;DRAW LINE FROM RIGHT SIDE OF CIRCLE TO (X,Y) ROTATE #0.5,#0 .PD .PA BX,BY RETURN ; .MACRO .ZD X,Y ;ZENER DIODE; PRECEDING PT IS CATHODE ZD: .ZD @2(R5),@4(R5) ;CALL ZD(X,Y) ZD(X,Y); RETURN ZY: .BLKW 2 ZX: .BLKW 2 .ZD: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) DEFINE ZX,ZY MOV #13.,R0 ;PLOT 13 ROTATED & SHIFTED PTS MOV #ZDX,R1 MOV #ZDY,R2 LZ: ROTATE (R1)+,(R2)+ SOB R0,LZ .PA ZX,ZY MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN ZDX: .FLT2 -0.1 -0.1 0.1 -0.1 -0.1 0.1 0.1 0 0.1 0.1 0.2 0.1 0.1 ZDY: .FLT2 0 0.2 0 -0.2 0.2 0 -0.2 -0.3 -0.2 0.2 0.3 0.2 0 ;SUBROUTINE DEFINE COMPUTES RR, CNTRX, CNTRY, SINE, COSINE BY: .BLKW 2 BX: .BLKW 2 DEFINE: STF A0,-(SP) STF A1,-(SP) ;GET PREVIOUS POINT FROM .PA SUBROUTINE LDF .PAY,A0 ;RR=SQRT(SQR(.PAX-BX)+SQR(.PAY-BY)) SUBF BY,A0 MULF A0,A0 LDF .PAX,A1 SUBF BX,A1 MULF A1,A1 ADDF A1,A0 .SQRT A0,A0 STF A0,RR LDF BY,A0 ;SINE=(BY-.PAY)/RR SUBF .PAY,A0 DIVF RR,A0 STF A0,SINE LDF BX,A0 ;COSINE=(BX-.PAX)/RR SUBF .PAX,A0 DIVF RR,A0 STF A0,COSINE LDF .PAX,A1 ;CENTER OF X=CNTRX=(.PAX+BX)/2 ADDF BX,A1 DIVF #2,A1 STF A1,CNTRX LDF .PAY,A1 ;CENTER OF Y=CNTRY=(.PAY+AB)/2 ADDF BY,A1 DIVF #2,A1 STF A1,CNTRY LDF (SP)+,A1 LDF (SP)+,A0 RETURN ;SUBROUTINE ROTATE & PLOT RY: .BLKW 2 RX: .BLKW 2 ROTATE: STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) LDF RX,A0 ;X=COSINE*RX-SINE*RY+CNTRX MULF COSINE,A0 LDF RY,A2 MULF SINE,A2 SUBF A2,A0 ADDF CNTRX,A0 LDF RX,A2 ;Y=SINE*RX+COSINE*RY+CNTRY MULF SINE,A2 LDF RY,A1 MULF COSINE,A1 ADDF A1,A2 ADDF CNTRY,A2 .PA A0,A2 LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 RETURN RR: .BLKW 2 SINE: .BLKW 2 COSINE: .BLKW 2 CNTRX: .BLKW 2 CNTRY: .BLKW 2 PI: .FLT2 3.14159 RAD: .FLT2 57.29578 ;180/PI THETA: .BLKW 2 DTHETA: .FLT2 0.2 LENTH2: .FLT2 0.3 ;LENGTH OF HELIX DIVIDED BY 2 HELIX: .BLKW 2 RCURLY: .FLT2 0.1 XCURLY: .BLKW 2 YCURLY: .BLKW 2 .END