Câu chuyện về lệnh 68030 không hợp lệ đã khiến Mac Classic II có thể khởi động
- Apple đã mắc lỗi trong ROM của Macintosh Classic II, điều này lẽ ra có thể cản trở quá trình khởi động. Tuy nhiên, CPU Motorola MC68030 đã thực thi một lệnh không được định nghĩa, nhờ đó tránh được sự cố sập và khởi động thành công.
MAME và giả lập Mac
- MAME là một trình giả lập hỗ trợ nhiều trò chơi arcade khác nhau, đồng thời được xem là một trong những trình giả lập hoàn chỉnh nhất cho các mẫu Mac dựa trên 68000.
- Tác giả muốn dùng MAME để xử lý vấn đề của Mac Classic II; máy khởi động bình thường ở chế độ địa chỉ 24-bit nhưng thất bại ở chế độ địa chỉ 32-bit.
Chế độ địa chỉ 24-bit và 32-bit
- Bộ xử lý Motorola 68000 có 24 đường địa chỉ, và Apple đã dùng 8 bit dư ra để lưu cờ.
- Các máy và bộ xử lý mới hơn hỗ trợ không gian địa chỉ 32-bit, vì vậy hai chế độ đã được cung cấp để giải quyết vấn đề tương thích.
Phân tích nguyên nhân sự cố
- Trong MAME, tác giả đã dùng trình gỡ lỗi để lần theo mã nhằm tìm ra lý do Classic II không thể khởi động ở chế độ 32-bit.
- Theo tài liệu kỹ thuật của Apple,
0000000F có nghĩa là đã xảy ra ngoại lệ, còn 00000001 biểu thị lỗi bus.
Phân tích mã ROM
- Trong mã của ROM, tác giả phát hiện một lệnh truy cập vào địa chỉ sai.
- Lệnh này lưu một địa chỉ không hợp lệ vào thanh ghi A1, từ đó gây ra lỗi Sad Mac.
Khác biệt với phần cứng thực
- Trên phần cứng thực, lệnh không hợp lệ này đã thay đổi giá trị của A1 thành một địa chỉ hợp lệ.
- Trình giả lập MAME không xử lý đúng lệnh này, khiến A1 giữ nguyên địa chỉ sai.
Kết luận
- Apple đã không nhận ra lỗi tiềm ẩn trong ROM của Classic II, và lệnh không hợp lệ của 68030 đã vô tình che giấu nó.
- Để khắc phục vấn đề này, MAME đã vá lỗi trong ROM để Classic II có thể khởi động.
- Trường hợp này cho thấy trình giả lập có thể giúp phát hiện những điều mới về phần cứng.
1 bình luận
Ý kiến trên Hacker News
Chia sẻ trải nghiệm phát hiện một lệnh không được tài liệu hóa của MC68030. Lệnh này thay đổi giá trị của thanh ghi A1 và thực hiện chu kỳ bus đọc-sửa-ghi
Đề cập rằng từng có nhiều báo cáo lỗi về việc mô phỏng lệnh CAS
Chia sẻ ký ức về Amiga 2000 và bộ xử lý 68000 trước đây
Hầu hết CPU đều có các lệnh không được tài liệu hóa, và 68k cũng không phải ngoại lệ
Cần có những nỗ lực để hiểu chính xác hành vi của lệnh không được tài liệu hóa trên MC68030
Bày tỏ sự thán phục với tính hiệu quả của UI trình gỡ lỗi trên Mac
Tò mò liệu lệnh này có được dùng cho mục đích chống sao chép hay không, và liệu nó có xuất hiện trên mọi 68030 hay không
Tò mò liệu '040/060 cũng có hỗ trợ "lệnh không được tài liệu hóa" này hay không