문제

주말이니까 취미 프로젝트를 작성하며 일주일 내내 프로그래밍을 하며 시간을 보냅니다.

나는 어제 MOS 6502 CPU 에뮬레이터의 프레임워크를 작성했으며 레지스터, 스택, 메모리 및 모든 opcode가 구현되었습니다.(아래 출처 링크)

내가 작성한 디버거에서 일련의 작업을 수동으로 실행할 수 있지만 NES ROM을 로드하고 프로그램 카운터가 해당 명령을 가리키도록 하고 싶습니다. 이것이 결함이 있는 opcode를 찾는 가장 빠른 방법이라고 생각했습니다.

나는 빠른 NES 롬 로더를 작성하고 ROM 뱅크를 CPU 메모리에 로드했습니다.

문제는 opcode가 어떻게 인코딩되는지 모른다는 것입니다.나는 opcode 자체가 opcode를 고유하게 식별하는 opcode당 1바이트의 패턴을 따른다는 것을 알고 있습니다.

0 - BRK
1 - ORA (D,X)
2 - COP b

그러나 opcode 인수를 어디서 찾아야 할지 잘 모르겠습니다.바로 뒤에 오는 바이트입니까?절대 메모리에서는 바이트가 아니라 짧을 수도 있다고 가정합니다.

이 CPU의 메모리 모델에 대해 잘 아는 사람이 있습니까?

편집하다:나는 이것이 아마도 어둠 속에서 촬영되었을 것이라는 것을 알고 있지만 여기에 숨어 ​​있는 구식 Apple 및 Commodore 해커가 있기를 바랐습니다.

편집하다: 모두 도와주셔서 감사합니다.각 작업을 정렬하기 위해 적절한 변경 사항을 구현한 후 CPU는 Mario Brothers를 로드하고 실행할 수 있습니다.시작을 기다리는 루프 외에는 아무것도 수행하지 않지만 이는 좋은 징조입니다. :)

출처를 올렸습니다:

https://archive.codeplex.com/?p=cpu6502

에뮬레이터가 어떻게 작동하는지 궁금한 사람이 있다면 따라가기가 매우 쉽습니다.최소한 최적화되지는 않았지만 다시 2.4ghz 시스템에서 2mhz로 실행되는 CPU를 에뮬레이트하고 있습니다. :)

도움이 되었습니까?

해결책

opcode는 1바이트를 차지하고 피연산자는 다음 바이트에 있습니다.바이트 크기 열을 확인하세요. 여기, 예를 들어.

다른 팁

다음과 같은 참고 자료를 살펴보면 http://www.atarimax.com/jindroush.atari.org/aopc.html, 각 opcode에는 다음과 같이 지정된 인코딩이 있음을 알 수 있습니다.

HEX LEN TIM

HEX는 1바이트 opcode입니다.바로 뒤에는 해당 인수의 LEN 바이트가 있습니다.해당 주장이 무엇인지 확인하려면 참조 자료를 참조하세요.TIM 데이터는 에뮬레이터에 중요합니다. 이는 이 명령을 실행하는 데 걸리는 클록 사이클 수입니다.타이밍을 정확하게 맞추려면 이것이 필요합니다.

이러한 값(LEN, TIM)은 opcode 자체에 인코딩되지 않습니다.이 데이터를 프로그램 로더/실행기에 저장해야 합니다.그것은 단지 큰 조회 테이블일 뿐입니다.또는 데이터와 판독기를 인코딩하는 미니 언어를 정의할 수 있습니다.

이 책이 도움이 될 수 있습니다: http://www.atariarchives.org/mlb/

또한 어셈블리가 기계 언어로 코딩되는 방식을 확인하려면 다른 6502 어셈블리/시뮬레이터/디버거를 시험해 보세요.

6502 매뉴얼은 웹의 다양한 역사 사이트에 있습니다.KIM-1이 그들과 함께 배송되었습니다.어쩌면 당신이 알아야 할 것보다 더 많은 내용이 있을 수도 있습니다.

Apple II ROM에는 디스어셈블러가 포함되어 있었는데, 제 생각엔 그게 바로 16진수 연산 코드와 3자 연산 코드, 피연산자를 멋진 형식으로 보여줄 것입니다.

따라서 사용 가능한 메모리가 얼마나 적은지를 고려하여 전체 6502 명령어 세트에 대한 3문자 opcode를 피연산자 바이트 수(항상 0, 1 또는 2)에 밀어넣는 데 성공했습니다. 실제로는 그다지 많지 않기 때문입니다.

Apple II ROM을 찾아낼 수 있다면 거기에서 잘라내어 붙여넣기만 하면 됩니다...

6502에는 서로 다른 주소 지정 모드가 있으며, 동일한 명령어에도 주소 지정 모드에 따라 여러 가지 다른 opcode가 있습니다.6502가 메모리에서 데이터를 검색하거나 ROM에서 직접 데이터를 검색할 수 있는 다양한 방법을 설명하는 다음 링크를 살펴보십시오.

http://obelisk.me.uk/6502/addressing.html#IMM

이것이 더 좋습니다 - 6502 명령어 세트 매트릭스:

https://www.masswerk.at/6502/6502_instruction_set.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top