| I don't know why his function would fail to work on your PC, but try this demo.  I wrote a custom loop for drawing the pixels manually to a locked buffer.  It's 3x faster on average than the original.  I have my doubts that you could make it much faster.  I have no idea why Simon used that slow rect function in the original. :-)  I didn't try the line function though because presumably that would be even slower than the rect fill function. 
 You might be able to get 10fps with this version, assuming you don't have much overdraw.  I've heard Blitzplus is much faster though at 2D drawing operations than Blitz 3D which is what I tested in.  So that might give you a more reasonable rate.
 
 
 
Dim xval(20)
Dim yval(20)
Graphics 640,480
SetBuffer BackBuffer()
Color 255,0,255
T1 = MilliSecs()
For Loop = 0 To 1000
	Triangle(-10,-10, 180,20, 230,220)
Next
T2 = MilliSecs()
T3 = MilliSecs()
For Loop = 0 To 1000
	FastTriangle(-10,-10, 180,20, 230,220)
Next
T4 = MilliSecs()
Color 255,255,255
Text 16, 16, T2-T1
Text 16, 32, T4-T3
Flip
WaitKey
End
Function Triangle(x0,y0,x1,y1,x2,y2)
	xval(0)=x0
	yval(0)=y0
	xval(1)=x1
	yval(1)=y1
	xval(2)=x2
	yval(2)=y2
	poly(3)
End Function
Function FastTriangle(x0,y0,x1,y1,x2,y2)
	xval(0)=x0
	yval(0)=y0
	xval(1)=x1
	yval(1)=y1
	xval(2)=x2
	yval(2)=y2
	FastPoly(3)
End Function
Function Quad(x0,y0,x1,y1,x2,y2,x3,y3)
	xval(0)=x0
	yval(0)=y0
	xval(1)=x1
	yval(1)=y1
	xval(2)=x2
	yval(2)=y2
	xval(3)=x3
	yval(3)=y3
	poly(4)
End Function
Function poly(vcount)
; get clipping region
	width=GraphicsWidth()
	height=GraphicsHeight()
; find top verticy
	b=vcount-1
	y=yval(0)
	While c<>b
		c=c+1
		yy=yval(c)
		If yy<y y=yy d=c
	Wend
	c=d 
	t=c
; draw top to bottom
	While y<height
; get left gradient
		If y=yval(c)
			While y=yval(c)
				x0=xval(c) Shl 16
				c=c+1
				If c>b c=a
				If c=t Return
				If y>yval(c) Return
			Wend
			h=yval(c)-y
			g0=((xval(c) Shl 16)-x0)/h
		EndIf
; get right gradient
		If y=yval(d)
			While y=yval(d)
				x1=xval(d) Shl 16
				d=d-1
				If d<a d=b
				If y>yval(d) Return
			Wend
			h=yval(d)-y
			g1=((xval(d) Shl 16)-x1)/h
		EndIf
; calc horizontal span
		x=x1 Sar 16
		w=((x0 Sar 16)-x)+1
; draw down to next vert
		If (w>0 And y>-1 And x<width And x+w>0)
			If x<0 w=w+x x=0	;crop left
			If x+w>width w=width-x	;crop right
			Rect x,y,w,1
		EndIf
; next	
		x0=x0+g0
		x1=x1+g1
		y=y+1
	Wend
End Function
Function FastPoly(vcount)
	RGBColor = ColorBlue() Or (ColorGreen() Shl 8) Or (ColorRed() Shl 16) Or ($ff000000)
	; get clipping region
	width=GraphicsWidth()
	height=GraphicsHeight()
	
	; Lock the current drawing buffer.
	LockBuffer()
	
	; find top verticy
	b=vcount-1
	y=yval(0)
	While c<>b
		c=c+1
		yy=yval(c)
		If yy<y y=yy d=c
	Wend
	c=d 
	t=c
	; draw top to bottom
	While y<height
		
		; get left gradient
		If y=yval(c)
			While y=yval(c)
				x0=xval(c) Shl 16
				c=c+1
				If c>b c=a
				If c=t Goto Finish
				If y>yval(c) Goto Finish
			Wend
			h=yval(c)-y
			g0=((xval(c) Shl 16)-x0)/h
		EndIf
		; get right gradient
		If y=yval(d)
			While y=yval(d)
				x1=xval(d) Shl 16
				d=d-1
				If d<a d=b
				If y>yval(d) Goto Finish
			Wend
			h=yval(d)-y
			g1=((xval(d) Shl 16)-x1)/h
		EndIf
		; calc horizontal span
		x=x1 Sar 16
		w=((x0 Sar 16)-x)+1
		; draw down to next vert
		If (w > 0) And (y > -1) And (x < width) And ((x+w) > 0)
	
			;crop left
			If x < 0 
				w=w+x
				x=0		
			EndIf
			
			;crop right
			If (x+w) > width
				w=width-x
			EndIf	
			
			; Draw scanline.
			For Lx = x To (x+w)
				WritePixelFast Lx, y, RGBColor
			Next
			
		EndIf
		
		; next	
		x0=x0+g0
		x1=x1+g1
		y=y+1
		
	Wend
	.Finish
	
	; Unlock the draw buffer.
	UnlockBuffer()
	
End Function
 
 
 |