Oberon #02: Железо: Задержки сигнала INT в Spectrum

ALK'96

КАК ИСПРАВИТЬ INT ?

══════════════════════════════════════════
Сегодня в рубрике "ЖЕЛЕЗО" мы затронем одну болезненную тему, касающуюся (опять-таки!) несовершенства наших отечественных схем SPECTRUMa. Коротко опишу суть проблемы: всякий пользователь "Ленинградов", "Пентагонов", "Ангстремов" и т.д., будучи в полном здравии и ясном уме, неоднократно замечал некоторые "глюки" в таких программах, как VENOM STRIKES BACK, MONTE CARLO CASINO, SHOCK MEGADEMO (MULTICOLOR, GREETINGS), CHASE H.Q.128... - этот список можно продолжить кучей trainer-ов к различным играм.

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

Сейчас я попытаюсь объяснить, почему "это" происходит. Все "глючные" эффекты "у них" (т.е. за рубежом) пишут, как правило, на фирменных SPECTRUMax. Такие эффекты выполняются синхронно с кадровой разверткой телевизионного сигнала - этот прием необходим для осуществления "плавности" и "равномерности" движений спрайтов, бегущих строк и т.д. Синхронизация программ перерисовки объектов с кадровой разверткой в SPECTRUMax достигается путем помещения этих программ в обработчик маскируемых прерываний, или же путем их выполнения в цикле после команды микропроцессора HALT (что, собственно, не меняет сути). Маскируемые прерывания возникают синхронно с кадровой разверткой с частотой 50 герц - на вход INT микропроцессора поступают короткие импульсы с этой частотой. Известно следующее: маскируемое прерывание в PENTAGONe возникает одновременно с кадровым импульсом, т.е. обработка прерывания начинается одновременно с построением нового кадра. В фирменном SPECCY сигнал прерывания "запаздывает" относительно кадрового импульса на время, примерно равное построению шестнадцати растровых строк.

Программы, разработанные на фирменных "компах", "настроены" на "сдвинутый" относительно кадров INT, поэтому, будучи запущены на нестандартных SPECTRUMax, будут "показывать" наблюдателю картинку в те моменты времени, в которые происходит перерисовка спрайта (имеется в виду программная перерисовка, не совпадающая с аппаратной перерисовкой TV-кадра). А это отображается в виде частично "исчезающего" или "свернутого" на одну строку изображения.

Если же в программе предусмотрены всякие BORDER-эффекты типа MONTE-CARLO, то на "плохих" компьютерах это еще можно терпеть - подумаешь, полоски вверху, зато работает, а вот если MULTICOLORы? -------------------------- Лирическое отступление... Для тех, кто не знает, что такое MULTICOLOR , поясню: это техника получения нескольких цветов - более двух одновременно в одном знакоместе. Этот эффект достигается полной синхронизации компьютера со строчной разверткой телесигнала, а это достигается в свою очередь синхронизацией с кадровой по сигналам INT-прерываний - другого способа в SPECTRUMe просто нет. Естественно, если у вашего компьютера нестандартная фаза INT-сигнала, то вы увидите вместо потрясающего великолепия какие-то широкие цветовые полоски, мерцающие чуть ли не случайным образом. По большому счету, нормальная работаMULTICOLOR-эффектов зависит не только от правильной фазы INT-сигнала, но и от схемы формирования строк растра в компьютере - к этой проблеме я вернусь чуть позже... ----------------------------------------- Когда я впервые встретился с BORDER-эффектом в программе VENOM STRIKES BACK, который, как вы догадались, работал неправильно, я смирился с этим, но когда увидел (вернее нормально не увидел!) SHOCK MEGADEMO, а именно MULTICOLOR в том виде, каким его воспринимают художники-абстракционисты, и GREETINGS, которых я вообще не смог разглядеть на экране - то мое терпение лопнуло...

Месяц поисков оптимального решения вылился в небольшую схемку, приведенную чуть ниже. Суть работы данного устройства заключается в задержке запросов маскируемых прерываний, поступающих от схемы компьютера на вход INT микропроцессора на строго заданную величину. Величина временной задержки может быть отрегулирована. Схема включается в разрыв между входом INT микропроцессора и остальной частью схемы компьютера. Микросхемы: DD1 - К5SSTM2, DD2 - К5SSЛН1 или К5SSЛН2, DD3 - К555ЛАЗ, DDЧ,DDS - К5SSUE7, DD6 - К5SSЛА2, можно использовать и 155-, и 1533-серии микросхем. Диоды: VD1,VD2 - КДS22Б. Конденсаторы: C1 - 10н, (может изменяться в процессе настройки), C2 - 1н, C3 - 10н. Резисторы: R1,R2 - 180 Ом, R3,R4 - 1 Ком. Разводка питающего напряжения: +5 вольт к 14 выводу DD1,DD2,DD3,DD6, к 16 выводу DDЧ,DDS, "корпус" к 7 выводу DD1,DD2,DD3,DD6, к 8 выводу DDЧ,DDS. ----------------------------------------- Наладка схемы. Схему можно умудриться состряпать на пластине одностороннего текстолита размером 25х75 мм. Совсем не обязательно разводить печатный монтаж - все соединения можно провести многожильным проводом МГТФ. Для удобства настройки соедините выходы счетчиков DDЧ,DDS с м/с DD6 длинными проводками, к неиспользуемым (по схеме) выходам счетчиков тоже необходимо подпаять провода - они могут вам понадобиться. Свободные (да и используемые тоже) входы м/с DD6 необходимо соединить с +5V через резисторы 1Ком. Ко всем входам DD6 тоже подпаивают провода. Все эти приготовления не касаются соединения 3-го вывода DDЧ с 1-м DD6 - это соединение можно сделать сразу без удлиннительных проводов - в процессе настройки его не придется разрывать. Конденсатор C1 желательно установить на некотором удалении от корпусов микросхем, чтобы уменьшить влияние изменений температуры воздуха, в то же время нет необходимости удалять его на слишком большое расстояние - вам придется искать разумный компромисс. После настройки схемы всю плату необходимо заэкранировать каким-либо металлическим корпусом, корпус подсоединить к минусовому (корпусному) выводу блока питания. Впрочем, экранировку платы можно не проводить - но это повлияет на стабильность времени задержки. Собрав схему, ее подключают (соблюдая полярность!) к питающим шинам компьютера. Контактную площадку, ведущую к 16 выводу Z-80 (INT) перерезают и в образовавшийся разрыв включают схему. Можно поступить проще - если в вашем компьютере Z-80 установлен на панельке, то осторожно вынув его оттуда, отгибают все тот же 16-й вывод, и ставят процессор на место, подключение схемы в этом случае заключается в подпаивании входа схемы к контактной площадке, а выхода к свободной 16-й ножке процессора. Если вы (счастливый?) обладатель PENTAGONa или "Ленинграда" с музыкальным сопроцессором, который "нарастили" поверх основной платы, то считайте, что вам крупно повезло - вам вообще не нужно "измываться" над процессором и платой компьютера, просто выньте плату сопроцессора и отогните 16-ю ножку разъема расширения, к ней подпаяйте выход схемы, вход соединяют, как и в предыдущем случае, затем устанавливают плату сопроцессора на место. ----------------------------------------- Настройка схемы. После того, как "внедрение" схемы в компьютер завершено, убедитесь, что все соединения выполнены в соответствии со схемой, что переключатель SA1 находится в верхнем (по схеме) положении. Для первого пуска желательно соединить выходы счетчиков DDЧ,DDS со входами DD6 так, как показано на схеме. Перед пуском компьютера запаситесь дискетами с "подозрительными" программами, в которых, по вашему мнению наблюдаются "глюки". Наберите, как минимум, пять таких программ и смело включайте ваш "комп". Если после включения компьютер реагирует на ваши нажатия по кнопкам, то можно с уверенностью сказать, что схема функционирует нормально. Если же наоборот, клавиатура не слушается, то попробуйте щелкнуть тумблером SA1, если после этого клавиатура "оживет", то вам придется искать ошибки в соединениях собранной схемки, иначе - вы "спалили" что-то внутри компьютера примите в этом случае мои соболезнования. Итак, вы загружаете какую-нибудь программу, желательно, чтобы в ней использовался какой-нибудь BORDERный эффект. Пощелкайте тумблером и наблюдайте за BORDERom, если после включения тумблера в "верхнее" положение полоски смещаются вниз, то можно с еще большей уверенностью сказать, что схема не просто функционирует нормально, но и справляется со своими прямыми обязанностями. Регулировка времени задержки сводится к выставлению оптимального количества перемычек между выходами счетчиков DDЧ,DDS (3, 2, 6, 7) со входами элемента 8И-НЕ (DD6 - 2, 3, 4, 5, 6, 11, 12). Каждая установленная перемычка имеет свой "весовой коэффициент" задержки по времени, так для каждой нижестоящей перемычки (по схеме) вес задержки увеличивается примерно в два раза по сравнению с вышестоящей. "Поигравшись" с перемычками, вы заметите, что добавление каждой новой перемычки увеличивает задержку (смещает BORDER-эффект вниз) и наоборот, причем "нижние" перемычки имеют большее влияние на время задержки. Если в результате опытов с перемычками вам никак не удается выставить точно величину задержки, то имеет смысл "поиграть" конденсатором C1, меняя его емкость в пределах от 8 до 20 нанофарад - в этом случае можно очень точно выставить задержку.

...

Вот тут мы подходим к самому главному. Настроив схему на первую программу, и загрузив другую, вы с удивлением замечаете, что BORDER-эффект в новой программе сдвинут. Особенно хорошо это наблюдается, если вы настраивали схему по программе Academy (Tau Ceti II), а потом загрузили VENOM STRIKES BACK (кто не видел этих программ (???) - в них BORDER-эффекты находятся в противоположных местах на BORDERE - сверху и снизу). Очень "хорошо" просматривается это на PENTAGONe, у которого, как говорится, "вообще нет тормозов". Вот мы и возвращаемся к проблеме строчной развертки... __________________________________________
Проблема строчной развертки...
Оказывается, наши доморощенные SPECTRUMы обладают еще одним неявным "глюком". Так, за время построения одной строки растра аппаратной схемой видеоконтроллера (в оригинале ULA) количество тактов микропроцессора для "совковых" и "фирменных" SPECTRUMов различно. Так, PENTAGONы успевают проделать больше операций, чем SPECCY, а SCORPIONы, к примеру, наоборот. На это влияют такие факторы, как реальная тактовая частота микропроцессора, так и аппаратное схемотехническое решение видеоконтроллера. Реальная тактовая частота зависит от степени "WAIT"-ованности компьютера, т.е. от аппаратных задержек работы процессора. Такие задержки, вообще-то нежелательны, но как ни парадоксально, в настоящем SPECTRUMe эти задержки процессора существуют. Они возникают в том случае, когда процессор и ULA пытаются одновременно обратиться к видеопамяти - процессор в соответствии с программой действий, ULA с целью прочитать байт видеопамяти для вывода на экран. Предпочтение в такой ситуации отдается ULA, процессор "притормаживается". То же происходит, если программа находится в экранной области - ее быстродействие уменьшается в среднем на 25% по сравнению с "обычной" программой. Повторюсь, это относится к стандартным SPECTRUMам и к некоторым моделям отечественных ("Ленинград", "SCORPION")... Радуйтесь, счастливые (!) обладатели PENTAGONов !!! Все эти строки, сказанные выше, к вам не относятся. "Пентагон" лишен этих "тормозов". Программы на "Пентагоне" одинаково работают во всей памяти, и WAIT-ножка процессора вообще не задействована. Однако, за все приходится расплачиваться... хотя-бы тем, что "фирменные" MULTICOLORы даже с опубликованной здесь схемой будут работать только в одной части экрана (порядка 12-ти знакомест). У "Ленинградцев", соответственно, картинка будет выглядеть лучше за счет WAIT-остановов процессора, но тоже не будет идеальной. ----------------------------------------- Продолжение настройки. Если вы поняли, что я пытался объяснить в последней "вставке", то вы, наверное, поняли, что никакими средствами нельзя заставить "Пентагон" работать так, как настоящий SPECTRUM. Можно лишь приблизить фазу INT-сигнала так, чтобы наблюдались хотя бы частичные "импортные" MULTICOLORы и BORDER-SCROLLERы. Поэтому лучше настраивать схему по середине экрана (MONTE CARLO) или по первой линии экрана, т.е. по первой линии в экранной области (SHOCK MEGADEMO, MULTICOLOR). Есть еще другой "критерий" настройки INT-фазы - по отсутствию "дрожания" спрайтов в CHASE H.Q.128 (главное меню), или по "присутствию" бегущей строки в SHOCK MEGADEMO, часть GREETINGS.

Итак, настроив по своему вкусу схему, можно припаять короткие перемычки вместо отладочных, неиспользуемые провода отпаять. Входы на м/с DDб, которые будут подключены только к +5V через резисторы, можно объединить между собой и подключить к тем же +5V через один резистор.

----------------------------------------
Улучшения схемы.

Работу схемы задержки можно стабилизировать, если поставить вместо конденсатора C1 кварцевый резонатор на частоту 100-200 килогерц. Но в этом случае "набирать" задержку можно, только "играя" перемычками. Точность и диапазон дозировки задержки можно повысить, если кроме перемычек использовать дополнительные инверторы (ЛН1, ЛН2), включая их между выходами счетчиков и входами 8И-НЕ DDб.

----------------------------------------
Синдром отечественного MEGADEMOстроения. Все сказанное ниже никак не оскорбляет "наших" coderob, примите все как констатацию факта... Ни для кого в нашей стране не секрет, что количество фирменных, настоящих SPECTRUMob у отечественных пользователей буквально тонет в океане мутантов, собранных в глубоком подполье, отштампованных в серийном исполнении на различных производственных объединениях. Пальму первенства в количестве различных "перверсий" занимает (до сих пор!) "Пентагон". Существует масса отечественных MEGADEM, которые ПРИНЦИПИАЛЬНО могут правильно работать только на PENTAGONe. Отбросим тему "мифического" #FD-порта - это отдельная глобальная проблема. Примеров тому - тьма: ZY-ZY, INSULT, SATISFACTION, PSG-WINS, MENTAL MASTURBATION, ECSTASY,... Что поделаешь, PENTAGON стал своеобразным стандартом на "привязку" MULTICOLORob. Кому-то покажется странным, чего это тут автор начал заговариваться о наших MEGADEМах, когда статья совсем не из той оперы. А я все веду к тому, что неспроста в схеме INT-задержки стоит ма-а-ленький тумблер SA1, который отключает схему от процессора. Это сделано как раз для того, чтобы можно было нормально смотреть MULTICOLOR, скажем и в SATISFACTION, и в SHOCKe. Вот, собственно, мы и подошли к концу.

══════════════════════════════════════════

* * *

__________________________________________

Вместо постскриптума: Кому не надоело читать этот бред, могу детально объяснить, как работает описанная схема. Вам стоит запастись копией этой схемы на листке бумаги и перелистнуть страницу...

----------------------------------------
Как "это" работает... Всю схему можно условно разбить на четыре больших блока:

1. Триггерный блок (DD2.1, DD1.1, DD2.4, DD2.5, DD2.6, C2, R3, VD1):

2. Тактовый генератор (DDЗ.1-DDЗ.3, C1, R1, R2):

3. Схема счета (DDЧ, DDS, DDб):

4. Формирователь выходного INT-сигнала (DD2.2, DD2.3, C3, R4, VD2).

C приходом "ненормального" запроса прерывания на вход DD2.1 состояние триггера DD1.1 устанавливается в лог.единицу. Это повлечет за собой запуск тактового генератора (5н.DDЗ.2=1) и разблокирование составного счетчика с начальным нулевым состоянием (14н.DDЧ, DDS=0). Генератор подключен ко входу накопления (+1) счетчика DDЧ.

Итак, процесс счета начинается - на выходах счетчиков DDЧ, DDS "перебираются" кодовые комбинации в двоичном восьмиразрядном коде. Этот процесс будет продолжаться до тех пор, пока схема совпадения, собранная на м/с DDб и поставленных вами перемычках, не "поймает" последнюю крайнюю комбинацию единиц. Если кроме перемычек вы использовали и дополнительные инверторы (что более корректно), то краевая кодовая комбинация (а следовательно и величина задержки) будет определяться не только первыми "встреченными" единичными, но и нулевыми битами. Если совпадения еще не было, то на выходе DDб будет лог.1 - "совпадения нет".

При совпадении требуемой и текущей комбинации на выходе сформируется лог.0. Факт перехода выхода DDб из 1 в 0 регистрируется формирователем короткого импульса на элементах DD2.2, DD2.3, C3, R4, VD2 - на выходе DD2.3 формируется "задержанный" INT-запрос, который и поступает на вход INT процессора.

Тут надо отметить, что данный формирователь полностью повторяет схему в PENTAGONe, поэтому нет причин беспокоиться о длине короткого импульса - он будет таким же (надо полагать нормальным), как и прежде.

После формирования выходного сигнала тактовый генератор продолжает исправно работать и с его очередным тактом на выходах счетчиков появляется другая кодовая комбинация, на единицу большая, чем необходимая. При этом схема совпадения (8н.DDб) снова выдает лог.1 - "совпадения нет".

Факт перехода схемы совпадения из 0 в 1 "улавливается" другим формирователем коротких импульсов (DD2.4-DD2.6, C2, R3, VD1), на выходе которого формируется импульс лог.0. Этот импульс приводит триггер DD1.1 в исходное состояние - на выходе Q(5н.) устанавливается лог.0, что останавливает тактовый генератор, на выходе не-Q(6н.) устанавливается лог.1, которая сбрасывает счетчики DDЧ, DDS в нулевое состояние. После этого схема готова к приему нового запроса... Вот и все.

Следует отметить, что в данной схеме есть один недостаток - величина задержки будет "плавать" на отрезок времени, равный одному периоду тактового генератора. Поэтому желательно установить максимально возможную частоту генератора, а задержки подбирать более "старшими" перемычками. Если вместо конденсатора C1 установлен кварцевый резонатор, то с "плаванием" проблем не будет.

----------------------------------------
Еще раз до свидания!

══════════════════════════════════════════

* * *

Оглавление издания: Oberon #02

  • Введение
    Введение во второй выпуск журнала 'Оберон' с объяснением задержек и расширения команды. Редакция признает прошлые недоразумения и представляет участников нового выпуска. Предоставлены детали о распространении, вкладах и функциях взаимодействия с пользователем.
  • Свиток - Alex Noman
    Мануал игры 'Peking', описывающий управление, опции меню и стратегию игры, связанную с поиском пар ящиков в условиях ограниченного времени.
  • Свиток
    Empire 128 — стратегическая космическая игра, где игроки выступают торговцами в условиях инопланетного вторжения. Геймплей включает торговлю, выполнение миссий и исследование космоса. Игра требует 128K памяти и предлагает сохранение на диске и RAM.
  • Свиток
    Описание различных космических кораблей, включая их характеристики, системы вооружения и назначение. Каждая модель отличается скоростью, вооружением и функциональностью. Включены примечания о происхождении и применении.
  • Обзор
    Обзор игр и инструментов для ZX Spectrum: Double Xinox 128 предлагает современный взгляд на Xonix с 80 уровнями и новыми вызовами. UFO 2: Terror in the Deep имеет несколько версий с улучшениями и недостатками. Shadow Dancer для ZX Spectrum демонстрирует эволюцию графики, сохраняя классические элементы игры.
  • Обзор - Unbeliever
    Анализ конкурса демо ENLIGHT 1996 года в Санкт-Петербурге, оценка участников и результатов по платформам. Выделяются достижения и критика значимых работ. Обзор динамики конкурса и взгляд на демо для ZX Spectrum.
  • Наш ответ
    Отзывы читателей и ответ редакции о содержании журнала, необходимости большего количества графики и состоянии местного самарского распространения программного обеспечения.
  • Обо всём
    Критика качества программного обеспечения Sinclair, беспокойство о влиянии плохой программы на срок службы компьютеров и комментарии о практике группы CODE BUSTERS.
  • Ликбез - Paul Atrides
    Подробное рассмотрение восьми основных этапов разработки программного обеспечения, от определения технических требований до тестирования и распространения. В статье приводятся примеры необходимости каждого этапа и критикуются плохо выполненные примеры. Подчеркивается важность системного программирования для коммерческих и личных проектов программного обеспечения.
  • Железо
    Статья обсуждает проблемы синхронизации в различных моделях Spectrum и предлагает схемное решение для исправления задержек сигнала INT для улучшения графической производительности.
  • Анонс - M.M.A
    Введение новой рубрики, подчеркивающей работы самарских программистов, описание проектов, таких как ZX-WINWORD, UNRECOGNIZED FORMATTING OBJECT и DESIGNER ANALYSIS FUNCTIONS. ZX-WINWORD стремится быть издательской системой для Spectrum, а U.F.O. предлагает передовое копирование дисков. DESIGNER ANALYSIS FUNCTIONS помогает в графическом построении и анализе функций.
  • Погурамим - Unbeliever
    Юмористический рассказ о Штирлице, вымышленном офицере разведки, в абсурдных и сюрреалистичных ситуациях с гестапо, программированием и тайными планами.
  • Погурамим - Unbeliever
    Юмористический и вымышленный рассказ о шпионских приключениях Штирлица во время тайной операции с множеством неожиданных поворотов и сатирой.
  • Реклама
    Реклама магазина электроники и компонентов, предлагающего б/у технику, ПО и литературу.