LP26 Line Printer - KS10FPGA/KS10FPGA GitHub Wiki

The LP26 was a DEC badged Dataproducts B600 printer. Quoting the service manual:

"B-series printers are general purpose, continuous steel band, solid font impact printers designed as output devices for use with electronic information processing systems such as data communications/data entry terminals and dedicated minicomputer-based systems where reliable operation in a medium duty cycle environment is required. They are designed to provide a throughput of 300 or 600 lines per minute in a typical printing application, using a 64-character ASCII character set."

The LP26 (and the LP20 interface) provided support for both Tape Controlled Vertical Format Units and the newer Direct Access Vertical Format Units.

Vertical Format Units

Tape Controlled Vertical Format Unit (TCVFU)

The Tape Controlled Vertical Format Unit used a Punched Tape to set the vertical formatting. The TCVFU was re-programmed by swapping the tape. In the LP26, the vertical formatting data was from read from tape and processed digitally.

Direct Access Vertical Format Unit (DAVFU)

The DAVFU was fully write-only software programmable. Like the the TCVFU, the DAVFU supported 144 lines and 12 channels.

DAVFU Loading

Data is loaded into the DAVFU started with a Start Load Code, a sequence of data bytes, followed by a Stop Load Code. The DAVFU programming works on 12-bit words, so two bytes of data are required to create a single DAVFU word. Data is loaded into the DAVFU, low byte first followed by the high byte. Only the six LSBs from each word are used. As the DAVFU is loaded with data, the VFU keeps track of the number of lines on the page. Any attempt to overrun the page size will result in the printer going OFFLINE and indicating that the DAVFU is no longer ready (CSRA[DAVFU] = 0). This is tested by the printer diagnostics DSLPA Test 114.

DAVFU Start Load Codes

The DVFU Start Load Code of 154 (octal) with the PI line asserted initiates the DVFU memory load routine using 6 LPI as the line spacing, regardless of the current printer line spacing.

The DVFU Start Load Code of 155 (octal) with the PI line asserted initiates the DVFU memory load routine using 8 LPI as the line spacing, regardless of the current printer line spacing.

The DVFU Start Load Code of 156 (octal) with the PI line asserted initiates the DVFU memory load routine using the current printer line spacing as the DVFU line spacing.

Note: When the DVFU is being loaded, the data bits transferred to the printer are munged as follows:

Printer Data Munging

Note: Not only are the bits munged, the bits are renumbered from [7:0] to [8:1] at the printer interface.

Because the MSB of the data is used to set the PI bit, the apparent start codes as seen by the KS10 software are 354, 355, and 356 and these are the values you will see in the Diagnostics and in the Monitor software.

DAVFU Stop Load Codes

The DVFU Stop Load Code of 157 (octal) with the PI line asserted terminates the DVFU memory load routine. Per all the reasons describe in the previous section, the apparent Stop Code is 357 (octal).

DAVFU Use

The DAVFU can generate absolute page motion (go directly to a position on the paper) or relative page motion (slew some lines down on the page).

These are described in the following sections.

Absolute Motion (Channel Codes)

In this mode, the DAVFU moves directly to the next line in the form having the specified channel number. This occurs when the RAMD[PI] bit is asserted, and data bit-5 of the data (SLEW) is not asserted. Under these conditions, the four least significant bits of the data specify the DVFU channel number. The DVFU moves the paper downward, on line at a time, until the associated channel is found. The channel number must be between 1 and 12 otherwise an error condition exists.

Channel Commands

Code
Octal

PI

Data Bits

Lines
Slewed

8

7

6

5

4

3

2

1

000

1

x

x

x

0

0

0

0

0

1

001

1

x

x

x

0

0

0

0

1

2

002

1

x

x

x

0

0

0

1

0

3

003

1

x

x

x

0

0

0

1

1

4

004

1

x

x

x

0

0

1

0

0

5

005

1

x

x

x

0

0

1

0

1

6

006

1

x

x

x

0

0

1

1

0

7

007

1

x

x

x

0

0

1

1

1

8

010

1

x

x

x

0

1

0

0

0

9

011

1

x

x

x

0

1

0

0

1

10

012

1

x

x

x

0

1

0

1

0

11

013

1

x

x

x

0

1

0

1

1

12

014

1

x

x

x

0

1

1

0

0

13*

015

1

x

x

x

0

1

1

0

1

14*

016

1

x

x

x

0

1

1

1

0

15*

017

1

x

x

x

0

1

1

1

1

16*

*Note: This setting is invalid. Using this setting will result in the Printer going OFFLINE and indicating DAVFU not ready (CSRA[VFURDY] = 0)

Channel commands move perform the vertical motion before printing the buffer.

Relative Motion (Slew)

Another method of moving paper using the PI line results in vertical slews of a specified number of lines within the form, relative to the current print line.

This occurs when the RAMD[PI] bit is asserted, and data bit-5 of the data (SLEW) is asserted.

Under these conditions, the four least significant bits of the data specify the number of lines to slew relative to the current line on the paper. This relative motion will occur even the DAVFU is un-programmed. The channel numbers are decoded as follows:

Slew Commands

Code
Octal

PI

Data Bits

Channel

8

7

6

5

4

3

2

1

000

1

x

x

x

1

0

0

0

0

0 (CR)*

001

1

x

x

x

1

0

0

0

1

1

002

1

x

x

x

1

0

0

1

0

2

003

1

x

x

x

1

0

0

1

1

3

004

1

x

x

x

1

0

1

0

0

4

005

1

x

x

x

1

0

1

0

1

5

006

1

x

x

x

1

0

1

1

0

6

007

1

x

x

x

1

0

1

1

1

7

010

1

x

x

x

1

1

0

0

0

8

011

1

x

x

x

1

1

0

0

1

9

012

1

x

x

x

1

1

0

1

0

10

013

1

x

x

x

1

1

0

1

1

11

014

1

x

x

x

1

1

1

0

0

12

015

1

x

x

x

1

1

1

0

1

13

016

1

x

x

x

1

1

1

1

0

14

017

1

x

x

x

1

1

1

1

1

15

*Note: Treated as a Carriage Return.

Error Conditions

ANSI compliant printers support up to 143 lines-per-page. Attempting to load more than 143 lines will result in the printer going off-line and asserting a not ready DAVFU status (CSRA[DAVFU] = 0) indication. This length is not arbitrary but is consistent with the ANSI standard and is tested by the DSLPA Diagnostic Test 112.

The DAVFU memory can be cleared (and the DAVFU made “Not Ready” by any of the following methods:

  1. Sending two Start Load Codes, or
  2. Sending a Start Load Code with no Stop Load Code, or
  3. Sending a Start Load Code followed immediately by a Stop Load Code with no data.
⚠️ **GitHub.com Fallback** ⚠️