dos33fsprogs/graphics/gr/plasma/oval_bot.s

175 lines
2.4 KiB
ArmAsm
Raw Normal View History

2021-10-17 03:40:01 +00:00
; 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
jmp oval
; 131 bytes
; 3f5 - 128 = 375