Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 87

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 166 >> Следующая

Для записи двойного слова в конфигурационное пространство заданного устройства используется функция B10DH.
Входными регистрами этой функции являются:
? AX = В10ВН, номер функции;
? BH — номер шины, к которой подключено устройство (0—255);
? BL — номер устройства и функции:
• [7:3] номер устройства;
• [2:0] номер функции;
? DI — смещение регистра в конфигурационном пространстве (0, 8, 252);
? ECX — записываемое двойное слово.
После выполнения будут заполнены следующие регистры:
? АН — код возврата:
• 00H — выполнение успешно;
• 87Н — ошибочный номер регистра;
Глава 11. Функции BIOS
259
? CF — результат выполнения:
• 0 — функция выполнена успешно;
• 1 — ошибка.
11.2. Пример использования
Листинг 11.1 показывает модуль, содержащий функции сервиса PCI BIOS. Модуль написан на языке Pascal. Разумеется, все программы, его использующие, будут работать только в DOS или Windows Эх (Windows 2000 и Windows XP блокируют вызов прерывания IAH даже из DOS-приложений).
^^^ШШ^^ШШШШІШііШШ:'......-Ш
{ Использование функций BlH сервиса IAH} unit PCI;
INTERFACE
{ Определение поддержки PCI BIOS} Function DetectPCIBios : Boolean;
{ Поиск устройства по идентификаторам} { производителя и устройства }
Function DetectPCIdevice(
DevicelD : Word;
VendorID : Word;
Index : Word;
var BusNumber : Byte;
var DevFuncNumber : Byte ): Byte;
{ Поиск устройства по коду класса } Function DetectPCIdevicel(
ClassCode : Longint;
Index : Word;
var BusNumber : Byte;
var DevFuncNumber : Byte ): Byte;
260
Часть III. Практика программирования
I Чтение регистра конфигурации (Byte)} Function ReadPCIRegisterByte(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
var Result : Byte
): Byte;
( Чтение регистра конфигурации (Word)) Function ReadPCIRegisterWord(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
var Result : Word
): Byte;
{ Чтение регистра конфигурации (DWord)} Function ReadPCIRegisterDWord(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
var Result : Longint
): Byte;
{ Запись регистра конфигурации (Byte)} Function WritePCIRegisterByte(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
Input : Byte
): Byte;
{ Запись регистра конфигурации (Word)} Function WritePCIRegisterWord(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
Input : Word
): Byte;
Глава 11. Функции BIOS
261
{ Запись регистра конфигурации (DWord)} Function WritePCIRegisterDWord(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
Input : Longint
}: Byte;
IMPLEMENTATION
Function DetectPCIBios : Boolean; assembler; Asm
Mov ax,0bl01h
Int lah
Jc Snopcibios
Mov ax, 1
Ret Snopcibios:
Xor ax,ax
Ret End;
Function DetectPCIdevice(
DevicelD : Word;
VendorID : Word;
Index : Word;
var BusNumber : Byte;
var DevFuncNumber': Byte ): Byte; Var _Result, bn, fn : Byte; Begin Asm
mov ax, 0bl02h mov cx, DevxcelD mov dx, VendorID mov si, Index int lah
mov Result, ah
262
Часть III. Практика программирования
mov bn, bh irtov fn, Ы End;
BusNumber
bn;
DevFuncNumber:
fn;
DetectPCIdevice:= Result;
End;
Function DetectPCIdevicel(
ClassCode : Longint; Index : Word; var BusNumber : Byte; var DevFuncNumber : Byte ): Byte;
Var _Result, bn, fn : Byte; Begin Asm
mov ax, 0bl03h
{MOV ECX, ClassCode)
db 66h; mov cx, word ptr ClassCode
mov si, Index
int lah
mov _Result, ah mov bn, bh mov fn, Ы End;
BusNumber := bn; DevFuncNumber:= fn; DetectPCIdevicel:= _Result; End;
Function ReadPCIRegisterByte(
RegisterNumber : Word;
BusNumber : Byte;
DevFuncNumber : Byte;
var Result : Byte ): Byte;
Глава 11. Функции BIOS
263
Var _Resu.lt : Byte; Res : Byte; Begin Asm
mov AX, 0B108h mov BH, BusNumber mov BL, DevFuncNumber mov DI, RegisterNumber int IAh mov Res, cl mov _Result, ah End;
Result:= Res;
ReadPCIRegisterByte:= _Result; End;
Function ReadPCIRegisterWord(
RegisterNumber : Word; BusNumber : Byte;
DevFuncNumber : Byte; var Result : Word ): Byte;
Var _Result : Byte; Res : Word; Begin Asm
mov AX, OBl09h mov BH, BusNumber mov BL1 DevFuncNumber mov DI, RegisterNumber int IAh mov Res, cx mov _Result, ah End;
Result:= Res;
ReadPCIRegisterWord:= _Result; End;
Function ReadPCIRegisterDWordf
RegisterNumber : Word; BusNumber : Byte;
264
Часть III. Практика программирования
DevFuncNumber
: Byte; : Longint
var Result
): Byte;
Var _Result : Byte; Res : Longint; Begin Asm
mov AX, OBlOah mov BH, BusNumber mov BL, DevFuncNumber mov DI, RegisterNumber int IAh
{ MOV RES, ECX } db 66h; mov word ptr Res, cx mov _Result, ah End;
Result:= Res;
ReadPCIRegisterDword:= _Result;
Function WritePCIRegisterByte(
): Byte; Var _Result : Byte; Begin Asm
mov AX, OBlObh mov BH, BusNumber mov BL, DevFuncNumber mov DI, RegisterNumber mov CL, Input int IAh
mov _Result, ah End;
WritePCIRegisterByte:= _Result;
end;
RegisterNumber : Word;
BusNumber : Byte;
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100