Паскаль — OSDev Wiki
Содержание
|
Историческая справка
Первоначальный Standard Pascal во многих отношениях отличался от языка Object Pascal, с которым знакомо большинство людей сегодня, будучи намного проще, но и более ограниченным.
Сам доктор Вирт не предназначал Паскаль для системного программирования, и его текущую языковую эволюцию составляли языки Модула-2 и Оберон. Оба языка связаны с Pascal так же, как C++, C# и Java связаны с C. Oberon-2 поддерживает все концепции объектно-ориентированного программирования. В отличие от семейства языков Си, на пути от Паскаля к Оберону определение языка стало намного компактнее, но сам язык стал более мощным.
Преемники Паскаля были разработаны для устранения недостатков Паскаля в этом отношении.
Предыдущее использование в разработке ОС
Паскаль использовался в ранних Apple Mac в качестве языка реализации.
Oberon как преемник Pascal широко использовался для разработки и исследования операционных систем (см. Native Oberon и BlueBottle).
Обычно используемые инструменты
Самыми популярными компиляторами Pascal сегодня являются Delphi и FreePascal Compiler, и в меньшей степени Turbo Pascal.
Существует коммерческая (очевидно, частная лицензия) операционная система, разрабатываемая в Delphi, ClassiOS, клоне Windows (ранее PetrOS®, разработанная с использованием внутреннего компилятора Pascal) Питером Таттамом (наиболее известным своим стеком TCP/IP для DOS, линейка продуктов Trumpet).
Он также настроил Delphi для создания драйверов устройств Windows.В любом случае, FPC (компилятор FreePascal) кажется более подходящим для разработки портативной операционной системы, поскольку он легко настраивается и генерирует код для большого количества платформ.
Взаимодействие Pascal с ассемблером
Так же, как и при создании ядра в C++, компиляторы Pascal искажают имена функций, чтобы они передавали больше информации (такой как аргументы и возвращаемые типы). Это означает, что если вы просто напишете
модуль KernelMain; интерфейс выполнение процедура kernel_main; начинать ... конец; конец.
В качестве имени функции вы можете получить «THREADVARLIST_P$KERNEL_MAIN», а не просто «kernel_main». Если вы используете FreePascal, инструмент objdump может показать вам таблицу символов файла .o, сгенерированную компилятором, которая даст вам «настоящее» имя функции.
В качестве альтернативы вы можете использовать дополнительные операторы компилятора для принудительного использования «общедоступного имени» для вашей функции:
модуль KernelMain; интерфейс выполнение процедура kernel_main; [публичный, псевдоним: 'KERNEL_MAIN']; начинать .