2014-12-07 13 views
1

최근에는 6502 NES CPU 용 에뮬레이터를 작성 중입니다.왜 일부 프로세서에는 비공식 코드 및/또는 버그가 있습니까?

나는 그들 중 일부는 정말 나를 놀라게 내가 사람들을 위해 설명 무엇이 궁금해서, 많은 많은 것들을 배우고, 특히 두 가지가 특히 내 마음

  1. 버그의 존재에 온 6502는 간접 어드레싱 모드에서 버그가있는 것으로 보입니다. NES에서 사용되는 첫 프로세서에 영향을 미칩니다.
  2. 비공식적 인 작동 코드 : 공식적으로는 사용할 수없는 코드가 있다는 것이 놀랍습니다. 그것들은 완전히 쓸모없는 것처럼 보입니다 (DOP와 TOP는 NOP의 변형입니다). 그리고 그들 중 일부는 다른 작업 코드 (SAX 나 DCP)의 구성처럼 보입니다.

질문은, 수백만 개의 CPU를 제조 할 때 버그 (간접 주소 지정 모드와 같은)가 발생했을 가능성이 있으며 제조사로서 비공식적 인 작동 코드가 포함 된 이유는 무엇입니까? 다음 개정에서 삭제 될 수 있습니까? 새로운 CPU에서도 이와 같은 현상이 발생합니까?

+1

이 질문은 하드웨어에 관한 것이므로 [도움말] 지침에 정의 된 프로그래밍이 아니기 때문에 주제가 아닌 것으로 보입니다. –

+0

모든 프로세서에 버그가 있습니다. 하지만 그렇습니다. 6502는 특히 고운 가방이었습니다. 마스크 고정은 비용이 많이 들기 때문에 버그를 문서화하거나 수정하는 것이 항상 트레이드 오프입니다. 그리고 6502는 특별했습니다. 매우 값 싸였습니다. –

+0

@KenWhite 가이드 라인을 확인해 본 결과 올바른 질문 일 수 있습니다. –

답변

4

1 : 종종 Pentium FDIV bug과 같이 일반적으로 잘 테스트 된 프로세서에도 버그가 있습니다. 정말 유용 할 정도로 복잡한 시스템에는 버그가 있습니다.

2 : 문서화되지 않은 작업 코드의 존재는 주로 작업 코드를 식별하는 프로세스에서 논리를 단순화하는 것이 었습니다. 우리는 (제로 페이지 어드레싱 모드)가 LDY, LDA, LDXLAX 작업에서 예를 들어 보면

, 동작 코드에 대한 값은 다음과 같습니다

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

당신이 낮은 두 비트를 보면, 당신은 그들이 작업의 대상을 지정하는 데 사용되었다는 것을 알 수 있습니다. 0010X 레지스터 수단은 Y 레지스터, 01A 레지스터 수단 및 11을 갖는 한 모두 비트 데이터가 AX 레지스터 양쪽 끝 설정.

+0

@ 8-BitGuru : 둘 다 당신의 의견 일 뿐이며 사실은 아닙니다. 당신이 왜 그렇게 생각하는지 설명하면서 당신의 의견을 뒷받침 해 줄 수 있습니까? – Guffa

+0

@ Guffa 질문에 대한 논평이 주제와 관련이없는 이유를 참조하십시오. 나는 그들이 질문에 답하는 것 같지 않다고 생각하는 이유는 그것이 왜 * 버그가 존재하는지에 대한 대답이 없기 때문이라고 생각한다. – AdamMc331

+0

두 번째는 실제로 의견이 아닙니다.오래된 CPU는 유선 연산 디코딩을 사용했습니다. 작업이 문서 내에 있는지 확인하는 추가 로직을 추가하지 않는 것이 더 저렴합니다. 그것들은 객관적인 사실입니다. 문서화되지 않은 지시 사항의 출현은 당연한 결과입니다. – Tommy