	
	.macro	rgbMul(rInOut)
		and	hold,rInOut,r5
		lsr	r10,last,16	;r10  = 0000 00RR
		and	r12,rInOut,r4	;r12  = 0000 00BB
		lsr	hold,rInOut,8	;hold = 0000 RRGG
		and	r11,last,$ff	;r11  = 0000 00GG
		
		;process
		
		fead		r10,r30		
		fead		r11,r30	
		mul_fead	r10,r12,r30	;r * c
		mul		r11		;g * c
		mul		r12		;b * c
		
		;
		
		lsr	r10,r10,8
		lsr	r11,r11,8
		lsr	r12,r12,8
			
		;assemble
		
		lsl	r10,r10,16	;00RR 0000
		lsl	hold,r11,8	;0000 GG00
		or	hold,last,r12	;0000 GGBB
		or	rInOut,last,r10	;00RR GGBB
	.endmacro
	
	org	hcoreStartPc
	
	.def	pixelCount	40500	;	;720*450/8 (8 cores) / 8 loads	
	.def	pixelOffset	162000	;	;720*450*2/8 (8cores)
	
	nop
	nop
	nop
	nop

	gssr	hold,0			;get core number
	cmpeq	last,0
	br.tc	notCoreZero
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	
	
	move	hold,pixelOffset
	moveh	hold,last,>>pixelOffset
	or	r0,last,0	;
	gssr	hold,0			;get core number
	fead	last,r0	
	nop
	mul	r21			;offset = pixel count * core number
	
	move	r30,0			;counter
	
doAgain	
	
	move	hold,testPic
	moveh	hold,last,>>testPic
	add	r0,last,r21		;source+offset
	
	move	hold,frame
	moveh	hold,last,>>frame
	add	r1,last,r21		;dest+offset
	
	move	hold,pixelCount
	moveh	hold,last,>>pixelCount	
	or	r2,last,0		;count
	
	move	hold,$ffff
	moveh	hold,last,$00ff	
	or	r5,last,0		;
	move	r4,$ff
	move	r3,1			;
	
	rqld	r0,0
	rqld	r0,2
	rqld	r0,4
	rqld	r0,6
	rqld	r0,8
	rqld	r0,10
	rqld	r0,12
	rqld	r0,14
	
loop
	ld	r13		;00RRGGBB
	ld	r14		;00RRGGBB
	ld	r15		;00RRGGBB
	ld	r16		;00RRGGBB
	ld	r17		;00RRGGBB
	ld	r18		;00RRGGBB
	ld	r19		;00RRGGBB
	ld	r20		;00RRGGBB

	cmpeq	r3,r2
	rqld.tc	r0,16		;request next
	rqld.tc	r0,18		;request next
	rqld.tc	r0,20		;request next
	rqld.tc	r0,22		;request next
	rqld.tc	r0,24		;request next
	rqld.tc	r0,26		;request next
	rqld.tc	r0,28		;request next
	rqld.tc	r0,30		;request next
	
	.execm	rgbMul(r13)
	.execm	rgbMul(r14)
	.execm	rgbMul(r15)
	.execm	rgbMul(r16)
	.execm	rgbMul(r17)
	.execm	rgbMul(r18)
	.execm	rgbMul(r19)
	.execm	rgbMul(r20)

	st	r13,r1,0
	st	r14,r1,2
	st	r15,r1,4
	st	r16,r1,6
	st	r17,r1,8
	st	r18,r1,10
	st	r19,r1,12
	st	r20,r1,14
	
	cmpeq	r3,r2
	br.tc	loop
	add	r3,r3,1		;delay slot
	add	r0,r0,16	;delay slot
	add	r1,r1,16	;delay slot
	nop			;delay slot
	
	add	hold,r30,1
	and	r30,last,$ff
	
	br	doAgain				
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	
notCoreZero	
	br	notCoreZero
	nop
	nop
	nop
	nop
	