	.TITLE	RFRESH


;	* * * ID-200 SERIES SOFTWARE MODULE * * *


;	REFRESH ENTIRE IMAGE ON AN ID-2000 SERIES IMAGE DISPLAY SYSTEM
;	FROM AN INTERLEAVED IMAGE FILE ON THE SPECIFIED DEVICE.

;	ALL NEW CODE: 21 OCOTBER 77

;	PROGRAMMER: KEN DINWIDDIE

	.MCALL	..V2..,.REGDEF,.LOOKUP
	.MCALL	.READ,.WRITW,.CLOSE,.QSET,.CSISPC,.WAIT

	..V2..

	.REGDEF

	.GLOBL	RFRESH,NEWPIX
	.PAGE
	.SBTTL	DOUBLE-BUFFERED IMAGE FILE READ LOOP


NEWPIX:	.QSET	#QUEUE,#3	; ADD THREE ELEMENTS TO I/O QUEUE
	.CSISPC	#IMFILE,#DEFEXT	; PICK UP INPUT FILE SPECIFICATION
	TST	(SP)+		; BUMP STACK POINTER UP ONE - NO SWITCH
RFRESH:	.LOOKUP	#AREA0,#0,#IMFIL1
	CLR	BLK		; SET TO BEGINNING OF FILE
	MOV	#377,R1		; START AT TOP OF IMAGE VIEWING WINDOW
	MOV	#7777,R2	; SET ALL BIT PLANE MASK BITS
	TST	(R5)+		; POINT TO BUFFER ADDRESS
	MOV	(R5)+,R4	; PICK UP BUFFER POINTER
	ADD	#6,R4		; BUMP UP THREE WORD LOCATIONS
	MOV	R4,BUFF1	; AND SAVE FOR FUTURE REFERENCE
	ADD	#4102.,R4	; OFFSET TO SECOND BUFFER
	MOV	R4,BUFF2	; AND SAVE IT FOR FUTURE REFERENCE
	MOV	@(R5)+,R3	; PICK UP CONTROL/STATUS CODE
	BIS	#52,R3		; AND FOLD IN RASTER WRITE CLEARING V-BITS
	.READ	#AREA0,#0,BUFF1,#2048.,BLK	; READ A BUFFER FULL
FILLB:	.WAIT	#0		; WAIT FOR COMPLETION OF READ
	ADD	#10,BLK		; ADVANCE TO NEXT BLOCK
	.READ	#AREA0,#0,BUFF2,#2048.,BLK	; READ A BUFFER FULL
	MOV	BUFF1,R4	; POINT TO BUFFER #1
	JSR	PC,SHOW		; DISPLAY THIS BLOCK
	.WAIT	#0		; WAIT FOR COMPLETION OF PREVIOS READ REQUEST
	ADD	#10,BLK		; ADVANCE TO NEXT BLOCK
	.READ	#AREA0,#0,BUFF1,#2048.,BLK	; READ NEXT BUFFER FULL
	MOV	BUFF2,R4	; POINT TO BUFFER #2
	JSR	PC,SHOW		; AND DISPLAY THAT BLOCK
	BR	FILLB
	.PAGE
	.SBTTL	DISPLAY EIGHT LINES OF INTERLEAVED IMAGE DATA


SHOW:	MOV	#10,R5		; INITIALIZE BLOCK COUNTER
SHOW1:	MOV	R3,-(R4)	; SET UP CONTROL/STATUS CODE,
	MOV	R2,-(R4)	; BIT-PLANE MASK,
	MOV	R1,-(R4)	; AND RASTER NUMBER
	.WRITW	#AREA1,#16,R4,#256.,#0	; AND SEND TO DISPLAY SYSTEM
	TST	R1		; LAST LINE TO BE DISPLAYED ?
	BEQ	DONE		; FINISH UP IF SO
	SUB	#100,R1		; MOVE DOWN 64 LINES
	BGE	SHOW2		; SKIP BIASING STEP IF STILL VIEWABLE
	ADD	#377,R1		; BACK NEAR TOP OF IMAGE IF WE'VE DROPPED OFF
SHOW2:	ADD	#518.,R4	; ADVANCE BUFFER POINTER TO NEXT RECORD
	DEC	R5		; ACCOUNT FOR DISPLAYED RASTER
	BNE	SHOW1		; AND GO SHOW ANOTHER IF MORE IN THIS BLOCK
	RTS	PC

DONE:	.CLOSE	#0		; CLOSE THE DISK CHANNEL
	TST	(SP)+		; BUMP THE STACK POINTER UP ONE
	RTS	PC
	.PAGE
	.SBTTL	POINTERS,BUFFERS,CONSTANTS,ETC.


BLK:	.WORD	0		; BLOCK COUNTER FOR DISK ACCESS
IMFILE:	.BLKW	17		; SPACE FOR OUTPUT FILE SPECIFICATION
IMFIL1:	.BLKW	30		; SPACE FOR INPUT FILE SPECIFICATION
DEFEXT:	.RAD50	/PIC/		; DEFAULT IMAGE FILE SPECIFICATION
	.WORD	0,0,0
AREA0:	.BLKW	6
AREA1:	.BLKW	6
QUEUE:	.BLKW	7*3		; SPACE FOR EXTRA I/O QUEUE ELEMENTS
BUFF1:	.BLKW	1		; SPACE FOR BUFFER #1 POINTER
BUFF2:	.BLKW	1		; SPACE FOR BUFFER #2 POINTER
	.END
                                                                                                                                                     