基于树莓派与Python仿真复刻Sol-20复古计算机全流程解析
1. 项目概述与核心思路看到“Sol-20”这个名字很多年轻的朋友可能会感到陌生但对于经历过70年代末80年代初计算机萌芽期的那批极客和爱好者来说它绝对是一个绕不开的传奇。1976年7月当Sol-20登上《Popular Electronics》杂志封面时它那标志性的亮蓝色机身和胡桃木侧板在一众灰头土脸的“盒子”计算机中显得格外惊艳。它搭载了当时主流的Intel 8080微处理器和S-100总线骨子里与Altair 8800、IMSAI 8080这些“鼻祖”同源但其一体化的键盘与显示终端设计又让它看起来更像是后来席卷世界的Apple II和Commodore PET的先驱。可惜的是由于产量稀少仅约12000台如今一台原装Sol-20已是收藏市场上的稀世珍品价格不菲。这个项目的初衷正是源于对这种“看得见、摸不着”的经典机器的向往。与其在拍卖网站上望洋兴叹不如亲手“再造”一台。但完全的硬件复刻意味着要寻找早已停产的8080芯片、S-100总线卡以及定制复杂的PCB其成本和难度都令人望而却步。因此我的思路转向了“软硬结合”的现代复刻方案用树莓派4作为计算核心运行一个高度仿真的Sol-20模拟器再为其打造一个从外观到交互都尽可能还原原版的物理外壳。这样我们既能以极低的成本体验到这台经典机器的灵魂又能享受从3D建模、CNC加工到嵌入式编程的全流程动手乐趣。整个项目的核心可以拆解为三个环环相扣的部分软件灵魂Sol-20系统仿真。这是项目的大脑。我们需要一个能精确模拟8080 CPU、内存映射、视频输出和键盘输入的系统。幸运的是开源社区有Jim Battle开发的优秀模拟器“Solace”作为参考。但为了更深度地集成到树莓派环境中并实现与自定义硬件的无缝对接我选择用Python从头实现一个定制化的模拟器。物理躯壳外观结构复刻。这是项目的骨骼与皮肤。目标是制作一个尺寸、比例、材质感都无限接近原版的机箱。这涉及到精确的尺寸测量、3D建模、3D打印用于蓝色前面板以及CNC加工用于胡桃木侧板。神经连接交互硬件桥接。这是项目的神经。如何让一个现代的USB/GPIO键盘“变身”为Sol-20的键盘如何将树莓派的3.3V GPIO逻辑与键盘编码器所需的5V电平安全对接如何添加那些充满仪式感的物理接口如串口这部分是硬件复刻中最具挑战也最有成就感的环节。下面我就将这长达数月的复刻之旅中积累的细节、踩过的坑和最终的成功经验毫无保留地分享出来。2. 核心细节解析与实操要点2.1 仿真器设计不止于“能运行”原项目的作者选择了自行编写Python仿真器而非直接使用现有的Solace主要原因是为了深度适配树莓派环境并实现更高的自定义自由度。这是一个关键决策点。对于复刻项目使用现成模拟器如MAME、SIMH可以快速上手但自行实现能让你对机器的每一处细节了如指掌。仿真器的核心架构 我的仿真器主要模拟了以下几个关键硬件模块Intel 8080 CPU这是核心。8080是一个8位微处理器有7个8位寄存器A, B, C, D, E, H, L一个16位程序计数器PC和堆栈指针SP。在Python中我用一个类来模拟其状态并实现了一个指令循环逐条解码和执行操作码。这里的关键是精确实现所有的寻址模式和标志位零标志、符号标志、奇偶标志、进位标志等任何偏差都可能导致经典软件无法运行。内存系统Sol-20拥有最多64KB的RAM。在仿真器中我使用一个Python字节数组bytearray来模拟物理内存。需要特别注意内存映射I/O。在复古计算机中CPU与键盘、显示器等外设的通信常常是通过对特定内存地址的读写来实现的而非现代计算机的独立I/O指令。仿真器需要“截获”对这些特殊地址的访问并将其转化为对模拟外设的操作。视频显示Sol-20采用字符终端显示通常是24行80列。仿真器需要维护一个代表屏幕内容的二维数组或一维数组。当CPU向视频内存区域写入一个ASCII码时仿真器需要更新这个数组并通过一个图形界面我使用了Pygame库将其渲染出来。这里的一个有趣细节是模拟“绿色磷光”或“琥珀色磷光”的CRT显示效果可以通过调整渲染颜色的RGB值来实现一种怀旧的滤镜感。键盘输入这是与物理硬件交互最紧密的部分。仿真器需要创建一个线程或事件循环持续监听来自GPIO通过键盘编码器的输入信号。当检测到有效的键值通常是一个8位的扫描码和选通信号Strobe时将其存入一个缓冲区并可能触发一个中断通知CPU有键按下。注意仿真器的时序问题。纯软件仿真在速度上远超原始的2MHz 8080 CPU。这可能导致依赖于精确时序的软件特别是某些游戏和演示程序运行过快或出现异常。一个常见的解决方案是引入一个“节流”机制让仿真器的主循环在每个指令周期后主动休眠一小段时间以匹配真实CPU的速度。可以使用Python的time模块来实现微秒级的延时。2.2 键盘系统从现代开关到复古协议原版Sol-20使用的是Keytronic电容式键盘手感独特但早已停产。为了获得可靠且手感优秀的输入体验我采用了来自osiweb.org的Dave设计的替代键盘套件。它使用现代的Cherry MX或Futaba MD-4PCS机械轴但保持了与原版完全一致的键位布局和功能包括三个状态LED灯大写锁定、移位锁定、本地模式以及三个输出信号复位、中断、本地。键盘编码器的核心作用 键盘本身只是一堆开关。编码器通常是一颗ATmega328P单片机负责周期性地扫描这些开关矩阵检测哪个键被按下或释放然后将这个物理位置转换为一个Sol-20主机能够理解的、唯一的8位扫描码。当有键事件发生时编码器会通过STROBE引脚发送一个脉冲信号通常是下降沿有效同时将8位数据放在数据线D0-D7上通知主机来读取。与树莓派的电平转换 这是硬件连接中最容易出错的一环。键盘编码器电路通常工作在5V逻辑电平而树莓派4的GPIO引脚是3.3V逻辑电平并且不能耐受5V电压。直接连接会损坏树莓派解决方案必须使用双向电平转换器模块。这种模块通常有两侧一侧是3.3V域连接树莓派另一侧是5V域连接键盘编码器。对于数据线D0-D7, STROBE, OUT1-3信号是双向的树莓派既要读也要写因此必须连接在电平转换器的双向通道上。接线表详解键盘编码器引脚连接至电平转换器树莓派 GPIO功能说明5V5V侧电源输入-为编码器供电可从树莓派5V引脚取电GND共地GND必须共地D0-D75V侧双向通道GPIO 6, 13, 19, 26, 21, 20, 16, 128位键盘扫描码数据线D7为最高位STROBE5V侧双向通道GPIO 5数据就绪信号下降沿有效OUT1(LOCAL)5V侧双向通道GPIO 23本地模式按钮状态高电平时LED亮OUT2(BREAK)5V侧双向通道GPIO 22中断按钮上升沿触发OUT3(RESET)5V侧双向通道GPIO 24复位按钮下降沿触发实操心得焊接与调试。焊接键盘轴体上的二极管时务必使用防静电措施并再三确认二极管方向通常色环一端为阴极。焊接完成后不要急于安装键帽。先用万用表的通断档逐个测试每个按键的导通情况。连接树莓派后可以写一个简单的Python脚本循环读取GPIO状态并打印出来手动按下每个键检查对应的数据位是否变化以及STROBE信号是否正常触发。这一步的耐心能避免后续很多麻烦。2.3 机箱结构精度与美学的平衡原版Sol-20的机箱之所以经典在于其独特的材质对比工业感的蓝色前面板与温润的胡桃木侧板。为了在复刻中重现这种质感我采用了“3D打印 CNC实木加工”的组合方案。3D打印前面板分件打印大多数消费级3D打印机的成型尺寸有限。我的Prusa i3 MK3S的打印床无法一次性打印出整个前面板宽度超过400mm。解决方案是将面板在CAD软件中沿纵向分割成两块设计好定位销和连接卡榫分别打印后再用塑料胶水如CA胶或专用PLA胶水粘合并在内部用打印的加强筋进行加固。材料与参数为了获得较好的表面质量和强度我使用了哑光蓝色的PLA材料。层高设置为0.2mm填充率20%-25%即可提供足够的支撑。打印方向很重要应让面板的大平面与打印床平行这样可以获得最好的表面光洁度朝上一面和最高的尺寸精度XY平面。开孔精度键盘开孔的尺寸必须与Dave提供的键盘PCB文件完全吻合。在Fusion 360中建模时我直接导入了键盘PCB的DXF轮廓作为参考并留出了约0.5mm的装配间隙。打印完成后可以用小锉刀或砂纸对开孔内壁进行微调确保键盘能严丝合缝地放入。CNC加工胡桃木侧板 这是整个项目中最具工艺挑战性的一步。胡桃木价格不菲一旦雕坏损失较大。文件准备从Sol20.org获取或根据照片精确测绘出侧板的DXF文件。在Fusion 360中需要将二维轮廓“挤压”成与木板厚度一致的实体并生成用于CNC的刀具路径G-code。关键参数包括切割深度应略大于木板厚度确保切透、刀具类型我用的是6mm直径的直刀、进给速度和主轴转速。试切绝对不要直接用贵木料进行首次切割找一块相同厚度的廉价多层板或MDF板进行试切。这可以验证刀具路径是否正确、夹具是否牢固、尺寸是否精准。我的第一次试切就发现了一个定位孔偏移的问题幸亏用了废料板。实际加工将胡桃木板材用台钳或真空吸附台牢固地固定在CNC机床工作台上。启动加工后务必全程监控特别是初始下刀阶段。加工完成后边缘会有毛刺需要用砂纸从粗到细如180目-400目-800目仔细打磨光滑。边缘处理原版侧板边缘有优雅的圆角。这需要使用手持修边机配合圆角铣刀来完成。操作时务必顺着木纹方向匀速推进避免逆纹撕裂木料。可以先在不显眼的背面练习。表面处理我使用了Minwax胡桃木色凝胶染色剂。凝胶染色剂比液体染色剂更不易产生色差和流挂对新手更友好。用刷子或布均匀涂抹等待3-5分钟让颜色渗透然后用干净的布顺着木纹方向擦去多余染色剂。待完全干燥后通常24小时可以再涂一层清漆如聚氨酯或木蜡油来保护表面并提升质感。内部框架机箱的骨架由1英寸x3英寸的松木条和3mm厚的硬质纤维板MDF内衬板构成。用木螺丝将松木条固定在内衬板上形成一个坚固的矩形框架。前面板、后面板、底板和顶板都固定在这个框架上。这种“内骨架外蒙皮”的结构既轻便又结实。3. 实操过程与核心环节实现3.1 仿真器集成与树莓派系统配置在树莓派上运行仿真器并让其开机自启动是让复刻机“活”起来的关键。1. 环境准备与依赖安装 首先确保树莓派系统是最新的Raspberry Pi OS原Raspbian。通过终端执行以下命令更新并安装必要的库sudo apt update sudo apt upgrade -y sudo apt install python3-pip python3-pygame -y pip3 install pyserial apschedulerpython3-pygame用于创建仿真器的图形显示窗口。pyserial用于实现后面要添加的串口功能。apscheduler用于实现仿真器中可选的闪烁光标定时功能。2. 获取并运行仿真器 将仿真器代码克隆到树莓派的家目录cd /home/pi git clone 你的仿真器Git仓库地址 Sol-20 cd Sol-20 python3 main.py如果一切正常你应该能看到一个模拟的Sol-20终端界面启动。你可以尝试加载附带的游戏如SPACEWAR来测试基本功能。3. 配置“虚拟DIP开关” 原版Sol-20主板上有4组DIP开关用于配置显示模式、波特率等。在仿真器中我用一个配置文件switches.cfg来替代它们。这个文件需要放在仿真器的工作目录下。以下是一个配置示例设置了绿色屏幕、闪烁光标和1200波特率# SOL-20 SWITCH FUNCTION DEFINITIONS S1-1 0 # 0-Run, 1-Restart to Zero S1-7 1 # 0-White, 1-Green, 2-Amber screen S1-5 1 # 1-Blinking cursor (需要apscheduler) S1-6 0 # 0-当S1-51时此项应为0以启用闪烁 S3-6 1 # 1-1200 Baud (注意同一时间S3组只能有一个为1) S4-4 1 # 1-1 stop bit S4-5 0 # 0-No parity4. 实现开机自启动Kiosk模式 为了让树莓派上电后直接进入全屏的Sol-20仿真器我们需要禁用图形桌面的部分服务并配置自动登录和自启动脚本。禁用屏保和睡眠sudo raspi-config选择Display Options-Screen Blanking- 设置为Disable。 选择Performance Options-Overclock- 可根据需要设置但非必须。设置自动登录到命令行如果使用Lite版系统可跳过 编辑/etc/systemd/system/gettytty1.service.d/autologin.conf如果没有则创建[Service] ExecStart ExecStart-/sbin/agetty --autologin pi --noclear %I $TERM创建自启动脚本 在/home/pi/.config/autostart/目录下创建两个文件runSol-20(脚本文件):#!/bin/bash cd /home/pi/Sol-20 /usr/bin/python3 main.pySol-20.desktop(桌面入口文件):[Desktop Entry] TypeApplication NameSol-20 Exec/home/pi/.config/autostart/runSol-20赋予脚本执行权限并测试chmod x /home/pi/.config/autostart/runSol-20 sudo reboot重启后系统应跳过桌面直接启动仿真器。3.2 键盘编码器的固件烧录与连接Dave的键盘套件需要烧录固件到ATmega328P单片机。他没有使用常见的Arduino IDE环境而是用了Atmel Studio。对于没有专业编程器的爱好者我们可以用另一块Arduino板如Uno作为ISP编程器。1. 搭建Arduino ISP编程环境在用于编程的电脑上打开Arduino IDE。将一块Arduino Uno连接到电脑。在IDE中选择文件-示例-11. ArduinoISP-ArduinoISP。选择正确的板卡Arduino Uno和端口然后点击“上传”。这会将Uno变成一台ISP编程器。2. 连接硬件 按照下表用杜邦线连接Arduino Uno和键盘编码板上的ISP接口通常是6针接口Arduino Uno 引脚编码板ISP引脚信号Pin 10 (RESET)Pin 5 (RESET)复位Pin 11 (MOSI)Pin 4 (MOSI)主出从入Pin 12 (MISO)Pin 1 (MISO)主入从出Pin 13 (SCK)Pin 3 (SCK)时钟5VVCC (或 5V)电源GNDGND地线3. 使用AVRDUDESS GUI工具烧录下载并运行AVRDUDESS一个图形化界面的avrdude工具。配置参数Programmer:Arduino as ISPMCU:ATmega328PPort: 选择你的Arduino Uno所在的COM口如COM3或/dev/ttyACM0。Bit Clock: 可以调低一些以确保稳定如125 kHz。Flash: 浏览并选择Dave提供的固件.hex文件。Fuses: 根据Dave的说明填写熔丝位例如Low:0xD2, High:0xD9, Ext:0xFF。熔丝位配置错误可能锁死芯片务必确认点击“Program!”按钮。如果一切顺利你会看到“Writing Flash”和“Verifying Flash”成功的提示。4. 集成与固定 烧录完成后将编码器板通过排针插座连接到键盘PCB上。我发现两个板子上的定位孔对不齐强行拧螺丝可能导致板子弯曲或焊点开裂。因此我设计并3D打印了一个小小的L形支架用一颗M3x6mm的螺丝将编码器板的前端固定在键盘PCB上后端则依靠排针插座本身支撑这样既牢固又避免了应力。3.3 串口功能的实现作为一台“终端计算机”串行通信是Sol-20的灵魂。虽然仿真器内部可以模拟串口但连接一个真实的物理串口能极大提升沉浸感。方案选择树莓派4本身没有标准的RS-232串口只有UART电平是3.3V TTL。添加一个RS-232 HAT扩展板是一种方案但我已经使用了一个电平转换HAT给键盘。为了简化布线我选择了一个更简单的方案USB转RS-232串口线。实现步骤硬件连接将USB转串口线的USB端插入树莓派的USB口另一端的DB9母头连接到机箱后面板我自制的串口模块上。系统识别大多数常见的USB转串口芯片如FTDI, PL2303, CH340的驱动都已集成在Linux内核中。插入后在终端输入ls /dev/ttyUSB*通常会出现一个类似/dev/ttyUSB0的设备文件。仿真器集成在Python仿真器中使用pyserial库来打开这个设备。import serial try: # 波特率等参数应与仿真器内DIP开关设置一致 ser serial.Serial(/dev/ttyUSB0, baudrate1200, timeout0.1) print(Serial port opened successfully.) except serial.SerialException as e: print(fCould not open serial port: {e}) ser None然后在仿真器的主循环中定期检查串口是否有数据到达ser.in_waiting并读取、处理同时将仿真器需要发送的数据写入串口ser.write()。连接测试你可以用一根串口线或USB转串口线将复刻的Sol-20与另一台电脑如运行Putty或Tera Term的Windows电脑连接起来将另一台电脑设置为相同的波特率、数据位、停止位和校验位就可以进行双向通信了。这完美再现了当年通过串口连接主机或与其他计算机对话的场景。3.4 定制显示器的制作可选但推荐为了追求极致的复古体验我决定不满足于一个现代的液晶显示器而是为其制作一个风格匹配的“外壳”。我设想如果当年Processor Technology公司为Sol-20推出过官方显示器它大概会长这样拥有与主机相同的胡桃木侧板、类似的蓝色或灰色前面板以及一个4:3比例的CRT显示器。制作过程简述设计在Fusion 360中根据一个淘换来的8英寸4:3液晶屏型号PIM372分辨率1024x768的尺寸设计了一个显示器外壳。外壳由内部支撑框架激光切割1/4英寸胶合板和外部装饰侧板同样用胡桃木制作并染色组成。屏幕框架我复用了之前一个VT100复刻项目的屏幕框架设计并加以修改。3D打印一个边框让液晶屏可以严丝合缝地卡入其中。驱动板安装液晶屏需要一块驱动板通常通过LVDS接口连接。我将驱动板固定在一个3D打印的“托盘”上然后用双面胶将托盘贴在屏幕背面。外壳整合将装有屏幕的框架滑入木质外壳中从内部用螺丝固定。前面板则用3D打印了一个带有Sol风格装饰线条和Logo的“皮肤”包裹在外壳正面。连接用HDMI线连接树莓派和显示器驱动板同时用一根Micro USB线从树莓派的USB口取电给驱动板供电。当这个自制的显示器坐在复刻的Sol-20主机上时那种浑然一体的复古美感让整个项目的完成度提升了一个档次。4. 常见问题与排查技巧实录在长达数月的制作过程中我遇到了各种各样的问题。这里将其中最典型的一些及其解决方法记录下来希望能帮你绕过这些坑。4.1 键盘部分无响应或按键错乱这是最可能遇到的问题通常出在硬件连接或软件配置上。症状开机后仿真器启动但按键盘任何键都没有反应或者按A出现B等错乱现象。排查步骤供电检查首先用万用表测量键盘编码器的VCC和GND之间是否有稳定的5V电压。树莓派的5V引脚输出能力足够但也要检查连接线是否可靠。电平转换器检查确认电平转换器模块的3.3V和5V两侧都已正确供电。用逻辑分析仪或示波器如果条件允许检查当按下按键时编码器端的5V信号是否产生以及经过转换后树莓派GPIO端是否收到正确的3.3V信号。这是最常见的故障点。GPIO引脚配置在树莓派的Python脚本中必须将用于读取键盘数据的GPIO引脚设置为输入模式并启用内部上拉电阻GPIO.PUD_UP以确保默认状态为高电平。STROBE引脚应设置为下降沿中断触发模式。import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) data_pins [6, 13, 19, 26, 21, 20, 16, 12] # D0-D7 for pin in data_pins: GPIO.setup(pin, GPIO.IN, pull_up_downGPIO.PUD_UP) GPIO.setup(5, GPIO.IN, pull_up_downGPIO.PUD_UP) # STROBE GPIO.add_event_detect(5, GPIO.FALLING, callbackkeyboard_interrupt_handler)扫描码映射确认你的仿真器中的键盘扫描码映射表与编码器固件发出的扫描码一致。Dave的编码器固件通常会在文档中提供扫描码表。在键盘测试脚本中打印出读取到的8位二进制数据与映射表对比。焊接问题仔细检查键盘PCB上每个二极管和轴体的焊点是否有虚焊、桥接两个焊盘意外连在一起或二极管方向焊反。一个放大镜或手机微距镜头在这里很有帮助。4.2 仿真器运行缓慢或画面卡顿树莓派4的性能对于模拟8080是绰绰有余的但不当的代码实现可能导致问题。症状终端字符显示缓慢游戏帧率极低。可能原因与解决图形渲染瓶颈Pygame的屏幕更新如果每帧都重绘整个画面在更高分辨率下可能成为瓶颈。可以尝试只更新发生变化的屏幕区域脏矩形更新。阻塞式I/O如果在仿真器的主循环中使用了同步的、可能阻塞的I/O操作如未经优化的串口读取会拖慢整个循环。确保使用非阻塞I/Otimeout0或将I/O操作放在单独的线程中。缺乏节流如前所述如果没有速度节流仿真器会以最高速运行但可能不影响流畅度。但如果同时做了大量调试输出print语句会严重拖慢速度。确保生产环境关闭不必要的调试信息。散热问题树莓派4在持续高负载下会发热降频。确保其通风良好可以考虑加装一个小型散热风扇。我在树莓派的“摇篮”里加装了一个30mm的小风扇由树莓派的5V引脚供电效果显著。4.3 3D打印部件翘曲或尺寸不准大型平板件的3D打印容易因冷却不均而翘曲。预防与解决使用热床并确保其平整这是最重要的。PLA材料需要将热床加热到60°C左右。启用裙边Brim在切片软件如PrusaSlicer, Cura中为模型添加一个裙边。这不是底垫Raft而是模型第一层外围延伸出的几圈线条能像“锚”一样增加模型与打印平台的附着力有效防止边角翘起。控制环境温度避免在通风口或冷风直吹的地方打印环境温度的突然变化是翘曲的主因。尺寸补偿FDM 3D打印存在一定的收缩率且打印出的孔洞通常会比设计尺寸小0.1-0.3mm。在设计用于装配的孔洞如螺丝孔、键盘开孔时可以预先将其直径放大0.2mm。对于需要极高精度的配合部位打印后可能需要用钻头或圆锉进行手工修整。4.4 树莓派无法从USB设备启动或识别当连接了多个USB设备键盘编码器、USB串口线、无线键鼠接收器时有时会出现供电不足或设备冲突。症状插入所有设备后树莓派无法启动或启动后某些USB设备无法识别。解决使用优质电源为树莓派4配备官方电源或能提供至少5V/3A的优质开关电源。供电不足是许多奇怪问题的根源。使用带外部供电的USB HUB如果设备很多可以考虑使用一个有源带独立电源的USB集线器将部分外设连接到集线器上减轻树莓派自身USB控制器的负载。检查/var/log/syslog或dmesg在终端输入dmesg | tail -50可以查看最新的内核日志里面通常会有USB设备识别失败或错误的详细信息是排查硬件问题的重要依据。4.5 胡桃木CNC加工时的崩边与断裂木材特别是像胡桃木这样带有漂亮纹理的硬木在CNC加工时如果参数不当很容易在边缘处崩裂。技巧顺纹切削在生成刀具路径时如果可能尽量让刀具的进给方向顺着木材纹理的方向而不是横切纹理。多道次加工不要试图一刀切透18mm厚的木板。设置多道次加工每次切深2-3mm。虽然时间更长但能大幅降低切削阻力减少崩边。使用锋利的刀具一把钝刀会撕裂木纤维而不是切断它们。确保你的铣刀是崭新的或刚刚磨过的。提高主轴转速降低进给速度对于硬木较高的主轴转速例如18000-24000 RPM配合中等偏慢的进给速度能获得更光滑的切边。背面垫料在木板下方垫一块牺牲板如MDF并用双面胶或钉枪固定。这样当刀具切穿木板时是在切割牺牲板能有效防止底面崩边。这个项目不仅仅是一台复古计算机的复刻更是一次穿越时空的工程对话。当最后按下电源键绿色的光标在自制的显示器上闪烁手指敲击着拥有复古键帽的机械键盘发出清脆的声响时45年前那个在橱窗外驻足凝望的穷学生终于与梦想中的机器相遇了。整个过程教会我的远不止如何焊接一块PCB或编写一个模拟器更多的是关于耐心、规划和在社区中寻求帮助与分享的乐趣。希望这篇详尽的记录能为你开启自己的复古硬件复刻之旅提供一张可靠的地图。