Эмулятор Mac 68k

редактировать

Mac 68k эмулятор является программным обеспечением эмулятора встроен во все версии классического Mac OS для PowerPC. Этот эмулятор включен работающими приложения и системный код, которые первоначально были написаны для 680x0Macintosh моделей. За некоторыми исключениями, в частности с удвоителем RAM Connectix, эмулятор запускал все программное обеспечение без каких-либо заметных последствий, кроме более низкой производительности по сравнению с той же программой при компиляции для PowerPC.

СОДЕРЖАНИЕ
  • 1 Происхождение
  • 2 Реализация
  • 3 Текущий статус
  • 4 См. Также
  • 5 ссылки
Происхождение

Первая версия была написана Гэри Дэвидианом, который изначально создал ее для использования на процессоре Motorola 88000, который использовался в неудачной первой попытке Apple создать целевую платформу RISC. Более поздняя версия, использующая динамическую перекомпиляцию, была разработана Эриком Траутом, который позже работал над успешными проектами эмуляции в Connectix, такими как Virtual Game Station и Virtual PC. До прибытия туда Траута компания Connectix выпустила Speed ​​Doubler, который включал еще более быстрый эмулятор PowerPC 68k.

Реализация

Все версии этого эмулятора эмулировали «пользовательское» подмножество набора команд 68EC040 с кадром стека исключений 68020/68030. Документы разработчиков Apple показывают, что эмулятор обеспечивает операционную среду, наиболее близкую к Macintosh Centris 610, системе, основанной на микропроцессоре Motorola 68LC040. Ранние версии эмулировали его, декодируя каждую инструкцию и немедленно выполняя серию эквивалентных инструкций PowerPC. Для PCI PowerMacs, то динамическая перекомпиляция эмулятор был использован для выполнения наддува. Динамическая перекомпиляция работает путем «перекомпиляции» общих частей кода в более быстрые, нативные для PowerPC последовательности, которые были локально кэшированы. Эмулятор мог распознать ту же последовательность кода 680x0 и запустить ранее кэшированный код PowerPC, чтобы избежать повторного преобразования. Этот эмулятор теоретически был способен эмулировать код 680x0 быстрее, чем любой реальный 680x0 мог его запустить. В 68LC040 не было инструкций с плавающей запятой, что делало этот подвиг немного проще, но не менее впечатляющим.

Одна из причин, по которой эта эмуляция была настолько успешной, заключается в том, что многие API-интерфейсы для Mac OS изначально были реализованы как ловушки на процессоре 680x0; поэтому вызов API фактически был распознан устройством 680x0 как эквивалент состояния ошибки, которое заставило бы его обрабатывать эту ошибку через один из своих аппаратных векторов. В свою очередь, этот вектор будет искать и запускать процедуру операционной системы из ПЗУ или ОЗУ. В эмуляторе такие ловушки могут быть заменены собственным кодом PowerPC, поэтому эмулируется только само приложение, а любой вызываемый им системный API может быть ускорен с помощью собственного кода PowerPC. Это также позволило Apple перенести ОС на PowerPC. Сначала только критичные ко времени аспекты были переписаны в машинном коде, оставив большую часть эмуляции ОС. Постепенно большая часть ОС была переписана на родную, поэтому со временем ОС становилась все быстрее.

Для программиста переход на PowerPC прошел довольно безболезненно, поскольку эмулятор запускался и останавливался автоматически. Это было достигнуто с помощью нового типа указателя, называемого универсальным указателем процедуры (UPP). Для кода 68k этот указатель оказался обычным указателем на код и мог использоваться как таковой. Однако на самом деле это привело к структуре данных, которая содержала специальную команду прерывания и флаги, указывающие архитектуру набора команд (ISA) вызываемого кода. Из кода PowerPC этот UPP можно передать функции CallUniversalProc () для его вызова. Затем эмулятор 68k обработал такие детали, как представление переданных параметров в правильном порядке для рассматриваемого ISA, а также запуск и остановку эмулятора по мере необходимости. Компиляторы для Mac OS автоматически создавали такие UPP при использовании соответствующих макросов, а системные библиотеки PowerPC содержали собственные заглушки для прозрачного вызова собственных функций или функций по-прежнему 68k по мере необходимости. Это означало, что работа с двойной архитектурой требовала очень мало работы от программиста, и, как и ОС, сами приложения могли довольно легко смешивать и сопоставлять код 680x0 и PowerPC.

Текущий статус

Потому что он был построен во все версии PowerPC в классической Mac OS, эмулятор также был частью классического окружения в Mac OS X. Поэтому эмуляторы PowerPC Macintosh, такие как SheepShaver, также используют эмулятор при работе с классической Mac OS. Родная Mac OS X за пределами Classic никогда не использовала эмулятор.

Смотрите также
  • Наноядро Mac OS
  • Alpha Microsystems для аналогичной архитектуры для запуска кода 68k на x86
  • Rosetta, аналогичная функция в Mac OS X, которая переводит PowerPC инструкции x86 инструкции, а позже, х86 инструкции к ARM инструкции
использованная литература
Последняя правка сделана 2023-12-31 11:40:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте