mirror of
https://github.com/PDP-10/its.git
synced 2026-03-15 14:37:16 +00:00
1685 lines
24 KiB
Plaintext
Executable File
1685 lines
24 KiB
Plaintext
Executable File
.TITLE SPACE WAR BY RCW & MAB
|
||
.ENABL ABS
|
||
DL11IV=300
|
||
DL11OV=304
|
||
DL11IS=175610
|
||
DL11IB=175612
|
||
DL11OS=175614
|
||
DL11OB=175616
|
||
KBIV=60
|
||
KBIS=177560
|
||
KBIB=177562
|
||
STACK=37776
|
||
.MACRO FIX REG
|
||
ASR REG
|
||
ASR REG
|
||
ASR REG
|
||
ASR REG
|
||
ASR REG
|
||
ASR REG
|
||
BIC #176000,REG
|
||
.ENDM
|
||
.PAGE
|
||
;SYSTEM DESCRIPTION PARAMETERS
|
||
SUNX=1000 ;SUN X POSS
|
||
SUNY=1000 ;SUN Y POSS
|
||
LS=5 ;SCALE OF LARG EXPLOSION
|
||
SS=3 ;SCALE OF SMALL EXPLOSION
|
||
SHIPX=-500 ;SHIP POSS REL TO SUN (INITIAL)
|
||
SHIPY=0
|
||
SHPS=6 ;SCALE OF SHIP DRAWING
|
||
GX=40 ;POSSITION OF GRAPHS IN CORNERS
|
||
SUNR=36 ;RADIUS OF SUN
|
||
SHLDR=3*<SHPS+SS>;RADIUS OD SHEILD
|
||
DAMR=2*SHPS ;DAMAGE RADIUS
|
||
KILLR=SHPS ;DESTROY RADIUS
|
||
BRATE=^D9600 ;RATE OF INTERFACE USED BY TIMER
|
||
CRATE=^D20 ;NUMBER OF CALCULATIONS PER SECOND
|
||
FRATE=INT7/20 ;FADE RATE
|
||
INT7=1600 ;SHOWS LOCATION OF INTESITY BITS
|
||
INTMSK=174177 ;COMPLIMENT
|
||
LAC=10 ;BASIC LINEAR ACCELERATION
|
||
AAC=20 ;ANGULAR
|
||
MTIME=200 ;LIFETIME OF A MISSLE
|
||
MAXAV=4*100 ;MAX SHIP ANGULAR VELOCITY
|
||
MINAV=AAC*14 ;LOWER THRESHHOLD FOR ANGULAR VELOCITY
|
||
;THIS NEXT GROUP CONTROLS USE OF RECOURCES.
|
||
E.TRN=0
|
||
E.SHL=10
|
||
E.SHLH=1000
|
||
E.ACC=10
|
||
P.SHLU=77*400/2
|
||
P.TRN=77*400/<CRATE*30>
|
||
P.SHLH=77*400/3
|
||
PTSHL=77*400/4
|
||
M.MISF=77*400/30
|
||
.PAGE
|
||
;THIS REINITIALIZES THE SYSTEM.
|
||
.=760
|
||
BEGIN: MOV #17,MIN
|
||
CLR SEC
|
||
JMP START0
|
||
.=1000
|
||
|
||
JMP RESTRT
|
||
|
||
START0: TST 177570
|
||
BNE START
|
||
CLR CT1
|
||
MOV #SCOPE3,SCOPE2+2
|
||
|
||
START:
|
||
MOV #340,PSW
|
||
MOV #STACK,SP
|
||
CLR SECCTR
|
||
MOV #STARS1,STARPT
|
||
MOV #DIRTBL,DIRPTR
|
||
CLR DIWFLG
|
||
CLR ENTERD
|
||
CLR WINFLG
|
||
CLR CT2
|
||
CLR KLINGD
|
||
CLR WINCT
|
||
CLR DDD
|
||
;FIX SHIPS
|
||
MOV #SHIP1+SDRAW-2,SHIP1+SDEST-2
|
||
BIS #INT7,SHIP1+SHEXPL
|
||
MOV #SHIP1+XPOSS,R1
|
||
ADD #^D317,RANDOM
|
||
MOV RANDOM,R2
|
||
BIC #176001,R2
|
||
MOV (R2)+,(R1)+
|
||
SWAB -2(R1)
|
||
MOV (R2)+,(R1)+
|
||
SWAB -2(R1)
|
||
MOV (R2)+,(R1)+
|
||
SWAB -2(R1)
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
MOV #INT7,(R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
MOV #77*400,(R1)+
|
||
MOV #77*400,(R1)+
|
||
MOV #77*400,(R1)+
|
||
CLR (R1)+
|
||
;NOW SHIP2
|
||
MOV #SHIP2+SDRAW-2,SHIP2+SDEST-2
|
||
BIS #INT7,SHIP2+SHEXPL
|
||
MOV #SHIP2+XPOSS,R1
|
||
MOV (R2)+,(R1)+
|
||
SWAB -2(R1)
|
||
MOV (R2)+,(R1)+
|
||
SWAB -2(R1)
|
||
MOV (R2)+,(R1)+
|
||
SWAB -2(R1)
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
MOV #INT7,(R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
CLR (R1)+
|
||
MOV #77*400,(R1)+
|
||
MOV #77*400,(R1)+
|
||
MOV #77*400,(R1)+
|
||
CLR (R1)+
|
||
;NOW THE MISSLES
|
||
MOV #M,R5
|
||
MOV #M+MEND,R4
|
||
LOOP
|
||
MOV R4,MEXIST-2(R5)
|
||
MOV R4,MEXPL-2(R5)
|
||
CLR MPOSS(R5)
|
||
CLR MPOSS+2(R5)
|
||
BIS #INT7,MEXPL(R5)
|
||
CLR MPX(R5)
|
||
CLR MPY(R5)
|
||
CLR MVX(R5)
|
||
CLR MVY(R5)
|
||
MOV #INT7,MFADE(R5)
|
||
MOV #MTIME,MTOUT(R5)
|
||
MOV R4,R5
|
||
ADD #MEND,R4
|
||
CMP R5,#MENDS
|
||
WHILE LO
|
||
;NOW THW IO
|
||
|
||
RESTRT:
|
||
|
||
MOV #340,KBIV+2
|
||
MOV #KBIN,KBIV
|
||
MOV #340,DL11IV+2
|
||
MOV #DL11IN,DL11IV
|
||
MOV #340,DL11OV+2
|
||
MOV #TIMER,DL11OV
|
||
MOV #101,KBIS
|
||
MOV #101,DL11IS
|
||
MOV #100,DL11OS
|
||
CLR DL11OB
|
||
SEXEC #SCOPEP
|
||
CLR PSW
|
||
BB2: TST TOCT
|
||
BEQ BB1
|
||
TST SIGNL
|
||
BNE .-4
|
||
DEC SIGNL
|
||
DEC TOCT
|
||
BNE BB2
|
||
JMP TO3
|
||
BB1: TST CT1
|
||
BLE DP
|
||
TST 177570
|
||
BNE BB1
|
||
CMP SCOPE2+2,#INITMS
|
||
BNE 1$
|
||
CLR CT1
|
||
MOV #SCOPE3,SCOPE2+2
|
||
JMP DP
|
||
1$: TST SIGNL
|
||
BNE .-4
|
||
DEC SIGNL
|
||
DEC CT1
|
||
BNE BB1
|
||
MOV #SCOPE3,SCOPE2+2
|
||
JMP DP
|
||
.PAGE
|
||
;THIS IS THE MAIN SCOPE PROGRAM
|
||
SCOPEP:
|
||
SCOPE2: SJMP INITMS
|
||
SCOPE3: SJSR SUN
|
||
SJSR STARS
|
||
SJSR S
|
||
SJSR M
|
||
SCOPE1: SJMP SCOPEP
|
||
.PAGE
|
||
;THIS IS THE MAIN CALCULATION LOOP
|
||
RANDOM: .WORD 0
|
||
SECCTR: 0
|
||
SEC: 0
|
||
MIN: 0
|
||
CT1:500
|
||
CT2: 0
|
||
DIGITS: CLR R0
|
||
DIG2: CMP R1,#12
|
||
BLO DIG1
|
||
SUB #12,R1
|
||
INC R0
|
||
BR DIG2
|
||
DIG1: ADD #60,R0
|
||
ADD #60,R1
|
||
RTS PC
|
||
DP:
|
||
LOOP
|
||
LOOP
|
||
TST SIGNL
|
||
WHILE NE
|
||
DEC SIGNL
|
||
INC RANDOM
|
||
BIC #40000,@STARPT
|
||
CMP STARPT,#STARS1
|
||
BNE .+12
|
||
BIS #40000,STARS2
|
||
BR STRS1
|
||
SUB #4,STARPT
|
||
BIS #40000,@STARPT
|
||
ADD #4,STARPT
|
||
STRS1: ADD #4,STARPT
|
||
CMP STARPT,#STARS2
|
||
BLE .+10
|
||
MOV #STARS1,STARPT
|
||
MOV R0,-(SP)
|
||
MOV R1,-(SP)
|
||
MOV R2,-(SP)
|
||
ADD #2,DIRPTR
|
||
CMP DIRPTR,#DIREND
|
||
BLE .+10
|
||
MOV #DIRTBL,DIRPTR
|
||
MOV @DIRPTR,R0
|
||
JSR PC,UVECT
|
||
ASR R0
|
||
ASR R0
|
||
ASR R0
|
||
ASR R1
|
||
ASR R1
|
||
ASR R1
|
||
TST R0
|
||
BPL .+10
|
||
NEG R0
|
||
BIS #20000,R0
|
||
TST R1
|
||
BPL .+10
|
||
NEG R1
|
||
BIS #20000,R1
|
||
BIC #116000,R0
|
||
BIC #116000,R1
|
||
BIS #40000,R0
|
||
BIS #40000,R1
|
||
MOV R0,RAY
|
||
MOV R1,RAY+2
|
||
MOV #20000,R2
|
||
BIT R2,R0
|
||
BEQ XOR1
|
||
BIC R2,R0
|
||
BR XOR2
|
||
XOR1: BIS R2,R0
|
||
XOR2: BIT R2,R1
|
||
BEQ XOR3
|
||
BIC R2,R1
|
||
BR XOR4
|
||
XOR3: BIS R2,R1
|
||
XOR4: MOV R0,RAY1
|
||
MOV R1,RAY1+2
|
||
MOV (SP)+,R2
|
||
MOV (SP)+,R1
|
||
MOV (SP)+,R0
|
||
INC SECCTR
|
||
CMP SECCTR,#24
|
||
BLO AA1
|
||
CLR SECCTR
|
||
TST SEC
|
||
BNE AA2
|
||
MOV #74,SEC
|
||
DEC MIN
|
||
BGE AA2
|
||
JMP TIMOUT
|
||
AA2: DEC SEC
|
||
MOV MIN,R1
|
||
JSR PC,DIGITS
|
||
MOVB R0,TIME1
|
||
MOVB R1,TIME1+1
|
||
MOV SEC,R1
|
||
JSR PC,DIGITS
|
||
MOVB R0,TIME2
|
||
MOVB R1,TIME2+1
|
||
AA1: TST DDD
|
||
BEQ DD1
|
||
INC WINCT
|
||
CMP WINCT,#<MTIME>
|
||
BLE DD1
|
||
TST ENTERD
|
||
BEQ KLINGW
|
||
TST KLINGD
|
||
BEQ ENTERW
|
||
JMP START
|
||
KLINGW: INC KLING
|
||
MOV #KLINGM,SCOPEA+2
|
||
BR ANYW
|
||
ENTERW: INC ENTER
|
||
MOV #ENTERM,SCOPEA+2
|
||
ANYW: MOV ENTER,R1
|
||
JSR PC,DIGITS
|
||
MOVB R0,E1
|
||
MOVB R1,E1+1
|
||
MOV KLING,R1
|
||
JSR PC,DIGITS
|
||
MOVB R0,K1
|
||
MOVB R1,K1+1
|
||
MOV #120,CT1
|
||
MOV #SCORMS,SCOPE2+2
|
||
JMP START
|
||
|
||
|
||
DIRTBL: 0
|
||
100*100
|
||
40*100
|
||
DIREND: 140*100
|
||
|
||
DIRPTR: 0
|
||
|
||
DD1: JSR PC,SUNP
|
||
JSR PC,SHIPP
|
||
JSR PC,MISSLP
|
||
ENDL J
|
||
.PAGE
|
||
;THIS CALCULATES WHAT IF ANYTHING IS HITTING THE SUN
|
||
;FIRST CHECK THE SHIPS
|
||
SUNP:
|
||
MOV #S,R5
|
||
LOOP
|
||
MOV #SUNX*100,R0
|
||
MOV #SUNY*100,R1
|
||
MOV XPOSS(R5),R2
|
||
MOV YPOSS(R5),R3
|
||
JSR PC,DIST
|
||
CMP R0,#SHLDR
|
||
IF LE
|
||
CLR SHLDUP(R5)
|
||
ENDF
|
||
CMP R0,#KILLR
|
||
IF LE
|
||
BIT #7,RANDOM
|
||
AND EQ
|
||
MOV #1,DAMG(R5)
|
||
ENDF
|
||
CMP R0,#2
|
||
IF LE
|
||
MOV #1,DESTY(R5)
|
||
ENDF
|
||
CMP R0,#2
|
||
IF LE
|
||
CLR XVEL(R5)
|
||
CLR YVEL(R5)
|
||
CLR AVEL(R5)
|
||
ENDF
|
||
ADD #SEND,R5
|
||
CMP R5,#SHIP2+SEND
|
||
WHILE LT
|
||
;NOW CHECK MISSLES
|
||
MOV #M,R5
|
||
MOV #M+MEND,R4
|
||
LOOP
|
||
CMP R4,MEXIST-2(R5)
|
||
IF NE
|
||
MOV #SUNX*100,R0
|
||
MOV #SUNY*100,R1
|
||
MOV MPX(R5),R2
|
||
MOV MPY(R5),R3
|
||
JSR PC,DIST
|
||
CMP R0,#2
|
||
IF LE
|
||
CLR MVX(R5)
|
||
CLR MVY(R5)
|
||
MOV R5,R3
|
||
ADD #MEXPL,R3
|
||
MOV R3,MEXPL-2(R5)
|
||
ENDF
|
||
ENDF
|
||
MOV R4,R5
|
||
ADD #MEND,R4
|
||
CMP R5,#MENDS
|
||
WHILE LT
|
||
RTS PC
|
||
.PAGE
|
||
;THIS UPDATES INFORMATION ON THE SHIPS
|
||
SHIPP:
|
||
;FIRST WE SEE IF THE SHIPS ARE COLLIDING
|
||
TST SHIP1+DESTY
|
||
IF EQ
|
||
TST SHIP2+DESTY
|
||
AND EQ
|
||
MOV SHIP1+XPOSS,R0
|
||
MOV SHIP1+YPOSS,R1
|
||
MOV SHIP2+XPOSS,R2
|
||
MOV SHIP2+YPOSS,R3
|
||
JSR PC,DIST
|
||
CMP R0,#2*DAMR
|
||
IF LT
|
||
MOV #1,SHIP1+DESTY
|
||
MOV #1,SHIP2+DESTY
|
||
ENDF
|
||
TST SHIP1+SHLDUP
|
||
IF NE
|
||
TST SHIP2+SHLDUP
|
||
AND NE
|
||
CMP R0,#2*SHLDR
|
||
IF LE
|
||
CLR SHIP1+SHLDUP
|
||
CLR SHIP2+SHLDUP
|
||
ENDF
|
||
ELSE
|
||
CMP R0,#SHLDR+DAMR
|
||
IF LE
|
||
CLR SHIP1+SHLDUP
|
||
CLR SHIP2+SHLDUP
|
||
ENDF
|
||
ENDF
|
||
ENDF
|
||
;NOW LOOK AT EACHSHIP
|
||
MOV #S,R5
|
||
LPS:
|
||
;UPDATE SOME RESOURCE VALUES
|
||
TST PV(R5)
|
||
IF LT
|
||
CLR PV(R5)
|
||
ENDF
|
||
SUB #E.TRN,EV(R5)
|
||
TST EV(R5)
|
||
IF GT
|
||
ADD #P.TRN,PV(R5)
|
||
CMP PV(R5),#77*400
|
||
IF GT
|
||
MOV #77*400,PV(R5)
|
||
ENDF
|
||
ENDF
|
||
;NOW COMPUTE NEW POSSITION
|
||
CLR XACC(R5)
|
||
CLR YACC(R5)
|
||
CLR AACC(R5)
|
||
;ANGULAR THRUST
|
||
TST ANACC(R5)
|
||
IF NE
|
||
IF GT
|
||
MOV #AAC*4,R0
|
||
ELSE
|
||
MOV #-AAC*4,R0
|
||
ENDF
|
||
SUB #E.ACC,EV(R5)
|
||
MOVB PV+1(R5),R1
|
||
JSR PC,MULB
|
||
SWAB R0
|
||
MOVB R0,R1
|
||
MOV R1,AACC(R5)
|
||
ENDF
|
||
;LINEAR THRUST
|
||
MOV APOSS(R5),R0
|
||
JSR PC,UVECT ;WE NEED THESE LATER TOO
|
||
MOV R0,XUV(R5)
|
||
MOV R1,YUV(R5)
|
||
TST LACC(R5)
|
||
IF NE
|
||
IF GT
|
||
MOV #LAC*4,R0
|
||
ELSE
|
||
MOV #-LAC*4,R0
|
||
ENDF
|
||
SUB #E.ACC,EV(R5)
|
||
MOVB PV+1(R5),R1
|
||
JSR PC,MULB
|
||
SWAB R0
|
||
MOVB R0,R2
|
||
ASL R2
|
||
ASL R2
|
||
MOV XUV(R5),R0
|
||
MOV R2,R1
|
||
JSR PC,MULB
|
||
SWAB R0
|
||
MOVB R0,R1
|
||
MOV R1,XACC(R5)
|
||
MOV YUV(R5),R0
|
||
MOV R2,R1
|
||
JSR PC,MULB
|
||
SWAB R0
|
||
MOVB R0,R1
|
||
MOV R1,YACC(R5)
|
||
ENDF
|
||
;GRAV THRUST
|
||
MOV XPOSS(R5),R0
|
||
MOV YPOSS(R5),R1
|
||
JSR PC,GRAV
|
||
ADD R0,XACC(R5)
|
||
ADD R1,YACC(R5)
|
||
;UPDATE POSSITION
|
||
ADD XACC(R5),XVEL(R5)
|
||
ADD #100000,XPOSS(R5)
|
||
ADD XVEL(R5),XPOSS(R5)
|
||
IF VS
|
||
ASR XVEL(R5)
|
||
ASR XVEL(R5)
|
||
ASR YVEL(R5)
|
||
ASR YVEL(R5)
|
||
ASR XVEL(R5)
|
||
ASR YVEL(R5)
|
||
ENDF
|
||
ADD #100000,XPOSS(R5)
|
||
ADD YACC(R5),YVEL(R5)
|
||
ADD #100000,YPOSS(R5)
|
||
ADD YVEL(R5),YPOSS(R5)
|
||
IF VS
|
||
ASR XVEL(R5)
|
||
ASR XVEL(R5)
|
||
ASR YVEL(R5)
|
||
ASR YVEL(R5)
|
||
ASR XVEL(R5)
|
||
ASR YVEL(R5)
|
||
ENDF
|
||
ADD #100000,YPOSS(R5)
|
||
ADD AACC(R5),AVEL(R5)
|
||
MOV AVEL(R5),R0
|
||
IF LT
|
||
NEG R0
|
||
ENDF
|
||
CMP R0,#MAXAV
|
||
IF GT
|
||
MOV #MAXAV,R0
|
||
TST AVEL(R5)
|
||
IF LT
|
||
NEG R0
|
||
ENDF
|
||
MOV R0,AVEL(R5)
|
||
ELSE
|
||
CMP R0,#MINAV
|
||
IF LT
|
||
TST ANACC(R5)
|
||
AND EQ
|
||
CLR AVEL(R5)
|
||
ENDF
|
||
ENDF
|
||
ADD AVEL(R5),APOSS(R5)
|
||
BIC #140000,APOSS(R5)
|
||
;CHECK SHEILD STATUS
|
||
MOV SHLDUP(R5),TEMP1
|
||
ADD VANISH(R5),TEMP1
|
||
TST TEMP1
|
||
IF NE
|
||
SUB #E.SHL,EV(R5)
|
||
CMP #PTSHL,PV(R5)
|
||
IF GT
|
||
CLR VANISH(R5)
|
||
CLR SHLDUP(R5)
|
||
ELSE
|
||
TST SHLDUP(R5)
|
||
BEQ VA1
|
||
MOV R5,R4
|
||
ADD #SDEST,R4
|
||
CMP R4,SDEST-2(R5)
|
||
IF NE
|
||
MOV R4,SDEST-2(R5)
|
||
SUB #P.SHLU,PV(R5)
|
||
ENDF
|
||
ENDF
|
||
ELSE
|
||
TST DESTY(R5)
|
||
IF EQ
|
||
MOV R5,R4
|
||
ADD #SDRAW-2,R4
|
||
MOV R4,SDEST-2(R5)
|
||
ENDF
|
||
ENDF
|
||
BR VA2
|
||
VA1: MOV R5,R4
|
||
ADD #SGRAPH,R4
|
||
CMP R4,SDEST-2(R5)
|
||
BEQ VA2
|
||
MOV R4,SDEST-2(R5)
|
||
SUB #P.SHLU,PV(R5)
|
||
;CHECK FOR MISSLE FIREING
|
||
VA2: TST MISSL(R5)
|
||
IF NE
|
||
TST MV(R5)
|
||
AND GT
|
||
CLR MISSL(R5)
|
||
TST SHLDUP(R5)
|
||
AND EQ
|
||
SUB #M.MISF,MV(R5)
|
||
;FIND MISSLE SPOT
|
||
MOV #M,R4
|
||
MOV #M+MEND,R3
|
||
LOOP
|
||
CMP R3,MEXIST-2(R4)
|
||
UNTIL EQ
|
||
MOV R3,R4
|
||
ADD #MEND,R3
|
||
CMP R4,#MENDS
|
||
WHILE NE
|
||
CMP R4,#MENDS
|
||
IF NE
|
||
;CREATE NEW MISSLE
|
||
MOV R4,R3
|
||
ADD #MEXIST,R3
|
||
MOV R3,MEXIST-2(R4)
|
||
MOV XVEL(R5),MVX(R4)
|
||
MOV YVEL(R5),MVY(R4)
|
||
MOV XPOSS(R5),MPX(R4)
|
||
MOV YPOSS(R5),MPY(R4)
|
||
MOV XUV(R5),R1
|
||
MOV #SHPS,R0
|
||
JSR PC,MULB
|
||
ADD R0,MPX(R4)
|
||
ASL R0
|
||
ADD R0,MPX(R4)
|
||
MOV YUV(R5),R1
|
||
MOV #SHPS,R0
|
||
JSR PC,MULB
|
||
ADD R0,MPY(R4)
|
||
ASL R0
|
||
ADD R0,MPY(R4)
|
||
MOV XUV(R5),R0
|
||
ASL R0
|
||
ASL R0
|
||
ASL R0
|
||
ADD R0,MVX(R4)
|
||
MOV YUV(R5),R0
|
||
ASL R0
|
||
ASL R0
|
||
ASL R0
|
||
ADD R0,MVY(R4)
|
||
ENDF
|
||
ENDF
|
||
;SEE IF SHIP IS DESTOYED
|
||
TST DESTY(R5)
|
||
IF NE
|
||
CLR EV(R5)
|
||
CLR PV(R5)
|
||
CLR MV(R5)
|
||
CMP R5,#S
|
||
BNE KK1
|
||
MOV #1,ENTERD
|
||
BR KK2
|
||
KK1: MOV #1,KLINGD
|
||
KK2: TST WINFLG
|
||
BNE KK4
|
||
MOV ENTERD,CT2
|
||
ADD KLINGD,CT2
|
||
CMP CT2,#2 ; BOTH DESTROYED?
|
||
BNE KK3
|
||
MOV #<MTIME>-74,WINCT
|
||
INC WINFLG
|
||
KK4:
|
||
KK3: MOV #1,DDD
|
||
MOV R5,R4
|
||
ADD #SHEXPL,R4
|
||
CMP R4,SDEST-2(R5)
|
||
IF NE
|
||
CLR SSR
|
||
MOV R4,SDEST-2(R5)
|
||
ELSE
|
||
SUB #FRATE/2,SFADE(R5)
|
||
TST SFADE(R5)
|
||
IF LE
|
||
CLR SFADE(R5)
|
||
ENDF
|
||
MOV SFADE(R5),R0
|
||
BIC #INTMSK,R0
|
||
BIC #INT7,SHEXPL(R5)
|
||
BIS R0,SHEXPL(R5)
|
||
ENDF
|
||
ELSE
|
||
;CHECK FOR DAMAGE IF SO PICK A PROBLEM TO MAKE
|
||
TST DAMG(R5)
|
||
IF NE
|
||
CLR SSR
|
||
CLR DAMG(R5)
|
||
MOV RANDOM,R0
|
||
BIC #177761,R0
|
||
CASET R0,10
|
||
CASE 1
|
||
CASE 2
|
||
SUB #10*M.MISF,MV(R5)
|
||
CASE 3
|
||
SUB #20*M.MISF,MV(R5)
|
||
CASE 4
|
||
ASR PV(R5)
|
||
CASE 5
|
||
ASR EV(R5)
|
||
CASE 6
|
||
SUB #30*E.ACC,EV(R5)
|
||
CASE 7
|
||
MOV #1,ANACC(R5)
|
||
CASE 10
|
||
MOV #1,DESTY(R5)
|
||
ENDC
|
||
ENDF
|
||
ENDF
|
||
;NOW WE PREPARE A NEW DISPLAY, FIRST THE GRAPHS
|
||
TST EV(R5)
|
||
IF LE
|
||
CLR PV(R5)
|
||
CLR EV(R5)
|
||
ENDF
|
||
MOVB EV+1(R5),EG+2(R5)
|
||
MOVB EV+1(R5),EG+6(R5)
|
||
TST PV(R5)
|
||
IF LT
|
||
CLR PV(R5)
|
||
ENDF
|
||
MOVB PV+1(R5),PG+2(R5)
|
||
MOVB PV+1(R5),PG+6(R5)
|
||
TST MV(R5)
|
||
IF LT
|
||
CLR MV(R5)
|
||
ENDF
|
||
MOVB MV+1(R5),MG+2(R5)
|
||
MOVB MV+1(R5),MG+6(R5)
|
||
|
||
CMP R5,#S
|
||
BNE NOTDIW
|
||
TST DIWFLG
|
||
BNE NOTDIW
|
||
TST EV(R5)
|
||
BNE NOTDIW
|
||
TST MV(R5)
|
||
BNE NOTDIW
|
||
MOV R5,-(SP)
|
||
ADD #SEND,R5
|
||
TST EV(R5)
|
||
BNE NDIW1
|
||
TST MV(R5)
|
||
BNE NDIW1
|
||
INC DIWFLG
|
||
MOV #<MTIME>-74,WINCT
|
||
INC ENTERD
|
||
INC KLINGD
|
||
MOV #1,DDD
|
||
NDIW1: MOV (SP)+,R5
|
||
NOTDIW:
|
||
|
||
;NOW DRAW THE NEW SHIP,GET NEW POSSITON
|
||
MOV XPOSS(R5),R0
|
||
FIX R0
|
||
MOV R0,SPOSS(R5)
|
||
MOV YPOSS(R5),R0
|
||
FIX R0
|
||
MOV R0,SPOSS+2(R5)
|
||
;NOW GET OVX AND OVY
|
||
MOV XUV(R5),R1
|
||
MOV #SHPS*4,R0
|
||
JSR PC,MULB
|
||
SWAB R0
|
||
MOVB R0,R3
|
||
MOV YUV(R5),R1
|
||
MOV #SHPS*4,R0
|
||
JSR PC,MULB
|
||
SWAB R0
|
||
MOVB R0,R4
|
||
;NOW COMPUTE ALL OFF THE VECTORS IN TEMP
|
||
MOV R3,R0
|
||
ADD R3,R0
|
||
ADD R3,R0
|
||
MOV R0,TEMP
|
||
MOV R4,R1
|
||
ADD R4,R1
|
||
ADD R4,R1
|
||
MOV R1,TEMP+2
|
||
MOV R4,R2
|
||
ADD R0,R2
|
||
NEG R2
|
||
MOV R2,TEMP+4
|
||
MOV R3,R2
|
||
SUB R1,R2
|
||
MOV R2,TEMP+6
|
||
MOV R4,R2
|
||
SUB R3,R2
|
||
MOV R2,TEMP+10
|
||
MOV R2,TEMP+16
|
||
MOV R4,R2
|
||
ADD R3,R2
|
||
MOV R2,TEMP+14
|
||
NEG R2
|
||
MOV R2,TEMP+12
|
||
MOV R0,R2
|
||
SUB R4,R2
|
||
MOV R2,TEMP+20
|
||
MOV R3,R2
|
||
ADD R1,R2
|
||
MOV R2,TEMP+22
|
||
NEG R0
|
||
MOV R0,TEMP+24
|
||
NEG R1
|
||
MOV R1,TEMP+26
|
||
;NOW MOV THESE INTO THE SCOPE CODE
|
||
CLR R3
|
||
MOV R5,R4
|
||
ADD #SDRAW,R4
|
||
LOOP
|
||
TST TEMP(R3)
|
||
IF LT
|
||
NEG TEMP(R3)
|
||
BIS #020000,TEMP(R3)
|
||
ENDF
|
||
BIS #40000,TEMP(R3)
|
||
MOV TEMP(R3),(R4)+
|
||
TST (R3)+
|
||
CMP R3,#30
|
||
WHILE LT
|
||
CMP R5,#SHIP1
|
||
IF EQ
|
||
BIC #40000,-4(R4)
|
||
BIC #40000,-30(R4)
|
||
ENDF
|
||
;NOW GO TO NEXT SHIP
|
||
ADD #SEND,R5
|
||
CMP R5,#SHIP2+SEND
|
||
IF LT
|
||
JMP LPS
|
||
ENDF
|
||
RTS PC
|
||
.PAGE
|
||
TEMP: .BLKW 14
|
||
;FINALLY WE UPDATE INFORMATION ON THE MISSLES.
|
||
ENTERD: 0
|
||
KLINGD: 0
|
||
ENTER: 0
|
||
KLING: 0
|
||
WINCT: 0
|
||
WINFLG: 0
|
||
DIWFLG: 0
|
||
TEMP1: 0
|
||
DDD: 0
|
||
MISSLP:
|
||
MOV #M,R5
|
||
MOV #M+MEND,R4
|
||
LOOP
|
||
CMP R4,MEXIST-2(R5)
|
||
IF EQ
|
||
JMP SKIP1 ;TOO BIG FOR IF
|
||
ENDF
|
||
MOV MPX(R5),R0
|
||
MOV MPY(R5),R1
|
||
JSR PC,GRAV
|
||
ADD R0,MVX(R5)
|
||
ADD R1,MVY(R5)
|
||
MOV MPX(R5),R0
|
||
FIX R0
|
||
MOV R0,MPOSS(R5)
|
||
MOV MPY(R5),R0
|
||
FIX R0
|
||
MOV R0,MPOSS+2(R5)
|
||
ADD MVX(R5),MPX(R5)
|
||
ADD MVY(R5),MPY(R5)
|
||
MOV MVX(R5),R0
|
||
IF LT
|
||
NEG R0
|
||
FIX R0
|
||
BIS #20000,R0
|
||
ELSE
|
||
FIX R0
|
||
ENDF
|
||
BIS #40000,R0
|
||
MOV R0,MVEL(R5)
|
||
MOV MVY(R5),R0
|
||
IF LT
|
||
NEG R0
|
||
FIX R0
|
||
BIS #20000,R0
|
||
ELSE
|
||
FIX R0
|
||
ENDF
|
||
MOV R0,MVEL+2(R5)
|
||
BIT #1777,MVEL(R5)
|
||
IF EQ
|
||
BIT #1777,MVEL+2(R5)
|
||
AND EQ
|
||
BIS #40000,MPOSS(R5)
|
||
ENDF
|
||
;CHECK IF EXPLODED
|
||
CMP R4,MEXPL-2(R5)
|
||
IF NE ;IE EXPLODED
|
||
SUB #FRATE,MFADE(R5)
|
||
TST MFADE(R5)
|
||
IF LE
|
||
MOV R4,MEXIST-2(R5)
|
||
MOV R4,MEXPL-2(R5)
|
||
BIS #INT7,MEXPL(R5)
|
||
CLR MPX(R5)
|
||
CLR MPY(R5)
|
||
CLR MVX(R5)
|
||
CLR MVY(R5)
|
||
MOV #INT7,MFADE(R5)
|
||
MOV #MTIME,MTOUT(R5)
|
||
ENDF
|
||
BIC #40000,MVEL(R5)
|
||
BIC #40000,MPOSS(R5)
|
||
MOV MFADE(R5),R0
|
||
BIC #INTMSK,R0
|
||
BIC #INT7,MEXPL(R5)
|
||
BIS R0,MEXPL(R5)
|
||
ELSE ;NOT EXPLODED
|
||
DEC MTOUT(R5)
|
||
IF LE
|
||
MOV R5,R3
|
||
ADD #MEXPL,R3
|
||
MOV R3,MEXPL-2(R5)
|
||
ENDF
|
||
MOV #S,R3
|
||
LOOP
|
||
MOV R3,-(SP)
|
||
MOV MPX(R5),R0
|
||
MOV MPY(R5),R1
|
||
MOV XPOSS(R3),R2
|
||
MOV YPOSS(R3),R3
|
||
JSR PC,DIST
|
||
MOV (SP)+,R3
|
||
CMP R0,#SHLDR
|
||
IF LE
|
||
TST SHLDUP(R3)
|
||
AND NE ;HIT ON SHEILD
|
||
ASR MVX(R5)
|
||
ASR MVY(R5)
|
||
MOV R5,R2
|
||
ADD #MEXPL,R2
|
||
MOV R2,MEXPL-2(R5)
|
||
SUB #E.SHLH,EV(R3)
|
||
SUB #P.SHLH,PV(R3)
|
||
ENDF
|
||
CMP R0,#DAMR
|
||
IF LE ;POSSIBLE DAMAGE
|
||
BIT #7,RANDOM
|
||
AND EQ
|
||
MOV #1,DAMG(R3)
|
||
ASR MVX(R5)
|
||
ASR MVX(R5)
|
||
ASR MVY(R5)
|
||
ASR MVY(R5)
|
||
MOV R5,R2
|
||
ADD #MEXPL,R2
|
||
MOV R2,MEXPL-2(R5)
|
||
ENDF
|
||
CMP R0,#KILLR
|
||
IF LE
|
||
MOV #1,DESTY(R3)
|
||
MOV XVEL(R3),MVX(R5)
|
||
MOV YVEL(R3),MVY(R5)
|
||
MOV R5,R2
|
||
ADD #MEXPL,R2
|
||
MOV R2,MEXPL-2(R5)
|
||
ENDF
|
||
ADD #SEND,R3
|
||
CMP R3,#SHIP2+SEND
|
||
IF GE
|
||
OUTOF
|
||
ENDF
|
||
ENDL J
|
||
ENDF
|
||
SKIP1:
|
||
MOV R4,R5
|
||
ADD #MEND,R4
|
||
CMP R5,#MENDS
|
||
IF GE
|
||
OUTOF
|
||
ENDF
|
||
ENDL J
|
||
RTS PC
|
||
.=22000
|
||
|
||
;THIS IS THE TABLE OF DATA FOR THE TW0 SHIPS
|
||
;AND THEIR DISPLAYS.
|
||
INITMS: SGM PNT
|
||
PNT 10,650,HIDE
|
||
SGM CHAR,4
|
||
.ASCII/ WELCOME TO SPACE WAR. YOU ARE INVOLVED IN A SERIES/<15><12>
|
||
.ASCII/ OF BATTLES TO DETERMINE THE NEXT RULER OF THE GALAXY./<15><12>
|
||
.ASCII/ THE GOOD GUYS (U.S.S. ENTERPRISE, THE SHIP WITH THE LINE/<15><12>
|
||
.ASCII/ DOWN THE CENTER, CONTROLLED FROM THE TERMINET) ARE/<15><12>
|
||
.ASCII/ ENGAGED IN HOSITILITIES WITH THE KLINGONS/<15><12>
|
||
.ASCII/ (THE SHIP WITH NO LINE, CONTROLLED FROM THE GT40 KEYBOARD)./<15><12>
|
||
.ASCII/ THIS WAR WILL LAST FOR 15 MINUTES; AT THAT TIME, AN/<15><12>
|
||
.ASCII/ INTERGALACTIC COUNCIL WILL DECLARE A WINNER. GOOD LUCK./<15><12>
|
||
.EVEN
|
||
SJMP SCOPE2
|
||
|
||
STARS: SGM PNT,3
|
||
STARS1: PNT 150,1400
|
||
PNT 1350,320
|
||
PNT 1200,1200
|
||
PNT 1400,170
|
||
PNT 400,700
|
||
PNT 200,300
|
||
PNT 1030,1600
|
||
PNT 1450,1620
|
||
PNT 730,110
|
||
PNT 1605,1550
|
||
PNT 100,1000
|
||
PNT 1750,1050
|
||
PNT 250,776
|
||
PNT 1600,450
|
||
PNT 234,1245
|
||
PNT 775,330
|
||
PNT 220,1750
|
||
PNT 240,1000
|
||
PNT 630,1150
|
||
PNT 440,300
|
||
PNT 1400,740
|
||
PNT 1005,130
|
||
PNT 40,650
|
||
PNT 550,110
|
||
PNT 1150,1430
|
||
PNT 620,1330
|
||
PNT 1250,207
|
||
PNT 530,370
|
||
STARS2: PNT 430,1360
|
||
SRTS
|
||
|
||
S:
|
||
SHIP1:
|
||
SGM PNT
|
||
SPOSS=.-S
|
||
PNT SUNX+SHIPX,SUNY+SHIPY,HIDE
|
||
SJMP S+SDRAW-2
|
||
SDEST=.-S
|
||
SJSR SHLD
|
||
SGM LVEC,4,SOLID
|
||
SDRAW=.-S
|
||
OVX=0
|
||
OVY=SHPS
|
||
LVEC 3*OVX,3*OVY,HIDE
|
||
LVEC -3*OVX-OVY,-3*OVY+OVX
|
||
LVEC OVY-OVX,-OVX-OVY
|
||
LVEC OVX+OVY,OVY-OVX
|
||
LVEC 3*OVX-OVY,3*OVY+OVX
|
||
LVEC -3*OVX,-3*OVY,HIDE
|
||
SJMP S+SGRAPH
|
||
SHEXPL=.-S
|
||
SGM RPNT,7,SDASH
|
||
RPNT -LS,-LS
|
||
SINTH JIGGLE
|
||
SJSR LEXPL
|
||
SGRAPH=.-S
|
||
SGM PNT
|
||
PNT 1700-GX,GX,HIDE
|
||
SGM CHAR,4
|
||
.BYTE 'E,40,'P,40,'M,0
|
||
SGM LVEC,4,SOLID
|
||
LVEC -100,30,HIDE
|
||
EG=.-S
|
||
LVEC 0,77
|
||
LVEC 34,-77,HIDE
|
||
PG=.-S
|
||
LVEC 0,77
|
||
LVEC 34,-77,HIDE
|
||
MG=.-S
|
||
LVEC 0,77
|
||
LVEC 34,-77,HIDE
|
||
SJMP S+SEND
|
||
XPOSS=.-S
|
||
<SUNX+SHIPX>*100
|
||
YPOSS=.-S
|
||
<SUNY+SHIPY>*100
|
||
APOSS=.-S
|
||
0
|
||
XVEL=.-S
|
||
0
|
||
YVEL=.-S
|
||
0
|
||
AVEL=.-S
|
||
0
|
||
XACC=.-S
|
||
0
|
||
YACC=.-S
|
||
0
|
||
AACC=.-S
|
||
0
|
||
XUV=.-S
|
||
0
|
||
YUV=.-S
|
||
0
|
||
SFADE=.-S
|
||
INT7
|
||
SHLDUP=.-S
|
||
0
|
||
LACC=.-S
|
||
0
|
||
ANACC=.-S
|
||
0
|
||
MISSL=.-S
|
||
0
|
||
DESTY=.-S
|
||
0
|
||
DAMG=.-S
|
||
0
|
||
EV=.-S
|
||
77*400
|
||
PV=.-S
|
||
77*400
|
||
MV=.-S
|
||
77*400
|
||
VANISH=.-S
|
||
0
|
||
SEND=.-S
|
||
SHIP2:
|
||
SGM PNT
|
||
PNT SUNX-SHIPX,SUNY-SHIPY,HIDE
|
||
SJMP SHIP2+SDRAW-2
|
||
SJSR SHLD
|
||
SGM LVEC,4,SOLID
|
||
OVX=0
|
||
OVY=-SHPS
|
||
LVEC 3*OVX,3*OVY
|
||
LVEC -3*OVX-OVY,-3*OVY+OVX
|
||
LVEC OVY-OVX,-OVX-OVY
|
||
LVEC OVX+OVY,OVY-OVX
|
||
LVEC 3*OVX-OVY,3*OVY+OVX
|
||
LVEC -3*OVX,-3*OVY
|
||
SJMP SHIP2+SGRAPH
|
||
SGM RPNT,4,SDASH
|
||
RPNT -LS,-LS
|
||
SINTH JIGGLE
|
||
SJSR LEXPL
|
||
SGM PNT
|
||
PNT GX,GX,HIDE
|
||
SGM CHAR,4
|
||
.BYTE 'E,40,'P,40,'M,0
|
||
SGM LVEC,4,SOLID
|
||
LVEC -100,30,HIDE
|
||
LVEC 0,77
|
||
LVEC 34,-77,HIDE
|
||
LVEC 0,77
|
||
LVEC 34,-77,HIDE
|
||
LVEC 0,77
|
||
LVEC 34,-77,HIDE
|
||
SJMP SHIP2+SEND
|
||
<SUNX-SHIPX>*100
|
||
<SUNY-SHIPY>*100
|
||
.WORD 200*100,0,0,0,0,0,0,0,0,INT7,0,0,0,0,0,0,77*400,77*400,77*400
|
||
.WORD 0
|
||
SRTS
|
||
.PAGE
|
||
;THIS IS THE TABLE OF MISSLES AND EXPLOSIONS
|
||
SCORMS: SGM PNT,4
|
||
PNT 200,750,HIDE
|
||
SGM CHAR
|
||
.ASCII/VICTORY GOES TO THE /
|
||
SCOPEA: SJMP ENTERM
|
||
SCOPEB: SGM PNT
|
||
PNT 20,500,HIDE
|
||
SGM CHAR,4
|
||
.ASCII/U.S.S. ENTERPRISE -- /
|
||
E1: .BYTE 0,0
|
||
SGM PNT
|
||
PNT 20,400,HIDE
|
||
SGM CHAR,4
|
||
.ASCII/B.K.E. MORONI-CAMORAH -- /
|
||
K1: .BYTE 0,0
|
||
SJMP SCOPEP
|
||
ENTERM: SGM CHAR,4,BLK
|
||
.ASCII/ENTERPRISE/
|
||
SGM CHAR,4,NOBLK
|
||
SJMP SCOPEB
|
||
KLINGM: SGM CHAR,4,BLK
|
||
.ASCII/MORONI-CAMORAH/
|
||
SGM CHAR,4,NOBLK
|
||
SJMP SCOPEB
|
||
TMS: SGM CHAR,4,BLK
|
||
.ASCII/A TIE /
|
||
SGM CHAR,,NOBLK
|
||
SJMP DMS
|
||
M:
|
||
SJMP M+MEND
|
||
MEXIST=.-M
|
||
SGM PNT,3
|
||
MPOSS=.-M
|
||
PNT SUNX,SUNY,HIDE
|
||
SGM LVEC,3,SOLID
|
||
MVEL=.-M
|
||
LVEC 0,0
|
||
SJMP M+MEND
|
||
MEXPL=.-M
|
||
SGM RPNT,7
|
||
RPNT -SS,-SS
|
||
SINTH JIGGLE
|
||
SJSR SEXPL
|
||
SJMP M+MEND
|
||
MPX=.-M
|
||
0
|
||
MPY=.-M
|
||
0
|
||
MVX=.-M
|
||
0
|
||
MVY=.-M
|
||
0
|
||
MFADE=.-M
|
||
INT7
|
||
MTOUT=.-M
|
||
MTIME
|
||
MEND=.-M
|
||
;NOW WE HAVE A WHOLE BUNCH OF SIMMILAR DATA-
|
||
;DISPLAY BLOCKS
|
||
.REPT 37
|
||
MZ=.
|
||
SJMP MZ+MEND
|
||
SGM PNT,4
|
||
PNT SUNX,SUNY
|
||
SGM LVEC,3,SOLID
|
||
LVEC 0,0
|
||
SJMP MZ+MEND
|
||
SGM RPNT,7
|
||
RPNT -SS,-SS
|
||
SINTH JIGGLE
|
||
SJSR SEXPL
|
||
SJMP MZ+MEND
|
||
.WORD 0,0,0,0,INT7,MTIME
|
||
.ENDM
|
||
MENDS:
|
||
SRTS
|
||
.PAGE
|
||
;HERE ARE SOME SIMPLE SCOPE SUBROUTINES.
|
||
LEXPL: ;LARGE EXPLOSION (SHIPS SUN)
|
||
SGM LVEC,,SDASH
|
||
LVEC 3*LS,0,HIDE
|
||
LVEC -5*LS,-2*LS
|
||
LVEC 2*LS,5*LS
|
||
LVEC 2*LS,-5*LS
|
||
LVEC -5*LS,2*LS
|
||
LVEC 5*LS,2*LS
|
||
LVEC -2*LS,-5*LS
|
||
LVEC -2*LS,5*LS
|
||
LVEC 5*LS,-2*LS
|
||
SRTS
|
||
SEXPL: ;SMALL EXPLOSION SAME AS LARGE SS FOR LS
|
||
SGM SVEC,,SDASH
|
||
SVEC 3*SS,0,HIDE
|
||
SVEC -5*SS,-2*SS
|
||
SVEC 2*SS,5*SS
|
||
SVEC 2*SS,-5*SS
|
||
SVEC -5*SS,2*SS
|
||
SVEC 5*SS,2*SS
|
||
SVEC -2*SS,-5*SS
|
||
SVEC -2*SS,5*SS
|
||
SVEC 5*SS,-2*SS
|
||
SRTS
|
||
SHLD: ;SHEILD FOR A SHIP
|
||
T=SHLDR/3
|
||
SGM SVEC,2,SOLID
|
||
SVEC 2*T,2*T,HIDE
|
||
SVEC T,-2*T
|
||
SVEC -T,-2*T
|
||
SVEC -2*T,-T
|
||
SVEC -2*T,T
|
||
SVEC -T,2*T
|
||
SVEC T,2*T
|
||
SVEC 2*T,T
|
||
SVEC 2*T,-T
|
||
SVEC -2*T,-2*T,HIDE
|
||
SRTS
|
||
SUN: ;THE SUN DISPLAY
|
||
SGM PNT
|
||
PNT SUNX,SUNY,HIDE
|
||
|
||
SGM LVEC,4,SOLID
|
||
RAY: LVEC 0,0
|
||
SGM PNT
|
||
PNT SUNX,SUNY,HIDE
|
||
SGM LVEC,4,SOLID
|
||
RAY1: LVEC 0,0
|
||
SGM PNT
|
||
RAYEND: PNT SUNX,SUNY,HIDE
|
||
|
||
SGM PNT
|
||
PNT 740,GX,HIDE
|
||
SGM CHAR,4
|
||
TIME1: .BYTE 61,65,40,':
|
||
TIME2: .BYTE 60,60,40,40
|
||
SRTS
|
||
ENDMS: SGM PNT,5
|
||
PNT 100,600,HIDE
|
||
SGM CHAR,4
|
||
.ASCII/THE NEW RULER OF THE UNIVERSE IS/
|
||
SGM PNT
|
||
PNT 200,400,HIDE
|
||
ENDA: SJMP EMS
|
||
EMS: SGM CHAR,4,BLK
|
||
.ASCII/THE U.S.S. ENTERPRISE /
|
||
SGM CHAR,4,NOBLK
|
||
SJMP DMS
|
||
KMS: SGM CHAR,4,BLK
|
||
.ASCII/THE B.K.E. MORONI-CAMORAH /
|
||
SGM CHAR,4,NOBLK
|
||
SJMP DMS
|
||
DMS: SGM PNT
|
||
PNT 100,50,HIDE
|
||
SGM CHAR,3
|
||
.ASCII/(DISP WILL BE AUTOMATICALLY RELOADED/<15><12>
|
||
.ASCII/ IN A FEW SECONDS)/
|
||
SJMP ENDMS
|
||
|
||
.PAGE
|
||
;THIS CUTE LITLE PROGRAM MAKES EXLOPSIONS
|
||
;LOOK BETTER BY CUASEING THEM TO FUZZ BY JIGGLING
|
||
;IT JUST BINARY COUNTS ON THE SIGN BITS
|
||
;OF THE PRECEDING RPNT OR SVEC.
|
||
JIGGLE:
|
||
MOV R5,-(SP)
|
||
MOV SPC,R5
|
||
SREXEC ;START UP SCOPE AGAIN
|
||
CLR PSW
|
||
SUB #4,R5
|
||
BIT #100,(R5)
|
||
IF EQ
|
||
BIS #100,(R5)
|
||
ELSE
|
||
BIC #100,(R5)
|
||
BIT #20000,(R5)
|
||
IF EQ
|
||
BIS #20000,(R5)
|
||
ELSE
|
||
BIC #20000,(R5)
|
||
ENDF
|
||
ENDF
|
||
MOV (SP)+,R5
|
||
RTI
|
||
.PAGE
|
||
;HERE ARE SOME UTILLITY ROUTINES
|
||
;THEY SIMULATE MULTIPLICATION AND DIVISION
|
||
;MULB: R0=R0*R1
|
||
MULB:
|
||
MOV R2,-(SP)
|
||
MOV R0,R2
|
||
CLR R0
|
||
TST R1
|
||
IF LT
|
||
NEG R2 ;WANT POSSITIVE MULTIPLIER
|
||
NEG R1
|
||
ENDF
|
||
;NOW WE ARE SET UP DO A SET OF SHIFTS AND ADDS
|
||
BR LPST2
|
||
LOOP
|
||
ASL R2
|
||
LPST2:
|
||
ASR R1
|
||
IF CS
|
||
ADD R2,R0
|
||
ENDF
|
||
WHILE NE
|
||
;NOW WE ARE DONE
|
||
MOV (SP)+,R2
|
||
RTS PC
|
||
.PAGE
|
||
;DIV: R0=R1/R0 REMAINDER IN R1
|
||
DIV:
|
||
MOV R0,-(SP)
|
||
MOV R1,-(SP)
|
||
MOV R2,-(SP)
|
||
MOV R3,-(SP)
|
||
MOV R0,R2
|
||
MOV #1,R3 ;THIS KEEPS TRACK OF SHIFTING
|
||
CLR R0
|
||
TST R2
|
||
IF NE ;NOOP ZERODIVIDE
|
||
IF LT ;WANT POSITIVE NUMBERS
|
||
NEG R2
|
||
ENDF
|
||
TST R1
|
||
IF LT
|
||
NEG R1
|
||
ENDF
|
||
;NOW WE ARE READY TO SHIFT AND SUBTRACT.
|
||
;FIND NUMBER OF BITS IN QUOTIENT
|
||
LOOP
|
||
CMP R2,R1
|
||
UNTIL GT
|
||
ASL R3
|
||
ASL R2
|
||
WHILE PL
|
||
ASR R2
|
||
ASR R3
|
||
BIC #100000,R3
|
||
;NOW SHIFT AND SUBTRACT
|
||
LOOP
|
||
CMP R2,R1
|
||
IF LE
|
||
BIS R3,R0
|
||
SUB R2,R1
|
||
ENDF
|
||
ASR R2
|
||
ASR R3
|
||
WHILE NE
|
||
ENDF
|
||
;NOW WE ARE DONE
|
||
MOV (SP)+,R3
|
||
MOV (SP)+,R2
|
||
TST (SP)+
|
||
IF LT
|
||
NEG R1
|
||
NEG R0
|
||
ENDF
|
||
TST (SP)+
|
||
IF LT
|
||
NEG R0
|
||
ENDF
|
||
RTS PC
|
||
.PAGE
|
||
;GRAV: THIS ROUTINE TAKES A (16,6) POSSITION VECTOR
|
||
;IN (R0,R1) AND RETURNS THE ACCELERATION DUE TO
|
||
;GRAVITATIONAL ATTRACTION OF THE SUN IN (R0,R1)
|
||
GRAV:
|
||
MOV R2,-(SP)
|
||
MOV R3,-(SP)
|
||
MOV R4,-(SP)
|
||
;GET HIGH ORDER 8 BITS OF POSSITON
|
||
SWAB R0
|
||
BIC #177400,R0
|
||
SWAB R1
|
||
BIC #177400,R1
|
||
;GET 7 BIT DISTANCE FROM SUN
|
||
SUB #SUNX/4,R0
|
||
SUB #SUNY/4,R1
|
||
;NEGATE VECTO AND SAVE IN (R3,R4)
|
||
NEG R0
|
||
NEG R1
|
||
MOV R1,R4
|
||
MOV R0,R3
|
||
;FIND LENGTH OF VECTOR SQUARED AND PUT IN R2
|
||
MOV R0,R1
|
||
JSR PC,MULB
|
||
MOV R0,R2
|
||
MOV R4,R0
|
||
MOV R4,R1
|
||
JSR PC,MULB
|
||
ADD R0,R2
|
||
;NOW MULTIPLY (R3,R4) BY G G=400 IS ONLY REASONABLE CHOICE
|
||
SWAB R3
|
||
SWAB R4
|
||
BIC #377,R3
|
||
BIC #377,R4
|
||
;NOW DEVIDE VECTOR BY LENGTH SQUARED TO GET RESULT
|
||
;NOTE WE ARE USING 1/R FORCE LAW.
|
||
MOV R2,R0
|
||
MOV R4,R1
|
||
JSR PC,DIV
|
||
MOV R0,R4
|
||
MOV R2,R0
|
||
MOV R3,R1
|
||
JSR PC,DIV
|
||
MOV R4,R1
|
||
;NOW DONE
|
||
MOV (SP)+,R4
|
||
MOV (SP)+,R3
|
||
MOV (SP)+,R2
|
||
RTS PC
|
||
.PAGE
|
||
;DIST: THIS ROUTINE COMPUTES THE CITY BLOCK
|
||
;METRIC DISTANCE BETWEEN TWO VECTORS.
|
||
;THE (16,6) VECTORS ARE (R0,R1),(R2,R3)
|
||
;THE INTEGER RESULT IN R0
|
||
;MAKE INTEGERS (WE DON'T CARE ABOUT TWO LOST BITS)
|
||
DIST:
|
||
SWAB R0
|
||
SWAB R1
|
||
SWAB R2
|
||
SWAB R3
|
||
BIC #177400,R0
|
||
BIC #177400,R1
|
||
BIC #177400,R2
|
||
BIC #177400,R3
|
||
;GET DIFFERENCE
|
||
SUB R2,R0
|
||
SUB R3,R1
|
||
;TAKES ABSOLUTE VALUE
|
||
TST R0
|
||
IF LT
|
||
NEG R0
|
||
ENDF
|
||
TST R1
|
||
IF LT
|
||
NEG R1
|
||
ENDF
|
||
;GET METRIC (AND PUT TWO BITS BACK)
|
||
ADD R1,R0
|
||
ASL R0
|
||
ASL R0
|
||
RTS PC
|
||
.PAGE
|
||
;UVECT: THIS ROUTINE DOSE SIN AND COS, IT RETURNS IN (R0,R1)
|
||
;A (15,6) UNIT VECTOR IN THE DIRECTION SPECIFIED BY THE ANGLE
|
||
;IN R0 (16,6) (THE ANGLE IS IN FRAMITS 256FRAMITS=360DEGREES)
|
||
UVECT:
|
||
FIX R0
|
||
MOV R0,-(SP)
|
||
BIC #177700,R0
|
||
MOVB SINTAB(R0),R1
|
||
NEG R0
|
||
ADD #100,R0
|
||
MOVB SINTAB(R0),R0
|
||
BIT #200,(SP)
|
||
IF NE
|
||
NEG R0
|
||
NEG R1
|
||
ENDF
|
||
BIT #100,(SP)+
|
||
IF NE
|
||
MOV R0,-(SP)
|
||
MOV R1,R0
|
||
MOV (SP)+,R1
|
||
NEG R0
|
||
ENDF
|
||
RTS PC
|
||
;THIS IS THE SIN TABLE
|
||
SINTAB:
|
||
.BYTE 0, 1, 3, 4, 6,10,12,13
|
||
.BYTE 14,16,17,21,23,24,26,27
|
||
.BYTE 30,32,34,35,36,37,41,42
|
||
.BYTE 43,45,46,47,50,51,53,54
|
||
.BYTE 55,56,57,61,61,63,63,65
|
||
.BYTE 65,66,67,70,70,71,72,73
|
||
.BYTE 73,74,74,75,75,76,76,77
|
||
.BYTE 77,77,77,77,100,100,100,100,100,0
|
||
.PAGE
|
||
;TIMER: THIS ROUTINE USES DL11O IN ORDER TO TIME INTERVALS.
|
||
;THROUGH SIGNL IT TELLS THE DYNAMIC CALCULATORS WHEN TO RUN
|
||
;THE ROUTINE IS ENTERED ON EVER INTERUPT FROM DL11O
|
||
SIGNL: .WORD 0
|
||
CNTER: .WORD 0
|
||
TIMER:
|
||
CLR DL11OB ;SET FOR MORE TIMEING
|
||
DEC CNTER
|
||
IF LE
|
||
CLR SIGNL
|
||
MOV #<BRATE/10>/CRATE,CNTER
|
||
ENDF
|
||
RTI
|
||
.PAGE
|
||
;KBIN: THIS ROUTINE MONETORS KBI IN ORDER TO GET THE CONTROL
|
||
;SIGNALS FOR SHIP1, IT JUST TRANSLATES THEM INTO BIT SETTINGS.
|
||
;THAT THE DYNAMIC ROUTINES WILL ACT ON LATER.
|
||
KBIN:
|
||
MOV #101,KBIS
|
||
MOV KBIB,INP
|
||
BIC #177600,INP
|
||
CMP INP,#140
|
||
BLE KBIN1
|
||
SUB #40,INP
|
||
KBIN1: CMPB INP,#3
|
||
BNE .+6
|
||
JMP TO3
|
||
CMPB INP,#4
|
||
BNE .+6
|
||
JMP TO3
|
||
CMPB INP,#<' >
|
||
IF EQ
|
||
MOV #1,SHIP1+MISSL
|
||
ENDF
|
||
CMPB INP,#'L
|
||
BNE EKB1
|
||
COM SHIP1+SHLDUP
|
||
BEQ EKB1
|
||
CLR SHIP1+VANISH
|
||
EKB1: CMPB INP,#'J
|
||
IF EQ
|
||
CLR SHIP1+LACC
|
||
CLR SHIP1+ANACC
|
||
ENDF
|
||
CMPB INP,#'U
|
||
IF EQ
|
||
MOV #1,SHIP1+LACC
|
||
ENDF
|
||
CMPB INP,#'M
|
||
IF EQ
|
||
MOV #-1,SHIP1+LACC
|
||
ENDF
|
||
CMPB INP,#'H
|
||
IF EQ
|
||
MOV #1,SHIP1+ANACC
|
||
ENDF
|
||
CMPB INP,#'K
|
||
IF EQ
|
||
MOV #-1,SHIP1+ANACC
|
||
ENDF
|
||
CMPB INP,#'G
|
||
BNE EKB
|
||
COM SHIP1+VANISH
|
||
BEQ EKB
|
||
CLR SHIP1+SHLDUP
|
||
EKB: RTI
|
||
INP: 0
|
||
STARPT: 0
|
||
.PAGE
|
||
;DL11IN: THIS ROUTINE IS IDENTICAL TO KBIN BUT FOR SHIP2
|
||
DL11IN:
|
||
MOV #101,DL11IS
|
||
MOV R0,-(SP)
|
||
MOV DL11IB,R0
|
||
BIC #177600,R0
|
||
CMPB R0,#17
|
||
BNE .+10
|
||
TST (SP)+
|
||
JMP 166000
|
||
CMPB R0,#<' >
|
||
IF EQ
|
||
MOV #1,SHIP2+MISSL
|
||
ENDF
|
||
CMPB R0,#'L
|
||
BNE EDL1
|
||
COM SHIP2+SHLDUP
|
||
BEQ EDL1
|
||
CLR SHIP2+VANISH
|
||
EDL1: CMPB R0,#'J
|
||
IF EQ
|
||
CLR SHIP2+LACC
|
||
CLR SHIP2+ANACC
|
||
ENDF
|
||
CMPB R0,#'U
|
||
IF EQ
|
||
MOV #1,SHIP2+LACC
|
||
ENDF
|
||
CMPB R0,#'M
|
||
IF EQ
|
||
MOV #-1,SHIP2+LACC
|
||
ENDF
|
||
CMPB R0,#'H
|
||
IF EQ
|
||
MOV #1,SHIP2+ANACC
|
||
ENDF
|
||
CMPB R0,#'K
|
||
IF EQ
|
||
MOV #-1,SHIP2+ANACC
|
||
ENDF
|
||
CMPB R0,#'G
|
||
BNE EDL
|
||
COM SHIP2+VANISH
|
||
BEQ EDL
|
||
CLR SHIP2+SHLDUP
|
||
EDL: MOV (SP)+,R0
|
||
RTI
|
||
TOCT: 0
|
||
TIMOUT: CMP KLING,ENTER
|
||
BHI KRULE
|
||
BLO ERULE
|
||
MOV #TMS,ENDA+2
|
||
BR TO2
|
||
KRULE: MOV #KMS,ENDA+2
|
||
BR TO2
|
||
ERULE: MOV #EMS,ENDA+2
|
||
TO2: MOV #ENDMS,SCOPE1+2
|
||
MOV #350,TOCT
|
||
JMP START
|
||
TO3: CLR 175614
|
||
TSTB 175614
|
||
BPL .-4
|
||
MOV #17,175616
|
||
TSTB 175614
|
||
BPL .-4
|
||
CLR 175616
|
||
TSTB 175614
|
||
BPL .-4
|
||
CLR 15776
|
||
JMP 166000
|
||
.END BEGIN
|
||
|