11 2 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 3+ 20:29 05/07/2017 4+ PAGE 1 5 6 7 8 ; LIFE .... VERSION 2.0 9 ; WRITTEN BY ED HALL 10 ; ASSEMBLED BY GORDEN FRENCH 11 ; AND RDM 12 ; 13 ; RETYPED FROM MANUAL APRIL 2015, UDO MUNK 14 ; THIS VERSION MODIFIED FOR ALTAIR 88SIO-2 15 ; 16 ; 17 ; CNTL-A IS USED TO DEPOSIT A CELL OF LIFE ON THE SCREEN. 18 ; CNTL-N, O, I AND H STEP THE CURSOR UP, DOWN, RIGHT, AND 19 ; LEFT RESPECTIVELY. CNTL-B CAN BE USED TO ERASE THE SCREEN. 20 ; ONCE THE INITIAL COLONY IS COMPLETE, CNTL-D IS USED TO 21 ; START THE EVOLUTION OF THE CELLS. DURING THE COLORFUL 22 ; EVOLUTION OF THE CELLS THE LETTER F ON YOUR KEYBOARD 23 ; CAN BE USED TO FREEZE THE PICTURE. HIT THE LETTER G TO 24 ; GO AND THE LETTER S TO STOP. 25 26 0009 RED EQU 9 27 000A GREEN EQU 10 28 000C BLUE EQU 12 29 0800 STACK EQU 800H 30 0800 DISPLY EQU 800H 31 D800 TIME EQU 0D800H 32 ;DAV EQU 32 ; FOR ALTAIR 88SIO REV 0 33 ;TBE EQU 2 34 0001 DAV EQU 1 ; FOR ALTAIR 88SIO-2 35 0002 TBE EQU 2 36 0000 DELAY EQU 0 37 38 0000 C30300 JMP START 39 0003 310008 START: LXI SP,STACK 40 0006 CD6A01 CALL INIT 41 0009 CD8F01 MAN20: CALL SETUP 42 000C CD2D00 MAN30: CALL GEN 43 000F DB11 FRZE: IN 17 44 0011 FE46 CPI 'F' 45 0013 CA0F00 JZ FRZE 46 0016 CD4200 CALL CHANGE 47 0019 DB11 STP: IN 17 48 001B FE53 CPI 'S' 49 001D CA0900 JZ MAN20 50 0020 DBFF MAN40: IN 255 51 0022 17 RAL 52 0023 DA2000 JC MAN40 53 0026 17 RAL 54 0027 DA0900 JC MAN20 55 002A C30C00 JMP MAN30 56 002D 010000 GEN: LXI B,0 57 0030 CD8400 GEN20: CALL UPDATE 58 0033 3E40 MVI A,64 591 60 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 61+ 20:29 05/07/2017 62+ PAGE 2 63 64 65 66 0035 0C INR C 67 0036 B9 CMP C 68 0037 C23000 JNZ GEN20 69 003A 0E00 MVI C,0 70 003C 04 INR B 71 003D B8 CMP B 72 003E C23000 JNZ GEN20 73 0041 C9 RET 74 0042 010000 CHANGE: LXI B,0 75 0045 CDE900 CHN15: CALL GTCOL 76 0048 FE09 CPI RED 77 004A C25500 JNZ CHN20 78 004D 3E00 MVI A,0 79 004F CDFA00 CALL PTCOL 80 0052 C35F00 JMP CHN30 81 0055 FE0A CHN20: CPI GREEN 82 0057 C25F00 JNZ CHN30 83 005A 3E0C MVI A,BLUE 84 005C CDFA00 CALL PTCOL 85 005F 3E40 CHN30: MVI A,64 86 0061 0C INR C 87 0062 B9 CMP C 88 0063 C24500 JNZ CHN15 89 0066 0E00 MVI C,0 90 0068 04 INR B 91 0069 B8 CMP B 92 006A C24500 JNZ CHN15 93 006D C9 RET 94 006E 210008 CDISP: LXI H,DISPLY 95 0071 1100F8 LXI D,-2048 96 0074 0600 CLEAR: MVI B,0 97 0076 3E00 FILL: MVI A,0 98 0078 BA FLL12: CMP D 99 0079 C27E00 JNZ FLL20 100 007C BB CMP E 101 007D C8 RZ 102 007E 70 FLL20: MOV M,B 103 007F 13 INX D 104 0080 23 INX H 105 0081 C37800 JMP FLL12 106 0084 C5 UPDATE: PUSH B 107 0085 3E00 MVI A,0 108 0087 B9 CMP C 109 0088 C29C00 JNZ UPD10 110 008B 0D DCR C 111 008C CDCC00 CALL UPROW 112 008F 322A02 STA ROWA 113 0092 C1 POP B 114 0093 C5 PUSH B 115 0094 CDCC00 CALL UPROW 116 0097 322C02 STA ROWB 1171 118 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 119+ 20:29 05/07/2017 120+ PAGE 3 121 122 123 124 009A C1 POP B 125 009B C5 PUSH B 126 009C 0C UPD10: INR C 127 009D CDCC00 CALL UPROW 128 00A0 212C02 LXI H,ROWB 129 00A3 46 MOV B,M 130 00A4 77 MOV M,A 131 00A5 80 ADD B 132 00A6 2B DCX H 133 00A7 4E MOV C,M 134 00A8 70 MOV M,B 135 00A9 81 ADD C 136 00AA 57 MOV D,A 137 00AB C1 POP B 138 00AC C8 RZ 139 00AD D5 PUSH D 140 00AE CDE900 CALL GTCOL 141 00B1 D1 POP D 142 00B2 FE00 CPI 0 143 00B4 CAC300 JZ UPD20 144 00B7 7A MOV A,D 145 00B8 FE03 CPI 3 146 00BA C8 RZ 147 00BB FE04 CPI 4 148 00BD C8 RZ 149 00BE 3E09 MVI A,RED 150 00C0 C3FA00 JMP PTCOL 151 00C3 7A UPD20: MOV A,D 152 00C4 FE03 CPI 3 153 00C6 C0 RNZ 154 00C7 3E0A MVI A,GREEN 155 00C9 C3FA00 JMP PTCOL 156 00CC 05 UPROW: DCR B 157 00CD 1600 MVI D,0 158 00CF CDDC00 CALL UPONE 159 00D2 04 INR B 160 00D3 CDDC00 CALL UPONE 161 00D6 04 INR B 162 00D7 CDDC00 CALL UPONE 163 00DA 7A MOV A,D 164 00DB C9 RET 165 00DC D5 UPONE: PUSH D 166 00DD CDE900 CALL GTCOL 167 00E0 D1 POP D 168 00E1 FE00 CPI 0 169 00E3 C8 RZ 170 00E4 FE0A CPI 10 171 00E6 C8 RZ 172 00E7 14 INR D 173 00E8 C9 RET 174 00E9 CD1601 GTCOL: CALL FNDCOL 1751 176 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 177+ 20:29 05/07/2017 178+ PAGE 4 179 180 181 182 00EC 7E MOV A,M 183 00ED DAF300 JC GT20 184 00F0 E60F ANI 15 185 00F2 C9 RET 186 00F3 E6F0 GT20: ANI 240 187 00F5 07 RLC 188 00F6 07 RLC 189 00F7 07 RLC 190 00F8 07 RLC 191 00F9 C9 RET 192 00FA E60F PTCOL: ANI 15 193 00FC F5 DB 0F5H 194 00FD CD1601 CALL FNDCOL 195 0100 D1 POP D 196 0101 DA0A01 JC PTC20 197 0104 7E MOV A,M 198 0105 E6F0 ANI 240 199 0107 82 ADD D 200 0108 77 MOV M,A 201 0109 C9 RET 202 010A 7A PTC20: MOV A,D 203 010B 07 RLC 204 010C 07 RLC 205 010D 07 RLC 206 010E 07 RLC 207 010F 57 MOV D,A 208 0110 7E MOV A,M 209 0111 E60F ANI 15 210 0113 82 ADD D 211 0114 77 MOV M,A 212 0115 C9 RET 213 0116 210008 FNDCOL: LXI H,DISPLY 214 0119 78 MOV A,B 215 011A E620 ANI 32 216 011C CA2301 JZ FND20 217 011F 110002 LXI D,512 218 0122 19 DAD D 219 0123 79 FND20: MOV A,C 220 0124 E620 ANI 32 221 0126 CA2D01 JZ FND30 222 0129 110004 LXI D,1024 223 012C 19 DAD D 224 012D 79 FND30: MOV A,C 225 012E E61F ANI 31 226 0130 07 RLC 227 0131 07 RLC 228 0132 07 RLC 229 0133 17 RAL 230 0134 5F MOV E,A 231 0135 3E00 MVI A,0 232 0137 17 RAL 2331 234 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 235+ 20:29 05/07/2017 236+ PAGE 5 237 238 239 240 0138 57 MOV D,A 241 0139 19 DAD D 242 013A 78 MOV A,B 243 013B 1F RAR 244 013C F5 DB 0F5H 245 013D E60F ANI 15 246 013F 5F MOV E,A 247 0140 1600 MVI D,0 248 0142 19 DAD D 249 0143 F1 DB 0F1H 250 0144 C9 RET 251 0145 DB10 CHECK: IN 16 252 0147 E601 ANI DAV 253 0149 C0 RNZ 254 014A 0C INR C 255 014B C24501 JNZ CHECK 256 014E 04 INR B 257 014F C24501 JNZ CHECK 258 0152 C9 RET 259 0153 DB10 TTYONE: IN 16 260 0155 E602 ANI TBE 261 0157 CA5301 JZ TTYONE 262 015A 78 MOV A,B 263 015B D311 OUT 17 264 015D C9 RET 265 015E 46 TTYOUT: MOV B,M 266 015F 3E00 MVI A,0 267 0161 B8 CMP B 268 0162 C8 RZ 269 0163 CD5301 CALL TTYONE 270 0166 23 INX H 271 0167 C35E01 JMP TTYOUT 272 016A CD6E00 INIT: CALL CDISP 273 016D 3E84 MVI A,132 274 016F D30E OUT 14 275 0171 3EB0 MVI A,176 276 0173 D30F OUT 15 277 0175 212E02 LXI H,IDENT 278 0178 CD5E01 CALL TTYOUT 279 017B CD4501 INT20: CALL CHECK 280 ; JZ INT20 ; INSERT JZ INT20 HERE FOR INST 281 017E DB11 IN 17 282 0180 47 MOV B,A 283 0181 CD5301 CALL TTYONE 284 0184 E67F ANI 127 285 0186 FE59 CPI 89 286 0188 C9 RET ; INSERT RZ HERE FOR INST 287 0189 214802 LXI H,INST 288 018C CD5E01 CALL TTYOUT 289 018F 214A02 SETUP: LXI H,ENTER 290 0192 CD5E01 CALL TTYOUT 2911 292 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 293+ 20:29 05/07/2017 294+ PAGE 6 295 296 297 298 0195 CD6E00 CALL CDISP 299 0198 010000 LXI B,0 300 019B CDF901 STP20: CALL GTCHR 301 019E 21C001 LXI H,TAB 302 01A1 E67F ANI 7FH 303 01A3 57 MOV D,A 304 01A4 97 STP30: SUB A 305 01A5 BE CMP M 306 01A6 CA9B01 JZ STP20 307 01A9 7A MOV A,D 308 01AA BE CMP M 309 01AB CAB401 JZ STP40 310 01AE 23 INX H 311 01AF 23 INX H 312 01B0 23 INX H 313 01B1 C3A401 JMP STP30 314 01B4 23 STP40: INX H 315 01B5 5E MOV E,M 316 01B6 23 INX H 317 01B7 56 MOV D,M 318 01B8 EB XCHG 319 01B9 CDBF01 CALL INDEX 320 01BC C39B01 JMP STP20 321 01BF E9 INDEX: PCHL 322 01C0 01 TAB: DB 1 323 01C1 E901 DW ON 324 01C3 02 DB 2 325 01C4 F001 DW OFF 326 01C6 04 DB 4 327 01C7 DF01 DW THRU 328 01C9 08 DB 8 329 01CA F701 DW BACK 330 01CC 09 DB 9 331 01CD EE01 DW FWD 332 01CF 0F DB 15 333 01D0 E701 DW DOWN 334 01D2 0B DB 11 335 01D3 E101 DW HOME 336 01D5 0D DB 13 337 01D6 E501 DW RETURN 338 01D8 0E DB 14 339 01D9 F501 DW UP 340 01DB 00 DB 0 341 01DC 00 DB 0 342 01DD 00 DB 0 343 01DE 00 DB 0 344 01DF C1 THRU: POP B 345 01E0 C9 RET 346 01E1 010000 HOME: LXI B,0 347 01E4 C9 RET 348 01E5 0600 RETURN: MVI B,0 3491 350 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 351+ 20:29 05/07/2017 352+ PAGE 7 353 354 355 356 01E7 0C DOWN: INR C 357 01E8 C9 RET 358 01E9 3E0F ON: MVI A,15 359 01EB CDFA00 BOTH: CALL PTCOL 360 01EE 04 FWD: INR B 361 01EF C9 RET 362 01F0 3E00 OFF: MVI A,0 363 01F2 C3EB01 JMP BOTH 364 01F5 0D UP: DCR C 365 01F6 C9 RET 366 01F7 05 BACK: DCR B 367 01F8 C9 RET 368 01F9 CDE900 GTCHR: CALL GTCOL 369 01FC F5 DB 0F5H 370 01FD C5 GTC20: PUSH B 371 01FE 3E0C MVI A,12 372 0200 CDFA00 CALL PTCOL 373 0203 010000 LXI B,DELAY 374 0206 CD4501 CALL CHECK 375 0209 C22602 JNZ GTC40 376 020C C1 POP B 377 020D C5 PUSH B 378 020E 3E00 MVI A,0 379 0210 CDFA00 CALL PTCOL 380 0213 010000 LXI B,DELAY 381 0216 CD4501 CALL CHECK 382 0219 C1 POP B 383 021A CAFD01 JZ GTC20 384 021D F1 GTC30: POP 6 385 021E CDFA00 CALL PTCOL 386 0221 DB11 IN 17 387 0223 D311 OUT 17 388 0225 C9 RET 389 0226 C1 GTC40: POP B 390 0227 C31D02 JMP GTC30 391 022A 0000 ROWA: DW 0 392 022C 0000 ROWB: DW 0 393 022E 4C49 IDENT: DW 'IL' 394 0230 4645 DW 'EF' 395 0232 2E2E DW '..' 396 0234 2E2E DW '..' 397 0236 5645 DW 'EV' 398 0238 5253 DW 'SR' 399 023A 494F DW 'OI' 400 023C 4E20 DW ' N' 401 023E 322E DW '.2' 402 0240 3020 DW ' 0' 403 0242 0D0A DW 0A0DH 404 0244 0A0A DW 0A0AH 405 0246 0000 DW 0 406 0248 0000 INST: DW 0 4071 408 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 409+ 20:29 05/07/2017 410+ PAGE 8 411 412 413 414 024A 454E ENTER: DW 'NE' 415 024C 5445 DW 'ET' 416 024E 5220 DW ' R' 417 0250 4441 DW 'AD' 418 0252 5441 DW 'AT' 419 0254 0D0A DW 0A0DH 420 0256 0000 DW 0 421 422 END 423 NO PROGRAM ERRORS 4241 425 8080 MACRO ASSEMBLER, VER 3.0 ERRORS = 0 426+ 20:29 05/07/2017 427+ PAGE 9 428 429 430 431 SYMBOL TABLE 432 433 * 01 434 435 A 0007 B 0000 BACK 01F7 BLUE 000C 436 BOTH 01EB C 0001 CDISP 006E CHANG 0042 437 CHECK 0145 CHN15 0045 CHN20 0055 CHN30 005F 438 CLEAR 0074 * D 0002 DAV 0001 DELAY 0000 439 DISPL 0800 DOWN 01E7 E 0003 ENTER 024A 440 FILL 0076 * FLL12 0078 FLL20 007E FND20 0123 441 FND30 012D FNDCO 0116 FRZE 000F FWD 01EE 442 GEN 002D GEN20 0030 GREEN 000A GT20 00F3 443 GTC20 01FD GTC30 021D GTC40 0226 GTCHR 01F9 444 GTCOL 00E9 H 0004 HOME 01E1 IDENT 022E 445 INDEX 01BF INIT 016A INST 0248 INT20 017B * 446 L 0005 M 0006 MAN20 0009 MAN30 000C 447 MAN40 0020 OFF 01F0 ON 01E9 PSW 0006 448 PTC20 010A PTCOL 00FA RED 0009 RETUR 01E5 449 ROWA 022A ROWB 022C SETUP 018F SP 0006 450 STACK 0800 START 0003 STP 0019 * STP20 019B 451 STP30 01A4 STP40 01B4 TAB 01C0 TBE 0002 452 THRU 01DF TIME D800 * TTYON 0153 TTYOU 015E 453 UP 01F5 UPD10 009C UPD20 00C3 UPDAT 0084 454 UPONE 00DC UPROW 00CC 455 456