Macintosh Toolbox реализует многие высокоуровневые функции Classic Mac OS , включая набор интерфейсов прикладного программирования для разработки программного обеспечения на платформе. Toolbox состоит из ряда «менеджеров», программных компонентов, таких как QuickDraw , отвечающих за рисование экранной графики, и Menu Manager, которые поддерживают структуры данных, описывающие панель меню. Поскольку оригинальный Macintosh был разработан без виртуальной памяти или защиты памяти , было важно классифицировать код в соответствии с тем, когда он должен быть загружен в память или сохранен на диске, и как к нему следует обращаться. Toolbox состоит из подпрограмм, достаточно важных для того, чтобы постоянно храниться в памяти и быть доступными с помощью двухбайтовой машинной инструкции ; однако он исключает основные функциональные возможности «ядра», такие как управление памятью и файловая система . Обратите внимание, что Toolbox не рисует меню на экране: меню были разработаны так, чтобы иметь настраиваемый внешний вид, поэтому код рисования хранился в ресурсе , который может быть на диске.
Оригинальная реализация семейства Motorola 68000 операционной системы Macintosh выполняет системные вызовы, используя механизм обработки исключений недопустимых кодов операций этого процессора . Motorola указала, что инструкции, начинающиеся с 1111 и 1010, никогда не будут использоваться в будущих процессорах семейства 68000, тем самым освобождая их для использования операционной системой в качестве таковых. Кроме того, у каждого из них был свой выделенный вектор прерывания , отдельный от общего обработчика недопустимых кодов операций. Поскольку 1111 был зарезервирован для использования сопроцессорами , такими как 68881 FPU , Apple выбрала 1010 ( A в шестнадцатеричном формате ) в качестве префикса для вызовов операционной системы. Обработка недопустимых инструкций известна как прерывание , поэтому эти специальные инструкции назывались A-ловушками . [1] Когда процессор сталкивается с такой инструкцией, он передает управление операционной системе, которая ищет соответствующую задачу и выполняет ее. У этого механизма было два преимущества:
Система была дополнительно оптимизирована путем выделения некоторых битов инструкции A-trap для хранения параметров наиболее распространенных функций. Например, выделение памяти является очень распространенной задачей, поэтому она должна быть выражена в как можно меньшем количестве байтов кода. Иногда программист хочет очистить блок памяти до нулей, поэтому либо функция выделения должна принимать логический параметр, либо должно быть две функции выделения. Для передачи параметра потребовалась бы дополнительная двухбайтовая инструкция, что было бы неэффективно. Наличие двух функций потребовало бы как минимум дополнительных четырех байтов ОЗУ, используемых для адреса в таблице поиска функций. Наиболее эффективным решением является сопоставление нескольких A-trap с одной и той же подпрограммой, которая затем использует A-trap в качестве параметра. Это справедливо для наиболее часто используемых подпрограмм. Однако Toolbox состоял из менее часто используемых подпрограмм. Toolbox был определен как набор подпрограмм, которые не принимали никаких параметров в A-trap и индексировались из 1024-записной, 4-килобайтной таблицы диспетчеризации . [2] (Машины, поставляемые с менее чем одним мегабайтом ОЗУ, используют одну таблицу из 512 записей, что соответствует 256-записной таблице диспетчеризации ОС более поздних версий ПЗУ. [3] )
В 1994 году Apple выпустила компьютеры Macintosh, использующие архитектуру PowerPC , в которой отсутствовала аппаратная поддержка механизма A-trap, доступного в системах 68k. Однако из-за их использования при применении программных исправлений таблицы диспетчеризации были сохранены. Код библиотеки API, лежащий в основе любой процедуры Toolbox, затем ничего не делает, кроме как ссылается на таблицу диспетчеризации. Таблица диспетчеризации связана только с эмулированным кодом семейства 68000. Функции Toolbox, реализованные в собственном коде PowerPC, должны сначала отключить эмулятор с помощью Mixed Mode Manager. Ради единообразия и расширяемости новые записи функций даже продолжали добавляться в Toolbox после перехода на PowerPC.
Однако альтернативный механизм существовал в Code Fragment Manager, который использовался для загрузки и динамического связывания собственных программ PowerPC. Системный вызов PowerPC, аналогичный механизму A-trap, использовался для взаимодействия с наноядром Mac OS , который предлагал мало услуг, напрямую полезных для приложений.
Toolbox состоит из часто используемых функций, но не из наиболее часто используемых. В результате он превратился в мешанину из различных библиотек API . [3] Toolbox охватывает большую часть базовой функциональности, которая отличала Classic Mac OS. Ссылки Apple «Inside Macintosh: Macintosh Toolbox Essentials» и «Inside Macintosh: More Macintosh Toolbox», также неопределенные по объему, также документируют большую часть Toolbox.
Поскольку большая часть Toolbox реализована в ПЗУ, наряду с прошивкой компьютера , ее было удобно использовать в качестве среды загрузчика . В сочетании с ресурсами , хранящимися на чипе ПЗУ, Toolbox может сделать экран серым, показать диалоговое окно с подписью приветствия «Добро пожаловать в Macintosh» и отобразить курсор мыши. Используя Toolbox для загрузки машины, можно инициализировать элементарную среду Mac-подобную еще до загрузки чемодана System с диска (фактически до выполнения ПЗУ на картах NuBus), когда должно быть принято решение об использовании 24-битной или 32-битной адресации. (Поддержка 32-битной адресации в System 7 требует 32-битных чистых ПЗУ, поскольку старые ПЗУ Mac не поддерживают это). Необходимость в диагностике, как в резидентной BIOS для плат IBM PC -совместимых, не является обязательной, поскольку Macintosh имеет большую часть своей диагностики в POST и автоматически сообщает об ошибках с помощью кодов « Sad Mac ».
Однако сходство между средой загрузки и фактической операционной системой не следует путать с идентичностью. Хотя процесс загрузки «Classic Mac OS» запутан и в значительной степени недокументирован, он не более ограничен, чем BIOS, совместимый с IBM PC . Подобно главной загрузочной записи ПК , Mac на основе ПЗУ считывает и выполняет код из первых блоков («загрузочных блоков») раздела диска , выбранного в качестве загрузочного устройства . Затем загрузочные блоки проверяют, существует ли подходящая элементарная среда, и используют ее для загрузки системного чемоданчика. Другая операционная система с другой файловой системой может загрузиться, просто используя свой собственный код в загрузочных блоках. [4] Однако эта система не использовалась для PowerPC Linux, поскольку Open Firmware в машинах New World ROM требует загрузчика в файловой системе HFS — причина, не имеющая ничего общего с Toolbox или «старомодными» Mac в целом. Если говорить более узко, панель управления загрузочным диском в классической Mac OS и более поздних версиях macOS позволяет пользователю выбирать смонтированную файловую систему только с очень конкретными ограничениями.
В Mac OS X Toolbox вообще не используется, хотя Classic Environment загружает файл Toolbox ROM в свою виртуальную машину. Большая часть Toolbox была реструктурирована и реализована как часть API программирования Carbon от Apple , что позволяет программистам, знакомым с Toolbox, легче переносить свой программный код в Mac OS X.