IBM MCGA 门阵列逆向工程

Hacker News Top 论文

摘要

该项目对 IBM 用于 PS/2 25 型和 30 型中的 MCGA 门阵列进行逆向工程,揭示了详细的电路图和新功能,例如 genlock 能力和未公开的寄存器。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/27 06:49

schlae/IBM_MCGA

Source: https://github.com/schlae/IBM_MCGA

IBM MCGA 门阵列逆向工程

IBM 的 MCGA(多色图形阵列)是随 PS/2 型号 25 和 30 推出的低成本视频芯片组。Epson Equity 1e 使用兼容 MCGA 的视频,但未使用相同芯片。

IBM 芯片组由内存控制器门阵列和视频格式化门阵列组成。有些实例采用 IBM 内部门阵列工艺制造,另一些则使用了 Seiko 的外部门阵列部件。

内存控制器门阵列 (72X8300)

该门阵列包含 MC6845 同步发生器 IC 的实现,管理 ISA 总线的视频 RAM 接口,管理字符 RAM 接口,以及一些其他杂项功能,包括时钟选择和显示器 ID 回读。

我逆向工程的实例采用 Seiko SLA6430 门阵列实现。它包含 4,342 个基本单元(BC),每个单元有 4 个晶体管。BC 排列成 167 行 26 列。这是 2um CMOS 工艺,2 层金属。

图像来自 72x8300-sla6430j (https://siliconpr0n.org/map/ibm/72x8300-sla6430j/)

逆向工程原理图和布局可在 mcga72x8300flat 子目录中找到。

视频格式化门阵列 (72X8205)

格式化门阵列解码 ISA 内存和 I/O 端口地址,管理 RAMDAC 接口,并在图形和文本模式下生成像素数据。

该 IC 有两个图像。第一个,72x8205-gl14105fs (https://siliconpr0n.org/map/ibm/72x8205-g14l05fs/) 似乎是采用 IBM 内部门阵列工艺。不幸的是,在开盖过程中,顶层金属被去除,因此无法提取网表。第二个,72x8205-sla6330j (https://siliconpr0n.org/map/ibm/72x8205-sla6330j/),已经过逆向工程:参见 mcga72x8205flat 子目录。

它是 Seiko SLA6330 门阵列。包含 3,312 个基本单元,每个单元 4 个晶体管。BC 排列成 144 行 23 列。

72x8300 (内存控制器门阵列) 注释

基于逆向工程工作,发现了关于 MCGA 的新信息。

  • MCGA 可以外部 HSYNC 和 VSYNC 信号进行 genlock(同步锁定)。这些信号被引出到视频连接器:引脚 12(ID1)为 VSYNC,引脚 11(ID0)为 HSYNC。要启用此模式,将寄存器 0x12(字符发生器接口和同步极性,或显示感知)的位 3 写为 1。在 PS/2 型号 30 的技术参考手册中,该位被列为“保留 = 0“。据推测,这种 genlock 模式需要一个外部时钟 PLL 连接到 25MHz 或 14MHz 时钟输入。

  • 寄存器 0x10(模式控制)位 3 “Compatibility” 仅影响 80x25 文本模式。它导致水平时序寄存器乘以 2(并在 0x00 水平总计的情况下加 1,在 0x02 水平同步开始的情况下减 1)。

  • 寄存器 0x10(模式控制)位 2 “Clock = 1” 控制哪个时钟驱动视频电路。在默认状态下,大部分视频电路使用 25.175MHz 时钟。可以通过将该位更改为 0 将时钟频率设置为 14.318MHz 输入。

  • 寄存器 0x10(模式控制)位 6 “保留 = 0” 尚未完全理解。

  • 寄存器 0x20(保留)是一个制造测试模式寄存器。

功能
714.318MHz 交替时钟模式(未知)
6VCK 引脚交替模式(通常 VCKIN 直接连接到 VCK)
5加速模式:未知
4加速模式:光标位置高计数器
3加速模式:光标位置低/字符计数器
2加速模式:垂直总计调整计数器
1加速模式:垂直计数器
0加速模式:水平计数器

计数器加速模式基本上向每个计数器的高四位以及低四位注入时钟信号,从而使计数器更快耗尽。这有助于芯片测试器中的工厂测试。

72x8205 (视频格式化门阵列) 注释

扩展模式寄存器 0x1A 有两个未文档化的位:

功能
1未知,可能强制使用 256 色模式,即使使用其他分辨率。
0未知,可能将边框颜色强制显示在整个屏幕上。

通过访问以下位置可以使用额外的制造测试寄存器:

  • 寄存器 0x19 - 制造寄存器地址
  • 寄存器 0x18 - 制造寄存器数据

要访问特定的制造测试寄存器,将地址加载到寄存器 0x19,然后读写 0x18 的内容。

制造测试寄存器为:

地址寄存器
0未实现
1只读。包含发送到 RAMDAC 的最新数据内容(P[7:0] 引脚)。
2只读。包含从 VRAM 接收的最新数据内容(CP[7:0] 引脚)。
3只读。包含来自格式化逻辑的未知 16 色模式数据。
4只写寄存器,操作见下文。

地址 4 的只写寄存器仅实现以下两位:

功能
0制造硬件复位,等效于复位引脚。写入’1’使设备复位,写入’0’解除复位。
1写入’1’禁用大量输出,包括连接到 RAMDAC 的输出。

逆向工程过程信息

72x8300 图像从 21808x21778 缩放至 10904x10889。输出 jpg 文件设置为 85% 压缩以节省空间,设置为 48DPI,并以 0.103170 的缩放因子导入 KiCAD。这导致 KiCAD 单位中 BC 到 BC 间距为“3mm“。

为每个识别出的基本单元类型创建了库封装,并与原理图符号关联。所有焊盘都放置在中心,以便封装可以旋转,因为原始设计中的许多 BC 是镜像的。

门阵列使用两层金属,理解层间连接可能具有挑战性。通常,只有少数允许的接触:

  • 金属1到金属2
  • 金属2到多晶硅(栅极)
  • 金属2到扩散区

每列在金属2上有两条平行线,分别承载 VCC(右侧)和 GND(左侧)。因此,每个 BC 中的左侧两个晶体管为 NMOS,右侧两个晶体管为 PMOS。在一个 BC 中,两个晶体管共享一个栅极,每个栅极有三个连接焊盘。接触点可以将 VCC 或 GND 连接到两个晶体管之间共享沟道连接的扩散区域,或者连接到一个晶体管的隔离沟道连接、另一个晶体管或两者。

进入或离开逻辑门的外部信号通常使用跨越整个单元的水平迹线(金属1)连接。逻辑门内部的布线通常在金属2上完成。

除了承载电源和地的金属2上的垂直平行线外,还有另一组水平线(金属1)也承载电源和地。我的逆向工程布局没有在这些线上放置迹线,因为它们不是信号线。

迹线从封装焊盘开始,沿着下面的金属布线,并连接到所有其他连接的焊盘,赋予网络名称,然后反向传播到原理图(与通常的 KiCAD 流程相反)。

未来计划

  • 研究从 KiCAD 网表生成 Verilog。

相似文章

你能逆向工程一个ASIC吗?

Hacker News Top

Jane Street 发布了一个新谜题,挑战参与者从 GDS 版图中逆向工程一个 ASIC,恢复网表,推断电路用途,并找到最终答案。