You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					112 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					112 lines
				
				2.2 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								#include "muse.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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] = {MUSE_B7,  MUSE_B19, MUSE_B3,  MUSE_B28};
							 | 
						||
| 
								 | 
							
								uint8_t muse_theme[4]    = {MUSE_B8, MUSE_B23, MUSE_B18, MUSE_B17};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool muse_timer_1bit = 0;
							 | 
						||
| 
								 | 
							
								uint8_t muse_timer_2bit = 0;
							 | 
						||
| 
								 | 
							
								uint8_t muse_timer_2bit_counter = 0;
							 | 
						||
| 
								 | 
							
								uint8_t muse_timer_4bit = 0;
							 | 
						||
| 
								 | 
							
								uint32_t muse_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 muse_timer_1bit;
							 | 
						||
| 
								 | 
							
								    case MUSE_C1:
							 | 
						||
| 
								 | 
							
								      return (muse_timer_4bit & 1);
							 | 
						||
| 
								 | 
							
								    case MUSE_C2:
							 | 
						||
| 
								 | 
							
								      return (muse_timer_4bit & 2);
							 | 
						||
| 
								 | 
							
								    case MUSE_C4:
							 | 
						||
| 
								 | 
							
								      return (muse_timer_4bit & 4);
							 | 
						||
| 
								 | 
							
								    case MUSE_C8:
							 | 
						||
| 
								 | 
							
								      return (muse_timer_4bit & 8);
							 | 
						||
| 
								 | 
							
								    case MUSE_C3:
							 | 
						||
| 
								 | 
							
								      return (muse_timer_2bit & 1);
							 | 
						||
| 
								 | 
							
								    case MUSE_C6:
							 | 
						||
| 
								 | 
							
								      return (muse_timer_2bit & 2);
							 | 
						||
| 
								 | 
							
								    default:
							 | 
						||
| 
								 | 
							
								      return muse_timer_31bit & (1UL << (value - MUSE_B1));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t muse_clock_pulse(void) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  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 (muse_timer_1bit == 0) {
							 | 
						||
| 
								 | 
							
								    if (muse_timer_2bit_counter == 0) {
							 | 
						||
| 
								 | 
							
								      muse_timer_2bit = (muse_timer_2bit + 1) % 4;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    muse_timer_2bit_counter = (muse_timer_2bit_counter + 1) % 3;
							 | 
						||
| 
								 | 
							
								    muse_timer_4bit = (muse_timer_4bit + 1) % 16;
							 | 
						||
| 
								 | 
							
								    muse_timer_31bit = (muse_timer_31bit << 1) + top;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  muse_timer_1bit = (muse_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);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |