For 'fun' I made a minimal character mapped display for the ssd1306. It is not designed to be fast - but for those times when you want to get some data out of a MCU with minimal resources - it might be just the job.
It is 'stripped back' - so it only allows strings to be printed - and although it 'offers' a choice of 'y' it only prints to 4 rows (in the case of a 32 pixel display) (So y = 0..7 will print to first row, 8..15 2nd row etc) It would save a few instructions to just have y = 0..3? (or 0..7 for a 64 pixel display)
As it stands - the character set itself is 768 bytes. I think that restricting this to upper case characters only would be a useful saving too (whilst still allowing numbers etc) By limiting it to ascii characters 32..90 would save a lot of flash. (And for the really small MCUs maybe XYZ could go too - who uses them anyway?)
Jorgen - please could you test with your PIC? If I cam find one I'll try an ATTiny13.
With my display it 'chokes at 400kHz on the i2c - it could be sped up a little by sending all 8 bytes of a character as a single transaction but it would entail a 9 byte buffer - or poking 0's into the lookup table before each character.
Martin