TMT Pascal ЧАВО (ЧАстые Вопросы и Ответы)
- Как заказать компилятор TMT Pascal?
- Я недавно скачал бесплатную версию
TMT Pascal, но не знаю, как мне его использовать после раззиповки архива.
- Можно ли создавать коммерческие программы с
помощью бесплатной версии TMTPL?
- Я пытаюсь перекомпилировать мои старые TP исходники
с помощью TMT Pascal, но получаю кучу сообщений об ошибках. Что здесь не так?
- Как настроить IDEW32 для работы с русской кодировкой
в DOS (cp-866)?
- Как выводить в графическом режиме символы в русской кодировке
(cp-866)?
- Почему TMTPL не компилирует большие программы? Это баг?
- Как создать Windows GUI приложение
с помощью TMT Pascal?
- Как создать и использовать DLL для защищенного режима в MS-DOS?
- Как избавиться от вывода логотипа экстендера PMODE/W в моих MS-DOS
приложениях?
- Почему при запуске (RUN) моей программы
TMT Pascal не предупреждает меня об ошибках в коде программы?
- Каким образом создавать и редактировать файлы
ресурсов (.res, .rc), используемые в диалогах Windows?
- Как получить прямой доступ к данным?
- Я пытаюсь написать TSR программу с помощью TMT
Pascal, но она не работает. Почему?
- Как написать обработчик прерывания на TMT
Pascal?
- Как выделить блок в первом мегабайте памяти?
- Можно ли производить арифметические операции с
указателями?
- Почему не все функции модуля GRAPH работают с
экстендером PMode?
- Я создал Win32 GUI приложение, использующее
библиотеку Graph. Почему оно не работает?
- Почему не устанавливается LFB видео режим при использовании
модуля GRAPH?
- Почему в чистом MS DOS не устанавливается LFB SVGA режим,
хотя под Windows' 95 всё работает?
- Я использую ссылку OVERLOAD для описания оператора
'*' для переменных с плавающей точкой в модуле, но она не оказывает никакого эффекта. Почему?
- Мне нужно вызвать прерывание в реальном режиме (ну, скажем, INT
21h); и мне нужно записать в регистры DS:DX значение segment:offset некоторых моих переменных.
Как мне это сделать?
- В анонсе написано, что в
TMT Pascal встроен высоко-уровневый отладчик.
Однако, мне непонятно, что такое
"высоко-уровневый отладчик"?
Позволяет ли он, например, ставить точки останова
и осуществлять пошаговое выполнение с "проваливанием" (Step-through),
отлавливать ошибки времени выполнения, и т.д.?
- Почему выполнение команды
"Single-Step" во встроенном отладчике
очень медленное?
Как заказать компилятор TMT Pascal?
Заказать можно по электронной почте: sales@tmt.com
по кредитной карточке (VISA, MasterCard, AMEX, Discover). Укажите номер карточки и срок ее действия.
Не забудьте указать ваш почтовый адрес!
Если вы не доверяете свой заказ электронной почте, то просто позвоните в
TMT Development Corp. по телефону: 1-631-689-3172. Поскольку линия защищенная, можно смело сообщать данные о своей кредитной карточке.
Для Российских покупателей: Заполните форму заказа, расположенную на страничке Продажи.
Если Вас не устраивают все предыдущие варианты, то просто отправьте ваш заказ обычной почтой.
Почему TMTPL не компилирует большие программы? Это баг?
Нет, это свойство :). Попытайтесь увеличить максимальный размер EXE файла (ключ -exemax в параметрах
командной строки) и максимальный размер OBJ файла (ключ -objmax в параметрах командной строки).
Как настроить IDEW32 для работы с русской кодировкой
в DOS (cp-866)?
Для этого нужно установить тип фонта "Терминал":
Options -> Environment -> Display -> Font Name = TERMINAL
Как выводить в графическом режиме символы в русской кодировке
(cp-866)?
Для этого достаточно загрузить любой русский фонт.
Вот пара русских фонтов и пример работы с ними:
rusfont.zip (4k)
Почему не все функции модуля GRAPH работают под экстендером PMode?
Дело в том, что для некоторых функций модуля GRAPH требуется специальный DPMI сервис (например,
функции 0100h, 0202h, 0203h и 0800h), которые просто-напросто не поддерживаются экстендером PMODE. Попробуйте использовать
другой экстендер.
Можно ли создавать коммерческие приложения с помощью бесплатной версии
TMTPL?
Нельзя. Бесплатная версия компилятора предназначена только для ознакомления.
Если Вы не заплатили за компилятор, Вы не имеете права продавать программы, созданные с помощью
TMTPL.
Как получить прямой доступ к моим данным?
TMT Pascal использует плоскую (flat) модель памяти. Это означает, что весь код,
статические и временные данные (размещенные с помощью процедуры GetMem),
хранятся в одном сегменте. Таким образом, Вы можете получить доступ к любым Вашим данным простым указанием линейного
смещения относительно начала объекта памяти. Приведенный ниже пример показывает, как получить прямой доступ
к блоку памяти, который был выделен с помощью GetMem.
- var
- P: Pointer; Dummy: Byte;
i: DWORD;
- begin
- GetMem(P, 100000);
- for i := 0 to 99999 do
- Byte((P + i)^) := Random(256);
- for i := 0 to 99999 do
- Dummy := Byte((P + i)^);
- end.
Кроме того, Вы можете использовать встроенный ассемблер дл
ускорения прямого доступа к памяти.
Пример:
- asm
- mov edi, [P] // P - это указатель на блок данных в памяти
- mov ecx, [SIZE] // SIZE - это размер блока данных
- mov al, 0FFh // Присвоим значение для байта-заполнителя
- rep stosb // Заполним блок данных значением $FF
- end;
Можно ли производить арифметические операции с указателями?
Да, можно. Вы можете использовать процедуры Inc() и Dec().
Кроме этого, для увеличения и уменьшения значения указателя можно использовать операторы "+" и
"-".
Например:
- var
- ScrAddr: Pointer;
- begin
- // ScrAddr указывает на первый байт
VGA памяти
- // (левый верхний пиксель)
- ScrAddr := Pointer($A0000);
- // Теперь ScrAddr указывает на последний
байт VGA памяти
- // (нижний правый пиксель)
- ScrAddr := ScrAddr + 63999;
- end.
Почему не устанавливается LFB режим при использовании модуля GRAPH?
Linear Flatframe Buffer (LFB) поддерживается только в том случае,
если Ваша видеокарта совместима со стандартом VESA VBE 2.0 или выше. Старые видеокарты, поддерживающие VESA VBE v.1.2
или ниже, не могут устанавливать LFB без специальных VESA VBE драйверов. Мы рекомендуем использовать для этой цели SciTech
Display Doctor 5.3 или выше, который позволяет получить доступ к LFB даже на старых видеокартах, не поддерживающих
VESA VBE 2.0. Драйвер SciTech Display Doctor можно взять на странице изготовителя: http://www.scitechsoft.com
Почему не устанавливается LFB SVGA режим под голым DOS-ом,
хотя под Windows' 95 все работает нормально?
Вероятнее всего, Вы компилируете Вашу программу для экстендера
PMODE. Этот экстендер не поддерживает функцию 800h DPMI хоста под голым
DOS, в то время, как под Windows 95 Ваша программа работает благодаря тому, что Windows 95 имеет свой собственный DPMI хост.
Рекомендуем перекомпилировать Вашу программу для другого экстендера, например PMODE/W, WDOSX или DOS/4GW,
которые поддерживают функцию 800h DPMI хоста даже под голым DOS.
Я пытаюсь написать TSR программу с помощью TMT
Pascal, но она не работает. Почему?
TMT Pascal создает 32-битные программы для защищенного режима MS-DOS,
и не предназначен для разработки программ, работающих в реальном режиме времени, таких, как TSR.
Как написать обработчик прерывания на TMT Pascal?
Приведенный ниже пример демонстрирует простой метод работы с
обработчиками прерываний.
- program IntDemo;
- {$ifndef __DOS__}
Неверно выбрана платформа! Выберите DOS !
{$endif}
uses Dos, Crt;
- var
- Int1CSave: FarPointer;
- Time: LongInt;
- /////////////////////////////////////////////////////
- procedure TimerHandler; interrupt;
- var
- StoreX, StoreY: Word;
- begin
- Inc(time);
- StoreX := WhereX;
- StoreY := WhereY;
- GotoXY(1, 1);
- Write(time);
- GotoXY(StoreX, StoreY);
- end; {TimerHandler}
- /////////////////////////////////////////////////////
- begin
- ClrScr;
- Time := 0;
- GetIntVec($1C, Int1CSave);
- SetIntVec($1C, @TimerHandler);
- Writeln;
- Writeln('Введите что-нибудь и нажмите "ENTER" для выхода');
- Readln;
- SetIntVec($1C, Int1CSave);
- end.
Я использую ссылку OVERLOAD для описания оператора
'*' для переменных с плавающей точкой в модуле, но она не оказывает никакого эффекта. Почему?
Привожу ниже часть моего модуля:
- {16.16 fixed-point math unit}
- unit Fix1616;
-
- interface
- type Fixed16 = LongInt;
- function FixMulFix(F1, F2: Fixed16): Fixed16;
-
- implementation
- function FixMulFix(F1, F2: Fixed16): Fixed16;
- assembler;
- asm
- mov eax,F1
- mov edx,F2
- imul edx
- sal eax,1
- adc edx,0
- shrd eax,edx,16
- end;
- OVERLOAD * = FixMulFix;
- end.
Вам следует поместить декларацию OVERLOAD
внутри секции INTERFACE Вашего модуля. А функция FixMulFix должна выглядеть
следующим образом:
- function FixMulFix(F1, F2: Fixed16): Fixed16;
- OVERLOAD * = FixMulFix;
- ...
Как выделить блок в первом мегабайте памяти?
Для этого следует использовать функции DOSMemoryAlloc (дл
выделения блока памяти) и DOSMemoryFree (для освобождения блока памяти)
из модуля DPMI.
Пример:
- program DpmiDemo;
- {$ifndef __DOS__}
Неверно выбрана платформа. Выберите DOS!
{$endif}
- uses DPMI;
- var
- rmSeg: Word;
- LinAddr: DWord;
- rmRegs: TRmRegs;
- i: DWord;
- begin
- // Выделить 256 байт в нижней
памяти и сохранить адрес
- // real mode сегмента
- rmSeg := DOSMemoryAlloc(256);
- if rmSeg = 0
then
- begin
- Writeln('Недостаточно нижней памяти!');
- Halt(0);
- end;
- // Получить в защищенном режиме
адрес real-mode сегмента
- LinAddr := DWord(rmSeg) * 16;
- // Очистить структуру rmRegs (заполнить ее
нулями)
- ClearRmRegs(rmRegs);
- // Функция VBE 4F00h - GetVESAInfo
- rmRegs.AX := $4F00;
- // Занести в Real mode регистр ES
значение сегмента
// выделенного блока памяти
- rmRegs.ES := rmSeg;
- // Вызвать функцию VBE 4F00h, котора
заполнит выделенный блок
- // информацией о VESA VBE
- RealModeInt($10, rmRegs);
- Write('Идентификатор: ');
- // Прочитать первые 4 байта из блока
в нижней памяти и
- // вывести их на экран. Если
Ваша видеокарта поддерживает
- // VESA VBE, Вы увидите слово
'VESA'
- for i := LinAddr to LinAddr + 3 do Write(char(Pointer(i)^));
- // Free allocated memory block
- DOSMemoryFree(rmSeg);
- end.
Как создать и использовать DLL для защищенного режима в MS-DOS?
TMT Pascal напрямую не поддерживает генерацию и/или использование DLL
для защищенного режима MS-DOS (так же, как и
для OS/2 или Win32 приложений). Однако, Вы можете использовать альтернативный вариант. Мы рекомендуем использовать
DLL Manager от Virtual Research Group, который можно скачать с нашей страницы Contributions.
Как создать Windows GUI приложение
с помощью TMT Pascal?
К сожалению, у нас нет возможности научить Вас,
как создавать Windows приложения. Мы советуем Вам купить какую-нибудь хорошую книгу о работе под Win32.
Кроме того, Вы можете найти множество полезной документации в Интернет.
Я пытаюсь перекомпилировать мои старые TP исходники
с помощью TMT Pascal, но получаю кучу сообщений об ошибках. Что здесь не так?
Некоторые исходники, написанные
для Turbo Pascal, просто не могут быть перекомпилированы нашим компилятором, пока Вы не внесете в них некоторые изменения.
Например, нельзя перекомпилировать
исходники, содержащие вставки на 16-битном ассемблере или директивы Inline.
Я создал Win32 GUI приложение, использующее
библиотеку Graph. Почему оно не работает?
Модулю GRAPH для работы с платформой Win32 необходим установленный Microsoft
DirectX версии 3 или выше. Последнюю версию дистрибутива DirectX можно скачать
со страницы http://www.microsoft.com/directx/download.asp.
Как избавиться от вывода логотипа экстендера PMODE/W в моих MS-DOS
приложениях?
Логотип, выводимый экстендером PMODE/W, охраняется лицензией, и поэтому не
может быть удален. То же самое относится и к логотипу экстендера DOS4/GW (WSTUB.EXE). Однако, мы можем предложить
использовать другой DOS экстендер, например PASSTUB.EXE, TMTSTUB.EXE, CWSTUB.EXE или TMT32.EXE. Для этих экстендеров
Вы можете запретить вывод логотипа с помощью директивы компилятора -$logo-.
Я недавно скачал бесплатную версию
TMT Pascal, но не знаю, как мне его использовать после раззиповки архива.
Прочитайте файлы readme.txt и manual.txt,
расположенные в каталоге, в который Вы развернули архив с компилятором.
Мне нужно вызвать прерывание в реальном режиме (ну, скажем, INT
21h); и мне нужно записать в регистры DS:DX значение segment:offset некоторых моих переменных.
Как мне это сделать?
Существует возможность эмулировать прерывания реального режима с помощью специальной
DPMI функции, которая реализована в процедурах MsDos и Intr
(см. описание модуля DOS в онлайн-help). Однако имейте в виду,
что в этом случае Вы _обязаны_ выделять блок памяти в нижнем мегабайте (1-ый мегабайт ОЗУ) с помощью функций AllocDosMemoryBlock
или DosMemoryAlloc из модуля DPMI.
Почему выполнение команды
"Single-Step" во встроенном отладчике
очень медленное?
В "пошаговом" (Single-Step) режиме встроенный отладчик
приостанавливает и возобновляет выполнение программы
для каждой выполняемой команды процессора.
Мы настоятельно рекомендем по возможности не пользоваться
"пошаговым" режимом.
Лучше вместо этого использовать режим "Run-To-Cursor",
который не дает замедления.
Почему при запуске (RUN) моей программы
TMT Pascal не предупреждает меня об ошибках в коде программы?
Он просто заявляет:
[Run Error]: моя_прога.EXE is not found.
И как мне победить эту проблему?
Похоже, что Вы используете версию Lite компилятора под
Windows NT (NT 3/4, 2000, или XP). Проблема в том, что
Win32-оболочка компилятора не может правильно работать
с MS-DOS версией компилятора в системах типа NT.
Для решения проблемы можно предложить два выхода:
либо используйте операционку Win'9x, либо покупайте
TMT Pascal Multi-target, который работает без проблем
на любой Win32 платформе, включая
Windows NT 3/4, Windows 2000, и Windows XP.
В анонсе написано, что в
TMT Pascal встроен высоко-уровневый отладчик.
Однако, мне непонятно, что такое
"высоко-уровневый отладчик"?
Позволяет ли он, например, ставить точки останова
и осуществлять пошаговое выполнение с "проваливанием" (Step-through),
отлавливать ошибки времени выполнения, и т.д.?
Термин "высоко-уровневый отладчик" означает следующее:
1) Встроенный дебаггер НЕ позволяет отлаживать
программу на уровне ассемблерных инструкций.
Минимальной единицей отладки является строка в Pascal программе,
а не набор команд процессора, с помощью которых реализуется
данная строка.
2) Встроенный отладчик позволяет устанавливать точки останова,
выполнять часть программы до текущего положения курсора
(run-to-cursor execution), и находить ошибки времени выполнения
(run-time errors)
3) Команда step-through НЕ реализована,
но Вы можете воспользоваться медленным режимом
"пошаговой ассемблерной" (single-step) отладки.
Однако, мы рекомендуем вместо этого пользоваться
режимом run-to-cursor,
поскольку он не вносит чувствительного замедления.
4) С помощью встроенного отладчика Вы можете отслеживать состояние
как Ваших локальных и глобальных переменных,
так и регистров процессора в любой точке останова или
после выполнения команды run-to-cursor.
Каким образом создавать и редактировать файлы
ресурсов (.res, .rc), используемые в диалогах Windows?
Для создания и редактирования диалогов мы рекомендуем использовать
программу Microsoft Dialog Editor for Windows NT (dlgedit.exe),
которая включена в состав дистрибутива TMT Pascal.
Кроме того, Вы можете использовать любой другой
редактор ресурсов,
например утилиту WEditRes,
которая входит в состав бесплатного компилятора LCC
(www.cs.virginia.edu/~lcc-win32).
|