Пять лет назад энтузиаст под ником nand2mario начал восстанавливать 8086 по оригинальному микрокоду Intel. Теперь он сделал то же самое для 386. Результат — z386, FPGA-совместимый CPU 386-класса, который уже запускает реальное ПО: DOS 6 и 7, защищённый режим через DOS/4GW и DOS/32A, а также игры вроде Doom и Cannon Fodder. Для сравнения: z386 написан всего на 8K строк кода против 17.6K у зрелого ao486, использует 18K ALUTs против 21K и греется до 85 MHz против 90 MHz. Но и работает чуть медленнее — например, в Doom на максималках выдаёт 16.5 FPS против 21 FPS у ao486. По производительности это примерно как быстрый 70-мегагерцовый 386 с кэшем или младший 486.
В основе z386 лежит оригинальная 37-битная микрокодовая ROM Intel на 2560 записей. Каждая микроинструкция — это поля source, dest, ALU-операция, bus-команда и флаги. Простая команда вроде MOV reg, reg занимает два такта: первый — чтение регистра и ALU, второй — запись результата. Между командами есть delay slot, и после ветвления следующая микроинструкция тоже выполняется. Именно такая архитектура даёт CPI хуже, чем у 486.
Интересная деталь — prefetch unit читает 32-битные слова, но декодер всё равно разбирает байты последовательно. Однако, как только код понял, что следующие четыре байта — просто displacement, он забирает их одним 32-битным чтением, а не четырьмя отдельными. Декодирование построено на двух PLA-таблицах: Control PLA решает, что за байт попался (префикс, opcode, ModR/M), а Entry PLA вычисляет точку входа в микрокод. Для примера разобрана команда 8B 44 24 08 — MOV EAX, [ESP+8].
Кэш — 16 КБ, 4-канальный, unified I+D, VIPT с физическим тегом. Размер выбран не случайно: VIPT без синонимов требует, чтобы индекс помещался внутри 4-килобайтной страницы. С 16-байтовыми линиями и 4-way associativity получается ровно 16 КБ. Кэш write-through, с двухэлементным write buffer и burst-заполнением.
Тестировали z386 сначала на real-mode single-step тестах от gloriouscow, потом на защищённом режиме через 86Box. DOS/4GW отлаживали две недели с помощью Ghidra. Сейчас проект работает на Altera Cyclone V и Gowin GW5A. Windows пока не грузится, но автор считает, что главная ценность 386 — в том, что он задал «железо-программный контракт» для x86 на десятилетия вперёд. Весь проект — открытый, и ключевую роль в нём сыграл обратный инжиниринг микрокода от reenigne, gloriouscow и Кена Ширриффа.