====== 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. ;------------------------------------------------------------------------------- ; 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 $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 $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 $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+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+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 $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+$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+$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 $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 $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 $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 $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 ;-------------------------------------------------------------------------------