旧的IBM大型机行式打印机上的危险音乐

我们最近在计算机历史博物馆购买了一套打孔卡,用于一套已有50年历史的计算机音乐程序。 当时大多数计算机没有声卡,但是富有创造力的程序员找到了使用线性打印机传递音乐的方法。 我们有点担心该程序可能会损坏打印机,但仍然有在古老的IBM 1401 大型机上运行该程序的风险。正如您所料,线性打印机播放的音乐听起来很糟糕-但旋律可以解析并且打印机没有受到伤害。


IBM 1401商业计算机于1959年推出,并在1960年代中期成为最畅销的计算机-交付了10,000多个这样的系统。 IBM 1401的主要竞争优势是IBM 1403高速行式打印机,快速旋转的字符链使打印机每秒可打印10条线,且质量出色-在1970年代出现激光打印机之前,这被认为是最好的质量。


打印机的印刷电路为1401。它具有48个不同的字符,重复5次。

行式打印机非常嘈杂,但是程序员很快发现,从噪音中打印某些行的字符时,可以提取某些频率。 通过打印必要的行可以弹奏音符。 在1970年,计算机科学专家Ron Mack使用现有的音乐程序在打孔卡上编码了几首歌曲。 他最近遇到了他的旧程序,并给了我们机会尝试它们。

线性打印机如何工作


要打印字符,打印机使用带有字符的链接链,这些链接在纸张的对面高速旋转,并且在纸张和链之间有一个色带。 打印机产生的行数为132列-也就是说,每列都有自己的锤子和电磁体。 在适当的时刻,当所需的符号移过锤子时,电磁体将锤子压在纸上,然后纸和胶带一起撞到链接上,打印出该符号。


IBM 1401线性打印机打印引擎(根据说明)

为了使此过程正常进行,打印机需要仔细计算操作时间。 链条以2.3 m / s的速度旋转,每隔11.1μs,下一个链节与锤子相对。 控制电路几乎没有足够的时间从主存储器中读取该符号的位置,将其与位于锤子下方的符号进行比较,并在发生巧合的情况下敲击锤子。 在132个时间间隔内,每个槌骨都可以打印一个字符; 这称为“扫描”。 由于集合中有48个字符(没有大写字母),因此要打印任何列中的所有字符,您需要重复此过程48次。 对于每次扫描,链只移动一个字符宽度。


IBM 1403打印机的锤组,下面是132个锤的冲击点(每列一个)。 顶部是132个锤子中的33个的线圈和电线。

照片底部显示了一把锤子。 左上方是电磁线圈和电线。 线圈过热并冒烟后,我们不得不更换这把锤子-照片显示其变黑的区域(这是很久以前发生的 ,与音乐无关)。



音乐产生


了解了打印机的工作原理(锤子每隔11.1μs即可操作一次)后,将更容易理解获取音乐的策略。 通过打印精心选择的文本,您可以控制锤子的响应时间。 如果以一定间隔触发音锤,则可以创建必要的频率。 例如,可以通过打印一行文本来获得音符(440 Hz),以便音锤每1/440秒工作一次。 这可以通过在第一列(第一个锤子)中键入1,然后在下一次扫描中在第14列中键入#,在第30列中键入逗号等等来实现。 以下是创建注释需要打印的整行。 您可能会惊讶于只有48个位置的字符集包含诸如includes和‡这样的奇怪出现。

1 ⌑YC# 0 Q 3, ‡FRT 4 - , IU $7 MV . * 9N ⌑ ZE @ P3 

下图显示了锤子的时间分布,即440 Hz的均匀频率,由给定的字符行给出。 x轴表示时间;每个打印的字符都用红色条标记。 红色条纹均匀分布,间隔为1/440秒,在440 Hz处发出音符。 每个栏上都标有一个相关的符号和一列。 请注意,字符不是按照它们在行中出现的顺序打印的。 字符串中的字符排列与其时间顺序之间没有简单的关系。 在锤子应该工作的地方显示了一些灰色线,但是缺少该符号。 此时,网络正在同步,因此无法打印。


注释la的时间分布图。

通过键入另一行,您可以生成另一条注释。 下面是一个si音符,987 Hz(高出一个八度)。 不出所料,更多笔记需要更多字符:

 1 @EQ4S J 8. ND ‡ SH 7 AM Y#2 G- KV . 0 DQSJ 7& ND ‡/4 H AMX0 2 QGJ W. 0 DP‡ S 7&AM ‡/4G * MX0 D 3 


注释s的时间分布图。

以下是清晰音调(138 Hz)的一行。 最初,我不清楚这个注释为什么需要打印一个字符串,其中所有字符都聚集在一个堆中,而不像其他注释一样分散。 事实证明,138 Hz与锤子连续一致。 尽管这些字符彼此相邻,但它们会随着时间均匀分布。

 16#UZKP*E&38 


时间分布图,有一个清晰的注释。

连锁音乐的风险是什么


我们担心此音乐程序可能会损坏我们的打印机。 关于人们如何通过打印使所有槌都同时工作的生产线而打断打印机的故事很多。 我认为这些主要是城市传说(依次是1403槌槌)。 但是,我们担心连锁音乐可能会使打印机链过载,并且会断裂。 下图显示了正常使用中的链条断裂; 电线撕裂和单个链接可见。



打印机的链条是通过将细丝编织成丝带并在上面附上带有字母的块而制成的。 直到最近,这些链条还很少见,无法取代。 如果电线被撕裂,则无法修复。 但是,Techworks博物馆! 来自Binghamton的公司最近提出了一种恢复印刷电路的方法。 因此,我们IBM 1401的国王Frank King不情愿地批准使用恢复后的链条来播放音乐。 幸运的是,这条链完美地在音乐世代中幸存下来。 在研究了音乐程序之后,我得出的结论是,它对电路的压力要比普通印刷电路要小得多,当然,除非在其中产生特别不幸的共振。


印刷电路(上下颠倒)在近距离

程序




该程序的源代码早已被遗忘,因此我从卡上分解了机器代码 ,以了解其工作方式(我将清单分开列出 )。 首先,它读取“频率卡”,该“频率卡”确定要为哪个音符打印哪一行。 它在内存中创建一个行打印阵列,以及一个带有注释名称和行打印地址的表格。 然后,程序读取歌曲的音符,每张卡一张音符(照片显示,对于某些歌曲,您必须使用很多卡)。 对于每个音符,程序将搜索相应的行以打印在表格中。 根据注释的长度,它会根据需要多次打印一行。 进一步实现了200到2000次无声循环。


带有音乐程序机器代码的打孔卡。 出于某种原因,每张卡上的内容都会打印两次。

机器代码1401与现代计算机非常不同。 区别之一是,以前经常使用自修改代码 ,但如今这种做法受到谴责。 例如,通过更改地址字段在其中更改的加载指令来创建用于打印的行表。 例程的返回都使用自修改代码,方法是将返回地址放在例程末尾的jmp语句中。 为了处理音符,运行中的程序会生成三个指令的序列,以加载一行,转到打印代码,然后返回主循环。 自我修改的代码使我很难理解该程序,因为反汇编的代码与实际运行的代码不匹配。

程序卡背后是频率卡,它定义了每个音符的行。 该代码最多支持20个不同的音符,因此分别为每首歌曲选择了频率卡。 每行132个字符分为两张卡,其中第一张确定行的右侧。 音符的名称和频率印在每张卡的右上角。


频率卡

最后一组纸牌会产生旋律,每个音符(或空白)都有自己的纸牌。 每张卡上都印有便条和期限。 长旋律可能涉及数百张牌。 在卡片上保存新的旋律很容易-您只需要在卡片上打断音符即可。 音符在美国记号系统中表示 ,其中音符的名称后跟一个八度数字。 例如,C4是平均值。 由于仅某些印刷电路具有符号#,因此尖峰用字母S表示,即CS代替C#。


卡的旋律“银铃”特写的照片。

结论


我们运行了将近50年没有人运行过的程序,从而在IBM 1403打印机上成功播放了音乐。 尽管音乐的质量不是很高,但是我们很高兴打印机没有自毁。 罗恩·麦克(Ron Mack)上一次在1970年启动这些计划。 通过链接,您会发现一些曲调。 以下视频显示了马赛曲的节选; 在此视频中,您可以观看每行的打印。


山景计算机历史博物馆在每周三和周六展示IBM 1401,因此,如果您在附近,建议您参观我们的展览。

Source: https://habr.com/ru/post/zh-CN468647/


All Articles