	
	org	hcoreStartPc
	
	.def	pixelCount	64800	;740*450/5 (5 cores)	
	.def	pixelOffset	129600
	
	nop
	nop
	
	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	r20,0			;counter
	
doAgain	
	
	move	hold,testPic
	moveh	hold,last,>>testPic
	add	r0,last,r21		;+offset
	
	move	hold,frame
	moveh	hold,last,>>frame
	add	r1,last,r21		;+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
	
loop
	ld	r13		;00RRGGBB
	
	cmpeq	r3,r2
	rqld.tc	r0,2		;request next
	
	and	hold,r13,r5
	lsr	r10,last,16	;r10  = 0000 00RR
	and	r12,r13,r4	;r12  = 0000 00BB
	lsr	hold,r13,8	;hold = 0000 RRGG
	and	r11,last,$ff	;r11  = 0000 00GG
	
	;process
	
	fead		r10,r20		
	mul_fead	r10,r11,r20	;r * c
	mul_fead	r11,r12,r20	;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	r14,last,r10	;00RR GGBB
	
	
	
	st	r14,r1,0
	
	cmpeq	r3,r2
	br.tc	loop
	add	r3,r3,1		;delay slot
	add	r0,r0,2		;delay slot
	add	r1,r1,2		;delay slot
	nop			;delay slot
	
	add	hold,r20,1
	and	r20,last,$ff
	
	br	doAgain				
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	
	
	;loop forever
	
notCoreZero

	br	notCoreZero
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
	nop			;delay slot
