8086 компьютер своими руками

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

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

Intel 8086 - первый 16-ти битный микропроцессор, разрабатывавшийся с весны 1976 года и выпущенный двумя годами позже 8 июня. Он открыл нам великий и ужасный одновременно мир x86 архитектуры комманд.

Отец, дед, прадед

intel 8086 был не первым процессором компании, первым был его прадед intel 4004, 4-х битный монстр на частоте 500-700 килогерц. В 1969 году к руководству компании постучался выдающийся электротехник Тед Хофф и сказал: "Господа, для каждого компьютера, что мы создаём, нам приходится заново прорабатывать всю логику его работы используя интегральные микросхемы, почему бы нам базовый набор операций не засунуть в одну интегральную схему и использовать её, вместо россыпи электроники?" Так родилась идея об однокристальном процессоре, который мог бы выполнять большинство математических операций без постоянной переработки схем для каждого компьютера.

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

Сын выстрелил

Ну не то чтобы выстрелил. Ну такое. Прорывная технология, которая оказалась особо никому не нужна из-за. Барабанная дробь. Несовместимости старого ПО и дороговизны.

  • Тактовая частота: от 4 до 16 МГц
  • производительность:
  • 5 МГц (модель 8086), при частоте 4,77 МГц ( IBM PC ) — 0,33 MIPS
  • 8 МГц (модель 8086-2 — 0,66 MIPS)
  • 10 МГц (модель 8086-1 — 0,75 MIPS)
  • Приблизительные затраты времени на операции, процессорных циклов (EA — время, необходимое для расчёта эффективного адреса памяти, которое варьируется от 5 до 12 циклов):
  • Суммирование: 3—4 (регистровое), (9—25) +EA — при операциях с памятью
  • Умножение без знака: 70—118 (регистровое), (76—139) +EA — при операциях с памятью
  • Умножение знаковое: 80—154 (регистровое), (86—160) +EA — при операциях с памятью
  • Деление без знака: 80—162 (регистровое), (86—168) +EA — при операциях с памятью
  • Деление знаковое: 101—184 (регистровое), (107—190) +EA — при операциях с памятью
  • Перемещение данных: 2 (между регистрами), (8—14) +EA — при операциях с памятью
  • Разрядность регистров : 16 бит
  • Разрядность шины данных : 16 бит
  • Разрядность шины адреса : 20 бит
  • Объём адресуемой памяти: 1 Мбайт
  • Адресное пространство I/O: 64 Кбайт
  • Количество транзисторов: 29 000
  • Техпроцесс: 3000 нм (3 мкм)
  • Площадь кристалла: ~30 мм2 (по другим данным, 16 мм2)
  • Максимальное тепловыделение корпуса: 1,75 Вт (фактическое потребление — 0,65 Вт)
  • Напряжение питания: +5 В
  • Разъём: DIP-40
  • Корпус: 40-контактный керамический или пластиковый DIP , позже — 56-контактный QFP и 44-контактный PLCC
  • Поддерживаемые технологии: 98 инструкций
  • Объём очереди команд: 6 байт (кэш-буфер команд)

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

Но внук-то хотя бы выстрелил?

Вступление к посту.
Изначально я не хотел разбивать статью на несколько частей, ограничившись одним подробным постом только по окончанию работы. Но обстоятельства вынуждают меня переключиться на другую задачу, так что я решил просто сбросить сюда информацию о том, что уже сделано, иначе наверняка что-то забуду (это не учитывая того, что я УЖЕ забыл).
К тому же объём информации предполагается таким, что его всё равно лучше разбить на несколько частей.
Наслаждайтесь!
Немногим ранее я рассказал о том, как меня увлекло проектирование логических схем в программе Logisim. Потренировавшись на простых схемах, я решил разработать процессор. И чтобы всё по настоящему, с исполнением машинного кода и полнотой Тьюринга.
Для тех, кто не в теме - краткий ликбез. Процессор в электронике - устройство, которому на вход подаются команды и, иногда, их параметры (как правило, закодированные последовательностью битов), на выходе получаются результаты выполнения этих команд над этими данными. Пример простейшего процессора - схема, выполняющая инкремент/декремент поданного на вход значения в зависимости от наличия сигнала на другом входе.
Полнота Тьюринга - свойство исполнителя (т.е. того же процессора) вычислять результат абсолютно любой вычислимой функции. То есть даже простейший тьюринг-полный процессор (если ему предоставить ресурс в виде бесконечной памяти) способен посчитать всё не хуже каких-нибудь пентиумов - только, скорее всего, программа будет сложнее, а исполнение займёт больше шагов. Пример того самого тьюринг-полного процессора - машина Тьюринга, придуманная знаменитым английским пидорасом великим английским математиком Аланом Тьюрингом; дабы не сверзиться в пучину всяких теорий вычислимости отправлю вас в Википедию. Впрочем, если вы пропустите этот момент - ничего страшного не случится, надеюсь - я обещаю писать так, чтобы понятно было даже человеку, далёкому от IT (но людям, знакомым с информатикой понять будет легче).

Началу проектирования в Logisim предшествовали обширные прикидки логики на бумаге. Нужно было решить следующие вопросы:
- Разрядность процессора.
- Набор команд.
- Архитектура.
- Порядок следования данных (big-endian или little-endian).
- и ещё куча всего, что просто не приходило сразу в голову.

Сначала я хотел делать четырёхбитный процессор, который, в принципе, покрывал бы ту же машину Тюринга: ну а то, четырёх бит достаточно для операций из 16 команд над алфавитом в 15 символов + 0!
Но я хотел сделать не простенькую игрушку, а что-то, работающее с архитектурой фон Неймана.

И снова ликбез.
Большинство современных компьютеров реализуют именно архитектуру фон Неймана. В ней программа (набор команд) хранится там же, где и данные, которые программа (вернее, процессор, эту команду исполняющий) обрабатывает. То есть программа сама должна определять, где у неё код, а где - данные, и что из этого и в каком виде надо скармливать процессору. Эта архитектура гибкая (например, программа может сама менять свой код) и просто реализуемая, но, при этом, подвержена ошибкам, вроде переполнения буфера (одна программа бесконтрольно пишет много данных, они не умещаются в отведённый участок памяти, залезают в код другой программы, которая, при выполнении вылетает - или запускает чужой код).
А есть ещё Гарвардская архитектура, в ней код и данные хранятся раздельно. Представьте, что у вас в компе две отдельных устройства ОЗУ, которые друг с другом не взаимодействуют и не пересекаются. И когда программа запускается, её исполняемый код грузится в одно устройство, а данные, с которыми она работает - в другую. Там уже никаких переполнений буфера (по крайней мере, они не должны быть так тривиальны, как в фон Неймане), да и исполнение происходит быстрее (процессору не нужно ждать данных, следующих за инструкцией, они всегда доступны на одном из устройств) - но с гибкостью там никак, да и по реализации она сложнее в несколько раз, в зависимости от подхода. Тем не менее, эта архитектура используется во встраиваемых устройствах, где скорость и надёжность важны, а гибкость - нет.

Реализовать четырёхбитный процессор с архитектурой фон Неймана, конечно, можно. Но возникает слишком уж много ограничений.
Например, если принять, что размер команды равен размеру данных (т.е. тем же четырём битам), то получаем ограничение в 16 инструкций, из которых только минимальный набор инструкций для работы с памятью займёт половину. Затем, процессор должен определить, что обозначают данные, которые ему передали. Константу? Номер регистра? Адрес в памяти? То есть после команды ещё должно быть что-то вроде маркера типа данных - а это ещё по два бита на параметр. И, наконец, четыре бита ограничивают максимально адресуемую память всего 64 байтами (16 адресов по 4 бита).
Всё это решаемо. Можно, например, разграничить размер машинного слова: командное слово считать равным восьми битам, а команды брать четырёхбитные. И адреса тоже брать не четырёхбитные, а восьмибитные. И ещё маркеры типов данных куда-нить пристроить. И дрючиться, высчитывая смещения в памяти, вместо работы с аккуратными идентичными последовательностями.
Но почему бы сразу не сделать восемь бит, благо в Logisim разрядность элементов переключается на лету? На сём и остановился.
Кстати, первый процессор от Intel 4004, хоть и был четырёхбитным, мог адресовать 640 байт памяти, а команд в нём было аж 46. Впрочем, это достигалось тем, что он, как раз, был построен по Гарвардской архитектуре - там с этим проще.

С набором команд тоже пришлось подумать. Делать много команд - усложнять разработку процессора, делать мало команд - усложнять разработку под процессор. Так что я исходил из того, что нужно реализовать самые основные, а потом, по мере необходимости, добавлять остальные.
Затем я посмотрел, с чем будут работать команды. Что будет в моём процессоре:
- Восемь восьмибитных регистров, от A до H (один из которых флаговый, один - адресный, остальные пока решено сделать регистрами общего назначения).
- Память (восьмибитный процессор адресует 256 адресов по восемь бит - итого аж два килобайта).
- Отдельный стек (об этом ниже).
- Ну и просто числа (константы).
Изначально - четыре типа данных, на перечисление которых нужно два бита. Если у каждой команды по два параметра (например, MOV A,B), то получается, что нужно засунуть набор "команда"+4 бита в пространство, кратное восьми битам. Брать шестнадцать бит - несколько избыточно, восемь - как-то маловато (четыре бита на команду - не от этого ли я хотел убежать?).
Но, тем не менее, я выбрал именно восьмибитный размер опкода. Я рассудил так: вряд ли меня хватит для реализации более чем 16 полноценных команд. А если хватит - расширить размер опкода можно будет без проблем.


На правах пятницы.
Как неофит, решил определить свою принадлежность к квартам. С женой всё понятно, она врач, ей прямой путь в первуху. Со мной оказалось сложнее.
Я умудрился найти себя во всех четырёх ипостасях. Не, я вообще привык, что со мной постоянно происходит какая то фигня. По этому, если у Вас найдётся время, может проясните куда мне себя засунуть (каламбур без мата, простите).
И в шутку и серьёзно, я опишу своё "эпохальное" продвижение по закоулкам времени, а к Вам огромная просьба, если не сложно, определить квадру чебурашки (Вашего покорного слуги).
Поехали.
Вдруг пригодится. Время рождения 19 января 1966 года примерно в 19 вечера. Ленинград.
И так. Будучи школьником и студентом больше тяготел к спорту, хотя проявил способности в точных науках и имел призовые места в олимпиадах по химии, математике, программированию. Был душой коллектива, играл на гитаре, пел песни, в том числе которые сам сочинял. Вроде первуха, но.
Наступил 1990 год и Ваш покорный слуга год отработав после распределения после ЛТИ им Ленсовета снова сел за учебники и освоил цифровую технику настолько, что сам спаял свой первый компьютер Sinclair, будь он неладен, ZX Spectrum и его сам отладил. И внезапно выяснилось, что купив микросхемы и печатную плату, спаяв и отладив сей набор, его можно продать на радиорынке получив гешефт 150 рублей. А это больше чем месячная зарплата инженера в те времена. А если ещё докупить корпус с клавиатурой и сделать уже окончательный продукт, то можно добавить ещё 100 рублей. Не говоря уже о сервисе, который стоит денег, 50 рублей – это подключение к телевизору. И через год, это было уже производство состоящее из 10 монтажниц (со Светланы), отладчика, управляющего, и 5 близких человек, которые покупали у меня платы собирали из них игровые компьютеры и продавали их на рынке, сначала на Краснопутиловской, потом на Юноне. Вроде это чистая трёшка.
Лафа закончилась в 1994 когда рынок заполонили компьютеры 8086 с помоек Европы. Я закончил предыдущий бизнес и устроился "хорошим человеком" в некую фирму которая торговала "всем", как было принято в те времена. Там было компьютерное направление, которое я быстро подмял под себя, и ноунейм менеджера шустро поднялся, до начальника отдела закупок, потом до финансового директора, потом взял оперативное управление конторой в свои руки. Когда контора выросла до 25 млн $ оборота в год и обзавелась 3 филиалами в разных городах, управление превратилось в подобие диктата. Того требовали обстоятельства, и я с лёгкостью нагибал подчинённых во благо великой идеи. Вроде это вторая квадра.
Но годы шли, я старел и уставал. Я ушёл из бизнеса оставив его другим. Как показала практика – это было правильное решение, так как некий Юлмарт начал торговать в убыток, и имея безумное финансирование, он торговал в убыток долго, и перед тем как сдохнуть вынес с компьютерного рынка почти все конторы, которые не смогли найти свою нишу.
Я же свою нишу нашёл, и ушёл проектировщиком и закупёром (закупками занимался) к своему любимому клиенту. Мы делали летные тренажёры Ил, Ту, Боингов, Аирбасов. Делали тренажёры диспетчеров аэропортов. Я сам проектировал, закупал и собирал всё железо, и такой радости от работы я не испытывал никогда. Это созидание которое доверили мне. Но всё не вечно под луною, гос. контракт закончился, и я уволился, бо сидеть и получать зарплату за то что ничего не делаешь это не для меня. Это вроде тоже трёшка.
Дальше у меня был некий период, когда я не работал. Была куча времени. Я взял "топор пилу и молоток" и сделал кучу сараев, бань, беседок. Сделал ремонт в квартире. Готовил еду в семье. В общем развлекался простыми забавами 4 квадры. Это было года 3-4.
Дальше знакомые позвали в солидную госконтору наладить работу некой базы данных. Странно звучит, но контора (профиль ремонт автомобилей) купила БД и 2 года не могла её заставить работать. Я впрягся, снова сел за учебники и за пол года навёл порядок, заодно стал крутым специалистом по SQL и Excel. Вроде опять первуха, не?
Александр Эрдимтович, очень интересно что Вы думаете, к какой квадре я отношусь.
ЗЫ. Пятница сегодня и посты такие.

Как рождались легенды

Intel 8086/8088 и архитектура x86

Процессор Intel 8086

Разработка 8086 была поручена инженеру Стивену Морсу, который скомпилировал основные спецификации процессора и его архитектуры к середине лета 1976 года. Еще два года понадобилось Intel для его создания. И вот 8 июня 1978 года кристалл 8086 был официально анонсирован.

Intel 8086 был примерно в 10 раз быстрее, чем модель с индексом 8080. Процессор стал первой реализацией системы команд x86 и одноименной архитектуры, которая впоследствии стала своего рода стандартом и используется в кристаллах AMD и Intel по сей день.

Процессор Intel 8088

Разработка компьютера 5150 имела огромное значение для компании IBM. Во второй половине 1970-х годов рынок персональных десктопов активно развивался, а IBM уделяла этому сегменту недостаточно внимания. Само собой, в компании осознавали всю его перспективность, в связи с чем и было принято решение о разработке собственной модели ЭВМ.

IBM 5150 — первая модель линейки IBM PC — увидела свет в 1981 году. Топовая версия компьютера оценивалась в 3005 долларов США. Она комплектовалась процессором Intel 8088 с частотой 4,77 МГц, а объем оперативной памяти составлял 64 Кбайт. В качестве устройства для хранения данных в IBM 5150 использовались 5,25-дюймовые дискеты. А несколько позже в продаже появились модели компьютера, которые позволяли использовать аудиокассеты как хранилище данных. Установить жесткий диск в систему было невозможно, однако спустя некоторое время IBM выпустила винчестер, который подключался к 5150 в качестве модуля расширения. Компьютер обладал несколькими портами расширения, через которые, кроме винчестера, подключались видеоадаптеры, карты с портами ввода-вывода и другие устройства.

Читайте также: