First Commit
[subs.git] / A34183.1B
1         .TITLE SUBSNR-SONAR SCREEN FOR SUBS\r
2         .SBTTL *************************\r
3         .SBTTL *\r
4         .SBTTL *PROGRAMMER: JOHN RAY\r
5         .SBTTL *\r
6         .SBTTL *CHECKER*\r
7         .SBTTL *\r
8         .SBTTL *************************\r
9 ;\r
10 ;DATE INITIATED: 6/1/78\r
11 ;PROJECT CHARGE #: 5J121\r
12 ;DISK #: 5 PURPLE\r
13 ;HARDWARE REQUIREMENTS:\r
14 ;\r
15 ;\r
16 ;\r
17 ;\r
18 ;MEMORY REQUIREMENTS:\r
19 ;\r
20 ;\r
21 ;\r
22 ;\r
23 ;INTERRUPT REQUIREMENTS:\r
24 ;\r
25 ;\r
26 ;\r
27 ;\r
28 ;ASSEMBY COMMAND STRING:\r
29 ;\r
30 ;\r
31 ;\r
32 ;\r
33 ;LINK COMMAND STRING:\r
34 ;\r
35 ;\r
36 ;\r
37 ;\r
38 ;PROGRAM DESCRIPTION:\r
39 ; THIS PROGRAM HANDLING THE "SONAR"\r
40 ; EFFECT ON SUBS.\r
41 ;\r
42 ;\r
43         .ASECT\r
44         .RADIX 16\r
45 ;\r
46 ;\r
47         .SBTTL EXTERNAL REFERENCES\r
48 ;\r
49         .GLOBL VBLANK,FRAME,CRSRN,QUAD,BLPNTR,BLPCNT,BLPNUM\r
50         .GLOBL TEMP1,TEMP2,SONAR,HPOS,VPOS,SNRON,SNROFF,SNRCNTR\r
51         .GLOBL OPTSW4,GSTAT,CNTDWN\r
52 ;\r
53 ;\r
54 ;\r
55 ;\r
56         .SBTTL EQUATES\r
57 ;\r
58 ;\r
59 SCNLOC  =0B00                   ;STARTING ADDRESS OF SONAR SCREEN\r
60         .=2800\r
61 ;\r
62 ;\r
63         .SBTTL MAIN LOOP\r
64 ;\r
65 ; DESCRIPTION:\r
66 ;       A) ODD FRAME-CALCULATE AND OUTPUT\r
67 ;          ONLY THE BLIP\r
68 ;       B) EVEN FRAME-OUTPUT THE SONAR SCREEN\r
69 ;          WITH THE CURSOR. THE CURSOR MOVES\r
70 ;          EVERY NTH FRAME. THERE ARE 15\r
71 ;          CURSOR ROTATIONS PER QUADRANT\r
72 ;\r
73 ;\r
74 SONAR:  JSR BLNKSCRN                    ;PUT OUT BLANK SONAR SCREEN\r
75         LDA Z,FRAME\r
76         ROR\r
77         BCC SCREEN                      ;EVEN FRAME-OUTPUT SCREEN\r
78         JMP BLIP                        ;ODD FRAME-OUTPUT BLIP\r
79         .REPT 0\r
80 ON THE EVEN FRAME, THE SONAR SCREEN\r
81 AND THE CURSOR ARE OUTPUTED. THE\r
82 BLANK SCREEN IS FIRST PUT UP, THEN THE\r
83 QUADRAND WHERE THE CURSOR CURRENTLY\r
84 RESIDES IT RE-WRITTEN. THE CURSOR\r
85 MOVES 15 TIMES IN EACH EQUADRANT.\r
86 THE NUMBERING SYSTEM IS SUCH THAT\r
87 ONLY A TABLE OF STAMP VALUES FOR\r
88 QUADRANT 0 IS STORED. VALUES FOR\r
89 OTHER QUADRANTS ARE OBTAINED BY\r
90 ADDING 25(HEX) FOR EACH SUCCEEDING\r
91 QUADRANT TO THE TABLE FOR QUADRANT 0\r
92 (CRSRPIC).\r
93         \r
94 THE LSB OF THE ADDRESS TO STORE\r
95 THE DATA IS ALSO CONTAINED IN A \r
96 TABLE (CRSRA).\r
97         .ENDR\r
98 SCREEN:\r
99         LDA I,3E                        ;PUT ISLANDS ON SONAR\r
100         STA A,SCNLOC+20+1\r
101         STA A,SCNLOC+20+1D\r
102         LDA I,3F\r
103         STA A,SCNLOC+40+2\r
104         STA A,SCNLOC+40+1E\r
105         LDX Z,CRSRN                     ;UPDATE CURSOR\r
106         INX\r
107         STX Z,CRSRN                     ;AFTER 15 CURSORS, UPDATE\r
108         CPX I,0F                        ;TO NEW QUADRANT\r
109         BNE CONT\r
110         LDX I,00\r
111         STX Z,CRSRN                     ;RESET CURSOR TO 00\r
112         INC Z,QUAD\r
113         LDA Z,QUAD\r
114         CMP I,04                        ;ONLY 4 QUADRANTS\r
115         BNE CONT\r
116         LDA I,00                        ;RESET QUAD TO 00\r
117         STA Z,QUAD\r
118 CONT:   JSR OUTPUT\r
119         RTS\r
120         .SBTTL SONAR SCREEN OUTPUT\r
121 ;DESCRIPTION:\r
122 ;       THIS SUBROUTINES TAKES THE CURSOR\r
123 ;       NUMBER (CRSRN) AND OUTPUTS THE\r
124 ;       APPROPRIATE STAMPS TO THE CORRECT\r
125 ;       QUADRANT (QUAD)\r
126 ;\r
127 ;\r
128 ;REGISTERS:\r
129 ;\r
130 ;       ACC,X,Y\r
131 ;\r
132 ;\r\r
133 ;STACK USE:\r
134 ;\r
135 ;       NONE\r
136 ;\r
137 ;\r
138 ;BASE PAGE USED:\r
139 ;\r
140 ;       TEMP1,TEMP2,QUAD,CRSRN\r
141 ;\r
142 ;\r
143 OUTPUT: LDA I,00                        ;COUNTER FOR THE FOUR STAMPS\r
144         STA Z,TEMP2                     ;IN THE QUADRANT THAT NEED\r
145                                         ;TO BE CHANGED\r
146 NEXT:   LDY Z,QUAD                      ;Y=QUADRANT NUMBER\r
147         TYA                             ;FIND THE ADDRESS WHERE\r
148         ASL                             ;THIS CURSOR STAMP WILL BE STORED\r
149         ASL                             ;[4*QUAD+TEMP3+CRSRADR]\r
150         CLC\r
151         ADC Z,TEMP2\r
152         TAX\r
153         LDA AX,CRSRADR\r
154         STA Z,TEMP1                     ;PUT THE ADDRESS IN TEMP1\r
155         LDA I,0B                        ;AND TEMP2\r
156         STA Z,TEMP1+1\r
157         LDA Z,CRSRN                     ;FIND THE DATA WHICH\r
158         ASL                             ;DETERMINES THE STAMP\r
159         ASL                             ;[CRSN*4+TEMP3+CRSRPIC]\r
160         ADC Z,TEMP2                     ;+QUAD*25\r
161         TAX\r
162         LDA AX,CRSRPIC\r
163         CMP I,00                        ;00 IS BLANK, NO ROTATIONS\r
164         BEQ 20$                         ;FOR DIFFERENT QUADS\r
165 30$:    DEY\r
166         BMI 20$\r
167         CLC\r
168         ADC I,25\r
169         BCC 30$                         ;BRA\r
170 20$:    LDY I,00\r
171         STA NY,TEMP1                    ;ACC TO 1ST SCREEN\r
172         LDY I,28.\r
173         STA NY,TEMP1                    ;ACC TO 2ND SCREEN\r
174         INC Z,TEMP2                     ;REPEAT FOR NEXT CELL\r
175         LDA Z,TEMP2\r
176         CMP I,04\r
177         BNE NEXT\r
178         RTS                             ;DONE AFTER 4 CELLS\r
179         .PAGE\r
180         .SBTTL BLANK SONAR SCREEN\r
181 ;DESCRIPTION:\r
182 ;\r
183 ;       THIS SUBROUTINE PUTS UP A BLANK\r
184 ;       SONAR SCREEN FOR BOTH MONITORS\r
185 ;\r
186 ;REGISTERS:\r
187 ;\r
188 ;       ACC AND X USED\r
189 ;\r
190 ;STACK USE:\r
191 ;\r
192 ;       4 LOCATIONS\r
193 ;\r
194 ;BASE PAGE USE:\r
195 ;\r
196 ;       QUAD,CRSRN\r
197 ;\r
198 ;SUBROUTINES CALLED:\r
199 ;\r
200 ;       OUTPUT\r
201 ;\r
202 ;\r
203 BLNKSCRN:LDA Z,QUAD                     ;STORE CURRENT CURSOR POSITION\r
204         PHA     \r
205         LDA Z,CRSRN\r
206         PHA\r
207         LDA I,0F                        ;CURSOR=15 (BLANK)\r
208         STA Z,CRSRN\r
209         LDX I,03\r
210         STX Z,QUAD\r
211 10$:    JSR OUTPUT                      ;PUT UP THIS QUAD\r
212         DEC Z,QUAD\r
213         BPL 10$                         ;MUST WRITE OUT ALL 4 QUADS\r
214         PLA                             ;RETRIEVE CURRENT CURSOR POSITION\r
215         STA Z,CRSRN\r
216         PLA\r
217         STA Z,QUAD\r
218         RTS\r
219         .PAGE\r
220         .SBTTL SONAR BLIP\r
221 ;\r
222 ;DESCRIPTION:\r
223 ;       THIS ROUTINE PUTS A BLIP ON\r
224 ;       PLAYER A SONAR SCREEN BASED\r
225 ;       ON THE POSITION OF PLAYER B SUB.\r
226 ;\r
227 ;\r
228 BLIP:   LDY I,28.               ;SCREENS ARE 28. APART\r
229 10$:    TYA\r
230         LSR                     ;GET SUB #\r
231         AND I,2\r
232         TAX\r
233         LDA Z,GSTAT             ;GIVE RAPID "PINGS" IN FREEZE\r
234         BPL 12$\r
235         LDA Z,CNTDWN\r
236         BEQ 12$\r
237         LDA A,SNRCNTR\r
238         SEC\r
239         SBC I,4\r
240         BPL 60$\r
241         LDA I,3F                ;VISIBLE IF OVER 3F\r
242 60$:    STA A,SNRCNTR\r
243         AND I,30\r
244         BEQ 50$\r
245         STA Z,SNRON             ;ON NOW\r
246         STA Z,SNRON+2\r
247         BNE 16$                 ;BRA\r
248 50$:    STA Z,SNROFF            ;OFF NOW\r
249         STA Z,SNROFF+2\r
250         BEQ 16$                 ;BRA\r
251 12$:    LDA AX,SNRCNTR          ;TIME TO SHUT OFF SONAR SOUND?\r
252         BNE 15$\r
253         STA ZX,SNROFF           ;YES\r
254         BEQ 16$                 ;BRA\r
255 15$:    DEC AX,SNRCNTR          ;NO-UPDATE COUNTER\r
256         LDA Z,OPTSW4\r
257         ROR\r
258         BCC 17$\r
259         LDA Z,GSTAT\r
260         BPL 16$\r
261 17$:    STA ZX,SNRON\r
262 16$:    LDA ZX,VPOS             ;BIT 3-5 =VPOS\r
263         LSR\r
264         LSR\r
265         AND I,38\r
266         STA Z,TEMP1\r
267         LDA ZX,HPOS             ;BIT 0-2 =HPOS\r
268         ROL\r
269         ROL\r
270         ROL\r
271         ROL\r
272         AND I,07\r
273         ORA Z,TEMP1\r
274         TAX                     ;X=INDEX TO TABLES\r
275         STX     Z,TEMP2         ;SAVE X\r
276         LDA     Z,QUAD          ;GET QUAD + CURSRN\r
277         ASL                     ;IN ONE BYTE\r
278         ASL\r
279         ASL\r
280         ASL\r
281         ORA     Z,CRSRN\r
282         CMP     AX,BLPSTRT      ;SEE IF TIME TO OUTPUT BLIP\r
283         BEQ     20$             ;YES\r
284         TYA\r
285         LSR\r
286         AND     I,2\r
287         TAX\r
288         DEC     ZX,BLPCNT       ;NO-REFRESH?\r
289         BPL     30$             ;NO\r
290         INC     ZX,BLPNTR       ;YES-GET NEXT INCREMEMT\r
291         STY     Z,TEMP1         ;SAVE Y\r
292         LDY     ZX,BLPNTR\r
293         LDA     AY,BLPINC\r
294         STA     ZX,BLPCNT       ;PUT INCREMENT IN COUNTER\r
295         LDY     Z,TEMP1         ;GET Y\r
296         JMP     25$\r
297 20$:    TYA                     ;START BLIP\r
298         LSR\r
299         AND     I,2\r
300         TAX\r
301         BIT     Z,GSTAT         ;DON'T START\r
302         BPL     21$             ;PING DURING FREEZE\r
303         LDA     Z,CNTDWN\r
304         BNE     22$\r
305 21$:    LDA     I,30            ;START PING\r
306         STA     AX,SNRCNTR\r
307 22$:    LDA     I,0             ;RESET COUNTERS\r
308         STA     ZX,BLPCNT\r
309         STA     ZX,BLPNTR\r
310         LDA     Z,TEMP2\r
311         STA     ZX,BLPNUM\r
312 25$:    LDA     ZX,BLPNUM\r
313         TAX\r
314         LDA AX,BLPADR\r
315         STA Z,TEMP1             ;PUT BLIP ADDRESS\r
316         LDA I,0B                ;IN TEMP1\r
317         STA Z,TEMP1+1\r
318         LDA AX,BLPDATA\r
319         STA NY,TEMP1            ;Y=0 OR 28. FOR DIFFERENT SCREENS\r
320 30$:    CPY     I,0             ;DONE BOTH SCREENS?\r
321         BEQ     40$             ;YES\r
322         LDY     I,0             ;NO- DO OTHER ONE\r
323         JMP     10$\r
324 40$:    RTS\r
325         .PAGE\r
326         .SBTTL CURSOR ADDRESS TABLE\r
327 ;\r
328 ;THIS TABLE GIVE THE LSB OF THE 4 ADDRESS\r
329 ;USED TO CHANGE THE 4 STAMPS IN\r
330 ;EACH OF 4 QUADRANTS\r
331 ;\r
332 CRSRADR:.BYTE 02,03,22,23               ;QUAD 0\r
333         .BYTE 43,63,42,62               ;QUAD 1\r
334         .BYTE 61,60,41,40               ;QUAD 2\r
335         .BYTE 20,00,21,01               ;QUAD 3\r
336         .SBTTL CURSOR PICTURE TABLE\r
337 ;\r
338 ;THIS TABLE GIVES THE 4 CURSOR PICTURES\r
339 ;FOR FOR EACH OF 15 ROTATIONS OF\r
340 ;THE CURSOR FOR QUAD 0. THE OTHER 45\r\r
341 ;ROTATIONS CAN BE OBTAINED BY ADDING\r
342 ;(QUAD*25) TO THE NUMBER IN THE\r
343 ;TABLE BELOW.\r
344 ;\r
345 CRSRPIC:.BYTE 44,41,43,42               ;CURSOR 0\r
346         .BYTE 46,41,45,42\r
347         .BYTE 48,41,47,42\r
348         .BYTE 4A,41,49,42\r
349         .BYTE 4C,41,4B,42\r
350         .BYTE 4E,41,4D,42               ;CURSOR 5\r
351         .BYTE 50,51,4F,42\r
352         .BYTE 53,54,52,42\r
353         .BYTE 40,57,55,56\r
354         .BYTE 40,5A,58,59\r
355         .BYTE 40,41,5B,5C               ;CURSOR A\r
356         .BYTE 40,41,5D,5E\r
357         .BYTE 40,41,5F,60\r
358         .BYTE 40,41,61,62\r
359         .BYTE 40,41,63,64\r
360                                         ;CURSOR E\r
361         .BYTE 40,41,00,42               ;BLANK SCREEN\r
362         .PAGE\r
363         .SBTTL BLIP TABLES\r
364 ;\r
365 ;       THERE TABLES GIVE THE LOWER ADDRESS\r
366 ;       BYTE AND STAMP NUMBER FOR A BLIP\r
367 ;       BASED ON THE POSITION OF A SUB.\r
368 ;\r
369 BLPADR: .BYTE   0,0,1,1,2,2,3,3\r
370         .BYTE   0,0,1,1,2,2,3,3\r
371         .BYTE   20,20,20,21,22,22,23,23\r
372         .BYTE   20,20,21,21,22,22,23,23\r
373         .BYTE   40,40,41,41,42,42,43,43\r
374         .BYTE   40,40,41,41,42,42,43,43\r
375         .BYTE   60,60,61,61,62,62,63,63\r
376 BLPDATA:\r
377         .BYTE   0EC,0EC,0ED,0EF,0D4,0D6,0D7,0D7\r
378         .BYTE   0EC,0EC,0ED,0EE,0D5,0D6,0D7,0D7\r
379         .BYTE   0EB,0EB,0EB,0F8,0F0,0F8,0D8,0D8\r
380         .BYTE   0EA,0EA,0F2,0FA,0F2,0FA,0D9,0DA\r
381         .BYTE   0E8,0E8,0F1,0F9,0F1,0F9,0DB,0DC\r
382         .BYTE   0E6,0E6,0F3,0FB,0F3,0FB,0DD,0DD\r
383         .BYTE   0E5,0E5,0E4,0E3,0E1,0DF,0DE,0DE\r
384         .PAGE\r
385         .SBTTL START BLIP TABLE\r
386 ;\r
387 ;THIS TABLE GIVES THE QUADRANT AND CURSOR NUMBER\r
388 ;WHERE EACH BLIP SHOULD BE STARTED\r
389 ;THE QUADRANT IS IN THE HIGH NIBBLE, CURSOR IN THE\r
390 ;LOW NYBBLE\r
391 ;\r
392 BLPSTRT:\r
393         .BYTE 38,38,3A,3D,01,05,08,08\r
394         .BYTE 38,38,3A,3D,02,05,08,08\r
395         .BYTE 36,36,36,3A,01,06,0A,0A\r
396         .BYTE 31,31,33,37,01,0B,0D,0E\r
397         .BYTE 2E,2E,2A,24,1C,15,12,11\r
398         .BYTE 2A,2A,27,22,1E,19,15,15\r
399         .BYTE 28,28,26,21,1E,1A,18,18\r
400         .SBTTL BLIP INCREMENT TABLE\r
401 ;\r
402 ;THIS TABLE GIVES THE NUMBER OF\r
403 ;BLANK FRAMES BETWEEN EACH BLIP OUTPUT\r
404 ;\r
405 BLPINC:\r
406         .BYTE 0,0,0,0\r
407         .BYTE 0,0,1,0\r
408         .BYTE 0,1,0,1\r
409         .BYTE 0,1,1,1\r
410         .BYTE 1,40\r
411         .END\r
412 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0