Motorola 68030 — гений-спасатель: чип, который тихо исправлял ошибки Apple

Motorola 68030 — гений-спасатель: чип, который тихо исправлял ошибки Apple

В 32-битном режиме Classic II валится в "грустного Мака" под эмуляцией, но настоящий компьютер спокойно проходит мимо ошибки.

image

Любитель старины и энтузиаст ретро-компьютеров обнаружил баг в прошивке 34-летнего Mac Classic II, который по идее должен был "ронять" систему еще на этапе загрузки. Но этого никогда не происходило благодаря скрытой особенности процессора Motorola, которая тихо и незаметно нейтрализовала ошибку. Исследователь, известный как Downtown Doug Brown, наткнулся на странность в ПЗУ Classic II, когда заметил, что эмулируемый в MAME Mac падает при старте в 32-битном режиме, тогда как оригинальный компьютер с таким поведением не сталкивался.

Браун описывает себя как "гика по Apple/Linux/Windows" и давнего поклонника open source проекта MAME, который обычно ассоциируется с эмуляцией аркадных автоматов. При этом он считает MAME, возможно, самым полным эмулятором Macintosh на базе процессоров Motorola 68000, и сам использует его как раз для таких старых Mac. В какой-то момент во время экспериментов с Mac Classic II он заметил, что в MAME система не грузится, если включена 32-битная адресация, но прекрасно стартует в 24-битном режиме, без знаменитого "грустного Мака" на экране.

На первый взгляд все выглядело как очередной баг эмулятора: с таким софтом и сложной архитектурой платформы это неудивительно. Однако в данном случае виноват MAME не был. Браун занялся обратной инженерией ПЗУ Mac Classic II и устроил детальную "техническую экспертизу" поведения машины под эмуляцией.

В итоге он выяснил, что ошибка действительно находится в ПЗУ Classic II, то есть в оригинальном коде Apple, а не в эмуляторе. Ключевым отличием между настоящим компьютером и его программной копией оказалось то, как процессор обрабатывает проблемную инструкцию. В MAME при работе в 32-битном режиме выполнение приводило к краху и "грустному Маку". На настоящем компьютере с Motorola 68030 та же инструкция незаметно "проглатывалась", и система продолжала загрузку. При этом ни одна задокументированная особенность 68030 не объясняет такое удачное поведение.

В своем большом техническом разборе Браун делает вывод, что разработчики Apple наверняка нашли бы и исправили этот баг в 32-битной загрузке, если бы не хитрый процессор, который скрывал проблему. Он образно называет эту секретную особенность MC68030 "клеем, который случайно держит весь Classic II".

Исследователь отмечает, что не спешит ругать инженеров Apple за то, что они выпустили прошивку с подобной ошибкой. С точки зрения разработчика, если железо тихо и надежно исправляет последствия бага, шанс обнаружить его в тестах стремительно падает.

Еще один важный вывод, к которому приходит Браун: с учетом этой недокументированной особенности почти наверняка не существует ни одного на сто процентов идеального эмулятора или аппаратной реплики Motorola MC68030. Любая реализация, опирающаяся только на официальную документацию, будет в чем-то отличаться от реального чипа и в некоторых редких сценариях вести себя иначе.

Команда MAME, чтобы Classic II нормально загружался под эмуляцией, в итоге добавила обход этого дефекта прямо в ПЗУ образа. При этом Браун не исключает, что когда-нибудь один из инженеров, работавших над MC68030, прочтет его разбор и расскажет, что это за загадочная особенность процессора, которая столько лет незаметно спасала старые Маки. Он также задается вопросом, скольким другим системам на базе 68030 подобные "умные" трюки CPU когда-то тихо исправляли ошибки в прошивках и операционных системах.