Hi All,
I've successfully linked the Einstein user port to the PC parallel
port. The wiring is straight forward PC data lines D0 to D7 to
Einstein D0 to D7. PC strobe to Einstein STB. PC acknowledge to
Einstein RDY. Plus one or more grounds. No additional circuitry
needed.
In post #289 I reported "It seems to get the kind of hand shacking
required more sophisticated programming using the interrupt will be
needed. Until I can find a working program example or work out by
trial and error how it can be done I've put using mode 1 aside."
The working example code was where I should have looked first in MOS.
Its there to configure port "A" of the Z80 PIO for a printer port.
Thanks to Ric Holne's disassembles of MOS it was easy to find.
I also reported "The data output pin from the user port was only 3.4v
multi metre reading not enough to put acknowledge high on the PC."
This seemed to be true when using mode 3 and one data line from the
user port for handshaking when, to exchange data to and from the
printer port but when all user port data lines, RDY and STB were
connected the 3.4v was enough power to set the inputs on the PC
printer port.
In one way or another I was totally side tracked, confused and
reported problems that didn't exist. I have now though working
example programs for exchanging data in both directions via the user
port using interrupts with mode 0 and 1 and the PC eccp printer port.
Regarding the printer port:-
The programing used for the user port was a direct copy of that used
by the printer port as set by MOS at power up. There is a problem I
have with using the printer port. I can't get strobe from pin 1 to go
low and set acknowledge on the PC printer port low. It remains
permanently high. The programing I use on the PC to import data
(which works with RDY with the user port) only works with one hand
shaking line instead of two. Using a timing delay on the PC does
allow streams of data to be imported without bytes being missed or
duplicated but when output from the Einstein has stopped there is no
hand shaking to stop the last byte output being repeatedly read by
the PC program. Besides slowing down transfer defeats the purpose.
This is a nuisance. As the printer port programing is installed at
power up no further programing would be required and any established
means to use the printer port such as pressing "CTRL" "R" or a MCALL
would work and be held at the termination of output.
There is a difference between the wiring of the printer and user
ports.
From the Einstein Hardware Manual.
Port A is dedicated as a printer output by MOS at power-on, and this
port has a monostable (IO53b) [this is a circuit using a 74LS123
chip] which provides a (1us) pulse triggered by the ready line of
the PTO port A and is fed to the strobe output (M001, pin 1). This
pulse is needed to comply with the centronics printer-interface
timing.
I understand this to mean that the high on pin 1 strobe would be
mainly off and only going on for short bursts when data has been put
on the data lines. I have tested this with the BBC4W program and by
using strobe from pin 1 to power an LED. Strobe from my Einstein
stays permanently high.
This could be a fault with my Einstein.
I'll make another attempt to use the printer port and test more
thoroughly.
I'll upload the example programing to files as soon as I've made them
more tidy than they are at the moment. They will be provisional and
still rudimentary. Spare space in the Einstein above the transient
program area will be needed for the code and some scratch pad bytes
for serious implementation. At the moment they just show an example
of how user port interrupt handling can be made.
Regards Chris Coxall
Topic reference in messages
#283 #282 #281 #277 #276 #275 #274 #111