diff --git a/animations/28c3.c b/animations/28c3.c new file mode 100644 index 0000000..0c80cdb --- /dev/null +++ b/animations/28c3.c @@ -0,0 +1,97 @@ +#include +#include + +#include "../compat/pgmspace.h" +#include "bitmapscroller.h" +#include "28c3.h" + + +static uint8_t const a28c3Bitmap[2][30][9] PROGMEM = + {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x0e, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xf0, 0x08, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe0, 0x07, 0xc0}, + {0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0x40, 0x00, 0xfe}, + {0x00, 0x00, 0x00, 0x0f, 0x05, 0xfa, 0x00, 0x01, 0xf8}, + {0x00, 0x00, 0x01, 0x80, 0xd7, 0xef, 0x38, 0x0b, 0xf0}, + {0x00, 0x00, 0x08, 0x0f, 0xf9, 0xb3, 0xf8, 0x2f, 0xf0}, + {0x00, 0x00, 0x14, 0xf7, 0xf9, 0xff, 0xfe, 0x3f, 0xf0}, + {0x00, 0x00, 0x30, 0x7f, 0xfa, 0x7f, 0xff, 0xff, 0xc0}, + {0x00, 0x01, 0xcf, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0x80}, + {0x00, 0x04, 0x7f, 0xff, 0xf8, 0xff, 0xff, 0xff, 0x40}, + {0x00, 0x03, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xfe, 0x80}, + {0x00, 0x05, 0xff, 0xbf, 0x87, 0xff, 0xff, 0xfd, 0x00}, + {0x00, 0x02, 0xce, 0x62, 0x3f, 0xff, 0xff, 0xf8, 0x00}, + {0x00, 0x00, 0x41, 0x7f, 0xff, 0xff, 0xff, 0xe8, 0x00}, + {0x00, 0x00, 0x02, 0xe1, 0xff, 0xff, 0xff, 0xc0, 0x00}, + {0x00, 0x00, 0x05, 0xa3, 0xff, 0xff, 0xfe, 0xc0, 0x00}, + {0x00, 0x00, 0x1a, 0x00, 0xff, 0xff, 0xf2, 0x00, 0x00}, + {0x00, 0x00, 0x67, 0x41, 0xff, 0xfe, 0x60, 0x00, 0x00}, + {0x00, 0x01, 0x01, 0xf8, 0xe0, 0x1c, 0x00, 0x00, 0x00}, + {0x00, 0x18, 0x1f, 0xeb, 0xff, 0xc0, 0x00, 0x00, 0x00}, + {0x01, 0xc0, 0xe0, 0xf1, 0xff, 0xa0, 0x00, 0x00, 0x00}, + {0x0e, 0x18, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00}, + {0x33, 0x80, 0x00, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00}, + {0x70, 0x00, 0x00, 0x5f, 0xfa, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x01, 0x7f, 0xe8, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x01, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}}, + + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x03, 0xfc}, + {0x00, 0x00, 0x00, 0x7f, 0x0f, 0xf0, 0xf0, 0x07, 0xf8}, + {0x00, 0x00, 0x07, 0xf0, 0x07, 0xcf, 0xfc, 0x1f, 0xf0}, + {0x00, 0x00, 0x0f, 0x08, 0x00, 0xff, 0xff, 0xff, 0xe0}, + {0x00, 0x00, 0x0f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe0}, + {0x00, 0x00, 0x3f, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xc0}, + {0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80}, + {0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}, + {0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00}, + {0x00, 0x01, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x00}, + {0x00, 0x00, 0x00, 0xf3, 0xff, 0xff, 0xff, 0xf0, 0x00}, + {0x00, 0x00, 0x01, 0xf3, 0xff, 0xff, 0xff, 0xe0, 0x00}, + {0x00, 0x00, 0x02, 0x41, 0xff, 0xff, 0xff, 0x00, 0x00}, + {0x00, 0x00, 0x04, 0x01, 0xff, 0xff, 0xfc, 0x00, 0x00}, + {0x00, 0x00, 0x18, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00}, + {0x00, 0x00, 0xff, 0xc1, 0xff, 0xe0, 0x00, 0x00, 0x00}, + {0x00, 0x07, 0xe0, 0xf1, 0xff, 0xe0, 0x00, 0x00, 0x00}, + {0x00, 0x3f, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00}, + {0x01, 0xe0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00}, + {0x0c, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}}}; + + +static uint8_t const nMargin = 5; + + +static uint8_t logo_28c3_getChunk(unsigned char const nBitPlane, + unsigned char const nChunkX, + unsigned char const nChunkY, + unsigned int const nFrame) +{ + assert(nBitPlane < 2); + assert(nChunkX < 9); + assert(nChunkY < (nMargin + 30 + nMargin)); + + if (nChunkY < nMargin || nChunkY >= (nMargin + 30)) + { + return 0; + } + return pgm_read_byte(&a28c3Bitmap[nBitPlane][nChunkY - nMargin][nChunkX]); +} + + +void logo_28c3() +{ + // width 72, height 30+x, 2 bitplanes (4 colors), 600 frames à 50ms (20 fps) + bitmap_scroll(72, nMargin + 30 + nMargin, 2, 600, 50, logo_28c3_getChunk); +} diff --git a/animations/28c3.h b/animations/28c3.h new file mode 100644 index 0000000..f83ef4c --- /dev/null +++ b/animations/28c3.h @@ -0,0 +1,6 @@ +#ifndef LOGO_28C3_H_ +#define LOGO_28C3_H_ + +void logo_28c3(); + +#endif /* LOGO_28C3_H_ */ diff --git a/animations/Makefile b/animations/Makefile index 16ee5ca..b9d789a 100644 --- a/animations/Makefile +++ b/animations/Makefile @@ -53,6 +53,10 @@ ifeq ($(ANIMATION_LOGO_OOS),y) SRC += outofspec.c endif +ifeq ($(ANIMATION_LOGO_28C3),y) + SRC += 28c3.c +endif + ifneq (,$(filter y,$(ANIMATION_PLASMA) $(ANIMATION_PSYCHEDELIC))) SRC += fpmath_patterns.c endif diff --git a/animations/config.in b/animations/config.in index 8bcc08d..91c6250 100644 --- a/animations/config.in +++ b/animations/config.in @@ -48,6 +48,7 @@ comment "Animations" dep_bool "LABOR Logo" ANIMATION_LABORLOGO $ANIMATION_BMSCROLLER dep_bool "Amphibian" ANIMATION_AMPHIBIAN $ANIMATION_BMSCROLLER dep_bool "Out of Spec Logo" ANIMATION_LOGO_OOS $ANIMATION_BMSCROLLER + dep_bool "28c3 Logo" ANIMATION_LOGO_28C3 $ANIMATION_BMSCROLLER endmenu bool "Plasma" ANIMATION_PLASMA diff --git a/display_loop.c b/display_loop.c index 8e4569f..3240060 100644 --- a/display_loop.c +++ b/display_loop.c @@ -15,6 +15,7 @@ #include "animations/amphibian.h" #include "animations/laborlogo.h" #include "animations/outofspec.h" +#include "animations/28c3.h" #include "animations/fpmath_patterns.h" #include "animations/mherweg.h" #ifdef ANIMATION_TIME @@ -203,14 +204,20 @@ void display_loop(){ break; #endif -#ifdef ANIMATION_PLASMA +#ifdef ANIMATION_LOGO_28C3 case 20: + logo_28c3(); + break; +#endif + +#ifdef ANIMATION_PLASMA + case 21: plasma(); break; #endif #ifdef ANIMATION_PSYCHEDELIC - case 21: + case 22: psychedelic(); break; #endif