← На главную

IBM MCGA: нашли genlock, тестовые регистры и биты для 256 цветов

27.06.2026 05:17 · hackernews

IBM MCGA — дешёвый видеочипсет, который компания IBM впервые поставила с PS/2 моделями 25 и 30. Epson Equity 1e тоже использует совместимую графику, но на других микросхемах. Сам чипсет состоит из двух микросхем: контроллера памяти (72X8300) и видеоформаттера (72X8205). Часть из них делали на внутреннем процессе IBM, часть — на внешних матрицах от Seiko.

Контроллер памяти реализует синхрогенератор MC6845, управляет интерфейсом видеопамяти к шине ISA, а также RAM шрифтов, синхронизацией и чтением ID монитора. Конкретный экземпляр, который отреверсили, сделан на матрице Seiko SLA6430: 4 342 базовые ячейки (BC) по 4 транзистора, 167 строк и 26 столбцов, техпроцесс 2um CMOS с двумя слоями металла.

Видеоформаттер декодирует адреса памяти и портов ввода-вывода ISA, управляет RAMDAC и генерирует пиксели в графическом и текстовом режимах. Один экземпляр был на внутреннем процессе IBM, но при декапсировании содрали верхний слой металла — нетлист не извлекли. Второй, на матрице Seiko SLA6330 (3 312 BC, 144×23), отреверсили полностью.

При реверсе выяснилось несколько новых фишек. MCGA умеет genlock — синхронизироваться с внешними сигналами HSYNC и VSYNC, которые выведены на 11 и 12 пины видеоконнектора. Чтобы включить режим, нужно записать 1 в бит 3 регистра 0x12. В официальной документации этот бит значился как «зарезервирован». Вероятно, для работы потребуется внешний PLL на 14 или 25 МГц.

Бит 3 регистра 0x10 (Mode Control) — «Compatibility» — влияет только на текстовые режимы 80×25, удваивая значения регистров горизонтальной синхронизации. Бит 2 того же регистра переключает тактовый генератор: по умолчанию всё работает от 25.175 МГц, при записи 0 — от входа 14.318 МГц. Бит 6 пока не расшифровали.

Регистр 0x20 — тестовый, для заводского тестирования. В нём есть биты, которые включают форсированную подачу тактов в старшие и младшие разряды счётчиков (горизонтального, вертикального, курсора и так далее), чтобы прогонять тесты быстрее.

У видеоформаттера нашли два недокументированных бита в регистре 0x1A: один, возможно, принудительно включает 256-цветный режим при любых разрешениях, второй — заливает границей весь экран. Также есть доступ к производственным тестовым регистрам через регистры 0x19 (адрес) и 0x18 (данные). Там находятся четыре регистра с данными, которые идут на RAMDAC, читаются из VRAM, и один write-only, в котором бит 0 — аппаратный сброс, бит 1 — отключение выдачи на RAMDAC.

Процесс реверса: скан чипа 72X8300 уменьшили с 21808×21778 до 10904×10889 пикселей, сжали в JPEG до 85%, импортировали в KiCAD c масштабом 0.10317, чтобы шаг между BC составлял 3 мм. Для каждого типа ячейки создали библиотечный футпринт и символ. Все контакты по центру, чтобы футпринт можно было вращать — многие ячейки в оригинале были зеркальными. Матрица — два слоя металла, разрешены контакты металл-1 к металлу-2, металл-2 к поликремнию и к диффузии. В каждом столбце две параллельные шины: VCC справа и GND слева — левые транзисторы в ячейке NMOS, правые PMOS. В ячейке два транзистора делят один затвор. Внешние сигналы идут горизонтально по металлу-1, внутренняя разводка — по металлу-2. Есть ещё горизонтальные шины питания на металле-1 — их не трогали, они не сигнальные. Дорожки ставили от контакта по металлу, привязывали к другим контактам, назначали имя цепи, а потом прогоняли обратно в схему — в обратном порядке против обычного процесса в KiCAD. Планируют генерировать Verilog из нетлиста.

Читать оригинал →