Google
 

Trailing-Edge - PDP-10 Archives - bb-m780a-sm - monitor-sources/cdkldv.mac
There are 45 other files named cdkldv.mac in the archive. Click here to see a list.
;<4.MONITOR>CDKLDV.MAC.4,  4-Mar-79 14:37:31, Edit by KONEN
;UPDATE COPYRIGHT FOR RELEASE 4
;<4.MONITOR>CDKLDV.MAC.3,  1-Jan-79 15:19:46, EDIT BY DBELL
;TCO 4.2139 - DON'T READ AHEAD CARDS IF ANY ERROR IS DETECTED.
;<4.MONITOR>CDKLDV.MAC.2, 15-Dec-78 13:21:25, EDIT BY ENGEL
;AT CDVTFE+4 CHANGE TO KLRSTS

;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1976,1977,1978,1979 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

	RESCD
	SEARCH PROKL

CDRDTV::CDRHSD			;STRING DATA
	R			; JUST RETURN
	CDRTLS			;STATUS
	0			;NO LINE ALLOCATION
	CDRSER			;SYSERR ENTRY
	CDRRLD			;RELOAD ACTION

ASCBSZ:	POINT 16,0		;BYTE POINTER FOR ASCII CHARACTERS

CDVTFE==.
	IFIW!CDRDC		;READ A CARD
	IFIW!CDRFLS		;CLOSE
	IFIW!R			;RESTART
	IFIW!R			;INIT
	IFIW!KLRSTS		;RETURN STATUS
	IFIW!R			;BYTE SWAP
; ROUTINE CALLED FROM DTE SERVICE ON AN -11 RELOAD

CDRRLD:	CAME A,MSTRDT		;IS THIS THE MASTER?
	RET			;NO
	SAVET			;PRESERVE TEMPORARY AC'S
	MOVSI A,-CDRN		;GET AOBJN POINTER WITH UNIT # IN RH

CDRRL2:	SETONE CDER,(A)		;INDICATE THIS CARD READER HAD AN ERROR
	SETONE CDRLD,(A)	;MARK THAT THIS FRONT END WAS RELOADED
	SETZRO CDBLK,(A)	;NO NEED TO BLOCK
	AOS CARDER(A)		;BUMP ERROR COUNT
	AOBJN A,CDRRL2		;LOOP OVER ALL CARD READERS
	RET			;RETURN
;ROUTINE CALLED FROM THE PROTOCOL SERVICE TO DETERMINE THE OWNING
;PROCESS FOR A CDR. CALL IS:
;	B/ UNIT,,DEVICE-CODE
;RETURNS:
;	+2 ALWAYS WITH A=OWNING PROCESS OR -1

CDRSER:	HLRZS B			;GET UNIT
	JE CDOPN,(B),[		;IS IT OPENED?
		MOVEI A,-1	;NO. SAY UNASSIGNED
		RETSKP]		;AND GO BACK
	LOAD A,CDFRK,(B)	;GET FORK ID
	RETSKP			;AND GO TO IT
	RESCD
;DTE INTERRUPT SERVICE

	RESCD			;MUST BE RESIDENT

CDRHSD::JSP CX,CHKCDR		;GO VERIFY ARGS
	JE CDOPN,(B),R		;IF NOT OPENED, RETURN
	SAVEQ			;SAVE REGS
	MOVE U,B		;UNIT NUMBER
	MOVEI C,0(A)		;MOVE THE COUNT
	LOAD A,CDWRD,(B)	;WHERE IT IS GOING
	HRLI A,0(D)		;SOURCE
	MOVEI D,0(A)		;DEST AGAIN
	LSH C,-2		;WORDS TO COPY
	ADDI D,0(C)		;WHERE WE WILL WIND UP
	STOR D,CDWRD,(B)	;WHERE TO BEGIN NEXT
	BLT A,-1(D)		;COPY THE DATA
	LSH C,2			;RESTORE BYTE COUNT FOR COMPUTATION
	LOAD A,CDCNT,(B)	;GET CURRENT COUNT
	ADDI A,0(C)		;NEW COUNT AFTER THIS TRANSFER
	STOR A,CDCNT,(B)	;SAVE IT
	CAIGE A,^D160		;A FULL CARD ARRIVED?
	RET			;NO. ALL DONE
	AOS CARDCT(B)		;ANOTHER CARD ARRIVED
	AOS CDRCT1(B)		;ONE MORE BUFFER FILLED
	SETZRO CDBLK,(B)	;NOT WAITING FOR A CARD ANYMORE
	CALL SETBF1		;GO FIND INT BUFFER
	LOAD C,CDBFI,(U)	;GET INTERRUPT LEVEL BUFFER BIT
	XORI C,1		;TOGGLE IT
	STOR C,CDBFI,(U)	;READ INTO THIS ONE NEXT
	JN CDAII,(U),[	LDB A,[POINT ^D16,0(A),15]
			TRC A,7417 ;SEE IF THIS IS AN EOF
			TRCE A,17 ;IS IT?
			TRCN A,7400 ;OR THIS FLAVOR?
			RET	 ;IS AN EOF
			JRST .+1] ;NOT AN EOF
	LOAD A,CDERR,(U)	;GET HARDWARE STATUS
	SKIPG CDRCT1(U)		;ANOTHER PI BUFFER AVAILABLE?
	TXNE A,MO%HE!MO%OL!MO%SFL!MO%HEM!MO%SCK!MO%PCK!MO%RCK	;STATUS OK?
	RET			;NO, DON'T DO NEXT READ THEN
	CALLRET RDCARD		;DO READ AHEAD
;ROUTINE TO GET STATUS OF CDR

KLRSTS:	MOVE A,MSTRDT		;NO POST
	MOVE B,[.DFRDS,,.FECDR]	;REQUEST STATUS
	MOVSI C,0(U)		;THE UNIT, DIRECT
	MOVEI D,0(U)		;UNIT
	CALL DTEQ		;REQUEST STATUS
	 JFCL
	RET			;AND DONE

CDRFLS:	MOVE A,MSTRDT		;SEND FE ABORT
	MOVE B,[.DFFDO,,.FECDR]	;FLUSH THE OUTPUT
	SETZ C,			;IMMEDIATE REQUEST
	MOVEI D,0(U)		;THE UNIT TO DO
	CALLRET DTEQ		;TELL HIM


CDRDC:	MOVE A,MSTRDT		;NO POST
	STOR A,CDCNT,(U)	;NO BYTES IN PI BUFFER YET
	MOVE B,[.DFLBE,,.FECDR]	;SEND AN ACK
	SETZ C,			;IMMEDIATE
	MOVEI D,0(U)		;UNIT
	CALLRET DTEQ		;SEND IT
	END