![]()
6502处理器每秒执行约100万次操作,这在1975年是顶级性能。如今有人让它"套娃"——在一颗6502上虚拟另一颗6502,速度还更快了。
6o6 v1.1的发布像一份迟到的生日礼物。作者Cameron Kaiser选在苹果50周年推出Apple-1模拟器,但跑在Commodore 64或Apple II上。这相当于用Windows 95的电脑装虚拟机跑Windows 3.1,还要保证不卡顿。
「套娃」的技术账本
6o6的核心机制用两层抽象解决内存隔离:Harness(马具)负责虚拟地址映射,Kernel(内核)充当监管者。每次VM执行完一条客户指令,控制权交还内核检查状态,再循环。
![]()
v1.1的优化集中在寻址模式。作者用xa65交叉汇编器的宏系统内联大量内存访问代码,虽然体积膨胀,但避免了子程序调用的开销。热路径上甚至砍掉一条指令,对6502这种每周期精打细算的架构来说,相当于高速收费站少开一个闸口。
新版本给中断标志控制开了更多后门,还加了直达零页的快速通道。零页是6502的前256字节内存,相当于CPU的"口袋"——访问速度比其他区域快一个周期。6o6现在识别到零页写入时走专用捷径,不用绕完整地址解析流程。
苹果1号的「借尸还魂」
Apple-1的硬件极简到近乎简陋:1MHz 6502、4KB内存、没有图形芯片,视频靠移位寄存器硬扫。Wozniak设计它时连键盘接口都省了,用户得自己外接ASCII键盘。
![]()
6o6的Apple-1示例完整模拟了这套配置,包括那个著名的Woz Monitor监控程序——1976年用户就是通过这个40字节的程序手工输入十六进制代码启动系统的。模拟器甚至复现了原始硬件的内存映射缺陷:某些地址镜像重复出现,当年程序员靠这个"bug"省了几颗芯片。
作者坦承这不是首个Apple-1模拟器。C64和Apple II平台上早有先例,连英国小众机型SAM Coupé都有类似作品。但6o6的差异化在于虚拟化层的设计:Harness机制允许客户内存完全脱离主机物理空间,有个示例把EhBASIC跑在geoRAM扩展卡上,主机内存零占用。
复古计算的「性能焦虑」
6502-on-6502的虚拟化损耗曾是死结。早期实现每客户指令需要数十个主机周期,实用价值存疑。6o6通过指令融合("extra helpings"模式)批量执行客户代码,配合宏内联,把开销压到可接受范围。
Kaiser在文档里埋了个细节:v1.1的IRQ处理改进顺带修好了BRK指令的边界情况。6502把BRK当软件中断用,但标志位处理有历史遗留的模糊地带。6o6现在允许内核更精细地操控中断掩码,模拟某些依赖精确时序的老硬件时误差更小。
50年前Apple-1售价666.66美元,Wozniak和Jobs在车库手工组装了约200台。如今6o6让这段历史在同等架构的芯片上流动,虚拟层套着虚拟层,像CPU在凝视自己的青春。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.