2P by neo 1달전 | ★ favorite | 댓글 1개

68030의 잘못된 명령어가 Mac Classic II의 부팅을 가능하게 한 이야기

  • Apple은 Macintosh Classic II의 ROM에서 실수를 저질렀고, 이는 부팅을 방해할 수 있었음. 그러나 Motorola MC68030 CPU가 정의되지 않은 명령어를 실행하여 충돌을 방지하고 부팅을 성공시킴.

MAME와 Mac 에뮬레이션

  • MAME는 다양한 아케이드 게임을 지원하는 에뮬레이터로, 68000 기반 Mac 모델의 가장 완전한 에뮬레이터 중 하나로 평가받음.
  • 필자는 MAME를 사용하여 Mac Classic II의 문제를 해결하고자 했으며, 24비트 주소 모드에서는 정상적으로 부팅되지만 32비트 주소 모드에서는 부팅이 실패함.

24비트 vs 32비트 주소 모드

  • Motorola 68000 프로세서는 24개의 주소 라인을 가지고 있었고, Apple은 여분의 8비트를 플래그 저장에 사용함.
  • 새로운 기계와 프로세서는 32비트 주소 공간을 지원했으며, 이로 인해 호환성 문제를 해결하기 위해 두 가지 모드를 제공함.

문제의 원인 분석

  • MAME에서 Classic II가 32비트 모드에서 부팅 실패하는 이유를 찾기 위해 디버거를 사용하여 코드를 추적함.
  • Apple의 기술 문서에 따르면, 0000000F은 예외가 발생했음을 의미하고, 00000001은 버스 오류를 나타냄.

ROM 코드 분석

  • ROM의 코드에서 잘못된 주소에 접근하는 명령어를 발견함.
  • 이 명령어는 A1 레지스터에 잘못된 주소를 저장하고, 이로 인해 Sad Mac 오류가 발생함.

하드웨어와의 차이점

  • 실제 하드웨어에서는 잘못된 명령어가 A1의 값을 변경하여 유효한 주소로 만듦.
  • MAME의 에뮬레이터는 이 명령어를 제대로 처리하지 못해 A1이 잘못된 주소를 유지함.

결론

  • Apple은 Classic II의 ROM에서 발생할 수 있는 버그를 인지하지 못했으며, 68030의 잘못된 명령어가 이를 숨기고 있었음.
  • MAME는 이 문제를 해결하기 위해 ROM의 버그를 패치하여 Classic II가 부팅되도록 함.
  • 이 사례는 에뮬레이터가 하드웨어에 대해 새로운 사실을 발견할 수 있음을 보여줌.
Hacker News 의견
  • MC68030의 문서화되지 않은 명령어를 발견한 경험을 공유함. 이 명령어는 A1 레지스터의 값을 변경하고 읽기-수정-쓰기 버스 사이클을 수행함

    • 이 명령어는 CPU 설계자가 의도적으로 만든 것이 아니라 불법 명령어일 가능성이 있음
    • CPU는 일반적으로 불법 명령어를 감지하고 예외를 발생시킴. 그러나 특정 상황에서는 예외가 발생하지 않을 수 있음
    • MC68030 설명서에 따르면 불법 명령어는 유효한 명령어의 비트 패턴과 일치하지 않는 비트 패턴을 포함함
    • 설명서에 따르면 명령어는 3단어로 구성되며, 첫 번째 단어는 정상적이고 두 번째 단어에서 이상한 비트가 발생함
  • CAS 명령어의 에뮬레이션에 대한 버그 보고가 많았음을 언급함

    • King of Fighters에서 SBCD 명령어의 캐리 플래그를 잘못 체크한 버그를 기억함
    • SNK는 68000 칩의 신과 같았음
  • 과거 Amiga 2000과 68000 프로세서에 대한 추억을 공유함

    • 68020, 68030, RISC 아키텍처에 대한 흥분을 언급함
    • 현재는 자연어로 컴퓨터와 대화할 수 있는 시대가 되었음을 강조함
  • 대부분의 CPU에는 문서화되지 않은 명령어가 있으며, 68k도 예외가 아님

    • 당시 많은 사람들이 x86/PC에 집중했으며, 이는 더 개방적이고 안정적인 아키텍처였음
    • 8088과 8086의 마이크로코드가 해체되고 연구되었음
  • MC68030의 문서화되지 않은 명령어의 정확한 동작을 이해하기 위한 시도가 필요함

    • A1의 결과 값이 원래 A1 값, A7 값, 프로그램 카운터에 따라 달라질 수 있음
    • MAME는 이 버그를 ROM에서 패치하여 Classic II가 부팅되도록 함
  • Mac 디버거 UI의 효율성에 감탄함

    • Amiga의 변환 속도를 높이지는 못할 것임
  • 이 명령어가 복사 방지 목적으로 사용되었는지, 모든 68030에서 발생하는지 궁금해함

    • 현대 Mac에서는 불가능할 것 같음. Apple의 기술 문서가 요즘은 좋지 않음
  • '040/060도 이 "문서화되지 않은 명령어"를 지원하는지 궁금해함