3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR
8 / THIS VERSION WORKS OFF EITHER THE BLUE RIBBON CONNECTOR OR THE
9 / SR. WHEN THE PROGRAM IS STARTED (AT 0200) OR RESTARTED THE
10 / SR WILL BE TESTED AND IF =0000 WILL BE USED FOR THE COMMAND
11 / INPUT. OTHERWISE, THE BLUE RIBBON CONNECTOR (AX08 * C0-C7 *
12 / XR OPTION ONLY) CONTINGENCY INPUTS WILL BE USED.
14 / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD
15 / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP
18 / THE COMMAND WORD BIT ASSIGNMENTS ARE:
20 / SR BIT: C: FUNCTION:
22 / 0 0 SHIP ONE ROTATES LEFT
24 / 1 1 SHIP ONE ROTATES RIGHT
26 / 2 2 SHIP ONE ACCELERATES
32 / 8 4 SHIP TWO ROTATES LEFT
34 / 9 5 SHIP TWO ROTATES RIGHT
36 / 10 6 SHIP TWO ACCELERATES
42 / NOTE THAT TURNING RIGHT AND LEFT SIMULTANEOUSLY THROWS
43 / THE SHIP INTO HYPERSPACE. IN THE CURRENT VERSION THE ODDS
44 / ARE IN FAVOR OF YOUR MAKING IT BACK SAFELY. THE GAME IS OVER
45 / WHEN ONE OR BOTH OF THE SHIPS HAVE BEEN DESTROYED AND THE
46 / WINNER (IF ANY) IS IN NORMAL SPACE. WHEN THE WINNER
47 / HAS BEEN ANNOUNCED, HIT ANY TTY KEY TO RESTART.
52 / SYMBOL DEFINITIONS FOR PAL8-PAL10
75 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR
76 / REAL WORLD TIMING PURPOSES.
81 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT
82 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE
85 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR
86 ODT1, 0 /DEBUGGERS, ETC.
91 / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF
92 / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT
93 / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF
109 / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS
110 / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS
111 / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED
112 / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED
117 ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION
118 ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED
119 ONEFLG, 0 /IN OR OUT OF NORMAL SPACE
120 ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN
121 ONEVEX, 0 /X COMPONENT OF VELOCITY
122 ONEVEY, 0 /Y COMPONENT OF VELOCITY
123 ONEPEX, 0 /X POSITION (12 BITS)
124 ONEPEY, 0 /Y POSITION (12 BITS)
125 ONESIN, 0 /SINE OF ANGLE
126 ONECOS, 0 /COSINE OF ANGLE
127 ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT
129 TWOOUT, 0 /SAME CONTENT AND ORDER
143 / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN
144 / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN
145 / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM
158 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST
159 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES.
173 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON
228 / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200.
229 / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED,
230 / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES
231 / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR
232 / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT
233 / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08
234 / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY
235 / FILE UPDATE TO START OFF THE GAME.
240 START, CLA CLL /START OR RESTART HERE ANY OLD TIME
244 TAD XROPT /USE THE BLUE RIBBON CONNECTOR
245 DCA COLDST /AND LEAVE IN THE TRAP LOCATION
251 TAD P17 /FIRST CLEAR THE POSITION AND DATA
252 DCA AUTO10 /TABLES OF THE TWO SHIPS
259 TAD STRT1 /SET THE STARTING POSITIONS OF THE
260 DCA ONEPEX /TWO SHIPS
263 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE
266 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP
267 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE
269 DCA ONEFIN /CLEAR ALL GAME END FLAGS
272 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS
273 TAD P400 /START UP THE CRYSTAL CLOCK IN THE AX08
276 TCF /CLEAR OTHER REMAINING LIKELY FLAGS
282 JMP COLDST /AND GO TO IT
286 / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE
287 / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE
288 / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT
289 / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER
290 / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN.
293 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW.
295 COLDST, 0 /TRAP TO READ SR OR BRC
297 DCA INTWRD /STORE TEMPORARILY
298 TAD INTWRD /MASK OUT LEFTMOST 4 BITS
302 DCA INTTEM /AND STORE
303 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO
305 TAD INTTEM /ADD TOGETHER
306 JMP .+3 /AND CONTINUE
308 CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR
311 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT
313 ION /GET READY FOR THE NEXT CYCLE
314 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME?
315 IAC /ONLY WHEN ACCFLG=0
317 TAD ACCPER /IF ZERO, RESET COUNT
320 JMP I .+1 /NOW GET DOWN TO WORK.
324 TABLEN, AUTO17-CALCOS
335 / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE
336 / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE
337 / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS
338 / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO
341 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS
342 / SET IN WHICH CASE THE GAME IS RESTARTED.
344 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM
345 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE
349 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE
351 DCA INTLNK /FOR POSSIBLE CONTINUATION
352 SKXK /WAS IT THE CRYSTAL CLOCK?
353 JMP INTBUS /NO TRY SOMETHING ELSE
354 CLXK /YES CLEAR THE FLAG
355 ISZ CLOCK /AND BUMP CLOCK COUNTER
357 ISZ INTCNT /TIME FOR AN UPDATE?
358 JMP INTRET /NO, DISMISS THE INTERUPT
359 JMP UPDATE /YES, GO TO IT
361 INTBUS, KSF /HERE ON NON-CLOCK INTERUPT
362 JMP .+5 /NOT THE KEYBOARD
363 KCC /CLEAR KEYBOARD FLAG
364 TAD GAMOVR /IS THE GAMEOVER
366 JMP RESTRT /YES, RESTART
367 TCF /NO, HELL WITH IT
368 ISZ INTGLH /COUNT ONE BADDIE
370 HLT /HALT IF TOO MANY BADDIES
372 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT
385 / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP
386 / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON
387 / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS
388 / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN,
389 / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS
390 / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS.
391 / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR
397 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE
400 IAC /NO, BUT IS IT JUST COMING OUT?
402 TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED
403 DCA ONEFLG /OTHERWISE JUST COUNT ONE
404 JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO
406 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING?
408 JMP ONEFIG /IF YES, ALLOW NO CONTROLS
409 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED?
411 JMS I ONEWN /YES, SIGNAL VICTORY
412 TAD INTWRD /NOW BEGIN TEST OF REQUEST
413 AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE!
414 TAD OM300 /TEST BITS 4 AND 5
416 JMP ONELEF /NOPE, CONTINUE
417 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE
419 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN?
423 CLA CLL CMA /YES DECREMENT ANGLE
426 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN
429 IAC /YES, INCREMENT ANGLE
431 ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE)
432 JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS
433 DCA ONETHE /AND STORE
434 TAD ONETHE /FIND THEM TRIG FUNCTIONS
435 JMS I SINE /AND STORE ONCE AND FOR ALL
436 DCA ONESIN /IN THE APPROPRIATE PLACES
440 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING
446 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE?
449 TAD INTWRD /YES, ANY REQUESTED?
452 JMP ONEVEL /NONE REQUESTED
453 TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING
454 TAD ONEVEY /ON ORIENTATION
455 JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM
456 DCA ONEVEY /AND STORE
457 TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT
464 ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE
465 JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4
466 JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION
468 DCA ONEPEX /IGNORE ANY OVERFLOW
469 TAD ONEVEY /DO THE SAME FOR Y COORDINATE
470 JMS I ISHFT /AND VELOCITY COMPONENT
474 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF
480 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED
483 ISZ LNC1FG /NO, CONTINUE RELOADING
484 JMP I ITWOUP /AND EXIT
485 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED?
488 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT
490 TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH
491 DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE
492 TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE)
493 JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY
494 JMS I RSHIFT /COMPONENT OF PROJECTILE
496 JMS I RSHIFT /AND STICK IT IN THE FILE
498 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE
499 CLL RTL /SHIP OF ORIGIN
501 DCA I AUTO16 /AND STORE X POSITION
502 TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND
503 JMS I ISHFT /POSITION
512 TAD M200 /START RELOAD CYCLE
514 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE
516 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO
519 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE
521 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5
523 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE
527 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO.
528 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE.
533 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE
535 JMP TWOOK /YES, CONTINUE
536 IAC /NO, BUMP COUNT AND TEST FOR REENTRY
538 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED
539 DCA TWOFLG /AND CONTINUE
542 TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE
543 SZA CLA /IS IT EXPLODING?
544 JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE
545 TAD ONEFIN /DID WE JUST WIN?
547 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE
548 TAD INTWRD /TEST FOR HYPERSPACE REQUEST
550 TAD OM14 /BITS 8 AND 9 MUST BE SET
552 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0
554 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8
558 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE
559 JMP TWOFIG /SKIP TEST FOR RIGHT TURN
561 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9
564 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE
566 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE
567 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE
568 DCA TWOTHE /AND STORE
570 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS
571 DCA TWOSIN /AND STORE IN DATA TABLE
575 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING
581 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED
582 SZA CLA /DURING THIS UPDATE CYCLE
584 CLL IAC RAL /YES, TEST FOR BIT 2 SET
589 TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF
590 TAD TWOVEX /ANGLE OF ORIENTATION
591 JMS I VEESCL /AND SCALE TO NOT EXCEED MAX
592 DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE
601 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY
602 JMS I ISHFT /COMPONENTS/16
617 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST
618 SNA CLA /TEST TO SEE IF RELOAD COMPLETE
620 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT
622 IAC /YES, TEST TRIGGER BIT 11
625 JMP I IONEST /NOT SET, HELL WITH IT
627 TAD PROLIF /OK, SET PROJECTILE LIFE
628 DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT
629 TAD TWOVEX /ADD SHIPS VELOCITY
630 JMS I ISHFT /(ADJUSTED)
632 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT
633 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION
635 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD
637 TAD TWOPEX /X COMPONENT
639 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY
640 JMS I ISHFT /Y POSITION AND COSINE
650 DCA LNC2FG /200 CYCLES OF RELOAD
651 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE!
653 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS
656 LNC2FG, 0 /RELOAD COUNT
658 OP14, 14 /HYPERSPACE CODE
664 / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT
665 / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL
666 / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY
667 / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE
668 / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN
669 / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE
670 / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS
671 / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE
672 / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE:
674 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE]
676 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE]
678 / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE
679 / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE
680 / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL)
681 / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE
682 / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND
683 / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES
684 / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS
685 / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE
686 / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS.
688 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7
689 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED.
691 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED
692 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE.
698 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE
699 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE
702 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS
706 JMS I CALPOS /CALL THE CALCULATOR
709 / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE
710 / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES
711 / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE
712 / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED
713 / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y
714 / DISPLACED BY X,Y OF THE SHIP ITSELF
717 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE
719 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS
721 DCA I AUTO10 / 0,3 OR TOP CENTER
730 TAD T10SIN /OR JUST LEFT OF DEAD CENTER
731 TAD ONEPEY /AND SO ON
735 TAD T30COS /THE THIRD POINT IS
739 TAD T30COS /OR BOTTOM LEFT HAND CORNER
752 CIA /OR JUST BELOW CENTER
756 FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE
757 AND P40 /FLAME WITH AN EXTRA POINT SOME
758 SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP
759 JMP ONECON /POWER NOT ON - CONTINUE
760 TAD ONEOUT /DO NOT ALLOW IF EXPLODING
764 TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND
765 SNA /OFF TO MAKE IT FLICKER. DISPLAY THE
766 CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE
770 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP
772 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME
773 CMA /WITH LONG SHORT LONG SHORT
776 TAD ONFG2 /TIP OF FLAME AT EITHER
793 TAD ONEPEX /RETURN DISPLAY TO 0,-1
799 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
803 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8
806 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT
810 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER
821 CIA / OR JUST RIGHT OF CENTER
825 TAD T30SIN /FINALLY BACK TO
829 TAD ONEPEY / TOP CENTE
832 JMP I ITWOST /NOW FOR NUMBER TWO
835 ONFG1, 0 /USED TO COUNT FLICKERS
836 ONFG2, 0 /SHORT OR LONG FLAG
840 / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO.
841 / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH
842 / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS
847 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE
851 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS
852 DCA CALSIN /CALCULATED
857 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY
859 TAD T30SIN /FIRST POINT AT
863 TAD TWOPEY / OR TOP CENTER
872 TAD T20COS /SECOND POINT
876 TAD T20COS /THIRD POINT
889 TAD TWOPEX /FOURTH POINT
908 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON
911 JMP TWOCON /NO, FORGET IT
912 TAD TWOOUT /NOT ALLOWED IF EXPLODING
916 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1
921 ISZ TWFG1 /ALSO THE LENGHT VARIATION
924 TAD TWFG2 /EVERY OTHER TIME LONG
943 TAD T20SIN /NOW BACK UP TO THE SHIP
952 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
956 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10
959 TAD T30SIN /CONTINUE WITH DISPLAY FILE
960 CIA /NEXT POINT AT 2,-3
972 TAD T20COS /NEXT POINT
980 TAD T20COS /AND THE NEXT AT
993 TAD T30COS /AND THE LAST AT
997 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS
1000 TWFG1, 0 /FLIK THE FLAME
1001 TWFG2, 0 /LONG OR SHORT
1005 / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION
1006 / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END
1007 / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS
1008 / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR
1009 / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES.
1014 FILDIS, CLA CLL /ALL SET TO GO
1015 JMS I COLIDE /TEST FOR COLLISION FIRST
1016 DSB 1 /IF NO COLLISION
1017 TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL
1021 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE
1022 DCA AUTO10 /FOR NUMBER ONE
1023 TAD ONECNT /ALONG WITH VECTOR COUNT
1025 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR
1029 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION?
1031 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION
1033 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS
1034 DCA XTWODS /SET X AND Y TO NEW POINT
1037 JMS I VECTOR /CALL THE DOT DRAWING MACHINE
1040 JMP TWODIS /DO NUMBER TWO ON OVERFLOW
1041 TAD XTWODS /SWAP POINTS FOR NEXT PAIR
1043 TAD YTWODS /THE GENERATOR DRAWS FROM ONE
1044 DCA YONEDS /TOWARDS TWO
1049 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO
1050 SZA CLA /BUT NOT IF IN HYPER SPACE
1053 TAD TWOFIL /SET UP FILE POINTER AS IN ONE
1055 TAD TWOCNT /AND THE COUNT
1057 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO
1061 TAD TWOOUT /IS IT EXPLODING?
1063 JMP I ITWOEX /YES, HOW EXCITING
1065 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF
1068 DCA YTWODS /AND CALL THE VECTOR SEQUENCE
1073 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO
1074 IPRODS, PRODIS /DO THE PROJECTILE THING
1076 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR
1077 DCA XONEDS /OF POINTS
1088 / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A
1089 / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS.
1090 / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND
1091 / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT
1092 / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE.
1096 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR
1097 TAD XONEDS /FROM XONEDS,YONEDS
1098 CIA /TO XTWODS,YTWODS
1099 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO
1101 DCA DIXTEM /AND STORE INCREMENT
1107 TAD M4 /FOR FOUR DOTS
1110 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y
1112 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS
1113 TAD YONEDS /XONEDS AND YONEDS
1117 RTR /DIVIDE BY 8 TO FIT SCREEN SIZE
1119 DXC DXL /SET X VALUE
1121 TAD YONEDS /DO THE SAME FOR Y
1124 DYC DYL DIS /AT LAST SOMETHING TO SEE!!
1126 ISZ DISCNT /DONE YET?
1131 DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED
1132 CLL /FROM EVERYWHERE TO DIVIDE THE
1133 SPA /AC BY FOUR WITH AN ASR RIGHT
1134 CML IAC /NOTE THAT NEGATIVE NUMBERS ARE
1135 RAR /ROUNDED UPWARDS (TOWARD ZERO)
1136 CLL /TO MAKE IT COME OUT RIGHT
1138 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS
1139 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES
1144 / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS.
1145 / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH
1146 / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS
1147 / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR
1153 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES
1154 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE
1156 DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS
1158 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT
1160 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT
1161 IAC /INCREMENT COUNT AND REPLACE
1163 ISZ BUFTMP /BUMP POINTER TO X VELOCITY
1165 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION
1166 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT
1169 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST
1170 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY
1173 TAD I BUFTMP /SAME LITTLE GAME
1176 DCA PROY /STORE THE NEW Y VALUE
1178 TAD PROX /DISPLAY THE POINT WITH
1179 RTR /THE SAME SHIFT AS FOR THE SHIPS
1180 RAR /FOR THE SMALL SCREEN
1186 DYC DYL DIS /THERE IT IS!!
1188 JMS I CHKOUT /TEST FOR A HIT
1189 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END
1190 TAD BUFTMP /OF BUFFER
1193 JMP PROLOP /NOT AT END - CONTINUE
1196 / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR
1197 / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP
1198 / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT
1199 / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE
1200 / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED
1201 / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING
1202 / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD
1203 / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT
1204 / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY.
1208 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT?
1210 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE
1211 TAD M400 /MOVE THE BEAM OFF SCREEN
1215 TAD INTCNT /PICK UP THE COUNT
1223 EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER
1224 TAD P5 /POINTER TO THE NEXT PROJECTILE
1225 DCA BUFTMP /UNLESS THE END
1226 TAD BUFTMP /OF THE BUFFER
1227 TAD BUFLIM /IS REACHED
1228 SZA CLA /IN WHICH CASE
1236 RESE1, 0 /THIS IS CALLED TO SET THE POINTER
1237 TAD MRES /(AUTO16) TO THE NEXT FREE SLOT
1238 DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE
1240 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT
1243 TAD RESPNT /RESTE IF AT END OF BUFFER
1250 RESCON, TAD I RESPNT /FIND A HOLE YET?
1252 JMP RESFND /YES, SET UP AUTO16
1253 ISZ RESCNT /NO COUNT
1254 JMP RESLOP /AND TRY AGAIN
1255 HLT /NO HOLES AT ALL?
1257 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING
1267 CMA /THIS ROUTINE IS CALLED FROM THE
1268 TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL
1269 DCA AUTO16 /THE BUFFER POINTERS AND SO ON
1276 SETLOP, DCA I SETPNT
1288 / THIS HERE NOW THING CHECKS THE COORDINATES OF THE MOST RECENTLY
1289 / DISPLAYED PROJECTILE AGAINST THOSE OF THE SHIPS ON THE SCREEN.
1290 / IF WITH A COLLISION LIMIT A HIT IS RECORDED AND THE LIFE
1291 / COUNT OF THE PROJECTILE ZEROED TO REMOVE IT. A HIT SHIP
1292 / IS SUITABLY FLAGGED
1297 CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT
1298 TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE
1301 TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT
1305 TAD PROX /CHECK X COORDINATES OF SHIP ONE
1307 TAD ONEPEX /THIS SORT OF THING IS WHY THE
1308 SPA /COORDINATES HAVE TO BE MAINTAINED TO 12
1310 TAD LIMIT /CLOSE ENOUGH?
1312 JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT
1313 TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y?
1322 TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT
1323 DCA ONEOUT /ALL THAT IS NECESSARY
1324 JMS CUTOUT /REMOVE PROJECTILE
1328 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO
1330 JMP I CHECK /BUT NOT IF IN HYPERSPACE
1331 TAD TWOOUT /OR IF ALREADY HIT
1335 TAD PROX /CHECK X'S FIRST
1338 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1340 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY
1342 JMP I CHECK /NOWHERE NEAR CLOSE
1344 TAD PROY /NYAH, NYAH
1348 CIA /ABSOLUTE VALUE OF DIFFERENCE
1351 JMP I CHECK /CLEAN MISS!
1353 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING
1354 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT
1356 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE
1358 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT
1360 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY
1361 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE
1371 / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE
1372 / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED
1373 / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING
1374 / THEIR EXPLOSION COUNTS NON-ZERO.
1378 COLLID, 0 /HERE TO TEST FOR COLLISION
1379 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN
1380 SZA CLA /HYPERSPACE OR EXPLODING
1392 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION
1393 CIA /CHECK X COORDINATES FIRST
1395 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1397 TAD COLLIM /CLOSE ENOUGH?
1399 JMP I COLLID /NOPE, FORGET IT
1401 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES
1405 CIA /GET MAGNITUDE ONLY
1407 SMA CLA /CLOSE ENOUGH?
1409 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS
1418 / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO
1419 / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP
1420 / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM
1421 / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE
1422 / VARIOUS PARAMETERS FOR REENTRY.
1427 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0
1428 TAD RTNFLG /SET UP LIST POINTER
1430 TAD ONEDIF /TO APPROPRIATE SHIP FILE
1434 TAD CLOCK /SET UP "RANDOM NUMBER GENERATOR"
1436 TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME
1437 AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777
1438 CIA /UPDATE CYCLES ( ABOUT 15 SECONDS)
1439 DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT
1441 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE
1442 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY
1444 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY
1445 JMS VEESET /COMPONENT
1447 TAD I AUTO17 /AND THEN THE Y COMPONENT
1456 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY
1458 TAD MHYP /ABOUT 3/4 CHANCE
1461 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET
1462 SZA CLA /UP FOR EXPLOSION ON REENTRY
1474 ONEDIF, ONEFLG-TWOFLG
1484 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS
1488 AND HM177 /LIMIT TO 177
1491 JMP I VEESET /AND EXIT
1495 ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS
1496 TAD ONETHE /AN EXPLOSION
1497 TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP
1499 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR
1500 ISZ ONEOUT /DONE WITH THE EXPLOSION?
1501 JMP I NOWTWO /NO, NORMAL RETURN
1503 IAC /YES, SET INTO PSEUDO HYPER SPACE
1505 IAC /DISABLE RETURN FROM HYPER SPACE
1508 TAD TWOFIN /IS NUMBER TWO STILL AROUND?
1510 JMP I NOWTWO /YES, RETURN
1511 JMP I TIEUP /NO, TIE BALL GAME
1514 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO
1515 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND
1518 JMS I IXPDIS /THEN DISPLAY IT
1519 ISZ TWOOUT /DONE WITH EXPLOSION?
1520 JMP I NOWPRO /NO, NORMAL RETURN
1522 IAC /YES, SEND INTO PSEUDO HYPER SPACE
1524 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE
1528 SZA CLA /STILL ALIVE AND WELL?
1529 JMP I TIEUP /NO, TIE GAME
1530 JMP I NOWPRO /YES, CONTINUE ON
1540 / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS
1541 / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL
1542 / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS
1543 / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S
1544 / A SORT OF CLOBBY EXPLOSION.
1549 EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT
1550 TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY
1551 DCA XTWODS /SET UP BY FILDIS OR TWODIS
1552 TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE
1556 CIA /CALCULATE INCREMENT THE WRONG WAY
1558 DCA DIXTEM /AND STORE
1562 DCA DIYTEM /SAME FOR Y
1564 TAD M4 /4 DOTS IN THE VECTOR"
1565 DCA DISCNT /COULD HAVE CALLED THE OTHER
1566 /VECTOR GENERATOR I SUPPOSE
1568 TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING
1569 DCA XONEDS /TOTALS AND DISPLAY THE RUNNING
1570 TAD YONEDS /TOTALS NORMAL SIZE
1575 RTR /COULD MAKE TWICE AS BIG BY NOP-ING
1576 RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH
1584 ISZ DISCNT /DONE 4 DOTS?
1587 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE?
1589 JMP I EXPDIS /YES, EXIT
1591 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS
1600 / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS.
1601 / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140
1602 / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED
1603 / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y
1604 / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT
1605 / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE
1606 / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE.
1610 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN
1613 SMA /BRANCH FOR POSITIVE OR NEGATIV
1616 SMA CLA /GREATER THAN MAXIMUM POSITIVE?
1618 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET
1619 JMP I VEELIM /TO MAX NEGATIV
1621 VEEPOS, TAD VEEMIN /GREATER THAN MAX?
1624 TAD VEEMAX /YES SET TO MAX
1627 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG
1634 THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE
1635 SMA /0-550 OR 0-360 DEGREES. THIS IS
1636 JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW
1637 TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE
1638 JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC
1639 TAD M550 /MODULO 360 AND EXITS
1642 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T
1647 / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED.
1648 / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND
1649 / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE
1650 / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY
1651 / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF
1652 / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT
1653 / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE
1654 / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE
1655 / INTERGALACTIC DUST.
1659 ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET
1660 TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR
1661 DCA MESS /AND SET GAMOVR FLAG
1664 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE
1666 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET
1667 TAD MES2 /AND TWO FIN IS NOT
1668 DCA MESS /SET ALSO GAMOVR
1673 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN
1676 DCA GAMOVR /NOBODY EVER REALLY WINDS
1677 /UP THE WINNER IN THESE THINGS
1678 JOBLOP, DSB 1 /THIS IS ENTERED FROM FINISH WHEN
1679 TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY
1680 JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN
1681 TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT
1682 JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED
1683 TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS
1684 JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED
1699 / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED
1700 / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER
1701 / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT
1702 / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES
1703 / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES
1704 / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER
1705 / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT
1706 / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE
1707 / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO
1708 / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN
1709 / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH
1710 / THIS WAS STOLEN HAD FULL WORD PRECISION.
1715 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT
1716 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD
1877 MULTI, 0 /THIS IS STANDARD SINGLE PRECISION
1878 CLL /MULTIPLY ROUTINE WHICH WAS ONCE
1879 SPA /USED. I'VE LEFT IT IN SINCE
1880 CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND
1881 DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT
1882 DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE
1883 TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT
1927 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE
1928 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS
1941 / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS
1942 / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING
1943 / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION
1944 / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND
1945 / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR
1946 / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER
1947 / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT....
1975 /GENERAL PURPOSE SYMBOL GENERATOR
1977 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING
1978 DCA ADDR /STORE STRING ADDRESS
1979 TAD I ADDR /FETCH DOUBLE CHARACTER
1983 JMS CHAR /PLOT CHARACTER
1984 SKP /NORMAL RETURN -- SKIP
1985 JMP I CHARS /TERMINATION RETURN -- EXIT
1986 TAD I ADDR /RECALL DOUBLE CHARACTER
1987 ISZ ADDR /ADVANCE STRING ADDRESS
1988 JMS CHAR /PLOT CHARACTER
1989 JMP CHARS+2 /NORMAL RETURN -- REPEAT
1990 JMP I CHARS /TERMINATION RETURN -- EXIT
1992 CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER
1993 AND K77 /MASK OUT UPPER BITS
1994 CLL RAL /MULTIPLY CODE BY TWO
1995 TAD TABLE /ADD TABLE BASE ADDRESS
1996 DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE
1997 CMA /INITIALIZE COUNTER FOR
1998 DCA COUNT2 / TWO PLOT WORDS
1999 TAD I POINT /FETCH FIRST PLOT WORD
2000 ISZ POINT /INCREMENT POINTER FOR NEXT ONE
2001 SNA /SKIP IF NOT SPECIAL CHARACTER
2002 JMP SPCHAR /ELSE GO PROCESS IT
2003 DCA CURPLT /SAVE CURRENT PLOT BITS
2004 XPLOT, TAD KM6 /INITIALIZE 6-BIT
2005 DCA COUNT6 / COUNTER
2006 TAD YVALUE /RESET Y TEMPORARY
2007 DCA YTEMP / VALUE FOR CHARACTER
2008 TAD XVALUE /OUTPUT CURRENT
2009 DXC DXL / X-VALUE TO CRT
2010 TAD XINCR /INCREMENT
2011 DCA XVALUE / ABSCISSA
2012 YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS
2013 CLL RAL /GET NEXT BIT
2014 DCA CURPLT /SAVE REMAINING PLOT BITS
2015 SNL /SKIP IF POINT TO PLOT
2016 JMP CNTINU /ELSE JUMP AHEAD
2017 TAD YTEMP /OUTPUT CURRENT
2018 DYC DYL DIS / Y-VALUE TO CRT
2020 TAD CURPLT /RECALL CURRENT PLOT BITS
2021 SNA CLA /SKIP IF POINTS REMAINING
2022 JMP WRDEND /ELSE WORD IS FINISHED
2023 CNTINU, TAD YTEMP /INCREMENT TEMPORARY
2024 TAD YINCR / Y-VALUE FOR NEXT
2025 DCA YTEMP / CHARACTER STEP
2026 ISZ COUNT6 /SKIP IF 6 BITS PLOTTED
2027 JMP YPLOT /ELSE PLOT NEXT ONE
2028 JMP XPLOT /GO UPDATE X-VALUE
2029 WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD
2030 \f JMP EXIT /ELSE EXIT
2031 TAD I POINT /FETCH SECOND BIT WORD
2032 SZA /SKIP IF NO PLOT POINTS
2033 JMP XPLOT-1 /ELSE GO PLOT THEM
2034 EXIT, TAD XVALUE /INCREMENT ABSCISSA
2035 TAD XINCR / FOR SPACE BETWEEN
2036 DCA XVALUE / SYMBOLS
2037 JMP I CHAR /EXIT FROM CHAR
2039 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR
2040 DCA POINT /STORE AS INDIRECT ADDRESS
2041 \f JMP I POINT /GO TO APPROPRIATE ROUTINE
2042 SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT
2043 CLL RTL /MULTIPLY BY FOUR AND
2044 JMP EXIT / GO CREATE SPACE
2045 CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X
2046 DCA XVALUE / TO ITS ORIGINAL VALUE
2047 LF, TAD YINCR /"LINE FEED"
2048 CLL RTL / DECREMENTS THE
2049 CLL CIA RAL / Y-VALUE BY
2050 TAD YVALUE / EIGHT SCALE
2052 JMP I CHAR /EXIT FROM CHAR
2053 RESET, TAD INITX /"RESET" RESETS
2054 DCA XVALUE / X AND Y TO
2055 TAD INITY / THEIR ORIGINAL
2056 JMP RESET-2 / VALUES
2057 TERM, ISZ CHAR /TERMINATE CODE CAUSES
2058 JMP I CHAR / EXIT TO P+2
2060 INITX, 0 /INITIAL X-VALUE
2061 INITY, 327 /INITIAL Y-VALUE
2062 XVALUE, 0 /CURRENT X-VALUE
2063 YVALUE, 0 /CURRENT Y-VALUE
2064 XINCR, 6 /BASIC X INCREMENT VALUE
2065 YINCR, 10 /BASIC Y INCREMENT VALUE
2066 YTEMP, 0 /TEMPORARY Y-VALUE
2067 CURPLT, 0 /CURRENT PLOT BITS
2068 ADDR, 0 /CURRENT STRING ADDRESS
2069 COUNT6, 0 /6-BIT COUNTER
2070 COUNT2, 0 /2-WORD COUNTER
2071 KM6, -6 /CONSTANT FOR COUNT6
2072 K77, 77 /CHARACTER CODE MASK
2073 POINT, 0 /TABLE POINTER
2077 TABLE, .+1 /TABLE BASE ADDRESS
2078 0 /SPECIAL CHARACTER (00)
2079 TERM /TERMINATION CODE
2140 0 /SPECIAL CHARACTER (37)
2142 0 /SPECIAL CHARACTER (40)
2162 4040 / UNDERSCORE (52)
2166 0 /SPECIAL CHARACTER (54)
2196 0 /SPECIAL CHARACTER (73)
2197 CRLF /CARRIAGE RETURN; LINE FEED
2209 / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS
2210 / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE
2211 / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN.
2240 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO
2241 / AROUND 7575 OR SO.
2252 ////////////////////////////
2256 ///////////////////////////