关于 My4TH 的一些试验(二):演奏音乐

在20世纪六七十年代,收音机是调试计算机存储器的必备工具。用户可以借助普通的广播收音机侦听计算机发出的电磁辐射,确认磁心存储器及总线的工作状态。当时的用户很快发现,这一现象可以用来演奏音乐(例如这里这里)。

虽然 My4TH 使用了现代的存储器,但其总线或多或少也会产生一些电磁辐射。试验发现,使用调幅收音机可以明显地听到总线上的工作状态变化产生的电磁辐射。

通过调整二层循环嵌套程序中的循环终止值,可以控制总线上状态的变化周期及持续时间,从而实现音乐演奏,并用收音机收听。

借助 Forth 语言的威力,乐谱可以非常方便地转换成程序:

250 value tempo \ smaller is faster
: delay ( n -- ) 0 do loop ;
: tone ( duration tone -- ) swap tempo * over /
   0 do dup delay loop drop ;
   
: P ( duration -- ) tempo * delay ; \ pausa
: D5 7 tone ; : C5 8 tone ; : B4 9 tone ; : A4 10 tone ;
: G4 12 tone ; : F4 14 tone ; : E4 15 tone ; : D4 17 tone ;
: C4 20 tone ; : B3 21 tone ; : A3 24 tone ; : G3 27 tone ;
: F3 31 tone ; : E3 33 tone ; : D3 38 tone ; : C3 43 tone ;
: B2 46 tone ; : A2 51 tone ; : G2 58 tone ; : F2 66 tone ;
: E2 70 tone ; : D2 80 tone ; : C2 90 tone ; ( duration -- )
: F#3 29 tone ; : G#3 26 tone ;

下面的例子运行在 16MHz 下,演奏《欢乐颂》:

: freude1 8 e4 8 e4 8 f4 8 g4 8 g4 8 f4 8 e4 8 d4
   8 c4 8 c4 8 d4 8 e4 ;
: freude2 freude1 12 e4 4 d4 16 d4 ;
: freude3 freude1 12 d4 4 c4 16 c4 ;
: freude4 8 d4 8 d4 8 e4 8 c4 8 d4 4 e4 4 f4 8 e4 8 c4
   8 d4 4 e4 4 f4 8 e4 8 d4 8 c4 8 d4 16 g3 ;
: freude tempo 200 to tempo freude2 freude3 freude4 freude3
   to tempo ;

freude

(视频无法播放的话请在这里下载)