ZX Review #7-8-9-10
08 ноября 1997

Форум - Эффекты на бордюре и Multicolor.

(c) Плясунов Д., г.Казань

   В 3-м номере за 96 год  (раз-
дел "Этюды") HACKER JOHN спраши-
вал об  эффектах  на  бордюре  в
INSULT MD. Я хотел бы поделиться
этим с читателями РЕВЮ.
   А начну с основ: давно уже не
секрет, что в каждом  компьютере
есть сигнал  КАДРОВОГО СИНХРОИМ-
ПУЛЬСА. По его приходу ULA начи-
нает развертывать изображение на
мониторе, причем  скорость  раз-
вертки равна  8  пикселам  на  4
такта процессора (или  2  пиксе-
лам на такт). Такая работа  пов-
торяется 50 раз в  секунду.  Од-
новременно с приходом  КСИ  при-
ходит сигнал INT  (точнее  будет
сказать, что причиной  появления
сигнала INT  и  является  сигнал
КСИ. Ну а подробно об  этом  бу-
дет сказано ниже). И хотелось бы
немного  поправить  VOLGAsoft'а:
изображение на  экране  начинает
строиться не по сигналу  INT,  а
по сигналу КСИ! Почему я это вы-
делил, я сейчас подробно расска-
жу, т.к. считаю это  очень  важ-
ным. Во всех компьютерах  сигнал
INT строится по  сигналу  КСИ, а
схемы  формирования  могут  быть
различными: где сигнал  строится
по переднему фронту КСИ, где  по
заднему, где подсчет строк  идет
в начале, а где в конце  (никог-
да не поймешь "создателей")...

   Прим. ред.: Все вполне  объяснимо:  для
упрощения схемы на пентагонах  сигнал  INT
формируется с  приходом  (передний  фронт)
КСИ, что оказалось очень удобным при прог-
раммировании. Не нужно просчитывать задер-
жки. А в стандартной машине INT формирует-
ся по заднему фронту КСИ. Последнее  реше-
ние более трудно для кодера, но зато  есть
совместимость с  зарубежными  программами,
использующими мультиколор. Существуют  еще
несколько способов формирования  INT'а, но
рассматривать их в данной статье нет смыс-
ла.

    Ну  и, соответственно, время
между приходом КСИ  и  образова-
нием  INT  может быть различным!
А поэтому MULTICOLOR, написанный
на одном типе компьютера, не бу-
дет работать  на  другом.  Из-за
этого и мерцают спрайты на  мед-
ленных компьютерах (типа  PROFI,
ATM), например в BOOT'е у  VAV'а
пропадает MC  на  PROFI.  Сейчас
уже стали появлятся демошки, где
перед запуском вам сначала пред-
ложат совместить линии  на  BOR-
DER'е  с  экранными  (ECHOLOGY+,
KSAGIFT).

   Прим. ред.: Последующая информация  от-
части повторяет  уже  опубликованные  нами
материалы по  MULTICOLOR'у, но  мы  решили
дать ее полностью, так как  она  дается  в
более простой (приближенной  к  конкретной
задаче) форме.

   А теперь  непосредственно  об
экране: как уже не раз  писалось
на страницах РЕВЮ, экран состоит
из линий  по  224  такта  каждая
(про 217 я не знал).  См. рис.1.
Всего таких  линий  должно  быть
312 (у PENTAGON'а 320, но это не
опасно).  Умножив,  получим, что
длина прерывания равна 69888  (у
PENTAGON'а - 71680). Но не толь-
ко в этом отличие компьютеров. К
примеру, у RST7 PENTAGON, но  не
у  всех  будет  правильно   идти
скрытая часть INSULT'а, а вызва-
но это следующим фактом: на  его
компьютере INT образуется по пе-
реднему фронту КСИ, а на  других
типах  PENTAGON'а - по  заднему,
вот и не совпадает BORDER.

  ┌──────────────────────────┐
  │                          │
  │          Border          │
  │   ┌──────────────────┐   │
  │   │                  │   │
  │   │                  │   │
  │   │                  │   │
  │   │      Screen      │   │
  │   │                  │   │
  │   │                  │   │
  │   │                  │   │
  │   │                  │   │
  │   └──────────────────┘   │
  │                          │
  │                          │
  └──────────────────────────┘
  │         224 такта        │

             Рис.1.

   С теорией вроде бы  все.  Те-
перь буковки: было отмечено, что
скорость развертки равна 2  пик-
селам на 1 такт. Отсюда следует,
что если мы  будем  менять  цвет
бордюра очень  быстро, то  можно
добиться  интересных   эффектов.
Рассмотрим  команду  OUT  (C),A:
эта самая  быстрая  команда  от-
правки в порт, и занимает она 12
тактов  (есть  еще  быстрее: OUT
(#FE),A  -  11  тактов, но  пока
сменишь   аккумулятор,   сколько
времени пройдет...), поэтому ми-
нимально  возможная  "точка"  на
бордюре составляет 2*12=24  пик-
села, или 3 знакоместа.  Вот  из
таких точек и будет наша  буков-
ка. А теперь  пример  программы,
выводящей букву A на бордюр:

                   **
                  *  *
   Шаблон буквы:  *  *
                  ****
                  *  *
                  *  *140.

       ORG     #8000
       LD      HL,#FE00    ;заполнение области размером 257 байт
       LD      DE,#FE01    ;байтом #FF.
       LD      BC,#100
       LD      (HL),#FF
       LDIR
       LD      HL,#FFFF    ;адрес обработки прерывания
       LD      (HL),#C9    ;здесь стоит только команда RET

       DI                  ;инициализация IM 2
       LD      A,#FE
       LD      I,A
       IM      2
       EI

LOOP   HALT                ;ждем прихода INT
       EI
       LD      BC,#200     ;это величина задержки
WAIT   DEC     BC          ;один проход цикла занимает 28
       LD      A,B         ;тактов. Это дает некоторое
       OR      C           ;преимущество т.к. увеличив значение
       NOP                 ;BC на 8, задержка увеличится на 224
       JP      NZ,WAIT     ;такта, т.е. на 1 пиксел вниз.

       LD      BC,#00FE    ;C-порт бордюра, B-цвет всего бордюра
       LD      DE,#0206    ;буква будет желтой на красном фоне.

       OUT     (C),D       ;верхняя полоса буквы
       OUT     (C),E       ;всего 12*4=48 тактов
       OUT     (C),E
       OUT     (C),D
       OUT     (C),B       ;дальше черный цвет, и еще 12 тактов
       LD      A,10        ;задержка до следующей линии 7 тактов
WAIT_1 DEC     A           ;(4+10)*10=140 тактов
       JP      NZ,WAIT_1   ;Итого: 48+12+7+140=207 тактов
       RET     NZ          ;Команды-пустышки, дополняющие до 224
       INC     HL          ;5+6+6=17 тактов
       INC     HL          ;17+207=224 такта. Линия закончена!
       OUT     (C),E       ;дальше идет вторая линия
       OUT     (C),D       ;далее по аналогии, столько раз,
       OUT     (C),D       ;какой высоты у вас буква.
       OUT     (C),E
       OUT     (C),B

...........................
                           ;здесь могут быть другие действия
...........................

       LD      A,#7F       ;опрос клавиши пробел
       IN      A,(#FE)
       RRA
       JP      C,LOOP

       DI                  ;восстановление режима прерываний.
       LD      A,#3F
       LD      I,A
       IM      1
       EI
       RET
2
   Процедура рисования  точки  в
78 тактов.

   Для  работы  этой   процедуры
нужна табличка в 1  Кбайт.  Идею
мне подкинул  мой  друг, выцепив
ее из какой-то игрушки.
140.
     Входные данные: B - координата Y, C - координата X.

PLOT   LD      H,#FA       ;с адреса #FA00 находится таблица
       LD      L,B
       LD      B,(HL)      ;старший байт уже сформирован
       INC     H
       LD      A,(HL)
       INC     H
       LD      L,C
       OR      (HL)
       LD      C,A
       INC     H
       LD      A,(BC)      ;объединяем экранный байт с
       OR      (HL)        ;получившимся
       LD      (BC),A      ;и обратно его в экран
       RET
2
   А теперь программа, формирую-
щая таблицу в памяти:
140.
CREAT  LD      HL,#FA00    ;адрес начала таблицы
                           ;должен быть "круглым" числом
       LD      C,#40
       CALL    CREAT_1
       LD      C,#48
       CALL    CREAT_1
       LD      C,#50
       CALL    CREAT_1

140.       LD      L,B
       INC     H
       XOR     A
       LD      C,#20
LOOP_1 LD      B,#08
LOOP_2 LD      (HL),A
       INC     HL
       DJNZ    LOOP_2
       ADD     A,#20
       DEC     C
       JR      NZ,LOOP_1
LOOP_3 LD      B,8
LOOP_4 LD      (HL),A
       INC     HL
       DJNZ    LOOP_4
       LD      A,#80
LOOP_5 LD      (HL),A
       INC     HL
       RRCA
       DJNZ    LOOP_5
       RET

CREAT_1 LD      B,#40
       LD      A,C
LOOP_6 LD      (HL),A
       INC     L
       INC     A
       AND     #07
       OR      C
       DJNZ    LOOP_6
       RET
2
   Еще  хотелось  бы  пару  слов
сказать про команду HALT. Выпол-
нение  зтой  команды  аналогично
выполнению серии команд  NOP  до
прихода прерывания. Когда прихо-
дит прерывание, процессор снача-
ла ДОВЫПОЛНЯЕТ команду, на кото-
рой он прервался, а  только  по-
том переходит на прерывание. Ко-
манда NOP  четырехтактовая, поэ-
тому при выполнении команды HALT
может  возникнуть  4   ситуации:
когда INT пришел после  выполне-
ния  1 такта  NOP, двух  тактов,
трех тактов и  полного  выполне-
ния этой команды. Поэтому  длина
всей нашей процедуры должна быть
кратна четырем тактам.  Если  же
этого  не  будет, то  INT  будет
приходить с разной задержкой  от
0  до  3  тактов, что  отразится
дрожанием буквы на бордюре.
   И еще один момент. Всегда пи-
шите  синхронизаторы  для  ваших
эффектов на бордюре, для мульти-
колора и для  эффектов  с  двумя
экранами (шторка и т.п.).

   По просьбе автора мы публику-
ем его адрес:

420073 г.Казань, ул.Гвардейская,
д.32, комн.323, Плясунову  Дмит-
рию.

INTERNET E-Mail: pavel@open.ksu.
ras.ru

           *   *   *




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

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

Программы, которые мы выбираем - Возможные последствия использования недокументированных команд.

Программы, которые мы выбираем - О замеченных шероховатостях в работе некоторых программ и пожелания к следующим версиям.

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

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


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

Похожие статьи:
Железо - Flash-память.
ZX-OСЬ ? - Вoт ужe дoлгoe врeмя вoпрoс o пoбeдe Дырявoгo Дoсa нa Спeктрумe плaвнo пeрeплывaл из oднoгo издaния в другoe.
B.B.S. Новости - О работе B.B.S.'ок.

В этот день...   18 июля