Motorola 68000 용 바이너리 opcode를 포맷하려고했으나 대상 메모리 주소, 명령어 지정 및 주소 지정 모드/크기를 모두 인코딩 할 수 없음을 계속 확인했습니다. 및 메모리 맵핑 된 I/O를 위해 어드레스 버스에 복사 될 데이터 값.기계 명령어에 32 비트 이진 opcode를 인코딩 할 수 없습니다.
Sega Genesis의 비디오 디스플레이 프로세서의 경우, 제네시스 메모리 맵의 C00004에 매핑 된 메모리 인 제어 포트에 쓰려고합니다.
C0004는 2 진수 또는 3 바이트의 1100 0000 0000 0000 0000 0100입니다. 내가 쓰고있는 값은 VDP가 VDP 레지스터 # 7에서 8787로 인식하는 87입니다. 32 비트의 데이터를 인코딩하는 방법을 알아내는 것이 문제입니다. 명령어 접두어 지정 move.b
, 값 87 (#$87
) 및 대상 메모리 주소 C00004
(MMIO가 VDP로가는 도중에 올바른 VDP 포트로 재 라우팅 됨).
전부는 다음과 같다 : 느슨하게 하지 네로 변환
move.b #$87, $00C00004,
하지만 4 바이트 및 니블 (36 비트를 정확하게는)
0001 1000 0111 1100 0000 0000 0000 0000 0100
모토로라 68000은 microcode으로 작업 할 때만 32 비트를 구문 분석하기 때문에 공간이 충분하지 않은 경우 (그리고 동일한 도구 내에서) 필요한 정보를 인코딩하는 것이 어떻게 가능합니까?)?
Perhaps I'm understanding this incorrectly?
나는이 대부분의 프로그래머가 예상 할 수준을 넘어 알고,하지만 난 나를 위해이 고장이 인코딩 체계가 어떻게 작동하는지 설명 할 수있는 주변 사람을 희망하고있다.