Аппаратное обеспечение IBM PC



         

Интерфейс с Си


Приведем текст программы, позволяющей программам, составленным на языке программирования Си, использовать функции драйвера расширенной памяти. Эта программа будет работать только в моделях памяти Small и Compact. Для других моделей памяти требуется изменить строки программы, в которых передаваемые функциям параметры извлекаются из стека и тип процедур (FAR):

Аргументы Small, Compact Large, Huge

Первый аргумент [bp+4] [bp+6] Второй аргумент [bp+6] [bp+8]

; Это интерфейсный модуль для вызова функций ; XMS из Си. Текст программы рассчитан на ; модель памяти Small.

.model small,c .DATA

; В этом месте будет храниться адрес ; управляющей функции XMM

XMM_Control dd ?

.CODE

; Макроопределения для выполнения соглашения об ; использовании регистров в процедурах Си

c_begin macro push bp mov bp,sp push si push di endm

c_end macro pop di pop si mov sp,bp pop bp ret endm

; Все процедуры должны быть public

public XMM_Installed public XMM_Version public XMM_RequestHMA public XMM_ReleaseHMA public XMM_GlobalEnableA20 public XMM_GlobalDisableA20 public XMM_EnableA20 public XMM_DisableA20 public XMM_QueryA20 public XMM_QueryLargestFree public XMM_QueryTotalFree public XMM_AllocateExtended public XMM_FreeExtended public XMM_MoveExtended public XMM_LockExtended public XMM_UnLockExtended public XMM_GetHandleLength public XMM_GetHandleInfo public XMM_ReallocateExtended public XMM_RequestUMB public XMM_ReleaseUMB

;** ;.Name XMM_Installed ;.Title Получение адреса управляющей функции ; ;.Descr Эта функция проверяет наличие драйвера ; HIMEM.SYS и в случае его присуствия ; запоминает адрес управляющей функции. ; ;.Proto unsigned XMM_Installed(void); ; ;.Params Не используются ; ;.Return 0 - драйвер HIMEM.SYS не установлен; ; 1 - драйвер HIMEM.SYS установлен. ; ;.Sample xms_test.c ;**

XMM_Installed proc near c_begin

mov ax, 4300h int 2fh cmp al, 80h jne NotInstalled

mov ax, 4310h int 2fh mov word ptr [XMM_Control], bx mov word ptr [XMM_Control+2], es mov ax,1 jmp Installed

NotInstalled: mov ax, 0 Installed: c_end XMM_Installed endp




Содержание  Назад  Вперед