[comp.windows.x] Wanted: Help on writing a bitblter for Wyse-700 monitor.

whw@doc.ic.ac.uk (Victor Wu) (04/15/87)

Hello folks,

	I've recently bought a Wyse-700 monitor for my AT-clone and trying to
port the bitblter for the X windowing system (from Brown University) to run on
it. However, I found it is very difficult to work with this particular
monitor. The reason being that when it is at its highest resolution (ie. 1280
X 800 pixels black and white), the frame buffer is divided into two banks of
memory. One for the even scanlines and the other for the odd scanlines. Both
of them occupy the same address space A0000H to AFFFFH. To be able to read
from or write to either one banks of memory, one have to write to a control
port at address 3DF. This makes the bitblt routines very clumsy and tedious
and very inefficent. I wonder is anyone out there have any experience with
this monitor or any solution to the problem.

	Thank you very much indeed in advance for your kind attention and
help.

Victor WU
Department of Computing,
Imperial College of Science & Technology,
180, Queen's Gate,
London SW7 2BZ,
England.

david@sun.uucp (David DiGiacomo) (04/16/87)

In article <425@ivax.doc.ic.ac.uk> whw@doc.ic.ac.uk (Victor Wu) writes:
>	I've recently bought a Wyse-700 monitor for my AT-clone and trying to
>port the bitblter for the X windowing system (from Brown University) to run on
>it. However, I found it is very difficult to work with this particular
>monitor. The reason being that when it is at its highest resolution (ie. 1280
>X 800 pixels black and white), the frame buffer is divided into two banks of
>memory. One for the even scanlines and the other for the odd scanlines.

I haven't looked at the Brown code lately (and it's hard to find it when
you haven't told me which version of X you're using or which device it
was written for!), but in general it's easy to handle this by blt-ing
the odd and even lines separately.

Create dummy bitmap structures for the source and destination bitmap
operands with the bytes-per-scan-line values doubled.  (Think of this as
creating new bitmaps with all the original even lines on the left side
and the original odd lines on the right side.)  Now you can perform most
bitblts by calling the regular bitblt function twice with slightly
munged dx, dy, w, h, sx, sy operands (swapping the frame buffer bank in
between).

There is one pathological case where the source and destination bitmaps
are both areas on the frame buffer and the LSBs of the source and
destination y coordinates differ (e.g. dy is even and sy is odd).  This
has be done with a temporary memory bitmap (which only has to be half
the size of the bitblt area).
-- 
David DiGiacomo, Sun Microsystems, Mt. View, CA sun!david david@sun.com