LINUX.ORG.RU

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

 , , , z386,

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

6

7

Энтузиасты смогли успешно извлечь и дизассемблировать микрокод процессора 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)
Ответ на: комментарий от watchcat382

Там тоже была нужна трассировка последовательности инициализации. Раскопали Trident и еще какую-то. Не так-то это и просто - именно потому что последовательность длинная и использует в числе прочих не описанные в доступной документации биты в регистрах.

Нет, трассировка как раз очень простая. Ставим TF=1 и на каждой инструкции смотрим не запись ли это в порт, если запись - сохраняем её в дамп. Вручную ничего изучать не требуется. Есть шанс, что записываемые значения могут отличаться от раза к разу и зависеть от ранее прочитанных, тогда этот способ в лоб бы не годится, но у меня обошлось без этой проблемы.

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

Прям дохера

Да, слишком для «разок прочитать пару пачек дискет». Я своё любопытство настолько дорого не оцениваю. :))

3 тыщи рублей у тебя нет, ой-ой-ой. тэл ми моар.

Есть. Но не для таких глупых трат...

Студент, да?

Пенсионер. Старый и слишком умный, чтобы скупать это вот merde по такой дикой цене...

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

смысла уже в это вкладываться и допиливать было уже никакого, в то время как стало возможным покупать импортные клоны в любых количествах.

Смысл - в сохранении технических компетенций и отсутствии жесткой зависимости от зарубежных поставщиков. Но тогда этого не понимали даже на уровне руководителей государства. Известна историческая фраза Гайдара в диалоге с министром станкостроения Паничевым, когда он сказал «Да кому нужны ваши станки?! Понадобятся - мы все за рубежом купим». Вот теперь нам это аукается :(

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

Спецификация электрического интерфейса 386 скорее всего была общедоступна. Для 8086/8088 она точно была общедоступна (именно из-за этого 8088 и выбрали процом для IBM PC). Во времена третьих пентиумов, т.е. спустя 15-20 лет, может быть что и поменялось уже.

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

Что то в схематике вы напутали.Куча спектрумистов подтвердит что работали с дискетами 1.2 и 1.44
И быстродействия хватало .

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

Что то в схематике вы напутали.Куча спектрумистов подтвердит что работали с дискетами 1.2 и 1.44 И быстродействия хватало .

А там не требовалось быстродействия...

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

Продемонстрировав такие умения можно было например на работу с хорошей зарплатой и крутыми компами устроиться.

Да. И потом, заправлять катриджи и тянуть локалку на этой работе. Правда позже, требования таких умений трансформировалось в умение подсчитывать количество шариков в кузове грузовика и определение оптимальности формы люков. А после и вообще в пение корпоративных гимнов. Знаешь, почему? Потому что нахрен это никому не надо. Это система унижения.

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

Вот как раз NEC 286 относительно легко устанавливался ,там только 1 или 2 дорожки чуть переделать нужно было , за этой микросхемой гонялись.Я уже не помню по какой причине NEC понадобилась программно совместимый с 286 чипом микросхема которая по контактам подходила к 8086.Конечно быстродействие было не ахти и составляло от 50 до 75% от оригинального 286.
Я точный индекс микросхемы не помню.

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

А там не требовалось быстродействия...

Нда? Флоппи диск - конечный автомат. Там нет никаких буферов, ничего. С какой скоростью летят данные с головы, с какой их и надо забирать. Скорость DD диска - 250 kbps, HD - 500 kbps. 500 kbps компьютеры уровня 8 bit, младших 16 бит - не могут. Это неоднократно подсчитано. Единственный выход - DMA, но на Спектрумах никакого DMA не было в помине. На PC - сложный вопрос. Несмотря на то, что шина позволяла, я вроде как читал интервью Билла Гейтса (сейчас уже не припомню детали). Он говорил, что DMA в драйверах Floppy не использовали, потому что было огромное количество дешёвых китайских контроллеров, в которых DMA реализовано не было. Из-за совместимости со всем этим, решено было просто на DMA забить. Отсюда, кстати, этот анекдот-легенда про многозадачность. «Сейчас, только дискету доформатирую». Флоппи драйвер получил DMA чуть-ли не в Windows 2000 только, до этого только PIO было.

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

Графику Турбо Вижон не поддерживал

На 286 абсолютное большинство софта работало в текстовом режиме вообще-то. Потому что в графическом режиме была или слишком медленная отрисовка, или слишком низкое разрешение.

ставишь таргет DOS 32 bit extender

И получаешь полную неработоспособность своей программы на 286. При том что именно компы с 286 процом были основными во всех организациях (дома иметь такой комп было не реально потому что в 1991 году он стоит 47 тыс советских доинфляционных рублей). И да, я знал сколько стоил комп за которым тогда работал и писал код под дос-экстендер от PharLap, который один из немногих умел работать И на 286 И на 386 без какого либо изменения кода и перекомпиляции программы. Сишный компилятор у меня был Microsoft C 5.10, библиотека интерфейса (текстового) - CScape 3.2 от Oakland Group.

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

не обязательно денежные - скорее убедительные

us dod-у нужно, кому же еще, а они и денежные и суперубедительные. Там по отдельным просачивающимся сведениям целый параллельный мир компьютерных систем

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

Быстродействия _не_ хватало. И я - прав. Теоретически, можно было наверное найти Z80, работающий на 14 Mhz, разогнать. Турбировать ВГ93. Тогда, скорее всего, прочитается. Только это не работа. Это, первых, дикий хак, а не Спектрум, во-вторых, нормальные дискеты работать не будут. А вообще, ВГ93, нормально, не читает HD дискеты, никак. У неё выхода такого нет.

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

Не забывайте что часть операций ВГ93 обеспечивал не зависимо от процессора. На некоторых моделях спектрума с 1.44 дискетами проблем в основном не было - пример ATM Turbo2+.
На другим можно было «протурбировать» дисковод и тоже нормально всё читалось.
И вообще на позднем ATM и скорпионе был контроллер ide и народ умудрился жёсткие подключать.

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

Нда?

Да.

Флоппи диск - конечный автомат.

Бред какой-то...

Там нет никаких буферов, ничего. С какой скоростью летят данные с головы, с какой их и надо забирать. Скорость DD диска - 250 kbps, HD - 500 kbps. 500 kbps компьютеры уровня 8 bit, младших 16 бит - не могут. Это неоднократно подсчитано.

Мда... А про микросхемы - контроллеры НГМД тебе не рассказали?.. ;)

Про FD1793 компании Western Digital или её отечественный аналог КР1818ВГ93 - не, не слышал?.. ;))

Или, в твоём представлении, процессор «Спектрума» «напрямую» с дисководом работал?? ;D

Единственный выход - DMA, но на Спектрумах никакого DMA не было в помине.

Не было. Ни к чему он там....

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

Приведи в пример «не мусор» для текстового интерфейса в середине 90х…

C-scape 3.2 Copyright (c) 1990, Oakland Group, Inc.

Я эту штуку купил, за свои деньги, в 1992 году в Твери в коммерческой фирме. Специально ездил туда на поезде.

Потом написал биндинги для этой библиотеки к компилятору Meridian ADA. И на этом писал программы на заказ.

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

был контроллер ide

Ну, там контроллер в каждом HDD был, а компы просто работали с его параллельной (и довольно медленной) шиной...

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

Мда... А про микросхемы - контроллеры НГМД тебе не рассказали?.. ;)

И там не было никаких буферов, представь себе.

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

И там не было никаких буферов, представь себе.

Я не только представляю, я с этими «Спектрумами» ( отечественными «клонами») работал...

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

Не работал ты ни с чем. Ну, и какой размер буфера в ВГ93? Как в неё передать сигнал готовности к приёму следущего байта?

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

будь обще распространёная апаратная защита объектов код писали бы ёще более низкокачественно - ибо если чё железка защитит :)

При наличии аппаратной защиты низкокачестенный код просто бы НЕ РАБОТАЛ. И это вынудило бы повышать его качество.

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

Не забывайте что часть операций ВГ93 обеспечивал не зависимо от процессора

Обратной связи ВГ93 не обеспечивала, с какой скоростью данные идут, с такой их и надо читать. Всё что делала ВГ93 - расшифровывала MFM поток. MFM биты превращала в байты. Всё.

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

это вроде закончилось утилитой 800

Залезая в порты контроллера можно добавить на дорожку нестандартный сектор который не то что 800 не скопирует, но и даже не все специальные копировщики которые под дос существовали против таких хитрый как я :) А 800 (и pu1700) это скорее для увеличения емкости рабочих (не архивных!) дискет и для оптимизации расположения секторов на них в целях повышения скорости чтения (interleaving).

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

IDE, Ethernet и пр. в Cпектруме - абсолютная чушь. Это ставится FPGA минимум из 2000-х, которая всё делает, а Спектрум там что-то вроде терминала.

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

В собственно самих процессорах - может быть да. А так в целом компы очень качественно делались, начиная прямо с толщины металла корпусов и надежности блоков питания. Я именно про времена 8086 и 80286 говорю. Меня удивляло применение толстого железа в корпусах, где хватило бы дешевого пластика.

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

Nec не призводил таких процессоров. В сад.

Мда NEC V30 . Правда говорят что всё-таки они не полноценные 286 а ближе к 186 серии.

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

Которые боролись с хитрожопым форматом с помощью fdr

fdr и распространился несколько позже и далеко не все хитрожопые форматы умел читать. Хотя понятно что со временем любые средства защиты теряют эффективность.

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

мужчины не умели копировать диски теледиском

Теледиск вообще мало какие «хитрожопости» скопировать может. Вышеупомянутый fdr может намного больше. Но он и появился позже и был куда менее распространен.

Не копируемая защита дискет возможна только физической порчей дискеты (и головок).

Теоретически да. А практически хватало программных извращений чтобы сбить с толку наиболее известные предприимчивым кооператорам копировщики.

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

NEC V30 - 8086.


Собственный набор инструкций V30 включает все инструкции 8086/8088, новые инструкции микропроцессора 80186/80188, а также уникальные для V30 инструкции — обработку битов, упакованные инструкции BCD и специальные инструкции для переключения процессора в режим эмуляции 8080 и обратно.

https://pikabu.ru/story/retrokompyuting_poisk2_pc_xt_na_baze_8086_ili_nev_v30...

Уже умелец сам поставил на поиск-2 Nec v30 и обнаружил баг с текстовым режимом - каждый 2 символ проподал .Выяснилось что куча команд NEC выполняет аппаратно и очень быстро,пришлось править Биос.

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

к кому уходить» от Micrichip

А я в своих поделках так и продолжаю чаще всего использовать Atmega. Потому что для него есть уникальное средство отладки - визуальный симулятор VMLAB. Более высокая производительность вышеупомянутых мной китайских клонов stm32 в радиолюбительских поделках нужна очень редко. А вот сложность отладки на них очень намного выше потому что такого удобного симулятора нет(или он неизвестен радиолюбительскому сообществу).

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

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

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

с каких пор DOSBox работает с физическими устройствами?

Можно было предоставить доступ к lpt и дисководу.Требовалось шаманство со стороны операционнок - что под Xp что под linux .Могли убрать из за причин безопасности.Там ещё был виртуальная сетевая карта которая делала тунель ipx и tcp - можно было поиграть в игры по сети.

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

А я в 90х кормился как ни странно написанием кода. Это потом уже мои умения стали никому не нужны когда пошла мода на обязательное применение всяких ультра-сложных монстрообразных фреймворков.

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

А мне всего-то старые дискеты бы «разок глянуть»…

Я бы помог, но до моего места обитания очень уж сложно добираться.

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

Ты же понимаешь, что таким образом дисковод можно сломать.

Теоретически понимаю, а вот на практике ни одного «программно» сломанного дисковода не видел.

Я замечал, что дискеты на 800 читаются прям сильно хуже, чем на 720.

Так это не для длительного хранения на 800 форматировали, а когда дискета использовалась в качестве рабочего носителя на компе без hdd. Ну или для переноса каких-то объемных данных если дискет не хватало. Если какая-то из пачки не прочитается - можно и еще раз сходить ее записать.

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

Теледиск может скопировать всё, что ты можешь только вообразить. Вот ничего ты не можешь предпринять против команды «чтение дорожки». The READ TRACK command is a legacy instruction used in floppy disk controllers (like the Intel 8272 and compatible chips) to read the entire contents of a disk track. It reads the continuous raw data (including all headers and gaps) rather than isolated sectors Что ты против этого сделаешь? Что? Тупо читает всё от одного синхроимпульса до другого. С доступностью этой программы наверное были проблемы, наверное. А разрабатывается эта программа с середины 80-х. В принципе, хороший барыга мог нанять специалиста, который примерно такое написать может, без няшного интрефейса.

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

Извините, не увидел ответа , так бы не повторялся.
Но насчёт защищённого режима 186 процессора тут есть вопросики .Давно читал что есть ревизия 186 процессора где была неудачная попытка включения защищённого режима, там оказались аппаратные баги и быстро обратно режим заблокировали.

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

А я читал про архиерея Петра и деву Фёклу, которые ваши биткойны силой мысли ломают. Иди в сад. С таким уровнем аргументации.

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

решено было просто на DMA забить.

Во времена ДОС и жесткие диски через PIO работали - потому ходил миф что на каких-то древних вариантах IBM PC программный обмен работал быстрее аппаратного через dma. И поэтому на дешевых «мультикартах» контакты запроса dma в интерфейсе ide были не выведены на разъем ISA. Если припаять пару перемычек можно было заставить работать. Хотя в глубоко однозадачном досе от этого было мало смысла. А вот те кто пользовался OS/2 на первых 386 - иногда паяли и диск в dma запускали.

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

Не работал ты ни с чем

Тебе, разумеется, лучше знать... Тем более, ты уже, если я правильно вас сосчитал, третий такой тут «знаток меня»... :)

Ну, и какой размер буфера в ВГ93? Как в неё передать сигнал готовности к приёму следущего байта?

Сам читай. Есть даташит на микросхему контроллера, и наверняка до сих пор можно найти в сети достаточно готовых схем контроллеров дисковода (плат) с описаниями их работы. А мне тебя обучать неинтересно, тем более, что за четверть века и сам многое подзабыл за ненадобностью.

А тысячи и десятки тысяч пользователей «Спектрумов» с дисководами, которые, если верить тебе, «не работают», передают тебе привет и приветственно машут... оттопыренным средним пальцем руки... :)))

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

А я в 90х кормился как ни странно написанием кода

Было и это... Хватался за всё, что умел и мог, и за что платили «живыми» деньгами...

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

Я бы помог, но до моего места обитания очень уж сложно добираться.

Спасибо, но от нас, с юга Приморья, куда угодно добираться непросто... :)))

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

Тебе, разумеется, лучше знать...

А это очень легко читается из твоих высказываний. То, что ты несешь, с таким самоуверенным видом - никак не может быть, что ты с этим хоть как-то работал.

Сам читай. Есть даташит на микросхему контроллера

Товарищ, во-первых, я это не только читал, я писал эмулятор этого, и он работает. Во-творых, тебя в институте не учили, что бремя доказательства лежит на утверждающем? Не? Нет в BГ93 никакого буфера, если не считать 1-байтого регистра, и обратной связи при чтении данных нет. И в даташите нет таких слов, и быть не может. Потому что нет. Буфера.

А тысячи и десятки тысяч пользователей «Спектрумов» с дисководами, которые, если верить тебе, «не работают»

Настоящих пользователей железного Спектрума, которые свою машину хотя бы включают, осталось человек 10 на страну, включая меня. Я не беру в расчёт новомодные шарманки на FPGA, которые также валяются на полках и включаются примерно никогда. Так кто и где тебе сказал, что прочитал HD Floppy на Синклере? Пруф будет, или опять привидилось? Турбирование BГ93 - это я так написал, что оно вроде просто. На деле - попробуй. Это надо производителей знать, изделия которых турбировались, может даже партии. Нет, официально, никакого турбирования, это хак.

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

И дисководы есть, во всяком случае у меня.

Ээээммм?? ;)

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

Тут надо страницу с данными делать неисполняемой.

И судя по количеству таких эксплойтов - этого примерно никто не делает. И ОС по умолчанию тоже не делает. И допускает передачу управления в произвольное место в пределах всего адресного пространства процесса.

выглядит не как проблема страничной организации памяти, не?

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

надежности блоков питания

Не соглашусь, изоляция на трансформаторах и дросселях высыхала и крошилась чуть не в пыль. Лак осыпался.

начиная прямо с толщины металла корпусов

А вот тут дааа )
Миллиметра по три-четыре, что наши, что ГДРовские. С современными, что тоньше консервной банки, не сравнить!

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