Guest User

Untitled

a guest
May 26th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. typedef unsigned char uint8_t;
  4. typedef unsigned short uint16_t;
  5.  
  6. uint16_t g_freq[8] = {
  7.     0x22cd,
  8.     0x2710,
  9.     0x2bd8,
  10.     0x2e74,
  11.     0x3424,
  12.     0x3a87,
  13.     0x41b2,
  14.     0x459a
  15. };
  16.  
  17. uint8_t* g_sidBase = (uint8_t*) 0xd400;
  18.  
  19. void setVolume(uint8_t volume)
  20. {
  21.     g_sidBase[24] = volume;
  22. }
  23.  
  24. void initSid()
  25. {
  26.     uint8_t i = 0;
  27.     for (i = 0; i < 24; i++) g_sidBase[i] = 0;
  28.     setVolume(15);
  29. }
  30.  
  31. void setFrequency(uint8_t voice, uint16_t freqIndex)
  32. {
  33.     uint16_t freq = g_freq[freqIndex];
  34.     g_sidBase[7 * voice] = freq & 0xff;
  35.     g_sidBase[7 * voice + 1] = freq >> 8;
  36. }
  37.  
  38. void setAdsr(uint8_t voice, uint8_t attack, uint8_t decay, uint8_t sustain, uint8_t release)
  39. {
  40.     g_sidBase[7 * voice + 5] = (attack << 4) | decay;
  41.     g_sidBase[7 * voice + 6] = (sustain << 4) | release;
  42. }
  43.  
  44. void startTriangle(uint8_t voice)
  45. {
  46.     g_sidBase[7 * voice + 4] = (1 << 4) | 1;
  47. }
  48.  
  49. void stopTriangle(uint8_t voice)
  50. {
  51.     g_sidBase[7 * voice + 4] = 1 << 4;
  52. }
  53.  
  54. void delay()
  55. {
  56.     long i;
  57.     for (i = 0; i < 500; i++);
  58. }
  59.  
  60. void startTone(uint8_t voice, uint8_t freqIndex)
  61. {
  62.     setFrequency(voice, freqIndex);
  63.     setAdsr(voice, 2, 1, 15, 1);
  64.     startTriangle(voice);
  65. }
  66.  
  67. void stopTone(uint8_t voice)
  68. {
  69.     stopTriangle(voice);
  70. }
  71.  
  72. void playOneTone(uint8_t freqIndex)
  73. {
  74.     startTone(0, freqIndex);
  75.     delay();
  76.     stopTone(0);
  77. }
  78.  
  79. void playThreeTones(uint8_t freqIndex0, uint8_t freqIndex1, uint8_t freqIndex2)
  80. {
  81.     startTone(0, freqIndex0);
  82.     startTone(1, freqIndex1);
  83.     startTone(2, freqIndex2);
  84.     delay();
  85.     stopTone(0);
  86.     stopTone(1);
  87.     stopTone(2);
  88. }
  89.  
  90. int main()
  91. {
  92.     initSid();
  93.  
  94.     while (1) {
  95.         uint8_t i;
  96.         for (i = 0; i < 8; i++) {
  97.             playOneTone(i);
  98.         }
  99.         delay();
  100.        
  101.         playThreeTones(0, 2, 5);
  102.         playThreeTones(2, 5, 7);
  103.         playThreeTones(1, 2, 5);
  104.         playThreeTones(0, 2, 5);
  105.         playThreeTones(0, 2, 4);
  106.         playThreeTones(0, 2, 5);
  107.         delay();
  108.     }
  109.     return 0;
  110. }
Add Comment
Please, Sign In to add comment