|
ZX Hard
#00
31 августа 1998 |
|
Тонкости работы с IORQGE/ - что это за сигнал и с чем его вообще едят.

┌──────────────────────────────────────┐
│ Тонкости работы с IORQGE/ │
└──────────────────────────────────────┘
(c)VTS'98
В ZF'8 Nemo в описании нового KAY'а упо-
мянул о том, что при формировании IORQGE
нужно использовать только адрес порта.
Т.к. с этим я столкнулся лично, то решил
рассказать поподробней, т.к. в основном
говорилось (и делалось!), что нужно фор-
мировать этот сигнал по факту выбора
порта.
Для начала я немного отступлю и расскажу
для тех, кто не в курсе, что это за сиг-
нал и с чем его вообще едят.
Сей сигналец фигурирует еще в старом
добром Sinclair ZX-Spectrum...
Прежде всего отмечу, что он имеет весьма
отдаленное от порта #FF назначение (это
лишь частный случай в Скорпе). Кроме то-
го, он является одним из ключевых момен-
тов в архитектуре ZX-Spectrum, т.к. дает
возможность использовать неполную дешиф-
рацию портов ввода-вывода, заложенную
еще Клайвом Синклером и столь охаянную в
ZX-ревю не совсем компетентными в этом
вопросе людьми (см., к примеру, хвалеб-
ные статьи Скорпиону ('куцее #FD', 'вы-
кинуть пару ЛЛ'ок'...)). Все проблемы
возникли от кодеров, а железо всегда
должно быть максимально простым (в рам-
ках мануала/ спецификации/ стандарта). К
примеру, в KAY'е все адресное
пространство занято портами платы безо
всяких портов #FF. А сигнал IORQGE поз-
воляет сделать настолько полную дешифра-
цию, насколько необходимо в каждом
конкретном случае.
Кроме этого, в фирменном ZX и KAY версии
ниже 1.5 точка перехвата была реализова-
на на резисторе, что позволяло работать
с портами платы внешним устройствам, хо-
тя это практически бессмысленно. Тем бо-
лее в новом KAY'е такой возможности уже
нет.
Работать с IORQGE/ необходимо с помощью
элемента с ОЭ (общий эмиттер) либо его
эмуляции - трехстабильной логики или ди-
ода (т.е. активное состояние - запрет -
прижать линию к +5v, иначе - свободна).
┌──┐
│/────+5v──────┤|>├──┐
──┤\>─┐ ───┤e │ │ ───|>|──┐
запрет │ запрет/ └──┘ │ запрет │
│ ЛП8 │ │
IOGE/──┴────────────────┴──────────┘
Сделать IORQGE/ тоже просто. Если вы со-
бираетесь иметь только один такой сигнал
(и в будущем прикупить комп с шиной), то
лучше сделать его на резисторе или дио-
де. В KAY 1.5 он реализован на цепочке
элементов ЛЛ1 (на каждый слот).
IORQ/ IORQGE/
│ │
IORQ/_Z80──┴─═══──┴───IORQ/_motherboard
470
или так:
IORQ/ IORQGE/
│ │
IORQ/_Z80──┴─|>|──o───IORQ/_motherboard
│
┌───═══─┘ 4k7
─┴─
(последний более надежен, особенно когда
на IORQ процессора сидело очень много
155 или 531 серии, да и сам IORQGE не
перегружается. Однако такую схему нельзя
использовать цепочкой (0.7v на диод)).
Ну а теперь собственно о том, из-за чего
весь этот сыр-бор. То бишь где вообще
его (IORQGE/) брать ? И чего это тут все
всполошились ?
Объясню. Сижу я значит и отлавливаю не-
существующий глюк в какой-то железяке на
'самолете'. И никак его не споймаю ;-)
И вдруг меня осеняет.
А проблема в том, что порт у меня был
#F8 hex, %1111 1000 bin и влетал я пря-
мехонько в любимый ;) #xxFD hex... А вы-
дал все это дело BORDER...
Т.е. когдa я вырабатывал IOGE/ 'как вез-
де говориться' : IORQ/, WR/, ADR, он та-
ки не поспевал за шустрым IORQ, который
успевал протащить 'иголку' на плату и по
фронту (можно и спаду) записать данные в
такие же шустрые 1533 регистры.
Еще больший ужас я ощутил, когда увидел
(в мануале по Z80), что перед IORQ появ-
ляется только адрес. Но потом подумал
(нет бы сразу ;) ), что здесь нет ничего
страшного - подумаешь, блокируем порты,
когда обращаемся в память ;).
Хотя тут еще может понадобиться иденти-
фицировать WR/RD. А сделать это можно
только с приходом IORQ...
При блокировке портов и на запись, и на
чтение, необходимо использовать при фор-
мировании IORQ только адрес.
При блокировке только записи прийдется
извернуться. А именно: формируем IORQGE/
по приходу адреса. Затем дожидаемся
WR/RD и уже заблокированный IORQ. Если
окажется, что происходит чтение, IORQGE/
снимаем. В результате получится задержка
IORQ для платы на десяток наносекунд,
что тоже нестрашно, т.к. он ооочень
длиннюююющий (нетурбированный).
При блокировки только чтения делаем ана-
логично, но снимаем IORQGE по приходу WR
Тут, однако, можно возразить: ведь чте-
ние процессор будет ждать еще аж 2 так-
та, чего ж зря огород городить ? Может
оно и так, но конфликт на шине данных -
штука не столь желательная. Особенно ес-
ли учесть всякие левые компы и возраста-
ние задержек при буферизации шины...
(т.е. увеличение длительности конфликта)
21.08.98 22:53msk is-dos
Другие статьи номера:
Похожие статьи:
Мир звуков Спектрума - глава 4.1: Программирование звуковых эффектов - Тон, Шум, Комплексы эффектов.
В этот день... 13 ноября