Из журнала ZX Format #5,
Санкт-Петербург, 12.12.1996



        LPT COVOX и не только...

(C) Ржавельщик.
=========================================

Вместо предисловия.

   Ну что ж.  Приветствую  тех, кто решил
заглянуть  в рубрику со столь малообещаю-
щим  названием. И спешу обрадовать их из-
вестием,  что,  т.к.  данное устройство в
значительной  степени утратило свою акту-
альность  (в  связи с появлением "General
Sound")  речь здесь пойдет, в основном, о
том, что не только.

   Но для начала о том устройстве, назва-
ние которого вынесено в заглавие. LPT CO-
VOX   представляет   из  себя  простейший
одноканальный 8-и битный ЦАП. И может ис-
пользоваться, например, для прослушивания
многоголосной музыки, записаной по техно-
логии  ACE'а (То, что дается в нашем при-
ложении  -  просто  схема с прилагающимся
тестиком  рабочести  Covoxa,  это даже не
жалкое  подобие  музыки.  Под полноценную
демку  не  хватило  места  :( ; также это
устройство  поддерживают  некоторые новые
музыкальные редакторы (в частности SAMPLE
TRACKER).  Вот  так.  Но, как Вы заметили
(или  еще заметите), чтобы подключить эту
примитивную конструкцию к Вашей тачке не-
обходимо,  чтобы  она  (тачка) имела порт
принтера  типа Centronix. И, так так Pen-
tagon и Scorp, имеющие готовый порт прин-
тера,не являются единственными распостра-
ненными  моделями  Speccy, мы решили, что
нелишним  будет  показать, что собственно
делать,  если Ваша машина не имеет такого
архитектурного  излишества. Однако взгля-
нуть  на нижеследущую информацию не поме-
шает всем, независимо от типа их машины.

Засим  заканчиваю этот несколько затянув-
шийся  эпиграф и перехожу к основной час-
ти. Итак:

    Принципы функционирования портов.

на примере построения порта для LPTcovox.

              -------------
Да, самые нетерпеливые подключатели могут
потрудиться быстро пролистать до схемки.
              -------------

   Вы задумывались когда-нибудь, что кро-
ется  за  словом "порт"? (либо варианты :
порт  #FE, порт #7FFD итд) А под этим не-
замысловатым  словом  скрывается совокуп-
ность технических  средств, которые обес-
печивают попадание на шину данных компью-
тера  данных со входа порта (при выполне-
нии процессором команд  чтения из порта),
либо  наоборот  -  попадание информации с
шины  данных  компа  на выходы порта (ес-
тественно, при выполнении процессором ко-
манды из группы "запись в порт") Попросту
говоря - при выполнении процессором соот-
ветствующих  команд  на шине данных уста-
навливаются логические уровни, как на со-
ответствующих ножках микросхемы, работаю-
щих  в  качестве выводов порта (идущих на
контакты  разъема этого самого порта), ну
и  (или)  наоборот - на этих ножках уста-
навливаются  уровни, как на соответствую-
щих линиях шины данных.
   Ну  вот, надеюсь вопрос о том, что де-
лает  порт, разъяснен полностью. Осталась
сущая мелочь - узнать, а как он это дела-
ет?  Чтобы уяснение этого процесса прошло
более  легко,  возьмите где нибудь книжку
("пошлите служанку в погреб..."), в кото-
рой   имеется  картинка  с  символическим
изображением  Z80  и названиями его выво-
дов.  Взяли?  - хорошо.(хотя можно было и
не  брать)  Сейчас  Вы постигните великое
таинство  общения  CPU  с его окружением.
Обратите внимание на три сигнала: RD,WR и
IORQ. Сигналы инверсные, т.е. их активный
уровень  - низкий(лог.0). Когда в системе
происходит  чтение  (безразлично откуда -
из  порта или из памяти) на выводе (пине)
RD  устанавливается активный уровеь, т.е.
лог.  0. Когда производится запись (как в
память,  так  и  в порт) активный уровень
устанавливается на пине WR. Признаком то-
го,что  процессор  пытается  прочитать из
порта, либо вывести в порт служит появле-
ние  активного уровня на пине IORQ. Таким
образом, следя за этими сигналами (собрав
примитивнейшую логическую схемку), мы мо-
жем  определить,что настало время пробуж-
дения  для  железа  порта. Однако, помимо
того,  что мы определяем факт обращения к
портам,  стоило бы еще и узнать, к какому
конкретно  порту  взывает  процессор. Для
решения  этой задчи используется шина ад-
реса.  А вот здесь то и возникает главный
вопрос  платформы "Spectrum-клон" - "спо-
соб  дешифрации  адреса". Дело в том, что
адресное пространство портов у Z80, в от-
личие  от  его  предшественников и жалких
аналогов  (типа  i8080  итп), по размерам
равно  адресному  пространству  памяти  -
т.е.  64Кбайта,  а  это значит, что адрес
порта выводится не на половинку, а на всю
шину адреса. Как вам известно, у Z80 есть
два  способа  задания адреса порта: через
регистровую  пару  BC,  или  через  число
(OUT(#dd),a).  При втором способе число в
скобках  (опернд  команды)  выводится  на
"младший байт" шины адреса, т.е. на линии
А7-А0, а на "старший байт" - линии А15-А8
выводится  содержимое  регистра  А. (т.е.
такой  способ задания адресов без проблем
годится  для  чтения, но при записи могут
возникнуть некотрые коллизии)
Для тех, кто еще не изучал предметов типа
ЦиМПУ,  поясняю: когда процессор начинает
выполнять  команду  чтения или записи, то
помимо  того, что сигналы RD,WR,IORQ,MREQ
приходят  в соответствующие состояния, на
шине  адреса устанавливается тот адрес,по
которому, собственно, и производится опе-
рация.  Что  значит  "устанавливается ад-
рес"?  А  вот что: расположите (мысленно)
линии  адреса  в порядке убывания номера:
A15,A14,...,A0.  Теперь  представьте, что
каждая  линия  -  это  разряд (бит)числа,
представленного  в двоичной системе счис-
ления.  Когда на шине установлено какое -
либо  число,  это  значит,  что  на соот-
ветствующих  линиях-"битах"  установились
логические  уровни 0 или 1, образуя таким
образом это число в двоичном виде.
теперь  все, внимание! состояние шины ад-
реса   при  выполнении  команды  OUT(C),A
(BC=#7FFD):

|A 15 = 0|Как видно,всего два бита не ну-
|A 14 = 1|левые. Теоретически  надо  было
|A 13 = 1|бы  построить схемку на элемен-
|A 12 = 1|тах  AND  и OR, которая, допус-
|A 11 = 1|тим,выдавала бы нам единицу,при
|A 10 = 1|условии именно такого состояния
|A 09 = 1|шины  адреса.  Но такое решение
|A 08 = 1|для  простого домашнего компью-
|A 07 = 1|тера   несколько  избыточно.  В
|A 06 = 1|принципе можно проверить только
|A 05 = 1|две адресные  линии - A15 и А1.
|A 04 = 1|На такую дешифрацию адреса пой-
|A 03 = 1|дет всего один лог. элемент ти-
|A 02 = 1|па  ИЛИ-НЕ, однако эта дешифра-
|A 01 = 0|ция будет не полной,  т.е. порт
|A 00 = 1|будет  выбираться не только при
обращении   по  адресу  #7FFD,  но  и  по
16384-м  другим адресам, которые тоже бу-
дут иметь А15 и А1 равными 0.Но некоторым
и это решение показалось избыточным, и по
этому в некоторых Spectrum-клонах для де-
шифрации   адреса   этого  порта  юзается
только A1 (32768 адресов пропадает).
Я  полагаю,  что  из всего вышесказанного
суть  процесса  дешифрации  адреса ясна -
для  осуществления оной требуется подклю-
чить  к  шине адреса лог. схемку, которая
могла  бы  давать на выходе активный уро-
вень  при  определенном  состоянии  линий
этой шины.
   Ну  вот,  теперь  мы  можем знать, что
требуется задействовать порт, и можем оп-
ределить  - какой. Значит, что пора пере-
ходить собственно к  выполнению операции.
А для осуществления операции чтения ( или
записи)  потребуется  ИМС, которая сможет
сыграть  роль  своеобразной  форточки для
данных,  открывающийся  при  обращении  к
порту и закрывающийся при отсутствии оно-
го.На эту роль более всего всего подходит
микросхемка  из семейства регистров памя-
ти.  Тут  есть  несколько тонкостей. Тон-
кость  номер  1:  Для пущей надежности не
мешало бы скомпоновать сигналы так, чтобы
в(из)  порт  не  летели  ложные  значения
(например  - чтобы при новом обращении на
выходах  вообще не мелькали значения ста-
рые).  Тонкость  номер следующий: если Вы
делаете  порт  чтения,  Sinclair-joystick
например, то не  помешает удостовериться,
что выбранная Вами экзотическая импортная
мелкосхемка  умеет переводить свои выходы
в Z-состояние (а признаком сей способнос-
ти  является наличие на условно-графичес-
ком  изображении  в справочнике ромбика в
поле  выходных  сигналов), и если нет, то
выбрать  другую, либо придумать еще более
экзотичный  способ  отключения ее от шины
данных, т.к. если на шине данных постоян-
но  висит  нечто,  забивающее  все данные
своими,  то  это  может привести к весьма
печальным  последствиям. ("...сколько раз
повторять!  не  'дал  дуба', а 'летальный
исход'...)
   Итак,  резюме: для того, чтобы сделать
порт нужно повесить на системную шину ло-
гику, опознающую обращение к порту и реа-
гирующую на конкретный адрес,a к этой ло-
гике  и  снова шине прицепить управляемую
сигналами логики "форточку".

Ну вот, а теперь собственно то, ради чего
затевалась  вся  эта болтовня. Паралелный
8-и битный порт вывода.
Tеоретически это - "порт #FB", но практи-
чески, как Вы понимаете,он отреагирует на
обращение по любому адресу, в котором 2-й
бит равен 0 (т.е. 32768 адресов) Однако в
данном  случае это не приведет к страшным
последствиям,  т.к.  это  всего лишь порт
вывода, работающий на звук.(разьве только
иногда в динамиках будет загадочно погро-
мыхивать :). Теперь несколько слов о том,
как эта штуковина работает. При появлении
на пине C положительного перепада сигнала
(не единицы, а именно перепада,т.е + ) на
выходы (DO) проходят входные   сигналы  и
фиксируются там, пока  не поступит  новой
"ступеньки",  которая  загонит на пины DO
новые  значения  с  шины данных. Сигнал H
переходит в 1-чку когда IORQ+WR+A2=0 (под
"+" имеется ввиду OR), т.е. когда процес-
сор пытается пихнуть данные в порт, адрес
которого хоть отдаленно напоминает #xxFB.
При желании можно состряпать схему дешиф-
рации адреса,которая будет понимать и #FB
(Pentagon)  и #DD (Scorp) (при особом же-
лании - на той же ЛЕ4).
ИМС  можно брать любых TTL серий; и обра-
тите  внимание на один момент - приведен-
ная  схема  не является схемой интерфейса
Centronix. Для работы с принтером необхо-
димо еще два сигнала - strob и busy. (для
чего  они надобны - смотрите спецификацию
на Centronix)
Ну вот, собственно, и все.
   P.S.  Уважаемые читатели, нам бы очень
хотелось узнать Ваше мнение по поводу од-
ной бродящей в недрах редакции мысли, (не
думайте, что она там одинока, мысли здесь
носятся  жуткими  стадами,  сметая все на
своем  пути), а именно: не сделать ли нам
рубрику  типа  "железо  для чайников" (не
обижайтесь,  это словцо уже давно вошло в
обиход), в которой рассказывать как рабо-
тает  компьютер и всяко разное другое же-
лезо.  И  если  сделать, то о чем еще там
писать? Будем ждать Ваших писем.
_________________________________________