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