IIRC, i never experienced blurriness with autostrech on Windows, and currently i can't produce any blurriness on Linux. I used that often for x2,x3,x4 scaling.
not shure if this helps 
 
...I just tried it. To my surprise drawing on the Screen directly interpolates smoothly, whereas displaying a Sprite interpolates pixelsharp. I never realized that 
 
resize the window to test.
Code: Select all
InitSprite()
InitKeyboard()
ww=100
wh=100
sw=ww
sh=wh
win=OpenWindow(#PB_Any, 50,100, ww,wh, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(win), 0,0, sw,sh, 1,0,0)
spr = CreateSprite(#PB_Any, 50,50, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(spr))
	DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_AllChannels)
	For i=0 To OutputWidth() Step 2
		For k=0 To OutputWidth() Step 2
			Box(i,k,1,1, $ff00ff00)
		Next
	Next
StopDrawing()
Repeat
	ExamineKeyboard()
	
	Repeat
		event = WindowEvent()
		Select event
			Case #PB_Event_CloseWindow
				quit = #True
		EndSelect
	Until Not event
	
	StartDrawing(ScreenOutput())
		DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_AllChannels)
		For i=0 To OutputWidth() Step 2
			For k=0 To OutputWidth() Step 2
				Box(i,k,1,1, $ff00ff00)
			Next
		Next
	StopDrawing()
	
	DisplaySprite(spr, 0,0)
	
	FlipBuffers()
	ClearScreen($333333)
Until quit Or KeyboardPushed(#PB_Key_Escape)
<edit>
Some ZX Spectrum stuff might have resources left to just draw on a Sprite first and display that on the screen. That might solve the Problem.