; life6.as
; unrolled pointer version for HI-TECH 4.11 C Cross Compiler
; by Andre Adrian, DL1ADR, 2026-05-06
;
; compile:
; zc -A2100,2900,13FF -O -Olife6.bin -mlife6.map life6.as
;/
	global	_putch
	psect	text
;I:\HITECH\stdio.h: 10: typedef	int		ptrdiff_t;
;I:\HITECH\stdio.h: 11: typedef	unsigned	size_t;
;I:\HITECH\stdarg.h: 5: typedef void *	va_list[1];
;I:\HITECH\stdio.h: 24: extern int	errno;
;I:\HITECH\stdio.h: 29: extern	struct	_iobuf {
;I:\HITECH\stdio.h: 30: 	char *		_ptr;
;I:\HITECH\stdio.h: 31: 	int		_cnt;
;I:\HITECH\stdio.h: 32: 	char *		_base;
;I:\HITECH\stdio.h: 33: 	unsigned short	_flag;
;I:\HITECH\stdio.h: 34: 	short		_file;
;I:\HITECH\stdio.h: 35: 	size_t		_size;
;I:\HITECH\stdio.h: 36: } _iob[	8];
;I:\HITECH\stdio.h: 43: extern struct _tfiles {
;I:\HITECH\stdio.h: 44: 	char	tname[34		];
;I:\HITECH\stdio.h: 45: 		struct _iobuf *	tfp;
;I:\HITECH\stdio.h: 46: }	_tfiles[8		];
;I:\HITECH\stdio.h: 91: extern int	_flsbuf(char, 	struct _iobuf *);
;I:\HITECH\stdio.h: 92: extern int	_filbuf(	struct _iobuf *);
;I:\HITECH\stdio.h: 93: extern int	fclose(	struct _iobuf *);
;I:\HITECH\stdio.h: 94: extern int	fflush(	struct _iobuf *);
;I:\HITECH\stdio.h: 95: extern int	fgetc(	struct _iobuf *);
;I:\HITECH\stdio.h: 96: extern int	ungetc(int, 	struct _iobuf *);
;I:\HITECH\stdio.h: 97: extern int	fputc(int, 	struct _iobuf *);
;I:\HITECH\stdio.h: 98: extern int	getw(	struct _iobuf *);
;I:\HITECH\stdio.h: 99: extern int	putw(int, 	struct _iobuf *);
;I:\HITECH\stdio.h: 100: extern char *	gets(char *);
;I:\HITECH\stdio.h: 101: extern int	puts(char *);
;I:\HITECH\stdio.h: 102: extern int	fputs(char *, 	struct _iobuf *);
;I:\HITECH\stdio.h: 103: extern int	fread(void *, size_t, size_t, 	struct _iobuf *);
;I:\HITECH\stdio.h: 104: extern int	fwrite(void *, size_t, size_t, 	struct _iobuf *);
;I:\HITECH\stdio.h: 105: extern int	fseek(	struct _iobuf *, long, int);
;I:\HITECH\stdio.h: 106: extern int	rewind(	struct _iobuf *);
;I:\HITECH\stdio.h: 107: extern void	setbuf(	struct _iobuf *, char *);
;I:\HITECH\stdio.h: 108: extern int	setvbuf(	struct _iobuf *, char *, int, size_t);
;I:\HITECH\stdio.h: 109: extern int	printf(char *, ...);
;I:\HITECH\stdio.h: 110: extern int	fprintf(	struct _iobuf *, char *, ...);
;I:\HITECH\stdio.h: 111: extern int	sprintf(char *, char *, ...);
;I:\HITECH\stdio.h: 112: extern int	scanf(char *, ...);
;I:\HITECH\stdio.h: 113: extern int	fscanf(	struct _iobuf *, char *, ...);
;I:\HITECH\stdio.h: 114: extern int	sscanf(char *, char *, ...);
;I:\HITECH\stdio.h: 115: extern int	vfprintf(	struct _iobuf *, char *, va_list);
;I:\HITECH\stdio.h: 116: extern int	vprintf(char *, va_list);
;I:\HITECH\stdio.h: 117: extern int	vsprintf(char *, char *, va_list);
;I:\HITECH\stdio.h: 118: extern int	vscanf(char *, va_list ap);
;I:\HITECH\stdio.h: 119: extern int	vfscanf(	struct _iobuf *, char *, va_list);
;I:\HITECH\stdio.h: 120: extern int	vsscanf(char *, char *, va_list);
;I:\HITECH\stdio.h: 121: extern int	remove(char *);
;I:\HITECH\stdio.h: 122: extern int	rename(char *, char *);
;I:\HITECH\stdio.h: 123: extern 	struct _iobuf *	fopen(char *, char *);
;I:\HITECH\stdio.h: 124: extern 	struct _iobuf *	freopen(char *, char *, 	struct _iobuf *);
;I:\HITECH\stdio.h: 125: extern 	struct _iobuf *	fdopen(int, char *);
;I:\HITECH\stdio.h: 126: extern long	ftell(	struct _iobuf *);
;I:\HITECH\stdio.h: 127: extern char *	fgets(char *, int, 	struct _iobuf *);
;I:\HITECH\stdio.h: 128: extern void	perror(const char *);
;I:\HITECH\stdio.h: 129: extern char *	_bufallo(void);
;I:\HITECH\stdio.h: 130: extern void	_buffree(char *);
;I:\HITECH\stdio.h: 131: extern char *	tmpnam(char *);
;I:\HITECH\stdio.h: 132: extern 	struct _iobuf *	tmpfile(void);
;I:\HITECH\string.h: 16: extern void *	memcpy(void *, const void *, size_t);
;I:\HITECH\string.h: 17: extern void *	memmove(void *, void *, size_t);
;I:\HITECH\string.h: 18: extern char *	strcpy(char *, char *);
;I:\HITECH\string.h: 19: extern char *	strncpy(char *, char *, size_t);
;I:\HITECH\string.h: 20: extern char *	strcat(char *, char *);
;I:\HITECH\string.h: 21: extern char *	strncat(char *, char *, size_t);
;I:\HITECH\string.h: 22: extern int	memcmp(const void *, const void *, size_t);
;I:\HITECH\string.h: 23: extern int	strcmp(char *, char *);
;I:\HITECH\string.h: 24: extern int	strncmp(char *, char *, size_t);
;I:\HITECH\string.h: 25: extern size_t	strcoll(char *, size_t, char *);
;I:\HITECH\string.h: 26: extern void *	memchr(void *, int, size_t);
;I:\HITECH\string.h: 27: extern size_t	strcspn(char *, char *);
;I:\HITECH\string.h: 28: extern char *	strpbrk(char *, char *);
;I:\HITECH\string.h: 29: extern size_t	strspn(char *, char *);
;I:\HITECH\string.h: 30: extern char *	strstr(char *, char *);
;I:\HITECH\string.h: 31: extern char *	strtok(char *, char *);
;I:\HITECH\string.h: 32: extern char *	strdup(char *);
;I:\HITECH\string.h: 33: extern void *	memset(void *, int, size_t);
;I:\HITECH\string.h: 34: extern char *	strerror(int);
;I:\HITECH\string.h: 35: extern size_t	strlen(char *);
;I:\HITECH\string.h: 36: extern char *	strchr(char *, int);
;I:\HITECH\string.h: 37: extern char *	strrchr(char *, int);
;life5.c: 19: void putch(char c) {
_putch:
	push	ix
	ld	ix,0
	add	ix,sp
;life5.c: 21: 	ld	a,(ix+4)
	ld	a,(ix+4) ;#
;life5.c: 22: 	rst 08h
	rst 08h ;#
;life5.c: 24: }
	pop	ix
	ret	
	global	_getche
;life5.c: 26: static char c_;
;life5.c: 28: char getche(void) {
_getche:
;life5.c: 30: 	rst 10h
	rst 10h ;#
;life5.c: 31: 	ld (_c_),a
	ld (_c_),a ;#
;life5.c: 33: 	putch(c_);
	ld	hl,_c_
	ld	l,(hl)
	push	hl
	call	_putch
	pop	bc
;life5.c: 34: 	return c_;
	ld	hl,_c_
	ld	l,(hl)
	ret	
	global	_cputs
;life5.c: 37: void cputs(char* s) {
_cputs:
	push	ix
	ld	ix,0
	add	ix,sp
	jp	l6
l7:
;life5.c: 39:         putch(*s++);
	ld	l,(ix+4)
	ld	h,(ix+5)
	inc	hl
	ld	(ix+4),l
	ld	(ix+5),h
	dec	hl
	ld	l,(hl)
	push	hl
	call	_putch
	pop	bc
l6:
	ld	l,(ix+4)
	ld	h,(ix+5)
	ld	a,(hl)
	or	a
	jp	nz,l7
;life5.c: 40: }
	pop	ix
	ret	
	global	_sgets
	psect	bss
F222:
	defs	1
	psect	text
;life5.c: 43: char* sgets(char* s, int size) {
_sgets:
	push	ix
	ld	ix,0
	add	ix,sp
	push	bc
;life5.c: 44:     char* s1 = s;
	ld	l,(ix+4)
	ld	h,(ix+5)
	ld	(ix+-2),l
	ld	(ix+-1),h
;life5.c: 45:     static char c;
;life5.c: 47:     while((c=getche())!='\r' && c!='\n' && --size) {
	jp	l10
u2581:
	ld	l,(ix+6)
	ld	h,(ix+7)
	dec	hl
	ld	(ix+6),l
	ld	(ix+7),h
	ld	a,l
	or	h
	jp	nz,l11
l12:
;life5.c: 50:     *s = 0;
	ld	l,(ix+4)
	ld	h,(ix+5)
	ld	(hl),0
;life5.c: 51:     if(s == s1)
	ld	e,(ix+-2)
	ld	d,(ix+-1)
	or	a
	sbc	hl,de
	jp	nz,l13
;life5.c: 52:         return((char *)0);
	ld	hl,0
	jp	l9
l11:
;life5.c: 48:         *s++ = c;
	ld	a,(F222)
	ld	l,(ix+4)
	ld	h,(ix+5)
	inc	hl
	ld	(ix+4),l
	ld	(ix+5),h
	dec	hl
	ld	(hl),a
;life5.c: 49:     }
l10:
	call	_getche
	ld	a,l
	ld	(F222),a
	cp	13
	jp	z,l12
	cp	10
	jp	nz,u2581
	jp	l12
l13:
	ld	l,(ix+-2)
	ld	h,(ix+-1)
l9:
	ld	sp,ix
	pop	ix
	ret	
	global	_prbcdu
	global	_strcpy
	global	wrelop
	global	wrelop
	global	wrelop
	global	wrelop
	psect	bss
F226:
	defs	6
	psect	text
;life5.c: 58: void prbcdu(unsigned n) {
_prbcdu:
	push	ix
	ld	ix,0
	add	ix,sp
;life5.c: 59:     static char s[6];
;life5.c: 61:     strcpy(s, "00000");
	ld	hl,u19
	push	hl
	ld	hl,F226
	push	hl
	call	_strcpy
	pop	bc
	pop	bc
;life5.c: 62:     while (n>=10000) {
	jp	l15
l16:
;life5.c: 63:         n-=10000;
	ld	de,10000
	ld	l,(ix+4)
	ld	h,(ix+5)
	or	a
	sbc	hl,de
	ld	(ix+4),l
	ld	(ix+5),h
;life5.c: 64:         ++s[0];
	ld	hl,F226
	inc	(hl)
;life5.c: 65:     }
l15:
	ld	de,10000
	ld	l,(ix+4)
	ld	h,(ix+5)
	call	wrelop
	jp	nc,l16
;life5.c: 66:     while (n>=1000) {
	jp	l18
l19:
;life5.c: 67:         n-=1000;
	ld	de,1000
	ld	l,(ix+4)
	ld	h,(ix+5)
	or	a
	sbc	hl,de
	ld	(ix+4),l
	ld	(ix+5),h
;life5.c: 68:         ++s[1];
	ld	hl,F226+1
	inc	(hl)
;life5.c: 69:     }
l18:
	ld	de,1000
	ld	l,(ix+4)
	ld	h,(ix+5)
	call	wrelop
	jp	nc,l19
;life5.c: 70:     while (n>=100) {
	jp	l21
l22:
;life5.c: 71:         n-=100;
	ld	de,100
	ld	l,(ix+4)
	ld	h,(ix+5)
	or	a
	sbc	hl,de
	ld	(ix+4),l
	ld	(ix+5),h
;life5.c: 72:         ++s[2];
	ld	hl,F226+2
	inc	(hl)
;life5.c: 73:     }
l21:
	ld	de,100
	ld	l,(ix+4)
	ld	h,(ix+5)
	call	wrelop
	jp	nc,l22
;life5.c: 74:     while (n>=10) {
	jp	l24
l25:
;life5.c: 75:         n-=10;
	ld	de,10
	ld	l,(ix+4)
	ld	h,(ix+5)
	or	a
	sbc	hl,de
	ld	(ix+4),l
	ld	(ix+5),h
;life5.c: 76:         ++s[3];
	ld	hl,F226+3
	inc	(hl)
;life5.c: 77:     }
l24:
	ld	de,10
	ld	l,(ix+4)
	ld	h,(ix+5)
	call	wrelop
	jp	nc,l25
;life5.c: 78:     s[4]+=n;
	ld	hl,F226+4
	ld	a,(hl)
	add	a,(ix+4)
	ld	(hl),a
;life5.c: 79:     cputs(s);
	ld	hl,F226
	push	hl
	call	_cputs
	pop	bc
;life5.c: 80: }
	pop	ix
	ret	
	global	_TAB
;life5.c: 82: void TAB(int x) {
_TAB:
	push	ix
	ld	ix,0
	add	ix,sp
	jp	l28
l29:
;life5.c: 84:         putch(' ');
	ld	l,32
	push	hl
	call	_putch
	pop	bc
;life5.c: 85:     }
l28:
	ld	l,(ix+4)
	ld	h,(ix+5)
	dec	hl
	ld	(ix+4),l
	ld	(ix+5),h
	ld	a,l
	or	h
	jp	nz,l29
;life5.c: 86: }
	pop	ix
	ret	
	psect	data
_G:
	defw	0
_P:
	defw	0
_E:
	defb	0
	global	_main
	global	shll
	global	shll
	global	_strlen
	global	shll
	global	wrelop
	global	shll
	global	wrelop
	global	shll
	global	lmul
	global	shll
	global	wrelop
	global	wrelop
	global	lmul
	global	lmul
	global	wrelop
	global	wrelop
	psect	text
;life5.c: 88: static unsigned G=0, P=0;
;life5.c: 89: static unsigned char E=0, L, X, Y, X1, X2, X3, X4, Y1, Y2, Y3, Y4;
;life5.c: 90: static char A[50  +1][70  +1], B[32][32];
;life5.c: 91: static char *pX, *pY, *p;
;life5.c: 93: int main() {
_main:
	push	ix
	ld	ix,0
	add	ix,sp
	dec	sp
;life5.c: 94:     register unsigned char C=0;
	ld	(ix+-1),0
;life5.c: 95: 	putch('\n');
	ld	l,10
	push	hl
	call	_putch
	pop	bc
;life5.c: 96:     TAB(34); cputs("LIFE\n");
	ld	hl,34
	push	hl
	call	_TAB
	pop	bc
	ld	hl,u29
	push	hl
	call	_cputs
	pop	bc
;life5.c: 97:     TAB(15); cputs("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n"
	ld	hl,15
	push	hl
	call	_TAB
	pop	bc
;life5.c: 98:                     "\n\n"
;life5.c: 99:                     "ENTER YOUR PATTERN:\n");
	ld	hl,u39
	push	hl
	call	_cputs
	pop	bc
;life5.c: 100:     for (;;) {
l32:
;life5.c: 101:         sgets(B[C], sizeof(B[0]));
	ld	hl,32
	push	hl
	ld	de,_B
	ld	b,5
	ld	l,(ix+-1)
	ld	h,0
	call	shll
	add	hl,de
	push	hl
	call	_sgets
	pop	bc
	pop	bc
;life5.c: 102:         if (B[C][0]=='D') {
	ld	de,_B
	ld	b,5
	ld	l,(ix+-1)
	ld	h,0
	call	shll
	add	hl,de
	ld	a,(hl)
	cp	68
	jp	nz,l35
;life5.c: 103:             break;
;life5.c: 107:     --C; L=0;
	dec	(ix+-1)
	ld	hl,_L
	ld	(hl),0
;life5.c: 108:     for(X=0; X<=C-1; ++X) {
	ld	hl,_X
	ld	(hl),0
	jp	l39
l35:
	inc	(ix+-1)
;life5.c: 106:     }
	jp	l32
l36:
;life5.c: 109:         if (strlen(B[X])>L)
	ld	de,_B
	ld	b,5
	ld	hl,_X
	ld	l,(hl)
	ld	h,0
	call	shll
	add	hl,de
	push	hl
	call	_strlen
	pop	bc
	ex	de,hl
	ld	hl,_L
	ld	l,(hl)
	ld	h,0
	call	wrelop
	jp	nc,l38
;life5.c: 110:             L=strlen(B[X]);
	ld	de,_B
	ld	b,5
	ld	hl,_X
	ld	l,(hl)
	ld	h,0
	call	shll
	add	hl,de
	push	hl
	call	_strlen
	pop	bc
	ld	a,l
	ld	(_L),a
;life5.c: 111:     }
l38:
	ld	hl,_X
	inc	(hl)
l39:
	ld	hl,_X
	ld	e,(hl)
	ld	d,0
	ld	c,(ix+-1)
	ld	b,d
	ld	hl,-1
	add	hl,bc
	call	wrelop
	jp	nc,l36
;life5.c: 112:     X1=(50  >>1)-(C>>1); X2=X1+C;
	ld	e,(ix+-1)
	srl	e
	ld	a,25
	sub	e
	ld	(_X1),a
	ld	hl,_X1
	ld	a,(ix+-1)
	add	a,(hl)
	ld	(_X2),a
;life5.c: 113:     Y1=(70  >>1)-(L>>1); Y2=Y1+L;
	ld	hl,_L
	ld	l,(hl)
	srl	l
	ld	a,35
	sub	l
	ld	(_Y1),a
	ld	hl,_L
	add	a,(hl)
	ld	(_Y2),a
;life5.c: 114:     for (X=0; X<=C; ++X) {
	ld	hl,_X
	ld	(hl),0
	jp	l44
l41:
;life5.c: 115:         for (Y=0; Y<strlen(B[X]); ++Y) {
	ld	hl,_Y
	ld	(hl),0
	jp	l48
l45:
;life5.c: 116:             if (B[X][Y]=='*') {
	ld	hl,_Y
	ld	e,(hl)
	ld	d,0
	ld	b,5
	ld	hl,_X
	ld	l,(hl)
	ld	h,d
	call	shll
	add	hl,de
	ld	de,_B
	add	hl,de
	ld	a,(hl)
	cp	42
	jp	nz,l47
;life5.c: 117:                 A[X1+X][Y1+Y]=1; ++P;
	ld	hl,_Y
	ld	e,(hl)
	ld	d,0
	ld	hl,_Y1
	ld	l,(hl)
	ld	h,d
	add	hl,de
	push	hl
	ld	de,71
	ld	hl,_X
	ld	c,(hl)
	ld	b,0
	ld	hl,_X1
	ld	l,(hl)
	ld	h,b
	add	hl,bc
	call	lmul
	pop	de
	add	hl,de
	ld	de,_A
	add	hl,de
	ld	(hl),1
	ld	hl,(_P)
	inc	hl
	ld	(_P),hl
;life5.c: 118:             }
;life5.c: 119:         }
l47:
	ld	hl,_Y
	inc	(hl)
l48:
	ld	de,_B
	ld	b,5
	ld	hl,_X
	ld	l,(hl)
	ld	h,0
	call	shll
	add	hl,de
	push	hl
	call	_strlen
	pop	bc
	ex	de,hl
	ld	hl,_Y
	ld	l,(hl)
	ld	h,0
	call	wrelop
	jp	c,l45
;life5.c: 120:     }
	ld	hl,_X
	inc	(hl)
l44:
	ld	hl,_X
	ld	a,(ix+-1)
	cp	(hl)
	jp	nc,l41
;life5.c: 121:     cputs("\n\n");
	ld	hl,u49
	push	hl
	call	_cputs
	pop	bc
;life5.c: 122:     for(;;) {
l50:
;life5.c: 123:         X4=2; X3=50  -2; Y4=2; Y3=70  -2;
	ld	hl,_X4
	ld	(hl),2
	ld	hl,_X3
	ld	(hl),48
	ld	hl,_Y4
	ld	(hl),2
	ld	hl,_Y3
	ld	(hl),68
;life5.c: 124:         for (X=1; X<=X1-1; ++X) putch('\n');
	ld	hl,_X
	ld	(hl),1
	jp	l56
l53:
	ld	l,10
	push	hl
	call	_putch
	pop	bc
	ld	hl,_X
	inc	(hl)
l56:
	ld	hl,_X
	ld	e,(hl)
	ld	d,0
	ld	hl,_X1
	ld	c,(hl)
	ld	b,d
	ld	hl,-1
	add	hl,bc
	call	wrelop
	jp	nc,l53
;life5.c: 125:         putch('\n');
	ld	l,10
	push	hl
	call	_putch
	pop	bc
;life5.c: 126:         pX=&A[X1][0];
	ld	de,71
	ld	hl,_X1
	ld	l,(hl)
	ld	h,0
	call	lmul
	ld	de,_A
	add	hl,de
	ld	(_pX),hl
;life5.c: 127:         for (X=X1; X<=X2; ++X, pX+=(70  +1)) {
	ld	a,(_X1)
	ld	(_X),a
	jp	l60
l57:
;life5.c: 128:             TAB(Y1);
	ld	hl,_Y1
	ld	l,(hl)
	ld	h,0
	push	hl
	call	_TAB
	pop	bc
;life5.c: 129:             pY=pX+Y1;
	ld	hl,_Y1
	ld	e,(hl)
	ld	d,0
	ld	hl,(_pX)
	add	hl,de
	ld	(_pY),hl
;life5.c: 130:             for (Y=Y1; Y<=Y2; ++Y, ++pY) {
	ld	a,(_Y1)
	ld	(_Y),a
	jp	l64
l61:
;life5.c: 131:                 if (*pY==0     || *pY==3    ) {
	ld	hl,(_pY)
	ld	a,(hl)
	or	a
	jp	z,u16220
	ld	a,(hl)
	cp	3
	jp	nz,u16221
u16220:
;life5.c: 132:                     *pY=0    ; putch(' '); continue;
	ld	hl,(_pY)
	ld	(hl),0
	ld	l,32
	push	hl
	call	_putch
	pop	bc
	jp	l63
u16221:
	ld	hl,(_pY)
	ld	(hl),1
	ld	l,42
	push	hl
	call	_putch
	pop	bc
;life5.c: 135:                 if (X<X3) X3=X;
	ld	hl,_X3
	ld	a,(_X)
	cp	(hl)
	jp	nc,l66
	ld	(_X3),a
;life5.c: 136:                 if (X>X4) X4=X;
l66:
	ld	hl,_X
	ld	a,(_X4)
	cp	(hl)
	jp	nc,l67
	ld	a,(_X)
	ld	(_X4),a
;life5.c: 137:                 if (Y<Y3) Y3=Y;
l67:
	ld	hl,_Y3
	ld	a,(_Y)
	cp	(hl)
	jp	nc,l68
	ld	(_Y3),a
;life5.c: 138:                 if (Y>Y4) Y4=Y;
l68:
	ld	hl,_Y
	ld	a,(_Y4)
	cp	(hl)
	jp	nc,l63
	ld	a,(_Y)
	ld	(_Y4),a
;life5.c: 139:             }
l63:
	ld	hl,_Y
	inc	(hl)
	ld	hl,(_pY)
	inc	hl
	ld	(_pY),hl
l64:
	ld	hl,_Y
	ld	a,(_Y2)
	cp	(hl)
	jp	nc,l61
;life5.c: 140:             putch('\n');
	ld	l,10
	push	hl
	call	_putch
	pop	bc
;life5.c: 141:         }
	ld	hl,_X
	inc	(hl)
	ld	de,71
	ld	hl,(_pX)
	add	hl,de
	ld	(_pX),hl
l60:
	ld	hl,_X
	ld	a,(_X2)
	cp	(hl)
	jp	nc,l57
;life5.c: 142:         for (X=X2+1; X<=50  -1; ++X) putch('\n');
	inc	a
	ld	(_X),a
	jp	l73
l70:
	ld	l,10
	push	hl
	call	_putch
	pop	bc
	ld	hl,_X
	inc	(hl)
l73:
	ld	a,(_X)
	cp	50
	jp	c,l70
;life5.c: 143:         cputs("GENERATION: "); prbcdu(G);
	ld	hl,u59
	push	hl
	call	_cputs
	pop	bc
	ld	hl,(_G)
	push	hl
	call	_prbcdu
	pop	bc
;life5.c: 144:         cputs("\t\tPOPULATION: "); prbcdu(P);
	ld	hl,u69
	push	hl
	call	_cputs
	pop	bc
	ld	hl,(_P)
	push	hl
	call	_prbcdu
	pop	bc
;life5.c: 145:         if (E) {
	ld	a,(_E)
	or	a
	jp	z,l74
;life5.c: 146:             cputs(" INVALID "); prbcdu(E);
	ld	hl,u79
	push	hl
	call	_cputs
	pop	bc
	ld	hl,_E
	ld	l,(hl)
	ld	h,0
	push	hl
	call	_prbcdu
	pop	bc
;life5.c: 147:         }
;life5.c: 148:         if (P==0) break;
l74:
	ld	hl,(_P)
	ld	a,l
	or	h
	jp	nz,l75
	ld	sp,ix
	pop	ix
	ret	
l75:
	call	_getche
;life5.c: 150:         X1=X3; X2=X4; Y1=Y3; Y2=Y4; ++G; P=0; E=0;
	ld	a,(_X3)
	ld	(_X1),a
	ld	a,(_X4)
	ld	(_X2),a
	ld	a,(_Y3)
	ld	(_Y1),a
	ld	a,(_Y4)
	ld	(_Y2),a
	ld	hl,(_G)
	inc	hl
	ld	(_G),hl
	ld	hl,0
	ld	(_P),hl
	ld	hl,_E
	ld	(hl),0
;life5.c: 151:         if (X1<2) { X1=2; E=1; }
	ld	a,(_X1)
	cp	2
	jp	nc,l76
	ld	hl,_X1
	ld	(hl),2
	ld	hl,_E
	ld	(hl),1
;life5.c: 152:         if (X2>50  -2) { X2=50  -2; E+=2; }
l76:
	ld	a,(_X2)
	cp	49
	jp	c,l77
	ld	hl,_X2
	ld	(hl),48
	ld	hl,_E
	inc	(hl)
	inc	(hl)
;life5.c: 153:         if (Y1<2) { Y1=2; E+=4; }
l77:
	ld	a,(_Y1)
	cp	2
	jp	nc,l78
	ld	hl,_Y1
	ld	(hl),2
	ld	hl,_E
	inc	(hl)
	inc	(hl)
	inc	(hl)
	inc	(hl)
	ld	l,(hl)
;life5.c: 154:         if (Y2>70  -2) { Y2=70  -2; E+=8; }
l78:
	ld	a,(_Y2)
	cp	69
	jp	c,l79
	ld	hl,_Y2
	ld	(hl),68
	ld	hl,_E
	ld	a,(hl)
	add	a,8
	ld	(hl),a
;life5.c: 155:         pX=&A[X1-1][0];
l79:
	ld	hl,_X1
	ld	e,(hl)
	ld	d,0
	ld	hl,-1
	add	hl,de
	ld	de,71
	call	lmul
	ld	de,_A
	add	hl,de
	ld	(_pX),hl
;life5.c: 156:         for (X=X1-1; X<=X2+1; ++X, pX+=(70  +1)) {
	ld	a,(_X1)
	add	a,255
	ld	(_X),a
	jp	l83
l80:
;life5.c: 157:             pY=pX+Y1-1;
	ld	hl,_Y1
	ld	e,(hl)
	ld	d,0
	ld	hl,(_pX)
	add	hl,de
	dec	hl
	ld	(_pY),hl
;life5.c: 158:             for (Y=Y1-1; Y<=Y2+1; ++Y, ++pY) {
	ld	a,(_Y1)
	add	a,255
	ld	(_Y),a
	jp	l87
l84:
;life5.c: 159:                 C=0;
	ld	c,0
;life5.c: 160:                 p=pY-(70  +1)-1; if (*p&1) ++C;
	ld	de,(_pY)
	ld	hl,-72
	add	hl,de
	bit	0,(hl)
	jp	z,l88
	inc	c
;life5.c: 161:                 ++p; if (*p&1) ++C;
l88:
	inc	hl
	bit	0,(hl)
	jp	z,l89
	inc	c
;life5.c: 162:                 ++p; if (*p&1) ++C;
l89:
	inc	hl
	bit	0,(hl)
	jp	z,l90
	inc	c
;life5.c: 163:                 p+=(70  +1); if (*p&1) ++C;
l90:
	ld	de,71
	add	hl,de
	bit	0,(hl)
	jp	z,l91
	inc	c
;life5.c: 164:                 --p;
l91:
	dec	hl
;life5.c: 165:                 --p; if (*p&1) ++C;
	dec	hl
	bit	0,(hl)
	jp	z,l92
	inc	c
;life5.c: 166:                 p+=(70  +1); if (*p&1) ++C;
l92:
	ld	de,71
	add	hl,de
	bit	0,(hl)
	jp	z,l93
	inc	c
;life5.c: 167:                 ++p; if (*p&1) ++C;
l93:
	inc	hl
	bit	0,(hl)
	jp	z,l94
	inc	c
;life5.c: 168:                 ++p; if (*p&1) ++C;
l94:
	inc	hl
	bit	0,(hl)
	jp	z,l95
	inc	c
;life5.c: 169:                 if (*pY==0    ) goto L570;
l95:
	ld  (ix+-1),c
	ld	hl,(_pY)
	ld	a,(hl)
	or	a
	jp	z,l97
	ld	a,(ix+-1)
	cp	2
	jp	c,u26810
	cp	4
	jp	c,u26811
u26810:
;life5.c: 171:                     *pY=3    ; continue;
	ld	hl,(_pY)
	ld	(hl),3
	jp	l86
u26811:
	ld	hl,(_P)
	inc	hl
	ld	(_P),hl
	jp	l86
l97:
;life5.c: 175:                 if(C==3) {
	ld	a,(ix+-1)
	cp	3
	jp	nz,l86
;life5.c: 176:                     *pY=2    ; ++P;
	ld	hl,(_pY)
	ld	(hl),2
	ld	hl,(_P)
	inc	hl
	ld	(_P),hl
;life5.c: 177:                 }
;life5.c: 178:             }
l86:
	ld	hl,_Y
	inc	(hl)
	ld	hl,(_pY)
	inc	hl
	ld	(_pY),hl
l87:
	ld	hl,_Y
	ld	e,(hl)
	ld	d,0
	ld	hl,_Y2
	ld	l,(hl)
	ld	h,d
	inc	hl
	call	wrelop
	jp	nc,l84
;life5.c: 179:         }
	ld	hl,_X
	inc	(hl)
	ld	de,71
	ld	hl,(_pX)
	add	hl,de
	ld	(_pX),hl
l83:
	ld	hl,_X
	ld	e,(hl)
	ld	d,0
	ld	hl,_X2
	ld	l,(hl)
	ld	h,d
	inc	hl
	call	wrelop
	jp	nc,l80
;life5.c: 180:         --X1; --Y1; ++X2; ++Y2;
	ld	hl,_X1
	dec	(hl)
	ld	hl,_Y1
	dec	(hl)
	ld	hl,_X2
	inc	(hl)
	ld	hl,_Y2
	inc	(hl)
;life5.c: 181:     }
	jp	l50
	psect	data
u19:
	defb	48,48,48,48,48,0
u29:
	defb	76,73,70,69,10,0
u39:
	defb	67,82,69,65,84,73,86,69,32,67,79,77,80,85,84,73
	defb	78,71,32,77,79,82,82,73,83,84,79,87,78,44,32,78
	defb	69,87,32,74,69,82,83,69,89,10,10,10,69,78,84,69
	defb	82,32,89,79,85,82,32,80,65,84,84,69,82,78,58,10
	defb	0
u49:
	defb	10,10,0
u59:
	defb	71,69,78,69,82,65,84,73,79,78,58,32,0
u69:
	defb	9,9,80,79,80,85,76,65,84,73,79,78,58,32,0
u79:
	defb	32,73,78,86,65,76,73,68,32,0
	psect	bss
_X2:
	defs	1
_Y1:
	defs	1
_X3:
	defs	1
_Y2:
	defs	1
_X4:
	defs	1
_Y3:
	defs	1
_Y4:
	defs	1
_A:
	defs	3621
_B:
	defs	1024
_L:
	defs	1
_c_:
	defs	1
_X:
	defs	1
_Y:
	defs	1
_pX:
	defs	2
_pY:
	defs	2
_p:
	defs	2
_X1:
	defs	1
	psect	text
	end
