
HGR_SHAPE =	$1A
HGR_SHAPE_H =	$1B
HGR_BITS =	$1C
HGR_COUNT =	$1D

HMASK	=	$30

DSCTMP	=	$9D

HGR_DX	=	$D0
HGR_DX_H =	$D1
HGR_DY	=	$D2
HGR_QUADRANT =	$D3
HGR_E	=	$D4
HGR_E_H	=	$D5
HGR_X	=	$E0
HGR_X_H	=	$E1
HGR_Y	=	$E2
;HGR_COLOR =	$E4
HGR_HORIZ =	$E5
HGR_PAGE =	$E6


TXTCLR	=	$C050
MIXSET	=	$C053
LOWSCR	=	$C054
MIXCLR	=	$C052
HISCR	=	$C055










hgr2:
	; F3D8
	bit	HISCR		; BIT SW.HISCR Use PAGE2 ($C055)
	bit	MIXCLR		; BIT SW.MIXCLR
	lda	#$40		; HIRES Page 2 at $4000
	bne	sethpg
hgr:
	; F3E2
	lda	#$20		; HIRES Page 1 at $2000
	bit	LOWSCR		; BIT SW.LOWSCR Use PAGE1 ($C054)
        bit	MIXSET		;  BIT SW.MIXSET (Mixed text)
sethpg:
	; F3EA
	sta	HGR_PAGE
	lda	HIRES
	lda	TXTCLR
hclr:
	lda	#0			; black background
	sta	HGR_BITS
bkgnd:
	; F3F6
	lda	HGR_PAGE
	sta	HGR_SHAPE+1
	ldy	#0
	sty	HGR_SHAPE
bkgnd_loop:
	lda	HGR_BITS

	sta	(HGR_SHAPE),y

	jsr	color_shift

	iny
	bne	bkgnd_loop

	inc	HGR_SHAPE+1
	lda	HGR_SHAPE+1
	and	#$1f			; see if $40 or $60
	bne	bkgnd_loop
	rts



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

hposn:
	; F411
	sta	HGR_Y
	stx	HGR_X
	sty	HGR_X+1
	pha
	and	#$C0
	sta	GBASL
	lsr
	lsr
	ora	GBASL
	sta	GBASL
	pla
	; F423
	sta	GBASH
	asl
	asl
	asl
	rol	GBASH
	asl
	rol	GBASH
	asl
	ror	GBASL
	lda	GBASH
	and	#$1f
	ora	HGR_PAGE
	sta	GBASH

	; F438
	txa
	cpy	#0
	beq	hposn_2

	ldy	#35
	adc	#4
hposn_1:
	iny
	; f442
hposn_2:
	sbc	#7
	bcs	hposn_1
	sty	HGR_HORIZ
	tax
	lda	msktbl-$100+7,x		; LDA MSKTBL-$100+7,X  BIT MASK
					; MSKTBL=F5B2
                                        ; weird two's complement?

                                        ; if x=-6 = 249 = fa
                                        ; F5b2 - 1000 = f4b2
                                        ; f4b2+7 = f4b9
                                        ; -1 ff + f4b9 = f5b8 C0 6
                                        ; -2 fe + f4b9 = f5b7 A0 5
                                        ; -3 fd + f4b9 = f5b6 90 4
                                        ; -4 fc + f4b9 = f5b5 88 3
                                        ; -5 fb + f4b9 = f5b4 84 2
                                        ; -6 fa + f4b9 = f5b3 82 1
                                        ; -7 f9 + f4b9 = f5b2 81 0

	sta	HMASK
	tya
	lsr
	lda	HGR_COLOR
	sta	HGR_BITS
	bcs	color_shift
	rts

hplot0:
	; F457
	jsr	hposn
	lda	HGR_BITS
	eor	(GBASL),y
	and	HMASK
	eor	(GBASL),y
	sta	(GBASL),y
	rts

move_left_or_right:
	; F465
	bpl	move_right

	lda	HMASK
	lsr
	bcs	lr_2
	eor	#$c0
lr_1:
	sta	HMASK
	rts
lr_2:
	dey
	bpl	lr_3
	ldy	#39
lr_3:
	lda	#$c0
lr_4:
	sta	HMASK
	sty	HGR_HORIZ
	lda	HGR_BITS

color_shift:
	; F47E
	asl
	cmp	#$c0

	bpl	done_color_shift

	lda	HGR_BITS
	eor	#$7f
	sta	HGR_BITS

done_color_shift:
	rts

move_right:
	lda	HMASK
	asl
	eor	#$80
	bmi	lr_1
	lda	#$81
	iny
	cpy	#40
	bcc	lr_4
	ldy	#0
	bcs	lr_4


con_1c:	.byte $1c
con_03:	.byte $03
con_04:	.byte $04

move_up_or_down:
	; F4D3
	bmi	move_down

	clc
	lda	GBASH
	bit	con_1c		; CON.1C
	bne	mu_5
	asl	GBASL
	bcs	mu_3
	bit	con_03		; CON.03
	beq	mu_1
	adc	#$1f
	sec
	bcs	 mu_4
	; F4Eb
mu_1:
	adc	#$23
	pha
	lda	GBASL
	adc	#$b0
	bcs	mu_2
	adc	#$f0
	; f4f6
mu_2:
	sta	GBASL
	pla
	bcs	mu_4
mu_3:
	adc	#$1f
mu_4:
	ror	GBASL
mu_5:
	adc	#$fc
ud_1:
	sta	GBASH
	rts

	; f505
move_down:
	lda	GBASH
	adc	#$4
	bit	con_1c
	bne	ud_1
	asl	GBASL
	bcc	md_2
	adc	#$e0
	clc
	bit	con_04
	beq	md_3;
	lda	GBASL
	adc	#$50
	eor	#$f0
	beq	md_1
	eor	#$f0
md_1:
	sta	GBASL
	lda	HGR_PAGE
	bcc	md_3
md_2:
	adc	#$e0
md_3:
	ror	GBASL
	bcc	ud_1


hglin:

	; F53A
	pha
	sec
	sbc	HGR_X
	pha
	txa
	sbc	HGR_X+1
	sta	HGR_QUADRANT
	; F544
	bcs	hglin_1
	pla
	eor	#$ff
	adc	#1
	pha
	lda	#0
	sbc	HGR_QUADRANT
	; F550
hglin_1:
	sta	HGR_DX+1
	sta	HGR_E+1
	pla
	sta	HGR_DX
	sta	HGR_E
	pla
	sta	HGR_X
	stx	HGR_X+1
	tya
	clc
	sbc	HGR_Y
	bcc	hglin_2
	eor	#$ff
	adc	#$fe
hglin_2:
	; F568
	sta	HGR_DY
	sty	HGR_Y
	ror	HGR_QUADRANT
	sec
	sbc	HGR_DX
	tax
	lda	#$ff
	sbc	HGR_DX+1
	sta	HGR_COUNT
	ldy	HGR_HORIZ
	bcs	movex2		; always?
	; f57c
movex:
	asl
	jsr	move_left_or_right
	sec

	; f581
movex2:
	lda	HGR_E
	adc	HGR_DY
	sta	HGR_E
	lda	HGR_E+1
	sbc	#0
movex2_1:
	sta	HGR_E+1
	lda	(GBASL),y
	eor	HGR_BITS
	and	HMASK
	eor	(GBASL),y
	sta	(GBASL),y
	inx
	bne	movex2_2
	inc	HGR_COUNT
	beq	rts22
	; F59e
movex2_2:
	lda	HGR_QUADRANT
	bcs	movex
	jsr	move_up_or_down
	clc
	lda	HGR_E
	adc	HGR_DX
	sta	HGR_E
	lda	HGR_E+1
	adc	HGR_DX+1
	bvc	movex2_1


hplot_to:

	; F712
	sty	DSCTMP
	tay
	txa
	ldx	DSCTMP
	jsr	hglin
rts22:
	rts


	; Color in X
hcolor_equals:

	; F6E9
	; TODO: mask to be less than 8

	lda	colortbl,x
	sta	HGR_COLOR
	rts

colortbl:
	.byte	$00,$2A,$55,$7F,$80,$AA,$D5,$FF

