User Tools

Site Tools


base:2nd_pixel_fli_distorter

Differences

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

Link to this comparison view

base:2nd_pixel_fli_distorter [2015-04-17 04:30] (current)
Line 1: Line 1:
 +====== 2nd Pixel FLI Distorter ======
 +
 +The concept for this routine is to generate and animation of a logo wobbling in some sine waves. Instead of playing the animation normally, some sine values control which frame is displayed for each rasterline, similarly to e.g. rubbervector. I couldn't find a way to do this with hardware tricks, so the gfx had to be copied in softwarely. To optimize it a bit, it skips a line if it's the same as the previous frame.
 +
 +<code>
 +;-------------------------------------------------------------------------------
 +; 2nd Pixel FLI Distorter
 +;-------------------------------------------------------------------------------
 +; Coded by Cruzer/CML 2002-2004
 +; Released in You Know the Routine/Camelot
 +; Assembled with MXass
 +; To get the binaries: Run the demo part and save $1000-$bfff
 +;-------------------------------------------------------------------------------
 +; Disclaimer: I'm not very proud of the state of this code in terms of
 +; readability and stuff. The assembler is also kinda lame, so I cannot
 +; recommend it. I'm now using Kick Assembler, which I can highly recommend.
 +;-------------------------------------------------------------------------------
 +;0800-081f  Basic
 +;0820-09ff  Siner 
 +;1000-1eff  Music
 +;2000-31ff  Main
 +;3000-3fff  Logo source / hiphop-font stuff
 +;4000-????  Generated wobble anims
 +;bf00-????  Wobbler
 +;c000-dfff  FLI-Bitmap
 +;e000-ffff  FLI-Screens
 +
 +.la newlogo=0
 +;-------------------------------------------------------------------------------
 +
 +.la width = 24  ;chars
 +.la height = 67 ;pixels
 +.la frames = 20 ;in logo animation
 +
 +.la wp = $02
 +.la wpo = wp+height
 +.la hiphopzp = $a0
 +
 +.la hiphopscreen   = $0400
 +.la siner          = $0820 ;*
 +;.la sine          = $0c00 ;used by logo generator
 +.la d011           = $0c00 ;*
 +.la d018           = $0c50 ;*
 +.la sine2          = $0e00
 +.la main           = $21b0
 +.la logo           = $3000 ;note! overwritten by code+data now!
 +.la hiphopfont     = $3200
 +.la hiphopcharset  = $3800 ;*
 +.la anim           = $4000
 +.la wobbler        = $bf00
 +.la bitmap         = $c000
 +.la screens        = $e000
 +
 +.ba main
 +.la border=$d0ff
 +
 +;-------------------------------------------------------------------------------
 + jmp start
 +
 +x .by 0
 +y .by 0
 +
 +tmp .wo 0
 +
 +
 +wobbling .by 0
 +
 +;-------------------------------------------------------------------------------
 +start
 +
 + sei
 + lda #$00
 + sta $d020
 + sta $d021
 +
 + jsr init
 +
 + lda #$00
 + jsr $1000
 +
 + cli
 + sei
 +
 + lda #<main1
 + sta $0314
 + lda #>main1
 + sta $0315
 + asl $d019
 + lda #$7b
 + sta $dc0d
 + lda #$81
 + sta $d01a
 + lda #$1b
 + sta $d011
 + lda #$a0
 + sta $d012
 + cli
 +
 +
 + ldx #0
 + ldy #0
 +-
 + nop
 + nop
 + inx
 + bne -
 + iny
 + bne -
 +
 +
 +-loop
 +
 + jsr hiphopclear
 +
 + lda wobbling
 + bne +skip
 +
 + lda msg
 + asl
 + tax
 + lda hiphopscreenoffsets,x
 + cmp #$ff
 + bne +
 + jsr hiphopscreensetup3
 + jmp +skip
 ++ sta hiphopscreenoffset
 + lda hiphopscreenoffsets+1,x
 + sta hiphopscreenoffset+1
 + jsr hiphopscreensetup
 ++skip
 + lda #1
 + sta cleared
 +
 + jsr tag
 +
 + lda #1
 + sta tagged
 +
 +-wait
 + lda hiphopstop
 + bne +load
 + lda tagged
 + bne -wait
 +
 + jmp -loop
 +
 ++load
 +
 + lda #1
 + sta stopirq
 +
 +- lda irqstopped
 + beq -
 +
 +loadnext
 + sei
 + lda #$0a
 + sta $d021
 + lda #$00
 + sta $d01a
 + sta $d015
 + lda #$14
 + sta $d018
 + lda #$37
 + sta $01
 + lda zp2e
 + sta $2e
 + lda zp2f
 + sta $2f
 +
 + ldx #0
 +-
 + lda $0a00,x
 + sta $c000,x
 + lda $0b00,x
 + sta $c100,x
 + inx
 + bne -
 +
 + jmp $c1f0
 +
 +
 +zp2e .by 0
 +zp2f .by 0
 +
 +tagged .by 0
 +cleared .by 0
 +hiphopstop .by 0
 +
 +stopirq .by 0
 +irqstopped .by 0
 +
 +;-------------------------------------------------------------------------------
 +main1 ;just text...
 +
 + asl $d019
 +
 +
 +
 + inc border
 + jsr $1003
 +
 + lda doubledraw
 + bne +notimetowaste
 +
 + inc border
 +
 + lda #$fc
 +- cmp $d012
 + bne -
 +
 + lda #$20
 +- cmp $d012
 + bne -
 +
 +
 ++notimetowaste
 +
 + lda #$97
 + sta $dd00
 + lda #$1e
 + sta $d018
 + lda #$c8
 + sta $d016
 + lda hiphopcolor
 + sta $d021
 + lda d011+$0f
 + and #$1f
 + sta $d011
 +
 +
 + inc border
 + jsr hiphopcontrol
 +
 + jsr spacecontrol
 +
 + lda #$09
 + sta border
 +
 +
 + lda wobbling
 + beq ri
 +
 + lda #<main2
 + sta $0314
 + lda #>main2
 + sta $0315
 + lda #$53
 + sta $d012
 + asl $d019
 +
 +ri
 + pla
 + tay
 + pla
 + tax
 + pla
 + rti
 +
 +
 +
 +main2 ;wobbling+text...
 +
 +
 + asl $d019
 +
 + inc border
 + jsr flishow
 +
 + inc border
 + jsr $1003
 +
 +
 + lda cnt
 + ora cnt+1
 + bne +wob
 + lda #1
 + sta border
 + jsr updatesiner
 + jmp +skip
 +
 ++wob
 + inc border
 + jsr wobbleit
 +
 +
 ++skip
 +
 + jsr hiphopcontrol
 +
 + lda #$00
 + sta border
 +
 + jsr effectcontrol
 +
 + jsr spacecontrol
 + jsr checkrastertime
 +
 + lda #$09
 + sta border
 +
 + jmp ri
 +
 +
 +
 +fadeoutirq
 +
 + asl $d019
 +
 + lda stopirq
 + bne +stop
 +
 + ldx cnt
 + lda fadecolz,x
 + sta $d020
 + lda cnt
 + cmp #9
 + beq +
 + inc cnt
 + jmp +j
 ++
 + jmp loadnext
 + lda #1
 + sta hiphopstop
 ++j
 + jmp ri
 +
 +
 ++stop
 +
 + lda #$00
 + sta $d01a
 + lda #1
 + sta irqstopped
 + jmp ri
 +
 +fadecolz .by $0,$b,$c,$f,$1,$1,$f,$c,$b,$0
 +
 +;-------------------------------------------------------------------------------
 +spacecontrol
 +
 + lda $dc01
 + cmp #$ef
 + beq +space
 + rts
 +
 ++space
 +
 + lda #<fadeoutirq
 + sta $0314
 + lda #>fadeoutirq
 + sta $0315
 + lda #$00
 + sta $d012
 + sta cnt
 + asl $d019
 +
 + sta $d418
 + sta $d011
 +
 + rts
 +
 +;-------------------------------------------------------------------------------
 +checkrastertime
 +
 + ;if (rastertime==too little) 
 + ;then use more, so hiphop-msg don't get tagged too fast...
 +
 +- lda $d012
 + sec
 + sbc #$aa
 + bcs -
 +- lda $d011
 + and #$80
 + bne -
 +
 + rts
 +
 +;-------------------------------------------------------------------------------
 +
 +effectcontrol
 +
 + lda cnt
 + clc
 + adc #1
 + sta cnt
 + lda cnt+1
 + adc #0
 + sta cnt+1
 +
 + lda cnt+0
 + cmp #0
 + bne +
 + lda cnt+1
 + cmp #2
 + bne +
 + jsr startfadeout
 ++
 +
 + jsr effectfadein
 + jsr effectfadeout
 +
 + rts
 +
 +cnt .wo 0
 +
 +
 +
 +neweffect
 +
 + ldx effect
 + lda sineadds,x
 + sta sineadd
 + txa
 + asl
 + tax
 + lda sinespreads,x
 + sta sinespread
 + lda sinespreads+1,x
 + sta sinespread+1
 +
 + lda #0
 + sta cnt
 + sta cnt+1
 +
 + inc effect
 + lda effect
 + cmp #4
 + bne +
 + lda #0
 + sta effect
 ++
 +
 + lda #1
 + sta first
 +
 + jsr startfadein
 +
 + rts
 +
 +sinespreads
 +
 + ;.wo $0100,$0080,$0140,$00c0
 + .wo $0100,$0080,$0140,$fe80
 +
 +sineadds
 + ;.by $01,$ff,$01,$01
 + .by $01,$ff,$01,$01
 +
 +;-------------------------------------------------------------------------------
 +startfadeout
 +
 + lda #0
 + sta fadeoutpnt
 + rts
 +
 +effectfadeout
 +
 +
 + lda fadeoutpnt
 + cmp #20
 + bne +
 + rts
 ++
 + lsr
 + tax
 + lda d011,x
 + ora #$40
 + sta d011,x
 + lda d011+10,x
 + ora #$40
 + sta d011+10,x
 + lda d011+20,x
 + ora #$40
 + sta d011+20,x
 + lda d011+30,x
 + ora #$40
 + sta d011+30,x
 + lda d011+40,x
 + ora #$40
 + sta d011+40,x
 + lda d011+50,x
 + ora #$40
 + sta d011+50,x
 + lda d011+60,x
 + ora #$40
 + sta d011+60,x
 + lda d011+70,x
 + ora #$40
 + sta d011+70,x
 +
 + inc fadeoutpnt
 + lda fadeoutpnt
 + cmp #20
 + bne +
 + jsr neweffect
 ++
 +
 + rts
 +
 +
 +fadeoutpnt .by 20
 +
 +
 +
 +startfadein
 +
 + lda #0
 + sta fadeinpnt
 + rts
 +
 +
 +effectfadein
 +
 +
 + lda fadeinpnt
 + cmp #20
 + bne +
 + rts
 ++
 + sec
 + sbc #10
 + bcs +
 + jmp +j
 ++
 + tax
 + lda d011,x
 + and #$3f
 + sta d011,x
 + lda d011+10,x
 + and #$3f
 + sta d011+10,x
 + lda d011+20,x
 + and #$3f
 + sta d011+20,x
 + lda d011+30,x
 + and #$3f
 + sta d011+30,x
 + lda d011+40,x
 + and #$3f
 + sta d011+40,x
 + lda d011+50,x
 + and #$3f
 + sta d011+50,x
 + lda d011+60,x
 + and #$3f
 + sta d011+60,x
 + lda d011+70,x
 + and #$3f
 + sta d011+70,x
 +
 ++j
 + inc fadeinpnt
 +
 + rts
 +
 +
 +fadeinpnt .by 20
 +
 +;.text "      "
 +;-------------------------------------------------------------------------------
 +flishow
 +
 + lda #$00
 + sta $d021
 +
 + nop
 + nop
 +
 + lda #$94
 + sta $dd00
 +
 + lda $d011
 + ora #$30
 + sta $d011
 +
 + lda #$d8
 + sta $d016
 +
 + ;nop
 + ;nop
 + ;nop
 + nop
 + nop
 +
 + ldy #$00
 +-loop
 + lda d011,y
 + sta $d011
 + lda d018,y
 + sta $d018
 + iny
 + cpy #$4c
 + bne -loop
 +
 + inc border
 +
 +
 +
 + lda d011+$0f
 + ora #$70
 + ;and #$1f
 + sta $d011
 +
 + lda #$97
 + sta $dd00
 + lda #$1e
 + sta $d018
 + lda #$c8
 + sta $d016
 + lda hiphopcolor
 + sta $d021
 +
 + ldx #$1c
 +- dex
 + bne -
 +
 + lda d011+$0f
 + and #$1f
 + sta $d011
 +
 + lda #$00
 + sta $ffff
 +
 + rts
 +
 +
 +
 +;-------------------------------------------------------------------------------
 +wobbleit
 +
 +
 + ;copy wobblepointers to old wobblepointers
 +
 + lda wp+0
 + sta wpo+0
 + lda wp+1
 + sta wpo+1
 + lda wp+2
 + sta wpo+2
 + lda wp+3
 + sta wpo+3
 + lda wp+4
 + sta wpo+4
 + lda wp+5
 + sta wpo+5
 + lda wp+6
 + sta wpo+6
 + lda wp+7
 + sta wpo+7
 + lda wp+8
 + sta wpo+8
 + lda wp+9
 + sta wpo+9
 + lda wp+10
 + sta wpo+10
 + lda wp+11
 + sta wpo+11
 + lda wp+12
 + sta wpo+12
 + lda wp+13
 + sta wpo+13
 + lda wp+14
 + sta wpo+14
 + lda wp+15
 + sta wpo+15
 + lda wp+16
 + sta wpo+16
 + lda wp+17
 + sta wpo+17
 + lda wp+18
 + sta wpo+18
 + lda wp+19
 + sta wpo+19
 + lda wp+20
 + sta wpo+20
 + lda wp+21
 + sta wpo+21
 + lda wp+22
 + sta wpo+22
 + lda wp+23
 + sta wpo+23
 + lda wp+24
 + sta wpo+24
 + lda wp+25
 + sta wpo+25
 + lda wp+26
 + sta wpo+26
 + lda wp+27
 + sta wpo+27
 + lda wp+28
 + sta wpo+28
 + lda wp+29
 + sta wpo+29
 + lda wp+30
 + sta wpo+30
 + lda wp+31
 + sta wpo+31
 + lda wp+32
 + sta wpo+32
 + lda wp+33
 + sta wpo+33
 + lda wp+34
 + sta wpo+34
 + lda wp+35
 + sta wpo+35
 + lda wp+36
 + sta wpo+36
 + lda wp+37
 + sta wpo+37
 + lda wp+38
 + sta wpo+38
 + lda wp+39
 + sta wpo+39
 + lda wp+40
 + sta wpo+40
 + lda wp+41
 + sta wpo+41
 + lda wp+42
 + sta wpo+42
 + lda wp+43
 + sta wpo+43
 + lda wp+44
 + sta wpo+44
 + lda wp+45
 + sta wpo+45
 + lda wp+46
 + sta wpo+46
 + lda wp+47
 + sta wpo+47
 + lda wp+48
 + sta wpo+48
 + lda wp+49
 + sta wpo+49
 + lda wp+50
 + sta wpo+50
 + lda wp+51
 + sta wpo+51
 + lda wp+52
 + sta wpo+52
 + lda wp+53
 + sta wpo+53
 + lda wp+54
 + sta wpo+54
 + lda wp+55
 + sta wpo+55
 + lda wp+56
 + sta wpo+56
 + lda wp+57
 + sta wpo+57
 + lda wp+58
 + sta wpo+58
 + lda wp+59
 + sta wpo+59
 + lda wp+60
 + sta wpo+60
 + lda wp+61
 + sta wpo+61
 + lda wp+62
 + sta wpo+62
 + lda wp+63
 + sta wpo+63
 + lda wp+64
 + sta wpo+64
 + lda wp+65
 + sta wpo+65
 + lda wp+66
 + sta wpo+66
 +
 +
 + inc border
 +
 +
 + ;lda effect
 + ;beq +showanim
 +
 ++sine
 +
 + lda sinepnt
 + tay
 + lda first
 + beq +
 + jsr siner+$a0
 + jmp +j
 ++ jsr siner
 ++j
 + lda #0
 + sta first
 +
 + lda sinepnt
 + clc
 + adc sineadd
 + sta sinepnt
 +
 + jmp +skip
 +
 +first .by 0
 +effect .by 0
 +sinepnt .by 0
 +sineadd .by 0
 +
 +
 ++showanim
 +
 + ;show anim-frames...
 +
 + ldx #height
 + lda +testfr
 + beq +
 + cmp #2
 + beq +sk
 + dex
 ++
 + lda +testfr+1
 +-
 + sta wp,x
 + dex
 + dex
 + bpl -
 +
 ++sk
 +
 + inc +testfr
 + lda +testfr
 + cmp #3 ;3rd frame
 + bne +
 + lda #0
 + sta +testfr
 + inc +testfr+1
 + lda +testfr+1
 + cmp #20
 + bne +
 + lda #0
 + sta +testfr+1
 ++
 +
 + jmp +skip
 +
 ++testfr .wo 0
 +
 +
 +
 ++skip
 +
 + inc border
 +
 + lda #$34
 + sta $01
 +
 + jsr wobbler
 +
 + lda #$36
 + sta $01
 +
 + rts
 +
 ++fr .by 0
 +
 +
 +
 +;-------------------------------------------------------------------------------
 +;hiphop-font depacking...
 +;-------------------------------------------------------------------------------
 +
 +
 +
 +hiphopinit
 +
 +
 + lda $2e
 + sta zp2e
 + lda $2f
 + sta zp2f
 +
 + jsr hiphopclear
 + jsr hiphopscreensetup
 +
 + rts
 +
 +
 +hiphopscreensetup3
 +
 +
 + ;lda #<244+280
 + lda #<533
 + sta hiphopscreenoffset
 + lda #>533
 + sta hiphopscreenoffset+1
 + jsr hiphopscreensetup
 +
 + rts
 +
 +
 +hiphopscreensetup
 +
 +
 +
 + ldx #$00
 + txa
 +-
 + sta hiphopscreen+$0000,x
 + sta hiphopscreen+$0100,x
 + sta hiphopscreen+$0200,x
 + sta hiphopscreen+$0300,x
 + inx
 + bne -
 +
 +
 +.la hhs=$f0
 +
 +
 +hiphopscreensetup2
 +
 + lda #<hiphopscreen
 + sta hhs
 + lda #>hiphopscreen
 + sta hhs+1
 +
 + lda hhs
 + clc
 + adc hiphopscreenoffset
 + sta hhs
 + lda hhs+1
 + adc hiphopscreenoffset+1
 + sta hhs+1
 +
 + lda #0
 + sta +tmp
 +
 +
 +
 + ldy #0 ;x
 +
 +-xloop
 +
 + ldx #0 ;y
 +
 +-yloop
 +
 + lda +tmp
 + sta (hhs),y
 +
 + inc +tmp
 +
 + lda hhs
 + clc
 + adc #40
 + sta hhs
 + lda hhs+1
 + adc #0
 + sta hhs+1
 +
 + inx
 + cpx #8
 + bne -yloop
 +
 + lda hhs
 + sec
 + sbc #<320
 + sta hhs
 + lda hhs+1
 + sbc #>320
 + sta hhs+1
 +
 + iny
 + cpy #32
 + bne -xloop
 +
 + rts
 +
 +
 +
 +
 +
 +
 +hiphopscreenoffset .wo 0
 +hiphopscreenoffsets .wo 0,568,284,88,557,0,284,$ffff,564,564
 ++tmp .by 0
 +
 +
 +
 +hiphopclear
 +
 +
 + ldx #$00
 +-loop
 + lda #$ff
 + sta hiphopcharset+$0000,x
 + sta hiphopcharset+$0100,x
 + sta hiphopcharset+$0200,x
 + sta hiphopcharset+$0300,x
 + sta hiphopcharset+$0400,x
 + sta hiphopcharset+$0500,x
 + sta hiphopcharset+$0600,x
 + sta hiphopcharset+$0700,x
 + inx
 + bne -loop
 +
 +
 +; lda #%00111000
 +; sta hiphopcharset+3
 +; sta hiphopcharset+6
 +; lda #%01111100
 +; sta hiphopcharset+4
 +; sta hiphopcharset+5
 +
 + rts
 +
 +
 +
 +
 +hiphopcontrol
 +
 +
 + lda cleared
 + bne +
 + lda #0
 + sta hiphopcolor
 + rts
 ++
 + ldx hiphopcolor+1
 + lda hiphopcolors+15,x
 + sta hiphopcolor
 +
 + lda tagged
 + bne +
 + rts
 ++
 + dec hiphopcnt
 + beq +
 + jmp +fade
 ++
 + lda #0
 + sta tagged
 + sta cleared
 + sta hiphopcolor
 + lda hiphopcnt+1
 + sta hiphopcnt
 + lda hiphopcolor+1
 + clc
 + adc #$10
 + cmp #$60
 + bne +
 + lda #$00
 ++ sta hiphopcolor+1
 + rts
 +
 ++fade
 + lda hiphopcnt
 + sec
 + sbc #$10
 + bcc +
 + rts
 ++
 + lda hiphopcnt
 + ora hiphopcolor+1
 + tax
 + lda hiphopcolors,x
 + sta hiphopcolor
 + rts
 +
 +hiphopcnt .by $10,$68,$58
 +
 +hiphopcolor .by 2,$20
 +hiphopcolors
 + .by $0,$0,$9,$b,$4,$a,$f,$7,$1,$1,$1,$1,$7,$f,$a,$4
 + .by $0,$0,$0,$6,$b,$e,$f,$7,$1,$1,$1,$1,$7,$f,$e,$e
 + .by $0,$0,$9,$2,$4,$a,$f,$7,$1,$1,$1,$1,$7,$f,$a,$a
 + .by $0,$0,$0,$6,$b,$e,$3,$d,$1,$1,$1,$1,$d,$3,$3,$3
 + .by $0,$0,$9,$b,$5,$3,$d,$d,$1,$1,$1,$1,$1,$d,$d,$5
 + .by $0,$0,$9,$2,$8,$a,$f,$7,$1,$1,$1,$1,$1,$7,$7,$7
 +
 +
 +
 +tag
 +
 + lda #0
 + sta +mp
 + sta +x
 + sta +y
 + sta +line
 + sta doubledraw
 +
 + lda #1
 + sta oneline
 +
 +-loop
 +
 + ldx +mp
 +ml lda msg1,x
 + cmp #$f0
 + bne +
 + lda #1
 + sta wobbling
 + jmp +skip
 ++ cmp #$f1
 + bne +
 + lda #1
 + sta doubledraw
 + jmp +skip
 ++ cmp #$21 ;"!"
 + bne +
 + lda #$1b
 ++ cmp #$2e ;"."
 + bne +
 + lda #$1c
 ++ cmp #$23 ;"
 + bne +
 + lda #$1d
 ++ cmp #$27 ;"'"
 + bne +
 + lda #$1e
 ++ cmp #$2d ;"-"
 + bne +
 + lda #$1f
 ++ cmp #$bd ;"½"
 + bne +
 + ldx #$20
 + jmp +skip
 ++ cmp #$3c ;EOL
 + beq +eol
 +
 + and #$1f
 + sta +chr
 + beq +space
 +
 + ldx +line
 + bne +
 + ;ldx #0
 + stx oneline
 ++
 +
 + sta +chr
 + ldx +x
 + ldy +y
 + jsr drawchar
 + lda doubledraw
 + beq +
 + lda +chr
 + ldx +x
 + inx
 + ldy +y
 + iny
 + jsr drawchar
 ++
 ++space
 + ldx +chr
 ++skip
 + lda +x
 + clc
 + adc +widths,x
 + sta +x
 + inc +mp
 +
 + ;lda +mp
 + ;cmp #20
 + ;bne +
 + jmp -loop
 +
 ++eol
 +
 + inc +mp
 +
 + ldx oneline
 + lda +y
 + clc
 + adc linedifs,x
 + sta +y
 + lda #0
 + sta +x
 ++
 + inc +line
 + lda +line
 + cmp #2
 + ;lda +mp
 + ;cmp #40
 + beq +
 + jmp -loop
 ++
 +
 + inc msg
 + lda msg
 + cmp msg+1
 + bne +
 +
 + lda #0
 + sta msg
 +
 + lda #<msg1
 + sta ml+1
 + lda #>msg1
 + sta ml+2
 +
 + ldx #17
 +- lda msg99,x
 + sta msg9,x
 + dex
 + bpl -
 +
 ++
 +
 + lda msg
 + asl
 + tax
 + lda messages,x
 + sta ml+1
 + lda messages+1,x
 + sta ml+2
 +
 +; lda ml+1
 +; clc
 +; adc #40
 +; sta ml+1
 +; lda ml+2
 +; adc #0
 +; sta ml+2
 +
 + ldx oneline
 + lda hiphopcnt+1,x
 + sta hiphopcnt
 +
 + rts
 +
 ++mp .by 0
 ++chr .by 0
 ++x .by 0
 ++y .by 0
 ++line .by 0
 +oneline .by 0
 +doubledraw .by 0
 +linedifs .by 24,12
 +msg .by 0,30
 +
 +messages
 + .wo msg1,msg2,msg3,msg4,msg5,msg6,msg7
 + .wo msg8,msg9,msg10,msg11,msg11b,msg12,msg12b
 + .wo msg13,msg14,msg15,msg16,msg17,msg18,msg19
 + .wo msg20,msg21,msg22,msg23,msg24,msg25,msg26,msg27,msg28
 +
 +msg1
 + .te "<"
 + .te "you know the deal<"
 +msg2
 + .te "<"
 + .te "you know the name<"
 +msg3
 + .te "<"
 + .te "you know the game<"
 +msg4
 + .te "   you know the<"
 + .te "name of the game<"
 +msg5
 + .te "     you know<"
 + .te "  the procedure<"
 +msg6
 + .te "<"
 + .te "      and now ...<"
 +msg7
 + .by $f1
 + .te "  you know<"
 + .te "      the routine<"
 +msg8
 + .te "<"
 + .te "    a demo by ...<"
 +msg9
 + .by $f0
 + .te "<"
 + .te "                  <"
 +
 +msg10
 + .te "<"
 + .te "  at it again½...<"
 +msg11 
 + .te "commanding<"
 + .te "½     the commodore<"
 +msg11b
 + .te " and flexing the<"
 + .te " eight bit muscle<"
 +
 +
 +msg12
 + .te " with diz brand½-<"
 + .te "spanking new½...<"
 +msg12b
 + .te "<"
 + .te "kamel produktion½!<"
 +
 +; .te "½ in a brand new<"
 +; .te "½kamel produktion<"
 +msg13
 + .te " now we hopefully<"
 + .te " ½ get back the ...<"
 +msg14
 + .te "      street<"
 + .te "   credibility !<"
 +msg15
 + .te "creditz for<"
 + .te " ½da whole thang½...<"
 +msg16
 + .te " code½'n'½stuff<"
 + .te "½      by cruzer ...<"
 +msg17
 + .te "½ and synthetic<"
 + .te "electronic sound...<"
 +msg18
 + .te "mostly recycled<"
 + .te "½oldskewl tunes½...<"
 +msg19
 + .te "  by drax½...jch½<"
 + .te "...fanta and jeff<"
 +msg20
 + .te "<"
 + .te "    pleez note ...<"
 +msg21
 + .te "  diz demo<"
 + .te "      only runs...<"
 +msg22
 + .te "<"
 + .te "½  on emulators½!<"
 +msg23
 + .te "<"
 + .te "     ½   bah½!<"
 +msg24
 + .te "<"
 + .te "       okiez ...<"
 +msg25
 + .te "<"
 + .te "  ½ space time½!<"
 +msg26
 + .te "<"
 + .te "know wutta mean½...<"
 +msg27
 +msg28
 + .te "<"
 + .te "<"
 +
 +
 +msg99
 + .by $f1
 + .te "<"
 + .te "      camelot½!<"
 +
 +
 ++widths
 + .by 12,21,15,16 ; abc
 + .by 17,12,18,15 ;defg
 + .by 12,14,20,17 ;hijk
 + .by 17,17,12,12 ;lmno
 + .by 14,13,17,22 ;pqrs
 + .by 17,13,12,18 ;tuvw
 + .by 15,20,22, 9 ;xyz!
 + .by  7,14, 6,15 ;."'-
 + .by  7          ;½
 +
 +
 +drawchar
 +
 + ;x=x y=y a=char
 +
 + stx +x
 + sty +y
 +
 +; cmp #0 ;space
 +; bne +
 +; rts
 +;+
 + sec
 + sbc #1
 + sta +chr
 +
 +
 +;fetch start-adr...
 +
 + ;adr for first char...
 + lda #$80
 + sta +adr+1
 + lda #>hiphopfont+1
 + sta +adr+2
 +
 + ;if (!first char) look it up... 
 + lda +chr
 + beq +
 + sec
 + sbc #1
 + asl
 + tax
 + lda hiphopfont,x
 + sta +adr+1
 + lda hiphopfont+1,x
 + clc
 + adc #>hiphopfont
 + sta +adr+2
 ++
 +
 +
 +;fetch bytes pr. line...
 +
 + lda +chr
 + asl
 + tax
 + lda mul10,x
 + sta +l+1
 + lda mul10+1,x
 + clc
 + adc #>hiphopfont
 + sta +l+2
 +
 + ldy #0
 + ldx #$40
 +-loop
 ++l lda hiphopfont,x
 + sta +tmp
 + and #%11000000
 + lsr
 + lsr
 + lsr
 + lsr
 + lsr
 + lsr
 + sta +bpl+0,y
 + lda +tmp
 + and #%00110000
 + lsr
 + lsr
 + lsr
 + lsr
 + sta +bpl+1,y
 + lda +tmp
 + and #%00001100
 + lsr
 + lsr
 + sta +bpl+2,y
 + lda +tmp
 + and #%00000011
 + sta +bpl+3,y
 + inx
 + iny
 + iny
 + iny
 + iny
 + cpy #40
 + bne -loop
 +
 +
 +
 +;fetch lines'n'draw'em...
 +
 +
 + lda #0
 + sta +line
 + sta +fetchpnt
 +
 +-yloop
 +
 + lda +x
 + sta +xx
 +
 +-xloop
 +
 + ldy +line
 + lda +bpl,y
 + beq +nextline
 +
 + ldx +fetchpnt
 ++adr lda hiphopfont+384,x
 + tax
 + lsr
 + lsr
 + lsr
 + lsr
 + sta +black
 + txa
 + and #$0f
 + sta +white
 + beq +zerowidth
 +
 + lda +y
 + clc
 + adc +line
 + tay
 + lda +xx
 + clc
 + adc +black
 + tax
 + lda +white
 +
 + jmp drawline
 +backfromdrawline
 +
 +
 ++zerowidth
 +
 + lda +black
 + clc
 + adc +white
 + adc +xx
 + sta +xx
 +
 + ldx +line
 + dec +bpl,x
 +
 + inc +fetchpnt
 +
 + jmp -xloop
 +
 ++nextline
 +
 + inc +line
 + lda +line
 + cmp #40
 + bne -yloop
 +
 + rts
 +
 ++x .by 0
 ++xx .by 0
 ++y .by 0
 ++chr .by 0
 ++tmp .by 0
 ++line .by 0
 ++fetchpnt .by 0
 ++bpl
 + .by 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 + .by 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 +mul10
 + .wo 0,10,20,30,40,50,60,70,80,90
 + .wo 100,110,120,130,140,150,160,170,180,190
 + .wo 200,210,220,230,240,250,260,270,280,290
 + .wo 300,310
 +
 ++black .by 0
 ++white .by 0
 +
 +
 +
 +drawline
 +
 + ;draw horizontal line to charset
 + ;x=x y=y a=width
 +
 + ;cmp #0 ;if (width==0) return
 + ;bne +
 + ;jmp backfromdrawline
 ++
 + dex
 + ;stx +x
 + ;sty +py+1
 + sta +w
 +
 +
 + txa
 + and #$f8
 + asl
 + sta $a0
 + lda #0
 + rol
 + asl $a0
 + rol
 + asl $a0
 + rol
 + ora #>hiphopcharset
 + sta $a1
 +
 + txa
 + and #$07
 + tax
 + clc
 + adc +w
 + sta +cx+1
 +
 +
 +-loop
 +
 + lda +pixels,x
 + beq +nextrow
 + and ($a0),y
 + sta ($a0),y
 +
 +-back
 + inx
 ++cx cpx #$ff
 + bne -loop
 + jmp +done
 +
 ++nextrow
 +
 + lda #%11111110
 + and ($a0),y
 + sta ($a0),y
 +
 + lda $a0
 + clc
 + adc #$40
 + sta $a0
 + lda $a1
 + adc #0
 + and #$07
 + ora #>hiphopcharset
 + sta $a1
 + jmp -back
 +
 ++done
 +
 + jmp backfromdrawline
 +
 ++w .by 0
 +
 +
 ++pixels
 + .by %01111111
 + .by %10111111
 + .by %11011111
 + .by %11101111
 + .by %11110111
 + .by %11111011
 + .by %11111101
 + .by 0
 + .by %01111111
 + .by %10111111
 + .by %11011111
 + .by %11101111
 + .by %11110111
 + .by %11111011
 + .by %11111101
 + .by 0
 + .by %01111111
 + .by %10111111
 + .by %11011111
 + .by %11101111
 + .by %11110111
 + .by %11111011
 +
 +;-------------------------------------------------------------------------------
 +
 +makeanim
 +
 + ;cut'n'pasted in seperate file!
 +
 + rts
 +
 +
 +
 +
 +;-------------------------------------------------------------------------------
 +init
 +
 + lda #$36
 + sta $01
 +
 + jsr vicinit
 +
 + jsr fillbitmap
 +
 + ldx #$00
 +- lda sine2,x
 + sta sine2+$100,x
 + inx
 + bne -
 +
 +
 + lda #newlogo
 + beq +
 + jsr makeanim
 ++
 + jsr hiphopinit
 +
 + jsr makewobbler
 + jsr makesiner
 + jsr neweffect
 +
 +
 +
 + ldx #0
 + lda #$ff
 +-
 + sta wp,x
 + sta wpo,x
 + inx
 + cpx #height
 + bne -
 +
 +
 + ldx #$4f
 +-
 + lda d011,x
 + ora #$40
 + sta d011,x
 + dex
 + bpl -
 +
 +
 + rts
 +
 +;-------------------------------------------------------------------------------
 +vicinit
 +
 + lda #$97
 + sta $dd00
 + lda #$c8
 + sta $d016
 + lda #$00
 + sta $d011
 + lda #$00
 + sta $d015
 + sta $d020
 + sta $d021
 +
 + ldx #0
 + lda #$00
 +-
 + sta $d800,x
 + sta $d900,x
 + sta $da00,x
 + sta $db00,x
 + inx
 + bne -
 +
 + rts
 +;-------------------------------------------------------------------------------
 +fillbitmap
 +
 +;fill bitmap with 2nd pixel pattern...
 +
 + lda #$34
 + sta $01
 +
 + lda #<bitmap
 + sta $fe
 + lda #>bitmap
 + sta $ff
 +
 + ldy #$00
 +-loop
 + tya
 + and #$01
 + tax
 + lda +bytes,x
 + sta ($fe),y
 + iny
 + bne -loop
 +
 + inc $ff
 + lda $ff
 + and #$1f
 + cmp #$18
 + bne -loop
 +
 +
 + ;clear fli-bug area...
 +
 + lda #<bitmap+$10
 + sta $fe
 + lda #>bitmap+$01
 + sta $ff
 +
 + ldx #17
 +-loop1
 + ldy #$00
 + tya
 +-loop2
 + sta ($fe),y
 + iny
 + cpy #8*12
 + bne -loop2
 + lda $fe
 + clc
 + adc #$40
 + sta $fe
 + lda $ff
 + adc #$01
 + sta $ff
 + dex
 + bpl -loop1
 +
 +
 + lda #$36
 + sta $01
 +
 +
 +
 +
 + ;remove lower pixels...
 +
 + lda #<bitmap+$20
 + sta $fe
 + lda #>bitmap+$0f
 + sta $ff
 +
 + ldy #$00
 + tya
 +-loop2
 + ;sta ($fe),y
 + iny
 + iny
 + iny
 + iny
 + iny
 + iny
 + iny
 + iny
 + bne -loop2
 +
 +
 +
 +
 +
 + lda #$36
 + sta $01
 +
 +
 +;fill screens with black...
 +
 + lda #<screens
 + sta $fe
 + lda #>screens
 + sta $ff
 +-loop
 + lda #$00
 + sta ($fe),y
 + iny
 + bne -loop
 + inc $ff
 + lda $ff
 + sec
 + sbc #>screens
 + cmp #$20
 + bne -loop
 + rts
 +
 +
 ++bytes
 + .by %00010010
 + .by %01001000
 +
 +;-------------------------------------------------------------------------------
 +makewobbler
 +
 +
 + sei
 + lda #$34
 + sta $01
 +
 + lda #<wobbler
 + sta $fe
 + lda #>wobbler
 + sta $ff
 +
 +
 +-yloop
 +
 + lda +y
 + asl
 + tax
 + lda +ststarts,x
 + sec
 + sbc #16
 + sta +st+1
 + lda +ststarts+1,x
 + sbc #0
 + sta +st+2
 +
 +
 + lda $fe
 + clc
 + adc #$99
 + sta +jw+1
 + lda $ff
 + adc #$00
 + sta +jw+2
 +
 + ldy #0
 +-
 + lda wobblersrc1,y
 + sta ($fe),y
 + iny
 + cpy #9
 + bne -
 +
 + jsr yaddfe
 +
 + inc +lx+1
 + inc +cx+1
 +
 +
 + lda #0
 + sta +x
 +
 +-xloop
 +
 + ldy #0
 +-
 + lda wobblersrc2,y
 + sta ($fe),y
 + iny
 + cpy #6
 + bne -
 +
 + jsr yaddfe
 +
 + lda +la+1
 + clc
 + adc #20
 + sta +la+1
 + lda +la+2
 + adc #0
 + sta +la+2
 +
 + lda +st+1
 + clc
 + adc #1
 + sta +st+1
 + lda +st+2
 + adc #0
 + sta +st+2
 +
 + inc +x
 + lda +x
 + cmp #width
 + bne -xloop
 +
 +
 + inc +y
 + lda +y
 + cmp #9
 + beq +addjmp1
 + cmp #36
 + beq +addjmp2
 + cmp #40
 + beq +addjmp3
 + cmp #44
 + beq +addjmp4
 + cmp #48
 + beq +addjmp5
 + cmp #52
 + beq +addjmp6
 + cmp #56
 + beq +addjmp7
 + cmp #60
 + beq +addjmp8
 + cmp #64
 + beq +addjmp9
 + cmp #height
 + beq +end
 + jmp -yloop
 +
 +
 ++addjmp1
 + ldx #0
 + jmp +addjmp
 ++addjmp2
 + ldx #3
 + jmp +addjmp
 ++addjmp3
 + ldx #6
 + jmp +addjmp
 ++addjmp4
 + ldx #9
 + jmp +addjmp
 ++addjmp5
 + ldx #12
 + jmp +addjmp
 ++addjmp6
 + ldx #15
 + jmp +addjmp
 ++addjmp7
 + ldx #18
 + jmp +addjmp
 ++addjmp8
 + ldx #21
 + jmp +addjmp
 ++addjmp9
 + ldx #24
 + jmp +addjmp
 +
 ++addjmp
 +
 + ldy #0
 +-
 + lda +jmpsrc,x
 + sta ($fe),y
 + inx
 + iny
 + cpy #3
 + bne -
 +
 + dex
 + dex
 + lda +jmpsrc,x
 + sta $fe
 + lda +jmpsrc+1,x
 + sta $ff
 +
 + jmp -yloop
 +
 +
 ++end
 +
 + ldy #0
 + lda #$60
 + sta ($fe),y
 +
 + lda #$36
 + sta $01
 +
 + rts
 +
 ++x .by 0
 ++y .by 0
 +
 +
 +wobblersrc1
 +
 ++lx ldx wp
 ++cx cpx wpo
 + bne +
 ++jw jmp wobbler+$99
 ++
 +
 +wobblersrc2
 +
 ++la lda anim,x
 ++st sta $e0b8
 +
 ++jmpsrc
 + jmp $d040
 + jmp $e202
 + jmp $e602
 + jmp $ea02
 + jmp $ee02
 + jmp $f202
 + jmp $f602
 + jmp $fa02
 + jmp $fe02
 +
 +
 ++ststarts
 + .wo $e0b8,$e4b8,$e8b8,$ecb8,$f0b8,$f4b8,$f8b8,$fcb8
 + .wo $e0e0,$e4e0,$e8e0,$ece0,$f0e0,$f4e0,$f8e0,$fce0
 + .wo $e108,$e508,$e908,$ed08,$f108,$f508,$f908,$fd08
 + .wo $e130,$e530,$e930,$ed30,$f130,$f530,$f930,$fd30
 + .wo $e158,$e558,$e958,$ed58,$f158,$f558,$f958,$fd58
 + .wo $e180,$e580,$e980,$ed80,$f180,$f580,$f980,$fd80
 + .wo $e1a8,$e5a8,$e9a8,$eda8,$f1a8,$f5a8,$f9a8,$fda8
 + .wo $e1d0,$e5d0,$e9d0,$edd0,$f1d0,$f5d0,$f9d0,$fdd0
 + .wo $e1f8,$e5f8,$e9f8,$edf8,$f1f8,$f5f8,$f9f8,$fdf8
 +;-------------------------------------------------------------------------------
 +makesiner
 +
 + lda #<siner
 + sta $fe
 + lda #>siner
 + sta $ff
 +
 +
 + ldx #height
 +-loop
 +
 + ldy #0
 +-
 + lda sinersrc,y
 + sta ($fe),y
 + iny
 + cpy #5
 + bne -
 +
 + jsr yaddfe
 +
 +
 + txa
 + and #1
 + ;beq +
 + lda +a+1
 + clc
 + adc #$02
 + sta +a+1
 ++
 +
 + inc +s+1
 +
 + dex
 + bne -loop
 +
 + ldy #0
 + lda #$60
 + sta ($fe),y
 +
 + jsr updatesiner
 +
 + rts
 +
 +
 +sinersrc
 +
 ++a lda sine2,y
 ++s sta wp
 +
 +
 +
 +updatesiner
 +
 +
 + lda #<siner
 + sta $fe
 + lda #>siner
 + sta $ff
 +
 +
 + lda #0
 + sta tmp
 + sta tmp+1
 +
 + ldx #height
 + ldy #1
 +
 +-loop
 + lda tmp+1
 + sta ($fe),y
 +
 + lda tmp
 + clc
 + adc sinespread
 + sta tmp
 + lda tmp+1
 + adc sinespread+1
 + sta tmp+1
 +
 + tya
 + clc
 + adc #5
 + tay
 + lda $ff
 + adc #0
 + sta $ff
 +
 + dex
 + bpl -loop
 +
 + rts
 +
 +
 +sinespread .wo 1
 +
 +;-------------------------------------------------------------------------------
 +yaddfe
 + tya
 + clc
 + adc $fe
 + sta $fe
 + lda #0
 + adc $ff
 + sta $ff
 + rts
 +;-------------------------------------------------------------------------------
 +</code>
  
base/2nd_pixel_fli_distorter.txt · Last modified: 2015-04-17 04:30 (external edit)