diff --git a/.gitignore b/.gitignore index e43b0f9..68fc691 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +/build diff --git a/include/String.h b/include/String.h new file mode 100644 index 0000000..ce821cf --- /dev/null +++ b/include/String.h @@ -0,0 +1,62 @@ +#define CUSTOM_STRING_MAX_LEN 64 + +typedef struct { + char buffer[CUSTOM_STRING_MAX_LEN]; + int length; // current string length, excluding null terminator +} String; + +// Initialize String to empty +void cs_init(String* cs) +{ + cs->buffer[0] = '\0'; + cs->length = 0; +} + +// Set content from a C-string (truncates if needed) +void cs_set(String* cs, const char* src) +{ + int i = 0; + while (src[i] != '\0' && i < (CUSTOM_STRING_MAX_LEN - 1)) + { + cs->buffer[i] = src[i]; + i++; + } + cs->buffer[i] = '\0'; + cs->length = i; +} + +// Compare two Strings for equality +int cs_equal(const String* a, const String* b) +{ + if (a->length != b->length) + return 0; + for (int i = 0; i < a->length; i++) + { + if (a->buffer[i] != b->buffer[i]) + return 0; + } + return 1; +} + +// Check if String starts with another String prefix +int cs_starts_with(const String* cs, const String* prefix) +{ + if (prefix->length > cs->length) + return 0; + for (int i = 0; i < prefix->length; i++) + { + if (cs->buffer[i] != prefix->buffer[i]) + return 0; + } + return 1; +} + +// Append a char to String (ignores if full) +void cs_append_char(String* cs, char c) +{ + if (cs->length < (CUSTOM_STRING_MAX_LEN - 1)) + { + cs->buffer[cs->length++] = c; + cs->buffer[cs->length] = '\0'; + } +} diff --git a/include/bitmapfont.h b/include/bitmapfont.h new file mode 100644 index 0000000..0e8312a --- /dev/null +++ b/include/bitmapfont.h @@ -0,0 +1,1882 @@ +#include "font_pack.h" + +// Character 'A' (ASCII 65) +static const uint8_t letter_65_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'B' (ASCII 66) +static const uint8_t letter_66_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'C' (ASCII 67) +static const uint8_t letter_67_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'D' (ASCII 68) +static const uint8_t letter_68_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'E' (ASCII 69) +static const uint8_t letter_69_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'F' (ASCII 70) +static const uint8_t letter_70_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'G' (ASCII 71) +static const uint8_t letter_71_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'H' (ASCII 72) +static const uint8_t letter_72_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'I' (ASCII 73) +static const uint8_t letter_73_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'J' (ASCII 74) +static const uint8_t letter_74_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'K' (ASCII 75) +static const uint8_t letter_75_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'L' (ASCII 76) +static const uint8_t letter_76_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'M' (ASCII 77) +static const uint8_t letter_77_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'N' (ASCII 78) +static const uint8_t letter_78_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111111, 0b11111000, // ************ + 0b01111111, 0b11111000, // ************ + 0b01111001, 0b11111000, // **** ****** + 0b01111001, 0b11111000, // **** ****** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'O' (ASCII 79) +static const uint8_t letter_79_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'P' (ASCII 80) +static const uint8_t letter_80_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'Q' (ASCII 81) +static const uint8_t letter_81_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'R' (ASCII 82) +static const uint8_t letter_82_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'S' (ASCII 83) +static const uint8_t letter_83_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'T' (ASCII 84) +static const uint8_t letter_84_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'U' (ASCII 85) +static const uint8_t letter_85_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'V' (ASCII 86) +static const uint8_t letter_86_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'W' (ASCII 87) +static const uint8_t letter_87_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'X' (ASCII 88) +static const uint8_t letter_88_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'Y' (ASCII 89) +static const uint8_t letter_89_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'Z' (ASCII 90) +static const uint8_t letter_90_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'a' (ASCII 97) +static const uint8_t letter_97_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'b' (ASCII 98) +static const uint8_t letter_98_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'c' (ASCII 99) +static const uint8_t letter_99_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'd' (ASCII 100) +static const uint8_t letter_100_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'e' (ASCII 101) +static const uint8_t letter_101_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'f' (ASCII 102) +static const uint8_t letter_102_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'g' (ASCII 103) +static const uint8_t letter_103_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'h' (ASCII 104) +static const uint8_t letter_104_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'i' (ASCII 105) +static const uint8_t letter_105_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'j' (ASCII 106) +static const uint8_t letter_106_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'k' (ASCII 107) +static const uint8_t letter_107_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'l' (ASCII 108) +static const uint8_t letter_108_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'm' (ASCII 109) +static const uint8_t letter_109_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'n' (ASCII 110) +static const uint8_t letter_110_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111111, 0b11111000, // ************ + 0b01111111, 0b11111000, // ************ + 0b01111001, 0b11111000, // **** ****** + 0b01111001, 0b11111000, // **** ****** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'o' (ASCII 111) +static const uint8_t letter_111_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'p' (ASCII 112) +static const uint8_t letter_112_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'q' (ASCII 113) +static const uint8_t letter_113_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'r' (ASCII 114) +static const uint8_t letter_114_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 's' (ASCII 115) +static const uint8_t letter_115_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 't' (ASCII 116) +static const uint8_t letter_116_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'u' (ASCII 117) +static const uint8_t letter_117_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'v' (ASCII 118) +static const uint8_t letter_118_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'w' (ASCII 119) +static const uint8_t letter_119_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'x' (ASCII 120) +static const uint8_t letter_120_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'y' (ASCII 121) +static const uint8_t letter_121_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'z' (ASCII 122) +static const uint8_t letter_122_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '0' (ASCII 48) +static const uint8_t letter_48_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '1' (ASCII 49) +static const uint8_t letter_49_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b10000000, // ****** + 0b00011111, 0b10000000, // ****** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '2' (ASCII 50) +static const uint8_t letter_50_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '3' (ASCII 51) +static const uint8_t letter_51_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '4' (ASCII 52) +static const uint8_t letter_52_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00110011, 0b11000000, // ** **** + 0b00110011, 0b11000000, // ** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '5' (ASCII 53) +static const uint8_t letter_53_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '6' (ASCII 54) +static const uint8_t letter_54_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '7' (ASCII 55) +static const uint8_t letter_55_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '8' (ASCII 56) +static const uint8_t letter_56_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '9' (ASCII 57) +static const uint8_t letter_57_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '!' (ASCII 33) +static const uint8_t letter_33_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '@' (ASCII 64) +static const uint8_t letter_64_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00110000, 0b00110000, // ** ** + 0b00110000, 0b00110000, // ** ** + 0b00110011, 0b11110000, // ** ****** + 0b00110011, 0b11110000, // ** ****** + 0b00110011, 0b11110000, // ** ****** + 0b00110011, 0b11110000, // ** ****** + 0b00110000, 0b00000000, // ** + 0b00110000, 0b00000000, // ** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '#' (ASCII 35) +static const uint8_t letter_35_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '$' (ASCII 36) +static const uint8_t letter_36_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // +}; + +// Character '%' (ASCII 37) +static const uint8_t letter_37_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b00110000, // **** ** + 0b00111100, 0b00110000, // **** ** + 0b00111100, 0b11000000, // **** ** + 0b00111100, 0b11000000, // **** ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b11110000, // ** **** + 0b00001100, 0b11110000, // ** **** + 0b00110000, 0b11110000, // ** **** + 0b00110000, 0b11110000, // ** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '^' (ASCII 94) +static const uint8_t letter_94_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00110000, 0b00110000, // ** ** + 0b00110000, 0b00110000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '&' (ASCII 38) +static const uint8_t letter_38_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b10000000, // ****** + 0b00011111, 0b10000000, // ****** + 0b01111001, 0b11100000, // **** **** + 0b01111001, 0b11100000, // **** **** + 0b00011111, 0b10000000, // ****** + 0b00011111, 0b10000000, // ****** + 0b01111001, 0b11100000, // **** **** + 0b01111001, 0b11100000, // **** **** + 0b00011110, 0b01111000, // **** **** + 0b00011110, 0b01111000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '*' (ASCII 42) +static const uint8_t letter_42_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '(' (ASCII 40) +static const uint8_t letter_40_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ')' (ASCII 41) +static const uint8_t letter_41_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '-' (ASCII 45) +static const uint8_t letter_45_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '_' (ASCII 95) +static const uint8_t letter_95_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '=' (ASCII 61) +static const uint8_t letter_61_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '+' (ASCII 43) +static const uint8_t letter_43_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '[' (ASCII 91) +static const uint8_t letter_91_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ']' (ASCII 93) +static const uint8_t letter_93_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '{' (ASCII 123) +static const uint8_t letter_123_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '}' (ASCII 125) +static const uint8_t letter_125_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ';' (ASCII 59) +static const uint8_t letter_59_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000001, 0b10000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000110, 0b00000000, // ** + 0b00000110, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ':' (ASCII 58) +static const uint8_t letter_58_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ''' (ASCII 39) +static const uint8_t letter_39_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '"' (ASCII 34) +static const uint8_t letter_34_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ',' (ASCII 44) +static const uint8_t letter_44_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000001, 0b10000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000110, 0b00000000, // ** + 0b00000110, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '.' (ASCII 46) +static const uint8_t letter_46_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '<' (ASCII 60) +static const uint8_t letter_60_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '>' (ASCII 62) +static const uint8_t letter_62_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '/' (ASCII 47) +static const uint8_t letter_47_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '?' (ASCII 63) +static const uint8_t letter_63_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '\' (ASCII 92) +static const uint8_t letter_92_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '|' (ASCII 124) +static const uint8_t letter_124_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '`' (ASCII 96) +static const uint8_t letter_96_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000110, 0b00000000, // ** + 0b00000110, 0b00000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '~' (ASCII 126) +static const uint8_t letter_126_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b00110000, // **** ** + 0b00001111, 0b00110000, // **** ** + 0b00110011, 0b11000000, // ** **** + 0b00110011, 0b11000000, // ** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + diff --git a/src/color.h b/include/color.h similarity index 100% rename from src/color.h rename to include/color.h diff --git a/src/font_pack.h b/include/font_pack.h similarity index 97% rename from src/font_pack.h rename to include/font_pack.h index 8cafa32..d7679d3 100644 --- a/src/font_pack.h +++ b/include/font_pack.h @@ -1,3 +1,4 @@ +#pragma once #ifndef FONT_PACK_H #define FONT_PACK_H #include diff --git a/src/io.h b/include/io.h similarity index 100% rename from src/io.h rename to include/io.h diff --git a/src/renderer.h b/include/renderer.h similarity index 100% rename from src/renderer.h rename to include/renderer.h diff --git a/include/renderer_common.h b/include/renderer_common.h new file mode 100644 index 0000000..8949da5 --- /dev/null +++ b/include/renderer_common.h @@ -0,0 +1,46 @@ +#ifndef RENDERER_COMMON_H +#define RENDERER_COMMON_H + +#include +#include + +#define FONT_WIDTH 16 +#define FONT_HEIGHT 16 + +typedef struct { + unsigned int x, y; + unsigned int color; +} RenderBase; + +typedef struct { + RenderBase base; + const char *text; + void *font; // Opaque font pointer +} RenderText; + +typedef struct { + unsigned int x, y; + unsigned int width, height; + unsigned int color; +} RenderObject; + +typedef struct Renderer Renderer; + +struct Renderer { + volatile unsigned int *fb; + unsigned int width; + unsigned int height; + unsigned int pitch; + + bool (*init)(Renderer *renderer); + + void (*clear_screen)(Renderer *renderer, unsigned int color); + void (*draw_text)(Renderer *renderer, RenderText *text_obj); +}; + +/** + * Initializes the framebuffer (common across both renderers) + */ +bool renderer_init_common(Renderer *renderer); + +#endif // RENDERER_COMMON_H diff --git a/makefile b/makefile index a942fdb..675034f 100755 --- a/makefile +++ b/makefile @@ -6,17 +6,17 @@ AS = $(CROSS)as LD = $(CROSS)ld OBJCOPY = $(CROSS)objcopy -CFLAGS = -O2 -ffreestanding -nostdlib -Wall -Wextra -LDFLAGS = -T src/linker.ld +CFLAGS = -O2 -ffreestanding -nostdlib -Wall -Wextra -Iinclude include/ +LDFLAGS = -T src/boot/linker.ld SRC = src BUILD = build # List all C source files here (update as needed) -SOURCES_C = $(SRC)/renderer.c $(SRC)/font_pack.c $(SRC)/main.c +SOURCES_C = $(SRC)/renderer.c $(SRC)/font_pack.c $(SRC)/main.c # List assembler source files -SOURCES_ASM = $(SRC)/boot.s +SOURCES_ASM = $(SRC)/boot/boot.s # Object files (one per source file) OBJ_C = $(patsubst $(SRC)/%.c,$(BUILD)/%.o,$(SOURCES_C)) @@ -32,6 +32,7 @@ all: $(TARGET_IMG) # Create build directory if it does not exist $(BUILD): mkdir -p $(BUILD) + mkdir -p $(BUILD)/boot # Assemble assembly sources $(BUILD)/%.o: $(SRC)/%.s | $(BUILD) @@ -54,4 +55,4 @@ clean: # Run QEMU emulator for Raspberry Pi 3 with serial output redirected to terminal run: $(TARGET_IMG) - sudo qemu-system-aarch64 -M raspi3b -serial stdio -kernel $(TARGET_IMG) + qemu-system-aarch64 -M raspi3b -serial stdio -kernel $(TARGET_IMG) diff --git a/src/boot.s b/src/boot/boot.s similarity index 100% rename from src/boot.s rename to src/boot/boot.s diff --git a/src/linker.ld b/src/boot/linker.ld similarity index 100% rename from src/linker.ld rename to src/boot/linker.ld diff --git a/src/font_pack.c b/src/font_pack.c index 4a733a3..1e8530b 100644 --- a/src/font_pack.c +++ b/src/font_pack.c @@ -1,537 +1,1905 @@ #include "font_pack.h" - -// Letter A: Thickened diagonals and vertical legs +// Character 'A' (ASCII 65) static const uint8_t letter_A_16x16[32] = { - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00111000, 0b00011100, // ** *** - 0b00111000, 0b00011100, // ** *** - 0b01110000, 0b00001110, //*** *** - 0b01110000, 0b00001110, //*** *** - 0b11111111, 0b11111111, //************ - 0b11111111, 0b11111111, //************ - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter B: Thickened vertical and horizontal strokes +// Character 'B' (ASCII 66) static const uint8_t letter_B_16x16[32] = { - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter C: Thickened curves +// Character 'C' (ASCII 67) static const uint8_t letter_C_16x16[32] = { - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter D: Thickened vertical and curved strokes +// Character 'D' (ASCII 68) static const uint8_t letter_D_16x16[32] = { - 0b11111111, 0b11000000, //******** - 0b11111111, 0b11000000, //******** - 0b11100000, 0b01100000, //*** ** - 0b11100000, 0b01100000, //*** ** - 0b11100000, 0b00110000, //*** ** - 0b11100000, 0b00110000, //*** ** - 0b11100000, 0b00110000, //*** ** - 0b11100000, 0b00110000, //*** ** - 0b11100000, 0b00110000, //*** ** - 0b11100000, 0b00110000, //*** ** - 0b11100000, 0b01100000, //*** ** - 0b11100000, 0b01100000, //*** ** - 0b11111111, 0b11000000, //******** - 0b11111111, 0b11000000, //******** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter E: Thickened horizontal and vertical strokes +// Character 'E' (ASCII 69) static const uint8_t letter_E_16x16[32] = { - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter F: Thickened horizontal and vertical strokes +// Character 'F' (ASCII 70) static const uint8_t letter_F_16x16[32] = { - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter G: Thickened curves and horizontal bar +// Character 'G' (ASCII 71) static const uint8_t letter_G_16x16[32] = { - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00111111, 0b11100000, // *** **** - 0b00111111, 0b11100000, // *** **** - 0b00111000, 0b01110000, // *** *** - 0b00111000, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter H: Thickened vertical and horizontal bars +// Character 'H' (ASCII 72) static const uint8_t letter_H_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11111111, 0b11111111, //************ - 0b11111111, 0b11111111, //************ - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter I: Thickened vertical and horizontal bars +// Character 'I' (ASCII 73) static const uint8_t letter_I_16x16[32] = { - 0b00001111, 0b11110000, // ****** - 0b00001111, 0b11110000, // ****** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00001111, 0b11110000, // ****** - 0b00001111, 0b11110000, // ****** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter J: Thickened vertical and curved strokes +// Character 'J' (ASCII 74) static const uint8_t letter_J_16x16[32] = { - 0b00000000, 0b01111000, // **** - 0b00000000, 0b01111000, // **** - 0b00000000, 0b00111000, // *** - 0b00000000, 0b00111000, // *** - 0b00000000, 0b00111000, // *** - 0b00000000, 0b00111000, // *** - 0b00000000, 0b00111000, // *** - 0b00000000, 0b00111000, // *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b01111111, 0b11110000, // ******** - 0b01111111, 0b11110000, // ******** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter K: Thickened vertical and diagonal strokes +// Character 'K' (ASCII 75) static const uint8_t letter_K_16x16[32] = { - 0b11100000, 0b01100000, //*** ** - 0b11100000, 0b01100000, //*** ** - 0b11100000, 0b11000000, //*** * - 0b11100000, 0b11000000, //*** * - 0b11100111, 0b00000000, //*** *** - 0b11100111, 0b00000000, //*** *** - 0b11111100, 0b00000000, //**** * - 0b11111100, 0b00000000, //**** * - 0b11111000, 0b00000000, //**** * - 0b11111000, 0b00000000, //**** * - 0b11111100, 0b00000000, //**** * - 0b11111100, 0b00000000, //**** * - 0b11101100, 0b00000000, //*** ** - 0b11101100, 0b00000000, //*** ** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter L: Thickened vertical and horizontal strokes +// Character 'L' (ASCII 76) static const uint8_t letter_L_16x16[32] = { - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter M: Thickened vertical and diagonal strokes +// Character 'M' (ASCII 77) static const uint8_t letter_M_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11110000, 0b00011110, //**** **** - 0b11110000, 0b00011110, //**** **** - 0b11111000, 0b00111110, //**** ***** - 0b11111000, 0b00111110, //**** ***** - 0b11101100, 0b01101110, //*** ** *** - 0b11101100, 0b01101110, //*** ** *** - 0b11100110, 0b11001110, //*** *** *** - 0b11100110, 0b11001110, //*** *** *** - 0b11100011, 0b10001110, //*** ** *** - 0b11100011, 0b10001110, //*** ** *** - 0b11100001, 0b00001110, //*** *** - 0b11100001, 0b00001110, //*** *** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter N: Thickened vertical and diagonal strokes +// Character 'N' (ASCII 78) static const uint8_t letter_N_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11110000, 0b00001110, //**** *** - 0b11110000, 0b00001110, //**** *** - 0b11111000, 0b00001110, //**** *** - 0b11111000, 0b00001110, //**** *** - 0b11101100, 0b00001110, //*** * *** - 0b11101100, 0b00001110, //*** * *** - 0b11100110, 0b00001110, //*** * *** - 0b11100110, 0b00001110, //*** * *** - 0b11100011, 0b00001110, //*** * *** - 0b11100011, 0b00001110, //*** * *** - 0b11100001, 0b00001110, //*** *** - 0b11100001, 0b00001110, //*** *** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111111, 0b11111000, // ************ + 0b01111111, 0b11111000, // ************ + 0b01111001, 0b11111000, // **** ****** + 0b01111001, 0b11111000, // **** ****** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter O: Thickened curves +// Character 'O' (ASCII 79) static const uint8_t letter_O_16x16[32] = { - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter P: Thickened vertical and horizontal strokes +// Character 'P' (ASCII 80) static const uint8_t letter_P_16x16[32] = { - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b11100000, 0b00000000, //*** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter Q: Thickened curves and diagonal tail +// Character 'Q' (ASCII 81) static const uint8_t letter_Q_16x16[32] = { - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111000, 0b00011100, // *** *** - 0b00111010, 0b00111000, // *** *** - 0b00111001, 0b01110000, // *** *** - 0b00111000, 0b11100000, // *** *** - 0b00011111, 0b11000000, // **** * - 0b00011111, 0b11000000, // **** * - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter R: Thickened vertical, horizontal, and diagonal strokes +// Character 'R' (ASCII 82) static const uint8_t letter_R_16x16[32] = { - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11100000, 0b00111000, //*** *** - 0b11111111, 0b11100000, //********* - 0b11111111, 0b11100000, //********* - 0b11100000, 0b11000000, //*** * - 0b11100000, 0b11000000, //*** * - 0b11100000, 0b01100000, //*** * - 0b11100000, 0b00110000, //*** * - 0b11100000, 0b00011000, //*** * - 0b11100000, 0b00001100, //*** * - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter S: Thickened curves +// Character 'S' (ASCII 83) static const uint8_t letter_S_16x16[32] = { - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00011100, 0b01110000, // *** *** - 0b00011100, 0b01110000, // *** *** - 0b00111000, 0b00000000, // *** - 0b00111000, 0b00000000, // *** - 0b00001111, 0b11100000, // ****** - 0b00001111, 0b11100000, // ****** - 0b00000000, 0b01110000, // *** - 0b00000000, 0b01110000, // *** - 0b00000000, 0b01110000, // *** - 0b00111000, 0b00011100, // *** *** - 0b00011111, 0b11100000, // ****** - 0b00011111, 0b11100000, // ****** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter T: Thickened horizontal and vertical strokes +// Character 'T' (ASCII 84) static const uint8_t letter_T_16x16[32] = { - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter U: Thickened vertical and curved strokes +// Character 'U' (ASCII 85) static const uint8_t letter_U_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b01111111, 0b11111000, // ********* - 0b01111111, 0b11111000, // ********* - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter V: Thickened diagonal strokes +// Character 'V' (ASCII 86) static const uint8_t letter_V_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b01110000, 0b00011100, // ** *** - 0b01110000, 0b00011100, // ** *** - 0b00111000, 0b00111000, // ** *** - 0b00111000, 0b00111000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00000111, 0b11000000, // *** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter W: Thickened vertical and diagonal strokes +// Character 'W' (ASCII 87) static const uint8_t letter_W_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b11100111, 0b00011100, //*** *** - 0b11100111, 0b00011100, //*** *** - 0b11101110, 0b00111000, //*** *** - 0b11101110, 0b00111000, //*** *** - 0b11111100, 0b01110000, //**** *** - 0b11111100, 0b01110000, //**** *** - 0b11111000, 0b11100000, //**** *** - 0b11111000, 0b11100000, //**** *** - 0b11111100, 0b11000000, //***** ** - 0b11111100, 0b11000000, //***** ** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter X: Thickened diagonal strokes +// Character 'X' (ASCII 88) static const uint8_t letter_X_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b01110000, 0b00011100, // ** *** - 0b01110000, 0b00011100, // ** *** - 0b00111000, 0b00111000, // ** *** - 0b00111000, 0b00111000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00011100, 0b01110000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b01110000, 0b00011100, // ** *** - 0b01110000, 0b00011100, // ** *** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter Y: Thickened diagonal and vertical strokes +// Character 'Y' (ASCII 89) static const uint8_t letter_Y_16x16[32] = { - 0b11100000, 0b00001110, //*** *** - 0b11100000, 0b00001110, //*** *** - 0b01110000, 0b00011100, // ** *** - 0b01110000, 0b00011100, // ** *** - 0b00111000, 0b00111000, // ** *** - 0b00111000, 0b00111000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b00011100, 0b01110000, // ** *** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00001110, 0b11100000, // ** ** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Letter Z: Thickened horizontal and diagonal strokes +// Character 'Z' (ASCII 90) static const uint8_t letter_Z_16x16[32] = { - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b00000000, 0b11100000, // *** - 0b00000000, 0b11100000, // *** - 0b00000001, 0b11000000, // ** - 0b00000001, 0b11000000, // ** - 0b00000011, 0b10000000, // ** - 0b00000011, 0b10000000, // ** - 0b00000111, 0b00000000, // *** - 0b00000111, 0b00000000, // *** - 0b00001110, 0b00000000, // *** - 0b00001110, 0b00000000, // *** - 0b11111111, 0b11111000, //*********** - 0b11111111, 0b11111000, //*********** - 0b00000000, 0b00000000, // - 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'a' (ASCII 97) +static const uint8_t letter_a_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'b' (ASCII 98) +static const uint8_t letter_b_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'c' (ASCII 99) +static const uint8_t letter_c_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'd' (ASCII 100) +static const uint8_t letter_d_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'e' (ASCII 101) +static const uint8_t letter_e_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'f' (ASCII 102) +static const uint8_t letter_f_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'g' (ASCII 103) +static const uint8_t letter_g_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'h' (ASCII 104) +static const uint8_t letter_h_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'i' (ASCII 105) +static const uint8_t letter_i_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'j' (ASCII 106) +static const uint8_t letter_j_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'k' (ASCII 107) +static const uint8_t letter_k_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'l' (ASCII 108) +static const uint8_t letter_l_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'm' (ASCII 109) +static const uint8_t letter_m_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'n' (ASCII 110) +static const uint8_t letter_n_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111110, 0b01111000, // ****** **** + 0b01111111, 0b11111000, // ************ + 0b01111111, 0b11111000, // ************ + 0b01111001, 0b11111000, // **** ****** + 0b01111001, 0b11111000, // **** ****** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'o' (ASCII 111) +static const uint8_t letter_o_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'p' (ASCII 112) +static const uint8_t letter_p_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'q' (ASCII 113) +static const uint8_t letter_q_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000011, 0b11110000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'r' (ASCII 114) +static const uint8_t letter_r_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 's' (ASCII 115) +static const uint8_t letter_s_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 't' (ASCII 116) +static const uint8_t letter_t_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'u' (ASCII 117) +static const uint8_t letter_u_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'v' (ASCII 118) +static const uint8_t letter_v_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'w' (ASCII 119) +static const uint8_t letter_w_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11110011, 0b00111100, // **** ** **** + 0b11111111, 0b11111100, // ************** + 0b11111111, 0b11111100, // ************** + 0b11111100, 0b11111100, // ****** ****** + 0b11111100, 0b11111100, // ****** ****** + 0b11110000, 0b00111100, // **** **** + 0b11110000, 0b00111100, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'x' (ASCII 120) +static const uint8_t letter_x_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'y' (ASCII 121) +static const uint8_t letter_y_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b01111000, 0b01111000, // **** **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character 'z' (ASCII 122) +static const uint8_t letter_z_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '0' (ASCII 48) +static const uint8_t letter_0_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '1' (ASCII 49) +static const uint8_t letter_1_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b10000000, // ****** + 0b00011111, 0b10000000, // ****** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '2' (ASCII 50) +static const uint8_t letter_2_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '3' (ASCII 51) +static const uint8_t letter_3_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00011111, 0b11100000, // ******** + 0b00011111, 0b11100000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '4' (ASCII 52) +static const uint8_t letter_4_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00110011, 0b11000000, // ** **** + 0b00110011, 0b11000000, // ** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '5' (ASCII 53) +static const uint8_t letter_5_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '6' (ASCII 54) +static const uint8_t letter_6_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '7' (ASCII 55) +static const uint8_t letter_7_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '8' (ASCII 56) +static const uint8_t letter_8_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '9' (ASCII 57) +static const uint8_t letter_9_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '!' (ASCII 33) +static const uint8_t letter_33_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '@' (ASCII 64) +static const uint8_t letter_64_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00110000, 0b00110000, // ** ** + 0b00110000, 0b00110000, // ** ** + 0b00110011, 0b11110000, // ** ****** + 0b00110011, 0b11110000, // ** ****** + 0b00110011, 0b11110000, // ** ****** + 0b00110011, 0b11110000, // ** ****** + 0b00110000, 0b00000000, // ** + 0b00110000, 0b00000000, // ** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '#' (ASCII 35) +static const uint8_t letter_35_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '$' (ASCII 36) +static const uint8_t letter_36_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b11110000, // ******** + 0b00001111, 0b11110000, // ******** + 0b00111100, 0b00000000, // **** + 0b00111100, 0b00000000, // **** + 0b00111111, 0b11110000, // ********** + 0b00111111, 0b11110000, // ********** + 0b00000000, 0b11110000, // **** + 0b00000000, 0b11110000, // **** + 0b00111111, 0b11000000, // ******** + 0b00111111, 0b11000000, // ******** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // +}; + +// Character '%' (ASCII 37) +static const uint8_t letter_37_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00111100, 0b00110000, // **** ** + 0b00111100, 0b00110000, // **** ** + 0b00111100, 0b11000000, // **** ** + 0b00111100, 0b11000000, // **** ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b11110000, // ** **** + 0b00001100, 0b11110000, // ** **** + 0b00110000, 0b11110000, // ** **** + 0b00110000, 0b11110000, // ** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '^' (ASCII 94) +static const uint8_t letter_94_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00110000, 0b00110000, // ** ** + 0b00110000, 0b00110000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '&' (ASCII 38) +static const uint8_t letter_38_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011111, 0b10000000, // ****** + 0b00011111, 0b10000000, // ****** + 0b01111001, 0b11100000, // **** **** + 0b01111001, 0b11100000, // **** **** + 0b00011111, 0b10000000, // ****** + 0b00011111, 0b10000000, // ****** + 0b01111001, 0b11100000, // **** **** + 0b01111001, 0b11100000, // **** **** + 0b00011110, 0b01111000, // **** **** + 0b00011110, 0b01111000, // **** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '*' (ASCII 42) +static const uint8_t letter_42_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '(' (ASCII 40) +static const uint8_t letter_40_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ')' (ASCII 41) +static const uint8_t letter_41_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '-' (ASCII 45) +static const uint8_t letter_45_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '_' (ASCII 95) +static const uint8_t letter_95_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '=' (ASCII 61) +static const uint8_t letter_61_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '+' (ASCII 43) +static const uint8_t letter_43_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '[' (ASCII 91) +static const uint8_t letter_91_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ']' (ASCII 93) +static const uint8_t letter_93_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '{' (ASCII 123) +static const uint8_t letter_123_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '}' (ASCII 125) +static const uint8_t letter_125_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001111, 0b00000000, // **** + 0b00001111, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ';' (ASCII 59) +static const uint8_t letter_59_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000001, 0b10000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000110, 0b00000000, // ** + 0b00000110, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ':' (ASCII 58) +static const uint8_t letter_58_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ''' (ASCII 39) +static const uint8_t letter_39_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '"' (ASCII 34) +static const uint8_t letter_34_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00001100, 0b11000000, // ** ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ',' (ASCII 44) +static const uint8_t letter_44_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000001, 0b10000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000110, 0b00000000, // ** + 0b00000110, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '.' (ASCII 46) +static const uint8_t letter_46_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '<' (ASCII 60) +static const uint8_t letter_60_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '>' (ASCII 62) +static const uint8_t letter_62_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000000, 0b11000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00001100, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '/' (ASCII 47) +static const uint8_t letter_47_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '?' (ASCII 63) +static const uint8_t letter_63_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b11000000, // ****** + 0b00001111, 0b11000000, // ****** + 0b00111100, 0b11110000, // **** **** + 0b00111100, 0b11110000, // **** **** + 0b00000011, 0b11000000, // **** + 0b00000011, 0b11000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000011, 0b00000000, // ** + 0b00000011, 0b00000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '\' (ASCII 92) +static const uint8_t letter_92_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00011110, 0b00000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000001, 0b11100000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '|' (ASCII 124) +static const uint8_t letter_124_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000111, 0b10000000, // **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '`' (ASCII 96) +static const uint8_t letter_96_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000110, 0b00000000, // ** + 0b00000110, 0b00000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000001, 0b10000000, // ** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character '~' (ASCII 126) +static const uint8_t letter_126_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00001111, 0b00110000, // **** ** + 0b00001111, 0b00110000, // **** ** + 0b00110011, 0b11000000, // ** **** + 0b00110011, 0b11000000, // ** **** + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // +}; + +// Character ' ' (ASCII 32) +static const uint8_t letter_32_16x16[32] = { + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // + 0b00000000, 0b00000000, // }; -// Font bitmaps array -static const uint8_t *font_bitmaps_16x16[26] = { - letter_A_16x16, letter_B_16x16, letter_C_16x16, letter_D_16x16, letter_E_16x16, - letter_F_16x16, letter_G_16x16, letter_H_16x16, letter_I_16x16, letter_J_16x16, - letter_K_16x16, letter_L_16x16, letter_M_16x16, letter_N_16x16, letter_O_16x16, - letter_P_16x16, letter_Q_16x16, letter_R_16x16, letter_S_16x16, letter_T_16x16, - letter_U_16x16, letter_V_16x16, letter_W_16x16, letter_X_16x16, letter_Y_16x16, - letter_Z_16x16 -}; - -// Font pack structure const FontPack basic_font_pack = { .bitmaps = { letter_A_16x16, letter_B_16x16, letter_C_16x16, letter_D_16x16, letter_E_16x16, @@ -541,4 +1909,6 @@ const FontPack basic_font_pack = { letter_U_16x16, letter_V_16x16, letter_W_16x16, letter_X_16x16, letter_Y_16x16, letter_Z_16x16 } -}; \ No newline at end of file +}; + + diff --git a/src/main.c b/src/main.c index 237a6e9..a600f87 100644 --- a/src/main.c +++ b/src/main.c @@ -2,9 +2,30 @@ #include "color.h" #include "font_pack.h" #include "io.h" +#include "String.h" + +static void delay_1s(void) +{ + volatile unsigned long count = 80000000; // Example for ~1 sec at ~80 MHz CPU + while (count--) + { + __asm__ volatile("nop"); + } +} + +void delay_seconds(unsigned int seconds) +{ + for (unsigned int i = 0; i < seconds; i++) + { + delay_1s(); + } +} int kernel_main(void) { + String str; + cs_init(&str); + cs_set(&str, "HELLO MARIO"); uart_io.puts("Initializing renderer...\n"); Renderer renderer; @@ -23,48 +44,38 @@ int kernel_main(void) uart_io.putc('\n'); RenderObject background = {0, 0, renderer.width, renderer.height, COLOR_RED}; - RenderObject blue_rect = {100, 100, 100, 100, COLOR_BLUE}; - RenderText text = { .base = { .x = 20, .y = 30, .color = 0xFFFFFFFF}, - .text = "HELLO MARIO", + .text = str.buffer, .font = &basic_font_pack, }; - uart_io.puts("Use WASD keys to move the rectangle.\n"); - - // Initial draw - renderer.clear_screen(&renderer, background.color); - renderer.draw_rect(&renderer, &blue_rect); - renderer.draw_text(&renderer, &text); while (1) { - char c = uart_io.getc(); - uart_io.putc(c); - - // Movement - if ((c == 'w' || c == 'W') && blue_rect.y > 0) - blue_rect.y = (blue_rect.y > 10) ? blue_rect.y - 10 : 0; - if ((c == 's' || c == 'S') && (blue_rect.y + blue_rect.height) < renderer.height) - blue_rect.y += 10; - if ((c == 'a' || c == 'A') && blue_rect.x > 0) - blue_rect.x = (blue_rect.x > 10) ? blue_rect.x - 10 : 0; - if ((c == 'd' || c == 'D') && (blue_rect.x + blue_rect.width) < renderer.width) - blue_rect.x += 10; - - // Redraw everything renderer.clear_screen(&renderer, background.color); - renderer.draw_rect(&renderer, &blue_rect); renderer.draw_text(&renderer, &text); - // Print updated position - uart_io.puts("\nRect X: "); - uart_io.print_int(blue_rect.x); - uart_io.puts(" Y: "); - uart_io.print_int(blue_rect.y); - uart_io.putc('\n'); + char c = uart_getc(); + + if (c >= 32 && c <= 126) // Printable ASCII + { + cs_append_char(&str, c); + } + else if (c == '\b' || c == 127) // Backspace support + { + if (str.length > 0) + { + str.length--; + str.buffer[str.length] = '\0'; + } + } + + uart_puts(str.buffer); + renderer.draw_text(&renderer, &text); + + delay_seconds(4); } }