ZX Format #03
29 февраля 1996

Программистам - ассемблер: Экскурс в анатомию ZX


     Экскурс в анатомию ZX

(С) DICTATOR
_______________________________

            Пролог.

            "А подать сюда этого
               Тяпкина-Ляпкина!"

   Реакция   читателей  на  цикл
"Ассемблер  для  чайников"  была
настолько  обширной  и неожидан-
ной, что повергла нас в глубокие
раздумья о бренности всего суще-
го. По большому счету,все откли-
ки  можно разделить на два типа:
"Это  что  -  злобный прикол?" и
"мы не кухонная утварь, нам пища
для мозгов нужна, а не для ...".
Одним  словом  все  считают себя
как минимум "начавшими" и требу-
ют,  именно  требуют, углубления
своих знаний.
   Что  ж, тут нам есть, что Вам
ответить.  К сожалению, недоста-
точно  просто  знать  ассемблер,
чтобы учить ему других, надо еще
и уметь учить. А, как показывает
практика, эти два качества поче-
му-то  стараются  избегать  друг
друга.  На данном этапе нам пока
не  удалось найти человека, дос-
таточно   квалифицированного   в
обоих вышеуказанных ипостасях,но
надежда,  как  известно, умирает
последней,  и,  возможно, Вы еще
сможете прочесть в нашем журнале
полный  курс  от  "А"  до "RESET
INTERRUPTION".
   Ну  а пока продолжаются поис-
ки,мы решили публиковать отдель-
ные тематические статьи, освеща-
ющие  наиболее часто возникающие
у  "начавших и углубивших" проб-
лемы.  В ближайших номерах ZF мы
собираемся  затронуть  следующие
направления:
  - оптимизация программ по ско-
рости и времени;
  - быстрая графика;
  - убогость TR-DOS и как с этим
бороться;
  - 3D-векторная  графика  и 3D-
анимация.

   Изменения   в  данном  списке
возможны, даже необходимы, и бу-
дут  производиться,  в основном,
по мотивам Ваших писем. Сидя до-
ма в мягом кресле с бутылкой пи-
ва,  автор  не может догадаться,
чего  же  хочет  народ  - хлеба?
зрелищ?  3D-джойстик?  или  тоже
пива?  А посему пишите, звоните,
заходите  и излагайте свои мысли
по  поводу необходимости той или
иной  темы (лучше все-таки пиши-
те).

         ГЛАВА ПЕРВАЯ.

               "Скажи мне, какую
           программу ты написал,
             и я скажу, кто ты."

   По  долгу  службы автор неод-
нократно  сталкивался со следую-
щей  ситуацией: появляется ново-
испеченный гений и, глядя на мир
свысока, преподносит этому само-
му  миру свое творение, не усту-
пающее  по  гениальности  своему
автору.  Но при первом же тести-
ровании выясняются некоторые де-
тали:  дрожит  курсор  в верхней
части экрана, дергаются спрайты,
скорость  программы  неравномер-
на...  Да и это все только в том
случае, если новый шедевр вообще
соизволит  работать не только на
машине  его  создателя, а и хотя
бы  на половине серийных компью-
теров.
   Глобальных причин такого при-
скорбного случая обычно две:
 а) сей программист не придержи-
вается никаких стандартов и пра-
вил  или  единственно правильной
считает свою машину;
 б) данный индивидум относится к
категории  очень  хороших учите-
лей.
   Но, так как со вторым пунктом
этого резюме бороться практичес-
ки невозможно, мы остановимся на
первом,  а  именно  поговорим  о
стандартах.

   Каждому синклеристу с пеленок
должно  быть известно, что такое
маскируемые прерывания и для че-
го  они нужны. Если же по каким-
либо  причинам Вы пропустили сей
знаменательный  период жизни или
Ваше детство проходило на клави-
атуре  IBM PC, то, возможно, Вам
будет  небезинтересно узнать не-
которые  подробности об этом ко-
варном явлении.
   Сигнал  маскируемого прерыва-
ния  (далее  INT) вырабатывается
одновремено с приходом кадрового
синхроимпульса, имеющего частоту
50  герц  (50 раз в секунду). По
приходу  же  кадрового синхроим-
пульса начинается построение ви-
деоизображения,  но учитывая ап-
паратные особенности как компью-
тера, так и видеомонитора, экран
строится  большего  размера, чем
реально наблюдаемый. В стандарт-
ном  компьютере время построения
восьми  горизонтальных  пикселей
занимает 4 машинных такта, одной
горизонтальной  линии - 224 так-
та, а количество линий на экране
-  312.  Таким образом можно вы-
числить количество тактов, кото-
рое способен выполнить процессор
за  время построения всего экра-
на, - это число составляет около
70.000 тактов. Стоит также отме-
тить,  что  сюда  входит и время
гашения INT, но это не столь су-
щественный фактор, к тому же для
его  понимания нужно разбираться
в архитектуре компьютера и не на
любительском уровне.
   Проза   жизни  заключается  в
том, что это чисто теоретическое
значение,  и  на  практике нужно
учитывать то, что ОЗУ обычно ра-
ботает  тормознее ПЗУ и это вно-
сит  коррективы в производитель-
ность.
  Наблюдательный   читатель  уже
догадался,что видеоконтроллер ZX
выводит экран  значительно быст-
рей,  чем  его  может  построить
программа, ведь элементарная ко-
манда  LDI занимает 16 тактов, а
построение восьми бит экрана - 4
такта. Таким образом,если Вы на-
чинаете  перестраивать экран од-
новременно  с  приходом  INT'а и
пытаетесь  охватить  весь экран,
посреди этого благородного заня-
тия  видеоконтроллер Вас догонит
и  перегонит, и оставшаяся часть
экрана будет изображена только в
следующем цикле прерывания. Нас-
колько  известно автору сего ма-
нускрипта,  большая часть нового
поколения  программистов все вы-
шеизложенное  еще  не осознала и
продолжает клепать дрожащие кур-
соры  и мерцающие спрайты. Мето-
дам  борьбы  с этими явлениями и
посвящается следующая глава.


         ГЛАВА СРЕДНЯЯ.


              "Ничто не работает

                     так долго."


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

 1.  запоминаем в буфер содержи-
мое экрана в том месте, где  бу-
дет выведен курсор;
 2.  накладываем на экран курсор
по маске;
 3.  опрашиваем  клавиатуру, пе-
ресчитываем координаты курсора;
 4.  восстанавливаем  содержимое
экрана на месте курсора в преды-
дущей  позиции  и  переходим  на
пункт 1.

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

   От начала видеоэкрана до пер-
вого  пиксельного  ряда рабочего
экрана (т.е. начала видеобуфера,
располагающегося с адреса #4000)
в  стандартной машине выстраива-
ется 70 линий бордюра, что зани-
мает  15.680 тактов. Однако оби-
лие загадочных (читай-тормозных)
схемотехнических решений некото-
рых  компьютеров заставляет при-
держиваться   несколько   другой
цифры. Автор еще не встречал ма-
шин тормозней Скорпиона и посему
рекомендует  Вам  придерживаться
критических показаний этой маши-
ны,  а именно 60 линий, что сос-
тавляет 13.440 тактов.
   Так  вот, если процедуры сти-
рания курсора, копирования буфе-
ра и наложения курсора влезают в
пределы  этой цифры, курсор выг-
лядит очень даже симпатично и не
имеет  никаких  шансов  устроить
мегадрожание  ни  в  одной части
Спектрумовского   экрана.  Ярким
примером может являться оболочка
ZF и, в особенности, MEMORY TEST
из теневика второго номера. Если
Вы  приглядитесь внимательно, то
заметите, что одновременно обра-
батываются два курсора, совокуп-
ный размер которых составляет 10
знакомест.
   Подводя  предварительный итог
всему вышесказанному, автор при-
носит  свои  извинения, если Вам
что-либо  было непонятно по при-
чине неумения этого самого авто-
ра доступно излагать материал на
бумаге.  Но, если Вы все еще чи-
таете  и  Вам все еще интересно,
то  я,  пожалуй,  изложу  резюме
первой части.
   Главное требование к програм-
ме,  работающей  с  динамической
графикой  заключается  в следую-
щем:  какую  бы часть экрана эта
програма  ни  перестраивала,  на
какой бы она машине ни работала,
для  отсутствия мерцания изобра-
жения во время построения оного,
видеоконтроллер  не должен пере-
секать  перестраиваемую область.
При этом никакой роли не играет,
Вы его обгоняете, или он Вас.
   Несмотря  на то, что в данной
главе  были изложены лишь основы
анатомии  ZX,  этого должно быть
достаточно  по  крайней мере для
начала   экспериментов,  которые
рано  или  поздно приведут Вас к
полному  консенсусу с динамичес-
кой графикой и бордюрными строч-
ками.
   Но,  как недвусмысленно пока-
зала история, эксперимент экспе-
рименту  рознь,  и  остроту ножа
нужно  проверять на чужом горле.
Развивая эту мысль, мы незаметно
подкрались к следующей главе, из
которой Вы, возможно, подчерпне-
те  кое-что интересное о методах
отладки  программ,  критичных по
времени и местоположению в цикле
прерывания.


     ГЛАВА ПОЧТИ ПОСЛЕДНЯЯ.


                "Я фигею, Тосик,

                 бамбук зацвел."


   Многих програмистов частенько
волнует  вопрос "а как долго ра-
ботает моя новая/старая/улучшен-
ная/углубленная процедура?". Ес-
ли  Вы еще не догадались сделать
какую-либо  аппаратную примочку,
и  Ваши мозги не предрасположены
к извращенному ходу мысли, то, в
большинстве случаев,молчание бу-
дет  Вам  ответом.  Однако,  как
сказал  классик, все  гениальное
просто, и  описываемый ниже спо-
соб полностью соответствует это-
му тезису.
   Первым делом Вам следует вык-
лючить все турбо-режимы и тормо-
за  и привести машину в наиболее
приближенный  к  стандарту режим
работы.  Далее  возьмите полоску
бумаги  шириной 2 см 97 мм и вы-
сотой  с  экран  Вашего любимого
телевизора  или  монитора и при-
бейте  ее к этому самому экрану.
Закончив это высокоинтелектуаль-
ное  занятие, загрузите TASM 4.0
(XL  Design) и набейте следующую
программу:

       ORG #8000
       DI             ;создание
       LD HL,#FE00    ;вектора
       LD A,H         ;маскиру-
       LD I,A         ;емых
       INC A          ;преры-
       LD (HL),A      ;ваний
       INC L
       JR NZ,$-2
       LD C,H
       INC H
       LD (HL),A
       LD L,A
       LD (HL),#C9
       IM 2
;основной цикл, иными словами
;сама суть
LOOP   EI
       LD B,7
       HALT
       OUT (C),B
OOPS   DS 13440/4,0
       OUT (C),0
       XOR A
       IN A,(C)
       CPL
       AND #1F
       JP Z,LOOP
       LD A,#3F
       LD I,A
       IM 1
       EI
       RET

   Следует  отметить, что упоми-
нание TASM 4.0(XLD) не было слу-
чайным. Сей продукт рекомендует-
ся  по  причине реализации в нем
таких  нужных  команд,  как  OUT
(C),0 и DS.

   Результатом   работы   данной
программы  будет  полоса  белого
цвета на черном бордюре, синхро-
низированная  с  началом экрана.
Далее  Вам следует взять фломас-
тер  и провести на приклеенной к
телевизору бумажке черту, парал-
лельную нижнему краю белой поло-
сы. Рядом с этой чертой напишите
"13.440" и, если Вы еще не поня-
ли сути метода,то медицина здесь
бессильна (добрая шутка). Внима-
тельный читатель уже догадался о
смысле  строки  программы, поме-
ченной  меткой OOPS. Она создает
в   памяти  13440/4=3360  команд
NOP,  выполнение которых и зани-
мает  собственно  13440  тактов.
Таким  образом,  посидев  десять
минут около монитора с фломасте-
ром  в  зубах,  подставляя в эту
строчку  значения в тысячах так-
тов, Вы составите шкалу, которой
будете пользоваться всю оставшу-
юся  сознательную жизнь. При же-
лании  можно сделать разметку на
каждую  тысячу  тактов,  но это,
конечно,  если хватит терпения и
чернил.
   Теперь   перейдем  ко  второй
части  данного метода. Чтобы оп-
ределить,  в  каком  месте цикла
прерывания  находится определен-
ная  подпрограмма  и какое время
она  выполняется, Вам нужно сде-
лать три элементарные вещи:

 1. перед  началом  искомой под-
программы   поставить  вывод  на
бордюр  какого-либо цвета, отли-
чающегося   от  основного  цвета
бордюра;
 2. по окончании данной подпрог-
раммы  восстановить фоновый цвет
бордюра;
 3. посмотреть  на   бордюре  во
время  выполнения программы, где
находится  выделенная  п/п  и, в
соответствии  со  шкалой, высчи-
тать ее продолжительность.

   В  большинстве  случаев, осо-
бенно если Вы еще мало представ-
ляете  себе  программирование  в
реальном времени, реакцию экспе-
риментатора  иными  словами, как
полное  офигевание и воззвание к
великому  Тосику,  не  назовешь.
Если и сейчас Вам непонятна суть
данного метода,то прямая Вам до-
рога  в клуб любителей Денди-Ме-
гаЮниор  или в ближайший магазин
за PENTIUM-133.
   Вот так, шаг за шагом, мы по-
дошли  к  финальной части сегод-
няшней лекции, в которой обобще-
ны  основные  требования к прог-
раммам  и программистам, а также
даны кое-какие полезные для здо-
ровья советы.

                            ...



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

IS-DOS - "IS-DOS - начинающим" No 3

IS-DOS - "Оконная система IS-DOS".

IS-DOS - "Формат объектных модулей *.obj IS-DOS Ассемблера".

IS-DOS - "Формат таблицы локальных символов IS-DOS Ассемблера".

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

Железо - Исправление ошибки TR-DOS.

Железо - новая звуковая карта: General Sound.

Железо - новая модель Спектрума: Scorpion ZS 256 Turbo+.

Железо - о турбировании Спектрум-машин.

Железо - обзор модемов для ZX Spectrum.

Железо - Шинная архитектура Спектрума (концептуальная разработка).

Игрушки - "Last battle" (Последняя битва) подробное описание.

Игрушки - 48 утюгов (второй уровень).

Игрушки - десятка наиболее продаваемых в С.-Петербурге.

Игрушки - описание игры BATMAN-II.

Игрушки - что новенького: The Light Corridor, Jonny Quest in Doctor Zins, Bedlam, Bubble Dizzy, Navy Seals, Пираты.

Конкурс - конкурс на компьютерный анекдот.

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

От авторов - о третьем выпуске журнала.

Отдохнём - HУ, ЮЗЕР, ПОГОДИ!

Отдохнём - глюкодром: Самые ОПЕЧАТКИ.

Помощь - Очередной трактат об очердной оболчке и не только.

Почтовый ящик - дискуссия.

Почтовый ящик - доска обьявлений.

Почтовый ящик - письма читателей.

Премьера - TASM 4.0 (Turbo ASseMbler for ZX-Spectrum 128k)

Премьера - Приключения ВИННИ ПУХА.

Программистам - Basic для всех №3.

Программистам - Адаптация игр: адаптация программ на диск.

Программистам - Адаптация игр: зыкрытые коды.

Программистам - адаптцация игр: бессмертия.

Программистам - ассемблер: Экскурс в анатомию ZX

Разное - Amiga: вопросы и ответы.

Разное - Амига: новости.

Разное - Перспективы П/О.


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

Похожие статьи:
От авторов - NoViSеT.
Юмор - Мыселки 1 & 2 (полезные советы).
Железо - Правила по использованию Vicomm модема.

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