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
;-

[ Продолжение темы "Ассемблер" следует ].




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Personalia - "Привeт из солнeчного Нeфтeкамска!"
party zone - twilight demoparty info: В ближайшее время обновятся правила Twilight Demoparty 2002.
Разное - о рубеже тысячелетий.

В этот день...   17 ноября