                       Quick Packer v1.00
               (C)2026 Андрей Богданович/Spectre
                          www.zxby.org


    Quick   Packer   (дальше  QP)  упаковывает  файлы  в  ZX0  и
распаковывает ZX0, Hrust 1 и Hrust 2 на самом ZX Spectrum 128K —
с  ленты или с SD-карты под esxDOS. Упаковщик у него тот же, что
в  Quick  Commander  (команда  P): потоки — ZX0 Эйнара Сауказа в
стандартном  формате  (zx0  v2), на несколько процентов длиннее,
чем у его zx0 на PC.

    :: Что нужно

    Spectrum со 128K: Spectrum 128, +2, +2A или +3, Pentagon или
Scorpion. На 48K или на 128K в режиме 48K QP пишет «Quick Packer
needs  a  128K  Spectrum.»  и  возвращается  в  BASIC.  Иначе он
занимает  всю  память и в BASIC не возвращается: выйти из него —
сбросом.

    Для файлов на SD-карте — DivMMC с esxDOS (проверено с esxDOS
0.8.9).

    :: Запуск

    QP  поставляется  ленточным файлом QP_1_00.TAP: загрузчик на
BASIC  «QPacker»  и  код. С ленты он грузится через LOAD "" (или
Tape  Loader в меню 128K); под esxDOS скопируйте его на SD-карту
и выберите в браузере. Под esxDOS QP начинает со списка SD-карты
(T — на экран ленты и обратно), без него — с экрана ленты.

    :: Лента

    На  экране  ленты  —  загруженный  файл (имя, тип, адрес или
строка запуска, длина), ход упаковки и клавиши:

  - L: загрузить следующий файл с ленты, с любым именем:
    включите ленту (Space — стоп). Файлы от 1 до 40960 байт.
  - P: упаковать файл. «Read» и «Packed» показывают, сколько
    сделано; A — стоп. Файл становится потоком: Bytes его длины,
    к имени добавляется «.z» (от имени остаются первые 8
    символов), адрес у Bytes сохраняется, иначе 32768 (Program
    становится Bytes).
  - U: распаковать файл: поток ZX0 или блок Hrust 1 или Hrust 2,
    «.z» с конца имени убирается. Данные — до 40960 байт, иначе
    файл остаётся как был.
  - S: записать файл: включите запись и нажмите клавишу.

    QP  грузит  и  записывает  через ленточные подпрограммы ПЗУ,
поэтому .tapein и .tapeout у esxDOS (TAP-файл на SD-карте вместо
ленты),  лента  у Next и ловушки ленты в эмуляторах работают так
же, как настоящая лента.

    Если  упаковку  остановить  или  поток  выйдет длиннее 40960
байт,  файл  остаётся, пока поток до него не дошёл («Stopped.»);
иначе  он  пропадает,  и QP об этом пишет: «Stopped: the file is
gone, load it again.»

    :: SD-карта

    Текущая  папка  в  два  столбца: папки с «/», файлы с длиной
(64K  и  больше  —  «64K+»);  скрытые  и системные файлы и имена
длиннее  8.3 не показываются. Курсор ходит клавишами курсора или
6, 7, 8, 9, Enter открывает папку («../» — на уровень вверх).

  - P: упаковать файл под курсором в ИМЯ.ZX0 рядом с ним (файл
    .ZX0 повторно не упаковывается).
  - U: распаковать его в ИМЯ.BIN.
  - T: экран ленты.

    Файлы  и  результаты  —  до 65280 байт. Сам файл не меняется
никогда.  Если  в  папке  уже  есть файл с именем результата, QP
спрашивает,  записать ли поверх него (Y — да; N или Edit — нет):
«GAME.ZX0 is there: overwrite it?»

    QP  упаковывает  файл  на месте: поток пишется поверх файла,
который он читает. Поэтому файл около 64K упакуется, только если
упаковывается  его  начало: файл, в начале которого 20K и больше
того,  что  не  сжимается (упакованные данные, сжатая картинка),
всё  равно  почти  не стал бы короче, и QP от него отказывается:
«Can't pack it in place: not saved.»

    :: Скорость

    На 3,5 МГц QP упаковывает экран примерно за 3,5 секунды, 16K
кода  —  примерно  за  10  секунд,  40K текста — примерно за 1,5
минуты, 64K текста — примерно за 2,5 минуты. Распаковка занимает
секунды.

    :: Распаковка в своих программах

    Потоки  QP  — стандартный формат ZX0. Распаковывать их можно
распаковщиками  Эйнара  Сауказа: dzx0_standard.asm (68 байт) или
более быстрыми dzx0_turbo.asm и dzx0_mega.asm, они здесь:

              https://github.com/einar-saukas/ZX0

    :: Спасибо

    Hrust  1 и Hrust 2: Дмитрий Пьянков (Hrumer). Идея ленточной
версии:  Art  на Spectrum Computing, по образцу ленточной версии
Hrust  2. ZX0 и его распаковщик dzx0, которым пользуется U в QP:
Эйнар Сауказ, лицензия BSD 3-clause (по адресу выше).

          Андрей Богданович/Spectre, spectre@zxby.org
