I can't remember all the details now. The main interpreter was MS C with CodeView in text mode was awesome. The routines were 68k assembly with pixel write modes, optimized character blt, and there was a scale-up routine. The only reason the sw implementation came close to hw was that the hw had quite a bit of setup which is quite a bit of overhead for small patterns which were typical (e.g. patterned horizontal rules).