ТЕХНИЧЕСКОЕ ПРИЛОЖЕНИЕ
ЭТОТ РАЗДЕЛ ВЕДЕТ НАУЧНО-ТЕХНИЧЕСКИЙ КООПЕРАТИВ "ПЛЮС", СПЕЦИАЛИЗИРУЮЩИЙСЯ В ВОПРОСАХ АППАРАТНОГО ОБЕСПЕЧЕНИЯ СИНКЛЕР-СОВМЕСТИМЫХ КОМПЬЮТЕРОВ И СХЕМОТЕХНИЧЕСКИХ РЕШЕНИЙ ПЕРИФЕРИЙНЫХ
УСТРОЙСТВ 137566, МОСКВА И-566, НТК "ПЛЮС"
ВНИМАНИЕ
В программе поддержки ZX-Модема обнаружены опечатки. Первым об их обнаружении сообщил товарищ Клюшник из Полтавы. Строка 46:
Напечатано: LET a(1) = FN(b$) Должно быть: LET a(1) = FN A(b$) Строка 202: Напечатано:
F940 01 32 8Е FC ЗЕ 02 32 A3 09 Должно быть:
F940 01 32 8Е FC ЗЕ 02 32 A3 0В
Строка 210:
Напечатано:
F980 0B F9 AF C9 CD AF F9 ЗЕ АВ Должно быть:
F980 0B F9 AF C9 CD AF F9 ЗЕ А8
Строка 238:
Напечатано:
FA60 0A 2В CD 18 1C F5 11 80 13 Должно быть:
FA60 0A 28 CD 18 1C F5 11 80 13
БУФЕРИЗАЦИЯ
Многие наши читатели являются убежденными поклонниками Синклер-совместимых компьютеров. Хорошо понимая и осознавая ограниченность этих машин, они также понимают, что в настоящее время нет никакой другой разумной альтернативы домашнему компьютерному творчеству. В нем они находят источник постоянного самосовершенствования и самоутверждения.
Совершенствуя себя, развиваясь и образовываясь, многие задаются вопросами совершенствования и своего компьютера, ведь как бы хорош он ни был, пытливый человек всегда найдет как сделать что-то лучше, иначе, не так как у всех. Одному из направлений возможного совершенствования Вашей машины и посвящена сегодняшняя статья "Технического приложения".
Фирменные и всевозможные варианты схем самодельных Спектрумов за редким исключением имеют общий существенный недостаток. Этот недостаток заключается в том, что микропроцессор Z80 - сердце Спектрума - не защищен никакими шинными формирователями, усилителями и другими буферными элементами. В фирменном компьютере это обусловлено малым количеством микросхем, подключенных к шинам микропроцессора (всего около 20), но и там любая фирменная периферия, подключаемая к краевому разъему платы, вынуждена на входе иметь буферные элементы.
Самодельные компьютеры и без того используют предельные по нагрузочной способности режимы микропроцессора, а если встает вопрос о дополнительной периферии, то тут уже без усилителей шин не обойтись.
Кстати, с перегрузкой шин микропроцессора в самодельных компьютерах очень часто связаны всевозможные неполадки. Иногда не удается запустить правильно собранный из исправных элементов компьютер из-за разброса параметров даже для исправных микросхем. Например, Вы вынимаете микропроцессор из панельки и втыкаете его в исправный компьютер, он оказывается в порядке, а на Вашей плате - "не тянет".
Иногда компьютер работает, но часто "сбоит", сбрасывается, зависает, то ли после прогрева, то ли от помех по сети, то при нажатии клавиш. (Кстати, если работа компьютера нарушается при нажатии клавиш, то по ним можно вычислить перегруженную шину и буферизировать хотя бы одну ее). В общем, весь этот "полтергейст" может быть связан с превышением предельного уровня нагрузки микропроцессора. Разработчики фирмы Синклер руководствовались, видимо, соображениями дешевизны, когда не заботились о периферии.
СПРАВКА ИНФОРКОМА
Разработчики фирмы "СИНКЛЕР" руководствовались соображениями эффективности технологии производства, ставя перед собой задачу всемерного повышения надежности главной платы в автоматизированном производстве. Поскольку надежность микросхем обеспечивалась автоматизированным входным контролем, надежность готовой платы зависела в основном от количества паяных и тем более непаяных контактных соединений. Были приняты все меры, чтобы свести их к минимуму. В этом случае ответственность за надежность работы машины совместно с периферией перекладывалась на плечи разработчика периферии.
Хотя конечно же такой подход дал возможность значительно снизить цены на готовую машину.
Интересно отметить, что в результате стоимость самой примитивной периферии стала сравнимой со стоимостью компьютера.
Например, стоимость нехитрого интерфейса джойстика на одной микросхеме составляла до 20% стоимости компьютера, но его делал не Синклер. Зато его компьютеры оставались самыми дешевыми в мире.
Пользователи же самодельных Спектрумов, особенно те, кто не слишком озабочен их серийным производством, могут себе позволить "обвесить" компьютер буферными элементами и затем вешать на него всю мыслимую периферию, схемы которой сыплются на головы пользователя, в том числе и стараниями специалистов из НТК "ПЛЮС".
Кстати сказать, когда много лет назад, в 1984 году разрабатывался один из первых вариантов самодельных Спектрумов, впоследствии окрещенный "Московским" вариантом, то в схему и плату компьютера были заложены буфера на К555АП6. Эти буфера можно по желанию устанавливать при работе с периферией или обходиться без них, заменив их перемычками. Они не окружают микропроцессор, а работают только на внешний разъем.
Этот подход мы и рассмотрим в нашей статье. Он подходит нам потому, что не потребует вмешательства в плату и схему компьютера и обращается лишь к внешнему разъему. Правда при этом внутренние шины компьютера не будут буферированы.
Для буферизации внутренних шин компьютера можно было бы посоветовать следующий способ. Удалить микропроцессор и заменить его на небольшую плату, на которой установлен как сам микропроцессор так и буферные элементы, например 4 штуки К555АП6. Если у Вас запаяна панелька под микропроцессором, то такой эксперимент провести будет не очень сложно. Правда есть одно проверенное правило - лучшее враг хорошего. Поэтому если Ваш компьютер работает вполне устойчиво, не сбоит и вообще не вызывает устойчивых подозрений своей работой, можно обойтись без "хирургического вмешательства", а для подключения разветвленной периферии воспользоваться внешней буферизацией.
Схемы подключения буферных элементов для конкретного микропроцессора достаточно стандартны и изобретать велосипед мы не стали, а взяли эти схемы из зарубежной печати. При этом мы исходили из доступной отечественной базы.
Шины микропроцессора делятся на входные, выходные и двунаправленные. Проще всего с входными шинами, такими как /WAIT5, /NMI, /INT, /RESET и т.д. Их вообще не нужно буферизировать.
Выходные сигналы, требующие усиления - это 16 линий шины адреса - A0-A15, а также сигналы управления, такие как /RD, /WR, /IORQ, /MREQ и т.п.
Немного сложнее обстоит дело с двунаправленной шиной данных D0-D7, потому что для этого требуется применение двунаправленных микросхем и управление переключением направления передачи данных.
На рис.1 и 2 приведены схемы буферов шины адреса и управления, выполненные на распространенных микросхемах ^89НР12. Здесь и далее обозначения сигналов со штрихом относятся к усиленным сигналам. Номиналы резисторов некритичны и могут быть в пределах 10-20 Ком.
Более сложная схема буфера шины данных приведена на рис. 3.
Правда, если заменить доступные микросхемы K589HP16 на более дефицитные, например, на восьмиразрядный буфер К555АП6, то схема будет по крайней мере выглядеть более простой, да и количество паек уменьшится. Сложность управления буферами объясняется стремлением достичь полной универсальности в их работе.
Здесь приняты меры к тому, чтобы не было конкуренции на шине данных "внутри" компьютера между "внутренними" источниками и буфером, включенным на ввод данных по сигналу "на запись" (-WR без инверсии) и вовремя не переведенным в высокоимпедансное состояние.
Для этого служит сборка 8И-НЕ, выполненная на К555ЛА2. Сборка "отлавливает" те моменты, когда внешние устройства (устройства находящиеся за буфером) не выбраны, т.е. находятся в третьем состоянии и отключает буфера от шины. Кроме того, этот "диспетчер шины данных" отключает /CS на буферах еще и тогда, когда от внешних устройств поступает байт FF (все единицы, ни одного нуля на шине данных), что вообще говоря неправильно, но в этом случае роль байта FF выполняет высокоимпедансный выход буфера и резисторы R1-R8. Кстати, эти резисторы можно не ставить потому, что они как правило уже есть в компьютере. Чтобы это проверить, нужно прочитать данные из незадействованного адреса внешнего порта, и если они равны FF(255), то это говорит о подтянутости шины данных к плюсу.
Далее по схеме на рис.3. Если перемычка Е запаяна, то буфер полностью универсален. При удалении перемычки буфер становится зависим от сигнала /IORQ. Т.е. буфер будет работать только с внешними устройствами, адресованными как порты ввода/вывода. От перемычек ABCD зависит то, какие сигналы используются в управлении буфером - непосредственно от микропроцессора (в таком случае желательно в качестве инверторов применить микросхемы из серии ТТЛШ для уменьшения нагрузки на микропроцессор) или взятые после буфера сигналов управления.
Если Вы используете буфер шины управления, то есть смысл использовать усиленные сигналы /RD и /WR. Опыт показывает, что возникающая при буферировании задержка около 30 Нс в данном случае несущественна.
Оставшиеся незадействованными два элемента 2 ИЛИ-НЕ можно использовать для выработки сигнала очень полезного при работе с периферией, связь с которой устанавливается по прерыванию. Этот сигнал INTA (аналогичен сигналу INTE микропроцессора КР580ИК80 (I8080)) и служит для подтверждения полученного прерывания. У микропроцессора Z80 нет такого сигнала, но сигналы /M1 и /IORQ свидетельствуют о выборке вектора прерывания с шины данных, поэтому их комбинация может служить в этом качестве.
На рис.4 представлена схема дешифратора адресов портов ввода-вывода. Это также необходимая вещь, если Вы присоедините к компьютеру периферию. Дело в том, что в фирменном и почти во всех самодельных компьютерах Спектрум очень грубо дешифрируется адресное пространстве ввода/вывода, а именно - все четные адреса (при
A0=0) задействованы под внутренний порт с адресом 254, который "занимается" бордюром экрана, магнитофоном, звуком и клавиатурой. Кроме того, по концепциям фирмы под периферию, выпускающуюся для Спектрума заняты адресные линии А5 и A6.
Некоторые пользователи жалуются на неработающую периферию, в том числе и сделанную по нашим схемам (НТК "ПЛЮС"). Часто причина этого в том, что в схеме уже стоит какой-либо грубо адресованный порт, и в результате возникают конфликты на шине, т.е. выбирается одновременно более одного источника.
Если Вы хотите избежать этих трудностей при Ваших экспериментах, используйте более точный дешифратор адресов. Дешифратор, изображенный на схеме 4, рассчитан на 8 периферийных устройств и при желании может быть расширен дальше. Следующий дешифратор К555ИД7 можно присоединить, используя в качестве сигналов выбора вывод 8 микросхемы DD3 и адресную линию А10 и т.п.
Адресные линии А5, A6 не используются, чтобы не конкурировать с наработанными периферийными устройствами с "кемпстоновской" адресацией.
На рис.5 приведена для примера буферная схема для шин адреса, данных и управления, выполненная на микросхемах КР589ВА86. Адресную шину можно буферировать полностью, добавив еще один элемент аналогично DD1.
Буфер в шине управления на DD3 тоже не нуждается в комментариях. Особенностью этой схемы является управление переключением направления буфера данных на DD2.
В связи с тем, что направление данных в микросхемах КР589ВА86 нельзя изменять во время их активного состояния, как это делалось в К589АП16, в схему введен RS триггер.
Как Вы могли заметить, данная схема буферизации не универсальна, она рассчитана на работу с портами ввода/вывода и управляется сигналами выбора /CS тех внешних устройств, которые подключены к вашему компьютеру.
Если таких устройств несколько, то для объединения их сигналов выбора /CS можно применить сборку, например 8И-НЕ, как показано на рисунке. Теперь при адресации к любому из внешних портов любой из сигналов /CS переведет буфер шины данных, выполненный на микросхеме DD2 из высокоимпедансного состояния в активное. Направление передачи данных через буфер в это время удерживается RS триггером, включенным сигналом /WR или /RD в одно из двух состояний. Заметим, что так как на сборку сигналов CS заводятся сигналы выбора только от устройств, подключенных после буфера, то при выборе какого-либо внутреннего порта буфер будет находиться в высокоимпедансном состоянии и таким образом не возникает конфликта на шине данных.
Приведенные здесь схемы вполне работоспособны, но мы ставили своей целью осветить общие подходы к буферизации шин микропроцессора. Пользователи Спектрума могут использовать эти подходы при разработке собственных схем внешних устройств. Применяемые Вами в качестве буферных элементов микросхемы могут быть очень разнообразными, в зависимости от возможности их приобретения, потребляемого тока, размеров и т.д.
Кроме упомянутых в статье микросхем, в качестве буферов часто применяются K155ЛЖ, 2, 3, 4, 5 - буфера без выводов разрешения; К155ЛН6, К155ЛП7, ЛП8, ЛП10 -буфера с выводом разрешения; К531АПЗ, AП4, К155ИП6, ИП7, К555АП5, АП6 -двунаправленные буфера с выводами разрешения и т.д. и т.п.
R1 - R8
A0'-A15'
23
DD1
12
R9-R16
24
I
23
DD2
DD1,2 - К589ИР12 R1-16- 10 kOM
Рис.1. Буфер шины адреса A0 - A15
В заключение рассмотрим одну важную особенность фирменных компьютеров SPECTRUM, которая в последние годы стала иногда использоваться разработчиками фирменных программ для Спектрума, что привело к проявлению неполной совместимости самодельных компьютеров с оригиналом. Речь идет об устройстве шины данных компьютера. Мы уже обсудили тот факт, что при чтении данных из несуществующего порта (или из неиспользуемого адреса порта), мы получаем данные FFH (или 255D). Это связано с тем, что тогда, когда не выбрано ни одно устройство, подключенное к шине данных, то все они находятся в высокоимпедансном состоянии. Но шина данных через резисторы 10-20 K подключена к плюсу источника питания. Поэтому все разряды шины данных принимают состояние логической единицы, что в результате дает данные FF(255).
Т.е. 10 PRINT IN 1 20 GO TO 10
даст результат:
255
255
255
SCROLL?
Однако если эту программку запустить на фирменном Спектруме сразу же после включения или сброса, то мы увидим, что среди результата 255 иногда будет "проскальзывать" результат 56.
Оказалось, что это число зависит от атрибутов экрана. Например, если задать цвет фона (PAPER) черный, а цвет символов (INK) - белый, то это число, иногда считываемое в программе, будет равно 7, т. е. это именно байт атрибутов, считываемый из области 768 байтов атрибутов, которая расположена после области 6144 байтов графической информации экрана (Мы исходим из того, что карта памяти компьютера Вам хорошо знакома, хотя бы по книге ИНФОРКОМА "Большие Возможности Вашего СПЕКТРУМа").
Остается выяснить, каким образом, считывая данные из порта с адресом 1 (этот адрес взят для примера, можно взять любой адрес порта, не используемый в данной конфигурации), мы получаем в результате данные из области атрибутов экрана.
Для этого нужно рассмотреть устройство внутренней шины данных фирменного компьютера Спектрум. У фирменного Спектрума непосредственно к шине данных подключены: микропроцессор, ПЗУ, поле памяти 16К (нижнее), дополнительное поле памяти 32К (верхнее) и внутренние регистры микросхемы ULA - программируемой логической матрицы, выполняющей в Спектруме функции контроллера дисплея, генератора тактовой частоты процессора и порта ввода/вывода с адресом 254 (а на самом деле с любым четным адресом), для ввода и вывода данных магнитофона, вывода звука, ввода данных от клавиатуры, вывода цвета бордюра.
Причем ULA работает автономно совместно с областью памяти 16К, в которой как раз и выделено место для памяти экрана 6912 байт (растровая графика плюс атрибуты). Периодически, в соответствии с частотой кадров и строк телевизионной развертки, ULA вырабатывает адреса области экрана и считывает 32 раза в течение каждой строки по два байта - один байт из области растровой графики и один из области атрибутов экрана, так как микропроцессор также имеет доступ к этой области памяти, то, если не принять специальные меры, может возникнуть конфликт на шине данных.
Чтобы этого не произошло, в фирменном компьютере приняты следующие меры. При одновременном обращении к полю памяти 16К со стороны ULA и микропроцессора, ULA останавливает тактовую последовательность, поступающую к микропроцессору Z80 и, таким образом, Z80 "ждет" возможности работать дальше, т.е. ULA имеет приоритет на работу с этими микросхемами памяти. В то же время, независимо от работы ULA с памятью экрана, микропроцессор может продолжать работать с дополнительной памятью 32К, с ПЗУ и внешними портами.
Чтобы при этом не возникал конфликт на шине данных, шина данных разделена. ULA и поле памяти 16К отделены от остальных пользователей шины данных резисторами 410 Ом.
При этом ULA и микропроцессор по отдельности пользуются каждый своим "куском" шины данных, не слишком мешая друг другу. Теперь вернемся к работе нашей программы.
Когда микропроцессор считывает данные из порта 1, то состояние шины данных на участке, "принадлежащем" микропроцессору, определяется резисторами 8.2 Ком, которыми линии подтянуты к плюсу источника питания. В то же время, к микропроцессору через резисторы 470К поступают данные, считываемые ULA из памяти экрана при его регенерации и при совпадении моментов считывания эти данные воспринимаются микропроцессором, как данные из порта 1. Т.е. в фирменном компьютере при считывании с внешнего порта с неиспользуемым адресом можно получить данные из области атрибутов экрана.
Это обстоятельство используется в некоторых фирменных программах возможно для более точной синхронизации событии программы и изображения на экране, во всяком случае, то обстоятельство, что в самодельном компьютере шина данных полностью развязана и на ней всегда присутствует лог."1" по всем линиям при невыбранных устройствах, является причиной несовместимости некоторых программ.
Например, здесь нужно упомянуть третий выпуск ZX-РЕВЮ (раздел "ФОРУМ"), в котором наш читатель рекомендовал как сделать работоспособной программу ARKANOID-1. В самодельных компьютерах с раздельным полем памяти для достижения подобного результата можно было бы еще посоветовать соединить входы и выходы микросхем памяти поля 16K с помощью резисторов 470 Ом.
Ввиду большого разнообразия разработок самодельных компьютеров трудно дать рекомендации всем пользователям Спектрума, но мы думаем, что своими публикациями мы хотя бы чуть-чуть поможем Вам разобраться в некоторых тонкостях работы Вашего компьютера.
R1 - R8
/MREQ |
3 |
/IORQ |
5 |
/WR |
7 |
/RD |
9 |
/HALT |
16 |
/BUSAK |
18 |
/M1 |
20 |
RFSH |
22 |
D
+5V
13
11
/MREQ' /IORQ'
/WR'
/RD'
/HALT'
/BUSAK'
14
DD1 - К589ИР12 R1-R8 - 10 кОм
12
Рис.2. Буфер шины управления.
i i
d0' d1' d2' d3' d4' d5' d6' d7'
do d1 d2 d3 d4 d5 d6
d7 «
1 14 5
DD4
П10.
DD1,2 - К589АП16 DD3 - К555ЛР11 DD4 - К555ЛЕ1
R1-R17- 10 kOM DD5 - К555ЛА2
Рис.3. Буфер шины данных.
- /cs0
- /cs1 _/cs2
a7' -a8' -a9' . a10' -a11' -a12' -a13' -a15' -
a0' -a1' -a2' -a3' -a4' -a14' -
- /cs3 -/cs4 -/cs5 _/cs6 _/cs7
DD4
DD1,3 - К555ЛА2 DD2 - К555ЛИ1 DD4 - К555ИД7
+5V у
Рис. 4 Дешифратор адресного пространства ввода/вывода
AO A1 A2 A3 A4 A5 A6 A7
T
OE
AO' A1' A2' A3' A4' A5' A6' A7'
10
^2O
DO' D1' D2' D3' D4' D5' D6' D7'
DD4
Рис.5. Универсальный буфер
DD1,DD3 - KP58OBA86 DD4,DD5 - К555ЛА3