MSX计算机SCSI接口设计与现代应用
1. 项目背景与设计初衷
作为一名从上世纪80年代就开始接触MSX计算机的老玩家,我对这个经典平台始终保持着特殊的情感。1986年设计的B.E.R.T. SCSI接口是我早期的硬件项目之一,当时主要为了解决MSX计算机存储扩展的局限性。没想到几十年后,MSX社区依然活跃,这促使我重新审视并彻底重新设计了这套SCSI接口方案。
MSX计算机虽然性能有限,但其模块化设计为硬件扩展提供了极大便利。SCSI(Small Computer System Interface)作为早期的并行接口标准,在80年代曾是高性能存储设备的首选。为MSX添加SCSI支持,意味着可以连接当时主流的大容量硬盘、磁带机和光驱等设备,极大扩展了存储能力。现代场景下,这套接口依然有价值——通过SCSI转接卡,可以连接CF卡、SD卡等现代存储介质,让老机器焕发新生。
2. 硬件架构解析
2.1 核心组件选型
新版设计采用CPLD(复杂可编程逻辑器件)作为核心控制芯片,相比老版本的离散逻辑电路,集成度更高且更灵活。我选择了Xilinx XC9572XL系列,主要考虑:
- 5V电压兼容性:直接匹配MSX的TTL电平
- 72个宏单元的容量足够实现SCSI协议状态机
- 支持JTAG在线编程,调试方便
- 静态功耗仅10mA,适合长期插在MSX卡槽
SCSI物理层采用NCR 5380兼容芯片,这是经典的SCSI协议控制器,通过8位数据总线与CPLD连接。特别设计了电平转换电路,确保5V TTL与SCSI差分信号间的可靠转换。
2.2 电路板设计要点
采用双层PCB设计,尺寸严格遵循MSX卡匣规范(100x60mm)。关键设计细节:
- 电源部分:使用LM7805稳压器,配合100μF电解电容和0.1μF陶瓷电容滤波
- 信号完整性:所有控制信号串联33Ω电阻抑制振铃
- 防插拔保护:SCSI接口加入TVS二极管阵列(SMF05C)
- 总线驱动:74HC245缓冲器隔离MSX总线
重要提示:MSX的扩展槽供电能力有限(典型值+5V/500mA),设计时要严格控制各芯片的静态电流总和,避免系统不稳定。
3. 固件开发与协议实现
3.1 SCSI协议状态机
在CPLD中实现了简化的SCSI initiator模式,支持最基本的读写命令。状态机主要处理:
- 总线仲裁阶段(仅支持单initiator)
- 选择阶段(目标设备寻址)
- 命令阶段(处理6字节CDB)
- 数据阶段(DMA传输控制)
- 状态阶段(返回执行结果)
关键Verilog代码片段:
always @(posedge clk) begin case(scsi_state) S_IDLE: if (req_cmd) begin scsi_bsy <= 1; next_state <= S_ARBITRATION; end S_ARBITRATION: if (!scsi_sel) begin scsi_sel <= 1; next_state <= S_SELECTION; end // 其他状态转换... endcase end3.2 MSX端驱动开发
提供两种接口方式:
- BIOS扩展:通过CALL语句直接访问(兼容MSX-DOS)
- 机器码驱动:针对高性能需求场景
典型磁盘操作流程:
- 发送TEST UNIT READY命令检测设备
- 通过READ CAPACITY获取存储容量
- 使用READ(10)命令读取指定LBA扇区
- 数据通过DMA传输到MSX内存
4. 制作与调试实战
4.1 焊接与组装要点
推荐使用以下工具和材料:
- 焊台:调温型,设定在300°C左右
- 焊锡:含松香芯的0.6mm锡线
- 辅助工具:放大镜、镊子、吸锡器
特别注意:
- CPLD要先烧录程序再焊接(防止静电损坏)
- SCSI接口的50针IDC连接器方向容易接反
- 所有芯片的缺口标记要朝向同一方向
4.2 常见故障排查
问题现象:MSX无法识别设备
- 检查卡匣金手指清洁度(可用橡皮擦拭)
- 测量5V电源实际电压(不能低于4.75V)
- 确认BIOS扩展是否正确安装
问题现象:SCSI设备无响应
- 检查终端电阻是否安装(SCSI链两端需接阻)
- 确认设备ID设置无冲突
- 用逻辑分析仪监测BSY/SEL信号
5. 性能优化与扩展应用
实测数据传输速率可达约800KB/s(理论SCSI-1上限),是原装软驱的20倍以上。通过以下技巧可进一步提升性能:
- 使用块传输模式(减少命令开销)
- 在MSX内存中设置大容量缓冲区
- 合理安排SCSI设备ID(0-7)
创新应用场景:
- 连接SCSI-CDROM运行ISO映像
- 通过SCSI-SD适配器使用现代存储卡
- 作为开发平台调试其他SCSI设备
我在实际使用中发现,配合RAM磁盘软件可以将常用工具预加载,使MSX达到接近现代计算机的响应速度。一个有趣的案例是通过这个接口连接老式SCSI扫描仪,成功在MSX上实现了图像采集功能——这完全超出了最初的设计预期。
最后分享一个硬件改装技巧:如果发现某些SCSI设备供电不足,可以从MSX电源接口额外引出一组5V电源(注意增加保险丝),但总电流不要超过原装电源的承载能力。
