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