First commit
[asteroids.git] / A35131.1E
1         .TITLE ASTTST-ASTEROID SELF TEST\r
2         .CSECT\r
3         .RADIX 16\r
4         .ENABL AMA\r
5         .LIST MEB\r
6         .NLIST BYT\r
7 ;*******************************\r
8 ;*\r
9 ;* THIS PROGRAM RESIDES IN THE UPPER 1K OF PROGRAM SPACE\r
10 ;* ITPERFORMS POWER ON RESET PROCESSING\r
11 ;* AS WELL AS SELF-TEST. SEE ASTROD.MAC FOR HARDWARE\r
12 ;* CONFIGURATION\r
13 ;*\r
14 ;*******************************\r
15         .SBTTL ****************************\r
16         .SBTTL *\r
17         .SBTTL *PROGRAMMER: ED LOGG\r
18         .SBTTL *\r
19         .SBTTL ****************************\r
20 ;\r
21 ;ENTRY POINTS\r
22 ;\r
23         .GLOBL PWRON\r
24         \r
25 ;\r
26 ;EXTERNAL ENTRY POINTS\r
27 ;\r
28         .GLOBL TEST1,BNKERR                     ;SELF TEST X-Y PATTERN\r
29         .GLOBL START,NMI\r
30         .GLOBL VGHALT,VGVCTR,VGRTSL,VGMSGA      ;UTILITY X-Y ROUTINES\r
31         .GLOBL VGJMPL,VGJSRL,VGLABS,VGADD\r
32         .GLOBL VGWAIT,VGSABS,VGHEX,VGHEXZ\r
33         .GLOBL VGDOT\r
34 ;\r
35 ;ZERO PAGE DECLARATIONS\r
36 ;\r
37         .GLOBL SYNC,UPDFLG,VGLIST,TEMP3,LOUT1,VGSIZE\r
38         .GLOBL TEMP1,TEMP2,$CMODE,TEMP4\r
39         \r
40         \r
41         .INCLUDE ASTDEC\r
42         \r
43         \r
44 \f       .SBTTL PWRON - POWER ON INITIALIZATION\r
45 ;PWRON-POWER ON INITIALIZATION\r
46 ;\r
47 ;THIS ROUTINE SETS UP POINTERS FOR THE VECTOR GENERATOR AND\r
48 ;CLEARS AND SETS 0 PAGE AS NEEDED.\r
49 ;\r
50 PWRON:  LDX I,0FE\r
51         TXS                     ;SET STACK\r
52         CLD                     ;NO DECIMAL\r
53         LDA I,0\r
54         TAX\r
55 10$:    DEX\r
56         STA AX,300              ;CLEAR PLAYER OBJECT\r
57         STA AX,200\r
58         STA AX,100\r
59         STA X,0\r
60         BNE 10$                 ;ALL OF ZERO PAGE\r
61         LDY A,STSTSW\r
62         BMI STEST               ;IF SELF TEST SWITCH ON\r
63         INX\r
64         STX A,VECRAM            ;SET UPPER JUMP IN VECTOR BUFFERS\r
65         LDA I,0E2\r
66         STA A,VECRAM+1\r
67         LDA I,0B0               ;HALT FOR FIRST TIME THRU\r
68         STA A,VECRAM+3\r
69         STA Z,UPDFLG            ;FLAG THAT WE ARE NOT GETTING HIGH SCORE INITIALS\r
70         STA Z,UPDFLG+1\r
71         LDA I,03\r
72         STA Z,LOUT1             ;TURN OFF LIGHTS AND CLEAR BANK SELECT\r
73         STA A,OUT1\r
74         AND A,OPTN1\r
75         STA Z,$CMODE            ;SET COIN MODE\r
76         LDA A,OPTN2             ;GET 1,4,5 OR 6 COIN MULTIPLIER\r
77         AND I,03\r
78         ASL\r
79         ASL\r
80         ORA Z,$CMODE\r
81         STA Z,$CMODE\r
82         LDA A,OPTN3             ;GET 1 OR 2 MULTIPLIER COIN MODE\r
83         AND I,02\r
84         ASL\r
85         ASL\r
86         ASL\r
87         ORA Z,$CMODE\r
88         STA Z,$CMODE\r
89         JMP START               ;START MAIN LINE OVER\r
90 \r
91 \r
92         .SBTTL STEST - SELF TEST PROCESSING\r
93 STEST:  STA AX,4000             ;CLEAR ALL OF MEMORY -TURN LIGHTS ON-SOUNDS OFF\r
94         STA AX,4100             ;NOTE PAGE 0,1,2 AND 3 CLEARED BY POWER ON RESET\r
95         STA AX,4200\r
96         STA AX,4300\r
97         STA AX,4400\r
98         STA AX,4500\r
99         STA AX,4600\r
100         STA AX,4700\r
101         INX\r
102         BNE STEST               ;CLEAR ALL THE ABOVE PAGES\r
103         STA A,WTDOG             ;WATCHDOG TIME\r
104         LDX I,0                 ;INDEX WITHIN ZERO PAGE\r
105 20$:    LDA ZX,0\r
106         BNE 70$                 ;NOT A ZERO - ERROR\r
107         LDA I,11\r
108 30$:    STA ZX,0                ;WRITE OUT TEST PATTERN\r
109         TAY\r
110         EOR ZX,0\r
111         BNE 70$                 ;NOT THE SAME - ERROR\r
112         TYA\r
113         ASL\r
114         BCC 30$                 ;SHIFT PATTERN\r
115         INX\r
116         BNE 20$                 ;NEXT LOCATION\r
117         STA A,WTDOG             ;WATCHDOG DON'T WORRY ABOUT US\r
118         TXA                     ;LDA I,0\r
119         STA 0\r
120         ROL                     ;LDA I,01\r
121 35$:    STA 1                   ;USE ZERO PAGE FOR REST OF MEMORY TESTS\r
122         LDY I,0\r
123 40$:    LDX I,11                ;CURRENT PATTERN\r
124         LDA NY,0\r
125         BNE 80$                 ;AN ERROR - MUST START ZERO\r
126 45$:    TXA\r
127         STA NY,0                ;WRITE TO LOCATION\r
128         EOR NY,0                ;COMPARE IT\r
129         BNE 80$                 ;AN ERROR\r
130         TXA\r
131         ASL\r
132         TAX\r
133         BCC 45$                 ;NEXT PATTERN\r
134         INY\r
135         BNE 40$                 ;NEXT LOCATION TO TEST\r
136         STA A,WTDOG             ;NO BARKING NOW - WHY SURE....\r
137         INC 1\r
138         LDX 1\r
139         CPX I,04\r
140         BCC 40$                 ;NEXT PAGE TO TEST\r
141         LDA I,40\r
142         CPX I,40\r
143         BCC 35$                 ;TEST 2K OF RAM AT 4000\r
144         CPX I,48\r
145         BCC 40$                 ;MORE OF 2K BLOCK LEFT\r
146         BCS STEST3              ;RAM IS GOOD\r
147 \r
148 70$:    LDY I,0                 ;ERROR IN FIRST 1K\r
149         BEQ STEST1\r
150 \r
151 80$:    LDY I,0\r
152         LDX 1\r
153         CPX I,04\r
154         BCC STEST1              ;IF ERROR IN FIRST 1K OF RAM\r
155         INY\r
156         CPX I,44\r
157         BCC STEST1              ;ERROR IN SECOND 1K RAM\r
158         INY                     ;ERROR MUST BE IN THIRD 1K RAM\r
159 STEST1: CMP I,10                ;SET TO 1,2 OR 3\r
160         ROL\r
161         AND I,1F\r
162         CMP I,02\r
163         ROL                     ;EACH 1 REPRESENTS A BAD 2114\r
164         AND I,03\r
165 15$:    DEY\r
166         BMI 20$                 ;IF THIS 1K BLOCK WAS BAD\r
167         ASL                     ;FLAG 2 RAM IC'S AS GOOD\r
168         ASL\r
169         BCC 15$                 ;ALWAYS\r
170 \r
171 20$:    LSR\r
172         LDX I,14\r
173         BCC 25$                 ;IF RAM IC IS GOOD\r
174         LDX I,1D\r
175 25$:    STX A,THUMP\r
176         LDX I,0\r
177         LDY I,08\r
178 31$:    BIT A,THRKHZ            ;COUNT 1 3KHZ SIGNAL\r
179         BPL 31$\r
180 32$:    BIT A,THRKHZ\r
181         BMI 32$\r
182         DEX\r
183         STA A,WTDOG             ;NOW NOT\r
184         BNE 31$                 ;COUNT FOR 256/3000 OF A SECOND\r
185         DEY\r
186         BNE 31$                 ;8*256/3000 OF A SECOND\r
187         STX A,THUMP             ;TURN OFF SOUND\r
188         LDY I,08\r
189 35$:    BIT A,THRKHZ            ;COUNT 3KHZ SIGNALS\r
190         BPL 35$\r
191 36$:    BIT A,THRKHZ\r
192         BMI 36$\r
193         DEX\r
194         STA A,WTDOG             ;NOT NOW\r
195         BNE 35$                 ;COUNT TIL 256/3000 OF A SECOND\r
196         DEY\r
197         BNE 35$                 ;COUNT TIL 8*256/3000 SECONDS\r
198         TAX                     ;SET FLAGS\r
199         BNE 20$                 ;MORE TO COME\r
200 STOP:   STA A,WTDOG             ;NO BITING NOW\r
201         LDA A,STSTSW\r
202         BMI STOP                ;WAIT UNTIL STEST SWITCH IS PUSHED\r
203 10$:    BPL 10$                 ;START ALL OVER - WITH WATCHDOG\r
204 \r
205 STEST3: LDA I,0                 ;CKSUM ALL ROMS\r
206         TAY\r
207         TAX\r
208         STA Z,TEMP1\r
209         LDA I,50\r
210 5$:     STA Z,TEMP1+1\r
211         LDA I,04\r
212         STA Z,TEMP2\r
213         LDA I,0FF               ;STARTING PATTERN\r
214 10$:    EOR NY,TEMP1\r
215         INY\r
216         BNE 10$                 ;DO ONE PAGE\r
217         INC Z,TEMP1+1\r
218         DEC Z,TEMP2\r
219         BNE 10$                 ;DO 4 PAGES\r
220         STA ZX,TEMP3            ;STORE 8 CKSUMS STARTING AT TEMP3\r
221         INX\r
222         STA A,WTDOG             ;WHAT HAVE YOU BEEN TYPING ON THESE, LINDA?\r
223         LDA Z,TEMP1+1\r
224         CMP I,58\r
225         BCC 5$                  ;CKSUM 5000 TO 5800\r
226         BNE 20$                 ;THEN SKIP TO 6800\r
227         LDA I,68\r
228 20$:    CMP I,80\r
229         BCC 5$                  ;CKSUM 6800 TO 8000\r
230         STA A,300               ;200=88 AND 300=80\r
231         LDX I,04                ;200=88 FROM RAM TEST\r
232         STX A,OUT1              ;SWITCH PAGE 2 AND 3\r
233         STX Z,TEMP4             ;INDEX FOR DIAGNOSTICS BELOW\r
234         LDX I,0\r
235         CMP A,200\r
236         BEQ 25$                 ;BANK SELECT APPEARS OK\r
237         INX\r
238 25$:    LDA A,300\r
239         CMP I,88\r
240         BEQ 30$\r
241         INX\r
242 30$:    STX Z,TEMP2+1           ;SAVE BANK SELECT ERROR FLAG\r
243         LDA I,10\r
244         STA Z,VGSIZE            ;SET CHARACTER SIZE\r
245 STEST5: LDX I,0A8               ;THIS IS SET FOR 16MS BEST CASE\r
246 1$:     LDA A,HALT              ;IT TAKES 20 MX FOR WORST COS\r
247         BPL 9$                  ;IF VECTOR GENERATOR HALTED OK\r
248 5$:     LDA A,THRKHZ            ;WAIT THRU ONE 3KHZ CYCLE\r
249         BPL 5$\r
250 7$:     LDA A,THRKHZ\r
251         BMI 7$\r
252         DEX                     ;COUNTDOWN TO VECTORS REPEAT EVERY 16MS\r
253         BMI 5$                  ;WAIT UNTIL 16 MX ARE UP\r
254         STA A,WTDOG\r
255         BNE 1$                  ;AFTER 60 MS VECTOR GENERATOR MUST BE STUCK\r
256 8$:     BEQ 8$                  ;WAIT FOR WATCHDOG\r
257 \r
258 9$:     LDA I,VECRAM&0FF\r
259         STA Z,VGLIST\r
260         LDA I,VECRAM/100\r
261         STA Z,VGLIST+1\r
262         LDA DIAGSW\r
263         BPL STEST6              ;NOT IN DIAGS\r
264         LDX Z,TEMP4             ;0 TO 3\r
265         LDA A,HYPSW             ;DECREMENT INDEX IF HYPERSPACE RUSHED\r
266         BPL 20$                 ;IF HYPERSPACE SWITCH OFF\r
267         EOR TEMP1+1\r
268         BPL 20$                 ;IF IT WAS ON BEFORE TOO\r
269         DEX\r
270         BEQ 20$                 ;ALREADY AT 0\r
271         STX Z,TEMP4             ;NEW INDEX\r
272 20$:    LDY AX,80$-1            ;LENGTH OF COPY\r
273         LDA I,0B0\r
274         STA NY,VGLIST           ;ADD HALT AT END\r
275         DEY\r
276         DEY                     ;XX BX IS INSTRUCTION FOR HALT\r
277 10$:    LDA AY,90$              ;COPY IN TEST PATTERN\r
278         STA NY,VGLIST\r
279         DEY\r
280         BPL 10$\r
281         JMP STEST7              ;CHECK SELF TEST SWITCH\r
282 \r
283 80$:    .BYTE 51.,29.,23.,13.\r
284 \r
285 90$:    .BYTE 80,0A0,0,0        ;LABS 0,128.,0\r
286         .BYTE 0,70,0,0          ;WAIT 7\r
287         .BYTE 0FF,92,0FF,73     ;VCTR 767.,1023.,7\r
288         .BYTE 0D0,0A1,30,2      ;LABS 560.,464.,0       -SHORT VECTOR TEST\r
289         .BYTE 0,70,0,0          ;WAIT 7\r
290         .BYTE 7F,0FB            ;VCTR -48.,+48.,7       =SHORT VECTOR BACK TO MIDDLE\r
291         .BYTE 0D,0E0            ;JMP 91$                -JUMP TEST\r
292         .BYTE 0,0B0             ;HALT\r
293 91$:    .BYTE 7E,0FA            ;VCTR -32.,32.,7\r
294         .BYTE 11,0C0            ;JSRL 92$               -JSRL TEST - 4 LEVELS\r
295         .BYTE 78,0FE            ;VCTR 0,-32,7\r
296         .BYTE 0,0B0             ;HALT\r
297 92$:    .BYTE 13,0C0            ;JSRL 93$\r
298         .BYTE 0,0D0             ;RTSL\r
299 93$:    .BYTE 15,0C0            ;JSRL 94$\r
300         .BYTE 0,0D0             ;RTSL\r
301 94$:    .BYTE 17,0C0            ;JSRL 95$\r
302         .BYTE 0,0D0             ;RTSL\r
303 95$:    .BYTE 7A,0F8            ;VCTR 32,0,7\r
304         .BYTE 0,0D0             ;RTSL\r
305 \r
306 STEST6: LAH TEST1\r
307         LXL TEST1\r
308         JSR VGJSRL              ;JSRL TO TEST PATTERN\r
309         LDA I,420./4\r
310         LDX I,590./4\r
311         JSR VGSABS              ;POSITION BEAM\r
312         LDA I,30\r
313         JSR VGWAIT\r
314         LDX I,03                ;NO NEED TO WAIT\r
315 28$:    LDA AX,OPTN1            ;GO FROM SW1 TO SW8\r
316         AND I,01\r
317         STX Z,TEMP2\r
318         JSR VGHEX               ;DISPLAY 0 OR 1\r
319         LDX Z,TEMP2\r
320         LDA AX,OPTN1\r
321         AND I,02\r
322         LSR\r
323         JSR VGHEX               ;DISPLAY 0 OR 1\r
324         LDX Z,TEMP2\r
325         DEX\r
326         BPL 28$                 ;LOOP THRU 8 SWITCHES\r
327         LDA I,490./4\r
328         LDX I,630./4\r
329         JSR VGSABS              ;POSITION BEAM\r
330         LDA A,OPTN3             ;NO WAIT NEEDED\r
331         AND I,02\r
332         LSR                     ;CLEAR CARRY\r
333         ADC I,01                ;1 OR 2\r
334         JSR VGHEX               ;PUT UP CHARACTER\r
335         LDA A,OPTN2\r
336         AND I,03\r
337         TAX\r
338         LDA AX,STEST8\r
339         JSR VGHEX               ;PUT UP DOLLAR MECH VALUE\r
340         LDA Z,TEMP2+1\r
341         BEQ 30$\r
342         LXL BNKERR\r
343         LAH BNKERR\r
344         JSR VGJSRL              ;JSRL BNKERR FOR BANK SELECT ERROR \r
345 30$:    LDA I,200./4\r
346         LDX I,728./4\r
347         JSR VGSABS              ;POSITION BEAM\r
348         LDA I,70\r
349         JSR VGWAIT\r
350         LDX I,0                 ;0 TO 7\r
351 32$:    LDA ZX,TEMP3\r
352         BEQ 35$                 ;NO ERROR IN THIS ROM\r
353         LDA I,0B                ;VCTR 48,0,0 -SPACING BETWEEN CHARACTERS\r
354         LDY I,0\r
355         STA NY,VGLIST\r
356         INY\r
357         LDA I,0F0               ;REMEMBER SCALING =10\r
358         STA NY,VGLIST\r
359         JSR VGADD               ;UPDATE VGLIST\r
360         STX Z,TEMP2\r
361         TXA\r
362         JSR VGHEX               ;DISPLAY DIGIT\r
363         LDX Z,TEMP2\r
364 35$:    INX\r
365         CPX I,08\r
366         BCC 32$                 ;ONLY PROM'S 0 THRU 7 (8 1K BLOCKS)\r
367         LDA I,200./4\r
368         LDX I,678./4\r
369         JSR VGSABS              ;POSITION LINE\r
370         LDA I,70\r
371         JSR VGWAIT\r
372         LDX I,0\r
373 40$:    LDA ZX,TEMP3\r
374         BEQ 45$                 ;NO ERROR IN THIS ROM\r
375         LDA I,03                ;VCTR 24,0,0 -SPACING BETWEEN NUMBERS\r
376         LDY I,0\r
377         STA NY,VGLIST\r
378         INY\r
379         LDA I,0F8\r
380         STA NY,VGLIST\r
381         JSR VGADD\r
382         STX Z,TEMP2\r
383         LDA ZX,TEMP3\r
384         PHA\r
385         LSR\r
386         LSR\r
387         LSR\r
388         LSR\r
389         JSR VGHEX               ;UPPER DIGIT OF CKSUM\r
390         PLA\r
391         JSR VGHEX               ;LOWER DIGIT OF CKSUM\r
392         LDX Z,TEMP2\r
393 45$:    INX\r
394         CPX I,08\r
395         BCC 40$                 ;LOOP THRU 8 1K BLOCKS\r
396         LDA I,1023./8\r
397         TAX\r
398         JSR VGSABS              ;CENTER BEAM\r
399         JSR VGHALT              ;STOP BEAM\r
400 STEST7: STA A,GOADD             ;START PICTURE\r
401         LDA I,0                 ;COLLECT EACH SWITCH AS A BIT\r
402         LDX I,04\r
403 5$:     ROL AX,HYPSW            ;ASSUMES ALL SWITCHES ARE\r
404         ROR                     ;DECODED FOR READ ONLY AND\r
405         DEX                     ;THAT A WRITE WILL NOT\r
406         BPL 5$                  ;EFFECT ANYTHING\r
407         TAY\r
408         LDX I,07\r
409 10$:    ROL AX,$COINA           ;THIS ASSUMES THAT THE 8\r
410         ROL                     ;SWITCH ARE CONSECUTIVE\r
411         DEX\r
412         BPL 10$                 ;8 SWITCHES TO READ\r
413         TAX\r
414         EOR Z,TEMP1\r
415         BNE 20$                 ;A SWITCH HAS CHANGED\r
416         TYA\r
417         EOR Z,TEMP1+1\r
418         BEQ 25$                 ;NO CHANGE IN ANY SWITCH\r
419 20$:    LDA I,80                ;TURN ON SOUND\r
420 25$:    STA A,TONE\r
421         STX Z,TEMP1             ;SAVE SWITCH READINGS\r
422         STY Z,TEMP1+1\r
423         LDA A,STSTSW\r
424 90$:    BPL 90$                 ;START ALL OVER AGAIN - WATCHDOG WILL RESET EVERYTHING\r
425         JMP STEST5              ;CONTINUE THIS PHASE OF SELF-TEST\r
426 \r
427         \r
428 STEST8: .BYTE 1,4,5,6           ;DOLLAR MECH VALUES\r
429 CKSUM7: .BYTE 0B1       ;CHECKSUM FOR 7C00-7FFF\r
430 \r
431         .REPT 37\r
432         .BYTE 0                 ;FILL RESET OF ROM\r
433         .ENDR\r
434 \r
435         .WORD NMI\r
436         .WORD PWRON\r
437         .WORD PWRON\r
438         .END\r
439 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0