[Из песочницы] Эмоциональная история процессоров для первых компьютеров с 70-х до начала 90-х

Мне довелось программировать на ассемблерах разных процессоров. Последний в списке — это Xilinx MicroBlaze. Решил выложить некоторые свои наблюдения за особенностями этих почти волшебных железок, которые как волшебный ключик Буратино открыли нам двери в волшебную страну виртуальной реальности и массовой креативности. Об особенностях современных систем x86, x86–64, ARM, ARM-64 и т.п. писать не буду, может быть в другой раз — тема очень большая и сложная. Поэтому планирую закончить на Intel 80486 и Motorola 68040. Хотелось ещё включить в обзор IBM/370, с которыми имел дело. Эти системы были довольно далеки от широких масс пользователей, но оказали при этом огромное влияние на компьютерные технологии. На них просто не хватило выделенного на тему времени, они не использовали процессоры-чипы и самих их вроде бы почему-то не осталось совсем. Очень надеюсь, что мои материалы привлекут внимание и знатоков, которые смогут добавить что-нибудь из того, о чем не подумал или не знал.

В качестве иллюстративного материала прикрепляю свой небольшой камень из Розетты — программки для расчета числа π на разных процессорах и системах по алгоритму-затвору, претендующие на звание самых быстрых его реализаций.

Intel 8080 и 8085


Первый настоящий процессор на чипе, сделанный в первой половине 1974 года, он до сих пор производится и находит себе применение. Многократно клонировался по всему миру, в СССР имел обозначение КР580ВМ80А. Современные процессоры Intel для РС до сих пор легко обнаруживают свою родственность этому уже в каком-то смысле реликтовому изделию. Сам для этого процессора кодов не писал, но будучи хорошо знакомым с архитектурой z80, рискну привести некоторые свои замечания.

Систему команд i8080, как и других процессоров Intel для РС, трудно назвать идеальной, но она универсальная, достаточно гибкая и имеет несколько очень привлекательных особенностей. От своих конкурентов, Motorola 6800 и MOS Technology 6502, i8080 выгодно отличался большим количеством пусть и несколько неуклюжих регистров, предоставляя пользователю один 8-битный аккумулятор А, один 16-битный полуаккуммулятор и по совместительству быстрый индексный регистр HL, 16-разрядный указатель стека SP, а также ещё два 16-битных регистра ВС и DE. Регистры BC, DE, и HL можно было использовать и как 6 байтовых регистров. Кроме того, i8080 имел поддержку полного набора флагов состояния: переноса, переполнения, знака, нуля и даже чётности и полупереноса. Некоторые инструкции из набора команд i8080 долгое время были чемпионами по быстродействию. Например, команда XCHG делает обмен содержимым 16-битных регистров DE и HL всего за 4 такта — это было исключительно быстро! Ряд других команд хотя и не ставили столь яркие рекорды, но также долгое время были одними из лучших:

  • XTHL — обмен содержимым регистра HL и данных на вершине стека, 18 тактов — вроде бы много, на даже на настоящем 16-битном i8086 такая команда занимает от 22 тактов, а для 6800 или 6502 такую команду даже трудно представить;
  • DAD — добавить к полуаккуммулятору HL значение другого 16-битного регистра (BC, DE или даже SP), 10 тактов. Это настоящее 16-битное сложение с установкой флага переноса. Если складывать HL самим с собой, то будет получаться быстрый 16-разрядный сдвиг влево или умножение на 2, ключевая операция как для реализации полного умножения, так и деления;
  • PUSH и POP — положить в стек и вынуть из стека 16-разрядное значение соответственно из регистра или в регистр. Выполняются за 11 и 10 тактов. Это самые быстрые операции i8080 для работы с памятью и при их выполнении происходит автоматическая инкрементация или декрементация SP. PUSH можно использовать, например, для быстрого заполнения памяти паттерном со значениями из 3 регистров (BC, DE, HL). Команд для работы с 8-битными величинами со стеком нет вообще;
  • LXI — загрузка 16-битной константы в регистр (HL, DE, BC, SP) за 10 тактов;
  • RNZ, RZ, RNC, RC, RPO, RPE, RP, RM — условные возвраты из подпрограммы, позволяли делать код чище, избавляя от необходимости писать лишние условные переходы. От этих команд отказались в архитектуре x86, возможно, что и зря, код с ним получается симпатичнее.


Этот процессор был использован в первом персональном компьютере Altair 8800, ставшим весьма популярным после журнальной публикации в начале 1975. К слову, в СССР похожая публикация случилась только в 1980, а соответствующая ей по актуальности только в 1986.

altair-8800-clone-0.jpg?auto=format%2Cco
Первый почти ПК

Intel 8080 стал основой для разработки когда-то первой массовой профессиональной операционной системы CP/M, занимавшей доминирующие позиции среди микрокомпьютеров для профессиональной работы до середины 1980-х.

Теперь о недостатках. i8080 требовалось два напряжения питания 5 и 12 вольт. Работа с прерываниями — неуклюжая и медленная. И в целом i8080 скорее нетороплив, если сравнить его с вскоре появившимися конкурентами. 6502 мог быть до 3-х раз быстрее при работе на той же частоте, что и i8080. Но в архитектуре i8080 было заложено, как оказалось, правильное видение будущего, а именно того неизвестного в 70-х факта, что процессоры будут быстрее памяти. Регистры i8080 DE и BC — это скорее прообраз современных кэшей, с ручным управлением, чем регистры общего назначения. i8080 начал с частоты 2 МГц, а конкуренты только с 1, что сглаживало разницу в производительности.

Трудно назвать i8080 8-битным процессором на все 100%. Конечно, АЛУ у него на 8 бит, но есть много 16 разрядных команд, работающих быстрее, чем если использовать только 8-битные аналоги вместо них. А для некоторых команд 8-битных аналогов нет вообще. Команда XCHG по сути и таймингам 100% 16-битная. Есть реальные 16-разрядные регистры. Поэтому рискну назвать i8080 частично 16-битным. Было бы интересно по совокупности признаков вычислять индекс разрядности процессора, но, насколько известно автору, пока такой работы никто не проделал.

Автор не знает причины, почему Intel отказалось от прямой поддержки развития 8-битных персоналок своими процессорами. Intel всегда отличила сложность и неоднозначность политики. Её связь с политикой, в частности, иллюстрирует тот факт, что долгое время у Intel функционируют заводы в Израиле и до конца 90-х это было тайным. Intel практически не пыталась улучшить 8080, была лишь до 3 с небольшим МГц поднята тактовая частота. Фактически 8-битный рынок был передан фирме Zilog с родственным i8080 процессором z80, который смог довольно успешно противостоять главному конкуренту, «терминатору» 6502.

В СССР и России отечественный клон i8080 стал основой многих массовых компьютеров, сохранявших популярность до начала 90-х. Это, конечно, Радио-86РК, Микроша, многоцветные Орион-128, Вектор и Корвет. Однако в войне клонов победили дешёвые и улучшенные клоны ZX Spectrum на основе z80.

d64acd00877a00143c992eeffc16e35d-jpg.755
Это уже настоящий ПК

В начале 1976 Intel был представлен процессор 8085, совместимый с 8080, но значительно превосходивший своего предшественника. В нём уже стало ненужным питание 12 вольт и упростилась схема подключения, была улучшена работа с прерываниями, использовалась тактовая частота от 3 до весьма солидных 6 МГц, система команд была расширена весьма полезными инструкциями: 16-разрядным вычитанием, 16-разрядным сдвигом вправо всего за 7 тактов (это очень быстро), 16-разрядным вращением влево через флаг переноса, загрузкой 16-разрядного регистра с 8-разрядным смещением (эту команду можно использовать и с указателем стека SP), запись регистра HL по адресу в регистре DE, аналогичное чтение HL через DE. Все упомянутые инструкции кроме сдвига вправо выполняются за 10 тактов — это иногда существенно быстрее, чем их аналоги или эмуляция на z80. Были добавлены ещё несколько инструкций и даже новый флаг признаков. Кроме того, были ускорены на такт многие инструкции для работы байтовыми данными. Это было очень существенно, так как на многих системах с i8080 или z80 вводились такты задержки, которые из-за наличия лишних тактов на i8080 могли вытянуть время исполнения почти в два раза. Например, в отечественном компьютере Вектор инструкции типа регистр-регистр выполнялись 8 тактов, а если бы там стоял i8085 или z80, то эти же инструкции выполнялись бы только за 4 такта. Инструкция XTHL стала быстрее даже на два такта. Однако, некоторые инструкции, например, 16-битный инкремент и декремент, PUSH и условные возвраты стали на такт медленнее.

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

Однако, могу опять повторить формулу «по неизвестным автору причинам» Intel отказалась использовать i8085 в качестве главного процессора. Лишь в СССР/РФ в начале 90-х на основе отечественного клона ИМ1821ВМ85А были попытки усовершенствовать некоторые системы, например, компьютер Вектор. Фактически фирма Intel дала z80 «зеленый цвет». Спустя несколько лет в битве за 16-битный рынок Intel повела себя совершенно иначе, выиграв тяжбу по запрещению продаж процессоров v20 и v30 в США. Интересно, что упомянутые процессоры японской фирмы NEC могли переключаться в режим полной бинарной совместимости с i8080, что сделало их самыми быстрыми процессорами архитектуры i8080.

Другая тайна фирмы Intel — в отказе от публикации расширенной системы команд. Однако один из официальных производителей этих процессоров опубликовал всю систему команд. Каковы причины такого странного отказа? Можно лишь гадать. Может Zilog тогда играл роль AMD и создавал видимость конкуренции, а i8085 мог обрушить Zilog. Может дело в желании сохранять систему команд поближе к проектируемому тогда i8086? Последнее кажется сомнительным. Intel 8086 был выпущен спустя более 2 лет после выпуска 8085 и трудно поверить, что в 1975 уже была известна система его команд. И в любом случае, совместимость как с 8080, так и с 8085 на i8086 достижима только с использованием макропроцессора, заменяя иногда одну команду i8080/i8085 на несколько своих.

Motorola 6800 и близкие родственники


Процессоры Motorola всегда отличались наличием нескольких очень привлекательных «изюминок» при одновременном наличие каких-то несуразных по абстрактности и малопрактичности архитектурных решений. Главная «изюминка» всех рассматриваемых процессоров — это второй полноценный и очень быстрый регистр-аккумулятор.

6800 из-за единственности громоздкого для 8-битной архитектуры 16-битного индексного регистра получился неудобным для программирования и использования изделием. Он был выпущен ещё в 1974, ненамного позже 8080, но так и не стал основой для какой-либо известной компьютерной системы.

6809 был выпущен в 1978, когда с 8086 уже началась 16-битная эпоха, и имеет весьма развитую систему команд, включая умножение двух байтовых аккумуляторов с получением 16-разрядного результата за 11 тактов (для сравнения, 8086 требует от 70 тактов на подобную операцию). Два аккумулятора могут в нескольких случаях группироваться в один 16-разрядный, что даёт быстрые 16-битные инструкции. 6809 имеет два индексных регистра и рекордное среди 8-битных процессоров число методов адресации — 12. Среди методов адресации есть уникальные для 8-битных чипов, такие как индексная с автоинкрементом или декрементом, относительно счётчика команд, индексная со смещением. 6809 имеет интересную возможность использовать два типа прерываний: можно одновременно использовать быстрые прерывания с частичным автоматическим сохранением регистров и прерывания с полным сохранением регистров — у 6809 есть три входа для сигналов прерывания FIRQ (быстрое маскируемое), IRQ (маскируемое), NMI (немаскируемое). Также иногда удобны в использовании быстрые инструкции чтения и установки сразу всех флагов.

Однако, операции с памятью требует на такт больше, чем 6502. Индексные регистры так и остались неуклюжими 16-битными динозаврами в 8-битном мире, некоторые операции просто шокируют своей медленностью, например, пересылка одного байтового аккумулятора в другой занимает 6 тактов, а обмен их содержимым — 8 тактов (сравните с 8080, где 16-битный обмен проходит за 4 такта)! Зачем-то предлагаются сразу два указателя стека, возможно это было влияние тупиковой архитектуры VAX-11 — в 8-битной архитектуре с 64 КБ памяти выглядит очень несуразно. И даже наличие инструкции с интересным названием SEX всех проблем 6809 устранить не может. В целом, 6809 всё же несколько быстрее 6502 на той же частоте, но требует такую же по быстродействию память. Мне удалось сделать деление для 6809 с 32-разрядным делимым и 16-разрядным делителем (32/16=32,16) за чуть более 520 тактов, для 6502 у меня не получилось добиться менее 650 тактов. Второй аккумулятор — большое преимущество, но другие возможности 6502, в частности, инвертированный перенос, сводят это преимущество только к означенным 25%. А вот умножение на 16-битною константу оказалось медленнее, чем табличное для 6502 с таблицей на 768 байт. 6809 позволяет писать довольно компактные коды, используя адресацию установленной страницы (direct page), но эта адресация делает коды довольно путанными. Суть этой адресации в установке старшего байта адреса данных в специальном регистре и указании только младшего байта адреса в командах. Такая же система только с фиксированным значением старшего байта используется в 6502, где она называется адресацией нулевой страницы (zero page). Адресация установленной страницы — это прямой аналог использования сегментного регистра DS в x86 только не для сегментов размером 64 КБ, а для сегментиков размером всего 256 байт. Ещё одна надуманность архитектуры 6800 в использовании порядка байт от старшего к младшему (Big Endian), что притормаживает 16-битные операции сложения и вычитания.

Можно предположить, что Motorola потратила немало средств для продвижения 6809. Это сказывается до сих пор при упоминании об этом процессоре. Про 6809 имеется много благоприятных отзывов, отличающихся некоторой туманностью, обобщениями и неконкретностью. 6809 позиционировался как 8-битный суперпроцессор для микромейнфреймов. Для него даже был сделан почти Unix, операционные системы OS-9 и UniFlex. Он выл выбран как основной процессор для Apple Macintosh и, как следует из фильмов о Стиве Джобсе, только его эмоциональное вмешательство определило переход на более перспективный 68000. Конечно, 6809 — это хороший процессор, но в целом лишь незначительно лучший своих появившихся гораздо раньше конкурентов 6502 (на три года раньше) и z80 (на два). Можно только гадать, что бы было, если бы Motorola хотя бы половину усилий потраченных на разработку и продвижение 6809 потратила на развитие 6502.

6809 использовался в нескольких довольно известных компьютерных системах. Наиболее известные среди них — это американский компьютер Tandy Color или Tandy Coco, а также их британских или точнее валлийский клон Dragon-32/64. Компьютерные рынки 80-х отличала значительная нетранспарентность и Tandy Coco распространялись в основном только в США, а Драконы помимо собственно Великобритании получили некоторую популярность и в Испании. Во Франции 6809 почему-то стал основой для массовых компьютеров 80-х серии Thomson, которые так и остались практически неизвестными где-либо ещё кроме Франции. 6809 также использовался в качестве второго процессора по крайней мере в двух системах: в серии Commodore SuperPET 9000 и в малотиражной и ныне почти забытой приставке для TUBE-интерфейса компьютеров BBC Micro. Использовался этот процессор и в других менее известных автору системах, в частности, японских. Он также получил некоторое распространение в мире игровых консолей. Стоит упомянуть одну из таких консолей, Vectrex, которая использует уникальную технологию — векторный дисплей.

DOVW3CM.jpg
Цветной КоКо 3

Как и 8080, 8085 или z80 6809 очень трудно называть чисто 8-битным. А 6309 даже формально трудно назвать 8-битным, его производила японская фирма Toshiba (точный год начала его производства мне найти не удалось) как процессор, полностью совместимый с 6809. Однако, этот процессор можно было переключать в новый режим, который при сохранении почти полной совместимости с 6809 предоставлял почти на порядок большие возможности. Эти возможности были скрыты в официальной документации, но были опубликованы в 1988 в сети Usenet. Были добавлены ещё два аккумулятора, но инструкции с ними существенно медленнее, чем с первыми двумя. Сильно сокращено время исполнения большинства инструкций. Добавлены ряд команд, среди которых просто фантастическое для процессоров такого класса знаковое деление 32-битного делимого на 16-битный делитель (32/16=16,16) за 34 такта, причем делитель берется из памяти. Появилось также 16-разрядное умножение с 32-разрядным результатом за 28 тактов. Были также добавлены очень полезные инструкции для быстрого копирования блоков памяти с временем исполнения 6 + 3n, где n — это число копируемых байт, копировать можно как с уменьшением, так и с увеличением адресов. Эти же инструкции можно использовать и для быстрого заполнения памяти заданным байтом. При их исполнении могут происходить прерывания. Появились ещё новые битовые операции, нуль-регистр и др. Были ещё добавлены прерывания при исполнении неизвестной инструкции и при делении на 0. В каком-то смысле, 6309 — это вершина технологических достижений среди 8-битных процессоров или точнее процессоров с размером адресуемой памяти 64 КБ.

6309 полностью совместим по клеммам с 6809, что сделало его популярным апгрейдом для цветных Tandy или Драконов. Существуют и специальные версии ОС, использующих новые возможности 6309.

MOS Technology 6502 и WDC 65816


Это процессор с очень драматической судьбой. Ни один другой процессор в этом с ним сравниться не может. Его появление и внедрение сопровождалось очень большими по размаху и последствиям событиями. Перечислю некоторые из них:

  • ослабление фирмы-гиганта Motorola, возможности которой какое-то время превосходили возможности Intel;
  • уничтожение фирмы MOS Technology;
  • прекращение развития 6502 и его стагнационный выпуск практически без модернизации.


Всё началось с того, что в Motorola по неизвестным вполне причинам отказались поддержать инициативных молодых инженеров, предлагавших улучшить в целом довольно посредственный процессор 6800. Им пришлось покинуть компанию и продолжить свои наработки в небольшой, но перспективной фирме MOS Technology, где они вскоре подготовили два процессора 6501 и 6502, сделанных по технологии NMOS. Первый был совместим по разъему с 6800, а в остальном они были идентичны. Команде 6501/6502 удалось успешно внедрить новые технологию производства чипов, что радикально удешевило новые процессоры. В 1975 MOS Technology могла предлагать 6502 за $25, в то время как стартовая цена на Intel 8080 и Motorola 6800 была в 1974 $360. В 1975 Motorola и Intel снизили цены, но они все равно были близки к $100. Специалисты MOS Technology утверждали, что их процессор до 4-х раз быстрее, чем 6800. Мне это кажется сомнительным: 6502 гораздо быстрее может работать с памятью, но второй аккумулятор 6800 очень ускорял многие вычисления. Оценочно могу предположить, что 6502 был в среднем быстрее не более чем в 2 раза. Motorola начала судебный процесс против своих бывших сотрудников — те якобы использовали многие технологические секреты фирмы. В ходе процесса удалось установить, что один из инженеров, ушедших из Motorola, вынес некоторые конфиденциальные документы по 6800, действуя вопреки установкам своих коллег. Был ли это его собственный поступок или за ним стояли какие-то направляющие силы до сих пор неизвестно. По этой и по другим не совсем ясным причинам Motorola выиграла процесс и фирма MOS Technology, чьи финансовые возможности были весьма невелики, была присуждена к выплате значительной суммы в $200000 и к отказу от производства 6501. Intel в похожей ситуации с Zilog действовала совсем не так.

Далее в истории появляется легендарная фирма Commodore и её не менее легендарный основатель Jack Tramiel, в тени которого находилась фигура главного финансиста фирмы, определяющего её политику — человека по имени Irving Gould. Джек получил кредит у Ирвина и на эти деньги, используя несколько, мягко сказать, недобросовестную тактику, вынудил MOS Tecchnology стать частью Commodore. После чего, возможно и вопреки желанию Трамела, вынужденного уступать Гуду, разработка 6502 практически остановилась и это при том, что ещё в 1976 удалось произвести опытные образцы 6502 с рабочими частотами до 10 МГц, хотя сообщение об этом появилось только спустя многие годы от человека по имени Bill Mensch (он был в команде, покинувшей Motorola), который не раз делал громкие, но по большому счету пустые заявления и сыграл в судьбе 6502 довольно неоднозначную роль. Главный разработчик 6502 Chuck Peddle навсегда был отстранён от разработки процессоров. 6502 продолжили производить не только в Commodore, но и в фирме ушедшего из Commodore Билла Менша Western Design Center (WDC). Любопытно, что никто из прежней команды 6502 не работал с ним в дальнейшем.

На этом драма вокруг 6502 не закончилась. В 1980 в журнале AIM65 Interactive фирмы Rockwell появилась короткая анонимная статья, о том, что все 6502 несут в себе опасного бага, который получил название JMP (xxFF). Тон статьи предполагает, что-то совершенно из ряда вон выходящее. Впоследствии этот настрой перешёл в позицию фирмы Apple по этому вопросу и стал неким мейнстримом. Хотя никакого «бага» строго говоря не было. Конечно, специалисту, привыкшему к комфортным процессорам больших систем тех лет, одна из особенностей, вполне уместных и даже полезных среди микропроцессоров, могла показаться чем-то раздражающим, багом. Но на самом деле это, задевшее чьи-то чувства, поведение было описано в официальной документации от 1975 года и в учебниках по программированию, вышедших до появления упомянутой статьи. «Баг» был ликвидирован Билом Меншем, сделавшим 65С02 (CMOS 6502) предположительно к 1983, т. е. уже после выпуска 65816. В то время как Intel, Motorola и другие сделали уже 16-битные процессоры новых поколений, 6502 был лишь микроскопически улучшен и сделан искусственно частично несовместимым с самим собой. Помимо устранения «бага», были сделаны ряд изменений, которые, в частности, привели к изменению в ходе исполнения нескольких инструкций, которые стали медленнее на такт, но при этом в каком-то надуманном академическом смысле они стали более правильными. Но, надо признать, что несколько новых инструкций оказались ожидаемыми и полезными. С другой стороны, абсолютное большинство новых инструкций лишь занимали кодовое пространства, почти ничего не добавляя к возможностям 6502, что оставляло меньше новых кодов для возможных дальнейших модернизаций. Commodore и японская Ricoh (производитель популярнейших игровых консолей NES) не приняли этих изменений. Автор этого материала сам сталкивался несколько раз с проблемой этого «бага». Ничего не зная о нем, писал программы для Коммодоров. Потом одну из них перенес на системы, где использовался набор команд 65С02. Возникла несовместимость, пришлось менять коды, делать условную компиляцию. Код для 65С02 получился более громоздким и медленным. Потом поднимал этот вопрос на форуме 6502.org, где большинство участников из мира Apple. Спросил, может ли кто-нибудь привести пример, когда означенный «баг» рушил программу. Получил только эмоциональные и общие замечание, конкретного примера так и не было предложено.

f-8qmv2x4io6ga8qxomqg0dxqnw.png Баг!!!

65C02 был лицензирован многим фирмам, в частности, NCR, GTE, Rockwell, Synertek и Sanyo. Использовался в Apple II, начиная с моделей IIe, хотя многие IIe использовали NMOS 6502. Вариант 65С02 6512 использовался также в поздних моделях BBC Micro. Atari использовала NMOS 6502. Фирмы Synertek и Rockwell помимо CMOS 6502 производили и NMOS 6502. Кстати, NMOS 6502 имеет свой набор недокументированных инструкций, природа которых совершенна отлична от «секретных» команд 8085. В 6502 эти инструкции появились как побочный эффект использованной технологии, поэтому большинство из них скорее бесполезны, но несколько, например, загрузка или выгрузка одной командой сразу двух регистров и некоторые другие могут сделать код более быстрым и компактным.

Были и другие попытки модернизировать 6502. В том же 1979 появилась статья, что для компьютеров Atari готовится к производству процессор 6509 (не путать с появившимся позже процессором с таким же названием фирмы Commodore), в котором ожидалось ускорение исполнения команд на 25% и много новых инструкций. Но по неизвестным в точности причинам производство этого процессора так и не состоялось. Commodore проводила лишь микроскопические модернизации. Там, в частности, перешли на технологию HMOS и изготовление статических ядер, что позволяло притормаживать процессоры. С точки зрения программирования самым интересным является процессор 6509, который пусть и в очень примитивной форме с помощью всего двух специально выделенных для этой цели инструкций позволяет адресовать до 1 МБ памяти. В сверхпопулярных Коммодорах 64 и 128 стояли процессоры 6510/8510, а в менее удачливых серии 264 — 7501/8501. Эти процессоры имели лишь соответственно 6 и 7 встроенных битовых портов ввода-вывода, при этом 7501/8501 не поддерживали немаскируемых прерываний. Фирма Rockwell производила вариант 65C02 со своим расширенным 32 битовыми операциями (похожи на битовые инструкции z80) набором инструкций, однако, насколько мне известно, в компьютерах такие процессоры не использовались и сами эти битовые инструкции имели значение скорее только для использования во встроенных системах.

Последняя сцена драмы с участием 6502 обозначилась в недопущении компьютеров на базе 6502 с частотой 2 МГц на рынок США в первой половине 80-х. Это коснулось иностранца-англичанина BBC Micro, их производившая фирма Acorn сделала большую партию компьютеров для США, но, как оказалось, зря. Сработала какая-то блокировка и компьютеры пришлось срочно переделывать под европейские стандарты. Полуамериканские, но формально канадские компьютеры Commodore CBM II, несмотря на некоторые проблемы (в частности, по соответствию стандартам на электрооборудование), были всё же допущены. Возможно из-за того, что у них не было графических режимов и даже цветного текста — этого не мог компенсировать даже стильный Porsche-дизайн. Последним в списке неудачников оказался 100% американский Apple III — известно, что Стив Джобс сделал много, чтобы этот компьютер не состоялся. Он требовал явно невыполнимых спецификаций. Узнаем ли мы когда-нибудь его мотивы? Только в 1985, когда эпоха 8-битной техники начала уходить, появился Commodore 128, который мог использовать в одном из своих режимов 6502 с тактом на 2 МГц. Но и тут получился скорее анекдот, так как этот режим практически не поддерживался и программ для него практически нет. Только во второй половине 80-х в США стали производить приставки-ускорители для Apple II, а с 1988 и модель Apple IIc+ c процессором на 4 МГц. Почему так случилось? Возможно потому, что 6502 на 2 или 3 МГц (а такие уже производились в самом начале 80-х) на ряде задач и в особенности с играми могли успешно конкурировать с системами на основе Intel 8088 или Motorola 68000. В 1991 волевым решением корпорация Commodore закрыла интересный, хотя и запоздалый проект С65 на базе процессора 4510 с частотой 3.54 МГц. 4510 — это самый быстрый 6502, сделанный только в 1988, в нём была проведена наконец упоминавшаяся раннее оптимизация циклов, давшая 25% прирост скорости. Таким образом, процессор в С65 по быстродействию близок к системам с 6502 на 4.5 МГц. Удивительно, но этот самый быстрый 6502 с расширенным набором инструкций (в каких-то деталях это расширение получилось более удачным, чем в 65816) нигде с тех пор так и не нашёл применения.

jewel_of_the_nile_cbm_ii.jpg
Антиреклама — множественные Porsche PET в апартаментах злодея из Жемчужины Нила (1985)

Теперь несколько слов о системе команд 6502. Главная особенность этого процессора в том, что его сделали почти максимально быстрым, практически без лишних тактов, которых особенно много в процессорах 8080/8085/z80/8088/68000. Фактически это была идеология появившихся позднее и под прямым влиянием 6502 процессоров архитектуры RISC. Эта же идеология доминирует, начиная с серии Pentium, и среди процессоров Intel. Кроме того, 6502 максимально быстро реагировал на прерывания, что делало его очень полезным в некоторых встроенных системах. У 6502 один аккумулятор и два индексных регистра, кроме того первые 256 байт памяти можно использовать в специальных командах либо как более быструю память, либо как набор 16-разрядных регистров (которые почти идентичны по своей функциональности регистрам BC и DE в 8080/z80) для довольно мощных способов адресации. Некоторые арифметические команды (сдвиги, вращение, инкремент и декремент) можно использовать с памятью непосредственно, не используя регистры. 16-разрядных команд нет — это 100% 8-битный процессор. Поддерживаются все основные флаги кроме характерного архитектуре Intel флага чётности. Есть ещё несколько необычный флаг малополезного 10-го режима. Процессоры Intel и Motorola используют специальные корректирующие инструкции для работы с десятичными числами, а 6502 может переключаться в 10-й режим, что делает его преимущество по скорости с 10-ми числами ещё более значительным, чем с двоичными. Очень впечатляет наличие для 6502 табличного умножения 8-битных операндов с получением 16-битного результата за менее чем 30 тактов, при размере вспомогательной таблицы в 512 байт. Медленнее всего у 6502 получаются операции массового копирования памяти — от 14 тактов на байт.

65816 был выпущен WDС в 1982. Конечно, это был большой шаг вперёд, но явно запоздалый и с большими архитектурными изъянами. 65816 уже никем не рассматривался как конкурент для основных процессоров Intel или Motorola — это уже был второстепенный аутсайдер, который уже как-то запрограммировано был настроен на дальнейшую потерю позиций. 65816 имел два важных плюса — он был сравнительно дешёв и совместим с по-прежнему весьма популярным 6502. В последующие годы Бил Менш даже не пытался как-то улучшить своё детище, сделать оптимизацию циклов, заменить адресацию нулевой страницы расширенной с использованием регистра Z (это было сделано в 4510), добавить хотя бы умножение, … WDC только повышала предельные тактовые частоты, дойдя к середине 90-х до 14 МГц (такой процессор использовался в популярном ускорителе для С64 SuperCPU на частоте 20 МГц). Однако даже сейчас (2018!) WDC предлагает 65816 почему-то только на тех же 14 МГц. 65816 может использовать до 16 МБ памяти, но используемые для этого методы адресации выглядят далёкими от оптимальных. Например, индексные регистры могут быть только 8- или 16-разрядными, первые 64 КБ памяти имеют специальный режим адресации, указатель стека 16-битный, … 65816 имеет 16-разрядное АЛУ, но 8-разрядную шину данных, поэтому на арифметических операциях он лишь примерно на 50% быстрее чем 6502. Тем не менее 65816 был выпущен в количестве более миллиарда. Конечно, ряд команд 65816 явно дополняют пробелы в архитектуре 6502, например, команды массового копирования памяти за 7 тактов на байт.

Есть ещё вариант 65816 65802, который использует 16-разрядную шину адреса и совместим по разъему с 6502. Предлагались апгрейды для Apple II на основе этого процессора, но небольшого ускорения с таким апгрейдом возможно получить только на специально для него написанных программах.

6502 использовался в большом числе компьютерных систем, самые популярные из которых — это 8-битные Commodore, Atari, Apple, NES. 65816 использовался в довольно популярном компьютере Apple IIgs, в игровой консоли Super NES, а также в редком английском компьютере Acorn Communicator.

Можно лишь попытаться фантазировать на тему о том, что бы было, если бы 6502 смог развиваться теми же темпами, что и его конкуренты. Мне кажется, что постепенный перенос памяти нулевой страницы в регистры и постепенное расширение системы команд с одновременной оптимизацией циклов, позволило бы «терминатору» 6502 оставаться в лидерах по быстродействию до начала 90-х. Введение режима 16, а затем 32 бит позволило бы использовать большие объемы памяти и более быстрые команды. Смогли бы его конкуренты что-то этому противопоставить?

Хочется закончить некоторыми общефилософскими рассуждениями. Почему 6502 был приторможен и лишен гораздо более яркого будущего? Возможно из-за того, что он реально мог очень потеснить крупные фирмы и создать совершенно новую реальность. Но была ли команда 6502 настроена на такое? Скорее нет, они просто хотели сделать как лучше, не думая о политике и опережая время.

Zilog Z80


Этот процессор стал наряду с 6502 основным процессором первых персональных компьютеров. В истории его появления и использования нет никаких насыщенных драматизмом событий. Есть только некоторая тайна в самом факте ухода основателя Zilog из Intel и в дальнейших отношениях между этими фирмами. Возможно есть ещё какая-то интрига и в неуспехе Zilog сделать следующее поколение процессоров. Z80 начали производить в 1976 и его варианты производят до сих пор. Когда-то даже сам Билл Гейтс объявил о поддержке систем на основе z80.

Z80 — это более удобный для включения в компьютерные системы процессор, чем 8080. Он требует только одного напряжения питания и имеет встроенную поддержку регенерации динамической памяти. Кроме того, он при полной совместимости с 8080 имеет довольно много новых команд, второй набор основных регистров и несколько совершенно новых регистров. Любопытно, что в Zilog отказались от использования мнемоник ассемблера 8080, а стали использовать свои собственные мнемоники, более подходящие для расширенной системы команд z80. Подобная история случилась с ассемблером Intel x86 в мире программного обеспечения GNU, там тоже почему-то используют по умолчанию свои собственные соглашения по записи программ на ассемблере.

Среди новых команд z80 особенно впечатляют команды массового копирования памяти за 21 такт на байт, а также интересная команда поиска байта в памяти. Однако наиболее интересна ко

© Geektimes