Так, я разобрался что делают все пять подпрограмм, правда как они это делают понятно пока только в трёх:
1. сдвигает флаговые байты на заданное аккумулятором количество бит, + грузит из рома новое значение аккумулятора.
2. строит таблицы смещений для двух режимов копирования - из рома и из распакованных данных (как пока не разобрался).
3. в зависимости от входного Y определяет смещение для копирования из распакованных данных или количество байт для копирования (из рома или из распаковки) (тоже пока не разобрался).
4. записывает значение аккумулятора в распаковку как 2 байта - это просто
5. тоже, что и 4, но 1 байт.
Основная логика распаковки заключена в подпрограмме 3, так как основа программы просто циклично повторяет её с тремя разными Y (32, 160, 288) попеременно, и записывает результаты подпрограммами 4 и 5.
Однако для полного понимания алгоритма нужно разобраться в таблицах смещений второй подпрограммы.