[comp.sys.apollo] Parallel port drives user nuts

culmer@eniac.seas.upenn.edu (Charles Culmer) (03/19/89)

I want to print display bitmaps pixel-for-pixel on 8.5 x 11 paper with
a dot-matrix printer.  (Walk through the bitmap scanlines and write a
file of printer graphics commands.  Then print the file.)

My serial printer (Integral P132) does only 84 dots per inch.  I also
have an Epson LQ-1500 (24 pins) that does 180 dots per inch.  However,
this printer has a parallel interface.

Apparently, there are some SPE system calls that aren't covered in the
manual "Installing and Programming the DOMAIN Series 3000 SPE Option".
I don't see them in /sys/ins/spe.ins.c, and there doesn't seem to be a
relevant help file.  (I have ordered the system call manuals.)

I don't believe any of the Apollo supplied device drivers is suitable,
and /sys/help/prsvr/device_drivers.hlp seems to be limited to help for
serial devices.

I don't really need a device driver.  I just want a simple I/O program
to write to the printer.  I played around with the sample program from
/domain_examples rewritten in C and using /lib/spe_pio_lib--

     ios_$open gives "device is read only" error.
     spe_$pio_set_mode gives "option is not initialized" error.

Can someone please help me out with these questions--

(1)  Is there a system call spe_$pio_init?  Parameters and types?

(2)  Do I need any other system calls to make this I/O program work?

(3)  Will I have any trouble sending every (char) i for 0 <= i <= 256?
     I think my serial port is trapping some control characters.  This
     isn't a problem with the 8 pin printer since it uses only 7 pins,
     so I can send characters 128 through 255, but the Epson needs all
     of the characters.

(4)  Why do parallel devices exist?

I have a final question about GPR--

(5)  What does the line_width parameter from gpr_$inq_bit_map_pointer
     mean?  Isn't it too large by a factor of 2?  This is suggested by
     the examples in "Programming with Domain Graphics Primitives" but
     not explained.

(I have a model 3000, monochrome 1280 x 1024, version 9.7.)

Thanks in advance.

Charles W. Culmer
culmer@eniac.seas.upenn.edu       Truth, justice, and the American way

lnz@LUCID.COM (Leonard N. Zubkoff) (03/19/89)

In answer to (5) on the line_width value returned by gpr_$inq_bitmap_pointer:

GPR bitmaps are not necessarily organized such that the pixels of one line
are immediately followed by the pixels of the next line in memory.  Consider
direct mode access to a window that is not the full screen width, for example.

So the pixels on one line are found from the storage_ptr value, and the pixels
of the next line are found by adding 2*line_width to the original pointer,
and so on.  As documented in the insert file, the line width is the number
of 16bit words per line, which is the reason for multiplying by 2.

		Leonard

culmer@eniac.seas.upenn.edu (Charles Culmer) (03/20/89)

[This is a repeat, condensed version of an earlier posting.  The first
one came back to me with a mail delivery error.]

I'm trying to run the simple parallel I/O program given in the example
directory.  It doesn't run--

     ios_$open gives "device is read only" error.
     spe_$pio_set_mode gives "option is not initialized" error.

Apparently, there are some SPE system calls that aren't covered in the
manual "Installing and Programming the DOMAIN Series 3000 SPE Option".
I don't see them in any of the include or help files.  (I have ordered
the system call manuals.)

Can someone please help me out with these questions--

(1)  Is there a system call spe_$pio_init?  Parameters and types?

(2)  Do I need any other system calls to make this I/O program work?

(3)  Will I have any trouble sending every (char) i for 0 <= i <= 255?
     I think my serial port is trapping some control characters.

(I'm using a Domain 3000, monochrome 1280 x 1024, version 9.7.)

Thanks in advance.

Charles W. Culmer
culmer@eniac.seas.upenn.edu       Truth, justice, and the American way