«МК-61s»: однобайтовая кодировка

Сжег половину недельных токенов на задачу уменьшения размера прошивки для «МК-61s». У нас есть конфигурация, куда давно ничего не помещается, для нее я делал поддержку внешних запускаемых программ, но все равно из нее всё вываливается.

Поэтому на выходных начал делать две вещи, которые давно напрашивались, — переход на однобайтовую кодировку и выделение «USB-диска» в отдельное приложение. Хотя вторая задача оказалась инженерно сложнее, зато потребовала меньше моего участия — я просто подключил одну из своих консолей к ноутбуку, описал набор тестов и ждал, пока нейросеть устранит все проблемы.

В задаче перевода кодировании символов на один байт мне пришлось участвовать постоянно.

Для начала для чего это нужно. Для нескольких вещей.

Во-первых, в прошивке достаточно много различных строк, которые приходится хранить. На одном этом удалось сэкономить около килобайта. Во-вторых, у меня ограниченные буферы редактирования. Тексты на русском в Юникоде занимают по два байта на символ. В-третьих, внутренний «диск» небольшой — всего 512 килобайт. И хотя используется сжатие, программы, использующие один байт на символ, всё равно занимают меньше места.

Поэтому пришлось придумать свою кодировку. Я её назвал «M8» («MK-61», 8 бит), но по сути это — CP1251 с добавленными специальными символами на позиции 0E…1F. Я выбрал как базу CP1251, потому что у большинства членов команды, а также у редких пользователей из сообщества — «Винда», поэтому при работе в терминале нам ничего не придётся перекодировать (специальные символы используются в интерфейсе, поэтому в терминал не попадают).

Таблица ASCII-кодов МК-61s: латиница, кириллица, цифры, знаки препинания и управляющие символы.
Теперь у «МК-61s» есть своя однобайтовая кодировка частично совместимая с так называемой «CP1251», для краткости я её называю «M8»

Файловая система, которая видна через «USB-диск», при этом работает как и раньше — длинные имена и содержимое файлов на лету преобразуются в «Юникод» и обратно. Поскольку для каждого файла у нас хранится метаинформация, чтобы мы знали, чем его запускать, бинарные файлы от перекодировки не страдают.

У меня есть идея поместить на свободные места все национальные символы, используемые внутри России — места хватает, однако она разбивается о сомнения, как поступить с их отображением в терминале. То ли показывать там знак «вопроса», то ли предусмотреть режим переключения терминала в «Юникод». Пока отложил эту идею, всё равно пользователей таких символов пока не наблюдается.