I've used that little asm loop in a lot of things indeed. It speeds things up a fair bit. I think it was Fryer who put me onto it.
I just looked through that zoom routine again... It could be done faster using pointer arithmetic. This is a piece of code taken from something I'm working on at the moment, basically it takes an image and scales it's height. It would be very simple to include width as well.
This uses pointers and is very fast..
SUB DRAWSPLASH()
DIM P1 AS UINTEGER PTR
DIM P2 AS UINTEGER PTR
ERASE SCREEN_BUFFER
DIM AS INTEGER LY , LX , SLICE , HCI
DIM AS DOUBLE HEIGHT , HEIGHTI, HSTRT
IF TIMR<150 THEN SPLSH=SPLSH + 4
IF TIMR>570 THEN SPLSH=SPLSH - 4
HEIGHT = SPLSH
HEIGHTI = WYRES/HEIGHT
HSTRT = 0
FOR LY=((WYRES SHR 1)-(HEIGHT SHR 1)) TO ((WYRES SHR 1)+(HEIGHT SHR 1))-1
HCI = INT(HSTRT)
P1=@SPLASH (HCI * WXRES)
P2=@SCREEN_BUFFER (LY * WXRES)
FOR LX = 0 TO WXRES
*P2 = *P1
P1 +=1
P2 +=1
NEXT
HSTRT = HSTRT + HEIGHTI
NEXT
END SUB