First commit
[baseball.git] / A34711.1C
1         .TITLE BSINT\r
2         .RADIX 16\r
3         .ASECT\r
4         .IIF NDF,NTB,NTB=1\r
5         .GLOBL EOZP,$COINA,$LAM,$LMBIT,$CNSTT,$PSTSL\r
6         .GLOBL $CCTIM,$LMTIM,$INTCT,MAINND,PLAYIT\r
7         .GLOBL EOPROG\r
8         .INCLUDE BSCOMN.XX\r
9         .PAGE\r
10         .SBTTL INTERRUPT\r
11         .CSECT\r
12 ;ENTERED 4 TIMES/FRAME, AT LINES 64, 128, 192, & 240.\r
13 IRQ:    PHA                     ;SAVE REGS\r
14         TXA\r
15         PHA\r
16         TYA\r
17         PHA\r
18         CLD                     ;SET HEX\r
19         .SBTTL  SOFTWARE WATCHDOG\r
20 ;BELOW CODE CHECKS S.P., P.C. & PSW FOOR VALIDITY\r
21         TSX                     ;X <- SP\r
22         BPL 86$                 ;STACK TOO DEEP, ABORT\r
23         LDA AX,104              ;GET OLD PSW\r
24         AND I,10                ;BREAK?\r
25         BNE 86$                 ;YES, ABORT\r
26         LDA AX,106              ;PCH\r
27         CMP I,PROG/100          ;CHECK LOW LIMIT\r
28         BCC 86$\r
29         LDA AX,105\r
30         CMP I,0\r
31         .=.-1\r
32         .WORD MAINND\r
33         .=.-1\r
34         LDA AX,106\r
35         SBC I,0\r
36         .=.-1\r
37         .ENABL M68\r
38         .WORD MAINND\r
39         .DSABL M68\r
40         .=.-1\r
41 \r
42 ;ABOVE 12 LINES DOES A D.P. COMPARE OF PC:FTAB\r
43 \r
44         BCC 5$                  ;IF BORROW, P.C. IS IN BOUNDS\r
45 86$:    JMP RESET               ;ABORT ENTRY, DO POWER-ON\r
46 \r
47 5$:     LDA SYNC                ;CHECK SYNC WORD\r
48         CMP I,6\r
49         BCS 86$\r
50 \r
51 ;IF SYNC >= 6, PROCESSOR IS IN "PHANTOM-LOOP"\r
52 \r
53         STA A,WTCHDG            ;ALL O.K., HIT DOG\r
54         LDA A,INPORT            ;INPORT HAS TRACK-BALL COUNTERS FOR 0\r
55         STA TBCTR\r
56         LDA A,INPORT+2          ;COUNTERS FOR 2\r
57         STA TBCTR+2\r
58         LDA INTCNT              ;VBLANK?\r
59         AND I,3\r
60         CMP I,3\r
61         LDA TOUT1\r
62         BCC 1$\r
63         EOR FLASH\r
64         AND I,7F\r
65         EOR FLASH\r
66         STA TOUT1\r
67 1$:     TAX                     ;SAVE IT\r
68         ORA I,20                ;HAVE IT READY WITH CTRLD=1\r
69         STX A,OUT1              ;STORE WITH CTRLD=0 TO READ SWITCHES\r
70         LDX A,INPORT            ;READ SWITCHES\r
71         LDY A,INPORT+2          ;BOTH SETS\r
72         STA A,OUT1              ;STORE WITH CTRLD=1 TO FREE-UP COUNTERS\r
73         STX INPUT               ;SAVE INPUTS IN RAM\r
74         STY INPUT+2\r
75         LDA A,INPORT            ;INSURANCE READ OF COUNTERS\r
76         LDY A,INPORT+2\r
77         STY NEWTB+2\r
78         STA NEWTB\r
79         TXA                     ;LSB'S OF "INPUT" HAVE TBALL\r
80         STA TBDIR               ;DIRECTION BITS\r
81         INC INTCNT              ;COUNT INTERRUPTS\r
82         BIT VBLANK              ;VERT. BLANKING?\r
83 \r
84 ;138 CYCLES (MIN) FROM FALL OF IRQ\r
85 \r
86         BVC 2$\r
87         LDA INTCNT\r
88         AND I,0FC               ;PHASE LOCK FOR LED'S\r
89         STA INTCNT\r
90         DEC FIELD               ;COUNT FIELDS\r
91         BPL 30$\r
92         LDA I,1                 ;2 FIELD'S PER FRAME\r
93         STA FIELD               ;(1,0)\r
94         INC SYNC                ;SYNC UP MAINLINE\r
95         JSR MOTUP               ;UPDATE MOTION OBJECT POSITIONS\r
96 \r
97 ;+13 MINIMUM\r
98 \r
99 30$:    JSR DEBNCE              ;KILL TIME WITH SWITCH DEBOUNCE\r
100         LSR MOTDON              ;WAS MOTUP DONE?\r
101         BCS 2$                  ;YES, WE'RE PAST LINE 255\r
102 ;IF MOTUP WAS NOT EXECUTED, WE ARE POSSIBLY ONLY 280 CYCLES INTO V-BLANKING\r
103 ;(ABOUT 1/2 THROUGH LINE 245) IF WE WERE TO "STA A,INTACK" NOW, BEFORE\r
104 ;LINE 256, WE WOULD BE INTERRUPTED AGAIN BY THE FALLING EDGE OF 32V @ LINE\r
105 ;256.  WE NEED TO BURN 16*48-280 CYCLES (488) TO BE SAFE. SINCE A DEX, BNE\r
106 ;LOOP BURNS 5 CYCLES PER ITERATION A COUNT OF 98 WILL SUFFICE.\r
107 ;5*98+2 (LDX I,98..) = 492\r
108         LDX I,107.\r
109 12$:    DEX\r
110         BNE 12$\r
111 ;WASTE TIME\r
112 2$:     STA A,INTACK            ;ACKNOWLEDGE INTERRUPTS\r
113 \r
114         .SBTTL  MULTIPLEX LED CATHODES\r
115 MUXLED: LDA INTCNT              ;GET INTERUPT CTR\r
116         AND I,3                 ;LSB'S GIVE QUARTER OF SCRN\r
117         TAX                     ;PICK UP BIT TO LIGHT\r
118         LDA ZX,LEDWD-1          ;ANODE "A" NOT USED, SO RAM IS DON'T-CARE\r
119         STA A,OUT3              ;STORE OUT TO CATHODES\r
120 \r
121         TXA                     ;WAS THIS V-BLANK?\r
122         BEQ SOUND               ;YES, DEBOUNCE ALREADY DONE\r
123         CMP I,2                 ;MID-FRAME INTERRUPT?\r
124         BNE 25$                 ;NO, SKIP\r
125 25$:    JSR DEBNCE              ;IF NOT ALREADY\r
126 \r
127         .SBTTL  HANDLE SOUNDS\r
128 SOUND:  LDA WHISTL      ;WHISTLE\r
129         BEQ 1$\r
130         LDA INTCNT      ;WARBLE\r
131         LSR\r
132         LSR\r
133         AND I,5\r
134         BNE 1$\r
135         DEC WHISTL\r
136 1$:     ORA BEEP                ;STEADY TONE\r
137         ORA I,4\r
138 12$:    LSR THUD        ;HIT SOUND\r
139         BCC 2$\r
140 15$:    ORA I,2\r
141 2$:     BIT CRACK\r
142         BMI 40$         ;DELAY\r
143         BVC 20$         ;NO THING\r
144         LDA I,0D        ;START\r
145         STA CROWD\r
146         LDA I,0         ;INDICATE DELAY\r
147         STA CRACK\r
148         LDA I,7\r
149         BNE 20$\r
150 40$:    LDA CROWD\r
151         SEC\r
152         SBC I,4         ;DELAY SOUND\r
153         STA CROWD\r
154         LSR\r
155         BNE 40$         ;NOT DONE YET\r
156         STA CRACK       ;DONE\r
157 20$:    ORA Z,FLASH\r
158         BIT TOUT1\r
159         BPL 21$\r
160         ORA I,80\r
161         BNE 22$\r
162 21$:    AND I,7F\r
163 22$:    STA TOUT1\r
164         LDA I,98                ;RESET LATCH\r
165         AND Z,FLASH\r
166         STA Z,FLASH\r
167         LDA I,20        ;A) SLAM BIT   B) TURN ON SOUNDS\r
168         BIT ATRACT      ;IN ATTRACT?\r
169         BMI 3$          ;NO\r
170         AND INPUT       ;SLAM BIT ON?\r
171         BNE 25$         ;NO\r
172         LDA I,0FF       ;YES, INITIALIZE WHISTLE\r
173         STA WHISTL\r
174 25$:    LDA WHISTL      ;ABUSE?\r
175         BEQ 3$          ;NO\r
176         LDA I,20        ;YES TURN ON SOUNDS\r
177 3$:     ORA CROWD       ;INCLUDE CROWD SOUNDS\r
178         LDY $CCTIM      ;COIN-COUNTER\r
179         BPL 4$\r
180         ORA I,10        ;TURN IT ON\r
181 4$:     STA A,OUT2\r
182 \r
183         .SBTTL  HANDLE QUADRATURE TRACKBALL\r
184 TBALL:  LDX I,3                 ;FOR BOTH PLAYERS\r
185 10$:    LDA ZX,TBCTR-1          ;GET TRACK-BALL COUNTER\r
186         SEC\r
187         SBC ZX,OTB-1            ;GET CHANGE FROM OLD\r
188         AND I,0F                ;ISOLATE\r
189         PHA\r
190         LDA ZX,TBCTR-1\r
191         ORA I,0F                ;MAKE LSB'S DON'T-CARE\r
192         SEC\r
193         SBC ZX,OTB-1            ;GET CHANGE FROM OLD\r
194         LSR\r
195         LSR\r
196         LSR\r
197         LSR                     ;SHIFT DOWN\r
198         LDY ZX,NEWTB-1          ;GET NEW VALUE\r
199         STY ZX,OTB-1            ;SAVE AS OLD FOR NEXT TIME\r
200 20$:    LSR TBDIR               ;GET DIRECTION\r
201         ORA I,0                 ;TEST MAG\r
202         BEQ 30$                 ;KEEP ZERO ZERO\r
203         BCC 30$                 ;BRANCH IF FORWARD\r
204         EOR I,0F0               ;ELSE FLIP "SIGN"\r
205 30$:    CLC\r
206         ADC ZX,TBHD\r
207         BVC 35$\r
208         EOR I,80                ;COMPLEMENT BAD SIGN\r
209         ASL                     ;SAVE IT\r
210         LDA I,7F                ;SET MAX PLUS\r
211         ADC I,0                 ;MAKE MINUS IF NEED BE\r
212 35$:    STA ZX,TBHD\r
213         TXA                     ;WHAT DID WE JUST DO\r
214         LSR                     ;GET EVEN/ODD INTO CARRY\r
215         DEX                     ;BUMP TO NEXT\r
216         BCC 40$                 ;IF JUST DID EVEN, CHECK DONE\r
217         PLA                     ;ELSE GET H-VALUE\r
218         BCS 20$                 ;DO BOTTOM-LOOP (ALWAYS)\r
219         \r
220 40$:    BPL 10$                 ;DO OTHER PLAYER\r
221 \r
222         JSR MOOLAH              ;COIN ROUTINE\r
223 \r
224         PLA\r
225         TAY\r
226         PLA\r
227         TAX\r
228         PLA\r
229 M40:    RTI             ;RTI=40 HEX, USED TO TEST TEST SW.\r
230 \r
231         .SBTTL  DE-BOUNCE SWITCHES\r
232 ;NOTE-SWITCHES ARE LOW-TRUE (107 CYCLES, INCL JSR)\r
233 DEBNCE: LDX I,2\r
234 1$:     LDY ZX,INPUT            ;READ SWITCHES\r
235         LDA ZX,DBSW             ;SAVE OLD SWITCHES\r
236         STY ZX,DBSW             ;REPLACE WITH NEW\r
237         TAY                     ;COPY OLD\r
238         AND ZX,DBSW             ;MAKE ONES WHERE BOTH OFF\r
239         ORA ZX,SWSTAT\r
240         STA ZX,SWSTAT           ;TURN OFF IN STATUS\r
241         TYA                     ;GET BACK OLD\r
242         ORA ZX,DBSW             ;MAKE ZEROES WHERE BOTH ON\r
243         AND ZX,SWSTAT           ;TURN ON IN STATUS\r
244         STA ZX,SWSTAT           ;SAVE NEW STATUS\r
245         DEX\r
246         DEX\r
247         BPL 1$\r
248         RTS\r
249 \r
250 \r
251         .SBTTL  MOVE MOTION OBJECT PARAMS\r
252 ;-13.-18 SCAN LINES\r
253 MOTUP:  LDA SLOCK\r
254         BNE 4$\r
255         INC MOTDON\r
256         LDA BSTMP               ;UPDATE BAT STAMP\r
257         STA A,MOBJ\r
258         LDX I,30.               ;OBJ. 0-15, 2 BYTES @\r
259 1$:     LDA AX,HPOSH\r
260         LDY OFFENS\r
261         BEQ 2$\r
262         LDA I,0F8\r
263         SEC\r
264         SBC AX,HPOSH\r
265 2$:     STA AX,HHPOS            ;OUT TO HARDWARE\r
266         LDA AX,VPOS             ;THIS ONE'S PRE-ADJUSTED\r
267         LDY OFFENS\r
268         BEQ 3$\r
269         LDA I,08\r
270         SEC\r
271         SBC AX,VPOS\r
272 3$:     STA AX,HVPOS            ;CORRECT OR BLANKED, OUT TO HDW.\r
273         DEX\r
274         DEX\r
275         BPL 1$                  ;WHILE OBJ # >= 0\r
276 4$:     RTS\r
277 \r
278 \f       .SBTTL POWER-ON-RESET\r
279 RESET:  LDX I,0DF\r
280         TXS                     ;SET UP STACK\r
281 ;NOW FALL THROUGH TO CLEAR RAM, FOR BOTH GAME AND TEST\r
282         .SBTTL SELF-TEST\r
283 STEST:  CLD\r
284         LDX I,0\r
285         TXA\r
286 1$:     STA ZX,0\r
287         STA AX,ALPHL\r
288         STA AX,ALPHR\r
289         DEX\r
290         BNE 1$\r
291         STA A,OUT1              ;HIT KICKER, ENABLE SWITCH READ\r
292         BIT A,INPORT+2          ;CHECK TEST SW.\r
293         BVC TREPT               ;BRANCH IF ON\r
294         LDA I,0                 ;INIT TPC\r
295         .=.-1\r
296         .WORD PLAYIT-1\r
297         .=.-1\r
298         STA Z,TPC\r
299         LDA I,0\r
300         .=.-1\r
301         .ENABL M68\r
302         .WORD PLAYIT-1\r
303         .DSABL M68\r
304         .=.-1\r
305         STA Z,TPC+1\r
306         JMP START               ;ELSE GO TO GAME MODE\r
307 \r
308         .SBTTL  ZERO-PAGE TEST\r
309 TREPT:  LDX I,11                ;BEGINNING PATTERN\r
310         TXS                     ;S HOLDS PATTERN\r
311         TXA\r
312         STA Z,0                 ;TEST CELL START @ 0\r
313         LDY I,0\r
314 2$:     LDX I,1                 ;ONE LESS COUNT BEFORE IT WRAPS\r
315 3$:     INY                     ;SCAN FORWARD\r
316         LDA AY,0                ;ZERO?\r
317         BNE 5$                  ;NO, ERROR\r
318         INX                     ;HOW FAR HAVE WE SCANNED\r
319         BNE 3$                  ;KEEP MOVING\r
320         TSX\r
321         TXA                     ;ACC <- PATTERN\r
322         STA A,WTCHDG\r
323         INY                     ;POINT TO TEST CELL\r
324         CMP AY,0                ;DOES IT HAVE PATTERN\r
325         BNE 5$                  ;IF NOT, IS ERROR\r
326         LDX I,0                 ;ELSE CLEAR CELL\r
327         STX ZY,0\r
328         INY                     ;POINT TO NEXT TEST CELL\r
329         BNE 4$                  ;IF PASS NOT COMPLETE\r
330         ASL                     ;ELSE SHIFT PATTERN\r
331         LDX I,19.               ;FOR MSG. IF DONE\r
332         BCS 6$                  ;BRANCH IF DONE\r
333 4$:     TAX                     ;PATTERN -> ACC\r
334         TXS                     ;    "   -> STORAGE\r
335         STX ZY,0                ;    "   -> NEW TEST CELL\r
336         BNE 2$                  ;***ALWAYS, REPEAT SCAN\r
337 \r
338 5$:     LDX I,16.\r
339 6$:     LDY I,16.\r
340         .SBTTL  REPORT MEMORY STATUS\r
341 MEMREP: LDA AX,ERMSG\r
342         STA AY,ALPHL+28\r
343         DEX\r
344         DEY\r
345         BMI PATSCN\r
346         CPY I,9\r
347         BNE MEMREP\r
348 \r
349         .SBTTL  ROM TEST\r
350 ROMTST: LDY I,0                 ;PROG STARTS ON EVEN PG.\r
351         STY ADL                 ;LOW ADDRESS PTR\r
352         TYA                     ;CLRA\r
353         PHA                     ;CLR (SP)-\r
354         LDA I,PROG&0FF00/100    ;HIGH BYTE OF PROG ADDR\r
355         STA ADH                 ;HIGH ADDRESS PTR\r
356         LDX I,31.               ;32 PAGES OF ROM\r
357         TXA                     ;SEED FOR L.R.C.\r
358                                 ;GET SOMETHING IN EACH NYBBLE(34,38,3C)\r
359 10$:    LDY I,0\r
360         STX A,WTCHDG            ;MUZZLE DOG\r
361 1$:     EOR NY,ADL              ;LONGITUDINAL PARITY\r
362         INY\r
363         BNE 1$                  ;LOOP FOR 1 PAGE\r
364         TAY                     ;SAVE LRC\r
365         TXA\r
366         AND I,3                 ;2 LSB=PAGE IN ROM\r
367         CMP I,1                 ;CLEAR CARRY IF END OF ROM\r
368         TYA                     ;PUT LRC BACK\r
369         BCS 3$                  ;SKIP IF IN ROM\r
370         BEQ 2$                  ;SKIP IF OK\r
371         PHA                     ;ELSE SNAP FOR ANALYZER\r
372 2$:     TXA                     ;RE-SEED FOR NEW ROM\r
373 3$:     INC ADH                 ;BUMP PTR\r
374         DEX                     ;COUNT PAGES\r
375         BPL 10$\r
376         LDX I,9                 ;DEFAULT TO "ROM OK"\r
377         PLA                     ;ANY PUSHES?\r
378         BEQ 4$                  ;NO, OK\r
379         LDX I,6                 ;ELSE POINT TO "BAD ROM"\r
380 4$:     LDY I,6                 ;6 CHAR MSG\r
381         BNE MEMREP              ;(ALWAYS)\r
382 ;53 BYTES DOWN THE TUBES!!!\r
383         .SBTTL  PATTERN SCREEN\r
384 PATSCN: LDX I,0\r
385 1$:     TXA\r
386         STA AX,ALPHR\r
387         STA AX,ALPHL+40\r
388         STA AX,SCRFLD+100\r
389         STA AX,SCRFLD+200\r
390         STA AX,SCRFLD+300\r
391         INX\r
392         BNE 1$\r
393         STX A,SFHPOS\r
394         LDX I,30.\r
395         LDA I,0A\r
396 2$:     STA AX,HPICT\r
397         EOR I,0C0\r
398         DEX\r
399         DEX\r
400         BPL 2$\r
401 \r
402         .SBTTL  SWITCH TEST\r
403 SWTEST: LDA I,4                 ;KEEP KICKER HIGH TO ENABLE CROWD\r
404         STA A,OUT1              ;SET CTRLD=0 TO READ SW.\r
405         LDX I,0                 ;CLR X\r
406         LDA A,INPORT            ;GET FIRST SW. PORT\r
407         STA TBDIR               ;SAVE TRACK-BALL DIR.\r
408         STA INPUT               ;SAVE INPUTS\r
409         ORA I,4F                ;SWITCHES IN TOP,MAKE LSB & VBLANK DON'T CARES\r
410 1$:     BMI 2$\r
411         INX                     ;COUNT 0'S\r
412 2$:     ASL                     ;SHIFT TO NEXT SW\r
413         BNE 1$                  ;IF THERE IS ONE\r
414         LDA A,INPORT+2          ;OTHER SWITCHES\r
415         STA INPUT+2\r
416         BIT A,M40               ;TEST SW?\r
417         BEQ 25$                 ;STILL ON, CONTINUE\r
418         JMP RESET               ;ELSE RESET TO GAME\r
419 25$:    ORA I,0F                ;REPEAT ABOVE\r
420 3$:     BMI 4$\r
421         INX\r
422 4$:     ASL\r
423         BNE 3$\r
424 ;AT THIS POINT, X CONTAINS THE # OF SWITCHES CLOSED\r
425         TXA                     ;SAVE X\r
426         CLC                     ;FLAG "NO CHANGE"\r
427 5$:     DEX\r
428         BMI 6$                  ;X OUT, HOW'S Y DOING\r
429         DEY                     ;ELSE MATCH DEX WITH DEY\r
430         BPL 5$                  ;EQUAL SO FAR, LOOP\r
431         BMI 7$                  ;ELSE Y WAS LESS, BEEP\r
432 \r
433 6$:     DEY\r
434         BMI 8$                  ;X=Y, NO SOUND\r
435 7$:     SEC                     ;COME HERE TO BEEP\r
436 8$:     TAY                     ;SAVE SWITCHES FOR NEXT\r
437         LDA I,12                ;CTRLD, KICKER (SHIFTED RIGHT)\r
438         ROL                     ;LINE IT UP AND PUT IN WHISTLE\r
439         STA A,OUT1              ;SET CTRLD=1, AND WHISTLE\r
440         LDX A,INPORT\r
441         STX OTB\r
442         LDX A,INPORT+2\r
443         STX OTB+2\r
444         LDX I,0                 ;MAKE X=0 (OR AT MOST 5)\r
445 9$:     CMP NX,0                ;WASTE 6 CYCLES\r
446         INX                     ;+2 MORE\r
447         BNE 9$                  ;+ AT LEAST 3 (*256=3.7 MS.)\r
448         LSR                     ;SET C IF ANY SWITCHES CHANGED\r
449         LDA CROWD\r
450         ORA I,20                ;SET ATRACT BAR\r
451         STA A,OUT2              ;MAKE SURE SOUNDS ON\r
452         STA A,WTCHDG            ;KEEP DOG QUIET\r
453 ;IF A SWITCH CHANGED, BUMP THE MOTION OBJECT PTR FOR BELOW TEST\r
454         LDA J\r
455         BCC 10$                 ;SKIP IF NO CHANGE\r
456         ADC I,3                 ;ADDS 4, CUZ CARRY IS SET\r
457 10$:    AND I,1C                ;KEEP IT A VALID OBJECT PTR\r
458         STA J\r
459 \r
460         .SBTTL  TRACK-BALL TEST\r
461 TBTEST: LDX I,2\r
462 1$:     LDA AX,INPORT           ;SAMPLE COUNTER VALUE\r
463         SEC\r
464         ORA I,0F                ;MAKE LSB'S DON'T CARE\r
465         SBC ZX,OTB              ;TAKE OUT COUNT OF 4 MS AGO\r
466         LSR\r
467         LSR\r
468         LSR\r
469         LSR                     ;DOWN TO BOTTOM\r
470         LSR TBDIR               ;CHECK DIRECTION\r
471         ORA I,0                 ;TSTA\r
472         BEQ 2$                  ;0 STAYS 0\r
473         BCC 2$                  ;+ STAYS +\r
474         ORA I,0F0               ;ELSE PUT IN SIGN\r
475 2$:     CLC\r
476         ADC ZX,TBVD\r
477         STA ZX,TBVD\r
478         LDA AX,INPORT\r
479         SEC\r
480         SBC ZX,OTB\r
481         LSR TBDIR\r
482         AND I,0F\r
483         BEQ 3$\r
484         BCC 3$\r
485         ORA I,0F0\r
486 3$:     CLC\r
487         ADC ZX,TBHD\r
488         STA ZX,TBHD\r
489         DEX\r
490         DEX\r
491         BPL 1$                  ;LOOP FOR BALL 0\r
492 ;NOW USE TBVD,TBHD TO MOVE OBJ(J),OBJ(J+2)\r
493         LDX J\r
494         LDA TBHD\r
495         STA AX,HHPOS\r
496         LDA TBVD\r
497         STA AX,HVPOS\r
498         LDA TBHD+2\r
499         STA AX,HHPOS+2\r
500         LDA TBVD+2\r
501         STA AX,HVPOS+2\r
502         .SBTTL  SCROLL-FIELD TEST\r
503 ;SET CROWD VOLUME PROPORTIONAL TO # OF SWITCHES CLOSED\r
504         TYA                     ;GET #OF CLOSED SWITCHES(1-6)\r
505         STA K\r
506         ASL\r
507         ADC K                   ;*3=3,6,9,12,15,18\r
508         ADC I,-3                ;0-15 (0,3,6,9,12,15)\r
509         STA CROWD               ;USE TO TEST CROWD SOUND\r
510 ;NOW DISPLAY CODE IN OPTION SWITCHES\r
511         LDA INPUT+2             ;GET OPTION SW WD\r
512         AND I,0F                        ;ISOLATE COIN MODE\r
513         CLC\r
514         ADC I,70                ;MAKE A CODE\r
515         STA A,SCRFLD+28         ;DISPLAY ON SCROLLFIELD\r
516         JMP SWTEST              ;LOOP WHILE TEST SW IS ON\r
517 ERMSG:  .ASCII /BAD@R0M@0K/\r
518         .ASCII /BAD@RAM@0K/\r
519 EOPROG: .REPT 6\r
520         .BYTE 0\r
521         .ENDR\r
522         .VCTRS 7FFA,RESET,RESET,IRQ\r
523         .END\r
524 \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\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\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\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\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\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\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\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\0\0