Паскаль — 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).
В любом случае, FPC (компилятор FreePascal) кажется более подходящим для разработки портативной операционной системы, поскольку он легко настраивается и генерирует код для большого количества платформ.
Взаимодействие Pascal с ассемблером
Так же, как и при создании ядра в C++, компиляторы Pascal искажают имена функций, чтобы они передавали больше информации (такой как аргументы и возвращаемые типы). Это означает, что если вы просто напишете
модуль KernelMain; интерфейс выполнение процедура kernel_main; начинать ... конец; конец.
В качестве имени функции вы можете получить «THREADVARLIST_P$KERNEL_MAIN», а не просто «kernel_main». Если вы используете FreePascal, инструмент objdump может показать вам таблицу символов файла .o, сгенерированную компилятором, которая даст вам «настоящее» имя функции.
В качестве альтернативы вы можете использовать дополнительные операторы компилятора для принудительного использования «общедоступного имени» для вашей функции:
модуль KernelMain; интерфейс выполнение процедура kernel_main; [публичный, псевдоним: 'KERNEL_MAIN']; начинать .