87 lines
1.2 KiB
Text
87 lines
1.2 KiB
Text
DEFINE ROW_LEN="320"
|
|
DEFINE MAX_COL="319"
|
|
DEFINE MAX_ROW="191"
|
|
|
|
PROC GenerateMask(BYTE rule BYTE ARRAY mask)
|
|
BYTE i
|
|
|
|
FOR i=0 TO 7
|
|
DO
|
|
mask(i)=rule&1
|
|
rule==RSH 1
|
|
OD
|
|
RETURN
|
|
|
|
PROC InitRow(BYTE ARRAY row)
|
|
INT c
|
|
|
|
FOR c=0 TO MAX_COL
|
|
DO
|
|
row(c)=0
|
|
OD
|
|
row(ROW_LEN RSH 1)=1
|
|
RETURN
|
|
|
|
PROC DrawRow(BYTE ARRAY row BYTE y)
|
|
INT c
|
|
|
|
FOR c=0 TO MAX_COL
|
|
DO
|
|
Color=row(c)
|
|
Plot(c,y)
|
|
OD
|
|
RETURN
|
|
|
|
PROC CalcNextRow(BYTE ARRAY currRow,nextRow,mask)
|
|
INT c
|
|
BYTE v
|
|
|
|
v=currRow(MAX_COL) LSH 2
|
|
v==%currRow(0) LSH 1
|
|
v==%currRow(1)
|
|
nextRow(0)=mask(v)
|
|
FOR c=1 TO MAX_COL-1
|
|
DO
|
|
v==&3
|
|
v==LSH 1
|
|
v==%currRow(c+1)
|
|
nextRow(c)=mask(v)
|
|
OD
|
|
v==&3
|
|
v==LSH 1
|
|
v==%currRow(0)
|
|
nextRow(MAX_COL)=mask(v)
|
|
RETURN
|
|
|
|
PROC DrawRule(BYTE rule)
|
|
BYTE ARRAY row1(ROW_LEN),row2(ROW_LEN),mask(8)
|
|
BYTE ARRAY currRow,nextRow,tmp
|
|
BYTE y
|
|
|
|
GenerateMask(rule,mask)
|
|
currRow=row1
|
|
nextRow=row2
|
|
InitRow(currRow)
|
|
y=0
|
|
WHILE y<=MAX_ROW
|
|
DO
|
|
DrawRow(currRow,y)
|
|
CalcNextRow(currRow,nextRow,mask)
|
|
tmp=currRow currRow=nextRow nextRow=tmp
|
|
y==+1
|
|
OD
|
|
RETURN
|
|
|
|
PROC Main()
|
|
BYTE CH=$02FC,COLOR1=$02C5,COLOR2=$02C6
|
|
|
|
Graphics(8+16)
|
|
Color=1
|
|
COLOR1=$0C
|
|
COLOR2=$02
|
|
|
|
DrawRule(30)
|
|
|
|
DO UNTIL CH#$FF OD
|
|
CH=$FF
|
|
RETURN
|