# 1 "main.c" # 1 "/home/ondra/git/avr-projects/devel/memorygame//" # 1 "" # 1 "" # 1 "main.c" # 1 "/usr/avr/include/avr/io.h" 1 3 # 99 "/usr/avr/include/avr/io.h" 3 # 1 "/usr/avr/include/avr/sfr_defs.h" 1 3 # 126 "/usr/avr/include/avr/sfr_defs.h" 3 # 1 "/usr/avr/include/inttypes.h" 1 3 # 37 "/usr/avr/include/inttypes.h" 3 # 1 "/usr/lib/gcc/avr/4.9.2/include/stdint.h" 1 3 4 # 9 "/usr/lib/gcc/avr/4.9.2/include/stdint.h" 3 4 # 1 "/usr/avr/include/stdint.h" 1 3 4 # 122 "/usr/avr/include/stdint.h" 3 4 typedef signed int int8_t __attribute__((__mode__(__QI__))); typedef unsigned int uint8_t __attribute__((__mode__(__QI__))); typedef signed int int16_t __attribute__ ((__mode__ (__HI__))); typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__))); typedef signed int int32_t __attribute__ ((__mode__ (__SI__))); typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__))); typedef signed int int64_t __attribute__((__mode__(__DI__))); typedef unsigned int uint64_t __attribute__((__mode__(__DI__))); # 143 "/usr/avr/include/stdint.h" 3 4 typedef int16_t intptr_t; typedef uint16_t uintptr_t; # 160 "/usr/avr/include/stdint.h" 3 4 typedef int8_t int_least8_t; typedef uint8_t uint_least8_t; typedef int16_t int_least16_t; typedef uint16_t uint_least16_t; typedef int32_t int_least32_t; typedef uint32_t uint_least32_t; typedef int64_t int_least64_t; typedef uint64_t uint_least64_t; # 214 "/usr/avr/include/stdint.h" 3 4 typedef int8_t int_fast8_t; typedef uint8_t uint_fast8_t; typedef int16_t int_fast16_t; typedef uint16_t uint_fast16_t; typedef int32_t int_fast32_t; typedef uint32_t uint_fast32_t; typedef int64_t int_fast64_t; typedef uint64_t uint_fast64_t; # 274 "/usr/avr/include/stdint.h" 3 4 typedef int64_t intmax_t; typedef uint64_t uintmax_t; # 10 "/usr/lib/gcc/avr/4.9.2/include/stdint.h" 2 3 4 # 38 "/usr/avr/include/inttypes.h" 2 3 # 77 "/usr/avr/include/inttypes.h" 3 typedef int32_t int_farptr_t; typedef uint32_t uint_farptr_t; # 127 "/usr/avr/include/avr/sfr_defs.h" 2 3 # 100 "/usr/avr/include/avr/io.h" 2 3 # 248 "/usr/avr/include/avr/io.h" 3 # 1 "/usr/avr/include/avr/iom328p.h" 1 3 # 249 "/usr/avr/include/avr/io.h" 2 3 # 534 "/usr/avr/include/avr/io.h" 3 # 1 "/usr/avr/include/avr/portpins.h" 1 3 # 535 "/usr/avr/include/avr/io.h" 2 3 # 1 "/usr/avr/include/avr/common.h" 1 3 # 537 "/usr/avr/include/avr/io.h" 2 3 # 1 "/usr/avr/include/avr/version.h" 1 3 # 539 "/usr/avr/include/avr/io.h" 2 3 # 1 "/usr/avr/include/avr/fuse.h" 1 3 # 239 "/usr/avr/include/avr/fuse.h" 3 typedef struct { unsigned char low; unsigned char high; unsigned char extended; } __fuse_t; # 546 "/usr/avr/include/avr/io.h" 2 3 # 1 "/usr/avr/include/avr/lock.h" 1 3 # 549 "/usr/avr/include/avr/io.h" 2 3 # 2 "main.c" 2 # 1 "/usr/avr/include/avr/interrupt.h" 1 3 # 3 "main.c" 2 # 1 "/usr/avr/include/util/delay.h" 1 3 # 43 "/usr/avr/include/util/delay.h" 3 # 1 "/usr/avr/include/util/delay_basic.h" 1 3 # 40 "/usr/avr/include/util/delay_basic.h" 3 static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline)); static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline)); # 80 "/usr/avr/include/util/delay_basic.h" 3 void _delay_loop_1(uint8_t __count) { __asm__ volatile ( "1: dec %0" "\n\t" "brne 1b" : "=r" (__count) : "0" (__count) ); } # 102 "/usr/avr/include/util/delay_basic.h" 3 void _delay_loop_2(uint16_t __count) { __asm__ volatile ( "1: sbiw %0,1" "\n\t" "brne 1b" : "=w" (__count) : "0" (__count) ); } # 44 "/usr/avr/include/util/delay.h" 2 3 # 1 "/usr/avr/include/math.h" 1 3 # 127 "/usr/avr/include/math.h" 3 extern double cos(double __x) __attribute__((__const__)); extern double sin(double __x) __attribute__((__const__)); extern double tan(double __x) __attribute__((__const__)); extern double fabs(double __x) __attribute__((__const__)); extern double fmod(double __x, double __y) __attribute__((__const__)); # 168 "/usr/avr/include/math.h" 3 extern double modf(double __x, double *__iptr); extern float modff (float __x, float *__iptr); extern double sqrt(double __x) __attribute__((__const__)); extern float sqrtf (float) __attribute__((__const__)); extern double cbrt(double __x) __attribute__((__const__)); # 194 "/usr/avr/include/math.h" 3 extern double hypot (double __x, double __y) __attribute__((__const__)); extern double square(double __x) __attribute__((__const__)); extern double floor(double __x) __attribute__((__const__)); extern double ceil(double __x) __attribute__((__const__)); # 234 "/usr/avr/include/math.h" 3 extern double frexp(double __x, int *__pexp); extern double ldexp(double __x, int __exp) __attribute__((__const__)); extern double exp(double __x) __attribute__((__const__)); extern double cosh(double __x) __attribute__((__const__)); extern double sinh(double __x) __attribute__((__const__)); extern double tanh(double __x) __attribute__((__const__)); extern double acos(double __x) __attribute__((__const__)); extern double asin(double __x) __attribute__((__const__)); extern double atan(double __x) __attribute__((__const__)); # 298 "/usr/avr/include/math.h" 3 extern double atan2(double __y, double __x) __attribute__((__const__)); extern double log(double __x) __attribute__((__const__)); extern double log10(double __x) __attribute__((__const__)); extern double pow(double __x, double __y) __attribute__((__const__)); extern int isnan(double __x) __attribute__((__const__)); # 333 "/usr/avr/include/math.h" 3 extern int isinf(double __x) __attribute__((__const__)); __attribute__((__const__)) static inline int isfinite (double __x) { unsigned char __exp; __asm__ ( "mov %0, %C1 \n\t" "lsl %0 \n\t" "mov %0, %D1 \n\t" "rol %0 " : "=r" (__exp) : "r" (__x) ); return __exp != 0xff; } __attribute__((__const__)) static inline double copysign (double __x, double __y) { __asm__ ( "bst %D2, 7 \n\t" "bld %D0, 7 " : "=r" (__x) : "0" (__x), "r" (__y) ); return __x; } # 376 "/usr/avr/include/math.h" 3 extern int signbit (double __x) __attribute__((__const__)); extern double fdim (double __x, double __y) __attribute__((__const__)); # 392 "/usr/avr/include/math.h" 3 extern double fma (double __x, double __y, double __z) __attribute__((__const__)); extern double fmax (double __x, double __y) __attribute__((__const__)); extern double fmin (double __x, double __y) __attribute__((__const__)); extern double trunc (double __x) __attribute__((__const__)); # 426 "/usr/avr/include/math.h" 3 extern double round (double __x) __attribute__((__const__)); # 439 "/usr/avr/include/math.h" 3 extern long lround (double __x) __attribute__((__const__)); # 453 "/usr/avr/include/math.h" 3 extern long lrint (double __x) __attribute__((__const__)); # 45 "/usr/avr/include/util/delay.h" 2 3 # 84 "/usr/avr/include/util/delay.h" 3 static inline void _delay_us(double __us) __attribute__((always_inline)); static inline void _delay_ms(double __ms) __attribute__((always_inline)); # 141 "/usr/avr/include/util/delay.h" 3 void _delay_ms(double __ms) { double __tmp ; # 166 "/usr/avr/include/util/delay.h" 3 uint16_t __ticks; __tmp = ((16000000UL) / 4e3) * __ms; if (__tmp < 1.0) __ticks = 1; else if (__tmp > 65535) { __ticks = (uint16_t) (__ms * 10.0); while(__ticks) { _delay_loop_2(((16000000UL) / 4e3) / 10); __ticks --; } return; } else __ticks = (uint16_t)__tmp; _delay_loop_2(__ticks); } # 223 "/usr/avr/include/util/delay.h" 3 void _delay_us(double __us) { double __tmp ; # 248 "/usr/avr/include/util/delay.h" 3 uint8_t __ticks; double __tmp2 ; __tmp = ((16000000UL) / 3e6) * __us; __tmp2 = ((16000000UL) / 4e6) * __us; if (__tmp < 1.0) __ticks = 1; else if (__tmp2 > 65535) { _delay_ms(__us / 1000.0); } else if (__tmp > 255) { uint16_t __ticks=(uint16_t)__tmp2; _delay_loop_2(__ticks); return; } else __ticks = (uint8_t)__tmp; _delay_loop_1(__ticks); } # 4 "main.c" 2 # 1 "/usr/avr/include/stdlib.h" 1 3 # 47 "/usr/avr/include/stdlib.h" 3 # 1 "/usr/lib/gcc/avr/4.9.2/include/stddef.h" 1 3 4 # 212 "/usr/lib/gcc/avr/4.9.2/include/stddef.h" 3 4 typedef unsigned int size_t; # 324 "/usr/lib/gcc/avr/4.9.2/include/stddef.h" 3 4 typedef int wchar_t; # 48 "/usr/avr/include/stdlib.h" 2 3 # 68 "/usr/avr/include/stdlib.h" 3 typedef struct { int quot; int rem; } div_t; typedef struct { long quot; long rem; } ldiv_t; typedef int (*__compar_fn_t)(const void *, const void *); # 114 "/usr/avr/include/stdlib.h" 3 extern void abort(void) __attribute__((__noreturn__)); extern int abs(int __i) __attribute__((__const__)); # 128 "/usr/avr/include/stdlib.h" 3 extern long labs(long __i) __attribute__((__const__)); # 151 "/usr/avr/include/stdlib.h" 3 extern void *bsearch(const void *__key, const void *__base, size_t __nmemb, size_t __size, int (*__compar)(const void *, const void *)); extern div_t div(int __num, int __denom) __asm__("__divmodhi4") __attribute__((__const__)); extern ldiv_t ldiv(long __num, long __denom) __asm__("__divmodsi4") __attribute__((__const__)); # 183 "/usr/avr/include/stdlib.h" 3 extern void qsort(void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar); # 216 "/usr/avr/include/stdlib.h" 3 extern long strtol(const char *__nptr, char **__endptr, int __base); # 250 "/usr/avr/include/stdlib.h" 3 extern unsigned long strtoul(const char *__nptr, char **__endptr, int __base); # 262 "/usr/avr/include/stdlib.h" 3 extern long atol(const char *__s) __attribute__((__pure__)); # 274 "/usr/avr/include/stdlib.h" 3 extern int atoi(const char *__s) __attribute__((__pure__)); # 286 "/usr/avr/include/stdlib.h" 3 extern void exit(int __status) __attribute__((__noreturn__)); # 298 "/usr/avr/include/stdlib.h" 3 extern void *malloc(size_t __size) __attribute__((__malloc__)); extern void free(void *__ptr); extern size_t __malloc_margin; extern char *__malloc_heap_start; extern char *__malloc_heap_end; extern void *calloc(size_t __nele, size_t __size) __attribute__((__malloc__)); # 346 "/usr/avr/include/stdlib.h" 3 extern void *realloc(void *__ptr, size_t __size) __attribute__((__malloc__)); extern double strtod(const char *__nptr, char **__endptr); extern double atof(const char *__nptr); # 372 "/usr/avr/include/stdlib.h" 3 extern int rand(void); extern void srand(unsigned int __seed); extern int rand_r(unsigned long *__ctx); # 417 "/usr/avr/include/stdlib.h" 3 extern __inline__ __attribute__((__gnu_inline__)) char *itoa (int __val, char *__s, int __radix) { if (!__builtin_constant_p (__radix)) { extern char *__itoa (int, char *, int); return __itoa (__val, __s, __radix); } else if (__radix < 2 || __radix > 36) { *__s = 0; return __s; } else { extern char *__itoa_ncheck (int, char *, unsigned char); return __itoa_ncheck (__val, __s, __radix); } } # 462 "/usr/avr/include/stdlib.h" 3 extern __inline__ __attribute__((__gnu_inline__)) char *ltoa (long __val, char *__s, int __radix) { if (!__builtin_constant_p (__radix)) { extern char *__ltoa (long, char *, int); return __ltoa (__val, __s, __radix); } else if (__radix < 2 || __radix > 36) { *__s = 0; return __s; } else { extern char *__ltoa_ncheck (long, char *, unsigned char); return __ltoa_ncheck (__val, __s, __radix); } } # 505 "/usr/avr/include/stdlib.h" 3 extern __inline__ __attribute__((__gnu_inline__)) char *utoa (unsigned int __val, char *__s, int __radix) { if (!__builtin_constant_p (__radix)) { extern char *__utoa (unsigned int, char *, int); return __utoa (__val, __s, __radix); } else if (__radix < 2 || __radix > 36) { *__s = 0; return __s; } else { extern char *__utoa_ncheck (unsigned int, char *, unsigned char); return __utoa_ncheck (__val, __s, __radix); } } # 547 "/usr/avr/include/stdlib.h" 3 extern __inline__ __attribute__((__gnu_inline__)) char *ultoa (unsigned long __val, char *__s, int __radix) { if (!__builtin_constant_p (__radix)) { extern char *__ultoa (unsigned long, char *, int); return __ultoa (__val, __s, __radix); } else if (__radix < 2 || __radix > 36) { *__s = 0; return __s; } else { extern char *__ultoa_ncheck (unsigned long, char *, unsigned char); return __ultoa_ncheck (__val, __s, __radix); } } # 579 "/usr/avr/include/stdlib.h" 3 extern long random(void); extern void srandom(unsigned long __seed); extern long random_r(unsigned long *__ctx); # 638 "/usr/avr/include/stdlib.h" 3 extern char *dtostre(double __val, char *__s, unsigned char __prec, unsigned char __flags); # 655 "/usr/avr/include/stdlib.h" 3 extern char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s); # 672 "/usr/avr/include/stdlib.h" 3 extern int atexit(void (*)(void)); extern int system (const char *); extern char *getenv (const char *); # 7 "main.c" 2 # 1 "lib/meta.h" 1 # 9 "main.c" 2 # 1 "lib/arduino_pins.h" 1 # 1 "lib/pins.h" 1 # 30 "lib/pins.h" # 1 "lib/calc.h" 1 # 31 "lib/pins.h" 2 # 51 "lib/pins.h" typedef volatile uint8_t* PORT_P; typedef uint8_t BIT_N; # 8 "lib/arduino_pins.h" 2 # 10 "main.c" 2 # 1 "lib/colors.h" 1 typedef struct { uint8_t r; uint8_t g; uint8_t b; } xrgb_t; typedef uint32_t rgb24_t; typedef uint16_t rgb16_t; typedef uint16_t rgb12_t; typedef uint8_t rgb6_t; # 12 "main.c" 2 # 1 "lib/ws2812.h" 1 # 15 "lib/ws2812.h" # 1 "/usr/avr/include/avr/cpufunc.h" 1 3 # 16 "lib/ws2812.h" 2 # 1 "lib/nsdelay.h" 1 # 19 "lib/ws2812.h" 2 # 13 "main.c" 2 # 1 "lib/adc.h" 1 # 1 "/usr/lib/gcc/avr/4.9.2/include/stdbool.h" 1 3 4 # 5 "lib/adc.h" 2 void adc_init() { (*(volatile uint8_t *)(0x7A)) |= (1 << (2)) | (1 << (1)) | (1 << (0)); (*(volatile uint8_t *)(0x7C)) |= (1 << (6)); do { ((*(volatile uint8_t *)(0x7A))) |= (1 << (uint8_t)(7)); } while(0); } uint8_t adc_read_byte(uint8_t channel) { do { ((*(volatile uint8_t *)(0x7C))) = (((*(volatile uint8_t *)(0x7C))) & 0xF0) | ((uint8_t)(channel) & 0xF); } while(0); do { ((*(volatile uint8_t *)(0x7C))) |= (1 << (uint8_t)(5)); } while(0); do { ((*(volatile uint8_t *)(0x7A))) |= (1 << (uint8_t)(6)); } while(0); while(((((uint8_t)((*(volatile uint8_t *)(0x7A)))) >> (uint8_t)(6)) & 0x1)); return (*(volatile uint8_t *)(0x79)); } uint16_t adc_read_word(uint8_t channel) { do { ((*(volatile uint8_t *)(0x7C))) = (((*(volatile uint8_t *)(0x7C))) & 0xF0) | ((uint8_t)(channel) & 0xF); } while(0); do { ((*(volatile uint8_t *)(0x7C))) &= ~(1 << (uint8_t)(5)); } while(0); do { ((*(volatile uint8_t *)(0x7A))) |= (1 << (uint8_t)(6)); } while(0); while(((((uint8_t)((*(volatile uint8_t *)(0x7A)))) >> (uint8_t)(6)) & 0x1)); return (*(volatile uint16_t *)(0x78)); } # 14 "main.c" 2 # 1 "lib/debounce.h" 1 # 51 "lib/debounce.h" typedef struct { PORT_P reg; uint8_t bit; uint8_t count; } debo_slot_t; debo_slot_t debo_slots[6]; uint8_t debo_next_slot = 0; uint8_t debo_register(PORT_P reg, uint8_t bit, _Bool invert) { debo_slots[debo_next_slot] = (debo_slot_t){ .reg = reg, .bit = bit | ((invert & 1) << 7) | (((*(reg) >> (uint8_t)(bit)) & 0x1) << 6), .count = 0, }; return debo_next_slot++; } void debo_tick() { for (uint8_t i = 0; i < debo_next_slot; i++) { _Bool value = ((*(debo_slots[i].reg) >> (uint8_t)(debo_slots[i].bit & 0x7)) & 0x1); if (value != ((((uint8_t)(debo_slots[i].bit)) >> (uint8_t)(6)) & 0x1)) { if (debo_slots[i].count < 1) { debo_slots[i].count++; } else { do { (debo_slots[i].bit) = ((debo_slots[i].bit) & ~(1 << (uint8_t)(6))) | (((uint8_t)(value) & 0x1) << (uint8_t)(6)); } while(0); debo_slots[i].count = 0; } } else { debo_slots[i].count = 0; } } } # 19 "main.c" 2 const xrgb_t COLORS[] = { { .r = ((uint8_t)(((((rgb24_t) (0xB14835)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xB14835)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xB14835)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x4C1661)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x4C1661)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x4C1661)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xA3268E)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xA3268E)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xA3268E)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x009ADA)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x009ADA)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x009ADA)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x007D8F)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x007D8F)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x007D8F)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x002E5A)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x002E5A)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x002E5A)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x56BCC1)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x56BCC1)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x56BCC1)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x01654D)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x01654D)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x01654D)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xF5864F)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xF5864F)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xF5864F)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xED1B24)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xED1B24)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xED1B24)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xFDAF17)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xFDAF17)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xFDAF17)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xF58F83)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xF58F83)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xF58F83)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xED008C)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xED008C)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xED008C)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0xFEF200)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0xFEF200)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0xFEF200)) >> 0) & 0xFF))) }, { .r = ((uint8_t)(((((rgb24_t) (0x6D9346)) >> 16) & 0xFF))), .g = ((uint8_t)(((((rgb24_t) (0x6D9346)) >> 8) & 0xFF))), .b = ((uint8_t)(((((rgb24_t) (0x6D9346)) >> 0) & 0xFF))) }, }; # 73 "main.c" void render(); void update(); void __attribute__((naked, used, section(".init8"))) init() { do { ((*(volatile uint8_t *)((0x04) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); do { do { ((*(volatile uint8_t *)((0x0A) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); do { ((*(volatile uint8_t *)((0x0B) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); } while(0); do { do { ((*(volatile uint8_t *)((0x0A) + 0x20))) &= ~(1 << (uint8_t)((3))); } while(0); do { ((*(volatile uint8_t *)((0x0B) + 0x20))) |= (1 << (uint8_t)((3))); } while(0); } while(0); do { do { ((*(volatile uint8_t *)((0x0A) + 0x20))) &= ~(1 << (uint8_t)((4))); } while(0); do { ((*(volatile uint8_t *)((0x0B) + 0x20))) |= (1 << (uint8_t)((4))); } while(0); } while(0); do { do { ((*(volatile uint8_t *)((0x0A) + 0x20))) &= ~(1 << (uint8_t)((5))); } while(0); do { ((*(volatile uint8_t *)((0x0B) + 0x20))) |= (1 << (uint8_t)((5))); } while(0); } while(0); do { do { ((*(volatile uint8_t *)((0x0A) + 0x20))) &= ~(1 << (uint8_t)((6))); } while(0); do { ((*(volatile uint8_t *)((0x0B) + 0x20))) |= (1 << (uint8_t)((6))); } while(0); } while(0); do { do { ((*(volatile uint8_t *)((0x0A) + 0x20))) &= ~(1 << (uint8_t)((7))); } while(0); do { ((*(volatile uint8_t *)((0x0B) + 0x20))) |= (1 << (uint8_t)((7))); } while(0); } while(0); debo_register(&(*(volatile uint8_t *)((0x09) + 0x20)), 2, 1); debo_register(&(*(volatile uint8_t *)((0x09) + 0x20)), 3, 1); debo_register(&(*(volatile uint8_t *)((0x09) + 0x20)), 4, 1); debo_register(&(*(volatile uint8_t *)((0x09) + 0x20)), 5, 1); debo_register(&(*(volatile uint8_t *)((0x09) + 0x20)), 6, 1); debo_register(&(*(volatile uint8_t *)((0x09) + 0x20)), 7, 1); (*(volatile uint8_t *)((0x24) + 0x20)) = (1 << (1)); (*(volatile uint8_t *)((0x25) + 0x20)) = (1 << (2)) | (1 << (0)); (*(volatile uint8_t *)((0x27) + 0x20)) = 156; do { ((*(volatile uint8_t *)(0x6E))) |= (1 << (uint8_t)(1)); } while(0); __asm__ __volatile__ ("sei" ::: "memory"); } void __vector_14 (void) __attribute__ ((signal,used, externally_visible)) ; void __vector_14 (void) { update(); render(); } void main() { while(1); } typedef enum { SECRET, REVEALED, GONE } tilestate_t; typedef struct { uint8_t color; tilestate_t state; } tile_t; tile_t board[(6 * 5)]; uint8_t cursor = 0; volatile uint8_t noise = 0; uint16_t xxx = 0; void update() { if(xxx++ >= 100) { noise = adc_read_byte(0); xxx = 0; } } xrgb_t screen[(6 * 5)]; void render() { const rgb24_t BLUE = 0x005397; const rgb24_t RED = 0xFF0000; const rgb24_t YELLOW = 0xFFFF00; const rgb24_t BLACK = 0x000000; rgb24_t c; for (uint8_t i = 0; i < (6 * 5); i++) { c = YELLOW; if (i < 8) { c = ((((uint8_t)(noise)) >> (uint8_t)(i)) & 0x1) ? RED : BLUE; } do { do { for (volatile int8_t __wsba_i = 7; __wsba_i >= 0; --__wsba_i) { if ((((((rgb24_t) (c)) >> 8) & 0xFF)) & (1 << __wsba_i)) { __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); (((( (700) / (1000000000L / (signed long) 16000000UL) ) + (-2)) > 0) ? __builtin_avr_delay_cycles(( (700) / (1000000000L / (signed long) 16000000UL) ) + (-2)) : __builtin_avr_delay_cycles(0)); __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); (((( (150) / (1000000000L / (signed long) 16000000UL) ) + (-10)) > 0) ? __builtin_avr_delay_cycles(( (150) / (1000000000L / (signed long) 16000000UL) ) + (-10)) : __builtin_avr_delay_cycles(0)); } else { __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); (((( (150) / (1000000000L / (signed long) 16000000UL) ) + (-2)) > 0) ? __builtin_avr_delay_cycles(( (150) / (1000000000L / (signed long) 16000000UL) ) + (-2)) : __builtin_avr_delay_cycles(0)); __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); (((( (700) / (1000000000L / (signed long) 16000000UL) ) + (-10)) > 0) ? __builtin_avr_delay_cycles(( (700) / (1000000000L / (signed long) 16000000UL) ) + (-10)) : __builtin_avr_delay_cycles(0)); } } } while(0); do { for (volatile int8_t __wsba_i = 7; __wsba_i >= 0; --__wsba_i) { if ((((((rgb24_t) (c)) >> 16) & 0xFF)) & (1 << __wsba_i)) { __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); (((( (700) / (1000000000L / (signed long) 16000000UL) ) + (-2)) > 0) ? __builtin_avr_delay_cycles(( (700) / (1000000000L / (signed long) 16000000UL) ) + (-2)) : __builtin_avr_delay_cycles(0)); __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); (((( (150) / (1000000000L / (signed long) 16000000UL) ) + (-10)) > 0) ? __builtin_avr_delay_cycles(( (150) / (1000000000L / (signed long) 16000000UL) ) + (-10)) : __builtin_avr_delay_cycles(0)); } else { __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); (((( (150) / (1000000000L / (signed long) 16000000UL) ) + (-2)) > 0) ? __builtin_avr_delay_cycles(( (150) / (1000000000L / (signed long) 16000000UL) ) + (-2)) : __builtin_avr_delay_cycles(0)); __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); (((( (700) / (1000000000L / (signed long) 16000000UL) ) + (-10)) > 0) ? __builtin_avr_delay_cycles(( (700) / (1000000000L / (signed long) 16000000UL) ) + (-10)) : __builtin_avr_delay_cycles(0)); } } } while(0); do { for (volatile int8_t __wsba_i = 7; __wsba_i >= 0; --__wsba_i) { if ((((((rgb24_t) (c)) >> 0) & 0xFF)) & (1 << __wsba_i)) { __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); (((( (700) / (1000000000L / (signed long) 16000000UL) ) + (-2)) > 0) ? __builtin_avr_delay_cycles(( (700) / (1000000000L / (signed long) 16000000UL) ) + (-2)) : __builtin_avr_delay_cycles(0)); __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); (((( (150) / (1000000000L / (signed long) 16000000UL) ) + (-10)) > 0) ? __builtin_avr_delay_cycles(( (150) / (1000000000L / (signed long) 16000000UL) ) + (-10)) : __builtin_avr_delay_cycles(0)); } else { __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) |= (1 << (uint8_t)((2))); } while(0); (((( (150) / (1000000000L / (signed long) 16000000UL) ) + (-2)) > 0) ? __builtin_avr_delay_cycles(( (150) / (1000000000L / (signed long) 16000000UL) ) + (-2)) : __builtin_avr_delay_cycles(0)); __asm__ __volatile__("":::"memory"); do { ((*(volatile uint8_t *)((0x05) + 0x20))) &= ~(1 << (uint8_t)((2))); } while(0); (((( (700) / (1000000000L / (signed long) 16000000UL) ) + (-10)) > 0) ? __builtin_avr_delay_cycles(( (700) / (1000000000L / (signed long) 16000000UL) ) + (-10)) : __builtin_avr_delay_cycles(0)); } } } while(0); } while(0); } do { __asm__ __volatile__("":::"memory"); (((( (7000) / (1000000000L / (signed long) 16000000UL) ) + (0)) > 0) ? __builtin_avr_delay_cycles(( (7000) / (1000000000L / (signed long) 16000000UL) ) + (0)) : __builtin_avr_delay_cycles(0)); } while(0); }