
这是来自我们的黑客 [Piers] 的一些有趣的东西: 软件定义的 ROM 。
在这一系列的三个视频中,[Piers] 向我们介绍了什么是软件定义的 ROM、如何制作它们以及如何使用它们。
正如 Piers 解释的那样,复古技术员经常遇到的一个问题就是 ROM 芯片故障。在他感兴趣的时代,ROM 芯片主要有三种类型,均为 24 针双列直插式封装 (DIP):
- 2364 ROM芯片:8KB;1条片选线
- 2332 ROM 芯片:4KB;2 条芯片选择线
- 2316 ROM 芯片:2KB;3 条芯片选择线
片选线是处理器指示特定 ROM 芯片激活的方式。激活后,ROM 芯片将读取地址线上的值,并通过数据线输出该地址的数据。
[Piers] 利用其软件定义 ROM,通过微控制器实现了 ROM 的行为(将地址线上的请求转换为数据线上的结果)。由于他的 ROM 板是软件定义的,因此具有极高的可配置性,这意味着他可以支持所有三种 ROM 类型的所有配置。
[Piers]查阅了一些旧的ROM数据表,以了解时序要求的详细信息。他的功能要求是,所有三种类型的ROM都能用一个硬件版本(同一个微控制器)模拟,并且封装尺寸(24引脚DIP封装)相同,可手工焊接,且价格低廉。进一步的技术要求是,所有解决方案都能用软件实现(无需FPGA),需要的板载元件尽可能少,GPIO能够承受5V电压,使用片上振荡器能够提供快速的时钟速度,PCB层数不超过两层,并且所有SMD元件的封装尺寸均为0603或更大。
他考虑了各种微控制器,包括 PICO/RP2040/RP2350、ESP32、ATMEGA、PIC、STM32F1 和 STM32F4。他非常想要 PICO,因为它们速度快、功能强大,但不支持 5V 的 GPIO,所以最终选择了 STM32F4。他详细介绍了引脚选择、PCB 布线和 ROM 预处理(mangling),以实现最佳性能。该芯片将数据从闪存加载到 RAM,因此具有可靠且确定的性能特性。芯片预留了编程引脚,以便 ROM 可以进行在线重新编程。
说到编程,Piers 大部分代码都是用手工编写的汇编代码实现的。他说,原因是他不希望不同的实现依赖于不同的编译器版本。
现在您有了通用的软件定义 ROM,您所需要的只是一个可靠的 ROM 转储器。
原文: https://hackaday.com/2025/07/19/software-defined-retro-roms/