add GR fizzle

This commit is contained in:
Peter Ferrie 2019-07-14 09:57:04 -07:00
parent 8e9bdb0aa1
commit fefe49d462

86
src/fx/fx.gr.fizzle.a Normal file
View File

@ -0,0 +1,86 @@
;license:MIT
;(c) 2019 by qkumba
!cpu 6502
!to "build/FX/GR.FIZZLE",plain
*=$6400
;init RNG
ldx #1
stx @rnd1+1
dex
stx @rnd2+1
;iterate
@loop
ldy @rnd1+1
ldx @rnd2+1
lsr @rnd2+1
ror @rnd1+1
bcc +
;feedback polynomial forms #$402 for period of 2047
lda @rnd1+1
eor #2
sta @rnd1+1
lda @rnd2+1
eor #4
sta @rnd2+1
;little hack to avoid missing offset zero
;screen hole at $xxFF is missed instead
+ tya
eor #$ff
sta $26
sta $3c
and #$78
cmp #$78
beq @rndval2
txa
and #3
;target page 1
ora #4
sta $27
eor #$64
sta $3d
;set mask according to offset
lda #$0f
cpx #4
bcc @src
lda #$f0
;copy half-pixel from other page to this page
@src sta @mask+1
ldy #0
and ($26),y ; isolate source half
eor ($3c),y ; merge with whole target
@mask and #$d1 ; SMC isolate merged half
eor ($3c),y ; unmerge half of target
sta ($3c),y ; store both halves
;wait while checking for keypress
ldx #8
@wait lda $c000
bmi @exit
dex
bne @wait
;and exit condition
@rnd2 lda #0
bne @loop
@rnd1 lda #0
cmp #1
bne @loop
@exit rts