कैसे 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 टिप्पणियां
Hacker News राय
MC68030 के undocumented instruction को खोजने का अपना अनुभव साझा किया। यह instruction A1 रजिस्टर की वैल्यू बदलता है और read-modify-write bus cycle चलाता है
CAS instruction की emulation पर बहुत bug reports होने का उल्लेख किया
Amiga 2000 और 68000 processor के साथ पुरानी यादें साझा कीं
ज़्यादातर CPU में undocumented instructions होते हैं, और 68k भी इसका अपवाद नहीं है
MC68030 के undocumented instruction के सटीक व्यवहार को समझने के लिए प्रयास की ज़रूरत है
Mac debugger UI की दक्षता की प्रशंसा की
यह जानने की जिज्ञासा जताई कि क्या इस instruction का उपयोग copy protection के लिए किया गया था, और क्या यह सभी 68030 पर होता है
यह जानने की जिज्ञासा जताई कि क्या '040/060 भी इस "undocumented instruction" को support करते हैं