Born Dead #08
19 апреля 1999

Coding - Компрессия картинок (screen to text).

<b>Coding</b> - Компрессия картинок (screen to text).
════════════════════════════════════════════════════════════════
 ╠╬╣║╞╪╡█████████████╡╪╞║╣╬╠ CODING ╠╬╣║╞╪╡█████████████╡╪╞║╣╬╠ 
════════════════════════════════════════════════════════════════

(c) UnBEL!EVER^Speed co.^XTM

Этот  материал  имеет слабое отношение к CODING'у как таковому и
больше  направлен  на  тех,  кому  дорог каждый сектор дискового
пространства.  Если  вы  действительно  готовы часами думать над
тем,  как  отвоевать  еще пару секторов воспользуйтесь следующим
полезным советом.

Итак,  представим  себе  ситуацию,  когда  пакуемый кодовый блок
содержит  внутри обычный экран длинной 6912 байтов. Самым легким
вариантом  будет  просто  упаковка  HRUST'ом  или HRUM'om. Можно
попробовать скомпресировать  экран  LASER  COMPACT'ом или другой
программой  ориентированной  на  экраны.  Это  даст определенную
выгоду, но зачастую распаковщик длинной в 100-200 байтов скушает
все  ваши  достижения.  Если  экранов больше, чем один, то можно
смело  использовать  единственный  распаковщик,  что опять же за
частую не решает проблемы.

Как  же все же сэкономить в таком случае сектор? Решение кроется
в  корне  проблемы;  надо  картинку  паковать с учетом структуры
экрана,  но  с другой стороны нужно иметь единый декомпрессор на
код  и  на  картинку. Берем картинку находящуюся внутри кодового
блока  и  перекодируем ее столбцами, примерно так как это делают
прогрессивные упаковщики.

Вот вам вариант программы :

              SCREEN TO FONT           FONT TO SCREEN
       ----------------------   ----------------------
        SCR_BUF EQU    #C000      ....... ...   .....    

          LD    DE,SCR_BUF          ..    ..........
          LD    L,#00               ..    .....
          LD    C,#20               ..    .....
  CNV_M3  LD    H,#40               ..    .....
          LD    B,#C0               ..    .....
  CNV_M1  LD    A,(HL)              LD    A,(DE)
          LD    (DE),A              LD    (HL),A
          INC   DE                  ...   ..
          INC   H                   ...   .
          LD    A,H                 ..    ...
          AND   #07                 ...   ...
          JR    NZ,CNV_M2           ..    .........
          LD    A,L                 ..    ...
          ADD   A,#20               ...   .....
          LD    L,A                 ..    ...
          JR    C,CNV_M2            ..    ........
          LD    A,H                 ..    ...
          SUB   #08                 ...   ...
          LD    H,A                 ..    ...
  CNV_M2  DJNZ  CNV_M1              ....  ......
          INC   L                   ...   .
          DEC   C                   ...   .
          JR    NZ,CNV_M3           ..    .........
                                    EX    DE,HL
          LD    HL,#5800            LD    DE,#5800
          LD    BC,#0300            ..    ........
          LDIR                      ....
          RET                       ...

Теперь  запаковываем  полученный  блок  все теми же HRUST/HRUM и
наслаждаемся  экономией. Правда проблемка в том, что надо как то
этот закодированный screen напечатать. Тут вроде как ldir'ом уже
не  обойтись...  Опять  же  прийдеться  внедрить обратную первой
программу,  или  же раскодировать screen прямо в памяти. В любом
случае,  этот  или  аналогичный ему декодер займет места гораздо
меньше, чем стандартный LC4.0/5.0 depacker.

Может  показаться, что это извращение и не стоит так напрягаться
ради  какого  то сектора (а иногда и двух!). Но бывают ситуации,
когда этот самый сектор просто необходим как воздух. На последок
замечу,  что  метод  этот  успешно  был опробован MAXSOFT'ом при
переделке  несколких  частей к FA, и MMCM'ом на финальной версии
Pro  Tracker'а  который  стал теперь занимать ровно 100 сектров.
Приведеные  в  этой  заметке  программы  не  в  коем  случае  не
являються  идеальными и при желании, в зависимости от конкретной
ситуации,  их  бесспорно можно прооптимизировать как по размерам
так и по времени выполнения.



Другие статьи номера:

Coding - Компрессия картинок (screen to text).

Game - 12 Тайных книг. Миссия: Советы бывалых ведунов.

Games - Heavy on the Magic: Вскрытие показало.

Games - Игры, которые ждет весь мир.

Вступление - Натовский самолет "Стелс".

Другие новости - О Complex Compo, Чёрный Ворон 2, возрождение газеты RIP.

Злоба дня - FreeDom! Цена сцены.

Мир Амиги - Амига глазами RRA (часть 4).

Новости - Новинки: PT v3.4 r(Final), First Associacion, MMA CD-ROM.

Обзор софта - Обзор журнала Demo Or Die #1.

Приложение - Doxycon'99 - Invitation intro.

Реклама - Реклама и объявления.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Реклама - Предлагаю дисковод МС 5305 - находу.
Обзор Warez'a - Extreme's Tracker v2.10, Universal Player v1.2, HYPERION v1.0, Z-Player v3.0 for GS, Quick Screen Viewer, BestView v2.9, Small Hrust Unpacker v2.0, Fm.COP v.3.1, All Disks Copier, Maxs Copier, HD-KIT, Real Commander v1.9, Direct Commander v3.04, E-mage WorkStation v1.0, System test v4.30, Lara Croft Mail Editor, S-Terminal, Storm Turbo Assembler, Sprite Editor, Text Print.
история - History!!!
Список BBS - Список станций BBS.
Рассказик - Ночь у шурина.

В этот день...   2 июля