La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1859 - DIRECCION DEL PUERTO PARALELO
Autor:  Guillermo Ordaya Espinoza
Me gustaria saber que función el la adecuada(VC5) para obtener la dirección del puerto paralelo 0x3f8, 0x2f8 automaticamente.

Gracias!!!

  Respuesta:  Amadeus
Dare una pequeña explicacion y luego decides como usarlas y en que programarlas.
Algunas de las direcciones de puertos prinicpales son:
020H - 023H Registros de la mascara de interrupcion.
040H - 043H Temporizador/Contador.
060H Entrada desde teclado.
061H Bocina (bits 0 y 1).
200H - 20FH Controlador de juego.
278H - 27FH Adaptador paralelo de impresora Lpt3.
2F8H - 2FFH Puerto serial COM2
378H - 37FH Adaptador paralelo de impresora Lpt2.
3B0H - 3BBH Adaptador de despliegue mono.
3BCH - 3BFH Adaptador paralelo Lpt1.
3C0H - 3CFH EGA/VGA.
3D0H - 3DFH Adaptador grafico de color
3F0H - 3F7H Controlador de disco duro.
3F8H - 3FFH Puerto serial Com1.
Aunque la practica recomendada es utilizar las interrupciones del DOS y del BIOS, puede con seguridad pasar por alto el BIOS cuando accese a los puertos 21H, 40-42H, 60H, 61H y 201H.
Por ejemplo, al arranque una rutina en ROM del BIOS busca el sistema por las direcciones de los adaptadores de puerto paralelo y seriales. Si la direccion del puerto serial es encontrado, el BIOS la coloca en su área de datos, empezando en la localidad de memoria 40:00H; si las direcciones de los puertos paralelos son encontrados, el BIOS la coloca en su área de datos, empezando en la localidad 40:08H. Cada localidad tiene espacio para entradas de una palabra. La tabla del BIOS para un sistema con 2 puertos seriales y 2 puertos paralelos se veria asi:
40:00 F803 COM1
40:02 F802 COM2
40:04 0000 No usada
40:06 0000 No usada
40:08 7803 LPT1
40:0A 7802 LPT2
40:0C 0000 No usada
40:0E 0000 No usada
En C la rutina quedaria asi.
unsigned GetPortAddr (int lptnum)
{
/* make a far pointer with segment 0x40 and offset 0x008+...
then return its value */
return *(unsigned far *)(MK-FP(0X40, 0X008 +(lptnum - 1) * 2));
}

Saludos a todos y espero que a alguien le sirva.

  Respuesta:  Elver Gomez Torva
creo que lo que lo que deseas es la dirección del puerto paralelo para enviar un archivo a la impresora, lo cual se hace de la siguiente manera:

void main ()
{
FILE *impresora;
impresora=fopen("LPT1", "w");/*LPT1 Nombre del puerto*/
if (!impresora)
{printf("la impresora no está lista");
}
fputc("Hola", impresora);
}