3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR
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.
14 / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD
15 / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP
18 / THE COMMAND WORD BIT ASSIGNMENTS ARE:
20 / SR BIT: C: FUNCTION:
22 / 0 0 SHIP ONE ROTATES LEFT
24 / 1 1 SHIP ONE ROTATES RIGHT
26 / 2 2 SHIP ONE ACCELERATES
32 / 8 4 SHIP TWO ROTATES LEFT
34 / 9 5 SHIP TWO ROTATES RIGHT
36 / 10 6 SHIP TWO ACCELERATES
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.
51 /****************************************************************
53 /***************************
56 CLZE=6130 / CLEAR CLOCK ENABLE REGISTER PER AC
57 CLSK=6131 / SKIP ON CLOCK FLAG
58 CLOE=6132 / SET CLOCK ENABLE REGISTER PER AC
59 CLAB=6133 / AC REGISTER TO CLOCK COUNTER REGISTER
60 CLEN=6134 / CLOCK ENABLE REGISTER TO AC
61 CLSA=6135 / STATUS TO AC
62 CLBA=6136 / CLOCK BUFFER REGISTER TO AC
63 CLCA=6137 / CLOCK COUNTER REGISTER TO AC
65 / BITS IN CLOCK ENABLE REGISTER
66 CREXT=0100 / EXTERNAL SOURCE
67 CR2=0200 / 10**2 per second
68 CR3=0300 / 10**3 per second
69 CR4=0400 / 10**4 per second
70 CR5=0500 / 10**5 per second
71 CR6=0600 / 10**6 per second
74 CMFREE=0000 / 4096 FIXED FREE RUN
75 CMPROG=1000 / PROGRAMMED DELAY
77 CADC=0040 / START ADC ON OVERFLOW
78 CINH=0020 / INHIBIT CLOCK
79 CION=0010 / INTERRUPT ENABLE
81 CEV3=0004 / EVENT 3 ENABLED
82 CEV2=0002 / EVENT 2 ENABLED
83 CEV1=00001 / EVENT 1 ENABLED
89 DILE=6056 / LOAD ENABLES FROM A
90 DISD=6052 / TEST FOR READY
92 /****************************************************************
93 / SYMBOL DEFINITIONS FOR PAL8-PAL10
95 XRIN=NOP / DIGITAL INPUT?
98 /DSB=XXXX / SET BRIGHTNESS - MUST BE COMMENTED OUT!!!
100 DXC=JMS I IVCLDX / X VALUE CONTROL?
101 DYC=JMS I IVCLDY / Y VALUE CONTROL?
103 DXL=0000 / X VALUE LOAD FLAG?
104 DYL=0000 / Y VALUE LOAD FLAG?
105 DIS=0000 / ANOTHER STRANGE FLAG
107 /CRF=NOP / WHICH FLAG???
111 /****************************************************************
113 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR
114 / REAL WORLD TIMING PURPOSES.
119 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT
120 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE
123 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR
124 ODT1, 0 /DEBUGGERS, ETC.
129 / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF
130 / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT
131 / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF
147 / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS
148 / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS
149 / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED
150 / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED
155 ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION
156 ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED
157 ONEFLG, 0 /IN OR OUT OF NORMAL SPACE
158 ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN
159 ONEVEX, 0 /X COMPONENT OF VELOCITY
160 ONEVEY, 0 /Y COMPONENT OF VELOCITY
161 ONEPEX, 0 /X POSITION (12 BITS)
162 ONEPEY, 0 /Y POSITION (12 BITS)
163 ONESIN, 0 /SINE OF ANGLE
164 ONECOS, 0 /COSINE OF ANGLE
165 ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT
167 TWOOUT, 0 /SAME CONTENT AND ORDER
181 / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN
182 / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN
183 / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM
196 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST
197 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES.
210 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON
267 / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200.
268 / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED,
269 / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES
270 / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR
271 / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT
272 / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08
273 / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY
274 / FILE UPDATE TO START OFF THE GAME.
279 START, CLA CLL /START OR RESTART HERE ANY OLD TIME
280 DIXY /TO GET THE VC8-E STARTED ONCE
284 TAD XROPT /USE THE BLUE RIBBON CONNECTOR
285 DCA COLDST /AND LEAVE IN THE TRAP LOCATION
291 TAD P17 /FIRST CLEAR THE POSITION AND DATA
292 DCA AUTO10 /TABLES OF THE TWO SHIPS
299 TAD STRT1 /SET THE STARTING POSITIONS OF THE
300 DCA ONEPEX /TWO SHIPS
303 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE
306 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP
307 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE
309 DCA ONEFIN /CLEAR ALL GAME END FLAGS
312 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS
315 TCF /CLEAR OTHER REMAINING LIKELY FLAGS
320 CLZE / CLEAR CLOCK CONFIG REGISTER
322 TAD CDELY / LOAD NEG DELAY
323 CLAB / LOAD TO CLOCK BUFFER
325 TAD CCNF / LOAD CLOCK CONFIG
326 CLOE / SET CONFIG BITS
329 JMP COLDST /AND GO TO IT
331 CCNF, CR4+CMPROG+CION+COVSTAT / CLOCK CONFIGURATION
332 CDELY, -310 / COUNTER PRESET (200)
335 / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE
336 / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE
337 / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT
338 / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER
339 / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN.
342 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW.
344 COLDST, 0 /TRAP TO READ SR OR BRC
346 DCA INTWRD /STORE TEMPORARILY
347 TAD INTWRD /MASK OUT LEFTMOST 4 BITS
351 DCA INTTEM /AND STORE
352 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO
354 TAD INTTEM /ADD TOGETHER
355 JMP .+3 /AND CONTINUE
357 CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR
360 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT
362 ION /GET READY FOR THE NEXT CYCLE
363 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME?
364 IAC /ONLY WHEN ACCFLG=0
366 TAD ACCPER /IF ZERO, RESET COUNT
369 JMP I .+1 /NOW GET DOWN TO WORK.
373 TABLEN, AUTO17-CALCOS
384 / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE
385 / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE
386 / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS
387 / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO
390 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS
391 / SET IN WHICH CASE THE GAME IS RESTARTED.
393 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM
394 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE
398 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE
400 DCA INTLNK /FOR POSSIBLE CONTINUATION
401 CLSK /WAS IT THE CRYSTAL CLOCK?
402 JMP INTBUS /NO TRY SOMETHING ELSE
403 CLA IAC RTR /LOAD 4000
404 CLSA /GET CLOCKSTATUS AND RESET FLAG
406 JMP UPDATE /YES, GO TO IT
408 INTBUS, KSF /HERE ON NON-CLOCK INTERUPT
409 JMP .+5 /NOT THE KEYBOARD
410 KCC /CLEAR KEYBOARD FLAG
411 TAD GAMOVR /IS THE GAMEOVER
413 JMP RESTRT /YES, RESTART
414 / TCF /NO, HELL WITH IT
415 ISZ INTGLH /COUNT ONE BADDIE
417 HLT /HALT IF TOO MANY BADDIES
419 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT
432 / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP
433 / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON
434 / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS
435 / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN,
436 / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS
437 / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS.
438 / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR
444 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE
447 IAC /NO, BUT IS IT JUST COMING OUT?
449 TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED
450 DCA ONEFLG /OTHERWISE JUST COUNT ONE
451 JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO
453 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING?
455 JMP ONEFIG /IF YES, ALLOW NO CONTROLS
456 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED?
458 JMS I ONEWN /YES, SIGNAL VICTORY
459 TAD INTWRD /NOW BEGIN TEST OF REQUEST
460 AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE!
461 TAD OM300 /TEST BITS 4 AND 5
463 JMP ONELEF /NOPE, CONTINUE
464 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE
466 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN?
470 CLA CLL CMA /YES DECREMENT ANGLE
473 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN
476 IAC /YES, INCREMENT ANGLE
478 ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE)
479 JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS
480 DCA ONETHE /AND STORE
481 TAD ONETHE /FIND THEM TRIG FUNCTIONS
482 JMS I SINE /AND STORE ONCE AND FOR ALL
483 DCA ONESIN /IN THE APPROPRIATE PLACES
487 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING
493 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE?
496 TAD INTWRD /YES, ANY REQUESTED?
499 JMP ONEVEL /NONE REQUESTED
500 TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING
501 TAD ONEVEY /ON ORIENTATION
502 JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM
503 DCA ONEVEY /AND STORE
504 TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT
511 ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE
512 JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4
513 JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION
515 DCA ONEPEX /IGNORE ANY OVERFLOW
516 TAD ONEVEY /DO THE SAME FOR Y COORDINATE
517 JMS I ISHFT /AND VELOCITY COMPONENT
521 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF
527 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED
530 ISZ LNC1FG /NO, CONTINUE RELOADING
531 JMP I ITWOUP /AND EXIT
532 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED?
535 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT
537 TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH
538 DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE
539 TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE)
540 JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY
541 JMS I RSHIFT /COMPONENT OF PROJECTILE
543 JMS I RSHIFT /AND STICK IT IN THE FILE
545 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE
546 CLL RTL /SHIP OF ORIGIN
548 DCA I AUTO16 /AND STORE X POSITION
549 TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND
550 JMS I ISHFT /POSITION
559 TAD M200 /START RELOAD CYCLE
561 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE
563 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO
566 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE
568 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5
570 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE
574 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO.
575 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE.
580 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE
582 JMP TWOOK /YES, CONTINUE
583 IAC /NO, BUMP COUNT AND TEST FOR REENTRY
585 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED
586 DCA TWOFLG /AND CONTINUE
589 TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE
590 SZA CLA /IS IT EXPLODING?
591 JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE
592 TAD ONEFIN /DID WE JUST WIN?
594 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE
595 TAD INTWRD /TEST FOR HYPERSPACE REQUEST
597 TAD OM14 /BITS 8 AND 9 MUST BE SET
599 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0
601 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8
605 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE
606 JMP TWOFIG /SKIP TEST FOR RIGHT TURN
608 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9
611 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE
613 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE
614 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE
615 DCA TWOTHE /AND STORE
617 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS
618 DCA TWOSIN /AND STORE IN DATA TABLE
622 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING
628 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED
629 SZA CLA /DURING THIS UPDATE CYCLE
631 CLL IAC RAL /YES, TEST FOR BIT 2 SET
636 TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF
637 TAD TWOVEX /ANGLE OF ORIENTATION
638 JMS I VEESCL /AND SCALE TO NOT EXCEED MAX
639 DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE
648 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY
649 JMS I ISHFT /COMPONENTS/16
664 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST
665 SNA CLA /TEST TO SEE IF RELOAD COMPLETE
667 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT
669 IAC /YES, TEST TRIGGER BIT 11
672 JMP I IONEST /NOT SET, HELL WITH IT
674 TAD PROLIF /OK, SET PROJECTILE LIFE
675 DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT
676 TAD TWOVEX /ADD SHIPS VELOCITY
677 JMS I ISHFT /(ADJUSTED)
679 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT
680 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION
682 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD
684 TAD TWOPEX /X COMPONENT
686 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY
687 JMS I ISHFT /Y POSITION AND COSINE
697 DCA LNC2FG /200 CYCLES OF RELOAD
698 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE!
700 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS
703 LNC2FG, 0 /RELOAD COUNT
705 OP14, 14 /HYPERSPACE CODE
711 / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT
712 / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL
713 / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY
714 / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE
715 / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN
716 / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE
717 / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS
718 / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE
719 / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE:
721 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE]
723 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE]
725 / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE
726 / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE
727 / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL)
728 / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE
729 / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND
730 / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES
731 / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS
732 / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE
733 / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS.
735 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7
736 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED.
738 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED
739 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE.
745 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE
746 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE
749 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS
753 JMS I CALPOS /CALL THE CALCULATOR
756 / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE
757 / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES
758 / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE
759 / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED
760 / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y
761 / DISPLACED BY X,Y OF THE SHIP ITSELF
764 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE
766 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS
768 DCA I AUTO10 / 0,3 OR TOP CENTER
777 TAD T10SIN /OR JUST LEFT OF DEAD CENTER
778 TAD ONEPEY /AND SO ON
782 TAD T30COS /THE THIRD POINT IS
786 TAD T30COS /OR BOTTOM LEFT HAND CORNER
799 CIA /OR JUST BELOW CENTER
803 FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE
804 AND P40 /FLAME WITH AN EXTRA POINT SOME
805 SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP
806 JMP ONECON /POWER NOT ON - CONTINUE
807 TAD ONEOUT /DO NOT ALLOW IF EXPLODING
811 TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND
812 SNA /OFF TO MAKE IT FLICKER. DISPLAY THE
813 CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE
817 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP
819 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME
820 CMA /WITH LONG SHORT LONG SHORT
823 TAD ONFG2 /TIP OF FLAME AT EITHER
840 TAD ONEPEX /RETURN DISPLAY TO 0,-1
846 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
850 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8
853 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT
857 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER
868 CIA / OR JUST RIGHT OF CENTER
872 TAD T30SIN /FINALLY BACK TO
876 TAD ONEPEY / TOP CENTE
879 JMP I ITWOST /NOW FOR NUMBER TWO
882 ONFG1, 0 /USED TO COUNT FLICKERS
883 ONFG2, 0 /SHORT OR LONG FLAG
887 / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO.
888 / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH
889 / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS
894 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE
898 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS
899 DCA CALSIN /CALCULATED
904 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY
906 TAD T30SIN /FIRST POINT AT
910 TAD TWOPEY / OR TOP CENTER
919 TAD T20COS /SECOND POINT
923 TAD T20COS /THIRD POINT
936 TAD TWOPEX /FOURTH POINT
955 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON
958 JMP TWOCON /NO, FORGET IT
959 TAD TWOOUT /NOT ALLOWED IF EXPLODING
963 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1
968 ISZ TWFG1 /ALSO THE LENGHT VARIATION
971 TAD TWFG2 /EVERY OTHER TIME LONG
990 TAD T20SIN /NOW BACK UP TO THE SHIP
999 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
1003 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10
1006 TAD T30SIN /CONTINUE WITH DISPLAY FILE
1007 CIA /NEXT POINT AT 2,-3
1019 TAD T20COS /NEXT POINT
1027 TAD T20COS /AND THE NEXT AT
1040 TAD T30COS /AND THE LAST AT
1044 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS
1047 TWFG1, 0 /FLIK THE FLAME
1048 TWFG2, 0 /LONG OR SHORT
1052 / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION
1053 / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END
1054 / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS
1055 / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR
1056 / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES.
1061 FILDIS, CLA CLL /ALL SET TO GO
1062 JMS I COLIDE /TEST FOR COLLISION FIRST
1063 / DSB 1 /IF NO COLLISION
1064 TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL
1068 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE
1069 DCA AUTO10 /FOR NUMBER ONE
1070 TAD ONECNT /ALONG WITH VECTOR COUNT
1072 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR
1076 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION?
1078 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION
1080 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS
1081 DCA XTWODS /SET X AND Y TO NEW POINT
1084 JMS I VECTOR /CALL THE DOT DRAWING MACHINE
1087 JMP TWODIS /DO NUMBER TWO ON OVERFLOW
1088 TAD XTWODS /SWAP POINTS FOR NEXT PAIR
1090 TAD YTWODS /THE GENERATOR DRAWS FROM ONE
1091 DCA YONEDS /TOWARDS TWO
1096 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO
1097 SZA CLA /BUT NOT IF IN HYPER SPACE
1100 TAD TWOFIL /SET UP FILE POINTER AS IN ONE
1102 TAD TWOCNT /AND THE COUNT
1104 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO
1108 TAD TWOOUT /IS IT EXPLODING?
1110 JMP I ITWOEX /YES, HOW EXCITING
1112 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF
1115 DCA YTWODS /AND CALL THE VECTOR SEQUENCE
1120 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO
1121 IPRODS, PRODIS /DO THE PROJECTILE THING
1123 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR
1124 DCA XONEDS /OF POINTS
1135 / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A
1136 / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS.
1137 / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND
1138 / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT
1139 / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE.
1142 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR
1144 TAD XONEDS /FROM XONEDS,YONEDS
1145 CIA /TO XTWODS,YTWODS
1146 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO
1148 DCA DIXTEM /AND STORE INCREMENT
1154 TAD M4 /FOR FOUR DOTS
1157 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y
1159 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS
1160 TAD YONEDS /XONEDS AND YONEDS
1164 / RTR /DIVIDE BY 8 TO FIT SCREEN SIZE
1166 DXC DXL /SET X VALUE
1168 TAD YONEDS /DO THE SAME FOR Y
1171 DYC DYL DIS /AT LAST SOMETHING TO SEE!!
1173 ISZ DISCNT /DONE YET?
1178 DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED
1179 CLL /FROM EVERYWHERE TO DIVIDE THE
1180 SPA /AC BY FOUR WITH AN ASR RIGHT
1181 CML IAC /NOTE THAT NEGATIVE NUMBERS ARE
1182 RAR /ROUNDED UPWARDS (TOWARD ZERO)
1183 CLL /TO MAKE IT COME OUT RIGHT
1185 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS
1186 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES
1191 / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS.
1192 / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH
1193 / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS
1194 / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR
1200 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES
1201 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE
1203 / DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS
1205 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT
1207 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT
1208 IAC /INCREMENT COUNT AND REPLACE
1210 ISZ BUFTMP /BUMP POINTER TO X VELOCITY
1212 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION
1213 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT
1216 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST
1217 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY
1220 TAD I BUFTMP /SAME LITTLE GAME
1223 DCA PROY /STORE THE NEW Y VALUE
1225 TAD PROX /DISPLAY THE POINT WITH
1226 / RTR /THE SAME SHIFT AS FOR THE SHIPS
1227 / RAR /FOR THE SMALL SCREEN
1233 DYC DYL DIS /THERE IT IS!!
1235 JMS I CHKOUT /TEST FOR A HIT
1236 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END
1237 TAD BUFTMP /OF BUFFER
1240 JMP PROLOP /NOT AT END - CONTINUE
1243 / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR
1244 / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP
1245 / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT
1246 / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE
1247 / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED
1248 / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING
1249 / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD
1250 / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT
1251 / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY.
1255 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT?
1257 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE
1258 / TAD M400 /MOVE THE BEAM OFF SCREEN
1262 TAD INTCNT /PICK UP THE COUNT
1269 EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER
1270 TAD P5 /POINTER TO THE NEXT PROJECTILE
1271 DCA BUFTMP /UNLESS THE END
1272 TAD BUFTMP /OF THE BUFFER
1273 TAD BUFLIM /IS REACHED
1274 SZA CLA /IN WHICH CASE
1282 RESE1, 0 /THIS IS CALLED TO SET THE POINTER
1283 TAD MRES /(AUTO16) TO THE NEXT FREE SLOT
1284 DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE
1286 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT
1289 TAD RESPNT /RESTE IF AT END OF BUFFER
1296 RESCON, TAD I RESPNT /FIND A HOLE YET?
1298 JMP RESFND /YES, SET UP AUTO16
1299 ISZ RESCNT /NO COUNT
1300 JMP RESLOP /AND TRY AGAIN
1301 HLT /NO HOLES AT ALL?
1303 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING
1313 CMA /THIS ROUTINE IS CALLED FROM THE
1314 TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL
1315 DCA AUTO16 /THE BUFFER POINTERS AND SO ON
1322 SETLOP, DCA I SETPNT
1334 / THIS HERE NOW THING CHECKS THE COORDINATES OF THE MOST RECENTLY
1335 / DISPLAYED PROJECTILE AGAINST THOSE OF THE SHIPS ON THE SCREEN.
1336 / IF WITH A COLLISION LIMIT A HIT IS RECORDED AND THE LIFE
1337 / COUNT OF THE PROJECTILE ZEROED TO REMOVE IT. A HIT SHIP
1338 / IS SUITABLY FLAGGED
1343 CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT
1344 TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE
1347 TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT
1351 TAD PROX /CHECK X COORDINATES OF SHIP ONE
1353 TAD ONEPEX /THIS SORT OF THING IS WHY THE
1354 SPA /COORDINATES HAVE TO BE MAINTAINED TO 12
1356 TAD LIMIT /CLOSE ENOUGH?
1358 JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT
1359 TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y?
1368 TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT
1369 DCA ONEOUT /ALL THAT IS NECESSARY
1370 JMS CUTOUT /REMOVE PROJECTILE
1374 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO
1376 JMP I CHECK /BUT NOT IF IN HYPERSPACE
1377 TAD TWOOUT /OR IF ALREADY HIT
1381 TAD PROX /CHECK X'S FIRST
1384 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1386 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY
1388 JMP I CHECK /NOWHERE NEAR CLOSE
1390 TAD PROY /NYAH, NYAH
1394 CIA /ABSOLUTE VALUE OF DIFFERENCE
1397 JMP I CHECK /CLEAN MISS!
1399 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING
1400 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT
1402 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE
1404 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT
1406 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY
1407 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE
1417 / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE
1418 / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED
1419 / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING
1420 / THEIR EXPLOSION COUNTS NON-ZERO.
1424 COLLID, 0 /HERE TO TEST FOR COLLISION
1425 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN
1426 SZA CLA /HYPERSPACE OR EXPLODING
1438 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION
1439 CIA /CHECK X COORDINATES FIRST
1441 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1443 TAD COLLIM /CLOSE ENOUGH?
1445 JMP I COLLID /NOPE, FORGET IT
1447 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES
1451 CIA /GET MAGNITUDE ONLY
1453 SMA CLA /CLOSE ENOUGH?
1455 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS
1464 / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO
1465 / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP
1466 / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM
1467 / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE
1468 / VARIOUS PARAMETERS FOR REENTRY.
1473 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0
1474 TAD RTNFLG /SET UP LIST POINTER
1476 TAD ONEDIF /TO APPROPRIATE SHIP FILE
1480 CLCA /SET UP "RANDOM NUMBER GENERATOR"
1481 /USE CLOCK COUNTER FOR THAT PURPOSE
1483 TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME
1484 AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777
1485 CIA /UPDATE CYCLES ( ABOUT 15 SECONDS)
1486 DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT
1488 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE
1489 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY
1491 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY
1492 JMS VEESET /COMPONENT
1494 TAD I AUTO17 /AND THEN THE Y COMPONENT
1503 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY
1505 TAD MHYP /ABOUT 3/4 CHANCE
1508 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET
1509 SZA CLA /UP FOR EXPLOSION ON REENTRY
1521 ONEDIF, ONEFLG-TWOFLG
1531 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS
1535 AND HM177 /LIMIT TO 177
1538 JMP I VEESET /AND EXIT
1542 ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS
1543 TAD ONETHE /AN EXPLOSION
1544 TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP
1546 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR
1547 ISZ ONEOUT /DONE WITH THE EXPLOSION?
1548 JMP I NOWTWO /NO, NORMAL RETURN
1550 IAC /YES, SET INTO PSEUDO HYPER SPACE
1552 IAC /DISABLE RETURN FROM HYPER SPACE
1555 TAD TWOFIN /IS NUMBER TWO STILL AROUND?
1557 JMP I NOWTWO /YES, RETURN
1558 JMP I TIEUP /NO, TIE BALL GAME
1561 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO
1562 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND
1565 JMS I IXPDIS /THEN DISPLAY IT
1566 ISZ TWOOUT /DONE WITH EXPLOSION?
1567 JMP I NOWPRO /NO, NORMAL RETURN
1569 IAC /YES, SEND INTO PSEUDO HYPER SPACE
1571 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE
1575 SZA CLA /STILL ALIVE AND WELL?
1576 JMP I TIEUP /NO, TIE GAME
1577 JMP I NOWPRO /YES, CONTINUE ON
1587 / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS
1588 / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL
1589 / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS
1590 / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S
1591 / A SORT OF CLOBBY EXPLOSION.
1596 EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT
1597 TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY
1598 DCA XTWODS /SET UP BY FILDIS OR TWODIS
1599 TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE
1603 CIA /CALCULATE INCREMENT THE WRONG WAY
1605 DCA DIXTEM /AND STORE
1609 DCA DIYTEM /SAME FOR Y
1611 TAD M4 /4 DOTS IN THE VECTOR"
1612 DCA DISCNT /COULD HAVE CALLED THE OTHER
1613 /VECTOR GENERATOR I SUPPOSE
1615 TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING
1616 DCA XONEDS /TOTALS AND DISPLAY THE RUNNING
1617 TAD YONEDS /TOTALS NORMAL SIZE
1622 / RTR /COULD MAKE TWICE AS BIG BY NOP-ING
1623 / RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH
1624 JMS I IVCLDX /AS IT IS
1635 ISZ DISCNT /DONE 4 DOTS?
1638 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE?
1640 JMP I EXPDIS /YES, EXIT
1642 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS
1651 / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS.
1652 / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140
1653 / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED
1654 / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y
1655 / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT
1656 / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE
1657 / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE.
1661 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN
1664 SMA /BRANCH FOR POSITIVE OR NEGATIV
1667 SMA CLA /GREATER THAN MAXIMUM POSITIVE?
1669 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET
1670 JMP I VEELIM /TO MAX NEGATIV
1672 VEEPOS, TAD VEEMIN /GREATER THAN MAX?
1675 TAD VEEMAX /YES SET TO MAX
1678 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG
1685 THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE
1686 SMA /0-550 OR 0-360 DEGREES. THIS IS
1687 JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW
1688 TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE
1689 JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC
1690 TAD M550 /MODULO 360 AND EXITS
1693 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T
1698 / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED.
1699 / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND
1700 / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE
1701 / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY
1702 / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF
1703 / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT
1704 / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE
1705 / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE
1706 / INTERGALACTIC DUST.
1710 ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET
1711 TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR
1712 DCA MESS /AND SET GAMOVR FLAG
1715 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE
1717 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET
1718 TAD MES2 /AND TWO FIN IS NOT
1719 DCA MESS /SET ALSO GAMOVR
1724 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN
1727 DCA GAMOVR /NOBODY EVER REALLY WINDS
1728 /UP THE WINNER IN THESE THINGS
1730 / DSB 1 /THIS IS ENTERED FROM FINISH WHEN
1731 TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY
1732 JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN
1733 TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT
1734 JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED
1735 TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS
1736 JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED
1751 / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED
1752 / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER
1753 / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT
1754 / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES
1755 / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES
1756 / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER
1757 / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT
1758 / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE
1759 / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO
1760 / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN
1761 / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH
1762 / THIS WAS STOLEN HAD FULL WORD PRECISION.
1767 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT
1768 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD
1929 MULTI, 0 /THIS IS STANDARD SINGLE PRECISION
1930 CLL /MULTIPLY ROUTINE WHICH WAS ONCE
1931 SPA /USED. I'VE LEFT IT IN SINCE
1932 CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND
1933 DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT
1934 DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE
1935 TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT
1979 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE
1980 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS
1993 / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS
1994 / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING
1995 / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION
1996 / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND
1997 / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR
1998 / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER
1999 / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT....
2024 /****************************************************************
2031 VMINUS, CMA IAC / COMPLEMENT
2032 RTR / DIVIDE BY FOUR
2033 AND P1777 / DELETE UPPER TWO BITS
2043 VCLDX, 0 / INTENSIFY LAST POINT AND LOAD NEW X VALUE
2044 JMS VDIV / DIVIDE BY FOUR
2045 DISD / DISPLAY READY?
2048 DILX / LOAD NEW X VALUE
2049 JMP I VCLDX / RETURN
2052 JMS VDIV / DIVIDE BY FOUR
2053 DILY / LOAD NEW Y VALUE
2059 /****************************************************************
2064 /GENERAL PURPOSE SYMBOL GENERATOR
2066 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING
2067 DCA ADDR /STORE STRING ADDRESS
2068 TAD I ADDR /FETCH DOUBLE CHARACTER
2072 JMS CHAR /PLOT CHARACTER
2073 SKP /NORMAL RETURN -- SKIP
2074 JMP I CHARS /TERMINATION RETURN -- EXIT
2075 TAD I ADDR /RECALL DOUBLE CHARACTER
2076 ISZ ADDR /ADVANCE STRING ADDRESS
2077 JMS CHAR /PLOT CHARACTER
2078 JMP CHARS+2 /NORMAL RETURN -- REPEAT
2079 JMP I CHARS /TERMINATION RETURN -- EXIT
2081 CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER
2082 AND K77 /MASK OUT UPPER BITS
2083 CLL RAL /MULTIPLY CODE BY TWO
2084 TAD TABLE /ADD TABLE BASE ADDRESS
2085 DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE
2086 CMA /INITIALIZE COUNTER FOR
2087 DCA COUNT2 / TWO PLOT WORDS
2088 TAD I POINT /FETCH FIRST PLOT WORD
2089 ISZ POINT /INCREMENT POINTER FOR NEXT ONE
2090 SNA /SKIP IF NOT SPECIAL CHARACTER
2091 JMP SPCHAR /ELSE GO PROCESS IT
2092 DCA CURPLT /SAVE CURRENT PLOT BITS
2093 XPLOT, TAD KM6 /INITIALIZE 6-BIT
2094 DCA COUNT6 / COUNTER
2095 TAD YVALUE /RESET Y TEMPORARY
2096 DCA YTEMP / VALUE FOR CHARACTER
2097 TAD XVALUE /OUTPUT CURRENT
2098 DILX /X-VALUE TO CRT
2099 TAD XINCR /INCREMENT
2100 DCA XVALUE / ABSCISSA
2101 YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS
2102 CLL RAL /GET NEXT BIT
2103 DCA CURPLT /SAVE REMAINING PLOT BITS
2104 SNL /SKIP IF POINT TO PLOT
2105 JMP CNTINU /ELSE JUMP AHEAD
2106 TAD YTEMP /OUTPUT CURRENT
2107 DILY /Y-VALUE TO CRT
2108 DISD / READY TO DISPLAY THE POINT?
2109 JMP .-1 / NO, WE'LL WAIT.
2110 DIXY / SHOOT THE BEAM!
2113 TAD CURPLT /RECALL CURRENT PLOT BITS
2114 SNA CLA /SKIP IF POINTS REMAINING
2115 JMP WRDEND /ELSE WORD IS FINISHED
2116 CNTINU, TAD YTEMP /INCREMENT TEMPORARY
2117 TAD YINCR / Y-VALUE FOR NEXT
2118 DCA YTEMP / CHARACTER STEP
2119 ISZ COUNT6 /SKIP IF 6 BITS PLOTTED
2120 JMP YPLOT /ELSE PLOT NEXT ONE
2121 JMP XPLOT /GO UPDATE X-VALUE
2122 WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD
2124 TAD I POINT /FETCH SECOND BIT WORD
2125 SZA /SKIP IF NO PLOT POINTS
2126 JMP XPLOT-1 /ELSE GO PLOT THEM
2127 EXIT, TAD XVALUE /INCREMENT ABSCISSA
2128 TAD XINCR / FOR SPACE BETWEEN
2129 DCA XVALUE / SYMBOLS
2130 JMP I CHAR /EXIT FROM CHAR
2132 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR
2133 DCA POINT /STORE AS INDIRECT ADDRESS
2134 \f JMP I POINT /GO TO APPROPRIATE ROUTINE
2135 SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT
2136 CLL RTL /MULTIPLY BY FOUR AND
2137 JMP EXIT / GO CREATE SPACE
2138 CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X
2139 DCA XVALUE / TO ITS ORIGINAL VALUE
2140 LF, TAD YINCR /"LINE FEED"
2141 CLL RTL / DECREMENTS THE
2142 CLL CIA RAL / Y-VALUE BY
2143 TAD YVALUE / EIGHT SCALE
2145 JMP I CHAR /EXIT FROM CHAR
2146 RESET, TAD INITX /"RESET" RESETS
2147 DCA XVALUE / X AND Y TO
2148 TAD INITY / THEIR ORIGINAL
2149 JMP RESET-2 / VALUES
2150 TERM, ISZ CHAR /TERMINATE CODE CAUSES
2151 JMP I CHAR / EXIT TO P+2
2153 INITX, 0 /INITIAL X-VALUE
2154 INITY, 327 /INITIAL Y-VALUE
2155 XVALUE, 0 /CURRENT X-VALUE
2156 YVALUE, 0 /CURRENT Y-VALUE
2157 XINCR, 6 /BASIC X INCREMENT VALUE
2158 YINCR, 10 /BASIC Y INCREMENT VALUE
2159 YTEMP, 0 /TEMPORARY Y-VALUE
2160 CURPLT, 0 /CURRENT PLOT BITS
2161 ADDR, 0 /CURRENT STRING ADDRESS
2162 COUNT6, 0 /6-BIT COUNTER
2163 COUNT2, 0 /2-WORD COUNTER
2164 KM6, -6 /CONSTANT FOR COUNT6
2165 K77, 77 /CHARACTER CODE MASK
2166 POINT, 0 /TABLE POINTER
2170 TABLE, .+1 /TABLE BASE ADDRESS
2171 0 /SPECIAL CHARACTER (00)
2172 TERM /TERMINATION CODE
2233 0 /SPECIAL CHARACTER (37)
2235 0 /SPECIAL CHARACTER (40)
2255 4040 / UNDERSCORE (52)
2259 0 /SPECIAL CHARACTER (54)
2289 0 /SPECIAL CHARACTER (73)
2290 CRLF /CARRIAGE RETURN; LINE FEED
2302 / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS
2303 / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE
2304 / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN.
2333 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO
2334 / AROUND 7575 OR SO.
2345 ////////////////////////////
2349 ///////////////////////////