EBCDIC

Da Wikipedia, l'enciclopedia libera.

In informatica, la sigla EBCDIC (dall'inglese Extended Binary Coded Decimal Interchange Code) indica un sistema di codifica dell'informazione a 8 bit usato in numerosi sistemi operativi di produzione IBM, sia per elaboratori di classe mainframe (ad es. z/OS, OS/390, VM e VSE) che per minicomputer (ad es. OS/400 e i5/OS). Viene inoltre utilizzato da varie piattaforme di altri produttori, quali BS2000/OSD di Fujitsu Siemens Computers, MPE/iX di Hewlett Packard e Master Control Program (MCP) di Unisys. Deriva dalla codifica a 6 bit binary-coded decimal, utilizzata nelle schede perforate e nella maggior parte delle periferiche IBM della fine degli anni 1950 e dell'inizio degli anni 1960.

Storia[modifica | modifica sorgente]

La codifica EBCDIC, ideata da IBM tra il 1963 e il 1964, è stata presentata al pubblico in occasione del lancio della propria linea di mainframe Sistema /360. Si trattava di una codifica a 8 bit in grado di estendere in modo rilevante il sistema BCD a 6 bit allora in uso; il suo sviluppo è stato indipendente rispetto alla ASCII, che è una codifica a 7 bit.

Curiosamente, IBM era anche tra i principali promotori del comitato di standardizzazione per la codifica ASCII. Tuttavia, l'azienda si trovava nell'impossibilità di approntare periferiche ASCII (ad es. perforatrici di schede) in tempo utile per il lancio del Sistema /360, il che la spinse ad avvalersi del sistema EBCDIC come ripiego. D'altra parte, il Sistema /360 fu un grande successo commerciale e ciò favorì un'ampia diffusione dell'EBCDIC.

Tutte le periferiche e i sistemi operativi IBM di classe mainframe, con l'eccezione di Linux on zSeries, impiegano in modo nativo la codifica EBCDIC e dispongono di software per la traduzione da e verso altri sistemi. Anche molte periferiche hardware sono in grado di gestire la traduzione tra più codifiche; i mainframe più recenti come il citato zSeries sono dotati di istruzioni hardware, a livello del processore, per rendere più rapida la conversione tra set di caratteri.

Al momento della sua realizzazione, l'EBCDIC offriva il vantaggio di una relativa facilità di inserimento dei dati per mezzo delle schede perforate; poiché tale supporto è ormai del tutto obsoleto, negli elaboratori moderni il sistema EBCDIC viene usato solo per compatibilità verso il basso. Non presenta infatti alcun vantaggio di carattere tecnico rispetto alle codepage basate sulla codifica ASCII quali le varie ISO-8859 e Unicode. Analogamente a quanto avviene per le codepage basate su set di caratteri ASCII Estesi a singolo byte, la maggior parte delle codepage EBCDIC non consente l'uso contemporaneo di più di due lingue (inglese e una seconda lingua) nell'ambito di ciascun database o file di testo.

Qualora sia necessario un supporto completo per testi multilingue, è necessario disporre di sistemi in grado di trattare un numero molto più elevato di caratteri. Di solito ciò viene realizzato attraverso opportune implementazioni della specifica Unicode. Il consorzio che gestisce la specifica ha proposto un formato di trasformazione Unicode (Unicode Transformation Format) per EBCDIC chiamato UTF-EBCDIC ma non ne è previsto l'uso in ambienti di interscambio aperti; peraltro, tale formato viene utilizzato molto di rado anche in sistemi del tutto basati su EBCDIC. I mainframe IBM supportano il formato UTF-16 ma non l'UTF-EBCDIC in modo nativo.

Caratteristiche tecniche[modifica | modifica sorgente]

Le codepage basate su EBCDIC e ASCII non sono compatibili tra loro. Poiché i computer sono in grado di elaborare solo dati numerici, entrambe le convenzioni assegnano specifici caratteri a tali numeri. Pertanto, identici valori numerici sono interpretati come caratteri diversi in funzione della codepage utilizzata. Per utilizzare dei dati memorizzati in EBCDIC è necessaria una conversione tra codepage per visualizzare correttamente le informazioni su elaboratori basati sulla codifica ASCII, quali i comuni personal computer.

Ciascun carattere della codifica EBCDIC occupa 8 bit (1 byte), diviso in due metà chiamate nibble. I 4 bit più significativi, chiamati zonatura, rappresentano la categoria di appartenenza del carattere, mentre i 4 bit meno significativi identificanti il carattere specifico vengono chiamati digit.

Nella codifica EBCDIC esiste una opportuna corrispondenza tra i codici esadecimali che rappresentano i caratteri e i codici di perforazione su schede per gli stessi; questa caratteristica era importante nel momento in cui il codice fu sviluppato. Una perforatrice IBM poteva infatti codificare una scheda a 12 righe con un massimo di 2 perforazioni per colonna, la prima in una posizione compresa nelle prime tre righe (le righe di zonatura) e la seconda nell'ambito delle restanti nove (le righe numeriche). Si poteva quindi interpretare la zonatura come un valore decimale compreso tra 0 e 3 e la parte numerica come una cifra compresa tra 0 (assenza di perforazione) e 9 (perforazione nella riga corrispondente). La prima versione della codifica EBCDIC rispondeva alla semplice formula:

(0xf-zonatura)«4+numero

e definiva solo le 10 x 4 celle dell'angolo inferiore sinistro nella tabella riportata più oltre. La zonatura fu a quanto pare invertita per consentire l'ordinamento alfabetico delle lettere.

I primi 64 simboli (da 00 a 3F) sono dei caratteri di controllo, 33 dei quali possiedono un corrispettivo nella codifica ASCII. Una differenza rilevante tra i due schemi è la presenza di simboli separati per il solo ritorno carrello (carriage return, CR) e avanzamento riga (line feed, LF) nella codifica ASCII, dove vengono generalmente usati come terminatori di riga nei file di testo; viceversa, la codifica EBCDIC possiede due ulteriori caratteri per questo scopo: nuova riga (new line, NL) e nuova riga inversa (reverse newline, RNL). I restanti 31 codici di controllo vengono utilizzati per varie funzioni di controllo di terminali e dispositivi, in gran parte legate a peculiarità dell'hardware IBM.

Esistono più versioni di EBCDIC, personalizzate in funzione delle esigenze dei vari Paesi. Alcune nazioni asiatiche ne usano un'estensione a doppio byte che consente ai mainframe la visualizzazione di caratteri cinesi, giapponesi e coreani. Tale estensione contiene anche opportuni codici per il passaggio dalla modalità "a byte singolo" a quella "a doppio byte" [0x0E,0x0F].

Di norma IBM assegna a ciascuna codepage che definisce un codice numerico chiamato CCSID (Coded Character Set IDentifier). Occorre rilevare che un identico CCSID può prevedere diverse posizioni dei caratteri nell'ambito di una codepage. Ad esempio, il carattere newline in UNIX System Services su z/OS può corrispondere a valori numerici diversi rispetto agli altri sistemi operativi basati su EBCDIC. Di tale variabilità occorre tenere conto per evitare problemi nel trasferimento di dati testuali in codifica EBCDIC tra piatteforme diverse.

Disposizione della codepage[modifica | modifica sorgente]

La tabella che segue presenta la CCSID 500, una delle varianti della codifica EBCDIC. In tale disposizione, i simboli da 00 a 3F e FF sono caratteri di controllo, il 40 rappresenta lo spazio, il 41 lo spazio insecabile (non-breaking space) e CA il trattino opzionale (soft hyphen). Di ciascun carattere viene mostrato il corrispondente codice ISO 8859-1:

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
0- NUL
00
SOH
01
STX
02
ETX
03
SEL
 
HT
09
RNL
 
DEL
7F
GE
 
SPS
 
RPT
 
VT
0B
FF
0C
CR
0D
SO
0E
SI
0F
1- DLE
10
DC1
11
DC2
12
DC3
13
RES
ENP
 
NL
 
BS
08
POC
 
CAN
18
EM
19
UBS
 
CU1
 
IFS
1C
IGS
1D
IRS
1E
IUS
ITB
1F
2- DS
 
SOS
 
FS
 
WUS
 
BYP
INP
 
LF
0A
ETB
17
ESC
1B
SA
 
SFE
 
SM
SW
 
CSP
 
MFA
 
ENQ
05
ACK
06
BEL
07
3-  
 
 
 
SYN
16
IR
 
PP
 
TRN
 
NBS
 
EOT
04
SBS
 
IT
 
RFF
 
CU3
 
DC4
14
NAK
15
 
 
SUB
1A
4- SP
20
RSP
A0
â
E2
ä
E4
à
E0
á
E1
ã
E3
å
E5
ç
E7
ñ
F1
[
5B
.
2E
<
3C
(
28
+
2B
 !
21
5- &
26
é
E9
ê
EA
ë
EB
è
E8
í
E0
î
EE
ï
EF
ì
ED
ß
DF
]
5D
$
24
*
2A
)
29
 ;
3B
^
5E
6- -
2D
/
2F
Â
C2
Ä
C4
À
C0
Á
C1
Ã
C3
Å
C5
Ç
C7
Ñ
D1
¦
A6
,
2C
 %
25
_
5F
>
3E
 ?
3F
7- ø
F8
É
C9
Ê
CA
Ë
CB
È
C8
Í
CD
Î
CE
Ï
CF
Ì
CC
`
60
 :
3A
#
23
@
40
'
27
=
3D
"
22
8- Ø
D8
a
61
b
62
c
63
d
64
e
65
f
66
g
67
h
68
i
69
«
AB
 »
BB
ð
F0
ý
FD
þ
FE
±
B1
9- °
B0
j
6A
k
6B
l
6C
m
6D
n
6E
o
6F
p
70
q
71
r
72
ª
AA
º
BA
æ
E6
¸
B8
Æ
C6
¤
A4
A- µ
B5
~
7E
s
73
t
74
u
75
v
76
w
77
x
78
y
79
z
7A
¡
A1
¿
BF
Ð
D0
Ý
DD
Þ
DE
®
AE
B- ¢
A2
£
A3
¥
A5
·
B7
©
A9
§
A7

B6
¼
BC
½
BD
¾
BE
¬
AC
|
7C
¯
AF
¨
A8
´
B4
×
D7
C- {
7B
A
41
B
42
C
43
D
44
E
45
F
46
G
47
H
48
I
49
SHY
AD
ô
F4
ö
F6
ò
F2
ó
F3
õ
F5
D- }
7D
J
4A
K
4B
L
4C
M
4D
N
4E
O
4F
P
50
Q
51
R
52
¹
B9
û
FB
ü
FC
ù
F9
ú
FA
ÿ
FF
E- \
5C
÷
F7
S
53
T
54
U
55
V
56
W
57
X
58
Y
59
Z
5A
²
82
Ô
D4
Ö
D6
Ò
D2
Ó
D3
Õ
D5
F- 0
30
1
31
2
32
3
33
4
34
5
35
6
36
7
37
8
38
9
39
³
83
Û
D8
Ü
DC
Ù
D9
Ú
DA
EO
 

Voci correlate[modifica | modifica sorgente]