Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
8-1079384205
Step[B.M.]
2004-03-15 23:56
2004.05.30
Из TImage в БД без необходимости копирования на диск файла


14-1083938202
X9
2004-05-07 17:56
2004.05.30
Winternl.h


7-1083137239
Dj_Mel
2004-04-28 11:27
2004.05.30
3.Как выключать, перезагружать компьютер (и все пункты из заверше


14-1084254602
Vlad Oshin
2004-05-11 09:50
2004.05.30
по одной и той же ссылке хожу на разные страницы. Почему?


1-1084558378
Bulanov
2004-05-14 22:12
2004.05.30
Развернуть приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский