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