3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR
6 / HACHTI VARIANT FOR LAB-8/E - WITH JOYSTICK SUPPORT.
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 /***************************
61 /***************************
64 CLZE=6130 / CLEAR CLOCK ENABLE REGISTER PER AC
65 CLSK=6131 / SKIP ON CLOCK FLAG
66 CLOE=6132 / SET CLOCK ENABLE REGISTER PER AC
67 CLAB=6133 / AC REGISTER TO CLOCK COUNTER REGISTER
68 CLEN=6134 / CLOCK ENABLE REGISTER TO AC
69 CLSA=6135 / STATUS TO AC
70 CLBA=6136 / CLOCK BUFFER REGISTER TO AC
71 CLCA=6137 / CLOCK COUNTER REGISTER TO AC
73 / BITS IN CLOCK ENABLE REGISTER
74 CREXT=0100 / EXTERNAL SOURCE
75 CR2=0200 / 10**2 per second
76 CR3=0300 / 10**3 per second
77 CR4=0400 / 10**4 per second
78 CR5=0500 / 10**5 per second
79 CR6=0600 / 10**6 per second
82 CMFREE=0000 / 4096 FIXED FREE RUN
83 CMPROG=1000 / PROGRAMMED DELAY
85 CADC=0040 / START ADC ON OVERFLOW
86 CINH=0020 / INHIBIT CLOCK
87 CION=0010 / INTERRUPT ENABLE
89 CEV3=0004 / EVENT 3 ENABLED
90 CEV2=0002 / EVENT 2 ENABLED
91 CEV1=00001 / EVENT 1 ENABLED
97 DILE=6056 / LOAD ENABLES FROM A
98 DISD=6052 / TEST FOR READY
100 /********************************************************************
101 / JOYSTICK OPERATIONS
102 JOR=6421 / OR JOYSTICK TO AC
103 JLOAD=6422 / CLEAR AC AND READ JOYSTICK
118 /****************************************************************
119 / SYMBOL DEFINITIONS FOR PAL8-PAL10
121 XRIN=NOP / DIGITAL INPUT?
124 /DSB=XXXX / SET BRIGHTNESS - MUST BE COMMENTED OUT!!!
126 DXC=JMS I IVCLDX / X VALUE CONTROL?
127 DYC=JMS I IVCLDY / Y VALUE CONTROL?
129 DXL=0000 / X VALUE LOAD FLAG?
130 DYL=0000 / Y VALUE LOAD FLAG?
131 DIS=0000 / ANOTHER STRANGE FLAG
135 /****************************************************************
137 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR
138 / REAL WORLD TIMING PURPOSES.
143 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT
144 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE
147 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR
148 ODT1, 0 /DEBUGGERS, ETC.
153 / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF
154 / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT
155 / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF
171 / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS
172 / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS
173 / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED
174 / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED
179 ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION
180 ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED
181 ONEFLG, 0 /IN OR OUT OF NORMAL SPACE
182 ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN
183 ONEVEX, 0 /X COMPONENT OF VELOCITY
184 ONEVEY, 0 /Y COMPONENT OF VELOCITY
185 ONEPEX, 0 /X POSITION (12 BITS)
186 ONEPEY, 0 /Y POSITION (12 BITS)
187 ONESIN, 0 /SINE OF ANGLE
188 ONECOS, 0 /COSINE OF ANGLE
189 ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT
191 TWOOUT, 0 /SAME CONTENT AND ORDER
205 / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN
206 / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN
207 / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM
220 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST
221 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES.
234 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON
291 / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200.
292 / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED,
293 / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES
294 / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR
295 / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT
296 / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08
297 / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY
298 / FILE UPDATE TO START OFF THE GAME.
307 START, CAF /START OR RESTART HERE ANY OLD TIME
309 DIXY /TO GET THE VC8-E STARTED ONCE
313 TAD XROPT /USE THE BLUE RIBBON CONNECTOR
314 DCA COLDST /AND LEAVE IN THE TRAP LOCATION
320 TAD P17 /FIRST CLEAR THE POSITION AND DATA
321 DCA AUTO10 /TABLES OF THE TWO SHIPS
328 TAD STRT1 /SET THE STARTING POSITIONS OF THE
329 DCA ONEPEX /TWO SHIPS
332 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE
335 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP
336 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE
338 DCA ONEFIN /CLEAR ALL GAME END FLAGS
341 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS
343 TCF /CLEAR OTHER REMAINING LIKELY FLAGS
347 6405 / CLEAR INTERRUPT ENABLE OF KERMIT'S SER PORT :-(
350 CLZE / CLEAR CLOCK CONFIG REGISTER
352 TAD CDELY / LOAD NEG DELAY
353 CLAB / LOAD TO CLOCK BUFFER
355 TAD CCNF / LOAD CLOCK CONFIG
356 CLOE / SET CONFIG BITS
359 JMP COLDST /AND GO TO IT
361 CCNF, CR4+CMPROG+CION+COVSTAT / CLOCK CONFIGURATION
362 /CDELY, -310 / COUNTER PRESET (200) 50HZ
363 CDELY, -246 / COUNTER PRESET (166) 60HZ
366 / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE
367 / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE
368 / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT
369 / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER
370 / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN.
373 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW.
375 COLDST, 0 /TRAP TO READ SR OR BRC
377 DCA INTWRD /STORE TEMPORARILY
378 TAD INTWRD /MASK OUT LEFTMOST 4 BITS
382 DCA INTTEM /AND STORE
383 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO
385 TAD INTTEM /ADD TOGETHER
386 JMP .+3 /AND CONTINUE
388 CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR
391 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT
393 ION /GET READY FOR THE NEXT CYCLE
394 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME?
395 IAC /ONLY WHEN ACCFLG=0
397 TAD ACCPER /IF ZERO, RESET COUNT
400 JMP I .+1 /NOW GET DOWN TO WORK.
404 TABLEN, AUTO17-CALCOS
410 SWRD, 2000-CODST /SWRD+XROPT=7000=NOP!
416 / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE
417 / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE
418 / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS
419 / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO
422 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS
423 / SET IN WHICH CASE THE GAME IS RESTARTED.
425 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM
426 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE
430 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE
432 DCA INTLNK /FOR POSSIBLE CONTINUATION
434 CLSK /WAS IT THE CRYSTAL CLOCK?
435 JMP INTBUS /NO TRY SOMETHING ELSE
437 CLA IAC RTR /LOAD 4000
438 CLSA /GET CLOCKSTATUS AND RESET FLAG
440 JMP UPDATE /YES, GO TO IT
442 INTBUS, /HERE ON NON-CLOCK INTERUPT
445 JMP NOKEY /NOT THE KEYBOARD, THAT'S BAD!
447 KBDIN, KCC /CLEAR KEYBOARD FLAG
449 KRB / RESET FLAG, CLEAR AC, READ DATA
450 AND KPAR / MASK OUT PARITY
451 TAD NCTRLC / ADD -3 (CTRL-C)
453 JMP I KBOOT / REBOOT!
455 TAD GAMOVR /IS THE GAMEOVER
457 JMP RESTRT /YES, RESTART
467 NOKEY, / STILL NOT FOUND INTERRUPT SOURCE :-(
468 TSF / SKIP IF PRINTER FLAG SET
469 JMP BADDIE / NOT THE PRINTER, NO NEW IDEAS - BAD
470 TCF / CLEAR THAT FLAG
471 JMP INTRET / AND GO HOME
474 KPAR, 177 / ANTI-PARITY MASK
475 NCTRLC, 7775 / -3 (CTRL-C)
476 NCTRLD, 7774 / -3 (CTRL-D)
479 BADDIE, ISZ INTGLH /COUNT ONE BADDIE
481 HLT /HALT IF TOO MANY BADDIES
483 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT
501 / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP
502 / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON
503 / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS
504 / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN,
505 / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS
506 / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS.
507 / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR
513 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE
516 IAC /NO, BUT IS IT JUST COMING OUT?
518 TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED
519 DCA ONEFLG /OTHERWISE JUST COUNT ONE
520 JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO
522 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING?
524 JMP ONEFIG /IF YES, ALLOW NO CONTROLS
525 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED?
527 JMS I ONEWN /YES, SIGNAL VICTORY
528 TAD INTWRD /NOW BEGIN TEST OF REQUEST
529 AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE!
530 TAD OM300 /TEST BITS 4 AND 5
532 JMP ONELEF /NOPE, CONTINUE
533 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE
535 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN?
539 CLA CLL CMA /YES DECREMENT ANGLE
542 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN
545 IAC /YES, INCREMENT ANGLE
547 ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE)
548 JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS
549 DCA ONETHE /AND STORE
550 TAD ONETHE /FIND THEM TRIG FUNCTIONS
551 JMS I SINE /AND STORE ONCE AND FOR ALL
552 DCA ONESIN /IN THE APPROPRIATE PLACES
556 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING
563 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE?
566 TAD INTWRD /YES, ANY REQUESTED?
569 JMP ONEVEL /NONE REQUESTED
570 TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING
571 TAD ONEVEY /ON ORIENTATION
572 JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM
573 DCA ONEVEY /AND STORE
574 TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT
581 ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE
582 JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4
583 JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION
585 DCA ONEPEX /IGNORE ANY OVERFLOW
586 TAD ONEVEY /DO THE SAME FOR Y COORDINATE
587 JMS I ISHFT /AND VELOCITY COMPONENT
591 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF
598 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED
601 ISZ LNC1FG /NO, CONTINUE RELOADING
602 JMP I ITWOUP /AND EXIT
603 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED?
606 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT
608 TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH
609 DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE
610 TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE)
611 JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY
612 JMS I RSHIFT /COMPONENT OF PROJECTILE
614 JMS I RSHIFT /AND STICK IT IN THE FILE
616 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE
617 CLL RTL /SHIP OF ORIGIN
619 DCA I AUTO16 /AND STORE X POSITION
620 TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND
621 JMS I ISHFT /POSITION
630 TAD M200 /START RELOAD CYCLE
632 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE
634 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO
637 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE
639 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5
641 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE
646 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO.
647 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE.
652 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE
654 JMP TWOOK /YES, CONTINUE
655 IAC /NO, BUMP COUNT AND TEST FOR REENTRY
657 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED
658 DCA TWOFLG /AND CONTINUE
661 TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE
662 SZA CLA /IS IT EXPLODING?
663 JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE
664 TAD ONEFIN /DID WE JUST WIN?
666 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE
667 TAD INTWRD /TEST FOR HYPERSPACE REQUEST
669 TAD OM14 /BITS 8 AND 9 MUST BE SET
671 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0
673 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8
677 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE
678 JMP TWOFIG /SKIP TEST FOR RIGHT TURN
680 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9
683 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE
685 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE
686 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE
687 DCA TWOTHE /AND STORE
689 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS
690 DCA TWOSIN /AND STORE IN DATA TABLE
694 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING
701 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED
702 SZA CLA /DURING THIS UPDATE CYCLE
704 CLL IAC RAL /YES, TEST FOR BIT 2 SET
709 TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF
710 TAD TWOVEX /ANGLE OF ORIENTATION
711 JMS I VEESCL /AND SCALE TO NOT EXCEED MAX
712 DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE
721 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY
722 JMS I ISHFT /COMPONENTS/16
738 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST
739 SNA CLA /TEST TO SEE IF RELOAD COMPLETE
741 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT
743 IAC /YES, TEST TRIGGER BIT 11
746 JMP I IONEST /NOT SET, HELL WITH IT
748 TAD PROLIF /OK, SET PROJECTILE LIFE
749 DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT
750 TAD TWOVEX /ADD SHIPS VELOCITY
751 JMS I ISHFT /(ADJUSTED)
753 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT
754 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION
756 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD
758 TAD TWOPEX /X COMPONENT
760 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY
761 JMS I ISHFT /Y POSITION AND COSINE
771 DCA LNC2FG /200 CYCLES OF RELOAD
772 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE!
774 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS
777 LNC2FG, 0 /RELOAD COUNT
779 OP14, 14 /HYPERSPACE CODE
786 / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT
787 / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL
788 / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY
789 / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE
790 / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN
791 / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE
792 / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS
793 / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE
794 / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE:
796 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE]
798 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE]
800 / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE
801 / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE
802 / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL)
803 / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE
804 / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND
805 / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES
806 / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS
807 / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE
808 / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS.
810 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7
811 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED.
813 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED
814 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE.
820 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE
821 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE
824 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS
828 JMS I CALPOS /CALL THE CALCULATOR
831 / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE
832 / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES
833 / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE
834 / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED
835 / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y
836 / DISPLACED BY X,Y OF THE SHIP ITSELF
839 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE
841 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS
843 DCA I AUTO10 / 0,3 OR TOP CENTER
852 TAD T10SIN /OR JUST LEFT OF DEAD CENTER
853 TAD ONEPEY /AND SO ON
857 TAD T30COS /THE THIRD POINT IS
861 TAD T30COS /OR BOTTOM LEFT HAND CORNER
875 CIA /OR JUST BELOW CENTER
879 FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE
880 AND P40 /FLAME WITH AN EXTRA POINT SOME
881 SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP
882 JMP ONECON /POWER NOT ON - CONTINUE
883 TAD ONEOUT /DO NOT ALLOW IF EXPLODING
887 TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND
888 SNA /OFF TO MAKE IT FLICKER. DISPLAY THE
889 CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE
893 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP
895 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME
896 CMA /WITH LONG SHORT LONG SHORT
899 TAD ONFG2 /TIP OF FLAME AT EITHER
916 TAD ONEPEX /RETURN DISPLAY TO 0,-1
922 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
927 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8
930 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT
934 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER
945 CIA / OR JUST RIGHT OF CENTER
949 TAD T30SIN /FINALLY BACK TO
953 TAD ONEPEY / TOP CENTE
956 JMP I ITWOST /NOW FOR NUMBER TWO
959 ONFG1, 0 /USED TO COUNT FLICKERS
960 ONFG2, 0 /SHORT OR LONG FLAG
965 / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO.
966 / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH
967 / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS
972 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE
976 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS
977 DCA CALSIN /CALCULATED
982 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY
984 TAD T30SIN /FIRST POINT AT
988 TAD TWOPEY / OR TOP CENTER
997 TAD T20COS /SECOND POINT
1001 TAD T20COS /THIRD POINT
1014 TAD TWOPEX /FOURTH POINT
1015 DCA I AUTO10 / -2,-3
1034 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON
1037 JMP TWOCON /NO, FORGET IT
1038 TAD TWOOUT /NOT ALLOWED IF EXPLODING
1042 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1
1047 ISZ TWFG1 /ALSO THE LENGHT VARIATION
1050 TAD TWFG2 /EVERY OTHER TIME LONG
1053 /FLAME TIP AT EITHER
1069 TAD T20SIN /NOW BACK UP TO THE SHIP
1078 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
1083 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10
1086 TAD T30SIN /CONTINUE WITH DISPLAY FILE
1087 CIA /NEXT POINT AT 2,-3
1099 TAD T20COS /NEXT POINT
1107 TAD T20COS /AND THE NEXT AT
1120 TAD T30COS /AND THE LAST AT
1124 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS
1127 TWFG1, 0 /FLIK THE FLAME
1128 TWFG2, 0 /LONG OR SHORT
1133 / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION
1134 / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END
1135 / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS
1136 / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR
1137 / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES.
1142 FILDIS, CLA CLL /ALL SET TO GO
1143 JMS I COLIDE /TEST FOR COLLISION FIRST
1144 / DSB 1 /IF NO COLLISION
1145 TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL
1149 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE
1150 DCA AUTO10 /FOR NUMBER ONE
1151 TAD ONECNT /ALONG WITH VECTOR COUNT
1153 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR
1157 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION?
1159 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION
1161 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS
1162 DCA XTWODS /SET X AND Y TO NEW POINT
1165 JMS I VECTOR /CALL THE DOT DRAWING MACHINE
1168 JMP TWODIS /DO NUMBER TWO ON OVERFLOW
1169 TAD XTWODS /SWAP POINTS FOR NEXT PAIR
1171 TAD YTWODS /THE GENERATOR DRAWS FROM ONE
1172 DCA YONEDS /TOWARDS TWO
1178 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO
1179 SZA CLA /BUT NOT IF IN HYPER SPACE
1182 TAD TWOFIL /SET UP FILE POINTER AS IN ONE
1184 TAD TWOCNT /AND THE COUNT
1186 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO
1190 TAD TWOOUT /IS IT EXPLODING?
1192 JMP I ITWOEX /YES, HOW EXCITING
1194 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF
1197 DCA YTWODS /AND CALL THE VECTOR SEQUENCE
1202 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO
1203 IPRODS, PRODIS /DO THE PROJECTILE THING
1205 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR
1206 DCA XONEDS /OF POINTS
1218 / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A
1219 / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS.
1220 / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND
1221 / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT
1222 / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE.
1225 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR
1227 TAD XONEDS /FROM XONEDS,YONEDS
1228 CIA /TO XTWODS,YTWODS
1229 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO
1231 DCA DIXTEM /AND STORE INCREMENT
1237 TAD M4 /FOR FOUR DOTS
1240 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y
1242 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS
1243 TAD YONEDS /XONEDS AND YONEDS
1247 / RTR /DIVIDE BY 8 TO FIT SCREEN SIZE
1249 DXC DXL /SET X VALUE
1251 TAD YONEDS /DO THE SAME FOR Y
1254 DYC DYL DIS /AT LAST SOMETHING TO SEE!!
1256 ISZ DISCNT /DONE YET?
1261 DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED
1262 CLL /FROM EVERYWHERE TO DIVIDE THE
1263 SPA /AC BY FOUR WITH AN ASR RIGHT
1264 CML IAC /NOTE THAT NEGATIVE NUMBERS ARE
1265 RAR /ROUNDED UPWARDS (TOWARD ZERO)
1266 CLL /TO MAKE IT COME OUT RIGHT
1268 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS
1269 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES
1275 / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS.
1276 / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH
1277 / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS
1278 / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR
1284 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES
1285 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE
1287 / DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS
1289 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT
1291 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT
1292 IAC /INCREMENT COUNT AND REPLACE
1294 ISZ BUFTMP /BUMP POINTER TO X VELOCITY
1296 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION
1297 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT
1300 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST
1301 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY
1304 TAD I BUFTMP /SAME LITTLE GAME
1307 DCA PROY /STORE THE NEW Y VALUE
1309 TAD PROX /DISPLAY THE POINT WITH
1310 / RTR /THE SAME SHIFT AS FOR THE SHIPS
1311 / RAR /FOR THE SMALL SCREEN
1317 DYC DYL DIS /THERE IT IS!!
1319 JMS I CHKOUT /TEST FOR A HIT
1320 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END
1321 TAD BUFTMP /OF BUFFER
1324 JMP PROLOP /NOT AT END - CONTINUE
1328 / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR
1329 / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP
1330 / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT
1331 / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE
1332 / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED
1333 / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING
1334 / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD
1335 / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT
1336 / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY.
1340 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT?
1342 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE
1343 / TAD M400 /MOVE THE BEAM OFF SCREEN
1347 TAD INTCNT /PICK UP THE COUNT
1354 EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER
1355 TAD P5 /POINTER TO THE NEXT PROJECTILE
1356 DCA BUFTMP /UNLESS THE END
1357 TAD BUFTMP /OF THE BUFFER
1358 TAD BUFLIM /IS REACHED
1359 SZA CLA /IN WHICH CASE
1367 RESE1, 0 /THIS IS CALLED TO SET THE POINTER
1368 TAD MRES /(AUTO16) TO THE NEXT FREE SLOT
1369 DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE
1371 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT
1374 TAD RESPNT /RESTE IF AT END OF BUFFER
1381 RESCON, TAD I RESPNT /FIND A HOLE YET?
1383 JMP RESFND /YES, SET UP AUTO16
1384 ISZ RESCNT /NO COUNT
1385 JMP RESLOP /AND TRY AGAIN
1386 HLT /NO HOLES AT ALL?
1388 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING
1398 CMA /THIS ROUTINE IS CALLED FROM THE
1399 TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL
1400 DCA AUTO16 /THE BUFFER POINTERS AND SO ON
1407 SETLOP, DCA I SETPNT
1420 / THIS HERE NOW THING CHECKS THE COORDINATES OF THE MOST RECENTLY
1421 / DISPLAYED PROJECTILE AGAINST THOSE OF THE SHIPS ON THE SCREEN.
1422 / IF WITH A COLLISION LIMIT A HIT IS RECORDED AND THE LIFE
1423 / COUNT OF THE PROJECTILE ZEROED TO REMOVE IT. A HIT SHIP
1424 / IS SUITABLY FLAGGED
1429 CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT
1430 TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE
1433 TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT
1437 TAD PROX /CHECK X COORDINATES OF SHIP ONE
1439 TAD ONEPEX /THIS SORT OF THING IS WHY THE
1440 SPA /COORDINATES HAVE TO BE MAINTAINED TO 12
1442 TAD LIMIT /CLOSE ENOUGH?
1444 JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT
1445 TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y?
1454 TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT
1455 DCA ONEOUT /ALL THAT IS NECESSARY
1456 JMS CUTOUT /REMOVE PROJECTILE
1461 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO
1463 JMP I CHECK /BUT NOT IF IN HYPERSPACE
1464 TAD TWOOUT /OR IF ALREADY HIT
1468 TAD PROX /CHECK X'S FIRST
1471 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1473 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY
1475 JMP I CHECK /NOWHERE NEAR CLOSE
1477 TAD PROY /NYAH, NYAH
1481 CIA /ABSOLUTE VALUE OF DIFFERENCE
1484 JMP I CHECK /CLEAN MISS!
1486 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING
1487 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT
1489 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE
1491 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT
1493 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY
1494 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE
1505 / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE
1506 / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED
1507 / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING
1508 / THEIR EXPLOSION COUNTS NON-ZERO.
1512 COLLID, 0 /HERE TO TEST FOR COLLISION
1513 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN
1514 SZA CLA /HYPERSPACE OR EXPLODING
1526 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION
1527 CIA /CHECK X COORDINATES FIRST
1529 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1531 TAD COLLIM /CLOSE ENOUGH?
1533 JMP I COLLID /NOPE, FORGET IT
1535 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES
1539 CIA /GET MAGNITUDE ONLY
1541 SMA CLA /CLOSE ENOUGH?
1543 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS
1553 / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO
1554 / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP
1555 / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM
1556 / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE
1557 / VARIOUS PARAMETERS FOR REENTRY.
1562 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0
1563 TAD RTNFLG /SET UP LIST POINTER
1565 TAD ONEDIF /TO APPROPRIATE SHIP FILE
1569 CLCA /SET UP "RANDOM NUMBER GENERATOR"
1570 /USE CLOCK COUNTER FOR THAT PURPOSE
1572 TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME
1573 AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777
1574 CIA /UPDATE CYCLES ( ABOUT 15 SECONDS)
1575 DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT
1577 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE
1578 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY
1580 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY
1581 JMS VEESET /COMPONENT
1583 TAD I AUTO17 /AND THEN THE Y COMPONENT
1592 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY
1594 TAD MHYP /ABOUT 3/4 CHANCE
1597 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET
1598 SZA CLA /UP FOR EXPLOSION ON REENTRY
1610 ONEDIF, ONEFLG-TWOFLG
1621 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS
1625 AND HM177 /LIMIT TO 177
1628 JMP I VEESET /AND EXIT
1632 ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS
1633 TAD ONETHE /AN EXPLOSION
1634 TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP
1636 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR
1637 ISZ ONEOUT /DONE WITH THE EXPLOSION?
1638 JMP I NOWTWO /NO, NORMAL RETURN
1640 IAC /YES, SET INTO PSEUDO HYPER SPACE
1642 IAC /DISABLE RETURN FROM HYPER SPACE
1645 TAD TWOFIN /IS NUMBER TWO STILL AROUND?
1647 JMP I NOWTWO /YES, RETURN
1648 JMP I TIEUP /NO, TIE BALL GAME
1652 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO
1653 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND
1656 JMS I IXPDIS /THEN DISPLAY IT
1657 ISZ TWOOUT /DONE WITH EXPLOSION?
1658 JMP I NOWPRO /NO, NORMAL RETURN
1660 IAC /YES, SEND INTO PSEUDO HYPER SPACE
1662 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE
1666 SZA CLA /STILL ALIVE AND WELL?
1667 JMP I TIEUP /NO, TIE GAME
1668 JMP I NOWPRO /YES, CONTINUE ON
1679 / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS
1680 / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL
1681 / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS
1682 / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S
1683 / A SORT OF CLOBBY EXPLOSION.
1688 EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT
1689 TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY
1690 DCA XTWODS /SET UP BY FILDIS OR TWODIS
1691 TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE
1695 CIA /CALCULATE INCREMENT THE WRONG WAY
1697 DCA DIXTEM /AND STORE
1701 DCA DIYTEM /SAME FOR Y
1703 TAD M4 /4 DOTS IN THE VECTOR"
1704 DCA DISCNT /COULD HAVE CALLED THE OTHER
1705 /VECTOR GENERATOR I SUPPOSE
1707 TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING
1708 DCA XONEDS /TOTALS AND DISPLAY THE RUNNING
1709 TAD YONEDS /TOTALS NORMAL SIZE
1714 / RTR /COULD MAKE TWICE AS BIG BY NOP-ING
1715 / RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH
1716 JMS I IVCLDX /AS IT IS
1727 ISZ DISCNT /DONE 4 DOTS?
1730 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE?
1732 JMP I EXPDIS /YES, EXIT
1734 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS
1744 / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS.
1745 / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140
1746 / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED
1747 / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y
1748 / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT
1749 / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE
1750 / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE.
1754 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN
1757 SMA /BRANCH FOR POSITIVE OR NEGATIV
1760 SMA CLA /GREATER THAN MAXIMUM POSITIVE?
1762 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET
1763 JMP I VEELIM /TO MAX NEGATIV
1765 VEEPOS, TAD VEEMIN /GREATER THAN MAX?
1768 TAD VEEMAX /YES SET TO MAX
1771 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG
1778 THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE
1779 SMA /0-550 OR 0-360 DEGREES. THIS IS
1780 JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW
1781 TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE
1782 JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC
1783 TAD M550 /MODULO 360 AND EXITS
1786 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T
1792 / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED.
1793 / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND
1794 / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE
1795 / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY
1796 / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF
1797 / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT
1798 / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE
1799 / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE
1800 / INTERGALACTIC DUST.
1804 ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET
1805 TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR
1806 DCA MESS /AND SET GAMOVR FLAG
1809 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE
1811 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET
1812 TAD MES2 /AND TWO FIN IS NOT
1813 DCA MESS /SET ALSO GAMOVR
1818 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN
1821 DCA GAMOVR /NOBODY EVER REALLY WINDS
1822 /UP THE WINNER IN THESE THINGS
1824 / DSB 1 /THIS IS ENTERED FROM FINISH WHEN
1825 TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY
1826 JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN
1827 TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT
1828 JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED
1829 TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS
1830 JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED
1847 / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED
1848 / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER
1849 / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT
1850 / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES
1851 / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES
1852 / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER
1853 / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT
1854 / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE
1855 / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO
1856 / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN
1857 / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH
1858 / THIS WAS STOLEN HAD FULL WORD PRECISION.
1863 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT
1864 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD
2028 MULTI, 0 /THIS IS STANDARD SINGLE PRECISION
2029 CLL /MULTIPLY ROUTINE WHICH WAS ONCE
2030 SPA /USED. I'VE LEFT IT IN SINCE
2031 CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND
2032 DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT
2033 DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE
2034 TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT
2079 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE
2080 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS
2093 / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS
2094 / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING
2095 / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION
2096 / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND
2097 / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR
2098 / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER
2099 / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT....
2124 /****************************************************************
2128 /*****************************
2129 / DIVISION BY 4 ROUTINE
2133 VMINUS, CMA IAC / COMPLEMENT
2134 RTR / DIVIDE BY FOUR
2135 AND P1777 / DELETE UPPER TWO BITS
2139 VPLUS, RTR / DIVIDE BY FOUR
2143 /*****************************
2144 / DIVISION BY 6 ROUTINE
2147 JMP VPLUS6 /DO IN OTHER PLACE
2148 VMIN6, CIA /COMPLEMENT, NOW AC POSITIVE
2149 JMS DIV6 /CALL DIVISION ROUTINE
2150 CMA IAC /COMPLEMENT AGAIN
2153 VPLUS6, JMS DIV6 /CALL DIVISION ROUTINE
2154 JMP I VDIV6 /RETURN TO CALLER
2167 / SOFTWARE DIVISION ROUTINE (DOES NOT FIT!)
2170 DCA REST /INIT DIVISION REST
2171 DCA RESLT /INIT RESULT
2173 TAD (6000 /INITIAL DIVISOR * 2
2174 DCA DIVI /STORE DYNAMIC DIVISOR
2176 TAD (-12 /LOOP COUNTER, -10 (DEC)
2179 DLOOP, /DIVISION LOOP
2185 TAD DIVI /CURRENT DIVISOR
2191 TAD REST /SUBSTRACT FROM REST
2199 BAD, /NO HIT, NO STORE, NO NOTHING
2203 JMP DLOOP /LOOP AGAIN
2216 VCLDX, 0 / INTENSIFY LAST POINT AND LOAD NEW X VALUE
2217 JMS VDIV6 / DIVIDE BY SIX
2218 DISD / DISPLAY READY?
2221 DILX / LOAD NEW X VALUE
2222 JMP I VCLDX / RETURN
2225 JMS VDIV / DIVIDE BY FOUR
2226 DILY / LOAD NEW Y VALUE
2232 /****************************************************************
2237 /GENERAL PURPOSE SYMBOL GENERATOR
2239 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING
2240 DCA ADDR /STORE STRING ADDRESS
2241 TAD I ADDR /FETCH DOUBLE CHARACTER
2245 JMS CHAR /PLOT CHARACTER
2246 SKP /NORMAL RETURN -- SKIP
2247 JMP I CHARS /TERMINATION RETURN -- EXIT
2248 TAD I ADDR /RECALL DOUBLE CHARACTER
2249 ISZ ADDR /ADVANCE STRING ADDRESS
2250 JMS CHAR /PLOT CHARACTER
2251 JMP CHARS+2 /NORMAL RETURN -- REPEAT
2252 JMP I CHARS /TERMINATION RETURN -- EXIT
2254 CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER
2255 AND K77 /MASK OUT UPPER BITS
2256 CLL RAL /MULTIPLY CODE BY TWO
2257 TAD TABLE /ADD TABLE BASE ADDRESS
2258 DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE
2259 CMA /INITIALIZE COUNTER FOR
2260 DCA COUNT2 / TWO PLOT WORDS
2261 TAD I POINT /FETCH FIRST PLOT WORD
2262 ISZ POINT /INCREMENT POINTER FOR NEXT ONE
2263 SNA /SKIP IF NOT SPECIAL CHARACTER
2264 JMP SPCHAR /ELSE GO PROCESS IT
2265 DCA CURPLT /SAVE CURRENT PLOT BITS
2266 XPLOT, TAD KM6 /INITIALIZE 6-BIT
2267 DCA COUNT6 / COUNTER
2268 TAD YVALUE /RESET Y TEMPORARY
2269 DCA YTEMP / VALUE FOR CHARACTER
2270 TAD XVALUE /OUTPUT CURRENT
2271 DILX /X-VALUE TO CRT
2272 TAD XINCR /INCREMENT
2273 DCA XVALUE / ABSCISSA
2274 YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS
2275 CLL RAL /GET NEXT BIT
2276 DCA CURPLT /SAVE REMAINING PLOT BITS
2277 SNL /SKIP IF POINT TO PLOT
2278 JMP CNTINU /ELSE JUMP AHEAD
2279 TAD YTEMP /OUTPUT CURRENT
2280 DILY /Y-VALUE TO CRT
2281 DISD / READY TO DISPLAY THE POINT?
2282 JMP .-1 / NO, WE'LL WAIT.
2283 DIXY / SHOOT THE BEAM!
2286 TAD CURPLT /RECALL CURRENT PLOT BITS
2287 SNA CLA /SKIP IF POINTS REMAINING
2288 JMP WRDEND /ELSE WORD IS FINISHED
2289 CNTINU, TAD YTEMP /INCREMENT TEMPORARY
2290 TAD YINCR / Y-VALUE FOR NEXT
2291 DCA YTEMP / CHARACTER STEP
2292 ISZ COUNT6 /SKIP IF 6 BITS PLOTTED
2293 JMP YPLOT /ELSE PLOT NEXT ONE
2294 JMP XPLOT /GO UPDATE X-VALUE
2295 WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD
2297 TAD I POINT /FETCH SECOND BIT WORD
2298 SZA /SKIP IF NO PLOT POINTS
2299 JMP XPLOT-1 /ELSE GO PLOT THEM
2300 EXIT, TAD XVALUE /INCREMENT ABSCISSA
2301 TAD XINCR / FOR SPACE BETWEEN
2302 DCA XVALUE / SYMBOLS
2303 JMP I CHAR /EXIT FROM CHAR
2305 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR
2306 DCA POINT /STORE AS INDIRECT ADDRESS
2308 JMP I POINT /GO TO APPROPRIATE ROUTINE
2309 SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT
2310 CLL RTL /MULTIPLY BY FOUR AND
2311 JMP EXIT / GO CREATE SPACE
2312 CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X
2313 DCA XVALUE / TO ITS ORIGINAL VALUE
2314 LF, TAD YINCR /"LINE FEED"
2315 CLL RTL / DECREMENTS THE
2316 CLL CIA RAL / Y-VALUE BY
2317 TAD YVALUE / EIGHT SCALE
2319 JMP I CHAR /EXIT FROM CHAR
2320 RESET, TAD INITX /"RESET" RESETS
2321 DCA XVALUE / X AND Y TO
2322 TAD INITY / THEIR ORIGINAL
2323 JMP RESET-2 / VALUES
2324 TERM, ISZ CHAR /TERMINATE CODE CAUSES
2325 JMP I CHAR / EXIT TO P+2
2327 INITX, 0 /INITIAL X-VALUE
2328 INITY, 327 /INITIAL Y-VALUE
2329 XVALUE, 0 /CURRENT X-VALUE
2330 YVALUE, 0 /CURRENT Y-VALUE
2331 XINCR, 6 /BASIC X INCREMENT VALUE
2332 YINCR, 10 /BASIC Y INCREMENT VALUE
2333 YTEMP, 0 /TEMPORARY Y-VALUE
2334 CURPLT, 0 /CURRENT PLOT BITS
2335 ADDR, 0 /CURRENT STRING ADDRESS
2336 COUNT6, 0 /6-BIT COUNTER
2337 COUNT2, 0 /2-WORD COUNTER
2338 KM6, -6 /CONSTANT FOR COUNT6
2339 K77, 77 /CHARACTER CODE MASK
2340 POINT, 0 /TABLE POINTER
2345 TABLE, .+1 /TABLE BASE ADDRESS
2346 0 /SPECIAL CHARACTER (00)
2347 TERM /TERMINATION CODE
2408 0 /SPECIAL CHARACTER (37)
2410 0 /SPECIAL CHARACTER (40)
2430 4040 / UNDERSCORE (52)
2434 0 /SPECIAL CHARACTER (54)
2464 0 /SPECIAL CHARACTER (73)
2465 CRLF /CARRIAGE RETURN; LINE FEED
2478 / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS
2479 / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE
2480 / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN.
2508 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO
2509 / AROUND 7575 OR SO.
2521 ////////////////////////////
2525 ///////////////////////////