noiseplug/avr/sound3.c

36 lines
617 B
C

#define SO(x) (sizeof((x))/sizeof(*(x)))
static unsigned char sin[] = {0, 49, 97, 141, 180, 212, 235, 250, 254, 250, 235, 212, 180, 141, 97, 49 };
unsigned char getRand()
{
static unsigned short rnd = 13373;
unsigned char f1 = (rnd&(3<<13))>>13;
unsigned char f2 = (rnd&(3<<10))>>10;
rnd <<=1;
rnd |= f1^f2;
return (unsigned char)(rnd&0x0f);
}
static inline unsigned char rnd_adv()
{
return sin[getRand()%SO(sin)];
}
static inline unsigned char sin_adv()
{
static unsigned char sinoff=SO(sin)-1;
++sinoff;
sinoff %= SO(sin);
return sin[sinoff];
}
int main()
{
while(1)
{
putchar(sin_adv());
}
}