This is progressing very nicely and I now have 1024 leds in colour.

In order to conserve RAM I got rid of two of the colour arrays for the NeoPixels and just kept a single array with RGB info in bits 5,6,7 and brightness info in bit 0-4.


So optimising code is my next priority.

The actual WS2812B led driving code is limited by strict timing protocols and is already in assembler so we will ignore that for now.

Evaluation of the 1024 grid life matrix must take some time so perhaps you can have a look at the code and if any glaring time sucking stuff leaps out make suggestions?

This part evaluates the primary 32 x 32 matrix and poulates a secondary 32 x 32 matrix with the updated information based on 'life' standard rules.

Code:
'----------------------- Also creating a newled data array to be displayed on next generation -------------

FOR counter = 0 TO 1023

	population = 0 :topedge = 0 :botedge = 0 :lefedge = 0 :rigedge = 0

'Grid Edge Detection
	
	IF counter < 32 THEN botedge = 1

	IF counter > 991 THEN topedge = 1
	
	IF counter = 0 OR counter = 32 OR counter = 64 OR counter = 96 OR counter = 128 OR counter = 160 OR counter = 192 OR counter = 224_ 
    or counter = 256 OR counter = 288 OR counter = 320 OR counter = 352 OR counter = 384 OR counter = 416 OR counter = 448 OR counter = 480_
    or counter = 512 OR counter = 544 OR counter = 576 OR counter = 608 OR counter = 640 OR counter = 672 OR counter = 704 OR counter = 736_
    or counter = 768 OR counter = 800 OR counter = 832 OR counter = 864 OR counter = 896 OR counter = 928 OR counter = 960 OR counter = 992_
    THEN     
    lefedge = 1
	ENDIF 	
	
  	IF counter = 31 OR counter = 63 OR counter = 95 OR counter = 127 OR counter = 159 OR counter = 191 OR counter = 223_ 
    or counter = 255 OR counter = 287 OR counter = 319 OR counter = 351 OR counter = 383 OR counter = 415 OR counter = 447 OR counter = 479_
    or counter = 511 OR counter = 543 OR counter = 575 OR counter = 607 OR counter = 639 OR counter = 671 OR counter = 703 OR counter = 735_
    or counter = 767 OR counter = 799 OR counter = 831 OR counter = 863 OR counter = 895 OR counter = 927 OR counter = 959 OR counter = 991_
    THEN    
    rigedge = 1
	ENDIF    
	
'Grid Evaluation	
	        	
	
	IF led [counter-1] > 0 AND counter > 0 THEN
	    Colour[population] = led[counter-1]
		population = population + 1
	ENDIF
	
	IF led [counter+1] > 0 AND counter < 1023 THEN
	    Colour[population] = led[counter+1]
		population = population + 1  		
	ENDIF
	
	IF botedge = 0 THEN
		IF led [counter-31] > 0 THEN
		    Colour[population] = led[counter-31]
			population = population + 1			
		ENDIF
		IF led [counter-32] > 0 THEN
		    Colour[population] = led[counter-32]  
			population = population + 1
		ENDIF
		IF  rigedge = 0 and led [counter-33] > 0 THEN
		    Colour[population] = led[counter-33]
			population = population + 1
		ENDIF
	ENDIF
	
	IF topedge = 0 THEN
		IF led [counter+31] > 0 THEN
		    Colour[population] = led[counter+31]
			population = population + 1
		ENDIF
		IF led [counter+32] > 0 THEN
		    Colour[population] = led[counter+32]
			population = population + 1
		ENDIF
		IF  rigedge = 0 and led [counter+33] > 0 THEN 
		    Colour[population] = led[counter+33]
			population = population + 1
		ENDIF
	ENDIF
	
	lednew[counter] = led[counter]
	
	IF led[counter] > 0 THEN
		IF population > 3 OR population < 2 THEN
			lednew[counter] = 0
		ENDIF
	ENDIF
	
	IF led[counter] = 0 THEN
		IF population = 3 THEN
		
		    if Colour[0] = Colour[1] then
		    lednew[counter] = Colour[0]
		    
		    elseif Colour[0] = Colour[2] then
            lednew[counter] = Colour[0]
            
            elseif Colour[1] = Colour[2] then
            lednew[counter] = Colour[1]
            
            else   
            
            lednew[counter] = led[counter]     'White LED
		    
		    endif   	
			
		ENDIF
	ENDIF
NEXT counter

The second section moves data from the led matrix into the NeoPixel led array for display.
I previously posted about this due to the led matrix and NeoPixel matrix having a different layout.

It all works well at about 3hz but i'm looking for speed increases if possible.

Code:
   	alive = 0	            'Clears alive accumulator
	dead = 0                'Clears dead checksum accumulator

  FOR Row = 0 to 31			' Cycle thru 32 rows
    
     FOR Col = 0 to 31			' of 32 pixels each          
       InPtr = (Row * 32) + Col   '  
       led[InPtr] = lednew[InPtr]         
       IF Row.0 = 0 THEN	' If the row number is even   
         OutPtr =  InPtr        ' Output pixels in true order       
       ELSE
         OutPtr = (Row * 32) + (31-Col)   ' Output pixels in reversed order        
       ENDIF
       
       IF led[InPtr] > 0 THEN
       NeoLed(OutPtr) = Led[InPtr]	
       alive = alive + 1
       dead = dead + InPtr
	   else 
       NeoLed(OutPtr) = 0	
	   ENDIF
      
     NEXT
  NEXT

The current colour code can be seen running in this short video.