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