File: UF.03 of Tape: OS8/OS8-V3/dec-s8-uextb-a-ua2
(Source file text) 

/OS8 BASIC USER FUNCTIONS, V3
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1974 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
	VERSION=300	/SEE LOCATION 4577
	FPP=4000
	FADD=FPP+2000
	FSUB=FPP+2117
	FMPY=FPP+1600
	FDIV=FPP+1722
	FFNEG=FPP+2135
	FFPUT=FPP+2256
	FFGET=FPP+2241
	FFNOR=FPP+2215
	FACCLR=0365
	UNSFIX=1615
	PSWAP=1230
	ARGPRE=307

	DISD=6052
	DILX=6053
	DILY=6054
	DIXY=6055

	CLZE=6130
	CLSK=6131
	CLOE=6132
	CLAB=6133
	CLSA=6135

	ADCL=6530
	ADLM=6531
	ADST=6532
	ADRB=6533
	ADSK=6534
	ADLE=6536
	ADRS=6537

	EXP=44
	HORD=45
	LORD=46
	MAXPTS=XR0
	REFRFL=XR1
	BUFADR=XR2
	DX=XR3		/XR3,XR4,XR5=TEMP FL PT LOC
	SPF=6040
	CAF=6007
	IA=1465
	EJECT

	*1
	JMP I	.+1
	SERVC
	*6
USECON,	0	/ENTRY #OF USER BUF IN DIM TBL
	*10
XR0,	0
XR1,	0
XR2,	0
XR3,	0
XR4,	0
XR5,	0
	*20
CDFIO,	CDF 10	/FLD OF PSEUDO DIM TBL
	0
ARSTRT,	0	/ADR-1 OF PSEUDO DIM TBL
	*44
	0	/FAC,EXP
	0	/H.O.WD
	0	/L.O.WD
	*64
INSAV,	0
	*73
K0010,	10
K0017,	17
	*77
K0200,	200
	*107
M14,	-14
	*114
FIXP,	UNSFIX
	*134
FGETL,	FFGET
FPUTL,	FFPUT
FNORL,	FFNOR
FCLR,	FACCLR
FNEGL,	FFNEG
	*156
P1SWAP,	PSWAP
	EJECT
	*3400
/INI(N)-INITIALIZE ROUTN;CALLED BY USER BEFORE 'PLY
/	OR ADC';INITIALIZE CTRS,FLGS,ETC
/	N IS A DUMMY ARG
/
INI,	0
	JMS	BUFCDF
	TAD	BUFBAK
	DCA	BUFADR
	DCA	TOTPTS	/BUF IS NOW EMPTY
	IAC
	DCA	STPT	/ACCES BUF AT 1ST PT
	IAC
	DCA	NTHY	/ACCES EVERY PT
	IAC
	DCA	XFLG	/BUF MAYBE DISPLAYED
	JMP I 	INI

/BUFCDF-GET FLD & ADR OF 'USE BUFFER'
/
BUFCDF,	0
	TAD	USECON	/ENTRY PT OF BUF IN DIM TBL
	CLL RTL		/MULT BY 4
	TAD	ARSTRT	/ADR-1 OF STRT F DIM TBL
	DCA	XR5	/ADR-1 OF ENTRY IN DIM TBL
	TAD	CDFIO
	DCA	.+1
	0
	CMA
	TAD I	XR5	/ADR-1 OF BUF
	DCA	BUFBAK	/NEED FOR DISPLY ROUTN
	TAD I	XR5	/GET CDF OF BUF
	DCA	PUTCDF
	TAD	PUTCDF
	DCA	CDFBAK	/NEED FOR DISPLY ROUTN
	CDF		/RESTORE DF
	JMP I	BUFCDF
CDFBAK,	0
BUFBAK,	0
TOTPTS,	0
	EJECT

/PUTBUF-ENTER WITH A 12BIT VALUE IN AC;PUT VAL IN
/	USER BUFFER;CHK TO SEE IF NXT VAL WILL CROSS FLDS
/
PUTBUF,	0
PUTCDF,	0
	DCA I	BUFADR
	IAC
	TAD	BUFADR
	SZA CLA		/ABOUT TO CROSS FLDS?
	JMP	.+4	/NO
	TAD	K0010	/YES
	TAD	PUTCDF
	DCA	PUTCDF	/DF=DF+1
	CDF		/RESTORE DF
	JMP I	PUTBUF
	EJECT

/PLY(Y)-ENTER WITH YVAL IN FAC;CHK 0<=VAL<1.;
/	PUT LEGIT VAL IN USER BUF
/
PLY,	0
	TAD	HORD
	SPA CLA		/YVAL>=0?
	JMP	IA	/NO,ERR
	TAD	EXP
	SMA SZA CLA	/YVAL<1?
	JMP	IA	/NO, ERR
/CONV # IN FAC TO A 10BIT DISPLAYABLE VAL
/	FAC=FAC*1776+1001
/
	JMS 	FMPY	/YES
	FL1022		/1776(8)
	JMS 	FADD
	FL513		/1001(8)
	JMS I 	FIXP
	JMS	PUTBUF
	ISZ	TOTPTS	/KEEP CNT OF PTS IN BUF
	JMP I	PLY

/DLY(N)-N IS MAX # OF PTS TO BE EVENTUALLY DISPLAYED
/	CHK IF 1<=N<=1024; SET 'REFRFL' =0 FOR
/	A ONE SHOT DISPLAY.
/
DLY,	0
	JMS I 	FIXP
	SPA SNA		/1<=N?
	JMP	IA	/NO,ERR
/CHK IF N IS SAME AS LAST TIME &
/IF SO, NO NEED TO GO THE "SETDX" ROUT
	DCA	INI	/YES,TEMPORARY SAVE
	DCA	XR1
	TAD	INI
	CIA
	TAD	MAXPTS
	SZA CLA		/N IS STILL THE SAME?
	JMP	.+3	/NO
	JMS	DISPLY	/YES, DISPLY ONCE &
	JMP I	DLY	/RETURN
	TAD	INI	/GET N BACK
	DCA	MAXPTS	/ASSUME N IS VALID FOR MOMENT
	TAD	MAXPTS
	CIA
	TAD	P2000
	SPA CLA		/N<=1024?
	JMP	IA	/NO
	DCA	REFRFL	/ONE SHOT DISPLY
	JMS	SETDX	/SET DX FOR DISPLY
	JMP I	DLY
	EJECT
/ADC(N)-SAMPLE ADC NTH CHANNEL; RETN FL PT VAL IN FAC
/

ADC,	0
	JMS I	FIXP	/GET ARG N
	CIA
	TAD	K0017
	SPA		/N<=17(8)?
	JMP	IA	/NO,ERR
	CIA		/YES
	TAD	K0017
	ADLM		/LOAD MUX
	ADST		/START CONV
	ADSK
	JMP	.-1
	ADRB		/GET VAL
	DCA	HORD
	JMS	FFLOT
	JMP I	ADC
	EJECT
/CLW(N)-N IS A DUMMY ARG; WAIT UNTIL CLOCK O.F. OR
/	UNTIL A SCHMITT TRIG FIRES(DEPENDING WHICH WAS
/	SPECIFIED IN 'CLK') BEFORE RETURNING TO BASIC
/
CLW,	0
	CLSK		/STATUS REG IS ALREADY SET?
	SKP		/NO
	JMP	EARLY	/YES
	CLSK
	JMP	.-1
	CLSA		/READ STATUS
CLW1,	CLL RAL		/CHK ON O.F.
	SZL		/O.F. BIT SET IN SATUS WD?
	CIA		/YES,NEG REST OF STATUS REG
/RTN 0 IF O.F. ONLY; 1,2,...,7 IF SCHMITT ONLY;
/-1,-2,...,-7 IF BOTH
	RAR		/NO
	DCA	HORD
	JMS	FFLOT
	JMP I	CLW
/IF CLOCK INTERRUPTED TOO SOON TELL USER;
/-8 IF O.F. ONLY; 9 THRU 15 IF SCHMITT ONLY;
/-9 THRU -15 IF BOTH
EARLY,	CLSA
	TAD	K0010
	JMP	CLW1
	PAGE
	EJECT

/DIS(S,E,N,X)-DISPLY EVERY NTH PT BEGIN WITH S
/	& NOT EXCEEDING N; X=1 DISPLY NOW,
/	X=0 SETUP TO DISPLY FOR A SAM
/
DIS,	0
	JMS	BUFCDF	/SETUP CDF & USER BUF
	JMS	ARG123
	STPT-1
/FLOAT N
	TAD	NTHY
	DCA	HORD
	JMS	FFLOT
	JMS I	FPUTL	/IT BETTER NOT =0
	DX		/HOLD TEMPORARY
/CHK 1<=S,0<=E-S
	TAD	STPT
	SPA SNA
	JMP	IA	/ERROR
	CIA
	TAD	ENDPT
	SPA
	JMP	IA	/ERROR
/FLOAT (E-S) & GET (E-S)/N
	DCA	HORD
	JMS	FFLOT
	JMS	FDIV
	DX
/CHK (E-S)/N+1<=1024; MAXPTS=(E-S)/N+1
	JMS I 	FIXP
	IAC
	DCA	MAXPTS	/ASSUME OK FOR NOW
	TAD	MAXPTS
	CIA
	TAD	P2000	/1024(10)
	SPA CLA
	JMP	IA	/ERROR
/GET X ARG; DISPLY BUF(X=1); ONLY A SETUP FOR SAM (X=0)
	CLL IAC RAL	/4TH ARG DESIGNATED BY AC=2
	JMS	GETARG
	JMS I 	FIXP
	DCA	XFLG
	TAD	XFLG
	SZA CLA		/USER WANTS TO DISPLY?
	TAD	MAXPTS	/YES,TOTPTS=MAXPTS
DPY1,	DCA	TOTPTS	/NO,JUST SET UP,TOTPTS=0
	IAC		/REFRESH TILL ^N(NON INTERRUPT)
	DCA	REFRFL	/OR TILL CLK INTERRPT(INT MODE)
	JMS	SETDX
	JMP I	DIS
STPT,	0		/THESE 3 LOCATIONS
ENDPT,	0		/GO TOGETHER & MUST
NTHY,	0		/BE IN THIS ORDER
XFLG,	0
P2000,	2000
/DISPLY-SETUP CDF & PTR TO STARTING PT OF USER BUF;
/	SETUP 'DISCTR' FOR # OF PTS TO DISPLY THIS TIME;
/	INITIALIZE FL PT 'DXSUM'=-'DX'
/
DISPLY,0
/IF TOTPTS<=MAXPTS,DISPLY TOTPTS;OTHERWSE MAXPTS
D4,	TAD	TOTPTS
	SNA		/SIMPLE WAIT LOOP FOR THAT'1ST'
	JMP	.-1	/ADC TO BE SAMPLED
	CIA
	DCA	DISCTR
	TAD	DISCTR
	TAD	MAXPTS
	SMA CLA		/TOTPTS<=MAXPTS?
	JMP	.+4	/YES
	TAD	MAXPTS	/NO
	CIA
	DCA	DISCTR
/SETUP CDF & PTR TO START PT OF USER BUFFER
	TAD	CDFBAK	/RE-INIT CDF FOR LAST TIME YOU DISPLY
	DCA	DISCDF	/YOU MAY HAVE CROSSED FLDS
	TAD	BUFBAK	/ADR-1 OF BUF
	TAD	STPT
	DCA	BUFPTR
	TAD	XCRD	/INITIALIZE XCOORD
	DCA	XCOORD
/DISPLY LOOP
D3,	TAD	XCOORD
	DILX
	TAD	DELTAX
	DCA	XCOORD	/UPDATE XCOORD BY DELTAX
DISCDF,	0
	TAD I	BUFPTR
	CDF
	DILY
	CLA CLL
/WAIT
	TAD	NTHY	/MOVE PTR TO NXT LOC TO BE
	TAD	BUFPTR	/ACCESSED IN BUF
	DCA	BUFPTR
	SNL		/JUST CROSSED FLDS?
	JMP	.+4	/NO
	TAD	K0010	/YES
	TAD	DISCDF
	DCA	DISCDF
	DISD
	JMP	.-1
	DIXY	/INTENSIFY
/DISPLYED ALL PTS YET?
	ISZ	DISCTR
	JMP	D3	/NO
	TAD	REFRFL	/YES,KEEP REFRESHING?
	SNA CLA
	JMP I	DISPLY	/NO
/KEYBOARD IS CHK HERE FOR ^N WHEN DSPL & NOT SAMPLING
/KEYBOARD INTERRUPTS TO THE INT ROUTN
/
	KSF		/YES
	JMP	D4
	KRB
	TLS
	TAD	M216
	SNA CLA		/USER HIT ^N?
	JMP I	DISPLY	/YES
	JMP	D4	/NO, KEEP REFRESHING
DISCTR,	0
BUFPTR,	0
XCRD,	0
XCOORD,	0
M216,	-216		/-^N
DELTAX,	0
	EJECT
/FFLOT-FLOAT ANY INTEGER IN HORD(LOC 45) INTO FAC

FFLOT,	0
	DCA	LORD	/CLEAR LOW MANTISSA
	TAD	P13	/11(10) INTO EXPONENT
	DCA	EXP
	JMS I	FNORL	/NORMALIZE
	JMP I	FFLOT	/RETURN
P13,	13
FL513,	12;2002;0
FL1022,	12;3774;0
	PAGE
/SAM(C,N,P,T)-SETUP PARAMETERS FOR SUBSEQUENT SAMPLING
/	OF ADC'S OR OR DOING DIGITAL IO
/
	CONST=CLK
	TSAM=NCTR
SAM,	0
	JMS	ARG123
	CSAM-1
	TAD	PSAM
	SPA SNA		/P=0?
	JMP	IA	/YES,ERR
	CIA		/NO
	DCA	PCTR	/PCTR=-P(DONE CTR)
	CLL IAC RAL	/4TH ARG IS DESIGN BY AC=2
	JMS	GETARG	/GET T
	JMS I	FIXP
	DCA	TSAM
	TAD	TSAM
	SZA CLA		/SET UP TO SAMPLE ADC'S?
	JMP	DIG	/NO, DO DIGAL IO
	IAC		/YES
	DCA	SAMFLG	/SET FLG=1 FOR 'CLK'
	TAD	K0017	/15(10)
	JMP	SAM1
DIG,	CMA
	DCA	SAMFLG	/SET FLG=-1 FOR 'CLK'
	CLA CLL IAC RAL	/2
SAM1,	DCA	CONST
/CHK IF 0<=C, 1<=N, N+C-1<=2(DIG IO)OR <=17(8)(ADC'S)
/
	CMA
	TAD	NSAM
	SPA		/1<=N?
	JMP	IA	/NO,ERR
	TAD	CSAM
	CIA
	TAD	CONST
	SPA CLA		/N+C-1<=2 OR 17?
	JMP	IA	/NO,ERR
	TAD	TSAM
	SNA CLA
	JMP	SAM3
/CLEAR ALL DIGIAL INPT REGS
	JMS	BUFCDF	/SET UP USER BUF
	TAD	NSAM
	CIA
	DCA	NCTR	/-#OF BOARDS TO CLAR
	TAD	CSAM	/START BOARD#(0,1,2)
	CLL RTL
	RAL		/START BOARD# * 10(8)
	TAD	P6503	/OCAL FOR 'DBCI'
A1,	DCA	.+2
	CLA CMA
	0		/DBCI IS ISSUED
	CLA
	TAD	.-2
	TAD	K0010
	ISZ	NCTR	/MORE BOARDS TO CLEAR?
	JMP	A1	/YES
	CLA
	JMP I	SAM
/DO A CLEAR ALL; AD DONE FLG, ERR FLG, CLR MUX & EN REG.
/SET NON-AUTO INCR MODE
/
SAM3,	CAF		/CL ALL FLGS-I MAY USE ION'S
	ADCL
	TAD	K0200
	ADLE		/ENABLE EXT START OF ADC'S
	JMP I	SAM
CSAM,	0		/THESE 3 LOCATIONS MUST
NSAM,	0		/BE TOGETHER & IN THIS
PSAM,	0		/ORDER
PCTR,	0
P6503,	6503
NCTR,	0
	EJECT

/CLK(R,O,S)-A COMPLEX CLK ROUTN WHICH SETS UP CLOCK
/	FOR ADC SAMPLING; DIGIAL IO SMPLING;
/	& SETS UP A SIMPLE CLOCK-WAIT ROUTN
/
CLK,	0
	JMS	ARG123
	R-1
	CLSA		/CLEAR CLK STATUS REG 
	CLA
	TAD	R
	SPA SNA		/R>0?
	JMP	IAA	/NO,ERR
	TAD	M6	/YES
	SMA SZA CLA	/R<=6?
	JMP	IAA	/NO
	TAD	R	/R GIVES CORRECT VAL FOR
	CLL RTL		/EXT START, .1,1,10,100,1000 KHZ RATE
	RTL
	RTL		/RATE GOES INTO BITS 3-5 OF EN REG
	TAD	P5050	/BITS 0,2,6,8 OF EN REG ALWAYS SET
	DCA	SAM	/SAVE TEMP
	TAD	O	/OVERFLOW CNT
	CIA
	CLAB		/SET BUF PRESET REG
	CLA
	TAD	S
	SZA CLA		/ANY SCHMITT TRIGS ASKED FOR?
	TAD	P27	/YES,SET BITS 7,9-11 OF EN REG
	TAD	SAM	/FINAL ENABLE VAL
	CMA
	CLZE		/CLEAR BAD BITS FROM EN REG
	CMA		/ENABLE VAL IS BACK AGAIN
	CLOE		/START CLOCK
	CLA
	TAD	SAMFLG
	SNA		/JUST SETTING UP FOR A SIMPLE TIMING DEV?
	JMP	DONE	/YES,RTN TO BASIC
	SPA CLA		/SAMPLE ADC'S?
	JMP	DRESET	/NO,DO DIGITAL IO
	JMP	SRESET	/YES
DONE,	DCA	SAMFLG	/CLR FLG
	SPF		/RESET TTY FLG FOR BASIC
	JMP I	CLK	/RTN TO BASIC
IAA,	SPF
	JMP	IA
P27,	27
R,	0		/THESE 3 LOCATIONS
O,	0		/MUST BE TOGETHER IN
S,	0		/THIS ORDER
M6,	-6
P5050,	5050
SAMFLG,	0
FL4096,	15;2000;0
	EJECT
/GETARG-ENTER WITH SCALER(0=ARG2,1=ARG3,2=ARG4) IN AC;
/	CALL 'ARGPRE' & ON RTN THE D.F. OF ARG IS SET
/	& ADR OF ARG IS IN FAC
/	PUT FL PT ARG IN FAC( 44-46)

GETARG,	0
	DCA	INSAV	/ARGPRE USES THIS SCALER LOC 64
	JMS I	KARG	/GET ADR OF ARG
	JMS I	FGETL	/PUT ARG IN FAC
KARG,	ARGPRE		/USED TO ADVANTAGE
	CDF		/RESET D.F.
	JMP I	GETARG
	PAGE

/SETDX-SETUP DELTAX; CHK IF DISPL IS TO BE
/	ACTIVATED; DX IS A FL PT NO
/	SETUP DELTAX SUCH THAT IT =1,2,3,...,1023;
/	& XCOORD SO THAT DISPLY IS CENTERED
/
SETDX,	0
	CMA
	TAD	MAXPTS	/MAXPTS-1
	SNA		/IF # OF MAXPTS=1 THEN DISPLY
	IAC		/IS POSITIONED AT X=0 COORD
	DCA	HORD
	JMS 	FFLOT
	JMS I	FPUTL
	DX		/SAVE FL PT(MAXPTS-1) TEMP
	TAD	P1777	/1023
	DCA	HORD
	JMS	FFLOT
	JMS	FDIV
	DX		/FL PT (1023/MAXPTS-1) =DX
	JMS I	FIXP	/FIXED 'DX'
	DCA	DELTAX
	TAD	DELTAX
	DCA	HORD
	JMS	FFLOT
	JMS	FMPY
	DX		/(MAXPTS-1)*(FIX'DX')=FLOT PROD
	JMS I	FIXP	/FIX 'PROD'
	CIA
	TAD	P1777
	CLL RAR		/(1023-FIX'PROD')/2
	TAD	P1001
	DCA	XCRD	/XCOORD=[1001+(1023-FIX'DX')/2]
/CHK  SHOULD DISPLY NOW(XFLG=1)
/OR RTN TO BASIC DUE TO SAM SETUP(XFLG=0

	TAD	XFLG
	SZA CLA
	JMS	DISPLY
	JMP I	SETDX
P1777,	1777
P1001,	1001
	EJECT

/ADSAM-A CLOCK INTERRUPT FOR SAMPLING ADC'S COMES HERE
/
ADSAM1,	ADRS		/RD STATUS(GET MUX)
	IAC
	ADLM		/BMP MUX BY 1
	JMP	CLUGE
ADSAM,	CLSA		/READ STATUS REG & CLEAR IT
	SMA CLA		/CLK O.F.?
	JMP 	TION	/NO, SCHMITT TRIG SYNC
	ADSK		/CONV IS DONE?
	JMP	.-1	/NO
	ADRB		/GET VAL FR CONV BUF
	JMS	PUTBUF	/YES
	ISZ	NCTR	/SAMPLED ALL CHANS FOR THIS INTERRUPT?
	JMP	ADSAM1	/NO
	ISZ	PCTR	/YES,JOB IS ALL DONE?
	JMP	SRESET-1	/NO
	JMP	DONE	/YES,'DONE' IS IN 'CLK' ROUTN

/SRESET-USED TO RESET STCHAN & CTR FR ADC SAMPLING
/	ROUTN SETS MUX TO SAMPLE 1ST OF A SERIES OF CHANS.
/	A CTR IS SET TO -# OF CONSEC CHANS TO SAMPLE
/

	ISZ	TOTPTS	/#PTS /CHANNEL
SRESET,	TAD	NSAM
	CIA
	DCA	NCTR
	TAD	CSAM
	ADLM		/LOAD MUX WITH 1ST CHAN
TION,	ION
	JMS	DISPLY	/DISPLY UNTIL CLK INTERRUPT
	EJECT
/DRI(N) -SAMPLE DIGITAL IO BOARD N; & RTN RESULT
/	AS FL PT IN FAC

DRI,	0
	JMS	ARGN
	JMS	DIGIO	/GET DIGITAL VAL
	JMS	NEGCHK
	JMP I	DRI

/ARGN - GET N AND MAKE A 'DBSK' INSTRUCTION

ARGN,	0
	JMS I	FIXP	/BOARD #
/CHK 0<=N<=2
	DCA	SETDX	/SAV N TEMP
	TAD	SETDX
	CIA
	TAD	PP2
	SPA CLA
	JMP	IA	/ERR
	TAD	SETDX	/GET N BAK
	CLL RTL
	RAL		/BOARD # = BITS 6-8
	TAD	P6503	/DBCI INSTR CODE
	JMP I	ARGN

/DRO(M,N)- M=FL PT VAL TO OUTPUT, N=BOARD #
/	IF M=0 CLR OUTPUT REG; OTHERWISE LEAVE
/	THE BITS OF DBSO SET

	MASK=DIGIO
DRO,	0
	JMS I	FIXP
	DCA	MASK	/DIGITAL OUTPUT VAL
	JMS	GETARG
	JMS	ARGN
	TAD	PP2	/65N5='DBCI+2'
	DCA	KDBCO
	IAC
	TAD	KDBCO
	DCA	KDBSO
	TAD	MASK	/GET FL PT VAL
	SZA		/CLR OUTPUT REG/
	JMP	KDBSO	/NO
	CMA		/YES,SET ALL BITS OF AC
KDBCO,	0	/CLR OUTPUT REG
	SKP
KDBSO,	0		/OUTPUT DIG VAL
	CLA
	JMP I	DRO
PP2,	2
	EJECT
	FLGNEG=DRO
/NEGCHK- THIS ROUTINE CHKS TO SEE IF A VALUE FROM
/	'DRI' OR 'GET' IS NEGATIVE.  IF IT IS
/	THE VALUE IS CHANGED TO 4096+NEG VAL.

NEGCHK,	0
	DCA	FLGNEG	/VAL IS EITHER + R -
	TAD	FLGNEG
	DCA	HORD
	JMS	FFLOT
	TAD	FLGNEG
	SMA CLA		/VAL WAS NEG?
	JMP I	NEGCHK	/NO
	JMS	FADD	/YES
	FL4096
	JMP I	NEGCHK
CLUGE,	ADST		/START CONV
	JMP	ADSAM+3
	PAGE
	NOPUNCH
	AND	(VERSION	/FORCE VERSION NUMBER AT
	*.-1		/BOTTOM OF THIS PAGE
	ENPUNCH
/GET(M,L)- M=0, GET VAL FROM USER BUF & NO MASKING
/	M>0, GET VAL FROM USER BUF & MASK WHERE
/	M IS THE MASKING VALUE.
/	L IS THE LOCATION OF USER BUF TO ACCESS

	LHOLD=ARG123
GET,	0
	IAC
	DCA	MSKCTR
	JMS I	FIXP	/GET M
	SNA		/M=0
	CMA		/YES,SET M=7777
	CLL RAR
	SZL
	JMP	.+3
	ISZ	MSKCTR
	JMP	.-4
	RAL
	JMS COMMON	/SAME CODE FOR 'GET' & 'PUT'
	TAD	MSKCTR
	CIA
	DCA	MSKCTR
	TAD I	LHOLD
	CDF		/RESET D.F.
	CLL RAR
	ISZ	MSKCTR
	JMP	.-2
	RAL
	AND	MASK
	JMS	NEGCHK
	JMP I	GET
MSKCTR,	0

/PUT(M,L)- M IS THE FL PT VALU TO BE FIXED & PUT
/	IN THE USER BUF;  L IS THE LOC OF THE USER
/	BUF WHERE TO STORE THE FIXED NUMBER.

PUT,	0
	JMS I	FIXP	/GET & FIX THE FL PT VAL
	JMS COMMON
	TAD	MASK
	DCA I	LHOLD
	CDF
	JMP I	PUT

/COMMON- THIS ROUTINE IS USED BY BOTH 'GET' & 'PUT'

COMMON,	0
	DCA	MASK	/SAVE M TEMPORARILY
	JMS	GETARG
	JMS I	FIXP	/GET L
	CLL
	TAD	BUFBAK
	DCA	LHOLD
	SZL		/CROSSED FIELDS?
	TAD	K0010	/YES
	TAD	CDFBAK	/NO
	DCA	.+1
	0
	JMP I	COMMON
	EJECT

/WHEN INTERRUPT OCCURS COME HERE
/

SERVC,	CLA
	CLSK		/CLOCK INTERRUPT?
	SKP		/NO
	JMP	ADSAM	/YES
	KSF		/TTY INTERRUPT?
	SKP		/NO
	JMP	KKBRD	/YES
	TSF		/DUE TO LAST ECHO?
	HLT		/SPURIOUS INTERRUPT
	TCF		/YES
	JMP	TION
KKBRD,	KRB
	TLS		/ECHO CHAR
	TAD	M203
	SZA CLA		/^C TYPED?
	JMP	TION	/NO,IGNORE CHAR
	JMS I	P1SWAP	/YES
	JMP	7605	/RTN TO MONITOR
M203,	-203
	EJECT
/ARG123-THIS ROUTINE GETS 3 ARGUMENTS OF A FUNCTION
/	AND STORES THEIR FL PT VALUES IN
/	'ARG1,ARG2,ARG3' & STORES THEIR FIXED VALUES
/	AT 'ADR,ADR+1,ADR+2'
/		CALL: JMS ARG123
/		      ADR-1

ARG123,	0
	TAD I	ARG123	/GET(ADR-1)FOR THE THREE
	DCA	XR1	/1WD ARGS
	ISZ	ARG123
	JMS I	FIXP
	DCA I	XR1	/SINGLE PREC ARG1
	JMS	GETARG	/ARG2 DESIGN BY AC=0
	JMS I	FIXP
	DCA I	XR1	/SINGLE PREC ARG2
	IAC
	JMS	GETARG	/ARG3 DESIGN BY AC-3
	JMS I	FIXP
	DCA I	XR1	/SINGLE PREC ARG3
	JMP I	ARG123
	EJECT
/DRESET-USED TO RESET STARTING DIGITAL IO BOARD & CTR;
/	WAIT FOR CLK TO O.F.; SAMPLE EACH BOARD ASKED FOR.
/

DRESET,	TAD	NSAM
	CIA
	DCA	NCTR
	TAD	CSAM	/STARTING BOARD #
	CLL RTL
	RAL		/ST BOARD #*10(8)
	TAD	P6473	/6503-10(8)
	DCA	KDBCI	/[DBCI-10(8)] FOR 1ST BOARD
/WAIT LOOP
	CLSK
	JMP	.-1
	CLSA		/READ STATUS & CLR
	CLA
/SAMPLE ALL BOARDS ASKED FOR

DIGSAM,	TAD	K0010
	TAD	KDBCI
	JMS	DIGIO	/SAMPLE BOARD
	JMS	PUTBUF	/PUT DIG VAL IN BUF
	ISZ	NCTR	/MORE BOARDS?
	JMP	DIGSAM	/YES
	ISZ	PCTR	/NO, JOB IS ALL DONE?
	JMP	DRESET	/NO
	JMP	DONE	/YES,'DONE' IS IN 'CLK' ROUTN
/DIGIO-ENTER WITH 'DBCI' SETUP FOR CORRECT BOARD; THIS RTN
/	SETS UP THE 'DBRI & DBCI' AND SAMPLES CORRECT BOARD;
/	EXIT WITH DIGITAL VAL IN AC
/

DIGIO,	0
	DCA	KDBCI
	TAD	KDBCI
	IAC
	DCA	KDBRI
KDBRI,	0
KDBCI,	0
	JMP I	DIGIO
P6473,	6473
$