z386: Відкритий FPGA CPU, який відтворює Intel 80386

z386: Відкритий FPGA CPU, який відтворює Intel 80386

z386 — це відкритий FPGA CPU, який відтворює процесор класу Intel 80386 завдяки відновленому оригінальному мікрокоду. Цей проект досяг стадії, на якій може завантажувати DOS, запускати програми в захищеному режимі та грати в класичні ігри, такі як Doom і Cannon Fodder.

Що таке Intel 80386?

Для молодших читачів поясню, що Intel 80386, або i386, був представлений у 1985 році як перший 32-бітний x86 процесор Intel. Він заклав основи сучасних 32-бітних операційних систем ПК, введучи захищений режим, пейджинг, підтримку віртуальної пам’яті та розширений адресний простір у порівнянні з попередніми 16-бітними ЦП.

80386 в основному асоціюється з пізніми DOS-системами, ранніми Windows 3.x, DOS-екстендерами, 386BSD, раннім Linux та переходом від 16-бітних до 32-бітних обчислень.

Технічні характеристики z386

z386 написаний на SystemVerilog та не емулює інструкції індивідуально на RTL-рівні. Натомість він відтворює достатню частину оригінального апаратного забезпечення 386, щоб відновлений контрольний ROM Intel 80386 міг керувати виконанням.

Ядро має 37-бітову мікрокодову ROM на 2560 записів і зберігає ключові структури 80386, включаючи попереднє завантаження інструкцій, декодування, послідовник мікрокоду, сегментацію, пейджинг, перевірки захисту, TLB, ALU, зсувники та шляхи пам’яті/cache. Використовуються оптимізації, зручні для FPGA, такі як DSP-блоки для множення та компактний уніфікований кеш L1.

Сумісність з класичними програмами

Сучасна реалізація може завантажувати DOS 6 і DOS 7, запускати програми в захищеному режимі за допомогою DOS-екстендерів, таких як DOS/4GW і DOS/32A, і підтримувати деякі легендарні ігри та програми, такі як Doom, Doom II, Cannon Fodder, FreeDOS, HIMEM, EMM386 і SeaBIOS.

Згідно з автором проекту, актуальні збірки z386 демонструють продуктивність, схожу на швидку кешовану машину класу 386 на частоті приблизно 70 МГц або на слабкому 486. На платі DE10-Nano z386 працює на 85 МГц і досягає 16,5 FPS в Doom на максимальних налаштуваннях.

Що стосується продуктивності, z386 більш компактний — приблизно 8000 рядків коду в порівнянні з 17600 рядками у ao486 і використовує менше ресурсов FPGA за словами автора.

Технічний процес та архітектура

Проект ґрунтується на нещодавньому реверс-інжинірингу мікрокоду Intel 80386. Мікрокод був відновлений з високоякісних зображень кристалів, потім витягнути та розібраний за допомогою обробки зображень, нейронних мереж і ручного аналізу. Цей процес дав вживане дизасемблювання, яке тепер використовується як основна контрольна програма z386.

Крім того, проект реалізує специфічні для 386 функції захищеного режиму, включаючи сегментацію, пейджинг, перевірку селекторів, стан кеша описів, обробку TLB, обходи сторінок, оновлення бітів доступу та брудності, а також обробку помилок сторінок.

Попри те, що оригінальний 80386 не мав вбудованого кеша L1, z386 додає 16 КБ уніфікованого кеша L1, щоб зробити систему пам’яті FPGA схожою на швидкі кешовані системи 386 того часу. Кеш є 4-смуговим асоціативним, використовує 16-байтові рядки та зменшує конфлікти між попереднім завантаженням інструкцій і зчитуванням даних.

Подальші плани та обмеження

Автор зазначає, що Windows ще не підтримується, а охоплення захищеного режиму залишається неповним.

Для додаткових деталей відвідайте сторінку проекту на GitHub або ознайомтесь з цією публікацією.