User Tools

Site Tools


base:afli-plasma
	; ----------------------------------------------------------------------------------------------------
	;
	;	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
base/afli-plasma.txt · Last modified: 2015-04-17 04:30 (external edit)