um :
<PRE>
            /\
           /  \
         +/----\---+
         /      \  |
        /|       \ |
        \|       / |
         \      /  |
         |\    /   |
         | \  /    |
         |  \/     |
         |         |
         +---------+
</PRE><P>
Sum with clipping :

<PRE>
         +/----\---+
         /      \  |
         |       \ |
         |       / |
         \      /  |
         |\    /   |
         | \  /    |
         |  \/     |
         |         |
         +---------+
</PRE><P>
In order to cut the parts outside the screen it is needed to take into
consideration each face's line separately, to check the co-ordinates of the two
points and, in case that only one point comes out from the screen, to calculate
the intersections whit the screen.<P>

In some cases it is useless to draw a line:<P>
* both points are out of the screen<P>
* the line is horizontal<P>

In case that the line is horizontal it is useless to draw, here is an example:
<PRE>

               ----------
               |        |
               |        |
               |        |
               |        |
               |        |
               |        |
               ----------

</PRE><P>
The blitter fills a memory's area starting when it finds a pixel and finishing
when it finds another one. In our example the face is perfectly filled only
thanks to the two vertical line.<P>
Here is the source's code in assembler for 68020+<P>

<PRE>

	move.l	#X0,d0
	move.l	#Y0,d2
	move.l	#X1,d1
	move.l	#Y1,d3

* START CLIPPING
Clip:
	cmp.l	d2,d3		; se y1 = y2   ->    DON'T DRAW THE LINE
	bne.s	Continua
NO_LINEA:
	rts

* X0 < X1
Continua:
	cmp.l	d0,d1
	bgt.s	X0MinoreX1
	exg.l	d0,d1
	exg.l	d2,d3
X0MinoreX1:

* CHECK OF THE LEFT SIZE

	tst.l	d0
	bpl.s	NOClippingSinistro	; if d0 positive than NOClippingSinistro

	tst.l	d1			; d0 < 0 , d1 < 0     outside the screen
	bmi.s	NO_LINEA

** LEFT CLIPPING
ClipSinistro:

	moveq	#0,d4
	moveq	#0,d5
	move.w	d1,d4		; d4 = x1
	sub.w	d0,d4		; d4 = x1 - x0
	move.w	d3,d5		; d5 = y1
	sub.w	d2,d5		; d5 = y1 - y0
	swap	d5		; d5 << 16
	divs.l	d4,d5		; WARNING : 68020+
				; d5 = d5 / d4 = pre ogni X, quante Y si sposta ?
	neg.l	d0		; d0 = d0 negato
	mulu.l	d0,d5		; WARNING : 68020+
				; d0 = d0 * d5
	swap	d5		; d5 >> 16
	add.w	d5,d2		; New Y  ->  X = 0
	moveq	#0,d0

NOClippingSinistro:
* CHECK OF THE RIGHT SIZE
	cmp.l	#320,d1			; if d1 < 320 than NoClippingDestro
	blt.s	NoClippingDestro
	cmp.l	#320,d0			; 