Oberon #01
31 марта 1996
  Железо  

Железо - порт #FF в русских клонах Спектрума.

<b>Железо</b> - порт #FF в русских клонах Спектрума.
© А.Королев                               
                                          
                                          
      ПОРТ #FF НА РУССКОМ "ЖЕЛЕЗЕ"...     
                                          
                                          
Данная  заметка  посвящена  промелькнувшей
в SPECTROFONe  статье  Кирилла  Громова  о
"компьютерах, которые мы выбираем",в част-
ности теме так называемого порта атрибутов
#FF.                                      
                                          
  Заранее предупрежу владельцев  компьюте-
ров, имеющих такую "примочку", что им бес-
покоиться не о чем, эту заметку  они могут
почитать просто так-"для общего развития".
 Ну а счастливые обладатели "Ленинградов",
"Москвы", "PENTAGONob" ( а у автора  сие )
просто обязаны прочитать,что их будет ожи-
дать, если  они  сделают "схему от Кирилла
Громова"...                               
                                          
  Автор этой статьи поставил схему "порта"
на свой грешный "PENTAGON-128", и нижесле-
дующие выкладки построены на реальных дан-
ных, полученных  при  исследовании  работы
устройства.                               
                                          
  Для несведующих (т.е. не читавших статью
К.Громова  в SPECTROFONe N15) - лирическое
отступление :                             
 Порт #FF - это фиктивное внешнее устройс-
тво,существующее на фирменном SPECTRUM-48.
Причем этот порт в SPECCY никто специально
не разрабатывал, он  "образовался" за счет
оригинальности схемотехники SPECTRUMa.    
  C  логической  точки зрения, в этот порт
"поставляется"   код  цветового  атрибута,
отображаемого  в  данный  момент  времени:
или в противном случае  ( т.е когда видео-
контроллер  отображает BORDER )  состояние
незанятой шины данных (байт #FF).         
  Повторюсь,так должен "работать" стандар-
тный "порт" атрибутов.                    
  Теперь о том,почему слово "порт" взято в
кавычки.  Как  уже  говорилось  ранее, это
устройство  образовано  за счет "приколов"
схемотехники: видеоконтроллер  и микропро-
цессор используют одну общую шину данных. 
  Когда  пользователь  пытается  прочитать
порт #FF, к шине данных ни одно из "закон-
ных", реальных устройств не подключается -
шина данных находится  в свободном состоя-
нии.  Но может получиться так,что в момент
чтения на шине будет расположен  код атри-
бута знакоместа,  именно он и будет прочи-
тан (или должен быть прочитан).           
                                          
  Вообще, эти довольно странные вещи  дол-
жны происходить и при попытке прочитать не
только порт #FF,но и любой незадействован-
ный порт в компьютере.  Не знаю почему, но
порт номер #FF  - общепринятый номер этого
экзотического устройства.                 
                                          
                                          
 Но, как  говорится, "вернемся к нашим ба-
ранам".  У автора  большие сомнения, что в
нашей стране каждый "синклерист"  обладает
фирменным компьютером.  А  по сему, в оте-
чественных схемах (исключая SCORPION,PROFI
и может быть ATM-TURBO)  данное устройство
полностью  отсутствует,  и  из  порта  #FF
всегда читается байт #FF.  Желающим прове-
рить свой  SPECCY  на  наличие  порта могу
привести простейшую программку на Бейсике:
10 PRINT IN 255:" "::GOTO 10              
  Если вы запустите эту программу и увиди-
те, что экран  сплошь  заполняется числами
255 - знайте,  что у вашего любимого Спек-
трума проблемы с портом атрибутов, и неко-
торые программы(SHORT CIRCUIT,ARKANOID 1),
которые используют потенциальные возможно-
сти порта для синхронизации  вывода графи-
ки, будучи запущены на каком-нибудь отече-
ственном "самопале", приведут к "висяку". 
                                          
                                          
  Схема,  приведенная  в SPECTROFONe  и на
всякий случай отображаемая ниже, в принци-
пе работоспособна.  Но  у  нее  обнаружены
(как всегда !) некоторые отклонения  в ра-
боте. Поэтому,как настоящий исследователь-
хаккер, спешу поделиться некоторыми наблю-
дениями за работой данной схемы.          
                                          
 1. Начну с главного: после установки схе-
мы порта  с  компьютером НИЧЕГО ПЛОХОГО НЕ
ПРОИЗОШЛО, что  уже отрадно - если захоти-
те поставить эту  схему - ставьте, хуже не
будет.                                    
                                          
 2. Из порта #FF исправно  читаются "с пе-
ременным успехом" #FF  или  байт цветового
атрибута,как и следует "нормальному" порту
атрибутов.                                
                                          
 3. Если настойчиво читать данные из порта
#FF, предварительно  заполнив  экран одним
цветом ( например,  рамка и бумага черные,
чернила белые,  яркость  и мерцание выклю-
чены ), то помимо  перемежающихся значений
#7 и #FF будут "проскакивать" и еще какие-
то значения - у меня,например, в этом слу-
чае читается #7F.                         
  Составив специальную  программу-анализа-
тор, чисто опытным путем - после многокра-
тных запусков,  было  получено  следуещее:
вероятность прочтения  "незаконного"  кода
вместо кода  цветового  атрибута, исключая
значения #FF, приближается к 1/192.       
  То есть, в среднем на 192 "не #FF-значе-
ния" приходится одно "незаконное".        
Поэкспериментировав с цветом экрана, также
мною были  замечены  закономерности  между
байтом атрибута  и  "незаконными" числами,
прочитываемыми из порта.                  
 Например, помимо #7F,  у  меня  читалось:
#5F,#77,#F7,#DF,#4F,#CF,#EF,#E7,#C7...    
Поначалу я был в недоумении, но старатель-
но перебрав все 256 кодов атрибута, соста-
вив таблицы соответствия  между атрибутами
и читаемыми "незаконными"  данными, я раз-
гадал  "на кончике пера"  причину  "глюка"
этой схемы.                               
 Обьясняю: неправильная информация из пор-
та #FF будет читаться  в те моменты време-
ни, когда видеоконтроллер  непосредственно
переходит от отображения BORDERa к отобра-
жению адресной области экрана (т.е.картин-
ки), и когда на шину данных выдается атри-
бут знакоместа с левого края экрана  ( 0-я
колонка).                                 
  Регистр порта #FF (микросхема К5SSUP23),
подключается к шине данных по сигналу POLE
ATTR,   который  активен  при  отображении
атрибутов. Отдельные разряды этого регист-
ра по сигналу POLE ATTR должны подключить-
ся к соответствующим  разрядам шины данных
ОДНОВРЕМЕННО,  но мы,  живущие почти в 3-м
тысячелетии, знаем, что в мире ничего иде-
ального нет,и разряды регистра ,естествен-
но,  подключаются  к шине не одновременно,
а в разные моменты времени.               
  Конечно же,  несинхронность  подключения
катастрофически мала,  но  как  оказалось,
вполне  вероятна ситуация, когда микропро-
цессор  считывает  еще  не  сформированный
атрибут,  и  отдельные биты этого атрибута
все еще остаются установленными. Этот глюк
полностью зависит от конкретной микросхемы
регистра.  Например, у меня в регистре са-
мыми "тормозными" являются биты 0,1,2,6.  
У кого-нибудь может быть совершенно иное. 
                                          
 Человек,искушенный в схемотехнике, спро- 
сит меня: - "А  как  вообще правильно фун-
кционируют порты ввода/вывода,  однозначно
передавая информацию  и которые состоят из
таких же регистров ?"                     
... А я отвечу,  что  стандартная ситуация
чтения из порта ввода в  микропроцессорной
системе Z-80 определяется активными сигна-
лами микропроцессора RD, IORQ,и состоянием
адресной шины, на  которой находится адрес
порта ввода.                              
Микропроцессор аппаратно делает  поправоч-
ную задержку перед  чтением  информации  с
шины данных как раз  для  того,  чтобы все
разряды данных смогли правильно  сформиро-
ваться.  Порт ввода,  по активным сигналам
RD и IORQ, а также и адресу на шине адреса
подключает  свой  регистр  к шине данных и
выдает информацию,  пока   какой-либо   из
управляющих сигналов не станет пассивным. 
                                          
  В  нашем  случае  с  портом #FF по схеме
Громова,  ни  один  из  этих  сигналов  не
является управляющим  для  регистра  порта
атрибутов, и поэтому этот регистр "кидает"
на шину данных  коды атрибутов, совершенно
не   заботясь   о   том,  хочет-ли  вообще
микропроцессор прочитать что-либо из како-
го-либо порта...   Отсюда  и  "незаконные"
байты.                                    
                                          
                                          
                                          
 Я не знаю, может быть на фирменном SPECCY
тоже имеются  подобные  казусы, но все же,
если вы захотите использовать порт атрибу-
тов  с  такой  реализацией,  то  примите к
сведению,  что  из   него  могут  читаться
неполные атрибуты.                        
  Беру  на себя  смелость  утверждать, что
Кирилл Громов "забыл" одну  маленькую  де-
таль в своей схеме, а именно  в  его схеме
не учитывается сигнал микропроцессора IORQ
  Если подключать регистр порта  к шине по
двум событиям  (IORQ = 0 И POLE ATTR = 0),
то описанные выше ошибки  в  работе  порта
исчезнут !                                
                                          
  В  заключение   привожу   альтернативную
схему порта. 3а ее основу была взята схема
из SPECTROFON N15.    Если  наш  самарский
читатель захочет поставить порт атрибутов,
то прочитав данную заметку, может выбирать
из двух вариантов.   Я  думаю,  что  "наш"
вариант будет более корректным.           
 Претензии  по  работе "оригинала"  можете
отсылать в Москву,  автору этой "примочки"
К.Громову (если найдете его адрес !).     
                                          
Итак о схеме:                             
                                          
  Обозначения  входных  и  выходных  ножек
микросхем  даны  для  схемы  PENTAGON-128.
                                          
  Входные  сигналы  регистра  подключаются
к   соответствующим    выходам    регистра
атрибутов видеоконтроллера.  Выходы регис-
тра  подсоединяются  к  шине данных микро-
процессора через резисторы (обязательно!).
Такое  подключение  называется  "монтажное
ИЛИ", т.е  если  шина данных занята другим
устройством,  то  данный  регистр не будет
конфликтовать  с   другими  источниками, и
не будет  вносить  искажений  в информацию
на шине данных.                           
  Сигнал тактирования регистра подсоединя-
ется  к соответствующему тактовому   входу
регистра   атрибутов  видеоконтроллера,  а
сигнал POLE ATTR соединяется с IORQ  через
встречно-включенные диоды КДS22А, реализуя
тем самым подключение  регистра  только  в
момент чтения данных микропроцессором.    
 Сигнал  IORQ  лучше  взять  от микросхемы
DD5O (8-я ножка К5SSЛЕ1)  или   вообще  от
Z80 (20-я ножка).                         
 Сигнал POLE ATTR можно снять с мультипле-
ксоров формирования RGB-сигналов (м/с D47,
2-я ножка).                               
 Шина   данных   должна  быть  обязательно
"подтянута" к +5В  через резисторы 10 КОм,
но  это  наверняка  уже  имеется  в  вашем
компьютере.                               
                                          
                                          
                                          
                                          
             Смотрите схему:              
                                          
                                          
 ┌--┬--┬--┐         ┐         
 от ре- │ --3┤D0│RG│Q0├2--▓▓▓-- │ К шине  
 гистра │ --4┤D1│  │Q1├5--▒▒▒-- │ данных  
 атри-  │ --7┤D2│  │Q2├6--▓▓▓-- │(к 2,5,..
 бутов  ┤ --8┤D3│  │Q3├9--▒▒▒-- ├ DDЗ9)   
 (от 2, │ -13┤D4│  │Q4├12-▓▓▓-- │         
 5,..,19│ -14┤D5│  │Q5├15-▒▒▒-- │         
 DDЧO)  │ -17┤D6│  │Q6├16-▓▓▓-- │         
        │ -18┤D7│  │Q7├19-▒▒▒-- │         
        └    ├--┤  │  │         ┘         
от 11 D40 -11┤C │  │  │  R0-R7 (820 Ом)   
"C3"         ├--┤  │  ├10 - корпус        
             ├--┤  │  │                   
IORQ  ┼>┼┬--1┤OE│  │  ├20 - +5В           
от Z80   │   └--┴--┴--┘                   
                               
от 2  ┼>┼┴-▓▓▓---┐ R8 (1 КОм)             
D47,"C5",                              
POLE ATTR       -┴-                       
                                          
Микросхема К5SSUP23 или К5SSUP22          
Диоды (на схеме "┼>┼" ) КДS22А            
  Для схемы PENTAGON-128 удобно разместить
микросхему   поверх  м/с  DDЧO,  подключив
параллельно входы, тактовый вход и питание
к DDЧO, выходы 2,5,..19 подсоединяют через
резисторы  к соответствующим  выходам DDЗ9
(она располагается рядом - по диагонали)  
сигнал POLE ATTR "C5" удобно взять от  м/с
DDЧ7,расположенной на противоположной диа-
гонали от DDЧO.                           
  В итоге максимальная длина  соединитель-
ных проводов будет равна 3 см,  что  очень
актуально для помехозащищенности системы. 
  Так  что  делайте  схему,  наслаждайтесь
очередной  маленькой  победой  в  битве за
совместимость.                            
__________________________________________
                                          
                                          
                 * * * * * 



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

Вступление - Это не шутка, вы действительно читаете Cамарский Электронный Журнал!

Свиток - обзор новых программ: Space Crusade, Rebel Star 1-3.

Свиток - обзор текстового редактора: ZX IBM Editor v1.0

Обзор - обзор новых программ: Animation 2.0, Страна Мифов, Insult Megademo.

Обзор - анализ авторских программ распростронямых фирмой "Инфорком": STS v2.6, TASM 128 v3.0, FWORD FOR GENS v1.0, VIRUS 1-2, The Regeners.

Обо всём - плоды "мозгового штурма хаккера" на некоторые игры: Sea Action, НЛО Враг Неизвестен, Звёздное Наследие. Отрывок письма к группе STEP.

Ликбез - о правилах хорошего тона в программировании.

Железо - порт #FF в русских клонах Спектрума.


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

Похожие статьи:
Обзор новья - журналы: Voyager 0, Adventurer 7, Faultless 7-9, Spectrum Expert 1. Игрушки: Master of Orion, Monsterland.
Содержание
FANTASY - Роман Г.Гаррисона "Чума из космоса" (глава 1).
Новелла - Компьютерная новелла "The Neverending Story" часть 2
Обратная связь - контакты редакции.

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