possible solution: set sprites as they come on screen (keep track of sprites offscreen and replace those with ones that come on screen)
If you're using user-set variables for your sprites, I would recommend not even using SPSET (assuming you have x/y data arrays for your sprites) but using GCOPY to display them.
I made the tests and calling GCOPY 512 times in a sprite-rendering fashion (16x16 blocks) gives an average 90-92ms overhead in every loop iteration where rendering is required. Of course a more elaborated system can be done to only re-render objects whose position/graphics have been modified but it just adds more code and complexity to your program.
I think I'll do this:
1) look which blocks are offscreen ( bc. I remove sprites of the offscreen blocks. So those sprites are usable.)
2) If a block should be onscreen (I get this from the coords.) then use a available sprite.
3) Rewright code for scrolling, zooming and other sprite related stuff. (should not be to hard I just use a function to look for which sprites I need to move/scale etc.)
little thing that would still mess it up: having more then 510 blocks on screen. (hope no one does that bc. that will take about an hour to do manualy+ it would be pretty useless)