2014-12-07 2 views
1

В последнее время я пишу (или пытаюсь) эмулятор для 6502 NES CPU.Почему некоторые процессоры имеют неофициальные коды и/или ошибки?

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

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

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

+1

Этот вопрос не соответствует теме, поскольку речь идет о аппаратных средствах, а не о программировании, как описано в [справочных] рекомендациях. –

+0

У каждого процессора есть ошибки. Но да, 6502 был особенно неприятный мешок из них. Фиксация масок очень дорогая, поэтому всегда нужно компромисс документировать или исправлять ошибку. И 6502 был особенным, это было очень * дешево. –

+0

@KenWhite Я проверял рекомендации, и вы, возможно, были правы ... любое предложение о том, где я должен спрашивать об этом? –

ответ

4

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

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 регистре.

+0

@ Eight-BitGuru: Оба эти мнения являются вашими мнениями, а не фактами. Не могли бы вы поддержать свое мнение с каким-то объяснением, почему вы так думаете? – Guffa

+0

@ Guffa посмотреть комментарии к вопросу, почему вопрос не соответствует теме. Я думаю, что причина, по которой они чувствуют, что это, похоже, не отвечает на вопрос, состоит в том, что он не отвечает * почему * ошибки существуют. – AdamMc331

+0

Второй - это не мнение.В старых процессорах использовалось декодирование с использованием проводной проводки. Дешевле не добавлять дополнительную логику, которая гарантирует, что операция находится в документации. Это объективные факты. Появление недокументированных инструкций является следствием. – Tommy

Смежные вопросы