ZXNet эхоконференция «code.zx»


тема: driver, printer and is-dos



от: Dima Boyko
кому: All
дата: 18 Feb 2001
Х а ю ш к и, All !
В связи с написанием драйвера принтера под ис дос возникла куча вопросов.

сразу оговорю что мой принтер (мс 6304) имеет ИРПР интерфейс
(это не ИРПРМ и не Centronix) переделаный под центроникс.
Т.е. имеет ТТL входы и имеет прямые сигналы данных.

Итак вопрос первый:

почему процедура вывода на печать не работает вот в таком виде:
LL8079 LD E,A
BUSY__ EI
LD C,#09
RST #10
JR Z,LL808B
LD C,#07
RST #10
CP #10; "SS+A"
JR Z,EXIT__
CP #16; "CS+BS=BREAK"
JR Z,EXIT__
LL808B DI
IN A,(#7B)
RLA
JR C,BUSY__
LD A,E
OUT (#FB),A; вывод данных.
OUT (#7B),A; стpоб в "1"
LD A,#FF
L1 DEC A
JR NZ,L1
LD A,E
L1 IN A,(#7B) ; читаем состояние принтера
RLA ; проверяем нет ли бизи
JR C,GOTO_ ; если есть печатаем дальше
; EI
; LD C,#07
; RST #10
; CP #10; "SS+A"
; JR Z,EXIT__
; CP #16; "CS+BS=BREAK"
; JR Z,EXIT__
; DI
JR L1 ; если нет - ждем пока появится
GOTO_ LD A,E
OUT (#FB),A
EI
INIT_I RET

хотя здесь напрямую реализован алгоритм работы принтера. И такое работает в
моей печаталке под тр досом.
Зато здесь работает упрощенный вариант реализации интерфейса:

LL8079 LD E,A
BUSY__ EI
LD C,#09
RST #10
JR Z,LL808B
LD C,#07
RST #10
CP #10; "SS+A"
JR Z,EXIT__
CP #16; "CS+BS=BREAK"
JR Z,EXIT__
LL808B DI
IN A,(#7B)
RLA
JR C,BUSY__
LD A,E
OUT (#FB),A; вывод данных.
OUT (#7B),A; стpоб в "1" или ноль я не помню
LD A,#7F ; задержка
L1 DEC A
JR NZ,L1
LD A,E
OUT (#FB),A
EI
INIT_I RET

почему так?

С наилучшими, Dima Boyko.

от: Valerij Kozhevnikoff
кому: Dima Boyko
дата: 25 Feb 2001
Здравствуй, Dima!

18 Фев 01 09:11, Dima Boyko -> All:

DB> OUT (#FB),A; вывод данных.
DB> OUT (#7B),A; стpоб в "1"
DB> LD A,#FF
DB> L1 DEC A
DB> JR NZ,L1

DB> хотя здесь напрямую реализован алгоритм работы принтера. И такое работает в
DB> моей печаталке под тр досом. Зато здесь работает упрощенный вариант
DB> реализации интерфейса:

DB> LD A,E
DB> OUT (#FB),A; вывод данных.
DB> OUT (#7B),A; стpоб в "1" или ноль я не помню

Принтер стробируется нулем.

DB> LD A,#7F ; задержка
DB> L1 DEC A
DB> JR NZ,L1

DB> почему так?

Уйё... По докам длительность строба должна быть 10-20 тактов, а у тебя сколько?
И чего ты хочешь после этого? У принтера мозги наверное клинит.

LD E,A
WAIT CALL #1F54
CCF
RET C
IN A,(#7B)
RLA
JR C,WAIT
NOP
NOP
NOP
LD A,E
OUT (#FB),A
OUT (#7B),A
NOP
NOP
NOP
NOP
OUT (#FB),A
AND A
RET

*Только так, и никак иначе!*
Бизю опрашивать после строба -- нафиг, ибо ACK от принтера все равно не
заведен.

/STROBE ───────┬---┬────────────────────────
│ │
└───┘

┌───────────────┐
│ │
BUSY ────────┴---------------┴───────────


/ACK ───────────────────────┬------┬─────
│ │
└──────┘

DATA ─────-------------------────────────
/ /
/ /\n
─────-------------------────────────


WBR, Jason.

[Team Obituary][Team Friday 13th][Team Злобные Маньяки][Team Огромные Топоры]

от: Valerij Kozhevnikoff
кому: Dima Boyko
дата: 04 Mar 2001
Здравствуй, Dima!

27 Фев 01 22:54, Dima Boyko -> Valerij Kozhevnikoff:

VK>> Уйё... По докам длительность строба должна быть 10-20
DB> это в центрониксе а у меня ИРПР - другой интерфейс.

Интерфейс ИРПР - параллельный интерфейс, отличающийся от CENTRONIX как
полярностью сигналов, так и протоколом обмена. В упрощенном варианте для
работоспособности интерфейса кроме 8-ми информационных сигналов DATA 0-7
необходимы 2 управляющих сигнала:
- SC - строб источника, аналогично сигналу Strobe интерфейса CENTRONIX, в
низком уровне свидетельствует о достоверности данных на линиях DATA 0-7;
- AC - запрос приемника, в состоянии 0/1 сигнализирует о
готовности/неготовности принтера к приему данных, т.е. аналогичен сигналу Busy
интерфейса CENTRONIX.
Сигналы SC и AC связаны между собой следующим образом:
- SC изменяет состояние из лог. 1 в лог. 0 только при AC = 0, а из 0 в 1 -
при AC = 1;
- AC остается в состоянии лог. 1 до тех пор, пока сигнал SC не изменит свое
состояние из лог. 0 в лог. 1.
Hесмотря на отличия в протоколах обмена, схема и программа поддержки
интерфейса CENTRONIX вполне могут работать с принтерами оснащенными интерфейсом
ИРПР. Для этого необходимом инвертировать информационные линии DATA 0-7 и
буферизовать сигнал SC, так как в ИРПР требуются токи нагрузки около 40 мА.
Сигнал AC используется вместо сигнала Busy, а сигнал SC вместо сигнала Strobe.

Вот так наверное:

LD E,A
WAIT CALL #1F54
CCF
RET C
IN A,(#7B)
RLA
JR C,WAIT
NOP
NOP
DI
LD A,E
OUT (#FB),A
NOP
OUT (#7B),A
NOP
NOP
WAIT2 IN A,(#7B)
RLA
JR NC,WAIT2
LD A,E
OUT (#FB),A
AND A
EI
RET

[...]

DB> это ты Centronix(ИРПРМ) описал. А у меня все по другому.
DB> нет АСК DATA инверсная. Строб такой-же. И бизя такая-же.
DB> Или обратная я непомню. Я данные аппаратно инвертирую,возможно и бизю тоже
DB> - не помню.

Дык инвертируешь или нет? От этого все зависит.

WBR, Jason.

[Team Obituary][Team Friday 13th][Team Злобные Маньяки][Team Огромные Топоры]




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

Похожие статьи:
Calendar
Анонс - Новая ПЗУ - Technology Rom v1.0.
Паутина - Модемы на Спектруме.
Вступление - Вот и лето скоpо наступит.
Дискуссия - интервью с автором аппаратных доработок из Харькова - Гетманцом Владимиром Михайловичем.

В этот день...   27 апреля