A large commit.
[pdp8.git] / sw / src / life / main.pa
1 /********************************************************************
2 /********************************************************************
3 / MAIN PROGRAM
4 *200
5 CLA CLL
6 JMS I XDINIT
7 ION / WELCOME TO HELL!
8
9 MLOOP, / MAIN EVENT LOOP
10 JMS I XDUMP / START A DUMP, PLEASE
11 JMS I XCALC / CALCULATE NEW DATA
12 CLA CLL
13
14 TAD TPTR
15 DCA DPTR
16 TAD SPTR
17 DCA TPTR
18 TAD DPTR
19 DCA SPTR
20 JMP MLOOP
21
22 /********************************************************************
23 / THE CALCULATION
24 PAGE
25 CCADDR, 0 / CURRENT CELL ADDRESS
26 CROW, 0
27 CCOL, 0
28 NBORS, 0
29
30 CALC, 0
31 CLA CLL
32 DCA CCADDR
33
34 TAD KROWS
35 CIA
36 DCA CROW
37
38 CRLOOP, CLA CLL
39 TAD KCOLS
40 CIA
41 DCA CCOL
42
43 CCLOOP,
44 / NOW, DO IT, PLEASE!
45 TAD CCADDR
46 JMS I XCOUNT
47 DCA NBORS
48
49 TAD CCADDR
50 JMS I XGET
51 SNA
52 JMP ISDEAD
53
54 ISALIV, CLA CLL
55 TAD NBORS
56 TAD KN4
57 SMA
58 JMP DIE
59
60 CLA CLL
61 TAD NBORS
62 TAD KN2
63 SMA
64 JMP LIVE
65 JMP DIE
66
67 ISDEAD, TAD NBORS
68 TAD KN3
69 SZA
70 JMP DIE
71 JMP LIVE
72
73 LIVE, CLA CLL
74 TAD CCADDR
75 JMS I XSET / NOW, IT'S ALIVE!
76 JMP CDONE
77 DIE, CLA CLL
78 TAD CCADDR
79 JMS I XCLEAR
80 CDONE, CLA CLL
81
82 ISZ CCADDR
83 ISZ CCOL
84 JMP CCLOOP
85
86 TAD CCADDR
87 TAD K100
88 AND K7700
89 ISZ CROW
90 JMP CRLOOP
91
92 JMP I CALC
93 KN2, -2
94 KN3, -3
95 KN4, -4
96 K100, 100
97
98 /********************************************************************
99 / DATA DUMPING
100 PAGE
101 NLINE=JMS CRLF
102 HOME=JMS HOM
103
104 DBASE, 0
105 DDPTR, 0
106 DOFF, 0
107
108 DUMPS, 0
109 JMS I XTSTRT
110 JMP I DUMPS
111 CLA
112 TAD SPTR
113 DCA DBASE
114 JMP DMPINT
115
116 DUMPT, 0
117 JMS I XTSTRT
118 JMP I DUMPT
119 CLA
120 TAD TPTR
121 DCA DBASE
122 JMP DMPINT
123
124 DUMP, 0
125 JMS I XTSTRT
126 JMP I DUMP
127 CLA
128 TAD DPTR
129 DCA DBASE
130
131 DMPINT, DCA DOFF
132
133 TAD KROWS
134 CIA
135 DCA ROWCNT
136
137 // NLINE;NLINE
138 HOME
139
140 / START OF ROW
141 RLOOP, CLA CLL
142 TAD KCOLS
143 CIA
144 DCA COLCNT
145 TAD K200
146 DCA DMSK
147
148 TAD DBASE / BUFFER BASE ADDRESS
149 TAD DOFF / CURRENT WORD OFFSET
150 DCA DDPTR / TO INTERNAL POINTER
151
152 / START OF COLUMN
153 CLOOP, TAD DMSK / BIT MASK, DYNAMIC
154 AND I DDPTR / COMBINE CURRENT WORD
155 SZA
156 JMP ONE
157 ZERO, TAD KDEAD
158 JMP TT
159 ONE, CLA
160 TAD KALIVE
161 TT, JMS I XTYPE
162
163 CLA CLL
164 TAD DMSK
165 RAR
166 SZA
167 JMP MASKOK
168 TAD K200
169 ISZ DDPTR
170 MASKOK, DCA DMSK
171
172 ISZ COLCNT
173 JMP CLOOP
174
175 NLINE
176
177 CLA CLL
178 TAD DOFF
179 TAD K10
180 DCA DOFF
181
182 ISZ ROWCNT
183 JMP RLOOP
184
185 JMP I XTSTOP / STOP INTERRUPT MADNESS.
186
187 HOM, 0
188 CLA CLL
189 TAD K035
190 JMS I XTYPE
191 CLA CLL
192 JMS I XTYPE / FILLER CHARACTERS!
193 JMS I XTYPE
194 JMS I XTYPE
195 JMS I XTYPE
196 JMP I HOM
197
198 CRLF, 0
199 CLA CLL
200 TAD CR
201 JMS I XTYPE
202 CLA CLL
203 TAD LF
204 JMS I XTYPE
205 JMP I CRLF
206
207 DMSK, 0
208 K035, 35
209 CR, 215
210 LF, 212
211
212 ROWCNT, 0
213 COLCNT, 0
214
215 /********************************************************************
216 / NEIGHBORHOOD COUNTING
217 / (ADDRESS IN AC)
218 PAGE
219 POS, 0
220
221 COUNT, 0
222 DCA POS
223 DCA CNT
224
225 TAD POS
226 TAD KCOLM1 / STEP LEFT
227 TAD KROWM1 / STEP UP
228 JMS ACCNT
229
230 TAD KCOLP1
231 JMS ACCNT
232
233 TAD KCOLP1
234 JMS ACCNT
235
236 TAD KROWP1
237 JMS ACCNT
238
239 TAD KROWP1
240 JMS ACCNT
241
242 TAD KCOLM1
243 JMS ACCNT
244
245 TAD KCOLM1
246 JMS ACCNT
247
248 TAD KROWM1
249 JMS ACCNT
250
251 CLA CLL
252 TAD CNT
253 JMP I COUNT
254
255 ACCNT, 0
256 DCA POS
257 TAD POS
258 JMS I XGET
259 SZA
260 ISZ CNT
261 CLA CLL
262 TAD POS
263 JMP I ACCNT
264
265 CNT, 0 / COUNTER VARIABLE
266
267
268 /********************************************************************
269 / DATA HOLDING AND ACCESS
270
271 PAGE / START ON NEW PAGE
272
273 / INTERNAL DATA
274
275 CADR, 0 / CURRENT CELL ADDRESS
276 MASK, 0 / BIT MASK TO CURRENT CELL BIT
277 APTR, 0 / ACCESS POINTER TO CURRENT CELL WORD
278
279 / GET A BIT OF DATA
280 GET, 0 / GET POSITION'S VALUE
281 JMS ASETUP / CHECK LIMITS, STORE ADDRESS ETC.
282 JMP I GET / ERROR RETURN, RETURN WITH LIMIT VALUE IN AC
283 TAD APTR
284 TAD SPTR / ADD SOURCE DATA BASE
285 DCA APTR
286 TAD I APTR / LOAD DATA
287 AND MASK / MASK OUT DESIRED BIT
288 SZA
289 CLA CLL IAC / MAKE A ONE OUT OF AC CONTENTS
290 JMP I GET / RETURN
291
292 SET, 0 / SET POSITION'S VALUE TO 1
293 JMS ASETUP / CHECK LIMITS, STORE ADDRESS ETC.
294 JMP I SET / ERROR RETURN, RETURN WITH LIMIT VALUE IN AC
295 TAD APTR
296 TAD TPTR / ADD SOURCE DATA BASE
297 DCA APTR
298 TAD MASK / GET MASK
299 CMA / INVERT
300 AND I APTR / COMBINE WITH DATA
301 TAD MASK / SET BIT
302 DCA I APTR / UPDATE DATA
303 JMP I SET / RETURN
304
305 CLEAR, 0 / CLEAR POSITION'S VALUE TO 0
306 JMS ASETUP / CHECK LIMITS, STORE ADDRESS ETC.
307 JMP I CLEAR / ERROR RETURN, RETURN WITH LIMIT VALUE IN AC
308 TAD APTR
309 TAD TPTR / ADD SOURCE DATA BASE
310 DCA APTR
311 TAD MASK / GET MASK
312 CMA / INVERT
313 AND I APTR / COMBINE WITH DATA
314 DCA I APTR / UPDATE DATA
315 JMP I CLEAR / RETURN
316
317 ASETUP, 0
318 DCA CADR / SAVE ADDRESS FOR LATER USE
319
320 / LIMIT CHECK
321 TAD CADR
322 BSW / NOW ROW ADDRESS IN LOWER BITS
323 AND K77 / MASK OUT UPPER BITS
324 TAD KNMROW
325 SPA
326 JMP LGD1 / ONE LIMIT GOOD
327 CLA
328 TAD KBORD / BORDER STANDARD RETURN VALUE
329 JMP I ASETUP / ERROR RETURN
330 LGD1, CLA CLL
331 TAD CADR
332 AND K77
333 TAD KNMCO
334 SPA
335 JMP LGD2
336 CLA CLL
337 TAD KBORD
338 JMP I ASETUP / ERROR RETURN
339 LGD2, CLA CLL
340
341 / SETUP POINTER AND MASK
342 TAD CADR
343 RTR
344 RAR
345 AND K377
346 DCA APTR / ACCESS POINTER
347 TAD CADR
348 AND K7
349 TAD MASKSP
350 DCA MPTR
351 TAD I MPTR
352 DCA MASK
353
354 ISZ ASETUP / PREPARE GOOD RETURN
355 JMP I ASETUP / GOOD RETURN
356
357
358
359 MPTR, 0
360 MASKSP, MASKS
361 MASKS, 200
362 100
363 040
364 020
365 010
366 004
367 002
368 001
369
370
371
372