ZX Format #05
11 декабря 1996

Программистам - обмен опытом: Об эффектах на бордюре и кое о чём ещё.

<b>Программистам</b> - обмен опытом: Об эффектах на бордюре и кое о чём ещё.
 Об эффектах на бордюре и кое о чём ещё.

music by DNK             
(C) MIK  20.10.1996
_________________________________________

Идея данной статьи родилась после прочте-
ния  некоторых  статей,  опубликованых  в
ZX-РЕВЮ, посвящённых BORDER эффектам.
 В  результате ознакомления с ними у меня
сложилось впечатление, что либо я подошёл
к данным вопросам как-то не так, либо ав-
торы  статей  (не  в обиду им сказано) не
знают достаточно по этой теме, либо скры-
вают  такую "секретную" информацию. Далее
я  постараюсь  как можно подробнее разоб-
рать  принцип  создания упомянутых эффек-
тов. Сразу прошу прощения за то, что могу
упустить кое какие мелочи так-как мне они
представляются  очевидными  вещами.  Итак
начнём :

                Глава I.
         Самые простые эффекты .

Самое простое , что удалось придумать так
сходу оказалось BASICом :
   10  BORDER  1:  BORDER  2 : BORDER 3 :
BORDER 4: BORDER 5 : GOTO 10

Результатом   данного   действа  окажутся
цветные  полосы мигающие по BORDERу . На-
баловавшись этой программой вы несомненно
придёте  к выводу о том , что было-бы не-
дурно  прибить их намертво к определённым
местам на BORDERе. Так как эксперементы с
молотком  и  гвоздями  вряд  ли  помогут,
придётся  рассмотреть программное решение
этой  простой (!) проблемы. Но для начала
немного ликбеза :
Компьютер  всё  время занимается тем, что
строит картинку на на вашем (да и на моём
тоже) экране. Происходит это так : С при-
ходом  кадрового синхроимпульса (попросту
сигнала, означающего что луч, формирующий
картинку,  находится в верхнем левом углу
экрана)  микросхема  ULA  (не ищите её на
плате,  если у вас не фирменный SPECTRUM)
начинает передавать информацию о том, что
именно надо построить. Эту информацию она
получает  из  двух источников - порта #FE
(254), а вернее от трёх его младших битов
и из экранной области. Дeлает это ULA всё
время  но на разных компьютерах по разно-
му,  в  большинстве  машин каждые 4 такта
процессора (точнее за время равное выпол-
нению  4  тактов  процессора) формируется
информация  в специальном регистре (к ре-
гистрам  процессора не имеет никакого от-
ношения)  о  8  точках  которые предстоит
построить,  независимо  от того относятся
они  к  BORDERу или к основному экрану. В
компьютере  PENTAGON  для  бордюра данное
правило  не  соблюдается,  при построении
его области информация о каждой точке за-
ного  запрашивается  из  порта #FE. Смысл
сказанного будет пояснён далее при разбо-
ре на примерах.
Информация  строится  по  строкам  сверху
вниз. На построение каждой строки тратит-
ся  определённое время, строго фиксирова-
ное  для  данного  компьютера (обычно 220
или  224  такта).  Всего строится 312 или
320  строк.  Нетрудно заметить, что коли-
чество  тактов  которыми располагает про-
цессор,  есть произведение числа строк на
число тактов в строке. Быстродействие то-
го  же пресловутого PENTAGONA - результат
320 строк * 224 такта в строке.
Вышеизложенное  повторяется  50 раз в се-
кунду, всё время пока конпьютер не выклю-
чат или он сам не сломается. Но существу-
ет  ещё один процесс повторяющийся 50 раз
в  секунду  и  аппаратно привязаный (?) к
первому, а именно - обработка прерываний.
 Совкупность изложенной информации позво-
ляет мне надеятся, что всё сказаное далее
будет вами понято.

               Глава II .
     Твёрдо стояшие полосы на бодюре

Сразу приведу пример, а потом его поясню.

      ORG 25000
      DI
      LD HL,#B200   ;Установим
      LD DE,#B201   ;2ой режим
      LD BC,256     ;прерываний
      LD (HL),#B3
      LD A,H
      LD I,A
      LDIR
      LD A,#C9     ;Обработчик состоит
      LD (#B3B3),A ;из одной команды RET
      IM 2
LOOP  EI
      HALT
      DI
      LD B,255    ;Экран начал
L1    LD A,1      ;строиться
      OUT (#FE),A ; синхронно с
      NOP         ;ним работает
      NOP         ;программа.
      NOP         ;Здесь первая
      DJNZ L1     ;линия.
      DEC B
L2    LD A,2
      OUT (#FE),A ;А здесь рисуем
      NOP         ; вторую.
      NOP
      NOP
      DJNZ L2
      DEC B
L3    LD A,3
      OUT (#FE),A ;Далее третья.
      NOP
      NOP
      NOP
      DJNZ L3
      DEC B
L4    LD A,4
      OUT (#FE),A ;Ещё одна.
      NOP
      NOP
      NOP
      DJNZ L4
      DEC B
L5    LD A,5
      OUT (#FE),A ;И ещё.
      NOP
      NOP
      NOP
      DJNZ L5
      DEC B
L6    LD A,6
      OUT (#FE),A
      NOP
      NOP
      NOP
      DJNZ L6
      DEC B
L7    LD A,7
      OUT (#FE),A ;Последняя.
      NOP
      NOP
      NOP
      DJNZ L7
"      LD A,#7F    ;Интересуемся
      IN A,(#FE)  ;не нажата ли
      RRA         ;ANY KEY .
      JP C,LOOP   ;Если нет - всё
      IM 1        ;заново ,
      RET         ;иначе назад в
                  ; TASM.
Пояснения :
1.Команды  NOP нужны для растягивания ли-
ний по величине.
2.Часть  программы  находящуюся после ко-
манды HALT можно при незначительных изме-
нениях сделать обработчиком прерываний, и
полосы будут работать паралельно с основ-
ной программой.

3.Программа  жестко  привязана во времени
(к  сигналу  INT), выполняется при каждом
перестроении экрана, и каждый раз занима-
ет одинаковое число тактов .
Если  что-то  осталось непонятным, то ещё
раз  внимательно  взгляните  на программу
или  (что  ещё лучше) попробуйте её изме-
нять и посмотрите что выйдет.

               Глава III .
          Просто другая глава .

Разобравшись  с рисованием горизонтальных
линий, можно заняться изображением верти-
кальных  линий.  Но  здесь поджидает один
облом  :  заглянув  в  таблицу, в которой
расписаны такты для каждой команды (т.е в
приложение  1  в книге "Как написать игру
на  ассемблере"  )  вы узнаёте, что самая
быстрая команда работы с портами занимает
12 тактов CPU, а значит, как не старайся,
чёрточки  уже 24 точек не изобразить. Те-
перь  о самой технологии рисования верти-
кальных линий.

1.  Киньте  в порт #FE какой-нибудь цвет,
например белый.

2. Сразу за этим пошлите цвет который бу-
дет фоновым (черный)

3. Выдержите паузу равную число тактов за
которые строится строка в вашем компьюте-
ре,  минус  число  тактов  потраченое  на
пункты один и два .

4 Повторите пункты 1-3

Поясняю на примере :

Начало как и в прошлом примере
      ............
LOOP  EI
      HALT
; далее совсем иначе
      LD D,7
      LD E,0
      LD A,80
      LD C,#FE

MAX   OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      OUT (C),D  ; 12 тактов
      OUT (C),E  ; 12 тактов
      ; Итого уже  192 такта
      NOP        ; 4 такта
      NOP        ; 4 такта
      NOP        ; 4 такта
      DEC A      ; 4 такта
      JR NZ,MAX  ; 12 тактов
  ; в сумме набежало 220 тактов т.е.
  ; столько сколько по времени тратит
  ; мой компьютер на построение одной
  ; строки
      LD A,#7F
      IN A,(#FE)
      RRA
      JP C,LOOP
      IM 1
      RET
По идее после запуска программы вы должны
получить вертикальные полосы вверху экра-
на,  если полосы скошены вбок то измените
число  NOPов  внутри  цикла (увеличте или
уменьшите).  Возможен  вариант что полосы
будут  зверским образом дергаться (если у
вас  PENTAGON,то такого никогда не будет)
выход из этого положения таков : вставить
после  HALTа команду (или команды) выпол-
няющуюся  за время не кратное 4-м тактам.
Например попробуйте :
LD A,(0) 13 тактов 3*4+1
или
DEC DE     6 тактов 4+2
или
ADC A,(HL) 7 тактов 4+3
Наверняка поможет !

Фактически  о бордюрных эффектах говорить
больше нечего. Последнее замечание : пос-
ле  прихода  сигнала INT управление обра-
ботчику  прерываний  будет передано сразу
(если  INT пришёл во время выполнения ко-
манды HALT ) или после небольшой задержки
(длительность  зависит от количества так-
тов  текущей команды которые осталось вы-
полнить).

На этом всё .

Если  у  вас  есть  что добавить по этому
вопросу, то напишите в редакцию и подели-
тесь своими познаниями.



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

Авторы журнала - ZX-Format No.5

От авторов - о пятом номере журнала.

Игрушки - 48 утюгов (част 4).

Игрушки - по пополочкам: Castle Master #1

Игрушки - новелла по игре Robin Of Sherlock.

Программистам - Basic для чайников - часть 5.

Программистам - искусственный интеллект в компьютерных играх.

Программистам - TR-DOS для программистов.

Программистам - описание и история создания MEM.

Программистам - обмен опытом: Об эффектах на бордюре и кое о чём ещё.

Программистам - обмен опытом: "Подсчет мозгов" - AUTOconfig v5.03.

Программистам - adventure: разумный подход к прохождению.

IS-DOS - пользователям: справочник по основным командам и утилитам базового комплекта IS-DOS.

IS-DOS - программистам: краткий курс программирования в среде IS-DOS.

IS-DOS - IS-NEWS - "Новости в мире IS-DOS".

IS-DOS - програмно-аппаратный комплекс поддержки IDE HDD для ZX Spectrum.

Железо - KAY: ZX Spectrum Ttransformer.

Железо - Технология это война.

Железо - General Sound.

Железо - XTR Modem.

Железо - Схемa KEMPSTON MOUSE.

Железо - Что делать, если мыша не правильного типа.

Железо - LPT COVOX и не только...

Премьера - описание программы Catalogue Master.

Премьера - описание программы Micro-editor. (MED)

Премьера - Text designer.

Интервью - интервью с разработчиком клона HOBBIT (2-я часть).

Отдохнём - словарь рекламы (С юмором, но не без здравого смысла!).

Отдохнём - Воспоминания о будущем.

Почта - Письма читателей.

Почта - реклама и обьявления.

Почта - уголок ламера (Детям до 16 лет читать категорически воспрещается).

Разное - перспективы: новая игра от Медноногова "Чёрный Ворон".

Разное - перспективы: Pink Floyd - новая операционная система для Спектрума.

Разное - перспективы: игра Экспансия.

Разное - Здесь был ТЫ.

Разное - Рецензия на игру Kings bounty II.

Разное - Конкурс на лучший уровень к игру Laser Squad продолжается. Новый конкурс на микро-демо.

Разное - анкета для читателей журнала.

Amiga - Крик души: Windows 95 и еще кое о чем.

Amiga - Amiga-клуб, вопросы и ответы.

Amiga - Проект PowerUp - следующее поколение Aмиг.


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

Похожие статьи:
BBS - список станций BBS ZXNet.
Ferrum! - Схема Kempston-mouse (исправления).
Мысли на тему - О "вероломном" нападении Германии на СССР 22.06.41: Ко дню Фюрера.
Письма в газету - Nefedov Sergey, Spider.
Информбюро - Путеводитель по журналу.

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