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

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

<b>Программистам</b> - ассемблер: Экскурс в анатомию 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: вопросы и ответы.

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

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


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

Похожие статьи:
Обзо игр - GUMMY, After Burner, MURK 3320, BIGNOSE.
Разыскивается - From: UHO To: All
Дискуссия - Журналостроение. Как сделать крутой журнал.
Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".
demo - лучшее демо

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