Вход

Просмотр полной версии : Работа с принтером через порт(ы) ввода/вывода AY-3-891x



Grand
07.06.2005, 14:57
Однажды, в одном из сообщений темы Speccy - наш выбор! > ZX-Spectrum > Программирование > mouse driver я вскольз упомянул, что использую интерфейс принтера на AY. Реализацией этого вопроса заинтересовались, и я решил, что это подходящая тема для обсуждения.
Предлагаю всем, кто имеет хотябы небольшой собственный опыт, рассказать о способах реализации, программирования и использования подобных интерфейсов.

Grand
07.06.2005, 15:02
... шибко охота узнать как именно был подцеплен принтер и с каким софтом работал.
... из издоса один товаришь за эту инфу вообще денег хотел!Сразу скажу, что интерфейс Centronics у меня реализован через оба порта AY-3-8910.
Схему для него я позаимствовал из ZX-Ревю №4/95, стр. 36 - 38; если не удасться найти этот журнал, готов нарисовать ее в Art Studio. От себя я добавил к схеме лишь соединение BUSY с +5В через резистор 10К, и исключил связь с ERROR (т. к. не вижу практического смысла в использовании этого сигнала).
К самому принтеру (D100-M) сигналы данных и управления у меня подключены через буфер (иначе не работало), как в книге "Периферия своими руками", ИНФОРКОМ, 1994, стр. 99 - 128.
Порт B (рег.15) AY'а у меня исп-ся как регистр данных; бит 0 порта A (рег.14) исп-ся для приёма BUSY, бит 7 - для передачи /STROBE.
Нельзя назвать такое распределение стандартным: анализируя драйверы из IS-DOS я видел другие назначения битов; также от туда можно позаимствовать и другие интересные решения по данному вопросу (покопаться коде драйверов можно совершенно бесплатно :) ).
В указанном выше журнале имеется пример драйвера, но я написал свой. Всё необходимое ПО я адаптировал сам: Art Studio, Artist 2, текстовые редакторы и др.
Мое настоятельное мнение: вывод на принтер в программах должен осуществляться через поток #3 и канал "P"; драйвер принтера лучше размещать в буфере ZX Printer'а (в реж. 48K), - в этом случае, через настроенный до загрузки программы канал, печать без проблем будет работать на любом принтере с любым интерфейсом.
Желающие могут посмотреть несколько адаптированных мной таким образом шахматных программ: http://zxfiles.hut2.ru/games/chess.zip Вся документация к ним прилагается.

И в заключении, мой драйвер принтера для Art Studio V1.5TR; к сожалению, в этом редакторе вывод осуществляется не через поток #3, а через пользовательский драйвер, который должен быть с адреса #8764 (34660).
;(C) Grand, 14.2.2000.
;Драйвер принтера V1.3 для ART STUDIO V1.5TR.
;Интерфейс CENTRONICS, связь через порты AY-3-8910:
; PB - data
; PA - in: b0 - BUSY, out: b7 - /STROBE
;
;
ORG #8764 ;34660
;
DEFW #8764 ;Адр.начала драйвера.
DEFW INIT ;Адр.нач.проц.иниц-ии.
DEFW BUSY ;Адр.нач.проц.пров.готовнос и пр-ра.
DEFW LPRINT ;Адр.нач.проц.вывода байта на печать.
DEFW END-#8464+1;Общ.длина драйвера.
;Процедура проверки готовности принтера.
;(Возвр. Z=0, если не готов).
BUSY LD DE,#BF07
CALL L0000 ;reg7: PB out, PA in
LD B,#FF
LD E,#0E
OUT (C),E ;Set reg14
IN E,(C)
BIT 0,E ;Z=0 - not ready
RET
;Процедура инициализации принтера.
INIT LD DE,#FF07
CALL L0000 ;reg7: PB out, PA out
LD E,#0E
CALL L0000
LD A,24;Очистка буфера строки.
CALL L0001
LD A,27;Задание межстрочного интервала
CALL L0001;22/216 дюима.
LD A,"3"
CALL L0001
LD A,22
L0001 CALL BUSY
JR NZ,L0001
;Процедура вывода байта на печать.
LPRINT LD DE,#FF07
CALL L0000 ;reg7: PB out, PA out
LD D,A
LD E,#0F
CALL L0000 ;reg15(PB): data
LD DE,#7F0E
CALL L0000 ;reg14(PA): set /STROBE
LD D,#FF
JR L0002 ;reg14(PA): reset /STROBE
L0000 LD BC,#FFFD
OUT (C),E
LD B,#BF
L0002 OUT (C),D
END RET

fan
07.06.2005, 18:08
Благодарствую! (Как то я проглядел это описание в ревю...)
Вариант применяемый в KAY уж шибко безбашенный, пришлось на него забить...

"Периферия своими руками", ИНФОРКОМ, 1994
Хотелось бы хотя бы в общих чертах узнать её содержание.


--------------------------------------------------------------------------
В качестве стандарта на подключение, чего либо к портам сопра, предагаю такую распиновку разъёма (так удобней развести плату) -
http://zx.pk.ru/attachment.php?attachmentid=935&stc=1
D0-D7 идут через буфер (так же как на KAYе). На тринадцатый пин разъёма выведен седьмой бит порта #FE-IN (чтоб не пустовал напрасно). Впринципе не важно для каких именно целей это использовать, рас уж есть стандартные(!) порты надо их вывести.

Costa
07.06.2005, 22:44
"Периферия своими руками", ИНФОРКОМ, 1994
Хотелось бы хотя бы в общих чертах узнать её содержание.
1.Буферизация шин компьютера
2.Способы поключения Спектрума к телевизору и кодер СЕКАМ
3.Несколько вариантов подключения джойстиков и световое перо
4.Интерфейс НГМД
5.Интерфейсы CENTRONICS на ВВ55,RS-232C,ZX-LPRINT-III
6.ZX-модем
7.Расширение памяти Спектрума
8.Программатор

Ronin
07.06.2005, 23:21
Вариант применяемый в KAY уж шибко безбашенный
на КАЕ сделано так -
PA0..7(out)_AY -> [out buffer] -> pin2..9 (D0..7)
PB2(i/o)_AY, bit7#FE - подтяжка к +5в -> pin11 (BUSY)
bit5#1FFD -> инвертор с ОК, подтяжка к +5в -> pin1 (STROBE)

если обобщить сигналы, выведенные на LPT-разъем KAY256, то это:

AY:PA0..7(out only) - pin2..9

AY:PB0..7(in, out) - pin15, 18, 11, 19, 20, 10, 12, 13

#1FFD(out):через инверторы с ОК (подтяжка к +5в только у 5го бита):
#1FFD-bit1, 2, 5, 6, 7 - pin25, 17, 1, 23, 16.
++
на KAY1024 на pin16 вместо #1FFD-bit7 (который используется в управлении памятью) заведен #7FFD-bit6.

fan
08.06.2005, 16:18
2 Ronin
Это я уже видел ;) Но увы, использование портов #1FFD унд #7FFD в ряде случаев не подходит (особенно если их нет). Вот я и предлагаю ещё один альтернативный вариант.

2 Costa
Сеньки за инфу.

Ronin
08.06.2005, 19:44
я просто расписал как есть :) и потом для юзания внешних девайсов совсем необязательны 1ffd/7ffd - PA+PB хватит. по крайней мере их паять по стандарту.

только с принтером придется немного извратится, заведя на strobe какой-то сигнал, типа того что описано во 2-ом посте.

Grand
09.06.2005, 14:37
В качестве стандарта на подключение, чего либо к портам сопра, предагаю такую распиновку разъёма (так удобней развести плату)...Я думаю на разъем неплохо бы вывести "+5В" - так сделано компьютере Himac HR 42 (назначение остальных контактов конечно же другое); когда я подключал платку с буферными микросхемами - "+5В" мне очень пригодилось.


Вариант применяемый в KAY уж шибко безбашенныйМожет быть он так реализован, чтобы в перспективе можно было выпускать платы с AY-3-8912, у которого, как известно, только один порт ввода/вывода.


"Периферия своими руками"...
Хотелось бы ... узнать её содержание.Некоторые из материалов были опубликованы в номерах ZX-Ревю за 1991 год.

По поводу назначения портов в различных интерфейсах тех лет я советую найти и посмотреть текстовый документ в системе IS-DOS: DRIVERS\HELP\lpr.txt

Grand
01.05.2006, 01:38
Принтер D100-M:

http://grands.land.ru/photos/d100m.jpg