
Apple выпустила Mac с багом в ПЗУ. 35 лет его спасала некорректно закодированная инструкция 68030
kmoseenk 11 минут назад Apple выпустила Mac с багом в ПЗУ. 35 лет его спасала некорректно закодированная инструкция 68030 Сложный 20 мин 254 Блог компании OTUS Реверс-инжиниринг * Старое железо Компьютерное железо...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. kmoseenk 11 минут назад Apple выпустила Mac с багом в ПЗУ. 35 лет его спасала некорректно закодированная инструкция 68030 Сложный 20 мин 254 Блог компании OTUS Реверс-инжиниринг * Старое железо Компьютерное железо Ретроспектива Это история о том, как Apple допустила ошибку в ПЗУ Macintosh Classic II. Она, скорее всего, должна была помешать ему загрузиться, но каким-то чудом процессор Motorola MC68030 вместо этого спас ситуацию: случайно предотвратил падение системы, выполнив инструкцию с неопределённым поведением.
TL;DR: В ПЗУ Macintosh Classic II есть ошибка в таблице переходов функции InstallSoundIntHandler. Таблица содержит 16 двухбайтовых инструкций BRA. S, рассчитанных на значения BoxFlag от 0 до 15, тогда как у Classic II BoxFlag равен 17.
Технические детали
После удвоения индекса процессор переходит по адресу 0x40A43B94 — в середину инструкции MOVEA. L, которая должна была загрузить в A1 адрес звукового оборудования. Начиная с этой позиции, MC68030 воспринимает последовательность байтов 0C EC 08 A9 00 04 как некорректно закодированную инструкцию, похожую на CAS.
W D1,D2,$0004(A4): в её втором слове установлены зарезервированные биты, которые по документации Motorola должны быть нулевыми. На физическом MC68030 эта инструкция выполняет цикл чтения—модификации—записи и одновременно меняет A1 с 0xFFFF8FBA на 0x40A4BBB2. Благодаря этому следующая инструкция MOVE.
B #$90,($1C00,A1) не вызывает ошибку шины, и загрузка продолжается. Эмулятор MAME не воспроизводит этот недокументированный побочный эффект: A1 остаётся равным 0xFFFF8FBA, запись идёт по недопустимому адресу 0xFFFFABBA, возникает bus error и появляется Sad Mac. Автор подтвердил механизм на настоящем Classic II с модифицированными образами ПЗУ: переход за пределы таблицы действительно происходит, загадочная инструкция действительно изменяет только A1, а её замена на NOP приводит к тому же Sad Mac, что и в MAME.
Отраслевые последствия
Таким образом, Macintosh Classic II загружался благодаря недокументированному поведению MC68030, которое случайно маскировало ошибку Apple. Пока точная логика инструкции не восстановлена, MAME обходит проблему патчем ПЗУ, а полную точность существующих эмуляторов MC68030 гарантировать нельзя. В последнее время я много ковыряюсь в MAME.
Если вы о нём не слышали, это эмулятор, прежде всего известный поддержкой множества аркадных игр. Но этим его возможности далеко не ограничиваются. Во многом благодаря невероятной работе Arbee MAME, пожалуй, стал самым полным эмулятором моделей Mac на базе семейства 68000.
Чаще всего использую MAME именно для эмуляции Mac. Вот с чего началось это приключение. Я исправлял в MAME проблемы с сочетанием клавиш Command + Power, которое вызывает отладчик, и решил проверить, работает ли оно на Classic II.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





