	;=================================
	; Simple Vertical LINE
	;=================================
	; line from (x,a) to (x,a+y)
	; todo: use Carry to say if X>255

hgr_vlin:
	; don't handle run of 0
	cpy	#0
	beq	done_hgr_vlin

	; get initial ROW into (GBASL)

	sta	current_row_smc+1	; save current A
;	sty	vlin_row_count

	lda	div7_table,X		; X is X1
	sta	x1_save_smc+1

	txa	; save X		; X is still X1
	pha

	ldx	HGR_COLOR
	lda	hgr_colortbl,X
	sta	HGR_BITS

	and	#$1			; only shift if in odd column?
	beq	vlin_no_shift_colors
	jsr	shift_colors
vlin_no_shift_colors:

	pla
	tax				; restore X is X1

	lda	mod7_table,X
	tax
	lda	vlin_masks,X		; get mask
	sta	vlin_mask_smc+1

	tya
	tax		; put line count into X

hgr_vlin_loop:

current_row_smc:
	ldy	#$dd	; get row info for Y1 into GBASL/GBASH
	lda	hposn_high,Y
hgr_vlin_page_smc:
	eor	#$00
	sta	GBASH
	lda	hposn_low,Y
	sta	GBASL

x1_save_smc:
	ldy	#$dd		; X1/7
	lda	(GBASL),Y
	eor	HGR_BITS
vlin_mask_smc:
	and	#$dd
	eor	(GBASL),Y
	sta	(GBASL),Y

	inc	current_row_smc+1
;	dec	vlin_row_count

	dex
	bne	hgr_vlin_loop

done_hgr_vlin:

	rts

;vlin_row_count:	.byte $00


vlin_masks:
	.byte $81,$82,$84,$88,$90,$A0,$C0


hgr_vlin_page_toggle:
	lda	hgr_vlin_page_smc+1
	eor	#$60
	sta	hgr_vlin_page_smc+1
	rts
