Jo, qué antiguo suena esto, y en realidad hace sólo 10 o 15 años la mayoría de impresoras eran matriciales.
A ver, que hago memoria. Supongo que la impresora usa interface paralelo Centronics. Es de lo más simple de usar, y es lo primero que tienes que estudiar. Básicamente, para enviar un byte a la impresora, hay que comprobar el estado de algunas señales que genera la impresora (ACK, Busy, y alguna más), y si la impresora está lista para recibir, enviarle el byte. Enviar un byte consiste en poner los 8 bits del byte en las patillas D0 a D7, y dar un pulso en la patilla Strobe (no recuerdo ahora la polaridad de esta señal). Todas las señales son TTL, así que las puedes manejar directamente con los ports de un microcontrolador (no dices si te refieres a un microcontrolador o un microprocesador).
Una vez que sepas como enviar bytes, ya se trataría de saber qué es lo que hay que enviar. En principio, en el 99% de las impresoras matriciales, funcionan los códigos ASCII, exactamente igual que si enviaras datos a un terminal, es decir, toda la tabla de caracteres, el retorno de carro, etc. Es decir, si por ejemplo mandas un byte con valor 65, la impresora imprimirá una "A". Para imprimir y nada más, es así de simple.
Luego ya, si quieres hacer cosas más raras, empiezan las complicaciones. Me refiero por ejemplo, a cambiar el tamaño o tipo de letra, dejar microespacios entre caracteres, cambiar el número de columnas, imprimir gráficos, etc. Todo eso depende del estándar que utilice la impresora, y ya varía mucho. La mayoría utilizaban el estándar de Epson (creo que se llamaba ESC-P), pero había otros. Eso depende del modelo de impresora, pero en general, se trata de enviar combinaciones de caracteres. En el estandar de Epson creo que estas cosas "especiales" se hacían enviando Escape (27) seguido de otro u otros valores, que correspondían a distintos comandos.