Введение

Система подпрограмм для классической Mac OS. Macintosh Toolbox реализует многие высокоуровневые функции классической Mac OS, включая набор интерфейсов программирования приложений для разработки программного обеспечения на этой платформе. Toolbox состоит из ряда "менеджеров" – программных компонентов, таких как QuickDraw, отвечающий за отрисовку графики на экране, и Menu Manager, поддерживающий структуры данных, описывающие строку меню. Поскольку оригинальный Macintosh был разработан без виртуальной памяти и защиты памяти, было важно классифицировать код в зависимости от того, когда его следует загружать в память или хранить на диске, и как к нему обращаться. Toolbox состоит из подпрограмм, достаточно важных для постоянного хранения в памяти и доступных через двухбайтовую машинную инструкцию; однако он не включает в себя основную функциональность "ядра", такую как управление памятью и файловая система. Важно отметить, что Toolbox не отрисовывает меню на экране: меню были спроектированы с возможностью настройки внешнего вида, поэтому код отрисовки хранился в ресурсе, который мог находиться на диске.

На системах 68k

Оригинальная реализация семейства Motorola 68000 операционной системы Macintosh выполняет системные вызовы, используя механизм обработки исключений недопустимого опкода этого процессора. Motorola определила, что инструкции, начинающиеся с 1111 и 1010, никогда не будут использоваться в будущих процессорах семейства 68000, освобождая их для использования операционной системой. Кроме того, для каждой из них был предусмотрен собственный вектор прерывания, отличный от общего обработчика недопустимых опкодов. Поскольку 1111 был зарезервирован для использования сопроцессорами, такими как 68881 FPU, Apple выбрала 1010 (в шестнадцатеричном представлении ASCII, A, за которым следует управляющий символ) в качестве префикса для системных вызовов. Обработка недопустимых инструкций известна как перехват (trapping), поэтому эти специальные инструкции назывались A-перехватами. Когда процессор обнаруживает такую инструкцию, он передает управление операционной системе, которая находит соответствующую задачу и выполняет её. Этот механизм имеет два преимущества:

Он позволяет создавать компактные программы. Каждый доступ к операционной системе занимает всего два байта, в отличие от четырех или шести при использовании обычных инструкций перехода. Таблица, используемая для поиска соответствующей функции, хранится в оперативной памяти. Таким образом, даже если базовый код хранился в ПЗУ, его можно было переопределить (изменить), заменив адрес памяти ПЗУ адресом оперативной памяти. Система была дополнительно оптимизирована за счет выделения некоторых битов A-перехвата для хранения параметров наиболее часто используемых функций. Например, выделение памяти – очень распространенная задача, поэтому она должна быть выражена минимальным количеством байтов кода. Иногда программисту требуется обнулить выделенный блок памяти, поэтому функция выделения памяти должна либо принимать логический параметр, либо существовать в двух вариантах. Передача параметра потребовала бы дополнительной двухбайтовой инструкции, что было бы неэффективно. Использование двух функций потребовало бы как минимум дополнительных четырех байтов оперативной памяти для адреса в таблице поиска функций. Наиболее эффективным решением является сопоставление нескольких A-перехватов одной и той же подпрограмме, которая затем использует A-перехват в качестве параметра. Это справедливо для наиболее часто используемых подпрограмм. Однако Toolbox состоял из менее часто используемых подпрограмм. Toolbox определялся как набор подпрограмм, которые не принимали параметров в A-перехвате и индексировались из таблицы диспетчеризации на 1024 записи объемом 4 килобайта. (Машины, поставляемые с менее чем одним мегабайтом оперативной памяти, использовали единую таблицу на 512 записей, что соответствует таблице диспетчеризации ОС на 256 записей в более поздних версиях ПЗУ.)

На системах PowerPC

В 1994 году Apple выпустила компьютеры Macintosh на архитектуре PowerPC, которой не хватало аппаратной поддержки механизма A-trap, доступного на системах 68k. Однако, поскольку таблицы диспетчеризации использовались для применения программных патчей, они были сохранены. Код библиотеки API, лежащий в основе любой процедуры Toolbox, теперь просто обращается к таблице диспетчеризации. В таблице диспетчеризации содержались ссылки только на код семейства 68000. Функции Toolbox, реализованные на нативном коде PowerPC, должны были сначала отключить эмулятор с помощью менеджера смешанного режима. Для обеспечения единообразия и расширяемости новые записи функций продолжали добавляться в Toolbox даже после перехода на PowerPC. Альтернативный механизм существовал в менеджере фрагментов кода (Code Fragment Manager), который использовался для загрузки и динамической линковки нативных программ PowerPC. Механизм системных вызовов PowerPC, аналогичный механизму A-trap, использовался для взаимодействия с наноядром Mac OS, который предоставлял мало сервисов, непосредственно полезных для приложений.

Интерфейсы программирования

Инструментарий состоит из функций, которые используются часто, но не из самых востребованных. В результате он превратился в эклектичную смесь различных библиотек API. Однако эта система не применялась для PowerPC Linux, поскольку Open Firmware в компьютерах New World ROM требует загрузчика, расположенного в файловой системе HFS – причина, не связанная с Инструментарием или "устаревшими" Mac в целом. Более конкретно, панель управления "Загрузочный диск" в Classic Mac OS и последующих версиях macOS позволяет пользователю выбирать только смонтированную файловую систему с очень строгими ограничениями.

Наследие

В Mac OS X Toolbox вообще не используется, хотя среда Classic загружает ROM-файл Toolbox в свою виртуальную машину. Большая часть Toolbox была реструктурирована и реализована в составе программного API Carbon от Apple, что облегчило программистам, знакомым с Toolbox, перенос своего кода на Mac OS X.