;===============================
	; hgr 14x14 draw sprite with mask
	;===============================
	; SPRITE in INL/INH
	; Location at CURSOR_X CURSOR_Y

	; sprite AT INL/INH
	; mask at INL/INH + 28

hgr_draw_sprite_14x14:

	; set up sprite pointers
	lda	INL
	sta	h1414_smc1+1
	sta	h1414_smc2+1
	lda	INH
	sta	h1414_smc1+2
	sta	h1414_smc2+2

;	clc
;	lda	INL
;	adc	#1
;	sta	h1414_smc2+1
;	lda	INH
;	adc	#0
;	sta	h1414_smc2+2

	; set up mask pointers
	clc
	lda	INL
	adc	#28
	sta	h1414_smc3+1
	sta	h1414_smc4+1
	lda	INH
	adc	#0
	sta	h1414_smc3+2
	sta	h1414_smc4+2

;	clc
;	lda	INL
;	adc	#29
;	sta	h1414_smc4+1
;	lda	INH
;	adc	#0
;	sta	h1414_smc4+2



	ldx	#0			; X is pointer offset
	stx	MASK			; actually counter

hgr_14x14_sprite_yloop:

	lda	MASK

	clc
	adc	CURSOR_Y		; add in cursor_y

	; calc GBASL/GBASH

	tay				; get output ROW into GBASL/H
	lda	hposn_low,Y
	sta	GBASL
	lda	hposn_high,Y
	sta	GBASH

	ldy	CURSOR_X

	lda	(GBASL),Y	; load background
h1414_smc3:
	and	$d000,X		; mask with sprite mask
h1414_smc1:
	ora	$d000,X		; or in sprite
	sta	(GBASL),Y	; store out

	inx
	iny

	lda	(GBASL),Y	; load background
h1414_smc4:
	and	$d000,X		; mask with sprite mask
h1414_smc2:
	ora	$d000,X		; or in sprite
	sta	(GBASL),Y	; store out

	inx

	inc	MASK
	lda	MASK

h1414_smc_len:
	cmp	#14
	bne	hgr_14x14_sprite_yloop

	rts


	;======================
	; save bg 14x14
	;======================

save_bg_14x14:

	ldx	#0
save_yloop:
	txa
	pha

	lsr

	clc
	adc	CURSOR_Y

	; calc GBASL/GBASH

	tax
	lda	hposn_low,X
	sta	GBASL
	lda	hposn_high,X
	sta	GBASH

	pla
	tax

	ldy	CURSOR_X

	lda	(GBASL),Y
	sta	save_sprite_14x14,X

	iny
	inx

	lda	(GBASL),Y
	sta	save_sprite_14x14,X

	inx

	cpx	#28
	bne	save_yloop

	rts

	;======================
	; restore bg 14x14
	;======================

restore_bg_14x14:

	ldx	#0
restore_yloop:
	txa				; current row
	lsr
	clc
	adc	CURSOR_Y		; add in y start point

	; calc GBASL/GBASH using lookup table

	tay
	lda	hposn_low,Y
	sta	GBASL
	lda	hposn_high,Y
	sta	GBASH

	ldy	CURSOR_X

	lda	save_sprite_14x14,X
	sta	(GBASL),Y

	inx
	iny

	lda	save_sprite_14x14,X
	sta	(GBASL),Y

	inx
	cpx	#28
	bne	restore_yloop

	rts

;====================
; save area
;====================

save_sprite_14x14:
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00