╔──────────────────────────────────────────────────────────────╗
│ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒▒▒░▒▒▒▒▒▒░▒▒▒▒▒░│
│▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░▒▒░ ▒▒░ ▒▒│
│▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒▒▒▒░ ▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒░▒▒░▒▒▒▒▒░ ▒▒░ ▒▒│
│▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒░│
│▒▒░ ▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░z80│
╚──────────────────────────────────────────────────────────────╝
[ По письмам читателей ]
(C) WLODEK BLACK
КР580ВВ55А - ПРОГРАММИРУЕМЫЙ АДАПТЕР
ПАРАЛЛЕЛЬНОГО ВВОДА/ВЫВОДА
┌─────────┐ Здравствуйте, друзья!
┌┤ ВВ55 ├┐ И вновь мы с вами встре-
ПА3 └┤1 40├┘ ПА4 чаемся на полях ваших
┌┤ ├┐ посланий! Эпидемия мыши-
ПА2 └┤2 39├┘ ПА5 ного бешенства, :-)
┌┤ ├┐ прокатившаяся по добро-
ПА1 └┤3 38├┘ ПА6 му десятку "Профяков",
┌┤ ├┐ плюс интерес к задачам
ПА0 └┤4 37├┘ ПА7 подключения различной
┌┤ ├┐ периферии (принтеров и
/RD └┤5 36├┘ /WR др.) и управления ею вы-
┌┤ ├┐ звали к жизни тему на-
/CS └┤6 35├┘ Сброс(+) шей сегодняшней беседы.
┌┤ ├┐ К тому же среди ваших
Земля └┤7 34├┘ D0 заявок попадались конк-
┌┤ ├┐ ретные просьбы - "расс-
A0 └┤8 33├┘ D1 кажите о ВВ55".
┌┤ ├┐
A1 └┤9 32├┘ D2 Микросхема КР580ВВ55А
┌┤ ├┐ как логическое устройст-
ПС7 └┤10 31├┘ D3 во представляет програм-
┌┤ ├┐ мируемый адаптер парал-
ПС6 └┤11 30├┘ D4 лельного ввода-вывода и
┌┤ ├┐ содержит 3 8-разрядных
ПС5 └┤12 29├┘ D5 порта, способных рабо-
┌┤ ├┐ тать как на ввод, так и
ПС4 └┤13 28├┘ D6 на вывод. Как электрон-
┌┤ ├┐ ный компонент ВВ55 - ми-
ПС0 └┤14 27├┘ D7 кросхема n-МОП типа; на-
┌┤ ├┐ пряжение питания +5В;
ПС1 └┤15 26├┘ +5В входные цепи выполнены
┌┤ ├┐ на МОП-структурах с изо-
ПС2 └┤16 25├┘ ПВ7 лированным затвором; вы-
┌┤ ├┐ ходные цепи способны пе-
ПС3 └┤17 24├┘ ПВ6 реходить в 3-е состоя-
┌┤ ├┐ ние. Входные и выходные
ПВ0 └┤18 23├┘ ПВ5 уровни согласованы с
┌┤ ├┐ TTL. Входы микросхемы
ПВ1 └┤19 22├┘ ПВ4 чувствительны к статиче-
┌┤ ├┐ скому электричеству и
ПВ2 └┤20 21├┘ ПВ3 потенциальным перегруз-
└─────────┘ кам за пределами 0..+5В,
поэтому не следует оставлять "свободно висящими" входы, к кото-
рым может что-либо подключаться или отключаться (например, кемп-
стон-джойстик) - нужно соединить такие входы с землей или +5В
через резисторы, сопротивление которых мало критично (до нескол-
ьких десятков килоом). Еще лучше подсоединять периферию не на-
прямую к контактам ВВ55, а через буферные элементы TTL-типа,как
это сделано, например, в принтерах - через триггеры Шмитта К155
ТЛ2, например. Если же в Вашем компьютере ВВ55 напрямую "общает-
ся" с внешним миром - соблюдайте предельную осторожность при
подключении и отключении устройств, связанных с ней; не важно,
джойстик это или целый принтер - отключите питание компьютера и
другого устройства, выньте вилки из розеток; избавьтесь от собс-
твенного статического электричества хотя бы прикосновением к ме-
таллическому корпусу гнезда магнитофонного входа или к другой
детали, соединенной с общим проводом компьютера, и только потом
берите разъем соединительного кабеля устройства и втыкайте его
в нужное место! В то же время микросхема гораздо менее чувстви-
тельна к коротким замыканиям выходов на 0 или +5 вольт, но подо-
бные перегрузки также не стоит позволять.
Программное управление ВВ55
В программном отношении ВВ55 представляет 4 адресуемых порта,
в стандартной конфигурации "Спектрума" (PROFI, Дельта-С, "Пента-
гон-48" и др.) имеющих адреса #1F, #3F, #5F и #7F. Адреса этих
портов определяются разрядами A5 и A6 шины адреса, к которым по-
дключены входы A0 и A1 микросхемы, с помощью которых выбирается
тот или иной внутренний регистр ВВ55, и разрядом A7 шины адреса,
который должен быть = 0 для обеспечения выборки ВВ55. Вот соот-
ветствие адресов внутренним регистрам адаптера:
#1F - порт A
#3F - порт B
#5F - порт C
#7F - регистр управления.
ВВ55 может работать в трех режимах, различающихся назначением
отдельных разрядов портов и портов в целом. В режимах 1 и 2 ада-
птер способен в ограниченных пределах самостоятельно поддержи-
вать протоколы передачи/приема данных, например, путем выставле-
ния специальных флагов или сигналов запросов на прерывания, под
которые выделяются соответствующие линии некоторых портов. Для
нас эти режимы особого интереса не представляют, так как в "Спе-
ктруме" их реализация затруднена да и вообще мало полезна. В ре-
жиме 0 адаптер работает как 3 параллельных порта ввода-вывода,
в которые можно просто записывать данные или считывать оттуда.
В режиме 0 порты A и B программируются либо на ввод, либо на вы-
вод как 8-разрядные регистры, а порт C делится на два 4-битных
регистра, каждый из которых может либо принимать, либо передава-
ть данные. Программирование адаптера заключается в занесении в
управляющий регистр 8-битного кода, назначение отдельных разря-
дов которого следующее:
┌─────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
│ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 │
└─────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
│ │Режим канала A │Канал A│КаналC2│Режим │Канал B│КаналC1│
│ │и канала C2 │ │ │каналов│ │ │
│ 1 │ 0 0 │1 - IN │1 - IN │B и C1 │1 - IN │1 - IN │
│ │ (режим 0) │0 - OUT│0 - OUT│ 0 │0 - OUT│0 - OUT│
└─────┴───────────────┴───────┴───────┴───────┴───────┴───────┘
Канал C1 - разряды 0...3 порта C;
канал C2 - разряды 4...7 порта C.
В типовом варианте использования управляющий код равен #98:
%10011000, а назначение портов таково: порт A - кемпстон джой-
стик (ввод); порт B - данные для принтера (вывод); канал C1 -
бит 0 - сигнал /STROBE для принтера (вывод); канал C2 - бит 7 -
сигнал BUSY (занято) от принтера (ввод).
После сброса все три порта работают на ввод в режиме 0, поэтому
использование кемпстон-джойстика возможно без специального прог-
раммирования адаптера. Обратите внимание: сигнал сброса подает-
ся уровнем лог.1!
В старых версиях микросхемы, носивших название К580ИК55, чтение
из порта, запрограммированного на вывод, давало всегда #FF. В
современном варианте ВВ55 результатом считывания будет то, что
было записано в регистр адаптера. Это следует иметь в виду при
ознакомлении со старой литературой, например, с описанием компь-
ютера "Радио-86РК".
Совсем недавно всю московскую сеть облетела "эпидемия мышиного
бешенства" - глюки программ ZXZIP/ZXUNZIP на компьютерах PROFI,
когда "обнаруживался" несуществующий интерфейс Kempston-mouse,и
по экрану начинал хаотично перемещаться указатель мыши, мешая
работать с программой от клавиатуры. Несмотря на то, что порты
мышиного интерфейса отличаются по адресам от ВВ55, участие пос-
ледней в "деле", видимо, имеет место, так как по линиям A7 и A5
ВВ55 явно выбирается, имитируя какое-то наличие интерфейса мыши.
Я предложил пользователям PROFI попробовать такую программку:
10 OUT 127,128: OUT 31,255: OUT 63,255: OUT 95,255
20 RANDOMIZE USR 15619:REM:RUN "ZXZIP"
Нетрудно установить, что после такой "процедуры" чтение из пор-
тов каналов A,B и C будет давать #FF, то есть может показаться,
что портов этих и нету вовсе. Итоги опроса профистов показали,
что:
на PROFI 1-х и 3-х версий ZIP начинает работать нормально, если
ZIP не-профиевский (не "ZIPp");
UNZIP-ы "вылечиваются" вообще все;
на PROFI 5-х версий глюков и так нет.
Но у меня самого не PROFI,поэтому более тщательное исследование
я не смог провести.
А напоследок привожу текст драйвера печати для ZX-Word-а:
ORG 23296 ; так надо для ZX-Word-а
NOP ; так нужно для ZX-Word-а
JR INIT
;-
NOP
START DI
LD E,A
CHROUT LD A,(23624) ; Border
CPL
RRCA
RRCA
RRCA
AND 7
OUT (254),A ; визуализация процесса вывода данных
CHROU1 IN A,(#5F)
RLCA ; свободен?
JR NC,READY
OFFLIN CALL BREAK
JR CHROU1
READY LD A,E
OUT (#3F),A ; вывод байта данных в канал B
XOR A
OUT (#5F),A ; /Strobe
READY1 IN A,(#5F)
RLCA ; Busy
JR C,RECEIV
CALL BREAK
JR READY1
RECEIV LD A,#0F ; снимаем /Strobe
OUT (#5F),A
XOR A
OUT (#3F),A
LD A,(23624)
RRCA
RRCA
RRCA
AND 7 ; одновременно сбрасываем флаг C, что нужно для
ZX-Word-а
OUT (254),A
RET
;-
BREAK CALL #1F54 ; системный Break
RET C
POP AF
CALL RECEIV
SCF ; флаг для ZX-Worda, что хотим прервать печать
RET
;-
INIT DI
DEFB #C3 ; JP
INITA DEFW INIT0
INIT0 LD HL,INITW
LD (INITA),HL ; забиваем, чтобы потом повторно
не инициализировать ВВ55
LD A,#98
OUT (#7F),A ; настройка ВВ55
CALL RECEIV
INITW LD HL,STALST ; список кодов инициализации принтера
INIT1 LD A,(HL)
LD E,A
INC E
RET Z
CALL START
INC HL
JR INIT1
STALST DEFB 27,64,27,82,4,255 ; для МС-6312. Для других принте-
ров не нужны "27,82,4".
;-
DEFS 23549-$
END
;-
[ Продолжение темы "Ассемблер" следует ].