; change gold to open, player # in X, assume on grid

GOTGOLD	LDA	YPOS,X	; player Y
	STA	PFPTR
	LDA	XPOS,X	; player X
	ASR
	ASR
	TAX
	LDA	XBANK,X	; get bitmap bank
	STA	PFPTR+1
	LDA	XFBIT,X	; make bitmap mask
	EOR	#$FF
	STA	PFOUT
	LDY	#$07
.1	LDA	(PFPTR),Y
	AND	PFOUT
	TAX		; SuperCharger write
	LDA	SCDATA,X
	LDA	(PFPTR),Y
	DEY
	BPL	.1
	RTS

; Grid test functions, player # in X, assume on grid

GRID_U	LDA	YPOS,X	; check up
	SEC
	SBC	#$08
	CMP	#PF_YMAX
	BCS	GRID_Z
	TAY
	BCC	GRID_Y
GRID_D	LDA	YPOS,X	; check down
	CLC
	ADC	#$08
	CMP	#PF_YMAX
	BCS	GRID_Z
	TAY
	BCC	GRID_Y
GRID_L	LDY	YPOS,X
	LDA	XPOS,X
	ASR
	ASR
	TAX
	DEX
	CPX	#PF_XMAX
	BCS	GRID_Z
	BCC	GRID_X
GRID_R	LDY	YPOS,X
	LDA	XPOS,X
	ASR
	ASR
	TAX
	INX
	CPX	#PF_XMAX
	BCS	GRID_Z
	BCC	GRID_X
GRID	LDY	YPOS,X	; check current position
GRID_Y	LDA	XPOS,X
	ASR
	ASR		; implicit CLC
	TAX
GRID_X	LDA	XBANK,X	; get bitmap bank
	STA	PFPTR+1	; set up pointer
	LDA	#$00	
	STA	PFPTR
	LDA	XFBIT,X	; bitmpa mask
	TAX		; save mask
	LDA	#$80
	STA	PFOUT
GRID_1	TXA
	AND	(PFPTR),Y
	BEQ	GRID_2
	SEC
GRID_2	ROR	PFOUT
	INY
	BCC	GRID_1
	LDA	PFOUT
	RTS
GRID_Z	LDA	#PF_ROCK	; offscreen result
	RTS
GRID_DL	LDA	YPOS,X	; check down & left is dirt, then check left
	STA	YTMP
	CLC
	ADC	#$08
	CMP	#PF_YMAX
	BCS	GRID_Z
	TAY
	LDY	YPOS,X
	LDA	XPOS,X
	ASR
	ASR
	TAX
	DEX
	CPX	#PF_XMAX
	BCS	GRID_Z
	STX	XTMP
	JSR	GRID_X
	CMP	#PF_DIRT
	BNE	GRID_Z
	LDY	YTMP
	LDX	XTMP
	BCS	GRID_X	; carry set from previous GRID_2 test
GRID_DR	LDA	YPOS,X	; check down & right is dirt, then check right
	STA	YTMP
	CLC
	ADC	#$08
	CMP	#PF_YMAX
	BCS	GRID_Z
	TAY
	LDY	YPOS,X
	LDA	XPOS,X
	ASR
	ASR
	TAX
	INX
	CPX	#PF_XMAX
	BCS	GRID_Z
	STX	XTMP
	JSR	GRID_X
	CMP	#PF_DIRT
	BNE	GRID_Z
	LDY	YTMP
	LDX	XTMP
	BCS	GRID_X	; carry set from previous GRID_2 test
