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