2 điểm bởi GN⁺ 2025-01-27 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2025-01-27
Ý 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ó khả năng lệnh này không phải do nhà thiết kế CPU cố ý tạo ra mà là một lệnh bất hợp pháp
    • CPU thường phát hiện lệnh bất hợp pháp và phát sinh ngoại lệ. Tuy nhiên, trong một số tình huống nhất định, ngoại lệ có thể không xảy ra
    • Theo tài liệu hướng dẫn của MC68030, lệnh bất hợp pháp chứa mẫu bit không khớp với mẫu bit của lệnh hợp lệ
    • Theo tài liệu, lệnh gồm 3 từ, trong đó từ đầu tiên là bình thường và các bit bất thường xuất hiện ở từ thứ hai
  • Đề cập rằng từng có nhiều báo cáo lỗi về việc mô phỏng lệnh CAS

    • Nhớ lại lỗi trong King of Fighters do kiểm tra sai cờ carry của lệnh SBCD
    • SNK giống như thần thánh của dòng chip 68000
  • Chia sẻ ký ức về Amiga 2000 và bộ xử lý 68000 trước đây

    • Nhắc đến sự hào hứng với 68020, 68030 và kiến trúc RISC
    • Nhấn mạnh rằng hiện nay đã là thời đại có thể trò chuyện với máy tính bằng ngôn ngữ tự nhiên
  • 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ệ

    • Khi đó nhiều người tập trung vào x86/PC, vốn là một kiến trúc cởi mở và ổn định hơn
    • Microcode của 8088 và 8086 đã được phân tích ngược và nghiên cứu
  • 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

    • Giá trị kết quả của A1 có thể thay đổi tùy theo giá trị A1 ban đầu, giá trị A7 và bộ đếm chương trình
    • MAME vá lỗi này trong ROM để Classic II có thể khởi động
  • 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

    • Nhưng điều đó sẽ không thể làm tăng tốc độ chuyển đổi của Amiga
  • 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

    • Có vẻ điều này là không thể trên Mac hiện đại. Tài liệu kỹ thuật của Apple dạo này không còn tốt nữa
  • 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