; thick sine ; zero page GBASL = $26 GBASH = $27 YY = $69 ROW_SUM = $70 HGR_X = $E0 HGR_XH = $E1 HGR_Y = $E2 HGR_COLOR = $E4 HGR_PAGE = $E6 FRAME = $FC SUM = $FD SAVEX = $FE SAVEY = $FF thick_sine: ;================== ; create sinetable ldy #0 ; Y is 0 sinetable_loop: tya ; 2 and #$3f ; wrap sine at 63 entries ; 2 cmp #$20 php ; save pos/negative for later and #$1f cmp #$10 bcc sin_left ; blt sin_right: ; sec carry should be set here eor #$FF adc #$20 ; 32-X sin_left: tax lda sinetable_base,X ; 4+ plp bcc sin_done sin_negate: ; carry set here eor #$ff adc #0 ; FIXME: this makes things off by 1 sin_done: sta sinetable,Y iny bne sinetable_loop ; Y is 0 at this point? done: jmp done sinetable_base: ; 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 sinetable=$6000