Guest User

Untitled

a guest
May 20th, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. CON
  2.  
  3. _CLKMODE = XTAL1 + PLL16X
  4. _XINFREQ = 5_000_000
  5. a = 440
  6. d = 8
  7. maxseqlen = 32
  8.  
  9. VAR
  10. byte k,n
  11. long rnd
  12. byte sequence[maxseqlen]
  13. byte seqlen
  14. byte s
  15.  
  16. OBJ
  17. Freq : "Synth"
  18.  
  19. PUB Main | i
  20. k := a
  21. n := d
  22.  
  23. dira[0..2]~~
  24. dira[3..10]~
  25.  
  26. i := 0
  27. repeat while i =< 7
  28. outa[0..2] := i
  29. PlayTone(i)
  30. waitcnt(clkfreq/4+cnt)
  31. i++
  32. PlayTone(-1)
  33. outa[0..2] := 0
  34.  
  35. repeat
  36. seqlen~
  37. GenerateSequence
  38. repeat while seqlen =< maxseqlen
  39. PlayTone(-1)
  40. PlaySequence
  41. CheckSequence
  42. Strobe(%111111,8*4,8)
  43.  
  44. PUB GenerateSequence | i
  45. i := 0
  46. seqlen := 0
  47. rnd := cnt
  48. repeat while i < maxseqlen
  49. rnd?
  50. sequence[i] := rnd & %111
  51. i++
  52.  
  53. PUB PlaySequence | i
  54. i := 0
  55. waitcnt(clkfreq/2+cnt)
  56. repeat while i < seqlen
  57. outa[0..2] := sequence[i]
  58. PlayTone(sequence[i])
  59. waitcnt(clkfreq/2 + cnt)
  60. PlayTone(-1)
  61. outa[0..2]~
  62. waitcnt(clkfreq/4 + cnt)
  63. i++
  64.  
  65. PUB CheckSequence | i,b
  66. i := 0
  67. repeat while i < seqlen
  68. outa[0..2]~
  69. PlayTone(-1)
  70. s := 0
  71. repeat while not s
  72. s := !(ina[3..10])
  73.  
  74. b := 0
  75. repeat while b =< 8
  76. if 1<<b == s
  77. PlayTone(b)
  78. outa[0..2] := b
  79. quit
  80. b++
  81.  
  82. repeat while ina[3..10] <> %11111111
  83.  
  84. if s == 1 << sequence[i]
  85. i++
  86. else
  87. PlayTone(d*2)
  88. Strobe(sequence[i],4,4)
  89.  
  90. ' GenerateSequence
  91.  
  92. ' GenerateSequence
  93. ' seqlen~
  94.  
  95.  
  96. return
  97. seqlen++
  98.  
  99. PUB PlayTone(h)
  100. if h => 0
  101. Freq.Synth("A",31,a*(h)/d+k)
  102. else
  103. Freq.Synth("A",31,0)
  104.  
  105. PUB Strobe(value,b,hz)
  106. repeat while b-- => 0
  107. if b & 1
  108. outa[0..2] := value
  109. PlayTone(value)
  110. else
  111. PlayTone(-1)
  112. outa[0..2]~
  113. ' PlayTone(b&1)
  114. waitcnt(clkfreq/hz+cnt)
  115. PlayTone(-1)
  116. outa[0..2]~
Add Comment
Please, Sign In to add comment