I'm not sure if I've fixed it as it's a bit hard to figure out what's going on

I've changed the TEXT1 method to the following:
SUB TEXT1(BYVAL SSPD AS DOUBLE)
DIM AS INTEGER SCV2=48 ' 22 CHARS PER LINE AT 32PX EACH = 704. 800-704/2=48, SO TO KEEP IT CENTERED ON SCREEN, 48PX PAD LEFT BORDER
DIM AS INTEGER A,XJUMP,CPL=22,NUML
Dim As Integer yPos'CPL = 22 CHARACTERS PER LINE 32*22 = 704, WHICH IS LESS THAN 800 = IT FITS :p
NUML=LEN(TEXT)/CPL
FOR A=1 TO NUML
XJUMP=XJUMP+32 ' 32PX ADDED TO XRES#
yPos = SCV1+XJUMP
If (yPos > -32 AND yPos < YRES + 32) Then
VTEXT1(SCV2,SCV1+XJUMP,MID(TEXT,VTP,CPL))
End If VTP=VTP+CPL
NEXT
IF SCV1< -(NUML*32) THEN'-YRES THEN
VTP=VTP+CPL
SCV1=YRES+32
LOOPNUM=LOOPNUM+1
ENDIF
IF VTP>CPL THEN VTP=1
SCV1=SCV1-(DV*SSPD*.3) ' CRAP TO MOVE THE TEXT UPWARDS
'-------------------------------------------------------------------------------
'DEBUG SHIT RENDERED TO SCREEN
VTEXT1(60,400,"SCV1 (YPOS) :"+STR(SCV1))
VTEXT1(60,430,"SCV2 (XPOS) :"+STR(SCV2))
VTEXT1(60,460,"LINES RENDERED:"+STR(NUML))
VTEXT1(60,490,"LOOP NUM :"+STR(LOOPNUM))
VTEXT1(60,520,"VTP :"+STR(VTP))
'-------------------------------------------------------------------------------
END SUB
Hopefully that should improve things.
All it does it calculate the Y position that the line is going to be drawn at and stores it in the yPos variable. It then checks the value of yPos to determine if it's somewhere between -32 and [screenHeight]+32. If it is, the line is drawn. This is just checking that the line is somewhere visible on the screen (and not scrolled off the top or the bottom) before drawing it.
It's probably a good idea to give your functions and variables more meaningful names, especially when starting out. TEXT1, SCV1, SCV2 are quite hard to follow. I can't be sure if it's running as lot quicker as there's no FPS counter, but the changes should improve things - hopefully
