In the Grid Evalutaion section, precalculating the Array index values and replacing the AND-logic with nested IF/THEN saves Another bunch of cycles
Code:
'Grid Evaluation	

CntPlus33 VAR WORD
CntPlus32 VAR WORD
CntPlus31 VAR WORD
CntPlus1  VAR WORD

CntMinus33 VAR WORD
CntMinus32 VAR WORD
CntMinus31 VAR WORD
CntMinus1  VAR WORD

CntPlus33 = Counter + 33
CntPlus32 = Counter + 32
CntPlus31 = Counter + 31
CntPlus1 = Counter +1

CntMinus33 = Counter - 33
CntMinus32 = Counter - 32
CntMinus31 = Counter - 31
CntMinus1 = Counter - 1	        	
	
	IF led[CntMinus1] > 0 THEN
      IF counter > 0 THEN
	    Colour[population] = led[CntMinus1]
		population = population + 1
	  ENDIF
	ENDIF
	
	IF led[CntPlus1] > 0 THEN
      IF counter < 1023 THEN
	    Colour[population] = led[CntPlus1]
		population = population + 1  		
       ENDIF
    ENDIF
	
	IF botedge = 0 THEN
		IF led [CntMinus33] > 0 THEN
		    Colour[population] = led[CntMinus33]
			population = population + 1			
		ENDIF
		IF led [CntMinus32] > 0 THEN
		    Colour[population] = led[CntMinus32]  
			population = population + 1
		ENDIF
		IF  rigedge = 0 and led [CntMinus33] > 0 THEN
		    Colour[population] = led[CntMinus33]
			population = population + 1
		ENDIF
	ENDIF
	
	IF topedge = 0 THEN
		IF led [CntPlus31] > 0 THEN
		    Colour[population] = led[CntPlus31]
			population = population + 1
		ENDIF
		IF led [CntPlus32] > 0 THEN
		    Colour[population] = led[CntPlus32]
			population = population + 1
		ENDIF
		IF  rigedge = 0 and led [CntPlus33] > 0 THEN 
		    Colour[population] = led[CntPlus33]
			population = population + 1
		ENDIF
	ENDIF
It's not nearly as elegant but it does increase the performance a bit. All in all that 1024 iteration FOR/NEXT loop took 265ms to execute on my test board, now it's 67. Obviously I don't know if it still WORKS so it might all be for nothing :-)

/Henrik.