1

Тема: Сильные стороны 6502

Посмотрел намедни видео на ютубе, там чел рассуждает о советских ЭВМ. По всему видно, что он ярый фанат CPU8080 и ничего другого не признает. Кроме прочего, сильно удивляется, почему это разработчики Агата не создали его на 8080. И, внимание, авторитетно рассказывает, что это было бы полезно, ведь 8080 быстрее чуть ли не в трижды чем 6502 и красивее архитектурно.

На вкус и цвет, как говорится, но от чего такое происходит? Ну, допустим с автором видео всё понятно - он фанат 8080 и сознательно не хочет признавать иное. Но куча людей, а там очень много подписчиков, похоже верят в эту ахинею.

Почитав комментарии ужаснулся - подавляющее большинство олдскулеров и диванных экспертов просто не знают, даже минимум, подробностей о 6502. Или, что еще хуже, знают то, что им подсовывают в "нужном ключе" фанаты Z80 и 8080. Как вам такое:

"Очень слабый процессор, всего 1Мгц, у того же спектрума в три с половиной раза больше"

"Слабость не только в частоте, он еще и очень отсталый, даже не умеет операции между регистровыми парами"

И это я на память процитировал только айсберг. Кто-то что-то слышал о методах адресации (в контексте нулевой страницы), но особо никто ничего не понял - в итоге дорассуждались до того, что это тоже минус какой-то...

И знаете, оно практически везде так на русскоязычных форумах. А собственно, откуда взять доступную информацию по 6502 на русском? Её почти и нет.


Есть идея, начать собирать информацию для статьи, которая простым языком пояснит сильные стороны и красоту 6502. Что-то должно быть в противовес таким высказываниям как я привел выше. Но в то же время, не упускать и слабые стороны, объективно, без фанатизма.

Вижу разумным начать с составления конспекта статьи. Пока складывается вот такие тезы:

1) 6502 не имеет команд умножения, деления, сложения между регистровыми парами, как, например известный Z80. Пояснить что это не приговор - ведь всё это реализуется в 2-3 короткие команды, и за то же время. Таким образом, 6502 относился, скорее, к RISC-процессорам.


2) Написать, что методов адресации у 6502 больше. Первые 256 ячеек памяти с коротким адресом и быстрым доступом (нулевая страница), это фактически массив из 256 регистров общего назначения, которые могут использоваться, в т.ч. для индексной и косвенной адресации любой точки адресного пространства. Команда типа регистр/регистр выполняется на 6502 за вдвое меньшее количество тактов, чем на Z80.


Прошу мнения, как вы считаете, какие еще моменты должны быть затронуты. Можно в виде дополнительного пункта конспекта, а также готового абзаца.


P.S. Вот тут Олег адаптировал к Агату CP/M эпловскую, и в процессе очень показательно выступил 6502: https://t.me/agatcomp/1/31867 тоже наверное как пункт подойдёт?

2 Отредактировано garnizon (13-11-2024 18:44)

Re: Сильные стороны 6502

Дополнение от Олега:

Вообще достаточно сравнить команды с индексной адресацией, и всё станет ясно. У i8080 их вообще нет, а у Z80 это расширенные команды с префиксом (префикс тоже надо считать из памяти и декодировать). И в итоге у Z80 они занимают по 19 тактов. А у 6502 по 5-6. 19/5 получается примерно 4. Другой пример, команда теста бита памяти у Z80 выполняется 20 тактов, а у 6502 (да, там можно проверить только старшие 2 бита) - 3 такта для нулевой страницы и 4 такта для всей памяти. 20 / 3 это даже больше чем 4. Только выборка команды занимает 4 такта, и это число там примерно везде так и выходит. Да, регистров больше, это плюс. Но отсутствие нормальных вариантов адресации требует большого количества элементарных команд. А каждая команда - это минимум 1 байт в памяти и минимум 4 такта. В 2К системного монитора Агата и Apple 2 уместился полноценный дизассемблер. А в аналогичные 2К рк86-совместимых компьютеров ни у кого не получилось уместить практически ничего, кроме простейших команд работы с памятью.

Вроде бы ок, увеличили частоту в 4 раза и всё выровнялось. Но тут получается, что почти каждый такт процессор что-то делает с системной шиной (или выставляет адрес, или считывает данные, или делает рефреш на Z80). И получается, что максимум что можно использовать, чтобы поработать с шиной - интервал рефреша, а это всего один такт и только во время выборки команды. То есть, внешнее устройство должно работать тоже на частоте 4М и успевать считывать данные за тот короткий интервал, что процессор освобождает шину. Это нереально сделать, поэтому видео-контроллер тормозит процессор либо всё время, либо при обращении к видео-памяти. У 6502 каждые 500 нс гарантированно есть ещё 500 нс, когда внешние устройства могут делать с памятью всё что угодно. Это заложено в архитектуру процессора, чего в принципе нет ни у 8080, ни у z80.

По сути, 6502 использует схему DDR (double data rate), что позволяет при низкой тактовой частоте как минимум удвоить производительность. Это то, что сейчас используется во всех компьютерах.

Из статьи википедии про DDR: При использовании DDR SDRAM достигается удвоенная скорость работы, нежели в SDRAM, за счёт считывания команд и данных не только по фронту, как в SDRAM, но и по спаду тактового сигнала. За счёт этого удваивается скорость передачи данных без увеличения частоты тактового сигнала шины памяти. Таким образом, при работе DDR на частоте 100 МГц мы получим эффективную частоту 200 МГц (при сравнении с аналогом SDR SDRAM). В спецификации JEDEC[2] есть замечание, что использовать термин «МГц» в DDR некорректно, правильно указывать скорость «миллионов передач в секунду через один вывод данных».

3 Отредактировано LeoN (13-11-2024 07:14)

Re: Сильные стороны 6502

"Первое приближение", и он же самый главный профит: растактовки.

У 6502 от 2-х до 7-и тактов. А 65CE02 умеет от 1-о такта!
У i8080 от 4-х до 18-и тактов.
У Z80 от 4-х до 23-х тактов.

Ну и кто быстрее? ;)

Post's attachments

Attachment icon 6502.png 67.57 kb, 3 downloads since 2024-11-12 

Attachment icon 65CE02.png 484.53 kb, 5 downloads since 2024-11-13 

Attachment icon i8080.png 809.8 kb, 5 downloads since 2024-11-12 

Attachment icon z80-2.txt 19.26 kb, 9 downloads since 2024-11-13 

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

4 Отредактировано LeoN (13-11-2024 03:21)

Re: Сильные стороны 6502

Регистры и "регистровые пары".

Кроме аккумулятора есть два регистра X и Y. Они хоть и являются регистрами общего назначения (РОН), но всё же по бОльшей части являются именно индексными регистрами.

Однако, есть ещё нулевая страница памяти (Zero Page):
1. 256 регистров РОН
2. 128 "регистровых пар"
3. 64 штуки dword-регистров и т.д.
4. 128 16-битных указателей
5. пред- и пост- индексация


Богатый набор методов адресации - 13 видов!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

5 Отредактировано LeoN (13-11-2024 03:12)

Re: Сильные стороны 6502

У i8080 есть расширение - Z80.

У 6502 тоже есть расширения 65C02, 65CE02.
А есть ещё более "вкусное" расширение - 65C816:
1. это вообще 8/16-бит гибрид
2. разрядность аккумулятора/памяти назначается независимо от разрядности индексных регистров
3. умеет адресовать 16МБ памяти
4. 24 метода адресации!
5. инструкция копирования блока памяти тратит 7 тактов на байт. У Z80 такой же аналог LDIR тратит уже 21 такт на байт. В 3 раза медленнее!
6. забугорные комрады вдули ему 40МГц!

Был разработан W65C832S - 8/16/32-бит гибрид. Но, к сожалению, "в кремнии" так и не был выпущен...

Post's attachments

Attachment icon 65C816.png 81.7 kb, 4 downloads since 2024-11-12 

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

6

Re: Сильные стороны 6502

Именно 6502 являлся вдохновлением для разработчиков ARM!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

7 Отредактировано LeoN (13-11-2024 03:41)

Re: Сильные стороны 6502

"Вижу" всего три минуса у 6502:
1. 8-битные индексные регистры (16-то лучше!)
2. 8-битный указатель стека (16-то лучше!)
3. дополнительный такт в некоторых методах адресации при пересечении страниц памяти (но грамотный программер успешно нивелирует эту неприятность)

Отсутствие у 6502 инструкций умножения/деления - так у i8080/Z80 их тоже нет!!!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

8 Отредактировано LeoN (13-11-2024 09:28)

Re: Сильные стороны 6502

"Очень слабый процессор, всего 1Мгц, у того же спектрума в три с половиной раза больше"
"Слабость не только в частоте, ..."

Ну что сказать, это просто полные невежды...

NES: 1.78МГц
SNES: 3.56МГц
BBC Micro: 2МГц
Apple III: 1.8МГц
Apple IIgs: 2.8МГц
Apple IIc Plus: 4МГц
Commodore 128: 2МГц
Atari 400/800/XL/XE: 1.79МГц
PC Engine, он же TurboGrafx-16: 1.79/7.16МГц (выбирается программно)

"Bill Mensch said in an interview that in the early days of the NMOS 6502, they were all tested in a hand-made tester, and to be marked for 1MHz, they had to be able to run at 2, to be marked as 2MHz they had to be able to run at 4, etc., and he had ones that would run at 10MHz even in the 1970's." (отсюда).

Вот тут фото со всякими частотами есть.

Post's attachments

6502 Clock.png, 6.2 kb, 317 x 107
6502 Clock.png 6.2 kb, 9 downloads since 2024-11-13 

65C02 Clock.png, 90.99 kb, 661 x 567
65C02 Clock.png 90.99 kb, 10 downloads since 2024-11-13 

65CE02 Clock.png, 54.29 kb, 697 x 289
65CE02 Clock.png 54.29 kb, 9 downloads since 2024-11-13 

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

9 Отредактировано Voldemar0 (13-11-2024 11:27)

Re: Сильные стороны 6502

Тут неплохо бы ещё вспомнить о том, что написано на первых же страницах у Мымрина: Агат - ученический или бытовой компьютер. Соответственно, ему по штату не положено быть слишком мощным. Возможно, тут играло роль то, как распределялись имеющиеся процессоры. Т.е. дело не в тех. характеристиках, а в доступности его для ЛЭМЗ и самой задачи, которая ставилась перед Агатом. Дефицит же.

И ещё момент: даже если есть разные процы, играет роль ещё и:

1) Наличие под них софта, его разнообразие и соответствие задачам. Причем именно на момент начала проекта, а ней сейчас, когда в интернете всё есть ("Софт для Apple ][ есть ? Ну так мы сейчас почти то же самое слепим и тоже им будем пользоваться или понапишем ещё столько же - там же всё просто...").

2) Понимание о некоей общей эффективности: интеграл от производительности, софта, от его доступности, разнообразии, от производительности проца c учётом конкретных имеющихся компиляторов, его доступности (К началу производства и, например, ко 2-й, 3-й партии выпуска... Через год или три), удобству разработки под него, стоимости..... Если такого понимания нет (или уверенности в нём), то почему бы не попробовать слепить 3-5-10 компьютеров на разных процах и пустить их в разные министерства-ведомства ? А там посмотрим, кто выиграет забег лет за 5-10. Ну вот Агату и достался 6502. Другим компам - другие процы.

3) Кстати, а упомянул ли кто нибудь сложность шины и обвеса разных процессоров ? Так-то, тоже не последняя характеристика.

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

Я даже могу вполне допустить мысль, что тех. характеристики процов были вообще вторичны.

10 Отредактировано Voldemar0 (14-11-2024 06:30)

Re: Сильные стороны 6502

Вообще, производительность проца - дело очень непростое.
С прикладной точки зрения она, нередко, дискретна.

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

Потом появились процы, которые успевали распаковывать видео налету. И фильмы, с качеством лучше чем VCR, стало возможно хранить на 1-2 CD-дисках. А без CD-дисков, на тот момент, сам по себе проц ещё мало что решал. Но потом появились здоровые HDD, всё остальное стало не очень важно. Но фильмы стало проще найти в цифре, чем на кассете.

Так вот в начале 80-х само наличие микропроцессора в железке - это уже был мощный шаг, который отличал любую другую железку от той, где стоял микропроцессор. А 1-2-4 МГц - это уже были не важные подробности. Они будут важными только для поколения, для которого микропроцессор станет повседневностью, когда большинство пользователей уже перестанут быть разработчиками и будут вынуждены бежать за тем железом, на которое ориентируются разработчики софта.

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

Какая ступень на самом деле стала следующей ? Для меня - это жесткие диски. А вовсе не частоты. Может быть разрядность. 16 бит лучше чем 8. Но это важно только на ассемблере. Который перестал иметь былое значение где-то за порогом 10-16 МГц.

11

Re: Сильные стороны 6502

Voldemar0 пишет:

3) Кстати, а упомянул ли кто нибудь сложность шины и обвеса разных процессоров ? Так-то, тоже не последняя характеристика.

Дополнил второе сообщение этого топика.

12 Отредактировано garnizon (13-11-2024 19:50)

Re: Сильные стороны 6502

Voldemar0 пишет:

Вообще, производительность проца - дело очень непростое.

Так вот смысл желаемой статьи - как раз не хотелось бы сваливать в прямое сравнение характеристик по принципу "кто круче".
Допустим напрямую сравнивать 6502 с другими CPU по числу "операции в секунду" не всегда просто понятно. Потребуется подробное выяснение того, каких операций и в каких условиях, возможно сделать в секунду столько.
В любом случае в результате свалимся в сравнение пользовательской производительности систем, которые построены на этих процах.

Идея как раз в том, чтобы заполнить пустоту. Указать какие сильные стороны есть у 6502.

Общих рассуждений, как правильно сравнивать CPU и прочее в сети полно. Текстов и видео о том какие крутые 8080 и Z80 - тоже полно. А вот про то, почему 6502 тоже крутой, пусть иначе красив, но иногда даже круче - такой инфы почти нет совсем.

В результате этого, диванные теоретики объясняют: 6502 стоил дешевле других, именно потому что он в общем-то похож на другие 8-бит процы, но  весь из себя урезанный по возможностям, да еще и на низкой частоте работает.

И это уже превратилось в стереотип. Вот пример:
Мне три человека говорили что был цикл статей в ZX-ревю, где некий Веремеенко подключал видеопроцессор (6538) от Денди, напрямую к спектруму. И в итоге напрямую не удалось, так и пришлось кроме 6538 держать на борту еще основной процессор от денди 6527 (это в целом 6502). И все трое объяснили это ущербностью 6502. А я вот взял и почитал о чём там пишет этот Веремеенко... Вообще всё наоборот оказалось. 6502 по контроллеру ПДП перекидывал инфу в 6538 и всё успевал, а Z80 по скорости даже самой быстрой OTIR не дотянулся. И что, их трое таких? Как же, наверняка еще куча скажет всё наоборот.

13 Отредактировано avivanov76 (14-11-2024 01:56)

Re: Сильные стороны 6502

Это, случайно, не это видео https://www.youtube.com/watch?v=TV_YWpBxoS0?
Тут на 32 минуте автор сравнивает 6502 и ВМ80 и потом удивляется, почему Агат не сделали на ВМ80. Сравнение очень наивное. Например, в лоб сравниваются мегагерцы без учета количества тактов, требующихся для выполнения каждой инструкции. Еще смешнее сравнение числа кодов инструкций. Например, для пересылки регистров у ВМ80 есть 51 код, а у 6502 - всего 6. Понятно, что у ВМ80 больше, только это одна и та же инструкция, просто для разных пар регистров. И даже регистры 6502 посчитаны неверно. Указатель стека - это хоть и не очень удобный в использовании, но все таки четвертый регистр.

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

С другой стороны, написать про 6502 как фанат я не могу. Так уж получается, что когда человек начинает решать какие-то конкретные задачи на ассемблере, то он перестает быть диванным аналитиком. А когда он осваивает язык ассемблера больше, чем одного процессора - он перестает быть фанатом. Я еще в школе изучил ассемблер 8080, 6502 и Z80, в институте - ассемблер PDP-11, VAX и Motorola 68000, на работе программировал на ассемблере 8086. И теперь у меня отношение к разным процессорам примерно ровное и совсем не фанатское :) Да и нет у 8-разрядных процессоров из середины 1970-х таких фич, которые могли бы поменять производительность на порядок.

***

Теперь к достоинствам и недостаткам.

I. Безусловные достоинства.

Первое и самое главное достоинство 6502 - его низкая цена. В тот момент, когда появился 6502, Motorola 6800 и Intel 8080 продавались по 180 долларов. 6502 продавался по 25. Разница была огромная, процессор сразу пошел во встраиваемую электронику. Он использовался во всяких промышленных контроллерах, регуляторах, кардиостимуляторах, автомобильной электронике. Я думаю, что туда больше процессоров пошло, чем в персональные компьютеры и игровые приставки.

Вообще, надо правильно понимать: 6502 - это был Celeron для того времени. Когда пишут, что он был слабее, то совершенно правильно пишут. Его и создавали как удешевленный аналог Motorola 6800. Просто слабее он был совсем чуть-чуть, а вот дешевле он был существенно.

Конечно, в СССР фактор цены не работал. В СССР все цены устанавливал Госкомцен. Как он это делал - загадка, но наверно в основе лежал анализ экономических показателей. И поскольку ВМ80 применялся намного шире, то и цена у него, скорее всего, была бы ниже, чем у возможного аналога 6502.


Второе достоинство - удобное тактирование. Первые полтакта процессор работает с шиной, вторые полтакта шина свободна. И это всегда выполняется. В результате очень легко строить схемы, где с памятью работают два устройства. Например, в Apple (и в Агате) вторые полтакта использует дисплейный контроллер. Другие процессоры менее предсказуемые, поэтому приходится делать схемы арбитража, которые останавливают процессор, чтобы дисплейный контроллер мог прочитать память (смотри Спектрум).

Если сравнивать с ВМ80, то надо еще учесть, что он требовал отдельной микросхемы тактового генератора ГФ24. А у 6502 генератор встроенный - кварц можно подключить между выводами Ф0 и Ф1. И это тоже ведет к упрощению и удешевлению схемы. В 8085 такая фишка тоже появилась, но это было на год позже.

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


Третье достоинство - одно напряжение питания. Да, у Z80 оно тоже одно, но у ВМ80 их три и это неудобно.


II. Мифы

Все время натыкаюсь на утверждение, что 6502 - это RISC процессор. Проблема в том, что термин RISC часто переводят как "вычислитель с сокращенным набором инструкций", хотя на деле это "вычислитель с набором упрощенных инструкций". Самих инструкций у современных RISC процессоров не меньше, чем у CISC. Просто инструкции эти более простые.

Например, у RISC процессоров обычно нет инструкций, модифицирующих что-то в памяти. Инструкции, которые работают с памятью, позволяют только пересылать данные. А инструкции, которые что-то вычисляют, работают только с регистрами. Вот это и называется "упрощенные инструкции". И стандартный подход в RISC - загрузить данные в регистры, которых там очень много (иногда сотни), потом обработать эти данные на регистрах, а потом - выгрузить результаты в память. Также у RISC одна инструкция обычно выполняется за 1 такт.

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


Также сомнительное утверждение, что создатели ARM вдохновлялись 6502. В своих воспоминаниях https://archive.computerhistory.org/res … 01-acc.pdf они пишут, что после создания BBC-Micro они искали новый процессор для 16-разрядной версии. Они ездили по разным компаниям-производителям. В том числе приехали и в Western Design Center, где создавался 65816. Так вот, впечатлило их то, что весь WDC состоял из нескольких коттеджей, в которых Билл Менш и несколько студентов-стажеров чертили процессоры на кульманах и выклеивали топологии из рубилита. То есть, вдохновил их не сам процессор, а то, какой маленькой командой он создавался и насколько простые технологии для этого использовались. Посмотрев на это они и решили, что смогут создать процессор сами.
Что интересно, 65816 им не понравился.


III. Инструкции и способы адресации

Вообще, я мог бы тут страниц 20 написать, но смысла не вижу. Поэтому скажу только основную мысль: выхватывать какие-то инструкции и способы адресации в отрыве от конкретных программ, и утверждать, что они дают какое-то офигенное преимущество - это неправильно. Это обсуждение сферического коня в вакууме.

Даже если у какого-то процессора есть инструкция, которая работает в 5 раз быстрее, чем у 6502, это не значит, что в реальной программе можно будет получить такое же преимущество в скорости. Есть инструкции перед ней, которые загружают нужные аргументы, есть инструкции после, которые как-то используют результаты, поэтому смотреть их надо все вместе. И производительность оценивать тоже.

Ради прикола приведу такой пример. В интерпретаторе Бейсиков Apple и Агат есть процедура получения следующего токена CHRGET. Процедура должна взять очередной токен программы на Бейсике, и увеличить указатель на 1. Казалось бы, зачем вообще выносить процедуру в память? Ведь у 6502 есть такая удобная косвенно-индексная адресация по Y!

А что сделала компания Microsoft? Она взяла обычную команду LDA с абсолютной адресацией, а при инкременте указателя изменяет адрес, заданный в команде LDA. Спрашивается, зачем?

А затем, что косвенно-индексная адресация по Y подразумевает, что будет использоваться регистр Y. Но процедура CHRGET обычно вызывается в цикле. А значит Y скорее всего уже занят, и его придется где-то сохранять. А при выходе из процедуры - восстанавливать.

И что получается?

Вот версия с косвенно-индексной адресацией по Y:

        STY SAVY      ; 3
        LDY INDEX     ; 3
        LDA (PTR), Y  ; 5
        INY           ; 2
        STY INDEX     ; 3
        BNE M2        ; 3
        INC PTR
M2:
        LDY SAVY      ; 3

Если переход на M2 выполняется, нужно 22 такта.

Вот версия Microsoft:

M:
        LDA PTR ; 4
        INC M+1 ; 5
        BNE M2  ; 3
        INC M+2
M2:

Если переход на M2 выполняется, нужно 12 тактов. Вот что значит учитывать все вместе.

14 Отредактировано Voldemar0 (14-11-2024 09:08)

Re: Сильные стороны 6502

> Видно, что 6502 - это полная противоположность. У него ничего нельзя обработать на регистрах, зато почти все инструкции могут обрабатывать данные сразу из памяти.

Тут я че-то не понял.

Группа команд INC/DEC: INX, INY, INC, DEX, DEY, DEC - одинакого работают как с памятью так и с индексными регистрами.
Группа команд ROL, ROR, ASL, LSR - тоже одинакого работает как с памятью так и с регистром A.
Группа команд PHA, PLA, Txx, LDx, STx - гоняют данные между регистрами и памятью.
Группа команд ADC, AND, EOR, ORA, SBC, CMP - используют два аргумента: память и регистр A, при этом результат в регистре A.
Группа команд управления флагами и счётчиком адреса - ну хотя бы она работает только с регистрами (но это одинакого во всех процах).

Тут как -то совсем не прослеживается приоритет регистров или внешнего ОЗУ. Почти ровно 50/50.

--

У 6502 регистров мало и это сразу сказывается на проектировании кода (если пишешь на асме).
Но я бы не сказал, что это как-то что-то сильно ломает.
Просто код всегда делится на две части: совсем мелкие процедуры, на которые хватает регистров проца и более крупные, на которых уже не хватает. В соответствии с этим, на уровне мелких процедур, стараешся всё впихнуть в регистровый файл, а на уровне более крупных процедур сразу расписываешь внешние переменные и уже не греешь мозги, чтобы всё уложить в регистры. Меняя процессор, уже имея опыт, чуйкой сразу проводишь эту грань.

Примерно так:
6502:
Процедуры "до 5 команд" - это мелочь, стараешся в них сохранить значения регистров. Возможно, кроме того, через который возвращается результат. Если "до 15 команд" - стараешся сохранить хотя бы какие-то регистры.
В более крупных процедурах проще раскидывать их переменные по ОЗУ. Если не все переменные, то их бОльшую часть.

i386:
(Тут, в первую очередь, по опыту разработки эмулятора Агата.)
Выделяешь 1-2 регистра под какие-то глобальные переменные (например, %bx - счётчик адреса виртуальной машины, %eax - под аргумент или результат функции), остальные (кроме сегментных регистров) можно модифицировать свободно на любом уровне. Если модифицировать нельзя, то, скорее всего, эта процедура "локальная", т.е. используется только
в каком-то небольшом участке кода и расположена где-то рядом с ним.

AVR:
При его 32-х регистрах есть немало кода, в котором вообще вся прога работала только с регистрами :)
Выделять отдельное ОЗУ приходилось не частно, например: в проектах MP3-плейера, Мост-2 и аппаратного отладчика для Агата.
Из-за огромного регистрового файла тут меняется сам подход, хранение в ОЗУ становится дополнением, а не основным средством. Например, под глобальные переменные раздаём R8-R15, под глобальные переменные, используемые в обработчиках прерываний R0-R7, под аргументы и результаты функций R16-R19, а использование R20-R31 сильно зависит от конкретного кода.

Стек более-менее широко использовался мной только в коде 6502.
В коде i386 и AVR - только для адресов возвратов из подпрограмм.

15

Re: Сильные стороны 6502

Voldemar0 пишет:

Тут как -то совсем не прослеживается приоритет регистров или внешнего ОЗУ. Почти ровно 50/50.

Да, я несколько не про то написал. Одно из важных отличий RISC процессоров - это LOAD/STORE архитектура, когда только инструкции пересылки данных и могут обращаться к памяти. Все инструкции, которые что-то вычисляют, работают только с регистрами. Собственно, за счет этого и достигается упрощение инструкций.

Вообще, вся затея RISC состоит в ускорении выполнения инструкций. Где-то в начале 80-х IBM исследовала существовавшие на то время процессоры, и получилось, что у них, грубо говоря, 80% времени использовалось только 20% инструкций. Отсюда и мысль: давайте только эти 20% инструкций и будем ускорять.

Как ускорять? Разбить каждую инструкцию на одинаковые шаги и сделать конвейер. Чтобы выполнить любую инструкцию, нужно ее 1) декодировать; 2) получить первый аргумент; 3) получить второй аргумент; 4) выполнить действие; 5) сохранить результат. Если в процессоре будет конвейер на 5 стадий, каждая из которых будет делать одно из перечисленных действий, то получится что с выхода конвейера на каждом такте будет появляться результат выполнения инструкции. Так и получается темп 1 такт на инструкцию.

Вот только что делать, если у всех инструкций разная длина, и куча способов адресации? Вот, например, чтобы 6502 выполнил инструкцию ADC с индексно-косвенной адресацией надо сделать аж 7 шагов:
1) декодировать инструкцию и увеличить счетчик команд
2) прочитать байт адреса и увеличить счетчик команд
3) сложить прочитанный байт с содержимым регистра X и поместить результат на шину адреса
4) прочитать первый байт адреса из нулевой страницы и запомнить его во временном регистре данных
5) увеличить адрес, полученный в шаге 3 на 1
6) прочитать второй байт адреса из нулевой страницы и поместить новый адрес на шину адреса
7) прочитать аргумент команды ADC и сложить его с аккумулятором

Ясное дело, что на архитектуру RISC это не ложится.

Во-первых, такую последовательность действий нельзя сделать без микрокода. Микрокод - это фактически маленькая программка, которая определяет, как выполнять инструкцию. В 6502 вся эта последовательность действий хранится в ПЛМ. ПЛМ довольно медленная, поэтому в RISC микрокод не используется. Там все делается на жесткой логике и иметь сложные инструкции очень невыгодно.

Во-вторых, с инструкциями разной длины и сложности конвейер будет простаивать все время и 1 такт на инструкцию мы никогда не получим. Совсем убрать простои нельзя, но можно уменьшить их число. Для этого в RISC формат инструкций максимально упрощен - большинство их имеет одинаковую длину и обращаться они могут только к регистрам. Заодно простой формат упрощает декодирование инструкций. Регистров сделано много, поэтому процессор может долго работать не обращаясь к памяти и на таких участках разгоняется до скорости 1 такт на инструкцию.

Короче, RISC диктует вполне конкретную архитектуру процессора и 6502 не имеет с ней практически ничего общего.

***

Пока писал, вспомнил еще одно достоинство 6502. Правда оно очень специфическое. Дело в том, что он частично конвейеризован. Когда он читает очередную инструкцию, он еще доделывает предыдущую. Это не настоящий конвейер как у RISC, у 6502 всего 2 стадии, но похоже, что он дает 1 такт выгоды на каждой инструкции. То есть, без этого "как бы" конвейера он бы выполнял инструкции от 3 до 8 тактов и был бы процентов на 20-25 медленнее.

16 Отредактировано LeoN (15-11-2024 16:38)

Re: Сильные стороны 6502

avivanov76 пишет:

Также сомнительное утверждение, что создатели ARM вдохновлялись 6502.

"To the RISC's basic register-heavy and load/store concepts, ARM added a number of the well-received design notes of the 6502." - отсюда.

И ещё полезная фича от 6502 - "The original (and subsequent) ARM implementation was hardwired without microcode, like the much simpler 8-bit 6502 processor used in prior Acorn microcomputers."

Русская педиа: "Разработку возглавили Уилсон и Фербер. Их основной целью было достижение низкой латентности обработки прерывания, как у MOS Technology 6502. Архитектура доступа к памяти, взятая от 6502, позволила разработчикам достичь хорошей производительности без использования дорогостоящего в реализации модуля DMA."

И ещё: "Компания Acorn правильно подошла к разработке процессора RISC, поскольку чип 6502, с которым они были хорошо знакомы, часто называют своего рода прототипом дизайна RISC. Интернет полон всевозможных мнений по этому поводу, и я не собираюсь порождать болезненный и утомительный спор, но хотя бы в благодарность этой статье просто поверьте, что 6502 обладает по крайней мере некоторыми чертами, очень похожими на RISC. Новый чип Acorn был настолько похож на RISC, что Софи Уилсон (Sophie Wilson), разрабатывая набор инструкций для нового процессора Acorn, кажется, явно вдохновлялась рядом концепций архитектуры 6502."

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

17

Re: Сильные стороны 6502

LeoN пишет:

To the RISC's basic register-heavy and load/store concepts, ARM added a number of the well-received design notes of the 6502.

И в английской вики встречается фигня :(
К этим таинственным design notes относится якобы очень быстрая обработка прерываний.

Но на самом деле, все 8-битные процессоры обрабатывают прерывания быстро. Потому что для этого нужно очень мало действий:
1) доделать текущую инструкцию
2) сохранить в стек состояние процессора (а оно у восьмибиток состоит из регистра флагов размером 1 байт)
3) сохранить в стек текущий счетчик команд
4) загрузить вектор прерывания в счетчик команд
5) начать обрабатывать прерывание

6502 обрабатывает прерывания не быстрее того же Z80. Насчет этого нашлась даже статья одного профессора из Испании, где он все аккуратно разложил по полчкам https://www.ele.uva.es/~jesus/sieves/onthe6502.pdf

Но все это не имеет никакого отношения к ARM, поскольку ARM - это намного более сложный процессор.

Во-первых, у него есть конвейер. В конвейере одновременно находится несколько инструкций на разных стадиях выполнения. Часть из этих инструкций уже что-то посчитала и ждет выгрузки результатов. И тут бац - прерывание. Процессор вынужден при этом отменять недовыполненные инструкции, "прокручивать фарш назад", потому что инструкции уже могли что-то поменять в том же регистре флагов.

Во-вторых, у него есть виртуальная память. С ней еще веселей: в процессе выполнения инструкции может произойти прерывание при обращении к странице, которая физически отсутствует в ОЗУ. И тут нельзя доделать инструкцию, надо обязательно начать ее выполнять заново после обработки этого прерывания.

Спрашивается, как сюда пришить рекомендации по проектированию от 8-битного процессора? Мне кажется никак! Слишком разное железо.


LeoN пишет:

The original (and subsequent) ARM implementation was hardwired without microcode, like the much simpler 8-bit 6502 processor

Нет, 6502 не был hardwired, там была ПЛМ. Выше уже писал.


LeoN пишет:

Архитектура доступа к памяти, взятая от 6502, позволила разработчикам достичь хорошей производительности без использования дорогостоящего в реализации модуля DMA

Ужас. Люди нахватаются умных слов, потом бросаются ими направо и налево :)
Архитектура доступа к памяти 6502 состоит в том, чтобы выставить на шину адрес и сигнал R/!W, а по сигналу Ф0 совершить обмен данными. Похожим образом работает почти любой процессор.

DMA не модуль. Это просто способ просигналить процессору, что другое устройство хочет воспользоваться шиной и процессор должен приостановить работу. Ничего в этом дорогостоящего нет. А самое прикольное, что в Acorn Archimedes, где использовался первый ARM, DMA использовалось видеоконтроллером :)


В статье на Хабре тоже какая-то каша. Причем, идущая из английского оригинала. Вот этот абзац вообще как понимать?

Новый чип Acorn был настолько похож на RISC, что Софи Уилсон (Sophie Wilson), разрабатывая набор инструкций для нового процессора Acorn, кажется, явно вдохновлялась рядом концепций архитектуры 6502.

То есть, вдохновлялись 8-разрядным процессором с 4 регистрами без конвейера, и в результате сделали 32-разрядный процессор с 16 регистрами, конвейером, другой шиной и совершенно непохожей системой команд? А в чем тогда вдохновение состояло?
Или просто где-то ученый изнасиловал журналиста?


***

В воспоминаниях разработчиков ARM нашел место, где они хвалят 6502. Хвалят пропускную способность его шины. 6502 обращается к памяти в каждом такте, в результате на частоте 1 МГц он делает миллион обменов данными в секунду. Это рекорд для 8-разрядных процессоров, и даже 32-разрядные процессоры типа Motorola 68000 не могли таким похвастаться. У Motorola обмен идет раз в 4 такта. А если вспомнить наш 16-разрядный К1801ВМ1, то у него на регистровых операциях идет одно обращение к памяти раз в 10 тактов.