Обнаружен 34-летний баг в Apple Mac, который мог бы остаться незамеченным навсегда
Энтузиаст в области вычислений обнаружил 34-летний баг в Apple Mac, который должен был выводить систему из строя при запуске, но никогда этого не делал благодаря недокументированной функции процессора Motorola, которая незаметно нейтрализовала ошибку. Даг Браун обнаружил эту особенность кода ПЗУ Mac Classic II после того, как стал свидетелем сбоя эмулированной системы в MAME (в 32-битном режиме), который не происходил на оригинальном оборудовании. Мы склонны согласиться с тем, что «эта ошибка в ПЗУ оставалась бы необнаруженной всю вечность», если бы не любопытство Брауна.
Браун, который называет себя «комбинированным гиком Apple/Linux/Windows» и большим поклонником проекта MAME (Multiple Arcade Machine Emulator) с открытым исходным кодом. Он также рассказывает своим читателям, что это программное обеспечение является «возможно, самым полным эмулятором моделей Mac на базе 68000», и что эти классические системы на базе процессоров Motorola являются его основным способом использования эмулятора. Это довольно необычно, поскольку MAME наиболее известен тем, что обеспечивает удовольствие от классических аркадных игр.
Эмулятор Mac-машины
История такова, что Браун увлекался своим хобби — эмуляцией Mac на MAME, когда заметил, что эмулированный Classic II не загружается с включенной 32-битной адресацией. Однако он работал с 24-битной адресацией — без «грустного Mac» при включенной опции 24-бит... Что происходило? И почему эмулированный Mac так сильно и быстро вылетал, когда у оригинала не было таких проблем?
Что ж, есть много способов, с помощью которых ошибки могут возникать в эмуляторе, но в данном случае было бы неправильно винить MAME или любой код, на который он опирается.
Недокументированная инструкция MC68030
После реверс-инжиниринга ПЗУ Apple и обширного отладочного анализа ошибочного поведения эмулированной машины Браун фактически обнаружил, что ошибка присутствовала в коде ПЗУ Mac Classic II — и не имела ничего общего с программным обеспечением эмуляции. Самая большая разница между эмулированной и оригинальной системами заключалась в том, как процессор обрабатывал проблемную инструкцию в ПЗУ. В эмулированной системе она приводила к сбою с «грустным Mac» в 32-битном режиме. В реальной системе с процессором 68030 она беспечно пропускала эту проблему. Однако ни одна задокументированная функция 68030 не объясняла эту (счастливую) особенность работы.
Браун завершает свой длинный и чрезвычайно подробный пост в блоге утверждением, что разработчики Apple, несомненно, нашли бы и исправили проблему загрузки в 32-битном режиме, «если бы надоедливый 68030 не скрывал ошибку». Энтузиаст вычислений также остроумно охарактеризовал эту секретную функцию 68030 как «клей, который случайно скрепляет Classic II».
Он также выразил сочувствие разработчикам ПЗУ Apple, которые выпустили эту ошибку в свет, поскольку процессор Motorola тихо исправлял её в фоновом режиме.
Последний важный момент, поднятый Брауном, заключался в том, что, учитывая эту недокументированную ошибку, «весьма вероятно, что не существует идеального на 100% эмулятора или реплики Motorola MC68030».
MAME исправил эту ошибку в ПЗУ, чтобы позволить Classic II загружаться. / Изображение: Doug Brown
Есть небольшая вероятность, что инженер, работавший над этим процессором Motorola, прочитает это и свяжется с информацией о недокументированной функции 68030, которая, к счастью, приходит на помощь во время процесса загрузки Classic II. Браун также задался вопросом, могли ли многие другие машины на базе 68030 иметь своё программное обеспечение тихо исправленным от ошибок благодаря умным функциям этого процессора.
Источник: Tomshardware.com








0 комментариев