8.6. При переносе кода Turbo Pascal

На верх  Назад  Вперёд

Тот факт, что 16-разрядный код больше не используется, означает, что некоторые старые конструкции и функции Turbo Pascal устарели. Ниже приведён список функций, которые больше не должны использоваться:

Seg() :
Возвращает сегмент адреса памяти. Так как сегменты больше не используются, то возвращает ноль в Free Pascal реализации Seg.

Ofs() :
Возвращает смещение адреса памяти. Так как сегменты больше не используются, то эта функция в Free Pascal возвращает полный адрес. Как следствие, возвращаемый тип longint или int64 вместо Word.

Cseg(), Dseg() :
Возвращает, соответственно, сегмент кода и сегмент данных вашей программы. В Free Pascal эти функции возвращают ноль, так как и код и данные находятся в одной области памяти.

Ptr :
Принимает сегмент и смещение из адреса, и возвращает указатель на этот адрес. Она была изменена в библиотеке реального времени (run-time library) и сейчас просто возвращает смещение.

memw и mem :
Эти массивы дают доступ к памяти DOS. Free Pascal поддерживает их на платформе go32v2, они отображаются в пространстве памяти DOS. Для их использования вам необходим модуль go32. На других платформах они не поддерживаются.

Вы не должны использовать эти функции, так как они очень трудно переносимы, они являются специфическими для DOS и процессора 80x86. Компилятор Free Pascal разработан для совместимости с другими платформами, поэтому ваш код должен быть максимально переносимым, а не для какой-то специфической системы. Конечно, кроме случаев, когда вы пишите какие-либо модули драйверов.