texture = $1000 high_lookup = $1100 low_lookup = $1200 ;col = ( 8.0 + (sintable[xx&0xf]) ; + 8.0 + (sintable[yy&0xf]) ; ) / 2; init_plasma_texture: ldy #15 plasma_create_yloop: ldx #15 plasma_create_xloop: clc lda #15 adc sinetable,X adc sinetable,Y lsr plasma_lookup_smc: sta texture ; always starts at $d00 inc plasma_lookup_smc+1 dex bpl plasma_create_xloop dey bpl plasma_create_yloop rts ;============================== ; update plasma update_plasma: plasma_cycle_colors: ; cycle colors ldx #0 cycle_texture_loop: inc texture,X lda texture,X ; slow here but faster than doing it and #$f ; in the draw routine sta texture,X inx bne cycle_texture_loop ; make lookup ldx #0 cycle_lookup_loop: lda texture,X lsr tay color_lookup_smc: lda green_lookup,Y pha and #$f0 sta high_lookup,X pla and #$0f sta low_lookup,X inx bne cycle_lookup_loop rts .if 0 plot_frame: ; plot frame ldx #47 ; YY=0 plot_yloop: txa ; get (y&0xf)<<4 pha ; save YY asl asl asl asl sta CTEMP txa lsr ldy #$0f ; setup mask bcc plot_mask ldy #$f0 plot_mask: sty MASK jsr GBASCALC ; point GBASL/H to address in A ; after, A trashed, C is clear ;========== ldy #39 ; XX = 39 (countdown) plot_xloop: tya ; get x&0xf and #$f ora CTEMP ; get ((y&0xf)*16)+x tax plot_lookup: ; sta plot_lookup_smc+1 plot_lookup_smc: lda lookup,X ; load lookup, (y*16)+x ; lda lookup ; load lookup, (y*16)+x and #$f lsr tax lda colorlookup,X sta COLOR jsr PLOT1 ; plot at GBASL,Y (x co-ord in Y) dey bpl plot_xloop pla tax ; restore YY dex bpl plot_yloop bmi forever_loop .endif which_color: .byte $0 colorlookup: .word green_lookup,yellow_lookup,blue_lookup,red_lookup ; blue blue_lookup: .byte $55,$22,$66,$77,$ff,$77,$55,$00 ; red red_lookup: .byte $55,$11,$33,$bb,$ff,$bb,$55,$00 ; green green_lookup: .byte $55,$44,$cc,$ee,$ff,$ee,$55,$00 ; yellow yellow_lookup: .byte $55,$88,$99,$dd,$ff,$dd,$55,$00 sinetable: .byte $00,$03,$05,$07,$08,$07,$05,$03 .byte $00,$FD,$FB,$F9,$F8,$F9,$FB,$FD