; LIFE .... VERSION 2.0 ; WRITTEN BY ED HALL ; ASSEMBLED BY GORDEN FRENCH ; AND RDM ; ; RETYPED FROM MANUAL APRIL 2015, UDO MUNK ; THIS VERSION MODIFIED FOR ALTAIR 88SIO-2 ; ; ; CNTL-A IS USED TO DEPOSIT A CELL OF LIFE ON THE SCREEN. ; CNTL-N, O, I AND H STEP THE CURSOR UP, DOWN, RIGHT, AND ; LEFT RESPECTIVELY. CNTL-B CAN BE USED TO ERASE THE SCREEN. ; ONCE THE INITIAL COLONY IS COMPLETE, CNTL-D IS USED TO ; START THE EVOLUTION OF THE CELLS. DURING THE COLORFUL ; EVOLUTION OF THE CELLS THE LETTER F ON YOUR KEYBOARD ; CAN BE USED TO FREEZE THE PICTURE. HIT THE LETTER G TO ; GO AND THE LETTER S TO STOP. RED EQU 9 GREEN EQU 10 BLUE EQU 12 STACK EQU 800H DISPLY EQU 800H TIME EQU 0D800H ;DAV EQU 32 ; FOR ALTAIR 88SIO REV 0 ;TBE EQU 2 DAV EQU 1 ; FOR ALTAIR 88SIO-2 TBE EQU 2 DELAY EQU 0 JMP START START: LXI SP,STACK CALL INIT MAN20: CALL SETUP MAN30: CALL GEN FRZE: IN 17 CPI 'F' JZ FRZE CALL CHANGE STP: IN 17 CPI 'S' JZ MAN20 MAN40: IN 255 RAL JC MAN40 RAL JC MAN20 JMP MAN30 GEN: LXI B,0 GEN20: CALL UPDATE MVI A,64 INR C CMP C JNZ GEN20 MVI C,0 INR B CMP B JNZ GEN20 RET CHANGE: LXI B,0 CHN15: CALL GTCOL CPI RED JNZ CHN20 MVI A,0 CALL PTCOL JMP CHN30 CHN20: CPI GREEN JNZ CHN30 MVI A,BLUE CALL PTCOL CHN30: MVI A,64 INR C CMP C JNZ CHN15 MVI C,0 INR B CMP B JNZ CHN15 RET CDISP: LXI H,DISPLY LXI D,-2048 CLEAR: MVI B,0 FILL: MVI A,0 FLL12: CMP D JNZ FLL20 CMP E RZ FLL20: MOV M,B INX D INX H JMP FLL12 UPDATE: PUSH B MVI A,0 CMP C JNZ UPD10 DCR C CALL UPROW STA ROWA POP B PUSH B CALL UPROW STA ROWB POP B PUSH B UPD10: INR C CALL UPROW LXI H,ROWB MOV B,M MOV M,A ADD B DCX H MOV C,M MOV M,B ADD C MOV D,A POP B RZ PUSH D CALL GTCOL POP D CPI 0 JZ UPD20 MOV A,D CPI 3 RZ CPI 4 RZ MVI A,RED JMP PTCOL UPD20: MOV A,D CPI 3 RNZ MVI A,GREEN JMP PTCOL UPROW: DCR B MVI D,0 CALL UPONE INR B CALL UPONE INR B CALL UPONE MOV A,D RET UPONE: PUSH D CALL GTCOL POP D CPI 0 RZ CPI 10 RZ INR D RET GTCOL: CALL FNDCOL MOV A,M JC GT20 ANI 15 RET GT20: ANI 240 RLC RLC RLC RLC RET PTCOL: ANI 15 DB 0F5H CALL FNDCOL POP D JC PTC20 MOV A,M ANI 240 ADD D MOV M,A RET PTC20: MOV A,D RLC RLC RLC RLC MOV D,A MOV A,M ANI 15 ADD D MOV M,A RET FNDCOL: LXI H,DISPLY MOV A,B ANI 32 JZ FND20 LXI D,512 DAD D FND20: MOV A,C ANI 32 JZ FND30 LXI D,1024 DAD D FND30: MOV A,C ANI 31 RLC RLC RLC RAL MOV E,A MVI A,0 RAL MOV D,A DAD D MOV A,B RAR DB 0F5H ANI 15 MOV E,A MVI D,0 DAD D DB 0F1H RET CHECK: IN 16 ANI DAV RNZ INR C JNZ CHECK INR B JNZ CHECK RET TTYONE: IN 16 ANI TBE JZ TTYONE MOV A,B OUT 17 RET TTYOUT: MOV B,M MVI A,0 CMP B RZ CALL TTYONE INX H JMP TTYOUT INIT: CALL CDISP MVI A,132 OUT 14 MVI A,176 OUT 15 LXI H,IDENT CALL TTYOUT INT20: CALL CHECK ; JZ INT20 ; INSERT JZ INT20 HERE FOR INST IN 17 MOV B,A CALL TTYONE ANI 127 CPI 89 RET ; INSERT RZ HERE FOR INST LXI H,INST CALL TTYOUT SETUP: LXI H,ENTER CALL TTYOUT CALL CDISP LXI B,0 STP20: CALL GTCHR LXI H,TAB ANI 7FH MOV D,A STP30: SUB A CMP M JZ STP20 MOV A,D CMP M JZ STP40 INX H INX H INX H JMP STP30 STP40: INX H MOV E,M INX H MOV D,M XCHG CALL INDEX JMP STP20 INDEX: PCHL TAB: DB 1 DW ON DB 2 DW OFF DB 4 DW THRU DB 8 DW BACK DB 9 DW FWD DB 15 DW DOWN DB 11 DW HOME DB 13 DW RETURN DB 14 DW UP DB 0 DB 0 DB 0 DB 0 THRU: POP B RET HOME: LXI B,0 RET RETURN: MVI B,0 DOWN: INR C RET ON: MVI A,15 BOTH: CALL PTCOL FWD: INR B RET OFF: MVI A,0 JMP BOTH UP: DCR C RET BACK: DCR B RET GTCHR: CALL GTCOL DB 0F5H GTC20: PUSH B MVI A,12 CALL PTCOL LXI B,DELAY CALL CHECK JNZ GTC40 POP B PUSH B MVI A,0 CALL PTCOL LXI B,DELAY CALL CHECK POP B JZ GTC20 GTC30: POP 6 CALL PTCOL IN 17 OUT 17 RET GTC40: POP B JMP GTC30 ROWA: DW 0 ROWB: DW 0 IDENT: DW 'IL' DW 'EF' DW '..' DW '..' DW 'EV' DW 'SR' DW 'OI' DW ' N' DW '.2' DW ' 0' DW 0A0DH DW 0A0AH DW 0 INST: DW 0 ENTER: DW 'NE' DW 'ET' DW ' R' DW 'AD' DW 'AT' DW 0A0DH DW 0 END