/SPCWAR BY D.E. WREGE / VERSION 3 / / / / / / / /COPYRIGHT (C) 1974 BY D.E. WREGE & ASSOC. / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY D.E. WREGE & ASSOCIATES. /D.E. WREGE & ASSOCIATES ASSUME NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO GEORGIA TECH. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF THIS COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY D.E. WREGE /AND ASSOC. / /D.E. WREGE AND ASSOC. ASSUME NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / /SPACE WAR. V3 /D.E. WREGE /CONDITIONAL ASSEMBLY PARAMETERS /FOR AX08 TYPE DISPLAY DEFINE AX08=1 IFNDEF AX08 /FOR TYPE 30G DISPLAY DEFINE T30G=1 IFNDEF T30G /FOR PDP-8/E VC8E DISPLAY VC8E=1 IFNDEF VC8E /PDP-12 - VR12 IS DEFAULT IFZERO VC8E+T30G+AX08 /CONDITIONAL ASSEMBLIES FOR CLOCK /FOR DK8-EA (60 CYCLE) DK8EA=1 IFNDEF DK8EA /FOR DK8-EP PROGRAMABLE DK8EP=1 IFNDEF DK8EP /FOR FRED DYER'S FUNNY CLOCK FCLOCK=1 IFNDEF FCLOCK /DEFAULT IS PDP-12 KW12-A IFNZRO PDP12 < IFZERO DK8EA+AX08+DK8EP+FCLOCK < IFNDEF KW12 >> /DEFS IFNZRO PDP12 < DIS= 140 /DISPLAY A POINT LINC MODE LINC= 6141 /GO TO LINC MODE PDP= 0002 /GO TO 8-MODE> MUY= 7405 /EAE MULTIPLY DVI= 7407 /EAE DIVIDE NMI= 7411 /EAE NORMALIZE SHL= 7413 /EAE SHIFT LEFT ASR= 7415 /ARITHMETIC SHIFT RIGHT LSR= 7417 /LOGICAL SHIFT RIGHT MQL= 7421 /LOAD MQ;CLEAR AC SCL= 7403 /STEP COUNTER LOAD FROM MEMORY SCA= 7441 /STEP COUNTER TO ACCUMULATOR MQA= 7501 /READ MQ D= 10 /DISPLAY BUFFER FIELD DISBUF=4000 /ADDRESS OF DISPLAY BUFFER /PAGE ZERO CONSTANTS AND VARIABLES *1 JMP INTRPT *6 QBETA, 0 /FOR PDP-12 QALPHA, 0 /ALPHA REG USED FOR DISPLAY QXR1, 0 /RESERVED XR'S QXR2, 0 QDISXR, 0 /FOR DISPLAY ROUTINE ONLY QXR3, 0 /MUST BE USED WITH IOF *20 /VARIABLES RESERVED QR, 0 /SHIP POSITION RADIAL ALIVE, 0 /=0 WHEN SHIP BLOWN UP /NON-ZERO OTHERWISE QXPOS, 0 /X COORD. QYPOS, 0 /Y COORD. QVX, 0 /X COMPONENT VELOCITY QVY, 0 /Y COMPONENT VELOCITY QPH, 0 /SHIP ANGLE (NOT POSITION DEPENDENT) QPHDOT, 0 /SHIP ANGULAR VELOCITY QPHR, 0 /PRECISION QPH SHIELD, 0 /NON-ZERO WHEN SHIELDS ARE UP. /WHEN SHIELDS ARE UP NO MISSELS /AND NO ACCELLERATION ALLOWED. HYPERS, 0 /NON-ZERO WHEN IN HYPERSPACE MISCNT, 1 /-# MISSLES LEFT ARMED, 0 /INCREMENTS TO 0 BEFORE SHIP /CAN FIRE QSHIP, 0 /POINT TO SHIP PICTURE QSHIPN, 0 /# POINTS TO BE DISPLAYED IN SHIP QSINPH, 0 /SIN(QPH) QCOSPH, 0 /COS(QPH) SHIPSZ=.-QR /#ENTRIES/SHIP QTIME, 3777 /TIME SCALING FACTOR /TEMPS AND VARIABLES QSINTH, 0 /SIN(QTH) QCOSTH, 0 /COS(QTH) BREAKU, 0 /NON-ZERO WHEN SHIP BREAKING UP. DBUFP, 0 /POINTS TO NEXT POS IN DISP BUFF. QTHR, 0 /NON-ZERO WHEN MAIN ROCKETS ON QTHA, 0 /NON-ZERO WHEN ANGULAR THRUST ON CONSER, 0 /NON-ZERO IF CONSERVING ANGULAR /MOMENTUM NUMMIS, 0 /# MISSELS IN MISTBL NNUMMI, 0 /TEMPORORY FOR UPDATING MISSLES MAXMIS, -7777 /NUMBER OF ALLOWABLE MISSELS QTM1, 0 /GENERAL TEMPORARYS QTM2, 0 QCNT1, 0 QCNT2, 0 QCNT3, 0 /MUST BE USED WITH IOF /CONSTANTS QTHRUS, 10 /THRUST QGRAV, 1000 /GRAVITY QRET, 4 /THRUST ANGULAR RETRO'S QTHROC, 1000 /MUSSEL VELOCITY OF ROCKETS /THE FOLLOWING ARE POINTERS & FLAGS PSAUCP, SAUC /POINTER TO SAUCER SHIP GENERATOR MISPNT, MISTBL /POINTS TO WHERE NEXT MISSEL SHOULD /GO IN MISSEL TABLE BOUNCX, NULL BOUNCY, NULL /NEW INSTRUCTIONS MULT=JMS I . XMULT DIVIDE=JMS I . XDIVID DISPLAY=JMS I . XDISPL COS=JMS I . /COSINE LOOKUP XCOSIN SIN=JMS I . /SINE LOOKUP XSINE GGRAV=JMS I . XGGRAV RANDOM=JMS I . XRANDOM ONDECK=JMS I . XONDECK OFDECK=JMS I . XOFDECK DRAW=JMS I . CALPNT NXTPOS=JMS I . NEWPOS NXTANG=JMS I . ANGLES FLAME=JMS I . DFLAME DSTARS=JMS I . SUN DSUN=JMS I . POLARS FIRE=JMS I . FIRONE /THESE DEFS ARE ONLY FOR INTERMEDIATE /STAGES OF DEVELOPMENT. IFDEF XXXXXX < /OR IFPASS2 IFNDEF XONDECK IFNDEF XOFDECK IFNDEF CALPNT IFNDEF NEWPOS IFNDEF ANGLES IFNDEF DFLAME IFNDEF SUN IFNDEF FIRONE IFNDEF SAUC IFNDEF XGGRAV IFNDEF BOUNX IFNDEF BOUNY IFNDEF MISTBL IFNDEF SPCWAR > XXXXXX=. HLT PAGE /SO WE HAVE START AT 200 JMP I .+1 SPCWAR /SIGNED MULTIPLY ROUTINE. /THIS ROUTINE DOES A INTEGER MULTIPLY OF /TWO SIGNED NUMBERS (11 BITS OF SIGNIF). /RESULT IS A SINGLE 12-BIT SIGNED NUMBER. /CALL: TAD (MLTCAND / JMS MULT / MLTPLR XMULT, 0 CLL /WILL SAVE IN LINK SPA /MULTIPLICAND POSITIVE? CMA CML IAC /NO: MAKE POS. REMEMBER SIGN IN LINK MQL /LOAD MULTIPLICAND INTO MQ TAD I XMULT /PICK UP MULTIPLIER ISZ XMULT /POINT TO RETURN SPA /POSITIVE?? CMA CML IAC /NO: MAKE POS AND REMEMBER SIGN DCA XMULT1 /FOR THE MULTIPLY CMA RAL /AC=-1 IF NEG;-2 IF POS. DCA XMULTS /SAVE IT FOR LATER MUY /EAE MULTIPLY XMULT1, 0 /MULTIPLYER GOES HERE SHL /WANT CORRECT NORMALIZATION 0 /ONE SHIFT ONLY DCA XMULT1 /REMEMBER HIGH ORDER MQA /READ LOW ORDER SPA CLA /SKIP IF NO ROUND UP IAC /ROUND UP ONE TAD XMULT1 /MAKE ROUNDED RESULT ISZ XMULTS /WILL SKIP IF NEG SIGN JMP I XMULT /DONE: AC=RESULT CIA /NEGATE JMP I XMULT /AND RETURN XMULTS, 0 /SAVES SIGN OF RESULT /DIVISION OF SIGNED DIVIDEND BY UNSIGNED DIVISOR. /EXIT WITH 12-BIT SIGNED RESULT. /DIVIDE OVERFLOW ONLY OCCURS WHEN DIVISOR=0 /CALL: TAD (DIVIDEND / DIVIDE / DIVISOR / ERROR /DIVISION BY 0 / NORMAL RET. /AC=SIGNED RESULT XDIVID, 0 CLL /FOR SIGN SPA /IS IT POSITIVE? CIA CML /NO:MAKE POS. MQL /PUT IN LOW ORDER CMA RAL /AC=-1 IF NEG. DCA XMULTS /SAVE SIGN TAD I XDIVID /GET DIVISOR ISZ XDIVID /POINT TO ERROR EXIT SNA /SKIP IF NOT ZERO JMP I XDIVID /TAKE DIV BY 0 RETURN ISZ XDIVID /POINT TO NORMAL RETURN DCA .+2 /STORE DIVISOR DVI /DO THE DIVISION 0 /HOLDS THE DIVISOR MQA CLA /GET RESULT ISZ XMULTS /SKIP IF NEG JMP I XDIVID /POS=RETURN CIA /NEG=NEGATE JMP I XDIVID /AND RETURN /DISPLAY ROUTINE. REFRESHES OUT OF BUFFER IN FIELD D. /THIS IS FOR PDP-12 DISPLAY. USES QALPHA FOR REGISTER. /CALL: TAD (ADDR-1 /ADDR=ADDRESS OF BUFFER IN FIELD D / DISPLA /OF X,Y PAIRS. / -# POINTS XDISPL, 0 DCA QDISXR /ADDRESS INTO XR TAD I XDISPL /PICK UP # X,Y PAIRS ISZ XDISPL /POINT TO RETURN SNA /IF ZERO POINTS THEN EXIT JMP I XDISPL STL RAR //2 FOR POINT PAIRS DCA QCNT1 /STASH FOR COUNT CDF D /TO DISPLAY BUFFER FIELD IOF /FOR LINK MODE IFNZRO PDP12 < XDISL, TAD I QDISXR /GET THE X TAD (400 /0 IS CENTER OF SCREEN DCA QALPHA /STICK IN ALPHA REGISTER TAD I QDISXR /GET Y-POSITION LINC DIS QALPHA /DISPLAY THE POINT PDP /BACK TO 8-MODE CLA CLL /GET RID OF THE Y > IFNZRO T30G < TAD (3 /MAX INTENSITY 6074 /SET MAX INTENSITY CLA CLL XDISL, TAD I QDISXR /GET X CLL RAL /512 RESOLUTION TAD (1000 /TO CENTER OF SCREEN 6053 /CLEAR AND LOAD X CLA CLL TAD I QDISXR /GET Y CLL RAL /512 RESOLUTION TAD (1000 /TO CENTER OF SCREEN 6067 /CLEAR AND LOAD Y;DISPLAY CLA CLL 6161 /WAIT TILL DONE JMP .-1> IFNZRO VC8E < 6050 /CLEAR ALL FLAGS XDISL, TAD I QDISXR /GET X CLL RAL /512 RESOLUTION 6053 /CLEAR AND LOAD X CLA CLL TAD I QDISXR /GET Y CLL RAL /512 RESOLUTION 6054 /CLEAR AND LOAD Y CLA CLL 6055 /INTENSIFY 6052 /WAIT TILL DONE JMP .-1> IFNZRO AX08 < XDISL, TAD I QDISXR TAD (400 6303 /LOAD X CLA CLL TAD I QDISXR /GET Y 6317 /LOAD Y AND INTENS. CLA CLL > ISZ QCNT1 /SKIP WHEN DONE JMP XDISL /LOOP CDF 0 /BACK TO THIS FIELD JMP I XDISPL /AND RETURN /SINE LOOKUP ROUTINE. ANGLES ARE IN /FRACTIONS OF A CIRCLE. I.E. IN 256THS OF A CIRCL. /THUS PI RADIANS=200(8) /THE RESULT IS A SIGNED NUMBER -2048 JMP WAR WAIT, 0 /-1 WHEN READY /SET BY INTERRUPT ROUTINE STOVER, 0 /DELAY FOR AUTO RESTART PAGE /SUBROUTINE TO DO ALL OF THE SHIP CALCULATIONS. /ENTER WITH BITS SET ACCORDING TO OPTIONS WARSUB, 0 DCA SWITCHES TAD SWITCHES RAR /ROCKET BIT TO LINK SZL CLA /SKIP IF NOT ON TAD QTHRUST /COPY THRUST INTO QTHR DCA QTHR /IF ROCKETS ON DCA HYPERS /TAKE OUT OF HYPERSPACE TAD SWITCHES AND (6 /MASK ROT BITS SNA /SKIP IF ANY ON JMP WAR1 DCA QTM1 /SAVE TAD QTM1 TAD (-6 /TO SEE IF HYPERSPACE SNA CLA /SKIP IF NOT HYPERSPACE JMS HYPER /GO INTO HYPERSPACE TAD HYPERS /IF IN HYPERSPACE DON'T DO SZA CLA /THE CALCULATIONS JMP I WARSUB TAD QTM1 RTR /GET CLOCKWISE INTO LINK CLA /GET RID OF OTHER BIT TAD QRET /RETRO CONSTANT SNL /SKIP IF CC CIA WAR1, DCA QTHA /SET RETRO THRUST TAD ARMED /TO SEE IF ALREADY ARMED SNA CLA /SKIP IF NOT YET JMP .+3 /ALREADY ARMED ISZ ARMED /UPDATE TIME DELAY JMP WAR2 /NOT ARMED. TAD SWITCHES /IS ARMED SO CHECK AND (10 /FIRE BIT. SZA CLA /SKIP IF NOT FIRING FIRE /FIRE A MISSLE. WAR2, NXTPOS /CALC NEW POSITION NXTANG /AND SHIP ANGLE DRAW /SET DISPLAY BUFFER PSAUC1, JMS SAUC /OR NOP FOR SHIPS JMP I WARSUB PAGE /COME HERE FROM INTERRUPT SAVAC, 0 SAVLK, 0 INTRPT, DCA SAVAC /SAVE ACCUMULATOR RAR DCA SAVLK /AND LINK KSF /KEYBOARD? JMP .+4 KRB /READ THE CHAR DCA ICHAR /STORE JMP I OPTIONS TSF /TELEPRINTER JMP CLKINT /NO CHECK CLOCK TCF /CLEAR THAT FLAG DCA TELSW /SET NOT IN PROGRESS SWITCH JMP I OPTIONS TELSW, 0 ICHAR, 0 DELAY1, 0 CLKINT, IFNZRO KW12+DK8EP < CLSK /SKIP IF CLOCK JMP INTEXT /QUIT (UNDEFINED INT?) CLSA /CLEAR THE FLAGS > IFNZRO FCLOCK < 6131 /SKIP IF NOT FLAG SKP JMP INTEXT /NOPE 6132 /RECONNECT TO INT > IFNZRO DK8EA < 6133 /SKIP ON CLOCK JMP INTEXT /NOPE 6131 /MAKE SURE INT STILL ENABLED ISZ DELAY1 /WANT 30/SEC JMP INTEXT /NOPE: NEXT TIME CLL STA RTL /-2 DCA DELAY1 /RESET DELAY1 > IFNZRO AX08 < 6321 /SKIP IF CLOCK JMP INTEXT /WHO??? 6352 /CLEAR CLOCK ISZ DELAY1 JMP INTEXT /NOT YET TAD CLKLIM /RESET INTRPS DCA DELAY1 /DELAY INTERVAL > STA /AND SET WAITING DCA WAIT INTEXT, 6402 /LINK 6412 IFNZRO T30G <6161;NOP> CLA CLL TAD SAVLK /GET LINK RAL CLL TAD SAVAC /AND AC. RMF /RESTORE FIELDS ION /AND RESTOR INTERRUPTS JMP I 0 /RETURN TO PROGRAM /GO BACK TO SPCWAR OPTION, KBOARD JMP INTEXT IFNZRO KW12+DK8EP < /SUBROUTINE TO START UP CLOCK /MAY BE HARDWARE DEPENDENT /THIS IS FOR KW12A CLOCK - PDP12 /OR PROGRAMABLE PDP8E CLOCK DK8EP CLSK=6131 /SKIP IF CLOCK CLLR=6132 /LOAD CONTROL CLAB=6133 /AC TO BUFFER PRESET CLEN=6134 /LOAD ENABLE CLSA=6135 /BIT RESET FLAGS STCLK, 0 CLA CLL /JUST IN CASE IFNZRO PDP12 TAD (-40 /ABOUT 30CPS CLAB /LOAD PRSET CLA CLL IFNZRO PDP12 < TAD (0100 /1KC - PRESET TIME CLLR /LOAD CONTROL CLSA /CLEAR STATUS AND POSSIBLE OVERFLOW CLA CLL TAD (300 /INTERRUPT ON OVERFLOW CLEN CLA CLL TAD (4100 /AND START UP CLOCK > IFNZRO DK8EP < TAD (5300 /INTR ON CLOCK - 1KC > CLLR CLA CLL JMP I STCLK> IFNZRO FCLOCK < /DYER'S FUNNY CLOCK STCLK, 0 6132 JMP I STCLK> IFNZRO DK8EA < /DK8EA (LINE CLOCK) STCLK, 0 6131 /ENABLE INTERRUPTS JMP I STCLK> IFNZRO AX08 < STCLK, 0 CLA CLL TAD (400 6346 /START CRYSTAL CLOCK TAD CLKLIM /INITIALIZE CLOCK DCA DELAY1 JMP I STCLK CLKLIM, 7400 > IFZERO KW12+AX08+FCLOCK+DK8EA+DK8EP < STCLK, 0 JMP I STCLK> PAGE KBOARD, JMS GETC /GET THE CHAR JMS DISPCH /DISPATCH ON CHAR -"P;OPHLAT -"C;OCURVE -"F;OSTARS /FIELD OF STARS -"Z;OSUN /POLARIS ONLY -"B;OBOUNCE /BOUNCE MODE -"W;OWRAP /WRAP AROUND -"A;OANGUL /ANGULAR MOMENT CONSERVE -"N;ONORM /NO ANG MOM CONS. -"G;OGRAV /RESET GRAVITY -"M;OMISSL /RESET NUMB MISSLES -"R;ORETRO /RESET RETRO CONSTANT -"T;OTHRUS /RESET THRUST CONSTANT -"S;OSHIPS /DISPLAY SHIPS -"V;OVELOC /MUSSEL VELOCITY OF MISSILES -"U;OUFO /DISPLAY UFO'S -"O;OOPTION /LIST OPTIONS -203;7600 /^C RETURN TO MONITOR 0 /END OF LIST JMP SPCWAR /START OVER /DISPATCH ON ACCUMULATOR DISPCH, 0 DCA OTM1 /TEMP STASH TAD I DISPCH /GET COMPARISON ISZ DISPCH SNA /0 MEANS DONE JMP I DISPCH /NOT IN LIST TAD OTM1 /CHECK AGAINST CAHR SNA CLA /SKIP IF NO MATCH JMP .+3 /MATCH ISZ DISPCH /TO NEXT CHAR JMP DISPCH+2 /CONTINUE TAD I DISPCH /FOUND IT DCA DISPCH /DO DOUBLE INDIRECT JMP I DISPCH OTM1, 0 /PRINT A MESSAGE PRMSG, 0 TAD I PRMSG /GET ADD OF MESSAGE DCA OTM1 /STORE POINTER ISZ PRMSG /NORMAL EXIT PRST1, TAD I OTM1 RTR;RTR;RTR /OVER FOR PRINT JMS PRCHR /PRINT LEFT HALF TAD I OTM1 JMS PRCHR /PRINT RIGHT HALF ISZ OTM1 /NEXT WORD JMP PRST1 /LOOP PRCHR, 0 AND (77 SNA JMP I PRMSG /IF ZERO QUIT TAD (-40 /FOR EXTEND SPA /SKIP IF NEUMERIC TAD (100 /IS ALPHA TAD (240 /BACK TO CORRECT JMS PCH /PRINT ROUTINE JMP I PRCHR /PRINT A CHARACTER ROUTINE PCH, 0 TLS /OUTPUT IT DCA TELSW /SET TTY INPROGRESS JMS OPTIONS /AND WAIT TILL FINISHED TAD TELSW /KEYBOARD INTERRUPT SZA JMP .-3 /NOT YET JMP I PCH /DONE. /GET AN INPUT CHARACTER GETC, 0 TAD ICHAR /FROM INTERRUPT SERVICE SZA /GOT ONE? JMP .+3 /YEP JMS OPTIONS /WAIT SOME MORE JMP GETC+1 DCA CHAR DCA ICHAR TAD CHAR JMP I GETC /AND RETURN WITH CHAR CHAR, 0 CRLF, 0 TAD (215 JMS PCH TAD (212 JMS PCH JMP I CRLF REINITIALIZE, JMS OPTIONS JMP KBOARD /TURN ON BOUNCE OBOUNC, TAD (BOUNX DCA BOUNCX TAD (BOUNY DCA BOUNCY JMS PRMSG /TELL HIME MBOUNC JMS CRLF JMP REINIT PAGE /ROUTINE TO DISABLE BOUNCE OWRAP, TAD (NULL DCA BOUNCX TAD (NULL DCA BOUNCY JMS PRMSG MWRAP JMS CRLF JMP REINIT /ROUTINE TO CONSERVE ANGULAR MOM OANGUL, CLA IAC DCA CONSER JMS PRMSG MANGCON JMS CRLF JMP REINIT ONORM, DCA CONSER JMS PRMSG MNORMAL JMS CRLF JMP REINIT /ROUTINE TO INPUT AN OCTAL NUMBER FROM THE KEYBOARD. /CALL: JMS OCTAL / RET1 /NO INPUT / RET2 /AC=OCTAL NUMBER OCTALX, 0 DCA NUMB DCA INPUT OCTALL, JMS GETC JMS PCH /AND PRINT IT TAD CHAR TAD (-"8 SMA /SKIP IF <"8 JMP NUMBEX /EXIT TAD ("8-"0 /NOW CHECK FOR OCTAL SPA /SKIP IF OK JMP NUMBEX /NO=QUIT DCA INPUT /SAVE NUMBER TAD NUMB /GET LAST NUMBER CLL RAL;CLL RAL;CLL RAL TAD INPUT /STICK IN NEW NUMBER DCA NUMB ISZ INPUT /MAKE SURE NON-ZERO JMP OCTALL NUMBEX, CLA CLL TAD INPUT /TO SEE IF ANY SZA CLA ISZ OCTALX /TAKE YES RETURN JMS CRLF TAD NUMB /STICK NUMBER IN AC JMP I OCTALX /AND RETURN NUMB, 0 INPUT, 0 OGRAV, JMS PRMSG /TELL HIM WHAT OPTION IS MGRAVY JMS OCTALX /GET NEW VALUE JMP REINIT /NO INPUT DCA QGRAV /SET VALUE TAD (KBOARD /REINITIALIZE DCA OPTIONS JMS SETGRV /SET UP TABLE TAD QGRAV /NOW TO SEE IF ANTI-GRAV. SMA CLA /SKIP IF YES JMP WAR-2 JMS PRMSG MAGRAV /ANTI GRAVITY JMS CRLF TAD (KBOARD DCA OPTIONS JMP WAR-2 OMISSL, JMS PRMSG MMISSLS JMS OCTALX /GET A NUMBER JMP REINIT CIA /SET MISSEL CONSTANT DCA MAXMIS /SET CONSTANT JMP REINIT /DONE /ROUTINE TO READJUST THRUST OTHRUS, JMS PRMSG MTHRUS JMS OCTALX JMP REINIT CLL RTL DCA QTHRUS JMP REINIT /ROUTINE TO SET RETRO CONSTANT ORETRO, JMS PRMSG MRETRO JMS OCTALX JMP REINIT DCA QRET JMP REINIT /ROUTINE TO PRINT LOTS OF MESSAGES MMESG, 0 JMS CRLF /NEW LINE TAD I MMESG /GET START OF MESSAGE SNA /SKIP IF MORE TO COME JMP I MMESG DCA .+2 JMS PRMSG /PRINT IT 0 ISZ MMESG /NEXT LINE JMP MMESG+1 /MORE /PRINT OPTIONS PAGE OOPTIO, JMS MMESG MOPTA MOPTB MOPTBA MOPTC MOPTD MOPTE MOPTF MCURVE MPHLAT MSTARS MSUN MBOUNC MWRAP MANGCO MNORMA MMISSL MTHRUS MRETRO MVELOX 0 JMP REINIT /DISPLAY SAUCERS (UFO'S) OUFO, JMS PRMSG MUFO JMS CRLF TAD (JMS I PSAUCP DCA PSAUC1 TAD (NOP DCA PSAUC2 TAD (SAUC1 DCA I (SHIP1+QSHIP-QR TAD (SAUC1E-SAUC1 DCA I (SHIP1+QSHIPN-QR TAD (SAUC2 DCA I (SHIP2+QSHIP-QR TAD (SAUC2E-SAUC2 DCA I (SHIP2+QSHIPN-QR OUFOR, TAD (KBOARD DCA OPTIONS JMP WAR-2 /DISPLAY SHIPS OSHIPS, JMS PRMSG MSHIPS JMS CRLF TAD OSHIPJ DCA PSAUC2 TAD (NOP DCA PSAUC1 TAD (SHIP1C DCA I (SHIP1+QSHIP-QR TAD (SHIP1E-SHIP1C DCA I (SHIP1+QSHIPN-QR TAD (SHIP2C DCA I (SHIP2+QSHIP-QR TAD (SHIP2E-SHIP2C DCA I (SHIP2+QSHIPN-QR JMP OUFOR OSHIPJ, PSAUC2+3&177+5200 PAGE /RESET MUSSEL VELOCITY OF ROCKETS OVELOC, JMS PRMSG MVELOX JMS I (OCTALX JMP REINIT CLL RAR DCA QTHROC /RESET MUSSLE VELOCITY JMP REINIT /SELECT FLAT OR CURVED SPACE OPHLAT, JMS PRMSG MPHLAT JMS CRLF CLA TAD (3777 DCA QTIME /NO TIME CURVE ON OUTLINE TAD (SC DCA NEWPO7+1 TAD (SC DCA NEWPO7+11 JMP REINIT OCURVE, JMS PRMSG MCURVE JMS CRLF CLA TAD (SC1 DCA NEWPO7+1 TAD (SC2 DCA NEWPO7+11 JMP REINIT /DISPLAY OPTIONAL SUN OR UNIVERSE OSTARS, JMS PRMSG MSTARS JMS CRLF CLA TAD (D2 DCA WARDX+1 JMP REINIT OSUN, JMS PRMSG MSUN JMS CRLF CLA TAD (D1 DCA WARDX+1 JMP REINIT PAGE MVELOX, TEXT \VELOCITY INITIAL OF MISSLES(2000):\ MOPTA, TEXT \OPTIONS ARE DESIGNATED BY FIRST CHARACTER\ MOPTB, TEXT \THE NUMBER IN PARENS ARE "NORMAL" VALUES\ MOPTBA, TEXT \INPUT NUMBERS ARE OCTAL\ MOPTC, TEXT \AVAILABLE OPTIONS ARE:\ MOPTD, TEXT \U DISPLAY UFO'S\ MOPTE, TEXT \S DISPLAY SHIPS\ MSUN, TEXT 'Z POLARIS ONLY' MOPTF, TEXT \G RESET GRAVITY CONSTANT(1000)\ MUFO, TEXT \DISPLAY UFO'S\ MSHIPS, TEXT \DISPLAY SHIPS\ MCURVE, TEXT 'CURVED SPACE' MPHLAT, TEXT 'PHLAT SPACE' MSTARS, TEXT 'FIELD OF STARS' MBOUNC, TEXT \BOUNCE ON\ MWRAP, TEXT \WRAP-AROUND ON\ MANGCO, TEXT \ANGULAR MOMENTUM\ MNORMA, TEXT \NON-ANGULAR MOMENTUM\ MGRAVY, TEXT \STRENGTH OF GRAVITY(1000):\ MAGRAV, TEXT \ANTI-GRAVITY\ MMISSL, TEXT \MAX NUMBER MISSLES:\ MTHRUS, TEXT \THRUST CONSTANT (2):\ MRETRO, TEXT \RETRO-THRUST (4):\ PAGE IFNZRO D < XXX=. FIELD D%10 *1000> DECIMAL BIGSUN, 0;0 6;4; -6;-4; 0;7; 0;-7; -6;4; 6;-4 -14;0; 14;0; -7;-12; 7;12; 7;-12; -7;12 0;-21; 0;21; 19;-11; -19;11; 19;11; -19;-11 14;-25; -14;25; 28;0; -28;0; 14;25; -14;-25 0;35; 0;-35; 20;30; -20;-30; -20;30; 20;-30 0;0 ESUN=. IFNZRO 0 < -2;12; 0;12; 3;12; -4;11; -1;11; 1;11; 4;11; 6;11 -6;10; -3;10; 2;10; 4;10; 8;10; -8;9; -4;9; -2;9; 0;9 4;9; 6;9; 7;9; -8;8; -6;8; -3;8; 2;8; 6;8; 8;8; 10;8; -10;7 8;7; 9;7; -8;6; -5;6; 0;6; 3;6; 10;6; 11;6; -11;5; -9;5 -2;5; 5;5; 7;5; 9;5; 11;5; -7;4; 3;4; 12;4; -10;3 -4;3; -1;3; 1;3; 7;3; 10;3; 11;3; -12;2 -11;2; -6;2; 4;2; 12;2; 13;2 -11;1; -10;1; -8;1; -2;1; 1;1; 8;1; 11;1; -12;0; 10;0 -5;0; 6;0; 13;0; -11;-1; -3;-1; 0;-1; 3;-1; 9;-1; 12;-1; -12;-2; -10;-2 -8;-1; -6;-2; -1;-2; 7;-2; 11;-2; 12;-2; -9;-3; -4;-3 4;-3; 11;-3; -11;-4; -9;-4; -7;-4; -1;-4; 2;-4; 7;-4 10;-4; 12;-4; 11;-5; -11;-6; -9;-6 -8;-6; -6;-6; 4;-6; 6;-6; 8;-6; 9;-6; 11;-6; -10;-7 -8;-7; -2;-7; 1;-7 -8;-8; -6;-8; 6;-8; 8;-8; 9;-8; -8;-9; -6;-9; -4;-9; 4;-9; 7;-9 -6;-10; -2;-10; 0;-10; 2;-10; 4;-10; 5;-10; 7;-10; -5;-11; -3;-11; -1;-11 2;-11; 5;-11; -3;-12; -1;-12; 1;-12; 3;-12 ESUN=. > PAGE SUNPT1, /STAR FIELD /ORION SIGNUS URSIA MAJOR SCORPIO 18;-174; 62;108; -102;31; -128;250 47;-171; 106;85; -88;20; -128;242 33;-194; 91;91; -91;9; -139;225 40;-191; 71;88; -91;-23; -146;216 /SOME MISC. -149;-213 /IN PUPPIS -84;-168 /PROCYON 113;-46 /IN ANDROMEDA -11;77 /ELTANIN /ORION SIGNUS URSIA MAJOR SCORPIO 47;-188; 73;74; -73;-20; -153;213 26;-211; 47;85; -102;-9; -164;194 66;-199; 29;74; -88;-3; -175;196 55;120; -182;199 /PLUS SOME MISCELLANEOUS -117;188 -168;71 /ARCTURUS 6;6;-6;-6 /SOME SUN SPOTS 208;-105 /NECK OF CETUS 208;102 /IN AQUARIUS -241;17 /SPICA /CASEOPEA CANUS MAJOR PLEIADES 62;-23; -18;-253; 117;-110 73;-20; -29;-239; 117;-108 73;-11; -18;-228; 113;-111 88;-9; -44;-222; 113;-108 80;0; -51;-213 -102;-239 -77;-239 -66;-248 -66;-219 -57;-222 /PLUS SOME MISCELLANEOUS 6;-6;-6;6 /MORE SUN SPOTS -230;159 /IN LIBRA -200;-139 /ALPHARD SUNPT2, 0;1; 0;-1; 1;0; -1;0 0;2; 0;-2; 2;0; -2;0 0;4; 0;-4; 4;0; -4;0 0;6; 0;-6; 6;0; -6;0 /VAIRABLES START HERE /BRIGHT STARS 146;-29 /IN ANDROMEDA 80;-143 /ALDEBARAN IN TAURUS -109;100 /ALPHECCA IN CORONA BOREALIS 153;-68 /IN ARIES /LEO SAGITARIUS GEMINI PEGASIS -200;-17; -18;250; -55;-114; 168;102 -222;-43; 4;250; -69;-120; 160;40 -200;-43; 15;242; -73;-128; 193;46 10;0;0;10;-10;0;0;-10 /MORE SUN -186;-37; 40;242; -58;-125; 164;0 /BRIGHT STARS -190;145 /IN LIBRA 11;105 /LYRA 69;-63 /MIRFAK IN PERSEUS 164;-63 /IN ARIES /LEO SAGITARIUS GEMINI PEGASIS -200;-71; 51;239; -44;-122; 200;0 -168;-71; 66;228; -33;-117 -182;-85; 51;228; -58;-151 -171;-83; 62;246; -58;-137 /BRIGHT STARS -168;-240 /IN PUPPIS -222;137 /IN LIBRA -208;29 /IN VIRGO 88;157 /ALTAIR 0;12;12;0;-12;0;0;-12 /MOR SUN /LEO SAGITARIUS GEMINI PEGASIS -146;-85; 66;239; -29;-137 -146;-77; -22;-154 -33;-159 /AURIGA 26;-88;47;-114;29;-128;4;-97 4;4;4;-4;-4;4;-4;-4 /MORE SUN 0;0 $$$$$$$