Введение
8-битный микропроцессор 1975 года
MOS Technology 6502 (обычно произносится как "сиксти файв о ту") – 8-битный микропроцессор, разработанный небольшой командой под руководством Чака Пэддла для компании MOS Technology. Команда разработчиков ранее работала в Motorola над проектом Motorola 6800; 6502 по сути является упрощенной, менее дорогой и более быстрой версией этой разработки. Когда он был представлен в 1975 году, 6502 был самым дешевым микропроцессором на рынке с существенным отрывом. Первоначально он продавался по цене менее чем в одну шестую от стоимости конкурирующих разработок крупных компаний, таких как 6800 или Intel 8080. Его появление привело к быстрому снижению цен на всем рынке процессоров. Вместе с Zilog Z80 он послужил толчком к ряду проектов, которые привели к революции домашних компьютеров в начале 1980-х годов. Популярные игровые консоли и домашние компьютеры 1980-х и начала 1990-х годов, такие как Atari 2600, 8-битные компьютеры Atari, Apple II, Nintendo Entertainment System, Commodore 64, Atari Lynx, BBC Micro и другие, использовали 6502 или его модификации. Вскоре после выхода 6502 компания MOS Technology была полностью приобретена Commodore International, которая продолжила продавать микропроцессор и лицензии другим производителям. На заре 6502 его производство было налажено компаниями Rockwell и Synertek, а позже лицензии были переданы другим фирмам. В 1981 году Western Design Center начала разработку CMOS-версии, 65C02. Она до сих пор широко используется во встраиваемых системах, с оценочными объемами производства в сотнях миллионов штук.
Истоки в Motorola
6502 был разработан многими из тех же инженеров, которые разработали семейство микропроцессоров Motorola 6800. Motorola начала проект микропроцессоров 6800 в 1971 году, главным архитектором был Том Беннетт. Инженеры Motorola могли проводить аналоговое и цифровое моделирование на мэйнфрейме IBM 370 165. Разработка компоновки чипа началась в конце 1972 года, первые чипы 6800 были изготовлены в феврале 1974 года, а полное семейство было официально выпущено в ноябре 1974 года. Джоном Бьюкененом был разработан чип 6800, а Род Орджилл, позже создавший 6501, помогал Бьюкенену в анализе схем и компоновке чипа. Билл Менш присоединился к Motorola в июне 1971 года после окончания Университета Аризоны (в возрасте 26 лет). Его первым заданием было определение периферийных интегральных схем для семейства 6800, а позже он стал главным конструктором периферийного интерфейсного адаптера (PIA) 6820. Беннетт нанял Чака Педдла в 1973 году для поддержки архитектуры уже разрабатываемых продуктов семейства 6800. Он внес вклад во многие области, включая разработку АЦИА 6850 (последовательного интерфейса). Основными клиентами Motorola были известные электронные компании, такие как Hewlett Packard, Tektronix, TRW и Chrysler. В мае 1972 года инженеры Motorola начали посещать избранных клиентов и делиться деталями своей предлагаемой 8-битной микропроцессорной системы с ПЗУ, ОЗУ, параллельными и последовательными интерфейсами. В начале 1974 года они предоставили инженерные образцы чипов, чтобы клиенты могли создавать прототипы своих разработок. Стратегия Motorola, ориентированная на "полное семейство продуктов", была сосредоточена не на цене микропроцессора, а на снижении общей стоимости разработки для клиента. Они предлагали разработку программного обеспечения на компьютере с разделением времени, систему отладки "EXORciser", обучение на месте и поддержку инженеров по применению. И Intel, и Motorola первоначально объявили цену за один микропроцессор. Фактическая цена за производственные партии была значительно ниже. Motorola предложила комплект разработчика, содержащий 6800 и шесть поддерживающих чипов, который Педдл сопровождал во время посещений клиентов, обнаружив, что высокая стоимость микропроцессорных чипов отпугивала клиентов. В то же время эти визиты неизменно приводили к тому, что инженеры, которым его представляли, составляли списки необходимых инструкций, которые были намного меньше, чем "все эти сложные инструкции", включенные в 6800. Педдл и другие члены команды начали намечать дизайн улучшенного микропроцессора с уменьшенными размерами. В то время новый завод Motorola по производству полупроводников в Остине, штат Техас, испытывал трудности с производством МОП-чипов, а середина 1974 года ознаменовала начало годовой рецессии в полупроводниковой промышленности. Кроме того, многие сотрудники из Месы, штат Аризона, были недовольны предстоящим переездом в Остин. Руководство подразделения полупроводниковых продуктов Motorola не проявило интереса к предложению Педдла о недорогом микропроцессоре. В конечном итоге Педдлу было отправлено официальное письмо с требованием прекратить работу над системой. Педдл ответил на приказ, сообщив Motorola, что письмо представляет собой официальное заявление о "прекращении проекта", и, следовательно, интеллектуальная собственность, которую он разработал к этому моменту, теперь принадлежит ему. В интервью в ноябре 1975 года председатель Motorola Роберт Галвин в конечном итоге согласился с тем, что концепция Педдла была хорошей и что подразделение упустило возможность: "Мы не выбрали правильных лидеров в подразделении полупроводниковых продуктов". Подразделение было реорганизовано и руководство было заменено. Новый вице-президент группы Джон Уэлти сказал: "Организация продаж полупроводников потеряла чувствительность к потребностям клиентов и не могла принимать оперативные решения".
Peddle, who would accompany the salespeople on customer visits, found that customers were put off by the high cost of the microprocessor chips. At the same time, these visits invariably resulted in the engineers he presented to producing lists of required instructions that were much smaller than "all these fancy instructions" that had been included in the 6800. Peddle and other team members started outlining the design of an improved feature, reduced size microprocessor. At that time, Motorola's new semiconductor fabrication facility in Austin, Texas, was having difficulty producing MOS chips, and mid 1974 was the beginning of a year long recession in the semiconductor industry. Also, many of the Mesa, Arizona employees were displeased with the upcoming relocation to Austin. Motorola's Semiconductor Products Division management showed no interest in Peddle's low cost microprocessor proposal. Eventually Peddle was given an official letter telling him to stop working on the system. Peddle responded to the order by informing Motorola that the letter represented an official declaration of "project abandonment", and as such, the intellectual property he had developed to that point was now his. In a November 1975 interview, Motorola's Chairman, Robert Galvin, ultimately agreed that Peddle's concept was a good one and that the division missed an opportunity, "We did not choose the right leaders in the Semiconductor Products division." The division was reorganized and the management replaced. The new group vice president John Welty said, "The semiconductor sales organization lost its sensitivity to customer needs and couldn't make speedy decisions."
Технология MOS
Педдл начал искать вне Motorola источник финансирования для этого нового проекта. Первоначально он обратился к генеральному директору Mostek Л. Дж. Севину, но тот отказался. Позже Севин признал, что это было связано с опасениями, что Motorola подаст на них в суд. Во время одной из своих торговых поездок Педдл посетил Ford Motor Company, где Боб Джонсон, впоследствии возглавивший подразделение автоматизации двигателей Ford, упомянул, что их бывший коллега Джон Пайвинен перешел в General Instrument и самостоятельно освоил проектирование полупроводников. В 1969 году Пайвинен основал MOS Technology в Вэлли Фордж, штат Пенсильвания, вместе с двумя другими руководителями из General Instrument – Мортом Джаффе и Доном Маклафлином. В 1970 году Allen Bradley, поставщик электронных компонентов и промышленных систем управления, приобрел контрольный пакет акций. Компания занималась проектированием и изготовлением заказных интегральных схем для клиентов и разработала линейку микросхем для калькуляторов. После того, как попытки сотрудничества с Mostek не увенчались успехом, Педдл обратился к Пайвинену, который "сразу же все понял". 19 августа 1974 года Чак Педдл, Билл Мэнш, Род Оргилл, Гарри Бауком, Рэй Хирт, Терри Холдт и Уилл Мэтис покинули Motorola, чтобы присоединиться к MOS. Майк Джейнс присоединился позже. Из 17 разработчиков микросхем и специалистов по компоновке из команды 6800 ушли восемь. Целью команды было разработать и произвести недорогой микропроцессор для встраиваемых приложений и охватить максимально широкую клиентскую базу. Это было возможно только при низкой стоимости микропроцессора, поэтому команда установила целевую цену в объеме. Позже Мэнш заявил, что целью была не цена самого процессора, а создание набора микросхем, которые можно было бы продавать по цене, чтобы конкурировать с недавно представленным Intel 4040, который продавался в аналогичном полном наборе микросхем по цене. Микросхемы производятся путем нанесения множества копий схемы микросхемы на поверхность "пластины" – тонкого диска из высокочистого кремния. Меньшие микросхемы можно наносить на одну и ту же пластину в большем количестве, что снижает их относительную стоимость. Кроме того, пластины всегда содержат некоторое количество крошечных физических дефектов, разбросанных по поверхности. Любая микросхема, нанесенная в этом месте, будет бракованной и подлежит утилизации. Меньшие микросхемы означают, что вероятность попадания копии на дефект ниже. По этим двум причинам стоимость конечного продукта сильно зависит от размера схемы микросхемы. Изначально чипы 6800 планировалось сделать размером, но компоновка была завершена на площади 29,0. Для новой разработки целевая стоимость требовала размера, или площади 16,6. Для достижения этой цели потребуется несколько новых технологий.
Переход на NMOS
Было два значительных достижения, появившихся на рынке одновременно с разработкой 6502, которые обеспечили существенное снижение стоимости. Первым был переход к НМОС с нагрузкой на истощение. 6800 использовал ранний NMOS-процесс, в режиме обогащения, который требовал трех напряжений питания. Одной из ключевых особенностей 6800 был встроенный удвоитель напряжения, позволявший использовать один источник +5 В для питания +5, −5 и +12 В внутри схемы, в отличие от других чипов того времени, таких как Intel 8080, которым требовалось три отдельных вывода питания. Хотя эта функция упрощала схему питания и компоновку выводов, она все равно требовала отдельных линий питания для различных логических элементов на чипе, что усложняло и увеличивало его размер. Переход к новой схеме с нагрузкой на истощение позволил использовать всего один источник +5 В, устранив всю эту сложность. Дополнительным преимуществом было то, что схемы с нагрузкой на истощение потребляли меньше энергии при переключении, что обеспечивало более низкую температуру и более высокую рабочую скорость. Еще одним важным следствием стало то, что тактовый сигнал для ранних процессоров должен был быть достаточно мощным, чтобы выдержать потери при прохождении по схеме, что почти всегда требовало отдельного внешнего чипа для генерации сильного сигнала. Благодаря сниженному энергопотреблению схемы с нагрузкой на истощение, генератор тактового сигнала можно было разместить непосредственно на чипе, упрощая общую конструкцию компьютера. Эти изменения значительно снизили сложность и стоимость создания полноценной системы. Другим важным изменением в отрасли стало внедрение проекционной маскировки. Ранее чипы создавались путем нанесения рисунка на поверхность кремниевой пластины с помощью маски, которая прижималась к поверхности, а затем освещалась ярким светом. Маски часто собирали мельчайшие частицы грязи или фоторезиста при снятии с пластины, что приводило к дефектам в соответствующих местах при последующей маскировке. Для сложных схем, таких как процессоры, использовалось 5 или 6 этапов маскировки, и вероятность появления дефекта хотя бы на одном из этапов была очень высока. В большинстве случаев 90% таких схем оказывались бракованными, что давало выход годных всего 10%. Цена рабочих экземпляров должна была покрывать производственные затраты 90% отбракованных. В 1973 году компания Perkin Elmer представила систему Micralign, которая проецировала изображение маски на кремниевую пластину вместо прямого контакта. Маски больше не загрязнялись частицами с пластин и служили около 100 000 циклов вместо 10. Это устранило пошаговые дефекты и высокую частоту брака, характерную для сложных схем. Выход годных процессоров сразу же увеличился с 10% до 60 или 70%. Это означало, что цена процессора снизилась примерно на ту же величину, и микропроцессор внезапно стал массовым товаром.
Замечания по конструкции
Чак Педдл, Род Оргилл и Уил Мэтис разработали начальную архитектуру новых процессоров. В сентябре 1975 года в журнале EDN была опубликована статья, в которой приводилось следующее описание конструкции: "Семейство MOS Technology 650X представляет собой осознанную попытку восьми бывших сотрудников Motorola, работавших над разработкой системы 6800, создать компонент, который заменил бы и превзошел 6800, но при этом стоил бы дешевле. Используя опыт, полученный при работе над проектом 6800, команда MOS Technology во главе с Чаком Педдлом внесла следующие архитектурные изменения в процессор Motorola.
The MOS Technology 650X family represents a conscious attempt of eight former Motorola employees who worked on the development of the 6800 system to put out a part that would replace and outperform the 6800, yet undersell it. With the benefit of hindsight gained on the 6800 project, the MOS Technology team headed by Chuck Peddle, made the following architectural changes in the Motorola CPU
Основным изменением с точки зрения размера чипа стало исключение трехстабильных драйверов с выходов адресной шины. Трехстабильная шина имеет состояния для "1", "0" и "высокого импеданса". Последнее состояние используется для предоставления доступа к шине другим устройствам и обычно применяется для многопроцессорной обработки или, чаще, для прямого доступа к памяти (DMA). Хотя эта функция и полезна, она очень затратна с точки зрения схемотехники на кристалле. 6502 просто отказался от этой функции, что соответствовало его концепции как недорогого контроллера, предназначенного для выполнения конкретных задач и взаимодействия с простыми устройствами. Педдл предположил, что любой, кому действительно необходим такой тип доступа, может реализовать его с помощью одного 74158. Следующим важным отличием стало упрощение регистров. Во-первых, был удален один из двух аккумуляторов. Регистры общего назначения, такие как аккумуляторы, должны быть доступны для многих частей декодера инструкций, что требует значительного количества соединений для перемещения данных в них и из них. Два аккумулятора облегчают многие задачи кодирования, но значительно усложняют конструкцию чипа. Дополнительная экономия была достигнута за счет уменьшения разрядности регистра стека с 16 до 8 бит, что означало, что стек мог иметь длину всего 256 байт, чего было достаточно для его предполагаемой роли микроконтроллера. 16-битный индексный регистр IX был разделен на два регистра – X и Y. Более того, изменился способ доступа к памяти. В 6800 в IX хранился 16-битный адрес, к которому прибавлялось 8-битное смещение, хранящееся вместе с инструкцией. В 6502 (и большинстве других современных конструкций) 16-битный базовый адрес хранился в инструкции, а к нему прибавлялись 8-битные X или Y. Наконец, был упрощен набор инструкций, что освободило место в декодере и логике управления. Из первоначальных 72 инструкций в 6800 было реализовано 56. Среди удаленных были инструкции, работающие с двумя аккумуляторами 6800, и несколько инструкций ветвления, вдохновленных PDP 11. Высокоуровневый дизайн чипа должен был быть преобразован в схемы транзисторов и соединений. В MOS Technology "разводка" (layout) была очень ручным процессом, выполняемым с помощью цветных карандашей и кальки. Разводка состояла из тысяч многоугольных фигур на шести различных чертежах – по одному для каждого слоя технологического процесса. Учитывая ограничения по размеру, весь дизайн чипа должен был постоянно учитываться. Mensch и Paivinen работали над декодером инструкций, а Mensch, Peddle и Orgill – над АЛУ и регистрами. Еще одним достижением, разработанным на вечеринке, стал способ совместного использования части внутренней проводки, что позволило уменьшить размер АЛУ. Несмотря на все усилия, окончательный дизайн оказался на 5 мил шире. Первые чипы 6502 имели площадь 19,8. Оригинальная версия процессора не поддерживала операцию циклического сдвига вправо (ROR), поэтому эта инструкция была исключена из первоначальной документации. Следующая итерация дизайна уменьшила размер чипа и добавила поддержку циклического сдвига вправо, и ROR была включена в пересмотренную документацию.
Введение 6501 и 6502
MOS представила два микропроцессора, основанных на единой базовой конструкции: 6501 подключался к тому же разъему, что и Motorola 6800, а 6502 изменил распиновку для поддержки встроенного генератора тактовой частоты. Оба работали с другими вспомогательными чипами, разработанными для 6800. Они не могли выполнять программное обеспечение для 6800, поскольку имели другой набор инструкций, различные регистры и в основном отличались режимами адресации. Статьи на эту тему были опубликованы в EE Times (24 августа 1975 г.), EDN (20 сентября 1975 г.), Electronic News (3 ноября 1975 г.), Byte (ноябрь 1975 г.) и Microcomputer Digest (ноябрь 1975 г.). Реклама 6501 появилась в нескольких изданиях в первую неделю августа 1975 года. 6501 продавался на Wescon по цене за штуку. В сентябре 1975 года реклама включала как микропроцессор 6501, так и 6502. 6502 стоил всего (25,0 долларов в 1975 году эквивалентны примерно <рассчитанной сумме> в настоящее время). Когда MOS Technology прибыла на Wescon, они обнаружили, что экспонентам запрещено продавать товары непосредственно на выставочной площадке. Они арендовали люкс "МакАртур" в отеле "Сент-Францис" и направили туда клиентов для покупки процессоров. В люксе процессоры хранились в больших банках, чтобы создать впечатление, что чипы производятся и легко доступны. Клиенты не знали, что нижняя половина каждой банки содержала нерабочие чипы. Стоимость чипов составляла и, а документация стоила дополнительно. Пользователям предлагалось делать фотокопии документов – это был недорогой способ для MOS Technology распространять информацию о продукте. В предварительных спецификациях было указано всего 55 инструкций, не считая инструкции Rotate Right (ROR), которая не поддерживалась на этих ранних чипах. В обзорах в Byte и EDN отмечалось отсутствие инструкции ROR. Следующая редакция схемы исправила эту проблему, и в спецификации за май 1976 года было указано 56 инструкций. Peddle хотел, чтобы каждый заинтересованный инженер и любитель имел доступ к чипам и документации, в то время как другие компании-производители полупроводников хотели работать только с "серьезными" клиентами. Например, Signetics представила микропроцессор 2650, и в ее рекламе читателей просили запросить информацию на фирменном бланке своей компании. + Различия в распиновке Pin 6800 6501 6502 2 Halt Ready Ready 3 ∅1 (вх) ∅1 (вх) ∅1 (вых) 5 Действительный адрес памяти Действительный адрес памяти N. C. 7 Bus available Bus available SYNC 36 Enable Data bus Enable Data bus N. C. 37 ∅2 (вх) ∅2 (вх) ∅0 (вх) 38 N. C. N. C. Set overflow flag 39 Three state control N. C. ∅2 (вых)
Иск Motorola
Введение 6501/6502 в печатных изданиях и на выставке Wescon имело огромный успех. Однако, широкое освещение в прессе привлекло внимание компании Motorola. В октябре 1975 года Motorola снизила цену на один микропроцессор 6800 до 6000 долларов. 3 ноября 1975 года Motorola обратилась в федеральный суд с иском о запрете производства и продажи микропроцессорной продукции компанией MOS Technology. Также был подан иск о нарушении патентных прав и хищении коммерческой тайны. Motorola утверждала, что семь бывших сотрудников перешли в MOS Technology для разработки микропроцессорной продукции этой компании. Motorola, будучи компанией с оборотом в миллиард долларов, имела веские основания для иска и могла позволить себе дорогостоящих адвокатов. 30 октября 1974 года Motorola подала множество заявок на патенты семейства микропроцессоров и получила двадцать пять патентов. Первый патент был выдан в июне 1976 года, а второй – Биллу Меншу 6 июля 1976 года на компоновку чипа 6820 PIA. Эти патенты охватывали шину 6800 и взаимодействие периферийных чипов с микропроцессором. Motorola начала производство транзисторов в 1950 году и обладала обширным портфелем патентов в области полупроводников. Компания Allen Bradley решила не вступать в судебную тяжбу и продала свою долю в MOS Technology обратно основателям. В иске были названы имена четырех бывших инженеров Motorola: Чака Педдла, Уилла Мэтиса, Билла Менша и Рода Оргилла. Все они были указаны в качестве изобретателей в заявках на патенты 6800. В ходе судебного разбирательства Motorola обнаружила, что один из инженеров, Майк Дженс, проигнорировал указания Педдла и передал свои проектные документы 6800 в MOS Technology. В марте 1976 года, оказавшись в стесненных финансовых обстоятельствах, независимая компания MOS Technology была вынуждена пойти на мировое соглашение. Они согласились прекратить выпуск процессора 6501, выплатить Motorola 10 000 долларов и вернуть документы, которые Motorola считала конфиденциальными. Обе компании согласились на перекрестное лицензирование патентов на микропроцессоры. В мае того же года Motorola снизила цену на один микропроцессор 6800 до 4000 долларов. К ноябрю компания Commodore приобрела MOS Technology.
Компьютеры и игры
После решения юридических проблем, MOS по-прежнему сталкивалась с задачей привлечения разработчиков к своему процессору, что побудило Чака Пэддла разработать одноплатный компьютер MDT 650 ("терминал разработки микрокомпьютеров"). Другая группа внутри компании создала KIM 1, который продавался в полусобранном виде и мог быть превращен в полноценную систему с добавлением стороннего компьютерного терминала и компактного кассетного магнитофона. Несмотря на успешные продажи целевой аудитории, компания обнаружила, что KIM 1 также пользовался спросом у любителей и энтузиастов. Система управления, обучения и разработки Rockwell AIM 65 также оказалась востребованной. Программное обеспечение в AIM 65 было основано на программном обеспечении MDT. Еще одним схожим продуктом был Synertek SYM 1. Одним из первых "публичных" применений этой разработки стал микрокомпьютер Apple I, представленный в 1976 году. Процессор 6502 затем был использован в Commodore PET и Apple II, оба выпущенных в 1977 году. Позже он применялся в 8-битных компьютерах Atari, Acorn Atom, BBC Micro и домашнем компьютере Commodore 64. Важным направлением использования семейства 6500 стали видеоигры. Первым, кто использовал эту архитектуру процессора, стала Atari VCS 1977 года, позже переименованная в Atari 2600. В VCS использовался вариант 6502 под названием 6507, имевший меньше контактов и, следовательно, мог адресовать только 8 КБ памяти. Были проданы миллионы консолей Atari, каждая из которых оснащалась процессором MOS. Значительное применение процессор нашел и в Nintendo Entertainment System и Famicom. 6502, использовавшийся в NES, представлял собой вторую версию от Ricoh, частичную систему на кристалле, лишенную режима двоично-десятичного кодирования, но включавшую 22 регистра, отображаемые в память, и аппаратную поддержку для генерации звука, считывания данных с джойстика и DMA для списков спрайтов. Этот процессор, обозначенный как 2A03 в NTSC-консолях и 2A07 в PAL-консолях (разница заключалась в коэффициенте делителя тактовой частоты и таблице поиска частот дискретизации звука), производился исключительно для Nintendo. Процессоры 6502 или их варианты использовались во всех дисководах Commodore для всех их 8-битных компьютеров, от линейки PET до Commodore 128D, включая Commodore 64. 8-дюймовые дисководы PET имели два процессора 6502. Atari использовала тот же 6507, что и в Atari VCS, для своих дисководов 810 и 1050, применяемых во всех своих 8-битных компьютерных линейках, от 400/800 до XEGS. В 1980-х годах популярный журнал по электронике Elektor/Elektuur использовал этот процессор в своей плате разработки микропроцессоров Junior Computer. CMOS-преемник 6502, WDC 65C02, также нашел применение в домашних компьютерах и игровых консолях. Apple использовала его в линейке Apple II, начиная с Apple IIc и более поздних модификаций Apple IIe, а также предлагала комплект для модернизации старых систем IIe с новым процессором. Чип Hudson Soft HuC6280, использовавшийся в TurboGrafx 16, был основан на ядре 65C02. Atari Lynx использовала специализированный чип под названием "Mikey", разработанный Epyx, который включал лицензированную ячейку VLSI VL65NC02. Вариант G65SC12 от GTE Microcircuits (переименованной в California Micro Devices) использовался в BBC Master. Некоторые модели BBC Master также включали дополнительный сопроцессор G65SC102.
Реестры
Как и его предшественник, 6800, процессор 6502 имеет очень мало регистров. Регистры 6502 включают один 8-битный регистр-аккумулятор (A), два 8-битных индексных регистра (X и Y), 7 битов флагов состояния процессора (P; от бита 7 до бита 0 это флаги отрицательного числа (N), переполнения (V), зарезервированный, прерывания (B), десятичного режима (D), запрета прерываний (I), нуля (Z) и переноса (C)), 8-битный указатель стека (S) и 16-битный счетчик команд (PC). Это сопоставимо с современным конкурентом, Intel 8080, который также имеет один 8-битный аккумулятор и 16-битный счетчик команд, но располагает шестью дополнительными универсальными 8-битными регистрами (которые можно объединять в три 16-битных указателя) и более крупным 16-битным указателем стека. Чтобы частично компенсировать недостаток регистров, в 6502 реализован режим адресации нулевой страницы, который использует один байт адреса в инструкции вместо двух, необходимых для адресации всей 64-килобайтной памяти. Это обеспечивает быстрый доступ к первым 256 байтам оперативной памяти за счет использования более коротких инструкций. Например, инструкция для добавления значения из памяти к значению в аккумуляторе обычно состоит из трех байтов: один для самой инструкции и два для 16-битного адреса. Использование нулевой страницы сокращает это до двух байтов, уменьшая общую длину инструкции и, следовательно, повышая производительность. Адресное пространство стека жестко привязано к странице памяти $01, то есть диапазону адресов $0100–$01FF (256–511). Доступ к стеку из программного обеспечения осуществляется через четыре инструкции с неявным режимом адресации, которые выполняют операции помещения (push) или извлечения (pop) аккумулятора или регистра состояния процессора. Тот же стек также используется для вызова подпрограмм с помощью инструкций JSR (переход к подпрограмме) и RTS (возврат из подпрограммы), а также для обработки прерываний.
Обращение
Чип эффективно использует индексные и стековые регистры с несколькими режимами адресации, включая быстрый режим "прямой страницы" или "нулевой страницы", аналогичный тому, что реализовано в PDP 8, который обеспечивает доступ к ячейкам памяти по адресам от 0 до 255 с использованием одного 8-битного адреса (что позволяет избежать цикла, обычно необходимого для получения старшего байта адреса). Код для 6502 использует нулевую страницу аналогично тому, как код для других процессоров использует регистры. В некоторых микрокомпьютерах на базе 6502 с операционной системой, операционная система занимает большую часть нулевой страницы, оставляя пользователю лишь несколько ячеек. Режимы адресации включают: неявный (1 байт инструкций); абсолютный (3 байта); индексированный абсолютный (3 байта); индексированная нулевая страница (2 байта); относительный (2 байта); аккумуляторный (1 байт); косвенный,X и косвенный,Y (2 байта); и непосредственный (2 байта). Абсолютный режим является режимом общего назначения. Инструкции перехода используют знаковый 8-битный сдвиг относительно инструкции, следующей за переходом; числовой диапазон от -128 до 127, таким образом, соответствует 128 байтам назад и 127 байтам вперед от инструкции, следующей за переходом (что эквивалентно 126 байтам назад и 129 байтам вперед от начала инструкции перехода). Аккумуляторный режим использует аккумулятор в качестве эффективного адреса и не требует операндов. Непосредственный режим использует 8-битный литеральный операнд.
Косвенный адрес
Косвенные режимы полезны для обработки массивов и других циклов. В режиме 5/6 циклов "(косвенно),y" 8-битовый регистр Y добавляется к 16-битному базовому адресу, прочитанному из нулевой страницы, который находится по одному байту, следующему за опкодом. Таким образом, регистр Y является индексным регистром в том смысле, что он используется для хранения фактического индекса (в отличие от регистра X в 6800, где базовый адрес хранился непосредственно и к нему можно было добавить непосредственный сдвиг). Увеличение индексного регистра для последовательного доступа к байтам массива занимает всего два дополнительных цикла. В менее часто используемом режиме "(косвенно,x)" эффективный адрес для операции находится по адресу нулевой страницы, сформированному путем добавления второго байта инструкции к содержимому регистра X. Используя индексированные режимы, нулевая страница фактически действует как набор до 128 дополнительных (хотя и очень медленных) адресных регистров. 6502 способен выполнять сложение и вычитание в двоичной или двоично-десятичной системе. Перевод процессора в режим BCD с помощью инструкции SED (установить флаг D) приводит к десятичной арифметике, в которой $99 + $01 даст $00 и установит флаг переноса (C). В двоичном режиме (CLD, сбросить флаг D) та же операция даст $9A и сбросит флаг переноса. За исключением Atari BASIC, режим BCD редко использовался в домашних компьютерных приложениях. См. статью "Hello, world!" для простого, но характерного примера языка ассемблера 6502.
Инструкции и операционные коды
Коды операций инструкций 6502 (опкоды) имеют длину 8 бит и имеют общую форму AAABBBCC, где AAA и CC определяют опкод, а BBB – режим адресации. Например, рассмотрим инструкцию ORA, которая выполняет побитовое ИЛИ между битами в аккумуляторе и другим значением. Код операции имеет форму 000bbb01, где bbb может быть 010 для непосредственного значения (константы), 001 для фиксированного адреса нулевой страницы, 011 для абсолютного адреса и так далее. Операнд хранится в стандартном little-endian формате 6502. 65C816, 16-битный CMOS-потомок 6502, также поддерживает 24-битную адресацию, что приводит к тому, что инструкции собираются с трехбайтовыми операндами, также расположенными в формате little-endian. Остальные 105 кодов операций не определены. В оригинальной конструкции инструкции, у которых младшие 4 бита (ниббл) были равны 3, 7, B или F, не использовались, что оставляло место для будущего расширения. Аналогично, столбец $2x содержал только одну запись – LDX #constant. Оставшиеся 25 пустых ячеек были распределены. Некоторые из этих пустых ячеек были использованы в 65C02 для предоставления как новых инструкций, так и модификаций существующих с новыми режимами адресации. Инструкции $Fx изначально были оставлены свободными, чтобы сторонние разработчики могли добавлять свои собственные инструкции, но в более поздних версиях 65C02 был стандартизирован набор инструкций для манипулирования битами, разработанный Rockwell Semiconductor.
Язык сборки
Инструкция на языке ассемблера 6502 состоит из мнемоники инструкции длиной в три символа, за которой следуют операнды (если они есть). Инструкции, которые не принимают отдельных операндов, но оперируют с одним регистром в зависимости от режима адресации, объединяют целевой регистр в мнемонике инструкции, поэтому ассемблер использует INX вместо INC X для инкремента регистра X.
Таблица инструкций
Матрица кодов операций для набора инструкций 6502. Режимы адресации: – аккумулятор, – непосредственный, – нулевая страница, – абсолютный, – косвенный, X – индексируется регистром X, Y – индексируется регистром Y, – относительный Старший ниббл Нижний ниббл 0 1 2 4 5 6 8 9 A C D E 0BRKORA (ind,X) ORA zpgASL zpgPHPORA #ASL A ORA absASL abs 1BPL relORA (ind),Y ORA zpg,XASL zpg,XCLCORA abs,Y ORA abs,XASL abs,X 2JSR absAND (ind,X) BIT zpgAND zpgROL zpgPLPAND #ROL ABIT absAND absROL abs 3BMI relAND (ind),Y AND zpg,XROL zpg,XSECAND abs,Y AND abs,XROL abs,X 4RTI EOR (ind,X) EOR zpgLSR zpgPHA EOR #LSR AJMP absEOR absLSR abs 5BVC relEOR (ind),Y EOR zpg,XLSR zpg,XCLI EOR abs,Y EOR abs,XLSR abs,X 6RTS ADC (ind,X) ADC zpgROR zpgPLA ADC #ROR AJMP (ind)ADC absROR abs 7BVS relADC (ind),Y ADC zpg,XROR zpg,XSEI ADC abs,Y ADC abs,XROR abs,X 8STA (ind,X) STY zpgSTA zpgSTX zpgDEY TXASTY absSTA absSTX abs 9BCC relSTA (ind),Y STY zpg,XSTA zpg,XSTX zpg,YTYA STA abs,YTXS STA abs,X ALDY #LDA (ind,X)LDX #LDY zpgLDA zpgLDX zpgTAYLDA #TAXLDY absLDA absLDX abs BBCS relLDA (ind),Y LDY zpg,XLDA zpg,XLDX zpg,YCLVLDA abs,YTSXLDY abs,XLDA abs,XLDX abs,Y CCPY #CMP (ind,X) CPY zpgCMP zpgDEC zpgINYCMP #DEXCPY absCMP absDEC abs DBNE relCMP (ind),Y CMP zpg,XDEC zpg,X CLDCMP abs,Y CMP abs,XDEC abs,X ECPX #SBC (ind,X) CPX zpgSBC zpgINC zpgINXSBC #NOPCPX absSBC absINC abs FBEQ relSBC (ind),Y SBC zpg,XINC zpg,XSEDSBC abs,Y SBC abs,XINC abs,XBlank opcodes (e. g., F2) and all opcodes whose low nibbles are 3, 7, B and F are undefined in the 6502 instruction set.
Детальное поведение
Вход процессора с не маскируемым прерыванием (NMI) реагирует на фронт, то есть прерывание вызывается падающим фронтом сигнала, а не его уровнем. Это означает, что схема прерывания по логическому ИЛИ не поддерживается напрямую. Однако, это также предотвращает вложенные прерывания NMI до тех пор, пока аппаратное обеспечение снова не деактивирует вход NMI, часто под управлением обработчика прерывания NMI. Одновременная активация линий аппаратных прерываний NMI и IRQ (маскируемого) приводит к игнорированию IRQ. Однако, если линия IRQ остаётся активной после обработки NMI, процессор немедленно отреагирует на IRQ, поскольку IRQ чувствителен к уровню. Таким образом, в архитектуре 6502 был реализован встроенный приоритет прерываний. Флаг B устанавливается 6502 путем периодической выборки выхода детектора фронта NMI и его входа IRQ. Сигнал IRQ, переведенный в низкий уровень, распознается только если прерывания IRQ разрешены флагом I. Если таким образом обнаружен запрос NMI или (маскируемое) IRQ, флаг B устанавливается в ноль и заставляет процессор выполнить инструкцию BRK вместо следующей инструкции, определяемой счётчиком программы. Инструкция BRK помещает состояние процессора в стек, при этом бит флага B устанавливается в ноль. По завершении выполнения инструкция BRK возвращает значение флага B в единицу. Это единственный способ изменить флаг B. Если какая-либо инструкция, отличная от BRK, помещает флаг B в стек как часть состояния процессора, флаг B всегда будет иметь значение единицы. Переход с высокого на низкий уровень на входе SO установит бит переполнения процессора. Это можно использовать для быстрой реакции на внешнее оборудование. Например, драйвер высокоскоростного устройства опроса может опрашивать аппаратное обеспечение один раз за три цикла, используя инструкцию Branch on oVerflow Clear (BVC), которая переходит на себя до тех пор, пока не произойдет переход SO в низкий уровень и не установится флаг переполнения. Commodore 1541 и другие дисководы Commodore используют эту технику для определения готовности сериализатора к передаче следующего байта данных с диска. Аппаратная и программная архитектура системы должна гарантировать, что переход SO не произойдет во время арифметических операций и не нарушит вычисления.
16-битовые производные
В настоящее время Western Design Center проектирует и производит процессор WDC 65C816S, 16-битный процессор со статической архитектурой ядра, являющийся преемником 65C02. W65C816S – это более новая версия 65C816, который является ядром компьютера Apple IIGS и лежит в основе процессора Ricoh 5A22, используемого в Super Nintendo Entertainment System. W65C816S включает в себя незначительные улучшения по сравнению с 65C816, из-за которых новый чип не является полностью аппаратно совместимой заменой более ранней версии. Одно из этих улучшений – переход к статической архитектуре ядра, позволяющий останавливать тактовую частоту в любой фазе без потери данных в регистрах. Доступный через дистрибьюторов электронных компонентов, по состоянию на март 2020 года W65C816S официально рассчитан на работу на частоте 14 МГц. Western Design Center также разработал и выпустил 65C802, представляющий собой ядро 65C816 с 64-килобайтным адресным пространством, заключенным в корпус, совместимый по распиновке с 65(C)02. 65C802 можно было установить на плату 6502, и он функционировал бы как 65C02 при включении, работая в "режиме эмуляции". Как и в случае с 65C816, последовательность из двух инструкций переводила 65C802 в "нативный режим", раскрывая его 16-битный аккумулятор и индексные регистры, а также другие функции 65C816. 65C802 не получил широкого распространения, и его производство было прекращено.