ASCII standard was adopted in 1963, and now hardly anyone uses a character encoding where the first 128 characters differ from ASCII. Nevertheless, until the end of the last century, EBCDIC was actively used — the standard encoding for IBM mainframes and their Soviet clones ЕС ЭВМ. EBCDIC remains the primary encoding in z/OS — the standard OS for modern IBM Z mainframes.
What immediately catches the eye when looking at EBCDIC is that the letters do not run in sequence: between I i J and between R i S there are unused positions (on ЕС ЭВМ, characters of Cyrillic were in these gaps). Who could have thought of encoding letters with unequal spaces between adjacent letters?

The name EBCDIC (“Extended BCDIC”) hints that this encoding — unlike ASCII — was created not from scratch, but based on the six-bit encoding BCDIC, which was used starting from (1954):

There is no direct backward compatibility: a convenient feature of BCDIC, lost when transitioning to EBCDIC, was that the digits 0—9 correspond to codes 0-9. However, there were already gaps of seven codes between I i J and eight codes between R i S in BCDIC. Where did they come from?
The history of (E)BCDIC begins simultaneously with the history of IBM — long before electronic computers. IBM was formed as a result of the merger of four companies, the most technologically advanced of which was the ‘Tabulating Machine Company’, founded in 1896 by Herman Hollerith — the inventor of . The first tabulators simply counted the number of punch cards perforated in a certain place; but in 1905, Hollerith began manufacturing decimal tabulators. Each card for the decimal tabulator consisted of fields of arbitrary length, and numbers recorded in these fields in a familiar decimal form were summed across the entire deck. The breakdown of the card into fields was determined by connecting wires on the tabulator's control panel. For example, on this punch card of Hollerith's, in the Library of Congress, the number 23456789012345678 is clearly marked, though how it was split into fields is unknown:

The most attentive may notice that Hollerith's card has 12 rows for holes, although only ten are enough for digits; while in BCDIC, only 12 codes from the 16 possible are used for each value of the top two bits.
Naravno, ovo nije slučajna podudarnost. Isprva je Hollerith predviđao dodatne redove za „specijalne oznake“, koje se nisu zbrajale, već su se jednostavno brojale — kao u najranijim tabulatorima. (Danas bismo ih nazvali „bitnim poljima“.) Osim toga, među „specijalnim oznakama“ mogla su se postaviti grupna indikatorska polja: ako su tijekom tabulacije bili potrebni ne samo konačni zbrojevi, već i međurezultati, tabulator se zaustavljao kada bi otkrio promjenu bilo kojeg od grupnih indikatora, a operator je morao prepisivati međurezultate s digitalne table na papir, resetirati tablu i nastaviti tabulaciju. Na primjer, pri izračunavanju knjigovodstvenih bilansa, grupa kartica mogla je odgovarati jednom datumu ili jednom poslovnom partneru.
Do 1920. godine, kada je Hollerith već otišao u mirovinu, u uporabu su ušli „tiskani tabulatori“, koji su se mogli priključiti na teletip i sami tiskati međurezultate, ne zahtijevajući intervenciju operatora. Složenost je sada bila odrediti čemu odgovara svaki od otisnutih brojeva. Godine 1931. IBM je odlučio da pomoću „specijalnih oznaka“ označava slova: oznaka u 12. redu značila je slovo od A do I, u 11. redu — od J do R, u nultom — od S do Z. Novi „alfabetski tabulator“ mogao je tiskati naziv svake grupe kartica zajedno s međurezultatima; pri tome, neprobijeni stupac pretvarao se u razmak između simbola. Primijetite da S označava kombinaciju rupa 0+2, dok se kombinacija 0+1 prvotno nije koristila zbog straha da bi dva otvora blizu zajedno u jednom stupcu mogla prouzročiti mehaničke probleme u čitaču.

Sada na tablicu BCDIC možemo pogledati iz malo drugačije perspektive:

Osim što su 0 i razmak zamijenjeni, gornja dva bita definiraju „specijalnu oznaku“, koju su od 1931. probijali u perforiranoj kartici za odgovarajući simbol; a donja četiri bita određuju broj probijen u glavnom dijelu kartice. Podrška simbolima & - / IBM-ovi su se pridružili tabulatorima 1930-ih, a kodiranje tih simbola u BCDIC-u odgovara kombinacijama rupa koje su za njih probijene. Kada je bila potrebna podrška za još veći broj simbola, kao dodatna 'specijalna oznaka' počeli su probijati red 8 — na taj način, u jednom stupcu moglo je biti do tri rupe. Ovaj format perforiranih kartica zadržao se gotovo nepromijenjen do kraja stoljeća. U SSSR-u su zadržane IBM-ove kodne oznake za latinicu i interpunkciju, a za slova ćirilice probijale su se odmah više 'specijalnih oznaka' u redovima 12, 11, 0 — ne ograničavajući se na tri rupe u jednom stupcu.
Kada je kreiran računar IBM 704, dugo se nije razmišljalo o kodiranju simbola za njega: uzeli su kodiranje koje se već koristilo u perforiranim karticama i samo su 0 'stavili na svoje mesto'. Godine 1964., pri prelasku s BCDIC-a na EBCDIC, donjih četiri bita svakog simbola su ostali nepromijenjeni, iako su gornji bitovi malo premeštani. Tako je format perforiranih kartica, koji je Hollerith odabrao na početku prošlog stoljeća, utjecao na arhitekturu svih IBM-ovih računara, uključujući IBM Z.
Izvor: habr.com
