|
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.
Другие статьи номера:
Похожие статьи:
В этот день... 15 ноября