Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Формат архива LZA

  1. #11
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,999
    Спасибо Благодарностей отдано 
    1,066
    Спасибо Благодарностей получено 
    1,236
    Поблагодарили
    479 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от kolk Посмотреть сообщение
    Какой-то LZSS, поксоренный с 0xFF. Исходников не нашел, может, подбором сделаю.
    Я прикручивал реализацию LZSS к своей утилите Sav2Cart для УКНЦ, причём брал алгоритм от утилиты LZSAV, за авторством Остапенко Алексей, 1994 год.
    Там, в отличие от "классического" LZSS, управляющие биты сгруппированы в байты, биты "ссылок" устроены как 4 бит длина + 12 бит смещение назад = одно слово, окно получается размером 4 КБ. В такой реализации почти не используются побитовые сдвиги, выборка идёт побайтно.
    Это я к тому что вдруг у вас что-то похожее.
    https://github.com/nzeemin/ukncbtl-u...ridge/LZSS.cpp

  2. Эти 3 пользователя(ей) поблагодарили nzeemin за это полезное сообщение:

    hobot (22.02.2021), kolk (23.02.2021), yu.zxpk (22.02.2021)

  3. #12
    Member
    Регистрация
    10.06.2016
    Адрес
    г. Киев, Украина
    Сообщений
    87
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Там, в отличие от "классического" LZSS, управляющие биты сгруппированы в байты, биты "ссылок" устроены как 4 бит длина + 12 бит смещение назад = одно слово, окно получается размером 4 КБ. В такой реализации почти не используются побитовые сдвиги, выборка идёт побайтно.
    Это я к тому что вдруг у вас что-то похожее.
    Да, именно такое, от Haruhiko Okumura. Но все константы надо проверять (вдруг не 4/12, а 5/11?). (Иначе бы я его на глаз не опознал! А у LZA весь сжатый поток зачем-то проинвертирован.) Выше я уже давал ссылки на него. Еще он применяется в Renesas .PAK. Там метод определяется равенством сжатого и несжатого размеров - если равны, то store, иначе LZSS.

    - - - Добавлено - - -

    У Вас как минимум 2 отличия: инверсное значение флагов и смещение от текущей позиции вместо смещения от начала буфера.
    В LZA больше похоже на версию Haruhiko Okumura.

  4. #13
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,999
    Спасибо Благодарностей отдано 
    1,066
    Спасибо Благодарностей получено 
    1,236
    Поблагодарили
    479 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от kolk Посмотреть сообщение
    У Вас как минимум 2 отличия: инверсное значение флагов и смещение от текущей позиции вместо смещения от начала буфера.
    В LZA больше похоже на версию Haruhiko Okumura.
    Так они ВСЕ происходят от кода Haruhiko Okumura, просто потому что он первым выложил свой код в public domain, в 1989 году.
    Вот две похожих реализации, которые я использовал:
    https://gist.github.com/davidreynolds/3025423
    https://github.com/dwelch67/msp430si...ss/lzss_orig.c

  5. Этот пользователь поблагодарил nzeemin за это полезное сообщение:

    hobot (24.02.2021)

  6. #14
    Member
    Регистрация
    10.06.2016
    Адрес
    г. Киев, Украина
    Сообщений
    87
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Так они ВСЕ происходят от кода Haruhiko Okumura, просто потому что он первым выложил свой код в public domain, в 1989 году.
    Я уже убедился, что там Haruhiko Okumura с точностью до инверсии (таки с целью "сокрытия"). Шифрования нет, некоторый хэш пароля в слове по смещению 8 от начала архива. Хвостовые нули несжатого файла честно сжимают. Осталось разобрать хэши, even padding byte (0 или 0xFF?) и особенности центрального каталога (формат указателя на файл в архиве), когда присутствует центральный каталог. На код Haruhiko Okumura есть ссылка выше в теме.

  7. Этот пользователь поблагодарил kolk за это полезное сообщение:

    nzeemin (24.02.2021)

  8. #15
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    545
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    136
    Поблагодарили
    105 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Дизассемблированные исходники архиватора LZ(LZA) и разархиватора UZ(UZA)

    Чё-то все увлеклись этими архиваторами и я заодно тоже. Подумал написать кросс упаковщик-распаковщик, чтоб смотреть, что там, в иногда попадающихся архивах. Но пока дизассемблировал - устал и энтузиазм иссяк. Поэтому, пусть кто-нибудь другой напишет.
    Во вложении LZA-UNLZA.rar в архиве:
    . LZ.asm, UZ.asm - исходники для кросс макро-11, потому что используются длинные метки. Сами исходники в КОИ-8 и русские буквы там тоже в КОИ-8. Чтобы компилировать в родной среде RT-11, нужно творчески переделать многие метки в уникальные 6-ти символьные. Чтобы получить русские буквы из КОИ-8 в КОИ-7, нужно применять какие-то неизвестные мне макросы или др. средства.
    Из исходников можно получить как оригинальные LZ/UZ, так и не оригинальные LZA/UZA, где применены только правки от EmeSoft, и то не все.
    LZ получается почти бинарно идентичен, разница - два байта текста, где исправлены две опечатки.
    UZ получается с небольшими отличиями, в двух макросах, порядок передачи аргументов EMTу отличается (потому что только такую макробиблиотеку я нашёл).
    Оригинальные LZA/UZA не получатся, т.к. EmeSoft там увлечённо шифровал код методом ксорения.
    . lzss.c - исходник Haruhiko Okumura, который брался за основу архиватора/разархиватора. Просто так, не стал его из директории выкидывать, когда архив паковал.
    . Macro11.exe - кроссассемблер макро-11 от Rhialto, с небольшими исправлениями (1.компиляция под RT-11 работает, а то он RSX увлёкся и поломал там RT-11, 2.имена макросов принудительно обрезаются до 6 символов при использовании длинных лексем, чтобы из SYSMAC.SML макросы доставались даже если писать их полное имя. Это не очень полезная фича, просто она осталась в этой сборке, 3. isdigit при парсинге чисел в 16-ричной системе счислении работает.)
    . pclink11.exe - кросслинковщик от nzeemin
    . батники, чтобы компилировать, две макробиблиотеки, первые попавшиеся, которые я нашёл, для сборки в SAV.
    . Формат архива LZA.txt - описание формата архива, чтобы писать кросс упаковщик/распаковщик.
    Последний раз редактировалось gid; 20.03.2021 в 19:13.

  9. Эти 2 пользователя(ей) поблагодарили gid за это полезное сообщение:

    kolk (20.03.2021), nzeemin (20.03.2021)

  10. #16
    Member
    Регистрация
    10.06.2016
    Адрес
    г. Киев, Украина
    Сообщений
    87
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    КС - простая пословная сумма сжатого потока без переноса.
    В оригинальной версии (не EmeSoft) сжатый поток не инвертирован.

    Байт выравнивания на границу слова в двух версиях остался под вопросом. (По идее, его тоже инвертируют?)
    Последний раз редактировалось kolk; 20.03.2021 в 19:41.

  11. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  12. #17
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,999
    Спасибо Благодарностей отдано 
    1,066
    Спасибо Благодарностей получено 
    1,236
    Поблагодарили
    479 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    kolk, так что в итоге с кросс-архиватором?
    Или хотя бы давайте полное описание формата сделаем.
    Так-то конечно хорошо бы иметь хотя бы разархиватор для всех форматов архивов, использовавшихся на советских PDP-like машинах.

  13. #18
    Member
    Регистрация
    10.06.2016
    Адрес
    г. Киев, Украина
    Сообщений
    87
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Копирую сюда Формат архива LZA.txt от @gid

    Код:
    проги:
    LZ.SAV - упаковщик LZS
    UZ.SAV - распаковщик LZS
    прога с правками от EmeSoft:
    LZA.SAV - упаковщик LZA
    UZA.SAV - распаковщик LZA
    Правки:
    1. для упаковщика уменьшен буфер в 2 раза, соответственно памяти требуется сильно меньше.
    2. сжатые данные инвертированы, но КС считается по неинвертированным данным
    3. изменён текст, сделаны незначительные оптимизации.
    
    формат Архива:
    
    struct ArchHeader {             // заголовок архива
        word    archID = EmeSoft ? ^R<LZA> : ^R<LZS>; // сигнатура
        word    version = "21";     // версия архива
        word    N;                  // размер кольцевого буфера в байтах 010000 или 04000 для EmeSoft
        word    date;               // дата создания архива
        word    password;           // зашифрованный пароль для распаковки, 0, если нету.
                /* пароль шифруется так:
                   password = comb(swab(^R<nnn> xor archID)),
                   где nnn - открытый пароль, заданный в ключе /P */
        word    0;                  // зарезервировано
        word    archCatSize;        // размер каталога архива в байтах, 0 - если нет каталога
        word    archCatBlk;         // номер блока начала каталога, относительно начала файла архива,
                                    // 0 - если нет каталога
                                    // каталог архива выравнивается по границе блока.
    };
    
    struct FileHeader {             // заголовок файла
        dword   .rad50 "FILNAM";    // имя файла в RADIX-50
        word    .rad50 "EXT"        // расширение файла в RADIX-50
        word    unpSizeBlk;         // размер файла в блоках до архивации
        word    date;               // дата создания файла
        word    CS;                 // контрольная сумма упакованного массива
        dword   pckSize;            // размер упакованного массива в байтах
    }
    
    struct ArchCatRecord {  // запись о файле в каталоге архива
        word    blkNum;     // номер блока относительно начала файла архива, с которого начинается файл в архиве
        word    offset;     // смещение в блоке, с которого начинается массив упакованных данных файла
        FileHeader file;    // структура заголовка файла
    }
    
    // формат Архива
    Archive {
        ArchHeader header;      // заголовок архива
        {
            FileHeader fh;      // заголовок файла
            byte[fh.pckSize];   // упакованный массив
            .wordeven           // выравнивание по слову
        } по количеству файлов в архиве;
    
        .blockeven                  // выравнивание по блоку
        // каталог архива, опционально
        {
           ArchCatRecord    fileRecord; // запись о файле в каталоге архива
        } по количеству файлов в архиве;
    };

  14. Этот пользователь поблагодарил kolk за это полезное сообщение:

    nzeemin (11.04.2021)

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 5
    Последнее: 06.03.2023, 00:01
  2. Форк демо-архива вышел из беты
    от Hacker VBI в разделе Новости
    Ответов: 133
    Последнее: 20.10.2016, 10:26
  3. Третья часть игр из моего архива
    от Wizard в разделе Игры
    Ответов: 0
    Последнее: 19.05.2007, 16:41
  4. Вторая часть игр из моего архива
    от Wizard в разделе Игры
    Ответов: 0
    Последнее: 16.05.2007, 16:49
  5. Первая часть игр из моего архива
    от Wizard в разделе Игры
    Ответов: 3
    Последнее: 15.05.2007, 08:31

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •