Blog Archive

Friday, May 12, 2023

05-12-2023-1315 - binary-coded decimal (BCD) , etc. (draft)

In digital logic, a don't-care term[1][2] (abbreviated DC, historically also known as redundancies,[2] irrelevancies,[2] optional entries,[3][4] invalid combinations,[5][4] vacuous combinations,[6][4] forbidden combinations,[7][2] unused states or logical remainders[8]) for a function is an input-sequence (a series of bits) for which the function output does not matter. An input that is known to never occur is a can't-happen term.[9][10][11][12] Both these types of conditions are treated the same way in logic design and may be referred to collectively as don't-care conditions for brevity.[13] The designer of a logic circuit to implement the function need not care about such inputs, but can choose the circuit's output arbitrarily, usually such that the simplest circuit results (minimization).

Don't-care terms are important to consider in minimizing logic circuit design, including graphical methods like Karnaugh–Veitch maps and algebraic methods such as the Quine–McCluskey algorithm. In 1958, Seymour Ginsburg proved that minimization of states of a finite-state machine with don't-care conditions does not necessarily yield a minimization of logic elements. Direct minimization of logic elements in such circuits was computationally impractical (for large systems) with the computing power available to Ginsburg in 1958.[14] 

https://en.wikipedia.org/wiki/Don%27t-care_term

Examples

Don't-care terms to get minimal circuit
ba
dc
00 01 11 10
00 1 0 0 1
01 0 0 0 1
11 0 0 0 1
10 1 0 0 1
Karnaugh map for lower left segment
ba
dc
00 01 11 10
00 1 0 0 1
01 0 0 0 1
11 x x x x
10 1 0 x x
Digits in 7-segment display
ba
dc
00 01 11 10
00 Dígito c0.svg Dígito c1.svg Dígito c3.svg Dígito c2.svg
01 Dígito c4.svg Dígito c5.svg Dígito c7.svg Dígito c6.svg
11



10 Dígito c8.svg Dígito c9.svg

Examples of don't-care terms are the binary values 1010 through 1111 (10 through 15 in decimal) for a function that takes a binary-coded decimal (BCD) value, because a BCD value never takes on such values (so called pseudo-tetrades); in the pictures, the circuit computing the lower left bar of a 7-segment display can be minimized to a b + a c by an appropriate choice of circuit outputs for dcba = 1010…1111.

Write-only registers, as frequently found in older hardware, are often a consequence of don't-care optimizations in the trade-off between functionality and the number of necessary logic gates.[15]

Don't-care states can also occur in encoding schemes and communication protocols.[nb 1]

X value

"Don't care" may also refer to an unknown value in a multi-valued logic system, in which case it may also be called an X value or don't know.[16] In the Verilog hardware description language such values are denoted by the letter "X". In the VHDL hardware description language such values are denoted (in the standard logic package) by the letter "X" (forced unknown) or the letter "W" (weak unknown).[17]

An X value does not exist in hardware. In simulation, an X value can result from two or more sources driving a signal simultaneously, or the stable output of a flip-flop not having been reached. In synthesized hardware, however, the actual value of such a signal will be either 0 or 1, but will not be determinable from the circuit's inputs.[17]

Power-up states

Further considerations are needed for logic circuits that involve some feedback. That is, those circuits that depend on the previous output(s) of the circuit as well as its current external inputs. Such circuits can be represented by a state machine. It is sometimes possible that some states that are nominally can't-happen conditions can accidentally be generated during power-up of the circuit or else by random interference (like cosmic radiation, electrical noise or heat). This is also called forbidden input.[18] In some cases, there is no combination of inputs that can exit the state machine into a normal operational state. The machine remains stuck in the power-up state or can be moved only between other can't-happen states in a walled garden of states. This is also called a hardware lockup or soft error. Such states, while nominally can't-happen, are not don't-care, and designers take steps either to ensure that they are really made can't-happen, or else if they do happen, that they create a don't-care alarm indicating an emergency state[18] for error detection, or they are transitory and lead to a normal operational state.[19][20][21]

See also

Notes


Examples of encoding schemes with don't-care states include Hertz encoding, Chen–Ho encoding and Densely packed decimal (DPD).

 

 https://en.wikipedia.org/wiki/Don%27t-care_term

 https://en.wikipedia.org/wiki/Category:Logic

In computing and electronic systems, binary-coded decimal (BCD) is a class of binary encodings of decimal numbers where each digit is represented by a fixed number of bits, usually four or eight. Sometimes, special bit patterns are used for a sign or other indications (e.g. error or overflow).

In byte-oriented systems (i.e. most modern computers), the term unpacked BCD[1] usually implies a full byte for each digit (often including a sign), whereas packed BCD typically encodes two digits within a single byte by taking advantage of the fact that four bits are enough to represent the range 0 to 9. The precise 4-bit encoding, however, may vary for technical reasons (e.g. Excess-3).

The ten states representing a BCD digit are sometimes called tetrades[2][3] (the nibble typically needed to hold them is also known as a tetrade) while the unused, don't care-states are named pseudo-tetrad(e)s [de],[4][5][6][7][8] pseudo-decimals[3] or pseudo-decimal digits.[9][10][nb 1]

BCD's main virtue, in comparison to binary positional systems, is its more accurate representation and rounding of decimal quantities, as well as its ease of conversion into conventional human-readable representations. Its principal drawbacks are a slight increase in the complexity of the circuits needed to implement basic arithmetic as well as slightly less dense storage.

BCD was used in many early decimal computers, and is implemented in the instruction set of machines such as the IBM System/360 series and its descendants, Digital Equipment Corporation's VAX, the Burroughs B1700, and the Motorola 68000-series processors. BCD per se is not as widely used as in the past, and is unavailable or limited in newer instruction sets (e.g., ARM; x86 in long mode). However, decimal fixed-point and decimal floating-point formats are still important and continue to be used in financial, commercial, and industrial computing, where the subtle conversion and fractional rounding errors that are inherent in binary floating point formats cannot be tolerated.[11] 

https://en.wikipedia.org/wiki/Binary-coded_decimal#Pseudo-tetrade

Zoned decimal

Some implementations, for example IBM mainframe systems, support zoned decimal numeric representations. Each decimal digit is stored in one byte, with the lower four bits encoding the digit in BCD form. The upper four bits, called the "zone" bits, are usually set to a fixed value so that the byte holds a character value corresponding to the digit. EBCDIC systems use a zone value of 1111 (hex F); this yields bytes in the range F0 to F9 (hex), which are the EBCDIC codes for the characters "0" through "9". Similarly, ASCII systems use a zone value of 0011 (hex 3), giving character codes 30 to 39 (hex).

For signed zoned decimal values, the rightmost (least significant) zone nibble holds the sign digit, which is the same set of values that are used for signed packed decimal numbers (see above). Thus a zoned decimal value encoded as the hex bytes F1 F2 D3 represents the signed decimal value −123:

F1 F2 D3
1  2 −3

EBCDIC zoned decimal conversion table

BCD digit Hexadecimal EBCDIC character
0+ C0 A0 E0 F0 { (*)   \ (*) 0
1+ C1 A1 E1 F1 A ~ (*)   1
2+ C2 A2 E2 F2 B s S 2
3+ C3 A3 E3 F3 C t T 3
4+ C4 A4 E4 F4 D u U 4
5+ C5 A5 E5 F5 E v V 5
6+ C6 A6 E6 F6 F w W 6
7+ C7 A7 E7 F7 G x X 7
8+ C8 A8 E8 F8 H y Y 8
9+ C9 A9 E9 F9 I z Z 9
0− D0 B0     }  (*) ^  (*)    
1− D1 B1     J      
2− D2 B2     K      
3− D3 B3     L      
4− D4 B4     M      
5− D5 B5     N      
6− D6 B6     O      
7− D7 B7     P      
8− D8 B8     Q      
9− D9 B9     R      

(*) Note: These characters vary depending on the local character code page setting.

Fixed-point zoned decimal

Some languages (such as COBOL and PL/I) directly support fixed-point zoned decimal values, assigning an implicit decimal point at some location between the decimal digits of a number. For example, given a six-byte signed zoned decimal value with an implied decimal point to the right of the fourth digit, the hex bytes F1 F2 F7 F9 F5 C0 represent the value +1,279.50:

F1 F2 F7 F9 F5 C0
1  2  7  9. 5 +0

BCD in computers

IBM

IBM used the terms Binary-Coded Decimal Interchange Code (BCDIC, sometimes just called BCD), for 6-bit alphanumeric codes that represented numbers, upper-case letters and special characters. Some variation of BCDIC alphamerics is used in most early IBM computers, including the IBM 1620 (introduced in 1959), IBM 1400 series, and non-Decimal Architecture members of the IBM 700/7000 series.

The IBM 1400 series are character-addressable machines, each location being six bits labeled B, A, 8, 4, 2 and 1, plus an odd parity check bit (C) and a word mark bit (M). For encoding digits 1 through 9, B and A are zero and the digit value represented by standard 4-bit BCD in bits 8 through 1. For most other characters bits B and A are derived simply from the "12", "11", and "0" "zone punches" in the punched card character code, and bits 8 through 1 from the 1 through 9 punches. A "12 zone" punch set both B and A, an "11 zone" set B, and a "0 zone" (a 0 punch combined with any others) set A. Thus the letter A, which is (12,1) in the punched card format, is encoded (B,A,1). The currency symbol $, (11,8,3) in the punched card, was encoded in memory as (B,8,2,1). This allows the circuitry to convert between the punched card format and the internal storage format to be very simple with only a few special cases. One important special case is digit 0, represented by a lone 0 punch in the card, and (8,2) in core memory.[43]

The memory of the IBM 1620 is organized into 6-bit addressable digits, the usual 8, 4, 2, 1 plus F, used as a flag bit and C, an odd parity check bit. BCD alphamerics are encoded using digit pairs, with the "zone" in the even-addressed digit and the "digit" in the odd-addressed digit, the "zone" being related to the 12, 11, and 0 "zone punches" as in the 1400 series. Input/Output translation hardware converted between the internal digit pairs and the external standard 6-bit BCD codes.

In the Decimal Architecture IBM 7070, IBM 7072, and IBM 7074 alphamerics are encoded using digit pairs (using two-out-of-five code in the digits, not BCD) of the 10-digit word, with the "zone" in the left digit and the "digit" in the right digit. Input/Output translation hardware converted between the internal digit pairs and the external standard 6-bit BCD codes.

With the introduction of System/360, IBM expanded 6-bit BCD alphamerics to 8-bit EBCDIC, allowing the addition of many more characters (e.g., lowercase letters). A variable length Packed BCD numeric data type is also implemented, providing machine instructions that perform arithmetic directly on packed decimal data.

On the IBM 1130 and 1800, packed BCD is supported in software by IBM's Commercial Subroutine Package.

Today, BCD data is still heavily used in IBM processors and databases, such as IBM Db2, mainframes, and Power6. In these products, the BCD is usually zoned BCD (as in EBCDIC or ASCII), Packed BCD (two decimal digits per byte), or "pure" BCD encoding (one decimal digit stored as BCD in the low four bits of each byte). All of these are used within hardware registers and processing units, and in software. To convert packed decimals in EBCDIC table unloads to readable numbers, you can use the OUTREC FIELDS mask of the JCL utility DFSORT.[44]

Other computers

The Digital Equipment Corporation VAX-11 series includes instructions that can perform arithmetic directly on packed BCD data and convert between packed BCD data and other integer representations.[41] The VAX's packed BCD format is compatible with that on IBM System/360 and IBM's later compatible processors. The MicroVAX and later VAX implementations dropped this ability from the CPU but retained code compatibility with earlier machines by implementing the missing instructions in an operating system-supplied software library. This is invoked automatically via exception handling when the defunct instructions are encountered, so that programs using them can execute without modification on the newer machines.

The Intel x86 architecture supports a unique 18-digit (ten-byte) BCD format that can be loaded into and stored from the floating point registers, from where computations can be performed.[45]

The Motorola 68000 series had BCD instructions.[46]

In more recent computers such capabilities are almost always implemented in software rather than the CPU's instruction set, but BCD numeric data are still extremely common in commercial and financial applications. There are tricks for implementing packed BCD and zoned decimal add–or–subtract operations using short but difficult to understand sequences of word-parallel logic and binary arithmetic operations.[47] For example, the following code (written in C) computes an unsigned 8-digit packed BCD addition using 32-bit binary operations:

uint32_t BCDadd(uint32_t a, uint32_t b)
{
    uint32_t t1, t2;    // unsigned 32-bit intermediate values

    t1 = a + 0x06666666;
    t2 = t1 ^ b;                   // sum without carry propagation
    t1 = t1 + b;                   // provisional sum
    t2 = t1 ^ t2;                  // all the binary carry bits
    t2 = ~t2 & 0x11111110;         // just the BCD carry bits
    t2 = (t2 >> 2) | (t2 >> 3);    // correction
    return t1 - t2;                // corrected BCD sum
}

BCD in electronics

BCD is very common in electronic systems where a numeric value is to be displayed, especially in systems consisting solely of digital logic, and not containing a microprocessor. By employing BCD, the manipulation of numerical data for display can be greatly simplified by treating each digit as a separate single sub-circuit. This matches much more closely the physical reality of display hardware—a designer might choose to use a series of separate identical seven-segment displays to build a metering circuit, for example. If the numeric quantity were stored and manipulated as pure binary, interfacing with such a display would require complex circuitry. Therefore, in cases where the calculations are relatively simple, working throughout with BCD can lead to an overall simpler system than converting to and from binary. Most pocket calculators do all their calculations in BCD.

The same argument applies when hardware of this type uses an embedded microcontroller or other small processor. Often, representing numbers internally in BCD format results in smaller code, since a conversion from or to binary representation can be expensive on such limited processors. For these applications, some small processors feature dedicated arithmetic modes, which assist when writing routines that manipulate BCD quantities.[48][49]

Operations with BCD

Addition

It is possible to perform addition by first adding in binary, and then converting to BCD afterwards. Conversion of the simple sum of two digits can be done by adding 6 (that is, 16 − 10) when the five-bit result of adding a pair of digits has a value greater than 9. The reason for adding 6 is that there are 16 possible 4-bit BCD values (since 24 = 16), but only 10 values are valid (0000 through 1001). For example:

1001 + 1000 = 10001
   9 +    8 =    17

10001 is the binary, not decimal, representation of the desired result, but the most significant 1 (the "carry") cannot fit in a 4-bit binary number. In BCD as in decimal, there cannot exist a value greater than 9 (1001) per digit. To correct this, 6 (0110) is added to the total, and then the result is treated as two nibbles:

10001 + 0110 = 00010111 => 0001 0111
   17 +    6 =       23       1    7

The two nibbles of the result, 0001 and 0111, correspond to the digits "1" and "7". This yields "17" in BCD, which is the correct result.

This technique can be extended to adding multiple digits by adding in groups from right to left, propagating the second digit as a carry, always comparing the 5-bit result of each digit-pair sum to 9. Some CPUs provide a half-carry flag to facilitate BCD arithmetic adjustments following binary addition and subtraction operations. The Intel 8080, the Zilog Z80[50] and the CPUs of the x86 family[51] provide the opcode DAA (Decimal Adjust Accumulator).

Subtraction

Subtraction is done by adding the ten's complement of the subtrahend to the minuend. To represent the sign of a number in BCD, the number 0000 is used to represent a positive number, and 1001 is used to represent a negative number. The remaining 14 combinations are invalid signs. To illustrate signed BCD subtraction, consider the following problem: 357 − 432.

In signed BCD, 357 is 0000 0011 0101 0111. The ten's complement of 432 can be obtained by taking the nine's complement of 432, and then adding one. So, 999 − 432 = 567, and 567 + 1 = 568. By preceding 568 in BCD by the negative sign code, the number −432 can be represented. So, −432 in signed BCD is 1001 0101 0110 1000.

Now that both numbers are represented in signed BCD, they can be added together:

  0000 0011 0101 0111
  0    3    5    7
+ 1001 0101 0110 1000
  9    5    6    8
= 1001 1000 1011 1111
  9    8    11   15

Since BCD is a form of decimal representation, several of the digit sums above are invalid. In the event that an invalid entry (any BCD digit greater than 1001) exists, 6 is added to generate a carry bit and cause the sum to become a valid entry. So, adding 6 to the invalid entries results in the following:

  1001 1000 1011 1111
  9    8    11   15
+ 0000 0000 0110 0110
  0    0    6    6
= 1001 1001 0010 0101
  9    9    2    5

Thus the result of the subtraction is 1001 1001 0010 0101 (−925). To confirm the result, note that the first digit is 9, which means negative. This seems to be correct since 357 − 432 should result in a negative number. The remaining nibbles are BCD, so 1001 0010 0101 is 925. The ten's complement of 925 is 1000 − 925 = 75, so the calculated answer is −75.

If there are a different number of nibbles being added together (such as 1053 − 2), the number with the fewer digits must first be prefixed with zeros before taking the ten's complement or subtracting. So, with 1053 − 2, 2 would have to first be represented as 0002 in BCD, and the ten's complement of 0002 would have to be calculated.

Comparison with pure binary

Advantages

  • Many non-integral values, such as decimal 0.2, have an infinite place-value representation in binary (.001100110011...) but have a finite place-value in binary-coded decimal (0.0010). Consequently, a system based on binary-coded decimal representations of decimal fractions avoids errors representing and calculating such values. This is useful in financial calculations.
  • Scaling by a power of 10 is simple.
  • Rounding at a decimal digit boundary is simpler. Addition and subtraction in decimal do not require rounding.[dubious ]
  • The alignment of two decimal numbers (for example 1.3 + 27.08) is a simple, exact shift.
  • Conversion to a character form or for display (e.g., to a text-based format such as XML, or to drive signals for a seven-segment display) is a simple per-digit mapping, and can be done in linear (O(n)) time. Conversion from pure binary involves relatively complex logic that spans digits, and for large numbers, no linear-time conversion algorithm is known (see Binary numeral system § Conversion to and from other numeral systems).

Disadvantages

  • Some operations are more complex to implement. Adders require extra logic to cause them to wrap and generate a carry early. 15 to 20 per cent more circuitry is needed for BCD add compared to pure binary.[citation needed] Multiplication requires the use of algorithms that are somewhat more complex than shift-mask-add (a binary multiplication, requiring binary shifts and adds or the equivalent, per-digit or group of digits is required).
  • Standard BCD requires four bits per digit, roughly 20 per cent more space than a binary encoding (the ratio of 4 bits to log210 bits is 1.204). When packed so that three digits are encoded in ten bits, the storage overhead is greatly reduced, at the expense of an encoding that is unaligned with the 8-bit byte boundaries common on existing hardware, resulting in slower implementations on these systems.
  • Practical existing implementations of BCD are typically slower than operations on binary representations, especially on embedded systems, due to limited processor support for native BCD operations.[52]

Representational variations

Various BCD implementations exist that employ other representations for numbers. Programmable calculators manufactured by Texas Instruments, Hewlett-Packard, and others typically employ a floating-point BCD format, typically with two or three digits for the (decimal) exponent. The extra bits of the sign digit may be used to indicate special numeric values, such as infinity, underflow/overflow, and error (a blinking display).

Signed variations

Signed decimal values may be represented in several ways. The COBOL programming language, for example, supports five zoned decimal formats, with each one encoding the numeric sign in a different way:

Type Description Example
Unsigned No sign nibble F1 F2 F3
Signed trailing (canonical format) Sign nibble in the last (least significant) byte F1 F2 C3
Signed leading (overpunch) Sign nibble in the first (most significant) byte C1 F2 F3
Signed trailing separate Separate sign character byte ('+' or '−') following the digit bytes F1 F2 F3 2B
Signed leading separate Separate sign character byte ('+' or '−') preceding the digit bytes 2B F1 F2 F3

Telephony binary-coded decimal (TBCD)

3GPP developed TBCD,[53] an expansion to BCD where the remaining (unused) bit combinations are used to add specific telephony characters,[54][55] with digits similar to those found in telephone keypads original design.

Decimal
digit
TBCD
8 4 2 1
* 1 0 1 0
# 1 0 1 1
a 1 1 0 0
b 1 1 0 1
c 1 1 1 0
Used as filler when there is an odd number of digits 1 1 1 1

The mentioned 3GPP document defines TBCD-STRING with swapped nibbles in each byte. Bits, octets and digits indexed from 1, bits from the right, digits and octets from the left.

bits 8765 of octet n encoding digit 2n

bits 4321 of octet n encoding digit 2(n – 1) + 1

Meaning number 1234, would become 21 43 in TBCD.

Alternative encodings

If errors in representation and computation are more important than the speed of conversion to and from display, a scaled binary representation may be used, which stores a decimal number as a binary-encoded integer and a binary-encoded signed decimal exponent. For example, 0.2 can be represented as 2×10−1.

This representation allows rapid multiplication and division, but may require shifting by a power of 10 during addition and subtraction to align the decimal points. It is appropriate for applications with a fixed number of decimal places that do not then require this adjustment—particularly financial applications where 2 or 4 digits after the decimal point are usually enough. Indeed, this is almost a form of fixed point arithmetic since the position of the radix point is implied.

The Hertz and Chen–Ho encodings provide Boolean transformations for converting groups of three BCD-encoded digits to and from 10-bit values[nb 1] that can be efficiently encoded in hardware with only 2 or 3 gate delays. Densely packed decimal (DPD) is a similar scheme[nb 1] that is used for most of the significand, except the lead digit, for one of the two alternative decimal encodings specified in the IEEE 754-2008 floating-point standard.

Application

The BIOS in many personal computers stores the date and time in BCD because the MC6818 real-time clock chip used in the original IBM PC AT motherboard provided the time encoded in BCD. This form is easily converted into ASCII for display.[56][57]

The Atari 8-bit family of computers used BCD to implement floating-point algorithms. The MOS 6502 processor has a BCD mode that affects the addition and subtraction instructions. The Psion Organiser 1 handheld computer's manufacturer-supplied software also entirely used BCD to implement floating point; later Psion models used binary exclusively.

Early models of the PlayStation 3 store the date and time in BCD. This led to a worldwide outage of the console on 1 March 2010. The last two digits of the year stored as BCD were misinterpreted as 16 causing an error in the unit's date, rendering most functions inoperable. This has been referred to as the Year 2010 problem.

Legal history

In the 1972 case Gottschalk v. Benson, the U.S. Supreme Court overturned a lower court's decision that had allowed a patent for converting BCD-encoded numbers to binary on a computer. The decision noted that a patent "would wholly pre-empt the mathematical formula and in practical effect would be a patent on the algorithm itself".[58] This was a landmark judgement that determining the patentability of software and algorithms.

See also

Notes


  • In a standard packed 4-bit representation, there are 16 states (four bits for each digit) with 10 tetrades and 6 pseudo-tetrades, whereas in more densely packed schemes such as Hertz, Chen–Ho or DPD encodings there are fewer—e.g., only 24 unused states in 1024 states (10 bits for three digits).

  • Code states (shown in black) outside the decimal range 0–9 indicate additional states of the non-BCD variant of the code. In the BCD code variant discussed here, they are pseudo-tetrades.

  • The Aiken code is one of several 2 4 2 1 codes. It is also known as 2* 4 2 1 code.

  • The Jump-at-8 code is also known as unsymmetrical 2 4 2 1 code.

  • The Petherick code is also known as Royal Aircraft Establishment (RAE) code.

  • The O'Brien code type I is also known as Watts code or Watts reflected decimal (WRD) code.

  • The Excess-3 Gray code is also known as GrayStibitz code.

    1. In a similar fashion, multiple characters were often packed into machine words on minicomputers, see IBM SQUOZE and DEC RADIX 50.

    References


  • Intel. "ia32 architecture manual" (PDF). Intel. Archived (PDF) from the original on 2022-10-09. Retrieved 2015-07-01.

  • Klar, Rainer (1970-02-01). "1.5.3 Konvertierung binär verschlüsselter Dezimalzahlen" [1.5.3 Conversion of binary coded decimal numbers]. Digitale Rechenautomaten – Eine Einführung [Digital Computers – An Introduction]. Sammlung Göschen (in German). Vol. 1241/1241a (1 ed.). Berlin, Germany: Walter de Gruyter & Co. / G. J. Göschen'sche Verlagsbuchhandlung [de]. pp. 17, 21. ISBN 3-11-083160-0. . Archiv-Nr. 7990709. Archived from the original on 2020-04-18. Retrieved 2020-04-13. (205 pages) (NB. A 2019 reprint of the first edition is available under ISBN 3-11002793-3, 978-3-11002793-8. A reworked and expanded 4th edition exists as well.)

  • Klar, Rainer (1989) [1988-10-01]. "1.4 Codes: Binär verschlüsselte Dezimalzahlen" [1.4 Codes: Binary coded decimal numbers]. Digitale Rechenautomaten – Eine Einführung in die Struktur von Computerhardware [Digital Computers – An Introduction into the structure of computer hardware]. Sammlung Göschen (in German). Vol. 2050 (4th reworked ed.). Berlin, Germany: Walter de Gruyter & Co. pp. 25, 28, 38–39. ISBN 3-11011700-2. p. 25: […] Die nicht erlaubten 0/1-Muster nennt man auch Pseudodezimalen. […] (320 pages)

  • Schneider, Hans-Jochen (1986). Lexikon der Informatik und Datenverarbeitung (in German) (2 ed.). R. Oldenbourg Verlag München Wien. ISBN 3-486-22662-2.

  • Tafel, Hans Jörg (1971). Einführung in die digitale Datenverarbeitung [Introduction to digital information processing] (in German). Munich: Carl Hanser Verlag. ISBN 3-446-10569-7.

  • Steinbuch, Karl W.; Weber, Wolfgang; Heinemann, Traute, eds. (1974) [1967]. Taschenbuch der Informatik - Band II - Struktur und Programmierung von EDV-Systemen. Taschenbuch der Nachrichtenverarbeitung (in German). Vol. 2 (3 ed.). Berlin, Germany: Springer-Verlag. ISBN 3-540-06241-6. LCCN 73-80607.

  • Tietze, Ulrich; Schenk, Christoph (2012-12-06). Advanced Electronic Circuits. Springer Science & Business Media. ISBN 978-3642812415. 9783642812415. Retrieved 2015-08-05.

  • Kowalski, Emil (2013-03-08) [1970]. Nuclear Electronics. Springer-Verlag. doi:10.1007/978-3-642-87663-9. ISBN 978-3642876639. 9783642876639, 978-3-642-87664-6. Retrieved 2015-08-05.

  • Ferretti, Vittorio (2013-03-13). Wörterbuch der Elektronik, Datentechnik und Telekommunikation / Dictionary of Electronics, Computing and Telecommunications: Teil 1: Deutsch-Englisch / Part 1: German-English. Vol. 1 (2 ed.). Springer-Verlag. ISBN 978-3642980886. 9783642980886. Retrieved 2015-08-05.

  • Speiser, Ambrosius Paul (1965) [1961]. Digitale Rechenanlagen - Grundlagen / Schaltungstechnik / Arbeitsweise / Betriebssicherheit [Digital computers - Basics / Circuits / Operation / Reliability] (in German) (2 ed.). ETH Zürich, Zürich, Switzerland: Springer-Verlag / IBM. p. 209. LCCN 65-14624. 0978.

  • Cowlishaw, Mike F. (2015) [1981, 2008]. "General Decimal Arithmetic". Retrieved 2016-01-02.

  • Evans, David Silvester (March 1961). "Chapter Four: Ancillary Equipment: Output-drive and parity-check relays for digitizers". Digital Data: Their derivation and reduction for analysis and process control (1 ed.). London, UK: Hilger & Watts Ltd / Interscience Publishers. pp. 46–64 [56–57]. Retrieved 2020-05-24. (8+82 pages) (NB. The 4-bit 8421 BCD code with an extra parity bit applied as least significant bit to achieve odd parity of the resulting 5-bit code is also known as Ferranti code.)

  • Lala, Parag K. (2007). Principles of Modern Digital Design. John Wiley & Sons. pp. 20–25. ISBN 978-0-470-07296-7.

  • Berger, Erich R. (1962). "1.3.3. Die Codierung von Zahlen". Written at Karlsruhe, Germany. In Steinbuch, Karl W. (ed.). Taschenbuch der Nachrichtenverarbeitung (in German) (1 ed.). Berlin / Göttingen / New York: Springer-Verlag OHG. pp. 68–75. LCCN 62-14511. (NB. The shown Kautz code (II), containing all eight available binary states with an odd count of 1s, is a slight modification of the original Kautz code (I), containing all eight states with an even count of 1s, so that inversion of the most-significant bits will create a 9s complement.)

  • Kämmerer, Wilhelm [in German] (May 1969). "II.15. Struktur: Informationsdarstellung im Automaten". Written at Jena, Germany. In Frühauf, Hans [in German]; Kämmerer, Wilhelm; Schröder, Kurz; Winkler, Helmut (eds.). Digitale Automaten – Theorie, Struktur, Technik, Programmieren. Elektronisches Rechnen und Regeln (in German). Vol. 5 (1 ed.). Berlin, Germany: Akademie-Verlag GmbH. p. 161. License no. 202-100/416/69. Order no. 4666 ES 20 K 3. (NB. A second edition 1973 exists as well.)

  • Dokter, Folkert; Steinhauer, Jürgen (1973-06-18). Digital Electronics. Philips Technical Library (PTL) / Macmillan Education (Reprint of 1st English ed.). Eindhoven, Netherlands: The Macmillan Press Ltd. / N. V. Philips' Gloeilampenfabrieken. doi:10.1007/978-1-349-01417-0. ISBN 978-1-349-01419-4. SBN 333-13360-9. Retrieved 2020-05-11.[permanent dead link] (270 pages) (NB. This is based on a translation of volume I of the two-volume German edition.)

  • Dokter, Folkert; Steinhauer, Jürgen (1975) [1969]. Digitale Elektronik in der Meßtechnik und Datenverarbeitung: Theoretische Grundlagen und Schaltungstechnik. Philips Fachbücher (in German). Vol. I (improved and extended 5th ed.). Hamburg, Germany: Deutsche Philips GmbH. p. 50. ISBN 3-87145-272-6. (xii+327+3 pages) (NB. The German edition of volume I was published in 1969, 1971, two editions in 1972, and 1975. Volume II was published in 1970, 1972, 1973, and 1975.)

  • Kautz, William H. (June 1954). "IV. Examples A. Binary Codes for Decimals, n = 4". Optimized Data Encoding for Digital Computers. Convention Record of the I.R.E., 1954 National Convention, Part 4 - Electronic Computers and Information Theory. Session 19: Information Theory III - Speed and Computation. Stanford Research Institute, Stanford, California, USA: I.R.E. pp. 47–57 [49, 51–52, 57]. Archived from the original on 2020-07-03. Retrieved 2020-07-03. p. 52: […] The last column [of Table II], labeled "Best," gives the maximum fraction possible with any code—namely 0.60—half again better than any conventional code. This extremal is reached with the ten [heavily-marked vertices of the graph of Fig. 4 for n = 4, or, in fact, with any set of ten code combinations which include all eight with an even (or all eight with an odd) number of "1's." The second and third rows of Table II list the average and peak decimal change per undetected single binary error, and have been derived using the equations of Sec. II for Δ1 and δ1. The confusion index for decimals using the criterion of "decimal change," is taken to be cij = |i − j|   i,j = 0, 1, … 9. Again, the "Best" arrangement possible (the same for average and peak), one of which is shown in Fig. 4, is substantially better than the conventional codes. […] Fig. 4 Minimum-confusion code for decimals. […] δ1=2   Δ1=15 […] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] (11 pages) (NB. Besides the combinatorial set of 4-bit BCD "minimum-confusion codes for decimals", of which the author illustrates only one explicitly (here reproduced as code I) in form of a 4-bit graph, the author also shows a 16-state 4-bit "binary code for analog data" in form of a code table, which, however, is not discussed here. The code II shown here is a modification of code I discussed by Berger.)

  • Chinal, Jean P. (January 1973). "3.3. Unit Distance Codes". Written at Paris, France. Design Methods for Digital Systems. Translated by Preston, Alan; Summer, Arthur (1st English ed.). Berlin, Germany: Akademie-Verlag / Springer-Verlag. p. 46. doi:10.1007/978-3-642-86187-1_3. ISBN 978-0-387-05871-9. License No. 202-100/542/73. Order No. 7617470(6047) ES 19 B 1 / 20 K 3. Retrieved 2020-06-21. (xviii+506 pages) (NB. The French 1967 original book was named "Techniques Booléennes et Calculateurs Arithmétiques", published by Éditions Dunod [fr].)

  • Military Handbook: Encoders - Shaft Angle To Digital (PDF). United States Department of Defense. 1991-09-30. MIL-HDBK-231A. Archived (PDF) from the original on 2020-07-25. Retrieved 2020-07-25. (NB. Supersedes MIL-HDBK-231(AS) (1970-07-01).)

  • Stopper, Herbert (March 1960). Written at Litzelstetten, Germany. Runge, Wilhelm Tolmé (ed.). "Ermittlung des Codes und der logischen Schaltung einer Zähldekade". Telefunken-Zeitung (TZ) - Technisch-Wissenschaftliche Mitteilungen der Telefunken GMBH (in German). Berlin, Germany: Telefunken. 33 (127): 13–19. (7 pages)

  • Borucki, Lorenz; Dittmann, Joachim (1971) [July 1970, 1966, Autumn 1965]. "2.3 Gebräuchliche Codes in der digitalen Meßtechnik". Written at Krefeld / Karlsruhe, Germany. Digitale Meßtechnik: Eine Einführung (in German) (2 ed.). Berlin / Heidelberg, Germany: Springer-Verlag. pp. 10–23 [12–14]. doi:10.1007/978-3-642-80560-8. ISBN 3-540-05058-2. LCCN 75-131547. ISBN 978-3-642-80561-5. (viii+252 pages) 1st edition

  • White, Garland S. (October 1953). "Coded Decimal Number Systems for Digital Computers". Proceedings of the Institute of Radio Engineers. Institute of Radio Engineers (IRE). 41 (10): 1450–1452. doi:10.1109/JRPROC.1953.274330. eISSN 2162-6634. ISSN 0096-8390. S2CID 51674710. (3 pages)

  • "Different Types of Binary Codes". Electronic Hub. 2019-05-01 [2015-01-28]. Section 2.4 5211 Code. Archived from the original on 2017-11-14. Retrieved 2020-08-04.

  • Paul, Matthias R. (1995-08-10) [1994]. "Unterbrechungsfreier Schleifencode" [Continuous loop code]. 1.02 (in German). Retrieved 2008-02-11. (NB. The author called this code Schleifencode (English: "loop code"). It differs from Gray BCD code only in the encoding of state 0 to make it a cyclic unit-distance code for full-circle rotatory applications. Avoiding the all-zero code pattern allows for loop self-testing and to use the data lines for uninterrupted power distribution.)

  • Gray, Frank (1953-03-17) [1947-11-13]. Pulse Code Communication (PDF). New York, USA: Bell Telephone Laboratories, Incorporated. U.S. Patent 2,632,058. Serial No. 785697. Archived (PDF) from the original on 2020-08-05. Retrieved 2020-08-05. (13 pages)

  • Glixon, Harry Robert (March 1957). "Can You Take Advantage of the Cyclic Binary-Decimal Code?". Control Engineering. Technical Publishing Company, a division of Dun-Donnelley Publishing Corporation, Dun & Bradstreet Corp. 4 (3): 87–91. ISSN 0010-8049. (5 pages)

  • Ledley, Robert Steven; Rotolo, Louis S.; Wilson, James Bruce (1960). "Part 4. Logical Design of Digital-Computer Circuitry; Chapter 15. Serial Arithmetic Operations; Chapter 15-7. Additional Topics". Digital Computer and Control Engineering (PDF). McGraw-Hill Electrical and Electronic Engineering Series (1 ed.). New York, USA: McGraw-Hill Book Company, Inc. (printer: The Maple Press Company, York, Pennsylvania, USA). pp. 517–518. ISBN 0-07036981-X. ISSN 2574-7916. LCCN 59015055. OCLC 1033638267. OL 5776493M. SBN 07036981-X. . ark:/13960/t72v3b312. Archived (PDF) from the original on 2021-02-19. Retrieved 2021-02-19. p. 517: […] The cyclic code is advantageous mainly in the use of relay circuits, for then a sticky relay will not give a false state as it is delayed in going from one cyclic number to the next. There are many other cyclic codes that have this property. […] [12] (xxiv+835+1 pages) (NB. Ledley classified the described cyclic code as a cyclic decimal-coded binary code.)

  • Savard, John J. G. (2018) [2006]. "Decimal Representations". quadibloc. Archived from the original on 2018-07-16. Retrieved 2018-07-16.

  • Petherick, Edward John (October 1953). A Cyclic Progressive Binary-coded-decimal System of Representing Numbers (Technical Note MS15). Farnborough, UK: Royal Aircraft Establishment (RAE). (4 pages) (NB. Sometimes referred to as A Cyclic-Coded Binary-Coded-Decimal System of Representing Numbers.)

  • Petherick, Edward John; Hopkins, A. J. (1958). Some Recently Developed Digital Devices for Encoding the Rotations of Shafts (Technical Note MS21). Farnborough, UK: Royal Aircraft Establishment (RAE).

  • O'Brien, Joseph A. (May 1956) [1955-11-15, 1955-06-23]. "Cyclic Decimal Codes for Analogue to Digital Converters". Transactions of the American Institute of Electrical Engineers, Part I: Communication and Electronics. Bell Telephone Laboratories, Whippany, New Jersey, USA. 75 (2): 120–122. doi:10.1109/TCE.1956.6372498. ISSN 0097-2452. S2CID 51657314. Paper 56-21. Retrieved 2020-05-18. (3 pages) (NB. This paper was prepared for presentation at the AIEE Winter General Meeting, New York, USA, 1956-01-30 to 1956-02-03.)

  • Tompkins, Howard E. (September 1956) [1956-07-16]. "Unit-Distance Binary-Decimal Codes for Two-Track Commutation". IRE Transactions on Electronic Computers. Correspondence. Moore School of Electrical Engineering, University of Pennsylvania, Philadelphia, Pennsylvania, USA. EC-5 (3): 139. doi:10.1109/TEC.1956.5219934. ISSN 0367-9950. Retrieved 2020-05-18. (1 page)

  • Lippel, Bernhard (December 1955). "A Decimal Code for Analog-to-Digital Conversion". IRE Transactions on Electronic Computers. EC-4 (4): 158–159. doi:10.1109/TEC.1955.5219487. ISSN 0367-9950. (2 pages)

  • Susskind, Alfred Kriss; Ward, John Erwin (1958-03-28) [1957, 1956]. "III.F. Unit-Distance Codes / VI.E.2. Reflected Binary Codes". Written at Cambridge, Massachusetts, USA. In Susskind, Alfred Kriss (ed.). Notes on Analog-Digital Conversion Techniques. Technology Books in Science and Engineering. Vol. 1 (3 ed.). New York, USA: Technology Press of the Massachusetts Institute of Technology / John Wiley & Sons, Inc. / Chapman & Hall, Ltd. pp. 3-7–3-8 [3-7], 3-10–3-16 [3-13–3-16], 6-65–6-60 [6-60]. (x+416+2 pages) (NB. The contents of the book was originally prepared by staff members of the Servomechanisms Laboraratory, Department of Electrical Engineering, MIT, for Special Summer Programs held in 1956 and 1957. The code Susskind actually presented in his work as "reading-type code" is shown as code type II here, whereas the type I code is a minor derivation with the two most significant bit columns swapped to better illustrate symmetries.)

  • Yuen, Chun-Kwong (December 1977). "A New Representation for Decimal Numbers". IEEE Transactions on Computers. C-26 (12): 1286–1288. doi:10.1109/TC.1977.1674792. S2CID 40879271. Archived from the original on 2020-08-08. Retrieved 2020-08-08.

  • Lucal, Harold M. (December 1959). "Arithmetic Operations for Digital Computers Using a Modified Reflected Binary". IRE Transactions on Electronic Computers. EC-8 (4): 449–458. doi:10.1109/TEC.1959.5222057. ISSN 0367-9950. S2CID 206673385. (10 pages)

  • Dewar, Robert Berriedale Keith; Smosna, Matthew (1990). Microprocessors - A Programmer's View (1 ed.). Courant Institute, New York University, New York, USA: McGraw-Hill Publishing Company. p. 14. ISBN 0-07-016638-2. LCCN 89-77320. (xviii+462 pages)

  • "Chapter 8: Decimal Instructions". IBM System/370 Principles of Operation. IBM. March 1980.

  • "Chapter 3: Data Representation". PDP-11 Architecture Handbook. Digital Equipment Corporation. 1983.

  • VAX-11 Architecture Handbook. Digital Equipment Corporation. 1985.

  • "ILE RPG Reference".

  • IBM BM 1401/1440/1460/1410/7010 Character Code Chart in BCD Order[permanent dead link]

  • http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.iceg200%2Fenf.htm[permanent dead link]

  • "4.7 BCD and packed BCD integers". Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture (PDF). Version 072. Vol. 1. Intel Corporation. 2020-05-27 [1997]. pp. 3–2, 4-9–4-11 [4-10]. 253665-072US. Archived (PDF) from the original on 2020-08-06. Retrieved 2020-08-06. p. 4-10: […] When operating on BCD integers in general-purpose registers, the BCD values can be unpacked (one BCD digit per byte) or packed (two BCD digits per byte). The value of an unpacked BCD integer is the binary value of the low halfbyte (bits 0 through 3). The high half-byte (bits 4 through 7) can be any value during addition and subtraction, but must be zero during multiplication and division. Packed BCD integers allow two BCD digits to be contained in one byte. Here, the digit in the high half-byte is more significant than the digit in the low half-byte. […] When operating on BCD integers in x87 FPU data registers, BCD values are packed in an 80-bit format and referred to as decimal integers. In this format, the first 9 bytes hold 18 BCD digits, 2 digits per byte. The least-significant digit is contained in the lower half-byte of byte 0 and the most-significant digit is contained in the upper half-byte of byte 9. The most significant bit of byte 10 contains the sign bit (0 = positive and 1 = negative; bits 0 through 6 of byte 10 are don't care bits). Negative decimal integers are not stored in two's complement form; they are distinguished from positive decimal integers only by the sign bit. The range of decimal integers that can be encoded in this format is −1018 + 1 to 1018 − 1. The decimal integer format exists in memory only. When a decimal integer is loaded in an x87 FPU data register, it is automatically converted to the double-extended-precision floating-point format. All decimal integers are exactly representable in double extended-precision format. […] [13]

  • url=http://www.tigernt.com/onlineDoc/68000.pdf

  • Jones, Douglas W. (2015-11-25) [1999]. "BCD Arithmetic, a tutorial". Arithmetic Tutorials. Iowa City, Iowa, USA: The University of Iowa, Department of Computer Science. Retrieved 2016-01-03.

  • University of Alicante. "A Cordic-based Architecture for High Performance Decimal Calculations" (PDF). IEEE. Archived (PDF) from the original on 2010-01-05. Retrieved 2015-08-15.

  • "Decimal CORDIC Rotation based on Selection by Rounding: Algorithm and Architecture" (PDF). British Computer Society. Archived (PDF) from the original on 2022-10-09. Retrieved 2015-08-14.

  • Zaks, Rodnay (1982). Programming the Z80 (3rd revised ed.). Sybex Inc. p. 108. ISBN 0-89588-094-6. LCCN 80-5468. ark:/13960/t4qk4vs4c. Retrieved 2022-01-08. (NB. The Zilog Z80 DAA instructions differs in subtle details from the Intel 8080 DAA instruction.)

  • Cloutier, Félix, ed. (2019-05-30). "DAA — Decimal Adjust AL after Addition". Archived from the original on 2022-01-16. Retrieved 2022-01-16. (NB. Based on Intel 64 and IA-32 Architectures Software Developer's Manual.)

  • Mathur, Aditya P. (1989). Introduction to Microprocessors (3 ed.). Tata McGraw-Hill Publishing Company Limited. ISBN 978-0-07-460222-5.

  • 3GPP TS 29.002: Mobile Application Part (MAP) specification (Technical report). 2013. sec. 17.7.8 Common data types.

  • "Signalling Protocols and Switching (SPS) Guidelines for using Abstract Syntax Notation One (ASN.1) in telecommunication application protocols" (PDF). p. 15. Archived (PDF) from the original on 2013-12-04.

  • "XOM Mobile Application Part (XMAP) Specification" (PDF). p. 93. Archived from the original (PDF) on 2015-02-21. Retrieved 2013-06-27.

  • "Archived copy" (PDF). www.se.ecu.edu.au. Archived from the original (PDF) on 2008-10-10. Retrieved 2022-05-22.

  • MC6818 datasheet

  • Further reading

    External links

     https://en.wikipedia.org/wiki/Binary-coded_decimal#Pseudo-tetrade

     https://en.wikipedia.org/wiki/Logical_shift

    https://en.wikipedia.org/wiki/Endianness

    https://en.wikipedia.org/wiki/Signed_overpunch

    IBM 80-column format and character codes

    Punched card from a Fortran program: Z(1) = Y + W(1), plus sorting information in the last 8 columns.

    By the late 1920s, customers wanted to store more data on each punched card. Thomas J. Watson Sr., IBM's head, asked two of his top inventors, Clair D. Lake and J. Royden Pierce, to independently develop ways to increase data capacity without increasing the size of the punched card. Pierce wanted to keep round holes and 45 columns, but allow each column to store more data. Lake suggested rectangular holes, which could be spaced more tightly, allowing 80 columns per punched card, thereby nearly doubling the capacity of the older format.[45] Watson picked the latter solution, introduced as The IBM Card, in part because it was compatible with existing tabulator designs and in part because it could be protected by patents and give the company a distinctive advantage.[46]

    This IBM card format, introduced in 1928,[47] has rectangular holes, 80 columns, and 10 rows.[48] Card size is 7+38 by 3+14 inches (187 by 83 mm). The cards are made of smooth stock, 0.007 inches (180 Î¼m) thick. There are about 143 cards to the inch (56/cm). In 1964, IBM changed from square to round corners.[49] They come typically in boxes of 2000 cards[50] or as continuous form cards. Continuous form cards could be both pre-numbered and pre-punched for document control (checks, for example).[51]

    Initially designed to record responses to yes–no questions, support for numeric, alphabetic and special characters was added through the use of columns and zones. The top three positions of a column are called zone punching positions, 12 (top), 11, and 0 (0 may be either a zone punch or a digit punch).[52] For decimal data the lower ten positions are called digit punching positions, 0 (top) through 9.[52] An arithmetic sign can be specified for a decimal field by overpunching the field's rightmost column with a zone punch: 12 for plus, 11 for minus (CR). For Pound sterling pre-decimalization currency a penny column represents the values zero through eleven; 10 (top), 11, then 0 through 9 as above. An arithmetic sign can be punched in the adjacent shilling column.[53]: 9  Zone punches had other uses in processing, such as indicating a master card.[54]

    An 80-column punched card with the extended character set introduced with EBCDIC in 1964.

    Diagram:[55] Note: The 11 and 12 zones were also called the X and Y zones, respectively.

        _______________________________________________
       / &-0123456789ABCDEFGHIJKLMNOPQR/STUVWXYZ
    12|  x           xxxxxxxxx
    11|   x                   xxxxxxxxx
     0|    x                           xxxxxxxxx
     1|     x        x        x        x
     2|      x        x        x        x
     3|       x        x        x        x
     4|        x        x        x        x
     5|         x        x        x        x
     6|          x        x        x        x
     7|           x        x        x        x
     8|            x        x        x        x
     9|             x        x        x        x
      |________________________________________________
    

    In 1931, IBM began introducing upper-case letters and special characters (Powers-Samas had developed the first commercial alphabetic punched card representation in 1921).[56][57][nb 1] The 26 letters have two punches (zone [12,11,0] + digit [1–9]). The languages of Germany, Sweden, Denmark, Norway, Spain, Portugal and Finland require up to three additional letters; their punching is not shown here.[58]: 88–90  Most special characters have two or three punches (zone [12,11,0, or none] + digit [2–7] + 8); a few special characters were exceptions: "&" is 12 only, "-" is 11 only, and "/" is 0 + 1). The Space character has no punches.[58]: 38  The information represented in a column by a combination of zones [12, 11, 0] and digits [0–9] is dependent on the use of that column. For example, the combination "12-1" is the letter "A" in an alphabetic column, a plus signed digit "1" in a signed numeric column, or an unsigned digit "1" in a column where the "12" has some other use. The introduction of EBCDIC in 1964 defined columns with as many as six punches (zones [12,11,0,8,9] + digit [1–7]). IBM and other manufacturers used many different 80-column card character encodings.[59][60] A 1969 American National Standard defined the punches for 128 characters and was named the Hollerith Punched Card Code (often referred to simply as Hollerith Card Code), honoring Hollerith.[58]: 7 

    Binary punched card.

    For some computer applications, binary formats were used, where each hole represented a single binary digit (or "bit"), every column (or row) is treated as a simple bit field, and every combination of holes is permitted.

    For example, on the IBM 701[61] and IBM 704,[62] card data was read, using an IBM 711, into memory in row binary format. For each of the twelve rows of the card, 72 of the 80 columns would be read into two 36-bit words; a control panel was used to select the 72 columns to be read. Software would translate this data into the desired form. One convention was to use columns 1 through 72 for data, and columns 73 through 80 to sequentially number the cards, as shown in the picture above of a punched card for FORTRAN. Such numbered cards could be sorted by machine so that if a deck was dropped the sorting machine could be used to arrange it back in order. This convention continued to be used in FORTRAN, even in later systems where the data in all 80 columns could be read.

    As an aid to humans who had to deal with the punched cards, the IBM 026 and later 029 and 129 key punch machines could print human-readable text above each of the 80 columns.

    Invalid "lace cards" such as this pose mechanical problems for card readers.

    As a prank, punched cards could be made where every possible punch position had a hole. Such "lace cards" lacked structural strength, and would frequently buckle and jam inside the machine.[63]

    The IBM 80-column punched card format dominated the industry, becoming known as just IBM cards, even though other companies made cards and equipment to process them.[64]

    A 5081 card from a non-IBM manufacturer.

    One of the most common punched card formats is the IBM 5081 card format, a general purpose layout with no field divisions. This format has digits printed on it corresponding to the punch positions of the digits in each of the 80 columns. Other punched card vendors manufactured cards with this same layout and number.

    IBM Stub card and Short card formats

    Long cards were available with a scored stub on either end which, when torn off, left an 80 column card. The torn off card is called a stub card.

    80-column cards were available scored, on either end, creating both a short card and a stub card when torn apart. Short cards can be processed by other IBM machines.[51][65] A common length for stub cards was 51 columns. Stub cards were used in applications requiring tags, labels, or carbon copies.[51]

    IBM 40-column Port-A-Punch card format

    According to the IBM Archive: IBM's Supplies Division introduced the Port-A-Punch in 1958 as a fast, accurate means of manually punching holes in specially scored IBM punched cards. Designed to fit in the pocket, Port-A-Punch made it possible to create punched card documents anywhere. The product was intended for "on-the-spot" recording operations—such as physical inventories, job tickets and statistical surveys—because it eliminated the need for preliminary writing or typing of source documents.[66]

    IBM 96-column format

    IBM 96-column punched card

    In 1969 IBM introduced a new, smaller, round-hole, 96-column card format along with the IBM System/3 low-end business computer. These cards have tiny, 1 mm diameter circular holes, smaller than those in paper tape. Data are stored in 6-bit BCD, with three rows of 32 characters each, or 8-bit EBCDIC. In this format, each column of the top tiers are combined with two punch rows from the bottom tier to form an 8-bit byte, and the middle tier is combined with two more punch rows, so that each card contains 64 bytes of 8-bit-per-byte binary coded data.[67] As in the 80 column card, readable text was printed in the top section of the card. There was also a 4th row of 32 characters that could be printed. This format was never widely used; it was IBM-only, but they did not support it on any equipment beyond the System/3, where it was quickly superseded by the 1973 IBM 3740 Data Entry System using 8-inch floppy disks.

    Powers/Remington Rand/UNIVAC 90-column format

    A blank Remington Rand UNIVAC format card. Card courtesy of MIT Museum.
    A punched Remington Rand card with an IBM card for comparison

    The Powers/Remington Rand card format was initially the same as Hollerith's; 45 columns and round holes. In 1930, Remington Rand leap-frogged IBM's 80 column format from 1928 by coding two characters in each of the 45 columns – producing what is now commonly called the 90-column card.[31]: 142  There are two sets of six rows across each card. The rows in each set are labeled 0, 1/2, 3/4, 5/6, 7/8 and 9. The even numbers in a pair are formed by combining that punch with a 9 punch. Alphabetic and special characters use 3 or more punches.[68][69]

    Powers-Samas formats

    The British Powers-Samas company used a variety of card formats for their unit record equipment. They began with 45 columns and round holes. Later 36, 40 and 65 column cards were provided. A 130 column card was also available – formed by dividing the card into two rows, each row with 65 columns and each character space with 5 punch positions. A 21 column card was comparable to the IBM Stub card.[53]: 47–51 

    Mark sense format

    HP Educational Basic optical mark-reader card.

    Mark sense (electrographic) cards, developed by Reynold B. Johnson at IBM,[70] have printed ovals that could be marked with a special electrographic pencil. Cards would typically be punched with some initial information, such as the name and location of an inventory item. Information to be added, such as quantity of the item on hand, would be marked in the ovals. Card punches with an option to detect mark sense cards could then punch the corresponding information into the card.

    Aperture format

    Aperture cards have a cut-out hole on the right side of the punched card. A piece of 35 mm microfilm containing a microform image is mounted in the hole. Aperture cards are used for engineering drawings from all engineering disciplines. Information about the drawing, for example the drawing number, is typically punched and printed on the remainder of the card.

    Manufacturing

    Institutions, such as universities, often had their general purpose cards printed with a logo. A wide variety of forms and documents were printed on punched cards, including checks. Such printing did not interfere with the operation of the machinery.
    A punched card printing plate.

    IBM's Fred M. Carroll[71] developed a series of rotary presses that were used to produce punched cards, including a 1921 model that operated at 460 cards per minute (cpm). In 1936 he introduced a completely different press that operated at 850 cpm.[22][72] Carroll's high-speed press, containing a printing cylinder, revolutionized the company's manufacturing of punched cards.[73] It is estimated that between 1930 and 1950, the Carroll press accounted for as much as 25 percent of the company's profits.[21]

    Discarded printing plates from these card presses, each printing plate the size of an IBM card and formed into a cylinder, often found use as desk pen/pencil holders, and even today are collectible IBM artifacts (every card layout[74] had its own printing plate).

    In the mid-1930s a box of 1,000 cards cost $1.05 (equivalent to $21 in 2021).[75]

    Cultural impact

    A $75 U.S. Savings Bond, Series EE issued as a punched card. Eight of the holes record the bond serial number.
    Cartons of punched cards stored in a United States National Archives Records Service facility in 1959. Each carton could hold 2,000 cards.

    While punched cards have not been widely used for generations, the impact was so great for most of the 20th century that they still appear from time to time in popular culture. For example:

    • Accommodation of people's names: The Man Whose Name Wouldn't Fit[76][77]
    • Artist and architect Maya Lin in 2004 designed a public art installation at Ohio University, titled "Input", that looks like a punched card from the air.[78]
    • Tucker Hall at the University of Missouri – Columbia features architecture that is rumored to be influenced by punched cards. Although there are only two rows of windows on the building, a rumor holds that their spacing and pattern will spell out "M-I-Z beat k-U!" on a punched card, making reference to the university and state's rivalry with neighboring state Kansas.[79]
    • At the University of Wisconsin – Madison, the exterior windows of the Engineering Research Building[80] were modeled after a punched card layout, during its construction in 1966.
    • At the University of North Dakota in Grand Forks, a portion of the exterior of Gamble Hall (College of Business and Public Administration), has a series of light-colored bricks that resembles a punched card spelling out "University of North Dakota."[81]
    • In the 1964–1965 Free Speech Movement, punched cards became a

    metaphor... symbol of the "system"—first the registration system and then bureaucratic systems more generally ... a symbol of alienation ... Punched cards were the symbol of information machines, and so they became the symbolic point of attack. Punched cards, used for class registration, were first and foremost a symbol of uniformity. .... A student might feel "he is one of out of 27,500 IBM cards" ... The president of the Undergraduate Association criticized the University as "a machine ... IBM pattern of education."... Robert Blaumer explicated the symbolism: he referred to the "sense of impersonality... symbolized by the IBM technology."...

    — Steven Lubar[28]
    • A legacy of the 80 column punched card format is that a display of 80 characters per row was a common choice in the design of character-based terminals.[82][83] As of September 2014, some character interface defaults, such as the command prompt window's width in Microsoft Windows, remain set at 80 columns and some file formats, such as FITS, still use 80-character card images.
    • In Arthur C. Clarke's early short story "Rescue Party", the alien explorers find a "... wonderful battery of almost human Hollerith analyzers and the five thousand million punched cards holding all that could be recorded on each man, woman and child on the planet".[84] Writing in 1946, Clarke, like almost all SF authors, had not then foreseen the development and eventual ubiquity of the computer.
    • In "I.B.M.", the final track of her album This Is a Recording, comedian Lily Tomlin gives instructions that, if followed, would purportedly shrink the holes on a punch card (used by AT&T at the time for customer billing), making it unreadable.

    Do Not Fold, Spindle or Mutilate

    A common example of the requests often printed on punched cards which were to be individually handled, especially those intended for the public to use and return is "Do Not Fold, Spindle or Mutilate" (in the UK "Do not bend, spike, fold or mutilate").[28]: 43–55  Coined by Charles A. Phillips,[85] it became a motto[86] for the post–World War II era (even though many people had no idea what spindle meant), and was widely mocked and satirized. Some 1960s students at Berkeley wore buttons saying: "Do not fold, spindle or mutilate. I am a student".[87] The motto was also used for a 1970 book by Doris Miles Disney[88] with a plot based around an early computer dating service and a 1971 made-for-TV movie based on that book, and a similarly titled 1967 Canadian short film, Do Not Fold, Staple, Spindle or Mutilate.

    Standards

    A U.S. Census Bureau clerk (left) prepares punch cards using a pantograph similar to that developed by Herman Hollerith for the 1890 Census, while a second clerk (right) uses a 1930s key punch to perform the same task more quickly.
    A wall-sized display sample of a punch card for the 1954 U.S. Census of Agriculture
    • ANSI INCITS 21-1967 (R2002), Rectangular Holes in Twelve-Row Punched Cards (formerly ANSI X3.21-1967 (R1997)) Specifies the size and location of rectangular holes in twelve-row 3+14-inch-wide (83 mm) punched cards.
    • ANSI X3.11-1990 American National Standard Specifications for General Purpose Paper Cards for Information Processing
    • ANSI X3.26-1980 (R1991) Hollerith Punched Card Code
    • ISO 1681:1973 Information processing – Unpunched paper cards – Specification
    • ISO 6586:1980 Data processing – Implementation of the ISO 7- bit and 8- bit coded character sets on punched cards. Defines ISO 7-bit and 8-bit character sets on punched cards as well as the representation of 7-bit and 8-bit combinations on 12-row punched cards. Derived from, and compatible with, the Hollerith Code, ensuring compatibility with existing punched card files.

    Punched card devices

    Processing of punched cards was handled by a variety of machines, including:

    See also

    Notes


    1. Special characters are non-alphabetic, non-numeric, such as "&#,$.-/@%*?"

    References


  • Pinker, Steven Arthur (2007). The Stuff of Thought. Viking. p. 362. (NB. Notes the loss of -ed in pronunciation as it did in ice cream, mincemeat, and box set, formerly iced cream, minced meat, and boxed set.)

  • "Know-How" Makes Them Great. Tabulating Machines Division, Remington Rand Inc. 1941.

  • Cortada, James W. [at Wikidata] (1993). Before The Computer: IBM, NCR, Burroughs, & Remington Rand & The Industry They Created, 1865–1965. Princeton University Press. ISBN 978-0-691-63008-3.

  • Brooks, Frederick Phillips; Iverson, Kenneth Eugene (1963). Automatic Data Processing. Wiley. p. 94. semiautomatic

  • "Nightly News Aired on 2012-12-27 – Punch card voting lingers". NBC News.

  • Razy, Claudius (1913). Étude analytique des petits modèles de métiers exposés au musée des tissus [Analytical study of small loom models exhibited at the museum of fabrics] (in French). Lyon, France: Musée Historique des Tissus. p. 120.

  • Essinger, James (2007-03-29). Jacquard's Web: How a Hand-loom Led to the Birth of the Information Age. OUP Oxford. pp. 35–40. ISBN 978-0-19280578-2.

  • "1801: Punched cards control Jacquard loom". computerhistory.org. Retrieved 2019-01-07.

  • Babbage, Charles (1837-12-26). "On the Mathematical Powers of the Calculating Engine". The Origins of Digital Computers. pp. 19–54. doi:10.1007/978-3-642-61812-3_2. ISBN 978-3-642-61814-7.

  • Southgate, Thomas Lea (1881). "On Various Attempts That Have Been Made to Record Extemporaneous Playing". Journal of the Royal Musical Association. 8 (1): 189–196. doi:10.1093/jrma/8.1.189.

  • Seaver, Nicholas Patrick (June 2010). A Brief History of Re-performance (PDF) (Thesis). Massachusetts Institute of Technology. p. 34. Retrieved 2017-06-21.

  • "The Reproducing Piano – Early Experiments". www.pianola.com. The Pianola Institute. 2016. Retrieved 2017-06-25. At this early stage, the corresponding playback mechanism, the Mélotrope, was permanently installed inside the same harmonium used for the recording process, but by 1887 Carpentier had modified both devices, restricting the range to three octaves, allowing for the Mélotrope to be attached to any style of keyboard instrument, and designing and constructing an automatic perforating machine for mass production.

  • Hollerith, H. (April 1889). "An Electric Tabulating System". The Quarterly. School of Mines, Columbia University. X (16): 238–255.

  • Randell, Brian, ed. (1982). The Origins of Digital Computers, Selected Papers (3rd ed.). Springer-Verlag. ISBN 0-387-11319-3.

  • US patent 395782, Hollerith, Herman, "Art of compiling statistics", issued 1889-01-08

  • "Art of compiling statistics". Retrieved 2020-05-22.

  • da Cruz, Frank (2019-08-28). "Herman Hollerith". Columbia University Computing History. Columbia University. Retrieved 2020-03-09. After some initial trials with paper tape, he settled on punched cards...

  • Austrian, Geoffrey D. (1982). Herman Hollerith: The Forgotten Giant of Information Processing. Columbia University Press. pp. 15, 124, 418–. ISBN 978-0-231-05146-0.

  • A History of Sperry Rand Corporation (4th ed.). Sperry Rand. 1967. p. 32.

  • "International Business Machines Corp. v. United States, 298 U.S. 131". Justia. 1936.

  • Belden, Thomas; Belden, Marva (1962). The Lengthening Shadow: The Life of Thomas J. Watson. Little, Brown & Company. pp. 300–301.

  • "IBM Archive: Endicott card manufacturing". IBM. 2003-01-23. Retrieved 2013-10-05.

  • Lubar, Steven (1993). InfoCulture: The Smithsonian Book of Information Age Inventions. Houghton Mifflin. p. 302. ISBN 978-0-395-57042-5.

  • "Supplies Division history". IBM. 2003-01-23. 1962: 20th year […] producing savings bonds […] 1964: $75 savings bond […] produce

  • Block, H. "Wartime Building History". Codes and Ciphers Heritage Trust.

  • Luebke, David Martin [at Wikidata]; Milton, Sybil Halpern [in German] (Autumn 1994). "Locating the victim: An overview of census-taking, tabulation technology and persecution in Nazi Germany". IEEE Annals of the History of Computing. IEEE. 16 (3): 25–. doi:10.1109/MAHC.1994.298418. S2CID 16010272.

  • Black, Edwin (2009) [2001]. IBM and the Holocaust: The Strategic Alliance Between Nazi Germany and America's Most Powerful Corporation (Second ed.). Washington, DC, USA: Dialog Press. OCLC 958727212.

  • Lubar, Steven (Winter 1992). "Do Not Fold, Spindle Or Mutilate: A Cultural History Of The Punch Card" (PDF). Journal of American Culture. 15 (4): 43–55. doi:10.1111/j.1542-734X.1992.1504_43.x. Archived from the original (PDF) on 2012-10-02. Retrieved 2011-06-11. pp. 43–55: Security checks issued starting in 1936 […] (13 pages); Lubar, Steven (May 1991). "Do not fold, spindle or mutilate: A cultural history of the punch card". Smithsonian Institution. Archived from the original on 2006-08-30. (NB. An earlier version of this paper was presented to the Bureau of the Census's Hollerith Machine Centennial Celebration on 1990-06-20.)

  • Jones, Douglas W. "Punched Cards - A brief illustrated technical history". Retrieved 2023-01-21.

  • "Justice Department agrees to terminate last provisions of IBM consent decree in stages ending 5 years from today" (Press release). Justice Department. 1996-07-02. Retrieved 2021-10-04.

  • Aspray, William [in German], ed. (1990). Computing before Computers. Iowa State University Press. pp. 142, 151. ISBN 978-0-8138-0047-9.

  • "Punched Cards". miami.edu. University of Miami. Retrieved 2021-12-06. Once the cards were assembled in order in a deck, the programmer would usually draw a long diagonal line across the top edges of the cards, so that if ever one got out of order it would easily be noticed

  • IBM 519 Principles of Operation. IBM. 1946. Form 22-3292-5. An important function in IBM Accounting is the automatic preparation of IBM cards.

  • Reference Manual 1401 Data Processing System (PDF). IBM. April 1962. p. 10. A24-1403-5. The IBM 1402 Card Read-Punch provides the system with simultaneous punched-card input and output. This unit has two card feeds.

  • Truedsell, Leon E. (1965). The Development of Punch Card Tabulation in the Bureau of the Census 1890–1940. US GPO. p. 43. Includes extensive, detailed, description of Hollerith's first machines and their use for the 1890 census.

  • The Design of IBM Cards (PDF). IBM. 1956. 22-5526-4.

  • Reference Manual – IBM 82, 83, and 84 Sorters (PDF). IBM. July 1962. p. 25. A24-1034.

  • "Hollerith's Electric Tabulating Machine". Railroad Gazette. 1895-04-19. Retrieved 2015-06-04.

  • U.S. Patent 395,781, U.S. Patent 395,782, U.S. Patent 395,783

  • Hollerith, Herman (April 1889). da Cruz, Frank (ed.). "An Electric Tabulating System". The Quarterly. School of Mines, Columbia University. 10 (16): 245.

  • da Cruz, Frank (2019-12-26). "Hollerith 1890 Census Tabulator". Columbia University Computing History. Columbia University. Retrieved 2020-03-09.

  • "Large-Size U.S. Paper Money". Littleton Coin Company. Littleton Coin Company. Retrieved 2017-03-16.

  • Bashe, Charles J.; Johnson, Lyle R.; Palmer, John H.; Pugh, Emerson W. (1986). IBM's Early Computers. Cambridge, Massachusetts, USA: The MIT Press. p. 5. ISBN 978-0-262-02225-5. (NB. Also see pages 5–14 for additional information on punched cards.)

  • Comrie, Leslie John (1932). "The application of the Hollerith tabulating machine to Brown's tables of the moon". Monthly Notices of the Royal Astronomical Society. 92 (7): 694–707. Bibcode:1932MNRAS..92..694C. doi:10.1093/mnras/92.7.694.

  • U.S. Patent 1,772,492, Record Sheet for Tabulating Machines, C. D. Lake, filed 1928-06-20

  • "The IBM Punched Card". IBM. 2012-03-07. Retrieved 2014-04-25.

  • IBM Archive: 1928.

  • Pugh – Building IBM – page 49.

  • IBM Archive: Old/New-Cards.

  • p. 405, "How Computational Chemistry Became Important in the Pharmaceutical Industry", Donald B. Boyd, chapter 7 in Reviews in Computational Chemistry, Volume 23, edited by Kenny B. Lipkowitz, Thomas R. Cundari and Donald B. Boyd, Wiley & Son, 2007, ISBN 978-0-470-08201-0.

  • Principles of IBM Accounting. IBM. 1953. 224-5527-2.

  • Punched card Data Processing Principles. IBM. 1961. p. 3.

  • Cemach, Harry P. (1951). The Elements of Punched Card Accounting. Sir Isaac Pitman & Sons Ltd. pp. 9, 47–51, 137–. Machine illustrations were provided by Power-Samas Accounting Machines and British Tabulating Machine Co.

  • IBM Operator's Guide (PDF). IBM. July 1959. p. 141. A24-1010. Master Card: The first card of a group containing fixed or indicative information for that group

  • "Punched Card Codes". Cs.uiowa.edu. Retrieved 2013-10-05.

  • Rojas, Raúl, ed. (2001). Encyclopedia of Computers and Computer History. Fitzroy Dearborn. p. 656.

  • Pugh, Emerson W. (1995). Building IBM: Shaping and Industry and Its Technology. MIT Press. pp. 50–51. ISBN 978-0-262-16147-3.

  • Mackenzie, Charles E. (1980). Coded Character Sets, History and Development (PDF). The Systems Programming Series (1 ed.). Addison-Wesley Publishing Company, Inc. pp. 7, 38, 88–90. ISBN 978-0-201-14460-4. LCCN 77-90165. Archived (PDF) from the original on 2016-05-26. Retrieved 2020-05-12.

  • Winter, Dik T. "80-column Punched Card Codes". Archived from the original on 2007-04-08. Retrieved 2012-11-06.

  • Jones, Douglas W. "Punched Card Codes". Retrieved 2007-02-20.

  • Principles of Operation, Type 701 and Associated Equipment (PDF). IBM. 1953. pp. 34–36. 24-6042-1.

  • 704 Electronic Data Processing Machine Manual of Operation (PDF). IBM. 1955. pp. 39–50. 24-6661-2.

  • Raymond, Eric S., ed. (1991). The New Hacker's Dictionary. Cambridge, Massachusetts, USA: MIT Press. p. 219.

  • Maxfield, Clive "Max" (2011-10-13). "How it was: Paper tapes and punched cards". EE Times. Retrieved 2022-07-05.

  • IBM 24 Card Punch, IBM 26 Printing Card Punch Reference Manual (PDF). October 1965. p. 26. A24-0520-3. The variable-length card feed feature on the 24 or 26 allows the processing of 51-, 60-, 66-, and 80-column cards (Figure 20)

  • "IBM Archive: Port-A-Punch". 03.ibm.com. 2003-01-23. Retrieved 2013-10-05.

  • Winter, Dik T. "96-column Punched Card Code". Archived from the original on 2007-04-15. Retrieved 2012-11-06.

  • "The Punched Card". Quadibloc.com. Retrieved 2013-10-05.

  • Winter, Dik T. "90-column Punched Card Code". Archived from the original on 2005-02-28. Retrieved 2012-11-06.

  • Fisher, Lawrence M. (1998-09-18). "Reynold Johnson, 92, Pioneer In Computer Hard Disk Drives". The New York Times. Retrieved 2010-06-26.

  • "IBM Archives/Business Machines: Fred M. Carroll". 03.ibm.com. IBM. Retrieved 2013-10-05.

  • "IBM Archives: Fred M. Carroll". 03.ibm.com. IBM. 2003-01-23. Retrieved 2013-10-05.

  • "IBM Archives: Carroll Press". 03.ibm.com. IBM. 2003-01-23. Retrieved 2013-10-05.

  • "IBM Archives:1 939 Layout department". 03.ibm.com. IBM. 2003-01-23. Retrieved 2013-10-05.

  • Cortada, James W. [at Wikidata] (2019). IBM: The Rise and Fall and Reinvention of a Global Icon. MIT Press. p. 68. ISBN 978-0-262-03944-4.

  • Tyler, Theodore (1968). The Man Whose Name Wouldn't Fit. Doubleday Science Fiction.

  • Brown, Betsy (1987-12-06). "Westchester Bookcase". The New York Times. Edward Ziegler […] an editor at the Reader's Digest […] wrote a science fiction novel, The Man Whose Name Wouldn't Fit, under the pen name Theodore Tyler

  • "Mayalin.com". Mayalin.com. 2009-01-08. Retrieved 2013-10-05.

  • "Mizzou Alumni Association – Campus Traditions". Mizzou Alumni Association. Mizzou Alumni Association. Retrieved 2016-04-21.

  • "University of Wisconsin-Madison Buildings". Fpm.wisc.edu. Retrieved 2013-10-05.

  • "Photo of Gamble Hall by gatty790". Panoramio.com. Archived from the original on 2013-07-15. Retrieved 2013-10-05.

  • "All About CRT Display Terminals" (PDF). p. 11. Retrieved 2023-01-16.

  • Rader, Ron (1981-10-26). "Big Screen, 132-Column Units Setting Trend". Computerworld. Special Report p. 41. Retrieved 2023-01-16.

  • Clarke, Arthur C. (May 1946). Rescue Party. Baen Books.

  • Lee, John A. N. "Charles A. Phillips". Computer Pioneers. Institute of Electrical and Electronics Engineers Inc. p. 557. Retrieved 2018-11-06.

  • "Fold, spindle, or mutilate". At the bottom of the bill, it said […] and Jane, in her anger, […]

  • Albertson, Dean (1975). Rebels or Revolutionaries? Student Movements of the 1960s. Simon and Schuster. ISBN 978-0-67118737-8. Retrieved 2018-11-06.

    1. Disney, Doris Miles (1970). Do Not Fold, Spindle or Mutilate. Doubleday Crime Club. p. 183.

    Further reading

    • Fierheller, George A. (2014-02-07). Do not Fold, Spindle or Mutilate: The "hole" story of punched cards (PDF). Markham, Ontario, Canada: Stewart Publishing & Printing. ISBN 978-1-894183-86-4. Archived (PDF) from the original on 2022-07-09. Retrieved 2018-04-03. (NB. An accessible book of recollections (sometimes with errors), with photographs and descriptions of many unit record machines.)
    • How to Succeed At Cards (Film). IBM. 1963. (NB. An account of how IBM Cards are manufactured, with special emphasis on quality control.)
    • Murray, Francis Joseph (1961). "Chapter 6 Punched Cards". Mathematical Machines: Digital Computers. Vol. 1. Columbia University Press. (NB. Includes a description of Samas punched cards and illustration of an Underwood Samas punched card.)
    • Solomon, Jr., Martin B.; Lovan, Nora Geraldine (1967). Annotated Bibliography of Films in Automation, Data Processing, and Computer Science. University of Kentucky.
    • Dyson, George (1999-03-01). "The Undead". Wired. Vol. 7, no. 3. Archived from the original on 2022-07-09. Retrieved 2017-07-04. (NB. Article about use of punched cards in the 1990s (Cardamation).)
    • Williams, Robert V. (2002). "Punched Cards: A Brief Tutorial". IEEE Annals of the History of Computing: Web Extra. IEEE. 24 (2). Archived from the original on 2018-06-13. Retrieved 2015-03-26.

    External links

     https://en.wikipedia.org/wiki/Punched_card#IBM_80-column_format_and_character_codes

    https://en.wikipedia.org/wiki/Category:Computer-related_introductions_in_1887

    https://en.wikipedia.org/wiki/Method_of_complements

    https://en.wikipedia.org/wiki/Write-only_memory_(engineering)

     

    https://en.wikipedia.org/wiki/Antithesis

    https://en.wikipedia.org/wiki/Read-only_memory

    https://en.wikipedia.org/wiki/Write-only_memory_(joke)

    https://en.wikipedia.org/wiki/Read-only_memory

     

    Apple

    In 1982, Apple published their official Apple IIe Reference Manual (part number A2L2005),[9] which included two references to write-only memory:

    On page 233:

    • bit bucket: The final resting place of all information; see write-only memory.

    On page 250:

    • write-only memory: A form of computer memory into which information can be stored but never, ever retrieved, developed under government contract in 1975 by Professor Homberg T. Farnsfarfle. Farnsfarfle's original prototype, approximately one inch on each side, has so far been used to store more than 100 trillion words of surplus federal information. Farnsfarfle's critics have denounced his project as a six-million-dollar boondoggle, but his defenders point out that this excess information would have cost more than 250 billion dollars to store in conventional media.

    Originally written by Bruce Tognazzini, the write-only memory definition was unfortunately set upon by certain editors lacking a sense of humor. The second sentence originally read, "Approximately one inch on each side, Farnsfarfle's original prototype has so far been used...." The editors insisted the original contained a misplaced modifier whereas Tognazzini was equally adamant that Farnsfarfle was a very small man. The editors won.[10][11] 

    https://en.wikipedia.org/wiki/Write-only_memory_(joke)

    A ROM cartridge, usually referred to in context simply as a cartridge, cart, or card, is a replaceable part designed to be connected to a consumer electronics device such as a home computer, video game console or, to a lesser extent, electronic musical instruments.[1]

    ROM cartridges allow users to rapidly load and access programs and data alongside a floppy drive in a home computer; in a video game console, the cartridges are standalone. At the time around their release, ROM cartridges provided security against unauthorised copying of software. However, the manufacturing of ROM cartridges was more expensive than floppy disks, and the storage capacity was smaller.[2] ROM cartridges and slots were also used for various hardware accessories and enhancements.

    The widespread usage of the ROM cartridge in video gaming applications has led it to be often colloquially called a game cartridge

    https://en.wikipedia.org/wiki/ROM_cartridge

    https://en.wikipedia.org/wiki/Edge_connector

    https://en.wikipedia.org/wiki/Bus_(computing)

     

    Four PCI Express bus card slots (from top to 2nd bottom: ×4, ×16, ×1 and ×16), compared to a 32-bit conventional PCI bus card slot (very bottom)

    In computer architecture, a bus[1] (shortened form of the Latin omnibus, and historically also called data highway[2] or databus) is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.[3]

    Early computer buses were parallel electrical wires with multiple hardware connections, but the term is now used for any physical arrangement that provides the same logical function as a parallel electrical busbar. Modern computer buses can use both parallel and bit serial connections, and can be wired in either a multidrop (electrical parallel) or daisy chain topology, or connected by switched hubs, as in the case of Universal Serial Bus (USB). 

    Background and nomenclature

    Computer systems generally consist of three main parts:

    An early computer might contain a hand-wired CPU of vacuum tubes, a magnetic drum for main memory, and a punch tape and printer for reading and writing data respectively. A modern system might have a multi-core CPU, DDR4 SDRAM for memory, a solid-state drive for secondary storage, a graphics card and LCD as a display system, a mouse and keyboard for interaction, and a Wi-Fi connection for networking. In both examples, computer buses of one form or another move data between all of these devices.

    In most traditional computer architectures, the CPU and main memory tend to be tightly coupled. A microprocessor conventionally is a single chip which has a number of electrical connections on its pins that can be used to select an "address" in the main memory and another set of pins to read and write the data stored at that location. In most cases, the CPU and memory share signalling characteristics and operate in synchrony. The bus connecting the CPU and memory is one of the defining characteristics of the system, and often referred to simply as the system bus.

    It is possible to allow peripherals to communicate with memory in the same fashion, attaching adapters, either on the motherboard or in the form of expansion cards, directly to the system bus. This is commonly accomplished through some sort of standardized electrical connector, several of these forming the expansion bus or local bus. However, as the performance differences between the CPU and peripherals varies widely, some solution is generally needed to ensure that peripherals do not slow overall system performance. Many CPUs feature a second set of pins similar to those for communicating with memory, but able to operate at very different speeds and using different protocols (Examples include UART, SPI, and Ethernet). Others use smart controllers to place the data directly in memory, a concept known as direct memory access. Most modern systems combine both solutions, where appropriate.

    As the number of potential peripherals grew, using an expansion card for every peripheral became increasingly untenable. This has led to the introduction of bus systems designed specifically to support multiple peripherals. Common examples are the SATA ports in modern computers, which allow a number of hard drives to be connected without the need for a card. However, these high-performance systems are generally too expensive to implement in low-end devices, like a mouse. This has led to the parallel development of a number of low-performance bus systems for these solutions, the most common example being the standardized Universal Serial Bus (USB). All such examples may be referred to as peripheral buses, although this terminology is not universal.

    In modern systems the performance difference between the CPU and main memory has grown so great that increasing amounts of high-speed memory is built directly into the CPU, known as a cache. In such systems, CPUs communicate using high-performance buses that operate at speeds much greater than memory, and communicate with memory using protocols similar to those used solely for peripherals in the past. These system buses are also used to communicate with most (or all) other peripherals, through adaptors, which in turn talk to other peripherals and controllers. Such systems are architecturally more similar to multicomputers, communicating over a bus rather than a network. In these cases, expansion buses are entirely separate and no longer share any architecture with their host CPU (and may in fact support many different CPUs, as is the case with PCI). What would have formerly been a system bus is now often known as a front-side bus.

    Given these changes, the classical terms "system", "expansion" and "peripheral" no longer have the same connotations. Other common categorization systems are based on the bus's primary role, connecting devices internally or externally, PCI vs. SCSI for instance. However, many common modern bus systems can be used for both; SATA and the associated eSATA are one example of a system that would formerly be described as internal, while certain automotive applications use the primarily external IEEE 1394 in a fashion more similar to a system bus. Other examples, like InfiniBand and I²C were designed from the start to be used both internally and externally.

    Internal buses

    The internal bus, also known as internal data bus, memory bus, system bus or front-side bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as local buses, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.

    External buses

    The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.

    Address bus

    An address bus is a bus that is used to specify a physical address. When a processor or DMA-enabled device needs to read or write to a memory location, it specifies that memory location on the address bus (the value to be read or written is sent on the data bus). The width of the address bus determines the amount of memory a system can address. For example, a system with a 32-bit address bus can address 232 (4,294,967,296) memory locations. If each memory location holds one byte, the addressable memory space is 4 GiB.

    Address multiplexing

    Early processors used a wire for each bit of the address width. For example, a 16-bit address bus had 16 physical wires making up the bus. As the buses became wider and lengthier, this approach became expensive in terms of the number of chip pins and board traces. Beginning with the Mostek 4096 DRAM, address multiplexing implemented with multiplexers became common. In a multiplexed address scheme, the address is sent in two equal parts on alternate bus cycles. This halves the number of address bus signals required to connect to the memory. For example, a 32-bit address bus can be implemented by using 16 lines and sending the first half of the memory address, immediately followed by the second half memory address.

    Typically two additional pins in the control bus -- a row-address strobe (RAS) and the column-address strobe (CAS) -- are used to tell the DRAM whether the address bus is currently sending the first half of the memory address or the second half.

    Implementation

    Accessing an individual byte frequently requires reading or writing the full bus width (a word) at once. In these instances the least significant bits of the address bus may not even be implemented - it is instead the responsibility of the controlling device to isolate the individual byte required from the complete word transmitted. This is the case, for instance, with the VESA Local Bus which lacks the two least significant bits, limiting this bus to aligned 32-bit transfers.

    Historically, there were also some examples of computers which were only able to address words -- word machines.

    Memory bus

    The memory bus is the bus which connects the main memory to the memory controller in computer systems. Originally, general-purpose buses like VMEbus and the S-100 bus were used, but to reduce latency, modern memory buses are designed to connect directly to DRAM chips, and thus are designed by chip standards bodies such as JEDEC. Examples are the various generations of SDRAM, and serial point-to-point buses like SLDRAM and RDRAM. An exception is the Fully Buffered DIMM which, despite being carefully designed to minimize the effect, has been criticized for its higher latency.

    Implementation details

    Buses can be parallel buses, which carry data words in parallel on multiple wires, or serial buses, which carry data in bit-serial form. The addition of extra power and control connections, differential drivers, and data connections in each direction usually means that most serial buses have more conductors than the minimum of one used in 1-Wire and UNI/O. As data rates increase, the problems of timing skew, power consumption, electromagnetic interference and crosstalk across parallel buses become more and more difficult to circumvent. One partial solution to this problem has been to double pump the bus. Often, a serial bus can be operated at higher overall data rates than a parallel bus, despite having fewer electrical connections, because a serial bus inherently has no timing skew or crosstalk. USB, FireWire, and Serial ATA are examples of this. Multidrop connections do not work well for fast serial buses, so most modern serial buses use daisy-chain or hub designs.

    Network connections such as Ethernet are not generally regarded as buses, although the difference is largely conceptual rather than practical. An attribute generally used to characterize a bus is that power is provided by the bus for the connected hardware. This emphasizes the busbar origins of bus architecture as supplying switched or distributed power. This excludes, as buses, schemes such as serial RS-232, parallel Centronics, IEEE 1284 interfaces and Ethernet, since these devices also needed separate power supplies. Universal Serial Bus devices may use the bus supplied power, but often use a separate power source. This distinction is exemplified by a telephone system with a connected modem, where the RJ11 connection and associated modulated signalling scheme is not considered a bus, and is analogous to an Ethernet connection. A phone line connection scheme is not considered to be a bus with respect to signals, but the Central Office uses buses with cross-bar switches for connections between phones.

    However, this distinction‍—‌that power is provided by the bus‍—‌is not the case in many avionic systems, where data connections such as ARINC 429, ARINC 629, MIL-STD-1553B (STANAG 3838), and EFABus (STANAG 3910) are commonly referred to as “data buses” or, sometimes, "databuses". Such avionic data buses are usually characterized by having several equipments or Line Replaceable Items/Units (LRI/LRUs) connected to a common, shared media. They may, as with ARINC 429, be simplex, i.e. have a single source LRI/LRU or, as with ARINC 629, MIL-STD-1553B, and STANAG 3910, be duplex, allow all the connected LRI/LRUs to act, at different times (half duplex), as transmitters and receivers of data.[4]

    Bus multiplexing

    The simplest system bus has completely separate input data lines, output data lines, and address lines. To reduce cost, most microcomputers have a bidirectional data bus, re-using the same wires for input and output at different times.[5]

    Some processors use a dedicated wire for each bit of the address bus, data bus, and the control bus. For example, the 64-pin STEbus is composed of 8 physical wires dedicated to the 8-bit data bus, 20 physical wires dedicated to the 20-bit address bus, 21 physical wires dedicated to the control bus, and 15 physical wires dedicated to various power buses.

    Bus multiplexing requires fewer wires, which reduces costs in many early microprocessors and DRAM chips. One common multiplexing scheme, address multiplexing, has already been mentioned. Another multiplexing scheme re-uses the address bus pins as the data bus pins,[5] an approach used by conventional PCI and the 8086. The various "serial buses" can be seen as the ultimate limit of multiplexing, sending each of the address bits and each of the data bits, one at a time, through a single pin (or a single differential pair).

    History

    Over time, several groups of people worked on various computer bus standards, including the IEEE Bus Architecture Standards Committee (BASC), the IEEE "Superbus" study group, the open microprocessor initiative (OMI), the open microsystems initiative (OMI), the "Gang of Nine" that developed EISA, etc.[citation needed]

    First generation

    Early computer buses were bundles of wire that attached computer memory and peripherals. Anecdotally termed the "digit trunk",[6] they were named after electrical power buses, or busbars. Almost always, there was one bus for memory, and one or more separate buses for peripherals. These were accessed by separate instructions, with completely different timings and protocols.

    One of the first complications was the use of interrupts. Early computer programs performed I/O by waiting in a loop for the peripheral to become ready. This was a waste of time for programs that had other tasks to do. Also, if the program attempted to perform those other tasks, it might take too long for the program to check again, resulting in loss of data. Engineers thus arranged for the peripherals to interrupt the CPU. The interrupts had to be prioritized, because the CPU can only execute code for one peripheral at a time, and some devices are more time-critical than others.

    High-end systems introduced the idea of channel controllers, which were essentially small computers dedicated to handling the input and output of a given bus. IBM introduced these on the IBM 709 in 1958, and they became a common feature of their platforms. Other high-performance vendors like Control Data Corporation implemented similar designs. Generally, the channel controllers would do their best to run all of the bus operations internally, moving data when the CPU was known to be busy elsewhere if possible, and only using interrupts when necessary. This greatly reduced CPU load, and provided better overall system performance.

    Single system bus

    To provide modularity, memory and I/O buses can be combined into a unified system bus.[7] In this case, a single mechanical and electrical system can be used to connect together many of the system components, or in some cases, all of them.

    Later computer programs began to share memory common to several CPUs. Access to this memory bus had to be prioritized, as well. The simple way to prioritize interrupts or bus access was with a daisy chain. In this case signals will naturally flow through the bus in physical or logical order, eliminating the need for complex scheduling.

    Minis and micros

    Digital Equipment Corporation (DEC) further reduced cost for mass-produced minicomputers, and mapped peripherals into the memory bus, so that the input and output devices appeared to be memory locations. This was implemented in the Unibus of the PDP-11 around 1969.[8]

    Early microcomputer bus systems were essentially a passive backplane connected directly or through buffer amplifiers to the pins of the CPU. Memory and other devices would be added to the bus using the same address and data pins as the CPU itself used, connected in parallel. Communication was controlled by the CPU, which read and wrote data from the devices as if they are blocks of memory, using the same instructions, all timed by a central clock controlling the speed of the CPU. Still, devices interrupted the CPU by signaling on separate CPU pins.

    For instance, a disk drive controller would signal the CPU that new data was ready to be read, at which point the CPU would move the data by reading the "memory location" that corresponded to the disk drive. Almost all early microcomputers were built in this fashion, starting with the S-100 bus in the Altair 8800 computer system.

    In some instances, most notably in the IBM PC, although similar physical architecture can be employed, instructions to access peripherals (in and out) and memory (mov and others) have not been made uniform at all, and still generate distinct CPU signals, that could be used to implement a separate I/O bus.

    These simple bus systems had a serious drawback when used for general-purpose computers. All the equipment on the bus had to talk at the same speed, as it shared a single clock.

    Increasing the speed of the CPU becomes harder, because the speed of all the devices must increase as well. When it is not practical or economical to have all devices as fast as the CPU, the CPU must either enter a wait state, or work at a slower clock frequency temporarily,[9] to talk to other devices in the computer. While acceptable in embedded systems, this problem was not tolerated for long in general-purpose, user-expandable computers.

    Such bus systems are also difficult to configure when constructed from common off-the-shelf equipment. Typically each added expansion card requires many jumpers in order to set memory addresses, I/O addresses, interrupt priorities, and interrupt numbers.

    Second generation

    "Second generation" bus systems like NuBus addressed some of these problems. They typically separated the computer into two "worlds", the CPU and memory on one side, and the various devices on the other. A bus controller accepted data from the CPU side to be moved to the peripherals side, thus shifting the communications protocol burden from the CPU itself. This allowed the CPU and memory side to evolve separately from the device bus, or just "bus". Devices on the bus could talk to each other with no CPU intervention. This led to much better "real world" performance, but also required the cards to be much more complex. These buses also often addressed speed issues by being "bigger" in terms of the size of the data path, moving from 8-bit parallel buses in the first generation, to 16 or 32-bit in the second, as well as adding software setup (now standardised as Plug-n-play) to supplant or replace the jumpers.

    However, these newer systems shared one quality with their earlier cousins, in that everyone on the bus had to talk at the same speed. While the CPU was now isolated and could increase speed, CPUs and memory continued to increase in speed much faster than the buses they talked to. The result was that the bus speeds were now very much slower than what a modern system needed, and the machines were left starved for data. A particularly common example of this problem was that video cards quickly outran even the newer bus systems like PCI, and computers began to include AGP just to drive the video card. By 2004 AGP was outgrown again by high-end video cards and other peripherals and has been replaced by the new PCI Express bus.

    An increasing number of external devices started employing their own bus systems as well. When disk drives were first introduced, they would be added to the machine with a card plugged into the bus, which is why computers have so many slots on the bus. But through the 1980s and 1990s, new systems like SCSI and IDE were introduced to serve this need, leaving most slots in modern systems empty. Today there are likely to be about five different buses in the typical machine, supporting various devices.[citation needed]

    Third generation

    "Third generation" buses have been emerging into the market since about 2001, including HyperTransport and InfiniBand. They also tend to be very flexible in terms of their physical connections, allowing them to be used both as internal buses, as well as connecting different machines together. This can lead to complex problems when trying to service different requests, so much of the work on these systems concerns software design, as opposed to the hardware itself. In general, these third generation buses tend to look more like a network than the original concept of a bus, with a higher protocol overhead needed than early systems, while also allowing multiple devices to use the bus at once.

    Buses such as Wishbone have been developed by the open source hardware movement in an attempt to further remove legal and patent constraints from computer design.

    The Compute Express Link (CXL) is an open standard interconnect for high-speed CPU-to-device and CPU-to-memory, designed to accelerate next-generation data center performance.[10]

    Examples of internal computer buses

    Parallel

    Serial

    Examples of external computer buses

    Parallel

    • HIPPI High Performance Parallel Interface
    • IEEE-488 (also known as GPIB, General-Purpose Interface Bus, and HPIB, Hewlett-Packard Instrumentation Bus)
    • PC Card, previously known as PCMCIA, much used in laptop computers and other portables, but fading with the introduction of USB and built-in network and modem connections

    Serial

    Many field buses are serial data buses (not to be confused with the parallel "data bus" section of a system bus or expansion card), several of which use the RS-485 electrical characteristics and then specify their own protocol and connector:

    Other serial buses include:

    Examples of internal/external computer buses

    See also

    References


  • Clifton, Carl (1986-09-19). What Every Engineer Should Know about Data Communications. CRC Press. p. 27. ISBN 9780824775667. Archived from the original on 2018-01-17. The internal computer bus is a parallel transmission scheme; within the computer....

  • Hollingdale, Stuart H. (1958-09-19). "Session 14. Data Processing". Applications of Computers. Atlas - Application of Computers, University of Nottingham 15–19 September 1958 (Conference paper). Archived from the original on 2020-05-25. Retrieved 2020-05-25.

  • "bus Definition from PC Magazine Encyclopedia". pcmag.com. 2014-05-29. Archived from the original on 2015-02-07. Retrieved 2014-06-21.

  • Avionic Systems Standardisation Committee, Guide to Digital Interface Standards For Military Avionic Applications, ASSC/110/6/2, Issue 2, September 2003

  • Don Lancaster. "TV Typewriter Cookbook". (TV Typewriter). Section "Bus Organization". p. 82.

  • See the early Australian CSIRAC computer

  • Linda Null; Julia Lobur (2006). The essentials of computer organization and architecture (2nd ed.). Jones & Bartlett Learning. pp. 33, 179–181. ISBN 978-0-7637-3769-6. Archived from the original on 2018-01-17.

  • C. Gordon Bell; R. Cady; H. McFarland; B. Delagi; J. O'Laughlin; R. Noonan; W. Wulf (1970). A New Architecture for Mini-Computers—The DEC PDP-11 (PDF). Spring Joint Computer Conference. pp. 657–675. Archived (PDF) from the original on 2011-11-27.

  • Bray, Andrew C.; Dickens, Adrian C.; Holmes, Mark A. (1983). "28. The One Megahertz bus". The Advanced User Guide for the BBC Microcomputer. Cambridge, UK: Cambridge Microcomputer Centre. pp. 442–443. ISBN 0-946827-00-1. Archived from the original (zipped PDF) on 2006-01-14. Retrieved 2008-03-28.

  • "ABOUT CXL". Compute Express Link. Retrieved 2019-08-09.

    1. "Odds & Ends: Opti Local Bus, Aria sound cards". 2015-07-21. Retrieved 2021-02-19.

    External links

     

     https://en.wikipedia.org/wiki/Bus_(computing)

     

    https://en.wikipedia.org/wiki/Bus_(computing)

    https://en.wikipedia.org/wiki/Vacuum_tube

    https://en.wikipedia.org/wiki/Drum_memory

    https://en.wikipedia.org/wiki/Punched_tape

    https://en.wikipedia.org/wiki/Printer_(computing)

    https://en.wikipedia.org/wiki/Lead_(electronics)

    https://en.wikipedia.org/wiki/Electrical_connector

    https://en.wikipedia.org/wiki/Synchronization_(computer_science)

    https://en.wikipedia.org/wiki/System_bus

    https://en.wikipedia.org/wiki/Expansion_card

    https://en.wikipedia.org/wiki/Adapter_(computing)

    https://en.wikipedia.org/wiki/Busbar

    https://en.wikipedia.org/wiki/Parallel_communication

    https://en.wikipedia.org/wiki/Serial_communication

    https://en.wikipedia.org/wiki/Multidrop_bus

    https://en.wikipedia.org/wiki/USB

    https://en.wikipedia.org/wiki/Category:Motherboard

     

     https://en.wikipedia.org/wiki/Write-only_memory_(joke)

    https://en.wikipedia.org/wiki/Read-only_memory

    https://en.wikipedia.org/wiki/Write-only_memory_(engineering)

     

    Notes


    The board is installed so that its memory chip is at the same address location as a location in ROM. A write to that address goes both to ROM and to the board, but the read-only memory is unaffected. However a read returns only the contents of ROM since the board hardware does not respond to an external read command.[6]

    https://en.wikipedia.org/wiki/Write-only_memory_(engineering)

     

    https://en.wikipedia.org/wiki/Phonautograph

    https://en.wikipedia.org/wiki/Null_device

    https://en.wikipedia.org/wiki/Framebuffer

    https://en.wikipedia.org/wiki/Shader

    https://en.wikipedia.org/wiki/BIOS

    https://en.wikipedia.org/wiki/Megabyte

    https://en.wikipedia.org/wiki/Bank_switching

    https://en.wikipedia.org/wiki/Device_driver

    https://en.wikipedia.org/wiki/Method_of_complements

    https://en.wikipedia.org/wiki/Endianness

    https://en.wikipedia.org/wiki/Circular_shift

    https://en.wikipedia.org/wiki/Logical_shift

    https://en.wikipedia.org/wiki/Endianness

     


    In some operating systems, the null device is a device file that discards all data written to it but reports that the write operation succeeded. This device is called /dev/null on Unix and Unix-like systems, NUL: (see TOPS-20) or NUL on CP/M and DOS (internally \DEV\NUL), nul on OS/2 and newer Windows systems[1] (internally \Device\Null on Windows NT), NIL: on Amiga operating systems,[2] and NL: on OpenVMS.[3] In Windows Powershell, the equivalent is $null.[4] It provides no data to any process that reads from it, yielding EOF immediately.[5] In IBM operating systems DOS/360 and successors[a] and also in OS/360 and successors[b] such files would be assigned in JCL to DD DUMMY.

    In programmer jargon, especially Unix jargon, it may also be called the bit bucket[6] or black hole.

    History

    According to the Berkeley UNIX man page, Version 4 Unix, which AT&T released in 1973, included a null device.[7][8]

    Usage

    The null device is typically used for disposing of unwanted output streams of a process, or as a convenient empty file for input streams. This is usually done by redirection.

    The /dev/null device is a special file, not a directory, so one cannot move a whole file or directory into it with the Unix mv command.

    References in computer culture

    This entity is a common inspiration for technical jargon expressions and metaphors by Unix programmers, e.g. "please send complaints to /dev/null", "my mail got archived in /dev/null", and "redirect to /dev/null"—being jocular ways of saying, respectively: "don't bother sending complaints", "my mail was deleted", and "go away". The iPhone Dev Team commonly uses the phrase "send donations to /dev/null", meaning they do not accept donations.[9] The fictitious person name "Dave (or Devin) Null" is sometimes similarly used (e.g., "send complaints to Dave Null").[10] In 1996, Dev Null was an animated virtual reality character created by Leo Laporte for MSNBC's computer and technology TV series The Site. Dev/null is also the name of a vampire hacker in the computer game Vampire: The Masquerade – Redemption. A 2002 advertisement for the Titanium PowerBook G4 reads The Titanium Powerbook G4 Sends other UNIX boxes to /dev/null.[11]

    The null device is also a favorite subject of technical jokes,[12] such as warning users that the system's /dev/null is already 98% full. The 1995 April Fool's issue of the German magazine c't reported on an enhanced /dev/null chip that would efficiently dispose of the incoming data by converting it to a flicker on an internal glowing LED.

    See also

    Notes


  • The most recent being z/VSE.

    1. The most recent being z/OS.

    References


  • "Redirecting Error Messages from Command Prompt: STDERR/STDOUT". support.microsoft.com. Retrieved 2020-03-06.

  • Commodore-Amiga, Inc. (1986). The AmigaDOS Manual. Bantam Books. p. 12. ISBN 0-553-34294-0.

  • "OpenVMS Programming Concepts Manual". h30266.www3.hpe.com. Archived from the original on 2020-07-02. Retrieved 2020-03-06.

  • SteveL-MSFT. "about_Automatic_Variables - PowerShell". docs.microsoft.com. Retrieved 2020-03-06.

  • "Single Unix Specification Section 10.1: Directory Structure and Files". The Open Group. Retrieved 2012-11-29.

  • "bit bucket". Jargon File. Retrieved 2013-12-27.

  • "null(4)". The NetBSD Project.

  • "sh(1) manual from version 4 Unix".

  • "Dev-Team Blog - Donations to /dev/null". 2015-09-07. Archived from the original on 2015-09-07. Retrieved 2018-11-15.

  • Goodman, Danny (2004). Spam Wars: Our Last Best Chance to Defeat Spammers, Scammers, and Hackers. New York: SelectBooks. p. 170. ISBN 9781590790632. OCLC 1036874851.

  • "Image: unixad.jpg, (1094 × 720 px)". Archived from the original on 2013-03-26. Retrieved 2015-09-02.

    1. "The FreeBSD Funnies". Freebsd.org. Retrieved 2012-11-28.

    https://en.wikipedia.org/wiki/Null_device

     

     

    The null device is also a favorite subject of technical jokes,[12] such as warning users that the system's /dev/null is already 98% full. The 1995 April Fool's issue of the German magazine c't reported on an enhanced /dev/null chip that would efficiently dispose of the incoming data by converting it to a flicker on an internal glowing LED

    https://en.wikipedia.org/wiki/Null_device

     

    https://en.wikipedia.org/wiki/Category:CP/M_technology

    https://en.wikipedia.org/wiki/Null_coalescing_operator

    https://en.wikipedia.org/wiki/Memory_hole

    https://en.wikipedia.org/wiki/Rm_(Unix)

    https://en.wikipedia.org/wiki//dev/zero

     

    rm (short for remove) is a basic command on Unix and Unix-like operating systems used to remove objects such as computer files, directories and symbolic links from file systems and also special files such as device nodes, pipes and sockets, similar to the del command in MS-DOS, OS/2, and Microsoft Windows. The command is also available in the EFI shell.[1] 

    https://en.wikipedia.org/wiki/Rm_(Unix)

    The command generally does not destroy file data, since its purpose is really merely to unlink references, and the filesystem space freed may still contain leftover data from the removed file. This can be a security concern in some cases, and hardened versions sometimes provide for wiping out the data as the last link is being cut, and programs such as shred and srm are available which specifically provide data wiping capability. 

    https://en.wikipedia.org/wiki/Rm_(Unix)

     

    A memory hole is any mechanism for the deliberate alteration or disappearance of inconvenient or embarrassing documents, photographs, transcripts or other records, such as from a website or other archive, particularly as part of an attempt to give the impression that something never happened.[1][2] The concept was first popularized by George Orwell's 1949 dystopian novel Nineteen Eighty-Four, where the Party's Ministry of Truth systematically re-created all potentially embarrassing historical documents, in effect, re-writing all of history to match the often-changing state propaganda. These changes were complete and undetectable. 

    https://en.wikipedia.org/wiki/Memory_hole

     

    https://en.wikipedia.org/wiki/Censorship_of_images_in_the_Soviet_Union

     

    https://en.wikipedia.org/wiki/Safe_navigation_operator 


    A File Control Block (FCB) is a file system structure in which the state of an open file is maintained. A FCB is managed by the operating system, but it resides in the memory of the program that uses the file, not in operating system memory. This allows a process to have as many files open at one time as it wants, provided it can spare enough memory for an FCB per file.

    The FCB originates from CP/M and is also present in most variants of DOS, though only as a backwards compatibility measure in MS-DOS versions 2.0 and later. A full FCB is 36 bytes long; in early versions of CP/M, it was 33 bytes. This fixed size, which could not be increased without breaking application compatibility, led to the FCB's eventual demise as the standard method of accessing files.

    The meanings of several of the fields in the FCB differ between CP/M and DOS, and also depending on what operation is being performed. The following fields have consistent meanings:[1]

    Offset Byte
    size
    Contents
    0x00 1 Drive number — 0 for default, 1 for A:, 2 for B:, ...
    0x01 8 File name and extension — together these form a 8.3 file name.
    0x09 3
    0x0C 20 Implementation dependent — should be initialised to zero before the FCB is opened.
    0x20 1 Record number in the current section of the file — used when performing sequential access.
    0x21 3 Record number to use when performing random access.

    The 20-byte-long field starting at offset 0x0C contained fields which (among others) provided further information about the file:[2]

    Offset Byte
    size
    Contents
    0x0E 2 File's record length in bytes.
    0x10 4 Total file size in bytes.
    0x14 2 Date of last modification to file contents.
    0x16 2 Time of last modification.

    Further values were used by newer versions of DOS until new information could no longer fit in these 20 bytes. Some preceding "negative offset" bytes were squeezed from reserved spaces in CP/M Zero Page and DOS Program Segment Prefix for storing file attributes.[1]

    Usage

    In CP/M, 86-DOS and PC DOS 1.x/MS-DOS 1.xx, the FCB was the only method of accessing files. Under DOS a few INT 21h subfunctions provided the interface to operate on files using the FCB.[1][3][4] When, with MS-DOS 2, preparations were made to support multiple processes or users,[3][4] use other filesystems[3][4] than FAT or to share files[4] over networks in the future, FCBs were felt to be too small to handle the extra data required for such features[4] and therefore FCBs were seen as inadequate for various future expansion paths.[3] Also, they didn't provide a field to specify sub-directories.[3] Exposing file system related data to user-space was also seen as a security risk.[4] FCBs were thus superseded by file handles, as used on UNIX and its derivatives.[3] File handles are simply consecutive integer numbers associated with specific open files.

    If a program uses the newer file handle API to open a file, the operating system will manage its internal data structure associated with that file in its own memory area. This has the great advantage that these structures can grow in size in later operating system versions without breaking compatibility with application programs; its disadvantage is that, given the rather simplistic memory management of DOS, space for as many of these structures as the most "file-hungry" program is likely to use has to be reserved at boot time and cannot be used for any other purpose while the computer is running. Such memory reservation is done using the FILES= directive in the CONFIG.SYS file. This problem does not occur with FCBs in DOS 1 or in CP/M, since the operating system stores all that it needs to know about an open file inside the FCB and thus does not need to use any per-file memory in operating system memory space. When using FCBs in MS-DOS 3 or later, the FCB format depends on whether SHARE.EXE is loaded and whether the FCB refers to a local or remote file and often refers to a SFT entry. Because of this, the number of FCBs which can be kept open at once in DOS 3 or higher is limited as well, usually to 4; using the FCBS= directive in the CONFIG.SYS file, it may be increased beyond that number if necessary. Under DR-DOS, both FILES and FCBS come from the same internal pool of available handles structures and are assigned dynamically as needed.[5]

    FCBs were supported in all versions of MS-DOS and Windows until the introduction of the FAT32 filesystem. Windows 95, Windows 98 and Windows Me do not support the use of FCBs on FAT32 drives due to its 32-bit cluster numbers,[4] except to read the volume label. This caused some old DOS applications, including WordStar, to fail under these versions of Windows.

    The FCB interface does not work properly on Windows NT, 2000, etc. either – WordStar does not function properly on these operating systems. DOS emulators DOSEMU and DOSBox implement the FCB interface properly, thus they are a way to run older DOS programs that need FCBs on modern operating systems.

    Disk Transfer Area

    A companion data structure used together with the FCB was the Disk Transfer Area (DTA).[2] This is the name given to the buffer where file contents (records) would be read into/written from. File access functions in DOS that used the FCB assumed a fixed location for the DTA, initially pointing to a part of the PSP (see next section); this location could be changed by calling a DOS function, with subsequent file accesses implicitly using the new location.

    With the deprecation of the FCB method, the new file access functions which used file handles also provided a means to specify a memory buffer for file contents with every function call, such that maintaining concurrent, independent buffers (either for different files or for the same file) became much more practical.

    Program Segment Prefix & Program Initialisation

    Every DOS executable started from the shell (COMMAND.COM) was provided with a pre-filled 256-byte long data structure called the Program Segment Prefix (PSP). Relevant fields within this structure include:[2]

    Offset Byte
    size
    Contents
    0x02 2 Available memory for the program in 16-byte chunks.
    0x2C 2 Segment address containing the program's environment variables.
    0x5C 16 Prepared FCB for first command line argument (unopened).
    0x6C 20 Prepared FCB for second command line argument (unopened).
    0x80 1 Length of command line.
    0x81 127 Command line contents.

    This data structure could be found at the beginning of the data segment whose address was provided by DOS at program start in the DS and ES segment registers. Besides providing the program's command line verbatim at address 0x81, DOS also tried to construct two FCB's corresponding to the first two words in the command line, the purpose being to save work for the programmer in the common case where these words were filenames to operate on. Since these FCB's remained unopened, no problem would ensue even if these command line words did not refer to files.

    The initial address for the DTA was set to overlay the area in the PSP (at address 0x80) where the command line arguments were stored, such that a program needed to parse this area for command line arguments before invoking DOS functions that made use of the DTA (such as reading in a file record), unless the program took care to change the address of the DTA to some other memory region (or not use the DTA/FCB functions altogether, which soon became deprecated in favour of file handles).

    See also

    References


  • "FCB - Standard DOS File Control Block".

  • Rodriguez-Rosello, Miguel (1992). 8088-8086/8087 Programacion Ensamblador En Entorno MSDOS (in Spanish). Ediciones Anaya Multimedia. ISBN 84-7614-128-9.

  • Zbikowski, Mark; Allen, Paul; Ballmer, Steve; Borman, Reuben; Borman, Rob; Butler, John; Carroll, Chuck; Chamberlain, Mark; Chell, David; Colee, Mike; Courtney, Mike; Dryfoos, Mike; Duncan, Rachel; Eckhardt, Kurt; Evans, Eric; Farmer, Rick; Gates, Bill; Geary, Michael; Griffin, Bob; Hogarth, Doug; Johnson, James W.; Kermaani, Kaamel; King, Adrian; Koch, Reed; Landowski, James; Larson, Chris; Lennon, Thomas; Lipkie, Dan; McDonald, Marc; McKinney, Bruce; Martin, Pascal; Mathers, Estelle; Matthews, Bob; Melin, David; Mergentime, Charles; Nevin, Randy; Newell, Dan; Newell, Tani; Norris, David; O'Leary, Mike; O'Rear, Bob; Olsson, Mike; Osterman, Larry; Ostling, Ridge; Pai, Sunil; Paterson, Tim; Perez, Gary; Peters, Chris; Petzold, Charles; Pollock, John; Reynolds, Aaron; Rubin, Darryl; Ryan, Ralph; Schulmeisters, Karl; Shah, Rajen; Shaw, Barry; Short, Anthony; Slivka, Ben; Smirl, Jon; Stillmaker, Betty; Stoddard, John; Tillman, Dennis; Whitten, Greg; Yount, Natalie; Zeck, Steve (1988). "Technical advisors". The MS-DOS Encyclopedia: versions 1.0 through 3.2. By Duncan, Ray; Bostwick, Steve; Burgoyne, Keith; Byers, Robert A.; Hogan, Thom; Kyle, Jim; Letwin, Gordon; Petzold, Charles; Rabinowitz, Chip; Tomlin, Jim; Wilton, Richard; Wolverton, Van; Wong, William; Woodcock, JoAnne (Completely reworked ed.). Redmond, Washington, USA: Microsoft Press. ISBN 1-55615-049-0. LCCN 87-21452. OCLC 16581341. (xix+1570 pages; 26 cm) (NB. This edition was published in 1988 after extensive rework of the withdrawn 1986 first edition by a different team of authors. [1])

  • Chappell, Geoff (January 1994). Schulman, Andrew; Pedersen, Amorette (eds.). DOS Internals. The Andrew Schulman Programming Series (1st printing, 1st ed.). Addison Wesley Publishing Company. ISBN 978-0-201-60835-9. (xxvi+738+iv pages, 3.5"-floppy [2][3]) Errata: [4][5][6]

    1. Paul, Matthias R. (1997-07-30). NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. MPDOSTIP. Release 157 (in German) (3 ed.). Archived from the original on 2017-08-23. Retrieved 2012-01-11. (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.)

    Further reading

    https://en.wikipedia.org/wiki/File_Control_Block


    In Unix-like operating systems, a device file or special file is an interface to a device driver that appears in a file system as if it were an ordinary file. There are also special files in DOS, OS/2, and Windows. These special files allow an application program to interact with a device by using its device driver via standard input/output system calls. Using standard system calls simplifies many programming tasks, and leads to consistent user-space I/O mechanisms regardless of device features and functions. 

    Overview

    Device files usually provide simple interfaces to standard devices (such as printers and serial ports), but can also be used to access specific unique resources on those devices, such as disk partitions. Additionally, device files are useful for accessing system resources that have no connection with any actual device, such as data sinks and random number generators.

    There are two general kinds of device files in Unix-like operating systems, known as character special files and block special files. The difference between them lies in how much data is read and written by the operating system and hardware. These together can be called device special files in contrast to named pipes, which are not connected to a device but are not ordinary files either.

    MS-DOS borrowed the concept of special files from Unix but renamed them devices.[1] Because early versions of MS-DOS did not support a directory hierarchy, devices were distinguished from regular files by making their names reserved words, for example: the infamous CON. These were chosen for a degree of compatibility with CP/M and are still present in modern Windows for backwards compatibility.

    In some Unix-like systems, most device files are managed as part of a virtual file system traditionally mounted at /dev, possibly associated with a controlling daemon, which monitors hardware addition and removal at run time, making corresponding changes to the device file system if that's not automatically done by the kernel, and possibly invoking scripts in system or user space to handle special device needs. The FreeBSD, DragonFly BSD and Darwin have a dedicated file system devfs; device nodes are managed automatically by this file system, in kernel space. Linux used to have a similar devfs implementation, but it was abandoned later, and then removed since version 2.6.17;[2] Linux now primarily uses a user space implementation known as udev, but there are many variants.

    In Unix systems which support chroot process isolation, such as Solaris Containers, typically each chroot environment needs its own /dev; these mount points will be visible on the host OS at various nodes in the global file system tree. By restricting the device nodes populated into chroot instances of /dev, hardware isolation can be enforced by the chroot environment (a program can not meddle with hardware that it can neither see nor name—an even stronger form of access control than Unix file system permissions).

    MS-DOS managed hardware device contention (see terminate-and-stay-resident program) by making each device file exclusive open. An application attempting to access a device already in use would discover itself unable to open the device file node. A variety of device driver semantics are implemented in Unix and Linux concerning concurrent access.[3]

    Unix and Unix-like systems

    A simplified structure of the Linux kernel. File systems are implemented as part of the I/O subsystem.

    Device nodes correspond to resources that an operating system's kernel has already allocated. Unix identifies those resources by a major number and a minor number,[4] both stored as part of the structure of a node. The assignment of these numbers occurs uniquely in different operating systems and on different computer platforms. Generally, the major number identifies the device driver and the minor number identifies a particular device (possibly out of many) that the driver controls:[5] in this case, the system may pass the minor number to a driver. However, in the presence of dynamic number allocation, this may not be the case (e.g. on FreeBSD 5 and up).

    As with other special file types, the computer system accesses device nodes using standard system calls and treats them like regular computer files. Two standard types of device files exist; unfortunately their names are rather counter-intuitive for historical reasons, and explanations of the difference between the two are often incorrect as a result.

    Character devices

    Character special files or character devices provide unbuffered, direct access to the hardware device. They do not necessarily allow programs to read or write single characters at a time; that is up to the device in question. The character device for a hard disk, for example, will normally require that all reads and writes be aligned to block boundaries and most certainly will not allow reading a single byte.

    Character devices are sometimes known as raw devices to avoid the confusion surrounding the fact that a character device for a piece of block-based hardware will typically require programs to read and write aligned blocks.

    Block devices

    Block special files or block devices provide buffered access to hardware devices, and provide some abstraction from their specifics.[6] Unlike character devices, block devices will always allow the programmer to read or write a block of any size (including single characters/bytes) and any alignment. The downside is that because block devices are buffered, the programmer does not know how long it will take before written data is passed from the kernel's buffers to the actual device, or indeed in what order two separate writes will arrive at the physical device. Additionally, if the same hardware exposes both character and block devices, there is a risk of data corruption due to clients using the character device being unaware of changes made in the buffers of the block device.

    Most systems create both block and character devices to represent hardware like hard disks. FreeBSD and Linux notably do not; the former has removed support for block devices,[7] while the latter creates only block devices. In Linux, to get a character device for a disk, one must use the "raw" driver, though one can get the same effect as opening a character device by opening the block device with the Linux-specific O_DIRECT flag.

    Pseudo-devices

    Device nodes on Unix-like systems do not necessarily have to correspond to physical devices. Nodes that lack this correspondence form the group of pseudo-devices. They provide various functions handled by the operating system. Some of the most commonly used (character-based) pseudo-devices include:

    • /dev/null – accepts and discards all input written to it; provides an end-of-file indication when read from.
    • /dev/zero – accepts and discards all input written to it; produces a continuous stream of null characters (zero-value bytes) as output when read from.
    • /dev/full – produces a continuous stream of null characters (zero-value bytes) as output when read from, and generates an ENOSPC ("disk full") error when attempting to write to it.
    • /dev/random – produces bytes generated by the kernel's cryptographically secure pseudorandom number generator. Its exact behavior varies by implementation, and sometimes variants such as /dev/urandom or /dev/arandom are also provided.
    • /dev/stdin, /dev/stdout, /dev/stderr – access the process's standard streams.
    • /dev/fd/n – accesses the process's file descriptor n.

    Additionally, BSD-specific pseudo-devices with an ioctl interface may also include:

    Node creation

    Nodes are created by the mknod system call. The command-line program for creating nodes is also called mknod. Nodes can be moved or deleted by the usual filesystem system calls (rename, unlink) and commands (mv, rm).

    Some Unix versions include a script named makedev or MAKEDEV to create all necessary devices in the directory /dev. It only makes sense on systems whose devices are statically assigned major numbers (e.g., by means of hardcoding it in their kernel module).

    While some other Unix systems such as FreeBSD, used kernel-based device node management via devfs only, and not supporting manual node creation. mknod(2) system call and mknod(8) command exist to keep compatibility with POSIX, but manually created device nodes outside devfs will not function at all.[9]

    Naming conventions

    The following prefixes are used for the names of some devices in the /dev hierarchy, to identify the type of device:

    Some additional prefixes have come into common use in some operating systems:

    • fb: frame buffer
    • fd: (platform) floppy disks, though this same abbreviation is also commonly used to refer to file descriptor
    • hd: ("classic") IDE driver (previously used for ATA hard disk drive, ATAPI optical disc drives, etc.)
      • hda: the master device on the first ATA channel (usually identified by major number 3 and minor number 0)
      • hdb: the slave device on the first ATA channel
      • hdc: the master device on the second ATA channel
      • hdd: the slave device on the second ATA channel
    • parport, pp: parallel ports
    • mem: Main memory (character device)
    • NVMe driver:
      • nvme0: first registered device's device controller (character device)
      • nvme0n1: first registered device's first namespace (block device)
      • nvme0n1p1: first registered device's first namespace's first partition (block device)
    • MMC driver:
      • mmcblk: storage driver for MMC media (SD cards, eMMC chips on laptops, etc.)
        • mmcblk0: first registered device
        • mmcblk0p1: first registered device's first partition
    • SCSI driver, also used by libATA (modern PATA/SATA driver), USB, IEEE 1394, etc.:
      • sd: mass-storage driver (block device)
        • sda: first registered device
        • sdb, sdc, etc.: second, third, etc. registered devices
      • ses: Enclosure driver
      • sg: generic SCSI layer
      • sr: "ROM" driver (data-oriented optical disc drives; scd is just a secondary alias)
      • st: magnetic tape driver
    • tty: terminals
      • ttyS: (platform) serial port driver
      • ttyUSB: USB serial converters, modems, etc.

    The canonical list of the prefixes used in Linux can be found in the Linux Device List, the official registry of allocated device numbers and /dev directory nodes for the Linux operating system.[10]

    For most devices, this prefix is followed by a number uniquely identifying the particular device. For hard drives, a letter is used to identify devices and is followed by a number to identify partitions. Thus a file system may "know" an area on a disk as /dev/sda3, for example, or "see" a networked terminal session as associated with /dev/pts/14.

    On disks using the typical PC master boot record, the device numbers of primary and the optional extended partition are numbered 1 through 4, while the indexes of any logical partitions are 5 and onwards, regardless of the layout of the former partitions (their parent extended partition does not need to be the fourth partition on the disk, nor do all four primary partitions have to exist).

    Device names are usually not portable between different Unix-like system variants, for example, on some BSD systems, the IDE devices are named /dev/wd0, /dev/wd1, etc.

    devfs

    devfs is a specific implementation of a device file system on Unix-like operating systems, used for presenting device files. The underlying mechanism of implementation may vary, depending on the OS.

    Maintaining these special files on a physically-implemented file system such as a hard drive is inconvenient, and as it needs kernel assistance anyway, the idea arose of a special-purpose logical file system that is not physically stored.

    Defining when devices are ready to appear is not trivial. The devfs approach is for the device driver to request creation and deletion of devfs entries related to the devices it enables and disables.

    PC DOS, TOS, OS/2, and Windows

    A device file is a reserved keyword used in PC DOS, TOS, OS/2, and Windows systems to allow access to certain ports and devices.

    MS-DOS borrowed the concept of special files from Unix but renamed them devices.[1] Because early versions of MS-DOS did not support a directory hierarchy, devices were distinguished from regular files by making their names reserved words. This means that certain file names were reserved for devices, and should not be used to name new files or directories.[11] The reserved names themselves were chosen to be compatible with "special files" handling of PIP command in CP/M. There were two kinds of devices in DOS: Block Devices (used for disk drives) and Character Devices (generally all other devices, including COM and PRN devices).[12]

    DOS uses device files for accessing printers and ports. Most versions of Windows also contain this support, which can cause confusion when trying to make files and folders of certain names, as they cannot have these names.[13] Versions 2.x of MS-DOS provide the AVAILDEV CONFIG.SYS parameter that, if set to FALSE, makes these special names only active if prefixed with \DEV\, thus allowing ordinary files to be created with these names.[14]

    GEMDOS, the DOS-like part of Atari TOS, supported similar device names to DOS, but unlike DOS it required a trailing ":" character (on DOS, this is optional) to identify them as devices as opposed to normal filenames (thus "CON:" would work on both DOS and TOS, but "CON" would name an ordinary file on TOS but the console device on DOS). In MiNT and MagiC, a special UNIX-like unified filesystem view accessed via the "U:" drive letter also placed device files in "U:\DEV".

    Device keyword[13] Use as input Use as output
    CON Receives typed data until ^Z (Ctrl-Z) is pressed. Prints data to the console.
    PRN[15] Prints text to the printer, usually redirected to LPT1 or LST. Sometimes reconfigurable to other devices.[16][17][18]
    AUX (not in OS/2[15]) Reads data from an auxiliary device, usually a serial device like COM1. Sometimes reconfigurable to other devices.[16][17][18] Sends data to an auxiliary device, usually a serial device like COM1. Sometimes reconfigurable to other devices.[16][17][18]
    NUL Returns null or no data. Discards received data.
    CLOCK$ (still named CLOCK in some versions of MS-DOS 2.11[19][16][17])
    KEYBD$ (only in multitasking MS-DOS) ? ?
    KBD$ (only in OS/2[15]) ? ?
    SCREEN$ (only in multitasking MS-DOS and OS/2[15]) ? ?
    POINTER$ (only in OS/2[15]) ? ?
    MOUSE$ (only in OS/2[15]) ? ?
    $IDLE$ (only in DR-DOS (since 5.0) and Multiuser DOS (since Concurrent DOS 386) families)
    CONFIG$ (only in MS-DOS 7.0 and higher)
    LST (only in 86-DOS and DOS 1.x, also in Hewlett-Packard's MS-DOS 2.11 for the HP Portable Plus[16][17]) Returns no data. Sends data to the line printer. (LPT2 for Hewlett-Packard's MS-DOS 2.11[16][17])
    PLT (only in Hewlett-Packard's MS-DOS 2.11 for the HP Portable Plus[16][17]) Returns no data. Sends data to the assigned plotter. The attached plotter device is reconfigurable.[16][17]
    LPT1, LPT2, LPT3, and sometimes LPT4 (in DR-DOS 7.02 and higher and some versions of Multiuser DOS) Sends data to the selected parallel port.
    COM1, COM2, COM3, COM4 Reads data from the selected serial port. Sends data to the selected serial port.
    82164A (only in Hewlett-Packard's MS-DOS 2.11 for the HP Portable Plus[16][17]) Redirects to COM2. Redirects to COM2.

    Using shell redirection and pipes, data can be sent to or received from a device. For example, typing the following will send the file c:\data.txt to the printer:

    TYPE c:\data.txt > PRN

    PIPE, MAILSLOT, and MUP are other standard Windows devices.[20]

    IOCS

    The 8-bit operating system of Sharp pocket computers like the PC-E500, PC-E500S etc. consists of a BASIC interpreter, a DOS 2-like File Control System (FCS) implementing a rudimentary 12-bit FAT-like filesystem, and a BIOS-like Input/Output Control System (IOCS) implementing a number of standard character and block device drivers as well as special file devices including STDO:/SCRN: (display), STDI:/KYBD: (keyboard), COM: (serial I/O), STDL:/PRN: (printer), CAS: (cassette tape), E:/F:/G: (memory file), S1:/S2:/S3: (memory card), X:/Y: (floppy), SYSTM: (system), and NIL: (function).[21]

    Implementations

    Operating System Filesystem or managing software Standard mount point Author Notes
    Linux 2.3.46pre5–2.6.17 devfs[22] and devfsd /dev Richard Gooch Implemented fully in the kernel, with optional daemon devfsd to handle device node events in user space.[23] Obsolete – users are encouraged to migrate to udev and/or devtmpfs.
    Linux 2.5– udev on any fs, but usually tmpfs /dev Greg Kroah-Hartman, Kay Sievers and Dan Stekloff Implemented largely in user space, device information is gathered from sysfs. Device files can be stored on a conventional general-purpose file system, or in a memory file system (tmpfs).
    Linux 2.6.32– devtmpfs with or without udev /dev Kay Sievers, Jan Blunck, Greg Kroah-Hartman A hybrid kernel/userspace approach of a device filesystem to provide nodes before udev runs for the first time[24]
    Solaris devfs[25] /devices Sun Microsystems Introduced with dynamic loaded drivers in Solaris-2.1
    FreeBSD 2.0– devfs /dev Poul-Henning Kamp Implemented fully in the kernel.
    DragonFly BSD 2.3.2– devfs /dev Alex Hornung Implemented fully in the kernel.
    macOS devfs /dev Apple Inc. Implemented fully in the kernel.
    HP-UX B.11.31 devfs /dev HP Implemented fully in the kernel.
    Plan 9
    # Bell Labs Implemented in the kernel.
    RISC OS DeviceFS Devices: Acorn Computers DeviceFS was started in 1991[26] and first appeared in RISC OS 3. It manages several device like special files, most commonly: Parallel, Serial, FastParallel, and USB. The SystemDevices module implements the pseudo devices such as: Vdu, Kbd, Null and Printer.
    MS-DOS, PC DOS, DR-DOS FAT \DEV (and /DEV) various As implemented in the kernel, character devices appear in the virtual \DEV directory and any disk directory. Under MS-DOS/PC DOS 2.x, the CONFIG.SYS AVAILDEV=FALSE directive can be used to force devices to exist only in \DEV.
    MagiC, MiNT, MultiTOS
    U:\DEV[27][28] Application Systems Heidelberg, Eric R. Smith, Atari Corp. The special U: drive contains a virtual DEV directory, inside which one can find device files.
    Windows 9x
    \\devices\ Microsoft
    Windows NT
    \Device Microsoft The \Device directory is a part of Windows NT object namespace.
    Windows NT Win32 Subsystem
    \\.\ Microsoft The \\.\ prefix makes supporting APIs access the Win32 device namespace instead of the Win32 file namespace. The Win32 device names are symbolic links to device names under Windows NT \Device directory.

    See also

    References


  • "Windows for Workgroups: How VSHARE.386 Manages File Sharing". Support.microsoft.com. 1999-09-22. Retrieved 2014-01-22.

  • Kroah-Hartman, Greg (2005-06-20). "[PATCH] devfs: Remove devfs from the kernel tree". Linux kernel source tree. Retrieved 2021-06-12.

  • Corbet, Jonathan; Kroah-Hartman, Greg; Rubini, Alessandro (2005). "Access Control on a Device File". Linux Device Drivers, 3rd Edition. O'Reilly. Retrieved 2017-04-28. The next step beyond a single-open device is to let a single user open a device in multiple processes but allow only one user to have the device open at a time.

  • Kernighan, Brian W.; Pike, Rob (1984). The UNIX Programming Environment. Prentice-Hall. p. 66. ISBN 0-13-937681-X.

  • Neil Brown (2010-10-27). "Ghosts of Unix Past: a historical search for design patterns". Linux Weekly News. Retrieved 2014-03-30.

  • "IEEE Std 1003.1, 2013 Edition". Retrieved 2014-04-24.

  • "FreeBSD Architecture Handbook". Retrieved 2013-03-07.

  • "usr.sbin/envstat/envstat.c". BSD Cross Reference. NetBSD. November 2021.

  • "mknod(8)". FreeBSD Manual Pages. The FreeBSD Project. 2016-10-03. Retrieved 2021-06-12.

  • Linux Assigned Names and Numbers Authority (2009-04-06). "Linux allocated devices (2.6+ version)". Linux kernel (Documentation/devices.txt). Archived from the original on 2016-04-24. Retrieved 2013-06-08.

  • "Avoid Creating Macintosh Filenames that are NT Device Names". Support.microsoft.com. 2006-11-01. Retrieved 2014-01-22.

  • "device attributes". Stanislavs.org. Retrieved 2014-01-22.

  • "MS-DOS Device Driver Names Cannot be Used As File Names". Revision 2.0. Microsoft. 2003-05-12. KB74496, Q74496. Archived from the original on 2012-07-21.

  • "Undocumented Commands". 4dos.info. Kevtronics. 2002-04-12. Retrieved 2014-05-16.

  • IBM Operating System/2 Technical Reference - Programming Family (PDF). Vol. 1 (1st ed.). IBM. September 1987 [1986]. Archived (PDF) from the original on 2017-01-03.

  • Hewlett-Packard - Technical Reference Manual - Portable PLUS (1 ed.). Corvallis, OR, USA: Hewlett-Packard Company, Portable Computer Division. August 1985. 45559-90001. Retrieved 2016-11-27.

  • Hewlett-Packard - Technical Reference Manual - Portable PLUS (PDF) (2 ed.). Portable Computer Division, Corvallis, OR, USA: Hewlett-Packard Company. December 1986 [August 1985]. 45559-90006. Archived (PDF) from the original on 2016-11-28. Retrieved 2016-11-27.

  • Paul, Matthias R. (1997-10-02). "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM README.TXT". Archived from the original on 2003-10-04. Retrieved 2009-03-29. [1]

  • Paterson, Tim; Microsoft (2013-12-19) [1983]. "Microsoft DOS V1.1 and V2.0: /msdos/v20source/SKELIO.TXT, /msdos/v20source/HRDDRV.ASM". Computer History Museum, Microsoft. Retrieved 2014-03-25. (Note: While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11.)

  • "REG: CurrentControlSet Entries PART 2: SessionManager". Support.microsoft.com. 2006-11-01. Retrieved 2014-01-22.

  • Technical Reference Manual PC-E500 (PDF). Sharp Corporation, Information Systems Group, Personal Equipment Division. March 1990. p. 17. Archived (PDF) from the original on 2017-03-14. Retrieved 2017-03-14.

  • Gooch, Richard (2002-08-20). "Linux Devfs (Device File System) FAQ". Retrieved 2021-06-13.

  • Gooch, Richard. "My Linux Contributions". Retrieved 2021-06-13. Devfsd provides configurable management of device nodes using the Linux Device Filesystem.

  • "Driver Core: devtmpfs - kernel-maintained tmpfs-based /dev". LWN. Retrieved 2009-08-10.

  • "devfs(7FS)". man pages section 7: Device and Network Interfaces. Oracle. 2014. Retrieved 2021-06-12.

  • "Project Black change log". Retrieved 2016-05-15.

  • "The drive U: in MagiC". 2016-03-28. Archived from the original on 2017-01-15. Retrieved 2017-01-09.

    1. "FreeMiNT-Portal - mint.doc". 2000-04-27. Archived from the original on 2017-01-15. Retrieved 2017-01-09.

    Further reading

     

    https://en.wikipedia.org/wiki/Device_file

    https://en.wikipedia.org/wiki/Category:Disk_file_systems

    https://en.wikipedia.org/wiki/Zero_page_(CP/M)

    https://en.wikipedia.org/wiki/Category:Special-purpose_file_systems

    https://en.wikipedia.org/wiki/Filesystem-level_encryption

    https://en.wikipedia.org/wiki/Deniable_encryption

     

    Plausible deniability is the ability of people, typically senior officials in a formal or informal chain of command, to deny knowledge of or responsibility for actions committed by members of their organizational hierarchy. They may do so because of a lack or absence of evidence that can confirm their participation, even if they were personally involved in or at least willfully ignorant of the actions. If illegal or otherwise disreputable and unpopular activities become public, high-ranking officials may deny any awareness of such acts to insulate themselves and shift the blame onto the agents who carried out the acts, as they are confident that their doubters will be unable to prove otherwise. The lack of evidence to the contrary ostensibly makes the denial plausible (credible), but sometimes, it makes any accusations only unactionable.

    The term typically implies forethought, such as intentionally setting up the conditions for the plausible avoidance of responsibility for one's future actions or knowledge. In some organizations, legal doctrines such as command responsibility exist to hold major parties responsible for the actions of subordinates who are involved in actions and nullify any legal protection that their denial of involvement would carry.

    In politics and espionage, deniability refers to the ability of a powerful player or intelligence agency to pass the buck and to avoid blowback by secretly arranging for an action to be taken on its behalf by a third party that is ostensibly unconnected with the major player. In political campaigns, plausible deniability enables candidates to stay clean and denounce third-party advertisements that use unethical approaches or potentially libelous innuendo.

    Although plausible deniability has existed throughout history, the term was coined by the CIA in the early 1960s to describe the withholding of information from senior officials to protect them from repercussions if illegal or unpopular activities became public knowledge.[1] 

    https://en.wikipedia.org/wiki/Plausible_deniability

     

    See also

    • Chaffing and winnowing – cryptographic technique to achieve confidentiality without using encryption
    • Deniable authentication – message authentication between a set of participants where the participants themselves can be confident in the authenticity of the messages, but it cannot be proved to a third party after the event
    • dm-crypt – disk encryption software
    • Key disclosure law – Legislation that requires individuals to surrender cryptographic keys to law enforcement
    • Plausible deniability – Ability to deny responsibility
    • Rubber-hose cryptanalysis – Extraction of cryptographic secrets by coercion or torture
    • Steganography – Hiding messages in other messages
    • Unicity distance – Length of ciphertext needed to unambiguously break a cipher

    https://en.wikipedia.org/wiki/Deniable_encryption

     

    https://en.wikipedia.org/wiki/Edit_distance

    https://en.wikipedia.org/wiki/Regular_grammar

    https://en.wikipedia.org/wiki/Time_Warp_Edit_Distance

     

    https://en.wikipedia.org/wiki/Deniable_encryption

    https://en.wikipedia.org/wiki/String-to-string_correction_problem

    https://en.wikipedia.org/wiki/Time_Warp_Edit_Distance

    https://en.wikipedia.org/wiki/Pseudorandom_permutation

    https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator

    https://en.wikipedia.org/wiki/Chaff_(countermeasure)

    https://en.wikipedia.org/wiki/Watermarking_attack

    https://en.wikipedia.org/wiki/Deniable_authentication

    https://en.wikipedia.org/wiki/Off-the-Record_Messaging

    https://en.wikipedia.org/wiki/HMAC

    https://en.wikipedia.org/wiki/Forward_secrecy

    https://en.wikipedia.org/wiki/Vanish_(computer_science)

    https://en.wikipedia.org/wiki/Chaffing_and_winnowing

    https://en.wikipedia.org/wiki/Rubber-hose_cryptanalysis

    https://en.wikipedia.org/wiki/Steganography

    https://en.wikipedia.org/wiki/Entropy

    https://en.wikipedia.org/wiki/Rm_(Unix)

    https://en.wikipedia.org/wiki/Context-free_language

     https://en.wikipedia.org/wiki/Bit_numbering#Least_significant_byte

     


     

     

    No comments:

    Post a Comment