Почему некоторые процессоры имеют неофициальные коды и/или ошибки?

В последнее время я пишу (или пробую) эмулятор для процессора 6502 NES.

Я узнаю много много вещей, некоторые из них меня действительно удивляют, и мне было интересно, как это объяснить, в частности, мне пришли в голову две вещи

  1. Наличие багов, в частности у 6502 похоже баг в режиме косвенной адресации, по крайней мере для первых процессоров (затрагивает используемый в NES)
  2. Неофициальные коды операций: Опять же, действительно удивительно, что существуют неофициальные коды, которые можно использовать, некоторые из них кажутся совершенно бесполезными (например, DOP и TOP, которые являются вариациями NOP), а некоторые из них кажутся композицией других кодов операций ( такой SAX или DCP).

Вопрос в том, как возможно, что при производстве миллионов этих процессоров они оказались с ошибками (такими как режим косвенной адресации), а также, с какой стати вы, как производитель, включаете неофициальные коды операций, которые могут быть удалены в следующих версиях? ? Это происходит и с более новыми процессорами?


person Juan Antonio Gomez Moriano    schedule 07.12.2014    source источник
comment
Этот вопрос кажется не по теме, поскольку он касается оборудования, а не программирования, как определено в рекомендациях справочного центра.   -  person Ken White    schedule 08.12.2014
comment
В каждом процессоре есть ошибки. Но да, 6502 был особенно неприятным из них. Исправление масок стоит очень дорого, поэтому документирование или исправление ошибки всегда является компромиссом. А 6502 был особенным, он был очень дешев.   -  person Hans Passant    schedule 08.12.2014
comment
@KenWhite Я проверял рекомендации, и, возможно, вы правы ... есть предложения, где мне спросить об этом?   -  person Juan Antonio Gomez Moriano    schedule 08.12.2014
comment
Переместил вопрос суперпользователю, где ему место.   -  person Juan Antonio Gomez Moriano    schedule 08.12.2014
comment
Также, возможно, актуально: в те времена ЦП вытягивали вручную на огромном столе, а затем фотографировали. Это довольно много ручной работы. Были бы ошибки. Примером большего масштаба является порт дисковода C64. На последней плате не было соединения, которое можно было обойти программным обеспечением, но оно значительно усложняло работу. В основном любой другой микродиск был намного быстрее.   -  person Tommy    schedule 09.12.2014
comment
Возможно релевантно: llx.com/~nparker/a2/opcodes.html   -  person Ivan X    schedule 21.12.2014


Ответы (1)


1: Иногда встречаются ошибки даже в популярных и предположительно хорошо протестированных процессорах, как, например, ошибка Pentium FDIV. В любой системе, которая достаточно сложна, чтобы быть действительно полезной, есть ошибки.

2: Существование недокументированных кодов операций было в основном для упрощения логики в процессе идентификации кода операции.

Если мы посмотрим, например, на операции LDY, LDA, LDX и LAX (режим нулевой адресации страниц), значения кодов операций будут следующими:

operation  hex  binary
-----------------------------
LDY        A4   10100100
LDA        A5   10100101
LDX        A6   10100110
LAX        A7   10100111

Если вы посмотрите на младшие два бита, то увидите, что они использовались для указания цели операции. 00 означает регистр Y, 01 означает регистр A, 10 означает регистр X, а поскольку в 11 установлены оба бита, данные заканчиваются как в регистре A, так и в регистре X.

person Guffa    schedule 07.12.2014
comment
@Eight-BitGuru: И то, и другое — всего лишь ваше мнение, а не факты. Не могли бы вы подкрепить свое мнение каким-то объяснением, почему вы так думаете? - person Guffa; 08.12.2014
comment
@Guffa смотрите комментарии к вопросу, почему вопрос не по теме. Я думаю, причина, по которой они считают, что это не отвечает на вопрос, заключается в том, что это не отвечает на вопрос, почему существуют ошибки. - person AdamMc331; 08.12.2014
comment
Второе не совсем мнение. В старых процессорах использовалось аппаратное декодирование операций. Дешевле не добавлять дополнительную логику, которая гарантирует, что операция соответствует документации. Это объективные факты. Следствием этого является появление недокументированных инструкций. - person Tommy; 09.12.2014
comment
@Tommy: Извините за путаницу. Комментарий ссылался на другой комментарий, который был удален, а не на ответ. - person Guffa; 09.12.2014
comment
@Guffa ... причина путаницы, скорее всего, заключается в следующем: я не могу читать @ комментарии. Как ты смеешь обвинять себя в том, что полагаешься на необоснованные мнения?!? - person Tommy; 09.12.2014