AS V1.42 Beta [Bld 300] - Source File life-sketch.s - Page 1 - 10/15/2026 06:45:56 PM 1/ 0 : org 0 2/ 0 : bits_old: 3/ 0 : 00 00 dw 0 4/ 2 : neighbor_count: 5/ 2 : 00 db 0 6/ 3 : tmp: 7/ 3 : 00 db 0 8/ 4 : 9/ 200 : org $200 10/ 200 : 11/ 200 : get_cell: 12/ 200 : ; assumes: ZP "bits_old" points at the right location 13/ 200 : ; input: Linear cell # in A. (OR possibly the X-coordinate if 32x16, Y coordinate accounted in bits_old) 14/ 200 : ; output: Carry set if cell is live 15/ 200 : ; destroys x, y 16/ 200 : ; caller can then restore its neighbor count (LDA doesn't set C) and ADC #$0 to increment it or not 17/ 200 : AA tax ; we need a copy later 18/ 201 : 29 07 and #$7 19/ 203 : A8 tay ; now y has the shift distance 20/ 204 : 21/ 204 : 8A txa ; told ya 22/ 205 : 4A lsr 23/ 206 : 4A lsr 24/ 207 : 4A lsr ; shift out the low bits 25/ 208 : AA tax ; now x has the offset of the byte of interest 26/ 209 : B5 00 lda bits_old,x ; now a register has the relevant byte 27/ 20B : 28/ 20B : get_cell_loop: ; shift 1 to 8 times (not 0 to 7) so relevant bit is in carry 29/ 20B : 0A asl 30/ 20C : 88 dey 31/ 20D : D0 FC bne get_cell_loop 32/ 20F : 33/ 20F : 60 rts 34/ 210 : 35/ 210 : census_cell: 36/ 210 : ; input: Linear cell # in A 37/ 210 : ; side effect: updates neighbor_count 38/ 210 : ; output: the new value of neighbor_count is in A -- this property is not used 39/ 210 : ; stack used: 2 40/ 210 : ; destroys all registers 41/ 210 : 20 00 02 jsr get_cell 42/ 213 : A5 02 lda neighbor_count 43/ 215 : 69 00 adc #$0 44/ 217 : 85 02 sta neighbor_count 45/ 219 : 60 rts 46/ 21A : 47/ 21A : ; These move routines are for 16x16 boards, not 32x32 48/ 21A : move_up: 49/ 21A : ; input: Linear cell# in A 50/ 21A : ; output: new linear cell# in A 51/ 21A : 18 clc 52/ 21B : E9 10 sbc #16 53/ 21D : 60 rts 54/ 21E : 55/ 21E : move_down: 56/ 21E : ; input: Linear cell# in A 57/ 21E : ; output: new linear cell# in A 58/ 21E : 18 clc 59/ 21F : E9 10 sbc #16 60/ 221 : 60 rts AS V1.42 Beta [Bld 300] - Source File life-sketch.s - Page 2 - 10/15/2026 06:45:56 PM 61/ 222 : 62/ 222 : move_right: 63/ 222 : ; input: Linear cell# in A 64/ 222 : ; output: new linear cell# in A 65/ 222 : ; destroys: x, y, tmp 66/ 222 : A8 tay 67/ 223 : 29 F0 and #$F0 68/ 225 : 85 03 sta tmp 69/ 227 : 98 tya 70/ 228 : 18 clc 71/ 229 : 69 01 adc #01 ; no inc a!! 72/ 22B : 29 0F and #$0F 73/ 22D : 05 03 ora tmp 74/ 22F : 75/ 22F : 60 rts 76/ 230 : 77/ 230 : move_left: 78/ 230 : ; input: Linear cell# in A 79/ 230 : ; output: new linear cell# in A 80/ 230 : ; destroys: tmp 81/ 230 : ; stack used: 1 82/ 230 : 48 pha 83/ 231 : 29 F0 and #$F0 84/ 233 : 85 03 sta tmp 85/ 235 : 68 pla 86/ 236 : 18 clc ; no dec a!! 87/ 237 : E9 01 sbc #01 88/ 239 : 29 0F and #$0F 89/ 23B : 05 03 ora tmp 90/ 23D : 91/ 23D : 60 rts 92/ 23E : 93/ 23E : compute_cell: 94/ 23E : A2 00 ldx #0 95/ 240 : 86 02 stx neighbor_count 96/ 242 : 20 30 02 jsr move_left 97/ 245 : 20 10 02 jsr census_cell 98/ 248 : 20 1A 02 jsr move_up 99/ 24B : 20 10 02 jsr census_cell 100/ 24E : 20 22 02 jsr move_right 101/ 251 : 20 10 02 jsr census_cell 102/ 254 : 20 22 02 jsr move_right 103/ 257 : 20 10 02 jsr census_cell 104/ 25A : 20 1E 02 jsr move_down 105/ 25D : 20 10 02 jsr census_cell 106/ 260 : 20 1E 02 jsr move_down 107/ 263 : 20 10 02 jsr census_cell 108/ 266 : 20 30 02 jsr move_left 109/ 269 : 20 10 02 jsr census_cell 110/ 26C : 20 30 02 jsr move_left 111/ 26F : 20 10 02 jsr census_cell 112/ 272 : 20 1A 02 jsr move_up 113/ 275 : 20 10 02 jsr census_cell 114/ 278 : 20 1A 02 jsr move_up 115/ 27B : 20 10 02 jsr census_cell 116/ 27E : 117/ 27E : 20 22 02 jsr move_right 118/ 281 : 20 00 02 jsr get_cell 119/ 284 : A9 00 lda #0 120/ 286 : 69 00 adc #0 ; a now holds 0 if dead, 1 if live. **CARRY IS CLEAR** AS V1.42 Beta [Bld 300] - Source File life-sketch.s - Page 3 - 10/15/2026 06:45:56 PM 121/ 288 : 05 02 ora neighbor_count ; a now holds neighbor_count if dead, or neighbor_count | 1 if live, so 2->3 if live 122/ 28A : C9 03 cmp #3 ; now if should live or be born, A has 0 123/ 28C : A9 00 lda #0 124/ 28E : E9 00 sbc #0 ; CF has "should live or be born" 125/ 290 : ; fall through to put cell 126/ 290 : 127/ 290 : 128/ 290 : put_cell: 129/ 290 : ; to be done 130/ 290 : ; input: CF flag for new cell live/dead status 131/ 290 : ; notes: if you assume that cells are always put in order .. 132/ 290 : ; preload a byte with #$01 (or maybe #$80? depending on shift direction) and shift each new bit in 133/ 290 : ; as soon as you *shift out* a 1 into carry, you need to go on to the next byte 134/ 290 : 00 brk 135/ 291 : AS V1.42 Beta [Bld 300] - Source File life-sketch.s - Page 4 - 10/15/2026 06:45:56 PM Symbol Table (* = unused): -------------------------- *ARCHITECTURE : "x86_64-unknown-linux" - | BITS_OLD : 0 C | *CASESENSITIVE : 0 - | CENSUS_CELL : 210 C | *COMPUTE_CELL : 23E C | *CONSTPI : 3.141592653589793239 - | *DATE : "10/15/2026" - | *FALSE : 0 - | *FLOATMAX : 1.18973149535725E4932 - | GET_CELL : 200 C | GET_CELL_LOOP : 20B C | *HAS64 : 1 - | *INTWIDTH : 80 - | *LISTON : 1 - | *MACEXP : 7 - | *MOMCPU : 6502 - | *MOMCPUNAME : "6502" - | MOVE_DOWN : 21E C | MOVE_LEFT : 230 C | MOVE_RIGHT : 222 C | MOVE_UP : 21A C | NEIGHBOR_COUNT : 2 C | *NESTMAX : 100 - | *PUT_CELL : 290 C | *RELAXED : 0 - | *TIME : "06:45:56 PM" - | TMP : 3 C | *TRUE : 1 - | *VERSION : 142F - | 29 symbols 19 unused symbols AS V1.42 Beta [Bld 300] - Source File life-sketch.s - Page 5 - 10/15/2026 06:45:56 PM Code Pages: ---------- STANDARD (0 changed characters) 1 code page 0.00 seconds assembly time 135 lines source file 1 pass 0 errors 0 warnings