]> github.com/historicalsource and other repositories - dominos4.git/blob - A07754.XX
First commit
[dominos4.git] / A07754.XX
1         .TITLE  FORD\r
2 POS1    =0\r
3 POS2    =2\r
4 POS3    =4\r
5 POS4    =6\r
6 ADIR1   =10\r
7 FTIM1   =14\r
8 TEMP3   =20\r
9 FRAME   =22\r
10 SNUM    =23\r
11 SOUND   =24\r
12 TIMER   =25\r
13 CRASH   =26\r
14 HSCR    =27\r
15 PF1     =30\r
16 PF2     =31\r
17 PF3     =32\r
18 PF4     =33\r
19 STIM1   =34\r
20 FLAG1   =40\r
21 PWALL1  =44\r
22 PPOS1   =50\r
23 PPOS2   =52\r
24 PPOS3   =54\r
25 PPOS4   =56\r
26 ACOD1   =60\r
27 SCR     =64\r
28 PTR     =70\r
29 TEMP1   =72\r
30 WALL1   =74\r
31 CREDIT  =100\r
32 TAMT    =101\r
33 TOG     =102\r
34 AFLAG   =103\r
35 COINS   =104\r
36 TONE    =105\r
37 TEMP2   =106\r
38 T1      =110\r
39 T2      =111\r
40 T3      =112\r
41 T4      =113\r
42 UP1     =114\r
43 UP2     =115\r
44 UP3     =116\r
45 UP4     =117\r
46 CNT     =120\r
47 WIN     =121\r
48 SIMUL   =122\r
49 CNTRL   =126\r
50 RTEST   =127\r
51 SBI1    =4032\r
52 SBI2    =4037\r
53 SBI3    =4050\r
54 SBI4    =4055\r
55 ST      =4200\r
56 CLICK   =6020\r
57 TEST    =14000\r
58 TESTV   =252\r
59 AMODE   =6000\r
60 TREST   =6200\r
61 SB1     =6060\r
62 SB2     =6100\r
63 SB3     =6120\r
64 SB4     =6140\r
65 GSW     =4060\r
66 CSW     =4061\r
67 COINAD  =4100\r
68 SPOS1   =2360\r
69 SPOS2   =2726\r
70 SPOS3   =3217\r
71 SPOS4   =2651\r
72 APOS1   =2620\r
73 APOS2   =2724\r
74 APOS3   =3017\r
75 APOS4   =2713\r
76 TPOS1   =2320\r
77 TPOS2   =2727\r
78 TPOS3   =3257\r
79 TPOS4   =2650\r
80 TLOS1   =2260\r
81 TLOS2   =2730\r
82 TLOS3   =3317\r
83 TLOS4   =2647\r
84 PLAYFIELD=2000\r
85 SW1     =4030\r
86 SW2     =4034\r
87 SW3     =4050\r
88 SW4     =4054\r
89         .ASECT\r
90         .=30000\r
91 PWRON:  SEI                     ;POWER ON RESET\r
92         CLD\r
93         LDX     I,177           ;SET UP STACK\r
94         TXS\r
95         LDA     A,TEST\r
96         CMP     I,TESTV         ;DIAGNOSTIC PRESENT?\r
97         BEQ     TESTVJ          ;YES, GO TO TEST\r
98         BNE     MAINT           ;NO, GO TO MAIN LOOP\r
99 TESTVJ: JSR     A,TEST\r
100 MAINT:  JSR     A,SETUP         ;CLEAR CREDIT\r
101 MAIN:   JSR     A,ATRACT\r
102         JSR     A,START\r
103         JMP     A,MAIN\r
104 ;ATTRACT SUBROUTINE\r
105 ATRACT: LDA     I,0\r
106         STA     Z,CRASH\r
107         STA     A,AMODE+1       ;TURN OFF SOUND\r
108         STA     A,SB1\r
109         STA     A,SB2\r
110         STA     A,SB3\r
111         STA     A,SB4\r
112         STA     Z,AFLAG         ;SET ATTRACT FLAG=0\r
113         LDX     I,0\r
114 A40:    STA     ZX,PF1          ;ZERO PLAYER FLAGS\r
115         INX\r
116         CPX     I,4\r
117         BNE     A40\r
118         STA     A,TREST         ;PULSE WATCHDOG\r
119         JSR     A,BLANK         ;BLANK SCREEN\r
120         STA     A,TREST         ;PULSE WATCHDOG\r
121         JSR     A,INITL         ;INITIALIZE\r
122         JSR     A,SCORE         ;OUTPUT SCORE\r
123         LDA     I,104           ;OUTPUT COIN MESSAGE\r
124         BIT     A,CSW\r
125         BPL     A70\r
126         LDA     I,102\r
127         BVC     A70\r
128         LDA     I,103\r
129 A70:    JSR     A,MESS\r
130         LDA     I,101           ;OUTPUT GAME OVER\r
131         JSR     A,MESS\r
132 A1:     JSR     A,PLAY\r
133         LDA     A,ST            ;SELF-TEST?\r
134         BMI     S,+5            ;NO\r
135         JSR     A,TRAM          ;YES, GO TO SELF-TEST\r
136         LDA     Z,CREDIT\r
137         BNE     A2\r
138         LDA     Z,TEMP2\r
139         BMI     ATRACT\r
140         JSR     A,WAIT\r
141         JMP     A,A1\r
142 A2:     LDA     I,1\r
143         STA     Z,AFLAG         ;SET ATTRACT FLAG\r
144         LDA     I,217\r
145         STA     Z,TIMER         ;SET UP BUTTON TIMER\r
146         JSR     A,BLANK\r
147         JSR     A,INITL\r
148         JSR     A,SCORE\r
149         LDA     I,104\r
150         BIT     A,CSW\r
151         BPL     A50\r
152         LDA     I,102\r
153         BVC     A50\r
154         LDA     I,103\r
155 A50:    JSR     A,MESS\r
156         LDA     I,105\r
157         JSR     A,MESS\r
158 A3:     STA     A,CLICK\r
159         LDA     A,SBI1          ;CHECK START BUTTONS\r
160         BMI     A4\r
161         LDX     I,0\r
162         LDA     ZX,PF1\r
163         BNE     A4\r
164         BEQ     A10\r
165 A4:     LDA     A,SBI2\r
166         BMI     A5\r
167         LDX     I,1\r
168         LDA     ZX,PF1\r
169         BNE     A5\r
170         BEQ     A10\r
171 A5:     LDA     A,SBI3\r
172         BMI     A6\r
173         LDX     I,2\r
174         LDA     ZX,PF1\r
175         BNE     A6\r
176         BEQ     A10\r
177 A6:     LDA     A,SBI4\r
178         BMI     A7\r
179         LDX     I,3\r
180         LDA     ZX,PF1\r
181         BNE     A7\r
182 A10:    LDA     Z,CREDIT        ;ANY CREDIT?\r
183         BEQ     A7              ;NO\r
184         DEC     Z,CREDIT        ;YES, DECREMENT CREDIT\r
185         LDA     I,1\r
186         STA     ZX,PF1          ;SET PLAYER FLAG\r
187 A7:     LDA     Z,CREDIT\r
188         CMP     I,4\r
189         BCC     A51\r
190         LDA     I,4\r
191 A51:    ORA     I,260\r
192         STA     A,PLAYFIELD+526\r
193         LDX     I,0\r
194 A9:     LDA     ZX,PF1          ;ANY PLAYER FLAG SET?\r
195         BNE     A8              ;YES\r
196         INX\r
197         CPX     I,4\r
198         BNE     A9\r
199 A20:    INC     Z,FRAME         ;NO, INCREMENT FRAME\r
200         LDA     Z,FRAME\r
201         AND     I,10\r
202         BEQ     A21\r
203         STA     A,SB1+1         ;TURN LITES ON\r
204         STA     A,SB2+1\r
205         STA     A,SB3+1\r
206         STA     A,SB4+1\r
207         LDA     I,110\r
208         JSR     A,MESS\r
209         LDA     I,106\r
210         JSR     A,MESS\r
211         JMP     A,A30\r
212 A21:    LDA     Z,PF1           ;TURN SELECTED LITES OFF\r
213         BEQ     A220\r
214         STA     A,CLICK+1\r
215         BNE     A22\r
216 A220:   STA     A,SB1\r
217 A22:    LDA     Z,PF2\r
218         BEQ     A230\r
219         STA     A,CLICK+1\r
220         BNE     A23\r
221 A230:   STA     A,SB2\r
222 A23:    LDA     Z,PF3\r
223         BEQ     A240\r
224         STA     A,CLICK+1\r
225         BNE     A24\r
226 A240:   STA     A,SB3\r
227 A24:    LDA     Z,PF4\r
228         BEQ     A250\r
229         STA     A,CLICK+1\r
230         BNE     A25\r
231 A250:   STA     A,SB4\r
232 A25:    LDA     I,210\r
233         JSR     A,MESS\r
234         LDA     I,206\r
235         JSR     A,MESS\r
236 A30:    JSR     A,WAIT\r
237         JMP     A,A3\r
238 A8:     INC     Z,TIMER         ;TIMER DONE?\r
239         BNE     A20             ;NO\r
240         STA     A,SB1           ;YES\r
241         STA     A,SB2\r
242         STA     A,SB3\r
243         STA     A,SB4\r
244         LDA     Z,PF1\r
245         BEQ     A31\r
246         STA     A,SB1+1\r
247 A31:    LDA     Z,PF2\r
248         BEQ     A32\r
249         STA     A,SB2+1\r
250 A32:    LDA     Z,PF3\r
251         BEQ     A33\r
252         STA     A,SB3+1\r
253 A33:    LDA     Z,PF4\r
254         BEQ     A34\r
255         STA     A,SB4+1\r
256 A34:    RTS\r
257 \r
258 ;START SUBROUTINE\r
259 START:  JSR     A,BLANK         ;BLANK SCREEN\r
260         JSR     A,INITL         ;INITIALIZE\r
261         STA     A,TREST\r
262         LDA     I,0\r
263         STA     Z,CRASH\r
264         STA     Z,TONE\r
265         STA     A,CLICK\r
266         LDX     I,0\r
267 S6:     STA     ZX,SCR          ;ZERO SCORE\r
268         INX\r
269         CPX     I,4\r
270         BNE     S6\r
271         JSR     A,SCORE         ;OUTPUT SCORE\r
272         LDA     I,4\r
273         STA     Z,SOUND\r
274         STA     A,AMODE         ;TURN ON SOUND\r
275 S2:     JSR     A,PLAY\r
276         LDA     Z,TEMP2\r
277         BMI     S750\r
278 S751:   JSR     A,WAIT\r
279         JMP     A,S2\r
280 S750:   STA     A,CLICK\r
281         LDA     I,0\r
282         STA     Z,CRASH\r
283         LDX     I,0\r
284         LDY     I,0\r
285 S101:   LDA     ZX,SCR\r
286         CMP     Z,HSCR\r
287         BNE     S100\r
288         INY\r
289 S100:   INX\r
290         CPX     I,4\r
291         BNE     S101\r
292         LDA     I,0\r
293         CPY     I,3\r
294         BCC     S102\r
295         LDA     I,1\r
296 S102:   STA     Z,CNT\r
297         LDX     I,217           ;FREEZE SCREEN FOR AWHILE\r
298 S79:    JSR     A,WAIT\r
299         LDA     Z,CNT           ;FLASH GAME OVER?\r
300         BEQ     S752            ;NO\r
301         LDY     I,101\r
302         TXA\r
303         AND     I,30\r
304         BNE     S103\r
305         LDY     I,201\r
306 S103:   TYA\r
307         JSR     A,MESS\r
308 S752:   INX\r
309         BNE     S79\r
310         LDA     Z,CNT           ;GAME OVER?\r
311         BEQ     S400            ;NO\r
312         LDX     I,0             ;YES, SELECT GAME WINNER\r
313 S401:   LDA     ZX,SCR\r
314         CMP     Z,HSCR\r
315         BCC     S402            ;GOT THE WINNER\r
316         INX\r
317         CPX     I,4\r
318         BNE     S401\r
319         BEQ     S400            ;NO WINNER\r
320 S402:   STX     Z,WIN\r
321 S400:   LDA     Z,WIN\r
322         BMI     S47\r
323         JSR     A,BLANK\r
324         JSR     A,INITL\r
325         JSR     A,SCORE\r
326         STA     A,TREST\r
327         LDA     I,107           ;FLASH WINNER'S ARROW\r
328         JSR     A,MESS\r
329         LDX     I,144\r
330 S40:    JSR     A,WAIT\r
331         TXA\r
332         AND     I,14\r
333         BNE     S41\r
334         LDA     I,0\r
335         STA     A,APOS1\r
336         STA     A,APOS2\r
337         STA     A,APOS3\r
338         STA     A,APOS4\r
339         BEQ     S45\r
340 S41:    LDY     Z,WIN\r
341         BNE     S42\r
342         LDA     I,276\r
343         STA     A,APOS1\r
344         BMI     S45\r
345 S42:    CPY     I,1\r
346         BNE     S43\r
347         LDA     I,277\r
348         STA     A,APOS2\r
349         BMI     S45\r
350 S43:    CPY     I,2\r
351         BNE     S44\r
352         LDA     I,274\r
353         STA     A,APOS3\r
354         BMI     S45\r
355 S44:    LDA     I,275\r
356         STA     A,APOS4\r
357 S45:    INX\r
358         BNE     S40\r
359 S47:    LDA     Z,CNT           ;GAME OVER?\r
360         BNE     S78             ;YES\r
361         JSR     A,BLANK\r
362         JSR     A,INITL         ;NO, RESTART GAME\r
363         LDA     I,4\r
364         STA     Z,SOUND\r
365         JSR     A,SCORE\r
366         LDX     I,0\r
367 S50:    LDA     ZX,FLAG1        ;ELIMINATE ARROWS\r
368         CMP     I,2             ;OF PLAYERS WHO\r
369         BNE     S51             ;ARE GONE\r
370         LDA     I,0\r
371         CPX     I,0\r
372         BNE     S52\r
373         STA     A,SPOS1\r
374         BEQ     S51\r
375 S52:    CPX     I,1\r
376         BNE     S53\r
377         STA     A,SPOS2\r
378         BEQ     S51\r
379 S53:    CPX     I,2\r
380         BNE     S54\r
381         STA     A,SPOS3\r
382         BEQ     S51\r
383 S54:    STA     A,SPOS4\r
384 S51:    INX\r
385         CPX     I,4\r
386         BNE     S50\r
387         JMP     A,S2\r
388 S78:    RTS                     ;ALL DONE, RETURN TO MAINLINE\r
389 ;PLAY SUBROUTINE\r
390 PLAY:   LDX     I,0\r
391 P8:     LDA     ZX,FLAG1\r
392         CMP     I,377\r
393         BEQ     P41\r
394         INX\r
395         CPX     I,4\r
396         BNE     P8\r
397         LDA     Z,TONE          ;IN NORMAL PLAY\r
398         BEQ     P67             ;MAKE SOUND WHOOSH\r
399         LDA     I,4\r
400         SEC\r
401         SBC     Z,TONE\r
402         DEC     Z,TONE\r
403 P67:    STA     Z,CRASH\r
404         BPL     P40\r
405 P41:    LDA     Z,CRASH\r
406         BEQ     P40\r
407         DEC     Z,CRASH\r
408 P40:    JSR     A,SCAN          ;LOOK AT SWITCHES\r
409         LDA     Z,TIMER         ;TIME TO UPDATE?\r
410         BNE     P2              ;NO\r
411         LDA     Z,TAMT          ;YES, RESET TIMER\r
412         STA     Z,TIMER\r
413         LDY     I,0\r
414         LDX     I,0\r
415 P44:    LDA     ZX,FLAG1        ;COUNT # OF PLAYERS\r
416         BEQ     P45             ;NOT GOING FORWARD\r
417         INY                     ;IF 3 OR GREATER,\r
418 P45:    INX                     ;BYPASS GOING FORWARD\r
419         CPX     I,4             ;LOGIC\r
420         BNE     P44\r
421         CPY     I,3\r
422         BCS     P1\r
423         LDA     I,0\r
424         STA     Z,CNT           ;SET UP TOGGLE COUNTER\r
425         LDX     Z,TOG\r
426         LDA     Z,AFLAG         ;IN ATTRACT MODE\r
427         BEQ     P42             ;IGNORE SCORE\r
428         LDA     ZX,SCR          ;PLAYER ELIMINATED?\r
429         CMP     Z,HSCR\r
430         BEQ     P1              ;YES\r
431 P42:    LDA     ZX,FLAG1        ;PLAYER GOING FORWARD?\r
432         BNE     P1              ;NO\r
433         JSR     A,FOR           ;YES, DO SO\r
434 P1:     INC     Z,TOG           ;BUMP TOG\r
435         LDA     Z,TOG\r
436         CMP     I,4\r
437         BNE     P100\r
438         LDA     I,0\r
439         STA     Z,TOG\r
440 P100:   LDX     Z,TOG           ;VALID TOGGLE?\r
441         LDA     ZX,FLAG1\r
442         BEQ     P2              ;YES\r
443         LDA     Z,CNT           ;CHECKED ALL 4 PLAYERS?\r
444         CMP     I,4\r
445         BEQ     P2              ;YES\r
446         INC     Z,CNT           ;NO, GET NEXT TOGGLE\r
447         JMP     A,P1\r
448 P2:     DEC     Z,TIMER         ;DECREMENT TIMER\r
449         LDX     I,0\r
450 P3:     LDA     ZX,FLAG1        ;GOING FORWARD?\r
451         BEQ     P4              ;YES\r
452         CMP     I,377           ;COLLIDING?\r
453         BNE     P5              ;NO\r
454         JSR     A,COL           ;YES\r
455         JMP     A,P4\r
456 P5:     CMP     I,1             ;TOPPLING?\r
457         BNE     P6              ;NO\r
458         JSR     A,TOP           ;YES\r
459         JMP     A,P4\r
460 P6:     CMP     I,2             ;ALL DONE?\r
461         BEQ     P4              ;YES\r
462         JSR     A,ELIM          ;NO,CLEAR OUT DOMINOES\r
463 P4:     INX\r
464         CPX     I,4\r
465         BNE     P3\r
466         LDA     Z,AFLAG         ;IF IN ATTRACT MODE\r
467         BEQ     P43             ;IGNORE FOLLOWING LOGIC\r
468         LDA     I,1\r
469         STA     Z,TEMP1\r
470         LDX     I,0\r
471         LDY     I,0\r
472 P20:    LDA     ZX,PF1          ;CHECK TO SEE IF\r
473         BNE     P21             ;ONLY COMPUTER REMAINS\r
474         LDA     ZX,FLAG1\r
475         BNE     P22\r
476         INY\r
477         BNE     P22\r
478 P21:    LDA     ZX,FLAG1\r
479         CMP     I,2\r
480         BNE     P43\r
481         LDA     ZX,SCR          ;IS THIS PLAYER\r
482         CMP     Z,HSCR          ;ELIMINATED FOR GOOD?\r
483         BCS     P22             ;YES\r
484         LDA     I,0             ;NO, CLEAR TEMP1\r
485         STA     Z,TEMP1\r
486 P22:    INX\r
487         CPX     I,4\r
488         BNE     P20\r
489         CPY     I,2             ;IF SO, GIVE ALL REMAINING\r
490         BCC     P43             ;COMPUTER PLAYERS BUT ONE\r
491         DEY                     ;A FALLEN DOMINO SO AS TO\r
492         LDX     I,0             ;END HEAT IMMEDIATELY\r
493 P23:    LDA     ZX,PF1\r
494         BNE     P24\r
495         LDA     ZX,FLAG1\r
496         BNE     P24\r
497         LDA     Z,TEMP1         ;ANY USERS STILL ACTIVE?\r
498         BNE     P55             ;NO\r
499         LDA     I,1             ;YES,DEFEAT COMPUTER\r
500         STA     Z,CNTRL         ;CONTROL OF REMAINING\r
501         BNE     P43             ;PLAYERS\r
502 P55:    LDA     Z,HSCR          ;KILL ALL BUT ONE\r
503         STA     ZX,SCR          ;REMAINING COMPUTER PLAYERS\r
504         LDA     I,2\r
505         STA     ZX,FLAG1\r
506 P25:    DEY\r
507         BEQ     P43\r
508 P24:    INX\r
509         CPX     I,4\r
510         BNE     P23\r
511 P43:    LDX     I,0\r
512         LDA     I,377\r
513         STA     Z,WIN\r
514 P470:   LDA     ZX,FLAG1                ;RECORD WINNER\r
515         CMP     I,2\r
516         BEQ     P471\r
517         LDA     ZX,SIMUL\r
518         BNE     P471\r
519         STX     Z,WIN\r
520 P471:   INX\r
521         CPX     I,4\r
522         BNE     P470\r
523         LDY     I,0\r
524         LDX     I,0\r
525 P7:     LDA     ZX,FLAG1                ;HEAT FINISHED?\r
526         CMP     I,2\r
527         BNE     P9\r
528         INY\r
529 P9:     INX\r
530         CPX     I,4\r
531         BNE     P7\r
532         CPY     I,3\r
533         BCS     S75\r
534 S80:    INC     Z,FRAME         ;BUMP FRAME COUNTER\r
535         LDA     Z,FRAME         ;TIME TO SPEEDUP?\r
536         AND     I,177\r
537         BNE     S81             ;NO\r
538         LDA     Z,TAMT          ;YES\r
539         CMP     I,7             ;MAX SPEEDUP\r
540         BEQ     S81             ;YES\r
541         DEC     Z,TAMT          ;NO, SPEED IT UP\r
542 S81:    LDA     I,0\r
543         BEQ     S,+4\r
544 S75:    LDA     I,377\r
545         STA     Z,TEMP2\r
546         RTS\r
547 FOR:    STX     Z,TEMP2\r
548         LDA     Z,AFLAG                 ;SUPPRESS SOUNDS\r
549         BEQ     F2                      ;IN ATTRACT MODE\r
550         LDA     AX,SOTAB                ;GET CORRECT SOUND\r
551         STA     Z,SOUND\r
552         LDA     I,3\r
553         STA     Z,TONE\r
554 F2:     LDA     ZX,PWALL1               ;FIRST TIME?\r
555         BNE     F3                      ;NO\r
556         LDY     ZX,ADIR1                ;YES, ASSUME ADIR\r
557         LDX     AY,BTAB\r
558         BPL     F4\r
559 F3:     JSR     A,FIND                  ;FIND CORRECT DOMINO INDEX\r
560 F4:     LDY     Z,TEMP2\r
561         LDA     AY,ADIR1                ;ACCESS CORRECT DIRECTION TABLE\r
562         BNE     F6\r
563         LDA     AX,TAB1\r
564         BNE     F10\r
565 F6:     CMP     I,1\r
566         BNE     F7\r
567         LDA     AX,TAB2\r
568         BNE     F10\r
569 F7:     CMP     I,2\r
570         BNE     F8\r
571         LDA     AX,TAB3\r
572         BNE     F10\r
573 F8:     LDA     AX,TAB4\r
574 F10:    LDY     I,0                     ;OUTPUT WALL SECTION\r
575         LDX     Z,TEMP2\r
576         CPX     I,1\r
577         BEQ     F40\r
578         CPX     I,3\r
579         BEQ     F40\r
580         ORA     I,200\r
581 F40:    JSR     A,OUTX\r
582         AND     I,177\r
583         STA     ZX,PWALL1               ;SAVE WALL CODE\r
584         LDA     Z,TEMP2\r
585         ASL\r
586         TAX\r
587         LDA     ZX,POS1                 ;SAVE POSITION\r
588         STA     ZX,PPOS1\r
589         LDA     ZX,POS1+1\r
590         STA     ZX,PPOS1+1\r
591         LDX     Z,TEMP2\r
592         LDA     ZX,ACOD1\r
593         AND     I,173\r
594         JSR     A,NPOS                  ;UPDATE POSITION\r
595         LDY     I,0\r
596         JSR     A,INX                   ;CHECK FOR EMINENT COLLISIONS\r
597         BEQ     F20                     ;NONE\r
598         STA     ZX,WALL1                ;YES\r
599         LDX     I,0                     ;IF COLLISION IS NOT\r
600         AND     I,173                   ;WITH AN ARROW, A\r
601 F24:    CMP     AX,KTAB                 ;SIMULTANEOUS\r
602         BEQ     F23                     ;COLLISION CANNOT OCCUR\r
603         INX\r
604         CPX     I,4\r
605         BNE     F24\r
606         LDX     Z,TEMP2\r
607         LDA     I,377\r
608         STA     ZX,FLAG1\r
609         BMI     F25\r
610 F23:    LDA     Z,TEMP2\r
611         ASL\r
612         TAX\r
613         LDA     ZX,POS1                 ;CHECK FOR\r
614         CMP     AY,POS1                 ;SIMULTANEOUS\r
615         BNE     F22                     ;COLLISIONS\r
616         LDA     ZX,POS1+1\r
617         CMP     AY,POS1+1\r
618         BNE     F22\r
619         TYA\r
620         LSR\r
621         TAX\r
622         LDA     I,377\r
623         STA     ZX,FLAG1\r
624         LDA     I,1\r
625         STA     ZX,SIMUL\r
626 F22:    INY\r
627         INY\r
628         CPY     I,8.\r
629         BNE     F23\r
630 F25:    LDA     Z,AFLAG                 ;SUPPRESS CRASH\r
631         BEQ     F20                     ;IN ATTRACT MODE\r
632         LDA     I,15.\r
633         STA     Z,SOUND\r
634         LDA     I,17\r
635         STA     Z,CRASH\r
636 F20:    LDX     Z,TEMP2\r
637         LDY     I,0\r
638         LDA     ZX,ACOD1                ;OUTUT NEW ARROW\r
639         JSR     A,OUTX\r
640         RTS\r
641 SOTAB:  .BYTE   0,4,8.,12.\r
642 COL:    STX     Z,TEMP2\r
643         LDY     I,0\r
644         LDA     ZX,FTIM1                ;FLASH TIMER STILL ACTIVE?\r
645         BEQ     CL10                    ;NO\r
646         DEC     ZX,FTIM1                ;YES, DECREMENT IT\r
647         LDA     ZX,FTIM1                ;TIME TO FLASH?\r
648         AND     I,2\r
649         BNE     CL2\r
650         LDA     ZX,ACOD1                ;FLASH ARROW\r
651         JSR     A,OUTX\r
652         RTS\r
653 CL2:    LDA     ZX,WALL1                ;FLASH WALL\r
654         JSR     A,OUTX\r
655         RTS\r
656 CL10:   LDA     I,1                     ;FLASHING ALL DONE\r
657         STA     ZX,FLAG1                ;SET FLAG TO TOPPLE\r
658         LDA     ZX,SIMUL                ;SIMULTANEOUS COLLISION?\r
659         BEQ     CL3                     ;NO\r
660         LDA     I,0                     ;YES, RESET WALL\r
661         STA     ZX,WALL1                ;SECTION TO A BLANK\r
662 CL3:    LDY     I,0\r
663         LDX     Z,TEMP2\r
664         LDA     ZX,WALL1\r
665         JSR     A,OUTX\r
666         TXA\r
667         ASL\r
668         TAX\r
669         LDA     ZX,PPOS1                ;RESTORE POSITION\r
670         STA     ZX,POS1\r
671         LDA     ZX,PPOS1+1\r
672         STA     ZX,POS1+1\r
673         LDX     Z,TEMP2\r
674         LDA     Z,AFLAG                 ;MAKE SURE\r
675         BEQ     CL5                     ;SCORE DOES NOT\r
676         INC     ZX,SCR                  ;CHANGE IN ATTRACT MODE\r
677         LDA     Z,HSCR\r
678         CMP     ZX,SCR\r
679         BCS     CL5\r
680         STA     ZX,SCR\r
681 CL5:    RTS\r
682 TOP:    STX     Z,TEMP2\r
683         LDA     ZX,STIM1                ;TIME TO TOPPLE?\r
684         BEQ     TO1                     ;YES\r
685         DEC     ZX,STIM1                ;NO, DECREMENT TIMER\r
686         RTS\r
687 TO1:    LDY     I,0\r
688         JSR     A,INX                   ;READ CURRENT POSITION\r
689         JSR     A,VALID\r
690         BCS     TO4\r
691         STA     Z,TEMP1\r
692         ORA     I,1\r
693         JSR     A,OUTX                  ;TOPPLE DOMINO\r
694         LDA     Z,AFLAG                 ;SUPPRESS CLICK\r
695         BEQ     TO3                     ;IN ATTRACT MODE\r
696         JSR     A,TICK\r
697 TO3:    LDA     Z,TEMP2\r
698         ASL\r
699         TAX\r
700         LDA     ZX,POS1                 ;CURRENT POSITION=\r
701         CMP     AX,BPOS                 ;INITIAL POSITION?\r
702         BNE     TO2                     ;NO\r
703         LDA     ZX,POS1+1\r
704         CMP     AX,BPOS+1\r
705         BNE     TO2                     ;NO\r
706         LDA     Z,TEMP2\r
707         ASL\r
708         TAX\r
709         LDA     ZX,PPOS1        ;RESTORE POSITION\r
710         STA     ZX,POS1\r
711         LDA     ZX,PPOS1+1\r
712         STA     ZX,POS1+1\r
713         LDX     Z,TEMP2                 ;YES, ALL DONE\r
714         LDA     I,3                     ;SET FLAG\r
715         STA     ZX,FLAG1                ;TO ELIMINATE\r
716         RTS\r
717 TO2:    LDX     Z,TEMP2\r
718         LDA     I,2\r
719         STA     ZX,STIM1                ;RESET TOPPLE TIMER\r
720         LDA     Z,TEMP1                 ;UPDATE POSITION\r
721         AND     I,177\r
722         JSR     A,UPOS\r
723 TO4:    RTS\r
724 ELIM:   STX     Z,TEMP2         ;ELIMINATE DOMINOES\r
725 EL2:    LDY     I,0\r
726         LDX     Z,TEMP2         ;GET LAST DOMINO\r
727         JSR     A,INX\r
728         AND     I,176           ;AND OUT TOPPLE BIT\r
729         JSR     A,VALID\r
730         BCS     EL3\r
731         STA     Z,TEMP1\r
732         LDA     I,0\r
733         JSR     A,OUTX          ;ELIMINATE DOMINO\r
734         STA     A,TREST\r
735         LDA     Z,TEMP2\r
736         ASL\r
737         TAX\r
738         LDA     ZX,POS1         ;ALL DONE?\r
739         CMP     AX,BPOS\r
740         BNE     EL1             ;NO\r
741         LDA     ZX,POS1+1\r
742         CMP     AX,BPOS+1\r
743         BNE     EL1             ;NO\r
744         LDX     Z,TEMP2         ;YES, ALL DONE\r
745         LDA     I,2\r
746         STA     ZX,FLAG1\r
747 EL3:    RTS\r
748 EL1:    LDX     Z,TEMP2\r
749         LDA     Z,TEMP1\r
750         JSR     A,UPOS          ;UPDATE POSITION\r
751         JMP     A,EL2\r
752 OUTX:   CPX     I,0                     ;OUTPUTS A-REG TO NY,POS\r
753         BNE     OX1                     ;DEPENDENT ON X-REG\r
754         STA     NY,POS1\r
755         RTS\r
756 OX1:    CPX     I,1\r
757         BNE     OX2\r
758         STA     NY,POS2\r
759         RTS\r
760 OX2:    CPX     I,2\r
761         BNE     OX3\r
762         STA     NY,POS3\r
763         RTS\r
764 OX3:    STA     NY,POS4\r
765         RTS\r
766 INX:    CPX     I,0                     ;INPUTS TO A-REG\r
767         BNE     IN1                     ;FROM NY,POS\r
768         LDA     NY,POS1                 ;DEPENDENT ON X-REG\r
769         RTS\r
770 IN1:    CPX     I,1\r
771         BNE     IN2\r
772         LDA     NY,POS2\r
773         RTS\r
774 IN2:    CPX     I,2\r
775         BNE     IN3\r
776         LDA     NY,POS3\r
777         RTS\r
778 IN3:    LDA     NY,POS4\r
779         RTS\r
780 ;\r
781 ;MESSAGE ROUTINE\r
782 ;       ON ENTRY A-REG = BITS 0-5 = # OF MESSAGE\r
783 ;                      = BIT 6 = 1 WHITE\r
784 ;                                0 BLACK\r
785 ;                      = BIT 7 = 1 BLANK MESSAGE\r
786 ;                                0 WRITE MESSAGE\r
787 ;\r
788 MESS:   STX     Z,TEMP3\r
789         STY     Z,TEMP3+1\r
790         LDX     I,0\r
791         STX     Z,PTR\r
792         STX     Z,PTR+1\r
793         CLC\r
794         ROL\r
795         ROL     Z,PTR           ;SAVE R/W BIT\r
796         ROL\r
797         ROL     Z,PTR+1         ;SAVE COLOR BIT\r
798         LSR\r
799         TAX\r
800         LDA     AX,MESG\r
801         STA     Z,TEMP1\r
802         LDA     AX,MESG+1\r
803         STA     Z,TEMP1+1\r
804         LDA     AX,POSM\r
805         STA     Z,TEMP2\r
806         LDA     AX,POSM+1\r
807         STA     Z,TEMP2+1\r
808         LDY     I,0\r
809 M1:     LDA     NY,TEMP1\r
810         BEQ     M5\r
811         LDX     Z,PTR\r
812         BNE     M2\r
813         CMP     I,40\r
814         BNE     M3\r
815 M2:     LDA     I,0\r
816 M3:     LDX     Z,PTR+1\r
817         BEQ     M4\r
818         ORA     I,200\r
819 M4:     STA     NY,TEMP2\r
820         INY\r
821         BPL     M1\r
822 M5:     LDX     Z,TEMP3\r
823         LDY     Z,TEMP3+1\r
824         RTS\r
825 SCORE:  LDX     I,0             ;OUTPUT CORRECT SCORE DOMINOS\r
826 SE1:    LDA     Z,HSCR\r
827         SEC\r
828         SBC     ZX,SCR\r
829         TAY\r
830         LDA     AY,DOTS2\r
831         STA     Z,TEMP3\r
832         LDA     AY,DOTS1\r
833         CPX     I,0\r
834         BNE     SE2\r
835         ORA     I,200\r
836         STA     A,TPOS1\r
837         LDA     Z,TEMP3\r
838         ORA     I,200\r
839         STA     A,TLOS1\r
840         JMP     A,SE5\r
841 SE2:    CPX     I,1\r
842         BNE     SE3\r
843         STA     A,TPOS2\r
844         LDA     Z,TEMP3\r
845         STA     A,TLOS2\r
846         JMP     A,SE5\r
847 SE3:    CPX     I,2\r
848         BNE     SE4\r
849         ORA     I,200\r
850 SE8:    STA     A,TPOS3\r
851         STA     A,TPOS4\r
852         LDA     Z,TEMP3\r
853         ORA     I,200\r
854         STA     A,TLOS3\r
855         JMP     A,SE5\r
856 SE4:    STA     A,TPOS4\r
857         LDA     Z,TEMP3\r
858         STA     A,TLOS4\r
859 SE5:    INX\r
860         CPX     I,4\r
861         BNE     SE1\r
862         LDA     Z,AFLAG\r
863         BEQ     SE20\r
864         LDX     I,0\r
865 SE10:   LDA     ZX,SCR          ;IF PLAYER REACHES\r
866         CMP     Z,HSCR          ;HSCR, LOCK HIM OUT\r
867         BNE     SE11\r
868         LDA     I,2\r
869         STA     ZX,FLAG1\r
870 SE11:   INX\r
871         CPX     I,4\r
872         BNE     SE10\r
873 SE20:   RTS\r
874 DOTS1:  .BYTE   34,35,35,36,37,37,37\r
875 DOTS2:  .BYTE   34,34,35,35,35,36,37\r
876 TICK:   STA     A,CLICK+1       ;GENERATES A CLICK\r
877         STY     Z,TEMP3\r
878         STX     Z,TEMP3+1\r
879         LDY     I,0\r
880         LDX     I,1\r
881 TK1:    DEY                     ;WAIT 5 MSEC\r
882         BNE     S,-1\r
883         DEX\r
884         BNE     TK1\r
885         STA     A,CLICK\r
886         LDY     Z,TEMP3\r
887         LDX     Z,TEMP3+1\r
888         RTS\r
889 SETUP:  LDA     I,0\r
890         STA     Z,COINS\r
891         STA     Z,CREDIT\r
892         STA     A,CLICK\r
893         TAX\r
894 SU1:    STA     ZX,SCR\r
895         INX\r
896         CPX     I,4\r
897         BNE     SU1\r
898         RTS\r
899 WAIT:   BIT     A,COINAD        ;CONTINUALLY LOOK FOR COINS\r
900         BPL     WA2\r
901         BVS     WA1\r
902 WA2:    JSR     A,COIN\r
903 WA1:    LDA     A,AMODE\r
904         ROL\r
905         ROL\r
906         BPL     WAIT\r
907         STA     A,TREST         ;PULSE WATCHDOG\r
908         RTS\r
909 INITL:  LDA     I,SPOS1&377     ;SETUP INITIAL POSITIONS\r
910         STA     Z,POS1\r
911         LDA     I,SPOS1&177400/256.\r
912         STA     Z,POS1+1\r
913         LDA     I,SPOS2&377\r
914         STA     Z,POS2\r
915         LDA     I,SPOS2&177400/256.\r
916         STA     Z,POS2+1\r
917         LDA     I,SPOS3&377\r
918         STA     Z,POS3\r
919         LDA     I,SPOS3&177400/256.\r
920         STA     Z,POS3+1\r
921         LDA     I,SPOS4&377\r
922         STA     Z,POS4\r
923         LDA     I,SPOS4&177400/256.\r
924         STA     Z,POS4+1\r
925         LDA     I,2\r
926         STA     Z,ADIR1\r
927         LDA     I,3\r
928         STA     Z,ADIR1+1\r
929         LDA     I,0\r
930         STA     Z,ADIR1+2\r
931         LDA     I,1\r
932         STA     Z,ADIR1+3\r
933         LDA     I,274\r
934         STA     Z,ACOD1\r
935         STA     A,SPOS1\r
936         LDA     I,75\r
937         STA     Z,ACOD1+1\r
938         STA     A,SPOS2\r
939         LDA     I,272\r
940         STA     Z,ACOD1+2\r
941         STA     A,SPOS3\r
942         LDA     I,73\r
943         STA     Z,ACOD1+3\r
944         STA     A,SPOS4\r
945         LDA     I,14.           ;SET UP TIMER\r
946         STA     Z,TIMER\r
947         STA     Z,TAMT\r
948         LDA     I,8.\r
949         LDY     I,2\r
950         LDX     I,0\r
951 I4:     STA     ZX,FTIM1\r
952         STY     ZX,STIM1\r
953         INX\r
954         CPX     I,4\r
955         BNE     I4\r
956         LDA     A,GSW           ;SET GAME LENGTH\r
957         AND     I,300\r
958         CLC\r
959         ROL\r
960         ROL\r
961         ROL\r
962         ADC     I,3\r
963         STA     Z,HSCR\r
964         LDA     I,0\r
965         STA     Z,TOG\r
966         STA     Z,SNUM\r
967         STA     Z,CNTRL\r
968         LDX     I,0\r
969 I5:     STA     ZX,FLAG1\r
970         STA     ZX,PWALL1\r
971         STA     ZX,SIMUL\r
972         INX\r
973         CPX     I,4\r
974         BNE     I5\r
975         LDA     I,PLAYFIELD+37&377\r
976         STA     Z,PTR\r
977         LDA     I,PLAYFIELD+37&177400/256.\r
978         STA     Z,PTR+1\r
979         LDX     I,0\r
980 I3:     LDY     I,0\r
981         LDA     I,234\r
982         STA     NY,PTR\r
983         INY\r
984         STA     NY,PTR\r
985         LDA     Z,PTR\r
986         CLC\r
987         ADC     I,40\r
988         STA     Z,PTR\r
989         LDA     Z,PTR+1\r
990         ADC     I,0\r
991         STA     Z,PTR+1\r
992         INX\r
993         CPX     I,27.\r
994         BNE     I3\r
995         LDX     I,0\r
996         LDA     I,234\r
997 I1:     STA     AX,PLAYFIELD\r
998         STA     AX,PLAYFIELD+1540\r
999         INX\r
1000         CPX     I,32.\r
1001         BNE     I1\r
1002         RTS\r
1003 VALID:  STX     Z,TEMP3         ;CHECK TO SEE\r
1004         STA     Z,TEMP3+1       ;IF IT IS A\r
1005         LDX     I,0             ;VALID DOMINO\r
1006         AND     I,177\r
1007 VA1:    CMP     AX,CTAB\r
1008         BEQ     VA2\r
1009         INX\r
1010         CPX     I,12.\r
1011         BNE     VA1\r
1012         LDX     I,0\r
1013 VA5:    LDA     ZX,FLAG1                ;ANY PLAYERS\r
1014         CMP     I,377           ;STILL COLLIDING?\r
1015         BEQ     VA4             ;YES\r
1016         INX\r
1017         CPX     I,4\r
1018         BNE     VA5\r
1019         LDX     I,0             ;NO SET ALL PLAYERS DONE\r
1020         LDA     I,2\r
1021 VA6:    STA     ZX,FLAG1\r
1022         INX\r
1023         CPX     I,4\r
1024         BNE     VA6\r
1025 VA4:    SEC\r
1026         JMP     A,VA3\r
1027 VA2:    CLC\r
1028 VA3:    LDA     Z,TEMP3+1\r
1029         LDX     Z,TEMP3\r
1030         RTS\r
1031 FIND:   LDX     I,0             ;FIND CORRECT\r
1032 FF1:    CMP     AX,CTAB         ;DOMINO INDEX\r
1033         BEQ     FF2\r
1034         INX\r
1035         BPL     FF1\r
1036 FF2:    RTS\r
1037 FAR:    LDX     I,0             ;FIND CORRECT\r
1038 FA1:    CMP     AX,KTAB         ;ARROW INDEX\r
1039         BEQ     FA2\r
1040         INX\r
1041         BPL     FA1\r
1042 FA2:    RTS\r
1043 BLANK:  LDA     I,0             ;BLANKS SCREEN\r
1044         LDX     I,340\r
1045 B1:     DEX\r
1046         STA     AX,PLAYFIELD\r
1047         STA     AX,PLAYFIELD+224.\r
1048         STA     AX,PLAYFIELD+448.\r
1049         STA     AX,PLAYFIELD+672.\r
1050         BNE     B1\r
1051         RTS\r
1052 UPOS:   STX     Z,TEMP2+1\r
1053         JSR     A,FIND          ;GET CORRECT\r
1054         TXA                     ;DOMINO INDEX\r
1055         TAY\r
1056         LDA     Z,TEMP2+1\r
1057         ASL\r
1058         TAX\r
1059         LDA     AY,OTABL        ;GET NEXT POSITION\r
1060         CLC\r
1061         ADC     ZX,POS1\r
1062         STA     ZX,POS1\r
1063         LDA     AY,OTABH\r
1064         ADC     ZX,POS1+1\r
1065         STA     ZX,POS1+1\r
1066         LDX     Z,TEMP2+1\r
1067         RTS\r
1068 NPOS:   STX     Z,TEMP2+1\r
1069         JSR     A,FAR           ;GET CORRECT ARROW\r
1070         TXA\r
1071         TAY\r
1072         LDA     Z,TEMP2+1\r
1073         ASL\r
1074         TAX\r
1075         LDA     AY,PTABL        ;COMPUTE NEXT POSITION\r
1076         CLC\r
1077         ADC     ZX,POS1\r
1078         STA     ZX,POS1\r
1079         LDA     AY,PTABH\r
1080         ADC     ZX,POS1+1\r
1081         STA     ZX,POS1+1\r
1082         LDX     Z,TEMP2+1\r
1083         RTS\r
1084 COIN:   JSR     A,KOIN          ;GET COINS\r
1085 CO7:    LDA     A,CSW\r
1086         BPL     CO1\r
1087         ROL\r
1088         BPL     CO2\r
1089         LDA     Z,COINS         ;1 COIN 2 CREDITS\r
1090         BNE     S,+3\r
1091 CO5:    RTS\r
1092         DEC     Z,COINS\r
1093         INC     Z,CREDIT\r
1094         INC     Z,CREDIT\r
1095         JMP     A,CO7\r
1096         NOP\r
1097 CO2:    LDA     Z,COINS         ;1 COIN 1 CREDIT\r
1098         BEQ     CO5\r
1099         DEC     Z,COINS\r
1100         INC     Z,CREDIT\r
1101         JMP     A,CO7\r
1102         NOP\r
1103 CO1:    LDA     Z,COINS\r
1104         BEQ     CO5\r
1105         DEC     Z,COINS\r
1106         LDA     Z,CREDIT\r
1107         CLC\r
1108         ADC     I,4\r
1109         STA     Z,CREDIT\r
1110         JMP     A,CO7\r
1111         NOP\r
1112 KOIN:   LDA     I,9.\r
1113         STA     Z,TEMP1\r
1114         STA     Z,TEMP1+1\r
1115 K1:     BIT     A,COINAD\r
1116         BPL     S,+5\r
1117         BVC     S,+3\r
1118         RTS\r
1119         STA     A,TREST         ;PULSE WATCHDOG\r
1120         LDY     I,372\r
1121         DEY\r
1122         BNE     S,-1\r
1123         BIT     A,COINAD\r
1124         BVC     S,+8.\r
1125         LDA     I,9.\r
1126         STA     Z,TEMP1\r
1127         BPL     K2\r
1128         LDA     Z,TEMP1\r
1129         BEQ     K2\r
1130         DEC     Z,TEMP1\r
1131         BNE     K2\r
1132         INC     Z,COINS\r
1133 K2:     BIT     A,COINAD\r
1134         BPL     S,+8.\r
1135         LDA     I,9.\r
1136         STA     Z,TEMP1+1\r
1137         BPL     K1\r
1138         LDA     Z,TEMP1+1\r
1139         BEQ     K1\r
1140         DEC     Z,TEMP1+1\r
1141         BNE     K1\r
1142         INC     Z,COINS\r
1143         JMP     A,K1\r
1144 PTABL:  .BYTE   340,1,40,377\r
1145 PTABH:  .BYTE   377,0,0,377\r
1146 BTAB:   .BYTE   0,3,6,9.\r
1147 CTAB:   .BYTE   50,52,42,54,56,46\r
1148         .BYTE   40,142,152,44,146,156\r
1149 OTABL:  .BYTE   40,377,40,377,340,377\r
1150         .BYTE   340,1,340,1,40,1\r
1151 OTABH:  .BYTE   0,377,0,377,377,377\r
1152         .BYTE   377,0,377,0,0,0\r
1153 SCAN:   LDX     I,0\r
1154 SC10:   STX     Z,TEMP2+1\r
1155         LDA     ZX,FLAG1        ;PLAYER ACTIVE\r
1156         BNE     SC6             ;NO\r
1157         LDA     ZX,PF1          ;YES, USER OR COMPUTER?\r
1158         BEQ     SC2             ;COMPUTER\r
1159         LDA     Z,TEMP2+1       ;USER\r
1160         ASL\r
1161         TAX\r
1162         LDA     AX,SWTAB\r
1163         STA     Z,PTR\r
1164         LDA     AX,SWTAB+1\r
1165         STA     Z,PTR+1\r
1166         LDX     Z,TEMP2+1\r
1167         LDY     I,0\r
1168 SC5:    LDA     NY,PTR          ;USER, GET SWITCHES\r
1169         BPL     SC4\r
1170         INY\r
1171         CPY     I,4\r
1172         BNE     SC5\r
1173         BEQ     SC6             ;NO CHANGE, IGNORE SWITCHES\r
1174 SC4:    STY     ZX,ADIR1        ;UPDATE DIRECTION\r
1175         LDA     AY,KTAB         ;GET NEW ARROW CODE\r
1176         CPX     I,0\r
1177         BNE     SC1\r
1178         ORA     I,204\r
1179         BMI     SC7\r
1180 SC1:    CPX     I,2\r
1181         BNE     SC3\r
1182         ORA     I,200\r
1183         BMI     SC7\r
1184 SC3:    CPX     I,1\r
1185         BNE     SC7\r
1186         ORA     I,4\r
1187 SC7:    STA     ZX,ACOD1        ;SAVE IT\r
1188         LDY     I,0\r
1189         JSR     A,OUTX          ;AND OUTPUT NEW ARROW\r
1190         JMP     A,SC6\r
1191 SC2:    CPX     Z,TOG           ;ON COMPUTER PLAY\r
1192         BNE     SC6             ;CHANGE ARROW ONLY\r
1193         LDA     Z,TIMER         ;ONCE PER MOVE\r
1194         BNE     SC6\r
1195         LDA     Z,CNTRL         ;STILL UNDER COMPUTER CONTROL?\r
1196         BNE     SC6             ;NO\r
1197         JSR     A,NEXT\r
1198 SC6:    INX                     ;DONE ALL FOUR PLAYERS?\r
1199         CPX     I,4\r
1200         BNE     SC10            ;NO\r
1201         RTS                     ;YES\r
1202 NEXT:   STX     Z,TEMP2\r
1203         LDY     I,0             ;CHOOSE STRATEGY\r
1204         LDA     Z,TAMT          ;DEPENDENT ON GAME TIME\r
1205         CMP     I,10.\r
1206         BCS     NE60\r
1207         LDY     I,1\r
1208 NE60:   STY     Z,SNUM\r
1209         LDA     I,0\r
1210         STA     Z,T1\r
1211         STA     Z,T2\r
1212         STA     Z,T3\r
1213         STA     Z,T4\r
1214         LDA     Z,TEMP2\r
1215         ASL\r
1216         TAX\r
1217         LDA     ZX,POS1\r
1218         SEC\r
1219         SBC     I,40\r
1220         STA     Z,PTR\r
1221         LDA     ZX,POS1+1\r
1222         SBC     I,0\r
1223         STA     Z,PTR+1\r
1224 NE1:    LDX     I,0             ;LOOK AT SURROUNDING CELLS\r
1225         LDY     I,0             ;IF NON-EMPTY SKIP CHECK LOGIC\r
1226         LDA     NY,PTR\r
1227         BNE     NE2             ;IF EMPTY, CHECK ADJACENT\r
1228         LDA     Z,PTR           ;4 CELLS TO GET AN EXIT COUNT\r
1229         SEC\r
1230         SBC     I,40\r
1231         STA     Z,TEMP1\r
1232         LDA     Z,PTR+1\r
1233         SBC     I,0\r
1234         STA     Z,TEMP1+1\r
1235         JSR     A,CHECK\r
1236 NE2:    LDY     I,41\r
1237         INX\r
1238         LDA     NY,PTR\r
1239         BNE     NE3\r
1240         LDA     Z,PTR\r
1241         CLC\r
1242         ADC     I,1\r
1243         STA     Z,TEMP1\r
1244         LDA     Z,PTR+1\r
1245         ADC     I,0\r
1246         STA     Z,TEMP1+1\r
1247         JSR     A,CHECK\r
1248 NE3:    LDY     I,100\r
1249         INX\r
1250         LDA     NY,PTR\r
1251         BNE     NE4\r
1252         LDA     Z,PTR\r
1253         CLC\r
1254         ADC     I,40\r
1255         STA     Z,TEMP1\r
1256         LDA     Z,PTR+1\r
1257         ADC     I,0\r
1258         STA     Z,TEMP1+1\r
1259         JSR     A,CHECK\r
1260 NE4:    LDY     I,37\r
1261         INX\r
1262         LDA     NY,PTR\r
1263         BNE     NE5\r
1264         LDA     Z,PTR\r
1265         SEC\r
1266         SBC     I,1\r
1267         STA     Z,TEMP1\r
1268         LDA     Z,PTR+1\r
1269         SBC     I,0\r
1270         STA     Z,TEMP1+1\r
1271         JSR     A,CHECK\r
1272 NE5:    LDY     I,0\r
1273 NE6:    LDX     AY,T1           ;GET STATISTICAL CONVERSION\r
1274         LDA     Z,SNUM          ;CHOOSE PROPER STRATEGY\r
1275         BNE     NE40\r
1276         LDA     AX,STAB1\r
1277         BPL     NE41\r
1278 NE40:   LDA     AX,STAB2\r
1279 NE41:   STA     AY,T1\r
1280         INY\r
1281         CPY     I,4\r
1282         BNE     NE6\r
1283         LDX     Z,SNUM          ;GET PROPER STRATEGY\r
1284         LDA     AX,SFOR\r
1285         STA     Z,TEMP1\r
1286         LDY     Z,TEMP2         ;GIVE FORWARD DIRECTION\r
1287         LDX     AY,ADIR1        ;AN ADDED BIAS\r
1288         LDY     I,0\r
1289         TYA\r
1290 NE7:    CLC\r
1291         ADC     ZX,T1\r
1292         INY\r
1293         CPY     Z,TEMP1\r
1294         BNE     NE7\r
1295         STA     ZX,T1\r
1296         LDX     Z,SNUM          ;GET PROPER STRATEGY\r
1297         LDA     AX,SCEN\r
1298         STA     Z,TEMP1\r
1299         LDX     I,1             ;GIVE IMPETUS TOWARD CENTER\r
1300         LDA     Z,TEMP2\r
1301         ASL\r
1302         TAY\r
1303         LDA     AY,POS1\r
1304         AND     I,20\r
1305         BEQ     S,+4\r
1306         LDX     I,3\r
1307         LDA     I,0\r
1308         TAY\r
1309 NE30:   CLC\r
1310         ADC     ZX,T1\r
1311         INY\r
1312         CPY     Z,TEMP1\r
1313         BNE     NE30\r
1314         STA     ZX,T1\r
1315         LDX     I,0\r
1316         LDA     Z,TEMP2\r
1317         ASL\r
1318         TAY\r
1319         LDA     AY,POS1+1\r
1320         AND     I,2\r
1321         BNE     S,+4\r
1322         LDX     I,2\r
1323         LDA     I,0\r
1324         TAY\r
1325 NE31:   CLC\r
1326         ADC     ZX,T1\r
1327         INY\r
1328         CPY     Z,TEMP1\r
1329         BNE     NE31\r
1330         STA     ZX,T1\r
1331         LDA     Z,T1\r
1332         CLC\r
1333         ADC     Z,T2\r
1334         CLC\r
1335         ADC     Z,T3\r
1336         CLC\r
1337         ADC     Z,T4\r
1338         STA     Z,TEMP1\r
1339         BEQ     NE50\r
1340         JSR     A,RANDU         ;GET RANDOM #\r
1341 NE8:    CMP     Z,TEMP1         ;PUT RANDOM #\r
1342         BCC     NE9             ;IN PROPER RANGE\r
1343         SEC\r
1344         SBC     Z,TEMP1\r
1345         JMP     A,NE8\r
1346 NE9:    STA     Z,TEMP1\r
1347         LDY     I,0\r
1348         STY     Z,TEMP1+1\r
1349         LDA     Z,T1            ;PICK DIRECTION\r
1350         BEQ     NE20\r
1351         CMP     Z,TEMP1\r
1352         BCS     NE10\r
1353         STA     Z,TEMP1+1\r
1354 NE20:   INY\r
1355         LDA     Z,T2\r
1356         BEQ     NE21\r
1357         CLC\r
1358         ADC     Z,TEMP1+1\r
1359         CMP     Z,TEMP1\r
1360         BCS     NE10\r
1361         STA     Z,TEMP1+1\r
1362 NE21:   INY\r
1363         LDA     Z,T3\r
1364         BEQ     NE22\r
1365         CLC\r
1366         ADC     Z,TEMP1+1\r
1367         CMP     Z,TEMP1\r
1368         BCS     NE10\r
1369 NE22:   INY\r
1370 NE10:   LDX     Z,TEMP2\r
1371         STY     ZX,ADIR1\r
1372         LDA     AY,KTAB\r
1373         CPX     I,0\r
1374         BNE     NE71\r
1375         ORA     I,204\r
1376         BMI     NE70\r
1377 NE71:   CPX     I,2\r
1378         BNE     NE72\r
1379         ORA     I,200\r
1380         BMI     NE70\r
1381 NE72:   CPX     I,1\r
1382         BNE     NE70\r
1383         ORA     I,4\r
1384 NE70:   STA     ZX,ACOD1\r
1385         LDY     I,0\r
1386         LDX     Z,TEMP2\r
1387         JSR     A,OUTX          ;OUTPUT NEW ARROW\r
1388 NE50:   LDX     Z,TEMP2\r
1389         RTS\r
1390 STAB1:  .BYTE   0,1,7.,1\r
1391 STAB2:  .BYTE   0,1,12.,1\r
1392 SFOR:   .BYTE   6,12.\r
1393 SCEN:   .BYTE   5,1\r
1394 CHECK:  LDY     I,0             ;SCAN SURROUNDING CELLS\r
1395         LDA     NY,TEMP1        ;EVERY EMPTY CELL\r
1396         BNE     S,+4            ;BUMP COUNTER\r
1397         INC     ZX,T1\r
1398         LDY     I,41\r
1399         LDA     NY,TEMP1\r
1400         BNE     S,+4\r
1401         INC     ZX,T1\r
1402         LDY     I,100\r
1403         LDA     NY,TEMP1\r
1404         BNE     S,+4\r
1405         INC     ZX,T1\r
1406         LDY     I,37\r
1407         LDA     NY,TEMP1\r
1408         BNE     S,+4\r
1409         INC     ZX,T1\r
1410         RTS\r
1411 ;ROUTINE TO PRODUCE A PSEUDO-RANDOM 8-BIT NUMBER\r
1412 RANDU:  LDA     I,0\r
1413         STA     Z,TEMP1+1\r
1414         LDA     Z,UP4\r
1415         ROL\r
1416         ROL\r
1417         ROL     Z,TEMP1+1\r
1418         LDA     Z,UP1\r
1419         AND     I,10\r
1420         LSR\r
1421         LSR\r
1422         LSR\r
1423         EOR     Z,TEMP1+1\r
1424         LSR\r
1425         ROL     Z,UP1\r
1426         ROL     Z,UP2\r
1427         ROL     Z,UP3\r
1428         ROL     Z,UP4\r
1429         LDA     Z,UP1           ;CHECK FOR LOCK-UP\r
1430         BNE     RA1\r
1431         LDA     Z,UP2\r
1432         BNE     RA1\r
1433         LDA     Z,UP3\r
1434         BNE     RA1\r
1435         LDA     Z,UP4\r
1436         BNE     RA1\r
1437         LDA     I,42            ;LOCK-UP OCCURRED\r
1438         STA     Z,UP3\r
1439 RA1:    LDA     Z,UP3\r
1440         RTS\r
1441 ;RAM TEST\r
1442 TRAM:   LDX     I,0             ;FILL UP RAM WITH TEST PATTERN\r
1443 TT1:    TXA\r
1444         CLC\r
1445         ADC     I,4\r
1446         STA     AX,2000\r
1447         TXA\r
1448         CLC\r
1449         ADC     I,5\r
1450         STA     AX,2400\r
1451         TXA\r
1452         CLC\r
1453         ADC     I,6\r
1454         STA     AX,3000\r
1455         TXA\r
1456         CLC\r
1457         ADC     I,7\r
1458         CPX     I,200           ;DO NOT CHECK WORKING RAM\r
1459         BCS     S,+5\r
1460         STA     AX,3400\r
1461         INX\r
1462         BNE     TT1\r
1463 TT2:    TXA                     ;NOW CHECK RAM CELLS\r
1464         CLC\r
1465         ADC     I,4\r
1466 TT3:    CMP     AX,2000         ;IF RAM CELL BAD,\r
1467         STA     A,TREST\r
1468         BNE     TT3             ;HANG ON CELL\r
1469         TXA\r
1470         CLC\r
1471         ADC     I,5\r
1472 TT4:    CMP     AX,2400\r
1473         STA     A,TREST\r
1474         BNE     TT4\r
1475         TXA\r
1476         CLC\r
1477         ADC     I,6\r
1478 TT5:    CMP     AX,3000\r
1479         STA     A,TREST\r
1480         BNE     TT5\r
1481         TXA\r
1482         CLC\r
1483         ADC     I,7\r
1484         CPX     I,200\r
1485         BCS     TT40\r
1486 TT6:    CMP     AX,3400\r
1487         STA     A,TREST\r
1488         BNE     TT6\r
1489 TT40:   INX\r
1490         BNE     TT2\r
1491         LDA     I,0             ;TURN OFF SOUND\r
1492         STA     Z,CRASH\r
1493         LDX     I,0\r
1494 TT30:   JSR     A,WAIT\r
1495         DEX\r
1496         BNE     TT30\r
1497         JSR     A,BLANK         ;BLANK SCREEN\r
1498         LDX     I,0             ;ROM CHECKSUM\r
1499         LDA     I,PWRON&177400/256.\r
1500         STA     Z,PTR+1\r
1501 TT8:    LDA     I,4\r
1502         STA     Z,TEMP1\r
1503         LDA     I,0\r
1504         STA     Z,PTR\r
1505         TAY\r
1506 TT7:    CLC\r
1507         ADC     NY,PTR          ;BUILD CHECKSUM\r
1508         INY\r
1509         STA     A,TREST         ;PULSE WATCHDOG\r
1510         BNE     TT7\r
1511         INC     Z,PTR+1\r
1512         DEC     Z,TEMP1\r
1513         BNE     TT7\r
1514         CMP     AX,CKSUM\r
1515         BEQ     TT9\r
1516         TXA                     ;BAD ROM CHECKSUM\r
1517         ORA     I,60\r
1518         STA     AX,PLAYFIELD+1020       ;OUTPUT ROM # TO SCREEN\r
1519 TT9:    INX\r
1520         CPX     I,4\r
1521         BNE     TT8\r
1522         STA     A,AMODE         ;TURN ON SOUND\r
1523         LDA     I,14\r
1524         STA     Z,SOUND\r
1525         STA     A,SB1+1         ;TURN ON LITES\r
1526         STA     A,SB2+1\r
1527         STA     A,SB3+1\r
1528         STA     A,SB4+1\r
1529 TT10:   LDX     I,0             ;SWITCH TEST\r
1530         LDY     I,0\r
1531 TT11:   LDA     AX,4030\r
1532         BMI     TT12\r
1533         LDY     I,6\r
1534 TT12:   INX\r
1535         CPX     I,8.\r
1536         BNE     TT11\r
1537         LDX     I,0\r
1538 TT15:   LDA     AX,4050\r
1539         BMI     TT16\r
1540         LDY     I,6\r
1541 TT16:   INX\r
1542         CPX     I,8.\r
1543         BNE     TT15\r
1544         LDA     A,4100\r
1545         BMI     S,+4\r
1546         LDY     I,6\r
1547         ROL\r
1548         BMI     S,+4\r
1549         LDY     I,6\r
1550         STY     Z,CRASH\r
1551 TT20:   LDA     A,AMODE\r
1552         ROL\r
1553         ROL\r
1554         BPL     TT20\r
1555         STA     A,TREST         ;PULSE WATCHDOG\r
1556         LDA     I,0\r
1557         STA     Z,CRASH\r
1558         LDA     A,ST\r
1559         BPL     TT10\r
1560         JMP     A,PWRON\r
1561 CKSUM:  .BYTE   172,200,134,60,172\r
1562 KTAB:   .BYTE   72,73,70,71\r
1563 TAB1:   .BYTE   50,50,52,52,52,40\r
1564         .BYTE   40,40,156,156,156,50\r
1565 TAB2:   .BYTE   42,42,54,54,54,56\r
1566         .BYTE   56,56,44,44,44,42\r
1567 TAB3:   .BYTE   50,50,46,46,46,40\r
1568         .BYTE   40,40,142,142,142,50\r
1569 TAB4:   .BYTE   146,146,54,54,54,152\r
1570         .BYTE   152,152,44,44,44,146\r
1571 NMI:    PHA\r
1572         TXA\r
1573         PHA\r
1574         CLD\r
1575         LDA     Z,RTEST         ;CHECK RAM CELLS\r
1576         CMP     I,222\r
1577         BNE     NM2\r
1578         LDA     Z,RTEST+1\r
1579         CMP     I,77\r
1580         BNE     NM2\r
1581         TSX\r
1582         LDA     AX,405          ;GET PCH\r
1583         CMP     I,60            ;VALID RANGE?\r
1584         BCC     NM3\r
1585         CMP     I,100\r
1586         BCS     NM3\r
1587 NM1:    PLA\r
1588         TAX\r
1589         PLA\r
1590         RTI\r
1591 NM2:    LDA     I,222\r
1592         STA     Z,RTEST\r
1593         LDA     I,77\r
1594         STA     Z,RTEST+1\r
1595 NM3:    JMP     A,PWRON\r
1596 MESG:   .WORD   MES0\r
1597         .WORD   MES1\r
1598         .WORD   MES2\r
1599         .WORD   MES3\r
1600         .WORD   MES4\r
1601         .WORD   MES5\r
1602         .WORD   MES6\r
1603         .WORD   MES7\r
1604         .WORD   MES8\r
1605 POSM:   .WORD   PLAYFIELD+54\r
1606         .WORD   PLAYFIELD+14\r
1607         .WORD   PLAYFIELD+150\r
1608         .WORD   PLAYFIELD+150\r
1609         .WORD   PLAYFIELD+150\r
1610         .WORD   PLAYFIELD+502\r
1611         .WORD   PLAYFIELD+1045\r
1612         .WORD   PLAYFIELD+715\r
1613         .WORD   PLAYFIELD+712\r
1614 BPOS:   .WORD   SPOS1\r
1615         .WORD   SPOS2\r
1616         .WORD   SPOS3\r
1617         .WORD   SPOS4\r
1618 SWTAB:  .WORD   SW1\r
1619         .WORD   SW2\r
1620         .WORD   SW3\r
1621         .WORD   SW4\r
1622 MES0:   .BYTE   75\r
1623         .ASCII  / SCORE /\r
1624         .BYTE   277,0\r
1625 MES1:   .ASCIZ  /GAME OVER/\r
1626 MES2:   .ASCIZ  /1 PLAY PER COIN/\r
1627 MES3:   .ASCIZ  /2 PLAYS PER COIN/\r
1628 MES4:   .ASCIZ  /4 PLAYS PER COIN/\r
1629 MES5:   .ASCIZ  /YOU HAVE CREDIT FOR   PLAYERS/\r
1630 MES6:   .ASCIZ  /PUSH YOUR START BUTTON/\r
1631 MES7:   .ASCIZ  /WINNER/\r
1632 MES8:   .ASCIZ  /EACH PLAYER/\r
1633         .REPT   37772-.\r
1634         .BYTE   0\r
1635         .ENDM\r
1636         .WORD   NMI,PWRON,PWRON\r
1637         .END\r
1638 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0