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