TITLE SWR--SPACE WAR FOR TVS A=1 ;SUN BEING CONSIDERED N=2 ;SHIP BEING CONSIDERED X=3 ;POSITION XT=4 Y=5 YT=6 T1=10 ;TEMPORARIES T2=11 TT=12 T3=13 T4=14 T5=15 D=16 SP=17 ;STACK POINTER IN=1 ;INPUT CHANNEL TYO=3 ;OUTPUT CHANNEL TVBFR=24000 ;TOP OF TV NDIREC==100 INCH==2 ;INPUT CHNL FOR DISK MAXSHP==3 MAXSUN==2 TORP==1 MAXOBJ==600 LOC 42 JSR TSINT ;OLD-STYLE INTERRUPT HANDLER IN THIS LOCATION. LOC 100 ST: .OPEN IN,OPNIN ;TTY INPUT, NO-WAIT MODE .VALUE .OPEN TYO,OPNOUT ;TTY OUTPUT, 3 LINE ECHO AREA .VALUE .CALL TVSCRN ;TV BUFFER MAP .VALUE .CALL INSHIP ;OPEN THE DISK AND READ IN THE SHIP PATTERNS .VALUE [ASCIZ/:NO SHIP FILES/] .IOT INCH,PNTR .CLOSE INCH, .CALL INSINE ;OPEN THE DISK AND READ IN THE SINE WAVE .VALUE [ASCIZ/:NO SINE WAVE FILE/] .IOT INCH,PNTR1 .CLOSE INCH, .RTIME TT, ;INITIALIZE THE RANDOM NUMBER MOVEM TT,RANNUM MOVE TT,TVBFR+20000 ;GET TV ALU MOVEM TT,TVALU RESTRT: MOVE TT,TVALU MOVEM TT,TVBFR+20000 ;RESTORE TV ALU TO ORIGINAL HRRZI TT,442.*18.-1 ;CLEAR THE SCREEN SETZM TVBFR(TT) SOJG TT,.-1 HRLZI TT,22000 ;TV SCREEN INTO XOR MODE XORM TT,TVBFR+20000 NEWGAM: MOVEI SP,STACK SETZM OBJLEN SKIPG N,NSHIP JRST NOSHPS RANL: SETZM SWITCH-1(N) SKIPN RANPOS JRST NORAN PUSHJ SP,RAND MOVE X,TT PUSHJ SP,RAND MOVE Y,TT PUSHJ SP,RAND MOVE XT,TT PUSHJ SP,RAND MOVE YT,TT ANDI X,77777 ANDI Y,77777 ASH XT,-34 ASH YT,-34 PUSHJ SP,BORDER PUSHJ SP,RAND ANDI TT,777 JRST RANSTR NORAN: MOVE X,IPX-1(N) MOVE Y,IPY-1(N) MOVE XT,IVX-1(N) MOVE YT,IVY-1(N) SETZ TT, RANSTR: MOVEM TT,DIRECT-1(N) MOVEM X,PX-1(N) MOVEM Y,PY-1(N) MOVEM XT,VX-1(N) MOVEM YT,VY-1(N) SOJG N,RANL NOSHPS: SKIPN A,NSUN ;PUT SUN(S) ON THE SCREEN JRST PUTS INITSN: SKIPN RANSUN JRST NORANS PUSHJ SP,RAND MOVE X,TT PUSHJ SP,RAND MOVE Y,TT ANDI X,77777 ANDI Y,77777 MOVEI XT,1000 MOVEI YT,1000 PUSHJ SP,BORDER JRST RSNSTR NORANS: MOVE X,IGRVX-1(A) MOVE Y,IGRVY-1(A) RSNSTR: MOVEM X,GRVX-1(A) MOVEM Y,GRVY-1(A) PUSHJ SP,PUTSUN SOJG A,INITSN PUTS: SKIPG N,NSHIP ;PUT SHIPS ON THE SCREEN JRST SETINT PUTLP: PUSHJ SP,PUTSHP SETOM SHPSTS-1(N) SOJG N,PUTLP SKIPG N,NSHIP JRST SETINT SKIPE TALLY-1(N) JRST REHANG SOJG N,.-2 SETINT: SKIPE TEST ;SHOULD REALTIME BE SET UP? JRST TSINT+2 HRLZI TT,710000 ;SET THE REALTIME INTERRUPT HRRI TT,TIME .SUSET [.SMASK,,INTMSK] ;INTERRUPT FOR REALTIME .REALT TT, .VALUE [ASCIZ/:.REALT FAILED TO SKIP.VP /] JRST RHJFCL REHANG: SKIPE TEST ;IN REALTIME MODE? JRST TSTSLP .DISMISS TSINT+1 .VALUE [ASCIZ/:GACK! THESE OLD TIME INTERRUPTS ARE WIERD!/] RHJFCL: JFCL .HANG INTMSK: %PIRLT TSINT: 0 ;PC, ETC. GO HERE 0 PUSHJ SP,CRASH ;CHECK FOR COLLISIONS PUSHJ SP,SMACK PUSHJ SP,HIT PUSHJ SP,DFND SOS SHOTTM SOS SHOTTM+1 PUSHJ SP,SCORE MOVE N,NSHIP LOOP: SKIPGE SHPSTS-1(N) JRST LOPOK SKIPG SHPSTS-1(N) JRST LOPEND SOS SHPSTS-1(N) JRST LOPDED LOPOK: PUSHJ SP,REPOS ;DO ANOTHER TIME INCREMENT PUSHJ SP,CLRSHP PUSHJ SP,VELPOS PUSHJ SP,PUTSHP LOPEND: SOJG N,LOOP PUSHJ SP,DISOBL SKIPE TEST ;IN REALTIME MODE? JRST TSTSLP .DISMISS TSINT+1 .VALUE [ASCIZ/:GACK! THESE OLD TIME INTERRUPTS ARE WIERD!/] TSTSLP: MOVE TT,TIME ;NOT IN REALTIME, SO JUST SLEEP ON IT .SLEEP TT, JRST TSINT+2 LOPDED: PUSHJ SP,REPOS PUSHJ SP,VELPOS MOVE TT,SHPSTS-1(N) TRNN TT,1 JRST PUTDWN JRST PUTUP PUTDWN: PUSHJ SP,CLRSHP JRST LOPEND PUTUP: PUSHJ SP,PUTSHP JRST LOPEND SCORE: SKIPG N,NSHIP JRST SCRL SCRLP: MOVE TT,SHPSTS-1(N) CAIE TT,1 JRST SCRNXT SKIPG TT,NSHIP JRST SCRNXT SKIPGE SHPSTS-1(TT) AOS TALLY-1(TT) SOJG TT,.-2 SCRNXT: SOJG N,SCRLP SCRL: SKIPG N,NSHIP JRST SCRXIT SETO TT, SCRXL: SKIPE SHPSTS-1(N) AOJG TT,SCROK SOJG N,SCRXL SCRXIT: POP SP, .IOT TYO,[15] .IOT TYO,[12] .IOT TYO,[12] SKIPG N,NSHIP JRST SCRXIT SCRPL: .IOT TYO,[40] .IOT TYO,[40] MOVE T1,TALLY-1(N) PUSHJ SP,PRNUM SOJG N,SCRPL MOVE TT,SCRTIM .SLEEP TT, MOVE TT,TVALU MOVEM TT,TVBFR+20000 ;RESTORE TV ALU TO ORIGINAL HRRZI TT,407.*18.-1 ;CLEAR THE SCREEN SETZM TVBFR(TT) SOJG TT,.-1 HRLZI TT,22000 ;TV SCREEN INTO XOR MODE XORM TT,TVBFR+20000 JRST NEWGAM SCROK: POPJ SP, DISOBL: SETZ T2, ;DISPLAY THE TORPS SKIPN OBJLEN POPJ SP, MOVE X,OBJCL(T2) CAIE X,TORP JRST NOTRP SOSL X,OBJCL+5(T2) JRST NOTRP MOVE X,OBJCL+1(T2) MOVE Y,OBJCL+2(T2) PUSHJ SP,DISPLY PUSHJ SP,DELTRP JRST DISOLP NOTRP: ADDI X,1 CAML X,TRPLIF JRST DIS1 MOVE X,OBJCL+1(T2) MOVE Y,OBJCL+2(T2) PUSHJ SP,DISPLY DIS1: MOVE X,OBJCL+1(T2) ;ADD TORP VELOCITY TO POSITION MOVE Y,OBJCL+2(T2) MOVE XT,OBJCL+3(T2) MOVE YT,OBJCL+4(T2) ADD X,XT ADD Y,YT PUSHJ SP,BORDER ;CHECK FOR WRAP OR BOUNCE MOVEM X,OBJCL+1(T2) ;MAKE THE NEW POSITION AND VELOCITY PERMANENT MOVEM Y,OBJCL+2(T2) MOVEM XT,OBJCL+3(T2) MOVEM YT,OBJCL+4(T2) PUSHJ SP,DISPLY ADDI T2,6 DISOLP: CAMGE T2,OBJLEN ;FINISHED WITH THE TORPS YET? JRST DISOBL+1 POPJ SP, DELTRP: HRLI TT,OBJCL+6(T2) ;DELETE TORP(T2) FROM THE OBJCL LIST HRRI TT,OBJCL(T2) BLT TT,MAXOBJ+OBJCL-7 MOVE TT,OBJLEN SUBI TT,6 MOVEM TT,OBJLEN POPJ SP, DISPLY: LSH X,-6 ;PUT A 2X2 POINT AT X,Y (USUALLY A TORP) LSH Y,-6 IMULI Y,18. IDIVI X,32. ADD Y,X MOVNS XT HRLZI T4,600000 LSH T4,(XT) TRZN T4,17 JRST .+4 HRLZI T5,400000 MOVEM T5,TVBFR+1(Y) MOVEM T5,TVBFR+19.(Y) MOVEM T4,TVBFR(Y) MOVEM T4,TVBFR+18.(Y) POPJ SP, MKTRP1: SETZ T1, ;GENERATE A TORPEDO AND ENTER IT ON THE OBJCL LIST SKIPLE SHOTTM POPJ SP, MOVE TT,RLDTIM MOVEM TT,SHOTTM JRST MKALL MKTRP2: HRRZI T1,1 SKIPLE SHOTTM+1 POPJ SP, MOVE TT,RLDTIM MOVEM TT,SHOTTM+1 MKALL: SKIPL SHPSTS(T1) POPJ SP, MOVE TT,OBJLEN CAIL TT,MAXOBJ POPJ SP, MOVE TT,DIRECT(T1) PUSHJ SP,DXDY MOVNS Y MOVE XT,X MOVE YT,Y IMUL XT,TRPVEL IMUL YT,TRPVEL IMUL X,XPLODR IMUL Y,XPLODR ASH X,-7 ASH Y,-7 ASH XT,-3 ASH YT,-3 SUB X,XT SUB Y,YT ADD X,PX(T1) ADD Y,PY(T1) ADD XT,VX(T1) ADD YT,VY(T1) MOVEI T5,TORP MOVE T2,OBJLEN MOVEM T5,OBJCL(T2) MOVEM X,OBJCL+1(T2) MOVEM Y,OBJCL+2(T2) MOVEM XT,OBJCL+3(T2) MOVEM YT,OBJCL+4(T2) MOVE YT,TRPLIF MOVEM YT,OBJCL+5(T2) ADDI T2,6 MOVEM T2,OBJLEN POPJ SP, CRASH: SKIPG N,NSHIP ;CRASH=SHIP-TO-SUN COLLISION POPJ SP, CRSHP: SKIPL SHPSTS-1(N) JRST NOSUN SKIPG A,NSUN POPJ SP, CRSHPL: MOVE X,PX-1(N) SUB X,GRVX-1(A) MOVMS X CAML X,SUNRAD JRST CRNXT MOVE Y,PY-1(N) SUB Y,GRVY-1(A) MOVMS Y CAML Y,SUNRAD JRST CRNXT MOVE XT,XPLDTM ADDM XT,SHPSTS-1(N) SKIPA CRNXT: SOJG A,CRSHPL NOSUN: SOJG N,CRSHP POPJ SP, SMACK: SKIPG N,NSHIP ;SMACK=SHIP-TO-SHIP COLLISION POPJ SP, SMK: SKIPN SHPSTS-1(N) ;IF THE SHIP FLIES OR DIES, ITS VALID JRST SMKNXT MOVE A,N SOJLE A,SMACK+1 ;IF THERE AREN'T TWO SHIPS, THEY CAN'T HIT SMKRPT: SKIPN SHPSTS-1(A) JRST SMKLP MOVE XT,PX-1(N) ;SEE IF THEY REALLY HIT SUB XT,PX-1(A) MOVMS XT CAML XT,XPLODR JRST SMKLP MOVE YT,PY-1(N) SUB YT,PY-1(A) MOVMS YT CAML YT,XPLODR JRST SMKLP MOVE XT,VX-1(N) ;AVERAGE THE TWO VELOCITIES MOVE X,VX-1(A) ASH XT,-1 ASH X,-1 SKIPGE SHPSTS-1(A) ADDM XT,VX-1(A) SKIPGE SHPSTS-1(N) ADDM X,VX-1(N) MOVE YT,VY-1(N) MOVE Y,VY-1(A) ASH YT,-1 ASH Y,-1 SKIPGE SHPSTS-1(A) ADDM YT,VY-1(A) SKIPGE SHPSTS-1(N) ADDM Y,VY-1(N) SKIPGE SHPSTS-1(N) ;MAKE THEM DISAPPEAR PUSHJ SP,CLRSHP EXCH A,N SKIPGE SHPSTS-1(N) PUSHJ SP,CLRSHP EXCH A,N MOVE XT,XPLDTM ;THEY HIT, SO MAKE THEM EXPLODE SKIPGE SHPSTS-1(N) ;BUT ONLY IF THEY AREN'T ALREADY MOVEM XT,SHPSTS-1(N) SKIPGE SHPSTS-1(A) MOVEM XT,SHPSTS-1(A) SMKLP: SOJG A,SMKRPT SMKNXT: SOJG N,SMK POPJ SP, HIT: SETZ T2, ;HIT=TORP-TO-SHIP COLLISION CAML T2,OBJLEN POPJ SP, SKIPG N,NSHIP POPJ SP, HITSHL: SKIPN SHPSTS-1(N) JRST HITNXT MOVE X,PX-1(N) SUB X,OBJCL+1(T2) MOVMS X CAML X,XPLODR JRST HITNXT MOVE Y,PY-1(N) SUB Y,OBJCL+2(T2) MOVMS Y CAML Y,XPLODR JRST HITNXT MOVE XT,XPLDTM ADDM XT,SHPSTS-1(N) MOVE X,OBJCL+3(T2) ASH X,-2 ADD X,VX-1(N) MOVE Y,OBJCL+4(T2) ASH Y,-2 ADD Y,VY-1(N) MOVEM X,VX-1(N) MOVEM Y,VY-1(N) MOVE X,OBJCL+1(T2) MOVE Y,OBJCL+2(T2) PUSHJ SP,DISPLY PUSHJ SP,DELTRP SKIPA HITNXT: SOJG N,HITSHL ADDI T2,6 JRST HIT+1 DFND: SETZ T1, ;DFND=TORP-TO-TORP COLLISION MOVE T2,T1 DFNDL: ADDI T2,6 CAML T2,OBJLEN JRST DFNDXT MOVE X,OBJCL+1(T1) SUB X,OBJCL+1(T2) MOVMS X CAML X,XPLODR JRST DFNDL MOVE Y,OBJCL+2(T1) SUB Y,OBJCL+2(T2) MOVMS Y CAML Y,XPLODR JRST DFNDL MOVE X,OBJCL+3(T1) ADD X,OBJCL+3(T2) ASH X,-1 MOVEM X,OBJCL+3(T1) MOVE Y,OBJCL+4(T1) ADD Y,OBJCL+4(T2) ASH Y,-1 MOVEM Y,OBJCL+4(T1) SETZM OBJCL+5(T1) MOVE X,OBJCL+1(T2) MOVE Y,OBJCL+2(T2) PUSHJ SP,DISPLY PUSHJ SP,DELTRP JRST DFNDL DFNDXT: ADDI T1,6 CAML T1,OBJLEN POPJ SP, JRST DFNDL-1 REPOS: SKIPN A,NSUN ;CALCULATE ACCELERATION ON SHIP#N POPJ SP, ;NO SUNS TO CHANGE VELOCITY RPSLP: MOVE X,PX-1(N) MOVE Y,PY-1(N) SUB X,GRVX-1(A) SUB Y,GRVY-1(A) MOVE XT,X MOVE YT,Y IMUL XT,XT IMUL YT,YT MOVE T1,XT ADD T1,YT MOVE D,T1 PUSHJ SP,ISQRT MOVE TT,GRAV IMUL TT,GRVK-1(A) IDIV T1,TT HRLZ X,X HRLZ Y,Y IDIV X,T1 IDIV Y,T1 LSH D,-2 IDIV X,D IDIV Y,D SUB X,VX-1(N) SUB Y,VY-1(N) MOVNM X,VX-1(N) MOVNM Y,VY-1(N) MOVMS X MOVMS Y CAML X,MAXVEL SETZM VX-1(N) CAML Y,MAXVEL SETZM VY-1(N) SOJG A,RPSLP POPJ SP, VELPOS: .IOT IN,TT ;INPUT ANY COMMANDS CAIN TT,": PUSHJ SP,MKTRP1 CAIN TT," PUSHJ SP,MKTRP2 CAIN TT,"[ MOVEM TT,SWITCH CAIN TT,"] MOVEM TT,SWITCH CAIN TT,"\ MOVEM TT,SWITCH CAIN TT,"/ MOVEM TT,SWITCH CAIN TT,"Z MOVEM TT,SWITCH+1 CAIN TT,"X MOVEM TT,SWITCH+1 CAIN TT,"C MOVEM TT,SWITCH+1 CAIN TT,"V MOVEM TT,SWITCH+1 MOVE TT,SWITCH-1(N) MOVE T1,DIRECT-1(N) CAIE N,1 ;PERFORM THE LAST COMMAND OF SHIP #N JRST VLPS2 CAIN TT,"[ ADD T1,SHPSPN CAIN TT,"] SUB T1,SHPSPN CAIN TT,"\ PUSHJ SP,SPEED JRST VLPALL VLPS2: CAIN TT,"Z ADD T1,SHPSPN CAIN TT,"X SUB T1,SHPSPN CAIN TT,"C PUSHJ SP,SPEED VLPALL: ANDI T1,777 ;DIRECTION IS A 9 BIT NUMBER MOVEM T1,DIRECT-1(N) MOVE X,PX-1(N) ;REPOSITION AND CHECK FOR WRAP OR BOUNCE MOVE Y,PY-1(N) ADD X,VX-1(N) ADD Y,VY-1(N) MOVE XT,VX-1(N) MOVE YT,VY-1(N) PUSHJ SP,BORDER STASH: MOVEM X,PX-1(N) ;MAKE IT PERMANENT MOVEM Y,PY-1(N) MOVEM XT,VX-1(N) MOVEM YT,VY-1(N) POPJ SP, BORDER: CHKXL: CAML X,LEFTF ;CHECK FOR WRAP OR BOUNCE JRST CHKXR SKIPE BOUNCE JRST .+3 ADD X,WIDE JRST CHKXL MOVMS XT JUMPG XT,.+2 ADDI XT,1 ADD X,XT CHKXLP: ADD X,XT CAMGE X,LEFTF JRST CHKXLP CHKXR: CAMG X,RITEF JRST CHKYT SKIPE BOUNCE JRST .+3 SUB X,WIDE JRST CHKXR MOVMS XT JUMPG XT,.+2 ADDI XT,1 MOVNS XT ADD X,XT CHKXRP: ADD X,XT CAMLE X,RITEF JRST CHKXRP CHKYT: CAML Y,TOPF JRST CHKYB SKIPE BOUNCE JRST .+3 ADD Y,HIGH JRST CHKYT MOVMS YT JUMPG YT,.+2 ADDI YT,1 ADD Y,YT CHKYTP: ADD Y,YT CAMGE Y,TOPF JRST CHKYTP CHKYB: CAMG Y,BTMF POPJ SP, SKIPE BOUNCE JRST .+3 SUB Y,HIGH JRST CHKYB MOVMS YT JUMPG YT,.+2 ADDI YT,1 MOVNS YT ADD Y,YT CHKYBP: ADD Y,YT CAMLE Y,BTMF JRST CHKYBP POPJ SP, SPEED: MOVE TT,DIRECT-1(N) ;CALCULATE SHIP'S ACCELERATION DUE TO ENGINES PUSHJ SP,DXDY IMUL X,SHPACC IMUL Y,SHPACC LSH X,-12 LSH Y,-12 MOVNS Y HRRES X HRRES Y ADDM X,VX-1(N) ADDM Y,VY-1(N) POPJ SP, ISQRT: HRRZI T4,30 ;INTEGER SQUARE-ROOT SUBR., T1 TO T1 MOVE T2,T1 MOVE T3,T1 MOVE T1,10000 ISQRTL: IDIV T2,T1 ADD T1,T2 LSH T1,-1 MOVE T2,T3 SOJG T4,ISQRTL POPJ SP, DXDY: MOVE T5,TT ;SINE AND COSINE LOOKUP ANDI T5,777 ;TT CONTAINS ANGLE, 9 BIT = FULL CIRCLE MOVE Y,SIN(T5) ADDI T5,200 ANDI T5,777 MOVE X,SIN(T5) POPJ SP, RANMSK: 401020003045 RANNUM: 0 RAND: MOVE TT,RANNUM ;GENERATE RANDOM #,USING FEEDBACK S-R AND TT,RANMSK SETZ T1, JUMPGE TT,.+2 SETCA T1, LSH TT,1 JUMPN TT,.-3 ANDI T1,1 MOVE TT,RANNUM LSH TT,1 IOR TT,T1 MOVEM TT,RANNUM POPJ SP, PRNUM: MOVEI T3,4 PRLP: IDIVI T1,10. PUSH SP,T2 SOJG T3,PRLP MOVEI T3,4 PRL: POP SP,T1 .IOT TYO,[40] JUMPN T1,PRN SOJG T3,PRL PRN: ADDI T1,60 .IOT TYO,T1 POP SP,T1 SOJG T3,PRN JRST (T1) PUTSUN: LSH X,-6 ;DISPLAY A SUN AT X,Y LSH Y,-6 IMULI Y,18. ADDI X,16. IDIVI X,32. ADD Y,X MOVNS XT MOVEI T1,31. ADDI Y,16.*18. PUTLOP: MOVE T3,SUN(T1) SETZ T4, LSHC T3,(XT) LSH T3,4 MOVEM T3,TVBFR-1(Y) MOVEM T4,TVBFR(Y) SUBI Y,18. SOJGE T1,PUTLOP POPJ SP, CLRSHP: MOVE T3,N ;DISPLAY SHIP IN CLRS BUFFER (ERASES TOO) SUBI T3,1 IMULI T3,70. MOVE T1,CLRS(T3) SUBI T1,1 MOVEI T4,32. CLRLP: SKIPE T2,CLRS+1(T3) MOVEM T2,TVBFR(T1) SKIPE T2,CLRS+2(T3) MOVEM T2,TVBFR+1(T1) ADDI T3,2 ADDI T1,18. SOJG T4,CLRLP POPJ SP, PUTSHP: MOVE T3,N ;REGENERATE A CLRS FIELD SUBI T3,1 MOVE T4,T3 IMULI T3,70. IMULI T4,NDIREC*10 ADD T4,DIRECT-1(N) LSH T4,-3 IMULI T4,32. SETZM CLRS+1(T3) HRRZI TT,CLRS+2(T3) HRLI TT,CLRS+1(T3) BLT TT,CLRS+64.(T3) MOVE T1,PX-1(N) LSH T1,-6 ADDI T1,16. IDIVI T1,32. MOVNS T2 MOVE TT,PY-1(N) LSH TT,-6 SUBI TT,16. IMULI TT,18. ADD T1,TT MOVEM T1,CLRS(T3) MOVEI TT,32. PUTSLP: SETZ XT, MOVE X,SHPBFR(T4) LSHC X,-4(T2) LSH X,4 MOVEM X,CLRS+1(T3) MOVEM XT,CLRS+2(T3) ADDI T3,2 ADDI T4,1 SOJG TT,PUTSLP JRST CLRSHP TIME: 4 ;REPEAT FRAME TIME (60THS), OR DELAY TIME 2 ;WHEN REALTIME IS SUPPRESSED 0 0 TEST: -1 ;TEST-MODE SWITCH, SUPPRESSES REALTIME OPNIN: 1044,,646471 ;TTY INPUT NO-WAIT ECHO AREA OPNOUT: 15,,646471 ;TTY OUTPUT, 3 LINE ECHO AREA PNTR: -32.*MAXSHP*NDIREC,,SHPBFR ;DISK INPUT OF SHIPS POINTER INSHIP: SETZ ;DISK OPEN INFO FOR SHIPS PATERNS SIXBIT /OPEN/ [6,,INCH] [SIXBIT /DSK/] [SIXBIT /SWR/] [SIXBIT /SHIPS/] SETZ [SIXBIT /GJD/] PNTR1: -512.,,SIN INSINE: SETZ ;DISK OPEN INFO FOR SINE WAVE SIXBIT /OPEN/ [6,,INCH] [SIXBIT /DSK/] [SIXBIT /SINE/] [SIXBIT /BINARY/] SETZ [SIXBIT /GJD/] TVALU: 0 ;TV ALU BEFORE CHANGING IT TVSCRN: SETZ ;TV MAPPING INFO SIXBIT /CORBLK/ 1000,,600000 1000,,-1 TMP 1000,,-2 SETZ TMP2 TMP: -11,,TVBFR/2000 ;8.K TV MEM, START AT PAGE 12 IN PDP10 TMP2: 0 IPX: 40000 ;SHIP STARTING POSITIONS 50000 50000 IPY: 30000 40000 30000 IVX: 300 ;SHIP STARTING VELOCITIES 0 200 IVY: 0 250 100 PX: BLOCK MAXSHP ;SHIP DATA DURING A GAME PY: BLOCK MAXSHP VX: BLOCK MAXSHP VY: BLOCK MAXSHP DIRECT: BLOCK MAXSHP IGRVX: 40000 ;SUN STARTING LOCATIONS 20000 IGRVY: 40000 40000 GRVX: BLOCK MAXSUN ;SUN GAME LOCATIONS GRVY: BLOCK MAXSUN GRVK: 2 ;SUN RELATIVE MASSES 1 GRAV: 100 ;GRAVITY CONSTANT LEFTF: 4000 ;FRINGE POSITIONS, FOR WRAP & BOUNCE RITEF: 72000 TOPF: 4000 BTMF: 60000 WIDE: 66000 ;THE UNIVERSE'S DIMENSIONS HIGH: 54000 BOUNCE: 0 ;-1=BOUNCE, 0=WRAP RANPOS: -1 ;RANDOM SHIP POSITIONING RANSUN: -1 ;RANDOM SUN POSITIONING NSUN: 1 ;NUMBER OF SUNS IN THIS GAME NSHIP: 2 ;NUMBER OF SHIPS STARTING THIS GAME SHPACC: 40 ;SHIP ACCELERATION WHEN ENGINES ARE ON SHPSPN: 20 ;RATE OF SPIN WHEN TURNING XPLODR: 1400 ;PROXIMITY FUSE FOR TORPS XPLDTM: 30 ;EXPLOSION TIME SUNRAD: 1400 ;PROXIMITY RADIUS FOR SUNS TRPVEL: 20 ;TORPEDO VELOCITY TRPLIF: 50 ;TORPEDO LIFETIME BEFORE AUTO-DETINATION RLDTIM: 4 ;TORPEDO RELOAD TIME IN FRAMES SCRTIM: 20 ;SCORE DISPLAY TIME AT END OF GAME IN 30ths MAXVEL: 2000 ;MAXIMUM VELOCITY OF THE SHIPS SWITCH: BLOCK MAXSHP ;SHIP COMMAND STORAGE SHPSTS: BLOCK MAXSHP ;0=SHIP NOT ACTIVE, >0=SHIP EXPLODING, -1=SHIP ALIVE SHOTTM: BLOCK MAXSHP ;TORPEDO RELOAD TIME TALLY: BLOCK MAXSHP CLRS: BLOCK MAXSHP*2*40. ;STORAGE BUFFER FOR EACH SHIP ON THE TV RADIX 2 SUN: 000000000000000000000000000000000000 ;A TYPICAL SUN 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000001000010000000000000000 000000000000001000100000000000000000 000000000000100101000111000000000000 000000000000010110111000000000000000 000000000000001111000000000000000000 000000000000001110110000000000000000 000000000000111010001000000000000000 000000000011010001000000000000000000 000000000000100000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 RADIX 1000 SIN: BLOCK 512. ;SINEWAVE TABLE, 512. ENTRIES, TO +/-255. STACK: BLOCK 20 ;STACK AREA, OBVIOUSLY OBJLEN: 0 ;OBJCL POINTER OBJCL: BLOCK MAXOBJ ;STORAGE AREA FOR TORPEDOS SHPBFR: BLOCK 32.*MAXSHP*NDIREC EOM1: SIXBIT/EOM1/ ;A KLUDGE ;THEN COMES THE TV AREA STARTING AT PAGE 12 END ST