3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR
6 / HACHTI VARIANT FOR LAB-8/E
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.
16 / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD
17 / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP
20 / THE COMMAND WORD BIT ASSIGNMENTS ARE:
22 / SR BIT: C: FUNCTION:
24 / 0 0 SHIP ONE ROTATES LEFT
26 / 1 1 SHIP ONE ROTATES RIGHT
28 / 2 2 SHIP ONE ACCELERATES
34 / 8 4 SHIP TWO ROTATES LEFT
36 / 9 5 SHIP TWO ROTATES RIGHT
38 / 10 6 SHIP TWO ACCELERATES
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.
53 /****************************************************************
55 /***************************
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
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
76 CMFREE=0000 / 4096 FIXED FREE RUN
77 CMPROG=1000 / PROGRAMMED DELAY
79 CADC=0040 / START ADC ON OVERFLOW
80 CINH=0020 / INHIBIT CLOCK
81 CION=0010 / INTERRUPT ENABLE
83 CEV3=0004 / EVENT 3 ENABLED
84 CEV2=0002 / EVENT 2 ENABLED
85 CEV1=00001 / EVENT 1 ENABLED
91 DILE=6056 / LOAD ENABLES FROM A
92 DISD=6052 / TEST FOR READY
94 /****************************************************************
95 / SYMBOL DEFINITIONS FOR PAL8-PAL10
97 XRIN=NOP / DIGITAL INPUT?
100 /DSB=XXXX / SET BRIGHTNESS - MUST BE COMMENTED OUT!!!
102 DXC=JMS I IVCLDX / X VALUE CONTROL?
103 DYC=JMS I IVCLDY / Y VALUE CONTROL?
105 DXL=0000 / X VALUE LOAD FLAG?
106 DYL=0000 / Y VALUE LOAD FLAG?
107 DIS=0000 / ANOTHER STRANGE FLAG
109 /CRF=NOP / WHICH FLAG???
113 /****************************************************************
115 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR
116 / REAL WORLD TIMING PURPOSES.
121 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT
122 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE
125 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR
126 ODT1, 0 /DEBUGGERS, ETC.
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
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
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
169 TWOOUT, 0 /SAME CONTENT AND ORDER
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
198 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST
199 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES.
212 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON
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.
285 START, CAF /START OR RESTART HERE ANY OLD TIME
287 DIXY /TO GET THE VC8-E STARTED ONCE
291 TAD XROPT /USE THE BLUE RIBBON CONNECTOR
292 DCA COLDST /AND LEAVE IN THE TRAP LOCATION
298 TAD P17 /FIRST CLEAR THE POSITION AND DATA
299 DCA AUTO10 /TABLES OF THE TWO SHIPS
306 TAD STRT1 /SET THE STARTING POSITIONS OF THE
307 DCA ONEPEX /TWO SHIPS
310 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE
313 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP
314 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE
316 DCA ONEFIN /CLEAR ALL GAME END FLAGS
319 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS
322 TCF /CLEAR OTHER REMAINING LIKELY FLAGS
326 6405 / CLEAR INTERRUPT ENABLE OF KERMIT'S SER PORT :-(
329 CLZE / CLEAR CLOCK CONFIG REGISTER
331 TAD CDELY / LOAD NEG DELAY
332 CLAB / LOAD TO CLOCK BUFFER
334 TAD CCNF / LOAD CLOCK CONFIG
335 CLOE / SET CONFIG BITS
338 JMP COLDST /AND GO TO IT
340 CCNF, CR4+CMPROG+CION+COVSTAT / CLOCK CONFIGURATION
341 CDELY, -310 / COUNTER PRESET (200)
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.
351 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW.
353 COLDST, 0 /TRAP TO READ SR OR BRC
355 DCA INTWRD /STORE TEMPORARILY
356 TAD INTWRD /MASK OUT LEFTMOST 4 BITS
360 DCA INTTEM /AND STORE
361 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO
363 TAD INTTEM /ADD TOGETHER
364 JMP .+3 /AND CONTINUE
366 CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR
369 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT
371 ION /GET READY FOR THE NEXT CYCLE
372 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME?
373 IAC /ONLY WHEN ACCFLG=0
375 TAD ACCPER /IF ZERO, RESET COUNT
378 JMP I .+1 /NOW GET DOWN TO WORK.
382 TABLEN, AUTO17-CALCOS
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
400 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS
401 / SET IN WHICH CASE THE GAME IS RESTARTED.
403 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM
404 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE
408 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE
410 DCA INTLNK /FOR POSSIBLE CONTINUATION
412 CLSK /WAS IT THE CRYSTAL CLOCK?
413 JMP INTBUS /NO TRY SOMETHING ELSE
415 CLA IAC RTR /LOAD 4000
416 CLSA /GET CLOCKSTATUS AND RESET FLAG
418 JMP UPDATE /YES, GO TO IT
420 INTBUS, /HERE ON NON-CLOCK INTERUPT
423 JMP NOKEY /NOT THE KEYBOARD, THAT'S BAD!
425 KBDIN, KCC /CLEAR KEYBOARD FLAG
427 KRB / RESET FLAG, CLEAR AC, READ DATA
428 AND KPAR / MASK OUT PARITY
429 TAD NCTRLC / ADD -3 (CTRL-C)
431 JMP I KBOOT / REBOOT!
433 TAD GAMOVR /IS THE GAMEOVER
435 JMP RESTRT /YES, RESTART
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
452 KPAR, 177 / ANTI-PARITY MASK
453 NCTRLC, 7775 / -3 (CTRL-C)
454 NCTRLD, 7774 / -3 (CTRL-D)
457 BADDIE, ISZ INTGLH /COUNT ONE BADDIE
459 HLT /HALT IF TOO MANY BADDIES
461 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT
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
491 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE
494 IAC /NO, BUT IS IT JUST COMING OUT?
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
500 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING?
502 JMP ONEFIG /IF YES, ALLOW NO CONTROLS
503 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED?
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
510 JMP ONELEF /NOPE, CONTINUE
511 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE
513 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN?
517 CLA CLL CMA /YES DECREMENT ANGLE
520 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN
523 IAC /YES, INCREMENT ANGLE
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
534 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING
541 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE?
544 TAD INTWRD /YES, ANY REQUESTED?
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
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
563 DCA ONEPEX /IGNORE ANY OVERFLOW
564 TAD ONEVEY /DO THE SAME FOR Y COORDINATE
565 JMS I ISHFT /AND VELOCITY COMPONENT
569 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF
576 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED
579 ISZ LNC1FG /NO, CONTINUE RELOADING
580 JMP I ITWOUP /AND EXIT
581 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED?
584 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT
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
592 JMS I RSHIFT /AND STICK IT IN THE FILE
594 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE
595 CLL RTL /SHIP OF ORIGIN
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
608 TAD M200 /START RELOAD CYCLE
610 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE
612 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO
615 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE
617 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5
619 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE
624 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO.
625 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE.
630 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE
632 JMP TWOOK /YES, CONTINUE
633 IAC /NO, BUMP COUNT AND TEST FOR REENTRY
635 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED
636 DCA TWOFLG /AND CONTINUE
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?
644 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE
645 TAD INTWRD /TEST FOR HYPERSPACE REQUEST
647 TAD OM14 /BITS 8 AND 9 MUST BE SET
649 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0
651 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8
655 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE
656 JMP TWOFIG /SKIP TEST FOR RIGHT TURN
658 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9
661 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE
663 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE
664 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE
665 DCA TWOTHE /AND STORE
667 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS
668 DCA TWOSIN /AND STORE IN DATA TABLE
672 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING
679 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED
680 SZA CLA /DURING THIS UPDATE CYCLE
682 CLL IAC RAL /YES, TEST FOR BIT 2 SET
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
699 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY
700 JMS I ISHFT /COMPONENTS/16
716 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST
717 SNA CLA /TEST TO SEE IF RELOAD COMPLETE
719 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT
721 IAC /YES, TEST TRIGGER BIT 11
724 JMP I IONEST /NOT SET, HELL WITH IT
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)
731 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT
732 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION
734 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD
736 TAD TWOPEX /X COMPONENT
738 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY
739 JMS I ISHFT /Y POSITION AND COSINE
749 DCA LNC2FG /200 CYCLES OF RELOAD
750 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE!
752 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS
755 LNC2FG, 0 /RELOAD COUNT
757 OP14, 14 /HYPERSPACE CODE
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:
774 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE]
776 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE]
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.
788 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7
789 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED.
791 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED
792 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE.
798 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE
799 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE
802 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS
806 JMS I CALPOS /CALL THE CALCULATOR
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
817 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE
819 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS
821 DCA I AUTO10 / 0,3 OR TOP CENTER
830 TAD T10SIN /OR JUST LEFT OF DEAD CENTER
831 TAD ONEPEY /AND SO ON
835 TAD T30COS /THE THIRD POINT IS
839 TAD T30COS /OR BOTTOM LEFT HAND CORNER
853 CIA /OR JUST BELOW CENTER
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
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
871 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP
873 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME
874 CMA /WITH LONG SHORT LONG SHORT
877 TAD ONFG2 /TIP OF FLAME AT EITHER
894 TAD ONEPEX /RETURN DISPLAY TO 0,-1
900 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
905 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8
908 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT
912 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER
923 CIA / OR JUST RIGHT OF CENTER
927 TAD T30SIN /FINALLY BACK TO
931 TAD ONEPEY / TOP CENTE
934 JMP I ITWOST /NOW FOR NUMBER TWO
937 ONFG1, 0 /USED TO COUNT FLICKERS
938 ONFG2, 0 /SHORT OR LONG FLAG
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
950 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE
954 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS
955 DCA CALSIN /CALCULATED
960 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY
962 TAD T30SIN /FIRST POINT AT
966 TAD TWOPEY / OR TOP CENTER
975 TAD T20COS /SECOND POINT
979 TAD T20COS /THIRD POINT
992 TAD TWOPEX /FOURTH POINT
1012 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON
1015 JMP TWOCON /NO, FORGET IT
1016 TAD TWOOUT /NOT ALLOWED IF EXPLODING
1020 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1
1025 ISZ TWFG1 /ALSO THE LENGHT VARIATION
1028 TAD TWFG2 /EVERY OTHER TIME LONG
1031 /FLAME TIP AT EITHER
1047 TAD T20SIN /NOW BACK UP TO THE SHIP
1056 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
1061 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10
1064 TAD T30SIN /CONTINUE WITH DISPLAY FILE
1065 CIA /NEXT POINT AT 2,-3
1077 TAD T20COS /NEXT POINT
1085 TAD T20COS /AND THE NEXT AT
1098 TAD T30COS /AND THE LAST AT
1102 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS
1105 TWFG1, 0 /FLIK THE FLAME
1106 TWFG2, 0 /LONG OR SHORT
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.
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
1127 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE
1128 DCA AUTO10 /FOR NUMBER ONE
1129 TAD ONECNT /ALONG WITH VECTOR COUNT
1131 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR
1135 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION?
1137 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION
1139 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS
1140 DCA XTWODS /SET X AND Y TO NEW POINT
1143 JMS I VECTOR /CALL THE DOT DRAWING MACHINE
1146 JMP TWODIS /DO NUMBER TWO ON OVERFLOW
1147 TAD XTWODS /SWAP POINTS FOR NEXT PAIR
1149 TAD YTWODS /THE GENERATOR DRAWS FROM ONE
1150 DCA YONEDS /TOWARDS TWO
1156 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO
1157 SZA CLA /BUT NOT IF IN HYPER SPACE
1160 TAD TWOFIL /SET UP FILE POINTER AS IN ONE
1162 TAD TWOCNT /AND THE COUNT
1164 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO
1168 TAD TWOOUT /IS IT EXPLODING?
1170 JMP I ITWOEX /YES, HOW EXCITING
1172 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF
1175 DCA YTWODS /AND CALL THE VECTOR SEQUENCE
1180 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO
1181 IPRODS, PRODIS /DO THE PROJECTILE THING
1183 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR
1184 DCA XONEDS /OF POINTS
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.
1203 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR
1205 TAD XONEDS /FROM XONEDS,YONEDS
1206 CIA /TO XTWODS,YTWODS
1207 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO
1209 DCA DIXTEM /AND STORE INCREMENT
1215 TAD M4 /FOR FOUR DOTS
1218 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y
1220 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS
1221 TAD YONEDS /XONEDS AND YONEDS
1225 / RTR /DIVIDE BY 8 TO FIT SCREEN SIZE
1227 DXC DXL /SET X VALUE
1229 TAD YONEDS /DO THE SAME FOR Y
1232 DYC DYL DIS /AT LAST SOMETHING TO SEE!!
1234 ISZ DISCNT /DONE YET?
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
1246 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS
1247 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES
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
1262 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES
1263 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE
1265 / DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS
1267 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT
1269 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT
1270 IAC /INCREMENT COUNT AND REPLACE
1272 ISZ BUFTMP /BUMP POINTER TO X VELOCITY
1274 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION
1275 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT
1278 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST
1279 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY
1282 TAD I BUFTMP /SAME LITTLE GAME
1285 DCA PROY /STORE THE NEW Y VALUE
1287 TAD PROX /DISPLAY THE POINT WITH
1288 / RTR /THE SAME SHIFT AS FOR THE SHIPS
1289 / RAR /FOR THE SMALL SCREEN
1295 DYC DYL DIS /THERE IT IS!!
1297 JMS I CHKOUT /TEST FOR A HIT
1298 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END
1299 TAD BUFTMP /OF BUFFER
1302 JMP PROLOP /NOT AT END - CONTINUE
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.
1318 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT?
1320 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE
1321 / TAD M400 /MOVE THE BEAM OFF SCREEN
1325 TAD INTCNT /PICK UP THE COUNT
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
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
1349 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT
1352 TAD RESPNT /RESTE IF AT END OF BUFFER
1359 RESCON, TAD I RESPNT /FIND A HOLE YET?
1361 JMP RESFND /YES, SET UP AUTO16
1362 ISZ RESCNT /NO COUNT
1363 JMP RESLOP /AND TRY AGAIN
1364 HLT /NO HOLES AT ALL?
1366 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING
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
1385 SETLOP, DCA I SETPNT
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
1407 CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT
1408 TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE
1411 TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT
1415 TAD PROX /CHECK X COORDINATES OF SHIP ONE
1417 TAD ONEPEX /THIS SORT OF THING IS WHY THE
1418 SPA /COORDINATES HAVE TO BE MAINTAINED TO 12
1420 TAD LIMIT /CLOSE ENOUGH?
1422 JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT
1423 TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y?
1432 TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT
1433 DCA ONEOUT /ALL THAT IS NECESSARY
1434 JMS CUTOUT /REMOVE PROJECTILE
1439 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO
1441 JMP I CHECK /BUT NOT IF IN HYPERSPACE
1442 TAD TWOOUT /OR IF ALREADY HIT
1446 TAD PROX /CHECK X'S FIRST
1449 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1451 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY
1453 JMP I CHECK /NOWHERE NEAR CLOSE
1455 TAD PROY /NYAH, NYAH
1459 CIA /ABSOLUTE VALUE OF DIFFERENCE
1462 JMP I CHECK /CLEAN MISS!
1464 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING
1465 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT
1467 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE
1469 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT
1471 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY
1472 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE
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.
1490 COLLID, 0 /HERE TO TEST FOR COLLISION
1491 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN
1492 SZA CLA /HYPERSPACE OR EXPLODING
1504 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION
1505 CIA /CHECK X COORDINATES FIRST
1507 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1509 TAD COLLIM /CLOSE ENOUGH?
1511 JMP I COLLID /NOPE, FORGET IT
1513 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES
1517 CIA /GET MAGNITUDE ONLY
1519 SMA CLA /CLOSE ENOUGH?
1521 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS
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.
1540 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0
1541 TAD RTNFLG /SET UP LIST POINTER
1543 TAD ONEDIF /TO APPROPRIATE SHIP FILE
1547 CLCA /SET UP "RANDOM NUMBER GENERATOR"
1548 /USE CLOCK COUNTER FOR THAT PURPOSE
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
1555 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE
1556 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY
1558 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY
1559 JMS VEESET /COMPONENT
1561 TAD I AUTO17 /AND THEN THE Y COMPONENT
1570 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY
1572 TAD MHYP /ABOUT 3/4 CHANCE
1575 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET
1576 SZA CLA /UP FOR EXPLOSION ON REENTRY
1588 ONEDIF, ONEFLG-TWOFLG
1599 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS
1603 AND HM177 /LIMIT TO 177
1606 JMP I VEESET /AND EXIT
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
1614 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR
1615 ISZ ONEOUT /DONE WITH THE EXPLOSION?
1616 JMP I NOWTWO /NO, NORMAL RETURN
1618 IAC /YES, SET INTO PSEUDO HYPER SPACE
1620 IAC /DISABLE RETURN FROM HYPER SPACE
1623 TAD TWOFIN /IS NUMBER TWO STILL AROUND?
1625 JMP I NOWTWO /YES, RETURN
1626 JMP I TIEUP /NO, TIE BALL GAME
1630 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO
1631 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND
1634 JMS I IXPDIS /THEN DISPLAY IT
1635 ISZ TWOOUT /DONE WITH EXPLOSION?
1636 JMP I NOWPRO /NO, NORMAL RETURN
1638 IAC /YES, SEND INTO PSEUDO HYPER SPACE
1640 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE
1644 SZA CLA /STILL ALIVE AND WELL?
1645 JMP I TIEUP /NO, TIE GAME
1646 JMP I NOWPRO /YES, CONTINUE ON
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.
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
1673 CIA /CALCULATE INCREMENT THE WRONG WAY
1675 DCA DIXTEM /AND STORE
1679 DCA DIYTEM /SAME FOR Y
1681 TAD M4 /4 DOTS IN THE VECTOR"
1682 DCA DISCNT /COULD HAVE CALLED THE OTHER
1683 /VECTOR GENERATOR I SUPPOSE
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
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
1705 ISZ DISCNT /DONE 4 DOTS?
1708 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE?
1710 JMP I EXPDIS /YES, EXIT
1712 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS
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.
1732 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN
1735 SMA /BRANCH FOR POSITIVE OR NEGATIV
1738 SMA CLA /GREATER THAN MAXIMUM POSITIVE?
1740 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET
1741 JMP I VEELIM /TO MAX NEGATIV
1743 VEEPOS, TAD VEEMIN /GREATER THAN MAX?
1746 TAD VEEMAX /YES SET TO MAX
1749 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG
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
1764 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T
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.
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
1787 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE
1789 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET
1790 TAD MES2 /AND TWO FIN IS NOT
1791 DCA MESS /SET ALSO GAMOVR
1796 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN
1799 DCA GAMOVR /NOBODY EVER REALLY WINDS
1800 /UP THE WINNER IN THESE THINGS
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
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.
1840 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT
1841 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD
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
2056 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE
2057 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS
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....
2101 /****************************************************************
2108 VMINUS, CMA IAC / COMPLEMENT
2109 RTR / DIVIDE BY FOUR
2110 AND P1777 / DELETE UPPER TWO BITS
2120 VCLDX, 0 / INTENSIFY LAST POINT AND LOAD NEW X VALUE
2121 JMS VDIV / DIVIDE BY FOUR
2122 DISD / DISPLAY READY?
2125 DILX / LOAD NEW X VALUE
2126 JMP I VCLDX / RETURN
2129 JMS VDIV / DIVIDE BY FOUR
2130 DILY / LOAD NEW Y VALUE
2136 /****************************************************************
2141 /GENERAL PURPOSE SYMBOL GENERATOR
2143 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING
2144 DCA ADDR /STORE STRING ADDRESS
2145 TAD I ADDR /FETCH DOUBLE 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
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!
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
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
2209 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR
2210 DCA POINT /STORE AS INDIRECT ADDRESS
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
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
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
2249 TABLE, .+1 /TABLE BASE ADDRESS
2250 0 /SPECIAL CHARACTER (00)
2251 TERM /TERMINATION CODE
2312 0 /SPECIAL CHARACTER (37)
2314 0 /SPECIAL CHARACTER (40)
2334 4040 / UNDERSCORE (52)
2338 0 /SPECIAL CHARACTER (54)
2368 0 /SPECIAL CHARACTER (73)
2369 CRLF /CARRIAGE RETURN; LINE FEED
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.
2414 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO
2415 / AROUND 7575 OR SO.
2427 ////////////////////////////
2431 ///////////////////////////