Commit | Line | Data |
---|---|---|
038c5eb8 PH |
1 | / SPACE WAR |
2 | / | |
3 | / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR | |
4 | / LAB-8/E - NEEDS EAE! | |
5 | / | |
6 | / HACHTI VARIANT FOR LAB-8/E - WITH JOYSTICK SUPPORT. | |
7 | / | |
8 | / EVAN SUITS | |
9 | / | |
10 | / THIS VERSION WORKS OFF EITHER THE BLUE RIBBON CONNECTOR OR THE | |
11 | / SR. WHEN THE PROGRAM IS STARTED (AT 0200) OR RESTARTED THE | |
12 | / SR WILL BE TESTED AND IF =0000 WILL BE USED FOR THE COMMAND | |
13 | / INPUT. OTHERWISE, THE BLUE RIBBON CONNECTOR (AX08 * C0-C7 * | |
14 | / XR OPTION ONLY) CONTINGENCY INPUTS WILL BE USED. | |
15 | / | |
16 | / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD | |
17 | / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP | |
18 | / 'TWO' ON THE RIGHT. | |
19 | / | |
20 | / THE COMMAND WORD BIT ASSIGNMENTS ARE: | |
21 | / | |
22 | / SR BIT: C: FUNCTION: | |
23 | / | |
24 | / 0 0 SHIP ONE ROTATES LEFT | |
25 | / | |
26 | / 1 1 SHIP ONE ROTATES RIGHT | |
27 | / | |
28 | / 2 2 SHIP ONE ACCELERATES | |
29 | / | |
30 | / 3 3 SHIP ONE FIRES | |
31 | / | |
32 | / | |
33 | / | |
34 | / 8 4 SHIP TWO ROTATES LEFT | |
35 | / | |
36 | / 9 5 SHIP TWO ROTATES RIGHT | |
37 | / | |
38 | / 10 6 SHIP TWO ACCELERATES | |
39 | / | |
40 | / 11 7 SHIP TWO FIRES | |
41 | / | |
42 | / | |
43 | / | |
44 | / NOTE THAT TURNING RIGHT AND LEFT SIMULTANEOUSLY THROWS | |
45 | / THE SHIP INTO HYPERSPACE. IN THE CURRENT VERSION THE ODDS | |
46 | / ARE IN FAVOR OF YOUR MAKING IT BACK SAFELY. THE GAME IS OVER | |
47 | / WHEN ONE OR BOTH OF THE SHIPS HAVE BEEN DESTROYED AND THE | |
48 | / WINNER (IF ANY) IS IN NORMAL SPACE. WHEN THE WINNER | |
49 | / HAS BEEN ANNOUNCED, HIT ANY TTY KEY TO RESTART. | |
50 | / | |
51 | ||
52 | ||
53 | /**************************************************************** | |
54 | ||
55 | /*************************** | |
56 | / EAE CODES | |
57 | DVI=7407 | |
58 | SWBA=7447 | |
59 | MUY=7405 | |
60 | ||
61 | /*************************** | |
62 | / CLOCK OPERATIONS | |
63 | ||
64 | CLZE=6130 / CLEAR CLOCK ENABLE REGISTER PER AC | |
65 | CLSK=6131 / SKIP ON CLOCK FLAG | |
66 | CLOE=6132 / SET CLOCK ENABLE REGISTER PER AC | |
67 | CLAB=6133 / AC REGISTER TO CLOCK COUNTER REGISTER | |
68 | CLEN=6134 / CLOCK ENABLE REGISTER TO AC | |
69 | CLSA=6135 / STATUS TO AC | |
70 | CLBA=6136 / CLOCK BUFFER REGISTER TO AC | |
71 | CLCA=6137 / CLOCK COUNTER REGISTER TO AC | |
72 | ||
73 | / BITS IN CLOCK ENABLE REGISTER | |
74 | CREXT=0100 / EXTERNAL SOURCE | |
75 | CR2=0200 / 10**2 per second | |
76 | CR3=0300 / 10**3 per second | |
77 | CR4=0400 / 10**4 per second | |
78 | CR5=0500 / 10**5 per second | |
79 | CR6=0600 / 10**6 per second | |
80 | ||
81 | COVSTAT=4000 | |
82 | CMFREE=0000 / 4096 FIXED FREE RUN | |
83 | CMPROG=1000 / PROGRAMMED DELAY | |
84 | ||
85 | CADC=0040 / START ADC ON OVERFLOW | |
86 | CINH=0020 / INHIBIT CLOCK | |
87 | CION=0010 / INTERRUPT ENABLE | |
88 | ||
89 | CEV3=0004 / EVENT 3 ENABLED | |
90 | CEV2=0002 / EVENT 2 ENABLED | |
91 | CEV1=00001 / EVENT 1 ENABLED | |
92 | ||
93 | / VC8-E OPCODES | |
94 | DIXY=6055 / INTENSIFY | |
95 | DILX=6053 / LOAD X | |
96 | DILY=6054 / LOAD Y | |
97 | DILE=6056 / LOAD ENABLES FROM A | |
98 | DISD=6052 / TEST FOR READY | |
99 | ||
100 | /******************************************************************** | |
101 | / JOYSTICK OPERATIONS | |
102 | JOR=6421 / OR JOYSTICK TO AC | |
103 | JLOAD=6422 / CLEAR AC AND READ JOYSTICK | |
104 | ||
105 | ||
106 | JB1L=0010 | |
107 | JB1R=0004 | |
108 | JB1U=0002 | |
109 | JB1D=0020 | |
110 | JB1B=0001 | |
111 | ||
112 | JB2L=4000 | |
113 | JB2R=2000 | |
114 | JB2U=1000 | |
115 | JB2D=0200 | |
116 | JB2B=0400 | |
117 | ||
118 | /**************************************************************** | |
119 | / SYMBOL DEFINITIONS FOR PAL8-PAL10 | |
120 | ||
121 | XRIN=NOP / DIGITAL INPUT? | |
122 | XRCL=NOP | |
123 | ||
124 | /DSB=XXXX / SET BRIGHTNESS - MUST BE COMMENTED OUT!!! | |
125 | ||
126 | DXC=JMS I IVCLDX / X VALUE CONTROL? | |
127 | DYC=JMS I IVCLDY / Y VALUE CONTROL? | |
128 | ||
129 | DXL=0000 / X VALUE LOAD FLAG? | |
130 | DYL=0000 / Y VALUE LOAD FLAG? | |
131 | DIS=0000 / ANOTHER STRANGE FLAG | |
132 | ||
133 | ||
134 | ||
135 | /**************************************************************** | |
136 | / | |
137 | / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR | |
138 | / REAL WORLD TIMING PURPOSES. | |
139 | / | |
140 | ||
141 | *0 | |
142 | ||
143 | 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT | |
144 | JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE | |
145 | INTSER | |
146 | ||
147 | EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR | |
148 | ODT1, 0 /DEBUGGERS, ETC. | |
149 | ODT2, 0 | |
150 | ODT3, 0 | |
151 | ||
152 | / | |
153 | / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF | |
154 | / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT | |
155 | / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF | |
156 | / THE CODE. | |
157 | / | |
158 | ||
159 | *10 | |
160 | ||
161 | AUTO10, 0 | |
162 | AUTO11, 0 | |
163 | AUTO12, 0 | |
164 | AUTO13, 0 | |
165 | AUTO14, 0 | |
166 | AUTO15, 0 | |
167 | AUTO16, 0 | |
168 | AUTO17, 0 | |
169 | ||
170 | / | |
171 | / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS | |
172 | / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS | |
173 | / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED | |
174 | / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED | |
175 | / | |
176 | ||
177 | *20 | |
178 | ||
179 | ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION | |
180 | ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED | |
181 | ONEFLG, 0 /IN OR OUT OF NORMAL SPACE | |
182 | ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN | |
183 | ONEVEX, 0 /X COMPONENT OF VELOCITY | |
184 | ONEVEY, 0 /Y COMPONENT OF VELOCITY | |
185 | ONEPEX, 0 /X POSITION (12 BITS) | |
186 | ONEPEY, 0 /Y POSITION (12 BITS) | |
187 | ONESIN, 0 /SINE OF ANGLE | |
188 | ONECOS, 0 /COSINE OF ANGLE | |
189 | ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT | |
190 | ||
191 | TWOOUT, 0 /SAME CONTENT AND ORDER | |
192 | TWOCNT, 0 /AS ABOVE | |
193 | TWOFLG, 0 | |
194 | TWOTHE, 0 | |
195 | TWOVEX, 0 | |
196 | TWOVEY, 0 | |
197 | TWOPEX, 0 | |
198 | TWOPEY, 0 | |
199 | TWOSIN, 0 | |
200 | TWOCOS, 0 | |
201 | TWOFIN, 0 | |
202 | ||
203 | ||
204 | / | |
205 | / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN | |
206 | / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN | |
207 | / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM | |
208 | / | |
209 | ||
210 | XONEDS, 0 | |
211 | YONEDS, 0 | |
212 | XTWODS, 0 | |
213 | YTWODS, 0 | |
214 | DIXTEM, 0 | |
215 | DIYTEM, 0 | |
216 | DISCNT, 0 | |
217 | ||
218 | ||
219 | / | |
220 | / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST | |
221 | / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES. | |
222 | / | |
223 | T10SIN, 0 | |
224 | T20SIN, 0 | |
225 | T30SIN, 0 | |
226 | T10COS, 0 | |
227 | T20COS, 0 | |
228 | T30COS, 0 | |
229 | ||
230 | CALSIN, 0 | |
231 | CALCOS, 0 | |
232 | ||
233 | / | |
234 | / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON | |
235 | / PAGE ZERO | |
236 | / | |
237 | ||
238 | SINE, SINEIN | |
239 | COSINE, COSINI | |
240 | MULT, MULTI | |
241 | RSHIFT, SHIFTR | |
242 | VECTOR, DISPLY | |
243 | CALPOS, POSCAL | |
244 | INTWRD, 0 | |
245 | INTCNT, 0 | |
246 | /CLOCK, 0 | |
247 | HYPER, HYPSET | |
248 | MESOUT, CHARS | |
249 | THEADJ, THEAJI | |
250 | VEESCL, VEELIM | |
251 | ISHFT, DISHFT | |
252 | RESET1, RESE1 | |
253 | GAMOVR, 0 | |
254 | ACCFLG, 0 | |
255 | ACCPER, -30 | |
256 | MEXP, -400 | |
257 | ||
258 | PROX, 0 | |
259 | PROY, 0 | |
260 | PROLIF, -360 | |
261 | BUFTMP, 0 | |
262 | ONEFIL, DISBUF | |
263 | TWOFIL, DISBUF+40 | |
264 | ||
265 | P5, 5 | |
266 | P10, 10 | |
267 | P17, 17 | |
268 | P20, 20 | |
269 | P37, 37 | |
270 | P40, 40 | |
271 | P100, 100 | |
272 | P132, 132 | |
273 | P200, 200 | |
274 | P400, 400 | |
275 | P550, 550 | |
276 | P3777, 3777 | |
277 | ||
278 | M4, -4 | |
279 | M6, -6 | |
280 | M10, -10 | |
281 | M11, -11 | |
282 | M264, -264 | |
283 | M200, -200 | |
284 | M400, -400 | |
285 | M550, -550 | |
286 | ||
287 | IVCLDX, VCLDX | |
288 | IVCLDY, VCLDY | |
289 | ||
290 | / | |
291 | / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200. | |
292 | / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED, | |
293 | / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES | |
294 | / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR | |
295 | / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT | |
296 | / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08 | |
297 | / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY | |
298 | / FILE UPDATE TO START OFF THE GAME. | |
299 | / | |
300 | ||
301 | CDI=6201 | |
302 | ||
303 | *200 | |
304 | ||
305 | CDI 0 / SET FIELD0 | |
306 | ||
307 | START, CAF /START OR RESTART HERE ANY OLD TIME | |
308 | ||
309 | DIXY /TO GET THE VC8-E STARTED ONCE | |
310 | LAS /SR | |
311 | /TMP SNA CLA | |
312 | TAD SWRD /USE THE SR | |
313 | TAD XROPT /USE THE BLUE RIBBON CONNECTOR | |
314 | DCA COLDST /AND LEAVE IN THE TRAP LOCATION | |
315 | ||
316 | RESTRT, CLA CMA | |
317 | XRCL | |
318 | CLA CLL | |
319 | ||
320 | TAD P17 /FIRST CLEAR THE POSITION AND DATA | |
321 | DCA AUTO10 /TABLES OF THE TWO SHIPS | |
322 | TAD TABLEN | |
323 | DCA AUTO11 | |
324 | DCA I AUTO10 | |
325 | ISZ AUTO11 | |
326 | JMP .-2 | |
327 | ||
328 | TAD STRT1 /SET THE STARTING POSITIONS OF THE | |
329 | DCA ONEPEX /TWO SHIPS | |
330 | TAD STRT2 | |
331 | DCA TWOPEX | |
332 | TAD P37 /SET TRIG FUNCTIONS JUST IN CASE | |
333 | DCA ONECOS | |
334 | TAD P37 | |
335 | DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP | |
336 | TAD ACCPER /SET COUNT FOR VELOCITY INCREASE | |
337 | DCA ACCFLG | |
338 | DCA ONEFIN /CLEAR ALL GAME END FLAGS | |
339 | DCA TWOFIN | |
340 | DCA GAMOVR | |
341 | JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS | |
342 | ||
343 | TCF /CLEAR OTHER REMAINING LIKELY FLAGS | |
344 | PCF | |
345 | / RRB | |
346 | ||
347 | 6405 / CLEAR INTERRUPT ENABLE OF KERMIT'S SER PORT :-( | |
348 | ||
349 | CLA CMA / ALL ONES | |
350 | CLZE / CLEAR CLOCK CONFIG REGISTER | |
351 | CLA | |
352 | TAD CDELY / LOAD NEG DELAY | |
353 | CLAB / LOAD TO CLOCK BUFFER | |
354 | CLA | |
355 | TAD CCNF / LOAD CLOCK CONFIG | |
356 | CLOE / SET CONFIG BITS | |
357 | ||
358 | CLA CLL | |
359 | JMP COLDST /AND GO TO IT | |
360 | ||
361 | CCNF, CR4+CMPROG+CION+COVSTAT / CLOCK CONFIGURATION | |
362 | /CDELY, -310 / COUNTER PRESET (200) 50HZ | |
363 | CDELY, -246 / COUNTER PRESET (166) 60HZ | |
364 | ||
365 | / | |
366 | / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE | |
367 | / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE | |
368 | / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT | |
369 | / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER | |
370 | / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN. | |
371 | / | |
372 | ||
373 | UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW. | |
374 | /START NEXT SWEEP | |
375 | COLDST, 0 /TRAP TO READ SR OR BRC | |
376 | JLOAD /LOAD JOYSTICK | |
377 | DCA INTWRD /STORE TEMPORARILY | |
378 | TAD INTWRD /MASK OUT LEFTMOST 4 BITS | |
379 | RTR /FOR NUMBER ONE | |
380 | RTR | |
381 | AND LFTHAF | |
382 | DCA INTTEM /AND STORE | |
383 | TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO | |
384 | AND RYTHAF | |
385 | TAD INTTEM /ADD TOGETHER | |
386 | JMP .+3 /AND CONTINUE | |
387 | ||
388 | CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR | |
389 | XRCL | |
390 | DCA INTWRD /CONTINUE | |
391 | TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT | |
392 | DCA INTCNT /UPDATE | |
393 | ION /GET READY FOR THE NEXT CYCLE | |
394 | TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME? | |
395 | IAC /ONLY WHEN ACCFLG=0 | |
396 | SMA SZA | |
397 | TAD ACCPER /IF ZERO, RESET COUNT | |
398 | DCA ACCFLG | |
399 | ||
400 | JMP I .+1 /NOW GET DOWN TO WORK. | |
401 | ONEUP | |
402 | ||
403 | BUFSET, SETBUF | |
404 | TABLEN, AUTO17-CALCOS | |
405 | INTTEM, 0 | |
406 | LFTHAF, 0360 | |
407 | RYTHAF, 0017 | |
408 | STRT1, 1000 | |
409 | STRT2, -1000 | |
410 | SWRD, 2000-CODST /SWRD+XROPT=7000=NOP! | |
411 | XROPT, JMP CODST | |
412 | ||
413 | ||
414 | ||
415 | / | |
416 | / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE | |
417 | / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE | |
418 | / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS | |
419 | / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO | |
420 | / UPDATE WITH IOF. | |
421 | / | |
422 | / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS | |
423 | / SET IN WHICH CASE THE GAME IS RESTARTED. | |
424 | / | |
425 | / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM | |
426 | / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE | |
427 | / STRANGE FLAG | |
428 | / | |
429 | ||
430 | INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE | |
431 | RAR /AC AND LINK | |
432 | DCA INTLNK /FOR POSSIBLE CONTINUATION | |
433 | ||
434 | CLSK /WAS IT THE CRYSTAL CLOCK? | |
435 | JMP INTBUS /NO TRY SOMETHING ELSE | |
436 | ||
437 | CLA IAC RTR /LOAD 4000 | |
438 | CLSA /GET CLOCKSTATUS AND RESET FLAG | |
439 | CLA CLL | |
440 | JMP UPDATE /YES, GO TO IT | |
441 | ||
442 | INTBUS, /HERE ON NON-CLOCK INTERUPT | |
443 | ||
444 | KSF | |
445 | JMP NOKEY /NOT THE KEYBOARD, THAT'S BAD! | |
446 | ||
447 | KBDIN, KCC /CLEAR KEYBOARD FLAG | |
448 | ||
449 | KRB / RESET FLAG, CLEAR AC, READ DATA | |
450 | AND KPAR / MASK OUT PARITY | |
451 | TAD NCTRLC / ADD -3 (CTRL-C) | |
452 | SNA CLA | |
453 | JMP I KBOOT / REBOOT! | |
454 | ||
455 | TAD GAMOVR /IS THE GAMEOVER | |
456 | SZA CLA | |
457 | JMP RESTRT /YES, RESTART | |
458 | ||
459 | KRB | |
460 | AND KPAR | |
461 | TAD NCTRLD | |
462 | SNA CLA | |
463 | JMP RESTRT | |
464 | ||
465 | JMP INTRET | |
466 | ||
467 | NOKEY, / STILL NOT FOUND INTERRUPT SOURCE :-( | |
468 | TSF / SKIP IF PRINTER FLAG SET | |
469 | JMP BADDIE / NOT THE PRINTER, NO NEW IDEAS - BAD | |
470 | TCF / CLEAR THAT FLAG | |
471 | JMP INTRET / AND GO HOME | |
472 | ||
473 | KBOOT, 7600 | |
474 | KPAR, 177 / ANTI-PARITY MASK | |
475 | NCTRLC, 7775 / -3 (CTRL-C) | |
476 | NCTRLD, 7774 / -3 (CTRL-D) | |
477 | ||
478 | ||
479 | BADDIE, ISZ INTGLH /COUNT ONE BADDIE | |
480 | SKP | |
481 | HLT /HALT IF TOO MANY BADDIES | |
482 | ||
483 | INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT | |
484 | ||
485 | PCF | |
486 | / RRB | |
487 | ||
488 | TAD INTLNK | |
489 | RAL | |
490 | TAD INTACC | |
491 | ION | |
492 | JMP I 0 | |
493 | ||
494 | INTACC, 0 | |
495 | INTLNK, 0 | |
496 | INTGLH, 0 | |
497 | ||
498 | ||
499 | ||
500 | / | |
501 | / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP | |
502 | / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON | |
503 | / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS | |
504 | / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN, | |
505 | / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS | |
506 | / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS. | |
507 | / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR | |
508 | / NUMBER TWO. | |
509 | / | |
510 | ||
511 | *400 | |
512 | ||
513 | ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE | |
514 | SNA | |
515 | JMP ONEOK /YES IT IS | |
516 | IAC /NO, BUT IS IT JUST COMING OUT? | |
517 | SNA | |
518 | TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED | |
519 | DCA ONEFLG /OTHERWISE JUST COUNT ONE | |
520 | JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO | |
521 | ||
522 | ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING? | |
523 | SZA CLA | |
524 | JMP ONEFIG /IF YES, ALLOW NO CONTROLS | |
525 | TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED? | |
526 | SZA CLA | |
527 | JMS I ONEWN /YES, SIGNAL VICTORY | |
528 | TAD INTWRD /NOW BEGIN TEST OF REQUEST | |
529 | AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE! | |
530 | TAD OM300 /TEST BITS 4 AND 5 | |
531 | SZA CLA | |
532 | JMP ONELEF /NOPE, CONTINUE | |
533 | CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE | |
534 | JMP I HYPER | |
535 | ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN? | |
536 | AND P200 /TEST BIT 4 | |
537 | SNA CLA | |
538 | JMP ONERYT /NO | |
539 | CLA CLL CMA /YES DECREMENT ANGLE | |
540 | JMP ONEFIG | |
541 | ||
542 | ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN | |
543 | AND P100 /TEST BIT 5 | |
544 | SZA CLA | |
545 | IAC /YES, INCREMENT ANGLE | |
546 | ||
547 | ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE) | |
548 | JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS | |
549 | DCA ONETHE /AND STORE | |
550 | TAD ONETHE /FIND THEM TRIG FUNCTIONS | |
551 | JMS I SINE /AND STORE ONCE AND FOR ALL | |
552 | DCA ONESIN /IN THE APPROPRIATE PLACES | |
553 | TAD ONETHE | |
554 | JMS I COSINE | |
555 | DCA ONECOS | |
556 | TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING | |
557 | SZA CLA | |
558 | JMP ONEVEL | |
559 | ||
560 | ||
561 | ||
562 | ||
563 | ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE? | |
564 | SZA CLA | |
565 | JMP ONEVEL /NOPE | |
566 | TAD INTWRD /YES, ANY REQUESTED? | |
567 | AND P40 /TEST BIT 6 | |
568 | SNA CLA | |
569 | JMP ONEVEL /NONE REQUESTED | |
570 | TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING | |
571 | TAD ONEVEY /ON ORIENTATION | |
572 | JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM | |
573 | DCA ONEVEY /AND STORE | |
574 | TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT | |
575 | TAD ONEVEX | |
576 | JMS I VEESCL | |
577 | DCA ONEVEX | |
578 | ||
579 | ||
580 | ||
581 | ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE | |
582 | JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4 | |
583 | JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION | |
584 | TAD ONEPEX | |
585 | DCA ONEPEX /IGNORE ANY OVERFLOW | |
586 | TAD ONEVEY /DO THE SAME FOR Y COORDINATE | |
587 | JMS I ISHFT /AND VELOCITY COMPONENT | |
588 | JMS I ISHFT | |
589 | TAD ONEPEY | |
590 | DCA ONEPEY | |
591 | TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF | |
592 | SZA CLA /EXPLODING | |
593 | JMP I ITWOUP | |
594 | ||
595 | ||
596 | ||
597 | ||
598 | ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED | |
599 | SNA CLA | |
600 | JMP .+3 | |
601 | ISZ LNC1FG /NO, CONTINUE RELOADING | |
602 | JMP I ITWOUP /AND EXIT | |
603 | TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED? | |
604 | AND P20 /TEST BIT7 | |
605 | SNA CLA | |
606 | JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT | |
607 | /.....I GUESS..... | |
608 | TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH | |
609 | DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE | |
610 | TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE) | |
611 | JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY | |
612 | JMS I RSHIFT /COMPONENT OF PROJECTILE | |
613 | TAD ONESIN | |
614 | JMS I RSHIFT /AND STICK IT IN THE FILE | |
615 | DCA I AUTO16 | |
616 | TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE | |
617 | CLL RTL /SHIP OF ORIGIN | |
618 | TAD ONEPEX | |
619 | DCA I AUTO16 /AND STORE X POSITION | |
620 | TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND | |
621 | JMS I ISHFT /POSITION | |
622 | JMS I RSHIFT | |
623 | TAD ONECOS | |
624 | JMS I RSHIFT | |
625 | DCA I AUTO16 | |
626 | TAD ONECOS | |
627 | CLL RTL | |
628 | TAD ONEPEY | |
629 | DCA I AUTO16 | |
630 | TAD M200 /START RELOAD CYCLE | |
631 | DCA LNC1FG | |
632 | JMS I RESET1 /RESET AUTO16 TO NEXT HOLE | |
633 | ||
634 | JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO | |
635 | ITWOUP, TWOUP | |
636 | ||
637 | LNC1FG, 0 /PROJECTILE LAUNCH ENABLE | |
638 | ||
639 | OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5 | |
640 | OM300, -300 | |
641 | ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE | |
642 | ||
643 | ||
644 | ||
645 | / | |
646 | / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO. | |
647 | / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE. | |
648 | / | |
649 | ||
650 | *600 | |
651 | ||
652 | TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE | |
653 | SNA | |
654 | JMP TWOOK /YES, CONTINUE | |
655 | IAC /NO, BUMP COUNT AND TEST FOR REENTRY | |
656 | SNA | |
657 | TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED | |
658 | DCA TWOFLG /AND CONTINUE | |
659 | JMP I IONEST | |
660 | ||
661 | TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE | |
662 | SZA CLA /IS IT EXPLODING? | |
663 | JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE | |
664 | TAD ONEFIN /DID WE JUST WIN? | |
665 | SZA CLA | |
666 | JMS I TWOWN /YES ENABLE END OF GAME MESSAGE | |
667 | TAD INTWRD /TEST FOR HYPERSPACE REQUEST | |
668 | AND OP14 | |
669 | TAD OM14 /BITS 8 AND 9 MUST BE SET | |
670 | SNA CLA | |
671 | JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0 | |
672 | /FOR SHIP NUMBER 2 | |
673 | TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8 | |
674 | AND P10 | |
675 | SNA CLA | |
676 | JMP TWORYT /NOT SET | |
677 | CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE | |
678 | JMP TWOFIG /SKIP TEST FOR RIGHT TURN | |
679 | ||
680 | TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9 | |
681 | AND INTWRD | |
682 | SZA CLA | |
683 | IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE | |
684 | ||
685 | TWOFIG, TAD TWOTHE /UPDTAE TWOTHE | |
686 | JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE | |
687 | DCA TWOTHE /AND STORE | |
688 | TAD TWOTHE | |
689 | JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS | |
690 | DCA TWOSIN /AND STORE IN DATA TABLE | |
691 | TAD TWOTHE | |
692 | JMS I COSINE | |
693 | DCA TWOCOS | |
694 | TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING | |
695 | SZA CLA | |
696 | JMP TWOVEL | |
697 | ||
698 | ||
699 | ||
700 | ||
701 | TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED | |
702 | SZA CLA /DURING THIS UPDATE CYCLE | |
703 | JMP TWOVEL /NOPE | |
704 | CLL IAC RAL /YES, TEST FOR BIT 2 SET | |
705 | AND INTWRD | |
706 | SNA CLA | |
707 | JMP TWOVEL /NOT SET | |
708 | ||
709 | TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF | |
710 | TAD TWOVEX /ANGLE OF ORIENTATION | |
711 | JMS I VEESCL /AND SCALE TO NOT EXCEED MAX | |
712 | DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE | |
713 | ||
714 | TAD TWOCOS | |
715 | TAD TWOVEY | |
716 | JMS I VEESCL | |
717 | DCA TWOVEY | |
718 | ||
719 | ||
720 | ||
721 | TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY | |
722 | JMS I ISHFT /COMPONENTS/16 | |
723 | JMS I ISHFT | |
724 | TAD TWOPEX | |
725 | DCA TWOPEX | |
726 | TAD TWOVEY | |
727 | JMS I ISHFT | |
728 | JMS I ISHFT | |
729 | TAD TWOPEY | |
730 | DCA TWOPEY | |
731 | TAD TWOOUT | |
732 | SZA CLA | |
733 | JMP I IONEST | |
734 | ||
735 | ||
736 | ||
737 | ||
738 | TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST | |
739 | SNA CLA /TEST TO SEE IF RELOAD COMPLETE | |
740 | JMP .+3 | |
741 | ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT | |
742 | JMP I IONEST | |
743 | IAC /YES, TEST TRIGGER BIT 11 | |
744 | AND INTWRD | |
745 | SNA CLA | |
746 | JMP I IONEST /NOT SET, HELL WITH IT | |
747 | ||
748 | TAD PROLIF /OK, SET PROJECTILE LIFE | |
749 | DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT | |
750 | TAD TWOVEX /ADD SHIPS VELOCITY | |
751 | JMS I ISHFT /(ADJUSTED) | |
752 | JMS I RSHIFT | |
753 | TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT | |
754 | JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION | |
755 | DCA I AUTO16 | |
756 | TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD | |
757 | CLL RTL /OF THE SHIP | |
758 | TAD TWOPEX /X COMPONENT | |
759 | DCA I AUTO16 | |
760 | TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY | |
761 | JMS I ISHFT /Y POSITION AND COSINE | |
762 | JMS I RSHIFT | |
763 | TAD TWOCOS | |
764 | JMS I RSHIFT | |
765 | DCA I AUTO16 | |
766 | TAD TWOCOS | |
767 | CLL RTL | |
768 | TAD TWOPEY | |
769 | DCA I AUTO16 | |
770 | TAD M200 | |
771 | DCA LNC2FG /200 CYCLES OF RELOAD | |
772 | JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE! | |
773 | ||
774 | JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS | |
775 | IONEST, ONESET | |
776 | ||
777 | LNC2FG, 0 /RELOAD COUNT | |
778 | ||
779 | OP14, 14 /HYPERSPACE CODE | |
780 | OM14, -14 | |
781 | TWOWN, TWOWIN | |
782 | ||
783 | ||
784 | ||
785 | / | |
786 | / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT | |
787 | / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL | |
788 | / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY | |
789 | / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE | |
790 | / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN | |
791 | / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE | |
792 | / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS | |
793 | / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE | |
794 | / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE: | |
795 | / | |
796 | / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE] | |
797 | / | |
798 | / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE] | |
799 | / | |
800 | / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE | |
801 | / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE | |
802 | / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL) | |
803 | / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE | |
804 | / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND | |
805 | / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES | |
806 | / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS | |
807 | / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE | |
808 | / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS. | |
809 | / | |
810 | / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7 | |
811 | / MATRIX OF POINTS MAY BE QUICKLY CALCULATED. | |
812 | / | |
813 | / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED | |
814 | / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE. | |
815 | / | |
816 | ||
817 | ||
818 | *1000 | |
819 | ||
820 | ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE | |
821 | TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE | |
822 | SZA CLA | |
823 | JMP I ITWOST | |
824 | TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS | |
825 | DCA CALSIN | |
826 | TAD ONECOS | |
827 | DCA CALCOS | |
828 | JMS I CALPOS /CALL THE CALCULATOR | |
829 | ||
830 | / | |
831 | / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE | |
832 | / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES | |
833 | / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE | |
834 | / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED | |
835 | / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y | |
836 | / DISPLACED BY X,Y OF THE SHIP ITSELF | |
837 | / | |
838 | ||
839 | TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE | |
840 | DCA AUTO10 /POINTER | |
841 | TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS | |
842 | TAD T30SIN | |
843 | DCA I AUTO10 / 0,3 OR TOP CENTER | |
844 | TAD ONEPEY | |
845 | TAD T30COS | |
846 | DCA I AUTO10 | |
847 | ||
848 | TAD T10COS | |
849 | CIA /THE SECOND IS | |
850 | TAD ONEPEX | |
851 | DCA I AUTO10 / -1,0 | |
852 | TAD T10SIN /OR JUST LEFT OF DEAD CENTER | |
853 | TAD ONEPEY /AND SO ON | |
854 | DCA I AUTO10 | |
855 | ||
856 | TAD T30SIN | |
857 | TAD T30COS /THE THIRD POINT IS | |
858 | CIA | |
859 | TAD ONEPEX / -3,-3 | |
860 | DCA I AUTO10 | |
861 | TAD T30COS /OR BOTTOM LEFT HAND CORNER | |
862 | CIA | |
863 | TAD T30SIN | |
864 | TAD ONEPEY | |
865 | DCA I AUTO10 | |
866 | ||
867 | ||
868 | ||
869 | ||
870 | TAD T10SIN | |
871 | CIA /FOURTH POINT | |
872 | TAD ONEPEX | |
873 | DCA I AUTO10 / 0,-1 | |
874 | TAD T10COS | |
875 | CIA /OR JUST BELOW CENTER | |
876 | TAD ONEPEY | |
877 | DCA I AUTO10 | |
878 | ||
879 | FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE | |
880 | AND P40 /FLAME WITH AN EXTRA POINT SOME | |
881 | SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP | |
882 | JMP ONECON /POWER NOT ON - CONTINUE | |
883 | TAD ONEOUT /DO NOT ALLOW IF EXPLODING | |
884 | SZA CLA | |
885 | JMP ONECON | |
886 | ||
887 | TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND | |
888 | SNA /OFF TO MAKE IT FLICKER. DISPLAY THE | |
889 | CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE | |
890 | DCA ONFG1 | |
891 | ||
892 | ISZ ONFG1 | |
893 | JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP | |
894 | ||
895 | TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME | |
896 | CMA /WITH LONG SHORT LONG SHORT | |
897 | DCA ONFG2 | |
898 | ||
899 | TAD ONFG2 /TIP OF FLAME AT EITHER | |
900 | SNA CLA | |
901 | TAD T10SIN / 0,-4 OR | |
902 | TAD T30SIN / 0,-3 | |
903 | CIA | |
904 | TAD ONEPEX | |
905 | DCA I AUTO10 | |
906 | TAD ONFG2 | |
907 | SNA CLA | |
908 | TAD T10COS | |
909 | TAD T30COS | |
910 | CIA | |
911 | TAD ONEPEY | |
912 | DCA I AUTO10 | |
913 | ||
914 | TAD T10SIN | |
915 | CIA | |
916 | TAD ONEPEX /RETURN DISPLAY TO 0,-1 | |
917 | DCA I AUTO10 | |
918 | TAD T10COS | |
919 | CIA | |
920 | TAD ONEPEY | |
921 | DCA I AUTO10 | |
922 | CLA CLL CMA RAL /ADD -2 TO POINT COUNT | |
923 | ||
924 | ||
925 | ||
926 | ||
927 | ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8 | |
928 | DCA ONECNT | |
929 | ||
930 | TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT | |
931 | CIA | |
932 | TAD T30COS / AT 3,-3 | |
933 | TAD ONEPEX / | |
934 | DCA I AUTO10 /OR LOWER RIGHT HAND CORNER | |
935 | TAD T30SIN | |
936 | TAD T30COS | |
937 | CIA | |
938 | TAD ONEPEY | |
939 | DCA I AUTO10 | |
940 | ||
941 | TAD T10COS /NEXT | |
942 | TAD ONEPEX / | |
943 | DCA I AUTO10 / 1,0 | |
944 | TAD T10SIN / | |
945 | CIA / OR JUST RIGHT OF CENTER | |
946 | TAD ONEPEY | |
947 | DCA I AUTO10 | |
948 | ||
949 | TAD T30SIN /FINALLY BACK TO | |
950 | TAD ONEPEX / | |
951 | DCA I AUTO10 / 0,3 | |
952 | TAD T30COS / | |
953 | TAD ONEPEY / TOP CENTE | |
954 | DCA I AUTO10 | |
955 | ||
956 | JMP I ITWOST /NOW FOR NUMBER TWO | |
957 | ITWOST, TWOSET | |
958 | ||
959 | ONFG1, 0 /USED TO COUNT FLICKERS | |
960 | ONFG2, 0 /SHORT OR LONG FLAG | |
961 | ||
962 | ||
963 | ||
964 | / | |
965 | / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO. | |
966 | / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH | |
967 | / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS | |
968 | / | |
969 | ||
970 | *1200 | |
971 | ||
972 | TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE | |
973 | TAD TWOFLG | |
974 | SZA CLA | |
975 | JMP I IFILDS | |
976 | TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS | |
977 | DCA CALSIN /CALCULATED | |
978 | TAD TWOCOS | |
979 | DCA CALCOS | |
980 | JMS I CALPOS | |
981 | ||
982 | TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY | |
983 | DCA AUTO10 /FILE | |
984 | TAD T30SIN /FIRST POINT AT | |
985 | TAD TWOPEX / | |
986 | DCA I AUTO10 / 0,3 | |
987 | TAD T30COS / | |
988 | TAD TWOPEY / OR TOP CENTER | |
989 | DCA I AUTO10 | |
990 | ||
991 | TAD T20COS | |
992 | CIA | |
993 | TAD T20SIN | |
994 | TAD TWOPEX | |
995 | DCA I AUTO10 | |
996 | TAD T20SIN | |
997 | TAD T20COS /SECOND POINT | |
998 | TAD TWOPEY / -2,2 | |
999 | DCA I AUTO10 | |
1000 | ||
1001 | TAD T20COS /THIRD POINT | |
1002 | CIA / -2,0 | |
1003 | TAD TWOPEX | |
1004 | DCA I AUTO10 | |
1005 | TAD T20SIN | |
1006 | TAD TWOPEY | |
1007 | DCA I AUTO10 | |
1008 | ||
1009 | ||
1010 | ||
1011 | TAD T20COS | |
1012 | TAD T30SIN | |
1013 | CIA | |
1014 | TAD TWOPEX /FOURTH POINT | |
1015 | DCA I AUTO10 / -2,-3 | |
1016 | TAD T30COS | |
1017 | CIA | |
1018 | TAD T20SIN | |
1019 | TAD TWOPEY | |
1020 | DCA I AUTO10 | |
1021 | ||
1022 | ||
1023 | ||
1024 | ||
1025 | TAD T20SIN | |
1026 | CIA /NEXT | |
1027 | TAD TWOPEX / 0,-2 | |
1028 | DCA I AUTO10 | |
1029 | TAD T20COS | |
1030 | CIA | |
1031 | TAD TWOPEY | |
1032 | DCA I AUTO10 | |
1033 | ||
1034 | FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON | |
1035 | AND INTWRD | |
1036 | SNA CLA | |
1037 | JMP TWOCON /NO, FORGET IT | |
1038 | TAD TWOOUT /NOT ALLOWED IF EXPLODING | |
1039 | SZA CLA | |
1040 | JMP TWOCON | |
1041 | ||
1042 | TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1 | |
1043 | SNA | |
1044 | CLA CLL CMA RAL | |
1045 | DCA TWFG1 | |
1046 | ||
1047 | ISZ TWFG1 /ALSO THE LENGHT VARIATION | |
1048 | JMP TWOCON | |
1049 | ||
1050 | TAD TWFG2 /EVERY OTHER TIME LONG | |
1051 | CMA | |
1052 | DCA TWFG2 | |
1053 | /FLAME TIP AT EITHER | |
1054 | TAD TWFG2 / 0,-3 | |
1055 | SNA CLA /OR | |
1056 | TAD T20SIN / 0,-5 | |
1057 | TAD T30SIN | |
1058 | CIA | |
1059 | TAD TWOPEX | |
1060 | DCA I AUTO10 | |
1061 | TAD TWFG2 | |
1062 | SNA CLA | |
1063 | TAD T20COS | |
1064 | TAD T30COS | |
1065 | CIA | |
1066 | TAD TWOPEY | |
1067 | DCA I AUTO10 | |
1068 | ||
1069 | TAD T20SIN /NOW BACK UP TO THE SHIP | |
1070 | CIA | |
1071 | TAD TWOPEX | |
1072 | DCA I AUTO10 | |
1073 | TAD T20COS | |
1074 | CIA | |
1075 | TAD TWOPEY | |
1076 | DCA I AUTO10 | |
1077 | ||
1078 | CLA CLL CMA RAL /ADD -2 TO POINT COUNT | |
1079 | ||
1080 | ||
1081 | ||
1082 | ||
1083 | TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10 | |
1084 | DCA TWOCNT | |
1085 | ||
1086 | TAD T30SIN /CONTINUE WITH DISPLAY FILE | |
1087 | CIA /NEXT POINT AT 2,-3 | |
1088 | TAD T20COS | |
1089 | TAD TWOPEX | |
1090 | DCA I AUTO10 | |
1091 | TAD T30COS | |
1092 | TAD T20SIN | |
1093 | CIA | |
1094 | TAD TWOPEY | |
1095 | DCA I AUTO10 | |
1096 | ||
1097 | ||
1098 | ||
1099 | TAD T20COS /NEXT POINT | |
1100 | TAD TWOPEX / | |
1101 | DCA I AUTO10 / 2,0 | |
1102 | TAD T20SIN | |
1103 | CIA | |
1104 | TAD TWOPEY | |
1105 | DCA I AUTO10 | |
1106 | ||
1107 | TAD T20COS /AND THE NEXT AT | |
1108 | TAD T20SIN | |
1109 | TAD TWOPEX / 2,2 | |
1110 | DCA I AUTO10 | |
1111 | TAD T20SIN | |
1112 | CIA | |
1113 | TAD T20COS | |
1114 | TAD TWOPEY | |
1115 | DCA I AUTO10 | |
1116 | ||
1117 | TAD T30SIN | |
1118 | TAD TWOPEX | |
1119 | DCA I AUTO10 | |
1120 | TAD T30COS /AND THE LAST AT | |
1121 | TAD TWOPEY / | |
1122 | DCA I AUTO10 / 0,3 | |
1123 | ||
1124 | JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS | |
1125 | IFILDS, FILDIS | |
1126 | ||
1127 | TWFG1, 0 /FLIK THE FLAME | |
1128 | TWFG2, 0 /LONG OR SHORT | |
1129 | ||
1130 | ||
1131 | ||
1132 | / | |
1133 | / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION | |
1134 | / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END | |
1135 | / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS | |
1136 | / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR | |
1137 | / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES. | |
1138 | / | |
1139 | ||
1140 | *1400 | |
1141 | ||
1142 | FILDIS, CLA CLL /ALL SET TO GO | |
1143 | JMS I COLIDE /TEST FOR COLLISION FIRST | |
1144 | / DSB 1 /IF NO COLLISION | |
1145 | TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL | |
1146 | SZA CLA /SPACE | |
1147 | JMP TWODIS | |
1148 | ||
1149 | TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE | |
1150 | DCA AUTO10 /FOR NUMBER ONE | |
1151 | TAD ONECNT /ALONG WITH VECTOR COUNT | |
1152 | DCA AUTO11 | |
1153 | TAD I AUTO10 /SET OUT THE FIRST POINT PAIR | |
1154 | DCA XONEDS | |
1155 | TAD I AUTO10 | |
1156 | DCA YONEDS | |
1157 | TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION? | |
1158 | SZA CLA | |
1159 | JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION | |
1160 | ||
1161 | FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS | |
1162 | DCA XTWODS /SET X AND Y TO NEW POINT | |
1163 | TAD I AUTO10 | |
1164 | DCA YTWODS | |
1165 | JMS I VECTOR /CALL THE DOT DRAWING MACHINE | |
1166 | ISZ AUTO11 | |
1167 | SKP /COUNT | |
1168 | JMP TWODIS /DO NUMBER TWO ON OVERFLOW | |
1169 | TAD XTWODS /SWAP POINTS FOR NEXT PAIR | |
1170 | DCA XONEDS | |
1171 | TAD YTWODS /THE GENERATOR DRAWS FROM ONE | |
1172 | DCA YONEDS /TOWARDS TWO | |
1173 | JMP FILONE | |
1174 | ||
1175 | ||
1176 | ||
1177 | ||
1178 | TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO | |
1179 | SZA CLA /BUT NOT IF IN HYPER SPACE | |
1180 | JMP I IPRODS | |
1181 | ||
1182 | TAD TWOFIL /SET UP FILE POINTER AS IN ONE | |
1183 | DCA AUTO10 | |
1184 | TAD TWOCNT /AND THE COUNT | |
1185 | DCA AUTO11 | |
1186 | TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO | |
1187 | DCA XONEDS | |
1188 | TAD I AUTO10 | |
1189 | DCA YONEDS | |
1190 | TAD TWOOUT /IS IT EXPLODING? | |
1191 | SZA CLA | |
1192 | JMP I ITWOEX /YES, HOW EXCITING | |
1193 | ||
1194 | TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF | |
1195 | DCA XTWODS /POINTS | |
1196 | TAD I AUTO10 | |
1197 | DCA YTWODS /AND CALL THE VECTOR SEQUENCE | |
1198 | JMS I VECTOR | |
1199 | ISZ AUTO11 | |
1200 | JMP .+3 | |
1201 | ||
1202 | JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO | |
1203 | IPRODS, PRODIS /DO THE PROJECTILE THING | |
1204 | ||
1205 | TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR | |
1206 | DCA XONEDS /OF POINTS | |
1207 | TAD YTWODS | |
1208 | DCA YONEDS | |
1209 | JMP TWDLOP | |
1210 | ||
1211 | COLIDE, COLLID | |
1212 | IONEEX, ONEEXP | |
1213 | ITWOEX, TWOEXP | |
1214 | ||
1215 | ||
1216 | ||
1217 | / | |
1218 | / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A | |
1219 | / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS. | |
1220 | / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND | |
1221 | / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT | |
1222 | / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE. | |
1223 | / | |
1224 | ||
1225 | DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR | |
1226 | CLA | |
1227 | TAD XONEDS /FROM XONEDS,YONEDS | |
1228 | CIA /TO XTWODS,YTWODS | |
1229 | TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO | |
1230 | JMS DISHFT /FOURTHS | |
1231 | DCA DIXTEM /AND STORE INCREMENT | |
1232 | TAD YONEDS | |
1233 | CIA | |
1234 | TAD YTWODS | |
1235 | JMS DISHFT /FOURTHS | |
1236 | DCA DIYTEM | |
1237 | TAD M4 /FOR FOUR DOTS | |
1238 | DCA DISCNT | |
1239 | ||
1240 | DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y | |
1241 | TAD DIXTEM | |
1242 | DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS | |
1243 | TAD YONEDS /XONEDS AND YONEDS | |
1244 | TAD DIYTEM | |
1245 | DCA YONEDS | |
1246 | TAD XONEDS | |
1247 | / RTR /DIVIDE BY 8 TO FIT SCREEN SIZE | |
1248 | / RAR | |
1249 | DXC DXL /SET X VALUE | |
1250 | CLA | |
1251 | TAD YONEDS /DO THE SAME FOR Y | |
1252 | / RTR | |
1253 | / RAR | |
1254 | DYC DYL DIS /AT LAST SOMETHING TO SEE!! | |
1255 | CLA | |
1256 | ISZ DISCNT /DONE YET? | |
1257 | JMP DISLOP /NOPE | |
1258 | JMP I DISPLY /YUP | |
1259 | ||
1260 | ||
1261 | DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED | |
1262 | CLL /FROM EVERYWHERE TO DIVIDE THE | |
1263 | SPA /AC BY FOUR WITH AN ASR RIGHT | |
1264 | CML IAC /NOTE THAT NEGATIVE NUMBERS ARE | |
1265 | RAR /ROUNDED UPWARDS (TOWARD ZERO) | |
1266 | CLL /TO MAKE IT COME OUT RIGHT | |
1267 | SPA | |
1268 | CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS | |
1269 | RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES | |
1270 | JMP I DISHFT | |
1271 | ||
1272 | ||
1273 | ||
1274 | / | |
1275 | / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS. | |
1276 | / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH | |
1277 | / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS | |
1278 | / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR | |
1279 | / A HIT. | |
1280 | / | |
1281 | ||
1282 | *1600 | |
1283 | ||
1284 | PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES | |
1285 | TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE | |
1286 | DCA BUFTMP | |
1287 | / DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS | |
1288 | ||
1289 | PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT | |
1290 | SNA | |
1291 | JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT | |
1292 | IAC /INCREMENT COUNT AND REPLACE | |
1293 | DCA I BUFTMP | |
1294 | ISZ BUFTMP /BUMP POINTER TO X VELOCITY | |
1295 | TAD I BUFTMP | |
1296 | ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION | |
1297 | TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT | |
1298 | DCA I BUFTMP | |
1299 | TAD I BUFTMP | |
1300 | DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST | |
1301 | ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY | |
1302 | TAD I BUFTMP | |
1303 | ISZ BUFTMP | |
1304 | TAD I BUFTMP /SAME LITTLE GAME | |
1305 | DCA I BUFTMP | |
1306 | TAD I BUFTMP | |
1307 | DCA PROY /STORE THE NEW Y VALUE | |
1308 | ||
1309 | TAD PROX /DISPLAY THE POINT WITH | |
1310 | / RTR /THE SAME SHIFT AS FOR THE SHIPS | |
1311 | / RAR /FOR THE SMALL SCREEN | |
1312 | DXC DXL | |
1313 | CLA | |
1314 | TAD PROY | |
1315 | / RTR / | |
1316 | / RAR | |
1317 | DYC DYL DIS /THERE IT IS!! | |
1318 | CLA | |
1319 | JMS I CHKOUT /TEST FOR A HIT | |
1320 | ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END | |
1321 | TAD BUFTMP /OF BUFFER | |
1322 | TAD BUFLIM | |
1323 | SZA CLA | |
1324 | JMP PROLOP /NOT AT END - CONTINUE | |
1325 | ||
1326 | ||
1327 | / | |
1328 | / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR | |
1329 | / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP | |
1330 | / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT | |
1331 | / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE | |
1332 | / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED | |
1333 | / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING | |
1334 | / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD | |
1335 | / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT | |
1336 | / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY. | |
1337 | / | |
1338 | ||
1339 | ||
1340 | FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT? | |
1341 | SZA CLA | |
1342 | JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE | |
1343 | / TAD M400 /MOVE THE BEAM OFF SCREEN | |
1344 | / DYC DYL | |
1345 | CLA CLL | |
1346 | / DXC DXL | |
1347 | TAD INTCNT /PICK UP THE COUNT | |
1348 | CIA | |
1349 | JMP . | |
1350 | ||
1351 | ENDGAM, JOBLOP | |
1352 | ||
1353 | ||
1354 | EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER | |
1355 | TAD P5 /POINTER TO THE NEXT PROJECTILE | |
1356 | DCA BUFTMP /UNLESS THE END | |
1357 | TAD BUFTMP /OF THE BUFFER | |
1358 | TAD BUFLIM /IS REACHED | |
1359 | SZA CLA /IN WHICH CASE | |
1360 | JMP PROLOP /IT | |
1361 | JMP FINISH /QUITS | |
1362 | ||
1363 | BUFST, DISBUF+101 | |
1364 | BUFLIM, -DISBUF-175 | |
1365 | CHKOUT, CHECK | |
1366 | ||
1367 | RESE1, 0 /THIS IS CALLED TO SET THE POINTER | |
1368 | TAD MRES /(AUTO16) TO THE NEXT FREE SLOT | |
1369 | DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE | |
1370 | ||
1371 | RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT | |
1372 | TAD P5 | |
1373 | DCA RESPNT | |
1374 | TAD RESPNT /RESTE IF AT END OF BUFFER | |
1375 | TAD BUFLIM | |
1376 | SZA CLA | |
1377 | JMP RESCON | |
1378 | TAD BUFST | |
1379 | DCA RESPNT | |
1380 | ||
1381 | RESCON, TAD I RESPNT /FIND A HOLE YET? | |
1382 | SNA CLA | |
1383 | JMP RESFND /YES, SET UP AUTO16 | |
1384 | ISZ RESCNT /NO COUNT | |
1385 | JMP RESLOP /AND TRY AGAIN | |
1386 | HLT /NO HOLES AT ALL? | |
1387 | ||
1388 | RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING | |
1389 | TAD RESPNT | |
1390 | DCA AUTO16 | |
1391 | JMP I RESE1 | |
1392 | ||
1393 | MRES, -14 | |
1394 | RESCNT, 0 | |
1395 | RESPNT, 0 | |
1396 | ||
1397 | SETBUF, 0 | |
1398 | CMA /THIS ROUTINE IS CALLED FROM THE | |
1399 | TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL | |
1400 | DCA AUTO16 /THE BUFFER POINTERS AND SO ON | |
1401 | TAD BUFST | |
1402 | DCA BUFTMP | |
1403 | TAD BUFST | |
1404 | DCA RESPNT | |
1405 | TAD BUFST | |
1406 | DCA SETPNT | |
1407 | SETLOP, DCA I SETPNT | |
1408 | ISZ SETPNT | |
1409 | TAD SETPNT | |
1410 | TAD BUFLIM | |
1411 | SZA CLA | |
1412 | JMP SETLOP | |
1413 | JMP I SETBUF | |
1414 | ||
1415 | SETPNT, 0 | |
1416 | ||
1417 | ||
1418 | ||
1419 | / | |
1420 | / THIS HERE NOW THING CHECKS THE COORDINATES OF THE MOST RECENTLY | |
1421 | / DISPLAYED PROJECTILE AGAINST THOSE OF THE SHIPS ON THE SCREEN. | |
1422 | / IF WITH A COLLISION LIMIT A HIT IS RECORDED AND THE LIFE | |
1423 | / COUNT OF THE PROJECTILE ZEROED TO REMOVE IT. A HIT SHIP | |
1424 | / IS SUITABLY FLAGGED | |
1425 | / | |
1426 | ||
1427 | *2000 | |
1428 | ||
1429 | CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT | |
1430 | TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE | |
1431 | SZA CLA | |
1432 | JMP CHECK2 | |
1433 | TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT | |
1434 | SZA CLA | |
1435 | JMP CHECK2 | |
1436 | ||
1437 | TAD PROX /CHECK X COORDINATES OF SHIP ONE | |
1438 | CIA /AND PROJECTILE | |
1439 | TAD ONEPEX /THIS SORT OF THING IS WHY THE | |
1440 | SPA /COORDINATES HAVE TO BE MAINTAINED TO 12 | |
1441 | CIA /BITS | |
1442 | TAD LIMIT /CLOSE ENOUGH? | |
1443 | SMA CLA | |
1444 | JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT | |
1445 | TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y? | |
1446 | CIA | |
1447 | TAD ONEPEY | |
1448 | SPA | |
1449 | CIA | |
1450 | TAD LIMIT | |
1451 | SMA CLA | |
1452 | JMP CHECK2 /NO HIT | |
1453 | ||
1454 | TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT | |
1455 | DCA ONEOUT /ALL THAT IS NECESSARY | |
1456 | JMS CUTOUT /REMOVE PROJECTILE | |
1457 | ||
1458 | ||
1459 | ||
1460 | ||
1461 | CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO | |
1462 | SZA CLA | |
1463 | JMP I CHECK /BUT NOT IF IN HYPERSPACE | |
1464 | TAD TWOOUT /OR IF ALREADY HIT | |
1465 | SZA CLA | |
1466 | JMP I CHECK | |
1467 | ||
1468 | TAD PROX /CHECK X'S FIRST | |
1469 | CIA | |
1470 | TAD TWOPEX | |
1471 | SPA /GET ABSOLUTE VALUE OF DIFFERENCE | |
1472 | CIA | |
1473 | TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY | |
1474 | SMA CLA /LIMIT | |
1475 | JMP I CHECK /NOWHERE NEAR CLOSE | |
1476 | ||
1477 | TAD PROY /NYAH, NYAH | |
1478 | CIA /TRY THE Y'S | |
1479 | TAD TWOPEY | |
1480 | SPA | |
1481 | CIA /ABSOLUTE VALUE OF DIFFERENCE | |
1482 | TAD LIMIT | |
1483 | SMA CLA | |
1484 | JMP I CHECK /CLEAN MISS! | |
1485 | ||
1486 | TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING | |
1487 | DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT | |
1488 | JMS CUTOUT | |
1489 | JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE | |
1490 | ||
1491 | LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT | |
1492 | ||
1493 | CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY | |
1494 | TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE | |
1495 | TAD BUFTMP /COUNT | |
1496 | DCA CUTPNT | |
1497 | DCA I CUTPNT | |
1498 | JMP I CUTOUT | |
1499 | ||
1500 | CUTPNT, 0 | |
1501 | ||
1502 | ||
1503 | ||
1504 | / | |
1505 | / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE | |
1506 | / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED | |
1507 | / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING | |
1508 | / THEIR EXPLOSION COUNTS NON-ZERO. | |
1509 | / | |
1510 | ||
1511 | ||
1512 | COLLID, 0 /HERE TO TEST FOR COLLISION | |
1513 | TAD ONEFLG /NO TEST IF EITHER SHIP IS IN | |
1514 | SZA CLA /HYPERSPACE OR EXPLODING | |
1515 | JMP I COLLID | |
1516 | TAD TWOFLG | |
1517 | SZA CLA | |
1518 | JMP I COLLID | |
1519 | TAD ONEOUT | |
1520 | SZA CLA | |
1521 | JMP I COLLID | |
1522 | TAD TWOOUT | |
1523 | SZA CLA | |
1524 | JMP I COLLID | |
1525 | ||
1526 | TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION | |
1527 | CIA /CHECK X COORDINATES FIRST | |
1528 | TAD TWOPEX | |
1529 | SPA /GET ABSOLUTE VALUE OF DIFFERENCE | |
1530 | CIA | |
1531 | TAD COLLIM /CLOSE ENOUGH? | |
1532 | SMA CLA | |
1533 | JMP I COLLID /NOPE, FORGET IT | |
1534 | ||
1535 | TAD ONEPEY /YES, NOW TRY THE Y COORDINATES | |
1536 | CIA | |
1537 | TAD TWOPEY | |
1538 | SPA | |
1539 | CIA /GET MAGNITUDE ONLY | |
1540 | TAD COLLIM | |
1541 | SMA CLA /CLOSE ENOUGH? | |
1542 | JMP I COLLID | |
1543 | TAD MEXP /YES, SET BOTH EXPLOSION COUNTS | |
1544 | DCA ONEOUT | |
1545 | TAD MEXP | |
1546 | DCA TWOOUT | |
1547 | JMP I COLLID | |
1548 | ||
1549 | COLLIM, -300 | |
1550 | ||
1551 | ||
1552 | / | |
1553 | / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO | |
1554 | / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP | |
1555 | / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM | |
1556 | / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE | |
1557 | / VARIOUS PARAMETERS FOR REENTRY. | |
1558 | / | |
1559 | ||
1560 | *2200 | |
1561 | ||
1562 | HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0 | |
1563 | TAD RTNFLG /SET UP LIST POINTER | |
1564 | SZA CLA | |
1565 | TAD ONEDIF /TO APPROPRIATE SHIP FILE | |
1566 | TAD TWOLST | |
1567 | DCA AUTO15 | |
1568 | ||
1569 | CLCA /SET UP "RANDOM NUMBER GENERATOR" | |
1570 | /USE CLOCK COUNTER FOR THAT PURPOSE | |
1571 | DCA AUTO17 | |
1572 | TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME | |
1573 | AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777 | |
1574 | CIA /UPDATE CYCLES ( ABOUT 15 SECONDS) | |
1575 | DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT | |
1576 | ||
1577 | TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE | |
1578 | JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY | |
1579 | DCA I AUTO15 | |
1580 | TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY | |
1581 | JMS VEESET /COMPONENT | |
1582 | DCA I AUTO15 | |
1583 | TAD I AUTO17 /AND THEN THE Y COMPONENT | |
1584 | JMS VEESET | |
1585 | DCA I AUTO15 | |
1586 | TAD I AUTO17 | |
1587 | DCA I AUTO15 | |
1588 | ||
1589 | TAD I AUTO17 | |
1590 | DCA I AUTO15 | |
1591 | ||
1592 | TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY | |
1593 | AND TIMOUT | |
1594 | TAD MHYP /ABOUT 3/4 CHANCE | |
1595 | SMA CLA | |
1596 | JMP HYPRET /OK | |
1597 | TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET | |
1598 | SZA CLA /UP FOR EXPLOSION ON REENTRY | |
1599 | TAD ONEDIF | |
1600 | TAD OUTLOC | |
1601 | DCA VEESET | |
1602 | TAD MEXP | |
1603 | DCA I VEESET | |
1604 | ||
1605 | HYPRET, ISZ RTNFLG | |
1606 | JMP I TWORTN | |
1607 | JMP I ONERTN | |
1608 | ||
1609 | TIMOUT, 777 | |
1610 | ONEDIF, ONEFLG-TWOFLG | |
1611 | TWOLST, TWOFLG-1 | |
1612 | RTNFLG, 0 | |
1613 | ONERTN, TWOUP | |
1614 | TWORTN, ONESET | |
1615 | OUTLOC, TWOOUT | |
1616 | MHYP, -200 | |
1617 | ||
1618 | ||
1619 | ||
1620 | ||
1621 | VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS | |
1622 | CLL | |
1623 | SPA /GET MAGNITUDE | |
1624 | CML | |
1625 | AND HM177 /LIMIT TO 177 | |
1626 | SZL CLL | |
1627 | CIA | |
1628 | JMP I VEESET /AND EXIT | |
1629 | ||
1630 | HM177, 177 | |
1631 | ||
1632 | ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS | |
1633 | TAD ONETHE /AN EXPLOSION | |
1634 | TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP | |
1635 | DCA ONETHE | |
1636 | JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR | |
1637 | ISZ ONEOUT /DONE WITH THE EXPLOSION? | |
1638 | JMP I NOWTWO /NO, NORMAL RETURN | |
1639 | ||
1640 | IAC /YES, SET INTO PSEUDO HYPER SPACE | |
1641 | DCA ONEFLG | |
1642 | IAC /DISABLE RETURN FROM HYPER SPACE | |
1643 | DCA ONEFIN | |
1644 | ||
1645 | TAD TWOFIN /IS NUMBER TWO STILL AROUND? | |
1646 | SNA CLA | |
1647 | JMP I NOWTWO /YES, RETURN | |
1648 | JMP I TIEUP /NO, TIE BALL GAME | |
1649 | ||
1650 | ||
1651 | ||
1652 | TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO | |
1653 | TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND | |
1654 | TAD INCTWO | |
1655 | DCA TWOTHE | |
1656 | JMS I IXPDIS /THEN DISPLAY IT | |
1657 | ISZ TWOOUT /DONE WITH EXPLOSION? | |
1658 | JMP I NOWPRO /NO, NORMAL RETURN | |
1659 | ||
1660 | IAC /YES, SEND INTO PSEUDO HYPER SPACE | |
1661 | DCA TWOFLG | |
1662 | IAC /DISABLE NORMAL RETURN FROM HYPERSPACE | |
1663 | DCA TWOFIN | |
1664 | /CHECK NUMBER ONE | |
1665 | TAD ONEFIN | |
1666 | SZA CLA /STILL ALIVE AND WELL? | |
1667 | JMP I TIEUP /NO, TIE GAME | |
1668 | JMP I NOWPRO /YES, CONTINUE ON | |
1669 | NOWTWO, TWODIS | |
1670 | NOWPRO, PRODIS | |
1671 | TIEUP, NOWIN | |
1672 | IXPDIS, EXPDIS | |
1673 | INCONE, 55 | |
1674 | INCTWO, 55 | |
1675 | ||
1676 | ||
1677 | ||
1678 | / | |
1679 | / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS | |
1680 | / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL | |
1681 | / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS | |
1682 | / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S | |
1683 | / A SORT OF CLOBBY EXPLOSION. | |
1684 | / | |
1685 | ||
1686 | *2400 | |
1687 | ||
1688 | EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT | |
1689 | TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY | |
1690 | DCA XTWODS /SET UP BY FILDIS OR TWODIS | |
1691 | TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE | |
1692 | DCA YTWODS | |
1693 | ||
1694 | TAD XTWODS | |
1695 | CIA /CALCULATE INCREMENT THE WRONG WAY | |
1696 | TAD XONEDS | |
1697 | DCA DIXTEM /AND STORE | |
1698 | TAD YTWODS | |
1699 | CIA | |
1700 | TAD YONEDS | |
1701 | DCA DIYTEM /SAME FOR Y | |
1702 | ||
1703 | TAD M4 /4 DOTS IN THE VECTOR" | |
1704 | DCA DISCNT /COULD HAVE CALLED THE OTHER | |
1705 | /VECTOR GENERATOR I SUPPOSE | |
1706 | EXPLOP, TAD XONEDS | |
1707 | TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING | |
1708 | DCA XONEDS /TOTALS AND DISPLAY THE RUNNING | |
1709 | TAD YONEDS /TOTALS NORMAL SIZE | |
1710 | TAD DIYTEM | |
1711 | DCA YONEDS | |
1712 | ||
1713 | TAD XONEDS | |
1714 | / RTR /COULD MAKE TWICE AS BIG BY NOP-ING | |
1715 | / RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH | |
1716 | JMS I IVCLDX /AS IT IS | |
1717 | CLA | |
1718 | TAD YONEDS | |
1719 | / RTR | |
1720 | / RAR | |
1721 | JMS I IVCLDY | |
1722 | / DISD | |
1723 | / JMP .-1 | |
1724 | / DIXY | |
1725 | ||
1726 | CLA | |
1727 | ISZ DISCNT /DONE 4 DOTS? | |
1728 | JMP EXPLOP /NO | |
1729 | ||
1730 | ISZ AUTO11 /DONE ALL VECTORS IN THE FILE? | |
1731 | SKP | |
1732 | JMP I EXPDIS /YES, EXIT | |
1733 | ||
1734 | TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS | |
1735 | DCA XONEDS | |
1736 | TAD YTWODS | |
1737 | DCA YONEDS | |
1738 | JMP EXPDIS+1 | |
1739 | ||
1740 | ||
1741 | ||
1742 | ||
1743 | / | |
1744 | / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS. | |
1745 | / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140 | |
1746 | / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED | |
1747 | / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y | |
1748 | / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT | |
1749 | / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE | |
1750 | / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE. | |
1751 | / | |
1752 | ||
1753 | ||
1754 | VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN | |
1755 | DCA VEEHLD /AC | |
1756 | TAD VEEHLD | |
1757 | SMA /BRANCH FOR POSITIVE OR NEGATIV | |
1758 | JMP VEEPOS | |
1759 | TAD VEEMAX | |
1760 | SMA CLA /GREATER THAN MAXIMUM POSITIVE? | |
1761 | JMP VEECLR /NO | |
1762 | TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET | |
1763 | JMP I VEELIM /TO MAX NEGATIV | |
1764 | ||
1765 | VEEPOS, TAD VEEMIN /GREATER THAN MAX? | |
1766 | SPA CLA | |
1767 | JMP VEECLR /NO | |
1768 | TAD VEEMAX /YES SET TO MAX | |
1769 | JMP I VEELIM | |
1770 | ||
1771 | VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG | |
1772 | JMP I VEELIM | |
1773 | ||
1774 | VEEHLD, 0 | |
1775 | VEEMIN, -140 | |
1776 | VEEMAX, 140 | |
1777 | ||
1778 | THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE | |
1779 | SMA /0-550 OR 0-360 DEGREES. THIS IS | |
1780 | JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW | |
1781 | TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE | |
1782 | JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC | |
1783 | TAD M550 /MODULO 360 AND EXITS | |
1784 | SMA | |
1785 | JMP .-2 | |
1786 | TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T | |
1787 | JMP I THEAJI | |
1788 | ||
1789 | ||
1790 | ||
1791 | / | |
1792 | / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED. | |
1793 | / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND | |
1794 | / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE | |
1795 | / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY | |
1796 | / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF | |
1797 | / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT | |
1798 | / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE | |
1799 | / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE | |
1800 | / INTERGALACTIC DUST. | |
1801 | / | |
1802 | ||
1803 | ||
1804 | ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET | |
1805 | TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR | |
1806 | DCA MESS /AND SET GAMOVR FLAG | |
1807 | IAC | |
1808 | DCA GAMOVR | |
1809 | JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE | |
1810 | ||
1811 | TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET | |
1812 | TAD MES2 /AND TWO FIN IS NOT | |
1813 | DCA MESS /SET ALSO GAMOVR | |
1814 | IAC | |
1815 | DCA GAMOVR | |
1816 | JMP I TWOWIN | |
1817 | ||
1818 | NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN | |
1819 | DCA MESS /ARE SET . | |
1820 | IAC | |
1821 | DCA GAMOVR /NOBODY EVER REALLY WINDS | |
1822 | /UP THE WINNER IN THESE THINGS | |
1823 | JOBLOP, | |
1824 | / DSB 1 /THIS IS ENTERED FROM FINISH WHEN | |
1825 | TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY | |
1826 | JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN | |
1827 | TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT | |
1828 | JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED | |
1829 | TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS | |
1830 | JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED | |
1831 | TAD MES3 | |
1832 | JMS I MESOUT | |
1833 | /FINITO, JMP JOBLOP | |
1834 | FINITO, JMP . | |
1835 | ||
1836 | MES0, MESS0 | |
1837 | MES1, MESS1 | |
1838 | MES2, MESS2 | |
1839 | MES3, MESS3 | |
1840 | MES4, MESS4 | |
1841 | MES5, MESS5 | |
1842 | MESS, 0 | |
1843 | ||
1844 | ||
1845 | ||
1846 | / | |
1847 | / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED | |
1848 | / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER | |
1849 | / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT | |
1850 | / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES | |
1851 | / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES | |
1852 | / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER | |
1853 | / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT | |
1854 | / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE | |
1855 | / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO | |
1856 | / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN | |
1857 | / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH | |
1858 | / THIS WAS STOLEN HAD FULL WORD PRECISION. | |
1859 | / | |
1860 | ||
1861 | *6400 | |
1862 | ||
1863 | SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT | |
1864 | DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD | |
1865 | TAD SINEIN | |
1866 | DCA I SINPSH | |
1867 | ISZ SINPSH | |
1868 | TAD SINARG | |
1869 | SZA | |
1870 | JMP SINNG2 | |
1871 | ||
1872 | SINPOP, CLA CLL CMA | |
1873 | TAD SINPSH | |
1874 | DCA SINPSH | |
1875 | TAD I SINPSH | |
1876 | DCA SINEIN | |
1877 | TAD SINARG | |
1878 | JMP I SINEIN | |
1879 | ||
1880 | SINNG2, SMA | |
1881 | JMP SINPOS | |
1882 | CIA | |
1883 | JMS SINEIN | |
1884 | ||
1885 | SINNEG, CIA | |
1886 | DCA SINARG | |
1887 | JMP SINPOP | |
1888 | ||
1889 | SINPOS, TAD M264 | |
1890 | SPA | |
1891 | JMP .+2 | |
1892 | JMP SINNEG-1 | |
1893 | TAD P132 | |
1894 | SPA | |
1895 | JMP SINELK | |
1896 | SZA CLA | |
1897 | JMP .+3 | |
1898 | TAD P37 | |
1899 | JMP SINNEG+1 | |
1900 | ||
1901 | TAD SINARG | |
1902 | TAD M264 | |
1903 | JMP SINNEG-1 | |
1904 | ||
1905 | SINELK, TAD P132 | |
1906 | TAD SINTAB | |
1907 | DCA SINEIN | |
1908 | TAD I SINEIN | |
1909 | DCA SINARG | |
1910 | JMP SINPOP | |
1911 | ||
1912 | ||
1913 | ||
1914 | ||
1915 | SINARG, 0 | |
1916 | SINPSH, SINLST | |
1917 | SINLST, 0 | |
1918 | 0 | |
1919 | 0 | |
1920 | 0 | |
1921 | 0 | |
1922 | 0 | |
1923 | ||
1924 | SINTAB, SINES-1 | |
1925 | ||
1926 | COSINI, 0 | |
1927 | CIA | |
1928 | TAD P132 | |
1929 | JMS SINEIN | |
1930 | JMP I COSINI | |
1931 | ||
1932 | ||
1933 | ||
1934 | ||
1935 | SINES, 00 /1 | |
1936 | 01 /2 | |
1937 | 01 /3 | |
1938 | 02 /4 | |
1939 | 02 /5 | |
1940 | 03 /6 | |
1941 | 03 /7 | |
1942 | 04 /8 | |
1943 | 05 /9 | |
1944 | 05 /10 | |
1945 | 06 /11 | |
1946 | 06 /12 | |
1947 | 07 /13 | |
1948 | 07 /14 | |
1949 | 10 /15 | |
1950 | 10 /16 | |
1951 | 11 /17 | |
1952 | 11 /18 | |
1953 | 12 /19 | |
1954 | 12 /20 | |
1955 | 13 /21 | |
1956 | 13 /22 | |
1957 | 14 /23 | |
1958 | 15 /24 | |
1959 | 15 /25 | |
1960 | 16 /26 | |
1961 | 16 /27 | |
1962 | 17 /28 | |
1963 | 17 /29 | |
1964 | 20 /30 | |
1965 | 20 /31 | |
1966 | 20 /32 | |
1967 | 21 /33 | |
1968 | 21 /34 | |
1969 | 22 /35 | |
1970 | 22 /36 | |
1971 | 23 /37 | |
1972 | 23 /38 | |
1973 | 24 /39 | |
1974 | 24 /40 | |
1975 | 25 /41 | |
1976 | 25 /42 | |
1977 | 25 /43 | |
1978 | 26 /44 | |
1979 | 26 /45 | |
1980 | 27 /46 | |
1981 | 27 /47 | |
1982 | 27 /48 | |
1983 | 30 /49 | |
1984 | 30 /50 | |
1985 | 30 /51 | |
1986 | 31 /52 | |
1987 | 31 /53 | |
1988 | 31 /54 | |
1989 | 32 /55 | |
1990 | 32 /56 | |
1991 | 32 /57 | |
1992 | 33 /58 | |
1993 | 33 /59 | |
1994 | 33 /60 | |
1995 | 33 /61 | |
1996 | 34 /62 | |
1997 | 34 /63 | |
1998 | 34 /64 | |
1999 | 35 /65 | |
2000 | 35 /66 | |
2001 | 35 /67 | |
2002 | 35 /68 | |
2003 | 35 /69 | |
2004 | 36 /70 | |
2005 | 36 /71 | |
2006 | 36 /72 | |
2007 | 36 /73 | |
2008 | 36 /74 | |
2009 | 36 /75 | |
2010 | 37 /76 | |
2011 | 37 /77 | |
2012 | 37 /78 | |
2013 | 37 /79 | |
2014 | 37 /80 | |
2015 | 37 /81 | |
2016 | 37 /82 | |
2017 | 37 /83 | |
2018 | 37 /84 | |
2019 | 37 /85 | |
2020 | 37 /86 | |
2021 | 37 /87 | |
2022 | 37 /88 | |
2023 | 37 /89 | |
2024 | ||
2025 | ||
2026 | ||
2027 | ||
2028 | MULTI, 0 /THIS IS STANDARD SINGLE PRECISION | |
2029 | CLL /MULTIPLY ROUTINE WHICH WAS ONCE | |
2030 | SPA /USED. I'VE LEFT IT IN SINCE | |
2031 | CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND | |
2032 | DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT | |
2033 | DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE | |
2034 | TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT | |
2035 | SNA /LABELS | |
2036 | JMP MULPSN+2 | |
2037 | SPA | |
2038 | CMA CML IAC | |
2039 | DCA MULMP2 | |
2040 | TAD MULTHR | |
2041 | DCA MULMP3 | |
2042 | ||
2043 | MULMP4, TAD MULMP1 | |
2044 | RAR | |
2045 | DCA MULMP1 | |
2046 | TAD MULMP5 | |
2047 | SZL | |
2048 | TAD MULMP2 | |
2049 | CLL RAR | |
2050 | DCA MULMP5 | |
2051 | ISZ MULMP3 | |
2052 | JMP MULMP4 | |
2053 | TAD MULMP1 | |
2054 | RAR | |
2055 | MULPSN, SZL | |
2056 | JMP MULCMP | |
2057 | DCA MULMP1 | |
2058 | TAD MULMP5 | |
2059 | MULMPZ, ISZ MULTI | |
2060 | JMP I MULTI | |
2061 | ||
2062 | MULCMP, CMA CLL IAC | |
2063 | DCA MULMP1 | |
2064 | TAD MULMP5 | |
2065 | CMA | |
2066 | SZL | |
2067 | IAC | |
2068 | JMP MULMPZ | |
2069 | ||
2070 | MULTHR, 7764 | |
2071 | MULMP1, 0 | |
2072 | MULMP5, 0 | |
2073 | MULMP2, 0 | |
2074 | MULMP3, 0 | |
2075 | ||
2076 | ||
2077 | ||
2078 | / | |
2079 | / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE | |
2080 | / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS | |
2081 | / | |
2082 | ||
2083 | ||
2084 | SHIFTR, 0 | |
2085 | CLL | |
2086 | SPA | |
2087 | CML IAC | |
2088 | RAR | |
2089 | JMP I SHIFTR | |
2090 | ||
2091 | ||
2092 | / | |
2093 | / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS | |
2094 | / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING | |
2095 | / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION | |
2096 | / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND | |
2097 | / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR | |
2098 | / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER | |
2099 | / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT.... | |
2100 | / | |
2101 | ||
2102 | POSCAL, 0 | |
2103 | TAD CALSIN | |
2104 | ||
2105 | DCA T10SIN | |
2106 | TAD T10SIN | |
2107 | CLL RAL | |
2108 | DCA T20SIN | |
2109 | TAD T10SIN | |
2110 | TAD T20SIN | |
2111 | DCA T30SIN | |
2112 | ||
2113 | TAD CALCOS | |
2114 | ||
2115 | DCA T10COS | |
2116 | TAD T10COS | |
2117 | CLL RAL | |
2118 | DCA T20COS | |
2119 | TAD T10COS | |
2120 | TAD T20COS | |
2121 | DCA T30COS | |
2122 | JMP I POSCAL | |
2123 | ||
2124 | /**************************************************************** | |
2125 | / VC8-E ROUTINES | |
2126 | ||
2127 | ||
2128 | /***************************** | |
2129 | / DIVISION BY 4 ROUTINE | |
2130 | VDIV, 0 | |
2131 | SMA / SKIP IF MINUS | |
2132 | JMP VPLUS | |
2133 | VMINUS, CMA IAC / COMPLEMENT | |
2134 | RTR / DIVIDE BY FOUR | |
2135 | AND P1777 / DELETE UPPER TWO BITS | |
2136 | CMA IAC | |
2137 | JMP I VDIV / RETURN | |
2138 | ||
2139 | VPLUS, RTR / DIVIDE BY FOUR | |
2140 | AND P1777 | |
2141 | JMP I VDIV | |
2142 | ||
2143 | /***************************** | |
2144 | / DIVISION BY 6 ROUTINE | |
2145 | VDIV6, 0 | |
2146 | SMA | |
2147 | JMP VPLUS6 /DO IN OTHER PLACE | |
2148 | VMIN6, CIA /COMPLEMENT, NOW AC POSITIVE | |
2149 | JMS DIV6 /CALL DIVISION ROUTINE | |
2150 | CMA IAC /COMPLEMENT AGAIN | |
2151 | JMP I VDIV6 | |
2152 | ||
2153 | VPLUS6, JMS DIV6 /CALL DIVISION ROUTINE | |
2154 | JMP I VDIV6 /RETURN TO CALLER | |
2155 | ||
2156 | / EAE ROUTINE | |
2157 | DIV6, 0 | |
2158 | SWBA | |
2159 | MQL /LOAD MQ | |
2160 | MUY | |
2161 | 3 | |
2162 | DVI | |
2163 | 20 | |
2164 | SWP | |
2165 | JMP I DIV6 | |
2166 | ||
2167 | / SOFTWARE DIVISION ROUTINE (DOES NOT FIT!) | |
2168 | IFNZRO 0 < | |
2169 | DIV3, 0 | |
2170 | DCA REST /INIT DIVISION REST | |
2171 | DCA RESLT /INIT RESULT | |
2172 | ||
2173 | TAD (6000 /INITIAL DIVISOR * 2 | |
2174 | DCA DIVI /STORE DYNAMIC DIVISOR | |
2175 | ||
2176 | TAD (-12 /LOOP COUNTER, -10 (DEC) | |
2177 | DCA DCNT | |
2178 | ||
2179 | DLOOP, /DIVISION LOOP | |
2180 | ||
2181 | TAD RESLT | |
2182 | RAL | |
2183 | DCA RESLT | |
2184 | ||
2185 | TAD DIVI /CURRENT DIVISOR | |
2186 | RAR /ROTATE RIGHT | |
2187 | DCA DIVI | |
2188 | ||
2189 | TRY, TAD DIVI | |
2190 | CMA IAC /NEGATE | |
2191 | TAD REST /SUBSTRACT FROM REST | |
2192 | SPA | |
2193 | JMP BAD | |
2194 | GOOD, /HIT! | |
2195 | CLL | |
2196 | DCA REST | |
2197 | ISZ RESLT | |
2198 | ||
2199 | BAD, /NO HIT, NO STORE, NO NOTHING | |
2200 | CLA | |
2201 | ||
2202 | ISZ DCNT | |
2203 | JMP DLOOP /LOOP AGAIN | |
2204 | ||
2205 | TAD RESLT | |
2206 | JMP I DIV3 | |
2207 | ||
2208 | DCNT, 0 | |
2209 | RESLT, 0 | |
2210 | REST, 0 | |
2211 | DIVI, 0 | |
2212 | > | |
2213 | ||
2214 | /***** | |
2215 | ||
2216 | VCLDX, 0 / INTENSIFY LAST POINT AND LOAD NEW X VALUE | |
2217 | JMS VDIV6 / DIVIDE BY SIX | |
2218 | DISD / DISPLAY READY? | |
2219 | JMP .-1 / WAIT. | |
2220 | DIXY / INTENSIFY | |
2221 | DILX / LOAD NEW X VALUE | |
2222 | JMP I VCLDX / RETURN | |
2223 | ||
2224 | VCLDY, 0 | |
2225 | JMS VDIV / DIVIDE BY FOUR | |
2226 | DILY / LOAD NEW Y VALUE | |
2227 | JMP I VCLDY | |
2228 | ||
2229 | P1777, 1777 | |
2230 | ||
2231 | ||
2232 | /**************************************************************** | |
2233 | ||
2234 | ||
2235 | *7000 | |
2236 | ||
2237 | /GENERAL PURPOSE SYMBOL GENERATOR | |
2238 | / | |
2239 | CHARS, 0 /ENTRY TO PLOT CHARACTER STRING | |
2240 | DCA ADDR /STORE STRING ADDRESS | |
2241 | TAD I ADDR /FETCH DOUBLE CHARACTER | |
2242 | RTR /SHIFT | |
2243 | RTR / FOR FIRST | |
2244 | RTR / CHARACTER | |
2245 | JMS CHAR /PLOT CHARACTER | |
2246 | SKP /NORMAL RETURN -- SKIP | |
2247 | JMP I CHARS /TERMINATION RETURN -- EXIT | |
2248 | TAD I ADDR /RECALL DOUBLE CHARACTER | |
2249 | ISZ ADDR /ADVANCE STRING ADDRESS | |
2250 | JMS CHAR /PLOT CHARACTER | |
2251 | JMP CHARS+2 /NORMAL RETURN -- REPEAT | |
2252 | JMP I CHARS /TERMINATION RETURN -- EXIT | |
2253 | / | |
2254 | CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER | |
2255 | AND K77 /MASK OUT UPPER BITS | |
2256 | CLL RAL /MULTIPLY CODE BY TWO | |
2257 | TAD TABLE /ADD TABLE BASE ADDRESS | |
2258 | DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE | |
2259 | CMA /INITIALIZE COUNTER FOR | |
2260 | DCA COUNT2 / TWO PLOT WORDS | |
2261 | TAD I POINT /FETCH FIRST PLOT WORD | |
2262 | ISZ POINT /INCREMENT POINTER FOR NEXT ONE | |
2263 | SNA /SKIP IF NOT SPECIAL CHARACTER | |
2264 | JMP SPCHAR /ELSE GO PROCESS IT | |
2265 | DCA CURPLT /SAVE CURRENT PLOT BITS | |
2266 | XPLOT, TAD KM6 /INITIALIZE 6-BIT | |
2267 | DCA COUNT6 / COUNTER | |
2268 | TAD YVALUE /RESET Y TEMPORARY | |
2269 | DCA YTEMP / VALUE FOR CHARACTER | |
2270 | TAD XVALUE /OUTPUT CURRENT | |
2271 | DILX /X-VALUE TO CRT | |
2272 | TAD XINCR /INCREMENT | |
2273 | DCA XVALUE / ABSCISSA | |
2274 | YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS | |
2275 | CLL RAL /GET NEXT BIT | |
2276 | DCA CURPLT /SAVE REMAINING PLOT BITS | |
2277 | SNL /SKIP IF POINT TO PLOT | |
2278 | JMP CNTINU /ELSE JUMP AHEAD | |
2279 | TAD YTEMP /OUTPUT CURRENT | |
2280 | DILY /Y-VALUE TO CRT | |
2281 | DISD / READY TO DISPLAY THE POINT? | |
2282 | JMP .-1 / NO, WE'LL WAIT. | |
2283 | DIXY / SHOOT THE BEAM! | |
2284 | ||
2285 | CLA CLL /CLEAR AC | |
2286 | TAD CURPLT /RECALL CURRENT PLOT BITS | |
2287 | SNA CLA /SKIP IF POINTS REMAINING | |
2288 | JMP WRDEND /ELSE WORD IS FINISHED | |
2289 | CNTINU, TAD YTEMP /INCREMENT TEMPORARY | |
2290 | TAD YINCR / Y-VALUE FOR NEXT | |
2291 | DCA YTEMP / CHARACTER STEP | |
2292 | ISZ COUNT6 /SKIP IF 6 BITS PLOTTED | |
2293 | JMP YPLOT /ELSE PLOT NEXT ONE | |
2294 | JMP XPLOT /GO UPDATE X-VALUE | |
2295 | WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD | |
2296 | JMP EXIT /ELSE EXIT | |
2297 | TAD I POINT /FETCH SECOND BIT WORD | |
2298 | SZA /SKIP IF NO PLOT POINTS | |
2299 | JMP XPLOT-1 /ELSE GO PLOT THEM | |
2300 | EXIT, TAD XVALUE /INCREMENT ABSCISSA | |
2301 | TAD XINCR / FOR SPACE BETWEEN | |
2302 | DCA XVALUE / SYMBOLS | |
2303 | JMP I CHAR /EXIT FROM CHAR | |
2304 | / | |
2305 | SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR | |
2306 | DCA POINT /STORE AS INDIRECT ADDRESS | |
2307 | ||
2308 | JMP I POINT /GO TO APPROPRIATE ROUTINE | |
2309 | SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT | |
2310 | CLL RTL /MULTIPLY BY FOUR AND | |
2311 | JMP EXIT / GO CREATE SPACE | |
2312 | CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X | |
2313 | DCA XVALUE / TO ITS ORIGINAL VALUE | |
2314 | LF, TAD YINCR /"LINE FEED" | |
2315 | CLL RTL / DECREMENTS THE | |
2316 | CLL CIA RAL / Y-VALUE BY | |
2317 | TAD YVALUE / EIGHT SCALE | |
2318 | DCA YVALUE / STEPS | |
2319 | JMP I CHAR /EXIT FROM CHAR | |
2320 | RESET, TAD INITX /"RESET" RESETS | |
2321 | DCA XVALUE / X AND Y TO | |
2322 | TAD INITY / THEIR ORIGINAL | |
2323 | JMP RESET-2 / VALUES | |
2324 | TERM, ISZ CHAR /TERMINATE CODE CAUSES | |
2325 | JMP I CHAR / EXIT TO P+2 | |
2326 | / | |
2327 | INITX, 0 /INITIAL X-VALUE | |
2328 | INITY, 327 /INITIAL Y-VALUE | |
2329 | XVALUE, 0 /CURRENT X-VALUE | |
2330 | YVALUE, 0 /CURRENT Y-VALUE | |
2331 | XINCR, 6 /BASIC X INCREMENT VALUE | |
2332 | YINCR, 10 /BASIC Y INCREMENT VALUE | |
2333 | YTEMP, 0 /TEMPORARY Y-VALUE | |
2334 | CURPLT, 0 /CURRENT PLOT BITS | |
2335 | ADDR, 0 /CURRENT STRING ADDRESS | |
2336 | COUNT6, 0 /6-BIT COUNTER | |
2337 | COUNT2, 0 /2-WORD COUNTER | |
2338 | KM6, -6 /CONSTANT FOR COUNT6 | |
2339 | K77, 77 /CHARACTER CODE MASK | |
2340 | POINT, 0 /TABLE POINTER | |
2341 | / | |
2342 | ||
2343 | ||
2344 | / | |
2345 | TABLE, .+1 /TABLE BASE ADDRESS | |
2346 | 0 /SPECIAL CHARACTER (00) | |
2347 | TERM /TERMINATION CODE | |
2348 | 7611 / A | |
2349 | 1176 | |
2350 | 7745 / B | |
2351 | 4532 | |
2352 | 3641 / C | |
2353 | 4122 | |
2354 | 7741 / D | |
2355 | 4136 | |
2356 | 7745 / E | |
2357 | 4541 | |
2358 | 7705 / F | |
2359 | 501 | |
2360 | 7741 / G | |
2361 | 5173 | |
2362 | 7710 / H | |
2363 | 1077 | |
2364 | 4177 / I | |
2365 | 4100 | |
2366 | 2040 / J | |
2367 | 4037 | |
2368 | 7714 / K | |
2369 | 2241 | |
2370 | 7740 / L | |
2371 | 4040 | |
2372 | 7702 / M | |
2373 | 277 | |
2374 | 7706 / N | |
2375 | 3077 | |
2376 | 7741 / O | |
2377 | 4177 | |
2378 | 7705 / P | |
2379 | 502 | |
2380 | 3641 / Q | |
2381 | 6176 | |
2382 | 7715 / R | |
2383 | 2542 | |
2384 | 2245 / S | |
2385 | 5122 | |
2386 | 177 / T | |
2387 | 100 | |
2388 | 3740 / U | |
2389 | 4037 | |
2390 | 1720 / V | |
2391 | 4037 | |
2392 | 7730 / W | |
2393 | 3077 | |
2394 | 4136 / X | |
2395 | 3641 | |
2396 | 374 / Y | |
2397 | 7403 | |
2398 | 6151 / Z | |
2399 | 4543 | |
2400 | 7741 / [ | |
2401 | 0 | |
2402 | 204 / \ | |
2403 | 1020 | |
2404 | 4177 / ] | |
2405 | 0 | |
2406 | 436 / ^ | |
2407 | 400 | |
2408 | 0 /SPECIAL CHARACTER (37) | |
2409 | RESET /RESET | |
2410 | 0 /SPECIAL CHARACTER (40) | |
2411 | SPACE /SPACE | |
2412 | 5600 / ! | |
2413 | 0 | |
2414 | 303 / " | |
2415 | 0 | |
2416 | 1477 / # | |
2417 | 7714 | |
2418 | 2277 / MARKER | |
2419 | 2200 | |
2420 | 2313 / % | |
2421 | 6462 | |
2422 | 7777 / BLOCK | |
2423 | 7777 | |
2424 | 300 / ' | |
2425 | 0 | |
2426 | 3641 / ( | |
2427 | 0 | |
2428 | 4136 / ) | |
2429 | 0 | |
2430 | 4040 / UNDERSCORE (52) | |
2431 | 4040 | |
2432 | 1034 / + | |
2433 | 1000 | |
2434 | 0 /SPECIAL CHARACTER (54) | |
2435 | LF /LINE FEED | |
2436 | 1010 / - | |
2437 | 1000 | |
2438 | 4000 / . | |
2439 | 0 | |
2440 | 2010 / / | |
2441 | 402 | |
2442 | 3641 / 0 | |
2443 | 4136 | |
2444 | 4442 / 1 | |
2445 | 7740 | |
2446 | 4261 / 2 | |
2447 | 5146 | |
2448 | 2145 / 3 | |
2449 | 5321 | |
2450 | 1710 / 4 | |
2451 | 1077 | |
2452 | 4745 / 5 | |
2453 | 4531 | |
2454 | 7750 / 6 | |
2455 | 5070 | |
2456 | 6111 / 7 | |
2457 | 503 | |
2458 | 2255 / 8 | |
2459 | 5522 | |
2460 | 705 / 9 | |
2461 | 577 | |
2462 | 2400 / : | |
2463 | 0 | |
2464 | 0 /SPECIAL CHARACTER (73) | |
2465 | CRLF /CARRIAGE RETURN; LINE FEED | |
2466 | 1024 / > | |
2467 | 4200 | |
2468 | 1212 / = | |
2469 | 1200 | |
2470 | 4224 / < | |
2471 | 1000 | |
2472 | 255 / ? | |
2473 | 300 | |
2474 | ||
2475 | ||
2476 | ||
2477 | / | |
2478 | / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS | |
2479 | / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE | |
2480 | / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN. | |
2481 | / | |
2482 | ||
2483 | MESS0, 3773 | |
2484 | MESS5, 7340 | |
2485 | 4040 | |
2486 | 4040 | |
2487 | 4000 | |
2488 | ||
2489 | MESS1, 1716 | |
2490 | 0500 | |
2491 | ||
2492 | MESS2, 2427 | |
2493 | 1700 | |
2494 | ||
2495 | MESS3, 2711 | |
2496 | 1623 | |
2497 | 4100 | |
2498 | ||
2499 | MESS4, 1617 | |
2500 | 0217 | |
2501 | 0431 | |
2502 | 0000 | |
2503 | ||
2504 | *7400 | |
2505 | ||
2506 | DISBUF, 0 | |
2507 | ||
2508 | / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO | |
2509 | / AROUND 7575 OR SO. | |
2510 | / | |
2511 | / | |
2512 | / | |
2513 | / | |
2514 | / | |
2515 | ||
2516 | ||
2517 | ||
2518 | ||
2519 | $ | |
2520 | ||
2521 | //////////////////////////// | |
2522 | / | |
2523 | / THIS IS THE END | |
2524 | / | |
2525 | /////////////////////////// | |
2526 | ||
2527 | ||
2528 | ||
2529 | ||
2530 | ||
2531 |