Speccy #06
31 августа 1996

Программирование - эффект перелистывания страниц текста по синусу.

<b>Программирование</b> - эффект перелистывания страниц текста по синусу.
╒══════════════════════════════╕
│░░░░░░ ПРОГРАММИРОВАНИЕ ░░░░░░│
╘══════════════════════════════╛

 Кузнецов Владимир
───────────────────
   HaLLo! С Вами постоянный кор-
респондент рубрики "Программиро-
вание". За лето произошло немало
грандиозных событий (Развалилась
"Omega H.C.",успешно прошел слет
демомейкeров "Enlight'96" с  вы-
текающими оттуда последствиями,я
приобрел  себе  "Amiga  1200"  и
д.р.) и накопилась масса идей. С
одной из них я сейчас поделюсь с
Вами.
   Примерно  с  1994  года можно
встретить  в различных интрухах,
демонстрашках и т.п.эффект пере-
листывания страниц текста по си-
нусу.Я уверен, что кто-то из Вас
пытался   повторить  этот эффект
(без взлома оригинала),но ничего
не получилось, т.к. обычные спо-
собы  для  этого  не подходят. К
решению этой  проблемы  надо по-
дойти  нестандартно, что мы сей-
час и сделаем. Но для начала ус-
ловимся о распределении памяти:

 #FFFF┌──────────────────────┐
      │ 2-ая страница текста │
 #F000│                      │
 #EFFF├──────────────────────┤
      │ 1-ая страница текста │
      │                      │
 #E000└──────────────────────┘

Адреса можно взять и  другие, но
эти выбраны в целях экономии па-
мяти.
Принцип  эффекта очень прост:
1. Пропечатываем  1-ую  страницу
   (для  этого  необходимо будет
   составить  собственную проце-
   дуру печати символа);
2. Выводим ее на экран;
3. Делаем паузу;
4. Пропечатываем 2-ую страницу;
5. Выводим ее на экран;
6. Делаем паузу;
7. Повторяем все с начала.
Нас  будут  интересовать  только
пункты  вывода  буфера на экран.
Сделать  это  можно  несколькими
путями.   Например  LDIR'ом  или
стеком,  а  более  эффективным в
данном случае будет очень ориги-
нальный метод:
PUT_B:  LD (P_EXIT+1),SP
        LD SP,HL
        POP HL
        LD (#4800),HL
        POP HL
        LD (#4802),HL
        POP HL
        LD (#4804),HL
        .....
        POP HL
        LD (#57FE),HL
P_EXIT: LD SP,0
        RET
Гениально!  Мы  убили  сразу 2-х
зайцев:скопировали буфер (на ко-
пирование одного байта  тратится
всего 13 тактов!!!) и  наплевали
на нелинейность экрана! Но  воз-
никает другая проблема -для про-
цедуры   копирования   требуется
ровно в 2 раза больше памяти,чем
выводимый буфер. Отсюда  следует
вывод:  если Вы пишете настолько
"гениальную"  программу,  что не
можете  позволить  себе  лишнего
байта, то этот метод не для Вас.
Нет необходимости  набивать "ко-
пировалку" вручную. Можно  заме-
тить, что "копировалка"  состоит
из повторяющихся  команд,поэтому
я советую  писать для таких  дел
инсталятор  ( процедуру, которая
сама создаст то, что Вам нужно).
Теперь  нужно  только   на  вход
"копировалки" в регистровой паре
HL подать адрес начала спрайта,а
все остальное она сделает сама.
   Для   смены   экранов   нужно
расчитать таблицу значений коси-
нуса по формуле:
X=INT(64+63.5*COS(I*PI/64)), где
X - результат
I - параметр (FOR I=0 TO 127)
Первой   странице  соответствуют
значения для I=[0;63],  а второй
странице - I=[64;127].
   Я упрощу себе задачу, исполь-
зуя   готовый  спрайт  (отпадают
процедуры    печати    символов,
контроля за положением указателя
в буфере  и паузы  между страни-
цами).  В  результате  получился
просмотрщик  картинок 256 линий.

   Чтобы  не  быть голословным я
подготовил  программку,  которая
демонстрирует  2 картинки разме-
рами 256x256 точек. Переключение
картинок  происходит  по нажатию
клавиши ENTER, а выход из демон-
страции  по SPACE.ЯЬ
 В  приложении  Вы найдете текст
программы для TASM ( не забудьте
загрузить русский шрифт TASM.FNT
чтобы читать мои коментарии )  и
файлы картинок ROSE.DAT и  CHER.
DAT(спрайты размером 8192 байта)

P.S. Картинки  (256x256) я  взял
     из графического редадактора
     Personal Paint 6.4  (Amiga)
     и там же их конвертировал в
     2 цвета.
                     i'LL B BaCK
             SPeCiaL 4 u, Mr.Key



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

От редакции - вступительное слово от редакции, авторы журнала.

Авторская программа - описание программы "Универсальный редактор спрайтов".

Программирование - эффект перелистывания страниц текста по синусу.

Тусовка - письма читалей: ICE'DI GRIZ о том как отмечала годовщину Челябиснкая группа Omega HC, Аншуков Владимир о снижении интереса к Спектруму в России.

Стиль - программирование: о внутренней структуре программы, то есть займемся основой алгоритмизации.

Игроскоп - краткий обзор игровых программ, появившихся в Челябинске: Freddy Kruger Live, Mortal Kombat, Zybex Remix, Gorodki, Atomic Robo Kid, Turbo Skate Fighter, Gremlins 2, Robot, Mercs, The Big Slease, UFO 2, Twin, Клятва Ночи, Trinia, Randex, Hunter, Talisman, Killed Until Dead, Supertetris, Miner, Tarzan, Final Fight, Go Bear Go, Rings Wars, 48 Утюгов, Prince of Persia и т.д.

Игроскоп - компьютерный супербоевик c великолепной графикой "Midnight Resistance"

Железо - сканирующие устройство для ZX Spectrum.

Мультролик - итоги конкурса на лучший мультролик.

Музобоз - обзор 8 музыкальных демонстраций: Fable Dream Demo, Black Galaxy, Opium Demo, Miles Mix, Chess Board, Mr.Key Gift, Rave Time Xtasy и т.д.

Музообоз - небольшое интервью Антона Шумакова/Ironman.

Музобоз - интервью Musicmaker'a Величутиной Татьяны.

Реклама - бесплатные обьявления.


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

Похожие статьи:
B.B.S. Новости - О работе B.B.S.'ок.
Обо всем - письма читателей: Peace User, Stranger, Best Hackers Group.
Реклама - реклама и объявления.

В этот день...   19 сентября