Nicron
#24
13 марта 1997 |
|
Программирование - КР580ВВ55А.
╔──────────────────────────────────────────────────────────────╗ │ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒▒▒░▒▒▒▒▒▒░▒▒▒▒▒░│ │▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░▒▒░ ▒▒░ ▒▒│ │▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒▒▒▒░ ▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒░▒▒░▒▒▒▒▒░ ▒▒░ ▒▒│ │▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒░│ │▒▒░ ▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░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 ;- [ Продолжение темы "Ассемблер" следует ].
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября