User Tag List

Страница 3 из 9 ПерваяПервая 1234567 ... ПоследняяПоследняя
Показано с 21 по 30 из 85

Тема: Упаковщики

  1. #21

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Если распаковщик мой, то вариант для pdp11 был совсем неудачный, даже не стал его выкладывать на github.
    Не подскажешь как в LZSA2 это устроено? Read a nibble... then read a byte. После чтения токена (байта) нужно прочитать ниббл (4 бита), а потом байт. Получается, этот байт сдвинут на 4 бита? То есть расположение данных в памяти выглядит так (побитно, где | означает границы байтов в памяти)?
    Код:
    | tokenmmm | niblbyte | byte.... |
                     ^^^^   ^^^^
    Последний раз редактировалось Manwe; 06.08.2021 в 09:00.
    manwe.pdp-11.ru

  2. #22

    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    600
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    123 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение
    Распаковщик BKPACK существует в версии, которая пригодна к многократной распаковке архива и не портит сама себя?
    Насколько я помню, он вообще ничего в себе не изменяет, поэтому можно хранить в памяти кучу данных и распаковывать им по мере надобности. Благо алгоритм неожиданно удачный. Он близок по степени сжатия к ZIP/DEFLATE, и при этом вообще не использует побитовой упаковки!

  3. #23

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    близок по степени сжатия к ZIP/DEFLATE
    Спорное утверждение, например TITR1.PIC и TITR2.PIC zip/deflate сжал в полтора раза лучше, чем bkpack.

    пара слов про нибблы в lzsa2

    Цитата Сообщение от Manwe Посмотреть сообщение
    как в LZSA2 это устроено
    Про формат lzsa2 я вряд ли напишу лучше автора, но если ограничиться нибблами, то можно сказать, что есть как бы параллельный поток нибблов (это как поток битов во многих других упаковщиках), перемежающийся с потоком байтов. Если нужен ниббл, то мы проверяем текущее состояние "буфера нибблов", и
    1. если там пусто, читаем следующий байт, берем оттуда один ниббл, а второй - в буфер нибблов.
    2. если там не пусто, берем ниббл и помечаем, что "буффер нибблов" пуст.
    [свернуть]

  4. #24

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Про формат lzsa2 я вряд ли напишу лучше автора, но если ограничиться нибблами, то можно сказать, что есть как бы параллельный поток нибблов (это как поток битов во многих других упаковщиках), перемежающийся с потоком байтов. Если нужен ниббл, то мы проверяем текущее состояние "буфера нибблов", и
    1. если там пусто, читаем следующий байт, берем оттуда один ниббл, а второй - в буфер нибблов.
    2. если там не пусто, берем ниббл и помечаем, что "буффер нибблов" пуст.
    То есть нибблы всегда хранятся парами, чтобы занимать ровно байт?

    P.S. мне кажется, обсуждение распаковки - НЕ оффтопик в теме про упаковку, так что можно не прятать обсуждение в спойлер.
    manwe.pdp-11.ru

  5. #25

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    То есть нибблы всегда хранятся парами, чтобы занимать ровно байт?
    да

  6. #26

    Регистрация
    18.01.2021
    Адрес
    п. Новый Ургал
    Сообщений
    145
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    Насколько я помню, он вообще ничего в себе не изменяет, поэтому можно хранить в памяти кучу данных и распаковывать им по мере надобности. Благо алгоритм неожиданно удачный. Он близок по степени сжатия к ZIP/DEFLATE, и при этом вообще не использует побитовой упаковки!
    Распаковщик изначально выглядит так:
    Нажмите на изображение для увеличения. 

Название:	bkpack1.jpg 
Просмотров:	110 
Размер:	20.0 Кб 
ID:	75933

    Он пересылает часть кода в назначенную рабочую область, потом делает JMP на начало этого кода, и первым делом затирает свое начало, пересылая туда 572 байта из конца архива:

    Нажмите на изображение для увеличения. 

Название:	bkpack2.png 
Просмотров:	96 
Размер:	16.1 Кб 
ID:	75934

    Таким образом, повторный запуск уже не имеет смысла, потому что там нет изначального кода.
    Блог проекта "The Goonies для БК11М"
    БК-0011М, БК-0011М-01, SMK-512, AZ

  7. #27

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,867
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    311
    Поблагодарили
    235 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение

    Таким образом, повторный запуск уже не имеет смысла, потому что там нет изначального кода.
    можно было бы использовать 1 распаковщик на все файлы.
    Но нет так нет.
    С уважением,
    Jerri / Red Triangle.

  8. #28

    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    600
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    123 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение
    Распаковщик изначально выглядит так:
    Таким образом, повторный запуск уже не имеет смысла, потому что там нет изначального кода.
    Но сам же себя он не ломает? Что мешает эту пересылку отрезать? Она нужна только для того, чтобы можно было запускать программу со стандартного адреса 1000, и одновременно там в начале был бы распаковщик. если этого требования нет, то и так фокусничать не надо.

  9. #29

    Регистрация
    18.01.2021
    Адрес
    п. Новый Ургал
    Сообщений
    145
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    Но сам же себя он не ломает? Что мешает эту пересылку отрезать? Она нужна только для того, чтобы можно было запускать программу со стандартного адреса 1000, и одновременно там в начале был бы распаковщик. если этого требования нет, то и так фокусничать не надо.
    Он ломает себя не тем, что пересылает куда-то кусок своего кода, а тем, что пересылает кусок данных из конца архива в свое начало уже после этого. И архив начинает распаковывать уже после этого. Понятно, что его можно переделать. Но это необратимое таскание своих кусков совсем не вяжется с "он вообще ничего в себе не изменяет". Потому я и спросил, нет ли версии, изначально просто распаковывающей архив в нужный адрес без выкрутасов.
    Блог проекта "The Goonies для БК11М"
    БК-0011М, БК-0011М-01, SMK-512, AZ

  10. #30

    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    600
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    123 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение
    Он ломает себя не тем, что пересылает куда-то кусок своего кода, а тем, что пересылает кусок данных из конца архива в свое начало уже после этого. И архив начинает распаковывать уже после этого. Понятно, что его можно переделать. Но это необратимое таскание своих кусков совсем не вяжется с "он вообще ничего в себе не изменяет". Потому я и спросил, нет ли версии, изначально просто распаковывающей архив в нужный адрес без выкрутасов.
    Вопрос понятен. У нас, похоже, несколько разное понимание вопросов изменения. Пусть будет так. Так вот, версию распаковщика без этих манипуляций я совершенно точно видел в работе. И упаковать можно было в непрерывный поток, а не так вот с перекидкой.
    Попробую вспомнить.

Страница 3 из 9 ПерваяПервая 1234567 ... ПоследняяПоследняя

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

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

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

Ваши права

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