driver, printer and is-dos
ZXNet echo conference «code.zx»
From Dima Boyko → To All 18 February 2001
Khayushki, All!
In connection with writing a printer driver for IS DOS, a lot of questions arose.
I’ll immediately say that my printer (ms 6304) has an IRPR interface
(this is not IRPRM and not Centronix) converted to Centronix.
Those. has TTL inputs and has direct data signals.
So question one:
Why does the printing procedure not work like this:
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)
R.L.A.
JR C,BUSY__
LD A,E
OUT(#FB),A; data output.
OUT(#7B),A; strobe at "1"
LD A,#FF
L1 DEC A
JR NZ,L1
LD A,E
L1 IN A,(#7B) ; read the printer status
RLA ; check if there is bisi
JR C,GOTO_ ; if there is any, we print further
; EI
; LD C,#07
; RST #10
; CP#10; "SS+A"
; JR Z,EXIT__
; CP#16; "CS+BS=BREAK"
; JR Z,EXIT__
; D.I.
JR L1; if not, wait until it appears
GOTO_LD A,E
OUT(#FB),A
EI
INIT_I RET
although the printer operation algorithm is directly implemented here. And this works in
my printer under tr dos.
But a simplified version of the interface implementation works here:
LL8079 LD E,A
BUSY__EILD 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)
R.L.A.
JR C,BUSY__
LD A,E
OUT(#FB),A; data output.
OUT(#7B),A; strobe in "1" or zero I don't remember
LD A,#7F ; delay
L1 DEC A
JR NZ,L1
LD A,E
OUT(#FB),A
EI
INIT_I RET
why so?
With the best, Dima Boyko.
From Valerij Kozhevnikoff → To Dima Boyko 25 February 2001
Hello, Dima!
18 Feb 01 09:11, Dima Boyko -> All:
DB> OUT (#FB),A; data output.
DB> OUT (#7B),A; strobe at "1"
DB> LD A,#FF
DB> L1 DEC A
DB> JR NZ,L1
DB> although the printer operation algorithm is directly implemented here. And this works in
DB> to my printer under the printer. But a simplified version works here
DB> interface implementations:
DB> LD A,E
DB> OUT (#FB),A; data output.
DB> OUT (#7B),A; strobe in "1" or zero I don't remember
The printer is gated to zero.
DB> LD A,#7F ; delay
DB> L1 DEC A
DB> JR NZ,L1
DB> why is this?
Uyo... According to the docks, the duration of the strobe should be 10-20 cycles, but how many do you have?
And what do you want after that? The printer's brain is probably jammed.
LD E,A
WAIT CALL #1F54
CCF
RET C
IN A,(#7B)
R.L.A.
JR C,WAIT
NOP
NOP
NOP
LD A,E
OUT(#FB),A
OUT(#7B),A
NOP
NOPNOP
NOP
OUT(#FB),A
AND A
RET
*Only this way, and no other way!*
To interrogate bizyu after the strobe - what for, because there is still no ACK from the printer
wound up
/STROBE ───────┬---┬────────────────────────
│ │
└───┘
┌───────────────┐
│ │
BUSY ────────┴---------------┴───────────
/ACK ───────────────────────┬------┬─────
│ │
└──────┘
DATA ─────-------------------────────────
//
/ /\n
─────-------------------────────────
WBR, Jason.
[Team Obituary][Team Friday 13th][Team Evil Maniacs][Team Huge Axes]
From Valerij Kozhevnikoff → To Dima Boyko 4 March 2001
Hello, Dima!
27 Feb 01 22:54, Dima Boyko -> Valerij Kozhevnikoff:
VK>> Uyo... On the docks, the strobe duration should be 10-20
DB> this is in Centronix and I have IRPR - a different interface.
IRPR interface is a parallel interface that differs from CENTRONIX as
the polarity of the signals and the exchange protocol. In a simplified version for
interface operability except for 8 information signals DATA 0-7
2 control signals are needed:
- SC - source strobe, similar to the Strobe signal of the CENTRONIX interface, in
a low level indicates the reliability of the data on the DATA 0-7 lines;
- AC - receiver request, in state 0/1 signals
whether the printer is ready/unready to receive data, i.e. similar to Busy signal
CENTRONIX interface.
The SC and AC signals are interconnected as follows:
- SC changes state from log. 1 to log. 0 only at AC = 0, and from 0 to 1 -
at AC = 1;
- AC remains in log state. 1 until the SC signal changes its
state from log. 0 to log. 1.
Despite the differences in exchange protocols, the scheme and support program
interface CENTRONIX can work with printers equipped with an interface
IRPR. To do this, it is necessary to invert the information lines DATA 0-7 andbuffer the SC signal, since the IRPR requires load currents of about 40 mA.
The AC signal is used instead of the Busy signal, and the SC signal is used instead of the Strobe signal.
Probably like this:
LD E,A
WAIT CALL #1F54
CCF
RET C
IN A,(#7B)
R.L.A.
JR C,WAIT
NOP
NOP
D.I.
LD A,E
OUT(#FB),A
NOP
OUT(#7B),A
NOP
NOP
WAIT2 IN A,(#7B)
R.L.A.
JR NC,WAIT2
LD A,E
OUT(#FB),A
AND A
EI
RET
[...]
DB> you described Centronix (IPRM). But for me everything is different.
DB> no ACK DATA inverse. The strobe is the same. And the mizzy is the same.
DB> Or I don’t remember the opposite. I invert the data by hardware, maybe the bizyu too
DB> - I don’t remember.
So are you inverting or not? Everything depends on this.
WBR, Jason.
[Team Obituary][Team Friday 13th][Team Evil Maniacs][Team Huge Axes]