	.TITLE	DISPLA


;	* * * ID-2000 OR 5000 SOFTWARE MODULE * * *


;	PROVIDES A FORTRAN-CALLABLE INTERFACE TO THE ID-2000/5000 DEVICE HANDLER.


; CALLING CONVENTIONS:

;	(1) ANNOTATION OR INTENSITY TRANSFORMATION TABLE TRANSFERS

;		CALL DISPLA (IXADDR, IBUFFR, IWDCNT)

;	IXADDR = X-ADDRESS
;	IBUFFR = BUFFER ADDRESS
;	IWDCNT = NUMBER OF WORDS TO TRANSFER: + TO WRITE, - TO READ

;	(2) IMAGE REFRESH MEMORY TRANSFERS

;		CALL DISPLA (IXADDR, IBUFFR, IWDCNT, ICSREG, IBPMSK, IYADDR)

;	IXADDR, IBUFFR, IWDCNT IDENTICAL TO (1) EXCEPT THAT IWDCNT = 0
;		HAS THE SPECIAL FUNCTION OF LOADING THE ID-2000/5000 CONTROL-
;		STATUS REGISTER WITH THE VALUE OF ICSREG WITHOUT ANY
;		FURTHER ACTION.

;	ICSREG = DESIRED CONTROL/STATUS CONTENTS
;		(GO BIT (0) NOT REQUIRED - READBACK CODE NOT REQUIRED FOR READ)
;	IBPMSK = BIT-PLANE MASK
;	IYADDR = Y-ADDRESS

;	NOTE:	FOR TRANSFERS OF TYPE 2, THREE EXTRA WORDS MUST BE ALLOCATED
;		IN FRONT OF THE BUFFER FOR THE Y-ADDRESS, BIT-PLANE MASK,
;		AND CONTROL/STATUS RESPECTIVELY.
	.PAGE
;	ALL NEW CODE: 13 MAY 77
;	MODIFICATIONS TO: 27 JULY 77
;	COMMENTS CLARIFIED: 13 NOVEMBER 78

;	PROGRAMMER: KEN DINWIDDIE


	.MCALL	..V2..,.REGDEF,.FETCH,.LOOKUP,.WRITW,.READW,.EXIT

	DZSIZE	=420	; SIZE OF DZ HANDLER FOR ID-2000 DISPLAY (WORDS)

	.GLOBL	DISPLA

	..V2..

	.REGDEF
	.PAGE
DISPLA:	MOV	(R5)+,R0	; PICK UP ARGUMENT COUNT
	CLR	IOMODE		; SET WRITE MODE
	MOV	@(R5)+,R4	; PICK UP X-ADDRESS
	MOV	(R5)+,R2	; BUFFER ADDRESS TO R2
	MOV	@(R5)+,R3	; WORD COUNT TO R3
	BPL	ARGCHK		; IF WRITE OPERATION CONFIRMED
	DEC	IOMODE		; FLAG A READ OPEARATION
	COM	R3
	INC	R3		; AND MAKE WORD COUNT POSITIVE
ARGCHK:	CMP	#3,R0		; ANNOTATION OR ITT TRANSFER ?
	BEQ	SETUP		; IF SO, GO SET UP HANDLER
	MOV	@(R5)+,-(R2)	; SET UP CONTROL/STATUS @ BUFFER - 2
	MOV	@(R5)+,-(R2)	; BIT-PLANE MASK @ BUFFER - 4
	MOV	@(R5)+,-(R2)	; AND Y-ADDRESS @ BUFFER - 6
SETUP:	TST	DZRES		; DZ HANDLER ALREADY RESIDENT ?
	BNE	TSTMOD		; YES, PROCEED
	.FETCH	#DZSPAC,#DZNAME	; FETCH THE DZ HANDLER
	.LOOKUP	#AREA,#16,#DZNAME	; HOOK TO CHANNEL 14
	DEC	DZRES		; AND SHOW HANDLER RESIDENT
TSTMOD:	TST	IOMODE		; DETERMINE OPERATION TYPE
	BNE	READ		; IF READ, GO DO IT
	.WRITW	#AREA,#16,R2,R3,R4	; ISSUE WRITE REQUEST TO DISPLAY
	RTS	PC
READ:	.READW	#AREA,#16,R2,R3,R4	; ISSUE READ REQUEST TO DISPLAY
	BCS	QUIT		; READ ERROR, GIVE UP
	RTS	PC

QUIT:	.EXIT			; SO SORRY, GIVE UP.
	.PAGE
IOMODE:	.WORD	0		; I/O MODE FLAG
DZRES:	.WORD	0		; HANDLER RESIDENT FLAG
DZNAME:	.RAD50	/DZ          /	; HANDLER NAME
AREA:	.BLKW	6
DZSPAC:	.BLKW	DZSIZE		; SPACE FOR HANDLER LOAD
	.END
                                                                                                                                                                                                                                                                                                                                                                                                                                                