File F1119.PA (PAL assembler source file)

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

/UDC HANDLER FOR RTS-8
/
/
/
/
/
/
/
/
/
/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 DOCUMENT.
/
/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.
/
/
/
/
/
/
/
/
/
/
/11 POSSIBLE OPERATIONS:
/EACH CALL IS 10 WORDS LONG (INCL HEADER)
/WORD 10 IS SET TO CONTAIN ERROR FLAGS

/ANALOG OUTPUT		OP CODE
/			MAJOR CHANNEL
/			CHANNEL(0,1) + VALUE(2-11)
/DIGITAL OUTPUT 	OP CODE
/			CHANNEL
/			VALUE
/DIGITAL INPUT		OP CODE
/			CHANNEL
/			0 FOR ANSWER
/GET GENERIC CODE	OP CODE
/			CHANNEL NUMBER
/			0 FOR ANSWER
/ENABLE CONTACT 	OP CODE
/			BIT+CHANNEL NUMBERS
/			ACTION CODE(0,1,2), ONCE FLAG(3)
/			TASK NO.(4-11):
/			0=SET EVENT FLAG(NO TASK NO LEEDED)
/			  NO ASSOC. INFO (0)
/			1=RUN TASK
/			  NO ASSOC. INFO (0)
/			2=DERAIL THE TASK TO
/			  ADDRESS(SAME FIELD AS MESSAGE)
/			3=1=DO ACTION JUST ONCE
/			3=0=FOR EACH INTERRUPT
/DISABLE CONTACT	OP CODE
/			BIT + CHANNEL NUMBER
/ENABLE COUNTER 	OP CODE
/			CHANNEL NUMBER
/			INIT VALUE
/			RELOAD VALUE(0=DON'T RELOAD)
/			ACTION CODE, ONCE FLAG + TASK(4-11):
/			0=SET EVENT FLAG
/			  NO ASSOC. INFO(0)
/			1=RUN TASK
/			  NO ASSOC. INFO (0)
/			2=DERAIL THE TASK TO
/			  ADDRESS(SAME FIELD AS MESSAGE)
/			3=1=DO ACTION JUST ONCE
/			3=0=FOR EACH INTERRUPT
/DISABLE COUNTER	OP CODE
/			CHANNEL NUMBER
/READ COS		OP CODE
/			CHANNEL NUMBER
/			0 FOR ANSWER
/ANALOG INPUT		OP CODE
/			MAJOR CHANNEL
/			ENABLE,GAIN,SUBCHANNEL
/			0 FOR ANSWER
/READ COUNTER		OP CODE
/			CHANNEL NUMBER
/			0 FOR ANSWER

	TASK=UDC
	INIWT=0 	/START RUNNING
	OPCODE=12	/NO. OF OP CODES IN HANDLER
	RINGBF=10	/NO. OF INTERRUPTS IN RING BUF
	NCNTR=3 	/NO. OF COUNTERS
	NCNTC=2 	/NO. OF CONTACTS
	FCTR=12 	/ADDR OF FIRST COUNTER
			/MUST BE CONTIGUOUS CHANNELS
	FCT=0		/ADDR OF FIRST CONTACT
			/MUST BE CONTIGUOUS CHANNELS
	NAD=2		/NO. OF A/D CHANNELS
	FAD=17		/ADDR OF FIRST A/D CHANNEL
			/MUST BE CONTIGUOUS CHANNELS

/DEFINITIONS OF IOTS
	UDSF=6361
	UDEI=6364
	UDDI=6365
	UDLA=6363
	UDRD=6366
	UDLD=6367
	UDSS=6351
	UDSC=6353
	UDRA=6356
	UDLS=6357
	UDRS=6355
	CUR=10
	FIELD CUR%10
	*130
T1,	0		/GEN TEMP
T2,	0		/"
AT2,	0		/ADDRESS PTR
RINGCT, 0		/COUNT OF FULLNESS OF RING BUFFER
ENDOP,	END		/AFTER PROCCESSING A COMMAND
TBLPTR, 0		/FOR POINTING TO ALL INTERNAL TABLES
ADDRUP, 0
RINGDN, RNGEND

CDFMSG, 0
MSGCDF, 0
	JMP I	CDFMSG

	*600
START,	JMP	INITCD
GOTMAL, CAL
	RECEIV
CALADR, 0
	DCA	MSGCDF
	TAD	CALADR
	DCA	SAVADR
	TAD	CALADR
	DCA	ADDRUP	/ADDRESS FOR LOOKING AT ARGS
	JMS	CDFMSG
	TAD I	CALADR	/GET OP CODE
	CDF	CUR
	SPA		/0-12
	JMP I	(BADOP
	TAD	(-OPCODE	/UPPER LIMIT OF OP CODES
	SZA SMA
	JMP I	(BADOP
	TAD	(OPTBL+OPCODE
	DCA	T1
	TAD I	T1
	DCA	T1
	JMP I	T1	/DISPATCH TO TASK
OPTBL,	AOOP
	DOOP
	DIOP
	GCOP
	ECNTR
	RDCNTR
	DCNTR
	ECAOP
	RDCOS
	DCAOP
	AIOP
SAVADR, 0
UDCMOR, CIF CDF CUR
	TAD	RINGCT	/0=EMPTY,-10=FULL
	SZA CLA
	JMP I	(DORING /HANDLE THE RING BUFFER
	CDF	0	/BUFFER EMPTY
	TAD I	(TASK 2+MSGTBL
	SZA CLA
	JMP	GOTMAL	/MESSAGE WAITING
	TAD	(4000+TASK
	DCA	UDCEV
	CDF CUR
	CIF 0
	IOF
	WAITM		/RTS8 SUBROUTINE TO BLOCK
	EORMWT		/CURRENT TASK
	JMP	UDCMOR
UDCEV,	0
DERINT, 0
INITCD, CLA CLL
	TAD	(-NCNTC
	SNA
	JMP	GENERL
	DCA	T2
	TAD	(DCOSTB
	DCA	T1
	TAD	(FCT	/GET ADDRESS OF FIRST CONTACT
	DCA	AT2
INITLP, TAD	AT2
	UDLA
	UDRD
	DCA I	T1	/LOAD UP TBL WITH INIT VALUES
	ISZ	AT2
	ISZ	T1
	ISZ	T2
	JMP	INITLP
GENERL, DCA	RINGCT	/STARTS OUT EMPTY
			/RINGCT: -RINGBF = FULL;0 = EMPTY
	TAD	(RINGBT
	DCA I	(RINGPT
	TAD	(RINGBT
	DCA I	(TBLOUT
	IFDEF	PWRF<
	CAL
	SEND
	PWRF
	DRLADR
	>
	TAD	(-DCOSTB+CNTCTB
	DCA	T2
	TAD	(CNTCTB /FROM A SAFE DISTANCE
	DCA	T1	/START TO FILL TABLES
NEGIT,	CLA CMA 	/WITH 7777
	DCA I	T1
	ISZ	T1
	ISZ	T2
	JMP	NEGIT
	CAL
	SKPINS
	UDCINT
	UDEI
	JMP	UDCMOR

END,	CLA CLL 	/NO ERRORS RETURN
ERMSG,	DCA	T2
	TAD	SAVADR
	TAD	(6
	DCA	T1	/7TH WORD IS STATUS
	TAD	T2
	JMS	CDFMSG
	DCA I	T1
	CDF	CUR
	TAD	MSGCDF	/WHEN ALL DONE, POST EV FLG
	DCA	POSCDF
	AC7775
	TAD	SAVADR
	CAL
	POST
POSCDF, 0
	JMP	UDCMOR

	PAGE
UDCINT, ZBLOCK	2	/UDC INTERRUPT LEVEL CODE
			/WD 1 - ADDR NEXT SKIP CHAIN ENTRY
			/WD 2 - SET TO ITS CDF CIF
UDCSKP, UDSF		/SKIP IF FLAG SET
	JMP I	UDCINT	/EXIT FOR OTHER INTERRUPTS
	CDF CIF CUR
	TAD	(RINGBF
	TAD	RINGCT
	SNA CLA
	JMP	NOMORE	/IF FULL MUST WAIT
	TAD	RINGCT	/ROOM FOR AT LEAST 1 MORE
	DCA	OLDCT	/SAVE FOR BUFFER WAS EMPTY CHECK
	UDEI		/NEEDED BEC. UDSF TURNS INTS OFF
MORCHK, UDRS
	SNA
	JMP	OKPTR	/NO INTERRUPT PENDING-DONE
	UDSC
	UDSS
	JMP	.-1	/ONLY A SHORT WAIT
	UDRA		/GET VALUE
	DCA I	RINGPT	/GC+ADDR INTO BUFFER
	CLA CMA
	TAD	RINGCT	/NOW THAT WE'VE GOT A VALUE
	DCA	RINGCT	/BUMP COUNTER
	TAD I	RINGPT	/DECODE TIME
	CLL RTL
	SZL
	JMP	NOCNTC	/G.T. OR EQ. 4
	SMA CLA 	/0,1,2, OR 3
	JMP	ONEZER	/BAD NEWS
	TAD I	RINGPT	/CONTACT INTERRUPT
	AND	(377	/ADDRESS MASK
	TAD	(DCOSTB-FCT
	DCA	INT1
	TAD I	INT1
	DCA	INT2	/TEMP. SAVE PREVIOUS COS
	UDRD
	DCA I	INT1	/REPLACE WITH LATEST COS
	TAD	INT2
	UDLS		/GET PREV COS FOR CONTACTS
SAVEWD, ISZ	RINGPT
	DCA I	RINGPT
	CLL
	ISZ	RINGPT
	TAD	RINGPT
	TAD	(-RINGTP	/AVOID OVERFLO
	SNL CLA
	JMP	MORCHK
	CLL
	TAD	(RINGBT /POINT TO BOTTOM AGAIN
			/BUFFER FILLED BY 2S.
	DCA	RINGPT
	JMP	MORCHK
OKPTR,	TAD	OLDCT
	SNA CLA
	TAD	RINGCT	/BUFFER WAS EMPTY
			/SEE IF NOW HAS AN ENTRY
	SZA CLA 	/IF NO, POSTDS WITH AC=0
	TAD	(UDCEV	/POST UDC EVENT FLAG
			/BUFFER BECAME NON-EMPTY
			/SO WAKE UDC UP
	CIF	0
	POSTDS
OLDCT,	0

/IF NO MORE ROOM, REMOVE UDSF
/LEAVE UDC DISABLDED, SET FLAG, + POSTDS WITH AC=0
NOMORE, ISZ I	(REENAB
	DCA	UDCSKP	/0 THE SKIP
	CIF	0
	POSTDS		/AC=0
NOCNTC, CLL
	TAD	(2000
	SNL CLA
	JMP	SAVEWD	/A 0 FOR COUNTERS
	TAD I	RINGPT
	AND	(377	/ADDR PART FOR SUBCH GET
	DCA	INT1
	UDRD		/GET SUBCHANNEL.PREV ADDR IN
			/ADDR REG MUST BE FOR THIS CHAN
	AND	(7
	CLL RTR
	RTR		/INTO BITS 1-3
	STL RAR 	/AND NOW WHEN BIT 0=1=A/D INT
	TAD	INT1
	DCA I	RINGPT	/REPLACE WITH REARRANGED VALUE
			/REARRANGED VALUE:
			/BIT 0=A/D
			/BITS 1-3=SUBCHANNEL (0=1ST)
			/BITS 4-11=ADDR
	UDLD		/LOAD A 0 BEFORE READ(BIT 8)
	UDRD
	JMP	SAVEWD
RINGPT, 0
ONEZER, ISZ	RINGCT	/IGNORE BAD VALUES (OVERWRITE)
	NOP
	JMP	MORCHK
INT1,	0
INT2,	0
ADINT,	JMS I	(ADCHK	/GC, SUBCH + ADDR IN AC
	TAD I	(TBLWD1
	AND	(3400	/GET SUBCHANNEL 0-7
	CLL RTL
	RTL
	RTL		/SUBCH*2
	TAD	AT2	/NOW PTR WILL INCLUDE SUBCH
	DCA	AT2	/TABLE INDEX, INCL SUBCH
	TAD I	AT2
	DCA	ADFLD
	ISZ	AT2
	TAD I	AT2	/ADDR
	DCA	AT2
	TAD I	(TBLWD2
ADFLD,	0		/SET TO CDF
	DCA I	AT2	/PASS VALUE BACK
	CDF	CUR
	JMP I	RINGDN

	PAGE
REENAB, 0		/MUST BE WORD 0 OF PAGE
TBLOUT, 0

/NON-INTERRUPT CODE FOR UDC SERVICE
DORING, CLA CLL
	ISZ I	(RGORCM /IN CASE OF ERRORS
	TAD I	TBLOUT	/GC+ADDR WORD
	DCA	TBLWD1	/GC+ADDR
	ISZ	TBLOUT
	TAD I	TBLOUT	/WORD 2
	DCA	TBLWD2
	ISZ	TBLOUT
	CLA CLL
	TAD	(-RINGTP
	TAD	TBLOUT
	SNL CLA 	/CHECK FOR OVERFLOW
	JMP	OKOUT
	TAD	(RINGBT
	DCA	TBLOUT
OKOUT,	ISZ	RINGCT	/ROOM FOR 1 MORE
	NOP
	CIF	CUR	/GOES WITH NOMORE CODE
	TAD	REENAB	/SEE IF ROOM NOW
	SNA CLA
	JMP	NOTRUB	/NO PROBLEM
	DCA	REENAB	/NOW THERE'LL BE ROOM
	TAD	(UDSF	/SO FIX IT ALL UP
	DCA I	(UDCSKP
	UDEI
NOTRUB, TAD	TBLWD1	/DET. GENERIC TYPE
	SPA
	JMP I	(ADINT	/LO BIT SET =A/D
	CLL RTL
	SNL
	JMP I	(CONTAC
/JUMPING ON THRU
COUNTR, CLA CLL
	TAD	TBLWD1
	JMS I	(COUNCK /TEST FOR VALIDITY
	DCA	TBLPTR	/CNTTBL PTR
	TAD I	TBLPTR	/CHECK FOR RELOAD
	DCA	T1
	ISZ	TBLPTR
	TAD I	TBLPTR
	IAC
	SNA CLA
	JMP I	(UDCMOR /THIS COUNTER NOT CURRENTLY ENABLED
	TAD	TBLWD1
	AND	(377	/ADDR
	IOF
	UDLA
	TAD	T1
	SZA
	UDLD		/RESET TO FETCHED VALUE
	UDLA		/BACK TO ADDR 0
	ION
	JMS	DISPTH
RNGEND, DCA I	(RGORCM /CLEAR IT
	JMP I	(UDCMOR
TBLWD1, 0
TBLWD2, 0

DISPTH, 0
	TAD	TBLPTR
	DCA I	(DFLG
	TAD I	TBLPTR
	AND	(177
	DCA	T1	/ACTION + TASK NO.
	TAD I	TBLPTR
	ISZ	TBLPTR	/DETERMINE ACTION
	CLL RTL
	SNL
	JMP	ZROTWO
	CLA CLL
	TAD	T1	/1=RUN
	CAL
	RUN
	JMP I	(ENDDIS
ZROTWO, SMA CLA 	/LO 3=0 FOR E.F;BIT 2=1 FOR E.A.
	JMP I	(SEVFLG
	TAD I	TBLPTR	/GET ADDR FOR DERAIL
	DCA	EADDR
	TAD	T1
	CAL
	DERAIL
EADDR,	0
	JMP I	(ENDDIS
DDSPTH, JMP I	DISPTH
	IFZERO RINGBF+RINGBF+.-REENAB-160&4000<
	PAGE>
/LEAVE ROOM FOR CODE+LITERALS
/TRY TO PREVENT PAGE OVERFLOWS

/RING BUFFER HAS 2 WORDS/INTERRUPT
/WORD 1 = GC+ADDR;4NNN=A/D
/WORD 2 = XOR FOR CONTACTS,0 FOR COUNTERS,A/D VALUE FOR AI
RINGBT, ZBLOCK 2 RINGBF-1
RINGTP, 0
/IF IT'S IN THE RING BUFFER, IT AT LEAST HAD A
/VALID GENERIC CODE (NOT 0 OR 1) AT INTERRUPT TIME
	PAGE
SEVFLG, TAD	(6200	/6200 TO FORM CDF
	TAD	T1	/WITH SAVED HI 6 BITS
	DCA	EFCDF
	AC7775
	TAD I	TBLPTR	/ADDR IN TBL
	CAL
	POST
EFCDF,	0
			/SET USER'S MESSAGE EV FLAG IMMED
			/WHEN CALLED IF TASK NO OR DERAIL
			/IF EVENT FLAG, WAIT TIL VERY END
ENDDIS, TAD I	DFLG
	AND	(400
	SNA CLA
	JMP I	(DDSPTH /MORE THAN ONCE
	CLA CMA
	DCA I	DFLG	/ONCE ONLY. 7777 BACK IN TABLE
	ISZ	DFLG
	CLA CMA
	DCA I	DFLG
	JMP I	(DDSPTH
DFLG,	0

CONTAC, SMA	CLA
	JMP I	RINGDN
	TAD I	(TBLWD1
	JMS I	(CNTCCK /CHECK FOR ALL LEGAL
	TAD	T1
	DCA	CCHNO	/CHANNEL NO. STRIPPED
	TAD I	(TBLWD2
	DCA	ROTWD	/COS VALUE
	DCA	BITCNT	/WILL COUNT BITS
NOTSET, TAD	ROTWD	/ROTATED ALREADY FOR BIT TO EXAM
	SNA
	JMP  I	RINGDN	/ALL BITS CHECKED
	SMA	CLA	/CHECK FOR SET BITS
	JMP	ROTATE
/IF BIT SET,DO ITS ACTION. CHECK ALL 12 BITS
/IF BIT = 0, MOVE ON
	TAD	BITCNT
	DCA	T2
	TAD	CCHNO
	DCA	T1
	JMS I	(CINDEX
	TAD I	TBLPTR
	IAC
	SZA CLA
	JMS I	(DISPTH /DO WHAT HE SAYS
ROTATE, ISZ	BITCNT
	TAD	ROTWD
	RAL CLL
	DCA	ROTWD
	JMP	NOTSET
ROTWD,	0
BITCNT, 0
CCHNO,	0
DIOP,	JMS	GC0	/CHECK GENERIC CODE
READCH, ISZ	ADDRUP
	UDRD
	ION
	JMS	CDFMSG
	DCA I	ADDRUP	/RETURN VALUE
	CDF	CUR
	UDLA		/RESET TO 0 FOR READ COUNTER
	JMP I	ENDOP

AOOP,
DOOP,	JMS	GC0
	JMS	ARG2
	UDLD		/LOAD THE DIGITAL(ANALOG) OUTPUT
	ION
	JMP I	ENDOP

GC0,	0
	JMS	ARG2
	JMS	CHNLCK
	SZA	CLA
	JMP	BADGC	/MUST BE 0
	JMP I	GC0

ARG2,	0		/GET NEXT ARG
	ISZ	ADDRUP
	JMS	CDFMSG
	TAD I	ADDRUP
	CDF CUR
	JMP I	ARG2

CHNNG,	ION		/LEFT OFF IN CHNLCK
	CLA CLL
	TAD	RGORCM
	SZA CLA
	JMP I	RINGDN	/OCCURRED AT DORING TIME
	AC0002
	JMP I	(ERMSG
BADGC,	ION
	CLA CLL
	TAD	RGORCM
	SZA CLA
	JMP I	RINGDN
	CLA IAC
	JMP I	(ERMSG
RGORCM, 0

CHNLCK, 0
	SPA
	JMP	CHNNG
	DCA	CHANNO	/MUST BE 0-377
	TAD	CHANNO
	TAD	(-377
	SMA SZA CLA
	JMP	CHNNG
	IOF
	TAD	CHANNO
	UDLA
	CLA CMA 	/CHECK FOR OPERATIONAL UDC-DH
	UDRA
	AND	(377
	CIA
	TAD	CHANNO
	SZA CLA
	JMP	CHNNG
	UDRA
	AND	(7400
	JMP I	CHNLCK	/RETURN WITH CHANNEL NUMBER
CHANNO, 0

	PAGE
ECAOP,	JMS	DECAST
	JMP I	(GETFLG

DECAST, 0		/DISABLE+ENABLE CONTACTS
	JMS I	(ARG2
	DCA	T1	/GET BIT NO. + CHAN NO.
	TAD	T1
	AND	(7400
	DCA	T2	/BIT NO.
	TAD	T2
	CLL
	TAD	(2000	/MUST BE L.T. 14
	SZL CLA
	JMP I	(BADGC
	TAD	T2	/BIT NUM
	RTL
	RTL
	RAL
	DCA	T2	/INTO LO 4 BITS
	TAD	T1
	JMS	CNTCCK
	JMS	CINDEX
	TAD	TBLPTR
	DCA	AT2
	JMP I	DECAST

CNTCCK, 0		/ADDR IN AC;RETURN WITH GC
	JMS	MASCHK
	RTL
	SZL		/2 OR 3 ONLY
	JMP I	(BADGC
	SMA CLA
	JMP I	(BADGC
	JMS	LIMCHK
	-FCT-NCNTC
	NCNTC
	JMP I	CNTCCK

LIMCHK, 0
	TAD I	LIMCHK
	ISZ	LIMCHK
	TAD	T1	/COMPARE UPPER TABLE LIMIT
	SMA
	JMP I	(CHNNG
	TAD I	LIMCHK	/AND LOWER LIMIT
	ISZ	LIMCHK
	SPA
	JMP I	(CHNNG
	DCA	T1	/CHANNEL NO. (0-N)
	JMP I	LIMCHK
MASCHK, 0		/ADDR IN AC
	AND	(377
	DCA	T1
	TAD	T1
	JMS I	(CHNLCK
	ION
	JMP I	MASCHK

CINDEX, 0		/BIT NO. IN T2, CH. NO. IN T1
	TAD	T1
	CLL RTL
	DCA	TBLPTR	/USING IT AS A TEMP
	TAD	T1
	RAL
	TAD	TBLPTR	/NOW *6
	RTL		/*30
	DCA	T1
	TAD	T2	/BIT NO.
	RAL CLL 	/*2
	TAD	T1
	TAD	(CNTCTB
	DCA	TBLPTR
	JMP I	CINDEX

DCAOP,	JMS	DECAST
	JMP	TWOFIL

MINUS1, 0		/MOVE POINTER BACK BY 1
	CLA CMA
	DCA I	AT2
	ISZ	AT2
	JMP I	MINUS1

DCNTR,	JMS I	(CNTRST
	JMS	MINUS1	/MUST DISABLE ALL WORDS
			/WORD 2 ACTUALLY CHECKED
TWOFIL, JMS	MINUS1
	JMS	MINUS1
	JMP I	ENDOP

RDCOS,	JMS I	(ARG2
	JMS	CNTCCK
	TAD	T1
	TAD	(DCOSTB
	DCA	T2
	TAD I	T2	/GET LAST VALUE
	JMP	SENDIT
GCOP,	JMS I	(ARG2
	IOF
	UDLA
	UDRA
	ION
	AND	(7400	/RETURN GC
	CLL RTL
	RTL
	RAL
SENDIT, ISZ	ADDRUP
	JMS	CDFMSG
	DCA I	ADDRUP
	CDF	CUR
	JMP I	ENDOP

DRLADR, ZBLOCK 3
	DERINT

BADOP,	CLA CLL
	TAD	(3
	JMP I	(ERMSG

	PAGE
ECNTR,	JMS	CNTRST
	IOF
	DCA	T2
	TAD I	(CHANNO
	UDLA
	TAD	T2	/INIT VALUE
	UDLD
	UDLA		/REENABLE COUNTER
	ION
	JMS I	(ARG2	/GET RELOAD INFO
	DCA I	AT2
	ISZ	AT2
GETFLG, JMS I	(ARG2	/GET TASK NO.
	DCA I	AT2
	TAD I	AT2
	SPA CLA
	JMP	EVFLGQ
	ISZ	AT2	/RUN OR DERAIL
	JMS I	(ARG2
	DCA I	AT2	/ADDRESS
	JMP I	ENDOP

EVFLGQ, TAD I	AT2	/CHECK FOR ONCE ONLY
	AND	(400
	DCA I	AT2
	TAD I	(MSGCDF /NEED FIELD AT DISPATCH TIME
	AND	(77	/MUST PRESERVE LO 3 BITS AS 0
	TAD I	AT2
	DCA I	AT2	/HI 6=PART OF CDF
	ISZ	AT2
	TAD I	(SAVADR /NEED PTR TO EVENT FLAG
	DCA I	AT2
	JMP I	(UDCMOR

CNTRST, 0
	JMS I	(ARG2
	JMS	COUNCK
	DCA	AT2
	JMS I	(ARG2	/INIT VALUE
	JMP I	CNTRST

COUNCK, 0		/ADDR IN AC, RETURNS W COUNTER TBL PTR
	JMS I	(MASCHK
	CLL RTL
	SNL
	JMP I	(BADGC
	CLL
	TAD	(2000
	SZL CLA 	/4-6 ONLY
	JMP I	(BADGC
	JMS I	(LIMCHK
	-FCTR-NCNTR
	NCNTR
	TAD	T1
	RAL CLL
	TAD	T1	/*3
	TAD	(CNTTBL
	JMP I	COUNCK

RDCNTR, JMS I	(ARG2
	JMS	COUNCK
	IOF
	CLA
	TAD I	(CHANNO
	UDLA
	JMP I	(READCH
AIOP,	JMS I	(ARG2
	JMS	ADCHK
	JMS I	(ARG2	/SUBCHANNEL WORD PASSED AS:
			/BIT 0=ENABLE;1-3=GAIN
			/9-11=SUBCHAN;7=READ CNTRL REG
	AND	(3757
	TAD	(4020	/FORCE ENABLE+READ CNTRL REG BITS
	DCA	T2
	TAD	T2
	AND	(7	/GET SUBCHANNEL
	RAL CLL
	TAD	AT2	/ADD SUBCH*2 INTO TBL PTR
	DCA	AT2
	ISZ	ADDRUP
	TAD I	(MSGCDF
	DCA I	AT2	/FLD
	ISZ	AT2
	TAD	ADDRUP
	DCA I	AT2	/ADDR
	IOF
	TAD I	(CHANNO /MAJOR CHANNEL
	UDLA
	TAD	T2	/GAIN,SUBCHANNEL WORD
	UDLD		/NO TIME TO WAIT TIL DONE SO LOAD
			/SUBCHAN + CATCH IT THRU INTERRUPTS
	ION
	JMP I	ENDOP

ADCHK,	0
	JMS I	(MASCHK
	CLL RAL
	TAD	(1000	/CHECK GC
	SNL	CLA
	JMP I	(BADGC	/ONLY 7
	JMS I	(LIMCHK
	-FAD-NAD
	NAD
	TAD	T1	/CHANNEL (HI 8)
	CLL RTL 	/*4
	DCA	AT2
	TAD	AT2
	TAD	T1	/*5
	RAL		/*12
	TAD	AT2	/*16
	TAD	(ADTBL
	DCA	AT2
	JMP I	ADCHK
	PAGE
CNTCTB,
/CONTACT TABLE
/30 WORDS/CHANNEL IN PAIRS. ORDERED FROM HI TO LO BIT
/WORD 1 = ACTION + TASK NO.; BIT 3=REPEAT FLAG
/	  FOR EV. FLAG, LO 3 =0,HI 6=PART OF CDF
/WORD 2 = ADDRESS
/7777 = DISABLED OR NEVER ENABLED

	CNTTBL=NCNTC 30+CNTCTB
/COUNTER TABLE. 3 WORDS/CHANNEL
/WORD 1 = RELOAD VALUE
/WORD 2 = ACTION + TASK
/WORD 3 = ADDRESS

	ADTBL=NCNTR 3+CNTTBL
/A/D TABLE. 16 WORDS/CHANNEL
/2 WORDS/SUBCHANNEL;7 SUBCHANNELS/UDC CHANNEL
/WORD 1= FIELD
/WORD 2= ADDRESS TO PASS ANS TO

	DCOSTB=NAD 16+ADTBL
/CHANGE OF STATE TABLE
/1 WORD/CONTACT CHANNEL
/INITIALIZED AT MORINT

	ENDUDC=DCOSTB+NCNTC
	IFZERO ENDUDC-.&4000<
	ZBLOCK ENDUDC-.>
	$



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