2 คะแนน โดย GN⁺ 2025-01-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เรื่องราวของคำสั่ง 68030 ที่ไม่ถูกต้องซึ่งทำให้ Mac Classic II บูตได้

  • Apple ทำพลาดใน ROM ของ Macintosh Classic II ซึ่งอาจขัดขวางการบูตได้ อย่างไรก็ตาม CPU Motorola MC68030 ได้รันคำสั่งที่ไม่ได้กำหนดไว้ ทำให้หลีกเลี่ยงการแครชและบูตสำเร็จ

MAME และการอีมูเลต Mac

  • MAME เป็นอีมูเลเตอร์ที่รองรับเกมอาร์เคดหลากหลายเกม และได้รับการประเมินว่าเป็นหนึ่งในอีมูเลเตอร์สำหรับ Mac รุ่นที่ใช้ 68000 ที่สมบูรณ์ที่สุด
  • ผู้เขียนต้องการใช้ MAME เพื่อแก้ปัญหาของ Mac Classic II และพบว่าสามารถบูตได้ตามปกติในโหมดที่อยู่แบบ 24 บิต แต่ล้มเหลวในโหมดที่อยู่แบบ 32 บิต

โหมดที่อยู่ 24 บิต vs 32 บิต

  • โปรเซสเซอร์ Motorola 68000 มีสายที่อยู่ 24 เส้น และ Apple ใช้ 8 บิตที่เหลือสำหรับเก็บแฟล็ก
  • เครื่องและโปรเซสเซอร์รุ่นใหม่รองรับพื้นที่แอดเดรสแบบ 32 บิต และเพื่อแก้ปัญหาความเข้ากันได้จึงมีการจัดเตรียมไว้สองโหมด

การวิเคราะห์สาเหตุของปัญหา

  • เพื่อค้นหาว่าเหตุใด Classic II จึงบูตล้มเหลวในโหมด 32 บิตบน MAME ผู้เขียนได้ใช้ดีบักเกอร์เพื่อติดตามโค้ด
  • ตามเอกสารทางเทคนิคของ Apple ค่า 0000000F หมายถึงมีการเกิดข้อยกเว้น และ 00000001 หมายถึง bus error

การวิเคราะห์โค้ดใน ROM

  • พบคำสั่งที่เข้าถึงแอดเดรสที่ไม่ถูกต้องในโค้ดของ ROM
  • คำสั่งนี้เก็บแอดเดรสที่ไม่ถูกต้องไว้ในรีจิสเตอร์ A1 และทำให้เกิดข้อผิดพลาด Sad Mac

ความแตกต่างจากฮาร์ดแวร์จริง

  • บนฮาร์ดแวร์จริง คำสั่งที่ไม่ถูกต้องดังกล่าวจะเปลี่ยนค่าของ A1 ให้กลายเป็นแอดเดรสที่ใช้งานได้
  • อีมูเลเตอร์ของ MAME จัดการคำสั่งนี้ได้ไม่ถูกต้อง จึงทำให้ A1 ยังคงเป็นแอดเดรสที่ไม่ถูกต้อง

บทสรุป

  • Apple ไม่ได้ตระหนักถึงบั๊กที่อาจเกิดขึ้นใน ROM ของ Classic II และคำสั่งที่ไม่ถูกต้องของ 68030 ได้ซ่อนปัญหานี้ไว้
  • MAME แก้ปัญหานี้โดยแพตช์บั๊กใน ROM เพื่อให้ Classic II บูตได้
  • กรณีนี้แสดงให้เห็นว่าอีมูเลเตอร์สามารถค้นพบข้อเท็จจริงใหม่เกี่ยวกับฮาร์ดแวร์ได้

1 ความคิดเห็น

 
GN⁺ 2025-01-27
ความคิดเห็นจาก Hacker News
  • แบ่งปันประสบการณ์การค้นพบคำสั่งที่ไม่มีการบันทึกไว้ของ MC68030 โดยคำสั่งนี้จะเปลี่ยนค่าของรีจิสเตอร์ A1 และทำ bus cycle แบบ read-modify-write

    • มีความเป็นไปได้ว่าคำสั่งนี้ไม่ได้ถูกผู้ออกแบบ CPU สร้างขึ้นโดยตั้งใจ แต่เป็นคำสั่งผิดกฎหมาย
    • โดยทั่วไป CPU จะตรวจจับคำสั่งผิดกฎหมายและก่อให้เกิด exception แต่ในบางสถานการณ์อาจไม่เกิด exception
    • ตามคู่มือ MC68030 คำสั่งผิดกฎหมายคือรูปแบบบิตที่ไม่ตรงกับรูปแบบบิตของคำสั่งที่ถูกต้อง
    • ตามคู่มือ คำสั่งนี้ประกอบด้วย 3 word โดย word แรกปกติ แต่มีบิตผิดปกติใน word ที่สอง
  • กล่าวถึงว่ามีรายงานบั๊กเกี่ยวกับการ emulation ของคำสั่ง CAS อยู่มาก

    • จำบั๊กใน King of Fighters ที่ตรวจสอบ carry flag ของคำสั่ง SBCD ผิดพลาดได้
    • SNK เทพกับชิป 68000 มาก
  • แบ่งปันความทรงจำเกี่ยวกับ Amiga 2000 และโปรเซสเซอร์ 68000

    • กล่าวถึงความตื่นเต้นที่มีต่อ 68020, 68030 และสถาปัตยกรรม RISC
    • เน้นว่าปัจจุบันเราอยู่ในยุคที่สามารถคุยกับคอมพิวเตอร์ด้วยภาษาธรรมชาติได้แล้ว
  • CPU ส่วนใหญ่มีคำสั่งที่ไม่มีการบันทึกไว้ และ 68k ก็ไม่ใช่ข้อยกเว้น

    • ในเวลานั้นหลายคนสนใจ x86/PC ซึ่งเป็นสถาปัตยกรรมที่เปิดกว้างและเสถียรกว่า
    • มีการถอดและศึกษามाइครอโค้ดของ 8088 และ 8086
  • จำเป็นต้องพยายามทำความเข้าใจพฤติกรรมที่แน่นอนของคำสั่งที่ไม่มีการบันทึกไว้ของ MC68030

    • ค่าผลลัพธ์ของ A1 อาจเปลี่ยนไปตามค่าเดิมของ A1, ค่า A7 และ program counter
    • MAME แพตช์บั๊กนี้ใน ROM เพื่อให้ Classic II บูตได้
  • ชื่นชมประสิทธิภาพของ UI ดีบักเกอร์บน Mac

    • แต่มันคงไม่ได้ช่วยเพิ่มความเร็วในการแปลงบน Amiga
  • สงสัยว่าคำสั่งนี้ถูกใช้เพื่อจุดประสงค์ด้านการป้องกันการคัดลอกหรือไม่ และเกิดขึ้นบน 68030 ทุกตัวหรือเปล่า

    • บน Mac สมัยใหม่คงเป็นไปไม่ได้ เอกสารทางเทคนิคของ Apple ทุกวันนี้ก็ไม่ค่อยดีนัก
  • สงสัยว่า '040/060 รองรับ "คำสั่งที่ไม่มีการบันทึกไว้" นี้ด้วยหรือไม่