DOS Days

Printing in the DOS Era


DOS was first and foremost an operating system for business users. Because it pre-dated the internet and even local networking, the transfer of information such as a document or spreadsheet from person to person was most commonly achieved by printing your work onto paper, often referred to as a hard copy, and physically sending those pieces of paper to the person.

Printers were a big deal for early PCs - if you had a PC it was highly likely you also had a printer. The IBM 5150 that kicked off the PC revolution in 1981 didn't come with either a parallel or serial port, so you would have needed to add an expansion card to connect a printer to. When the Model 5160 (PC/XT) arrived, its Monochrome Display Adapter card also provided a printer port.

The Epson FX-80 (left) and IBM Proprinter II (right)

We won't get into the differences between parallel and serial printers in this article, aside to say that the parallel port interface used by all PCs until the introduction of USB was the Centronics parallel interface - named after the company, Centronics, who pioneered early printing in the 1970s. Due to the ubiquity of this (or the absence of anything better) at the time of DOS' arrival, it was adopted as the standard for MS-DOS.

Most printers during this time were called impact printers. They got this name because the action of imprinting the ink on to the page was performed by physically striking the paper through a ribbon that had ink on it. Two of the most common types of impact printer are the dot matrix printer (which formed characters with a set of dots through a matrix of pins to create each character) and the daisywheel printer (which span a metal wheel until the correct character was under the impact head). The technology of inkjet and laser printers came later, and both of these are considered page printers not line printers. I will probably cover this topic in a separate article, as it's quite large.


Printing Directly in DOS

When MS-DOS arrived, there was really only rudimentary support for printing. With a printer attached to your printer port you could redirect output from the screen (known as the console) to the "line print terminal" device using a command like this:


LPT1: would be the device name of your PC's first printer port, but you might also have LPT2: and LPT3:. The colon after the device name is important. The '>' symbol in DOS tells the command-line interpreter to redirect output from CON (the console) to another device or file. So the command above would run the DIR command which would return a directory listing, and then DOS would redirect whatever it returned from the default output device (CON) to the device attached to LPT1:.

At the printer end, it would receive each character being transmitted (actually the ASCII code for the character was sent) and the printer would put it into a small memory buffer until a full line could be printed, which it would then do. If it's not already obvious, another generic name for a printer at the time was a line printer, since they would do their printing a line of text at a time. There was no printing 'language' used here, so it was really only useful for raw text printing.

The COPY command in DOS could also be used to send an entire text file to the printer, simply by executing something like:

COPY readme.txt LPT1:

From MS-DOS version 2.0 onwards, the PRINT command was provided. This was a print spooler which allowed you to send a print job to the printer and be able to continue working while the printing happened in the background. PRINT would handle the buffering of larger print jobs (using main memory) and sending them to the printer as and when the printer was ready to receive more.

The GRAPHICS command in DOS allowed you to print a repesentation of your graphical screen to the printer.

If you had PRINTER.SYS installed through your CONFIG.SYS startup file, you could switch code pages to print in different languages.


Printing in Applications

It took almost no time for the limitations of basic text printing to become a problem. Word processors allowed a document's author to create documents with different fonts and other typographical emphases such as bold, italics, underline and more. These required more of an understanding between the application and the printer so that the printer could interpret what was being received from the PC and print it correctly. Until a standard was created, each printer manufacturer had their own. This meant that applications needed to directly support either your specific printer model or be able to emulate one of the more common printers out there.

Two such common printers are shown at the top of this article - the Epson FX-80 and the IBM Proprinter. Epson defined their own set of what were known as "control codes" and IBM had a different set of control codes. These codes would be sent to the printer but not be printed directly - they existed solely to tell the printer something like "until you see this other control code, print everything from here onwards in bold.". These control codes became more and more advanced as time moved on, with the ability to tell the printer to position the print head at a specific point horizontally, to adjust line spacing, set the page length, change the dot size, set the font type and size, set justification, reverse the paper feed, select a specific paper type and size, and much more. Epson's set of control codes were known as ESC/P, since they all began with the ASCII Escape character. IBM's was called PPDS (Personal Printer Data Stream).

An application such as WordPerfect would come with a set of printer 'drivers' for a variety of different printer models, including the two I mentioned above. You would install whatever printer drivers you needed at the same time as installing the application onto your PC, and then you were up and running. If you replaced your printer at any point you might need to install a different printer driver in order for it to work (much like you would need to do today in a modern version of Windows), or run in one of the aforementioned emulation modes (Epson or IBM). By the time WordPerfect 5.1 arrived in late 1989 it supported over 450 different printers!

The "Additional Printers" option in WordPerfect 5.1


PCL and Postscript

With the advent of both the laser printer and inkjet printer in 1984 from Hewlett-Packard, PCL was born. Printer Command Language (PCL) worked in much the same way as Epson and IBM's, by sending control codes to the printer. Both lasers and inkjets however, are page printers not line printers. A page printer prints an entire page at a time instead of one line at a time - the key benefit is that they are much better-suited for printing graphics. There were at least 13 different versions (called 'levels') of PCL from 1984 through to 1995, each one expanding on earlier ones with more capability to support the latest enhancements in both printing hardware and software.

PostScript, commonly abbreviated to PS, was different to PCL. Created by Adobe Systems in 1984, PostScript was a complete programming language in its own right. It was more commonly seen on Apple Macintosh computers and the Apple LaserWriter printer. Much like PCL, PS went through several "levels" over time, with PS Level 2 being introduced in 1991 and PS Level 3 in 1997.


Old Printer Terminology Explained

For anyone born after the 1980s, printing terminology might sometimes seem rather confusing. Here's a short list of the most common abbreviations you may come across and what they mean:

  • Line feed - a button on most impact printers that would turn the printer's friction feed drum or tractor feed one line forward, causing the paper to move up a single text line in height.
  • Form feed - a button on most impact printers that would feed the "form" (the piece of paper) up a whole page - useful to quickly eject the current sheet or if using continuous paper move to the next full clean sheet.
  • Friction feed - a mechanism in old printers that controlled the movement of the paper through the printer. It held the paper tightly between two drums (hence the term 'friction'), and when going to print a new line it would push the paper up a line's height between the drums.
  • Tractor feed - a mechanism in old printers that controlled the movement of the paper through the printer. Using special paper (usually continuous) with tear-off strips on each side that had little holes all the way up. Printers typically came with a tractor feed accessory that would need to be installed in order to use tractor-fed paper. A rotating sprocket on each side of the accessory with lots of small protruding 'fingers' would go neatly into the holes on each side of tractor feed paper and when a line feed occurred the two sprockets would rotate causing the paper to go up a single line.
  • Fan fold paper - a type of continuous paper with pages connected together on the short side in 'fan fold' fasion where the bottom of sheet 1 was connected to the top of sheet 2, which was connected to the bottom of sheet 3, and so on. Usually this paper was designed for tractor feed so it had the perforated edges you could tear off.
  • Draft - a mode you can set on the printer if you just wanted to print in the lowest quality, so as not to use as much ink.
  • NLQ - Near Letter Quality. The quality of early printers wasn't great, with a printer's capability to support NLQ signifying that it could produce 'near-letter quality', suitable for business letters. This would typically instruct the printer to print the same line twice, thus causing a more black output but at the expense of printing time and more ink used.
  • LQ - Letter Quality. Better than draft or NLQ, letter quality was found on slightly more expensive printers and could produce output that matched high-quality electric typewriters.
  • Ink cartridge - a consumable cartridge that you installed into the printer. On impact printers like a dot matrix or daisywheel printer, these were a usually a black plastic casing that contained a printer ribbon with the ink on it. The ribbon itself would be turned slightly through each printing action to cause an even wear/usage of the ink on the cartridge evenly. Printer ribbons might last for 300 pages or more before needing to be replaced, whereby the whole cartridge (plastic included) would be replaced with a brand new one. In the early 2000s reconditioning became available where you could try your luck at re-applying ink onto an old cartridge's ribbon to make it useful again - mixed results, but not impossible.
  • Courier / Roman / Sans Serif / Prestige / Script - fonts that the printer would use, changing the printed text output to the chosen font even if standard raw text was chosen to be printed without any control codes that would alter the font type. Often, printers would come with built-in fonts for this purpose. Early laser printers even had font cartridges you could install in an expansion slot to expand the fonts available.
  • Pitch - the size of font to print in. 10 pitch would produce fairly small text output, 12 pitch was pretty standard for a letter.
  • TOF - Top of Form - like form feed, except a form feed couldn't detect when the start of the next page might start, so it would move forward an entire page's worth. TOF was better in that it could detect the top of the next page and stop the feed at that point.

Further Review

I have a couple of dot matrix printers in my collection, including a Citizen 120e with two unused ribbons, and a Star LC-200 with all the accessories and a ream of fan fold paper. Both are only 9-pin so the output quality isn't great. The Citizen can print at up 270 cps in draft mode or 54 cps in LQ mode. The Star is the baby brother of the better LC24-200, and canm print at up to 220 cps in draft or 37.5 cps in NLQ mode. Both support emulation of the Epson FX-850 and IBM Proprinter III.

If anyone is interested in seeing these printers in action, let me know via the Contact Us link below. The ribbons may need to be replaced (or replacement ink added) but the last time I checked they were both in good working order.