Сайт TMT Development Corp.
Главная
TMT Pascal 5.0
Продукты
.NET Компилер
Скачать
Апдейты
Примеры кода
Contributions
TMT FAQ
Документация
Продажи
Сервис
Ссылки
Связь с TMT
 
Back to Pascal.Sources.Ru


Рейтинг@Mail.ru
TMT Logo

TMT Pascal  ЧАВО
(ЧАстые Вопросы и Ответы)



Как заказать компилятор 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).


Автор русского проекта:
Valery Votintsev

при поддержке
TMT Development Corporation.
All rights reserved.

[Новости]   [Продукты]   [Продажи]   [Скачать]   [Апдейты]   [Поддержка]
[FAQ]   [Contributions]   [Ссылки]   [Связь с TMT]   [Главная]