|  |  |  | @ -1,15 +1,34 @@ | 
			
		
	
		
			
				
					|  |  |  |  | ( | 
			
		
	
		
			
				
					|  |  |  |  |     ; simple GOL with screen and a buffer | 
			
		
	
		
			
				
					|  |  |  |  |     ; simple GOL with screen and a buffer + DRAWING!!! | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     ; Middle-click to payse or resume  | 
			
		
	
		
			
				
					|  |  |  |  |     ; (hold the button until paused - there is a sleep between generations and checking buttons) | 
			
		
	
		
			
				
					|  |  |  |  |     ; | 
			
		
	
		
			
				
					|  |  |  |  |     ; When paused, draw with left (white) and right (black) mouse buttons | 
			
		
	
		
			
				
					|  |  |  |  |     ; | 
			
		
	
		
			
				
					|  |  |  |  |     ; Resume by clicking middle again. | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     (def GENERATION_MS 200) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     ; Real pixel size | 
			
		
	
		
			
				
					|  |  |  |  |     (sc-init 400 400) | 
			
		
	
		
			
				
					|  |  |  |  |     ; Upscaling factor (bug pixels) | 
			
		
	
		
			
				
					|  |  |  |  |     (sc-opt SCREEN_UPSCALE 10) | 
			
		
	
		
			
				
					|  |  |  |  |     (sc-opt SCREEN_AUTO_BLIT 0) | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     ; Number of big pixels | 
			
		
	
		
			
				
					|  |  |  |  |     (def W 40) | 
			
		
	
		
			
				
					|  |  |  |  |     (def H 40) | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     ; !!! If you change size, also update the following constants. | 
			
		
	
		
			
				
					|  |  |  |  |     ;     Compile-time math is not implemented yet. | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     (def XMAX 39) ; W-1 | 
			
		
	
		
			
				
					|  |  |  |  |     (def YMAX 39) ; H-1 | 
			
		
	
		
			
				
					|  |  |  |  |     (def NCELLS 1600) ; W*H | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |     ; --- end of config --- | 
			
		
	
		
			
				
					|  |  |  |  |     (sc-opt SCREEN_AUTO_BLIT 0) | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     (sc-erase 0) ; all black | 
			
		
	
		
			
				
					|  |  |  |  |     (sym ng g15) | 
			
		
	
		
			
				
					|  |  |  |  |     (mkbf ng NCELLS) | 
			
		
	
	
		
			
				
					|  |  |  | @ -28,12 +47,60 @@ | 
			
		
	
		
			
				
					|  |  |  |  |     (bfwr @ng 96 1) | 
			
		
	
		
			
				
					|  |  |  |  |     (bfwr @ng 97 1) | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     (def LBTN 0) | 
			
		
	
		
			
				
					|  |  |  |  |     (def RBTN 1) | 
			
		
	
		
			
				
					|  |  |  |  |     (def MBTN 2) | 
			
		
	
		
			
				
					|  |  |  |  |                  | 
			
		
	
		
			
				
					|  |  |  |  |     (:loop) | 
			
		
	
		
			
				
					|  |  |  |  |         (sc-poll) | 
			
		
	
		
			
				
					|  |  |  |  |         ; TODO interactivity? | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         ; Drawing | 
			
		
	
		
			
				
					|  |  |  |  |         (sc-mbtn _ MBTN | 
			
		
	
		
			
				
					|  |  |  |  |             (nz? | 
			
		
	
		
			
				
					|  |  |  |  |                 (:release) | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-poll) | 
			
		
	
		
			
				
					|  |  |  |  |                     (mslp 10) | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-mbtn _ MBTN (nz? (j :release))) | 
			
		
	
		
			
				
					|  |  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |  |                 (:mousing) | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-poll) | 
			
		
	
		
			
				
					|  |  |  |  |                     (mslp 10) | 
			
		
	
		
			
				
					|  |  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |  |                     (ld r3 -1) | 
			
		
	
		
			
				
					|  |  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-mbtn _ LBTN) | 
			
		
	
		
			
				
					|  |  |  |  |                     (ld.nz r3 1) | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-mbtn _ RBTN) | 
			
		
	
		
			
				
					|  |  |  |  |                     (ld.nz r3 0) | 
			
		
	
		
			
				
					|  |  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |  |                     (tst r3 (nneg? | 
			
		
	
		
			
				
					|  |  |  |  |                         (sc-mouse r0 r1) | 
			
		
	
		
			
				
					|  |  |  |  |                          | 
			
		
	
		
			
				
					|  |  |  |  |                         (tst r3) | 
			
		
	
		
			
				
					|  |  |  |  |                         (sc-wr.nz r0 r1 #ffffff) | 
			
		
	
		
			
				
					|  |  |  |  |                         (sc-wr.z r0 r1 #000000) | 
			
		
	
		
			
				
					|  |  |  |  |                          | 
			
		
	
		
			
				
					|  |  |  |  |                         (sc-blit) | 
			
		
	
		
			
				
					|  |  |  |  |                         (mul r1 W) | 
			
		
	
		
			
				
					|  |  |  |  |                         (add r0 r1) | 
			
		
	
		
			
				
					|  |  |  |  |                         (ld8 r3:8 r3) | 
			
		
	
		
			
				
					|  |  |  |  |                         (bfwr @ng r0 r3) | 
			
		
	
		
			
				
					|  |  |  |  |                     ))                     | 
			
		
	
		
			
				
					|  |  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-mbtn _ MBTN  | 
			
		
	
		
			
				
					|  |  |  |  |                         (z? (j :mousing))) | 
			
		
	
		
			
				
					|  |  |  |  |                          | 
			
		
	
		
			
				
					|  |  |  |  |                 (:release2) | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-poll) | 
			
		
	
		
			
				
					|  |  |  |  |                     (mslp 10) | 
			
		
	
		
			
				
					|  |  |  |  |                     (sc-mbtn _ MBTN (nz? (j :release2))) | 
			
		
	
		
			
				
					|  |  |  |  |             ) | 
			
		
	
		
			
				
					|  |  |  |  |         )        | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         (call Display) | 
			
		
	
		
			
				
					|  |  |  |  |         (sc-blit) | 
			
		
	
		
			
				
					|  |  |  |  |         (mslp 200) | 
			
		
	
		
			
				
					|  |  |  |  |         (mslp GENERATION_MS) | 
			
		
	
		
			
				
					|  |  |  |  |         (j :loop) | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     (proc CountNeighbors x y | 
			
		
	
	
		
			
				
					|  |  |  | 
 |