-
Дошел до еще одного хорошего упаковщика/распаковщика, который не попал в обзор introspeca. Оказалось, что для deflate в его gzip инкарнации есть распаковщики для z80 (ссылки в английской вики). Попробовал версию для msx - отлично работает. По степени сжатия между exomizer и shrinkler, по скорости - несколько медленнее exomizer и более чем на порядок быстрее shrinklera. Нет ничего удивительного в том, что {LZ+Хаффман} заметно быстрее {LZ+арифметическое кодирование}, было бы здорово, если в этом направлении поработали авторы упаковщиков для восьмибиток. Все же gzip слишком взрослый, хотелось бы что-то попроще, меня его распаковщики для z80 несколько подавляют своей серьезностью.
-
Shrinkler сжимает хорошо, но по результатам тестирования осталась некоторая неудовлетворенность, вроде должен еще лучше. Планировал покрутить настройки, но оказалось, что в версии 4.5 все упростили - есть пресеты. Вариант по умолчанию соответствует пресету "-2", а лучшее сжатие "-9". Добавил в сравнение сжатия графики строку shrinkler -9.
Обновил в репозитории lzsa1_small.asm - сократил на один байт. Это не результат напряженной работы мысли, просто заметил, что раньше забыл убрать лишнюю команду. Разница в быстродействии практически незаметная, меньше одного процента.
-
Довел распаковщик shrinklera для 8080 до приемлемого вида и выложил на gitlab. Размер в полтора раза больше "официальной" версии для z80. Если без торможения, то на 25% быстрее "официальной" версии для z80, с векторовским торможением на 5% быстрее.
Добавил реинициализацию переменной d2, чтобы распаковщик можно было вызывать неоднократно. В описании отметил, что адрес назначения д.б. четный, так было и в оригинале, но там не было про это написано.
-
А существует ли в природе распаковщик shrinklera для 8086?
-
Не гуглится, но для 8086 есть несколько вариантов.
1. Если в принципе нужен LZMA для 8086, то стоит посмотреть UPX.
2. Если нужен именно shrinkler
2.1. Можно попробовать полуавтоматически транслировать z80->8086 рекомпилятором Валерия Бостана.
2.2. Можно вручную транслировать 8080->8086, это не самый лучший вариант, но очень простой. А потом оптимизировать, хотя бы как минимум умножение заменить на команду умножения.
-
Гуглил, но, увы, безуспешно.. Нужно максимально возможное сжатие для компа уровня IBM PC-5150, а скорость распаковки не очень важна.
Тестил LZ4 - слабо, LZSA2 - неплохой результат, но Shrinkler показал результаты еще лучше на 10%, а то и больше.. Упаковывал ресурсы игрушки. Как раз этих процентов и не хватает для того, чтобы все поместилось в память. Ручную трансляцию рассматривал, но, с оптимизациями, которые используют для депакеров, высока вероятность ошибок, для 8080 не кодил.. Нужно все же полностью понимать принцип работы. Получается все же вслепую транслировать придется, раз готовых вариантов нет.
-
Лично мне было бы проще конверснуть 8080->8086, но если 8080 не особо знаком, то возможно лучше все же посмотреть upx. Сжатые им с опцией --8086 .comы в эмуляторе поиска работают.
-
Быстро и грязно конверснул shrinkler для 8088/8086, добавил в репозиторий. Много не проверял, но на первый взгляд работает. Для tiny модели памяти, si - адрес сжатых данных; di - куда распаковывать. Получилось 217 байт, пока что код ужасный, уверен, что можно улучшить.
- - - Добавлено - - -
Забыл в исходнике упомянуть, что компилировал FASMом. Не то, чтобы это было принципиально, но на всякий случай.
-
Выложил оптимизированную версию для 8088/86. Она на 25 байт короче и на 30% быстрее (замерял в emu).
Чтобы оправдаться за оффтоп напишу, что в процессе баловства с 8088 появилась идея по оптимизации и версии для 8080.
-
Не оффтоп ни разу.
Надо для Вектора эмуляцию 8088.