3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR
8 / CHANGED THE PROGRAM FOR MY LAB-8/E
10 / REAL-TIME PROGRAMMABLE CLOCK (DK8-EP)
11 / BUFFERED DIGITAL I/O (DR8-EA)
12 / POINT-PLOT DISPLAY CONTROL (VC8-E)
14 / MAIN DIFFERENCES TO LAB-8:
15 / * CLOCK IS PROGRAMMABLE. INTERRUPT-RATE HAS TO BE TO PROGRAMMED
17 / * DIGITAL I/O HAS 12BIT INPUT.
18 / * POINT-PLOT DISPLAY HAS 10BIT RESOLUTION, BUT CANNOT INTENSIFY.
19 / ALSO INTENSITY-PULSE (DIXY) DOESN'T WORK SATISFACTORING.
20 / SO I ADDED STARS IN THE SKY, TO EMPLOY THE ELECTRON-BEAM WHILE
21 / WAITING FOR NEXT INTERRUPT.
22 / STARS COME FROM A STAR-MAP IN THE 20-VOL. "DTV-LEXIKON" FROM
23 / 1972. ISBN 3-423-03067-4. THE MAP IS IN VOL. 17 ON PAGE 283.
24 / I MADE A PHOTOCOPY FROM THIS BOOK IN SCALE 1:2 FOR BETTER
25 / ACCURACY. TO AVOID NEGATIVE COORDINATES, I LAID 0:0 IN THE
26 / LOWER LEFT CORNER OF THE MAP.
28 / I ALSO ADDED A SCORE COUNTER.
34 / THIS VERSION WORKS OFF EITHER THE BLUE RIBBON CONNECTOR OR THE
35 / SR. WHEN THE PROGRAM IS STARTED (AT 0200) OR RESTARTED THE
36 / SR WILL BE TESTED AND IF =0000 WILL BE USED FOR THE COMMAND
37 / INPUT. OTHERWISE, THE BLUE RIBBON CONNECTOR (AX08 * C0-C7 *
38 / XR OPTION ONLY) CONTINGENCY INPUTS WILL BE USED.
40 / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD
41 / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP
44 / THE COMMAND WORD BIT ASSIGNMENTS ARE:
46 / SR BIT: C: FUNCTION:
48 / 0 0 SHIP ONE ROTATES LEFT
50 / 1 1 SHIP ONE ROTATES RIGHT
52 / 2 2 SHIP ONE ACCELERATES
58 / 8 4 SHIP TWO ROTATES LEFT
60 / 9 5 SHIP TWO ROTATES RIGHT
62 / 10 6 SHIP TWO ACCELERATES
68 / NOTE THAT TURNING RIGHT AND LEFT SIMULTANEOUSLY THROWS
69 / THE SHIP INTO HYPERSPACE. IN THE CURRENT VERSION THE ODDS
70 / ARE IN FAVOR OF YOUR MAKING IT BACK SAFELY. THE GAME IS OVER
71 / WHEN ONE OR BOTH OF THE SHIPS HAVE BEEN DESTROYED AND THE
72 / WINNER (IF ANY) IS IN NORMAL SPACE. WHEN THE WINNER
73 / HAS BEEN ANNOUNCED, HIT ANY TTY KEY TO RESTART.
78 / SYMBOL DEFINITIONS FOR PAL8-PAL10
80 DXC=6301 /CLEAR X REGISTER
81 DYC=6311 /CLEAR Y REGISTER
82 DYL=6312 /LOAD Y FROM AC
83 DXL=6302 /LOAD X FROM AC
84 DIS=6304 /INTENSIFY POINT
85 SKXK=6321 /SKIP ON CRYSTAL CLK FLAG
86 DSB=6324 /SET BRIGHTNESS (BRIGHT)
87 XRIN=6331 /OR EXTERNAL SENSE REGISTER IN AC
88 XRCL=6334 /SET BITS IN AC CLEAR CORRESP. BITS IN SENSE REG.
89 ZTEN=6342 /ZEROS IN AC CLEAR BITS IN ENABLE REGISTER
90 OTEN=6344 /ONES IN AC SET BIS IN ENABLE REG. THEN CLA
91 CLXK=6352 /CLEAR CRYSTAL CLK FLAG
92 CRF=6072 /CLEAR SOME UNKNOWN FLAGS
93 CCF=6052 /CLEAR SOME UNKNOWN FLAGS
95 CLZE=6130 /CLEAR CLOCK ENA REG. PER 1 IN AC
96 CLSK=6131 /SKIP ON CLOCK FLAG
97 CLOE=6132 /SET CLOCK REG PER 1 IN AC
98 CLAB=6133 /AC TO CLOCK COUNTER
99 CLSA=6135 /STATUS TO AC, CLEAR CLK FLAG
101 DISD=6052 /SKIP ON DONE
102 DILX=6053 /LOAD X REGISTER
103 DILY=6054 /LOAD Y REGISTER
104 DIXY=6055 /CLEAR DONE AND INTENSIFY
106 DBRI=6514 /LOAD CONTENT OF INPUT REGISTER TO AC
108 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR
109 / REAL WORLD TIMING PURPOSES.
114 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT
115 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE
118 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR
119 ODT1, 0 /DEBUGGERS, ETC.
124 / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF
125 / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT
126 / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF
142 / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS
143 / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS
144 / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED
145 / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED
150 ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION
151 ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED
152 ONEFLG, 0 /IN OR OUT OF NORMAL SPACE
153 ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN
154 ONEVEX, 0 /X COMPONENT OF VELOCITY
155 ONEVEY, 0 /Y COMPONENT OF VELOCITY
156 ONEPEX, 0 /X POSITION (12 BITS)
157 ONEPEY, 0 /Y POSITION (12 BITS)
158 ONESIN, 0 /SINE OF ANGLE
159 ONECOS, 0 /COSINE OF ANGLE
160 ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT
162 TWOOUT, 0 /SAME CONTENT AND ORDER
179 / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN
180 / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN
181 / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM
194 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST
195 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES.
209 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON
282 / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200.
283 / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED,
284 / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES
285 / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR
286 / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT
287 / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08
288 / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY
289 / FILE UPDATE TO START OFF THE GAME.
294 START, CLA CLL /START OR RESTART HERE ANY OLD TIME
298 TAD XROPT /USE THE BLUE RIBBON CONNECTOR
299 DCA COLDST /AND LEAVE IN THE TRAP LOCATION
307 TAD P17 /FIRST CLEAR THE POSITION AND DATA
308 DCA AUTO10 /TABLES OF THE TWO SHIPS
315 TAD STRT1 /SET THE STARTING POSITIONS OF THE
316 DCA ONEPEX /TWO SHIPS
319 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE
322 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP
325 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE
327 DCA ONEFIN /CLEAR ALL GAME END FLAGS
330 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS
336 TAD P5410 /START UP THE CRYSTAL CLOCK IN THE AX08
338 TCF /CLEAR OTHER REMAINING LIKELY FLAGS
341 JMP COLDST /AND GO TO IT
345 / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE
346 / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE
347 / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT
348 / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER
349 / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN.
352 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW.
354 COLDST, 0 /TRAP TO READ SR OR BRC
356 / SWITCHES FOR SHIP 1 AND 2 WERE WRONG! KKK
357 DCA INTWRD /STORE TEMPORARILY
360 TAD INTWRD /MASK OUT LEFTMOST 4 BITS
364 DCA INTTEM /AND STORE
365 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO
369 TAD INTTEM /ADD TOGETHER
370 JMP CODST1 /AND CONTINUE
373 / XRIN /HERE FOR BRC - PICK UP AND CLEAR
386 CODST1, DCA INTWRD /CONTINUE
387 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT
389 ION /GET READY FOR THE NEXT CYCLE
390 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME?
391 IAC /ONLY WHEN ACCFLG=0
393 TAD ACCPER /IF ZERO, RESET COUNT
396 JMP I .+1 /NOW GET DOWN TO WORK.
400 TABLEN, AUTO17-CALCOS
415 / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE
416 / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE
417 / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS
418 / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO
421 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS
422 / SET IN WHICH CASE THE GAME IS RESTARTED.
424 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM
425 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE
429 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE
431 DCA INTLNK /FOR POSSIBLE CONTINUATION
432 / SKXK /WAS IT THE CRYSTAL CLOCK?
434 JMP INTBUS /NO TRY SOMETHING ELSE
435 / CLXK /YES CLEAR THE FLAG
437 ISZ CLOCK /AND BUMP CLOCK COUNTER
439 ISZ INTCNT /TIME FOR AN UPDATE?
440 JMP INTRET /NO, DISMISS THE INTERUPT
441 JMP UPDATE /YES, GO TO IT
443 INTBUS, KSF /HERE ON NON-CLOCK INTERUPT
444 JMP .+5 /NOT THE KEYBOARD
449 TAD GAMOVR /IS THE GAMEOVER
451 JMP RESTRT /YES, RESTART
452 TCF /NO, HELL WITH IT
453 ISZ INTGLH /COUNT ONE BADDIE
455 HLT /HALT IF TOO MANY BADDIES
457 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT
473 / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP
474 / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON
475 / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS
476 / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN,
477 / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS
478 / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS.
479 / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR
484 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE
487 IAC /NO, BUT IS IT JUST COMING OUT?
489 TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED
490 DCA ONEFLG /OTHERWISE JUST COUNT ONE
491 JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO
493 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING?
495 JMP ONEFIG /IF YES, ALLOW NO CONTROLS
496 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED?
498 JMS I ONEWN /YES, SIGNAL VICTORY
499 TAD INTWRD /NOW BEGIN TEST OF REQUEST
500 AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE!
501 TAD OM300 /TEST BITS 4 AND 5
503 JMP ONELEF /NOPE, CONTINUE
504 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE
506 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN?
510 CLA CLL CMA /YES DECREMENT ANGLE
513 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN
516 IAC /YES, INCREMENT ANGLE
518 ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE)
519 JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS
520 DCA ONETHE /AND STORE
521 TAD ONETHE /FIND THEM TRIG FUNCTIONS
522 JMS I SINE /AND STORE ONCE AND FOR ALL
523 DCA ONESIN /IN THE APPROPRIATE PLACES
527 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING
533 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE?
536 TAD INTWRD /YES, ANY REQUESTED?
539 JMP ONEVEL /NONE REQUESTED
540 TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING
541 TAD ONEVEY /ON ORIENTATION
542 JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM
543 DCA ONEVEY /AND STORE
544 TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT
551 ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE
552 JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4
553 JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION
555 DCA ONEPEX /IGNORE ANY OVERFLOW
556 TAD ONEVEY /DO THE SAME FOR Y COORDINATE
557 JMS I ISHFT /AND VELOCITY COMPONENT
561 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF
567 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED
570 ISZ LNC1FG /NO, CONTINUE RELOADING
571 JMP I ITWOUP /AND EXIT
572 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED?
575 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT
577 TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH
578 DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE
579 TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE)
580 JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY
581 JMS I RSHIFT /COMPONENT OF PROJECTILE
583 JMS I RSHIFT /AND STICK IT IN THE FILE
585 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE
586 CLL RTL /SHIP OF ORIGIN
588 DCA I AUTO16 /AND STORE X POSITION
589 TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND
590 JMS I ISHFT /POSITION
599 TAD M200 /START RELOAD CYCLE
601 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE
603 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO
606 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE
608 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5
610 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE
614 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO.
615 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE.
628 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE
630 JMP TWOOK /YES, CONTINUE
631 IAC /NO, BUMP COUNT AND TEST FOR REENTRY
633 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED
634 DCA TWOFLG /AND CONTINUE
637 TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE
638 SZA CLA /IS IT EXPLODING?
639 JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE
640 TAD ONEFIN /DID WE JUST WIN?
642 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE
643 TAD INTWRD /TEST FOR HYPERSPACE REQUEST
645 TAD OM14 /BITS 8 AND 9 MUST BE SET
647 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0
649 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8
653 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE
654 JMP TWOFIG /SKIP TEST FOR RIGHT TURN
656 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9
659 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE
661 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE
662 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE
663 DCA TWOTHE /AND STORE
665 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS
666 DCA TWOSIN /AND STORE IN DATA TABLE
670 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING
676 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED
677 SZA CLA /DURING THIS UPDATE CYCLE
679 CLL IAC RAL /YES, TEST FOR BIT 2 SET
684 TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF
685 TAD TWOVEX /ANGLE OF ORIENTATION
686 JMS I VEESCL /AND SCALE TO NOT EXCEED MAX
687 DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE
696 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY
697 JMS I ISHFT /COMPONENTS/16
712 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST
713 SNA CLA /TEST TO SEE IF RELOAD COMPLETE
715 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT
717 IAC /YES, TEST TRIGGER BIT 11
720 JMP I IONEST /NOT SET, HELL WITH IT
722 TAD PROLIF /OK, SET PROJECTILE LIFE
723 DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT
724 TAD TWOVEX /ADD SHIPS VELOCITY
725 JMS I ISHFT /(ADJUSTED)
727 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT
728 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION
730 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD
732 TAD TWOPEX /X COMPONENT
734 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY
735 JMS I ISHFT /Y POSITION AND COSINE
745 DCA LNC2FG /200 CYCLES OF RELOAD
746 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE!
748 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS
751 LNC2FG, 0 /RELOAD COUNT
753 OP14, 14 /HYPERSPACE CODE
759 / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT
760 / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL
761 / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY
762 / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE
763 / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN
764 / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE
765 / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS
766 / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE
767 / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE:
769 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE]
771 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE]
773 / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE
774 / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE
775 / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL)
776 / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE
777 / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND
778 / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES
779 / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS
780 / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE
781 / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS.
783 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7
784 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED.
786 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED
787 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE.
793 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE
794 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE
797 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS
801 JMS I CALPOS /CALL THE CALCULATOR
804 / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE
805 / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES
806 / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE
807 / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED
808 / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y
809 / DISPLACED BY X,Y OF THE SHIP ITSELF
812 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE
814 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS
816 DCA I AUTO10 / 0,3 OR TOP CENTER
825 TAD T10SIN /OR JUST LEFT OF DEAD CENTER
826 TAD ONEPEY /AND SO ON
830 TAD T30COS /THE THIRD POINT IS
834 TAD T30COS /OR BOTTOM LEFT HAND CORNER
847 CIA /OR JUST BELOW CENTER
851 FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE
852 AND P40 /FLAME WITH AN EXTRA POINT SOME
853 SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP
854 JMP ONECON /POWER NOT ON - CONTINUE
855 TAD ONEOUT /DO NOT ALLOW IF EXPLODING
859 TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND
860 SNA /OFF TO MAKE IT FLICKER. DISPLAY THE
861 CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE
865 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP
867 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME
868 CMA /WITH LONG SHORT LONG SHORT
871 TAD ONFG2 /TIP OF FLAME AT EITHER
888 TAD ONEPEX /RETURN DISPLAY TO 0,-1
894 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
898 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8
901 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT
905 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER
916 CIA / OR JUST RIGHT OF CENTER
920 TAD T30SIN /FINALLY BACK TO
924 TAD ONEPEY / TOP CENTE
927 JMP I ITWOST /NOW FOR NUMBER TWO
930 ONFG1, 0 /USED TO COUNT FLICKERS
931 ONFG2, 0 /SHORT OR LONG FLAG
935 / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO.
936 / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH
937 / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS
942 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE
946 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS
947 DCA CALSIN /CALCULATED
952 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY
954 TAD T30SIN /FIRST POINT AT
958 TAD TWOPEY / OR TOP CENTER
967 TAD T20COS /SECOND POINT
971 TAD T20COS /THIRD POINT
984 TAD TWOPEX /FOURTH POINT
1003 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON
1006 JMP TWOCON /NO, FORGET IT
1007 TAD TWOOUT /NOT ALLOWED IF EXPLODING
1011 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1
1016 ISZ TWFG1 /ALSO THE LENGHT VARIATION
1019 TAD TWFG2 /EVERY OTHER TIME LONG
1022 /FLAME TIP AT EITHER
1038 TAD T20SIN /NOW BACK UP TO THE SHIP
1047 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
1051 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10
1054 TAD T30SIN /CONTINUE WITH DISPLAY FILE
1055 CIA /NEXT POINT AT 2,-3
1067 TAD T20COS /NEXT POINT
1075 TAD T20COS /AND THE NEXT AT
1088 TAD T30COS /AND THE LAST AT
1092 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS
1095 TWFG1, 0 /FLIK THE FLAME
1096 TWFG2, 0 /LONG OR SHORT
1100 / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION
1101 / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END
1102 / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS
1103 / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR
1104 / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES.
1109 FILDIS, CLA CLL /ALL SET TO GO
1110 JMS I COLIDE /TEST FOR COLLISION FIRST
1111 / DSB 1 /IF NO COLLISION
1113 TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL
1117 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE
1118 DCA AUTO10 /FOR NUMBER ONE
1119 TAD ONECNT /ALONG WITH VECTOR COUNT
1121 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR
1125 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION?
1127 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION
1129 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS
1130 DCA XTWODS /SET X AND Y TO NEW POINT
1133 JMS I VECTOR /CALL THE DOT DRAWING MACHINE
1140 JMP TWODIS /DO NUMBER TWO ON OVERFLOW
1141 TAD XTWODS /SWAP POINTS FOR NEXT PAIR
1143 TAD YTWODS /THE GENERATOR DRAWS FROM ONE
1144 DCA YONEDS /TOWARDS TWO
1149 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO
1150 SZA CLA /BUT NOT IF IN HYPER SPACE
1153 TAD TWOFIL /SET UP FILE POINTER AS IN ONE
1155 TAD TWOCNT /AND THE COUNT
1157 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO
1161 TAD TWOOUT /IS IT EXPLODING?
1163 JMP I ITWOEX /YES, HOW EXCITING
1165 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF
1168 DCA YTWODS /AND CALL THE VECTOR SEQUENCE
1173 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO
1174 IPRODS, PRODIS /DO THE PROJECTILE THING
1176 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR
1177 DCA XONEDS /OF POINTS
1188 / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A
1189 / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS.
1190 / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND
1191 / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT
1192 / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE.
1196 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR
1197 TAD XONEDS /FROM XONEDS,YONEDS
1198 CIA /TO XTWODS,YTWODS
1199 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO
1201 DCA DIXTEM /AND STORE INCREMENT
1207 TAD M4 /FOR FOUR DOTS
1210 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y
1212 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS
1213 TAD YONEDS /XONEDS AND YONEDS
1217 RTR /DIVIDE BY 8 TO FIT SCREEN SIZE
1220 / DXC DXL /SET X VALUE
1224 TAD YONEDS /DO THE SAME FOR Y
1228 / DYC DYL DIS /AT LAST SOMETHING TO SEE!!
1232 ISZ DISCNT /DONE YET?
1237 DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED
1238 CLL /FROM EVERYWHERE TO DIVIDE THE
1239 SPA /AC BY FOUR WITH AN ASR RIGHT
1240 CML IAC /NOTE THAT NEGATIVE NUMBERS ARE
1241 RAR /ROUNDED UPWARDS (TOWARD ZERO)
1242 CLL /TO MAKE IT COME OUT RIGHT
1244 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS
1245 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES
1250 / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS.
1251 / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH
1252 / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS
1253 / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR
1259 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES
1260 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE
1262 NOP / DSB 2 KKKK /SET EXTRA BRIGHT FOR SINGLE POINTS
1264 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT
1266 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT
1267 IAC /INCREMENT COUNT AND REPLACE
1269 ISZ BUFTMP /BUMP POINTER TO X VELOCITY
1271 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION
1272 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT
1275 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST
1276 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY
1279 TAD I BUFTMP /SAME LITTLE GAME
1282 DCA PROY /STORE THE NEW Y VALUE
1284 TAD PROX /DISPLAY THE POINT WITH
1285 RTR /THE SAME SHIFT AS FOR THE SHIPS
1286 / RAR /FOR THE SMALL SCREEN
1293 / DYC DYL DIS /THERE IT IS!!
1296 JMS I CHKOUT /TEST FOR A HIT
1297 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END
1298 TAD BUFTMP /OF BUFFER
1301 JMP PROLOP /NOT AT END - CONTINUE
1304 / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR
1305 / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP
1306 / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT
1307 / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE
1308 / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED
1309 / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING
1310 / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD
1311 / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT
1312 / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY.
1316 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT?
1318 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE
1321 TAD M1000 /MOVE THE BEAM OFF SCREEN
1333 EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER
1334 TAD P5 /POINTER TO THE NEXT PROJECTILE
1335 DCA BUFTMP /UNLESS THE END
1336 TAD BUFTMP /OF THE BUFFER
1337 TAD BUFLIM /IS REACHED
1338 SZA CLA /IN WHICH CASE
1346 RESE1, 0 /THIS IS CALLED TO SET THE POINTER
1347 TAD MRES /(AUTO16) TO THE NEXT FREE SLOT
1348 DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE
1350 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT
1353 TAD RESPNT /RESTE IF AT END OF BUFFER
1360 RESCON, TAD I RESPNT /FIND A HOLE YET?
1362 JMP RESFND /YES, SET UP AUTO16
1363 ISZ RESCNT /NO COUNT
1364 JMP RESLOP /AND TRY AGAIN
1365 HLT /NO HOLES AT ALL?
1367 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING
1377 CMA /THIS ROUTINE IS CALLED FROM THE
1378 TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL
1379 DCA AUTO16 /THE BUFFER POINTERS AND SO ON
1386 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
1438 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO
1440 JMP I CHECK /BUT NOT IF IN HYPERSPACE
1441 TAD TWOOUT /OR IF ALREADY HIT
1445 TAD PROX /CHECK X'S FIRST
1448 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1450 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY
1452 JMP I CHECK /NOWHERE NEAR CLOSE
1454 TAD PROY /NYAH, NYAH
1458 CIA /ABSOLUTE VALUE OF DIFFERENCE
1461 JMP I CHECK /CLEAN MISS!
1463 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING
1464 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT
1466 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE
1468 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT
1470 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY
1471 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE
1481 / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE
1482 / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED
1483 / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING
1484 / THEIR EXPLOSION COUNTS NON-ZERO.
1488 COLLID, 0 /HERE TO TEST FOR COLLISION
1489 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN
1490 SZA CLA /HYPERSPACE OR EXPLODING
1502 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION
1503 CIA /CHECK X COORDINATES FIRST
1505 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1507 TAD COLLIM /CLOSE ENOUGH?
1509 JMP I COLLID /NOPE, FORGET IT
1511 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES
1515 CIA /GET MAGNITUDE ONLY
1517 SMA CLA /CLOSE ENOUGH?
1519 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS
1528 / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO
1529 / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP
1530 / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM
1531 / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE
1532 / VARIOUS PARAMETERS FOR REENTRY.
1537 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0
1538 TAD RTNFLG /SET UP LIST POINTER
1540 TAD ONEDIF /TO APPROPRIATE SHIP FILE
1544 TAD CLOCK /SET UP "RANDOM NUMBER GENERATOR"
1546 TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME
1547 AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777
1548 CIA /UPDATE CYCLES ( ABOUT 15 SECONDS)
1549 DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT
1551 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE
1552 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY
1554 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY
1555 JMS VEESET /COMPONENT
1557 TAD I AUTO17 /AND THEN THE Y COMPONENT
1566 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY
1568 TAD MHYP /ABOUT 3/4 CHANCE
1571 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET
1572 SZA CLA /UP FOR EXPLOSION ON REENTRY
1584 ONEDIF, ONEFLG-TWOFLG
1594 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS
1598 AND HM177 /LIMIT TO 177
1601 JMP I VEESET /AND EXIT
1605 ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS
1606 TAD ONETHE /AN EXPLOSION
1607 TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP
1609 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR
1610 ISZ ONEOUT /DONE WITH THE EXPLOSION?
1611 JMP I NOWTWO /NO, NORMAL RETURN
1613 IAC /YES, SET INTO PSEUDO HYPER SPACE
1615 IAC /DISABLE RETURN FROM HYPER SPACE
1618 TAD TWOFIN /IS NUMBER TWO STILL AROUND?
1620 JMP I NOWTWO /YES, RETURN
1621 JMP I TIEUP /NO, TIE BALL GAME
1624 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO
1625 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND
1628 JMS I IXPDIS /THEN DISPLAY IT
1629 ISZ TWOOUT /DONE WITH EXPLOSION?
1630 JMP I NOWPRO /NO, NORMAL RETURN
1632 IAC /YES, SEND INTO PSEUDO HYPER SPACE
1634 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE
1638 SZA CLA /STILL ALIVE AND WELL?
1639 JMP I TIEUP /NO, TIE GAME
1640 JMP I NOWPRO /YES, CONTINUE ON
1650 / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS
1651 / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL
1652 / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS
1653 / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S
1654 / A SORT OF CLOBBY EXPLOSION.
1659 EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT
1660 TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY
1661 DCA XTWODS /SET UP BY FILDIS OR TWODIS
1662 TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE
1666 CIA /CALCULATE INCREMENT THE WRONG WAY
1668 DCA DIXTEM /AND STORE
1672 DCA DIYTEM /SAME FOR Y
1674 TAD M4 /4 DOTS IN THE VECTOR"
1675 DCA DISCNT /COULD HAVE CALLED THE OTHER
1676 /VECTOR GENERATOR I SUPPOSE
1678 TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING
1679 DCA XONEDS /TOTALS AND DISPLAY THE RUNNING
1680 TAD YONEDS /TOTALS NORMAL SIZE
1685 RTR /COULD MAKE TWICE AS BIG BY NOP-ING
1686 NOP / RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH
1687 DILX / DXC DXL KKKK /AS IT IS
1694 ISZ DISCNT /DONE 4 DOTS?
1697 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE?
1699 JMP I EXPDIS /YES, EXIT
1701 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS
1710 / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS.
1711 / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140
1712 / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED
1713 / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y
1714 / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT
1715 / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE
1716 / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE.
1720 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN
1723 SMA /BRANCH FOR POSITIVE OR NEGATIV
1726 SMA CLA /GREATER THAN MAXIMUM POSITIVE?
1728 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET
1729 JMP I VEELIM /TO MAX NEGATIV
1731 VEEPOS, TAD VEEMIN /GREATER THAN MAX?
1734 TAD VEEMAX /YES SET TO MAX
1737 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG
1744 THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE
1745 SMA /0-550 OR 0-360 DEGREES. THIS IS
1746 JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW
1747 TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE
1748 JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC
1749 TAD M550 /MODULO 360 AND EXITS
1752 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T
1757 / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED.
1758 / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND
1759 / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE
1760 / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY
1761 / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF
1762 / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT
1763 / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE
1764 / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE
1765 / INTERGALACTIC DUST.
1769 ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET
1770 TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR
1771 DCA MESS /AND SET GAMOVR FLAG
1778 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE
1780 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET
1781 TAD MES2 /AND TWO FIN IS NOT
1782 DCA MESS /SET ALSO GAMOVR
1801 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN
1804 DCA GAMOVR /NOBODY EVER REALLY WINDS
1805 /UP THE WINNER IN THESE THINGS
1806 JOBLOP, JMP IDLE / DSB 1 KKKK /THIS IS ENTERED FROM FINISH WH
1807 TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY
1808 JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN
1809 TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT
1810 JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED
1811 TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS
1812 JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED
1833 / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED
1834 / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER
1835 / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT
1836 / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES
1837 / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES
1838 / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER
1839 / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT
1840 / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE
1841 / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO
1842 / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN
1843 / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH
1844 / THIS WAS STOLEN HAD FULL WORD PRECISION.
1849 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT
1850 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD
2011 MULTI, 0 /THIS IS STANDARD SINGLE PRECISION
2012 CLL /MULTIPLY ROUTINE WHICH WAS ONCE
2013 SPA /USED. I'VE LEFT IT IN SINCE
2014 CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND
2015 DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT
2016 DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE
2017 TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT
2061 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE
2062 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS
2075 / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS
2076 / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING
2077 / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION
2078 / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND
2079 / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR
2080 / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER
2081 / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT....
2109 /GENERAL PURPOSE SYMBOL GENERATOR
2111 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING
2112 DCA ADDR /STORE STRING ADDRESS
2113 TAD I ADDR /FETCH DOUBLE CHARACTER
2117 JMS CHAR /PLOT CHARACTER
2118 SKP /NORMAL RETURN -- SKIP
2119 JMP I CHARS /TERMINATION RETURN -- EXIT
2120 TAD I ADDR /RECALL DOUBLE CHARACTER
2121 ISZ ADDR /ADVANCE STRING ADDRESS
2122 JMS CHAR /PLOT CHARACTER
2123 JMP CHARS+2 /NORMAL RETURN -- REPEAT
2124 JMP I CHARS /TERMINATION RETURN -- EXIT
2126 CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER
2127 AND K77 /MASK OUT UPPER BITS
2128 CLL RAL /MULTIPLY CODE BY TWO
2129 TAD TABLE /ADD TABLE BASE ADDRESS
2130 DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE
2131 CMA /INITIALIZE COUNTER FOR
2132 DCA COUNT2 / TWO PLOT WORDS
2133 TAD I POINT /FETCH FIRST PLOT WORD
2134 ISZ POINT /INCREMENT POINTER FOR NEXT ONE
2135 SNA /SKIP IF NOT SPECIAL CHARACTER
2136 JMP SPCHAR /ELSE GO PROCESS IT
2137 DCA CURPLT /SAVE CURRENT PLOT BITS
2138 XPLOT, TAD KM6 /INITIALIZE 6-BIT
2139 DCA COUNT6 / COUNTER
2140 TAD YVALUE /RESET Y TEMPORARY
2141 DCA YTEMP / VALUE FOR CHARACTER
2142 TAD XVALUE /OUTPUT CURRENT
2146 / DILX / DXC DXL / KKKK X-VALUE TO CRT
2148 TAD XINCR /INCREMENT
2149 DCA XVALUE / ABSCISSA
2150 YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS
2151 CLL RAL /GET NEXT BIT
2152 DCA CURPLT /SAVE REMAINING PLOT BITS
2153 SNL /SKIP IF POINT TO PLOT
2154 JMP CNTINU /ELSE JUMP AHEAD
2155 TAD YTEMP /OUTPUT CURRENT
2157 DILY / DYC DYL DIS /KKKK / Y-VALUE TO CRT
2161 TAD CURPLT /RECALL CURRENT PLOT BITS
2162 SNA CLA /SKIP IF POINTS REMAINING
2163 JMP WRDEND /ELSE WORD IS FINISHED
2164 CNTINU, TAD YTEMP /INCREMENT TEMPORARY
2165 TAD YINCR / Y-VALUE FOR NEXT
2166 DCA YTEMP / CHARACTER STEP
2167 ISZ COUNT6 /SKIP IF 6 BITS PLOTTED
2168 JMP YPLOT /ELSE PLOT NEXT ONE
2169 JMP XPLOT /GO UPDATE X-VALUE
2170 WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD
2171 \f JMP EXIT /ELSE EXIT
2172 TAD I POINT /FETCH SECOND BIT WORD
2173 SZA /SKIP IF NO PLOT POINTS
2174 JMP XPLOT-1 /ELSE GO PLOT THEM
2175 EXIT, TAD XVALUE /INCREMENT ABSCISSA
2176 TAD XINCR / FOR SPACE BETWEEN
2177 DCA XVALUE / SYMBOLS
2178 JMP I CHAR /EXIT FROM CHAR
2180 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR
2181 DCA POINT /STORE AS INDIRECT ADDRESS
2182 \f JMP I POINT /GO TO APPROPRIATE ROUTINE
2183 SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT
2184 CLL RTL /MULTIPLY BY FOUR AND
2185 JMP EXIT / GO CREATE SPACE
2186 CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X
2187 DCA XVALUE / TO ITS ORIGINAL VALUE
2188 LF, TAD YINCR /"LINE FEED"
2189 CLL RTL / DECREMENTS THE
2190 CLL CIA RAL / Y-VALUE BY
2191 TAD YVALUE / EIGHT SCALE
2193 JMP I CHAR /EXIT FROM CHAR
2194 RESET, TAD INITX /"RESET" RESETS
2195 DCA XVALUE / X AND Y TO
2196 TAD INITY / THEIR ORIGINAL
2197 JMP RESET-2 / VALUES
2198 TERM, ISZ CHAR /TERMINATE CODE CAUSES
2199 JMP I CHAR / EXIT TO P+2
2201 INITX, -150 /INITIAL X-VALUE
2202 INITY, 327 /INITIAL Y-VALUE
2203 XVALUE, 0 /CURRENT X-VALUE
2204 YVALUE, 0 /CURRENT Y-VALUE
2205 XINCR, 6 /BASIC X INCREMENT VALUE
2206 YINCR, 10 /BASIC Y INCREMENT VALUE
2207 YTEMP, 0 /TEMPORARY Y-VALUE
2208 CURPLT, 0 /CURRENT PLOT BITS
2209 ADDR, 0 /CURRENT STRING ADDRESS
2210 COUNT6, 0 /6-BIT COUNTER
2211 COUNT2, 0 /2-WORD COUNTER
2212 KM6, -6 /CONSTANT FOR COUNT6
2213 K77, 77 /CHARACTER CODE MASK
2214 POINT, 0 /TABLE POINTER
2218 TABLE, .+1 /TABLE BASE ADDRESS
2219 0 /SPECIAL CHARACTER (00)
2220 TERM /TERMINATION CODE
2281 0 /SPECIAL CHARACTER (37)
2283 0 /SPECIAL CHARACTER (40)
2303 4040 / UNDERSCORE (52)
2307 0 /SPECIAL CHARACTER (54)
2337 0 /SPECIAL CHARACTER (73)
2338 CRLF /CARRIAGE RETURN; LINE FEED
2350 / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS
2351 / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE
2352 / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN.
2379 / KK: ADDED STARS IN THE SKY
2382 RAR / SCALE COORDINATES
2383 TAD M1000 / SHIFT TO LEFT
2389 JMP FINIS3 / END OF STARS
2390 RAR / SCALE COORDINATES
2391 TAD M1000 / SHIFT DOWN
2397 TAD M100 / A LITTLE DELAY
2403 FINIS3, TAD SBI / REINITIALIZE STAR-POINTER
2405 TAD ONE2 / AT THE REAL END:
2406 CMA / POSITION DOT EITHER TO
2407 DCA ONE2 / SHIP1 OR SHIP2
2425 / STARS COME FROM THE 24-VOLUME "DTV-TASCHENLEXIKON"
2509 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO
2510 / AROUND 7575 OR SO.
2521 ////////////////////////////
2525 ///////////////////////////