TFT eSPI + ESP32 - русификация

Добрый день. Тема неоднократно поднималась, есть примеры (некоторые даже рабочие).
Я сам пробовал рабочие скетчи. НО! Мне кажется что шрифты у меня хоть и подгружаются (я работаю со SPIFFS) но сообщения на русском выводятся каким-то шрифтом “по умолчанию”.
Поясню.

tft.loadFont(FONT_A30)
tft.showFont(2000);
tft.unloadFont();

результат работы:

tft.loadFont(FONT_A30);
tft.drawString(utf8rus("ПРИВЕТ"),0,0,4);
tft.unloadFont();
  

или

tft.loadFont(FONT_A30);
tft.println("ПРИВЕТ");
tft.unloadFont();
  

результат работы:

Понимая, что может быть utf8rus “кривая” и неправильно задано смещение, я начал выводить всё подряд посимвольно смотря где же русские буквы.

for ( int x = 0x0021; x<= 0x007F; x++)
{
  tft.print(x); tft.print("-"); tft.print((char)(x)); tft.print("*");
  delay (500);
}
for ( int x = 0x0400; x<= 0x04FF; x++)
{
  tft.print(x); tft.print("-"); tft.print((char)(x)); tft.print("*");
  delay (500);
}
for ( int x = 0x0500; x<= 0x052F; x++)
{
  tft.print(x); tft.print("-"); tft.print((char)(x)); tft.print("*");
  delay (500);
}

(меняя начало по X что бы на экран всё влезло)
результат:

Вместо русских символов - прямоугольники.
Где русские символы?
Что я упускаю? Где ошибка?

Запускал скетч работы со SPIFFS. Нет, всё нормально читается.

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0

Initialisation done.

SPIFFS files found:
Listing directory: /
  anonymouspro30.vlw                145482 bytes
  Arial20.vlw                        65515 bytes
  Arial22.vlw                        75848 bytes
  Arial25.vlw                        94315 bytes
  SitkaBannerItalic30.vlw            62215 bytes
  UbuntuMonoB30.vlw                 145481 bytes
  Arial30.vlw                       134860 bytes
  ptmonobold30.vlw                  145480 bytes

В файле User_Setup.h я закоментировал строки с дефолтными шрифтами

//#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
//#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
//#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
//#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
//#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
// this will save ~20kbytes of FLASH
#define SMOOTH_FONT

Видите ли, тип char - это один байт. И потому пытаться вывести на экран значение в пределах
for ( int x = 0x0400; x<= 0x04FF; x++)
с помощью оператора tft.print((char)(x));бессмысленно.

Вам надо разобраться, какая у вас кодировка в Ардуино скетче, какая в фонте и соответствует ли используемая функция utf8rus переводу первой кодовой таблицы во вторую