ZX Pilot #38
31 мая 2000

Coding - пишем простую бегущую строку.

                C O D I N G

──────────────────────────────────────────

(C) Z-ZERO


                   Развеять дабы неученья,
               Разбить невежество и тьму -
                 Берем картину мироздания,
             И тупо смотрим, что к чему...

                         Братья Стругацкие
                   "Понедельник начинается
                               в субботу."

                   "...это просто МАРАЗМ!"
                       Z-Zero SYSTEMS inc.

   O-е-ей! Чего это я, спрашивается, умны-
ми фразами стал раскидыватся? Не дай бог к
ночи такое! В прочем умные фразы тем и хо-
роши, что  они  умные... Стоп, стоп, стоп!
Представляю  как (ну, предположим, Sergius
Puzzler) воздевает  руки  к  небу, с моль-
бой... ну, что-нибудь в  стиле: "ОПЯТЬ!!!"
Или  еще  кто-нибудь, но  уже  со словами:
"Етись  ты - провались!!!" Я  их  чудестно
понимаю, но  когда  "свербит" - надо  дать
выход эмоциям, дабы  извилины не  перегре-
лись!
   OOPS! Я совсем забыл, о чем сий раздел!
ПРИСТУПИМ!
   Каждый раз, когда я открываю очередной,
взятый у приятелеля  не знаю  который раз,
номер Ревюхи - я содрогаюсь от ужаса! Зна-
ете, создается впечатление, что ее состав-
лением  занимались либо ребятня из началь-
ной  школы, или  полные маразматики. "Ну и
ладно," - скажет кто-нибудь из матерых co-
der'ов - "для  нас это уже прошедший век".
Ну  для  вас это может быть и прошедший, а
для  вашего  соседа (брата, друга - нужное
выделить) все только начинается, и он тоже
читает эту газету, а  по  сему  не кидайте
тухлые яйца...
   Да простит меня... (кто-нибудь простит)
но поведу я сегодняшний разговор о "строч-
ках - бегульках", а точнее их основах, пр-
инципах, размерах.
   Любые бегущие строчки делятся на четыре
вида:
   - Простейшие с выводом  по знакоместам,
либо роллирующиеся, но  каждая новая буква
появляется с  бухты барахты, или выводится
в невидимое знакоместо.
   - Стандартные  с варьирующимся размером
букв, и способом вывода (scr/attr).
   - Сложные. Могут иметь самые непредска-
зуемые эффекты, такие как sin'усоида, jump
ряд, оконтуривание  собой предметов на эк-
ране (см. мою  версию War In Middle Earth"
ее можно заказать у меня (mouse)), переме-
щение в потоке воды, высыпание  из мешка и
еще многое другое, всего не перебрать.
   - Сверх  сложные. В  этот разряд  можно
включить бегущие строчки, для создания ко-
торых используется бордюр, векторное масш-
табирование букв, создание строчки MuLtIc-
OlOr'ными эффектами.
   Все  выше перечисленное мы рассмотрим в
нашем экскурсе. Для кого-то это станет св-
оего рода учебником, а кто-то в доволь по-
ностальгирует о былом.

                 Простые.

   Это наиболее простой  вид бегущих стро-
чек, и  реализуется он следующим  образом:
программа  печати быводит строчку с адреса
#XXXX, на #YY  букв. Производится задержка
путем HALT'а или  вывода спрайта(ов). Уве-
личивается на  единицу начало текста. Про-
веряется  на его конец, и если да - то ус-
тановить #XXXX на  начало  и перебраться в
начало абзаца. Если  не  конец, то  просто
переход на начало абзаца.
   Или другой вариант, который отличаестся
от предыдущего тем, что выводится  не  вся
строчка а лишь очередная буква, после чего
делается 8 (16, 32, 64...) роллинга. После
этого все по стандартной схеме-проверка на
конец, цикл.
   Прочитав этот  абзац, кое кто из нович-
ков на ASSEMBLER'ном фронте воскликнет:
   - А разве  нельзя воткнуть знакоместо -
невидимку, и на том ограничиться?
   Отвечаю - НЕЛЬЗЯ! Прежде  всего потому,
что это  будет  плохим тоном, а во вторых,
представте, что  вы  выводите  этот бред в
рамочку в центр экрана... б-р-р-р!

               Стандартные.

   Добрались! Вот из-за  этого я и устроил
весь этот сыр-бор. Загляните в любой выпу-
ск ZX-РЕВЮ, и вы найдете  тьму стандартных
строчек, каждая из  которых  претендует на
лаконичность и простоту исполнения, но ве-
зде имеется куча переменных кои надо запо-
лнить, дабы весь этот балаган стал плясать
Теперь поглядите  на их  size'ы и покажите
мне хоть одну  более  или  мене короткую!?
Создается  впечатление, что у  нас  страна
изобретателей,  изобретателей  велосипедов
(шо езжаю - то и  думаю)! "Начало  строчки
указывается в пиксельных координататах..."
Или еще: "Начало  строчки вычисляется...",
а  далее  идет программа на BASIC'е, строк
эдак  на 200. Что  смеетесь, было  и такое
(где - не помню). Это значит для того, да-
бы узнать куда это я приткнул строчку, на-
до  набить здоровенную прогу и часика пол-
тора  прождать, что прога сообщить что-ни-
будь типа: "You  lain  disposet  of sistem
varaibles!" Короче говоря, 107 байт, и ст-
рочка готова...

        ORG #61A8
INIT    LD HL,TXT
        LD (TEKST),HL;Инициализатор текста
INIT2   LD A,#01
        LD (TEKBY),A;Обнуление бита
        RET
SYM     LD HL,(TEKST)
        LD A,(HL)
        CP #FF
        RET Z
        INC HL
        LD (TEKST),HL
        LD L,A
        LD H,#00
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        LD DE,FONT-#0100
        ADD HL,DE
        LD (TEKSY),HL;Адрес текущ. символа
        RET
LETER   LD HL,(TEKSY)
        LD DE,#4073;Левый край текста
        LD C,#08;Высота символа (MAX8)
PIP2    RLC (HL)
        PUSH DE
        EX DE,HL
        LD B,#08;Длина строки
PIP1    RL (HL)
        DEC HL
        DJNZ PIP1
        EX DE,HL
        POP DE
        INC HL
        INC D
        DEC C
        XOR A
        OR C
        JR NZ,PIP2
        RET
STEPS   LD A,(TEKBY)
        CP #09;Счетчик битов
        JR NC,NEXT;Выход по концу буквы
STEPSES CALL LETER
        LD A,(TEKBY)
        INC A
        LD (TEKBY),A
        LD B,#02
        HALT
        DJNZ $
        RET
NEXT    CALL SYM;Новая буква
        CALL Z,INIT;Текст кончился
        JR Z,NEXT
        CALL INIT2;Не конец, обнулен. бита
        JR STEPSES
TEKST   DEFW FONT-1;Указатель на #FF байт
TEKSY   DEFW #0000 ;Адрес текущей буквы в
                   ;фонте
TEKBY   DEFB #09;Счетчик битов, при первом
                ;старте 9.
                ;Текстовое сообщение
TXT     DEFM "По-маленьку маразматируем?"
        DEFB #FF
FONT    INCBIN "font";Font, не ПЗУ!

   Для  каждого очередного шага строчки (в
том числе и первого) делаем CALL STEPS.
   В строке "левый край текста", указывае-
тся адрес левого  края строки, с точностью
до знакоместа. В  строке  "длина  строки",
указывается  ее длина  в знакоместах. Все!
Самая простая строчка ползет по вашему эк-
рану, если скорость мала - убрать HALT.
   За сим разрешить расшаркаться.
   To be continued...

                             Alex Merkulow
                              Sewerodwinsk
                       Z-Zero SYSTEMS inc.
                                 03/III-00


                    - Нет, по моему это...
                  - Да маразм это, МАРАЗМ!
                       Z-Zero SYSTEMS inc.
                             with someone.



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

Новости - новости от Ковровских спектрумистов.

Тема - Беседа Justinas'a с SerzhSoft'ом из Шадринска и Firex'ом/Mayhem из Тулы произощедшая на Chaos Construction 2000.

Тема - Беседа с известным художником Fil/Antares произощедшая на Chaos Construction 2000.

Тема - Беседа с одним из организаторов FunTop'98 и редактором газеты Nicron - Wlodek Black'ом из Москвы.

Тема - размышления SIR-X'a о плачевном состоянии дел со спектрумовским софтом.

Imagination - Сумерки богов (по оригинальному замыслу Игоря Богданова).

Железо - описание новой звуковой карточки для спектрума DMA UltraSound Card и сравнение ее с DMA Sound Blaster.

Coding - пишем простую бегущую строку.

Coding - пишем необычную бегущую строку.

О разном - письмом Organism'а о нелегкой судьбе Спектрумистов из глубинке.

Hints - пароли для игр: Tower Pod, Clocks head Cracker.

Реклама - рекалама и обьявления о продаже спектрумовского вареза.

Credits - имена создателей газеты.


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

Похожие статьи:
События, Факты - О Chaos Construction'99.
Мысли - Lunohod1: ...о правилах русского языка на ТВ и радио.
Обмен опытом - Про ASCII/асции графику (Посвящается тем, кто не умеет рисовать, ни буквами ни точками...)

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