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