
;      
;   V1.02 (  PDP11/03)
; : 
; R0 - 
; R1 -   
; R2 -  Y 

;  
; R0 - R
; R1 - X0
; R2 - Y0
; R3 - X
; R4 - Y
; R5 - D

LCIR02:	MOV     R5,-(SP)
	       MOV     R4,-(SP)
	       MOV     R3,-(SP)
	       MOV     R2,-(SP)
	       MOV     R1,-(SP)
	       MOV     R0,-(SP)
	       ; X=0
	       CLR     R3
	       ; Y=R-1
	       MOV     R0,R4 
	       ; D=2*R-1
	       MOV     R0,R5
	       DEC     R5
	       ;  
00:	    CALL    OUTPUT  ;  8 
	       ; X=X+1
	       INC     R3
	       ; D=D-2*X+1
	       SUB     R3,R5
	       INC     R5
	       CCC
	       ; if d<0
	       TST     R5
	       BMI     1
0:	     ; while x<=y
	       MOV     R4,-(SP)
	       SUB     R3,R4   ; (Y-X)=>0 ?
	       CCC
	       TST     R4
	       BMI     2
	       MOV     (SP)+,R4
	       BR      00

1:	     ; then ..
	       ; D=D+2*Y-1
	       ADD     R4,R5
	       DEC     R5
	       ; Y=Y-1
	       DEC     R4
	       BR      0

2:	     MOV     (SP)+,R4
	       MOV     (SP)+,R0
	       MOV     (SP)+,R1
	       MOV     (SP)+,R2
	       MOV     (SP)+,R3
	       MOV     (SP)+,R4
	       MOV     (SP)+,R5
	       RETURN

OUTPUT:	MOV     R0,-(SP)
	       MOV     #1,R0	       
	       CALL    OUT     ;A=X B=Y
	       XOR     R3,R4
	       XOR     R4,R3
	       XOR     R3,R4
	       MOV     #1,R0
	       CALL    OUT     ;A=Y B=X
	       XOR     R3,R4
	       XOR     R4,R3
	       XOR     R3,R4
	       MOV     (SP)+,R0
	       RETURN

OUT:	   MOV     R1,-(SP)
	       MOV     R2,-(SP)
	       ADD     R3,R1
	       ADD     R4,R2
	       EMT     30      ; (X0+A,Y0+B)
	       MOV     R1,-(SP)	       
	       MOV     4(SP),R1
	       SUB     R3,R1
	       EMT     30      ; (X0-A,Y0+B)
	       MOV     R1,R0
	       MOV     (SP),R1
	       MOV     R0,(SP)
	       MOV     #1,R0
	       MOV     2(SP),R2
	       SUB     R4,R2
	       EMT     30      ; (X0+A,Y0-B)
	       MOV     (SP)+,R1	       
	       EMT     30      ; (X0-A,Y0-B)
	       MOV     (SP)+,R2
	       MOV     (SP)+,R1
	       RETURN	       


	       .END        


