Если поменять функции HL и DE, то вместо
Код:
  LD  С,(DE)
  ~ROLL С
  LD A,(HL)
  OR C
  LD (HL),A
можно писать
Код:
  LD  A,(DE)
  ~ROLL A
  OR (HL)
  LD (HL),A
Так чуть короче, чуть быстрее, и регистр BC полностью свободен.

Когда литеру шлёпаем в два знакоместа, то можно первое знакоместо проходить вниз, а второе вверх. Убираются PUSH POP, и сразу получаем адрес для следующего символа.

Шесть сдвигов можно заменить двумя циклическими сдвигами в другую сторону с одним AND.

Если размер важнее скорости, то можно свернуть все DUP-ы.

А если скорость важнее размера, то можно как нибудь свести эти четыре варианта печати, чтобы они друг друга по очереди вызывали. Или если печатать не символ, а сразу строку, то вообще шли друг за другом по кольцу.
Или может быть печатали сразу с двух литер в одно знакоместо.
Или даже имели сразу сдвинутые шрифты.