1; LIFE .... VERSION 2.0
2; WRITTEN BY ED HALL
3; ASSEMBLED BY GORDEN FRENCH
4; AND RDM
5;
6; RETYPED FROM MANUAL APRIL 2015, UDO MUNK
7; THIS VERSION MODIFIED FOR ALTAIR 88SIO-2
8;
9;
10; CNTL-A IS USED TO DEPOSIT A CELL OF LIFE ON THE SCREEN.
11; CNTL-N, O, I AND H STEP THE CURSOR UP, DOWN, RIGHT, AND
12; LEFT RESPECTIVELY. CNTL-B CAN BE USED TO ERASE THE SCREEN.
13; ONCE THE INITIAL COLONY IS COMPLETE, CNTL-D IS USED TO
14; START THE EVOLUTION OF THE CELLS. DURING THE COLORFUL
15; EVOLUTION OF THE CELLS THE LETTER F ON YOUR KEYBOARD
16; CAN BE USED TO FREEZE THE PICTURE. HIT THE LETTER G TO
17; GO AND THE LETTER S TO STOP.
18
19RED     EQU  9
20GREEN   EQU  10
21BLUE    EQU  12
22STACK   EQU  800H
23DISPLY  EQU  800H
24TIME    EQU  0D800H
25;DAV     EQU  32                 ; FOR ALTAIR 88SIO REV 0
26;TBE     EQU  2
27DAV     EQU  1                  ; FOR ALTAIR 88SIO-2
28TBE     EQU  2
29DELAY   EQU  0
30
31        JMP  START
32START:  LXI  SP,STACK
33        CALL INIT
34MAN20:  CALL SETUP
35MAN30:  CALL GEN
36FRZE:   IN   17
37        CPI  'F'
38        JZ   FRZE
39        CALL CHANGE
40STP:    IN   17
41        CPI  'S'
42        JZ   MAN20
43MAN40:  IN   255
44        RAL
45        JC   MAN40
46        RAL
47        JC   MAN20
48        JMP  MAN30
49GEN:    LXI  B,0
50GEN20:  CALL UPDATE
51        MVI  A,64
52        INR  C
53        CMP  C
54        JNZ  GEN20
55        MVI  C,0
56        INR  B
57        CMP  B
58        JNZ  GEN20
59        RET
60CHANGE: LXI  B,0
61CHN15:  CALL GTCOL
62        CPI  RED
63        JNZ  CHN20
64        MVI  A,0
65        CALL PTCOL
66        JMP  CHN30
67CHN20:  CPI  GREEN
68        JNZ  CHN30
69        MVI  A,BLUE
70        CALL PTCOL
71CHN30:  MVI  A,64
72        INR  C
73        CMP  C
74        JNZ  CHN15
75        MVI  C,0
76        INR  B
77        CMP  B
78        JNZ  CHN15
79        RET
80CDISP:  LXI  H,DISPLY
81        LXI  D,-2048
82CLEAR:  MVI  B,0
83FILL:   MVI  A,0
84FLL12:  CMP  D
85        JNZ  FLL20
86        CMP  E
87        RZ
88FLL20:  MOV  M,B
89        INX  D
90        INX  H
91        JMP  FLL12
92UPDATE: PUSH B
93        MVI  A,0
94        CMP  C
95        JNZ  UPD10
96        DCR  C
97        CALL UPROW
98        STA  ROWA
99        POP  B
100        PUSH B
101        CALL UPROW
102        STA  ROWB
103        POP  B
104        PUSH B
105UPD10:  INR  C
106        CALL UPROW
107        LXI  H,ROWB
108        MOV  B,M
109        MOV  M,A
110        ADD  B
111        DCX  H
112        MOV  C,M
113        MOV  M,B
114        ADD  C
115        MOV  D,A
116        POP  B
117        RZ
118        PUSH D
119        CALL GTCOL
120        POP  D
121        CPI  0
122        JZ   UPD20
123        MOV  A,D
124        CPI  3
125        RZ
126        CPI  4
127        RZ
128        MVI  A,RED
129        JMP  PTCOL
130UPD20:  MOV  A,D
131        CPI  3
132        RNZ
133        MVI  A,GREEN
134        JMP  PTCOL
135UPROW:  DCR  B
136        MVI  D,0
137        CALL UPONE
138        INR  B
139        CALL UPONE
140        INR  B
141        CALL UPONE
142        MOV  A,D
143        RET
144UPONE:  PUSH D
145        CALL GTCOL
146        POP  D
147        CPI  0
148        RZ
149        CPI  10
150        RZ
151        INR  D
152        RET
153GTCOL:  CALL FNDCOL
154        MOV  A,M
155        JC   GT20
156        ANI  15
157        RET
158GT20:   ANI  240
159        RLC
160        RLC
161        RLC
162        RLC
163        RET
164PTCOL:  ANI  15
165        DB   0F5H
166        CALL FNDCOL
167        POP  D
168        JC   PTC20
169        MOV  A,M
170        ANI  240
171        ADD  D
172        MOV  M,A
173        RET
174PTC20:  MOV  A,D
175        RLC
176        RLC
177        RLC
178        RLC
179        MOV  D,A
180        MOV  A,M
181        ANI  15
182        ADD  D
183        MOV  M,A
184        RET
185FNDCOL: LXI  H,DISPLY
186        MOV  A,B
187        ANI  32
188        JZ   FND20
189        LXI  D,512
190        DAD  D
191FND20:  MOV  A,C
192        ANI  32
193        JZ   FND30
194        LXI  D,1024
195        DAD  D
196FND30:  MOV  A,C
197        ANI  31
198        RLC
199        RLC
200        RLC
201        RAL
202        MOV  E,A
203        MVI  A,0
204        RAL
205        MOV  D,A
206        DAD  D
207        MOV  A,B
208        RAR
209        DB   0F5H
210        ANI  15
211        MOV  E,A
212        MVI  D,0
213        DAD  D
214        DB   0F1H
215        RET
216CHECK:  IN   16
217        ANI  DAV
218        RNZ
219        INR  C
220        JNZ  CHECK
221        INR  B
222        JNZ  CHECK
223        RET
224TTYONE: IN   16
225        ANI  TBE
226        JZ   TTYONE
227        MOV  A,B
228        OUT  17
229        RET
230TTYOUT: MOV  B,M
231        MVI  A,0
232        CMP  B
233        RZ
234        CALL TTYONE
235        INX  H
236        JMP  TTYOUT
237INIT:   CALL CDISP
238        MVI  A,132
239        OUT  14
240        MVI  A,176
241        OUT  15
242        LXI  H,IDENT
243        CALL TTYOUT
244INT20:  CALL CHECK
245;       JZ   INT20               ; INSERT JZ INT20 HERE FOR INST
246        IN   17
247        MOV  B,A
248        CALL TTYONE
249        ANI  127
250        CPI  89
251        RET                     ; INSERT RZ HERE FOR INST
252        LXI  H,INST
253        CALL TTYOUT
254SETUP:  LXI  H,ENTER
255        CALL TTYOUT
256        CALL CDISP
257        LXI  B,0
258STP20:  CALL GTCHR
259        LXI  H,TAB
260        ANI  7FH
261        MOV  D,A
262STP30:  SUB  A
263        CMP  M
264        JZ   STP20
265        MOV  A,D
266        CMP  M
267        JZ   STP40
268        INX  H
269        INX  H
270        INX  H
271        JMP  STP30
272STP40:  INX  H
273        MOV  E,M
274        INX  H
275        MOV  D,M
276        XCHG
277        CALL INDEX
278        JMP  STP20
279INDEX:  PCHL
280TAB:    DB   1
281        DW   ON
282        DB   2
283        DW   OFF
284        DB   4
285        DW   THRU
286        DB   8
287        DW   BACK
288        DB   9
289        DW   FWD
290        DB   15
291        DW   DOWN
292        DB   11
293        DW   HOME
294        DB   13
295        DW   RETURN
296        DB   14
297        DW   UP
298        DB   0
299        DB   0
300        DB   0
301        DB   0
302THRU:   POP  B
303        RET
304HOME:   LXI  B,0
305        RET
306RETURN: MVI  B,0
307DOWN:   INR  C
308        RET
309ON:     MVI  A,15
310BOTH:   CALL PTCOL
311FWD:    INR  B
312        RET
313OFF:    MVI  A,0
314        JMP  BOTH
315UP:     DCR  C
316        RET
317BACK:   DCR  B
318        RET
319GTCHR:  CALL GTCOL
320        DB   0F5H
321GTC20:  PUSH B
322        MVI  A,12
323        CALL PTCOL
324        LXI  B,DELAY
325        CALL CHECK
326        JNZ  GTC40
327        POP  B
328        PUSH B
329        MVI  A,0
330        CALL PTCOL
331        LXI  B,DELAY
332        CALL CHECK
333        POP  B
334        JZ   GTC20
335GTC30:  POP  6
336        CALL PTCOL
337        IN   17
338        OUT  17
339        RET
340GTC40:  POP  B
341        JMP  GTC30
342ROWA:   DW   0
343ROWB:   DW   0
344IDENT:  DW   'IL'
345        DW   'EF'
346        DW   '..'
347        DW   '..'
348        DW   'EV'
349        DW   'SR'
350        DW   'OI'
351        DW   ' N'
352        DW   '.2'
353        DW   ' 0'
354        DW   0A0DH
355        DW   0A0AH
356        DW   0
357INST:   DW   0
358ENTER:  DW   'NE'
359        DW   'ET'
360        DW   ' R'
361        DW   'AD'
362        DW   'AT'
363        DW   0A0DH
364        DW   0
365
366        END
367