File FFTC-2

Directory of image this file is from
This file as a plain text file

*20
	EJECT
	LMODE
	SEGMNT 2
	*20
	LDF	7    /BOOTSTRAP IN DIAL MS I/O ROUTINES
	RDC
	6322
	RDC
	7323
	LDF	3
IFDIAL,	LDA I		/INPUT FROM DIAL TAPE?
	QUES1+2000
	LIF 2
	JMP	ASK
	LDH
	ANSWER+6000
	SAE I
	31
	SKP  
	JMP	UNTFIL   /DIAL
	SAE I
	16
	JMP	IFDIAL	/ERROR
	JMP	DATTAP		/DATA
/ASK FOR UNIT NO + FILE NAME
UNTFIL,	JMP	ASK2
	JMP	.-1		/ASK AGAIN
	LIF	1
	LDA I
	FDV+2000
	JMP	20		/SEARCH INDEX
	SKP			/CANT FIND IT
	JMP	MOVINP
	LIF	2
	LDA I			/DISPLAY ERROR MSG
	MSG1+2000
	JMP	ASK
	JMP	UNTFIL		/ASK AGAIN
DATTAP,	JMP ASK3
	JMP	DATTAP		/ERROR-ASK AGAIN
MOVINP,	JMP FDV2RW	/MOVE INPUT PARAMETERS TO R/W LIST
PTS,	LDF	3
	LIF	2
	LDA I			/ASK FOR NO OF PTS
	QUES4+2000
	JMP	ASK
	SET I	1
	ANSWER+2000
	LDA I		/INPUT IS DECIMAL
	12
	STC MPLIER
	LDA I
	-71
	STC UPLEGL
	LDA I			/1024 PTS MAX
	2000
	JMP	CONV
	JMP	PTS		/ERROR
	LDF	0
	STA
	N+2000
	LDF 3
	COM
	STC TEMP1
	SRO I
TEMP1,	0
	SKP
	JMP PTS		/BIT 11=1 NOT POWER OF 2
	SET I 2
	-13
ROTAT,	SRO		/COUNT NO OF BITS SET
	TEMP1
	JMP .+3
	ADA I
	1
	XSK I 2
	JMP ROTAT
	ADA I 
	-1
	COM
	AZE
	JMP PTS		/>1-NOT POWER OF 2
	STC 2		/CLEAR
ROT1,	SRO		/DETERMINE POWER OF 2
	TEMP1
	SKP
	JMP STAMU
	XSK I 2
	JMP ROT1
STAMU,	LDA
	2
	LDF	0
	STA
	NU+2000
	ADA I
	-1
	APO
	JMP	PTS	/POWER<2
	LDA			/COMPUTE NO OF OUTPUT BLKS
	N+2000		/NO OF PTS
	ROL 1		/*2
	JMP NUMBKS	/CONVERT TO BLKS
	STA
	FDV+2007	/NO OF BLKS FOR REAL & IMAG
	STA
	RWPARM+2003
	LDH
	ANSWER+2003
	SAE I
	22
	JMP IFCOM
	STA		/REAL-SET FLAG
	REALFG+2000
	LDF 0
	LDA
	N+2000		/COMPUTE INPUT BLKS
	JMP NUMBKS
	STA
	RWPARM+2003
	JMP CKEND
IFCOM,	SAE I
	3
	JMP PTS	/ERROR
	CLR		/COMPLEX-CLEAR FLAG
	STA
	REALFG+2000
CKEND,	LDA		/WILL INPUT RUN OFF END OF TAPE
	RWPARM+2002
	ADA
	RWPARM+2003
	ADA I
	-1000
	APO I
	JMP	PTS	/YES
	PDP
	PMODE
	CLA
	TAD N  /ADD 1 BLK FOR SCALE FACTOR IF 400 WORDS OR MORE
	CLL RAL		/NO OF OUTPUT WRDS = NO OF PTS*2
	TAD M400
	SMA CLA
	ISZ I PFDV7
	LINC
	LMODE
IFFFT,	LDA I 		/DO FFT OR JUST DISPLAY?
	QUES11+2000
	JMP ASK
	LDH
	ANSWER+6000
	SAE I
	4
	JMP .+4
	STA I		/NOT=0 JUST DISPLAY
DISFLG,	0
	JMP	FIF
	SAE I
	6
	JMP IFFFT	/ERROR
	CLR
	STC	DISFLG	/=0 WILL DO TRANSFORM OR INVERSE
FIF,	LDH
	ANSWER+6001
	SAE I
	24
	JMP IFI
	CLR
	STC IFTFLG	/DO FFT
	JMP IFDISP
IFI,	SAE I
	11
	JMP	IFFFT
	STC IFTFLG	/DO IFFT
IFDISP,	ADD	DISFLG
	AZE I
	JMP	OUTQES
	JMP	FDV2RW	/MOVE OUTPUT PARAMETERS TO R/W  
	LIF	3	/JUST DISPLAY
	JMP	DISPLY
/GET OUTPUT INFO
OUTQES,	LDA I
	QUES5+2000
	JMP	ASK		/PUT ON DIAL TAPE?
	LDH
	ANSWER+6000
	SAE I
	31
	SKP
	JMP	OUTUNT
	SAE I
	16
	JMP OUTQES
	JMP	ONDAT		/NO
OUTUNT,	JMP	ASK2	/ASK FOR UNIT NO & FILE NAME
	JMP	OUTUNT	/ERROR
	LIF	1
	LDA I			/ENTER IN INDEX
	FDV+2000
	JMP	22
	JMP	SAMNAM		/NAME ALREADY USED
	JMP	NOSPAC		/NO SPACE
RDDATA,	PDP	/CLEAR DATA BUFFER
	PMODE
	CLA CMA
	TAD XRLOC
	DCA 10
	TAD M4000
	DCA 11
	CDF1
	DCA I 10
	ISZ 11
	JMP .-2
	CDF0
	CIF	10	/READ IN DATA
	JMS I	PREAD
	RWPARM
	CDF0
	CLA
	TAD I PRELFG	/REAL OR COMPLEX
	SZA CLA
	JMP   PROC	/REAL
	CMA		/MOVE IMAG PARTS TO 2000
	TAD	N	/OLD ADDR = NO OF PTS
	DCA	10
	TAD	C1777   /NEW ADDR = 2000
	DCA	11
	TAD	N
	CIA
	DCA	TEMPR	/CTR
	DCA	CMPFLG	/DONT COMPLEMENT
	JMS I	PMVPTS	/MOVE THEM
	JMP	PROC
	 
IFTFLG,	0		/0=FFT NON0=IFFT
	 
PROC,	DCA I	PRELFG	/OUTPUT WILL BE COMPLEX REGARDLESS OF INPUT
	TAD IFTFLG	/DO IFFT?
	SNA CLA
	JMP	FT	/NO
IFT,	JMS I DOIFFT
	SKP
FT,	JMS I DOFFT
	JMS I SORT	/PUT IN SEQUENTIAL ORDER
STSCAL,	TAD SCAL      
	CDF1
	DCA	TEMPR    /SAVE
	TAD	N
	CLL RAL
	DCA	COSINE	/NO OF PTS*2
	TAD	TEMPR
	DCA I   COSINE    /STORE SCALE FACTOR AFTER DATA
NOWSTR,	CDF0
	TAD	C1777	/OLD ADDR = 2000
	DCA	10
	CMA		/NEW ADDR = NO OF PTS
	TAD	N
	DCA	11
	TAD	N
	CIA
	DCA	TEMPR	/CTR
	DCA	CMPFLG	/DONT COMPLEMENT
	JMS I	PMVPTS  /PACK IMAG PARTS BEHIND REAL
	LINC
	LMODE
	JMP FDV2RW
	PDP
	PMODE
	CIF	10	/WRITE OUT DATA
	JMS I	PWRITE
	RWPARM
	LINC
	LMODE
	LIF 3
	JMP DISPLY
NOSPAC,	LIF	2
	LDA I
	MSG2+2000
	JMP	ASK
	JMP	OUTQES		/ASK OUTPUT QUESTIONS AGAIN
SAMNAM,	LIF	2
	LDA I			/NAME ALREADY EXISTS
	QUES6+2000
			/REPLACE WITH NEW FILE?
	JMP	ASK
	LDH
	ANSWER+6000
	SAE I
	31
	SKP
	JMP	REPL
	SAE I
	16
	JMP	SAMNAM
	JMP	OUTUNT	/NO-ASK FOR NAME AGAIN
REPL,	LIF 1
	JMP	24
	JMP	NOSPAC
	JMP	RDDATA
ONDAT,	LIF	2
	JMP ASK3	/ASK FOR UNIT/BLK NO
	JMP ONDAT	/ERROR
	LDA
	FDV+2006	/BLK NO
	ADA
	FDV+2007	/NO OF BLKS
	ADA I
	-1000
	APO I
	JMP NOSPAC	/NOT ENOUGH BLKS LEFT
	JMP	RDDATA
	/MOVE FDV PARAMETERS TO R-W LIST
FDV2RW,	LDA
	FDV+2000
	STA
	RWPARM+2000
	LDA
	FDV+2006
	STA
	RWPARM+2002
	LDA
	FDV+2007
	STA
	RWPARM+2003
	JMP 0
/CONVERT WORDS TO BLOCKS
NUMBKS,	STC TEMP1
	ADD 0
	STC NUMBKX
	ADD TEMP1
	LDF	3
	SET I	1
	1
	ADA I
	-400
	APO 
	JMP .+3
	XSK I	1
	JMP	.-5
	LDA
	1
NUMBKX,	0
/ASK FOR UNIT NUMBER & FILE NAME
/CONV & STORE UNIT NUMBER
/MOVE FILE NAME TO ENTER, LOOKUP PARAMETER LIST
/STORE UNIT THRU B3
ASK2,	LDA
	0
	STC	ASK2X
	LIF	2
	JMP	OCTL	/CHANGE PARAMETERS TO HANDLE OCTAL NUMBERS
	LDA I
	QUES2+2000
	JMP	ASK	/PT TO UNIT NO-1H
	SET I	1
	ANSWER+2000
	LDA I		/MAX VALUE
	17
	JMP CONV
	JMP	ASK2X	/ERROR
	STA		/STORE UNIT
	FDV+2000
/MOVE FILE NAME FROM ANSWER BUFFER TO LOOKUP, ENTER PARAMETER LIST
	SET I 1
	ANSWER+6001
	SET I	2
	FDV+6000		/LEFT HALF 1ST OF FDV+1
	SET I	3
	-10		/8 CHARS
	LDH I	1	/IF 1ST CHAR OF NAME
	AZE I		/=00, NO NAME WAS
	JMP	ASK2X	/ENTERED-ERROR
	SKP
INFILE,	LDH I	1
	AZE			/FILL TO 8 CHARS WITH 77
	JMP	.+3
	LDH I
	7700
	STH I	2
	XSK I	3
	JMP	INFILE
	LDA I			/RETURN CALL+2
	1
	ADM 
	.+1
ASK2X,	0
/ASK FOR UNIT NUMBER + BLK NO AND CONVERT
/STORE UNIT THRU B7
/"  BLK NO " B10
ASK3,	LDA
	0
	STC	ASK3X
	LIF	2
	LDA I
	QUES3+2000
	JMP	ASK
	SET I	1		/ADDR-1H OF 1ST CHAR - UNIT
	ANSWER+2000
	JMP OCTL	/CHANGE PARAMETERS TO HANDLE OCTAL
	LDA I			/MAX VALUE
	17
	JMP CONV
	JMP ASK3X	/ERROR
	STA
	FDV+2000
	SET I 1
	ANSWER+6001
	LDA I		/MAX VALUE FOR BLK NO
	777
	JMP	CONV
	JMP	ASK3X
	STA
	FDV+2006
	LDA I			/EXIT CALL+2
	1
	ADM 
	.+1
ASK3X,	0
/CONVERT NUMBER IN ANSWER BUFFER TO BINARY
/ENTER WITH MAX LEGAL VALUE IN AC
/IF LEGAL - EXIT CALL+2 WITH VALUE IN AC
CONV,	COM
	STC	TEMP2 /COMPLEMENT MAX VALUE
	STC	TEMP1
	ADD	0		/RETURN ADDR
	STC	CONVER
NXTCHR,	LDH I	1		/GET A CHAR
	AZE I
	JMP ERRCHK
	ADA I
	7720			/-60 -2
/S COMP
	APO
	JMP	CHKEND		/<60 MAYBE TERMINATING CHAR
	LDH	1		/CK UPPER LIMIT
	ADA I
UPLEGL,	-67		/UPPER LIM=7 OR 9
	APO
	JMP	MULPLY		/0-9 -0K
CHKEND,	LDH	1		/<9 MAYBE TERMINATING CHAR
	SAE I
	34
	SKP
	JMP	ERRCHK
	SAE I
	74
	JMP	CONVER		/ILLEGAL CHAR
ERRCHK,	LDA			/=34 OR 74 - NUMBER COMPLETED
	TEMP1
	ADA			/ERROR CHECK SIZE
	TEMP2
	APO I
	JMP	CONVER		/TOO LARGE
	LDA I			/OK STEP EXIT
	1
	ADM
	.+3
	LDA			/EXIT WITH VALUE IN AC
	TEMP1
CONVER,	0
TEMP2,	0
/
MULPLY,	LDA		/VALUE SO FAR
	TEMP1
	MUL I			
MPLIER,	10
	STC	TEMP1
	LDH	1		/+ THIS VALUE
	BCL I
	7760
	ADM
	TEMP1
	JMP	NXTCHR
/
	/CHANGE PARAMETERS SO CONV & MULPLY WILL HANDLE OCTAL NUMBERS
OCTL,	LDA I
	10
	STC	MPLIER
	LDA I
	-67
	STC	UPLEGL
	JMP	0
/
/DISPLAY QUESTIONS
ASK,	STC	QUESNO		/ADDR OF TEXT
	ADD	0
	STC	ASKX
	IOB
	PMODE
	RIB
	LMODE
	SCR 3
	BCL I
	7740
	ADA I
	LIF 0
	STC ASKX-1
	JMP	QAINIT		/DISPLAY
QUESNO,	0
	ANSWER+2000
	JMP	QARFSH		/WAIT FOR ANSWERS
	0
ASKX,	0
	 
	EJECT
	SEGMNT 3
	LMODE
	*1
DISPLY,	PDP
	PMODE
	CLA
	TAD	N	
	CLL RAR
	DCA	GR	/NO OF PTS/2
	TAD	GR
	CIA
	DCA	ADD2	/-NO OF PTS/2
	TAD	C2000
	DCA	LOADDR	/LOWER ADDR OF DISPLAY
	TAD	C1777
	TAD	N
	DCA	UPADDR	/UPPER ADDR OF DISPLAY
	CIF	10	/READ IN DATA
	JMS I	PREAD
	RWPARM
	LINC
	LMODE
DISPL1,	LDA I		/WHICH DISPLAY
	QUES13+2000
	LIF 2
	JMP ASK
	LDH
	ANSWER+6000
	AZE
	JMP .+3
	LIF 2
	JMP IFDIAL	/LINE FEED
	PDP
	PMODE
WCHDIS,	TAD M11
	SNA
	JMP DPIMAG	/IMAG
	TAD M4
	SNA
	JMP I PDPMAG	/MAGNITUDE
	TAD M5
	SNA
	JMP DPREAL	/REAL
	TAD M1
	SNA CLA
	JMP I PDPSCL	/SCALE FACTOR
DISPER,	LINC		/ERROR
	LMODE
	JMP DISPL1
REALFG,	0
	PMODE
PDPSCL,	DPSCAL
DPIMAG,	TAD REALFG
	SZA CLA
	JMP DISPER	/NO IMAG PARTS TO DISPLAY
	TAD I	PIFTFG	/IF TRANSFORM WAS DONE, SWAP HALVES
	SZA CLA
	JMP	NOSWPI	/INVERSE WAS DONE
	CMA
	TAD	N
	DCA	10	/OLD LOW ADDR OF 1ST 1/2 = NO OF PTS
	TAD	GR	/NEW LOW ADDR OF 1ST 1/2 = 2000 + NO OF PTS/2
	TAD	C1777
	DCA	11
	TAD	ADD2
	DCA	TEMPR	/MOVE 1/2 OF PTS
	CLA IAC
	DCA	CMPFLG	/COMPLEMENT VALUES
	JMS I	PMVPTS	/MOVE THEM
	CMA		/OLD ADDR OF 2ND 1/2 = 3/2 NO OF PTS
	TAD	GR
	TAD	N
	DCA	10
	TAD	C1777	/NEW ADDR OF 2ND 1/2 = 2000
	DCA	11
	TAD	ADD2
	DCA	TEMPR	/1/2 OF PTS
	JMS I	PMVPTS	/MOVE THEM - 1ST 1/2 IS NOW 2ND 1/2; 2ND 1/2 IS NOW 1ST 1/2
	JMP	PREPAR
NOSWPI,	TAD	N	/LOW ADDR OF IMAG = NO OF PTS
	DCA	LOADDR
	CMA		/HIGH ADDR = 2*NO OF PTS-1
	TAD	N
	TAD	N
	DCA	UPADDR
	JMP	PREPAR
	 
DPREAL,	TAD I	PIFTFG	/IF TRANSFORM WAS DONE, SWAP HALVES
	SZA CLA
	JMP	NOSWPR
	JMS I	PMRLMG	/SWAP
	JMP	PREPAR
NOSWPR,	DCA	LOADDR	/LOW ADDR OF REAL
	CMA
	TAD	N
	DCA	UPADDR	/HIGH ADDR = NO OF PTS-1
	
PREPAR,	TAD ADD2	/NO OF PTS <1000?
	CLL RAL
	TAD C1000
	SPA SNA
	JMP GQ1000
	CLL RAR		/YES
	IAC		/CENTER DISPLAY
	TAD M1K
	DCA I PLEFTX	/1000-(1000-NO OF PTS/2) 1,S COMP
	TAD CCLR
	DCA I PMVDIS
	TAD ADD2	/WIDTH OF DISPLAY
	CLL RAL		/NO OF PTS
	DCA MINPTS
	JMP SHOWIT
GQ1000,	CLA
	TAD M1K		/LEFT JUSTIFY DISPLAY
	DCA I PLEFTX	/-1000 1,S COMP
	TAD I PLEFTX	/WIDTH OF DISPLAY
	IAC
	DCA MINPTS
	TAD SCR4	/MOVE DISPLAY
	DCA I PMVDIS
	JMP SHOWIT
/DISPLAY DATA
REDPLY,	LINC
	LMODE
	JMP DISPLY
	PMODE
	 
SHOWIT,	JMS I KIDORA
	1		/LOW ADDR FIELD
LOADDR,	0		/ "   "     "
	1		/HIGH   "    "
UPADDR,	0		/ "     "
	0		/Y OFFSET
	LMODE
SIZE,	SCR 3		/SCALE
	PMODE
RFRSH,	JMS I KRDORA	/REFRESH UNTIL LF IS HIT
	KSF
	JMP .-2
	KRB
	TAD M215
	SNA CLA
	JMP REDPLY
	KRB
	TAD M261
	SNA CLA
	JMP LARGER
	KRB
	TAD M321
	SNA CLA
	JMP SMALLR
	JMP I PRFRSH
SMALLR,	TAD I KYSCAL
	TAD M353
	SPA CLA
	ISZ I KYSCAL
	JMP I PRFRSH
LARGER,	TAD I KYSCAL
	TAD M340
	SPA SNA CLA
	JMP I PRFRSH
	CMA
	TAD I KYSCAL
	DCA I KYSCAL
	JMP I PRFRSH
	 
/DISPLAY SCALE FACTOR
	 
DPSCAL,	TAD I	PRELFG
	SZA CLA
	JMP I	PDSPER	/JUST REAL MEANS I DIDNT MAKE FILE - NO SCALE FACTOR
	TAD	N
	CLL RAL
	DCA	TEMPR	/ADDR = NO OF PTS*2
	CDF1
	TAD I	TEMPR
	TAD	M11
	SMA SZA CLA
	JMP	GR9	/>9
	TAD	LESS10
	TAD I	TEMPR	/SPACE + ASCII SCALE FACTOR
	JMP	SHOSCL
GR9,	TAD	M12
	TAD I	TEMPR
	TAD	GRET10  /10+SCALE FACTOR-10
SHOSCL,	CDF0
	DCA	DPMAG-2 /STORE IN DISPLAY PARAMETERS
	LINC
	LMODE
	LDA I
	SCLFAC+2000
	LIF 2
	JMP	ASK	/DISPLAY IT
	JMP	DISPLY
SCLFAC,	TEXT Z
	 
 
F         \Z
	 
	PMODE
	 
/COMPUTE MAGNITUDE
DPMAG,	TAD I PRELFG
	SZA CLA
	JMP I PDSPER
	CMA
	TAD	N
	DCA	10	/LOW ADDR OF IMAG = NO OF PTS
	TAD	C1777
	DCA	11	/MOVE TO 2000
	TAD	N
	CIA
	DCA	TEMPR	/CTR
	DCA	CMPFLG	/DONT COMPLEMENT VALUES
	JMS I	PMVPTS	/MOVE IMAG TO 2000
	DCA	COSINE	/ADDR OF 1ST REAL
	TAD	C1777	/ADDR-1 OF IMAG PARTS
	DCA	11
	TAD	C6000	/FRAC MULT
	DCA	RELPTR
	TAD	C6000
	DCA	IMGPTR
	TAD	ADD2
	CLL RAL
	DCA	TEMPR	/-NO OF PTS
	CDF1
NXTMAG,	TAD I	COSINE	/REAL PART
	LINC
	LMODE
	LDF	4	/FIELD OF REAL
	MUL		/MULT BY ITSELF
RELPTR,	0
	SCR I	3	/1 BECAUSE PROD IS SHIFTED LEFT 1, 2 BECAUSE MAX VALUE WILL OVERFLOW - TAKE OUT 2 SQUARED
	PDP
	PMODE
	DCA	DPSQ+1	/SAVE D.P. SQ
	MQA
	DCA	DPSQ
	TAD I	11	/IMAG PART
	LINC
	LMODE
	LDF	5	/FIELD OF IMAG
	MUL
IMGPTR,	0
	SCR I	3	/SAME REASON AS REAL
	PDP
	PMODE
	DCA	SINE	/SAVE H.O.
	CLL
	MQA		/L.O. OF IMAG
	TAD	DPSQ	/L.O. OF REAL
	DCA	DPSQ
	RAL		/OVERFLOW IF ANY
	TAD	SINE	/H.O. OF IMAG
	TAD	DPSQ+1	/H.O. OF REAL
	DCA	DPSQ+1
	JMS I	PSQRT	/TAKE SQ RT
	DCA I	COSINE	/STORE IN PLACE OF REAL
	ISZ	COSINE	/STEP REAL PTR
	ISZ	IMGPTR	/ "   IMAG ADDR - ON LAST PT OF 1024 PTS WILL SKIP
	ISZ	RELPTR	/STEP REAL ADDR
	ISZ	TEMPR	/STEP CTR
	JMP	NXTMAG
	LINC
	LMODE
	LDF	3
	PDP
	PMODE
	TAD I	PIFTFG	/IF TRANSFORM WAS DONE, SWAP HALVES
	SZA CLA
	JMP I	PNSWPR
	JMS I	PMRLMG	
	JMP I	PPREPR	/DISPLAY MAG
/
PPREPR,	PREPAR
PDSPER,	DISPER
PSQRT,	SQRT
PNSWPR,	NOSWPR
	EJECT
	LMODE
/LOOKUP, ENTER PARAMETER LIST
FDV,	0		/UNIT 0
	0		/FILE NAME - 8 CHAR
	0
	0
	0
	2		/BINARY
	0		/BLK NO
	0		/NO OF BLKS
/
RWPARM,	0000		/UNIT
	0020		/BUFFER ADDR
	0		/BLK NO
	0		/NO OF BLKS
/
	LMODE
/QUESTIONS
QUES1,	TEXT Z     SINGLE PRECISION FFT
	 
	 
F  INPUT ON
	 
F  DIAL UNIT? Y/N<1\Z
QUES2,	TEXT Z 
FUNIT NUMBER<2
	 
FFILE NAME  <8\Z
QUES3,	TEXT Z 
F  UNIT NUMBER<2
	 
F  BLK NUMBER <3\Z
QUES4,	TEXT Z 
FHOW MANY PTS?<4
	 
	 (4-1024 BY POWERS OF 2)
	 
FREAL OR
	 
FCOMPLEX? R/C<1\Z
QUES5,	TEXT Z
F  OUTPUT ON
F  DIAL UNIT? Y/N<1\Z
QUES6,	TEXT Z 
	 
F REPLACE? Y/N<1\Z
QUES11,	TEXT Z
FFFT OR DISPLAY? F/D<1
	 
	 
FTRANSFORM OR
	 
FINVERSE? T/I<1\Z
QUES13,	TEXT Z
FWHICH DISPLAY?<1
	 
	     R(EAL)
	     I(MAGINARY)
	     M(AGNITUDE)
	     S(CALE FACTOR)
	     LINE FEED(RESTART)\Z
/MESSAGES
MSG1,	TEXT Z
	 
F    CANNOT FIND
	 
	          HIT RETURN TO CONT\Z
MSG2,	TEXT Z
	 
F    NO SPACE
	 
	       HIT RETURN TO CONT\Z
/
ANSWER,	0
	*.+6
	 
	EJECT
	PMODE
/SQUARE ROOT
SQRT,	0
	DCA	ROOT	/CLR ROOT
	TAD	DPSQ	/IF SQ IS 0, EXIT
	SZA CLA
	JMP	NOT0
	TAD	DPSQ+1
	SNA CLA
	JMP I	SQRT
NOT0,	TAD	DPSQ+1	/1ST APPROX OF ROOT
	CLL RAR		/DIVIDE BY 2
	TAD	C2000	/+1/2
	DCA	ROOT
	 
SQRT2,	TAD	DPSQ	/SUM OF SQUARES
	MQL
	TAD	DPSQ+1
	CLL
	DVI		/DIVIDE BY ROOT APPROX
ROOT,	0
	SZL
	JMP	SQRT1	/OVERFLOW
	CLA
	MQA		/QUOTIENT TO AC
	TAD	ROOT	/ADD APPROX TO QUOTIENT
	IAC
	CLL RAR		/DIVIDE BY 2
	DCA	SINE	/SAVE
	TAD	ROOT	/SUBTRACT OLD ROOT FROM NEW ONE
	CIA
	TAD	SINE
	SNA CLA
	JMP	SQRT1	/=0
	TAD	SINE
	DCA	ROOT	/NEW ROOT
	JMP	SQRT2
	 
SQRT1,	TAD	ROOT
	JMP I	SQRT
	 
	 
	EJECT
	PMODE
/MOVE PTS FROM ONE AREA TO ANOTHER
/10 = OLD BUFFER
/11 = NEW   "
/IF CMPFLG=1, COMPLEMENT VALUE
MOVPTS,	0
	CDF1
NXTPT,	TAD	CMPFLG
	CLL RAR		/TO LK
	TAD I	10
	SZL
	CIA
	DCA I	11
	ISZ	TEMPR
	JMP	NXTPT
	CDF0
	JMP I	MOVPTS
	 
/MOVE REAL OR MAGNITUDE VALUES
/FROM 0 TO 2000
/AND SWAP HALVES
/DO NOT COMPLEMENT
MVRLMG,	0
	CMA		/OLD ADDR OF 1ST 1/2 = 0
	DCA	10
	TAD	GR	/NEW ADDR OF 1ST 1/2 = 2000 + 1/2 NO OF PTS
	TAD	C1777
	DCA	11
	TAD	ADD2
	DCA	TEMPR	/MOVE 1/2 NO OF PTS
	DCA	CMPFLG	/DONT COMPLEMENT
	JMS I	PMVPTS	/MOVE THEM
	CMA		/OLD ADDR OF 2ND 1/2 = 1/2 NO OF PTS
	TAD	GR
	DCA	10
	TAD	C1777	/NEW ADDR OF 2ND 1/2 = 2000
	DCA	11
	TAD	ADD2
	DCA	TEMPR	/1/2 NO OF PTS
	JMS I	PMVPTS	/MOVE THEM
	JMP I	MVRLMG
	 
	EJECT



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search