Ошибка при компиляции (или не полная совместимость с TP)

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
alexey_k
незнакомец
Сообщения: 3
Зарегистрирован: 24.03.2008 12:58:38

Ошибка при компиляции (или не полная совместимость с TP)

Сообщение alexey_k »

Здравствуйте!

Я скачал последнюю версию FreePascal 2.2.0, и попытался откомпелировать исходник http://www.sources.ru/pascal/graph/vesa256.zip. Он предназначен для работы с VESA в реальном режиме, но компилятор выдал мне ошибку тут:

Код: Выделить всё

{the CRTC port address}
  CRTCPort           :WORD ABSOLUTE 0:$463;


vesa256.pas(615,38) Fatal: Syntax error, ";" expected but ":" found
vesa256.pas(0) Fatal: Compilation aborted

хотя TurboPascal 7 откомпелировал это на ура.

Но проблема TP в том, что он автоматически линкует программу в EXE, а мне нужен чистый бинарик (ос-независимый, т.к. я не использую стандартные библиотечные ф-ии)...

Режим совместимости с Turbo Pascal тоже не помог =(

В чем может быть дело?

Зарание спасибо![/i][/code]
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Указание абсолютных адресов памяти невозможно, поскольку Free Pascal компилирует только для защищенных режимов работы.
alexey_k
незнакомец
Сообщения: 3
Зарегистрирован: 24.03.2008 12:58:38

Сообщение alexey_k »

тогда не моглибы вы подсказать компилятор для реального режима (ну кроме TP), с помощью которого можно получить нелинкованный бинарик?
SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Сообщение SAK »

Компилятор тут не причём. Реальный режим и независимость от ОС вещи взаимоисключающие. Все современные ОС работают в защищенном режиме процессора. DOS программы под Windows работают в виртуальном режиме. При этом для них эмулируются многие функции MS-DOS и BIOS. В Вашем варианте используется прямое обращение к области данных BIOS и то не совсем корректно (формально правильный адрес $40:$63) это может работать только в ОС которые будут эмулировать эту область памяти для DOS программы.
Любые обращения к аппаратным устройствам в защищённом режиме происходят с разрешения или под управлением ОС.
Ответить