On my system, using an image loaded with loadanimimage seems to be doing a 60x60 character area using 8x8 pixels letters just fine. About 8ms to draw the 3600 characters.
Try this piece of code with the image linked:
http://zac-interactive.dk/temp/8x8.bmp
Graphics 640,480
Global font = LoadAnimImage("8x8.bmp",8,8,0,96)
Global screenChar:Int[60,60]
Global screenColorR:Int[60,60]
Global screenColorG:Int[60,60]
Global screenColorB:Int[60,60]
For y=0 To 59
For x=0 To 59
screenChar[x,y] = Rnd(33,65)
screenColorR[x,y] = Rnd(255)
screenColorG[x,y] = Rnd(255)
screenColorB[x,y] = Rnd(255)
Next
Next
Local fpsCnt:Int = 0
Local fpsReal:Int = 0
Local fpsUpdate:Int = MilliSecs()
Local timeUpdate:Int = 0
Local timeCheck:Int = 0
Local upd:Int = MilliSecs()
While Not KeyHit(KEY_ESCAPE)
Cls
update = MilliSecs()
drawScreen()
timeCheck = MilliSecs()-update
SetColor(255,255,255)
DrawText("FPS: "+fpsReal,488,8)
DrawText("DrawTime: "+timeCheck+"ms",488,24)
Flip False
fpsCnt :+ 1
If MilliSecs() > fpsUpdate + 1000 Then
fpsReal = fpsCnt
fpsCnt = 0
fpsUpdate = MilliSecs()
End If
If MilliSecs() > upd+15 Then
upd = MilliSecs()
rndScreen()
End If
Wend
End
Function rndScreen()
For Local y:Int = 0 To 59
For Local x:Int = 0 To 59
screenChar[x,y] = Rnd(33,65)
screenColorR[x,y] = Rnd(255)
screenColorG[x,y] = Rnd(255)
screenColorB[x,y] = Rnd(255)
Next
Next
End Function
Function drawScreen()
For Local y:Int = 0 To 59
For Local x:Int = 0 To 59
SetColor(screenColorR[x,y],screenColorG[x,y],screenColorB[x,y])
DrawImage(font,x*8,y*8,screenChar[x,y])
Next
Next
End Function
[edit] Added fps and drawtime display.