AppleCrate II:一种基于Apple II的新型并行计算机

2020-11-10 12:18:39

2004年,我建造了第一台AppleCrate,这是一款8板系统,作为一种廉价、易于编程的工具,用于苹果II的并行编程实验,就像是一种刀片服务器,如果你愿意的话!AppleCrate I(当时我并没有意识到它是第几个)非常有趣,它促成了一些非常有趣的实验,但随着时间的推移,我发现了它的一些缺点。

首先也是最重要的一点是,由于电路板只有两条边支撑,没有固定到位,因此相对易碎,很难运输。其次,我遇到过8个以上的从属处理器可能有用的情况。第三,我收集奴隶们合成的音频信号的安排是相当临时的,用大量数字作为背景噪音来传递声音。最后,最初的AppleCrate没有规定将I/O卡插入任何主板,因此它必须由单独的Apple II托管,这增加了运送演示的问题。

AppleCrate II的设计目的是在AppleCrate I存在问题的所有领域都有显著改进。

AppleCrate II由17个增强型Apple//e主板组成。(其中15块是在同一个eBay拍卖中获得的,该拍卖为最初的AppleCrate净赚了8块未增强的主板。)由于它们是增强型ROM,原来的NadaNet引导ROM代码不适合,必须开发新的引导协议,如下所述。

我没有像原来那样把卡片垂直地装在一个框架里,而是决定把它们水平地安装在一叠用立柱固定的六角形杆上,每根杆的一端都有一个螺丝钉,另一端有一个螺纹孔。AppleCrate II在板的背面和角落有9根六金属立柱,在板的内部有3根尼龙柱,以增加硬度,如下图所示的两块板的建造阶段:

这种高耸结构使堆叠变得非常坚硬和坚固,同时消除了对消耗空间的外骨骼的需要。它还具有保持顶板通畅的优点,这样就可以插入I/O卡,使其成为AppleCrate的主机。(事实上,我使用了17块板,这样顶板就可以充当主板,并为并行程序留下16台从机。)。

按键1输入和信号器1输出总线导线和AN2到PB2 GETID菊花链导线连接到插入16针游戏端口连接器的机械针脚插座。这些连接支持NadaNet,这是板之间唯一的信号连接。图中显示了网络适配器(如下所述)及其安装支架,安装支架位于第三块板的下方。电源母线卡由类似的角托架支撑,紧邻其下的支架向下倾斜以适应托架厚度。

电路板由PC AT电源供电。Apple//eboard的平均功耗约为4.2瓦,因此整个17板板箱总共只消耗约70瓦,并且AppleCrate和电源都只比环境温度高几度。

我决定使用#12铜母线将电力分配给所有电路板(在第一张照片的右侧可见)。我本想采用连接化的方法,但我想不出一个具有合理配合/不配合力的连接件方案。因此,我决定采用焊接式电源连接。(苹果的电源如此可靠是一件好事,因为更换电池组中间的一个是相对困难的!)。

顶板用作主板,带有I/O卡和外部键盘。主板引导AppleCrate II中的16个从属苹果,并用它们来运行并行程序。一旦它们被引导和启动,它们就可以独立于主板运行,尽管它们明显受到I/O限制!

事实证明,对每个董事会的活动有一些实时指示是有用的。电源板的右边有一个红色的电源LED,左边有一个红色的扬声器LED。从面板的背面(AppleCrate的正面)可以很容易地看到这两款手机。电源LED的功能是固定的,但扬声器LED可以作为主板上运行的软件可以操作的指示器,只需切换扬声器即可。例如,打印蜂鸣音$(07)会导致扬声器LED闪烁0.1秒,并可用于指示软件中的某些情况。(安装扬声器后,扬声器LED不会亮起,但AppleCrateboard没有连接扬声器。)。

尽管下面描述的Applecrate网络接口包含一个LED来显示全球网络活动,但能够看到任何特定板卡在网络上发送的时间是非常有用的。通过使用PDL3定时器将每个数据包发送操作转换为绿色矩形LED的可见闪烁,即可满足这一需求。

这些照片显示了对558定时器芯片的修改,其中一个267欧姆的电阻器(我手边有220到560欧姆之间的任何值都可以)连接在5号和8号引脚之间,发送信号的LED连接在8号引脚和地之间,8号引脚连接到阳极。矩形LED被小心地按在磁带输入和输出插孔之间。在一些电路板上,插孔靠得太近,以至于有必要用Exacto刀刮掉输入插孔侧面的上部塑料凹槽,以便为LED在它们之间压合留出空间。(请注意,在这些照片中,连接到LED阳极的红线尚未焊接。)。

由于AppleCrate机器除了网络之外没有I/O功能,因此它们必须从网络引导。这需要将主板上的ROM替换为包含修改后的重置代码的EPROM,以执行网络引导。

与AppleCrate I一样,替换自检代码是最简单的方法,因为它是自包含的、连续的,如果没有连接键盘,则会在上电重置时执行。然而,增强型//e只包含200字节的自检代码,仅为非增强型//e自检的一半大小,需要新的网络引导设计。

AppleCrate I使用主动引导协议,其中每个由GETID菊花链(从上一台机器的AN2连接到当前机器的PB2)启用的主板不断向ID 1发送GETID请求,直到它被分配一个永久ID并接收到NadaNet引导镜像。该协议非常复杂,需要在网络上发送和接收数据包,因此需要将近400字节的引导只读存储器(Boot ROM),这几乎可以放入一个未增强的//e只读存储器中。

由于增强型只读存储器只有200美元的可用字节,因此必须设计一种新的被动引导协议。新的只读存储器代码持续监控网络中包含紧随其后的引导代码数据的加载地址和长度的广播BOOTREQ控制包。从网络中正确读取引导镜像后,控制权将传递到其起始地址。这种被动引导代码只需要从网络读取数据包,因此只占用$190字节,这很适合取代$C600的增强的//e ROM自检代码。

新的引导协议利用引导代码作为广播事务发送的事实,因此被引导的机器不需要ID来接收引导代码。在从属机器引导镜像的前面添加了一页第二阶段引导代码。此代码在收到引导镜像后立即获得控制,当被GETID菊花链启用时,它会利用完整NadaNet引导镜像中的代码向引导它的机器发送GETID请求(有关详细信息,请参阅NADA.CRATE列表中的BOOT2代码)。

GETID菊花链的功能就像它在AppleCrate I中所做的那样。第一台机器是通过将其PB2连接到地来永久启用的。每台机器的AN2连接到下一台机器的PB2。在每台机器上运行的第二阶段引导代码最初设置其AN2,然后等待,直到它看到它的PB2变低,从而使它能够发送其GETID请求。当它的GETID成功时,它丢弃AN2,启用下一台机器。然后,它清除其视频显示,写下显示机器ID的横幅,并进入其服务器循环。

这导致永久ID按物理菊花链的固定顺序分配,同时允许所有ROM相同。AppleCrate II NadaNet适配器板上的LED连接到最后一台机器的AN2,因此当最后一台机器放下AN2时,红色LED熄灭,表示所有机器都已成功启动。

当网络引导机器被重置时,它首先检查网络状态。如果网络低(零),则执行冷启动。如果网络处于高电平状态(一个),它会检查第3页,查看是否正在冷启动或热重置。如果是热重置,它将重新进入其服务器循环。如果是冷启动,它会初始化并输入ROM引导代码,再次等待BOOTREQ数据包。(这种方法的优点是,可靠地强制重新启动电源循环,同时最大限度地允许在保持网络高电平的同时热重置板。)。

NadaNet是TTL级的串行网络,其中逻辑高由大于+2伏的电压表示,逻辑低由小于+0.7伏的电压表示。TTL信号器输出的扇出能力足以驱动十几个左右的TTL按钮输入,如果它们没有以其他方式连接的话,就像早期的Apple II机器那样。尽管NadaNet因不需要额外硬件而得名,但苹果对Apple//e按钮电路做了一些改变,使得这些机器需要硬件缓冲。

后Apple产品上的Open-Apple键和Close-Apple键[Plus机器连接到按钮输入0和1。为了以与游戏控制器按钮相同的方式工作,键盘上为每个Apple键包含470欧姆的下拉电阻,按下该键可将相应的按钮输入连接到+5伏。此外,为了支持出厂时的电路板自检,主板包含11K上拉电阻,用于在没有连接键盘的电路板上将PB1和PB2按钮输入拉至+5V。

对于17板的AppleCrate,由于16个从机板没有连接键盘,它们的按钮输入只受到11K上拉电阻的阻碍,总的并行上拉电阻约为650欧姆。一个带有低值下拉电阻的单一发射器跟随器很容易并行驱动所有机器。为了收集报警器输出,我使用分布式17输入或使用1N914二极管,从各个板的游戏连接器连接到一条公共总线上。作为一个独立的发射器跟随器,具有低值下拉电阻的单个发射器跟随器可以很容易地并行驱动所有机器。为了收集报警器的输出,我使用了一个分布式的17输入或使用1N914的二极管,这些二极管从各个板的游戏连接器连接到一条公共总线上。如

与单个机器适配器不同,74LS08用于标准化逻辑电平(否则会出现三个二极管下降)。LS08的一个备用部分用于驱动指示网络活动的LED。最后的LS08部分用于指示GETID菊花链中的最后一台机器(机器#17)何时丢弃AN2,这意味着所有机器都已成功启动(GETID链完成时LED熄灭)。

请注意,网络的二极管钳位范围为0至+5伏,以防ESD。

AppleCrate接口中的267欧姆网络下拉电阻足够低,如果AppleCrate连接到网络上,即使对于较长的网络,也不需要额外的下拉。(我应该指出的是,267欧姆电阻器的特殊特定值只是反映了我在220到270之间的任何东西都可以很好地工作。)。

AppleCrate的一个有趣和有趣的用途是作为多声音波表音频合成器。

Apple//e只有1位的内置声音输出,但通过适当的编程(参见AppleCrate Polyphonic Music Synsizer),可以创建一个采样率为11.025 kHz、脉冲重复率为22.05 kHz的5位软件数模转换器(DAC)。使用这样的软件进行波表声音合成,DAC使用的处理器周期是Apple//e的100%,因此AppleCrate的每个板在任何时刻都只能生成一个乐器的一个音符。例如,如果弹奏一把吉他,必须有6个振荡器发出声音,每根弦一个振荡器。用16个从属电路板,AppleCrate II可以创造16个声音的复调!以下是当我64;m 64;时,AppleCrate II执行的一个例子。(这段录音是单声道的,不过AppleCrate的输出是立体声的。)。

AppleCrate I有一个非常简单的音效设计:一个10K的电阻器将每个主板的扬声器输出连接到一个公共的混合点,用一个2.2K的电阻器接地,并由一个0.1uF的电容器分流,形成一个单极低通滤波器。这种设计有几个缺点。首先,扬声器的输出脉冲来自每个电路板的+5V,这是有电噪声的,并且该噪声会到达混音器输出。其次,只有一个混合点,输出是单声道的。第三,单极点低通滤波器仅以每倍频程6dB的速度滚动,因此在抑制高电平22 kHz脉冲分量的同时,也只能部分抑制合成声音中所需的高频。最后,混音点的输出电平较低,需要一个外部放大器。

AppleCrate II通过添加外部声音处理器盒解决了所有这些问题:

为了减少杂散噪声,每个电路板的声音输出是TTL逻辑电平,每个电路板的信号分别通过声音处理器盒中的逆变级。这款逆变器和盒子里的所有音频电路一样,都是由一个+5V的静音电源供电的,从其中一个电路板的+12V电源可以双倍调节。然后,将得到的来自电路板的脉宽调制信号进行混合。

信号混合到两个混合点,板子1-9到左声道,板子10-17到右声道,提供产生立体声的能力。提供立体声混合控制以允许在需要时将立体声声道混合为单声道。此外,来自主控板1(主/控制器机器)的信号具有单独的混频增益控制,因此其输出可以包括在从板的输出中或从从板的输出中排除。

在AppleCrate I中,声音处理器取代了简单的单极点RC低通滤波器,为左声道和右声道提供了5极点Sallen-key低通滤波器。该滤波器的截止频率为5.5 kHz,使输出中22 kHz的电平降低了60dB,对有效高频信号分量的衰减可以忽略不计。

最后,滤波器的输出通过左右两个音量控制到两个LM386功率放大器,直接驱动小型扬声器或耳机。立体声线路电平输出在音量控制之前连接。

声音处理器通过带状电缆和DB-25连接器连接到AppleCrate II,DB-25连接器承载所有17个扬声器声道,外加+12V和地(外加一些备用线以备将来扩展)。

为了与AppleCrate I‘s 8振荡器版本的In My Life进行比较,这里是全新的AppleCrate II 13振荡器版本In My Liferequiring 13振荡器(同样,以单声道录制)。请注意,13个振荡器就足够了,不会有任何振荡器从发声音符中被窃取,所以桥上不会有遗漏的音符。(将音乐分散到更多的振荡器上也充分缓解了记忆压力,可以添加最后的撞击声,这种声音几乎一秒钟都不会重复,因此需要超过10KB的样本内存。)。

程序通常在Applecrate上从更大的机器(通常是ID1)启动,该机器也负责引导。BPRUN(广播并行运行),在所有从机上运行指定的Applesoft程序。然后,运行的程序负责从机之间或从机与主机之间的任何进一步通信。

已经编写了一些通用服务器来为NadaNet上的机器提供有用的服务,包括AppleCrate机器。最基本的是消息服务器,它通常在机器ID 2上运行,以提供Applesoft BASIC的网络扩展中所述的&;PUTMSG和&;GETMSG服务。另一组非常有用的服务由文件服务器提供,它为所有连接的机器提供大多数ProDOS文件操作,无论它们是运行ProDOS、DOS,还是根本不运行操作系统(与AppleCrate从属机器一样)。程序通过消息服务器队列与文件服务器通信。

我已经编写了几个用于测试和演示的程序。最有用的测试程序之一是RatRace,它征募所有从属处理器通过消息服务器(ID 2)传递数千条消息。为每个从属处理器(ID 3..17)分配一个输入消息队列,并为每个从属服务器分配一个主数消息服务器,为每个从属服务器分配一条消息。然后,其他每个从站通过向随机从站发送三个消息来进一步加载队列。在程序的主要阶段,每个从属设备从其队列中读取一条消息,按一个时间单位对其进行老化,如果消息尚未过期,则将其传递到随机从设备的队列中。结果是从属队列长度迅速反弹,直到所有消息都超时,这可以通过将监视器插入Message Server的视频端口来看到。

这会将Nadanet加载到接近最大速率,并同时用作Nadanet和消息服务器压力测试。通过更改消息的生存期和/或最初排队的消息数,可以很容易地改变测试的运行时间。消息吞吐量超过每秒60条消息,即使每条20字节的消息在网络上传递两次,往返于Message Server。

2015年初,我终于抽出时间将AppleCrate I和AppleCrate II以菊花链的方式连接在一起,创造了一台由25台机器组成的AppleCrate。我为这个运行RatRace的系统制作了一段视频,你可以在这里观看。

赛昂是一个简单的小程序,可以很好地演示和测试AppleCrate的可靠性。在BPRUN之后,每个从机都等待来自相邻机器的控制值的触发,该控制值指定是否通过将该值传递给ID序列中的下一台机器或上一台机器来传递该值。然后,它闪烁其扬声器LED并返回到其服务循环,直到控制值再次改变。如果它是顶部从属(ID 2)或底部从属(ID 17),它会颠倒控制值指示的方向,并相应地戳它。最初,最上面的机器通过将控制值下一步放入ID 3来启动进程。

这种逻辑的结果是,大约四个扬声器LED的轨迹似乎在AppleCrate上无休止地上下摆动,让人想起(倾斜的)赛昂人的眼睛。(四个LED点亮是因为一声嘟嘟声会使LED闪烁100毫秒,在此期间控制值已被&;传给了其他四台机器。)。

如果在赛昂人运行时有任何拨动失败,LED模式就会停止,因此运行几个小时会影响AppleCrate的可靠性。

赛昂人继续运行,直到主机被用来将零(停止)设置为所有服务从属的控制值。然后,在发出第一个&;BPOKE请求时,需要第二个&;BPOKE结束正在发出扬声器LED的四台机器上的程序,而不是关闭它们的扬声器LED。

建设的目的。

.