ivagor
06.10.2019, 12:29
Пожалуй самый сильный упаковщик для msx на данный момент - shrinkler (http://crinkler.net/shrinkler45.zip). Для него сделали раcпаковщик для z80 (http://www.cpcwiki.eu/forum/programming/shrinkler-z80-decrunch-routine/). И еще есть модификация (https://github.com/uniabis/z80depacker) совместимая с R800 и пригодная для размещения в пзу.
Сделал свою модификацию (https://gitlab.com/ivagor/deshrinkler8):
1. Оптимизировал по мелочи, чуть сократил и ускорил.
2. Убрал самомодификацию, но не как uniabis, а с учетом быстродействия.
3. Добавил инициализацию переменной d2, стало можно вызывать распаковщик много раз. Если добавить инициализацию d2 в оригинальную версию, то она будет 209+5=214 байт, версия без самомодификации увеличится с 211 до 215 байт, у меня - 212 байт.
4. В варианте для R800 заменил умножение на аппаратное, с ним распаковщик стал еще быстрее и компактнее. Можно отметить, что если для z80 на частотах 3.5 да и 7 МГц shrinkler все же тяжеловат, то на R800 работает с приемлемой скоростью.
Сделал свою модификацию (https://gitlab.com/ivagor/deshrinkler8):
1. Оптимизировал по мелочи, чуть сократил и ускорил.
2. Убрал самомодификацию, но не как uniabis, а с учетом быстродействия.
3. Добавил инициализацию переменной d2, стало можно вызывать распаковщик много раз. Если добавить инициализацию d2 в оригинальную версию, то она будет 209+5=214 байт, версия без самомодификации увеличится с 211 до 215 байт, у меня - 212 байт.
4. В варианте для R800 заменил умножение на аппаратное, с ним распаковщик стал еще быстрее и компактнее. Можно отметить, что если для z80 на частотах 3.5 да и 7 МГц shrinkler все же тяжеловат, то на R800 работает с приемлемой скоростью.