|
Nicron
#21
21 февраля 1997 |
|
Программирование - курс изучения ассемблера от Wlodek Black, продолжение. Методы сжатия данных.

╔──────────────────────────────────────────────────────────────╗ │ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒▒▒░▒▒▒▒▒▒░▒▒▒▒▒░│ │▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░▒▒░ ▒▒░ ▒▒│ │▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒▒▒▒░ ▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒░▒▒░▒▒▒▒▒░ ▒▒░ ▒▒│ │▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒░│ │▒▒░ ▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░z80│ ╚──────────────────────────────────────────────────────────────╝ [ Продолжение ] (C) WLODEK BLACK ...Снова всем здравствуйте, и возвращаемся к теме беседы. У вас есть дема DIGITAL TUNE 1? Есть? Тогда прошу: сосчитайте, сколь- ко секторов она занимает и из скольких файлов состоит. Сосчита- ли? Правильно, 7 файлов на общую сумму 173 сектора. Пройдет сов- сем немного времени (у меня это и получаса не отняло), и дема эта съежится в один-единственный файл размером 95 секторов. Как же сжимают данные? Самый простой алгоритм - отслеживание потоков одинаковых бай- тов и замена их на конструкцию вида "маркер-префикс"+"байт дан- ных"+"сколько раз повторить". Такой алгоритм был использован в древнем и бестолковом компрессоре "RAMPACK D.J.S." Дмитрия Сте- паненко, опубликованном в журнале "ZX+еще" в 1991 году (помните? Не помните? И никто уже не помнит...). Естественный и логичный, такой подход к проблеме сжатия данных далеко не всегда оптима- лен. Экранное изображение, например, может и не содержать длин- ных последовательностей одинаковых байтов в памяти, но зато ви- зуально может состоять из множества одинаковых фрагментов, текс- товых символов, например. Или может содержать крупные "пятна" с равномерной структурой или вообще пустые места. Если "прохо- дить" экранную область не последовательно по нарастанию адресов, а, например, сверху вниз или по знакоместам, можно будет порой обнаружить повторяющиеся участки, и заменить их на знакомые "маркер"+"что повторить"+"сколько повторить", причем "что повто- рить" может быть и не одним байтом, а, например,набором из 8-ми байт шаблона текстового символа. Один из наиболее популярных компрессоров экрана - "Кельн", как его обычно называют, - выпол- няет 4 прохода по экрану и сам выбирает наиболее оптимальный ал- горитм. Методы сжатия текстовой информации не менее разнообраз- ны. Например, наиболее употребимые символы можно закодировать не байтом, а меньшим количеством бит - допустим, 5-ю. 5-битовых комбинаций - 32, чего достаточно для символов алфавита. К тому же в латинских символах всегда сброшен 7-й бит, а в русских - он всегда установлен, и его тоже можно без особых ухищрений вы- бросить. При подобном методе сжатия маркер обозначает начало и длину сжатого участка, а дальше следуют, скажем, 5-битовые ком- бинации, плотно прижатые друг к другу с помощью операций сдвига; например, первый байт содержит 5 бит первого символа и 3 бита второго, второй байт - 2 бита второго символа, 5 бит третьего символа и 1 бит четвертого, и так далее. Один из наиболее эффек- тивных компрессоров текстовой информации - ASC LZPAC. Даже весь- ма хаотичные тексты, явно не содержащие последовательностей оди- наковых символов, он сжимает процентов на 20-30, что на первый (непосвященный) взгляд может показаться невероятным. Блоки ко- дов, не являющиеся текстами, он тоже неплохо упаковывает (во всяком случае, уж получше, нежели "RAMPACK DJS"). Существуют и еще более эффективные компрессоры, например MSPACK. Не буду на- стаивать, но, на мой взгляд, для экранного компрессора одной из важнейших характеристик является возможность запуска распаков- щика (программы, восстанавливающей исходные данные) с любого ад- реса, а для текстового упаковщика - эффективность сжатия данных и... безглючность (да, да, ибо опыт использования всевозможных "читалок" для газетных и других текстов вынуждает упоминать и о такой, с позволения сказать, "характеристике"). Опять-таки не буду настаивать, но на первых порах советую обзавестись упаков- щиками "А.С.Кельн" для экрана и "ASC LZPAC" для текстов и кодов. Если от сжатия текста компрессором мы только выигрываем, то от сжатия мыслей, наверно, ничего хорошего не получится... Я это к тому, что "NICRON", увы, не резиновый... Здесь мне придет- ся закругляться до следующего выпуска, но, чтобы тема не повис- ла, как завешенный сервер, прошу вас, друзья, те, кто интересу- ется и присылал в "NICRON" вопросы, выполните за предстоящую не- делю такое "домашнее задание": возьмите файлы "M 3", "M 4", "M 6" от демы "DIGITAL TUNE 1" и упакуйте их LZPAC-ом. На все вопросы компрессора, кроме "Code keep place", отвечайте предельно кратко - Enter, а на этот вопрос введите ад- рес "49152". Результаты, конечно, выгрузите на диск под любым именем. Далее нажмите Reset, чтобы очистить ОЗУ, и в "чистую" машину загрузите последовательно подряд файлы "M", "M 0" и "M 7". Данные из этих файлов присутствуют в памяти и испо- льзуются совместно, и нет никакой надобности грузить их порознь. Выгрузите их одним файлом с адреса 31232 и длиной 21196 байт (49152+3276-31232). Упакуйте и этот файл, указав "Code keep pla- ce"=31232. И, наконец, выдерите из демы картинку. Это делается так: загрузите Бейсиковый загрузчик "D.TUNE#1" через "merge", чтобы он не стартовал, и выполните такую строку: RANDOMIZE USR 23872:RANDOMIZE USR 15619: REM : SAVE "dt1$" CODE 16384,6912. И картинку эту запакуйте "Кельн"-ом (если вы еще не освоили его управление, то спешу порадовать: все сообщения в нем сделаны на русском языке; жмите цифры с номерами ответов, и все дела). На следующем "занятии" мы соберем все упакованные файлы в один ме- шок... Тьфу! Мы сделаем к ним монозагрузчик, вот! До встречи через неделю! P.S. Пользуясь случаем, хочу поблагодарить Германа и Глеба (CHIP) за помощь в приобретении программ под CP/M!
Другие статьи номера:
Вступление - содержание номера. |
BBS - список станций BBS ZXNet. |
Программирование - курс изучения ассемблера от Wlodek Black, продолжение. Методы сжатия данных. |
Рассказ - "Ни одна гадина не уйдет от возмездия". |
Военкомат - перечень заболеваний, которые являются основанием для освобождения от воинской службы. |
Поиск - поиск игр, программ. |
Юмор - анекдоты. |
Реклама - реклама и объявления. |
Обратная связь - контакты редакции. |
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3