mirror of
https://github.com/PDP-10/its.git
synced 2026-02-13 11:34:04 +00:00
Spacewar! game.
Build for both standalone and timesharing.
This commit is contained in:
committed by
Eric Swenson
parent
23300c98fa
commit
4d32246eea
95
src/spcwar/340def.4
Normal file
95
src/spcwar/340def.4
Normal file
@@ -0,0 +1,95 @@
|
||||
SUBTTL 340 Display Definitions
|
||||
|
||||
;Command Operation Codes
|
||||
|
||||
;----- Valid in Any Mode
|
||||
GTOPRM==BIT2.9 ;this command is guarenteed to place the display
|
||||
;into parameter mode regardless of the current mode
|
||||
|
||||
;----- Valid in Parameter and Point Commands
|
||||
PARM== 0 ;next command is parameter mode
|
||||
POINT== BIT2.5 ; " " " point "
|
||||
VECT== BIT2.7 ; " " " vector "
|
||||
VECTC== BIT2.7+BIT2.5 ; " " " vector-continue mode
|
||||
CHAR== BIT2.6+BIT2.5 ; " " " character mode
|
||||
INCR== BIT2.7+BIT2.6 ; " " " increment "
|
||||
|
||||
;----- Valid in Vector, Vector-Continue, and Increment Modes
|
||||
ESCAPE==BIT2.9 ;return display to parameter mode
|
||||
|
||||
|
||||
;Specific Bits/Values for Different Command Types
|
||||
|
||||
;----- Parameter Mode
|
||||
DISHLT==<GTOPRM,,BIT2.2+BIT2.1> ;stop this display list
|
||||
|
||||
;----- Point Mode
|
||||
DISPNT==BIT2.2 ;intensify the current point
|
||||
|
||||
;----- Vector and Vector-Continue Modes
|
||||
DISVCT==BIT2.8 ;make this vector visible
|
||||
NEGX== BIT1.8 ;if on, X shift is negative
|
||||
NEGY== BIT2.7 ;if on, Y shift is negative
|
||||
|
||||
;----- Character Mode (Any Case)
|
||||
CHRESC==37 ;escape from character mode
|
||||
CHRUC== 35 ;shift to upper-case
|
||||
CHRLC== 36 ; " " lower-case
|
||||
CHRLF== 33 ;line-feed
|
||||
CHRCR== 34 ;carriage-return
|
||||
CHRSP== 40 ;space
|
||||
|
||||
;Macros to Generate Display Commands
|
||||
|
||||
;SCALE(VALUE)
|
||||
; Function:
|
||||
; Generates a parameter mode command to set the display scaling factor.
|
||||
; Inputs:
|
||||
; VALUE: The scaling factor as a value from 0 to 3.
|
||||
|
||||
DEFINE SCALE (VALUE
|
||||
<BIT1.7+<VALUE&3>_4>TERMIN
|
||||
|
||||
|
||||
;INTSTY(VALUE)
|
||||
; Function:
|
||||
; Generates a parameter mode display command to set the display intesity.
|
||||
; Inputs:
|
||||
; VALUE: The intensity as a value from 0 through 7.
|
||||
|
||||
DEFINE INTSTY (VALUE
|
||||
<BIT1.4+<VALUE&7>>TERMIN
|
||||
|
||||
|
||||
;SETY(VALUE)
|
||||
; Function:
|
||||
; Generates a point mode command to set the Y ordinate.
|
||||
; Inputs:
|
||||
; VALUE: The Y ordinate as a value from 0 through 1777(8).
|
||||
|
||||
DEFINE SETY (VALUE
|
||||
<BIT2.8+<VALUE&1777'>>TERMIN
|
||||
|
||||
|
||||
;SETX(VALUE)
|
||||
; Function:
|
||||
; Generates a point mode command to set the X ordinate.
|
||||
; Inputs:
|
||||
; VALUE: The X ordinate as a value from 0 through 1777(8).
|
||||
|
||||
DEFINE SETX (VALUE
|
||||
<VALUE&1777'>TERMIN
|
||||
|
||||
|
||||
;VECTOR(XVALUE,YVALUE)
|
||||
; Function:
|
||||
; Generates a vector or vector-continue command to create a vector.
|
||||
; Inputs:
|
||||
; XVALUE: The magnitude (positive) of the X shift. It is in the range 0
|
||||
; through 177(8).
|
||||
; YVALUE: The magnitude of the Y shift. It is treated identically to XVALUE.
|
||||
|
||||
DEFINE VECTOR (XVALUE,YVALUE
|
||||
<<XVALUE&177'>+<<YVALUE&177'>_8.>>TERMIN
|
||||
|
||||
|
||||
50
src/spcwar/acsdef.1
Normal file
50
src/spcwar/acsdef.1
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
SUBTTL Accumuator Definitions
|
||||
|
||||
FLGS=0 ;flag word for bit testing
|
||||
|
||||
P=1 ;PDL pointer
|
||||
MBP=2 ;PDL pointer for display buffer being filled
|
||||
|
||||
IDX1=3 ;index of objects currently being processed
|
||||
IDX2=4
|
||||
|
||||
A=5 ;temporaries -- other names defined below
|
||||
B=6
|
||||
C=7
|
||||
D=10
|
||||
T1=11
|
||||
T2=12
|
||||
T3=13
|
||||
T4=14
|
||||
T5=15
|
||||
|
||||
DCP=16 ;display chain pointer (wired)
|
||||
DLP=17 ;BLKO pointer of list being output (wired)
|
||||
|
||||
|
||||
; Other names used for the AC's
|
||||
|
||||
TYP1==C ;types of objects in IDX1 and IDX2
|
||||
TYP2==D
|
||||
|
||||
X==T1 ;X/Y coordinates built by DISPNT macro
|
||||
Y==T2
|
||||
PTCMND==T4 ;point command placed here by DISPNT
|
||||
|
||||
SDLP==T3 ;PDL pointer for building sun display
|
||||
|
||||
.XCREF FLGS,P,MBP,IDX1,IDX2,A,B,C,D,T1,T2,T3,T4,T5,DCP,DLP
|
||||
.XREF X,Y,PTCMND,SDLP
|
||||
|
||||
|
||||
; Accumulator names used in older code (CREF'ed to find and eliminate)
|
||||
|
||||
F==FLGS
|
||||
T==T1
|
||||
TT==T2
|
||||
MP1==IDX1
|
||||
MP2==IDX2
|
||||
R==T3
|
||||
XFLAG==T4
|
||||
S==T5
|
||||
89
src/spcwar/arith.1
Normal file
89
src/spcwar/arith.1
Normal file
@@ -0,0 +1,89 @@
|
||||
|
||||
SUBTTL Arithmentic Mode Conversion Macros
|
||||
|
||||
;SPCWAR uses three modes of arithmetic - integers (fixed), floating-point, and
|
||||
;fractionals.
|
||||
;
|
||||
;Integer and floating-point numbers are the standard hardware representations.
|
||||
;
|
||||
;A fractional number is represented as an integer with a conceptual binary
|
||||
;point (ala FIXED BINARY in PL/1). The binary point is to the left of bit
|
||||
;2.9 of the value. That is, the left half of the word is the integer part,
|
||||
;and the right half is the fraction.
|
||||
|
||||
|
||||
;FLOAT AC
|
||||
; Function:
|
||||
; Converts an integer to a floating point value. The integer must be less than
|
||||
; 27. bits.
|
||||
; Inputs:
|
||||
; AC: The accumulator containing the number. The result will be in placed here.
|
||||
|
||||
DEFINE FLOAT AC
|
||||
FSC AC,233
|
||||
IFDEF $PDP6, FADR AC,[0.0] ;PDP-6 FSC does not normalize.
|
||||
TERMIN
|
||||
|
||||
|
||||
;FIX AC
|
||||
; Function:
|
||||
; Convert a floating point number (positive or negative) to an integer.
|
||||
; Inputs:
|
||||
; AC: The accumulator containing the floating value.
|
||||
; Outputs:
|
||||
; AC+1: The result is placed in this accumulator. The contents of AC are lost.
|
||||
|
||||
DEFINE FIX AC
|
||||
MULI AC,400
|
||||
TSC AC,AC
|
||||
ASH AC+1,-200-35.(AC)
|
||||
TERMIN
|
||||
|
||||
|
||||
;FIXP AC
|
||||
; Function:
|
||||
; This macro is identical to FIX. The only difference is that the value too convert
|
||||
; must be positive.
|
||||
|
||||
DEFINE FIXP AC
|
||||
MULI AC,400
|
||||
ASH AC+1,-200-35.(AC)
|
||||
TERMIN
|
||||
|
||||
|
||||
;FRACT AC
|
||||
; Function:
|
||||
; Convert a floating-point number to a fractional value. The input may have any sign.
|
||||
; The calling sequence and results are identical to FIX above.
|
||||
|
||||
DEFINE FRACT AC
|
||||
MULI AC,400
|
||||
TSC AC,AC
|
||||
ASH AC+1,-200-17.(AC)
|
||||
TERMIN
|
||||
|
||||
|
||||
;FRACTP AC
|
||||
; Function:
|
||||
; This macro is identical to FRACT above, but the input must be positive.
|
||||
|
||||
DEFINE FRACTP AC
|
||||
MULI AC,400
|
||||
ASH AC+1,-200,-17.(AC)
|
||||
TERMIN
|
||||
|
||||
|
||||
;FRCSCL AC,SCALE
|
||||
; Function:
|
||||
; Convert a floating-point number to a fractional value with an arbitrary binary point.
|
||||
; Inputs:
|
||||
; AC: See FIX above.
|
||||
; SCALE: The result will have SCALE bits of fraction in its representation.
|
||||
; Outputs:
|
||||
; See FIX above.
|
||||
|
||||
DEFINE FRCSCL AC,SCALE
|
||||
MULI AC,400
|
||||
TSC AC,AC
|
||||
ASH AC+1,-200-35.+SCALE(AC)
|
||||
TERMIN
|
||||
101
src/spcwar/frgmts.10
Normal file
101
src/spcwar/frgmts.10
Normal file
@@ -0,0 +1,101 @@
|
||||
SUBTTL Ship Fragments Defintion
|
||||
|
||||
;Macros
|
||||
|
||||
;ICBYTE VALUE
|
||||
; Function:
|
||||
; Internal macro used to generate a fragment display list.
|
||||
|
||||
DEFINE ICBYTE VALUE
|
||||
%%BYTS==%%BYTS+1
|
||||
%%WORD==%%WORD+<VALUE&17'>_<16.-4*%%BYTS>
|
||||
IFE %%BYTS-4,{
|
||||
%%WORD+%%DISP
|
||||
%%WORD==0 ? %%BYTS==0
|
||||
}
|
||||
TERMIN
|
||||
|
||||
|
||||
;FRAGMENT [MOVES]
|
||||
; Function:
|
||||
; Generate the display list for a fragment. The form of the frgament is determined
|
||||
; by the list MOVES. A display-list pointer for the list is left in the FRGMTS
|
||||
; array. The first worf of the list is a parameter mode command (RH) to set the
|
||||
; intensity and scale; the second word is a command to set the location of the
|
||||
; fragment (Y in LH, X in RH).
|
||||
; Inputs:
|
||||
; MOVES: Controls the appearence of this fragment. It is composed of a sequence
|
||||
; of symbols which are interpreted as follows:
|
||||
; ON: Make points visible
|
||||
; OFF: Make points invisible
|
||||
; U: Move up one point
|
||||
; UR: Move up and to the right one point
|
||||
; R: Move right one point
|
||||
; DR: Move down and right one point
|
||||
; D: Move down one point
|
||||
; DL: Move down and left one point
|
||||
; L: Move left one point
|
||||
; UL: Move up and left one point
|
||||
|
||||
DEFINE FRAGMENT MOVES
|
||||
IF1, $FRGMTS==$FRGMTS+1
|
||||
|
||||
%FRLOC==.
|
||||
%%DISP==0
|
||||
%%WORD==0
|
||||
%%BYTS==0
|
||||
|
||||
.BYTE 18.
|
||||
GTOPRM
|
||||
SCALE(0)+INTSTY(0)+POINT
|
||||
SETY(0)+POINT
|
||||
SETX(0)+INCR
|
||||
|
||||
IRPS MOVE,,[MOVES]
|
||||
IFSE [MOVE][ON] %%DISP==200000
|
||||
IFSE [MOVE][OFF] %%DISP==0
|
||||
IFSE [MOVE][U] ICBYTE 02'
|
||||
IFSE [MOVE][UR] ICBYTE 12'
|
||||
IFSE [MOVE][R] ICBYTE 10'
|
||||
IFSE [MOVE][DR] ICBYTE 13'
|
||||
IFSE [MOVE][D] ICBYTE 03'
|
||||
IFSE [MOVE][DL] ICBYTE 17'
|
||||
IFSE [MOVE][L] ICBYTE 14'
|
||||
IFSE [MOVE][UL] ICBYTE 16'
|
||||
TERMIN
|
||||
|
||||
IFN %%BYTS, %%WORD
|
||||
ESCAPE
|
||||
|
||||
.WALGN
|
||||
.BYTE
|
||||
|
||||
%FRLTH==.-%FRLOC
|
||||
%%.==.
|
||||
|
||||
IF2,{
|
||||
LOC FRGMTS+%FRGMTS
|
||||
-%FRLTH,,%FRLOC-1
|
||||
|
||||
LOC %%.
|
||||
%FRGMTS==%FRGMTS+1
|
||||
}
|
||||
TERMIN
|
||||
|
||||
|
||||
IF1,{
|
||||
$FRGMTS==0 ;have yet to define any fragments
|
||||
%FRGMTS==0
|
||||
}
|
||||
|
||||
;Definition of The Fragments
|
||||
|
||||
FRAGMENT [U,U,U,U,ON DR,DR,DR,DR
|
||||
DL,DL,DL,DL UL,UL,UL,UL
|
||||
UR,UR,UR,UR]
|
||||
|
||||
|
||||
;Fragment Defintions Tables
|
||||
|
||||
FRGMTS: BLOCK $FRGMTS ;contains display pointers for fragments
|
||||
|
||||
4013
src/spcwar/newwar.164
Normal file
4013
src/spcwar/newwar.164
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/spcwar/setmac.12
Normal file
BIN
src/spcwar/setmac.12
Normal file
Binary file not shown.
3991
src/spcwar/spcwar.163
Normal file
3991
src/spcwar/spcwar.163
Normal file
File diff suppressed because it is too large
Load Diff
3996
src/spcwar/spcwar.164
Normal file
3996
src/spcwar/spcwar.164
Normal file
File diff suppressed because it is too large
Load Diff
897
src/spcwar/tvwar.20
Normal file
897
src/spcwar/tvwar.20
Normal file
@@ -0,0 +1,897 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user