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