О совместимости и не только...
---------------------------------
Сергей Евтушенко,
г.Бердск, 1995.
-----------------------------------
Написать эту статью меня побу-
дил 4 номер РЕВЮ за 1994 г., точ-
нее - вопросы совместимости, свя-
занные с портом #FF, в который
раз поднятые читателями.
Не нравится мне такая ситуация
- одни пытаются решить проблему в
корне, хотя и применительно к
конкретному варианту схемы, кста-
ти уже не первому (например,
Алексей Иванов из Москвы, N4,
стр.25, хотя я не во всем с ним
согласен, впрочем, я не знаком со
схемотехникой ПЕНТАГОНА). Другие
предлагают себе и другим головную
боль (см. стр. 48,49 - материал
А.Неведомского и А.Казаченко). Не
проще ли один раз доработать
компьютер и закрыть эту тему раз
и навсегда. Ведь эти же версии
программ, доработанные на предмет
отсутствия порта #FF, попадают и
к простым смертным USERам, воз-
можно, и не подозревающим о су-
ществовании ассемблера, но с кор-
ректно выполненным компьютером.
Кто поможет им привести программы
в изначальное состояние? Вероят-
но, "Трехтомник" ИНФОРКОМА...
Мне уже попадалась программа
TOP GUN, изувеченная подобным об-
разом, не работала бы она и на
фирменном Спектруме. Похоже, она
была покалечена под Ленинград-1,
которому, как известно, до лам-
почки, KEMPSTON это или #FF.
Между тем, в 4-5 выпуске РЕВЮ
за 1991 г. (стр.95) в статье "БУ-
ФЕРИЗАЦИЯ", подробно было описано
то обстоятельство, благодаря ко-
торому при чтении из "порта" #FF
(или любого другого, физически в
компьютере не существующего) на
шину данных попадает байт атрибу-
тов, который и дожидаются прог-
раммы, использующие этот метод
синхронизации, причем, это обычно
любой байт, отличный от #FF.
Фрагмент программы может выгля-
деть следующим образом:
WAIT IN A,(#FF);Читаем байт с
;шины данных.
INC A ;Быстрее и коро-
;че, чем CP #FF.
JR Z,WAIT ;Если 0, то про-
;читали #FF, ждем
;дальше.
.......... ;Если не 0, то
;поймали атрибут,
;можно обновить
;экран...
Вероятно, этот прием мог при-
меняться (и применялся) при зап-
рещенных прерываниях, иначе это
бесполезная трата памяти, можно
обойтись старым добрым HALT.
Ну это полемика, а надо дело
делать. Набор задач следующий.
1. Взять атрибут.
2. Сохранить атрибут.
3. Выдать атрибут на шину дан-
ных синхронно с гашением кадра,
то есть 50 раз в секунду, возмож-
но, по запросу процессора.
В любом варианте Спектрума
есть сигнал WR_ATTR (запись атри-
бутов) в контроллере дисплея,
сигнал BORDER, разрешающий пооче-
редно вывод цвета из регистра ат-
рибутов или из порта #FE (цвет
BORDER), а также сигнал INT, пос-
тупающий на 16 вывод Z80. Идея
заключается в следующем (см. схе-
му ниже): входы регистра К555ИР23
подключаются к выходам видео-ОЗУ
для машин с раздельными банками
памяти или к выходам ОЗУ компь-
ютеров с одним банком. Выходы
ре-гистра подключаются через ре-
зисторы к шине данных, то есть к
процессору. Номинал резисторов
выбран, исходя из следующих фак-
торов: нагрузочной способности
портов на ввод (клавиатура, KEMP-
STON и т.д.) и установленными ре-
зисторами с шины данных на +5В.
Рекомендуемое отношение номиналов
1:10, то есть на регистр - 1 кОм,
на +5В - 10 кОм. Запись в регистр
осуществляется сигналом WR_ATTR
по разрешению сигнала BORDER, а
чтение - совпадением INT, RD и
IORQ, снимаемых с процессора,
причем дешифрации адреса не тре-
буется, так как в фирменной маши-
не эта аномалия адреса не имеет,
и при совпадении INT и чтения из
какого-либо порта, например, кла-
виатуры, любая ТТЛ или ТТЛШ серия
без лишних хлопот на нагрузке 1
кОм выдаст соответствующие дан-
ные.
Особое внимание следует обра-
тить на полярность сигналов BOR-
DER и WR_ATTR, так как в различ-
ных моделях компьютеров они могут
быть различными и потребуется ус-
тановка дополнительных инверто-
ров. Также необходима корректная
дешифрация портов.
Проверка доработки производит-
ся запуском Бейсик-строки, имев-
шей место на страницах ZX-РЕВЮ:
10 PRINT IN 255: GO TO 10
или, чтобы реже продолжать
скроллинг:
10 PRINT IN 255;" ";: GO TO 10
В результате работы программы
при правильном монтаже на экране
будет последовательность байтов
255, изредка чередующихся байтом
атрибутов экрана.
В принципе, WR_ATTR можно и не
ограничивать сигналом BORDER, но
тогда нет никакой гарантии, что
попадется атрибут, хотя, в абсо-
лютном большинстве случаев это
будет не #FF.
Предлагаемая схема проверена,
установлена в моем компьютере бо-
лее года, дурного влияния на ре-
жим IM 2 замечено не было.
Итак, для 100%-ной совмести-
мости компьютера необходимо вы-
полнение следующих условий:
1. Фирменное ПЗУ.
2. Верная дли-
тельность INT (8-9
мкс). 1
3. Правильное
расположение INT в
кадровом синхроим-
пульсе.
4. Наличие вышеу-
помянутого псев-
до-порта #FF.
5. Корректная де-
шифрация портов.
6. Наличие резис-
торов с шины данных
на +5В.
7. Присутствие порта KEMPSTON
(#1F) для некоторых некорректно
написанных в отношении к пользо-
вателю программ нашими доморощен-
ными программистами.
8. Для 128К наличие защелки в
режиме 48К (некоторые 48К прог-
раммы виснут при ее отсутствии).
9. При подключенном сопроцес-
соре должен быть обеспечен режим
чтения из него, а не только за-
пись, так что для некоторых прог-
рамм, в особенности отечествен-
ных, наличие сопроцессора может
оказаться обязательным условием
их работоспособности.
Но это еще не все подводные
камни, встречающиеся на Вашем пу-
ти. Вполне возможно такое явле-
ние, что Ваш компьютер отвечает
всем вышеперечисленным требовани-
ям, а некоторые программы так и
не работают, хотя прекрасно функ-
ционируют у соседа, причем на
точно такой же машине. В чем тут
собака зарыта? Скорее всего, в
ОЗУ. Да, именно в нем, хотя Вы
его сто раз проверяли и перепро-
веряли. Тест может работать сут-
ками и без ошибок. А кровь Вам
может портить единственный бит в
единственной РУшке. Вычислить его
можно, постепенно снижая напряже-
ние питания при последующем тес-
тировании. В конце концов тест
никуда не денется и ошибку пока-
жет. А дальше - дело техники -
берите паяльник и ставьте более
быстродействующую микросхему. Чем
ниже напряжение питания, при ко-
тором сохраняется работоспособ-
ность, тем стабильнее будет рабо-
тать Ваш Спектрум.
Вышеописанный способ отладки
больше подходит к машинам с одним
банком памяти, так как у них наи-
более жесткий режим работы с опе-
ративной памятью. После такой эк-
зекуции мой Спектрум стал запус-
каться при 4,25В, а устойчиво ра-
ботать при 4,4В.
Еще один способ улучшить рабо-
ту схемы - установить резистор
680 Ом ... 1 кОм между 6 выводом
процессора и +5В, так что, если
его нет - рекомендую поставить.