Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CON
- _CLKMODE = XTAL1 + PLL16X
- _XINFREQ = 5_000_000
- a = 440
- d = 8
- maxseqlen = 32
- VAR
- byte k,n
- long rnd
- byte sequence[maxseqlen]
- byte seqlen
- byte s
- OBJ
- Freq : "Synth"
- PUB Main | i
- k := a
- n := d
- dira[0..2]~~
- dira[3..10]~
- i := 0
- repeat while i =< 7
- outa[0..2] := i
- PlayTone(i)
- waitcnt(clkfreq/4+cnt)
- i++
- PlayTone(-1)
- outa[0..2] := 0
- repeat
- seqlen~
- GenerateSequence
- repeat while seqlen =< maxseqlen
- PlayTone(-1)
- PlaySequence
- CheckSequence
- Strobe(%111111,8*4,8)
- PUB GenerateSequence | i
- i := 0
- seqlen := 0
- rnd := cnt
- repeat while i < maxseqlen
- rnd?
- sequence[i] := rnd & %111
- i++
- PUB PlaySequence | i
- i := 0
- waitcnt(clkfreq/2+cnt)
- repeat while i < seqlen
- outa[0..2] := sequence[i]
- PlayTone(sequence[i])
- waitcnt(clkfreq/2 + cnt)
- PlayTone(-1)
- outa[0..2]~
- waitcnt(clkfreq/4 + cnt)
- i++
- PUB CheckSequence | i,b
- i := 0
- repeat while i < seqlen
- outa[0..2]~
- PlayTone(-1)
- s := 0
- repeat while not s
- s := !(ina[3..10])
- b := 0
- repeat while b =< 8
- if 1<<b == s
- PlayTone(b)
- outa[0..2] := b
- quit
- b++
- repeat while ina[3..10] <> %11111111
- if s == 1 << sequence[i]
- i++
- else
- PlayTone(d*2)
- Strobe(sequence[i],4,4)
- ' GenerateSequence
- ' GenerateSequence
- ' seqlen~
- return
- seqlen++
- PUB PlayTone(h)
- if h => 0
- Freq.Synth("A",31,a*(h)/d+k)
- else
- Freq.Synth("A",31,0)
- PUB Strobe(value,b,hz)
- repeat while b-- => 0
- if b & 1
- outa[0..2] := value
- PlayTone(value)
- else
- PlayTone(-1)
- outa[0..2]~
- ' PlayTone(b&1)
- waitcnt(clkfreq/hz+cnt)
- PlayTone(-1)
- outa[0..2]~
Add Comment
Please, Sign In to add comment