.TITLE AVDEV ;BY MARY DAHLE ;COMPUTES AVERAGE & STD. DEV. OF ARRAY ;.MACRO .AVDEV X,N,AV,DEV ;X=ADDRESS OF ARRAY X HAVING N REAL NUMBERS .MCALL .MOVF,.AVDEV ;AV=MEAN; DEV=STD DEV .GLOBL .AVDEV,AVDEV,.SQRT AVDEV: .AVDEV 2(R5),@4(R5),@6(R5),@10(R5) RETURN ;CALL AVDEV(X,N,AV,DEV) AVDEV(X,N,AV,DEV); A0=R0 A1=R1 A2=R2 DEV: .BLKW 2 AV: .BLKW 2 N: .BLKW 1 X: .BLKW 1 .AVDEV: MOV R0,-(SP) MOV R1,-(SP) STF A0,-(SP) STF A1,-(SP) STF A2,-(SP) MOV X,R0 ;ARRAY POINTER MOV N,R1 CLRF A0 ;SUM X CLRF A1 ;SUM X**2 AVLOOP: LDF (R0)+,A2 ADDF A2,A0 ;SUM NUMBERS MULF A2,A2 ADDF A2,A1 ;SUM SQUARES SOB R1,AVLOOP LDCIF N,A2 DIVF A2,A0 ;AV STF A0,AV MULF A0,A0 ;VAR=(A1-N*AV**2)/(N-1) MULF A2,A0 SUBF A0,A1 SUBF #1,A2 DIVF A2,A1 ABSF A1 ;ABS.VALUE IF ROUNDOFF MAKES A1<0 STF A1,.SQRT-4 CALL .SQRT .MOVF .SQRT-10,DEV ;DEV=SQRT(VAR) LDF (SP)+,A2 LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R1 MOV (SP)+,R0 RETURN .END .MCALL .AA,.AXES,.CI,.DI,.LBS,.LBL,.OA,.PA,.PD,.PU,.AVDEV,.BINOM .MCALL .A,.AR,.C,.D,.G,.L,.R,.V,.SCALE,.SI,.SP,.XMTB,.SETDE,.SETRA .MCALL .CD,.CL,.CR,.CU,.CPOS,.CMOV,.CNEX,.DWL,.E,.EL,.ELL,.ELR,.RIS .MCALL .SWL,.VTP,.VTV,.VTCR,.INVM,.FACT,.GAMMA,.RAND,.RANDS,.RANOR .MCALL .DETM .GLOBL MAA,MAXES,MCI,MDI,MLBL,MLBS,MOA,MPA,MPD,MPU,MSCALE,MSI,MSP .GLOBL MA,MAR,MC,MD,MG,ML,MR,MV,MXMTB,MXMTS,MAVDEV,MBINOM,MFACT .GLOBL MCD,MCL,MCMOV,MCNEX,MCPOS,MCR,MCU,MDWL,ME,MEL,MELL,MELR,MRIS .GLOBL MVTP,MVTV,MVTCR,MINVM,MSWL,MGAMMA,MRAND,MRANDS,MRANOR,MDETM ;MA, TRIANGLE FOR AMPLIFIER. THE INPUT(S) COME FROM THE LEFT. ;POINT (X,Y) IS THE VERTEX OF TRIANGLE (THE OUTPUT) AT RIGHT. THE DISTANCE ;FROM THE LEFT SIDE OF THE TRIANGLE TO (X,Y) IS 1 cm. ;FORTRAN ;PASCAL ;CALL MA(X,Y) MA(X,Y); MA: .A @2(R5),@4(R5) RETURN ;MAA, ARC ABSOLUTE. (X,Y) IS THE CENTER OF ROTATION OF THE ARC. ;THE ARC STARTS AT THE CURRENT PEN POSITION AND ROTATES COUNTER-CLOCKWISE A ;DEG. IF A < 0, ROTATION IS CLOCKWISE. ;CALL MAA(X,Y,ANGLE) MAA (X, Y, ANGLE); MAA: .AA @2(R5),@4(R5),@6(R5) RETURN ;MAR, DRAWS ARROW FROM PRECEEDING POINT (TAIL) TO (X,Y) (ARROW HEAD) ;CALL MAR(X,Y) MAR(X,Y); MAR: .AR @2(R5),@4(R5) RETURN ;AXES, DRAWS AXES WITH ABSCISSA & ORDINATE LABELED BY STRINGS SX,SY. ;THE AXES TAKE INTO ACCOUNT SCALING. ;CALL MAXES (LABELX, LABELY) MAXES (LABELX, LABELY); MAXES: MOV #25.,R0 MOV 2(R5),R1 ;=ADDRESS OF STRING LABELX MOV #BUFFER,R2 LOOP1: MOVB (R1)+,(R2)+ SOB R0,LOOP1 CLRB BUFFER+25. MOV #25.,R0 MOV 4(R5),R1 ;=ADDRESS OF STRING LABELY MOV #BUF2,R2 LOOP2: MOVB (R1)+,(R2)+ SOB R0,LOOP2 CLRB BUF2+25. .AXES #BUFFER,#BUF2 RETURN ;MBINOM, BINOMICAL COEFF CALL MBINOM(10,5) MBINOM(N,I); MBINOM: .BINOM @2(R5),@4(R5),@6(R5) RETURN ;MC, CAPACITOR. WORKS LIKE PA ;CALL MC(X,Y) MC(X,Y); MC: .C @2(R5),@4(R5) RETURN ;MCD MOVES CURSOR DOWN N SPACES MCD: .CD @2(R5) ;CALL MCD(7) N:=7; MCD(N); RETURN ;MCI, DRAWS CIRCLE OF RADIUS R cm CENTERED ON CURRENT PEN POSITION MCI: .CI @2(R5) ;CALL MCI(3.6) MCI(R); RETURN ;MCL CURSOR LEFT N MCL: .CL @2(R5) ;CALL MCL(7) N:=7; MCL(N); RETURN ;MCMOV ;MOVE CURSOR TO (ROW,COLUMN) ;1 <= ROW <= 24; 1 <= COLUMN <= 80 MCMOV: .CMOV @2(R5),@4(R5) ;CALL MCMOV(13,7) I:=3; J:=16; MCMOV(I,J); RETURN ;MCNEX ;MOVE CURSOR TO BEGINNING OF NEXT LINE MCNEX: .CNEX ;CALL MCNEX MCNEX; RETURN ;MCPOS GIVE POSITION I,J OF CURSOR WHEN BYTE B TYPED MCPOS: .CPOS @2(R5),@4(R5),@6(R5) ;CALL MCPOS(I,J,B) ;MCPOS(I,J,B) ;MCR CURSOR RIGHT N MCR: .CR @2(R5) ;CALL MCR(7) N:=4; MCR(N); RETURN ;MCU CURSOR UP MCU: .CU @2(R5) ;CALL MCR(2) N:=2; MCU(2); RETURN ;MDETM DETERMINATE ;CALL MDETM(A,N,D) MDETM (A,N,D); MDETM: .DETM 2(R5),@4(R5),@6(R5) RETURN ;MD DIODE; WORKS LIKE PA. CATHODE IS CONNECTED TO (X,Y) MD: .D @2(R5),@4(R5) ;CALL MD(X,Y) MD(X,Y); RETURN ;DI, ROTATES LETTERS BY ANGLE RADIANS. POS. IS COUNTERCLOCKWISE. MDI: .DI @2(R5) ;CALL MDI(ANGLE) MDI(ANGLE); RETURN ;MDWL DOUBLE WIDTH LETTERS ON LINE WHERE CURSOR IS MDWL: .DWL ;CALL MDWL MDWL; RETURN ;ME ERASE SCREEN, BUT NOT GRAPH ME: .E ;CALL ME ME; RETURN ;MEL ERASE LINE WHERE CURSOR IS MEL: .EL ;CALL MEL MEL; RETURN ;MELL ERASE LINE UNDER & LEFT OF CURSOR MELL: .ELL ;CALL MELL MELL; RETURN ;MELR ERASE LINE UNDER & TO RIGHT OF CURSOR MELR: .ELR ;CALL MELR MELR; RETURN ;MFACT, FACTORIAL ;CALL MFACT(7,F) MFACT(N,F); MFACT: .FACT @2(R5),@4(R5) RETURN ;MG GROUND (DIAGONAL LINE) AT CURRENT PEN POSITION MG: CALL .G ;CALL MG(DUMMY) MG; RETURN ;MGAMMA, GAMMA FUNCTION MGAMMA: .GAMMA @2(R5),@4(R5) ;CALL GAMMA(X,Y) GAMMA(X,Y); RETURN ;MINVM AI=INVERSE OF A. MATRIX IS DxD, BUT ONLY NxN PART OF IT USED MINVM: .INVM 2(R5),4(R5),@6(R5),@10(R5) RETURN ;CALL MINVM(A,AI,N,D) ;MINVM(A,AI,N); ;FOR PASCAL, D IS LAWAYS 10 ;ML, INDUCTOR. WORKS LIKE PA ML: .L @2(R5),@4(R5) ;CALL ML(X,Y) ML(X,Y); RETURN ;MLBL, LABEL STRING WITH CR-LF CALL MLBL(S) MLBL (S); MLBL: MOV #25.,R0 MOV 2(R5),R1 ;=ADDRESS OF STRING MOV #BUFFER,R2 LOOP: MOVB (R1)+,(R2)+ SOB R0,LOOP CLRB BUFFER+25. .LBL #BUFFER RETURN ;MLBS, LABEL STRING WITH NO CR-LF ;CALL MLBS(S) MLBS (S); MLBS: MOV #25.,R0 MOV 2(R5),R1 ;=ADDRESS OF STRING MOV #BUFFER,R2 LOOPS: MOVB (R1)+,(R2)+ SOB R0,LOOPS CLRB BUFFER+25. .LBS #BUFFER RETURN ;MOA, OUTPUT ABSOLUTE PEN POSITION X,Y IN cm; I = 1/0 IF PEN IS UP/DOWN. ;CALL MOA (X, Y, I) MOA (X, Y, I); MOA: .OA @2(R5),@4(R5),@6(R5) RETURN ;MPA, MOVE PEN IN STRAIGHT LINE TO X,Y ;CALL MPA(X,Y) MPA(X,Y); MPA: .PA @2(R5),@4(R5) RETURN ;MPD, PEN DOWN CALL MPD(DUMMY) MPD; MPD: .PD RETURN ;MPU, PEN UP CALL MPU(DUMMY) MPU; MPU: .PU RETURN ;MR, RESISTOR. WORKS LIKE PA CALL MR(X,MY) MR(X,Y); MR: .R @2(R5),@4(R5) RETURN ;MRAND RANDOM NUMBER CALL MRAND(F) MRAND(F); MRAND: .RAND @2(R5) RETURN ;MRAND SHUFFLED RANDOM NUMBER CALL MRANDS(F) MRANDS(F); MRANDS: .RANDS @2(R5) RETURN ;MRANOR GAUSSIAN-DISTRIBUTED RANDOM NUMBER MRANOR: .RANOR @2(R5) ;CALL MRANOR(F) MRANOR(F); RETURN ;MRIS RESET TERMINAL TO INITIAL STATE MRIS: .RIS ;CALL MRIS MRIS; RETURN ;MSCALE, SCALE POINTS TO FIT BETWEEN XMIN AND XMAX, AND YMIN AND YMAX. ;CALL MSCALE(XMIN,YMIN,XMAX,YMAX) MSCALE(XMIN,YMIN,XMAX,YMAX); MSCALE: .SCALE @2(R5),@4(R5),@6(R5),@10(R5) RETURN ;MSI, SETS WIDTH & HEIGHT OF LETTERS IN cm. MSI: .SI @2(R5),@4(R5) ;CALL MSI(W,H) MSI(W,H); RETURN ;MSP, SELECT PEN 1-8. PEN IS STORED IF N=0. MSP: .SP @2(R5) ;CALL MSP(N) MSP(N); RETURN ;MSWL ;LETTERS ON LINE (WHERE CURSOR IS) SINGLE,NORMAL WIDTH MSWL: .SWL ;CALL MSWL MSWL; RETURN ;MV, VOLTAGE SOURCE. WORKS LIKE PA. THE (X,Y)-END IS POSITIVE MV: .V @2(R5),@4(R5) ;CALL MV(X,Y) MV(X,Y); RETURN ;MVTCR RETURNS CROSS-HAIR POSITION (X,Y) MVTCR: .VTCR @2(R5),@4(R5),@6(R5) ;CALL MVTCR(X,Y,C) MVTCR(X,Y,C); RETURN ;MVTP PLOT POINT ON VT240 CALL MVTP(X,Y) MVTP(X,Y); MVTP: .VTP @2(R5),@4(R5) RETURN ;MVTV DRAW VECTOR (LINE) MVTV: .VTV @2(R5),@4(R5) ;CALL MVTV(X,Y) MVTV(X,Y); RETURN ;XMTB, TRANSMIT BYTE B TO PLOTTER MXMTB: .XMTB @2(R5) ;CALL MXMTB (B) MXMTB(B); RETURN ;MXMTS, TRANSMIT STRING S TO PLOTTER MXMTS: MOV #25.,R0 ;CALL MXMTS(S) MXMTS (S); MOV 2(R5),R1 ;=ADDRESS OF STRING LOOP22: CMPB (R1),#40 ;SPACE? BNE SKIPER RETURN SKIPER: .XMTB (R1)+ SOB R0,LOOP22 RETURN BUFFER: .BLKB 82. BUF2: .BLKB 82. .EVEN .END