BCDIC

来自GSXAB的知识库
BCDIC
术语名称 BCDIC
英语名称 BCDIC
别名 BCD交换码, BCD interchange code, 二进制编码的十进制交换码, binary-coded decimal interchange code, alphanumeric BCD

BCDIC ,即 BCD 交换码,指历史上与 BCD 码兼容的一系列字符编码,没有明确标准。 这一编码诞生于 80 列打孔卡纸时代,是 IBM 在早期计算机系统中使用的。实际时间覆盖 1950 年代到 1960 年代初的计算机。

BCDIC 系列编码没有同一规范标准,基本只共享核心设计思想。

字符库特征

作为早期计算机,只使用数字、一套大写拉丁字母以及部分必要字符,实际编码的字符极少。

码位分配特征

由于 80 列打孔卡为 80 列× 12 行,在 BCDIC 的二进制编码之前还有过 IBM 80 列打孔卡纸编码,其中 12 行分别被标记为 12 (或 Y)、 11 、 0 、 1~9 ,如果一列只有一个 0~9 的孔,则代表对应数字,否则 1~9 中有一个孔, 12、11、0 中有一个孔,就会映射到 26 个大写字母和斜杠(打孔为 0 + 1 ,夹在 R 和 S 之间),共计 27 个码位。

为兼容以上卡纸编码, BCDIC 系列编码使用 6 个二进制位编码,并分为两部分:区域行(zone row)占高 2 位,对应 12 、 11 、 0 三选一或不选,数码行(digit row)占低 4 位,对应 1~9 中选择一个。BCDIC 系列编码中,通常将区域行为 00 的数据留给正常的 BCD 码。但是 BCDIC 会把全零留给空格,因此 0 被移动到第 10 个编码(有不移动的例外)。相对地,在后三行 0001~1001 即 1~9 的 27 个码位范围内反向排列大写字母。其余的与 0~9 不对齐的数字位 00001011~ 的码位上安排符号。

仍然保持区域行打在上 3 行(0、11、12 列,顺序不一定),数码行打在下 9 行的习惯,只是变成了二进制。

码位表

由于有多种变体,本文以 48 字符[1]的版本作为主要部分。

BCDIC (6-bit) Character Set
_0
?? 0000
_1
?? 0001
_2
?? 0010
_3
?? 0011
_4
?? 0100
_5
?? 0101
_6
?? 0110
_7
?? 0111
_8
?? 1000
_9
?? 1001
_A
?? 1010
_B
?? 1011
_C
?? 1100
_D
?? 1101
_E
?? 1110
_F
?? 1111
0_ 00 ???? 空格 1 2 3 4 5 6 7 8 9 0 # @
1_ 01 ???? / S T U V W X Y Z , %
2_ 10 ???? - J K L M N O P Q R $ *
3_ 11 ???? & A B C D E F G H I .

其中空白单元格表示这一码位在编码字符集中没有被分配给字符。

其他变体在编码区域行三个孔的顺序、 0 的处理、特殊符号的表示上有差异,基本逻辑基本是一致的。

字符编码

BDCIC 是打孔卡时代的编码方式,其最终编码到 80 列 12 行的打孔卡纸上,只是与原始的编码相比,这个版本允许同一个区域中存在多个孔。 一般把对应原来 12、11、0 这一区域的高 2 位部分打到 12、11、0 三位,对应原来 1~9 这一区域的低 4 位部分打到 1~9 这个部分。

参考资料

BCD (character encoding) - Wikipedia