*SPACE WAR GAME - BY JEFFREY STANTON
	ORG	$4000
*ZERO PAGE EQUATES
SHPL	EQU	$F0
SHPH	EQU	$F1
SHPML	EQU	$F2
SHPMH	EQU	$F3
SHPMOL	EQU	$F4
SHPMOH	EQU	$F5
SL	EQU	$F6
SH	EQU	$F7
*PLAYER MISSILE EQUATES
PMBASE	EQU	$D407
PDATA	EQU	$8800
GRACTL	EQU	$D01D
DMACTL	EQU	$22F
SIZEP0	EQU	$D008
SIZEP1	EQU	$D009
COLPM0	EQU	$2C0
COLPM1	EQU	$2C1
HPOSP0	EQU	$D000
HPOSP1	EQU	$D001
HPOSM0	EQU	$D004
HPOSM1	EQU	$D005
PMADR	EQU	$C0
HITCLR	EQU	$D01E
*COLLISIONS
M0PL	EQU	$D008
M1PL	EQU	$D009
P0PL	EQU	$D00C
*MISC EQUATES
NDLIST	EQU	$9400		; ADR OF NEW DISPLAY LIST
SCREEN	EQU	$9000
COLOR0	EQU	$2C4
COLOR2	EQU	$2C6
COLOR4	EQU	$2C8
SETVBK	EQU	$E45C
XITVBK	EQU	$E462
STRIG0	EQU	$284
STICK	EQU	$278
RANDOM	EQU	$D20A
AUDF1	EQU	$D200
AUDC1	EQU	$D201
AUDF2	EQU	$D202
AUDC2	EQU	$D203
*DATA
SHAPEO	DB	$08,$08,$08,$1C,$1C,$1C,$3E,$3E,$22,$22,$00,$00
	DB	$00,$00,$01,$0E,$1E,$2E,$04,$04,$08,$00,$00,$00
	DB	$00,$00,$00,$70,$3C,$3F,$3C,$70,$00,$00,$00,$00
	DB	$00,$00,$08,$04,$04,$2E,$1E,$0E,$01,$00,$00,$00
	DB	$00,$22,$22,$3E,$3E,$1C,$1C,$1C,$08,$08,$08,$00
	DB	$00,$00,$08,$10,$10,$3A,$3C,$38,$40,$00,$00,$00
	DB	$00,$00,$00,$07,$1E,$7E,$1E,$07,$00,$00,$00,$00
	DB	$00,$00,$40,$38,$3C,$3A,$10,$10,$08,$00,$00,$00
SHPLO	DB	$00,$0C,$18,$24,$30,$3C,$48,$54
MSHAPE	DB	$02,$02,$01,$02,$03,$00,$02,$01
	DB	$02,$02,$01,$02,$03,$00,$02,$01
	DB	$08,$08,$04,$08,$0C,$00,$08,$04
	DB	$08,$08,$04,$08,$0C,$00,$08,$04
MISLO	DB	$68,$6A,$6C,$6E,$70,$72,$74,$76
MISLO1	DB	$78,$7A,$7C,$7E,$80,$82,$84,$86
SKFLAG	DB	$01,$02,$03,$04,$05,$05,$05,$04,$03,$02,$01
DLIST	DB	$70,$70,$70,$47,$00,$90,$02,$02
	DB	$02,$02,$02,$02,$02,$02,$02,$02
	DB	$02,$02,$02,$02,$02,$02,$02,$02
	DB	$02,$02,$02,$02,$02,$41,$00,$94
VTX	DB	$00,$01,$01,$01,$00,$FF,$FF,$FF	; THRUST VECTORS
VTY	DB	$FF,$FF,$00,$01,$01,$01,$00,$FF
SCLINE	DB	$33,$28,$29,$30,$03,$11,$00,$10,$10,$00	; SCORE LINE DATA
	DB	$00,$33,$28,$29,$30,$03,$12,$00,$10,$10
DERES	DB	$DD,$DD,$6B,$6B,$AA,$AA,$E6,$E6
	DB	$55,$55,$AA,$AA,$4A,$4A,$35,$35
	DB	$4A,$4A,$64,$64,$92,$92,$25,$25
	DB	$11,$11,$48,$48
*VARIABLES
VX	DB	0		; SHIP VELOCITY-HORIZ.
VX1	DB	0
VY	DB	0		; SHIP VELOCITY-VERT.
VY1	DB	0
VXP	DB	0		; SHIP VELOCITY-ALTERNATIVE
VXP1	DB	0
VYP	DB	0
VYP1	DB	0
XPM0	DS	1		; CURRENT X POS SHIP
XPM1	DS	1
YOLPM0	DB	10		; OLD Y POS SHIP
YOLPM1	DB	10
YMSOL0	DS	1		; OLD MISSILE Y POS
YMSOL1	DS	1
YPM0	DS	1		; CURRENT Y POS SHIP
YPM1	DS	1
DIR	DB	0		; SHIP DIRECTION
DIR1	DB	0
DIRM0	DS	1		; MISSILE TRAVEL DIRECTION
DIRM1	DS	1
COUNT	DB	0		; COUNTER FOR JOYSTICK
SCRCX	DB	0		; SCREEN X COUNTERS
SCRCX1	DB	1
SCRCY	DB	0		; SCREEN Y COUNTERS
SCRCY1	DB	1
FLAG	DS	1		; STICK BACK FLAG
SKIPX	DS	1		; CONTROLS RATE OF SHIP UPDATE - HORIZ.
SKIPX1	DS	1
SKIPY	DS	1		; CONTROLS RATE OF SHIP UPDATE - VERT.
SKIPY1	DS	1
MASK	DS	1
MASK0	DB	$FC		; MISSILE MASKS
MASK1	DB	$F3
XMIS0	DS	1		; HORIZ MISSILE POSITIONS
XMIS1	DS	1
YMIS0	DS	1		; VERTICAL MISSILE POSITIONS
YMIS1	DS	1
TMIS0	DS	1		; MISSILE TIMERS
TMIS1	DS	1
SCOR0D	DS	1		; DIGITS
SCOR0T	DS	1		; TENS
SCOR1D	DS	1
SCOR1T	DS	1
EXCOUNT	DS	1
KILL0	DS	1		; KILL FLAG
KILL1	DS	1
MBANG	DS	2		; SOUND COUNTERS-MISSILES
SBANG	DS	1		; SOUND COUNTER
DEREZ	DS	12		; TEMP STORAGE DURING DEREZ ROUTINE
START
*SETUP DLIST
	LDA	#$00		; NORMAL WIDTH
	STA	SIZEP1
	LDX	#$00
DLOOP	LDA	DLIST,X
	STA	NDLIST,X
	INX
	CPX	#$20		; 32 ELEMENTS
	BNE	DLOOP
	LDA	#>NDLIST
	STA	560
	LDA	#<NDLIST
	STA	561
*CLEAR SCREEN - 1K
CLRSCR	LDA	#>SCREEN	; SETUP POINTERS TO CLEAR SCREEN
	STA	SL
	LDA	#<SCREEN
	STA	SH
	LDY	#$00
	TYA
	LDX	#$04
AA2	STA	(SL),Y
	INY
	BNE	AA2		; CONTINUE UNTIL DONE WITH 256 BYTES
	INC	SH		; DO NEXT PAGE
	DEX
	BNE	AA2
*INITILIZE SCORE LINE
	LDX	#$00
AA1	LDA	SCLINE,X
	STA	SCREEN,X
	INX
	CPX	#$14
	BNE	AA1
	LDA	#$00		; ZERO OUT SCORE
	STA	SCOR0D
	STA	SCOR0T
	STA	SCOR1D
	STA	SCOR1T
	LDA	#$28		; YELLOW LE = RS,
	STA	COLOR0
	LDA	#$00		; BLACK BACKGROUND & BORDER
	STA	COLOR2
	STA	COLOR4
RESTART	LDA	#$00
	STA	EXCOUNT
	STA	KILL0
	STA	KILL1
*INITILIZE P/M GRAPHICS
	LDA	#$88
	STA	PMBASE
	LDA	#$03		; SET P/M GRAPHICS
	STA	GRACTL
	LDA	#$3E		; ENABLE P/M DMA SINGLE LINE
	STA	DMACTL
*INITILIZE SHIP 0
	LDA	#$00		; NORMAL WIDTH
	STA	SIZEP0
	LDA	#$7A		; PLAYER #0 122 BLUE-LUM 10
	STA	COLPM0
	LDA	#$50		; INITIAL POS SHIP X=72
	STA	XPM0
	STA	HPOSP0		;  TELL ANTIC
	LDA	#$40		; INITIAL POS SHIP Y=64
	CLC
	ADC	#$25		; 32+CENTER PM SHAPE 5 BELOW TOP
	STA	YPM0
*INITILIZE SHIP 1
	LDA	#$38		; PLAYER #1 58 RED-LUM 8
	STA	COLPM1
	LDA	#$A0		; INITIAL POS SHIP X-144
	STA	XPM1
	STA	HPOSP1
	LDA	#$60		; INITIAL POS SHIP Y=96
	CLC
	ADC	#$25
	STA	YPM1
*CLEAR P/M AREA
	LDA	#$00		; PDATAL
	STA	PMADR
	LDA	#<PDATA
	STA	PMADR+1
	LDY	#$00
	TYA
	LDX	#08
AA3	STA	(PMADR),Y
	INY
	BNE	AA3
	INC	PMADR+1		; NEXT 256 BYTES
	DEX
	BNE	AA3
*SET VBLANK
	LDA	#07
	LDX	#<FRAME		; HI BYTE VBLANK ROUTINE
	LDY	#>FRAME		; LO BYTE
	JSR	SETVBK
	LDA	#$00
*READ STICK
FOREVER	JMP	FOREVER
FRAME	NOP
*READ STICK EVERY 6 TIMES
CHKSTK	INC	COUNT
	LDA	COUNT
	CMP	#05		; READ STICK ONLY EVERY 6TH TIME
	BEQ	AA4
	JMP	P1
*SETUP CALL TO JOYSTICK-PLAYER 0
AA4	LDX	#$00		; PLAYER 0
	LDA	VXP,X		; SET PLAYER'S NEW VELOCITY TO OLD VELOCITY
	STA	VX
	LDA	VYP,X
	STA	VY
	JSR	JOYSTK
*UPDATE X & Y POSITIONS PLAYER #0
P1	LDX	#$00
	JSR	UPDAT
*.5
	JSR	PLSET0		; PLOT PLAYER 0
	JSR	PLOT
	LDA	SHPMOL		; STORE AS OLD Y POS FOR NEXT CYCLE
	STA	YOLPM0
CKSTK1	LDA	COUNT
	CMP	#$06		; READ STICK ONLY EVERY 6TH TIME
	BEQ	AB4
	JMP	P2
*SETUP CALL TO JOYSTICK-PLAYER 1
AB4	LDX	#$01		; PLAYER 1
	LDA	VXP,X
	STA	VX
	LDA	VYP,X
	STA	VY
	JSR	JOYSTK
	LDA	#$00		; RESET 4 CYCLE COUNTER
	STA	COUNT
*UPDATE X & Y POSITIONS PLAYER #1
P2	LDX	#$01
	JSR	UPDAT
*.5
	JSR	PLSET1		; PLOT PLAYER 1
	JSR	PLOT
	LDA	SHPMOL		; STORE AS OLD Y POS FOR NEXT CYCLE
	STA	YOLPM1
*FIRE MISSILE
	LDX	#$00
	JSR	MISSILE
	LDX	#$01
	JSR	MISSILE
*CHECK COLLISION
*CHECK FOR OLD COLLISION FIRST
	LDA	KILL0		; FIRST TEST FOR 2 PLAYER COLLISION
	CMP	#$00
	BEQ	AB10		; CAN'T BE 2 PLAYER COLLISION
	LDA	KILL1
	CMP	#$00
	BNE	REMOVE
AB10	LDA	KILL1		; TEST FOR DERES PLAYER#I
	CMP	#$00
	BNE	REMOV1
	LDA	KILL0		; TEST FOR DERES PLAYER#O
	CMP	#$00
	BNE	REMOV0
*CHECK FOR NEW COLLISION
	LDA	P0PL		; TEST P#O AGAINST P#1
	BNE	REMOVE
	LDA	M0PL		; TEST M#O AGAINST P#1
	CMP	#$02
	BEQ	REMOV1
	LDA	M1PL		; TEST M#1 AGAINST P#O
	CMP	#$01
	BEQ	REMOV0
	JMP	TESTE
REMOVE	LDA	#01
	STA	KILL0
	STA	KILL1
	JSR	EXPLO0
	JSR	EXPLO1
	INC	EXCOUNT		; NEXT EXPLOSION FRAME
	JMP	TESTE		; TEST IF EXPLOSION FINISHED
REMOV1	LDA	#$01
	STA	KILL1
	LDA	#$F0		; PUT MISSILE OFF SCREEN
	STA	HPOSM1
	JSR	EXPLO1
	INC	EXCOUNT
	JMP	TESTE
REMOV0	LDA	#$01
	STA	KILL0
	LDA	#$F0		; PUT MISSILE OFF SCREEN
	STA	HPOSM0
	JSR	EXPLO0
	INC	EXCOUNT
TESTE	LDA	EXCOUNT		; TEST IF DONE WITH DERES CYCLE
	CMP	#$30
	BNE	ENDCYCLE
	LDA	#$00		; SHUT OFF EXPLOSION SOUND
	STA	AUDC1
	STA	AUDC2
	STA	SBANG
	JSR	SCORE		; UPDATE SCORE
	LDA	#$00		; RESET
	STA	EXCOUNT
	STA	KILL0
	STA	KILL1
*REPOSITION SHIP AFTER KILL
	LDA	#$50		; SHIP 0
	STA	XPM0
	STA	HPOSP0
	LDA	#$65
	STA	YPM0
	LDA	#$A0		; SHIP 1
	STA	XPM1
	STA	HPOSP1
	LDA	#$85
	STA	YPM1
	LDA	#$00
	STA	VXP
	STA	VXP1
	STA	VYP
	STA	VYP1
ENDCYCLE	STA	HITCLR	; WRITING ANYTHING CLEARS COLLISION REGISIP
	JSR	DOSOUND
	JMP	XITVBK
*
*SUBROUTINE READ JOYSTICK
*INPUT X REG- # OF PLAYER
*VX,VY CURRENT PLAYER VELOCITY
*OUTPUT VXP,VYP PLAYER VELOCITY
JOYSTK	LDA	STICK,X
	AND	#$02		; DOWN BIT?
	BNE	CHKLF
	LDA	#01
	STA	FLAG		; YES STICK BACK
CHKLF	LDA	STICK,X
	AND	#$04		; LEFT BIT?
	BNE	CHKRT
	DEC	DIR,X
	LDA	DIR,X
	CMP	#$FF
	BNE	AC1
	LDA	#$07		; SET DIR TO 7
	STA	DIR,X
AC1	JMP	CHKFD
CHKRT	LDA	STICK,X
	AND	#$08		; RIGHT BIT?
	BNE	CHKFD
	INC	DIR,X
	LDA	DIR,X
	CMP	#08
	BNE	AC2
	LDA	#$00		; SET DIR TO 0
	STA	DIR,X
AC2	NOP
CHKFD	LDA	STICK,X
	AND	#$01		; UP BIT?
	BNE	AC9
*SET TO FREE FLOAT
	LDA	DIR,X
	TAY
	CLC
	LDA	VTX,Y		; GET X(DIR)THRUST VECTOR
	ADC	VX
	CMP	#$FA
	BNE	AC5
	LDA	#$FB		; CLIP TO -5
AC5	CMP	#$06
	BNE	AC6
	LDA	#$05		; CLIP TO 5
AC6	STA	VX		; STORE OLD OR CLIPPED VALUE
	STA	VXP,X
	CLC
	LDA	VTY,Y		; GET Y(DIR) THRUST VECTOR
	ADC	VY
	CMP	#$FA
	BNE	AC7
	LDA	#$FB		; CLIP TO -5
AC7	CMP	#$06
	BNE	AC8
	LDA	#$05		; CLIP TO 5
AC8	STA	VY		; STORE OLD OR CLIPPED VALUE
	STA	VYP,X
AC9	RTS
*SUBROUTINE TO UPDATE X & Y POSITIONS
UPDAT	NOP
*UPDATE Y POS, VARIABLE # TIMES
*TEST WHEN TO UPDATE
UPDATY	CLC
	LDA	VYP,X
	ADC	#$05		; SO NEGATIVE #'S IN TABLE TOO
	TAY
	LDA	SKFLAG,Y	; #TIMES TO SKIP IS RECIPRICAL OF SPEED
	STA	SKIPY,X
	INC	SCRCY,X		; INCREMENT Y COUNTER
	LDA	SCRCY,X
	CMP	SKIPY,X		; IF MATCH UPDATE Y POS
	BGE	AD1
	JMP	UPDATX
*UPDATE Y PLAYER POSITION
AD1	LDA	#$00		; PERFORM Y UPDATE
	STA	SCRCY,X
	LDA	VYP,X
	CMP	#$00		; IF HASN'T MOVED DON'T UPDATE
	BEQ	UPDATX
	BMI	AD2
	INC	YPM0,X
	LDA	YPM0,X
	CMP	#$E0		; HIT BOTTOM?
	BL	AD3
	LDA	#$18		; WRAP TO TOP
	STA	YPM0,X
AD3	JMP	UPDATX
AD2	DEC	YPM0,X
	LDA	YPM0,X
	CMP	#$18		; HIT TOP?
	BGE	UPDATX
	LDA	#$E0		; WRAP TO BOTTOM
	STA	YPM0,X
*UPDATE X POS VARIABLE # TIMES
UPDATX	CLC
	LDA	VXP,X
	ADC	#05		; SO NEG #'S IN TABLE TOO
	TAY
	LDA	SKFLAG,Y
	STA	SKIPX,X
	INC	SCRCX,X
	LDA	SCRCX,X
	CMP	SKIPX,X		; UPDATESCREEN POSITION EVERY SKIP TIME
	BGE	AE1
	JMP	EE
*UPDATE X PLAYER POSITION
AE1	LDA	#$00
	STA	SCRCX,X
	LDA	VXP,X
	CMP	#$00
	BEQ	AE3
	BMI	AE2
	INC	XPM0,X
	LDA	XPM0,X
	CMP	#$D8		; HIT RT SIDE?
	BL	AE4
	LDA	#$28		; WRAP TO LEFT
	STA	XPM0,X
AE4	JMP	AE3
AE2	DEC	XPM0,X
	LDA	XPM0,X
	CMP	#$28		; HIT LEFT?
	BGE	AE3
	LDA	#$D8		; WRAP TO RIGHT
	STA	XPM0,X
AE3	LDA	XPM0,X		; NEW VALUE
	STA	HPOSP0,X	; UPDATE ANTIC PLAYER HORIZ
EE	RTS
*PLOT PLAYER0 SETUP
PLSET0	LDA	YPM0		; CORRECTED YPOS
	STA	SHPML
	LDA	#<PDATA
	CLC
	ADC	#$04		; PLAYERO IS 1K BEYOND START
	STA	SHPMH
	STA	SHPMOH
	LDY	DIR
	LDA	SHPLO,Y		; POINTER TO CORRECT SHAPE
	STA	SHPL
	LDA	#<SHAPEO	; HI BYTE
	STA	SHPH
	LDA	YOLPM0
	STA	SHPMOL
	RTS
*PLOT PLAYER1 SETUP
PLSET1	LDA	YPM1		; CORRECTED YPOS
	STA	SHPML
	LDA	#<PDATA
	CLC
	ADC	#$05		; PLAYER1 IS 1.25K BEYOND START
	STA	SHPMH
	STA	SHPMOH
	LDY	DIR1
	LDA	SHPLO,Y		; POINTER TO CORRECT SHAPE
	STA	SHPL
	LDA	#<SHAPEO	; HI BYTE ;BOTH PLAYER SHAPES SAME
	STA	SHPH
	LDA	YOLPM1
	STA	SHPMOL
	RTS
*PUT SHAPE IN P/M AREA
PLOT	LDY	#$00		; COUNTER
	LDA	#$00		; NEED 0 TO ERASE EACH TIME
AF1	STA	(SHPMOL),Y	; ERASE OLD SHAPE FIRST
	INY
	CPY	#$0C
	BL	AF1
	LDY	#$00
AF2	LDA	(SHPL),Y	; GET BYTE FROM PROPER SHAPE TABLE
	STA	(SHPML),Y	; PUT IN P/M AREA
	LDA	SHPML		; TRANSFER NEW P/M POS TO OLD POS
	INY
	CPY	#$0C
	BL	AF2
	LDA	SHPML		; TRANSFER NEW P/M POS TO OLD POS
	STA	SHPMOL
	LDA	SHPMH
	STA	SHPMOH
	RTS
*SETUP TO PLOT MISSILE 0
MISET0	LDA	YMIS0		; MISSILE POSITION CORRECTED
	STA	SHPML
	LDA	#<PDATA
	CLC
	ADC	#$03		; MISSILES .75K BEYOND START
	STA	SHPMH
	STA	SHPMOH
	LDY	DIRM0
	LDA	MISLO,Y		; POINTER TO CORRECT MISSILE SHAPE
	STA	SHPL
	LDA	#<MSHAPE	; HI BYTE-BOTH P/M SHAPES SAME
	STA	SHPH
	LDA	YMSOL0
	STA	SHPMOL
	LDA	MASK0
	STA	MASK
	JSR	MPLOT
	LDA	SHPMOL
	STA	YMSOL0
	LDA	XMIS0
	STA	HPOSM0		; MISSILE 0 HORIZ POS
	RTS
*SETUP TO PLOT MISSILE 1
MISET1	LDA	YMIS1		; MISSILE POSITION CORRECTED
	STA	SHPML
	LDA	#<PDATA
	CLC
	ADC	#$03		; MISSILES .75K BEYOND START
	STA	SHPMH
	STA	SHPMOH
	LDY	DIRM1
	LDA	MISLO1,Y	; POINTER TO CORRECT MISSILE SHAPE
	STA	SHPL
	LDA	#<MSHAPE	; HI BYTE-BOTH P/M SHAPES SAME
	STA	SHPH
	LDA	YMSOL1
	STA	SHPMOL
	LDA	MASK1
	STA	MASK
	JSR	MPLOT
	LDA	SHPMOL
	STA	YMSOL1
	LDA	XMIS1
	STA	HPOSM1		; MISSILE 1 HORIZ POS
	RTS
*MISSILE SUBROUTINE -MISSILE TRACK ENDS AT COLLSION OR SCREEN ED(
MISSILE	LDA	STRIG0,X
	CMP	#$00
	BNE	AJ1
	LDA	TMIS0,X
	CMP	#$00
	BNE	AJ2
	LDA	#$10		; FLAG & INITIAL VOLUME FOR SHOT SOUND
	STA	MBANG,X
	INC	TMIS0,X		; INCREMENT TIMER
*ERASE OLD MISSILE & PUT AT SHIP
	LDA	DIR,X
	STA	DIRM0,X		; DIR MISSILE TO MOVE THROUGHOUT TRAVEL
	LDA	YPM0,X
	CLC
	ADC	#06		; CORRECT TO SHIP CENTER
	STA	YMIS0,X
	LDA	XPM0,X
	CLC
	ADC	#04		; CORRECT TO SHIP CENTER
	STA	XMIS0,X
	CPX	#00
	BNE	AJ10
	JSR	MISET0		; TO MISSILE PLOT SETUP & PLOT
	JMP	EXIT
AJ10	JSR	MISET1
	JMP	EXIT
AJ1	LDA	TMIS0,X
	CMP	#00
	BNE	AJ2
	JMP	EXIT
*MOVE MISSILE IN PROPER DIRECTION
AJ2	LDY	DIRM0,X
	LDA	VTX,Y
	ASL			; DOUBLE VELOCITY VECTOR
	CLC
	ADC	XMIS0,X
	STA	XMIS0,X
	LDA	VTY,Y
	ASL			; DOUBLE VELOCITY VECTOR
	CLC
	ADC	YMIS0,X
	STA	YMIS0,X
*HAS MISSILE HIT SCREEN EDGE
	CMP	#$20
	BGE	AJ3
	JMP	ERASEM		; EVA
AJ3	CMP	#$D8
	BL	AJ4
	JMP	ERASEM
AJ4	LDA	XMIS0,X
	CMP	#'0
	BGE	AJ5
	JMP	ERASEM
AJ5	CMP	#$D0
	BL	AJ6
	JMP	ERASEM
AJ6	NOP
	INC	TMIS0,X
*ERASE & REPLOT MISSILE
ERASE	CPX	#$00
	BNE	AJ8
	JSR	MISET0
	JMP	EXIT
AJ8	JSR	MISET1
	JMP	EXIT
*ERASE MISSILE OFF SCREEN
ERASEM	LDA	#$E0
	STA	XMIS0,X		; PLOT OFF SCREEN
	CPX	#$00
	BNE	AJ71
	JSR	MISET0
	JMP	AJ7
AJ71	JSR	MISET1
AJ7	LDA	#$00
	STA	TMIS0,X
EXIT	RTS
*PUT MISSILE SHAPE IN P/M AREA SUBROUTINE
MPLOT	LDY	#$00
AH1	LDA	(SHPMOL),Y	; LOAD OLD SHAPE
	AND	MASK		; MASK WITH PROPER MISSILE BEING MOVED
	STA	(SHPMOL),Y	; STOREING IT DOESN'T ERASE OTHER MISSILES
	INY
	CPY	#$02
	BL	AH1
	LDY	#$00
AH2	LDA	(SHPL),Y	; GET BYTE FROM CORRECT MISSILE SHAPE TABLE
	ORA	(SHPML),Y	; OR AGAINST CURRENT OTHER MISSILES
	STA	(SHPML),Y	; PUT IN MISSILE AREA
	INY
	CPY	#$02
	BL	AH2
	LDA	SHPML		; TRANSFER TO OLD POINTERS
	STA	SHPMOL
	LDA	SHPMH
	STA	SHPMOH
	RTS
*SUBROUTINES TO EXPLODE SHIPS
EXPLO0	JSR	PLSET0
	JSR	EXPLODE
	LDA	SHPMOL
	STA	YOLPM0
	RTS
EXPLO1	JSR	PLSET1
	JSR	EXPLODE
	LDA	SHPMOL
	STA	YOLPM1
	RTS
*DE-RES SHAPE
EXPLODE	LDY	#$00		; COUNTER
	LDA	#$00		; NEED 0 TO ERASE EACH TIME
AK1	STA	(SHPMOL),Y	; ERASE OLD SHAPE FIRST
	INY
	CPY	#$0C
	BL	AK1
	LDX	EXCOUNT		; COUNTER
	LDY	#$00		; START WITH OTH BYTE IN SHAPE
AK2	CPX	#$00		; FIRST TIME?
	BNE	AK22
	LDA	(SHPL),Y	; GET BYTE FROM PROPER SHAPE TABLE
	STA	DEREZ,Y		; DO THIS ONLY FIRST TIME
AK22	LDA	RANDOM
	ORA	RANDOM		; DEGRADE IMAGE RANDONILY
	AND	DEREZ,Y
	STA	DEREZ,Y		; TEMP STORE DEGRADED IMAGE
	LDA	(SHPL),Y
	AND	RANDOM		; DEGRADE IMAGE RANDOMILY
	AND	RANDOM
	AND	RANDOM
	AND	RANDOM
	ORA	DEREZ,Y		; COMBINE 2 DEGRADED IMAGES SO LESS DEGRADED
	STA	(SHPML),Y	; PUT IN P/M AREA
	INY			; NEXT BYTE IN SHAPE
	CPY	#$0C		; DONE?
	BL	AK2
	LDA	SHPML		; TRANSFER NEW P/M POS TO OLD POS
	STA	SHPMOL
	LDA	SHPMH
	STA	SHPMOH
	RTS
*SCORE SUBROUTINE
SCORE	LDA	KILL0
	BEQ	AM1
	INC	SCOR0D		; INC DIGITS #0
	LDA	SCOR0D		; TEST IF >9
	CMP	#$0A
	BNE	AM1
	INC	SCOR0T		; INC TENS #0
	LDA	#$00
	STA	SCOR0D		; ZERO DIGITS #0
AM1	LDA	KILL1
	BEQ	AM2
	INC	SCOR1D		; INC DIGITS #1
	LDA	SCOR1D
	CMP	#$0A
	BNE	AM2
	INC	SCOR1T
	LDA	#$00
	STA	SCOR1D
AM2	LDA	SCOR0T
	CLC
	ADC	#$10
	STA	SCREEN+7	; PLACE IN SCREEN MEMORY
	LDA	SCOR0D
	CLC
	ADC	#$10
	STA	SCREEN+8
	LDA	SCOR1T
	CLC
	ADC	#$10
	STA	SCREEN+18
	LDA	SCOR1D
	CLC
	ADC	#$10
	STA	SCREEN+19
	RTS
DOSOUND
	LDA	EXCOUNT		;  SHIP EXPLODING?
	BEQ MSOUND		; NO? THEN GO CHECK FOR SHOT SOUNDS
	CMP	#$01		; IS IT 1ST TIME
	BNE	AN1
	LDA	#$40		; THIS WILL BE DIVIDED BY 4 SO
	STA	SBANG		; VOLUME GOES FROM $10 TO 0 IN STEPS OF EVERY 4 VBLANKS
AN1	DEC	SBANG
	LDA	SBANG
	LSR
	LSR
	ORA	#$E0		;  LOWER IT
	STA	AUDF1		; AUDF1
	STA	AUDF2		; AUDF2
	AND	#$0F		; KEEP VOLUME
	STA	AUDC1		; DISTORTION 0
	ORA	#$80		; DISTORTION 8
	STA	AUDC2
	RTS
MSOUND
	LDX	#01
	LDY	#02		; AUDC1 & AUDC2 ARE 2 BYTES APART
AP1	LDA	MBANG,X
	BEQ	AP2		; IF 0 THEN NO SOUND
	DEC	MBANG,X		; LET IT COUNTDOWN TO 0 EVERY CYCLE
	LDA	MBANG,X
	STA	AUDC1,Y		; AUDC
	LDA	#$00
	STA	AUDF1,Y
AP2	DEY
	DEY
	DEX
	BPL	AP1
	RTS
