diff --git a/firmware/drivers/lcd-charset-player.c b/firmware/drivers/lcd-charset-player.c index 37464f1253..a892fae609 100644 --- a/firmware/drivers/lcd-charset-player.c +++ b/firmware/drivers/lcd-charset-player.c @@ -57,6 +57,19 @@ enum { XF_uGRAVE, XF_uACUTE, XF_uCIRCUMFLEX, XF_uDIERESIS, XF_yACUTE, XF_yDIERESIS, + /* Cyrillic */ + XF_CYR_BE, XF_CYR_GHE, XF_CYR_DE, XF_CYR_ZHE, + XF_CYR_ZE, XF_CYR_I, XF_CYR_SHORTI, XF_CYR_EL, + XF_CYR_PE, XF_CYR_TSE, XF_CYR_CHE, XF_CYR_SHA, + XF_CYR_SHCHA, XF_CYR_HARD, XF_CYR_YERU, XF_CYR_E, + XF_CYR_YU, XF_CYR_YA, XF_CYR_be, XF_CYR_ve, + XF_CYR_ghe, XF_CYR_de, XF_CYR_zhe, XF_CYR_ze, + XF_CYR_i, XF_CYR_SHORTi, XF_CYR_ka, XF_CYR_el, + XF_CYR_em, XF_CYR_en, XF_CYR_pe, XF_CYR_te, + XF_CYR_tse, XF_CYR_che, XF_CYR_sha, XF_CYR_shcha, + XF_CYR_hard, XF_CYR_yeru, XF_CYR_soft, XF_CYR_e, + XF_CYR_yu, XF_CYR_ya, + #endif }; @@ -253,6 +266,87 @@ static const struct xchar_info xchar_info_newlcd[] = { { 0xfd, XF_yACUTE, 1, 0x79 }, /* ý (y acute) */ { 0xff, XF_yDIERESIS, 1, 0x79 }, /* ÿ (y dieresis) */ + + /* Cyrillic */ + { 0x0400, XF_EGRAVE, 1, 0x45 }, /* cyrillic IE grave */ + { 0x0401, XF_EDIERESIS, 1, 0x45 }, /* cyrillic IO */ + + { 0x0405, 0, 0, 0x53 }, /* cyrillic DZE */ + { 0x0406, 0, 0, 0x49 }, /* cyrillic byeloruss-ukr. I */ + { 0x0407, XF_IDIERESIS, 1, 0x49 }, /* cyrillic YI */ + { 0x0408, 0, 0, 0x4a }, /* cyrillic JE */ + + { 0x0410, 0, 0, 0x41 }, /* cyrillic A */ + { 0x0411, XF_CYR_BE, 1, 0xeb }, /* cyrillic BE */ + { 0x0412, 0, 0, 0x42 }, /* cyrillic VE */ + { 0x0413, XF_CYR_GHE, 2, 0xeb }, /* cyrillic GHE */ + { 0x0414, XF_CYR_DE, 2, 0x44 }, /* cyrillic DE */ + { 0x0415, 0, 0, 0x45 }, /* cyrillic IE */ + { 0x0416, XF_CYR_ZHE, 2, 0x2a }, /* cyrillic ZHE */ + { 0x0417, XF_CYR_ZE, 1, 0x33 }, /* cyrillic ZE */ + { 0x0418, XF_CYR_I, 1, 0x55 }, /* cyrillic I */ + { 0x0419, XF_CYR_SHORTI, 1, 0x55 }, /* cyrillic short I */ + { 0x041a, 0, 0, 0x4b }, /* cyrillic K */ + { 0x041b, XF_CYR_EL, 2, 0x4c }, /* cyrillic EL */ + { 0x041c, 0, 0, 0x4d }, /* cyrillic EM */ + { 0x041d, 0, 0, 0x48 }, /* cyrillic EN */ + { 0x041e, 0, 0, 0x4f }, /* cyrillic O */ + { 0x041f, XF_CYR_PE, 1, 0x14 }, /* cyrillic PE */ + { 0x0420, 0, 0, 0x50 }, /* cyrillic ER */ + { 0x0421, 0, 0, 0x43 }, /* cyrillic ES */ + { 0x0422, 0, 0, 0x54 }, /* cyrillic TE */ + { 0x0423, 0, 0, 0x59 }, /* cyrillic U */ + { 0x0424, 0, 0, 0xe8 }, /* cyrillic EF */ + { 0x0425, 0, 0, 0x58 }, /* cyrillic HA */ + { 0x0426, XF_CYR_TSE, 2, 0xd9 }, /* cyrillic TSE */ + { 0x0427, XF_CYR_CHE, 2, 0xd1 }, /* cyrillic CHE */ + { 0x0428, XF_CYR_SHA, 1, 0x57 }, /* cyrillic SHA */ + { 0x0429, XF_CYR_SHCHA, 1, 0x57 }, /* cyrillic SHCHA */ + { 0x042a, XF_CYR_HARD, 1, 0x62 }, /* cyrillic capital hard sign */ + { 0x042b, XF_CYR_YERU, 2, 0x1a }, /* cyrillic YERU */ + { 0x042c, 0, 0, 0x62 }, /* cyrillic capital soft sign */ + { 0x042d, XF_CYR_E, 2, 0xa6 }, /* cyrillic E */ + { 0x042e, XF_CYR_YU, 2, 0x1b }, /* cyrillic YU */ + { 0x042f, XF_CYR_YA, 2, 0xf3 }, /* cyrillic YA */ + { 0x0430, 0, 0, 0x61 }, /* cyrillic a */ + { 0x0431, 0, 0, 0xeb }, /* cyrillic be */ + { 0x0432, XF_CYR_ve, 1, 0xe1 }, /* cyrillic ve */ + { 0x0433, XF_CYR_ghe, 1, 0x72 }, /* cyrillic ghe */ + { 0x0434, XF_CYR_de, 2, 0x1f }, /* cyrillic de */ + { 0x0435, 0, 0, 0x65 }, /* cyrillic ie */ + { 0x0436, XF_CYR_zhe, 1, 0x2a }, /* cyrillic zhe */ + { 0x0437, XF_CYR_ze, 1, 0xae }, /* cyrillic ze */ + { 0x0438, XF_CYR_i, 1, 0x75 }, /* cyrillic i */ + { 0x0439, XF_CYR_SHORTi, 1, 0x75 }, /* cyrillic short i */ + { 0x043a, XF_CYR_ka, 1, 0x6b }, /* cyrillic ka */ + { 0x043b, XF_CYR_el, 2, 0xca }, /* cyrillic el */ + { 0x043c, XF_CYR_em, 1, 0x6b }, /* cyrillic em */ + { 0x043d, XF_CYR_en, 2, 0x48 }, /* cyrillic en */ + { 0x043e, 0, 0, 0x6f }, /* cyrillic o */ + { 0x043f, 0, 0, 0xe3 }, /* cyrillic pe */ + { 0x0440, 0, 0, 0x70 }, /* cyrillic er */ + { 0x0441, 0, 0, 0x63 }, /* cyrillic es */ + { 0x0442, XF_CYR_te, 1, 0x74 }, /* cyrillic te */ + { 0x0443, 0, 0, 0x79 }, /* cyrillic u */ + { 0x0444, 0, 0, 0xed }, /* cyrillic ef */ + { 0x0445, 0, 0, 0x78 }, /* cyrillic ha */ + { 0x0446, XF_CYR_tse, 2, 0xd9 }, /* cyrillic tse */ + { 0x0447, XF_CYR_che, 2, 0xd1 }, /* cyrillic che */ + { 0x0448, XF_CYR_sha, 1, 0x77 }, /* cyrillic sha */ + { 0x0449, XF_CYR_shcha, 1, 0x77 }, /* cyrillic shcha */ + { 0x044a, XF_CYR_hard, 1, 0x62 }, /* cyrillic small hard sign */ + { 0x044b, XF_CYR_yeru, 2, 0x1a }, /* cyrillic yeru */ + { 0x044c, XF_CYR_soft, 1, 0x62 }, /* cyrillic small soft sign */ + { 0x044d, XF_CYR_e, 2, 0xa7 }, /* cyrillic e */ + { 0x044e, XF_CYR_yu, 2, 0x1b }, /* cyrillic yu */ + { 0x044f, XF_CYR_ya, 2, 0xfb }, /* cyrillic ya */ + { 0x0450, XF_eGRAVE, 1, 0x65 }, /* cyrillic ie grave */ + { 0x0451, XF_eDIERESIS, 1, 0x65 }, /* cyrillic io */ + + { 0x0455, 0, 0, 0x73 }, /* cyrillic dze */ + { 0x0456, 0, 0, 0x69 }, /* cyrillic byeloruss-ukr. i */ + { 0x0457, XF_iDIERESIS, 1, 0x69 }, /* cyrillic yi */ + { 0x0458, 0, 0, 0x6a }, /* cyrillic je */ /* Runtime-definable characters */ { 0xe000, 0x8000, 15, 0x20 }, /* variable character 0 */ @@ -500,6 +594,87 @@ static const struct xchar_info xchar_info_oldlcd[] = { { 0xff, XF_yDIERESIS, 1, 0x7d }, /* ÿ (y dieresis) */ + /* Cyrillic */ + { 0x0400, 0, 0, 0x90 }, /* cyrillic IE grave */ + { 0x0401, 0, 0, 0x92 }, /* cyrillic IO */ + + { 0x0405, 0, 0, 0x57 }, /* cyrillic DZE */ + { 0x0406, 0, 0, 0x4d }, /* cyrillic byeloruss-ukr. I */ + { 0x0407, XF_IDIERESIS, 1, 0x4d }, /* cyrillic YI */ + { 0x0408, 0, 0, 0x4e }, /* cyrillic JE */ + + { 0x0410, 0, 0, 0x45 }, /* cyrillic A */ + { 0x0411, XF_CYR_BE, 1, 0x3a }, /* cyrillic BE */ + { 0x0412, 0, 0, 0x46 }, /* cyrillic VE */ + { 0x0413, 0, 0, 0x17 }, /* cyrillic GHE */ + { 0x0414, XF_CYR_DE, 1, 0x14 }, /* cyrillic DE */ + { 0x0415, 0, 0, 0x49 }, /* cyrillic IE */ + { 0x0416, XF_CYR_ZHE, 2, 0x2e }, /* cyrillic ZHE */ + { 0x0417, XF_CYR_ZE, 1, 0x37 }, /* cyrillic ZE */ + { 0x0418, XF_CYR_I, 1, 0x59 }, /* cyrillic I */ + { 0x0419, XF_CYR_SHORTI, 1, 0x9b }, /* cyrillic short I */ + { 0x041a, 0, 0, 0x4f }, /* cyrillic K */ + { 0x041b, XF_CYR_EL, 1, 0x18 }, /* cyrillic EL */ + { 0x041c, 0, 0, 0x51 }, /* cyrillic EM */ + { 0x041d, 0, 0, 0x4c }, /* cyrillic EN */ + { 0x041e, 0, 0, 0x53 }, /* cyrillic O */ + { 0x041f, 0, 0, 0x1a }, /* cyrillic PE */ + { 0x0420, 0, 0, 0x54 }, /* cyrillic ER */ + { 0x0421, 0, 0, 0x47 }, /* cyrillic ES */ + { 0x0422, 0, 0, 0x58 }, /* cyrillic TE */ + { 0x0423, 0, 0, 0x5d }, /* cyrillic U */ + { 0x0424, 0, 0, 0x16 }, /* cyrillic EF */ + { 0x0425, 0, 0, 0x5c }, /* cyrillic HA */ + { 0x0426, XF_CYR_TSE, 2, 0x5e }, /* cyrillic TSE */ + { 0x0427, XF_CYR_CHE, 2, 0x0e }, /* cyrillic CHE */ + { 0x0428, XF_CYR_SHA, 1, 0x5b }, /* cyrillic SHA */ + { 0x0429, XF_CYR_SHCHA, 1, 0x5b }, /* cyrillic SHCHA */ + { 0x042a, XF_CYR_HARD, 1, 0x66 }, /* cyrillic capital hard sign */ + { 0x042b, XF_CYR_YERU, 2, 0x66 }, /* cyrillic YERU */ + { 0x042c, 0, 0, 0x66 }, /* cyrillic capital soft sign */ + { 0x042d, XF_CYR_E, 2, 0x89 }, /* cyrillic E */ + { 0x042e, XF_CYR_YU, 2, 0x95 }, /* cyrillic YU */ + { 0x042f, XF_CYR_YA, 1, 0x0d }, /* cyrillic YA */ + { 0x0430, 0, 0, 0x65 }, /* cyrillic a */ + { 0x0431, XF_CYR_be, 1, 0x97 }, /* cyrillic be */ + { 0x0432, XF_CYR_ve, 1, 0x22 }, /* cyrillic ve */ + { 0x0433, XF_CYR_ghe, 1, 0x76 }, /* cyrillic ghe */ + { 0x0434, XF_CYR_de, 2, 0x14 }, /* cyrillic de */ + { 0x0435, 0, 0, 0x69 }, /* cyrillic ie */ + { 0x0436, XF_CYR_zhe, 1, 0x2e }, /* cyrillic zhe */ + { 0x0437, XF_CYR_ze, 1, 0x37 }, /* cyrillic ze */ + { 0x0438, XF_CYR_i, 1, 0x79 }, /* cyrillic i */ + { 0x0439, XF_CYR_SHORTi, 1, 0xc9 }, /* cyrillic short i */ + { 0x043a, XF_CYR_ka, 1, 0x6f }, /* cyrillic ka */ + { 0x043b, XF_CYR_el, 1, 0x18 }, /* cyrillic el */ + { 0x043c, XF_CYR_em, 1, 0x71 }, /* cyrillic em */ + { 0x043d, XF_CYR_en, 2, 0x4c }, /* cyrillic en */ + { 0x043e, 0, 0, 0x73 }, /* cyrillic o */ + { 0x043f, XF_CYR_pe, 1, 0x72 }, /* cyrillic pe */ + { 0x0440, 0, 0, 0x74 }, /* cyrillic er */ + { 0x0441, 0, 0, 0x67 }, /* cyrillic es */ + { 0x0442, XF_CYR_te, 1, 0x78 }, /* cyrillic te */ + { 0x0443, 0, 0, 0x7d }, /* cyrillic u */ + { 0x0444, 0, 0, 0x10 }, /* cyrillic ef */ + { 0x0445, 0, 0, 0x7c }, /* cyrillic ha */ + { 0x0446, XF_CYR_tse, 2, 0x7e }, /* cyrillic tse */ + { 0x0447, XF_CYR_che, 2, 0x0e }, /* cyrillic che */ + { 0x0448, XF_CYR_sha, 1, 0x7b }, /* cyrillic sha */ + { 0x0449, XF_CYR_shcha, 1, 0x7b }, /* cyrillic shcha */ + { 0x044a, XF_CYR_hard, 1, 0x66 }, /* cyrillic small hard sign */ + { 0x044b, XF_CYR_yeru, 2, 0x66 }, /* cyrillic yeru */ + { 0x044c, XF_CYR_soft, 1, 0x66 }, /* cyrillic small soft sign */ + { 0x044d, XF_CYR_e, 2, 0x89 }, /* cyrillic e */ + { 0x044e, XF_CYR_yu, 2, 0x95 }, /* cyrillic yu */ + { 0x044f, XF_CYR_ya, 2, 0x84 }, /* cyrillic ya */ + { 0x0450, 0, 0, 0x08 }, /* cyrillic ie grave */ + { 0x0451, 0, 0, 0xa0 }, /* cyrillic io */ + + { 0x0455, 0, 0, 0x77 }, /* cyrillic dze */ + { 0x0456, 0, 0, 0x6d }, /* cyrillic byeloruss-ukr. i */ + { 0x0457, 0, 0, 0xa3 }, /* cyrillic yi */ + { 0x0458, 0, 0, 0x6e }, /* cyrillic je */ + /* Runtime-definable characters */ { 0xe000, 0x8000, 15, 0x24 }, /* variable character 0 */ { 0xe001, 0x8001, 15, 0x24 }, /* variable character 1 */ @@ -648,6 +823,49 @@ const unsigned char xfont_fixed[][8] = { [XF_uDIERESIS] = { 0x00, 0x0a, 0x00, 0x11, 0x11, 0x13, 0x0d, 0x00}, /* ü */ [XF_yACUTE] = { 0x02, 0x04, 0x11, 0x11, 0x0f, 0x01, 0x0e, 0x00}, /* ý */ [XF_yDIERESIS] = { 0x0a, 0x00, 0x11, 0x11, 0x0f, 0x01, 0x0e, 0x00}, /* ÿ */ + /* Cyrillic */ + [XF_CYR_BE] = { 0x1f, 0x10, 0x10, 0x1e, 0x11, 0x11, 0x1e, 0x00}, + [XF_CYR_GHE] = { 0x1f, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00}, + [XF_CYR_DE] = { 0x07, 0x09, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x00}, + [XF_CYR_ZHE] = { 0x15, 0x15, 0x0e, 0x04, 0x0e, 0x15, 0x15, 0x00}, + [XF_CYR_ZE] = { 0x0e, 0x11, 0x01, 0x0e, 0x01, 0x11, 0x0e, 0x00}, + [XF_CYR_I] = { 0x11, 0x11, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00}, + [XF_CYR_SHORTI] = { 0x0a, 0x04, 0x11, 0x13, 0x15, 0x19, 0x11, 0x00}, + [XF_CYR_EL] = { 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x11, 0x00}, + [XF_CYR_PE] = { 0x1f, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00}, + [XF_CYR_TSE] = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x1f, 0x01, 0x00}, + [XF_CYR_CHE] = { 0x11, 0x11, 0x11, 0x0f, 0x01, 0x01, 0x01, 0x00}, + [XF_CYR_SHA] = { 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x00}, + [XF_CYR_SHCHA] = { 0x15, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x01, 0x00}, + [XF_CYR_HARD] = { 0x18, 0x08, 0x08, 0x0e, 0x09, 0x09, 0x0e, 0x00}, + [XF_CYR_YERU] = { 0x11, 0x11, 0x11, 0x19, 0x15, 0x15, 0x19, 0x00}, + [XF_CYR_E] = { 0x0e, 0x11, 0x01, 0x07, 0x01, 0x11, 0x0e, 0x00}, + [XF_CYR_YU] = { 0x12, 0x15, 0x15, 0x1d, 0x15, 0x15, 0x12, 0x00}, + [XF_CYR_YA] = { 0x0f, 0x11, 0x11, 0x0f, 0x05, 0x09, 0x11, 0x00}, + [XF_CYR_be] = { 0x0f, 0x10, 0x0e, 0x11, 0x11, 0x11, 0x0e, 0x00}, + [XF_CYR_ve] = { 0x00, 0x00, 0x1e, 0x11, 0x1e, 0x11, 0x1e, 0x00}, + [XF_CYR_ghe] = { 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x00}, + [XF_CYR_de] = { 0x00, 0x00, 0x06, 0x0a, 0x0a, 0x1f, 0x11, 0x00}, + [XF_CYR_zhe] = { 0x00, 0x00, 0x15, 0x0e, 0x04, 0x0e, 0x15, 0x00}, + [XF_CYR_ze] = { 0x00, 0x00, 0x1e, 0x01, 0x0e, 0x01, 0x1e, 0x00}, + [XF_CYR_i] = { 0x00, 0x00, 0x11, 0x13, 0x15, 0x19, 0x11, 0x00}, + [XF_CYR_SHORTi] = { 0x0a, 0x04, 0x00, 0x11, 0x13, 0x15, 0x19, 0x00}, + [XF_CYR_ka] = { 0x00, 0x00, 0x11, 0x12, 0x1c, 0x12, 0x11, 0x00}, + [XF_CYR_el] = { 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x11, 0x00}, + [XF_CYR_em] = { 0x00, 0x00, 0x11, 0x1b, 0x15, 0x11, 0x11, 0x00}, + [XF_CYR_en] = { 0x00, 0x00, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x00}, + [XF_CYR_pe] = { 0x00, 0x00, 0x1f, 0x11, 0x11, 0x11, 0x11, 0x00}, + [XF_CYR_te] = { 0x00, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x00}, + [XF_CYR_tse] = { 0x00, 0x00, 0x11, 0x11, 0x11, 0x1f, 0x01, 0x00}, + [XF_CYR_che] = { 0x00, 0x00, 0x11, 0x11, 0x0f, 0x01, 0x01, 0x00}, + [XF_CYR_sha] = { 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x00}, + [XF_CYR_shcha] = { 0x00, 0x00, 0x15, 0x15, 0x15, 0x1f, 0x01, 0x00}, + [XF_CYR_hard] = { 0x00, 0x00, 0x18, 0x0e, 0x09, 0x09, 0x0e, 0x00}, + [XF_CYR_yeru] = { 0x00, 0x00, 0x11, 0x19, 0x15, 0x15, 0x19, 0x00}, + [XF_CYR_soft] = { 0x00, 0x00, 0x08, 0x0e, 0x09, 0x09, 0x0e, 0x00}, + [XF_CYR_e] = { 0x00, 0x00, 0x0e, 0x11, 0x03, 0x11, 0x0e, 0x00}, + [XF_CYR_yu] = { 0x00, 0x00, 0x12, 0x15, 0x1d, 0x15, 0x12, 0x00}, + [XF_CYR_ya] = { 0x00, 0x00, 0x0f, 0x11, 0x0f, 0x09, 0x11, 0x00}, #endif /* !BOOTLOADER */ };