这是一篇关于 AlphaStation 500 的 SROM(串行 ROM)的博客文章,主要内容如下:
- 背景:作者对 90 年代的 RISC 工作站感兴趣,得到一台死机的 AlphaStation 500,其电源正常,但两块 PCI 卡损坏,部分内存过热,不过得到了 18GB 的 SCSI 硬盘和 12 倍速 SCSI CD-ROM。
- AlphaStation 500 启动方式:与普通 PC 不同,AlphaStation 500 复位后,CPU 内部逻辑产生时钟脉冲驱动外部计数器,提供连续地址到 SROM,1 位输出的 SROM 数据被送入处理器的内部指令缓存,加载完成后处理器执行缓存中的代码,该代码用于配置外部内存总线并找到内存映射的并行 ROM 以移交执行权。
- SROM 图像选择:AlphaStation 500 主板有八个跳线位置,每个位置对应 SROM 中的一个图像,通过跳线选择要加载的图像,作者推测因内存问题应将跳线从 J11 移到 J12 以查看 Mini 控制台,但未找到。网上有一些 SROM 源代码,但不确定是否适用于作者的机器。
- 拆分 SROM:作者将 SROM 芯片(Am27C010)取出并使用 TL866-II 闪存编程器进行转储,然后用 Python 代码将八个复用的图像分开,但这些图像不包含 ASCII 字符串和 Alpha 机器代码。
- 解码图像:SROM 数据逐位加载到缓存行,其中部分位是奇偶校验和元数据,Digital 提供的
srom.c
工具用于添加标签和奇偶信息以生成可加载的 SROM 图像,作者通过 Rust 代码根据该工具的表格反转编码,将 25 字节的缓存行转换回四个 32 位指令字,并经过试验验证了程序的正确性。 - 反汇编解码后的图像:将解码后的文件通过
objdump
进行反汇编,发现其中包含有效的 Alpha 机器代码,如HW_MTPR
和HW_MFPR
指令,还找到了一个get_char
函数,用于通过串口接收数据,似乎 SROM 是有效的。 - 结论:Alpha CPU 从 SROM 启动,SROM 包含八个打包的图像,可通过特定工具解码得到原始图像,Alpha CPU 有特殊的内部处理器寄存器可控制 GPIO 引脚等,作者的 SROM 芯片似乎未损坏,但仍不知道 Alpha 不启动的原因。
- 链接:提供了作者编写的工具的 Github 源代码链接[https://github.com/thejpster/...]和 Alpha Motherboard Software Developers Kit V4.0 的链接[https://github.com/jramstedt/...]。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。