User Tools

Site Tools


base:colorcycleplasma

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:colorcycleplasma [2015-04-17 04:30] (current)
Line 1: Line 1:
 +====== ColorCyclePlasma ======
 +
 +Source code for the end part of [[http://​noname.c64.org/​csdb/​release/?​id=11494|You Know The Routine]]/​Camelot. To get the binary bits'​n'​pieces needed, simply run this part and save it from there. If the music is turned off I think it's only the sine that is really needed to make it work.
 +
 +{{ccplasma.gif|}}
 +
 +<​code>​
 +;​----------------------------------------------------------------------------------------
 +; ColorCyclePlasma
 +;​----------------------------------------------------------------------------------------
 +; Coded by Cruzer/CML 2002-2004
 +; Released in "You Know The Routine"/​Camelot
 +; Compiled with mxass
 +;​----------------------------------------------------------------------------------------
 +; CONCEPT:
 +; A bunch of different "​colorcycler"​ frames are precalculated as sprites,
 +; and switched between on each rasterline in realtime, creating a plasmatic effect...
 +;​----------------------------------------------------------------------------------------
 +;0200-05ff *
 +;0600-07ff * pointer-restore
 +;0800-08ff * basic
 +;0900-0d7f * generated data
 +;​1000-227f ​  music
 +;2280-35ff * shower
 +;3400-3cff * plasmer
 +;​3d00-3fff ​  data
 +;4000-7fff * sprites/​pointer-screens
 +;​7fc0-a0ff ​  main
 +;​a280-abff ​  logo bitmap
 +;​ac00-afff ​  logo sprites
 +;b000-xxxx * mcpixel LUTs
 +;b800-xxxx * logo screens
 +;c000-ffff * more pointer-screens
 +;e000-ffff * more sprites/​pointer-screens
 +;​----------------------------------------------------------------------------------------
 +.la pointerrestore =  $0600
 +.la mod15 =           $0900
 +.la mod15d018 =       $0a00
 +.la mul4 =            $0b00
 +.la line =            $0c00
 +.la mul3 =            $0d00
 +.la xpointers1 =      $0e00
 +.la xpointers2 =      $0e60
 +.la xpointers3 =      $0ec0
 +.la xpointers4 =      $0f20
 +.la shower =          $2280
 +.la plasmer =         $3400
 +.la sine =            $3d00
 +.la div2mod15d018 =   $3f00 ;*
 +.la sprites =         $4000
 +.ba                   $7fc0
 +.la mcpixels =        $b000
 +
 +.la border=$d0ff
 +
 +.la width=96
 +.la height=63
 +.la cycles=15
 +
 +
 +;colors ...
 +
 +.la purple1 = 0
 +.la blue1   = 1
 +.la mixed1 ​ = 2
 +.la blue2   = 3
 +.la skummel1= 4
 +.la green1 ​ = 5
 +.la brown1 ​ = 6
 +.la red1    = 7
 +.la purple2 = 8
 +.la grey2   = 9
 +.la black   = 10
 +
 +;​zp-variables:​
 + ;bytes
 +.la mcl1=$c0 ;2
 +.la mcl2=$c2 ;2
 +.la mcl3=$c4 ;2
 +.la mcl4=$c6 ;2
 +.la sprs=$c8 ;2
 +.la tmp =$d0 ;2
 +.la cycle=$dd ;​1
 +.la x= $de ;1
 +.la y= $df ;1
 +.la xps= $e0 ;8
 +.la yps= $e8 ;8
 +
 +;​----------------------------------------------------------------------------------------
 +
 + sei
 +
 + lda #$36
 + sta $01
 +
 + jsr vicinit
 +
 + lda #$00
 + jsr $1000
 +
 +
 + cli
 + sei
 + lda #<irq1
 + sta $0314
 + lda #>irq1
 + sta $0315
 + asl $d019
 + lda #$7b
 + sta $dc0d
 + lda #$81
 + sta $d01a
 + lda #$0b
 + sta $d011
 + lda #$3c
 + sta $d012
 + cli
 +
 +
 + jsr fetchfx
 +
 + jsr makemcpixels
 + jsr makeluts
 + ;jsr clearsprites
 + jsr calc
 +
 + jsr pointerinit
 +
 + jsr showerinit
 + jsr plasmerinit
 + jsr pointerrestoreinit
 +
 + jsr logocolorupdate
 +
 + lda #$ff
 + sta $d015
 +
 + lda #$00
 + sta cycle
 +
 +
 + inc initialized
 + lda #$02
 +- cmp initialized
 + bne -
 + jmp outside
 +
 +initialized .by 0
 +
 +;​----------------------------------------------------------------------------------------
 +outside
 +
 +-loop
 +
 + lda go
 + beq -loop
 +
 + jsr plasmerinit
 +
 + lda #0
 + sta go
 +
 + lda calcon
 + beq +
 + jsr calc
 ++
 +
 + jmp -loop
 +
 +go .by 0
 +calcon .by 0
 +;​----------------------------------------------------------------------------------------
 +irq1
 + asl $d019
 +
 + lda border
 + sta rasbuf
 + lda #$01
 + sta border
 +
 + ;jsr $1003
 +
 + lda rasbuf
 + sta border
 +
 + lda initialized
 + bne +
 + jmp ri
 +
 ++
 + lda #<irq2
 + sta $0314
 + lda #>irq2
 + sta $0315
 + asl $d019
 + lda #$7b
 + sta $dc0d
 + lda #$81
 + sta $d01a
 + lda #$1b
 + sta $d011
 + lda #$36 ;3e
 + sta $d012
 +
 + inc initialized
 +
 + jmp ri
 +
 +rasbuf .by $00
 +;​----------------------------------------------------------------------------------------
 +
 +irq2
 +
 + asl $d019
 +
 + lda #$0b
 + sta border
 + sta border
 +
 + lda #$38 ;40
 + sta $d001
 + sta $d003
 + sta $d005
 + sta $d007
 + sta $d009
 + sta $d00b
 + sta $d00d
 + sta $d00f
 +
 +
 + lda #$ff
 + sta $d017
 +
 + lda #$70
 + ora $d011
 + sta $d011
 +
 + lda #$94
 + sta $dd00
 + lda #$ff
 + sta $d018
 +
 + ldx colors+0
 + lda colors+1
 + ldy colors+2
 + sta $d027
 + sta $d028
 + sta $d029
 + sta $d02a
 + sta $d02b
 + sta $d02c
 + sta $d02d
 + sta $d02e
 + stx $d025
 + sty $d026
 +
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 + nop
 +
 + ldy #$96
 + ldx #$94
 +
 +
 +
 + lda #$00
 + sta $d020
 + sta $d021
 +
 + jsr shower
 +
 +
 + lda #$c8
 + sta $d016
 +
 + ;show logo...
 +
 + lda $d011
 + ora #$20
 + sta $d011
 + lda #$e8
 + sta $d018
 + lda #$95
 + sta $dd00
 +; lda #$bc
 +; sta $d001
 +; sta $d003
 +; sta $d005
 +; sta $d007
 +; sta $d009
 +; sta $d00b
 +; sta $d00d
 +
 + lda #$ff
 + sta $d01d
 + sta $d01b
 + lda #$00
 + sta $d017
 + sta $d01c
 +
 + lda #$18
 + sta $d000
 + lda #$48
 + sta $d002
 + lda #$78
 + sta $d004
 + lda #$a8
 + sta $d006
 + lda #$d8
 + sta $d008
 + lda #$08
 + sta $d00a
 + lda #$38
 + sta $d00c
 + lda #%01100000
 + sta $d010
 + lda logocolors+1
 + sta $d027
 + sta $d028
 + sta $d029
 + sta $d02a
 + sta $d02b
 + sta $d02c
 + sta $d02d
 +
 +
 + lda #$03
 + sta border
 +
 + jsr pointerrestore
 +
 + jsr showlogo2
 +
 + inc border
 + jsr plasma2
 +
 + inc border
 + jsr scroll
 +
 + inc border
 + jsr $1003
 +
 + inc border
 + jsr fader
 + jsr fxchange
 + jsr logofade
 +
 +
 + ;init sprites for plasma...
 +
 + lda #$58
 + sta $d000
 + lda #$70
 + sta $d002
 + lda #$88
 + sta $d004
 + lda #$a0
 + sta $d006
 + lda #$b8
 + sta $d008
 + lda #$d0
 + sta $d00a
 + lda #$e8
 + sta $d00c
 + lda #$00
 + sta $d00e
 + lda #%10000000
 + sta $d010
 + lda #$00
 + sta $d01d
 + sta $d01b
 + lda #$ff
 + sta $d017
 + sta $d01c
 +
 +
 + lda #$0f
 + sta border
 +
 + jmp ri
 +
 +cnt .wo 0
 +logocolors .by $00,$00
 +;​----------------------------------------------------------------------------------------
 +ri
 + pla
 + tay
 + pla
 + tax
 + pla
 + rti
 +;​----------------------------------------------------------------------------------------
 +scroll
 +
 + lda scrollx
 + sec
 + sbc #2
 + sta scrollx
 + bmi +
 + rts
 ++
 + lda #$06
 + sta scrollx
 +
 + ldx #$00
 +- lda $04f1,x
 + sta $04f0,x
 + lda $04f2,x
 + sta $04f1,x
 + lda $04f3,x
 + sta $04f2,x
 + lda $04f4,x
 + sta $04f3,x
 + inx
 + inx
 + inx
 + inx
 + cpx #$28
 + bne -
 +
 + ldx scrollpnt
 +sl lda scrolltext,​x
 + cmp #$ff
 + bne +
 + lda #>​scrolltext
 + sta sl+2
 + lda #0
 + sta scrollpnt
 + lda #" "
 ++
 + tax
 + sec
 + sbc #$60
 + bcs +
 + txa
 ++ sta $0517
 +
 + inc scrollpnt
 + bne +
 + inc sl+2
 ++
 + lda scrollpnt
 + cmp #$33
 + beq +
 + rts
 ++
 +
 + lda #$01
 + ldx #$00
 +- sta $d8f0,x
 + inx
 + cpx #$28
 + bne -
 +
 + rts
 +
 +scrollx .by 0
 +scrollpnt .by 0
 +;​----------------------------------------------------------------------------------------
 +
 +fader
 +
 + lda go
 + beq +
 + rts
 ++
 +
 + ldy fadepnt+1
 + lda mul3,y
 + ldx fadecolor
 + cpx #10
 + beq +black
 + clc
 + adc mul24,x
 + tax
 + lda fadecolors+0,​x
 + sta colors+0
 + lda fadecolors+1,​x
 + sta colors+1
 + lda fadecolors+2,​x
 + sta colors+2
 + jmp +
 ++black
 + lda #$00
 + sta colors+0
 + sta colors+1
 + sta colors+2
 ++
 + lda fadeup
 + beq +
 + lda fadepnt
 + clc
 + adc #$80
 + sta fadepnt
 + lda fadepnt+1
 + adc #$00
 + sta fadepnt+1
 + cmp #$07
 + bne +
 + dec fadeup
 ++
 +
 + lda fadedown
 + beq +
 + lda fadepnt
 + sec
 + sbc #$80
 + sta fadepnt
 + lda fadepnt+1
 + sbc #$00
 + sta fadepnt+1
 + bne +
 + dec fadedown
 ++
 +
 + rts
 +
 +
 +colors .by 0,0,0
 +
 +fadepnt ​ .wo 0
 +fadeup ​  .by 1
 +fadedown .by 0
 +palette ​ .by 0
 +
 +fadecolor .by 0
 +
 +fadecolors
 +
 + .by $00,$00,$00
 + .by $00,$00,$09
 + .by $00,$00,$0b
 + .by $00,$09,$04
 + .by $00,$0b,$0a
 + .by $09,$04,$0f
 + .by $02,$0a,$07
 + .by $04,$0f,$01
 +
 + .by $00,$00,$00
 + .by $00,$00,$06
 + .by $00,$00,$0b
 + .by $00,$00,$0e
 + .by $00,$06,$0e
 + .by $06,$0b,$0f
 + .by $0b,$0e,$07
 + .by $0e,$03,$01
 +
 + .by $00,$00,$00
 + .by $00,$09,$02
 + .by $09,$02,$04
 + .by $02,$04,$0e
 + .by $04,$0e,$03
 + .by $0e,$03,$01
 + .by $04,$0e,$03
 + .by $02,$04,$0e
 +
 + .by $00,$00,$00
 + .by $00,$00,$06
 + .by $00,$0b,$0e
 + .by $09,$0c,$03
 + .by $0b,$0f,$01
 + .by $0c,$0f,$01
 + .by $0b,$0c,$03
 + .by $09,$0b,$0e
 +
 + ;.by $00,$00,$00
 + ;.by $00,$00,$06
 + ;.by $00,$06,$0e
 + ;.by $06,$0e,$0f
 + ;.by $0e,$0f,$01
 + ;.by $0f,$01,$01
 + ;.by $0e,$0f,$01
 + ;.by $06,$0e,$0f
 +
 + .by $00,$00,$00
 + .by $00,$0b,$08
 + .by $00,$0c,$0a
 + .by $06,$0f,$07
 + .by $0e,$01,$01
 + .by $03,$0f,$07
 + .by $0e,$0c,$0a
 + .by $06,$0b,$08
 +
 + .by $00,$00,$00
 + .by $00,$00,$0b
 + .by $00,$0b,$05
 + .by $0b,$05,$0d
 + .by $05,$03,$01
 + .by $03,$01,$01
 + .by $05,$03,$01
 + .by $08,$05,$03
 +
 + .by $00,$00,$00
 + .by $00,$00,$08
 + .by $00,$08,$0a
 + .by $0b,$0a,$0f
 + .by $08,$0f,$01
 + .by $0a,$0f,$01
 + .by $08,$0a,$0f
 + .by $0b,$08,$0a
 +
 + .by $00,$00,$00
 + .by $00,$00,$02
 + .by $00,$02,$0a
 + .by $00,$0a,$0f
 + .by $02,$0f,$01
 + .by $0a,$01,$01
 + .by $02,$0f,$0f
 + .by $00,$02,$0a
 +
 + .by $00,$00,$00
 + .by $00,$00,$04
 + .by $00,$04,$0a
 + .by $09,$0a,$0f
 + .by $04,$0f,$01
 + .by $0a,$0f,$01
 + .by $04,$0a,$0f
 + .by $09,$04,$0a
 +
 + .by $00,$00,$00
 + .by $00,$00,$0b
 + .by $00,$0b,$0c
 + .by $0b,$0c,$0f
 + .by $0c,$0f,$01
 + .by $0f,$01,$01
 + .by $0c,$0f,$01
 + .by $0b,$0c,$0f
 +
 +
 +mul24 .by 0,​24,​24*2,​24*3,​24*4,​24*5,​24*6,​24*7,​24*8,​24*9,​24*10
 +;​----------------------------------------------------------------------------------------
 +logofade
 +
 + ;rts
 +
 + lda donefading
 + beq +
 + rts
 ++
 + lda logopnt+1
 + sec
 + sbc #$34
 + bcs +
 + lda #$00
 ++ asl
 + tax
 + lda logofadecolors,​x
 + sta logocolors
 + lda logofadecolors+1,​x
 + sta logocolors+1
 +
 + lda logopnt
 + clc
 + adc #$80
 + sta logopnt
 + lda logopnt+1
 + adc #$00
 + ;and #$07
 + sta logopnt+1
 + cmp #$10+$34
 + bne logocolorupdate
 + inc donefading
 + rts
 +
 +logocolorupdate
 +
 + lda logocolors
 + asl
 + asl
 + asl
 + asl
 +
 + ldx #$27
 +-
 + sta $b828,x
 + sta $b850,x
 + sta $b878,x
 + sta $bca0,x
 + sta $bcc8,x
 + sta $bcf0,x
 + dex
 + bpl -
 +
 + rts
 +
 +
 +logopnt .wo 0
 +
 +logofadecolors
 +
 + .by $00,$00
 + .by $00,$00
 + .by $00,$00
 + .by $00,$00
 + .by $00,$00
 + .by $00,$00
 + .by $00,$06
 + .by $06,$0b
 + .by $0b,$0e
 + .by $0e,$0f
 + .by $0f,$07
 + .by $03,$01
 + .by $0f,$01
 + .by $0e,$07
 + .by $0b,$0f
 + .by $06,$0e
 +
 +
 +donefading .by 0
 +
 +;​----------------------------------------------------------------------------------------
 +
 +showlogo2
 +
 + ;show lower half of logo...
 +
 + lda #$00
 + sta border
 +
 + lda #$d0
 +- cmp $d012
 + bne -
 +
 + inc border
 +
 + lda #$d1
 + sta $d001
 + sta $d003
 + sta $d005
 + sta $d007
 + sta $d009
 + sta $d00b
 + sta $d00d
 +
 + nop
 + nop
 + nop
 + nop
 +
 + lda #$f8
 + sta $d018
 +
 + ;jsr showscroll
 +
 + rts
 +
 +;​----------------------------------------------------------------------------------------
 +showscroll
 +
 + inc border
 +
 + lda #$e8
 +- cmp $d012
 + bne -
 +
 + inc border
 +
 + lda #$1b
 + sta $d011
 + lda #$16
 + sta $d018
 + lda #$07
 + sta $dd00
 + lda scrollx
 + sta $d016
 +
 + rts
 +
 +;​----------------------------------------------------------------------------------------
 +fxchange
 +
 + lda go
 + beq +
 + rts
 ++
 +
 + lda fxcnt
 + sec
 + sbc #$01
 + sta fxcnt
 + lda fxcnt+1
 + sbc #$00
 + sta fxcnt+1
 +
 + bmi +newfx
 +
 ++fadecheck
 +
 + lda fxcnt+1
 + bne +
 + lda fxcnt+0
 + cmp #$28
 + bne +
 +
 + lda #1
 + sta fadedown
 + lda #0
 + sta fadeup
 + lda #$00
 + sta fadepnt+0
 + lda #$07
 + sta fadepnt+1
 +
 ++
 + rts
 +
 ++newfx
 +
 + lda fx
 + clc
 + adc #1
 + cmp numfx
 + bne +
 + lda #1
 ++ sta fx
 +
 + lda #1
 + sta go
 +
 +fetchfx
 +
 + ;fetch parameters for new fx ...
 +
 + lda fx
 + asl
 + tax
 + lda fxs,x
 + sta $fe
 + lda fxs+1,x
 + sta $ff
 +
 + ldy #$00
 + lda ($fe),y
 + sta plapa+0
 + iny
 + lda ($fe),y
 + sta plapa+1
 + iny
 + lda ($fe),y
 + sta spread+0
 + iny
 + lda ($fe),y
 + sta spread+1
 + iny
 +
 + lda ($fe),y
 + sta fadecolor
 + iny
 +
 + lda ($fe),y
 + sta fxcnt
 + iny
 + lda ($fe),y
 + sta fxcnt+1
 + iny
 +
 + lda ($fe),y
 + sta calcon
 + iny
 +
 + ldx #$00
 +-
 + lda ($fe),y
 + sta xpa,x
 + iny
 + inx
 + cpx #8
 + bne -
 +
 + ldx #$00
 +-
 + lda ($fe),y
 + sta ypa,x
 + iny
 + inx
 + cpx #8
 + bne -
 +
 +
 +
 + lda #1
 + sta fadeup
 + lda #0
 + sta fadedown
 + lda #$00
 + sta fadepnt
 + sta fadepnt+1
 +
 + rts
 +
 +fx    .by 0
 +fxcnt .wo $0100
 +
 +numfx .by 12
 +fxs .wo fx0,​fx1,​fx2,​fx2b,​fx3,​fx4,​fx7a,​fx5,​fx6,​fx7,​fx8,​fx9
 +
 +
 + ;by speed (plasma)
 + ;by spread (plasma)
 + ;by color
 + ;wo duration
 + ;by calc on/off
 + ;wo xpa (cycler)
 + ;wo ypa (cycler)
 +
 +
 +fx0
 + .by 0,0
 + .by 0,0
 + .by black
 + .wo $0133
 + .by 1
 + .wo $fb80,​$fa50,​$05ee,​$0433
 + .wo $0601,​$fb30,​$05e0,​$fa17
 +
 +fx1
 + .by $02,$01
 + .by $03,$02
 + .by brown1
 + .wo $0240
 + .by 1
 + .wo $fb80,​$fa50,​$05ee,​$0433
 + .wo $0601,​$fb30,​$05e0,​$fa17
 +
 +fx2
 + .by $fe,$03
 + .by $ff,$02
 + .by purple1
 + .wo $0240
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +fx2b
 + .by $01,$02
 + .by $fe,$ff
 + ;.by $01,$02
 + ;.by $fe,$01
 + ;.by $02,$ff
 + ;.by $fd,$04
 + .by green1
 + .wo $0240
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +fx3
 + .by $fd,$04
 + .by $ff,$02
 + .by blue2
 + .wo $0240
 + .by 1
 + .wo $fd80,​$fc50,​$03ee,​$0233
 + .wo $0401,​$fc30,​$04e0,​$fb17
 +
 +fx4
 + .by $02,$ff
 + .by $ff,$02
 + .by mixed1
 + .wo $0200
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +fx5
 + .by $fd,$02
 + .by $fe,$03
 + .by grey2
 + .wo $0190
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +fx6
 + .by $fd,$04
 + .by $ff,$02
 + .by purple2
 + .wo $0200
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +fx7a
 + .by $01,$02
 + .by $ff,$01
 + .by red1
 + .wo $0199
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +fx7
 + .by $01,$02
 + .by $ff,$01
 + .by skummel1
 + .wo $0280
 + .by 1
 + .wo $f880,​$fa50,​$06ee,​$0833
 + .wo $0601,​$f730,​$05e0,​$f817
 +
 +fx8
 + .by $01,$fe
 + .by $fd,$04
 + .by blue1
 + .wo $0240
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +fx9
 + .by $02,$01
 + .by $03,$03
 + ;.by $fe,$03
 + ;.by $ff,$02
 + .by purple1
 + .wo $0280
 + .by 0
 + .wo 0,0,0,0
 + .wo 0,0,0,0
 +
 +
 +;fx8
 +; .by $01,$02
 +; .by $ff,$01
 +; .by skummel1
 +; .wo $0400
 +; .by 1
 +; .wo $ff80,​$ff50,​$01ee,​$0133
 +; .wo $0101,​$ff30,​$01e0,​$ff17
 +
 +;​----------------------------------------------------------------------------------------
 +
 +
 +plasma2
 +
 + ldx plap+0
 + ldy plap+1
 +
 + jsr plasmer
 +
 + lda plap+0
 + clc
 + adc plapa+0
 + sta plap+0
 + lda plap+1
 + clc
 + adc plapa+1
 + sta plap+1
 +
 + rts
 +
 +
 +
 +plap .by $00,$27
 +plapa .by $01,$fe
 +
 +d018s .by $0f,​$1f,​$2f,​$3f,​$4f,​$5f,​$6f,​$7f,​$8f,​$9f,​$af,​$bf,​$cf,​$df,​$ef,​$ef
 +;​----------------------------------------------------------------------------------------
 +
 +plasmerinit
 +
 +
 + lda #<​plasmer
 + sta $fe
 + lda #>​plasmer
 + sta $ff
 +
 + ldy #$00
 +-
 + lda plasmersrc1,​y
 + sta plasmersrc,​y
 + iny
 + cpy #17
 + bne -
 +
 + ldx #0
 +
 +-loop
 +
 + ldy #0
 +-
 + lda plasmersrc,​y
 + sta ($fe),y
 + iny
 + cpy #17
 + bne -
 +
 + tya
 + clc
 + adc $fe
 + sta $fe
 + lda #0
 + adc $ff
 + sta $ff
 +
 + tya
 + clc
 + adc +ps1+1
 + sta +ps1+1
 + lda #0
 + adc +ps1+2
 + sta +ps1+2
 +
 +
 +
 + cpx #33
 + bne +
 +
 + ldy #0
 +-
 + lda jsrshowscroll,​y
 + sta ($fe),y
 + iny
 + cpy #3
 + bne -
 +
 + tya
 + clc
 + adc $fe
 + sta $fe
 + lda #0
 + adc $ff
 + sta $ff
 +
 + tya
 + clc
 + adc +ps1+1
 + sta +ps1+1
 + lda #0
 + adc +ps1+2
 + sta +ps1+2
 +
 +
 ++
 +
 + lda #35
 + clc
 + adc +ss1+1
 + sta +ss1+1
 + lda #0
 + adc +ss1+2
 + sta +ss1+2
 +
 + lda +sl1+1
 + clc
 + adc spread+0
 + sta +sl1+1
 + lda +sl2+1
 + clc
 + adc spread+1
 + sta +sl2+1
 +
 + inx
 + cpx #height*2
 + bne -loop
 +
 +
 + ldy #$00
 + lda #$60
 + sta ($fe),y
 +
 + rts
 +
 +
 +spread
 + .by $ff,$02
 +
 +
 +plasmersrc
 +
 ++sl1 lda sine,x
 + clc
 ++sl2 adc sine,y
 + ror
 ++ps1 sta plasmer+12
 + lda div2mod15d018
 ++ss1 sta shower+6
 +
 +
 +plasmersrc1
 +
 + lda sine,x
 + clc
 + adc sine,y
 + ror
 + sta plasmer+12
 + lda div2mod15d018
 + sta shower+6
 +
 +
 +jsrshowscroll
 +
 + jsr showscroll
 +
 +
 +;​----------------------------------------------------------------------------------------
 +
 +pointerrestoreinit
 +
 +
 + lda #<​pointerrestore
 + sta $fe
 + lda #>​pointerrestore
 + sta $ff
 +
 +-loop
 +
 + lda +lx+1
 + and #$0f
 + bne +
 +
 + ldy #0
 +-
 + lda pointerrestoresrc1,​y
 + sta ($fe),y
 + iny
 + cpy #5
 + bne -
 +
 + jmp +skip
 ++
 +
 + ldy #0
 +-
 + lda pointerrestoresrc2,​y
 + sta ($fe),y
 + iny
 + cpy #4
 + bne -
 +
 ++skip
 +
 +
 + tya
 + clc
 + adc $fe
 + sta $fe
 + lda #0
 + adc $ff
 + sta $ff
 +
 + lda +sx+2
 + clc
 + adc #$04
 + sta +sx+2
 + sta +sx2+2
 + cmp #$7f
 + bne +
 + lda #$43
 + sta +sx+2
 + sta +sx2+2
 + inc +sx+1
 + inc +sx2+1
 + inc +lx+1
 +
 + lda +sx+1
 + beq +end
 +
 ++ inc +lx+1
 +
 + jmp -loop
 +
 ++end
 +
 + ldy #$00
 + lda #$60
 + sta ($fe),y
 +
 + rts
 +
 +
 +pointerrestoresrc1
 +
 ++lx ldx #$00
 ++sx stx $43f8
 +
 +pointerrestoresrc2
 +
 + inx
 ++sx2 stx $43f8
 +
 +;​----------------------------------------------------------------------------------------
 +
 +
 +
 +showerinit
 +
 +
 + lda #<vics
 + sta $fc
 + lda #>vics
 + sta $fd
 +
 + lda #<shower
 + sta $fe
 + lda #>shower
 + sta $ff
 +
 + lda #$00
 + sta cnt
 +
 +-loop
 + ldy #$00
 +-
 + lda showersrc,y
 + sta ($fe),y
 + iny
 + cpy #35
 + bne -
 +
 + tya
 + clc
 + adc $fe
 + sta $fe
 + lda #$00
 + adc $ff
 + sta $ff
 +
 + lda +d11+1
 + clc
 + adc #$01
 + and #$07
 + ora #$18
 + sta +d11+1
 +
 +
 +
 + ;change vic-updates (d001/​pointers)
 +
 + lda #$ff
 + sta +v1+3
 + sta +v2+3
 + sta +v3+3
 + sta +v4+3
 + lda #$d0
 + sta +v1+4
 + sta +v2+4
 + sta +v3+4
 + sta +v4+4
 +
 +
 + ldx #$00
 +
 +-vicloop
 +
 + ldy #$00
 + lda ($fc),y
 + cmp cnt
 + bne +
 +
 + iny
 + lda ($fc),y
 + sta +v1+1,x
 + iny
 + lda ($fc),y
 + sta +v1+3,x
 + iny
 + lda ($fc),y
 + sta +v1+4,x
 +
 + lda $fc
 + clc
 + adc #$04
 + sta $fc
 + lda $fd
 + adc #$00
 + sta $fd
 +
 + inx
 + inx
 + inx
 + inx
 + inx
 +
 + jmp -vicloop
 ++
 +
 +
 + lda #$ff
 + sta +dd+1
 + lda #$d0
 + sta +dd+2
 + lda cnt
 + cmp #39
 + bne +
 + lda #$8e
 + sta +dd
 + lda #$00
 + sta +dd+1
 + lda #$dd
 + sta +dd+2
 ++
 + lda cnt
 + cmp #81
 + bne +
 + lda #$8c
 + sta +dd
 + lda #$00
 + sta +dd+1
 + lda #$dd
 + sta +dd+2
 ++
 +
 + inc cnt
 + lda cnt
 + cmp #height*2
 + beq +
 + jmp -loop
 ++
 +
 + ldy #$00
 + lda #$60
 + sta ($fe),y
 +
 + rts
 +
 +
 +showersrc
 +
 ++d11 lda #$18
 + sta $d011
 + lda #$00
 + sta $d018
 ++dd sty $dd00
 ++v1 lda #$00
 + sta $d0ff
 ++v2 lda #$00
 + sta $d0ff
 ++v3 lda #$00
 + sta $d0ff
 ++v4 lda #$00
 + sta $d0ff
 + nop
 + nop
 +
 +
 +vics
 + .by $01,​$62,​$01,​$d0
 + .by $01,​$62,​$03,​$d0
 + .by $01,​$62,​$05,​$d0
 + .by $01,​$62,​$07,​$d0
 + .by $02,​$62,​$09,​$d0
 + .by $02,​$62,​$0b,​$d0
 + .by $02,​$62,​$0d,​$d0
 + .by $02,​$62,​$0f,​$d0
 +
 + .by $2d,​$8c,​$01,​$d0
 + .by $2d,​$8c,​$03,​$d0
 + .by $2d,​$8c,​$05,​$d0
 + .by $2d,​$8c,​$07,​$d0
 + .by $2e,​$8c,​$09,​$d0
 + .by $2e,​$8c,​$0b,​$d0
 + .by $2e,​$8c,​$0d,​$d0
 + .by $2e,​$8c,​$0f,​$d0
 +
 + .by $2f,​$80,​$f8,​$43
 + .by $2f,​$81,​$f8,​$47
 + .by $2f,​$82,​$f8,​$4b
 + .by $2f,​$83,​$f8,​$4f
 + .by $30,​$84,​$f8,​$53
 + .by $30,​$85,​$f8,​$57
 + .by $30,​$86,​$f8,​$5b
 + .by $30,​$87,​$f8,​$5f
 + .by $31,​$88,​$f8,​$63
 + .by $31,​$89,​$f8,​$67
 + .by $31,​$8a,​$f8,​$6b
 + .by $31,​$8b,​$f8,​$6f
 + .by $32,​$8c,​$f8,​$73
 + .by $32,​$8d,​$f8,​$77
 + .by $32,​$8e,​$f8,​$7b
 +
 + .by $33,​$90,​$f9,​$43
 + .by $33,​$91,​$f9,​$47
 + .by $33,​$92,​$f9,​$4b
 + .by $33,​$93,​$f9,​$4f
 + .by $34,​$94,​$f9,​$53
 + .by $34,​$95,​$f9,​$57
 + .by $34,​$96,​$f9,​$5b
 + .by $34,​$97,​$f9,​$5f
 + .by $35,​$98,​$f9,​$63
 + .by $35,​$99,​$f9,​$67
 + .by $35,​$9a,​$f9,​$6b
 + .by $35,​$9b,​$f9,​$6f
 + .by $36,​$9c,​$f9,​$73
 + .by $36,​$9d,​$f9,​$77
 + .by $36,​$9e,​$f9,​$7b
 +
 + .by $37,​$a0,​$fa,​$43
 + .by $37,​$a1,​$fa,​$47
 + .by $37,​$a2,​$fa,​$4b
 + .by $37,​$a3,​$fa,​$4f
 + .by $38,​$a4,​$fa,​$53
 + .by $38,​$a5,​$fa,​$57
 + .by $38,​$a6,​$fa,​$5b
 + .by $38,​$a7,​$fa,​$5f
 + .by $39,​$a8,​$fa,​$63
 + .by $39,​$a9,​$fa,​$67
 + .by $39,​$aa,​$fa,​$6b
 + .by $39,​$ab,​$fa,​$6f
 + .by $3a,​$ac,​$fa,​$73
 + .by $3a,​$ad,​$fa,​$77
 + .by $3a,​$ae,​$fa,​$7b
 +
 + .by $3b,​$b0,​$fb,​$43
 + .by $3b,​$b1,​$fb,​$47
 + .by $3b,​$b2,​$fb,​$4b
 + .by $3b,​$b3,​$fb,​$4f
 + .by $3c,​$b4,​$fb,​$53
 + .by $3c,​$b5,​$fb,​$57
 + .by $3c,​$b6,​$fb,​$5b
 + .by $3c,​$b7,​$fb,​$5f
 + .by $3d,​$b8,​$fb,​$63
 + .by $3d,​$b9,​$fb,​$67
 + .by $3d,​$ba,​$fb,​$6b
 + .by $3d,​$bb,​$fb,​$6f
 + .by $3e,​$bc,​$fb,​$73
 + .by $3e,​$bd,​$fb,​$77
 + .by $3e,​$be,​$fb,​$7b
 +
 + .by $3f,​$c0,​$fc,​$43
 + .by $3f,​$c1,​$fc,​$47
 + .by $3f,​$c2,​$fc,​$4b
 + .by $3f,​$c3,​$fc,​$4f
 + .by $40,​$c4,​$fc,​$53
 + .by $40,​$c5,​$fc,​$57
 + .by $40,​$c6,​$fc,​$5b
 + .by $40,​$c7,​$fc,​$5f
 + .by $41,​$c8,​$fc,​$63
 + .by $41,​$c9,​$fc,​$67
 + .by $41,​$ca,​$fc,​$6b
 + .by $41,​$cb,​$fc,​$6f
 + .by $42,​$cc,​$fc,​$73
 + .by $42,​$cd,​$fc,​$77
 + .by $42,​$ce,​$fc,​$7b
 +
 + .by $43,​$d0,​$fd,​$43
 + .by $43,​$d1,​$fd,​$47
 + .by $43,​$d2,​$fd,​$4b
 + .by $43,​$d3,​$fd,​$4f
 + .by $44,​$d4,​$fd,​$53
 + .by $44,​$d5,​$fd,​$57
 + .by $44,​$d6,​$fd,​$5b
 + .by $44,​$d7,​$fd,​$5f
 + .by $45,​$d8,​$fd,​$63
 + .by $45,​$d9,​$fd,​$67
 + .by $45,​$da,​$fd,​$6b
 + .by $45,​$db,​$fd,​$6f
 + .by $46,​$dc,​$fd,​$73
 + .by $46,​$dd,​$fd,​$77
 + .by $46,​$de,​$fd,​$7b
 +
 + .by $47,​$e0,​$fe,​$43
 + .by $47,​$e1,​$fe,​$47
 + .by $47,​$e2,​$fe,​$4b
 + .by $47,​$e3,​$fe,​$4f
 + .by $48,​$e4,​$fe,​$53
 + .by $48,​$e5,​$fe,​$57
 + .by $48,​$e6,​$fe,​$5b
 + .by $48,​$e7,​$fe,​$5f
 + .by $49,​$e8,​$fe,​$63
 + .by $49,​$e9,​$fe,​$67
 + .by $49,​$ea,​$fe,​$6b
 + .by $49,​$eb,​$fe,​$6f
 + .by $4a,​$ec,​$fe,​$73
 + .by $4a,​$ed,​$fe,​$77
 + .by $4a,​$ee,​$fe,​$7b
 +
 + .by $4b,​$f0,​$ff,​$43
 + .by $4b,​$f1,​$ff,​$47
 + .by $4b,​$f2,​$ff,​$4b
 + .by $4b,​$f3,​$ff,​$4f
 + .by $4c,​$f4,​$ff,​$53
 + .by $4c,​$f5,​$ff,​$57
 + .by $4c,​$f6,​$ff,​$5b
 + .by $4c,​$f7,​$ff,​$5f
 + .by $4d,​$f8,​$ff,​$63
 + .by $4d,​$f9,​$ff,​$67
 + .by $4d,​$fa,​$ff,​$6b
 + .by $4d,​$fb,​$ff,​$6f
 + .by $4e,​$fc,​$ff,​$73
 + .by $4e,​$fd,​$ff,​$77
 + .by $4e,​$fe,​$ff,​$7b
 +
 + .by $5a,​$bc,​$01,​$d0
 + .by $5a,​$bc,​$03,​$d0
 + .by $5a,​$bc,​$05,​$d0
 + .by $5a,​$bc,​$07,​$d0
 + .by $5b,​$bc,​$09,​$d0
 + .by $5b,​$bc,​$0b,​$d0
 + .by $5b,​$bc,​$0d,​$d0
 +
 + .by $00
 +
 +;​----------------------------------------------------------------------------------------
 +
 +pointerinit
 +
 +
 +;sprite setup:
 +;
 +;cycle#00: 00,​10,​20,​30.... [bank 1]
 +;          80,​90,​a0,​b0.... [bank 3] (bank 1 pnters changed here by show routine)
 +;          80,​90,​a0,​b0.... [bank 1] (bank 3 pnters changed here by show routine)
 +;cycle#01: 01,​11,​21,​31.... [bank 1]
 +;          81,​91,​a1,​b1.... [bank 3] (-"-)
 +;          81,​91,​a1,​b1.... [bank 1] (-"-)
 +;cycle#02: 02,​12,​22,​32.... [bank 1]
 +;          82,​92,​a2,​b2.... [bank 3] (-"-)
 +;          82,​92,​a2,​b2.... [bank 1] (-"-)
 +;...       ...
 +;​cycle#​0e ​ 0e,1e...
 +;
 +;
 +
 +
 + lda #$f8
 + sta $fc
 + lda #$43
 + sta $fd
 +
 + lda #$f8
 + sta $fe
 + lda #$c3
 + sta $ff
 +
 + lda #$00
 + sta cycle
 +
 +-loop
 +
 + ldy #$00
 + lda cycle
 +-
 + sta ($fc),y
 + ldx #$34
 + ora #$80
 + sei
 + stx $01
 + sta ($fe),y
 + ldx #$36
 + stx $01
 + cli
 + iny
 + and #$7f
 + clc
 + adc #$10
 + bpl -
 +
 + lda $fd
 + clc
 + adc #$04
 + sta $fd
 + ora #$80
 + sta $ff
 +
 + inc cycle
 + lda cycle
 + cmp #cycles
 + bne -loop
 +
 +
 + lda #$ff
 + ldy #$07
 +-
 + sta $fff8,y
 + dey
 + bpl -
 +
 + rts
 +
 +
 +;​----------------------------------------------------------------------------------------
 +
 +vicinit
 +
 +
 + lda #$00
 + sta $d020
 + sta $d021
 +
 + lda #$ff
 + sta $d018
 + lda #$96
 + sta $dd00
 +
 + lda #$00
 + tax
 +-
 + sta $d800,x
 + sta $d900,x
 + sta $da00,x
 + sta $db00,x
 + inx
 + bne -
 +
 +
 + ;set logo spr-pnts...
 +
 + ldx #$06
 + lda #$b6
 +- sta $bbf8,x
 + sec
 + sbc #$01
 + dex
 + bpl -
 +
 + ldx #$06
 + lda #$bd
 +- sta $bff8,x
 + sec
 + sbc #$01
 + dex
 + bpl -
 +
 +
 + rts
 +;​----------------------------------------------------------------------------------------
 +calc
 +
 +
 + lda #$00
 + ldx #$07
 +-
 + sta xps,x
 + sta yps,x
 + dex
 + bpl -
 +
 + lda xpa+0
 + sta +a0+1
 + lda xpa+1
 + sta +a1+1
 + lda xpa+2
 + sta +a2+1
 + lda xpa+3
 + sta +a3+1
 + lda xpa+4
 + sta +a4+1
 + lda xpa+5
 + sta +a5+1
 + lda xpa+6
 + sta +a6+1
 + lda xpa+7
 + sta +a7+1
 +
 +
 + jsr calcxpointers
 +
 + lda #0
 + sta y
 +
 +
 +-loop1
 +
 + jsr calcline
 +
 + lda #cycles-1
 + sta cycle
 +
 + jsr paintline2
 +
 + inc y
 + lda y
 + cmp #height
 + bne -loop1
 +
 + rts
 +
 +;​----------------------------------------------------------------------------------------
 +makeluts
 +
 + lda #0
 + tax
 +-loop
 + sta mod15,x
 + tay
 + lda d018s,y
 + sta mod15d018,x
 + tya
 + clc
 + adc #1
 + cmp #15
 + bne +
 + lda #0
 ++ inx
 + bne -loop
 +
 +
 + ldx #0
 + ldy #0
 +-loop
 + lda mod15d018,x
 + sta div2mod15d018,​y
 + sta div2mod15d018+1,​y
 + inx
 + iny
 + iny
 + bne -loop
 +
 +
 + ldx #0
 +-loop
 + txa
 + asl
 + asl
 + sta mul4,x
 + inx
 + bne -loop
 +
 +
 + ldx #$00
 +-loop
 + txa
 + sta tmp
 + asl
 + clc
 + adc tmp
 + sta mul3,x
 + inx
 + bne -loop
 +
 + rts
 +
 +;​----------------------------------------------------------------------------------------
 +makemcpixels
 +
 + ;make 4 luts for mc-pixels (1 for each mc-x-pos in a byte)
 +
 + lda #%11000000
 + sta mask
 +
 + ldx #>​mcpixels
 + stx smp+2
 + inx
 + stx smp+5
 +
 +-loop2
 + ldx #$00
 + ldy #$00
 +-loop1
 +
 + lda mcs+1,y
 + and mask
 +smp sta mcpixels,x
 + sta mcpixels+$0100,​x
 + txa
 + cmp mcs+2,y
 + bne +
 + iny
 + iny
 ++
 + inx
 + bne -loop1
 +
 + inc smp+2
 + inc smp+2
 + inc smp+5
 + inc smp+5
 +
 + lsr mask
 + lsr mask
 + bcc -loop2
 +
 + rts
 +
 +
 +mcs
 + .by $00,​%00000000
 + .by $22,​%01010101
 + .by $44,​%10101010
 + .by $66,​%11111111
 + .by $98,​%10101010
 + .by $ba,​%01010101
 + .by $dc,​%00000000
 + .by $00
 +
 +; .by $00,​%00000000
 +; .by $24,​%01010101
 +; .by $48,​%10101010
 +; .by $6c,​%11111111
 +; .by $90,​%10101010
 +; .by $b4,​%01010101
 +; .by $d8,​%00000000
 +; .by $00
 +
 +
 +mask .by %11000000
 +;​----------------------------------------------------------------------------------------
 +
 +calcline
 +
 +
 + ;reset x-pointers...
 +
 + lda xpss+0
 + sta xps+0
 + lda xpss+1
 + sta xps+1
 + lda xpss+2
 + sta xps+2
 + lda xpss+3
 + sta xps+3
 + lda xpss+4
 + sta xps+4
 + lda xpss+5
 + sta xps+5
 + lda xpss+6
 + sta xps+6
 + lda xpss+7
 + sta xps+7
 +
 +
 + lda yps+1
 + sta +ya1+1
 + lda yps+3
 + sta +ya3+1
 + lda yps+5
 + sta +ya5+1
 + lda yps+7
 + sta +ya7+1
 +
 +
 + ldx #width-1
 +
 +-loop
 +
 + ;get x-pointers...
 +
 + lda xpointers1,​x
 + sta sl1+1
 + lda xpointers2,​x
 + sta sl2+1
 + lda xpointers3,​x
 + sta sl3+1
 + lda xpointers4,​x
 + sta sl4+1
 +
 + ;add sines ...
 +
 ++ya1 ldy #1
 +sl1 lda sine,y
 + clc
 ++ya3 ldy #3
 +sl2 adc sine,y
 + clc
 ++ya5 ldy #5
 +sl3 adc sine,y
 + clc
 ++ya7 ldy #7
 +sl4 adc sine,y
 + sta line,x
 +
 + dex
 + bpl -loop
 +
 +
 + ;update y pointers...
 +
 + lda yps+0
 + clc
 + adc ypa+0
 + sta yps+0
 + lda yps+1
 + adc ypa+1
 + sta yps+1
 + lda yps+2
 + clc
 + adc ypa+2
 + sta yps+2
 + lda yps+3
 + adc ypa+3
 + sta yps+3
 + lda yps+4
 + clc
 + adc ypa+4
 + sta yps+4
 + lda yps+5
 + adc ypa+5
 + sta yps+5
 + lda yps+6
 + clc
 + adc ypa+6
 + sta yps+6
 + lda yps+7
 + adc ypa+7
 + sta yps+7
 +
 +
 + rts
 +
 +
 +
 +calcxpointers
 +
 + ;calc all xpointers once, so calcline doesn'​t have to calc the same
 + ;on each line...
 +
 +
 + ;reset x-pointers...
 +
 + ldy xpss+0
 + sty xps+0
 + lda xpss+1
 + sta xps+1
 + lda xpss+2
 + sta xps+2
 + lda xpss+3
 + sta xps+3
 + lda xpss+4
 + sta xps+4
 + lda xpss+5
 + sta xps+5
 + lda xpss+6
 + sta xps+6
 + lda xpss+7
 + sta xps+7
 +
 +
 + ldx #width-1
 +
 +-loop
 +
 + ;update x pointers...
 +
 + tya
 + clc
 ++a0 adc #0
 + tay
 + lda xps+1
 ++a1 adc #1
 + sta xps+1
 + sta xpointers1,​x
 +
 + lda xps+2
 + clc
 ++a2 adc #2
 + sta xps+2
 + lda xps+3
 ++a3 adc #3
 + sta xps+3
 + sta xpointers2,​x
 +
 + lda xps+4
 + clc
 ++a4 adc #4
 + sta xps+4
 + lda xps+5
 ++a5 adc #5
 + sta xps+5
 + sta xpointers3,​x
 +
 + lda xps+6
 + clc
 ++a6 adc #6
 + sta xps+6
 + lda xps+7
 ++a7 adc #7
 + sta xps+7
 + sta xpointers4,​x
 +
 + dex
 + bpl -loop
 +
 + rts
 +
 +
 +
 +xpss .wo $1000,​$4444,​$0000,​$dddd
 +xpa .wo $fd80,​$fc50,​$03ee,​$0233
 +ypa .wo $0401,​$fc30,​$04e0,​$fb17
 +;​----------------------------------------------------------------------------------------
 +
 +paintline2
 +
 + ;​pixel-convert line to sprites
 + ;(all cycles)
 +
 + ;optimized so all 15 cycles are stored for each byte at a time
 + ;​(mcpixel-luts must be $200 long)
 +
 +
 + ;args:
 + ;- line ($00-$ff value for each pixel)
 + ;- y
 +
 +
 + ;calc sprite target adr...
 +
 + ldy y
 + ldx mod21,y
 + lda mul3,x
 + clc
 + adc #<​sprites
 + sta sprs
 +
 + ldy y
 + ldx div21,y
 + lda ssadd,x
 + ora #>​sprites
 + sta sprs+1
 + sta tmp
 +
 + clc
 + lda #>​mcpixels
 + sta mcl1+1
 + adc #$02
 + sta mcl2+1
 + adc #$02
 + sta mcl3+1
 + adc #$02
 + sta mcl4+1
 +
 + ldx #​23 ;​x=byte_xpos
 +
 +-loop
 +
 + ;or 4 pixels together...
 +
 + ldy mul4,x
 +
 + lda line+3,y
 + sta mcl1 ;​zp-adrs
 + lda line+2,y
 + sta mcl2
 + lda line+1,y
 + sta mcl3
 + lda line+0,y
 + sta mcl4
 +
 + ldy #0
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + sta (sprs),y
 +
 + ldy #17
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$40
 + sta (sprs),y
 +
 + ldy #17*2
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$80
 + sta (sprs),y
 +
 + ldy #17*3
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$c0
 + sta (sprs),y
 +
 + inc sprs+1
 + ldy #17*4
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$00
 + sta (sprs),y
 +
 + ldy #17*5
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$40
 + sta (sprs),y
 +
 + ldy #17*6
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$80
 + sta (sprs),y
 +
 + ldy #17*7
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$c0
 + sta (sprs),y
 +
 + inc sprs+1
 + ldy #17*8
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$00
 + sta (sprs),y
 +
 + ldy #17*9
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$40
 + sta (sprs),y
 +
 + ldy #17*10
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$80
 + sta (sprs),y
 +
 + ldy #17*11
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$c0
 + sta (sprs),y
 +
 + inc sprs+1
 + ldy #17*12
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$00
 + sta (sprs),y
 +
 + ldy #17*13
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$40
 + sta (sprs),y
 +
 + ldy #17*14
 + lda (mcl1),y
 + ora (mcl2),y
 + ora (mcl3),y
 + ora (mcl4),y
 + ldy #$80
 + sta (sprs),y
 +
 + lda tmp
 + sta sprs+1
 +
 +
 + lda spraddlo,x
 + clc
 + adc sprs
 + sta sprs
 + bcc+
 + lda spraddhi,x
 + adc sprs+1
 + sta sprs+1
 + sta tmp
 ++
 +
 + dex
 + bmi +
 + jmp -loop
 ++
 +
 + rts
 +
 +
 +ssadd .by $00,$a0,$20
 +spraddlo .by $fe,​1,​1,​$fe,​1,​1,​$fe,​1,​1,​$fe,​1,​1,​$fe,​1,​1,​$fe,​1,​1,​$fe,​1,​1,​$fe,​1,​1
 +spraddhi .by $03,​0,​0,​$03,​0,​0,​$03,​0,​0,​$03,​0,​0,​$03,​0,​0,​$03,​0,​0,​$03,​0,​0,​$03,​0,​0
 +div21 .by 0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0
 +      .by 1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1,​1
 +      .by 2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2,​2
 +mod21 .by 0,​1,​2,​3,​4,​5,​6,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17,​18,​19,​20
 +      .by 0,​1,​2,​3,​4,​5,​6,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17,​18,​19,​20
 +      .by 0,​1,​2,​3,​4,​5,​6,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17,​18,​19,​20
 +;​----------------------------------------------------------------------------------------
 +
 +scrolltext
 +
 + .text " ​                                                           "
 +
 + .text "​....."​
 + .text "​You'​ve made it to part 5 of 5, which means it's the "The End" part... ​   "
 + .text "​Creditz: ​ Code'​n'​stuff by Cruzer, except for tunes by "
 + .text "Drax, Fanta, JCH and Jeff, and scrolltext in part 4 by Slammer... ​    "​
 +
 + .text "Next follows some nerd info about the routines to which you've been subjected, so you can get to know 'em a bit better... ​  "​
 +
 + .text "​Disclaimer:​ I haven'​t seen all C64 demos ever released, "
 + .text "so please excuse me if I make an ass outta myself "
 + .text "by taking credit for inventing something which was allready invented in the 1st place! ​ "
 +
 + .text "OK, with that outta the way, let's start the braggin'​... :-)    "
 + .text " ​    "​
 +
 + .text "#01 - Wobbler... ​  A new gfx-mode is born... ​ "
 + .text "​Haven'​t really settled for a kewl name for it yet, but I guess you could call it "
 + .text "​something like "2nd Pixel FLI" or whatever... ​ "
 + .text "​It'​s almost normal multicolor resolution, with each pixel having its own independent "
 + .text "color like in 4x4-mode. ​ "
 + .text "But in 4x4 there'​s only 4 pixels per char - here there'​s 16, "
 + .text "so it's ofcourse a bit more tricky to make big stuff in this mode, "
 + .text "but I still think it's got some potential... ​  "​
 +
 + .text " ​     "
 + .text "#02 - Glenz Each Frame... ​ "
 + .text "Was supposed to be a bit larger, but the bigger version "
 + .text "kept fucking up, so after a while I reached the point of agony "
 + .text "and decided 2 release this smaller, but working version. ​  "​
 + .text "But still it's prolly the fastest filled vector routine ever on the C64.  "
 + .text "The concept is that all y-coords for all lines are precalculated - "
 + .text "and I'm not just talking about the start/end coords, but the y-values for all pixels "
 + .text "in each line.  Sounds like it would fill up way too much for the scarce memory of the C64, "
 + .text "but actually it's packed down to about 8K.  "
 + .tex  "The trick is that a line pointing in one direction can use the "
 + .text "same y-coords as other lines with the same slope, even if they'​re positioned elsewhere "
 + .text "and got different lengths. ​ Take a peek at the code, it's pretty simple actually. ​ "
 + .text "This means that the linedrawer doesn'​t have to do any interpolation - "
 + .text "it just looks up the y-value of each pixel, and plots it.  Another major "
 + .text "​improvement is that the filler uses immediate addressing mode (eor #$XX instead of eor $XXXX.) ​ "
 + .text "This makes the filler 25% faster, but the catch is that the line drawer must plot the dots "
 + .text "​directly into the filler, which normally would be tricky and take extra cycles, since "
 + .text "the y-values hafta be multiplied by 5 to make this work.  "
 + .text "But luckily my linedrawer (aka the "​hardliner"​) allready looks up the y-values in a table, "
 + .text "so if the table is pre-multiplied by 5, it works w/o using any extra cycles. ​ "
 + .text "​Conclusion:​ This is the way to do filled vector on the C64! :-)  "
 +
 + .text " ​      "​
 + .text "#03 - FLI Fluffy ...  "
 + .text "The 1st FLI Fluffy ever, AFAIK. ​ "
 + .text "Guess there'​s alot of other oldskool dreams "
 + .text "still waiting to be realised. ​ Just try dreaming your way back to the late 80s/early 90s, "
 + .text "and see if you can remember what woulda been considered impossible dreams on a C64 back then.  "
 + .text "For example "All border realtime texture mapped FLI rubber vector each frame combined with a DYSP and raster splits"​ or something :-)   "​
 + .text "A good source of inspiration is to take a look at a bunch of Amiga demos from that period. ​ "
 + .text "Lots of the routines that were ruling the Amiga scene back then have ofcourse been C64-ized long ago, "
 + .text "but there'​s also quite a few that haven'​t. ​ "
 + .text "And don't give up just because there'​s been a "
 + .text "lousy C64 version of a routine - that prolly just means there'​s lotsa room for improvement... ​ "
 +
 +
 + .text " ​      "​
 + .text "#04 - Copper-plasma ...  "
 + .text "Just some oldskool rasterbender/​tech-tech plasma fun.   "​
 + .text "Only 2nd line and stuff, but atleast the sines are large, "
 + .text "like they used to be on the good old Amiga... ​  It coulda been bigger, if I'd "
 + .text "​bothered to hack the shower, so it didn't waste so much rastertime. ​ "
 + .text "It only needs updating each 4th line, and the rest of the cycles are just pretty much "
 + .text "​nopped away currently - but if they had been used more constructively,​ "
 + .text "it coulda been about 20% bigger I guess. ​ "
 +
 + .text " ​      "​
 + .text "#05 - Plasma (diz 1) ...   "​
 + .text "Only the usual 4 multicolor-colors "
 + .byte 0
 + .text " a time, but "
 + .byte 0
 + .text "least it looks pretty plasmatic, IMHO.  "
 + .text "And isn't plasmaticity what counts when "
 + .text "it cums to plasma? ​  ​Although I know plasmaticity is not an exact science, since "
 + .text "ppls plasmaticity perception is a matter of personal plasma preferences.... ​          "​
 +
 + .text "​Okiez,​ th"
 + .by 0
 + .text " about does it for diz li'l demo... ​  "​
 + .text "But ya never know when it's time for the kR4Zy k4m3Lz 2 bust new tricks, "
 + .text "so watch out for future CML prodz! ​ Cya!..."​
 + .text " ​                         "
 +
 + .by 255
 +
 +</​code>​
  
base/colorcycleplasma.txt ยท Last modified: 2015-04-17 04:30 (external edit)