Hay dos formas de trabajar con los puertos, una es leyendo y escribiendo en ellos sin mas tramites, lo cual es sencillo pero complica mucho la sincronización. La otra forma es esperar a una interrupción de hardware que indica si el puerto está listo para ser leido o listo para ser escrito.
La sentencia que buscas es Port[], que en realidad es un vector cuyo indice es una posición de memoria, como es un vector al estar a la izquierda de una asignación estas escribiendo en el puerto y si está a la derecha estas leyendo:
Port[$3BC] :=5;
A:=Port[$3BC];
En el primer caso se está enviado el valor 5 hacia el puerto paralelo 1 (LPT1), en el segundo se está leyendo un valor de ese puerto.
Como el puerto paralelo es, valga la redundancia, comunicación paralela, esto significa que el byte completo viaja de una sola vez por el cable, cada bit viaja al mismo tiempo por un cable separado, tu pregunta de cómo enviar un 2 binario por el pin 5 no significa que enviando un 2 por el puerto el pin 5 se activará dos veces, de hecho el pin 5 no se activa cuando envias un 2 (el 4 y el 2 son los que se activan para el valor 5).
Como el tema es bastante largo de explicar te remito a un texto que tiene ejemplos en Pascal.
http://galeon.hispavista.com/jcgr/ (en inglés).