	.TITLE	RPLIMG


;	* * * IEC-2212 SOFTWARE MODULE * * *


;	REFRESHES AN IEC-2212 IMAGE ENHANCEMENT CONSOLE WITH THE IMAGE
;	FILE "IMAGE.PIC" ON FLOPPY DISK IN DRIVE 1 (DX1) OR DRIVE 0 (DX0)
;	DEPENDING ON THE SELECTED ENTRY POINT.

;	ALL NEW CODE: 27 JULY 77
;	MODIFICATIONS TO: 16 AUGUST 77

;	PROGRAMMER: KEN DINWIDDIE

	.MCALL	..V2..,.REGDEF,.LOOKUP,.READW,.CLOSE

	..V2..

	.REGDEF

	.GLOBL	RPLIM0,RPLIM1

;	ID-2000 REGISTER DEFINITIONS:

	XREG	= 166000
	YREG	= 166002
	BPMR	= 166004
	CSR	= 166006
	DREG	= 166010
	.PAGE
	.SBTTL	SINGLE-BUFFERED READ LOOP


RPLIM0:	.LOOKUP	#AREA0,#0,#IMFIL0	; PREPARE TO READ FROM DRIVE 0
	BR	START
RPLIM1:	.LOOKUP	#AREA0,#0,#IMFIL1	; PREPARE TO READ FROM DRIVE 1
START:	CLR	BLK	; SET TO BEGINNING OF FILE
	MOV	#377,R1	; START AT TOP OF SCREEN
	MOV	#7777,@#BPMR	; BIT PLANE MASK ALL ONE'S
	MOV	#DREG,R3	; DATA REGISTER ADDRESS TO R3
	TST	(R5)+	; POINT TO BUFFER ADDRESS
	MOV	(R5)+,BUFF1	; PICK UP BUFFER POINTER
FILLB:	.READW	#AREA0,#0,BUFF1,#4096.,BLK	; READ A BUFFER FULL
	ADD	#20,BLK	; ADVANCE TO NEXT BLOCK
	MOV	BUFF1,R4	; POINT TO BUFFER #1
	JSR	PC,SHOW	; DISPLAY THIS BLOCK
	BR	FILLB
	.PAGE
	.SBTTL	64-LINE INTERLACED IMAGE DISPLAY SUBROUTINE


SHOW:	MOV	#20,R5	; INITIALIZE BLOCK COUNTER
SHOW1:	MOV	R1,@#YREG	; SET RASTER NUMBER
	CLR	@#XREG		; POINT TO START OF LINE BUFFER
	.REPT	400
	MOV	(R4)+,(R3)	; LOAD LINE BUFFER WITH DATA
	.ENDR
	MOV	#53,@#CSR	; SHOW THE DATA LINE
WAIT:	TSTB	@#CSR
	BPL	WAIT		; WAIT FOR READY BIT APPEARANCE
	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:	DEC	R5	; ACCOUNT FOR DISPLAYED RASTER
	BEQ	SHOW3	; QUIT IF DONE WITH THIS BLOCK
	JMP	SHOW1	; OR GO SHOW ANOTHER IF MORE THIS BUFFER
SHOW3:	RTS	PC

DONE:	.CLOSE	#0	; CLOSE THE DISK CHANNEL
	TST	(SP)+	; BUMP THE STACK POINTER UP ONE
	RTS	PC 	; AND RETURN TO THE CALLING PROGRAM
	.PAGE
	.SBTTL	DATA BUFFERS, POINTERS, CONSTANTS, ETC.


BLK:	.WORD	0	; BLOCK COUNTER FOR DISK ACCESS
IMFIL0:	.RAD50	/DX0IMAGE PIC/	; IMAGE INPUT FILE SPECIFICATION FOR DRIVE 0
IMFIL1:	.RAD50	/DX1IMAGE PIC/	; IMAGE INPUT FILE SPECIFICATION FOR DRIVE 1
AREA0:	.BLKW	6
BUFF1:	.WORD	0	; SPACE FOR BUFFER #1 POINTER
	.END
                                                                                                                                                                                              