# IBM 2741

The IBM 2741 is a printing computer terminal that was introduced in 1965. Compared to the teletypewriter machines that were commonly used as printing terminals at the time, the 2741 offers 50% higher speed, much higher quality printing, quieter operation, interchangeable type fonts, and both upper and lower case letters.
It was used primarily with the IBM System/360 series of computers, but was used with other IBM and non-IBM systems where its combination of higher speed and letter-quality output was desirable. It was influential in the development and popularity of the APL programming language.
It was supplanted, starting in the mid-1970s, primarily by printing terminals using daisy wheel mechanisms.

## Design

The IBM 2741 combines a ruggedized Selectric typewriter mechanism with IBM SLT electronics and an RS-232-C serial interface. It operates at about 14.1 characters per second with a data rate of 134.5 bits/second (one start bit, six data bits, an odd parity bit, and one and a half stop bits). In contrast to serial terminals employing ASCII code, the most significant data bit of each character is sent first.
As with the standard office Selectrics of the day, there were 88 printing characters (not quite enough for the entire EBCDIC or ASCII printing character set including the lower case alphabet) plus space and a few nonprinting control codes, more than can be represented with six data bits, so shift characters are used to allow the machine's entire character set to be used. This could cause a significant reduction in the print speed since printing "Armonk, New York, U.S." requires 10 shift characters resulting in a total of 32 characters transmitted to print 22 characters.
The machine was packaged into its own small desk, giving the appearance of square tabletop with a Selectric typewriter partly sunken into the surface, with the electronics in a vertically oriented chassis at the rear. This allowed a significant reduction in the noise it generated. It supplanted the earlier IBM 1050, which was more expensive and cumbersome, in remote terminal applications. The IBM 1050 and its variations were designed for a higher duty cycle and so were frequently used as console devices for computers such as the IBM 1130 and IBM System/360. By contrast, the 2741 was primarily focused on remote terminal applications.

### Character codes

The IBM 2741 came in two different varieties, one using "correspondence coding" and the other using either "PTT/BCD coding" or "PTT/EBCD coding". These refer to the positioning of the characters around the typeball and, therefore, the tilt/rotate codes that have to be applied to the mechanism to produce a given character. A "correspondence coding" machine can use type elements from a standard office Selectric (i.e. elements used for "office correspondence"). "PTT/BCD coding" and "PTT/EBCD coding" machines need special elements, and did not have as wide a variety of fonts available.$^{:12,15–20}$ The IBM 1050 and its derivatives were only available in PTT/BCD coding. The two element types are physically interchangeable, but code-incompatible, so a type element from, say, a System/360 console printer (a variety of IBM 1050) produces gibberish on a "correspondence coding" 2741 or an office Selectric, and vice versa.
The two varieties of IBM 2741 use different character codes on the serial interface as well, so software in the host computer needed to have a way to distinguish which type of machine each user had. One way this was accomplished was by having the user type a unique character such as # , 9 or a standard command such as "login" immediately after connecting. The host software would recognize which code was used by the value of the characters it received.

### Line protocol

The protocol is simple and symmetric. Each message begins with a control character called "circle D" in the documentation, shown as , and ends with a "circle C" . Each message was assumed to begin with the shift mode in lower case.
When the remote end is sending, the local keyboard is locked.
The "Receive Interrupt" feature allows the operator to interrupt the sending machine and regain control by pressing a special "Attention" key (labeled ATTN). This key causes the 2741 to send a continuous "spacing condition" for 200 or more milliseconds.$^{:13}$ This will be recognized by the receiving system as a framing error (a start bit that is not followed by a stop bit in the expected time). (The break key on ASCII terminals works the same way: continuous spacing is a "break condition" used to signal the remote end of an interruption.) If the attention signal is honored, it causes the remote system to stop sending data, prepare to receive data from the 2741, and send a "circle C", meaning "end of message". Upon receipt of the "circle C" the local 2741 unlocks its keyboard and the operator can send another input to the system.
Protocol symmetry allows two people using 2741s to communicate with each other with no computer in between, but this was a rare configuration.

## Applications

The 2741 was initially developed and marketed for use with the IBM Administrative Terminal System (ATS/360). ATS is an interactive, multi-user text editing and storage system implemented in the mid-1960s using IBM System/360 assembly language.
The 2741's existence encouraged the development of other remote terminal systems for the IBM System/360, particularly systems that could benefit from the high print quality, interchangeable typing elements, and other advantages of its Selectric mechanism.

### APL\360

The IBM 2741 became closely associated with the APL programming language. As originally proposed by Dr. Kenneth Iverson, APL required a large variety of special characters. IBM implemented it as a timesharing system on the IBM System/360, calling it APL\360. It required the use of an IBM 2741 or IBM 1050 with an APL typeball. There were only 26 alphabet characters, all displayed as upper case italic, even though they were typed with the machine in lower case mode. The "shifted" keystroke characters provided many of the special symbols with the remainder being handled by overstrike.
Keyboard layout for use with the APL typeball :

### ALGOL 68

Similar to APL, ALGOL 68 was defined with a large number of special characters. Many of them ( ∨, ∧, ¬, ≠, ≤, ≥, ×, ÷, ⌷, ↑, ↓, ⌊, ⌈ and ⊥ ) were available on the APL Selectric typeball, so this element was used to prepare the ALGOL 68 programming language standard Final Report (August 1968), even though APL and ALGOL have no direct relationship.

## Related machines

The IBM 2740 is a similar terminal that lacked the interrupt feature and dialup capability, but is capable of operating in point-to-point, multipoint or broadcast mode. For the better use of multipoint lines, it could add a data buffer, letting the line run at 600bit/s without being constrained by the speed of the typing mechanism.
Some later IBM Selectric-based machines, such as the Communicating Magnetic Card Selectric Typewriter, can emulate the 2741 and be used in its place.
IBM sold the underlying Selectric mechanism to other manufacturers, who produced 2741 clones at lower cost. Some of these were integrated into larger systems instead of being sold as standalone terminals. For example, a 2741-type mechanism formed the principal user interface for a series of machines from the 1960s and 1970s built in the United Kingdom by Business Computers Ltd.

## Decline

The 2741 and similar Selectric-based machines were supplanted by ASCII terminals using the Xerox Diablo 630 "daisy wheel" and similar print mechanisms where hard copy was required. These offered equivalent print quality, better reliability, twice the speed (30 char/s), and lower cost than the 2741. They could use a variety of fonts (including APL) via interchangeable print wheels and, unlike the 2741, supported the entire ASCII printing character set. When hard copy wasn't needed, video terminals often replaced them. The IBM 3767 terminal, which used a dot-matrix printer capable of 80 or 120 char/s, was an alternative replacement.

## Character sets
### Function codes

The function codes were independent of the character set used and the shift state.
| Bit value | Code | Meaning |
| C 8 4 | PN | Punch On |
| A 8 4 | BY | Bypass |
| B 8 4 | RES | Restore |
| B A C 8 4 | PF | Punch Off |
| 8 4 1 | RS | Reader stop |
| A C 8 4 1 | LF | Line feed |
| B C 8 4 1 | NL | New line |
| B A 8 4 1 | HT | Horizontal tab |
| 8 4 2 | UC | Upper case |
| A C 8 4 2 | EOB | End of block |
| B C 8 4 2 | BS | Backspace |
| B A 8 4 2 | LC | Lower case |
| C 8 4 2 1 | EOT | End of transmission |
| A 8 4 2 1 | PRE | Prefix |
| B 8 4 2 1 | IL | Idle |
| B A C 8 4 2 1 | DEL | Delete |
| C | Space | Space |
Circle-D used a code assigned to a printing, non-function character – 8 2 1 (EBCD '#'). It was identified as a control code based on its position as the first character in a transmission,

### PTTC/EBCD code

| Bit value | Lower case | Upper case |
| B A 8 2 1 | . | ¬ |
| B C 8 2 1 | $ | ! |
| A C 8 2 1 | , | | |
| 8 2 1 | # | " |
| A | @ | ¢ |
| B A C | & | + |
| B | - | _ |
| A C | / | ? |
| 1 | 1 | = |
| 2 | 2 | < |
| 4 | 4 | : |
| C 4 1 | 5 | % |
| C 4 2 | 6 | ' |
| 4 2 1 | 7 | > |
| 8 | 8 | * |
| C 8 1 | 9 | ( |
| C 8 2 | 0 | ) |
| B A 1 | a | A |
| B A 2 | b | B |
| B A C 2 1 | c | C |
| B A 4 | d | D |
| B A C 4 1 | e | E |
| B A C 4 2 | f | F |
| B A 4 2 1 | g | G |
| B A 8 | h | H |
| B A C 8 1 | i | I |
| B C 1 | j | J |
| B C 2 | k | K |
| B 2 1 | l | L |
| B C 4 | m | M |
| B 4 1 | n | N |
| B 4 2 | o | O |
| B C 4 2 1 | p | P |
| B C 8 | q | Q |
| B 8 1 | r | R |
| A C 2 | s | S |
| A 2 1 | t | T |
| A C 4 | u | U |
| A 4 1 | v | V |
| A 4 2 | w | W |
| A C 4 2 1 | x | X |
| A C 8 | y | Y |
| A 8 1 | z | Z |