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