У Mac нашли баг в ПЗУ, который 35 лет маскировал сам процессор
Григорьев Арсений АндреевичОшибка в ПЗУ Macintosh Classic II оказалась настолько грубой, что компьютер вообще не должен был загружаться в 32-битном режиме. Но на реальном устройстве модель десятилетиями работала нормально, а сбой всплыл только в эмуляторе MAME, где машина сразу уходила в Sad Mac.
Разбор показал редкую комбинацию двух независимых ошибок, которые случайно компенсировали друг друга. Именно поэтому баг прожил около 35 лет и остался незамеченным даже у Apple.
Что именно сломано в ПЗУ
Проблема нашлась в коде ROM Macintosh Classic II. В таблице переходов там предусмотрены записи только для 16 моделей, тогда как самой модели присвоен номер 17.
Из-за выхода за пределы таблицы выполнение уходит не туда, куда рассчитывал код:
- •процессор прыгает в середину чужой инструкции
- •пропускается загрузка нужного адреса
- •затем происходит запись по неверному, «мусорному» адресу
- •система падает с экраном Sad Mac
В эмуляторе, который точно воспроизводит поведение процессора, это проявилось сразу. На реальном компьютере — нет.
Почему Mac всё же запускался
Неожиданное объяснение нашлось в поведении Motorola 68030. Некорректно закодированная инструкция на этом процессоре фактически спасала систему: ошибка в ROM срабатывала, но другая ошибка — уже на уровне исполнения инструкции — меняла ход выполнения так, что критический сбой не происходил.
Иными словами, Classic II выживал благодаря аппаратно-программной случайности. Без неё компьютер с таким ПЗУ не должен был бы стабильно стартовать.










