                1  *PLAYER MISSILE INTERFACE TO BASIC
                2  *CODE BY JEFF STANTON & DAN PINAL
                3  *PLAYER SHAPES ARE STORED IN PAGE ONE P/M AREA
                4  *MAX LENGTH 64 BYTES EACH
                5  *
                6  HPOSP0	EQU	$D000
                7  SHAPEL	EQU	$D4		; LO BYTE WHERE SHAPE IS STORED
                8  SHAPEH	EQU	$D5		; HI BYTE
                9  SHPML	EQU	$CE		; LO BYTE TO DRAW OR ERASE SHAPE IN P/M AREA
               10  SHPMH	EQU	$CF		; HI BYTE
               11  *
               12  * CALL FROM BASIC
               13  * A=USR(1536, PLAYER #,PLAYER LEN,OLD Y,NEW Y,NEW X)
               14  	ORG	$600
               15  *	.TF	"D:PMSUB.OBJ"
               16  *TRANSFER VALUES IN USR FUNCTION THAT ARE STORED ON STACK TO SUBROUTINE
0600 68        17  START	PLA			; PULL # OF ARG'S OFF STACK
0601 A200      18  	LDX	#$00
0603 68        19  PULL	PLA			; DISCARD THE HIBYTE IT'S USELESS
0604 68        20  	PLA			; GET VALUE
0605 9D9106    21  	STA	PLAYNUM,X
0608 E8        22  	INX
0609 E005      23  	CPX	#$05		; GOT ALL 5 YET?
060B D0F6      24  	BNE	PULL
               25  *SETUP POINTERS TO MOVE SHAPE FROM STORAGE PLACE TO PLACE IN P/M AREA
060D AD9506    26  	LDA	NEWX		; HORIZONTAL POSITION
0610 AE9106    27  	LDX	PLAYNUM
0613 9D00D0    28  	STA	HPOSP0,X	; TELL ANTIC NEWX
0616 AD9606    29  	LDA	BASE		; HIBYTE OF PMBASE
0619 85D5      30  	STA	SHAPEH
061B 18        31  	CLC
061C 6904      32  	ADC	#$04		; SET FOR PLAYER 0 ADDRESS
061E 85CF      33  	STA	SHPMH
0620 AD9106    34  	LDA	PLAYNUM		; PLAYER
0623 C904      35  	CMP	#$04		; MISSILES?
0625 B02F      36  	BGE	MISSILES
0627 AA        37  	TAX			; PLAYER # BECOMES INDEX
0628 BD8506    38  	LDA	INDEX,X
062B 85D4      39  	STA	SHAPEL
062D CA        40  AA1	DEX			; WE INCREMENT SHPMH FOR EACH PLAYER UNLESS 0
062E 3004      41  	BMI	ERASE
0630 E6CF      42  	INC	SHPMH		; EACH INDIVIDUAL P/M AREA 256 BYTES APART
0632 D0F9      43  	BNE	AA1		; ALWAYS
               44  ERASE
0634 AD9306    45  	LDA	OLDY		; Y
0637 85CE      46  	STA	SHPML
0639 A900      47  	LDA	#$00		; ERASE WITH 0
063B A8        48  	TAY			; Y--O
063C 91CE      49  AB1	STA	(SHPML),Y	; STORE IN PROPER P/M AREA
063E C8        50  	INY			; NEXT BYTE
063F CC9206    51  	CPY	PLAYLEN		; DONE?
0642 90F8      52  	BL	AB1
0644 AD9406    53  	LDA	NEWY		; NEW Y
0647 85CE      54  	STA	SHPML		; SETUP POINTER TO PLOT
0649 A000      55  	LDY	#$00
064B B1D4      56  DRAW	LDA	(SHAPEL),Y	; LOAD BYTE FROM PLAYER SHAPE TABLE
064D 91CE      57  	STA	(SHPML),Y	; STORE IN PROPER P/M PLAYER AREA
064F C8        58  	INY			; NEXT BYTE
0650 CC9206    59  	CPY	PLAYLEN		; DONE?
0653 90F6      60  	BL	DRAW
0655 60        61  	RTS
               62  *COMES HERE WITH ACC=MISSILE# PLUS 4
0656 38        63  MISSILES SEC
0657 E904      64  	SBC	#$04		; GET PROPER MISSILE # (0-3)
0659 AA        65  	TAX			; SET INDEX FOR MISSILE MASKS
065A C6CF      66  	DEC	SHPMH		; SHPMH WAS SET FOR PLAYERO, MISSILES ARE 1
065C AD9306    67  	LDA	OLDY		; OLD/CURRENT Y POS.	; \PAGE LOWER
065F 85CE      68  	STA	SHPML
0661 A000      69  	LDY	#$00
0663 B1CE      70  UNDRAW	LDA	(SHPML),Y	; LOAD OLD MISSILES DATA
0665 3D8906    71  	AND	MASKS,X		; ERASE IT BUT DON'T DISTURB OTHER MISSILES
0668 91CE      72  	STA	(SHPML),Y	; STORE COMBINED MISSILE DATA IN P/M AREA
066A C8        73  	INY			; NEXT BYTE
066B CC9206    74  	CPY	PLAYLEN		; DONE?
066E 90F3      75  	BL	UNDRAW
0670 AD9406    76  	LDA	NEWY		; NEW Y POS.
0673 85CE      77  	STA	SHPML
0675 A000      78  	LDY	#$00
0677 B1CE      79  MDRAW	LDA	(SHPML),Y	; LOAD OLD MISSILES DATA
0679 1D8D06    80  	ORA	SHOTS,X		; MERGE SHOT DATA WITH OTHER MISSILES
067C 91CE      81  	STA	(SHPML),Y	; STORE NEW COMBINED MISSILE BYTE
067E C8        82  	INY			; NEXT BYTE
067F CC9206    83  	CPY	PLAYLEN		; DONE?
0682 90F3      84  	BL	MDRAW
0684 60        85  	RTS
0685 004080    86  INDEX	DB	$00,$40,$80,$C0	; LO BYTE OF STORED PLAYER SHAPES
0689 FCF3CF    87  MASKS	DB	$FC,$F3,$CF,$3F	; MISSILE MASKS
068D 030C30    88  SHOTS	DB	$03,$0C,$30,$C0	; MISSILE SHAPES
0691 00        89  PLAYNUM	DS	1
0692 00        90  PLAYLEN	DS	1
0693 00        91  OLDY	DS	1
0694 00        92  NEWY	DS	1
0695 00        93  NEWX	DS	1
0696 00        94  BASE	DS	1		; HI BYTE PMBASE IS POKED IN FROM BASIC
