In the ASCII standard there are 33 control characters, such as code 7, BEL, which rings a terminal bell.
A form of control characters were introduced in the 1870 Baudot code: NUL and DEL.
This was because early terminals had very primitive mechanical or electrical controls that made any kind of state-remembering API quite expensive to implement, thus a different code for each and every function looked like a requirement.
For example, the sequence of code 2710, followed by the printable characters "[2;10H", would cause a Digital Equipment Corporation VT100 terminal to move its cursor to the 10th cell of the 2nd line of the screen.
Several standards exist for these sequences, notably ANSI X3.64, but the number of non-standard variations is large.
[1][2] Extended ASCII sets defined by ISO 8859 added the codes 12810 through 15910 as control characters.
This was primarily done so that if the high bit was stripped, it would not change a printing character to a C0 control code.
The other implementation is to take the ASCII code produced by the key and bitwise AND it with 0x1F, forcing bits 5 to 7 to zero.
Neither approach works to produce the DEL character because of its special location in the table and its value (code 12710), Ctrl-?
Keyboards also typically have a few single keys which produce control character codes.
Keyboards attached to stand-alone personal computers made in the 1980s typically use one (or both) of the first two methods.
More complex escape sequences were developed to take advantage of the flexibility of the new terminals, and indeed of newer printers.
The separators (File, Group, Record, and Unit: FS, GS, RS and US) were made to structure data, usually on a tape, in order to simulate punched cards.
Their numeric values are contiguous with the space character, which can be considered a member of the group, as a word separator.
Each sequence item starts with a RS character and ends with a line feed.
A widely used convention is to make the two characters preceding ETX a checksum or CRC for error-detection purposes.
This is handy because some media (such as sheets of paper produced by typewriters) can transmit only printable characters.
The negative acknowledge character (NAK) is a definite flag for, usually, noting that reception was a problem, and, often, that the current element should be sent again.
The acknowledge character (ACK) is normally used as a flag to indicate no problem detected with current element.
This technique, however implemented, avoids additional wires in the data cable devoted only to transmission management, which saves money.
A sensible protocol for the use of such transmission flow control signals must be used, to avoid potential deadlock conditions, however.
(Modern systems typically use a start bit to announce the beginning of a transmitted word— this is a feature of asynchronous communication.
In computing, it is often used for padding in fixed length records; to mark the end of a string; and formerly to give printing devices enough time to execute a control function.
Its 7-bit code is all-bits-on in binary, which essentially erased a character cell on a paper tape when overpunched.
Paper tape was a common storage medium when ASCII was developed, with a computing history dating back to WWII code breaking equipment at Biuro Szyfrów.
Non-erasable programmable ROMs are typically implemented as arrays of fusible elements, each representing a bit, which can only be switched one way, usually from one to zero.