Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 18:47   #1
Volodya199
Новичок
Джуниор
 
Регистрация: 14.12.2010
Сообщений: 1
По умолчанию

Привет. Как можно записать в PCI порт данные, например 12 бит по определенному адресу и затем считать определенное количество бит из другого адреса. Нужны стандартные функции языка, без всяких сторонних библиотек (хотя можно и с ними, но лучше без)?
PS. ОС не даст записать напрямую, я это понимаю, поэтому ограничение ОС опускаем. Спасибо.

вот нашел функцию для записи в порт:
outportb - запись в порт байта
outportb - запись в порт слова.
аналогичные для чтения(in).
Так вот вопрос как записать именно 12 байт? и считать потом 14 например из порта?

Последний раз редактировалось Stilet; 14.12.2010 в 20:55.
Volodya199 вне форума Ответить с цитированием
Старый 14.12.2010, 20:17   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

если под dos, вот вам адреса, сами ковыряйте...
Код:
function writePCIRegisterByte(RegisterNumber:word;BusNumber:Byte;FunctionNumber:Byte;input:byte):boolean;
var okay:boolean;
begin
  okay:=false;
  asm
    db 66h; pusha
    mov AX,0B10bh
    mov BH,busNumber
    mov BL,functionNumber
    mov DI,RegisterNumber
    mov CL,input
    int 1Ah
    jc @noaction
    mov okay,true
  @noaction:
    db 66h; popa
  end;
  writePCIRegisterByte:=okay;
end;

function writePCIRegisterWord(RegisterNumber:word;BusNumber:Byte;FunctionNumber:Byte;input:word):boolean;
var okay:boolean;
begin
  okay:=false;
  asm
    db 66h; pusha
    mov AX,0B10ch
    mov BH,busNumber
    mov BL,functionNumber
    mov DI,RegisterNumber
    mov CX,input
    int 1Ah
    jc @noaction
    mov okay,true
  @noaction:
    db 66h; popa
  end;
  writePCIRegisterWord:=okay;
end;

function writePCIRegisterDWord(RegisterNumber:word;BusNumber:Byte;FunctionNumber:Byte;input:longint):boolean;
var okay:boolean;
    res:byte;
begin
  okay:=false;
  res:=0;
  asm
    db 66h; pusha
    mov AX,0B10dh
    mov BH,busNumber
    mov BL,functionNumber
    mov DI,RegisterNumber
    db 66h; mov CX, word ptr input
    int 1Ah
    jc @noaction
    mov okay,true
  @noaction:
    db 66h; popa
  end;
  writePCIRegisterDWord:=okay;
end;
так было на паскале, на си, думайте сами.

Ежели под винды, то фраза:
Цитата:
поэтому ограничение ОС опускаем
говорит о том, что вы не в теме... почитать на досуге 1 2 и скачайте DDK.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа двух звуковых: интегрированной и PCI ArtInt Компьютерное железо 0 28.10.2010 21:08
Работа с COM-портом Georgios Общие вопросы Delphi 12 28.09.2010 10:31
Работа с com портом Speeker Общие вопросы Delphi 1 06.09.2010 19:37
программная работа с портом pci [linux?] arcer Win Api 7 25.08.2010 22:30
работа с портом Assemblerru Win Api 16 10.06.2010 20:00