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

Вниз

Работа с портами   Найти похожие ветки 

 
Zheka   (2004-04-20 09:54) [0]

A := Port[20];   {чтение байта из порта 20}
Port[20] := A;   {запись байта в порт 20}
B := PortW[20];  {чтение слова из порта 20-21}
PortW[20] := B;  {запись слова в порт 20-21}

не понимает компилятор такую операцию :(((


 
Юрий Зотов ©   (2004-04-20 10:01) [1]

> Zheka   (20.04.04 09:54)

Windows - среда мультизадачная. Что произойдет, если несколько программ одновременно начнут работать с одним и тем же портом вот так вот напрямую?

Вот поэтому компилятор и не понимает. Написан он так. Нет в Delphi прямой работы с портами.


 
Zheka   (2004-04-20 10:07) [2]

to Юрий Зотов ©   (20.04.04 10:01) [1]

а как же быть??? может есть какой нибудь компонент позволяющий работать с портами???


 
Digitman ©   (2004-04-20 10:17) [3]

тебе зачем этот порт нужен ?


 
Zheka   (2004-04-20 10:26) [4]

to Digitman ©   (20.04.04 10:17) [3]  

нужно написать софт для работы с ISA картой.

Под дос была написана прога на паскале, мне нужно написать под винду. Есть идеи???


 
Anatoly Podgoretsky ©   (2004-04-20 10:29) [5]

Пиши с использование ассемблерных вставок, и готовься к разрушению системы.


 
ssk ©   (2004-04-20 10:29) [6]

иди в конференцию "Система".

http://delphimaster.ru/cgi-bin/forum.pl?n=2

там эти порты обсуждаются через раз. я серьезно.


 
Smithson ©   (2004-04-20 10:33) [7]

Ну или как вариант - пиши драйвер, он может захватить порт в монопольный режим. Подробности - MSDN


 
Digitman ©   (2004-04-20 10:45) [8]


> Zheka   (20.04.04 10:26) [4]


> нужно написать софт для работы с ISA картой


ты разве не заметил, что любой мало-мальски серьезный производитель комп.перифериии поставляет вместе со своей продукцией как минимум один драйвер для каждой ОС, под управлением которой устройство должно работать ? По-твоему, он, производитель, ерундой занимается ?


 
Zheka   (2004-04-20 10:52) [9]

чесслово, просто запугали... у кого нибудь есть ЖИВЫЕ идеи или может кто нибудь занимался этим???


 
Smithson ©   (2004-04-20 10:54) [10]

Повторю специально для тупых:
пиши драйвер, он может захватить порт в монопольный режим. Подробности - MSDN


 
Zheka   (2004-04-20 10:56) [11]

to Digitman ©   (20.04.04 10:45) [8]

плату делали на заказ. Специфичность платы сделала её единственной в своём роде...


 
WondeRu ©   (2004-04-20 10:59) [12]

http://pages.zoom.co.uk/andyc/ntdriver.htm
там и компоненты есть!


 
Digitman ©   (2004-04-20 11:08) [13]


> Zheka   (20.04.04 10:56) [11]


я понимаю.
а далее твоя задача - взяв на вооружение MS DDK написать драйверы карты для КАЖДОЙ платформы, на которой планируется использовать твой "заказной" дивайс

все прочие варианты либо нереализуемы либо из области недокументированных трюков


 
tesseract ©   (2004-04-21 10:01) [14]

можно через WINIO - она позволяет прямой доступ к областям памяти и портам. Можешь при желании написать класс чтобы обращаться как раньше через  Port[].


 
Павел   (2004-04-25 10:43) [15]

Ну можно использовать такой:

unit Port;

interface

uses
 Windows, SysUtils, Classes;

type
 TPort = class(TComponent)
 private
  procedure SetByte(Index:Word;Value:Byte);
  procedure SetWord(Index:Word;Value:Word);
  procedure SetLong(Index:Word;Value:LongWord);
  function  GetByte(Index:Word):Byte;
  function  GetWord(Index:Word):Word;
  function  GetLong(Index:Word):LongWord;
 public
  {свойство для обращения к байтовым портам }
  property Byte [Index:Word] : Byte     read GetByte
                                        write SetByte; default;
  {свойство для обращения к двухбайтовым портам }
  property Word [Index:Word] : Word     read GetWord
                                        write SetWord;
  {свойство для обращения к четырехбайтовым портам }
  property DWord[Index:Word] : LongWord read GetLong
                                        write SetLong;
 end;

procedure Register;

implementation

{Регистрация компонента в палитре компонент}
procedure Register;
begin
 RegisterComponents("System", [TPort]);
end;

{Чтение байта из порта}
function TPort.GetByte(Index: Word): Byte;
begin
asm
 mov dx,Index
 in al,dx
 mov Result,al
end;
end;

{Чтение слова из порта}
function TPort.GetWord(Index: Word): Word;
begin
asm
 mov dx,Index
 in ax,dx
 mov Result,ax
end;
end;

{Чтение двойного слова из порта}
function TPort.GetLong(Index: Word): LongWord;
begin
asm
 mov dx,Index
 in eax,dx
 mov Result,eax
end;
end;

{Запись байта в порт}
procedure TPort.SetByte(Index: Word; Value: Byte);
begin
asm
 mov dx,index
 mov al,Value
 out dx,al
end;
end;

{Запись слова в порт}
procedure TPort.SetWord(Index, Value: Word);
begin
asm
 mov dx,Index
 mov ax,Value
 out dx,ax
end;
end;

{Запись двойного слова в порт}
procedure TPort.SetLong(Index: Word; Value: LongWord);
begin
asm
 mov dx,Index
 mov eax,Value
 out dx,eax
end;
end;

end.

Устанавливаете компонент и вперед. Но этого, как говорил великий комбинатор, крайне мало. Надо еще заиметь полный доступ к портам. Иначе получите ошибку выполнения привелигированной инструкции. Для этого можно использовать драйвер GiveIO или ему аналогичный. Описание и исходники тут (хотя исходников полно в инете):
http://bhv.ftk.spbstu.ru/books/book.php?id=2732
http://www.ozon.ru/context/detail/id/1656093/
Работать будет точно.

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



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

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

Наверх




Память: 0.51 MB
Время: 0.032 c
14-1084284261
296321823
2004-05-11 18:04
2004.05.30
delphigfx.mastak.ru


1-1084879871
ГудБой
2004-05-18 15:31
2004.05.30
Как сделать drag-dock моего окошечка к любой стороне главной форм


1-1084695889
Максим
2004-05-16 12:24
2004.05.30
Курсор


3-1084332193
чайник1
2004-05-12 07:23
2004.05.30
Как записать картинки типа jpg и gif в базу


3-1083833695
Михаил
2004-05-06 12:54
2004.05.30
Подстановочные поля