parent
fe72bfa070
commit
edb4460e64
@ -0,0 +1,110 @@ |
|||||||
|
|
||||||
|
enum { |
||||||
|
MUSE_OFF, |
||||||
|
MUSE_ON, |
||||||
|
MUSE_C_1_2, |
||||||
|
MUSE_C1, |
||||||
|
MUSE_C2, |
||||||
|
MUSE_C4, |
||||||
|
MUSE_C8, |
||||||
|
MUSE_C3, |
||||||
|
MUSE_C6, |
||||||
|
MUSE_B1, |
||||||
|
MUSE_B2, |
||||||
|
MUSE_B3, |
||||||
|
MUSE_B4, |
||||||
|
MUSE_B5, |
||||||
|
MUSE_B6, |
||||||
|
MUSE_B7, |
||||||
|
MUSE_B8, |
||||||
|
MUSE_B9, |
||||||
|
MUSE_B10, |
||||||
|
MUSE_B11, |
||||||
|
MUSE_B12, |
||||||
|
MUSE_B13, |
||||||
|
MUSE_B14, |
||||||
|
MUSE_B15, |
||||||
|
MUSE_B16, |
||||||
|
MUSE_B17, |
||||||
|
MUSE_B18, |
||||||
|
MUSE_B19, |
||||||
|
MUSE_B20, |
||||||
|
MUSE_B21, |
||||||
|
MUSE_B22, |
||||||
|
MUSE_B23, |
||||||
|
MUSE_B24, |
||||||
|
MUSE_B25, |
||||||
|
MUSE_B26, |
||||||
|
MUSE_B27, |
||||||
|
MUSE_B28, |
||||||
|
MUSE_B29, |
||||||
|
MUSE_B30, |
||||||
|
MUSE_B31 |
||||||
|
}; |
||||||
|
|
||||||
|
bool number_of_ones_to_bool[16] = { |
||||||
|
1, 0, 0, 1, 0, 1, 1, 0, |
||||||
|
0, 1, 1, 0, 1, 0, 0, 1 |
||||||
|
}; |
||||||
|
|
||||||
|
uint8_t muse_interval[4] = {0}; |
||||||
|
uint8_t muse_theme[4] = {0}; |
||||||
|
|
||||||
|
bool timer_1bit = 0; |
||||||
|
uint8_t timer_2bit = 0; |
||||||
|
uint8_t timer_2bit_counter = 0; |
||||||
|
uint8_t timer_4bit = 0; |
||||||
|
uint32_t timer_31bit = 0; |
||||||
|
|
||||||
|
bool bit_for_value(uint8_t value) { |
||||||
|
switch (value) { |
||||||
|
case MUSE_OFF: |
||||||
|
return 0; |
||||||
|
case MUSE_ON: |
||||||
|
return 1; |
||||||
|
case MUSE_C_1_2: |
||||||
|
return timer_1bit; |
||||||
|
case MUSE_C1: |
||||||
|
return (timer_4bit & 1); |
||||||
|
case MUSE_C2: |
||||||
|
return (timer_4bit & 2); |
||||||
|
case MUSE_C4: |
||||||
|
return (timer_4bit & 4); |
||||||
|
case MUSE_C8: |
||||||
|
return (timer_4bit & 8); |
||||||
|
case MUSE_C3: |
||||||
|
return (timer_2bit & 1); |
||||||
|
case MUSE_C6: |
||||||
|
return (timer_2bit & 2); |
||||||
|
default: |
||||||
|
return timer_31bit & (1UL << (value - MUSE_B1)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
uint8_t clock_pulse() { |
||||||
|
|
||||||
|
bool top = number_of_ones_to_bool[ |
||||||
|
bit_for_value(muse_theme[0]) + |
||||||
|
bit_for_value(muse_theme[1]) << 1 + |
||||||
|
bit_for_value(muse_theme[2]) << 2 + |
||||||
|
bit_for_value(muse_theme[3]) << 3 |
||||||
|
]; |
||||||
|
|
||||||
|
if (timer_1bit == 0) { |
||||||
|
if (timer_2bit_counter == 0) { |
||||||
|
timer_2bit = (timer_2bit + 1) % 4; |
||||||
|
timer_2bit_counter = (timer_2bit_counter + 1) % 3; |
||||||
|
} |
||||||
|
timer_4bit = (timer_4bit + 1) % 16; |
||||||
|
timer_31bit = (timer_31bit << 1) + top; |
||||||
|
} |
||||||
|
|
||||||
|
timer_1bit = (timer_1bit + 1) % 2; |
||||||
|
|
||||||
|
return |
||||||
|
bit_for_value(muse_interval[0]) + |
||||||
|
bit_for_value(muse_interval[1]) << 1 + |
||||||
|
bit_for_value(muse_interval[2]) << 2 + |
||||||
|
bit_for_value(muse_interval[3]) << 3; |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue