; Ovals

; zero page
GBASL	= $26
GBASH	= $27
MASK	= $2E
COLOR	= $30
;CTEMP	= $68
YY	= $69

FRAME	= $FC
SUM	= $FD
SAVEX	= $FE
SAVEY	= $FF

; soft-switches
FULLGR	= $C052
PAGE1	= $C054

; ROM routines
PLOT    = $F800                 ;; PLOT AT Y,A
PLOT1	= $F80E		;; PLOT at (GBASL),Y (need MASK to be $0f or $f0)
GBASCALC= $F847		;; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
SETCOL  = $F864		;; COLOR=A*17
SETGR	= $FB40



	;================================
	; Clear screen and setup graphics
	;================================
oval:

	jsr	SETGR		; set lo-res 40x40 mode
	bit	FULLGR		; make it 40x48

draw_oval:
	inc	FRAME

	ldx	#47		; YY
create_yloop:

	ldy	#39
	txa
	jsr	PLOT	; (Y,A) sets GBASL/GBASH, Y

create_xloop:

;	lda	#128
	lda	FRAME
	sta	SUM

	tya			; XX
	jsr	calcsine_div2

	txa			; YY
	jsr	calcsine

	; X (YY) is in SAVEX

	clc
;	sty	SAVEY		; XX
	tya
	adc	SAVEX		; XX + YY
	jsr	calcsine_div2

;	clc
;	adc	FRAME

	lsr				; double colors
	and	#$7			; mask
	tax
	lda	colorlookup,X

	jsr	SETCOL

	jsr	PLOT1		; PLOT (GBASL),Y

	ldx	SAVEX

	dey
	bpl	create_xloop

	dex
	bpl	create_yloop

	; X and Y both $FF

	bmi	draw_oval



calcsine_div2:
	lsr
calcsine:
	stx	SAVEX

	and	#$3f

	tax
	rol
	rol
	rol
	bcc	sinadd

sinsub:
	lda	#0
	lda	SUM
;	sec
	sbc	sinetable-32,X
	jmp	sindone

sinadd:
	lda	SUM
;	clc
	adc	sinetable,X

sindone:
	sta	SUM

	ldx	SAVEX
	rts


colorlookup:

; blue
;.byte $55,$77,$ff,$77,$66,$22,$55	; use 00 from sinetable
;.byte $00

; pink
.byte $55,$11,$33,$bb,$ff,$bb,$55
;.byte $00

; green
;.byte $55,$44,$cc,$ff,$cc,$44,$55	; use 00 from sinetable
;.byte $00

; orange
;.byte $99,$88,$ff,$44,$cc,$ff,$55	; use 00 from sinetable
;.byte $00

;.byte $00,$00,$55,$55,$77,$77,$ff,$ff
;.byte $77,$77,$66,$66,$22,$22,$55,$55


sinetable:
; this is actually (32*sin(x))

.byte $00,$03,$06,$09,$0C,$0F,$11,$14
.byte $16,$18,$1A,$1C,$1D,$1E,$1F,$1F
.byte $20,$1F,$1F,$1E,$1D,$1C,$1A,$18
.byte $16,$14,$11,$0F,$0C,$09,$06,$03
;.byte $00,$FD,$FA,$F7,$F4,$F1,$EF,$EC
;.byte $EA,$E8,$E6,$E4,$E3,$E2,$E1,$E1
;.byte $E0,$E1,$E1,$E2,$E3,$E4,$E6,$E8
;.byte $EA,$EC,$EF,$F1,$F4,$F7,$FA,$FD


;.byte $00,$06,$0C,$11,$16,$1A,$1D,$1F
;.byte $20,$1F,$1D,$1A,$16,$11,$0C,$06
;.byte $00,$FA,$F4,$EF,$EA,$E6,$E3,$E1
;.byte $E0,$E1,$E3,$E6,$EA,$EF,$F4,$FA

;.byte $00,$0C,$16,$1D
;.byte $20,$1D,$16,$0C
;.byte $00,$F4,$EA,$E3
;.byte $E0,$E3,$EA,$F4

