68000
68000

Pacta sunt servanda.

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

Очень долго сомневался, стоит ли вообще дописывать этот пост. Качество первой части мне не очень нравилось (как будто в этот раз получится лучше), я допустил в ней энное количество фактических ошибок (не говоря уже горы запятых, тся/ться, "пару зарплату", то, что вместо "Lotus 1-2-3" я написал "Excel"...), да и не уверен, что хотя бы десяток человек дочитали ее до конца.

К сожалению, я не успел до конца ивента (я вот не понимаю, куда начало уходить всё время), поэтому пост опять пришлось обрезать на самом интересном месте. Во второй раз. Эта часть посвящена истории процессора 68000 и архитектуры m68K - гораздо более совершенной, удобной и приятной, чем реальный режим x86. Сердцу ключевых 16 и 32-битных компьютеров середины-конца 80х, конкурировавших с IBM-PC. Но убить x86 и IBM-PC ей было не суждено.

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

Список источников будет в конце поста.

Свет. Камера. Мотор. Начали!

Со звуком

Motorola 68000

Рассказ был бы неполным без этого процессора.

6800, 6501 и 6502

1974. Выходит Motorola 6800. На полгода позже i8080, использует устаревшую технологию, имеет огромный процент брака (90%) и изначально не продается в розницу. Не взлетело. Восьмеро инженеров, предлагавших здравые идеи об упрощении и удешевлении чипа, сбежали нафиг из Motorola после просьбы прекратить и воздержаться. Один из них опрометчиво прихватил с собой кучку документов.

x86 2: m68K

Свой приют они нашли в маленькой, но перспективной компании MOS Technology, занимавшейся выпуском чипов для калькуляторов и однокристального понга для целей Atari.

Задачей было создать процессор, который будет проще, быстрее и многократно дешевле 6800.

Одной из проблем 6800 было то, что для производства применялись контактная литография и маски, которые физически касались фоторезиста при производстве каждой пластины. При этом часть фоторезиста имела свойство налипать на маску после засвечивания каждой пластины, из-за чего подлетал процент брака, а спустя десяток применений она полностью приходила в негодность. Процент выхода годных чипов едва достигал 10%.

В MOS перестали чистить ружье кирпичом начали использовать линзу, которая фокусировала ультрафиолетовую проекцию на фоторезист, а сама маска более ни с чем не соприкасалось. Маски стали служить в сотни раз дольше, а процент годных чипов взлетел до 70%. Если 6800 с учетом затрат на отбраковку стоил $300, то по новой технологии он будет стоить всего $40. К тому же это позволило дешевле и быстрее вносить правки в дизайн, так как более не требовалось тратить огромные бабки на оптовую закупку масок из-за каждого исправления.

Помимо этого, новый чип был значительно упрощен, уменьшен (что позволило еще сильнее снизить брак и повысить количество чипов на пластине) и ускорен вдвое по сравнению с 6800.

Но это еще не всё. Использование долгоживущих масок позволяло MOS вручную исправлять их. Педивикия говорит, что с целью исправить найденные ошибки в дизайне (нереалистично), а в приложенном в качестве источника интервью говорится, что сравнивалось несколько масок, после чего отличающеюся детали (дефекты) ювелирно закрашивались для еще большего повышения выхода годных чипов. В сочетании со всеми остальными изменениями это повышало выход годных чипов с 10 до 100 на пластине.

x86 2: m68K
x86 2: m68K

Летом 1975 бывшие кенты Motorola представили 6501 - чип, совместимый с 6800 по выводам, но в десяток раз дешевле и вдвое быстрее, а также 6502, содержащий встроенный тактовый генератор. Полноценная демонстрация произошла в сентябре на шоу WESCON. Люд сомневался из-за странной цены и желтоватых обещаний, но заинтересовался. Intel и Motorola на том же шоу были вынуждены сбросить цены своей продукции до $180.

Motorola же такой зехер не оценила от слова совсем, засудив в ноябре новоявленных конкурентов за нарушение патентов и присвоение коммерческой тайны. Спустя 3 месяца судов у MOS начали заканчиваться деньги, поэтому пришлось пойти на мировую. У них нашли документ в количестве 1½ штука, отсудили 200 тысяч деняк, запретили производить 6501 и попросили документ назад. При этом сама Motorola была вынуждена снизить цену своего 6800 сначала до $70 в октябре, а к маю 1976 до $35.

6501 был мало кому нужен, ибо мало того, что сам 6800 не пользовался спросом, так еще и 6501 и не поддерживал высокоимпедансное состояние шины, необходимое для обвязки, желающей обращаться в память в обход процессора, и имел несовместимый набор инструкций. Лидер команды разработчиков 6502 впоследствии упомянул, что с 6501 просто хотели сделать «предупредительный выстрел» и посмотреть, что из этого получится. Цели предлагать использовать 6501 вместо 6800 не было. Реально 6501 никогда и не продавался.

Поэтому на этот запрет MOS было в целом плевать, так как еще до суда вышел 6502.

(На педивикии информация обратная. Якобы 6501 был предназначен для демонстрации возможностей процессора путем замены 6800 на него в уже готовых компьютерах, а из-за запрета на производство 6501 MOS был вынужден выпустить KIM-1 для тех же целей, но с использованием 6502. Из-за вышесказанного я в этом сомневаюсь).

6502 довольно быстро распробовали и он стал феерически успешным успехом феерично успешного успеха. Процессор использовали в официальном "демонстрационном" KIM-1 от самой MOS (самый дешевое, что могло существовать в то время, а потому популярное у доморощенных программистов), Apple I и II, Commodore PET/VIC-20 (первый компьютер с миллионным тиражом)/64 (самый продаваемый компьютер в мире), BBC Micro, Acorn Atom, Atari 800/2600/5200/7800/Lynx, NES ("Денди"), TurboGrafx-16 (с кастомным MMU для расширения памяти), "Агат", "Правец" и менее известных.

А если вы внимательно смотрели Терминатор, то в "виде от первого лица" Терминатора можно заметить листинг на ассемблере 6502. Бендер из Futurama тоже работает на 6502.

Про судьбу MOS и 6502

6502 был громадным успехом. Проблемой стал, насколько я понял, выход Texas Intstruments на рынок микрокалькуляторов примерно одновременно с выходом 6502, что привело к обрушению этого самого рынка. Это поставило в затруднительное положение MOS, потерявшую прежний рынок и вскоре начавшую стремительно худеть из-за суда, и Commodore, инвестировавший в калькуляторы огромный кус капитала.

Commodore смог получить новых инвестиций, а MOS уже в марте 1976 приближалась к точке невозврата.

2 версии событий сентября 1976:

1. Произошла странная внутренняя махинация в Commodore, в результате которой его основатель (Джек Трэмел, еврей до мозга костей) взял кредит у финансиста (Ирвинга Гуда) и каким-то образом вынудил небогатую MOS стать частью Commodore.

2. Commodore просто взяла и безо всяких фокусов выкупила на нью-йоркской бирже MOS с капитализацией на тот момент в 12 миллионов. Без подробностей. Опять таки, это версия от педивикии.

Факт в том, что эволюция 6502 после этого практически полностью заморозилась, хотя процессор использовался сразу в трех сверхуспешных ПК от Commodore, которые вышли после покупки MOS. Либо Трэмел поспособствовал, либо Гуд, либо команда инженеров просто не горела желанием работать на Commodore. Хрен его знай. В 1980 из Commodore свалил ключевой разработчик 6502, Чак Пэддл, но и до этого особых инноваций не было.

Еще один свалил незадолго до покупки MOS, создал Western Design Center и начал альтернативную ветвь развития 6502.

Да, Motorola отсудила N деняк и запретила прямого конкурента, но этого было лишь утешение. Деньги - брызги, когда тебя прилюдно поимели.

Месть Motorola, или Motorola наносит ответный удар

Продажи 6800 пробивали одно дно за другим, а в 1976, пошли слухи, что Intel собирается создать 16-битный i8080 (i8086), а Zilog - 16-битный Z80 (Z8000). Intel и Zilog являлись крайне серьезными конкурентами за кормушку. Это была очень опасная ситуация. Могли заживо сожрать и никакие 200 штук от MOS ситуацию бы не спасли.

Просто сделать хороший процессор было бы недостаточно, так как у конкурентов клиенты и имидж, а у Motorola - неприличное слово из 6 букв. Нужен был хит. Так, как получилось у MOS с 6502. Дешевле, быстрее и удобнее, чем у Intel. Догнать и перегнать!

Решили создавать домашний PDP-11 (в i8086 тоже можно отследить его идеи), а до кучи достичь миллиона инструкций в секунду и сделать его сразу "почти" 32-битным. "Почти" из-за того, что по 32 бита на шину адреса и данных потребуют 64 выводов (а еще нужно питание и управление), а DIP-корпуса такого размера были очень дорогими. Поэтому шину данных сделали 16-битной, а адреса - 24-битной, в итоге уложившись в 64 вывода.

Процессор получил внутреннее прозвище "Техасский таракан"
Процессор получил внутреннее прозвище "Техасский таракан"

Motorola 68000 (m68K) вышел в начале 1980, через 2 года после i8086, за 2 года до i80286 и за 5 лет до i80386, серьезно обогнав своё время.

  1. Процессор вычислителями не испортить, поэтому внутрь впихнули 1 полноценный АЛУ и целых 2 отдельных арифметических модуля для нужд косвенной адресации, но все три - 16-битные. Шина данных тоже 16-битная. Любые операции над 32-битными числами требуют нескольких тактов шины и проходов АЛУ.
  2. Сам набор инструкций был полностью 32-битным, в отличии от 16-битного x86. 
  3. Модель памяти сделали плоской и с 32-битными адресами. В x86 же сделали крайне неудобные сегменты ради облегчения портирования кода с i8080, использования 16-битных регистров как указателей при 20-битной шине адреса и возможности делать код перемещаемым без полноценного MMU.
  4. Шина адреса была 24 бита (16 мегабайт. Старшие 8 бит адреса были зарезервированы на будущее). У x86 шина была 20 бит (нереалистичный на тот момент и смехотворный позже 1 мегабайт).
  5. Универсальных регистров общего назначения нет. Вместо этого 8 абсолютно равноправных регистров данных (D0-D7) и 8 регистров адреса (A0-A7). Первые для вычислений, вторые для косвенной адресации. Разделение было сделано с целью сократить общее количество инструкций так, чтобы это не сильно ударило по программированию и производительности. Последний регистр адреса используется как вершина стека (основания стека не хранилось).

    Это в 2-4 раза больше, чем у x86. И хотя регистры x86 могут использоваться и как адрес в косвенной адресации, и как операнд вычислений, они имеют свои имена и далеко не во всех случаях взаимозаменяемы (AX - аккумулятор, BX - база (часто используется для адресов), CX - счетчик и DX - IO/расширение аккумулятора (адрес ввода-вывода и для 32-битного умножения и деления). Но есть 4 еще более ограниченных регистра.
  6. Одна из вещей, которой не хватало в i8086 - защита. Архитектура m68K с самого начала создавалась как уменьшенная альтернатива ныне вымершей ветви эволюции - миникомпьютерам, а конкретно PDP-11, поэтому унаследовала эту особенность. Предусмотрено 2 режима: супервизор и пользовательский. В пользовательском режиме запрещены любые опасные инструкции, а еще у них раздельные регистры стека (имя одно (A7), но физически это USP у пользователя и ISP у супервизора).

    Но было в защите 2 серьезные недоработки: одна относительно опасная инструкция была доступна в пользовательском режиме (запись регистра флагов в память, что позволяет узнать флаги, доступные только супервизору) и невозможность реализовать виртуальную памяти (MMU). При ошибке доступа по шине срабатывает исключение, но вот процессор при вызове прерывания-обработчика не сохраняет достаточно информации, чтобы возможно было вернуться к последней инструкции. Обе были исправлены в Motorola 68010. Инструкция стала доступна только из режима супервизора, а при срабатывании исключения на стек супервизора стала сохраняться полная информация об выполняемой на тот момент инструкции.

    Из-за последнего факта защита была толком бесполезна, так как в чем смысл ограничивать опасные инструкции, если можно беспрепятственно записать свой шеллкод прямо в код ядра ОС?

Из-за 16-битной шины данных и 16-битных арифметических устройств процессор нельзя назвать на 100% 32-битным, но даже на фоне i80286 он выигрывал в архитектурном плане (за тем лишь исключением, что в i80286 был встроен полноценный MMU).

Успех

Успех был колоссален. Уже к началу 1981 (а в розницу процессор поступил в ноябре 1980) продали... а хрен его знай сколько процессоров. Известно, что очень много.

UNIX

Процессор был не только очень прост и удобен в программирования. Он оказался очень близок к PDP-11, на котором зародился UNIX. У него плоское адресное пространство, отсутствуют выделенные порты ввода-вывода (устройства отображаются в память), присутствует инструкция TRAP, вызывающая прерывание (для реализации системных вызовов UNIX, ибо позволяет перевести процессор в режим супервизора и вызвать процедуру), 2 режима защищенности и много других особенностей.

Проблема с UNIX была 1 - отсутствие MMU. Как я уже написал выше, реализовать MMU для 68000 было практически невозможно. Единственным решением было использовать два 68000, которые работали со сдвигом на пол такта. Как только запасной (опережающий) натыкался на ошибку шины, то вызывал прерывание у главного (запаздывающего), чтобы тот мог безопасно пообщаться с MMU до получения ошибки, после чего перезапустить запасной. 68010 сделал возможным полноценно обработать ошибку без костылей, для 68020 вышел официальный внешний MMU, а 68030 сделал его встроенным.

Несмотря на это, m68K очень надолго стал крайне популярной архитектурой для рабочих станций с UNIX.

Применения

Первоначальную цену я нагуглить не смог, но если верить этой газетной вырезке, то самые первые экземпляры стоили существенные $450, постепенно упав до $125 оптом. В 1981 главный архитектор 68000 связался со Стивом Джобсом и предложил сотрудничество. Джобса цена не устроила и он заявил, что "настоящее будущее за этим продуктом, над которым я лично работаю (Apple Lisa, компьютера с невиданной диковинкой - GUI). Если вы хотите заниматься этим бизнесом, вы должны быть готовы продавать его по $15". Как минимум к 1984 оптовая стоимость 68000 действительно упала до $15, а Apple Lisa и линейка Macintosh до 1994 года использовала процессоры семейства m68K.

Помимо персоналок от Apple и множества рабочих станций, он использовался в Commodore Amiga и Atari ST, Sega Mega Drive/Mega-CD/Nomad, Neo Geo, Atari Jaguar, разнообразных игровых автоматах, калькуляторах Texas Instruments, КПК Palm и даже радиационно-защищенной подсистеме Спейс Шаттла.

Если в Sega Mega Drive был 68000, то что было в SNES?
Помните про 6502, сбежавшего инженера и Western Design Center? Так вот, WDC породил WDC65C816 - жуткого монстра, обратно-совместимого с улучшенным WDC65C02 и оригинальным 6502.
Вернули второй регистр-аккумулятор (B) от изначального Motorola 6800, но объединили его с главным аккумулятором (A) и получили 16-битный аккумулятор (C). Индексные регистры (X) и (Y) просто расширили до 16 бит. Быстрая нулевая страница, компенсирующая дефицит регистров у 6502, стала называться прямой и теперь выбирается регистром (DP). К указателю инструкции прилепили дополнительный 8-битный регистр (PB), расширяющий его до 24 бит. Немного расширили набор инструкций, добавили поддержку внешних сопроцессоров, но конкретно инструкций для работы с 16-битными словами не добавили. То, какой размер операндов будет у инструкций, определяется выставленным флагом в регистре флагов. Удобно!
И пока SNES уверенно побеждала в плане графики и музыки (просматриваются некоторые сходства с Amiga по возможностям сопроцессоров), процессор был как минимум гораздо удобнее, а то и мощнее в SMD, чем в SNES. И это несмотря на то, что консоль вышла через 2 года после SMD.
Использовалось это поделие только в SNES и Apple IIGS, остальные применения неинтересны. Интересно то, что он до сих пор продается и производится...
Atari 1040ST. Чуть более поздняя (1986) модель с мегабайтом ОЗУ. В плане мультимедиа был заметно слабее Amiga, но обладал несколькими MIDI-портами, из-за чего пользовался спросом среди музыкантов в качестве секвенсора. Первые версии Cubase работали именно на Atari ST.
Atari 1040ST. Чуть более поздняя (1986) модель с мегабайтом ОЗУ. В плане мультимедиа был заметно слабее Amiga, но обладал несколькими MIDI-портами, из-за чего пользовался спросом среди музыкантов в качестве секвенсора. Первые версии Cubase работали именно на Atari ST.
Знакомые рожи
Atari Inc. в результате видеоигрового кризиса 1983, который та сама и устроила, умудрилась просрать 538 миллионов баксов. Один интересный человек, увидев эти тухлые останки, решил выкупить их подразделение домашних ПК и преобразовать его в Atari Corporation. Этим человеком был Джек Трэмел, со свойственным ему скандалом покинувший Commodore незадолго до покупки Atari Inc.
Amiga 1000. Первый мультимедийный ПК.
Amiga 1000. Первый мультимедийный ПК.
Заметка про Amiga

При этом революционность Amiga невозможно переоценить. В 1985 она имела:

1. Полноценную графическую ОС с вытесняющей многозадачностью и управлением мышью.

2. Шину с Plug-And-Play.

3. Разрешение 320x200p-640x400i (320x256p-640x512i для PAL версий), честную 32-цветную графику без знакомест (из палитры в 4096 цветов), режим HAM, позволяющий с оговорками отображать одновременно все 4096 цветов, режим Halfbrite на 64 цвета (32 цвета из палитры и дополнительный бит, снижающий яркость вдвое).

4. Быстрый и очень гибкий блиттер для 2D-графики и сопроцессор Copper, синхронизированный со скан-линиями видеовыхода. Copper позволял в очень точные моменты времени копировать данные в выбранные регистры обвязки (в регистры видеочипа, например, тем самым позволяя менять палитру посреди кадра). Причем бесплатно для ЦП.

5. 4-канальный стереосемплер.

(И множество других вещей).

Для сравнения: первая винда появилась через несколько месяцев после первой Amiga. До 95 обладала кооперативной многозадачностью, когда любая программа, забывшая вызвать Yield() и передать управление другой, могла повесить всю систему. Уморительную малиновую палитру CGA можете нагуглить сами. EGA был лучше, но только 16 цветов из палитры в 64, не знал про режимы HAM и Halfbrite и имел меньшее разрешение. Никаких сопроцессоров не было, а самые базовые блиттеры в видеокартах были нестандартными и появились уже в 90х. Звук... ну в 1987 появился Covox, представляющий из себя максимально тупой ЦАП, для использования которого нужно было загрузить процессор на 100% микшированием звука и выдачей его в LPT-порт, а еще очень дорогой AdLib с FM-синтезом (субъективно красивым, но отсталым). Неплохой Sound Blaster (со встроенным AdLib и монофоническим восьмибитным ЦАП без семплера) появится только в 1989, а популярным станет через несколько лет. У Atari ST был AY-3 (1974), аналогичный буржуйскому варианту ZX Spectrum, а у Macintosh был встроенный самоходный Covox (с небольшим буфером).

Также были разработаны очень дешевые Genloc системы, синхронизирующие видеовыход со внешним сигналом, благодаря чему Amiga стала самым дешевым знакогенератором с возможностью вывода произвольной графики. Этим пользовались мелкие телеканалы и частные видеомонтажники. Телеигра Hugo (Позвоните Кузе) изначально использовала две Amiga 3000, например.

Cтереосемплер, встроенный в чип Paula, положил начало огромному направлению трекерной музыки. Уверен, что многие, кто играл в Unreal (включая UT99), Deus Ex, Bejeweled 1/2/3 или Baba is You даже не задумывались, что вся музыка в этих играх является трекерной (из того, что быстро вспомнил). Не говоря уже про огромное количество DOS и Amiga-игр. Или музыкантов, начавших свой творческий путь с трекеров (C418, Маркус Каарлонен (клавишник группы Poets of the Fall), Джон Вальтонен, или Peter Hajba (ХЗ как транслитерировать фамилию).

Обязательно напишу полноценный пост и переведу блог Impulse Tracker. И не раз. Весь сайт в труху. Но потом.

Amiga наравне с Commodore 64 до сих пор является ключевым элементом демосцены и присутствует на большинстве фестивалей и соревнований.

 Macintosh 128K
 Macintosh 128K

На первый взгляд список средненький, но на самом деле Macintosh, Amiga и ST занимали практически весь средний класс за исключением IBM-PC (но основной рынок еще долгое время оставался за дешевым 8-битными машинами).

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

Более того, именно 68000 должен был стать сердцем IBM-PC, а не i8088 (или же 68008 с восьмибитной шиной данных?). Должен был, но не стал, так как на тот момент еще не вышел в массовое производство. Кто знает, как бы выглядел современный мир? x86 вряд ли бы выплыл без помощи IBM-PC, а Motorola могла стать монополистом.

68020

x86 2: m68K

Несмотря на всё, процессор оставался во многом 16-битным. Это снижало производительность, так как для передачи 32 бит по 16-битной шине требовалось как минимум 2 такта шины, да и АЛУ требовалось обсчитывать числа в несколько проходов. Поэтому в 1985, примерно одновременно с i80386, была выпущена новая итерация архитектуры m68K - Motorola 68020.

Все АУ и шины стали 32-битными. Добавили еще один регистр стека для супервизора (MSP, отдельный от стека для обработчика прерываний) и кучку новых инструкций. Доработали поддержку MMU, выпустив официальный. Корпус пришлось сменить с DIP-64 на PGA-169. Процессор стал на 100% 32-битным и был готов конкурировать с Intel.

Сверхпопулярности не получил, так как был довольно дорог, а уже в 1986 началась разработка (в 1987 выпуск) 68030, который стал значительно быстрее и обладал встроенным MMU. 68040 получил встроенный FPU и должен был конкурировать с i80486.

Забвение

68060
68060

История m68K закончилась довольно печально. Последним процессором линейки стал 68060, вышедший в 1994 и конкурировавший с Pentium. В целочисленных операциях он мог быть даже быстрее, чем Pentium, но был серьезно медленнее в вычислениях с плавающей запятой. Длительное отсутствие и последующее дурное внутреннее устройство FPU было серьезной проблемой.

Кончина была неизбежна, так как кучка несовместимых между собой компьютеров более не могла конкурировать с миллионами совместимых клонов IBM-PC, в результате чего исчез ключевой рынок. На этот факт наложились многочисленные неудачные решения Motorola, влиявшие на стоимость и производительность процессоров.

Слишком сложные режимы косвенной адресации, затратное сохранение полной информацию о прогрессе выполнения инструкции при исключениях (вместо перезапуска инструкции с начала как в x86, что особенно остро влияет на работу MMU), неидеальная совместимость (к примеру, код для 68000, использующий ту самую незащищенную инструкцию, не мог работать на 68010. Хотя таких примеров больше).

Последний гвоздь забила Motorola, перебросив силы на серию 88000, повторившую успех 6800, и архитектуру PowerPC. Последняя засветится в маках, поздних Amiga, всякой всячине и всех консолях 7 поколения: Xbox 360, Playstation 3 и Nintendo Wii/Wii U.

Продолжение следует...

Ссылки

  • Статья, с которого была взята часть информации. Гораздо более полная и рассматривает некоторые вещи с другой стороны. Но не могу сказать, что я на 100% согласен в плане m68K.
  • Интервью с ключевым архитектором 6502.
  • Сопроцессор Copper из Amiga.
  • Педивикию можете нагуглить сами. Использовалась английская версия.
  • Интервью с командой разработчиков 68000.
  • Обоснование нежизнеспособности m68K