# 잘못된 68030 명령어로 인해 Mac Classic II 부팅 허용 사고

> Clean Markdown view of GeekNews topic #18926. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18926](https://news.hada.io/topic?id=18926)
- GeekNews Markdown: [https://news.hada.io/topic/18926.md](https://news.hada.io/topic/18926.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-27T09:59:05+09:00
- Updated: 2025-01-27T09:59:05+09:00
- Original source: [downtowndougbrown.com](https://www.downtowndougbrown.com/2025/01/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/)
- Points: 2
- Comments: 1

## Topic Body

### 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가 부팅되도록 함.
- 이 사례는 에뮬레이터가 하드웨어에 대해 새로운 사실을 발견할 수 있음을 보여줌.

## Comments



### Comment 33884

- Author: neo
- Created: 2025-01-27T09:59:05+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42824562) 
- 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도 이 "문서화되지 않은 명령어"를 지원하는지 궁금해함
