ISA가 시간이 지남에 따라 성장함에 따라 많은 경우에있어 선택은 꽤 임의적이거나 "가장 적합한 곳"을 기준으로합니다. 그러나 MOS 6502는 제한된 트랜지스터에서 최대한 많이 짜내려고함으로써 ISA 디자인이 큰 영향을받는 칩의 훌륭한 예입니다.
6502의 리버스 엔지니어링 방식 , 특히 34:20 이후의 방법을 설명하는이 비디오를 확인하십시오 .
6502는 1975 년에 도입 된 8 비트 마이크로 프로세서입니다. Z80보다 게이트가 60 % 더 적었지만 두 배 빠르며 (레지스터 등의 관점에서) 더 제한적이지만 우아한 지시 세트.
여기에는 3510 개의 트랜지스터가 포함되어 있는데, 이들은 작은 플라스틱 팀을 통해 광학적으로 축소 된 6502의 다양한 층을 형성하는 작은 플라스틱 팀을 통해 수작업 으로 작성되었습니다 .
아래에서 볼 수 있듯이 6502는 명령 opcode 및 타이밍 데이터를 디코드 ROM으로 전달한 다음 특정 복잡한 상황에서 ROM의 출력을 우선시하는 "랜덤 제어 논리"구성 요소로 전달합니다.
비디오에서 37:00에 주어진 제어 출력에 대해 "1"을 얻기 위해 입력이 어떤 조건을 만족시켜야하는지 보여주는 디코드 ROM 테이블을 볼 수 있습니다. 이 페이지 에서도 찾을 수 있습니다 .
이 표에서 대부분의 것들이 다양한 위치에 X가 있음을 알 수 있습니다. 예를 들어 봅시다
011XXXXX 2 X RORRORA
이는 opcode의 처음 3 비트는 011이어야하고 G는 2 여야합니다. 아무것도 중요하지 않습니다. 그렇다면 RORRORA라는 출력이 적용됩니다. 모든 ROR opcode는 011로 시작합니다. 그러나 011로 시작하는 다른 지침도 있습니다. 이것들은 아마도 "무작위 제어 로직"유닛에 의해 걸러 져야 할 것입니다.
따라서 기본적으로 opcode가 선택되어 서로 동일한 작업을 수행해야하는 명령어가 비트 패턴에서 공통적 인 사항을 갖도록했습니다. opcode 테이블 을 보면이를 알 수 있습니다 . 모든 OR 명령어는 000으로 시작하고 모든 Store 명령어는 010으로 시작하며 0 페이지 주소 지정을 사용하는 모든 명령어는 xxxx01xx 형식입니다. 물론 일부 명령어는 "적합한"것처럼 보이지 않습니다. 왜냐하면 목표는 완전히 규칙적인 opcode 형식이 아니라 강력한 명령어 세트를 제공하기 때문입니다. 이것이 바로 "무작위 제어 논리"가 필요한 이유입니다.
위에서 언급 한 페이지에 따르면 ROM의 일부 출력 라인이 두 번 나타납니다. "우리는 원하는 라인의 출력을 라우팅 할 방법이 없어서 동일한 라인을 다른 라인에 넣었다고 가정합니다. 다시 위치합니다. " 엔지니어가 게이트를 하나씩 직접 그리면서 갑자기 설계의 결함을 깨닫고 전체 프로세스를 다시 시작하지 않는 방법을 생각해내는 것을 상상할 수 있습니다.