/* CONWAY'S GAME OF LIFE 02/12/92 */ /* Programmed by Terry Newton */ /* 160 by 96 Cells in four colors */ /* Arrays start at $5300 */ /* Link to... */ /* ACECIO.CCC Ace C functions */ /* CELLS.OBJ Generation code */ /* CMPA400.OBJ Compress code */ /* ENGINE.OBJ Ace C runtime */ int check1; char *popadr,*denadr; char *repadr,*dead,*monadr; char *popcnt,*gencnt; char inpstr[40]; int key,esc,esc1,i,j,k,l; int func,x,y,err,desc,lock; int cr0,cr1,cr2,cr3; int creg,hue,intens,cbyte,mono; int check2; main() $( /* set Sparta RUNLOC */ if(peek(dpeek(10)+28)==128|| peek(0x0700)==0x53) dpoke(dpeek(10)+61,0x3635); popadr=0xA009;denadr=0xA00B; repadr=0xA00C;dead=0xA00D; monadr=0xA00E; if(peek(dead)==127)check1=0; if(check1!=1234||check2!=5678) $( poke(dpeek(0x2CB4),peek(0x0021)+48); mono=0;poke(monadr,0);poke(dead,0); dpoke(popadr,0);gencnt=0; poke(denadr,40);poke(repadr,20); x=80;y=48;desc=0; graphics(7);getcols(); $) else $( check1=0;check2=0; $) while(1) $( graphics(7+32);setcols(); poke(752,1);popcnt=dpeek(popadr); printf("↰Generation:%-5d Population:%-5d\n",gencnt,popcnt); printf(" R Random Mode L Load Colony\n"); printf(" E Edit Cells S Save Colony\n"); printf(" C Continue P Parameters"); func=0;while(func==0) $( key=toupper(getkey()); if(key=='C')func=1; if(key=='E')func=2; if(key=='R')func=3; if(key=='L')func=4; if(key=='S')func=5; if(key=='P')func=6; $) if(func==1)contgen(); if(func==2)editmode(); if(func==3)randmode(); if(func==4)load(); if(func==5)save(); if(func==6)submenu(); $) $) submenu() $( esc=0;while(esc==0) $( poke(752,1); printf("↰ D Random Start Density:%-3d\n",peek(denadr)); printf(" R Repeats Until Dead :%-3d\n",peek(repadr)); printf(" E Escape When Dead :"); if(desc)printf("Y");else printf("N"); printf("\n C Colors ESC Menu X DOS"); func=0;while(func==0) $( key=toupper(getkey()); if(key=='D')func=1; if(key=='R')func=2; if(key=='E')func=3; if(key=='C')func=4; if(key=='␛')func=5; if(key=='X')func=6; $) poke(752,0); printf("↑ \n↑↑↑→→→→→→→→→→→→→→→→→→→→→→→→→"); if(func==1) $( gets(inpstr); i=val(inpstr);poke(denadr,i); $) if(func==2) $( printf("↓");gets(inpstr); i=val(inpstr);poke(repadr,i); $) if(func==3) $( if(desc)desc=0;else desc=1; $) if(func==4) altcols(); if(func==5)esc=1; if(func==6) $( poke(752,1); printf("↰↓Press RETURN to Exit"); i=getkey();if(i==155) $( check1=1234;check2=5678; poke(752,0);printf("↰");exit(); $) $) $) $) randmode() $( graphics(7+16);setcols(); poke(764,255); esc=0;while(esc==0) $( randomstart();gencnt=0; esc1=0;while(esc1==0) $( generate();poke(77,0); if(peek(dead))esc1=1; key=peek(764);poke(764,255); if(key==0x000C)esc1=1; /* return */ if(key==0x0021) $( /* spc */ key=255; while(key==255)key=peek(764); poke(764,255); $) if(key==0x001C) $( esc=1;esc1=1; $) if(esc1==0)gencnt++; $) $) $) contgen() $( graphics(7+48);setcols(); poke(764,255);initialize(); esc=0;while(esc==0) $( generate();poke(77,0); key=peek(764);poke(764,255); if(desc&&peek(dead))esc=1; if(key==0x0021) $( key=255; while(key==255)key=peek(764); poke(764,255); $) if(key==0x001C)esc=1; if(esc==0)gencnt++; $) $) save() $( poke(752,0); printf("↰↓SAVE FILENAME>"); gets(inpstr); if(strlen(inpstr)>0) $( normalize(inpstr,"LIF"); err=open(4,8,0,inpstr); if(err<0)errtrap(); else $( cputc(7,4);cputc(cr1,4); cputc(cr2,4);cputc(cr3,4); cputc(254,4);cputc(cr0,4); encode(dpeek(0x0058),3840,4); printf(4,"%d\n",gencnt); printf(4,"%d\n",popcnt); $) close(4); $) $) load() $( poke(752,0); printf("↰↓LOAD FILENAME>"); gets(inpstr);poke(752,1); if(strlen(inpstr)>0) $( normalize(inpstr,"LIF"); err=open(4,4,0,inpstr); if(err<0)errtrap(); else $( i=cgetc(4);cr1=cgetc(4); cr2=cgetc(4);cr3=cgetc(4); j=cgetc(4);cr0=cgetc(4); if(i==7&&j==254) $( setcols(); decode(dpeek(0x0058),3840,4); cgets(inpstr,4);gencnt=val(inpstr); cgets(inpstr,4);popcnt=val(inpstr); dpoke(popadr,popcnt); $) else $( getcols(); printf("↰↓Not a CELLS File"); getkey(); $) $) close(4); $) $) char *byte; /* get pixel color */ getpix(a,b) int a,b; $( byte=dpeek(0x0058); byte+=y*40;byte+=x/4; i=*byte;j=x&3; if(j==0)i=i>>6; else if(j==1)i=i>>4; else if(j==2)i=i>>2; i=i&3;return(i); $) editmode() $( graphics(7+48);setcols(); k=1;l=0;lock=0; esc1=0;while(esc1==0) $( if(lock==0)i=getpix(x,y); while(peek(764)==255) $( if(l<20)color(i); else color(k); plot(x,y);l++; if(l>40) $( l=0;k++;if(k>3)k=1; $) $) color(i);plot(x,y); key=toupper(getkey()); if(key=='-')y--; if(key=='=')y++; if(key=='+')x--; if(key=='*')x++; if(key==' ') $( if(i==0)i=1;else i=0; if(i==1)popcnt++;else popcnt--; color(i);plot(x,y);gencnt=0; $) if(key=='L') $( if(lock==0)lock=1;else lock=0; $) if(key=='↰') $( graphics(7+16);setcols(); popcnt=0;gencnt=0; $) if(key=='␛')esc1=1; if(key==155)contgen(); if(x<0)x=159;if(x>159)x=0; if(y<0)y=95;if(y>95)y=0; $) dpoke(popadr,popcnt); $) errtrap() $( err=abs(err); printf("↰↓Error # %d",err); getkey(); $) /* Alter Colors */ altcols() $( creg=0;esc=0; while(esc==0) $( poke(752,1); if(creg==0)i=712;else i=707+creg; cbyte=peek(i)&254; hue=cbyte/16;intens=hue*16; intens=(cbyte-intens)&14; printf("↰↓ C Col:%-2d H Hue:%-2d L Lum:%d",creg,hue,intens); printf("\n↓ M Cell Mode: "); if(mono==0)printf("Color"); else printf("Monochrome"); key=toupper(getkey()); if(key=='C') $( creg++;if(creg>3)creg=0; $) else if(key=='H') $( hue++;if(hue>15)hue=0; $) else if(key=='L') $( intens+=2;if(intens>14)intens=0; $) else if(key=='M') $( if(mono==0)mono=1;else mono=0; poke(monadr,mono); if(mono==1) $( printf("↰↓Converting..."); initialize();generate(); $) $) else esc=1; if(key=='H'||key=='L') $( cbyte=hue*16;cbyte+=intens; if(creg==0)i=712;else i=707+creg; poke(i,cbyte); $) $) getcols(); $) getcols() $( cr0=peek(712);cr1=peek(708); cr2=peek(709);cr3=peek(710); $) setcols() $( poke(712,cr0);poke(708,cr1); poke(709,cr2);poke(710,cr3); $) /* ML interface */ generate() asm 0xA000; initialize() asm 0xA003; randomstart() asm 0xA006; encode() asm 0xA400; decode() asm 0xA403;