Standard ASCII was adopted in 1963, and now it is unlikely that anyone uses a character encoding where the first 128 characters differ from ASCII. However, until the end of the last century, EBCDIC was actively used — the standard encoding for IBM mainframes and their Soviet clones, the ES VM. EBCDIC remains the primary encoding in z/OS — the standard OS for modern IBM Z mainframes.
What immediately stands out when looking at EBCDIC is that the letters do not follow consecutively: between I i J and between R i S there are unused positions (on the ES VM, Cyrillic symbols were allocated to these gaps). Who could have thought to encode letters with unequal gaps between neighboring letters? IBM 704.

There is no direct backward compatibility: a convenient feature of BCDIC, lost when transitioning to EBCDIC, was that the digits corresponded to codes 0-9. However, there were already gaps of seven codes between (1954):

in BCDIC. Where did they come from? 0—9 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 I i J tabulator. R i S The first tabulators simply counted the number of punch cards punched in a certain place; but in 1905, Hollerith began production of
decimal tabulators. Each card for a decimal tabulator consisted of fields of arbitrary length, and the numbers recorded in these fields in the usual decimal form were summed across the entire deck. The card field division was determined by wiring connections on the tabulator's switching panel. For example, on this punch card of Hollerith, in the Library of Congress, the number 23456789012345678 is clearly punched, though it is unknown how it is divided into fields: The most observant may notice that on Hollerith's card there are 12 rows for holes, although ten are enough for digits; in BCDIC, only 12 codes out of 16 possible are used for each value of the two most significant bits. tabulatorów. Każda karta dla dziesiętnego tabulatora składała się z pól dowolnej długości, a liczby zapisane w tych polach w tradycyjnej dziesiętnej formie były sumowane przez całą talię. Podział karty na pola był określany przez połączenie przewodów na panelu przełącznika tabulatora. Na przykład na tej karcie perforowanej Holleritha, w Bibliotece Kongresu, wyraźnie wybito liczbę 23456789012345678, niewiadomo jak podzieloną na pola:

Najbardziej spostrzegawcze osoby mogły zauważyć, że na karcie Holleritha znajduje się 12 rzędów dla otworów, chociaż dla cyfr wystarczą tylko dziesięć; a w BCDIC do każdego z wartości dwóch najwyższych bitów używa się tylko 12 kodów z 16 możliwych.
Oczywiście, to nie jest przypadkowy zbieg okoliczności. Pierwotnie Hollerith przewidział dodatkowe kolumny dla „specjalnych oznaczeń”, które nie były sumowane, a jedynie zliczane — tak jak w najwcześniejszych tabulatorach. (Dziś nazwalibyśmy je „polem bitowym”.) Ponadto, wśród „specjalnych oznaczeń” można było ustawić wskaźniki grupy: jeżeli w trakcie tabulacji potrzebne były nie tylko ostateczne sumy, ale i pośrednie, tabulator zatrzymywał się, gdy zauważył zmianę któregokolwiek z wskaźników grupy, a operator musiał przepisać pośrednie sumy z cyfrowych tablic na papier, zresetować tablice i wznowić tabulację. Na przykład, przy obliczaniu bilansów księgowych grupa kart mogła odpowiadać jednej dacie lub jednemu kontrahentowi.
Do 1920 roku, kiedy Hollerith przeszedł na emeryturę, wprowadzono do użycia „drukujące tabulatory”, które łączyły się z teletype'm i mogły same drukować pośrednie sumy, nie wymagając ingerencji operatora. Skomplikowano teraz zadanie, aby określić, do czego odnosi się każda z wydrukowanych liczb. W 1931 roku IBM postanowiła za pomocą „specjalnych oznaczeń” oznaczać litery: oznaczenie w 12. wierszu oznaczało literę od A do I, w 11. — od J do R, w zerowym — od S do Z. Nowy „alfabetyczny tabulator” mógł wydrukować nazwę każdej grupy kart wraz z pośrednimi sumami; przy tym nieprzebity słupek zamieniał się w przerwę między symbolami. Zauważcie, że S oznaczane jest kombinacją otworów 0+2, a kombinacja 0+1 pierwotnie nie była używana z obawy, że dwa otwory obok siebie w jednej kolumnie mogą spowodować problemy mechaniczne w czytniku.

Teraz na tabelę BCDIC można spojrzeć z nieco innej perspektywy:

Z wyjątkiem tego, że 0 i spacja zostały zamienione miejscami, starsze dwa bity określają „specjalne oznaczenie”, które od 1931 roku były przebijane w perforowanej karcie dla odpowiadającego symbolu; a młodsze cztery bity określają cyfrę, przebijaną w głównej części karty. Obsługa symboli & - / Została wprowadzona do tabulatorów IBM w latach 30. XX wieku, a kodowanie tych znaków w BCDIC odpowiada dziurkom, które dla nich stworzono. Gdy potrzebna była obsługa jeszcze większej liczby znaków, jako dodatkowy "znak specjalny" zaczęto wywiercać rząd 8 — dzięki czemu w jednej kolumnie mogło znajdować się do trzech dziurek. Taki format kart perforowanych pozostał praktycznie niezmieniony do końca stulecia. W ZSRR pozostawiono kodowania IBM dla łaciny i interpunkcji, a dla liter cyrylicy wywiercano od razu kilka "znaków specjalnych" w rzędach 12, 11, 0 — nie ograniczając się do trzech dziurek w jednej kolumnie.
Kiedy tworzono komputer IBM 704, nad kodowaniem znaków dla niego długo się nie zastanawiano: wzięli kodowanie, które już wtedy było używane w kartach perforowanych, i jedynie 0 "postawili na miejscu". W 1964 roku, przy przejściu z BCDIC na EBCDIC, młodsze cztery bity każdego znaku pozostawiono bez zmian, chociaż nieco przetasowano starsze bity. Tak więc format kart perforowanych, wybrany przez Holleritha na początku XX wieku, wpłynął na architekturę wszystkich komputerów IBM, aż do IBM Z włącznie.
Źródło: habr.com
