При упаковке она меньше упакованного оригинала, но при вставке в ром (1C010) последний на заставке выдаёт абракадабру, хотя оригинальную упакованную графику запускает без проблем. Что я делаю не так?
Адрес только на 1С010, потом код продолжает распаковку подряд без указания адресов. Данные идут так: 1C010-1E780 (tiles), 1E781-1E88B (map), 1E88C-1EB2A (map), вам нужно запаковать 1C010 и 1E88C, сразу после пересжатых данных 1C010 скопируйте 1E781-1E88B, а после сразу пересжатые 1E88C.
А каким алгоритмом пожата?
В основе два алгоритма: RLE и сжатие увеличивающихся на 1 байтов (например, 02 03 04 05 сжимаются). Для тайлов RLE применяется через 3 байта, т. е. байты в позициях 0, 4, 8, ... сжимаются, потом 1, 5, 9, ... и т. д. Для tilemap RLE через 1 байт (0, 2, 4, ... потом 1, 3, 5, ...), а после эти сжатые данные сжимаются 2-м алгоритмом. Кстати, такая же реализация сжатия тайлов (RLE через 3 байта) в [SMS] Ys и [SMS] Rampage, в последнем также через 1 байт как tilemap здесь, но без 2-го алгоритма поверх.
UPD: Исправил опечатки.