Хонич А.
Как самому создать трехмерную игру
стр. 16

привыкнуть к тому, что вам теоретически не нужна больше нижняя память. Гораздо важнее объем памяти, “лежащий” за пределами первого мегабайта, т.е. extended memory'. Как это ни странно, но для запуска программ, написанных на WATCOM’e (независимо от размера самой программы), порой достаточно меньше 200К нижней памяти. Однако это далеко не всегда так. То, что код и данные программы не используют нижнюю память, совершенно не означает, что последняя пу стует. Это было бы расточительством - не использовать лишние 512К памяти, поэтому’ программисты чаще всего используют эту память для своих ну жд: например, буфера экранов, буфер DMA для оцифрованного звука, всевозможные таблицы и др., т.е. как данные. Что касается вообще работы с памятью, то, если вы работаете в однозадачном режиме, вам больше не нужны сегменты. Вы о них как бы забыли, хотя теоретически они есть. В этом слу чае, например при обращении к графическому экрану, который обычно имеет адрес 0ха000:0, вы будете использовать физический адрес экрана ОхаОООО. Как же, спросите вы, пользоваться прерываниями, которые требуют в качестве аргумента адрес: сегмент плюс смещение? Здесь имеются два варианта:

1.    Использовать прерывание защищенного режима (int386). Для некоторых прерываний в качестве адреса можно передавать физический адрес памяти без сегмента (подробности смотрите в help’e).

2.    Использовать эмуляцию прерываний реального режима с использованием функции DPMI 300h. При этом все параметры передаются гак, как будто вы работаете в реальном режиме и записываются в структуру RMI (Real Mode Info), а адрес этой структуры передается в регистре EDI при вызове прерывания DPMI (для тех, кто забыл, напомню, что номер DPMI прерывания: 0x31).

Если мы уже заговорили о памяти, то немного слов о функциях распределения памяти. Для использования памяти, находящейся выше мегабайта, служат функции:

malioc(int size) - для выделения памяти необходимого размера;

free(void *point) - для освобождения памяти. Для использования памяти ниже мегабайта используется функция DPMI 100Н.

А теперь рассмотрим наиболее существенные отличия WATCOM C/C++ от BORLAND C++.

Во-первых, тип данных - Int в WATCOM’e для 32-битного кода имеет размер 32 бита. В общем, это не имеет значения, если только вы не использу ете какие-либо внешние структуры, в которых важны номера смещений.

Во-вторых, в WATCOM’e, в отличие от BORLAND’a, очень сложный встроенный ассемблер. Наиболее простой выход здесь - написать часто используемые макросы на ассемблере, используя директиву компилятора “pragma aux’’ и использовать этот макрос как функцию. Например, для быстрой пересылки в памяти макрос “move” может выглядеть так:


Новости
Авторы проекта «1917» выпустили онлайн-игру об истории СССР
Разработчики рассказали о том, что пользователи их игры смогут принять участие в главных исторических событиях советского периода.
В God of War не будет сезонного пропуска
Креативный директор студии SIE Santa Monica Studio Кори Барлог заявил, что в новой части God of War не будет сезонного пропуска.