Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.

«МК-61s»: бинарные приложения

Сейчас прошивка ретроконсоли устроена таким образом, что часть блоков при компиляции можно отключить, если они не требуются, или в том случае, если используется более скромное оборудование, для которого она не помещается.

Уже сейчас такое оборудование существует — у тех, кто собирает эту ретроконсоль на контроллере STM32F401CC, полная прошивка не собирается: не хватает памяти. Мне давно хотелось сделать для этого случая подгружаемые модули, и вчера, просидев с нейросетью до двух ночи, удалось запустить первую версию, в которой заработали два тяжёлых модуля — языки программирования «Фокал» и «TinyBASIC».

Туда же я вынес просмотрщик картинок в формате WBMP, который прикрутил недавно. Не самая нужная в этой ретроконсоли штука, но у меня есть задумка, которая может сделать её полезной.

В итоге для 401-го контроллера модули лежат на файловой системе, которую я делал для поддержки загрузки файлов по USB (правда, это уже её пятая версия), и подгружаются в оперативную память по требованию. А чтобы это происходило быстрее, я решил чем-нибудь их сжимать. Вопрос — чем.

Внутри уже есть реализации RLE для сжатия шрифтов (я хочу подобрать какие-нибудь симпатичные шрифты для графического экрана, но пока руки не дошли) и LZSS для сжатия файлов других типов. Конечно, сначала я смотрел в сторону того, что уже есть, но потом решил почитать «Википедию» и «Хабр» — вдруг найдётся что-то более подходящее.

Основные требования — хорошо сжимает бинарные файлы, а распаковщик быстрый и маленький.

Таблица с тестами по сжатию разных модулей

Я покидал в нейросетку всё найденное, добавил то, что помнил сам, и мы провели эксперимент — сжали все три получившихся модуля и выбрали победителя. Победил алгоритм ZX0, разработанный для восьмибитных компьютеров (прежде всего — «Спектрума») программистом Эйнаром Саукасом.

Утром мы ещё поработали над большей универсальностью этого подхода — хотелось устранить шероховатости и сделать его более универсальным, чтобы писать такие программные модули было проще.

На целевом оборудовании я решение не испытывал — у меня его нет, но на своей ретроконсоли всё проверил: работает. Дальше займусь специализированными инструментами, чтобы упростить создание модулей, а потом перейду к другим пунктам своего уже довольно сильно поредевшего плана развития прошивки.