8.5. Использование памяти DOS под расширителем Go32 |
Вверх Предыдущий Следующий |
Поскольку Free Pascal для DOS – это 32-битный компилятор и используется расширитель DOS, доступ к памяти DOS является нетривиальным. Далее мы попытаемся объяснить, как получить доступ к памяти и использовать DOS или память в реальном режиме (спасибо за разъяснения Thomas Schatzl, E-mail: tom_at_work@geocities.com). В защищённом режиме память назначается через селекторы и смещения. Вы можете думать, что селекторы в защищённом режиме эквивалентны сегментам. В Free Pascal указатель представляет собой смещение в селекторе DS, который указывает на данные вашей программы. Для доступа к памяти DOS (в реальном режиме) вам нужен селектор. Который указывает на память DOS. Модуль go32 предоставляет вам такой селектор: переменную DosMemSelector, которая называется соответственно. Вы также можете выделить память в пространстве памяти DOS, используя функцию global_dos_alloc модуля go32. Эта функция будет выделять память в области видимости DOS.В качестве примера здесь приведена функция, которая выделяет память в реальном режиме DOS и возвращает пару селектор:смещение (selector:offset). procedure dosalloc(var selector : word; var segment : word; size : longint); (Вам необходимо освободить эту память, используя функцию global_dos_free function). Вы можете получить доступ к любому месту в памяти, используя селектор. Вы можете получить селектор, используя функцию: function allocate_ldt_descriptors(count : word) : word; а затем передать этот селектор в нужную точку физической памяти, используя функцию function set_segment_base_address(d : word;s : longint) : boolean; Её длина может быть установлена с помощью функции: function set_segment_limit(d : word;s : longint) : boolean; Вы можете управлять памятью, указанной в селекторе, используя функции модуля GO32. После использования селектора вы должны освободить его, снова используя функцию: function free_ldt_descriptor(d : word) : boolean; Подробности см. в описании модуля go32. |