3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR
8 / THIS VERSION WORKS OFF EITHER THE BLUE RIBBON CONNECTOR OR THE
9 / SR. WHEN THE PROGRAM IS STARTED (AT 0200) OR RESTARTED THE
10 / SR WILL BE TESTED AND IF =0000 WILL BE USED FOR THE COMMAND
11 / INPUT. OTHERWISE, THE BLUE RIBBON CONNECTOR (AX08 * C0-C7 *
12 / XR OPTION ONLY) CONTINGENCY INPUTS WILL BE USED.
14 / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD
15 / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP
18 / THE COMMAND WORD BIT ASSIGNMENTS ARE:
20 / SR BIT: C: FUNCTION:
22 / 0 0 SHIP ONE ROTATES LEFT
24 / 1 1 SHIP ONE ROTATES RIGHT
26 / 2 2 SHIP ONE ACCELERATES
32 / 8 4 SHIP TWO ROTATES LEFT
34 / 9 5 SHIP TWO ROTATES RIGHT
36 / 10 6 SHIP TWO ACCELERATES
42 / NOTE THAT TURNING RIGHT AND LEFT SIMULTANEOUSLY THROWS
43 / THE SHIP INTO HYPERSPACE. IN THE CURRENT VERSION THE ODDS
44 / ARE IN FAVOR OF YOUR MAKING IT BACK SAFELY. THE GAME IS OVER
45 / WHEN ONE OR BOTH OF THE SHIPS HAVE BEEN DESTROYED AND THE
46 / WINNER (IF ANY) IS IN NORMAL SPACE. WHEN THE WINNER
47 / HAS BEEN ANNOUNCED, HIT ANY TTY KEY TO RESTART.
51 /****************************************************************
53 /***************************
56 CLZE=6130 / CLEAR CLOCK ENABLE REGISTER PER AC
57 CLSK=6131 / SKIP ON CLOCK FLAG
58 CLOE=6132 / SET CLOCK ENABLE REGISTER PER AC
59 CLAB=6133 / AC REGISTER TO CLOCK COUNTER REGISTER
60 CLEN=6134 / CLOCK ENABLE REGISTER TO AC
61 CLSA=6135 / STATUS TO AC
62 CLBA=6136 / CLOCK BUFFER REGISTER TO AC
63 CLCA=6137 / CLOCK COUNTER REGISTER TO AC
65 / BITS IN CLOCK ENABLE REGISTER
66 CREXT=0100 / EXTERNAL SOURCE
67 CR2=0200 / 10**2 per second
68 CR3=0300 / 10**3 per second
69 CR4=0400 / 10**4 per second
70 CR5=0500 / 10**5 per second
71 CR6=0600 / 10**6 per second
74 CMFREE=0000 / 4096 FIXED FREE RUN
75 CMPROG=1000 / PROGRAMMED DELAY
77 CADC=0040 / START ADC ON OVERFLOW
78 CINH=0020 / INHIBIT CLOCK
79 CION=0010 / INTERRUPT ENABLE
81 CEV3=0004 / EVENT 3 ENABLED
82 CEV2=0002 / EVENT 2 ENABLED
83 CEV1=00001 / EVENT 1 ENABLED
89 DILE=6056 / LOAD ENABLES FROM A
90 DISD=6052 / TEST FOR READY
92 /****************************************************************
93 / SYMBOL DEFINITIONS FOR PAL8-PAL10
95 XRIN=NOP / DIGITAL INPUT?
98 /DSB=XXXX / SET BRIGHTNESS - MUST BE COMMENTED OUT!!!
100 DXC=JMS I IVCLDX / X VALUE CONTROL?
101 DYC=JMS I IVCLDY / Y VALUE CONTROL?
103 DXL=0000 / X VALUE LOAD FLAG?
104 DYL=0000 / Y VALUE LOAD FLAG?
105 DIS=0000 / ANOTHER STRANGE FLAG
107 /CRF=NOP / WHICH FLAG???
111 /****************************************************************
113 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR
114 / REAL WORLD TIMING PURPOSES.
119 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT
120 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE
123 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR
124 ODT1, 0 /DEBUGGERS, ETC.
129 / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF
130 / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT
131 / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF
147 / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS
148 / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS
149 / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED
150 / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED
155 ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION
156 ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED
157 ONEFLG, 0 /IN OR OUT OF NORMAL SPACE
158 ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN
159 ONEVEX, 0 /X COMPONENT OF VELOCITY
160 ONEVEY, 0 /Y COMPONENT OF VELOCITY
161 ONEPEX, 0 /X POSITION (12 BITS)
162 ONEPEY, 0 /Y POSITION (12 BITS)
163 ONESIN, 0 /SINE OF ANGLE
164 ONECOS, 0 /COSINE OF ANGLE
165 ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT
167 TWOOUT, 0 /SAME CONTENT AND ORDER
181 / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN
182 / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN
183 / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM
196 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST
197 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES.
210 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON
267 / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200.
268 / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED,
269 / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES
270 / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR
271 / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT
272 / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08
273 / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY
274 / FILE UPDATE TO START OFF THE GAME.
279 START, CLA CLL /START OR RESTART HERE ANY OLD TIME
280 DIXY /TO GET THE VC8-E STARTED ONCE
284 TAD XROPT /USE THE BLUE RIBBON CONNECTOR
285 DCA COLDST /AND LEAVE IN THE TRAP LOCATION
291 TAD P17 /FIRST CLEAR THE POSITION AND DATA
292 DCA AUTO10 /TABLES OF THE TWO SHIPS
299 TAD STRT1 /SET THE STARTING POSITIONS OF THE
300 DCA ONEPEX /TWO SHIPS
303 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE
306 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP
307 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE
309 DCA ONEFIN /CLEAR ALL GAME END FLAGS
312 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS
315 TCF /CLEAR OTHER REMAINING LIKELY FLAGS
320 CLZE / CLEAR CLOCK CONFIG REGISTER
322 TAD CDELY / LOAD NEG DELAY
323 CLAB / LOAD TO CLOCK BUFFER
325 TAD CCNF / LOAD CLOCK CONFIG
326 CLOE / SET CONFIG BITS
329 JMP COLDST /AND GO TO IT
331 CCNF, CR4+CMPROG+CION+COVSTAT / CLOCK CONFIGURATION
332 CDELY, -310 / COUNTER PRESET (200)
335 / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE
336 / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE
337 / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT
338 / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER
339 / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN.
342 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW.
344 COLDST, 0 /TRAP TO READ SR OR BRC
346 DCA INTWRD /STORE TEMPORARILY
347 TAD INTWRD /MASK OUT LEFTMOST 4 BITS
351 DCA INTTEM /AND STORE
352 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO
354 TAD INTTEM /ADD TOGETHER
355 JMP .+3 /AND CONTINUE
357 CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR
360 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT
362 ION /GET READY FOR THE NEXT CYCLE
363 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME?
364 IAC /ONLY WHEN ACCFLG=0
366 TAD ACCPER /IF ZERO, RESET COUNT
369 JMP I .+1 /NOW GET DOWN TO WORK.
373 TABLEN, AUTO17-CALCOS
385 / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE
386 / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE
387 / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS
388 / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO
391 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS
392 / SET IN WHICH CASE THE GAME IS RESTARTED.
394 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM
395 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE
399 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE
401 DCA INTLNK /FOR POSSIBLE CONTINUATION
402 CLSK /WAS IT THE CRYSTAL CLOCK?
403 JMP INTBUS /NO TRY SOMETHING ELSE
404 CLA IAC RTR /LOAD 4000
405 CLSA /GET CLOCKSTATUS AND RESET FLAG
407 JMP UPDATE /YES, GO TO IT
409 INTBUS, KSF /HERE ON NON-CLOCK INTERUPT
410 JMP .+5 /NOT THE KEYBOARD
411 KCC /CLEAR KEYBOARD FLAG
412 TAD GAMOVR /IS THE GAMEOVER
414 JMP RESTRT /YES, RESTART
415 / TCF /NO, HELL WITH IT
416 ISZ INTGLH /COUNT ONE BADDIE
418 HLT /HALT IF TOO MANY BADDIES
420 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT
434 / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP
435 / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON
436 / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS
437 / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN,
438 / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS
439 / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS.
440 / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR
446 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE
449 IAC /NO, BUT IS IT JUST COMING OUT?
451 TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED
452 DCA ONEFLG /OTHERWISE JUST COUNT ONE
453 JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO
455 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING?
457 JMP ONEFIG /IF YES, ALLOW NO CONTROLS
458 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED?
460 JMS I ONEWN /YES, SIGNAL VICTORY
461 TAD INTWRD /NOW BEGIN TEST OF REQUEST
462 AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE!
463 TAD OM300 /TEST BITS 4 AND 5
465 JMP ONELEF /NOPE, CONTINUE
466 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE
468 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN?
472 CLA CLL CMA /YES DECREMENT ANGLE
475 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN
478 IAC /YES, INCREMENT ANGLE
480 ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE)
481 JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS
482 DCA ONETHE /AND STORE
483 TAD ONETHE /FIND THEM TRIG FUNCTIONS
484 JMS I SINE /AND STORE ONCE AND FOR ALL
485 DCA ONESIN /IN THE APPROPRIATE PLACES
489 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING
496 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE?
499 TAD INTWRD /YES, ANY REQUESTED?
502 JMP ONEVEL /NONE REQUESTED
503 TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING
504 TAD ONEVEY /ON ORIENTATION
505 JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM
506 DCA ONEVEY /AND STORE
507 TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT
514 ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE
515 JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4
516 JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION
518 DCA ONEPEX /IGNORE ANY OVERFLOW
519 TAD ONEVEY /DO THE SAME FOR Y COORDINATE
520 JMS I ISHFT /AND VELOCITY COMPONENT
524 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF
531 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED
534 ISZ LNC1FG /NO, CONTINUE RELOADING
535 JMP I ITWOUP /AND EXIT
536 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED?
539 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT
541 TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH
542 DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE
543 TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE)
544 JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY
545 JMS I RSHIFT /COMPONENT OF PROJECTILE
547 JMS I RSHIFT /AND STICK IT IN THE FILE
549 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE
550 CLL RTL /SHIP OF ORIGIN
552 DCA I AUTO16 /AND STORE X POSITION
553 TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND
554 JMS I ISHFT /POSITION
563 TAD M200 /START RELOAD CYCLE
565 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE
567 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO
570 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE
572 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5
574 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE
579 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO.
580 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE.
585 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE
587 JMP TWOOK /YES, CONTINUE
588 IAC /NO, BUMP COUNT AND TEST FOR REENTRY
590 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED
591 DCA TWOFLG /AND CONTINUE
594 TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE
595 SZA CLA /IS IT EXPLODING?
596 JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE
597 TAD ONEFIN /DID WE JUST WIN?
599 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE
600 TAD INTWRD /TEST FOR HYPERSPACE REQUEST
602 TAD OM14 /BITS 8 AND 9 MUST BE SET
604 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0
606 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8
610 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE
611 JMP TWOFIG /SKIP TEST FOR RIGHT TURN
613 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9
616 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE
618 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE
619 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE
620 DCA TWOTHE /AND STORE
622 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS
623 DCA TWOSIN /AND STORE IN DATA TABLE
627 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING
634 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED
635 SZA CLA /DURING THIS UPDATE CYCLE
637 CLL IAC RAL /YES, TEST FOR BIT 2 SET
642 TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF
643 TAD TWOVEX /ANGLE OF ORIENTATION
644 JMS I VEESCL /AND SCALE TO NOT EXCEED MAX
645 DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE
654 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY
655 JMS I ISHFT /COMPONENTS/16
671 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST
672 SNA CLA /TEST TO SEE IF RELOAD COMPLETE
674 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT
676 IAC /YES, TEST TRIGGER BIT 11
679 JMP I IONEST /NOT SET, HELL WITH IT
681 TAD PROLIF /OK, SET PROJECTILE LIFE
682 DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT
683 TAD TWOVEX /ADD SHIPS VELOCITY
684 JMS I ISHFT /(ADJUSTED)
686 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT
687 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION
689 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD
691 TAD TWOPEX /X COMPONENT
693 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY
694 JMS I ISHFT /Y POSITION AND COSINE
704 DCA LNC2FG /200 CYCLES OF RELOAD
705 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE!
707 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS
710 LNC2FG, 0 /RELOAD COUNT
712 OP14, 14 /HYPERSPACE CODE
719 / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT
720 / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL
721 / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY
722 / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE
723 / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN
724 / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE
725 / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS
726 / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE
727 / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE:
729 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE]
731 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE]
733 / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE
734 / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE
735 / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL)
736 / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE
737 / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND
738 / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES
739 / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS
740 / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE
741 / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS.
743 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7
744 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED.
746 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED
747 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE.
753 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE
754 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE
757 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS
761 JMS I CALPOS /CALL THE CALCULATOR
764 / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE
765 / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES
766 / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE
767 / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED
768 / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y
769 / DISPLACED BY X,Y OF THE SHIP ITSELF
772 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE
774 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS
776 DCA I AUTO10 / 0,3 OR TOP CENTER
785 TAD T10SIN /OR JUST LEFT OF DEAD CENTER
786 TAD ONEPEY /AND SO ON
790 TAD T30COS /THE THIRD POINT IS
794 TAD T30COS /OR BOTTOM LEFT HAND CORNER
808 CIA /OR JUST BELOW CENTER
812 FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE
813 AND P40 /FLAME WITH AN EXTRA POINT SOME
814 SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP
815 JMP ONECON /POWER NOT ON - CONTINUE
816 TAD ONEOUT /DO NOT ALLOW IF EXPLODING
820 TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND
821 SNA /OFF TO MAKE IT FLICKER. DISPLAY THE
822 CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE
826 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP
828 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME
829 CMA /WITH LONG SHORT LONG SHORT
832 TAD ONFG2 /TIP OF FLAME AT EITHER
849 TAD ONEPEX /RETURN DISPLAY TO 0,-1
855 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
860 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8
863 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT
867 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER
878 CIA / OR JUST RIGHT OF CENTER
882 TAD T30SIN /FINALLY BACK TO
886 TAD ONEPEY / TOP CENTE
889 JMP I ITWOST /NOW FOR NUMBER TWO
892 ONFG1, 0 /USED TO COUNT FLICKERS
893 ONFG2, 0 /SHORT OR LONG FLAG
898 / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO.
899 / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH
900 / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS
905 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE
909 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS
910 DCA CALSIN /CALCULATED
915 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY
917 TAD T30SIN /FIRST POINT AT
921 TAD TWOPEY / OR TOP CENTER
930 TAD T20COS /SECOND POINT
934 TAD T20COS /THIRD POINT
947 TAD TWOPEX /FOURTH POINT
967 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON
970 JMP TWOCON /NO, FORGET IT
971 TAD TWOOUT /NOT ALLOWED IF EXPLODING
975 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1
980 ISZ TWFG1 /ALSO THE LENGHT VARIATION
983 TAD TWFG2 /EVERY OTHER TIME LONG
1002 TAD T20SIN /NOW BACK UP TO THE SHIP
1011 CLA CLL CMA RAL /ADD -2 TO POINT COUNT
1016 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10
1019 TAD T30SIN /CONTINUE WITH DISPLAY FILE
1020 CIA /NEXT POINT AT 2,-3
1032 TAD T20COS /NEXT POINT
1040 TAD T20COS /AND THE NEXT AT
1053 TAD T30COS /AND THE LAST AT
1057 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS
1060 TWFG1, 0 /FLIK THE FLAME
1061 TWFG2, 0 /LONG OR SHORT
1066 / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION
1067 / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END
1068 / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS
1069 / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR
1070 / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES.
1075 FILDIS, CLA CLL /ALL SET TO GO
1076 JMS I COLIDE /TEST FOR COLLISION FIRST
1077 / DSB 1 /IF NO COLLISION
1078 TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL
1082 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE
1083 DCA AUTO10 /FOR NUMBER ONE
1084 TAD ONECNT /ALONG WITH VECTOR COUNT
1086 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR
1090 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION?
1092 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION
1094 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS
1095 DCA XTWODS /SET X AND Y TO NEW POINT
1098 JMS I VECTOR /CALL THE DOT DRAWING MACHINE
1101 JMP TWODIS /DO NUMBER TWO ON OVERFLOW
1102 TAD XTWODS /SWAP POINTS FOR NEXT PAIR
1104 TAD YTWODS /THE GENERATOR DRAWS FROM ONE
1105 DCA YONEDS /TOWARDS TWO
1111 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO
1112 SZA CLA /BUT NOT IF IN HYPER SPACE
1115 TAD TWOFIL /SET UP FILE POINTER AS IN ONE
1117 TAD TWOCNT /AND THE COUNT
1119 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO
1123 TAD TWOOUT /IS IT EXPLODING?
1125 JMP I ITWOEX /YES, HOW EXCITING
1127 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF
1130 DCA YTWODS /AND CALL THE VECTOR SEQUENCE
1135 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO
1136 IPRODS, PRODIS /DO THE PROJECTILE THING
1138 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR
1139 DCA XONEDS /OF POINTS
1151 / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A
1152 / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS.
1153 / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND
1154 / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT
1155 / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE.
1158 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR
1160 TAD XONEDS /FROM XONEDS,YONEDS
1161 CIA /TO XTWODS,YTWODS
1162 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO
1164 DCA DIXTEM /AND STORE INCREMENT
1170 TAD M4 /FOR FOUR DOTS
1173 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y
1175 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS
1176 TAD YONEDS /XONEDS AND YONEDS
1180 / RTR /DIVIDE BY 8 TO FIT SCREEN SIZE
1182 DXC DXL /SET X VALUE
1184 TAD YONEDS /DO THE SAME FOR Y
1187 DYC DYL DIS /AT LAST SOMETHING TO SEE!!
1189 ISZ DISCNT /DONE YET?
1194 DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED
1195 CLL /FROM EVERYWHERE TO DIVIDE THE
1196 SPA /AC BY FOUR WITH AN ASR RIGHT
1197 CML IAC /NOTE THAT NEGATIVE NUMBERS ARE
1198 RAR /ROUNDED UPWARDS (TOWARD ZERO)
1199 CLL /TO MAKE IT COME OUT RIGHT
1201 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS
1202 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES
1208 / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS.
1209 / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH
1210 / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS
1211 / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR
1217 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES
1218 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE
1220 / DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS
1222 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT
1224 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT
1225 IAC /INCREMENT COUNT AND REPLACE
1227 ISZ BUFTMP /BUMP POINTER TO X VELOCITY
1229 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION
1230 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT
1233 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST
1234 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY
1237 TAD I BUFTMP /SAME LITTLE GAME
1240 DCA PROY /STORE THE NEW Y VALUE
1242 TAD PROX /DISPLAY THE POINT WITH
1243 / RTR /THE SAME SHIFT AS FOR THE SHIPS
1244 / RAR /FOR THE SMALL SCREEN
1250 DYC DYL DIS /THERE IT IS!!
1252 JMS I CHKOUT /TEST FOR A HIT
1253 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END
1254 TAD BUFTMP /OF BUFFER
1257 JMP PROLOP /NOT AT END - CONTINUE
1261 / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR
1262 / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP
1263 / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT
1264 / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE
1265 / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED
1266 / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING
1267 / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD
1268 / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT
1269 / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY.
1273 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT?
1275 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE
1276 / TAD M400 /MOVE THE BEAM OFF SCREEN
1280 TAD INTCNT /PICK UP THE COUNT
1287 EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER
1288 TAD P5 /POINTER TO THE NEXT PROJECTILE
1289 DCA BUFTMP /UNLESS THE END
1290 TAD BUFTMP /OF THE BUFFER
1291 TAD BUFLIM /IS REACHED
1292 SZA CLA /IN WHICH CASE
1300 RESE1, 0 /THIS IS CALLED TO SET THE POINTER
1301 TAD MRES /(AUTO16) TO THE NEXT FREE SLOT
1302 DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE
1304 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT
1307 TAD RESPNT /RESTE IF AT END OF BUFFER
1314 RESCON, TAD I RESPNT /FIND A HOLE YET?
1316 JMP RESFND /YES, SET UP AUTO16
1317 ISZ RESCNT /NO COUNT
1318 JMP RESLOP /AND TRY AGAIN
1319 HLT /NO HOLES AT ALL?
1321 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING
1331 CMA /THIS ROUTINE IS CALLED FROM THE
1332 TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL
1333 DCA AUTO16 /THE BUFFER POINTERS AND SO ON
1340 SETLOP, DCA I SETPNT
1353 / THIS HERE NOW THING CHECKS THE COORDINATES OF THE MOST RECENTLY
1354 / DISPLAYED PROJECTILE AGAINST THOSE OF THE SHIPS ON THE SCREEN.
1355 / IF WITH A COLLISION LIMIT A HIT IS RECORDED AND THE LIFE
1356 / COUNT OF THE PROJECTILE ZEROED TO REMOVE IT. A HIT SHIP
1357 / IS SUITABLY FLAGGED
1362 CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT
1363 TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE
1366 TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT
1370 TAD PROX /CHECK X COORDINATES OF SHIP ONE
1372 TAD ONEPEX /THIS SORT OF THING IS WHY THE
1373 SPA /COORDINATES HAVE TO BE MAINTAINED TO 12
1375 TAD LIMIT /CLOSE ENOUGH?
1377 JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT
1378 TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y?
1387 TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT
1388 DCA ONEOUT /ALL THAT IS NECESSARY
1389 JMS CUTOUT /REMOVE PROJECTILE
1394 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO
1396 JMP I CHECK /BUT NOT IF IN HYPERSPACE
1397 TAD TWOOUT /OR IF ALREADY HIT
1401 TAD PROX /CHECK X'S FIRST
1404 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1406 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY
1408 JMP I CHECK /NOWHERE NEAR CLOSE
1410 TAD PROY /NYAH, NYAH
1414 CIA /ABSOLUTE VALUE OF DIFFERENCE
1417 JMP I CHECK /CLEAN MISS!
1419 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING
1420 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT
1422 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE
1424 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT
1426 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY
1427 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE
1438 / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE
1439 / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED
1440 / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING
1441 / THEIR EXPLOSION COUNTS NON-ZERO.
1445 COLLID, 0 /HERE TO TEST FOR COLLISION
1446 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN
1447 SZA CLA /HYPERSPACE OR EXPLODING
1459 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION
1460 CIA /CHECK X COORDINATES FIRST
1462 SPA /GET ABSOLUTE VALUE OF DIFFERENCE
1464 TAD COLLIM /CLOSE ENOUGH?
1466 JMP I COLLID /NOPE, FORGET IT
1468 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES
1472 CIA /GET MAGNITUDE ONLY
1474 SMA CLA /CLOSE ENOUGH?
1476 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS
1486 / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO
1487 / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP
1488 / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM
1489 / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE
1490 / VARIOUS PARAMETERS FOR REENTRY.
1495 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0
1496 TAD RTNFLG /SET UP LIST POINTER
1498 TAD ONEDIF /TO APPROPRIATE SHIP FILE
1502 CLCA /SET UP "RANDOM NUMBER GENERATOR"
1503 /USE CLOCK COUNTER FOR THAT PURPOSE
1505 TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME
1506 AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777
1507 CIA /UPDATE CYCLES ( ABOUT 15 SECONDS)
1508 DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT
1510 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE
1511 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY
1513 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY
1514 JMS VEESET /COMPONENT
1516 TAD I AUTO17 /AND THEN THE Y COMPONENT
1525 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY
1527 TAD MHYP /ABOUT 3/4 CHANCE
1530 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET
1531 SZA CLA /UP FOR EXPLOSION ON REENTRY
1543 ONEDIF, ONEFLG-TWOFLG
1554 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS
1558 AND HM177 /LIMIT TO 177
1561 JMP I VEESET /AND EXIT
1565 ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS
1566 TAD ONETHE /AN EXPLOSION
1567 TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP
1569 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR
1570 ISZ ONEOUT /DONE WITH THE EXPLOSION?
1571 JMP I NOWTWO /NO, NORMAL RETURN
1573 IAC /YES, SET INTO PSEUDO HYPER SPACE
1575 IAC /DISABLE RETURN FROM HYPER SPACE
1578 TAD TWOFIN /IS NUMBER TWO STILL AROUND?
1580 JMP I NOWTWO /YES, RETURN
1581 JMP I TIEUP /NO, TIE BALL GAME
1585 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO
1586 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND
1589 JMS I IXPDIS /THEN DISPLAY IT
1590 ISZ TWOOUT /DONE WITH EXPLOSION?
1591 JMP I NOWPRO /NO, NORMAL RETURN
1593 IAC /YES, SEND INTO PSEUDO HYPER SPACE
1595 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE
1599 SZA CLA /STILL ALIVE AND WELL?
1600 JMP I TIEUP /NO, TIE GAME
1601 JMP I NOWPRO /YES, CONTINUE ON
1612 / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS
1613 / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL
1614 / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS
1615 / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S
1616 / A SORT OF CLOBBY EXPLOSION.
1621 EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT
1622 TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY
1623 DCA XTWODS /SET UP BY FILDIS OR TWODIS
1624 TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE
1628 CIA /CALCULATE INCREMENT THE WRONG WAY
1630 DCA DIXTEM /AND STORE
1634 DCA DIYTEM /SAME FOR Y
1636 TAD M4 /4 DOTS IN THE VECTOR"
1637 DCA DISCNT /COULD HAVE CALLED THE OTHER
1638 /VECTOR GENERATOR I SUPPOSE
1640 TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING
1641 DCA XONEDS /TOTALS AND DISPLAY THE RUNNING
1642 TAD YONEDS /TOTALS NORMAL SIZE
1647 / RTR /COULD MAKE TWICE AS BIG BY NOP-ING
1648 / RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH
1649 JMS I IVCLDX /AS IT IS
1660 ISZ DISCNT /DONE 4 DOTS?
1663 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE?
1665 JMP I EXPDIS /YES, EXIT
1667 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS
1677 / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS.
1678 / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140
1679 / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED
1680 / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y
1681 / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT
1682 / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE
1683 / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE.
1687 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN
1690 SMA /BRANCH FOR POSITIVE OR NEGATIV
1693 SMA CLA /GREATER THAN MAXIMUM POSITIVE?
1695 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET
1696 JMP I VEELIM /TO MAX NEGATIV
1698 VEEPOS, TAD VEEMIN /GREATER THAN MAX?
1701 TAD VEEMAX /YES SET TO MAX
1704 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG
1711 THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE
1712 SMA /0-550 OR 0-360 DEGREES. THIS IS
1713 JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW
1714 TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE
1715 JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC
1716 TAD M550 /MODULO 360 AND EXITS
1719 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T
1725 / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED.
1726 / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND
1727 / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE
1728 / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY
1729 / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF
1730 / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT
1731 / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE
1732 / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE
1733 / INTERGALACTIC DUST.
1737 ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET
1738 TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR
1739 DCA MESS /AND SET GAMOVR FLAG
1742 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE
1744 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET
1745 TAD MES2 /AND TWO FIN IS NOT
1746 DCA MESS /SET ALSO GAMOVR
1751 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN
1754 DCA GAMOVR /NOBODY EVER REALLY WINDS
1755 /UP THE WINNER IN THESE THINGS
1757 / DSB 1 /THIS IS ENTERED FROM FINISH WHEN
1758 TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY
1759 JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN
1760 TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT
1761 JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED
1762 TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS
1763 JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED
1779 / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED
1780 / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER
1781 / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT
1782 / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES
1783 / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES
1784 / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER
1785 / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT
1786 / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE
1787 / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO
1788 / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN
1789 / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH
1790 / THIS WAS STOLEN HAD FULL WORD PRECISION.
1795 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT
1796 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD
1960 MULTI, 0 /THIS IS STANDARD SINGLE PRECISION
1961 CLL /MULTIPLY ROUTINE WHICH WAS ONCE
1962 SPA /USED. I'VE LEFT IT IN SINCE
1963 CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND
1964 DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT
1965 DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE
1966 TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT
2011 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE
2012 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS
2025 / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS
2026 / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING
2027 / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION
2028 / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND
2029 / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR
2030 / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER
2031 / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT....
2056 /****************************************************************
2063 VMINUS, CMA IAC / COMPLEMENT
2064 RTR / DIVIDE BY FOUR
2065 AND P1777 / DELETE UPPER TWO BITS
2075 VCLDX, 0 / INTENSIFY LAST POINT AND LOAD NEW X VALUE
2076 JMS VDIV / DIVIDE BY FOUR
2077 DISD / DISPLAY READY?
2080 DILX / LOAD NEW X VALUE
2081 JMP I VCLDX / RETURN
2084 JMS VDIV / DIVIDE BY FOUR
2085 DILY / LOAD NEW Y VALUE
2091 /****************************************************************
2096 /GENERAL PURPOSE SYMBOL GENERATOR
2098 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING
2099 DCA ADDR /STORE STRING ADDRESS
2100 TAD I ADDR /FETCH DOUBLE CHARACTER
2104 JMS CHAR /PLOT CHARACTER
2105 SKP /NORMAL RETURN -- SKIP
2106 JMP I CHARS /TERMINATION RETURN -- EXIT
2107 TAD I ADDR /RECALL DOUBLE CHARACTER
2108 ISZ ADDR /ADVANCE STRING ADDRESS
2109 JMS CHAR /PLOT CHARACTER
2110 JMP CHARS+2 /NORMAL RETURN -- REPEAT
2111 JMP I CHARS /TERMINATION RETURN -- EXIT
2113 CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER
2114 AND K77 /MASK OUT UPPER BITS
2115 CLL RAL /MULTIPLY CODE BY TWO
2116 TAD TABLE /ADD TABLE BASE ADDRESS
2117 DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE
2118 CMA /INITIALIZE COUNTER FOR
2119 DCA COUNT2 / TWO PLOT WORDS
2120 TAD I POINT /FETCH FIRST PLOT WORD
2121 ISZ POINT /INCREMENT POINTER FOR NEXT ONE
2122 SNA /SKIP IF NOT SPECIAL CHARACTER
2123 JMP SPCHAR /ELSE GO PROCESS IT
2124 DCA CURPLT /SAVE CURRENT PLOT BITS
2125 XPLOT, TAD KM6 /INITIALIZE 6-BIT
2126 DCA COUNT6 / COUNTER
2127 TAD YVALUE /RESET Y TEMPORARY
2128 DCA YTEMP / VALUE FOR CHARACTER
2129 TAD XVALUE /OUTPUT CURRENT
2130 DILX /X-VALUE TO CRT
2131 TAD XINCR /INCREMENT
2132 DCA XVALUE / ABSCISSA
2133 YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS
2134 CLL RAL /GET NEXT BIT
2135 DCA CURPLT /SAVE REMAINING PLOT BITS
2136 SNL /SKIP IF POINT TO PLOT
2137 JMP CNTINU /ELSE JUMP AHEAD
2138 TAD YTEMP /OUTPUT CURRENT
2139 DILY /Y-VALUE TO CRT
2140 DISD / READY TO DISPLAY THE POINT?
2141 JMP .-1 / NO, WE'LL WAIT.
2142 DIXY / SHOOT THE BEAM!
2145 TAD CURPLT /RECALL CURRENT PLOT BITS
2146 SNA CLA /SKIP IF POINTS REMAINING
2147 JMP WRDEND /ELSE WORD IS FINISHED
2148 CNTINU, TAD YTEMP /INCREMENT TEMPORARY
2149 TAD YINCR / Y-VALUE FOR NEXT
2150 DCA YTEMP / CHARACTER STEP
2151 ISZ COUNT6 /SKIP IF 6 BITS PLOTTED
2152 JMP YPLOT /ELSE PLOT NEXT ONE
2153 JMP XPLOT /GO UPDATE X-VALUE
2154 WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD
2156 TAD I POINT /FETCH SECOND BIT WORD
2157 SZA /SKIP IF NO PLOT POINTS
2158 JMP XPLOT-1 /ELSE GO PLOT THEM
2159 EXIT, TAD XVALUE /INCREMENT ABSCISSA
2160 TAD XINCR / FOR SPACE BETWEEN
2161 DCA XVALUE / SYMBOLS
2162 JMP I CHAR /EXIT FROM CHAR
2164 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR
2165 DCA POINT /STORE AS INDIRECT ADDRESS
2167 JMP I POINT /GO TO APPROPRIATE ROUTINE
2168 SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT
2169 CLL RTL /MULTIPLY BY FOUR AND
2170 JMP EXIT / GO CREATE SPACE
2171 CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X
2172 DCA XVALUE / TO ITS ORIGINAL VALUE
2173 LF, TAD YINCR /"LINE FEED"
2174 CLL RTL / DECREMENTS THE
2175 CLL CIA RAL / Y-VALUE BY
2176 TAD YVALUE / EIGHT SCALE
2178 JMP I CHAR /EXIT FROM CHAR
2179 RESET, TAD INITX /"RESET" RESETS
2180 DCA XVALUE / X AND Y TO
2181 TAD INITY / THEIR ORIGINAL
2182 JMP RESET-2 / VALUES
2183 TERM, ISZ CHAR /TERMINATE CODE CAUSES
2184 JMP I CHAR / EXIT TO P+2
2186 INITX, 0 /INITIAL X-VALUE
2187 INITY, 327 /INITIAL Y-VALUE
2188 XVALUE, 0 /CURRENT X-VALUE
2189 YVALUE, 0 /CURRENT Y-VALUE
2190 XINCR, 6 /BASIC X INCREMENT VALUE
2191 YINCR, 10 /BASIC Y INCREMENT VALUE
2192 YTEMP, 0 /TEMPORARY Y-VALUE
2193 CURPLT, 0 /CURRENT PLOT BITS
2194 ADDR, 0 /CURRENT STRING ADDRESS
2195 COUNT6, 0 /6-BIT COUNTER
2196 COUNT2, 0 /2-WORD COUNTER
2197 KM6, -6 /CONSTANT FOR COUNT6
2198 K77, 77 /CHARACTER CODE MASK
2199 POINT, 0 /TABLE POINTER
2204 TABLE, .+1 /TABLE BASE ADDRESS
2205 0 /SPECIAL CHARACTER (00)
2206 TERM /TERMINATION CODE
2267 0 /SPECIAL CHARACTER (37)
2269 0 /SPECIAL CHARACTER (40)
2289 4040 / UNDERSCORE (52)
2293 0 /SPECIAL CHARACTER (54)
2323 0 /SPECIAL CHARACTER (73)
2324 CRLF /CARRIAGE RETURN; LINE FEED
2337 / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS
2338 / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE
2339 / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN.
2369 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO
2370 / AROUND 7575 OR SO.
2382 ////////////////////////////
2386 ///////////////////////////