Parallel Port
Parallel Port
Parallel Port
There are many types of parallel ports, but the term has become most closely
A DB-25 connector often used for a
associated with the printer port or Centronics port found on most personal
parallel printer port on IBM PC
computers from the 1970s through the 2000s. It was an industry de facto
compatible computers, with the
standard for many years, and was finally standardized as IEEE 1284 in the late
printer icon.
1990s, which defined the Enhanced Parallel Port (EPP) and Extended Capability
Port (ECP) bi-directional versions. Today, the parallel port interface is virtually Type Point-to-point
non-existent because of the rise of Universal Serial Bus (USB) devices, along Production history
with network printing using Ethernet and Wi-Fi connected printers. Designer Centronics, IBM
The parallel port interface was originally known as the Parallel Printer Designed 1970-1981
Adapter on IBM PC-compatible computers. It was primarily designed to operate Manufacturer Centronics,
printers that used IBM's eight-bit extended ASCII character set to print text, but Dataproducts, Intel,
could also be used to adapt other peripherals. Graphical printers, along with a IBM, Compaq,
host of other devices, have been designed to communicate with the system. Nortel, etc
Superseded USB (1996)
by
Contents General specifications
This left the problem of sending the ASCII data to the printer. While a serial port
does so with the minimum of pins and wires, it requires the device to buffer up
the data as it arrives bit by bit and turn it back into multi-bit values. A parallel
port makes this simpler; the entire ASCII value is presented on the pins in
complete form. In addition to the seven data pins, the system also needed various IBM PC-compatible parallel port
control pins as well as electrical grounds. Wang happened to have a surplus stock pinout
of 20,000 Amphenol 36-pin micro ribbon connectors that were originally used
for one of their early calculators. The interface only required 21 of these pins, the rest were grounded or not connected. The
connector has become so closely associated with Centronics that it is now popularly known as the "Centronics connector".[3]
The Centronics Model 101 printer, featuring this connector, was released in 1970.[3] The host sent ASCII characters to the printer
using seven of eight data pins, pulling them high to +5V to represent a 1. When the data was ready, the host pulled the STROBE
pin low, to 0 V. The printer responded by pulling the BUSY line high, printing the character, and then returning BUSY to low
again. The host could then send another character. Control characters in the data caused other actions, like the CR or EOF. The
host could also have the printer automatically start a new line by pulling the AUTOFEED line high, and keeping it there. The host
had to carefully watch the BUSY line to ensure it did not feed data to the printer too rapidly, especially given variable-time
operations like a paper feed.[2][4]
The printer side of the interface quickly became an industry de facto standard, but manufacturers used various connectors on the
system side, so a variety of cables were required. For example, NCR used the 36-pin micro ribbon connector on both ends of the
connection, early VAX systems used a DC-37 connector, Texas Instruments used a 25-pin card edge connector and Data General
used a 50-pin micro ribbon connector. When IBM implemented the parallel interface on the IBM PC, they used the DB-25F
connector at the PC-end of the interface, creating the now familiar parallel cable with a DB25M at one end and a 36-pin micro
ribbon connector at the other.
In theory, the Centronics port could transfer data as rapidly as 75,000 characters per second. This was far faster than the printer,
which averaged about 160 characters per second, meaning the port spent much of its time idle. The performance was defined by
how rapidly the host could respond to the printer's BUSY signal asking for more data. To improve performance, printers began
incorporating buffers so the host could send them data more rapidly, in bursts. This not only reduced (or eliminated) delays due to
latency waiting for the next character to arrive from the host, but also freed the host to perform other operations without causing a
loss of performance. Performance was further improved by using the buffer to store several lines and then printing in both
directions, eliminating the delay while the print head returned to the left side of the page. Such changes more than doubled the
performance of an otherwise unchanged printer, as was the case on Centronics models like the 102 and 308.[4]
IBM
IBM released the IBM Personal Computer in 1981 and included a variant of the Centronics interface— only IBM logo printers
(rebranded from Epson) could be used with the IBM PC.[5] IBM standardized the parallel cable with a DB25F connector on the
PC side and the 36-pin Centronics connector on the printer side. Vendors soon released printers compatible with both standard
Centronics and the IBM implementation.
The original IBM parallel printer adapter for the IBM PC was designed to support 8-bit data bidirectionally in 1981. This allowed
the port to be used for other purposes, not just output to a printer. This was accomplished by allowing the data lines to be written
to by devices on either end of the cable, which required the ports on the host to be bidirectional. This feature saw little use, and
was removed in later revisions of the hardware. Years later, in 1987, IBM reintroduced the bidirectional interface with its IBM
PS/2 series, where it could be enabled or disabled for compatibility with applications hardwired not to expect a printer port to be
bidirectional.
Bi-Tronics
As the printer market expanded, new types of printing mechanisms appeared. These often supported new features and error
conditions that could not be represented on the existing port's relatively few status pins. While the IBM solution could support
this, it was not trivial to implement and was not at that time being supported. This led to the Bi-Tronics system, introduced by HP
on their LaserJet 4 in 1992. This used four existing status pins, ERROR, SELECT, PE and BUSY to represent a nibble, using two
transfers to send an 8-bit value. Bi-Tronics mode, now known as nibble mode, was indicated by the host pulling the SELECT line
high, and data was transferred when the host toggles the AUTOFEED low. Other changes in the handshaking protocols improved
performance, reaching 400,000 cps to the printer, and about 50,000 cps back to the host.[6] A major advantage of the Bi-Tronics
system is that it can be driven entirely in software in the host, and uses otherwise unmodified hardware - all the pins used for data
transfer back to the host were already printer-to-host lines.
All of these enhancements are collected as part of the IEEE 1284 standard. The first release in 1994 included original Centronics
mode ("compatibility mode"), nibble and byte modes, as well as a change to the handshaking that was already widely used; the
original Centronics implementation called for the BUSY lead to toggle with each change on any line of data (busy-by-line),
whereas IEEE 1284 calls for BUSY to toggle with each received character (busy-by-character). This reduces the number of
BUSY toggles and the resulting interruptions on both sides. A 1997 update standardized the printer status codes. In 2000, the EPP
and ECP modes were moved into the standard, as well as several connector and cable styles, and a method for daisy chaining up
to eight devices from a single port.[8]
Some host systems or print servers may use a strobe signal with a relatively low voltage output or a fast toggle. Any of these
issues might cause no or intermittent printing, missing or repeated characters or garbage printing. Some printer models may have
a switch or setting to set busy by character; others may require a handshake adapter.
Dataproducts
Dataproducts introduced a very different implementation of the parallel interface for their printers. It used a DC-37 connector on
the host side and a 50 pin connector on the printer side—either a DD-50 (sometimes incorrectly referred to as a "DB50") or the
block shaped M-50 connector; the M-50 was also referred to as Winchester.[9][10] Dataproducts parallel was available in a short-
line for connections up to 50 feet (15 m) and a long-line version using differential signaling for connections to 500 feet (150 m).
The Dataproducts interface was found on many mainframe systems up through the 1990s, and many printer manufacturers
offered the Dataproducts interface as an option.
A wide variety of devices were eventually designed to operate on a parallel port. Most devices were uni-directional (one-way)
devices, only meant to respond to information sent from the PC. However, some devices such as Zip drives were able to operate
in bi-directional mode. Printers also eventually took up the bi-directional system, allowing various status report information to be
sent.
Historical uses
Before the advent of USB, the parallel interface was adapted to access a number
of peripheral devices other than printers. One early use of the parallel port was
for dongles used as hardware keys which were supplied with application
software as a form of software copy protection. Other uses included optical disc
drives such as CD readers and writers, Zip drives, scanners, external modems,
gamepads, and joysticks. Some of the earliest portable MP3 players required a
parallel port connection for transferring songs to the device.[11] Adapters were
available to run SCSI devices via parallel. Other devices such as EPROM
programmers and hardware controllers could be connected via the parallel port.
HP C4381A CD-Writer Plus 7200
Series, showing parallel ports to
connect between a printer and the
Interfaces
computer.
Most PC-compatible systems in the 1980s and 1990s had one to three ports, with
communication interfaces defined like this:
Logical parallel port 1: I/O port 0x378, IRQ 7 (usually in monochrome graphics adapters)
Logical parallel port 2: I/O port 0x3bc, IRQ 7 (dedicated IO cards or using a controller built into the mainboard)
Logical parallel port 3: I/O port 0x278, IRQ 5 (dedicated IO cards or using a controller built into the mainboard)
If no printer port is present at 0x3BC, the second port in the row (0x378) becomes logical parallel port 1 and 0x278 becomes
logical parallel port 2 for the BIOS. Sometimes, printer ports are jumpered to share an interrupt despite having their own IO
addresses (i.e. only one can be used interrupt-driven at a time). In some cases, the BIOS supports a fourth printer port as well, but
the base address for it differs significantly between vendors. Since the reserved entry for a fourth logical printer port in the BIOS
Data Area (BDA) is shared with other uses on PS/2 machines and with S3 compatible graphics cards, it typically requires special
drivers in most environments. Under DR-DOS 7.02 the BIOS port assignments can be changed and overridden using the LPT1,
LPT2, LPT3 (and optionally LPT4) CONFIG.SYS directives.
Access
DOS-based systems make the logical parallel ports detected by the BIOS available under device names such as LPT1, LPT2 or
LPT3 (corresponding with logical parallel port 1, 2, and 3, respectively). These names derive from terms like Line Print Terminal,
Local Print Terminal, or Line PrinTer. A similar naming convention was used on ITS, DEC systems, as well as in CP/M and 86-
DOS (LST).
In DOS, the parallel printers could be accessed directly on the command line. For example, the command "TYPE
C:\AUTOEXEC.BAT > LPT1:" would redirect the contents of the AUTOEXEC.BAT file to the printer port. A PRN device
was also available as an alias for LPT1. Some operating systems (like Multiuser DOS) allow to change this fixed assignment by
different means. Some DOS versions use resident driver extensions provided by MODE, or users can change the mapping
internally via a CONFIG.SYS PRN=n directive (as under DR-DOS 7.02 and higher). DR-DOS 7.02 also provides optional built-
in support for LPT4 if the underlying BIOS supports it.
PRN, along with CON, AUX and a few others are invalid file and directory names in DOS and Windows, even in Windows XP.
There is even an MS-DOS device in path name vulnerability in Windows 95 and 98, which causes the computer to crash if the
user types "C:\CON\CON", "C:\PRN\PRN" or "C:\AUX\AUX" in the Windows Explorer address bar. Microsoft has released a
patch to fix this bug, but newly installed Windows 95 and 98 operating systems will still have the bug.
A special "PRINT" command also existed to achieve the same effect. Microsoft Windows still refers to the ports in this manner
in many cases, though this is often fairly hidden.
In SCO UNIX and Linux, the first parallel port is available via the filesystem as /dev/lp0. Linux IDE devices can use a paride
(parallel port IDE) driver.[12]
Current use
For consumers, USB and computer networks have replaced the parallel printer
port, for connections both to printers and to other devices.
Many manufacturers of personal computers and laptops consider parallel to be a Accton Etherpocket-SP parallel port
ethernet adaptor (circa 1990, DOS
legacy port and no longer include the parallel interface. Smaller machines have
drivers). Supports both coax and 10
less room for large parallel port connectors. USB-to-parallel adapters are
Base-T. Supplementary power is
available that can make parallel-only printers work with USB-only systems. drawn from a PS/2 port passthrough
There are PCI (and PCI-express) cards that provide parallel ports. There are also cable.
some print servers that provide interface to parallel port through network. USB-
to-EPP chips can also allow other non-printer devices to continue to work on
modern computers without a parallel port.[14]
For electronics hobbyists the parallel port is still often the easiest way to connect to an external circuit board. It is faster than the
other common legacy port (serial port), requires no serial-to-parallel converter, and requires far less interface logic and software
than a USB target interface. However, Microsoft operating systems later than Windows 95/98 prevent user programs from
directly writing to or reading from the LPT without additional software (kernel extensions).[15] Current CNC Milling Machines
also often make use of the parallel port to directly control the machine's motors and attachments.
IBM PC implementation
Port addresses
Traditionally IBM PC systems have allocated their first three parallel ports according to the configuration in the table below (if all
three printer ports exist).
If there is an unused slot, the port addresses of the others are moved up. (For example, if a port at 0x3BC does not exist, the port
at 0x378 will then become the first logical parallel port.)[16] The base address 0x3BC is typically supported by printer ports on
MDA and Hercules display adapters, whereas printer ports provided by the mainboard chipset or add-on cards rarely allow to be
configured to this base address. Therefore, in absence of a monochrome display adapter, a common assignment for the first
logical parallel port (and therefore also for the corresponding LPT1 DOS device driver) today is 0x378, even though the default is
still 0x3BC (and would be selected by the BIOS if it detects a printer port at this address). The IRQ lines are typically
configurable in the hardware as well. Assigning the same interrupt to more than one printer port should be avoided and will
typically cause one of the corresponding ports to work in polled mode only. The port addresses assigned to slot can be determined
by reading the BIOS Data Area (BDA) at 0000h:0408h.
Bit: 7 6 5 4 3 2 1 0
Base (Data port) Pin: 9 8 7 6 5 4 3 2
Program interface
In versions of Windows that did not use the Windows NT kernel (as well as DOS and some other operating systems), programs
could access the parallel port with simple outportb() and inportb() subroutine commands. In operating systems such as Windows
NT and Unix (NetBSD, FreeBSD, Solaris, 386BSD, etc.), the microprocessor is operated in a different security ring, and access
to the parallel port is prohibited, unless using the required driver. This improves security and arbitration of device contention. On
Linux, inb() and outb() can be used when a process is run as root and an ioperm() command is used to allow access to its base
address; alternatively, ppdev allows shared access and can be used from userspace if the appropriate permissions are set.
The cross-platform library for parallel port access, libieee1284, also is available on many Linux distributions and provides an
abstract interface to the parallel ports of the system. Access is handled in an open-claim-release-close sequence, which allows for
concurrent access in userspace.
Pinouts
The older parallel printer ports had an 8-bit data bus and four pins for control output (Strobe, Linefeed, Initialize, and Select In),
and five more for control input (ACK, Busy, Select, Error, and Paper Out). Its data transfer speed is at 150 kbit/s.[1]
The newer EPPs (Enhanced Parallel Ports) have an 8-bit data bus, and the same control pins as the normal parallel printer port.
Newer ports reach speeds of up to 2 MB/s.[17]
Inverted lines are true on logic low. If they are not inverted, then logic high is true.
Pin 25 on the DB25 connector might not be connected to ground on modern computers.
See also
Device file
Serial port
Parallel communication
Input/Output Base Address
IEEE 1284 which is sometimes called an "Enhanced Parallel Port"
Biostar, a Taiwanese computer component manufacturer partly known for having parallel port connectivity on
their motherboards
Hardware IC chips:
References
1. James, Kevin. PC interfacing and data acquisition : techniques for measurement, instrumentation and control.
Oxford ; Boston : Newnes, 2000. ISBN 9780750646246. p. 256
2. Centronics model 306 Technical Manual (https://archive.org/stream/bitsavers_centronicschnicalManualMar76_13
986426/37400040F_Model_306_Technical_Manual_Mar76_djvu.txt). Centronics. 1976.
3. Webster, Edward C. (2000). Print Unchained: Fifty Years of Digital Printing: A Saga of Invention and Enterprise.
West Dover, VT: DRA of Vermont. ISBN 0-9702617-0-5.
4. Centronics 101, 120A, 101AL, 102A, 306 Printers (http://chiclassiccomp.org/docs/content/computing/Centronics/
101_101A_101AL_102A_306_SpecificationsInterfaceInformation.pdf) (PDF). Archived (https://web.archive.org/w
eb/20161003124447/http://chiclassiccomp.org/docs/content/computing/Centronics/101_101A_101AL_102A_306
_SpecificationsInterfaceInformation.pdf) (PDF) from the original on 2016-10-03.
5. Durda IV, Frank (2004). "Centronics and IBM Compatible Parallel Printer Interface Pin Assignment Reference" (ht
tp://nemesis.lonestar.org/reference/computers/interfaces/centronics.html). Archived (https://web.archive.org/web/
20070913082745/http://nemesis.lonestar.org/reference/computers/interfaces/centronics.html) from the original on
2007-09-13. Retrieved 2007-10-05.
6. "Nibble Mode" (https://web.archive.org/web/20170406082832/http://madang.ajou.ac.kr/~ydpark/archive/compute
r/ppi/fapo/nibble.htm). Department of Chemistry, Ajou University. Archived from the original (http://madang.ajou.a
c.kr/~ydpark/archive/computer/ppi/fapo/nibble.htm) on 2017-04-06. Retrieved 2016-10-11.
7. EP 0640229 (https://worldwide.espacenet.com/textdoc?DB=EPODOC&IDX=EP0640229) Buxton, C.L. / Kohtz,
R.A. / Zenith Data Systems Corp.: Enhanced parallel port. filing date 15 May 1992
8. IEEE 1284: Parallel Ports (https://web.archive.org/web/20060523125620/http://www.nor-tech.com/solutions/dox/i
eee1284_parallel_ports.pdf) (PDF) (Technical report). Lava. 2002. Archived from the original (http://www.nor-tec
h.com/solutions/dox/ieee1284_parallel_ports.pdf) (PDF) on 23 May 2006. Retrieved 2 November 2007.
9. "Dataproducts D-Sub 50 Parallel" (http://www.hardwarebook.info/Dataproducts_D-Sub_50_Parallel). Hardware
Book. Archived (https://web.archive.org/web/20071214155050/http://www.hardwarebook.info/Dataproducts_D-Su
b_50_Parallel) from the original on 2007-12-14. Retrieved 2008-01-25.
10. "Dataproducts M/50 Parallel" (http://www.hardwarebook.info/Dataproducts_M/50_Parallel). Hardware Book.
Archived (https://web.archive.org/web/20071214105905/http://www.hardwarebook.info/Dataproducts_M/50_Paral
lel) from the original on 2007-12-14. Retrieved 2008-01-25.
11. Mitskaniouk, Oleg (2000-06-19). "The D-Link DMP-100 MP3 Player" (http://www.targetpc.com/hardware/audio/m
p3/dlink_dmp100/index2.shtml). Target PC Magazine. p. 2. Archived (https://web.archive.org/web/201505011408
44/http://www.targetpc.com/hardware/audio/mp3/dlink_dmp100/index2.shtml) from the original on 2015-05-01.
Retrieved 2012-07-20.
12. Barkakati, Naba (2006). Linux All-in-One Desk Reference For Dummies (https://books.google.com/books?id=1BP
AJhqtsQwC). For dummies (2 ed.). John Wiley & Sons. p. 482. ISBN 9780471793137. Retrieved 2015-09-11.
"Some IDE devices use a parallel port IDE adapter — that's what the PARIDE option refers to."
13. "Play Snappy Video SnapShot still-image capture adapter Series Specifications" (https://www.cnet.com/products/
play-snappy-video-snapshot-still-image-capture-adapter-series/specs/). CNET. Archived (https://web.archive.org/
web/20170806181332/https://www.cnet.com/products/play-snappy-video-snapshot-still-image-capture-adapter-s
eries/specs/) from the original on 2017-08-06. Retrieved 2017-08-06.
14. "Parallel port flatbed scanner works under USB on Win9x (Archive)" (https://archive.today/20120630214557/htt
p://myweb.polyu.edu.hk/~06900664r/ch341epp.htm). Archived from the original on 2012-06-30. Retrieved
2012-06-30.
15. "Archived copy" (https://web.archive.org/web/20140314200553/http://www.logix4u.net/parallel-port/16-inpout32dll
-for-windows-982000ntxp). Archived from the original (http://www.logix4u.net/parallel-port/16-inpout32dll-for-wind
ows-982000ntxp) on 2014-03-14. Retrieved 2014-03-14.
16. Frank Van Gilluwe, The Undocumented PC, 1994, page 703, ISBN 0-201-62277-7
17. Parallel Port Definition (http://www.techopedia.com/definition/3658/parallel-port) Archived (https://web.archive.or
g/web/20130103055347/http://www.techopedia.com/definition/3658/parallel-port) 2013-01-03 at the Wayback
Machine, Techopedia
Axelson, Jan (2000). Parallel Port Complete. Jan Axelson's Lakeview Research (http://www.janaxelson.com/parp
ort.htm). ISBN 0-9650819-1-5.
The (Linux) Parallel Port Subsystem by Tim Waugh (http://kernelbook.sourceforge.net/parportbook.pdf)
External links
Parallel Port (from BeyondLogic.org) standard (https://web.archive.org/web/20120301022928/http://retired.beyon
dlogic.org/spp/parallel.pdf), enhanced (EPP) (https://web.archive.org/web/20120306000230/http://retired.beyondl
ogic.org/epp/epp.pdf), extended (ECP) (https://web.archive.org/web/20120305192341/http://retired.beyondlogic.o
rg/ecp/ecp.pdf), examples (http://retired.beyondlogic.org/parlcd/parlcd.pdf)
EPP parallel printer port data capture project (http://electra.altervista.org/)
Linux I/O port programming mini-HOWTO (http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html)
The Linux 2.4 Parallel Port Subsystem (http://people.redhat.com/twaugh/parport/html/parportguide.html)
Parallel Port interfacing with Windows NT/2000/XP (https://web.archive.org/web/20081031213301/http://logix4u.n
et/Legacy_Ports/Parallel_Port/A_tutorial_on_Parallel_port_Interfacing.html)
Parallel port complete: programming, interfacing & using the PC's parallel printer port (https://books.google.com/b
ooks?id=hjEAE9BMaYQC&lpg=PA171&ots=aqsDcGTGm3&dq=parallel%20port%20history&pg=PP1#v=onepag
e&q&f=false)
PyParallel (https://web.archive.org/web/20101124173622/http://pyserial.sourceforge.net/pyparallel.html) - API for
Python programming language
Linux ppdev reference (http://people.redhat.com/twaugh/parport/html/parportguide.html)
libieee1284 homepage (http://cyberelk.net/tim/software/libieee1284/)
MSDN: Roadmap for Developing Parallel Device Drivers (http://msdn.microsoft.com/en-us/library/windows/hardw
are/ff544788%28v=VS.85%29.aspx)
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using
this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia
Foundation, Inc., a non-profit organization.