Every efficient way of doing this requires surface locking. Surface locking means that You can use blitter to move data (which is faster) to surface. If You don't find that fast enough You can map all letters (whole ascii code as graphics) in the initialisation tie of Your app to one surface (that is in video memory) (for moving You can use textout) Then You can use blitter to copy one letter after another each time You need to write to surface. That is the fastest way but You need to be quite careful to write an efficient routine for letter movement. Also You need to have one copy of whole ascii table for each font and each fontsize.