Base Colorcycleplasma (Codebase 64 Wiki)
Base Colorcycleplasma (Codebase 64 Wiki)
id=base:colorcycleplasma
ColorCyclePlasma
Source code for the end part of You Know The Routine [http://noname.c64.org/csdb/release/?id=11494]/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.
;----------------------------------------------------------------------------------------
; 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
irq2
asl $d019
lda #$0b
sta border
sta border
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
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
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
;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
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
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
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
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
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
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
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
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 -
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
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
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
+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
paintline2
;args:
;- line ($00-$ff value for each pixel)
;- y
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
-loop
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
scrolltext
.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 "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. "
.by 255