2014-09-16 8 views
4

즉, opcode에서 어떻게 든 인코딩 된 다른 주소 지정 모드입니까? 프로그래밍 방식으로 추출 할 수 있습니까? 아니면이 정보는 6502의 설명서에만 존재합니까? 에뮬레이터를 쓰고 있는데 성능에 관심이 없습니다. 가능한 경우 opcode를 사용하고 주소 지정 모드를 반환하는 함수를 갖는 것이 좋습니다.6502에 대한 opcode에서 주소 지정 모드를 프로그래밍 방식으로 결정하는 방법이 있습니까?

지금까지 모든 제로 페이지 명령에 세 번째 비트 세트가있는 것 외에는 코드에 패턴이 있음을 알 수 없었습니다.

+0

[6502/65C02/65C816 명령어 세트 디코딩] (http://www.llx.com/~nparker/a2/opcodes.html). –

답변

4

예 있습니다. 어드레싱 모드는 opcode 바이트 (즉, xxxAAAxx)의 4-2 위치에서 3 비트로 인코딩된다. 어드레싱 모드를 디코딩하는 것은 다른 비트들에 달려 있지만, 각 명령 유형에 대한 모드를 결정하기 위해 룩업 테이블을 통해 드롭 될 수있는 규칙적인 패턴 (주로)을 따른다.

페이지에는 다양한 패턴과 각 경우의 디코딩 방법에 대한 자세한 설명이 있습니다.

+0

그게 좋습니다! 필자는 명령어 집합에 대한 설명이 포함 된 4 개의 다른 페이지가 있었으며 비트 수준의 의미에 대해서는 언급하지 않았습니다. – Andreas

+0

에뮬레이터에서 행운을 빌어 요. 내 Sharp6502 에뮬레이터의 첫 번째 버전은 opcode 수준에서 작동했으며 Pentium 4에서 70MHz를 관리했습니다. 두 번째 버전은 비트 디코더 수준에서 작동하고 동일한 하드웨어에서 122MHz로 클록 된 결과로 멋진 성능을 얻을 수있었습니다 (1MHz 실리콘과 비교하여)이 수준에서 에뮬레이션 할 때 C#과 같은 관리 언어로 작성하는 경우에도 마찬가지입니다. –

+0

고맙습니다. Java로 작업 할 때 코드 가독성 (또는 성능)에이 비트 정보를 활용하는 방법이 나에게는 분명하지 않다는 것을 깨달았습니다. 거대한 평면 전환 명령문을 사용하는 것보다 더 혼란스럽게 보입니다. 에뮬레이터를 Google에서 찾지 못하는 것 같습니다. 흥미로울 것입니다. – Andreas