mirror of
https://github.com/PDP-10/its.git
synced 2026-02-08 01:11:18 +00:00
897 lines
16 KiB
Plaintext
897 lines
16 KiB
Plaintext
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
|
||
|