Odyssey Magazine #02
14 июля 1997

Ассемблер - Плавный скрол текста вверх в окне 15x24 знакоместа.

<b>Ассемблер</b> - Плавный скрол текста вверх в окне 15x24 знакоместа.

Урок ассемблера no.3
____________________

(С) Phantom Lord
Music by Shov


 Сегодня  я расскажу о вещи, которая порой
очень сильно мешает программистам в реали-
зации своих идей, о телевизионном луче.
 Идею написания о этой проблемке подбросил
мне  один мой друг, поскольку он сам с ней
столкнулся.  Я думаю, что эффект перегиба-
ния  или  исчезновения  изображения знаком
всем, поэтому если вы не знаете, как с ним
бороться,  то лучше почитайте этот текст -
пригодится.

 Для начала расскажу, как строится изобра-
жение на экране. Экран спектрума разбит на
320 (В стандарте, на Скорпионах старых мо-
делей  312) строк, длина которых на разных
моделях  компьютеров  разная, но стараются
придерживаться  216/224 тактов процессора.
Луч движется слева направо и достигая пра-
вого предела переходит на следующую нижнюю
строчку.  Весь путь хода луча по всему эк-
рану назван "frame'ом". Одна секунда равна
50  frames, т.е. луч за 1 секунду проделы-
вает свой (нелегкий) путь 50 раз.
 Для управления лучом (если так можно ска-
зать) существует всего одна команда - HALT
-  эта команда дает лучу достроить изобра-
жение  и перейти к построению "нового" эк-
рана,  т.е.  дает лучу команду начать свой
ход заново.

 Теперь, когда возникают проблемы ?
 Аксиома:  Если напечатать на экране в том
месте, где луч уже прошел, то в этот frame
вы изображение не увидите !
 Теперь  вам  наверное понятно , почему во
многих программах курсор вверху становится
невидимым  .  Для тех , кто не понял , об-
ъясню . Рассмотрим схему работы курсора:

     1. Восстановить изображение, которое
        было под курсором;
     2. Запомнить изображение под курсором
        с новыми координатами;
     3. Напечатать сам курсор.


 Так  вот,  пока  выполняются  первые  два
пункта,  луч  уже  ниже координат строки .
Тут и применяем нашу аксиому, т.е. курсора
вы не увидите.

 Раз  суть проблемы понятна, то нужно раз-
рабатывать методы борьбы с ней. Существуют
три практических метода:

     1. Синхронизация изображения, путем
        хитрых алгоритмов.
     2. Использывание двух экранов, для
        создания мультиэффекта.
     3. Использывание порта атрибутов #FF


  Сразу расскажу о третьем методе. Надеюсь
никто  его  не  будет использовать в своих
программах,  поскольку  по  моим подсчетам
90% спектрумистов не имеют порт #FF. Преи-
мущество порта #FF в том, что вам не нужно
знать особенности формирования INT'а комп-
ьютера.  Вы  можете  всегда через порт #FF
узнать  где  находится  луч, в зоне BORDER
или  PAPER. А это и есть те знания, ко то-
рые  необходимы программисту для синхрони-
зации своих шедевров.
 Теперь о первом способе. Он заключается в
том, что вы визуально будете синхронизиро-
вать  свою  программу  с  лучом так, чтобы
каждый  печатающийся  объект  выводился до
того момента, как до него дойдет луч. Что-
бы определить где находится луч необходимо
поменять  цвет бордюра, т.е.допустим у нас
имеется процедура печати спрайта и нам на-
до  определить  где  будет луч после того,
как спрайт напечатается.

A_1       EI
          HALT
          LD A,7
          OUT (#FE),A
          CALL PRINTSPR
          LD A,1
          OUT (#FE),A
          JR A_1


 * Не забудьте ставить HALT.


 Граница белого и синего бардюра как раз и
будет  показывать  на местонахождение луча
на экране.

 Третий  способ  самый  легкий - ничего не
надо  синхронизовать,  но  он действует на
машинах со 128К. В компьютерах этой конфи-
гурации  вместо  одного  экрана  с  адреса
16384  (#4000)  существует  второй экран -
RAM 7 с 49152 (#C000). В чем же суть этого
метода? Разобьем frames на четные и нечет-
ные. В четные будем перерабатывать изобра-
жение  на 1 экране, а показывать изображе-
ния  на 2, а в нечетные на будем перераба-
тывать  на 2, а показывать 1. (Следует еще
сказать,  что 1 экран расположен в RAM 5 с
адреса  49152, но это все тот же экран что
и с 16384.)

 Чтобы  понять,  как можно показывать один
экран,  а  работать  с другим нужно просто
знать работу порта #7FFD.
 4 бит порта как раз и отвечает за то, ка-
кой экран выводить.

   Например : BC=#7FFD


              LD A,#10
              ....,#11
              ....,#12
              ....,#13
              ....,#14
              ....,#15
              ....,#16
              ....,#17
              OUT (C),A


   Приведет к включению 0,1,..,7 страниц с
 выводом 1 экрана.

   Если же зажечь 4 бит:

              LD A,#18
              .....
              LD A,#1F
              OUT (C),A


   То,включатся 0,1,...,7 страницы с выво-
дом 2 экрана.

    Теперь  вам наверное все понятно, но я
все же приведу пример программы для работы
с двумя экранами:

   AGAIN EI          ;
         HALT        ;
         LD A,#17    ;Вкл.7 банк - 1 зкран
         CALL STRAN  ;
         CALL ACTION ;выполняем действие
         LD A,#13    ;
         CALL STRAN  ;вкл.3 банк - 1 экран
         CALL #C006  ;музыка
         EI          ;
         HALT        ;
         LD A,#1D    ;вкл.5 банк - 2 экран
         CALL STRAN  ;
         CALL ACTION ; ....
         LD A,#1B    ;
         CALL STRAN  ;вкл.3 банк - 2 экран
         CALL #C006  ;
         JR AGAIN    ;


 Вот  так  -  вот все просто. Если, что не
понятно, то ждем писем.

__________________________________________



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

Вступление - Что будет в третьем номере ?

Вступление - об оболочке

Ассемблер - Возможно ли перекинуть экран (6144 байта) за один тик.

Ассемблер - Плавный скрол текста вверх в окне 15x24 знакоместа.

Дискуссия - AMIGA VS PC мнение читателей (VVG).

Презентация - VIRTUAL VISION GROUP из Воронежа .

Отдохнем - Рок энциклопедия: MEGADEATH...

IS-DOS - Проблемы и решения: макросы.

IS-DOS - Практическое применение макросов.

Почта - Скроллинг по строке вверх и вниз.

Почта - Печать строки 32-х символьным шрифтом.

Почта - Процедура пропорциональной печати.

Отдохнем - Рассказ "Чебурашка".

Система - Описание формата PСX.

Система - Описание программ: Y-COMMANDER & MS COMPILER v1.08.

Обзор - Системных программ: XAS 7.1

Обзор - Системных программ: PRO TRACKER 2,1, PRO TRACKER 3,0d

Обзор - Системных программ: ZASM

Разборка - Обзор игр на тему "футболный менеджмент" : Обзор на тему "футболный менеджмент" : THE DOUBLE , MSMANAGER, MANCHESTER UNITED, KENNY, SOCCER RIVALS , 1-ST DIVISION MANA- GER, SUPER LEAGUE, SOCCER BOSS, PROFFESIONAL SOCCER FOOTBALL, MANAGER 2, ADVANCED SOCCER SIMULATOR.

Интервью - Интервью с FIKUS/Flash Inc.

Отдохнем - Однажды на лекции.

История - Хакеры - статья "ОНО" - об истории появления хакерства. ч.2

Система - Перспективы группы Assept Corp: APS v2.0.

Система - Multicolor Studio Compiler

Разборка - Описание игр: SOCCER RIVALS.

Реклама - Реклама и объявления.

Новости - Колесо обозрения.

Почта - о письмах

Почта - Конкурс на лучшую головолмку (первые 2 головоломки).

Обзор - Новые игры: TIME COP, UFO III, MORTAL COMBAT, MINELAYER , SEX REVERSY, THE MAGIC OF LOGIC, FEUDAL WARS, КУБОК АВИЛЛИАДЫ , CHOPPER DUEL, BACK TO SCHOLL, LCP, 750 CC GRANDPRX, INTERNA- TIONAL KIKBOXING, TAG TEAM WRESTLING, CAPTAIN PLANET,DOC THE DESTRUE DUX, OLE,TORO!.

Презентация - История группы AURYN.

Подарок - О приложении к журналу.

Деморынок - Хит парад музыкальных дем.

Система - Описание программ: КРАТКОЕ ОПИСАНИЕ КОМАНД Y-COMMANDER.

авторы - авторы журнала


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

Похожие статьи:
Презент - о том что же находиться в приложении к нашей газете.
Заключение - авторы и т.д.
Тусовка - ZX-NET-У - ZX ДА!
Иной мир - Radeon X700: недорогая основа для геймерских карт.
Ха-ха - Юмор.

В этот день...   19 апреля