Для утилиты Sav2Cart сделал сжатие по алгоритму LZSS, используется если только образ не влезает как есть и не влезает после использования RLE.
За основу была взята реализация LZSS, которая лежит в виде lzss.c буквально на каждом углу /* LZSS encoder-decoder (c) Haruhiko Okumura */, и затем допилена напильником под загрузчик.
Загрузчик взят из исходников утилиты LZSAV (за авторством Остапенко Алексей, 1994 год).
Для примера в том же архиве вложен HWYENC.BIN
https://zx-pk.ru/attachment.php?atta...8&d=1541797769
Если вдруг кому интересны детали реализации -- в отличие от "классического" LZSS управляющие биты сгруппированы в байты, биты "ссылок" устроены как 4 бит длина + 12 бит смещение назад = одно слово, окно получается размером 4 КБ. В такой реализации почти не используются побитовые сдвиги, выборка идёт побайтно.
Исходники утилиты здесь: https://github.com/nzeemin/ukncbtl-u.../Sav2Cartridge




Ответить с цитированием