diff --git a/gol.cgl b/gol.cgl new file mode 100644 index 0000000..24d615b --- /dev/null +++ b/gol.cgl @@ -0,0 +1,77 @@ +# simple GoL on 16x16 field + +# three basic shapes +#my field[18]={0,2,24578,24578,0,0,0,0,0,0,0,112,64,32,0,7,0,0}; # note two buffer rows + +# Kok's galaxy +my field[18] = + { 0, 0, 0, 0, 8112, 8112, 48, 6192, 6192, 6192, 6144, 7152, 7152, 0, 0, 0, +0, 0 }; + +my gen = 0; +my i; + +my new[16]; + +my j; +my old; + +my n[8]; +my nbit[4]; +my tmp; +my i1; + +old = field + 1; + +do { + i = 0; + do { + + i1 = i - 1; + n[0] = old[i1] << 1; + n[1] = old[i1]; + n[2] = old[i1] >> 1; + + n[3] = old[i] << 1; + n[4] = old[i] >> 1; + + i1 = i + 1; + n[5] = old[i1] << 1; + n[6] = old[i1]; + n[7] = old[i1] >> 1; + + nbit[0] = n[0]; + nbit[1] = 0; + nbit[2] = 0; + nbit[3] = 0; + j = 1; + do { + tmp = nbit[0]; + nbit[0] ^= n[j]; + i1 = tmp & n[j]; + tmp = nbit[1]; + nbit[1] ^= i1; + i1 &= tmp; + tmp = nbit[2]; + nbit[2] ^= i1; + nbit[3] = i1 & tmp; # since always <= 8 + j += 1; + } while (j < 8); + + tmp = nbit[0] | old[i]; + tmp &= nbit[1]; + tmp &!= nbit[2]; + tmp &!= nbit[3]; + new[i] = tmp; + + i += 1; + } while (i < 16); + + j = 0; + do { + old[j] = new[j]; + j += 1; + } while (j < 16); + + gen += 1; +} while (gen < 32);