LINUX.ORG.RU

Энтузиасты дизассемблировали микрокод i386 и создали открытый CPU z386

 , , , z386,

Энтузиасты дизассемблировали микрокод i386 и создали открытый CPU z386

6

5

Энтузиасты смогли успешно извлечь и дизассемблировать микрокод процессора Intel 80386, который из-за отсутствия документации считался «чёрным ящиком». Бинарный образ микрокода был воссоздан с привлечением AI по фотографиям кристалла в высоком разрешении, а логика работы разобрана через трассировку соединений на кристалле. Постепенно были определены структура микрокоманд (μ-ops), поля, порядок исполнения и маркеры конца инструкций. Наработки проекта опубликованы на GitHub как общественное достояние.

Выявлено, что в CPU 80386 каждая инструкция полностью исполняется через микрокод, в то время как в 8086 и современных процессорах часть инструкций обрабатывается напрямую. Кроме того, в отличие от процессоров 8086, в 80386 микрокод не реализует алгоритмы напрямую, а в основном настраивает аппаратные ускорители (умножитель, делитель, быстрый сдвиг, PTU (Protection Test Unit)).

В ходе исследования также была обнаружена возможная проблема с безопасностью при обработке битовой карты прав доступа к вводу/выводу (IO permission bitmap): при 4-байтовом обращении к портам проверялись биты прав доступа только для первых 3 байтов, а доступ к 4-му байту не проверялся, что теоретически допускало обращение к аппаратным регистрам, доступ к которым должен был быть запрещён.

На основе опубликованного микрокода разработан открытый CPU z386, реализованный на языке SystemVerilog и работающий с использованием FPGA. Вместо реализации каждой инструкции в форме отдельного RTL (wikipedia.org) (Register-transfer level) в z386 реализованы аппаратные структуры, которыми управляет оригинальный микрокод. Производительность подготовленной реализации соответствует быстрому 386 ПК (~70MHz). Под управлением z386 удалось успешно запустить DOS 6/7, DOS/4GW, DOS/32A и игры, такие как Doom и Cannon Fodder.

>>> Подробности на opennet



Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от lenin386

просто флоппи - Intel 82072A

Это IBM AT, почему нельзя в 286м компе использовать XTшные веники и флоппики. Натягиваешь сову на глобус просто. Те же винчестера и флоппики были на школьных клонах i8080 в виде «Корветов», причём полностью наши.

drfaust ★★★★★
()
Ответ на: комментарий от VIT

Тогда это

Так и в чём разница то?

Вот есть условно три «версии», в одной надо прибавить к переменной 5, в другой 10, в третьей 15. Выполняем все три в одном такте, записываем результат только от той, которая была нужна (допустим сложить мы можем сразу, а вычислить условие выбора - позже), остальные выкидываем. У каждой «версии» будет свой регистр где этот временный результат хранится.

Особенность VLIW тут будет в том, что размещение всех трёх сложений в один такт будет явно указано в двоичном коде инструкций, а не будет выведено процом из трассировки потоков данных и условных переходов.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от drfaust

Там уже всё на драгмет попилили. Это раритеты. Тебе обязательно фоточки нужны? Может ещё по почте этот редкий экземпляр переслать?

Перешли в музей по твоей ссылке, если он у тебя есть =) Или хотя бы фотку. Я же говорю, люди с ретросайта пытались хотя бы реальное фото найти. Не смогли. И у тебя нет. Ни 286, ни тем более 386. Уже это говорит о в лучшем случае совсем малой партии, а в каталогах мало ли что на бумаге напечатано было.

Но про КР1847ВМ286 вроде есть достаточно надежные свидетельства, что какое-то количество все-таки выпустили. А про 386-й я даже про готовность не слышал. То, что для него уже было название Л1876ВМ1 - это здорово (не знал, между прочим), но процессора никто не видел, а от одного человека я слышал, что были прототипы из двух чипов, т.к. не смогли по техпроцессу вытянуть один.

В ответ на пруфы ты не привёл ни одного антитезиса, кроме голословного «всё пропало я не верю».

Наличие отсутствия - это тоже пруф отсутствия серии или очень небольшого количества в партии, так что на имеющихся фотках реальных советских (белорусских начала 90-х) машин микросхемы чипсета 1847 можно увидеть, а вот процессор там чей-то другой. Значит не было в сколько-то достаточном количестве.

Скорее всего, 286-й клон довели до серии, разработав всю обвязку, но с самим процессором имелись сложности с серийным выпуском, которые не успели устранить до развала. А 386-й клон, вероятно, только начали разрабатывать, не успев уже ничего, кроме возможно лабораторных прототипов.

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 4)
Ответ на: комментарий от firkax

а вычислить условие выбора - позже

вот здесь хитрость. Такой код:

a1 = a + 5;
a2 = a + 10;
a3 = a + 15;
if ( cond1 ) b = a1; else if (cond2 ) b = a2; else ( cond3 ) b = a3; else halt;

Будет спекулятивным, если присваивания выполняются независимо, а условия являются не программными, а аппаратными. Обычно один из регистров переполняется или становится 0. Если это выполняется с помощью условных инструкций и флагов - это то, что сейчас делает LLVM и спекулятивным выполнением не является.

Проще говоря если поcледняя строчка - аппаратная, а контекст выше - независимый и может содержать одинаковые независимые данные, хранит индивидуальный контекст - то это спекуляция. Если последняя строчка - программная и контектст один и разделяемый так, что может иметь race condition - то не спекуляция.

в спекулятивном выполнении вот этот код может оказаться детерминированным и корректным при а = 5:

a = a + 5;
a = a + 10;
a = a + 15;
if ( cond ) b = a;

b или 10 или 15 или 20, но точно одно из этих в зависимости от условия.

VIT ★★
()
Последнее исправление: VIT (всего исправлений: 2)
Ответ на: комментарий от drfaust

почему нельзя в 286м компе использовать XTшные веники и флоппики.

Это вопрос или что? Нельзя. Потому что на 286-й машине должен быть контроллер HD floppy и IDE HDD. Это 286-й.

Те же винчестера и флоппики были на школьных клонах i8080 в виде «Корветов», причём полностью наши.

Это контроллер DD floppy. Это другое. А контроллера винчестера на Корверте не было. Тем более, нашего.

lenin386 ★★★★★
()
Ответ на: комментарий от VIT

Да я и не знал. Так что это проблемы не сайта, а Вашего Чикаго 🤪

drfaust ★★★★★
()
Ответ на: комментарий от lenin386

Нельзя. Потому что на 286-й машине должен быть контроллер HD floppy и IDE HDD. Это 286-й.

И что именно запрещает на 286м проце использовать периферию от XT?

drfaust ★★★★★
()
Последнее исправление: drfaust (всего исправлений: 1)
Ответ на: комментарий от drfaust

Да время запрещает. Только 720к? fffuuuu! К тому времени, DD дисководы уже и не водились особо, а сами дискеты ну были, но зачем? Одно дело, к старой технике, другое - покупать. Дистрибьюция ПО на 360/720k дискетах - нонсенс, какие-то спец. партии для инвалидов. Нет, товарищ, не тема.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от VIT

Я имел ввиду, что изначально код такой:

if (cond1) b = a + 5;
else if (cond2) b = a + 10;
else (cond3) b = a + 15;
else halt;
А уже планировщик заметил что сложения можно вынести наверх, а внизу только проверить условия (причём начало вычисления условий тоже вверху, в к низу они просто готовы оказались). В x86 это происходит в проце, в Эльбрусе - в компиляторе. Ну и да, вывод компилятора разумеется программный. Вот же пример Энтузиасты дизассемблировали микрокод i386 и создали открытый CPU z386 (комментарий) там видно условное присваивание. Только где там race не понял.

И про контексты тоже возможно не понял. Тут имеется ввиду что a1, a2, a3 это три версии контекста и есть - число для записи в переменную 'a'.

firkax ★★★★★
()
Ответ на: комментарий от lenin386

Ты что-то выдумываешь. У меня установочные дискеты DOS 5.0 были (да и сейчас где-то лежат) как раз на 360k. А он сделан явно позже чем 286.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

То, что вы написали не имеет к спекулятивному выполнению никакого отношения. Это обычный out-of-order. Грубо говоря, берётся окно выполнения, смотрятся зависимости, выполняются те инструкции, которые READY. Все инструкции работают над одним и тем же разделяемым контекстом.

VIT ★★
()
Ответ на: комментарий от VIT

Нет, это не out-of-order.

В частности, операция «a+10» не должна и начинаться, если cond2==false. Но она началась и посчитана, её результат ждёт подтверждения (или опровержения) своей нужности чтобы быть или записанным в переменную, или выкинутым.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Я понял, в чём непонимание! Да, есть такая оптимизация, которая называется register renaming. Она позволяет уменьшать зависимости и увеличивать ILP. Это не спекулятивное исполнение, но очень похоже на это.

VIT ★★
()
Ответ на: комментарий от praseodim

Наличие отсутствия - это тоже пруф отсутствия серии или очень небольшого количества в партии, так что на имеющихся фотках реальных советских (белорусских начала 90-х) машин микросхемы чипсета 1847 можно увидеть, а вот процессор там чей-то другой. Значит не было в сколько-то достаточном количестве.

Когда я только начинал после института в 99м работать на НПО «Витязь», мой более старший и прошаренный коллега по сектору разработки вольво купил чисто на КМ-5, КМ-6, и пр. отечественной комплектухи (говорил, этот потенциометр, как 10гр обрезанных КМ стоит - серебра там было море) из тех самых ЕСок - пилили их нещадно, остальное на свалку. Сам же я на КМках пробовал, с одного плоттера заработал 25$, но больше такого железа я не нашёл.

И да, на том же radiokot (сайт древний) почти все схемы уже не открываются - просто рамка вместо фотки - где я тебе картинки и фото откопаю - сам ищи. Ну и документация просто так не пишется. Если не вытянула наша промышленность в конкуренцию - не значит что не было. Я те же платы от ЕС-1840 (а там своя шина, наскока помню, не ISA-слоты) видел уже с синими, буржуйскими каплями, которые никому не нужны, вместо КМ-ок

drfaust ★★★★★
()
Ответ на: комментарий от firkax

В частности, операция «a+10» не должна и начинаться, если cond2==false.

Правильно! Поэтому в общем случае такая оптимизация некорректна.

VIT ★★
()
Ответ на: комментарий от firkax

Нет, это не out-of-order.

Это типичный out-of-order. Выполняется даже в in-order, где происходит переключение ветвей условий. Так, например, выполняются условные инструкции в Nvidia ядрах. Там используется маскировка потоков в warp.

VIT ★★
()
Ответ на: комментарий от lenin386

😄😄😄

Смешно. Флоппик есть - есть, комп есть - есть. Воткнуть одну системну, вторую рабочую - и делай что хош. Ну и веник так же подключается.

Дистрибьюция ПО на 360/720k дискетах - нонсенс, какие-то спец. партии для инвалидов. Нет, товарищ, не тема.

Т.е. вариант ДОСа на 720 + 720 рабочей с тем же BC 3.1 ты не рассматриваешь? И да, игрушки тогда уже весили сотни мегабайт, Элита, например... Я винду 3.11 ставил с 720х дискет в далёком 96м, а ты неактуально. Да в те года веник на 10-20 мегабайт считался «мажорством».

drfaust ★★★★★
()
Последнее исправление: drfaust (всего исправлений: 1)
Ответ на: комментарий от VIT

Да нет же.

Хорошо, вот, возможно, более наглядный код:

if(cond1) a=q1;
else if(cond2) a=q2;
else if(cond3) a=q3;
q1, q2, q3 - переменные в оперативной памяти. По логике программы чтение переменной q2 должно производиться только после того, как мы узнали что cond1==false && cond2==true. Но спекулятивно оно делается раньше, в самом начале, и к моменту, когда (если) мы попадём в эту ветку, в переменную 'a' записывается уже готовое, заранее прочитанное значение, без ожидания ответа от оперативной памяти для чтения.

Для VLIW это спекулятивное чтение просто явно указано ассемблерной инструкцией, для x86 - проц находит это возможное чтение в очереди команд сам и делает его заранее, не зная дойдёт ли до этой инструкции выполнение.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от drfaust

Т.е. вариант ДОСа на 720 + 720 рабочей с тем же BC 3.1 ты не рассматриваешь?

Нет, BC 3.1 без жесткого диска был не реален. А контроллера жесткого диска советская система не сделала. Ни на 10 ни на 20 мегабайт.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

А контроллера жесткого диска советская система не сделала

А что подразумевается под «контроллер жесткого диска»? Если это микруха на плате контроллёра ЖД, то это уже периферия, а не как обслуга материнки

drfaust ★★★★★
()
Ответ на: комментарий от lenin386

Только не надо про Элиту, в неё на PC не играл никто.

Т.е я на ЕС-1840 уже «никто»???

drfaust ★★★★★
()
Ответ на: комментарий от lenin386

Приносит тебе подружка дискету 1.2 с текстами. И ты ей такой : ты - ламир. Иди отсюда.

Перефразировал: «Приносит тебе подружка Iomega ZIP-100 с порнухой. И ты ей такой : ты - ламир. Иди отсюда.»

drfaust ★★★★★
()
Ответ на: комментарий от lenin386

Нашёл системные требования wolfenstein 3d, 286 20MHz. Таких процов в обращении почти не было, это поздняя модификация AMD.

Что за Элита я не знаю.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от drfaust

Нет, это не периферия. Ещё раз. Поддержка контроллеров должна быть тесно интегрирована в BIOS. Иначе оно просто не загрузится, и дальше не заработает. По этой причине, никакая зарубежная плата просто так не вставала а ПОИСК. Это всё - не просто, и не фигня.

lenin386 ★★★★★
()
Ответ на: комментарий от firkax

Я понял, что вы имеете в виду. Это оптимизация разрыва зависимостей и увеличения ILP, ещё один термин - отложенное решение. Это не то, о чём я говорю.

Где-то у меня был документ с формальным описанием термина. Сейчас, конечно, не найду. Суть в том, что в общем случае это не единая оптимизация, а модель параллельного программирования, где каждая параллельная ветвь исполняется независимо и с использованием своего контекста. Только некоторые контексты возвращаются в главный контекст.

VIT ★★
()
Ответ на: комментарий от firkax

Это не та Элита. Я играл на ЕС-1840. Космическая леталка с экономикой и, иногда с боями. А так да, она появилась ещё на 8ми-битных процах, но её портировали куда только можно.

drfaust ★★★★★
()
Последнее исправление: drfaust (всего исправлений: 1)
Ответ на: комментарий от VIT

я являюсь разработчиком микроархитектур с тремя десятками лет стажа.

расскажи пожалуйста, если знаешь, в чем секрет такой эффективности эпловских M процессоров?
отдаленно слышал что дело как раз в микроархитектуре, а не то что они ARM + очень быстрая память
в теории на x86 ядрах что то подобное можно сделать?

Fatalist
()
Ответ на: комментарий от lenin386

К чему это? Это как-то влияет на возможность работы 360К дисковода с 286 процом? Если у тебя есть 1.2М то конечно лучше его, но не у всех время получения 286 материнки оказалось совпадающим с временем получения 1.2М дисковода. 286 например могли оказаться списанными откуда-то где их заменили на 386, дисководы же списывать смысла мало, ничего более нового для 5" после 1.2М не делали.

firkax ★★★★★
()
Ответ на: комментарий от lenin386

Я про ПОИСК даже не заикался. Я говорил про ЕС. И да, биос там - 64Кб ассемблерного кода - ничто не мешает на базе буржуйского нарисовать свой и впихнуть в int 13h что угодно, что и показывал уже.

drfaust ★★★★★
()
Ответ на: комментарий от firkax

286-ю машину покупали не для того, чтобы иметь возможность работать с 360к дисководом. Она стоила значительные деньги. Мощ процессора позволяет работать с 1.2 - подавайте контроллер на 1.2. Это примерно как сейчас купить новый комп и получить контроллер USB 2.0. АЧО? Достаточно.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от drfaust

ничто не мешает на базе буржуйского нарисовать свой и впихнуть в int 13h что угодно

На словах вы Львы Толстые. Не сделали.

lenin386 ★★★★★
()
Ответ на: комментарий от lenin386

Не все её покупали, повторю, кто-то нахаляву списанное подбирал например.

И мощь процессора тут ни при чём. Я не проверял, но скорее всего 1.2М дисковод можно и к XT прицепить. Контроллеров к нему на ISA-8 разве не было?

купить новый комп и получить контроллер USB 2.0. АЧО? Достаточно.

Лично меня бы это полностью устроило, для клавиатуры/мышки и usb 1.0 хватит, а больше я ничего в usb не втыкаю. Ну ещё очень редко флешки, не помню когда последний раз было, им тоже usb 1.0 хватит.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от lenin386

А что мешает более древнему i8086 работать с 1.2 Мб дискетами? Порты не адресуемы? DMA-подсистемы нету? Что именно мешает?

З.Ы. Какая-то бредовая аргументация.

drfaust ★★★★★
()
Ответ на: комментарий от firkax

Я не проверял, но скорее всего 1.2М дисковод можно и к XT прицепить

Нельзя. Производительности не хватит данные прокачать. Можно через DMA, но по факту это было слишком дорого, на реальных контроллерах не разводили DMA. А если и разводили (нет), то BIOS драйвер это всё равно не использовал.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 2)
Ответ на: комментарий от firkax

Контроллеры тут не причём - дело в ПО. Просто к тому времени, когда появились 1.2 BIOS 286го проца был никому не интересен, да и кто шить БИОС-то будет - они были на микрухах, стираемых ультрафилолетом + программатор. А вот под ту же DOS 3.2 для дискет в 720 я помню драйвера (подменяли int 13h), позволявшие форматить их на 800 и 900 Кб (так и назывались 800.com и 900.com), но с них не загрузишся и без этих драйверов дискета выглядит неотформатированной.

З.Ы. Господа, не стоит забывать, что во времена 286-386 процов господствовала MS-DOS в СССР (ну и поверх неё Win 3.11), которая давала прямой доступ к портам. Там даже БИОС особо не нужен был - пиши в порты и двигай головки.

drfaust ★★★★★
()
Ответ на: комментарий от lenin386

Так время запрещает и 286й проц по такой теме-то. Нафига в начале 2000х содержать компы на 8086/286? Когда я студентом уже лабы на 486м сдавал? ЕС-1863 (386й) я в институте в 94м использовал на первом же курсе - видать впечатлить молодых стьюдентов хотели, а потом на EC-1840/41 сидел пару лет.

Так что тематику про отсталость 360/720 я вообще не понимаю.

drfaust ★★★★★
()
Ответ на: комментарий от drfaust

Какая-то каша. Причём тут шитьё биоса и зачем его шить на 286, где поддержка 1.2М дискет и так была?

Драйвер 800.com - не полноценный драйвер флоппи-дисковода. Он только чуть перенастраивал работу биосовского, весь его асм-листинг занимал всего несколько страниц. Суть была в том чтобы добавить 10секторный формат в список разрешённых. Работало разумеется только с 1.2М дисководом, т.к. старые не умели 80 дорожек.

На 360К дисководах возможно можно было 400К формат через него сделать, точно не помню.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от lenin386

😄😄😄

Я писал, и напрямую в память и порты, и int 13h перехватывал, как и многие другие прерывания. Смешно тораисчььь. Если Вы ентого не делали, то это не значит что другие это не пользовали... И да, на компах работу с видеокартой под МС-ДОС через биос делать - это дикий тормоз, никто этого не делал, разве что установить видео-режим, а дальше чисто порты и видео-память, иначе одна линия по диагонали рисоваться будет доли секунд.

drfaust ★★★★★
()
Ответ на: комментарий от Fatalist

в чем секрет такой эффективности эпловских M процессоров?

Я не могу ответить на так широко поставленный вопрос, да и определение «эффективности» займёт разговор примерно как у нас с monk и firkax, вроде все про одно и то же, но получается, что каждый про своё. Вы по-английски читаете?

https://newsletter.semianalysis.com/p/apple-tsmc-the-partnership-that-built

Это для начала. Может потом появятся более конкретные вопросы.

в теории на x86 ядрах что то подобное можно сделать?

В теории можно, но ведь продавать айфоны надо здесь и сейчас в этих реалиях. Поэтому вопрос риторический. Как это сделать практически, и зачем это делать, мне не понятно.

VIT ★★
()
Ответ на: комментарий от firkax

Нашёл системные требования wolfenstein 3d, 286 20MHz. Таких процов в обращении почти не было, это поздняя модификация AMD.

Играл в начале 90-х в вольфыча на 286-й 12 Мгц. Не исключено, что сейчас мне показалось бы жутким тормозом, но тогда был в восторге и тормозной игра не казалась.

anonymous_incognito ★★★★★
()

Не совсем понял суть этого всего (с учётом обсуждения, правда я не всё прочитал). Правильно ли я понимаю, что полных спецификаций архитектуры i386 не существовало? А как же всякие программные эмуляторы типа qemu?

Wapieth ★☆
()

Теперь под него можно заоптимизировать так, что современные печки не нужны?

water_closed
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.