User Tools

Site Tools


base:afli-plasma

Differences

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

Link to this comparison view

base:afli-plasma [2015-04-17 04:30] (current)
Line 1: Line 1:
 +<​code>​
 + ; ----------------------------------------------------------------------------------------------------
 + ;
 + ;​ afli-plasma-effekt
 + ;​ ----------------------
 + ;
 + ; coding: testicle/​payday
 + ; logo: fabu/payday
 + ; musik: htd/topaz beerline
 + ;​ 1x1-char:​ testicle/​payday
 + ;
 + ;
 + ; contact and payday-releases:​
 + ;​ ------------------------------------
 + ;
 + ;​ daniel@popelganda.de
 + ;​ www.popelganda.de
 + ;
 + ;
 + ; this sourcecode is best view with the font "​tahoma",​ font size 9.
 + ; you can compile this code using the ACME crossassembler. get the complete
 + ; package including resource files at www.popelganda.de
 + ;
 + ; the code was written with Relaunch64, the c64-crossassembler-tool
 + ; for windows-pc. grab it at www.popelganda.de!
 + ;
 + ; ----------------------------------------------------------------------------------------------------
  
 +
 +; --------------------------------------------------
 +;----- Paragraph @globale variablen@ -----
 +; --------------------------------------------------
 +
 +nextpart=$080b
 +sinus1 =$0a00
 +sinus2 =$0c00
 +sinus3 =$0e00
 +chartab=$9a00
 +aflicolor=$9c00
 +paydata=$2800
 +stext = $3800
 +
 +!to "​afli-plasma.prg"​
 +
 +
 +;​--------------------------------------------------
 +;----- Paragraph @includes of binaries@ -----
 +;​--------------------------------------------------
 +
 +*= $0800
 +!byte $00,​$0c,​$08,​$0a,​ $00,​$9e,​$33,​$32,​$37,​$36,​$38,​$00,​$00,​$00,​$00
 +
 +*= sinus1
 +!bin "​d018-tab1.bin"​
 +
 +*= sinus2
 +!bin "​d018-tab4.bin"​
 +
 +*= sinus3
 +!bin "​d018-tab5.bin"​
 +
 +*= $1000
 +!bin "​music.bin"​
 +
 +*= $2000
 +!bin "​payday-char.bin"​
 +
 +*= $2800
 +!bin "​payday-data.bin"​
 +
 +*= $3000
 +!bin "​1x1char.bin"​
 +
 +*= aflicolor
 +!bin "​afli-cols1.bin"​
 +
 +;*= $c800
 +;!bin "​sonstiges/​fastload/​fastload.bin"​
 +
 +
 +
 +; --------------------------------------------------
 +;----- Paragraph @start of sourcecode@ -----
 +; --------------------------------------------------
 +
 +*= $8000
 +
 + lda #0
 + jsr $e536
 +
 + sei
 + lda #<firq1
 + sta $0314
 + lda #>firq1
 + sta $0315
 +
 + lda #​1 ;​irq-set-up
 + sta $d01a
 + lda #$7f
 + sta $dc0d
 + lda #$a8
 + sta $d012
 + lda #$7b
 + sta $d011
 +
 + lda #0
 + sta $d020
 + sta $d021
 + sta $d001
 + sta $dc0e
 + sta $40
 + sta $41
 +
 + jsr $1000 ;​sound-init
 +
 + lda #0 ;init text-counter
 + sta $50
 + lda #>stext
 + sta $51
 +
 + ldx #0
 + lda #​%01010001 ;​bitmap for fli-plasma
 +.loop sta $6140,x
 + sta $6180,x
 + inx:bne .loop
 + jsr .logoinit
 + cli
 +loading lda #0 ;wait for signal-byte set... (during scroller)
 + beq loading
 +
 + jsr $c800 ;​...then start loading next part
 + ldx #8
 + ldy #1
 + jsr $ffba
 + lda #2
 + ldx #<.fname
 + ldy #>.fname
 + jsr $ffbd
 + lda #0
 + jsr $ffd5
 + jmp nextpart
 +
 +.fname
 +!ct pet
 +!tx "​2*"​
 +
 +
 + ; --------------------------------------------------
 + ;----- Paragraph @sub-route: logo init@ -----
 + ; --------------------------------------------------
 +
 +.logoinit ldx #0
 +.loop1 lda paydata+$80,​x
 + sta $04f0,x
 + inx
 + bne .loop1
 +
 + ldx #103
 +.loop2 lda paydata+$180,​x
 + sta $05f0,x
 + dex
 + bpl .loop2
 +
 + ldx #0
 + lda #8
 +.loop3 sta $d8f0,x
 + sta $d9f0,x
 +  inx
 + bne .loop3
 + ldx #0
 + lda #0
 +.loop4 sta $0400,x
 + inx:cpx #$f0
 + bne .loop4
 + ldx #39
 + lda #15
 +.loop5 sta $d878,x
 + dex:bpl .loop5
 + rts
 +
 +
 +;​----------------- ende -------------------------
 +
 +
 +
 +; --------------------------------------------------
 +;----- Paragraph @dummy-irq: logo fade-in@ -----
 +; --------------------------------------------------
 +
 +!zone
 +firq1 inc $d019
 + lda #$d8
 + sta $d016
 + lda #$1b
 + sta $d011
 + lda #$19
 + sta $d018
 +
 +.col1 lda #​0 ;​fade-in of payday-logo
 + sta $d023
 +.col2 lda #0
 + sta $d022
 +.col3 lda #0
 + sta $d021
 +
 + jsr $1003 ;​sound
 +
 +.wait lda #1
 + dec .wait+1
 + lda .wait+1
 + bne .weiter
 +
 +.cnt ldx #​0 ;​increase counter for logo-fade-in
 + lda pfcol,x
 + sta .col1+1
 + lda pfcol+1,x
 + sta .col2+1
 + lda pfcol+2,x
 + sta .col3+1
 + lda pfcol+3,x
 + sta .wait+1
 + lda .cnt+1
 + clc:adc #4
 + sta .cnt+1
 + cmp #48
 + bcc .weiter
 +
 + lda #$8c
 + sta frast+1
 + lda #<irq2
 + sta fwait1+1
 + lda #>irq2
 + sta fwait2+1
 +
 +.weiter lda #<firq2
 + sta $0314
 + lda #>firq2
 + sta $0315
 + lda #$30
 + sta $d012
 + jmp $ea7e
 +
 +
 +;----- Paragraph @fade-in-farben für payday-logo@ -----
 +
 +pfcol
 +!byte $00,​$00,​$00,​$10
 +!byte $00,​$00,​$09,​$02,​$00,​$09,​$08,​$02
 +!byte $09,​$08,​$0c,​$02,​$08,​$0c,​$0f,​$02
 +!byte $0c,​$0f,​$01,​$02,​$0f,​$01,​$01,​$02
 +!byte $01,​$01,​$0f,​$02,​$01,​$0f,​$0c,​$02
 +!byte $0f,​$0c,​$08,​$02,​$0c,​$08,​$09,​$48
 +!byte $0c,​$08,​$09,​$02
 +
 +;​----------------- ende -------------------------
 +
 +
 +
 +; --------------------------------------------------
 +;----- Paragraph @dummy-irq2:​ logo fade-in@ -----
 +;
 +; this irq simulates a fli-routine,​ so the logo
 +; is on the right position before the plasma
 +; starts (switching on the plasma (fli) means that
 +; the screenarea is moved down)
 +; --------------------------------------------------
 +
 +!zone
 +firq2 inc $d019
 + lda #0
 + sta $d021
 +
 +.loop1 lda #$3a ;wait for rasterline
 + cmp $d012
 + bne .loop1
 +
 + ldy #​10 ;​exact fli-timing
 +.loop2 dey
 + bne .loop2
 + lda #$7b
 + sta $d011
 + nop:nop
 + cmp ($00,x)
 +
 + ldx #0
 +.loop3 lda #​$7c ;​fli-routine with turned off (black) screen
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$7d
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$7e
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$7f
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$78
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$79
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$7a
 + sta $d011
 + cmp ($00,x)
 + cmp ($00,x)
 + nop
 + lda #$7b
 + sta $d011
 + bit $ea
 + nop:nop
 + inx:cpx #10
 + bne .loop3
 +
 +fwait1 lda #<firq1
 +
 + sta $0314
 +fwait2 lda #>firq1
 + sta $0315
 +frast lda #$a8
 + sta $d012
 + jmp $ea7e
 +
 +;​----------------- ende -------------------------
 +
 +
 +
 +; --------------------------------------------------
 +;
 +;----- Paragraph @first irq: show afli-plasma@ -----
 +;
 +; --------------------------------------------------
 +
 +!zone
 +irq1 inc $d019
 +fixit lda #$c7
 + sta $d016
 + lda #2
 + sta $dd00
 +
 + ldy #$3c
 +
 + lda #$7c
 +.loop1 cpy $d012
 + bne .loop1
 +
 +start
 +!set m=0
 +!do {
 + sta $d011 ;​here we go. afli-routine
 + lda chartab+m ;​$d018-values
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3d
 + sta $d011
 + lda chartab+1+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3e
 + sta $d011
 + lda chartab+2+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3f
 + sta $d011
 + lda chartab+3+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$38
 + sta $d011
 + lda chartab+4+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$39
 + sta $d011
 + lda chartab+5+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3a
 + sta $d011
 + lda chartab+6+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3b
 + sta $d011
 + lda chartab+7+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3c
 + sta $d011
 + lda chartab+8+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3d
 + sta $d011
 + lda chartab+9+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3e
 + sta $d011
 + lda chartab+10+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3f
 + sta $d011
 + lda chartab+11+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$38
 + sta $d011
 + lda chartab+12+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$39
 + sta $d011
 + lda chartab+13+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3a
 + sta $d011
 + lda chartab+14+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3b
 + sta $d011
 + lda chartab+15+m
 + sta $d018
 + lda #$00
 + sta $d016
 + lda #$3c
 +!set m=m+16
 +} until m = 80
 +
 + lda #$7b
 + sta $d011 ;​turn screen off to avoid flickering
 +
 + lda #3
 + sta $dd00
 + lda #$19
 + sta $d018
 + lda #$8c
 + sta $d012
 + lda #<irq2
 + sta $0314
 + lda #>irq2
 + sta $0315
 + jmp $ea7e
 +
 +
 +;​----------------- ende -------------------------
 +
 +
 +
 +; --------------------------------------------------
 +;
 +;----- Paragraph @second irq: 1x1 scroller@ -----
 +;
 +; --------------------------------------------------
 +
 +!zone
 +irq2 inc $d019
 + lda #3
 + sta $dd00
 + lda #$1d
 + sta $d018
 + lda #$1b
 + sta $d011
 +
 +scroller lda #$c7
 + sta $d016
 +
 + jsr $1003 ;​sound
 +
 +.schluss jmp space
 +space lda $d001 ;​space-key pressed?
 + cmp #$ef
 + beq .undweg
 + jmp .ende
 +.undweg lda #<​.bildweg
 + sta .schluss+1
 + lda #>​.bildweg
 + sta .schluss+2
 + jmp .ende
 +
 +.bildweg lda #​1 ;​fade-out when space pressed
 + dec .bildweg+1
 + lda .bildweg+1
 + bne .ende
 +
 +.cnt ldx #​36 ;​pic-fadeout
 + lda pfcol,x
 + sta fout1+1
 + lda pfcol+1,x
 + sta fout1+1
 + lda pfcol+2,x
 + sta fout3+1
 + lda pfcol+3,x
 + sta .bildweg+1
 + lda .cnt+1
 + sec:sbc #4
 + sta .cnt+1
 + bcs .ende
 + lda #0
 + sta fout1+1
 + sta fout2+1
 + sta fout3+1
 + lda #<​.soundweg
 + sta .schluss+1
 + lda #>​.soundweg
 + sta .schluss+2
 + jmp .ende
 +
 +.soundweg lda #​15 ;​sound fadeout
 + sta $d418
 + dec .soundweg+1
 + lda .soundweg+1
 + cmp #$ff
 + bne .ende
 +
 + lda #$7b
 + sta $d011
 + lda #0
 + sta $d418
 + sta $d015
 + lda #$31
 + sta $0314
 + lda #$ea
 + sta $0315
 + lda #0
 + sta $d01a
 + sta $d020
 + sta $d021
 + jsr $e536
 + lda #$81
 + sta $dc0d
 + lda #1 ;set loading-signal for loading next part
 + sta loading+1
 + jmp $ea7e
 +
 +.ende lda #<irq3
 + sta $0314
 + lda #>irq3
 + sta $0315
 + lda #$a8
 + sta $d012
 + jmp $ea7e
 +
 +;​----------------- ende -------------------------
 +
 +
 +
 +; --------------------------------------------------
 +;
 +;----- Paragraph @third irq: display logo and afli-action-routine@ -----
 +;
 +; --------------------------------------------------
 +
 +!zone
 +irq3 inc $d019
 + lda #​$19 ;​change charset to logo-char
 + sta $d018
 + lda #​$d8 ;​multicolor on
 + sta $d016
 + lda #$1b
 + sta $d011
 +
 +fout1 lda #​12 ;​colours of logo
 + sta $d023
 +fout2 lda #8
 + sta $d022
 +fout3 lda #9
 + sta $d021
 +
 + jsr .scrollroute ;​1x1 scroller
 +
 +.cnt ldx #0
 + ldy #0
 +.loop lda aflicolor,​x ;​set new afli-plasma-colours
 + sta $4028,y
 + lda aflicolor+2,​x
 + sta $4428,y
 + lda aflicolor+4,​x
 + sta $4828,y
 + lda aflicolor+6,​x
 + sta $4c28,y
 + lda aflicolor+8,​x
 + sta $5028,y
 + lda aflicolor+10,​x
 + sta $5428,y
 + lda aflicolor+12,​x
 + sta $5828,y
 + lda aflicolor+14,​x
 + sta $5c28,y
 + lda aflicolor+16,​x
 + sta $6028,y
 + lda aflicolor+18,​x
 + sta $6428,y
 + lda aflicolor+20,​x
 + sta $6828,y
 + lda aflicolor+22,​x
 + sta $6c28,y
 + lda aflicolor+24,​x
 + sta $7028,y
 + lda aflicolor+26,​x
 + sta $7428,y
 + lda aflicolor+28,​x
 + sta $7828,y
 + lda aflicolor+30,​x
 + sta $7c28,y
 + inx:iny
 + cpy #40
 + bne .loop
 +
 +sinchange jsr sinroute1
 +
 + inc $40 ;​change sinus-counter
 + dec $41
 + dec $41
 + inc .pause+1
 +.pause lda #0 ;pause for sinus-counter
 + and #1
 + bne rwait1
 + inc .cnt+1
 + lda .cnt+1 ;​change sinus-counter for changing the afli-colours
 + cmp #$6c
 + bne rwait1
 + lda #0
 + sta .cnt+1
 +rwait1 lda #<firq2
 + sta $0314
 +rwait2 lda #>firq2
 + sta $0315
 + lda #$38
 + sta $d012
 + lda #$1b
 + sta $d011
 + lda #0
 + sta $d021
 + jmp $ea7e
 +
 +;​----------------- ende -------------------------
 +
 + ; --------------------------------------------------
 + ;----- Paragraph @sub-route: 1x1-scroller@ -----
 + ; --------------------------------------------------
 +
 +.scrollroute dec scroller+1 ;​soft-movement 1x1-scroller
 + lda scroller+1
 + cmp #$bf
 + bne .sweiter
 + lda #$c7 ;if 7 pixel moved, the scrolltext
 + sta scroller+1 ;​hardscroll by one char
 +
 + ldx #0
 +.sloop lda $0479,x
 + sta $0478,x
 + inx:cpx #40
 + bne .sloop
 +
 + ldy #0
 + lda ($50),​y ;​read new char
 + bne .setchar ;​endsign?​
 + lda #0 ;if yes, reset text-counter
 + sta $50
 + lda #>stext
 + sta $51
 + lda #$20
 +.setchar cmp #​255 ;​startsign for afli-plasma?​
 + bne .setchar2
 + lda #<​irq1 ;​if yes, update irq-vector
 + sta rwait1+1
 + lda #>irq1
 + sta rwait2+1
 + lda #$20
 +.setchar2 cmp #254 ;new sinus?
 +
 + bne .setchar3
 + lda #<​sinroute2
 + sta sinchange+1
 + lda #>​sinroute2
 + sta sinchange+2
 + lda #$20
 +.setchar3 cmp #253 ;new sinus?
 + bne .setchar4
 + lda #<​sinroute3
 + sta sinchange+1
 + lda #>​sinroute3
 + sta sinchange+2
 + lda #$20
 +.setchar4 cmp #252 ;new sinus?
 + bne .setchar5
 + lda #<​sinroute1
 + sta sinchange+1
 + lda #>​sinroute1
 + sta sinchange+2
 + lda #$20
 +.setchar5 cmp #251
 + bne .setchar6
 + lda #$dc
 + sta space+2
 + lda #$20
 +.setchar6 sta $049f
 + inc $50
 + lda $50
 + bne .sweiter
 + inc $51
 +.sweiter rts
 +
 +;​----------------- ende -------------------------
 +
 + ; --------------------------------------------------
 + ;----- Paragraph @sub-route: sinus1@ -----
 + ; --------------------------------------------------
 +
 +!zone
 +sinroute1 ldx $40
 + ldy $41
 +.loop2 lda sinus1,​x ;​calculate new sinus (movement)
 + clc:adc sinus1,y
 + bcc .weit1
 + eor #$f8
 + ora #8
 + jmp .weit2
 +.weit1 and #$f8
 + ora #8
 +.weit2 sta chartab ;​and update chartable ($d018-werte) for
 + inx:​iny ;​afli-routine (irq1)
 + inc .weit2+1
 + lda .weit2+1
 + cmp #80
 + bne .loop2
 + lda #0
 + sta .weit2+1
 +
 + ldx $40
 + ldy $41
 +!set p=0
 +!do {
 + lda sinus1+p,​x ;​read $d016-values from sinus...
 + clc:adc sinus1+p,y
 + and #7:eor #$c7
 +; and #7:eor #$c0
 + sta start+10+p*$10 ;​...ans store them in afli-routine (irq1)
 +!set p=p+1
 +} until p = 80
 +
 + rts
 +
 +;​----------------- ende -------------------------
 +
 +
 + ; --------------------------------------------------
 + ;----- Paragraph @sub-route: sinus2@ -----
 + ; --------------------------------------------------
 +
 +!zone
 +sinroute2 ldx $40
 + ldy $41
 +.loop2 lda sinus2,​x ;​sinus neu berechnen (movement)
 + clc:adc sinus2,y
 + bcc .weit1
 + eor #$f8
 + ora #8
 + jmp .weit2
 +.weit1 and #$f8
 + ora #8
 +.weit2 sta chartab ;​und die chartabelle ($d018-werte) für
 + inx:​iny ;​afli-routine (irq1) neu setzen
 + inc .weit2+1
 + lda .weit2+1
 + cmp #80
 + bne .loop2
 + lda #0
 + sta .weit2+1
 +
 + ldx $40
 + ldy $41
 +!set p=0
 +!do {
 + lda sinus2+p,​x ;​die $d016-werte aus dem sinus auslesen...
 + clc:adc sinus2+p,y
 + and #7:eor #$c7
 +; and #7:eor #$c0
 + sta start+10+p*$10 ;​...und in die afli-routine (irq1) setzen
 +!set p=p+1
 +} until p = 80
 + rts
 +
 +;​----------------- ende -------------------------
 +
 +
 + ; --------------------------------------------------
 + ;----- Paragraph @sub-route: sinus3@ -----
 + ; --------------------------------------------------
 +
 +!zone
 +sinroute3 ldx $40
 + ldy $41
 +.loop2 lda sinus3,​x ;​sinus neu berechnen (movement)
 + clc:adc sinus3,y
 + bcc .weit1
 + eor #$f8
 + ora #8
 + jmp .weit2
 +.weit1 and #$f8
 + ora #8
 +.weit2 sta chartab ;​und die chartabelle ($d018-werte) für
 + inx:​iny ;​afli-routine (irq1) neu setzen
 + inc .weit2+1
 + lda .weit2+1
 + cmp #80
 + bne .loop2
 + lda #0
 + sta .weit2+1
 +
 + ldx $40
 + ldy $41
 +!set p=0
 +!do {
 + lda sinus3+p,​x ;​die $d016-werte aus dem sinus auslesen...
 + clc:adc sinus3+p,y
 + and #7:eor #$c7
 +; and #7:eor #$c0
 + sta start+10+p*$10 ;​...und in die afli-routine (irq1) setzen
 +!set p=p+1
 +} until p = 80
 + rts
 +
 +;​----------------- ende -------------------------
 +
 +
 +
 +; --------------------------------------------------
 +;----- Paragraph @scrolltext@ -----
 +; --------------------------------------------------
 +
 +*= stext
 +
 +!ct scr
 +!tx " ​         ha... the contribution for the forum-c64-competition from testicle/​payday... ​    "​
 +!tx "hm, where is it?       "​
 +
 +;​sinus-start
 +!byte 255
 +!tx "ah yes! the credits: this small part was coded by me, testicle/​payday. "
 +
 +;​sinus-wechsel
 +!byte 254
 +!tx "the payday-logo was painted years ago by fabu/​payday. as i said, it's very old, but i unfortunately "
 +!tx "​didn'​t have many graphics i could use."
 +
 +;​sinus-wechsel
 +!byte 253
 +!tx "the music was done by htd/topaz beerline. "
 +!tx "and last but not least this incredible charset, which was also done by me."
 +
 +
 +;​sinus-wechsel
 +!byte 252
 +!tx " ​ by the way, if you like, press space to leave now."
 +!byte 251
 +!tx "the last time payday was active was in the year 1995."
 +!tx " we have - more or less periodical - released our discmag popelganda."​
 +
 +;​sinus-wechsel
 +!byte 254
 +!tx "those who are interested in this mag can download all released issues at www.popelganda.de."​
 +
 +
 +;​sinus-wechsel
 +!byte 253
 +!tx " ​  now, in the year 2003, we want to contribute "
 +!tx "​something to the c64-scene again and are currently working on the next issue of popelganda. everything'​s new, "
 +!tx "​everything'​s different."​
 +
 +;​sinus-wechsel
 +!byte 252
 +!tx "and popelganda will be kicking the scene, hehe... ​ ok, enough written. ​  text restarts!"​
 +!tx " ​                                     "
 +
 +;endzeichen
 +!byte 0
 +</​code>​
base/afli-plasma.txt · Last modified: 2015-04-17 04:30 (external edit)