2 पॉइंट द्वारा GN⁺ 2025-01-27 | 1 टिप्पणियां | WhatsApp पर शेयर करें

कैसे 68030 के एक गलत instruction ने Mac Classic II को बूट होने दिया

  • Apple ने Macintosh Classic II के ROM में एक गलती की थी, जो बूटिंग को रोक सकती थी। लेकिन Motorola MC68030 CPU ने एक undefined instruction को execute किया, जिससे crash टल गया और बूट सफल हो गया.

MAME और Mac emulation

  • MAME एक emulator है जो कई arcade games को support करता है, और इसे 68000-आधारित Mac models के सबसे complete emulators में से एक माना जाता है.
  • लेखक ने MAME का इस्तेमाल करके Mac Classic II की समस्या हल करने की कोशिश की, और पाया कि 24-bit address mode में यह सामान्य रूप से बूट होता है, लेकिन 32-bit address mode में बूट fail हो जाता है.

24-bit बनाम 32-bit address mode

  • Motorola 68000 processor में 24 address lines थीं, और Apple अतिरिक्त 8 bits का इस्तेमाल flags store करने के लिए करता था.
  • नई मशीनें और processors 32-bit address space को support करते थे, और compatibility issues सुलझाने के लिए दो modes दिए गए थे.

समस्या के कारण का विश्लेषण

  • MAME में Classic II के 32-bit mode में बूट fail होने की वजह खोजने के लिए debugger का इस्तेमाल कर code trace किया गया.
  • Apple के technical documents के अनुसार, 0000000F का मतलब है कि exception हुआ था, और 00000001 bus error को दिखाता है.

ROM code का विश्लेषण

  • ROM के code में एक instruction मिला जो गलत address को access करता है.
  • यह instruction A1 register में गलत address store कर देता है, और इसकी वजह से Sad Mac error होता है.

hardware के साथ अंतर

  • असली hardware पर यह गलत instruction A1 की value बदल देता है, जिससे वह एक valid address बन जाती है.
  • MAME का emulator इस instruction को सही तरह handle नहीं कर पाया, इसलिए A1 गलत address बनाए रखता है.

निष्कर्ष

  • Apple को शायद Classic II के ROM में मौजूद इस संभावित bug का पता नहीं था, और 68030 का गलत instruction उसे छिपा रहा था.
  • MAME ने इस समस्या को ठीक करने के लिए ROM के bug को patch किया, ताकि Classic II बूट हो सके.
  • यह मामला दिखाता है कि emulator hardware के बारे में नए तथ्य खोज सकते हैं.

1 टिप्पणियां

 
GN⁺ 2025-01-27
Hacker News राय
  • MC68030 के undocumented instruction को खोजने का अपना अनुभव साझा किया। यह instruction A1 रजिस्टर की वैल्यू बदलता है और read-modify-write bus cycle चलाता है

    • यह instruction संभवतः CPU डिजाइनर द्वारा जानबूझकर बनाया गया नहीं था, बल्कि एक illegal instruction हो सकता है
    • CPU आमतौर पर illegal instruction को पहचानता है और exception उत्पन्न करता है। लेकिन कुछ खास परिस्थितियों में exception उत्पन्न नहीं हो सकता
    • MC68030 मैनुअल के अनुसार illegal instruction में ऐसे bit pattern होते हैं जो किसी valid instruction के bit pattern से मेल नहीं खाते
    • मैनुअल के अनुसार instruction 3 words से बना है, पहला word सामान्य है और दूसरे word में असामान्य bits आते हैं
  • CAS instruction की emulation पर बहुत bug reports होने का उल्लेख किया

    • King of Fighters में SBCD instruction के carry flag को गलत तरीके से check करने वाला bug याद किया
    • SNK 68000 chip का देवता जैसा था
  • Amiga 2000 और 68000 processor के साथ पुरानी यादें साझा कीं

    • 68020, 68030, RISC architecture को लेकर उत्साह का उल्लेख किया
    • इस बात पर ज़ोर दिया कि अब हम ऐसे दौर में हैं जहाँ natural language में कंप्यूटर से बात की जा सकती है
  • ज़्यादातर CPU में undocumented instructions होते हैं, और 68k भी इसका अपवाद नहीं है

    • उस समय बहुत से लोग x86/PC पर केंद्रित थे, क्योंकि यह ज़्यादा खुला और स्थिर architecture था
    • 8088 और 8086 के microcode को disassemble करके उसका अध्ययन किया गया
  • MC68030 के undocumented instruction के सटीक व्यवहार को समझने के लिए प्रयास की ज़रूरत है

    • A1 का परिणाम मूल A1 वैल्यू, A7 वैल्यू और program counter के अनुसार बदल सकता है
    • MAME इस bug को ROM में patch करके Classic II को boot होने देता है
  • Mac debugger UI की दक्षता की प्रशंसा की

    • यह Amiga की conversion speed को तेज़ नहीं कर पाएगा
  • यह जानने की जिज्ञासा जताई कि क्या इस instruction का उपयोग copy protection के लिए किया गया था, और क्या यह सभी 68030 पर होता है

    • आधुनिक Mac पर यह संभव नहीं लगता। Apple का तकनीकी documentation आजकल अच्छा नहीं है
  • यह जानने की जिज्ञासा जताई कि क्या '040/060 भी इस "undocumented instruction" को support करते हैं