Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Работа с портом с конкретным адресом. Запись и чтение   Найти похожие ветки 

 
Velimir ©   (2006-04-24 14:18) [0]

Собсно сабж!
Какими в дельфи есть встроенные функции для работы с портом, если у меня есть адрес этого порта...
Хотелось бы найти аналог outport и inport из С.

Сорри если вопрос очень тупой, но я нигде не нашел этих функций... Действительно, как-то тормозом себя чуствую...
Заранее всем спасибо за помощь!


 
MBo ©   (2006-04-24 14:27) [1]

>аналог outport и inport из С
В NT-системах это не работает и в C - прямой доступ к портам запрещен.
Есть специальные драйвера - giveio, WinIO, UserPort и т.д.


 
Velimir ©   (2006-04-25 08:24) [2]

Огромное спасибо за помощь! А то я уже думал, что у меня крыша поехала =)


 
Anatoly Podgoretsky ©   (2006-04-25 09:11) [3]

Velimir ©   (24.04.06 14:18)  
Аналог простой
asm
 IN AL, port
 OUT port, AL

Только ведь дело не в этом, точно также outport и inport не работоспособны даже на Win 3.1 кроме некоторых случаев.


 
isasa ©   (2006-04-26 10:43) [4]

А чем CreateFile обидел?


 
!Fobos ©   (2006-04-28 10:39) [5]

Человеки, у меня та же трабла: нада организовать раюоту с ISA шиной. Мож подскажете, как мона сделать? Заранее благодарю!


 
Сергей М. ©   (2006-04-28 11:18) [6]


> раюоту с ISA шиной


Что есть "работа с ISA шиной" ?


 
!Fobos ©   (2006-04-28 13:07) [7]

Есть плата, которая вешается на ISA шину компа. Надо считывать с нее данные.


 
Сергей М. ©   (2006-04-28 13:31) [8]


> !Fobos ©   (28.04.06 13:07) [7]


> плата, которая вешается на ISA шину компа


Нет никакой разницы, куда она, эта плата, "вешается".

С т.з. процессора и программы существуют порты ввода-вывода (в т.ч. отображенные на пространство адресуемой памяти).


 
Чапаев ©   (2006-04-28 14:48) [9]


> в т.ч. отображенные на пространство адресуемой памяти

Пример можно? Звучит знакомо, а где применяется, не припомню...


 
Сергей М. ©   (2006-04-28 14:58) [10]


> Пример можно?


Можно.

К примеру, эквивалентом

out $XX, $YY

при этом будет

mov [someaddr], $yy


 
Чапаев ©   (2006-04-28 15:12) [11]

Нет, это мне понятно. :-)

Мне хотелось бы узнать о конкретном устройстве, порты которого отображены в память.


> где применяется, не припомню


 
!Fobos ©   (2006-05-02 09:18) [12]


> Сергей М. ©   (28.04.06 13:31) [8]


А можно узнать, как в Делфи считывать данные с порта? Если можно, примерчик....вроде как для того используется CreateFile или я ошибаюсь...


 
Сергей М. ©   (2006-05-02 11:44) [13]


> Чапаев ©   (28.04.06 15:12) [11]


В kernel-mode-драйверах, например, видеокарт.


 
!Fobos ©   (2006-05-03 08:33) [14]


> Сергей М. ©   (28.04.06 13:31) [8]

Если конкретнее, то есть плата, на которой имеется кэш-память объемом 32 Кб. Адрес известен: $300. Нужно считывать с нее данные в массив. Есть прога на Паскале, но там это более-менее понятно организовано. Прога работает под Win95. Перевожу прогу на Делфи и столкнулся с такой вот проблемой. Понятно, что под XP проектировать её не стоит, т.к. шина Isa, под которую собрана плата, в современных компах отсутствует.


 
isasa ©   (2006-05-03 10:49) [15]

Насколько помню, CreateFile работает с именем, а не с адресом.

CreateFile("\\.\<зарегистрированное в системе имя девайса>", ...)


 
!Fobos ©   (2006-05-03 14:12) [16]


> isasa ©   (03.05.06 10:49) [15]

А по моей проблеме ты ничего не знаешь?

Здесь есть кто-нить, кто может мне помочь? Неужели никто такими вещами не занимался??? (помогите бедному лузеру %))


 
isasa ©   (2006-05-03 14:33) [17]

!Fobos ©   (03.05.06 14:12) [16]

У тебя что, секретный девайс, у которого нет имени в системе? :)


 
isasa ©   (2006-05-03 14:36) [18]

:)
В противном случае надо опускаться до уровня зарегистрированных служб(драйверов).


 
!Fobos ©   (2006-05-04 08:13) [19]


> У тебя что, секретный девайс, у которого нет имени в системе?
>  :)


Хм..., ну доберусь до компа с этим девайсом посмотрю как он там называется (раньше об этом не задумывался).
Интересно, а как обзывается девайс в системе, если он собран своими руками?


 
Сергей М. ©   (2006-05-04 08:41) [20]


> !Fobos ©   (04.05.06 08:13) [19]


> как обзывается девайс в системе, если он собран своими руками?


Если дивайс "собран своими руками", то первое что должно прийти в голову - написание драйвера этого дивайса под требуемую ОС. Драйвер этот должен быть полноценным драйвером, отвечающим всем требованиям WDM.

См. NT DDK.


 
!Fobos ©   (2006-05-04 12:51) [21]


> Сергей М. ©   (04.05.06 08:41) [20]


> isasa ©   (03.05.06 14:36) [18]


Ребят, я не большой спец в этих делах и может чего-нить не понимаю, но мне кажется, что прога, которая работает с этой платой, и есть драйвер для нее. По-моему мы уходим от темы. Я просто пытаюсь выяснить, как в Делфи обращаться к портам I/O.


 
Сергей М. ©   (2006-05-04 13:08) [22]


> прога, которая работает с этой платой, и есть драйвер для
> нее


Может и "драйвер". Но не с т.з. Windows.


> как в Делфи обращаться к портам I/O


С портами должен работать kernel-mode-драйвер, в дан. случае тобой разработанный.


 
Elen ©   (2006-05-04 13:15) [23]


>!Fobos ©

Поищи компоненты работы с портом. А вообще помоему CreateFile и вариант с ассемблером (см. выше) лучше не придумаеш для Делфи


 
Сергей М. ©   (2006-05-04 13:18) [24]


> вариант с ассемблером (см. выше)


Где там, "выше", про ассемблер ?


 
Elen ©   (2006-05-04 13:19) [25]


>!Fobos ©

Поищи компоненты работы с портом. А вообще помоему CreateFile и вариант с ассемблером (см. выше) лучше не придумаеш для Делфи


 
krid24 ©   (2006-05-04 13:26) [26]


> Если дивайс "собран своими руками", то первое что должно
> прийти в голову - написание драйвера этого дивайса под требуемую
> ОС

Для ISA платы это не обязательно.


>  как в Делфи обращаться к портам I/O.

Это от системы зависит, а не от языка. А вообще, во втором посте уже ответили - ищешь в инете драйвер giveio.sys (например), из проги его динамически загружаешь, обращаешься к портам асмовыми in и out, потом драйвер выгружаешь. Все. Ну это для NT, а в Win9x можешь напрямую in/out юзать.


 
Сергей М. ©   (2006-05-04 13:32) [27]


> krid24 ©   (04.05.06 13:26) [26]


> Для ISA платы это не обязательно.


Глупости.
Столь же "необязателен" драйвер для любого другого периферийного дивайса на любой другой шине.


> из проги его динамически загружаешь, обращаешься к портам
> асмовыми in и out


А потом запускаешь еще косой десяток оных "прог", и все они наперегонки начинают выполнять свои IN и OUT к одному и тому же порту. Бардак-с) ..


 
krid24 ©   (2006-05-04 15:14) [28]


> Глупости.
> Столь же "необязателен" драйвер для любого другого периферийного
> дивайса на любой другой шине.

Ничего подобного. Не надо все мешать в одну кучу. Речь идет о конкретных платах. Я сам работал не с одной ISA платой, которые не требовали никаких драйверов и управлялись только через порты. И есть девайсы, которые в обязательном порядке требуют драйверов, садятся на прерывания, etc.


> А потом запускаешь еще косой десяток оных "прог", и все
> они наперегонки начинают выполнять свои IN и OUT к одному
> и тому же порту. Бардак-с) ..

Ну по этой логике тот же DOS вообще бы не работал :) На самом деле никакого бардака не будет. Во-первых, несколько инструкций IN одновременно не выполнишь ). Во-вторых, во многих платах предусмотрены задержки после выполнения операций, связанных с доступом к ним по портам. В-третьих, такие же задержки предусматривают и в программах (в тех же драйверах). Так, что возможный бардак зависит не от возможности обращаться к портам, а от кривых рук разработчиков )
Ну а тот же драйвер giveio может спокойно обслуживать все процессы в системе, будь их десяток или сотня.


 
Wal ©   (2006-05-04 15:30) [29]


> Ну по этой логике тот же DOS вообще бы не работал
Дос был однозадачным в доску, в отличие от виндовса.

> Так, что возможный бардак зависит не от возможности обращаться
> к портам, а от кривых рук разработчиков
Вот поэтому разработчики с прямыми руками всегда предоставляют драйвера.

> Я сам работал не с одной ISA платой
Я тоже работал не с одной платой, и не только ISA. В ДОСе без всяких драйверов. В винде тоже можно без драйверов с тем же giveio, но это "костыли", а не нормальная работа.


 
Сергей М. ©   (2006-05-04 15:30) [30]


> krid24 ©   (04.05.06 15:14) [28]


Ты несешь несусветицу, видимую тобой лишь с твоей колокольни.


 
krid24 ©   (2006-05-04 20:51) [31]

Да с какой моей колокольни-то?
Если есть ISA плата, которая (упрощенно) в один порт принимает параметры сигнала, в другой код старта и начинает непрерывно этот сигнал генерить до тех пор, пока не получит код останова, то на кой ей драйвер-то нужен? Писать для какого-нибудь простейшего генератора сигналов WDM?? Ну-ну.. Нужно тогда уж еще и в Microsoft драйвер оттестировать и цифровую подпись получить..
А ведь большое колличество самопальных ISA плат, сделаных для внутреннего пользования, являются чем-то подобным. И именно их я и имел ввиду (а не сплошь и рядом все девайсы подряд, о чем, кстати, говорил).
Так что, не соглашусь с уважаемыми оппонентами -  никаких драйверов для такого рода плат не нужно по-определению. В них просто нет необходимости.
Впрочем, автор вопроса не сказал, что у него за плата, так что спор по сути дела безпредметный получается.


 
!Fobos ©   (2006-05-05 08:04) [32]


> krid24 ©   (04.05.06 20:51) [31]

Согласен с тобой. Для "моего" устройства не было написано драйвера (еще раз повторюсь, что не я изначально разрабатывал плату и софт). Есть только программа, обслуживающая плату.
А что тебя конкретно интересует по плате? Это устройство сбора данных. Как уже писал выше, чтение производится из кэш-памяти по адресу $300.


 
Сергей М. ©   (2006-05-05 08:22) [33]


> krid24 ©   (04.05.06 20:51) [31]


Ну а причем здесь ISA ?
Все тоже самое настолько же справедливо для любого другого дивайса на любой другой шине ..

И WinAPI здесь тоже ни причем, пока речь не идет о взаимодействии с драйвером дивайса документированным способом (CreateFile, Read/WriteFile, DeviceIOControl).


 
!Fobos ©   (2006-05-06 08:22) [34]

Мда...думаю, что здесь мне никто ничем конкретным не поможет...((
Процедурку чтения из порта (а также процедурку записи управляющего слова) я написал  на ассемблере, научил винду ХР-шную не ругаться на асм-вставки (не смейтесь надо мной:))). Вроде что-то читается, но почему то кажется, что читается не то, что нужно. Может ли кто объяснить, как, вызывая чтение из кэш-памяти в массив 32000 раз можно забить весь массив значениями, а точнее откуда она (кэш-память ну или что там за это отвечает) знает, что при каждом следующем обращении к ней мне надо считать следующий байт?
Вы уж извините, если я задаю глупые вопросы....программер из меня не ахти...


 
Сергей М. ©   (2006-05-06 09:06) [35]


> !Fobos ©   (06.05.06 08:22) [34]


Приводи код.


 
!Fobos ©   (2006-05-06 14:48) [36]


> Сергей М. ©   (06.05.06 09:06) [35]


Вот две процедурки работы с портом:

procedure DataIn(PortAddress:word);

var
 ByteValue:byte;

begin
  asm
   push dx
   mov dx, PortAddress
  end;
  for i:=0 to 32767 do
     begin
       asm
       in al,dx
       mov ByteValue,al
       end;
       Data[i]:=ByteValue;
     end;
  asm
   pop dx
  end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word);

asm
 push dx
 mov dx,PortAddress
 mov al,ByteValue
 out dx,al
 pop dx

end;

Запуская программу в пошаговом режиме и следя за массивом Data я заметил, что вне зависимости от того, к какому порту я обращаюсь, этот массив забивается практически одними и теми же значениями...
Плюс еще в первоначальной проге используются 2 порта с адресами $20 и $21. Что за порты, ума не приложу, возможно они испоьзуются для обработки прерываний...


 
Сергей М. ©   (2006-05-06 15:53) [37]

procedure DataIn(PortAddress:word);
var
ByteValue:byte;
Addr: Word;
begin
 Addr := PortAddress; //параметр PortAddress передается через eax, запомним его в лок.переменной
 for i:=0 to 32767 do
    begin
      asm
       push eax
       push edx        
       mov dx, Addr
       in al,dx
       mov ByteValue,al
       pop edx
       pop eax
      end;
      Data[i]:=ByteValue;
    end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word);
asm
//ByteValue передается в eax
//PortAddress - в edx
out dx,al
end;


> массив забивается практически одними и теми же значениями


А где написано, что должен разными ?
Док-ция на дивайс от производителя имеется ?


 
krid24 ©   (2006-05-06 18:14) [38]


> Ну а причем здесь ISA ?

Да вобщем-то ни причем, просто !Fobos говорил про плату на ISA шине.


> Плюс еще в первоначальной проге используются 2 порта с адресами
> $20 и $21. Что за порты, ума не приложу, возможно они испоьзуются
> для обработки прерываний...

В принципе да, эти порты используются при программировании контроллера прерываний.


 
isasa ©   (2006-05-07 11:46) [39]

Умные дадьки и тетки карячились, думали, как заставить это железо одновременно читать порт, слушать музыку, ограть в Blitzkriag ... а ты со своими командами :)
В, общем, выхода два:
1. Послать дядек и теток, загрузить Win98 и ниже, и наслаждаться.
2. "Вписать" работу с железом в требования дядек и теток(т.е. на уровне драйверов), и работать через CreateFile.


 
!Fobos ©   (2006-05-10 08:17) [40]


> Сергей М. ©   (06.05.06 15:53) [37]


Документации на девайс нету, разве что дипломная работа.
Массив, как мне кажется, забивается разными значениями, т.к., синусоиду, к примеру, прога рисует нормально(то есть она синусоида, а не прямая линия).
На данный момент проблема именно в считывании сигнала с порта(кэш-памяти), остальное все уже практически переписал для Делфи. Сейчас програма что-то считывает, но это явно не тот уже хотя бы потому, чьл какой бы я номер порта не ставил, картинка выглядит одинаково. На паскалевском варианте программы написана процедура обработки прерывания. Как перевести её на Делфи я пока понятия не имею, но мне кажется что проблема сейчас именно в этом.



Страницы: 1 2 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.049 c
3-1152278195
antoxa2005
2006-07-07 17:16
2006.09.17
Как можно получить драйвер Gemini ODBC?


15-1155935385
Ketmar
2006-08-19 01:09
2006.09.17
господа киевляне, сколь кейчас стоит снимать квартиру?


1-1154875143
ancot
2006-08-06 18:39
2006.09.17
Как правильно зарегистрировать наследника TFrame


1-1155021622
Shaman_
2006-08-08 11:20
2006.09.17
Автоматический LOG программы


5-1139322583
Creative
2006-02-07 17:29
2006.09.17
Override процедуры Paint